summaryrefslogtreecommitdiff
path: root/protocols/Telegram/tgl/zlib
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Telegram/tgl/zlib')
-rw-r--r--protocols/Telegram/tgl/zlib/CMakeLists.txt249
-rw-r--r--protocols/Telegram/tgl/zlib/ChangeLog1472
-rw-r--r--protocols/Telegram/tgl/zlib/FAQ368
-rw-r--r--protocols/Telegram/tgl/zlib/INDEX68
-rw-r--r--protocols/Telegram/tgl/zlib/Makefile5
-rw-r--r--protocols/Telegram/tgl/zlib/Makefile.in288
-rw-r--r--protocols/Telegram/tgl/zlib/README115
-rw-r--r--protocols/Telegram/tgl/zlib/adler32.c179
-rw-r--r--protocols/Telegram/tgl/zlib/amiga/Makefile.pup69
-rw-r--r--protocols/Telegram/tgl/zlib/amiga/Makefile.sas68
-rw-r--r--protocols/Telegram/tgl/zlib/as400/bndsrc215
-rw-r--r--protocols/Telegram/tgl/zlib/as400/compile.clp110
-rw-r--r--protocols/Telegram/tgl/zlib/as400/readme.txt115
-rw-r--r--protocols/Telegram/tgl/zlib/as400/zlib.inc451
-rw-r--r--protocols/Telegram/tgl/zlib/compress.c80
-rw-r--r--protocols/Telegram/tgl/zlib/configure831
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/README.contrib78
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/ada/buffer_demo.adb106
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/ada/mtest.adb156
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/ada/read.adb156
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/ada/readme.txt65
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/ada/test.adb463
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/ada/zlib-streams.adb225
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/ada/zlib-streams.ads114
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/ada/zlib-thin.adb141
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/ada/zlib-thin.ads450
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/ada/zlib.adb701
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/ada/zlib.ads328
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/ada/zlib.gpr20
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/amd64/amd64-match.S452
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/asm686/README.68651
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/asm686/match.S357
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/blast/Makefile8
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/blast/README4
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/blast/blast.c446
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/blast/blast.h75
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/blast/test.pkbin0 -> 8 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/blast/test.txt1
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/delphi/ZLib.pas557
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/delphi/ZLibConst.pas11
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/delphi/readme.txt76
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/delphi/zlibd32.mak99
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib.build33
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib.chmbin0 -> 72726 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib.sln21
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs58
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs202
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs83
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/CodecBase.cs198
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/Deflater.cs106
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/DotZLib.cs288
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj141
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/GZipStream.cs301
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/Inflater.cs105
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/UnitTests.cs274
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/dotzlib/LICENSE_1_0.txt23
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/dotzlib/readme.txt58
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/gcc_gvmat64/gvmat64.S574
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/infback9/README1
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/infback9/infback9.c615
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/infback9/infback9.h37
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/infback9/inffix9.h107
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/infback9/inflate9.h47
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/infback9/inftree9.c324
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/infback9/inftree9.h61
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/inflate86/inffas86.c1157
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/inflate86/inffast.S1368
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/iostream/test.cpp24
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/iostream/zfstream.cpp329
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/iostream/zfstream.h128
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/iostream2/zstream.h307
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/iostream2/zstream_test.cpp25
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/iostream3/README35
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/iostream3/TODO17
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/iostream3/test.cc50
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/iostream3/zfstream.cc479
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/iostream3/zfstream.h466
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/masmx64/bld_ml64.bat2
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/masmx64/gvmat64.asm553
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/masmx64/inffas8664.c186
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/masmx64/inffasx64.asm396
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/masmx64/readme.txt31
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/masmx86/bld_ml32.bat2
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/masmx86/inffas32.asm1080
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/masmx86/match686.asm479
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/masmx86/readme.txt27
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/Makefile25
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/Makefile.am45
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/MiniZip64_Changes.txt6
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/MiniZip64_info.txt74
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/configure.ac32
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/crypt.h131
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/ioapi.c247
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/ioapi.h208
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/iowin32.c461
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/iowin32.h28
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/make_vms.com25
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/miniunz.c660
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/miniunzip.163
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/minizip.146
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/minizip.c520
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/minizip.pc.in12
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/mztools.c291
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/mztools.h37
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/unzip.c2125
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/unzip.h437
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/zip.c2007
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/minizip/zip.h362
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/pascal/example.pas599
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/pascal/readme.txt76
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/pascal/zlibd32.mak99
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/pascal/zlibpas.pas276
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/puff/Makefile42
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/puff/README63
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/puff/puff.c840
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/puff/puff.h35
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/puff/pufftest.c165
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/puff/zeros.rawbin0 -> 2517 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/testzlib/testzlib.c275
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/testzlib/testzlib.txt10
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/untgz/Makefile14
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/untgz/Makefile.msc17
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/untgz/untgz.c674
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/readme.txt65
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/miniunz.vcxproj310
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters22
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/minizip.vcxproj307
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters22
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/testzlib.vcxproj420
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters58
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj310
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters22
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlib.rc32
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibstat.vcxproj473
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters77
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibvc.def143
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibvc.sln135
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibvc.vcxproj657
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters118
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/miniunz.vcxproj314
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/minizip.vcxproj311
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/testzlib.vcxproj426
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj314
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/adler32.cod610
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/adler32.objbin0 -> 49576 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/compress.cod214
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/compress.objbin0 -> 46353 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/crc32.cod3150
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/crc32.objbin0 -> 73072 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/deflate.cod6858
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/deflate.objbin0 -> 112701 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzclose.cod87
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzclose.objbin0 -> 113708 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzlib.cod2360
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzlib.objbin0 -> 129376 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzread.cod2216
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzread.objbin0 -> 131934 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzwrite.cod1895
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzwrite.objbin0 -> 128898 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/infback.cod4354
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/infback.objbin0 -> 78037 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inffast.cod990
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inffast.objbin0 -> 52409 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inflate.cod7621
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inflate.objbin0 -> 108025 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inftrees.cod1069
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inftrees.objbin0 -> 51845 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/ioapi.cod882
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/ioapi.objbin0 -> 123214 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/iowin32.cod1691
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/iowin32.objbin0 -> 136327 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/trees.cod5535
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/trees.objbin0 -> 95561 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/uncompr.cod159
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/uncompr.objbin0 -> 45830 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/unzip.cod7065
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/unzip.objbin0 -> 172491 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zip.cod7727
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zip.objbin0 -> 187557 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlib.resbin0 -> 884 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.log25
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/CL.command.1.tlogbin0 -> 19578 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/CL.read.1.tlogbin0 -> 400204 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/CL.write.1.tlogbin0 -> 12154 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/link.command.1.tlogbin0 -> 6952 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/link.read.1.tlogbin0 -> 14136 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/link.write.1.tlogbin0 -> 9290 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/rc.command.1.tlogbin0 -> 440 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/rc.read.1.tlogbin0 -> 2260 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/rc.write.1.tlogbin0 -> 352 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/zlibvc.lastbuildstate2
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/zlibvc.write.1u.tlogbin0 -> 574 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibwapi.Build.CppClean.log31
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zutil.cod259
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zutil.objbin0 -> 123610 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/vc140.pdbbin0 -> 135168 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.dllbin0 -> 94720 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.expbin0 -> 15693 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.iobjbin0 -> 500595 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.ipdbbin0 -> 87216 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.libbin0 -> 26702 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.map861
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.pdbbin0 -> 724992 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/adler32.objbin0 -> 17467 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/compress.objbin0 -> 15252 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/crc32.objbin0 -> 29628 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/deflate.objbin0 -> 59709 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/gzclose.objbin0 -> 13200 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/gzlib.objbin0 -> 34037 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/gzread.objbin0 -> 30696 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/gzwrite.objbin0 -> 30280 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/infback.objbin0 -> 32631 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/inffast.objbin0 -> 18811 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/inflate.objbin0 -> 56907 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/inftrees.objbin0 -> 18722 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/ioapi.objbin0 -> 27602 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/trees.objbin0 -> 52297 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/uncompr.objbin0 -> 13796 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/unzip.objbin0 -> 80632 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zip.objbin0 -> 95280 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlib.resbin0 -> 884 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.Build.CppClean.log30
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.log20
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/CL.command.1.tlogbin0 -> 16478 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/CL.read.1.tlogbin0 -> 379024 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/CL.write.1.tlogbin0 -> 11658 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/Lib-link-cvtres.read.1.tlogbin0 -> 8266 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/Lib-link-cvtres.write.1.tlogbin0 -> 4246 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/lib.command.1.tlogbin0 -> 5884 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/rc.command.1.tlogbin0 -> 422 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/rc.read.1.tlogbin0 -> 2260 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/rc.write.1.tlogbin0 -> 354 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/zlibstat.lastbuildstate2
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zutil.objbin0 -> 16816 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/zlibstat.libbin0 -> 658516 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/zlibstat.pdbbin0 -> 126976 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlib.rc32
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlibstat.vcxproj465
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlibvc.def143
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlibvc.sln117
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlibvc.vcxproj689
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/miniunz.vcproj565
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/minizip.vcproj562
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/testzlib.vcproj852
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/testzlibdll.vcproj565
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlib.rc32
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlibstat.vcproj835
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlibvc.def143
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlibvc.sln144
-rw-r--r--protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlibvc.vcproj1156
-rw-r--r--protocols/Telegram/tgl/zlib/crc32.c425
-rw-r--r--protocols/Telegram/tgl/zlib/crc32.h441
-rw-r--r--protocols/Telegram/tgl/zlib/deflate.c1967
-rw-r--r--protocols/Telegram/tgl/zlib/deflate.h346
-rw-r--r--protocols/Telegram/tgl/zlib/doc/algorithm.txt209
-rw-r--r--protocols/Telegram/tgl/zlib/doc/rfc1950.txt619
-rw-r--r--protocols/Telegram/tgl/zlib/doc/rfc1951.txt955
-rw-r--r--protocols/Telegram/tgl/zlib/doc/rfc1952.txt675
-rw-r--r--protocols/Telegram/tgl/zlib/doc/txtvsbin.txt107
-rw-r--r--protocols/Telegram/tgl/zlib/examples/README.examples49
-rw-r--r--protocols/Telegram/tgl/zlib/examples/enough.c572
-rw-r--r--protocols/Telegram/tgl/zlib/examples/fitblk.c233
-rw-r--r--protocols/Telegram/tgl/zlib/examples/gun.c702
-rw-r--r--protocols/Telegram/tgl/zlib/examples/gzappend.c504
-rw-r--r--protocols/Telegram/tgl/zlib/examples/gzjoin.c449
-rw-r--r--protocols/Telegram/tgl/zlib/examples/gzlog.c1059
-rw-r--r--protocols/Telegram/tgl/zlib/examples/gzlog.h91
-rw-r--r--protocols/Telegram/tgl/zlib/examples/zlib_how.html545
-rw-r--r--protocols/Telegram/tgl/zlib/examples/zpipe.c205
-rw-r--r--protocols/Telegram/tgl/zlib/examples/zran.c409
-rw-r--r--protocols/Telegram/tgl/zlib/gzclose.c25
-rw-r--r--protocols/Telegram/tgl/zlib/gzguts.h209
-rw-r--r--protocols/Telegram/tgl/zlib/gzlib.c634
-rw-r--r--protocols/Telegram/tgl/zlib/gzread.c594
-rw-r--r--protocols/Telegram/tgl/zlib/gzwrite.c577
-rw-r--r--protocols/Telegram/tgl/zlib/infback.c640
-rw-r--r--protocols/Telegram/tgl/zlib/inffast.c340
-rw-r--r--protocols/Telegram/tgl/zlib/inffast.h11
-rw-r--r--protocols/Telegram/tgl/zlib/inffixed.h94
-rw-r--r--protocols/Telegram/tgl/zlib/inflate.c1512
-rw-r--r--protocols/Telegram/tgl/zlib/inflate.h122
-rw-r--r--protocols/Telegram/tgl/zlib/inftrees.c306
-rw-r--r--protocols/Telegram/tgl/zlib/inftrees.h62
-rw-r--r--protocols/Telegram/tgl/zlib/make_vms.com867
-rw-r--r--protocols/Telegram/tgl/zlib/msdos/Makefile.bor115
-rw-r--r--protocols/Telegram/tgl/zlib/msdos/Makefile.dj2104
-rw-r--r--protocols/Telegram/tgl/zlib/msdos/Makefile.emx69
-rw-r--r--protocols/Telegram/tgl/zlib/msdos/Makefile.msc112
-rw-r--r--protocols/Telegram/tgl/zlib/msdos/Makefile.tc100
-rw-r--r--protocols/Telegram/tgl/zlib/nintendods/Makefile126
-rw-r--r--protocols/Telegram/tgl/zlib/nintendods/README5
-rw-r--r--protocols/Telegram/tgl/zlib/old/Makefile.emx69
-rw-r--r--protocols/Telegram/tgl/zlib/old/Makefile.riscos151
-rw-r--r--protocols/Telegram/tgl/zlib/old/README3
-rw-r--r--protocols/Telegram/tgl/zlib/old/descrip.mms48
-rw-r--r--protocols/Telegram/tgl/zlib/old/os2/Makefile.os2136
-rw-r--r--protocols/Telegram/tgl/zlib/old/os2/zlib.def51
-rw-r--r--protocols/Telegram/tgl/zlib/old/visual-basic.txt160
-rw-r--r--protocols/Telegram/tgl/zlib/qnx/package.qpg141
-rw-r--r--protocols/Telegram/tgl/zlib/test/example.c601
-rw-r--r--protocols/Telegram/tgl/zlib/test/infcover.c671
-rw-r--r--protocols/Telegram/tgl/zlib/test/minigzip.c651
-rw-r--r--protocols/Telegram/tgl/zlib/treebuild.xml116
-rw-r--r--protocols/Telegram/tgl/zlib/trees.c1226
-rw-r--r--protocols/Telegram/tgl/zlib/trees.h128
-rw-r--r--protocols/Telegram/tgl/zlib/uncompr.c59
-rw-r--r--protocols/Telegram/tgl/zlib/watcom/watcom_f.mak43
-rw-r--r--protocols/Telegram/tgl/zlib/watcom/watcom_l.mak43
-rw-r--r--protocols/Telegram/tgl/zlib/win32/DLL_FAQ.txt397
-rw-r--r--protocols/Telegram/tgl/zlib/win32/Makefile.bor110
-rw-r--r--protocols/Telegram/tgl/zlib/win32/Makefile.gcc182
-rw-r--r--protocols/Telegram/tgl/zlib/win32/Makefile.msc163
-rw-r--r--protocols/Telegram/tgl/zlib/win32/README-WIN32.txt103
-rw-r--r--protocols/Telegram/tgl/zlib/win32/VisualC.txt3
-rw-r--r--protocols/Telegram/tgl/zlib/win32/zlib.def86
-rw-r--r--protocols/Telegram/tgl/zlib/win32/zlib1.rc40
-rw-r--r--protocols/Telegram/tgl/zlib/zconf.h511
-rw-r--r--protocols/Telegram/tgl/zlib/zconf.h.cmakein513
-rw-r--r--protocols/Telegram/tgl/zlib/zconf.h.in511
-rw-r--r--protocols/Telegram/tgl/zlib/zlib.3151
-rw-r--r--protocols/Telegram/tgl/zlib/zlib.3.pdfbin0 -> 8734 bytes
-rw-r--r--protocols/Telegram/tgl/zlib/zlib.h1768
-rw-r--r--protocols/Telegram/tgl/zlib/zlib.map83
-rw-r--r--protocols/Telegram/tgl/zlib/zlib.pc.cmakein13
-rw-r--r--protocols/Telegram/tgl/zlib/zlib.pc.in13
-rw-r--r--protocols/Telegram/tgl/zlib/zlib2ansi152
-rw-r--r--protocols/Telegram/tgl/zlib/zutil.c324
-rw-r--r--protocols/Telegram/tgl/zlib/zutil.h253
328 files changed, 125056 insertions, 0 deletions
diff --git a/protocols/Telegram/tgl/zlib/CMakeLists.txt b/protocols/Telegram/tgl/zlib/CMakeLists.txt
new file mode 100644
index 0000000000..0c0247cc51
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/CMakeLists.txt
@@ -0,0 +1,249 @@
+cmake_minimum_required(VERSION 2.4.4)
+set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
+
+project(zlib C)
+
+set(VERSION "1.2.8")
+
+option(ASM686 "Enable building i686 assembly implementation")
+option(AMD64 "Enable building amd64 assembly implementation")
+
+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()
+
+if(CMAKE_COMPILER_IS_GNUCC)
+ if(ASM686)
+ set(ZLIB_ASMS contrib/asm686/match.S)
+ elseif (AMD64)
+ set(ZLIB_ASMS contrib/amd64/amd64-match.S)
+ endif ()
+
+ if(ZLIB_ASMS)
+ add_definitions(-DASMV)
+ set_source_files_properties(${ZLIB_ASMS} PROPERTIES LANGUAGE C COMPILE_FLAGS -DNO_UNDERLINE)
+ endif()
+endif()
+
+if(MSVC)
+ if(ASM686)
+ ENABLE_LANGUAGE(ASM_MASM)
+ set(ZLIB_ASMS
+ contrib/masmx86/inffas32.asm
+ contrib/masmx86/match686.asm
+ )
+ elseif (AMD64)
+ ENABLE_LANGUAGE(ASM_MASM)
+ set(ZLIB_ASMS
+ contrib/masmx64/gvmat64.asm
+ contrib/masmx64/inffasx64.asm
+ )
+ endif()
+
+ if(ZLIB_ASMS)
+ add_definitions(-DASMV -DASMINF)
+ endif()
+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_ASMS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
+add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
+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)
+ 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
+#============================================================================
+
+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()
diff --git a/protocols/Telegram/tgl/zlib/ChangeLog b/protocols/Telegram/tgl/zlib/ChangeLog
new file mode 100644
index 0000000000..f22aabaef5
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/ChangeLog
@@ -0,0 +1,1472 @@
+
+ ChangeLog file for zlib
+
+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 unintialized 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
+- Suport 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 libary 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 indeterminancy
+- 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 assmebler 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 .
+- 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 <stdio.h> 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 <memory.h> 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
+- Enchance 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 <info@winimage.com>
+ 386 asm code replacing longest_match().
+ contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
+ A C++ I/O streams interface to the zlib gz* functions
+ contrib/iostream2/ by Tyge Løvset <Tyge.Lovset@cmr.no>
+ Another C++ I/O streams interface
+ contrib/untgz/ by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
+ A very simple tar.gz file extractor using zlib
+ contrib/visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
+ 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 generated 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
+- simplied 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/protocols/Telegram/tgl/zlib/FAQ b/protocols/Telegram/tgl/zlib/FAQ
new file mode 100644
index 0000000000..99b7cf92e4
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/FAQ
@@ -0,0 +1,368 @@
+
+ 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 lastest 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. Pointers to the
+ precompiled DLL are found in the zlib web site at http://zlib.net/ .
+
+ 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 <zlib.h>, 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/protocols/Telegram/tgl/zlib/INDEX b/protocols/Telegram/tgl/zlib/INDEX
new file mode 100644
index 0000000000..2ba0641204
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/Makefile b/protocols/Telegram/tgl/zlib/Makefile
new file mode 100644
index 0000000000..6bba86c73f
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/Makefile
@@ -0,0 +1,5 @@
+all:
+ -@echo "Please use ./configure first. Thank you."
+
+distclean:
+ make -f Makefile.in distclean
diff --git a/protocols/Telegram/tgl/zlib/Makefile.in b/protocols/Telegram/tgl/zlib/Makefile.in
new file mode 100644
index 0000000000..c61aa3008d
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/Makefile.in
@@ -0,0 +1,288 @@
+# Makefile for zlib
+# Copyright (C) 1995-2013 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 use the asm code, type:
+# cp contrib/asm?86/match.S ./match.S
+# make LOC=-DASMV OBJA=match.o
+
+# 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 -DDEBUG
+#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
+# -Wstrict-prototypes -Wmissing-prototypes
+
+SFLAGS=-O
+LDFLAGS=
+TEST_LDFLAGS=-L. libz.a
+LDSHARED=$(CC)
+CPP=$(CC) -E
+
+STATICLIB=libz.a
+SHAREDLIB=libz.so
+SHAREDLIBV=libz.so.1.2.8
+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
+
+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 | ./minigzip | ./minigzip -d && ./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 | ./minigzipsh | ./minigzipsh -d && ./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 | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64; then \
+ echo ' *** zlib 64-bit test OK ***'; \
+ else \
+ echo ' *** zlib 64-bit test FAILED ***'; false; \
+ fi; \
+ rm -f $$TMP64
+
+infcover.o: test/infcover.c zlib.h zconf.h
+ $(CC) $(CFLAGS) -I. -c -o $@ test/infcover.c
+
+infcover: infcover.o libz.a
+ $(CC) $(CFLAGS) -o $@ infcover.o libz.a
+
+cover: infcover
+ rm -f *.gcda
+ ./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: test/example.c zlib.h zconf.h
+ $(CC) $(CFLAGS) -I. -c -o $@ test/example.c
+
+minigzip.o: test/minigzip.c zlib.h zconf.h
+ $(CC) $(CFLAGS) -I. -c -o $@ test/minigzip.c
+
+example64.o: test/example.c zlib.h zconf.h
+ $(CC) $(CFLAGS) -I. -D_FILE_OFFSET_BITS=64 -c -o $@ test/example.c
+
+minigzip64.o: test/minigzip.c zlib.h zconf.h
+ $(CC) $(CFLAGS) -I. -D_FILE_OFFSET_BITS=64 -c -o $@ test/minigzip.c
+
+.SUFFIXES: .lo
+
+.c.lo:
+ -@mkdir objs 2>/dev/null || test -d objs
+ $(CC) $(SFLAGS) -DPIC -c -o objs/$*.o $<
+ -@mv objs/$*.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) -o $@ example.o $(TEST_LDFLAGS)
+
+minigzip$(EXE): minigzip.o $(STATICLIB)
+ $(CC) $(CFLAGS) -o $@ minigzip.o $(TEST_LDFLAGS)
+
+examplesh$(EXE): example.o $(SHAREDLIBV)
+ $(CC) $(CFLAGS) -o $@ example.o -L. $(SHAREDLIBV)
+
+minigzipsh$(EXE): minigzip.o $(SHAREDLIBV)
+ $(CC) $(CFLAGS) -o $@ minigzip.o -L. $(SHAREDLIBV)
+
+example64$(EXE): example64.o $(STATICLIB)
+ $(CC) $(CFLAGS) -o $@ example64.o $(TEST_LDFLAGS)
+
+minigzip64$(EXE): minigzip64.o $(STATICLIB)
+ $(CC) $(CFLAGS) -o $@ minigzip64.o $(TEST_LDFLAGS)
+
+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
+ cp $(STATICLIB) $(DESTDIR)$(libdir)
+ chmod 644 $(DESTDIR)$(libdir)/$(STATICLIB)
+ -@($(RANLIB) $(DESTDIR)$(libdir)/libz.a || true) >/dev/null 2>&1
+ -@if test -n "$(SHAREDLIBV)"; then \
+ 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
+ cp zlib.3 $(DESTDIR)$(man3dir)
+ chmod 644 $(DESTDIR)$(man3dir)/zlib.3
+ 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
+ cp 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: zlib.3
+ groff -mandoc -f H -T ps zlib.3 | ps2pdf - zlib.3.pdf
+
+zconf.h.cmakein: 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 zconf.h.in > zconf.h.cmakein &&\
+ touch -r zconf.h.in zconf.h.cmakein &&\
+ rm $$TEMPFILE
+
+zconf: zconf.h.in
+ cp -p zconf.h.in zconf.h
+
+mostlyclean: clean
+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 docs
+ rm -f Makefile zlib.pc configure.log
+ -@rm -f .DS_Store
+ -@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 Makefile.in Makefile
+
+tags:
+ etags *.[ch]
+
+depend:
+ makedepend -- $(CFLAGS) -- *.[ch]
+
+# DO NOT DELETE THIS LINE -- make depend depends on it.
+
+adler32.o zutil.o: zutil.h zlib.h zconf.h
+gzclose.o gzlib.o gzread.o gzwrite.o: zlib.h zconf.h gzguts.h
+compress.o example.o minigzip.o uncompr.o: zlib.h zconf.h
+crc32.o: zutil.h zlib.h zconf.h crc32.h
+deflate.o: deflate.h zutil.h zlib.h zconf.h
+infback.o inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h
+inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
+inftrees.o: zutil.h zlib.h zconf.h inftrees.h
+trees.o: deflate.h zutil.h zlib.h zconf.h trees.h
+
+adler32.lo zutil.lo: zutil.h zlib.h zconf.h
+gzclose.lo gzlib.lo gzread.lo gzwrite.lo: zlib.h zconf.h gzguts.h
+compress.lo example.lo minigzip.lo uncompr.lo: zlib.h zconf.h
+crc32.lo: zutil.h zlib.h zconf.h crc32.h
+deflate.lo: deflate.h zutil.h zlib.h zconf.h
+infback.lo inflate.lo: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h
+inffast.lo: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
+inftrees.lo: zutil.h zlib.h zconf.h inftrees.h
+trees.lo: deflate.h zutil.h zlib.h zconf.h trees.h
diff --git a/protocols/Telegram/tgl/zlib/README b/protocols/Telegram/tgl/zlib/README
new file mode 100644
index 0000000000..5ca9d127ed
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/README
@@ -0,0 +1,115 @@
+ZLIB DATA COMPRESSION LIBRARY
+
+zlib 1.2.8 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 <zlib@gzip.org>, or to Gilles Vollant
+<info@winimage.com> 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 <markn@ieee.org> wrote an article about zlib for the Jan. 1997
+issue of Dr. Dobb's Journal; a copy of the article is available at
+http://marknelson.us/1997/01/01/zlib-engine/ .
+
+The changes made in version 1.2.8 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, documented at
+http://java.sun.com/developer/technicalArticles/Programming/compression/ .
+
+A Perl interface to zlib written by Paul Marquess <pmqs@cpan.org> is available
+at CPAN (Comprehensive Perl Archive Network) sites, including
+http://search.cpan.org/~pmqs/IO-Compress-Zlib/ .
+
+A Python interface to zlib written by A.M. Kuchling <amk@amk.ca> 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 <info@winimage.com>, 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 (formely 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-2013 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.
+
+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/protocols/Telegram/tgl/zlib/adler32.c b/protocols/Telegram/tgl/zlib/adler32.c
new file mode 100644
index 0000000000..a868f073d8
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/adler32.c
@@ -0,0 +1,179 @@
+/* adler32.c -- compute the Adler-32 checksum of a data stream
+ * Copyright (C) 1995-2011 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#include "zutil.h"
+
+#define local static
+
+local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
+
+#define BASE 65521 /* 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(adler, buf, len)
+ uLong adler;
+ const Bytef *buf;
+ uInt 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);
+}
+
+/* ========================================================================= */
+local uLong adler32_combine_(adler1, adler2, len2)
+ 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 >= (BASE << 1)) sum2 -= (BASE << 1);
+ if (sum2 >= BASE) sum2 -= BASE;
+ return sum1 | (sum2 << 16);
+}
+
+/* ========================================================================= */
+uLong ZEXPORT adler32_combine(adler1, adler2, len2)
+ uLong adler1;
+ uLong adler2;
+ z_off_t len2;
+{
+ return adler32_combine_(adler1, adler2, len2);
+}
+
+uLong ZEXPORT adler32_combine64(adler1, adler2, len2)
+ uLong adler1;
+ uLong adler2;
+ z_off64_t len2;
+{
+ return adler32_combine_(adler1, adler2, len2);
+}
diff --git a/protocols/Telegram/tgl/zlib/amiga/Makefile.pup b/protocols/Telegram/tgl/zlib/amiga/Makefile.pup
new file mode 100644
index 0000000000..8940c120fb
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/amiga/Makefile.sas b/protocols/Telegram/tgl/zlib/amiga/Makefile.sas
new file mode 100644
index 0000000000..749e291527
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/amiga/Makefile.sas
@@ -0,0 +1,68 @@
+# SMakefile for zlib
+# Modified from the standard UNIX Makefile Copyright Jean-loup Gailly
+# Osma Ahvenlampi <Osma.Ahvenlampi@hut.fi>
+# 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 $@ <from <
+$(SCOPTIONS)
+<
+
+# 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/protocols/Telegram/tgl/zlib/as400/bndsrc b/protocols/Telegram/tgl/zlib/as400/bndsrc
new file mode 100644
index 0000000000..98814fd4c1
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/as400/bndsrc
@@ -0,0 +1,215 @@
+STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('ZLIB')
+
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+/* Version 1.1.3 entry points. */
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+
+/********************************************************************/
+/* *MODULE ADLER32 ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("adler32")
+
+/********************************************************************/
+/* *MODULE COMPRESS ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("compress")
+ EXPORT SYMBOL("compress2")
+
+/********************************************************************/
+/* *MODULE CRC32 ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("crc32")
+ EXPORT SYMBOL("get_crc_table")
+
+/********************************************************************/
+/* *MODULE DEFLATE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ 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_")
+
+/********************************************************************/
+/* *MODULE GZIO ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ 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")
+
+/********************************************************************/
+/* *MODULE INFLATE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("inflate")
+ EXPORT SYMBOL("inflateEnd")
+ EXPORT SYMBOL("inflateSetDictionary")
+ EXPORT SYMBOL("inflateSync")
+ EXPORT SYMBOL("inflateReset")
+ EXPORT SYMBOL("inflateInit_")
+ EXPORT SYMBOL("inflateInit2_")
+ EXPORT SYMBOL("inflateSyncPoint")
+
+/********************************************************************/
+/* *MODULE UNCOMPR ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("uncompress")
+
+/********************************************************************/
+/* *MODULE ZUTIL ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("zlibVersion")
+ EXPORT SYMBOL("zError")
+
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+/* Version 1.2.1 additional entry points. */
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+
+/********************************************************************/
+/* *MODULE COMPRESS ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("compressBound")
+
+/********************************************************************/
+/* *MODULE DEFLATE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("deflateBound")
+
+/********************************************************************/
+/* *MODULE GZIO ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("gzungetc")
+ EXPORT SYMBOL("gzclearerr")
+
+/********************************************************************/
+/* *MODULE INFBACK ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("inflateBack")
+ EXPORT SYMBOL("inflateBackEnd")
+ EXPORT SYMBOL("inflateBackInit_")
+
+/********************************************************************/
+/* *MODULE INFLATE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("inflateCopy")
+
+/********************************************************************/
+/* *MODULE ZUTIL ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("zlibCompileFlags")
+
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+/* Version 1.2.5 additional entry points. */
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+
+/********************************************************************/
+/* *MODULE ADLER32 ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("adler32_combine")
+ EXPORT SYMBOL("adler32_combine64")
+
+/********************************************************************/
+/* *MODULE CRC32 ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("crc32_combine")
+ EXPORT SYMBOL("crc32_combine64")
+
+/********************************************************************/
+/* *MODULE GZLIB ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("gzbuffer")
+ EXPORT SYMBOL("gzoffset")
+ EXPORT SYMBOL("gzoffset64")
+ EXPORT SYMBOL("gzopen64")
+ EXPORT SYMBOL("gzseek64")
+ EXPORT SYMBOL("gztell64")
+
+/********************************************************************/
+/* *MODULE GZREAD ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("gzclose_r")
+
+/********************************************************************/
+/* *MODULE GZWRITE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("gzclose_w")
+
+/********************************************************************/
+/* *MODULE INFLATE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("inflateMark")
+ EXPORT SYMBOL("inflatePrime")
+ EXPORT SYMBOL("inflateReset2")
+ EXPORT SYMBOL("inflateUndermine")
+
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+/* Version 1.2.6 additional entry points. */
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+
+/********************************************************************/
+/* *MODULE DEFLATE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("deflateResetKeep")
+ EXPORT SYMBOL("deflatePending")
+
+/********************************************************************/
+/* *MODULE GZWRITE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("gzgetc_")
+
+/********************************************************************/
+/* *MODULE INFLATE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("inflateResetKeep")
+
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+/* Version 1.2.8 additional entry points. */
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+
+/********************************************************************/
+/* *MODULE INFLATE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("inflateGetDictionary")
+
+ENDPGMEXP
diff --git a/protocols/Telegram/tgl/zlib/as400/compile.clp b/protocols/Telegram/tgl/zlib/as400/compile.clp
new file mode 100644
index 0000000000..e3f47c6387
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/as400/compile.clp
@@ -0,0 +1,110 @@
+/******************************************************************************/
+/* */
+/* ZLIB */
+/* */
+/* Compile sources into modules and link them into a service program. */
+/* */
+/******************************************************************************/
+
+ PGM
+
+/* Configuration adjustable parameters. */
+
+ DCL VAR(&SRCLIB) TYPE(*CHAR) LEN(10) +
+ VALUE('ZLIB') /* Source library. */
+ DCL VAR(&SRCFILE) TYPE(*CHAR) LEN(10) +
+ VALUE('SOURCES') /* Source member file. */
+ DCL VAR(&CTLFILE) TYPE(*CHAR) LEN(10) +
+ VALUE('TOOLS') /* Control member file. */
+
+ DCL VAR(&MODLIB) TYPE(*CHAR) LEN(10) +
+ VALUE('ZLIB') /* Module library. */
+
+ DCL VAR(&SRVLIB) TYPE(*CHAR) LEN(10) +
+ VALUE('LGPL') /* Service program library. */
+
+ DCL VAR(&CFLAGS) TYPE(*CHAR) +
+ VALUE('OPTIMIZE(40)') /* Compile options. */
+
+ DCL VAR(&TGTRLS) TYPE(*CHAR) +
+ VALUE('V5R3M0') /* Target release. */
+
+
+/* Working storage. */
+
+ DCL VAR(&CMDLEN) TYPE(*DEC) LEN(15 5) VALUE(300) /* Command length. */
+ DCL VAR(&CMD) TYPE(*CHAR) LEN(512)
+ DCL VAR(&FIXDCMD) TYPE(*CHAR) LEN(512)
+
+
+/* Compile sources into modules. */
+
+ CHGVAR VAR(&FIXDCMD) VALUE('CRTCMOD' *BCAT &CFLAGS *BCAT +
+ 'SYSIFCOPT(*IFS64IO)' *BCAT +
+ 'DEFINE(''_LARGEFILE64_SOURCE''' *BCAT +
+ '''_LFS64_LARGEFILE=1'') TGTRLS(' *TCAT &TGTRLS *TCAT +
+ ') SRCFILE(' *TCAT &SRCLIB *TCAT '/' *TCAT +
+ &SRCFILE *TCAT ') MODULE(' *TCAT &MODLIB *TCAT '/')
+
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'ADLER32)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'COMPRESS)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'CRC32)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'DEFLATE)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'GZCLOSE)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'GZLIB)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'GZREAD)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'GZWRITE)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'INFBACK)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'INFFAST)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'INFLATE)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'INFTREES)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'TREES)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'UNCOMPR)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'ZUTIL)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+
+/* Link modules into a service program. */
+
+ CRTSRVPGM SRVPGM(&SRVLIB/ZLIB) +
+ MODULE(&MODLIB/ADLER32 &MODLIB/COMPRESS +
+ &MODLIB/CRC32 &MODLIB/DEFLATE +
+ &MODLIB/GZCLOSE &MODLIB/GZLIB +
+ &MODLIB/GZREAD &MODLIB/GZWRITE +
+ &MODLIB/INFBACK &MODLIB/INFFAST +
+ &MODLIB/INFLATE &MODLIB/INFTREES +
+ &MODLIB/TREES &MODLIB/UNCOMPR +
+ &MODLIB/ZUTIL) +
+ SRCFILE(&SRCLIB/&CTLFILE) SRCMBR(BNDSRC) +
+ TEXT('ZLIB 1.2.8') TGTRLS(&TGTRLS)
+
+ ENDPGM
diff --git a/protocols/Telegram/tgl/zlib/as400/readme.txt b/protocols/Telegram/tgl/zlib/as400/readme.txt
new file mode 100644
index 0000000000..7b5d93bf51
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/as400/readme.txt
@@ -0,0 +1,115 @@
+ ZLIB version 1.2.8 for AS400 installation instructions
+
+I) From an AS400 *SAVF file:
+
+1) Unpacking archive to an AS400 save file
+
+On the AS400:
+
+_ Create the ZLIB AS400 library:
+
+ CRTLIB LIB(ZLIB) TYPE(*PROD) TEXT('ZLIB compression API library')
+
+_ Create a work save file, for example:
+
+ CRTSAVF FILE(ZLIB/ZLIBSAVF)
+
+On a PC connected to the target AS400:
+
+_ Unpack the save file image to a PC file "ZLIBSAVF"
+_ Upload this file into the save file on the AS400, for example
+ using ftp in BINARY mode.
+
+
+2) Populating the ZLIB AS400 source library
+
+On the AS400:
+
+_ Extract the saved objects into the ZLIB AS400 library using:
+
+RSTOBJ OBJ(*ALL) SAVLIB(ZLIB) DEV(*SAVF) SAVF(ZLIB/ZLIBSAVF) RSTLIB(ZLIB)
+
+
+3) Customize installation:
+
+_ Edit CL member ZLIB/TOOLS(COMPILE) and change parameters if needed,
+ according to the comments.
+
+_ Compile this member with:
+
+ CRTCLPGM PGM(ZLIB/COMPILE) SRCFILE(ZLIB/TOOLS) SRCMBR(COMPILE)
+
+
+4) Compile and generate the service program:
+
+_ This can now be done by executing:
+
+ CALL PGM(ZLIB/COMPILE)
+
+
+
+II) From the original source distribution:
+
+1) On the AS400, create the source library:
+
+ CRTLIB LIB(ZLIB) TYPE(*PROD) TEXT('ZLIB compression API library')
+
+2) Create the source files:
+
+ CRTSRCPF FILE(ZLIB/SOURCES) RCDLEN(112) TEXT('ZLIB library modules')
+ CRTSRCPF FILE(ZLIB/H) RCDLEN(112) TEXT('ZLIB library includes')
+ CRTSRCPF FILE(ZLIB/TOOLS) RCDLEN(112) TEXT('ZLIB library control utilities')
+
+3) From the machine hosting the distribution files, upload them (with
+ FTP in text mode, for example) according to the following table:
+
+ Original AS400 AS400 AS400 AS400
+ file file member type description
+ SOURCES Original ZLIB C subprogram sources
+ adler32.c ADLER32 C ZLIB - Compute the Adler-32 checksum of a dta strm
+ compress.c COMPRESS C ZLIB - Compress a memory buffer
+ crc32.c CRC32 C ZLIB - Compute the CRC-32 of a data stream
+ deflate.c DEFLATE C ZLIB - Compress data using the deflation algorithm
+ gzclose.c GZCLOSE C ZLIB - Close .gz files
+ gzlib.c GZLIB C ZLIB - Miscellaneous .gz files IO support
+ gzread.c GZREAD C ZLIB - Read .gz files
+ gzwrite.c GZWRITE C ZLIB - Write .gz files
+ infback.c INFBACK C ZLIB - Inflate using a callback interface
+ inffast.c INFFAST C ZLIB - Fast proc. literals & length/distance pairs
+ inflate.c INFLATE C ZLIB - Interface to inflate modules
+ inftrees.c INFTREES C ZLIB - Generate Huffman trees for efficient decode
+ trees.c TREES C ZLIB - Output deflated data using Huffman coding
+ uncompr.c UNCOMPR C ZLIB - Decompress a memory buffer
+ zutil.c ZUTIL C ZLIB - Target dependent utility functions
+ H Original ZLIB C and ILE/RPG include files
+ crc32.h CRC32 C ZLIB - CRC32 tables
+ deflate.h DEFLATE C ZLIB - Internal compression state
+ gzguts.h GZGUTS C ZLIB - Definitions for the gzclose module
+ inffast.h INFFAST C ZLIB - Header to use inffast.c
+ inffixed.h INFFIXED C ZLIB - Table for decoding fixed codes
+ inflate.h INFLATE C ZLIB - Internal inflate state definitions
+ inftrees.h INFTREES C ZLIB - Header to use inftrees.c
+ trees.h TREES C ZLIB - Created automatically with -DGEN_TREES_H
+ zconf.h ZCONF C ZLIB - Compression library configuration
+ zlib.h ZLIB C ZLIB - Compression library C user interface
+ as400/zlib.inc ZLIB.INC RPGLE ZLIB - Compression library ILE RPG user interface
+ zutil.h ZUTIL C ZLIB - Internal interface and configuration
+ TOOLS Building source software & AS/400 README
+ as400/bndsrc BNDSRC Entry point exportation list
+ as400/compile.clp COMPILE CLP Compile sources & generate service program
+ as400/readme.txt README TXT Installation instructions
+
+4) Continue as in I)3).
+
+
+
+
+Notes: For AS400 ILE RPG programmers, a /copy member defining the ZLIB
+ API prototypes for ILE RPG can be found in ZLIB/H(ZLIB.INC).
+ 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 explicitely.
+
+ Mainly for the reason above, always open zipped files in binary mode.
diff --git a/protocols/Telegram/tgl/zlib/as400/zlib.inc b/protocols/Telegram/tgl/zlib/as400/zlib.inc
new file mode 100644
index 0000000000..7341a6d818
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/as400/zlib.inc
@@ -0,0 +1,451 @@
+ * ZLIB.INC - Interface to the general purpose compression library
+ *
+ * ILE RPG400 version by Patrick Monnerat, DATASPHERE.
+ * Version 1.2.8
+ *
+ *
+ * WARNING:
+ * Procedures inflateInit(), inflateInit2(), deflateInit(),
+ * deflateInit2() and inflateBackInit() need to be called with
+ * two additional arguments:
+ * the package version string and the stream control structure.
+ * size. This is needed because RPG lacks some macro feature.
+ * Call these procedures as:
+ * inflateInit(...: ZLIB_VERSION: %size(z_stream))
+ *
+ /if not defined(ZLIB_H_)
+ /define ZLIB_H_
+ *
+ **************************************************************************
+ * Constants
+ **************************************************************************
+ *
+ * Versioning information.
+ *
+ D ZLIB_VERSION C '1.2.8'
+ D ZLIB_VERNUM C X'1280'
+ D ZLIB_VER_MAJOR C 1
+ D ZLIB_VER_MINOR C 2
+ D ZLIB_VER_REVISION...
+ D C 8
+ D ZLIB_VER_SUBREVISION...
+ D C 0
+ *
+ * Other equates.
+ *
+ D Z_NO_FLUSH C 0
+ D Z_PARTIAL_FLUSH...
+ D C 1
+ D Z_SYNC_FLUSH C 2
+ D Z_FULL_FLUSH C 3
+ D Z_FINISH C 4
+ D Z_BLOCK C 5
+ D Z_TREES C 6
+ *
+ D Z_OK C 0
+ D Z_STREAM_END C 1
+ D Z_NEED_DICT C 2
+ D Z_ERRNO C -1
+ D Z_STREAM_ERROR C -2
+ D Z_DATA_ERROR C -3
+ D Z_MEM_ERROR C -4
+ D Z_BUF_ERROR C -5
+ DZ_VERSION_ERROR C -6
+ *
+ D Z_NO_COMPRESSION...
+ D C 0
+ D Z_BEST_SPEED C 1
+ D Z_BEST_COMPRESSION...
+ D C 9
+ D Z_DEFAULT_COMPRESSION...
+ D C -1
+ *
+ D Z_FILTERED C 1
+ D Z_HUFFMAN_ONLY C 2
+ D Z_RLE C 3
+ D Z_DEFAULT_STRATEGY...
+ D C 0
+ *
+ D Z_BINARY C 0
+ D Z_ASCII C 1
+ D Z_UNKNOWN C 2
+ *
+ D Z_DEFLATED C 8
+ *
+ D Z_NULL C 0
+ *
+ **************************************************************************
+ * Types
+ **************************************************************************
+ *
+ D z_streamp S * Stream struct ptr
+ D gzFile S * File pointer
+ D z_off_t S 10i 0 Stream offsets
+ D z_off64_t S 20i 0 Stream offsets
+ *
+ **************************************************************************
+ * Structures
+ **************************************************************************
+ *
+ * The GZIP encode/decode stream support structure.
+ *
+ D z_stream DS align based(z_streamp)
+ D zs_next_in * Next input byte
+ D zs_avail_in 10U 0 Byte cnt at next_in
+ D zs_total_in 10U 0 Total bytes read
+ D zs_next_out * Output buffer ptr
+ D zs_avail_out 10U 0 Room left @ next_out
+ D zs_total_out 10U 0 Total bytes written
+ D zs_msg * Last errmsg or null
+ D zs_state * Internal state
+ D zs_zalloc * procptr Int. state allocator
+ D zs_free * procptr Int. state dealloc.
+ D zs_opaque * Private alloc. data
+ D zs_data_type 10i 0 ASC/BIN best guess
+ D zs_adler 10u 0 Uncompr. adler32 val
+ D 10U 0 Reserved
+ D 10U 0 Ptr. alignment
+ *
+ **************************************************************************
+ * Utility function prototypes
+ **************************************************************************
+ *
+ D compress PR 10I 0 extproc('compress')
+ D dest 65535 options(*varsize) Destination buffer
+ D destLen 10U 0 Destination length
+ D source 65535 const options(*varsize) Source buffer
+ D sourceLen 10u 0 value Source length
+ *
+ D compress2 PR 10I 0 extproc('compress2')
+ D dest 65535 options(*varsize) Destination buffer
+ D destLen 10U 0 Destination length
+ D source 65535 const options(*varsize) Source buffer
+ D sourceLen 10U 0 value Source length
+ D level 10I 0 value Compression level
+ *
+ D compressBound PR 10U 0 extproc('compressBound')
+ D sourceLen 10U 0 value
+ *
+ D uncompress PR 10I 0 extproc('uncompress')
+ D dest 65535 options(*varsize) Destination buffer
+ D destLen 10U 0 Destination length
+ D source 65535 const options(*varsize) Source buffer
+ D sourceLen 10U 0 value Source length
+ *
+ /if not defined(LARGE_FILES)
+ D gzopen PR extproc('gzopen')
+ D like(gzFile)
+ D path * value options(*string) File pathname
+ D mode * value options(*string) Open mode
+ /else
+ D gzopen PR extproc('gzopen64')
+ D like(gzFile)
+ D path * value options(*string) File pathname
+ D mode * value options(*string) Open mode
+ *
+ D gzopen64 PR extproc('gzopen64')
+ D like(gzFile)
+ D path * value options(*string) File pathname
+ D mode * value options(*string) Open mode
+ /endif
+ *
+ D gzdopen PR extproc('gzdopen')
+ D like(gzFile)
+ D fd 10I 0 value File descriptor
+ D mode * value options(*string) Open mode
+ *
+ D gzbuffer PR 10I 0 extproc('gzbuffer')
+ D file value like(gzFile) File pointer
+ D size 10U 0 value
+ *
+ D gzsetparams PR 10I 0 extproc('gzsetparams')
+ D file value like(gzFile) File pointer
+ D level 10I 0 value
+ D strategy 10I 0 value
+ *
+ D gzread PR 10I 0 extproc('gzread')
+ D file value like(gzFile) File pointer
+ D buf 65535 options(*varsize) Buffer
+ D len 10u 0 value Buffer length
+ *
+ D gzwrite PR 10I 0 extproc('gzwrite')
+ D file value like(gzFile) File pointer
+ D buf 65535 const options(*varsize) Buffer
+ D len 10u 0 value Buffer length
+ *
+ D gzputs PR 10I 0 extproc('gzputs')
+ D file value like(gzFile) File pointer
+ D s * value options(*string) String to output
+ *
+ D gzgets PR * extproc('gzgets')
+ D file value like(gzFile) File pointer
+ D buf 65535 options(*varsize) Read buffer
+ D len 10i 0 value Buffer length
+ *
+ D gzputc PR 10i 0 extproc('gzputc')
+ D file value like(gzFile) File pointer
+ D c 10I 0 value Character to write
+ *
+ D gzgetc PR 10i 0 extproc('gzgetc')
+ D file value like(gzFile) File pointer
+ *
+ D gzgetc_ PR 10i 0 extproc('gzgetc_')
+ D file value like(gzFile) File pointer
+ *
+ D gzungetc PR 10i 0 extproc('gzungetc')
+ D c 10I 0 value Character to push
+ D file value like(gzFile) File pointer
+ *
+ D gzflush PR 10i 0 extproc('gzflush')
+ D file value like(gzFile) File pointer
+ D flush 10I 0 value Type of flush
+ *
+ /if not defined(LARGE_FILES)
+ D gzseek PR extproc('gzseek')
+ D like(z_off_t)
+ D file value like(gzFile) File pointer
+ D offset value like(z_off_t) Offset
+ D whence 10i 0 value Origin
+ /else
+ D gzseek PR extproc('gzseek64')
+ D like(z_off_t)
+ D file value like(gzFile) File pointer
+ D offset value like(z_off_t) Offset
+ D whence 10i 0 value Origin
+ *
+ D gzseek64 PR extproc('gzseek64')
+ D like(z_off64_t)
+ D file value like(gzFile) File pointer
+ D offset value like(z_off64_t) Offset
+ D whence 10i 0 value Origin
+ /endif
+ *
+ D gzrewind PR 10i 0 extproc('gzrewind')
+ D file value like(gzFile) File pointer
+ *
+ /if not defined(LARGE_FILES)
+ D gztell PR extproc('gztell')
+ D like(z_off_t)
+ D file value like(gzFile) File pointer
+ /else
+ D gztell PR extproc('gztell64')
+ D like(z_off_t)
+ D file value like(gzFile) File pointer
+ *
+ D gztell64 PR extproc('gztell64')
+ D like(z_off64_t)
+ D file value like(gzFile) File pointer
+ /endif
+ *
+ /if not defined(LARGE_FILES)
+ D gzoffset PR extproc('gzoffset')
+ D like(z_off_t)
+ D file value like(gzFile) File pointer
+ /else
+ D gzoffset PR extproc('gzoffset64')
+ D like(z_off_t)
+ D file value like(gzFile) File pointer
+ *
+ D gzoffset64 PR extproc('gzoffset64')
+ D like(z_off64_t)
+ D file value like(gzFile) File pointer
+ /endif
+ *
+ D gzeof PR 10i 0 extproc('gzeof')
+ D file value like(gzFile) File pointer
+ *
+ D gzclose_r PR 10i 0 extproc('gzclose_r')
+ D file value like(gzFile) File pointer
+ *
+ D gzclose_w PR 10i 0 extproc('gzclose_w')
+ D file value like(gzFile) File pointer
+ *
+ D gzclose PR 10i 0 extproc('gzclose')
+ D file value like(gzFile) File pointer
+ *
+ D gzerror PR * extproc('gzerror') Error string
+ D file value like(gzFile) File pointer
+ D errnum 10I 0 Error code
+ *
+ D gzclearerr PR extproc('gzclearerr')
+ D file value like(gzFile) File pointer
+ *
+ **************************************************************************
+ * Basic function prototypes
+ **************************************************************************
+ *
+ D zlibVersion PR * extproc('zlibVersion') Version string
+ *
+ D deflateInit PR 10I 0 extproc('deflateInit_') Init. compression
+ D strm like(z_stream) Compression stream
+ D level 10I 0 value Compression level
+ D version * value options(*string) Version string
+ D stream_size 10i 0 value Stream struct. size
+ *
+ D deflate PR 10I 0 extproc('deflate') Compress data
+ D strm like(z_stream) Compression stream
+ D flush 10I 0 value Flush type required
+ *
+ D deflateEnd PR 10I 0 extproc('deflateEnd') Termin. compression
+ D strm like(z_stream) Compression stream
+ *
+ D inflateInit PR 10I 0 extproc('inflateInit_') Init. expansion
+ D strm like(z_stream) Expansion stream
+ D version * value options(*string) Version string
+ D stream_size 10i 0 value Stream struct. size
+ *
+ D inflate PR 10I 0 extproc('inflate') Expand data
+ D strm like(z_stream) Expansion stream
+ D flush 10I 0 value Flush type required
+ *
+ D inflateEnd PR 10I 0 extproc('inflateEnd') Termin. expansion
+ D strm like(z_stream) Expansion stream
+ *
+ **************************************************************************
+ * Advanced function prototypes
+ **************************************************************************
+ *
+ D deflateInit2 PR 10I 0 extproc('deflateInit2_') Init. compression
+ D strm like(z_stream) Compression stream
+ D level 10I 0 value Compression level
+ D method 10I 0 value Compression method
+ D windowBits 10I 0 value log2(window size)
+ D memLevel 10I 0 value Mem/cmpress tradeoff
+ D strategy 10I 0 value Compression stategy
+ D version * value options(*string) Version string
+ D stream_size 10i 0 value Stream struct. size
+ *
+ D deflateSetDictionary...
+ D PR 10I 0 extproc('deflateSetDictionary') Init. dictionary
+ D strm like(z_stream) Compression stream
+ D dictionary 65535 const options(*varsize) Dictionary bytes
+ D dictLength 10U 0 value Dictionary length
+ *
+ D deflateCopy PR 10I 0 extproc('deflateCopy') Compress strm 2 strm
+ D dest like(z_stream) Destination stream
+ D source like(z_stream) Source stream
+ *
+ D deflateReset PR 10I 0 extproc('deflateReset') End and init. stream
+ D strm like(z_stream) Compression stream
+ *
+ D deflateParams PR 10I 0 extproc('deflateParams') Change level & strat
+ D strm like(z_stream) Compression stream
+ D level 10I 0 value Compression level
+ D strategy 10I 0 value Compression stategy
+ *
+ D deflateBound PR 10U 0 extproc('deflateBound') Change level & strat
+ D strm like(z_stream) Compression stream
+ D sourcelen 10U 0 value Compression level
+ *
+ D deflatePending PR 10I 0 extproc('deflatePending') Change level & strat
+ D strm like(z_stream) Compression stream
+ D pending 10U 0 Pending bytes
+ D bits 10I 0 Pending bits
+ *
+ D deflatePrime PR 10I 0 extproc('deflatePrime') Change level & strat
+ D strm like(z_stream) Compression stream
+ D bits 10I 0 value # of bits to insert
+ D value 10I 0 value Bits to insert
+ *
+ D inflateInit2 PR 10I 0 extproc('inflateInit2_') Init. expansion
+ D strm like(z_stream) Expansion stream
+ D windowBits 10I 0 value log2(window size)
+ D version * value options(*string) Version string
+ D stream_size 10i 0 value Stream struct. size
+ *
+ D inflateSetDictionary...
+ D PR 10I 0 extproc('inflateSetDictionary') Init. dictionary
+ D strm like(z_stream) Expansion stream
+ D dictionary 65535 const options(*varsize) Dictionary bytes
+ D dictLength 10U 0 value Dictionary length
+ *
+ D inflateGetDictionary...
+ D PR 10I 0 extproc('inflateGetDictionary') Get dictionary
+ D strm like(z_stream) Expansion stream
+ D dictionary 65535 options(*varsize) Dictionary bytes
+ D dictLength 10U 0 Dictionary length
+ *
+ D inflateSync PR 10I 0 extproc('inflateSync') Sync. expansion
+ D strm like(z_stream) Expansion stream
+ *
+ D inflateCopy PR 10I 0 extproc('inflateCopy')
+ D dest like(z_stream) Destination stream
+ D source like(z_stream) Source stream
+ *
+ D inflateReset PR 10I 0 extproc('inflateReset') End and init. stream
+ D strm like(z_stream) Expansion stream
+ *
+ D inflateReset2 PR 10I 0 extproc('inflateReset2') End and init. stream
+ D strm like(z_stream) Expansion stream
+ D windowBits 10I 0 value Log2(buffer size)
+ *
+ D inflatePrime PR 10I 0 extproc('inflatePrime') Insert bits
+ D strm like(z_stream) Expansion stream
+ D bits 10I 0 value Bit count
+ D value 10I 0 value Bits to insert
+ *
+ D inflateMark PR 10I 0 extproc('inflateMark') Get inflate info
+ D strm like(z_stream) Expansion stream
+ *
+ D inflateBackInit...
+ D PR 10I 0 extproc('inflateBackInit_')
+ D strm like(z_stream) Expansion stream
+ D windowBits 10I 0 value Log2(buffer size)
+ D window 65535 options(*varsize) Buffer
+ D version * value options(*string) Version string
+ D stream_size 10i 0 value Stream struct. size
+ *
+ D inflateBack PR 10I 0 extproc('inflateBack')
+ D strm like(z_stream) Expansion stream
+ D in * value procptr Input function
+ D in_desc * value Input descriptor
+ D out * value procptr Output function
+ D out_desc * value Output descriptor
+ *
+ D inflateBackEnd PR 10I 0 extproc('inflateBackEnd')
+ D strm like(z_stream) Expansion stream
+ *
+ D zlibCompileFlags...
+ D PR 10U 0 extproc('zlibCompileFlags')
+ *
+ **************************************************************************
+ * Checksum function prototypes
+ **************************************************************************
+ *
+ D adler32 PR 10U 0 extproc('adler32') New checksum
+ D adler 10U 0 value Old checksum
+ D buf 65535 const options(*varsize) Bytes to accumulate
+ D len 10U 0 value Buffer length
+ *
+ D crc32 PR 10U 0 extproc('crc32') New checksum
+ D crc 10U 0 value Old checksum
+ D buf 65535 const options(*varsize) Bytes to accumulate
+ D len 10U 0 value Buffer length
+ *
+ **************************************************************************
+ * Miscellaneous function prototypes
+ **************************************************************************
+ *
+ D zError PR * extproc('zError') Error string
+ D err 10I 0 value Error code
+ *
+ D inflateSyncPoint...
+ D PR 10I 0 extproc('inflateSyncPoint')
+ D strm like(z_stream) Expansion stream
+ *
+ D get_crc_table PR * extproc('get_crc_table') Ptr to ulongs
+ *
+ D inflateUndermine...
+ D PR 10I 0 extproc('inflateUndermine')
+ D strm like(z_stream) Expansion stream
+ D arg 10I 0 value Error code
+ *
+ D inflateResetKeep...
+ D PR 10I 0 extproc('inflateResetKeep') End and init. stream
+ D strm like(z_stream) Expansion stream
+ *
+ D deflateResetKeep...
+ D PR 10I 0 extproc('deflateResetKeep') End and init. stream
+ D strm like(z_stream) Expansion stream
+ *
+ /endif
diff --git a/protocols/Telegram/tgl/zlib/compress.c b/protocols/Telegram/tgl/zlib/compress.c
new file mode 100644
index 0000000000..6e9762676a
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/compress.c
@@ -0,0 +1,80 @@
+/* compress.c -- compress a memory buffer
+ * Copyright (C) 1995-2005 Jean-loup Gailly.
+ * 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 (dest, destLen, source, sourceLen, level)
+ Bytef *dest;
+ uLongf *destLen;
+ const Bytef *source;
+ uLong sourceLen;
+ int level;
+{
+ z_stream stream;
+ int err;
+
+ stream.next_in = (z_const Bytef *)source;
+ stream.avail_in = (uInt)sourceLen;
+#ifdef MAXSEG_64K
+ /* Check for source > 64K on 16-bit machine: */
+ if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
+#endif
+ stream.next_out = dest;
+ stream.avail_out = (uInt)*destLen;
+ if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+
+ stream.zalloc = (alloc_func)0;
+ stream.zfree = (free_func)0;
+ stream.opaque = (voidpf)0;
+
+ err = deflateInit(&stream, level);
+ if (err != Z_OK) return err;
+
+ err = deflate(&stream, Z_FINISH);
+ if (err != Z_STREAM_END) {
+ deflateEnd(&stream);
+ return err == Z_OK ? Z_BUF_ERROR : err;
+ }
+ *destLen = stream.total_out;
+
+ err = deflateEnd(&stream);
+ return err;
+}
+
+/* ===========================================================================
+ */
+int ZEXPORT compress (dest, destLen, source, sourceLen)
+ 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 (sourceLen)
+ uLong sourceLen;
+{
+ return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
+ (sourceLen >> 25) + 13;
+}
diff --git a/protocols/Telegram/tgl/zlib/configure b/protocols/Telegram/tgl/zlib/configure
new file mode 100644
index 0000000000..b77a8a8cf9
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/configure
@@ -0,0 +1,831 @@
+#!/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
+
+# set command prefix for cross-compilation
+if [ -n "${CHOST}" ]; then
+ uname="`echo "${CHOST}" | sed -e 's/^[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)-.*$/\1/'`"
+ CROSS_PREFIX="${CHOST}-"
+fi
+
+# destination name for static library
+STATICLIB=libz.a
+
+# extract zlib version numbers from zlib.h
+VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`
+VER3=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\\.[0-9]*\).*/\1/p' < zlib.h`
+VER2=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\)\\..*/\1/p' < zlib.h`
+VER1=`sed -n -e '/VERSION "/s/.*"\([0-9]*\)\\..*/\1/p' < zlib.h`
+
+# 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
+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 -f $test.[co] $test $test$shared_ext $test.gcno ./--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 ;;
+ *)
+ 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 <<EOF
+extern int getchar();
+int hello() {return getchar();}
+EOF
+
+test -z "$CC" && echo Checking for ${CROSS_PREFIX}gcc... | tee -a configure.log
+cc=${CC-${CROSS_PREFIX}gcc}
+cflags=${CFLAGS-"-O3"}
+# to force the asm version use: CFLAGS="-O3 -DASMV" ./configure
+case "$cc" in
+ *gcc*) gcc=1 ;;
+ *clang*) gcc=1 ;;
+esac
+case `$cc -v 2>&1` in
+ *gcc*) 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} ${ARCHS}"
+ SFLAGS="${CFLAGS--O3} -fPIC"
+ LDFLAGS="${LDFLAGS} ${ARCHS}"
+ if test $build64 -eq 1; then
+ CFLAGS="${CFLAGS} -m64"
+ SFLAGS="${SFLAGS} -m64"
+ fi
+ if test "${ZLIBGCCWARN}" = "YES"; then
+ if test "$zconst" -eq 1; then
+ CFLAGS="${CFLAGS} -Wall -Wextra -Wcast-qual -pedantic -DZLIB_CONST"
+ else
+ CFLAGS="${CFLAGS} -Wall -Wextra -pedantic"
+ fi
+ fi
+ if test -z "$uname"; then
+ uname=`(uname -s || echo unknown) 2>/dev/null`
+ fi
+ case "$uname" in
+ Linux* | linux* | GNU | GNU/* | solaris*)
+ LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"} ;;
+ *BSD | *bsd* | DragonFly)
+ LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"}
+ LDCONFIG="ldconfig -m" ;;
+ CYGWIN* | Cygwin* | cygwin* | OS/2*)
+ EXE='.exe' ;;
+ MINGW* | mingw*)
+# temporary bypass
+ rm -f $test.[co] $test $test$shared_ext
+ echo "Please use win32/Makefile.gcc instead." | tee -a configure.log
+ leave 1
+ 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 ;;
+ 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 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
+ ;;
+ 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 <<EOF
+#error error
+EOF
+if ($CC -c $CFLAGS $test.c) 2>/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 $*
+ ( $* ) >> configure.log 2>&1
+ ret=$?
+ if test $ret -ne 0; then
+ echo "(exit code "$ret")" >> configure.log
+ fi
+ return $ret
+}
+fi
+
+tryboth()
+{
+ show $*
+ got=`( $* ) 2>&1`
+ ret=$?
+ printf %s "$got" >> configure.log
+ if test $ret -ne 0; then
+ 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 <<EOF
+extern int getchar();
+int hello() {return getchar();}
+EOF
+if test $shared -eq 1; then
+ echo Checking for shared library support... | tee -a configure.log
+ # we must test in two steps (cc then ld), required at least on SunOS 4.x
+ if try $CC -w -c $SFLAGS $test.c &&
+ try $LDSHARED $SFLAGS -o $test$shared_ext $test.o; then
+ echo Building shared library $SHAREDLIBV with $CC. | tee -a configure.log
+ elif test -z "$old_cc" -a -z "$old_cflags"; then
+ echo No shared library support. | tee -a configure.log
+ shared=0;
+ else
+ echo 'No shared library support; try without defining CC and CFLAGS' | tee -a configure.log
+ shared=0;
+ fi
+fi
+if test $shared -eq 0; then
+ LDSHARED="$CC"
+ ALL="static"
+ TEST="all teststatic"
+ SHAREDLIB=""
+ SHAREDLIBV=""
+ SHAREDLIBM=""
+ echo Building static library $STATICLIB version $VER with $CC. | tee -a configure.log
+else
+ ALL="static shared"
+ TEST="all teststatic testshared"
+fi
+
+# check for underscores in external names for use by assembler code
+CPP=${CPP-"$CC -E"}
+case $CFLAGS in
+ *ASMV*)
+ echo >> configure.log
+ show "$NM $test.o | grep _hello"
+ if test "`$NM $test.o | grep _hello | tee -a configure.log`" = ""; then
+ CPP="$CPP -DNO_UNDERLINE"
+ echo Checking for underline in external names... No. | tee -a configure.log
+ else
+ echo Checking for underline in external names... Yes. | tee -a configure.log
+ fi ;;
+esac
+
+echo >> configure.log
+
+# check for large file support, and if none, check for fseeko()
+cat > $test.c <<EOF
+#include <sys/types.h>
+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 <<EOF
+#include <stdio.h>
+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 <<EOF
+#include <string.h>
+#include <errno.h>
+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 zconf.h.in zconf.h
+
+echo >> configure.log
+
+# check for unistd.h and save result in zconf.h
+cat > $test.c <<EOF
+#include <unistd.h>
+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 <<EOF
+#include <stdarg.h>
+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 <<EOF
+#include <stdio.h>
+#include <stdarg.h>
+#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 <<EOF
+#include <stdio.h>
+#include <stdarg.h>
+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 <<EOF
+#include <stdio.h>
+#include <stdarg.h>
+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 <<EOF
+#include <stdio.h>
+#include <stdarg.h>
+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 <<EOF
+#include <stdio.h>
+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 <<EOF
+#include <stdio.h>
+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 <<EOF
+#include <stdio.h>
+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 <<EOF
+#define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
+int ZLIB_INTERNAL foo;
+int main()
+{
+ return 0;
+}
+EOF
+ if tryboth $CC -c $CFLAGS $test.c; then
+ CFLAGS="$CFLAGS -DHAVE_HIDDEN"
+ SFLAGS="$SFLAGS -DHAVE_HIDDEN"
+ echo "Checking for attribute(visibility) support... Yes." | tee -a configure.log
+ else
+ echo "Checking for attribute(visibility) support... No." | tee -a configure.log
+ fi
+fi
+
+# show the results in the log
+echo >> 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 Z_U4 = $Z_U4 >> 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
+
+# udpate Makefile with the configure results
+sed < 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#
+/^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 < 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/protocols/Telegram/tgl/zlib/contrib/README.contrib b/protocols/Telegram/tgl/zlib/contrib/README.contrib
new file mode 100644
index 0000000000..c66349b7c6
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/README.contrib
@@ -0,0 +1,78 @@
+All files under this contrib directory are UNSUPPORTED. There 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 <anisimkov@yahoo.com>
+ Support for Ada
+ See http://zlib-ada.sourceforge.net/
+
+amd64/ by Mikhail Teterin <mi@ALDAN.algebra.com>
+ asm code for AMD64
+ See patch at http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/96393
+
+asm686/ by Brian Raiter <breadbox@muppetlabs.com>
+ asm code for Pentium and PPro/PII, using the AT&T (GNU as) syntax
+ See http://www.muppetlabs.com/~breadbox/software/assembly.html
+
+blast/ by Mark Adler <madler@alumni.caltech.edu>
+ Decompressor for output of PKWare Data Compression Library (DCL)
+
+delphi/ by Cosmin Truta <cosmint@cs.ubbcluj.ro>
+ Support for Delphi and C++ Builder
+
+dotzlib/ by Henrik Ravn <henrik@ravn.com>
+ Support for Microsoft .Net and Visual C++ .Net
+
+gcc_gvmat64/by Gilles Vollant <info@winimage.com>
+ 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 <madler@alumni.caltech.edu>
+ Unsupported diffs to infback to decode the deflate64 format
+
+inflate86/ by Chris Anderson <christop@charm.net>
+ Tuned x86 gcc asm code to replace inflate_fast()
+
+iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
+ A C++ I/O streams interface to the zlib gz* functions
+
+iostream2/ by Tyge Løvset <Tyge.Lovset@cmr.no>
+ Another C++ I/O streams interface
+
+iostream3/ by Ludwig Schwardt <schwardt@sun.ac.za>
+ and Kevin Ruland <kevin@rodin.wustl.edu>
+ Yet another C++ I/O streams interface
+
+masmx64/ by Gilles Vollant <info@winimage.com>
+ x86 64-bit (AMD64 and Intel EM64t) code for x64 assembler to
+ replace longest_match() and inflate_fast(), also masm x86
+ 64-bits translation of Chris Anderson inflate_fast()
+
+masmx86/ by Gilles Vollant <info@winimage.com>
+ x86 asm code to replace longest_match() and inflate_fast(),
+ for Visual C++ and MASM (32 bits).
+ Based on Brian Raiter (asm686) and Chris Anderson (inflate86)
+
+minizip/ by Gilles Vollant <info@winimage.com>
+ Mini zip and unzip based on zlib
+ Includes Zip64 support by Mathias Svensson <mathias@result42.com>
+ See http://www.winimage.com/zLibDll/unzip.html
+
+pascal/ by Bob Dellaca <bobdl@xtra.co.nz> et al.
+ Support for Pascal
+
+puff/ by Mark Adler <madler@alumni.caltech.edu>
+ Small, low memory usage inflate. Also serves to provide an
+ unambiguous description of the deflate format.
+
+testzlib/ by Gilles Vollant <info@winimage.com>
+ Example of the use of zlib
+
+untgz/ by Pedro A. Aranda Gutierrez <paag@tid.es>
+ A very simple tar.gz file extractor using zlib
+
+vstudio/ by Gilles Vollant <info@winimage.com>
+ Building a minizip-enhanced zlib with Microsoft Visual Studio
+ Includes vc11 from kreuzerkrieg and vc12 from davispuh
diff --git a/protocols/Telegram/tgl/zlib/contrib/ada/buffer_demo.adb b/protocols/Telegram/tgl/zlib/contrib/ada/buffer_demo.adb
new file mode 100644
index 0000000000..46b8638107
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 <sjs@essex.ac.uk>
+--
+-- 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/protocols/Telegram/tgl/zlib/contrib/ada/mtest.adb b/protocols/Telegram/tgl/zlib/contrib/ada/mtest.adb
new file mode 100644
index 0000000000..c4dfd080f0
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/ada/read.adb b/protocols/Telegram/tgl/zlib/contrib/ada/read.adb
new file mode 100644
index 0000000000..1f2efbfeb8
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/ada/readme.txt b/protocols/Telegram/tgl/zlib/contrib/ada/readme.txt
new file mode 100644
index 0000000000..ce4d2cadf0
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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:
+
+- Attension: ZLib.Read generic routine have a initialization requirement
+ for Read_Last parameter now. It is a bit incompartible 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<directory where libz.a is> -lz
+
+Or use the GNAT project file build for GNAT 3.15 or later:
+
+ gnatmake -Pzlib.gpr -L<directory where libz.a is>
+
+
+ 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 <anisimkov@yahoo.com>
+
+Contributors: Pascal Obry <pascal@obry.org>, Steve Sangwine <sjs@essex.ac.uk>
diff --git a/protocols/Telegram/tgl/zlib/contrib/ada/test.adb b/protocols/Telegram/tgl/zlib/contrib/ada/test.adb
new file mode 100644
index 0000000000..90773acfa1
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 spetsified 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 compearing 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/protocols/Telegram/tgl/zlib/contrib/ada/zlib-streams.adb b/protocols/Telegram/tgl/zlib/contrib/ada/zlib-streams.adb
new file mode 100644
index 0000000000..b6497bae28
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/ada/zlib-streams.ads b/protocols/Telegram/tgl/zlib/contrib/ada/zlib-streams.ads
new file mode 100644
index 0000000000..f0193c6bae
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 untill necessary, becouse 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 Comression/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
+ -- becouse 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 becouse 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/protocols/Telegram/tgl/zlib/contrib/ada/zlib-thin.adb b/protocols/Telegram/tgl/zlib/contrib/ada/zlib-thin.adb
new file mode 100644
index 0000000000..0ca4a71204
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/ada/zlib-thin.ads b/protocols/Telegram/tgl/zlib/contrib/ada/zlib-thin.ads
new file mode 100644
index 0000000000..d4407eb800
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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, becouse 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/protocols/Telegram/tgl/zlib/contrib/ada/zlib.adb b/protocols/Telegram/tgl/zlib/contrib/ada/zlib.adb
new file mode 100644
index 0000000000..8b6fd686ac
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 ourselfs, 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/protocols/Telegram/tgl/zlib/contrib/ada/zlib.ads b/protocols/Telegram/tgl/zlib/contrib/ada/zlib.ads
new file mode 100644
index 0000000000..79ffc4095c
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 stategy 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/protocols/Telegram/tgl/zlib/contrib/ada/zlib.gpr b/protocols/Telegram/tgl/zlib/contrib/ada/zlib.gpr
new file mode 100644
index 0000000000..296b22aa96
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/amd64/amd64-match.S b/protocols/Telegram/tgl/zlib/contrib/amd64/amd64-match.S
new file mode 100644
index 0000000000..81d4a1c949
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/amd64/amd64-match.S
@@ -0,0 +1,452 @@
+/*
+ * match.S -- optimized version of longest_match()
+ * based on the similar work by Gilles Vollant, and Brian Raiter, written 1998
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the BSD License. Use by owners of Che Guevarra
+ * parafernalia is prohibited, where possible, and highly discouraged
+ * elsewhere.
+ */
+
+#ifndef NO_UNDERLINE
+# define match_init _match_init
+# define longest_match _longest_match
+#endif
+
+#define scanend ebx
+#define scanendw bx
+#define chainlenwmask edx /* high word: current chain len low word: s->wmask */
+#define curmatch rsi
+#define curmatchd esi
+#define windowbestlen r8
+#define scanalign r9
+#define scanalignd r9d
+#define window r10
+#define bestlen r11
+#define bestlend r11d
+#define scanstart r12d
+#define scanstartw r12w
+#define scan r13
+#define nicematch r14d
+#define limit r15
+#define limitd r15d
+#define prev rcx
+
+/*
+ * The 258 is a "magic number, not a parameter -- changing it
+ * breaks the hell loose
+ */
+#define MAX_MATCH (258)
+#define MIN_MATCH (3)
+#define MIN_LOOKAHEAD (MAX_MATCH + MIN_MATCH + 1)
+#define MAX_MATCH_8 ((MAX_MATCH + 7) & ~7)
+
+/* stack frame offsets */
+#define LocalVarsSize (112)
+#define _chainlenwmask ( 8-LocalVarsSize)(%rsp)
+#define _windowbestlen (16-LocalVarsSize)(%rsp)
+#define save_r14 (24-LocalVarsSize)(%rsp)
+#define save_rsi (32-LocalVarsSize)(%rsp)
+#define save_rbx (40-LocalVarsSize)(%rsp)
+#define save_r12 (56-LocalVarsSize)(%rsp)
+#define save_r13 (64-LocalVarsSize)(%rsp)
+#define save_r15 (80-LocalVarsSize)(%rsp)
+
+
+.globl match_init, longest_match
+
+/*
+ * On AMD64 the first argument of a function (in our case -- the pointer to
+ * deflate_state structure) is passed in %rdi, hence our offsets below are
+ * all off of that.
+ */
+
+/* you can check the structure offset by running
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "deflate.h"
+
+void print_depl()
+{
+deflate_state ds;
+deflate_state *s=&ds;
+printf("size pointer=%u\n",(int)sizeof(void*));
+
+printf("#define dsWSize (%3u)(%%rdi)\n",(int)(((char*)&(s->w_size))-((char*)s)));
+printf("#define dsWMask (%3u)(%%rdi)\n",(int)(((char*)&(s->w_mask))-((char*)s)));
+printf("#define dsWindow (%3u)(%%rdi)\n",(int)(((char*)&(s->window))-((char*)s)));
+printf("#define dsPrev (%3u)(%%rdi)\n",(int)(((char*)&(s->prev))-((char*)s)));
+printf("#define dsMatchLen (%3u)(%%rdi)\n",(int)(((char*)&(s->match_length))-((char*)s)));
+printf("#define dsPrevMatch (%3u)(%%rdi)\n",(int)(((char*)&(s->prev_match))-((char*)s)));
+printf("#define dsStrStart (%3u)(%%rdi)\n",(int)(((char*)&(s->strstart))-((char*)s)));
+printf("#define dsMatchStart (%3u)(%%rdi)\n",(int)(((char*)&(s->match_start))-((char*)s)));
+printf("#define dsLookahead (%3u)(%%rdi)\n",(int)(((char*)&(s->lookahead))-((char*)s)));
+printf("#define dsPrevLen (%3u)(%%rdi)\n",(int)(((char*)&(s->prev_length))-((char*)s)));
+printf("#define dsMaxChainLen (%3u)(%%rdi)\n",(int)(((char*)&(s->max_chain_length))-((char*)s)));
+printf("#define dsGoodMatch (%3u)(%%rdi)\n",(int)(((char*)&(s->good_match))-((char*)s)));
+printf("#define dsNiceMatch (%3u)(%%rdi)\n",(int)(((char*)&(s->nice_match))-((char*)s)));
+}
+
+*/
+
+
+/*
+ to compile for XCode 3.2 on MacOSX x86_64
+ - run "gcc -g -c -DXCODE_MAC_X64_STRUCTURE amd64-match.S"
+ */
+
+
+#ifndef CURRENT_LINX_XCODE_MAC_X64_STRUCTURE
+#define dsWSize ( 68)(%rdi)
+#define dsWMask ( 76)(%rdi)
+#define dsWindow ( 80)(%rdi)
+#define dsPrev ( 96)(%rdi)
+#define dsMatchLen (144)(%rdi)
+#define dsPrevMatch (148)(%rdi)
+#define dsStrStart (156)(%rdi)
+#define dsMatchStart (160)(%rdi)
+#define dsLookahead (164)(%rdi)
+#define dsPrevLen (168)(%rdi)
+#define dsMaxChainLen (172)(%rdi)
+#define dsGoodMatch (188)(%rdi)
+#define dsNiceMatch (192)(%rdi)
+
+#else
+
+#ifndef STRUCT_OFFSET
+# define STRUCT_OFFSET (0)
+#endif
+
+
+#define dsWSize ( 56 + STRUCT_OFFSET)(%rdi)
+#define dsWMask ( 64 + STRUCT_OFFSET)(%rdi)
+#define dsWindow ( 72 + STRUCT_OFFSET)(%rdi)
+#define dsPrev ( 88 + STRUCT_OFFSET)(%rdi)
+#define dsMatchLen (136 + STRUCT_OFFSET)(%rdi)
+#define dsPrevMatch (140 + STRUCT_OFFSET)(%rdi)
+#define dsStrStart (148 + STRUCT_OFFSET)(%rdi)
+#define dsMatchStart (152 + STRUCT_OFFSET)(%rdi)
+#define dsLookahead (156 + STRUCT_OFFSET)(%rdi)
+#define dsPrevLen (160 + STRUCT_OFFSET)(%rdi)
+#define dsMaxChainLen (164 + STRUCT_OFFSET)(%rdi)
+#define dsGoodMatch (180 + STRUCT_OFFSET)(%rdi)
+#define dsNiceMatch (184 + STRUCT_OFFSET)(%rdi)
+
+#endif
+
+
+
+
+.text
+
+/* uInt longest_match(deflate_state *deflatestate, IPos curmatch) */
+
+longest_match:
+/*
+ * Retrieve the function arguments. %curmatch will hold cur_match
+ * throughout the entire function (passed via rsi on amd64).
+ * rdi will hold the pointer to the deflate_state (first arg on amd64)
+ */
+ mov %rsi, save_rsi
+ mov %rbx, save_rbx
+ mov %r12, save_r12
+ mov %r13, save_r13
+ mov %r14, save_r14
+ mov %r15, save_r15
+
+/* uInt wmask = s->w_mask; */
+/* unsigned chain_length = s->max_chain_length; */
+/* if (s->prev_length >= s->good_match) { */
+/* chain_length >>= 2; */
+/* } */
+
+ movl dsPrevLen, %eax
+ movl dsGoodMatch, %ebx
+ cmpl %ebx, %eax
+ movl dsWMask, %eax
+ movl dsMaxChainLen, %chainlenwmask
+ jl LastMatchGood
+ shrl $2, %chainlenwmask
+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. */
+
+ decl %chainlenwmask
+ shll $16, %chainlenwmask
+ orl %eax, %chainlenwmask
+
+/* if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; */
+
+ movl dsNiceMatch, %eax
+ movl dsLookahead, %ebx
+ cmpl %eax, %ebx
+ jl LookaheadLess
+ movl %eax, %ebx
+LookaheadLess: movl %ebx, %nicematch
+
+/* register Bytef *scan = s->window + s->strstart; */
+
+ mov dsWindow, %window
+ movl dsStrStart, %limitd
+ lea (%limit, %window), %scan
+
+/* Determine how many bytes the scan ptr is off from being */
+/* dword-aligned. */
+
+ mov %scan, %scanalign
+ negl %scanalignd
+ andl $3, %scanalignd
+
+/* IPos limit = s->strstart > (IPos)MAX_DIST(s) ? */
+/* s->strstart - (IPos)MAX_DIST(s) : NIL; */
+
+ movl dsWSize, %eax
+ subl $MIN_LOOKAHEAD, %eax
+ xorl %ecx, %ecx
+ subl %eax, %limitd
+ cmovng %ecx, %limitd
+
+/* int best_len = s->prev_length; */
+
+ movl dsPrevLen, %bestlend
+
+/* Store the sum of s->window + best_len in %windowbestlen locally, and in memory. */
+
+ lea (%window, %bestlen), %windowbestlen
+ mov %windowbestlen, _windowbestlen
+
+/* register ush scan_start = *(ushf*)scan; */
+/* register ush scan_end = *(ushf*)(scan+best_len-1); */
+/* Posf *prev = s->prev; */
+
+ movzwl (%scan), %scanstart
+ movzwl -1(%scan, %bestlen), %scanend
+ mov dsPrev, %prev
+
+/* Jump into the main loop. */
+
+ movl %chainlenwmask, _chainlenwmask
+ jmp LoopEntry
+
+.balign 16
+
+/* 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.
+ */
+LookupLoop:
+ andl %chainlenwmask, %curmatchd
+ movzwl (%prev, %curmatch, 2), %curmatchd
+ cmpl %limitd, %curmatchd
+ jbe LeaveNow
+ subl $0x00010000, %chainlenwmask
+ js LeaveNow
+LoopEntry: cmpw -1(%windowbestlen, %curmatch), %scanendw
+ jne LookupLoop
+ cmpw %scanstartw, (%window, %curmatch)
+ jne LookupLoop
+
+/* Store the current value of chainlen. */
+ movl %chainlenwmask, _chainlenwmask
+
+/* %scan is the string under scrutiny, and %prev 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). */
+
+ mov $(-MAX_MATCH_8), %rdx
+ lea (%curmatch, %window), %windowbestlen
+ lea MAX_MATCH_8(%windowbestlen, %scanalign), %windowbestlen
+ lea MAX_MATCH_8(%scan, %scanalign), %prev
+
+/* the prefetching below makes very little difference... */
+ prefetcht1 (%windowbestlen, %rdx)
+ prefetcht1 (%prev, %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.
+ *
+ * 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 -- unrolling it, for example, makes no difference.
+ */
+
+#undef USE_SSE /* works, but is 6-7% slower, than non-SSE... */
+
+LoopCmps:
+#ifdef USE_SSE
+ /* Preload the SSE registers */
+ movdqu (%windowbestlen, %rdx), %xmm1
+ movdqu (%prev, %rdx), %xmm2
+ pcmpeqb %xmm2, %xmm1
+ movdqu 16(%windowbestlen, %rdx), %xmm3
+ movdqu 16(%prev, %rdx), %xmm4
+ pcmpeqb %xmm4, %xmm3
+ movdqu 32(%windowbestlen, %rdx), %xmm5
+ movdqu 32(%prev, %rdx), %xmm6
+ pcmpeqb %xmm6, %xmm5
+ movdqu 48(%windowbestlen, %rdx), %xmm7
+ movdqu 48(%prev, %rdx), %xmm8
+ pcmpeqb %xmm8, %xmm7
+
+ /* Check the comparisions' results */
+ pmovmskb %xmm1, %rax
+ notw %ax
+ bsfw %ax, %ax
+ jnz LeaveLoopCmps
+
+ /* this is the only iteration of the loop with a possibility of having
+ incremented rdx by 0x108 (each loop iteration add 16*4 = 0x40
+ and (0x40*4)+8=0x108 */
+ add $8, %rdx
+ jz LenMaximum
+ add $8, %rdx
+
+
+ pmovmskb %xmm3, %rax
+ notw %ax
+ bsfw %ax, %ax
+ jnz LeaveLoopCmps
+
+
+ add $16, %rdx
+
+
+ pmovmskb %xmm5, %rax
+ notw %ax
+ bsfw %ax, %ax
+ jnz LeaveLoopCmps
+
+ add $16, %rdx
+
+
+ pmovmskb %xmm7, %rax
+ notw %ax
+ bsfw %ax, %ax
+ jnz LeaveLoopCmps
+
+ add $16, %rdx
+
+ jmp LoopCmps
+LeaveLoopCmps: add %rax, %rdx
+#else
+ mov (%windowbestlen, %rdx), %rax
+ xor (%prev, %rdx), %rax
+ jnz LeaveLoopCmps
+
+ mov 8(%windowbestlen, %rdx), %rax
+ xor 8(%prev, %rdx), %rax
+ jnz LeaveLoopCmps8
+
+ mov 16(%windowbestlen, %rdx), %rax
+ xor 16(%prev, %rdx), %rax
+ jnz LeaveLoopCmps16
+
+ add $24, %rdx
+ jnz LoopCmps
+ jmp LenMaximum
+# if 0
+/*
+ * This three-liner is tantalizingly simple, but bsf is a slow instruction,
+ * and the complicated alternative down below is quite a bit faster. Sad...
+ */
+
+LeaveLoopCmps: bsf %rax, %rax /* find the first non-zero bit */
+ shrl $3, %eax /* divide by 8 to get the byte */
+ add %rax, %rdx
+# else
+LeaveLoopCmps16:
+ add $8, %rdx
+LeaveLoopCmps8:
+ add $8, %rdx
+LeaveLoopCmps: testl $0xFFFFFFFF, %eax /* Check the first 4 bytes */
+ jnz Check16
+ add $4, %rdx
+ shr $32, %rax
+Check16: testw $0xFFFF, %ax
+ jnz LenLower
+ add $2, %rdx
+ shrl $16, %eax
+LenLower: subb $1, %al
+ adc $0, %rdx
+# endif
+#endif
+
+/* 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 (%prev, %rdx), %rax
+ sub %scan, %rax
+ cmpl $MAX_MATCH, %eax
+ jge LenMaximum
+
+/* 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. */
+
+ cmpl %bestlend, %eax
+ jg LongerMatch
+ mov _windowbestlen, %windowbestlen
+ mov dsPrev, %prev
+ movl _chainlenwmask, %edx
+ jmp LookupLoop
+
+/* s->match_start = cur_match; */
+/* best_len = len; */
+/* if (len >= nice_match) break; */
+/* scan_end = *(ushf*)(scan+best_len-1); */
+
+LongerMatch:
+ movl %eax, %bestlend
+ movl %curmatchd, dsMatchStart
+ cmpl %nicematch, %eax
+ jge LeaveNow
+
+ lea (%window, %bestlen), %windowbestlen
+ mov %windowbestlen, _windowbestlen
+
+ movzwl -1(%scan, %rax), %scanend
+ mov dsPrev, %prev
+ movl _chainlenwmask, %chainlenwmask
+ jmp LookupLoop
+
+/* Accept the current string, with the maximum possible length. */
+
+LenMaximum:
+ movl $MAX_MATCH, %bestlend
+ movl %curmatchd, dsMatchStart
+
+/* if ((uInt)best_len <= s->lookahead) return (uInt)best_len; */
+/* return s->lookahead; */
+
+LeaveNow:
+ movl dsLookahead, %eax
+ cmpl %eax, %bestlend
+ cmovngl %bestlend, %eax
+LookaheadRet:
+
+/* Restore the registers and return from whence we came. */
+
+ mov save_rsi, %rsi
+ mov save_rbx, %rbx
+ mov save_r12, %r12
+ mov save_r13, %r13
+ mov save_r14, %r14
+ mov save_r15, %r15
+
+ ret
+
+match_init: ret
diff --git a/protocols/Telegram/tgl/zlib/contrib/asm686/README.686 b/protocols/Telegram/tgl/zlib/contrib/asm686/README.686
new file mode 100644
index 0000000000..a0bf3bea4a
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/asm686/README.686
@@ -0,0 +1,51 @@
+This is a patched version of zlib, modified to use
+Pentium-Pro-optimized assembly code in the deflation algorithm. The
+files changed/added by this patch are:
+
+README.686
+match.S
+
+The speedup that this patch provides varies, depending on whether the
+compiler used to build the original version of zlib falls afoul of the
+PPro's speed traps. My own tests show a speedup of around 10-20% at
+the default compression level, and 20-30% using -9, against a version
+compiled using gcc 2.7.2.3. Your mileage may vary.
+
+Note that this code has been tailored for the PPro/PII in particular,
+and will not perform particuarly well on a Pentium.
+
+If you are using an assembler other than GNU as, you will have to
+translate match.S to use your assembler's syntax. (Have fun.)
+
+Brian Raiter
+breadbox@muppetlabs.com
+April, 1998
+
+
+Added for zlib 1.1.3:
+
+The patches come from
+http://www.muppetlabs.com/~breadbox/software/assembly.html
+
+To compile zlib with this asm file, copy match.S to the zlib directory
+then do:
+
+CFLAGS="-O3 -DASMV" ./configure
+make OBJA=match.o
+
+
+Update:
+
+I've been ignoring these assembly routines for years, believing that
+gcc's generated code had caught up with it sometime around gcc 2.95
+and the major rearchitecting of the Pentium 4. However, I recently
+learned that, despite what I believed, this code still has some life
+in it. On the Pentium 4 and AMD64 chips, it continues to run about 8%
+faster than the code produced by gcc 4.1.
+
+In acknowledgement of its continuing usefulness, I've altered the
+license to match that of the rest of zlib. Share and Enjoy!
+
+Brian Raiter
+breadbox@muppetlabs.com
+April, 2007
diff --git a/protocols/Telegram/tgl/zlib/contrib/asm686/match.S b/protocols/Telegram/tgl/zlib/contrib/asm686/match.S
new file mode 100644
index 0000000000..fa42109278
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/asm686/match.S
@@ -0,0 +1,357 @@
+/* match.S -- x86 assembly version of the zlib longest_match() function.
+ * Optimized for the Intel 686 chips (PPro and later).
+ *
+ * Copyright (C) 1998, 2007 Brian Raiter <breadbox@muppetlabs.com>
+ *
+ * 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.
+ */
+
+#ifndef NO_UNDERLINE
+#define match_init _match_init
+#define longest_match _longest_match
+#endif
+
+#define MAX_MATCH (258)
+#define MIN_MATCH (3)
+#define MIN_LOOKAHEAD (MAX_MATCH + MIN_MATCH + 1)
+#define MAX_MATCH_8 ((MAX_MATCH + 7) & ~7)
+
+/* stack frame offsets */
+
+#define chainlenwmask 0 /* high word: current chain len */
+ /* low word: s->wmask */
+#define window 4 /* local copy of s->window */
+#define windowbestlen 8 /* s->window + bestlen */
+#define scanstart 16 /* first two bytes of string */
+#define scanend 12 /* last two bytes of string */
+#define scanalign 20 /* dword-misalignment of string */
+#define nicematch 24 /* a good enough match size */
+#define bestlen 28 /* size of best match so far */
+#define scan 32 /* ptr to string wanting match */
+
+#define LocalVarsSize (36)
+/* saved ebx 36 */
+/* saved edi 40 */
+/* saved esi 44 */
+/* saved ebp 48 */
+/* return address 52 */
+#define deflatestate 56 /* the function arguments */
+#define curmatch 60
+
+/* 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").
+ */
+
+#define zlib1222add (8)
+
+#define dsWSize (36+zlib1222add)
+#define dsWMask (44+zlib1222add)
+#define dsWindow (48+zlib1222add)
+#define dsPrev (56+zlib1222add)
+#define dsMatchLen (88+zlib1222add)
+#define dsPrevMatch (92+zlib1222add)
+#define dsStrStart (100+zlib1222add)
+#define dsMatchStart (104+zlib1222add)
+#define dsLookahead (108+zlib1222add)
+#define dsPrevLen (112+zlib1222add)
+#define dsMaxChainLen (116+zlib1222add)
+#define dsGoodMatch (132+zlib1222add)
+#define dsNiceMatch (136+zlib1222add)
+
+
+.file "match.S"
+
+.globl match_init, longest_match
+
+.text
+
+/* uInt longest_match(deflate_state *deflatestate, IPos curmatch) */
+.cfi_sections .debug_frame
+
+longest_match:
+
+.cfi_startproc
+/* Save registers that the compiler may be using, and adjust %esp to */
+/* make room for our stack frame. */
+
+ pushl %ebp
+ .cfi_def_cfa_offset 8
+ .cfi_offset ebp, -8
+ pushl %edi
+ .cfi_def_cfa_offset 12
+ pushl %esi
+ .cfi_def_cfa_offset 16
+ pushl %ebx
+ .cfi_def_cfa_offset 20
+ subl $LocalVarsSize, %esp
+ .cfi_def_cfa_offset LocalVarsSize+20
+
+/* Retrieve the function arguments. %ecx 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). */
+
+ movl deflatestate(%esp), %edx
+ movl curmatch(%esp), %ecx
+
+/* uInt wmask = s->w_mask; */
+/* unsigned chain_length = s->max_chain_length; */
+/* if (s->prev_length >= s->good_match) { */
+/* chain_length >>= 2; */
+/* } */
+
+ movl dsPrevLen(%edx), %eax
+ movl dsGoodMatch(%edx), %ebx
+ cmpl %ebx, %eax
+ movl dsWMask(%edx), %eax
+ movl dsMaxChainLen(%edx), %ebx
+ jl LastMatchGood
+ shrl $2, %ebx
+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. */
+
+ decl %ebx
+ shll $16, %ebx
+ orl %eax, %ebx
+ movl %ebx, chainlenwmask(%esp)
+
+/* if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; */
+
+ movl dsNiceMatch(%edx), %eax
+ movl dsLookahead(%edx), %ebx
+ cmpl %eax, %ebx
+ jl LookaheadLess
+ movl %eax, %ebx
+LookaheadLess: movl %ebx, nicematch(%esp)
+
+/* register Bytef *scan = s->window + s->strstart; */
+
+ movl dsWindow(%edx), %esi
+ movl %esi, window(%esp)
+ movl dsStrStart(%edx), %ebp
+ lea (%esi,%ebp), %edi
+ movl %edi, scan(%esp)
+
+/* Determine how many bytes the scan ptr is off from being */
+/* dword-aligned. */
+
+ movl %edi, %eax
+ negl %eax
+ andl $3, %eax
+ movl %eax, scanalign(%esp)
+
+/* IPos limit = s->strstart > (IPos)MAX_DIST(s) ? */
+/* s->strstart - (IPos)MAX_DIST(s) : NIL; */
+
+ movl dsWSize(%edx), %eax
+ subl $MIN_LOOKAHEAD, %eax
+ subl %eax, %ebp
+ jg LimitPositive
+ xorl %ebp, %ebp
+LimitPositive:
+
+/* int best_len = s->prev_length; */
+
+ movl dsPrevLen(%edx), %eax
+ movl %eax, bestlen(%esp)
+
+/* Store the sum of s->window + best_len in %esi locally, and in %esi. */
+
+ addl %eax, %esi
+ movl %esi, windowbestlen(%esp)
+
+/* register ush scan_start = *(ushf*)scan; */
+/* register ush scan_end = *(ushf*)(scan+best_len-1); */
+/* Posf *prev = s->prev; */
+
+ movzwl (%edi), %ebx
+ movl %ebx, scanstart(%esp)
+ movzwl -1(%edi,%eax), %ebx
+ movl %ebx, scanend(%esp)
+ movl dsPrev(%edx), %edi
+
+/* Jump into the main loop. */
+
+ movl chainlenwmask(%esp), %edx
+ jmp LoopEntry
+
+.balign 16
+
+/* 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
+ * %ecx = curmatch
+ * %edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)
+ * %esi = windowbestlen - i.e., (window + bestlen)
+ * %edi = prev
+ * %ebp = limit
+ */
+LookupLoop:
+ andl %edx, %ecx
+ movzwl (%edi,%ecx,2), %ecx
+ cmpl %ebp, %ecx
+ jbe LeaveNow
+ subl $0x00010000, %edx
+ js LeaveNow
+LoopEntry: movzwl -1(%esi,%ecx), %eax
+ cmpl %ebx, %eax
+ jnz LookupLoop
+ movl window(%esp), %eax
+ movzwl (%eax,%ecx), %eax
+ cmpl scanstart(%esp), %eax
+ jnz LookupLoop
+
+/* Store the current value of chainlen. */
+
+ movl %edx, chainlenwmask(%esp)
+
+/* 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). */
+
+ movl window(%esp), %esi
+ movl scan(%esp), %edi
+ addl %ecx, %esi
+ movl scanalign(%esp), %eax
+ movl $(-MAX_MATCH_8), %edx
+ lea MAX_MATCH_8(%edi,%eax), %edi
+ lea MAX_MATCH_8(%esi,%eax), %esi
+
+/* Test the strings for equality, 8 bytes at a time. At the end,
+ * adjust %edx 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. (%esi 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:
+ movl (%esi,%edx), %eax
+ xorl (%edi,%edx), %eax
+ jnz LeaveLoopCmps
+ movl 4(%esi,%edx), %eax
+ xorl 4(%edi,%edx), %eax
+ jnz LeaveLoopCmps4
+ addl $8, %edx
+ jnz LoopCmps
+ jmp LenMaximum
+LeaveLoopCmps4: addl $4, %edx
+LeaveLoopCmps: testl $0x0000FFFF, %eax
+ jnz LenLower
+ addl $2, %edx
+ shrl $16, %eax
+LenLower: subb $1, %al
+ adcl $0, %edx
+
+/* 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 (%edi,%edx), %eax
+ movl scan(%esp), %edi
+ subl %edi, %eax
+ cmpl $MAX_MATCH, %eax
+ jge LenMaximum
+
+/* 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. */
+
+ movl deflatestate(%esp), %edx
+ movl bestlen(%esp), %ebx
+ cmpl %ebx, %eax
+ jg LongerMatch
+ movl windowbestlen(%esp), %esi
+ movl dsPrev(%edx), %edi
+ movl scanend(%esp), %ebx
+ movl chainlenwmask(%esp), %edx
+ jmp LookupLoop
+
+/* s->match_start = cur_match; */
+/* best_len = len; */
+/* if (len >= nice_match) break; */
+/* scan_end = *(ushf*)(scan+best_len-1); */
+
+LongerMatch: movl nicematch(%esp), %ebx
+ movl %eax, bestlen(%esp)
+ movl %ecx, dsMatchStart(%edx)
+ cmpl %ebx, %eax
+ jge LeaveNow
+ movl window(%esp), %esi
+ addl %eax, %esi
+ movl %esi, windowbestlen(%esp)
+ movzwl -1(%edi,%eax), %ebx
+ movl dsPrev(%edx), %edi
+ movl %ebx, scanend(%esp)
+ movl chainlenwmask(%esp), %edx
+ jmp LookupLoop
+
+/* Accept the current string, with the maximum possible length. */
+
+LenMaximum: movl deflatestate(%esp), %edx
+ movl $MAX_MATCH, bestlen(%esp)
+ movl %ecx, dsMatchStart(%edx)
+
+/* if ((uInt)best_len <= s->lookahead) return (uInt)best_len; */
+/* return s->lookahead; */
+
+LeaveNow:
+ movl deflatestate(%esp), %edx
+ movl bestlen(%esp), %ebx
+ movl dsLookahead(%edx), %eax
+ cmpl %eax, %ebx
+ jg LookaheadRet
+ movl %ebx, %eax
+LookaheadRet:
+
+/* Restore the stack and return from whence we came. */
+
+ addl $LocalVarsSize, %esp
+ .cfi_def_cfa_offset 20
+ popl %ebx
+ .cfi_def_cfa_offset 16
+ popl %esi
+ .cfi_def_cfa_offset 12
+ popl %edi
+ .cfi_def_cfa_offset 8
+ popl %ebp
+ .cfi_def_cfa_offset 4
+.cfi_endproc
+match_init: ret
diff --git a/protocols/Telegram/tgl/zlib/contrib/blast/Makefile b/protocols/Telegram/tgl/zlib/contrib/blast/Makefile
new file mode 100644
index 0000000000..9be80bafe0
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/blast/README b/protocols/Telegram/tgl/zlib/contrib/blast/README
new file mode 100644
index 0000000000..e3a60b3f5c
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/blast/README
@@ -0,0 +1,4 @@
+Read blast.h for purpose and usage.
+
+Mark Adler
+madler@alumni.caltech.edu
diff --git a/protocols/Telegram/tgl/zlib/contrib/blast/blast.c b/protocols/Telegram/tgl/zlib/contrib/blast/blast.c
new file mode 100644
index 0000000000..69ef0fe00e
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/blast/blast.c
@@ -0,0 +1,446 @@
+/* blast.c
+ * Copyright (C) 2003, 2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in blast.h
+ * version 1.2, 24 Oct 2012
+ *
+ * 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
+ */
+
+#include <setjmp.h> /* 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 th 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)
+{
+ struct state s; /* input/output state */
+ int err; /* return value */
+
+ /* initialize input state */
+ s.infun = infun;
+ s.inhow = inhow;
+ 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 */
+
+ /* 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 <stdio.h>
+#include <stdlib.h>
+
+#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, n;
+
+ /* decompress to stdout */
+ ret = blast(inf, stdin, outf, stdout);
+ if (ret != 0) fprintf(stderr, "blast error: %d\n", ret);
+
+ /* see if there are any leftover bytes */
+ n = 0;
+ while (getchar() != EOF) n++;
+ if (n) fprintf(stderr, "blast warning: %d unused bytes of input\n", n);
+
+ /* return blast() error code */
+ return ret;
+}
+#endif
diff --git a/protocols/Telegram/tgl/zlib/contrib/blast/blast.h b/protocols/Telegram/tgl/zlib/contrib/blast/blast.h
new file mode 100644
index 0000000000..658cfd3200
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/blast/blast.h
@@ -0,0 +1,75 @@
+/* blast.h -- interface for blast.c
+ Copyright (C) 2003, 2012 Mark Adler
+ version 1.2, 24 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
+ */
+
+
+/*
+ * 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);
+/* 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.
+ *
+ * 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.
+ *
+ * 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/protocols/Telegram/tgl/zlib/contrib/blast/test.pk b/protocols/Telegram/tgl/zlib/contrib/blast/test.pk
new file mode 100644
index 0000000000..be10b2bbb2
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/blast/test.pk
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/blast/test.txt b/protocols/Telegram/tgl/zlib/contrib/blast/test.txt
new file mode 100644
index 0000000000..bfdf1c5dca
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/blast/test.txt
@@ -0,0 +1 @@
+AIAIAIAIAIAIA \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/delphi/ZLib.pas b/protocols/Telegram/tgl/zlib/contrib/delphi/ZLib.pas
new file mode 100644
index 0000000000..a579974f04
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 <cosmint@cs.ubbcluj.ro> }
+
+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.2.8';
+
+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/protocols/Telegram/tgl/zlib/contrib/delphi/ZLibConst.pas b/protocols/Telegram/tgl/zlib/contrib/delphi/ZLibConst.pas
new file mode 100644
index 0000000000..cdfe13671d
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/delphi/readme.txt b/protocols/Telegram/tgl/zlib/contrib/delphi/readme.txt
new file mode 100644
index 0000000000..2dc9a8bba2
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 <cosmint@cs.ubbcluj.ro>
diff --git a/protocols/Telegram/tgl/zlib/contrib/delphi/zlibd32.mak b/protocols/Telegram/tgl/zlib/contrib/delphi/zlibd32.mak
new file mode 100644
index 0000000000..9bb00b7cc4
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib.build b/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib.build
new file mode 100644
index 0000000000..7f90d6bc7c
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib.build
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<project name="DotZLib" default="build" basedir="./DotZLib">
+ <description>A .Net wrapper library around ZLib1.dll</description>
+
+ <property name="nunit.location" value="c:/program files/NUnit V2.1/bin" />
+ <property name="build.root" value="bin" />
+
+ <property name="debug" value="true" />
+ <property name="nunit" value="true" />
+
+ <property name="build.folder" value="${build.root}/debug/" if="${debug}" />
+ <property name="build.folder" value="${build.root}/release/" unless="${debug}" />
+
+ <target name="clean" description="Remove all generated files">
+ <delete dir="${build.root}" failonerror="false" />
+ </target>
+
+ <target name="build" description="compiles the source code">
+
+ <mkdir dir="${build.folder}" />
+ <csc target="library" output="${build.folder}DotZLib.dll" debug="${debug}">
+ <references basedir="${nunit.location}">
+ <includes if="${nunit}" name="nunit.framework.dll" />
+ </references>
+ <sources>
+ <includes name="*.cs" />
+ <excludes name="UnitTests.cs" unless="${nunit}" />
+ </sources>
+ <arg value="/d:nunit" if="${nunit}" />
+ </csc>
+ </target>
+
+</project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib.chm b/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib.chm
new file mode 100644
index 0000000000..f214a444ae
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib.chm
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib.sln b/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib.sln
new file mode 100644
index 0000000000..ac45ca048b
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib.sln
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotZLib", "DotZLib\DotZLib.csproj", "{BB1EE0B1-1808-46CB-B786-949D91117FC5}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {BB1EE0B1-1808-46CB-B786-949D91117FC5}.Debug.ActiveCfg = Debug|.NET
+ {BB1EE0B1-1808-46CB-B786-949D91117FC5}.Debug.Build.0 = Debug|.NET
+ {BB1EE0B1-1808-46CB-B786-949D91117FC5}.Release.ActiveCfg = Release|.NET
+ {BB1EE0B1-1808-46CB-B786-949D91117FC5}.Release.Build.0 = Release|.NET
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs b/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs
new file mode 100644
index 0000000000..0491bfc2b0
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs
@@ -0,0 +1,58 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+//
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+//
+[assembly: AssemblyTitle("DotZLib")]
+[assembly: AssemblyDescription(".Net bindings for ZLib compression dll 1.2.x")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Henrik Ravn")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("(c) 2004 by Henrik Ravn")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+//
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers
+// by using the '*' as shown below:
+
+[assembly: AssemblyVersion("1.0.*")]
+
+//
+// In order to sign your assembly you must specify a key to use. Refer to the
+// Microsoft .NET Framework documentation for more information on assembly signing.
+//
+// Use the attributes below to control which key is used for signing.
+//
+// Notes:
+// (*) If no key is specified, the assembly is not signed.
+// (*) KeyName refers to a key that has been installed in the Crypto Service
+// Provider (CSP) on your machine. KeyFile refers to a file which contains
+// a key.
+// (*) If the KeyFile and the KeyName values are both specified, the
+// following processing occurs:
+// (1) If the KeyName can be found in the CSP, that key is used.
+// (2) If the KeyName does not exist and the KeyFile does exist, the key
+// in the KeyFile is installed into the CSP and used.
+// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
+// When specifying the KeyFile, the location of the KeyFile should be
+// relative to the project output directory which is
+// %Project Directory%\obj\<configuration>. 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/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs b/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs
new file mode 100644
index 0000000000..788b2fcece
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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
+ /// <summary>
+ /// Implements the common functionality needed for all <see cref="ChecksumGenerator"/>s
+ /// </summary>
+ /// <example></example>
+ public abstract class ChecksumGeneratorBase : ChecksumGenerator
+ {
+ /// <summary>
+ /// The value of the current checksum
+ /// </summary>
+ protected uint _current;
+
+ /// <summary>
+ /// Initializes a new instance of the checksum generator base - the current checksum is
+ /// set to zero
+ /// </summary>
+ public ChecksumGeneratorBase()
+ {
+ _current = 0;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the checksum generator basewith a specified value
+ /// </summary>
+ /// <param name="initialValue">The value to set the current checksum to</param>
+ public ChecksumGeneratorBase(uint initialValue)
+ {
+ _current = initialValue;
+ }
+
+ /// <summary>
+ /// Resets the current checksum to zero
+ /// </summary>
+ public void Reset() { _current = 0; }
+
+ /// <summary>
+ /// Gets the current checksum value
+ /// </summary>
+ public uint Value { get { return _current; } }
+
+ /// <summary>
+ /// Updates the current checksum with part of an array of bytes
+ /// </summary>
+ /// <param name="data">The data to update the checksum with</param>
+ /// <param name="offset">Where in <c>data</c> to start updating</param>
+ /// <param name="count">The number of bytes from <c>data</c> to use</param>
+ /// <exception cref="ArgumentException">The sum of offset and count is larger than the length of <c>data</c></exception>
+ /// <exception cref="NullReferenceException"><c>data</c> is a null reference</exception>
+ /// <exception cref="ArgumentOutOfRangeException">Offset or count is negative.</exception>
+ /// <remarks>All the other <c>Update</c> methods are implmeneted in terms of this one.
+ /// This is therefore the only method a derived class has to implement</remarks>
+ public abstract void Update(byte[] data, int offset, int count);
+
+ /// <summary>
+ /// Updates the current checksum with an array of bytes.
+ /// </summary>
+ /// <param name="data">The data to update the checksum with</param>
+ public void Update(byte[] data)
+ {
+ Update(data, 0, data.Length);
+ }
+
+ /// <summary>
+ /// Updates the current checksum with the data from a string
+ /// </summary>
+ /// <param name="data">The string to update the checksum with</param>
+ /// <remarks>The characters in the string are converted by the UTF-8 encoding</remarks>
+ public void Update(string data)
+ {
+ Update(Encoding.UTF8.GetBytes(data));
+ }
+
+ /// <summary>
+ /// Updates the current checksum with the data from a string, using a specific encoding
+ /// </summary>
+ /// <param name="data">The string to update the checksum with</param>
+ /// <param name="encoding">The encoding to use</param>
+ public void Update(string data, Encoding encoding)
+ {
+ Update(encoding.GetBytes(data));
+ }
+
+ }
+ #endregion
+
+ #region CRC32
+ /// <summary>
+ /// Implements a CRC32 checksum generator
+ /// </summary>
+ 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
+
+ /// <summary>
+ /// Initializes a new instance of the CRC32 checksum generator
+ /// </summary>
+ public CRC32Checksum() : base() {}
+
+ /// <summary>
+ /// Initializes a new instance of the CRC32 checksum generator with a specified value
+ /// </summary>
+ /// <param name="initialValue">The value to set the current checksum to</param>
+ public CRC32Checksum(uint initialValue) : base(initialValue) {}
+
+ /// <summary>
+ /// Updates the current checksum with part of an array of bytes
+ /// </summary>
+ /// <param name="data">The data to update the checksum with</param>
+ /// <param name="offset">Where in <c>data</c> to start updating</param>
+ /// <param name="count">The number of bytes from <c>data</c> to use</param>
+ /// <exception cref="ArgumentException">The sum of offset and count is larger than the length of <c>data</c></exception>
+ /// <exception cref="NullReferenceException"><c>data</c> is a null reference</exception>
+ /// <exception cref="ArgumentOutOfRangeException">Offset or count is negative.</exception>
+ 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
+ /// <summary>
+ /// Implements a checksum generator that computes the Adler checksum on data
+ /// </summary>
+ 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
+
+ /// <summary>
+ /// Initializes a new instance of the Adler checksum generator
+ /// </summary>
+ public AdlerChecksum() : base() {}
+
+ /// <summary>
+ /// Initializes a new instance of the Adler checksum generator with a specified value
+ /// </summary>
+ /// <param name="initialValue">The value to set the current checksum to</param>
+ public AdlerChecksum(uint initialValue) : base(initialValue) {}
+
+ /// <summary>
+ /// Updates the current checksum with part of an array of bytes
+ /// </summary>
+ /// <param name="data">The data to update the checksum with</param>
+ /// <param name="offset">Where in <c>data</c> to start updating</param>
+ /// <param name="count">The number of bytes from <c>data</c> to use</param>
+ /// <exception cref="ArgumentException">The sum of offset and count is larger than the length of <c>data</c></exception>
+ /// <exception cref="NullReferenceException"><c>data</c> is a null reference</exception>
+ /// <exception cref="ArgumentOutOfRangeException">Offset or count is negative.</exception>
+ 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/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs b/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs
new file mode 100644
index 0000000000..c1cab3a02c
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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
+{
+
+ /// <summary>
+ /// This class implements a circular buffer
+ /// </summary>
+ 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/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/CodecBase.cs b/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/CodecBase.cs
new file mode 100644
index 0000000000..42e6da3a56
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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
+{
+ /// <summary>
+ /// Implements the common functionality needed for all <see cref="Codec"/>s
+ /// </summary>
+ public abstract class CodecBase : Codec, IDisposable
+ {
+
+ #region Data members
+
+ /// <summary>
+ /// Instance of the internal zlib buffer structure that is
+ /// passed to all functions in the zlib dll
+ /// </summary>
+ internal ZStream _ztream = new ZStream();
+
+ /// <summary>
+ /// True if the object instance has been disposed, false otherwise
+ /// </summary>
+ protected bool _isDisposed = false;
+
+ /// <summary>
+ /// The size of the internal buffers
+ /// </summary>
+ 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
+
+ /// <summary>
+ /// Initializes a new instance of the <c>CodeBase</c> class.
+ /// </summary>
+ public CodecBase()
+ {
+ try
+ {
+ _hInput = GCHandle.Alloc(_inBuffer, GCHandleType.Pinned);
+ _hOutput = GCHandle.Alloc(_outBuffer, GCHandleType.Pinned);
+ }
+ catch (Exception)
+ {
+ CleanUp(false);
+ throw;
+ }
+ }
+
+
+ #region Codec Members
+
+ /// <summary>
+ /// Occurs when more processed data are available.
+ /// </summary>
+ public event DataAvailableHandler DataAvailable;
+
+ /// <summary>
+ /// Fires the <see cref="DataAvailable"/> event
+ /// </summary>
+ protected void OnDataAvailable()
+ {
+ if (_ztream.total_out > 0)
+ {
+ if (DataAvailable != null)
+ DataAvailable( _outBuffer, 0, (int)_ztream.total_out);
+ resetOutput();
+ }
+ }
+
+ /// <summary>
+ /// Adds more data to the codec to be processed.
+ /// </summary>
+ /// <param name="data">Byte array containing the data to be added to the codec</param>
+ /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>
+ public void Add(byte[] data)
+ {
+ Add(data,0,data.Length);
+ }
+
+ /// <summary>
+ /// Adds more data to the codec to be processed.
+ /// </summary>
+ /// <param name="data">Byte array containing the data to be added to the codec</param>
+ /// <param name="offset">The index of the first byte to add from <c>data</c></param>
+ /// <param name="count">The number of bytes to add</param>
+ /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>
+ /// <remarks>This must be implemented by a derived class</remarks>
+ public abstract void Add(byte[] data, int offset, int count);
+
+ /// <summary>
+ /// Finishes up any pending data that needs to be processed and handled.
+ /// </summary>
+ /// <remarks>This must be implemented by a derived class</remarks>
+ public abstract void Finish();
+
+ /// <summary>
+ /// Gets the checksum of the data that has been added so far
+ /// </summary>
+ public uint Checksum { get { return _checksum; } }
+
+ #endregion
+
+ #region Destructor & IDisposable stuff
+
+ /// <summary>
+ /// Destroys this instance
+ /// </summary>
+ ~CodecBase()
+ {
+ CleanUp(false);
+ }
+
+ /// <summary>
+ /// Releases any unmanaged resources and calls the <see cref="CleanUp()"/> method of the derived class
+ /// </summary>
+ public void Dispose()
+ {
+ CleanUp(true);
+ }
+
+ /// <summary>
+ /// Performs any codec specific cleanup
+ /// </summary>
+ /// <remarks>This must be implemented by a derived class</remarks>
+ protected abstract void CleanUp();
+
+ // performs the release of the handles and calls the dereived 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
+
+ /// <summary>
+ /// Copies a number of bytes to the internal codec buffer - ready for proccesing
+ /// </summary>
+ /// <param name="data">The byte array that contains the data to copy</param>
+ /// <param name="startIndex">The index of the first byte to copy</param>
+ /// <param name="count">The number of bytes to copy from <c>data</c></param>
+ 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;
+
+ }
+
+ /// <summary>
+ /// Resets the internal output buffers to a known state - ready for processing
+ /// </summary>
+ protected void resetOutput()
+ {
+ _ztream.total_out = 0;
+ _ztream.avail_out = kBufferSize;
+ _ztream.next_out = _hOutput.AddrOfPinnedObject();
+ }
+
+ /// <summary>
+ /// Updates the running checksum property
+ /// </summary>
+ /// <param name="newSum">The new checksum value</param>
+ protected void setChecksum(uint newSum)
+ {
+ _checksum = newSum;
+ }
+ #endregion
+
+ }
+}
diff --git a/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/Deflater.cs b/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/Deflater.cs
new file mode 100644
index 0000000000..c2477925b6
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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
+{
+
+ /// <summary>
+ /// Implements a data compressor, using the deflate algorithm in the ZLib dll
+ /// </summary>
+ 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
+
+ /// <summary>
+ /// Constructs an new instance of the <c>Deflater</c>
+ /// </summary>
+ /// <param name="level">The compression level to use for this <c>Deflater</c></param>
+ 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();
+ }
+
+ /// <summary>
+ /// Adds more data to the codec to be processed.
+ /// </summary>
+ /// <param name="data">Byte array containing the data to be added to the codec</param>
+ /// <param name="offset">The index of the first byte to add from <c>data</c></param>
+ /// <param name="count">The number of bytes to add</param>
+ /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>
+ 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 );
+ }
+
+
+ /// <summary>
+ /// Finishes up any pending data that needs to be processed and handled.
+ /// </summary>
+ 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();
+ }
+
+ /// <summary>
+ /// Closes the internal zlib deflate stream
+ /// </summary>
+ protected override void CleanUp() { deflateEnd(ref _ztream); }
+
+ }
+}
diff --git a/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/DotZLib.cs b/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/DotZLib.cs
new file mode 100644
index 0000000000..be184b4c71
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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
+
+ /// <summary>
+ /// Defines constants for the various flush types used with zlib
+ /// </summary>
+ 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
+ /// <summary>
+ /// Defines constants for the available compression levels in zlib
+ /// </summary>
+ public enum CompressLevel : int
+ {
+ /// <summary>
+ /// The default compression level with a reasonable compromise between compression and speed
+ /// </summary>
+ Default = -1,
+ /// <summary>
+ /// No compression at all. The data are passed straight through.
+ /// </summary>
+ None = 0,
+ /// <summary>
+ /// The maximum compression rate available.
+ /// </summary>
+ Best = 9,
+ /// <summary>
+ /// The fastest available compression level.
+ /// </summary>
+ Fastest = 1
+ }
+ #endregion
+
+ #region Exception classes
+ /// <summary>
+ /// The exception that is thrown when an error occurs on the zlib dll
+ /// </summary>
+ public class ZLibException : ApplicationException
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ZLibException"/> class with a specified
+ /// error message and error code
+ /// </summary>
+ /// <param name="errorCode">The zlib error code that caused the exception</param>
+ /// <param name="msg">A message that (hopefully) describes the error</param>
+ public ZLibException(int errorCode, string msg) : base(String.Format("ZLib error {0} {1}", errorCode, msg))
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ZLibException"/> class with a specified
+ /// error code
+ /// </summary>
+ /// <param name="errorCode">The zlib error code that caused the exception</param>
+ public ZLibException(int errorCode) : base(String.Format("ZLib error {0}", errorCode))
+ {
+ }
+ }
+ #endregion
+
+ #region Interfaces
+
+ /// <summary>
+ /// Declares methods and properties that enables a running checksum to be calculated
+ /// </summary>
+ public interface ChecksumGenerator
+ {
+ /// <summary>
+ /// Gets the current value of the checksum
+ /// </summary>
+ uint Value { get; }
+
+ /// <summary>
+ /// Clears the current checksum to 0
+ /// </summary>
+ void Reset();
+
+ /// <summary>
+ /// Updates the current checksum with an array of bytes
+ /// </summary>
+ /// <param name="data">The data to update the checksum with</param>
+ void Update(byte[] data);
+
+ /// <summary>
+ /// Updates the current checksum with part of an array of bytes
+ /// </summary>
+ /// <param name="data">The data to update the checksum with</param>
+ /// <param name="offset">Where in <c>data</c> to start updating</param>
+ /// <param name="count">The number of bytes from <c>data</c> to use</param>
+ /// <exception cref="ArgumentException">The sum of offset and count is larger than the length of <c>data</c></exception>
+ /// <exception cref="ArgumentNullException"><c>data</c> is a null reference</exception>
+ /// <exception cref="ArgumentOutOfRangeException">Offset or count is negative.</exception>
+ void Update(byte[] data, int offset, int count);
+
+ /// <summary>
+ /// Updates the current checksum with the data from a string
+ /// </summary>
+ /// <param name="data">The string to update the checksum with</param>
+ /// <remarks>The characters in the string are converted by the UTF-8 encoding</remarks>
+ void Update(string data);
+
+ /// <summary>
+ /// Updates the current checksum with the data from a string, using a specific encoding
+ /// </summary>
+ /// <param name="data">The string to update the checksum with</param>
+ /// <param name="encoding">The encoding to use</param>
+ void Update(string data, Encoding encoding);
+ }
+
+
+ /// <summary>
+ /// Represents the method that will be called from a codec when new data
+ /// are available.
+ /// </summary>
+ /// <paramref name="data">The byte array containing the processed data</paramref>
+ /// <paramref name="startIndex">The index of the first processed byte in <c>data</c></paramref>
+ /// <paramref name="count">The number of processed bytes available</paramref>
+ /// <remarks>On return from this method, the data may be overwritten, so grab it while you can.
+ /// You cannot assume that startIndex will be zero.
+ /// </remarks>
+ public delegate void DataAvailableHandler(byte[] data, int startIndex, int count);
+
+ /// <summary>
+ /// Declares methods and events for implementing compressors/decompressors
+ /// </summary>
+ public interface Codec
+ {
+ /// <summary>
+ /// Occurs when more processed data are available.
+ /// </summary>
+ event DataAvailableHandler DataAvailable;
+
+ /// <summary>
+ /// Adds more data to the codec to be processed.
+ /// </summary>
+ /// <param name="data">Byte array containing the data to be added to the codec</param>
+ /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>
+ void Add(byte[] data);
+
+ /// <summary>
+ /// Adds more data to the codec to be processed.
+ /// </summary>
+ /// <param name="data">Byte array containing the data to be added to the codec</param>
+ /// <param name="offset">The index of the first byte to add from <c>data</c></param>
+ /// <param name="count">The number of bytes to add</param>
+ /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>
+ void Add(byte[] data, int offset, int count);
+
+ /// <summary>
+ /// Finishes up any pending data that needs to be processed and handled.
+ /// </summary>
+ void Finish();
+
+ /// <summary>
+ /// Gets the checksum of the data that has been added so far
+ /// </summary>
+ uint Checksum { get; }
+
+
+ }
+
+ #endregion
+
+ #region Classes
+ /// <summary>
+ /// Encapsulates general information about the ZLib library
+ /// </summary>
+ 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
+
+ /// <summary>
+ /// Constructs an instance of the <c>Info</c> class.
+ /// </summary>
+ public Info()
+ {
+ _flags = zlibCompileFlags();
+ }
+
+ /// <summary>
+ /// True if the library is compiled with debug info
+ /// </summary>
+ public bool HasDebugInfo { get { return 0 != (_flags & 0x100); } }
+
+ /// <summary>
+ /// True if the library is compiled with assembly optimizations
+ /// </summary>
+ public bool UsesAssemblyCode { get { return 0 != (_flags & 0x200); } }
+
+ /// <summary>
+ /// Gets the size of the unsigned int that was compiled into Zlib
+ /// </summary>
+ public int SizeOfUInt { get { return bitSize(_flags & 3); } }
+
+ /// <summary>
+ /// Gets the size of the unsigned long that was compiled into Zlib
+ /// </summary>
+ public int SizeOfULong { get { return bitSize((_flags >> 2) & 3); } }
+
+ /// <summary>
+ /// Gets the size of the pointers that were compiled into Zlib
+ /// </summary>
+ public int SizeOfPointer { get { return bitSize((_flags >> 4) & 3); } }
+
+ /// <summary>
+ /// Gets the size of the z_off_t type that was compiled into Zlib
+ /// </summary>
+ public int SizeOfOffset { get { return bitSize((_flags >> 6) & 3); } }
+
+ /// <summary>
+ /// Gets the version of ZLib as a string, e.g. "1.2.1"
+ /// </summary>
+ public static string Version { get { return zlibVersion(); } }
+ }
+
+ #endregion
+
+}
diff --git a/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj b/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj
new file mode 100644
index 0000000000..71eeb8590a
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj
@@ -0,0 +1,141 @@
+<VisualStudioProject>
+ <CSHARP
+ ProjectType = "Local"
+ ProductVersion = "7.10.3077"
+ SchemaVersion = "2.0"
+ ProjectGuid = "{BB1EE0B1-1808-46CB-B786-949D91117FC5}"
+ >
+ <Build>
+ <Settings
+ ApplicationIcon = ""
+ AssemblyKeyContainerName = ""
+ AssemblyName = "DotZLib"
+ AssemblyOriginatorKeyFile = ""
+ DefaultClientScript = "JScript"
+ DefaultHTMLPageLayout = "Grid"
+ DefaultTargetSchema = "IE50"
+ DelaySign = "false"
+ OutputType = "Library"
+ PreBuildEvent = ""
+ PostBuildEvent = ""
+ RootNamespace = "DotZLib"
+ RunPostBuildEvent = "OnBuildSuccess"
+ StartupObject = ""
+ >
+ <Config
+ Name = "Debug"
+ AllowUnsafeBlocks = "false"
+ BaseAddress = "285212672"
+ CheckForOverflowUnderflow = "false"
+ ConfigurationOverrideFile = ""
+ DefineConstants = "DEBUG;TRACE"
+ DocumentationFile = "docs\DotZLib.xml"
+ DebugSymbols = "true"
+ FileAlignment = "4096"
+ IncrementalBuild = "false"
+ NoStdLib = "false"
+ NoWarn = "1591"
+ Optimize = "false"
+ OutputPath = "bin\Debug\"
+ RegisterForComInterop = "false"
+ RemoveIntegerChecks = "false"
+ TreatWarningsAsErrors = "false"
+ WarningLevel = "4"
+ />
+ <Config
+ Name = "Release"
+ AllowUnsafeBlocks = "false"
+ BaseAddress = "285212672"
+ CheckForOverflowUnderflow = "false"
+ ConfigurationOverrideFile = ""
+ DefineConstants = "TRACE"
+ DocumentationFile = "docs\DotZLib.xml"
+ DebugSymbols = "false"
+ FileAlignment = "4096"
+ IncrementalBuild = "false"
+ NoStdLib = "false"
+ NoWarn = ""
+ Optimize = "true"
+ OutputPath = "bin\Release\"
+ RegisterForComInterop = "false"
+ RemoveIntegerChecks = "false"
+ TreatWarningsAsErrors = "false"
+ WarningLevel = "4"
+ />
+ </Settings>
+ <References>
+ <Reference
+ Name = "System"
+ AssemblyName = "System"
+ HintPath = "C:\WINNT\Microsoft.NET\Framework\v1.1.4322\System.dll"
+ />
+ <Reference
+ Name = "System.Data"
+ AssemblyName = "System.Data"
+ HintPath = "C:\WINNT\Microsoft.NET\Framework\v1.1.4322\System.Data.dll"
+ />
+ <Reference
+ Name = "System.XML"
+ AssemblyName = "System.Xml"
+ HintPath = "C:\WINNT\Microsoft.NET\Framework\v1.1.4322\System.XML.dll"
+ />
+ <Reference
+ Name = "nunit.framework"
+ AssemblyName = "nunit.framework"
+ HintPath = "E:\apps\NUnit V2.1\\bin\nunit.framework.dll"
+ AssemblyFolderKey = "hklm\dn\nunit.framework"
+ />
+ </References>
+ </Build>
+ <Files>
+ <Include>
+ <File
+ RelPath = "AssemblyInfo.cs"
+ SubType = "Code"
+ BuildAction = "Compile"
+ />
+ <File
+ RelPath = "ChecksumImpl.cs"
+ SubType = "Code"
+ BuildAction = "Compile"
+ />
+ <File
+ RelPath = "CircularBuffer.cs"
+ SubType = "Code"
+ BuildAction = "Compile"
+ />
+ <File
+ RelPath = "CodecBase.cs"
+ SubType = "Code"
+ BuildAction = "Compile"
+ />
+ <File
+ RelPath = "Deflater.cs"
+ SubType = "Code"
+ BuildAction = "Compile"
+ />
+ <File
+ RelPath = "DotZLib.cs"
+ SubType = "Code"
+ BuildAction = "Compile"
+ />
+ <File
+ RelPath = "GZipStream.cs"
+ SubType = "Code"
+ BuildAction = "Compile"
+ />
+ <File
+ RelPath = "Inflater.cs"
+ SubType = "Code"
+ BuildAction = "Compile"
+ />
+ <File
+ RelPath = "UnitTests.cs"
+ SubType = "Code"
+ BuildAction = "Compile"
+ />
+ </Include>
+ </Files>
+ </CSHARP>
+</VisualStudioProject>
+
diff --git a/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/GZipStream.cs b/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/GZipStream.cs
new file mode 100644
index 0000000000..b161300b18
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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
+{
+ /// <summary>
+ /// Implements a compressed <see cref="Stream"/>, in GZip (.gz) format.
+ /// </summary>
+ 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
+ /// <summary>
+ /// Creates a new file as a writeable GZipStream
+ /// </summary>
+ /// <param name="fileName">The name of the compressed file to create</param>
+ /// <param name="level">The compression level to use when adding data</param>
+ /// <exception cref="ZLibException">If an error occurred in the internal zlib function</exception>
+ 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);
+ }
+
+ /// <summary>
+ /// Opens an existing file as a readable GZipStream
+ /// </summary>
+ /// <param name="fileName">The name of the file to open</param>
+ /// <exception cref="ZLibException">If an error occurred in the internal zlib function</exception>
+ 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
+ /// <summary>
+ /// Returns true of this stream can be read from, false otherwise
+ /// </summary>
+ public override bool CanRead
+ {
+ get
+ {
+ return !_isWriting;
+ }
+ }
+
+
+ /// <summary>
+ /// Returns false.
+ /// </summary>
+ public override bool CanSeek
+ {
+ get
+ {
+ return false;
+ }
+ }
+
+ /// <summary>
+ /// Returns true if this tsream is writeable, false otherwise
+ /// </summary>
+ public override bool CanWrite
+ {
+ get
+ {
+ return _isWriting;
+ }
+ }
+ #endregion
+
+ #region Destructor & IDispose stuff
+
+ /// <summary>
+ /// Destroys this instance
+ /// </summary>
+ ~GZipStream()
+ {
+ cleanUp(false);
+ }
+
+ /// <summary>
+ /// Closes the external file handle
+ /// </summary>
+ 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
+ /// <summary>
+ /// Attempts to read a number of bytes from the stream.
+ /// </summary>
+ /// <param name="buffer">The destination data buffer</param>
+ /// <param name="offset">The index of the first destination byte in <c>buffer</c></param>
+ /// <param name="count">The number of bytes requested</param>
+ /// <returns>The number of bytes read</returns>
+ /// <exception cref="ArgumentNullException">If <c>buffer</c> is null</exception>
+ /// <exception cref="ArgumentOutOfRangeException">If <c>count</c> or <c>offset</c> are negative</exception>
+ /// <exception cref="ArgumentException">If <c>offset</c> + <c>count</c> is &gt; buffer.Length</exception>
+ /// <exception cref="NotSupportedException">If this stream is not readable.</exception>
+ /// <exception cref="ObjectDisposedException">If this stream has been disposed.</exception>
+ 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;
+ }
+
+ /// <summary>
+ /// Attempts to read a single byte from the stream.
+ /// </summary>
+ /// <returns>The byte that was read, or -1 in case of error or End-Of-File</returns>
+ public override int ReadByte()
+ {
+ if (!CanRead) throw new NotSupportedException();
+ if (_isDisposed) throw new ObjectDisposedException("GZipStream");
+ return gzgetc(_gzFile);
+ }
+
+ /// <summary>
+ /// Writes a number of bytes to the stream
+ /// </summary>
+ /// <param name="buffer"></param>
+ /// <param name="offset"></param>
+ /// <param name="count"></param>
+ /// <exception cref="ArgumentNullException">If <c>buffer</c> is null</exception>
+ /// <exception cref="ArgumentOutOfRangeException">If <c>count</c> or <c>offset</c> are negative</exception>
+ /// <exception cref="ArgumentException">If <c>offset</c> + <c>count</c> is &gt; buffer.Length</exception>
+ /// <exception cref="NotSupportedException">If this stream is not writeable.</exception>
+ /// <exception cref="ObjectDisposedException">If this stream has been disposed.</exception>
+ 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();
+ }
+ }
+
+ /// <summary>
+ /// Writes a single byte to the stream
+ /// </summary>
+ /// <param name="value">The byte to add to the stream.</param>
+ /// <exception cref="NotSupportedException">If this stream is not writeable.</exception>
+ /// <exception cref="ObjectDisposedException">If this stream has been disposed.</exception>
+ 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
+ /// <summary>
+ /// Not supported.
+ /// </summary>
+ /// <param name="value"></param>
+ /// <exception cref="NotSupportedException">Always thrown</exception>
+ public override void SetLength(long value)
+ {
+ throw new NotSupportedException();
+ }
+
+ /// <summary>
+ /// Not suppported.
+ /// </summary>
+ /// <param name="offset"></param>
+ /// <param name="origin"></param>
+ /// <returns></returns>
+ /// <exception cref="NotSupportedException">Always thrown</exception>
+ public override long Seek(long offset, SeekOrigin origin)
+ {
+ throw new NotSupportedException();
+ }
+
+ /// <summary>
+ /// Flushes the <c>GZipStream</c>.
+ /// </summary>
+ /// <remarks>In this implementation, this method does nothing. This is because excessive
+ /// flushing may degrade the achievable compression rates.</remarks>
+ public override void Flush()
+ {
+ // left empty on purpose
+ }
+
+ /// <summary>
+ /// Gets/sets the current position in the <c>GZipStream</c>. Not suppported.
+ /// </summary>
+ /// <remarks>In this implementation this property is not supported</remarks>
+ /// <exception cref="NotSupportedException">Always thrown</exception>
+ public override long Position
+ {
+ get
+ {
+ throw new NotSupportedException();
+ }
+ set
+ {
+ throw new NotSupportedException();
+ }
+ }
+
+ /// <summary>
+ /// Gets the size of the stream. Not suppported.
+ /// </summary>
+ /// <remarks>In this implementation this property is not supported</remarks>
+ /// <exception cref="NotSupportedException">Always thrown</exception>
+ public override long Length
+ {
+ get
+ {
+ throw new NotSupportedException();
+ }
+ }
+ #endregion
+ }
+}
diff --git a/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/Inflater.cs b/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/Inflater.cs
new file mode 100644
index 0000000000..8ed5451d66
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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
+{
+
+ /// <summary>
+ /// Implements a data decompressor, using the inflate algorithm in the ZLib dll
+ /// </summary>
+ 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
+
+ /// <summary>
+ /// Constructs an new instance of the <c>Inflater</c>
+ /// </summary>
+ 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();
+ }
+
+
+ /// <summary>
+ /// Adds more data to the codec to be processed.
+ /// </summary>
+ /// <param name="data">Byte array containing the data to be added to the codec</param>
+ /// <param name="offset">The index of the first byte to add from <c>data</c></param>
+ /// <param name="count">The number of bytes to add</param>
+ /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>
+ 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 );
+ }
+
+
+ /// <summary>
+ /// Finishes up any pending data that needs to be processed and handled.
+ /// </summary>
+ 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();
+ }
+
+ /// <summary>
+ /// Closes the internal zlib inflate stream
+ /// </summary>
+ protected override void CleanUp() { inflateEnd(ref _ztream); }
+
+
+ }
+}
diff --git a/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/UnitTests.cs b/protocols/Telegram/tgl/zlib/contrib/dotzlib/DotZLib/UnitTests.cs
new file mode 100644
index 0000000000..b273d54b34
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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.2.8", 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/protocols/Telegram/tgl/zlib/contrib/dotzlib/LICENSE_1_0.txt b/protocols/Telegram/tgl/zlib/contrib/dotzlib/LICENSE_1_0.txt
new file mode 100644
index 0000000000..30aac2cf47
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/dotzlib/readme.txt b/protocols/Telegram/tgl/zlib/contrib/dotzlib/readme.txt
new file mode 100644
index 0000000000..b2395720d4
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 esclude 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/protocols/Telegram/tgl/zlib/contrib/gcc_gvmat64/gvmat64.S b/protocols/Telegram/tgl/zlib/contrib/gcc_gvmat64/gvmat64.S
new file mode 100644
index 0000000000..dd858ddbd1
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 <stdlib.h>
+#include <stdio.h>
+#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/protocols/Telegram/tgl/zlib/contrib/infback9/README b/protocols/Telegram/tgl/zlib/contrib/infback9/README
new file mode 100644
index 0000000000..e75ed13294
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/infback9/README
@@ -0,0 +1 @@
+See infback9.h for what this is and how to use it.
diff --git a/protocols/Telegram/tgl/zlib/contrib/infback9/infback9.c b/protocols/Telegram/tgl/zlib/contrib/infback9/infback9.c
new file mode 100644
index 0000000000..05fb3e3380
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/infback9/infback9.c
@@ -0,0 +1,615 @@
+/* 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_(strm, window, version, stream_size)
+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 <stdio.h>
+
+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(strm, in, in_desc, out, out_desc)
+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(strm)
+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/protocols/Telegram/tgl/zlib/contrib/infback9/infback9.h b/protocols/Telegram/tgl/zlib/contrib/infback9/infback9.h
new file mode 100644
index 0000000000..1073c0a38e
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 OF((z_stream FAR *strm,
+ in_func in, void FAR *in_desc,
+ out_func out, void FAR *out_desc));
+ZEXTERN int ZEXPORT inflateBack9End OF((z_stream FAR *strm));
+ZEXTERN int ZEXPORT inflateBack9Init_ OF((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/protocols/Telegram/tgl/zlib/contrib/infback9/inffix9.h b/protocols/Telegram/tgl/zlib/contrib/infback9/inffix9.h
new file mode 100644
index 0000000000..ee5671d2df
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/infback9/inflate9.h b/protocols/Telegram/tgl/zlib/contrib/infback9/inflate9.h
new file mode 100644
index 0000000000..ee9a79394b
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/infback9/inftree9.c b/protocols/Telegram/tgl/zlib/contrib/infback9/inftree9.c
new file mode 100644
index 0000000000..4a73ad215f
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/infback9/inftree9.c
@@ -0,0 +1,324 @@
+/* inftree9.c -- generate Huffman trees for efficient decoding
+ * Copyright (C) 1995-2013 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.2.8 Copyright 1995-2013 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(type, lens, codes, table, bits, work)
+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, 72, 78};
+ 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/protocols/Telegram/tgl/zlib/contrib/infback9/inftree9.h b/protocols/Telegram/tgl/zlib/contrib/infback9/inftree9.h
new file mode 100644
index 0000000000..5ab21f0c6d
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 distribtution. 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 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 OF((codetype type, unsigned short FAR *lens,
+ unsigned codes, code FAR * FAR *table,
+ unsigned FAR *bits, unsigned short FAR *work));
diff --git a/protocols/Telegram/tgl/zlib/contrib/inflate86/inffas86.c b/protocols/Telegram/tgl/zlib/contrib/inflate86/inffas86.c
new file mode 100644
index 0000000000..7292f67b75
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/inflate86/inffas86.c
@@ -0,0 +1,1157 @@
+/* inffas86.c is a hand tuned assembler version of
+ *
+ * inffast.c -- fast decoding
+ * Copyright (C) 1995-2003 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ *
+ * Copyright (C) 2003 Chris Anderson <christop@charm.net>
+ * Please use the copyright conditions above.
+ *
+ * Dec-29-2003 -- I added AMD64 inflate asm support. This version is also
+ * slightly quicker on x86 systems because, instead of using rep movsb to copy
+ * data, it uses rep movsw, which moves data in 2-byte chunks instead of single
+ * bytes. I've tested the AMD64 code on a Fedora Core 1 + the x86_64 updates
+ * from http://fedora.linux.duke.edu/fc1_x86_64
+ * which is running on an Athlon 64 3000+ / Gigabyte GA-K8VT800M system with
+ * 1GB ram. The 64-bit version is about 4% faster than the 32-bit version,
+ * when decompressing mozilla-source-1.3.tar.gz.
+ *
+ * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from
+ * the gcc -S output of zlib-1.2.0/inffast.c. Zlib-1.2.0 is in beta release at
+ * the moment. I have successfully compiled and tested this code with gcc2.96,
+ * gcc3.2, icc5.0, msvc6.0. It is very close to the speed of inffast.S
+ * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX
+ * enabled. I will attempt to merge the MMX code into this version. Newer
+ * versions of this and inffast.S can be found at
+ * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+/* Mark Adler's comments from inffast.c: */
+
+/*
+ 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 inflate_fast(strm, start)
+z_streamp strm;
+unsigned start; /* inflate()'s starting value for strm->avail_out */
+{
+ struct inflate_state FAR *state;
+ struct inffast_ar {
+/* 64 32 x86 x86_64 */
+/* ar offset register */
+/* 0 0 */ void *esp; /* esp save */
+/* 8 4 */ void *ebp; /* ebp save */
+/* 16 8 */ unsigned char FAR *in; /* esi rsi local strm->next_in */
+/* 24 12 */ unsigned char FAR *last; /* r9 while in < last */
+/* 32 16 */ unsigned char FAR *out; /* edi rdi local strm->next_out */
+/* 40 20 */ unsigned char FAR *beg; /* inflate()'s init next_out */
+/* 48 24 */ unsigned char FAR *end; /* r10 while out < end */
+/* 56 28 */ unsigned char FAR *window;/* size of window, wsize!=0 */
+/* 64 32 */ code const FAR *lcode; /* ebp rbp local strm->lencode */
+/* 72 36 */ code const FAR *dcode; /* r11 local strm->distcode */
+/* 80 40 */ unsigned long hold; /* edx rdx local strm->hold */
+/* 88 44 */ unsigned bits; /* ebx rbx local strm->bits */
+/* 92 48 */ unsigned wsize; /* window size */
+/* 96 52 */ unsigned write; /* window write index */
+/*100 56 */ unsigned lmask; /* r12 mask for lcode */
+/*104 60 */ unsigned dmask; /* r13 mask for dcode */
+/*108 64 */ unsigned len; /* r14 match length */
+/*112 68 */ unsigned dist; /* r15 match distance */
+/*116 72 */ unsigned status; /* set when state chng*/
+ } ar;
+
+#if defined( __GNUC__ ) && defined( __amd64__ ) && ! defined( __i386 )
+#define PAD_AVAIL_IN 6
+#define PAD_AVAIL_OUT 258
+#else
+#define PAD_AVAIL_IN 5
+#define PAD_AVAIL_OUT 257
+#endif
+
+ /* copy state to local variables */
+ state = (struct inflate_state FAR *)strm->state;
+ ar.in = strm->next_in;
+ ar.last = ar.in + (strm->avail_in - PAD_AVAIL_IN);
+ ar.out = strm->next_out;
+ ar.beg = ar.out - (start - strm->avail_out);
+ ar.end = ar.out + (strm->avail_out - PAD_AVAIL_OUT);
+ ar.wsize = state->wsize;
+ ar.write = state->wnext;
+ ar.window = state->window;
+ ar.hold = state->hold;
+ ar.bits = state->bits;
+ ar.lcode = state->lencode;
+ ar.dcode = state->distcode;
+ ar.lmask = (1U << state->lenbits) - 1;
+ ar.dmask = (1U << state->distbits) - 1;
+
+ /* decode literals and length/distances until end-of-block or not enough
+ input data or output space */
+
+ /* align in on 1/2 hold size boundary */
+ while (((unsigned long)(void *)ar.in & (sizeof(ar.hold) / 2 - 1)) != 0) {
+ ar.hold += (unsigned long)*ar.in++ << ar.bits;
+ ar.bits += 8;
+ }
+
+#if defined( __GNUC__ ) && defined( __amd64__ ) && ! defined( __i386 )
+ __asm__ __volatile__ (
+" leaq %0, %%rax\n"
+" movq %%rbp, 8(%%rax)\n" /* save regs rbp and rsp */
+" movq %%rsp, (%%rax)\n"
+" movq %%rax, %%rsp\n" /* make rsp point to &ar */
+" movq 16(%%rsp), %%rsi\n" /* rsi = in */
+" movq 32(%%rsp), %%rdi\n" /* rdi = out */
+" movq 24(%%rsp), %%r9\n" /* r9 = last */
+" movq 48(%%rsp), %%r10\n" /* r10 = end */
+" movq 64(%%rsp), %%rbp\n" /* rbp = lcode */
+" movq 72(%%rsp), %%r11\n" /* r11 = dcode */
+" movq 80(%%rsp), %%rdx\n" /* rdx = hold */
+" movl 88(%%rsp), %%ebx\n" /* ebx = bits */
+" movl 100(%%rsp), %%r12d\n" /* r12d = lmask */
+" movl 104(%%rsp), %%r13d\n" /* r13d = dmask */
+ /* r14d = len */
+ /* r15d = dist */
+" cld\n"
+" cmpq %%rdi, %%r10\n"
+" je .L_one_time\n" /* if only one decode left */
+" cmpq %%rsi, %%r9\n"
+" je .L_one_time\n"
+" jmp .L_do_loop\n"
+
+".L_one_time:\n"
+" movq %%r12, %%r8\n" /* r8 = lmask */
+" cmpb $32, %%bl\n"
+" ja .L_get_length_code_one_time\n"
+
+" lodsl\n" /* eax = *(uint *)in++ */
+" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */
+" addb $32, %%bl\n" /* bits += 32 */
+" shlq %%cl, %%rax\n"
+" orq %%rax, %%rdx\n" /* hold |= *((uint *)in)++ << bits */
+" jmp .L_get_length_code_one_time\n"
+
+".align 32,0x90\n"
+".L_while_test:\n"
+" cmpq %%rdi, %%r10\n"
+" jbe .L_break_loop\n"
+" cmpq %%rsi, %%r9\n"
+" jbe .L_break_loop\n"
+
+".L_do_loop:\n"
+" movq %%r12, %%r8\n" /* r8 = lmask */
+" cmpb $32, %%bl\n"
+" ja .L_get_length_code\n" /* if (32 < bits) */
+
+" lodsl\n" /* eax = *(uint *)in++ */
+" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */
+" addb $32, %%bl\n" /* bits += 32 */
+" shlq %%cl, %%rax\n"
+" orq %%rax, %%rdx\n" /* hold |= *((uint *)in)++ << bits */
+
+".L_get_length_code:\n"
+" andq %%rdx, %%r8\n" /* r8 &= hold */
+" movl (%%rbp,%%r8,4), %%eax\n" /* eax = lcode[hold & lmask] */
+
+" movb %%ah, %%cl\n" /* cl = this.bits */
+" subb %%ah, %%bl\n" /* bits -= this.bits */
+" shrq %%cl, %%rdx\n" /* hold >>= this.bits */
+
+" testb %%al, %%al\n"
+" jnz .L_test_for_length_base\n" /* if (op != 0) 45.7% */
+
+" movq %%r12, %%r8\n" /* r8 = lmask */
+" shrl $16, %%eax\n" /* output this.val char */
+" stosb\n"
+
+".L_get_length_code_one_time:\n"
+" andq %%rdx, %%r8\n" /* r8 &= hold */
+" movl (%%rbp,%%r8,4), %%eax\n" /* eax = lcode[hold & lmask] */
+
+".L_dolen:\n"
+" movb %%ah, %%cl\n" /* cl = this.bits */
+" subb %%ah, %%bl\n" /* bits -= this.bits */
+" shrq %%cl, %%rdx\n" /* hold >>= this.bits */
+
+" testb %%al, %%al\n"
+" jnz .L_test_for_length_base\n" /* if (op != 0) 45.7% */
+
+" shrl $16, %%eax\n" /* output this.val char */
+" stosb\n"
+" jmp .L_while_test\n"
+
+".align 32,0x90\n"
+".L_test_for_length_base:\n"
+" movl %%eax, %%r14d\n" /* len = this */
+" shrl $16, %%r14d\n" /* len = this.val */
+" movb %%al, %%cl\n"
+
+" testb $16, %%al\n"
+" jz .L_test_for_second_level_length\n" /* if ((op & 16) == 0) 8% */
+" andb $15, %%cl\n" /* op &= 15 */
+" jz .L_decode_distance\n" /* if (!op) */
+
+".L_add_bits_to_len:\n"
+" subb %%cl, %%bl\n"
+" xorl %%eax, %%eax\n"
+" incl %%eax\n"
+" shll %%cl, %%eax\n"
+" decl %%eax\n"
+" andl %%edx, %%eax\n" /* eax &= hold */
+" shrq %%cl, %%rdx\n"
+" addl %%eax, %%r14d\n" /* len += hold & mask[op] */
+
+".L_decode_distance:\n"
+" movq %%r13, %%r8\n" /* r8 = dmask */
+" cmpb $32, %%bl\n"
+" ja .L_get_distance_code\n" /* if (32 < bits) */
+
+" lodsl\n" /* eax = *(uint *)in++ */
+" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */
+" addb $32, %%bl\n" /* bits += 32 */
+" shlq %%cl, %%rax\n"
+" orq %%rax, %%rdx\n" /* hold |= *((uint *)in)++ << bits */
+
+".L_get_distance_code:\n"
+" andq %%rdx, %%r8\n" /* r8 &= hold */
+" movl (%%r11,%%r8,4), %%eax\n" /* eax = dcode[hold & dmask] */
+
+".L_dodist:\n"
+" movl %%eax, %%r15d\n" /* dist = this */
+" shrl $16, %%r15d\n" /* dist = this.val */
+" movb %%ah, %%cl\n"
+" subb %%ah, %%bl\n" /* bits -= this.bits */
+" shrq %%cl, %%rdx\n" /* hold >>= this.bits */
+" movb %%al, %%cl\n" /* cl = this.op */
+
+" testb $16, %%al\n" /* if ((op & 16) == 0) */
+" jz .L_test_for_second_level_dist\n"
+" andb $15, %%cl\n" /* op &= 15 */
+" jz .L_check_dist_one\n"
+
+".L_add_bits_to_dist:\n"
+" subb %%cl, %%bl\n"
+" xorl %%eax, %%eax\n"
+" incl %%eax\n"
+" shll %%cl, %%eax\n"
+" decl %%eax\n" /* (1 << op) - 1 */
+" andl %%edx, %%eax\n" /* eax &= hold */
+" shrq %%cl, %%rdx\n"
+" addl %%eax, %%r15d\n" /* dist += hold & ((1 << op) - 1) */
+
+".L_check_window:\n"
+" movq %%rsi, %%r8\n" /* save in so from can use it's reg */
+" movq %%rdi, %%rax\n"
+" subq 40(%%rsp), %%rax\n" /* nbytes = out - beg */
+
+" cmpl %%r15d, %%eax\n"
+" jb .L_clip_window\n" /* if (dist > nbytes) 4.2% */
+
+" movl %%r14d, %%ecx\n" /* ecx = len */
+" movq %%rdi, %%rsi\n"
+" subq %%r15, %%rsi\n" /* from = out - dist */
+
+" sarl %%ecx\n"
+" jnc .L_copy_two\n" /* if len % 2 == 0 */
+
+" rep movsw\n"
+" movb (%%rsi), %%al\n"
+" movb %%al, (%%rdi)\n"
+" incq %%rdi\n"
+
+" movq %%r8, %%rsi\n" /* move in back to %rsi, toss from */
+" jmp .L_while_test\n"
+
+".L_copy_two:\n"
+" rep movsw\n"
+" movq %%r8, %%rsi\n" /* move in back to %rsi, toss from */
+" jmp .L_while_test\n"
+
+".align 32,0x90\n"
+".L_check_dist_one:\n"
+" cmpl $1, %%r15d\n" /* if dist 1, is a memset */
+" jne .L_check_window\n"
+" cmpq %%rdi, 40(%%rsp)\n" /* if out == beg, outside window */
+" je .L_check_window\n"
+
+" movl %%r14d, %%ecx\n" /* ecx = len */
+" movb -1(%%rdi), %%al\n"
+" movb %%al, %%ah\n"
+
+" sarl %%ecx\n"
+" jnc .L_set_two\n"
+" movb %%al, (%%rdi)\n"
+" incq %%rdi\n"
+
+".L_set_two:\n"
+" rep stosw\n"
+" jmp .L_while_test\n"
+
+".align 32,0x90\n"
+".L_test_for_second_level_length:\n"
+" testb $64, %%al\n"
+" jnz .L_test_for_end_of_block\n" /* if ((op & 64) != 0) */
+
+" xorl %%eax, %%eax\n"
+" incl %%eax\n"
+" shll %%cl, %%eax\n"
+" decl %%eax\n"
+" andl %%edx, %%eax\n" /* eax &= hold */
+" addl %%r14d, %%eax\n" /* eax += len */
+" movl (%%rbp,%%rax,4), %%eax\n" /* eax = lcode[val+(hold&mask[op])]*/
+" jmp .L_dolen\n"
+
+".align 32,0x90\n"
+".L_test_for_second_level_dist:\n"
+" testb $64, %%al\n"
+" jnz .L_invalid_distance_code\n" /* if ((op & 64) != 0) */
+
+" xorl %%eax, %%eax\n"
+" incl %%eax\n"
+" shll %%cl, %%eax\n"
+" decl %%eax\n"
+" andl %%edx, %%eax\n" /* eax &= hold */
+" addl %%r15d, %%eax\n" /* eax += dist */
+" movl (%%r11,%%rax,4), %%eax\n" /* eax = dcode[val+(hold&mask[op])]*/
+" jmp .L_dodist\n"
+
+".align 32,0x90\n"
+".L_clip_window:\n"
+" movl %%eax, %%ecx\n" /* ecx = nbytes */
+" movl 92(%%rsp), %%eax\n" /* eax = wsize, prepare for dist cmp */
+" negl %%ecx\n" /* nbytes = -nbytes */
+
+" cmpl %%r15d, %%eax\n"
+" jb .L_invalid_distance_too_far\n" /* if (dist > wsize) */
+
+" addl %%r15d, %%ecx\n" /* nbytes = dist - nbytes */
+" cmpl $0, 96(%%rsp)\n"
+" jne .L_wrap_around_window\n" /* if (write != 0) */
+
+" movq 56(%%rsp), %%rsi\n" /* from = window */
+" subl %%ecx, %%eax\n" /* eax -= nbytes */
+" addq %%rax, %%rsi\n" /* from += wsize - nbytes */
+
+" movl %%r14d, %%eax\n" /* eax = len */
+" cmpl %%ecx, %%r14d\n"
+" jbe .L_do_copy\n" /* if (nbytes >= len) */
+
+" subl %%ecx, %%eax\n" /* eax -= nbytes */
+" rep movsb\n"
+" movq %%rdi, %%rsi\n"
+" subq %%r15, %%rsi\n" /* from = &out[ -dist ] */
+" jmp .L_do_copy\n"
+
+".align 32,0x90\n"
+".L_wrap_around_window:\n"
+" movl 96(%%rsp), %%eax\n" /* eax = write */
+" cmpl %%eax, %%ecx\n"
+" jbe .L_contiguous_in_window\n" /* if (write >= nbytes) */
+
+" movl 92(%%rsp), %%esi\n" /* from = wsize */
+" addq 56(%%rsp), %%rsi\n" /* from += window */
+" addq %%rax, %%rsi\n" /* from += write */
+" subq %%rcx, %%rsi\n" /* from -= nbytes */
+" subl %%eax, %%ecx\n" /* nbytes -= write */
+
+" movl %%r14d, %%eax\n" /* eax = len */
+" cmpl %%ecx, %%eax\n"
+" jbe .L_do_copy\n" /* if (nbytes >= len) */
+
+" subl %%ecx, %%eax\n" /* len -= nbytes */
+" rep movsb\n"
+" movq 56(%%rsp), %%rsi\n" /* from = window */
+" movl 96(%%rsp), %%ecx\n" /* nbytes = write */
+" cmpl %%ecx, %%eax\n"
+" jbe .L_do_copy\n" /* if (nbytes >= len) */
+
+" subl %%ecx, %%eax\n" /* len -= nbytes */
+" rep movsb\n"
+" movq %%rdi, %%rsi\n"
+" subq %%r15, %%rsi\n" /* from = out - dist */
+" jmp .L_do_copy\n"
+
+".align 32,0x90\n"
+".L_contiguous_in_window:\n"
+" movq 56(%%rsp), %%rsi\n" /* rsi = window */
+" addq %%rax, %%rsi\n"
+" subq %%rcx, %%rsi\n" /* from += write - nbytes */
+
+" movl %%r14d, %%eax\n" /* eax = len */
+" cmpl %%ecx, %%eax\n"
+" jbe .L_do_copy\n" /* if (nbytes >= len) */
+
+" subl %%ecx, %%eax\n" /* len -= nbytes */
+" rep movsb\n"
+" movq %%rdi, %%rsi\n"
+" subq %%r15, %%rsi\n" /* from = out - dist */
+" jmp .L_do_copy\n" /* if (nbytes >= len) */
+
+".align 32,0x90\n"
+".L_do_copy:\n"
+" movl %%eax, %%ecx\n" /* ecx = len */
+" rep movsb\n"
+
+" movq %%r8, %%rsi\n" /* move in back to %esi, toss from */
+" jmp .L_while_test\n"
+
+".L_test_for_end_of_block:\n"
+" testb $32, %%al\n"
+" jz .L_invalid_literal_length_code\n"
+" movl $1, 116(%%rsp)\n"
+" jmp .L_break_loop_with_status\n"
+
+".L_invalid_literal_length_code:\n"
+" movl $2, 116(%%rsp)\n"
+" jmp .L_break_loop_with_status\n"
+
+".L_invalid_distance_code:\n"
+" movl $3, 116(%%rsp)\n"
+" jmp .L_break_loop_with_status\n"
+
+".L_invalid_distance_too_far:\n"
+" movl $4, 116(%%rsp)\n"
+" jmp .L_break_loop_with_status\n"
+
+".L_break_loop:\n"
+" movl $0, 116(%%rsp)\n"
+
+".L_break_loop_with_status:\n"
+/* put in, out, bits, and hold back into ar and pop esp */
+" movq %%rsi, 16(%%rsp)\n" /* in */
+" movq %%rdi, 32(%%rsp)\n" /* out */
+" movl %%ebx, 88(%%rsp)\n" /* bits */
+" movq %%rdx, 80(%%rsp)\n" /* hold */
+" movq (%%rsp), %%rax\n" /* restore rbp and rsp */
+" movq 8(%%rsp), %%rbp\n"
+" movq %%rax, %%rsp\n"
+ :
+ : "m" (ar)
+ : "memory", "%rax", "%rbx", "%rcx", "%rdx", "%rsi", "%rdi",
+ "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
+ );
+#elif ( defined( __GNUC__ ) || defined( __ICC ) ) && defined( __i386 )
+ __asm__ __volatile__ (
+" leal %0, %%eax\n"
+" movl %%esp, (%%eax)\n" /* save esp, ebp */
+" movl %%ebp, 4(%%eax)\n"
+" movl %%eax, %%esp\n"
+" movl 8(%%esp), %%esi\n" /* esi = in */
+" movl 16(%%esp), %%edi\n" /* edi = out */
+" movl 40(%%esp), %%edx\n" /* edx = hold */
+" movl 44(%%esp), %%ebx\n" /* ebx = bits */
+" movl 32(%%esp), %%ebp\n" /* ebp = lcode */
+
+" cld\n"
+" jmp .L_do_loop\n"
+
+".align 32,0x90\n"
+".L_while_test:\n"
+" cmpl %%edi, 24(%%esp)\n" /* out < end */
+" jbe .L_break_loop\n"
+" cmpl %%esi, 12(%%esp)\n" /* in < last */
+" jbe .L_break_loop\n"
+
+".L_do_loop:\n"
+" cmpb $15, %%bl\n"
+" ja .L_get_length_code\n" /* if (15 < bits) */
+
+" xorl %%eax, %%eax\n"
+" lodsw\n" /* al = *(ushort *)in++ */
+" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */
+" addb $16, %%bl\n" /* bits += 16 */
+" shll %%cl, %%eax\n"
+" orl %%eax, %%edx\n" /* hold |= *((ushort *)in)++ << bits */
+
+".L_get_length_code:\n"
+" movl 56(%%esp), %%eax\n" /* eax = lmask */
+" andl %%edx, %%eax\n" /* eax &= hold */
+" movl (%%ebp,%%eax,4), %%eax\n" /* eax = lcode[hold & lmask] */
+
+".L_dolen:\n"
+" movb %%ah, %%cl\n" /* cl = this.bits */
+" subb %%ah, %%bl\n" /* bits -= this.bits */
+" shrl %%cl, %%edx\n" /* hold >>= this.bits */
+
+" testb %%al, %%al\n"
+" jnz .L_test_for_length_base\n" /* if (op != 0) 45.7% */
+
+" shrl $16, %%eax\n" /* output this.val char */
+" stosb\n"
+" jmp .L_while_test\n"
+
+".align 32,0x90\n"
+".L_test_for_length_base:\n"
+" movl %%eax, %%ecx\n" /* len = this */
+" shrl $16, %%ecx\n" /* len = this.val */
+" movl %%ecx, 64(%%esp)\n" /* save len */
+" movb %%al, %%cl\n"
+
+" testb $16, %%al\n"
+" jz .L_test_for_second_level_length\n" /* if ((op & 16) == 0) 8% */
+" andb $15, %%cl\n" /* op &= 15 */
+" jz .L_decode_distance\n" /* if (!op) */
+" cmpb %%cl, %%bl\n"
+" jae .L_add_bits_to_len\n" /* if (op <= bits) */
+
+" movb %%cl, %%ch\n" /* stash op in ch, freeing cl */
+" xorl %%eax, %%eax\n"
+" lodsw\n" /* al = *(ushort *)in++ */
+" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */
+" addb $16, %%bl\n" /* bits += 16 */
+" shll %%cl, %%eax\n"
+" orl %%eax, %%edx\n" /* hold |= *((ushort *)in)++ << bits */
+" movb %%ch, %%cl\n" /* move op back to ecx */
+
+".L_add_bits_to_len:\n"
+" subb %%cl, %%bl\n"
+" xorl %%eax, %%eax\n"
+" incl %%eax\n"
+" shll %%cl, %%eax\n"
+" decl %%eax\n"
+" andl %%edx, %%eax\n" /* eax &= hold */
+" shrl %%cl, %%edx\n"
+" addl %%eax, 64(%%esp)\n" /* len += hold & mask[op] */
+
+".L_decode_distance:\n"
+" cmpb $15, %%bl\n"
+" ja .L_get_distance_code\n" /* if (15 < bits) */
+
+" xorl %%eax, %%eax\n"
+" lodsw\n" /* al = *(ushort *)in++ */
+" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */
+" addb $16, %%bl\n" /* bits += 16 */
+" shll %%cl, %%eax\n"
+" orl %%eax, %%edx\n" /* hold |= *((ushort *)in)++ << bits */
+
+".L_get_distance_code:\n"
+" movl 60(%%esp), %%eax\n" /* eax = dmask */
+" movl 36(%%esp), %%ecx\n" /* ecx = dcode */
+" andl %%edx, %%eax\n" /* eax &= hold */
+" movl (%%ecx,%%eax,4), %%eax\n"/* eax = dcode[hold & dmask] */
+
+".L_dodist:\n"
+" movl %%eax, %%ebp\n" /* dist = this */
+" shrl $16, %%ebp\n" /* dist = this.val */
+" movb %%ah, %%cl\n"
+" subb %%ah, %%bl\n" /* bits -= this.bits */
+" shrl %%cl, %%edx\n" /* hold >>= this.bits */
+" movb %%al, %%cl\n" /* cl = this.op */
+
+" testb $16, %%al\n" /* if ((op & 16) == 0) */
+" jz .L_test_for_second_level_dist\n"
+" andb $15, %%cl\n" /* op &= 15 */
+" jz .L_check_dist_one\n"
+" cmpb %%cl, %%bl\n"
+" jae .L_add_bits_to_dist\n" /* if (op <= bits) 97.6% */
+
+" movb %%cl, %%ch\n" /* stash op in ch, freeing cl */
+" xorl %%eax, %%eax\n"
+" lodsw\n" /* al = *(ushort *)in++ */
+" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */
+" addb $16, %%bl\n" /* bits += 16 */
+" shll %%cl, %%eax\n"
+" orl %%eax, %%edx\n" /* hold |= *((ushort *)in)++ << bits */
+" movb %%ch, %%cl\n" /* move op back to ecx */
+
+".L_add_bits_to_dist:\n"
+" subb %%cl, %%bl\n"
+" xorl %%eax, %%eax\n"
+" incl %%eax\n"
+" shll %%cl, %%eax\n"
+" decl %%eax\n" /* (1 << op) - 1 */
+" andl %%edx, %%eax\n" /* eax &= hold */
+" shrl %%cl, %%edx\n"
+" addl %%eax, %%ebp\n" /* dist += hold & ((1 << op) - 1) */
+
+".L_check_window:\n"
+" movl %%esi, 8(%%esp)\n" /* save in so from can use it's reg */
+" movl %%edi, %%eax\n"
+" subl 20(%%esp), %%eax\n" /* nbytes = out - beg */
+
+" cmpl %%ebp, %%eax\n"
+" jb .L_clip_window\n" /* if (dist > nbytes) 4.2% */
+
+" movl 64(%%esp), %%ecx\n" /* ecx = len */
+" movl %%edi, %%esi\n"
+" subl %%ebp, %%esi\n" /* from = out - dist */
+
+" sarl %%ecx\n"
+" jnc .L_copy_two\n" /* if len % 2 == 0 */
+
+" rep movsw\n"
+" movb (%%esi), %%al\n"
+" movb %%al, (%%edi)\n"
+" incl %%edi\n"
+
+" movl 8(%%esp), %%esi\n" /* move in back to %esi, toss from */
+" movl 32(%%esp), %%ebp\n" /* ebp = lcode */
+" jmp .L_while_test\n"
+
+".L_copy_two:\n"
+" rep movsw\n"
+" movl 8(%%esp), %%esi\n" /* move in back to %esi, toss from */
+" movl 32(%%esp), %%ebp\n" /* ebp = lcode */
+" jmp .L_while_test\n"
+
+".align 32,0x90\n"
+".L_check_dist_one:\n"
+" cmpl $1, %%ebp\n" /* if dist 1, is a memset */
+" jne .L_check_window\n"
+" cmpl %%edi, 20(%%esp)\n"
+" je .L_check_window\n" /* out == beg, if outside window */
+
+" movl 64(%%esp), %%ecx\n" /* ecx = len */
+" movb -1(%%edi), %%al\n"
+" movb %%al, %%ah\n"
+
+" sarl %%ecx\n"
+" jnc .L_set_two\n"
+" movb %%al, (%%edi)\n"
+" incl %%edi\n"
+
+".L_set_two:\n"
+" rep stosw\n"
+" movl 32(%%esp), %%ebp\n" /* ebp = lcode */
+" jmp .L_while_test\n"
+
+".align 32,0x90\n"
+".L_test_for_second_level_length:\n"
+" testb $64, %%al\n"
+" jnz .L_test_for_end_of_block\n" /* if ((op & 64) != 0) */
+
+" xorl %%eax, %%eax\n"
+" incl %%eax\n"
+" shll %%cl, %%eax\n"
+" decl %%eax\n"
+" andl %%edx, %%eax\n" /* eax &= hold */
+" addl 64(%%esp), %%eax\n" /* eax += len */
+" movl (%%ebp,%%eax,4), %%eax\n" /* eax = lcode[val+(hold&mask[op])]*/
+" jmp .L_dolen\n"
+
+".align 32,0x90\n"
+".L_test_for_second_level_dist:\n"
+" testb $64, %%al\n"
+" jnz .L_invalid_distance_code\n" /* if ((op & 64) != 0) */
+
+" xorl %%eax, %%eax\n"
+" incl %%eax\n"
+" shll %%cl, %%eax\n"
+" decl %%eax\n"
+" andl %%edx, %%eax\n" /* eax &= hold */
+" addl %%ebp, %%eax\n" /* eax += dist */
+" movl 36(%%esp), %%ecx\n" /* ecx = dcode */
+" movl (%%ecx,%%eax,4), %%eax\n" /* eax = dcode[val+(hold&mask[op])]*/
+" jmp .L_dodist\n"
+
+".align 32,0x90\n"
+".L_clip_window:\n"
+" movl %%eax, %%ecx\n"
+" movl 48(%%esp), %%eax\n" /* eax = wsize */
+" negl %%ecx\n" /* nbytes = -nbytes */
+" movl 28(%%esp), %%esi\n" /* from = window */
+
+" cmpl %%ebp, %%eax\n"
+" jb .L_invalid_distance_too_far\n" /* if (dist > wsize) */
+
+" addl %%ebp, %%ecx\n" /* nbytes = dist - nbytes */
+" cmpl $0, 52(%%esp)\n"
+" jne .L_wrap_around_window\n" /* if (write != 0) */
+
+" subl %%ecx, %%eax\n"
+" addl %%eax, %%esi\n" /* from += wsize - nbytes */
+
+" movl 64(%%esp), %%eax\n" /* eax = len */
+" cmpl %%ecx, %%eax\n"
+" jbe .L_do_copy\n" /* if (nbytes >= len) */
+
+" subl %%ecx, %%eax\n" /* len -= nbytes */
+" rep movsb\n"
+" movl %%edi, %%esi\n"
+" subl %%ebp, %%esi\n" /* from = out - dist */
+" jmp .L_do_copy\n"
+
+".align 32,0x90\n"
+".L_wrap_around_window:\n"
+" movl 52(%%esp), %%eax\n" /* eax = write */
+" cmpl %%eax, %%ecx\n"
+" jbe .L_contiguous_in_window\n" /* if (write >= nbytes) */
+
+" addl 48(%%esp), %%esi\n" /* from += wsize */
+" addl %%eax, %%esi\n" /* from += write */
+" subl %%ecx, %%esi\n" /* from -= nbytes */
+" subl %%eax, %%ecx\n" /* nbytes -= write */
+
+" movl 64(%%esp), %%eax\n" /* eax = len */
+" cmpl %%ecx, %%eax\n"
+" jbe .L_do_copy\n" /* if (nbytes >= len) */
+
+" subl %%ecx, %%eax\n" /* len -= nbytes */
+" rep movsb\n"
+" movl 28(%%esp), %%esi\n" /* from = window */
+" movl 52(%%esp), %%ecx\n" /* nbytes = write */
+" cmpl %%ecx, %%eax\n"
+" jbe .L_do_copy\n" /* if (nbytes >= len) */
+
+" subl %%ecx, %%eax\n" /* len -= nbytes */
+" rep movsb\n"
+" movl %%edi, %%esi\n"
+" subl %%ebp, %%esi\n" /* from = out - dist */
+" jmp .L_do_copy\n"
+
+".align 32,0x90\n"
+".L_contiguous_in_window:\n"
+" addl %%eax, %%esi\n"
+" subl %%ecx, %%esi\n" /* from += write - nbytes */
+
+" movl 64(%%esp), %%eax\n" /* eax = len */
+" cmpl %%ecx, %%eax\n"
+" jbe .L_do_copy\n" /* if (nbytes >= len) */
+
+" subl %%ecx, %%eax\n" /* len -= nbytes */
+" rep movsb\n"
+" movl %%edi, %%esi\n"
+" subl %%ebp, %%esi\n" /* from = out - dist */
+" jmp .L_do_copy\n" /* if (nbytes >= len) */
+
+".align 32,0x90\n"
+".L_do_copy:\n"
+" movl %%eax, %%ecx\n"
+" rep movsb\n"
+
+" movl 8(%%esp), %%esi\n" /* move in back to %esi, toss from */
+" movl 32(%%esp), %%ebp\n" /* ebp = lcode */
+" jmp .L_while_test\n"
+
+".L_test_for_end_of_block:\n"
+" testb $32, %%al\n"
+" jz .L_invalid_literal_length_code\n"
+" movl $1, 72(%%esp)\n"
+" jmp .L_break_loop_with_status\n"
+
+".L_invalid_literal_length_code:\n"
+" movl $2, 72(%%esp)\n"
+" jmp .L_break_loop_with_status\n"
+
+".L_invalid_distance_code:\n"
+" movl $3, 72(%%esp)\n"
+" jmp .L_break_loop_with_status\n"
+
+".L_invalid_distance_too_far:\n"
+" movl 8(%%esp), %%esi\n"
+" movl $4, 72(%%esp)\n"
+" jmp .L_break_loop_with_status\n"
+
+".L_break_loop:\n"
+" movl $0, 72(%%esp)\n"
+
+".L_break_loop_with_status:\n"
+/* put in, out, bits, and hold back into ar and pop esp */
+" movl %%esi, 8(%%esp)\n" /* save in */
+" movl %%edi, 16(%%esp)\n" /* save out */
+" movl %%ebx, 44(%%esp)\n" /* save bits */
+" movl %%edx, 40(%%esp)\n" /* save hold */
+" movl 4(%%esp), %%ebp\n" /* restore esp, ebp */
+" movl (%%esp), %%esp\n"
+ :
+ : "m" (ar)
+ : "memory", "%eax", "%ebx", "%ecx", "%edx", "%esi", "%edi"
+ );
+#elif defined( _MSC_VER ) && ! defined( _M_AMD64 )
+ __asm {
+ lea eax, ar
+ mov [eax], esp /* save esp, ebp */
+ mov [eax+4], ebp
+ mov esp, eax
+ mov esi, [esp+8] /* esi = in */
+ mov edi, [esp+16] /* edi = out */
+ mov edx, [esp+40] /* edx = hold */
+ mov ebx, [esp+44] /* ebx = bits */
+ mov ebp, [esp+32] /* ebp = lcode */
+
+ cld
+ jmp L_do_loop
+
+ALIGN 4
+L_while_test:
+ cmp [esp+24], edi
+ jbe L_break_loop
+ cmp [esp+12], esi
+ jbe L_break_loop
+
+L_do_loop:
+ cmp bl, 15
+ ja L_get_length_code /* if (15 < bits) */
+
+ xor eax, eax
+ lodsw /* al = *(ushort *)in++ */
+ mov cl, bl /* cl = bits, needs it for shifting */
+ add bl, 16 /* bits += 16 */
+ shl eax, cl
+ or edx, eax /* hold |= *((ushort *)in)++ << bits */
+
+L_get_length_code:
+ mov eax, [esp+56] /* eax = lmask */
+ and eax, edx /* eax &= hold */
+ mov eax, [ebp+eax*4] /* eax = lcode[hold & lmask] */
+
+L_dolen:
+ mov cl, ah /* cl = this.bits */
+ sub bl, ah /* bits -= this.bits */
+ shr edx, cl /* hold >>= this.bits */
+
+ test al, al
+ jnz L_test_for_length_base /* if (op != 0) 45.7% */
+
+ shr eax, 16 /* output this.val char */
+ stosb
+ jmp L_while_test
+
+ALIGN 4
+L_test_for_length_base:
+ mov ecx, eax /* len = this */
+ shr ecx, 16 /* len = this.val */
+ mov [esp+64], ecx /* save len */
+ mov cl, al
+
+ test al, 16
+ jz L_test_for_second_level_length /* if ((op & 16) == 0) 8% */
+ and cl, 15 /* op &= 15 */
+ jz L_decode_distance /* if (!op) */
+ cmp bl, cl
+ jae L_add_bits_to_len /* if (op <= bits) */
+
+ mov ch, cl /* stash op in ch, freeing cl */
+ xor eax, eax
+ lodsw /* al = *(ushort *)in++ */
+ mov cl, bl /* cl = bits, needs it for shifting */
+ add bl, 16 /* bits += 16 */
+ shl eax, cl
+ or edx, eax /* hold |= *((ushort *)in)++ << bits */
+ mov cl, ch /* move op back to ecx */
+
+L_add_bits_to_len:
+ sub bl, cl
+ xor eax, eax
+ inc eax
+ shl eax, cl
+ dec eax
+ and eax, edx /* eax &= hold */
+ shr edx, cl
+ add [esp+64], eax /* len += hold & mask[op] */
+
+L_decode_distance:
+ cmp bl, 15
+ ja L_get_distance_code /* if (15 < bits) */
+
+ xor eax, eax
+ lodsw /* al = *(ushort *)in++ */
+ mov cl, bl /* cl = bits, needs it for shifting */
+ add bl, 16 /* bits += 16 */
+ shl eax, cl
+ or edx, eax /* hold |= *((ushort *)in)++ << bits */
+
+L_get_distance_code:
+ mov eax, [esp+60] /* eax = dmask */
+ mov ecx, [esp+36] /* ecx = dcode */
+ and eax, edx /* eax &= hold */
+ mov eax, [ecx+eax*4]/* eax = dcode[hold & dmask] */
+
+L_dodist:
+ mov ebp, eax /* dist = this */
+ shr ebp, 16 /* dist = this.val */
+ mov cl, ah
+ sub bl, ah /* bits -= this.bits */
+ shr edx, cl /* hold >>= this.bits */
+ mov cl, al /* cl = this.op */
+
+ test al, 16 /* if ((op & 16) == 0) */
+ jz L_test_for_second_level_dist
+ and cl, 15 /* op &= 15 */
+ jz L_check_dist_one
+ cmp bl, cl
+ jae L_add_bits_to_dist /* if (op <= bits) 97.6% */
+
+ mov ch, cl /* stash op in ch, freeing cl */
+ xor eax, eax
+ lodsw /* al = *(ushort *)in++ */
+ mov cl, bl /* cl = bits, needs it for shifting */
+ add bl, 16 /* bits += 16 */
+ shl eax, cl
+ or edx, eax /* hold |= *((ushort *)in)++ << bits */
+ mov cl, ch /* move op back to ecx */
+
+L_add_bits_to_dist:
+ sub bl, cl
+ xor eax, eax
+ inc eax
+ shl eax, cl
+ dec eax /* (1 << op) - 1 */
+ and eax, edx /* eax &= hold */
+ shr edx, cl
+ add ebp, eax /* dist += hold & ((1 << op) - 1) */
+
+L_check_window:
+ mov [esp+8], esi /* save in so from can use it's reg */
+ mov eax, edi
+ sub eax, [esp+20] /* nbytes = out - beg */
+
+ cmp eax, ebp
+ jb L_clip_window /* if (dist > nbytes) 4.2% */
+
+ mov ecx, [esp+64] /* ecx = len */
+ mov esi, edi
+ sub esi, ebp /* from = out - dist */
+
+ sar ecx, 1
+ jnc L_copy_two
+
+ rep movsw
+ mov al, [esi]
+ mov [edi], al
+ inc edi
+
+ mov esi, [esp+8] /* move in back to %esi, toss from */
+ mov ebp, [esp+32] /* ebp = lcode */
+ jmp L_while_test
+
+L_copy_two:
+ rep movsw
+ mov esi, [esp+8] /* move in back to %esi, toss from */
+ mov ebp, [esp+32] /* ebp = lcode */
+ jmp L_while_test
+
+ALIGN 4
+L_check_dist_one:
+ cmp ebp, 1 /* if dist 1, is a memset */
+ jne L_check_window
+ cmp [esp+20], edi
+ je L_check_window /* out == beg, if outside window */
+
+ mov ecx, [esp+64] /* ecx = len */
+ mov al, [edi-1]
+ mov ah, al
+
+ sar ecx, 1
+ jnc L_set_two
+ mov [edi], al /* memset out with from[-1] */
+ inc edi
+
+L_set_two:
+ rep stosw
+ mov ebp, [esp+32] /* ebp = lcode */
+ jmp L_while_test
+
+ALIGN 4
+L_test_for_second_level_length:
+ test al, 64
+ jnz L_test_for_end_of_block /* if ((op & 64) != 0) */
+
+ xor eax, eax
+ inc eax
+ shl eax, cl
+ dec eax
+ and eax, edx /* eax &= hold */
+ add eax, [esp+64] /* eax += len */
+ mov eax, [ebp+eax*4] /* eax = lcode[val+(hold&mask[op])]*/
+ jmp L_dolen
+
+ALIGN 4
+L_test_for_second_level_dist:
+ test al, 64
+ jnz L_invalid_distance_code /* if ((op & 64) != 0) */
+
+ xor eax, eax
+ inc eax
+ shl eax, cl
+ dec eax
+ and eax, edx /* eax &= hold */
+ add eax, ebp /* eax += dist */
+ mov ecx, [esp+36] /* ecx = dcode */
+ mov eax, [ecx+eax*4] /* eax = dcode[val+(hold&mask[op])]*/
+ jmp L_dodist
+
+ALIGN 4
+L_clip_window:
+ mov ecx, eax
+ mov eax, [esp+48] /* eax = wsize */
+ neg ecx /* nbytes = -nbytes */
+ mov esi, [esp+28] /* from = window */
+
+ cmp eax, ebp
+ jb L_invalid_distance_too_far /* if (dist > wsize) */
+
+ add ecx, ebp /* nbytes = dist - nbytes */
+ cmp dword ptr [esp+52], 0
+ jne L_wrap_around_window /* if (write != 0) */
+
+ sub eax, ecx
+ add esi, eax /* from += wsize - nbytes */
+
+ mov eax, [esp+64] /* eax = len */
+ cmp eax, ecx
+ jbe L_do_copy /* if (nbytes >= len) */
+
+ sub eax, ecx /* len -= nbytes */
+ rep movsb
+ mov esi, edi
+ sub esi, ebp /* from = out - dist */
+ jmp L_do_copy
+
+ALIGN 4
+L_wrap_around_window:
+ mov eax, [esp+52] /* eax = write */
+ cmp ecx, eax
+ jbe L_contiguous_in_window /* if (write >= nbytes) */
+
+ add esi, [esp+48] /* from += wsize */
+ add esi, eax /* from += write */
+ sub esi, ecx /* from -= nbytes */
+ sub ecx, eax /* nbytes -= write */
+
+ mov eax, [esp+64] /* eax = len */
+ cmp eax, ecx
+ jbe L_do_copy /* if (nbytes >= len) */
+
+ sub eax, ecx /* len -= nbytes */
+ rep movsb
+ mov esi, [esp+28] /* from = window */
+ mov ecx, [esp+52] /* nbytes = write */
+ cmp eax, ecx
+ jbe L_do_copy /* if (nbytes >= len) */
+
+ sub eax, ecx /* len -= nbytes */
+ rep movsb
+ mov esi, edi
+ sub esi, ebp /* from = out - dist */
+ jmp L_do_copy
+
+ALIGN 4
+L_contiguous_in_window:
+ add esi, eax
+ sub esi, ecx /* from += write - nbytes */
+
+ mov eax, [esp+64] /* eax = len */
+ cmp eax, ecx
+ jbe L_do_copy /* if (nbytes >= len) */
+
+ sub eax, ecx /* len -= nbytes */
+ rep movsb
+ mov esi, edi
+ sub esi, ebp /* from = out - dist */
+ jmp L_do_copy
+
+ALIGN 4
+L_do_copy:
+ mov ecx, eax
+ rep movsb
+
+ mov esi, [esp+8] /* move in back to %esi, toss from */
+ mov ebp, [esp+32] /* ebp = lcode */
+ jmp L_while_test
+
+L_test_for_end_of_block:
+ test al, 32
+ jz L_invalid_literal_length_code
+ mov dword ptr [esp+72], 1
+ jmp L_break_loop_with_status
+
+L_invalid_literal_length_code:
+ mov dword ptr [esp+72], 2
+ jmp L_break_loop_with_status
+
+L_invalid_distance_code:
+ mov dword ptr [esp+72], 3
+ jmp L_break_loop_with_status
+
+L_invalid_distance_too_far:
+ mov esi, [esp+4]
+ mov dword ptr [esp+72], 4
+ jmp L_break_loop_with_status
+
+L_break_loop:
+ mov dword ptr [esp+72], 0
+
+L_break_loop_with_status:
+/* put in, out, bits, and hold back into ar and pop esp */
+ mov [esp+8], esi /* save in */
+ mov [esp+16], edi /* save out */
+ mov [esp+44], ebx /* save bits */
+ mov [esp+40], edx /* save hold */
+ mov ebp, [esp+4] /* restore esp, ebp */
+ mov esp, [esp]
+ }
+#else
+#error "x86 architecture not defined"
+#endif
+
+ if (ar.status > 1) {
+ if (ar.status == 2)
+ strm->msg = "invalid literal/length code";
+ else if (ar.status == 3)
+ strm->msg = "invalid distance code";
+ else
+ strm->msg = "invalid distance too far back";
+ state->mode = BAD;
+ }
+ else if ( ar.status == 1 ) {
+ state->mode = TYPE;
+ }
+
+ /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
+ ar.len = ar.bits >> 3;
+ ar.in -= ar.len;
+ ar.bits -= ar.len << 3;
+ ar.hold &= (1U << ar.bits) - 1;
+
+ /* update state and return */
+ strm->next_in = ar.in;
+ strm->next_out = ar.out;
+ strm->avail_in = (unsigned)(ar.in < ar.last ?
+ PAD_AVAIL_IN + (ar.last - ar.in) :
+ PAD_AVAIL_IN - (ar.in - ar.last));
+ strm->avail_out = (unsigned)(ar.out < ar.end ?
+ PAD_AVAIL_OUT + (ar.end - ar.out) :
+ PAD_AVAIL_OUT - (ar.out - ar.end));
+ state->hold = ar.hold;
+ state->bits = ar.bits;
+ return;
+}
+
diff --git a/protocols/Telegram/tgl/zlib/contrib/inflate86/inffast.S b/protocols/Telegram/tgl/zlib/contrib/inflate86/inffast.S
new file mode 100644
index 0000000000..2245a2905b
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/inflate86/inffast.S
@@ -0,0 +1,1368 @@
+/*
+ * inffast.S is a hand tuned assembler version of:
+ *
+ * inffast.c -- fast decoding
+ * Copyright (C) 1995-2003 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ *
+ * Copyright (C) 2003 Chris Anderson <christop@charm.net>
+ * Please use the copyright conditions above.
+ *
+ * This version (Jan-23-2003) of inflate_fast was coded and tested under
+ * GNU/Linux on a pentium 3, using the gcc-3.2 compiler distribution. On that
+ * machine, I found that gzip style archives decompressed about 20% faster than
+ * the gcc-3.2 -O3 -fomit-frame-pointer compiled version. Your results will
+ * depend on how large of a buffer is used for z_stream.next_in & next_out
+ * (8K-32K worked best for my 256K cpu cache) and how much overhead there is in
+ * stream processing I/O and crc32/addler32. In my case, this routine used
+ * 70% of the cpu time and crc32 used 20%.
+ *
+ * I am confident that this version will work in the general case, but I have
+ * not tested a wide variety of datasets or a wide variety of platforms.
+ *
+ * Jan-24-2003 -- Added -DUSE_MMX define for slightly faster inflating.
+ * It should be a runtime flag instead of compile time flag...
+ *
+ * Jan-26-2003 -- Added runtime check for MMX support with cpuid instruction.
+ * With -DUSE_MMX, only MMX code is compiled. With -DNO_MMX, only non-MMX code
+ * is compiled. Without either option, runtime detection is enabled. Runtime
+ * detection should work on all modern cpus and the recomended algorithm (flip
+ * ID bit on eflags and then use the cpuid instruction) is used in many
+ * multimedia applications. Tested under win2k with gcc-2.95 and gas-2.12
+ * distributed with cygwin3. Compiling with gcc-2.95 -c inffast.S -o
+ * inffast.obj generates a COFF object which can then be linked with MSVC++
+ * compiled code. Tested under FreeBSD 4.7 with gcc-2.95.
+ *
+ * Jan-28-2003 -- Tested Athlon XP... MMX mode is slower than no MMX (and
+ * slower than compiler generated code). Adjusted cpuid check to use the MMX
+ * code only for Pentiums < P4 until I have more data on the P4. Speed
+ * improvment is only about 15% on the Athlon when compared with code generated
+ * with MSVC++. Not sure yet, but I think the P4 will also be slower using the
+ * MMX mode because many of it's x86 ALU instructions execute in .5 cycles and
+ * have less latency than MMX ops. Added code to buffer the last 11 bytes of
+ * the input stream since the MMX code grabs bits in chunks of 32, which
+ * differs from the inffast.c algorithm. I don't think there would have been
+ * read overruns where a page boundary was crossed (a segfault), but there
+ * could have been overruns when next_in ends on unaligned memory (unintialized
+ * memory read).
+ *
+ * Mar-13-2003 -- P4 MMX is slightly slower than P4 NO_MMX. I created a C
+ * version of the non-MMX code so that it doesn't depend on zstrm and zstate
+ * structure offsets which are hard coded in this file. This was last tested
+ * with zlib-1.2.0 which is currently in beta testing, newer versions of this
+ * and inffas86.c can be found at http://www.eetbeetee.com/zlib/ and
+ * http://www.charm.net/~christop/zlib/
+ */
+
+
+/*
+ * if you have underscore linking problems (_inflate_fast undefined), try
+ * using -DGAS_COFF
+ */
+#if ! defined( GAS_COFF ) && ! defined( GAS_ELF )
+
+#if defined( WIN32 ) || defined( __CYGWIN__ )
+#define GAS_COFF /* windows object format */
+#else
+#define GAS_ELF
+#endif
+
+#endif /* ! GAS_COFF && ! GAS_ELF */
+
+
+#if defined( GAS_COFF )
+
+/* coff externals have underscores */
+#define inflate_fast _inflate_fast
+#define inflate_fast_use_mmx _inflate_fast_use_mmx
+
+#endif /* GAS_COFF */
+
+
+.file "inffast.S"
+
+.globl inflate_fast
+
+.text
+.align 4,0
+.L_invalid_literal_length_code_msg:
+.string "invalid literal/length code"
+
+.align 4,0
+.L_invalid_distance_code_msg:
+.string "invalid distance code"
+
+.align 4,0
+.L_invalid_distance_too_far_msg:
+.string "invalid distance too far back"
+
+#if ! defined( NO_MMX )
+.align 4,0
+.L_mask: /* mask[N] = ( 1 << N ) - 1 */
+.long 0
+.long 1
+.long 3
+.long 7
+.long 15
+.long 31
+.long 63
+.long 127
+.long 255
+.long 511
+.long 1023
+.long 2047
+.long 4095
+.long 8191
+.long 16383
+.long 32767
+.long 65535
+.long 131071
+.long 262143
+.long 524287
+.long 1048575
+.long 2097151
+.long 4194303
+.long 8388607
+.long 16777215
+.long 33554431
+.long 67108863
+.long 134217727
+.long 268435455
+.long 536870911
+.long 1073741823
+.long 2147483647
+.long 4294967295
+#endif /* NO_MMX */
+
+.text
+
+/*
+ * struct z_stream offsets, in zlib.h
+ */
+#define next_in_strm 0 /* strm->next_in */
+#define avail_in_strm 4 /* strm->avail_in */
+#define next_out_strm 12 /* strm->next_out */
+#define avail_out_strm 16 /* strm->avail_out */
+#define msg_strm 24 /* strm->msg */
+#define state_strm 28 /* strm->state */
+
+/*
+ * struct inflate_state offsets, in inflate.h
+ */
+#define mode_state 0 /* state->mode */
+#define wsize_state 32 /* state->wsize */
+#define write_state 40 /* state->write */
+#define window_state 44 /* state->window */
+#define hold_state 48 /* state->hold */
+#define bits_state 52 /* state->bits */
+#define lencode_state 68 /* state->lencode */
+#define distcode_state 72 /* state->distcode */
+#define lenbits_state 76 /* state->lenbits */
+#define distbits_state 80 /* state->distbits */
+
+/*
+ * inflate_fast's activation record
+ */
+#define local_var_size 64 /* how much local space for vars */
+#define strm_sp 88 /* first arg: z_stream * (local_var_size + 24) */
+#define start_sp 92 /* second arg: unsigned int (local_var_size + 28) */
+
+/*
+ * offsets for local vars on stack
+ */
+#define out 60 /* unsigned char* */
+#define window 56 /* unsigned char* */
+#define wsize 52 /* unsigned int */
+#define write 48 /* unsigned int */
+#define in 44 /* unsigned char* */
+#define beg 40 /* unsigned char* */
+#define buf 28 /* char[ 12 ] */
+#define len 24 /* unsigned int */
+#define last 20 /* unsigned char* */
+#define end 16 /* unsigned char* */
+#define dcode 12 /* code* */
+#define lcode 8 /* code* */
+#define dmask 4 /* unsigned int */
+#define lmask 0 /* unsigned int */
+
+/*
+ * typedef enum inflate_mode consts, in inflate.h
+ */
+#define INFLATE_MODE_TYPE 11 /* state->mode flags enum-ed in inflate.h */
+#define INFLATE_MODE_BAD 26
+
+
+#if ! defined( USE_MMX ) && ! defined( NO_MMX )
+
+#define RUN_TIME_MMX
+
+#define CHECK_MMX 1
+#define DO_USE_MMX 2
+#define DONT_USE_MMX 3
+
+.globl inflate_fast_use_mmx
+
+.data
+
+.align 4,0
+inflate_fast_use_mmx: /* integer flag for run time control 1=check,2=mmx,3=no */
+.long CHECK_MMX
+
+#if defined( GAS_ELF )
+/* elf info */
+.type inflate_fast_use_mmx,@object
+.size inflate_fast_use_mmx,4
+#endif
+
+#endif /* RUN_TIME_MMX */
+
+#if defined( GAS_COFF )
+/* coff info: scl 2 = extern, type 32 = function */
+.def inflate_fast; .scl 2; .type 32; .endef
+#endif
+
+.text
+
+.align 32,0x90
+inflate_fast:
+ pushl %edi
+ pushl %esi
+ pushl %ebp
+ pushl %ebx
+ pushf /* save eflags (strm_sp, state_sp assumes this is 32 bits) */
+ subl $local_var_size, %esp
+ cld
+
+#define strm_r %esi
+#define state_r %edi
+
+ movl strm_sp(%esp), strm_r
+ movl state_strm(strm_r), state_r
+
+ /* in = strm->next_in;
+ * out = strm->next_out;
+ * last = in + strm->avail_in - 11;
+ * beg = out - (start - strm->avail_out);
+ * end = out + (strm->avail_out - 257);
+ */
+ movl avail_in_strm(strm_r), %edx
+ movl next_in_strm(strm_r), %eax
+
+ addl %eax, %edx /* avail_in += next_in */
+ subl $11, %edx /* avail_in -= 11 */
+
+ movl %eax, in(%esp)
+ movl %edx, last(%esp)
+
+ movl start_sp(%esp), %ebp
+ movl avail_out_strm(strm_r), %ecx
+ movl next_out_strm(strm_r), %ebx
+
+ subl %ecx, %ebp /* start -= avail_out */
+ negl %ebp /* start = -start */
+ addl %ebx, %ebp /* start += next_out */
+
+ subl $257, %ecx /* avail_out -= 257 */
+ addl %ebx, %ecx /* avail_out += out */
+
+ movl %ebx, out(%esp)
+ movl %ebp, beg(%esp)
+ movl %ecx, end(%esp)
+
+ /* wsize = state->wsize;
+ * write = state->write;
+ * window = state->window;
+ * hold = state->hold;
+ * bits = state->bits;
+ * lcode = state->lencode;
+ * dcode = state->distcode;
+ * lmask = ( 1 << state->lenbits ) - 1;
+ * dmask = ( 1 << state->distbits ) - 1;
+ */
+
+ movl lencode_state(state_r), %eax
+ movl distcode_state(state_r), %ecx
+
+ movl %eax, lcode(%esp)
+ movl %ecx, dcode(%esp)
+
+ movl $1, %eax
+ movl lenbits_state(state_r), %ecx
+ shll %cl, %eax
+ decl %eax
+ movl %eax, lmask(%esp)
+
+ movl $1, %eax
+ movl distbits_state(state_r), %ecx
+ shll %cl, %eax
+ decl %eax
+ movl %eax, dmask(%esp)
+
+ movl wsize_state(state_r), %eax
+ movl write_state(state_r), %ecx
+ movl window_state(state_r), %edx
+
+ movl %eax, wsize(%esp)
+ movl %ecx, write(%esp)
+ movl %edx, window(%esp)
+
+ movl hold_state(state_r), %ebp
+ movl bits_state(state_r), %ebx
+
+#undef strm_r
+#undef state_r
+
+#define in_r %esi
+#define from_r %esi
+#define out_r %edi
+
+ movl in(%esp), in_r
+ movl last(%esp), %ecx
+ cmpl in_r, %ecx
+ ja .L_align_long /* if in < last */
+
+ addl $11, %ecx /* ecx = &in[ avail_in ] */
+ subl in_r, %ecx /* ecx = avail_in */
+ movl $12, %eax
+ subl %ecx, %eax /* eax = 12 - avail_in */
+ leal buf(%esp), %edi
+ rep movsb /* memcpy( buf, in, avail_in ) */
+ movl %eax, %ecx
+ xorl %eax, %eax
+ rep stosb /* memset( &buf[ avail_in ], 0, 12 - avail_in ) */
+ leal buf(%esp), in_r /* in = buf */
+ movl in_r, last(%esp) /* last = in, do just one iteration */
+ jmp .L_is_aligned
+
+ /* align in_r on long boundary */
+.L_align_long:
+ testl $3, in_r
+ jz .L_is_aligned
+ xorl %eax, %eax
+ movb (in_r), %al
+ incl in_r
+ movl %ebx, %ecx
+ addl $8, %ebx
+ shll %cl, %eax
+ orl %eax, %ebp
+ jmp .L_align_long
+
+.L_is_aligned:
+ movl out(%esp), out_r
+
+#if defined( NO_MMX )
+ jmp .L_do_loop
+#endif
+
+#if defined( USE_MMX )
+ jmp .L_init_mmx
+#endif
+
+/*** Runtime MMX check ***/
+
+#if defined( RUN_TIME_MMX )
+.L_check_mmx:
+ cmpl $DO_USE_MMX, inflate_fast_use_mmx
+ je .L_init_mmx
+ ja .L_do_loop /* > 2 */
+
+ pushl %eax
+ pushl %ebx
+ pushl %ecx
+ pushl %edx
+ pushf
+ movl (%esp), %eax /* copy eflags to eax */
+ xorl $0x200000, (%esp) /* try toggling ID bit of eflags (bit 21)
+ * to see if cpu supports cpuid...
+ * ID bit method not supported by NexGen but
+ * bios may load a cpuid instruction and
+ * cpuid may be disabled on Cyrix 5-6x86 */
+ popf
+ pushf
+ popl %edx /* copy new eflags to edx */
+ xorl %eax, %edx /* test if ID bit is flipped */
+ jz .L_dont_use_mmx /* not flipped if zero */
+ xorl %eax, %eax
+ cpuid
+ cmpl $0x756e6547, %ebx /* check for GenuineIntel in ebx,ecx,edx */
+ jne .L_dont_use_mmx
+ cmpl $0x6c65746e, %ecx
+ jne .L_dont_use_mmx
+ cmpl $0x49656e69, %edx
+ jne .L_dont_use_mmx
+ movl $1, %eax
+ cpuid /* get cpu features */
+ shrl $8, %eax
+ andl $15, %eax
+ cmpl $6, %eax /* check for Pentium family, is 0xf for P4 */
+ jne .L_dont_use_mmx
+ testl $0x800000, %edx /* test if MMX feature is set (bit 23) */
+ jnz .L_use_mmx
+ jmp .L_dont_use_mmx
+.L_use_mmx:
+ movl $DO_USE_MMX, inflate_fast_use_mmx
+ jmp .L_check_mmx_pop
+.L_dont_use_mmx:
+ movl $DONT_USE_MMX, inflate_fast_use_mmx
+.L_check_mmx_pop:
+ popl %edx
+ popl %ecx
+ popl %ebx
+ popl %eax
+ jmp .L_check_mmx
+#endif
+
+
+/*** Non-MMX code ***/
+
+#if defined ( NO_MMX ) || defined( RUN_TIME_MMX )
+
+#define hold_r %ebp
+#define bits_r %bl
+#define bitslong_r %ebx
+
+.align 32,0x90
+.L_while_test:
+ /* while (in < last && out < end)
+ */
+ cmpl out_r, end(%esp)
+ jbe .L_break_loop /* if (out >= end) */
+
+ cmpl in_r, last(%esp)
+ jbe .L_break_loop
+
+.L_do_loop:
+ /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out
+ *
+ * do {
+ * if (bits < 15) {
+ * hold |= *((unsigned short *)in)++ << bits;
+ * bits += 16
+ * }
+ * this = lcode[hold & lmask]
+ */
+ cmpb $15, bits_r
+ ja .L_get_length_code /* if (15 < bits) */
+
+ xorl %eax, %eax
+ lodsw /* al = *(ushort *)in++ */
+ movb bits_r, %cl /* cl = bits, needs it for shifting */
+ addb $16, bits_r /* bits += 16 */
+ shll %cl, %eax
+ orl %eax, hold_r /* hold |= *((ushort *)in)++ << bits */
+
+.L_get_length_code:
+ movl lmask(%esp), %edx /* edx = lmask */
+ movl lcode(%esp), %ecx /* ecx = lcode */
+ andl hold_r, %edx /* edx &= hold */
+ movl (%ecx,%edx,4), %eax /* eax = lcode[hold & lmask] */
+
+.L_dolen:
+ /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out
+ *
+ * dolen:
+ * bits -= this.bits;
+ * hold >>= this.bits
+ */
+ movb %ah, %cl /* cl = this.bits */
+ subb %ah, bits_r /* bits -= this.bits */
+ shrl %cl, hold_r /* hold >>= this.bits */
+
+ /* check if op is a literal
+ * if (op == 0) {
+ * PUP(out) = this.val;
+ * }
+ */
+ testb %al, %al
+ jnz .L_test_for_length_base /* if (op != 0) 45.7% */
+
+ shrl $16, %eax /* output this.val char */
+ stosb
+ jmp .L_while_test
+
+.L_test_for_length_base:
+ /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out, %edx = len
+ *
+ * else if (op & 16) {
+ * len = this.val
+ * op &= 15
+ * if (op) {
+ * if (op > bits) {
+ * hold |= *((unsigned short *)in)++ << bits;
+ * bits += 16
+ * }
+ * len += hold & mask[op];
+ * bits -= op;
+ * hold >>= op;
+ * }
+ */
+#define len_r %edx
+ movl %eax, len_r /* len = this */
+ shrl $16, len_r /* len = this.val */
+ movb %al, %cl
+
+ testb $16, %al
+ jz .L_test_for_second_level_length /* if ((op & 16) == 0) 8% */
+ andb $15, %cl /* op &= 15 */
+ jz .L_save_len /* if (!op) */
+ cmpb %cl, bits_r
+ jae .L_add_bits_to_len /* if (op <= bits) */
+
+ movb %cl, %ch /* stash op in ch, freeing cl */
+ xorl %eax, %eax
+ lodsw /* al = *(ushort *)in++ */
+ movb bits_r, %cl /* cl = bits, needs it for shifting */
+ addb $16, bits_r /* bits += 16 */
+ shll %cl, %eax
+ orl %eax, hold_r /* hold |= *((ushort *)in)++ << bits */
+ movb %ch, %cl /* move op back to ecx */
+
+.L_add_bits_to_len:
+ movl $1, %eax
+ shll %cl, %eax
+ decl %eax
+ subb %cl, bits_r
+ andl hold_r, %eax /* eax &= hold */
+ shrl %cl, hold_r
+ addl %eax, len_r /* len += hold & mask[op] */
+
+.L_save_len:
+ movl len_r, len(%esp) /* save len */
+#undef len_r
+
+.L_decode_distance:
+ /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out, %edx = dist
+ *
+ * if (bits < 15) {
+ * hold |= *((unsigned short *)in)++ << bits;
+ * bits += 16
+ * }
+ * this = dcode[hold & dmask];
+ * dodist:
+ * bits -= this.bits;
+ * hold >>= this.bits;
+ * op = this.op;
+ */
+
+ cmpb $15, bits_r
+ ja .L_get_distance_code /* if (15 < bits) */
+
+ xorl %eax, %eax
+ lodsw /* al = *(ushort *)in++ */
+ movb bits_r, %cl /* cl = bits, needs it for shifting */
+ addb $16, bits_r /* bits += 16 */
+ shll %cl, %eax
+ orl %eax, hold_r /* hold |= *((ushort *)in)++ << bits */
+
+.L_get_distance_code:
+ movl dmask(%esp), %edx /* edx = dmask */
+ movl dcode(%esp), %ecx /* ecx = dcode */
+ andl hold_r, %edx /* edx &= hold */
+ movl (%ecx,%edx,4), %eax /* eax = dcode[hold & dmask] */
+
+#define dist_r %edx
+.L_dodist:
+ movl %eax, dist_r /* dist = this */
+ shrl $16, dist_r /* dist = this.val */
+ movb %ah, %cl
+ subb %ah, bits_r /* bits -= this.bits */
+ shrl %cl, hold_r /* hold >>= this.bits */
+
+ /* if (op & 16) {
+ * dist = this.val
+ * op &= 15
+ * if (op > bits) {
+ * hold |= *((unsigned short *)in)++ << bits;
+ * bits += 16
+ * }
+ * dist += hold & mask[op];
+ * bits -= op;
+ * hold >>= op;
+ */
+ movb %al, %cl /* cl = this.op */
+
+ testb $16, %al /* if ((op & 16) == 0) */
+ jz .L_test_for_second_level_dist
+ andb $15, %cl /* op &= 15 */
+ jz .L_check_dist_one
+ cmpb %cl, bits_r
+ jae .L_add_bits_to_dist /* if (op <= bits) 97.6% */
+
+ movb %cl, %ch /* stash op in ch, freeing cl */
+ xorl %eax, %eax
+ lodsw /* al = *(ushort *)in++ */
+ movb bits_r, %cl /* cl = bits, needs it for shifting */
+ addb $16, bits_r /* bits += 16 */
+ shll %cl, %eax
+ orl %eax, hold_r /* hold |= *((ushort *)in)++ << bits */
+ movb %ch, %cl /* move op back to ecx */
+
+.L_add_bits_to_dist:
+ movl $1, %eax
+ shll %cl, %eax
+ decl %eax /* (1 << op) - 1 */
+ subb %cl, bits_r
+ andl hold_r, %eax /* eax &= hold */
+ shrl %cl, hold_r
+ addl %eax, dist_r /* dist += hold & ((1 << op) - 1) */
+ jmp .L_check_window
+
+.L_check_window:
+ /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist
+ * %ecx = nbytes
+ *
+ * nbytes = out - beg;
+ * if (dist <= nbytes) {
+ * from = out - dist;
+ * do {
+ * PUP(out) = PUP(from);
+ * } while (--len > 0) {
+ * }
+ */
+
+ movl in_r, in(%esp) /* save in so from can use it's reg */
+ movl out_r, %eax
+ subl beg(%esp), %eax /* nbytes = out - beg */
+
+ cmpl dist_r, %eax
+ jb .L_clip_window /* if (dist > nbytes) 4.2% */
+
+ movl len(%esp), %ecx
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+
+ subl $3, %ecx
+ movb (from_r), %al
+ movb %al, (out_r)
+ movb 1(from_r), %al
+ movb 2(from_r), %dl
+ addl $3, from_r
+ movb %al, 1(out_r)
+ movb %dl, 2(out_r)
+ addl $3, out_r
+ rep movsb
+
+ movl in(%esp), in_r /* move in back to %esi, toss from */
+ jmp .L_while_test
+
+.align 16,0x90
+.L_check_dist_one:
+ cmpl $1, dist_r
+ jne .L_check_window
+ cmpl out_r, beg(%esp)
+ je .L_check_window
+
+ decl out_r
+ movl len(%esp), %ecx
+ movb (out_r), %al
+ subl $3, %ecx
+
+ movb %al, 1(out_r)
+ movb %al, 2(out_r)
+ movb %al, 3(out_r)
+ addl $4, out_r
+ rep stosb
+
+ jmp .L_while_test
+
+.align 16,0x90
+.L_test_for_second_level_length:
+ /* else if ((op & 64) == 0) {
+ * this = lcode[this.val + (hold & mask[op])];
+ * }
+ */
+ testb $64, %al
+ jnz .L_test_for_end_of_block /* if ((op & 64) != 0) */
+
+ movl $1, %eax
+ shll %cl, %eax
+ decl %eax
+ andl hold_r, %eax /* eax &= hold */
+ addl %edx, %eax /* eax += this.val */
+ movl lcode(%esp), %edx /* edx = lcode */
+ movl (%edx,%eax,4), %eax /* eax = lcode[val + (hold&mask[op])] */
+ jmp .L_dolen
+
+.align 16,0x90
+.L_test_for_second_level_dist:
+ /* else if ((op & 64) == 0) {
+ * this = dcode[this.val + (hold & mask[op])];
+ * }
+ */
+ testb $64, %al
+ jnz .L_invalid_distance_code /* if ((op & 64) != 0) */
+
+ movl $1, %eax
+ shll %cl, %eax
+ decl %eax
+ andl hold_r, %eax /* eax &= hold */
+ addl %edx, %eax /* eax += this.val */
+ movl dcode(%esp), %edx /* edx = dcode */
+ movl (%edx,%eax,4), %eax /* eax = dcode[val + (hold&mask[op])] */
+ jmp .L_dodist
+
+.align 16,0x90
+.L_clip_window:
+ /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist
+ * %ecx = nbytes
+ *
+ * else {
+ * if (dist > wsize) {
+ * invalid distance
+ * }
+ * from = window;
+ * nbytes = dist - nbytes;
+ * if (write == 0) {
+ * from += wsize - nbytes;
+ */
+#define nbytes_r %ecx
+ movl %eax, nbytes_r
+ movl wsize(%esp), %eax /* prepare for dist compare */
+ negl nbytes_r /* nbytes = -nbytes */
+ movl window(%esp), from_r /* from = window */
+
+ cmpl dist_r, %eax
+ jb .L_invalid_distance_too_far /* if (dist > wsize) */
+
+ addl dist_r, nbytes_r /* nbytes = dist - nbytes */
+ cmpl $0, write(%esp)
+ jne .L_wrap_around_window /* if (write != 0) */
+
+ subl nbytes_r, %eax
+ addl %eax, from_r /* from += wsize - nbytes */
+
+ /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist
+ * %ecx = nbytes, %eax = len
+ *
+ * if (nbytes < len) {
+ * len -= nbytes;
+ * do {
+ * PUP(out) = PUP(from);
+ * } while (--nbytes);
+ * from = out - dist;
+ * }
+ * }
+ */
+#define len_r %eax
+ movl len(%esp), len_r
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1 /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+ jmp .L_do_copy1
+
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1 /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+ jmp .L_do_copy1
+
+.L_wrap_around_window:
+ /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist
+ * %ecx = nbytes, %eax = write, %eax = len
+ *
+ * else if (write < nbytes) {
+ * from += wsize + write - nbytes;
+ * nbytes -= write;
+ * if (nbytes < len) {
+ * len -= nbytes;
+ * do {
+ * PUP(out) = PUP(from);
+ * } while (--nbytes);
+ * from = window;
+ * nbytes = write;
+ * if (nbytes < len) {
+ * len -= nbytes;
+ * do {
+ * PUP(out) = PUP(from);
+ * } while(--nbytes);
+ * from = out - dist;
+ * }
+ * }
+ * }
+ */
+#define write_r %eax
+ movl write(%esp), write_r
+ cmpl write_r, nbytes_r
+ jbe .L_contiguous_in_window /* if (write >= nbytes) */
+
+ addl wsize(%esp), from_r
+ addl write_r, from_r
+ subl nbytes_r, from_r /* from += wsize + write - nbytes */
+ subl write_r, nbytes_r /* nbytes -= write */
+#undef write_r
+
+ movl len(%esp), len_r
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1 /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl window(%esp), from_r /* from = window */
+ movl write(%esp), nbytes_r /* nbytes = write */
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1 /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+ jmp .L_do_copy1
+
+.L_contiguous_in_window:
+ /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist
+ * %ecx = nbytes, %eax = write, %eax = len
+ *
+ * else {
+ * from += write - nbytes;
+ * if (nbytes < len) {
+ * len -= nbytes;
+ * do {
+ * PUP(out) = PUP(from);
+ * } while (--nbytes);
+ * from = out - dist;
+ * }
+ * }
+ */
+#define write_r %eax
+ addl write_r, from_r
+ subl nbytes_r, from_r /* from += write - nbytes */
+#undef write_r
+
+ movl len(%esp), len_r
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1 /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+
+.L_do_copy1:
+ /* regs: %esi = from, %esi = in, %ebp = hold, %bl = bits, %edi = out
+ * %eax = len
+ *
+ * while (len > 0) {
+ * PUP(out) = PUP(from);
+ * len--;
+ * }
+ * }
+ * } while (in < last && out < end);
+ */
+#undef nbytes_r
+#define in_r %esi
+ movl len_r, %ecx
+ rep movsb
+
+ movl in(%esp), in_r /* move in back to %esi, toss from */
+ jmp .L_while_test
+
+#undef len_r
+#undef dist_r
+
+#endif /* NO_MMX || RUN_TIME_MMX */
+
+
+/*** MMX code ***/
+
+#if defined( USE_MMX ) || defined( RUN_TIME_MMX )
+
+.align 32,0x90
+.L_init_mmx:
+ emms
+
+#undef bits_r
+#undef bitslong_r
+#define bitslong_r %ebp
+#define hold_mm %mm0
+ movd %ebp, hold_mm
+ movl %ebx, bitslong_r
+
+#define used_mm %mm1
+#define dmask2_mm %mm2
+#define lmask2_mm %mm3
+#define lmask_mm %mm4
+#define dmask_mm %mm5
+#define tmp_mm %mm6
+
+ movd lmask(%esp), lmask_mm
+ movq lmask_mm, lmask2_mm
+ movd dmask(%esp), dmask_mm
+ movq dmask_mm, dmask2_mm
+ pxor used_mm, used_mm
+ movl lcode(%esp), %ebx /* ebx = lcode */
+ jmp .L_do_loop_mmx
+
+.align 32,0x90
+.L_while_test_mmx:
+ /* while (in < last && out < end)
+ */
+ cmpl out_r, end(%esp)
+ jbe .L_break_loop /* if (out >= end) */
+
+ cmpl in_r, last(%esp)
+ jbe .L_break_loop
+
+.L_do_loop_mmx:
+ psrlq used_mm, hold_mm /* hold_mm >>= last bit length */
+
+ cmpl $32, bitslong_r
+ ja .L_get_length_code_mmx /* if (32 < bits) */
+
+ movd bitslong_r, tmp_mm
+ movd (in_r), %mm7
+ addl $4, in_r
+ psllq tmp_mm, %mm7
+ addl $32, bitslong_r
+ por %mm7, hold_mm /* hold_mm |= *((uint *)in)++ << bits */
+
+.L_get_length_code_mmx:
+ pand hold_mm, lmask_mm
+ movd lmask_mm, %eax
+ movq lmask2_mm, lmask_mm
+ movl (%ebx,%eax,4), %eax /* eax = lcode[hold & lmask] */
+
+.L_dolen_mmx:
+ movzbl %ah, %ecx /* ecx = this.bits */
+ movd %ecx, used_mm
+ subl %ecx, bitslong_r /* bits -= this.bits */
+
+ testb %al, %al
+ jnz .L_test_for_length_base_mmx /* if (op != 0) 45.7% */
+
+ shrl $16, %eax /* output this.val char */
+ stosb
+ jmp .L_while_test_mmx
+
+.L_test_for_length_base_mmx:
+#define len_r %edx
+ movl %eax, len_r /* len = this */
+ shrl $16, len_r /* len = this.val */
+
+ testb $16, %al
+ jz .L_test_for_second_level_length_mmx /* if ((op & 16) == 0) 8% */
+ andl $15, %eax /* op &= 15 */
+ jz .L_decode_distance_mmx /* if (!op) */
+
+ psrlq used_mm, hold_mm /* hold_mm >>= last bit length */
+ movd %eax, used_mm
+ movd hold_mm, %ecx
+ subl %eax, bitslong_r
+ andl .L_mask(,%eax,4), %ecx
+ addl %ecx, len_r /* len += hold & mask[op] */
+
+.L_decode_distance_mmx:
+ psrlq used_mm, hold_mm /* hold_mm >>= last bit length */
+
+ cmpl $32, bitslong_r
+ ja .L_get_dist_code_mmx /* if (32 < bits) */
+
+ movd bitslong_r, tmp_mm
+ movd (in_r), %mm7
+ addl $4, in_r
+ psllq tmp_mm, %mm7
+ addl $32, bitslong_r
+ por %mm7, hold_mm /* hold_mm |= *((uint *)in)++ << bits */
+
+.L_get_dist_code_mmx:
+ movl dcode(%esp), %ebx /* ebx = dcode */
+ pand hold_mm, dmask_mm
+ movd dmask_mm, %eax
+ movq dmask2_mm, dmask_mm
+ movl (%ebx,%eax,4), %eax /* eax = dcode[hold & lmask] */
+
+.L_dodist_mmx:
+#define dist_r %ebx
+ movzbl %ah, %ecx /* ecx = this.bits */
+ movl %eax, dist_r
+ shrl $16, dist_r /* dist = this.val */
+ subl %ecx, bitslong_r /* bits -= this.bits */
+ movd %ecx, used_mm
+
+ testb $16, %al /* if ((op & 16) == 0) */
+ jz .L_test_for_second_level_dist_mmx
+ andl $15, %eax /* op &= 15 */
+ jz .L_check_dist_one_mmx
+
+.L_add_bits_to_dist_mmx:
+ psrlq used_mm, hold_mm /* hold_mm >>= last bit length */
+ movd %eax, used_mm /* save bit length of current op */
+ movd hold_mm, %ecx /* get the next bits on input stream */
+ subl %eax, bitslong_r /* bits -= op bits */
+ andl .L_mask(,%eax,4), %ecx /* ecx = hold & mask[op] */
+ addl %ecx, dist_r /* dist += hold & mask[op] */
+
+.L_check_window_mmx:
+ movl in_r, in(%esp) /* save in so from can use it's reg */
+ movl out_r, %eax
+ subl beg(%esp), %eax /* nbytes = out - beg */
+
+ cmpl dist_r, %eax
+ jb .L_clip_window_mmx /* if (dist > nbytes) 4.2% */
+
+ movl len_r, %ecx
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+
+ subl $3, %ecx
+ movb (from_r), %al
+ movb %al, (out_r)
+ movb 1(from_r), %al
+ movb 2(from_r), %dl
+ addl $3, from_r
+ movb %al, 1(out_r)
+ movb %dl, 2(out_r)
+ addl $3, out_r
+ rep movsb
+
+ movl in(%esp), in_r /* move in back to %esi, toss from */
+ movl lcode(%esp), %ebx /* move lcode back to %ebx, toss dist */
+ jmp .L_while_test_mmx
+
+.align 16,0x90
+.L_check_dist_one_mmx:
+ cmpl $1, dist_r
+ jne .L_check_window_mmx
+ cmpl out_r, beg(%esp)
+ je .L_check_window_mmx
+
+ decl out_r
+ movl len_r, %ecx
+ movb (out_r), %al
+ subl $3, %ecx
+
+ movb %al, 1(out_r)
+ movb %al, 2(out_r)
+ movb %al, 3(out_r)
+ addl $4, out_r
+ rep stosb
+
+ movl lcode(%esp), %ebx /* move lcode back to %ebx, toss dist */
+ jmp .L_while_test_mmx
+
+.align 16,0x90
+.L_test_for_second_level_length_mmx:
+ testb $64, %al
+ jnz .L_test_for_end_of_block /* if ((op & 64) != 0) */
+
+ andl $15, %eax
+ psrlq used_mm, hold_mm /* hold_mm >>= last bit length */
+ movd hold_mm, %ecx
+ andl .L_mask(,%eax,4), %ecx
+ addl len_r, %ecx
+ movl (%ebx,%ecx,4), %eax /* eax = lcode[hold & lmask] */
+ jmp .L_dolen_mmx
+
+.align 16,0x90
+.L_test_for_second_level_dist_mmx:
+ testb $64, %al
+ jnz .L_invalid_distance_code /* if ((op & 64) != 0) */
+
+ andl $15, %eax
+ psrlq used_mm, hold_mm /* hold_mm >>= last bit length */
+ movd hold_mm, %ecx
+ andl .L_mask(,%eax,4), %ecx
+ movl dcode(%esp), %eax /* ecx = dcode */
+ addl dist_r, %ecx
+ movl (%eax,%ecx,4), %eax /* eax = lcode[hold & lmask] */
+ jmp .L_dodist_mmx
+
+.align 16,0x90
+.L_clip_window_mmx:
+#define nbytes_r %ecx
+ movl %eax, nbytes_r
+ movl wsize(%esp), %eax /* prepare for dist compare */
+ negl nbytes_r /* nbytes = -nbytes */
+ movl window(%esp), from_r /* from = window */
+
+ cmpl dist_r, %eax
+ jb .L_invalid_distance_too_far /* if (dist > wsize) */
+
+ addl dist_r, nbytes_r /* nbytes = dist - nbytes */
+ cmpl $0, write(%esp)
+ jne .L_wrap_around_window_mmx /* if (write != 0) */
+
+ subl nbytes_r, %eax
+ addl %eax, from_r /* from += wsize - nbytes */
+
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1_mmx /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+ jmp .L_do_copy1_mmx
+
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1_mmx /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+ jmp .L_do_copy1_mmx
+
+.L_wrap_around_window_mmx:
+#define write_r %eax
+ movl write(%esp), write_r
+ cmpl write_r, nbytes_r
+ jbe .L_contiguous_in_window_mmx /* if (write >= nbytes) */
+
+ addl wsize(%esp), from_r
+ addl write_r, from_r
+ subl nbytes_r, from_r /* from += wsize + write - nbytes */
+ subl write_r, nbytes_r /* nbytes -= write */
+#undef write_r
+
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1_mmx /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl window(%esp), from_r /* from = window */
+ movl write(%esp), nbytes_r /* nbytes = write */
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1_mmx /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+ jmp .L_do_copy1_mmx
+
+.L_contiguous_in_window_mmx:
+#define write_r %eax
+ addl write_r, from_r
+ subl nbytes_r, from_r /* from += write - nbytes */
+#undef write_r
+
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1_mmx /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+
+.L_do_copy1_mmx:
+#undef nbytes_r
+#define in_r %esi
+ movl len_r, %ecx
+ rep movsb
+
+ movl in(%esp), in_r /* move in back to %esi, toss from */
+ movl lcode(%esp), %ebx /* move lcode back to %ebx, toss dist */
+ jmp .L_while_test_mmx
+
+#undef hold_r
+#undef bitslong_r
+
+#endif /* USE_MMX || RUN_TIME_MMX */
+
+
+/*** USE_MMX, NO_MMX, and RUNTIME_MMX from here on ***/
+
+.L_invalid_distance_code:
+ /* else {
+ * strm->msg = "invalid distance code";
+ * state->mode = BAD;
+ * }
+ */
+ movl $.L_invalid_distance_code_msg, %ecx
+ movl $INFLATE_MODE_BAD, %edx
+ jmp .L_update_stream_state
+
+.L_test_for_end_of_block:
+ /* else if (op & 32) {
+ * state->mode = TYPE;
+ * break;
+ * }
+ */
+ testb $32, %al
+ jz .L_invalid_literal_length_code /* if ((op & 32) == 0) */
+
+ movl $0, %ecx
+ movl $INFLATE_MODE_TYPE, %edx
+ jmp .L_update_stream_state
+
+.L_invalid_literal_length_code:
+ /* else {
+ * strm->msg = "invalid literal/length code";
+ * state->mode = BAD;
+ * }
+ */
+ movl $.L_invalid_literal_length_code_msg, %ecx
+ movl $INFLATE_MODE_BAD, %edx
+ jmp .L_update_stream_state
+
+.L_invalid_distance_too_far:
+ /* strm->msg = "invalid distance too far back";
+ * state->mode = BAD;
+ */
+ movl in(%esp), in_r /* from_r has in's reg, put in back */
+ movl $.L_invalid_distance_too_far_msg, %ecx
+ movl $INFLATE_MODE_BAD, %edx
+ jmp .L_update_stream_state
+
+.L_update_stream_state:
+ /* set strm->msg = %ecx, strm->state->mode = %edx */
+ movl strm_sp(%esp), %eax
+ testl %ecx, %ecx /* if (msg != NULL) */
+ jz .L_skip_msg
+ movl %ecx, msg_strm(%eax) /* strm->msg = msg */
+.L_skip_msg:
+ movl state_strm(%eax), %eax /* state = strm->state */
+ movl %edx, mode_state(%eax) /* state->mode = edx (BAD | TYPE) */
+ jmp .L_break_loop
+
+.align 32,0x90
+.L_break_loop:
+
+/*
+ * Regs:
+ *
+ * bits = %ebp when mmx, and in %ebx when non-mmx
+ * hold = %hold_mm when mmx, and in %ebp when non-mmx
+ * in = %esi
+ * out = %edi
+ */
+
+#if defined( USE_MMX ) || defined( RUN_TIME_MMX )
+
+#if defined( RUN_TIME_MMX )
+
+ cmpl $DO_USE_MMX, inflate_fast_use_mmx
+ jne .L_update_next_in
+
+#endif /* RUN_TIME_MMX */
+
+ movl %ebp, %ebx
+
+.L_update_next_in:
+
+#endif
+
+#define strm_r %eax
+#define state_r %edx
+
+ /* len = bits >> 3;
+ * in -= len;
+ * bits -= len << 3;
+ * hold &= (1U << bits) - 1;
+ * state->hold = hold;
+ * state->bits = bits;
+ * strm->next_in = in;
+ * strm->next_out = out;
+ */
+ movl strm_sp(%esp), strm_r
+ movl %ebx, %ecx
+ movl state_strm(strm_r), state_r
+ shrl $3, %ecx
+ subl %ecx, in_r
+ shll $3, %ecx
+ subl %ecx, %ebx
+ movl out_r, next_out_strm(strm_r)
+ movl %ebx, bits_state(state_r)
+ movl %ebx, %ecx
+
+ leal buf(%esp), %ebx
+ cmpl %ebx, last(%esp)
+ jne .L_buf_not_used /* if buf != last */
+
+ subl %ebx, in_r /* in -= buf */
+ movl next_in_strm(strm_r), %ebx
+ movl %ebx, last(%esp) /* last = strm->next_in */
+ addl %ebx, in_r /* in += strm->next_in */
+ movl avail_in_strm(strm_r), %ebx
+ subl $11, %ebx
+ addl %ebx, last(%esp) /* last = &strm->next_in[ avail_in - 11 ] */
+
+.L_buf_not_used:
+ movl in_r, next_in_strm(strm_r)
+
+ movl $1, %ebx
+ shll %cl, %ebx
+ decl %ebx
+
+#if defined( USE_MMX ) || defined( RUN_TIME_MMX )
+
+#if defined( RUN_TIME_MMX )
+
+ cmpl $DO_USE_MMX, inflate_fast_use_mmx
+ jne .L_update_hold
+
+#endif /* RUN_TIME_MMX */
+
+ psrlq used_mm, hold_mm /* hold_mm >>= last bit length */
+ movd hold_mm, %ebp
+
+ emms
+
+.L_update_hold:
+
+#endif /* USE_MMX || RUN_TIME_MMX */
+
+ andl %ebx, %ebp
+ movl %ebp, hold_state(state_r)
+
+#define last_r %ebx
+
+ /* strm->avail_in = in < last ? 11 + (last - in) : 11 - (in - last) */
+ movl last(%esp), last_r
+ cmpl in_r, last_r
+ jbe .L_last_is_smaller /* if (in >= last) */
+
+ subl in_r, last_r /* last -= in */
+ addl $11, last_r /* last += 11 */
+ movl last_r, avail_in_strm(strm_r)
+ jmp .L_fixup_out
+.L_last_is_smaller:
+ subl last_r, in_r /* in -= last */
+ negl in_r /* in = -in */
+ addl $11, in_r /* in += 11 */
+ movl in_r, avail_in_strm(strm_r)
+
+#undef last_r
+#define end_r %ebx
+
+.L_fixup_out:
+ /* strm->avail_out = out < end ? 257 + (end - out) : 257 - (out - end)*/
+ movl end(%esp), end_r
+ cmpl out_r, end_r
+ jbe .L_end_is_smaller /* if (out >= end) */
+
+ subl out_r, end_r /* end -= out */
+ addl $257, end_r /* end += 257 */
+ movl end_r, avail_out_strm(strm_r)
+ jmp .L_done
+.L_end_is_smaller:
+ subl end_r, out_r /* out -= end */
+ negl out_r /* out = -out */
+ addl $257, out_r /* out += 257 */
+ movl out_r, avail_out_strm(strm_r)
+
+#undef end_r
+#undef strm_r
+#undef state_r
+
+.L_done:
+ addl $local_var_size, %esp
+ popf
+ popl %ebx
+ popl %ebp
+ popl %esi
+ popl %edi
+ ret
+
+#if defined( GAS_ELF )
+/* elf info */
+.type inflate_fast,@function
+.size inflate_fast,.-inflate_fast
+#endif
diff --git a/protocols/Telegram/tgl/zlib/contrib/iostream/test.cpp b/protocols/Telegram/tgl/zlib/contrib/iostream/test.cpp
new file mode 100644
index 0000000000..7d265b3b5c
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/iostream/zfstream.cpp b/protocols/Telegram/tgl/zlib/contrib/iostream/zfstream.cpp
new file mode 100644
index 0000000000..d0cd85faaf
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/iostream/zfstream.h b/protocols/Telegram/tgl/zlib/contrib/iostream/zfstream.h
new file mode 100644
index 0000000000..ed79098a3a
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/iostream/zfstream.h
@@ -0,0 +1,128 @@
+
+#ifndef zfstream_h
+#define zfstream_h
+
+#include <fstream.h>
+#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 T> class gzomanip {
+ friend gzofstream &operator<<(gzofstream &, const gzomanip<T> &);
+public:
+ gzomanip(gzofstream &(*f)(gzofstream &, T), T v) : func(f), val(v) { }
+private:
+ gzofstream &(*func)(gzofstream &, T);
+ T val;
+};
+
+template<class T> gzofstream &operator<<(gzofstream &s, const gzomanip<T> &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<int> setcompressionlevel(int l)
+{
+ return gzomanip<int>(&setcompressionlevel,l);
+}
+
+inline gzomanip<int> setcompressionstrategy(int l)
+{
+ return gzomanip<int>(&setcompressionstrategy,l);
+}
+
+#endif
diff --git a/protocols/Telegram/tgl/zlib/contrib/iostream2/zstream.h b/protocols/Telegram/tgl/zlib/contrib/iostream2/zstream.h
new file mode 100644
index 0000000000..43d2332b79
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 <strstream.h>
+#include <string.h>
+#include <stdio.h>
+#include "zlib.h"
+
+#if defined(_WIN32)
+# include <fcntl.h>
+# include <io.h>
+# 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 <class T, class Items>
+inline int read(izstream& zs, T* x, Items items) {
+ return ::gzread(zs.fp(), x, items*sizeof(T));
+}
+
+/*
+ * Binary input with the '>' operator.
+ */
+template <class T>
+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 <class T, class Items>
+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 <class T>
+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 <class T>
+inline ostream& operator<<(ozstream& zs, const T& x) {
+ zs.os_flush();
+ return zs.os() << x;
+}
+
+#endif
diff --git a/protocols/Telegram/tgl/zlib/contrib/iostream2/zstream_test.cpp b/protocols/Telegram/tgl/zlib/contrib/iostream2/zstream_test.cpp
new file mode 100644
index 0000000000..6273f62d62
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/iostream2/zstream_test.cpp
@@ -0,0 +1,25 @@
+#include "zstream.h"
+#include <math.h>
+#include <stdlib.h>
+#include <iomanip.h>
+
+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/protocols/Telegram/tgl/zlib/contrib/iostream3/README b/protocols/Telegram/tgl/zlib/contrib/iostream3/README
new file mode 100644
index 0000000000..f7b319ab91
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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
+<schwardt@sun.ac.za>
+
+DSP Lab
+Electrical & Electronic Engineering Department
+University of Stellenbosch
+South Africa
diff --git a/protocols/Telegram/tgl/zlib/contrib/iostream3/TODO b/protocols/Telegram/tgl/zlib/contrib/iostream3/TODO
new file mode 100644
index 0000000000..7032f97be0
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/iostream3/test.cc b/protocols/Telegram/tgl/zlib/contrib/iostream3/test.cc
new file mode 100644
index 0000000000..94235334f2
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/iostream3/test.cc
@@ -0,0 +1,50 @@
+/*
+ * Test program for gzifstream and gzofstream
+ *
+ * by Ludwig Schwardt <schwardt@sun.ac.za>
+ * original version by Kevin Ruland <kevin@rodin.wustl.edu>
+ */
+
+#include "zfstream.h"
+#include <iostream> // 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/protocols/Telegram/tgl/zlib/contrib/iostream3/zfstream.cc b/protocols/Telegram/tgl/zlib/contrib/iostream3/zfstream.cc
new file mode 100644
index 0000000000..94eb933444
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/iostream3/zfstream.cc
@@ -0,0 +1,479 @@
+/*
+ * A C++ I/O streams interface to the zlib gz* functions
+ *
+ * by Ludwig Schwardt <schwardt@sun.ac.za>
+ * original version by Kevin Ruland <kevin@rodin.wustl.edu>
+ *
+ * This version is standard-compliant and compatible with gcc 3.x.
+ */
+
+#include "zfstream.h"
+#include <cstring> // for strcpy, strcat, strlen (mode strings)
+#include <cstdio> // 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/protocols/Telegram/tgl/zlib/contrib/iostream3/zfstream.h b/protocols/Telegram/tgl/zlib/contrib/iostream3/zfstream.h
new file mode 100644
index 0000000000..8574479ae1
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/iostream3/zfstream.h
@@ -0,0 +1,466 @@
+/*
+ * A C++ I/O streams interface to the zlib gz* functions
+ *
+ * by Ludwig Schwardt <schwardt@sun.ac.za>
+ * original version by Kevin Ruland <kevin@rodin.wustl.edu>
+ *
+ * This version is standard-compliant and compatible with gcc 3.x.
+ */
+
+#ifndef ZFSTREAM_H
+#define ZFSTREAM_H
+
+#include <istream> // not iostream, since we don't need cin/cout
+#include <ostream>
+#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<gzfilebuf*>(&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<gzfilebuf*>(&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<typename T1, typename T2>
+ class gzomanip2
+ {
+ public:
+ // Allows insertor to peek at internals
+ template <typename Ta, typename Tb>
+ friend gzofstream&
+ operator<<(gzofstream&,
+ const gzomanip2<Ta,Tb>&);
+
+ // 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<typename T1, typename T2>
+ inline
+ gzomanip2<T1,T2>::gzomanip2(gzofstream &(*f)(gzofstream &, T1, T2),
+ T1 v1,
+ T2 v2)
+ : func(f), val1(v1), val2(v2)
+ { }
+
+// Insertor applies underlying manipulator function to stream
+template<typename T1, typename T2>
+ inline gzofstream&
+ operator<<(gzofstream& s, const gzomanip2<T1,T2>& m)
+ { return (*m.func)(s, m.val1, m.val2); }
+
+// Insert this onto stream to simplify setting of compression level
+inline gzomanip2<int,int>
+setcompression(int l, int s = Z_DEFAULT_STRATEGY)
+{ return gzomanip2<int,int>(&setcompression, l, s); }
+
+#endif // ZFSTREAM_H
diff --git a/protocols/Telegram/tgl/zlib/contrib/masmx64/bld_ml64.bat b/protocols/Telegram/tgl/zlib/contrib/masmx64/bld_ml64.bat
new file mode 100644
index 0000000000..8f9343d0af
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/masmx64/bld_ml64.bat
@@ -0,0 +1,2 @@
+ml64.exe /Flinffasx64 /c /Zi inffasx64.asm
+ml64.exe /Flgvmat64 /c /Zi gvmat64.asm
diff --git a/protocols/Telegram/tgl/zlib/contrib/masmx64/gvmat64.asm b/protocols/Telegram/tgl/zlib/contrib/masmx64/gvmat64.asm
new file mode 100644
index 0000000000..9879c28b90
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/masmx64/gvmat64.asm
@@ -0,0 +1,553 @@
+;uInt longest_match_x64(
+; deflate_state *s,
+; IPos cur_match); /* current match */
+
+; gvmat64.asm -- 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)
+; 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 infozip Zip, I use option:
+; ml64.exe /Flgvmat64 /c /Zi /DINFOZIP gvmat64.asm
+;
+; to compile this file for zLib, I use option:
+; ml64.exe /Flgvmat64 /c /Zi gvmat64.asm
+; Be carrefull to adapt zlib1222add below to your version of zLib
+; (if you use a version of zLib before 1.0.4 or after 1.2.2.2, change
+; value of zlib1222add later)
+;
+; This file compile with Microsoft Macro Assembler (x64) for AMD64
+;
+; ml64.exe is given with Visual Studio 2005/2008/2010 and Windows WDK
+;
+; (you can get Windows WDK with ml64 for AMD64 from
+; http://www.microsoft.com/whdc/Devtools/wdk/default.mspx for low price)
+;
+
+
+;uInt longest_match(s, cur_match)
+; deflate_state *s;
+; IPos cur_match; /* current match */
+.code
+longest_match PROC
+
+
+;LocalVarsSize equ 88
+ LocalVarsSize equ 72
+
+; register used : rax,rbx,rcx,rdx,rsi,rdi,r8,r9,r10,r11,r12
+; free register : r14,r15
+; register can be saved : rsp
+
+ chainlenwmask equ rsp + 8 - LocalVarsSize ; high word: current chain len
+ ; low word: s->wmask
+;window equ rsp + xx - LocalVarsSize ; local copy of s->window ; stored in r10
+;windowbestlen equ rsp + xx - LocalVarsSize ; s->window + bestlen , use r10+r11
+;scanstart equ rsp + xx - LocalVarsSize ; first two bytes of string ; stored in r12w
+;scanend equ rsp + xx - LocalVarsSize ; last two bytes of string use ebx
+;scanalign equ rsp + xx - LocalVarsSize ; dword-misalignment of string r13
+;bestlen equ rsp + xx - LocalVarsSize ; size of best match so far -> r11d
+;scan equ rsp + xx - LocalVarsSize ; ptr to string wanting match -> r9
+IFDEF INFOZIP
+ELSE
+ nicematch equ (rsp + 16 - LocalVarsSize) ; a good enough match size
+ENDIF
+
+save_rdi equ rsp + 24 - LocalVarsSize
+save_rsi equ rsp + 32 - LocalVarsSize
+save_rbx equ rsp + 40 - LocalVarsSize
+save_rbp equ rsp + 48 - LocalVarsSize
+save_r12 equ rsp + 56 - LocalVarsSize
+save_r13 equ rsp + 64 - LocalVarsSize
+;save_r14 equ rsp + 72 - LocalVarsSize
+;save_r15 equ rsp + 80 - LocalVarsSize
+
+
+; summary of register usage
+; scanend ebx
+; scanendw bx
+; chainlenwmask edx
+; curmatch rsi
+; curmatchd esi
+; windowbestlen r8
+; scanalign r9
+; scanalignd r9d
+; window r10
+; bestlen r11
+; bestlend r11d
+; scanstart r12d
+; scanstartw r12w
+; scan r13
+; nicematch r14d
+; limit r15
+; limitd r15d
+; prev rcx
+
+; 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
+
+
+ MAX_MATCH equ 258
+ MIN_MATCH equ 3
+ MIN_LOOKAHEAD equ (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").
+
+
+IFDEF INFOZIP
+
+_DATA SEGMENT
+COMM window_size:DWORD
+; WMask ; 7fff
+COMM window:BYTE:010040H
+COMM prev:WORD:08000H
+; MatchLen : unused
+; PrevMatch : unused
+COMM strstart:DWORD
+COMM match_start:DWORD
+; Lookahead : ignore
+COMM prev_length:DWORD ; PrevLen
+COMM max_chain_length:DWORD
+COMM good_match:DWORD
+COMM nice_match:DWORD
+prev_ad equ OFFSET prev
+window_ad equ OFFSET window
+nicematch equ nice_match
+_DATA ENDS
+WMask equ 07fffh
+
+ELSE
+
+ IFNDEF zlib1222add
+ zlib1222add equ 8
+ ENDIF
+dsWSize equ 56+zlib1222add+(zlib1222add/2)
+dsWMask equ 64+zlib1222add+(zlib1222add/2)
+dsWindow equ 72+zlib1222add
+dsPrev equ 88+zlib1222add
+dsMatchLen equ 128+zlib1222add
+dsPrevMatch equ 132+zlib1222add
+dsStrStart equ 140+zlib1222add
+dsMatchStart equ 144+zlib1222add
+dsLookahead equ 148+zlib1222add
+dsPrevLen equ 152+zlib1222add
+dsMaxChainLen equ 156+zlib1222add
+dsGoodMatch equ 172+zlib1222add
+dsNiceMatch equ 176+zlib1222add
+
+window_size equ [ rcx + dsWSize]
+WMask equ [ rcx + dsWMask]
+window_ad equ [ rcx + dsWindow]
+prev_ad equ [ rcx + dsPrev]
+strstart equ [ rcx + dsStrStart]
+match_start equ [ rcx + dsMatchStart]
+Lookahead equ [ rcx + dsLookahead] ; 0ffffffffh on infozip
+prev_length equ [ rcx + dsPrevLen]
+max_chain_length equ [ rcx + dsMaxChainLen]
+good_match equ [ rcx + dsGoodMatch]
+nice_match equ [ rcx + dsNiceMatch]
+ENDIF
+
+; parameter 1 in r8(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.
+
+
+
+;;; 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.
+
+; parameter 1 in rcx (deflate_state* s), param 2 in edx -> r8 (cur match)
+
+; this clear high 32 bits of r8, which can be garbage in both r8 and rdx
+
+ mov [save_rdi],rdi
+ mov [save_rsi],rsi
+ mov [save_rbx],rbx
+ mov [save_rbp],rbp
+IFDEF INFOZIP
+ mov r8d,ecx
+ELSE
+ mov r8d,edx
+ENDIF
+ 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;
+
+IFDEF INFOZIP
+ mov [chainlenwmask], ebx
+; on infozip nice_match = [nice_match]
+ELSE
+ mov eax, nice_match
+ mov [chainlenwmask], ebx
+ mov r10d, Lookahead
+ cmp r10d, eax
+ cmovnl r10d, eax
+ mov [nicematch],r10d
+ENDIF
+
+;;; 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;
+IFDEF INFOZIP
+ mov eax,07efah ; MAX_DIST = (WSIZE-MIN_LOOKAHEAD) (0x8000-(3+8+1))
+ELSE
+ mov eax, window_size
+ sub eax, MIN_LOOKAHEAD
+ENDIF
+ 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, 00010000h
+ js LeaveNow
+
+LoopEntry1:
+ cmp bx,word ptr [rsi + r8 - 1]
+ jz LookupLoopIsZero
+
+LookupLoop2:
+ and r8d, edx
+
+ movzx r8d, word ptr [rdi + r8*2]
+ cmp r8d, ebp
+ jbe LeaveNow
+ sub edx, 00010000h
+ js LeaveNow
+
+LoopEntry2:
+ cmp bx,word ptr [rsi + r8 - 1]
+ jz LookupLoopIsZero
+
+LookupLoop4:
+ and r8d, edx
+
+ movzx r8d, word ptr [rdi + r8*2]
+ cmp r8d, ebp
+ jbe LeaveNow
+ sub edx, 00010000h
+ js LeaveNow
+
+LoopEntry4:
+
+ cmp bx,word ptr [rsi + r8 - 1]
+ jnz LookupLoop1
+ jmp LookupLoopIsZero
+
+
+;;; 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
+
+LookupLoop:
+ and r8d, edx
+
+ movzx r8d, word ptr [rdi + r8*2]
+ cmp r8d, ebp
+ jbe LeaveNow
+ sub edx, 00010000h
+ js LeaveNow
+
+LoopEntry:
+
+ cmp bx,word ptr [rsi + r8 - 1]
+ jnz LookupLoop1
+LookupLoopIsZero:
+ cmp r12w, word ptr [r10 + r8]
+ jnz LookupLoop1
+
+
+;;; 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, 0fffffffffffffef8h; -(MAX_MATCH_8)
+ lea rsi, [rsi + r13 + 0108h] ;MAX_MATCH_8]
+ lea rdi, [r9 + r13 + 0108h] ;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
+
+ jnz short LoopCmps
+ jmp short LenMaximum
+LeaveLoopCmps16: add rdx,8
+LeaveLoopCmps8: add rdx,8
+LeaveLoopCmps:
+
+ test eax, 0000FFFFh
+ jnz LenLower
+
+ test eax,0ffffffffh
+
+ jnz LenLower32
+
+ add rdx,4
+ shr rax,32
+ or ax,ax
+ jnz LenLower
+
+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
+ jge LenMaximum
+
+;;; 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]
+ jmp LookupLoop
+
+;;; 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]
+ jge LeaveNow
+
+ lea rsi,[r10+rax]
+
+ movzx ebx, word ptr [r9 + rax - 1]
+ mov rdi, prev_ad
+ mov edx, [chainlenwmask]
+ jmp LookupLoop
+
+;;; 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:
+IFDEF INFOZIP
+ mov eax,r11d
+ELSE
+ mov eax, Lookahead
+ cmp r11d, eax
+ cmovng eax, r11d
+ENDIF
+
+;;; 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
+longest_match ENDP
+
+match_init PROC
+ ret 0
+match_init ENDP
+
+
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/masmx64/inffas8664.c b/protocols/Telegram/tgl/zlib/contrib/masmx64/inffas8664.c
new file mode 100644
index 0000000000..e8af06fa02
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/masmx64/inffas8664.c
@@ -0,0 +1,186 @@
+/* inffas8664.c is a hand tuned assembler version of inffast.c - fast decoding
+ * version for AMD64 on Windows using Microsoft C compiler
+ *
+ * Copyright (C) 1995-2003 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ *
+ * Copyright (C) 2003 Chris Anderson <christop@charm.net>
+ * Please use the copyright conditions above.
+ *
+ * 2005 - Adaptation to Microsoft C Compiler for AMD64 by Gilles Vollant
+ *
+ * inffas8664.c call function inffas8664fnc in inffasx64.asm
+ * inffasx64.asm is automatically convert from AMD64 portion of inffas86.c
+ *
+ * Dec-29-2003 -- I added AMD64 inflate asm support. This version is also
+ * slightly quicker on x86 systems because, instead of using rep movsb to copy
+ * data, it uses rep movsw, which moves data in 2-byte chunks instead of single
+ * bytes. I've tested the AMD64 code on a Fedora Core 1 + the x86_64 updates
+ * from http://fedora.linux.duke.edu/fc1_x86_64
+ * which is running on an Athlon 64 3000+ / Gigabyte GA-K8VT800M system with
+ * 1GB ram. The 64-bit version is about 4% faster than the 32-bit version,
+ * when decompressing mozilla-source-1.3.tar.gz.
+ *
+ * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from
+ * the gcc -S output of zlib-1.2.0/inffast.c. Zlib-1.2.0 is in beta release at
+ * the moment. I have successfully compiled and tested this code with gcc2.96,
+ * gcc3.2, icc5.0, msvc6.0. It is very close to the speed of inffast.S
+ * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX
+ * enabled. I will attempt to merge the MMX code into this version. Newer
+ * versions of this and inffast.S can be found at
+ * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/
+ *
+ */
+
+#include <stdio.h>
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+/* Mark Adler's comments from inffast.c: */
+
+/*
+ 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.
+ */
+
+
+
+ typedef struct inffast_ar {
+/* 64 32 x86 x86_64 */
+/* ar offset register */
+/* 0 0 */ void *esp; /* esp save */
+/* 8 4 */ void *ebp; /* ebp save */
+/* 16 8 */ unsigned char FAR *in; /* esi rsi local strm->next_in */
+/* 24 12 */ unsigned char FAR *last; /* r9 while in < last */
+/* 32 16 */ unsigned char FAR *out; /* edi rdi local strm->next_out */
+/* 40 20 */ unsigned char FAR *beg; /* inflate()'s init next_out */
+/* 48 24 */ unsigned char FAR *end; /* r10 while out < end */
+/* 56 28 */ unsigned char FAR *window;/* size of window, wsize!=0 */
+/* 64 32 */ code const FAR *lcode; /* ebp rbp local strm->lencode */
+/* 72 36 */ code const FAR *dcode; /* r11 local strm->distcode */
+/* 80 40 */ size_t /*unsigned long */hold; /* edx rdx local strm->hold */
+/* 88 44 */ unsigned bits; /* ebx rbx local strm->bits */
+/* 92 48 */ unsigned wsize; /* window size */
+/* 96 52 */ unsigned write; /* window write index */
+/*100 56 */ unsigned lmask; /* r12 mask for lcode */
+/*104 60 */ unsigned dmask; /* r13 mask for dcode */
+/*108 64 */ unsigned len; /* r14 match length */
+/*112 68 */ unsigned dist; /* r15 match distance */
+/*116 72 */ unsigned status; /* set when state chng*/
+ } type_ar;
+#ifdef ASMINF
+
+void inflate_fast(strm, start)
+z_streamp strm;
+unsigned start; /* inflate()'s starting value for strm->avail_out */
+{
+ struct inflate_state FAR *state;
+ type_ar ar;
+ void inffas8664fnc(struct inffast_ar * par);
+
+
+
+#if (defined( __GNUC__ ) && defined( __amd64__ ) && ! defined( __i386 )) || (defined(_MSC_VER) && defined(_M_AMD64))
+#define PAD_AVAIL_IN 6
+#define PAD_AVAIL_OUT 258
+#else
+#define PAD_AVAIL_IN 5
+#define PAD_AVAIL_OUT 257
+#endif
+
+ /* copy state to local variables */
+ state = (struct inflate_state FAR *)strm->state;
+
+ ar.in = strm->next_in;
+ ar.last = ar.in + (strm->avail_in - PAD_AVAIL_IN);
+ ar.out = strm->next_out;
+ ar.beg = ar.out - (start - strm->avail_out);
+ ar.end = ar.out + (strm->avail_out - PAD_AVAIL_OUT);
+ ar.wsize = state->wsize;
+ ar.write = state->wnext;
+ ar.window = state->window;
+ ar.hold = state->hold;
+ ar.bits = state->bits;
+ ar.lcode = state->lencode;
+ ar.dcode = state->distcode;
+ ar.lmask = (1U << state->lenbits) - 1;
+ ar.dmask = (1U << state->distbits) - 1;
+
+ /* decode literals and length/distances until end-of-block or not enough
+ input data or output space */
+
+ /* align in on 1/2 hold size boundary */
+ while (((size_t)(void *)ar.in & (sizeof(ar.hold) / 2 - 1)) != 0) {
+ ar.hold += (unsigned long)*ar.in++ << ar.bits;
+ ar.bits += 8;
+ }
+
+ inffas8664fnc(&ar);
+
+ if (ar.status > 1) {
+ if (ar.status == 2)
+ strm->msg = "invalid literal/length code";
+ else if (ar.status == 3)
+ strm->msg = "invalid distance code";
+ else
+ strm->msg = "invalid distance too far back";
+ state->mode = BAD;
+ }
+ else if ( ar.status == 1 ) {
+ state->mode = TYPE;
+ }
+
+ /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
+ ar.len = ar.bits >> 3;
+ ar.in -= ar.len;
+ ar.bits -= ar.len << 3;
+ ar.hold &= (1U << ar.bits) - 1;
+
+ /* update state and return */
+ strm->next_in = ar.in;
+ strm->next_out = ar.out;
+ strm->avail_in = (unsigned)(ar.in < ar.last ?
+ PAD_AVAIL_IN + (ar.last - ar.in) :
+ PAD_AVAIL_IN - (ar.in - ar.last));
+ strm->avail_out = (unsigned)(ar.out < ar.end ?
+ PAD_AVAIL_OUT + (ar.end - ar.out) :
+ PAD_AVAIL_OUT - (ar.out - ar.end));
+ state->hold = (unsigned long)ar.hold;
+ state->bits = ar.bits;
+ return;
+}
+
+#endif
diff --git a/protocols/Telegram/tgl/zlib/contrib/masmx64/inffasx64.asm b/protocols/Telegram/tgl/zlib/contrib/masmx64/inffasx64.asm
new file mode 100644
index 0000000000..60a8d89b71
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/masmx64/inffasx64.asm
@@ -0,0 +1,396 @@
+; inffasx64.asm is a hand tuned assembler version of inffast.c - fast decoding
+; version for AMD64 on Windows using Microsoft C compiler
+;
+; inffasx64.asm is automatically convert from AMD64 portion of inffas86.c
+; inffasx64.asm is called by inffas8664.c, which contain more info.
+
+
+; to compile this file, I use option
+; ml64.exe /Flinffasx64 /c /Zi inffasx64.asm
+; with Microsoft Macro Assembler (x64) for AMD64
+;
+
+; This file compile with Microsoft Macro Assembler (x64) for AMD64
+;
+; ml64.exe is given with Visual Studio 2005/2008/2010 and Windows WDK
+;
+; (you can get Windows WDK with ml64 for AMD64 from
+; http://www.microsoft.com/whdc/Devtools/wdk/default.mspx for low price)
+;
+
+
+.code
+inffas8664fnc PROC
+
+; 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, r-9, r10, and r11, which are scratch.
+
+
+ mov [rsp-8],rsi
+ mov [rsp-16],rdi
+ mov [rsp-24],r12
+ mov [rsp-32],r13
+ mov [rsp-40],r14
+ mov [rsp-48],r15
+ mov [rsp-56],rbx
+
+ mov rax,rcx
+
+ mov [rax+8], rbp ; /* save regs rbp and rsp */
+ mov [rax], rsp
+
+ mov rsp, rax ; /* make rsp point to &ar */
+
+ mov rsi, [rsp+16] ; /* rsi = in */
+ mov rdi, [rsp+32] ; /* rdi = out */
+ mov r9, [rsp+24] ; /* r9 = last */
+ mov r10, [rsp+48] ; /* r10 = end */
+ mov rbp, [rsp+64] ; /* rbp = lcode */
+ mov r11, [rsp+72] ; /* r11 = dcode */
+ mov rdx, [rsp+80] ; /* rdx = hold */
+ mov ebx, [rsp+88] ; /* ebx = bits */
+ mov r12d, [rsp+100] ; /* r12d = lmask */
+ mov r13d, [rsp+104] ; /* r13d = dmask */
+ ; /* r14d = len */
+ ; /* r15d = dist */
+
+
+ cld
+ cmp r10, rdi
+ je L_one_time ; /* if only one decode left */
+ cmp r9, rsi
+
+ jne L_do_loop
+
+
+L_one_time:
+ mov r8, r12 ; /* r8 = lmask */
+ cmp bl, 32
+ ja L_get_length_code_one_time
+
+ lodsd ; /* eax = *(uint *)in++ */
+ mov cl, bl ; /* cl = bits, needs it for shifting */
+ add bl, 32 ; /* bits += 32 */
+ shl rax, cl
+ or rdx, rax ; /* hold |= *((uint *)in)++ << bits */
+ jmp L_get_length_code_one_time
+
+ALIGN 4
+L_while_test:
+ cmp r10, rdi
+ jbe L_break_loop
+ cmp r9, rsi
+ jbe L_break_loop
+
+L_do_loop:
+ mov r8, r12 ; /* r8 = lmask */
+ cmp bl, 32
+ ja L_get_length_code ; /* if (32 < bits) */
+
+ lodsd ; /* eax = *(uint *)in++ */
+ mov cl, bl ; /* cl = bits, needs it for shifting */
+ add bl, 32 ; /* bits += 32 */
+ shl rax, cl
+ or rdx, rax ; /* hold |= *((uint *)in)++ << bits */
+
+L_get_length_code:
+ and r8, rdx ; /* r8 &= hold */
+ mov eax, [rbp+r8*4] ; /* eax = lcode[hold & lmask] */
+
+ mov cl, ah ; /* cl = this.bits */
+ sub bl, ah ; /* bits -= this.bits */
+ shr rdx, cl ; /* hold >>= this.bits */
+
+ test al, al
+ jnz L_test_for_length_base ; /* if (op != 0) 45.7% */
+
+ mov r8, r12 ; /* r8 = lmask */
+ shr eax, 16 ; /* output this.val char */
+ stosb
+
+L_get_length_code_one_time:
+ and r8, rdx ; /* r8 &= hold */
+ mov eax, [rbp+r8*4] ; /* eax = lcode[hold & lmask] */
+
+L_dolen:
+ mov cl, ah ; /* cl = this.bits */
+ sub bl, ah ; /* bits -= this.bits */
+ shr rdx, cl ; /* hold >>= this.bits */
+
+ test al, al
+ jnz L_test_for_length_base ; /* if (op != 0) 45.7% */
+
+ shr eax, 16 ; /* output this.val char */
+ stosb
+ jmp L_while_test
+
+ALIGN 4
+L_test_for_length_base:
+ mov r14d, eax ; /* len = this */
+ shr r14d, 16 ; /* len = this.val */
+ mov cl, al
+
+ test al, 16
+ jz L_test_for_second_level_length ; /* if ((op & 16) == 0) 8% */
+ and cl, 15 ; /* op &= 15 */
+ jz L_decode_distance ; /* if (!op) */
+
+L_add_bits_to_len:
+ sub bl, cl
+ xor eax, eax
+ inc eax
+ shl eax, cl
+ dec eax
+ and eax, edx ; /* eax &= hold */
+ shr rdx, cl
+ add r14d, eax ; /* len += hold & mask[op] */
+
+L_decode_distance:
+ mov r8, r13 ; /* r8 = dmask */
+ cmp bl, 32
+ ja L_get_distance_code ; /* if (32 < bits) */
+
+ lodsd ; /* eax = *(uint *)in++ */
+ mov cl, bl ; /* cl = bits, needs it for shifting */
+ add bl, 32 ; /* bits += 32 */
+ shl rax, cl
+ or rdx, rax ; /* hold |= *((uint *)in)++ << bits */
+
+L_get_distance_code:
+ and r8, rdx ; /* r8 &= hold */
+ mov eax, [r11+r8*4] ; /* eax = dcode[hold & dmask] */
+
+L_dodist:
+ mov r15d, eax ; /* dist = this */
+ shr r15d, 16 ; /* dist = this.val */
+ mov cl, ah
+ sub bl, ah ; /* bits -= this.bits */
+ shr rdx, cl ; /* hold >>= this.bits */
+ mov cl, al ; /* cl = this.op */
+
+ test al, 16 ; /* if ((op & 16) == 0) */
+ jz L_test_for_second_level_dist
+ and cl, 15 ; /* op &= 15 */
+ jz L_check_dist_one
+
+L_add_bits_to_dist:
+ sub bl, cl
+ xor eax, eax
+ inc eax
+ shl eax, cl
+ dec eax ; /* (1 << op) - 1 */
+ and eax, edx ; /* eax &= hold */
+ shr rdx, cl
+ add r15d, eax ; /* dist += hold & ((1 << op) - 1) */
+
+L_check_window:
+ mov r8, rsi ; /* save in so from can use it's reg */
+ mov rax, rdi
+ sub rax, [rsp+40] ; /* nbytes = out - beg */
+
+ cmp eax, r15d
+ jb L_clip_window ; /* if (dist > nbytes) 4.2% */
+
+ mov ecx, r14d ; /* ecx = len */
+ mov rsi, rdi
+ sub rsi, r15 ; /* from = out - dist */
+
+ sar ecx, 1
+ jnc L_copy_two ; /* if len % 2 == 0 */
+
+ rep movsw
+ mov al, [rsi]
+ mov [rdi], al
+ inc rdi
+
+ mov rsi, r8 ; /* move in back to %rsi, toss from */
+ jmp L_while_test
+
+L_copy_two:
+ rep movsw
+ mov rsi, r8 ; /* move in back to %rsi, toss from */
+ jmp L_while_test
+
+ALIGN 4
+L_check_dist_one:
+ cmp r15d, 1 ; /* if dist 1, is a memset */
+ jne L_check_window
+ cmp [rsp+40], rdi ; /* if out == beg, outside window */
+ je L_check_window
+
+ mov ecx, r14d ; /* ecx = len */
+ mov al, [rdi-1]
+ mov ah, al
+
+ sar ecx, 1
+ jnc L_set_two
+ mov [rdi], al
+ inc rdi
+
+L_set_two:
+ rep stosw
+ jmp L_while_test
+
+ALIGN 4
+L_test_for_second_level_length:
+ test al, 64
+ jnz L_test_for_end_of_block ; /* if ((op & 64) != 0) */
+
+ xor eax, eax
+ inc eax
+ shl eax, cl
+ dec eax
+ and eax, edx ; /* eax &= hold */
+ add eax, r14d ; /* eax += len */
+ mov eax, [rbp+rax*4] ; /* eax = lcode[val+(hold&mask[op])]*/
+ jmp L_dolen
+
+ALIGN 4
+L_test_for_second_level_dist:
+ test al, 64
+ jnz L_invalid_distance_code ; /* if ((op & 64) != 0) */
+
+ xor eax, eax
+ inc eax
+ shl eax, cl
+ dec eax
+ and eax, edx ; /* eax &= hold */
+ add eax, r15d ; /* eax += dist */
+ mov eax, [r11+rax*4] ; /* eax = dcode[val+(hold&mask[op])]*/
+ jmp L_dodist
+
+ALIGN 4
+L_clip_window:
+ mov ecx, eax ; /* ecx = nbytes */
+ mov eax, [rsp+92] ; /* eax = wsize, prepare for dist cmp */
+ neg ecx ; /* nbytes = -nbytes */
+
+ cmp eax, r15d
+ jb L_invalid_distance_too_far ; /* if (dist > wsize) */
+
+ add ecx, r15d ; /* nbytes = dist - nbytes */
+ cmp dword ptr [rsp+96], 0
+ jne L_wrap_around_window ; /* if (write != 0) */
+
+ mov rsi, [rsp+56] ; /* from = window */
+ sub eax, ecx ; /* eax -= nbytes */
+ add rsi, rax ; /* from += wsize - nbytes */
+
+ mov eax, r14d ; /* eax = len */
+ cmp r14d, ecx
+ jbe L_do_copy ; /* if (nbytes >= len) */
+
+ sub eax, ecx ; /* eax -= nbytes */
+ rep movsb
+ mov rsi, rdi
+ sub rsi, r15 ; /* from = &out[ -dist ] */
+ jmp L_do_copy
+
+ALIGN 4
+L_wrap_around_window:
+ mov eax, [rsp+96] ; /* eax = write */
+ cmp ecx, eax
+ jbe L_contiguous_in_window ; /* if (write >= nbytes) */
+
+ mov esi, [rsp+92] ; /* from = wsize */
+ add rsi, [rsp+56] ; /* from += window */
+ add rsi, rax ; /* from += write */
+ sub rsi, rcx ; /* from -= nbytes */
+ sub ecx, eax ; /* nbytes -= write */
+
+ mov eax, r14d ; /* eax = len */
+ cmp eax, ecx
+ jbe L_do_copy ; /* if (nbytes >= len) */
+
+ sub eax, ecx ; /* len -= nbytes */
+ rep movsb
+ mov rsi, [rsp+56] ; /* from = window */
+ mov ecx, [rsp+96] ; /* nbytes = write */
+ cmp eax, ecx
+ jbe L_do_copy ; /* if (nbytes >= len) */
+
+ sub eax, ecx ; /* len -= nbytes */
+ rep movsb
+ mov rsi, rdi
+ sub rsi, r15 ; /* from = out - dist */
+ jmp L_do_copy
+
+ALIGN 4
+L_contiguous_in_window:
+ mov rsi, [rsp+56] ; /* rsi = window */
+ add rsi, rax
+ sub rsi, rcx ; /* from += write - nbytes */
+
+ mov eax, r14d ; /* eax = len */
+ cmp eax, ecx
+ jbe L_do_copy ; /* if (nbytes >= len) */
+
+ sub eax, ecx ; /* len -= nbytes */
+ rep movsb
+ mov rsi, rdi
+ sub rsi, r15 ; /* from = out - dist */
+ jmp L_do_copy ; /* if (nbytes >= len) */
+
+ALIGN 4
+L_do_copy:
+ mov ecx, eax ; /* ecx = len */
+ rep movsb
+
+ mov rsi, r8 ; /* move in back to %esi, toss from */
+ jmp L_while_test
+
+L_test_for_end_of_block:
+ test al, 32
+ jz L_invalid_literal_length_code
+ mov dword ptr [rsp+116], 1
+ jmp L_break_loop_with_status
+
+L_invalid_literal_length_code:
+ mov dword ptr [rsp+116], 2
+ jmp L_break_loop_with_status
+
+L_invalid_distance_code:
+ mov dword ptr [rsp+116], 3
+ jmp L_break_loop_with_status
+
+L_invalid_distance_too_far:
+ mov dword ptr [rsp+116], 4
+ jmp L_break_loop_with_status
+
+L_break_loop:
+ mov dword ptr [rsp+116], 0
+
+L_break_loop_with_status:
+; /* put in, out, bits, and hold back into ar and pop esp */
+ mov [rsp+16], rsi ; /* in */
+ mov [rsp+32], rdi ; /* out */
+ mov [rsp+88], ebx ; /* bits */
+ mov [rsp+80], rdx ; /* hold */
+
+ mov rax, [rsp] ; /* restore rbp and rsp */
+ mov rbp, [rsp+8]
+ mov rsp, rax
+
+
+
+ mov rsi,[rsp-8]
+ mov rdi,[rsp-16]
+ mov r12,[rsp-24]
+ mov r13,[rsp-32]
+ mov r14,[rsp-40]
+ mov r15,[rsp-48]
+ mov rbx,[rsp-56]
+
+ ret 0
+; :
+; : "m" (ar)
+; : "memory", "%rax", "%rbx", "%rcx", "%rdx", "%rsi", "%rdi",
+; "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
+; );
+
+inffas8664fnc ENDP
+;_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/masmx64/readme.txt b/protocols/Telegram/tgl/zlib/contrib/masmx64/readme.txt
new file mode 100644
index 0000000000..2da6733412
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/masmx64/readme.txt
@@ -0,0 +1,31 @@
+Summary
+-------
+This directory contains ASM implementations of the functions
+longest_match() and inflate_fast(), for 64 bits x86 (both AMD64 and Intel EM64t),
+for use with Microsoft Macro Assembler (x64) for AMD64 and Microsoft C++ 64 bits.
+
+gvmat64.asm is written by Gilles Vollant (2005), by using Brian Raiter 686/32 bits
+ assembly optimized version from Jean-loup Gailly original longest_match function
+
+inffasx64.asm and inffas8664.c were written by Chris Anderson, by optimizing
+ original function from Mark Adler
+
+Use instructions
+----------------
+Assemble the .asm files using MASM and put the object files into the zlib source
+directory. You can also get object files here:
+
+ http://www.winimage.com/zLibDll/zlib124_masm_obj.zip
+
+define ASMV and ASMINF in your project. Include inffas8664.c in your source tree,
+and inffasx64.obj and gvmat64.obj as object to link.
+
+
+Build instructions
+------------------
+run bld_64.bat with Microsoft Macro Assembler (x64) for AMD64 (ml64.exe)
+
+ml64.exe is given with Visual Studio 2005, Windows 2003 server DDK
+
+You can get Windows 2003 server DDK with ml64 and cl for AMD64 from
+ http://www.microsoft.com/whdc/devtools/ddk/default.mspx for low price)
diff --git a/protocols/Telegram/tgl/zlib/contrib/masmx86/bld_ml32.bat b/protocols/Telegram/tgl/zlib/contrib/masmx86/bld_ml32.bat
new file mode 100644
index 0000000000..e1b86bf68a
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/masmx86/bld_ml32.bat
@@ -0,0 +1,2 @@
+ml /coff /Zi /c /Flmatch686.lst match686.asm
+ml /coff /Zi /c /Flinffas32.lst inffas32.asm
diff --git a/protocols/Telegram/tgl/zlib/contrib/masmx86/inffas32.asm b/protocols/Telegram/tgl/zlib/contrib/masmx86/inffas32.asm
new file mode 100644
index 0000000000..03d20f838b
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/masmx86/inffas32.asm
@@ -0,0 +1,1080 @@
+;/* inffas32.asm is a hand tuned assembler version of inffast.c -- fast decoding
+; *
+; * inffas32.asm is derivated from inffas86.c, with translation of assembly code
+; *
+; * Copyright (C) 1995-2003 Mark Adler
+; * For conditions of distribution and use, see copyright notice in zlib.h
+; *
+; * Copyright (C) 2003 Chris Anderson <christop@charm.net>
+; * Please use the copyright conditions above.
+; *
+; * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from
+; * the gcc -S output of zlib-1.2.0/inffast.c. Zlib-1.2.0 is in beta release at
+; * the moment. I have successfully compiled and tested this code with gcc2.96,
+; * gcc3.2, icc5.0, msvc6.0. It is very close to the speed of inffast.S
+; * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX
+; * enabled. I will attempt to merge the MMX code into this version. Newer
+; * versions of this and inffast.S can be found at
+; * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/
+; *
+; * 2005 : modification by Gilles Vollant
+; */
+; For Visual C++ 4.x and higher and ML 6.x and higher
+; ml.exe is in directory \MASM611C of Win95 DDK
+; ml.exe is also distributed in http://www.masm32.com/masmdl.htm
+; and in VC++2003 toolkit at http://msdn.microsoft.com/visualc/vctoolkit2003/
+;
+;
+; compile with command line option
+; ml /coff /Zi /c /Flinffas32.lst inffas32.asm
+
+; if you define NO_GZIP (see inflate.h), compile with
+; ml /coff /Zi /c /Flinffas32.lst /DNO_GUNZIP inffas32.asm
+
+
+; zlib122sup is 0 fort zlib 1.2.2.1 and lower
+; zlib122sup is 8 fort zlib 1.2.2.2 and more (with addition of dmax and head
+; in inflate_state in inflate.h)
+zlib1222sup equ 8
+
+
+IFDEF GUNZIP
+ INFLATE_MODE_TYPE equ 11
+ INFLATE_MODE_BAD equ 26
+ELSE
+ IFNDEF NO_GUNZIP
+ INFLATE_MODE_TYPE equ 11
+ INFLATE_MODE_BAD equ 26
+ ELSE
+ INFLATE_MODE_TYPE equ 3
+ INFLATE_MODE_BAD equ 17
+ ENDIF
+ENDIF
+
+
+; 75 "inffast.S"
+;FILE "inffast.S"
+
+;;;GLOBAL _inflate_fast
+
+;;;SECTION .text
+
+
+
+ .586p
+ .mmx
+
+ name inflate_fast_x86
+ .MODEL FLAT
+
+_DATA segment
+inflate_fast_use_mmx:
+ dd 1
+
+
+_TEXT segment
+
+
+
+ALIGN 4
+ db 'Fast decoding Code from Chris Anderson'
+ db 0
+
+ALIGN 4
+invalid_literal_length_code_msg:
+ db 'invalid literal/length code'
+ db 0
+
+ALIGN 4
+invalid_distance_code_msg:
+ db 'invalid distance code'
+ db 0
+
+ALIGN 4
+invalid_distance_too_far_msg:
+ db 'invalid distance too far back'
+ db 0
+
+
+ALIGN 4
+inflate_fast_mask:
+dd 0
+dd 1
+dd 3
+dd 7
+dd 15
+dd 31
+dd 63
+dd 127
+dd 255
+dd 511
+dd 1023
+dd 2047
+dd 4095
+dd 8191
+dd 16383
+dd 32767
+dd 65535
+dd 131071
+dd 262143
+dd 524287
+dd 1048575
+dd 2097151
+dd 4194303
+dd 8388607
+dd 16777215
+dd 33554431
+dd 67108863
+dd 134217727
+dd 268435455
+dd 536870911
+dd 1073741823
+dd 2147483647
+dd 4294967295
+
+
+mode_state equ 0 ;/* state->mode */
+wsize_state equ (32+zlib1222sup) ;/* state->wsize */
+write_state equ (36+4+zlib1222sup) ;/* state->write */
+window_state equ (40+4+zlib1222sup) ;/* state->window */
+hold_state equ (44+4+zlib1222sup) ;/* state->hold */
+bits_state equ (48+4+zlib1222sup) ;/* state->bits */
+lencode_state equ (64+4+zlib1222sup) ;/* state->lencode */
+distcode_state equ (68+4+zlib1222sup) ;/* state->distcode */
+lenbits_state equ (72+4+zlib1222sup) ;/* state->lenbits */
+distbits_state equ (76+4+zlib1222sup) ;/* state->distbits */
+
+
+;;SECTION .text
+; 205 "inffast.S"
+;GLOBAL inflate_fast_use_mmx
+
+;SECTION .data
+
+
+; GLOBAL inflate_fast_use_mmx:object
+;.size inflate_fast_use_mmx, 4
+; 226 "inffast.S"
+;SECTION .text
+
+ALIGN 4
+_inflate_fast proc near
+.FPO (16, 4, 0, 0, 1, 0)
+ push edi
+ push esi
+ push ebp
+ push ebx
+ pushfd
+ sub esp,64
+ cld
+
+
+
+
+ mov esi, [esp+88]
+ mov edi, [esi+28]
+
+
+
+
+
+
+
+ mov edx, [esi+4]
+ mov eax, [esi+0]
+
+ add edx,eax
+ sub edx,11
+
+ mov [esp+44],eax
+ mov [esp+20],edx
+
+ mov ebp, [esp+92]
+ mov ecx, [esi+16]
+ mov ebx, [esi+12]
+
+ sub ebp,ecx
+ neg ebp
+ add ebp,ebx
+
+ sub ecx,257
+ add ecx,ebx
+
+ mov [esp+60],ebx
+ mov [esp+40],ebp
+ mov [esp+16],ecx
+; 285 "inffast.S"
+ mov eax, [edi+lencode_state]
+ mov ecx, [edi+distcode_state]
+
+ mov [esp+8],eax
+ mov [esp+12],ecx
+
+ mov eax,1
+ mov ecx, [edi+lenbits_state]
+ shl eax,cl
+ dec eax
+ mov [esp+0],eax
+
+ mov eax,1
+ mov ecx, [edi+distbits_state]
+ shl eax,cl
+ dec eax
+ mov [esp+4],eax
+
+ mov eax, [edi+wsize_state]
+ mov ecx, [edi+write_state]
+ mov edx, [edi+window_state]
+
+ mov [esp+52],eax
+ mov [esp+48],ecx
+ mov [esp+56],edx
+
+ mov ebp, [edi+hold_state]
+ mov ebx, [edi+bits_state]
+; 321 "inffast.S"
+ mov esi, [esp+44]
+ mov ecx, [esp+20]
+ cmp ecx,esi
+ ja L_align_long
+
+ add ecx,11
+ sub ecx,esi
+ mov eax,12
+ sub eax,ecx
+ lea edi, [esp+28]
+ rep movsb
+ mov ecx,eax
+ xor eax,eax
+ rep stosb
+ lea esi, [esp+28]
+ mov [esp+20],esi
+ jmp L_is_aligned
+
+
+L_align_long:
+ test esi,3
+ jz L_is_aligned
+ xor eax,eax
+ mov al, [esi]
+ inc esi
+ mov ecx,ebx
+ add ebx,8
+ shl eax,cl
+ or ebp,eax
+ jmp L_align_long
+
+L_is_aligned:
+ mov edi, [esp+60]
+; 366 "inffast.S"
+L_check_mmx:
+ cmp dword ptr [inflate_fast_use_mmx],2
+ je L_init_mmx
+ ja L_do_loop
+
+ push eax
+ push ebx
+ push ecx
+ push edx
+ pushfd
+ mov eax, [esp]
+ xor dword ptr [esp],0200000h
+
+
+
+
+ popfd
+ pushfd
+ pop edx
+ xor edx,eax
+ jz L_dont_use_mmx
+ xor eax,eax
+ cpuid
+ cmp ebx,0756e6547h
+ jne L_dont_use_mmx
+ cmp ecx,06c65746eh
+ jne L_dont_use_mmx
+ cmp edx,049656e69h
+ jne L_dont_use_mmx
+ mov eax,1
+ cpuid
+ shr eax,8
+ and eax,15
+ cmp eax,6
+ jne L_dont_use_mmx
+ test edx,0800000h
+ jnz L_use_mmx
+ jmp L_dont_use_mmx
+L_use_mmx:
+ mov dword ptr [inflate_fast_use_mmx],2
+ jmp L_check_mmx_pop
+L_dont_use_mmx:
+ mov dword ptr [inflate_fast_use_mmx],3
+L_check_mmx_pop:
+ pop edx
+ pop ecx
+ pop ebx
+ pop eax
+ jmp L_check_mmx
+; 426 "inffast.S"
+ALIGN 4
+L_do_loop:
+; 437 "inffast.S"
+ cmp bl,15
+ ja L_get_length_code
+
+ xor eax,eax
+ lodsw
+ mov cl,bl
+ add bl,16
+ shl eax,cl
+ or ebp,eax
+
+L_get_length_code:
+ mov edx, [esp+0]
+ mov ecx, [esp+8]
+ and edx,ebp
+ mov eax, [ecx+edx*4]
+
+L_dolen:
+
+
+
+
+
+
+ mov cl,ah
+ sub bl,ah
+ shr ebp,cl
+
+
+
+
+
+
+ test al,al
+ jnz L_test_for_length_base
+
+ shr eax,16
+ stosb
+
+L_while_test:
+
+
+ cmp [esp+16],edi
+ jbe L_break_loop
+
+ cmp [esp+20],esi
+ ja L_do_loop
+ jmp L_break_loop
+
+L_test_for_length_base:
+; 502 "inffast.S"
+ mov edx,eax
+ shr edx,16
+ mov cl,al
+
+ test al,16
+ jz L_test_for_second_level_length
+ and cl,15
+ jz L_save_len
+ cmp bl,cl
+ jae L_add_bits_to_len
+
+ mov ch,cl
+ xor eax,eax
+ lodsw
+ mov cl,bl
+ add bl,16
+ shl eax,cl
+ or ebp,eax
+ mov cl,ch
+
+L_add_bits_to_len:
+ mov eax,1
+ shl eax,cl
+ dec eax
+ sub bl,cl
+ and eax,ebp
+ shr ebp,cl
+ add edx,eax
+
+L_save_len:
+ mov [esp+24],edx
+
+
+L_decode_distance:
+; 549 "inffast.S"
+ cmp bl,15
+ ja L_get_distance_code
+
+ xor eax,eax
+ lodsw
+ mov cl,bl
+ add bl,16
+ shl eax,cl
+ or ebp,eax
+
+L_get_distance_code:
+ mov edx, [esp+4]
+ mov ecx, [esp+12]
+ and edx,ebp
+ mov eax, [ecx+edx*4]
+
+
+L_dodist:
+ mov edx,eax
+ shr edx,16
+ mov cl,ah
+ sub bl,ah
+ shr ebp,cl
+; 584 "inffast.S"
+ mov cl,al
+
+ test al,16
+ jz L_test_for_second_level_dist
+ and cl,15
+ jz L_check_dist_one
+ cmp bl,cl
+ jae L_add_bits_to_dist
+
+ mov ch,cl
+ xor eax,eax
+ lodsw
+ mov cl,bl
+ add bl,16
+ shl eax,cl
+ or ebp,eax
+ mov cl,ch
+
+L_add_bits_to_dist:
+ mov eax,1
+ shl eax,cl
+ dec eax
+ sub bl,cl
+ and eax,ebp
+ shr ebp,cl
+ add edx,eax
+ jmp L_check_window
+
+L_check_window:
+; 625 "inffast.S"
+ mov [esp+44],esi
+ mov eax,edi
+ sub eax, [esp+40]
+
+ cmp eax,edx
+ jb L_clip_window
+
+ mov ecx, [esp+24]
+ mov esi,edi
+ sub esi,edx
+
+ sub ecx,3
+ mov al, [esi]
+ mov [edi],al
+ mov al, [esi+1]
+ mov dl, [esi+2]
+ add esi,3
+ mov [edi+1],al
+ mov [edi+2],dl
+ add edi,3
+ rep movsb
+
+ mov esi, [esp+44]
+ jmp L_while_test
+
+ALIGN 4
+L_check_dist_one:
+ cmp edx,1
+ jne L_check_window
+ cmp [esp+40],edi
+ je L_check_window
+
+ dec edi
+ mov ecx, [esp+24]
+ mov al, [edi]
+ sub ecx,3
+
+ mov [edi+1],al
+ mov [edi+2],al
+ mov [edi+3],al
+ add edi,4
+ rep stosb
+
+ jmp L_while_test
+
+ALIGN 4
+L_test_for_second_level_length:
+
+
+
+
+ test al,64
+ jnz L_test_for_end_of_block
+
+ mov eax,1
+ shl eax,cl
+ dec eax
+ and eax,ebp
+ add eax,edx
+ mov edx, [esp+8]
+ mov eax, [edx+eax*4]
+ jmp L_dolen
+
+ALIGN 4
+L_test_for_second_level_dist:
+
+
+
+
+ test al,64
+ jnz L_invalid_distance_code
+
+ mov eax,1
+ shl eax,cl
+ dec eax
+ and eax,ebp
+ add eax,edx
+ mov edx, [esp+12]
+ mov eax, [edx+eax*4]
+ jmp L_dodist
+
+ALIGN 4
+L_clip_window:
+; 721 "inffast.S"
+ mov ecx,eax
+ mov eax, [esp+52]
+ neg ecx
+ mov esi, [esp+56]
+
+ cmp eax,edx
+ jb L_invalid_distance_too_far
+
+ add ecx,edx
+ cmp dword ptr [esp+48],0
+ jne L_wrap_around_window
+
+ sub eax,ecx
+ add esi,eax
+; 749 "inffast.S"
+ mov eax, [esp+24]
+ cmp eax,ecx
+ jbe L_do_copy1
+
+ sub eax,ecx
+ rep movsb
+ mov esi,edi
+ sub esi,edx
+ jmp L_do_copy1
+
+ cmp eax,ecx
+ jbe L_do_copy1
+
+ sub eax,ecx
+ rep movsb
+ mov esi,edi
+ sub esi,edx
+ jmp L_do_copy1
+
+L_wrap_around_window:
+; 793 "inffast.S"
+ mov eax, [esp+48]
+ cmp ecx,eax
+ jbe L_contiguous_in_window
+
+ add esi, [esp+52]
+ add esi,eax
+ sub esi,ecx
+ sub ecx,eax
+
+
+ mov eax, [esp+24]
+ cmp eax,ecx
+ jbe L_do_copy1
+
+ sub eax,ecx
+ rep movsb
+ mov esi, [esp+56]
+ mov ecx, [esp+48]
+ cmp eax,ecx
+ jbe L_do_copy1
+
+ sub eax,ecx
+ rep movsb
+ mov esi,edi
+ sub esi,edx
+ jmp L_do_copy1
+
+L_contiguous_in_window:
+; 836 "inffast.S"
+ add esi,eax
+ sub esi,ecx
+
+
+ mov eax, [esp+24]
+ cmp eax,ecx
+ jbe L_do_copy1
+
+ sub eax,ecx
+ rep movsb
+ mov esi,edi
+ sub esi,edx
+
+L_do_copy1:
+; 862 "inffast.S"
+ mov ecx,eax
+ rep movsb
+
+ mov esi, [esp+44]
+ jmp L_while_test
+; 878 "inffast.S"
+ALIGN 4
+L_init_mmx:
+ emms
+
+
+
+
+
+ movd mm0,ebp
+ mov ebp,ebx
+; 896 "inffast.S"
+ movd mm4,dword ptr [esp+0]
+ movq mm3,mm4
+ movd mm5,dword ptr [esp+4]
+ movq mm2,mm5
+ pxor mm1,mm1
+ mov ebx, [esp+8]
+ jmp L_do_loop_mmx
+
+ALIGN 4
+L_do_loop_mmx:
+ psrlq mm0,mm1
+
+ cmp ebp,32
+ ja L_get_length_code_mmx
+
+ movd mm6,ebp
+ movd mm7,dword ptr [esi]
+ add esi,4
+ psllq mm7,mm6
+ add ebp,32
+ por mm0,mm7
+
+L_get_length_code_mmx:
+ pand mm4,mm0
+ movd eax,mm4
+ movq mm4,mm3
+ mov eax, [ebx+eax*4]
+
+L_dolen_mmx:
+ movzx ecx,ah
+ movd mm1,ecx
+ sub ebp,ecx
+
+ test al,al
+ jnz L_test_for_length_base_mmx
+
+ shr eax,16
+ stosb
+
+L_while_test_mmx:
+
+
+ cmp [esp+16],edi
+ jbe L_break_loop
+
+ cmp [esp+20],esi
+ ja L_do_loop_mmx
+ jmp L_break_loop
+
+L_test_for_length_base_mmx:
+
+ mov edx,eax
+ shr edx,16
+
+ test al,16
+ jz L_test_for_second_level_length_mmx
+ and eax,15
+ jz L_decode_distance_mmx
+
+ psrlq mm0,mm1
+ movd mm1,eax
+ movd ecx,mm0
+ sub ebp,eax
+ and ecx, [inflate_fast_mask+eax*4]
+ add edx,ecx
+
+L_decode_distance_mmx:
+ psrlq mm0,mm1
+
+ cmp ebp,32
+ ja L_get_dist_code_mmx
+
+ movd mm6,ebp
+ movd mm7,dword ptr [esi]
+ add esi,4
+ psllq mm7,mm6
+ add ebp,32
+ por mm0,mm7
+
+L_get_dist_code_mmx:
+ mov ebx, [esp+12]
+ pand mm5,mm0
+ movd eax,mm5
+ movq mm5,mm2
+ mov eax, [ebx+eax*4]
+
+L_dodist_mmx:
+
+ movzx ecx,ah
+ mov ebx,eax
+ shr ebx,16
+ sub ebp,ecx
+ movd mm1,ecx
+
+ test al,16
+ jz L_test_for_second_level_dist_mmx
+ and eax,15
+ jz L_check_dist_one_mmx
+
+L_add_bits_to_dist_mmx:
+ psrlq mm0,mm1
+ movd mm1,eax
+ movd ecx,mm0
+ sub ebp,eax
+ and ecx, [inflate_fast_mask+eax*4]
+ add ebx,ecx
+
+L_check_window_mmx:
+ mov [esp+44],esi
+ mov eax,edi
+ sub eax, [esp+40]
+
+ cmp eax,ebx
+ jb L_clip_window_mmx
+
+ mov ecx,edx
+ mov esi,edi
+ sub esi,ebx
+
+ sub ecx,3
+ mov al, [esi]
+ mov [edi],al
+ mov al, [esi+1]
+ mov dl, [esi+2]
+ add esi,3
+ mov [edi+1],al
+ mov [edi+2],dl
+ add edi,3
+ rep movsb
+
+ mov esi, [esp+44]
+ mov ebx, [esp+8]
+ jmp L_while_test_mmx
+
+ALIGN 4
+L_check_dist_one_mmx:
+ cmp ebx,1
+ jne L_check_window_mmx
+ cmp [esp+40],edi
+ je L_check_window_mmx
+
+ dec edi
+ mov ecx,edx
+ mov al, [edi]
+ sub ecx,3
+
+ mov [edi+1],al
+ mov [edi+2],al
+ mov [edi+3],al
+ add edi,4
+ rep stosb
+
+ mov ebx, [esp+8]
+ jmp L_while_test_mmx
+
+ALIGN 4
+L_test_for_second_level_length_mmx:
+ test al,64
+ jnz L_test_for_end_of_block
+
+ and eax,15
+ psrlq mm0,mm1
+ movd ecx,mm0
+ and ecx, [inflate_fast_mask+eax*4]
+ add ecx,edx
+ mov eax, [ebx+ecx*4]
+ jmp L_dolen_mmx
+
+ALIGN 4
+L_test_for_second_level_dist_mmx:
+ test al,64
+ jnz L_invalid_distance_code
+
+ and eax,15
+ psrlq mm0,mm1
+ movd ecx,mm0
+ and ecx, [inflate_fast_mask+eax*4]
+ mov eax, [esp+12]
+ add ecx,ebx
+ mov eax, [eax+ecx*4]
+ jmp L_dodist_mmx
+
+ALIGN 4
+L_clip_window_mmx:
+
+ mov ecx,eax
+ mov eax, [esp+52]
+ neg ecx
+ mov esi, [esp+56]
+
+ cmp eax,ebx
+ jb L_invalid_distance_too_far
+
+ add ecx,ebx
+ cmp dword ptr [esp+48],0
+ jne L_wrap_around_window_mmx
+
+ sub eax,ecx
+ add esi,eax
+
+ cmp edx,ecx
+ jbe L_do_copy1_mmx
+
+ sub edx,ecx
+ rep movsb
+ mov esi,edi
+ sub esi,ebx
+ jmp L_do_copy1_mmx
+
+ cmp edx,ecx
+ jbe L_do_copy1_mmx
+
+ sub edx,ecx
+ rep movsb
+ mov esi,edi
+ sub esi,ebx
+ jmp L_do_copy1_mmx
+
+L_wrap_around_window_mmx:
+
+ mov eax, [esp+48]
+ cmp ecx,eax
+ jbe L_contiguous_in_window_mmx
+
+ add esi, [esp+52]
+ add esi,eax
+ sub esi,ecx
+ sub ecx,eax
+
+
+ cmp edx,ecx
+ jbe L_do_copy1_mmx
+
+ sub edx,ecx
+ rep movsb
+ mov esi, [esp+56]
+ mov ecx, [esp+48]
+ cmp edx,ecx
+ jbe L_do_copy1_mmx
+
+ sub edx,ecx
+ rep movsb
+ mov esi,edi
+ sub esi,ebx
+ jmp L_do_copy1_mmx
+
+L_contiguous_in_window_mmx:
+
+ add esi,eax
+ sub esi,ecx
+
+
+ cmp edx,ecx
+ jbe L_do_copy1_mmx
+
+ sub edx,ecx
+ rep movsb
+ mov esi,edi
+ sub esi,ebx
+
+L_do_copy1_mmx:
+
+
+ mov ecx,edx
+ rep movsb
+
+ mov esi, [esp+44]
+ mov ebx, [esp+8]
+ jmp L_while_test_mmx
+; 1174 "inffast.S"
+L_invalid_distance_code:
+
+
+
+
+
+ mov ecx, invalid_distance_code_msg
+ mov edx,INFLATE_MODE_BAD
+ jmp L_update_stream_state
+
+L_test_for_end_of_block:
+
+
+
+
+
+ test al,32
+ jz L_invalid_literal_length_code
+
+ mov ecx,0
+ mov edx,INFLATE_MODE_TYPE
+ jmp L_update_stream_state
+
+L_invalid_literal_length_code:
+
+
+
+
+
+ mov ecx, invalid_literal_length_code_msg
+ mov edx,INFLATE_MODE_BAD
+ jmp L_update_stream_state
+
+L_invalid_distance_too_far:
+
+
+
+ mov esi, [esp+44]
+ mov ecx, invalid_distance_too_far_msg
+ mov edx,INFLATE_MODE_BAD
+ jmp L_update_stream_state
+
+L_update_stream_state:
+
+ mov eax, [esp+88]
+ test ecx,ecx
+ jz L_skip_msg
+ mov [eax+24],ecx
+L_skip_msg:
+ mov eax, [eax+28]
+ mov [eax+mode_state],edx
+ jmp L_break_loop
+
+ALIGN 4
+L_break_loop:
+; 1243 "inffast.S"
+ cmp dword ptr [inflate_fast_use_mmx],2
+ jne L_update_next_in
+
+
+
+ mov ebx,ebp
+
+L_update_next_in:
+; 1266 "inffast.S"
+ mov eax, [esp+88]
+ mov ecx,ebx
+ mov edx, [eax+28]
+ shr ecx,3
+ sub esi,ecx
+ shl ecx,3
+ sub ebx,ecx
+ mov [eax+12],edi
+ mov [edx+bits_state],ebx
+ mov ecx,ebx
+
+ lea ebx, [esp+28]
+ cmp [esp+20],ebx
+ jne L_buf_not_used
+
+ sub esi,ebx
+ mov ebx, [eax+0]
+ mov [esp+20],ebx
+ add esi,ebx
+ mov ebx, [eax+4]
+ sub ebx,11
+ add [esp+20],ebx
+
+L_buf_not_used:
+ mov [eax+0],esi
+
+ mov ebx,1
+ shl ebx,cl
+ dec ebx
+
+
+
+
+
+ cmp dword ptr [inflate_fast_use_mmx],2
+ jne L_update_hold
+
+
+
+ psrlq mm0,mm1
+ movd ebp,mm0
+
+ emms
+
+L_update_hold:
+
+
+
+ and ebp,ebx
+ mov [edx+hold_state],ebp
+
+
+
+
+ mov ebx, [esp+20]
+ cmp ebx,esi
+ jbe L_last_is_smaller
+
+ sub ebx,esi
+ add ebx,11
+ mov [eax+4],ebx
+ jmp L_fixup_out
+L_last_is_smaller:
+ sub esi,ebx
+ neg esi
+ add esi,11
+ mov [eax+4],esi
+
+
+
+
+L_fixup_out:
+
+ mov ebx, [esp+16]
+ cmp ebx,edi
+ jbe L_end_is_smaller
+
+ sub ebx,edi
+ add ebx,257
+ mov [eax+16],ebx
+ jmp L_done
+L_end_is_smaller:
+ sub edi,ebx
+ neg edi
+ add edi,257
+ mov [eax+16],edi
+
+
+
+
+
+L_done:
+ add esp,64
+ popfd
+ pop ebx
+ pop ebp
+ pop esi
+ pop edi
+ ret
+_inflate_fast endp
+
+_TEXT ends
+end
diff --git a/protocols/Telegram/tgl/zlib/contrib/masmx86/match686.asm b/protocols/Telegram/tgl/zlib/contrib/masmx86/match686.asm
new file mode 100644
index 0000000000..3b09212f8a
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/masmx86/match686.asm
@@ -0,0 +1,479 @@
+; match686.asm -- Asm portion of the optimized longest_match for 32 bits x86
+; Copyright (C) 1995-1996 Jean-loup Gailly, Brian Raiter and Gilles Vollant.
+; File written by Gilles Vollant, by converting match686.S from Brian Raiter
+; for MASM. This is as assembly version of longest_match
+; from Jean-loup Gailly in deflate.c
+;
+; http://www.zlib.net
+; http://www.winimage.com/zLibDll
+; http://www.muppetlabs.com/~breadbox/software/assembly.html
+;
+; For Visual C++ 4.x and higher and ML 6.x and higher
+; ml.exe is distributed in
+; http://www.microsoft.com/downloads/details.aspx?FamilyID=7a1c9da0-0510-44a2-b042-7ef370530c64
+;
+; this file contain two implementation of longest_match
+;
+; this longest_match was written by Brian raiter (1998), optimized for Pentium Pro
+; (and the faster known version of match_init on modern Core 2 Duo and AMD Phenom)
+;
+; for using an assembly version of longest_match, you need define ASMV in project
+;
+; compile the asm file running
+; ml /coff /Zi /c /Flmatch686.lst match686.asm
+; and do not include match686.obj in your project
+;
+; note: contrib of zLib 1.2.3 and earlier contained both a deprecated version for
+; Pentium (prior Pentium Pro) and this version for Pentium Pro and modern processor
+; with autoselect (with cpu detection code)
+; if you want support the old pentium optimization, you can still use these version
+;
+; this file is not optimized for old pentium, but it compatible with all x86 32 bits
+; processor (starting 80386)
+;
+;
+; see below : zlib1222add must be adjuster if you use a zlib version < 1.2.2.2
+
+;uInt longest_match(s, cur_match)
+; deflate_state *s;
+; IPos cur_match; /* current match */
+
+ NbStack equ 76
+ cur_match equ dword ptr[esp+NbStack-0]
+ str_s equ dword ptr[esp+NbStack-4]
+; 5 dword on top (ret,ebp,esi,edi,ebx)
+ adrret equ dword ptr[esp+NbStack-8]
+ pushebp equ dword ptr[esp+NbStack-12]
+ pushedi equ dword ptr[esp+NbStack-16]
+ pushesi equ dword ptr[esp+NbStack-20]
+ pushebx equ dword ptr[esp+NbStack-24]
+
+ chain_length equ dword ptr [esp+NbStack-28]
+ limit equ dword ptr [esp+NbStack-32]
+ best_len equ dword ptr [esp+NbStack-36]
+ window equ dword ptr [esp+NbStack-40]
+ prev equ dword ptr [esp+NbStack-44]
+ scan_start equ word ptr [esp+NbStack-48]
+ wmask equ dword ptr [esp+NbStack-52]
+ match_start_ptr equ dword ptr [esp+NbStack-56]
+ nice_match equ dword ptr [esp+NbStack-60]
+ scan equ dword ptr [esp+NbStack-64]
+
+ windowlen equ dword ptr [esp+NbStack-68]
+ match_start equ dword ptr [esp+NbStack-72]
+ strend equ dword ptr [esp+NbStack-76]
+ NbStackAdd equ (NbStack-24)
+
+ .386p
+
+ name gvmatch
+ .MODEL FLAT
+
+
+
+; 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").
+
+ zlib1222add equ 8
+
+; Note : these value are good with a 8 bytes boundary pack structure
+ dep_chain_length equ 74h+zlib1222add
+ dep_window equ 30h+zlib1222add
+ dep_strstart equ 64h+zlib1222add
+ dep_prev_length equ 70h+zlib1222add
+ dep_nice_match equ 88h+zlib1222add
+ dep_w_size equ 24h+zlib1222add
+ dep_prev equ 38h+zlib1222add
+ dep_w_mask equ 2ch+zlib1222add
+ dep_good_match equ 84h+zlib1222add
+ dep_match_start equ 68h+zlib1222add
+ dep_lookahead equ 6ch+zlib1222add
+
+
+_TEXT segment
+
+IFDEF NOUNDERLINE
+ public longest_match
+ public match_init
+ELSE
+ public _longest_match
+ public _match_init
+ENDIF
+
+ MAX_MATCH equ 258
+ MIN_MATCH equ 3
+ MIN_LOOKAHEAD equ (MAX_MATCH+MIN_MATCH+1)
+
+
+
+MAX_MATCH equ 258
+MIN_MATCH equ 3
+MIN_LOOKAHEAD equ (MAX_MATCH + MIN_MATCH + 1)
+MAX_MATCH_8_ equ ((MAX_MATCH + 7) AND 0FFF0h)
+
+
+;;; stack frame offsets
+
+chainlenwmask equ esp + 0 ; high word: current chain len
+ ; low word: s->wmask
+window equ esp + 4 ; local copy of s->window
+windowbestlen equ esp + 8 ; s->window + bestlen
+scanstart equ esp + 16 ; first two bytes of string
+scanend equ esp + 12 ; last two bytes of string
+scanalign equ esp + 20 ; dword-misalignment of string
+nicematch equ esp + 24 ; a good enough match size
+bestlen equ esp + 28 ; size of best match so far
+scan equ esp + 32 ; ptr to string wanting match
+
+LocalVarsSize equ 36
+; saved ebx byte esp + 36
+; saved edi byte esp + 40
+; saved esi byte esp + 44
+; saved ebp byte esp + 48
+; return address byte esp + 52
+deflatestate equ esp + 56 ; the function arguments
+curmatch equ esp + 60
+
+;;; 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.)
+
+dsWSize equ 36+zlib1222add
+dsWMask equ 44+zlib1222add
+dsWindow equ 48+zlib1222add
+dsPrev equ 56+zlib1222add
+dsMatchLen equ 88+zlib1222add
+dsPrevMatch equ 92+zlib1222add
+dsStrStart equ 100+zlib1222add
+dsMatchStart equ 104+zlib1222add
+dsLookahead equ 108+zlib1222add
+dsPrevLen equ 112+zlib1222add
+dsMaxChainLen equ 116+zlib1222add
+dsGoodMatch equ 132+zlib1222add
+dsNiceMatch equ 136+zlib1222add
+
+
+;;; match686.asm -- Pentium-Pro-optimized version of longest_match()
+;;; Written for zlib 1.1.2
+;;; Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com>
+;;; You can look at http://www.muppetlabs.com/~breadbox/software/assembly.html
+;;;
+;;
+;; 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.
+;;
+
+;GLOBAL _longest_match, _match_init
+
+
+;SECTION .text
+
+;;; uInt longest_match(deflate_state *deflatestate, IPos curmatch)
+
+;_longest_match:
+ IFDEF NOUNDERLINE
+ longest_match proc near
+ ELSE
+ _longest_match proc near
+ ENDIF
+.FPO (9, 4, 0, 0, 1, 0)
+
+;;; Save registers that the compiler may be using, and adjust esp to
+;;; make room for our stack frame.
+
+ push ebp
+ push edi
+ push esi
+ push ebx
+ sub esp, LocalVarsSize
+
+;;; Retrieve the function arguments. ecx 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.
+
+ mov edx, [deflatestate]
+ mov ecx, [curmatch]
+
+;;; uInt wmask = s->w_mask;
+;;; unsigned chain_length = s->max_chain_length;
+;;; if (s->prev_length >= s->good_match) {
+;;; chain_length >>= 2;
+;;; }
+
+ mov eax, [edx + dsPrevLen]
+ mov ebx, [edx + dsGoodMatch]
+ cmp eax, ebx
+ mov eax, [edx + dsWMask]
+ mov ebx, [edx + dsMaxChainLen]
+ 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
+ mov [chainlenwmask], ebx
+
+;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+
+ mov eax, [edx + dsNiceMatch]
+ mov ebx, [edx + dsLookahead]
+ cmp ebx, eax
+ jl LookaheadLess
+ mov ebx, eax
+LookaheadLess: mov [nicematch], ebx
+
+;;; register Bytef *scan = s->window + s->strstart;
+
+ mov esi, [edx + dsWindow]
+ mov [window], esi
+ mov ebp, [edx + dsStrStart]
+ lea edi, [esi + ebp]
+ mov [scan], edi
+
+;;; Determine how many bytes the scan ptr is off from being
+;;; dword-aligned.
+
+ mov eax, edi
+ neg eax
+ and eax, 3
+ mov [scanalign], eax
+
+;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
+;;; s->strstart - (IPos)MAX_DIST(s) : NIL;
+
+ mov eax, [edx + dsWSize]
+ sub eax, MIN_LOOKAHEAD
+ sub ebp, eax
+ jg LimitPositive
+ xor ebp, ebp
+LimitPositive:
+
+;;; int best_len = s->prev_length;
+
+ mov eax, [edx + dsPrevLen]
+ mov [bestlen], eax
+
+;;; Store the sum of s->window + best_len in esi locally, and in esi.
+
+ add esi, eax
+ mov [windowbestlen], esi
+
+;;; register ush scan_start = *(ushf*)scan;
+;;; register ush scan_end = *(ushf*)(scan+best_len-1);
+;;; Posf *prev = s->prev;
+
+ movzx ebx, word ptr [edi]
+ mov [scanstart], ebx
+ movzx ebx, word ptr [edi + eax - 1]
+ mov [scanend], ebx
+ mov edi, [edx + dsPrev]
+
+;;; Jump into the main loop.
+
+ mov edx, [chainlenwmask]
+ jmp short LoopEntry
+
+align 4
+
+;;; 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
+;;; ecx = curmatch
+;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)
+;;; esi = windowbestlen - i.e., (window + bestlen)
+;;; edi = prev
+;;; ebp = limit
+
+LookupLoop:
+ and ecx, edx
+ movzx ecx, word ptr [edi + ecx*2]
+ cmp ecx, ebp
+ jbe LeaveNow
+ sub edx, 00010000h
+ js LeaveNow
+LoopEntry: movzx eax, word ptr [esi + ecx - 1]
+ cmp eax, ebx
+ jnz LookupLoop
+ mov eax, [window]
+ movzx eax, word ptr [eax + ecx]
+ cmp eax, [scanstart]
+ jnz LookupLoop
+
+;;; 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).
+
+ mov esi, [window]
+ mov edi, [scan]
+ add esi, ecx
+ mov eax, [scanalign]
+ mov edx, 0fffffef8h; -(MAX_MATCH_8)
+ lea edi, [edi + eax + 0108h] ;MAX_MATCH_8]
+ lea esi, [esi + eax + 0108h] ;MAX_MATCH_8]
+
+;;; Test the strings for equality, 8 bytes at a time. At the end,
+;;; adjust edx 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. (esi 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 eax, [esi + edx]
+ xor eax, [edi + edx]
+ jnz LeaveLoopCmps
+ mov eax, [esi + edx + 4]
+ xor eax, [edi + edx + 4]
+ jnz LeaveLoopCmps4
+ add edx, 8
+ jnz LoopCmps
+ jmp short LenMaximum
+LeaveLoopCmps4: add edx, 4
+LeaveLoopCmps: test eax, 0000FFFFh
+ jnz LenLower
+ add edx, 2
+ shr eax, 16
+LenLower: sub al, 1
+ adc edx, 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 eax, [edi + edx]
+ mov edi, [scan]
+ sub eax, edi
+ cmp eax, MAX_MATCH
+ jge LenMaximum
+
+;;; 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.
+
+ mov edx, [deflatestate]
+ mov ebx, [bestlen]
+ cmp eax, ebx
+ jg LongerMatch
+ mov esi, [windowbestlen]
+ mov edi, [edx + dsPrev]
+ mov ebx, [scanend]
+ mov edx, [chainlenwmask]
+ jmp LookupLoop
+
+;;; s->match_start = cur_match;
+;;; best_len = len;
+;;; if (len >= nice_match) break;
+;;; scan_end = *(ushf*)(scan+best_len-1);
+
+LongerMatch: mov ebx, [nicematch]
+ mov [bestlen], eax
+ mov [edx + dsMatchStart], ecx
+ cmp eax, ebx
+ jge LeaveNow
+ mov esi, [window]
+ add esi, eax
+ mov [windowbestlen], esi
+ movzx ebx, word ptr [edi + eax - 1]
+ mov edi, [edx + dsPrev]
+ mov [scanend], ebx
+ mov edx, [chainlenwmask]
+ jmp LookupLoop
+
+;;; Accept the current string, with the maximum possible length.
+
+LenMaximum: mov edx, [deflatestate]
+ mov dword ptr [bestlen], MAX_MATCH
+ mov [edx + dsMatchStart], ecx
+
+;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
+;;; return s->lookahead;
+
+LeaveNow:
+ mov edx, [deflatestate]
+ mov ebx, [bestlen]
+ mov eax, [edx + dsLookahead]
+ cmp ebx, eax
+ jg LookaheadRet
+ mov eax, ebx
+LookaheadRet:
+
+;;; Restore the stack and return from whence we came.
+
+ add esp, LocalVarsSize
+ pop ebx
+ pop esi
+ pop edi
+ pop ebp
+
+ ret
+; please don't remove this string !
+; Your can freely use match686 in any free or commercial app if you don't remove the string in the binary!
+ db 0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998",0dh,0ah
+
+
+ IFDEF NOUNDERLINE
+ longest_match endp
+ ELSE
+ _longest_match endp
+ ENDIF
+
+ IFDEF NOUNDERLINE
+ match_init proc near
+ ret
+ match_init endp
+ ELSE
+ _match_init proc near
+ ret
+ _match_init endp
+ ENDIF
+
+
+_TEXT ends
+end
diff --git a/protocols/Telegram/tgl/zlib/contrib/masmx86/readme.txt b/protocols/Telegram/tgl/zlib/contrib/masmx86/readme.txt
new file mode 100644
index 0000000000..3271f720a1
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/masmx86/readme.txt
@@ -0,0 +1,27 @@
+
+Summary
+-------
+This directory contains ASM implementations of the functions
+longest_match() and inflate_fast().
+
+
+Use instructions
+----------------
+Assemble using MASM, and copy the object files into the zlib source
+directory, then run the appropriate makefile, as suggested below. You can
+donwload MASM from here:
+
+ http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=7a1c9da0-0510-44a2-b042-7ef370530c64
+
+You can also get objects files here:
+
+ http://www.winimage.com/zLibDll/zlib124_masm_obj.zip
+
+Build instructions
+------------------
+* With Microsoft C and MASM:
+nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" OBJA="match686.obj inffas32.obj"
+
+* With Borland C and TASM:
+make -f win32/Makefile.bor LOCAL_ZLIB="-DASMV -DASMINF" OBJA="match686.obj inffas32.obj" OBJPA="+match686c.obj+match686.obj+inffas32.obj"
+
diff --git a/protocols/Telegram/tgl/zlib/contrib/minizip/Makefile b/protocols/Telegram/tgl/zlib/contrib/minizip/Makefile
new file mode 100644
index 0000000000..84eaad20d4
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/minizip/Makefile
@@ -0,0 +1,25 @@
+CC=cc
+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
+ ./minizip test readme.txt
+ ./miniunz -l test.zip
+ mv readme.txt readme.old
+ ./miniunz test.zip
+
+clean:
+ /bin/rm -f *.o *~ minizip miniunz
diff --git a/protocols/Telegram/tgl/zlib/contrib/minizip/Makefile.am b/protocols/Telegram/tgl/zlib/contrib/minizip/Makefile.am
new file mode 100644
index 0000000000..d343011ebc
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/minizip/MiniZip64_Changes.txt b/protocols/Telegram/tgl/zlib/contrib/minizip/MiniZip64_Changes.txt
new file mode 100644
index 0000000000..13a1bd91a9
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/minizip/MiniZip64_Changes.txt
@@ -0,0 +1,6 @@
+
+MiniZip 1.1 was derrived from MiniZip at version 1.01f
+
+Change in 1.0 (Okt 2009)
+ - **TODO - Add history**
+
diff --git a/protocols/Telegram/tgl/zlib/contrib/minizip/MiniZip64_info.txt b/protocols/Telegram/tgl/zlib/contrib/minizip/MiniZip64_info.txt
new file mode 100644
index 0000000000..57d7152420
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/minizip/configure.ac b/protocols/Telegram/tgl/zlib/contrib/minizip/configure.ac
new file mode 100644
index 0000000000..827a4e0577
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/minizip/configure.ac
@@ -0,0 +1,32 @@
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_INIT([minizip], [1.2.8], [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/protocols/Telegram/tgl/zlib/contrib/minizip/crypt.h b/protocols/Telegram/tgl/zlib/contrib/minizip/crypt.h
new file mode 100644
index 0000000000..1e9e8200b2
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/minizip/crypt.h
@@ -0,0 +1,131 @@
+/* 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 */
+
+ 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), 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 int 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)
+{
+ int 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<RAND_HEAD_LEN)
+ return 0;
+
+ /* First generate RAND_HEAD_LEN-2 random bytes. We encrypt the
+ * output of rand() to get less predictability, since rand() is
+ * often poorly implemented.
+ */
+ if (++calls == 1)
+ {
+ srand((unsigned)(time(NULL) ^ ZCR_SEED2));
+ }
+ init_keys(passwd, pkeys, pcrc_32_tab);
+ for (n = 0; n < RAND_HEAD_LEN-2; n++)
+ {
+ c = (rand() >> 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/protocols/Telegram/tgl/zlib/contrib/minizip/ioapi.c b/protocols/Telegram/tgl/zlib/contrib/minizip/ioapi.c
new file mode 100644
index 0000000000..7f5c191b2a
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/minizip/ioapi.c
@@ -0,0 +1,247 @@
+/* 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)
+// 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 = (*(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.zerror_file = p_filefunc32->zerror_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 OF((voidpf opaque, const char* filename, int mode));
+static uLong ZCALLBACK fread_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size));
+static uLong ZCALLBACK fwrite_file_func OF((voidpf opaque, voidpf stream, const void* buf,uLong size));
+static ZPOS64_T ZCALLBACK ftell64_file_func OF((voidpf opaque, voidpf stream));
+static long ZCALLBACK fseek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
+static int ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream));
+static int ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream));
+
+static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode)
+{
+ FILE* file = NULL;
+ const char* mode_fopen = NULL;
+ 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;
+ 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;
+ 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;
+ ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream);
+ return ret;
+}
+
+static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream)
+{
+ long ret;
+ ret = ftell((FILE *)stream);
+ return ret;
+}
+
+
+static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream)
+{
+ ZPOS64_T ret;
+ ret = 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;
+ 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, 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;
+ 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, offset, fseek_origin) != 0)
+ ret = -1;
+
+ return ret;
+}
+
+
+static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream)
+{
+ int ret;
+ ret = fclose((FILE *)stream);
+ return ret;
+}
+
+static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream)
+{
+ int ret;
+ ret = ferror((FILE *)stream);
+ return ret;
+}
+
+void fill_fopen_filefunc (pzlib_filefunc_def)
+ 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/protocols/Telegram/tgl/zlib/contrib/minizip/ioapi.h b/protocols/Telegram/tgl/zlib/contrib/minizip/ioapi.h
new file mode 100644
index 0000000000..8dcbdb06e3
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/minizip/ioapi.h
@@ -0,0 +1,208 @@
+/* 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 <stdio.h>
+#include <stdlib.h>
+#include "zlib.h"
+
+#if defined(USE_FILE32API)
+#define fopen64 fopen
+#define ftello64 ftell
+#define fseeko64 fseek
+#else
+#ifdef __FreeBSD__
+#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 <stdint.h>
+ #define ZPOS64_T uint64_t
+ #endif
+#endif
+*/
+
+#ifdef HAVE_MINIZIP64_CONF_H
+#include "mz64conf.h"
+#endif
+
+/* a type choosen 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
+
+/* Maximum unsigned 32-bit value used as placeholder for zip64 */
+#define MAXU32 0xffffffff
+
+#if defined(_MSC_VER) || defined(__BORLANDC__)
+typedef unsigned __int64 ZPOS64_T;
+#else
+typedef unsigned long long int ZPOS64_T;
+#endif
+#endif
+#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) OF((voidpf opaque, const char* filename, int mode));
+typedef uLong (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size));
+typedef uLong (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
+typedef int (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream));
+typedef int (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream));
+
+typedef long (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream));
+typedef long (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin));
+
+
+/* here is the "old" 32 bits structure 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) OF((voidpf opaque, voidpf stream));
+typedef long (ZCALLBACK *seek64_file_func) OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
+typedef voidpf (ZCALLBACK *open64_file_func) OF((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 OF((zlib_filefunc64_def* pzlib_filefunc_def));
+void fill_fopen_filefunc OF((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 OF((const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode));
+long call_zseek64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin));
+ZPOS64_T call_ztell64 OF((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/protocols/Telegram/tgl/zlib/contrib/minizip/iowin32.c b/protocols/Telegram/tgl/zlib/contrib/minizip/iowin32.c
new file mode 100644
index 0000000000..a46d96c7fd
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/minizip/iowin32.c
@@ -0,0 +1,461 @@
+/* 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 <stdlib.h>
+
+#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
+
+
+#if defined(WINAPI_FAMILY_PARTITION) && (!(defined(IOWIN32_USING_WINRT_API)))
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
+#define IOWIN32_USING_WINRT_API 1
+#endif
+#endif
+
+voidpf ZCALLBACK win32_open_file_func OF((voidpf opaque, const char* filename, int mode));
+uLong ZCALLBACK win32_read_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size));
+uLong ZCALLBACK win32_write_file_func OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
+ZPOS64_T ZCALLBACK win32_tell64_file_func OF((voidpf opaque, voidpf stream));
+long ZCALLBACK win32_seek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
+int ZCALLBACK win32_close_file_func OF((voidpf opaque, voidpf stream));
+int ZCALLBACK win32_error_file_func OF((voidpf opaque, voidpf stream));
+
+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, FILE_CURRENT);
+ 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, FILE_CURRENT))
+ {
+ 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/protocols/Telegram/tgl/zlib/contrib/minizip/iowin32.h b/protocols/Telegram/tgl/zlib/contrib/minizip/iowin32.h
new file mode 100644
index 0000000000..0ca0969a7d
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 <windows.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
+void fill_win32_filefunc64 OF((zlib_filefunc64_def* pzlib_filefunc_def));
+void fill_win32_filefunc64A OF((zlib_filefunc64_def* pzlib_filefunc_def));
+void fill_win32_filefunc64W OF((zlib_filefunc64_def* pzlib_filefunc_def));
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/protocols/Telegram/tgl/zlib/contrib/minizip/make_vms.com b/protocols/Telegram/tgl/zlib/contrib/minizip/make_vms.com
new file mode 100644
index 0000000000..9ac13a98fa
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/minizip/miniunz.c b/protocols/Telegram/tgl/zlib/contrib/minizip/miniunz.c
new file mode 100644
index 0000000000..3d65401be5
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/minizip/miniunz.c
@@ -0,0 +1,660 @@
+/*
+ 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
+
+#ifdef __APPLE__
+// 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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <errno.h>
+#include <fcntl.h>
+
+#ifdef _WIN32
+# include <direct.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <utime.h>
+#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 */
+void change_file_date(filename,dosdate,tmu_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
+#ifdef unix || __APPLE__
+ 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);
+#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 */
+
+int mymkdir(dirname)
+ const char* dirname;
+{
+ int ret=0;
+#ifdef _WIN32
+ ret = _mkdir(dirname);
+#elif unix
+ ret = mkdir (dirname,0775);
+#elif __APPLE__
+ ret = mkdir (dirname,0775);
+#endif
+ return ret;
+}
+
+int makedir (newdir)
+ char *newdir;
+{
+ char *buffer ;
+ char *p;
+ int len = (int)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;
+}
+
+void do_banner()
+{
+ printf("MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant\n");
+ printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n");
+}
+
+void do_help()
+{
+ 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 crypted file using password\n\n");
+}
+
+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]);
+}
+
+int do_list(uf)
+ 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;i<gi.number_entry;i++)
+ {
+ char filename_inzip[256];
+ unz_file_info64 file_info;
+ uLong ratio=0;
+ const char *string_method;
+ char charCrypt=' ';
+ err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
+ if (err!=UNZ_OK)
+ {
+ printf("error %d with zipfile in unzGetCurrentFileInfo\n",err);
+ break;
+ }
+ if (file_info.uncompressed_size>0)
+ ratio = (uLong)((file_info.compressed_size*100)/file_info.uncompressed_size);
+
+ /* display a '*' if the file is crypted */
+ 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)<gi.number_entry)
+ {
+ err = unzGoToNextFile(uf);
+ if (err!=UNZ_OK)
+ {
+ printf("error %d with zipfile in unzGoToNextFile\n",err);
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
+
+int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
+ unzFile uf;
+ const int* popt_extract_without_path;
+ int* popt_overwrite;
+ const char* password;
+{
+ char filename_inzip[256];
+ char* filename_withoutpath;
+ char* p;
+ int err=UNZ_OK;
+ FILE *fout=NULL;
+ void* buf;
+ uInt size_buf;
+
+ unz_file_info64 file_info;
+ uLong ratio=0;
+ err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
+
+ if (err!=UNZ_OK)
+ {
+ printf("error %d with zipfile in unzGetCurrentFileInfo\n",err);
+ return err;
+ }
+
+ size_buf = WRITEBUFFERSIZE;
+ buf = (void*)malloc(size_buf);
+ if (buf==NULL)
+ {
+ printf("Error allocating memory\n");
+ return UNZ_INTERNALERROR;
+ }
+
+ p = filename_withoutpath = filename_inzip;
+ while ((*p) != '\0')
+ {
+ if (((*p)=='/') || ((*p)=='\\'))
+ filename_withoutpath = p+1;
+ p++;
+ }
+
+ if ((*filename_withoutpath)=='\0')
+ {
+ if ((*popt_extract_without_path)==0)
+ {
+ printf("creating directory: %s\n",filename_inzip);
+ mymkdir(filename_inzip);
+ }
+ }
+ else
+ {
+ const char* write_filename;
+ int skip=0;
+
+ if ((*popt_extract_without_path)==0)
+ write_filename = filename_inzip;
+ else
+ write_filename = filename_withoutpath;
+
+ err = unzOpenCurrentFilePassword(uf,password);
+ if (err!=UNZ_OK)
+ {
+ printf("error %d with zipfile in unzOpenCurrentFilePassword\n",err);
+ }
+
+ if (((*popt_overwrite)==0) && (err==UNZ_OK))
+ {
+ char rep=0;
+ FILE* ftestexist;
+ ftestexist = FOPEN_FUNC(write_filename,"rb");
+ if (ftestexist!=NULL)
+ {
+ fclose(ftestexist);
+ do
+ {
+ char answer[128];
+ int ret;
+
+ printf("The file %s exists. Overwrite ? [y]es, [n]o, [A]ll: ",write_filename);
+ ret = scanf("%1s",answer);
+ if (ret != 1)
+ {
+ exit(EXIT_FAILURE);
+ }
+ rep = answer[0] ;
+ if ((rep>='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,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;
+}
+
+
+int do_extract(uf,opt_extract_without_path,opt_overwrite,password)
+ unzFile uf;
+ int opt_extract_without_path;
+ int opt_overwrite;
+ const char* password;
+{
+ uLong i;
+ unz_global_info64 gi;
+ int err;
+ FILE* fout=NULL;
+
+ err = unzGetGlobalInfo64(uf,&gi);
+ if (err!=UNZ_OK)
+ printf("error %d with zipfile in unzGetGlobalInfo \n",err);
+
+ for (i=0;i<gi.number_entry;i++)
+ {
+ if (do_extract_currentfile(uf,&opt_extract_without_path,
+ &opt_overwrite,
+ password) != UNZ_OK)
+ break;
+
+ if ((i+1)<gi.number_entry)
+ {
+ err = unzGoToNextFile(uf);
+ if (err!=UNZ_OK)
+ {
+ printf("error %d with zipfile in unzGoToNextFile\n",err);
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
+int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password)
+ unzFile uf;
+ const char* filename;
+ int opt_extract_without_path;
+ int opt_overwrite;
+ const char* password;
+{
+ int err = UNZ_OK;
+ if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK)
+ {
+ printf("file %s not found in the zipfile\n",filename);
+ return 2;
+ }
+
+ if (do_extract_currentfile(uf,&opt_extract_without_path,
+ &opt_overwrite,
+ password) == UNZ_OK)
+ return 0;
+ else
+ return 1;
+}
+
+
+int main(argc,argv)
+ int argc;
+ char *argv[];
+{
+ const char *zipfilename=NULL;
+ const char *filename_to_extract=NULL;
+ const char *password=NULL;
+ char filename_try[MAXFILENAME+16] = "";
+ int i;
+ int ret_value=0;
+ int opt_do_list=0;
+ int opt_do_extract=1;
+ int opt_do_extract_withoutpath=0;
+ int opt_overwrite=0;
+ int opt_extractdir=0;
+ const char *dirname=NULL;
+ unzFile uf=NULL;
+
+ do_banner();
+ if (argc==1)
+ {
+ do_help();
+ return 0;
+ }
+ else
+ {
+ for (i=1;i<argc;i++)
+ {
+ if ((*argv[i])=='-')
+ {
+ const char *p=argv[i]+1;
+
+ while ((*p)!='\0')
+ {
+ char c=*(p++);;
+ if ((c=='l') || (c=='L'))
+ opt_do_list = 1;
+ if ((c=='v') || (c=='V'))
+ opt_do_list = 1;
+ if ((c=='x') || (c=='X'))
+ opt_do_extract = 1;
+ if ((c=='e') || (c=='E'))
+ opt_do_extract = opt_do_extract_withoutpath = 1;
+ if ((c=='o') || (c=='O'))
+ opt_overwrite=1;
+ if ((c=='d') || (c=='D'))
+ {
+ opt_extractdir=1;
+ dirname=argv[i+1];
+ }
+
+ if (((c=='p') || (c=='P')) && (i+1<argc))
+ {
+ password=argv[i+1];
+ i++;
+ }
+ }
+ }
+ else
+ {
+ if (zipfilename == NULL)
+ zipfilename = argv[i];
+ else if ((filename_to_extract==NULL) && (!opt_extractdir))
+ filename_to_extract = argv[i] ;
+ }
+ }
+ }
+
+ if (zipfilename!=NULL)
+ {
+
+# ifdef USEWIN32IOAPI
+ zlib_filefunc64_def ffunc;
+# endif
+
+ strncpy(filename_try, zipfilename,MAXFILENAME-1);
+ /* strncpy doesnt append the trailing NULL, of the string is too long. */
+ filename_try[ MAXFILENAME ] = '\0';
+
+# ifdef USEWIN32IOAPI
+ fill_win32_filefunc64A(&ffunc);
+ uf = unzOpen2_64(zipfilename,&ffunc);
+# else
+ uf = unzOpen64(zipfilename);
+# endif
+ if (uf==NULL)
+ {
+ strcat(filename_try,".zip");
+# ifdef USEWIN32IOAPI
+ uf = unzOpen2_64(filename_try,&ffunc);
+# else
+ uf = unzOpen64(filename_try);
+# endif
+ }
+ }
+
+ if (uf==NULL)
+ {
+ printf("Cannot open %s or %s.zip\n",zipfilename,zipfilename);
+ return 1;
+ }
+ printf("%s opened\n",filename_try);
+
+ if (opt_do_list==1)
+ ret_value = do_list(uf);
+ else if (opt_do_extract==1)
+ {
+#ifdef _WIN32
+ if (opt_extractdir && _chdir(dirname))
+#else
+ if (opt_extractdir && chdir(dirname))
+#endif
+ {
+ printf("Error changing into %s, aborting\n", dirname);
+ exit(-1);
+ }
+
+ if (filename_to_extract == NULL)
+ ret_value = do_extract(uf, opt_do_extract_withoutpath, opt_overwrite, password);
+ else
+ ret_value = do_extract_onefile(uf, filename_to_extract, opt_do_extract_withoutpath, opt_overwrite, password);
+ }
+
+ unzClose(uf);
+
+ return ret_value;
+}
diff --git a/protocols/Telegram/tgl/zlib/contrib/minizip/miniunzip.1 b/protocols/Telegram/tgl/zlib/contrib/minizip/miniunzip.1
new file mode 100644
index 0000000000..111ac69190
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/minizip/miniunzip.1
@@ -0,0 +1,63 @@
+.\" Hey, EMACS: -*- nroff -*-
+.TH miniunzip 1 "Nov 7, 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 <n> 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 <broonie@sirena.org.uk>. The -d tempdir option
+was added by Dirk Eddelbuettel <edd@debian.org>.
diff --git a/protocols/Telegram/tgl/zlib/contrib/minizip/minizip.1 b/protocols/Telegram/tgl/zlib/contrib/minizip/minizip.1
new file mode 100644
index 0000000000..1154484c1c
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 <n> 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 <broonie@sirena.org.uk>.
+
diff --git a/protocols/Telegram/tgl/zlib/contrib/minizip/minizip.c b/protocols/Telegram/tgl/zlib/contrib/minizip/minizip.c
new file mode 100644
index 0000000000..4288962ece
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/minizip/minizip.c
@@ -0,0 +1,520 @@
+/*
+ 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
+
+#ifdef __APPLE__
+// 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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <errno.h>
+#include <fcntl.h>
+
+#ifdef _WIN32
+# include <direct.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <utime.h>
+# include <sys/types.h>
+# include <sys/stat.h>
+#endif
+
+#include "zip.h"
+
+#ifdef _WIN32
+ #define USEWIN32IOAPI
+ #include "iowin32.h"
+#endif
+
+
+
+#define WRITEBUFFERSIZE (16384)
+#define MAXFILENAME (256)
+
+#ifdef _WIN32
+uLong filetime(f, tmzip, dt)
+ char *f; /* name of file to get info on */
+ tm_zip *tmzip; /* return value: access, modific. and creation times */
+ uLong *dt; /* dostime */
+{
+ 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
+#ifdef unix || __APPLE__
+uLong filetime(f, tmzip, dt)
+ char *f; /* name of file to get info on */
+ tm_zip *tmzip; /* return value: access, modific. and creation times */
+ uLong *dt; /* dostime */
+{
+ 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];
+ int len = strlen(f);
+ if (len > MAXFILENAME)
+ len = MAXFILENAME;
+
+ strncpy(name, f,MAXFILENAME-1);
+ /* strncpy doesnt 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
+uLong filetime(f, tmzip, dt)
+ char *f; /* name of file to get info on */
+ tm_zip *tmzip; /* return value: access, modific. and creation times */
+ uLong *dt; /* dostime */
+{
+ return 0;
+}
+#endif
+#endif
+
+
+
+
+int check_exist_file(filename)
+ const char* filename;
+{
+ FILE* ftestexist;
+ int ret = 1;
+ ftestexist = FOPEN_FUNC(filename,"rb");
+ if (ftestexist==NULL)
+ ret = 0;
+ else
+ fclose(ftestexist);
+ return ret;
+}
+
+void do_banner()
+{
+ 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");
+}
+
+void do_help()
+{
+ 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 */
+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 = (int)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(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;
+}
+
+int isLargeFile(const char* filename)
+{
+ int largeFile = 0;
+ ZPOS64_T pos = 0;
+ FILE* pFile = FOPEN_FUNC(filename, "rb");
+
+ if(pFile != NULL)
+ {
+ int n = FSEEKO_FUNC(pFile, 0, SEEK_END);
+ pos = FTELLO_FUNC(pFile);
+
+ printf("File : %s is %lld bytes\n", filename, pos);
+
+ if(pos >= 0xffffffff)
+ largeFile = 1;
+
+ fclose(pFile);
+ }
+
+ return largeFile;
+}
+
+int main(argc,argv)
+ 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;
+ int size_buf=0;
+ void* buf=NULL;
+ const char* password=NULL;
+
+
+ do_banner();
+ if (argc==1)
+ {
+ do_help();
+ return 0;
+ }
+ else
+ {
+ for (i=1;i<argc;i++)
+ {
+ if ((*argv[i])=='-')
+ {
+ const char *p=argv[i]+1;
+
+ while ((*p)!='\0')
+ {
+ char c=*(p++);;
+ if ((c=='o') || (c=='O'))
+ opt_overwrite = 1;
+ if ((c=='a') || (c=='A'))
+ opt_overwrite = 2;
+ if ((c>='0') && (c<='9'))
+ opt_compress_level = c-'0';
+ if ((c=='j') || (c=='J'))
+ opt_exclude_path = 1;
+
+ if (((c=='p') || (c=='P')) && (i+1<argc))
+ {
+ password=argv[i+1];
+ i++;
+ }
+ }
+ }
+ else
+ {
+ if (zipfilenamearg == 0)
+ {
+ zipfilenamearg = i ;
+ }
+ }
+ }
+ }
+
+ size_buf = WRITEBUFFERSIZE;
+ buf = (void*)malloc(size_buf);
+ if (buf==NULL)
+ {
+ printf("Error allocating memory\n");
+ return ZIP_INTERNALERROR;
+ }
+
+ if (zipfilenamearg==0)
+ {
+ zipok=0;
+ }
+ else
+ {
+ int i,len;
+ int dot_found=0;
+
+ zipok = 1 ;
+ strncpy(filename_try, argv[zipfilenamearg],MAXFILENAME-1);
+ /* strncpy doesnt append the trailing NULL, of the string is too long. */
+ filename_try[ MAXFILENAME ] = '\0';
+
+ len=(int)strlen(filename_try);
+ for (i=0;i<len;i++)
+ if (filename_try[i]=='.')
+ dot_found=1;
+
+ if (dot_found==0)
+ strcat(filename_try,".zip");
+
+ if (opt_overwrite==2)
+ {
+ /* if the file don't exist, we not append file */
+ if (check_exist_file(filename_try)==0)
+ opt_overwrite=1;
+ }
+ else
+ if (opt_overwrite==0)
+ if (check_exist_file(filename_try)!=0)
+ {
+ char rep=0;
+ do
+ {
+ char answer[128];
+ int ret;
+ printf("The file %s exists. Overwrite ? [y]es, [n]o, [a]ppend : ",filename_try);
+ ret = scanf("%1s",answer);
+ if (ret != 1)
+ {
+ exit(EXIT_FAILURE);
+ }
+ rep = answer[0] ;
+ if ((rep>='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<argc) && (err==ZIP_OK);i++)
+ {
+ if (!((((*(argv[i]))=='-') || ((*(argv[i]))=='/')) &&
+ ((argv[i][1]=='o') || (argv[i][1]=='O') ||
+ (argv[i][1]=='a') || (argv[i][1]=='A') ||
+ (argv[i][1]=='p') || (argv[i][1]=='P') ||
+ ((argv[i][1]>='0') || (argv[i][1]<='9'))) &&
+ (strlen(argv[i]) == 2)))
+ {
+ FILE * fin;
+ int 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 = (int)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,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/protocols/Telegram/tgl/zlib/contrib/minizip/minizip.pc.in b/protocols/Telegram/tgl/zlib/contrib/minizip/minizip.pc.in
new file mode 100644
index 0000000000..69b5b7fdcb
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/minizip/mztools.c b/protocols/Telegram/tgl/zlib/contrib/minizip/mztools.c
new file mode 100644
index 0000000000..96891c2e0b
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/minizip/mztools.c
@@ -0,0 +1,291 @@
+/*
+ Additional tools for Minizip
+ Code: Xavier Roche '2004
+ License: Same as ZLIB (www.gzip.org)
+*/
+
+/* Code */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#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(file, fileOut, fileOutTmp, nRecovered, bytesRecovered)
+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/protocols/Telegram/tgl/zlib/contrib/minizip/mztools.h b/protocols/Telegram/tgl/zlib/contrib/minizip/mztools.h
new file mode 100644
index 0000000000..a49a426ec2
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/minizip/unzip.c b/protocols/Telegram/tgl/zlib/contrib/minizip/unzip.c
new file mode 100644
index 0000000000..909350435a
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/minizip/unzip.c
@@ -0,0 +1,2125 @@
+/* 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 paches recived from Gilles Vollant
+ Oct-2009 - Mathias Svensson - Applied support to unzip files with compression mathod 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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef NOUNCRYPT
+ #define NOUNCRYPT
+#endif
+
+#include "zlib.h"
+#include "unzip.h"
+
+#ifdef STDC
+# include <stddef.h>
+# include <string.h>
+# include <stdlib.h>
+#endif
+#ifdef NO_ERRNO_H
+ extern int errno;
+#else
+# include <errno.h>
+#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
+#ifndef TRYFREE
+# define TRYFREE(p) {if (p) free(p);}
+#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_info_interntal 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 structore 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 structore 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
+
+/* ===========================================================================
+ Read a byte from a gz_stream; update next_in and avail_in. Return EOF
+ for end of file.
+ IN assertion: the stream s has been sucessfully opened for reading.
+*/
+
+
+local int unz64local_getByte OF((
+ const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ int *pi));
+
+local int unz64local_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 UNZ_OK;
+ }
+ else
+ {
+ if (ZERROR64(*pzlib_filefunc_def,filestream))
+ return UNZ_ERRNO;
+ else
+ return UNZ_EOF;
+ }
+}
+
+
+/* ===========================================================================
+ Reads a long in LSB order from the given gz_stream. Sets
+*/
+local int unz64local_getShort OF((
+ const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ uLong *pX));
+
+local int unz64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ uLong *pX)
+{
+ uLong x ;
+ int i = 0;
+ int err;
+
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x = (uLong)i;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((uLong)i)<<8;
+
+ if (err==UNZ_OK)
+ *pX = x;
+ else
+ *pX = 0;
+ return err;
+}
+
+local int unz64local_getLong OF((
+ const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ uLong *pX));
+
+local int unz64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ uLong *pX)
+{
+ uLong x ;
+ int i = 0;
+ int err;
+
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x = (uLong)i;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((uLong)i)<<8;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((uLong)i)<<16;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((uLong)i)<<24;
+
+ if (err==UNZ_OK)
+ *pX = x;
+ else
+ *pX = 0;
+ return err;
+}
+
+local int unz64local_getLong64 OF((
+ const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ ZPOS64_T *pX));
+
+
+local int unz64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ ZPOS64_T *pX)
+{
+ ZPOS64_T x ;
+ int i = 0;
+ int err;
+
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x = (ZPOS64_T)i;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<8;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<16;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<24;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<32;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<40;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<48;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<56;
+
+ if (err==UNZ_OK)
+ *pX = x;
+ else
+ *pX = 0;
+ return err;
+}
+
+/* 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 (c1<c2)
+ return -1;
+ if (c1>c2)
+ return 1;
+ }
+}
+
+
+#ifdef CASESENSITIVITYDEFAULT_NO
+#define CASESENSITIVITYDEFAULTVALUE 2
+#else
+#define CASESENSITIVITYDEFAULTVALUE 1
+#endif
+
+#ifndef STRCMPCASENOSENTIVEFUNCTION
+#define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal
+#endif
+
+/*
+ Compare two filename (fileName1,fileName2).
+ If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
+ If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
+ or strcasecmp)
+ If iCaseSenisivity = 0, case sensitivity is defaut 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
+
+/*
+ Locate the Central directory of a zipfile (at the end, just before
+ the global comment)
+*/
+local ZPOS64_T unz64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));
+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=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 (uBackRead<uMaxBack)
+ {
+ uLong uReadSize;
+ ZPOS64_T uReadPos ;
+ int i;
+ if (uBackRead+BUFREADCOMMENT>uMaxBack)
+ 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+i;
+ break;
+ }
+
+ if (uPosFound!=0)
+ break;
+ }
+ TRYFREE(buf);
+ return uPosFound;
+}
+
+
+/*
+ Locate the Central directory 64 of a zipfile (at the end, just before
+ the global comment)
+*/
+local ZPOS64_T unz64local_SearchCentralDir64 OF((
+ const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream));
+
+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=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 (uBackRead<uMaxBack)
+ {
+ uLong uReadSize;
+ ZPOS64_T uReadPos;
+ int i;
+ if (uBackRead+BUFREADCOMMENT>uMaxBack)
+ 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+i;
+ break;
+ }
+
+ if (uPosFound!=0)
+ break;
+ }
+ TRYFREE(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 (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+ return 0;
+
+ /* 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 0;
+ if (uL != 0)
+ return 0;
+
+ /* relative offset of the zip64 end of central directory record */
+ if (unz64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=UNZ_OK)
+ return 0;
+
+ /* total number of disks */
+ if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+ return 0;
+ if (uL != 1)
+ return 0;
+
+ /* Goto end of central directory record */
+ if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return 0;
+
+ /* the signature */
+ if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+ return 0;
+
+ if (uL != 0x06064b50)
+ return 0;
+
+ 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 dist, used for
+ spaning ZIP, unsupported, always 0*/
+ uLong number_disk_with_CD; /* number the the disk with central dir, used
+ for spaning 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)
+ {
+ 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==0)
+ 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_pos<us.offset_central_dir+us.size_central_dir) &&
+ (err==UNZ_OK))
+ err=UNZ_BADZIPFILE;
+
+ if (err!=UNZ_OK)
+ {
+ ZCLOSE64(us.z_filefunc, us.filestream);
+ return NULL;
+ }
+
+ us.byte_before_the_zipfile = central_pos -
+ (us.offset_central_dir+us.size_central_dir);
+ us.central_pos = central_pos;
+ us.pfile_in_zip_read = NULL;
+ us.encrypted = 0;
+
+
+ s=(unz64_s*)ALLOC(sizeof(unz64_s));
+ if( s != NULL)
+ {
+ *s=us;
+ unzGoToFirstFile((unzFile)s);
+ }
+ return (unzFile)s;
+}
+
+
+extern unzFile ZEXPORT unzOpen2 (const char *path,
+ 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 unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 0);
+ }
+ else
+ return unzOpenInternal(path, NULL, 0);
+}
+
+extern unzFile ZEXPORT unzOpen2_64 (const void *path,
+ 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 unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 1);
+ }
+ else
+ return unzOpenInternal(path, NULL, 1);
+}
+
+extern unzFile ZEXPORT unzOpen (const char *path)
+{
+ return unzOpenInternal(path, NULL, 0);
+}
+
+extern unzFile ZEXPORT unzOpen64 (const void *path)
+{
+ return unzOpenInternal(path, NULL, 1);
+}
+
+/*
+ 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 unzClose (unzFile file)
+{
+ unz64_s* s;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+
+ if (s->pfile_in_zip_read!=NULL)
+ unzCloseCurrentFile(file);
+
+ ZCLOSE64(s->z_filefunc, s->filestream);
+ TRYFREE(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 easilty)
+*/
+local void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm)
+{
+ ZPOS64_T uDate;
+ uDate = (ZPOS64_T)(ulDosDate>>16);
+ ptm->tm_mday = (uInt)(uDate&0x1f) ;
+ ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ;
+ ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;
+
+ ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);
+ ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ;
+ ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ;
+}
+
+/*
+ Get Info about the current file in the zipfile, with internal only info
+*/
+local int unz64local_GetCurrentFileInfoInternal OF((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));
+
+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_filename<fileNameBufferSize)
+ {
+ *(szFileName+file_info.size_filename)='\0';
+ uSizeRead = file_info.size_filename;
+ }
+ else
+ uSizeRead = fileNameBufferSize;
+
+ if ((file_info.size_filename>0) && (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_extra<extraFieldBufferSize)
+ uSizeRead = file_info.size_file_extra;
+ else
+ uSizeRead = extraFieldBufferSize;
+
+ if (lSeek!=0)
+ {
+ if (ZSEEK64(s->z_filefunc, s->filestream,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,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)
+ {
+ uLong uL;
+
+ 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 == MAXU32)
+ {
+ /* Disk Start Number */
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != 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_comment<commentBufferSize)
+ {
+ *(szComment+file_info.size_file_comment)='\0';
+ uSizeRead = file_info.size_file_comment;
+ }
+ else
+ uSizeRead = commentBufferSize;
+
+ if (lSeek!=0)
+ {
+ if (ZSEEK64(s->z_filefunc, s->filestream,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)
+ {
+ TRYFREE(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
+ {
+ TRYFREE(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
+ {
+ TRYFREE(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 somes 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_compressed<uReadThis)
+ uReadThis = (uInt)pfile_in_zip_read_info->rest_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;i<uReadThis;i++)
+ pfile_in_zip_read_info->read_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 : 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;i<uDoCopy;i++)
+ *(pfile_in_zip_read_info->stream.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;
+ 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);
+
+ if (err==Z_STREAM_END)
+ return (iRead==0) ? UNZ_EOF : iRead;
+ if (err!=Z_OK)
+ break;
+ }
+ }
+
+ if (err==Z_OK)
+ return 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;
+ }
+
+
+ TRYFREE(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;
+ TRYFREE(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/protocols/Telegram/tgl/zlib/contrib/minizip/unzip.h b/protocols/Telegram/tgl/zlib/contrib/minizip/unzip.h
new file mode 100644
index 0000000000..2104e39150
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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
+{
+ uInt tm_sec; /* seconds after the minute - [0,59] */
+ uInt tm_min; /* minutes after the hour - [0,59] */
+ uInt tm_hour; /* hours since midnight - [0,23] */
+ uInt tm_mday; /* day of the month - [1,31] */
+ uInt tm_mon; /* months since January - [0,11] */
+ uInt 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 OF ((const char* fileName1,
+ const char* fileName2,
+ int iCaseSensitivity));
+/*
+ Compare two filename (fileName1,fileName2).
+ If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
+ If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
+ or strcasecmp)
+ If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
+ (like 1 on Unix, 2 on Windows)
+*/
+
+
+extern unzFile ZEXPORT unzOpen OF((const char *path));
+extern unzFile ZEXPORT unzOpen64 OF((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 OF((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 OF((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 OF((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 OF((unzFile file,
+ unz_global_info *pglobal_info));
+
+extern int ZEXPORT unzGetGlobalInfo64 OF((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 OF((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 OF((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 OF((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 OF((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 OF((unzFile file,
+ unz_file_info64 *pfile_info,
+ char *szFileName,
+ uLong fileNameBufferSize,
+ void *extraField,
+ uLong extraFieldBufferSize,
+ char *szComment,
+ uLong commentBufferSize));
+
+extern int ZEXPORT unzGetCurrentFileInfo OF((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 somes info about
+ the current file
+ if szFileName!=NULL, the filemane 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 OF((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 OF((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 OF((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 OF((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 OF((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 OF((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 OF((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 somes 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 OF((unzFile file));
+
+extern ZPOS64_T ZEXPORT unztell64 OF((unzFile file));
+/*
+ Give the current position in uncompressed data
+*/
+
+extern int ZEXPORT unzeof OF((unzFile file));
+/*
+ return 1 if the end of file was reached, 0 elsewhere
+*/
+
+extern int ZEXPORT unzGetLocalExtrafield OF((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/protocols/Telegram/tgl/zlib/contrib/minizip/zip.c b/protocols/Telegram/tgl/zlib/contrib/minizip/zip.c
new file mode 100644
index 0000000000..ea54853e85
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/minizip/zip.c
@@ -0,0 +1,2007 @@
+/* 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 recreting zip archive with RAW when deleting items from a zip.
+ ZIP64 data is automaticly 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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include "zlib.h"
+#include "zip.h"
+
+#ifdef STDC
+# include <stddef.h>
+# include <string.h>
+# include <stdlib.h>
+#endif
+#ifdef NO_ERRNO_H
+ extern int errno;
+#else
+# include <errno.h>
+#endif
+
+
+#ifndef local
+# define local static
+#endif
+/* compile with -Dlocal if your debugger can't find static symbols */
+
+#ifndef VERSIONMADEBY
+# define VERSIONMADEBY (0x0) /* platform depedent */
+#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
+#ifndef TRYFREE
+# define TRYFREE(p) {if (p) free(p);}
+#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 alignement */
+ 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
+ currenty 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 currenty 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 extened 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;
+ int crypt_header_size;
+#endif
+} curfile64_info;
+
+typedef struct
+{
+ zlib_filefunc64_32_def z_filefunc;
+ voidpf filestream; /* io structore 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 curretly writing */
+
+ ZPOS64_T begin_pos; /* position of the beginning of the zipfile */
+ ZPOS64_T add_position_when_writting_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()
+{
+ 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;
+ TRYFREE(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 = (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;i<copy_this;i++)
+ *(to_copy+i)=*(from_copy+i);
+
+ ldi->filled_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 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte));
+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,nbByte)!=(uLong)nbByte)
+ return ZIP_ERRNO;
+ else
+ return ZIP_OK;
+}
+
+local void zip64local_putValue_inmemory OF((void* dest, ZPOS64_T x, int nbByte));
+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) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) |
+ ((ptm->tm_sec/2) + (32* ptm->tm_min) + (2048 * (uLong)ptm->tm_hour));
+}
+
+
+/****************************************************************************/
+
+local int zip64local_getByte OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi));
+
+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 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX));
+
+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 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX));
+
+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 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX));
+
+
+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 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));
+
+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 (uBackRead<uMaxBack)
+ {
+ uLong uReadSize;
+ ZPOS64_T uReadPos ;
+ int i;
+ if (uBackRead+BUFREADCOMMENT>uMaxBack)
+ 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+i;
+ break;
+ }
+
+ if (uPosFound!=0)
+ break;
+ }
+ TRYFREE(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 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));
+
+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 (uBackRead<uMaxBack)
+ {
+ uLong uReadSize;
+ ZPOS64_T uReadPos;
+ int i;
+ if (uBackRead+BUFREADCOMMENT>uMaxBack)
+ 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+i;
+ break;
+ }
+ }
+
+ if (uPosFound!=0)
+ break;
+ }
+
+ TRYFREE(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;
+}
+
+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 dist, used for
+ spaning ZIP, unsupported, always 0*/
+ uLong number_disk_with_CD; /* number the the disk with central dir, used
+ for spaning 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_pos<offset_central_dir+size_central_dir) &&
+ (err==ZIP_OK))
+ err=ZIP_BADZIPFILE;
+
+ if (err!=ZIP_OK)
+ {
+ ZCLOSE64(pziinit->z_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_writting_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;
+ }
+ TRYFREE(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_writting_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
+ TRYFREE(ziinit.globalcomment);
+# endif /* !NO_ADDFILEINEXISTINGZIP*/
+ TRYFREE(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);
+}
+
+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, (short)HeaderID,2);
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)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
+
+ 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_writting_offset,4);
+
+ for (i=0;i<size_filename;i++)
+ *(zi->ci.central_header+SIZECENTRALHEADER+i) = *(filename+i);
+
+ for (i=0;i<size_extrafield_global;i++)
+ *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+i) =
+ *(((const char*)extrafield_global)+i);
+
+ for (i=0;i<size_comment;i++)
+ *(zi->ci.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;i<zi->ci.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*)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);
+ if(uTotalOutBefore > zi->ci.stream.total_out)
+ {
+ int bBreak = 0;
+ bBreak++;
+ }
+
+ 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;
+ short 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 can not 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);
+}
+
+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_writting_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;
+}
+
+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_writting_offset;
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8);
+ }
+ return err;
+}
+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_writting_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_writting_offset),4);
+ }
+
+ return err;
+}
+
+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_writting_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
+ TRYFREE(zi->globalcomment);
+#endif
+ TRYFREE(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 < 4)
+ return ZIP_PARAMERROR;
+
+ pNewHeader = (char*)ALLOC(*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;
+
+ TRYFREE(pNewHeader);
+
+ return retVal;
+}
diff --git a/protocols/Telegram/tgl/zlib/contrib/minizip/zip.h b/protocols/Telegram/tgl/zlib/contrib/minizip/zip.h
new file mode 100644
index 0000000000..8aaebb6234
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/minizip/zip.h
@@ -0,0 +1,362 @@
+/* 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
+{
+ uInt tm_sec; /* seconds after the minute - [0,59] */
+ uInt tm_min; /* minutes after the hour - [0,59] */
+ uInt tm_hour; /* hours since midnight - [0,23] */
+ uInt tm_mday; /* day of the month - [1,31] */
+ uInt tm_mon; /* months since January - [0,11] */
+ uInt 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 OF((const char *pathname, int append));
+extern zipFile ZEXPORT zipOpen64 OF((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 couse, you can use RAW reading and writing to copy the file you did not want delte
+*/
+
+extern zipFile ZEXPORT zipOpen2 OF((const char *pathname,
+ int append,
+ zipcharpc* globalcomment,
+ zlib_filefunc_def* pzlib_filefunc_def));
+
+extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname,
+ int append,
+ zipcharpc* globalcomment,
+ zlib_filefunc64_def* pzlib_filefunc_def));
+
+extern int ZEXPORT zipOpenNewFileInZip OF((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 OF((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 the the local header
+ if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global
+ contains the extrafield data the the local 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 OF((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 OF((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 OF((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 OF((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 OF((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 OF((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 OF((zipFile file,
+ const void* buf,
+ unsigned len));
+/*
+ Write data in the zipfile
+*/
+
+extern int ZEXPORT zipCloseFileInZip OF((zipFile file));
+/*
+ Close the current file in the zipfile
+*/
+
+extern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file,
+ uLong uncompressed_size,
+ uLong crc32));
+
+extern int ZEXPORT zipCloseFileInZipRaw64 OF((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 OF((zipFile file,
+ const char* global_comment));
+/*
+ Close the zipfile
+*/
+
+
+extern int ZEXPORT zipRemoveExtraInfoBlock OF((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/protocols/Telegram/tgl/zlib/contrib/pascal/example.pas b/protocols/Telegram/tgl/zlib/contrib/pascal/example.pas
new file mode 100644
index 0000000000..5518b36a73
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/pascal/readme.txt b/protocols/Telegram/tgl/zlib/contrib/pascal/readme.txt
new file mode 100644
index 0000000000..60e87c8a33
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/pascal/zlibd32.mak b/protocols/Telegram/tgl/zlib/contrib/pascal/zlibd32.mak
new file mode 100644
index 0000000000..9bb00b7cc4
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/pascal/zlibpas.pas b/protocols/Telegram/tgl/zlib/contrib/pascal/zlibpas.pas
new file mode 100644
index 0000000000..e6a0782b48
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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.2.8';
+ ZLIB_VERNUM = $1280;
+
+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/protocols/Telegram/tgl/zlib/contrib/puff/Makefile b/protocols/Telegram/tgl/zlib/contrib/puff/Makefile
new file mode 100644
index 0000000000..0e2594c808
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/puff/README b/protocols/Telegram/tgl/zlib/contrib/puff/README
new file mode 100644
index 0000000000..bbc4cb595e
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 readabilty. 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/protocols/Telegram/tgl/zlib/contrib/puff/puff.c b/protocols/Telegram/tgl/zlib/contrib/puff/puff.c
new file mode 100644
index 0000000000..ba58483d57
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 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 readabilty
+ * - 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 <setjmp.h> /* 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
+ * 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 follwed 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/protocols/Telegram/tgl/zlib/contrib/puff/puff.h b/protocols/Telegram/tgl/zlib/contrib/puff/puff.h
new file mode 100644
index 0000000000..e23a245431
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/puff/pufftest.c b/protocols/Telegram/tgl/zlib/contrib/puff/pufftest.c
new file mode 100644
index 0000000000..776481488c
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 <stdio.h>
+#include <stdlib.h>
+#include "puff.h"
+
+#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
+
+#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 ? "<stdin>" : 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 decompressd 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/protocols/Telegram/tgl/zlib/contrib/puff/zeros.raw b/protocols/Telegram/tgl/zlib/contrib/puff/zeros.raw
new file mode 100644
index 0000000000..0a90e76b30
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/puff/zeros.raw
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/testzlib/testzlib.c b/protocols/Telegram/tgl/zlib/contrib/testzlib/testzlib.c
new file mode 100644
index 0000000000..5f659dea00
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/testzlib/testzlib.c
@@ -0,0 +1,275 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <windows.h>
+
+#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 <File> [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, %u 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/protocols/Telegram/tgl/zlib/contrib/testzlib/testzlib.txt b/protocols/Telegram/tgl/zlib/contrib/testzlib/testzlib.txt
new file mode 100644
index 0000000000..62258f1495
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/untgz/Makefile b/protocols/Telegram/tgl/zlib/contrib/untgz/Makefile
new file mode 100644
index 0000000000..b54266fba2
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/untgz/Makefile.msc b/protocols/Telegram/tgl/zlib/contrib/untgz/Makefile.msc
new file mode 100644
index 0000000000..77b8602213
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/untgz/untgz.c b/protocols/Telegram/tgl/zlib/contrib/untgz/untgz.c
new file mode 100644
index 0000000000..2c391e5986
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/untgz/untgz.c
@@ -0,0 +1,674 @@
+/*
+ * untgz.c -- Display contents and extract files from a gzip'd TAR file
+ *
+ * written by Pedro A. Aranda Gutierrez <paag@tid.es>
+ * adaptation to Unix by Jean-loup Gailly <jloup@gzip.org>
+ * various fixes by Cosmin Truta <cosmint@cs.ubbcluj.ro>
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <errno.h>
+
+#include "zlib.h"
+
+#ifdef unix
+# include <unistd.h>
+#else
+# include <direct.h>
+# include <io.h>
+#endif
+
+#ifdef WIN32
+#include <windows.h>
+# 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 <utime.h>
+#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 *TGZfname OF((const char *));
+void TGZnotfound OF((const char *));
+
+int getoct OF((char *, int));
+char *strtime OF((time_t *));
+int setfiletime OF((char *, time_t));
+void push_attr OF((struct attr_item **, char *, int, time_t));
+void restore_attr OF((struct attr_item **));
+
+int ExprMatch OF((char *, char *));
+
+int makedir OF((char *));
+int matchname OF((int, int, char **, char *));
+
+void error OF((const char *));
+int tar OF((gzFile, int, int, int, char **));
+
+void help OF((int));
+int main OF((int, char **));
+
+char *prog;
+
+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 <dir> %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);
+}
+
+void error(const char *msg)
+{
+ fprintf(stderr, "%s: %s\n", prog, msg);
+ exit(1);
+}
+
+
+/* ============================================================ */
+
+#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/protocols/Telegram/tgl/zlib/contrib/vstudio/readme.txt b/protocols/Telegram/tgl/zlib/contrib/vstudio/readme.txt
new file mode 100644
index 0000000000..bfdcd9dd01
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/readme.txt
@@ -0,0 +1,65 @@
+Building instructions for the DLL versions of Zlib 1.2.8
+========================================================
+
+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)
+--------------------------------------------------------------
+- Uncompress current zlib, including all contrib/* files
+- Compile assembly code (with Visual Studio Command Prompt) by running:
+ bld_ml64.bat (in contrib\masmx64)
+ bld_ml32.bat (in contrib\masmx86)
+- 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)
+--------------------------------------------------------------
+- Uncompress 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)
+--------------------------------------------------------------
+- Uncompress current zlib, including all contrib/* files
+- Open contrib\vstudio\vc11\zlibvc.sln with Microsoft Visual C++ 2012
+
+
+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
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/miniunz.vcxproj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/miniunz.vcxproj
new file mode 100644
index 0000000000..74e15c90d3
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/miniunz.vcxproj
@@ -0,0 +1,310 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{C52F9E7B-498A-42BE-8DB4-85A15694382A}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)miniunz.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)miniunz.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)miniunz.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\minizip\miniunz.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="zlibvc.vcxproj">
+ <Project>{8fd826f8-3739-44e6-8cc8-997122e53b8d}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters
new file mode 100644
index 0000000000..0b2a3de2df
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{048af943-022b-4db6-beeb-a54c34774ee2}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{c1d600d2-888f-4aea-b73e-8b0dd9befa0c}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{0844199a-966b-4f19-81db-1e0125e141b9}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\minizip\miniunz.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/minizip.vcxproj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/minizip.vcxproj
new file mode 100644
index 0000000000..917e15652b
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/minizip.vcxproj
@@ -0,0 +1,307 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniZip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniZip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniZip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniZip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)minizip.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)minizip.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)minizip.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\minizip\minizip.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="zlibvc.vcxproj">
+ <Project>{8fd826f8-3739-44e6-8cc8-997122e53b8d}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters
new file mode 100644
index 0000000000..dd73cd3132
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{c0419b40-bf50-40da-b153-ff74215b79de}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{bb87b070-735b-478e-92ce-7383abb2f36c}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{f46ab6a6-548f-43cb-ae96-681abb5bd5db}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\minizip\minizip.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/testzlib.vcxproj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/testzlib.vcxproj
new file mode 100644
index 0000000000..9088d176f8
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/testzlib.vcxproj
@@ -0,0 +1,420 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Itanium">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Win32">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|x64">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}</ProjectGuid>
+ <RootNamespace>testzlib</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c" />
+ <ClCompile Include="..\..\..\compress.c" />
+ <ClCompile Include="..\..\..\crc32.c" />
+ <ClCompile Include="..\..\..\deflate.c" />
+ <ClCompile Include="..\..\..\infback.c" />
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c" />
+ <ClCompile Include="..\..\..\inflate.c" />
+ <ClCompile Include="..\..\..\inftrees.c" />
+ <ClCompile Include="..\..\testzlib\testzlib.c" />
+ <ClCompile Include="..\..\..\trees.c" />
+ <ClCompile Include="..\..\..\uncompr.c" />
+ <ClCompile Include="..\..\..\zutil.c" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters
new file mode 100644
index 0000000000..249daa89ca
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{c1f6a2e3-5da5-4955-8653-310d3efe05a9}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{c2aaffdc-2c95-4d6f-8466-4bec5890af2c}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{c274fe07-05f2-461c-964b-f6341e4e7eb5}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\compress.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\crc32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\deflate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\infback.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inflate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inftrees.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\testzlib\testzlib.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\trees.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\uncompr.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\zutil.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj
new file mode 100644
index 0000000000..bcb08ff95d
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj
@@ -0,0 +1,310 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{C52F9E7B-498A-42BE-8DB4-85A15694366A}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\testzlib\testzlib.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="zlibvc.vcxproj">
+ <Project>{8fd826f8-3739-44e6-8cc8-997122e53b8d}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters
new file mode 100644
index 0000000000..53a8693bb0
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{fa61a89f-93fc-4c89-b29e-36224b7592f4}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{d4b85da0-2ba2-4934-b57f-e2584e3848ee}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{e573e075-00bd-4a7d-bd67-a8cc9bfc5aca}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\testzlib\testzlib.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlib.rc b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlib.rc
new file mode 100644
index 0000000000..73f6476d60
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlib.rc
@@ -0,0 +1,32 @@
+#include <windows.h>
+
+#define IDR_VERSION1 1
+IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
+ FILEVERSION 1,2,8,0
+ PRODUCTVERSION 1,2,8,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.2.8\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-2013 Jean-loup Gailly & Mark Adler\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x0409, 1252
+ END
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibstat.vcxproj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibstat.vcxproj
new file mode 100644
index 0000000000..b9f2bbe5f0
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibstat.vcxproj
@@ -0,0 +1,473 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Itanium">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Win32">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|x64">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}</ProjectGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>OldStyle</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx86
+bld_ml32.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx86
+bld_ml32.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>OldStyle</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx64
+bld_ml64.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>OldStyle</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx64
+bld_ml64.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c" />
+ <ClCompile Include="..\..\..\compress.c" />
+ <ClCompile Include="..\..\..\crc32.c" />
+ <ClCompile Include="..\..\..\deflate.c" />
+ <ClCompile Include="..\..\..\gzclose.c" />
+ <ClCompile Include="..\..\..\gzlib.c" />
+ <ClCompile Include="..\..\..\gzread.c" />
+ <ClCompile Include="..\..\..\gzwrite.c" />
+ <ClCompile Include="..\..\..\infback.c" />
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c" />
+ <ClCompile Include="..\..\..\inflate.c" />
+ <ClCompile Include="..\..\..\inftrees.c" />
+ <ClCompile Include="..\..\minizip\ioapi.c" />
+ <ClCompile Include="..\..\..\trees.c" />
+ <ClCompile Include="..\..\..\uncompr.c" />
+ <ClCompile Include="..\..\minizip\unzip.c" />
+ <ClCompile Include="..\..\minizip\zip.c" />
+ <ClCompile Include="..\..\..\zutil.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="zlib.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="zlibvc.def" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters
new file mode 100644
index 0000000000..c8c7f7ea39
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{174213f6-7f66-4ae8-a3a8-a1e0a1e6ffdd}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\compress.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\crc32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\deflate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzclose.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzlib.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzread.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzwrite.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\infback.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inflate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inftrees.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\ioapi.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\trees.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\uncompr.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\unzip.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\zip.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\zutil.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="zlib.rc">
+ <Filter>Source Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="zlibvc.def">
+ <Filter>Source Files</Filter>
+ </None>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibvc.def b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibvc.def
new file mode 100644
index 0000000000..6367046722
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibvc.def
@@ -0,0 +1,143 @@
+LIBRARY
+; zlib data compression and ZIP file I/O library
+
+VERSION 1.2.8
+
+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
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibvc.sln b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibvc.sln
new file mode 100644
index 0000000000..6f6ffd5eea
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibvc.vcxproj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibvc.vcxproj
new file mode 100644
index 0000000000..6ff9ddb077
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibvc.vcxproj
@@ -0,0 +1,657 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Itanium">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Win32">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|x64">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{8FD826F8-3739-44E6-8CC8-997122E53B8D}</ProjectGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">zlibwapid</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">zlibwapi</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">zlibwapi</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">zlibwapid</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">zlibwapi</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">zlibwapi</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>true</GenerateMapFile>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ </Link>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx86
+bld_ml32.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ </Link>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx86
+bld_ml32.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>true</GenerateMapFile>
+ <SubSystem>Windows</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx64
+bld_ml64.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <SubSystem>Windows</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <SubSystem>Windows</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx64
+bld_ml64.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c" />
+ <ClCompile Include="..\..\..\compress.c" />
+ <ClCompile Include="..\..\..\crc32.c" />
+ <ClCompile Include="..\..\..\deflate.c" />
+ <ClCompile Include="..\..\..\gzclose.c" />
+ <ClCompile Include="..\..\..\gzlib.c" />
+ <ClCompile Include="..\..\..\gzread.c" />
+ <ClCompile Include="..\..\..\gzwrite.c" />
+ <ClCompile Include="..\..\..\infback.c" />
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c" />
+ <ClCompile Include="..\..\..\inflate.c" />
+ <ClCompile Include="..\..\..\inftrees.c" />
+ <ClCompile Include="..\..\minizip\ioapi.c" />
+ <ClCompile Include="..\..\minizip\iowin32.c" />
+ <ClCompile Include="..\..\..\trees.c" />
+ <ClCompile Include="..\..\..\uncompr.c" />
+ <ClCompile Include="..\..\minizip\unzip.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\zip.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\..\..\zutil.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="zlib.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="zlibvc.def" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\deflate.h" />
+ <ClInclude Include="..\..\..\infblock.h" />
+ <ClInclude Include="..\..\..\infcodes.h" />
+ <ClInclude Include="..\..\..\inffast.h" />
+ <ClInclude Include="..\..\..\inftrees.h" />
+ <ClInclude Include="..\..\..\infutil.h" />
+ <ClInclude Include="..\..\..\zconf.h" />
+ <ClInclude Include="..\..\..\zlib.h" />
+ <ClInclude Include="..\..\..\zutil.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters
new file mode 100644
index 0000000000..180b71cd61
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{07934a85-8b61-443d-a0ee-b2eedb74f3cd}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{1d99675b-433d-4a21-9e50-ed4ab8b19762}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;fi;fd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{431c0958-fa71-44d0-9084-2d19d100c0cc}</UniqueIdentifier>
+ <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\compress.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\crc32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\deflate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzclose.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzlib.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzread.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzwrite.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\infback.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inflate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inftrees.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\ioapi.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\iowin32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\trees.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\uncompr.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\unzip.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\zip.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\zutil.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="zlib.rc">
+ <Filter>Source Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="zlibvc.def">
+ <Filter>Source Files</Filter>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\deflate.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\infblock.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\infcodes.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\inffast.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\inftrees.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\infutil.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\zconf.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\zlib.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\zutil.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/miniunz.vcxproj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/miniunz.vcxproj
new file mode 100644
index 0000000000..8c31d9d61c
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/miniunz.vcxproj
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{C52F9E7B-498A-42BE-8DB4-85A15694382A}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)miniunz.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)miniunz.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)miniunz.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\minizip\miniunz.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="zlibvc.vcxproj">
+ <Project>{8fd826f8-3739-44e6-8cc8-997122e53b8d}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/minizip.vcxproj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/minizip.vcxproj
new file mode 100644
index 0000000000..143d300f9e
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/minizip.vcxproj
@@ -0,0 +1,311 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniZip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniZip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniZip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniZip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)minizip.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)minizip.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)minizip.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\minizip\minizip.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="zlibvc.vcxproj">
+ <Project>{8fd826f8-3739-44e6-8cc8-997122e53b8d}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/testzlib.vcxproj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/testzlib.vcxproj
new file mode 100644
index 0000000000..874a5f2444
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/testzlib.vcxproj
@@ -0,0 +1,426 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Itanium">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Win32">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|x64">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}</ProjectGuid>
+ <RootNamespace>testzlib</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c" />
+ <ClCompile Include="..\..\..\compress.c" />
+ <ClCompile Include="..\..\..\crc32.c" />
+ <ClCompile Include="..\..\..\deflate.c" />
+ <ClCompile Include="..\..\..\infback.c" />
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c" />
+ <ClCompile Include="..\..\..\inflate.c" />
+ <ClCompile Include="..\..\..\inftrees.c" />
+ <ClCompile Include="..\..\testzlib\testzlib.c" />
+ <ClCompile Include="..\..\..\trees.c" />
+ <ClCompile Include="..\..\..\uncompr.c" />
+ <ClCompile Include="..\..\..\zutil.c" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj
new file mode 100644
index 0000000000..f6866af8f2
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{C52F9E7B-498A-42BE-8DB4-85A15694366A}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\testzlib\testzlib.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="zlibvc.vcxproj">
+ <Project>{8fd826f8-3739-44e6-8cc8-997122e53b8d}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/adler32.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/adler32.cod
new file mode 100644
index 0000000000..0433d789dc
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/adler32.cod
@@ -0,0 +1,610 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\adler32.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+PUBLIC _adler32_combine@12
+PUBLIC _adler32@12
+EXTRN __alldiv:PROC
+EXTRN __chkstk:PROC
+EXTRN _memcpy:PROC
+EXTRN _memset:PROC
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\adler32.c
+; COMDAT _adler32@12
+_TEXT SEGMENT
+_adler$ = 8 ; size = 4
+tv1591 = 12 ; size = 4
+_buf$ = 12 ; size = 4
+_len$ = 16 ; size = 4
+_adler32@12 PROC ; COMDAT
+
+; 69 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 70 : unsigned long sum2;
+; 71 : unsigned n;
+; 72 :
+; 73 : /* split Adler-32 into component sums */
+; 74 : sum2 = (adler >> 16) & 0xffff;
+
+ 00003 8b 45 08 mov eax, DWORD PTR _adler$[ebp]
+ 00006 53 push ebx
+
+; 75 : adler &= 0xffff;
+; 76 :
+; 77 : /* in case user likes doing a byte at a time, keep it fast */
+; 78 : if (len == 1) {
+
+ 00007 8b 5d 10 mov ebx, DWORD PTR _len$[ebp]
+ 0000a 56 push esi
+ 0000b 8b f0 mov esi, eax
+ 0000d 0f b7 c8 movzx ecx, ax
+ 00010 c1 ee 10 shr esi, 16 ; 00000010H
+ 00013 83 fb 01 cmp ebx, 1
+ 00016 75 33 jne SHORT $LN13@adler32
+
+; 79 : adler += buf[0];
+
+ 00018 8b 45 0c mov eax, DWORD PTR _buf$[ebp]
+ 0001b 0f b6 00 movzx eax, BYTE PTR [eax]
+ 0001e 03 c8 add ecx, eax
+
+; 80 : if (adler >= BASE)
+
+ 00020 81 f9 f1 ff 00
+ 00 cmp ecx, 65521 ; 0000fff1H
+ 00026 72 06 jb SHORT $LN14@adler32
+
+; 81 : adler -= BASE;
+
+ 00028 81 e9 f1 ff 00
+ 00 sub ecx, 65521 ; 0000fff1H
+$LN14@adler32:
+
+; 82 : sum2 += adler;
+
+ 0002e 03 f1 add esi, ecx
+
+; 83 : if (sum2 >= BASE)
+
+ 00030 81 fe f1 ff 00
+ 00 cmp esi, 65521 ; 0000fff1H
+ 00036 72 06 jb SHORT $LN15@adler32
+
+; 84 : sum2 -= BASE;
+
+ 00038 81 ee f1 ff 00
+ 00 sub esi, 65521 ; 0000fff1H
+$LN15@adler32:
+
+; 85 : return adler | (sum2 << 16);
+
+ 0003e c1 e6 10 shl esi, 16 ; 00000010H
+ 00041 0b f1 or esi, ecx
+ 00043 8b c6 mov eax, esi
+ 00045 5e pop esi
+ 00046 5b pop ebx
+
+; 133 : }
+
+ 00047 5d pop ebp
+ 00048 c2 0c 00 ret 12 ; 0000000cH
+$LN13@adler32:
+ 0004b 57 push edi
+
+; 86 : }
+; 87 :
+; 88 : /* initial Adler-32 value (deferred check for len == 1 speed) */
+; 89 : if (buf == Z_NULL)
+
+ 0004c 8b 7d 0c mov edi, DWORD PTR _buf$[ebp]
+ 0004f 85 ff test edi, edi
+ 00051 75 0a jne SHORT $LN16@adler32
+
+; 90 : return 1L;
+
+ 00053 8d 47 01 lea eax, DWORD PTR [edi+1]
+ 00056 5f pop edi
+ 00057 5e pop esi
+ 00058 5b pop ebx
+
+; 133 : }
+
+ 00059 5d pop ebp
+ 0005a c2 0c 00 ret 12 ; 0000000cH
+$LN16@adler32:
+
+; 91 :
+; 92 : /* in case short lengths are provided, keep it somewhat fast */
+; 93 : if (len < 16) {
+
+ 0005d 83 fb 10 cmp ebx, 16 ; 00000010H
+ 00060 73 40 jae SHORT $LN22@adler32
+
+; 94 : while (len--) {
+
+ 00062 85 db test ebx, ebx
+ 00064 74 0f je SHORT $LN26@adler32
+$LL2@adler32:
+
+; 95 : adler += *buf++;
+
+ 00066 0f b6 07 movzx eax, BYTE PTR [edi]
+ 00069 8d 7f 01 lea edi, DWORD PTR [edi+1]
+ 0006c 03 c8 add ecx, eax
+
+; 96 : sum2 += adler;
+
+ 0006e 03 f1 add esi, ecx
+ 00070 83 eb 01 sub ebx, 1
+ 00073 75 f1 jne SHORT $LL2@adler32
+$LN26@adler32:
+
+; 97 : }
+; 98 : if (adler >= BASE)
+
+ 00075 81 f9 f1 ff 00
+ 00 cmp ecx, 65521 ; 0000fff1H
+ 0007b 72 06 jb SHORT $LN18@adler32
+
+; 99 : adler -= BASE;
+
+ 0007d 81 e9 f1 ff 00
+ 00 sub ecx, 65521 ; 0000fff1H
+$LN18@adler32:
+
+; 100 : MOD28(sum2); /* only added so many BASE's */
+
+ 00083 b8 71 80 07 80 mov eax, -2146992015 ; 80078071H
+ 00088 f7 e6 mul esi
+ 0008a 5f pop edi
+ 0008b c1 ea 0f shr edx, 15 ; 0000000fH
+
+; 101 : return adler | (sum2 << 16);
+
+ 0008e 8b c2 mov eax, edx
+ 00090 c1 e0 04 shl eax, 4
+ 00093 2b c2 sub eax, edx
+ 00095 03 c6 add eax, esi
+ 00097 c1 e0 10 shl eax, 16 ; 00000010H
+ 0009a 5e pop esi
+ 0009b 0b c1 or eax, ecx
+ 0009d 5b pop ebx
+
+; 133 : }
+
+ 0009e 5d pop ebp
+ 0009f c2 0c 00 ret 12 ; 0000000cH
+$LN22@adler32:
+
+; 102 : }
+; 103 :
+; 104 : /* do length NMAX blocks -- requires just one modulo operation */
+; 105 : while (len >= NMAX) {
+
+ 000a2 81 fb b0 15 00
+ 00 cmp ebx, 5552 ; 000015b0H
+ 000a8 0f 82 db 00 00
+ 00 jb $LN5@adler32
+ 000ae b8 af a9 6e 5e mov eax, 1584310703 ; 5e6ea9afH
+ 000b3 f7 e3 mul ebx
+ 000b5 c1 ea 0b shr edx, 11 ; 0000000bH
+ 000b8 89 55 0c mov DWORD PTR tv1591[ebp], edx
+ 000bb 0f 1f 44 00 00 npad 5
+$LL4@adler32:
+
+; 106 : len -= NMAX;
+
+ 000c0 81 eb b0 15 00
+ 00 sub ebx, 5552 ; 000015b0H
+
+; 107 : n = NMAX / 16; /* NMAX is divisible by 16 */
+
+ 000c6 ba 5b 01 00 00 mov edx, 347 ; 0000015bH
+ 000cb 0f 1f 44 00 00 npad 5
+$LL8@adler32:
+
+; 108 : do {
+; 109 : DO16(buf); /* 16 sums unrolled */
+
+ 000d0 0f b6 07 movzx eax, BYTE PTR [edi]
+ 000d3 03 c8 add ecx, eax
+ 000d5 0f b6 47 01 movzx eax, BYTE PTR [edi+1]
+ 000d9 03 f1 add esi, ecx
+ 000db 03 c8 add ecx, eax
+ 000dd 0f b6 47 02 movzx eax, BYTE PTR [edi+2]
+ 000e1 03 f1 add esi, ecx
+ 000e3 03 c8 add ecx, eax
+ 000e5 0f b6 47 03 movzx eax, BYTE PTR [edi+3]
+ 000e9 03 f1 add esi, ecx
+ 000eb 03 c8 add ecx, eax
+ 000ed 0f b6 47 04 movzx eax, BYTE PTR [edi+4]
+ 000f1 03 f1 add esi, ecx
+ 000f3 03 c8 add ecx, eax
+ 000f5 0f b6 47 05 movzx eax, BYTE PTR [edi+5]
+ 000f9 03 f1 add esi, ecx
+ 000fb 03 c8 add ecx, eax
+ 000fd 0f b6 47 06 movzx eax, BYTE PTR [edi+6]
+ 00101 03 f1 add esi, ecx
+ 00103 03 c8 add ecx, eax
+ 00105 0f b6 47 07 movzx eax, BYTE PTR [edi+7]
+ 00109 03 f1 add esi, ecx
+ 0010b 03 c8 add ecx, eax
+ 0010d 0f b6 47 08 movzx eax, BYTE PTR [edi+8]
+ 00111 03 f1 add esi, ecx
+ 00113 03 c8 add ecx, eax
+ 00115 0f b6 47 09 movzx eax, BYTE PTR [edi+9]
+ 00119 03 f1 add esi, ecx
+ 0011b 03 c8 add ecx, eax
+ 0011d 0f b6 47 0a movzx eax, BYTE PTR [edi+10]
+ 00121 03 f1 add esi, ecx
+ 00123 03 c8 add ecx, eax
+ 00125 0f b6 47 0b movzx eax, BYTE PTR [edi+11]
+ 00129 03 f1 add esi, ecx
+ 0012b 03 c8 add ecx, eax
+ 0012d 0f b6 47 0c movzx eax, BYTE PTR [edi+12]
+ 00131 03 f1 add esi, ecx
+ 00133 03 c8 add ecx, eax
+ 00135 0f b6 47 0d movzx eax, BYTE PTR [edi+13]
+ 00139 03 f1 add esi, ecx
+ 0013b 03 c8 add ecx, eax
+ 0013d 0f b6 47 0e movzx eax, BYTE PTR [edi+14]
+ 00141 03 f1 add esi, ecx
+ 00143 03 c8 add ecx, eax
+ 00145 0f b6 47 0f movzx eax, BYTE PTR [edi+15]
+ 00149 03 f1 add esi, ecx
+
+; 110 : buf += 16;
+
+ 0014b 83 c7 10 add edi, 16 ; 00000010H
+ 0014e 03 c8 add ecx, eax
+ 00150 03 f1 add esi, ecx
+
+; 111 : } while (--n);
+
+ 00152 83 ea 01 sub edx, 1
+ 00155 0f 85 75 ff ff
+ ff jne $LL8@adler32
+
+; 112 : MOD(adler);
+
+ 0015b b8 71 80 07 80 mov eax, -2146992015 ; 80078071H
+ 00160 f7 e1 mul ecx
+ 00162 c1 ea 0f shr edx, 15 ; 0000000fH
+ 00165 69 c2 0f 00 ff
+ ff imul eax, edx, -65521
+ 0016b 03 c8 add ecx, eax
+
+; 113 : MOD(sum2);
+
+ 0016d b8 71 80 07 80 mov eax, -2146992015 ; 80078071H
+ 00172 f7 e6 mul esi
+ 00174 c1 ea 0f shr edx, 15 ; 0000000fH
+ 00177 69 c2 0f 00 ff
+ ff imul eax, edx, -65521
+ 0017d 03 f0 add esi, eax
+ 0017f 83 6d 0c 01 sub DWORD PTR tv1591[ebp], 1
+ 00183 0f 85 37 ff ff
+ ff jne $LL4@adler32
+$LN5@adler32:
+
+; 114 : }
+; 115 :
+; 116 : /* do remaining bytes (less than NMAX, still just one modulo) */
+; 117 : if (len) { /* avoid modulos if none remaining */
+
+ 00189 85 db test ebx, ebx
+ 0018b 0f 84 d4 00 00
+ 00 je $LN19@adler32
+
+; 118 : while (len >= 16) {
+
+ 00191 83 fb 10 cmp ebx, 16 ; 00000010H
+ 00194 0f 82 94 00 00
+ 00 jb $LN25@adler32
+ 0019a 8b d3 mov edx, ebx
+ 0019c c1 ea 04 shr edx, 4
+ 0019f 90 npad 1
+$LL9@adler32:
+
+; 119 : len -= 16;
+; 120 : DO16(buf);
+
+ 001a0 0f b6 07 movzx eax, BYTE PTR [edi]
+ 001a3 83 eb 10 sub ebx, 16 ; 00000010H
+ 001a6 03 c8 add ecx, eax
+ 001a8 0f b6 47 01 movzx eax, BYTE PTR [edi+1]
+ 001ac 03 f1 add esi, ecx
+ 001ae 03 c8 add ecx, eax
+ 001b0 0f b6 47 02 movzx eax, BYTE PTR [edi+2]
+ 001b4 03 f1 add esi, ecx
+ 001b6 03 c8 add ecx, eax
+ 001b8 0f b6 47 03 movzx eax, BYTE PTR [edi+3]
+ 001bc 03 f1 add esi, ecx
+ 001be 03 c8 add ecx, eax
+ 001c0 0f b6 47 04 movzx eax, BYTE PTR [edi+4]
+ 001c4 03 f1 add esi, ecx
+ 001c6 03 c8 add ecx, eax
+ 001c8 0f b6 47 05 movzx eax, BYTE PTR [edi+5]
+ 001cc 03 f1 add esi, ecx
+ 001ce 03 c8 add ecx, eax
+ 001d0 0f b6 47 06 movzx eax, BYTE PTR [edi+6]
+ 001d4 03 f1 add esi, ecx
+ 001d6 03 c8 add ecx, eax
+ 001d8 0f b6 47 07 movzx eax, BYTE PTR [edi+7]
+ 001dc 03 f1 add esi, ecx
+ 001de 03 c8 add ecx, eax
+ 001e0 0f b6 47 08 movzx eax, BYTE PTR [edi+8]
+ 001e4 03 f1 add esi, ecx
+ 001e6 03 c8 add ecx, eax
+ 001e8 0f b6 47 09 movzx eax, BYTE PTR [edi+9]
+ 001ec 03 f1 add esi, ecx
+ 001ee 03 c8 add ecx, eax
+ 001f0 0f b6 47 0a movzx eax, BYTE PTR [edi+10]
+ 001f4 03 f1 add esi, ecx
+ 001f6 03 c8 add ecx, eax
+ 001f8 0f b6 47 0b movzx eax, BYTE PTR [edi+11]
+ 001fc 03 f1 add esi, ecx
+ 001fe 03 c8 add ecx, eax
+ 00200 0f b6 47 0c movzx eax, BYTE PTR [edi+12]
+ 00204 03 f1 add esi, ecx
+ 00206 03 c8 add ecx, eax
+ 00208 0f b6 47 0d movzx eax, BYTE PTR [edi+13]
+ 0020c 03 f1 add esi, ecx
+ 0020e 03 c8 add ecx, eax
+ 00210 0f b6 47 0e movzx eax, BYTE PTR [edi+14]
+ 00214 03 f1 add esi, ecx
+ 00216 03 c8 add ecx, eax
+ 00218 0f b6 47 0f movzx eax, BYTE PTR [edi+15]
+ 0021c 03 f1 add esi, ecx
+
+; 121 : buf += 16;
+
+ 0021e 83 c7 10 add edi, 16 ; 00000010H
+ 00221 03 c8 add ecx, eax
+ 00223 03 f1 add esi, ecx
+ 00225 83 ea 01 sub edx, 1
+ 00228 0f 85 72 ff ff
+ ff jne $LL9@adler32
+$LN25@adler32:
+
+; 122 : }
+; 123 : while (len--) {
+
+ 0022e 85 db test ebx, ebx
+ 00230 74 0f je SHORT $LN30@adler32
+$LL11@adler32:
+
+; 124 : adler += *buf++;
+
+ 00232 0f b6 07 movzx eax, BYTE PTR [edi]
+ 00235 8d 7f 01 lea edi, DWORD PTR [edi+1]
+ 00238 03 c8 add ecx, eax
+
+; 125 : sum2 += adler;
+
+ 0023a 03 f1 add esi, ecx
+ 0023c 83 eb 01 sub ebx, 1
+ 0023f 75 f1 jne SHORT $LL11@adler32
+$LN30@adler32:
+
+; 126 : }
+; 127 : MOD(adler);
+
+ 00241 b8 71 80 07 80 mov eax, -2146992015 ; 80078071H
+ 00246 f7 e1 mul ecx
+
+; 128 : MOD(sum2);
+
+ 00248 b8 71 80 07 80 mov eax, -2146992015 ; 80078071H
+ 0024d c1 ea 0f shr edx, 15 ; 0000000fH
+ 00250 69 d2 0f 00 ff
+ ff imul edx, edx, -65521
+ 00256 03 ca add ecx, edx
+ 00258 f7 e6 mul esi
+ 0025a c1 ea 0f shr edx, 15 ; 0000000fH
+ 0025d 69 c2 0f 00 ff
+ ff imul eax, edx, -65521
+ 00263 03 f0 add esi, eax
+$LN19@adler32:
+
+; 129 : }
+; 130 :
+; 131 : /* return recombined sums */
+; 132 : return adler | (sum2 << 16);
+
+ 00265 c1 e6 10 shl esi, 16 ; 00000010H
+ 00268 0b f1 or esi, ecx
+ 0026a 5f pop edi
+ 0026b 8b c6 mov eax, esi
+ 0026d 5e pop esi
+ 0026e 5b pop ebx
+
+; 133 : }
+
+ 0026f 5d pop ebp
+ 00270 c2 0c 00 ret 12 ; 0000000cH
+_adler32@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\adler32.c
+; COMDAT _adler32_combine_
+_TEXT SEGMENT
+_adler2$1$ = -4 ; size = 4
+_len2$ = 8 ; size = 8
+_adler32_combine_ PROC ; COMDAT
+; _adler1$ = ecx
+; _adler2$ = edx
+
+; 140 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+
+; 141 : unsigned long sum1;
+; 142 : unsigned long sum2;
+; 143 : unsigned rem;
+; 144 :
+; 145 : /* for negative len, return invalid adler32 as a clue for debugging */
+; 146 : if (len2 < 0)
+
+ 00004 8b 45 0c mov eax, DWORD PTR _len2$[ebp+4]
+ 00007 89 55 fc mov DWORD PTR _adler2$1$[ebp], edx
+ 0000a 53 push ebx
+ 0000b 8b d9 mov ebx, ecx
+ 0000d 57 push edi
+ 0000e 8b 7d 08 mov edi, DWORD PTR _len2$[ebp]
+ 00011 85 c0 test eax, eax
+ 00013 7f 0f jg SHORT $LN2@adler32_co
+ 00015 7c 04 jl SHORT $LN8@adler32_co
+ 00017 85 ff test edi, edi
+ 00019 73 09 jae SHORT $LN2@adler32_co
+$LN8@adler32_co:
+ 0001b 5f pop edi
+
+; 147 : return 0xffffffffUL;
+
+ 0001c 83 c8 ff or eax, -1
+ 0001f 5b pop ebx
+
+; 162 : }
+
+ 00020 8b e5 mov esp, ebp
+ 00022 5d pop ebp
+ 00023 c3 ret 0
+$LN2@adler32_co:
+ 00024 56 push esi
+
+; 148 :
+; 149 : /* the derivation of this formula is left as an exercise for the reader */
+; 150 : MOD63(len2); /* assumes len2 >= 0 */
+
+ 00025 6a 00 push 0
+ 00027 68 f1 ff 00 00 push 65521 ; 0000fff1H
+ 0002c 50 push eax
+ 0002d 57 push edi
+ 0002e e8 00 00 00 00 call __alldiv
+ 00033 69 c0 f1 ff 00
+ 00 imul eax, eax, 65521
+
+; 151 : rem = (unsigned)len2;
+; 152 : sum1 = adler1 & 0xffff;
+
+ 00039 0f b7 cb movzx ecx, bx
+
+; 153 : sum2 = rem * sum1;
+
+ 0003c 8b f1 mov esi, ecx
+
+; 154 : MOD(sum2);
+; 155 : sum1 += (adler2 & 0xffff) + BASE - 1;
+; 156 : sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem;
+
+ 0003e c1 eb 10 shr ebx, 16 ; 00000010H
+ 00041 2b f8 sub edi, eax
+ 00043 8b 45 fc mov eax, DWORD PTR _adler2$1$[ebp]
+ 00046 0f b7 c0 movzx eax, ax
+ 00049 05 f0 ff 00 00 add eax, 65520 ; 0000fff0H
+ 0004e 0f af f7 imul esi, edi
+ 00051 03 c8 add ecx, eax
+ 00053 b8 71 80 07 80 mov eax, -2146992015 ; 80078071H
+ 00058 f7 e6 mul esi
+ 0005a 81 c6 f1 ff 00
+ 00 add esi, 65521 ; 0000fff1H
+ 00060 c1 ea 0f shr edx, 15 ; 0000000fH
+ 00063 69 c2 f1 ff 00
+ 00 imul eax, edx, 65521
+ 00069 2b d8 sub ebx, eax
+ 0006b 8b 45 fc mov eax, DWORD PTR _adler2$1$[ebp]
+ 0006e c1 e8 10 shr eax, 16 ; 00000010H
+ 00071 03 c3 add eax, ebx
+ 00073 2b c7 sub eax, edi
+ 00075 03 c6 add eax, esi
+ 00077 5e pop esi
+
+; 157 : if (sum1 >= BASE) sum1 -= BASE;
+
+ 00078 81 f9 f1 ff 00
+ 00 cmp ecx, 65521 ; 0000fff1H
+ 0007e 72 14 jb SHORT $LN4@adler32_co
+ 00080 81 e9 f1 ff 00
+ 00 sub ecx, 65521 ; 0000fff1H
+
+; 158 : if (sum1 >= BASE) sum1 -= BASE;
+
+ 00086 81 f9 f1 ff 00
+ 00 cmp ecx, 65521 ; 0000fff1H
+ 0008c 72 06 jb SHORT $LN4@adler32_co
+ 0008e 81 e9 f1 ff 00
+ 00 sub ecx, 65521 ; 0000fff1H
+$LN4@adler32_co:
+
+; 159 : if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1);
+
+ 00094 3d e2 ff 01 00 cmp eax, 131042 ; 0001ffe2H
+ 00099 72 05 jb SHORT $LN5@adler32_co
+ 0009b 2d e2 ff 01 00 sub eax, 131042 ; 0001ffe2H
+$LN5@adler32_co:
+
+; 160 : if (sum2 >= BASE) sum2 -= BASE;
+
+ 000a0 3d f1 ff 00 00 cmp eax, 65521 ; 0000fff1H
+ 000a5 72 05 jb SHORT $LN6@adler32_co
+ 000a7 2d f1 ff 00 00 sub eax, 65521 ; 0000fff1H
+$LN6@adler32_co:
+
+; 161 : return sum1 | (sum2 << 16);
+
+ 000ac c1 e0 10 shl eax, 16 ; 00000010H
+ 000af 5f pop edi
+ 000b0 0b c1 or eax, ecx
+ 000b2 5b pop ebx
+
+; 162 : }
+
+ 000b3 8b e5 mov esp, ebp
+ 000b5 5d pop ebp
+ 000b6 c3 ret 0
+_adler32_combine_ ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\adler32.c
+; COMDAT _adler32_combine@12
+_TEXT SEGMENT
+_adler1$ = 8 ; size = 4
+_adler2$ = 12 ; size = 4
+_len2$ = 16 ; size = 4
+_adler32_combine@12 PROC ; COMDAT
+
+; 169 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 170 : return adler32_combine_(adler1, adler2, len2);
+
+ 00003 8b 45 10 mov eax, DWORD PTR _len2$[ebp]
+ 00006 8b 4d 08 mov ecx, DWORD PTR _adler1$[ebp]
+ 00009 99 cdq
+ 0000a 52 push edx
+ 0000b 8b 55 0c mov edx, DWORD PTR _adler2$[ebp]
+ 0000e 50 push eax
+ 0000f e8 00 00 00 00 call _adler32_combine_
+ 00014 83 c4 08 add esp, 8
+
+; 171 : }
+
+ 00017 5d pop ebp
+ 00018 c2 0c 00 ret 12 ; 0000000cH
+_adler32_combine@12 ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/adler32.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/adler32.obj
new file mode 100644
index 0000000000..8b7e7eda4b
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/adler32.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/compress.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/compress.cod
new file mode 100644
index 0000000000..0a573cab58
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/compress.cod
@@ -0,0 +1,214 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\compress.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+PUBLIC ??_C@_05IAIEPMAK@1?42?48?$AA@ ; `string'
+CONST ENDS
+; COMDAT ??_C@_05IAIEPMAK@1?42?48?$AA@
+CONST SEGMENT
+??_C@_05IAIEPMAK@1?42?48?$AA@ DB '1.2.8', 00H ; `string'
+CONST ENDS
+PUBLIC _compressBound@4
+PUBLIC _compress@16
+PUBLIC _compress2@20
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\compress.c
+; COMDAT _compress2@20
+_TEXT SEGMENT
+_stream$ = -56 ; size = 56
+_dest$ = 8 ; size = 4
+_destLen$ = 12 ; size = 4
+_source$ = 16 ; size = 4
+_sourceLen$ = 20 ; size = 4
+_level$ = 24 ; size = 4
+_compress2@20 PROC ; COMDAT
+
+; 28 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 83 ec 38 sub esp, 56 ; 00000038H
+
+; 29 : z_stream stream;
+; 30 : int err;
+; 31 :
+; 32 : stream.next_in = (z_const Bytef *)source;
+
+ 00009 8b 45 10 mov eax, DWORD PTR _source$[ebp]
+ 0000c 56 push esi
+ 0000d 57 push edi
+
+; 33 : stream.avail_in = (uInt)sourceLen;
+; 34 : #ifdef MAXSEG_64K
+; 35 : /* Check for source > 64K on 16-bit machine: */
+; 36 : if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
+; 37 : #endif
+; 38 : stream.next_out = dest;
+; 39 : stream.avail_out = (uInt)*destLen;
+
+ 0000e 8b 7d 0c mov edi, DWORD PTR _destLen$[ebp]
+ 00011 89 44 24 08 mov DWORD PTR _stream$[esp+64], eax
+ 00015 8b 45 14 mov eax, DWORD PTR _sourceLen$[ebp]
+ 00018 89 44 24 0c mov DWORD PTR _stream$[esp+68], eax
+ 0001c 8b 45 08 mov eax, DWORD PTR _dest$[ebp]
+
+; 40 : if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+; 41 :
+; 42 : stream.zalloc = (alloc_func)0;
+; 43 : stream.zfree = (free_func)0;
+; 44 : stream.opaque = (voidpf)0;
+; 45 :
+; 46 : err = deflateInit(&stream, level);
+
+ 0001f 6a 38 push 56 ; 00000038H
+ 00021 89 44 24 18 mov DWORD PTR _stream$[esp+80], eax
+ 00025 8b 07 mov eax, DWORD PTR [edi]
+ 00027 68 00 00 00 00 push OFFSET ??_C@_05IAIEPMAK@1?42?48?$AA@
+ 0002c ff 75 18 push DWORD PTR _level$[ebp]
+ 0002f 89 44 24 24 mov DWORD PTR _stream$[esp+92], eax
+ 00033 8d 44 24 14 lea eax, DWORD PTR _stream$[esp+76]
+ 00037 50 push eax
+ 00038 c7 44 24 38 00
+ 00 00 00 mov DWORD PTR _stream$[esp+112], 0
+ 00040 c7 44 24 3c 00
+ 00 00 00 mov DWORD PTR _stream$[esp+116], 0
+ 00048 c7 44 24 40 00
+ 00 00 00 mov DWORD PTR _stream$[esp+120], 0
+ 00050 e8 00 00 00 00 call _deflateInit_@16
+
+; 47 : if (err != Z_OK) return err;
+
+ 00055 85 c0 test eax, eax
+ 00057 75 41 jne SHORT $LN1@compress2
+
+; 48 :
+; 49 : err = deflate(&stream, Z_FINISH);
+
+ 00059 6a 04 push 4
+ 0005b 8d 44 24 0c lea eax, DWORD PTR _stream$[esp+68]
+ 0005f 50 push eax
+ 00060 e8 00 00 00 00 call _deflate@8
+ 00065 8b f0 mov esi, eax
+
+; 50 : if (err != Z_STREAM_END) {
+
+ 00067 83 fe 01 cmp esi, 1
+ 0006a 74 1e je SHORT $LN4@compress2
+
+; 51 : deflateEnd(&stream);
+
+ 0006c 8d 44 24 08 lea eax, DWORD PTR _stream$[esp+64]
+ 00070 50 push eax
+ 00071 e8 00 00 00 00 call _deflateEnd@4
+
+; 52 : return err == Z_OK ? Z_BUF_ERROR : err;
+
+ 00076 b8 fb ff ff ff mov eax, -5 ; fffffffbH
+ 0007b 85 f6 test esi, esi
+ 0007d 0f 44 f0 cmove esi, eax
+ 00080 8b c6 mov eax, esi
+
+; 57 : return err;
+; 58 : }
+
+ 00082 5f pop edi
+ 00083 5e pop esi
+ 00084 8b e5 mov esp, ebp
+ 00086 5d pop ebp
+ 00087 c2 14 00 ret 20 ; 00000014H
+$LN4@compress2:
+
+; 53 : }
+; 54 : *destLen = stream.total_out;
+
+ 0008a 8b 44 24 1c mov eax, DWORD PTR _stream$[esp+84]
+ 0008e 89 07 mov DWORD PTR [edi], eax
+
+; 55 :
+; 56 : err = deflateEnd(&stream);
+
+ 00090 8d 44 24 08 lea eax, DWORD PTR _stream$[esp+64]
+ 00094 50 push eax
+ 00095 e8 00 00 00 00 call _deflateEnd@4
+$LN1@compress2:
+
+; 57 : return err;
+; 58 : }
+
+ 0009a 5f pop edi
+ 0009b 5e pop esi
+ 0009c 8b e5 mov esp, ebp
+ 0009e 5d pop ebp
+ 0009f c2 14 00 ret 20 ; 00000014H
+_compress2@20 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\compress.c
+; COMDAT _compress@16
+_TEXT SEGMENT
+_dest$ = 8 ; size = 4
+_destLen$ = 12 ; size = 4
+_source$ = 16 ; size = 4
+_sourceLen$ = 20 ; size = 4
+_compress@16 PROC ; COMDAT
+
+; 67 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 68 : return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
+
+ 00003 6a ff push -1
+ 00005 ff 75 14 push DWORD PTR _sourceLen$[ebp]
+ 00008 ff 75 10 push DWORD PTR _source$[ebp]
+ 0000b ff 75 0c push DWORD PTR _destLen$[ebp]
+ 0000e ff 75 08 push DWORD PTR _dest$[ebp]
+ 00011 e8 00 00 00 00 call _compress2@20
+
+; 69 : }
+
+ 00016 5d pop ebp
+ 00017 c2 10 00 ret 16 ; 00000010H
+_compress@16 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\compress.c
+; COMDAT _compressBound@4
+_TEXT SEGMENT
+_sourceLen$ = 8 ; size = 4
+_compressBound@4 PROC ; COMDAT
+
+; 77 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 78 : return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
+
+ 00003 8b 55 08 mov edx, DWORD PTR _sourceLen$[ebp]
+ 00006 8b c2 mov eax, edx
+ 00008 c1 e8 0e shr eax, 14 ; 0000000eH
+ 0000b 8b ca mov ecx, edx
+ 0000d 03 c2 add eax, edx
+ 0000f c1 e9 19 shr ecx, 25 ; 00000019H
+ 00012 c1 ea 0c shr edx, 12 ; 0000000cH
+ 00015 03 c1 add eax, ecx
+ 00017 83 c2 0d add edx, 13 ; 0000000dH
+ 0001a 03 c2 add eax, edx
+
+; 79 : (sourceLen >> 25) + 13;
+; 80 : }
+
+ 0001c 5d pop ebp
+ 0001d c2 04 00 ret 4
+_compressBound@4 ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/compress.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/compress.obj
new file mode 100644
index 0000000000..3d0a063e87
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/compress.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/crc32.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/crc32.cod
new file mode 100644
index 0000000000..e344758a46
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/crc32.cod
@@ -0,0 +1,3150 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\crc32.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+_crc_table DD 00H
+ DD 077073096H
+ DD 0ee0e612cH
+ DD 0990951baH
+ DD 076dc419H
+ DD 0706af48fH
+ DD 0e963a535H
+ DD 09e6495a3H
+ DD 0edb8832H
+ DD 079dcb8a4H
+ DD 0e0d5e91eH
+ DD 097d2d988H
+ DD 09b64c2bH
+ DD 07eb17cbdH
+ DD 0e7b82d07H
+ DD 090bf1d91H
+ DD 01db71064H
+ DD 06ab020f2H
+ DD 0f3b97148H
+ DD 084be41deH
+ DD 01adad47dH
+ DD 06ddde4ebH
+ DD 0f4d4b551H
+ DD 083d385c7H
+ DD 0136c9856H
+ DD 0646ba8c0H
+ DD 0fd62f97aH
+ DD 08a65c9ecH
+ DD 014015c4fH
+ DD 063066cd9H
+ DD 0fa0f3d63H
+ DD 08d080df5H
+ DD 03b6e20c8H
+ DD 04c69105eH
+ DD 0d56041e4H
+ DD 0a2677172H
+ DD 03c03e4d1H
+ DD 04b04d447H
+ DD 0d20d85fdH
+ DD 0a50ab56bH
+ DD 035b5a8faH
+ DD 042b2986cH
+ DD 0dbbbc9d6H
+ DD 0acbcf940H
+ DD 032d86ce3H
+ DD 045df5c75H
+ DD 0dcd60dcfH
+ DD 0abd13d59H
+ DD 026d930acH
+ DD 051de003aH
+ DD 0c8d75180H
+ DD 0bfd06116H
+ DD 021b4f4b5H
+ DD 056b3c423H
+ DD 0cfba9599H
+ DD 0b8bda50fH
+ DD 02802b89eH
+ DD 05f058808H
+ DD 0c60cd9b2H
+ DD 0b10be924H
+ DD 02f6f7c87H
+ DD 058684c11H
+ DD 0c1611dabH
+ DD 0b6662d3dH
+ DD 076dc4190H
+ DD 01db7106H
+ DD 098d220bcH
+ DD 0efd5102aH
+ DD 071b18589H
+ DD 06b6b51fH
+ DD 09fbfe4a5H
+ DD 0e8b8d433H
+ DD 07807c9a2H
+ DD 0f00f934H
+ DD 09609a88eH
+ DD 0e10e9818H
+ DD 07f6a0dbbH
+ DD 086d3d2dH
+ DD 091646c97H
+ DD 0e6635c01H
+ DD 06b6b51f4H
+ DD 01c6c6162H
+ DD 0856530d8H
+ DD 0f262004eH
+ DD 06c0695edH
+ DD 01b01a57bH
+ DD 08208f4c1H
+ DD 0f50fc457H
+ DD 065b0d9c6H
+ DD 012b7e950H
+ DD 08bbeb8eaH
+ DD 0fcb9887cH
+ DD 062dd1ddfH
+ DD 015da2d49H
+ DD 08cd37cf3H
+ DD 0fbd44c65H
+ DD 04db26158H
+ DD 03ab551ceH
+ DD 0a3bc0074H
+ DD 0d4bb30e2H
+ DD 04adfa541H
+ DD 03dd895d7H
+ DD 0a4d1c46dH
+ DD 0d3d6f4fbH
+ DD 04369e96aH
+ DD 0346ed9fcH
+ DD 0ad678846H
+ DD 0da60b8d0H
+ DD 044042d73H
+ DD 033031de5H
+ DD 0aa0a4c5fH
+ DD 0dd0d7cc9H
+ DD 05005713cH
+ DD 0270241aaH
+ DD 0be0b1010H
+ DD 0c90c2086H
+ DD 05768b525H
+ DD 0206f85b3H
+ DD 0b966d409H
+ DD 0ce61e49fH
+ DD 05edef90eH
+ DD 029d9c998H
+ DD 0b0d09822H
+ DD 0c7d7a8b4H
+ DD 059b33d17H
+ DD 02eb40d81H
+ DD 0b7bd5c3bH
+ DD 0c0ba6cadH
+ DD 0edb88320H
+ DD 09abfb3b6H
+ DD 03b6e20cH
+ DD 074b1d29aH
+ DD 0ead54739H
+ DD 09dd277afH
+ DD 04db2615H
+ DD 073dc1683H
+ DD 0e3630b12H
+ DD 094643b84H
+ DD 0d6d6a3eH
+ DD 07a6a5aa8H
+ DD 0e40ecf0bH
+ DD 09309ff9dH
+ DD 0a00ae27H
+ DD 07d079eb1H
+ DD 0f00f9344H
+ DD 08708a3d2H
+ DD 01e01f268H
+ DD 06906c2feH
+ DD 0f762575dH
+ DD 0806567cbH
+ DD 0196c3671H
+ DD 06e6b06e7H
+ DD 0fed41b76H
+ DD 089d32be0H
+ DD 010da7a5aH
+ DD 067dd4accH
+ DD 0f9b9df6fH
+ DD 08ebeeff9H
+ DD 017b7be43H
+ DD 060b08ed5H
+ DD 0d6d6a3e8H
+ DD 0a1d1937eH
+ DD 038d8c2c4H
+ DD 04fdff252H
+ DD 0d1bb67f1H
+ DD 0a6bc5767H
+ DD 03fb506ddH
+ DD 048b2364bH
+ DD 0d80d2bdaH
+ DD 0af0a1b4cH
+ DD 036034af6H
+ DD 041047a60H
+ DD 0df60efc3H
+ DD 0a867df55H
+ DD 0316e8eefH
+ DD 04669be79H
+ DD 0cb61b38cH
+ DD 0bc66831aH
+ DD 0256fd2a0H
+ DD 05268e236H
+ DD 0cc0c7795H
+ DD 0bb0b4703H
+ DD 0220216b9H
+ DD 05505262fH
+ DD 0c5ba3bbeH
+ DD 0b2bd0b28H
+ DD 02bb45a92H
+ DD 05cb36a04H
+ DD 0c2d7ffa7H
+ DD 0b5d0cf31H
+ DD 02cd99e8bH
+ DD 05bdeae1dH
+ DD 09b64c2b0H
+ DD 0ec63f226H
+ DD 0756aa39cH
+ DD 026d930aH
+ DD 09c0906a9H
+ DD 0eb0e363fH
+ DD 072076785H
+ DD 05005713H
+ DD 095bf4a82H
+ DD 0e2b87a14H
+ DD 07bb12baeH
+ DD 0cb61b38H
+ DD 092d28e9bH
+ DD 0e5d5be0dH
+ DD 07cdcefb7H
+ DD 0bdbdf21H
+ DD 086d3d2d4H
+ DD 0f1d4e242H
+ DD 068ddb3f8H
+ DD 01fda836eH
+ DD 081be16cdH
+ DD 0f6b9265bH
+ DD 06fb077e1H
+ DD 018b74777H
+ DD 088085ae6H
+ DD 0ff0f6a70H
+ DD 066063bcaH
+ DD 011010b5cH
+ DD 08f659effH
+ DD 0f862ae69H
+ DD 0616bffd3H
+ DD 0166ccf45H
+ DD 0a00ae278H
+ DD 0d70dd2eeH
+ DD 04e048354H
+ DD 03903b3c2H
+ DD 0a7672661H
+ DD 0d06016f7H
+ DD 04969474dH
+ DD 03e6e77dbH
+ DD 0aed16a4aH
+ DD 0d9d65adcH
+ DD 040df0b66H
+ DD 037d83bf0H
+ DD 0a9bcae53H
+ DD 0debb9ec5H
+ DD 047b2cf7fH
+ DD 030b5ffe9H
+ DD 0bdbdf21cH
+ DD 0cabac28aH
+ DD 053b39330H
+ DD 024b4a3a6H
+ DD 0bad03605H
+ DD 0cdd70693H
+ DD 054de5729H
+ DD 023d967bfH
+ DD 0b3667a2eH
+ DD 0c4614ab8H
+ DD 05d681b02H
+ DD 02a6f2b94H
+ DD 0b40bbe37H
+ DD 0c30c8ea1H
+ DD 05a05df1bH
+ DD 02d02ef8dH
+ DD 00H
+ DD 0191b3141H
+ DD 032366282H
+ DD 02b2d53c3H
+ DD 0646cc504H
+ DD 07d77f445H
+ DD 0565aa786H
+ DD 04f4196c7H
+ DD 0c8d98a08H
+ DD 0d1c2bb49H
+ DD 0faefe88aH
+ DD 0e3f4d9cbH
+ DD 0acb54f0cH
+ DD 0b5ae7e4dH
+ DD 09e832d8eH
+ DD 087981ccfH
+ DD 04ac21251H
+ DD 053d92310H
+ DD 078f470d3H
+ DD 061ef4192H
+ DD 02eaed755H
+ DD 037b5e614H
+ DD 01c98b5d7H
+ DD 05838496H
+ DD 0821b9859H
+ DD 09b00a918H
+ DD 0b02dfadbH
+ DD 0a936cb9aH
+ DD 0e6775d5dH
+ DD 0ff6c6c1cH
+ DD 0d4413fdfH
+ DD 0cd5a0e9eH
+ DD 0958424a2H
+ DD 08c9f15e3H
+ DD 0a7b24620H
+ DD 0bea97761H
+ DD 0f1e8e1a6H
+ DD 0e8f3d0e7H
+ DD 0c3de8324H
+ DD 0dac5b265H
+ DD 05d5daeaaH
+ DD 044469febH
+ DD 06f6bcc28H
+ DD 07670fd69H
+ DD 039316baeH
+ DD 0202a5aefH
+ DD 0b07092cH
+ DD 0121c386dH
+ DD 0df4636f3H
+ DD 0c65d07b2H
+ DD 0ed705471H
+ DD 0f46b6530H
+ DD 0bb2af3f7H
+ DD 0a231c2b6H
+ DD 0891c9175H
+ DD 09007a034H
+ DD 0179fbcfbH
+ DD 0e848dbaH
+ DD 025a9de79H
+ DD 03cb2ef38H
+ DD 073f379ffH
+ DD 06ae848beH
+ DD 041c51b7dH
+ DD 058de2a3cH
+ DD 0f0794f05H
+ DD 0e9627e44H
+ DD 0c24f2d87H
+ DD 0db541cc6H
+ DD 094158a01H
+ DD 08d0ebb40H
+ DD 0a623e883H
+ DD 0bf38d9c2H
+ DD 038a0c50dH
+ DD 021bbf44cH
+ DD 0a96a78fH
+ DD 0138d96ceH
+ DD 05ccc0009H
+ DD 045d73148H
+ DD 06efa628bH
+ DD 077e153caH
+ DD 0babb5d54H
+ DD 0a3a06c15H
+ DD 0888d3fd6H
+ DD 091960e97H
+ DD 0ded79850H
+ DD 0c7cca911H
+ DD 0ece1fad2H
+ DD 0f5facb93H
+ DD 07262d75cH
+ DD 06b79e61dH
+ DD 04054b5deH
+ DD 0594f849fH
+ DD 0160e1258H
+ DD 0f152319H
+ DD 0243870daH
+ DD 03d23419bH
+ DD 065fd6ba7H
+ DD 07ce65ae6H
+ DD 057cb0925H
+ DD 04ed03864H
+ DD 0191aea3H
+ DD 0188a9fe2H
+ DD 033a7cc21H
+ DD 02abcfd60H
+ DD 0ad24e1afH
+ DD 0b43fd0eeH
+ DD 09f12832dH
+ DD 08609b26cH
+ DD 0c94824abH
+ DD 0d05315eaH
+ DD 0fb7e4629H
+ DD 0e2657768H
+ DD 02f3f79f6H
+ DD 0362448b7H
+ DD 01d091b74H
+ DD 04122a35H
+ DD 04b53bcf2H
+ DD 052488db3H
+ DD 07965de70H
+ DD 0607eef31H
+ DD 0e7e6f3feH
+ DD 0fefdc2bfH
+ DD 0d5d0917cH
+ DD 0cccba03dH
+ DD 0838a36faH
+ DD 09a9107bbH
+ DD 0b1bc5478H
+ DD 0a8a76539H
+ DD 03b83984bH
+ DD 02298a90aH
+ DD 09b5fac9H
+ DD 010aecb88H
+ DD 05fef5d4fH
+ DD 046f46c0eH
+ DD 06dd93fcdH
+ DD 074c20e8cH
+ DD 0f35a1243H
+ DD 0ea412302H
+ DD 0c16c70c1H
+ DD 0d8774180H
+ DD 09736d747H
+ DD 08e2de606H
+ DD 0a500b5c5H
+ DD 0bc1b8484H
+ DD 071418a1aH
+ DD 0685abb5bH
+ DD 04377e898H
+ DD 05a6cd9d9H
+ DD 0152d4f1eH
+ DD 0c367e5fH
+ DD 0271b2d9cH
+ DD 03e001cddH
+ DD 0b9980012H
+ DD 0a0833153H
+ DD 08bae6290H
+ DD 092b553d1H
+ DD 0ddf4c516H
+ DD 0c4eff457H
+ DD 0efc2a794H
+ DD 0f6d996d5H
+ DD 0ae07bce9H
+ DD 0b71c8da8H
+ DD 09c31de6bH
+ DD 0852aef2aH
+ DD 0ca6b79edH
+ DD 0d37048acH
+ DD 0f85d1b6fH
+ DD 0e1462a2eH
+ DD 066de36e1H
+ DD 07fc507a0H
+ DD 054e85463H
+ DD 04df36522H
+ DD 02b2f3e5H
+ DD 01ba9c2a4H
+ DD 030849167H
+ DD 0299fa026H
+ DD 0e4c5aeb8H
+ DD 0fdde9ff9H
+ DD 0d6f3cc3aH
+ DD 0cfe8fd7bH
+ DD 080a96bbcH
+ DD 099b25afdH
+ DD 0b29f093eH
+ DD 0ab84387fH
+ DD 02c1c24b0H
+ DD 0350715f1H
+ DD 01e2a4632H
+ DD 07317773H
+ DD 04870e1b4H
+ DD 0516bd0f5H
+ DD 07a468336H
+ DD 0635db277H
+ DD 0cbfad74eH
+ DD 0d2e1e60fH
+ DD 0f9ccb5ccH
+ DD 0e0d7848dH
+ DD 0af96124aH
+ DD 0b68d230bH
+ DD 09da070c8H
+ DD 084bb4189H
+ DD 03235d46H
+ DD 01a386c07H
+ DD 031153fc4H
+ DD 0280e0e85H
+ DD 0674f9842H
+ DD 07e54a903H
+ DD 05579fac0H
+ DD 04c62cb81H
+ DD 08138c51fH
+ DD 09823f45eH
+ DD 0b30ea79dH
+ DD 0aa1596dcH
+ DD 0e554001bH
+ DD 0fc4f315aH
+ DD 0d7626299H
+ DD 0ce7953d8H
+ DD 049e14f17H
+ DD 050fa7e56H
+ DD 07bd72d95H
+ DD 062cc1cd4H
+ DD 02d8d8a13H
+ DD 03496bb52H
+ DD 01fbbe891H
+ DD 06a0d9d0H
+ DD 05e7ef3ecH
+ DD 04765c2adH
+ DD 06c48916eH
+ DD 07553a02fH
+ DD 03a1236e8H
+ DD 0230907a9H
+ DD 0824546aH
+ DD 0113f652bH
+ DD 096a779e4H
+ DD 08fbc48a5H
+ DD 0a4911b66H
+ DD 0bd8a2a27H
+ DD 0f2cbbce0H
+ DD 0ebd08da1H
+ DD 0c0fdde62H
+ DD 0d9e6ef23H
+ DD 014bce1bdH
+ DD 0da7d0fcH
+ DD 0268a833fH
+ DD 03f91b27eH
+ DD 070d024b9H
+ DD 069cb15f8H
+ DD 042e6463bH
+ DD 05bfd777aH
+ DD 0dc656bb5H
+ DD 0c57e5af4H
+ DD 0ee530937H
+ DD 0f7483876H
+ DD 0b809aeb1H
+ DD 0a1129ff0H
+ DD 08a3fcc33H
+ DD 09324fd72H
+ DD 00H
+ DD 01c26a37H
+ DD 0384d46eH
+ DD 0246be59H
+ DD 0709a8dcH
+ DD 06cbc2ebH
+ DD 048d7cb2H
+ DD 054f1685H
+ DD 0e1351b8H
+ DD 0fd13b8fH
+ DD 0d9785d6H
+ DD 0c55efe1H
+ DD 091af964H
+ DD 08d89353H
+ DD 0a9e2d0aH
+ DD 0b5c473dH
+ DD 01c26a370H
+ DD 01de4c947H
+ DD 01fa2771eH
+ DD 01e601d29H
+ DD 01b2f0bacH
+ DD 01aed619bH
+ DD 018abdfc2H
+ DD 01969b5f5H
+ DD 01235f2c8H
+ DD 013f798ffH
+ DD 011b126a6H
+ DD 010734c91H
+ DD 0153c5a14H
+ DD 014fe3023H
+ DD 016b88e7aH
+ DD 0177ae44dH
+ DD 0384d46e0H
+ DD 0398f2cd7H
+ DD 03bc9928eH
+ DD 03a0bf8b9H
+ DD 03f44ee3cH
+ DD 03e86840bH
+ DD 03cc03a52H
+ DD 03d025065H
+ DD 0365e1758H
+ DD 0379c7d6fH
+ DD 035dac336H
+ DD 03418a901H
+ DD 03157bf84H
+ DD 03095d5b3H
+ DD 032d36beaH
+ DD 0331101ddH
+ DD 0246be590H
+ DD 025a98fa7H
+ DD 027ef31feH
+ DD 0262d5bc9H
+ DD 023624d4cH
+ DD 022a0277bH
+ DD 020e69922H
+ DD 02124f315H
+ DD 02a78b428H
+ DD 02bbade1fH
+ DD 029fc6046H
+ DD 0283e0a71H
+ DD 02d711cf4H
+ DD 02cb376c3H
+ DD 02ef5c89aH
+ DD 02f37a2adH
+ DD 0709a8dc0H
+ DD 07158e7f7H
+ DD 0731e59aeH
+ DD 072dc3399H
+ DD 07793251cH
+ DD 076514f2bH
+ DD 07417f172H
+ DD 075d59b45H
+ DD 07e89dc78H
+ DD 07f4bb64fH
+ DD 07d0d0816H
+ DD 07ccf6221H
+ DD 0798074a4H
+ DD 078421e93H
+ DD 07a04a0caH
+ DD 07bc6cafdH
+ DD 06cbc2eb0H
+ DD 06d7e4487H
+ DD 06f38fadeH
+ DD 06efa90e9H
+ DD 06bb5866cH
+ DD 06a77ec5bH
+ DD 068315202H
+ DD 069f33835H
+ DD 062af7f08H
+ DD 0636d153fH
+ DD 0612bab66H
+ DD 060e9c151H
+ DD 065a6d7d4H
+ DD 06464bde3H
+ DD 0662203baH
+ DD 067e0698dH
+ DD 048d7cb20H
+ DD 04915a117H
+ DD 04b531f4eH
+ DD 04a917579H
+ DD 04fde63fcH
+ DD 04e1c09cbH
+ DD 04c5ab792H
+ DD 04d98dda5H
+ DD 046c49a98H
+ DD 04706f0afH
+ DD 045404ef6H
+ DD 0448224c1H
+ DD 041cd3244H
+ DD 0400f5873H
+ DD 04249e62aH
+ DD 0438b8c1dH
+ DD 054f16850H
+ DD 055330267H
+ DD 05775bc3eH
+ DD 056b7d609H
+ DD 053f8c08cH
+ DD 0523aaabbH
+ DD 0507c14e2H
+ DD 051be7ed5H
+ DD 05ae239e8H
+ DD 05b2053dfH
+ DD 05966ed86H
+ DD 058a487b1H
+ DD 05deb9134H
+ DD 05c29fb03H
+ DD 05e6f455aH
+ DD 05fad2f6dH
+ DD 0e1351b80H
+ DD 0e0f771b7H
+ DD 0e2b1cfeeH
+ DD 0e373a5d9H
+ DD 0e63cb35cH
+ DD 0e7fed96bH
+ DD 0e5b86732H
+ DD 0e47a0d05H
+ DD 0ef264a38H
+ DD 0eee4200fH
+ DD 0eca29e56H
+ DD 0ed60f461H
+ DD 0e82fe2e4H
+ DD 0e9ed88d3H
+ DD 0ebab368aH
+ DD 0ea695cbdH
+ DD 0fd13b8f0H
+ DD 0fcd1d2c7H
+ DD 0fe976c9eH
+ DD 0ff5506a9H
+ DD 0fa1a102cH
+ DD 0fbd87a1bH
+ DD 0f99ec442H
+ DD 0f85cae75H
+ DD 0f300e948H
+ DD 0f2c2837fH
+ DD 0f0843d26H
+ DD 0f1465711H
+ DD 0f4094194H
+ DD 0f5cb2ba3H
+ DD 0f78d95faH
+ DD 0f64fffcdH
+ DD 0d9785d60H
+ DD 0d8ba3757H
+ DD 0dafc890eH
+ DD 0db3ee339H
+ DD 0de71f5bcH
+ DD 0dfb39f8bH
+ DD 0ddf521d2H
+ DD 0dc374be5H
+ DD 0d76b0cd8H
+ DD 0d6a966efH
+ DD 0d4efd8b6H
+ DD 0d52db281H
+ DD 0d062a404H
+ DD 0d1a0ce33H
+ DD 0d3e6706aH
+ DD 0d2241a5dH
+ DD 0c55efe10H
+ DD 0c49c9427H
+ DD 0c6da2a7eH
+ DD 0c7184049H
+ DD 0c25756ccH
+ DD 0c3953cfbH
+ DD 0c1d382a2H
+ DD 0c011e895H
+ DD 0cb4dafa8H
+ DD 0ca8fc59fH
+ DD 0c8c97bc6H
+ DD 0c90b11f1H
+ DD 0cc440774H
+ DD 0cd866d43H
+ DD 0cfc0d31aH
+ DD 0ce02b92dH
+ DD 091af9640H
+ DD 0906dfc77H
+ DD 0922b422eH
+ DD 093e92819H
+ DD 096a63e9cH
+ DD 0976454abH
+ DD 09522eaf2H
+ DD 094e080c5H
+ DD 09fbcc7f8H
+ DD 09e7eadcfH
+ DD 09c381396H
+ DD 09dfa79a1H
+ DD 098b56f24H
+ DD 099770513H
+ DD 09b31bb4aH
+ DD 09af3d17dH
+ DD 08d893530H
+ DD 08c4b5f07H
+ DD 08e0de15eH
+ DD 08fcf8b69H
+ DD 08a809decH
+ DD 08b42f7dbH
+ DD 089044982H
+ DD 088c623b5H
+ DD 0839a6488H
+ DD 082580ebfH
+ DD 0801eb0e6H
+ DD 081dcdad1H
+ DD 08493cc54H
+ DD 08551a663H
+ DD 08717183aH
+ DD 086d5720dH
+ DD 0a9e2d0a0H
+ DD 0a820ba97H
+ DD 0aa6604ceH
+ DD 0aba46ef9H
+ DD 0aeeb787cH
+ DD 0af29124bH
+ DD 0ad6fac12H
+ DD 0acadc625H
+ DD 0a7f18118H
+ DD 0a633eb2fH
+ DD 0a4755576H
+ DD 0a5b73f41H
+ DD 0a0f829c4H
+ DD 0a13a43f3H
+ DD 0a37cfdaaH
+ DD 0a2be979dH
+ DD 0b5c473d0H
+ DD 0b40619e7H
+ DD 0b640a7beH
+ DD 0b782cd89H
+ DD 0b2cddb0cH
+ DD 0b30fb13bH
+ DD 0b1490f62H
+ DD 0b08b6555H
+ DD 0bbd72268H
+ DD 0ba15485fH
+ DD 0b853f606H
+ DD 0b9919c31H
+ DD 0bcde8ab4H
+ DD 0bd1ce083H
+ DD 0bf5a5edaH
+ DD 0be9834edH
+ DD 00H
+ DD 0b8bc6765H
+ DD 0aa09c88bH
+ DD 012b5afeeH
+ DD 08f629757H
+ DD 037def032H
+ DD 0256b5fdcH
+ DD 09dd738b9H
+ DD 0c5b428efH
+ DD 07d084f8aH
+ DD 06fbde064H
+ DD 0d7018701H
+ DD 04ad6bfb8H
+ DD 0f26ad8ddH
+ DD 0e0df7733H
+ DD 058631056H
+ DD 05019579fH
+ DD 0e8a530faH
+ DD 0fa109f14H
+ DD 042acf871H
+ DD 0df7bc0c8H
+ DD 067c7a7adH
+ DD 075720843H
+ DD 0cdce6f26H
+ DD 095ad7f70H
+ DD 02d111815H
+ DD 03fa4b7fbH
+ DD 08718d09eH
+ DD 01acfe827H
+ DD 0a2738f42H
+ DD 0b0c620acH
+ DD 087a47c9H
+ DD 0a032af3eH
+ DD 0188ec85bH
+ DD 0a3b67b5H
+ DD 0b28700d0H
+ DD 02f503869H
+ DD 097ec5f0cH
+ DD 08559f0e2H
+ DD 03de59787H
+ DD 0658687d1H
+ DD 0dd3ae0b4H
+ DD 0cf8f4f5aH
+ DD 07733283fH
+ DD 0eae41086H
+ DD 0525877e3H
+ DD 040edd80dH
+ DD 0f851bf68H
+ DD 0f02bf8a1H
+ DD 048979fc4H
+ DD 05a22302aH
+ DD 0e29e574fH
+ DD 07f496ff6H
+ DD 0c7f50893H
+ DD 0d540a77dH
+ DD 06dfcc018H
+ DD 0359fd04eH
+ DD 08d23b72bH
+ DD 09f9618c5H
+ DD 0272a7fa0H
+ DD 0bafd4719H
+ DD 0241207cH
+ DD 010f48f92H
+ DD 0a848e8f7H
+ DD 09b14583dH
+ DD 023a83f58H
+ DD 0311d90b6H
+ DD 089a1f7d3H
+ DD 01476cf6aH
+ DD 0accaa80fH
+ DD 0be7f07e1H
+ DD 06c36084H
+ DD 05ea070d2H
+ DD 0e61c17b7H
+ DD 0f4a9b859H
+ DD 04c15df3cH
+ DD 0d1c2e785H
+ DD 0697e80e0H
+ DD 07bcb2f0eH
+ DD 0c377486bH
+ DD 0cb0d0fa2H
+ DD 073b168c7H
+ DD 06104c729H
+ DD 0d9b8a04cH
+ DD 0446f98f5H
+ DD 0fcd3ff90H
+ DD 0ee66507eH
+ DD 056da371bH
+ DD 0eb9274dH
+ DD 0b6054028H
+ DD 0a4b0efc6H
+ DD 01c0c88a3H
+ DD 081dbb01aH
+ DD 03967d77fH
+ DD 02bd27891H
+ DD 0936e1ff4H
+ DD 03b26f703H
+ DD 0839a9066H
+ DD 0912f3f88H
+ DD 0299358edH
+ DD 0b4446054H
+ DD 0cf80731H
+ DD 01e4da8dfH
+ DD 0a6f1cfbaH
+ DD 0fe92dfecH
+ DD 0462eb889H
+ DD 0549b1767H
+ DD 0ec277002H
+ DD 071f048bbH
+ DD 0c94c2fdeH
+ DD 0dbf98030H
+ DD 06345e755H
+ DD 06b3fa09cH
+ DD 0d383c7f9H
+ DD 0c1366817H
+ DD 0798a0f72H
+ DD 0e45d37cbH
+ DD 05ce150aeH
+ DD 04e54ff40H
+ DD 0f6e89825H
+ DD 0ae8b8873H
+ DD 01637ef16H
+ DD 048240f8H
+ DD 0bc3e279dH
+ DD 021e91f24H
+ DD 099557841H
+ DD 08be0d7afH
+ DD 0335cb0caH
+ DD 0ed59b63bH
+ DD 055e5d15eH
+ DD 047507eb0H
+ DD 0ffec19d5H
+ DD 0623b216cH
+ DD 0da874609H
+ DD 0c832e9e7H
+ DD 0708e8e82H
+ DD 028ed9ed4H
+ DD 09051f9b1H
+ DD 082e4565fH
+ DD 03a58313aH
+ DD 0a78f0983H
+ DD 01f336ee6H
+ DD 0d86c108H
+ DD 0b53aa66dH
+ DD 0bd40e1a4H
+ DD 05fc86c1H
+ DD 01749292fH
+ DD 0aff54e4aH
+ DD 0322276f3H
+ DD 08a9e1196H
+ DD 0982bbe78H
+ DD 02097d91dH
+ DD 078f4c94bH
+ DD 0c048ae2eH
+ DD 0d2fd01c0H
+ DD 06a4166a5H
+ DD 0f7965e1cH
+ DD 04f2a3979H
+ DD 05d9f9697H
+ DD 0e523f1f2H
+ DD 04d6b1905H
+ DD 0f5d77e60H
+ DD 0e762d18eH
+ DD 05fdeb6ebH
+ DD 0c2098e52H
+ DD 07ab5e937H
+ DD 0680046d9H
+ DD 0d0bc21bcH
+ DD 088df31eaH
+ DD 03063568fH
+ DD 022d6f961H
+ DD 09a6a9e04H
+ DD 07bda6bdH
+ DD 0bf01c1d8H
+ DD 0adb46e36H
+ DD 015080953H
+ DD 01d724e9aH
+ DD 0a5ce29ffH
+ DD 0b77b8611H
+ DD 0fc7e174H
+ DD 09210d9cdH
+ DD 02aacbea8H
+ DD 038191146H
+ DD 080a57623H
+ DD 0d8c66675H
+ DD 0607a0110H
+ DD 072cfaefeH
+ DD 0ca73c99bH
+ DD 057a4f122H
+ DD 0ef189647H
+ DD 0fdad39a9H
+ DD 045115eccH
+ DD 0764dee06H
+ DD 0cef18963H
+ DD 0dc44268dH
+ DD 064f841e8H
+ DD 0f92f7951H
+ DD 041931e34H
+ DD 05326b1daH
+ DD 0eb9ad6bfH
+ DD 0b3f9c6e9H
+ DD 0b45a18cH
+ DD 019f00e62H
+ DD 0a14c6907H
+ DD 03c9b51beH
+ DD 0842736dbH
+ DD 096929935H
+ DD 02e2efe50H
+ DD 02654b999H
+ DD 09ee8defcH
+ DD 08c5d7112H
+ DD 034e11677H
+ DD 0a9362eceH
+ DD 0118a49abH
+ DD 033fe645H
+ DD 0bb838120H
+ DD 0e3e09176H
+ DD 05b5cf613H
+ DD 049e959fdH
+ DD 0f1553e98H
+ DD 06c820621H
+ DD 0d43e6144H
+ DD 0c68bceaaH
+ DD 07e37a9cfH
+ DD 0d67f4138H
+ DD 06ec3265dH
+ DD 07c7689b3H
+ DD 0c4caeed6H
+ DD 0591dd66fH
+ DD 0e1a1b10aH
+ DD 0f3141ee4H
+ DD 04ba87981H
+ DD 013cb69d7H
+ DD 0ab770eb2H
+ DD 0b9c2a15cH
+ DD 017ec639H
+ DD 09ca9fe80H
+ DD 0241599e5H
+ DD 036a0360bH
+ DD 08e1c516eH
+ DD 0866616a7H
+ DD 03eda71c2H
+ DD 02c6fde2cH
+ DD 094d3b949H
+ DD 090481f0H
+ DD 0b1b8e695H
+ DD 0a30d497bH
+ DD 01bb12e1eH
+ DD 043d23e48H
+ DD 0fb6e592dH
+ DD 0e9dbf6c3H
+ DD 0516791a6H
+ DD 0ccb0a91fH
+ DD 0740cce7aH
+ DD 066b96194H
+ DD 0de0506f1H
+ DD 00H
+ DD 096300777H
+ DD 02c610eeeH
+ DD 0ba510999H
+ DD 019c46d07H
+ DD 08ff46a70H
+ DD 035a563e9H
+ DD 0a395649eH
+ DD 03288db0eH
+ DD 0a4b8dc79H
+ DD 01ee9d5e0H
+ DD 088d9d297H
+ DD 02b4cb609H
+ DD 0bd7cb17eH
+ DD 072db8e7H
+ DD 0911dbf90H
+ DD 06410b71dH
+ DD 0f220b06aH
+ DD 04871b9f3H
+ DD 0de41be84H
+ DD 07dd4da1aH
+ DD 0ebe4dd6dH
+ DD 051b5d4f4H
+ DD 0c785d383H
+ DD 056986c13H
+ DD 0c0a86b64H
+ DD 07af962fdH
+ DD 0ecc9658aH
+ DD 04f5c0114H
+ DD 0d96c0663H
+ DD 0633d0ffaH
+ DD 0f50d088dH
+ DD 0c8206e3bH
+ DD 05e10694cH
+ DD 0e44160d5H
+ DD 0727167a2H
+ DD 0d1e4033cH
+ DD 047d4044bH
+ DD 0fd850dd2H
+ DD 06bb50aa5H
+ DD 0faa8b535H
+ DD 06c98b242H
+ DD 0d6c9bbdbH
+ DD 040f9bcacH
+ DD 0e36cd832H
+ DD 0755cdf45H
+ DD 0cf0dd6dcH
+ DD 0593dd1abH
+ DD 0ac30d926H
+ DD 03a00de51H
+ DD 08051d7c8H
+ DD 01661d0bfH
+ DD 0b5f4b421H
+ DD 023c4b356H
+ DD 09995bacfH
+ DD 0fa5bdb8H
+ DD 09eb80228H
+ DD 0888055fH
+ DD 0b2d90cc6H
+ DD 024e90bb1H
+ DD 0877c6f2fH
+ DD 0114c6858H
+ DD 0ab1d61c1H
+ DD 03d2d66b6H
+ DD 09041dc76H
+ DD 0671db01H
+ DD 0bc20d298H
+ DD 02a10d5efH
+ DD 08985b171H
+ DD 01fb5b606H
+ DD 0a5e4bf9fH
+ DD 033d4b8e8H
+ DD 0a2c90778H
+ DD 034f9000fH
+ DD 08ea80996H
+ DD 018980ee1H
+ DD 0bb0d6a7fH
+ DD 02d3d6d08H
+ DD 0976c6491H
+ DD 015c63e6H
+ DD 0f4516b6bH
+ DD 062616c1cH
+ DD 0d8306585H
+ DD 04e0062f2H
+ DD 0ed95066cH
+ DD 07ba5011bH
+ DD 0c1f40882H
+ DD 057c40ff5H
+ DD 0c6d9b065H
+ DD 050e9b712H
+ DD 0eab8be8bH
+ DD 07c88b9fcH
+ DD 0df1ddd62H
+ DD 0492dda15H
+ DD 0f37cd38cH
+ DD 0654cd4fbH
+ DD 05861b24dH
+ DD 0ce51b53aH
+ DD 07400bca3H
+ DD 0e230bbd4H
+ DD 041a5df4aH
+ DD 0d795d83dH
+ DD 06dc4d1a4H
+ DD 0fbf4d6d3H
+ DD 06ae96943H
+ DD 0fcd96e34H
+ DD 0468867adH
+ DD 0d0b860daH
+ DD 0732d0444H
+ DD 0e51d0333H
+ DD 05f4c0aaaH
+ DD 0c97c0dddH
+ DD 03c710550H
+ DD 0aa410227H
+ DD 010100bbeH
+ DD 086200cc9H
+ DD 025b56857H
+ DD 0b3856f20H
+ DD 09d466b9H
+ DD 09fe461ceH
+ DD 0ef9de5eH
+ DD 098c9d929H
+ DD 02298d0b0H
+ DD 0b4a8d7c7H
+ DD 0173db359H
+ DD 0810db42eH
+ DD 03b5cbdb7H
+ DD 0ad6cbac0H
+ DD 02083b8edH
+ DD 0b6b3bf9aH
+ DD 0ce2b603H
+ DD 09ad2b174H
+ DD 03947d5eaH
+ DD 0af77d29dH
+ DD 01526db04H
+ DD 08316dc73H
+ DD 0120b63e3H
+ DD 0843b6494H
+ DD 03e6a6d0dH
+ DD 0a85a6a7aH
+ DD 0bcf0ee4H
+ DD 09dff0993H
+ DD 027ae000aH
+ DD 0b19e077dH
+ DD 044930ff0H
+ DD 0d2a30887H
+ DD 068f2011eH
+ DD 0fec20669H
+ DD 05d5762f7H
+ DD 0cb676580H
+ DD 071366c19H
+ DD 0e7066b6eH
+ DD 0761bd4feH
+ DD 0e02bd389H
+ DD 05a7ada10H
+ DD 0cc4add67H
+ DD 06fdfb9f9H
+ DD 0f9efbe8eH
+ DD 043beb717H
+ DD 0d58eb060H
+ DD 0e8a3d6d6H
+ DD 07e93d1a1H
+ DD 0c4c2d838H
+ DD 052f2df4fH
+ DD 0f167bbd1H
+ DD 06757bca6H
+ DD 0dd06b53fH
+ DD 04b36b248H
+ DD 0da2b0dd8H
+ DD 04c1b0aafH
+ DD 0f64a0336H
+ DD 0607a0441H
+ DD 0c3ef60dfH
+ DD 055df67a8H
+ DD 0ef8e6e31H
+ DD 079be6946H
+ DD 08cb361cbH
+ DD 01a8366bcH
+ DD 0a0d26f25H
+ DD 036e26852H
+ DD 095770cccH
+ DD 03470bbbH
+ DD 0b9160222H
+ DD 02f260555H
+ DD 0be3bbac5H
+ DD 0280bbdb2H
+ DD 0925ab42bH
+ DD 046ab35cH
+ DD 0a7ffd7c2H
+ DD 031cfd0b5H
+ DD 08b9ed92cH
+ DD 01daede5bH
+ DD 0b0c2649bH
+ DD 026f263ecH
+ DD 09ca36a75H
+ DD 0a936d02H
+ DD 0a906099cH
+ DD 03f360eebH
+ DD 085670772H
+ DD 013570005H
+ DD 0824abf95H
+ DD 0147ab8e2H
+ DD 0ae2bb17bH
+ DD 0381bb60cH
+ DD 09b8ed292H
+ DD 0dbed5e5H
+ DD 0b7efdc7cH
+ DD 021dfdb0bH
+ DD 0d4d2d386H
+ DD 042e2d4f1H
+ DD 0f8b3dd68H
+ DD 06e83da1fH
+ DD 0cd16be81H
+ DD 05b26b9f6H
+ DD 0e177b06fH
+ DD 07747b718H
+ DD 0e65a0888H
+ DD 0706a0fffH
+ DD 0ca3b0666H
+ DD 05c0b0111H
+ DD 0ff9e658fH
+ DD 069ae62f8H
+ DD 0d3ff6b61H
+ DD 045cf6c16H
+ DD 078e20aa0H
+ DD 0eed20dd7H
+ DD 05483044eH
+ DD 0c2b30339H
+ DD 0612667a7H
+ DD 0f71660d0H
+ DD 04d476949H
+ DD 0db776e3eH
+ DD 04a6ad1aeH
+ DD 0dc5ad6d9H
+ DD 0660bdf40H
+ DD 0f03bd837H
+ DD 053aebca9H
+ DD 0c59ebbdeH
+ DD 07fcfb247H
+ DD 0e9ffb530H
+ DD 01cf2bdbdH
+ DD 08ac2bacaH
+ DD 03093b353H
+ DD 0a6a3b424H
+ DD 0536d0baH
+ DD 09306d7cdH
+ DD 02957de54H
+ DD 0bf67d923H
+ DD 02e7a66b3H
+ DD 0b84a61c4H
+ DD 021b685dH
+ DD 0942b6f2aH
+ DD 037be0bb4H
+ DD 0a18e0cc3H
+ DD 01bdf055aH
+ DD 08def022dH
+ DD 00H
+ DD 041311b19H
+ DD 082623632H
+ DD 0c3532d2bH
+ DD 04c56c64H
+ DD 045f4777dH
+ DD 086a75a56H
+ DD 0c796414fH
+ DD 088ad9c8H
+ DD 049bbc2d1H
+ DD 08ae8effaH
+ DD 0cbd9f4e3H
+ DD 0c4fb5acH
+ DD 04d7eaeb5H
+ DD 08e2d839eH
+ DD 0cf1c9887H
+ DD 05112c24aH
+ DD 01023d953H
+ DD 0d370f478H
+ DD 09241ef61H
+ DD 055d7ae2eH
+ DD 014e6b537H
+ DD 0d7b5981cH
+ DD 096848305H
+ DD 059981b82H
+ DD 018a9009bH
+ DD 0dbfa2db0H
+ DD 09acb36a9H
+ DD 05d5d77e6H
+ DD 01c6c6cffH
+ DD 0df3f41d4H
+ DD 09e0e5acdH
+ DD 0a2248495H
+ DD 0e3159f8cH
+ DD 02046b2a7H
+ DD 06177a9beH
+ DD 0a6e1e8f1H
+ DD 0e7d0f3e8H
+ DD 02483dec3H
+ DD 065b2c5daH
+ DD 0aaae5d5dH
+ DD 0eb9f4644H
+ DD 028cc6b6fH
+ DD 069fd7076H
+ DD 0ae6b3139H
+ DD 0ef5a2a20H
+ DD 02c09070bH
+ DD 06d381c12H
+ DD 0f33646dfH
+ DD 0b2075dc6H
+ DD 0715470edH
+ DD 030656bf4H
+ DD 0f7f32abbH
+ DD 0b6c231a2H
+ DD 075911c89H
+ DD 034a00790H
+ DD 0fbbc9f17H
+ DD 0ba8d840eH
+ DD 079dea925H
+ DD 038efb23cH
+ DD 0ff79f373H
+ DD 0be48e86aH
+ DD 07d1bc541H
+ DD 03c2ade58H
+ DD 054f79f0H
+ DD 0447e62e9H
+ DD 0872d4fc2H
+ DD 0c61c54dbH
+ DD 018a1594H
+ DD 040bb0e8dH
+ DD 083e823a6H
+ DD 0c2d938bfH
+ DD 0dc5a038H
+ DD 04cf4bb21H
+ DD 08fa7960aH
+ DD 0ce968d13H
+ DD 0900cc5cH
+ DD 04831d745H
+ DD 08b62fa6eH
+ DD 0ca53e177H
+ DD 0545dbbbaH
+ DD 0156ca0a3H
+ DD 0d63f8d88H
+ DD 0970e9691H
+ DD 05098d7deH
+ DD 011a9ccc7H
+ DD 0d2fae1ecH
+ DD 093cbfaf5H
+ DD 05cd76272H
+ DD 01de6796bH
+ DD 0deb55440H
+ DD 09f844f59H
+ DD 058120e16H
+ DD 01923150fH
+ DD 0da703824H
+ DD 09b41233dH
+ DD 0a76bfd65H
+ DD 0e65ae67cH
+ DD 02509cb57H
+ DD 06438d04eH
+ DD 0a3ae9101H
+ DD 0e29f8a18H
+ DD 021cca733H
+ DD 060fdbc2aH
+ DD 0afe124adH
+ DD 0eed03fb4H
+ DD 02d83129fH
+ DD 06cb20986H
+ DD 0ab2448c9H
+ DD 0ea1553d0H
+ DD 029467efbH
+ DD 0687765e2H
+ DD 0f6793f2fH
+ DD 0b7482436H
+ DD 0741b091dH
+ DD 0352a1204H
+ DD 0f2bc534bH
+ DD 0b38d4852H
+ DD 070de6579H
+ DD 031ef7e60H
+ DD 0fef3e6e7H
+ DD 0bfc2fdfeH
+ DD 07c91d0d5H
+ DD 03da0cbccH
+ DD 0fa368a83H
+ DD 0bb07919aH
+ DD 07854bcb1H
+ DD 03965a7a8H
+ DD 04b98833bH
+ DD 0aa99822H
+ DD 0c9fab509H
+ DD 088cbae10H
+ DD 04f5def5fH
+ DD 0e6cf446H
+ DD 0cd3fd96dH
+ DD 08c0ec274H
+ DD 043125af3H
+ DD 022341eaH
+ DD 0c1706cc1H
+ DD 0804177d8H
+ DD 047d73697H
+ DD 06e62d8eH
+ DD 0c5b500a5H
+ DD 084841bbcH
+ DD 01a8a4171H
+ DD 05bbb5a68H
+ DD 098e87743H
+ DD 0d9d96c5aH
+ DD 01e4f2d15H
+ DD 05f7e360cH
+ DD 09c2d1b27H
+ DD 0dd1c003eH
+ DD 0120098b9H
+ DD 0533183a0H
+ DD 09062ae8bH
+ DD 0d153b592H
+ DD 016c5f4ddH
+ DD 057f4efc4H
+ DD 094a7c2efH
+ DD 0d596d9f6H
+ DD 0e9bc07aeH
+ DD 0a88d1cb7H
+ DD 06bde319cH
+ DD 02aef2a85H
+ DD 0ed796bcaH
+ DD 0ac4870d3H
+ DD 06f1b5df8H
+ DD 02e2a46e1H
+ DD 0e136de66H
+ DD 0a007c57fH
+ DD 06354e854H
+ DD 02265f34dH
+ DD 0e5f3b202H
+ DD 0a4c2a91bH
+ DD 067918430H
+ DD 026a09f29H
+ DD 0b8aec5e4H
+ DD 0f99fdefdH
+ DD 03accf3d6H
+ DD 07bfde8cfH
+ DD 0bc6ba980H
+ DD 0fd5ab299H
+ DD 03e099fb2H
+ DD 07f3884abH
+ DD 0b0241c2cH
+ DD 0f1150735H
+ DD 032462a1eH
+ DD 073773107H
+ DD 0b4e17048H
+ DD 0f5d06b51H
+ DD 03683467aH
+ DD 077b25d63H
+ DD 04ed7facbH
+ DD 0fe6e1d2H
+ DD 0ccb5ccf9H
+ DD 08d84d7e0H
+ DD 04a1296afH
+ DD 0b238db6H
+ DD 0c870a09dH
+ DD 08941bb84H
+ DD 0465d2303H
+ DD 076c381aH
+ DD 0c43f1531H
+ DD 0850e0e28H
+ DD 042984f67H
+ DD 03a9547eH
+ DD 0c0fa7955H
+ DD 081cb624cH
+ DD 01fc53881H
+ DD 05ef42398H
+ DD 09da70eb3H
+ DD 0dc9615aaH
+ DD 01b0054e5H
+ DD 05a314ffcH
+ DD 0996262d7H
+ DD 0d85379ceH
+ DD 0174fe149H
+ DD 0567efa50H
+ DD 0952dd77bH
+ DD 0d41ccc62H
+ DD 0138a8d2dH
+ DD 052bb9634H
+ DD 091e8bb1fH
+ DD 0d0d9a006H
+ DD 0ecf37e5eH
+ DD 0adc26547H
+ DD 06e91486cH
+ DD 02fa05375H
+ DD 0e836123aH
+ DD 0a9070923H
+ DD 06a542408H
+ DD 02b653f11H
+ DD 0e479a796H
+ DD 0a548bc8fH
+ DD 0661b91a4H
+ DD 0272a8abdH
+ DD 0e0bccbf2H
+ DD 0a18dd0ebH
+ DD 062defdc0H
+ DD 023efe6d9H
+ DD 0bde1bc14H
+ DD 0fcd0a70dH
+ DD 03f838a26H
+ DD 07eb2913fH
+ DD 0b924d070H
+ DD 0f815cb69H
+ DD 03b46e642H
+ DD 07a77fd5bH
+ DD 0b56b65dcH
+ DD 0f45a7ec5H
+ DD 0370953eeH
+ DD 0763848f7H
+ DD 0b1ae09b8H
+ DD 0f09f12a1H
+ DD 033cc3f8aH
+ DD 072fd2493H
+ DD 00H
+ DD 0376ac201H
+ DD 06ed48403H
+ DD 059be4602H
+ DD 0dca80907H
+ DD 0ebc2cb06H
+ DD 0b27c8d04H
+ DD 085164f05H
+ DD 0b851130eH
+ DD 08f3bd10fH
+ DD 0d685970dH
+ DD 0e1ef550cH
+ DD 064f91a09H
+ DD 05393d808H
+ DD 0a2d9e0aH
+ DD 03d475c0bH
+ DD 070a3261cH
+ DD 047c9e41dH
+ DD 01e77a21fH
+ DD 0291d601eH
+ DD 0ac0b2f1bH
+ DD 09b61ed1aH
+ DD 0c2dfab18H
+ DD 0f5b56919H
+ DD 0c8f23512H
+ DD 0ff98f713H
+ DD 0a626b111H
+ DD 0914c7310H
+ DD 0145a3c15H
+ DD 02330fe14H
+ DD 07a8eb816H
+ DD 04de47a17H
+ DD 0e0464d38H
+ DD 0d72c8f39H
+ DD 08e92c93bH
+ DD 0b9f80b3aH
+ DD 03cee443fH
+ DD 0b84863eH
+ DD 0523ac03cH
+ DD 06550023dH
+ DD 058175e36H
+ DD 06f7d9c37H
+ DD 036c3da35H
+ DD 01a91834H
+ DD 084bf5731H
+ DD 0b3d59530H
+ DD 0ea6bd332H
+ DD 0dd011133H
+ DD 090e56b24H
+ DD 0a78fa925H
+ DD 0fe31ef27H
+ DD 0c95b2d26H
+ DD 04c4d6223H
+ DD 07b27a022H
+ DD 02299e620H
+ DD 015f32421H
+ DD 028b4782aH
+ DD 01fdeba2bH
+ DD 04660fc29H
+ DD 0710a3e28H
+ DD 0f41c712dH
+ DD 0c376b32cH
+ DD 09ac8f52eH
+ DD 0ada2372fH
+ DD 0c08d9a70H
+ DD 0f7e75871H
+ DD 0ae591e73H
+ DD 09933dc72H
+ DD 01c259377H
+ DD 02b4f5176H
+ DD 072f11774H
+ DD 0459bd575H
+ DD 078dc897eH
+ DD 04fb64b7fH
+ DD 016080d7dH
+ DD 02162cf7cH
+ DD 0a4748079H
+ DD 0931e4278H
+ DD 0caa0047aH
+ DD 0fdcac67bH
+ DD 0b02ebc6cH
+ DD 087447e6dH
+ DD 0defa386fH
+ DD 0e990fa6eH
+ DD 06c86b56bH
+ DD 05bec776aH
+ DD 02523168H
+ DD 03538f369H
+ DD 087faf62H
+ DD 03f156d63H
+ DD 066ab2b61H
+ DD 051c1e960H
+ DD 0d4d7a665H
+ DD 0e3bd6464H
+ DD 0ba032266H
+ DD 08d69e067H
+ DD 020cbd748H
+ DD 017a11549H
+ DD 04e1f534bH
+ DD 07975914aH
+ DD 0fc63de4fH
+ DD 0cb091c4eH
+ DD 092b75a4cH
+ DD 0a5dd984dH
+ DD 0989ac446H
+ DD 0aff00647H
+ DD 0f64e4045H
+ DD 0c1248244H
+ DD 04432cd41H
+ DD 073580f40H
+ DD 02ae64942H
+ DD 01d8c8b43H
+ DD 05068f154H
+ DD 067023355H
+ DD 03ebc7557H
+ DD 09d6b756H
+ DD 08cc0f853H
+ DD 0bbaa3a52H
+ DD 0e2147c50H
+ DD 0d57ebe51H
+ DD 0e839e25aH
+ DD 0df53205bH
+ DD 086ed6659H
+ DD 0b187a458H
+ DD 03491eb5dH
+ DD 03fb295cH
+ DD 05a456f5eH
+ DD 06d2fad5fH
+ DD 0801b35e1H
+ DD 0b771f7e0H
+ DD 0eecfb1e2H
+ DD 0d9a573e3H
+ DD 05cb33ce6H
+ DD 06bd9fee7H
+ DD 03267b8e5H
+ DD 050d7ae4H
+ DD 0384a26efH
+ DD 0f20e4eeH
+ DD 0569ea2ecH
+ DD 061f460edH
+ DD 0e4e22fe8H
+ DD 0d388ede9H
+ DD 08a36abebH
+ DD 0bd5c69eaH
+ DD 0f0b813fdH
+ DD 0c7d2d1fcH
+ DD 09e6c97feH
+ DD 0a90655ffH
+ DD 02c101afaH
+ DD 01b7ad8fbH
+ DD 042c49ef9H
+ DD 075ae5cf8H
+ DD 048e900f3H
+ DD 07f83c2f2H
+ DD 0263d84f0H
+ DD 0115746f1H
+ DD 0944109f4H
+ DD 0a32bcbf5H
+ DD 0fa958df7H
+ DD 0cdff4ff6H
+ DD 0605d78d9H
+ DD 05737bad8H
+ DD 0e89fcdaH
+ DD 039e33edbH
+ DD 0bcf571deH
+ DD 08b9fb3dfH
+ DD 0d221f5ddH
+ DD 0e54b37dcH
+ DD 0d80c6bd7H
+ DD 0ef66a9d6H
+ DD 0b6d8efd4H
+ DD 081b22dd5H
+ DD 04a462d0H
+ DD 033cea0d1H
+ DD 06a70e6d3H
+ DD 05d1a24d2H
+ DD 010fe5ec5H
+ DD 027949cc4H
+ DD 07e2adac6H
+ DD 0494018c7H
+ DD 0cc5657c2H
+ DD 0fb3c95c3H
+ DD 0a282d3c1H
+ DD 095e811c0H
+ DD 0a8af4dcbH
+ DD 09fc58fcaH
+ DD 0c67bc9c8H
+ DD 0f1110bc9H
+ DD 0740744ccH
+ DD 0436d86cdH
+ DD 01ad3c0cfH
+ DD 02db902ceH
+ DD 04096af91H
+ DD 077fc6d90H
+ DD 02e422b92H
+ DD 01928e993H
+ DD 09c3ea696H
+ DD 0ab546497H
+ DD 0f2ea2295H
+ DD 0c580e094H
+ DD 0f8c7bc9fH
+ DD 0cfad7e9eH
+ DD 09613389cH
+ DD 0a179fa9dH
+ DD 0246fb598H
+ DD 013057799H
+ DD 04abb319bH
+ DD 07dd1f39aH
+ DD 03035898dH
+ DD 075f4b8cH
+ DD 05ee10d8eH
+ DD 0698bcf8fH
+ DD 0ec9d808aH
+ DD 0dbf7428bH
+ DD 082490489H
+ DD 0b523c688H
+ DD 088649a83H
+ DD 0bf0e5882H
+ DD 0e6b01e80H
+ DD 0d1dadc81H
+ DD 054cc9384H
+ DD 063a65185H
+ DD 03a181787H
+ DD 0d72d586H
+ DD 0a0d0e2a9H
+ DD 097ba20a8H
+ DD 0ce0466aaH
+ DD 0f96ea4abH
+ DD 07c78ebaeH
+ DD 04b1229afH
+ DD 012ac6fadH
+ DD 025c6adacH
+ DD 01881f1a7H
+ DD 02feb33a6H
+ DD 0765575a4H
+ DD 0413fb7a5H
+ DD 0c429f8a0H
+ DD 0f3433aa1H
+ DD 0aafd7ca3H
+ DD 09d97bea2H
+ DD 0d073c4b5H
+ DD 0e71906b4H
+ DD 0bea740b6H
+ DD 089cd82b7H
+ DD 0cdbcdb2H
+ DD 03bb10fb3H
+ DD 0620f49b1H
+ DD 055658bb0H
+ DD 06822d7bbH
+ DD 05f4815baH
+ DD 06f653b8H
+ DD 0319c91b9H
+ DD 0b48adebcH
+ DD 083e01cbdH
+ DD 0da5e5abfH
+ DD 0ed3498beH
+ DD 00H
+ DD 06567bcb8H
+ DD 08bc809aaH
+ DD 0eeafb512H
+ DD 05797628fH
+ DD 032f0de37H
+ DD 0dc5f6b25H
+ DD 0b938d79dH
+ DD 0ef28b4c5H
+ DD 08a4f087dH
+ DD 064e0bd6fH
+ DD 018701d7H
+ DD 0b8bfd64aH
+ DD 0ddd86af2H
+ DD 03377dfe0H
+ DD 056106358H
+ DD 09f571950H
+ DD 0fa30a5e8H
+ DD 0149f10faH
+ DD 071f8ac42H
+ DD 0c8c07bdfH
+ DD 0ada7c767H
+ DD 043087275H
+ DD 0266fcecdH
+ DD 0707fad95H
+ DD 01518112dH
+ DD 0fbb7a43fH
+ DD 09ed01887H
+ DD 027e8cf1aH
+ DD 0428f73a2H
+ DD 0ac20c6b0H
+ DD 0c9477a08H
+ DD 03eaf32a0H
+ DD 05bc88e18H
+ DD 0b5673b0aH
+ DD 0d00087b2H
+ DD 06938502fH
+ DD 0c5fec97H
+ DD 0e2f05985H
+ DD 08797e53dH
+ DD 0d1878665H
+ DD 0b4e03addH
+ DD 05a4f8fcfH
+ DD 03f283377H
+ DD 08610e4eaH
+ DD 0e3775852H
+ DD 0dd8ed40H
+ DD 068bf51f8H
+ DD 0a1f82bf0H
+ DD 0c49f9748H
+ DD 02a30225aH
+ DD 04f579ee2H
+ DD 0f66f497fH
+ DD 09308f5c7H
+ DD 07da740d5H
+ DD 018c0fc6dH
+ DD 04ed09f35H
+ DD 02bb7238dH
+ DD 0c518969fH
+ DD 0a07f2a27H
+ DD 01947fdbaH
+ DD 07c204102H
+ DD 0928ff410H
+ DD 0f7e848a8H
+ DD 03d58149bH
+ DD 0583fa823H
+ DD 0b6901d31H
+ DD 0d3f7a189H
+ DD 06acf7614H
+ DD 0fa8caacH
+ DD 0e1077fbeH
+ DD 08460c306H
+ DD 0d270a05eH
+ DD 0b7171ce6H
+ DD 059b8a9f4H
+ DD 03cdf154cH
+ DD 085e7c2d1H
+ DD 0e0807e69H
+ DD 0e2fcb7bH
+ DD 06b4877c3H
+ DD 0a20f0dcbH
+ DD 0c768b173H
+ DD 029c70461H
+ DD 04ca0b8d9H
+ DD 0f5986f44H
+ DD 090ffd3fcH
+ DD 07e5066eeH
+ DD 01b37da56H
+ DD 04d27b90eH
+ DD 0284005b6H
+ DD 0c6efb0a4H
+ DD 0a3880c1cH
+ DD 01ab0db81H
+ DD 07fd76739H
+ DD 09178d22bH
+ DD 0f41f6e93H
+ DD 03f7263bH
+ DD 066909a83H
+ DD 0883f2f91H
+ DD 0ed589329H
+ DD 0546044b4H
+ DD 03107f80cH
+ DD 0dfa84d1eH
+ DD 0bacff1a6H
+ DD 0ecdf92feH
+ DD 089b82e46H
+ DD 067179b54H
+ DD 027027ecH
+ DD 0bb48f071H
+ DD 0de2f4cc9H
+ DD 03080f9dbH
+ DD 055e74563H
+ DD 09ca03f6bH
+ DD 0f9c783d3H
+ DD 0176836c1H
+ DD 0720f8a79H
+ DD 0cb375de4H
+ DD 0ae50e15cH
+ DD 040ff544eH
+ DD 02598e8f6H
+ DD 073888baeH
+ DD 016ef3716H
+ DD 0f8408204H
+ DD 09d273ebcH
+ DD 0241fe921H
+ DD 041785599H
+ DD 0afd7e08bH
+ DD 0cab05c33H
+ DD 03bb659edH
+ DD 05ed1e555H
+ DD 0b07e5047H
+ DD 0d519ecffH
+ DD 06c213b62H
+ DD 094687daH
+ DD 0e7e932c8H
+ DD 0828e8e70H
+ DD 0d49eed28H
+ DD 0b1f95190H
+ DD 05f56e482H
+ DD 03a31583aH
+ DD 083098fa7H
+ DD 0e66e331fH
+ DD 08c1860dH
+ DD 06da63ab5H
+ DD 0a4e140bdH
+ DD 0c186fc05H
+ DD 02f294917H
+ DD 04a4ef5afH
+ DD 0f3762232H
+ DD 096119e8aH
+ DD 078be2b98H
+ DD 01dd99720H
+ DD 04bc9f478H
+ DD 02eae48c0H
+ DD 0c001fdd2H
+ DD 0a566416aH
+ DD 01c5e96f7H
+ DD 079392a4fH
+ DD 097969f5dH
+ DD 0f2f123e5H
+ DD 05196b4dH
+ DD 0607ed7f5H
+ DD 08ed162e7H
+ DD 0ebb6de5fH
+ DD 0528e09c2H
+ DD 037e9b57aH
+ DD 0d9460068H
+ DD 0bc21bcd0H
+ DD 0ea31df88H
+ DD 08f566330H
+ DD 061f9d622H
+ DD 049e6a9aH
+ DD 0bda6bd07H
+ DD 0d8c101bfH
+ DD 0366eb4adH
+ DD 053090815H
+ DD 09a4e721dH
+ DD 0ff29cea5H
+ DD 011867bb7H
+ DD 074e1c70fH
+ DD 0cdd91092H
+ DD 0a8beac2aH
+ DD 046111938H
+ DD 02376a580H
+ DD 07566c6d8H
+ DD 010017a60H
+ DD 0feaecf72H
+ DD 09bc973caH
+ DD 022f1a457H
+ DD 0479618efH
+ DD 0a939adfdH
+ DD 0cc5e1145H
+ DD 06ee4d76H
+ DD 06389f1ceH
+ DD 08d2644dcH
+ DD 0e841f864H
+ DD 051792ff9H
+ DD 0341e9341H
+ DD 0dab12653H
+ DD 0bfd69aebH
+ DD 0e9c6f9b3H
+ DD 08ca1450bH
+ DD 0620ef019H
+ DD 07694ca1H
+ DD 0be519b3cH
+ DD 0db362784H
+ DD 035999296H
+ DD 050fe2e2eH
+ DD 099b95426H
+ DD 0fcdee89eH
+ DD 012715d8cH
+ DD 07716e134H
+ DD 0ce2e36a9H
+ DD 0ab498a11H
+ DD 045e63f03H
+ DD 0208183bbH
+ DD 07691e0e3H
+ DD 013f65c5bH
+ DD 0fd59e949H
+ DD 0983e55f1H
+ DD 02106826cH
+ DD 044613ed4H
+ DD 0aace8bc6H
+ DD 0cfa9377eH
+ DD 038417fd6H
+ DD 05d26c36eH
+ DD 0b389767cH
+ DD 0d6eecac4H
+ DD 06fd61d59H
+ DD 0ab1a1e1H
+ DD 0e41e14f3H
+ DD 08179a84bH
+ DD 0d769cb13H
+ DD 0b20e77abH
+ DD 05ca1c2b9H
+ DD 039c67e01H
+ DD 080fea99cH
+ DD 0e5991524H
+ DD 0b36a036H
+ DD 06e511c8eH
+ DD 0a7166686H
+ DD 0c271da3eH
+ DD 02cde6f2cH
+ DD 049b9d394H
+ DD 0f0810409H
+ DD 095e6b8b1H
+ DD 07b490da3H
+ DD 01e2eb11bH
+ DD 0483ed243H
+ DD 02d596efbH
+ DD 0c3f6dbe9H
+ DD 0a6916751H
+ DD 01fa9b0ccH
+ DD 07ace0c74H
+ DD 09461b966H
+ DD 0f10605deH
+PUBLIC _crc32_combine@12
+PUBLIC _crc32@12
+PUBLIC _get_crc_table@0
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\crc32.c
+; COMDAT _get_crc_table@0
+_TEXT SEGMENT
+_get_crc_table@0 PROC ; COMDAT
+
+; 192 : #ifdef DYNAMIC_CRC_TABLE
+; 193 : if (crc_table_empty)
+; 194 : make_crc_table();
+; 195 : #endif /* DYNAMIC_CRC_TABLE */
+; 196 : return (const z_crc_t FAR *)crc_table;
+
+ 00000 b8 00 00 00 00 mov eax, OFFSET _crc_table
+
+; 197 : }
+
+ 00005 c3 ret 0
+_get_crc_table@0 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\crc32.c
+; COMDAT _crc32@12
+_TEXT SEGMENT
+_crc$ = 8 ; size = 4
+_buf$ = 12 ; size = 4
+_len$ = 16 ; size = 4
+_crc32@12 PROC ; COMDAT
+
+; 208 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 209 : if (buf == Z_NULL) return 0UL;
+
+ 00003 8b 55 0c mov edx, DWORD PTR _buf$[ebp]
+ 00006 85 d2 test edx, edx
+ 00008 75 06 jne SHORT $LN7@crc32
+ 0000a 33 c0 xor eax, eax
+
+; 223 : else
+; 224 : return crc32_big(crc, buf, len);
+; 225 : }
+; 226 : #endif /* BYFOUR */
+; 227 : crc = crc ^ 0xffffffffUL;
+; 228 : while (len >= 8) {
+; 229 : DO8;
+; 230 : len -= 8;
+; 231 : }
+; 232 : if (len) do {
+; 233 : DO1;
+; 234 : } while (--len);
+; 235 : return crc ^ 0xffffffffUL;
+; 236 : }
+
+ 0000c 5d pop ebp
+ 0000d c2 0c 00 ret 12 ; 0000000cH
+$LN7@crc32:
+
+; 210 :
+; 211 : #ifdef DYNAMIC_CRC_TABLE
+; 212 : if (crc_table_empty)
+; 213 : make_crc_table();
+; 214 : #endif /* DYNAMIC_CRC_TABLE */
+; 215 :
+; 216 : #ifdef BYFOUR
+; 217 : if (sizeof(void *) == sizeof(ptrdiff_t)) {
+; 218 : z_crc_t endian;
+; 219 :
+; 220 : endian = 1;
+; 221 : if (*((unsigned char *)(&endian)))
+; 222 : return crc32_little(crc, buf, len);
+
+ 00010 ff 75 10 push DWORD PTR _len$[ebp]
+ 00013 8b 4d 08 mov ecx, DWORD PTR _crc$[ebp]
+ 00016 e8 00 00 00 00 call _crc32_little
+ 0001b 83 c4 04 add esp, 4
+
+; 223 : else
+; 224 : return crc32_big(crc, buf, len);
+; 225 : }
+; 226 : #endif /* BYFOUR */
+; 227 : crc = crc ^ 0xffffffffUL;
+; 228 : while (len >= 8) {
+; 229 : DO8;
+; 230 : len -= 8;
+; 231 : }
+; 232 : if (len) do {
+; 233 : DO1;
+; 234 : } while (--len);
+; 235 : return crc ^ 0xffffffffUL;
+; 236 : }
+
+ 0001e 5d pop ebp
+ 0001f c2 0c 00 ret 12 ; 0000000cH
+_crc32@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\crc32.c
+; COMDAT _crc32_little
+_TEXT SEGMENT
+tv537 = -4 ; size = 4
+_buf$2$ = 8 ; size = 4
+_len$ = 8 ; size = 4
+_crc32_little PROC ; COMDAT
+; _crc$ = ecx
+; _buf$ = edx
+
+; 251 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 53 push ebx
+ 00005 57 push edi
+
+; 252 : register z_crc_t c;
+; 253 : register const z_crc_t FAR *buf4;
+; 254 :
+; 255 : c = (z_crc_t)crc;
+; 256 : c = ~c;
+; 257 : while (len && ((ptrdiff_t)buf & 3)) {
+
+ 00006 8b 7d 08 mov edi, DWORD PTR _len$[ebp]
+ 00009 8b da mov ebx, edx
+ 0000b f7 d1 not ecx
+ 0000d 85 ff test edi, edi
+ 0000f 74 1d je SHORT $LN28@crc32_litt
+$LL2@crc32_litt:
+ 00011 f6 c3 03 test bl, 3
+ 00014 74 18 je SHORT $LN28@crc32_litt
+
+; 258 : c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
+
+ 00016 0f b6 03 movzx eax, BYTE PTR [ebx]
+ 00019 43 inc ebx
+ 0001a 33 c1 xor eax, ecx
+ 0001c c1 e9 08 shr ecx, 8
+ 0001f 0f b6 c0 movzx eax, al
+ 00022 33 0c 85 00 00
+ 00 00 xor ecx, DWORD PTR _crc_table[eax*4]
+
+; 259 : len--;
+
+ 00029 83 ef 01 sub edi, 1
+ 0002c 75 e3 jne SHORT $LL2@crc32_litt
+$LN28@crc32_litt:
+ 0002e 56 push esi
+
+; 263 : while (len >= 32) {
+
+ 0002f 83 ff 20 cmp edi, 32 ; 00000020H
+ 00032 0f 82 de 01 00
+ 00 jb $LN15@crc32_litt
+
+; 260 : }
+; 261 :
+; 262 : buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
+
+ 00038 8b c7 mov eax, edi
+ 0003a c1 e8 05 shr eax, 5
+ 0003d 89 45 fc mov DWORD PTR tv537[ebp], eax
+$LL4@crc32_litt:
+
+; 264 : DOLIT32;
+
+ 00040 33 0b xor ecx, DWORD PTR [ebx]
+ 00042 8b c1 mov eax, ecx
+ 00044 c1 e8 10 shr eax, 16 ; 00000010H
+ 00047 0f b6 d0 movzx edx, al
+ 0004a 8b c1 mov eax, ecx
+ 0004c c1 e8 08 shr eax, 8
+ 0004f 0f b6 c0 movzx eax, al
+ 00052 8b 14 95 00 04
+ 00 00 mov edx, DWORD PTR _crc_table[edx*4+1024]
+ 00059 33 14 85 00 08
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4+2048]
+ 00060 8b c1 mov eax, ecx
+ 00062 c1 e8 18 shr eax, 24 ; 00000018H
+ 00065 33 14 85 00 00
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4]
+ 0006c 0f b6 c1 movzx eax, cl
+ 0006f 33 14 85 00 0c
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4+3072]
+ 00076 33 53 04 xor edx, DWORD PTR [ebx+4]
+ 00079 83 c3 08 add ebx, 8
+ 0007c 8b c2 mov eax, edx
+ 0007e 89 5d 08 mov DWORD PTR _buf$2$[ebp], ebx
+ 00081 c1 e8 10 shr eax, 16 ; 00000010H
+ 00084 0f b6 c8 movzx ecx, al
+ 00087 8b c2 mov eax, edx
+ 00089 c1 e8 08 shr eax, 8
+ 0008c 0f b6 c0 movzx eax, al
+ 0008f 8b 75 08 mov esi, DWORD PTR _buf$2$[ebp]
+ 00092 8b 1c 8d 00 04
+ 00 00 mov ebx, DWORD PTR _crc_table[ecx*4+1024]
+ 00099 33 1c 85 00 08
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4+2048]
+ 000a0 8b c2 mov eax, edx
+ 000a2 c1 e8 18 shr eax, 24 ; 00000018H
+ 000a5 33 1c 85 00 00
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4]
+ 000ac 0f b6 c2 movzx eax, dl
+ 000af 33 1c 85 00 0c
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4+3072]
+ 000b6 33 1e xor ebx, DWORD PTR [esi]
+ 000b8 8b c3 mov eax, ebx
+ 000ba c1 e8 10 shr eax, 16 ; 00000010H
+ 000bd 0f b6 c8 movzx ecx, al
+ 000c0 8b c3 mov eax, ebx
+ 000c2 c1 e8 08 shr eax, 8
+ 000c5 0f b6 c0 movzx eax, al
+ 000c8 8b 14 8d 00 04
+ 00 00 mov edx, DWORD PTR _crc_table[ecx*4+1024]
+ 000cf 33 14 85 00 08
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4+2048]
+ 000d6 8b c3 mov eax, ebx
+ 000d8 c1 e8 18 shr eax, 24 ; 00000018H
+ 000db 33 14 85 00 00
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4]
+ 000e2 0f b6 c3 movzx eax, bl
+ 000e5 33 14 85 00 0c
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4+3072]
+ 000ec 33 56 04 xor edx, DWORD PTR [esi+4]
+ 000ef 8b c2 mov eax, edx
+ 000f1 c1 e8 10 shr eax, 16 ; 00000010H
+ 000f4 0f b6 c8 movzx ecx, al
+ 000f7 8b c2 mov eax, edx
+ 000f9 c1 e8 08 shr eax, 8
+ 000fc 0f b6 c0 movzx eax, al
+ 000ff 8b 1c 8d 00 04
+ 00 00 mov ebx, DWORD PTR _crc_table[ecx*4+1024]
+ 00106 33 1c 85 00 08
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4+2048]
+ 0010d 8b c2 mov eax, edx
+ 0010f c1 e8 18 shr eax, 24 ; 00000018H
+ 00112 33 1c 85 00 00
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4]
+ 00119 0f b6 c2 movzx eax, dl
+ 0011c 33 1c 85 00 0c
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4+3072]
+ 00123 33 5e 08 xor ebx, DWORD PTR [esi+8]
+ 00126 8b c3 mov eax, ebx
+ 00128 c1 e8 10 shr eax, 16 ; 00000010H
+ 0012b 0f b6 c8 movzx ecx, al
+ 0012e 8b c3 mov eax, ebx
+ 00130 c1 e8 08 shr eax, 8
+ 00133 0f b6 c0 movzx eax, al
+ 00136 8b 14 8d 00 04
+ 00 00 mov edx, DWORD PTR _crc_table[ecx*4+1024]
+ 0013d 33 14 85 00 08
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4+2048]
+ 00144 8b c3 mov eax, ebx
+ 00146 c1 e8 18 shr eax, 24 ; 00000018H
+ 00149 33 14 85 00 00
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4]
+ 00150 0f b6 c3 movzx eax, bl
+ 00153 33 14 85 00 0c
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4+3072]
+ 0015a 33 56 0c xor edx, DWORD PTR [esi+12]
+ 0015d 8b c2 mov eax, edx
+ 0015f c1 e8 10 shr eax, 16 ; 00000010H
+ 00162 0f b6 c8 movzx ecx, al
+ 00165 8b c2 mov eax, edx
+ 00167 c1 e8 08 shr eax, 8
+ 0016a 0f b6 c0 movzx eax, al
+ 0016d 8b 1c 8d 00 04
+ 00 00 mov ebx, DWORD PTR _crc_table[ecx*4+1024]
+ 00174 33 1c 85 00 08
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4+2048]
+
+; 265 : len -= 32;
+
+ 0017b 83 ef 20 sub edi, 32 ; 00000020H
+ 0017e 8b c2 mov eax, edx
+ 00180 c1 e8 18 shr eax, 24 ; 00000018H
+ 00183 33 1c 85 00 00
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4]
+ 0018a 0f b6 c2 movzx eax, dl
+ 0018d 33 1c 85 00 0c
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4+3072]
+ 00194 33 5e 10 xor ebx, DWORD PTR [esi+16]
+ 00197 83 c6 14 add esi, 20 ; 00000014H
+ 0019a 8b c3 mov eax, ebx
+ 0019c 89 75 08 mov DWORD PTR _buf$2$[ebp], esi
+ 0019f c1 e8 10 shr eax, 16 ; 00000010H
+ 001a2 0f b6 c8 movzx ecx, al
+ 001a5 8b c3 mov eax, ebx
+ 001a7 c1 e8 08 shr eax, 8
+ 001aa 0f b6 c0 movzx eax, al
+ 001ad 8b 14 8d 00 04
+ 00 00 mov edx, DWORD PTR _crc_table[ecx*4+1024]
+ 001b4 33 14 85 00 08
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4+2048]
+ 001bb 8b c3 mov eax, ebx
+ 001bd c1 e8 18 shr eax, 24 ; 00000018H
+ 001c0 33 14 85 00 00
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4]
+ 001c7 0f b6 c3 movzx eax, bl
+ 001ca 8b de mov ebx, esi
+ 001cc 33 14 85 00 0c
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4+3072]
+ 001d3 33 13 xor edx, DWORD PTR [ebx]
+ 001d5 83 c3 04 add ebx, 4
+ 001d8 8b c2 mov eax, edx
+ 001da c1 e8 10 shr eax, 16 ; 00000010H
+ 001dd 0f b6 c8 movzx ecx, al
+ 001e0 8b c2 mov eax, edx
+ 001e2 c1 e8 08 shr eax, 8
+ 001e5 0f b6 c0 movzx eax, al
+ 001e8 8b 0c 8d 00 04
+ 00 00 mov ecx, DWORD PTR _crc_table[ecx*4+1024]
+ 001ef 33 0c 85 00 08
+ 00 00 xor ecx, DWORD PTR _crc_table[eax*4+2048]
+ 001f6 8b c2 mov eax, edx
+ 001f8 c1 e8 18 shr eax, 24 ; 00000018H
+ 001fb 33 0c 85 00 00
+ 00 00 xor ecx, DWORD PTR _crc_table[eax*4]
+ 00202 0f b6 c2 movzx eax, dl
+ 00205 33 0c 85 00 0c
+ 00 00 xor ecx, DWORD PTR _crc_table[eax*4+3072]
+ 0020c 83 6d fc 01 sub DWORD PTR tv537[ebp], 1
+ 00210 0f 85 2a fe ff
+ ff jne $LL4@crc32_litt
+$LN15@crc32_litt:
+
+; 266 : }
+; 267 : while (len >= 4) {
+
+ 00216 83 ff 04 cmp edi, 4
+ 00219 72 48 jb SHORT $LN7@crc32_litt
+ 0021b 8b f7 mov esi, edi
+ 0021d c1 ee 02 shr esi, 2
+$LL6@crc32_litt:
+
+; 268 : DOLIT4;
+
+ 00220 33 0b xor ecx, DWORD PTR [ebx]
+
+; 269 : len -= 4;
+
+ 00222 83 ef 04 sub edi, 4
+ 00225 8b c1 mov eax, ecx
+ 00227 83 c3 04 add ebx, 4
+ 0022a c1 e8 10 shr eax, 16 ; 00000010H
+ 0022d 0f b6 d0 movzx edx, al
+ 00230 8b c1 mov eax, ecx
+ 00232 c1 e8 08 shr eax, 8
+ 00235 0f b6 c0 movzx eax, al
+ 00238 8b 14 95 00 04
+ 00 00 mov edx, DWORD PTR _crc_table[edx*4+1024]
+ 0023f 33 14 85 00 08
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4+2048]
+ 00246 8b c1 mov eax, ecx
+ 00248 c1 e8 18 shr eax, 24 ; 00000018H
+ 0024b 33 14 85 00 00
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4]
+ 00252 0f b6 c1 movzx eax, cl
+ 00255 33 14 85 00 0c
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4+3072]
+ 0025c 8b ca mov ecx, edx
+ 0025e 83 ee 01 sub esi, 1
+ 00261 75 bd jne SHORT $LL6@crc32_litt
+$LN7@crc32_litt:
+ 00263 5e pop esi
+
+; 270 : }
+; 271 : buf = (const unsigned char FAR *)buf4;
+; 272 :
+; 273 : if (len) do {
+
+ 00264 85 ff test edi, edi
+ 00266 74 1a je SHORT $LN9@crc32_litt
+$LL10@crc32_litt:
+
+; 274 : c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
+
+ 00268 0f b6 03 movzx eax, BYTE PTR [ebx]
+ 0026b 8d 5b 01 lea ebx, DWORD PTR [ebx+1]
+ 0026e 33 c1 xor eax, ecx
+ 00270 c1 e9 08 shr ecx, 8
+ 00273 0f b6 c0 movzx eax, al
+ 00276 33 0c 85 00 00
+ 00 00 xor ecx, DWORD PTR _crc_table[eax*4]
+
+; 275 : } while (--len);
+
+ 0027d 83 ef 01 sub edi, 1
+ 00280 75 e6 jne SHORT $LL10@crc32_litt
+$LN9@crc32_litt:
+
+; 276 : c = ~c;
+
+ 00282 f7 d1 not ecx
+ 00284 5f pop edi
+
+; 277 : return (unsigned long)c;
+
+ 00285 8b c1 mov eax, ecx
+ 00287 5b pop ebx
+
+; 278 : }
+
+ 00288 8b e5 mov esp, ebp
+ 0028a 5d pop ebp
+ 0028b c3 ret 0
+_crc32_little ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\crc32.c
+; COMDAT _crc32_big
+_TEXT SEGMENT
+_c$6$ = -4 ; size = 4
+tv575 = 8 ; size = 4
+_len$ = 8 ; size = 4
+_crc32_big PROC ; COMDAT
+; _crc$ = ecx
+; _buf$ = edx
+
+; 291 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 53 push ebx
+ 00005 56 push esi
+
+; 292 : register z_crc_t c;
+; 293 : register const z_crc_t FAR *buf4;
+; 294 :
+; 295 : c = ZSWAP32((z_crc_t)crc);
+
+ 00006 8b c1 mov eax, ecx
+
+; 296 : c = ~c;
+
+ 00008 8b f1 mov esi, ecx
+ 0000a 25 00 ff 00 00 and eax, 65280 ; 0000ff00H
+ 0000f c1 e6 10 shl esi, 16 ; 00000010H
+ 00012 03 c6 add eax, esi
+ 00014 8b da mov ebx, edx
+ 00016 8b f1 mov esi, ecx
+ 00018 c1 e0 08 shl eax, 8
+ 0001b c1 ee 08 shr esi, 8
+ 0001e 81 e6 00 ff 00
+ 00 and esi, 65280 ; 0000ff00H
+ 00024 c1 e9 18 shr ecx, 24 ; 00000018H
+ 00027 03 c6 add eax, esi
+
+; 297 : while (len && ((ptrdiff_t)buf & 3)) {
+
+ 00029 8b 75 08 mov esi, DWORD PTR _len$[ebp]
+ 0002c 03 c1 add eax, ecx
+ 0002e f7 d0 not eax
+ 00030 57 push edi
+ 00031 85 f6 test esi, esi
+ 00033 74 1f je SHORT $LN28@crc32_big
+$LL2@crc32_big:
+ 00035 f6 c3 03 test bl, 3
+ 00038 74 1a je SHORT $LN28@crc32_big
+
+; 298 : c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
+
+ 0003a 0f b6 0b movzx ecx, BYTE PTR [ebx]
+ 0003d 8b d0 mov edx, eax
+ 0003f c1 ea 18 shr edx, 24 ; 00000018H
+ 00042 43 inc ebx
+ 00043 33 d1 xor edx, ecx
+ 00045 c1 e0 08 shl eax, 8
+ 00048 33 04 95 00 10
+ 00 00 xor eax, DWORD PTR _crc_table[edx*4+4096]
+
+; 299 : len--;
+
+ 0004f 83 ee 01 sub esi, 1
+ 00052 75 e1 jne SHORT $LL2@crc32_big
+$LN28@crc32_big:
+
+; 300 : }
+; 301 :
+; 302 : buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
+; 303 : buf4--;
+
+ 00054 8d 7b fc lea edi, DWORD PTR [ebx-4]
+
+; 304 : while (len >= 32) {
+
+ 00057 83 fe 20 cmp esi, 32 ; 00000020H
+ 0005a 0f 82 d5 01 00
+ 00 jb $LN15@crc32_big
+
+; 300 : }
+; 301 :
+; 302 : buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
+; 303 : buf4--;
+
+ 00060 8b ce mov ecx, esi
+ 00062 c1 e9 05 shr ecx, 5
+ 00065 89 4d 08 mov DWORD PTR tv575[ebp], ecx
+$LL4@crc32_big:
+
+; 305 : DOBIG32;
+
+ 00068 33 47 04 xor eax, DWORD PTR [edi+4]
+ 0006b 8b c8 mov ecx, eax
+ 0006d c1 e9 10 shr ecx, 16 ; 00000010H
+ 00070 0f b6 d1 movzx edx, cl
+ 00073 8b c8 mov ecx, eax
+ 00075 c1 e9 08 shr ecx, 8
+ 00078 0f b6 c9 movzx ecx, cl
+ 0007b 8b 14 95 00 18
+ 00 00 mov edx, DWORD PTR _crc_table[edx*4+6144]
+ 00082 33 14 8d 00 14
+ 00 00 xor edx, DWORD PTR _crc_table[ecx*4+5120]
+ 00089 8b c8 mov ecx, eax
+ 0008b 0f b6 c0 movzx eax, al
+ 0008e c1 e9 18 shr ecx, 24 ; 00000018H
+ 00091 33 14 8d 00 1c
+ 00 00 xor edx, DWORD PTR _crc_table[ecx*4+7168]
+ 00098 33 14 85 00 10
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4+4096]
+ 0009f 33 57 08 xor edx, DWORD PTR [edi+8]
+ 000a2 8b c2 mov eax, edx
+ 000a4 c1 e8 10 shr eax, 16 ; 00000010H
+ 000a7 0f b6 c8 movzx ecx, al
+ 000aa 8b c2 mov eax, edx
+ 000ac c1 e8 08 shr eax, 8
+ 000af 0f b6 c0 movzx eax, al
+ 000b2 8b 1c 8d 00 18
+ 00 00 mov ebx, DWORD PTR _crc_table[ecx*4+6144]
+ 000b9 33 1c 85 00 14
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4+5120]
+ 000c0 8b c2 mov eax, edx
+ 000c2 c1 e8 18 shr eax, 24 ; 00000018H
+ 000c5 33 1c 85 00 1c
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4+7168]
+ 000cc 0f b6 c2 movzx eax, dl
+ 000cf 33 1c 85 00 10
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4+4096]
+ 000d6 33 5f 0c xor ebx, DWORD PTR [edi+12]
+ 000d9 8b c3 mov eax, ebx
+ 000db c1 e8 10 shr eax, 16 ; 00000010H
+ 000de 0f b6 c8 movzx ecx, al
+ 000e1 8b c3 mov eax, ebx
+ 000e3 c1 e8 08 shr eax, 8
+ 000e6 0f b6 c0 movzx eax, al
+ 000e9 8b 14 8d 00 18
+ 00 00 mov edx, DWORD PTR _crc_table[ecx*4+6144]
+ 000f0 33 14 85 00 14
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4+5120]
+ 000f7 8b c3 mov eax, ebx
+ 000f9 c1 e8 18 shr eax, 24 ; 00000018H
+ 000fc 33 14 85 00 1c
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4+7168]
+ 00103 0f b6 c3 movzx eax, bl
+ 00106 33 14 85 00 10
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4+4096]
+ 0010d 33 57 10 xor edx, DWORD PTR [edi+16]
+ 00110 8b c2 mov eax, edx
+ 00112 c1 e8 10 shr eax, 16 ; 00000010H
+ 00115 0f b6 c8 movzx ecx, al
+ 00118 8b c2 mov eax, edx
+ 0011a c1 e8 08 shr eax, 8
+ 0011d 0f b6 c0 movzx eax, al
+ 00120 8b 1c 8d 00 18
+ 00 00 mov ebx, DWORD PTR _crc_table[ecx*4+6144]
+ 00127 33 1c 85 00 14
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4+5120]
+ 0012e 8b c2 mov eax, edx
+ 00130 c1 e8 18 shr eax, 24 ; 00000018H
+ 00133 33 1c 85 00 1c
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4+7168]
+ 0013a 0f b6 c2 movzx eax, dl
+ 0013d 33 1c 85 00 10
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4+4096]
+ 00144 33 5f 14 xor ebx, DWORD PTR [edi+20]
+ 00147 8b c3 mov eax, ebx
+ 00149 c1 e8 10 shr eax, 16 ; 00000010H
+ 0014c 0f b6 c8 movzx ecx, al
+ 0014f 8b c3 mov eax, ebx
+ 00151 c1 e8 08 shr eax, 8
+ 00154 0f b6 c0 movzx eax, al
+ 00157 8b 14 8d 00 18
+ 00 00 mov edx, DWORD PTR _crc_table[ecx*4+6144]
+ 0015e 33 14 85 00 14
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4+5120]
+ 00165 8b c3 mov eax, ebx
+ 00167 c1 e8 18 shr eax, 24 ; 00000018H
+ 0016a 33 14 85 00 1c
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4+7168]
+ 00171 0f b6 c3 movzx eax, bl
+ 00174 33 14 85 00 10
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4+4096]
+ 0017b 33 57 18 xor edx, DWORD PTR [edi+24]
+ 0017e 8b c2 mov eax, edx
+ 00180 c1 e8 10 shr eax, 16 ; 00000010H
+ 00183 0f b6 c8 movzx ecx, al
+ 00186 8b c2 mov eax, edx
+ 00188 c1 e8 08 shr eax, 8
+ 0018b 0f b6 c0 movzx eax, al
+ 0018e 8b 1c 8d 00 18
+ 00 00 mov ebx, DWORD PTR _crc_table[ecx*4+6144]
+ 00195 33 1c 85 00 14
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4+5120]
+ 0019c 8b c2 mov eax, edx
+ 0019e c1 e8 18 shr eax, 24 ; 00000018H
+ 001a1 33 1c 85 00 1c
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4+7168]
+
+; 306 : len -= 32;
+
+ 001a8 83 ee 20 sub esi, 32 ; 00000020H
+ 001ab 0f b6 c2 movzx eax, dl
+ 001ae 33 1c 85 00 10
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4+4096]
+ 001b5 33 5f 1c xor ebx, DWORD PTR [edi+28]
+ 001b8 83 c7 20 add edi, 32 ; 00000020H
+ 001bb 8b c3 mov eax, ebx
+ 001bd 89 5d fc mov DWORD PTR _c$6$[ebp], ebx
+ 001c0 c1 e8 10 shr eax, 16 ; 00000010H
+ 001c3 0f b6 c8 movzx ecx, al
+ 001c6 8b c3 mov eax, ebx
+ 001c8 c1 e8 08 shr eax, 8
+ 001cb 0f b6 c0 movzx eax, al
+ 001ce 8b 1c 8d 00 18
+ 00 00 mov ebx, DWORD PTR _crc_table[ecx*4+6144]
+ 001d5 8b 4d fc mov ecx, DWORD PTR _c$6$[ebp]
+ 001d8 33 1c 85 00 14
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4+5120]
+ 001df 8b c1 mov eax, ecx
+ 001e1 c1 e8 18 shr eax, 24 ; 00000018H
+ 001e4 33 1c 85 00 1c
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4+7168]
+ 001eb 0f b6 c1 movzx eax, cl
+ 001ee 33 1c 85 00 10
+ 00 00 xor ebx, DWORD PTR _crc_table[eax*4+4096]
+ 001f5 33 1f xor ebx, DWORD PTR [edi]
+ 001f7 8b c3 mov eax, ebx
+ 001f9 c1 e8 10 shr eax, 16 ; 00000010H
+ 001fc 0f b6 d0 movzx edx, al
+ 001ff 8b c3 mov eax, ebx
+ 00201 c1 e8 08 shr eax, 8
+ 00204 0f b6 c8 movzx ecx, al
+ 00207 8b 04 95 00 18
+ 00 00 mov eax, DWORD PTR _crc_table[edx*4+6144]
+ 0020e 33 04 8d 00 14
+ 00 00 xor eax, DWORD PTR _crc_table[ecx*4+5120]
+ 00215 8b cb mov ecx, ebx
+ 00217 c1 e9 18 shr ecx, 24 ; 00000018H
+ 0021a 33 04 8d 00 1c
+ 00 00 xor eax, DWORD PTR _crc_table[ecx*4+7168]
+ 00221 0f b6 cb movzx ecx, bl
+ 00224 33 04 8d 00 10
+ 00 00 xor eax, DWORD PTR _crc_table[ecx*4+4096]
+ 0022b 83 6d 08 01 sub DWORD PTR tv575[ebp], 1
+ 0022f 0f 85 33 fe ff
+ ff jne $LL4@crc32_big
+$LN15@crc32_big:
+
+; 307 : }
+; 308 : while (len >= 4) {
+
+ 00235 83 fe 04 cmp esi, 4
+ 00238 72 4a jb SHORT $LN7@crc32_big
+ 0023a 8b de mov ebx, esi
+ 0023c c1 eb 02 shr ebx, 2
+ 0023f 90 npad 1
+$LL6@crc32_big:
+
+; 309 : DOBIG4;
+
+ 00240 33 47 04 xor eax, DWORD PTR [edi+4]
+ 00243 83 c7 04 add edi, 4
+ 00246 8b c8 mov ecx, eax
+
+; 310 : len -= 4;
+
+ 00248 83 ee 04 sub esi, 4
+ 0024b c1 e9 10 shr ecx, 16 ; 00000010H
+ 0024e 0f b6 d1 movzx edx, cl
+ 00251 8b c8 mov ecx, eax
+ 00253 c1 e9 08 shr ecx, 8
+ 00256 0f b6 c9 movzx ecx, cl
+ 00259 8b 14 95 00 18
+ 00 00 mov edx, DWORD PTR _crc_table[edx*4+6144]
+ 00260 33 14 8d 00 14
+ 00 00 xor edx, DWORD PTR _crc_table[ecx*4+5120]
+ 00267 8b c8 mov ecx, eax
+ 00269 c1 e9 18 shr ecx, 24 ; 00000018H
+ 0026c 0f b6 c0 movzx eax, al
+ 0026f 33 14 8d 00 1c
+ 00 00 xor edx, DWORD PTR _crc_table[ecx*4+7168]
+ 00276 33 14 85 00 10
+ 00 00 xor edx, DWORD PTR _crc_table[eax*4+4096]
+ 0027d 8b c2 mov eax, edx
+ 0027f 83 eb 01 sub ebx, 1
+ 00282 75 bc jne SHORT $LL6@crc32_big
+$LN7@crc32_big:
+
+; 311 : }
+; 312 : buf4++;
+
+ 00284 83 c7 04 add edi, 4
+
+; 313 : buf = (const unsigned char FAR *)buf4;
+; 314 :
+; 315 : if (len) do {
+
+ 00287 85 f6 test esi, esi
+ 00289 74 21 je SHORT $LN9@crc32_big
+ 0028b 0f 1f 44 00 00 npad 5
+$LL10@crc32_big:
+
+; 316 : c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
+
+ 00290 0f b6 0f movzx ecx, BYTE PTR [edi]
+ 00293 8d 7f 01 lea edi, DWORD PTR [edi+1]
+ 00296 8b d0 mov edx, eax
+ 00298 c1 e0 08 shl eax, 8
+ 0029b c1 ea 18 shr edx, 24 ; 00000018H
+ 0029e 33 d1 xor edx, ecx
+ 002a0 33 04 95 00 10
+ 00 00 xor eax, DWORD PTR _crc_table[edx*4+4096]
+
+; 317 : } while (--len);
+
+ 002a7 83 ee 01 sub esi, 1
+ 002aa 75 e4 jne SHORT $LL10@crc32_big
+$LN9@crc32_big:
+
+; 318 : c = ~c;
+
+ 002ac f7 d0 not eax
+
+; 319 : return (unsigned long)(ZSWAP32(c));
+
+ 002ae 8b d0 mov edx, eax
+ 002b0 8b c8 mov ecx, eax
+ 002b2 c1 e1 10 shl ecx, 16 ; 00000010H
+ 002b5 81 e2 00 ff 00
+ 00 and edx, 65280 ; 0000ff00H
+ 002bb 03 d1 add edx, ecx
+ 002bd 8b c8 mov ecx, eax
+ 002bf c1 e9 08 shr ecx, 8
+ 002c2 c1 e2 08 shl edx, 8
+ 002c5 81 e1 00 ff 00
+ 00 and ecx, 65280 ; 0000ff00H
+ 002cb 5f pop edi
+ 002cc 03 d1 add edx, ecx
+ 002ce c1 e8 18 shr eax, 24 ; 00000018H
+ 002d1 5e pop esi
+ 002d2 03 c2 add eax, edx
+ 002d4 5b pop ebx
+
+; 320 : }
+
+ 002d5 8b e5 mov esp, ebp
+ 002d7 5d pop ebp
+ 002d8 c3 ret 0
+_crc32_big ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\crc32.c
+; COMDAT _gf2_matrix_times
+_TEXT SEGMENT
+_gf2_matrix_times PROC ; COMDAT
+; _mat$ = ecx
+; _vec$ = edx
+
+; 331 : unsigned long sum;
+; 332 :
+; 333 : sum = 0;
+
+ 00000 33 c0 xor eax, eax
+
+; 334 : while (vec) {
+
+ 00002 85 d2 test edx, edx
+ 00004 74 0e je SHORT $LN3@gf2_matrix
+$LL2@gf2_matrix:
+
+; 335 : if (vec & 1)
+
+ 00006 f6 c2 01 test dl, 1
+ 00009 74 02 je SHORT $LN4@gf2_matrix
+
+; 336 : sum ^= *mat;
+
+ 0000b 33 01 xor eax, DWORD PTR [ecx]
+$LN4@gf2_matrix:
+
+; 337 : vec >>= 1;
+; 338 : mat++;
+
+ 0000d 83 c1 04 add ecx, 4
+ 00010 d1 ea shr edx, 1
+ 00012 75 f2 jne SHORT $LL2@gf2_matrix
+$LN3@gf2_matrix:
+
+; 339 : }
+; 340 : return sum;
+; 341 : }
+
+ 00014 c3 ret 0
+_gf2_matrix_times ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\crc32.c
+; COMDAT _gf2_matrix_square
+_TEXT SEGMENT
+_mat$1$ = -4 ; size = 4
+_gf2_matrix_square PROC ; COMDAT
+; _square$ = ecx
+; _mat$ = edx
+
+; 347 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 53 push ebx
+ 00005 8b c2 mov eax, edx
+ 00007 56 push esi
+ 00008 8b f1 mov esi, ecx
+ 0000a 89 45 fc mov DWORD PTR _mat$1$[ebp], eax
+
+; 348 : int n;
+; 349 :
+; 350 : for (n = 0; n < GF2_DIM; n++)
+
+ 0000d 8b d8 mov ebx, eax
+ 0000f 57 push edi
+ 00010 2b de sub ebx, esi
+ 00012 bf 20 00 00 00 mov edi, 32 ; 00000020H
+ 00017 66 0f 1f 84 00
+ 00 00 00 00 npad 9
+$LL4@gf2_matrix:
+
+; 351 : square[n] = gf2_matrix_times(mat, mat[n]);
+
+ 00020 8b 14 33 mov edx, DWORD PTR [ebx+esi]
+ 00023 8b c8 mov ecx, eax
+ 00025 e8 00 00 00 00 call _gf2_matrix_times
+ 0002a 89 06 mov DWORD PTR [esi], eax
+ 0002c 8d 76 04 lea esi, DWORD PTR [esi+4]
+ 0002f 8b 45 fc mov eax, DWORD PTR _mat$1$[ebp]
+ 00032 83 ef 01 sub edi, 1
+ 00035 75 e9 jne SHORT $LL4@gf2_matrix
+ 00037 5f pop edi
+ 00038 5e pop esi
+ 00039 5b pop ebx
+
+; 352 : }
+
+ 0003a 8b e5 mov esp, ebp
+ 0003c 5d pop ebp
+ 0003d c3 ret 0
+_gf2_matrix_square ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\crc32.c
+; COMDAT _crc32_combine_
+_TEXT SEGMENT
+_even$ = -260 ; size = 128
+_odd$ = -132 ; size = 128
+_crc2$1$ = -4 ; size = 4
+_len2$ = 8 ; size = 8
+_crc32_combine_ PROC ; COMDAT
+; _crc1$ = ecx
+; _crc2$ = edx
+
+; 359 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 81 ec 04 01 00
+ 00 sub esp, 260 ; 00000104H
+ 00009 53 push ebx
+ 0000a 56 push esi
+
+; 360 : int n;
+; 361 : unsigned long row;
+; 362 : unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */
+; 363 : unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */
+; 364 :
+; 365 : /* degenerate case (also disallow negative lengths) */
+; 366 : if (len2 <= 0)
+
+ 0000b 8b 75 0c mov esi, DWORD PTR _len2$[ebp+4]
+ 0000e 8b d9 mov ebx, ecx
+ 00010 89 55 fc mov DWORD PTR _crc2$1$[ebp], edx
+ 00013 57 push edi
+ 00014 8b 7d 08 mov edi, DWORD PTR _len2$[ebp]
+ 00017 85 f6 test esi, esi
+ 00019 7f 0e jg SHORT $LN8@crc32_comb
+ 0001b 0f 8c bf 00 00
+ 00 jl $LN23@crc32_comb
+ 00021 85 ff test edi, edi
+ 00023 0f 84 b7 00 00
+ 00 je $LN23@crc32_comb
+$LN8@crc32_comb:
+
+; 367 : return crc1;
+; 368 :
+; 369 : /* put operator for one zero bit in odd */
+; 370 : odd[0] = 0xedb88320UL; /* CRC-32 polynomial */
+; 371 : row = 1;
+
+ 00029 b9 01 00 00 00 mov ecx, 1
+ 0002e c7 85 7c ff ff
+ ff 20 83 b8 ed mov DWORD PTR _odd$[ebp], -306674912 ; edb88320H
+
+; 372 : for (n = 1; n < GF2_DIM; n++) {
+
+ 00038 8b c1 mov eax, ecx
+ 0003a 66 0f 1f 44 00
+ 00 npad 6
+$LL17@crc32_comb:
+
+; 373 : odd[n] = row;
+
+ 00040 89 8c 85 7c ff
+ ff ff mov DWORD PTR _odd$[ebp+eax*4], ecx
+ 00047 40 inc eax
+
+; 374 : row <<= 1;
+
+ 00048 03 c9 add ecx, ecx
+ 0004a 83 f8 20 cmp eax, 32 ; 00000020H
+ 0004d 7c f1 jl SHORT $LL17@crc32_comb
+
+; 375 : }
+; 376 :
+; 377 : /* put operator for two zero bits in even */
+; 378 : gf2_matrix_square(even, odd);
+
+ 0004f 8d 95 7c ff ff
+ ff lea edx, DWORD PTR _odd$[ebp]
+ 00055 8d 8d fc fe ff
+ ff lea ecx, DWORD PTR _even$[ebp]
+ 0005b e8 00 00 00 00 call _gf2_matrix_square
+
+; 379 :
+; 380 : /* put operator for four zero bits in odd */
+; 381 : gf2_matrix_square(odd, even);
+
+ 00060 8d 95 fc fe ff
+ ff lea edx, DWORD PTR _even$[ebp]
+ 00066 8d 8d 7c ff ff
+ ff lea ecx, DWORD PTR _odd$[ebp]
+ 0006c e8 00 00 00 00 call _gf2_matrix_square
+$LL7@crc32_comb:
+
+; 382 :
+; 383 : /* apply len2 zeros to crc1 (first square will put the operator for one
+; 384 : zero byte, eight zero bits, in even) */
+; 385 : do {
+; 386 : /* apply zeros operator for this bit of len2 */
+; 387 : gf2_matrix_square(even, odd);
+
+ 00071 8d 95 7c ff ff
+ ff lea edx, DWORD PTR _odd$[ebp]
+ 00077 8d 8d fc fe ff
+ ff lea ecx, DWORD PTR _even$[ebp]
+ 0007d e8 00 00 00 00 call _gf2_matrix_square
+
+; 388 : if (len2 & 1)
+
+ 00082 8b c7 mov eax, edi
+ 00084 83 e0 01 and eax, 1
+ 00087 83 c8 00 or eax, 0
+ 0008a 74 0f je SHORT $LN9@crc32_comb
+
+; 389 : crc1 = gf2_matrix_times(even, crc1);
+
+ 0008c 8b d3 mov edx, ebx
+ 0008e 8d 8d fc fe ff
+ ff lea ecx, DWORD PTR _even$[ebp]
+ 00094 e8 00 00 00 00 call _gf2_matrix_times
+ 00099 8b d8 mov ebx, eax
+$LN9@crc32_comb:
+
+; 390 : len2 >>= 1;
+
+ 0009b 0f ac f7 01 shrd edi, esi, 1
+ 0009f d1 fe sar esi, 1
+
+; 391 :
+; 392 : /* if no more bits set, then done */
+; 393 : if (len2 == 0)
+
+ 000a1 8b c7 mov eax, edi
+ 000a3 0b c6 or eax, esi
+ 000a5 74 36 je SHORT $LN6@crc32_comb
+
+; 394 : break;
+; 395 :
+; 396 : /* another iteration of the loop with odd and even swapped */
+; 397 : gf2_matrix_square(odd, even);
+
+ 000a7 8d 95 fc fe ff
+ ff lea edx, DWORD PTR _even$[ebp]
+ 000ad 8d 8d 7c ff ff
+ ff lea ecx, DWORD PTR _odd$[ebp]
+ 000b3 e8 00 00 00 00 call _gf2_matrix_square
+
+; 398 : if (len2 & 1)
+
+ 000b8 8b c7 mov eax, edi
+ 000ba 83 e0 01 and eax, 1
+ 000bd 83 c8 00 or eax, 0
+ 000c0 74 0f je SHORT $LN11@crc32_comb
+
+; 399 : crc1 = gf2_matrix_times(odd, crc1);
+
+ 000c2 8b d3 mov edx, ebx
+ 000c4 8d 8d 7c ff ff
+ ff lea ecx, DWORD PTR _odd$[ebp]
+ 000ca e8 00 00 00 00 call _gf2_matrix_times
+ 000cf 8b d8 mov ebx, eax
+$LN11@crc32_comb:
+
+; 400 : len2 >>= 1;
+
+ 000d1 0f ac f7 01 shrd edi, esi, 1
+ 000d5 d1 fe sar esi, 1
+
+; 401 :
+; 402 : /* if no more bits set, then done */
+; 403 : } while (len2 != 0);
+
+ 000d7 8b c7 mov eax, edi
+ 000d9 0b c6 or eax, esi
+ 000db 75 94 jne SHORT $LL7@crc32_comb
+$LN6@crc32_comb:
+
+; 404 :
+; 405 : /* return combined crc */
+; 406 : crc1 ^= crc2;
+
+ 000dd 33 5d fc xor ebx, DWORD PTR _crc2$1$[ebp]
+$LN23@crc32_comb:
+ 000e0 5f pop edi
+ 000e1 5e pop esi
+
+; 407 : return crc1;
+
+ 000e2 8b c3 mov eax, ebx
+ 000e4 5b pop ebx
+
+; 408 : }
+
+ 000e5 8b e5 mov esp, ebp
+ 000e7 5d pop ebp
+ 000e8 c3 ret 0
+_crc32_combine_ ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\crc32.c
+; COMDAT _crc32_combine@12
+_TEXT SEGMENT
+_crc1$ = 8 ; size = 4
+_crc2$ = 12 ; size = 4
+_len2$ = 16 ; size = 4
+_crc32_combine@12 PROC ; COMDAT
+
+; 415 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 416 : return crc32_combine_(crc1, crc2, len2);
+
+ 00003 8b 45 10 mov eax, DWORD PTR _len2$[ebp]
+ 00006 8b 4d 08 mov ecx, DWORD PTR _crc1$[ebp]
+ 00009 99 cdq
+ 0000a 52 push edx
+ 0000b 8b 55 0c mov edx, DWORD PTR _crc2$[ebp]
+ 0000e 50 push eax
+ 0000f e8 00 00 00 00 call _crc32_combine_
+ 00014 83 c4 08 add esp, 8
+
+; 417 : }
+
+ 00017 5d pop ebp
+ 00018 c2 0c 00 ret 12 ; 0000000cH
+_crc32_combine@12 ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/crc32.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/crc32.obj
new file mode 100644
index 0000000000..5df3a63aaf
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/crc32.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/deflate.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/deflate.cod
new file mode 100644
index 0000000000..ec19286e9f
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/deflate.cod
@@ -0,0 +1,6858 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+?my_version@?1??deflateInit2_@@9@9 DB '1.2.8', 00H ; `deflateInit2_'::`2'::my_version
+ ORG $+2
+_configuration_table DW 00H
+ DW 00H
+ DW 00H
+ DW 00H
+ DD FLAT:_deflate_stored
+ DW 04H
+ DW 04H
+ DW 08H
+ DW 04H
+ DD FLAT:_deflate_fast
+ DW 04H
+ DW 05H
+ DW 010H
+ DW 08H
+ DD FLAT:_deflate_fast
+ DW 04H
+ DW 06H
+ DW 020H
+ DW 020H
+ DD FLAT:_deflate_fast
+ DW 04H
+ DW 04H
+ DW 010H
+ DW 010H
+ DD FLAT:_deflate_slow
+ DW 08H
+ DW 010H
+ DW 020H
+ DW 020H
+ DD FLAT:_deflate_slow
+ DW 08H
+ DW 010H
+ DW 080H
+ DW 080H
+ DD FLAT:_deflate_slow
+ DW 08H
+ DW 020H
+ DW 080H
+ DW 0100H
+ DD FLAT:_deflate_slow
+ DW 020H
+ DW 080H
+ DW 0102H
+ DW 0400H
+ DD FLAT:_deflate_slow
+ DW 020H
+ DW 0102H
+ DW 0102H
+ DW 01000H
+ DD FLAT:_deflate_slow
+PUBLIC _deflateCopy@8
+PUBLIC _deflateBound@8
+PUBLIC _deflateTune@20
+PUBLIC _deflateParams@12
+PUBLIC _deflatePrime@12
+PUBLIC _deflatePending@12
+PUBLIC _deflateSetHeader@8
+PUBLIC _deflateReset@4
+PUBLIC _deflateResetKeep@4
+PUBLIC _deflateSetDictionary@12
+PUBLIC _deflateInit2_@32
+PUBLIC _deflateInit_@16
+PUBLIC _deflateEnd@4
+PUBLIC _deflate@8
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflate@8
+_TEXT SEGMENT
+_old_flush$1$ = -4 ; size = 4
+_val$1$ = 8 ; size = 4
+_val$1$ = 8 ; size = 4
+_beg$1$ = 8 ; size = 4
+_strm$ = 8 ; size = 4
+_flush$ = 12 ; size = 4
+_deflate@8 PROC ; COMDAT
+
+; 668 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 56 push esi
+ 00005 57 push edi
+
+; 669 : int old_flush; /* value of flush param for previous deflate call */
+; 670 : deflate_state *s;
+; 671 :
+; 672 : if (strm == Z_NULL || strm->state == Z_NULL ||
+; 673 : flush > Z_BLOCK || flush < 0) {
+
+ 00006 8b 7d 08 mov edi, DWORD PTR _strm$[ebp]
+ 00009 85 ff test edi, edi
+ 0000b 0f 84 46 08 00
+ 00 je $LN11@deflate
+ 00011 8b 77 1c mov esi, DWORD PTR [edi+28]
+ 00014 85 f6 test esi, esi
+ 00016 0f 84 3b 08 00
+ 00 je $LN11@deflate
+ 0001c 8b 45 0c mov eax, DWORD PTR _flush$[ebp]
+ 0001f 83 f8 05 cmp eax, 5
+ 00022 0f 87 2f 08 00
+ 00 ja $LN11@deflate
+
+; 674 : return Z_STREAM_ERROR;
+; 675 : }
+; 676 : s = strm->state;
+; 677 :
+; 678 : if (strm->next_out == Z_NULL ||
+; 679 : (strm->next_in == Z_NULL && strm->avail_in != 0) ||
+
+ 00028 83 7f 0c 00 cmp DWORD PTR [edi+12], 0
+ 0002c 0f 84 1d 08 00
+ 00 je $LN13@deflate
+ 00032 83 3f 00 cmp DWORD PTR [edi], 0
+ 00035 75 0a jne SHORT $LN14@deflate
+ 00037 83 7f 04 00 cmp DWORD PTR [edi+4], 0
+ 0003b 0f 85 0e 08 00
+ 00 jne $LN13@deflate
+$LN14@deflate:
+ 00041 8b 4e 04 mov ecx, DWORD PTR [esi+4]
+ 00044 81 f9 9a 02 00
+ 00 cmp ecx, 666 ; 0000029aH
+ 0004a 75 09 jne SHORT $LN12@deflate
+ 0004c 83 f8 04 cmp eax, 4
+ 0004f 0f 85 fa 07 00
+ 00 jne $LN13@deflate
+$LN12@deflate:
+
+; 682 : }
+; 683 : if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
+
+ 00055 83 7f 10 00 cmp DWORD PTR [edi+16], 0
+ 00059 75 15 jne SHORT $LN15@deflate
+ 0005b a1 1c 00 00 00 mov eax, DWORD PTR _z_errmsg+28
+ 00060 89 47 18 mov DWORD PTR [edi+24], eax
+ 00063 b8 fb ff ff ff mov eax, -5 ; fffffffbH
+ 00068 5f pop edi
+ 00069 5e pop esi
+
+; 976 : }
+
+ 0006a 8b e5 mov esp, ebp
+ 0006c 5d pop ebp
+ 0006d c2 08 00 ret 8
+$LN15@deflate:
+
+; 684 :
+; 685 : s->strm = strm; /* just in case */
+; 686 : old_flush = s->last_flush;
+
+ 00070 8b 56 28 mov edx, DWORD PTR [esi+40]
+ 00073 89 3e mov DWORD PTR [esi], edi
+ 00075 89 55 fc mov DWORD PTR _old_flush$1$[ebp], edx
+
+; 687 : s->last_flush = flush;
+
+ 00078 89 46 28 mov DWORD PTR [esi+40], eax
+ 0007b 53 push ebx
+
+; 688 :
+; 689 : /* Write the header */
+; 690 : if (s->status == INIT_STATE) {
+
+ 0007c 83 f9 2a cmp ecx, 42 ; 0000002aH
+ 0007f 0f 85 95 02 00
+ 00 jne $LN18@deflate
+
+; 691 : #ifdef GZIP
+; 692 : if (s->wrap == 2) {
+
+ 00085 83 7e 18 02 cmp DWORD PTR [esi+24], 2
+ 00089 0f 85 ef 01 00
+ 00 jne $LN17@deflate
+
+; 693 : strm->adler = crc32(0L, Z_NULL, 0);
+
+ 0008f 6a 00 push 0
+ 00091 6a 00 push 0
+ 00093 6a 00 push 0
+ 00095 e8 00 00 00 00 call _crc32@12
+ 0009a 89 47 30 mov DWORD PTR [edi+48], eax
+
+; 694 : put_byte(s, 31);
+
+ 0009d 8b 46 14 mov eax, DWORD PTR [esi+20]
+ 000a0 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 000a3 c6 04 01 1f mov BYTE PTR [ecx+eax], 31 ; 0000001fH
+ 000a7 ff 46 14 inc DWORD PTR [esi+20]
+ 000aa 8b 4e 14 mov ecx, DWORD PTR [esi+20]
+
+; 695 : put_byte(s, 139);
+
+ 000ad 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 000b0 c6 04 01 8b mov BYTE PTR [ecx+eax], 139 ; 0000008bH
+ 000b4 ff 46 14 inc DWORD PTR [esi+20]
+ 000b7 8b 4e 14 mov ecx, DWORD PTR [esi+20]
+
+; 696 : put_byte(s, 8);
+
+ 000ba 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 000bd c6 04 01 08 mov BYTE PTR [ecx+eax], 8
+ 000c1 ff 46 14 inc DWORD PTR [esi+20]
+
+; 697 : if (s->gzhead == Z_NULL) {
+
+ 000c4 8b 56 1c mov edx, DWORD PTR [esi+28]
+ 000c7 8b 5e 14 mov ebx, DWORD PTR [esi+20]
+ 000ca 85 d2 test edx, edx
+ 000cc 0f 85 85 00 00
+ 00 jne $LN19@deflate
+
+; 698 : put_byte(s, 0);
+
+ 000d2 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 000d5 88 14 03 mov BYTE PTR [ebx+eax], dl
+ 000d8 ff 46 14 inc DWORD PTR [esi+20]
+ 000db 8b 4e 14 mov ecx, DWORD PTR [esi+20]
+
+; 699 : put_byte(s, 0);
+
+ 000de 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 000e1 88 14 01 mov BYTE PTR [ecx+eax], dl
+ 000e4 ff 46 14 inc DWORD PTR [esi+20]
+ 000e7 8b 4e 14 mov ecx, DWORD PTR [esi+20]
+
+; 700 : put_byte(s, 0);
+
+ 000ea 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 000ed 88 14 01 mov BYTE PTR [ecx+eax], dl
+ 000f0 ff 46 14 inc DWORD PTR [esi+20]
+ 000f3 8b 4e 14 mov ecx, DWORD PTR [esi+20]
+
+; 701 : put_byte(s, 0);
+
+ 000f6 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 000f9 88 14 01 mov BYTE PTR [ecx+eax], dl
+ 000fc ff 46 14 inc DWORD PTR [esi+20]
+ 000ff 8b 4e 14 mov ecx, DWORD PTR [esi+20]
+
+; 702 : put_byte(s, 0);
+
+ 00102 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 00105 88 14 01 mov BYTE PTR [ecx+eax], dl
+ 00108 ff 46 14 inc DWORD PTR [esi+20]
+
+; 703 : put_byte(s, s->level == 9 ? 2 :
+
+ 0010b 8b 86 84 00 00
+ 00 mov eax, DWORD PTR [esi+132]
+ 00111 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 00114 83 f8 09 cmp eax, 9
+ 00117 75 05 jne SHORT $LN88@deflate
+ 00119 8d 48 f9 lea ecx, DWORD PTR [eax-7]
+ 0011c eb 17 jmp SHORT $LN87@deflate
+$LN88@deflate:
+ 0011e 83 be 88 00 00
+ 00 02 cmp DWORD PTR [esi+136], 2
+ 00125 7d 09 jge SHORT $LN86@deflate
+ 00127 83 f8 02 cmp eax, 2
+ 0012a 7c 04 jl SHORT $LN86@deflate
+ 0012c 33 c9 xor ecx, ecx
+ 0012e eb 05 jmp SHORT $LN87@deflate
+$LN86@deflate:
+ 00130 b9 04 00 00 00 mov ecx, 4
+$LN87@deflate:
+ 00135 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 00138 88 0c 02 mov BYTE PTR [edx+eax], cl
+ 0013b ff 46 14 inc DWORD PTR [esi+20]
+ 0013e 8b 4e 14 mov ecx, DWORD PTR [esi+20]
+
+; 704 : (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+; 705 : 4 : 0));
+; 706 : put_byte(s, OS_CODE);
+
+ 00141 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 00144 c6 04 01 0b mov BYTE PTR [ecx+eax], 11 ; 0000000bH
+ 00148 ff 46 14 inc DWORD PTR [esi+20]
+
+; 707 : s->status = BUSY_STATE;
+
+ 0014b c7 46 04 71 00
+ 00 00 mov DWORD PTR [esi+4], 113 ; 00000071H
+
+; 708 : }
+
+ 00152 e9 c3 01 00 00 jmp $LN18@deflate
+$LN19@deflate:
+
+; 709 : else {
+; 710 : put_byte(s, (s->gzhead->text ? 1 : 0) +
+
+ 00157 8b 4a 24 mov ecx, DWORD PTR [edx+36]
+ 0015a 8b 42 2c mov eax, DWORD PTR [edx+44]
+ 0015d f7 d9 neg ecx
+ 0015f 1a c9 sbb cl, cl
+ 00161 80 e1 10 and cl, 16 ; 00000010H
+ 00164 f7 d8 neg eax
+ 00166 1a c0 sbb al, al
+ 00168 24 02 and al, 2
+ 0016a 02 c8 add cl, al
+ 0016c 8b 42 1c mov eax, DWORD PTR [edx+28]
+ 0016f f7 d8 neg eax
+ 00171 1a c0 sbb al, al
+ 00173 24 08 and al, 8
+ 00175 02 c8 add cl, al
+ 00177 8b 42 10 mov eax, DWORD PTR [edx+16]
+ 0017a f7 d8 neg eax
+ 0017c 1a c0 sbb al, al
+ 0017e 24 04 and al, 4
+ 00180 02 c8 add cl, al
+ 00182 83 3a 00 cmp DWORD PTR [edx], 0
+ 00185 0f 95 c0 setne al
+ 00188 02 c8 add cl, al
+ 0018a 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 0018d 88 0c 03 mov BYTE PTR [ebx+eax], cl
+ 00190 ff 46 14 inc DWORD PTR [esi+20]
+ 00193 8b 56 14 mov edx, DWORD PTR [esi+20]
+
+; 711 : (s->gzhead->hcrc ? 2 : 0) +
+; 712 : (s->gzhead->extra == Z_NULL ? 0 : 4) +
+; 713 : (s->gzhead->name == Z_NULL ? 0 : 8) +
+; 714 : (s->gzhead->comment == Z_NULL ? 0 : 16)
+; 715 : );
+; 716 : put_byte(s, (Byte)(s->gzhead->time & 0xff));
+
+ 00196 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 00199 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 0019c 0f b6 40 04 movzx eax, BYTE PTR [eax+4]
+ 001a0 88 04 0a mov BYTE PTR [edx+ecx], al
+ 001a3 ff 46 14 inc DWORD PTR [esi+20]
+ 001a6 8b 56 14 mov edx, DWORD PTR [esi+20]
+
+; 717 : put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
+
+ 001a9 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 001ac 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 001af 0f b6 40 05 movzx eax, BYTE PTR [eax+5]
+ 001b3 88 04 0a mov BYTE PTR [edx+ecx], al
+ 001b6 ff 46 14 inc DWORD PTR [esi+20]
+ 001b9 8b 56 14 mov edx, DWORD PTR [esi+20]
+
+; 718 : put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
+
+ 001bc 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 001bf 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 001c2 0f b6 40 06 movzx eax, BYTE PTR [eax+6]
+ 001c6 88 04 0a mov BYTE PTR [edx+ecx], al
+ 001c9 ff 46 14 inc DWORD PTR [esi+20]
+
+; 719 : put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
+
+ 001cc 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 001cf 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 001d2 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 001d5 0f b6 40 07 movzx eax, BYTE PTR [eax+7]
+ 001d9 88 04 0a mov BYTE PTR [edx+ecx], al
+ 001dc ff 46 14 inc DWORD PTR [esi+20]
+
+; 720 : put_byte(s, s->level == 9 ? 2 :
+
+ 001df 8b 86 84 00 00
+ 00 mov eax, DWORD PTR [esi+132]
+ 001e5 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 001e8 83 f8 09 cmp eax, 9
+ 001eb 75 05 jne SHORT $LN92@deflate
+ 001ed 8d 48 f9 lea ecx, DWORD PTR [eax-7]
+ 001f0 eb 17 jmp SHORT $LN91@deflate
+$LN92@deflate:
+ 001f2 83 be 88 00 00
+ 00 02 cmp DWORD PTR [esi+136], 2
+ 001f9 7d 09 jge SHORT $LN90@deflate
+ 001fb 83 f8 02 cmp eax, 2
+ 001fe 7c 04 jl SHORT $LN90@deflate
+ 00200 33 c9 xor ecx, ecx
+ 00202 eb 05 jmp SHORT $LN91@deflate
+$LN90@deflate:
+ 00204 b9 04 00 00 00 mov ecx, 4
+$LN91@deflate:
+ 00209 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 0020c 88 0c 02 mov BYTE PTR [edx+eax], cl
+ 0020f ff 46 14 inc DWORD PTR [esi+20]
+
+; 721 : (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+; 722 : 4 : 0));
+; 723 : put_byte(s, s->gzhead->os & 0xff);
+
+ 00212 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 00215 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 00218 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 0021b 8a 40 0c mov al, BYTE PTR [eax+12]
+ 0021e 88 04 0a mov BYTE PTR [edx+ecx], al
+
+; 724 : if (s->gzhead->extra != Z_NULL) {
+
+ 00221 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 00224 ff 46 14 inc DWORD PTR [esi+20]
+ 00227 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 0022a 83 78 10 00 cmp DWORD PTR [eax+16], 0
+ 0022e 74 23 je SHORT $LN21@deflate
+
+; 725 : put_byte(s, s->gzhead->extra_len & 0xff);
+
+ 00230 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 00233 0f b6 40 14 movzx eax, BYTE PTR [eax+20]
+ 00237 88 04 0a mov BYTE PTR [edx+ecx], al
+ 0023a ff 46 14 inc DWORD PTR [esi+20]
+
+; 726 : put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
+
+ 0023d 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 00240 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 00243 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 00246 0f b6 40 15 movzx eax, BYTE PTR [eax+21]
+ 0024a 88 04 0a mov BYTE PTR [edx+ecx], al
+ 0024d ff 46 14 inc DWORD PTR [esi+20]
+ 00250 8b 56 14 mov edx, DWORD PTR [esi+20]
+$LN21@deflate:
+
+; 727 : }
+; 728 : if (s->gzhead->hcrc)
+
+ 00253 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 00256 83 78 2c 00 cmp DWORD PTR [eax+44], 0
+ 0025a 74 0f je SHORT $LN22@deflate
+
+; 729 : strm->adler = crc32(strm->adler, s->pending_buf,
+
+ 0025c 52 push edx
+ 0025d ff 76 08 push DWORD PTR [esi+8]
+ 00260 ff 77 30 push DWORD PTR [edi+48]
+ 00263 e8 00 00 00 00 call _crc32@12
+ 00268 89 47 30 mov DWORD PTR [edi+48], eax
+$LN22@deflate:
+
+; 730 : s->pending);
+; 731 : s->gzindex = 0;
+
+ 0026b c7 46 20 00 00
+ 00 00 mov DWORD PTR [esi+32], 0
+
+; 732 : s->status = EXTRA_STATE;
+
+ 00272 c7 46 04 45 00
+ 00 00 mov DWORD PTR [esi+4], 69 ; 00000045H
+
+; 733 : }
+; 734 : }
+
+ 00279 e9 9c 00 00 00 jmp $LN18@deflate
+$LN17@deflate:
+
+; 735 : else
+; 736 : #endif
+; 737 : {
+; 738 : uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
+
+ 0027e 8b 4e 30 mov ecx, DWORD PTR [esi+48]
+ 00281 83 e9 08 sub ecx, 8
+ 00284 c1 e1 0c shl ecx, 12 ; 0000000cH
+ 00287 81 c1 00 08 00
+ 00 add ecx, 2048 ; 00000800H
+
+; 739 : uInt level_flags;
+; 740 :
+; 741 : if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
+
+ 0028d 83 be 88 00 00
+ 00 02 cmp DWORD PTR [esi+136], 2
+ 00294 7d 24 jge SHORT $LN25@deflate
+ 00296 8b 96 84 00 00
+ 00 mov edx, DWORD PTR [esi+132]
+ 0029c 83 fa 02 cmp edx, 2
+ 0029f 7c 19 jl SHORT $LN25@deflate
+
+; 743 : else if (s->level < 6)
+
+ 002a1 83 fa 06 cmp edx, 6
+ 002a4 7d 07 jge SHORT $LN26@deflate
+
+; 744 : level_flags = 1;
+
+ 002a6 b8 01 00 00 00 mov eax, 1
+ 002ab eb 0f jmp SHORT $LN29@deflate
+$LN26@deflate:
+
+; 745 : else if (s->level == 6)
+
+ 002ad 33 c0 xor eax, eax
+ 002af 83 fa 06 cmp edx, 6
+ 002b2 0f 95 c0 setne al
+ 002b5 83 c0 02 add eax, 2
+
+; 746 : level_flags = 2;
+; 747 : else
+; 748 : level_flags = 3;
+
+ 002b8 eb 02 jmp SHORT $LN29@deflate
+$LN25@deflate:
+
+; 742 : level_flags = 0;
+
+ 002ba 33 c0 xor eax, eax
+$LN29@deflate:
+
+; 749 : header |= (level_flags << 6);
+
+ 002bc c1 e0 06 shl eax, 6
+ 002bf 0b c8 or ecx, eax
+
+; 750 : if (s->strstart != 0) header |= PRESET_DICT;
+
+ 002c1 83 7e 6c 00 cmp DWORD PTR [esi+108], 0
+ 002c5 74 03 je SHORT $LN30@deflate
+ 002c7 83 c9 20 or ecx, 32 ; 00000020H
+$LN30@deflate:
+
+; 751 : header += 31 - (header % 31);
+
+ 002ca b8 85 10 42 08 mov eax, 138547333 ; 08421085H
+
+; 752 :
+; 753 : s->status = BUSY_STATE;
+
+ 002cf c7 46 04 71 00
+ 00 00 mov DWORD PTR [esi+4], 113 ; 00000071H
+ 002d6 f7 e1 mul ecx
+ 002d8 2b ca sub ecx, edx
+ 002da d1 e9 shr ecx, 1
+ 002dc 03 ca add ecx, edx
+ 002de c1 e9 04 shr ecx, 4
+
+; 754 : putShortMSB(s, header);
+
+ 002e1 41 inc ecx
+ 002e2 8b d1 mov edx, ecx
+ 002e4 c1 e2 05 shl edx, 5
+ 002e7 2b d1 sub edx, ecx
+ 002e9 8b ce mov ecx, esi
+ 002eb e8 00 00 00 00 call _putShortMSB
+
+; 755 :
+; 756 : /* Save the adler32 of the preset dictionary: */
+; 757 : if (s->strstart != 0) {
+
+ 002f0 83 7e 6c 00 cmp DWORD PTR [esi+108], 0
+ 002f4 74 16 je SHORT $LN31@deflate
+
+; 758 : putShortMSB(s, (uInt)(strm->adler >> 16));
+
+ 002f6 0f b7 57 32 movzx edx, WORD PTR [edi+50]
+ 002fa 8b ce mov ecx, esi
+ 002fc e8 00 00 00 00 call _putShortMSB
+
+; 759 : putShortMSB(s, (uInt)(strm->adler & 0xffff));
+
+ 00301 0f b7 57 30 movzx edx, WORD PTR [edi+48]
+ 00305 8b ce mov ecx, esi
+ 00307 e8 00 00 00 00 call _putShortMSB
+$LN31@deflate:
+
+; 760 : }
+; 761 : strm->adler = adler32(0L, Z_NULL, 0);
+
+ 0030c 6a 00 push 0
+ 0030e 6a 00 push 0
+ 00310 6a 00 push 0
+ 00312 e8 00 00 00 00 call _adler32@12
+ 00317 89 47 30 mov DWORD PTR [edi+48], eax
+$LN18@deflate:
+
+; 762 : }
+; 763 : }
+; 764 : #ifdef GZIP
+; 765 : if (s->status == EXTRA_STATE) {
+
+ 0031a 83 7e 04 45 cmp DWORD PTR [esi+4], 69 ; 00000045H
+ 0031e 0f 85 bd 00 00
+ 00 jne $LN34@deflate
+
+; 766 : if (s->gzhead->extra != Z_NULL) {
+
+ 00324 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 00327 83 78 10 00 cmp DWORD PTR [eax+16], 0
+ 0032b 0f 84 a9 00 00
+ 00 je $LN33@deflate
+
+; 767 : uInt beg = s->pending; /* start of bytes to update crc */
+; 768 :
+; 769 : while (s->gzindex < (s->gzhead->extra_len & 0xffff)) {
+
+ 00331 0f b7 40 14 movzx eax, WORD PTR [eax+20]
+ 00335 8b 4e 14 mov ecx, DWORD PTR [esi+20]
+ 00338 89 4d 08 mov DWORD PTR _beg$1$[ebp], ecx
+ 0033b 39 46 20 cmp DWORD PTR [esi+32], eax
+ 0033e 73 64 jae SHORT $LN111@deflate
+$LL2@deflate:
+
+; 770 : if (s->pending == s->pending_buf_size) {
+
+ 00340 8b 5e 14 mov ebx, DWORD PTR [esi+20]
+ 00343 3b 5e 0c cmp ebx, DWORD PTR [esi+12]
+ 00346 75 35 jne SHORT $LN37@deflate
+
+; 771 : if (s->gzhead->hcrc && s->pending > beg)
+
+ 00348 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 0034b 83 78 2c 00 cmp DWORD PTR [eax+44], 0
+ 0034f 74 18 je SHORT $LN36@deflate
+ 00351 3b d9 cmp ebx, ecx
+ 00353 76 14 jbe SHORT $LN36@deflate
+
+; 772 : strm->adler = crc32(strm->adler, s->pending_buf + beg,
+
+ 00355 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 00358 2b d9 sub ebx, ecx
+ 0035a 53 push ebx
+ 0035b 03 c1 add eax, ecx
+ 0035d 50 push eax
+ 0035e ff 77 30 push DWORD PTR [edi+48]
+ 00361 e8 00 00 00 00 call _crc32@12
+ 00366 89 47 30 mov DWORD PTR [edi+48], eax
+$LN36@deflate:
+
+; 773 : s->pending - beg);
+; 774 : flush_pending(strm);
+
+ 00369 8b cf mov ecx, edi
+ 0036b e8 00 00 00 00 call _flush_pending
+
+; 775 : beg = s->pending;
+
+ 00370 8b 5e 14 mov ebx, DWORD PTR [esi+20]
+ 00373 8b cb mov ecx, ebx
+ 00375 89 4d 08 mov DWORD PTR _beg$1$[ebp], ecx
+
+; 776 : if (s->pending == s->pending_buf_size)
+
+ 00378 3b 5e 0c cmp ebx, DWORD PTR [esi+12]
+ 0037b 74 27 je SHORT $LN111@deflate
+$LN37@deflate:
+
+; 777 : break;
+; 778 : }
+; 779 : put_byte(s, s->gzhead->extra[s->gzindex]);
+
+ 0037d 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 00380 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 00383 8b 50 10 mov edx, DWORD PTR [eax+16]
+ 00386 8b 46 20 mov eax, DWORD PTR [esi+32]
+ 00389 8a 04 02 mov al, BYTE PTR [edx+eax]
+ 0038c 88 04 0b mov BYTE PTR [ebx+ecx], al
+ 0038f ff 46 14 inc DWORD PTR [esi+20]
+
+; 780 : s->gzindex++;
+
+ 00392 ff 46 20 inc DWORD PTR [esi+32]
+ 00395 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 00398 8b 4d 08 mov ecx, DWORD PTR _beg$1$[ebp]
+ 0039b 0f b7 40 14 movzx eax, WORD PTR [eax+20]
+ 0039f 39 46 20 cmp DWORD PTR [esi+32], eax
+ 003a2 72 9c jb SHORT $LL2@deflate
+$LN111@deflate:
+
+; 781 : }
+; 782 : if (s->gzhead->hcrc && s->pending > beg)
+
+ 003a4 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 003a7 83 78 2c 00 cmp DWORD PTR [eax+44], 0
+ 003ab 74 1b je SHORT $LN38@deflate
+ 003ad 8b 46 14 mov eax, DWORD PTR [esi+20]
+ 003b0 3b c1 cmp eax, ecx
+ 003b2 76 14 jbe SHORT $LN38@deflate
+
+; 783 : strm->adler = crc32(strm->adler, s->pending_buf + beg,
+
+ 003b4 2b c1 sub eax, ecx
+ 003b6 50 push eax
+ 003b7 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 003ba 03 c1 add eax, ecx
+ 003bc 50 push eax
+ 003bd ff 77 30 push DWORD PTR [edi+48]
+ 003c0 e8 00 00 00 00 call _crc32@12
+ 003c5 89 47 30 mov DWORD PTR [edi+48], eax
+$LN38@deflate:
+
+; 784 : s->pending - beg);
+; 785 : if (s->gzindex == s->gzhead->extra_len) {
+
+ 003c8 8b 4e 1c mov ecx, DWORD PTR [esi+28]
+ 003cb 8b 46 20 mov eax, DWORD PTR [esi+32]
+ 003ce 3b 41 14 cmp eax, DWORD PTR [ecx+20]
+ 003d1 75 0e jne SHORT $LN34@deflate
+
+; 786 : s->gzindex = 0;
+
+ 003d3 c7 46 20 00 00
+ 00 00 mov DWORD PTR [esi+32], 0
+$LN33@deflate:
+
+; 787 : s->status = NAME_STATE;
+; 788 : }
+; 789 : }
+; 790 : else
+; 791 : s->status = NAME_STATE;
+
+ 003da c7 46 04 49 00
+ 00 00 mov DWORD PTR [esi+4], 73 ; 00000049H
+$LN34@deflate:
+
+; 792 : }
+; 793 : if (s->status == NAME_STATE) {
+
+ 003e1 83 7e 04 49 cmp DWORD PTR [esi+4], 73 ; 00000049H
+ 003e5 0f 85 b6 00 00
+ 00 jne $LN42@deflate
+
+; 794 : if (s->gzhead->name != Z_NULL) {
+
+ 003eb 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 003ee 83 78 1c 00 cmp DWORD PTR [eax+28], 0
+ 003f2 0f 84 a2 00 00
+ 00 je $LN41@deflate
+
+; 795 : uInt beg = s->pending; /* start of bytes to update crc */
+
+ 003f8 8b 5e 14 mov ebx, DWORD PTR [esi+20]
+ 003fb 0f 1f 44 00 00 npad 5
+$LL6@deflate:
+
+; 796 : int val;
+; 797 :
+; 798 : do {
+; 799 : if (s->pending == s->pending_buf_size) {
+
+ 00400 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 00403 3b 56 0c cmp edx, DWORD PTR [esi+12]
+ 00406 75 32 jne SHORT $LN45@deflate
+
+; 800 : if (s->gzhead->hcrc && s->pending > beg)
+
+ 00408 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 0040b 83 78 2c 00 cmp DWORD PTR [eax+44], 0
+ 0040f 74 18 je SHORT $LN44@deflate
+ 00411 3b d3 cmp edx, ebx
+ 00413 76 14 jbe SHORT $LN44@deflate
+
+; 801 : strm->adler = crc32(strm->adler, s->pending_buf + beg,
+
+ 00415 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 00418 2b d3 sub edx, ebx
+ 0041a 52 push edx
+ 0041b 03 c3 add eax, ebx
+ 0041d 50 push eax
+ 0041e ff 77 30 push DWORD PTR [edi+48]
+ 00421 e8 00 00 00 00 call _crc32@12
+ 00426 89 47 30 mov DWORD PTR [edi+48], eax
+$LN44@deflate:
+
+; 802 : s->pending - beg);
+; 803 : flush_pending(strm);
+
+ 00429 8b cf mov ecx, edi
+ 0042b e8 00 00 00 00 call _flush_pending
+
+; 804 : beg = s->pending;
+
+ 00430 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 00433 8b da mov ebx, edx
+
+; 805 : if (s->pending == s->pending_buf_size) {
+
+ 00435 3b 56 0c cmp edx, DWORD PTR [esi+12]
+ 00438 74 28 je SHORT $LN102@deflate
+$LN45@deflate:
+
+; 807 : break;
+; 808 : }
+; 809 : }
+; 810 : val = s->gzhead->name[s->gzindex++];
+
+ 0043a 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 0043d 8b 4e 20 mov ecx, DWORD PTR [esi+32]
+ 00440 8b 40 1c mov eax, DWORD PTR [eax+28]
+ 00443 0f b6 04 08 movzx eax, BYTE PTR [eax+ecx]
+ 00447 89 45 08 mov DWORD PTR _val$1$[ebp], eax
+ 0044a 8d 41 01 lea eax, DWORD PTR [ecx+1]
+
+; 811 : put_byte(s, val);
+
+ 0044d 8b 4d 08 mov ecx, DWORD PTR _val$1$[ebp]
+ 00450 89 46 20 mov DWORD PTR [esi+32], eax
+ 00453 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 00456 88 0c 02 mov BYTE PTR [edx+eax], cl
+ 00459 ff 46 14 inc DWORD PTR [esi+20]
+
+; 812 : } while (val != 0);
+
+ 0045c 85 c9 test ecx, ecx
+ 0045e 75 a0 jne SHORT $LL6@deflate
+ 00460 eb 07 jmp SHORT $LN5@deflate
+$LN102@deflate:
+
+; 806 : val = 1;
+
+ 00462 c7 45 08 01 00
+ 00 00 mov DWORD PTR _val$1$[ebp], 1
+$LN5@deflate:
+
+; 813 : if (s->gzhead->hcrc && s->pending > beg)
+
+ 00469 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 0046c 83 78 2c 00 cmp DWORD PTR [eax+44], 0
+ 00470 74 1b je SHORT $LN46@deflate
+ 00472 8b 46 14 mov eax, DWORD PTR [esi+20]
+ 00475 3b c3 cmp eax, ebx
+ 00477 76 14 jbe SHORT $LN46@deflate
+
+; 814 : strm->adler = crc32(strm->adler, s->pending_buf + beg,
+
+ 00479 2b c3 sub eax, ebx
+ 0047b 50 push eax
+ 0047c 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 0047f 03 c3 add eax, ebx
+ 00481 50 push eax
+ 00482 ff 77 30 push DWORD PTR [edi+48]
+ 00485 e8 00 00 00 00 call _crc32@12
+ 0048a 89 47 30 mov DWORD PTR [edi+48], eax
+$LN46@deflate:
+
+; 815 : s->pending - beg);
+; 816 : if (val == 0) {
+
+ 0048d 83 7d 08 00 cmp DWORD PTR _val$1$[ebp], 0
+ 00491 75 0e jne SHORT $LN42@deflate
+
+; 817 : s->gzindex = 0;
+
+ 00493 c7 46 20 00 00
+ 00 00 mov DWORD PTR [esi+32], 0
+$LN41@deflate:
+
+; 818 : s->status = COMMENT_STATE;
+; 819 : }
+; 820 : }
+; 821 : else
+; 822 : s->status = COMMENT_STATE;
+
+ 0049a c7 46 04 5b 00
+ 00 00 mov DWORD PTR [esi+4], 91 ; 0000005bH
+$LN42@deflate:
+
+; 823 : }
+; 824 : if (s->status == COMMENT_STATE) {
+
+ 004a1 83 7e 04 5b cmp DWORD PTR [esi+4], 91 ; 0000005bH
+ 004a5 0f 85 af 00 00
+ 00 jne $LN50@deflate
+
+; 825 : if (s->gzhead->comment != Z_NULL) {
+
+ 004ab 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 004ae 83 78 24 00 cmp DWORD PTR [eax+36], 0
+ 004b2 0f 84 9b 00 00
+ 00 je $LN49@deflate
+
+; 826 : uInt beg = s->pending; /* start of bytes to update crc */
+
+ 004b8 8b 5e 14 mov ebx, DWORD PTR [esi+20]
+ 004bb 0f 1f 44 00 00 npad 5
+$LL9@deflate:
+
+; 827 : int val;
+; 828 :
+; 829 : do {
+; 830 : if (s->pending == s->pending_buf_size) {
+
+ 004c0 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 004c3 3b 56 0c cmp edx, DWORD PTR [esi+12]
+ 004c6 75 32 jne SHORT $LN53@deflate
+
+; 831 : if (s->gzhead->hcrc && s->pending > beg)
+
+ 004c8 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 004cb 83 78 2c 00 cmp DWORD PTR [eax+44], 0
+ 004cf 74 18 je SHORT $LN52@deflate
+ 004d1 3b d3 cmp edx, ebx
+ 004d3 76 14 jbe SHORT $LN52@deflate
+
+; 832 : strm->adler = crc32(strm->adler, s->pending_buf + beg,
+
+ 004d5 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 004d8 2b d3 sub edx, ebx
+ 004da 52 push edx
+ 004db 03 c3 add eax, ebx
+ 004dd 50 push eax
+ 004de ff 77 30 push DWORD PTR [edi+48]
+ 004e1 e8 00 00 00 00 call _crc32@12
+ 004e6 89 47 30 mov DWORD PTR [edi+48], eax
+$LN52@deflate:
+
+; 833 : s->pending - beg);
+; 834 : flush_pending(strm);
+
+ 004e9 8b cf mov ecx, edi
+ 004eb e8 00 00 00 00 call _flush_pending
+
+; 835 : beg = s->pending;
+
+ 004f0 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 004f3 8b da mov ebx, edx
+
+; 836 : if (s->pending == s->pending_buf_size) {
+
+ 004f5 3b 56 0c cmp edx, DWORD PTR [esi+12]
+ 004f8 74 28 je SHORT $LN103@deflate
+$LN53@deflate:
+
+; 838 : break;
+; 839 : }
+; 840 : }
+; 841 : val = s->gzhead->comment[s->gzindex++];
+
+ 004fa 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 004fd 8b 4e 20 mov ecx, DWORD PTR [esi+32]
+ 00500 8b 40 24 mov eax, DWORD PTR [eax+36]
+ 00503 0f b6 04 08 movzx eax, BYTE PTR [eax+ecx]
+ 00507 89 45 08 mov DWORD PTR _val$1$[ebp], eax
+ 0050a 8d 41 01 lea eax, DWORD PTR [ecx+1]
+
+; 842 : put_byte(s, val);
+
+ 0050d 8b 4d 08 mov ecx, DWORD PTR _val$1$[ebp]
+ 00510 89 46 20 mov DWORD PTR [esi+32], eax
+ 00513 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 00516 88 0c 02 mov BYTE PTR [edx+eax], cl
+ 00519 ff 46 14 inc DWORD PTR [esi+20]
+
+; 843 : } while (val != 0);
+
+ 0051c 85 c9 test ecx, ecx
+ 0051e 75 a0 jne SHORT $LL9@deflate
+ 00520 eb 07 jmp SHORT $LN8@deflate
+$LN103@deflate:
+
+; 837 : val = 1;
+
+ 00522 c7 45 08 01 00
+ 00 00 mov DWORD PTR _val$1$[ebp], 1
+$LN8@deflate:
+
+; 844 : if (s->gzhead->hcrc && s->pending > beg)
+
+ 00529 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 0052c 83 78 2c 00 cmp DWORD PTR [eax+44], 0
+ 00530 74 1b je SHORT $LN54@deflate
+ 00532 8b 46 14 mov eax, DWORD PTR [esi+20]
+ 00535 3b c3 cmp eax, ebx
+ 00537 76 14 jbe SHORT $LN54@deflate
+
+; 845 : strm->adler = crc32(strm->adler, s->pending_buf + beg,
+
+ 00539 2b c3 sub eax, ebx
+ 0053b 50 push eax
+ 0053c 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 0053f 03 c3 add eax, ebx
+ 00541 50 push eax
+ 00542 ff 77 30 push DWORD PTR [edi+48]
+ 00545 e8 00 00 00 00 call _crc32@12
+ 0054a 89 47 30 mov DWORD PTR [edi+48], eax
+$LN54@deflate:
+
+; 846 : s->pending - beg);
+; 847 : if (val == 0)
+
+ 0054d 83 7d 08 00 cmp DWORD PTR _val$1$[ebp], 0
+ 00551 75 07 jne SHORT $LN50@deflate
+$LN49@deflate:
+
+; 848 : s->status = HCRC_STATE;
+; 849 : }
+; 850 : else
+; 851 : s->status = HCRC_STATE;
+
+ 00553 c7 46 04 67 00
+ 00 00 mov DWORD PTR [esi+4], 103 ; 00000067H
+$LN50@deflate:
+
+; 852 : }
+; 853 : if (s->status == HCRC_STATE) {
+
+ 0055a 83 7e 04 67 cmp DWORD PTR [esi+4], 103 ; 00000067H
+ 0055e 75 58 jne SHORT $LN58@deflate
+
+; 854 : if (s->gzhead->hcrc) {
+
+ 00560 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 00563 83 78 2c 00 cmp DWORD PTR [eax+44], 0
+ 00567 74 48 je SHORT $LN57@deflate
+
+; 855 : if (s->pending + 2 > s->pending_buf_size)
+
+ 00569 8b 46 14 mov eax, DWORD PTR [esi+20]
+ 0056c 83 c0 02 add eax, 2
+ 0056f 3b 46 0c cmp eax, DWORD PTR [esi+12]
+ 00572 76 07 jbe SHORT $LN59@deflate
+
+; 856 : flush_pending(strm);
+
+ 00574 8b cf mov ecx, edi
+ 00576 e8 00 00 00 00 call _flush_pending
+$LN59@deflate:
+
+; 857 : if (s->pending + 2 <= s->pending_buf_size) {
+
+ 0057b 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 0057e 8d 42 02 lea eax, DWORD PTR [edx+2]
+ 00581 3b 46 0c cmp eax, DWORD PTR [esi+12]
+ 00584 77 32 ja SHORT $LN58@deflate
+
+; 858 : put_byte(s, (Byte)(strm->adler & 0xff));
+
+ 00586 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 00589 0f b6 47 30 movzx eax, BYTE PTR [edi+48]
+
+; 859 : put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
+; 860 : strm->adler = crc32(0L, Z_NULL, 0);
+
+ 0058d 6a 00 push 0
+ 0058f 6a 00 push 0
+ 00591 88 04 0a mov BYTE PTR [edx+ecx], al
+ 00594 ff 46 14 inc DWORD PTR [esi+20]
+ 00597 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 0059a 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 0059d 0f b6 47 31 movzx eax, BYTE PTR [edi+49]
+ 005a1 6a 00 push 0
+ 005a3 88 04 0a mov BYTE PTR [edx+ecx], al
+ 005a6 ff 46 14 inc DWORD PTR [esi+20]
+ 005a9 e8 00 00 00 00 call _crc32@12
+ 005ae 89 47 30 mov DWORD PTR [edi+48], eax
+$LN57@deflate:
+
+; 861 : s->status = BUSY_STATE;
+; 862 : }
+; 863 : }
+; 864 : else
+; 865 : s->status = BUSY_STATE;
+
+ 005b1 c7 46 04 71 00
+ 00 00 mov DWORD PTR [esi+4], 113 ; 00000071H
+$LN58@deflate:
+
+; 866 : }
+; 867 : #endif
+; 868 :
+; 869 : /* Flush as much pending output as possible */
+; 870 : if (s->pending != 0) {
+
+ 005b8 83 7e 14 00 cmp DWORD PTR [esi+20], 0
+ 005bc 74 1f je SHORT $LN61@deflate
+
+; 871 : flush_pending(strm);
+
+ 005be 8b cf mov ecx, edi
+ 005c0 e8 00 00 00 00 call _flush_pending
+
+; 872 : if (strm->avail_out == 0) {
+
+ 005c5 83 7f 10 00 cmp DWORD PTR [edi+16], 0
+ 005c9 75 61 jne SHORT $LN112@deflate
+$LN117@deflate:
+
+; 873 : /* Since avail_out is 0, deflate will be called again with
+; 874 : * more output space, but possibly with both pending and
+; 875 : * avail_in equal to zero. There won't be anything to do,
+; 876 : * but this is not an error situation so make sure we
+; 877 : * return OK instead of BUF_ERROR at next call of deflate:
+; 878 : */
+; 879 : s->last_flush = -1;
+
+ 005cb c7 46 28 ff ff
+ ff ff mov DWORD PTR [esi+40], -1
+$LN72@deflate:
+ 005d2 5b pop ebx
+ 005d3 5f pop edi
+
+; 880 : return Z_OK;
+
+ 005d4 33 c0 xor eax, eax
+ 005d6 5e pop esi
+
+; 976 : }
+
+ 005d7 8b e5 mov esp, ebp
+ 005d9 5d pop ebp
+ 005da c2 08 00 ret 8
+$LN61@deflate:
+
+; 881 : }
+; 882 :
+; 883 : /* Make sure there is something to do and avoid duplicate consecutive
+; 884 : * flushes. For repeated and useless calls with Z_FINISH, we keep
+; 885 : * returning Z_STREAM_END instead of Z_BUF_ERROR.
+; 886 : */
+; 887 : } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) &&
+
+ 005dd 83 7f 04 00 cmp DWORD PTR [edi+4], 0
+ 005e1 8b 5d 0c mov ebx, DWORD PTR _flush$[ebp]
+ 005e4 75 49 jne SHORT $LN64@deflate
+ 005e6 8b 4d fc mov ecx, DWORD PTR _old_flush$1$[ebp]
+ 005e9 33 c0 xor eax, eax
+ 005eb 83 f9 04 cmp ecx, 4
+ 005ee ba 09 00 00 00 mov edx, 9
+ 005f3 0f 4f c2 cmovg eax, edx
+ 005f6 8d 14 09 lea edx, DWORD PTR [ecx+ecx]
+ 005f9 33 c9 xor ecx, ecx
+ 005fb 2b d0 sub edx, eax
+ 005fd 83 fb 04 cmp ebx, 4
+ 00600 b8 09 00 00 00 mov eax, 9
+ 00605 0f 4f c8 cmovg ecx, eax
+ 00608 8d 04 1b lea eax, DWORD PTR [ebx+ebx]
+ 0060b 2b c1 sub eax, ecx
+ 0060d 3b c2 cmp eax, edx
+ 0060f 7f 1e jg SHORT $LN64@deflate
+ 00611 83 fb 04 cmp ebx, 4
+ 00614 74 19 je SHORT $LN64@deflate
+
+; 888 : flush != Z_FINISH) {
+; 889 : ERR_RETURN(strm, Z_BUF_ERROR);
+
+ 00616 a1 1c 00 00 00 mov eax, DWORD PTR _z_errmsg+28
+ 0061b 5b pop ebx
+ 0061c 89 47 18 mov DWORD PTR [edi+24], eax
+ 0061f b8 fb ff ff ff mov eax, -5 ; fffffffbH
+ 00624 5f pop edi
+ 00625 5e pop esi
+
+; 976 : }
+
+ 00626 8b e5 mov esp, ebp
+ 00628 5d pop ebp
+ 00629 c2 08 00 ret 8
+$LN112@deflate:
+ 0062c 8b 5d 0c mov ebx, DWORD PTR _flush$[ebp]
+$LN64@deflate:
+
+; 890 : }
+; 891 :
+; 892 : /* User must not provide more input after the first FINISH: */
+; 893 : if (s->status == FINISH_STATE && strm->avail_in != 0) {
+
+ 0062f 8b 46 04 mov eax, DWORD PTR [esi+4]
+ 00632 3d 9a 02 00 00 cmp eax, 666 ; 0000029aH
+ 00637 75 1c jne SHORT $LN65@deflate
+ 00639 83 7f 04 00 cmp DWORD PTR [edi+4], 0
+ 0063d 74 1c je SHORT $LN116@deflate
+
+; 894 : ERR_RETURN(strm, Z_BUF_ERROR);
+
+ 0063f a1 1c 00 00 00 mov eax, DWORD PTR _z_errmsg+28
+ 00644 5b pop ebx
+ 00645 89 47 18 mov DWORD PTR [edi+24], eax
+ 00648 b8 fb ff ff ff mov eax, -5 ; fffffffbH
+ 0064d 5f pop edi
+ 0064e 5e pop esi
+
+; 976 : }
+
+ 0064f 8b e5 mov esp, ebp
+ 00651 5d pop ebp
+ 00652 c2 08 00 ret 8
+$LN65@deflate:
+
+; 895 : }
+; 896 :
+; 897 : /* Start a new block or continue the current one.
+; 898 : */
+; 899 : if (strm->avail_in != 0 || s->lookahead != 0 ||
+
+ 00655 83 7f 04 00 cmp DWORD PTR [edi+4], 0
+ 00659 75 19 jne SHORT $LN67@deflate
+$LN116@deflate:
+ 0065b 83 7e 74 00 cmp DWORD PTR [esi+116], 0
+ 0065f 75 13 jne SHORT $LN67@deflate
+ 00661 85 db test ebx, ebx
+ 00663 0f 84 e9 00 00
+ 00 je $LN79@deflate
+ 00669 3d 9a 02 00 00 cmp eax, 666 ; 0000029aH
+ 0066e 0f 84 de 00 00
+ 00 je $LN79@deflate
+$LN67@deflate:
+
+; 900 : (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
+; 901 : block_state bstate;
+; 902 :
+; 903 : bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :
+
+ 00674 8b 86 88 00 00
+ 00 mov eax, DWORD PTR [esi+136]
+ 0067a 83 f8 02 cmp eax, 2
+ 0067d 75 0b jne SHORT $LN96@deflate
+ 0067f 8b d3 mov edx, ebx
+ 00681 8b ce mov ecx, esi
+ 00683 e8 00 00 00 00 call _deflate_huff
+ 00688 eb 27 jmp SHORT $LN95@deflate
+$LN96@deflate:
+ 0068a 83 f8 03 cmp eax, 3
+ 0068d 75 0b jne SHORT $LN94@deflate
+ 0068f 8b d3 mov edx, ebx
+ 00691 8b ce mov ecx, esi
+ 00693 e8 00 00 00 00 call _deflate_rle
+ 00698 eb 17 jmp SHORT $LN95@deflate
+$LN94@deflate:
+ 0069a 8b 86 84 00 00
+ 00 mov eax, DWORD PTR [esi+132]
+ 006a0 53 push ebx
+ 006a1 56 push esi
+ 006a2 8d 04 40 lea eax, DWORD PTR [eax+eax*2]
+ 006a5 8b 04 85 08 00
+ 00 00 mov eax, DWORD PTR _configuration_table[eax*4+8]
+ 006ac ff d0 call eax
+ 006ae 83 c4 08 add esp, 8
+$LN95@deflate:
+
+; 904 : (s->strategy == Z_RLE ? deflate_rle(s, flush) :
+; 905 : (*(configuration_table[s->level].func))(s, flush));
+; 906 :
+; 907 : if (bstate == finish_started || bstate == finish_done) {
+
+ 006b1 83 f8 02 cmp eax, 2
+ 006b4 74 05 je SHORT $LN69@deflate
+ 006b6 83 f8 03 cmp eax, 3
+ 006b9 75 07 jne SHORT $LN68@deflate
+$LN69@deflate:
+
+; 908 : s->status = FINISH_STATE;
+
+ 006bb c7 46 04 9a 02
+ 00 00 mov DWORD PTR [esi+4], 666 ; 0000029aH
+$LN68@deflate:
+
+; 909 : }
+; 910 : if (bstate == need_more || bstate == finish_started) {
+
+ 006c2 85 c0 test eax, eax
+ 006c4 0f 84 69 01 00
+ 00 je $LN71@deflate
+ 006ca 83 f8 02 cmp eax, 2
+ 006cd 0f 84 60 01 00
+ 00 je $LN71@deflate
+
+; 912 : s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
+; 913 : }
+; 914 : return Z_OK;
+; 915 : /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
+; 916 : * of deflate should use the same flush parameter to make sure
+; 917 : * that the flush is complete. So we don't have to output an
+; 918 : * empty block here, this will be done at next call. This also
+; 919 : * ensures that for a very small output buffer, we emit at most
+; 920 : * one empty block.
+; 921 : */
+; 922 : }
+; 923 : if (bstate == block_done) {
+
+ 006d3 83 f8 01 cmp eax, 1
+ 006d6 75 7a jne SHORT $LN79@deflate
+
+; 924 : if (flush == Z_PARTIAL_FLUSH) {
+
+ 006d8 3b d8 cmp ebx, eax
+ 006da 75 09 jne SHORT $LN74@deflate
+
+; 925 : _tr_align(s);
+
+ 006dc 8b ce mov ecx, esi
+ 006de e8 00 00 00 00 call __tr_align
+ 006e3 eb 5c jmp SHORT $LN78@deflate
+$LN74@deflate:
+
+; 926 : } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
+
+ 006e5 83 fb 05 cmp ebx, 5
+ 006e8 74 57 je SHORT $LN78@deflate
+
+; 927 : _tr_stored_block(s, (char*)0, 0L, 0);
+
+ 006ea 6a 00 push 0
+ 006ec 6a 00 push 0
+ 006ee 33 d2 xor edx, edx
+ 006f0 8b ce mov ecx, esi
+ 006f2 e8 00 00 00 00 call __tr_stored_block
+ 006f7 83 c4 08 add esp, 8
+
+; 928 : /* For a full flush, this empty block will be recognized
+; 929 : * as a special marker by inflate_sync().
+; 930 : */
+; 931 : if (flush == Z_FULL_FLUSH) {
+
+ 006fa 83 fb 03 cmp ebx, 3
+ 006fd 75 42 jne SHORT $LN78@deflate
+
+; 932 : CLEAR_HASH(s); /* forget history */
+
+ 006ff 8b 46 44 mov eax, DWORD PTR [esi+68]
+ 00702 33 d2 xor edx, edx
+ 00704 8b 4e 4c mov ecx, DWORD PTR [esi+76]
+ 00707 66 89 54 48 fe mov WORD PTR [eax+ecx*2-2], dx
+ 0070c 8b 46 4c mov eax, DWORD PTR [esi+76]
+ 0070f 8d 04 45 fe ff
+ ff ff lea eax, DWORD PTR [eax*2-2]
+ 00716 50 push eax
+ 00717 52 push edx
+ 00718 ff 76 44 push DWORD PTR [esi+68]
+ 0071b e8 00 00 00 00 call _memset
+ 00720 83 c4 0c add esp, 12 ; 0000000cH
+
+; 933 : if (s->lookahead == 0) {
+
+ 00723 83 7e 74 00 cmp DWORD PTR [esi+116], 0
+ 00727 75 18 jne SHORT $LN78@deflate
+
+; 934 : s->strstart = 0;
+
+ 00729 c7 46 6c 00 00
+ 00 00 mov DWORD PTR [esi+108], 0
+
+; 935 : s->block_start = 0L;
+
+ 00730 c7 46 5c 00 00
+ 00 00 mov DWORD PTR [esi+92], 0
+
+; 936 : s->insert = 0;
+
+ 00737 c7 86 b4 16 00
+ 00 00 00 00 00 mov DWORD PTR [esi+5812], 0
+$LN78@deflate:
+
+; 937 : }
+; 938 : }
+; 939 : }
+; 940 : flush_pending(strm);
+
+ 00741 8b cf mov ecx, edi
+ 00743 e8 00 00 00 00 call _flush_pending
+
+; 941 : if (strm->avail_out == 0) {
+
+ 00748 83 7f 10 00 cmp DWORD PTR [edi+16], 0
+ 0074c 0f 84 79 fe ff
+ ff je $LN117@deflate
+$LN79@deflate:
+
+; 942 : s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
+; 943 : return Z_OK;
+; 944 : }
+; 945 : }
+; 946 : }
+; 947 : Assert(strm->avail_out > 0, "bug2");
+; 948 :
+; 949 : if (flush != Z_FINISH) return Z_OK;
+
+ 00752 83 fb 04 cmp ebx, 4
+ 00755 0f 85 77 fe ff
+ ff jne $LN72@deflate
+
+; 950 : if (s->wrap <= 0) return Z_STREAM_END;
+
+ 0075b 8b 46 18 mov eax, DWORD PTR [esi+24]
+ 0075e 85 c0 test eax, eax
+ 00760 7f 0c jg SHORT $LN81@deflate
+ 00762 8d 43 fd lea eax, DWORD PTR [ebx-3]
+ 00765 5b pop ebx
+ 00766 5f pop edi
+ 00767 5e pop esi
+
+; 976 : }
+
+ 00768 8b e5 mov esp, ebp
+ 0076a 5d pop ebp
+ 0076b c2 08 00 ret 8
+$LN81@deflate:
+
+; 951 :
+; 952 : /* Write the trailer */
+; 953 : #ifdef GZIP
+; 954 : if (s->wrap == 2) {
+
+ 0076e 83 f8 02 cmp eax, 2
+ 00771 0f 85 82 00 00
+ 00 jne $LN82@deflate
+
+; 955 : put_byte(s, (Byte)(strm->adler & 0xff));
+
+ 00777 8b 4e 14 mov ecx, DWORD PTR [esi+20]
+ 0077a 0f b6 47 30 movzx eax, BYTE PTR [edi+48]
+ 0077e 8b 56 08 mov edx, DWORD PTR [esi+8]
+ 00781 88 04 0a mov BYTE PTR [edx+ecx], al
+ 00784 ff 46 14 inc DWORD PTR [esi+20]
+ 00787 8b 56 14 mov edx, DWORD PTR [esi+20]
+
+; 956 : put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
+
+ 0078a 0f b6 47 31 movzx eax, BYTE PTR [edi+49]
+ 0078e 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 00791 88 04 0a mov BYTE PTR [edx+ecx], al
+ 00794 ff 46 14 inc DWORD PTR [esi+20]
+ 00797 8b 56 14 mov edx, DWORD PTR [esi+20]
+
+; 957 : put_byte(s, (Byte)((strm->adler >> 16) & 0xff));
+
+ 0079a 0f b6 47 32 movzx eax, BYTE PTR [edi+50]
+ 0079e 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 007a1 88 04 0a mov BYTE PTR [edx+ecx], al
+ 007a4 ff 46 14 inc DWORD PTR [esi+20]
+ 007a7 8b 56 14 mov edx, DWORD PTR [esi+20]
+
+; 958 : put_byte(s, (Byte)((strm->adler >> 24) & 0xff));
+
+ 007aa 0f b6 47 33 movzx eax, BYTE PTR [edi+51]
+ 007ae 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 007b1 88 04 0a mov BYTE PTR [edx+ecx], al
+ 007b4 ff 46 14 inc DWORD PTR [esi+20]
+ 007b7 8b 56 14 mov edx, DWORD PTR [esi+20]
+
+; 959 : put_byte(s, (Byte)(strm->total_in & 0xff));
+
+ 007ba 0f b6 47 08 movzx eax, BYTE PTR [edi+8]
+ 007be 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 007c1 88 04 0a mov BYTE PTR [edx+ecx], al
+ 007c4 ff 46 14 inc DWORD PTR [esi+20]
+ 007c7 8b 56 14 mov edx, DWORD PTR [esi+20]
+
+; 960 : put_byte(s, (Byte)((strm->total_in >> 8) & 0xff));
+
+ 007ca 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 007cd 0f b6 47 09 movzx eax, BYTE PTR [edi+9]
+ 007d1 88 04 0a mov BYTE PTR [edx+ecx], al
+ 007d4 ff 46 14 inc DWORD PTR [esi+20]
+ 007d7 8b 56 14 mov edx, DWORD PTR [esi+20]
+
+; 961 : put_byte(s, (Byte)((strm->total_in >> 16) & 0xff));
+
+ 007da 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 007dd 0f b6 47 0a movzx eax, BYTE PTR [edi+10]
+ 007e1 88 04 0a mov BYTE PTR [edx+ecx], al
+ 007e4 ff 46 14 inc DWORD PTR [esi+20]
+ 007e7 8b 56 14 mov edx, DWORD PTR [esi+20]
+
+; 962 : put_byte(s, (Byte)((strm->total_in >> 24) & 0xff));
+
+ 007ea 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 007ed 0f b6 47 0b movzx eax, BYTE PTR [edi+11]
+ 007f1 88 04 0a mov BYTE PTR [edx+ecx], al
+ 007f4 ff 46 14 inc DWORD PTR [esi+20]
+
+; 963 : }
+
+ 007f7 eb 16 jmp SHORT $LN83@deflate
+$LN82@deflate:
+
+; 964 : else
+; 965 : #endif
+; 966 : {
+; 967 : putShortMSB(s, (uInt)(strm->adler >> 16));
+
+ 007f9 0f b7 57 32 movzx edx, WORD PTR [edi+50]
+ 007fd 8b ce mov ecx, esi
+ 007ff e8 00 00 00 00 call _putShortMSB
+
+; 968 : putShortMSB(s, (uInt)(strm->adler & 0xffff));
+
+ 00804 0f b7 57 30 movzx edx, WORD PTR [edi+48]
+ 00808 8b ce mov ecx, esi
+ 0080a e8 00 00 00 00 call _putShortMSB
+$LN83@deflate:
+
+; 969 : }
+; 970 : flush_pending(strm);
+
+ 0080f 8b cf mov ecx, edi
+ 00811 e8 00 00 00 00 call _flush_pending
+
+; 971 : /* If avail_out is zero, the application will call deflate again
+; 972 : * to flush the rest.
+; 973 : */
+; 974 : if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */
+
+ 00816 8b 46 18 mov eax, DWORD PTR [esi+24]
+ 00819 85 c0 test eax, eax
+ 0081b 7e 05 jle SHORT $LN84@deflate
+ 0081d f7 d8 neg eax
+ 0081f 89 46 18 mov DWORD PTR [esi+24], eax
+$LN84@deflate:
+
+; 975 : return s->pending != 0 ? Z_OK : Z_STREAM_END;
+
+ 00822 33 c0 xor eax, eax
+ 00824 39 46 14 cmp DWORD PTR [esi+20], eax
+ 00827 5b pop ebx
+ 00828 5f pop edi
+ 00829 0f 94 c0 sete al
+ 0082c 5e pop esi
+
+; 976 : }
+
+ 0082d 8b e5 mov esp, ebp
+ 0082f 5d pop ebp
+ 00830 c2 08 00 ret 8
+$LN71@deflate:
+
+; 911 : if (strm->avail_out == 0) {
+
+ 00833 83 7f 10 00 cmp DWORD PTR [edi+16], 0
+ 00837 0f 85 95 fd ff
+ ff jne $LN72@deflate
+
+; 873 : /* Since avail_out is 0, deflate will be called again with
+; 874 : * more output space, but possibly with both pending and
+; 875 : * avail_in equal to zero. There won't be anything to do,
+; 876 : * but this is not an error situation so make sure we
+; 877 : * return OK instead of BUF_ERROR at next call of deflate:
+; 878 : */
+; 879 : s->last_flush = -1;
+
+ 0083d 5b pop ebx
+ 0083e 5f pop edi
+ 0083f c7 46 28 ff ff
+ ff ff mov DWORD PTR [esi+40], -1
+
+; 880 : return Z_OK;
+
+ 00846 33 c0 xor eax, eax
+ 00848 5e pop esi
+
+; 976 : }
+
+ 00849 8b e5 mov esp, ebp
+ 0084b 5d pop ebp
+ 0084c c2 08 00 ret 8
+$LN13@deflate:
+
+; 680 : (s->status == FINISH_STATE && flush != Z_FINISH)) {
+; 681 : ERR_RETURN(strm, Z_STREAM_ERROR);
+
+ 0084f a1 10 00 00 00 mov eax, DWORD PTR _z_errmsg+16
+ 00854 89 47 18 mov DWORD PTR [edi+24], eax
+$LN11@deflate:
+ 00857 5f pop edi
+ 00858 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 0085d 5e pop esi
+
+; 976 : }
+
+ 0085e 8b e5 mov esp, ebp
+ 00860 5d pop ebp
+ 00861 c2 08 00 ret 8
+_deflate@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflateEnd@4
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_deflateEnd@4 PROC ; COMDAT
+
+; 981 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 982 : int status;
+; 983 :
+; 984 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00004 8b 75 08 mov esi, DWORD PTR _strm$[ebp]
+ 00007 85 f6 test esi, esi
+ 00009 0f 84 bd 00 00
+ 00 je $LN3@deflateEnd
+ 0000f 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 00012 85 c0 test eax, eax
+ 00014 0f 84 b2 00 00
+ 00 je $LN3@deflateEnd
+
+; 985 :
+; 986 : status = strm->state->status;
+
+ 0001a 57 push edi
+ 0001b 8b 78 04 mov edi, DWORD PTR [eax+4]
+
+; 987 : if (status != INIT_STATE &&
+; 988 : status != EXTRA_STATE &&
+; 989 : status != NAME_STATE &&
+; 990 : status != COMMENT_STATE &&
+; 991 : status != HCRC_STATE &&
+; 992 : status != BUSY_STATE &&
+
+ 0001e 83 ff 2a cmp edi, 42 ; 0000002aH
+ 00021 74 2c je SHORT $LN4@deflateEnd
+ 00023 83 ff 45 cmp edi, 69 ; 00000045H
+ 00026 74 27 je SHORT $LN4@deflateEnd
+ 00028 83 ff 49 cmp edi, 73 ; 00000049H
+ 0002b 74 22 je SHORT $LN4@deflateEnd
+ 0002d 83 ff 5b cmp edi, 91 ; 0000005bH
+ 00030 74 1d je SHORT $LN4@deflateEnd
+ 00032 83 ff 67 cmp edi, 103 ; 00000067H
+ 00035 74 18 je SHORT $LN4@deflateEnd
+ 00037 83 ff 71 cmp edi, 113 ; 00000071H
+ 0003a 74 13 je SHORT $LN4@deflateEnd
+ 0003c 81 ff 9a 02 00
+ 00 cmp edi, 666 ; 0000029aH
+ 00042 74 0b je SHORT $LN4@deflateEnd
+
+; 993 : status != FINISH_STATE) {
+; 994 : return Z_STREAM_ERROR;
+
+ 00044 5f pop edi
+ 00045 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 0004a 5e pop esi
+
+; 1007 : }
+
+ 0004b 5d pop ebp
+ 0004c c2 04 00 ret 4
+$LN4@deflateEnd:
+
+; 995 : }
+; 996 :
+; 997 : /* Deallocate in reverse order of allocations: */
+; 998 : TRY_FREE(strm, strm->state->pending_buf);
+
+ 0004f 8b 40 08 mov eax, DWORD PTR [eax+8]
+ 00052 85 c0 test eax, eax
+ 00054 74 0c je SHORT $LN5@deflateEnd
+ 00056 50 push eax
+ 00057 ff 76 28 push DWORD PTR [esi+40]
+ 0005a 8b 46 24 mov eax, DWORD PTR [esi+36]
+ 0005d ff d0 call eax
+ 0005f 83 c4 08 add esp, 8
+$LN5@deflateEnd:
+
+; 999 : TRY_FREE(strm, strm->state->head);
+
+ 00062 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 00065 8b 40 44 mov eax, DWORD PTR [eax+68]
+ 00068 85 c0 test eax, eax
+ 0006a 74 0c je SHORT $LN6@deflateEnd
+ 0006c 50 push eax
+ 0006d ff 76 28 push DWORD PTR [esi+40]
+ 00070 8b 46 24 mov eax, DWORD PTR [esi+36]
+ 00073 ff d0 call eax
+ 00075 83 c4 08 add esp, 8
+$LN6@deflateEnd:
+
+; 1000 : TRY_FREE(strm, strm->state->prev);
+
+ 00078 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 0007b 8b 40 40 mov eax, DWORD PTR [eax+64]
+ 0007e 85 c0 test eax, eax
+ 00080 74 0c je SHORT $LN7@deflateEnd
+ 00082 50 push eax
+ 00083 ff 76 28 push DWORD PTR [esi+40]
+ 00086 8b 46 24 mov eax, DWORD PTR [esi+36]
+ 00089 ff d0 call eax
+ 0008b 83 c4 08 add esp, 8
+$LN7@deflateEnd:
+
+; 1001 : TRY_FREE(strm, strm->state->window);
+
+ 0008e 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 00091 8b 40 38 mov eax, DWORD PTR [eax+56]
+ 00094 85 c0 test eax, eax
+ 00096 74 0c je SHORT $LN8@deflateEnd
+ 00098 50 push eax
+ 00099 ff 76 28 push DWORD PTR [esi+40]
+ 0009c 8b 46 24 mov eax, DWORD PTR [esi+36]
+ 0009f ff d0 call eax
+ 000a1 83 c4 08 add esp, 8
+$LN8@deflateEnd:
+
+; 1002 :
+; 1003 : ZFREE(strm, strm->state);
+
+ 000a4 ff 76 1c push DWORD PTR [esi+28]
+ 000a7 8b 46 24 mov eax, DWORD PTR [esi+36]
+ 000aa ff 76 28 push DWORD PTR [esi+40]
+ 000ad ff d0 call eax
+ 000af 83 c4 08 add esp, 8
+
+; 1004 : strm->state = Z_NULL;
+
+ 000b2 c7 46 1c 00 00
+ 00 00 mov DWORD PTR [esi+28], 0
+
+; 1005 :
+; 1006 : return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
+
+ 000b9 33 c0 xor eax, eax
+ 000bb b9 fd ff ff ff mov ecx, -3 ; fffffffdH
+ 000c0 83 ff 71 cmp edi, 113 ; 00000071H
+ 000c3 5f pop edi
+ 000c4 0f 44 c1 cmove eax, ecx
+ 000c7 5e pop esi
+
+; 1007 : }
+
+ 000c8 5d pop ebp
+ 000c9 c2 04 00 ret 4
+$LN3@deflateEnd:
+
+; 982 : int status;
+; 983 :
+; 984 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 000cc b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 000d1 5e pop esi
+
+; 1007 : }
+
+ 000d2 5d pop ebp
+ 000d3 c2 04 00 ret 4
+_deflateEnd@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflateInit_@16
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_level$ = 12 ; size = 4
+_version$ = 16 ; size = 4
+_stream_size$ = 20 ; size = 4
+_deflateInit_@16 PROC ; COMDAT
+
+; 206 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 207 : return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
+
+ 00003 ff 75 14 push DWORD PTR _stream_size$[ebp]
+ 00006 ff 75 10 push DWORD PTR _version$[ebp]
+ 00009 6a 00 push 0
+ 0000b 6a 08 push 8
+ 0000d 6a 0f push 15 ; 0000000fH
+ 0000f 6a 08 push 8
+ 00011 ff 75 0c push DWORD PTR _level$[ebp]
+ 00014 ff 75 08 push DWORD PTR _strm$[ebp]
+ 00017 e8 00 00 00 00 call _deflateInit2_@32
+
+; 208 : Z_DEFAULT_STRATEGY, version, stream_size);
+; 209 : /* To do: ignore strm->next_in if we use it as window */
+; 210 : }
+
+ 0001c 5d pop ebp
+ 0001d c2 10 00 ret 16 ; 00000010H
+_deflateInit_@16 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflateInit2_@32
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_level$ = 12 ; size = 4
+_method$ = 16 ; size = 4
+_windowBits$ = 20 ; size = 4
+_memLevel$ = 24 ; size = 4
+_strategy$ = 28 ; size = 4
+_version$ = 32 ; size = 4
+_stream_size$ = 36 ; size = 4
+_deflateInit2_@32 PROC ; COMDAT
+
+; 223 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 224 : deflate_state *s;
+; 225 : int wrap = 1;
+; 226 : static const char my_version[] = ZLIB_VERSION;
+; 227 :
+; 228 : ushf *overlay;
+; 229 : /* We overlay pending_buf and d_buf+l_buf. This works since the average
+; 230 : * output size for (length,distance) codes is <= 24 bits.
+; 231 : */
+; 232 :
+; 233 : if (version == Z_NULL || version[0] != my_version[0] ||
+
+ 00003 8b 45 20 mov eax, DWORD PTR _version$[ebp]
+ 00006 56 push esi
+ 00007 be 01 00 00 00 mov esi, 1
+ 0000c 85 c0 test eax, eax
+ 0000e 0f 84 0b 02 00
+ 00 je $LN3@deflateIni
+ 00014 80 38 31 cmp BYTE PTR [eax], 49 ; 00000031H
+ 00017 0f 85 02 02 00
+ 00 jne $LN3@deflateIni
+ 0001d 83 7d 24 38 cmp DWORD PTR _stream_size$[ebp], 56 ; 00000038H
+ 00021 0f 85 f8 01 00
+ 00 jne $LN3@deflateIni
+
+; 236 : }
+; 237 : if (strm == Z_NULL) return Z_STREAM_ERROR;
+
+ 00027 57 push edi
+ 00028 8b 7d 08 mov edi, DWORD PTR _strm$[ebp]
+ 0002b 85 ff test edi, edi
+ 0002d 75 09 jne SHORT $LN4@deflateIni
+ 0002f 5f pop edi
+ 00030 8d 46 fd lea eax, DWORD PTR [esi-3]
+ 00033 5e pop esi
+
+; 320 : }
+
+ 00034 5d pop ebp
+ 00035 c2 20 00 ret 32 ; 00000020H
+$LN4@deflateIni:
+
+; 238 :
+; 239 : strm->msg = Z_NULL;
+; 240 : if (strm->zalloc == (alloc_func)0) {
+
+ 00038 83 7f 20 00 cmp DWORD PTR [edi+32], 0
+ 0003c c7 47 18 00 00
+ 00 00 mov DWORD PTR [edi+24], 0
+ 00043 75 0e jne SHORT $LN5@deflateIni
+
+; 241 : #ifdef Z_SOLO
+; 242 : return Z_STREAM_ERROR;
+; 243 : #else
+; 244 : strm->zalloc = zcalloc;
+
+ 00045 c7 47 20 00 00
+ 00 00 mov DWORD PTR [edi+32], OFFSET _zcalloc
+
+; 245 : strm->opaque = (voidpf)0;
+
+ 0004c c7 47 28 00 00
+ 00 00 mov DWORD PTR [edi+40], 0
+$LN5@deflateIni:
+
+; 246 : #endif
+; 247 : }
+; 248 : if (strm->zfree == (free_func)0)
+
+ 00053 83 7f 24 00 cmp DWORD PTR [edi+36], 0
+ 00057 75 07 jne SHORT $LN6@deflateIni
+
+; 249 : #ifdef Z_SOLO
+; 250 : return Z_STREAM_ERROR;
+; 251 : #else
+; 252 : strm->zfree = zcfree;
+
+ 00059 c7 47 24 00 00
+ 00 00 mov DWORD PTR [edi+36], OFFSET _zcfree
+$LN6@deflateIni:
+
+; 253 : #endif
+; 254 :
+; 255 : #ifdef FASTEST
+; 256 : if (level != 0) level = 1;
+; 257 : #else
+; 258 : if (level == Z_DEFAULT_COMPRESSION) level = 6;
+
+ 00060 8b 4d 0c mov ecx, DWORD PTR _level$[ebp]
+ 00063 b8 06 00 00 00 mov eax, 6
+ 00068 83 f9 ff cmp ecx, -1
+ 0006b 53 push ebx
+
+; 259 : #endif
+; 260 :
+; 261 : if (windowBits < 0) { /* suppress zlib wrapper */
+
+ 0006c 8b 5d 14 mov ebx, DWORD PTR _windowBits$[ebp]
+ 0006f 0f 44 c8 cmove ecx, eax
+ 00072 89 4d 0c mov DWORD PTR _level$[ebp], ecx
+ 00075 85 db test ebx, ebx
+ 00077 79 06 jns SHORT $LN8@deflateIni
+
+; 262 : wrap = 0;
+
+ 00079 33 f6 xor esi, esi
+
+; 263 : windowBits = -windowBits;
+
+ 0007b f7 db neg ebx
+
+; 264 : }
+
+ 0007d eb 0d jmp SHORT $LN10@deflateIni
+$LN8@deflateIni:
+
+; 265 : #ifdef GZIP
+; 266 : else if (windowBits > 15) {
+
+ 0007f 83 fb 0f cmp ebx, 15 ; 0000000fH
+ 00082 7e 08 jle SHORT $LN10@deflateIni
+
+; 267 : wrap = 2; /* write gzip wrapper instead */
+
+ 00084 be 02 00 00 00 mov esi, 2
+
+; 268 : windowBits -= 16;
+
+ 00089 83 eb 10 sub ebx, 16 ; 00000010H
+$LN10@deflateIni:
+
+; 269 : }
+; 270 : #endif
+; 271 : if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
+; 272 : windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
+; 273 : strategy < 0 || strategy > Z_FIXED) {
+
+ 0008c 8b 45 18 mov eax, DWORD PTR _memLevel$[ebp]
+ 0008f 48 dec eax
+ 00090 83 f8 08 cmp eax, 8
+ 00093 0f 87 7a 01 00
+ 00 ja $LN12@deflateIni
+ 00099 83 7d 10 08 cmp DWORD PTR _method$[ebp], 8
+ 0009d 0f 85 70 01 00
+ 00 jne $LN12@deflateIni
+ 000a3 8d 43 f8 lea eax, DWORD PTR [ebx-8]
+ 000a6 83 f8 07 cmp eax, 7
+ 000a9 0f 87 64 01 00
+ 00 ja $LN12@deflateIni
+ 000af 83 f9 09 cmp ecx, 9
+ 000b2 0f 87 5b 01 00
+ 00 ja $LN12@deflateIni
+ 000b8 83 7d 1c 04 cmp DWORD PTR _strategy$[ebp], 4
+ 000bc 0f 87 51 01 00
+ 00 ja $LN12@deflateIni
+
+; 275 : }
+; 276 : if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */
+; 277 : s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
+
+ 000c2 68 c4 16 00 00 push 5828 ; 000016c4H
+ 000c7 b8 09 00 00 00 mov eax, 9
+ 000cc 83 fb 08 cmp ebx, 8
+ 000cf 6a 01 push 1
+ 000d1 ff 77 28 push DWORD PTR [edi+40]
+ 000d4 0f 44 d8 cmove ebx, eax
+ 000d7 8b 47 20 mov eax, DWORD PTR [edi+32]
+ 000da ff d0 call eax
+ 000dc 83 c4 0c add esp, 12 ; 0000000cH
+
+; 278 : if (s == Z_NULL) return Z_MEM_ERROR;
+
+ 000df 85 c0 test eax, eax
+ 000e1 0f 84 20 01 00
+ 00 je $LN20@deflateIni
+
+; 279 : strm->state = (struct internal_state FAR *)s;
+
+ 000e7 89 47 1c mov DWORD PTR [edi+28], eax
+
+; 280 : s->strm = strm;
+; 281 :
+; 282 : s->wrap = wrap;
+; 283 : s->gzhead = Z_NULL;
+; 284 : s->w_bits = windowBits;
+; 285 : s->w_size = 1 << s->w_bits;
+
+ 000ea 8b cb mov ecx, ebx
+ 000ec 89 70 18 mov DWORD PTR [eax+24], esi
+ 000ef be 01 00 00 00 mov esi, 1
+ 000f4 89 58 30 mov DWORD PTR [eax+48], ebx
+ 000f7 8b d8 mov ebx, eax
+ 000f9 d3 e6 shl esi, cl
+
+; 286 : s->w_mask = s->w_size - 1;
+; 287 :
+; 288 : s->hash_bits = memLevel + 7;
+
+ 000fb 8b 4d 18 mov ecx, DWORD PTR _memLevel$[ebp]
+ 000fe 89 38 mov DWORD PTR [eax], edi
+ 00100 83 c1 07 add ecx, 7
+ 00103 c7 40 1c 00 00
+ 00 00 mov DWORD PTR [eax+28], 0
+ 0010a 8d 46 ff lea eax, DWORD PTR [esi-1]
+ 0010d 89 4b 50 mov DWORD PTR [ebx+80], ecx
+ 00110 89 43 34 mov DWORD PTR [ebx+52], eax
+
+; 289 : s->hash_size = 1 << s->hash_bits;
+
+ 00113 b8 01 00 00 00 mov eax, 1
+ 00118 d3 e0 shl eax, cl
+
+; 290 : s->hash_mask = s->hash_size - 1;
+; 291 : s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
+
+ 0011a 83 c1 02 add ecx, 2
+ 0011d 89 43 4c mov DWORD PTR [ebx+76], eax
+ 00120 48 dec eax
+ 00121 89 43 54 mov DWORD PTR [ebx+84], eax
+ 00124 b8 ab aa aa aa mov eax, -1431655765 ; aaaaaaabH
+ 00129 f7 e1 mul ecx
+
+; 292 :
+; 293 : s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte));
+
+ 0012b 6a 02 push 2
+ 0012d d1 ea shr edx, 1
+ 0012f 89 73 2c mov DWORD PTR [ebx+44], esi
+ 00132 89 53 58 mov DWORD PTR [ebx+88], edx
+ 00135 8b 47 20 mov eax, DWORD PTR [edi+32]
+ 00138 56 push esi
+ 00139 ff 77 28 push DWORD PTR [edi+40]
+ 0013c ff d0 call eax
+
+; 294 : s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos));
+
+ 0013e 6a 02 push 2
+ 00140 ff 73 2c push DWORD PTR [ebx+44]
+ 00143 89 43 38 mov DWORD PTR [ebx+56], eax
+ 00146 ff 77 28 push DWORD PTR [edi+40]
+ 00149 8b 47 20 mov eax, DWORD PTR [edi+32]
+ 0014c ff d0 call eax
+
+; 295 : s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos));
+
+ 0014e 6a 02 push 2
+ 00150 ff 73 4c push DWORD PTR [ebx+76]
+ 00153 89 43 40 mov DWORD PTR [ebx+64], eax
+ 00156 ff 77 28 push DWORD PTR [edi+40]
+ 00159 8b 47 20 mov eax, DWORD PTR [edi+32]
+ 0015c ff d0 call eax
+
+; 296 :
+; 297 : s->high_water = 0; /* nothing written to s->window yet */
+; 298 :
+; 299 : s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
+
+ 0015e 8b 4d 18 mov ecx, DWORD PTR _memLevel$[ebp]
+ 00161 89 43 44 mov DWORD PTR [ebx+68], eax
+ 00164 b8 01 00 00 00 mov eax, 1
+
+; 300 :
+; 301 : overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
+
+ 00169 6a 04 push 4
+ 0016b c7 83 c0 16 00
+ 00 00 00 00 00 mov DWORD PTR [ebx+5824], 0
+ 00175 8d 49 06 lea ecx, DWORD PTR [ecx+6]
+ 00178 d3 e0 shl eax, cl
+ 0017a 50 push eax
+ 0017b 89 83 9c 16 00
+ 00 mov DWORD PTR [ebx+5788], eax
+ 00181 ff 77 28 push DWORD PTR [edi+40]
+ 00184 8b 47 20 mov eax, DWORD PTR [edi+32]
+ 00187 ff d0 call eax
+
+; 302 : s->pending_buf = (uchf *) overlay;
+; 303 : s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
+
+ 00189 8b b3 9c 16 00
+ 00 mov esi, DWORD PTR [ebx+5788]
+ 0018f 83 c4 30 add esp, 48 ; 00000030H
+
+; 304 :
+; 305 : if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
+
+ 00192 83 7b 38 00 cmp DWORD PTR [ebx+56], 0
+ 00196 8b d0 mov edx, eax
+ 00198 89 53 08 mov DWORD PTR [ebx+8], edx
+ 0019b 8d 0c b5 00 00
+ 00 00 lea ecx, DWORD PTR [esi*4]
+ 001a2 89 4b 0c mov DWORD PTR [ebx+12], ecx
+ 001a5 74 4b je SHORT $LN16@deflateIni
+ 001a7 83 7b 40 00 cmp DWORD PTR [ebx+64], 0
+ 001ab 74 45 je SHORT $LN16@deflateIni
+ 001ad 83 7b 44 00 cmp DWORD PTR [ebx+68], 0
+ 001b1 74 3f je SHORT $LN16@deflateIni
+ 001b3 85 d2 test edx, edx
+ 001b5 74 3b je SHORT $LN16@deflateIni
+
+; 311 : }
+; 312 : s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
+
+ 001b7 8b c6 mov eax, esi
+
+; 313 : s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
+; 314 :
+; 315 : s->level = level;
+; 316 : s->strategy = strategy;
+; 317 : s->method = (Byte)method;
+
+ 001b9 c6 43 24 08 mov BYTE PTR [ebx+36], 8
+ 001bd d1 e8 shr eax, 1
+
+; 318 :
+; 319 : return deflateReset(strm);
+
+ 001bf 57 push edi
+ 001c0 8d 04 42 lea eax, DWORD PTR [edx+eax*2]
+ 001c3 89 83 a4 16 00
+ 00 mov DWORD PTR [ebx+5796], eax
+ 001c9 8d 04 72 lea eax, DWORD PTR [edx+esi*2]
+ 001cc 03 c6 add eax, esi
+ 001ce 89 83 98 16 00
+ 00 mov DWORD PTR [ebx+5784], eax
+ 001d4 8b 45 0c mov eax, DWORD PTR _level$[ebp]
+ 001d7 89 83 84 00 00
+ 00 mov DWORD PTR [ebx+132], eax
+ 001dd 8b 45 1c mov eax, DWORD PTR _strategy$[ebp]
+ 001e0 89 83 88 00 00
+ 00 mov DWORD PTR [ebx+136], eax
+ 001e6 e8 00 00 00 00 call _deflateReset@4
+ 001eb 5b pop ebx
+ 001ec 5f pop edi
+ 001ed 5e pop esi
+
+; 320 : }
+
+ 001ee 5d pop ebp
+ 001ef c2 20 00 ret 32 ; 00000020H
+$LN16@deflateIni:
+
+; 306 : s->pending_buf == Z_NULL) {
+; 307 : s->status = FINISH_STATE;
+; 308 : strm->msg = ERR_MSG(Z_MEM_ERROR);
+
+ 001f2 a1 18 00 00 00 mov eax, DWORD PTR _z_errmsg+24
+ 001f7 c7 43 04 9a 02
+ 00 00 mov DWORD PTR [ebx+4], 666 ; 0000029aH
+
+; 309 : deflateEnd (strm);
+
+ 001fe 57 push edi
+ 001ff 89 47 18 mov DWORD PTR [edi+24], eax
+ 00202 e8 00 00 00 00 call _deflateEnd@4
+$LN20@deflateIni:
+
+; 310 : return Z_MEM_ERROR;
+
+ 00207 5b pop ebx
+ 00208 5f pop edi
+ 00209 b8 fc ff ff ff mov eax, -4 ; fffffffcH
+ 0020e 5e pop esi
+
+; 320 : }
+
+ 0020f 5d pop ebp
+ 00210 c2 20 00 ret 32 ; 00000020H
+$LN12@deflateIni:
+ 00213 5b pop ebx
+ 00214 5f pop edi
+
+; 274 : return Z_STREAM_ERROR;
+
+ 00215 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 0021a 5e pop esi
+
+; 320 : }
+
+ 0021b 5d pop ebp
+ 0021c c2 20 00 ret 32 ; 00000020H
+$LN3@deflateIni:
+
+; 234 : stream_size != sizeof(z_stream)) {
+; 235 : return Z_VERSION_ERROR;
+
+ 0021f b8 fa ff ff ff mov eax, -6 ; fffffffaH
+ 00224 5e pop esi
+
+; 320 : }
+
+ 00225 5d pop ebp
+ 00226 c2 20 00 ret 32 ; 00000020H
+_deflateInit2_@32 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflateSetDictionary@12
+_TEXT SEGMENT
+_avail$1$ = -8 ; size = 4
+_wrap$1$ = -4 ; size = 4
+_strm$ = 8 ; size = 4
+_n$1$ = 12 ; size = 4
+_dictionary$ = 12 ; size = 4
+_next$1$ = 16 ; size = 4
+_dictLength$ = 16 ; size = 4
+_deflateSetDictionary@12 PROC ; COMDAT
+
+; 327 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 08 sub esp, 8
+ 00006 53 push ebx
+
+; 328 : deflate_state *s;
+; 329 : uInt str, n;
+; 330 : int wrap;
+; 331 : unsigned avail;
+; 332 : z_const unsigned char *next;
+; 333 :
+; 334 : if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL)
+
+ 00007 8b 5d 08 mov ebx, DWORD PTR _strm$[ebp]
+ 0000a 56 push esi
+ 0000b 85 db test ebx, ebx
+ 0000d 0f 84 7d 01 00
+ 00 je $LN8@deflateSet
+ 00013 8b 73 1c mov esi, DWORD PTR [ebx+28]
+ 00016 85 f6 test esi, esi
+ 00018 0f 84 72 01 00
+ 00 je $LN8@deflateSet
+ 0001e 8b 4d 0c mov ecx, DWORD PTR _dictionary$[ebp]
+ 00021 85 c9 test ecx, ecx
+ 00023 0f 84 67 01 00
+ 00 je $LN8@deflateSet
+
+; 336 : s = strm->state;
+; 337 : wrap = s->wrap;
+
+ 00029 8b 46 18 mov eax, DWORD PTR [esi+24]
+ 0002c 89 45 fc mov DWORD PTR _wrap$1$[ebp], eax
+
+; 338 : if (wrap == 2 || (wrap == 1 && s->status != INIT_STATE) || s->lookahead)
+
+ 0002f 83 f8 02 cmp eax, 2
+ 00032 0f 84 58 01 00
+ 00 je $LN8@deflateSet
+ 00038 83 f8 01 cmp eax, 1
+ 0003b 75 0a jne SHORT $LN11@deflateSet
+ 0003d 83 7e 04 2a cmp DWORD PTR [esi+4], 42 ; 0000002aH
+ 00041 0f 85 49 01 00
+ 00 jne $LN8@deflateSet
+$LN11@deflateSet:
+ 00047 83 7e 74 00 cmp DWORD PTR [esi+116], 0
+ 0004b 0f 85 3f 01 00
+ 00 jne $LN8@deflateSet
+
+; 339 : return Z_STREAM_ERROR;
+; 340 :
+; 341 : /* when using zlib wrappers, compute Adler-32 for provided dictionary */
+; 342 : if (wrap == 1)
+
+ 00051 57 push edi
+ 00052 8b 7d 10 mov edi, DWORD PTR _dictLength$[ebp]
+ 00055 83 f8 01 cmp eax, 1
+ 00058 75 13 jne SHORT $LN12@deflateSet
+
+; 343 : strm->adler = adler32(strm->adler, dictionary, dictLength);
+
+ 0005a 57 push edi
+ 0005b 51 push ecx
+ 0005c ff 73 30 push DWORD PTR [ebx+48]
+ 0005f e8 00 00 00 00 call _adler32@12
+ 00064 8b 4d 0c mov ecx, DWORD PTR _dictionary$[ebp]
+ 00067 89 43 30 mov DWORD PTR [ebx+48], eax
+ 0006a 8b 45 fc mov eax, DWORD PTR _wrap$1$[ebp]
+$LN12@deflateSet:
+
+; 344 : s->wrap = 0; /* avoid computing Adler-32 in read_buf */
+
+ 0006d c7 46 18 00 00
+ 00 00 mov DWORD PTR [esi+24], 0
+
+; 345 :
+; 346 : /* if dictionary would fill window, just replace the history */
+; 347 : if (dictLength >= s->w_size) {
+
+ 00074 3b 7e 2c cmp edi, DWORD PTR [esi+44]
+ 00077 72 4b jb SHORT $LN13@deflateSet
+
+; 348 : if (wrap == 0) { /* already empty otherwise */
+
+ 00079 85 c0 test eax, eax
+ 0007b 75 3f jne SHORT $LN14@deflateSet
+
+; 349 : CLEAR_HASH(s);
+
+ 0007d 8b 46 44 mov eax, DWORD PTR [esi+68]
+ 00080 33 d2 xor edx, edx
+ 00082 8b 4e 4c mov ecx, DWORD PTR [esi+76]
+ 00085 66 89 54 48 fe mov WORD PTR [eax+ecx*2-2], dx
+ 0008a 8b 46 4c mov eax, DWORD PTR [esi+76]
+ 0008d 8d 04 45 fe ff
+ ff ff lea eax, DWORD PTR [eax*2-2]
+ 00094 50 push eax
+ 00095 52 push edx
+ 00096 ff 76 44 push DWORD PTR [esi+68]
+ 00099 e8 00 00 00 00 call _memset
+ 0009e 8b 4d 0c mov ecx, DWORD PTR _dictionary$[ebp]
+ 000a1 83 c4 0c add esp, 12 ; 0000000cH
+
+; 350 : s->strstart = 0;
+
+ 000a4 c7 46 6c 00 00
+ 00 00 mov DWORD PTR [esi+108], 0
+
+; 351 : s->block_start = 0L;
+
+ 000ab c7 46 5c 00 00
+ 00 00 mov DWORD PTR [esi+92], 0
+
+; 352 : s->insert = 0;
+
+ 000b2 c7 86 b4 16 00
+ 00 00 00 00 00 mov DWORD PTR [esi+5812], 0
+$LN14@deflateSet:
+
+; 353 : }
+; 354 : dictionary += dictLength - s->w_size; /* use the tail */
+
+ 000bc 2b 7e 2c sub edi, DWORD PTR [esi+44]
+ 000bf 03 cf add ecx, edi
+
+; 355 : dictLength = s->w_size;
+
+ 000c1 8b 7e 2c mov edi, DWORD PTR [esi+44]
+$LN13@deflateSet:
+
+; 356 : }
+; 357 :
+; 358 : /* insert dictionary into window and hash */
+; 359 : avail = strm->avail_in;
+
+ 000c4 8b 43 04 mov eax, DWORD PTR [ebx+4]
+ 000c7 89 45 f8 mov DWORD PTR _avail$1$[ebp], eax
+
+; 360 : next = strm->next_in;
+
+ 000ca 8b 03 mov eax, DWORD PTR [ebx]
+
+; 361 : strm->avail_in = dictLength;
+; 362 : strm->next_in = (z_const Bytef *)dictionary;
+
+ 000cc 89 0b mov DWORD PTR [ebx], ecx
+
+; 363 : fill_window(s);
+
+ 000ce 8b ce mov ecx, esi
+ 000d0 89 45 10 mov DWORD PTR _next$1$[ebp], eax
+ 000d3 89 7b 04 mov DWORD PTR [ebx+4], edi
+ 000d6 e8 00 00 00 00 call _fill_window
+
+; 364 : while (s->lookahead >= MIN_MATCH) {
+
+ 000db 83 7e 74 03 cmp DWORD PTR [esi+116], 3
+ 000df 72 65 jb SHORT $LN3@deflateSet
+$LL2@deflateSet:
+
+; 365 : str = s->strstart;
+; 366 : n = s->lookahead - (MIN_MATCH-1);
+
+ 000e1 8b 46 74 mov eax, DWORD PTR [esi+116]
+ 000e4 8b 5e 6c mov ebx, DWORD PTR [esi+108]
+ 000e7 83 e8 02 sub eax, 2
+ 000ea 89 45 0c mov DWORD PTR _n$1$[ebp], eax
+ 000ed 0f 1f 00 npad 3
+$LL6@deflateSet:
+
+; 367 : do {
+; 368 : UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
+
+ 000f0 8b 46 38 mov eax, DWORD PTR [esi+56]
+ 000f3 8b 4e 58 mov ecx, DWORD PTR [esi+88]
+
+; 369 : #ifndef FASTEST
+; 370 : s->prev[str & s->w_mask] = s->head[s->ins_h];
+
+ 000f6 8b 56 34 mov edx, DWORD PTR [esi+52]
+ 000f9 23 d3 and edx, ebx
+ 000fb 0f b6 7c 18 02 movzx edi, BYTE PTR [eax+ebx+2]
+ 00100 8b 46 48 mov eax, DWORD PTR [esi+72]
+ 00103 d3 e0 shl eax, cl
+ 00105 8b 4e 40 mov ecx, DWORD PTR [esi+64]
+ 00108 33 f8 xor edi, eax
+ 0010a 23 7e 54 and edi, DWORD PTR [esi+84]
+ 0010d 8b 46 44 mov eax, DWORD PTR [esi+68]
+ 00110 89 7e 48 mov DWORD PTR [esi+72], edi
+ 00113 66 8b 04 78 mov ax, WORD PTR [eax+edi*2]
+ 00117 66 89 04 51 mov WORD PTR [ecx+edx*2], ax
+
+; 371 : #endif
+; 372 : s->head[s->ins_h] = (Pos)str;
+
+ 0011b 8b 4e 48 mov ecx, DWORD PTR [esi+72]
+ 0011e 8b 46 44 mov eax, DWORD PTR [esi+68]
+ 00121 66 89 1c 48 mov WORD PTR [eax+ecx*2], bx
+
+; 373 : str++;
+
+ 00125 43 inc ebx
+
+; 374 : } while (--n);
+
+ 00126 83 6d 0c 01 sub DWORD PTR _n$1$[ebp], 1
+ 0012a 75 c4 jne SHORT $LL6@deflateSet
+
+; 375 : s->strstart = str;
+; 376 : s->lookahead = MIN_MATCH-1;
+; 377 : fill_window(s);
+
+ 0012c 8b ce mov ecx, esi
+ 0012e 89 5e 6c mov DWORD PTR [esi+108], ebx
+ 00131 c7 46 74 02 00
+ 00 00 mov DWORD PTR [esi+116], 2
+ 00138 e8 00 00 00 00 call _fill_window
+ 0013d 83 7e 74 03 cmp DWORD PTR [esi+116], 3
+ 00141 73 9e jae SHORT $LL2@deflateSet
+ 00143 8b 5d 08 mov ebx, DWORD PTR _strm$[ebp]
+$LN3@deflateSet:
+
+; 378 : }
+; 379 : s->strstart += s->lookahead;
+
+ 00146 8b 4e 74 mov ecx, DWORD PTR [esi+116]
+ 00149 01 4e 6c add DWORD PTR [esi+108], ecx
+ 0014c 8b 46 6c mov eax, DWORD PTR [esi+108]
+
+; 380 : s->block_start = (long)s->strstart;
+
+ 0014f 89 46 5c mov DWORD PTR [esi+92], eax
+
+; 381 : s->insert = s->lookahead;
+; 382 : s->lookahead = 0;
+; 383 : s->match_length = s->prev_length = MIN_MATCH-1;
+; 384 : s->match_available = 0;
+; 385 : strm->next_in = next;
+
+ 00152 8b 45 10 mov eax, DWORD PTR _next$1$[ebp]
+ 00155 89 8e b4 16 00
+ 00 mov DWORD PTR [esi+5812], ecx
+ 0015b c7 46 74 00 00
+ 00 00 mov DWORD PTR [esi+116], 0
+ 00162 c7 46 78 02 00
+ 00 00 mov DWORD PTR [esi+120], 2
+ 00169 c7 46 60 02 00
+ 00 00 mov DWORD PTR [esi+96], 2
+ 00170 c7 46 68 00 00
+ 00 00 mov DWORD PTR [esi+104], 0
+ 00177 89 03 mov DWORD PTR [ebx], eax
+
+; 386 : strm->avail_in = avail;
+
+ 00179 8b 45 f8 mov eax, DWORD PTR _avail$1$[ebp]
+ 0017c 89 43 04 mov DWORD PTR [ebx+4], eax
+
+; 387 : s->wrap = wrap;
+
+ 0017f 8b 45 fc mov eax, DWORD PTR _wrap$1$[ebp]
+ 00182 5f pop edi
+ 00183 89 46 18 mov DWORD PTR [esi+24], eax
+
+; 388 : return Z_OK;
+
+ 00186 33 c0 xor eax, eax
+ 00188 5e pop esi
+ 00189 5b pop ebx
+
+; 389 : }
+
+ 0018a 8b e5 mov esp, ebp
+ 0018c 5d pop ebp
+ 0018d c2 0c 00 ret 12 ; 0000000cH
+$LN8@deflateSet:
+ 00190 5e pop esi
+
+; 335 : return Z_STREAM_ERROR;
+
+ 00191 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 00196 5b pop ebx
+
+; 389 : }
+
+ 00197 8b e5 mov esp, ebp
+ 00199 5d pop ebp
+ 0019a c2 0c 00 ret 12 ; 0000000cH
+_deflateSetDictionary@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflateResetKeep@4
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_deflateResetKeep@4 PROC ; COMDAT
+
+; 394 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 395 : deflate_state *s;
+; 396 :
+; 397 : if (strm == Z_NULL || strm->state == Z_NULL ||
+; 398 : strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) {
+
+ 00004 8b 75 08 mov esi, DWORD PTR _strm$[ebp]
+ 00007 57 push edi
+ 00008 85 f6 test esi, esi
+ 0000a 0f 84 95 00 00
+ 00 je $LN3@deflateRes
+ 00010 8b 7e 1c mov edi, DWORD PTR [esi+28]
+ 00013 85 ff test edi, edi
+ 00015 0f 84 8a 00 00
+ 00 je $LN3@deflateRes
+ 0001b 83 7e 20 00 cmp DWORD PTR [esi+32], 0
+ 0001f 0f 84 80 00 00
+ 00 je $LN3@deflateRes
+ 00025 83 7e 24 00 cmp DWORD PTR [esi+36], 0
+ 00029 74 7a je SHORT $LN3@deflateRes
+
+; 400 : }
+; 401 :
+; 402 : strm->total_in = strm->total_out = 0;
+
+ 0002b c7 46 14 00 00
+ 00 00 mov DWORD PTR [esi+20], 0
+ 00032 c7 46 08 00 00
+ 00 00 mov DWORD PTR [esi+8], 0
+
+; 403 : strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
+
+ 00039 c7 46 18 00 00
+ 00 00 mov DWORD PTR [esi+24], 0
+
+; 404 : strm->data_type = Z_UNKNOWN;
+
+ 00040 c7 46 2c 02 00
+ 00 00 mov DWORD PTR [esi+44], 2
+
+; 405 :
+; 406 : s = (deflate_state *)strm->state;
+; 407 : s->pending = 0;
+; 408 : s->pending_out = s->pending_buf;
+
+ 00047 8b 47 08 mov eax, DWORD PTR [edi+8]
+ 0004a 89 47 10 mov DWORD PTR [edi+16], eax
+
+; 409 :
+; 410 : if (s->wrap < 0) {
+
+ 0004d 8b 47 18 mov eax, DWORD PTR [edi+24]
+ 00050 c7 47 14 00 00
+ 00 00 mov DWORD PTR [edi+20], 0
+ 00057 85 c0 test eax, eax
+ 00059 79 05 jns SHORT $LN4@deflateRes
+
+; 411 : s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
+
+ 0005b f7 d8 neg eax
+ 0005d 89 47 18 mov DWORD PTR [edi+24], eax
+$LN4@deflateRes:
+
+; 412 : }
+; 413 : s->status = s->wrap ? INIT_STATE : BUSY_STATE;
+
+ 00060 8b 4f 18 mov ecx, DWORD PTR [edi+24]
+ 00063 b8 71 00 00 00 mov eax, 113 ; 00000071H
+ 00068 85 c9 test ecx, ecx
+ 0006a ba 2a 00 00 00 mov edx, 42 ; 0000002aH
+
+; 414 : strm->adler =
+
+ 0006f 6a 00 push 0
+ 00071 0f 45 c2 cmovne eax, edx
+ 00074 89 47 04 mov DWORD PTR [edi+4], eax
+ 00077 6a 00 push 0
+ 00079 6a 00 push 0
+ 0007b 83 f9 02 cmp ecx, 2
+ 0007e 75 07 jne SHORT $LN6@deflateRes
+ 00080 e8 00 00 00 00 call _crc32@12
+ 00085 eb 05 jmp SHORT $LN7@deflateRes
+$LN6@deflateRes:
+ 00087 e8 00 00 00 00 call _adler32@12
+$LN7@deflateRes:
+ 0008c 89 46 30 mov DWORD PTR [esi+48], eax
+
+; 415 : #ifdef GZIP
+; 416 : s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
+; 417 : #endif
+; 418 : adler32(0L, Z_NULL, 0);
+; 419 : s->last_flush = Z_NO_FLUSH;
+; 420 :
+; 421 : _tr_init(s);
+
+ 0008f 8b cf mov ecx, edi
+ 00091 c7 47 28 00 00
+ 00 00 mov DWORD PTR [edi+40], 0
+ 00098 e8 00 00 00 00 call __tr_init
+ 0009d 5f pop edi
+
+; 422 :
+; 423 : return Z_OK;
+
+ 0009e 33 c0 xor eax, eax
+ 000a0 5e pop esi
+
+; 424 : }
+
+ 000a1 5d pop ebp
+ 000a2 c2 04 00 ret 4
+$LN3@deflateRes:
+ 000a5 5f pop edi
+
+; 399 : return Z_STREAM_ERROR;
+
+ 000a6 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 000ab 5e pop esi
+
+; 424 : }
+
+ 000ac 5d pop ebp
+ 000ad c2 04 00 ret 4
+_deflateResetKeep@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflateReset@4
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_deflateReset@4 PROC ; COMDAT
+
+; 429 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+ 00004 57 push edi
+
+; 430 : int ret;
+; 431 :
+; 432 : ret = deflateResetKeep(strm);
+
+ 00005 8b 7d 08 mov edi, DWORD PTR _strm$[ebp]
+ 00008 57 push edi
+ 00009 e8 00 00 00 00 call _deflateResetKeep@4
+ 0000e 8b f0 mov esi, eax
+
+; 433 : if (ret == Z_OK)
+
+ 00010 85 f6 test esi, esi
+ 00012 75 0a jne SHORT $LN2@deflateRes
+
+; 434 : lm_init(strm->state);
+
+ 00014 8b 4f 1c mov ecx, DWORD PTR [edi+28]
+ 00017 e8 00 00 00 00 call _lm_init
+
+; 435 : return ret;
+
+ 0001c 8b c6 mov eax, esi
+$LN2@deflateRes:
+ 0001e 5f pop edi
+ 0001f 5e pop esi
+
+; 436 : }
+
+ 00020 5d pop ebp
+ 00021 c2 04 00 ret 4
+_deflateReset@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflateSetHeader@8
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_head$ = 12 ; size = 4
+_deflateSetHeader@8 PROC ; COMDAT
+
+; 442 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 443 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00003 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp]
+ 00006 85 c9 test ecx, ecx
+ 00008 74 19 je SHORT $LN3@deflateSet
+ 0000a 8b 49 1c mov ecx, DWORD PTR [ecx+28]
+ 0000d 85 c9 test ecx, ecx
+ 0000f 74 12 je SHORT $LN3@deflateSet
+
+; 444 : if (strm->state->wrap != 2) return Z_STREAM_ERROR;
+
+ 00011 83 79 18 02 cmp DWORD PTR [ecx+24], 2
+ 00015 75 0c jne SHORT $LN3@deflateSet
+
+; 445 : strm->state->gzhead = head;
+
+ 00017 8b 45 0c mov eax, DWORD PTR _head$[ebp]
+ 0001a 89 41 1c mov DWORD PTR [ecx+28], eax
+
+; 446 : return Z_OK;
+
+ 0001d 33 c0 xor eax, eax
+
+; 447 : }
+
+ 0001f 5d pop ebp
+ 00020 c2 08 00 ret 8
+$LN3@deflateSet:
+
+; 443 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00023 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+
+; 447 : }
+
+ 00028 5d pop ebp
+ 00029 c2 08 00 ret 8
+_deflateSetHeader@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflatePending@12
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_pending$ = 12 ; size = 4
+_bits$ = 16 ; size = 4
+_deflatePending@12 PROC ; COMDAT
+
+; 454 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 455 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00003 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp]
+ 00006 85 c9 test ecx, ecx
+ 00008 74 2b je SHORT $LN3@deflatePen
+ 0000a 8b 41 1c mov eax, DWORD PTR [ecx+28]
+ 0000d 85 c0 test eax, eax
+ 0000f 74 24 je SHORT $LN3@deflatePen
+
+; 456 : if (pending != Z_NULL)
+
+ 00011 8b 55 0c mov edx, DWORD PTR _pending$[ebp]
+ 00014 85 d2 test edx, edx
+ 00016 74 05 je SHORT $LN4@deflatePen
+
+; 457 : *pending = strm->state->pending;
+
+ 00018 8b 40 14 mov eax, DWORD PTR [eax+20]
+ 0001b 89 02 mov DWORD PTR [edx], eax
+$LN4@deflatePen:
+
+; 458 : if (bits != Z_NULL)
+
+ 0001d 8b 55 10 mov edx, DWORD PTR _bits$[ebp]
+ 00020 85 d2 test edx, edx
+ 00022 74 0b je SHORT $LN5@deflatePen
+
+; 459 : *bits = strm->state->bi_valid;
+
+ 00024 8b 41 1c mov eax, DWORD PTR [ecx+28]
+ 00027 8b 80 bc 16 00
+ 00 mov eax, DWORD PTR [eax+5820]
+ 0002d 89 02 mov DWORD PTR [edx], eax
+$LN5@deflatePen:
+
+; 460 : return Z_OK;
+
+ 0002f 33 c0 xor eax, eax
+
+; 461 : }
+
+ 00031 5d pop ebp
+ 00032 c2 0c 00 ret 12 ; 0000000cH
+$LN3@deflatePen:
+
+; 455 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00035 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+
+; 461 : }
+
+ 0003a 5d pop ebp
+ 0003b c2 0c 00 ret 12 ; 0000000cH
+_deflatePending@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflatePrime@12
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_bits$ = 12 ; size = 4
+_value$ = 16 ; size = 4
+_deflatePrime@12 PROC ; COMDAT
+
+; 468 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 469 : deflate_state *s;
+; 470 : int put;
+; 471 :
+; 472 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00004 8b 75 08 mov esi, DWORD PTR _strm$[ebp]
+ 00007 85 f6 test esi, esi
+ 00009 74 75 je SHORT $LN6@deflatePri
+ 0000b 8b 76 1c mov esi, DWORD PTR [esi+28]
+ 0000e 85 f6 test esi, esi
+ 00010 74 6e je SHORT $LN6@deflatePri
+
+; 473 : s = strm->state;
+; 474 : if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
+
+ 00012 8b 46 10 mov eax, DWORD PTR [esi+16]
+ 00015 83 c0 02 add eax, 2
+ 00018 39 86 a4 16 00
+ 00 cmp DWORD PTR [esi+5796], eax
+ 0001e 73 0a jae SHORT $LN12@deflatePri
+
+; 475 : return Z_BUF_ERROR;
+
+ 00020 b8 fb ff ff ff mov eax, -5 ; fffffffbH
+ 00025 5e pop esi
+
+; 487 : }
+
+ 00026 5d pop ebp
+ 00027 c2 0c 00 ret 12 ; 0000000cH
+$LN12@deflatePri:
+ 0002a 53 push ebx
+
+; 475 : return Z_BUF_ERROR;
+
+ 0002b 8b 5d 0c mov ebx, DWORD PTR _bits$[ebp]
+ 0002e 57 push edi
+ 0002f 90 npad 1
+$LL4@deflatePri:
+
+; 476 : do {
+; 477 : put = Buf_size - s->bi_valid;
+
+ 00030 8b 96 bc 16 00
+ 00 mov edx, DWORD PTR [esi+5820]
+ 00036 bf 10 00 00 00 mov edi, 16 ; 00000010H
+ 0003b 2b fa sub edi, edx
+
+; 478 : if (put > bits)
+; 479 : put = bits;
+; 480 : s->bi_buf |= (ush)((value & ((1 << put) - 1)) << s->bi_valid);
+
+ 0003d b8 01 00 00 00 mov eax, 1
+ 00042 3b fb cmp edi, ebx
+ 00044 0f 4f fb cmovg edi, ebx
+ 00047 8b cf mov ecx, edi
+ 00049 66 d3 e0 shl ax, cl
+ 0004c 8b ca mov ecx, edx
+ 0004e 66 48 dec ax
+ 00050 66 23 45 10 and ax, WORD PTR _value$[ebp]
+ 00054 66 d3 e0 shl ax, cl
+
+; 481 : s->bi_valid += put;
+; 482 : _tr_flush_bits(s);
+
+ 00057 8b ce mov ecx, esi
+ 00059 66 09 86 b8 16
+ 00 00 or WORD PTR [esi+5816], ax
+ 00060 8d 04 3a lea eax, DWORD PTR [edx+edi]
+ 00063 89 86 bc 16 00
+ 00 mov DWORD PTR [esi+5820], eax
+ 00069 e8 00 00 00 00 call __tr_flush_bits
+
+; 483 : value >>= put;
+
+ 0006e 8b cf mov ecx, edi
+ 00070 d3 7d 10 sar DWORD PTR _value$[ebp], cl
+
+; 484 : bits -= put;
+
+ 00073 2b df sub ebx, edi
+
+; 485 : } while (bits);
+
+ 00075 75 b9 jne SHORT $LL4@deflatePri
+
+; 486 : return Z_OK;
+
+ 00077 5f pop edi
+ 00078 5b pop ebx
+ 00079 33 c0 xor eax, eax
+ 0007b 5e pop esi
+
+; 487 : }
+
+ 0007c 5d pop ebp
+ 0007d c2 0c 00 ret 12 ; 0000000cH
+$LN6@deflatePri:
+
+; 469 : deflate_state *s;
+; 470 : int put;
+; 471 :
+; 472 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00080 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 00085 5e pop esi
+
+; 487 : }
+
+ 00086 5d pop ebp
+ 00087 c2 0c 00 ret 12 ; 0000000cH
+_deflatePrime@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflateParams@12
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_level$ = 12 ; size = 4
+_strategy$ = 16 ; size = 4
+_deflateParams@12 PROC ; COMDAT
+
+; 494 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 53 push ebx
+
+; 495 : deflate_state *s;
+; 496 : compress_func func;
+; 497 : int err = Z_OK;
+; 498 :
+; 499 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00004 8b 5d 08 mov ebx, DWORD PTR _strm$[ebp]
+ 00007 33 d2 xor edx, edx
+ 00009 57 push edi
+ 0000a 85 db test ebx, ebx
+ 0000c 0f 84 da 00 00
+ 00 je $LN3@deflatePar
+ 00012 8b 7b 1c mov edi, DWORD PTR [ebx+28]
+ 00015 85 ff test edi, edi
+ 00017 0f 84 cf 00 00
+ 00 je $LN3@deflatePar
+
+; 500 : s = strm->state;
+; 501 :
+; 502 : #ifdef FASTEST
+; 503 : if (level != 0) level = 1;
+; 504 : #else
+; 505 : if (level == Z_DEFAULT_COMPRESSION) level = 6;
+
+ 0001d 56 push esi
+ 0001e 8b 75 0c mov esi, DWORD PTR _level$[ebp]
+ 00021 83 fe ff cmp esi, -1
+ 00024 75 05 jne SHORT $LN4@deflatePar
+ 00026 8d 72 06 lea esi, DWORD PTR [edx+6]
+
+; 506 : #endif
+; 507 : if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {
+
+ 00029 eb 11 jmp SHORT $LN13@deflatePar
+$LN4@deflatePar:
+ 0002b 85 f6 test esi, esi
+ 0002d 0f 88 ad 00 00
+ 00 js $LN6@deflatePar
+ 00033 83 fe 09 cmp esi, 9
+ 00036 0f 8f a4 00 00
+ 00 jg $LN6@deflatePar
+$LN13@deflatePar:
+ 0003c 8b 45 10 mov eax, DWORD PTR _strategy$[ebp]
+ 0003f 83 f8 04 cmp eax, 4
+ 00042 0f 87 98 00 00
+ 00 ja $LN6@deflatePar
+
+; 509 : }
+; 510 : func = configuration_table[s->level].func;
+; 511 :
+; 512 : if ((strategy != s->strategy || func != configuration_table[level].func) &&
+
+ 00048 3b 87 88 00 00
+ 00 cmp eax, DWORD PTR [edi+136]
+ 0004e 75 1c jne SHORT $LN8@deflatePar
+ 00050 8b 87 84 00 00
+ 00 mov eax, DWORD PTR [edi+132]
+ 00056 8d 0c 76 lea ecx, DWORD PTR [esi+esi*2]
+ 00059 8d 04 40 lea eax, DWORD PTR [eax+eax*2]
+ 0005c 8b 04 85 08 00
+ 00 00 mov eax, DWORD PTR _configuration_table[eax*4+8]
+ 00063 3b 04 8d 08 00
+ 00 00 cmp eax, DWORD PTR _configuration_table[ecx*4+8]
+ 0006a 74 1c je SHORT $LN9@deflatePar
+$LN8@deflatePar:
+ 0006c 39 53 08 cmp DWORD PTR [ebx+8], edx
+ 0006f 74 17 je SHORT $LN9@deflatePar
+
+; 513 : strm->total_in != 0) {
+; 514 : /* Flush the last buffer: */
+; 515 : err = deflate(strm, Z_BLOCK);
+
+ 00071 6a 05 push 5
+ 00073 53 push ebx
+ 00074 e8 00 00 00 00 call _deflate@8
+ 00079 8b d0 mov edx, eax
+
+; 516 : if (err == Z_BUF_ERROR && s->pending == 0)
+
+ 0007b 83 fa fb cmp edx, -5 ; fffffffbH
+ 0007e 75 08 jne SHORT $LN9@deflatePar
+ 00080 33 c0 xor eax, eax
+ 00082 39 47 14 cmp DWORD PTR [edi+20], eax
+ 00085 0f 44 d0 cmove edx, eax
+$LN9@deflatePar:
+
+; 517 : err = Z_OK;
+; 518 : }
+; 519 : if (s->level != level) {
+
+ 00088 39 b7 84 00 00
+ 00 cmp DWORD PTR [edi+132], esi
+ 0008e 74 3e je SHORT $LN10@deflatePar
+
+; 520 : s->level = level;
+; 521 : s->max_lazy_match = configuration_table[level].max_lazy;
+
+ 00090 8d 0c 76 lea ecx, DWORD PTR [esi+esi*2]
+ 00093 89 b7 84 00 00
+ 00 mov DWORD PTR [edi+132], esi
+ 00099 0f b7 04 8d 02
+ 00 00 00 movzx eax, WORD PTR _configuration_table[ecx*4+2]
+ 000a1 89 87 80 00 00
+ 00 mov DWORD PTR [edi+128], eax
+
+; 522 : s->good_match = configuration_table[level].good_length;
+
+ 000a7 0f b7 04 8d 00
+ 00 00 00 movzx eax, WORD PTR _configuration_table[ecx*4]
+ 000af 89 87 8c 00 00
+ 00 mov DWORD PTR [edi+140], eax
+
+; 523 : s->nice_match = configuration_table[level].nice_length;
+
+ 000b5 0f b7 04 8d 04
+ 00 00 00 movzx eax, WORD PTR _configuration_table[ecx*4+4]
+ 000bd 89 87 90 00 00
+ 00 mov DWORD PTR [edi+144], eax
+
+; 524 : s->max_chain_length = configuration_table[level].max_chain;
+
+ 000c3 0f b7 04 8d 06
+ 00 00 00 movzx eax, WORD PTR _configuration_table[ecx*4+6]
+ 000cb 89 47 7c mov DWORD PTR [edi+124], eax
+$LN10@deflatePar:
+
+; 525 : }
+; 526 : s->strategy = strategy;
+
+ 000ce 8b 45 10 mov eax, DWORD PTR _strategy$[ebp]
+ 000d1 5e pop esi
+ 000d2 89 87 88 00 00
+ 00 mov DWORD PTR [edi+136], eax
+
+; 527 : return err;
+
+ 000d8 8b c2 mov eax, edx
+ 000da 5f pop edi
+ 000db 5b pop ebx
+
+; 528 : }
+
+ 000dc 5d pop ebp
+ 000dd c2 0c 00 ret 12 ; 0000000cH
+$LN6@deflatePar:
+ 000e0 5e pop esi
+ 000e1 5f pop edi
+
+; 508 : return Z_STREAM_ERROR;
+
+ 000e2 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 000e7 5b pop ebx
+
+; 528 : }
+
+ 000e8 5d pop ebp
+ 000e9 c2 0c 00 ret 12 ; 0000000cH
+$LN3@deflatePar:
+ 000ec 5f pop edi
+
+; 495 : deflate_state *s;
+; 496 : compress_func func;
+; 497 : int err = Z_OK;
+; 498 :
+; 499 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 000ed b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 000f2 5b pop ebx
+
+; 528 : }
+
+ 000f3 5d pop ebp
+ 000f4 c2 0c 00 ret 12 ; 0000000cH
+_deflateParams@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflateTune@20
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_good_length$ = 12 ; size = 4
+_max_lazy$ = 16 ; size = 4
+_nice_length$ = 20 ; size = 4
+_max_chain$ = 24 ; size = 4
+_deflateTune@20 PROC ; COMDAT
+
+; 537 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 538 : deflate_state *s;
+; 539 :
+; 540 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00003 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp]
+ 00006 85 c9 test ecx, ecx
+ 00008 74 2e je SHORT $LN3@deflateTun
+ 0000a 8b 49 1c mov ecx, DWORD PTR [ecx+28]
+ 0000d 85 c9 test ecx, ecx
+ 0000f 74 27 je SHORT $LN3@deflateTun
+
+; 541 : s = strm->state;
+; 542 : s->good_match = good_length;
+
+ 00011 8b 45 0c mov eax, DWORD PTR _good_length$[ebp]
+ 00014 89 81 8c 00 00
+ 00 mov DWORD PTR [ecx+140], eax
+
+; 543 : s->max_lazy_match = max_lazy;
+
+ 0001a 8b 45 10 mov eax, DWORD PTR _max_lazy$[ebp]
+ 0001d 89 81 80 00 00
+ 00 mov DWORD PTR [ecx+128], eax
+
+; 544 : s->nice_match = nice_length;
+
+ 00023 8b 45 14 mov eax, DWORD PTR _nice_length$[ebp]
+ 00026 89 81 90 00 00
+ 00 mov DWORD PTR [ecx+144], eax
+
+; 545 : s->max_chain_length = max_chain;
+
+ 0002c 8b 45 18 mov eax, DWORD PTR _max_chain$[ebp]
+ 0002f 89 41 7c mov DWORD PTR [ecx+124], eax
+
+; 546 : return Z_OK;
+
+ 00032 33 c0 xor eax, eax
+
+; 547 : }
+
+ 00034 5d pop ebp
+ 00035 c2 14 00 ret 20 ; 00000014H
+$LN3@deflateTun:
+
+; 538 : deflate_state *s;
+; 539 :
+; 540 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00038 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+
+; 547 : }
+
+ 0003d 5d pop ebp
+ 0003e c2 14 00 ret 20 ; 00000014H
+_deflateTune@20 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflateBound@8
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_complen$1$ = 12 ; size = 4
+_sourceLen$ = 12 ; size = 4
+_deflateBound@8 PROC ; COMDAT
+
+; 569 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 570 : deflate_state *s;
+; 571 : uLong complen, wraplen;
+; 572 : Bytef *str;
+; 573 :
+; 574 : /* conservative upper bound for compressed data */
+; 575 : complen = sourceLen +
+; 576 : ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;
+; 577 :
+; 578 : /* if can't get parameters, return conservative bound plus zlib wrapper */
+; 579 : if (strm == Z_NULL || strm->state == Z_NULL)
+
+ 00003 8b 55 08 mov edx, DWORD PTR _strm$[ebp]
+ 00006 53 push ebx
+ 00007 8b 5d 0c mov ebx, DWORD PTR _sourceLen$[ebp]
+ 0000a 8d 4b 3f lea ecx, DWORD PTR [ebx+63]
+ 0000d c1 e9 06 shr ecx, 6
+ 00010 8d 43 07 lea eax, DWORD PTR [ebx+7]
+ 00013 c1 e8 03 shr eax, 3
+ 00016 03 cb add ecx, ebx
+ 00018 83 c0 05 add eax, 5
+ 0001b 03 c8 add ecx, eax
+ 0001d 89 4d 0c mov DWORD PTR _complen$1$[ebp], ecx
+ 00020 85 d2 test edx, edx
+ 00022 0f 84 bd 00 00
+ 00 je $LN11@deflateBou
+ 00028 8b 52 1c mov edx, DWORD PTR [edx+28]
+ 0002b 85 d2 test edx, edx
+ 0002d 0f 84 b2 00 00
+ 00 je $LN11@deflateBou
+
+; 581 :
+; 582 : /* compute wrapper length */
+; 583 : s = strm->state;
+; 584 : switch (s->wrap) {
+
+ 00033 8b 42 18 mov eax, DWORD PTR [edx+24]
+ 00036 56 push esi
+ 00037 83 e8 00 sub eax, 0
+ 0003a 0f 84 98 00 00
+ 00 je $LN12@deflateBou
+ 00040 83 e8 01 sub eax, 1
+ 00043 0f 84 80 00 00
+ 00 je $LN13@deflateBou
+ 00049 83 e8 01 sub eax, 1
+ 0004c 74 07 je SHORT $LN14@deflateBou
+
+; 610 : default: /* for compiler happiness */
+; 611 : wraplen = 6;
+
+ 0004e be 06 00 00 00 mov esi, 6
+ 00053 eb 48 jmp SHORT $LN2@deflateBou
+$LN14@deflateBou:
+ 00055 57 push edi
+
+; 591 : case 2: /* gzip wrapper */
+; 592 : wraplen = 18;
+; 593 : if (s->gzhead != Z_NULL) { /* user-supplied gzip header */
+
+ 00056 8b 7a 1c mov edi, DWORD PTR [edx+28]
+ 00059 be 12 00 00 00 mov esi, 18 ; 00000012H
+ 0005e 85 ff test edi, edi
+ 00060 74 3a je SHORT $LN32@deflateBou
+
+; 594 : if (s->gzhead->extra != Z_NULL)
+
+ 00062 83 7f 10 00 cmp DWORD PTR [edi+16], 0
+ 00066 74 06 je SHORT $LN16@deflateBou
+
+; 595 : wraplen += 2 + s->gzhead->extra_len;
+
+ 00068 8b 77 14 mov esi, DWORD PTR [edi+20]
+ 0006b 83 c6 14 add esi, 20 ; 00000014H
+$LN16@deflateBou:
+
+; 596 : str = s->gzhead->name;
+
+ 0006e 8b 4f 1c mov ecx, DWORD PTR [edi+28]
+
+; 597 : if (str != Z_NULL)
+
+ 00071 85 c9 test ecx, ecx
+ 00073 74 0a je SHORT $LN5@deflateBou
+$LL6@deflateBou:
+
+; 598 : do {
+; 599 : wraplen++;
+; 600 : } while (*str++);
+
+ 00075 8a 01 mov al, BYTE PTR [ecx]
+ 00077 8d 49 01 lea ecx, DWORD PTR [ecx+1]
+ 0007a 46 inc esi
+ 0007b 84 c0 test al, al
+ 0007d 75 f6 jne SHORT $LL6@deflateBou
+$LN5@deflateBou:
+
+; 601 : str = s->gzhead->comment;
+
+ 0007f 8b 4f 24 mov ecx, DWORD PTR [edi+36]
+
+; 602 : if (str != Z_NULL)
+
+ 00082 85 c9 test ecx, ecx
+ 00084 74 0a je SHORT $LN8@deflateBou
+$LL9@deflateBou:
+
+; 603 : do {
+; 604 : wraplen++;
+; 605 : } while (*str++);
+
+ 00086 8a 01 mov al, BYTE PTR [ecx]
+ 00088 8d 49 01 lea ecx, DWORD PTR [ecx+1]
+ 0008b 46 inc esi
+ 0008c 84 c0 test al, al
+ 0008e 75 f6 jne SHORT $LL9@deflateBou
+$LN8@deflateBou:
+
+; 606 : if (s->gzhead->hcrc)
+
+ 00090 83 7f 2c 00 cmp DWORD PTR [edi+44], 0
+
+; 608 : }
+; 609 : break;
+
+ 00094 8b 4d 0c mov ecx, DWORD PTR _complen$1$[ebp]
+ 00097 74 03 je SHORT $LN32@deflateBou
+
+; 607 : wraplen += 2;
+
+ 00099 83 c6 02 add esi, 2
+$LN32@deflateBou:
+ 0009c 5f pop edi
+$LN2@deflateBou:
+
+; 612 : }
+; 613 :
+; 614 : /* if not default parameters, return conservative bound */
+; 615 : if (s->w_bits != 15 || s->hash_bits != 8 + 7)
+
+ 0009d 83 7a 30 0f cmp DWORD PTR [edx+48], 15 ; 0000000fH
+ 000a1 75 39 jne SHORT $LN22@deflateBou
+ 000a3 83 7a 50 0f cmp DWORD PTR [edx+80], 15 ; 0000000fH
+ 000a7 75 33 jne SHORT $LN22@deflateBou
+
+; 617 :
+; 618 : /* default settings: return tight bound for that case */
+; 619 : return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
+
+ 000a9 8b cb mov ecx, ebx
+ 000ab 8b d3 mov edx, ebx
+ 000ad c1 e9 0e shr ecx, 14 ; 0000000eH
+ 000b0 8b c3 mov eax, ebx
+ 000b2 03 ce add ecx, esi
+ 000b4 c1 e8 0c shr eax, 12 ; 0000000cH
+ 000b7 c1 ea 19 shr edx, 25 ; 00000019H
+ 000ba 83 c0 07 add eax, 7
+ 000bd 03 ca add ecx, edx
+ 000bf 03 c1 add eax, ecx
+ 000c1 5e pop esi
+ 000c2 03 c3 add eax, ebx
+ 000c4 5b pop ebx
+
+; 620 : (sourceLen >> 25) + 13 - 6 + wraplen;
+; 621 : }
+
+ 000c5 5d pop ebp
+ 000c6 c2 08 00 ret 8
+$LN13@deflateBou:
+
+; 587 : break;
+; 588 : case 1: /* zlib wrapper */
+; 589 : wraplen = 6 + (s->strstart ? 4 : 0);
+
+ 000c9 8b 72 6c mov esi, DWORD PTR [edx+108]
+ 000cc f7 de neg esi
+ 000ce 1b f6 sbb esi, esi
+ 000d0 83 e6 04 and esi, 4
+ 000d3 83 c6 06 add esi, 6
+
+; 590 : break;
+
+ 000d6 eb c5 jmp SHORT $LN2@deflateBou
+$LN12@deflateBou:
+
+; 585 : case 0: /* raw deflate */
+; 586 : wraplen = 0;
+
+ 000d8 33 f6 xor esi, esi
+ 000da eb c1 jmp SHORT $LN2@deflateBou
+$LN22@deflateBou:
+
+; 616 : return complen + wraplen;
+
+ 000dc 8d 04 0e lea eax, DWORD PTR [esi+ecx]
+ 000df 5e pop esi
+ 000e0 5b pop ebx
+
+; 620 : (sourceLen >> 25) + 13 - 6 + wraplen;
+; 621 : }
+
+ 000e1 5d pop ebp
+ 000e2 c2 08 00 ret 8
+$LN11@deflateBou:
+
+; 580 : return complen + 6;
+
+ 000e5 8d 41 06 lea eax, DWORD PTR [ecx+6]
+ 000e8 5b pop ebx
+
+; 620 : (sourceLen >> 25) + 13 - 6 + wraplen;
+; 621 : }
+
+ 000e9 5d pop ebp
+ 000ea c2 08 00 ret 8
+_deflateBound@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _putShortMSB
+_TEXT SEGMENT
+_putShortMSB PROC ; COMDAT
+; _s$ = ecx
+; _b$ = edx
+
+; 631 : {
+
+ 00000 56 push esi
+ 00001 57 push edi
+ 00002 8b f9 mov edi, ecx
+
+; 632 : put_byte(s, (Byte)(b >> 8));
+
+ 00004 8b ca mov ecx, edx
+ 00006 c1 e9 08 shr ecx, 8
+ 00009 8b 47 14 mov eax, DWORD PTR [edi+20]
+ 0000c 8b 77 08 mov esi, DWORD PTR [edi+8]
+ 0000f 88 0c 06 mov BYTE PTR [esi+eax], cl
+ 00012 ff 47 14 inc DWORD PTR [edi+20]
+ 00015 8b 4f 14 mov ecx, DWORD PTR [edi+20]
+
+; 633 : put_byte(s, (Byte)(b & 0xff));
+
+ 00018 8b 47 08 mov eax, DWORD PTR [edi+8]
+ 0001b 88 14 01 mov BYTE PTR [ecx+eax], dl
+ 0001e ff 47 14 inc DWORD PTR [edi+20]
+ 00021 5f pop edi
+ 00022 5e pop esi
+
+; 634 : }
+
+ 00023 c3 ret 0
+_putShortMSB ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _flush_pending
+_TEXT SEGMENT
+_flush_pending PROC ; COMDAT
+; _strm$ = ecx
+
+; 644 : {
+
+ 00000 53 push ebx
+ 00001 8b d9 mov ebx, ecx
+ 00003 56 push esi
+ 00004 57 push edi
+
+; 645 : unsigned len;
+; 646 : deflate_state *s = strm->state;
+
+ 00005 8b 73 1c mov esi, DWORD PTR [ebx+28]
+
+; 647 :
+; 648 : _tr_flush_bits(s);
+
+ 00008 8b ce mov ecx, esi
+ 0000a e8 00 00 00 00 call __tr_flush_bits
+
+; 649 : len = s->pending;
+
+ 0000f 8b 7e 14 mov edi, DWORD PTR [esi+20]
+
+; 650 : if (len > strm->avail_out) len = strm->avail_out;
+
+ 00012 3b 7b 10 cmp edi, DWORD PTR [ebx+16]
+ 00015 0f 47 7b 10 cmova edi, DWORD PTR [ebx+16]
+
+; 651 : if (len == 0) return;
+
+ 00019 85 ff test edi, edi
+ 0001b 74 26 je SHORT $LN4@flush_pend
+
+; 652 :
+; 653 : zmemcpy(strm->next_out, s->pending_out, len);
+
+ 0001d 57 push edi
+ 0001e ff 76 10 push DWORD PTR [esi+16]
+ 00021 ff 73 0c push DWORD PTR [ebx+12]
+ 00024 e8 00 00 00 00 call _memcpy
+
+; 654 : strm->next_out += len;
+
+ 00029 01 7b 0c add DWORD PTR [ebx+12], edi
+ 0002c 83 c4 0c add esp, 12 ; 0000000cH
+
+; 655 : s->pending_out += len;
+
+ 0002f 01 7e 10 add DWORD PTR [esi+16], edi
+
+; 656 : strm->total_out += len;
+
+ 00032 01 7b 14 add DWORD PTR [ebx+20], edi
+
+; 657 : strm->avail_out -= len;
+
+ 00035 29 7b 10 sub DWORD PTR [ebx+16], edi
+
+; 658 : s->pending -= len;
+
+ 00038 29 7e 14 sub DWORD PTR [esi+20], edi
+
+; 659 : if (s->pending == 0) {
+
+ 0003b 75 06 jne SHORT $LN4@flush_pend
+
+; 660 : s->pending_out = s->pending_buf;
+
+ 0003d 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 00040 89 46 10 mov DWORD PTR [esi+16], eax
+$LN4@flush_pend:
+
+; 661 : }
+; 662 : }
+
+ 00043 5f pop edi
+ 00044 5e pop esi
+ 00045 5b pop ebx
+ 00046 c3 ret 0
+_flush_pending ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflateCopy@8
+_TEXT SEGMENT
+_dest$ = 8 ; size = 4
+_overlay$1$ = 12 ; size = 4
+_source$ = 12 ; size = 4
+_deflateCopy@8 PROC ; COMDAT
+
+; 1017 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1018 : #ifdef MAXSEG_64K
+; 1019 : return Z_STREAM_ERROR;
+; 1020 : #else
+; 1021 : deflate_state *ds;
+; 1022 : deflate_state *ss;
+; 1023 : ushf *overlay;
+; 1024 :
+; 1025 :
+; 1026 : if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
+
+ 00003 8b 45 0c mov eax, DWORD PTR _source$[ebp]
+ 00006 53 push ebx
+ 00007 56 push esi
+ 00008 85 c0 test eax, eax
+ 0000a 0f 84 84 01 00
+ 00 je $LN3@deflateCop
+ 00010 8b 75 08 mov esi, DWORD PTR _dest$[ebp]
+ 00013 85 f6 test esi, esi
+ 00015 0f 84 79 01 00
+ 00 je $LN3@deflateCop
+ 0001b 8b 58 1c mov ebx, DWORD PTR [eax+28]
+ 0001e 85 db test ebx, ebx
+ 00020 0f 84 6e 01 00
+ 00 je $LN3@deflateCop
+
+; 1028 : }
+; 1029 :
+; 1030 : ss = source->state;
+; 1031 :
+; 1032 : zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
+
+ 00026 0f 10 00 movups xmm0, XMMWORD PTR [eax]
+ 00029 57 push edi
+
+; 1033 :
+; 1034 : ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
+
+ 0002a 68 c4 16 00 00 push 5828 ; 000016c4H
+ 0002f 0f 11 06 movups XMMWORD PTR [esi], xmm0
+ 00032 6a 01 push 1
+ 00034 0f 10 40 10 movups xmm0, XMMWORD PTR [eax+16]
+ 00038 0f 11 46 10 movups XMMWORD PTR [esi+16], xmm0
+ 0003c 0f 10 40 20 movups xmm0, XMMWORD PTR [eax+32]
+ 00040 0f 11 46 20 movups XMMWORD PTR [esi+32], xmm0
+ 00044 f3 0f 7e 40 30 movq xmm0, QWORD PTR [eax+48]
+ 00049 66 0f d6 46 30 movq QWORD PTR [esi+48], xmm0
+ 0004e ff 76 28 push DWORD PTR [esi+40]
+ 00051 8b 46 20 mov eax, DWORD PTR [esi+32]
+ 00054 ff d0 call eax
+ 00056 8b f8 mov edi, eax
+ 00058 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1035 : if (ds == Z_NULL) return Z_MEM_ERROR;
+
+ 0005b 85 ff test edi, edi
+ 0005d 0f 84 25 01 00
+ 00 je $LN9@deflateCop
+
+; 1036 : dest->state = (struct internal_state FAR *) ds;
+; 1037 : zmemcpy((voidpf)ds, (voidpf)ss, sizeof(deflate_state));
+
+ 00063 68 c4 16 00 00 push 5828 ; 000016c4H
+ 00068 53 push ebx
+ 00069 57 push edi
+ 0006a 89 7e 1c mov DWORD PTR [esi+28], edi
+ 0006d e8 00 00 00 00 call _memcpy
+
+; 1038 : ds->strm = dest;
+; 1039 :
+; 1040 : ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
+
+ 00072 6a 02 push 2
+ 00074 ff 77 2c push DWORD PTR [edi+44]
+ 00077 89 37 mov DWORD PTR [edi], esi
+ 00079 ff 76 28 push DWORD PTR [esi+40]
+ 0007c 8b 46 20 mov eax, DWORD PTR [esi+32]
+ 0007f ff d0 call eax
+
+; 1041 : ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos));
+
+ 00081 6a 02 push 2
+ 00083 ff 77 2c push DWORD PTR [edi+44]
+ 00086 89 47 38 mov DWORD PTR [edi+56], eax
+ 00089 ff 76 28 push DWORD PTR [esi+40]
+ 0008c 8b 46 20 mov eax, DWORD PTR [esi+32]
+ 0008f ff d0 call eax
+
+; 1042 : ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos));
+
+ 00091 6a 02 push 2
+ 00093 ff 77 4c push DWORD PTR [edi+76]
+ 00096 89 47 40 mov DWORD PTR [edi+64], eax
+ 00099 ff 76 28 push DWORD PTR [esi+40]
+ 0009c 8b 46 20 mov eax, DWORD PTR [esi+32]
+ 0009f ff d0 call eax
+
+; 1043 : overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
+
+ 000a1 6a 04 push 4
+ 000a3 ff b7 9c 16 00
+ 00 push DWORD PTR [edi+5788]
+ 000a9 89 47 44 mov DWORD PTR [edi+68], eax
+ 000ac ff 76 28 push DWORD PTR [esi+40]
+ 000af 8b 46 20 mov eax, DWORD PTR [esi+32]
+ 000b2 ff d0 call eax
+
+; 1044 : ds->pending_buf = (uchf *) overlay;
+; 1045 :
+; 1046 : if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
+
+ 000b4 8b 4f 38 mov ecx, DWORD PTR [edi+56]
+ 000b7 83 c4 3c add esp, 60 ; 0000003cH
+ 000ba 89 45 0c mov DWORD PTR _overlay$1$[ebp], eax
+ 000bd 89 47 08 mov DWORD PTR [edi+8], eax
+ 000c0 85 c9 test ecx, ecx
+ 000c2 0f 84 ba 00 00
+ 00 je $LN6@deflateCop
+ 000c8 83 7f 40 00 cmp DWORD PTR [edi+64], 0
+ 000cc 0f 84 b0 00 00
+ 00 je $LN6@deflateCop
+ 000d2 83 7f 44 00 cmp DWORD PTR [edi+68], 0
+ 000d6 0f 84 a6 00 00
+ 00 je $LN6@deflateCop
+ 000dc 85 c0 test eax, eax
+ 000de 0f 84 9e 00 00
+ 00 je $LN6@deflateCop
+
+; 1050 : }
+; 1051 : /* following zmemcpy do not work for 16-bit MSDOS */
+; 1052 : zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
+
+ 000e4 8b 47 2c mov eax, DWORD PTR [edi+44]
+ 000e7 03 c0 add eax, eax
+ 000e9 50 push eax
+ 000ea ff 73 38 push DWORD PTR [ebx+56]
+ 000ed 51 push ecx
+ 000ee e8 00 00 00 00 call _memcpy
+
+; 1053 : zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos));
+
+ 000f3 8b 47 2c mov eax, DWORD PTR [edi+44]
+ 000f6 03 c0 add eax, eax
+ 000f8 50 push eax
+ 000f9 ff 73 40 push DWORD PTR [ebx+64]
+ 000fc ff 77 40 push DWORD PTR [edi+64]
+ 000ff e8 00 00 00 00 call _memcpy
+
+; 1054 : zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos));
+
+ 00104 8b 47 4c mov eax, DWORD PTR [edi+76]
+ 00107 03 c0 add eax, eax
+ 00109 50 push eax
+ 0010a ff 73 44 push DWORD PTR [ebx+68]
+ 0010d ff 77 44 push DWORD PTR [edi+68]
+ 00110 e8 00 00 00 00 call _memcpy
+
+; 1055 : zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
+
+ 00115 ff 77 0c push DWORD PTR [edi+12]
+ 00118 ff 73 08 push DWORD PTR [ebx+8]
+ 0011b ff 77 08 push DWORD PTR [edi+8]
+ 0011e e8 00 00 00 00 call _memcpy
+
+; 1056 :
+; 1057 : ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
+
+ 00123 8b 43 10 mov eax, DWORD PTR [ebx+16]
+ 00126 83 c4 30 add esp, 48 ; 00000030H
+ 00129 2b 43 08 sub eax, DWORD PTR [ebx+8]
+ 0012c 8b 57 08 mov edx, DWORD PTR [edi+8]
+ 0012f 03 c2 add eax, edx
+
+; 1058 : ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
+
+ 00131 8b 8f 9c 16 00
+ 00 mov ecx, DWORD PTR [edi+5788]
+ 00137 8b 75 0c mov esi, DWORD PTR _overlay$1$[ebp]
+ 0013a 89 47 10 mov DWORD PTR [edi+16], eax
+ 0013d 8b c1 mov eax, ecx
+ 0013f d1 e8 shr eax, 1
+ 00141 8d 04 46 lea eax, DWORD PTR [esi+eax*2]
+ 00144 89 87 a4 16 00
+ 00 mov DWORD PTR [edi+5796], eax
+
+; 1059 : ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
+
+ 0014a 8d 04 4a lea eax, DWORD PTR [edx+ecx*2]
+ 0014d 03 c1 add eax, ecx
+ 0014f 89 87 98 16 00
+ 00 mov DWORD PTR [edi+5784], eax
+
+; 1060 :
+; 1061 : ds->l_desc.dyn_tree = ds->dyn_ltree;
+
+ 00155 8d 87 94 00 00
+ 00 lea eax, DWORD PTR [edi+148]
+ 0015b 89 87 18 0b 00
+ 00 mov DWORD PTR [edi+2840], eax
+
+; 1062 : ds->d_desc.dyn_tree = ds->dyn_dtree;
+
+ 00161 8d 87 88 09 00
+ 00 lea eax, DWORD PTR [edi+2440]
+ 00167 89 87 24 0b 00
+ 00 mov DWORD PTR [edi+2852], eax
+
+; 1063 : ds->bl_desc.dyn_tree = ds->bl_tree;
+
+ 0016d 8d 87 7c 0a 00
+ 00 lea eax, DWORD PTR [edi+2684]
+ 00173 89 87 30 0b 00
+ 00 mov DWORD PTR [edi+2864], eax
+
+; 1064 :
+; 1065 : return Z_OK;
+
+ 00179 33 c0 xor eax, eax
+ 0017b 5f pop edi
+ 0017c 5e pop esi
+ 0017d 5b pop ebx
+
+; 1066 : #endif /* MAXSEG_64K */
+; 1067 : }
+
+ 0017e 5d pop ebp
+ 0017f c2 08 00 ret 8
+$LN6@deflateCop:
+
+; 1047 : ds->pending_buf == Z_NULL) {
+; 1048 : deflateEnd (dest);
+
+ 00182 56 push esi
+ 00183 e8 00 00 00 00 call _deflateEnd@4
+$LN9@deflateCop:
+
+; 1049 : return Z_MEM_ERROR;
+
+ 00188 5f pop edi
+ 00189 5e pop esi
+ 0018a b8 fc ff ff ff mov eax, -4 ; fffffffcH
+ 0018f 5b pop ebx
+
+; 1066 : #endif /* MAXSEG_64K */
+; 1067 : }
+
+ 00190 5d pop ebp
+ 00191 c2 08 00 ret 8
+$LN3@deflateCop:
+ 00194 5e pop esi
+
+; 1027 : return Z_STREAM_ERROR;
+
+ 00195 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 0019a 5b pop ebx
+
+; 1066 : #endif /* MAXSEG_64K */
+; 1067 : }
+
+ 0019b 5d pop ebp
+ 0019c c2 08 00 ret 8
+_deflateCopy@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _read_buf
+_TEXT SEGMENT
+_size$ = 8 ; size = 4
+_read_buf PROC ; COMDAT
+; _strm$ = ecx
+; _buf$ = edx
+
+; 1080 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 53 push ebx
+ 00004 56 push esi
+ 00005 8b f1 mov esi, ecx
+ 00007 8b da mov ebx, edx
+ 00009 57 push edi
+
+; 1081 : unsigned len = strm->avail_in;
+
+ 0000a 8b 4e 04 mov ecx, DWORD PTR [esi+4]
+
+; 1082 :
+; 1083 : if (len > size) len = size;
+
+ 0000d 8b f9 mov edi, ecx
+ 0000f 3b 4d 08 cmp ecx, DWORD PTR _size$[ebp]
+ 00012 0f 47 7d 08 cmova edi, DWORD PTR _size$[ebp]
+
+; 1084 : if (len == 0) return 0;
+
+ 00016 85 ff test edi, edi
+ 00018 75 07 jne SHORT $LN3@read_buf
+ 0001a 5f pop edi
+ 0001b 5e pop esi
+ 0001c 33 c0 xor eax, eax
+ 0001e 5b pop ebx
+
+; 1101 : }
+
+ 0001f 5d pop ebp
+ 00020 c3 ret 0
+$LN3@read_buf:
+
+; 1085 :
+; 1086 : strm->avail_in -= len;
+; 1087 :
+; 1088 : zmemcpy(buf, strm->next_in, len);
+
+ 00021 57 push edi
+ 00022 ff 36 push DWORD PTR [esi]
+ 00024 2b cf sub ecx, edi
+ 00026 53 push ebx
+ 00027 89 4e 04 mov DWORD PTR [esi+4], ecx
+ 0002a e8 00 00 00 00 call _memcpy
+
+; 1089 : if (strm->state->wrap == 1) {
+
+ 0002f 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 00032 83 c4 0c add esp, 12 ; 0000000cH
+ 00035 8b 40 18 mov eax, DWORD PTR [eax+24]
+ 00038 83 f8 01 cmp eax, 1
+ 0003b 75 19 jne SHORT $LN4@read_buf
+
+; 1090 : strm->adler = adler32(strm->adler, buf, len);
+
+ 0003d 57 push edi
+ 0003e 53 push ebx
+ 0003f ff 76 30 push DWORD PTR [esi+48]
+ 00042 e8 00 00 00 00 call _adler32@12
+
+; 1095 : }
+; 1096 : #endif
+; 1097 : strm->next_in += len;
+
+ 00047 01 3e add DWORD PTR [esi], edi
+
+; 1098 : strm->total_in += len;
+
+ 00049 01 7e 08 add DWORD PTR [esi+8], edi
+ 0004c 89 46 30 mov DWORD PTR [esi+48], eax
+
+; 1099 :
+; 1100 : return (int)len;
+
+ 0004f 8b c7 mov eax, edi
+ 00051 5f pop edi
+ 00052 5e pop esi
+ 00053 5b pop ebx
+
+; 1101 : }
+
+ 00054 5d pop ebp
+ 00055 c3 ret 0
+$LN4@read_buf:
+
+; 1091 : }
+; 1092 : #ifdef GZIP
+; 1093 : else if (strm->state->wrap == 2) {
+
+ 00056 83 f8 02 cmp eax, 2
+ 00059 75 0d jne SHORT $LN6@read_buf
+
+; 1094 : strm->adler = crc32(strm->adler, buf, len);
+
+ 0005b 57 push edi
+ 0005c 53 push ebx
+ 0005d ff 76 30 push DWORD PTR [esi+48]
+ 00060 e8 00 00 00 00 call _crc32@12
+ 00065 89 46 30 mov DWORD PTR [esi+48], eax
+$LN6@read_buf:
+
+; 1095 : }
+; 1096 : #endif
+; 1097 : strm->next_in += len;
+
+ 00068 01 3e add DWORD PTR [esi], edi
+
+; 1099 :
+; 1100 : return (int)len;
+
+ 0006a 8b c7 mov eax, edi
+ 0006c 01 7e 08 add DWORD PTR [esi+8], edi
+ 0006f 5f pop edi
+ 00070 5e pop esi
+ 00071 5b pop ebx
+
+; 1101 : }
+
+ 00072 5d pop ebp
+ 00073 c3 ret 0
+_read_buf ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _lm_init
+_TEXT SEGMENT
+_lm_init PROC ; COMDAT
+; _s$ = ecx
+
+; 1108 : {
+
+ 00000 56 push esi
+ 00001 8b f1 mov esi, ecx
+
+; 1109 : s->window_size = (ulg)2L*s->w_size;
+; 1110 :
+; 1111 : CLEAR_HASH(s);
+
+ 00003 33 c9 xor ecx, ecx
+ 00005 8b 46 2c mov eax, DWORD PTR [esi+44]
+ 00008 8b 56 4c mov edx, DWORD PTR [esi+76]
+ 0000b 03 c0 add eax, eax
+ 0000d 89 46 3c mov DWORD PTR [esi+60], eax
+ 00010 8b 46 44 mov eax, DWORD PTR [esi+68]
+ 00013 66 89 4c 50 fe mov WORD PTR [eax+edx*2-2], cx
+ 00018 8b 46 4c mov eax, DWORD PTR [esi+76]
+ 0001b 8d 04 45 fe ff
+ ff ff lea eax, DWORD PTR [eax*2-2]
+ 00022 50 push eax
+ 00023 51 push ecx
+ 00024 ff 76 44 push DWORD PTR [esi+68]
+ 00027 e8 00 00 00 00 call _memset
+
+; 1112 :
+; 1113 : /* Set the default configuration parameters:
+; 1114 : */
+; 1115 : s->max_lazy_match = configuration_table[s->level].max_lazy;
+
+ 0002c 8b 86 84 00 00
+ 00 mov eax, DWORD PTR [esi+132]
+ 00032 83 c4 0c add esp, 12 ; 0000000cH
+ 00035 8d 0c 40 lea ecx, DWORD PTR [eax+eax*2]
+ 00038 0f b7 04 8d 02
+ 00 00 00 movzx eax, WORD PTR _configuration_table[ecx*4+2]
+ 00040 89 86 80 00 00
+ 00 mov DWORD PTR [esi+128], eax
+
+; 1116 : s->good_match = configuration_table[s->level].good_length;
+
+ 00046 0f b7 04 8d 00
+ 00 00 00 movzx eax, WORD PTR _configuration_table[ecx*4]
+ 0004e 89 86 8c 00 00
+ 00 mov DWORD PTR [esi+140], eax
+
+; 1117 : s->nice_match = configuration_table[s->level].nice_length;
+
+ 00054 0f b7 04 8d 04
+ 00 00 00 movzx eax, WORD PTR _configuration_table[ecx*4+4]
+ 0005c 89 86 90 00 00
+ 00 mov DWORD PTR [esi+144], eax
+
+; 1118 : s->max_chain_length = configuration_table[s->level].max_chain;
+
+ 00062 0f b7 04 8d 06
+ 00 00 00 movzx eax, WORD PTR _configuration_table[ecx*4+6]
+ 0006a 89 46 7c mov DWORD PTR [esi+124], eax
+
+; 1119 :
+; 1120 : s->strstart = 0;
+
+ 0006d c7 46 6c 00 00
+ 00 00 mov DWORD PTR [esi+108], 0
+
+; 1121 : s->block_start = 0L;
+
+ 00074 c7 46 5c 00 00
+ 00 00 mov DWORD PTR [esi+92], 0
+
+; 1122 : s->lookahead = 0;
+
+ 0007b c7 46 74 00 00
+ 00 00 mov DWORD PTR [esi+116], 0
+
+; 1123 : s->insert = 0;
+
+ 00082 c7 86 b4 16 00
+ 00 00 00 00 00 mov DWORD PTR [esi+5812], 0
+
+; 1124 : s->match_length = s->prev_length = MIN_MATCH-1;
+
+ 0008c c7 46 78 02 00
+ 00 00 mov DWORD PTR [esi+120], 2
+ 00093 c7 46 60 02 00
+ 00 00 mov DWORD PTR [esi+96], 2
+
+; 1125 : s->match_available = 0;
+
+ 0009a c7 46 68 00 00
+ 00 00 mov DWORD PTR [esi+104], 0
+
+; 1126 : s->ins_h = 0;
+
+ 000a1 c7 46 48 00 00
+ 00 00 mov DWORD PTR [esi+72], 0
+ 000a8 5e pop esi
+
+; 1127 : #ifndef FASTEST
+; 1128 : #ifdef ASMV
+; 1129 : match_init(); /* initialize the asm code */
+; 1130 : #endif
+; 1131 : #endif
+; 1132 : }
+
+ 000a9 c3 ret 0
+_lm_init ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _longest_match
+_TEXT SEGMENT
+tv373 = -36 ; size = 4
+_prev$1$ = -32 ; size = 4
+_wmask$1$ = -28 ; size = 4
+tv381 = -24 ; size = 4
+_limit$1$ = -20 ; size = 4
+_s$1$ = -16 ; size = 4
+_chain_length$1$ = -12 ; size = 4
+_nice_match$2$ = -8 ; size = 4
+_scan_end$1$ = -2 ; size = 1
+_scan_end1$1$ = -1 ; size = 1
+_longest_match PROC ; COMDAT
+; _s$ = ecx
+; _cur_match$ = edx
+
+; 1151 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 24 sub esp, 36 ; 00000024H
+ 00006 53 push ebx
+ 00007 56 push esi
+ 00008 8b f1 mov esi, ecx
+ 0000a 8b da mov ebx, edx
+ 0000c 57 push edi
+ 0000d 89 75 f0 mov DWORD PTR _s$1$[ebp], esi
+
+; 1152 : unsigned chain_length = s->max_chain_length;/* max hash chain length */
+
+ 00010 8b 46 7c mov eax, DWORD PTR [esi+124]
+
+; 1153 : register Bytef *scan = s->window + s->strstart; /* current string */
+
+ 00013 8b 4e 38 mov ecx, DWORD PTR [esi+56]
+
+; 1154 : register Bytef *match; /* matched string */
+; 1155 : register int len; /* length of current match */
+; 1156 : int best_len = s->prev_length; /* best match length so far */
+; 1157 : int nice_match = s->nice_match; /* stop if match long enough */
+; 1158 : IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
+
+ 00016 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00019 8b 7e 78 mov edi, DWORD PTR [esi+120]
+ 0001c 89 45 f4 mov DWORD PTR _chain_length$1$[ebp], eax
+ 0001f 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 00022 03 c1 add eax, ecx
+ 00024 89 4d e8 mov DWORD PTR tv381[ebp], ecx
+ 00027 8b 8e 90 00 00
+ 00 mov ecx, DWORD PTR [esi+144]
+ 0002d 89 4d f8 mov DWORD PTR _nice_match$2$[ebp], ecx
+ 00030 8d 8a fa fe ff
+ ff lea ecx, DWORD PTR [edx-262]
+ 00036 39 4e 6c cmp DWORD PTR [esi+108], ecx
+ 00039 76 10 jbe SHORT $LN18@longest_ma
+ 0003b 8b 4e 6c mov ecx, DWORD PTR [esi+108]
+ 0003e 2b ca sub ecx, edx
+ 00040 81 c1 06 01 00
+ 00 add ecx, 262 ; 00000106H
+ 00046 89 4d ec mov DWORD PTR _limit$1$[ebp], ecx
+ 00049 eb 07 jmp SHORT $LN19@longest_ma
+$LN18@longest_ma:
+ 0004b c7 45 ec 00 00
+ 00 00 mov DWORD PTR _limit$1$[ebp], 0
+$LN19@longest_ma:
+
+; 1159 : s->strstart - (IPos)MAX_DIST(s) : NIL;
+; 1160 : /* Stop when cur_match becomes <= limit. To simplify the code,
+; 1161 : * we prevent matches with the string of window index 0.
+; 1162 : */
+; 1163 : Posf *prev = s->prev;
+
+ 00052 8b 4e 40 mov ecx, DWORD PTR [esi+64]
+ 00055 89 4d e0 mov DWORD PTR _prev$1$[ebp], ecx
+
+; 1164 : uInt wmask = s->w_mask;
+
+ 00058 8b 4e 34 mov ecx, DWORD PTR [esi+52]
+
+; 1165 :
+; 1166 : #ifdef UNALIGNED_OK
+; 1167 : /* Compare two bytes at a time. Note: this is not always beneficial.
+; 1168 : * Try with and without -DUNALIGNED_OK to check.
+; 1169 : */
+; 1170 : register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
+; 1171 : register ush scan_start = *(ushf*)scan;
+; 1172 : register ush scan_end = *(ushf*)(scan+best_len-1);
+; 1173 : #else
+; 1174 : register Bytef *strend = s->window + s->strstart + MAX_MATCH;
+
+ 0005b 8d b0 02 01 00
+ 00 lea esi, DWORD PTR [eax+258]
+ 00061 89 4d e4 mov DWORD PTR _wmask$1$[ebp], ecx
+
+; 1175 : register Byte scan_end1 = scan[best_len-1];
+
+ 00064 8a 4c 07 ff mov cl, BYTE PTR [edi+eax-1]
+ 00068 88 4d ff mov BYTE PTR _scan_end1$1$[ebp], cl
+
+; 1176 : register Byte scan_end = scan[best_len];
+
+ 0006b 8a 0c 07 mov cl, BYTE PTR [edi+eax]
+ 0006e 88 4d fe mov BYTE PTR _scan_end$1$[ebp], cl
+
+; 1177 : #endif
+; 1178 :
+; 1179 : /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
+; 1180 : * It is easy to get rid of this optimization if necessary.
+; 1181 : */
+; 1182 : Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
+; 1183 :
+; 1184 : /* Do not waste too much time if we already have a good match: */
+; 1185 : if (s->prev_length >= s->good_match) {
+
+ 00071 8b 4d f0 mov ecx, DWORD PTR _s$1$[ebp]
+ 00074 3b b9 8c 00 00
+ 00 cmp edi, DWORD PTR [ecx+140]
+ 0007a 72 09 jb SHORT $LN8@longest_ma
+
+; 1186 : chain_length >>= 2;
+
+ 0007c 8b 51 7c mov edx, DWORD PTR [ecx+124]
+ 0007f c1 ea 02 shr edx, 2
+ 00082 89 55 f4 mov DWORD PTR _chain_length$1$[ebp], edx
+$LN8@longest_ma:
+
+; 1187 : }
+; 1188 : /* Do not look for matches beyond the end of the input. This is necessary
+; 1189 : * to make deflate deterministic.
+; 1190 : */
+; 1191 : if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+
+ 00085 8b 49 74 mov ecx, DWORD PTR [ecx+116]
+ 00088 8b 55 f8 mov edx, DWORD PTR _nice_match$2$[ebp]
+ 0008b 3b d1 cmp edx, ecx
+ 0008d 89 4d dc mov DWORD PTR tv373[ebp], ecx
+ 00090 0f 47 d1 cmova edx, ecx
+ 00093 89 55 f8 mov DWORD PTR _nice_match$2$[ebp], edx
+$LL4@longest_ma:
+
+; 1192 :
+; 1193 : Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
+; 1194 :
+; 1195 : do {
+; 1196 : Assert(cur_match < s->strstart, "no future");
+; 1197 : match = s->window + cur_match;
+
+ 00096 8b 55 e8 mov edx, DWORD PTR tv381[ebp]
+
+; 1198 :
+; 1199 : /* Skip to next match if the match length cannot increase
+; 1200 : * or if the match length is less than 2. Note that the checks below
+; 1201 : * for insufficient lookahead only occur occasionally for performance
+; 1202 : * reasons. Therefore uninitialized memory will be accessed, and
+; 1203 : * conditional jumps will be made that depend on those values.
+; 1204 : * However the length of the match is limited to the lookahead, so
+; 1205 : * the output of deflate is not affected by the uninitialized values.
+; 1206 : */
+; 1207 : #if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
+; 1208 : /* This code assumes sizeof(unsigned short) == 2. Do not use
+; 1209 : * UNALIGNED_OK if your compiler uses a different size.
+; 1210 : */
+; 1211 : if (*(ushf*)(match+best_len-1) != scan_end ||
+; 1212 : *(ushf*)match != scan_start) continue;
+; 1213 :
+; 1214 : /* It is not necessary to compare scan[2] and match[2] since they are
+; 1215 : * always equal when the other bytes match, given that the hash keys
+; 1216 : * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
+; 1217 : * strstart+3, +5, ... up to strstart+257. We check for insufficient
+; 1218 : * lookahead only every 4th comparison; the 128th check will be made
+; 1219 : * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
+; 1220 : * necessary to put more guard bytes at the end of the window, or
+; 1221 : * to check more often for insufficient lookahead.
+; 1222 : */
+; 1223 : Assert(scan[2] == match[2], "scan[2]?");
+; 1224 : scan++, match++;
+; 1225 : do {
+; 1226 : } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+; 1227 : *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+; 1228 : *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+; 1229 : *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+; 1230 : scan < strend);
+; 1231 : /* The funny "do {}" generates better code on most compilers */
+; 1232 :
+; 1233 : /* Here, scan <= window+strstart+257 */
+; 1234 : Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+; 1235 : if (*scan == *match) scan++;
+; 1236 :
+; 1237 : len = (MAX_MATCH - 1) - (int)(strend-scan);
+; 1238 : scan = strend - (MAX_MATCH-1);
+; 1239 :
+; 1240 : #else /* UNALIGNED_OK */
+; 1241 :
+; 1242 : if (match[best_len] != scan_end ||
+; 1243 : match[best_len-1] != scan_end1 ||
+; 1244 : *match != *scan ||
+
+ 00099 8a 4d fe mov cl, BYTE PTR _scan_end$1$[ebp]
+ 0009c 03 d3 add edx, ebx
+ 0009e 38 0c 3a cmp BYTE PTR [edx+edi], cl
+ 000a1 0f 85 a3 00 00
+ 00 jne $LN2@longest_ma
+ 000a7 8a 4d ff mov cl, BYTE PTR _scan_end1$1$[ebp]
+ 000aa 38 4c 3a ff cmp BYTE PTR [edx+edi-1], cl
+ 000ae 0f 85 96 00 00
+ 00 jne $LN2@longest_ma
+ 000b4 8a 0a mov cl, BYTE PTR [edx]
+ 000b6 3a 08 cmp cl, BYTE PTR [eax]
+ 000b8 0f 85 8c 00 00
+ 00 jne $LN2@longest_ma
+ 000be 8a 4a 01 mov cl, BYTE PTR [edx+1]
+ 000c1 3a 48 01 cmp cl, BYTE PTR [eax+1]
+ 000c4 0f 85 80 00 00
+ 00 jne $LN2@longest_ma
+
+; 1245 : *++match != scan[1]) continue;
+; 1246 :
+; 1247 : /* The check at best_len-1 can be removed because it will be made
+; 1248 : * again later. (This heuristic is not always a win.)
+; 1249 : * It is not necessary to compare scan[2] and match[2] since they
+; 1250 : * are always equal when the other bytes match, given that
+; 1251 : * the hash keys are equal and that HASH_BITS >= 8.
+; 1252 : */
+; 1253 : scan += 2, match++;
+
+ 000ca 83 c0 02 add eax, 2
+ 000cd 83 c2 02 add edx, 2
+$LL7@longest_ma:
+
+; 1254 : Assert(*scan == *match, "match[2]?");
+; 1255 :
+; 1256 : /* We check for insufficient lookahead only every 8th comparison;
+; 1257 : * the 256th check will be made at strstart+258.
+; 1258 : */
+; 1259 : do {
+; 1260 : } while (*++scan == *++match && *++scan == *++match &&
+; 1261 : *++scan == *++match && *++scan == *++match &&
+; 1262 : *++scan == *++match && *++scan == *++match &&
+; 1263 : *++scan == *++match && *++scan == *++match &&
+
+ 000d0 8a 48 01 mov cl, BYTE PTR [eax+1]
+ 000d3 40 inc eax
+ 000d4 3a 4a 01 cmp cl, BYTE PTR [edx+1]
+ 000d7 75 45 jne SHORT $LN12@longest_ma
+ 000d9 8a 48 01 mov cl, BYTE PTR [eax+1]
+ 000dc 40 inc eax
+ 000dd 3a 4a 02 cmp cl, BYTE PTR [edx+2]
+ 000e0 75 3c jne SHORT $LN12@longest_ma
+ 000e2 8a 48 01 mov cl, BYTE PTR [eax+1]
+ 000e5 40 inc eax
+ 000e6 3a 4a 03 cmp cl, BYTE PTR [edx+3]
+ 000e9 75 33 jne SHORT $LN12@longest_ma
+ 000eb 8a 48 01 mov cl, BYTE PTR [eax+1]
+ 000ee 40 inc eax
+ 000ef 3a 4a 04 cmp cl, BYTE PTR [edx+4]
+ 000f2 75 2a jne SHORT $LN12@longest_ma
+ 000f4 8a 48 01 mov cl, BYTE PTR [eax+1]
+ 000f7 40 inc eax
+ 000f8 3a 4a 05 cmp cl, BYTE PTR [edx+5]
+ 000fb 75 21 jne SHORT $LN12@longest_ma
+ 000fd 8a 48 01 mov cl, BYTE PTR [eax+1]
+ 00100 40 inc eax
+ 00101 3a 4a 06 cmp cl, BYTE PTR [edx+6]
+ 00104 75 18 jne SHORT $LN12@longest_ma
+ 00106 8a 48 01 mov cl, BYTE PTR [eax+1]
+ 00109 40 inc eax
+ 0010a 3a 4a 07 cmp cl, BYTE PTR [edx+7]
+ 0010d 75 0f jne SHORT $LN12@longest_ma
+ 0010f 8a 48 01 mov cl, BYTE PTR [eax+1]
+ 00112 40 inc eax
+ 00113 83 c2 08 add edx, 8
+ 00116 3a 0a cmp cl, BYTE PTR [edx]
+ 00118 75 04 jne SHORT $LN12@longest_ma
+ 0011a 3b c6 cmp eax, esi
+ 0011c 72 b2 jb SHORT $LL7@longest_ma
+$LN12@longest_ma:
+
+; 1264 : scan < strend);
+; 1265 :
+; 1266 : Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+; 1267 :
+; 1268 : len = MAX_MATCH - (int)(strend - scan);
+
+ 0011e 2b c6 sub eax, esi
+ 00120 8d 88 02 01 00
+ 00 lea ecx, DWORD PTR [eax+258]
+
+; 1269 : scan = strend - MAX_MATCH;
+
+ 00126 8d 86 fe fe ff
+ ff lea eax, DWORD PTR [esi-258]
+
+; 1270 :
+; 1271 : #endif /* UNALIGNED_OK */
+; 1272 :
+; 1273 : if (len > best_len) {
+
+ 0012c 3b cf cmp ecx, edi
+ 0012e 7e 1a jle SHORT $LN2@longest_ma
+
+; 1274 : s->match_start = cur_match;
+; 1275 : best_len = len;
+
+ 00130 8b f9 mov edi, ecx
+ 00132 8b 55 f0 mov edx, DWORD PTR _s$1$[ebp]
+ 00135 89 5a 70 mov DWORD PTR [edx+112], ebx
+
+; 1276 : if (len >= nice_match) break;
+
+ 00138 3b 4d f8 cmp ecx, DWORD PTR _nice_match$2$[ebp]
+ 0013b 7d 28 jge SHORT $LN3@longest_ma
+
+; 1277 : #ifdef UNALIGNED_OK
+; 1278 : scan_end = *(ushf*)(scan+best_len-1);
+; 1279 : #else
+; 1280 : scan_end1 = scan[best_len-1];
+
+ 0013d 8a 54 01 ff mov dl, BYTE PTR [ecx+eax-1]
+
+; 1281 : scan_end = scan[best_len];
+
+ 00141 8a 0c 01 mov cl, BYTE PTR [ecx+eax]
+ 00144 88 55 ff mov BYTE PTR _scan_end1$1$[ebp], dl
+ 00147 88 4d fe mov BYTE PTR _scan_end$1$[ebp], cl
+$LN2@longest_ma:
+
+; 1282 : #endif
+; 1283 : }
+; 1284 : } while ((cur_match = prev[cur_match & wmask]) > limit
+; 1285 : && --chain_length != 0);
+
+ 0014a 8b 4d e4 mov ecx, DWORD PTR _wmask$1$[ebp]
+ 0014d 8b 55 e0 mov edx, DWORD PTR _prev$1$[ebp]
+ 00150 23 cb and ecx, ebx
+ 00152 0f b7 1c 4a movzx ebx, WORD PTR [edx+ecx*2]
+ 00156 3b 5d ec cmp ebx, DWORD PTR _limit$1$[ebp]
+ 00159 76 0a jbe SHORT $LN3@longest_ma
+ 0015b 83 6d f4 01 sub DWORD PTR _chain_length$1$[ebp], 1
+ 0015f 0f 85 31 ff ff
+ ff jne $LL4@longest_ma
+$LN3@longest_ma:
+
+; 1286 :
+; 1287 : if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
+
+ 00165 8b 45 dc mov eax, DWORD PTR tv373[ebp]
+ 00168 3b f8 cmp edi, eax
+ 0016a 0f 46 c7 cmovbe eax, edi
+ 0016d 5f pop edi
+ 0016e 5e pop esi
+ 0016f 5b pop ebx
+
+; 1288 : return s->lookahead;
+; 1289 : }
+
+ 00170 8b e5 mov esp, ebp
+ 00172 5d pop ebp
+ 00173 c3 ret 0
+_longest_match ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _fill_window
+_TEXT SEGMENT
+_wsize$1$ = -8 ; size = 4
+_str$1$ = -4 ; size = 4
+_fill_window PROC ; COMDAT
+; _s$ = ecx
+
+; 1392 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 08 sub esp, 8
+ 00006 53 push ebx
+ 00007 56 push esi
+ 00008 8b f1 mov esi, ecx
+ 0000a 57 push edi
+
+; 1393 : register unsigned n, m;
+; 1394 : register Posf *p;
+; 1395 : unsigned more; /* Amount of free space at the end of the window. */
+; 1396 : uInt wsize = s->w_size;
+
+ 0000b 8b 5e 2c mov ebx, DWORD PTR [esi+44]
+ 0000e 89 5d f8 mov DWORD PTR _wsize$1$[ebp], ebx
+$LL4@fill_windo:
+
+; 1397 :
+; 1398 : Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
+; 1399 :
+; 1400 : do {
+; 1401 : more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
+; 1402 :
+; 1403 : /* Deal with !@#$% 64K limit: */
+; 1404 : if (sizeof(int) <= 2) {
+; 1405 : if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
+; 1406 : more = wsize;
+; 1407 :
+; 1408 : } else if (more == (unsigned)(-1)) {
+; 1409 : /* Very unlikely, but possible on 16 bit machine if
+; 1410 : * strstart == 0 && lookahead == 1 (input done a byte at time)
+; 1411 : */
+; 1412 : more--;
+; 1413 : }
+; 1414 : }
+; 1415 :
+; 1416 : /* If the window is almost full and there is insufficient lookahead,
+; 1417 : * move the upper half to the lower one to make room in the upper half.
+; 1418 : */
+; 1419 : if (s->strstart >= wsize+MAX_DIST(s)) {
+
+ 00011 8b 46 2c mov eax, DWORD PTR [esi+44]
+ 00014 8b 7e 3c mov edi, DWORD PTR [esi+60]
+ 00017 05 fa fe ff ff add eax, -262 ; fffffefaH
+ 0001c 2b 7e 74 sub edi, DWORD PTR [esi+116]
+ 0001f 03 c3 add eax, ebx
+ 00021 2b 7e 6c sub edi, DWORD PTR [esi+108]
+ 00024 39 46 6c cmp DWORD PTR [esi+108], eax
+ 00027 72 63 jb SHORT $LN17@fill_windo
+
+; 1420 :
+; 1421 : zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
+
+ 00029 8b 4e 38 mov ecx, DWORD PTR [esi+56]
+ 0002c 53 push ebx
+ 0002d 8d 04 19 lea eax, DWORD PTR [ecx+ebx]
+ 00030 50 push eax
+ 00031 51 push ecx
+ 00032 e8 00 00 00 00 call _memcpy
+
+; 1422 : s->match_start -= wsize;
+; 1423 : s->strstart -= wsize; /* we now have strstart >= MAX_DIST */
+; 1424 : s->block_start -= (long) wsize;
+; 1425 :
+; 1426 : /* Slide the hash table (could be avoided with 32 bit values
+; 1427 : at the expense of memory usage). We slide even when level == 0
+; 1428 : to keep the hash table consistent if we switch back to level > 0
+; 1429 : later. (Using level 0 permanently is not an optimal usage of
+; 1430 : zlib, so we don't care about this pathological case.)
+; 1431 : */
+; 1432 : n = s->hash_size;
+
+ 00037 8b 56 4c mov edx, DWORD PTR [esi+76]
+ 0003a 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1433 : p = &s->head[n];
+
+ 0003d 8b 46 44 mov eax, DWORD PTR [esi+68]
+ 00040 29 5e 70 sub DWORD PTR [esi+112], ebx
+ 00043 29 5e 6c sub DWORD PTR [esi+108], ebx
+ 00046 29 5e 5c sub DWORD PTR [esi+92], ebx
+ 00049 8d 0c 50 lea ecx, DWORD PTR [eax+edx*2]
+ 0004c 0f 1f 40 00 npad 4
+$LL7@fill_windo:
+
+; 1434 : do {
+; 1435 : m = *--p;
+
+ 00050 0f b7 41 fe movzx eax, WORD PTR [ecx-2]
+ 00054 8d 49 fe lea ecx, DWORD PTR [ecx-2]
+
+; 1436 : *p = (Pos)(m >= wsize ? m-wsize : NIL);
+
+ 00057 3b c3 cmp eax, ebx
+ 00059 72 04 jb SHORT $LN29@fill_windo
+ 0005b 2b c3 sub eax, ebx
+ 0005d eb 02 jmp SHORT $LN30@fill_windo
+$LN29@fill_windo:
+ 0005f 33 c0 xor eax, eax
+$LN30@fill_windo:
+ 00061 66 89 01 mov WORD PTR [ecx], ax
+
+; 1437 : } while (--n);
+
+ 00064 83 ea 01 sub edx, 1
+ 00067 75 e7 jne SHORT $LL7@fill_windo
+
+; 1438 :
+; 1439 : n = wsize;
+; 1440 : #ifndef FASTEST
+; 1441 : p = &s->prev[n];
+
+ 00069 8b 46 40 mov eax, DWORD PTR [esi+64]
+ 0006c 8b d3 mov edx, ebx
+ 0006e 8d 0c 58 lea ecx, DWORD PTR [eax+ebx*2]
+$LL10@fill_windo:
+
+; 1442 : do {
+; 1443 : m = *--p;
+
+ 00071 0f b7 41 fe movzx eax, WORD PTR [ecx-2]
+ 00075 8d 49 fe lea ecx, DWORD PTR [ecx-2]
+
+; 1444 : *p = (Pos)(m >= wsize ? m-wsize : NIL);
+
+ 00078 3b c3 cmp eax, ebx
+ 0007a 72 04 jb SHORT $LN31@fill_windo
+ 0007c 2b c3 sub eax, ebx
+ 0007e eb 02 jmp SHORT $LN32@fill_windo
+$LN31@fill_windo:
+ 00080 33 c0 xor eax, eax
+$LN32@fill_windo:
+ 00082 66 89 01 mov WORD PTR [ecx], ax
+
+; 1445 : /* If n is not on any hash chain, prev[n] is garbage but
+; 1446 : * its value will never be used.
+; 1447 : */
+; 1448 : } while (--n);
+
+ 00085 83 ea 01 sub edx, 1
+ 00088 75 e7 jne SHORT $LL10@fill_windo
+
+; 1449 : #endif
+; 1450 : more += wsize;
+
+ 0008a 03 fb add edi, ebx
+$LN17@fill_windo:
+
+; 1451 : }
+; 1452 : if (s->strm->avail_in == 0) break;
+
+ 0008c 8b 0e mov ecx, DWORD PTR [esi]
+ 0008e 83 79 04 00 cmp DWORD PTR [ecx+4], 0
+ 00092 0f 84 c0 00 00
+ 00 je $LN3@fill_windo
+
+; 1453 :
+; 1454 : /* If there was no sliding:
+; 1455 : * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
+; 1456 : * more == window_size - lookahead - strstart
+; 1457 : * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
+; 1458 : * => more >= window_size - 2*WSIZE + 2
+; 1459 : * In the BIG_MEM or MMAP case (not yet supported),
+; 1460 : * window_size == input_size + MIN_LOOKAHEAD &&
+; 1461 : * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
+; 1462 : * Otherwise, window_size == 2*WSIZE so more >= 2.
+; 1463 : * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
+; 1464 : */
+; 1465 : Assert(more >= 2, "more < 2");
+; 1466 :
+; 1467 : n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more);
+
+ 00098 8b 56 74 mov edx, DWORD PTR [esi+116]
+ 0009b 03 56 6c add edx, DWORD PTR [esi+108]
+ 0009e 03 56 38 add edx, DWORD PTR [esi+56]
+ 000a1 57 push edi
+ 000a2 e8 00 00 00 00 call _read_buf
+
+; 1468 : s->lookahead += n;
+
+ 000a7 01 46 74 add DWORD PTR [esi+116], eax
+ 000aa 83 c4 04 add esp, 4
+ 000ad 8b 46 74 mov eax, DWORD PTR [esi+116]
+
+; 1469 :
+; 1470 : /* Initialize the hash value now that we have some input: */
+; 1471 : if (s->lookahead + s->insert >= MIN_MATCH) {
+
+ 000b0 8b 8e b4 16 00
+ 00 mov ecx, DWORD PTR [esi+5812]
+ 000b6 03 c1 add eax, ecx
+ 000b8 83 f8 03 cmp eax, 3
+ 000bb 0f 82 82 00 00
+ 00 jb $LN2@fill_windo
+
+; 1472 : uInt str = s->strstart - s->insert;
+
+ 000c1 8b 7e 6c mov edi, DWORD PTR [esi+108]
+
+; 1473 : s->ins_h = s->window[str];
+
+ 000c4 8b 46 38 mov eax, DWORD PTR [esi+56]
+ 000c7 2b f9 sub edi, ecx
+
+; 1474 : UPDATE_HASH(s, s->ins_h, s->window[str + 1]);
+
+ 000c9 8b 4e 58 mov ecx, DWORD PTR [esi+88]
+ 000cc 89 7d fc mov DWORD PTR _str$1$[ebp], edi
+ 000cf 0f b6 14 38 movzx edx, BYTE PTR [eax+edi]
+ 000d3 89 56 48 mov DWORD PTR [esi+72], edx
+ 000d6 0f b6 44 38 01 movzx eax, BYTE PTR [eax+edi+1]
+ 000db d3 e2 shl edx, cl
+ 000dd 33 d0 xor edx, eax
+ 000df 23 56 54 and edx, DWORD PTR [esi+84]
+
+; 1475 : #if MIN_MATCH != 3
+; 1476 : Call UPDATE_HASH() MIN_MATCH-3 more times
+; 1477 : #endif
+; 1478 : while (s->insert) {
+
+ 000e2 83 be b4 16 00
+ 00 00 cmp DWORD PTR [esi+5812], 0
+ 000e9 89 56 48 mov DWORD PTR [esi+72], edx
+ 000ec 74 55 je SHORT $LN2@fill_windo
+ 000ee 8b df mov ebx, edi
+$LL11@fill_windo:
+
+; 1479 : UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
+
+ 000f0 8b 46 38 mov eax, DWORD PTR [esi+56]
+ 000f3 8b 4e 58 mov ecx, DWORD PTR [esi+88]
+
+; 1480 : #ifndef FASTEST
+; 1481 : s->prev[str & s->w_mask] = s->head[s->ins_h];
+
+ 000f6 8b 56 34 mov edx, DWORD PTR [esi+52]
+ 000f9 23 d3 and edx, ebx
+ 000fb 0f b6 7c 18 02 movzx edi, BYTE PTR [eax+ebx+2]
+ 00100 8b 46 48 mov eax, DWORD PTR [esi+72]
+ 00103 d3 e0 shl eax, cl
+ 00105 8b 4e 40 mov ecx, DWORD PTR [esi+64]
+ 00108 33 f8 xor edi, eax
+ 0010a 23 7e 54 and edi, DWORD PTR [esi+84]
+ 0010d 8b 46 44 mov eax, DWORD PTR [esi+68]
+ 00110 89 7e 48 mov DWORD PTR [esi+72], edi
+ 00113 66 8b 04 78 mov ax, WORD PTR [eax+edi*2]
+ 00117 66 89 04 51 mov WORD PTR [ecx+edx*2], ax
+
+; 1482 : #endif
+; 1483 : s->head[s->ins_h] = (Pos)str;
+
+ 0011b 8b 4e 48 mov ecx, DWORD PTR [esi+72]
+ 0011e 8b 46 44 mov eax, DWORD PTR [esi+68]
+ 00121 66 89 1c 48 mov WORD PTR [eax+ecx*2], bx
+
+; 1484 : str++;
+
+ 00125 43 inc ebx
+
+; 1485 : s->insert--;
+
+ 00126 ff 8e b4 16 00
+ 00 dec DWORD PTR [esi+5812]
+
+; 1486 : if (s->lookahead + s->insert < MIN_MATCH)
+
+ 0012c 8b 46 74 mov eax, DWORD PTR [esi+116]
+ 0012f 8b 8e b4 16 00
+ 00 mov ecx, DWORD PTR [esi+5812]
+ 00135 03 c1 add eax, ecx
+ 00137 83 f8 03 cmp eax, 3
+ 0013a 72 04 jb SHORT $LN48@fill_windo
+
+; 1475 : #if MIN_MATCH != 3
+; 1476 : Call UPDATE_HASH() MIN_MATCH-3 more times
+; 1477 : #endif
+; 1478 : while (s->insert) {
+
+ 0013c 85 c9 test ecx, ecx
+ 0013e 75 b0 jne SHORT $LL11@fill_windo
+$LN48@fill_windo:
+ 00140 8b 5d f8 mov ebx, DWORD PTR _wsize$1$[ebp]
+$LN2@fill_windo:
+
+; 1487 : break;
+; 1488 : }
+; 1489 : }
+; 1490 : /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
+; 1491 : * but this is not important since only literal bytes will be emitted.
+; 1492 : */
+; 1493 :
+; 1494 : } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
+
+ 00143 81 7e 74 06 01
+ 00 00 cmp DWORD PTR [esi+116], 262 ; 00000106H
+ 0014a 73 0c jae SHORT $LN3@fill_windo
+ 0014c 8b 06 mov eax, DWORD PTR [esi]
+ 0014e 83 78 04 00 cmp DWORD PTR [eax+4], 0
+ 00152 0f 85 b9 fe ff
+ ff jne $LL4@fill_windo
+$LN3@fill_windo:
+
+; 1495 :
+; 1496 : /* If the WIN_INIT bytes after the end of the current data have never been
+; 1497 : * written, then zero those bytes in order to avoid memory check reports of
+; 1498 : * the use of uninitialized (or uninitialised as Julian writes) bytes by
+; 1499 : * the longest match routines. Update the high water mark for the next
+; 1500 : * time through here. WIN_INIT is set to MAX_MATCH since the longest match
+; 1501 : * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
+; 1502 : */
+; 1503 : if (s->high_water < s->window_size) {
+
+ 00158 8b 8e c0 16 00
+ 00 mov ecx, DWORD PTR [esi+5824]
+ 0015e 8b 5e 3c mov ebx, DWORD PTR [esi+60]
+ 00161 3b cb cmp ecx, ebx
+ 00163 73 67 jae SHORT $LN26@fill_windo
+
+; 1504 : ulg curr = s->strstart + (ulg)(s->lookahead);
+
+ 00165 8b 7e 74 mov edi, DWORD PTR [esi+116]
+ 00168 03 7e 6c add edi, DWORD PTR [esi+108]
+
+; 1505 : ulg init;
+; 1506 :
+; 1507 : if (s->high_water < curr) {
+
+ 0016b 3b cf cmp ecx, edi
+ 0016d 73 2d jae SHORT $LN23@fill_windo
+
+; 1508 : /* Previous high water mark below current data -- zero WIN_INIT
+; 1509 : * bytes or up to end of window, whichever is less.
+; 1510 : */
+; 1511 : init = s->window_size - curr;
+; 1512 : if (init > WIN_INIT)
+
+ 0016f b8 02 01 00 00 mov eax, 258 ; 00000102H
+ 00174 2b df sub ebx, edi
+ 00176 3b d8 cmp ebx, eax
+ 00178 0f 47 d8 cmova ebx, eax
+
+; 1513 : init = WIN_INIT;
+; 1514 : zmemzero(s->window + curr, (unsigned)init);
+
+ 0017b 8b 46 38 mov eax, DWORD PTR [esi+56]
+ 0017e 53 push ebx
+ 0017f 03 c7 add eax, edi
+ 00181 6a 00 push 0
+ 00183 50 push eax
+ 00184 e8 00 00 00 00 call _memset
+ 00189 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1515 : s->high_water = curr + init;
+
+ 0018c 8d 04 3b lea eax, DWORD PTR [ebx+edi]
+ 0018f 89 86 c0 16 00
+ 00 mov DWORD PTR [esi+5824], eax
+ 00195 5f pop edi
+ 00196 5e pop esi
+ 00197 5b pop ebx
+
+; 1527 : }
+; 1528 : }
+; 1529 :
+; 1530 : Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
+; 1531 : "not enough room for search");
+; 1532 : }
+
+ 00198 8b e5 mov esp, ebp
+ 0019a 5d pop ebp
+ 0019b c3 ret 0
+$LN23@fill_windo:
+
+; 1516 : }
+; 1517 : else if (s->high_water < (ulg)curr + WIN_INIT) {
+
+ 0019c 8d 87 02 01 00
+ 00 lea eax, DWORD PTR [edi+258]
+ 001a2 3b c8 cmp ecx, eax
+ 001a4 73 26 jae SHORT $LN26@fill_windo
+
+; 1518 : /* High water mark at or above current data, but below current data
+; 1519 : * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
+; 1520 : * to end of window, whichever is less.
+; 1521 : */
+; 1522 : init = (ulg)curr + WIN_INIT - s->high_water;
+; 1523 : if (init > s->window_size - s->high_water)
+; 1524 : init = s->window_size - s->high_water;
+; 1525 : zmemzero(s->window + s->high_water, (unsigned)init);
+
+ 001a6 8b 46 38 mov eax, DWORD PTR [esi+56]
+ 001a9 2b f9 sub edi, ecx
+ 001ab 2b d9 sub ebx, ecx
+ 001ad 81 c7 02 01 00
+ 00 add edi, 258 ; 00000102H
+ 001b3 3b fb cmp edi, ebx
+ 001b5 0f 47 fb cmova edi, ebx
+ 001b8 03 c1 add eax, ecx
+ 001ba 57 push edi
+ 001bb 6a 00 push 0
+ 001bd 50 push eax
+ 001be e8 00 00 00 00 call _memset
+ 001c3 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1526 : s->high_water += init;
+
+ 001c6 01 be c0 16 00
+ 00 add DWORD PTR [esi+5824], edi
+$LN26@fill_windo:
+ 001cc 5f pop edi
+ 001cd 5e pop esi
+ 001ce 5b pop ebx
+
+; 1527 : }
+; 1528 : }
+; 1529 :
+; 1530 : Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
+; 1531 : "not enough room for search");
+; 1532 : }
+
+ 001cf 8b e5 mov esp, ebp
+ 001d1 5d pop ebp
+ 001d2 c3 ret 0
+_fill_window ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflate_stored
+_TEXT SEGMENT
+_s$ = 8 ; size = 4
+_flush$ = 12 ; size = 4
+_deflate_stored PROC ; COMDAT
+
+; 1567 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 53 push ebx
+ 00004 56 push esi
+
+; 1568 : /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
+; 1569 : * to pending_buf_size, and each stored block has a 5 byte header:
+; 1570 : */
+; 1571 : ulg max_block_size = 0xffff;
+; 1572 : ulg max_start;
+; 1573 :
+; 1574 : if (max_block_size > s->pending_buf_size - 5) {
+
+ 00005 8b 75 08 mov esi, DWORD PTR _s$[ebp]
+ 00008 bb ff ff 00 00 mov ebx, 65535 ; 0000ffffH
+ 0000d 57 push edi
+ 0000e 8b 46 0c mov eax, DWORD PTR [esi+12]
+ 00011 83 c0 fb add eax, -5 ; fffffffbH
+ 00014 3b c3 cmp eax, ebx
+ 00016 0f 42 d8 cmovb ebx, eax
+ 00019 0f 1f 80 00 00
+ 00 00 npad 7
+$LL2@deflate_st:
+
+; 1575 : max_block_size = s->pending_buf_size - 5;
+; 1576 : }
+; 1577 :
+; 1578 : /* Copy as much as possible from input to output: */
+; 1579 : for (;;) {
+; 1580 : /* Fill the window as much as possible: */
+; 1581 : if (s->lookahead <= 1) {
+
+ 00020 8b 46 74 mov eax, DWORD PTR [esi+116]
+ 00023 83 f8 01 cmp eax, 1
+ 00026 77 12 ja SHORT $LN8@deflate_st
+
+; 1582 :
+; 1583 : Assert(s->strstart < s->w_size+MAX_DIST(s) ||
+; 1584 : s->block_start >= (long)s->w_size, "slide too late");
+; 1585 :
+; 1586 : fill_window(s);
+
+ 00028 8b ce mov ecx, esi
+ 0002a e8 00 00 00 00 call _fill_window
+
+; 1587 : if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
+
+ 0002f 8b 46 74 mov eax, DWORD PTR [esi+116]
+ 00032 85 c0 test eax, eax
+ 00034 0f 84 a0 00 00
+ 00 je $LN37@deflate_st
+$LN8@deflate_st:
+
+; 1588 :
+; 1589 : if (s->lookahead == 0) break; /* flush the current block */
+; 1590 : }
+; 1591 : Assert(s->block_start >= 0L, "block gone");
+; 1592 :
+; 1593 : s->strstart += s->lookahead;
+; 1594 : s->lookahead = 0;
+; 1595 :
+; 1596 : /* Emit a stored block if pending_buf will be full: */
+; 1597 : max_start = s->block_start + max_block_size;
+
+ 0003a 8b 7e 5c mov edi, DWORD PTR [esi+92]
+ 0003d 01 46 6c add DWORD PTR [esi+108], eax
+
+; 1598 : if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
+
+ 00040 8b 4e 6c mov ecx, DWORD PTR [esi+108]
+ 00043 c7 46 74 00 00
+ 00 00 mov DWORD PTR [esi+116], 0
+ 0004a 8d 04 1f lea eax, DWORD PTR [edi+ebx]
+ 0004d 74 04 je SHORT $LN10@deflate_st
+ 0004f 3b c8 cmp ecx, eax
+ 00051 72 39 jb SHORT $LN11@deflate_st
+$LN10@deflate_st:
+
+; 1599 : /* strstart == 0 is possible when wraparound on 16-bit machine */
+; 1600 : s->lookahead = (uInt)(s->strstart - max_start);
+
+ 00053 2b c8 sub ecx, eax
+
+; 1601 : s->strstart = (uInt)max_start;
+
+ 00055 89 46 6c mov DWORD PTR [esi+108], eax
+ 00058 89 4e 74 mov DWORD PTR [esi+116], ecx
+
+; 1602 : FLUSH_BLOCK(s, 0);
+
+ 0005b 85 ff test edi, edi
+ 0005d 78 07 js SHORT $LN19@deflate_st
+ 0005f 8b 56 38 mov edx, DWORD PTR [esi+56]
+ 00062 03 d7 add edx, edi
+ 00064 eb 02 jmp SHORT $LN20@deflate_st
+$LN19@deflate_st:
+ 00066 33 d2 xor edx, edx
+$LN20@deflate_st:
+ 00068 2b c7 sub eax, edi
+ 0006a 8b ce mov ecx, esi
+ 0006c 6a 00 push 0
+ 0006e 50 push eax
+ 0006f e8 00 00 00 00 call __tr_flush_block
+ 00074 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 00077 83 c4 08 add esp, 8
+ 0007a 8b 0e mov ecx, DWORD PTR [esi]
+ 0007c 89 46 5c mov DWORD PTR [esi+92], eax
+ 0007f e8 00 00 00 00 call _flush_pending
+ 00084 8b 06 mov eax, DWORD PTR [esi]
+ 00086 83 78 10 00 cmp DWORD PTR [eax+16], 0
+ 0008a 74 47 je SHORT $LN31@deflate_st
+$LN11@deflate_st:
+
+; 1603 : }
+; 1604 : /* Flush if we may have to slide, otherwise block_start may become
+; 1605 : * negative and the data will be gone:
+; 1606 : */
+; 1607 : if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
+
+ 0008c 8b 4e 6c mov ecx, DWORD PTR [esi+108]
+ 0008f 8b 46 2c mov eax, DWORD PTR [esi+44]
+ 00092 8b 7e 5c mov edi, DWORD PTR [esi+92]
+ 00095 2d 06 01 00 00 sub eax, 262 ; 00000106H
+ 0009a 2b cf sub ecx, edi
+ 0009c 3b c8 cmp ecx, eax
+ 0009e 72 80 jb SHORT $LL2@deflate_st
+
+; 1608 : FLUSH_BLOCK(s, 0);
+
+ 000a0 85 ff test edi, edi
+ 000a2 78 07 js SHORT $LN21@deflate_st
+ 000a4 8b 56 38 mov edx, DWORD PTR [esi+56]
+ 000a7 03 d7 add edx, edi
+ 000a9 eb 02 jmp SHORT $LN22@deflate_st
+$LN21@deflate_st:
+ 000ab 33 d2 xor edx, edx
+$LN22@deflate_st:
+ 000ad 6a 00 push 0
+ 000af 51 push ecx
+ 000b0 8b ce mov ecx, esi
+ 000b2 e8 00 00 00 00 call __tr_flush_block
+ 000b7 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 000ba 83 c4 08 add esp, 8
+ 000bd 8b 0e mov ecx, DWORD PTR [esi]
+ 000bf 89 46 5c mov DWORD PTR [esi+92], eax
+ 000c2 e8 00 00 00 00 call _flush_pending
+ 000c7 8b 06 mov eax, DWORD PTR [esi]
+ 000c9 83 78 10 00 cmp DWORD PTR [eax+16], 0
+ 000cd 0f 85 4d ff ff
+ ff jne $LL2@deflate_st
+$LN31@deflate_st:
+ 000d3 5f pop edi
+ 000d4 5e pop esi
+
+; 1602 : FLUSH_BLOCK(s, 0);
+
+ 000d5 33 c0 xor eax, eax
+ 000d7 5b pop ebx
+
+; 1619 : }
+
+ 000d8 5d pop ebp
+ 000d9 c3 ret 0
+$LN37@deflate_st:
+
+; 1587 : if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
+
+ 000da 8b 45 0c mov eax, DWORD PTR _flush$[ebp]
+ 000dd 85 c0 test eax, eax
+ 000df 74 f2 je SHORT $LN31@deflate_st
+
+; 1609 : }
+; 1610 : }
+; 1611 : s->insert = 0;
+
+ 000e1 c7 86 b4 16 00
+ 00 00 00 00 00 mov DWORD PTR [esi+5812], 0
+
+; 1612 : if (flush == Z_FINISH) {
+
+ 000eb 83 f8 04 cmp eax, 4
+ 000ee 75 41 jne SHORT $LN14@deflate_st
+
+; 1613 : FLUSH_BLOCK(s, 1);
+
+ 000f0 8b 4e 5c mov ecx, DWORD PTR [esi+92]
+ 000f3 85 c9 test ecx, ecx
+ 000f5 78 07 js SHORT $LN23@deflate_st
+ 000f7 8b 56 38 mov edx, DWORD PTR [esi+56]
+ 000fa 03 d1 add edx, ecx
+ 000fc eb 02 jmp SHORT $LN24@deflate_st
+$LN23@deflate_st:
+ 000fe 33 d2 xor edx, edx
+$LN24@deflate_st:
+ 00100 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 00103 2b c1 sub eax, ecx
+ 00105 8b ce mov ecx, esi
+ 00107 6a 01 push 1
+ 00109 50 push eax
+ 0010a e8 00 00 00 00 call __tr_flush_block
+ 0010f 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 00112 83 c4 08 add esp, 8
+ 00115 8b 0e mov ecx, DWORD PTR [esi]
+ 00117 89 46 5c mov DWORD PTR [esi+92], eax
+ 0011a e8 00 00 00 00 call _flush_pending
+ 0011f 8b 0e mov ecx, DWORD PTR [esi]
+ 00121 33 c0 xor eax, eax
+ 00123 5f pop edi
+ 00124 5e pop esi
+ 00125 5b pop ebx
+ 00126 39 41 10 cmp DWORD PTR [ecx+16], eax
+ 00129 0f 95 c0 setne al
+ 0012c 83 c0 02 add eax, 2
+
+; 1619 : }
+
+ 0012f 5d pop ebp
+ 00130 c3 ret 0
+$LN14@deflate_st:
+
+; 1614 : return finish_done;
+; 1615 : }
+; 1616 : if ((long)s->strstart > s->block_start)
+
+ 00131 8b 4e 6c mov ecx, DWORD PTR [esi+108]
+ 00134 8b 46 5c mov eax, DWORD PTR [esi+92]
+ 00137 3b c8 cmp ecx, eax
+ 00139 7e 35 jle SHORT $LN17@deflate_st
+
+; 1617 : FLUSH_BLOCK(s, 0);
+
+ 0013b 85 c0 test eax, eax
+ 0013d 78 07 js SHORT $LN25@deflate_st
+ 0013f 8b 56 38 mov edx, DWORD PTR [esi+56]
+ 00142 03 d0 add edx, eax
+ 00144 eb 02 jmp SHORT $LN26@deflate_st
+$LN25@deflate_st:
+ 00146 33 d2 xor edx, edx
+$LN26@deflate_st:
+ 00148 2b c8 sub ecx, eax
+ 0014a 6a 00 push 0
+ 0014c 51 push ecx
+ 0014d 8b ce mov ecx, esi
+ 0014f e8 00 00 00 00 call __tr_flush_block
+ 00154 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 00157 83 c4 08 add esp, 8
+ 0015a 8b 0e mov ecx, DWORD PTR [esi]
+ 0015c 89 46 5c mov DWORD PTR [esi+92], eax
+ 0015f e8 00 00 00 00 call _flush_pending
+ 00164 8b 06 mov eax, DWORD PTR [esi]
+ 00166 83 78 10 00 cmp DWORD PTR [eax+16], 0
+ 0016a 0f 84 63 ff ff
+ ff je $LN31@deflate_st
+$LN17@deflate_st:
+ 00170 5f pop edi
+ 00171 5e pop esi
+
+; 1618 : return block_done;
+
+ 00172 b8 01 00 00 00 mov eax, 1
+ 00177 5b pop ebx
+
+; 1619 : }
+
+ 00178 5d pop ebp
+ 00179 c3 ret 0
+_deflate_stored ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflate_fast
+_TEXT SEGMENT
+_bflush$1$ = 8 ; size = 4
+_s$ = 8 ; size = 4
+_flush$ = 12 ; size = 4
+_deflate_fast PROC ; COMDAT
+
+; 1631 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 53 push ebx
+ 00004 8b 5d 0c mov ebx, DWORD PTR _flush$[ebp]
+ 00007 56 push esi
+ 00008 8b 75 08 mov esi, DWORD PTR _s$[ebp]
+ 0000b 57 push edi
+ 0000c 0f 1f 40 00 npad 4
+$LL2@deflate_fa:
+
+; 1632 : IPos hash_head; /* head of the hash chain */
+; 1633 : int bflush; /* set if current block must be flushed */
+; 1634 :
+; 1635 : for (;;) {
+; 1636 : /* Make sure that we always have enough lookahead, except
+; 1637 : * at the end of the input file. We need MAX_MATCH bytes
+; 1638 : * for the next match, plus MIN_MATCH bytes to insert the
+; 1639 : * string following the next match.
+; 1640 : */
+; 1641 : if (s->lookahead < MIN_LOOKAHEAD) {
+
+ 00010 8b 46 74 mov eax, DWORD PTR [esi+116]
+ 00013 3d 06 01 00 00 cmp eax, 262 ; 00000106H
+ 00018 73 21 jae SHORT $LN10@deflate_fa
+
+; 1642 : fill_window(s);
+
+ 0001a 8b ce mov ecx, esi
+ 0001c e8 00 00 00 00 call _fill_window
+
+; 1643 : if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
+
+ 00021 8b 46 74 mov eax, DWORD PTR [esi+116]
+ 00024 3d 06 01 00 00 cmp eax, 262 ; 00000106H
+ 00029 73 08 jae SHORT $LN9@deflate_fa
+ 0002b 85 db test ebx, ebx
+ 0002d 0f 84 30 02 00
+ 00 je $LN39@deflate_fa
+$LN9@deflate_fa:
+
+; 1644 : return need_more;
+; 1645 : }
+; 1646 : if (s->lookahead == 0) break; /* flush the current block */
+
+ 00033 85 c0 test eax, eax
+ 00035 0f 84 2f 02 00
+ 00 je $LN38@deflate_fa
+$LN10@deflate_fa:
+
+; 1647 : }
+; 1648 :
+; 1649 : /* Insert the string window[strstart .. strstart+2] in the
+; 1650 : * dictionary, and set hash_head to the head of the hash chain:
+; 1651 : */
+; 1652 : hash_head = NIL;
+; 1653 : if (s->lookahead >= MIN_MATCH) {
+
+ 0003b 83 f8 03 cmp eax, 3
+ 0003e 72 6a jb SHORT $LN12@deflate_fa
+
+; 1654 : INSERT_STRING(s, s->strstart, hash_head);
+
+ 00040 8b 7e 6c mov edi, DWORD PTR [esi+108]
+ 00043 8b 46 38 mov eax, DWORD PTR [esi+56]
+ 00046 8b 5e 48 mov ebx, DWORD PTR [esi+72]
+ 00049 8b 4e 58 mov ecx, DWORD PTR [esi+88]
+ 0004c 8b 56 34 mov edx, DWORD PTR [esi+52]
+ 0004f 0f b6 44 38 02 movzx eax, BYTE PTR [eax+edi+2]
+ 00054 23 d7 and edx, edi
+ 00056 d3 e3 shl ebx, cl
+ 00058 8b 4e 40 mov ecx, DWORD PTR [esi+64]
+ 0005b 33 d8 xor ebx, eax
+ 0005d 23 5e 54 and ebx, DWORD PTR [esi+84]
+ 00060 8b 46 44 mov eax, DWORD PTR [esi+68]
+ 00063 89 5e 48 mov DWORD PTR [esi+72], ebx
+ 00066 0f b7 04 58 movzx eax, WORD PTR [eax+ebx*2]
+ 0006a 66 89 04 51 mov WORD PTR [ecx+edx*2], ax
+ 0006e 8b 4e 6c mov ecx, DWORD PTR [esi+108]
+ 00071 23 4e 34 and ecx, DWORD PTR [esi+52]
+ 00074 8b 46 40 mov eax, DWORD PTR [esi+64]
+ 00077 8b 56 48 mov edx, DWORD PTR [esi+72]
+ 0007a 0f b7 3c 48 movzx edi, WORD PTR [eax+ecx*2]
+ 0007e 8b 4e 44 mov ecx, DWORD PTR [esi+68]
+ 00081 0f b7 46 6c movzx eax, WORD PTR [esi+108]
+ 00085 66 89 04 51 mov WORD PTR [ecx+edx*2], ax
+
+; 1655 : }
+; 1656 :
+; 1657 : /* Find the longest match, discarding those <= prev_length.
+; 1658 : * At this point we have always match_length < MIN_MATCH
+; 1659 : */
+; 1660 : if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
+
+ 00089 85 ff test edi, edi
+ 0008b 74 1d je SHORT $LN12@deflate_fa
+ 0008d 8b 4e 6c mov ecx, DWORD PTR [esi+108]
+ 00090 8b 46 2c mov eax, DWORD PTR [esi+44]
+ 00093 2b cf sub ecx, edi
+ 00095 2d 06 01 00 00 sub eax, 262 ; 00000106H
+ 0009a 3b c8 cmp ecx, eax
+ 0009c 77 0c ja SHORT $LN12@deflate_fa
+
+; 1661 : /* To simplify the code, we prevent matches with the string
+; 1662 : * of window index 0 (in particular we have to avoid a match
+; 1663 : * of the string with itself at the start of the input file).
+; 1664 : */
+; 1665 : s->match_length = longest_match (s, hash_head);
+
+ 0009e 8b d7 mov edx, edi
+ 000a0 8b ce mov ecx, esi
+ 000a2 e8 00 00 00 00 call _longest_match
+ 000a7 89 46 60 mov DWORD PTR [esi+96], eax
+$LN12@deflate_fa:
+
+; 1666 : /* longest_match() sets match_start */
+; 1667 : }
+; 1668 : if (s->match_length >= MIN_MATCH) {
+
+ 000aa 83 7e 60 03 cmp DWORD PTR [esi+96], 3
+ 000ae 0f 82 16 01 00
+ 00 jb $LN13@deflate_fa
+
+; 1669 : check_match(s, s->strstart, s->match_start, s->match_length);
+; 1670 :
+; 1671 : _tr_tally_dist(s, s->strstart - s->match_start,
+
+ 000b4 66 8b 46 6c mov ax, WORD PTR [esi+108]
+ 000b8 66 2b 46 70 sub ax, WORD PTR [esi+112]
+ 000bc 8b 8e a0 16 00
+ 00 mov ecx, DWORD PTR [esi+5792]
+ 000c2 8a 56 60 mov dl, BYTE PTR [esi+96]
+ 000c5 0f b7 f8 movzx edi, ax
+ 000c8 80 ea 03 sub dl, 3
+ 000cb 8b 86 a4 16 00
+ 00 mov eax, DWORD PTR [esi+5796]
+ 000d1 66 89 3c 48 mov WORD PTR [eax+ecx*2], di
+ 000d5 81 c7 ff ff 00
+ 00 add edi, 65535 ; 0000ffffH
+ 000db 8b 86 a0 16 00
+ 00 mov eax, DWORD PTR [esi+5792]
+ 000e1 8b 8e 98 16 00
+ 00 mov ecx, DWORD PTR [esi+5784]
+ 000e7 88 14 01 mov BYTE PTR [ecx+eax], dl
+ 000ea ff 86 a0 16 00
+ 00 inc DWORD PTR [esi+5792]
+ 000f0 0f b6 c2 movzx eax, dl
+ 000f3 0f b6 80 00 00
+ 00 00 movzx eax, BYTE PTR __length_code[eax]
+ 000fa 66 ff 84 86 98
+ 04 00 00 inc WORD PTR [esi+eax*4+1176]
+ 00102 b8 00 01 00 00 mov eax, 256 ; 00000100H
+ 00107 66 3b f8 cmp di, ax
+ 0010a 0f b7 c7 movzx eax, di
+ 0010d 73 09 jae SHORT $LN24@deflate_fa
+ 0010f 0f b6 80 00 00
+ 00 00 movzx eax, BYTE PTR __dist_code[eax]
+ 00116 eb 0a jmp SHORT $LN25@deflate_fa
+$LN24@deflate_fa:
+ 00118 c1 e8 07 shr eax, 7
+ 0011b 0f b6 80 00 01
+ 00 00 movzx eax, BYTE PTR __dist_code[eax+256]
+$LN25@deflate_fa:
+ 00122 66 ff 84 86 88
+ 09 00 00 inc WORD PTR [esi+eax*4+2440]
+ 0012a 33 db xor ebx, ebx
+ 0012c 8b 86 9c 16 00
+ 00 mov eax, DWORD PTR [esi+5788]
+ 00132 48 dec eax
+ 00133 39 86 a0 16 00
+ 00 cmp DWORD PTR [esi+5792], eax
+
+; 1672 : s->match_length - MIN_MATCH, bflush);
+; 1673 :
+; 1674 : s->lookahead -= s->match_length;
+
+ 00139 8b 46 60 mov eax, DWORD PTR [esi+96]
+ 0013c 0f 94 c3 sete bl
+ 0013f 29 46 74 sub DWORD PTR [esi+116], eax
+ 00142 89 5d 08 mov DWORD PTR _bflush$1$[ebp], ebx
+
+; 1675 :
+; 1676 : /* Insert new strings in the hash table only if the match length
+; 1677 : * is not too large. This saves time but degrades compression.
+; 1678 : */
+; 1679 : #ifndef FASTEST
+; 1680 : if (s->match_length <= s->max_insert_length &&
+
+ 00145 3b 86 80 00 00
+ 00 cmp eax, DWORD PTR [esi+128]
+ 0014b 77 54 ja SHORT $LN15@deflate_fa
+ 0014d 83 7e 74 03 cmp DWORD PTR [esi+116], 3
+ 00151 72 4e jb SHORT $LN15@deflate_fa
+
+; 1681 : s->lookahead >= MIN_MATCH) {
+; 1682 : s->match_length--; /* string at strstart already in table */
+
+ 00153 48 dec eax
+ 00154 89 46 60 mov DWORD PTR [esi+96], eax
+$LL7@deflate_fa:
+
+; 1683 : do {
+; 1684 : s->strstart++;
+
+ 00157 ff 46 6c inc DWORD PTR [esi+108]
+ 0015a 8b 7e 6c mov edi, DWORD PTR [esi+108]
+
+; 1685 : INSERT_STRING(s, s->strstart, hash_head);
+
+ 0015d 8b 46 38 mov eax, DWORD PTR [esi+56]
+ 00160 8b 4e 58 mov ecx, DWORD PTR [esi+88]
+ 00163 8b 56 34 mov edx, DWORD PTR [esi+52]
+ 00166 23 d7 and edx, edi
+ 00168 0f b6 5c 07 02 movzx ebx, BYTE PTR [edi+eax+2]
+ 0016d 8b 46 48 mov eax, DWORD PTR [esi+72]
+ 00170 d3 e0 shl eax, cl
+ 00172 8b 4e 40 mov ecx, DWORD PTR [esi+64]
+ 00175 33 d8 xor ebx, eax
+ 00177 23 5e 54 and ebx, DWORD PTR [esi+84]
+ 0017a 8b 46 44 mov eax, DWORD PTR [esi+68]
+ 0017d 89 5e 48 mov DWORD PTR [esi+72], ebx
+ 00180 0f b7 04 58 movzx eax, WORD PTR [eax+ebx*2]
+ 00184 66 89 04 51 mov WORD PTR [ecx+edx*2], ax
+ 00188 8b 56 48 mov edx, DWORD PTR [esi+72]
+ 0018b 8b 4e 44 mov ecx, DWORD PTR [esi+68]
+ 0018e 0f b7 46 6c movzx eax, WORD PTR [esi+108]
+ 00192 66 89 04 51 mov WORD PTR [ecx+edx*2], ax
+
+; 1686 : /* strstart never exceeds WSIZE-MAX_MATCH, so there are
+; 1687 : * always MIN_MATCH bytes ahead.
+; 1688 : */
+; 1689 : } while (--s->match_length != 0);
+
+ 00196 83 46 60 ff add DWORD PTR [esi+96], -1
+ 0019a 75 bb jne SHORT $LL7@deflate_fa
+
+; 1690 : s->strstart++;
+; 1691 : } else
+
+ 0019c 8b 5d 08 mov ebx, DWORD PTR _bflush$1$[ebp]
+ 0019f eb 79 jmp SHORT $LN44@deflate_fa
+$LN15@deflate_fa:
+
+; 1692 : #endif
+; 1693 : {
+; 1694 : s->strstart += s->match_length;
+
+ 001a1 01 46 6c add DWORD PTR [esi+108], eax
+
+; 1695 : s->match_length = 0;
+; 1696 : s->ins_h = s->window[s->strstart];
+
+ 001a4 8b 46 38 mov eax, DWORD PTR [esi+56]
+ 001a7 03 46 6c add eax, DWORD PTR [esi+108]
+
+; 1697 : UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
+
+ 001aa 8b 4e 58 mov ecx, DWORD PTR [esi+88]
+ 001ad c7 46 60 00 00
+ 00 00 mov DWORD PTR [esi+96], 0
+ 001b4 0f b6 10 movzx edx, BYTE PTR [eax]
+ 001b7 89 56 48 mov DWORD PTR [esi+72], edx
+ 001ba 0f b6 40 01 movzx eax, BYTE PTR [eax+1]
+ 001be d3 e2 shl edx, cl
+ 001c0 33 d0 xor edx, eax
+ 001c2 23 56 54 and edx, DWORD PTR [esi+84]
+ 001c5 89 56 48 mov DWORD PTR [esi+72], edx
+
+; 1698 : #if MIN_MATCH != 3
+; 1699 : Call UPDATE_HASH() MIN_MATCH-3 more times
+; 1700 : #endif
+; 1701 : /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
+; 1702 : * matter since it will be recomputed at next deflate call.
+; 1703 : */
+; 1704 : }
+; 1705 : } else {
+
+ 001c8 eb 53 jmp SHORT $LN14@deflate_fa
+$LN13@deflate_fa:
+
+; 1706 : /* No match, output a literal byte */
+; 1707 : Tracevv((stderr,"%c", s->window[s->strstart]));
+; 1708 : _tr_tally_lit (s, s->window[s->strstart], bflush);
+
+ 001ca 8b 4e 6c mov ecx, DWORD PTR [esi+108]
+ 001cd 33 ff xor edi, edi
+ 001cf 8b 46 38 mov eax, DWORD PTR [esi+56]
+ 001d2 33 db xor ebx, ebx
+ 001d4 8a 14 01 mov dl, BYTE PTR [ecx+eax]
+ 001d7 8b 8e a0 16 00
+ 00 mov ecx, DWORD PTR [esi+5792]
+ 001dd 8b 86 a4 16 00
+ 00 mov eax, DWORD PTR [esi+5796]
+ 001e3 66 89 3c 48 mov WORD PTR [eax+ecx*2], di
+ 001e7 8b 86 a0 16 00
+ 00 mov eax, DWORD PTR [esi+5792]
+ 001ed 8b 8e 98 16 00
+ 00 mov ecx, DWORD PTR [esi+5784]
+ 001f3 88 14 01 mov BYTE PTR [ecx+eax], dl
+ 001f6 ff 86 a0 16 00
+ 00 inc DWORD PTR [esi+5792]
+ 001fc 0f b6 c2 movzx eax, dl
+ 001ff 66 ff 84 86 94
+ 00 00 00 inc WORD PTR [esi+eax*4+148]
+ 00207 8b 86 9c 16 00
+ 00 mov eax, DWORD PTR [esi+5788]
+ 0020d 48 dec eax
+ 0020e 39 86 a0 16 00
+ 00 cmp DWORD PTR [esi+5792], eax
+ 00214 0f 94 c3 sete bl
+
+; 1709 : s->lookahead--;
+
+ 00217 ff 4e 74 dec DWORD PTR [esi+116]
+$LN44@deflate_fa:
+
+; 1710 : s->strstart++;
+
+ 0021a ff 46 6c inc DWORD PTR [esi+108]
+$LN14@deflate_fa:
+
+; 1711 : }
+; 1712 : if (bflush) FLUSH_BLOCK(s, 0);
+
+ 0021d 85 db test ebx, ebx
+ 0021f 8b 5d 0c mov ebx, DWORD PTR _flush$[ebp]
+ 00222 0f 84 e8 fd ff
+ ff je $LL2@deflate_fa
+ 00228 8b 4e 5c mov ecx, DWORD PTR [esi+92]
+ 0022b 85 c9 test ecx, ecx
+ 0022d 78 07 js SHORT $LN26@deflate_fa
+ 0022f 8b 56 38 mov edx, DWORD PTR [esi+56]
+ 00232 03 d1 add edx, ecx
+ 00234 eb 02 jmp SHORT $LN27@deflate_fa
+$LN26@deflate_fa:
+ 00236 33 d2 xor edx, edx
+$LN27@deflate_fa:
+ 00238 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 0023b 2b c1 sub eax, ecx
+ 0023d 8b ce mov ecx, esi
+ 0023f 6a 00 push 0
+ 00241 50 push eax
+ 00242 e8 00 00 00 00 call __tr_flush_block
+ 00247 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 0024a 83 c4 08 add esp, 8
+ 0024d 8b 0e mov ecx, DWORD PTR [esi]
+ 0024f 89 46 5c mov DWORD PTR [esi+92], eax
+ 00252 e8 00 00 00 00 call _flush_pending
+ 00257 8b 06 mov eax, DWORD PTR [esi]
+ 00259 83 78 10 00 cmp DWORD PTR [eax+16], 0
+ 0025d 0f 85 ad fd ff
+ ff jne $LL2@deflate_fa
+$LN39@deflate_fa:
+ 00263 5f pop edi
+ 00264 5e pop esi
+ 00265 33 c0 xor eax, eax
+ 00267 5b pop ebx
+
+; 1722 : }
+
+ 00268 5d pop ebp
+ 00269 c3 ret 0
+$LN38@deflate_fa:
+
+; 1713 : }
+; 1714 : s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
+
+ 0026a 8b 4e 6c mov ecx, DWORD PTR [esi+108]
+ 0026d b8 02 00 00 00 mov eax, 2
+ 00272 3b c8 cmp ecx, eax
+ 00274 0f 42 c1 cmovb eax, ecx
+ 00277 89 86 b4 16 00
+ 00 mov DWORD PTR [esi+5812], eax
+
+; 1715 : if (flush == Z_FINISH) {
+
+ 0027d 83 fb 04 cmp ebx, 4
+ 00280 75 3e jne SHORT $LN19@deflate_fa
+
+; 1716 : FLUSH_BLOCK(s, 1);
+
+ 00282 8b 46 5c mov eax, DWORD PTR [esi+92]
+ 00285 85 c0 test eax, eax
+ 00287 78 07 js SHORT $LN30@deflate_fa
+ 00289 8b 56 38 mov edx, DWORD PTR [esi+56]
+ 0028c 03 d0 add edx, eax
+ 0028e eb 02 jmp SHORT $LN31@deflate_fa
+$LN30@deflate_fa:
+ 00290 33 d2 xor edx, edx
+$LN31@deflate_fa:
+ 00292 2b c8 sub ecx, eax
+ 00294 6a 01 push 1
+ 00296 51 push ecx
+ 00297 8b ce mov ecx, esi
+ 00299 e8 00 00 00 00 call __tr_flush_block
+ 0029e 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 002a1 83 c4 08 add esp, 8
+ 002a4 8b 0e mov ecx, DWORD PTR [esi]
+ 002a6 89 46 5c mov DWORD PTR [esi+92], eax
+ 002a9 e8 00 00 00 00 call _flush_pending
+ 002ae 8b 0e mov ecx, DWORD PTR [esi]
+ 002b0 33 c0 xor eax, eax
+ 002b2 5f pop edi
+ 002b3 5e pop esi
+ 002b4 5b pop ebx
+ 002b5 39 41 10 cmp DWORD PTR [ecx+16], eax
+ 002b8 0f 95 c0 setne al
+ 002bb 83 c0 02 add eax, 2
+
+; 1722 : }
+
+ 002be 5d pop ebp
+ 002bf c3 ret 0
+$LN19@deflate_fa:
+
+; 1717 : return finish_done;
+; 1718 : }
+; 1719 : if (s->last_lit)
+
+ 002c0 83 be a0 16 00
+ 00 00 cmp DWORD PTR [esi+5792], 0
+ 002c7 74 38 je SHORT $LN22@deflate_fa
+
+; 1720 : FLUSH_BLOCK(s, 0);
+
+ 002c9 8b 46 5c mov eax, DWORD PTR [esi+92]
+ 002cc 85 c0 test eax, eax
+ 002ce 78 07 js SHORT $LN32@deflate_fa
+ 002d0 8b 56 38 mov edx, DWORD PTR [esi+56]
+ 002d3 03 d0 add edx, eax
+ 002d5 eb 02 jmp SHORT $LN33@deflate_fa
+$LN32@deflate_fa:
+ 002d7 33 d2 xor edx, edx
+$LN33@deflate_fa:
+ 002d9 2b c8 sub ecx, eax
+ 002db 6a 00 push 0
+ 002dd 51 push ecx
+ 002de 8b ce mov ecx, esi
+ 002e0 e8 00 00 00 00 call __tr_flush_block
+ 002e5 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 002e8 83 c4 08 add esp, 8
+ 002eb 8b 0e mov ecx, DWORD PTR [esi]
+ 002ed 89 46 5c mov DWORD PTR [esi+92], eax
+ 002f0 e8 00 00 00 00 call _flush_pending
+ 002f5 8b 06 mov eax, DWORD PTR [esi]
+ 002f7 83 78 10 00 cmp DWORD PTR [eax+16], 0
+ 002fb 0f 84 62 ff ff
+ ff je $LN39@deflate_fa
+$LN22@deflate_fa:
+ 00301 5f pop edi
+ 00302 5e pop esi
+
+; 1721 : return block_done;
+
+ 00303 b8 01 00 00 00 mov eax, 1
+ 00308 5b pop ebx
+
+; 1722 : }
+
+ 00309 5d pop ebp
+ 0030a c3 ret 0
+_deflate_fast ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflate_slow
+_TEXT SEGMENT
+_bflush$1$ = -4 ; size = 4
+_max_insert$1$ = 8 ; size = 4
+_s$ = 8 ; size = 4
+_flush$ = 12 ; size = 4
+_deflate_slow PROC ; COMDAT
+
+; 1733 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 53 push ebx
+ 00005 8b 5d 0c mov ebx, DWORD PTR _flush$[ebp]
+ 00008 56 push esi
+ 00009 8b 75 08 mov esi, DWORD PTR _s$[ebp]
+ 0000c 57 push edi
+ 0000d 0f 1f 00 npad 3
+$LL2@deflate_sl:
+
+; 1734 : IPos hash_head; /* head of hash chain */
+; 1735 : int bflush; /* set if current block must be flushed */
+; 1736 :
+; 1737 : /* Process the input block. */
+; 1738 : for (;;) {
+; 1739 : /* Make sure that we always have enough lookahead, except
+; 1740 : * at the end of the input file. We need MAX_MATCH bytes
+; 1741 : * for the next match, plus MIN_MATCH bytes to insert the
+; 1742 : * string following the next match.
+; 1743 : */
+; 1744 : if (s->lookahead < MIN_LOOKAHEAD) {
+
+ 00010 8b 46 74 mov eax, DWORD PTR [esi+116]
+ 00013 3d 06 01 00 00 cmp eax, 262 ; 00000106H
+ 00018 73 21 jae SHORT $LN10@deflate_sl
+
+; 1745 : fill_window(s);
+
+ 0001a 8b ce mov ecx, esi
+ 0001c e8 00 00 00 00 call _fill_window
+
+; 1746 : if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
+
+ 00021 8b 46 74 mov eax, DWORD PTR [esi+116]
+ 00024 3d 06 01 00 00 cmp eax, 262 ; 00000106H
+ 00029 73 08 jae SHORT $LN9@deflate_sl
+ 0002b 85 db test ebx, ebx
+ 0002d 0f 84 28 02 00
+ 00 je $LN48@deflate_sl
+$LN9@deflate_sl:
+
+; 1747 : return need_more;
+; 1748 : }
+; 1749 : if (s->lookahead == 0) break; /* flush the current block */
+
+ 00033 85 c0 test eax, eax
+ 00035 0f 84 d9 02 00
+ 00 je $LN46@deflate_sl
+$LN10@deflate_sl:
+
+; 1750 : }
+; 1751 :
+; 1752 : /* Insert the string window[strstart .. strstart+2] in the
+; 1753 : * dictionary, and set hash_head to the head of the hash chain:
+; 1754 : */
+; 1755 : hash_head = NIL;
+
+ 0003b 33 ff xor edi, edi
+
+; 1756 : if (s->lookahead >= MIN_MATCH) {
+
+ 0003d 83 f8 03 cmp eax, 3
+ 00040 72 4c jb SHORT $LN11@deflate_sl
+
+; 1757 : INSERT_STRING(s, s->strstart, hash_head);
+
+ 00042 8b 7e 6c mov edi, DWORD PTR [esi+108]
+ 00045 8b 46 38 mov eax, DWORD PTR [esi+56]
+ 00048 8b 5e 48 mov ebx, DWORD PTR [esi+72]
+ 0004b 8b 4e 58 mov ecx, DWORD PTR [esi+88]
+ 0004e 8b 56 34 mov edx, DWORD PTR [esi+52]
+ 00051 0f b6 44 38 02 movzx eax, BYTE PTR [eax+edi+2]
+ 00056 23 d7 and edx, edi
+ 00058 d3 e3 shl ebx, cl
+ 0005a 8b 4e 40 mov ecx, DWORD PTR [esi+64]
+ 0005d 33 d8 xor ebx, eax
+ 0005f 23 5e 54 and ebx, DWORD PTR [esi+84]
+ 00062 8b 46 44 mov eax, DWORD PTR [esi+68]
+ 00065 89 5e 48 mov DWORD PTR [esi+72], ebx
+ 00068 0f b7 04 58 movzx eax, WORD PTR [eax+ebx*2]
+ 0006c 8b 5d 0c mov ebx, DWORD PTR _flush$[ebp]
+ 0006f 66 89 04 51 mov WORD PTR [ecx+edx*2], ax
+ 00073 8b 4e 6c mov ecx, DWORD PTR [esi+108]
+ 00076 23 4e 34 and ecx, DWORD PTR [esi+52]
+ 00079 8b 46 40 mov eax, DWORD PTR [esi+64]
+ 0007c 8b 56 48 mov edx, DWORD PTR [esi+72]
+ 0007f 0f b7 3c 48 movzx edi, WORD PTR [eax+ecx*2]
+ 00083 8b 4e 44 mov ecx, DWORD PTR [esi+68]
+ 00086 0f b7 46 6c movzx eax, WORD PTR [esi+108]
+ 0008a 66 89 04 51 mov WORD PTR [ecx+edx*2], ax
+$LN11@deflate_sl:
+
+; 1758 : }
+; 1759 :
+; 1760 : /* Find the longest match, discarding those <= prev_length.
+; 1761 : */
+; 1762 : s->prev_length = s->match_length, s->prev_match = s->match_start;
+
+ 0008e 8b 46 60 mov eax, DWORD PTR [esi+96]
+ 00091 89 46 78 mov DWORD PTR [esi+120], eax
+ 00094 8b 46 70 mov eax, DWORD PTR [esi+112]
+ 00097 89 46 64 mov DWORD PTR [esi+100], eax
+
+; 1763 : s->match_length = MIN_MATCH-1;
+
+ 0009a c7 46 60 02 00
+ 00 00 mov DWORD PTR [esi+96], 2
+
+; 1764 :
+; 1765 : if (hash_head != NIL && s->prev_length < s->max_lazy_match &&
+
+ 000a1 85 ff test edi, edi
+ 000a3 74 4f je SHORT $LN13@deflate_sl
+ 000a5 8b 46 78 mov eax, DWORD PTR [esi+120]
+ 000a8 3b 86 80 00 00
+ 00 cmp eax, DWORD PTR [esi+128]
+ 000ae 73 44 jae SHORT $LN13@deflate_sl
+ 000b0 8b 4e 6c mov ecx, DWORD PTR [esi+108]
+ 000b3 8b 46 2c mov eax, DWORD PTR [esi+44]
+ 000b6 2b cf sub ecx, edi
+ 000b8 2d 06 01 00 00 sub eax, 262 ; 00000106H
+ 000bd 3b c8 cmp ecx, eax
+ 000bf 77 33 ja SHORT $LN13@deflate_sl
+
+; 1766 : s->strstart - hash_head <= MAX_DIST(s)) {
+; 1767 : /* To simplify the code, we prevent matches with the string
+; 1768 : * of window index 0 (in particular we have to avoid a match
+; 1769 : * of the string with itself at the start of the input file).
+; 1770 : */
+; 1771 : s->match_length = longest_match (s, hash_head);
+
+ 000c1 8b d7 mov edx, edi
+ 000c3 8b ce mov ecx, esi
+ 000c5 e8 00 00 00 00 call _longest_match
+ 000ca 89 46 60 mov DWORD PTR [esi+96], eax
+
+; 1772 : /* longest_match() sets match_start */
+; 1773 :
+; 1774 : if (s->match_length <= 5 && (s->strategy == Z_FILTERED
+
+ 000cd 83 f8 05 cmp eax, 5
+ 000d0 77 22 ja SHORT $LN13@deflate_sl
+ 000d2 83 be 88 00 00
+ 00 01 cmp DWORD PTR [esi+136], 1
+ 000d9 74 12 je SHORT $LN14@deflate_sl
+ 000db 83 f8 03 cmp eax, 3
+ 000de 75 14 jne SHORT $LN13@deflate_sl
+ 000e0 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 000e3 2b 46 70 sub eax, DWORD PTR [esi+112]
+ 000e6 3d 00 10 00 00 cmp eax, 4096 ; 00001000H
+ 000eb 76 07 jbe SHORT $LN13@deflate_sl
+$LN14@deflate_sl:
+
+; 1775 : #if TOO_FAR <= 32767
+; 1776 : || (s->match_length == MIN_MATCH &&
+; 1777 : s->strstart - s->match_start > TOO_FAR)
+; 1778 : #endif
+; 1779 : )) {
+; 1780 :
+; 1781 : /* If prev_match is also MIN_MATCH, match_start is garbage
+; 1782 : * but we will ignore the current match anyway.
+; 1783 : */
+; 1784 : s->match_length = MIN_MATCH-1;
+
+ 000ed c7 46 60 02 00
+ 00 00 mov DWORD PTR [esi+96], 2
+$LN13@deflate_sl:
+
+; 1785 : }
+; 1786 : }
+; 1787 : /* If there was a match at the previous step and the current
+; 1788 : * match is not better, output the previous match:
+; 1789 : */
+; 1790 : if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {
+
+ 000f4 8b 46 78 mov eax, DWORD PTR [esi+120]
+ 000f7 83 f8 03 cmp eax, 3
+ 000fa 0f 82 64 01 00
+ 00 jb $LN15@deflate_sl
+ 00100 39 46 60 cmp DWORD PTR [esi+96], eax
+ 00103 0f 87 5b 01 00
+ 00 ja $LN15@deflate_sl
+
+; 1791 : uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
+
+ 00109 8b 4e 6c mov ecx, DWORD PTR [esi+108]
+
+; 1792 : /* Do not insert strings in hash table beyond this. */
+; 1793 :
+; 1794 : check_match(s, s->strstart-1, s->prev_match, s->prev_length);
+; 1795 :
+; 1796 : _tr_tally_dist(s, s->strstart -1 - s->prev_match,
+
+ 0010c 8a d0 mov dl, al
+ 0010e 66 8b 46 6c mov ax, WORD PTR [esi+108]
+ 00112 83 c1 fd add ecx, -3 ; fffffffdH
+ 00115 66 2b 46 64 sub ax, WORD PTR [esi+100]
+ 00119 80 ea 03 sub dl, 3
+ 0011c 8b 7e 74 mov edi, DWORD PTR [esi+116]
+ 0011f 66 48 dec ax
+ 00121 0f b7 d8 movzx ebx, ax
+ 00124 03 f9 add edi, ecx
+ 00126 8b 8e a0 16 00
+ 00 mov ecx, DWORD PTR [esi+5792]
+ 0012c 8b 86 a4 16 00
+ 00 mov eax, DWORD PTR [esi+5796]
+ 00132 89 7d 08 mov DWORD PTR _max_insert$1$[ebp], edi
+ 00135 66 89 1c 48 mov WORD PTR [eax+ecx*2], bx
+ 00139 81 c3 ff ff 00
+ 00 add ebx, 65535 ; 0000ffffH
+ 0013f 8b 86 a0 16 00
+ 00 mov eax, DWORD PTR [esi+5792]
+ 00145 8b 8e 98 16 00
+ 00 mov ecx, DWORD PTR [esi+5784]
+ 0014b 88 14 01 mov BYTE PTR [ecx+eax], dl
+ 0014e ff 86 a0 16 00
+ 00 inc DWORD PTR [esi+5792]
+ 00154 0f b6 c2 movzx eax, dl
+ 00157 0f b6 80 00 00
+ 00 00 movzx eax, BYTE PTR __length_code[eax]
+ 0015e 66 ff 84 86 98
+ 04 00 00 inc WORD PTR [esi+eax*4+1176]
+ 00166 b8 00 01 00 00 mov eax, 256 ; 00000100H
+ 0016b 66 3b d8 cmp bx, ax
+ 0016e 0f b7 c3 movzx eax, bx
+ 00171 73 09 jae SHORT $LN30@deflate_sl
+ 00173 0f b6 80 00 00
+ 00 00 movzx eax, BYTE PTR __dist_code[eax]
+ 0017a eb 0a jmp SHORT $LN31@deflate_sl
+$LN30@deflate_sl:
+ 0017c c1 e8 07 shr eax, 7
+ 0017f 0f b6 80 00 01
+ 00 00 movzx eax, BYTE PTR __dist_code[eax+256]
+$LN31@deflate_sl:
+ 00186 66 ff 84 86 88
+ 09 00 00 inc WORD PTR [esi+eax*4+2440]
+ 0018e 33 c9 xor ecx, ecx
+ 00190 8b 86 9c 16 00
+ 00 mov eax, DWORD PTR [esi+5788]
+ 00196 48 dec eax
+ 00197 39 86 a0 16 00
+ 00 cmp DWORD PTR [esi+5792], eax
+
+; 1797 : s->prev_length - MIN_MATCH, bflush);
+; 1798 :
+; 1799 : /* Insert in hash table all strings up to the end of the match.
+; 1800 : * strstart-1 and strstart are already inserted. If there is not
+; 1801 : * enough lookahead, the last two strings are not inserted in
+; 1802 : * the hash table.
+; 1803 : */
+; 1804 : s->lookahead -= s->prev_length-1;
+
+ 0019d b8 01 00 00 00 mov eax, 1
+ 001a2 0f 94 c1 sete cl
+ 001a5 89 4d fc mov DWORD PTR _bflush$1$[ebp], ecx
+ 001a8 8b 4e 78 mov ecx, DWORD PTR [esi+120]
+ 001ab 2b c1 sub eax, ecx
+ 001ad 01 46 74 add DWORD PTR [esi+116], eax
+
+; 1805 : s->prev_length -= 2;
+
+ 001b0 8d 41 fe lea eax, DWORD PTR [ecx-2]
+ 001b3 89 46 78 mov DWORD PTR [esi+120], eax
+$LL7@deflate_sl:
+
+; 1806 : do {
+; 1807 : if (++s->strstart <= max_insert) {
+
+ 001b6 ff 46 6c inc DWORD PTR [esi+108]
+ 001b9 8b 5e 6c mov ebx, DWORD PTR [esi+108]
+ 001bc 3b df cmp ebx, edi
+ 001be 77 3c ja SHORT $LN5@deflate_sl
+
+; 1808 : INSERT_STRING(s, s->strstart, hash_head);
+
+ 001c0 8b 46 38 mov eax, DWORD PTR [esi+56]
+ 001c3 8b 7e 48 mov edi, DWORD PTR [esi+72]
+ 001c6 8b 4e 58 mov ecx, DWORD PTR [esi+88]
+ 001c9 8b 56 34 mov edx, DWORD PTR [esi+52]
+ 001cc 0f b6 44 18 02 movzx eax, BYTE PTR [eax+ebx+2]
+ 001d1 d3 e7 shl edi, cl
+ 001d3 8b 4e 40 mov ecx, DWORD PTR [esi+64]
+ 001d6 33 f8 xor edi, eax
+ 001d8 23 7e 54 and edi, DWORD PTR [esi+84]
+ 001db 23 d3 and edx, ebx
+ 001dd 8b 46 44 mov eax, DWORD PTR [esi+68]
+ 001e0 89 7e 48 mov DWORD PTR [esi+72], edi
+ 001e3 0f b7 04 78 movzx eax, WORD PTR [eax+edi*2]
+ 001e7 8b 7d 08 mov edi, DWORD PTR _max_insert$1$[ebp]
+ 001ea 66 89 04 51 mov WORD PTR [ecx+edx*2], ax
+ 001ee 8b 56 48 mov edx, DWORD PTR [esi+72]
+ 001f1 8b 4e 44 mov ecx, DWORD PTR [esi+68]
+ 001f4 0f b7 46 6c movzx eax, WORD PTR [esi+108]
+ 001f8 66 89 04 51 mov WORD PTR [ecx+edx*2], ax
+$LN5@deflate_sl:
+
+; 1809 : }
+; 1810 : } while (--s->prev_length != 0);
+
+ 001fc 83 46 78 ff add DWORD PTR [esi+120], -1
+ 00200 75 b4 jne SHORT $LL7@deflate_sl
+
+; 1811 : s->match_available = 0;
+; 1812 : s->match_length = MIN_MATCH-1;
+; 1813 : s->strstart++;
+
+ 00202 ff 46 6c inc DWORD PTR [esi+108]
+
+; 1814 :
+; 1815 : if (bflush) FLUSH_BLOCK(s, 0);
+
+ 00205 83 7d fc 00 cmp DWORD PTR _bflush$1$[ebp], 0
+ 00209 8b 4e 6c mov ecx, DWORD PTR [esi+108]
+ 0020c 8b 5d 0c mov ebx, DWORD PTR _flush$[ebp]
+ 0020f c7 46 68 00 00
+ 00 00 mov DWORD PTR [esi+104], 0
+ 00216 c7 46 60 02 00
+ 00 00 mov DWORD PTR [esi+96], 2
+ 0021d 0f 84 ed fd ff
+ ff je $LL2@deflate_sl
+ 00223 8b 46 5c mov eax, DWORD PTR [esi+92]
+ 00226 85 c0 test eax, eax
+ 00228 78 07 js SHORT $LN32@deflate_sl
+ 0022a 8b 56 38 mov edx, DWORD PTR [esi+56]
+ 0022d 03 d0 add edx, eax
+ 0022f eb 02 jmp SHORT $LN33@deflate_sl
+$LN32@deflate_sl:
+ 00231 33 d2 xor edx, edx
+$LN33@deflate_sl:
+ 00233 2b c8 sub ecx, eax
+ 00235 6a 00 push 0
+ 00237 51 push ecx
+ 00238 8b ce mov ecx, esi
+ 0023a e8 00 00 00 00 call __tr_flush_block
+ 0023f 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 00242 83 c4 08 add esp, 8
+ 00245 8b 0e mov ecx, DWORD PTR [esi]
+ 00247 89 46 5c mov DWORD PTR [esi+92], eax
+ 0024a e8 00 00 00 00 call _flush_pending
+ 0024f 8b 06 mov eax, DWORD PTR [esi]
+ 00251 83 78 10 00 cmp DWORD PTR [eax+16], 0
+ 00255 0f 85 b5 fd ff
+ ff jne $LL2@deflate_sl
+$LN48@deflate_sl:
+ 0025b 5f pop edi
+ 0025c 5e pop esi
+
+; 1826 : }
+; 1827 : s->strstart++;
+; 1828 : s->lookahead--;
+; 1829 : if (s->strm->avail_out == 0) return need_more;
+
+ 0025d 33 c0 xor eax, eax
+ 0025f 5b pop ebx
+
+; 1853 : }
+
+ 00260 8b e5 mov esp, ebp
+ 00262 5d pop ebp
+ 00263 c3 ret 0
+$LN15@deflate_sl:
+
+; 1816 :
+; 1817 : } else if (s->match_available) {
+
+ 00264 83 7e 68 00 cmp DWORD PTR [esi+104], 0
+ 00268 0f 84 94 00 00
+ 00 je $LN20@deflate_sl
+
+; 1818 : /* If there was no match at the previous position, output a
+; 1819 : * single literal. If there was a match but the current match
+; 1820 : * is longer, truncate the previous match to a single literal.
+; 1821 : */
+; 1822 : Tracevv((stderr,"%c", s->window[s->strstart-1]));
+; 1823 : _tr_tally_lit(s, s->window[s->strstart-1], bflush);
+
+ 0026e 8b 4e 6c mov ecx, DWORD PTR [esi+108]
+ 00271 33 ff xor edi, edi
+ 00273 8b 46 38 mov eax, DWORD PTR [esi+56]
+ 00276 8a 54 01 ff mov dl, BYTE PTR [ecx+eax-1]
+ 0027a 8b 8e a0 16 00
+ 00 mov ecx, DWORD PTR [esi+5792]
+ 00280 8b 86 a4 16 00
+ 00 mov eax, DWORD PTR [esi+5796]
+ 00286 66 89 3c 48 mov WORD PTR [eax+ecx*2], di
+ 0028a 8b 86 a0 16 00
+ 00 mov eax, DWORD PTR [esi+5792]
+ 00290 8b 8e 98 16 00
+ 00 mov ecx, DWORD PTR [esi+5784]
+ 00296 88 14 01 mov BYTE PTR [ecx+eax], dl
+ 00299 ff 86 a0 16 00
+ 00 inc DWORD PTR [esi+5792]
+ 0029f 0f b6 c2 movzx eax, dl
+ 002a2 66 ff 84 86 94
+ 00 00 00 inc WORD PTR [esi+eax*4+148]
+ 002aa 8b 86 9c 16 00
+ 00 mov eax, DWORD PTR [esi+5788]
+ 002b0 48 dec eax
+ 002b1 39 86 a0 16 00
+ 00 cmp DWORD PTR [esi+5792], eax
+
+; 1824 : if (bflush) {
+
+ 002b7 75 2f jne SHORT $LN22@deflate_sl
+
+; 1825 : FLUSH_BLOCK_ONLY(s, 0);
+
+ 002b9 8b 4e 5c mov ecx, DWORD PTR [esi+92]
+ 002bc 85 c9 test ecx, ecx
+ 002be 78 07 js SHORT $LN34@deflate_sl
+ 002c0 8b 56 38 mov edx, DWORD PTR [esi+56]
+ 002c3 03 d1 add edx, ecx
+ 002c5 eb 02 jmp SHORT $LN35@deflate_sl
+$LN34@deflate_sl:
+ 002c7 33 d2 xor edx, edx
+$LN35@deflate_sl:
+ 002c9 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 002cc 2b c1 sub eax, ecx
+ 002ce 8b ce mov ecx, esi
+ 002d0 6a 00 push 0
+ 002d2 50 push eax
+ 002d3 e8 00 00 00 00 call __tr_flush_block
+ 002d8 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 002db 83 c4 08 add esp, 8
+ 002de 8b 0e mov ecx, DWORD PTR [esi]
+ 002e0 89 46 5c mov DWORD PTR [esi+92], eax
+ 002e3 e8 00 00 00 00 call _flush_pending
+$LN22@deflate_sl:
+
+; 1826 : }
+; 1827 : s->strstart++;
+; 1828 : s->lookahead--;
+; 1829 : if (s->strm->avail_out == 0) return need_more;
+
+ 002e8 8b 06 mov eax, DWORD PTR [esi]
+ 002ea ff 46 6c inc DWORD PTR [esi+108]
+ 002ed ff 4e 74 dec DWORD PTR [esi+116]
+ 002f0 39 78 10 cmp DWORD PTR [eax+16], edi
+ 002f3 0f 85 17 fd ff
+ ff jne $LL2@deflate_sl
+ 002f9 5f pop edi
+ 002fa 5e pop esi
+ 002fb 33 c0 xor eax, eax
+ 002fd 5b pop ebx
+
+; 1853 : }
+
+ 002fe 8b e5 mov esp, ebp
+ 00300 5d pop ebp
+ 00301 c3 ret 0
+$LN20@deflate_sl:
+
+; 1830 : } else {
+; 1831 : /* There is no previous match to compare with, wait for
+; 1832 : * the next step to decide.
+; 1833 : */
+; 1834 : s->match_available = 1;
+; 1835 : s->strstart++;
+
+ 00302 ff 46 6c inc DWORD PTR [esi+108]
+
+; 1836 : s->lookahead--;
+
+ 00305 ff 4e 74 dec DWORD PTR [esi+116]
+ 00308 c7 46 68 01 00
+ 00 00 mov DWORD PTR [esi+104], 1
+
+; 1837 : }
+; 1838 : }
+
+ 0030f e9 fc fc ff ff jmp $LL2@deflate_sl
+$LN46@deflate_sl:
+
+; 1839 : Assert (flush != Z_NO_FLUSH, "no flush?");
+; 1840 : if (s->match_available) {
+
+ 00314 83 7e 68 00 cmp DWORD PTR [esi+104], 0
+ 00318 74 3f je SHORT $LN24@deflate_sl
+
+; 1841 : Tracevv((stderr,"%c", s->window[s->strstart-1]));
+; 1842 : _tr_tally_lit(s, s->window[s->strstart-1], bflush);
+
+ 0031a 8b 4e 6c mov ecx, DWORD PTR [esi+108]
+ 0031d 33 ff xor edi, edi
+ 0031f 8b 46 38 mov eax, DWORD PTR [esi+56]
+ 00322 8a 54 01 ff mov dl, BYTE PTR [ecx+eax-1]
+ 00326 8b 8e a0 16 00
+ 00 mov ecx, DWORD PTR [esi+5792]
+ 0032c 8b 86 a4 16 00
+ 00 mov eax, DWORD PTR [esi+5796]
+ 00332 66 89 3c 48 mov WORD PTR [eax+ecx*2], di
+ 00336 8b 86 a0 16 00
+ 00 mov eax, DWORD PTR [esi+5792]
+ 0033c 8b 8e 98 16 00
+ 00 mov ecx, DWORD PTR [esi+5784]
+ 00342 88 14 01 mov BYTE PTR [ecx+eax], dl
+ 00345 ff 86 a0 16 00
+ 00 inc DWORD PTR [esi+5792]
+ 0034b 0f b6 c2 movzx eax, dl
+ 0034e 66 ff 84 86 94
+ 00 00 00 inc WORD PTR [esi+eax*4+148]
+
+; 1843 : s->match_available = 0;
+
+ 00356 89 7e 68 mov DWORD PTR [esi+104], edi
+$LN24@deflate_sl:
+
+; 1844 : }
+; 1845 : s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
+
+ 00359 8b 4e 6c mov ecx, DWORD PTR [esi+108]
+ 0035c b8 02 00 00 00 mov eax, 2
+ 00361 3b c8 cmp ecx, eax
+ 00363 0f 42 c1 cmovb eax, ecx
+ 00366 89 86 b4 16 00
+ 00 mov DWORD PTR [esi+5812], eax
+
+; 1846 : if (flush == Z_FINISH) {
+
+ 0036c 83 fb 04 cmp ebx, 4
+ 0036f 75 40 jne SHORT $LN25@deflate_sl
+
+; 1847 : FLUSH_BLOCK(s, 1);
+
+ 00371 8b 46 5c mov eax, DWORD PTR [esi+92]
+ 00374 85 c0 test eax, eax
+ 00376 78 07 js SHORT $LN38@deflate_sl
+ 00378 8b 56 38 mov edx, DWORD PTR [esi+56]
+ 0037b 03 d0 add edx, eax
+ 0037d eb 02 jmp SHORT $LN39@deflate_sl
+$LN38@deflate_sl:
+ 0037f 33 d2 xor edx, edx
+$LN39@deflate_sl:
+ 00381 2b c8 sub ecx, eax
+ 00383 6a 01 push 1
+ 00385 51 push ecx
+ 00386 8b ce mov ecx, esi
+ 00388 e8 00 00 00 00 call __tr_flush_block
+ 0038d 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 00390 83 c4 08 add esp, 8
+ 00393 8b 0e mov ecx, DWORD PTR [esi]
+ 00395 89 46 5c mov DWORD PTR [esi+92], eax
+ 00398 e8 00 00 00 00 call _flush_pending
+ 0039d 8b 06 mov eax, DWORD PTR [esi]
+ 0039f 33 c9 xor ecx, ecx
+ 003a1 5f pop edi
+ 003a2 5e pop esi
+ 003a3 5b pop ebx
+ 003a4 39 48 10 cmp DWORD PTR [eax+16], ecx
+ 003a7 0f 95 c1 setne cl
+ 003aa 8d 41 02 lea eax, DWORD PTR [ecx+2]
+
+; 1853 : }
+
+ 003ad 8b e5 mov esp, ebp
+ 003af 5d pop ebp
+ 003b0 c3 ret 0
+$LN25@deflate_sl:
+
+; 1848 : return finish_done;
+; 1849 : }
+; 1850 : if (s->last_lit)
+
+ 003b1 83 be a0 16 00
+ 00 00 cmp DWORD PTR [esi+5792], 0
+ 003b8 74 38 je SHORT $LN28@deflate_sl
+
+; 1851 : FLUSH_BLOCK(s, 0);
+
+ 003ba 8b 46 5c mov eax, DWORD PTR [esi+92]
+ 003bd 85 c0 test eax, eax
+ 003bf 78 07 js SHORT $LN40@deflate_sl
+ 003c1 8b 56 38 mov edx, DWORD PTR [esi+56]
+ 003c4 03 d0 add edx, eax
+ 003c6 eb 02 jmp SHORT $LN41@deflate_sl
+$LN40@deflate_sl:
+ 003c8 33 d2 xor edx, edx
+$LN41@deflate_sl:
+ 003ca 2b c8 sub ecx, eax
+ 003cc 6a 00 push 0
+ 003ce 51 push ecx
+ 003cf 8b ce mov ecx, esi
+ 003d1 e8 00 00 00 00 call __tr_flush_block
+ 003d6 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 003d9 83 c4 08 add esp, 8
+ 003dc 8b 0e mov ecx, DWORD PTR [esi]
+ 003de 89 46 5c mov DWORD PTR [esi+92], eax
+ 003e1 e8 00 00 00 00 call _flush_pending
+ 003e6 8b 06 mov eax, DWORD PTR [esi]
+ 003e8 83 78 10 00 cmp DWORD PTR [eax+16], 0
+ 003ec 0f 84 69 fe ff
+ ff je $LN48@deflate_sl
+$LN28@deflate_sl:
+ 003f2 5f pop edi
+ 003f3 5e pop esi
+
+; 1852 : return block_done;
+
+ 003f4 b8 01 00 00 00 mov eax, 1
+ 003f9 5b pop ebx
+
+; 1853 : }
+
+ 003fa 8b e5 mov esp, ebp
+ 003fc 5d pop ebp
+ 003fd c3 ret 0
+_deflate_slow ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflate_rle
+_TEXT SEGMENT
+_flush$1$ = -4 ; size = 4
+_deflate_rle PROC ; COMDAT
+; _s$ = ecx
+; _flush$ = edx
+
+; 1864 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 53 push ebx
+ 00005 56 push esi
+ 00006 8b da mov ebx, edx
+ 00008 8b f1 mov esi, ecx
+ 0000a 57 push edi
+ 0000b 89 5d fc mov DWORD PTR _flush$1$[ebp], ebx
+ 0000e 66 90 npad 2
+$LL2@deflate_rl:
+
+; 1865 : int bflush; /* set if current block must be flushed */
+; 1866 : uInt prev; /* byte at distance one to match */
+; 1867 : Bytef *scan, *strend; /* scan goes up to strend for length of run */
+; 1868 :
+; 1869 : for (;;) {
+; 1870 : /* Make sure that we always have enough lookahead, except
+; 1871 : * at the end of the input file. We need MAX_MATCH bytes
+; 1872 : * for the longest run, plus one for the unrolled loop.
+; 1873 : */
+; 1874 : if (s->lookahead <= MAX_MATCH) {
+
+ 00010 8b 7e 74 mov edi, DWORD PTR [esi+116]
+ 00013 81 ff 02 01 00
+ 00 cmp edi, 258 ; 00000102H
+ 00019 77 22 ja SHORT $LN10@deflate_rl
+
+; 1875 : fill_window(s);
+
+ 0001b 8b ce mov ecx, esi
+ 0001d e8 00 00 00 00 call _fill_window
+
+; 1876 : if (s->lookahead <= MAX_MATCH && flush == Z_NO_FLUSH) {
+
+ 00022 8b 7e 74 mov edi, DWORD PTR [esi+116]
+ 00025 81 ff 02 01 00
+ 00 cmp edi, 258 ; 00000102H
+ 0002b 77 08 ja SHORT $LN9@deflate_rl
+ 0002d 85 db test ebx, ebx
+ 0002f 0f 84 b6 01 00
+ 00 je $LN37@deflate_rl
+$LN9@deflate_rl:
+
+; 1877 : return need_more;
+; 1878 : }
+; 1879 : if (s->lookahead == 0) break; /* flush the current block */
+
+ 00035 85 ff test edi, edi
+ 00037 0f 84 b7 01 00
+ 00 je $LN36@deflate_rl
+$LN10@deflate_rl:
+
+; 1880 : }
+; 1881 :
+; 1882 : /* See how many times the previous byte repeats */
+; 1883 : s->match_length = 0;
+
+ 0003d c7 46 60 00 00
+ 00 00 mov DWORD PTR [esi+96], 0
+
+; 1884 : if (s->lookahead >= MIN_MATCH && s->strstart > 0) {
+
+ 00044 83 ff 03 cmp edi, 3
+ 00047 0f 82 95 00 00
+ 00 jb $LN14@deflate_rl
+ 0004d 8b 4e 6c mov ecx, DWORD PTR [esi+108]
+ 00050 85 c9 test ecx, ecx
+ 00052 0f 84 8a 00 00
+ 00 je $LN14@deflate_rl
+
+; 1885 : scan = s->window + s->strstart - 1;
+
+ 00058 8b 5e 38 mov ebx, DWORD PTR [esi+56]
+ 0005b 03 d9 add ebx, ecx
+
+; 1886 : prev = *scan;
+; 1887 : if (prev == *++scan && prev == *++scan && prev == *++scan) {
+
+ 0005d 0f b6 0b movzx ecx, BYTE PTR [ebx]
+ 00060 0f b6 53 ff movzx edx, BYTE PTR [ebx-1]
+ 00064 8d 43 ff lea eax, DWORD PTR [ebx-1]
+ 00067 3b d1 cmp edx, ecx
+ 00069 75 74 jne SHORT $LN44@deflate_rl
+ 0006b 0f b6 48 02 movzx ecx, BYTE PTR [eax+2]
+ 0006f 3b d1 cmp edx, ecx
+ 00071 75 6c jne SHORT $LN44@deflate_rl
+ 00073 0f b6 48 03 movzx ecx, BYTE PTR [eax+3]
+ 00077 83 c0 03 add eax, 3
+ 0007a 3b d1 cmp edx, ecx
+ 0007c 75 61 jne SHORT $LN44@deflate_rl
+
+; 1888 : strend = s->window + s->strstart + MAX_MATCH;
+
+ 0007e 81 c3 02 01 00
+ 00 add ebx, 258 ; 00000102H
+$LL7@deflate_rl:
+
+; 1889 : do {
+; 1890 : } while (prev == *++scan && prev == *++scan &&
+; 1891 : prev == *++scan && prev == *++scan &&
+; 1892 : prev == *++scan && prev == *++scan &&
+; 1893 : prev == *++scan && prev == *++scan &&
+
+ 00084 0f b6 48 01 movzx ecx, BYTE PTR [eax+1]
+ 00088 40 inc eax
+ 00089 3b d1 cmp edx, ecx
+ 0008b 75 43 jne SHORT $LN13@deflate_rl
+ 0008d 0f b6 48 01 movzx ecx, BYTE PTR [eax+1]
+ 00091 40 inc eax
+ 00092 3b d1 cmp edx, ecx
+ 00094 75 3a jne SHORT $LN13@deflate_rl
+ 00096 0f b6 48 01 movzx ecx, BYTE PTR [eax+1]
+ 0009a 40 inc eax
+ 0009b 3b d1 cmp edx, ecx
+ 0009d 75 31 jne SHORT $LN13@deflate_rl
+ 0009f 0f b6 48 01 movzx ecx, BYTE PTR [eax+1]
+ 000a3 40 inc eax
+ 000a4 3b d1 cmp edx, ecx
+ 000a6 75 28 jne SHORT $LN13@deflate_rl
+ 000a8 0f b6 48 01 movzx ecx, BYTE PTR [eax+1]
+ 000ac 40 inc eax
+ 000ad 3b d1 cmp edx, ecx
+ 000af 75 1f jne SHORT $LN13@deflate_rl
+ 000b1 0f b6 48 01 movzx ecx, BYTE PTR [eax+1]
+ 000b5 40 inc eax
+ 000b6 3b d1 cmp edx, ecx
+ 000b8 75 16 jne SHORT $LN13@deflate_rl
+ 000ba 0f b6 48 01 movzx ecx, BYTE PTR [eax+1]
+ 000be 40 inc eax
+ 000bf 3b d1 cmp edx, ecx
+ 000c1 75 0d jne SHORT $LN13@deflate_rl
+ 000c3 0f b6 48 01 movzx ecx, BYTE PTR [eax+1]
+ 000c7 40 inc eax
+ 000c8 3b d1 cmp edx, ecx
+ 000ca 75 04 jne SHORT $LN13@deflate_rl
+ 000cc 3b c3 cmp eax, ebx
+ 000ce 72 b4 jb SHORT $LL7@deflate_rl
+$LN13@deflate_rl:
+
+; 1894 : scan < strend);
+; 1895 : s->match_length = MAX_MATCH - (int)(strend - scan);
+
+ 000d0 2b c3 sub eax, ebx
+ 000d2 05 02 01 00 00 add eax, 258 ; 00000102H
+
+; 1896 : if (s->match_length > s->lookahead)
+
+ 000d7 3b c7 cmp eax, edi
+ 000d9 0f 47 c7 cmova eax, edi
+ 000dc 89 46 60 mov DWORD PTR [esi+96], eax
+$LN44@deflate_rl:
+ 000df 8b 5d fc mov ebx, DWORD PTR _flush$1$[ebp]
+$LN14@deflate_rl:
+
+; 1897 : s->match_length = s->lookahead;
+; 1898 : }
+; 1899 : Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
+; 1900 : }
+; 1901 :
+; 1902 : /* Emit match if have run of MIN_MATCH or longer, else emit literal */
+; 1903 : if (s->match_length >= MIN_MATCH) {
+
+ 000e2 83 7e 60 03 cmp DWORD PTR [esi+96], 3
+ 000e6 72 6d jb SHORT $LN15@deflate_rl
+
+; 1904 : check_match(s, s->strstart, s->strstart - 1, s->match_length);
+; 1905 :
+; 1906 : _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush);
+
+ 000e8 8b 8e a0 16 00
+ 00 mov ecx, DWORD PTR [esi+5792]
+ 000ee bf 01 00 00 00 mov edi, 1
+ 000f3 8b 86 a4 16 00
+ 00 mov eax, DWORD PTR [esi+5796]
+ 000f9 8a 56 60 mov dl, BYTE PTR [esi+96]
+ 000fc 80 ea 03 sub dl, 3
+ 000ff 66 89 3c 48 mov WORD PTR [eax+ecx*2], di
+ 00103 8b 86 a0 16 00
+ 00 mov eax, DWORD PTR [esi+5792]
+ 00109 8b 8e 98 16 00
+ 00 mov ecx, DWORD PTR [esi+5784]
+ 0010f 88 14 01 mov BYTE PTR [ecx+eax], dl
+ 00112 33 c9 xor ecx, ecx
+ 00114 ff 86 a0 16 00
+ 00 inc DWORD PTR [esi+5792]
+ 0011a 0f b6 c2 movzx eax, dl
+ 0011d 0f b6 80 00 00
+ 00 00 movzx eax, BYTE PTR __length_code[eax]
+ 00124 66 ff 84 86 98
+ 04 00 00 inc WORD PTR [esi+eax*4+1176]
+ 0012c 66 ff 86 88 09
+ 00 00 inc WORD PTR [esi+2440]
+ 00133 8b 86 9c 16 00
+ 00 mov eax, DWORD PTR [esi+5788]
+ 00139 48 dec eax
+ 0013a 39 86 a0 16 00
+ 00 cmp DWORD PTR [esi+5792], eax
+
+; 1907 :
+; 1908 : s->lookahead -= s->match_length;
+
+ 00140 8b 46 60 mov eax, DWORD PTR [esi+96]
+ 00143 0f 94 c1 sete cl
+
+; 1909 : s->strstart += s->match_length;
+; 1910 : s->match_length = 0;
+
+ 00146 c7 46 60 00 00
+ 00 00 mov DWORD PTR [esi+96], 0
+ 0014d 29 46 74 sub DWORD PTR [esi+116], eax
+ 00150 01 46 6c add DWORD PTR [esi+108], eax
+
+; 1911 : } else {
+
+ 00153 eb 53 jmp SHORT $LN16@deflate_rl
+$LN15@deflate_rl:
+
+; 1912 : /* No match, output a literal byte */
+; 1913 : Tracevv((stderr,"%c", s->window[s->strstart]));
+; 1914 : _tr_tally_lit (s, s->window[s->strstart], bflush);
+
+ 00155 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 00158 33 ff xor edi, edi
+ 0015a 8b 4e 38 mov ecx, DWORD PTR [esi+56]
+ 0015d 8a 14 01 mov dl, BYTE PTR [ecx+eax]
+ 00160 8b 8e a0 16 00
+ 00 mov ecx, DWORD PTR [esi+5792]
+ 00166 8b 86 a4 16 00
+ 00 mov eax, DWORD PTR [esi+5796]
+ 0016c 66 89 3c 48 mov WORD PTR [eax+ecx*2], di
+ 00170 8b 86 a0 16 00
+ 00 mov eax, DWORD PTR [esi+5792]
+ 00176 8b 8e 98 16 00
+ 00 mov ecx, DWORD PTR [esi+5784]
+ 0017c 88 14 01 mov BYTE PTR [ecx+eax], dl
+ 0017f 33 c9 xor ecx, ecx
+ 00181 ff 86 a0 16 00
+ 00 inc DWORD PTR [esi+5792]
+ 00187 0f b6 c2 movzx eax, dl
+ 0018a 66 ff 84 86 94
+ 00 00 00 inc WORD PTR [esi+eax*4+148]
+ 00192 8b 86 9c 16 00
+ 00 mov eax, DWORD PTR [esi+5788]
+ 00198 48 dec eax
+ 00199 39 86 a0 16 00
+ 00 cmp DWORD PTR [esi+5792], eax
+ 0019f 0f 94 c1 sete cl
+
+; 1915 : s->lookahead--;
+
+ 001a2 ff 4e 74 dec DWORD PTR [esi+116]
+
+; 1916 : s->strstart++;
+
+ 001a5 ff 46 6c inc DWORD PTR [esi+108]
+$LN16@deflate_rl:
+
+; 1917 : }
+; 1918 : if (bflush) FLUSH_BLOCK(s, 0);
+
+ 001a8 85 c9 test ecx, ecx
+ 001aa 0f 84 60 fe ff
+ ff je $LL2@deflate_rl
+ 001b0 8b 4e 5c mov ecx, DWORD PTR [esi+92]
+ 001b3 85 c9 test ecx, ecx
+ 001b5 78 07 js SHORT $LN26@deflate_rl
+ 001b7 8b 56 38 mov edx, DWORD PTR [esi+56]
+ 001ba 03 d1 add edx, ecx
+ 001bc eb 02 jmp SHORT $LN27@deflate_rl
+$LN26@deflate_rl:
+ 001be 33 d2 xor edx, edx
+$LN27@deflate_rl:
+ 001c0 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 001c3 2b c1 sub eax, ecx
+ 001c5 8b ce mov ecx, esi
+ 001c7 6a 00 push 0
+ 001c9 50 push eax
+ 001ca e8 00 00 00 00 call __tr_flush_block
+ 001cf 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 001d2 83 c4 08 add esp, 8
+ 001d5 8b 0e mov ecx, DWORD PTR [esi]
+ 001d7 89 46 5c mov DWORD PTR [esi+92], eax
+ 001da e8 00 00 00 00 call _flush_pending
+ 001df 8b 06 mov eax, DWORD PTR [esi]
+ 001e1 83 78 10 00 cmp DWORD PTR [eax+16], 0
+ 001e5 0f 85 25 fe ff
+ ff jne $LL2@deflate_rl
+$LN37@deflate_rl:
+ 001eb 5f pop edi
+ 001ec 5e pop esi
+ 001ed 33 c0 xor eax, eax
+ 001ef 5b pop ebx
+
+; 1928 : }
+
+ 001f0 8b e5 mov esp, ebp
+ 001f2 5d pop ebp
+ 001f3 c3 ret 0
+$LN36@deflate_rl:
+
+; 1919 : }
+; 1920 : s->insert = 0;
+
+ 001f4 c7 86 b4 16 00
+ 00 00 00 00 00 mov DWORD PTR [esi+5812], 0
+
+; 1921 : if (flush == Z_FINISH) {
+
+ 001fe 83 fb 04 cmp ebx, 4
+ 00201 75 43 jne SHORT $LN19@deflate_rl
+
+; 1922 : FLUSH_BLOCK(s, 1);
+
+ 00203 8b 4e 5c mov ecx, DWORD PTR [esi+92]
+ 00206 85 c9 test ecx, ecx
+ 00208 78 07 js SHORT $LN28@deflate_rl
+ 0020a 8b 56 38 mov edx, DWORD PTR [esi+56]
+ 0020d 03 d1 add edx, ecx
+ 0020f eb 02 jmp SHORT $LN29@deflate_rl
+$LN28@deflate_rl:
+ 00211 33 d2 xor edx, edx
+$LN29@deflate_rl:
+ 00213 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 00216 2b c1 sub eax, ecx
+ 00218 8b ce mov ecx, esi
+ 0021a 6a 01 push 1
+ 0021c 50 push eax
+ 0021d e8 00 00 00 00 call __tr_flush_block
+ 00222 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 00225 83 c4 08 add esp, 8
+ 00228 8b 0e mov ecx, DWORD PTR [esi]
+ 0022a 89 46 5c mov DWORD PTR [esi+92], eax
+ 0022d e8 00 00 00 00 call _flush_pending
+ 00232 8b 06 mov eax, DWORD PTR [esi]
+ 00234 33 c9 xor ecx, ecx
+ 00236 5f pop edi
+ 00237 5e pop esi
+ 00238 5b pop ebx
+ 00239 39 48 10 cmp DWORD PTR [eax+16], ecx
+ 0023c 0f 95 c1 setne cl
+ 0023f 8d 41 02 lea eax, DWORD PTR [ecx+2]
+
+; 1928 : }
+
+ 00242 8b e5 mov esp, ebp
+ 00244 5d pop ebp
+ 00245 c3 ret 0
+$LN19@deflate_rl:
+
+; 1923 : return finish_done;
+; 1924 : }
+; 1925 : if (s->last_lit)
+
+ 00246 83 be a0 16 00
+ 00 00 cmp DWORD PTR [esi+5792], 0
+ 0024d 74 3b je SHORT $LN22@deflate_rl
+
+; 1926 : FLUSH_BLOCK(s, 0);
+
+ 0024f 8b 4e 5c mov ecx, DWORD PTR [esi+92]
+ 00252 85 c9 test ecx, ecx
+ 00254 78 07 js SHORT $LN30@deflate_rl
+ 00256 8b 56 38 mov edx, DWORD PTR [esi+56]
+ 00259 03 d1 add edx, ecx
+ 0025b eb 02 jmp SHORT $LN31@deflate_rl
+$LN30@deflate_rl:
+ 0025d 33 d2 xor edx, edx
+$LN31@deflate_rl:
+ 0025f 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 00262 2b c1 sub eax, ecx
+ 00264 8b ce mov ecx, esi
+ 00266 6a 00 push 0
+ 00268 50 push eax
+ 00269 e8 00 00 00 00 call __tr_flush_block
+ 0026e 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 00271 83 c4 08 add esp, 8
+ 00274 8b 0e mov ecx, DWORD PTR [esi]
+ 00276 89 46 5c mov DWORD PTR [esi+92], eax
+ 00279 e8 00 00 00 00 call _flush_pending
+ 0027e 8b 06 mov eax, DWORD PTR [esi]
+ 00280 83 78 10 00 cmp DWORD PTR [eax+16], 0
+ 00284 0f 84 61 ff ff
+ ff je $LN37@deflate_rl
+$LN22@deflate_rl:
+ 0028a 5f pop edi
+ 0028b 5e pop esi
+
+; 1927 : return block_done;
+
+ 0028c b8 01 00 00 00 mov eax, 1
+ 00291 5b pop ebx
+
+; 1928 : }
+
+ 00292 8b e5 mov esp, ebp
+ 00294 5d pop ebp
+ 00295 c3 ret 0
+_deflate_rle ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\deflate.c
+; COMDAT _deflate_huff
+_TEXT SEGMENT
+_deflate_huff PROC ; COMDAT
+; _s$ = ecx
+; _flush$ = edx
+
+; 1937 : {
+
+ 00000 53 push ebx
+ 00001 56 push esi
+ 00002 57 push edi
+ 00003 8b fa mov edi, edx
+ 00005 8b f1 mov esi, ecx
+$LL2@deflate_hu:
+
+; 1938 : int bflush; /* set if current block must be flushed */
+; 1939 :
+; 1940 : for (;;) {
+; 1941 : /* Make sure that we have a literal to write. */
+; 1942 : if (s->lookahead == 0) {
+
+ 00007 83 7e 74 00 cmp DWORD PTR [esi+116], 0
+ 0000b 75 11 jne SHORT $LN6@deflate_hu
+
+; 1943 : fill_window(s);
+
+ 0000d 8b ce mov ecx, esi
+ 0000f e8 00 00 00 00 call _fill_window
+
+; 1944 : if (s->lookahead == 0) {
+
+ 00014 83 7e 74 00 cmp DWORD PTR [esi+116], 0
+ 00018 0f 84 97 00 00
+ 00 je $LN23@deflate_hu
+$LN6@deflate_hu:
+
+; 1946 : return need_more;
+; 1947 : break; /* flush the current block */
+; 1948 : }
+; 1949 : }
+; 1950 :
+; 1951 : /* Output a literal byte */
+; 1952 : s->match_length = 0;
+; 1953 : Tracevv((stderr,"%c", s->window[s->strstart]));
+; 1954 : _tr_tally_lit (s, s->window[s->strstart], bflush);
+
+ 0001e 8b 4e 6c mov ecx, DWORD PTR [esi+108]
+ 00021 33 db xor ebx, ebx
+ 00023 8b 46 38 mov eax, DWORD PTR [esi+56]
+ 00026 c7 46 60 00 00
+ 00 00 mov DWORD PTR [esi+96], 0
+ 0002d 8a 14 01 mov dl, BYTE PTR [ecx+eax]
+ 00030 8b 8e a0 16 00
+ 00 mov ecx, DWORD PTR [esi+5792]
+ 00036 8b 86 a4 16 00
+ 00 mov eax, DWORD PTR [esi+5796]
+ 0003c 66 89 1c 48 mov WORD PTR [eax+ecx*2], bx
+ 00040 8b 86 a0 16 00
+ 00 mov eax, DWORD PTR [esi+5792]
+ 00046 8b 8e 98 16 00
+ 00 mov ecx, DWORD PTR [esi+5784]
+ 0004c 88 14 01 mov BYTE PTR [ecx+eax], dl
+ 0004f ff 86 a0 16 00
+ 00 inc DWORD PTR [esi+5792]
+ 00055 0f b6 c2 movzx eax, dl
+ 00058 66 ff 84 86 94
+ 00 00 00 inc WORD PTR [esi+eax*4+148]
+ 00060 8b 86 9c 16 00
+ 00 mov eax, DWORD PTR [esi+5788]
+
+; 1955 : s->lookahead--;
+; 1956 : s->strstart++;
+
+ 00066 ff 46 6c inc DWORD PTR [esi+108]
+ 00069 48 dec eax
+ 0006a ff 4e 74 dec DWORD PTR [esi+116]
+ 0006d 8b 4e 6c mov ecx, DWORD PTR [esi+108]
+ 00070 39 86 a0 16 00
+ 00 cmp DWORD PTR [esi+5792], eax
+
+; 1957 : if (bflush) FLUSH_BLOCK(s, 0);
+
+ 00076 75 8f jne SHORT $LL2@deflate_hu
+ 00078 8b 46 5c mov eax, DWORD PTR [esi+92]
+ 0007b 85 c0 test eax, eax
+ 0007d 78 07 js SHORT $LN15@deflate_hu
+ 0007f 8b 56 38 mov edx, DWORD PTR [esi+56]
+ 00082 03 d0 add edx, eax
+ 00084 eb 02 jmp SHORT $LN16@deflate_hu
+$LN15@deflate_hu:
+ 00086 33 d2 xor edx, edx
+$LN16@deflate_hu:
+ 00088 2b c8 sub ecx, eax
+ 0008a 6a 00 push 0
+ 0008c 51 push ecx
+ 0008d 8b ce mov ecx, esi
+ 0008f e8 00 00 00 00 call __tr_flush_block
+ 00094 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 00097 83 c4 08 add esp, 8
+ 0009a 8b 0e mov ecx, DWORD PTR [esi]
+ 0009c 89 46 5c mov DWORD PTR [esi+92], eax
+ 0009f e8 00 00 00 00 call _flush_pending
+ 000a4 8b 06 mov eax, DWORD PTR [esi]
+ 000a6 39 58 10 cmp DWORD PTR [eax+16], ebx
+ 000a9 0f 85 58 ff ff
+ ff jne $LL2@deflate_hu
+$LN24@deflate_hu:
+ 000af 5f pop edi
+ 000b0 5e pop esi
+ 000b1 33 c0 xor eax, eax
+ 000b3 5b pop ebx
+
+; 1967 : }
+
+ 000b4 c3 ret 0
+$LN23@deflate_hu:
+
+; 1945 : if (flush == Z_NO_FLUSH)
+
+ 000b5 85 ff test edi, edi
+ 000b7 74 f6 je SHORT $LN24@deflate_hu
+
+; 1958 : }
+; 1959 : s->insert = 0;
+
+ 000b9 c7 86 b4 16 00
+ 00 00 00 00 00 mov DWORD PTR [esi+5812], 0
+
+; 1960 : if (flush == Z_FINISH) {
+
+ 000c3 83 ff 04 cmp edi, 4
+ 000c6 75 40 jne SHORT $LN10@deflate_hu
+
+; 1961 : FLUSH_BLOCK(s, 1);
+
+ 000c8 8b 4e 5c mov ecx, DWORD PTR [esi+92]
+ 000cb 85 c9 test ecx, ecx
+ 000cd 78 07 js SHORT $LN17@deflate_hu
+ 000cf 8b 56 38 mov edx, DWORD PTR [esi+56]
+ 000d2 03 d1 add edx, ecx
+ 000d4 eb 02 jmp SHORT $LN18@deflate_hu
+$LN17@deflate_hu:
+ 000d6 33 d2 xor edx, edx
+$LN18@deflate_hu:
+ 000d8 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 000db 2b c1 sub eax, ecx
+ 000dd 8b ce mov ecx, esi
+ 000df 6a 01 push 1
+ 000e1 50 push eax
+ 000e2 e8 00 00 00 00 call __tr_flush_block
+ 000e7 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 000ea 83 c4 08 add esp, 8
+ 000ed 8b 0e mov ecx, DWORD PTR [esi]
+ 000ef 89 46 5c mov DWORD PTR [esi+92], eax
+ 000f2 e8 00 00 00 00 call _flush_pending
+ 000f7 8b 0e mov ecx, DWORD PTR [esi]
+ 000f9 33 c0 xor eax, eax
+ 000fb 5f pop edi
+ 000fc 5e pop esi
+ 000fd 5b pop ebx
+ 000fe 39 41 10 cmp DWORD PTR [ecx+16], eax
+ 00101 0f 95 c0 setne al
+ 00104 83 c0 02 add eax, 2
+
+; 1967 : }
+
+ 00107 c3 ret 0
+$LN10@deflate_hu:
+
+; 1962 : return finish_done;
+; 1963 : }
+; 1964 : if (s->last_lit)
+
+ 00108 83 be a0 16 00
+ 00 00 cmp DWORD PTR [esi+5792], 0
+ 0010f 74 3b je SHORT $LN13@deflate_hu
+
+; 1965 : FLUSH_BLOCK(s, 0);
+
+ 00111 8b 4e 5c mov ecx, DWORD PTR [esi+92]
+ 00114 85 c9 test ecx, ecx
+ 00116 78 07 js SHORT $LN19@deflate_hu
+ 00118 8b 56 38 mov edx, DWORD PTR [esi+56]
+ 0011b 03 d1 add edx, ecx
+ 0011d eb 02 jmp SHORT $LN20@deflate_hu
+$LN19@deflate_hu:
+ 0011f 33 d2 xor edx, edx
+$LN20@deflate_hu:
+ 00121 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 00124 2b c1 sub eax, ecx
+ 00126 8b ce mov ecx, esi
+ 00128 6a 00 push 0
+ 0012a 50 push eax
+ 0012b e8 00 00 00 00 call __tr_flush_block
+ 00130 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 00133 83 c4 08 add esp, 8
+ 00136 8b 0e mov ecx, DWORD PTR [esi]
+ 00138 89 46 5c mov DWORD PTR [esi+92], eax
+ 0013b e8 00 00 00 00 call _flush_pending
+ 00140 8b 06 mov eax, DWORD PTR [esi]
+ 00142 83 78 10 00 cmp DWORD PTR [eax+16], 0
+ 00146 0f 84 63 ff ff
+ ff je $LN24@deflate_hu
+$LN13@deflate_hu:
+ 0014c 5f pop edi
+ 0014d 5e pop esi
+
+; 1966 : return block_done;
+
+ 0014e b8 01 00 00 00 mov eax, 1
+ 00153 5b pop ebx
+
+; 1967 : }
+
+ 00154 c3 ret 0
+_deflate_huff ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/deflate.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/deflate.obj
new file mode 100644
index 0000000000..15d8295fe3
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/deflate.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzclose.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzclose.cod
new file mode 100644
index 0000000000..142cbc2a2e
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzclose.cod
@@ -0,0 +1,87 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\gzclose.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+COMM ?_OptionsStorage@?1??__local_stdio_scanf_options@@9@9:QWORD ; `__local_stdio_scanf_options'::`2'::_OptionsStorage
+COMM ?_OptionsStorage@?1??__local_stdio_printf_options@@9@9:QWORD ; `__local_stdio_printf_options'::`2'::_OptionsStorage
+_DATA ENDS
+PUBLIC _gzclose@4
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzclose.c
+; COMDAT _gzclose@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_gzclose@4 PROC ; COMDAT
+
+; 13 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 14 : #ifndef NO_GZCOMPRESS
+; 15 : gz_statep state;
+; 16 :
+; 17 : if (file == NULL)
+
+ 00003 8b 45 08 mov eax, DWORD PTR _file$[ebp]
+ 00006 85 c0 test eax, eax
+ 00008 75 09 jne SHORT $LN2@gzclose
+
+; 18 : return Z_STREAM_ERROR;
+
+ 0000a b8 fe ff ff ff mov eax, -2 ; fffffffeH
+
+; 22 : #else
+; 23 : return gzclose_r(file);
+; 24 : #endif
+; 25 : }
+
+ 0000f 5d pop ebp
+ 00010 c2 04 00 ret 4
+$LN2@gzclose:
+
+; 19 : state = (gz_statep)file;
+; 20 :
+; 21 : return state->mode == GZ_READ ? gzclose_r(file) : gzclose_w(file);
+
+ 00013 81 78 10 4f 1c
+ 00 00 cmp DWORD PTR [eax+16], 7247 ; 00001c4fH
+ 0001a 75 09 jne SHORT $LN4@gzclose
+ 0001c 89 45 08 mov DWORD PTR _file$[ebp], eax
+
+; 22 : #else
+; 23 : return gzclose_r(file);
+; 24 : #endif
+; 25 : }
+
+ 0001f 5d pop ebp
+
+; 19 : state = (gz_statep)file;
+; 20 :
+; 21 : return state->mode == GZ_READ ? gzclose_r(file) : gzclose_w(file);
+
+ 00020 e9 00 00 00 00 jmp _gzclose_r@4
+$LN4@gzclose:
+ 00025 89 45 08 mov DWORD PTR _file$[ebp], eax
+
+; 22 : #else
+; 23 : return gzclose_r(file);
+; 24 : #endif
+; 25 : }
+
+ 00028 5d pop ebp
+
+; 19 : state = (gz_statep)file;
+; 20 :
+; 21 : return state->mode == GZ_READ ? gzclose_r(file) : gzclose_w(file);
+
+ 00029 e9 00 00 00 00 jmp _gzclose_w@4
+_gzclose@4 ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzclose.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzclose.obj
new file mode 100644
index 0000000000..1f1b12830f
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzclose.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzlib.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzlib.cod
new file mode 100644
index 0000000000..ee1d4eb932
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzlib.cod
@@ -0,0 +1,2360 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\gzlib.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+PUBLIC ??_C@_02DKCKIIND@?$CFs?$AA@ ; `string'
+PUBLIC ??_C@_07EBNKNFJN@?$DMfd?3?$CFd?$DO?$AA@ ; `string'
+PUBLIC ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@ ; `string'
+PUBLIC ??_C@_00CNPNBAHC@?$AA@ ; `string'
+PUBLIC ??_C@_02LMMGGCAJ@?3?5?$AA@ ; `string'
+PUBLIC ??_C@_06DIJPEION@?$CFs?$CFs?$CFs?$AA@ ; `string'
+EXTRN __imp__malloc:PROC
+EXTRN __imp__free:PROC
+EXTRN __imp____stdio_common_vsprintf:PROC
+EXTRN __imp__wcstombs:PROC
+EXTRN __imp___open:PROC
+EXTRN __imp___wopen:PROC
+EXTRN __imp___lseeki64:PROC
+; COMDAT ??_C@_06DIJPEION@?$CFs?$CFs?$CFs?$AA@
+CONST SEGMENT
+??_C@_06DIJPEION@?$CFs?$CFs?$CFs?$AA@ DB '%s%s%s', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_02LMMGGCAJ@?3?5?$AA@
+CONST SEGMENT
+??_C@_02LMMGGCAJ@?3?5?$AA@ DB ': ', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_00CNPNBAHC@?$AA@
+CONST SEGMENT
+??_C@_00CNPNBAHC@?$AA@ DB 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@
+CONST SEGMENT
+??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@ DB 'out of memory', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_07EBNKNFJN@?$DMfd?3?$CFd?$DO?$AA@
+CONST SEGMENT
+??_C@_07EBNKNFJN@?$DMfd?3?$CFd?$DO?$AA@ DB '<fd:%d>', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_02DKCKIIND@?$CFs?$AA@
+CONST SEGMENT
+??_C@_02DKCKIIND@?$CFs?$AA@ DB '%s', 00H ; `string'
+PUBLIC _gz_error
+PUBLIC _gzclearerr@4
+PUBLIC _gzerror@8
+PUBLIC _gzeof@4
+PUBLIC _gzoffset@4
+PUBLIC _gzoffset64@4
+PUBLIC _gztell@4
+PUBLIC _gztell64@4
+PUBLIC _gzseek@12
+PUBLIC _gzseek64@16
+PUBLIC _gzrewind@4
+PUBLIC _gzbuffer@8
+PUBLIC _gzopen_w@8
+PUBLIC _gzdopen@8
+PUBLIC _gzopen@8
+PUBLIC __snprintf
+PUBLIC __vsnprintf
+PUBLIC __vsnprintf_l
+PUBLIC ___local_stdio_printf_options
+; Function compile flags: /Ogtp
+; File c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\corecrt_stdio_config.h
+; COMDAT ___local_stdio_printf_options
+_TEXT SEGMENT
+___local_stdio_printf_options PROC ; COMDAT
+
+; 74 : static unsigned __int64 _OptionsStorage;
+; 75 : return &_OptionsStorage;
+
+ 00000 b8 00 00 00 00 mov eax, OFFSET ?_OptionsStorage@?1??__local_stdio_printf_options@@9@9 ; `__local_stdio_printf_options'::`2'::_OptionsStorage
+
+; 76 : }
+
+ 00005 c3 ret 0
+___local_stdio_printf_options ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\stdio.h
+; COMDAT __vsnprintf_l
+_TEXT SEGMENT
+__Format$ = 8 ; size = 4
+__Locale$dead$ = 12 ; size = 4
+__ArgList$ = 16 ; size = 4
+__vsnprintf_l PROC ; COMDAT
+; __Buffer$ = ecx
+; __BufferCount$ = edx
+
+; 1385 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1386 : int const _Result = __stdio_common_vsprintf(
+
+ 00003 ff 75 10 push DWORD PTR __ArgList$[ebp]
+ 00006 6a 00 push 0
+ 00008 ff 75 08 push DWORD PTR __Format$[ebp]
+ 0000b 52 push edx
+ 0000c 51 push ecx
+ 0000d e8 00 00 00 00 call ___local_stdio_printf_options
+ 00012 8b 08 mov ecx, DWORD PTR [eax]
+ 00014 ff 70 04 push DWORD PTR [eax+4]
+ 00017 83 c9 01 or ecx, 1
+ 0001a 51 push ecx
+ 0001b ff 15 00 00 00
+ 00 call DWORD PTR __imp____stdio_common_vsprintf
+
+; 1387 : _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS | _CRT_INTERNAL_PRINTF_LEGACY_VSPRINTF_NULL_TERMINATION,
+; 1388 : _Buffer, _BufferCount, _Format, _Locale, _ArgList);
+; 1389 :
+; 1390 : return _Result < 0 ? -1 : _Result;
+
+ 00021 83 c9 ff or ecx, -1
+ 00024 83 c4 1c add esp, 28 ; 0000001cH
+ 00027 85 c0 test eax, eax
+ 00029 0f 48 c1 cmovs eax, ecx
+
+; 1391 : }
+
+ 0002c 5d pop ebp
+ 0002d c3 ret 0
+__vsnprintf_l ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\stdio.h
+; COMDAT __vsnprintf
+_TEXT SEGMENT
+__Format$ = 8 ; size = 4
+__ArgList$ = 12 ; size = 4
+__vsnprintf PROC ; COMDAT
+; __Buffer$ = ecx
+; __BufferCount$ = edx
+
+; 1405 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1386 : int const _Result = __stdio_common_vsprintf(
+
+ 00003 ff 75 0c push DWORD PTR __ArgList$[ebp]
+ 00006 6a 00 push 0
+ 00008 ff 75 08 push DWORD PTR __Format$[ebp]
+ 0000b 52 push edx
+ 0000c 51 push ecx
+ 0000d e8 00 00 00 00 call ___local_stdio_printf_options
+ 00012 8b 08 mov ecx, DWORD PTR [eax]
+ 00014 ff 70 04 push DWORD PTR [eax+4]
+ 00017 83 c9 01 or ecx, 1
+ 0001a 51 push ecx
+ 0001b ff 15 00 00 00
+ 00 call DWORD PTR __imp____stdio_common_vsprintf
+
+; 1387 : _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS | _CRT_INTERNAL_PRINTF_LEGACY_VSPRINTF_NULL_TERMINATION,
+; 1388 : _Buffer, _BufferCount, _Format, _Locale, _ArgList);
+; 1389 :
+; 1390 : return _Result < 0 ? -1 : _Result;
+
+ 00021 83 c9 ff or ecx, -1
+ 00024 83 c4 1c add esp, 28 ; 0000001cH
+ 00027 85 c0 test eax, eax
+ 00029 0f 48 c1 cmovs eax, ecx
+
+; 1406 : #pragma warning(push)
+; 1407 : #pragma warning(disable: 4996) // Deprecation
+; 1408 : return _vsnprintf_l(_Buffer, _BufferCount, _Format, NULL, _ArgList);
+; 1409 : #pragma warning(pop)
+; 1410 : }
+
+ 0002c 5d pop ebp
+ 0002d c3 ret 0
+__vsnprintf ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\stdio.h
+; COMDAT __snprintf
+_TEXT SEGMENT
+__Buffer$ = 8 ; size = 4
+__BufferCount$ = 12 ; size = 4
+__Format$ = 16 ; size = 4
+__snprintf PROC ; COMDAT
+
+; 1960 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1386 : int const _Result = __stdio_common_vsprintf(
+
+ 00003 8d 45 14 lea eax, DWORD PTR __Format$[ebp+4]
+ 00006 50 push eax
+ 00007 6a 00 push 0
+ 00009 ff 75 10 push DWORD PTR __Format$[ebp]
+ 0000c ff 75 0c push DWORD PTR __BufferCount$[ebp]
+ 0000f ff 75 08 push DWORD PTR __Buffer$[ebp]
+ 00012 e8 00 00 00 00 call ___local_stdio_printf_options
+ 00017 8b 08 mov ecx, DWORD PTR [eax]
+ 00019 ff 70 04 push DWORD PTR [eax+4]
+ 0001c 83 c9 01 or ecx, 1
+ 0001f 51 push ecx
+ 00020 ff 15 00 00 00
+ 00 call DWORD PTR __imp____stdio_common_vsprintf
+
+; 1387 : _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS | _CRT_INTERNAL_PRINTF_LEGACY_VSPRINTF_NULL_TERMINATION,
+; 1388 : _Buffer, _BufferCount, _Format, _Locale, _ArgList);
+; 1389 :
+; 1390 : return _Result < 0 ? -1 : _Result;
+
+ 00026 83 c9 ff or ecx, -1
+ 00029 83 c4 1c add esp, 28 ; 0000001cH
+ 0002c 85 c0 test eax, eax
+ 0002e 0f 48 c1 cmovs eax, ecx
+
+; 1961 : int _Result;
+; 1962 : va_list _ArgList;
+; 1963 : __crt_va_start(_ArgList, _Format);
+; 1964 : #pragma warning(suppress:28719) // __WARNING_BANNED_API_USAGE
+; 1965 : _Result = _vsnprintf(_Buffer, _BufferCount, _Format, _ArgList);
+; 1966 : __crt_va_end(_ArgList);
+; 1967 : return _Result;
+; 1968 : }
+
+ 00031 5d pop ebp
+ 00032 c3 ret 0
+__snprintf ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzlib.c
+; COMDAT _gz_reset
+_TEXT SEGMENT
+_gz_reset PROC ; COMDAT
+; _state$ = ecx
+
+; 77 : {
+
+ 00000 56 push esi
+ 00001 8b f1 mov esi, ecx
+
+; 78 : state->x.have = 0; /* no output data available */
+; 79 : if (state->mode == GZ_READ) { /* for reading ... */
+
+ 00003 81 7e 10 4f 1c
+ 00 00 cmp DWORD PTR [esi+16], 7247 ; 00001c4fH
+ 0000a c7 06 00 00 00
+ 00 mov DWORD PTR [esi], 0
+ 00010 75 15 jne SHORT $LN2@gz_reset
+
+; 80 : state->eof = 0; /* not at end of file */
+
+ 00012 c7 46 40 00 00
+ 00 00 mov DWORD PTR [esi+64], 0
+
+; 81 : state->past = 0; /* have not read past end yet */
+
+ 00019 c7 46 44 00 00
+ 00 00 mov DWORD PTR [esi+68], 0
+
+; 82 : state->how = LOOK; /* look for gzip header */
+
+ 00020 c7 46 30 00 00
+ 00 00 mov DWORD PTR [esi+48], 0
+$LN2@gz_reset:
+
+; 83 : }
+; 84 : state->seek = 0; /* no seek request pending */
+; 85 : gz_error(state, Z_OK, NULL); /* clear error */
+
+ 00027 6a 00 push 0
+ 00029 33 d2 xor edx, edx
+ 0002b c7 46 58 00 00
+ 00 00 mov DWORD PTR [esi+88], 0
+ 00032 e8 00 00 00 00 call _gz_error
+ 00037 83 c4 04 add esp, 4
+
+; 86 : state->x.pos = 0; /* no uncompressed data yet */
+
+ 0003a c7 46 08 00 00
+ 00 00 mov DWORD PTR [esi+8], 0
+ 00041 c7 46 0c 00 00
+ 00 00 mov DWORD PTR [esi+12], 0
+
+; 87 : state->strm.avail_in = 0; /* no input data yet */
+
+ 00048 c7 46 68 00 00
+ 00 00 mov DWORD PTR [esi+104], 0
+ 0004f 5e pop esi
+
+; 88 : }
+
+ 00050 c3 ret 0
+_gz_reset ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzlib.c
+; COMDAT _gz_open
+_TEXT SEGMENT
+_exclusive$1$ = -12 ; size = 4
+_fd$1$ = -8 ; size = 4
+_path$1$ = -4 ; size = 4
+_mode$ = 8 ; size = 4
+_gz_open PROC ; COMDAT
+; _path$ = ecx
+; _fd$ = edx
+
+; 95 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 0c sub esp, 12 ; 0000000cH
+ 00006 53 push ebx
+ 00007 8b d9 mov ebx, ecx
+
+; 96 : gz_statep state;
+; 97 : size_t len;
+; 98 : int oflag;
+; 99 : #ifdef O_CLOEXEC
+; 100 : int cloexec = 0;
+; 101 : #endif
+; 102 : #ifdef O_EXCL
+; 103 : int exclusive = 0;
+
+ 00009 33 c0 xor eax, eax
+ 0000b 89 5d fc mov DWORD PTR _path$1$[ebp], ebx
+ 0000e 89 45 f4 mov DWORD PTR _exclusive$1$[ebp], eax
+ 00011 56 push esi
+ 00012 8b f2 mov esi, edx
+ 00014 89 75 f8 mov DWORD PTR _fd$1$[ebp], esi
+
+; 104 : #endif
+; 105 :
+; 106 : /* check input */
+; 107 : if (path == NULL)
+
+ 00017 85 db test ebx, ebx
+ 00019 75 06 jne SHORT $LN6@gz_open
+ 0001b 5e pop esi
+ 0001c 5b pop ebx
+
+; 265 : }
+
+ 0001d 8b e5 mov esp, ebp
+ 0001f 5d pop ebp
+ 00020 c3 ret 0
+$LN6@gz_open:
+ 00021 57 push edi
+
+; 108 : return NULL;
+; 109 :
+; 110 : /* allocate gzFile structure to return */
+; 111 : state = (gz_statep)malloc(sizeof(gz_state));
+
+ 00022 68 a0 00 00 00 push 160 ; 000000a0H
+ 00027 ff 15 00 00 00
+ 00 call DWORD PTR __imp__malloc
+ 0002d 8b f8 mov edi, eax
+ 0002f 83 c4 04 add esp, 4
+
+; 112 : if (state == NULL)
+
+ 00032 85 ff test edi, edi
+ 00034 0f 84 e6 01 00
+ 00 je $LN54@gz_open
+
+; 113 : return NULL;
+; 114 : state->size = 0; /* no buffers allocated yet */
+; 115 : state->want = GZBUFSIZE; /* requested buffer size */
+; 116 : state->msg = NULL; /* no error message yet */
+; 117 :
+; 118 : /* interpret mode */
+; 119 : state->mode = GZ_NONE;
+; 120 : state->level = Z_DEFAULT_COMPRESSION;
+; 121 : state->strategy = Z_DEFAULT_STRATEGY;
+; 122 : state->direct = 0;
+; 123 : while (*mode) {
+
+ 0003a 8b 4d 08 mov ecx, DWORD PTR _mode$[ebp]
+ 0003d c7 47 1c 00 00
+ 00 00 mov DWORD PTR [edi+28], 0
+ 00044 c7 47 20 00 20
+ 00 00 mov DWORD PTR [edi+32], 8192 ; 00002000H
+ 0004b c7 47 60 00 00
+ 00 00 mov DWORD PTR [edi+96], 0
+ 00052 c7 47 10 00 00
+ 00 00 mov DWORD PTR [edi+16], 0
+ 00059 c7 47 48 ff ff
+ ff ff mov DWORD PTR [edi+72], -1
+ 00060 c7 47 4c 00 00
+ 00 00 mov DWORD PTR [edi+76], 0
+ 00067 c7 47 2c 00 00
+ 00 00 mov DWORD PTR [edi+44], 0
+ 0006e 8a 01 mov al, BYTE PTR [ecx]
+ 00070 84 c0 test al, al
+ 00072 0f 84 88 00 00
+ 00 je $LN48@gz_open
+$LL2@gz_open:
+
+; 124 : if (*mode >= '0' && *mode <= '9')
+
+ 00078 3c 30 cmp al, 48 ; 00000030H
+ 0007a 7c 0f jl SHORT $LN8@gz_open
+ 0007c 3c 39 cmp al, 57 ; 00000039H
+ 0007e 7f 0b jg SHORT $LN8@gz_open
+
+; 125 : state->level = *mode - '0';
+
+ 00080 0f be c0 movsx eax, al
+ 00083 83 e8 30 sub eax, 48 ; 00000030H
+ 00086 89 47 48 mov DWORD PTR [edi+72], eax
+ 00089 eb 69 jmp SHORT $LN21@gz_open
+$LN8@gz_open:
+
+; 126 : else
+; 127 : switch (*mode) {
+
+ 0008b 0f be c0 movsx eax, al
+ 0008e 83 c0 d5 add eax, -43 ; ffffffd5H
+ 00091 83 f8 4d cmp eax, 77 ; 0000004dH
+ 00094 77 5e ja SHORT $LN21@gz_open
+ 00096 0f b6 80 00 00
+ 00 00 movzx eax, BYTE PTR $LN49@gz_open[eax]
+ 0009d ff 24 85 00 00
+ 00 00 jmp DWORD PTR $LN57@gz_open[eax*4]
+$LN10@gz_open:
+
+; 128 : case 'r':
+; 129 : state->mode = GZ_READ;
+
+ 000a4 c7 47 10 4f 1c
+ 00 00 mov DWORD PTR [edi+16], 7247 ; 00001c4fH
+
+; 130 : break;
+
+ 000ab eb 47 jmp SHORT $LN21@gz_open
+$LN11@gz_open:
+
+; 131 : #ifndef NO_GZCOMPRESS
+; 132 : case 'w':
+; 133 : state->mode = GZ_WRITE;
+
+ 000ad c7 47 10 b1 79
+ 00 00 mov DWORD PTR [edi+16], 31153 ; 000079b1H
+
+; 134 : break;
+
+ 000b4 eb 3e jmp SHORT $LN21@gz_open
+$LN12@gz_open:
+
+; 135 : case 'a':
+; 136 : state->mode = GZ_APPEND;
+
+ 000b6 c7 47 10 01 00
+ 00 00 mov DWORD PTR [edi+16], 1
+
+; 137 : break;
+
+ 000bd eb 35 jmp SHORT $LN21@gz_open
+$LN15@gz_open:
+
+; 138 : #endif
+; 139 : case '+': /* can't read and write at the same time */
+; 140 : free(state);
+; 141 : return NULL;
+; 142 : case 'b': /* ignore -- will request binary anyway */
+; 143 : break;
+; 144 : #ifdef O_CLOEXEC
+; 145 : case 'e':
+; 146 : cloexec = 1;
+; 147 : break;
+; 148 : #endif
+; 149 : #ifdef O_EXCL
+; 150 : case 'x':
+; 151 : exclusive = 1;
+
+ 000bf b8 01 00 00 00 mov eax, 1
+ 000c4 89 45 f4 mov DWORD PTR _exclusive$1$[ebp], eax
+
+; 152 : break;
+
+ 000c7 eb 2b jmp SHORT $LN21@gz_open
+$LN16@gz_open:
+
+; 153 : #endif
+; 154 : case 'f':
+; 155 : state->strategy = Z_FILTERED;
+
+ 000c9 c7 47 4c 01 00
+ 00 00 mov DWORD PTR [edi+76], 1
+
+; 156 : break;
+
+ 000d0 eb 22 jmp SHORT $LN21@gz_open
+$LN17@gz_open:
+
+; 157 : case 'h':
+; 158 : state->strategy = Z_HUFFMAN_ONLY;
+
+ 000d2 c7 47 4c 02 00
+ 00 00 mov DWORD PTR [edi+76], 2
+
+; 159 : break;
+
+ 000d9 eb 19 jmp SHORT $LN21@gz_open
+$LN18@gz_open:
+
+; 160 : case 'R':
+; 161 : state->strategy = Z_RLE;
+
+ 000db c7 47 4c 03 00
+ 00 00 mov DWORD PTR [edi+76], 3
+
+; 162 : break;
+
+ 000e2 eb 10 jmp SHORT $LN21@gz_open
+$LN19@gz_open:
+
+; 163 : case 'F':
+; 164 : state->strategy = Z_FIXED;
+
+ 000e4 c7 47 4c 04 00
+ 00 00 mov DWORD PTR [edi+76], 4
+
+; 165 : break;
+
+ 000eb eb 07 jmp SHORT $LN21@gz_open
+$LN20@gz_open:
+
+; 166 : case 'T':
+; 167 : state->direct = 1;
+
+ 000ed c7 47 2c 01 00
+ 00 00 mov DWORD PTR [edi+44], 1
+$LN21@gz_open:
+
+; 113 : return NULL;
+; 114 : state->size = 0; /* no buffers allocated yet */
+; 115 : state->want = GZBUFSIZE; /* requested buffer size */
+; 116 : state->msg = NULL; /* no error message yet */
+; 117 :
+; 118 : /* interpret mode */
+; 119 : state->mode = GZ_NONE;
+; 120 : state->level = Z_DEFAULT_COMPRESSION;
+; 121 : state->strategy = Z_DEFAULT_STRATEGY;
+; 122 : state->direct = 0;
+; 123 : while (*mode) {
+
+ 000f4 8a 41 01 mov al, BYTE PTR [ecx+1]
+
+; 168 : break;
+; 169 : default: /* could consider as an error, but just ignore */
+; 170 : ;
+; 171 : }
+; 172 : mode++;
+
+ 000f7 41 inc ecx
+ 000f8 84 c0 test al, al
+ 000fa 0f 85 78 ff ff
+ ff jne $LL2@gz_open
+$LN48@gz_open:
+
+; 173 : }
+; 174 :
+; 175 : /* must provide an "r", "w", or "a" */
+; 176 : if (state->mode == GZ_NONE) {
+
+ 00100 8b 47 10 mov eax, DWORD PTR [edi+16]
+ 00103 85 c0 test eax, eax
+ 00105 74 56 je SHORT $LN55@gz_open
+
+; 177 : free(state);
+; 178 : return NULL;
+; 179 : }
+; 180 :
+; 181 : /* can't force transparent read */
+; 182 : if (state->mode == GZ_READ) {
+
+ 00107 3d 4f 1c 00 00 cmp eax, 7247 ; 00001c4fH
+ 0010c 75 0d jne SHORT $LN23@gz_open
+
+; 183 : if (state->direct) {
+
+ 0010e 83 7f 2c 00 cmp DWORD PTR [edi+44], 0
+ 00112 75 49 jne SHORT $LN55@gz_open
+
+; 184 : free(state);
+; 185 : return NULL;
+; 186 : }
+; 187 : state->direct = 1; /* for empty file */
+
+ 00114 c7 47 2c 01 00
+ 00 00 mov DWORD PTR [edi+44], 1
+$LN23@gz_open:
+
+; 188 : }
+; 189 :
+; 190 : /* save the path name for error messages */
+; 191 : #ifdef _WIN32
+; 192 : if (fd == -2) {
+
+ 0011b 83 fe fe cmp esi, -2 ; fffffffeH
+ 0011e 75 19 jne SHORT $LN25@gz_open
+
+; 193 : len = wcstombs(NULL, path, 0);
+
+ 00120 6a 00 push 0
+ 00122 53 push ebx
+ 00123 6a 00 push 0
+ 00125 ff 15 00 00 00
+ 00 call DWORD PTR __imp__wcstombs
+ 0012b 8b f0 mov esi, eax
+ 0012d 83 c4 0c add esp, 12 ; 0000000cH
+
+; 194 : if (len == (size_t)-1)
+
+ 00130 83 fe ff cmp esi, -1
+ 00133 75 14 jne SHORT $LN26@gz_open
+
+; 195 : len = 0;
+
+ 00135 33 f6 xor esi, esi
+
+; 196 : }
+
+ 00137 eb 10 jmp SHORT $LN26@gz_open
+$LN25@gz_open:
+
+; 197 : else
+; 198 : #endif
+; 199 : len = strlen((const char *)path);
+
+ 00139 8b f3 mov esi, ebx
+ 0013b 8d 4e 01 lea ecx, DWORD PTR [esi+1]
+ 0013e 66 90 npad 2
+$LL50@gz_open:
+ 00140 8a 06 mov al, BYTE PTR [esi]
+ 00142 46 inc esi
+ 00143 84 c0 test al, al
+ 00145 75 f9 jne SHORT $LL50@gz_open
+ 00147 2b f1 sub esi, ecx
+$LN26@gz_open:
+
+; 200 : state->path = (char *)malloc(len + 1);
+
+ 00149 8d 5e 01 lea ebx, DWORD PTR [esi+1]
+ 0014c 53 push ebx
+ 0014d ff 15 00 00 00
+ 00 call DWORD PTR __imp__malloc
+ 00153 83 c4 04 add esp, 4
+ 00156 89 47 18 mov DWORD PTR [edi+24], eax
+
+; 201 : if (state->path == NULL) {
+
+ 00159 85 c0 test eax, eax
+ 0015b 75 13 jne SHORT $LN28@gz_open
+$LN55@gz_open:
+
+; 202 : free(state);
+
+ 0015d 57 push edi
+ 0015e ff 15 00 00 00
+ 00 call DWORD PTR __imp__free
+ 00164 83 c4 04 add esp, 4
+
+; 203 : return NULL;
+
+ 00167 33 c0 xor eax, eax
+ 00169 5f pop edi
+ 0016a 5e pop esi
+ 0016b 5b pop ebx
+
+; 265 : }
+
+ 0016c 8b e5 mov esp, ebp
+ 0016e 5d pop ebp
+ 0016f c3 ret 0
+$LN28@gz_open:
+
+; 204 : }
+; 205 : #ifdef _WIN32
+; 206 : if (fd == -2)
+
+ 00170 8b 55 f8 mov edx, DWORD PTR _fd$1$[ebp]
+ 00173 83 fa fe cmp edx, -2 ; fffffffeH
+ 00176 75 1a jne SHORT $LN29@gz_open
+
+; 207 : if (len)
+
+ 00178 85 f6 test esi, esi
+
+; 208 : wcstombs(state->path, path, len + 1);
+
+ 0017a 8b 75 fc mov esi, DWORD PTR _path$1$[ebp]
+ 0017d 74 0e je SHORT $LN31@gz_open
+ 0017f 53 push ebx
+ 00180 56 push esi
+ 00181 50 push eax
+ 00182 ff 15 00 00 00
+ 00 call DWORD PTR __imp__wcstombs
+ 00188 83 c4 0c add esp, 12 ; 0000000cH
+ 0018b eb 18 jmp SHORT $LN52@gz_open
+$LN31@gz_open:
+
+; 209 : else
+; 210 : *(state->path) = 0;
+
+ 0018d c6 00 00 mov BYTE PTR [eax], 0
+ 00190 eb 16 jmp SHORT $LN30@gz_open
+$LN29@gz_open:
+
+; 211 : else
+; 212 : #endif
+; 213 : #if !defined(NO_snprintf) && !defined(NO_vsnprintf)
+; 214 : snprintf(state->path, len + 1, "%s", (const char *)path);
+
+ 00192 8b 75 fc mov esi, DWORD PTR _path$1$[ebp]
+ 00195 56 push esi
+ 00196 68 00 00 00 00 push OFFSET ??_C@_02DKCKIIND@?$CFs?$AA@
+ 0019b 53 push ebx
+ 0019c 50 push eax
+ 0019d e8 00 00 00 00 call __snprintf
+ 001a2 83 c4 10 add esp, 16 ; 00000010H
+$LN52@gz_open:
+ 001a5 8b 55 f8 mov edx, DWORD PTR _fd$1$[ebp]
+$LN30@gz_open:
+
+; 215 : #else
+; 216 : strcpy(state->path, path);
+; 217 : #endif
+; 218 :
+; 219 : /* compute the flags for open() */
+; 220 : oflag =
+
+ 001a8 8b 4f 10 mov ecx, DWORD PTR [edi+16]
+ 001ab 81 f9 4f 1c 00
+ 00 cmp ecx, 7247 ; 00001c4fH
+ 001b1 75 04 jne SHORT $LN38@gz_open
+ 001b3 33 c0 xor eax, eax
+ 001b5 eb 27 jmp SHORT $LN39@gz_open
+$LN38@gz_open:
+ 001b7 81 f9 b1 79 00
+ 00 cmp ecx, 31153 ; 000079b1H
+ 001bd b8 08 00 00 00 mov eax, 8
+ 001c2 8b 4d f4 mov ecx, DWORD PTR _exclusive$1$[ebp]
+ 001c5 bb 00 02 00 00 mov ebx, 512 ; 00000200H
+ 001ca 0f 44 c3 cmove eax, ebx
+ 001cd f7 d9 neg ecx
+ 001cf 1b c9 sbb ecx, ecx
+ 001d1 81 e1 00 04 00
+ 00 and ecx, 1024 ; 00000400H
+ 001d7 0b c1 or eax, ecx
+ 001d9 0d 01 01 00 00 or eax, 257 ; 00000101H
+$LN39@gz_open:
+ 001de 0d 00 80 00 00 or eax, 32768 ; 00008000H
+
+; 221 : #ifdef O_LARGEFILE
+; 222 : O_LARGEFILE |
+; 223 : #endif
+; 224 : #ifdef O_BINARY
+; 225 : O_BINARY |
+; 226 : #endif
+; 227 : #ifdef O_CLOEXEC
+; 228 : (cloexec ? O_CLOEXEC : 0) |
+; 229 : #endif
+; 230 : (state->mode == GZ_READ ?
+; 231 : O_RDONLY :
+; 232 : (O_WRONLY | O_CREAT |
+; 233 : #ifdef O_EXCL
+; 234 : (exclusive ? O_EXCL : 0) |
+; 235 : #endif
+; 236 : (state->mode == GZ_WRITE ?
+; 237 : O_TRUNC :
+; 238 : O_APPEND)));
+; 239 :
+; 240 : /* open the file with the appropriate flags (or just use fd) */
+; 241 : state->fd = fd > -1 ? fd : (
+
+ 001e3 83 fa ff cmp edx, -1
+ 001e6 7f 1f jg SHORT $LN41@gz_open
+ 001e8 68 b6 01 00 00 push 438 ; 000001b6H
+ 001ed 50 push eax
+ 001ee 56 push esi
+ 001ef 83 fa fe cmp edx, -2 ; fffffffeH
+ 001f2 75 08 jne SHORT $LN40@gz_open
+ 001f4 ff 15 00 00 00
+ 00 call DWORD PTR __imp___wopen
+ 001fa eb 06 jmp SHORT $LN53@gz_open
+$LN40@gz_open:
+ 001fc ff 15 00 00 00
+ 00 call DWORD PTR __imp___open
+$LN53@gz_open:
+ 00202 8b d0 mov edx, eax
+ 00204 83 c4 0c add esp, 12 ; 0000000cH
+$LN41@gz_open:
+ 00207 89 57 14 mov DWORD PTR [edi+20], edx
+
+; 242 : #ifdef _WIN32
+; 243 : fd == -2 ? _wopen(path, oflag, 0666) :
+; 244 : #endif
+; 245 : open((const char *)path, oflag, 0666));
+; 246 : if (state->fd == -1) {
+
+ 0020a 83 fa ff cmp edx, -1
+ 0020d 75 1a jne SHORT $LN33@gz_open
+
+; 247 : free(state->path);
+
+ 0020f ff 77 18 push DWORD PTR [edi+24]
+ 00212 8b 35 00 00 00
+ 00 mov esi, DWORD PTR __imp__free
+ 00218 ff d6 call esi
+
+; 248 : free(state);
+
+ 0021a 57 push edi
+ 0021b ff d6 call esi
+ 0021d 83 c4 08 add esp, 8
+$LN54@gz_open:
+
+; 249 : return NULL;
+
+ 00220 5f pop edi
+ 00221 5e pop esi
+ 00222 33 c0 xor eax, eax
+ 00224 5b pop ebx
+
+; 265 : }
+
+ 00225 8b e5 mov esp, ebp
+ 00227 5d pop ebp
+ 00228 c3 ret 0
+$LN33@gz_open:
+
+; 250 : }
+; 251 : if (state->mode == GZ_APPEND)
+
+ 00229 83 7f 10 01 cmp DWORD PTR [edi+16], 1
+ 0022d 75 07 jne SHORT $LN34@gz_open
+
+; 252 : state->mode = GZ_WRITE; /* simplify later checks */
+
+ 0022f c7 47 10 b1 79
+ 00 00 mov DWORD PTR [edi+16], 31153 ; 000079b1H
+$LN34@gz_open:
+
+; 253 :
+; 254 : /* save the current position for rewinding (only if reading) */
+; 255 : if (state->mode == GZ_READ) {
+
+ 00236 81 7f 10 4f 1c
+ 00 00 cmp DWORD PTR [edi+16], 7247 ; 00001c4fH
+ 0023d 75 2b jne SHORT $LN36@gz_open
+
+; 256 : state->start = LSEEK(state->fd, 0, SEEK_CUR);
+
+ 0023f 6a 01 push 1
+ 00241 6a 00 push 0
+ 00243 6a 00 push 0
+ 00245 52 push edx
+ 00246 ff 15 00 00 00
+ 00 call DWORD PTR __imp___lseeki64
+ 0024c 89 47 38 mov DWORD PTR [edi+56], eax
+ 0024f 83 c4 10 add esp, 16 ; 00000010H
+
+; 257 : if (state->start == -1) state->start = 0;
+
+ 00252 23 c2 and eax, edx
+ 00254 89 57 3c mov DWORD PTR [edi+60], edx
+ 00257 83 f8 ff cmp eax, -1
+ 0025a 75 0e jne SHORT $LN36@gz_open
+ 0025c c7 47 38 00 00
+ 00 00 mov DWORD PTR [edi+56], 0
+ 00263 c7 47 3c 00 00
+ 00 00 mov DWORD PTR [edi+60], 0
+$LN36@gz_open:
+
+; 258 : }
+; 259 :
+; 260 : /* initialize stream */
+; 261 : gz_reset(state);
+
+ 0026a 8b cf mov ecx, edi
+ 0026c e8 00 00 00 00 call _gz_reset
+
+; 262 :
+; 263 : /* return stream */
+; 264 : return (gzFile)state;
+
+ 00271 8b c7 mov eax, edi
+ 00273 5f pop edi
+ 00274 5e pop esi
+ 00275 5b pop ebx
+
+; 265 : }
+
+ 00276 8b e5 mov esp, ebp
+ 00278 5d pop ebp
+ 00279 c3 ret 0
+ 0027a 66 90 npad 2
+$LN57@gz_open:
+ 0027c 00 00 00 00 DD $LN55@gz_open
+ 00280 00 00 00 00 DD $LN19@gz_open
+ 00284 00 00 00 00 DD $LN18@gz_open
+ 00288 00 00 00 00 DD $LN20@gz_open
+ 0028c 00 00 00 00 DD $LN12@gz_open
+ 00290 00 00 00 00 DD $LN16@gz_open
+ 00294 00 00 00 00 DD $LN17@gz_open
+ 00298 00 00 00 00 DD $LN10@gz_open
+ 0029c 00 00 00 00 DD $LN11@gz_open
+ 002a0 00 00 00 00 DD $LN15@gz_open
+ 002a4 00 00 00 00 DD $LN21@gz_open
+$LN49@gz_open:
+ 002a8 00 DB 0
+ 002a9 0a DB 10 ; 0000000aH
+ 002aa 0a DB 10 ; 0000000aH
+ 002ab 0a DB 10 ; 0000000aH
+ 002ac 0a DB 10 ; 0000000aH
+ 002ad 0a DB 10 ; 0000000aH
+ 002ae 0a DB 10 ; 0000000aH
+ 002af 0a DB 10 ; 0000000aH
+ 002b0 0a DB 10 ; 0000000aH
+ 002b1 0a DB 10 ; 0000000aH
+ 002b2 0a DB 10 ; 0000000aH
+ 002b3 0a DB 10 ; 0000000aH
+ 002b4 0a DB 10 ; 0000000aH
+ 002b5 0a DB 10 ; 0000000aH
+ 002b6 0a DB 10 ; 0000000aH
+ 002b7 0a DB 10 ; 0000000aH
+ 002b8 0a DB 10 ; 0000000aH
+ 002b9 0a DB 10 ; 0000000aH
+ 002ba 0a DB 10 ; 0000000aH
+ 002bb 0a DB 10 ; 0000000aH
+ 002bc 0a DB 10 ; 0000000aH
+ 002bd 0a DB 10 ; 0000000aH
+ 002be 0a DB 10 ; 0000000aH
+ 002bf 0a DB 10 ; 0000000aH
+ 002c0 0a DB 10 ; 0000000aH
+ 002c1 0a DB 10 ; 0000000aH
+ 002c2 0a DB 10 ; 0000000aH
+ 002c3 01 DB 1
+ 002c4 0a DB 10 ; 0000000aH
+ 002c5 0a DB 10 ; 0000000aH
+ 002c6 0a DB 10 ; 0000000aH
+ 002c7 0a DB 10 ; 0000000aH
+ 002c8 0a DB 10 ; 0000000aH
+ 002c9 0a DB 10 ; 0000000aH
+ 002ca 0a DB 10 ; 0000000aH
+ 002cb 0a DB 10 ; 0000000aH
+ 002cc 0a DB 10 ; 0000000aH
+ 002cd 0a DB 10 ; 0000000aH
+ 002ce 0a DB 10 ; 0000000aH
+ 002cf 02 DB 2
+ 002d0 0a DB 10 ; 0000000aH
+ 002d1 03 DB 3
+ 002d2 0a DB 10 ; 0000000aH
+ 002d3 0a DB 10 ; 0000000aH
+ 002d4 0a DB 10 ; 0000000aH
+ 002d5 0a DB 10 ; 0000000aH
+ 002d6 0a DB 10 ; 0000000aH
+ 002d7 0a DB 10 ; 0000000aH
+ 002d8 0a DB 10 ; 0000000aH
+ 002d9 0a DB 10 ; 0000000aH
+ 002da 0a DB 10 ; 0000000aH
+ 002db 0a DB 10 ; 0000000aH
+ 002dc 0a DB 10 ; 0000000aH
+ 002dd 0a DB 10 ; 0000000aH
+ 002de 04 DB 4
+ 002df 0a DB 10 ; 0000000aH
+ 002e0 0a DB 10 ; 0000000aH
+ 002e1 0a DB 10 ; 0000000aH
+ 002e2 0a DB 10 ; 0000000aH
+ 002e3 05 DB 5
+ 002e4 0a DB 10 ; 0000000aH
+ 002e5 06 DB 6
+ 002e6 0a DB 10 ; 0000000aH
+ 002e7 0a DB 10 ; 0000000aH
+ 002e8 0a DB 10 ; 0000000aH
+ 002e9 0a DB 10 ; 0000000aH
+ 002ea 0a DB 10 ; 0000000aH
+ 002eb 0a DB 10 ; 0000000aH
+ 002ec 0a DB 10 ; 0000000aH
+ 002ed 0a DB 10 ; 0000000aH
+ 002ee 0a DB 10 ; 0000000aH
+ 002ef 07 DB 7
+ 002f0 0a DB 10 ; 0000000aH
+ 002f1 0a DB 10 ; 0000000aH
+ 002f2 0a DB 10 ; 0000000aH
+ 002f3 0a DB 10 ; 0000000aH
+ 002f4 08 DB 8
+ 002f5 09 DB 9
+_gz_open ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzlib.c
+; COMDAT _gzopen@8
+_TEXT SEGMENT
+_path$ = 8 ; size = 4
+_mode$ = 12 ; size = 4
+_gzopen@8 PROC ; COMDAT
+
+; 271 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 272 : return gz_open(path, -1, mode);
+
+ 00003 ff 75 0c push DWORD PTR _mode$[ebp]
+ 00006 8b 4d 08 mov ecx, DWORD PTR _path$[ebp]
+ 00009 83 ca ff or edx, -1
+ 0000c e8 00 00 00 00 call _gz_open
+ 00011 83 c4 04 add esp, 4
+
+; 273 : }
+
+ 00014 5d pop ebp
+ 00015 c2 08 00 ret 8
+_gzopen@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzlib.c
+; COMDAT _gzdopen@8
+_TEXT SEGMENT
+_fd$ = 8 ; size = 4
+_mode$ = 12 ; size = 4
+_gzdopen@8 PROC ; COMDAT
+
+; 287 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 288 : char *path; /* identifier for error messages */
+; 289 : gzFile gz;
+; 290 :
+; 291 : if (fd == -1 || (path = (char *)malloc(7 + 3 * sizeof(int))) == NULL)
+
+ 00004 8b 75 08 mov esi, DWORD PTR _fd$[ebp]
+ 00007 57 push edi
+ 00008 83 fe ff cmp esi, -1
+ 0000b 74 3f je SHORT $LN3@gzdopen
+ 0000d 6a 13 push 19 ; 00000013H
+ 0000f ff 15 00 00 00
+ 00 call DWORD PTR __imp__malloc
+ 00015 8b f8 mov edi, eax
+ 00017 83 c4 04 add esp, 4
+ 0001a 85 ff test edi, edi
+ 0001c 74 2e je SHORT $LN3@gzdopen
+
+; 293 : #if !defined(NO_snprintf) && !defined(NO_vsnprintf)
+; 294 : snprintf(path, 7 + 3 * sizeof(int), "<fd:%d>", fd); /* for debugging */
+
+ 0001e 56 push esi
+ 0001f 68 00 00 00 00 push OFFSET ??_C@_07EBNKNFJN@?$DMfd?3?$CFd?$DO?$AA@
+ 00024 6a 13 push 19 ; 00000013H
+ 00026 57 push edi
+ 00027 e8 00 00 00 00 call __snprintf
+
+; 295 : #else
+; 296 : sprintf(path, "<fd:%d>", fd); /* for debugging */
+; 297 : #endif
+; 298 : gz = gz_open(path, fd, mode);
+
+ 0002c ff 75 0c push DWORD PTR _mode$[ebp]
+ 0002f 8b d6 mov edx, esi
+ 00031 8b cf mov ecx, edi
+ 00033 e8 00 00 00 00 call _gz_open
+
+; 299 : free(path);
+
+ 00038 57 push edi
+ 00039 8b f0 mov esi, eax
+ 0003b ff 15 00 00 00
+ 00 call DWORD PTR __imp__free
+ 00041 83 c4 18 add esp, 24 ; 00000018H
+
+; 300 : return gz;
+
+ 00044 8b c6 mov eax, esi
+ 00046 5f pop edi
+ 00047 5e pop esi
+
+; 301 : }
+
+ 00048 5d pop ebp
+ 00049 c2 08 00 ret 8
+$LN3@gzdopen:
+ 0004c 5f pop edi
+
+; 292 : return NULL;
+
+ 0004d 33 c0 xor eax, eax
+ 0004f 5e pop esi
+
+; 301 : }
+
+ 00050 5d pop ebp
+ 00051 c2 08 00 ret 8
+_gzdopen@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzlib.c
+; COMDAT _gzopen_w@8
+_TEXT SEGMENT
+_path$ = 8 ; size = 4
+_mode$ = 12 ; size = 4
+_gzopen_w@8 PROC ; COMDAT
+
+; 308 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 309 : return gz_open(path, -2, mode);
+
+ 00003 ff 75 0c push DWORD PTR _mode$[ebp]
+ 00006 8b 4d 08 mov ecx, DWORD PTR _path$[ebp]
+ 00009 ba fe ff ff ff mov edx, -2 ; fffffffeH
+ 0000e e8 00 00 00 00 call _gz_open
+ 00013 83 c4 04 add esp, 4
+
+; 310 : }
+
+ 00016 5d pop ebp
+ 00017 c2 08 00 ret 8
+_gzopen_w@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzlib.c
+; COMDAT _gzbuffer@8
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_size$ = 12 ; size = 4
+_gzbuffer@8 PROC ; COMDAT
+
+; 317 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 318 : gz_statep state;
+; 319 :
+; 320 : /* get internal structure and check integrity */
+; 321 : if (file == NULL)
+
+ 00003 8b 4d 08 mov ecx, DWORD PTR _file$[ebp]
+ 00006 85 c9 test ecx, ecx
+ 00008 75 07 jne SHORT $LN2@gzbuffer
+$LN7@gzbuffer:
+
+; 322 : return -1;
+
+ 0000a 83 c8 ff or eax, -1
+
+; 336 : }
+
+ 0000d 5d pop ebp
+ 0000e c2 08 00 ret 8
+$LN2@gzbuffer:
+
+; 323 : state = (gz_statep)file;
+; 324 : if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+
+ 00011 8b 41 10 mov eax, DWORD PTR [ecx+16]
+ 00014 3d 4f 1c 00 00 cmp eax, 7247 ; 00001c4fH
+ 00019 74 07 je SHORT $LN3@gzbuffer
+ 0001b 3d b1 79 00 00 cmp eax, 31153 ; 000079b1H
+ 00020 75 e8 jne SHORT $LN7@gzbuffer
+$LN3@gzbuffer:
+
+; 325 : return -1;
+; 326 :
+; 327 : /* make sure we haven't already allocated memory */
+; 328 : if (state->size != 0)
+
+ 00022 83 79 1c 00 cmp DWORD PTR [ecx+28], 0
+ 00026 75 e2 jne SHORT $LN7@gzbuffer
+
+; 329 : return -1;
+; 330 :
+; 331 : /* check and set requested size */
+; 332 : if (size < 2)
+
+ 00028 8b 45 0c mov eax, DWORD PTR _size$[ebp]
+ 0002b ba 02 00 00 00 mov edx, 2
+ 00030 3b c2 cmp eax, edx
+ 00032 0f 42 c2 cmovb eax, edx
+
+; 333 : size = 2; /* need two bytes to check magic header */
+; 334 : state->want = size;
+
+ 00035 89 41 20 mov DWORD PTR [ecx+32], eax
+
+; 335 : return 0;
+
+ 00038 33 c0 xor eax, eax
+
+; 336 : }
+
+ 0003a 5d pop ebp
+ 0003b c2 08 00 ret 8
+_gzbuffer@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzlib.c
+; COMDAT _gzrewind@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_gzrewind@4 PROC ; COMDAT
+
+; 341 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 51 push ecx
+ 00007 56 push esi
+
+; 342 : gz_statep state;
+; 343 :
+; 344 : /* get internal structure */
+; 345 : if (file == NULL)
+
+ 00008 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 0000b 85 f6 test esi, esi
+ 0000d 74 40 je SHORT $LN4@gzrewind
+
+; 346 : return -1;
+; 347 : state = (gz_statep)file;
+; 348 :
+; 349 : /* check that we're reading and that there's no error */
+; 350 : if (state->mode != GZ_READ ||
+
+ 0000f 81 7e 10 4f 1c
+ 00 00 cmp DWORD PTR [esi+16], 7247 ; 00001c4fH
+ 00016 75 37 jne SHORT $LN4@gzrewind
+ 00018 8b 46 5c mov eax, DWORD PTR [esi+92]
+ 0001b 85 c0 test eax, eax
+ 0001d 74 05 je SHORT $LN3@gzrewind
+ 0001f 83 f8 fb cmp eax, -5 ; fffffffbH
+ 00022 75 2b jne SHORT $LN4@gzrewind
+$LN3@gzrewind:
+
+; 353 :
+; 354 : /* back up and start over */
+; 355 : if (LSEEK(state->fd, state->start, SEEK_SET) == -1)
+
+ 00024 6a 00 push 0
+ 00026 ff 76 3c push DWORD PTR [esi+60]
+ 00029 ff 76 38 push DWORD PTR [esi+56]
+ 0002c ff 76 14 push DWORD PTR [esi+20]
+ 0002f ff 15 00 00 00
+ 00 call DWORD PTR __imp___lseeki64
+ 00035 23 c2 and eax, edx
+ 00037 83 c4 10 add esp, 16 ; 00000010H
+ 0003a 83 f8 ff cmp eax, -1
+ 0003d 74 10 je SHORT $LN4@gzrewind
+
+; 356 : return -1;
+; 357 : gz_reset(state);
+
+ 0003f 8b ce mov ecx, esi
+ 00041 e8 00 00 00 00 call _gz_reset
+
+; 358 : return 0;
+
+ 00046 33 c0 xor eax, eax
+
+; 359 : }
+
+ 00048 5e pop esi
+ 00049 8b e5 mov esp, ebp
+ 0004b 5d pop ebp
+ 0004c c2 04 00 ret 4
+$LN4@gzrewind:
+
+; 351 : (state->err != Z_OK && state->err != Z_BUF_ERROR))
+; 352 : return -1;
+
+ 0004f 83 c8 ff or eax, -1
+
+; 359 : }
+
+ 00052 5e pop esi
+ 00053 8b e5 mov esp, ebp
+ 00055 5d pop ebp
+ 00056 c2 04 00 ret 4
+_gzrewind@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzlib.c
+; COMDAT _gzseek64@16
+_TEXT SEGMENT
+tv405 = 8 ; size = 8
+_offset$ = 8 ; size = 8
+_gzseek64@16 PROC ; COMDAT
+; _file$ = ecx
+; _whence$ = edx
+
+; 366 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 53 push ebx
+ 00005 56 push esi
+ 00006 8b f1 mov esi, ecx
+ 00008 57 push edi
+
+; 367 : unsigned n;
+; 368 : z_off64_t ret;
+; 369 : gz_statep state;
+; 370 :
+; 371 : /* get internal structure and check integrity */
+; 372 : if (file == NULL)
+
+ 00009 85 f6 test esi, esi
+ 0000b 75 0d jne SHORT $LN2@gzseek64
+$LN26@gzseek64:
+
+; 373 : return -1;
+
+ 0000d 83 c8 ff or eax, -1
+ 00010 0b d0 or edx, eax
+
+; 436 : }
+
+ 00012 5f pop edi
+ 00013 5e pop esi
+ 00014 5b pop ebx
+ 00015 59 pop ecx
+ 00016 5d pop ebp
+ 00017 c2 08 00 ret 8
+$LN2@gzseek64:
+
+; 374 : state = (gz_statep)file;
+; 375 : if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+
+ 0001a 8b 4e 10 mov ecx, DWORD PTR [esi+16]
+ 0001d 81 f9 4f 1c 00
+ 00 cmp ecx, 7247 ; 00001c4fH
+ 00023 74 08 je SHORT $LN3@gzseek64
+ 00025 81 f9 b1 79 00
+ 00 cmp ecx, 31153 ; 000079b1H
+ 0002b 75 e0 jne SHORT $LN26@gzseek64
+$LN3@gzseek64:
+
+; 376 : return -1;
+; 377 :
+; 378 : /* check that there's no error */
+; 379 : if (state->err != Z_OK && state->err != Z_BUF_ERROR)
+
+ 0002d 8b 46 5c mov eax, DWORD PTR [esi+92]
+ 00030 85 c0 test eax, eax
+ 00032 74 05 je SHORT $LN4@gzseek64
+ 00034 83 f8 fb cmp eax, -5 ; fffffffbH
+ 00037 75 d4 jne SHORT $LN26@gzseek64
+$LN4@gzseek64:
+
+; 380 : return -1;
+; 381 :
+; 382 : /* can only seek from start or relative to current position */
+; 383 : if (whence != SEEK_SET && whence != SEEK_CUR)
+
+ 00039 85 d2 test edx, edx
+ 0003b 74 19 je SHORT $LN20@gzseek64
+ 0003d 83 fa 01 cmp edx, 1
+ 00040 75 cb jne SHORT $LN26@gzseek64
+
+; 389 : else if (state->seek)
+
+ 00042 83 7e 58 00 cmp DWORD PTR [esi+88], 0
+
+; 390 : offset += state->skip;
+
+ 00046 8b 7d 08 mov edi, DWORD PTR _offset$[ebp]
+ 00049 8b 5d 0c mov ebx, DWORD PTR _offset$[ebp+4]
+ 0004c 74 14 je SHORT $LN8@gzseek64
+ 0004e 03 7e 50 add edi, DWORD PTR [esi+80]
+ 00051 13 5e 54 adc ebx, DWORD PTR [esi+84]
+ 00054 eb 0c jmp SHORT $LN8@gzseek64
+$LN20@gzseek64:
+
+; 384 : return -1;
+; 385 :
+; 386 : /* normalize offset to a SEEK_CUR specification */
+; 387 : if (whence == SEEK_SET)
+; 388 : offset -= state->x.pos;
+
+ 00056 8b 7d 08 mov edi, DWORD PTR _offset$[ebp]
+ 00059 2b 7e 08 sub edi, DWORD PTR [esi+8]
+ 0005c 8b 5d 0c mov ebx, DWORD PTR _offset$[ebp+4]
+ 0005f 1b 5e 0c sbb ebx, DWORD PTR [esi+12]
+$LN8@gzseek64:
+
+; 391 : state->seek = 0;
+
+ 00062 c7 46 58 00 00
+ 00 00 mov DWORD PTR [esi+88], 0
+
+; 392 :
+; 393 : /* if within raw area while reading, just go there */
+; 394 : if (state->mode == GZ_READ && state->how == COPY &&
+
+ 00069 81 f9 4f 1c 00
+ 00 cmp ecx, 7247 ; 00001c4fH
+ 0006f 0f 85 83 00 00
+ 00 jne $LN9@gzseek64
+ 00075 83 7e 30 01 cmp DWORD PTR [esi+48], 1
+ 00079 75 7d jne SHORT $LN9@gzseek64
+ 0007b 8b d7 mov edx, edi
+ 0007d 8b c3 mov eax, ebx
+ 0007f 03 56 08 add edx, DWORD PTR [esi+8]
+ 00082 13 46 0c adc eax, DWORD PTR [esi+12]
+ 00085 89 45 0c mov DWORD PTR tv405[ebp+4], eax
+ 00088 78 6e js SHORT $LN9@gzseek64
+ 0008a 7f 04 jg SHORT $LN21@gzseek64
+ 0008c 85 d2 test edx, edx
+ 0008e 72 68 jb SHORT $LN9@gzseek64
+$LN21@gzseek64:
+
+; 395 : state->x.pos + offset >= 0) {
+; 396 : ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR);
+
+ 00090 8b cf mov ecx, edi
+ 00092 8b c3 mov eax, ebx
+ 00094 2b 0e sub ecx, DWORD PTR [esi]
+ 00096 6a 01 push 1
+ 00098 83 d8 00 sbb eax, 0
+ 0009b 50 push eax
+ 0009c 51 push ecx
+ 0009d ff 76 14 push DWORD PTR [esi+20]
+ 000a0 ff 15 00 00 00
+ 00 call DWORD PTR __imp___lseeki64
+
+; 397 : if (ret == -1)
+
+ 000a6 23 c2 and eax, edx
+ 000a8 83 c4 10 add esp, 16 ; 00000010H
+ 000ab 83 f8 ff cmp eax, -1
+ 000ae 0f 84 59 ff ff
+ ff je $LN26@gzseek64
+
+; 398 : return -1;
+; 399 : state->x.have = 0;
+; 400 : state->eof = 0;
+; 401 : state->past = 0;
+; 402 : state->seek = 0;
+; 403 : gz_error(state, Z_OK, NULL);
+
+ 000b4 6a 00 push 0
+ 000b6 33 d2 xor edx, edx
+ 000b8 c7 06 00 00 00
+ 00 mov DWORD PTR [esi], 0
+ 000be 8b ce mov ecx, esi
+ 000c0 c7 46 40 00 00
+ 00 00 mov DWORD PTR [esi+64], 0
+ 000c7 c7 46 44 00 00
+ 00 00 mov DWORD PTR [esi+68], 0
+ 000ce c7 46 58 00 00
+ 00 00 mov DWORD PTR [esi+88], 0
+ 000d5 e8 00 00 00 00 call _gz_error
+ 000da 83 c4 04 add esp, 4
+
+; 404 : state->strm.avail_in = 0;
+
+ 000dd c7 46 68 00 00
+ 00 00 mov DWORD PTR [esi+104], 0
+
+; 405 : state->x.pos += offset;
+
+ 000e4 01 7e 08 add DWORD PTR [esi+8], edi
+
+; 406 : return state->x.pos;
+
+ 000e7 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 000ea 11 5e 0c adc DWORD PTR [esi+12], ebx
+ 000ed 8b 56 0c mov edx, DWORD PTR [esi+12]
+
+; 436 : }
+
+ 000f0 5f pop edi
+ 000f1 5e pop esi
+ 000f2 5b pop ebx
+ 000f3 59 pop ecx
+ 000f4 5d pop ebp
+ 000f5 c2 08 00 ret 8
+$LN9@gzseek64:
+
+; 407 : }
+; 408 :
+; 409 : /* calculate skip amount, rewinding if needed for back seek when reading */
+; 410 : if (offset < 0) {
+
+ 000f8 85 db test ebx, ebx
+ 000fa 7f 39 jg SHORT $LN14@gzseek64
+ 000fc 7c 04 jl SHORT $LN22@gzseek64
+ 000fe 85 ff test edi, edi
+ 00100 73 33 jae SHORT $LN14@gzseek64
+$LN22@gzseek64:
+
+; 411 : if (state->mode != GZ_READ) /* writing -- can't go backwards */
+
+ 00102 81 f9 4f 1c 00
+ 00 cmp ecx, 7247 ; 00001c4fH
+ 00108 0f 85 ff fe ff
+ ff jne $LN26@gzseek64
+
+; 412 : return -1;
+; 413 : offset += state->x.pos;
+
+ 0010e 03 7e 08 add edi, DWORD PTR [esi+8]
+ 00111 13 5e 0c adc ebx, DWORD PTR [esi+12]
+
+; 414 : if (offset < 0) /* before start of file! */
+
+ 00114 85 db test ebx, ebx
+ 00116 7f 0e jg SHORT $LN13@gzseek64
+ 00118 0f 8c ef fe ff
+ ff jl $LN26@gzseek64
+ 0011e 85 ff test edi, edi
+ 00120 0f 82 e7 fe ff
+ ff jb $LN26@gzseek64
+$LN13@gzseek64:
+
+; 415 : return -1;
+; 416 : if (gzrewind(file) == -1) /* rewind, then skip to offset */
+
+ 00126 56 push esi
+ 00127 e8 00 00 00 00 call _gzrewind@4
+ 0012c 83 f8 ff cmp eax, -1
+ 0012f 0f 84 d8 fe ff
+ ff je $LN26@gzseek64
+$LN14@gzseek64:
+
+; 417 : return -1;
+; 418 : }
+; 419 :
+; 420 : /* if reading, skip what's in output buffer (one less gzgetc() check) */
+; 421 : if (state->mode == GZ_READ) {
+
+ 00135 81 7e 10 4f 1c
+ 00 00 cmp DWORD PTR [esi+16], 7247 ; 00001c4fH
+ 0013c 75 27 jne SHORT $LN15@gzseek64
+
+; 422 : n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > offset ?
+
+ 0013e 8b 06 mov eax, DWORD PTR [esi]
+ 00140 33 c9 xor ecx, ecx
+ 00142 3b cb cmp ecx, ebx
+ 00144 7f 0a jg SHORT $LN18@gzseek64
+ 00146 7c 04 jl SHORT $LN24@gzseek64
+ 00148 3b c7 cmp eax, edi
+ 0014a 77 04 ja SHORT $LN18@gzseek64
+$LN24@gzseek64:
+ 0014c 8b c8 mov ecx, eax
+ 0014e eb 02 jmp SHORT $LN19@gzseek64
+$LN18@gzseek64:
+ 00150 8b cf mov ecx, edi
+$LN19@gzseek64:
+
+; 423 : (unsigned)offset : state->x.have;
+; 424 : state->x.have -= n;
+; 425 : state->x.next += n;
+
+ 00152 01 4e 04 add DWORD PTR [esi+4], ecx
+ 00155 2b c1 sub eax, ecx
+
+; 426 : state->x.pos += n;
+
+ 00157 01 4e 08 add DWORD PTR [esi+8], ecx
+ 0015a 89 06 mov DWORD PTR [esi], eax
+ 0015c 83 56 0c 00 adc DWORD PTR [esi+12], 0
+
+; 427 : offset -= n;
+
+ 00160 2b f9 sub edi, ecx
+ 00162 83 db 00 sbb ebx, 0
+$LN15@gzseek64:
+
+; 428 : }
+; 429 :
+; 430 : /* request skip (if not zero) */
+; 431 : if (offset) {
+
+ 00165 8b c7 mov eax, edi
+ 00167 0b c3 or eax, ebx
+ 00169 74 0d je SHORT $LN16@gzseek64
+
+; 432 : state->seek = 1;
+
+ 0016b c7 46 58 01 00
+ 00 00 mov DWORD PTR [esi+88], 1
+
+; 433 : state->skip = offset;
+
+ 00172 89 7e 50 mov DWORD PTR [esi+80], edi
+ 00175 89 5e 54 mov DWORD PTR [esi+84], ebx
+$LN16@gzseek64:
+
+; 434 : }
+; 435 : return state->x.pos + offset;
+
+ 00178 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 0017b 8b 56 0c mov edx, DWORD PTR [esi+12]
+ 0017e 03 c7 add eax, edi
+
+; 436 : }
+
+ 00180 5f pop edi
+ 00181 5e pop esi
+ 00182 13 d3 adc edx, ebx
+ 00184 5b pop ebx
+ 00185 59 pop ecx
+ 00186 5d pop ebp
+ 00187 c2 08 00 ret 8
+_gzseek64@16 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzlib.c
+; COMDAT _gzseek@12
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_offset$ = 12 ; size = 4
+_whence$ = 16 ; size = 4
+_gzseek@12 PROC ; COMDAT
+
+; 443 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 51 push ecx
+
+; 444 : z_off64_t ret;
+; 445 :
+; 446 : ret = gzseek64(file, (z_off64_t)offset, whence);
+
+ 00007 8b 45 0c mov eax, DWORD PTR _offset$[ebp]
+ 0000a 8b 4d 08 mov ecx, DWORD PTR _file$[ebp]
+ 0000d 99 cdq
+ 0000e 56 push esi
+ 0000f 52 push edx
+ 00010 8b 55 10 mov edx, DWORD PTR _whence$[ebp]
+ 00013 50 push eax
+ 00014 e8 00 00 00 00 call _gzseek64@16
+ 00019 8b c8 mov ecx, eax
+ 0001b 8b f2 mov esi, edx
+
+; 447 : return ret == (z_off_t)ret ? (z_off_t)ret : -1;
+
+ 0001d 99 cdq
+ 0001e 3b c8 cmp ecx, eax
+ 00020 75 0d jne SHORT $LN3@gzseek
+ 00022 3b f2 cmp esi, edx
+ 00024 75 09 jne SHORT $LN3@gzseek
+ 00026 8b c1 mov eax, ecx
+
+; 448 : }
+
+ 00028 5e pop esi
+ 00029 8b e5 mov esp, ebp
+ 0002b 5d pop ebp
+ 0002c c2 0c 00 ret 12 ; 0000000cH
+$LN3@gzseek:
+
+; 447 : return ret == (z_off_t)ret ? (z_off_t)ret : -1;
+
+ 0002f 83 c8 ff or eax, -1
+
+; 448 : }
+
+ 00032 5e pop esi
+ 00033 8b e5 mov esp, ebp
+ 00035 5d pop ebp
+ 00036 c2 0c 00 ret 12 ; 0000000cH
+_gzseek@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzlib.c
+; COMDAT _gztell64@4
+_TEXT SEGMENT
+tv73 = -8 ; size = 8
+_gztell64@4 PROC ; COMDAT
+; _file$ = ecx
+
+; 453 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 08 sub esp, 8
+
+; 454 : gz_statep state;
+; 455 :
+; 456 : /* get internal structure and check integrity */
+; 457 : if (file == NULL)
+
+ 00006 85 c9 test ecx, ecx
+ 00008 75 09 jne SHORT $LN2@gztell64
+$LN7@gztell64:
+
+; 458 : return -1;
+
+ 0000a 83 c8 ff or eax, -1
+ 0000d 0b d0 or edx, eax
+
+; 465 : }
+
+ 0000f 8b e5 mov esp, ebp
+ 00011 5d pop ebp
+ 00012 c3 ret 0
+$LN2@gztell64:
+
+; 459 : state = (gz_statep)file;
+; 460 : if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+
+ 00013 8b 41 10 mov eax, DWORD PTR [ecx+16]
+ 00016 3d 4f 1c 00 00 cmp eax, 7247 ; 00001c4fH
+ 0001b 74 07 je SHORT $LN3@gztell64
+ 0001d 3d b1 79 00 00 cmp eax, 31153 ; 000079b1H
+ 00022 75 e6 jne SHORT $LN7@gztell64
+$LN3@gztell64:
+
+; 461 : return -1;
+; 462 :
+; 463 : /* return position */
+; 464 : return state->x.pos + (state->seek ? state->skip : 0);
+
+ 00024 83 79 58 00 cmp DWORD PTR [ecx+88], 0
+ 00028 56 push esi
+ 00029 74 15 je SHORT $LN5@gztell64
+ 0002b 8b 51 50 mov edx, DWORD PTR [ecx+80]
+ 0002e 8b 41 08 mov eax, DWORD PTR [ecx+8]
+ 00031 8b 71 54 mov esi, DWORD PTR [ecx+84]
+ 00034 03 c2 add eax, edx
+ 00036 8b 51 0c mov edx, DWORD PTR [ecx+12]
+ 00039 13 d6 adc edx, esi
+ 0003b 5e pop esi
+
+; 465 : }
+
+ 0003c 8b e5 mov esp, ebp
+ 0003e 5d pop ebp
+ 0003f c3 ret 0
+$LN5@gztell64:
+
+; 461 : return -1;
+; 462 :
+; 463 : /* return position */
+; 464 : return state->x.pos + (state->seek ? state->skip : 0);
+
+ 00040 8b 41 08 mov eax, DWORD PTR [ecx+8]
+ 00043 0f 57 c0 xorps xmm0, xmm0
+ 00046 66 0f 13 45 f8 movlpd QWORD PTR tv73[ebp], xmm0
+ 0004b 8b 55 f8 mov edx, DWORD PTR tv73[ebp]
+ 0004e 03 c2 add eax, edx
+ 00050 8b 75 fc mov esi, DWORD PTR tv73[ebp+4]
+ 00053 8b 51 0c mov edx, DWORD PTR [ecx+12]
+ 00056 13 d6 adc edx, esi
+ 00058 5e pop esi
+
+; 465 : }
+
+ 00059 8b e5 mov esp, ebp
+ 0005b 5d pop ebp
+ 0005c c3 ret 0
+_gztell64@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzlib.c
+; COMDAT _gztell@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_gztell@4 PROC ; COMDAT
+
+; 470 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 471 : z_off64_t ret;
+; 472 :
+; 473 : ret = gztell64(file);
+
+ 00003 8b 4d 08 mov ecx, DWORD PTR _file$[ebp]
+ 00006 56 push esi
+ 00007 e8 00 00 00 00 call _gztell64@4
+ 0000c 8b c8 mov ecx, eax
+ 0000e 8b f2 mov esi, edx
+
+; 474 : return ret == (z_off_t)ret ? (z_off_t)ret : -1;
+
+ 00010 99 cdq
+ 00011 3b c8 cmp ecx, eax
+ 00013 75 0b jne SHORT $LN3@gztell
+ 00015 3b f2 cmp esi, edx
+ 00017 75 07 jne SHORT $LN3@gztell
+ 00019 8b c1 mov eax, ecx
+ 0001b 5e pop esi
+
+; 475 : }
+
+ 0001c 5d pop ebp
+ 0001d c2 04 00 ret 4
+$LN3@gztell:
+
+; 474 : return ret == (z_off_t)ret ? (z_off_t)ret : -1;
+
+ 00020 83 c8 ff or eax, -1
+ 00023 5e pop esi
+
+; 475 : }
+
+ 00024 5d pop ebp
+ 00025 c2 04 00 ret 4
+_gztell@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzlib.c
+; COMDAT _gzoffset64@4
+_TEXT SEGMENT
+_gzoffset64@4 PROC ; COMDAT
+; _file$ = ecx
+
+; 480 : {
+
+ 00000 56 push esi
+ 00001 8b f1 mov esi, ecx
+
+; 481 : z_off64_t offset;
+; 482 : gz_statep state;
+; 483 :
+; 484 : /* get internal structure and check integrity */
+; 485 : if (file == NULL)
+
+ 00003 85 f6 test esi, esi
+ 00005 75 07 jne SHORT $LN2@gzoffset64
+$LN7@gzoffset64:
+
+; 486 : return -1;
+
+ 00007 83 c8 ff or eax, -1
+ 0000a 0b d0 or edx, eax
+
+; 497 : return offset;
+; 498 : }
+
+ 0000c 5e pop esi
+ 0000d c3 ret 0
+$LN2@gzoffset64:
+
+; 487 : state = (gz_statep)file;
+; 488 : if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+
+ 0000e 8b 46 10 mov eax, DWORD PTR [esi+16]
+ 00011 3d 4f 1c 00 00 cmp eax, 7247 ; 00001c4fH
+ 00016 74 07 je SHORT $LN3@gzoffset64
+ 00018 3d b1 79 00 00 cmp eax, 31153 ; 000079b1H
+ 0001d 75 e8 jne SHORT $LN7@gzoffset64
+$LN3@gzoffset64:
+
+; 489 : return -1;
+; 490 :
+; 491 : /* compute and return effective offset in file */
+; 492 : offset = LSEEK(state->fd, 0, SEEK_CUR);
+
+ 0001f 6a 01 push 1
+ 00021 6a 00 push 0
+ 00023 6a 00 push 0
+ 00025 ff 76 14 push DWORD PTR [esi+20]
+ 00028 ff 15 00 00 00
+ 00 call DWORD PTR __imp___lseeki64
+
+; 493 : if (offset == -1)
+
+ 0002e 8b c8 mov ecx, eax
+ 00030 83 c4 10 add esp, 16 ; 00000010H
+ 00033 23 ca and ecx, edx
+ 00035 83 f9 ff cmp ecx, -1
+ 00038 74 cd je SHORT $LN7@gzoffset64
+
+; 494 : return -1;
+; 495 : if (state->mode == GZ_READ) /* reading */
+
+ 0003a 81 7e 10 4f 1c
+ 00 00 cmp DWORD PTR [esi+16], 7247 ; 00001c4fH
+ 00041 75 06 jne SHORT $LN1@gzoffset64
+
+; 496 : offset -= state->strm.avail_in; /* don't count buffered input */
+
+ 00043 2b 46 68 sub eax, DWORD PTR [esi+104]
+ 00046 83 da 00 sbb edx, 0
+$LN1@gzoffset64:
+
+; 497 : return offset;
+; 498 : }
+
+ 00049 5e pop esi
+ 0004a c3 ret 0
+_gzoffset64@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzlib.c
+; COMDAT _gzoffset@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_gzoffset@4 PROC ; COMDAT
+
+; 503 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 51 push ecx
+
+; 504 : z_off64_t ret;
+; 505 :
+; 506 : ret = gzoffset64(file);
+
+ 00007 8b 4d 08 mov ecx, DWORD PTR _file$[ebp]
+ 0000a 56 push esi
+ 0000b e8 00 00 00 00 call _gzoffset64@4
+ 00010 8b c8 mov ecx, eax
+ 00012 8b f2 mov esi, edx
+
+; 507 : return ret == (z_off_t)ret ? (z_off_t)ret : -1;
+
+ 00014 99 cdq
+ 00015 3b c8 cmp ecx, eax
+ 00017 75 0d jne SHORT $LN3@gzoffset
+ 00019 3b f2 cmp esi, edx
+ 0001b 75 09 jne SHORT $LN3@gzoffset
+ 0001d 8b c1 mov eax, ecx
+
+; 508 : }
+
+ 0001f 5e pop esi
+ 00020 8b e5 mov esp, ebp
+ 00022 5d pop ebp
+ 00023 c2 04 00 ret 4
+$LN3@gzoffset:
+
+; 507 : return ret == (z_off_t)ret ? (z_off_t)ret : -1;
+
+ 00026 83 c8 ff or eax, -1
+
+; 508 : }
+
+ 00029 5e pop esi
+ 0002a 8b e5 mov esp, ebp
+ 0002c 5d pop ebp
+ 0002d c2 04 00 ret 4
+_gzoffset@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzlib.c
+; COMDAT _gzeof@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_gzeof@4 PROC ; COMDAT
+
+; 513 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 514 : gz_statep state;
+; 515 :
+; 516 : /* get internal structure and check integrity */
+; 517 : if (file == NULL)
+
+ 00003 8b 45 08 mov eax, DWORD PTR _file$[ebp]
+ 00006 85 c0 test eax, eax
+ 00008 74 22 je SHORT $LN5@gzeof
+
+; 518 : return 0;
+; 519 : state = (gz_statep)file;
+; 520 : if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+
+ 0000a 8b 48 10 mov ecx, DWORD PTR [eax+16]
+ 0000d 81 f9 4f 1c 00
+ 00 cmp ecx, 7247 ; 00001c4fH
+ 00013 74 10 je SHORT $LN8@gzeof
+ 00015 81 f9 b1 79 00
+ 00 cmp ecx, 31153 ; 000079b1H
+ 0001b 75 0f jne SHORT $LN5@gzeof
+
+; 521 : return 0;
+; 522 :
+; 523 : /* return end-of-file state */
+; 524 : return state->mode == GZ_READ ? state->past : 0;
+
+ 0001d 81 f9 4f 1c 00
+ 00 cmp ecx, 7247 ; 00001c4fH
+ 00023 75 07 jne SHORT $LN5@gzeof
+$LN8@gzeof:
+ 00025 8b 40 44 mov eax, DWORD PTR [eax+68]
+
+; 525 : }
+
+ 00028 5d pop ebp
+ 00029 c2 04 00 ret 4
+$LN5@gzeof:
+
+; 521 : return 0;
+; 522 :
+; 523 : /* return end-of-file state */
+; 524 : return state->mode == GZ_READ ? state->past : 0;
+
+ 0002c 33 c0 xor eax, eax
+
+; 525 : }
+
+ 0002e 5d pop ebp
+ 0002f c2 04 00 ret 4
+_gzeof@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzlib.c
+; COMDAT _gzerror@8
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_errnum$ = 12 ; size = 4
+_gzerror@8 PROC ; COMDAT
+
+; 531 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 532 : gz_statep state;
+; 533 :
+; 534 : /* get internal structure and check integrity */
+; 535 : if (file == NULL)
+
+ 00003 8b 4d 08 mov ecx, DWORD PTR _file$[ebp]
+ 00006 85 c9 test ecx, ecx
+ 00008 75 06 jne SHORT $LN2@gzerror
+$LN10@gzerror:
+
+; 536 : return NULL;
+
+ 0000a 33 c0 xor eax, eax
+
+; 545 : (state->msg == NULL ? "" : state->msg);
+; 546 : }
+
+ 0000c 5d pop ebp
+ 0000d c2 08 00 ret 8
+$LN2@gzerror:
+
+; 537 : state = (gz_statep)file;
+; 538 : if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+
+ 00010 8b 41 10 mov eax, DWORD PTR [ecx+16]
+ 00013 3d 4f 1c 00 00 cmp eax, 7247 ; 00001c4fH
+ 00018 74 07 je SHORT $LN3@gzerror
+ 0001a 3d b1 79 00 00 cmp eax, 31153 ; 000079b1H
+ 0001f 75 e9 jne SHORT $LN10@gzerror
+$LN3@gzerror:
+
+; 539 : return NULL;
+; 540 :
+; 541 : /* return error information */
+; 542 : if (errnum != NULL)
+
+ 00021 8b 55 0c mov edx, DWORD PTR _errnum$[ebp]
+ 00024 85 d2 test edx, edx
+ 00026 74 05 je SHORT $LN4@gzerror
+
+; 543 : *errnum = state->err;
+
+ 00028 8b 41 5c mov eax, DWORD PTR [ecx+92]
+ 0002b 89 02 mov DWORD PTR [edx], eax
+$LN4@gzerror:
+
+; 544 : return state->err == Z_MEM_ERROR ? "out of memory" :
+
+ 0002d 83 79 5c fc cmp DWORD PTR [ecx+92], -4 ; fffffffcH
+ 00031 75 09 jne SHORT $LN8@gzerror
+ 00033 b8 00 00 00 00 mov eax, OFFSET ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@
+
+; 545 : (state->msg == NULL ? "" : state->msg);
+; 546 : }
+
+ 00038 5d pop ebp
+ 00039 c2 08 00 ret 8
+$LN8@gzerror:
+
+; 544 : return state->err == Z_MEM_ERROR ? "out of memory" :
+
+ 0003c 8b 49 60 mov ecx, DWORD PTR [ecx+96]
+ 0003f b8 00 00 00 00 mov eax, OFFSET ??_C@_00CNPNBAHC@?$AA@
+ 00044 85 c9 test ecx, ecx
+ 00046 0f 45 c1 cmovne eax, ecx
+
+; 545 : (state->msg == NULL ? "" : state->msg);
+; 546 : }
+
+ 00049 5d pop ebp
+ 0004a c2 08 00 ret 8
+_gzerror@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzlib.c
+; COMDAT _gzclearerr@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_gzclearerr@4 PROC ; COMDAT
+
+; 551 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 552 : gz_statep state;
+; 553 :
+; 554 : /* get internal structure and check integrity */
+; 555 : if (file == NULL)
+
+ 00003 8b 4d 08 mov ecx, DWORD PTR _file$[ebp]
+ 00006 85 c9 test ecx, ecx
+ 00008 74 32 je SHORT $LN1@gzclearerr
+
+; 556 : return;
+; 557 : state = (gz_statep)file;
+; 558 : if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+
+ 0000a 8b 41 10 mov eax, DWORD PTR [ecx+16]
+ 0000d 3d 4f 1c 00 00 cmp eax, 7247 ; 00001c4fH
+ 00012 74 0e je SHORT $LN7@gzclearerr
+ 00014 3d b1 79 00 00 cmp eax, 31153 ; 000079b1H
+ 00019 75 21 jne SHORT $LN1@gzclearerr
+
+; 559 : return;
+; 560 :
+; 561 : /* clear error and end-of-file */
+; 562 : if (state->mode == GZ_READ) {
+
+ 0001b 3d 4f 1c 00 00 cmp eax, 7247 ; 00001c4fH
+ 00020 75 0e jne SHORT $LN4@gzclearerr
+$LN7@gzclearerr:
+
+; 563 : state->eof = 0;
+
+ 00022 c7 41 40 00 00
+ 00 00 mov DWORD PTR [ecx+64], 0
+
+; 564 : state->past = 0;
+
+ 00029 c7 41 44 00 00
+ 00 00 mov DWORD PTR [ecx+68], 0
+$LN4@gzclearerr:
+
+; 565 : }
+; 566 : gz_error(state, Z_OK, NULL);
+
+ 00030 6a 00 push 0
+ 00032 33 d2 xor edx, edx
+ 00034 e8 00 00 00 00 call _gz_error
+ 00039 83 c4 04 add esp, 4
+$LN1@gzclearerr:
+
+; 567 : }
+
+ 0003c 5d pop ebp
+ 0003d c2 04 00 ret 4
+_gzclearerr@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzlib.c
+; COMDAT _gz_error
+_TEXT SEGMENT
+tv144 = 8 ; size = 4
+_msg$ = 8 ; size = 4
+_gz_error PROC ; COMDAT
+; _state$ = ecx
+; _err$ = edx
+
+; 579 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 53 push ebx
+ 00004 56 push esi
+ 00005 8b f1 mov esi, ecx
+ 00007 57 push edi
+ 00008 8b fa mov edi, edx
+
+; 580 : /* free previously allocated message and clear */
+; 581 : if (state->msg != NULL) {
+
+ 0000a 8b 46 60 mov eax, DWORD PTR [esi+96]
+ 0000d 85 c0 test eax, eax
+ 0000f 74 17 je SHORT $LN2@gz_error
+
+; 582 : if (state->err != Z_MEM_ERROR)
+
+ 00011 83 7e 5c fc cmp DWORD PTR [esi+92], -4 ; fffffffcH
+ 00015 74 0a je SHORT $LN3@gz_error
+
+; 583 : free(state->msg);
+
+ 00017 50 push eax
+ 00018 ff 15 00 00 00
+ 00 call DWORD PTR __imp__free
+ 0001e 83 c4 04 add esp, 4
+$LN3@gz_error:
+
+; 584 : state->msg = NULL;
+
+ 00021 c7 46 60 00 00
+ 00 00 mov DWORD PTR [esi+96], 0
+$LN2@gz_error:
+
+; 585 : }
+; 586 :
+; 587 : /* if fatal, set state->x.have to 0 so that the gzgetc() macro fails */
+; 588 : if (err != Z_OK && err != Z_BUF_ERROR)
+
+ 00028 85 ff test edi, edi
+ 0002a 74 0b je SHORT $LN4@gz_error
+ 0002c 83 ff fb cmp edi, -5 ; fffffffbH
+ 0002f 74 06 je SHORT $LN4@gz_error
+
+; 589 : state->x.have = 0;
+
+ 00031 c7 06 00 00 00
+ 00 mov DWORD PTR [esi], 0
+$LN4@gz_error:
+
+; 590 :
+; 591 : /* set error code, and if no message, then done */
+; 592 : state->err = err;
+; 593 : if (msg == NULL)
+
+ 00037 8b 5d 08 mov ebx, DWORD PTR _msg$[ebp]
+ 0003a 89 7e 5c mov DWORD PTR [esi+92], edi
+ 0003d 85 db test ebx, ebx
+ 0003f 0f 84 87 00 00
+ 00 je $LN1@gz_error
+
+; 594 : return;
+; 595 :
+; 596 : /* for an out of memory error, return literal string when requested */
+; 597 : if (err == Z_MEM_ERROR)
+
+ 00045 83 ff fc cmp edi, -4 ; fffffffcH
+ 00048 0f 84 7e 00 00
+ 00 je $LN1@gz_error
+
+; 598 : return;
+; 599 :
+; 600 : /* construct error message with path */
+; 601 : if ((state->msg = (char *)malloc(strlen(state->path) + strlen(msg) + 3)) ==
+
+ 0004e 8b 4e 18 mov ecx, DWORD PTR [esi+24]
+ 00051 8d 51 01 lea edx, DWORD PTR [ecx+1]
+$LL9@gz_error:
+ 00054 8a 01 mov al, BYTE PTR [ecx]
+ 00056 41 inc ecx
+ 00057 84 c0 test al, al
+ 00059 75 f9 jne SHORT $LL9@gz_error
+ 0005b 2b ca sub ecx, edx
+ 0005d 8b d3 mov edx, ebx
+ 0005f 8d 7a 01 lea edi, DWORD PTR [edx+1]
+$LL10@gz_error:
+ 00062 8a 02 mov al, BYTE PTR [edx]
+ 00064 42 inc edx
+ 00065 84 c0 test al, al
+ 00067 75 f9 jne SHORT $LL10@gz_error
+ 00069 2b d7 sub edx, edi
+ 0006b 8d 41 03 lea eax, DWORD PTR [ecx+3]
+ 0006e 03 c2 add eax, edx
+ 00070 50 push eax
+ 00071 ff 15 00 00 00
+ 00 call DWORD PTR __imp__malloc
+ 00077 83 c4 04 add esp, 4
+ 0007a 89 45 08 mov DWORD PTR tv144[ebp], eax
+ 0007d 89 46 60 mov DWORD PTR [esi+96], eax
+ 00080 85 c0 test eax, eax
+ 00082 75 0c jne SHORT $LN7@gz_error
+
+; 602 : NULL) {
+; 603 : state->err = Z_MEM_ERROR;
+
+ 00084 5f pop edi
+ 00085 c7 46 5c fc ff
+ ff ff mov DWORD PTR [esi+92], -4 ; fffffffcH
+ 0008c 5e pop esi
+ 0008d 5b pop ebx
+
+; 608 : "%s%s%s", state->path, ": ", msg);
+; 609 : #else
+; 610 : strcpy(state->msg, state->path);
+; 611 : strcat(state->msg, ": ");
+; 612 : strcat(state->msg, msg);
+; 613 : #endif
+; 614 : return;
+; 615 : }
+
+ 0008e 5d pop ebp
+ 0008f c3 ret 0
+$LN7@gz_error:
+
+; 604 : return;
+; 605 : }
+; 606 : #if !defined(NO_snprintf) && !defined(NO_vsnprintf)
+; 607 : snprintf(state->msg, strlen(state->path) + strlen(msg) + 3,
+
+ 00090 8b 76 18 mov esi, DWORD PTR [esi+24]
+ 00093 8b ce mov ecx, esi
+ 00095 8d 51 01 lea edx, DWORD PTR [ecx+1]
+$LL11@gz_error:
+ 00098 8a 01 mov al, BYTE PTR [ecx]
+ 0009a 41 inc ecx
+ 0009b 84 c0 test al, al
+ 0009d 75 f9 jne SHORT $LL11@gz_error
+ 0009f 2b ca sub ecx, edx
+ 000a1 8b d3 mov edx, ebx
+ 000a3 8d 7a 01 lea edi, DWORD PTR [edx+1]
+$LL12@gz_error:
+ 000a6 8a 02 mov al, BYTE PTR [edx]
+ 000a8 42 inc edx
+ 000a9 84 c0 test al, al
+ 000ab 75 f9 jne SHORT $LL12@gz_error
+ 000ad 53 push ebx
+ 000ae 68 00 00 00 00 push OFFSET ??_C@_02LMMGGCAJ@?3?5?$AA@
+ 000b3 56 push esi
+ 000b4 2b d7 sub edx, edi
+ 000b6 8d 41 03 lea eax, DWORD PTR [ecx+3]
+ 000b9 68 00 00 00 00 push OFFSET ??_C@_06DIJPEION@?$CFs?$CFs?$CFs?$AA@
+ 000be 03 c2 add eax, edx
+ 000c0 50 push eax
+ 000c1 ff 75 08 push DWORD PTR tv144[ebp]
+ 000c4 e8 00 00 00 00 call __snprintf
+ 000c9 83 c4 18 add esp, 24 ; 00000018H
+$LN1@gz_error:
+ 000cc 5f pop edi
+ 000cd 5e pop esi
+ 000ce 5b pop ebx
+
+; 608 : "%s%s%s", state->path, ": ", msg);
+; 609 : #else
+; 610 : strcpy(state->msg, state->path);
+; 611 : strcat(state->msg, ": ");
+; 612 : strcat(state->msg, msg);
+; 613 : #endif
+; 614 : return;
+; 615 : }
+
+ 000cf 5d pop ebp
+ 000d0 c3 ret 0
+_gz_error ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzlib.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzlib.obj
new file mode 100644
index 0000000000..21cea7b7f9
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzlib.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzread.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzread.cod
new file mode 100644
index 0000000000..72b6299a39
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzread.cod
@@ -0,0 +1,2216 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\gzread.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+PUBLIC ??_C@_0BH@CFIIDOJD@unexpected?5end?5of?5file?$AA@ ; `string'
+PUBLIC ??_C@_0CH@CPOLIEKA@internal?5error?3?5inflate?5stream?5c@ ; `string'
+PUBLIC ??_C@_0BG@HCKBMIHF@compressed?5data?5error?$AA@ ; `string'
+PUBLIC ??_C@_0CF@MLPJFDMM@requested?5length?5does?5not?5fit?5in@ ; `string'
+PUBLIC ??_C@_0BP@IIKIGMCC@out?5of?5room?5to?5push?5characters?$AA@ ; `string'
+EXTRN __imp__strerror:PROC
+EXTRN __imp__memchr:PROC
+EXTRN __imp___errno:PROC
+EXTRN __imp___close:PROC
+EXTRN __imp___read:PROC
+; COMDAT ??_C@_0BP@IIKIGMCC@out?5of?5room?5to?5push?5characters?$AA@
+CONST SEGMENT
+??_C@_0BP@IIKIGMCC@out?5of?5room?5to?5push?5characters?$AA@ DB 'out of ro'
+ DB 'om to push characters', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0CF@MLPJFDMM@requested?5length?5does?5not?5fit?5in@
+CONST SEGMENT
+??_C@_0CF@MLPJFDMM@requested?5length?5does?5not?5fit?5in@ DB 'requested l'
+ DB 'ength does not fit in int', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0BG@HCKBMIHF@compressed?5data?5error?$AA@
+CONST SEGMENT
+??_C@_0BG@HCKBMIHF@compressed?5data?5error?$AA@ DB 'compressed data error'
+ DB 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0CH@CPOLIEKA@internal?5error?3?5inflate?5stream?5c@
+CONST SEGMENT
+??_C@_0CH@CPOLIEKA@internal?5error?3?5inflate?5stream?5c@ DB 'internal er'
+ DB 'ror: inflate stream corrupt', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0BH@CFIIDOJD@unexpected?5end?5of?5file?$AA@
+CONST SEGMENT
+??_C@_0BH@CFIIDOJD@unexpected?5end?5of?5file?$AA@ DB 'unexpected end of f'
+ DB 'ile', 00H ; `string'
+PUBLIC _gzdirect@4
+PUBLIC _gzgets@12
+PUBLIC _gzungetc@8
+PUBLIC _gzgetc_@4
+PUBLIC _gzgetc@4
+PUBLIC _gzread@12
+PUBLIC _gzclose_r@4
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzread.c
+; COMDAT _gzclose_r@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_gzclose_r@4 PROC ; COMDAT
+
+; 569 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 53 push ebx
+
+; 570 : int ret, err;
+; 571 : gz_statep state;
+; 572 :
+; 573 : /* get internal structure */
+; 574 : if (file == NULL)
+
+ 00004 8b 5d 08 mov ebx, DWORD PTR _file$[ebp]
+ 00007 85 db test ebx, ebx
+ 00009 75 0a jne SHORT $LN2@gzclose_r
+$LN6@gzclose_r:
+
+; 575 : return Z_STREAM_ERROR;
+
+ 0000b b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 00010 5b pop ebx
+
+; 594 : }
+
+ 00011 5d pop ebp
+ 00012 c2 04 00 ret 4
+$LN2@gzclose_r:
+
+; 576 : state = (gz_statep)file;
+; 577 :
+; 578 : /* check that we're reading */
+; 579 : if (state->mode != GZ_READ)
+
+ 00015 81 7b 10 4f 1c
+ 00 00 cmp DWORD PTR [ebx+16], 7247 ; 00001c4fH
+ 0001c 75 ed jne SHORT $LN6@gzclose_r
+
+; 580 : return Z_STREAM_ERROR;
+; 581 :
+; 582 : /* free memory and close file */
+; 583 : if (state->size) {
+
+ 0001e 83 7b 1c 00 cmp DWORD PTR [ebx+28], 0
+ 00022 56 push esi
+ 00023 8b 35 00 00 00
+ 00 mov esi, DWORD PTR __imp__free
+ 00029 57 push edi
+ 0002a 74 16 je SHORT $LN4@gzclose_r
+
+; 584 : inflateEnd(&(state->strm));
+
+ 0002c 8d 43 64 lea eax, DWORD PTR [ebx+100]
+ 0002f 50 push eax
+ 00030 e8 00 00 00 00 call _inflateEnd@4
+
+; 585 : free(state->out);
+
+ 00035 ff 73 28 push DWORD PTR [ebx+40]
+ 00038 ff d6 call esi
+
+; 586 : free(state->in);
+
+ 0003a ff 73 24 push DWORD PTR [ebx+36]
+ 0003d ff d6 call esi
+ 0003f 83 c4 08 add esp, 8
+$LN4@gzclose_r:
+
+; 587 : }
+; 588 : err = state->err == Z_BUF_ERROR ? Z_BUF_ERROR : Z_OK;
+
+ 00042 b8 fb ff ff ff mov eax, -5 ; fffffffbH
+ 00047 33 ff xor edi, edi
+ 00049 39 43 5c cmp DWORD PTR [ebx+92], eax
+
+; 589 : gz_error(state, Z_OK, NULL);
+
+ 0004c 8b cb mov ecx, ebx
+ 0004e 6a 00 push 0
+ 00050 0f 44 f8 cmove edi, eax
+ 00053 33 d2 xor edx, edx
+ 00055 e8 00 00 00 00 call _gz_error
+
+; 590 : free(state->path);
+
+ 0005a ff 73 18 push DWORD PTR [ebx+24]
+ 0005d ff d6 call esi
+
+; 591 : ret = close(state->fd);
+
+ 0005f ff 73 14 push DWORD PTR [ebx+20]
+ 00062 ff 15 00 00 00
+ 00 call DWORD PTR __imp___close
+
+; 592 : free(state);
+
+ 00068 53 push ebx
+ 00069 8b f0 mov esi, eax
+ 0006b ff 15 00 00 00
+ 00 call DWORD PTR __imp__free
+ 00071 83 c4 10 add esp, 16 ; 00000010H
+
+; 593 : return ret ? Z_ERRNO : err;
+
+ 00074 83 c8 ff or eax, -1
+ 00077 85 f6 test esi, esi
+ 00079 0f 45 f8 cmovne edi, eax
+ 0007c 8b c7 mov eax, edi
+ 0007e 5f pop edi
+ 0007f 5e pop esi
+ 00080 5b pop ebx
+
+; 594 : }
+
+ 00081 5d pop ebp
+ 00082 c2 04 00 ret 4
+_gzclose_r@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzread.c
+; COMDAT _gz_load
+_TEXT SEGMENT
+_buf$1$ = -4 ; size = 4
+_len$ = 8 ; size = 4
+_have$ = 12 ; size = 4
+_gz_load PROC ; COMDAT
+; _state$ = ecx
+; _buf$ = edx
+
+; 25 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 53 push ebx
+ 00005 56 push esi
+
+; 26 : int ret;
+; 27 :
+; 28 : *have = 0;
+
+ 00006 8b 75 0c mov esi, DWORD PTR _have$[ebp]
+ 00009 8b d9 mov ebx, ecx
+ 0000b 57 push edi
+ 0000c 8b 7d 08 mov edi, DWORD PTR _len$[ebp]
+ 0000f 89 55 fc mov DWORD PTR _buf$1$[ebp], edx
+ 00012 c7 06 00 00 00
+ 00 mov DWORD PTR [esi], 0
+$LL4@gz_load:
+
+; 29 : do {
+; 30 : ret = read(state->fd, buf + *have, len - *have);
+
+ 00018 8b 0e mov ecx, DWORD PTR [esi]
+ 0001a 8b c7 mov eax, edi
+ 0001c 2b c1 sub eax, ecx
+ 0001e 50 push eax
+ 0001f 8d 04 11 lea eax, DWORD PTR [ecx+edx]
+ 00022 50 push eax
+ 00023 ff 73 14 push DWORD PTR [ebx+20]
+ 00026 ff 15 00 00 00
+ 00 call DWORD PTR __imp___read
+ 0002c 83 c4 0c add esp, 12 ; 0000000cH
+
+; 31 : if (ret <= 0)
+
+ 0002f 85 c0 test eax, eax
+ 00031 7e 0b jle SHORT $LN13@gz_load
+
+; 32 : break;
+; 33 : *have += ret;
+
+ 00033 01 06 add DWORD PTR [esi], eax
+
+; 34 : } while (*have < len);
+
+ 00035 8b 55 fc mov edx, DWORD PTR _buf$1$[ebp]
+ 00038 39 3e cmp DWORD PTR [esi], edi
+ 0003a 72 dc jb SHORT $LL4@gz_load
+
+; 35 : if (ret < 0) {
+
+ 0003c 85 c0 test eax, eax
+$LN13@gz_load:
+ 0003e 79 26 jns SHORT $LN6@gz_load
+
+; 36 : gz_error(state, Z_ERRNO, zstrerror());
+
+ 00040 ff 15 00 00 00
+ 00 call DWORD PTR __imp___errno
+ 00046 ff 30 push DWORD PTR [eax]
+ 00048 ff 15 00 00 00
+ 00 call DWORD PTR __imp__strerror
+ 0004e 50 push eax
+ 0004f 83 ca ff or edx, -1
+ 00052 8b cb mov ecx, ebx
+ 00054 e8 00 00 00 00 call _gz_error
+ 00059 83 c4 08 add esp, 8
+
+; 37 : return -1;
+
+ 0005c 83 c8 ff or eax, -1
+ 0005f 5f pop edi
+ 00060 5e pop esi
+ 00061 5b pop ebx
+
+; 42 : }
+
+ 00062 8b e5 mov esp, ebp
+ 00064 5d pop ebp
+ 00065 c3 ret 0
+$LN6@gz_load:
+
+; 38 : }
+; 39 : if (ret == 0)
+
+ 00066 85 c0 test eax, eax
+ 00068 75 07 jne SHORT $LN7@gz_load
+
+; 40 : state->eof = 1;
+
+ 0006a c7 43 40 01 00
+ 00 00 mov DWORD PTR [ebx+64], 1
+$LN7@gz_load:
+ 00071 5f pop edi
+ 00072 5e pop esi
+
+; 41 : return 0;
+
+ 00073 33 c0 xor eax, eax
+ 00075 5b pop ebx
+
+; 42 : }
+
+ 00076 8b e5 mov esp, ebp
+ 00078 5d pop ebp
+ 00079 c3 ret 0
+_gz_load ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzread.c
+; COMDAT _gz_avail
+_TEXT SEGMENT
+_got$ = -4 ; size = 4
+_gz_avail PROC ; COMDAT
+; _state$ = ecx
+
+; 53 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 56 push esi
+ 00005 8b f1 mov esi, ecx
+
+; 54 : unsigned got;
+; 55 : z_streamp strm = &(state->strm);
+; 56 :
+; 57 : if (state->err != Z_OK && state->err != Z_BUF_ERROR)
+
+ 00007 8b 46 5c mov eax, DWORD PTR [esi+92]
+ 0000a 85 c0 test eax, eax
+ 0000c 74 0d je SHORT $LN5@gz_avail
+ 0000e 83 f8 fb cmp eax, -5 ; fffffffbH
+ 00011 74 08 je SHORT $LN5@gz_avail
+$LN13@gz_avail:
+
+; 58 : return -1;
+
+ 00013 83 c8 ff or eax, -1
+ 00016 5e pop esi
+
+; 75 : }
+
+ 00017 8b e5 mov esp, ebp
+ 00019 5d pop ebp
+ 0001a c3 ret 0
+$LN5@gz_avail:
+
+; 59 : if (state->eof == 0) {
+
+ 0001b 83 7e 40 00 cmp DWORD PTR [esi+64], 0
+ 0001f 75 4c jne SHORT $LN6@gz_avail
+
+; 60 : if (strm->avail_in) { /* copy what's there to the start */
+
+ 00021 57 push edi
+ 00022 8b 7e 68 mov edi, DWORD PTR [esi+104]
+ 00025 85 ff test edi, edi
+ 00027 74 17 je SHORT $LN3@gz_avail
+
+; 61 : unsigned char *p = state->in;
+
+ 00029 8b 4e 24 mov ecx, DWORD PTR [esi+36]
+
+; 62 : unsigned const char *q = strm->next_in;
+
+ 0002c 8b 56 64 mov edx, DWORD PTR [esi+100]
+ 0002f 90 npad 1
+$LL4@gz_avail:
+
+; 63 : unsigned n = strm->avail_in;
+; 64 : do {
+; 65 : *p++ = *q++;
+
+ 00030 8a 02 mov al, BYTE PTR [edx]
+ 00032 8d 49 01 lea ecx, DWORD PTR [ecx+1]
+ 00035 88 41 ff mov BYTE PTR [ecx-1], al
+ 00038 8d 52 01 lea edx, DWORD PTR [edx+1]
+
+; 66 : } while (--n);
+
+ 0003b 83 ef 01 sub edi, 1
+ 0003e 75 f0 jne SHORT $LL4@gz_avail
+$LN3@gz_avail:
+
+; 67 : }
+; 68 : if (gz_load(state, state->in + strm->avail_in,
+; 69 : state->size - strm->avail_in, &got) == -1)
+
+ 00040 8b 56 24 mov edx, DWORD PTR [esi+36]
+ 00043 8d 45 fc lea eax, DWORD PTR _got$[ebp]
+ 00046 03 56 68 add edx, DWORD PTR [esi+104]
+ 00049 8b ce mov ecx, esi
+ 0004b 50 push eax
+ 0004c 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 0004f 2b 46 68 sub eax, DWORD PTR [esi+104]
+ 00052 50 push eax
+ 00053 e8 00 00 00 00 call _gz_load
+ 00058 83 c4 08 add esp, 8
+ 0005b 5f pop edi
+ 0005c 83 f8 ff cmp eax, -1
+ 0005f 74 b2 je SHORT $LN13@gz_avail
+
+; 70 : return -1;
+; 71 : strm->avail_in += got;
+
+ 00061 8b 45 fc mov eax, DWORD PTR _got$[ebp]
+ 00064 01 46 68 add DWORD PTR [esi+104], eax
+
+; 72 : strm->next_in = state->in;
+
+ 00067 8b 46 24 mov eax, DWORD PTR [esi+36]
+ 0006a 89 46 64 mov DWORD PTR [esi+100], eax
+$LN6@gz_avail:
+
+; 73 : }
+; 74 : return 0;
+
+ 0006d 33 c0 xor eax, eax
+ 0006f 5e pop esi
+
+; 75 : }
+
+ 00070 8b e5 mov esp, ebp
+ 00072 5d pop ebp
+ 00073 c3 ret 0
+_gz_avail ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzread.c
+; COMDAT _gz_look
+_TEXT SEGMENT
+_gz_look PROC ; COMDAT
+; _state$ = ecx
+
+; 88 : {
+
+ 00000 53 push ebx
+ 00001 56 push esi
+ 00002 57 push edi
+ 00003 8b f9 mov edi, ecx
+
+; 89 : z_streamp strm = &(state->strm);
+; 90 :
+; 91 : /* allocate read buffers and inflate memory */
+; 92 : if (state->size == 0) {
+
+ 00005 83 7f 1c 00 cmp DWORD PTR [edi+28], 0
+ 00009 8d 5f 64 lea ebx, DWORD PTR [edi+100]
+ 0000c 0f 85 ce 00 00
+ 00 jne $LN7@gz_look
+
+; 93 : /* allocate buffers */
+; 94 : state->in = (unsigned char *)malloc(state->want);
+
+ 00012 ff 77 20 push DWORD PTR [edi+32]
+ 00015 8b 35 00 00 00
+ 00 mov esi, DWORD PTR __imp__malloc
+ 0001b ff d6 call esi
+ 0001d 89 47 24 mov DWORD PTR [edi+36], eax
+
+; 95 : state->out = (unsigned char *)malloc(state->want << 1);
+
+ 00020 8b 47 20 mov eax, DWORD PTR [edi+32]
+ 00023 03 c0 add eax, eax
+ 00025 50 push eax
+ 00026 ff d6 call esi
+
+; 96 : if (state->in == NULL || state->out == NULL) {
+
+ 00028 8b 35 00 00 00
+ 00 mov esi, DWORD PTR __imp__free
+ 0002e 83 c4 08 add esp, 8
+ 00031 83 7f 24 00 cmp DWORD PTR [edi+36], 0
+ 00035 89 47 28 mov DWORD PTR [edi+40], eax
+ 00038 74 74 je SHORT $LN4@gz_look
+ 0003a 85 c0 test eax, eax
+ 0003c 74 7a je SHORT $LN5@gz_look
+
+; 103 : }
+; 104 : state->size = state->want;
+
+ 0003e 8b 47 20 mov eax, DWORD PTR [edi+32]
+
+; 105 :
+; 106 : /* allocate inflate memory */
+; 107 : state->strm.zalloc = Z_NULL;
+; 108 : state->strm.zfree = Z_NULL;
+; 109 : state->strm.opaque = Z_NULL;
+; 110 : state->strm.avail_in = 0;
+; 111 : state->strm.next_in = Z_NULL;
+; 112 : if (inflateInit2(&(state->strm), 15 + 16) != Z_OK) { /* gunzip */
+
+ 00041 6a 38 push 56 ; 00000038H
+ 00043 68 00 00 00 00 push OFFSET ??_C@_05IAIEPMAK@1?42?48?$AA@
+ 00048 6a 1f push 31 ; 0000001fH
+ 0004a 53 push ebx
+ 0004b 89 47 1c mov DWORD PTR [edi+28], eax
+ 0004e c7 87 84 00 00
+ 00 00 00 00 00 mov DWORD PTR [edi+132], 0
+ 00058 c7 87 88 00 00
+ 00 00 00 00 00 mov DWORD PTR [edi+136], 0
+ 00062 c7 87 8c 00 00
+ 00 00 00 00 00 mov DWORD PTR [edi+140], 0
+ 0006c c7 47 68 00 00
+ 00 00 mov DWORD PTR [edi+104], 0
+ 00073 c7 03 00 00 00
+ 00 mov DWORD PTR [ebx], 0
+ 00079 e8 00 00 00 00 call _inflateInit2_@16
+ 0007e 85 c0 test eax, eax
+ 00080 74 5e je SHORT $LN7@gz_look
+
+; 113 : free(state->out);
+
+ 00082 ff 77 28 push DWORD PTR [edi+40]
+ 00085 ff d6 call esi
+
+; 114 : free(state->in);
+
+ 00087 ff 77 24 push DWORD PTR [edi+36]
+ 0008a ff d6 call esi
+
+; 115 : state->size = 0;
+; 116 : gz_error(state, Z_MEM_ERROR, "out of memory");
+
+ 0008c 68 00 00 00 00 push OFFSET ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@
+ 00091 ba fc ff ff ff mov edx, -4 ; fffffffcH
+ 00096 c7 47 1c 00 00
+ 00 00 mov DWORD PTR [edi+28], 0
+ 0009d 8b cf mov ecx, edi
+ 0009f e8 00 00 00 00 call _gz_error
+ 000a4 83 c4 0c add esp, 12 ; 0000000cH
+
+; 117 : return -1;
+
+ 000a7 83 c8 ff or eax, -1
+ 000aa 5f pop edi
+ 000ab 5e pop esi
+ 000ac 5b pop ebx
+
+; 165 : }
+
+ 000ad c3 ret 0
+$LN4@gz_look:
+
+; 97 : if (state->out != NULL)
+
+ 000ae 85 c0 test eax, eax
+ 000b0 74 06 je SHORT $LN5@gz_look
+
+; 98 : free(state->out);
+
+ 000b2 50 push eax
+ 000b3 ff d6 call esi
+ 000b5 83 c4 04 add esp, 4
+$LN5@gz_look:
+
+; 99 : if (state->in != NULL)
+
+ 000b8 8b 47 24 mov eax, DWORD PTR [edi+36]
+ 000bb 85 c0 test eax, eax
+ 000bd 74 06 je SHORT $LN6@gz_look
+
+; 100 : free(state->in);
+
+ 000bf 50 push eax
+ 000c0 ff d6 call esi
+ 000c2 83 c4 04 add esp, 4
+$LN6@gz_look:
+
+; 101 : gz_error(state, Z_MEM_ERROR, "out of memory");
+
+ 000c5 68 00 00 00 00 push OFFSET ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@
+ 000ca ba fc ff ff ff mov edx, -4 ; fffffffcH
+ 000cf 8b cf mov ecx, edi
+ 000d1 e8 00 00 00 00 call _gz_error
+ 000d6 83 c4 04 add esp, 4
+$LN16@gz_look:
+
+; 102 : return -1;
+
+ 000d9 5f pop edi
+ 000da 5e pop esi
+ 000db 83 c8 ff or eax, -1
+ 000de 5b pop ebx
+
+; 165 : }
+
+ 000df c3 ret 0
+$LN7@gz_look:
+
+; 118 : }
+; 119 : }
+; 120 :
+; 121 : /* get at least the magic bytes in the input buffer */
+; 122 : if (strm->avail_in < 2) {
+
+ 000e0 8b 43 04 mov eax, DWORD PTR [ebx+4]
+ 000e3 83 f8 02 cmp eax, 2
+ 000e6 73 13 jae SHORT $LN10@gz_look
+
+; 123 : if (gz_avail(state) == -1)
+
+ 000e8 8b cf mov ecx, edi
+ 000ea e8 00 00 00 00 call _gz_avail
+ 000ef 83 f8 ff cmp eax, -1
+ 000f2 74 e5 je SHORT $LN16@gz_look
+
+; 124 : return -1;
+; 125 : if (strm->avail_in == 0)
+
+ 000f4 8b 43 04 mov eax, DWORD PTR [ebx+4]
+ 000f7 85 c0 test eax, eax
+ 000f9 74 7f je SHORT $LN15@gz_look
+$LN10@gz_look:
+
+; 126 : return 0;
+; 127 : }
+; 128 :
+; 129 : /* look for gzip magic bytes -- if there, do gzip decoding (note: there is
+; 130 : a logical dilemma here when considering the case of a partially written
+; 131 : gzip file, to wit, if a single 31 byte is written, then we cannot tell
+; 132 : whether this is a single-byte file, or just a partially written gzip
+; 133 : file -- for here we assume that if a gzip file is being written, then
+; 134 : the header will be written in a single operation, so that reading a
+; 135 : single byte is sufficient indication that it is not a gzip file) */
+; 136 : if (strm->avail_in > 1 &&
+; 137 : strm->next_in[0] == 31 && strm->next_in[1] == 139) {
+
+ 000fb 83 f8 01 cmp eax, 1
+ 000fe 76 27 jbe SHORT $LN11@gz_look
+ 00100 8b 03 mov eax, DWORD PTR [ebx]
+ 00102 80 38 1f cmp BYTE PTR [eax], 31 ; 0000001fH
+ 00105 75 20 jne SHORT $LN11@gz_look
+ 00107 80 78 01 8b cmp BYTE PTR [eax+1], 139 ; 0000008bH
+ 0010b 75 1a jne SHORT $LN11@gz_look
+
+; 138 : inflateReset(strm);
+
+ 0010d 53 push ebx
+ 0010e e8 00 00 00 00 call _inflateReset@4
+
+; 139 : state->how = GZIP;
+
+ 00113 c7 47 30 02 00
+ 00 00 mov DWORD PTR [edi+48], 2
+
+; 164 : return 0;
+
+ 0011a 33 c0 xor eax, eax
+ 0011c c7 47 2c 00 00
+ 00 00 mov DWORD PTR [edi+44], 0
+ 00123 5f pop edi
+ 00124 5e pop esi
+ 00125 5b pop ebx
+
+; 165 : }
+
+ 00126 c3 ret 0
+$LN11@gz_look:
+
+; 140 : state->direct = 0;
+; 141 : return 0;
+; 142 : }
+; 143 :
+; 144 : /* no gzip header -- if we were decoding gzip before, then this is trailing
+; 145 : garbage. Ignore the trailing garbage and finish. */
+; 146 : if (state->direct == 0) {
+
+ 00127 83 7f 2c 00 cmp DWORD PTR [edi+44], 0
+ 0012b 75 1a jne SHORT $LN12@gz_look
+
+; 147 : strm->avail_in = 0;
+
+ 0012d c7 43 04 00 00
+ 00 00 mov DWORD PTR [ebx+4], 0
+
+; 164 : return 0;
+
+ 00134 33 c0 xor eax, eax
+ 00136 c7 47 40 01 00
+ 00 00 mov DWORD PTR [edi+64], 1
+ 0013d c7 07 00 00 00
+ 00 mov DWORD PTR [edi], 0
+ 00143 5f pop edi
+ 00144 5e pop esi
+ 00145 5b pop ebx
+
+; 165 : }
+
+ 00146 c3 ret 0
+$LN12@gz_look:
+
+; 148 : state->eof = 1;
+; 149 : state->x.have = 0;
+; 150 : return 0;
+; 151 : }
+; 152 :
+; 153 : /* doing raw i/o, copy any leftover input to output -- this assumes that
+; 154 : the output buffer is larger than the input buffer, which also assures
+; 155 : space for gzungetc() */
+; 156 : state->x.next = state->out;
+
+ 00147 8b 47 28 mov eax, DWORD PTR [edi+40]
+ 0014a 89 47 04 mov DWORD PTR [edi+4], eax
+
+; 157 : if (strm->avail_in) {
+
+ 0014d 8b 4b 04 mov ecx, DWORD PTR [ebx+4]
+ 00150 85 c9 test ecx, ecx
+ 00152 74 18 je SHORT $LN13@gz_look
+
+; 158 : memcpy(state->x.next, strm->next_in, strm->avail_in);
+
+ 00154 51 push ecx
+ 00155 ff 33 push DWORD PTR [ebx]
+ 00157 50 push eax
+ 00158 e8 00 00 00 00 call _memcpy
+
+; 159 : state->x.have = strm->avail_in;
+
+ 0015d 8b 43 04 mov eax, DWORD PTR [ebx+4]
+ 00160 83 c4 0c add esp, 12 ; 0000000cH
+ 00163 89 07 mov DWORD PTR [edi], eax
+
+; 160 : strm->avail_in = 0;
+
+ 00165 c7 43 04 00 00
+ 00 00 mov DWORD PTR [ebx+4], 0
+$LN13@gz_look:
+
+; 161 : }
+; 162 : state->how = COPY;
+
+ 0016c c7 47 30 01 00
+ 00 00 mov DWORD PTR [edi+48], 1
+
+; 163 : state->direct = 1;
+
+ 00173 c7 47 2c 01 00
+ 00 00 mov DWORD PTR [edi+44], 1
+$LN15@gz_look:
+
+; 164 : return 0;
+
+ 0017a 5f pop edi
+ 0017b 5e pop esi
+ 0017c 33 c0 xor eax, eax
+ 0017e 5b pop ebx
+
+; 165 : }
+
+ 0017f c3 ret 0
+_gz_look ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzread.c
+; COMDAT _gz_decomp
+_TEXT SEGMENT
+_had$1$ = -4 ; size = 4
+_gz_decomp PROC ; COMDAT
+; _state$ = ecx
+
+; 174 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 53 push ebx
+ 00005 8b d9 mov ebx, ecx
+
+; 175 : int ret = Z_OK;
+; 176 : unsigned had;
+; 177 : z_streamp strm = &(state->strm);
+; 178 :
+; 179 : /* fill output buffer up to end of deflate stream */
+; 180 : had = strm->avail_out;
+
+ 00007 8b 43 74 mov eax, DWORD PTR [ebx+116]
+ 0000a 56 push esi
+ 0000b 57 push edi
+ 0000c 8d 7b 64 lea edi, DWORD PTR [ebx+100]
+ 0000f 89 45 fc mov DWORD PTR _had$1$[ebp], eax
+ 00012 33 f6 xor esi, esi
+$LL4@gz_decomp:
+
+; 181 : do {
+; 182 : /* get more input for inflate() */
+; 183 : if (strm->avail_in == 0 && gz_avail(state) == -1)
+
+ 00014 83 7f 04 00 cmp DWORD PTR [edi+4], 0
+ 00018 75 16 jne SHORT $LN24@gz_decomp
+ 0001a 8b cb mov ecx, ebx
+ 0001c e8 00 00 00 00 call _gz_avail
+ 00021 83 f8 ff cmp eax, -1
+ 00024 0f 84 cb 00 00
+ 00 je $LN17@gz_decomp
+
+; 184 : return -1;
+; 185 : if (strm->avail_in == 0) {
+
+ 0002a 83 7f 04 00 cmp DWORD PTR [edi+4], 0
+ 0002e 74 33 je SHORT $LN18@gz_decomp
+$LN24@gz_decomp:
+
+; 187 : break;
+; 188 : }
+; 189 :
+; 190 : /* decompress and handle errors */
+; 191 : ret = inflate(strm, Z_NO_FLUSH);
+
+ 00030 6a 00 push 0
+ 00032 57 push edi
+ 00033 e8 00 00 00 00 call _inflate@8
+ 00038 8b f0 mov esi, eax
+
+; 192 : if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) {
+
+ 0003a 83 fe fe cmp esi, -2 ; fffffffeH
+ 0003d 0f 84 9e 00 00
+ 00 je $LN8@gz_decomp
+ 00043 83 fe 02 cmp esi, 2
+ 00046 0f 84 95 00 00
+ 00 je $LN8@gz_decomp
+
+; 196 : }
+; 197 : if (ret == Z_MEM_ERROR) {
+
+ 0004c 83 fe fc cmp esi, -4 ; fffffffcH
+ 0004f 74 72 je SHORT $LN20@gz_decomp
+
+; 199 : return -1;
+; 200 : }
+; 201 : if (ret == Z_DATA_ERROR) { /* deflate stream invalid */
+
+ 00051 83 fe fd cmp esi, -3 ; fffffffdH
+ 00054 74 46 je SHORT $LN21@gz_decomp
+
+; 203 : strm->msg == NULL ? "compressed data error" : strm->msg);
+; 204 : return -1;
+; 205 : }
+; 206 : } while (strm->avail_out && ret != Z_STREAM_END);
+
+ 00056 83 7f 10 00 cmp DWORD PTR [edi+16], 0
+ 0005a 74 1b je SHORT $LN3@gz_decomp
+ 0005c 83 fe 01 cmp esi, 1
+ 0005f 75 b3 jne SHORT $LL4@gz_decomp
+ 00061 eb 14 jmp SHORT $LN3@gz_decomp
+$LN18@gz_decomp:
+
+; 186 : gz_error(state, Z_BUF_ERROR, "unexpected end of file");
+
+ 00063 68 00 00 00 00 push OFFSET ??_C@_0BH@CFIIDOJD@unexpected?5end?5of?5file?$AA@
+ 00068 ba fb ff ff ff mov edx, -5 ; fffffffbH
+ 0006d 8b cb mov ecx, ebx
+ 0006f e8 00 00 00 00 call _gz_error
+ 00074 83 c4 04 add esp, 4
+$LN3@gz_decomp:
+
+; 207 :
+; 208 : /* update available output */
+; 209 : state->x.have = had - strm->avail_out;
+
+ 00077 8b 4d fc mov ecx, DWORD PTR _had$1$[ebp]
+ 0007a 2b 4f 10 sub ecx, DWORD PTR [edi+16]
+ 0007d 89 0b mov DWORD PTR [ebx], ecx
+
+; 210 : state->x.next = strm->next_out - state->x.have;
+
+ 0007f 8b 47 0c mov eax, DWORD PTR [edi+12]
+ 00082 2b c1 sub eax, ecx
+ 00084 89 43 04 mov DWORD PTR [ebx+4], eax
+
+; 211 :
+; 212 : /* if the gzip stream completed successfully, look for another */
+; 213 : if (ret == Z_STREAM_END)
+
+ 00087 83 fe 01 cmp esi, 1
+ 0008a 75 07 jne SHORT $LN12@gz_decomp
+
+; 214 : state->how = LOOK;
+
+ 0008c c7 43 30 00 00
+ 00 00 mov DWORD PTR [ebx+48], 0
+$LN12@gz_decomp:
+ 00093 5f pop edi
+ 00094 5e pop esi
+
+; 215 :
+; 216 : /* good decompression */
+; 217 : return 0;
+
+ 00095 33 c0 xor eax, eax
+ 00097 5b pop ebx
+
+; 218 : }
+
+ 00098 8b e5 mov esp, ebp
+ 0009a 5d pop ebp
+ 0009b c3 ret 0
+$LN21@gz_decomp:
+
+; 202 : gz_error(state, Z_DATA_ERROR,
+
+ 0009c 8b 47 18 mov eax, DWORD PTR [edi+24]
+ 0009f b9 00 00 00 00 mov ecx, OFFSET ??_C@_0BG@HCKBMIHF@compressed?5data?5error?$AA@
+ 000a4 85 c0 test eax, eax
+ 000a6 ba fd ff ff ff mov edx, -3 ; fffffffdH
+ 000ab 0f 45 c8 cmovne ecx, eax
+ 000ae 51 push ecx
+ 000af 8b cb mov ecx, ebx
+ 000b1 e8 00 00 00 00 call _gz_error
+ 000b6 83 c4 04 add esp, 4
+ 000b9 83 c8 ff or eax, -1
+ 000bc 5f pop edi
+ 000bd 5e pop esi
+ 000be 5b pop ebx
+
+; 218 : }
+
+ 000bf 8b e5 mov esp, ebp
+ 000c1 5d pop ebp
+ 000c2 c3 ret 0
+$LN20@gz_decomp:
+
+; 198 : gz_error(state, Z_MEM_ERROR, "out of memory");
+
+ 000c3 68 00 00 00 00 push OFFSET ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@
+ 000c8 ba fc ff ff ff mov edx, -4 ; fffffffcH
+ 000cd 8b cb mov ecx, ebx
+ 000cf e8 00 00 00 00 call _gz_error
+ 000d4 83 c4 04 add esp, 4
+ 000d7 83 c8 ff or eax, -1
+ 000da 5f pop edi
+ 000db 5e pop esi
+ 000dc 5b pop ebx
+
+; 218 : }
+
+ 000dd 8b e5 mov esp, ebp
+ 000df 5d pop ebp
+ 000e0 c3 ret 0
+$LN8@gz_decomp:
+
+; 193 : gz_error(state, Z_STREAM_ERROR,
+
+ 000e1 68 00 00 00 00 push OFFSET ??_C@_0CH@CPOLIEKA@internal?5error?3?5inflate?5stream?5c@
+ 000e6 ba fe ff ff ff mov edx, -2 ; fffffffeH
+ 000eb 8b cb mov ecx, ebx
+ 000ed e8 00 00 00 00 call _gz_error
+ 000f2 83 c4 04 add esp, 4
+$LN17@gz_decomp:
+
+; 194 : "internal error: inflate stream corrupt");
+; 195 : return -1;
+
+ 000f5 5f pop edi
+ 000f6 5e pop esi
+ 000f7 83 c8 ff or eax, -1
+ 000fa 5b pop ebx
+
+; 218 : }
+
+ 000fb 8b e5 mov esp, ebp
+ 000fd 5d pop ebp
+ 000fe c3 ret 0
+_gz_decomp ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzread.c
+; COMDAT _gz_fetch
+_TEXT SEGMENT
+_gz_fetch PROC ; COMDAT
+; _state$ = ecx
+
+; 228 : {
+
+ 00000 56 push esi
+ 00001 8b f1 mov esi, ecx
+$LL4@gz_fetch:
+
+; 229 : z_streamp strm = &(state->strm);
+; 230 :
+; 231 : do {
+; 232 : switch(state->how) {
+
+ 00003 8b 46 30 mov eax, DWORD PTR [esi+48]
+ 00006 83 e8 00 sub eax, 0
+ 00009 74 29 je SHORT $LN7@gz_fetch
+ 0000b 83 e8 01 sub eax, 1
+ 0000e 74 4b je SHORT $LN10@gz_fetch
+ 00010 83 e8 01 sub eax, 1
+ 00013 75 31 jne SHORT $LN2@gz_fetch
+
+; 245 : case GZIP: /* -> GZIP or LOOK (if end of gzip stream) */
+; 246 : strm->avail_out = state->size << 1;
+
+ 00015 8b 46 1c mov eax, DWORD PTR [esi+28]
+
+; 247 : strm->next_out = state->out;
+; 248 : if (gz_decomp(state) == -1)
+
+ 00018 8b ce mov ecx, esi
+ 0001a 03 c0 add eax, eax
+ 0001c 89 46 74 mov DWORD PTR [esi+116], eax
+ 0001f 8b 46 28 mov eax, DWORD PTR [esi+40]
+ 00022 89 46 70 mov DWORD PTR [esi+112], eax
+ 00025 e8 00 00 00 00 call _gz_decomp
+ 0002a 83 f8 ff cmp eax, -1
+ 0002d 75 17 jne SHORT $LN2@gz_fetch
+$LN19@gz_fetch:
+
+; 235 : return -1;
+
+ 0002f 83 c8 ff or eax, -1
+ 00032 5e pop esi
+
+; 252 : return 0;
+; 253 : }
+
+ 00033 c3 ret 0
+$LN7@gz_fetch:
+
+; 233 : case LOOK: /* -> LOOK, COPY (only if never GZIP), or GZIP */
+; 234 : if (gz_look(state) == -1)
+
+ 00034 8b ce mov ecx, esi
+ 00036 e8 00 00 00 00 call _gz_look
+ 0003b 83 f8 ff cmp eax, -1
+ 0003e 74 ef je SHORT $LN19@gz_fetch
+
+; 236 : if (state->how == LOOK)
+
+ 00040 83 7e 30 00 cmp DWORD PTR [esi+48], 0
+ 00044 74 34 je SHORT $LN20@gz_fetch
+$LN2@gz_fetch:
+
+; 249 : return -1;
+; 250 : }
+; 251 : } while (state->x.have == 0 && (!state->eof || strm->avail_in));
+
+ 00046 83 3e 00 cmp DWORD PTR [esi], 0
+ 00049 75 2f jne SHORT $LN20@gz_fetch
+ 0004b 83 7e 40 00 cmp DWORD PTR [esi+64], 0
+ 0004f 74 b2 je SHORT $LL4@gz_fetch
+ 00051 83 7e 68 00 cmp DWORD PTR [esi+104], 0
+ 00055 75 ac jne SHORT $LL4@gz_fetch
+
+; 244 : return 0;
+
+ 00057 33 c0 xor eax, eax
+ 00059 5e pop esi
+
+; 252 : return 0;
+; 253 : }
+
+ 0005a c3 ret 0
+$LN10@gz_fetch:
+
+; 237 : return 0;
+; 238 : break;
+; 239 : case COPY: /* -> COPY */
+; 240 : if (gz_load(state, state->out, state->size << 1, &(state->x.have))
+; 241 : == -1)
+
+ 0005b 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 0005e 8b ce mov ecx, esi
+ 00060 8b 56 28 mov edx, DWORD PTR [esi+40]
+ 00063 03 c0 add eax, eax
+ 00065 56 push esi
+ 00066 50 push eax
+ 00067 e8 00 00 00 00 call _gz_load
+ 0006c 83 c4 08 add esp, 8
+ 0006f 83 f8 ff cmp eax, -1
+ 00072 74 bb je SHORT $LN19@gz_fetch
+
+; 242 : return -1;
+; 243 : state->x.next = state->out;
+
+ 00074 8b 46 28 mov eax, DWORD PTR [esi+40]
+ 00077 89 46 04 mov DWORD PTR [esi+4], eax
+$LN20@gz_fetch:
+
+; 244 : return 0;
+
+ 0007a 33 c0 xor eax, eax
+ 0007c 5e pop esi
+
+; 252 : return 0;
+; 253 : }
+
+ 0007d c3 ret 0
+_gz_fetch ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzread.c
+; COMDAT _gz_skip
+_TEXT SEGMENT
+_len$ = 8 ; size = 8
+_gz_skip PROC ; COMDAT
+; _state$ = ecx
+
+; 259 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 53 push ebx
+
+; 260 : unsigned n;
+; 261 :
+; 262 : /* skip over len bytes or reach end-of-file, whichever comes first */
+; 263 : while (len)
+
+ 00004 8b 5d 0c mov ebx, DWORD PTR _len$[ebp+4]
+ 00007 56 push esi
+ 00008 57 push edi
+ 00009 8b 7d 08 mov edi, DWORD PTR _len$[ebp]
+ 0000c 8b f1 mov esi, ecx
+ 0000e 8b c7 mov eax, edi
+ 00010 0b c3 or eax, ebx
+ 00012 74 4b je SHORT $LN3@gz_skip
+$LL2@gz_skip:
+
+; 264 : /* skip over whatever is in output buffer */
+; 265 : if (state->x.have) {
+
+ 00014 8b 06 mov eax, DWORD PTR [esi]
+ 00016 85 c0 test eax, eax
+ 00018 74 27 je SHORT $LN4@gz_skip
+
+; 266 : n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > len ?
+
+ 0001a 33 c9 xor ecx, ecx
+ 0001c 3b cb cmp ecx, ebx
+ 0001e 7f 0a jg SHORT $LN10@gz_skip
+ 00020 7c 04 jl SHORT $LN17@gz_skip
+ 00022 3b c7 cmp eax, edi
+ 00024 77 04 ja SHORT $LN10@gz_skip
+$LN17@gz_skip:
+ 00026 8b c8 mov ecx, eax
+ 00028 eb 02 jmp SHORT $LN11@gz_skip
+$LN10@gz_skip:
+ 0002a 8b cf mov ecx, edi
+$LN11@gz_skip:
+
+; 267 : (unsigned)len : state->x.have;
+; 268 : state->x.have -= n;
+; 269 : state->x.next += n;
+
+ 0002c 01 4e 04 add DWORD PTR [esi+4], ecx
+ 0002f 2b c1 sub eax, ecx
+
+; 270 : state->x.pos += n;
+
+ 00031 01 4e 08 add DWORD PTR [esi+8], ecx
+ 00034 89 06 mov DWORD PTR [esi], eax
+ 00036 83 56 0c 00 adc DWORD PTR [esi+12], 0
+
+; 271 : len -= n;
+
+ 0003a 2b f9 sub edi, ecx
+ 0003c 83 db 00 sbb ebx, 0
+
+; 272 : }
+
+ 0003f eb 18 jmp SHORT $LN8@gz_skip
+$LN4@gz_skip:
+
+; 273 :
+; 274 : /* output buffer empty -- return if we're at the end of the input */
+; 275 : else if (state->eof && state->strm.avail_in == 0)
+
+ 00041 83 7e 40 00 cmp DWORD PTR [esi+64], 0
+ 00045 74 06 je SHORT $LN6@gz_skip
+ 00047 83 7e 68 00 cmp DWORD PTR [esi+104], 0
+ 0004b 74 12 je SHORT $LN3@gz_skip
+$LN6@gz_skip:
+
+; 276 : break;
+; 277 :
+; 278 : /* need more data to skip -- load up output buffer */
+; 279 : else {
+; 280 : /* get more output, looking for header if required */
+; 281 : if (gz_fetch(state) == -1)
+
+ 0004d 8b ce mov ecx, esi
+ 0004f e8 00 00 00 00 call _gz_fetch
+ 00054 83 f8 ff cmp eax, -1
+ 00057 74 0d je SHORT $LN14@gz_skip
+$LN8@gz_skip:
+
+; 260 : unsigned n;
+; 261 :
+; 262 : /* skip over len bytes or reach end-of-file, whichever comes first */
+; 263 : while (len)
+
+ 00059 8b c7 mov eax, edi
+ 0005b 0b c3 or eax, ebx
+ 0005d 75 b5 jne SHORT $LL2@gz_skip
+$LN3@gz_skip:
+ 0005f 5f pop edi
+ 00060 5e pop esi
+
+; 283 : }
+; 284 : return 0;
+
+ 00061 33 c0 xor eax, eax
+ 00063 5b pop ebx
+
+; 285 : }
+
+ 00064 5d pop ebp
+ 00065 c3 ret 0
+$LN14@gz_skip:
+ 00066 5f pop edi
+ 00067 5e pop esi
+
+; 282 : return -1;
+
+ 00068 83 c8 ff or eax, -1
+ 0006b 5b pop ebx
+
+; 285 : }
+
+ 0006c 5d pop ebp
+ 0006d c3 ret 0
+_gz_skip ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzread.c
+; COMDAT _gzread@12
+_TEXT SEGMENT
+_n$ = 8 ; size = 4
+_file$ = 8 ; size = 4
+_buf$ = 12 ; size = 4
+_got$1$ = 16 ; size = 4
+_len$ = 16 ; size = 4
+_gzread@12 PROC ; COMDAT
+
+; 292 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 293 : unsigned got, n;
+; 294 : gz_statep state;
+; 295 : z_streamp strm;
+; 296 :
+; 297 : /* get internal structure */
+; 298 : if (file == NULL)
+
+ 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 00007 85 f6 test esi, esi
+ 00009 75 08 jne SHORT $LN5@gzread
+$LN7@gzread:
+
+; 299 : return -1;
+
+ 0000b 83 c8 ff or eax, -1
+ 0000e 5e pop esi
+
+; 376 :
+; 377 : /* return number of bytes read into user buffer (will fit in int) */
+; 378 : return (int)got;
+; 379 : }
+
+ 0000f 5d pop ebp
+ 00010 c2 0c 00 ret 12 ; 0000000cH
+$LN5@gzread:
+
+; 300 : state = (gz_statep)file;
+; 301 : strm = &(state->strm);
+; 302 :
+; 303 : /* check that we're reading and that there's no (serious) error */
+; 304 : if (state->mode != GZ_READ ||
+
+ 00013 81 7e 10 4f 1c
+ 00 00 cmp DWORD PTR [esi+16], 7247 ; 00001c4fH
+ 0001a 75 ef jne SHORT $LN7@gzread
+ 0001c 8b 46 5c mov eax, DWORD PTR [esi+92]
+ 0001f 85 c0 test eax, eax
+ 00021 74 05 je SHORT $LN6@gzread
+ 00023 83 f8 fb cmp eax, -5 ; fffffffbH
+ 00026 75 e3 jne SHORT $LN7@gzread
+$LN6@gzread:
+ 00028 53 push ebx
+
+; 305 : (state->err != Z_OK && state->err != Z_BUF_ERROR))
+; 306 : return -1;
+; 307 :
+; 308 : /* since an int is returned, make sure len fits in one, otherwise return
+; 309 : with an error (this avoids the flaw in the interface) */
+; 310 : if ((int)len < 0) {
+
+ 00029 8b 5d 10 mov ebx, DWORD PTR _len$[ebp]
+ 0002c 85 db test ebx, ebx
+ 0002e 79 1d jns SHORT $LN36@gzread
+
+; 311 : gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
+
+ 00030 68 00 00 00 00 push OFFSET ??_C@_0CF@MLPJFDMM@requested?5length?5does?5not?5fit?5in@
+ 00035 ba fd ff ff ff mov edx, -3 ; fffffffdH
+ 0003a 8b ce mov ecx, esi
+ 0003c e8 00 00 00 00 call _gz_error
+ 00041 83 c4 04 add esp, 4
+$LN37@gzread:
+
+; 312 : return -1;
+
+ 00044 5b pop ebx
+ 00045 83 c8 ff or eax, -1
+ 00048 5e pop esi
+
+; 376 :
+; 377 : /* return number of bytes read into user buffer (will fit in int) */
+; 378 : return (int)got;
+; 379 : }
+
+ 00049 5d pop ebp
+ 0004a c2 0c 00 ret 12 ; 0000000cH
+$LN36@gzread:
+
+; 313 : }
+; 314 :
+; 315 : /* if len is zero, avoid unnecessary operations */
+; 316 : if (len == 0)
+
+ 0004d 75 08 jne SHORT $LN9@gzread
+
+; 317 : return 0;
+
+ 0004f 5b pop ebx
+ 00050 33 c0 xor eax, eax
+ 00052 5e pop esi
+
+; 376 :
+; 377 : /* return number of bytes read into user buffer (will fit in int) */
+; 378 : return (int)got;
+; 379 : }
+
+ 00053 5d pop ebp
+ 00054 c2 0c 00 ret 12 ; 0000000cH
+$LN9@gzread:
+
+; 318 :
+; 319 : /* process a skip request */
+; 320 : if (state->seek) {
+
+ 00057 83 7e 58 00 cmp DWORD PTR [esi+88], 0
+ 0005b 74 1c je SHORT $LN11@gzread
+
+; 321 : state->seek = 0;
+; 322 : if (gz_skip(state, state->skip) == -1)
+
+ 0005d ff 76 54 push DWORD PTR [esi+84]
+ 00060 8b ce mov ecx, esi
+ 00062 c7 46 58 00 00
+ 00 00 mov DWORD PTR [esi+88], 0
+ 00069 ff 76 50 push DWORD PTR [esi+80]
+ 0006c e8 00 00 00 00 call _gz_skip
+ 00071 83 c4 08 add esp, 8
+ 00074 83 f8 ff cmp eax, -1
+ 00077 74 cb je SHORT $LN37@gzread
+$LN11@gzread:
+
+; 323 : return -1;
+; 324 : }
+; 325 :
+; 326 : /* get len bytes to buf, or less than len if at the end */
+; 327 : got = 0;
+
+ 00079 33 c0 xor eax, eax
+ 0007b 89 45 10 mov DWORD PTR _got$1$[ebp], eax
+ 0007e 57 push edi
+ 0007f 90 npad 1
+$LL4@gzread:
+
+; 328 : do {
+; 329 : /* first just try copying data from the output buffer */
+; 330 : if (state->x.have) {
+
+ 00080 8b 3e mov edi, DWORD PTR [esi]
+ 00082 85 ff test edi, edi
+ 00084 74 1f je SHORT $LN12@gzread
+
+; 331 : n = state->x.have > len ? len : state->x.have;
+; 332 : memcpy(buf, state->x.next, n);
+
+ 00086 8b 45 0c mov eax, DWORD PTR _buf$[ebp]
+ 00089 3b fb cmp edi, ebx
+ 0008b 0f 47 fb cmova edi, ebx
+ 0008e 57 push edi
+ 0008f ff 76 04 push DWORD PTR [esi+4]
+ 00092 89 7d 08 mov DWORD PTR _n$[ebp], edi
+ 00095 50 push eax
+ 00096 e8 00 00 00 00 call _memcpy
+
+; 333 : state->x.next += n;
+
+ 0009b 01 7e 04 add DWORD PTR [esi+4], edi
+ 0009e 83 c4 0c add esp, 12 ; 0000000cH
+
+; 334 : state->x.have -= n;
+
+ 000a1 29 3e sub DWORD PTR [esi], edi
+
+; 335 : }
+
+ 000a3 eb 5f jmp SHORT $LN21@gzread
+$LN12@gzread:
+
+; 336 :
+; 337 : /* output buffer empty -- return if we're at the end of the input */
+; 338 : else if (state->eof && strm->avail_in == 0) {
+
+ 000a5 83 7e 40 00 cmp DWORD PTR [esi+64], 0
+ 000a9 74 0a je SHORT $LN14@gzread
+ 000ab 83 7e 68 00 cmp DWORD PTR [esi+104], 0
+ 000af 0f 84 83 00 00
+ 00 je $LN28@gzread
+$LN14@gzread:
+
+; 340 : break;
+; 341 : }
+; 342 :
+; 343 : /* need output data -- for small len or new stream load up our output
+; 344 : buffer */
+; 345 : else if (state->how == LOOK || len < (state->size << 1)) {
+
+ 000b5 8b 4e 30 mov ecx, DWORD PTR [esi+48]
+ 000b8 85 c9 test ecx, ecx
+ 000ba 74 5e je SHORT $LN18@gzread
+ 000bc 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 000bf 03 c0 add eax, eax
+ 000c1 3b d8 cmp ebx, eax
+ 000c3 72 55 jb SHORT $LN18@gzread
+
+; 349 : continue; /* no progress yet -- go back to copy above */
+; 350 : /* the copy above assures that we will leave with space in the
+; 351 : output buffer, allowing at least one gzungetc() to succeed */
+; 352 : }
+; 353 :
+; 354 : /* large len -- read directly into user buffer */
+; 355 : else if (state->how == COPY) { /* read directly */
+
+ 000c5 83 f9 01 cmp ecx, 1
+
+; 356 : if (gz_load(state, (unsigned char *)buf, len, &n) == -1)
+
+ 000c8 8b ce mov ecx, esi
+ 000ca 75 1a jne SHORT $LN20@gzread
+ 000cc 8b 55 0c mov edx, DWORD PTR _buf$[ebp]
+ 000cf 8d 45 08 lea eax, DWORD PTR _n$[ebp]
+ 000d2 50 push eax
+ 000d3 53 push ebx
+ 000d4 e8 00 00 00 00 call _gz_load
+ 000d9 83 c4 08 add esp, 8
+ 000dc 83 f8 ff cmp eax, -1
+ 000df 74 65 je SHORT $LN31@gzread
+
+; 357 : return -1;
+; 358 : }
+
+ 000e1 8b 7d 08 mov edi, DWORD PTR _n$[ebp]
+ 000e4 eb 1e jmp SHORT $LN21@gzread
+$LN20@gzread:
+
+; 359 :
+; 360 : /* large len -- decompress directly into user buffer */
+; 361 : else { /* state->how == GZIP */
+; 362 : strm->avail_out = len;
+; 363 : strm->next_out = (unsigned char *)buf;
+
+ 000e6 8b 45 0c mov eax, DWORD PTR _buf$[ebp]
+ 000e9 89 5e 74 mov DWORD PTR [esi+116], ebx
+ 000ec 89 46 70 mov DWORD PTR [esi+112], eax
+
+; 364 : if (gz_decomp(state) == -1)
+
+ 000ef e8 00 00 00 00 call _gz_decomp
+ 000f4 83 f8 ff cmp eax, -1
+ 000f7 74 4d je SHORT $LN31@gzread
+
+; 365 : return -1;
+; 366 : n = state->x.have;
+
+ 000f9 8b 3e mov edi, DWORD PTR [esi]
+ 000fb 89 7d 08 mov DWORD PTR _n$[ebp], edi
+
+; 367 : state->x.have = 0;
+
+ 000fe c7 06 00 00 00
+ 00 mov DWORD PTR [esi], 0
+$LN21@gzread:
+
+; 368 : }
+; 369 :
+; 370 : /* update progress */
+; 371 : len -= n;
+; 372 : buf = (char *)buf + n;
+; 373 : got += n;
+
+ 00104 8b 45 10 mov eax, DWORD PTR _got$1$[ebp]
+ 00107 2b df sub ebx, edi
+ 00109 01 7d 0c add DWORD PTR _buf$[ebp], edi
+ 0010c 03 c7 add eax, edi
+
+; 374 : state->x.pos += n;
+
+ 0010e 01 7e 08 add DWORD PTR [esi+8], edi
+ 00111 89 45 10 mov DWORD PTR _got$1$[ebp], eax
+ 00114 83 56 0c 00 adc DWORD PTR [esi+12], 0
+ 00118 eb 0f jmp SHORT $LN2@gzread
+$LN18@gzread:
+
+; 346 : /* get more output, looking for header if required */
+; 347 : if (gz_fetch(state) == -1)
+
+ 0011a 8b ce mov ecx, esi
+ 0011c e8 00 00 00 00 call _gz_fetch
+ 00121 83 f8 ff cmp eax, -1
+ 00124 74 20 je SHORT $LN31@gzread
+ 00126 8b 45 10 mov eax, DWORD PTR _got$1$[ebp]
+$LN2@gzread:
+
+; 375 : } while (len);
+
+ 00129 85 db test ebx, ebx
+ 0012b 0f 85 4f ff ff
+ ff jne $LL4@gzread
+ 00131 5f pop edi
+ 00132 5b pop ebx
+ 00133 5e pop esi
+
+; 376 :
+; 377 : /* return number of bytes read into user buffer (will fit in int) */
+; 378 : return (int)got;
+; 379 : }
+
+ 00134 5d pop ebp
+ 00135 c2 0c 00 ret 12 ; 0000000cH
+$LN28@gzread:
+ 00138 5f pop edi
+ 00139 5b pop ebx
+
+; 339 : state->past = 1; /* tried to read past end */
+
+ 0013a c7 46 44 01 00
+ 00 00 mov DWORD PTR [esi+68], 1
+ 00141 5e pop esi
+
+; 376 :
+; 377 : /* return number of bytes read into user buffer (will fit in int) */
+; 378 : return (int)got;
+; 379 : }
+
+ 00142 5d pop ebp
+ 00143 c2 0c 00 ret 12 ; 0000000cH
+$LN31@gzread:
+ 00146 5f pop edi
+ 00147 5b pop ebx
+
+; 348 : return -1;
+
+ 00148 83 c8 ff or eax, -1
+ 0014b 5e pop esi
+
+; 376 :
+; 377 : /* return number of bytes read into user buffer (will fit in int) */
+; 378 : return (int)got;
+; 379 : }
+
+ 0014c 5d pop ebp
+ 0014d c2 0c 00 ret 12 ; 0000000cH
+_gzread@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzread.c
+; COMDAT _gzgetc@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_buf$ = 11 ; size = 1
+_gzgetc@4 PROC ; COMDAT
+
+; 389 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 390 : int ret;
+; 391 : unsigned char buf[1];
+; 392 : gz_statep state;
+; 393 :
+; 394 : /* get internal structure */
+; 395 : if (file == NULL)
+
+ 00003 8b 55 08 mov edx, DWORD PTR _file$[ebp]
+ 00006 85 d2 test edx, edx
+ 00008 74 4f je SHORT $LN4@gzgetc
+
+; 396 : return -1;
+; 397 : state = (gz_statep)file;
+; 398 :
+; 399 : /* check that we're reading and that there's no (serious) error */
+; 400 : if (state->mode != GZ_READ ||
+
+ 0000a 81 7a 10 4f 1c
+ 00 00 cmp DWORD PTR [edx+16], 7247 ; 00001c4fH
+ 00011 75 46 jne SHORT $LN4@gzgetc
+ 00013 8b 42 5c mov eax, DWORD PTR [edx+92]
+ 00016 85 c0 test eax, eax
+ 00018 74 05 je SHORT $LN3@gzgetc
+ 0001a 83 f8 fb cmp eax, -5 ; fffffffbH
+ 0001d 75 3a jne SHORT $LN4@gzgetc
+$LN3@gzgetc:
+
+; 403 :
+; 404 : /* try output buffer (no need to check for skip request) */
+; 405 : if (state->x.have) {
+
+ 0001f 8b 02 mov eax, DWORD PTR [edx]
+ 00021 85 c0 test eax, eax
+ 00023 74 1b je SHORT $LN5@gzgetc
+
+; 406 : state->x.have--;
+
+ 00025 48 dec eax
+
+; 407 : state->x.pos++;
+
+ 00026 83 42 08 01 add DWORD PTR [edx+8], 1
+ 0002a 89 02 mov DWORD PTR [edx], eax
+
+; 408 : return *(state->x.next)++;
+
+ 0002c 8b 42 04 mov eax, DWORD PTR [edx+4]
+ 0002f 83 52 0c 00 adc DWORD PTR [edx+12], 0
+ 00033 8a 08 mov cl, BYTE PTR [eax]
+ 00035 40 inc eax
+ 00036 89 42 04 mov DWORD PTR [edx+4], eax
+ 00039 0f b6 c1 movzx eax, cl
+
+; 414 : }
+
+ 0003c 5d pop ebp
+ 0003d c2 04 00 ret 4
+$LN5@gzgetc:
+
+; 409 : }
+; 410 :
+; 411 : /* nothing there -- try gzread() */
+; 412 : ret = gzread(file, buf, 1);
+
+ 00040 6a 01 push 1
+ 00042 8d 45 0b lea eax, DWORD PTR _buf$[ebp]
+ 00045 50 push eax
+ 00046 52 push edx
+ 00047 e8 00 00 00 00 call _gzread@12
+
+; 413 : return ret < 1 ? -1 : buf[0];
+
+ 0004c 83 f8 01 cmp eax, 1
+ 0004f 7c 08 jl SHORT $LN4@gzgetc
+ 00051 0f b6 45 0b movzx eax, BYTE PTR _buf$[ebp]
+
+; 414 : }
+
+ 00055 5d pop ebp
+ 00056 c2 04 00 ret 4
+$LN4@gzgetc:
+
+; 401 : (state->err != Z_OK && state->err != Z_BUF_ERROR))
+; 402 : return -1;
+
+ 00059 83 c8 ff or eax, -1
+
+; 414 : }
+
+ 0005c 5d pop ebp
+ 0005d c2 04 00 ret 4
+_gzgetc@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzread.c
+; COMDAT _gzgetc_@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_gzgetc_@4 PROC ; COMDAT
+
+; 418 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 420 : }
+
+ 00003 5d pop ebp
+
+; 419 : return gzgetc(file);
+
+ 00004 e9 00 00 00 00 jmp _gzgetc@4
+_gzgetc_@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzread.c
+; COMDAT _gzungetc@8
+_TEXT SEGMENT
+_c$ = 8 ; size = 4
+_file$ = 12 ; size = 4
+_gzungetc@8 PROC ; COMDAT
+
+; 426 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 427 : gz_statep state;
+; 428 :
+; 429 : /* get internal structure */
+; 430 : if (file == NULL)
+
+ 00004 8b 75 0c mov esi, DWORD PTR _file$[ebp]
+ 00007 85 f6 test esi, esi
+ 00009 75 08 jne SHORT $LN4@gzungetc
+$LN21@gzungetc:
+
+; 431 : return -1;
+
+ 0000b 83 c8 ff or eax, -1
+ 0000e 5e pop esi
+
+; 480 : }
+
+ 0000f 5d pop ebp
+ 00010 c2 08 00 ret 8
+$LN4@gzungetc:
+
+; 432 : state = (gz_statep)file;
+; 433 :
+; 434 : /* check that we're reading and that there's no (serious) error */
+; 435 : if (state->mode != GZ_READ ||
+
+ 00013 81 7e 10 4f 1c
+ 00 00 cmp DWORD PTR [esi+16], 7247 ; 00001c4fH
+ 0001a 75 ef jne SHORT $LN21@gzungetc
+ 0001c 8b 46 5c mov eax, DWORD PTR [esi+92]
+ 0001f 85 c0 test eax, eax
+ 00021 74 05 je SHORT $LN5@gzungetc
+ 00023 83 f8 fb cmp eax, -5 ; fffffffbH
+ 00026 75 e3 jne SHORT $LN21@gzungetc
+$LN5@gzungetc:
+
+; 436 : (state->err != Z_OK && state->err != Z_BUF_ERROR))
+; 437 : return -1;
+; 438 :
+; 439 : /* process a skip request */
+; 440 : if (state->seek) {
+
+ 00028 83 7e 58 00 cmp DWORD PTR [esi+88], 0
+ 0002c 74 1c je SHORT $LN8@gzungetc
+
+; 441 : state->seek = 0;
+; 442 : if (gz_skip(state, state->skip) == -1)
+
+ 0002e ff 76 54 push DWORD PTR [esi+84]
+ 00031 8b ce mov ecx, esi
+ 00033 c7 46 58 00 00
+ 00 00 mov DWORD PTR [esi+88], 0
+ 0003a ff 76 50 push DWORD PTR [esi+80]
+ 0003d e8 00 00 00 00 call _gz_skip
+ 00042 83 c4 08 add esp, 8
+ 00045 83 f8 ff cmp eax, -1
+ 00048 74 c1 je SHORT $LN21@gzungetc
+$LN8@gzungetc:
+ 0004a 53 push ebx
+
+; 443 : return -1;
+; 444 : }
+; 445 :
+; 446 : /* can't push EOF */
+; 447 : if (c < 0)
+
+ 0004b 8b 5d 08 mov ebx, DWORD PTR _c$[ebp]
+ 0004e 85 db test ebx, ebx
+ 00050 78 38 js SHORT $LN20@gzungetc
+
+; 448 : return -1;
+; 449 :
+; 450 : /* if output buffer empty, put byte at end (allows more pushing) */
+; 451 : if (state->x.have == 0) {
+
+ 00052 8b 0e mov ecx, DWORD PTR [esi]
+
+; 452 : state->x.have = 1;
+; 453 : state->x.next = state->out + (state->size << 1) - 1;
+
+ 00054 8b 56 1c mov edx, DWORD PTR [esi+28]
+ 00057 85 c9 test ecx, ecx
+ 00059 75 14 jne SHORT $LN10@gzungetc
+ 0005b 8b 4e 28 mov ecx, DWORD PTR [esi+40]
+ 0005e c7 06 01 00 00
+ 00 mov DWORD PTR [esi], 1
+ 00064 8d 0c 51 lea ecx, DWORD PTR [ecx+edx*2]
+ 00067 49 dec ecx
+ 00068 89 4e 04 mov DWORD PTR [esi+4], ecx
+
+; 454 : state->x.next[0] = c;
+
+ 0006b 88 19 mov BYTE PTR [ecx], bl
+
+; 455 : state->x.pos--;
+; 456 : state->past = 0;
+; 457 : return c;
+
+ 0006d eb 4e jmp SHORT $LN19@gzungetc
+$LN10@gzungetc:
+
+; 458 : }
+; 459 :
+; 460 : /* if no room, give up (must have already done a gzungetc()) */
+; 461 : if (state->x.have == (state->size << 1)) {
+
+ 0006f 8d 04 12 lea eax, DWORD PTR [edx+edx]
+ 00072 3b c8 cmp ecx, eax
+ 00074 75 1d jne SHORT $LN11@gzungetc
+
+; 462 : gz_error(state, Z_DATA_ERROR, "out of room to push characters");
+
+ 00076 68 00 00 00 00 push OFFSET ??_C@_0BP@IIKIGMCC@out?5of?5room?5to?5push?5characters?$AA@
+ 0007b ba fd ff ff ff mov edx, -3 ; fffffffdH
+ 00080 8b ce mov ecx, esi
+ 00082 e8 00 00 00 00 call _gz_error
+ 00087 83 c4 04 add esp, 4
+$LN20@gzungetc:
+
+; 463 : return -1;
+
+ 0008a 5b pop ebx
+ 0008b 83 c8 ff or eax, -1
+ 0008e 5e pop esi
+
+; 480 : }
+
+ 0008f 5d pop ebp
+ 00090 c2 08 00 ret 8
+$LN11@gzungetc:
+
+; 464 : }
+; 465 :
+; 466 : /* slide output data if needed and insert byte before existing data */
+; 467 : if (state->x.next == state->out) {
+
+ 00093 8b 46 28 mov eax, DWORD PTR [esi+40]
+ 00096 39 46 04 cmp DWORD PTR [esi+4], eax
+ 00099 75 18 jne SHORT $LN12@gzungetc
+
+; 468 : unsigned char *src = state->out + state->x.have;
+
+ 0009b 03 c8 add ecx, eax
+
+; 469 : unsigned char *dest = state->out + (state->size << 1);
+
+ 0009d 8d 14 50 lea edx, DWORD PTR [eax+edx*2]
+
+; 470 : while (src > state->out)
+
+ 000a0 3b c8 cmp ecx, eax
+ 000a2 76 0c jbe SHORT $LN3@gzungetc
+$LL2@gzungetc:
+
+; 471 : *--dest = *--src;
+
+ 000a4 8a 41 ff mov al, BYTE PTR [ecx-1]
+ 000a7 49 dec ecx
+ 000a8 4a dec edx
+ 000a9 88 02 mov BYTE PTR [edx], al
+ 000ab 3b 4e 28 cmp ecx, DWORD PTR [esi+40]
+ 000ae 77 f4 ja SHORT $LL2@gzungetc
+$LN3@gzungetc:
+
+; 472 : state->x.next = dest;
+
+ 000b0 89 56 04 mov DWORD PTR [esi+4], edx
+$LN12@gzungetc:
+
+; 473 : }
+; 474 : state->x.have++;
+
+ 000b3 ff 06 inc DWORD PTR [esi]
+
+; 475 : state->x.next--;
+
+ 000b5 ff 4e 04 dec DWORD PTR [esi+4]
+ 000b8 8b 46 04 mov eax, DWORD PTR [esi+4]
+
+; 476 : state->x.next[0] = c;
+
+ 000bb 88 18 mov BYTE PTR [eax], bl
+$LN19@gzungetc:
+
+; 477 : state->x.pos--;
+
+ 000bd 83 46 08 ff add DWORD PTR [esi+8], -1
+
+; 478 : state->past = 0;
+; 479 : return c;
+
+ 000c1 8b c3 mov eax, ebx
+ 000c3 5b pop ebx
+ 000c4 83 56 0c ff adc DWORD PTR [esi+12], -1
+ 000c8 c7 46 44 00 00
+ 00 00 mov DWORD PTR [esi+68], 0
+ 000cf 5e pop esi
+
+; 480 : }
+
+ 000d0 5d pop ebp
+ 000d1 c2 08 00 ret 8
+_gzungetc@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzread.c
+; COMDAT _gzgets@12
+_TEXT SEGMENT
+_left$1$ = 8 ; size = 4
+_file$ = 8 ; size = 4
+_eol$1$ = 12 ; size = 4
+_buf$ = 12 ; size = 4
+_str$1$ = 16 ; size = 4
+_len$ = 16 ; size = 4
+_gzgets@12 PROC ; COMDAT
+
+; 487 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 53 push ebx
+ 00004 56 push esi
+ 00005 57 push edi
+
+; 488 : unsigned left, n;
+; 489 : char *str;
+; 490 : unsigned char *eol;
+; 491 : gz_statep state;
+; 492 :
+; 493 : /* check parameters and get internal structure */
+; 494 : if (file == NULL || buf == NULL || len < 1)
+
+ 00006 8b 7d 08 mov edi, DWORD PTR _file$[ebp]
+ 00009 85 ff test edi, edi
+ 0000b 0f 84 f2 00 00
+ 00 je $LN6@gzgets
+ 00011 8b 5d 0c mov ebx, DWORD PTR _buf$[ebp]
+ 00014 85 db test ebx, ebx
+ 00016 0f 84 e7 00 00
+ 00 je $LN6@gzgets
+ 0001c 8b 75 10 mov esi, DWORD PTR _len$[ebp]
+ 0001f 83 fe 01 cmp esi, 1
+ 00022 0f 8c db 00 00
+ 00 jl $LN6@gzgets
+
+; 496 : state = (gz_statep)file;
+; 497 :
+; 498 : /* check that we're reading and that there's no (serious) error */
+; 499 : if (state->mode != GZ_READ ||
+
+ 00028 81 7f 10 4f 1c
+ 00 00 cmp DWORD PTR [edi+16], 7247 ; 00001c4fH
+ 0002f 0f 85 ce 00 00
+ 00 jne $LN6@gzgets
+ 00035 8b 47 5c mov eax, DWORD PTR [edi+92]
+ 00038 85 c0 test eax, eax
+ 0003a 74 09 je SHORT $LN7@gzgets
+ 0003c 83 f8 fb cmp eax, -5 ; fffffffbH
+ 0003f 0f 85 be 00 00
+ 00 jne $LN6@gzgets
+$LN7@gzgets:
+
+; 500 : (state->err != Z_OK && state->err != Z_BUF_ERROR))
+; 501 : return NULL;
+; 502 :
+; 503 : /* process a skip request */
+; 504 : if (state->seek) {
+
+ 00045 83 7f 58 00 cmp DWORD PTR [edi+88], 0
+ 00049 74 20 je SHORT $LN10@gzgets
+
+; 505 : state->seek = 0;
+; 506 : if (gz_skip(state, state->skip) == -1)
+
+ 0004b ff 77 54 push DWORD PTR [edi+84]
+ 0004e 8b cf mov ecx, edi
+ 00050 c7 47 58 00 00
+ 00 00 mov DWORD PTR [edi+88], 0
+ 00057 ff 77 50 push DWORD PTR [edi+80]
+ 0005a e8 00 00 00 00 call _gz_skip
+ 0005f 83 c4 08 add esp, 8
+ 00062 83 f8 ff cmp eax, -1
+ 00065 0f 84 98 00 00
+ 00 je $LN6@gzgets
+$LN10@gzgets:
+
+; 507 : return NULL;
+; 508 : }
+; 509 :
+; 510 : /* copy output bytes up to new line or len - 1, whichever comes first --
+; 511 : append a terminating zero to the string (we don't check for a zero in
+; 512 : the contents, let the user worry about that) */
+; 513 : str = buf;
+; 514 : left = (unsigned)len - 1;
+
+ 0006b 8d 46 ff lea eax, DWORD PTR [esi-1]
+ 0006e 89 5d 10 mov DWORD PTR _str$1$[ebp], ebx
+ 00071 89 45 08 mov DWORD PTR _left$1$[ebp], eax
+
+; 515 : if (left) do {
+
+ 00074 85 c0 test eax, eax
+ 00076 0f 84 87 00 00
+ 00 je $LN6@gzgets
+ 0007c 0f 1f 40 00 npad 4
+$LL4@gzgets:
+
+; 516 : /* assure that something is in the output buffer */
+; 517 : if (state->x.have == 0 && gz_fetch(state) == -1)
+
+ 00080 8b 37 mov esi, DWORD PTR [edi]
+ 00082 85 f6 test esi, esi
+ 00084 75 15 jne SHORT $LN26@gzgets
+ 00086 8b cf mov ecx, edi
+ 00088 e8 00 00 00 00 call _gz_fetch
+ 0008d 83 f8 ff cmp eax, -1
+ 00090 74 71 je SHORT $LN6@gzgets
+
+; 518 : return NULL; /* error */
+; 519 : if (state->x.have == 0) { /* end of file */
+
+ 00092 8b 37 mov esi, DWORD PTR [edi]
+ 00094 85 f6 test esi, esi
+ 00096 74 53 je SHORT $LN22@gzgets
+ 00098 8b 45 08 mov eax, DWORD PTR _left$1$[ebp]
+$LN26@gzgets:
+
+; 521 : break; /* return what we have */
+; 522 : }
+; 523 :
+; 524 : /* look for end-of-line in current output buffer */
+; 525 : n = state->x.have > left ? left : state->x.have;
+
+ 0009b 3b f0 cmp esi, eax
+ 0009d 0f 47 f0 cmova esi, eax
+
+; 526 : eol = (unsigned char *)memchr(state->x.next, '\n', n);
+
+ 000a0 56 push esi
+ 000a1 6a 0a push 10 ; 0000000aH
+ 000a3 ff 77 04 push DWORD PTR [edi+4]
+ 000a6 ff 15 00 00 00
+ 00 call DWORD PTR __imp__memchr
+ 000ac 83 c4 0c add esp, 12 ; 0000000cH
+ 000af 89 45 0c mov DWORD PTR _eol$1$[ebp], eax
+
+; 527 : if (eol != NULL)
+
+ 000b2 85 c0 test eax, eax
+ 000b4 74 06 je SHORT $LN14@gzgets
+
+; 528 : n = (unsigned)(eol - state->x.next) + 1;
+
+ 000b6 8b f0 mov esi, eax
+ 000b8 2b 77 04 sub esi, DWORD PTR [edi+4]
+ 000bb 46 inc esi
+$LN14@gzgets:
+
+; 529 :
+; 530 : /* copy through end-of-line, or remainder if not found */
+; 531 : memcpy(buf, state->x.next, n);
+
+ 000bc 56 push esi
+ 000bd ff 77 04 push DWORD PTR [edi+4]
+ 000c0 53 push ebx
+ 000c1 e8 00 00 00 00 call _memcpy
+
+; 532 : state->x.have -= n;
+
+ 000c6 29 37 sub DWORD PTR [edi], esi
+ 000c8 83 c4 0c add esp, 12 ; 0000000cH
+
+; 533 : state->x.next += n;
+
+ 000cb 01 77 04 add DWORD PTR [edi+4], esi
+
+; 534 : state->x.pos += n;
+
+ 000ce 01 77 08 add DWORD PTR [edi+8], esi
+
+; 535 : left -= n;
+
+ 000d1 8b 45 08 mov eax, DWORD PTR _left$1$[ebp]
+ 000d4 83 57 0c 00 adc DWORD PTR [edi+12], 0
+ 000d8 2b c6 sub eax, esi
+
+; 536 : buf += n;
+
+ 000da 03 de add ebx, esi
+ 000dc 89 45 08 mov DWORD PTR _left$1$[ebp], eax
+
+; 537 : } while (left && eol == NULL);
+
+ 000df 85 c0 test eax, eax
+ 000e1 74 0f je SHORT $LN15@gzgets
+ 000e3 83 7d 0c 00 cmp DWORD PTR _eol$1$[ebp], 0
+ 000e7 74 97 je SHORT $LL4@gzgets
+ 000e9 eb 07 jmp SHORT $LN15@gzgets
+$LN22@gzgets:
+
+; 520 : state->past = 1; /* read past end */
+
+ 000eb c7 47 44 01 00
+ 00 00 mov DWORD PTR [edi+68], 1
+$LN15@gzgets:
+
+; 538 :
+; 539 : /* return terminated string, or if nothing, end of file */
+; 540 : if (buf == str)
+
+ 000f2 8b 45 10 mov eax, DWORD PTR _str$1$[ebp]
+ 000f5 3b d8 cmp ebx, eax
+ 000f7 74 0a je SHORT $LN6@gzgets
+
+; 541 : return NULL;
+; 542 : buf[0] = 0;
+
+ 000f9 5f pop edi
+ 000fa 5e pop esi
+ 000fb c6 03 00 mov BYTE PTR [ebx], 0
+ 000fe 5b pop ebx
+
+; 543 : return str;
+; 544 : }
+
+ 000ff 5d pop ebp
+ 00100 c2 0c 00 ret 12 ; 0000000cH
+$LN6@gzgets:
+ 00103 5f pop edi
+ 00104 5e pop esi
+
+; 495 : return NULL;
+
+ 00105 33 c0 xor eax, eax
+ 00107 5b pop ebx
+
+; 543 : return str;
+; 544 : }
+
+ 00108 5d pop ebp
+ 00109 c2 0c 00 ret 12 ; 0000000cH
+_gzgets@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzread.c
+; COMDAT _gzdirect@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_gzdirect@4 PROC ; COMDAT
+
+; 549 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 550 : gz_statep state;
+; 551 :
+; 552 : /* get internal structure */
+; 553 : if (file == NULL)
+
+ 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 00007 85 f6 test esi, esi
+ 00009 75 07 jne SHORT $LN2@gzdirect
+
+; 554 : return 0;
+
+ 0000b 33 c0 xor eax, eax
+ 0000d 5e pop esi
+
+; 564 : }
+
+ 0000e 5d pop ebp
+ 0000f c2 04 00 ret 4
+$LN2@gzdirect:
+
+; 555 : state = (gz_statep)file;
+; 556 :
+; 557 : /* if the state is not known, but we can find out, then do so (this is
+; 558 : mainly for right after a gzopen() or gzdopen()) */
+; 559 : if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0)
+
+ 00012 81 7e 10 4f 1c
+ 00 00 cmp DWORD PTR [esi+16], 7247 ; 00001c4fH
+ 00019 75 12 jne SHORT $LN3@gzdirect
+ 0001b 83 7e 30 00 cmp DWORD PTR [esi+48], 0
+ 0001f 75 0c jne SHORT $LN3@gzdirect
+ 00021 83 3e 00 cmp DWORD PTR [esi], 0
+ 00024 75 07 jne SHORT $LN3@gzdirect
+
+; 560 : (void)gz_look(state);
+
+ 00026 8b ce mov ecx, esi
+ 00028 e8 00 00 00 00 call _gz_look
+$LN3@gzdirect:
+
+; 561 :
+; 562 : /* return 1 if transparent, 0 if processing a gzip stream */
+; 563 : return state->direct;
+
+ 0002d 8b 46 2c mov eax, DWORD PTR [esi+44]
+ 00030 5e pop esi
+
+; 564 : }
+
+ 00031 5d pop ebp
+ 00032 c2 04 00 ret 4
+_gzdirect@4 ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzread.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzread.obj
new file mode 100644
index 0000000000..cab7e2ac58
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzread.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzwrite.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzwrite.cod
new file mode 100644
index 0000000000..f46513b8af
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzwrite.cod
@@ -0,0 +1,1895 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\gzwrite.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+PUBLIC ??_C@_0CH@DEEGAHIB@internal?5error?3?5deflate?5stream?5c@ ; `string'
+EXTRN __imp___write:PROC
+; COMDAT ??_C@_0CH@DEEGAHIB@internal?5error?3?5deflate?5stream?5c@
+CONST SEGMENT
+??_C@_0CH@DEEGAHIB@internal?5error?3?5deflate?5stream?5c@ DB 'internal er'
+ DB 'ror: deflate stream corrupt', 00H ; `string'
+PUBLIC _gzsetparams@12
+PUBLIC _gzflush@8
+PUBLIC _gzprintf
+PUBLIC _gzvprintf
+PUBLIC _gzputs@8
+PUBLIC _gzputc@8
+PUBLIC _gzwrite@12
+PUBLIC _vsnprintf
+PUBLIC _gzclose_w@4
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzwrite.c
+; COMDAT _gzclose_w@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_gzclose_w@4 PROC ; COMDAT
+
+; 541 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 542 : int ret = Z_OK;
+; 543 : gz_statep state;
+; 544 :
+; 545 : /* get internal structure */
+; 546 : if (file == NULL)
+
+ 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 00007 57 push edi
+ 00008 33 ff xor edi, edi
+ 0000a 85 f6 test esi, esi
+ 0000c 75 0b jne SHORT $LN2@gzclose_w
+$LN11@gzclose_w:
+ 0000e 5f pop edi
+
+; 547 : return Z_STREAM_ERROR;
+
+ 0000f b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 00014 5e pop esi
+
+; 577 : }
+
+ 00015 5d pop ebp
+ 00016 c2 04 00 ret 4
+$LN2@gzclose_w:
+
+; 548 : state = (gz_statep)file;
+; 549 :
+; 550 : /* check that we're writing */
+; 551 : if (state->mode != GZ_WRITE)
+
+ 00019 81 7e 10 b1 79
+ 00 00 cmp DWORD PTR [esi+16], 31153 ; 000079b1H
+ 00020 75 ec jne SHORT $LN11@gzclose_w
+
+; 552 : return Z_STREAM_ERROR;
+; 553 :
+; 554 : /* check for seek request */
+; 555 : if (state->seek) {
+
+ 00022 39 7e 58 cmp DWORD PTR [esi+88], edi
+ 00025 74 1b je SHORT $LN5@gzclose_w
+
+; 556 : state->seek = 0;
+; 557 : if (gz_zero(state, state->skip) == -1)
+
+ 00027 ff 76 54 push DWORD PTR [esi+84]
+ 0002a 8b ce mov ecx, esi
+ 0002c 89 7e 58 mov DWORD PTR [esi+88], edi
+ 0002f ff 76 50 push DWORD PTR [esi+80]
+ 00032 e8 00 00 00 00 call _gz_zero
+ 00037 83 c4 08 add esp, 8
+ 0003a 83 f8 ff cmp eax, -1
+ 0003d 75 03 jne SHORT $LN5@gzclose_w
+
+; 558 : ret = state->err;
+
+ 0003f 8b 7e 5c mov edi, DWORD PTR [esi+92]
+$LN5@gzclose_w:
+
+; 559 : }
+; 560 :
+; 561 : /* flush, free memory, and close file */
+; 562 : if (gz_comp(state, Z_FINISH) == -1)
+
+ 00042 ba 04 00 00 00 mov edx, 4
+ 00047 8b ce mov ecx, esi
+ 00049 e8 00 00 00 00 call _gz_comp
+ 0004e 83 f8 ff cmp eax, -1
+ 00051 75 03 jne SHORT $LN6@gzclose_w
+
+; 563 : ret = state->err;
+
+ 00053 8b 7e 5c mov edi, DWORD PTR [esi+92]
+$LN6@gzclose_w:
+
+; 564 : if (state->size) {
+
+ 00056 83 7e 1c 00 cmp DWORD PTR [esi+28], 0
+ 0005a 53 push ebx
+ 0005b 8b 1d 00 00 00
+ 00 mov ebx, DWORD PTR __imp__free
+ 00061 74 1f je SHORT $LN7@gzclose_w
+
+; 565 : if (!state->direct) {
+
+ 00063 83 7e 2c 00 cmp DWORD PTR [esi+44], 0
+ 00067 75 11 jne SHORT $LN8@gzclose_w
+
+; 566 : (void)deflateEnd(&(state->strm));
+
+ 00069 8d 46 64 lea eax, DWORD PTR [esi+100]
+ 0006c 50 push eax
+ 0006d e8 00 00 00 00 call _deflateEnd@4
+
+; 567 : free(state->out);
+
+ 00072 ff 76 28 push DWORD PTR [esi+40]
+ 00075 ff d3 call ebx
+ 00077 83 c4 04 add esp, 4
+$LN8@gzclose_w:
+
+; 568 : }
+; 569 : free(state->in);
+
+ 0007a ff 76 24 push DWORD PTR [esi+36]
+ 0007d ff d3 call ebx
+ 0007f 83 c4 04 add esp, 4
+$LN7@gzclose_w:
+
+; 570 : }
+; 571 : gz_error(state, Z_OK, NULL);
+
+ 00082 6a 00 push 0
+ 00084 33 d2 xor edx, edx
+ 00086 8b ce mov ecx, esi
+ 00088 e8 00 00 00 00 call _gz_error
+
+; 572 : free(state->path);
+
+ 0008d ff 76 18 push DWORD PTR [esi+24]
+ 00090 ff d3 call ebx
+
+; 573 : if (close(state->fd) == -1)
+
+ 00092 ff 76 14 push DWORD PTR [esi+20]
+ 00095 ff 15 00 00 00
+ 00 call DWORD PTR __imp___close
+ 0009b 83 c9 ff or ecx, -1
+ 0009e 3b c1 cmp eax, ecx
+
+; 574 : ret = Z_ERRNO;
+; 575 : free(state);
+
+ 000a0 56 push esi
+ 000a1 0f 44 f9 cmove edi, ecx
+ 000a4 ff d3 call ebx
+ 000a6 83 c4 10 add esp, 16 ; 00000010H
+
+; 576 : return ret;
+
+ 000a9 8b c7 mov eax, edi
+ 000ab 5b pop ebx
+ 000ac 5f pop edi
+ 000ad 5e pop esi
+
+; 577 : }
+
+ 000ae 5d pop ebp
+ 000af c2 04 00 ret 4
+_gzclose_w@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\stdio.h
+; COMDAT _vsnprintf
+_TEXT SEGMENT
+__Format$ = 8 ; size = 4
+__ArgList$ = 12 ; size = 4
+_vsnprintf PROC ; COMDAT
+; __Buffer$ = ecx
+; __BufferCount$ = edx
+
+; 1435 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1436 : int const _Result = __stdio_common_vsprintf(
+
+ 00003 ff 75 0c push DWORD PTR __ArgList$[ebp]
+ 00006 6a 00 push 0
+ 00008 ff 75 08 push DWORD PTR __Format$[ebp]
+ 0000b 52 push edx
+ 0000c 51 push ecx
+ 0000d e8 00 00 00 00 call ___local_stdio_printf_options
+ 00012 8b 08 mov ecx, DWORD PTR [eax]
+ 00014 ff 70 04 push DWORD PTR [eax+4]
+ 00017 83 c9 02 or ecx, 2
+ 0001a 51 push ecx
+ 0001b ff 15 00 00 00
+ 00 call DWORD PTR __imp____stdio_common_vsprintf
+
+; 1437 : _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS | _CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR,
+; 1438 : _Buffer, _BufferCount, _Format, NULL, _ArgList);
+; 1439 :
+; 1440 : return _Result < 0 ? -1 : _Result;
+
+ 00021 83 c9 ff or ecx, -1
+ 00024 83 c4 1c add esp, 28 ; 0000001cH
+ 00027 85 c0 test eax, eax
+ 00029 0f 48 c1 cmovs eax, ecx
+
+; 1441 : }
+
+ 0002c 5d pop ebp
+ 0002d c3 ret 0
+_vsnprintf ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzwrite.c
+; COMDAT _gz_init
+_TEXT SEGMENT
+_gz_init PROC ; COMDAT
+; _state$ = ecx
+
+; 17 : {
+
+ 00000 56 push esi
+ 00001 57 push edi
+ 00002 8b f9 mov edi, ecx
+
+; 18 : int ret;
+; 19 : z_streamp strm = &(state->strm);
+; 20 :
+; 21 : /* allocate input buffer */
+; 22 : state->in = (unsigned char *)malloc(state->want);
+
+ 00004 ff 77 20 push DWORD PTR [edi+32]
+ 00007 8d 77 64 lea esi, DWORD PTR [edi+100]
+ 0000a ff 15 00 00 00
+ 00 call DWORD PTR __imp__malloc
+ 00010 83 c4 04 add esp, 4
+ 00013 89 47 24 mov DWORD PTR [edi+36], eax
+
+; 23 : if (state->in == NULL) {
+
+ 00016 85 c0 test eax, eax
+ 00018 75 18 jne SHORT $LN2@gz_init
+
+; 24 : gz_error(state, Z_MEM_ERROR, "out of memory");
+
+ 0001a 68 00 00 00 00 push OFFSET ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@
+ 0001f 8d 50 fc lea edx, DWORD PTR [eax-4]
+ 00022 8b cf mov ecx, edi
+ 00024 e8 00 00 00 00 call _gz_error
+ 00029 83 c4 04 add esp, 4
+
+; 25 : return -1;
+
+ 0002c 83 c8 ff or eax, -1
+ 0002f 5f pop edi
+ 00030 5e pop esi
+
+; 62 : }
+
+ 00031 c3 ret 0
+$LN2@gz_init:
+
+; 26 : }
+; 27 :
+; 28 : /* only need output buffer and deflate state if compressing */
+; 29 : if (!state->direct) {
+
+ 00032 83 7f 2c 00 cmp DWORD PTR [edi+44], 0
+ 00036 0f 85 92 00 00
+ 00 jne $LN5@gz_init
+
+; 30 : /* allocate output buffer */
+; 31 : state->out = (unsigned char *)malloc(state->want);
+
+ 0003c ff 77 20 push DWORD PTR [edi+32]
+ 0003f ff 15 00 00 00
+ 00 call DWORD PTR __imp__malloc
+ 00045 83 c4 04 add esp, 4
+ 00048 89 47 28 mov DWORD PTR [edi+40], eax
+
+; 32 : if (state->out == NULL) {
+
+ 0004b 85 c0 test eax, eax
+ 0004d 75 23 jne SHORT $LN4@gz_init
+
+; 33 : free(state->in);
+
+ 0004f ff 77 24 push DWORD PTR [edi+36]
+ 00052 ff 15 00 00 00
+ 00 call DWORD PTR __imp__free
+
+; 34 : gz_error(state, Z_MEM_ERROR, "out of memory");
+
+ 00058 68 00 00 00 00 push OFFSET ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@
+ 0005d ba fc ff ff ff mov edx, -4 ; fffffffcH
+ 00062 8b cf mov ecx, edi
+ 00064 e8 00 00 00 00 call _gz_error
+ 00069 83 c4 08 add esp, 8
+
+; 35 : return -1;
+
+ 0006c 83 c8 ff or eax, -1
+ 0006f 5f pop edi
+ 00070 5e pop esi
+
+; 62 : }
+
+ 00071 c3 ret 0
+$LN4@gz_init:
+
+; 36 : }
+; 37 :
+; 38 : /* allocate deflate memory, set up for gzip compression */
+; 39 : strm->zalloc = Z_NULL;
+; 40 : strm->zfree = Z_NULL;
+; 41 : strm->opaque = Z_NULL;
+; 42 : ret = deflateInit2(strm, state->level, Z_DEFLATED,
+
+ 00072 6a 38 push 56 ; 00000038H
+ 00074 68 00 00 00 00 push OFFSET ??_C@_05IAIEPMAK@1?42?48?$AA@
+ 00079 c7 46 20 00 00
+ 00 00 mov DWORD PTR [esi+32], 0
+ 00080 c7 46 24 00 00
+ 00 00 mov DWORD PTR [esi+36], 0
+ 00087 c7 46 28 00 00
+ 00 00 mov DWORD PTR [esi+40], 0
+ 0008e ff 77 4c push DWORD PTR [edi+76]
+ 00091 6a 08 push 8
+ 00093 6a 1f push 31 ; 0000001fH
+ 00095 6a 08 push 8
+ 00097 ff 77 48 push DWORD PTR [edi+72]
+ 0009a 56 push esi
+ 0009b e8 00 00 00 00 call _deflateInit2_@32
+
+; 43 : MAX_WBITS + 16, DEF_MEM_LEVEL, state->strategy);
+; 44 : if (ret != Z_OK) {
+
+ 000a0 85 c0 test eax, eax
+ 000a2 74 2a je SHORT $LN5@gz_init
+
+; 45 : free(state->out);
+
+ 000a4 ff 77 28 push DWORD PTR [edi+40]
+ 000a7 8b 35 00 00 00
+ 00 mov esi, DWORD PTR __imp__free
+ 000ad ff d6 call esi
+
+; 46 : free(state->in);
+
+ 000af ff 77 24 push DWORD PTR [edi+36]
+ 000b2 ff d6 call esi
+
+; 47 : gz_error(state, Z_MEM_ERROR, "out of memory");
+
+ 000b4 68 00 00 00 00 push OFFSET ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@
+ 000b9 ba fc ff ff ff mov edx, -4 ; fffffffcH
+ 000be 8b cf mov ecx, edi
+ 000c0 e8 00 00 00 00 call _gz_error
+ 000c5 83 c4 0c add esp, 12 ; 0000000cH
+
+; 48 : return -1;
+
+ 000c8 83 c8 ff or eax, -1
+ 000cb 5f pop edi
+ 000cc 5e pop esi
+
+; 62 : }
+
+ 000cd c3 ret 0
+$LN5@gz_init:
+
+; 49 : }
+; 50 : }
+; 51 :
+; 52 : /* mark state as initialized */
+; 53 : state->size = state->want;
+; 54 :
+; 55 : /* initialize write buffer if compressing */
+; 56 : if (!state->direct) {
+
+ 000ce 83 7f 2c 00 cmp DWORD PTR [edi+44], 0
+ 000d2 8b 47 20 mov eax, DWORD PTR [edi+32]
+ 000d5 89 47 1c mov DWORD PTR [edi+28], eax
+ 000d8 75 0c jne SHORT $LN6@gz_init
+
+; 57 : strm->avail_out = state->size;
+
+ 000da 89 46 10 mov DWORD PTR [esi+16], eax
+
+; 58 : strm->next_out = state->out;
+
+ 000dd 8b 47 28 mov eax, DWORD PTR [edi+40]
+ 000e0 89 46 0c mov DWORD PTR [esi+12], eax
+
+; 59 : state->x.next = strm->next_out;
+
+ 000e3 89 47 04 mov DWORD PTR [edi+4], eax
+$LN6@gz_init:
+
+; 60 : }
+; 61 : return 0;
+
+ 000e6 5f pop edi
+ 000e7 33 c0 xor eax, eax
+ 000e9 5e pop esi
+
+; 62 : }
+
+ 000ea c3 ret 0
+_gz_init ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzwrite.c
+; COMDAT _gz_comp
+_TEXT SEGMENT
+_flush$1$ = -4 ; size = 4
+_gz_comp PROC ; COMDAT
+; _state$ = ecx
+; _flush$ = edx
+
+; 73 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 56 push esi
+ 00005 57 push edi
+ 00006 8b f9 mov edi, ecx
+ 00008 89 55 fc mov DWORD PTR _flush$1$[ebp], edx
+
+; 74 : int ret, got;
+; 75 : unsigned have;
+; 76 : z_streamp strm = &(state->strm);
+; 77 :
+; 78 : /* allocate memory if this is the first time through */
+; 79 : if (state->size == 0 && gz_init(state) == -1)
+
+ 0000b 83 7f 1c 00 cmp DWORD PTR [edi+28], 0
+ 0000f 8d 77 64 lea esi, DWORD PTR [edi+100]
+ 00012 75 0d jne SHORT $LN5@gz_comp
+ 00014 e8 00 00 00 00 call _gz_init
+ 00019 83 f8 ff cmp eax, -1
+ 0001c 74 4e je SHORT $LN26@gz_comp
+ 0001e 8b 55 fc mov edx, DWORD PTR _flush$1$[ebp]
+$LN5@gz_comp:
+
+; 80 : return -1;
+; 81 :
+; 82 : /* write directly if requested */
+; 83 : if (state->direct) {
+
+ 00021 83 7f 2c 00 cmp DWORD PTR [edi+44], 0
+ 00025 74 4e je SHORT $LN6@gz_comp
+
+; 84 : got = write(state->fd, strm->next_in, strm->avail_in);
+
+ 00027 ff 76 04 push DWORD PTR [esi+4]
+ 0002a ff 36 push DWORD PTR [esi]
+ 0002c ff 77 14 push DWORD PTR [edi+20]
+ 0002f ff 15 00 00 00
+ 00 call DWORD PTR __imp___write
+ 00035 83 c4 0c add esp, 12 ; 0000000cH
+
+; 85 : if (got < 0 || (unsigned)got != strm->avail_in) {
+
+ 00038 85 c0 test eax, eax
+ 0003a 78 14 js SHORT $LN8@gz_comp
+ 0003c 3b 46 04 cmp eax, DWORD PTR [esi+4]
+ 0003f 75 0f jne SHORT $LN8@gz_comp
+
+; 88 : }
+; 89 : strm->avail_in = 0;
+
+ 00041 5f pop edi
+ 00042 c7 46 04 00 00
+ 00 00 mov DWORD PTR [esi+4], 0
+
+; 90 : return 0;
+
+ 00049 33 c0 xor eax, eax
+ 0004b 5e pop esi
+
+; 130 : }
+
+ 0004c 8b e5 mov esp, ebp
+ 0004e 5d pop ebp
+ 0004f c3 ret 0
+$LN8@gz_comp:
+
+; 86 : gz_error(state, Z_ERRNO, zstrerror());
+
+ 00050 ff 15 00 00 00
+ 00 call DWORD PTR __imp___errno
+ 00056 ff 30 push DWORD PTR [eax]
+ 00058 ff 15 00 00 00
+ 00 call DWORD PTR __imp__strerror
+ 0005e 50 push eax
+ 0005f 83 ca ff or edx, -1
+ 00062 8b cf mov ecx, edi
+ 00064 e8 00 00 00 00 call _gz_error
+ 00069 83 c4 08 add esp, 8
+$LN26@gz_comp:
+
+; 87 : return -1;
+
+ 0006c 5f pop edi
+ 0006d 83 c8 ff or eax, -1
+ 00070 5e pop esi
+
+; 130 : }
+
+ 00071 8b e5 mov esp, ebp
+ 00073 5d pop ebp
+ 00074 c3 ret 0
+$LN6@gz_comp:
+
+; 91 : }
+; 92 :
+; 93 : /* run deflate() on provided input until it produces no more output */
+; 94 : ret = Z_OK;
+
+ 00075 33 c0 xor eax, eax
+ 00077 53 push ebx
+$LL4@gz_comp:
+
+; 95 : do {
+; 96 : /* write out current buffer contents if full, or if flushing, but if
+; 97 : doing Z_FINISH then don't write until we get to Z_STREAM_END */
+; 98 : if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
+
+ 00078 83 7e 10 00 cmp DWORD PTR [esi+16], 0
+ 0007c 74 0e je SHORT $LN11@gz_comp
+ 0007e 85 d2 test edx, edx
+ 00080 74 45 je SHORT $LN9@gz_comp
+ 00082 83 fa 04 cmp edx, 4
+ 00085 75 05 jne SHORT $LN11@gz_comp
+ 00087 83 f8 01 cmp eax, 1
+ 0008a 75 3b jne SHORT $LN9@gz_comp
+$LN11@gz_comp:
+
+; 99 : (flush != Z_FINISH || ret == Z_STREAM_END))) {
+; 100 : have = (unsigned)(strm->next_out - state->x.next);
+
+ 0008c 8b 5e 0c mov ebx, DWORD PTR [esi+12]
+ 0008f 8b 47 04 mov eax, DWORD PTR [edi+4]
+ 00092 2b d8 sub ebx, eax
+
+; 101 : if (have && ((got = write(state->fd, state->x.next, have)) < 0 ||
+
+ 00094 74 16 je SHORT $LN12@gz_comp
+ 00096 53 push ebx
+ 00097 50 push eax
+ 00098 ff 77 14 push DWORD PTR [edi+20]
+ 0009b ff 15 00 00 00
+ 00 call DWORD PTR __imp___write
+ 000a1 83 c4 0c add esp, 12 ; 0000000cH
+ 000a4 85 c0 test eax, eax
+ 000a6 78 38 js SHORT $LN13@gz_comp
+ 000a8 3b c3 cmp eax, ebx
+ 000aa 75 34 jne SHORT $LN13@gz_comp
+$LN12@gz_comp:
+
+; 104 : return -1;
+; 105 : }
+; 106 : if (strm->avail_out == 0) {
+
+ 000ac 83 7e 10 00 cmp DWORD PTR [esi+16], 0
+ 000b0 75 0c jne SHORT $LN14@gz_comp
+
+; 107 : strm->avail_out = state->size;
+
+ 000b2 8b 47 1c mov eax, DWORD PTR [edi+28]
+ 000b5 89 46 10 mov DWORD PTR [esi+16], eax
+
+; 108 : strm->next_out = state->out;
+
+ 000b8 8b 47 28 mov eax, DWORD PTR [edi+40]
+ 000bb 89 46 0c mov DWORD PTR [esi+12], eax
+$LN14@gz_comp:
+
+; 109 : }
+; 110 : state->x.next = strm->next_out;
+
+ 000be 8b 46 0c mov eax, DWORD PTR [esi+12]
+ 000c1 8b 55 fc mov edx, DWORD PTR _flush$1$[ebp]
+ 000c4 89 47 04 mov DWORD PTR [edi+4], eax
+$LN9@gz_comp:
+
+; 111 : }
+; 112 :
+; 113 : /* compress */
+; 114 : have = strm->avail_out;
+
+ 000c7 8b 5e 10 mov ebx, DWORD PTR [esi+16]
+
+; 115 : ret = deflate(strm, flush);
+
+ 000ca 52 push edx
+ 000cb 56 push esi
+ 000cc e8 00 00 00 00 call _deflate@8
+
+; 116 : if (ret == Z_STREAM_ERROR) {
+
+ 000d1 83 f8 fe cmp eax, -2 ; fffffffeH
+ 000d4 74 45 je SHORT $LN20@gz_comp
+
+; 120 : }
+; 121 : have -= strm->avail_out;
+
+ 000d6 2b 5e 10 sub ebx, DWORD PTR [esi+16]
+
+; 122 : } while (have);
+
+ 000d9 74 2b je SHORT $LN19@gz_comp
+ 000db 8b 55 fc mov edx, DWORD PTR _flush$1$[ebp]
+ 000de eb 98 jmp SHORT $LL4@gz_comp
+$LN13@gz_comp:
+
+; 102 : (unsigned)got != have)) {
+; 103 : gz_error(state, Z_ERRNO, zstrerror());
+
+ 000e0 ff 15 00 00 00
+ 00 call DWORD PTR __imp___errno
+ 000e6 ff 30 push DWORD PTR [eax]
+ 000e8 ff 15 00 00 00
+ 00 call DWORD PTR __imp__strerror
+ 000ee 50 push eax
+ 000ef 83 ca ff or edx, -1
+ 000f2 8b cf mov ecx, edi
+ 000f4 e8 00 00 00 00 call _gz_error
+ 000f9 83 c4 08 add esp, 8
+
+; 118 : "internal error: deflate stream corrupt");
+; 119 : return -1;
+
+ 000fc 83 c8 ff or eax, -1
+ 000ff 5b pop ebx
+ 00100 5f pop edi
+ 00101 5e pop esi
+
+; 130 : }
+
+ 00102 8b e5 mov esp, ebp
+ 00104 5d pop ebp
+ 00105 c3 ret 0
+$LN19@gz_comp:
+
+; 123 :
+; 124 : /* if that completed a deflate stream, allow another to start */
+; 125 : if (flush == Z_FINISH)
+
+ 00106 83 7d fc 04 cmp DWORD PTR _flush$1$[ebp], 4
+ 0010a 75 06 jne SHORT $LN16@gz_comp
+
+; 126 : deflateReset(strm);
+
+ 0010c 56 push esi
+ 0010d e8 00 00 00 00 call _deflateReset@4
+$LN16@gz_comp:
+
+; 127 :
+; 128 : /* all done, no errors */
+; 129 : return 0;
+
+ 00112 5b pop ebx
+ 00113 5f pop edi
+ 00114 33 c0 xor eax, eax
+ 00116 5e pop esi
+
+; 130 : }
+
+ 00117 8b e5 mov esp, ebp
+ 00119 5d pop ebp
+ 0011a c3 ret 0
+$LN20@gz_comp:
+
+; 117 : gz_error(state, Z_STREAM_ERROR,
+
+ 0011b 68 00 00 00 00 push OFFSET ??_C@_0CH@DEEGAHIB@internal?5error?3?5deflate?5stream?5c@
+ 00120 ba fe ff ff ff mov edx, -2 ; fffffffeH
+ 00125 8b cf mov ecx, edi
+ 00127 e8 00 00 00 00 call _gz_error
+ 0012c 83 c4 04 add esp, 4
+
+; 118 : "internal error: deflate stream corrupt");
+; 119 : return -1;
+
+ 0012f 83 c8 ff or eax, -1
+ 00132 5b pop ebx
+ 00133 5f pop edi
+ 00134 5e pop esi
+
+; 130 : }
+
+ 00135 8b e5 mov esp, ebp
+ 00137 5d pop ebp
+ 00138 c3 ret 0
+_gz_comp ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzwrite.c
+; COMDAT _gz_zero
+_TEXT SEGMENT
+_first$1$ = -8 ; size = 4
+_len$2$ = -4 ; size = 4
+_len$ = 8 ; size = 8
+_gz_zero PROC ; COMDAT
+; _state$ = ecx
+
+; 136 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 08 sub esp, 8
+ 00006 56 push esi
+ 00007 8b f1 mov esi, ecx
+
+; 137 : int first;
+; 138 : unsigned n;
+; 139 : z_streamp strm = &(state->strm);
+; 140 :
+; 141 : /* consume whatever's left in the input buffer */
+; 142 : if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+
+ 00009 83 7e 68 00 cmp DWORD PTR [esi+104], 0
+ 0000d 74 13 je SHORT $LN4@gz_zero
+ 0000f 33 d2 xor edx, edx
+ 00011 e8 00 00 00 00 call _gz_comp
+ 00016 83 f8 ff cmp eax, -1
+ 00019 75 07 jne SHORT $LN4@gz_zero
+
+; 143 : return -1;
+
+ 0001b 0b c0 or eax, eax
+ 0001d 5e pop esi
+
+; 162 : }
+
+ 0001e 8b e5 mov esp, ebp
+ 00020 5d pop ebp
+ 00021 c3 ret 0
+$LN4@gz_zero:
+
+; 144 :
+; 145 : /* compress len zeros (len guaranteed > 0) */
+; 146 : first = 1;
+; 147 : while (len) {
+
+ 00022 8b 4d 0c mov ecx, DWORD PTR _len$[ebp+4]
+ 00025 ba 01 00 00 00 mov edx, 1
+ 0002a 53 push ebx
+ 0002b 8b 5d 08 mov ebx, DWORD PTR _len$[ebp]
+ 0002e 8b c3 mov eax, ebx
+ 00030 0b c1 or eax, ecx
+ 00032 89 55 f8 mov DWORD PTR _first$1$[ebp], edx
+ 00035 57 push edi
+ 00036 89 4d fc mov DWORD PTR _len$2$[ebp], ecx
+ 00039 74 61 je SHORT $LN3@gz_zero
+ 0003b 0f 1f 44 00 00 npad 5
+$LL2@gz_zero:
+
+; 148 : n = GT_OFF(state->size) || (z_off64_t)state->size > len ?
+
+ 00040 8b 7e 1c mov edi, DWORD PTR [esi+28]
+ 00043 33 c0 xor eax, eax
+ 00045 3b c1 cmp eax, ecx
+ 00047 7f 06 jg SHORT $LN8@gz_zero
+ 00049 7c 06 jl SHORT $LN9@gz_zero
+ 0004b 3b fb cmp edi, ebx
+ 0004d 76 02 jbe SHORT $LN9@gz_zero
+$LN8@gz_zero:
+ 0004f 8b fb mov edi, ebx
+$LN9@gz_zero:
+
+; 149 : (unsigned)len : state->size;
+; 150 : if (first) {
+
+ 00051 85 d2 test edx, edx
+ 00053 74 15 je SHORT $LN5@gz_zero
+
+; 151 : memset(state->in, 0, n);
+
+ 00055 57 push edi
+ 00056 6a 00 push 0
+ 00058 ff 76 24 push DWORD PTR [esi+36]
+ 0005b e8 00 00 00 00 call _memset
+ 00060 83 c4 0c add esp, 12 ; 0000000cH
+
+; 152 : first = 0;
+
+ 00063 c7 45 f8 00 00
+ 00 00 mov DWORD PTR _first$1$[ebp], 0
+$LN5@gz_zero:
+
+; 153 : }
+; 154 : strm->avail_in = n;
+
+ 0006a 89 7e 68 mov DWORD PTR [esi+104], edi
+
+; 155 : strm->next_in = state->in;
+; 156 : state->x.pos += n;
+; 157 : if (gz_comp(state, Z_NO_FLUSH) == -1)
+
+ 0006d 8b ce mov ecx, esi
+ 0006f 8b 46 24 mov eax, DWORD PTR [esi+36]
+ 00072 89 46 64 mov DWORD PTR [esi+100], eax
+ 00075 01 7e 08 add DWORD PTR [esi+8], edi
+ 00078 83 56 0c 00 adc DWORD PTR [esi+12], 0
+ 0007c 33 d2 xor edx, edx
+ 0007e e8 00 00 00 00 call _gz_comp
+ 00083 83 f8 ff cmp eax, -1
+ 00086 74 1d je SHORT $LN11@gz_zero
+
+; 159 : len -= n;
+
+ 00088 8b 4d fc mov ecx, DWORD PTR _len$2$[ebp]
+ 0008b 2b df sub ebx, edi
+ 0008d 8b 55 f8 mov edx, DWORD PTR _first$1$[ebp]
+ 00090 8b c3 mov eax, ebx
+ 00092 83 d9 00 sbb ecx, 0
+ 00095 0b c1 or eax, ecx
+ 00097 89 4d fc mov DWORD PTR _len$2$[ebp], ecx
+ 0009a 75 a4 jne SHORT $LL2@gz_zero
+$LN3@gz_zero:
+ 0009c 5f pop edi
+ 0009d 5b pop ebx
+
+; 160 : }
+; 161 : return 0;
+
+ 0009e 33 c0 xor eax, eax
+ 000a0 5e pop esi
+
+; 162 : }
+
+ 000a1 8b e5 mov esp, ebp
+ 000a3 5d pop ebp
+ 000a4 c3 ret 0
+$LN11@gz_zero:
+ 000a5 5f pop edi
+ 000a6 5b pop ebx
+
+; 158 : return -1;
+
+ 000a7 83 c8 ff or eax, -1
+ 000aa 5e pop esi
+
+; 162 : }
+
+ 000ab 8b e5 mov esp, ebp
+ 000ad 5d pop ebp
+ 000ae c3 ret 0
+_gz_zero ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzwrite.c
+; COMDAT _gzwrite@12
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_buf$1$ = 12 ; size = 4
+_buf$ = 12 ; size = 4
+_put$1$ = 16 ; size = 4
+_len$ = 16 ; size = 4
+_gzwrite@12 PROC ; COMDAT
+
+; 169 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 53 push ebx
+
+; 170 : unsigned put = len;
+
+ 00004 8b 5d 10 mov ebx, DWORD PTR _len$[ebp]
+ 00007 56 push esi
+
+; 171 : gz_statep state;
+; 172 : z_streamp strm;
+; 173 :
+; 174 : /* get internal structure */
+; 175 : if (file == NULL)
+
+ 00008 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 0000b 89 5d 10 mov DWORD PTR _put$1$[ebp], ebx
+ 0000e 85 f6 test esi, esi
+ 00010 74 27 je SHORT $LN29@gzwrite
+
+; 176 : return 0;
+; 177 : state = (gz_statep)file;
+; 178 : strm = &(state->strm);
+; 179 :
+; 180 : /* check that we're writing and that there's no error */
+; 181 : if (state->mode != GZ_WRITE || state->err != Z_OK)
+
+ 00012 81 7e 10 b1 79
+ 00 00 cmp DWORD PTR [esi+16], 31153 ; 000079b1H
+ 00019 75 1e jne SHORT $LN29@gzwrite
+ 0001b 83 7e 5c 00 cmp DWORD PTR [esi+92], 0
+ 0001f 75 18 jne SHORT $LN29@gzwrite
+
+; 182 : return 0;
+; 183 :
+; 184 : /* since an int is returned, make sure len fits in one, otherwise return
+; 185 : with an error (this avoids the flaw in the interface) */
+; 186 : if ((int)len < 0) {
+
+ 00021 85 db test ebx, ebx
+ 00023 79 1c jns SHORT $LN27@gzwrite
+
+; 187 : gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
+
+ 00025 68 00 00 00 00 push OFFSET ??_C@_0CF@MLPJFDMM@requested?5length?5does?5not?5fit?5in@
+ 0002a ba fd ff ff ff mov edx, -3 ; fffffffdH
+ 0002f 8b ce mov ecx, esi
+ 00031 e8 00 00 00 00 call _gz_error
+ 00036 83 c4 04 add esp, 4
+$LN29@gzwrite:
+
+; 188 : return 0;
+
+ 00039 5e pop esi
+ 0003a 33 c0 xor eax, eax
+ 0003c 5b pop ebx
+
+; 242 : }
+
+ 0003d 5d pop ebp
+ 0003e c2 0c 00 ret 12 ; 0000000cH
+$LN27@gzwrite:
+
+; 189 : }
+; 190 :
+; 191 : /* if len is zero, avoid unnecessary operations */
+; 192 : if (len == 0)
+
+ 00041 74 f6 je SHORT $LN29@gzwrite
+
+; 193 : return 0;
+; 194 :
+; 195 : /* allocate memory if this is the first time through */
+; 196 : if (state->size == 0 && gz_init(state) == -1)
+
+ 00043 83 7e 1c 00 cmp DWORD PTR [esi+28], 0
+ 00047 75 0c jne SHORT $LN10@gzwrite
+ 00049 8b ce mov ecx, esi
+ 0004b e8 00 00 00 00 call _gz_init
+ 00050 83 f8 ff cmp eax, -1
+ 00053 74 e4 je SHORT $LN29@gzwrite
+$LN10@gzwrite:
+
+; 197 : return 0;
+; 198 :
+; 199 : /* check for seek request */
+; 200 : if (state->seek) {
+
+ 00055 83 7e 58 00 cmp DWORD PTR [esi+88], 0
+ 00059 74 1c je SHORT $LN12@gzwrite
+
+; 201 : state->seek = 0;
+; 202 : if (gz_zero(state, state->skip) == -1)
+
+ 0005b ff 76 54 push DWORD PTR [esi+84]
+ 0005e 8b ce mov ecx, esi
+ 00060 c7 46 58 00 00
+ 00 00 mov DWORD PTR [esi+88], 0
+ 00067 ff 76 50 push DWORD PTR [esi+80]
+ 0006a e8 00 00 00 00 call _gz_zero
+ 0006f 83 c4 08 add esp, 8
+ 00072 83 f8 ff cmp eax, -1
+ 00075 74 c2 je SHORT $LN29@gzwrite
+$LN12@gzwrite:
+ 00077 57 push edi
+
+; 203 : return 0;
+; 204 : }
+; 205 :
+; 206 : /* for small len, copy to input buffer, otherwise compress directly */
+; 207 : if (len < state->size) {
+
+ 00078 3b 5e 1c cmp ebx, DWORD PTR [esi+28]
+ 0007b 73 5d jae SHORT $LN13@gzwrite
+ 0007d 8b 45 0c mov eax, DWORD PTR _buf$[ebp]
+ 00080 89 45 0c mov DWORD PTR _buf$1$[ebp], eax
+$LL4@gzwrite:
+
+; 208 : /* copy to input buffer, compress when full */
+; 209 : do {
+; 210 : unsigned have, copy;
+; 211 :
+; 212 : if (strm->avail_in == 0)
+
+ 00083 8b 56 68 mov edx, DWORD PTR [esi+104]
+ 00086 85 d2 test edx, edx
+ 00088 75 06 jne SHORT $LN15@gzwrite
+
+; 213 : strm->next_in = state->in;
+
+ 0008a 8b 46 24 mov eax, DWORD PTR [esi+36]
+ 0008d 89 46 64 mov DWORD PTR [esi+100], eax
+$LN15@gzwrite:
+
+; 214 : have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
+
+ 00090 8b 46 64 mov eax, DWORD PTR [esi+100]
+ 00093 2b 46 24 sub eax, DWORD PTR [esi+36]
+
+; 215 : copy = state->size - have;
+
+ 00096 8b 7e 1c mov edi, DWORD PTR [esi+28]
+ 00099 03 c2 add eax, edx
+ 0009b 2b f8 sub edi, eax
+
+; 216 : if (copy > len)
+
+ 0009d 3b fb cmp edi, ebx
+ 0009f 0f 47 fb cmova edi, ebx
+
+; 217 : copy = len;
+; 218 : memcpy(state->in + have, buf, copy);
+
+ 000a2 03 46 24 add eax, DWORD PTR [esi+36]
+ 000a5 57 push edi
+ 000a6 ff 75 0c push DWORD PTR _buf$1$[ebp]
+ 000a9 50 push eax
+ 000aa e8 00 00 00 00 call _memcpy
+
+; 219 : strm->avail_in += copy;
+
+ 000af 01 7e 68 add DWORD PTR [esi+104], edi
+ 000b2 83 c4 0c add esp, 12 ; 0000000cH
+
+; 220 : state->x.pos += copy;
+
+ 000b5 01 7e 08 add DWORD PTR [esi+8], edi
+ 000b8 83 56 0c 00 adc DWORD PTR [esi+12], 0
+
+; 221 : buf = (const char *)buf + copy;
+
+ 000bc 01 7d 0c add DWORD PTR _buf$1$[ebp], edi
+
+; 222 : len -= copy;
+
+ 000bf 2b df sub ebx, edi
+
+; 223 : if (len && gz_comp(state, Z_NO_FLUSH) == -1)
+
+ 000c1 74 49 je SHORT $LN19@gzwrite
+ 000c3 33 d2 xor edx, edx
+ 000c5 8b ce mov ecx, esi
+ 000c7 e8 00 00 00 00 call _gz_comp
+ 000cc 83 f8 ff cmp eax, -1
+ 000cf 75 b2 jne SHORT $LL4@gzwrite
+$LN28@gzwrite:
+ 000d1 5f pop edi
+ 000d2 5e pop esi
+
+; 224 : return 0;
+
+ 000d3 33 c0 xor eax, eax
+ 000d5 5b pop ebx
+
+; 242 : }
+
+ 000d6 5d pop ebp
+ 000d7 c2 0c 00 ret 12 ; 0000000cH
+$LN13@gzwrite:
+
+; 225 : } while (len);
+; 226 : }
+; 227 : else {
+; 228 : /* consume whatever's left in the input buffer */
+; 229 : if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+
+ 000da 83 7e 68 00 cmp DWORD PTR [esi+104], 0
+ 000de 74 0e je SHORT $LN18@gzwrite
+ 000e0 33 d2 xor edx, edx
+ 000e2 8b ce mov ecx, esi
+ 000e4 e8 00 00 00 00 call _gz_comp
+ 000e9 83 f8 ff cmp eax, -1
+ 000ec 74 e3 je SHORT $LN28@gzwrite
+$LN18@gzwrite:
+
+; 230 : return 0;
+; 231 :
+; 232 : /* directly compress user buffer to file */
+; 233 : strm->avail_in = len;
+; 234 : strm->next_in = (z_const Bytef *)buf;
+
+ 000ee 8b 45 0c mov eax, DWORD PTR _buf$[ebp]
+
+; 235 : state->x.pos += len;
+; 236 : if (gz_comp(state, Z_NO_FLUSH) == -1)
+
+ 000f1 8b ce mov ecx, esi
+ 000f3 89 5e 68 mov DWORD PTR [esi+104], ebx
+ 000f6 89 46 64 mov DWORD PTR [esi+100], eax
+ 000f9 01 5e 08 add DWORD PTR [esi+8], ebx
+ 000fc 83 56 0c 00 adc DWORD PTR [esi+12], 0
+ 00100 33 d2 xor edx, edx
+ 00102 e8 00 00 00 00 call _gz_comp
+ 00107 83 f8 ff cmp eax, -1
+ 0010a 74 c5 je SHORT $LN28@gzwrite
+$LN19@gzwrite:
+
+; 237 : return 0;
+; 238 : }
+; 239 :
+; 240 : /* input was all buffered or compressed (put will fit in int) */
+; 241 : return (int)put;
+
+ 0010c 8b 45 10 mov eax, DWORD PTR _put$1$[ebp]
+ 0010f 5f pop edi
+ 00110 5e pop esi
+ 00111 5b pop ebx
+
+; 242 : }
+
+ 00112 5d pop ebp
+ 00113 c2 0c 00 ret 12 ; 0000000cH
+_gzwrite@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzwrite.c
+; COMDAT _gzputc@8
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_buf$ = 11 ; size = 1
+_c$ = 12 ; size = 4
+_gzputc@8 PROC ; COMDAT
+
+; 248 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 249 : unsigned have;
+; 250 : unsigned char buf[1];
+; 251 : gz_statep state;
+; 252 : z_streamp strm;
+; 253 :
+; 254 : /* get internal structure */
+; 255 : if (file == NULL)
+
+ 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 00007 85 f6 test esi, esi
+ 00009 75 08 jne SHORT $LN2@gzputc
+$LN14@gzputc:
+
+; 256 : return -1;
+
+ 0000b 83 c8 ff or eax, -1
+ 0000e 5e pop esi
+
+; 290 : }
+
+ 0000f 5d pop ebp
+ 00010 c2 08 00 ret 8
+$LN2@gzputc:
+
+; 257 : state = (gz_statep)file;
+; 258 : strm = &(state->strm);
+; 259 :
+; 260 : /* check that we're writing and that there's no error */
+; 261 : if (state->mode != GZ_WRITE || state->err != Z_OK)
+
+ 00013 81 7e 10 b1 79
+ 00 00 cmp DWORD PTR [esi+16], 31153 ; 000079b1H
+ 0001a 75 ef jne SHORT $LN14@gzputc
+ 0001c 83 7e 5c 00 cmp DWORD PTR [esi+92], 0
+ 00020 75 e9 jne SHORT $LN14@gzputc
+
+; 262 : return -1;
+; 263 :
+; 264 : /* check for seek request */
+; 265 : if (state->seek) {
+
+ 00022 83 7e 58 00 cmp DWORD PTR [esi+88], 0
+ 00026 74 1c je SHORT $LN6@gzputc
+
+; 266 : state->seek = 0;
+; 267 : if (gz_zero(state, state->skip) == -1)
+
+ 00028 ff 76 54 push DWORD PTR [esi+84]
+ 0002b 8b ce mov ecx, esi
+ 0002d c7 46 58 00 00
+ 00 00 mov DWORD PTR [esi+88], 0
+ 00034 ff 76 50 push DWORD PTR [esi+80]
+ 00037 e8 00 00 00 00 call _gz_zero
+ 0003c 83 c4 08 add esp, 8
+ 0003f 83 f8 ff cmp eax, -1
+ 00042 74 c7 je SHORT $LN14@gzputc
+$LN6@gzputc:
+
+; 268 : return -1;
+; 269 : }
+; 270 :
+; 271 : /* try writing to input buffer for speed (state->size == 0 if buffer not
+; 272 : initialized) */
+; 273 : if (state->size) {
+
+ 00044 83 7e 1c 00 cmp DWORD PTR [esi+28], 0
+ 00048 57 push edi
+ 00049 74 36 je SHORT $LN9@gzputc
+
+; 274 : if (strm->avail_in == 0)
+
+ 0004b 8b 56 68 mov edx, DWORD PTR [esi+104]
+ 0004e 85 d2 test edx, edx
+ 00050 75 06 jne SHORT $LN8@gzputc
+
+; 275 : strm->next_in = state->in;
+
+ 00052 8b 46 24 mov eax, DWORD PTR [esi+36]
+ 00055 89 46 64 mov DWORD PTR [esi+100], eax
+$LN8@gzputc:
+
+; 276 : have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
+
+ 00058 8b 4e 64 mov ecx, DWORD PTR [esi+100]
+ 0005b 8b 7e 24 mov edi, DWORD PTR [esi+36]
+ 0005e 2b cf sub ecx, edi
+ 00060 03 ca add ecx, edx
+
+; 277 : if (have < state->size) {
+
+ 00062 3b 4e 1c cmp ecx, DWORD PTR [esi+28]
+ 00065 73 1a jae SHORT $LN9@gzputc
+
+; 278 : state->in[have] = c;
+
+ 00067 8b 45 0c mov eax, DWORD PTR _c$[ebp]
+ 0006a 88 04 0f mov BYTE PTR [edi+ecx], al
+
+; 279 : strm->avail_in++;
+
+ 0006d ff 46 68 inc DWORD PTR [esi+104]
+
+; 280 : state->x.pos++;
+
+ 00070 83 46 08 01 add DWORD PTR [esi+8], 1
+ 00074 5f pop edi
+ 00075 83 56 0c 00 adc DWORD PTR [esi+12], 0
+
+; 281 : return c & 0xff;
+
+ 00079 0f b6 c0 movzx eax, al
+ 0007c 5e pop esi
+
+; 290 : }
+
+ 0007d 5d pop ebp
+ 0007e c2 08 00 ret 8
+$LN9@gzputc:
+ 00081 53 push ebx
+
+; 282 : }
+; 283 : }
+; 284 :
+; 285 : /* no room in buffer or not initialized, use gz_write() */
+; 286 : buf[0] = c;
+
+ 00082 8b 5d 0c mov ebx, DWORD PTR _c$[ebp]
+
+; 287 : if (gzwrite(file, buf, 1) != 1)
+
+ 00085 8d 45 0b lea eax, DWORD PTR _buf$[ebp]
+ 00088 6a 01 push 1
+ 0008a 50 push eax
+ 0008b 56 push esi
+ 0008c 88 5d 0b mov BYTE PTR _buf$[ebp], bl
+ 0008f e8 00 00 00 00 call _gzwrite@12
+ 00094 83 f8 01 cmp eax, 1
+ 00097 74 0a je SHORT $LN10@gzputc
+
+; 288 : return -1;
+
+ 00099 5b pop ebx
+ 0009a 5f pop edi
+ 0009b 83 c8 ff or eax, -1
+ 0009e 5e pop esi
+
+; 290 : }
+
+ 0009f 5d pop ebp
+ 000a0 c2 08 00 ret 8
+$LN10@gzputc:
+
+; 289 : return c & 0xff;
+
+ 000a3 0f b6 c3 movzx eax, bl
+ 000a6 5b pop ebx
+ 000a7 5f pop edi
+ 000a8 5e pop esi
+
+; 290 : }
+
+ 000a9 5d pop ebp
+ 000aa c2 08 00 ret 8
+_gzputc@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzwrite.c
+; COMDAT _gzputs@8
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_str$ = 12 ; size = 4
+_gzputs@8 PROC ; COMDAT
+
+; 296 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 297 : int ret;
+; 298 : unsigned len;
+; 299 :
+; 300 : /* write string */
+; 301 : len = (unsigned)strlen(str);
+
+ 00003 8b 4d 0c mov ecx, DWORD PTR _str$[ebp]
+ 00006 56 push esi
+ 00007 8b f1 mov esi, ecx
+ 00009 8d 56 01 lea edx, DWORD PTR [esi+1]
+ 0000c 0f 1f 40 00 npad 4
+$LL5@gzputs:
+ 00010 8a 06 mov al, BYTE PTR [esi]
+ 00012 46 inc esi
+ 00013 84 c0 test al, al
+ 00015 75 f9 jne SHORT $LL5@gzputs
+ 00017 2b f2 sub esi, edx
+
+; 302 : ret = gzwrite(file, str, len);
+
+ 00019 56 push esi
+ 0001a 51 push ecx
+ 0001b ff 75 08 push DWORD PTR _file$[ebp]
+ 0001e e8 00 00 00 00 call _gzwrite@12
+
+; 303 : return ret == 0 && len != 0 ? -1 : ret;
+
+ 00023 85 c0 test eax, eax
+ 00025 75 07 jne SHORT $LN4@gzputs
+ 00027 85 f6 test esi, esi
+ 00029 74 03 je SHORT $LN4@gzputs
+ 0002b 83 c8 ff or eax, -1
+$LN4@gzputs:
+ 0002e 5e pop esi
+
+; 304 : }
+
+ 0002f 5d pop ebp
+ 00030 c2 08 00 ret 8
+_gzputs@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzwrite.c
+; File c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\stdio.h
+; File d:\downloads\tgl-master\tgl-master\zlib\gzwrite.c
+; File c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\stdio.h
+; File d:\downloads\tgl-master\tgl-master\zlib\gzwrite.c
+; COMDAT _gzvprintf
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_format$ = 12 ; size = 4
+_va$ = 16 ; size = 4
+_gzvprintf PROC ; COMDAT
+
+; 311 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 312 : int size, len;
+; 313 : gz_statep state;
+; 314 : z_streamp strm;
+; 315 :
+; 316 : /* get internal structure */
+; 317 : if (file == NULL)
+
+ 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 00007 85 f6 test esi, esi
+ 00009 75 06 jne SHORT $LN2@gzvprintf
+
+; 318 : return -1;
+
+ 0000b 83 c8 ff or eax, -1
+ 0000e 5e pop esi
+
+; 370 : }
+
+ 0000f 5d pop ebp
+ 00010 c3 ret 0
+$LN2@gzvprintf:
+
+; 319 : state = (gz_statep)file;
+; 320 : strm = &(state->strm);
+; 321 :
+; 322 : /* check that we're writing and that there's no error */
+; 323 : if (state->mode != GZ_WRITE || state->err != Z_OK)
+
+ 00011 81 7e 10 b1 79
+ 00 00 cmp DWORD PTR [esi+16], 31153 ; 000079b1H
+ 00018 75 18 jne SHORT $LN16@gzvprintf
+ 0001a 83 7e 5c 00 cmp DWORD PTR [esi+92], 0
+ 0001e 75 12 jne SHORT $LN16@gzvprintf
+
+; 324 : return 0;
+; 325 :
+; 326 : /* make sure we have some buffer space */
+; 327 : if (state->size == 0 && gz_init(state) == -1)
+
+ 00020 83 7e 1c 00 cmp DWORD PTR [esi+28], 0
+ 00024 75 11 jne SHORT $LN5@gzvprintf
+ 00026 8b ce mov ecx, esi
+ 00028 e8 00 00 00 00 call _gz_init
+ 0002d 83 f8 ff cmp eax, -1
+ 00030 75 05 jne SHORT $LN5@gzvprintf
+$LN16@gzvprintf:
+
+; 328 : return 0;
+
+ 00032 33 c0 xor eax, eax
+ 00034 5e pop esi
+
+; 370 : }
+
+ 00035 5d pop ebp
+ 00036 c3 ret 0
+$LN5@gzvprintf:
+
+; 329 :
+; 330 : /* check for seek request */
+; 331 : if (state->seek) {
+
+ 00037 83 7e 58 00 cmp DWORD PTR [esi+88], 0
+ 0003b 74 1c je SHORT $LN7@gzvprintf
+
+; 332 : state->seek = 0;
+; 333 : if (gz_zero(state, state->skip) == -1)
+
+ 0003d ff 76 54 push DWORD PTR [esi+84]
+ 00040 8b ce mov ecx, esi
+ 00042 c7 46 58 00 00
+ 00 00 mov DWORD PTR [esi+88], 0
+ 00049 ff 76 50 push DWORD PTR [esi+80]
+ 0004c e8 00 00 00 00 call _gz_zero
+ 00051 83 c4 08 add esp, 8
+ 00054 83 f8 ff cmp eax, -1
+ 00057 74 d9 je SHORT $LN16@gzvprintf
+$LN7@gzvprintf:
+
+; 334 : return 0;
+; 335 : }
+; 336 :
+; 337 : /* consume whatever's left in the input buffer */
+; 338 : if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+
+ 00059 83 7e 68 00 cmp DWORD PTR [esi+104], 0
+ 0005d 74 0e je SHORT $LN8@gzvprintf
+ 0005f 33 d2 xor edx, edx
+ 00061 8b ce mov ecx, esi
+ 00063 e8 00 00 00 00 call _gz_comp
+ 00068 83 f8 ff cmp eax, -1
+ 0006b 74 c5 je SHORT $LN16@gzvprintf
+$LN8@gzvprintf:
+
+; 343 : state->in[size - 1] = 0;
+
+ 0006d 8b 46 24 mov eax, DWORD PTR [esi+36]
+ 00070 53 push ebx
+ 00071 8b 5e 1c mov ebx, DWORD PTR [esi+28]
+ 00074 57 push edi
+; File c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\stdio.h
+
+; 1436 : int const _Result = __stdio_common_vsprintf(
+
+ 00075 ff 75 10 push DWORD PTR _va$[ebp]
+ 00078 6a 00 push 0
+ 0007a ff 75 0c push DWORD PTR _format$[ebp]
+; File d:\downloads\tgl-master\tgl-master\zlib\gzwrite.c
+
+; 343 : state->in[size - 1] = 0;
+
+ 0007d c6 44 03 ff 00 mov BYTE PTR [ebx+eax-1], 0
+; File c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\stdio.h
+
+; 1436 : int const _Result = __stdio_common_vsprintf(
+
+ 00082 53 push ebx
+ 00083 ff 76 24 push DWORD PTR [esi+36]
+ 00086 e8 00 00 00 00 call ___local_stdio_printf_options
+ 0008b 8b 08 mov ecx, DWORD PTR [eax]
+ 0008d ff 70 04 push DWORD PTR [eax+4]
+ 00090 83 c9 02 or ecx, 2
+ 00093 51 push ecx
+ 00094 ff 15 00 00 00
+ 00 call DWORD PTR __imp____stdio_common_vsprintf
+ 0009a 8b f8 mov edi, eax
+ 0009c 83 c4 1c add esp, 28 ; 0000001cH
+
+; 1437 : _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS | _CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR,
+; 1438 : _Buffer, _BufferCount, _Format, NULL, _ArgList);
+; 1439 :
+; 1440 : return _Result < 0 ? -1 : _Result;
+
+ 0009f 83 c8 ff or eax, -1
+ 000a2 85 ff test edi, edi
+ 000a4 0f 48 f8 cmovs edi, eax
+; File d:\downloads\tgl-master\tgl-master\zlib\gzwrite.c
+
+; 362 : if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
+
+ 000a7 85 ff test edi, edi
+ 000a9 7e 26 jle SHORT $LN10@gzvprintf
+ 000ab 3b fb cmp edi, ebx
+ 000ad 7d 22 jge SHORT $LN10@gzvprintf
+ 000af 8b 46 24 mov eax, DWORD PTR [esi+36]
+ 000b2 80 7c 03 ff 00 cmp BYTE PTR [ebx+eax-1], 0
+ 000b7 75 18 jne SHORT $LN10@gzvprintf
+
+; 364 :
+; 365 : /* update buffer and position, defer compression until needed */
+; 366 : strm->avail_in = (unsigned)len;
+; 367 : strm->next_in = state->in;
+
+ 000b9 8b c8 mov ecx, eax
+ 000bb 89 7e 68 mov DWORD PTR [esi+104], edi
+
+; 368 : state->x.pos += len;
+
+ 000be 8b c7 mov eax, edi
+ 000c0 89 4e 64 mov DWORD PTR [esi+100], ecx
+ 000c3 99 cdq
+ 000c4 01 46 08 add DWORD PTR [esi+8], eax
+
+; 369 : return len;
+
+ 000c7 8b c7 mov eax, edi
+ 000c9 5f pop edi
+ 000ca 11 56 0c adc DWORD PTR [esi+12], edx
+ 000cd 5b pop ebx
+ 000ce 5e pop esi
+
+; 370 : }
+
+ 000cf 5d pop ebp
+ 000d0 c3 ret 0
+$LN10@gzvprintf:
+ 000d1 5f pop edi
+ 000d2 5b pop ebx
+
+; 363 : return 0;
+
+ 000d3 33 c0 xor eax, eax
+ 000d5 5e pop esi
+
+; 370 : }
+
+ 000d6 5d pop ebp
+ 000d7 c3 ret 0
+_gzvprintf ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzwrite.c
+; COMDAT _gzprintf
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_format$ = 12 ; size = 4
+_gzprintf PROC ; COMDAT
+
+; 373 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 374 : va_list va;
+; 375 : int ret;
+; 376 :
+; 377 : va_start(va, format);
+; 378 : ret = gzvprintf(file, format, va);
+
+ 00003 8d 45 10 lea eax, DWORD PTR _format$[ebp+4]
+ 00006 50 push eax
+ 00007 ff 75 0c push DWORD PTR _format$[ebp]
+ 0000a ff 75 08 push DWORD PTR _file$[ebp]
+ 0000d e8 00 00 00 00 call _gzvprintf
+ 00012 83 c4 0c add esp, 12 ; 0000000cH
+
+; 379 : va_end(va);
+; 380 : return ret;
+; 381 : }
+
+ 00015 5d pop ebp
+ 00016 c3 ret 0
+_gzprintf ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzwrite.c
+; COMDAT _gzflush@8
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_flush$ = 12 ; size = 4
+_gzflush@8 PROC ; COMDAT
+
+; 468 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 469 : gz_statep state;
+; 470 :
+; 471 : /* get internal structure */
+; 472 : if (file == NULL)
+
+ 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 00007 85 f6 test esi, esi
+ 00009 75 08 jne SHORT $LN2@gzflush
+$LN10@gzflush:
+
+; 473 : return -1;
+
+ 0000b 83 c8 ff or eax, -1
+ 0000e 5e pop esi
+
+; 494 : }
+
+ 0000f 5d pop ebp
+ 00010 c2 08 00 ret 8
+$LN2@gzflush:
+
+; 474 : state = (gz_statep)file;
+; 475 :
+; 476 : /* check that we're writing and that there's no error */
+; 477 : if (state->mode != GZ_WRITE || state->err != Z_OK)
+
+ 00013 81 7e 10 b1 79
+ 00 00 cmp DWORD PTR [esi+16], 31153 ; 000079b1H
+ 0001a 75 40 jne SHORT $LN4@gzflush
+ 0001c 83 7e 5c 00 cmp DWORD PTR [esi+92], 0
+ 00020 75 3a jne SHORT $LN4@gzflush
+
+; 479 :
+; 480 : /* check flush parameter */
+; 481 : if (flush < 0 || flush > Z_FINISH)
+
+ 00022 83 7d 0c 04 cmp DWORD PTR _flush$[ebp], 4
+ 00026 77 34 ja SHORT $LN4@gzflush
+
+; 482 : return Z_STREAM_ERROR;
+; 483 :
+; 484 : /* check for seek request */
+; 485 : if (state->seek) {
+
+ 00028 83 7e 58 00 cmp DWORD PTR [esi+88], 0
+ 0002c 74 1c je SHORT $LN8@gzflush
+
+; 486 : state->seek = 0;
+; 487 : if (gz_zero(state, state->skip) == -1)
+
+ 0002e ff 76 54 push DWORD PTR [esi+84]
+ 00031 8b ce mov ecx, esi
+ 00033 c7 46 58 00 00
+ 00 00 mov DWORD PTR [esi+88], 0
+ 0003a ff 76 50 push DWORD PTR [esi+80]
+ 0003d e8 00 00 00 00 call _gz_zero
+ 00042 83 c4 08 add esp, 8
+ 00045 83 f8 ff cmp eax, -1
+ 00048 74 c1 je SHORT $LN10@gzflush
+$LN8@gzflush:
+
+; 488 : return -1;
+; 489 : }
+; 490 :
+; 491 : /* compress remaining data with requested flush */
+; 492 : gz_comp(state, flush);
+
+ 0004a 8b 55 0c mov edx, DWORD PTR _flush$[ebp]
+ 0004d 8b ce mov ecx, esi
+ 0004f e8 00 00 00 00 call _gz_comp
+
+; 493 : return state->err;
+
+ 00054 8b 46 5c mov eax, DWORD PTR [esi+92]
+ 00057 5e pop esi
+
+; 494 : }
+
+ 00058 5d pop ebp
+ 00059 c2 08 00 ret 8
+$LN4@gzflush:
+
+; 478 : return Z_STREAM_ERROR;
+
+ 0005c b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 00061 5e pop esi
+
+; 494 : }
+
+ 00062 5d pop ebp
+ 00063 c2 08 00 ret 8
+_gzflush@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\gzwrite.c
+; COMDAT _gzsetparams@12
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_level$ = 12 ; size = 4
+_strategy$ = 16 ; size = 4
+_gzsetparams@12 PROC ; COMDAT
+
+; 501 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 502 : gz_statep state;
+; 503 : z_streamp strm;
+; 504 :
+; 505 : /* get internal structure */
+; 506 : if (file == NULL)
+
+ 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 00007 85 f6 test esi, esi
+ 00009 75 0a jne SHORT $LN2@gzsetparam
+$LN4@gzsetparam:
+
+; 507 : return Z_STREAM_ERROR;
+
+ 0000b b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 00010 5e pop esi
+
+; 536 : }
+
+ 00011 5d pop ebp
+ 00012 c2 0c 00 ret 12 ; 0000000cH
+$LN2@gzsetparam:
+
+; 508 : state = (gz_statep)file;
+; 509 : strm = &(state->strm);
+; 510 :
+; 511 : /* check that we're writing and that there's no error */
+; 512 : if (state->mode != GZ_WRITE || state->err != Z_OK)
+
+ 00015 81 7e 10 b1 79
+ 00 00 cmp DWORD PTR [esi+16], 31153 ; 000079b1H
+ 0001c 8d 46 64 lea eax, DWORD PTR [esi+100]
+ 0001f 75 ea jne SHORT $LN4@gzsetparam
+ 00021 83 7e 5c 00 cmp DWORD PTR [esi+92], 0
+ 00025 75 e4 jne SHORT $LN4@gzsetparam
+
+; 513 : return Z_STREAM_ERROR;
+; 514 :
+; 515 : /* if no change is requested, then do nothing */
+; 516 : if (level == state->level && strategy == state->strategy)
+
+ 00027 53 push ebx
+ 00028 8b 5d 0c mov ebx, DWORD PTR _level$[ebp]
+ 0002b 57 push edi
+ 0002c 8b 7d 10 mov edi, DWORD PTR _strategy$[ebp]
+ 0002f 3b 5e 48 cmp ebx, DWORD PTR [esi+72]
+ 00032 75 05 jne SHORT $LN5@gzsetparam
+ 00034 3b 7e 4c cmp edi, DWORD PTR [esi+76]
+ 00037 74 66 je SHORT $LN15@gzsetparam
+$LN5@gzsetparam:
+
+; 517 : return Z_OK;
+; 518 :
+; 519 : /* check for seek request */
+; 520 : if (state->seek) {
+
+ 00039 83 7e 58 00 cmp DWORD PTR [esi+88], 0
+ 0003d 74 28 je SHORT $LN7@gzsetparam
+
+; 521 : state->seek = 0;
+; 522 : if (gz_zero(state, state->skip) == -1)
+
+ 0003f ff 76 54 push DWORD PTR [esi+84]
+ 00042 8b ce mov ecx, esi
+ 00044 c7 46 58 00 00
+ 00 00 mov DWORD PTR [esi+88], 0
+ 0004b ff 76 50 push DWORD PTR [esi+80]
+ 0004e e8 00 00 00 00 call _gz_zero
+ 00053 83 c4 08 add esp, 8
+ 00056 83 f8 ff cmp eax, -1
+ 00059 75 09 jne SHORT $LN12@gzsetparam
+
+; 523 : return -1;
+
+ 0005b 5f pop edi
+ 0005c 5b pop ebx
+ 0005d 0b c0 or eax, eax
+ 0005f 5e pop esi
+
+; 536 : }
+
+ 00060 5d pop ebp
+ 00061 c2 0c 00 ret 12 ; 0000000cH
+$LN12@gzsetparam:
+ 00064 8d 46 64 lea eax, DWORD PTR [esi+100]
+$LN7@gzsetparam:
+
+; 524 : }
+; 525 :
+; 526 : /* change compression parameters for subsequent input */
+; 527 : if (state->size) {
+
+ 00067 83 7e 1c 00 cmp DWORD PTR [esi+28], 0
+ 0006b 74 2c je SHORT $LN8@gzsetparam
+
+; 528 : /* flush previous input with previous parameters before changing */
+; 529 : if (strm->avail_in && gz_comp(state, Z_PARTIAL_FLUSH) == -1)
+
+ 0006d 83 78 04 00 cmp DWORD PTR [eax+4], 0
+ 00071 74 1e je SHORT $LN9@gzsetparam
+ 00073 ba 01 00 00 00 mov edx, 1
+ 00078 8b ce mov ecx, esi
+ 0007a e8 00 00 00 00 call _gz_comp
+ 0007f 83 f8 ff cmp eax, -1
+ 00082 75 0a jne SHORT $LN11@gzsetparam
+
+; 530 : return state->err;
+
+ 00084 8b 46 5c mov eax, DWORD PTR [esi+92]
+ 00087 5f pop edi
+ 00088 5b pop ebx
+ 00089 5e pop esi
+
+; 536 : }
+
+ 0008a 5d pop ebp
+ 0008b c2 0c 00 ret 12 ; 0000000cH
+$LN11@gzsetparam:
+ 0008e 8d 46 64 lea eax, DWORD PTR [esi+100]
+$LN9@gzsetparam:
+
+; 531 : deflateParams(strm, level, strategy);
+
+ 00091 57 push edi
+ 00092 53 push ebx
+ 00093 50 push eax
+ 00094 e8 00 00 00 00 call _deflateParams@12
+$LN8@gzsetparam:
+
+; 532 : }
+; 533 : state->level = level;
+
+ 00099 89 5e 48 mov DWORD PTR [esi+72], ebx
+
+; 534 : state->strategy = strategy;
+
+ 0009c 89 7e 4c mov DWORD PTR [esi+76], edi
+$LN15@gzsetparam:
+
+; 535 : return Z_OK;
+
+ 0009f 5f pop edi
+ 000a0 5b pop ebx
+ 000a1 33 c0 xor eax, eax
+ 000a3 5e pop esi
+
+; 536 : }
+
+ 000a4 5d pop ebp
+ 000a5 c2 0c 00 ret 12 ; 0000000cH
+_gzsetparams@12 ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzwrite.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzwrite.obj
new file mode 100644
index 0000000000..ebc4fb6798
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/gzwrite.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/infback.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/infback.cod
new file mode 100644
index 0000000000..54b07f8d38
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/infback.cod
@@ -0,0 +1,4354 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\infback.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+PUBLIC ??_C@_0BD@PJCBIDD@invalid?5block?5type?$AA@ ; `string'
+PUBLIC ??_C@_0BN@LGAADGOK@invalid?5stored?5block?5lengths?$AA@ ; `string'
+PUBLIC ??_C@_0CE@GMIGFPBB@too?5many?5length?5or?5distance?5symb@ ; `string'
+PUBLIC ??_C@_0BJ@HDEPPGOH@invalid?5code?5lengths?5set?$AA@ ; `string'
+PUBLIC ??_C@_0BK@BMMPFBBH@invalid?5bit?5length?5repeat?$AA@ ; `string'
+PUBLIC ??_C@_0CF@DGDMADCD@invalid?5code?5?9?9?5missing?5end?9of?9b@ ; `string'
+PUBLIC ??_C@_0BM@IIMGAINC@invalid?5literal?1lengths?5set?$AA@ ; `string'
+PUBLIC ??_C@_0BG@GMDFCBGP@invalid?5distances?5set?$AA@ ; `string'
+PUBLIC ??_C@_0BM@FFFLPBBC@invalid?5literal?1length?5code?$AA@ ; `string'
+PUBLIC ??_C@_0BG@LBKINIKP@invalid?5distance?5code?$AA@ ; `string'
+PUBLIC ??_C@_0BO@ECPMAOGG@invalid?5distance?5too?5far?5back?$AA@ ; `string'
+; COMDAT ??_C@_0BO@ECPMAOGG@invalid?5distance?5too?5far?5back?$AA@
+CONST SEGMENT
+??_C@_0BO@ECPMAOGG@invalid?5distance?5too?5far?5back?$AA@ DB 'invalid dis'
+ DB 'tance too far back', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0BG@LBKINIKP@invalid?5distance?5code?$AA@
+CONST SEGMENT
+??_C@_0BG@LBKINIKP@invalid?5distance?5code?$AA@ DB 'invalid distance code'
+ DB 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0BM@FFFLPBBC@invalid?5literal?1length?5code?$AA@
+CONST SEGMENT
+??_C@_0BM@FFFLPBBC@invalid?5literal?1length?5code?$AA@ DB 'invalid litera'
+ DB 'l/length code', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0BG@GMDFCBGP@invalid?5distances?5set?$AA@
+CONST SEGMENT
+??_C@_0BG@GMDFCBGP@invalid?5distances?5set?$AA@ DB 'invalid distances set'
+ DB 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0BM@IIMGAINC@invalid?5literal?1lengths?5set?$AA@
+CONST SEGMENT
+??_C@_0BM@IIMGAINC@invalid?5literal?1lengths?5set?$AA@ DB 'invalid litera'
+ DB 'l/lengths set', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0CF@DGDMADCD@invalid?5code?5?9?9?5missing?5end?9of?9b@
+CONST SEGMENT
+??_C@_0CF@DGDMADCD@invalid?5code?5?9?9?5missing?5end?9of?9b@ DB 'invalid '
+ DB 'code -- missing end-of-block', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0BK@BMMPFBBH@invalid?5bit?5length?5repeat?$AA@
+CONST SEGMENT
+??_C@_0BK@BMMPFBBH@invalid?5bit?5length?5repeat?$AA@ DB 'invalid bit leng'
+ DB 'th repeat', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0BJ@HDEPPGOH@invalid?5code?5lengths?5set?$AA@
+CONST SEGMENT
+??_C@_0BJ@HDEPPGOH@invalid?5code?5lengths?5set?$AA@ DB 'invalid code leng'
+ DB 'ths set', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0CE@GMIGFPBB@too?5many?5length?5or?5distance?5symb@
+CONST SEGMENT
+??_C@_0CE@GMIGFPBB@too?5many?5length?5or?5distance?5symb@ DB 'too many le'
+ DB 'ngth or distance symbols', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0BN@LGAADGOK@invalid?5stored?5block?5lengths?$AA@
+CONST SEGMENT
+??_C@_0BN@LGAADGOK@invalid?5stored?5block?5lengths?$AA@ DB 'invalid store'
+ DB 'd block lengths', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0BD@PJCBIDD@invalid?5block?5type?$AA@
+CONST SEGMENT
+??_C@_0BD@PJCBIDD@invalid?5block?5type?$AA@ DB 'invalid block type', 00H ; `string'
+?lenfix@?1??fixedtables@@9@9 DB 060H ; `fixedtables'::`2'::lenfix
+ DB 07H
+ DW 00H
+ DB 00H
+ DB 08H
+ DW 050H
+ DB 00H
+ DB 08H
+ DW 010H
+ DB 014H
+ DB 08H
+ DW 073H
+ DB 012H
+ DB 07H
+ DW 01fH
+ DB 00H
+ DB 08H
+ DW 070H
+ DB 00H
+ DB 08H
+ DW 030H
+ DB 00H
+ DB 09H
+ DW 0c0H
+ DB 010H
+ DB 07H
+ DW 0aH
+ DB 00H
+ DB 08H
+ DW 060H
+ DB 00H
+ DB 08H
+ DW 020H
+ DB 00H
+ DB 09H
+ DW 0a0H
+ DB 00H
+ DB 08H
+ DW 00H
+ DB 00H
+ DB 08H
+ DW 080H
+ DB 00H
+ DB 08H
+ DW 040H
+ DB 00H
+ DB 09H
+ DW 0e0H
+ DB 010H
+ DB 07H
+ DW 06H
+ DB 00H
+ DB 08H
+ DW 058H
+ DB 00H
+ DB 08H
+ DW 018H
+ DB 00H
+ DB 09H
+ DW 090H
+ DB 013H
+ DB 07H
+ DW 03bH
+ DB 00H
+ DB 08H
+ DW 078H
+ DB 00H
+ DB 08H
+ DW 038H
+ DB 00H
+ DB 09H
+ DW 0d0H
+ DB 011H
+ DB 07H
+ DW 011H
+ DB 00H
+ DB 08H
+ DW 068H
+ DB 00H
+ DB 08H
+ DW 028H
+ DB 00H
+ DB 09H
+ DW 0b0H
+ DB 00H
+ DB 08H
+ DW 08H
+ DB 00H
+ DB 08H
+ DW 088H
+ DB 00H
+ DB 08H
+ DW 048H
+ DB 00H
+ DB 09H
+ DW 0f0H
+ DB 010H
+ DB 07H
+ DW 04H
+ DB 00H
+ DB 08H
+ DW 054H
+ DB 00H
+ DB 08H
+ DW 014H
+ DB 015H
+ DB 08H
+ DW 0e3H
+ DB 013H
+ DB 07H
+ DW 02bH
+ DB 00H
+ DB 08H
+ DW 074H
+ DB 00H
+ DB 08H
+ DW 034H
+ DB 00H
+ DB 09H
+ DW 0c8H
+ DB 011H
+ DB 07H
+ DW 0dH
+ DB 00H
+ DB 08H
+ DW 064H
+ DB 00H
+ DB 08H
+ DW 024H
+ DB 00H
+ DB 09H
+ DW 0a8H
+ DB 00H
+ DB 08H
+ DW 04H
+ DB 00H
+ DB 08H
+ DW 084H
+ DB 00H
+ DB 08H
+ DW 044H
+ DB 00H
+ DB 09H
+ DW 0e8H
+ DB 010H
+ DB 07H
+ DW 08H
+ DB 00H
+ DB 08H
+ DW 05cH
+ DB 00H
+ DB 08H
+ DW 01cH
+ DB 00H
+ DB 09H
+ DW 098H
+ DB 014H
+ DB 07H
+ DW 053H
+ DB 00H
+ DB 08H
+ DW 07cH
+ DB 00H
+ DB 08H
+ DW 03cH
+ DB 00H
+ DB 09H
+ DW 0d8H
+ DB 012H
+ DB 07H
+ DW 017H
+ DB 00H
+ DB 08H
+ DW 06cH
+ DB 00H
+ DB 08H
+ DW 02cH
+ DB 00H
+ DB 09H
+ DW 0b8H
+ DB 00H
+ DB 08H
+ DW 0cH
+ DB 00H
+ DB 08H
+ DW 08cH
+ DB 00H
+ DB 08H
+ DW 04cH
+ DB 00H
+ DB 09H
+ DW 0f8H
+ DB 010H
+ DB 07H
+ DW 03H
+ DB 00H
+ DB 08H
+ DW 052H
+ DB 00H
+ DB 08H
+ DW 012H
+ DB 015H
+ DB 08H
+ DW 0a3H
+ DB 013H
+ DB 07H
+ DW 023H
+ DB 00H
+ DB 08H
+ DW 072H
+ DB 00H
+ DB 08H
+ DW 032H
+ DB 00H
+ DB 09H
+ DW 0c4H
+ DB 011H
+ DB 07H
+ DW 0bH
+ DB 00H
+ DB 08H
+ DW 062H
+ DB 00H
+ DB 08H
+ DW 022H
+ DB 00H
+ DB 09H
+ DW 0a4H
+ DB 00H
+ DB 08H
+ DW 02H
+ DB 00H
+ DB 08H
+ DW 082H
+ DB 00H
+ DB 08H
+ DW 042H
+ DB 00H
+ DB 09H
+ DW 0e4H
+ DB 010H
+ DB 07H
+ DW 07H
+ DB 00H
+ DB 08H
+ DW 05aH
+ DB 00H
+ DB 08H
+ DW 01aH
+ DB 00H
+ DB 09H
+ DW 094H
+ DB 014H
+ DB 07H
+ DW 043H
+ DB 00H
+ DB 08H
+ DW 07aH
+ DB 00H
+ DB 08H
+ DW 03aH
+ DB 00H
+ DB 09H
+ DW 0d4H
+ DB 012H
+ DB 07H
+ DW 013H
+ DB 00H
+ DB 08H
+ DW 06aH
+ DB 00H
+ DB 08H
+ DW 02aH
+ DB 00H
+ DB 09H
+ DW 0b4H
+ DB 00H
+ DB 08H
+ DW 0aH
+ DB 00H
+ DB 08H
+ DW 08aH
+ DB 00H
+ DB 08H
+ DW 04aH
+ DB 00H
+ DB 09H
+ DW 0f4H
+ DB 010H
+ DB 07H
+ DW 05H
+ DB 00H
+ DB 08H
+ DW 056H
+ DB 00H
+ DB 08H
+ DW 016H
+ DB 040H
+ DB 08H
+ DW 00H
+ DB 013H
+ DB 07H
+ DW 033H
+ DB 00H
+ DB 08H
+ DW 076H
+ DB 00H
+ DB 08H
+ DW 036H
+ DB 00H
+ DB 09H
+ DW 0ccH
+ DB 011H
+ DB 07H
+ DW 0fH
+ DB 00H
+ DB 08H
+ DW 066H
+ DB 00H
+ DB 08H
+ DW 026H
+ DB 00H
+ DB 09H
+ DW 0acH
+ DB 00H
+ DB 08H
+ DW 06H
+ DB 00H
+ DB 08H
+ DW 086H
+ DB 00H
+ DB 08H
+ DW 046H
+ DB 00H
+ DB 09H
+ DW 0ecH
+ DB 010H
+ DB 07H
+ DW 09H
+ DB 00H
+ DB 08H
+ DW 05eH
+ DB 00H
+ DB 08H
+ DW 01eH
+ DB 00H
+ DB 09H
+ DW 09cH
+ DB 014H
+ DB 07H
+ DW 063H
+ DB 00H
+ DB 08H
+ DW 07eH
+ DB 00H
+ DB 08H
+ DW 03eH
+ DB 00H
+ DB 09H
+ DW 0dcH
+ DB 012H
+ DB 07H
+ DW 01bH
+ DB 00H
+ DB 08H
+ DW 06eH
+ DB 00H
+ DB 08H
+ DW 02eH
+ DB 00H
+ DB 09H
+ DW 0bcH
+ DB 00H
+ DB 08H
+ DW 0eH
+ DB 00H
+ DB 08H
+ DW 08eH
+ DB 00H
+ DB 08H
+ DW 04eH
+ DB 00H
+ DB 09H
+ DW 0fcH
+ DB 060H
+ DB 07H
+ DW 00H
+ DB 00H
+ DB 08H
+ DW 051H
+ DB 00H
+ DB 08H
+ DW 011H
+ DB 015H
+ DB 08H
+ DW 083H
+ DB 012H
+ DB 07H
+ DW 01fH
+ DB 00H
+ DB 08H
+ DW 071H
+ DB 00H
+ DB 08H
+ DW 031H
+ DB 00H
+ DB 09H
+ DW 0c2H
+ DB 010H
+ DB 07H
+ DW 0aH
+ DB 00H
+ DB 08H
+ DW 061H
+ DB 00H
+ DB 08H
+ DW 021H
+ DB 00H
+ DB 09H
+ DW 0a2H
+ DB 00H
+ DB 08H
+ DW 01H
+ DB 00H
+ DB 08H
+ DW 081H
+ DB 00H
+ DB 08H
+ DW 041H
+ DB 00H
+ DB 09H
+ DW 0e2H
+ DB 010H
+ DB 07H
+ DW 06H
+ DB 00H
+ DB 08H
+ DW 059H
+ DB 00H
+ DB 08H
+ DW 019H
+ DB 00H
+ DB 09H
+ DW 092H
+ DB 013H
+ DB 07H
+ DW 03bH
+ DB 00H
+ DB 08H
+ DW 079H
+ DB 00H
+ DB 08H
+ DW 039H
+ DB 00H
+ DB 09H
+ DW 0d2H
+ DB 011H
+ DB 07H
+ DW 011H
+ DB 00H
+ DB 08H
+ DW 069H
+ DB 00H
+ DB 08H
+ DW 029H
+ DB 00H
+ DB 09H
+ DW 0b2H
+ DB 00H
+ DB 08H
+ DW 09H
+ DB 00H
+ DB 08H
+ DW 089H
+ DB 00H
+ DB 08H
+ DW 049H
+ DB 00H
+ DB 09H
+ DW 0f2H
+ DB 010H
+ DB 07H
+ DW 04H
+ DB 00H
+ DB 08H
+ DW 055H
+ DB 00H
+ DB 08H
+ DW 015H
+ DB 010H
+ DB 08H
+ DW 0102H
+ DB 013H
+ DB 07H
+ DW 02bH
+ DB 00H
+ DB 08H
+ DW 075H
+ DB 00H
+ DB 08H
+ DW 035H
+ DB 00H
+ DB 09H
+ DW 0caH
+ DB 011H
+ DB 07H
+ DW 0dH
+ DB 00H
+ DB 08H
+ DW 065H
+ DB 00H
+ DB 08H
+ DW 025H
+ DB 00H
+ DB 09H
+ DW 0aaH
+ DB 00H
+ DB 08H
+ DW 05H
+ DB 00H
+ DB 08H
+ DW 085H
+ DB 00H
+ DB 08H
+ DW 045H
+ DB 00H
+ DB 09H
+ DW 0eaH
+ DB 010H
+ DB 07H
+ DW 08H
+ DB 00H
+ DB 08H
+ DW 05dH
+ DB 00H
+ DB 08H
+ DW 01dH
+ DB 00H
+ DB 09H
+ DW 09aH
+ DB 014H
+ DB 07H
+ DW 053H
+ DB 00H
+ DB 08H
+ DW 07dH
+ DB 00H
+ DB 08H
+ DW 03dH
+ DB 00H
+ DB 09H
+ DW 0daH
+ DB 012H
+ DB 07H
+ DW 017H
+ DB 00H
+ DB 08H
+ DW 06dH
+ DB 00H
+ DB 08H
+ DW 02dH
+ DB 00H
+ DB 09H
+ DW 0baH
+ DB 00H
+ DB 08H
+ DW 0dH
+ DB 00H
+ DB 08H
+ DW 08dH
+ DB 00H
+ DB 08H
+ DW 04dH
+ DB 00H
+ DB 09H
+ DW 0faH
+ DB 010H
+ DB 07H
+ DW 03H
+ DB 00H
+ DB 08H
+ DW 053H
+ DB 00H
+ DB 08H
+ DW 013H
+ DB 015H
+ DB 08H
+ DW 0c3H
+ DB 013H
+ DB 07H
+ DW 023H
+ DB 00H
+ DB 08H
+ DW 073H
+ DB 00H
+ DB 08H
+ DW 033H
+ DB 00H
+ DB 09H
+ DW 0c6H
+ DB 011H
+ DB 07H
+ DW 0bH
+ DB 00H
+ DB 08H
+ DW 063H
+ DB 00H
+ DB 08H
+ DW 023H
+ DB 00H
+ DB 09H
+ DW 0a6H
+ DB 00H
+ DB 08H
+ DW 03H
+ DB 00H
+ DB 08H
+ DW 083H
+ DB 00H
+ DB 08H
+ DW 043H
+ DB 00H
+ DB 09H
+ DW 0e6H
+ DB 010H
+ DB 07H
+ DW 07H
+ DB 00H
+ DB 08H
+ DW 05bH
+ DB 00H
+ DB 08H
+ DW 01bH
+ DB 00H
+ DB 09H
+ DW 096H
+ DB 014H
+ DB 07H
+ DW 043H
+ DB 00H
+ DB 08H
+ DW 07bH
+ DB 00H
+ DB 08H
+ DW 03bH
+ DB 00H
+ DB 09H
+ DW 0d6H
+ DB 012H
+ DB 07H
+ DW 013H
+ DB 00H
+ DB 08H
+ DW 06bH
+ DB 00H
+ DB 08H
+ DW 02bH
+ DB 00H
+ DB 09H
+ DW 0b6H
+ DB 00H
+ DB 08H
+ DW 0bH
+ DB 00H
+ DB 08H
+ DW 08bH
+ DB 00H
+ DB 08H
+ DW 04bH
+ DB 00H
+ DB 09H
+ DW 0f6H
+ DB 010H
+ DB 07H
+ DW 05H
+ DB 00H
+ DB 08H
+ DW 057H
+ DB 00H
+ DB 08H
+ DW 017H
+ DB 040H
+ DB 08H
+ DW 00H
+ DB 013H
+ DB 07H
+ DW 033H
+ DB 00H
+ DB 08H
+ DW 077H
+ DB 00H
+ DB 08H
+ DW 037H
+ DB 00H
+ DB 09H
+ DW 0ceH
+ DB 011H
+ DB 07H
+ DW 0fH
+ DB 00H
+ DB 08H
+ DW 067H
+ DB 00H
+ DB 08H
+ DW 027H
+ DB 00H
+ DB 09H
+ DW 0aeH
+ DB 00H
+ DB 08H
+ DW 07H
+ DB 00H
+ DB 08H
+ DW 087H
+ DB 00H
+ DB 08H
+ DW 047H
+ DB 00H
+ DB 09H
+ DW 0eeH
+ DB 010H
+ DB 07H
+ DW 09H
+ DB 00H
+ DB 08H
+ DW 05fH
+ DB 00H
+ DB 08H
+ DW 01fH
+ DB 00H
+ DB 09H
+ DW 09eH
+ DB 014H
+ DB 07H
+ DW 063H
+ DB 00H
+ DB 08H
+ DW 07fH
+ DB 00H
+ DB 08H
+ DW 03fH
+ DB 00H
+ DB 09H
+ DW 0deH
+ DB 012H
+ DB 07H
+ DW 01bH
+ DB 00H
+ DB 08H
+ DW 06fH
+ DB 00H
+ DB 08H
+ DW 02fH
+ DB 00H
+ DB 09H
+ DW 0beH
+ DB 00H
+ DB 08H
+ DW 0fH
+ DB 00H
+ DB 08H
+ DW 08fH
+ DB 00H
+ DB 08H
+ DW 04fH
+ DB 00H
+ DB 09H
+ DW 0feH
+ DB 060H
+ DB 07H
+ DW 00H
+ DB 00H
+ DB 08H
+ DW 050H
+ DB 00H
+ DB 08H
+ DW 010H
+ DB 014H
+ DB 08H
+ DW 073H
+ DB 012H
+ DB 07H
+ DW 01fH
+ DB 00H
+ DB 08H
+ DW 070H
+ DB 00H
+ DB 08H
+ DW 030H
+ DB 00H
+ DB 09H
+ DW 0c1H
+ DB 010H
+ DB 07H
+ DW 0aH
+ DB 00H
+ DB 08H
+ DW 060H
+ DB 00H
+ DB 08H
+ DW 020H
+ DB 00H
+ DB 09H
+ DW 0a1H
+ DB 00H
+ DB 08H
+ DW 00H
+ DB 00H
+ DB 08H
+ DW 080H
+ DB 00H
+ DB 08H
+ DW 040H
+ DB 00H
+ DB 09H
+ DW 0e1H
+ DB 010H
+ DB 07H
+ DW 06H
+ DB 00H
+ DB 08H
+ DW 058H
+ DB 00H
+ DB 08H
+ DW 018H
+ DB 00H
+ DB 09H
+ DW 091H
+ DB 013H
+ DB 07H
+ DW 03bH
+ DB 00H
+ DB 08H
+ DW 078H
+ DB 00H
+ DB 08H
+ DW 038H
+ DB 00H
+ DB 09H
+ DW 0d1H
+ DB 011H
+ DB 07H
+ DW 011H
+ DB 00H
+ DB 08H
+ DW 068H
+ DB 00H
+ DB 08H
+ DW 028H
+ DB 00H
+ DB 09H
+ DW 0b1H
+ DB 00H
+ DB 08H
+ DW 08H
+ DB 00H
+ DB 08H
+ DW 088H
+ DB 00H
+ DB 08H
+ DW 048H
+ DB 00H
+ DB 09H
+ DW 0f1H
+ DB 010H
+ DB 07H
+ DW 04H
+ DB 00H
+ DB 08H
+ DW 054H
+ DB 00H
+ DB 08H
+ DW 014H
+ DB 015H
+ DB 08H
+ DW 0e3H
+ DB 013H
+ DB 07H
+ DW 02bH
+ DB 00H
+ DB 08H
+ DW 074H
+ DB 00H
+ DB 08H
+ DW 034H
+ DB 00H
+ DB 09H
+ DW 0c9H
+ DB 011H
+ DB 07H
+ DW 0dH
+ DB 00H
+ DB 08H
+ DW 064H
+ DB 00H
+ DB 08H
+ DW 024H
+ DB 00H
+ DB 09H
+ DW 0a9H
+ DB 00H
+ DB 08H
+ DW 04H
+ DB 00H
+ DB 08H
+ DW 084H
+ DB 00H
+ DB 08H
+ DW 044H
+ DB 00H
+ DB 09H
+ DW 0e9H
+ DB 010H
+ DB 07H
+ DW 08H
+ DB 00H
+ DB 08H
+ DW 05cH
+ DB 00H
+ DB 08H
+ DW 01cH
+ DB 00H
+ DB 09H
+ DW 099H
+ DB 014H
+ DB 07H
+ DW 053H
+ DB 00H
+ DB 08H
+ DW 07cH
+ DB 00H
+ DB 08H
+ DW 03cH
+ DB 00H
+ DB 09H
+ DW 0d9H
+ DB 012H
+ DB 07H
+ DW 017H
+ DB 00H
+ DB 08H
+ DW 06cH
+ DB 00H
+ DB 08H
+ DW 02cH
+ DB 00H
+ DB 09H
+ DW 0b9H
+ DB 00H
+ DB 08H
+ DW 0cH
+ DB 00H
+ DB 08H
+ DW 08cH
+ DB 00H
+ DB 08H
+ DW 04cH
+ DB 00H
+ DB 09H
+ DW 0f9H
+ DB 010H
+ DB 07H
+ DW 03H
+ DB 00H
+ DB 08H
+ DW 052H
+ DB 00H
+ DB 08H
+ DW 012H
+ DB 015H
+ DB 08H
+ DW 0a3H
+ DB 013H
+ DB 07H
+ DW 023H
+ DB 00H
+ DB 08H
+ DW 072H
+ DB 00H
+ DB 08H
+ DW 032H
+ DB 00H
+ DB 09H
+ DW 0c5H
+ DB 011H
+ DB 07H
+ DW 0bH
+ DB 00H
+ DB 08H
+ DW 062H
+ DB 00H
+ DB 08H
+ DW 022H
+ DB 00H
+ DB 09H
+ DW 0a5H
+ DB 00H
+ DB 08H
+ DW 02H
+ DB 00H
+ DB 08H
+ DW 082H
+ DB 00H
+ DB 08H
+ DW 042H
+ DB 00H
+ DB 09H
+ DW 0e5H
+ DB 010H
+ DB 07H
+ DW 07H
+ DB 00H
+ DB 08H
+ DW 05aH
+ DB 00H
+ DB 08H
+ DW 01aH
+ DB 00H
+ DB 09H
+ DW 095H
+ DB 014H
+ DB 07H
+ DW 043H
+ DB 00H
+ DB 08H
+ DW 07aH
+ DB 00H
+ DB 08H
+ DW 03aH
+ DB 00H
+ DB 09H
+ DW 0d5H
+ DB 012H
+ DB 07H
+ DW 013H
+ DB 00H
+ DB 08H
+ DW 06aH
+ DB 00H
+ DB 08H
+ DW 02aH
+ DB 00H
+ DB 09H
+ DW 0b5H
+ DB 00H
+ DB 08H
+ DW 0aH
+ DB 00H
+ DB 08H
+ DW 08aH
+ DB 00H
+ DB 08H
+ DW 04aH
+ DB 00H
+ DB 09H
+ DW 0f5H
+ DB 010H
+ DB 07H
+ DW 05H
+ DB 00H
+ DB 08H
+ DW 056H
+ DB 00H
+ DB 08H
+ DW 016H
+ DB 040H
+ DB 08H
+ DW 00H
+ DB 013H
+ DB 07H
+ DW 033H
+ DB 00H
+ DB 08H
+ DW 076H
+ DB 00H
+ DB 08H
+ DW 036H
+ DB 00H
+ DB 09H
+ DW 0cdH
+ DB 011H
+ DB 07H
+ DW 0fH
+ DB 00H
+ DB 08H
+ DW 066H
+ DB 00H
+ DB 08H
+ DW 026H
+ DB 00H
+ DB 09H
+ DW 0adH
+ DB 00H
+ DB 08H
+ DW 06H
+ DB 00H
+ DB 08H
+ DW 086H
+ DB 00H
+ DB 08H
+ DW 046H
+ DB 00H
+ DB 09H
+ DW 0edH
+ DB 010H
+ DB 07H
+ DW 09H
+ DB 00H
+ DB 08H
+ DW 05eH
+ DB 00H
+ DB 08H
+ DW 01eH
+ DB 00H
+ DB 09H
+ DW 09dH
+ DB 014H
+ DB 07H
+ DW 063H
+ DB 00H
+ DB 08H
+ DW 07eH
+ DB 00H
+ DB 08H
+ DW 03eH
+ DB 00H
+ DB 09H
+ DW 0ddH
+ DB 012H
+ DB 07H
+ DW 01bH
+ DB 00H
+ DB 08H
+ DW 06eH
+ DB 00H
+ DB 08H
+ DW 02eH
+ DB 00H
+ DB 09H
+ DW 0bdH
+ DB 00H
+ DB 08H
+ DW 0eH
+ DB 00H
+ DB 08H
+ DW 08eH
+ DB 00H
+ DB 08H
+ DW 04eH
+ DB 00H
+ DB 09H
+ DW 0fdH
+ DB 060H
+ DB 07H
+ DW 00H
+ DB 00H
+ DB 08H
+ DW 051H
+ DB 00H
+ DB 08H
+ DW 011H
+ DB 015H
+ DB 08H
+ DW 083H
+ DB 012H
+ DB 07H
+ DW 01fH
+ DB 00H
+ DB 08H
+ DW 071H
+ DB 00H
+ DB 08H
+ DW 031H
+ DB 00H
+ DB 09H
+ DW 0c3H
+ DB 010H
+ DB 07H
+ DW 0aH
+ DB 00H
+ DB 08H
+ DW 061H
+ DB 00H
+ DB 08H
+ DW 021H
+ DB 00H
+ DB 09H
+ DW 0a3H
+ DB 00H
+ DB 08H
+ DW 01H
+ DB 00H
+ DB 08H
+ DW 081H
+ DB 00H
+ DB 08H
+ DW 041H
+ DB 00H
+ DB 09H
+ DW 0e3H
+ DB 010H
+ DB 07H
+ DW 06H
+ DB 00H
+ DB 08H
+ DW 059H
+ DB 00H
+ DB 08H
+ DW 019H
+ DB 00H
+ DB 09H
+ DW 093H
+ DB 013H
+ DB 07H
+ DW 03bH
+ DB 00H
+ DB 08H
+ DW 079H
+ DB 00H
+ DB 08H
+ DW 039H
+ DB 00H
+ DB 09H
+ DW 0d3H
+ DB 011H
+ DB 07H
+ DW 011H
+ DB 00H
+ DB 08H
+ DW 069H
+ DB 00H
+ DB 08H
+ DW 029H
+ DB 00H
+ DB 09H
+ DW 0b3H
+ DB 00H
+ DB 08H
+ DW 09H
+ DB 00H
+ DB 08H
+ DW 089H
+ DB 00H
+ DB 08H
+ DW 049H
+ DB 00H
+ DB 09H
+ DW 0f3H
+ DB 010H
+ DB 07H
+ DW 04H
+ DB 00H
+ DB 08H
+ DW 055H
+ DB 00H
+ DB 08H
+ DW 015H
+ DB 010H
+ DB 08H
+ DW 0102H
+ DB 013H
+ DB 07H
+ DW 02bH
+ DB 00H
+ DB 08H
+ DW 075H
+ DB 00H
+ DB 08H
+ DW 035H
+ DB 00H
+ DB 09H
+ DW 0cbH
+ DB 011H
+ DB 07H
+ DW 0dH
+ DB 00H
+ DB 08H
+ DW 065H
+ DB 00H
+ DB 08H
+ DW 025H
+ DB 00H
+ DB 09H
+ DW 0abH
+ DB 00H
+ DB 08H
+ DW 05H
+ DB 00H
+ DB 08H
+ DW 085H
+ DB 00H
+ DB 08H
+ DW 045H
+ DB 00H
+ DB 09H
+ DW 0ebH
+ DB 010H
+ DB 07H
+ DW 08H
+ DB 00H
+ DB 08H
+ DW 05dH
+ DB 00H
+ DB 08H
+ DW 01dH
+ DB 00H
+ DB 09H
+ DW 09bH
+ DB 014H
+ DB 07H
+ DW 053H
+ DB 00H
+ DB 08H
+ DW 07dH
+ DB 00H
+ DB 08H
+ DW 03dH
+ DB 00H
+ DB 09H
+ DW 0dbH
+ DB 012H
+ DB 07H
+ DW 017H
+ DB 00H
+ DB 08H
+ DW 06dH
+ DB 00H
+ DB 08H
+ DW 02dH
+ DB 00H
+ DB 09H
+ DW 0bbH
+ DB 00H
+ DB 08H
+ DW 0dH
+ DB 00H
+ DB 08H
+ DW 08dH
+ DB 00H
+ DB 08H
+ DW 04dH
+ DB 00H
+ DB 09H
+ DW 0fbH
+ DB 010H
+ DB 07H
+ DW 03H
+ DB 00H
+ DB 08H
+ DW 053H
+ DB 00H
+ DB 08H
+ DW 013H
+ DB 015H
+ DB 08H
+ DW 0c3H
+ DB 013H
+ DB 07H
+ DW 023H
+ DB 00H
+ DB 08H
+ DW 073H
+ DB 00H
+ DB 08H
+ DW 033H
+ DB 00H
+ DB 09H
+ DW 0c7H
+ DB 011H
+ DB 07H
+ DW 0bH
+ DB 00H
+ DB 08H
+ DW 063H
+ DB 00H
+ DB 08H
+ DW 023H
+ DB 00H
+ DB 09H
+ DW 0a7H
+ DB 00H
+ DB 08H
+ DW 03H
+ DB 00H
+ DB 08H
+ DW 083H
+ DB 00H
+ DB 08H
+ DW 043H
+ DB 00H
+ DB 09H
+ DW 0e7H
+ DB 010H
+ DB 07H
+ DW 07H
+ DB 00H
+ DB 08H
+ DW 05bH
+ DB 00H
+ DB 08H
+ DW 01bH
+ DB 00H
+ DB 09H
+ DW 097H
+ DB 014H
+ DB 07H
+ DW 043H
+ DB 00H
+ DB 08H
+ DW 07bH
+ DB 00H
+ DB 08H
+ DW 03bH
+ DB 00H
+ DB 09H
+ DW 0d7H
+ DB 012H
+ DB 07H
+ DW 013H
+ DB 00H
+ DB 08H
+ DW 06bH
+ DB 00H
+ DB 08H
+ DW 02bH
+ DB 00H
+ DB 09H
+ DW 0b7H
+ DB 00H
+ DB 08H
+ DW 0bH
+ DB 00H
+ DB 08H
+ DW 08bH
+ DB 00H
+ DB 08H
+ DW 04bH
+ DB 00H
+ DB 09H
+ DW 0f7H
+ DB 010H
+ DB 07H
+ DW 05H
+ DB 00H
+ DB 08H
+ DW 057H
+ DB 00H
+ DB 08H
+ DW 017H
+ DB 040H
+ DB 08H
+ DW 00H
+ DB 013H
+ DB 07H
+ DW 033H
+ DB 00H
+ DB 08H
+ DW 077H
+ DB 00H
+ DB 08H
+ DW 037H
+ DB 00H
+ DB 09H
+ DW 0cfH
+ DB 011H
+ DB 07H
+ DW 0fH
+ DB 00H
+ DB 08H
+ DW 067H
+ DB 00H
+ DB 08H
+ DW 027H
+ DB 00H
+ DB 09H
+ DW 0afH
+ DB 00H
+ DB 08H
+ DW 07H
+ DB 00H
+ DB 08H
+ DW 087H
+ DB 00H
+ DB 08H
+ DW 047H
+ DB 00H
+ DB 09H
+ DW 0efH
+ DB 010H
+ DB 07H
+ DW 09H
+ DB 00H
+ DB 08H
+ DW 05fH
+ DB 00H
+ DB 08H
+ DW 01fH
+ DB 00H
+ DB 09H
+ DW 09fH
+ DB 014H
+ DB 07H
+ DW 063H
+ DB 00H
+ DB 08H
+ DW 07fH
+ DB 00H
+ DB 08H
+ DW 03fH
+ DB 00H
+ DB 09H
+ DW 0dfH
+ DB 012H
+ DB 07H
+ DW 01bH
+ DB 00H
+ DB 08H
+ DW 06fH
+ DB 00H
+ DB 08H
+ DW 02fH
+ DB 00H
+ DB 09H
+ DW 0bfH
+ DB 00H
+ DB 08H
+ DW 0fH
+ DB 00H
+ DB 08H
+ DW 08fH
+ DB 00H
+ DB 08H
+ DW 04fH
+ DB 00H
+ DB 09H
+ DW 0ffH
+?distfix@?1??fixedtables@@9@9 DB 010H ; `fixedtables'::`2'::distfix
+ DB 05H
+ DW 01H
+ DB 017H
+ DB 05H
+ DW 0101H
+ DB 013H
+ DB 05H
+ DW 011H
+ DB 01bH
+ DB 05H
+ DW 01001H
+ DB 011H
+ DB 05H
+ DW 05H
+ DB 019H
+ DB 05H
+ DW 0401H
+ DB 015H
+ DB 05H
+ DW 041H
+ DB 01dH
+ DB 05H
+ DW 04001H
+ DB 010H
+ DB 05H
+ DW 03H
+ DB 018H
+ DB 05H
+ DW 0201H
+ DB 014H
+ DB 05H
+ DW 021H
+ DB 01cH
+ DB 05H
+ DW 02001H
+ DB 012H
+ DB 05H
+ DW 09H
+ DB 01aH
+ DB 05H
+ DW 0801H
+ DB 016H
+ DB 05H
+ DW 081H
+ DB 040H
+ DB 05H
+ DW 00H
+ DB 010H
+ DB 05H
+ DW 02H
+ DB 017H
+ DB 05H
+ DW 0181H
+ DB 013H
+ DB 05H
+ DW 019H
+ DB 01bH
+ DB 05H
+ DW 01801H
+ DB 011H
+ DB 05H
+ DW 07H
+ DB 019H
+ DB 05H
+ DW 0601H
+ DB 015H
+ DB 05H
+ DW 061H
+ DB 01dH
+ DB 05H
+ DW 06001H
+ DB 010H
+ DB 05H
+ DW 04H
+ DB 018H
+ DB 05H
+ DW 0301H
+ DB 014H
+ DB 05H
+ DW 031H
+ DB 01cH
+ DB 05H
+ DW 03001H
+ DB 012H
+ DB 05H
+ DW 0dH
+ DB 01aH
+ DB 05H
+ DW 0c01H
+ DB 016H
+ DB 05H
+ DW 0c1H
+ DB 040H
+ DB 05H
+ DW 00H
+?order@?1??inflateBack@@9@9 DW 010H ; `inflateBack'::`2'::order
+ DW 011H
+ DW 012H
+ DW 00H
+ DW 08H
+ DW 07H
+ DW 09H
+ DW 06H
+ DW 0aH
+ DW 05H
+ DW 0bH
+ DW 04H
+ DW 0cH
+ DW 03H
+ DW 0dH
+ DW 02H
+ DW 0eH
+ DW 01H
+ DW 0fH
+PUBLIC _inflateBackEnd@4
+PUBLIC _inflateBack@20
+PUBLIC _inflateBackInit_@20
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\infback.c
+; COMDAT _inflateBackInit_@20
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_windowBits$ = 12 ; size = 4
+_window$ = 16 ; size = 4
+_version$ = 20 ; size = 4
+_stream_size$ = 24 ; size = 4
+_inflateBackInit_@20 PROC ; COMDAT
+
+; 34 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 35 : struct inflate_state FAR *state;
+; 36 :
+; 37 : if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
+
+ 00003 8b 45 14 mov eax, DWORD PTR _version$[ebp]
+ 00006 85 c0 test eax, eax
+ 00008 0f 84 c0 00 00
+ 00 je $LN3@inflateBac
+ 0000e 80 38 31 cmp BYTE PTR [eax], 49 ; 00000031H
+ 00011 0f 85 b7 00 00
+ 00 jne $LN3@inflateBac
+ 00017 83 7d 18 38 cmp DWORD PTR _stream_size$[ebp], 56 ; 00000038H
+ 0001b 0f 85 ad 00 00
+ 00 jne $LN3@inflateBac
+
+; 40 : if (strm == Z_NULL || window == Z_NULL ||
+; 41 : windowBits < 8 || windowBits > 15)
+
+ 00021 53 push ebx
+ 00022 56 push esi
+ 00023 8b 75 08 mov esi, DWORD PTR _strm$[ebp]
+ 00026 57 push edi
+ 00027 85 f6 test esi, esi
+ 00029 0f 84 93 00 00
+ 00 je $LN5@inflateBac
+ 0002f 8b 5d 10 mov ebx, DWORD PTR _window$[ebp]
+ 00032 85 db test ebx, ebx
+ 00034 0f 84 88 00 00
+ 00 je $LN5@inflateBac
+ 0003a 8b 7d 0c mov edi, DWORD PTR _windowBits$[ebp]
+ 0003d 8d 47 f8 lea eax, DWORD PTR [edi-8]
+ 00040 83 f8 07 cmp eax, 7
+ 00043 77 7d ja SHORT $LN5@inflateBac
+
+; 43 : strm->msg = Z_NULL; /* in case we return an error */
+; 44 : if (strm->zalloc == (alloc_func)0) {
+
+ 00045 83 7e 20 00 cmp DWORD PTR [esi+32], 0
+ 00049 c7 46 18 00 00
+ 00 00 mov DWORD PTR [esi+24], 0
+ 00050 75 0e jne SHORT $LN6@inflateBac
+
+; 45 : #ifdef Z_SOLO
+; 46 : return Z_STREAM_ERROR;
+; 47 : #else
+; 48 : strm->zalloc = zcalloc;
+
+ 00052 c7 46 20 00 00
+ 00 00 mov DWORD PTR [esi+32], OFFSET _zcalloc
+
+; 49 : strm->opaque = (voidpf)0;
+
+ 00059 c7 46 28 00 00
+ 00 00 mov DWORD PTR [esi+40], 0
+$LN6@inflateBac:
+
+; 50 : #endif
+; 51 : }
+; 52 : if (strm->zfree == (free_func)0)
+
+ 00060 83 7e 24 00 cmp DWORD PTR [esi+36], 0
+ 00064 75 07 jne SHORT $LN7@inflateBac
+
+; 53 : #ifdef Z_SOLO
+; 54 : return Z_STREAM_ERROR;
+; 55 : #else
+; 56 : strm->zfree = zcfree;
+
+ 00066 c7 46 24 00 00
+ 00 00 mov DWORD PTR [esi+36], OFFSET _zcfree
+$LN7@inflateBac:
+
+; 57 : #endif
+; 58 : state = (struct inflate_state FAR *)ZALLOC(strm, 1,
+
+ 0006d 8b 46 20 mov eax, DWORD PTR [esi+32]
+ 00070 68 cc 1b 00 00 push 7116 ; 00001bccH
+ 00075 6a 01 push 1
+ 00077 ff 76 28 push DWORD PTR [esi+40]
+ 0007a ff d0 call eax
+ 0007c 8b d0 mov edx, eax
+ 0007e 83 c4 0c add esp, 12 ; 0000000cH
+
+; 59 : sizeof(struct inflate_state));
+; 60 : if (state == Z_NULL) return Z_MEM_ERROR;
+
+ 00081 85 d2 test edx, edx
+ 00083 75 0a jne SHORT $LN8@inflateBac
+ 00085 5f pop edi
+ 00086 5e pop esi
+ 00087 8d 42 fc lea eax, DWORD PTR [edx-4]
+ 0008a 5b pop ebx
+
+; 70 : }
+
+ 0008b 5d pop ebp
+ 0008c c2 14 00 ret 20 ; 00000014H
+$LN8@inflateBac:
+
+; 61 : Tracev((stderr, "inflate: allocated\n"));
+; 62 : strm->state = (struct internal_state FAR *)state;
+
+ 0008f 89 56 1c mov DWORD PTR [esi+28], edx
+
+; 63 : state->dmax = 32768U;
+; 64 : state->wbits = windowBits;
+; 65 : state->wsize = 1U << windowBits;
+
+ 00092 8b cf mov ecx, edi
+ 00094 89 7a 24 mov DWORD PTR [edx+36], edi
+ 00097 b8 01 00 00 00 mov eax, 1
+ 0009c 5f pop edi
+ 0009d d3 e0 shl eax, cl
+ 0009f 5e pop esi
+ 000a0 89 42 28 mov DWORD PTR [edx+40], eax
+
+; 66 : state->window = window;
+; 67 : state->wnext = 0;
+; 68 : state->whave = 0;
+; 69 : return Z_OK;
+
+ 000a3 33 c0 xor eax, eax
+ 000a5 89 5a 34 mov DWORD PTR [edx+52], ebx
+ 000a8 c7 42 14 00 80
+ 00 00 mov DWORD PTR [edx+20], 32768 ; 00008000H
+ 000af c7 42 30 00 00
+ 00 00 mov DWORD PTR [edx+48], 0
+ 000b6 c7 42 2c 00 00
+ 00 00 mov DWORD PTR [edx+44], 0
+ 000bd 5b pop ebx
+
+; 70 : }
+
+ 000be 5d pop ebp
+ 000bf c2 14 00 ret 20 ; 00000014H
+$LN5@inflateBac:
+ 000c2 5f pop edi
+ 000c3 5e pop esi
+
+; 42 : return Z_STREAM_ERROR;
+
+ 000c4 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 000c9 5b pop ebx
+
+; 70 : }
+
+ 000ca 5d pop ebp
+ 000cb c2 14 00 ret 20 ; 00000014H
+$LN3@inflateBac:
+
+; 38 : stream_size != (int)(sizeof(z_stream)))
+; 39 : return Z_VERSION_ERROR;
+
+ 000ce b8 fa ff ff ff mov eax, -6 ; fffffffaH
+
+; 70 : }
+
+ 000d3 5d pop ebp
+ 000d4 c2 14 00 ret 20 ; 00000014H
+_inflateBackInit_@20 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\infback.c
+; COMDAT _fixedtables
+_TEXT SEGMENT
+_fixedtables PROC ; COMDAT
+; _state$ = ecx
+
+; 85 : #ifdef BUILDFIXED
+; 86 : static int virgin = 1;
+; 87 : static code *lenfix, *distfix;
+; 88 : static code fixed[544];
+; 89 :
+; 90 : /* build fixed huffman tables if first call (may not be thread safe) */
+; 91 : if (virgin) {
+; 92 : unsigned sym, bits;
+; 93 : static code *next;
+; 94 :
+; 95 : /* literal/length table */
+; 96 : sym = 0;
+; 97 : while (sym < 144) state->lens[sym++] = 8;
+; 98 : while (sym < 256) state->lens[sym++] = 9;
+; 99 : while (sym < 280) state->lens[sym++] = 7;
+; 100 : while (sym < 288) state->lens[sym++] = 8;
+; 101 : next = fixed;
+; 102 : lenfix = next;
+; 103 : bits = 9;
+; 104 : inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
+; 105 :
+; 106 : /* distance table */
+; 107 : sym = 0;
+; 108 : while (sym < 32) state->lens[sym++] = 5;
+; 109 : distfix = next;
+; 110 : bits = 5;
+; 111 : inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
+; 112 :
+; 113 : /* do this just once */
+; 114 : virgin = 0;
+; 115 : }
+; 116 : #else /* !BUILDFIXED */
+; 117 : # include "inffixed.h"
+; 118 : #endif /* BUILDFIXED */
+; 119 : state->lencode = lenfix;
+
+ 00000 c7 41 4c 00 00
+ 00 00 mov DWORD PTR [ecx+76], OFFSET ?lenfix@?1??fixedtables@@9@9
+
+; 120 : state->lenbits = 9;
+
+ 00007 c7 41 54 09 00
+ 00 00 mov DWORD PTR [ecx+84], 9
+
+; 121 : state->distcode = distfix;
+
+ 0000e c7 41 50 00 00
+ 00 00 mov DWORD PTR [ecx+80], OFFSET ?distfix@?1??fixedtables@@9@9
+
+; 122 : state->distbits = 5;
+
+ 00015 c7 41 58 05 00
+ 00 00 mov DWORD PTR [ecx+88], 5
+
+; 123 : }
+
+ 0001c c3 ret 0
+_fixedtables ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\infback.c
+; COMDAT _inflateBack@20
+_TEXT SEGMENT
+tv1719 = -48 ; size = 4
+tv1718 = -48 ; size = 4
+tv1717 = -48 ; size = 4
+$T1 = -44 ; size = 4
+tv1711 = -44 ; size = 4
+tv1709 = -44 ; size = 4
+tv1708 = -44 ; size = 4
+tv1722 = -40 ; size = 4
+_len$1$ = -36 ; size = 4
+_here$1$ = -36 ; size = 4
+_copy$4$ = -32 ; size = 4
+_last$ = -32 ; size = 4
+_here$ = -32 ; size = 4
+_put$1$ = -28 ; size = 4
+_left$1$ = -24 ; size = 4
+_bits$1$ = -20 ; size = 4
+_next$5$ = -16 ; size = 4
+_state$1$ = -12 ; size = 4
+_next$ = -8 ; size = 4
+_hold$1$ = -4 ; size = 4
+_strm$ = 8 ; size = 4
+_in$ = 12 ; size = 4
+_in_desc$ = 16 ; size = 4
+_out$ = 20 ; size = 4
+_out_desc$ = 24 ; size = 4
+_inflateBack@20 PROC ; COMDAT
+
+; 256 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 257 : struct inflate_state FAR *state;
+; 258 : z_const unsigned char FAR *next; /* next input */
+; 259 : unsigned char FAR *put; /* next output */
+; 260 : unsigned have, left; /* available input and output */
+; 261 : unsigned long hold; /* bit buffer */
+; 262 : unsigned bits; /* bits in bit buffer */
+; 263 : unsigned copy; /* number of stored or match bytes to copy */
+; 264 : unsigned char FAR *from; /* where to copy match bytes from */
+; 265 : code here; /* current decoding table entry */
+; 266 : code last; /* parent table entry */
+; 267 : unsigned len; /* length to copy for repeats, bits to drop */
+; 268 : int ret; /* return code */
+; 269 : static const unsigned short order[19] = /* permutation of code lengths */
+; 270 : {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+; 271 :
+; 272 : /* Check that the strm exists and that the state was initialized */
+; 273 : if (strm == Z_NULL || strm->state == Z_NULL)
+
+ 00003 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00006 83 ec 30 sub esp, 48 ; 00000030H
+ 00009 85 c0 test eax, eax
+ 0000b 0f 84 96 0d 00
+ 00 je $LN254@inflateBac
+ 00011 8b 50 1c mov edx, DWORD PTR [eax+28]
+ 00014 89 55 f4 mov DWORD PTR _state$1$[ebp], edx
+ 00017 85 d2 test edx, edx
+ 00019 0f 84 88 0d 00
+ 00 je $LN254@inflateBac
+
+; 275 : state = (struct inflate_state FAR *)strm->state;
+; 276 :
+; 277 : /* Reset the state */
+; 278 : strm->msg = Z_NULL;
+
+ 0001f 53 push ebx
+ 00020 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], 0
+
+; 279 : state->mode = TYPE;
+
+ 00027 c7 02 0b 00 00
+ 00 mov DWORD PTR [edx], 11 ; 0000000bH
+
+; 280 : state->last = 0;
+
+ 0002d c7 42 04 00 00
+ 00 00 mov DWORD PTR [edx+4], 0
+
+; 281 : state->whave = 0;
+
+ 00034 c7 42 2c 00 00
+ 00 00 mov DWORD PTR [edx+44], 0
+
+; 282 : next = strm->next_in;
+
+ 0003b 8b 18 mov ebx, DWORD PTR [eax]
+ 0003d 89 5d f0 mov DWORD PTR _next$5$[ebp], ebx
+ 00040 89 5d f8 mov DWORD PTR _next$[ebp], ebx
+ 00043 56 push esi
+ 00044 57 push edi
+
+; 283 : have = next != Z_NULL ? strm->avail_in : 0;
+
+ 00045 85 db test ebx, ebx
+ 00047 74 05 je SHORT $LN343@inflateBac
+ 00049 8b 70 04 mov esi, DWORD PTR [eax+4]
+ 0004c eb 02 jmp SHORT $LN344@inflateBac
+$LN343@inflateBac:
+ 0004e 33 f6 xor esi, esi
+$LN344@inflateBac:
+
+; 284 : hold = 0;
+; 285 : bits = 0;
+; 286 : put = state->window;
+
+ 00050 8b 42 34 mov eax, DWORD PTR [edx+52]
+ 00053 33 c9 xor ecx, ecx
+ 00055 89 45 e4 mov DWORD PTR _put$1$[ebp], eax
+ 00058 33 ff xor edi, edi
+
+; 287 : left = state->wsize;
+
+ 0005a 8b 42 28 mov eax, DWORD PTR [edx+40]
+ 0005d 89 45 e8 mov DWORD PTR _left$1$[ebp], eax
+
+; 288 :
+; 289 : /* Inflate until end of block marked as last */
+; 290 : for (;;)
+; 291 : switch (state->mode) {
+
+ 00060 8b 02 mov eax, DWORD PTR [edx]
+ 00062 83 e8 0b sub eax, 11 ; 0000000bH
+ 00065 89 4d fc mov DWORD PTR _hold$1$[ebp], ecx
+ 00068 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+ 0006b 83 f8 12 cmp eax, 18 ; 00000012H
+ 0006e 0f 87 9c 0c 00
+ 00 ja $LN341@inflateBac
+ 00074 8b 5d f0 mov ebx, DWORD PTR _next$5$[ebp]
+ 00077 66 0f 1f 84 00
+ 00 00 00 00 npad 9
+$LL2@inflateBac:
+ 00080 0f b6 80 00 00
+ 00 00 movzx eax, BYTE PTR $LN473@inflateBac[eax]
+ 00087 ff 24 85 00 00
+ 00 00 jmp DWORD PTR $LN507@inflateBac[eax*4]
+$LN255@inflateBac:
+
+; 292 : case TYPE:
+; 293 : /* determine and dispatch block type */
+; 294 : if (state->last) {
+
+ 0008e 83 7a 04 00 cmp DWORD PTR [edx+4], 0
+ 00092 74 18 je SHORT $LN12@inflateBac
+
+; 295 : BYTEBITS();
+
+ 00094 8b cf mov ecx, edi
+
+; 296 : state->mode = DONE;
+
+ 00096 c7 02 1c 00 00
+ 00 mov DWORD PTR [edx], 28 ; 0000001cH
+ 0009c 83 e1 07 and ecx, 7
+ 0009f d3 6d fc shr DWORD PTR _hold$1$[ebp], cl
+ 000a2 2b f9 sub edi, ecx
+ 000a4 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+
+; 297 : break;
+
+ 000a7 e9 4d 0c 00 00 jmp $LN505@inflateBac
+$LN12@inflateBac:
+
+; 298 : }
+; 299 : NEEDBITS(3);
+
+ 000ac 83 ff 03 cmp edi, 3
+ 000af 73 3d jae SHORT $LN10@inflateBac
+$LL13@inflateBac:
+ 000b1 85 f6 test esi, esi
+ 000b3 75 1a jne SHORT $LN18@inflateBac
+ 000b5 8d 45 f8 lea eax, DWORD PTR _next$[ebp]
+ 000b8 50 push eax
+ 000b9 ff 75 10 push DWORD PTR _in_desc$[ebp]
+ 000bc ff 55 0c call DWORD PTR _in$[ebp]
+ 000bf 8b f0 mov esi, eax
+ 000c1 83 c4 08 add esp, 8
+ 000c4 85 f6 test esi, esi
+ 000c6 0f 84 5f 0c 00
+ 00 je $LN369@inflateBac
+ 000cc 8b 5d f8 mov ebx, DWORD PTR _next$[ebp]
+$LN18@inflateBac:
+ 000cf 0f b6 03 movzx eax, BYTE PTR [ebx]
+ 000d2 8b cf mov ecx, edi
+ 000d4 d3 e0 shl eax, cl
+ 000d6 43 inc ebx
+ 000d7 8b 4d fc mov ecx, DWORD PTR _hold$1$[ebp]
+ 000da 83 c7 08 add edi, 8
+ 000dd 03 c8 add ecx, eax
+ 000df 89 5d f8 mov DWORD PTR _next$[ebp], ebx
+ 000e2 4e dec esi
+ 000e3 89 4d fc mov DWORD PTR _hold$1$[ebp], ecx
+ 000e6 83 ff 03 cmp edi, 3
+ 000e9 72 c6 jb SHORT $LL13@inflateBac
+ 000eb 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+$LN10@inflateBac:
+
+; 300 : state->last = BITS(1);
+
+ 000ee 8b c1 mov eax, ecx
+
+; 301 : DROPBITS(1);
+
+ 000f0 d1 e9 shr ecx, 1
+ 000f2 83 e0 01 and eax, 1
+ 000f5 89 4d fc mov DWORD PTR _hold$1$[ebp], ecx
+ 000f8 89 42 04 mov DWORD PTR [edx+4], eax
+
+; 302 : switch (BITS(2)) {
+
+ 000fb 8b c1 mov eax, ecx
+ 000fd 83 e0 03 and eax, 3
+ 00100 83 f8 03 cmp eax, 3
+ 00103 77 39 ja SHORT $LN28@inflateBac
+ 00105 ff 24 85 00 00
+ 00 00 jmp DWORD PTR $LN508@inflateBac[eax*4]
+$LN259@inflateBac:
+
+; 303 : case 0: /* stored block */
+; 304 : Tracev((stderr, "inflate: stored block%s\n",
+; 305 : state->last ? " (last)" : ""));
+; 306 : state->mode = STORED;
+
+ 0010c c7 02 0d 00 00
+ 00 mov DWORD PTR [edx], 13 ; 0000000dH
+
+; 307 : break;
+
+ 00112 eb 2a jmp SHORT $LN28@inflateBac
+$LN260@inflateBac:
+
+; 308 : case 1: /* fixed block */
+; 309 : fixedtables(state);
+
+ 00114 8b ca mov ecx, edx
+ 00116 e8 00 00 00 00 call _fixedtables
+
+; 310 : Tracev((stderr, "inflate: fixed codes block%s\n",
+; 311 : state->last ? " (last)" : ""));
+; 312 : state->mode = LEN; /* decode codes */
+; 313 : break;
+
+ 0011b 8b 4d fc mov ecx, DWORD PTR _hold$1$[ebp]
+ 0011e c7 02 14 00 00
+ 00 mov DWORD PTR [edx], 20 ; 00000014H
+ 00124 eb 18 jmp SHORT $LN28@inflateBac
+$LN261@inflateBac:
+
+; 314 : case 2: /* dynamic block */
+; 315 : Tracev((stderr, "inflate: dynamic codes block%s\n",
+; 316 : state->last ? " (last)" : ""));
+; 317 : state->mode = TABLE;
+
+ 00126 c7 02 10 00 00
+ 00 mov DWORD PTR [edx], 16 ; 00000010H
+
+; 318 : break;
+
+ 0012c eb 10 jmp SHORT $LN28@inflateBac
+$LN262@inflateBac:
+
+; 319 : case 3:
+; 320 : strm->msg = (char *)"invalid block type";
+
+ 0012e 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00131 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BD@PJCBIDD@invalid?5block?5type?$AA@
+
+; 321 : state->mode = BAD;
+
+ 00138 c7 02 1d 00 00
+ 00 mov DWORD PTR [edx], 29 ; 0000001dH
+$LN28@inflateBac:
+
+; 322 : }
+; 323 : DROPBITS(2);
+; 324 : break;
+
+ 0013e 8b 5d f8 mov ebx, DWORD PTR _next$[ebp]
+ 00141 c1 e9 02 shr ecx, 2
+ 00144 83 ef 03 sub edi, 3
+ 00147 89 4d fc mov DWORD PTR _hold$1$[ebp], ecx
+ 0014a 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+ 0014d 89 5d f0 mov DWORD PTR _next$5$[ebp], ebx
+ 00150 e9 ad 0b 00 00 jmp $LN393@inflateBac
+$LN31@inflateBac:
+
+; 325 :
+; 326 : case STORED:
+; 327 : /* get and verify stored block length */
+; 328 : BYTEBITS(); /* go to byte boundary */
+
+ 00155 8b cf mov ecx, edi
+ 00157 83 e1 07 and ecx, 7
+ 0015a d3 6d fc shr DWORD PTR _hold$1$[ebp], cl
+ 0015d 2b f9 sub edi, ecx
+ 0015f 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+
+; 329 : NEEDBITS(32);
+
+ 00162 83 ff 20 cmp edi, 32 ; 00000020H
+ 00165 73 42 jae SHORT $LN493@inflateBac
+$LL35@inflateBac:
+ 00167 85 f6 test esi, esi
+ 00169 75 1a jne SHORT $LN40@inflateBac
+ 0016b 8d 45 f8 lea eax, DWORD PTR _next$[ebp]
+ 0016e 50 push eax
+ 0016f ff 75 10 push DWORD PTR _in_desc$[ebp]
+ 00172 ff 55 0c call DWORD PTR _in$[ebp]
+ 00175 8b f0 mov esi, eax
+ 00177 83 c4 08 add esp, 8
+ 0017a 85 f6 test esi, esi
+ 0017c 0f 84 a9 0b 00
+ 00 je $LN369@inflateBac
+ 00182 8b 5d f8 mov ebx, DWORD PTR _next$[ebp]
+$LN40@inflateBac:
+ 00185 0f b6 03 movzx eax, BYTE PTR [ebx]
+ 00188 8b cf mov ecx, edi
+ 0018a d3 e0 shl eax, cl
+ 0018c 83 c7 08 add edi, 8
+ 0018f 8b 4d fc mov ecx, DWORD PTR _hold$1$[ebp]
+ 00192 43 inc ebx
+ 00193 03 c8 add ecx, eax
+ 00195 89 5d f8 mov DWORD PTR _next$[ebp], ebx
+ 00198 4e dec esi
+ 00199 89 4d fc mov DWORD PTR _hold$1$[ebp], ecx
+ 0019c 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+ 0019f 83 ff 20 cmp edi, 32 ; 00000020H
+ 001a2 72 c3 jb SHORT $LL35@inflateBac
+ 001a4 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+ 001a7 eb 03 jmp SHORT $LN32@inflateBac
+$LN493@inflateBac:
+ 001a9 8b 4d fc mov ecx, DWORD PTR _hold$1$[ebp]
+$LN32@inflateBac:
+
+; 330 : if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
+
+ 001ac 8b c1 mov eax, ecx
+ 001ae 0f b7 d9 movzx ebx, cx
+ 001b1 f7 d0 not eax
+ 001b3 c1 e8 10 shr eax, 16 ; 00000010H
+ 001b6 3b d8 cmp ebx, eax
+ 001b8 74 1b je SHORT $LN266@inflateBac
+
+; 331 : strm->msg = (char *)"invalid stored block lengths";
+
+ 001ba 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 001bd c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BN@LGAADGOK@invalid?5stored?5block?5lengths?$AA@
+
+; 332 : state->mode = BAD;
+
+ 001c4 c7 02 1d 00 00
+ 00 mov DWORD PTR [edx], 29 ; 0000001dH
+
+; 333 : break;
+
+ 001ca 8b 5d f8 mov ebx, DWORD PTR _next$[ebp]
+ 001cd 89 5d f0 mov DWORD PTR _next$5$[ebp], ebx
+ 001d0 e9 2d 0b 00 00 jmp $LN393@inflateBac
+$LN266@inflateBac:
+
+; 334 : }
+; 335 : state->length = (unsigned)hold & 0xffff;
+; 336 : Tracev((stderr, "inflate: stored length %u\n",
+; 337 : state->length));
+; 338 : INITBITS();
+
+ 001d5 33 c9 xor ecx, ecx
+ 001d7 89 5a 40 mov DWORD PTR [edx+64], ebx
+ 001da 33 ff xor edi, edi
+ 001dc 89 4d fc mov DWORD PTR _hold$1$[ebp], ecx
+ 001df 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+
+; 339 :
+; 340 : /* copy stored block from input to output */
+; 341 : while (state->length != 0) {
+
+ 001e2 3b d9 cmp ebx, ecx
+ 001e4 0f 84 88 00 00
+ 00 je $LN47@inflateBac
+ 001ea 8b 45 e8 mov eax, DWORD PTR _left$1$[ebp]
+ 001ed 0f 1f 00 npad 3
+$LL46@inflateBac:
+
+; 342 : copy = state->length;
+
+ 001f0 8b 5a 40 mov ebx, DWORD PTR [edx+64]
+
+; 343 : PULL();
+
+ 001f3 85 f6 test esi, esi
+ 001f5 75 1d jne SHORT $LN48@inflateBac
+ 001f7 8d 45 f8 lea eax, DWORD PTR _next$[ebp]
+ 001fa 50 push eax
+ 001fb ff 75 10 push DWORD PTR _in_desc$[ebp]
+ 001fe ff 55 0c call DWORD PTR _in$[ebp]
+ 00201 8b f0 mov esi, eax
+ 00203 83 c4 08 add esp, 8
+ 00206 85 f6 test esi, esi
+ 00208 0f 84 1d 0b 00
+ 00 je $LN369@inflateBac
+ 0020e 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+ 00211 8b 45 e8 mov eax, DWORD PTR _left$1$[ebp]
+$LN48@inflateBac:
+
+; 344 : ROOM();
+
+ 00214 85 c0 test eax, eax
+ 00216 75 25 jne SHORT $LN51@inflateBac
+ 00218 8b 4a 28 mov ecx, DWORD PTR [edx+40]
+ 0021b 8b 42 34 mov eax, DWORD PTR [edx+52]
+ 0021e 51 push ecx
+ 0021f 50 push eax
+ 00220 ff 75 18 push DWORD PTR _out_desc$[ebp]
+ 00223 89 45 e4 mov DWORD PTR _put$1$[ebp], eax
+ 00226 89 4d e8 mov DWORD PTR _left$1$[ebp], ecx
+ 00229 89 4a 2c mov DWORD PTR [edx+44], ecx
+ 0022c ff 55 14 call DWORD PTR _out$[ebp]
+ 0022f 83 c4 0c add esp, 12 ; 0000000cH
+ 00232 85 c0 test eax, eax
+ 00234 0f 85 0b 0b 00
+ 00 jne $LN372@inflateBac
+ 0023a 8b 45 e8 mov eax, DWORD PTR _left$1$[ebp]
+$LN51@inflateBac:
+
+; 345 : if (copy > have) copy = have;
+
+ 0023d 3b de cmp ebx, esi
+ 0023f 0f 47 de cmova ebx, esi
+
+; 346 : if (copy > left) copy = left;
+
+ 00242 3b d8 cmp ebx, eax
+ 00244 0f 47 d8 cmova ebx, eax
+
+; 347 : zmemcpy(put, next, copy);
+
+ 00247 8b 45 e4 mov eax, DWORD PTR _put$1$[ebp]
+ 0024a 53 push ebx
+ 0024b ff 75 f8 push DWORD PTR _next$[ebp]
+ 0024e 50 push eax
+ 0024f e8 00 00 00 00 call _memcpy
+
+; 348 : have -= copy;
+; 349 : next += copy;
+; 350 : left -= copy;
+; 351 : put += copy;
+; 352 : state->length -= copy;
+
+ 00254 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+ 00257 83 c4 0c add esp, 12 ; 0000000cH
+ 0025a 8b 45 e8 mov eax, DWORD PTR _left$1$[ebp]
+ 0025d 2b f3 sub esi, ebx
+ 0025f 01 5d f8 add DWORD PTR _next$[ebp], ebx
+ 00262 2b c3 sub eax, ebx
+ 00264 01 5d e4 add DWORD PTR _put$1$[ebp], ebx
+ 00267 29 5a 40 sub DWORD PTR [edx+64], ebx
+ 0026a 89 45 e8 mov DWORD PTR _left$1$[ebp], eax
+ 0026d 75 81 jne SHORT $LL46@inflateBac
+ 0026f 8b 4d fc mov ecx, DWORD PTR _hold$1$[ebp]
+$LN47@inflateBac:
+
+; 353 : }
+; 354 : Tracev((stderr, "inflate: stored end\n"));
+; 355 : state->mode = TYPE;
+
+ 00272 c7 02 0b 00 00
+ 00 mov DWORD PTR [edx], 11 ; 0000000bH
+
+; 356 : break;
+
+ 00278 8b 5d f8 mov ebx, DWORD PTR _next$[ebp]
+ 0027b 89 5d f0 mov DWORD PTR _next$5$[ebp], ebx
+ 0027e e9 7f 0a 00 00 jmp $LN393@inflateBac
+$LN56@inflateBac:
+
+; 357 :
+; 358 : case TABLE:
+; 359 : /* get dynamic table entries descriptor */
+; 360 : NEEDBITS(14);
+
+ 00283 83 ff 0e cmp edi, 14 ; 0000000eH
+ 00286 73 38 jae SHORT $LN54@inflateBac
+$LL57@inflateBac:
+ 00288 85 f6 test esi, esi
+ 0028a 75 1a jne SHORT $LN62@inflateBac
+ 0028c 8d 45 f8 lea eax, DWORD PTR _next$[ebp]
+ 0028f 50 push eax
+ 00290 ff 75 10 push DWORD PTR _in_desc$[ebp]
+ 00293 ff 55 0c call DWORD PTR _in$[ebp]
+ 00296 8b f0 mov esi, eax
+ 00298 83 c4 08 add esp, 8
+ 0029b 85 f6 test esi, esi
+ 0029d 0f 84 88 0a 00
+ 00 je $LN369@inflateBac
+ 002a3 8b 5d f8 mov ebx, DWORD PTR _next$[ebp]
+$LN62@inflateBac:
+ 002a6 0f b6 03 movzx eax, BYTE PTR [ebx]
+ 002a9 8b cf mov ecx, edi
+ 002ab d3 e0 shl eax, cl
+ 002ad 43 inc ebx
+ 002ae 01 45 fc add DWORD PTR _hold$1$[ebp], eax
+ 002b1 83 c7 08 add edi, 8
+ 002b4 4e dec esi
+ 002b5 89 5d f8 mov DWORD PTR _next$[ebp], ebx
+ 002b8 83 ff 0e cmp edi, 14 ; 0000000eH
+ 002bb 72 cb jb SHORT $LL57@inflateBac
+ 002bd 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+$LN54@inflateBac:
+
+; 361 : state->nlen = BITS(5) + 257;
+
+ 002c0 8b 5d fc mov ebx, DWORD PTR _hold$1$[ebp]
+
+; 362 : DROPBITS(5);
+; 363 : state->ndist = BITS(5) + 1;
+; 364 : DROPBITS(5);
+; 365 : state->ncode = BITS(4) + 4;
+; 366 : DROPBITS(4);
+
+ 002c3 83 ef 0e sub edi, 14 ; 0000000eH
+ 002c6 8b c3 mov eax, ebx
+ 002c8 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+ 002cb 83 e0 1f and eax, 31 ; 0000001fH
+ 002ce c1 eb 05 shr ebx, 5
+ 002d1 05 01 01 00 00 add eax, 257 ; 00000101H
+ 002d6 89 42 60 mov DWORD PTR [edx+96], eax
+ 002d9 8b c3 mov eax, ebx
+ 002db 83 e0 1f and eax, 31 ; 0000001fH
+ 002de c1 eb 05 shr ebx, 5
+ 002e1 40 inc eax
+ 002e2 89 42 64 mov DWORD PTR [edx+100], eax
+ 002e5 8b c3 mov eax, ebx
+ 002e7 83 e0 0f and eax, 15 ; 0000000fH
+ 002ea c1 eb 04 shr ebx, 4
+ 002ed 83 c0 04 add eax, 4
+ 002f0 89 5d fc mov DWORD PTR _hold$1$[ebp], ebx
+
+; 367 : #ifndef PKZIP_BUG_WORKAROUND
+; 368 : if (state->nlen > 286 || state->ndist > 30) {
+
+ 002f3 81 7a 60 1e 01
+ 00 00 cmp DWORD PTR [edx+96], 286 ; 0000011eH
+ 002fa 89 42 5c mov DWORD PTR [edx+92], eax
+ 002fd 0f 87 02 05 00
+ 00 ja $LN277@inflateBac
+ 00303 83 7a 64 1e cmp DWORD PTR [edx+100], 30 ; 0000001eH
+ 00307 0f 87 f8 04 00
+ 00 ja $LN277@inflateBac
+
+; 372 : }
+; 373 : #endif
+; 374 : Tracev((stderr, "inflate: table sizes ok\n"));
+; 375 :
+; 376 : /* get code length code lengths (not a typo) */
+; 377 : state->have = 0;
+
+ 0030d c7 42 68 00 00
+ 00 00 mov DWORD PTR [edx+104], 0
+
+; 378 : while (state->have < state->ncode) {
+
+ 00314 85 c0 test eax, eax
+ 00316 76 6b jbe SHORT $LN352@inflateBac
+$LL74@inflateBac:
+
+; 379 : NEEDBITS(3);
+
+ 00318 83 ff 03 cmp edi, 3
+ 0031b 73 3a jae SHORT $LN76@inflateBac
+ 0031d 8b 55 f8 mov edx, DWORD PTR _next$[ebp]
+$LL79@inflateBac:
+ 00320 85 f6 test esi, esi
+ 00322 75 1a jne SHORT $LN84@inflateBac
+ 00324 8d 45 f8 lea eax, DWORD PTR _next$[ebp]
+ 00327 50 push eax
+ 00328 ff 75 10 push DWORD PTR _in_desc$[ebp]
+ 0032b ff 55 0c call DWORD PTR _in$[ebp]
+ 0032e 8b f0 mov esi, eax
+ 00330 83 c4 08 add esp, 8
+ 00333 85 f6 test esi, esi
+ 00335 0f 84 f0 09 00
+ 00 je $LN369@inflateBac
+ 0033b 8b 55 f8 mov edx, DWORD PTR _next$[ebp]
+$LN84@inflateBac:
+ 0033e 0f b6 02 movzx eax, BYTE PTR [edx]
+ 00341 8b cf mov ecx, edi
+ 00343 d3 e0 shl eax, cl
+ 00345 42 inc edx
+ 00346 83 c7 08 add edi, 8
+ 00349 89 55 f8 mov DWORD PTR _next$[ebp], edx
+ 0034c 4e dec esi
+ 0034d 03 d8 add ebx, eax
+ 0034f 83 ff 03 cmp edi, 3
+ 00352 72 cc jb SHORT $LL79@inflateBac
+ 00354 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+$LN76@inflateBac:
+
+; 380 : state->lens[order[state->have++]] = (unsigned short)BITS(3);
+
+ 00357 8b 42 68 mov eax, DWORD PTR [edx+104]
+ 0035a 8b cb mov ecx, ebx
+ 0035c 83 e1 07 and ecx, 7
+
+; 381 : DROPBITS(3);
+
+ 0035f c1 eb 03 shr ebx, 3
+ 00362 83 ef 03 sub edi, 3
+ 00365 89 5d fc mov DWORD PTR _hold$1$[ebp], ebx
+ 00368 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+ 0036b 0f b7 04 45 00
+ 00 00 00 movzx eax, WORD PTR ?order@?1??inflateBack@@9@9[eax*2]
+ 00373 66 89 4c 42 70 mov WORD PTR [edx+eax*2+112], cx
+ 00378 ff 42 68 inc DWORD PTR [edx+104]
+ 0037b 8b 42 68 mov eax, DWORD PTR [edx+104]
+ 0037e 3b 42 5c cmp eax, DWORD PTR [edx+92]
+ 00381 72 95 jb SHORT $LL74@inflateBac
+$LN352@inflateBac:
+
+; 382 : }
+; 383 : while (state->have < 19)
+
+ 00383 83 7a 68 13 cmp DWORD PTR [edx+104], 19 ; 00000013H
+ 00387 73 22 jae SHORT $LN91@inflateBac
+ 00389 0f 1f 80 00 00
+ 00 00 npad 7
+$LL90@inflateBac:
+
+; 384 : state->lens[order[state->have++]] = 0;
+
+ 00390 8b 42 68 mov eax, DWORD PTR [edx+104]
+ 00393 33 c9 xor ecx, ecx
+ 00395 0f b7 04 45 00
+ 00 00 00 movzx eax, WORD PTR ?order@?1??inflateBack@@9@9[eax*2]
+ 0039d 66 89 4c 42 70 mov WORD PTR [edx+eax*2+112], cx
+ 003a2 ff 42 68 inc DWORD PTR [edx+104]
+ 003a5 83 7a 68 13 cmp DWORD PTR [edx+104], 19 ; 00000013H
+ 003a9 72 e5 jb SHORT $LL90@inflateBac
+$LN91@inflateBac:
+
+; 385 : state->next = state->codes;
+
+ 003ab 8d 82 30 05 00
+ 00 lea eax, DWORD PTR [edx+1328]
+
+; 386 : state->lencode = (code const FAR *)(state->next);
+; 387 : state->lenbits = 7;
+
+ 003b1 c7 42 54 07 00
+ 00 00 mov DWORD PTR [edx+84], 7
+ 003b8 8d 4a 6c lea ecx, DWORD PTR [edx+108]
+ 003bb 89 42 4c mov DWORD PTR [edx+76], eax
+
+; 388 : ret = inflate_table(CODES, state->lens, 19, &(state->next),
+
+ 003be 8d 9a f0 02 00
+ 00 lea ebx, DWORD PTR [edx+752]
+ 003c4 89 01 mov DWORD PTR [ecx], eax
+ 003c6 8d 42 54 lea eax, DWORD PTR [edx+84]
+ 003c9 83 c2 70 add edx, 112 ; 00000070H
+ 003cc 53 push ebx
+ 003cd 50 push eax
+ 003ce 51 push ecx
+ 003cf 6a 13 push 19 ; 00000013H
+ 003d1 33 c9 xor ecx, ecx
+ 003d3 89 45 d8 mov DWORD PTR tv1722[ebp], eax
+ 003d6 89 55 d0 mov DWORD PTR tv1719[ebp], edx
+ 003d9 e8 00 00 00 00 call _inflate_table
+
+; 392 : state->mode = BAD;
+
+ 003de 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+ 003e1 83 c4 10 add esp, 16 ; 00000010H
+ 003e4 85 c0 test eax, eax
+ 003e6 74 15 je SHORT $LN280@inflateBac
+
+; 389 : &(state->lenbits), state->work);
+; 390 : if (ret) {
+; 391 : strm->msg = (char *)"invalid code lengths set";
+
+ 003e8 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 003eb c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BJ@HDEPPGOH@invalid?5code?5lengths?5set?$AA@
+
+; 392 : state->mode = BAD;
+
+ 003f2 c7 02 1d 00 00
+ 00 mov DWORD PTR [edx], 29 ; 0000001dH
+
+; 393 : break;
+
+ 003f8 e9 fc 08 00 00 jmp $LN505@inflateBac
+$LN280@inflateBac:
+
+; 394 : }
+; 395 : Tracev((stderr, "inflate: code lengths ok\n"));
+; 396 :
+; 397 : /* get length and distance code code lengths */
+; 398 : state->have = 0;
+; 399 : while (state->have < state->nlen + state->ndist) {
+
+ 003fd 8b 42 64 mov eax, DWORD PTR [edx+100]
+ 00400 c7 42 68 00 00
+ 00 00 mov DWORD PTR [edx+104], 0
+ 00407 8b 5d f8 mov ebx, DWORD PTR _next$[ebp]
+ 0040a 89 5d f0 mov DWORD PTR _next$5$[ebp], ebx
+ 0040d 03 42 60 add eax, DWORD PTR [edx+96]
+ 00410 0f 84 7f 02 00
+ 00 je $LN93@inflateBac
+$LL92@inflateBac:
+
+; 400 : for (;;) {
+; 401 : here = state->lencode[BITS(state->lenbits)];
+
+ 00416 8b 45 d8 mov eax, DWORD PTR tv1722[ebp]
+ 00419 ba 01 00 00 00 mov edx, 1
+ 0041e 8b 08 mov ecx, DWORD PTR [eax]
+ 00420 8b 45 f4 mov eax, DWORD PTR _state$1$[ebp]
+ 00423 d3 e2 shl edx, cl
+ 00425 4a dec edx
+ 00426 23 55 fc and edx, DWORD PTR _hold$1$[ebp]
+ 00429 8b 40 4c mov eax, DWORD PTR [eax+76]
+ 0042c 8b 04 90 mov eax, DWORD PTR [eax+edx*4]
+
+; 402 : if ((unsigned)(here.bits) <= bits) break;
+
+ 0042f 8b c8 mov ecx, eax
+ 00431 c1 e9 08 shr ecx, 8
+ 00434 0f b6 c9 movzx ecx, cl
+ 00437 89 45 dc mov DWORD PTR _here$1$[ebp], eax
+ 0043a 89 45 e0 mov DWORD PTR _here$[ebp], eax
+ 0043d 3b cf cmp ecx, edi
+ 0043f 76 5e jbe SHORT $LN375@inflateBac
+$LL94@inflateBac:
+
+; 403 : PULLBYTE();
+
+ 00441 85 f6 test esi, esi
+ 00443 75 1a jne SHORT $LN100@inflateBac
+ 00445 8d 45 f8 lea eax, DWORD PTR _next$[ebp]
+ 00448 50 push eax
+ 00449 ff 75 10 push DWORD PTR _in_desc$[ebp]
+ 0044c ff 55 0c call DWORD PTR _in$[ebp]
+ 0044f 8b f0 mov esi, eax
+ 00451 83 c4 08 add esp, 8
+ 00454 85 f6 test esi, esi
+ 00456 0f 84 cf 08 00
+ 00 je $LN369@inflateBac
+ 0045c 8b 5d f8 mov ebx, DWORD PTR _next$[ebp]
+$LN100@inflateBac:
+ 0045f 0f b6 03 movzx eax, BYTE PTR [ebx]
+ 00462 8b cf mov ecx, edi
+ 00464 d3 e0 shl eax, cl
+ 00466 43 inc ebx
+ 00467 01 45 fc add DWORD PTR _hold$1$[ebp], eax
+ 0046a ba 01 00 00 00 mov edx, 1
+ 0046f 8b 45 d8 mov eax, DWORD PTR tv1722[ebp]
+ 00472 83 c7 08 add edi, 8
+ 00475 89 5d f8 mov DWORD PTR _next$[ebp], ebx
+ 00478 4e dec esi
+ 00479 89 5d f0 mov DWORD PTR _next$5$[ebp], ebx
+ 0047c 8b 08 mov ecx, DWORD PTR [eax]
+ 0047e 8b 45 f4 mov eax, DWORD PTR _state$1$[ebp]
+ 00481 d3 e2 shl edx, cl
+ 00483 4a dec edx
+ 00484 23 55 fc and edx, DWORD PTR _hold$1$[ebp]
+ 00487 8b 40 4c mov eax, DWORD PTR [eax+76]
+ 0048a 8b 04 90 mov eax, DWORD PTR [eax+edx*4]
+ 0048d 8b c8 mov ecx, eax
+ 0048f c1 e9 08 shr ecx, 8
+ 00492 0f b6 c9 movzx ecx, cl
+ 00495 89 45 dc mov DWORD PTR _here$1$[ebp], eax
+ 00498 89 45 e0 mov DWORD PTR _here$[ebp], eax
+ 0049b 3b cf cmp ecx, edi
+ 0049d 77 a2 ja SHORT $LL94@inflateBac
+$LN375@inflateBac:
+
+; 404 : }
+; 405 : if (here.val < 16) {
+
+ 0049f 8b c8 mov ecx, eax
+ 004a1 c1 e9 10 shr ecx, 16 ; 00000010H
+ 004a4 89 4d d4 mov DWORD PTR tv1711[ebp], ecx
+ 004a7 66 83 f9 10 cmp cx, 16 ; 00000010H
+ 004ab 73 24 jae SHORT $LN501@inflateBac
+
+; 406 : DROPBITS(here.bits);
+; 407 : state->lens[state->have++] = here.val;
+
+ 004ad 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+ 004b0 c1 e8 08 shr eax, 8
+ 004b3 0f b6 c8 movzx ecx, al
+ 004b6 d3 6d fc shr DWORD PTR _hold$1$[ebp], cl
+ 004b9 2b f9 sub edi, ecx
+ 004bb 8b 42 68 mov eax, DWORD PTR [edx+104]
+ 004be 8b 4d d4 mov ecx, DWORD PTR tv1711[ebp]
+ 004c1 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+ 004c4 66 89 4c 42 70 mov WORD PTR [edx+eax*2+112], cx
+ 004c9 ff 42 68 inc DWORD PTR [edx+104]
+
+; 408 : }
+
+ 004cc e9 af 01 00 00 jmp $LN502@inflateBac
+$LN501@inflateBac:
+ 004d1 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+
+; 409 : else {
+; 410 : if (here.val == 16) {
+
+ 004d4 0f 85 95 00 00
+ 00 jne $LN286@inflateBac
+
+; 411 : NEEDBITS(here.bits + 2);
+
+ 004da 8b c8 mov ecx, eax
+ 004dc c1 e9 08 shr ecx, 8
+ 004df 0f b6 c9 movzx ecx, cl
+ 004e2 83 c1 02 add ecx, 2
+ 004e5 89 4d d4 mov DWORD PTR $T1[ebp], ecx
+ 004e8 3b f9 cmp edi, ecx
+ 004ea 73 44 jae SHORT $LN106@inflateBac
+ 004ec 0f 1f 40 00 npad 4
+$LL109@inflateBac:
+ 004f0 85 f6 test esi, esi
+ 004f2 75 1d jne SHORT $LN114@inflateBac
+ 004f4 8d 45 f8 lea eax, DWORD PTR _next$[ebp]
+ 004f7 50 push eax
+ 004f8 ff 75 10 push DWORD PTR _in_desc$[ebp]
+ 004fb ff 55 0c call DWORD PTR _in$[ebp]
+ 004fe 8b f0 mov esi, eax
+ 00500 83 c4 08 add esp, 8
+ 00503 85 f6 test esi, esi
+ 00505 0f 84 20 08 00
+ 00 je $LN369@inflateBac
+ 0050b 8b 5d f8 mov ebx, DWORD PTR _next$[ebp]
+ 0050e 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+$LN114@inflateBac:
+ 00511 0f b6 03 movzx eax, BYTE PTR [ebx]
+ 00514 8b cf mov ecx, edi
+ 00516 d3 e0 shl eax, cl
+ 00518 43 inc ebx
+ 00519 03 d0 add edx, eax
+ 0051b 89 5d f0 mov DWORD PTR _next$5$[ebp], ebx
+ 0051e 83 c7 08 add edi, 8
+ 00521 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00524 4e dec esi
+ 00525 89 5d f8 mov DWORD PTR _next$[ebp], ebx
+ 00528 3b 7d d4 cmp edi, DWORD PTR $T1[ebp]
+ 0052b 72 c3 jb SHORT $LL109@inflateBac
+ 0052d 8b 45 dc mov eax, DWORD PTR _here$1$[ebp]
+$LN106@inflateBac:
+
+; 412 : DROPBITS(here.bits);
+
+ 00530 0f b6 cc movzx ecx, ah
+ 00533 d3 ea shr edx, cl
+ 00535 2b f9 sub edi, ecx
+ 00537 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+
+; 413 : if (state->have == 0) {
+
+ 0053a 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+ 0053d 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+ 00540 8b 42 68 mov eax, DWORD PTR [edx+104]
+ 00543 85 c0 test eax, eax
+ 00545 0f 84 72 01 00
+ 00 je $LN380@inflateBac
+
+; 417 : }
+; 418 : len = (unsigned)(state->lens[state->have - 1]);
+
+ 0054b 0f b7 44 42 6e movzx eax, WORD PTR [edx+eax*2+110]
+ 00550 89 45 dc mov DWORD PTR _len$1$[ebp], eax
+
+; 419 : copy = 3 + BITS(2);
+
+ 00553 8b 45 fc mov eax, DWORD PTR _hold$1$[ebp]
+ 00556 8b c8 mov ecx, eax
+ 00558 83 e1 03 and ecx, 3
+
+; 420 : DROPBITS(2);
+
+ 0055b c1 e8 02 shr eax, 2
+ 0055e 83 c1 03 add ecx, 3
+ 00561 89 45 fc mov DWORD PTR _hold$1$[ebp], eax
+ 00564 89 4d e0 mov DWORD PTR _copy$4$[ebp], ecx
+ 00567 83 ef 02 sub edi, 2
+
+; 421 : }
+
+ 0056a e9 df 00 00 00 jmp $LN503@inflateBac
+$LN286@inflateBac:
+
+; 422 : else if (here.val == 17) {
+
+ 0056f 66 83 7d e2 11 cmp WORD PTR _here$[ebp+2], 17 ; 00000011H
+
+; 423 : NEEDBITS(here.bits + 3);
+
+ 00574 0f b6 cc movzx ecx, ah
+ 00577 75 63 jne SHORT $LN142@inflateBac
+ 00579 8d 41 03 lea eax, DWORD PTR [ecx+3]
+ 0057c 89 4d d4 mov DWORD PTR tv1709[ebp], ecx
+ 0057f 3b f8 cmp edi, eax
+ 00581 73 42 jae SHORT $LN123@inflateBac
+$LL126@inflateBac:
+ 00583 85 f6 test esi, esi
+ 00585 75 1d jne SHORT $LN131@inflateBac
+ 00587 8d 45 f8 lea eax, DWORD PTR _next$[ebp]
+ 0058a 50 push eax
+ 0058b ff 75 10 push DWORD PTR _in_desc$[ebp]
+ 0058e ff 55 0c call DWORD PTR _in$[ebp]
+ 00591 8b f0 mov esi, eax
+ 00593 83 c4 08 add esp, 8
+ 00596 85 f6 test esi, esi
+ 00598 0f 84 8d 07 00
+ 00 je $LN369@inflateBac
+ 0059e 8b 5d f8 mov ebx, DWORD PTR _next$[ebp]
+ 005a1 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+$LN131@inflateBac:
+ 005a4 0f b6 03 movzx eax, BYTE PTR [ebx]
+ 005a7 8b cf mov ecx, edi
+ 005a9 d3 e0 shl eax, cl
+ 005ab 43 inc ebx
+ 005ac 8b 4d d4 mov ecx, DWORD PTR tv1709[ebp]
+ 005af 03 d0 add edx, eax
+ 005b1 83 c7 08 add edi, 8
+ 005b4 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 005b7 4e dec esi
+ 005b8 89 5d f0 mov DWORD PTR _next$5$[ebp], ebx
+ 005bb 89 5d f8 mov DWORD PTR _next$[ebp], ebx
+ 005be 8d 41 03 lea eax, DWORD PTR [ecx+3]
+ 005c1 3b f8 cmp edi, eax
+ 005c3 72 be jb SHORT $LL126@inflateBac
+$LN123@inflateBac:
+
+; 424 : DROPBITS(here.bits);
+
+ 005c5 d3 ea shr edx, cl
+
+; 425 : len = 0;
+; 426 : copy = 3 + BITS(3);
+
+ 005c7 8b c2 mov eax, edx
+ 005c9 83 e0 07 and eax, 7
+ 005cc 83 c0 03 add eax, 3
+
+; 427 : DROPBITS(3);
+
+ 005cf c1 ea 03 shr edx, 3
+ 005d2 89 45 e0 mov DWORD PTR _copy$4$[ebp], eax
+ 005d5 b8 fd ff ff ff mov eax, -3 ; fffffffdH
+
+; 428 : }
+
+ 005da eb 61 jmp SHORT $LN504@inflateBac
+$LN142@inflateBac:
+
+; 429 : else {
+; 430 : NEEDBITS(here.bits + 7);
+
+ 005dc 8d 41 07 lea eax, DWORD PTR [ecx+7]
+ 005df 89 4d d4 mov DWORD PTR tv1708[ebp], ecx
+ 005e2 3b f8 cmp edi, eax
+ 005e4 73 42 jae SHORT $LN140@inflateBac
+$LL143@inflateBac:
+ 005e6 85 f6 test esi, esi
+ 005e8 75 1d jne SHORT $LN148@inflateBac
+ 005ea 8d 45 f8 lea eax, DWORD PTR _next$[ebp]
+ 005ed 50 push eax
+ 005ee ff 75 10 push DWORD PTR _in_desc$[ebp]
+ 005f1 ff 55 0c call DWORD PTR _in$[ebp]
+ 005f4 8b f0 mov esi, eax
+ 005f6 83 c4 08 add esp, 8
+ 005f9 85 f6 test esi, esi
+ 005fb 0f 84 2a 07 00
+ 00 je $LN369@inflateBac
+ 00601 8b 5d f8 mov ebx, DWORD PTR _next$[ebp]
+ 00604 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+$LN148@inflateBac:
+ 00607 0f b6 03 movzx eax, BYTE PTR [ebx]
+ 0060a 8b cf mov ecx, edi
+ 0060c d3 e0 shl eax, cl
+ 0060e 43 inc ebx
+ 0060f 8b 4d d4 mov ecx, DWORD PTR tv1708[ebp]
+ 00612 03 d0 add edx, eax
+ 00614 83 c7 08 add edi, 8
+ 00617 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 0061a 4e dec esi
+ 0061b 89 5d f0 mov DWORD PTR _next$5$[ebp], ebx
+ 0061e 89 5d f8 mov DWORD PTR _next$[ebp], ebx
+ 00621 8d 41 07 lea eax, DWORD PTR [ecx+7]
+ 00624 3b f8 cmp edi, eax
+ 00626 72 be jb SHORT $LL143@inflateBac
+$LN140@inflateBac:
+
+; 431 : DROPBITS(here.bits);
+
+ 00628 d3 ea shr edx, cl
+
+; 432 : len = 0;
+; 433 : copy = 11 + BITS(7);
+
+ 0062a 8b c2 mov eax, edx
+ 0062c 83 e0 7f and eax, 127 ; 0000007fH
+ 0062f 83 c0 0b add eax, 11 ; 0000000bH
+
+; 434 : DROPBITS(7);
+
+ 00632 c1 ea 07 shr edx, 7
+ 00635 89 45 e0 mov DWORD PTR _copy$4$[ebp], eax
+ 00638 b8 f9 ff ff ff mov eax, -7 ; fffffff9H
+$LN504@inflateBac:
+ 0063d 2b c1 sub eax, ecx
+ 0063f 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00642 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+ 00645 03 f8 add edi, eax
+ 00647 c7 45 dc 00 00
+ 00 00 mov DWORD PTR _len$1$[ebp], 0
+$LN503@inflateBac:
+
+; 435 : }
+; 436 : if (state->have + copy > state->nlen + state->ndist) {
+
+ 0064e 8b 4a 64 mov ecx, DWORD PTR [edx+100]
+ 00651 8b 42 68 mov eax, DWORD PTR [edx+104]
+ 00654 03 4a 60 add ecx, DWORD PTR [edx+96]
+ 00657 03 45 e0 add eax, DWORD PTR _copy$4$[ebp]
+ 0065a 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+ 0065d 3b c1 cmp eax, ecx
+ 0065f 77 5c ja SHORT $LN380@inflateBac
+
+; 437 : strm->msg = (char *)"invalid bit length repeat";
+; 438 : state->mode = BAD;
+; 439 : break;
+; 440 : }
+; 441 : while (copy--)
+
+ 00661 8b 4d e0 mov ecx, DWORD PTR _copy$4$[ebp]
+ 00664 85 c9 test ecx, ecx
+ 00666 74 1e je SHORT $LN406@inflateBac
+ 00668 8b 5d dc mov ebx, DWORD PTR _len$1$[ebp]
+ 0066b 0f 1f 44 00 00 npad 5
+$LL157@inflateBac:
+
+; 442 : state->lens[state->have++] = (unsigned short)len;
+
+ 00670 8b 42 68 mov eax, DWORD PTR [edx+104]
+ 00673 66 89 5c 42 70 mov WORD PTR [edx+eax*2+112], bx
+ 00678 ff 42 68 inc DWORD PTR [edx+104]
+ 0067b 83 e9 01 sub ecx, 1
+ 0067e 75 f0 jne SHORT $LL157@inflateBac
+$LN502@inflateBac:
+
+; 437 : strm->msg = (char *)"invalid bit length repeat";
+; 438 : state->mode = BAD;
+; 439 : break;
+; 440 : }
+; 441 : while (copy--)
+
+ 00680 8b 5d f8 mov ebx, DWORD PTR _next$[ebp]
+ 00683 89 5d f0 mov DWORD PTR _next$5$[ebp], ebx
+$LN406@inflateBac:
+
+; 394 : }
+; 395 : Tracev((stderr, "inflate: code lengths ok\n"));
+; 396 :
+; 397 : /* get length and distance code code lengths */
+; 398 : state->have = 0;
+; 399 : while (state->have < state->nlen + state->ndist) {
+
+ 00686 8b 42 64 mov eax, DWORD PTR [edx+100]
+ 00689 03 42 60 add eax, DWORD PTR [edx+96]
+ 0068c 39 42 68 cmp DWORD PTR [edx+104], eax
+ 0068f 0f 82 81 fd ff
+ ff jb $LL92@inflateBac
+$LN93@inflateBac:
+
+; 443 : }
+; 444 : }
+; 445 :
+; 446 : /* handle error breaks in while */
+; 447 : if (state->mode == BAD) break;
+
+ 00695 83 3a 1d cmp DWORD PTR [edx], 29 ; 0000001dH
+ 00698 0f 84 61 06 00
+ 00 je $LN492@inflateBac
+
+; 448 :
+; 449 : /* check for end-of-block code (better have one) */
+; 450 : if (state->lens[256] == 0) {
+
+ 0069e 66 83 ba 70 02
+ 00 00 00 cmp WORD PTR [edx+624], 0
+ 006a6 75 2a jne SHORT $LN299@inflateBac
+
+; 451 : strm->msg = (char *)"invalid code -- missing end-of-block";
+
+ 006a8 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 006ab c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0CF@DGDMADCD@invalid?5code?5?9?9?5missing?5end?9of?9b@
+
+; 452 : state->mode = BAD;
+
+ 006b2 c7 02 1d 00 00
+ 00 mov DWORD PTR [edx], 29 ; 0000001dH
+
+; 453 : break;
+
+ 006b8 e9 3c 06 00 00 jmp $LN505@inflateBac
+$LN380@inflateBac:
+
+; 414 : strm->msg = (char *)"invalid bit length repeat";
+
+ 006bd 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 006c0 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BK@BMMPFBBH@invalid?5bit?5length?5repeat?$AA@
+
+; 415 : state->mode = BAD;
+
+ 006c7 c7 02 1d 00 00
+ 00 mov DWORD PTR [edx], 29 ; 0000001dH
+
+; 416 : break;
+
+ 006cd e9 27 06 00 00 jmp $LN505@inflateBac
+$LN299@inflateBac:
+
+; 454 : }
+; 455 :
+; 456 : /* build code tables -- note: do not change the lenbits or distbits
+; 457 : values here (9 and 6) without reading the comments in inftrees.h
+; 458 : concerning the ENOUGH constants, which depend on those values */
+; 459 : state->next = state->codes;
+
+ 006d2 8d 82 30 05 00
+ 00 lea eax, DWORD PTR [edx+1328]
+
+; 460 : state->lencode = (code const FAR *)(state->next);
+; 461 : state->lenbits = 9;
+
+ 006d8 c7 42 54 09 00
+ 00 00 mov DWORD PTR [edx+84], 9
+ 006df 8d 5a 6c lea ebx, DWORD PTR [edx+108]
+ 006e2 89 42 4c mov DWORD PTR [edx+76], eax
+
+; 462 : ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
+
+ 006e5 8d 8a f0 02 00
+ 00 lea ecx, DWORD PTR [edx+752]
+ 006eb 89 03 mov DWORD PTR [ebx], eax
+ 006ed 51 push ecx
+ 006ee 8d 42 54 lea eax, DWORD PTR [edx+84]
+ 006f1 b9 01 00 00 00 mov ecx, 1
+ 006f6 50 push eax
+ 006f7 53 push ebx
+ 006f8 ff 72 60 push DWORD PTR [edx+96]
+ 006fb 8b 55 d0 mov edx, DWORD PTR tv1719[ebp]
+ 006fe e8 00 00 00 00 call _inflate_table
+ 00703 83 c4 10 add esp, 16 ; 00000010H
+
+; 463 : &(state->lenbits), state->work);
+; 464 : if (ret) {
+
+ 00706 85 c0 test eax, eax
+ 00708 74 18 je SHORT $LN300@inflateBac
+
+; 465 : strm->msg = (char *)"invalid literal/lengths set";
+
+ 0070a 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+
+; 466 : state->mode = BAD;
+
+ 0070d 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+ 00710 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BM@IIMGAINC@invalid?5literal?1lengths?5set?$AA@
+ 00717 c7 02 1d 00 00
+ 00 mov DWORD PTR [edx], 29 ; 0000001dH
+
+; 467 : break;
+
+ 0071d e9 d7 05 00 00 jmp $LN505@inflateBac
+$LN300@inflateBac:
+
+; 468 : }
+; 469 : state->distcode = (code const FAR *)(state->next);
+
+ 00722 8b 4d f4 mov ecx, DWORD PTR _state$1$[ebp]
+ 00725 8b 03 mov eax, DWORD PTR [ebx]
+
+; 470 : state->distbits = 6;
+
+ 00727 c7 41 58 06 00
+ 00 00 mov DWORD PTR [ecx+88], 6
+
+; 471 : ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
+
+ 0072e 8d 91 f0 02 00
+ 00 lea edx, DWORD PTR [ecx+752]
+ 00734 89 41 50 mov DWORD PTR [ecx+80], eax
+ 00737 8d 41 58 lea eax, DWORD PTR [ecx+88]
+ 0073a 52 push edx
+ 0073b 50 push eax
+ 0073c 8b 41 60 mov eax, DWORD PTR [ecx+96]
+ 0073f 53 push ebx
+ 00740 ff 71 64 push DWORD PTR [ecx+100]
+ 00743 83 c1 70 add ecx, 112 ; 00000070H
+ 00746 8d 14 41 lea edx, DWORD PTR [ecx+eax*2]
+ 00749 b9 02 00 00 00 mov ecx, 2
+ 0074e e8 00 00 00 00 call _inflate_table
+
+; 475 : state->mode = BAD;
+
+ 00753 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+ 00756 83 c4 10 add esp, 16 ; 00000010H
+
+; 476 : break;
+
+ 00759 8b 4d fc mov ecx, DWORD PTR _hold$1$[ebp]
+ 0075c 85 c0 test eax, eax
+ 0075e 74 1b je SHORT $LN301@inflateBac
+
+; 472 : &(state->next), &(state->distbits), state->work);
+; 473 : if (ret) {
+; 474 : strm->msg = (char *)"invalid distances set";
+
+ 00760 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00763 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BG@GMDFCBGP@invalid?5distances?5set?$AA@
+
+; 475 : state->mode = BAD;
+
+ 0076a c7 02 1d 00 00
+ 00 mov DWORD PTR [edx], 29 ; 0000001dH
+
+; 476 : break;
+
+ 00770 8b 5d f8 mov ebx, DWORD PTR _next$[ebp]
+ 00773 89 5d f0 mov DWORD PTR _next$5$[ebp], ebx
+ 00776 e9 87 05 00 00 jmp $LN393@inflateBac
+$LN301@inflateBac:
+
+; 477 : }
+; 478 : Tracev((stderr, "inflate: codes ok\n"));
+; 479 : state->mode = LEN;
+
+ 0077b c7 02 14 00 00
+ 00 mov DWORD PTR [edx], 20 ; 00000014H
+ 00781 8b 5d f8 mov ebx, DWORD PTR _next$[ebp]
+ 00784 89 5d f0 mov DWORD PTR _next$5$[ebp], ebx
+$LN302@inflateBac:
+
+; 480 :
+; 481 : case LEN:
+; 482 : /* use inflate_fast() if we have enough input and output */
+; 483 : if (have >= 6 && left >= 258) {
+
+ 00787 83 fe 06 cmp esi, 6
+ 0078a 0f 82 8a 00 00
+ 00 jb $LN303@inflateBac
+ 00790 81 7d e8 02 01
+ 00 00 cmp DWORD PTR _left$1$[ebp], 258 ; 00000102H
+ 00797 0f 82 7d 00 00
+ 00 jb $LN303@inflateBac
+
+; 484 : RESTORE();
+
+ 0079d 8b 55 08 mov edx, DWORD PTR _strm$[ebp]
+ 007a0 8b 45 e4 mov eax, DWORD PTR _put$1$[ebp]
+ 007a3 89 42 0c mov DWORD PTR [edx+12], eax
+ 007a6 8b 45 e8 mov eax, DWORD PTR _left$1$[ebp]
+ 007a9 89 42 10 mov DWORD PTR [edx+16], eax
+ 007ac 8b c2 mov eax, edx
+ 007ae 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+ 007b1 89 18 mov DWORD PTR [eax], ebx
+ 007b3 8b d8 mov ebx, eax
+ 007b5 89 73 04 mov DWORD PTR [ebx+4], esi
+ 007b8 89 4a 38 mov DWORD PTR [edx+56], ecx
+
+; 485 : if (state->whave < state->wsize)
+
+ 007bb 8b 4a 28 mov ecx, DWORD PTR [edx+40]
+ 007be 89 7a 3c mov DWORD PTR [edx+60], edi
+ 007c1 39 4a 2c cmp DWORD PTR [edx+44], ecx
+ 007c4 73 08 jae SHORT $LN304@inflateBac
+
+; 486 : state->whave = state->wsize - left;
+
+ 007c6 8b c1 mov eax, ecx
+ 007c8 2b 45 e8 sub eax, DWORD PTR _left$1$[ebp]
+ 007cb 89 42 2c mov DWORD PTR [edx+44], eax
+$LN304@inflateBac:
+
+; 487 : inflate_fast(strm, state->wsize);
+
+ 007ce 8b d1 mov edx, ecx
+ 007d0 8b cb mov ecx, ebx
+ 007d2 e8 00 00 00 00 call _inflate_fast
+
+; 488 : LOAD();
+
+ 007d7 8b 43 0c mov eax, DWORD PTR [ebx+12]
+ 007da 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+ 007dd 89 45 e4 mov DWORD PTR _put$1$[ebp], eax
+ 007e0 8b 43 10 mov eax, DWORD PTR [ebx+16]
+ 007e3 8b 1b mov ebx, DWORD PTR [ebx]
+ 007e5 89 45 e8 mov DWORD PTR _left$1$[ebp], eax
+ 007e8 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 007eb 89 5d f8 mov DWORD PTR _next$[ebp], ebx
+ 007ee 8b 4a 38 mov ecx, DWORD PTR [edx+56]
+ 007f1 8b 7a 3c mov edi, DWORD PTR [edx+60]
+ 007f4 8b 70 04 mov esi, DWORD PTR [eax+4]
+ 007f7 89 5d f0 mov DWORD PTR _next$5$[ebp], ebx
+ 007fa 89 4d fc mov DWORD PTR _hold$1$[ebp], ecx
+ 007fd 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+
+; 489 : break;
+
+ 00800 e9 fd 04 00 00 jmp $LN393@inflateBac
+$LN277@inflateBac:
+
+; 369 : strm->msg = (char *)"too many length or distance symbols";
+
+ 00805 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00808 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0CE@GMIGFPBB@too?5many?5length?5or?5distance?5symb@
+
+; 370 : state->mode = BAD;
+
+ 0080f c7 02 1d 00 00
+ 00 mov DWORD PTR [edx], 29 ; 0000001dH
+
+; 371 : break;
+
+ 00815 e9 df 04 00 00 jmp $LN505@inflateBac
+$LN303@inflateBac:
+
+; 490 : }
+; 491 :
+; 492 : /* get a literal, length, or end-of-block code */
+; 493 : for (;;) {
+; 494 : here = state->lencode[BITS(state->lenbits)];
+
+ 0081a 8b 45 f4 mov eax, DWORD PTR _state$1$[ebp]
+ 0081d ba 01 00 00 00 mov edx, 1
+ 00822 8b 48 54 mov ecx, DWORD PTR [eax+84]
+ 00825 8b 40 4c mov eax, DWORD PTR [eax+76]
+ 00828 d3 e2 shl edx, cl
+ 0082a 4a dec edx
+ 0082b 23 55 fc and edx, DWORD PTR _hold$1$[ebp]
+ 0082e 8b 04 90 mov eax, DWORD PTR [eax+edx*4]
+
+; 495 : if ((unsigned)(here.bits) <= bits) break;
+
+ 00831 8b c8 mov ecx, eax
+ 00833 c1 e9 08 shr ecx, 8
+ 00836 0f b6 c9 movzx ecx, cl
+ 00839 3b cf cmp ecx, edi
+ 0083b 76 5c jbe SHORT $LN382@inflateBac
+ 0083d 0f 1f 00 npad 3
+$LL165@inflateBac:
+
+; 496 : PULLBYTE();
+
+ 00840 85 f6 test esi, esi
+ 00842 75 1a jne SHORT $LN171@inflateBac
+ 00844 8d 45 f8 lea eax, DWORD PTR _next$[ebp]
+ 00847 50 push eax
+ 00848 ff 75 10 push DWORD PTR _in_desc$[ebp]
+ 0084b ff 55 0c call DWORD PTR _in$[ebp]
+ 0084e 8b f0 mov esi, eax
+ 00850 83 c4 08 add esp, 8
+ 00853 85 f6 test esi, esi
+ 00855 0f 84 d0 04 00
+ 00 je $LN369@inflateBac
+ 0085b 8b 5d f8 mov ebx, DWORD PTR _next$[ebp]
+$LN171@inflateBac:
+ 0085e 0f b6 03 movzx eax, BYTE PTR [ebx]
+ 00861 8b cf mov ecx, edi
+ 00863 d3 e0 shl eax, cl
+ 00865 43 inc ebx
+ 00866 01 45 fc add DWORD PTR _hold$1$[ebp], eax
+ 00869 ba 01 00 00 00 mov edx, 1
+ 0086e 8b 45 f4 mov eax, DWORD PTR _state$1$[ebp]
+ 00871 83 c7 08 add edi, 8
+ 00874 89 5d f8 mov DWORD PTR _next$[ebp], ebx
+ 00877 4e dec esi
+ 00878 89 5d f0 mov DWORD PTR _next$5$[ebp], ebx
+ 0087b 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+ 0087e 8b 48 54 mov ecx, DWORD PTR [eax+84]
+ 00881 8b 40 4c mov eax, DWORD PTR [eax+76]
+ 00884 d3 e2 shl edx, cl
+ 00886 4a dec edx
+ 00887 23 55 fc and edx, DWORD PTR _hold$1$[ebp]
+ 0088a 8b 04 90 mov eax, DWORD PTR [eax+edx*4]
+ 0088d 8b c8 mov ecx, eax
+ 0088f c1 e9 08 shr ecx, 8
+ 00892 0f b6 c9 movzx ecx, cl
+ 00895 3b cf cmp ecx, edi
+ 00897 77 a7 ja SHORT $LL165@inflateBac
+$LN382@inflateBac:
+
+; 497 : }
+; 498 : if (here.op && (here.op & 0xf0) == 0) {
+
+ 00899 84 c0 test al, al
+ 0089b 0f 84 d7 00 00
+ 00 je $LN490@inflateBac
+ 008a1 a8 f0 test al, 240 ; 000000f0H
+ 008a3 0f 85 cf 00 00
+ 00 jne $LN490@inflateBac
+
+; 499 : last = here;
+; 500 : for (;;) {
+; 501 : here = state->lencode[last.val +
+
+ 008a9 8b c8 mov ecx, eax
+ 008ab bb 01 00 00 00 mov ebx, 1
+ 008b0 c1 e9 08 shr ecx, 8
+ 008b3 8b d0 mov edx, eax
+ 008b5 0f b6 f9 movzx edi, cl
+ 008b8 89 4d d0 mov DWORD PTR tv1718[ebp], ecx
+ 008bb 0f b6 c8 movzx ecx, al
+ 008be 03 cf add ecx, edi
+ 008c0 c1 e8 10 shr eax, 16 ; 00000010H
+ 008c3 d3 e3 shl ebx, cl
+ 008c5 8b cf mov ecx, edi
+ 008c7 4b dec ebx
+ 008c8 89 55 e0 mov DWORD PTR _last$[ebp], edx
+ 008cb 23 5d fc and ebx, DWORD PTR _hold$1$[ebp]
+ 008ce d3 eb shr ebx, cl
+ 008d0 03 d8 add ebx, eax
+ 008d2 8b 45 f4 mov eax, DWORD PTR _state$1$[ebp]
+ 008d5 8b 40 4c mov eax, DWORD PTR [eax+76]
+ 008d8 8b 04 98 mov eax, DWORD PTR [eax+ebx*4]
+
+; 502 : (BITS(last.bits + last.op) >> last.bits)];
+; 503 : if ((unsigned)(last.bits + here.bits) <= bits) break;
+
+ 008db 8b c8 mov ecx, eax
+ 008dd c1 e9 08 shr ecx, 8
+ 008e0 0f b6 f9 movzx edi, cl
+ 008e3 8b 4d d0 mov ecx, DWORD PTR tv1718[ebp]
+ 008e6 0f b6 c9 movzx ecx, cl
+ 008e9 03 f9 add edi, ecx
+ 008eb 3b 7d ec cmp edi, DWORD PTR _bits$1$[ebp]
+ 008ee 8b 7d ec mov edi, DWORD PTR _bits$1$[ebp]
+ 008f1 0f 86 75 00 00
+ 00 jbe $LN185@inflateBac
+$LL174@inflateBac:
+
+; 504 : PULLBYTE();
+
+ 008f7 85 f6 test esi, esi
+ 008f9 75 1f jne SHORT $LN486@inflateBac
+ 008fb 8d 45 f8 lea eax, DWORD PTR _next$[ebp]
+ 008fe 50 push eax
+ 008ff ff 75 10 push DWORD PTR _in_desc$[ebp]
+ 00902 ff 55 0c call DWORD PTR _in$[ebp]
+ 00905 8b f0 mov esi, eax
+ 00907 83 c4 08 add esp, 8
+ 0090a 85 f6 test esi, esi
+ 0090c 0f 84 19 04 00
+ 00 je $LN369@inflateBac
+ 00912 8b 5d f8 mov ebx, DWORD PTR _next$[ebp]
+ 00915 8b 55 e0 mov edx, DWORD PTR _last$[ebp]
+ 00918 eb 03 jmp SHORT $LN180@inflateBac
+$LN486@inflateBac:
+ 0091a 8b 5d f0 mov ebx, DWORD PTR _next$5$[ebp]
+$LN180@inflateBac:
+ 0091d 0f b6 03 movzx eax, BYTE PTR [ebx]
+ 00920 8b cf mov ecx, edi
+ 00922 d3 e0 shl eax, cl
+ 00924 83 c7 08 add edi, 8
+ 00927 01 45 fc add DWORD PTR _hold$1$[ebp], eax
+ 0092a 43 inc ebx
+ 0092b 0f b7 45 e2 movzx eax, WORD PTR _last$[ebp+2]
+ 0092f 4e dec esi
+ 00930 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+ 00933 bf 01 00 00 00 mov edi, 1
+ 00938 89 5d f8 mov DWORD PTR _next$[ebp], ebx
+ 0093b 89 5d f0 mov DWORD PTR _next$5$[ebp], ebx
+ 0093e 0f b6 de movzx ebx, dh
+ 00941 0f b6 ca movzx ecx, dl
+ 00944 03 cb add ecx, ebx
+ 00946 d3 e7 shl edi, cl
+ 00948 8b cb mov ecx, ebx
+ 0094a 4f dec edi
+ 0094b 23 7d fc and edi, DWORD PTR _hold$1$[ebp]
+ 0094e d3 ef shr edi, cl
+ 00950 03 f8 add edi, eax
+ 00952 8b 45 f4 mov eax, DWORD PTR _state$1$[ebp]
+ 00955 8b 40 4c mov eax, DWORD PTR [eax+76]
+ 00958 8b 04 b8 mov eax, DWORD PTR [eax+edi*4]
+ 0095b 8b c8 mov ecx, eax
+ 0095d 8b 7d ec mov edi, DWORD PTR _bits$1$[ebp]
+ 00960 c1 e9 08 shr ecx, 8
+ 00963 0f b6 c9 movzx ecx, cl
+ 00966 03 cb add ecx, ebx
+ 00968 3b cf cmp ecx, edi
+ 0096a 77 8b ja SHORT $LL174@inflateBac
+$LN185@inflateBac:
+
+; 505 : }
+; 506 : DROPBITS(last.bits);
+
+ 0096c 8b 5d fc mov ebx, DWORD PTR _hold$1$[ebp]
+ 0096f 0f b6 ce movzx ecx, dh
+ 00972 d3 eb shr ebx, cl
+ 00974 2b f9 sub edi, ecx
+ 00976 eb 03 jmp SHORT $LN184@inflateBac
+$LN490@inflateBac:
+ 00978 8b 5d fc mov ebx, DWORD PTR _hold$1$[ebp]
+$LN184@inflateBac:
+
+; 507 : }
+; 508 : DROPBITS(here.bits);
+; 509 : state->length = (unsigned)here.val;
+
+ 0097b 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+ 0097e 8b c8 mov ecx, eax
+ 00980 c1 e9 08 shr ecx, 8
+ 00983 0f b6 c9 movzx ecx, cl
+ 00986 d3 eb shr ebx, cl
+ 00988 2b f9 sub edi, ecx
+ 0098a 8b c8 mov ecx, eax
+ 0098c 89 5d fc mov DWORD PTR _hold$1$[ebp], ebx
+ 0098f c1 e9 10 shr ecx, 16 ; 00000010H
+ 00992 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+ 00995 89 4a 40 mov DWORD PTR [edx+64], ecx
+
+; 510 :
+; 511 : /* process literal */
+; 512 : if (here.op == 0) {
+
+ 00998 84 c0 test al, al
+ 0099a 75 44 jne SHORT $LN312@inflateBac
+
+; 513 : Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+; 514 : "inflate: literal '%c'\n" :
+; 515 : "inflate: literal 0x%02x\n", here.val));
+; 516 : ROOM();
+
+ 0099c 83 7d e8 00 cmp DWORD PTR _left$1$[ebp], 0
+ 009a0 75 24 jne SHORT $LN497@inflateBac
+ 009a2 8b 42 28 mov eax, DWORD PTR [edx+40]
+ 009a5 8b 5a 34 mov ebx, DWORD PTR [edx+52]
+ 009a8 50 push eax
+ 009a9 53 push ebx
+ 009aa ff 75 18 push DWORD PTR _out_desc$[ebp]
+ 009ad 89 45 e8 mov DWORD PTR _left$1$[ebp], eax
+ 009b0 89 42 2c mov DWORD PTR [edx+44], eax
+ 009b3 ff 55 14 call DWORD PTR _out$[ebp]
+ 009b6 83 c4 0c add esp, 12 ; 0000000cH
+ 009b9 85 c0 test eax, eax
+ 009bb 0f 85 84 03 00
+ 00 jne $LN372@inflateBac
+ 009c1 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+ 009c4 eb 03 jmp SHORT $LN189@inflateBac
+$LN497@inflateBac:
+ 009c6 8b 5d e4 mov ebx, DWORD PTR _put$1$[ebp]
+$LN189@inflateBac:
+
+; 517 : *put++ = (unsigned char)(state->length);
+
+ 009c9 8a 42 40 mov al, BYTE PTR [edx+64]
+ 009cc 88 03 mov BYTE PTR [ebx], al
+ 009ce 43 inc ebx
+
+; 518 : left--;
+
+ 009cf ff 4d e8 dec DWORD PTR _left$1$[ebp]
+ 009d2 89 5d e4 mov DWORD PTR _put$1$[ebp], ebx
+
+; 519 : state->mode = LEN;
+
+ 009d5 c7 02 14 00 00
+ 00 mov DWORD PTR [edx], 20 ; 00000014H
+
+; 520 : break;
+
+ 009db e9 19 03 00 00 jmp $LN505@inflateBac
+$LN312@inflateBac:
+
+; 521 : }
+; 522 :
+; 523 : /* process end of block */
+; 524 : if (here.op & 32) {
+
+ 009e0 a8 20 test al, 32 ; 00000020H
+ 009e2 74 0b je SHORT $LN315@inflateBac
+
+; 525 : Tracevv((stderr, "inflate: end of block\n"));
+; 526 : state->mode = TYPE;
+
+ 009e4 c7 02 0b 00 00
+ 00 mov DWORD PTR [edx], 11 ; 0000000bH
+
+; 527 : break;
+
+ 009ea e9 0a 03 00 00 jmp $LN505@inflateBac
+$LN315@inflateBac:
+
+; 528 : }
+; 529 :
+; 530 : /* invalid code */
+; 531 : if (here.op & 64) {
+
+ 009ef a8 40 test al, 64 ; 00000040H
+ 009f1 74 15 je SHORT $LN316@inflateBac
+
+; 532 : strm->msg = (char *)"invalid literal/length code";
+
+ 009f3 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 009f6 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BM@FFFLPBBC@invalid?5literal?1length?5code?$AA@
+
+; 533 : state->mode = BAD;
+
+ 009fd c7 02 1d 00 00
+ 00 mov DWORD PTR [edx], 29 ; 0000001dH
+
+; 534 : break;
+
+ 00a03 e9 f1 02 00 00 jmp $LN505@inflateBac
+$LN316@inflateBac:
+
+; 535 : }
+; 536 :
+; 537 : /* length code -- get extra bits, if any */
+; 538 : state->extra = (unsigned)(here.op) & 15;
+
+ 00a08 0f b6 c0 movzx eax, al
+ 00a0b 83 e0 0f and eax, 15 ; 0000000fH
+ 00a0e 89 42 48 mov DWORD PTR [edx+72], eax
+
+; 539 : if (state->extra != 0) {
+
+ 00a11 74 61 je SHORT $LN204@inflateBac
+
+; 540 : NEEDBITS(state->extra);
+
+ 00a13 3b f8 cmp edi, eax
+ 00a15 73 43 jae SHORT $LN192@inflateBac
+ 00a17 8b 45 f8 mov eax, DWORD PTR _next$[ebp]
+ 00a1a 66 0f 1f 44 00
+ 00 npad 6
+$LL195@inflateBac:
+ 00a20 85 f6 test esi, esi
+ 00a22 75 1d jne SHORT $LN200@inflateBac
+ 00a24 8d 45 f8 lea eax, DWORD PTR _next$[ebp]
+ 00a27 50 push eax
+ 00a28 ff 75 10 push DWORD PTR _in_desc$[ebp]
+ 00a2b ff 55 0c call DWORD PTR _in$[ebp]
+ 00a2e 8b f0 mov esi, eax
+ 00a30 83 c4 08 add esp, 8
+ 00a33 85 f6 test esi, esi
+ 00a35 0f 84 f0 02 00
+ 00 je $LN369@inflateBac
+ 00a3b 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+ 00a3e 8b 45 f8 mov eax, DWORD PTR _next$[ebp]
+$LN200@inflateBac:
+ 00a41 0f b6 00 movzx eax, BYTE PTR [eax]
+ 00a44 8b cf mov ecx, edi
+ 00a46 d3 e0 shl eax, cl
+ 00a48 83 c7 08 add edi, 8
+ 00a4b 03 d8 add ebx, eax
+ 00a4d 4e dec esi
+ 00a4e 8b 45 f8 mov eax, DWORD PTR _next$[ebp]
+ 00a51 40 inc eax
+ 00a52 89 45 f8 mov DWORD PTR _next$[ebp], eax
+ 00a55 3b 7a 48 cmp edi, DWORD PTR [edx+72]
+ 00a58 72 c6 jb SHORT $LL195@inflateBac
+$LN192@inflateBac:
+
+; 541 : state->length += BITS(state->extra);
+
+ 00a5a 8b 4a 48 mov ecx, DWORD PTR [edx+72]
+ 00a5d b8 01 00 00 00 mov eax, 1
+ 00a62 d3 e0 shl eax, cl
+ 00a64 48 dec eax
+ 00a65 23 c3 and eax, ebx
+
+; 542 : DROPBITS(state->extra);
+
+ 00a67 d3 eb shr ebx, cl
+ 00a69 01 42 40 add DWORD PTR [edx+64], eax
+ 00a6c 2b f9 sub edi, ecx
+ 00a6e 89 5d fc mov DWORD PTR _hold$1$[ebp], ebx
+ 00a71 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+$LN204@inflateBac:
+
+; 543 : }
+; 544 : Tracevv((stderr, "inflate: length %u\n", state->length));
+; 545 :
+; 546 : /* get distance code */
+; 547 : for (;;) {
+; 548 : here = state->distcode[BITS(state->distbits)];
+
+ 00a74 8b 5d f4 mov ebx, DWORD PTR _state$1$[ebp]
+ 00a77 ba 01 00 00 00 mov edx, 1
+ 00a7c 8b 4b 58 mov ecx, DWORD PTR [ebx+88]
+ 00a7f 8b 43 50 mov eax, DWORD PTR [ebx+80]
+ 00a82 d3 e2 shl edx, cl
+ 00a84 4a dec edx
+ 00a85 23 55 fc and edx, DWORD PTR _hold$1$[ebp]
+ 00a88 8b 04 90 mov eax, DWORD PTR [eax+edx*4]
+
+; 549 : if ((unsigned)(here.bits) <= bits) break;
+
+ 00a8b 8b c8 mov ecx, eax
+ 00a8d c1 e9 08 shr ecx, 8
+ 00a90 0f b6 c9 movzx ecx, cl
+ 00a93 3b cf cmp ecx, edi
+ 00a95 76 53 jbe SHORT $LN479@inflateBac
+$LL206@inflateBac:
+
+; 550 : PULLBYTE();
+
+ 00a97 85 f6 test esi, esi
+ 00a99 75 17 jne SHORT $LN212@inflateBac
+ 00a9b 8d 45 f8 lea eax, DWORD PTR _next$[ebp]
+ 00a9e 50 push eax
+ 00a9f ff 75 10 push DWORD PTR _in_desc$[ebp]
+ 00aa2 ff 55 0c call DWORD PTR _in$[ebp]
+ 00aa5 8b f0 mov esi, eax
+ 00aa7 83 c4 08 add esp, 8
+ 00aaa 85 f6 test esi, esi
+ 00aac 0f 84 79 02 00
+ 00 je $LN369@inflateBac
+$LN212@inflateBac:
+ 00ab2 8b 55 f8 mov edx, DWORD PTR _next$[ebp]
+ 00ab5 8b cf mov ecx, edi
+ 00ab7 83 c7 08 add edi, 8
+ 00aba 4e dec esi
+ 00abb 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+ 00abe 0f b6 02 movzx eax, BYTE PTR [edx]
+ 00ac1 42 inc edx
+ 00ac2 d3 e0 shl eax, cl
+ 00ac4 01 45 fc add DWORD PTR _hold$1$[ebp], eax
+ 00ac7 89 55 f8 mov DWORD PTR _next$[ebp], edx
+ 00aca ba 01 00 00 00 mov edx, 1
+ 00acf 8b 4b 58 mov ecx, DWORD PTR [ebx+88]
+ 00ad2 8b 43 50 mov eax, DWORD PTR [ebx+80]
+ 00ad5 d3 e2 shl edx, cl
+ 00ad7 4a dec edx
+ 00ad8 23 55 fc and edx, DWORD PTR _hold$1$[ebp]
+ 00adb 8b 04 90 mov eax, DWORD PTR [eax+edx*4]
+ 00ade 8b c8 mov ecx, eax
+ 00ae0 c1 e9 08 shr ecx, 8
+ 00ae3 0f b6 c9 movzx ecx, cl
+ 00ae6 3b cf cmp ecx, edi
+ 00ae8 77 ad ja SHORT $LL206@inflateBac
+$LN479@inflateBac:
+
+; 551 : }
+; 552 : if ((here.op & 0xf0) == 0) {
+
+ 00aea a8 f0 test al, 240 ; 000000f0H
+ 00aec 0f 85 c7 00 00
+ 00 jne $LN491@inflateBac
+
+; 553 : last = here;
+; 554 : for (;;) {
+; 555 : here = state->distcode[last.val +
+
+ 00af2 8b c8 mov ecx, eax
+ 00af4 bb 01 00 00 00 mov ebx, 1
+ 00af9 c1 e9 08 shr ecx, 8
+ 00afc 8b d0 mov edx, eax
+ 00afe 0f b6 f9 movzx edi, cl
+ 00b01 89 4d d0 mov DWORD PTR tv1717[ebp], ecx
+ 00b04 0f b6 c8 movzx ecx, al
+ 00b07 03 cf add ecx, edi
+ 00b09 c1 e8 10 shr eax, 16 ; 00000010H
+ 00b0c d3 e3 shl ebx, cl
+ 00b0e 8b cf mov ecx, edi
+ 00b10 4b dec ebx
+ 00b11 89 55 e0 mov DWORD PTR _last$[ebp], edx
+ 00b14 23 5d fc and ebx, DWORD PTR _hold$1$[ebp]
+ 00b17 d3 eb shr ebx, cl
+ 00b19 03 d8 add ebx, eax
+ 00b1b 8b 45 f4 mov eax, DWORD PTR _state$1$[ebp]
+ 00b1e 8b 40 50 mov eax, DWORD PTR [eax+80]
+ 00b21 8b 04 98 mov eax, DWORD PTR [eax+ebx*4]
+
+; 556 : (BITS(last.bits + last.op) >> last.bits)];
+; 557 : if ((unsigned)(last.bits + here.bits) <= bits) break;
+
+ 00b24 8b c8 mov ecx, eax
+ 00b26 c1 e9 08 shr ecx, 8
+ 00b29 0f b6 f9 movzx edi, cl
+ 00b2c 8b 4d d0 mov ecx, DWORD PTR tv1717[ebp]
+ 00b2f 0f b6 c9 movzx ecx, cl
+ 00b32 03 f9 add edi, ecx
+ 00b34 3b 7d ec cmp edi, DWORD PTR _bits$1$[ebp]
+ 00b37 8b 7d ec mov edi, DWORD PTR _bits$1$[ebp]
+ 00b3a 76 71 jbe SHORT $LN226@inflateBac
+ 00b3c 0f 1f 40 00 npad 4
+$LL215@inflateBac:
+
+; 558 : PULLBYTE();
+
+ 00b40 85 f6 test esi, esi
+ 00b42 75 1a jne SHORT $LN221@inflateBac
+ 00b44 8d 45 f8 lea eax, DWORD PTR _next$[ebp]
+ 00b47 50 push eax
+ 00b48 ff 75 10 push DWORD PTR _in_desc$[ebp]
+ 00b4b ff 55 0c call DWORD PTR _in$[ebp]
+ 00b4e 8b f0 mov esi, eax
+ 00b50 83 c4 08 add esp, 8
+ 00b53 85 f6 test esi, esi
+ 00b55 0f 84 d0 01 00
+ 00 je $LN369@inflateBac
+ 00b5b 8b 55 e0 mov edx, DWORD PTR _last$[ebp]
+$LN221@inflateBac:
+ 00b5e 8b 5d f8 mov ebx, DWORD PTR _next$[ebp]
+ 00b61 8b cf mov ecx, edi
+ 00b63 83 c7 08 add edi, 8
+ 00b66 4e dec esi
+ 00b67 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+ 00b6a bf 01 00 00 00 mov edi, 1
+ 00b6f 0f b6 03 movzx eax, BYTE PTR [ebx]
+ 00b72 43 inc ebx
+ 00b73 d3 e0 shl eax, cl
+ 00b75 01 45 fc add DWORD PTR _hold$1$[ebp], eax
+ 00b78 0f b7 45 e2 movzx eax, WORD PTR _last$[ebp+2]
+ 00b7c 89 5d f8 mov DWORD PTR _next$[ebp], ebx
+ 00b7f 0f b6 de movzx ebx, dh
+ 00b82 0f b6 ca movzx ecx, dl
+ 00b85 03 cb add ecx, ebx
+ 00b87 d3 e7 shl edi, cl
+ 00b89 8b cb mov ecx, ebx
+ 00b8b 4f dec edi
+ 00b8c 23 7d fc and edi, DWORD PTR _hold$1$[ebp]
+ 00b8f d3 ef shr edi, cl
+ 00b91 03 f8 add edi, eax
+ 00b93 8b 45 f4 mov eax, DWORD PTR _state$1$[ebp]
+ 00b96 8b 40 50 mov eax, DWORD PTR [eax+80]
+ 00b99 8b 04 b8 mov eax, DWORD PTR [eax+edi*4]
+ 00b9c 8b c8 mov ecx, eax
+ 00b9e 8b 7d ec mov edi, DWORD PTR _bits$1$[ebp]
+ 00ba1 c1 e9 08 shr ecx, 8
+ 00ba4 0f b6 c9 movzx ecx, cl
+ 00ba7 03 cb add ecx, ebx
+ 00ba9 3b cf cmp ecx, edi
+ 00bab 77 93 ja SHORT $LL215@inflateBac
+$LN226@inflateBac:
+
+; 559 : }
+; 560 : DROPBITS(last.bits);
+
+ 00bad 8b 5d fc mov ebx, DWORD PTR _hold$1$[ebp]
+ 00bb0 0f b6 ce movzx ecx, dh
+ 00bb3 d3 eb shr ebx, cl
+ 00bb5 2b f9 sub edi, ecx
+ 00bb7 eb 03 jmp SHORT $LN225@inflateBac
+$LN491@inflateBac:
+ 00bb9 8b 5d fc mov ebx, DWORD PTR _hold$1$[ebp]
+$LN225@inflateBac:
+
+; 565 : state->mode = BAD;
+
+ 00bbc 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+ 00bbf 8b c8 mov ecx, eax
+ 00bc1 c1 e9 08 shr ecx, 8
+ 00bc4 0f b6 c9 movzx ecx, cl
+ 00bc7 d3 eb shr ebx, cl
+ 00bc9 2b f9 sub edi, ecx
+ 00bcb 89 5d fc mov DWORD PTR _hold$1$[ebp], ebx
+ 00bce 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+ 00bd1 a8 40 test al, 64 ; 00000040H
+ 00bd3 74 15 je SHORT $LN327@inflateBac
+
+; 561 : }
+; 562 : DROPBITS(here.bits);
+; 563 : if (here.op & 64) {
+; 564 : strm->msg = (char *)"invalid distance code";
+
+ 00bd5 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00bd8 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BG@LBKINIKP@invalid?5distance?5code?$AA@
+
+; 565 : state->mode = BAD;
+
+ 00bdf c7 02 1d 00 00
+ 00 mov DWORD PTR [edx], 29 ; 0000001dH
+
+; 566 : break;
+
+ 00be5 e9 0f 01 00 00 jmp $LN505@inflateBac
+$LN327@inflateBac:
+
+; 567 : }
+; 568 : state->offset = (unsigned)here.val;
+
+ 00bea 8b c8 mov ecx, eax
+
+; 569 :
+; 570 : /* get distance extra bits, if any */
+; 571 : state->extra = (unsigned)(here.op) & 15;
+
+ 00bec 0f b6 c0 movzx eax, al
+ 00bef c1 e9 10 shr ecx, 16 ; 00000010H
+ 00bf2 83 e0 0f and eax, 15 ; 0000000fH
+ 00bf5 89 4a 44 mov DWORD PTR [edx+68], ecx
+ 00bf8 89 42 48 mov DWORD PTR [edx+72], eax
+
+; 572 : if (state->extra != 0) {
+
+ 00bfb 74 5b je SHORT $LN242@inflateBac
+
+; 573 : NEEDBITS(state->extra);
+
+ 00bfd 3b f8 cmp edi, eax
+ 00bff 73 3d jae SHORT $LN230@inflateBac
+ 00c01 8b 45 f8 mov eax, DWORD PTR _next$[ebp]
+$LL233@inflateBac:
+ 00c04 85 f6 test esi, esi
+ 00c06 75 1d jne SHORT $LN238@inflateBac
+ 00c08 8d 45 f8 lea eax, DWORD PTR _next$[ebp]
+ 00c0b 50 push eax
+ 00c0c ff 75 10 push DWORD PTR _in_desc$[ebp]
+ 00c0f ff 55 0c call DWORD PTR _in$[ebp]
+ 00c12 8b f0 mov esi, eax
+ 00c14 83 c4 08 add esp, 8
+ 00c17 85 f6 test esi, esi
+ 00c19 0f 84 0c 01 00
+ 00 je $LN369@inflateBac
+ 00c1f 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+ 00c22 8b 45 f8 mov eax, DWORD PTR _next$[ebp]
+$LN238@inflateBac:
+ 00c25 0f b6 00 movzx eax, BYTE PTR [eax]
+ 00c28 8b cf mov ecx, edi
+ 00c2a d3 e0 shl eax, cl
+ 00c2c 83 c7 08 add edi, 8
+ 00c2f 03 d8 add ebx, eax
+ 00c31 4e dec esi
+ 00c32 8b 45 f8 mov eax, DWORD PTR _next$[ebp]
+ 00c35 40 inc eax
+ 00c36 89 45 f8 mov DWORD PTR _next$[ebp], eax
+ 00c39 3b 7a 48 cmp edi, DWORD PTR [edx+72]
+ 00c3c 72 c6 jb SHORT $LL233@inflateBac
+$LN230@inflateBac:
+
+; 574 : state->offset += BITS(state->extra);
+
+ 00c3e 8b 4a 48 mov ecx, DWORD PTR [edx+72]
+ 00c41 b8 01 00 00 00 mov eax, 1
+ 00c46 d3 e0 shl eax, cl
+ 00c48 48 dec eax
+ 00c49 23 c3 and eax, ebx
+
+; 575 : DROPBITS(state->extra);
+
+ 00c4b d3 eb shr ebx, cl
+ 00c4d 01 42 44 add DWORD PTR [edx+68], eax
+ 00c50 2b f9 sub edi, ecx
+ 00c52 89 5d fc mov DWORD PTR _hold$1$[ebp], ebx
+ 00c55 89 7d ec mov DWORD PTR _bits$1$[ebp], edi
+$LN242@inflateBac:
+
+; 576 : }
+; 577 : if (state->offset > state->wsize - (state->whave < state->wsize ?
+
+ 00c58 8b 4a 28 mov ecx, DWORD PTR [edx+40]
+ 00c5b 39 4a 2c cmp DWORD PTR [edx+44], ecx
+ 00c5e 8b 5d e8 mov ebx, DWORD PTR _left$1$[ebp]
+ 00c61 1b c0 sbb eax, eax
+ 00c63 23 c3 and eax, ebx
+ 00c65 2b c8 sub ecx, eax
+ 00c67 39 4a 44 cmp DWORD PTR [edx+68], ecx
+ 00c6a 76 15 jbe SHORT $LL246@inflateBac
+
+; 578 : left : 0)) {
+; 579 : strm->msg = (char *)"invalid distance too far back";
+
+ 00c6c 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00c6f c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BO@ECPMAOGG@invalid?5distance?5too?5far?5back?$AA@
+
+; 580 : state->mode = BAD;
+
+ 00c76 c7 02 1d 00 00
+ 00 mov DWORD PTR [edx], 29 ; 0000001dH
+
+; 581 : break;
+
+ 00c7c e9 78 00 00 00 jmp $LN505@inflateBac
+$LL246@inflateBac:
+
+; 582 : }
+; 583 : Tracevv((stderr, "inflate: distance %u\n", state->offset));
+; 584 :
+; 585 : /* copy match from window to output */
+; 586 : do {
+; 587 : ROOM();
+
+ 00c81 85 db test ebx, ebx
+ 00c83 75 27 jne SHORT $LN498@inflateBac
+ 00c85 8b 42 28 mov eax, DWORD PTR [edx+40]
+ 00c88 8b 5a 34 mov ebx, DWORD PTR [edx+52]
+ 00c8b 50 push eax
+ 00c8c 53 push ebx
+ 00c8d ff 75 18 push DWORD PTR _out_desc$[ebp]
+ 00c90 89 5d e4 mov DWORD PTR _put$1$[ebp], ebx
+ 00c93 89 45 e8 mov DWORD PTR _left$1$[ebp], eax
+ 00c96 89 42 2c mov DWORD PTR [edx+44], eax
+ 00c99 ff 55 14 call DWORD PTR _out$[ebp]
+ 00c9c 83 c4 0c add esp, 12 ; 0000000cH
+ 00c9f 85 c0 test eax, eax
+ 00ca1 0f 85 9e 00 00
+ 00 jne $LN372@inflateBac
+ 00ca7 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+ 00caa eb 03 jmp SHORT $LN247@inflateBac
+$LN498@inflateBac:
+ 00cac 8b 5d e4 mov ebx, DWORD PTR _put$1$[ebp]
+$LN247@inflateBac:
+
+; 588 : copy = state->wsize - state->offset;
+
+ 00caf 8b 42 28 mov eax, DWORD PTR [edx+40]
+ 00cb2 8b 4a 44 mov ecx, DWORD PTR [edx+68]
+ 00cb5 2b c1 sub eax, ecx
+
+; 589 : if (copy < left) {
+
+ 00cb7 3b 45 e8 cmp eax, DWORD PTR _left$1$[ebp]
+ 00cba 73 09 jae SHORT $LN334@inflateBac
+
+; 590 : from = put + copy;
+; 591 : copy = left - copy;
+
+ 00cbc 8b 4d e8 mov ecx, DWORD PTR _left$1$[ebp]
+ 00cbf 03 d8 add ebx, eax
+ 00cc1 2b c8 sub ecx, eax
+
+; 592 : }
+
+ 00cc3 eb 05 jmp SHORT $LN335@inflateBac
+$LN334@inflateBac:
+
+; 593 : else {
+; 594 : from = put - state->offset;
+
+ 00cc5 2b d9 sub ebx, ecx
+
+; 595 : copy = left;
+
+ 00cc7 8b 4d e8 mov ecx, DWORD PTR _left$1$[ebp]
+$LN335@inflateBac:
+
+; 596 : }
+; 597 : if (copy > state->length) copy = state->length;
+
+ 00cca 3b 4a 40 cmp ecx, DWORD PTR [edx+64]
+ 00ccd 0f 47 4a 40 cmova ecx, DWORD PTR [edx+64]
+
+; 598 : state->length -= copy;
+
+ 00cd1 29 4a 40 sub DWORD PTR [edx+64], ecx
+
+; 599 : left -= copy;
+
+ 00cd4 29 4d e8 sub DWORD PTR _left$1$[ebp], ecx
+
+; 602 : } while (--copy);
+
+ 00cd7 8b 55 e4 mov edx, DWORD PTR _put$1$[ebp]
+ 00cda 2b da sub ebx, edx
+ 00cdc 0f 1f 40 00 npad 4
+$LL252@inflateBac:
+
+; 600 : do {
+; 601 : *put++ = *from++;
+
+ 00ce0 8a 04 13 mov al, BYTE PTR [ebx+edx]
+ 00ce3 88 02 mov BYTE PTR [edx], al
+ 00ce5 42 inc edx
+
+; 602 : } while (--copy);
+
+ 00ce6 83 e9 01 sub ecx, 1
+ 00ce9 75 f5 jne SHORT $LL252@inflateBac
+
+; 603 : } while (state->length != 0);
+
+ 00ceb 8b 5d e8 mov ebx, DWORD PTR _left$1$[ebp]
+ 00cee 89 55 e4 mov DWORD PTR _put$1$[ebp], edx
+ 00cf1 8b 55 f4 mov edx, DWORD PTR _state$1$[ebp]
+ 00cf4 39 4a 40 cmp DWORD PTR [edx+64], ecx
+ 00cf7 75 88 jne SHORT $LL246@inflateBac
+$LN505@inflateBac:
+ 00cf9 8b 5d f8 mov ebx, DWORD PTR _next$[ebp]
+ 00cfc 89 5d f0 mov DWORD PTR _next$5$[ebp], ebx
+$LN492@inflateBac:
+ 00cff 8b 4d fc mov ecx, DWORD PTR _hold$1$[ebp]
+$LN393@inflateBac:
+
+; 288 :
+; 289 : /* Inflate until end of block marked as last */
+; 290 : for (;;)
+; 291 : switch (state->mode) {
+
+ 00d02 8b 02 mov eax, DWORD PTR [edx]
+ 00d04 83 e8 0b sub eax, 11 ; 0000000bH
+ 00d07 83 f8 12 cmp eax, 18 ; 00000012H
+ 00d0a 0f 86 70 f3 ff
+ ff jbe $LL2@inflateBac
+$LN341@inflateBac:
+
+; 618 :
+; 619 : default: /* can't happen, but makes compilers happy */
+; 620 : ret = Z_STREAM_ERROR;
+
+ 00d10 bf fe ff ff ff mov edi, -2 ; fffffffeH
+$LN485@inflateBac:
+ 00d15 8b 45 f0 mov eax, DWORD PTR _next$5$[ebp]
+$inf_leave$509:
+
+; 621 : goto inf_leave;
+; 622 : }
+; 623 :
+; 624 : /* Return unused input */
+; 625 : inf_leave:
+; 626 : strm->next_in = next;
+
+ 00d18 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp]
+ 00d1b 89 01 mov DWORD PTR [ecx], eax
+
+; 627 : strm->avail_in = have;
+; 628 : return ret;
+
+ 00d1d 8b c7 mov eax, edi
+ 00d1f 5f pop edi
+ 00d20 89 71 04 mov DWORD PTR [ecx+4], esi
+ 00d23 5e pop esi
+ 00d24 5b pop ebx
+
+; 629 : }
+
+ 00d25 8b e5 mov esp, ebp
+ 00d27 5d pop ebp
+ 00d28 c2 14 00 ret 20 ; 00000014H
+$LN369@inflateBac:
+
+; 621 : goto inf_leave;
+; 622 : }
+; 623 :
+; 624 : /* Return unused input */
+; 625 : inf_leave:
+; 626 : strm->next_in = next;
+
+ 00d2b 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp]
+ 00d2e 33 c0 xor eax, eax
+ 00d30 bf fb ff ff ff mov edi, -5 ; fffffffbH
+ 00d35 89 01 mov DWORD PTR [ecx], eax
+
+; 627 : strm->avail_in = have;
+; 628 : return ret;
+
+ 00d37 8b c7 mov eax, edi
+ 00d39 5f pop edi
+ 00d3a 89 71 04 mov DWORD PTR [ecx+4], esi
+ 00d3d 5e pop esi
+ 00d3e 5b pop ebx
+
+; 629 : }
+
+ 00d3f 8b e5 mov esp, ebp
+ 00d41 5d pop ebp
+ 00d42 c2 14 00 ret 20 ; 00000014H
+$LN372@inflateBac:
+
+; 621 : goto inf_leave;
+; 622 : }
+; 623 :
+; 624 : /* Return unused input */
+; 625 : inf_leave:
+; 626 : strm->next_in = next;
+
+ 00d45 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp]
+ 00d48 bf fb ff ff ff mov edi, -5 ; fffffffbH
+ 00d4d 8b 45 f8 mov eax, DWORD PTR _next$[ebp]
+ 00d50 89 01 mov DWORD PTR [ecx], eax
+
+; 627 : strm->avail_in = have;
+; 628 : return ret;
+
+ 00d52 8b c7 mov eax, edi
+ 00d54 5f pop edi
+ 00d55 89 71 04 mov DWORD PTR [ecx+4], esi
+ 00d58 5e pop esi
+ 00d59 5b pop ebx
+
+; 629 : }
+
+ 00d5a 8b e5 mov esp, ebp
+ 00d5c 5d pop ebp
+ 00d5d c2 14 00 ret 20 ; 00000014H
+$LN337@inflateBac:
+
+; 604 : break;
+; 605 :
+; 606 : case DONE:
+; 607 : /* inflate stream terminated properly -- write leftover output */
+; 608 : ret = Z_STREAM_END;
+; 609 : if (left < state->wsize) {
+
+ 00d60 8b 42 28 mov eax, DWORD PTR [edx+40]
+ 00d63 bf 01 00 00 00 mov edi, 1
+ 00d68 8b 4d e8 mov ecx, DWORD PTR _left$1$[ebp]
+ 00d6b 3b c8 cmp ecx, eax
+ 00d6d 73 a6 jae SHORT $LN485@inflateBac
+
+; 610 : if (out(out_desc, state->window, state->wsize - left))
+
+ 00d6f 2b c1 sub eax, ecx
+ 00d71 50 push eax
+ 00d72 ff 72 34 push DWORD PTR [edx+52]
+ 00d75 ff 75 18 push DWORD PTR _out_desc$[ebp]
+ 00d78 ff 55 14 call DWORD PTR _out$[ebp]
+ 00d7b 83 c4 0c add esp, 12 ; 0000000cH
+ 00d7e 85 c0 test eax, eax
+
+; 611 : ret = Z_BUF_ERROR;
+; 612 : }
+; 613 : goto inf_leave;
+
+ 00d80 8b 45 f8 mov eax, DWORD PTR _next$[ebp]
+ 00d83 74 93 je SHORT $inf_leave$509
+
+; 621 : goto inf_leave;
+; 622 : }
+; 623 :
+; 624 : /* Return unused input */
+; 625 : inf_leave:
+; 626 : strm->next_in = next;
+
+ 00d85 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp]
+ 00d88 bf fb ff ff ff mov edi, -5 ; fffffffbH
+ 00d8d 89 01 mov DWORD PTR [ecx], eax
+
+; 627 : strm->avail_in = have;
+; 628 : return ret;
+
+ 00d8f 8b c7 mov eax, edi
+ 00d91 5f pop edi
+ 00d92 89 71 04 mov DWORD PTR [ecx+4], esi
+ 00d95 5e pop esi
+ 00d96 5b pop ebx
+
+; 629 : }
+
+ 00d97 8b e5 mov esp, ebp
+ 00d99 5d pop ebp
+ 00d9a c2 14 00 ret 20 ; 00000014H
+$LN340@inflateBac:
+
+; 614 :
+; 615 : case BAD:
+; 616 : ret = Z_DATA_ERROR;
+
+ 00d9d bf fd ff ff ff mov edi, -3 ; fffffffdH
+
+; 617 : goto inf_leave;
+
+ 00da2 e9 6e ff ff ff jmp $LN485@inflateBac
+$LN254@inflateBac:
+
+; 274 : return Z_STREAM_ERROR;
+
+ 00da7 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+
+; 629 : }
+
+ 00dac 8b e5 mov esp, ebp
+ 00dae 5d pop ebp
+ 00daf c2 14 00 ret 20 ; 00000014H
+ 00db2 66 90 npad 2
+$LN507@inflateBac:
+ 00db4 00 00 00 00 DD $LN255@inflateBac
+ 00db8 00 00 00 00 DD $LN31@inflateBac
+ 00dbc 00 00 00 00 DD $LN56@inflateBac
+ 00dc0 00 00 00 00 DD $LN302@inflateBac
+ 00dc4 00 00 00 00 DD $LN337@inflateBac
+ 00dc8 00 00 00 00 DD $LN340@inflateBac
+ 00dcc 00 00 00 00 DD $LN341@inflateBac
+$LN473@inflateBac:
+ 00dd0 00 DB 0
+ 00dd1 06 DB 6
+ 00dd2 01 DB 1
+ 00dd3 06 DB 6
+ 00dd4 06 DB 6
+ 00dd5 02 DB 2
+ 00dd6 06 DB 6
+ 00dd7 06 DB 6
+ 00dd8 06 DB 6
+ 00dd9 03 DB 3
+ 00dda 06 DB 6
+ 00ddb 06 DB 6
+ 00ddc 06 DB 6
+ 00ddd 06 DB 6
+ 00dde 06 DB 6
+ 00ddf 06 DB 6
+ 00de0 06 DB 6
+ 00de1 04 DB 4
+ 00de2 05 DB 5
+ 00de3 90 npad 1
+$LN508@inflateBac:
+ 00de4 00 00 00 00 DD $LN259@inflateBac
+ 00de8 00 00 00 00 DD $LN260@inflateBac
+ 00dec 00 00 00 00 DD $LN261@inflateBac
+ 00df0 00 00 00 00 DD $LN262@inflateBac
+_inflateBack@20 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\infback.c
+; COMDAT _inflateBackEnd@4
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_inflateBackEnd@4 PROC ; COMDAT
+
+; 633 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 634 : if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+
+ 00004 8b 75 08 mov esi, DWORD PTR _strm$[ebp]
+ 00007 85 f6 test esi, esi
+ 00009 74 25 je SHORT $LN3@inflateBac
+ 0000b 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 0000e 85 c0 test eax, eax
+ 00010 74 1e je SHORT $LN3@inflateBac
+ 00012 8b 4e 24 mov ecx, DWORD PTR [esi+36]
+ 00015 85 c9 test ecx, ecx
+ 00017 74 17 je SHORT $LN3@inflateBac
+
+; 636 : ZFREE(strm, strm->state);
+
+ 00019 50 push eax
+ 0001a ff 76 28 push DWORD PTR [esi+40]
+ 0001d ff d1 call ecx
+ 0001f 83 c4 08 add esp, 8
+
+; 637 : strm->state = Z_NULL;
+
+ 00022 c7 46 1c 00 00
+ 00 00 mov DWORD PTR [esi+28], 0
+
+; 638 : Tracev((stderr, "inflate: end\n"));
+; 639 : return Z_OK;
+
+ 00029 33 c0 xor eax, eax
+ 0002b 5e pop esi
+
+; 640 : }
+
+ 0002c 5d pop ebp
+ 0002d c2 04 00 ret 4
+$LN3@inflateBac:
+
+; 635 : return Z_STREAM_ERROR;
+
+ 00030 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 00035 5e pop esi
+
+; 640 : }
+
+ 00036 5d pop ebp
+ 00037 c2 04 00 ret 4
+_inflateBackEnd@4 ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/infback.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/infback.obj
new file mode 100644
index 0000000000..49e4f30d13
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/infback.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inffast.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inffast.cod
new file mode 100644
index 0000000000..dbb0bf6f2a
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inffast.cod
@@ -0,0 +1,990 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\inffast.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+PUBLIC _inflate_fast
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inffast.c
+; COMDAT _inflate_fast
+_TEXT SEGMENT
+_whave$1$ = -68 ; size = 4
+_beg$1$ = -64 ; size = 4
+_end$1$ = -60 ; size = 4
+_last$1$ = -56 ; size = 4
+_window$1$ = -52 ; size = 4
+_wsize$1$ = -48 ; size = 4
+_dcode$1$ = -44 ; size = 4
+_lcode$1$ = -40 ; size = 4
+_bits$1$ = -36 ; size = 4
+_wnext$1$ = -32 ; size = 4
+_dmask$1$ = -28 ; size = 4
+_strm$1$ = -24 ; size = 4
+_lmask$1$ = -20 ; size = 4
+_state$1$ = -16 ; size = 4
+_dist$1$ = -12 ; size = 4
+_in$1$ = -8 ; size = 4
+_hold$1$ = -4 ; size = 4
+_inflate_fast PROC ; COMDAT
+; _strm$ = ecx
+; _start$ = edx
+
+; 70 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 44 sub esp, 68 ; 00000044H
+ 00006 53 push ebx
+ 00007 56 push esi
+ 00008 57 push edi
+ 00009 8b f9 mov edi, ecx
+ 0000b 89 7d e8 mov DWORD PTR _strm$1$[ebp], edi
+
+; 71 : struct inflate_state FAR *state;
+; 72 : z_const unsigned char FAR *in; /* local strm->next_in */
+; 73 : z_const unsigned char FAR *last; /* have enough input while in < last */
+; 74 : unsigned char FAR *out; /* local strm->next_out */
+; 75 : unsigned char FAR *beg; /* inflate()'s initial strm->next_out */
+; 76 : unsigned char FAR *end; /* while out < end, enough space available */
+; 77 : #ifdef INFLATE_STRICT
+; 78 : unsigned dmax; /* maximum distance from zlib header */
+; 79 : #endif
+; 80 : unsigned wsize; /* window size or zero if not using window */
+; 81 : unsigned whave; /* valid bytes in the window */
+; 82 : unsigned wnext; /* window write index */
+; 83 : unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */
+; 84 : unsigned long hold; /* local strm->hold */
+; 85 : unsigned bits; /* local strm->bits */
+; 86 : code const FAR *lcode; /* local strm->lencode */
+; 87 : code const FAR *dcode; /* local strm->distcode */
+; 88 : unsigned lmask; /* mask for first level of length codes */
+; 89 : unsigned dmask; /* mask for first level of distance codes */
+; 90 : code here; /* retrieved table entry */
+; 91 : unsigned op; /* code bits, operation, extra bits, or */
+; 92 : /* window position, window bytes to copy */
+; 93 : unsigned len; /* match length, unused bytes */
+; 94 : unsigned dist; /* match distance */
+; 95 : unsigned char FAR *from; /* where to copy match from */
+; 96 :
+; 97 : /* copy state to local variables */
+; 98 : state = (struct inflate_state FAR *)strm->state;
+
+ 0000e 8b 4f 1c mov ecx, DWORD PTR [edi+28]
+
+; 99 : in = strm->next_in - OFF;
+
+ 00011 8b 1f mov ebx, DWORD PTR [edi]
+
+; 100 : last = in + (strm->avail_in - 5);
+
+ 00013 8b 47 04 mov eax, DWORD PTR [edi+4]
+ 00016 4b dec ebx
+
+; 101 : out = strm->next_out - OFF;
+
+ 00017 8b 77 0c mov esi, DWORD PTR [edi+12]
+ 0001a 83 c0 fb add eax, -5 ; fffffffbH
+ 0001d 03 c3 add eax, ebx
+ 0001f 89 4d f0 mov DWORD PTR _state$1$[ebp], ecx
+ 00022 89 45 c8 mov DWORD PTR _last$1$[ebp], eax
+ 00025 4e dec esi
+
+; 102 : beg = out - (start - strm->avail_out);
+
+ 00026 8b 47 10 mov eax, DWORD PTR [edi+16]
+ 00029 8b f8 mov edi, eax
+
+; 103 : end = out + (strm->avail_out - 257);
+
+ 0002b 05 ff fe ff ff add eax, -257 ; fffffeffH
+ 00030 89 5d f8 mov DWORD PTR _in$1$[ebp], ebx
+ 00033 03 c6 add eax, esi
+ 00035 2b fa sub edi, edx
+
+; 104 : #ifdef INFLATE_STRICT
+; 105 : dmax = state->dmax;
+; 106 : #endif
+; 107 : wsize = state->wsize;
+; 108 : whave = state->whave;
+; 109 : wnext = state->wnext;
+; 110 : window = state->window;
+; 111 : hold = state->hold;
+
+ 00037 8b 51 38 mov edx, DWORD PTR [ecx+56]
+ 0003a 03 fe add edi, esi
+ 0003c 89 45 c4 mov DWORD PTR _end$1$[ebp], eax
+ 0003f 8b 41 28 mov eax, DWORD PTR [ecx+40]
+ 00042 89 45 d0 mov DWORD PTR _wsize$1$[ebp], eax
+ 00045 8b 41 2c mov eax, DWORD PTR [ecx+44]
+ 00048 89 45 bc mov DWORD PTR _whave$1$[ebp], eax
+ 0004b 8b 41 30 mov eax, DWORD PTR [ecx+48]
+ 0004e 89 45 e0 mov DWORD PTR _wnext$1$[ebp], eax
+ 00051 8b 41 34 mov eax, DWORD PTR [ecx+52]
+ 00054 89 45 cc mov DWORD PTR _window$1$[ebp], eax
+
+; 112 : bits = state->bits;
+; 113 : lcode = state->lencode;
+
+ 00057 8b 41 4c mov eax, DWORD PTR [ecx+76]
+ 0005a 89 45 d8 mov DWORD PTR _lcode$1$[ebp], eax
+
+; 114 : dcode = state->distcode;
+
+ 0005d 8b 41 50 mov eax, DWORD PTR [ecx+80]
+ 00060 89 45 d4 mov DWORD PTR _dcode$1$[ebp], eax
+
+; 115 : lmask = (1U << state->lenbits) - 1;
+
+ 00063 b8 01 00 00 00 mov eax, 1
+ 00068 89 45 ec mov DWORD PTR _lmask$1$[ebp], eax
+
+; 116 : dmask = (1U << state->distbits) - 1;
+
+ 0006b 89 45 e4 mov DWORD PTR _dmask$1$[ebp], eax
+ 0006e 8b 45 f0 mov eax, DWORD PTR _state$1$[ebp]
+ 00071 89 7d c0 mov DWORD PTR _beg$1$[ebp], edi
+ 00074 8b 79 3c mov edi, DWORD PTR [ecx+60]
+ 00077 8b 49 54 mov ecx, DWORD PTR [ecx+84]
+ 0007a d3 65 ec shl DWORD PTR _lmask$1$[ebp], cl
+ 0007d 8b 48 58 mov ecx, DWORD PTR [eax+88]
+ 00080 8b 45 e4 mov eax, DWORD PTR _dmask$1$[ebp]
+ 00083 ff 4d ec dec DWORD PTR _lmask$1$[ebp]
+ 00086 d3 e0 shl eax, cl
+ 00088 48 dec eax
+ 00089 89 45 e4 mov DWORD PTR _dmask$1$[ebp], eax
+ 0008c 0f 1f 40 00 npad 4
+$LL4@inflate_fa:
+
+; 117 :
+; 118 : /* decode literals and length/distances until end-of-block or not enough
+; 119 : input data or output space */
+; 120 : do {
+; 121 : if (bits < 15) {
+
+ 00090 83 ff 0f cmp edi, 15 ; 0000000fH
+ 00093 73 1d jae SHORT $LN22@inflate_fa
+
+; 122 : hold += (unsigned long)(PUP(in)) << bits;
+
+ 00095 0f b6 43 01 movzx eax, BYTE PTR [ebx+1]
+ 00099 8b cf mov ecx, edi
+ 0009b d3 e0 shl eax, cl
+
+; 123 : bits += 8;
+; 124 : hold += (unsigned long)(PUP(in)) << bits;
+
+ 0009d 83 c3 02 add ebx, 2
+ 000a0 03 d0 add edx, eax
+ 000a2 89 5d f8 mov DWORD PTR _in$1$[ebp], ebx
+ 000a5 8d 4f 08 lea ecx, DWORD PTR [edi+8]
+ 000a8 0f b6 03 movzx eax, BYTE PTR [ebx]
+ 000ab d3 e0 shl eax, cl
+ 000ad 03 d0 add edx, eax
+
+; 125 : bits += 8;
+
+ 000af 83 c7 10 add edi, 16 ; 00000010H
+$LN22@inflate_fa:
+
+; 126 : }
+; 127 : here = lcode[hold & lmask];
+
+ 000b2 8b 45 ec mov eax, DWORD PTR _lmask$1$[ebp]
+ 000b5 8b 4d d8 mov ecx, DWORD PTR _lcode$1$[ebp]
+ 000b8 23 c2 and eax, edx
+ 000ba 8b 1c 81 mov ebx, DWORD PTR [ecx+eax*4]
+
+; 128 : dolen:
+; 129 : op = (unsigned)(here.bits);
+
+ 000bd 8b c3 mov eax, ebx
+ 000bf c1 e8 08 shr eax, 8
+ 000c2 0f b6 c8 movzx ecx, al
+
+; 130 : hold >>= op;
+
+ 000c5 d3 ea shr edx, cl
+
+; 131 : bits -= op;
+
+ 000c7 2b f9 sub edi, ecx
+ 000c9 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+
+; 132 : op = (unsigned)(here.op);
+
+ 000cc 0f b6 d3 movzx edx, bl
+
+; 133 : if (op == 0) { /* literal */
+
+ 000cf 84 db test bl, bl
+ 000d1 74 3e je SHORT $LN72@inflate_fa
+$dolen$105:
+
+; 138 : }
+; 139 : else if (op & 16) { /* length base */
+
+ 000d3 f6 c2 10 test dl, 16 ; 00000010H
+ 000d6 75 44 jne SHORT $LN73@inflate_fa
+
+; 291 : }
+; 292 : }
+; 293 : else if ((op & 64) == 0) { /* 2nd level length code */
+
+ 000d8 f6 c2 40 test dl, 64 ; 00000040H
+ 000db 0f 85 b7 02 00
+ 00 jne $LN52@inflate_fa
+
+; 294 : here = lcode[here.val + (hold & ((1U << op) - 1))];
+
+ 000e1 8b ca mov ecx, edx
+ 000e3 c1 eb 10 shr ebx, 16 ; 00000010H
+ 000e6 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+ 000e9 b8 01 00 00 00 mov eax, 1
+ 000ee d3 e0 shl eax, cl
+ 000f0 8b 4d d8 mov ecx, DWORD PTR _lcode$1$[ebp]
+ 000f3 48 dec eax
+ 000f4 23 c2 and eax, edx
+ 000f6 03 c3 add eax, ebx
+ 000f8 8b 1c 81 mov ebx, DWORD PTR [ecx+eax*4]
+ 000fb 8b c3 mov eax, ebx
+ 000fd c1 e8 08 shr eax, 8
+ 00100 0f b6 c8 movzx ecx, al
+ 00103 d3 ea shr edx, cl
+ 00105 2b f9 sub edi, ecx
+ 00107 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 0010a 0f b6 d3 movzx edx, bl
+ 0010d 84 db test bl, bl
+ 0010f 75 c2 jne SHORT $dolen$105
+$LN72@inflate_fa:
+
+; 134 : Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+; 135 : "inflate: literal '%c'\n" :
+; 136 : "inflate: literal 0x%02x\n", here.val));
+; 137 : PUP(out) = (unsigned char)(here.val);
+
+ 00111 46 inc esi
+ 00112 c1 eb 10 shr ebx, 16 ; 00000010H
+ 00115 88 1e mov BYTE PTR [esi], bl
+ 00117 e9 21 02 00 00 jmp $LN2@inflate_fa
+$LN73@inflate_fa:
+
+; 140 : len = (unsigned)(here.val);
+
+ 0011c c1 eb 10 shr ebx, 16 ; 00000010H
+
+; 141 : op &= 15; /* number of extra bits */
+
+ 0011f 83 e2 0f and edx, 15 ; 0000000fH
+
+; 142 : if (op) {
+
+ 00122 74 2c je SHORT $LN27@inflate_fa
+
+; 143 : if (bits < op) {
+
+ 00124 3b fa cmp edi, edx
+ 00126 73 14 jae SHORT $LN28@inflate_fa
+
+; 144 : hold += (unsigned long)(PUP(in)) << bits;
+
+ 00128 8b 45 f8 mov eax, DWORD PTR _in$1$[ebp]
+ 0012b 8b cf mov ecx, edi
+ 0012d 40 inc eax
+ 0012e 89 45 f8 mov DWORD PTR _in$1$[ebp], eax
+ 00131 0f b6 00 movzx eax, BYTE PTR [eax]
+ 00134 d3 e0 shl eax, cl
+ 00136 01 45 fc add DWORD PTR _hold$1$[ebp], eax
+
+; 145 : bits += 8;
+
+ 00139 83 c7 08 add edi, 8
+$LN28@inflate_fa:
+
+; 146 : }
+; 147 : len += (unsigned)hold & ((1U << op) - 1);
+
+ 0013c 8b ca mov ecx, edx
+ 0013e b8 01 00 00 00 mov eax, 1
+ 00143 d3 e0 shl eax, cl
+ 00145 48 dec eax
+ 00146 23 45 fc and eax, DWORD PTR _hold$1$[ebp]
+
+; 148 : hold >>= op;
+
+ 00149 d3 6d fc shr DWORD PTR _hold$1$[ebp], cl
+ 0014c 03 d8 add ebx, eax
+
+; 149 : bits -= op;
+
+ 0014e 2b fa sub edi, edx
+$LN27@inflate_fa:
+
+; 150 : }
+; 151 : Tracevv((stderr, "inflate: length %u\n", len));
+; 152 : if (bits < 15) {
+; 153 : hold += (unsigned long)(PUP(in)) << bits;
+
+ 00150 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+ 00153 83 ff 0f cmp edi, 15 ; 0000000fH
+ 00156 73 24 jae SHORT $LN29@inflate_fa
+ 00158 8b 45 f8 mov eax, DWORD PTR _in$1$[ebp]
+ 0015b 8b cf mov ecx, edi
+ 0015d 40 inc eax
+ 0015e 89 45 f8 mov DWORD PTR _in$1$[ebp], eax
+ 00161 0f b6 00 movzx eax, BYTE PTR [eax]
+ 00164 d3 e0 shl eax, cl
+
+; 154 : bits += 8;
+; 155 : hold += (unsigned long)(PUP(in)) << bits;
+
+ 00166 8d 4f 08 lea ecx, DWORD PTR [edi+8]
+ 00169 03 d0 add edx, eax
+ 0016b 8b 45 f8 mov eax, DWORD PTR _in$1$[ebp]
+ 0016e 40 inc eax
+ 0016f 89 45 f8 mov DWORD PTR _in$1$[ebp], eax
+ 00172 0f b6 00 movzx eax, BYTE PTR [eax]
+ 00175 d3 e0 shl eax, cl
+ 00177 03 d0 add edx, eax
+
+; 156 : bits += 8;
+
+ 00179 83 c7 10 add edi, 16 ; 00000010H
+$LN29@inflate_fa:
+
+; 157 : }
+; 158 : here = dcode[hold & dmask];
+
+ 0017c 8b 45 e4 mov eax, DWORD PTR _dmask$1$[ebp]
+ 0017f 8b 4d d4 mov ecx, DWORD PTR _dcode$1$[ebp]
+ 00182 23 c2 and eax, edx
+ 00184 8b 04 81 mov eax, DWORD PTR [ecx+eax*4]
+ 00187 89 45 f4 mov DWORD PTR _dist$1$[ebp], eax
+
+; 159 : dodist:
+; 160 : op = (unsigned)(here.bits);
+
+ 0018a c1 e8 08 shr eax, 8
+ 0018d 0f b6 c8 movzx ecx, al
+
+; 161 : hold >>= op;
+; 162 : bits -= op;
+; 163 : op = (unsigned)(here.op);
+
+ 00190 8b 45 f4 mov eax, DWORD PTR _dist$1$[ebp]
+ 00193 2b f9 sub edi, ecx
+ 00195 d3 ea shr edx, cl
+ 00197 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 0019a 0f b6 d0 movzx edx, al
+
+; 164 : if (op & 16) { /* distance base */
+
+ 0019d f6 c2 10 test dl, 16 ; 00000010H
+ 001a0 75 44 jne SHORT $LN74@inflate_fa
+$dodist$106:
+
+; 280 : }
+; 281 : }
+; 282 : }
+; 283 : else if ((op & 64) == 0) { /* 2nd level distance code */
+
+ 001a2 f6 c2 40 test dl, 64 ; 00000040H
+ 001a5 0f 85 0f 02 00
+ 00 jne $LN50@inflate_fa
+
+; 284 : here = dcode[here.val + (hold & ((1U << op) - 1))];
+
+ 001ab 8b ca mov ecx, edx
+ 001ad b8 01 00 00 00 mov eax, 1
+ 001b2 8b 55 d4 mov edx, DWORD PTR _dcode$1$[ebp]
+ 001b5 d3 e0 shl eax, cl
+ 001b7 8b 4d f4 mov ecx, DWORD PTR _dist$1$[ebp]
+ 001ba 48 dec eax
+ 001bb 23 45 fc and eax, DWORD PTR _hold$1$[ebp]
+ 001be c1 e9 10 shr ecx, 16 ; 00000010H
+ 001c1 03 c1 add eax, ecx
+ 001c3 8b 0c 82 mov ecx, DWORD PTR [edx+eax*4]
+ 001c6 8b c1 mov eax, ecx
+ 001c8 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+ 001cb c1 e8 08 shr eax, 8
+ 001ce 89 4d f4 mov DWORD PTR _dist$1$[ebp], ecx
+ 001d1 0f b6 c8 movzx ecx, al
+ 001d4 8b 45 f4 mov eax, DWORD PTR _dist$1$[ebp]
+ 001d7 2b f9 sub edi, ecx
+ 001d9 d3 ea shr edx, cl
+ 001db 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 001de 0f b6 d0 movzx edx, al
+ 001e1 f6 c2 10 test dl, 16 ; 00000010H
+ 001e4 74 bc je SHORT $dodist$106
+$LN74@inflate_fa:
+
+; 165 : dist = (unsigned)(here.val);
+
+ 001e6 c1 e8 10 shr eax, 16 ; 00000010H
+
+; 166 : op &= 15; /* number of extra bits */
+
+ 001e9 83 e2 0f and edx, 15 ; 0000000fH
+ 001ec 89 45 f4 mov DWORD PTR _dist$1$[ebp], eax
+
+; 167 : if (bits < op) {
+
+ 001ef 3b fa cmp edi, edx
+ 001f1 73 2c jae SHORT $LN33@inflate_fa
+
+; 168 : hold += (unsigned long)(PUP(in)) << bits;
+
+ 001f3 8b 45 f8 mov eax, DWORD PTR _in$1$[ebp]
+ 001f6 8b cf mov ecx, edi
+ 001f8 40 inc eax
+
+; 169 : bits += 8;
+
+ 001f9 83 c7 08 add edi, 8
+ 001fc 89 45 f8 mov DWORD PTR _in$1$[ebp], eax
+ 001ff 0f b6 00 movzx eax, BYTE PTR [eax]
+ 00202 d3 e0 shl eax, cl
+ 00204 01 45 fc add DWORD PTR _hold$1$[ebp], eax
+
+; 170 : if (bits < op) {
+
+ 00207 3b fa cmp edi, edx
+ 00209 73 14 jae SHORT $LN33@inflate_fa
+
+; 171 : hold += (unsigned long)(PUP(in)) << bits;
+
+ 0020b 8b 45 f8 mov eax, DWORD PTR _in$1$[ebp]
+ 0020e 8b cf mov ecx, edi
+ 00210 40 inc eax
+ 00211 89 45 f8 mov DWORD PTR _in$1$[ebp], eax
+ 00214 0f b6 00 movzx eax, BYTE PTR [eax]
+ 00217 d3 e0 shl eax, cl
+ 00219 01 45 fc add DWORD PTR _hold$1$[ebp], eax
+
+; 172 : bits += 8;
+
+ 0021c 83 c7 08 add edi, 8
+$LN33@inflate_fa:
+
+; 173 : }
+; 174 : }
+; 175 : dist += (unsigned)hold & ((1U << op) - 1);
+
+ 0021f 8b ca mov ecx, edx
+ 00221 b8 01 00 00 00 mov eax, 1
+ 00226 d3 e0 shl eax, cl
+
+; 176 : #ifdef INFLATE_STRICT
+; 177 : if (dist > dmax) {
+; 178 : strm->msg = (char *)"invalid distance too far back";
+; 179 : state->mode = BAD;
+; 180 : break;
+; 181 : }
+; 182 : #endif
+; 183 : hold >>= op;
+; 184 : bits -= op;
+
+ 00228 2b fa sub edi, edx
+ 0022a 48 dec eax
+ 0022b 89 7d dc mov DWORD PTR _bits$1$[ebp], edi
+ 0022e 23 45 fc and eax, DWORD PTR _hold$1$[ebp]
+ 00231 01 45 f4 add DWORD PTR _dist$1$[ebp], eax
+
+; 185 : Tracevv((stderr, "inflate: distance %u\n", dist));
+; 186 : op = (unsigned)(out - beg); /* max distance in output */
+
+ 00234 8b c6 mov eax, esi
+ 00236 2b 45 c0 sub eax, DWORD PTR _beg$1$[ebp]
+ 00239 d3 6d fc shr DWORD PTR _hold$1$[ebp], cl
+
+; 187 : if (dist > op) { /* see if copy from window */
+
+ 0023c 8b 55 f4 mov edx, DWORD PTR _dist$1$[ebp]
+ 0023f 3b d0 cmp edx, eax
+ 00241 0f 86 13 01 00
+ 00 jbe $LN34@inflate_fa
+
+; 188 : op = dist - op; /* distance back in window */
+
+ 00247 8b ca mov ecx, edx
+ 00249 2b c8 sub ecx, eax
+
+; 189 : if (op > whave) {
+
+ 0024b 3b 4d bc cmp ecx, DWORD PTR _whave$1$[ebp]
+ 0024e 76 10 jbe SHORT $LN37@inflate_fa
+
+; 190 : if (state->sane) {
+
+ 00250 8b 45 f0 mov eax, DWORD PTR _state$1$[ebp]
+ 00253 83 b8 c0 1b 00
+ 00 00 cmp DWORD PTR [eax+7104], 0
+ 0025a 0f 85 69 01 00
+ 00 jne $LN75@inflate_fa
+$LN37@inflate_fa:
+
+; 194 : break;
+; 195 : }
+; 196 : #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+; 197 : if (len <= op - whave) {
+; 198 : do {
+; 199 : PUP(out) = 0;
+; 200 : } while (--len);
+; 201 : continue;
+; 202 : }
+; 203 : len -= op - whave;
+; 204 : do {
+; 205 : PUP(out) = 0;
+; 206 : } while (--op > whave);
+; 207 : if (op == 0) {
+; 208 : from = out - dist;
+; 209 : do {
+; 210 : PUP(out) = PUP(from);
+; 211 : } while (--len);
+; 212 : continue;
+; 213 : }
+; 214 : #endif
+; 215 : }
+; 216 : from = window - OFF;
+
+ 00260 8b 7d cc mov edi, DWORD PTR _window$1$[ebp]
+
+; 217 : if (wnext == 0) { /* very common case */
+
+ 00263 8b 45 e0 mov eax, DWORD PTR _wnext$1$[ebp]
+ 00266 4f dec edi
+ 00267 85 c0 test eax, eax
+ 00269 75 1d jne SHORT $LN38@inflate_fa
+
+; 218 : from += wsize - op;
+
+ 0026b 8b 45 d0 mov eax, DWORD PTR _wsize$1$[ebp]
+ 0026e 2b c1 sub eax, ecx
+ 00270 03 f8 add edi, eax
+
+; 219 : if (op < len) { /* some from window */
+
+ 00272 3b cb cmp ecx, ebx
+ 00274 73 7c jae SHORT $LN69@inflate_fa
+
+; 220 : len -= op;
+
+ 00276 2b d9 sub ebx, ecx
+$LL7@inflate_fa:
+
+; 221 : do {
+; 222 : PUP(out) = PUP(from);
+
+ 00278 8a 47 01 mov al, BYTE PTR [edi+1]
+ 0027b 8d 7f 01 lea edi, DWORD PTR [edi+1]
+ 0027e 46 inc esi
+ 0027f 88 06 mov BYTE PTR [esi], al
+
+; 223 : } while (--op);
+
+ 00281 83 e9 01 sub ecx, 1
+ 00284 75 f2 jne SHORT $LL7@inflate_fa
+
+; 224 : from = out - dist; /* rest from output */
+; 225 : }
+; 226 : }
+
+ 00286 eb 66 jmp SHORT $LN101@inflate_fa
+$LN38@inflate_fa:
+
+; 227 : else if (wnext < op) { /* wrap around window */
+
+ 00288 3b c1 cmp eax, ecx
+ 0028a 73 44 jae SHORT $LN41@inflate_fa
+
+; 228 : from += wsize + wnext - op;
+
+ 0028c 2b c1 sub eax, ecx
+
+; 229 : op -= wnext;
+
+ 0028e 2b 4d e0 sub ecx, DWORD PTR _wnext$1$[ebp]
+ 00291 03 45 d0 add eax, DWORD PTR _wsize$1$[ebp]
+ 00294 03 f8 add edi, eax
+
+; 230 : if (op < len) { /* some from end of window */
+
+ 00296 3b cb cmp ecx, ebx
+ 00298 73 58 jae SHORT $LN69@inflate_fa
+
+; 231 : len -= op;
+
+ 0029a 2b d9 sub ebx, ecx
+
+; 234 : } while (--op);
+
+ 0029c 2b fe sub edi, esi
+ 0029e 66 90 npad 2
+$LL10@inflate_fa:
+
+; 232 : do {
+; 233 : PUP(out) = PUP(from);
+
+ 002a0 8a 44 37 01 mov al, BYTE PTR [edi+esi+1]
+ 002a4 46 inc esi
+ 002a5 88 06 mov BYTE PTR [esi], al
+
+; 234 : } while (--op);
+
+ 002a7 83 e9 01 sub ecx, 1
+ 002aa 75 f4 jne SHORT $LL10@inflate_fa
+
+; 235 : from = window - OFF;
+
+ 002ac 8b 7d cc mov edi, DWORD PTR _window$1$[ebp]
+
+; 236 : if (wnext < len) { /* some from start of window */
+
+ 002af 8b 45 e0 mov eax, DWORD PTR _wnext$1$[ebp]
+ 002b2 4f dec edi
+ 002b3 3b c3 cmp eax, ebx
+ 002b5 73 3b jae SHORT $LN69@inflate_fa
+
+; 237 : op = wnext;
+
+ 002b7 8b c8 mov ecx, eax
+
+; 238 : len -= op;
+
+ 002b9 2b d8 sub ebx, eax
+ 002bb 0f 1f 44 00 00 npad 5
+$LL13@inflate_fa:
+
+; 239 : do {
+; 240 : PUP(out) = PUP(from);
+
+ 002c0 8a 47 01 mov al, BYTE PTR [edi+1]
+ 002c3 8d 7f 01 lea edi, DWORD PTR [edi+1]
+ 002c6 46 inc esi
+ 002c7 88 06 mov BYTE PTR [esi], al
+
+; 241 : } while (--op);
+
+ 002c9 83 e9 01 sub ecx, 1
+ 002cc 75 f2 jne SHORT $LL13@inflate_fa
+
+; 242 : from = out - dist; /* rest from output */
+; 243 : }
+; 244 : }
+; 245 : }
+
+ 002ce eb 1e jmp SHORT $LN101@inflate_fa
+$LN41@inflate_fa:
+
+; 246 : else { /* contiguous in window */
+; 247 : from += wnext - op;
+
+ 002d0 2b c1 sub eax, ecx
+ 002d2 03 f8 add edi, eax
+
+; 248 : if (op < len) { /* some from window */
+
+ 002d4 3b cb cmp ecx, ebx
+ 002d6 73 1a jae SHORT $LN69@inflate_fa
+
+; 249 : len -= op;
+
+ 002d8 2b d9 sub ebx, ecx
+ 002da 66 0f 1f 44 00
+ 00 npad 6
+$LL16@inflate_fa:
+
+; 250 : do {
+; 251 : PUP(out) = PUP(from);
+
+ 002e0 8a 47 01 mov al, BYTE PTR [edi+1]
+ 002e3 8d 7f 01 lea edi, DWORD PTR [edi+1]
+ 002e6 46 inc esi
+ 002e7 88 06 mov BYTE PTR [esi], al
+
+; 252 : } while (--op);
+
+ 002e9 83 e9 01 sub ecx, 1
+ 002ec 75 f2 jne SHORT $LL16@inflate_fa
+$LN101@inflate_fa:
+
+; 253 : from = out - dist; /* rest from output */
+
+ 002ee 8b fe mov edi, esi
+ 002f0 2b fa sub edi, edx
+$LN69@inflate_fa:
+
+; 254 : }
+; 255 : }
+; 256 : while (len > 2) {
+
+ 002f2 83 fb 02 cmp ebx, 2
+ 002f5 76 2e jbe SHORT $LN18@inflate_fa
+ 002f7 8d 4b fd lea ecx, DWORD PTR [ebx-3]
+ 002fa b8 ab aa aa aa mov eax, -1431655765 ; aaaaaaabH
+ 002ff f7 e1 mul ecx
+ 00301 d1 ea shr edx, 1
+ 00303 42 inc edx
+$LL17@inflate_fa:
+
+; 257 : PUP(out) = PUP(from);
+
+ 00304 0f b6 47 01 movzx eax, BYTE PTR [edi+1]
+
+; 258 : PUP(out) = PUP(from);
+; 259 : PUP(out) = PUP(from);
+; 260 : len -= 3;
+
+ 00308 83 eb 03 sub ebx, 3
+ 0030b 88 46 01 mov BYTE PTR [esi+1], al
+ 0030e 0f b6 47 02 movzx eax, BYTE PTR [edi+2]
+ 00312 83 c7 03 add edi, 3
+ 00315 88 46 02 mov BYTE PTR [esi+2], al
+ 00318 83 c6 03 add esi, 3
+ 0031b 0f b6 07 movzx eax, BYTE PTR [edi]
+ 0031e 88 06 mov BYTE PTR [esi], al
+ 00320 83 ea 01 sub edx, 1
+ 00323 75 df jne SHORT $LL17@inflate_fa
+$LN18@inflate_fa:
+
+; 261 : }
+; 262 : if (len) {
+
+ 00325 85 db test ebx, ebx
+ 00327 74 11 je SHORT $LN99@inflate_fa
+
+; 263 : PUP(out) = PUP(from);
+
+ 00329 8a 47 01 mov al, BYTE PTR [edi+1]
+ 0032c 46 inc esi
+ 0032d 88 06 mov BYTE PTR [esi], al
+
+; 264 : if (len > 1)
+
+ 0032f 83 fb 01 cmp ebx, 1
+ 00332 76 06 jbe SHORT $LN99@inflate_fa
+
+; 265 : PUP(out) = PUP(from);
+
+ 00334 8a 47 02 mov al, BYTE PTR [edi+2]
+ 00337 46 inc esi
+ 00338 88 06 mov BYTE PTR [esi], al
+$LN99@inflate_fa:
+ 0033a 8b 7d dc mov edi, DWORD PTR _bits$1$[ebp]
+$LN2@inflate_fa:
+
+; 305 : break;
+; 306 : }
+; 307 : } while (in < last && out < end);
+
+ 0033d 8b 5d f8 mov ebx, DWORD PTR _in$1$[ebp]
+ 00340 3b 5d c8 cmp ebx, DWORD PTR _last$1$[ebp]
+ 00343 0f 83 93 00 00
+ 00 jae $LN3@inflate_fa
+ 00349 3b 75 c4 cmp esi, DWORD PTR _end$1$[ebp]
+ 0034c 0f 83 8a 00 00
+ 00 jae $LN3@inflate_fa
+ 00352 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+ 00355 e9 36 fd ff ff jmp $LL4@inflate_fa
+$LN34@inflate_fa:
+
+; 266 : }
+; 267 : }
+; 268 : else {
+; 269 : from = out - dist; /* copy direct from output */
+
+ 0035a 8b ce mov ecx, esi
+ 0035c 2b ca sub ecx, edx
+ 0035e 66 90 npad 2
+$LL21@inflate_fa:
+
+; 270 : do { /* minimum length is three */
+; 271 : PUP(out) = PUP(from);
+
+ 00360 0f b6 41 01 movzx eax, BYTE PTR [ecx+1]
+
+; 272 : PUP(out) = PUP(from);
+; 273 : PUP(out) = PUP(from);
+
+ 00364 8d 49 03 lea ecx, DWORD PTR [ecx+3]
+ 00367 88 46 01 mov BYTE PTR [esi+1], al
+
+; 274 : len -= 3;
+
+ 0036a 83 eb 03 sub ebx, 3
+ 0036d 0f b6 41 ff movzx eax, BYTE PTR [ecx-1]
+ 00371 88 46 02 mov BYTE PTR [esi+2], al
+ 00374 83 c6 03 add esi, 3
+ 00377 0f b6 01 movzx eax, BYTE PTR [ecx]
+ 0037a 88 06 mov BYTE PTR [esi], al
+
+; 275 : } while (len > 2);
+
+ 0037c 83 fb 02 cmp ebx, 2
+ 0037f 77 df ja SHORT $LL21@inflate_fa
+
+; 276 : if (len) {
+
+ 00381 85 db test ebx, ebx
+ 00383 74 b8 je SHORT $LN2@inflate_fa
+
+; 277 : PUP(out) = PUP(from);
+
+ 00385 8a 41 01 mov al, BYTE PTR [ecx+1]
+ 00388 46 inc esi
+ 00389 88 06 mov BYTE PTR [esi], al
+
+; 278 : if (len > 1)
+
+ 0038b 83 fb 01 cmp ebx, 1
+ 0038e 76 ad jbe SHORT $LN2@inflate_fa
+
+; 279 : PUP(out) = PUP(from);
+
+ 00390 8a 41 02 mov al, BYTE PTR [ecx+2]
+ 00393 46 inc esi
+ 00394 88 06 mov BYTE PTR [esi], al
+ 00396 eb a5 jmp SHORT $LN2@inflate_fa
+$LN52@inflate_fa:
+
+; 300 : break;
+
+ 00398 8b 5d f8 mov ebx, DWORD PTR _in$1$[ebp]
+ 0039b f6 c2 20 test dl, 32 ; 00000020H
+ 0039e 74 0b je SHORT $LN54@inflate_fa
+
+; 295 : goto dolen;
+; 296 : }
+; 297 : else if (op & 32) { /* end-of-block */
+; 298 : Tracevv((stderr, "inflate: end of block\n"));
+; 299 : state->mode = TYPE;
+
+ 003a0 8b 45 f0 mov eax, DWORD PTR _state$1$[ebp]
+ 003a3 c7 00 0b 00 00
+ 00 mov DWORD PTR [eax], 11 ; 0000000bH
+
+; 300 : break;
+
+ 003a9 eb 31 jmp SHORT $LN3@inflate_fa
+$LN54@inflate_fa:
+
+; 301 : }
+; 302 : else {
+; 303 : strm->msg = (char *)"invalid literal/length code";
+
+ 003ab 8b 45 e8 mov eax, DWORD PTR _strm$1$[ebp]
+ 003ae c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BM@FFFLPBBC@invalid?5literal?1length?5code?$AA@
+
+; 304 : state->mode = BAD;
+
+ 003b5 8b 45 f0 mov eax, DWORD PTR _state$1$[ebp]
+ 003b8 eb 1c jmp SHORT $LN102@inflate_fa
+$LN50@inflate_fa:
+
+; 285 : goto dodist;
+; 286 : }
+; 287 : else {
+; 288 : strm->msg = (char *)"invalid distance code";
+
+ 003ba 8b 45 e8 mov eax, DWORD PTR _strm$1$[ebp]
+ 003bd c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BG@LBKINIKP@invalid?5distance?5code?$AA@
+
+; 289 : state->mode = BAD;
+
+ 003c4 8b 45 f0 mov eax, DWORD PTR _state$1$[ebp]
+
+; 290 : break;
+
+ 003c7 eb 0a jmp SHORT $LN103@inflate_fa
+$LN75@inflate_fa:
+
+; 191 : strm->msg =
+
+ 003c9 8b 4d e8 mov ecx, DWORD PTR _strm$1$[ebp]
+ 003cc c7 41 18 00 00
+ 00 00 mov DWORD PTR [ecx+24], OFFSET ??_C@_0BO@ECPMAOGG@invalid?5distance?5too?5far?5back?$AA@
+$LN103@inflate_fa:
+ 003d3 8b 5d f8 mov ebx, DWORD PTR _in$1$[ebp]
+$LN102@inflate_fa:
+
+; 192 : (char *)"invalid distance too far back";
+; 193 : state->mode = BAD;
+
+ 003d6 c7 00 1d 00 00
+ 00 mov DWORD PTR [eax], 29 ; 0000001dH
+$LN3@inflate_fa:
+
+; 308 :
+; 309 : /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
+; 310 : len = bits >> 3;
+; 311 : in -= len;
+; 312 : bits -= len << 3;
+; 313 : hold &= (1U << bits) - 1;
+; 314 :
+; 315 : /* update state and return */
+; 316 : strm->next_in = in + OFF;
+
+ 003dc 8b 55 e8 mov edx, DWORD PTR _strm$1$[ebp]
+ 003df 8b c7 mov eax, edi
+ 003e1 c1 e8 03 shr eax, 3
+ 003e4 2b d8 sub ebx, eax
+ 003e6 c1 e0 03 shl eax, 3
+ 003e9 2b f8 sub edi, eax
+ 003eb b8 01 00 00 00 mov eax, 1
+ 003f0 8b cf mov ecx, edi
+ 003f2 d3 e0 shl eax, cl
+ 003f4 8b 4d fc mov ecx, DWORD PTR _hold$1$[ebp]
+ 003f7 48 dec eax
+ 003f8 23 c8 and ecx, eax
+ 003fa 8d 43 01 lea eax, DWORD PTR [ebx+1]
+ 003fd 89 02 mov DWORD PTR [edx], eax
+
+; 317 : strm->next_out = out + OFF;
+
+ 003ff 8d 46 01 lea eax, DWORD PTR [esi+1]
+ 00402 89 42 0c mov DWORD PTR [edx+12], eax
+
+; 318 : strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
+
+ 00405 8b 45 c8 mov eax, DWORD PTR _last$1$[ebp]
+ 00408 2b c3 sub eax, ebx
+ 0040a 8b da mov ebx, edx
+
+; 319 : strm->avail_out = (unsigned)(out < end ?
+
+ 0040c 8b 55 c4 mov edx, DWORD PTR _end$1$[ebp]
+ 0040f 83 c0 05 add eax, 5
+ 00412 2b d6 sub edx, esi
+ 00414 81 c2 01 01 00
+ 00 add edx, 257 ; 00000101H
+ 0041a 89 43 04 mov DWORD PTR [ebx+4], eax
+
+; 320 : 257 + (end - out) : 257 - (out - end));
+; 321 : state->hold = hold;
+
+ 0041d 8b 45 f0 mov eax, DWORD PTR _state$1$[ebp]
+ 00420 89 53 10 mov DWORD PTR [ebx+16], edx
+
+; 322 : state->bits = bits;
+
+ 00423 89 78 3c mov DWORD PTR [eax+60], edi
+ 00426 5f pop edi
+ 00427 5e pop esi
+ 00428 89 48 38 mov DWORD PTR [eax+56], ecx
+ 0042b 5b pop ebx
+
+; 323 : return;
+; 324 : }
+
+ 0042c 8b e5 mov esp, ebp
+ 0042e 5d pop ebp
+ 0042f c3 ret 0
+_inflate_fast ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inffast.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inffast.obj
new file mode 100644
index 0000000000..40af0fbacd
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inffast.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inflate.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inflate.cod
new file mode 100644
index 0000000000..b1a91bd225
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inflate.cod
@@ -0,0 +1,7621 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+PUBLIC ??_C@_0BH@LIBMMIGA@incorrect?5header?5check?$AA@ ; `string'
+PUBLIC ??_C@_0BL@IHKGDAEE@unknown?5compression?5method?$AA@ ; `string'
+PUBLIC ??_C@_0BE@EMOGCLGO@invalid?5window?5size?$AA@ ; `string'
+PUBLIC ??_C@_0BJ@BLBBCOMO@unknown?5header?5flags?5set?$AA@ ; `string'
+PUBLIC ??_C@_0BE@GONKLEPM@header?5crc?5mismatch?$AA@ ; `string'
+PUBLIC ??_C@_0BF@MEIGEHBE@incorrect?5data?5check?$AA@ ; `string'
+PUBLIC ??_C@_0BH@FGKKJGOC@incorrect?5length?5check?$AA@ ; `string'
+; COMDAT ??_C@_0BH@FGKKJGOC@incorrect?5length?5check?$AA@
+CONST SEGMENT
+??_C@_0BH@FGKKJGOC@incorrect?5length?5check?$AA@ DB 'incorrect length che'
+ DB 'ck', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0BF@MEIGEHBE@incorrect?5data?5check?$AA@
+CONST SEGMENT
+??_C@_0BF@MEIGEHBE@incorrect?5data?5check?$AA@ DB 'incorrect data check', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0BE@GONKLEPM@header?5crc?5mismatch?$AA@
+CONST SEGMENT
+??_C@_0BE@GONKLEPM@header?5crc?5mismatch?$AA@ DB 'header crc mismatch', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0BJ@BLBBCOMO@unknown?5header?5flags?5set?$AA@
+CONST SEGMENT
+??_C@_0BJ@BLBBCOMO@unknown?5header?5flags?5set?$AA@ DB 'unknown header fl'
+ DB 'ags set', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0BE@EMOGCLGO@invalid?5window?5size?$AA@
+CONST SEGMENT
+??_C@_0BE@EMOGCLGO@invalid?5window?5size?$AA@ DB 'invalid window size', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0BL@IHKGDAEE@unknown?5compression?5method?$AA@
+CONST SEGMENT
+??_C@_0BL@IHKGDAEE@unknown?5compression?5method?$AA@ DB 'unknown compress'
+ DB 'ion method', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0BH@LIBMMIGA@incorrect?5header?5check?$AA@
+CONST SEGMENT
+??_C@_0BH@LIBMMIGA@incorrect?5header?5check?$AA@ DB 'incorrect header che'
+ DB 'ck', 00H ; `string'
+ ORG $+2
+?lenfix@?1??fixedtables@@9@9 DB 060H ; `fixedtables'::`2'::lenfix
+ DB 07H
+ DW 00H
+ DB 00H
+ DB 08H
+ DW 050H
+ DB 00H
+ DB 08H
+ DW 010H
+ DB 014H
+ DB 08H
+ DW 073H
+ DB 012H
+ DB 07H
+ DW 01fH
+ DB 00H
+ DB 08H
+ DW 070H
+ DB 00H
+ DB 08H
+ DW 030H
+ DB 00H
+ DB 09H
+ DW 0c0H
+ DB 010H
+ DB 07H
+ DW 0aH
+ DB 00H
+ DB 08H
+ DW 060H
+ DB 00H
+ DB 08H
+ DW 020H
+ DB 00H
+ DB 09H
+ DW 0a0H
+ DB 00H
+ DB 08H
+ DW 00H
+ DB 00H
+ DB 08H
+ DW 080H
+ DB 00H
+ DB 08H
+ DW 040H
+ DB 00H
+ DB 09H
+ DW 0e0H
+ DB 010H
+ DB 07H
+ DW 06H
+ DB 00H
+ DB 08H
+ DW 058H
+ DB 00H
+ DB 08H
+ DW 018H
+ DB 00H
+ DB 09H
+ DW 090H
+ DB 013H
+ DB 07H
+ DW 03bH
+ DB 00H
+ DB 08H
+ DW 078H
+ DB 00H
+ DB 08H
+ DW 038H
+ DB 00H
+ DB 09H
+ DW 0d0H
+ DB 011H
+ DB 07H
+ DW 011H
+ DB 00H
+ DB 08H
+ DW 068H
+ DB 00H
+ DB 08H
+ DW 028H
+ DB 00H
+ DB 09H
+ DW 0b0H
+ DB 00H
+ DB 08H
+ DW 08H
+ DB 00H
+ DB 08H
+ DW 088H
+ DB 00H
+ DB 08H
+ DW 048H
+ DB 00H
+ DB 09H
+ DW 0f0H
+ DB 010H
+ DB 07H
+ DW 04H
+ DB 00H
+ DB 08H
+ DW 054H
+ DB 00H
+ DB 08H
+ DW 014H
+ DB 015H
+ DB 08H
+ DW 0e3H
+ DB 013H
+ DB 07H
+ DW 02bH
+ DB 00H
+ DB 08H
+ DW 074H
+ DB 00H
+ DB 08H
+ DW 034H
+ DB 00H
+ DB 09H
+ DW 0c8H
+ DB 011H
+ DB 07H
+ DW 0dH
+ DB 00H
+ DB 08H
+ DW 064H
+ DB 00H
+ DB 08H
+ DW 024H
+ DB 00H
+ DB 09H
+ DW 0a8H
+ DB 00H
+ DB 08H
+ DW 04H
+ DB 00H
+ DB 08H
+ DW 084H
+ DB 00H
+ DB 08H
+ DW 044H
+ DB 00H
+ DB 09H
+ DW 0e8H
+ DB 010H
+ DB 07H
+ DW 08H
+ DB 00H
+ DB 08H
+ DW 05cH
+ DB 00H
+ DB 08H
+ DW 01cH
+ DB 00H
+ DB 09H
+ DW 098H
+ DB 014H
+ DB 07H
+ DW 053H
+ DB 00H
+ DB 08H
+ DW 07cH
+ DB 00H
+ DB 08H
+ DW 03cH
+ DB 00H
+ DB 09H
+ DW 0d8H
+ DB 012H
+ DB 07H
+ DW 017H
+ DB 00H
+ DB 08H
+ DW 06cH
+ DB 00H
+ DB 08H
+ DW 02cH
+ DB 00H
+ DB 09H
+ DW 0b8H
+ DB 00H
+ DB 08H
+ DW 0cH
+ DB 00H
+ DB 08H
+ DW 08cH
+ DB 00H
+ DB 08H
+ DW 04cH
+ DB 00H
+ DB 09H
+ DW 0f8H
+ DB 010H
+ DB 07H
+ DW 03H
+ DB 00H
+ DB 08H
+ DW 052H
+ DB 00H
+ DB 08H
+ DW 012H
+ DB 015H
+ DB 08H
+ DW 0a3H
+ DB 013H
+ DB 07H
+ DW 023H
+ DB 00H
+ DB 08H
+ DW 072H
+ DB 00H
+ DB 08H
+ DW 032H
+ DB 00H
+ DB 09H
+ DW 0c4H
+ DB 011H
+ DB 07H
+ DW 0bH
+ DB 00H
+ DB 08H
+ DW 062H
+ DB 00H
+ DB 08H
+ DW 022H
+ DB 00H
+ DB 09H
+ DW 0a4H
+ DB 00H
+ DB 08H
+ DW 02H
+ DB 00H
+ DB 08H
+ DW 082H
+ DB 00H
+ DB 08H
+ DW 042H
+ DB 00H
+ DB 09H
+ DW 0e4H
+ DB 010H
+ DB 07H
+ DW 07H
+ DB 00H
+ DB 08H
+ DW 05aH
+ DB 00H
+ DB 08H
+ DW 01aH
+ DB 00H
+ DB 09H
+ DW 094H
+ DB 014H
+ DB 07H
+ DW 043H
+ DB 00H
+ DB 08H
+ DW 07aH
+ DB 00H
+ DB 08H
+ DW 03aH
+ DB 00H
+ DB 09H
+ DW 0d4H
+ DB 012H
+ DB 07H
+ DW 013H
+ DB 00H
+ DB 08H
+ DW 06aH
+ DB 00H
+ DB 08H
+ DW 02aH
+ DB 00H
+ DB 09H
+ DW 0b4H
+ DB 00H
+ DB 08H
+ DW 0aH
+ DB 00H
+ DB 08H
+ DW 08aH
+ DB 00H
+ DB 08H
+ DW 04aH
+ DB 00H
+ DB 09H
+ DW 0f4H
+ DB 010H
+ DB 07H
+ DW 05H
+ DB 00H
+ DB 08H
+ DW 056H
+ DB 00H
+ DB 08H
+ DW 016H
+ DB 040H
+ DB 08H
+ DW 00H
+ DB 013H
+ DB 07H
+ DW 033H
+ DB 00H
+ DB 08H
+ DW 076H
+ DB 00H
+ DB 08H
+ DW 036H
+ DB 00H
+ DB 09H
+ DW 0ccH
+ DB 011H
+ DB 07H
+ DW 0fH
+ DB 00H
+ DB 08H
+ DW 066H
+ DB 00H
+ DB 08H
+ DW 026H
+ DB 00H
+ DB 09H
+ DW 0acH
+ DB 00H
+ DB 08H
+ DW 06H
+ DB 00H
+ DB 08H
+ DW 086H
+ DB 00H
+ DB 08H
+ DW 046H
+ DB 00H
+ DB 09H
+ DW 0ecH
+ DB 010H
+ DB 07H
+ DW 09H
+ DB 00H
+ DB 08H
+ DW 05eH
+ DB 00H
+ DB 08H
+ DW 01eH
+ DB 00H
+ DB 09H
+ DW 09cH
+ DB 014H
+ DB 07H
+ DW 063H
+ DB 00H
+ DB 08H
+ DW 07eH
+ DB 00H
+ DB 08H
+ DW 03eH
+ DB 00H
+ DB 09H
+ DW 0dcH
+ DB 012H
+ DB 07H
+ DW 01bH
+ DB 00H
+ DB 08H
+ DW 06eH
+ DB 00H
+ DB 08H
+ DW 02eH
+ DB 00H
+ DB 09H
+ DW 0bcH
+ DB 00H
+ DB 08H
+ DW 0eH
+ DB 00H
+ DB 08H
+ DW 08eH
+ DB 00H
+ DB 08H
+ DW 04eH
+ DB 00H
+ DB 09H
+ DW 0fcH
+ DB 060H
+ DB 07H
+ DW 00H
+ DB 00H
+ DB 08H
+ DW 051H
+ DB 00H
+ DB 08H
+ DW 011H
+ DB 015H
+ DB 08H
+ DW 083H
+ DB 012H
+ DB 07H
+ DW 01fH
+ DB 00H
+ DB 08H
+ DW 071H
+ DB 00H
+ DB 08H
+ DW 031H
+ DB 00H
+ DB 09H
+ DW 0c2H
+ DB 010H
+ DB 07H
+ DW 0aH
+ DB 00H
+ DB 08H
+ DW 061H
+ DB 00H
+ DB 08H
+ DW 021H
+ DB 00H
+ DB 09H
+ DW 0a2H
+ DB 00H
+ DB 08H
+ DW 01H
+ DB 00H
+ DB 08H
+ DW 081H
+ DB 00H
+ DB 08H
+ DW 041H
+ DB 00H
+ DB 09H
+ DW 0e2H
+ DB 010H
+ DB 07H
+ DW 06H
+ DB 00H
+ DB 08H
+ DW 059H
+ DB 00H
+ DB 08H
+ DW 019H
+ DB 00H
+ DB 09H
+ DW 092H
+ DB 013H
+ DB 07H
+ DW 03bH
+ DB 00H
+ DB 08H
+ DW 079H
+ DB 00H
+ DB 08H
+ DW 039H
+ DB 00H
+ DB 09H
+ DW 0d2H
+ DB 011H
+ DB 07H
+ DW 011H
+ DB 00H
+ DB 08H
+ DW 069H
+ DB 00H
+ DB 08H
+ DW 029H
+ DB 00H
+ DB 09H
+ DW 0b2H
+ DB 00H
+ DB 08H
+ DW 09H
+ DB 00H
+ DB 08H
+ DW 089H
+ DB 00H
+ DB 08H
+ DW 049H
+ DB 00H
+ DB 09H
+ DW 0f2H
+ DB 010H
+ DB 07H
+ DW 04H
+ DB 00H
+ DB 08H
+ DW 055H
+ DB 00H
+ DB 08H
+ DW 015H
+ DB 010H
+ DB 08H
+ DW 0102H
+ DB 013H
+ DB 07H
+ DW 02bH
+ DB 00H
+ DB 08H
+ DW 075H
+ DB 00H
+ DB 08H
+ DW 035H
+ DB 00H
+ DB 09H
+ DW 0caH
+ DB 011H
+ DB 07H
+ DW 0dH
+ DB 00H
+ DB 08H
+ DW 065H
+ DB 00H
+ DB 08H
+ DW 025H
+ DB 00H
+ DB 09H
+ DW 0aaH
+ DB 00H
+ DB 08H
+ DW 05H
+ DB 00H
+ DB 08H
+ DW 085H
+ DB 00H
+ DB 08H
+ DW 045H
+ DB 00H
+ DB 09H
+ DW 0eaH
+ DB 010H
+ DB 07H
+ DW 08H
+ DB 00H
+ DB 08H
+ DW 05dH
+ DB 00H
+ DB 08H
+ DW 01dH
+ DB 00H
+ DB 09H
+ DW 09aH
+ DB 014H
+ DB 07H
+ DW 053H
+ DB 00H
+ DB 08H
+ DW 07dH
+ DB 00H
+ DB 08H
+ DW 03dH
+ DB 00H
+ DB 09H
+ DW 0daH
+ DB 012H
+ DB 07H
+ DW 017H
+ DB 00H
+ DB 08H
+ DW 06dH
+ DB 00H
+ DB 08H
+ DW 02dH
+ DB 00H
+ DB 09H
+ DW 0baH
+ DB 00H
+ DB 08H
+ DW 0dH
+ DB 00H
+ DB 08H
+ DW 08dH
+ DB 00H
+ DB 08H
+ DW 04dH
+ DB 00H
+ DB 09H
+ DW 0faH
+ DB 010H
+ DB 07H
+ DW 03H
+ DB 00H
+ DB 08H
+ DW 053H
+ DB 00H
+ DB 08H
+ DW 013H
+ DB 015H
+ DB 08H
+ DW 0c3H
+ DB 013H
+ DB 07H
+ DW 023H
+ DB 00H
+ DB 08H
+ DW 073H
+ DB 00H
+ DB 08H
+ DW 033H
+ DB 00H
+ DB 09H
+ DW 0c6H
+ DB 011H
+ DB 07H
+ DW 0bH
+ DB 00H
+ DB 08H
+ DW 063H
+ DB 00H
+ DB 08H
+ DW 023H
+ DB 00H
+ DB 09H
+ DW 0a6H
+ DB 00H
+ DB 08H
+ DW 03H
+ DB 00H
+ DB 08H
+ DW 083H
+ DB 00H
+ DB 08H
+ DW 043H
+ DB 00H
+ DB 09H
+ DW 0e6H
+ DB 010H
+ DB 07H
+ DW 07H
+ DB 00H
+ DB 08H
+ DW 05bH
+ DB 00H
+ DB 08H
+ DW 01bH
+ DB 00H
+ DB 09H
+ DW 096H
+ DB 014H
+ DB 07H
+ DW 043H
+ DB 00H
+ DB 08H
+ DW 07bH
+ DB 00H
+ DB 08H
+ DW 03bH
+ DB 00H
+ DB 09H
+ DW 0d6H
+ DB 012H
+ DB 07H
+ DW 013H
+ DB 00H
+ DB 08H
+ DW 06bH
+ DB 00H
+ DB 08H
+ DW 02bH
+ DB 00H
+ DB 09H
+ DW 0b6H
+ DB 00H
+ DB 08H
+ DW 0bH
+ DB 00H
+ DB 08H
+ DW 08bH
+ DB 00H
+ DB 08H
+ DW 04bH
+ DB 00H
+ DB 09H
+ DW 0f6H
+ DB 010H
+ DB 07H
+ DW 05H
+ DB 00H
+ DB 08H
+ DW 057H
+ DB 00H
+ DB 08H
+ DW 017H
+ DB 040H
+ DB 08H
+ DW 00H
+ DB 013H
+ DB 07H
+ DW 033H
+ DB 00H
+ DB 08H
+ DW 077H
+ DB 00H
+ DB 08H
+ DW 037H
+ DB 00H
+ DB 09H
+ DW 0ceH
+ DB 011H
+ DB 07H
+ DW 0fH
+ DB 00H
+ DB 08H
+ DW 067H
+ DB 00H
+ DB 08H
+ DW 027H
+ DB 00H
+ DB 09H
+ DW 0aeH
+ DB 00H
+ DB 08H
+ DW 07H
+ DB 00H
+ DB 08H
+ DW 087H
+ DB 00H
+ DB 08H
+ DW 047H
+ DB 00H
+ DB 09H
+ DW 0eeH
+ DB 010H
+ DB 07H
+ DW 09H
+ DB 00H
+ DB 08H
+ DW 05fH
+ DB 00H
+ DB 08H
+ DW 01fH
+ DB 00H
+ DB 09H
+ DW 09eH
+ DB 014H
+ DB 07H
+ DW 063H
+ DB 00H
+ DB 08H
+ DW 07fH
+ DB 00H
+ DB 08H
+ DW 03fH
+ DB 00H
+ DB 09H
+ DW 0deH
+ DB 012H
+ DB 07H
+ DW 01bH
+ DB 00H
+ DB 08H
+ DW 06fH
+ DB 00H
+ DB 08H
+ DW 02fH
+ DB 00H
+ DB 09H
+ DW 0beH
+ DB 00H
+ DB 08H
+ DW 0fH
+ DB 00H
+ DB 08H
+ DW 08fH
+ DB 00H
+ DB 08H
+ DW 04fH
+ DB 00H
+ DB 09H
+ DW 0feH
+ DB 060H
+ DB 07H
+ DW 00H
+ DB 00H
+ DB 08H
+ DW 050H
+ DB 00H
+ DB 08H
+ DW 010H
+ DB 014H
+ DB 08H
+ DW 073H
+ DB 012H
+ DB 07H
+ DW 01fH
+ DB 00H
+ DB 08H
+ DW 070H
+ DB 00H
+ DB 08H
+ DW 030H
+ DB 00H
+ DB 09H
+ DW 0c1H
+ DB 010H
+ DB 07H
+ DW 0aH
+ DB 00H
+ DB 08H
+ DW 060H
+ DB 00H
+ DB 08H
+ DW 020H
+ DB 00H
+ DB 09H
+ DW 0a1H
+ DB 00H
+ DB 08H
+ DW 00H
+ DB 00H
+ DB 08H
+ DW 080H
+ DB 00H
+ DB 08H
+ DW 040H
+ DB 00H
+ DB 09H
+ DW 0e1H
+ DB 010H
+ DB 07H
+ DW 06H
+ DB 00H
+ DB 08H
+ DW 058H
+ DB 00H
+ DB 08H
+ DW 018H
+ DB 00H
+ DB 09H
+ DW 091H
+ DB 013H
+ DB 07H
+ DW 03bH
+ DB 00H
+ DB 08H
+ DW 078H
+ DB 00H
+ DB 08H
+ DW 038H
+ DB 00H
+ DB 09H
+ DW 0d1H
+ DB 011H
+ DB 07H
+ DW 011H
+ DB 00H
+ DB 08H
+ DW 068H
+ DB 00H
+ DB 08H
+ DW 028H
+ DB 00H
+ DB 09H
+ DW 0b1H
+ DB 00H
+ DB 08H
+ DW 08H
+ DB 00H
+ DB 08H
+ DW 088H
+ DB 00H
+ DB 08H
+ DW 048H
+ DB 00H
+ DB 09H
+ DW 0f1H
+ DB 010H
+ DB 07H
+ DW 04H
+ DB 00H
+ DB 08H
+ DW 054H
+ DB 00H
+ DB 08H
+ DW 014H
+ DB 015H
+ DB 08H
+ DW 0e3H
+ DB 013H
+ DB 07H
+ DW 02bH
+ DB 00H
+ DB 08H
+ DW 074H
+ DB 00H
+ DB 08H
+ DW 034H
+ DB 00H
+ DB 09H
+ DW 0c9H
+ DB 011H
+ DB 07H
+ DW 0dH
+ DB 00H
+ DB 08H
+ DW 064H
+ DB 00H
+ DB 08H
+ DW 024H
+ DB 00H
+ DB 09H
+ DW 0a9H
+ DB 00H
+ DB 08H
+ DW 04H
+ DB 00H
+ DB 08H
+ DW 084H
+ DB 00H
+ DB 08H
+ DW 044H
+ DB 00H
+ DB 09H
+ DW 0e9H
+ DB 010H
+ DB 07H
+ DW 08H
+ DB 00H
+ DB 08H
+ DW 05cH
+ DB 00H
+ DB 08H
+ DW 01cH
+ DB 00H
+ DB 09H
+ DW 099H
+ DB 014H
+ DB 07H
+ DW 053H
+ DB 00H
+ DB 08H
+ DW 07cH
+ DB 00H
+ DB 08H
+ DW 03cH
+ DB 00H
+ DB 09H
+ DW 0d9H
+ DB 012H
+ DB 07H
+ DW 017H
+ DB 00H
+ DB 08H
+ DW 06cH
+ DB 00H
+ DB 08H
+ DW 02cH
+ DB 00H
+ DB 09H
+ DW 0b9H
+ DB 00H
+ DB 08H
+ DW 0cH
+ DB 00H
+ DB 08H
+ DW 08cH
+ DB 00H
+ DB 08H
+ DW 04cH
+ DB 00H
+ DB 09H
+ DW 0f9H
+ DB 010H
+ DB 07H
+ DW 03H
+ DB 00H
+ DB 08H
+ DW 052H
+ DB 00H
+ DB 08H
+ DW 012H
+ DB 015H
+ DB 08H
+ DW 0a3H
+ DB 013H
+ DB 07H
+ DW 023H
+ DB 00H
+ DB 08H
+ DW 072H
+ DB 00H
+ DB 08H
+ DW 032H
+ DB 00H
+ DB 09H
+ DW 0c5H
+ DB 011H
+ DB 07H
+ DW 0bH
+ DB 00H
+ DB 08H
+ DW 062H
+ DB 00H
+ DB 08H
+ DW 022H
+ DB 00H
+ DB 09H
+ DW 0a5H
+ DB 00H
+ DB 08H
+ DW 02H
+ DB 00H
+ DB 08H
+ DW 082H
+ DB 00H
+ DB 08H
+ DW 042H
+ DB 00H
+ DB 09H
+ DW 0e5H
+ DB 010H
+ DB 07H
+ DW 07H
+ DB 00H
+ DB 08H
+ DW 05aH
+ DB 00H
+ DB 08H
+ DW 01aH
+ DB 00H
+ DB 09H
+ DW 095H
+ DB 014H
+ DB 07H
+ DW 043H
+ DB 00H
+ DB 08H
+ DW 07aH
+ DB 00H
+ DB 08H
+ DW 03aH
+ DB 00H
+ DB 09H
+ DW 0d5H
+ DB 012H
+ DB 07H
+ DW 013H
+ DB 00H
+ DB 08H
+ DW 06aH
+ DB 00H
+ DB 08H
+ DW 02aH
+ DB 00H
+ DB 09H
+ DW 0b5H
+ DB 00H
+ DB 08H
+ DW 0aH
+ DB 00H
+ DB 08H
+ DW 08aH
+ DB 00H
+ DB 08H
+ DW 04aH
+ DB 00H
+ DB 09H
+ DW 0f5H
+ DB 010H
+ DB 07H
+ DW 05H
+ DB 00H
+ DB 08H
+ DW 056H
+ DB 00H
+ DB 08H
+ DW 016H
+ DB 040H
+ DB 08H
+ DW 00H
+ DB 013H
+ DB 07H
+ DW 033H
+ DB 00H
+ DB 08H
+ DW 076H
+ DB 00H
+ DB 08H
+ DW 036H
+ DB 00H
+ DB 09H
+ DW 0cdH
+ DB 011H
+ DB 07H
+ DW 0fH
+ DB 00H
+ DB 08H
+ DW 066H
+ DB 00H
+ DB 08H
+ DW 026H
+ DB 00H
+ DB 09H
+ DW 0adH
+ DB 00H
+ DB 08H
+ DW 06H
+ DB 00H
+ DB 08H
+ DW 086H
+ DB 00H
+ DB 08H
+ DW 046H
+ DB 00H
+ DB 09H
+ DW 0edH
+ DB 010H
+ DB 07H
+ DW 09H
+ DB 00H
+ DB 08H
+ DW 05eH
+ DB 00H
+ DB 08H
+ DW 01eH
+ DB 00H
+ DB 09H
+ DW 09dH
+ DB 014H
+ DB 07H
+ DW 063H
+ DB 00H
+ DB 08H
+ DW 07eH
+ DB 00H
+ DB 08H
+ DW 03eH
+ DB 00H
+ DB 09H
+ DW 0ddH
+ DB 012H
+ DB 07H
+ DW 01bH
+ DB 00H
+ DB 08H
+ DW 06eH
+ DB 00H
+ DB 08H
+ DW 02eH
+ DB 00H
+ DB 09H
+ DW 0bdH
+ DB 00H
+ DB 08H
+ DW 0eH
+ DB 00H
+ DB 08H
+ DW 08eH
+ DB 00H
+ DB 08H
+ DW 04eH
+ DB 00H
+ DB 09H
+ DW 0fdH
+ DB 060H
+ DB 07H
+ DW 00H
+ DB 00H
+ DB 08H
+ DW 051H
+ DB 00H
+ DB 08H
+ DW 011H
+ DB 015H
+ DB 08H
+ DW 083H
+ DB 012H
+ DB 07H
+ DW 01fH
+ DB 00H
+ DB 08H
+ DW 071H
+ DB 00H
+ DB 08H
+ DW 031H
+ DB 00H
+ DB 09H
+ DW 0c3H
+ DB 010H
+ DB 07H
+ DW 0aH
+ DB 00H
+ DB 08H
+ DW 061H
+ DB 00H
+ DB 08H
+ DW 021H
+ DB 00H
+ DB 09H
+ DW 0a3H
+ DB 00H
+ DB 08H
+ DW 01H
+ DB 00H
+ DB 08H
+ DW 081H
+ DB 00H
+ DB 08H
+ DW 041H
+ DB 00H
+ DB 09H
+ DW 0e3H
+ DB 010H
+ DB 07H
+ DW 06H
+ DB 00H
+ DB 08H
+ DW 059H
+ DB 00H
+ DB 08H
+ DW 019H
+ DB 00H
+ DB 09H
+ DW 093H
+ DB 013H
+ DB 07H
+ DW 03bH
+ DB 00H
+ DB 08H
+ DW 079H
+ DB 00H
+ DB 08H
+ DW 039H
+ DB 00H
+ DB 09H
+ DW 0d3H
+ DB 011H
+ DB 07H
+ DW 011H
+ DB 00H
+ DB 08H
+ DW 069H
+ DB 00H
+ DB 08H
+ DW 029H
+ DB 00H
+ DB 09H
+ DW 0b3H
+ DB 00H
+ DB 08H
+ DW 09H
+ DB 00H
+ DB 08H
+ DW 089H
+ DB 00H
+ DB 08H
+ DW 049H
+ DB 00H
+ DB 09H
+ DW 0f3H
+ DB 010H
+ DB 07H
+ DW 04H
+ DB 00H
+ DB 08H
+ DW 055H
+ DB 00H
+ DB 08H
+ DW 015H
+ DB 010H
+ DB 08H
+ DW 0102H
+ DB 013H
+ DB 07H
+ DW 02bH
+ DB 00H
+ DB 08H
+ DW 075H
+ DB 00H
+ DB 08H
+ DW 035H
+ DB 00H
+ DB 09H
+ DW 0cbH
+ DB 011H
+ DB 07H
+ DW 0dH
+ DB 00H
+ DB 08H
+ DW 065H
+ DB 00H
+ DB 08H
+ DW 025H
+ DB 00H
+ DB 09H
+ DW 0abH
+ DB 00H
+ DB 08H
+ DW 05H
+ DB 00H
+ DB 08H
+ DW 085H
+ DB 00H
+ DB 08H
+ DW 045H
+ DB 00H
+ DB 09H
+ DW 0ebH
+ DB 010H
+ DB 07H
+ DW 08H
+ DB 00H
+ DB 08H
+ DW 05dH
+ DB 00H
+ DB 08H
+ DW 01dH
+ DB 00H
+ DB 09H
+ DW 09bH
+ DB 014H
+ DB 07H
+ DW 053H
+ DB 00H
+ DB 08H
+ DW 07dH
+ DB 00H
+ DB 08H
+ DW 03dH
+ DB 00H
+ DB 09H
+ DW 0dbH
+ DB 012H
+ DB 07H
+ DW 017H
+ DB 00H
+ DB 08H
+ DW 06dH
+ DB 00H
+ DB 08H
+ DW 02dH
+ DB 00H
+ DB 09H
+ DW 0bbH
+ DB 00H
+ DB 08H
+ DW 0dH
+ DB 00H
+ DB 08H
+ DW 08dH
+ DB 00H
+ DB 08H
+ DW 04dH
+ DB 00H
+ DB 09H
+ DW 0fbH
+ DB 010H
+ DB 07H
+ DW 03H
+ DB 00H
+ DB 08H
+ DW 053H
+ DB 00H
+ DB 08H
+ DW 013H
+ DB 015H
+ DB 08H
+ DW 0c3H
+ DB 013H
+ DB 07H
+ DW 023H
+ DB 00H
+ DB 08H
+ DW 073H
+ DB 00H
+ DB 08H
+ DW 033H
+ DB 00H
+ DB 09H
+ DW 0c7H
+ DB 011H
+ DB 07H
+ DW 0bH
+ DB 00H
+ DB 08H
+ DW 063H
+ DB 00H
+ DB 08H
+ DW 023H
+ DB 00H
+ DB 09H
+ DW 0a7H
+ DB 00H
+ DB 08H
+ DW 03H
+ DB 00H
+ DB 08H
+ DW 083H
+ DB 00H
+ DB 08H
+ DW 043H
+ DB 00H
+ DB 09H
+ DW 0e7H
+ DB 010H
+ DB 07H
+ DW 07H
+ DB 00H
+ DB 08H
+ DW 05bH
+ DB 00H
+ DB 08H
+ DW 01bH
+ DB 00H
+ DB 09H
+ DW 097H
+ DB 014H
+ DB 07H
+ DW 043H
+ DB 00H
+ DB 08H
+ DW 07bH
+ DB 00H
+ DB 08H
+ DW 03bH
+ DB 00H
+ DB 09H
+ DW 0d7H
+ DB 012H
+ DB 07H
+ DW 013H
+ DB 00H
+ DB 08H
+ DW 06bH
+ DB 00H
+ DB 08H
+ DW 02bH
+ DB 00H
+ DB 09H
+ DW 0b7H
+ DB 00H
+ DB 08H
+ DW 0bH
+ DB 00H
+ DB 08H
+ DW 08bH
+ DB 00H
+ DB 08H
+ DW 04bH
+ DB 00H
+ DB 09H
+ DW 0f7H
+ DB 010H
+ DB 07H
+ DW 05H
+ DB 00H
+ DB 08H
+ DW 057H
+ DB 00H
+ DB 08H
+ DW 017H
+ DB 040H
+ DB 08H
+ DW 00H
+ DB 013H
+ DB 07H
+ DW 033H
+ DB 00H
+ DB 08H
+ DW 077H
+ DB 00H
+ DB 08H
+ DW 037H
+ DB 00H
+ DB 09H
+ DW 0cfH
+ DB 011H
+ DB 07H
+ DW 0fH
+ DB 00H
+ DB 08H
+ DW 067H
+ DB 00H
+ DB 08H
+ DW 027H
+ DB 00H
+ DB 09H
+ DW 0afH
+ DB 00H
+ DB 08H
+ DW 07H
+ DB 00H
+ DB 08H
+ DW 087H
+ DB 00H
+ DB 08H
+ DW 047H
+ DB 00H
+ DB 09H
+ DW 0efH
+ DB 010H
+ DB 07H
+ DW 09H
+ DB 00H
+ DB 08H
+ DW 05fH
+ DB 00H
+ DB 08H
+ DW 01fH
+ DB 00H
+ DB 09H
+ DW 09fH
+ DB 014H
+ DB 07H
+ DW 063H
+ DB 00H
+ DB 08H
+ DW 07fH
+ DB 00H
+ DB 08H
+ DW 03fH
+ DB 00H
+ DB 09H
+ DW 0dfH
+ DB 012H
+ DB 07H
+ DW 01bH
+ DB 00H
+ DB 08H
+ DW 06fH
+ DB 00H
+ DB 08H
+ DW 02fH
+ DB 00H
+ DB 09H
+ DW 0bfH
+ DB 00H
+ DB 08H
+ DW 0fH
+ DB 00H
+ DB 08H
+ DW 08fH
+ DB 00H
+ DB 08H
+ DW 04fH
+ DB 00H
+ DB 09H
+ DW 0ffH
+?distfix@?1??fixedtables@@9@9 DB 010H ; `fixedtables'::`2'::distfix
+ DB 05H
+ DW 01H
+ DB 017H
+ DB 05H
+ DW 0101H
+ DB 013H
+ DB 05H
+ DW 011H
+ DB 01bH
+ DB 05H
+ DW 01001H
+ DB 011H
+ DB 05H
+ DW 05H
+ DB 019H
+ DB 05H
+ DW 0401H
+ DB 015H
+ DB 05H
+ DW 041H
+ DB 01dH
+ DB 05H
+ DW 04001H
+ DB 010H
+ DB 05H
+ DW 03H
+ DB 018H
+ DB 05H
+ DW 0201H
+ DB 014H
+ DB 05H
+ DW 021H
+ DB 01cH
+ DB 05H
+ DW 02001H
+ DB 012H
+ DB 05H
+ DW 09H
+ DB 01aH
+ DB 05H
+ DW 0801H
+ DB 016H
+ DB 05H
+ DW 081H
+ DB 040H
+ DB 05H
+ DW 00H
+ DB 010H
+ DB 05H
+ DW 02H
+ DB 017H
+ DB 05H
+ DW 0181H
+ DB 013H
+ DB 05H
+ DW 019H
+ DB 01bH
+ DB 05H
+ DW 01801H
+ DB 011H
+ DB 05H
+ DW 07H
+ DB 019H
+ DB 05H
+ DW 0601H
+ DB 015H
+ DB 05H
+ DW 061H
+ DB 01dH
+ DB 05H
+ DW 06001H
+ DB 010H
+ DB 05H
+ DW 04H
+ DB 018H
+ DB 05H
+ DW 0301H
+ DB 014H
+ DB 05H
+ DW 031H
+ DB 01cH
+ DB 05H
+ DW 03001H
+ DB 012H
+ DB 05H
+ DW 0dH
+ DB 01aH
+ DB 05H
+ DW 0c01H
+ DB 016H
+ DB 05H
+ DW 0c1H
+ DB 040H
+ DB 05H
+ DW 00H
+?order@?1??inflate@@9@9 DW 010H ; `inflate'::`2'::order
+ DW 011H
+ DW 012H
+ DW 00H
+ DW 08H
+ DW 07H
+ DW 09H
+ DW 06H
+ DW 0aH
+ DW 05H
+ DW 0bH
+ DW 04H
+ DW 0cH
+ DW 03H
+ DW 0dH
+ DW 02H
+ DW 0eH
+ DW 01H
+ DW 0fH
+PUBLIC _inflateMark@4
+PUBLIC _inflateUndermine@8
+PUBLIC _inflateCopy@8
+PUBLIC _inflateSyncPoint@4
+PUBLIC _inflateSync@4
+PUBLIC _inflateGetHeader@8
+PUBLIC _inflateSetDictionary@12
+PUBLIC _inflateGetDictionary@12
+PUBLIC _inflatePrime@12
+PUBLIC _inflateInit_@12
+PUBLIC _inflateReset2@8
+PUBLIC _inflateResetKeep@4
+PUBLIC _inflateEnd@4
+PUBLIC _inflate@8
+PUBLIC _inflateInit2_@16
+PUBLIC _inflateReset@4
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _inflateReset@4
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_inflateReset@4 PROC ; COMDAT
+
+; 131 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 132 : struct inflate_state FAR *state;
+; 133 :
+; 134 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00003 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00006 85 c0 test eax, eax
+ 00008 74 25 je SHORT $LN3@inflateRes
+ 0000a 8b 48 1c mov ecx, DWORD PTR [eax+28]
+ 0000d 85 c9 test ecx, ecx
+ 0000f 74 1e je SHORT $LN3@inflateRes
+
+; 135 : state = (struct inflate_state FAR *)strm->state;
+; 136 : state->wsize = 0;
+
+ 00011 c7 41 28 00 00
+ 00 00 mov DWORD PTR [ecx+40], 0
+
+; 137 : state->whave = 0;
+
+ 00018 c7 41 2c 00 00
+ 00 00 mov DWORD PTR [ecx+44], 0
+
+; 138 : state->wnext = 0;
+
+ 0001f c7 41 30 00 00
+ 00 00 mov DWORD PTR [ecx+48], 0
+
+; 139 : return inflateResetKeep(strm);
+
+ 00026 89 45 08 mov DWORD PTR _strm$[ebp], eax
+
+; 140 : }
+
+ 00029 5d pop ebp
+
+; 139 : return inflateResetKeep(strm);
+
+ 0002a e9 00 00 00 00 jmp _inflateResetKeep@4
+$LN3@inflateRes:
+
+; 132 : struct inflate_state FAR *state;
+; 133 :
+; 134 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 0002f b8 fe ff ff ff mov eax, -2 ; fffffffeH
+
+; 140 : }
+
+ 00034 5d pop ebp
+ 00035 c2 04 00 ret 4
+_inflateReset@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _inflateInit2_@16
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_windowBits$ = 12 ; size = 4
+_version$ = 16 ; size = 4
+_stream_size$ = 20 ; size = 4
+_inflateInit2_@16 PROC ; COMDAT
+
+; 185 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 186 : int ret;
+; 187 : struct inflate_state FAR *state;
+; 188 :
+; 189 : if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
+
+ 00003 8b 45 10 mov eax, DWORD PTR _version$[ebp]
+ 00006 85 c0 test eax, eax
+ 00008 0f 84 a3 00 00
+ 00 je $LN3@inflateIni
+ 0000e 80 38 31 cmp BYTE PTR [eax], 49 ; 00000031H
+ 00011 0f 85 9a 00 00
+ 00 jne $LN3@inflateIni
+ 00017 83 7d 14 38 cmp DWORD PTR _stream_size$[ebp], 56 ; 00000038H
+ 0001b 0f 85 90 00 00
+ 00 jne $LN3@inflateIni
+
+; 192 : if (strm == Z_NULL) return Z_STREAM_ERROR;
+
+ 00021 56 push esi
+ 00022 8b 75 08 mov esi, DWORD PTR _strm$[ebp]
+ 00025 85 f6 test esi, esi
+ 00027 75 08 jne SHORT $LN4@inflateIni
+ 00029 8d 46 fe lea eax, DWORD PTR [esi-2]
+ 0002c 5e pop esi
+
+; 220 : }
+
+ 0002d 5d pop ebp
+ 0002e c2 10 00 ret 16 ; 00000010H
+$LN4@inflateIni:
+
+; 193 : strm->msg = Z_NULL; /* in case we return an error */
+; 194 : if (strm->zalloc == (alloc_func)0) {
+
+ 00031 83 7e 20 00 cmp DWORD PTR [esi+32], 0
+ 00035 c7 46 18 00 00
+ 00 00 mov DWORD PTR [esi+24], 0
+ 0003c 75 0e jne SHORT $LN5@inflateIni
+
+; 195 : #ifdef Z_SOLO
+; 196 : return Z_STREAM_ERROR;
+; 197 : #else
+; 198 : strm->zalloc = zcalloc;
+
+ 0003e c7 46 20 00 00
+ 00 00 mov DWORD PTR [esi+32], OFFSET _zcalloc
+
+; 199 : strm->opaque = (voidpf)0;
+
+ 00045 c7 46 28 00 00
+ 00 00 mov DWORD PTR [esi+40], 0
+$LN5@inflateIni:
+
+; 200 : #endif
+; 201 : }
+; 202 : if (strm->zfree == (free_func)0)
+
+ 0004c 83 7e 24 00 cmp DWORD PTR [esi+36], 0
+ 00050 75 07 jne SHORT $LN6@inflateIni
+
+; 203 : #ifdef Z_SOLO
+; 204 : return Z_STREAM_ERROR;
+; 205 : #else
+; 206 : strm->zfree = zcfree;
+
+ 00052 c7 46 24 00 00
+ 00 00 mov DWORD PTR [esi+36], OFFSET _zcfree
+$LN6@inflateIni:
+
+; 207 : #endif
+; 208 : state = (struct inflate_state FAR *)
+
+ 00059 8b 46 20 mov eax, DWORD PTR [esi+32]
+ 0005c 57 push edi
+ 0005d 68 cc 1b 00 00 push 7116 ; 00001bccH
+ 00062 6a 01 push 1
+ 00064 ff 76 28 push DWORD PTR [esi+40]
+ 00067 ff d0 call eax
+ 00069 8b f8 mov edi, eax
+ 0006b 83 c4 0c add esp, 12 ; 0000000cH
+
+; 209 : ZALLOC(strm, 1, sizeof(struct inflate_state));
+; 210 : if (state == Z_NULL) return Z_MEM_ERROR;
+
+ 0006e 85 ff test edi, edi
+ 00070 75 09 jne SHORT $LN7@inflateIni
+ 00072 8d 47 fc lea eax, DWORD PTR [edi-4]
+ 00075 5f pop edi
+ 00076 5e pop esi
+
+; 220 : }
+
+ 00077 5d pop ebp
+ 00078 c2 10 00 ret 16 ; 00000010H
+$LN7@inflateIni:
+ 0007b 53 push ebx
+
+; 211 : Tracev((stderr, "inflate: allocated\n"));
+; 212 : strm->state = (struct internal_state FAR *)state;
+; 213 : state->window = Z_NULL;
+; 214 : ret = inflateReset2(strm, windowBits);
+
+ 0007c ff 75 0c push DWORD PTR _windowBits$[ebp]
+ 0007f 89 7e 1c mov DWORD PTR [esi+28], edi
+ 00082 56 push esi
+ 00083 c7 47 34 00 00
+ 00 00 mov DWORD PTR [edi+52], 0
+ 0008a e8 00 00 00 00 call _inflateReset2@8
+ 0008f 8b d8 mov ebx, eax
+
+; 215 : if (ret != Z_OK) {
+
+ 00091 85 db test ebx, ebx
+ 00093 74 13 je SHORT $LN8@inflateIni
+
+; 216 : ZFREE(strm, state);
+
+ 00095 8b 4e 24 mov ecx, DWORD PTR [esi+36]
+ 00098 57 push edi
+ 00099 ff 76 28 push DWORD PTR [esi+40]
+ 0009c ff d1 call ecx
+ 0009e 83 c4 08 add esp, 8
+
+; 217 : strm->state = Z_NULL;
+
+ 000a1 c7 46 1c 00 00
+ 00 00 mov DWORD PTR [esi+28], 0
+$LN8@inflateIni:
+
+; 218 : }
+; 219 : return ret;
+
+ 000a8 8b c3 mov eax, ebx
+ 000aa 5b pop ebx
+ 000ab 5f pop edi
+ 000ac 5e pop esi
+
+; 220 : }
+
+ 000ad 5d pop ebp
+ 000ae c2 10 00 ret 16 ; 00000010H
+$LN3@inflateIni:
+
+; 190 : stream_size != (int)(sizeof(z_stream)))
+; 191 : return Z_VERSION_ERROR;
+
+ 000b1 b8 fa ff ff ff mov eax, -6 ; fffffffaH
+
+; 220 : }
+
+ 000b6 5d pop ebp
+ 000b7 c2 10 00 ret 16 ; 00000010H
+_inflateInit2_@16 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _inflate@8
+_TEXT SEGMENT
+tv2776 = -64 ; size = 4
+_in$1$ = -60 ; size = 4
+$T1 = -56 ; size = 4
+_copy$9$ = -56 ; size = 4
+tv2758 = -56 ; size = 4
+tv2717 = -56 ; size = 4
+tv2715 = -56 ; size = 4
+tv2704 = -56 ; size = 4
+tv2690 = -56 ; size = 4
+tv2666 = -56 ; size = 4
+tv2665 = -56 ; size = 4
+tv2620 = -56 ; size = 4
+_copy$7$ = -56 ; size = 4
+_copy$4$ = -56 ; size = 4
+_copy$3$ = -56 ; size = 4
+_copy$2$ = -56 ; size = 4
+_len$5$ = -56 ; size = 4
+_len$1$ = -56 ; size = 4
+_last$ = -56 ; size = 4
+_here$ = -56 ; size = 4
+_copy$11$ = -52 ; size = 4
+_copy$8$ = -52 ; size = 4
+tv2711 = -52 ; size = 4
+tv2710 = -52 ; size = 4
+tv2688 = -52 ; size = 4
+tv2664 = -52 ; size = 4
+_copy$1$ = -52 ; size = 4
+tv2779 = -48 ; size = 4
+_ret$1$ = -44 ; size = 4
+_from$1$ = -40 ; size = 4
+tv2786 = -40 ; size = 4
+tv2696 = -40 ; size = 4
+tv2687 = -40 ; size = 4
+tv2686 = -40 ; size = 4
+_len$4$ = -40 ; size = 4
+_len$3$ = -40 ; size = 4
+_len$2$ = -40 ; size = 4
+_out$1$ = -36 ; size = 4
+_put$1$ = -32 ; size = 4
+_hbuf$ = -28 ; size = 4
+_left$1$ = -24 ; size = 4
+tv2678 = -20 ; size = 4
+tv2677 = -20 ; size = 4
+_bits$1$ = -20 ; size = 4
+_next$1$ = -16 ; size = 4
+tv2713 = -12 ; size = 4
+_have$1$ = -12 ; size = 4
+_state$1$ = -8 ; size = 4
+_hold$1$ = -4 ; size = 4
+tv2648 = 8 ; size = 4
+_strm$ = 8 ; size = 4
+_flush$ = 12 ; size = 4
+_inflate@8 PROC ; COMDAT
+
+; 608 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 609 : struct inflate_state FAR *state;
+; 610 : z_const unsigned char FAR *next; /* next input */
+; 611 : unsigned char FAR *put; /* next output */
+; 612 : unsigned have, left; /* available input and output */
+; 613 : unsigned long hold; /* bit buffer */
+; 614 : unsigned bits; /* bits in bit buffer */
+; 615 : unsigned in, out; /* save starting available input and output */
+; 616 : unsigned copy; /* number of stored or match bytes to copy */
+; 617 : unsigned char FAR *from; /* where to copy match bytes from */
+; 618 : code here; /* current decoding table entry */
+; 619 : code last; /* parent table entry */
+; 620 : unsigned len; /* length to copy for repeats, bits to drop */
+; 621 : int ret; /* return code */
+; 622 : #ifdef GUNZIP
+; 623 : unsigned char hbuf[4]; /* buffer for gzip header crc calculation */
+; 624 : #endif
+; 625 : static const unsigned short order[19] = /* permutation of code lengths */
+; 626 : {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+; 627 :
+; 628 : if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
+
+ 00003 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00006 83 ec 40 sub esp, 64 ; 00000040H
+ 00009 85 c0 test eax, eax
+ 0000b 0f 84 1e 16 00
+ 00 je $LN333@inflate
+ 00011 8b 48 1c mov ecx, DWORD PTR [eax+28]
+ 00014 89 4d f8 mov DWORD PTR _state$1$[ebp], ecx
+ 00017 85 c9 test ecx, ecx
+ 00019 0f 84 10 16 00
+ 00 je $LN333@inflate
+ 0001f 83 78 0c 00 cmp DWORD PTR [eax+12], 0
+ 00023 0f 84 06 16 00
+ 00 je $LN333@inflate
+ 00029 83 38 00 cmp DWORD PTR [eax], 0
+ 0002c 75 0a jne SHORT $LN332@inflate
+ 0002e 83 78 04 00 cmp DWORD PTR [eax+4], 0
+ 00032 0f 85 f7 15 00
+ 00 jne $LN333@inflate
+$LN332@inflate:
+
+; 631 :
+; 632 : state = (struct inflate_state FAR *)strm->state;
+; 633 : if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */
+
+ 00038 83 39 0b cmp DWORD PTR [ecx], 11 ; 0000000bH
+ 0003b 75 06 jne SHORT $LN4@inflate
+ 0003d c7 01 0c 00 00
+ 00 mov DWORD PTR [ecx], 12 ; 0000000cH
+$LN4@inflate:
+
+; 634 : LOAD();
+
+ 00043 8b 50 0c mov edx, DWORD PTR [eax+12]
+ 00046 53 push ebx
+ 00047 8b 58 04 mov ebx, DWORD PTR [eax+4]
+ 0004a 56 push esi
+ 0004b 8b 71 3c mov esi, DWORD PTR [ecx+60]
+ 0004e 89 55 e0 mov DWORD PTR _put$1$[ebp], edx
+ 00051 8b 50 10 mov edx, DWORD PTR [eax+16]
+ 00054 89 55 e8 mov DWORD PTR _left$1$[ebp], edx
+ 00057 8b 51 38 mov edx, DWORD PTR [ecx+56]
+ 0005a 57 push edi
+ 0005b 8b 38 mov edi, DWORD PTR [eax]
+
+; 635 : in = have;
+; 636 : out = left;
+
+ 0005d 8b 45 e8 mov eax, DWORD PTR _left$1$[ebp]
+ 00060 89 45 dc mov DWORD PTR _out$1$[ebp], eax
+
+; 637 : ret = Z_OK;
+
+ 00063 33 c0 xor eax, eax
+ 00065 89 45 d4 mov DWORD PTR _ret$1$[ebp], eax
+
+; 638 : for (;;)
+; 639 : switch (state->mode) {
+
+ 00068 8b 01 mov eax, DWORD PTR [ecx]
+ 0006a 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 0006d 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 00070 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00073 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 00076 89 5d c4 mov DWORD PTR _in$1$[ebp], ebx
+ 00079 83 f8 1e cmp eax, 30 ; 0000001eH
+ 0007c 0f 87 a5 0a 00
+ 00 ja $LN498@inflate
+
+; 938 : for (;;) {
+; 939 : here = state->lencode[BITS(state->lenbits)];
+
+ 00082 8d 79 54 lea edi, DWORD PTR [ecx+84]
+ 00085 89 7d d0 mov DWORD PTR tv2779[ebp], edi
+
+; 1080 : case DIST:
+; 1081 : for (;;) {
+; 1082 : here = state->distcode[BITS(state->distbits)];
+
+ 00088 8d 79 58 lea edi, DWORD PTR [ecx+88]
+ 0008b 89 7d c0 mov DWORD PTR tv2776[ebp], edi
+ 0008e 8b 7d f0 mov edi, DWORD PTR _next$1$[ebp]
+$LL5@inflate:
+
+; 638 : for (;;)
+; 639 : switch (state->mode) {
+
+ 00091 ff 24 85 00 00
+ 00 00 jmp DWORD PTR $LN935@inflate[eax*4]
+$LN335@inflate:
+
+; 640 : case HEAD:
+; 641 : if (state->wrap == 0) {
+
+ 00098 8b 41 08 mov eax, DWORD PTR [ecx+8]
+ 0009b 89 45 c8 mov DWORD PTR tv2758[ebp], eax
+ 0009e 85 c0 test eax, eax
+ 000a0 75 0b jne SHORT $LN12@inflate
+
+; 642 : state->mode = TYPEDO;
+
+ 000a2 c7 01 0c 00 00
+ 00 mov DWORD PTR [ecx], 12 ; 0000000cH
+
+; 643 : break;
+
+ 000a8 e9 6f 0a 00 00 jmp $LN8@inflate
+$LN12@inflate:
+
+; 644 : }
+; 645 : NEEDBITS(16);
+
+ 000ad 83 fe 10 cmp esi, 16 ; 00000010H
+ 000b0 73 2d jae SHORT $LN10@inflate
+$LL13@inflate:
+ 000b2 85 db test ebx, ebx
+ 000b4 0f 84 c0 04 00
+ 00 je $LN886@inflate
+ 000ba 0f b6 07 movzx eax, BYTE PTR [edi]
+ 000bd 8b ce mov ecx, esi
+ 000bf d3 e0 shl eax, cl
+ 000c1 83 c6 08 add esi, 8
+ 000c4 4b dec ebx
+ 000c5 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 000c8 03 d0 add edx, eax
+ 000ca 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 000cd 47 inc edi
+ 000ce 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 000d1 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 000d4 83 fe 10 cmp esi, 16 ; 00000010H
+ 000d7 72 d9 jb SHORT $LL13@inflate
+ 000d9 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 000dc 8b 45 c8 mov eax, DWORD PTR tv2758[ebp]
+$LN10@inflate:
+
+; 646 : #ifdef GUNZIP
+; 647 : if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */
+
+ 000df a8 02 test al, 2
+ 000e1 74 46 je SHORT $LN338@inflate
+ 000e3 81 fa 1f 8b 00
+ 00 cmp edx, 35615 ; 00008b1fH
+ 000e9 75 3e jne SHORT $LN338@inflate
+
+; 648 : state->check = crc32(0L, Z_NULL, 0);
+
+ 000eb 6a 00 push 0
+ 000ed 6a 00 push 0
+ 000ef 6a 00 push 0
+ 000f1 e8 00 00 00 00 call _crc32@12
+ 000f6 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+
+; 649 : CRC2(state->check, hold);
+
+ 000f9 6a 02 push 2
+ 000fb 66 c7 45 e4 1f
+ 8b mov WORD PTR _hbuf$[ebp], 35615 ; 00008b1fH
+ 00101 89 41 18 mov DWORD PTR [ecx+24], eax
+ 00104 8d 4d e4 lea ecx, DWORD PTR _hbuf$[ebp]
+ 00107 51 push ecx
+ 00108 50 push eax
+ 00109 e8 00 00 00 00 call _crc32@12
+ 0010e 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+
+; 650 : INITBITS();
+
+ 00111 33 d2 xor edx, edx
+ 00113 33 f6 xor esi, esi
+ 00115 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00118 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 0011b 89 41 18 mov DWORD PTR [ecx+24], eax
+
+; 651 : state->mode = FLAGS;
+
+ 0011e c7 01 01 00 00
+ 00 mov DWORD PTR [ecx], 1
+
+; 652 : break;
+
+ 00124 e9 f3 09 00 00 jmp $LN8@inflate
+$LN338@inflate:
+
+; 653 : }
+; 654 : state->flags = 0; /* expect zlib header */
+; 655 : if (state->head != Z_NULL)
+
+ 00129 8b 41 20 mov eax, DWORD PTR [ecx+32]
+ 0012c c7 41 10 00 00
+ 00 00 mov DWORD PTR [ecx+16], 0
+ 00133 85 c0 test eax, eax
+ 00135 74 07 je SHORT $LN339@inflate
+
+; 656 : state->head->done = -1;
+
+ 00137 c7 40 30 ff ff
+ ff ff mov DWORD PTR [eax+48], -1
+$LN339@inflate:
+
+; 657 : if (!(state->wrap & 1) || /* check if zlib header allowed */
+
+ 0013e f6 41 08 01 test BYTE PTR [ecx+8], 1
+ 00142 0f 84 c1 00 00
+ 00 je $LN341@inflate
+ 00148 0f b6 ca movzx ecx, dl
+ 0014b 8b c2 mov eax, edx
+ 0014d c1 e1 08 shl ecx, 8
+ 00150 33 d2 xor edx, edx
+ 00152 c1 e8 08 shr eax, 8
+ 00155 03 c1 add eax, ecx
+ 00157 b9 1f 00 00 00 mov ecx, 31 ; 0000001fH
+ 0015c f7 f1 div ecx
+
+; 668 : state->mode = BAD;
+
+ 0015e 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 00161 85 d2 test edx, edx
+ 00163 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+ 00166 0f 85 9d 00 00
+ 00 jne $LN341@inflate
+
+; 665 : }
+; 666 : if (BITS(4) != Z_DEFLATED) {
+
+ 0016c 8b c2 mov eax, edx
+ 0016e 24 0f and al, 15 ; 0000000fH
+ 00170 3c 08 cmp al, 8
+ 00172 74 15 je SHORT $LN26@inflate
+$LN932@inflate:
+
+; 667 : strm->msg = (char *)"unknown compression method";
+
+ 00174 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00177 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BL@IHKGDAEE@unknown?5compression?5method?$AA@
+
+; 668 : state->mode = BAD;
+
+ 0017e c7 01 1d 00 00
+ 00 mov DWORD PTR [ecx], 29 ; 0000001dH
+
+; 669 : break;
+
+ 00184 e9 93 09 00 00 jmp $LN8@inflate
+$LN26@inflate:
+
+; 670 : }
+; 671 : DROPBITS(4);
+
+ 00189 c1 ea 04 shr edx, 4
+ 0018c 83 ee 04 sub esi, 4
+
+; 672 : len = BITS(4) + 8;
+
+ 0018f 8b c2 mov eax, edx
+ 00191 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00194 83 e0 0f and eax, 15 ; 0000000fH
+ 00197 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 0019a 83 c0 08 add eax, 8
+
+; 673 : if (state->wbits == 0)
+
+ 0019d 83 79 24 00 cmp DWORD PTR [ecx+36], 0
+ 001a1 89 45 c8 mov DWORD PTR _len$1$[ebp], eax
+ 001a4 75 49 jne SHORT $LN343@inflate
+
+; 674 : state->wbits = len;
+
+ 001a6 89 41 24 mov DWORD PTR [ecx+36], eax
+$LN345@inflate:
+
+; 679 : }
+; 680 : state->dmax = 1U << len;
+
+ 001a9 8b 4d c8 mov ecx, DWORD PTR _len$1$[ebp]
+ 001ac b8 01 00 00 00 mov eax, 1
+ 001b1 d3 e0 shl eax, cl
+ 001b3 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+
+; 681 : Tracev((stderr, "inflate: zlib header ok\n"));
+; 682 : strm->adler = state->check = adler32(0L, Z_NULL, 0);
+
+ 001b6 6a 00 push 0
+ 001b8 6a 00 push 0
+ 001ba 6a 00 push 0
+ 001bc 89 41 14 mov DWORD PTR [ecx+20], eax
+ 001bf e8 00 00 00 00 call _adler32@12
+ 001c4 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 001c7 8b 55 08 mov edx, DWORD PTR _strm$[ebp]
+ 001ca 89 41 18 mov DWORD PTR [ecx+24], eax
+ 001cd 89 42 30 mov DWORD PTR [edx+48], eax
+
+; 683 : state->mode = hold & 0x200 ? DICTID : TYPE;
+
+ 001d0 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+ 001d3 c1 ea 08 shr edx, 8
+ 001d6 f7 d2 not edx
+ 001d8 83 e2 02 and edx, 2
+ 001db 83 ca 09 or edx, 9
+ 001de 89 11 mov DWORD PTR [ecx], edx
+
+; 684 : INITBITS();
+
+ 001e0 33 d2 xor edx, edx
+ 001e2 33 f6 xor esi, esi
+ 001e4 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 001e7 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+
+; 685 : break;
+
+ 001ea e9 2d 09 00 00 jmp $LN8@inflate
+$LN343@inflate:
+
+; 675 : else if (len > state->wbits) {
+
+ 001ef 3b 41 24 cmp eax, DWORD PTR [ecx+36]
+ 001f2 76 b5 jbe SHORT $LN345@inflate
+
+; 676 : strm->msg = (char *)"invalid window size";
+
+ 001f4 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 001f7 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BE@EMOGCLGO@invalid?5window?5size?$AA@
+
+; 677 : state->mode = BAD;
+
+ 001fe c7 01 1d 00 00
+ 00 mov DWORD PTR [ecx], 29 ; 0000001dH
+
+; 678 : break;
+
+ 00204 e9 13 09 00 00 jmp $LN8@inflate
+$LN341@inflate:
+
+; 658 : #else
+; 659 : if (
+; 660 : #endif
+; 661 : ((BITS(8) << 8) + (hold >> 8)) % 31) {
+; 662 : strm->msg = (char *)"incorrect header check";
+
+ 00209 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 0020c c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BH@LIBMMIGA@incorrect?5header?5check?$AA@
+
+; 663 : state->mode = BAD;
+
+ 00213 c7 01 1d 00 00
+ 00 mov DWORD PTR [ecx], 29 ; 0000001dH
+
+; 664 : break;
+
+ 00219 e9 fe 08 00 00 jmp $LN8@inflate
+$LN32@inflate:
+
+; 686 : #ifdef GUNZIP
+; 687 : case FLAGS:
+; 688 : NEEDBITS(16);
+
+ 0021e 83 fe 10 cmp esi, 16 ; 00000010H
+ 00221 73 2a jae SHORT $LN30@inflate
+$LL33@inflate:
+ 00223 85 db test ebx, ebx
+ 00225 0f 84 4f 03 00
+ 00 je $LN886@inflate
+ 0022b 0f b6 07 movzx eax, BYTE PTR [edi]
+ 0022e 8b ce mov ecx, esi
+ 00230 d3 e0 shl eax, cl
+ 00232 83 c6 08 add esi, 8
+ 00235 4b dec ebx
+ 00236 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 00239 03 d0 add edx, eax
+ 0023b 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 0023e 47 inc edi
+ 0023f 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00242 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 00245 83 fe 10 cmp esi, 16 ; 00000010H
+ 00248 72 d9 jb SHORT $LL33@inflate
+ 0024a 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+$LN30@inflate:
+
+; 689 : state->flags = (int)(hold);
+
+ 0024d 89 51 10 mov DWORD PTR [ecx+16], edx
+
+; 690 : if ((state->flags & 0xff) != Z_DEFLATED) {
+
+ 00250 80 fa 08 cmp dl, 8
+ 00253 0f 85 1b ff ff
+ ff jne $LN932@inflate
+
+; 691 : strm->msg = (char *)"unknown compression method";
+; 692 : state->mode = BAD;
+; 693 : break;
+; 694 : }
+; 695 : if (state->flags & 0xe000) {
+
+ 00259 f7 c2 00 e0 00
+ 00 test edx, 57344 ; 0000e000H
+ 0025f 74 15 je SHORT $LN349@inflate
+
+; 696 : strm->msg = (char *)"unknown header flags set";
+
+ 00261 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00264 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BJ@BLBBCOMO@unknown?5header?5flags?5set?$AA@
+ 0026b c7 01 1d 00 00
+ 00 mov DWORD PTR [ecx], 29 ; 0000001dH
+ 00271 e9 a6 08 00 00 jmp $LN8@inflate
+$LN349@inflate:
+
+; 697 : state->mode = BAD;
+; 698 : break;
+; 699 : }
+; 700 : if (state->head != Z_NULL)
+
+ 00276 8b 71 20 mov esi, DWORD PTR [ecx+32]
+ 00279 85 f6 test esi, esi
+ 0027b 74 0a je SHORT $LN350@inflate
+
+; 701 : state->head->text = (int)((hold >> 8) & 1);
+
+ 0027d 8b c2 mov eax, edx
+ 0027f c1 e8 08 shr eax, 8
+ 00282 83 e0 01 and eax, 1
+ 00285 89 06 mov DWORD PTR [esi], eax
+$LN350@inflate:
+
+; 702 : if (state->flags & 0x0200) CRC2(state->check, hold);
+
+ 00287 f7 41 10 00 02
+ 00 00 test DWORD PTR [ecx+16], 512 ; 00000200H
+ 0028e 74 1d je SHORT $LN39@inflate
+ 00290 6a 02 push 2
+ 00292 8d 45 e4 lea eax, DWORD PTR _hbuf$[ebp]
+ 00295 88 55 e4 mov BYTE PTR _hbuf$[ebp], dl
+ 00298 50 push eax
+ 00299 ff 71 18 push DWORD PTR [ecx+24]
+ 0029c c1 ea 08 shr edx, 8
+ 0029f 88 55 e5 mov BYTE PTR _hbuf$[ebp+1], dl
+ 002a2 e8 00 00 00 00 call _crc32@12
+ 002a7 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 002aa 89 41 18 mov DWORD PTR [ecx+24], eax
+$LN39@inflate:
+
+; 703 : INITBITS();
+
+ 002ad 33 d2 xor edx, edx
+
+; 704 : state->mode = TIME;
+
+ 002af c7 01 02 00 00
+ 00 mov DWORD PTR [ecx], 2
+ 002b5 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 002b8 33 f6 xor esi, esi
+
+; 705 : case TIME:
+; 706 : NEEDBITS(32);
+
+ 002ba eb 05 jmp SHORT $LL47@inflate
+$LN46@inflate:
+ 002bc 83 fe 20 cmp esi, 32 ; 00000020H
+ 002bf 73 27 jae SHORT $LN44@inflate
+$LL47@inflate:
+ 002c1 85 db test ebx, ebx
+ 002c3 0f 84 b1 02 00
+ 00 je $LN886@inflate
+ 002c9 0f b6 07 movzx eax, BYTE PTR [edi]
+ 002cc 8b ce mov ecx, esi
+ 002ce d3 e0 shl eax, cl
+ 002d0 4b dec ebx
+ 002d1 03 d0 add edx, eax
+ 002d3 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 002d6 47 inc edi
+ 002d7 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 002da 83 c6 08 add esi, 8
+ 002dd 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 002e0 83 fe 20 cmp esi, 32 ; 00000020H
+ 002e3 72 dc jb SHORT $LL47@inflate
+ 002e5 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+$LN44@inflate:
+
+; 707 : if (state->head != Z_NULL)
+
+ 002e8 8b 41 20 mov eax, DWORD PTR [ecx+32]
+ 002eb 85 c0 test eax, eax
+ 002ed 74 03 je SHORT $LN354@inflate
+
+; 708 : state->head->time = hold;
+
+ 002ef 89 50 04 mov DWORD PTR [eax+4], edx
+$LN354@inflate:
+
+; 709 : if (state->flags & 0x0200) CRC4(state->check, hold);
+
+ 002f2 f7 41 10 00 02
+ 00 00 test DWORD PTR [ecx+16], 512 ; 00000200H
+ 002f9 74 2d je SHORT $LN53@inflate
+ 002fb 8b c2 mov eax, edx
+ 002fd 88 55 e4 mov BYTE PTR _hbuf$[ebp], dl
+ 00300 c1 e8 08 shr eax, 8
+ 00303 88 45 e5 mov BYTE PTR _hbuf$[ebp+1], al
+ 00306 8b c2 mov eax, edx
+ 00308 c1 e8 10 shr eax, 16 ; 00000010H
+ 0030b 88 45 e6 mov BYTE PTR _hbuf$[ebp+2], al
+ 0030e 8d 45 e4 lea eax, DWORD PTR _hbuf$[ebp]
+ 00311 6a 04 push 4
+ 00313 50 push eax
+ 00314 ff 71 18 push DWORD PTR [ecx+24]
+ 00317 c1 ea 18 shr edx, 24 ; 00000018H
+ 0031a 88 55 e7 mov BYTE PTR _hbuf$[ebp+3], dl
+ 0031d e8 00 00 00 00 call _crc32@12
+ 00322 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 00325 89 41 18 mov DWORD PTR [ecx+24], eax
+$LN53@inflate:
+
+; 710 : INITBITS();
+
+ 00328 33 d2 xor edx, edx
+
+; 711 : state->mode = OS;
+
+ 0032a c7 01 03 00 00
+ 00 mov DWORD PTR [ecx], 3
+ 00330 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00333 33 f6 xor esi, esi
+
+; 712 : case OS:
+; 713 : NEEDBITS(16);
+
+ 00335 eb 09 jmp SHORT $LL61@inflate
+$LN60@inflate:
+ 00337 83 fe 10 cmp esi, 16 ; 00000010H
+ 0033a 73 2b jae SHORT $LN58@inflate
+ 0033c 0f 1f 40 00 npad 4
+$LL61@inflate:
+ 00340 85 db test ebx, ebx
+ 00342 0f 84 32 02 00
+ 00 je $LN886@inflate
+ 00348 0f b6 07 movzx eax, BYTE PTR [edi]
+ 0034b 8b ce mov ecx, esi
+ 0034d d3 e0 shl eax, cl
+ 0034f 4b dec ebx
+ 00350 03 d0 add edx, eax
+ 00352 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 00355 47 inc edi
+ 00356 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00359 83 c6 08 add esi, 8
+ 0035c 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 0035f 83 fe 10 cmp esi, 16 ; 00000010H
+ 00362 72 dc jb SHORT $LL61@inflate
+ 00364 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+$LN58@inflate:
+
+; 714 : if (state->head != Z_NULL) {
+
+ 00367 8b 71 20 mov esi, DWORD PTR [ecx+32]
+ 0036a 85 f6 test esi, esi
+ 0036c 74 17 je SHORT $LN358@inflate
+
+; 715 : state->head->xflags = (int)(hold & 0xff);
+
+ 0036e 0f b6 c2 movzx eax, dl
+
+; 716 : state->head->os = (int)(hold >> 8);
+
+ 00371 8b ca mov ecx, edx
+ 00373 89 46 08 mov DWORD PTR [esi+8], eax
+ 00376 8b 45 f8 mov eax, DWORD PTR _state$1$[ebp]
+ 00379 c1 e9 08 shr ecx, 8
+ 0037c 8b 40 20 mov eax, DWORD PTR [eax+32]
+ 0037f 89 48 0c mov DWORD PTR [eax+12], ecx
+ 00382 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+$LN358@inflate:
+
+; 717 : }
+; 718 : if (state->flags & 0x0200) CRC2(state->check, hold);
+
+ 00385 f7 41 10 00 02
+ 00 00 test DWORD PTR [ecx+16], 512 ; 00000200H
+ 0038c 74 1d je SHORT $LN67@inflate
+ 0038e 6a 02 push 2
+ 00390 8d 45 e4 lea eax, DWORD PTR _hbuf$[ebp]
+ 00393 88 55 e4 mov BYTE PTR _hbuf$[ebp], dl
+ 00396 50 push eax
+ 00397 ff 71 18 push DWORD PTR [ecx+24]
+ 0039a c1 ea 08 shr edx, 8
+ 0039d 88 55 e5 mov BYTE PTR _hbuf$[ebp+1], dl
+ 003a0 e8 00 00 00 00 call _crc32@12
+ 003a5 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 003a8 89 41 18 mov DWORD PTR [ecx+24], eax
+$LN67@inflate:
+
+; 719 : INITBITS();
+
+ 003ab 33 d2 xor edx, edx
+
+; 720 : state->mode = EXLEN;
+
+ 003ad c7 01 04 00 00
+ 00 mov DWORD PTR [ecx], 4
+ 003b3 33 f6 xor esi, esi
+ 003b5 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 003b8 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+$LN360@inflate:
+
+; 721 : case EXLEN:
+; 722 : if (state->flags & 0x0400) {
+
+ 003bb f7 41 10 00 04
+ 00 00 test DWORD PTR [ecx+16], 1024 ; 00000400H
+ 003c2 74 74 je SHORT $LN361@inflate
+
+; 723 : NEEDBITS(16);
+
+ 003c4 83 fe 10 cmp esi, 16 ; 00000010H
+ 003c7 73 2e jae SHORT $LN72@inflate
+ 003c9 0f 1f 80 00 00
+ 00 00 npad 7
+$LL75@inflate:
+ 003d0 85 db test ebx, ebx
+ 003d2 0f 84 a2 01 00
+ 00 je $LN886@inflate
+ 003d8 0f b6 07 movzx eax, BYTE PTR [edi]
+ 003db 8b ce mov ecx, esi
+ 003dd d3 e0 shl eax, cl
+ 003df 4b dec ebx
+ 003e0 03 d0 add edx, eax
+ 003e2 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 003e5 47 inc edi
+ 003e6 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 003e9 83 c6 08 add esi, 8
+ 003ec 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 003ef 83 fe 10 cmp esi, 16 ; 00000010H
+ 003f2 72 dc jb SHORT $LL75@inflate
+ 003f4 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+$LN72@inflate:
+
+; 724 : state->length = (unsigned)(hold);
+; 725 : if (state->head != Z_NULL)
+
+ 003f7 8b 41 20 mov eax, DWORD PTR [ecx+32]
+ 003fa 89 51 40 mov DWORD PTR [ecx+64], edx
+ 003fd 85 c0 test eax, eax
+ 003ff 74 03 je SHORT $LN364@inflate
+
+; 726 : state->head->extra_len = (unsigned)hold;
+
+ 00401 89 50 14 mov DWORD PTR [eax+20], edx
+$LN364@inflate:
+
+; 727 : if (state->flags & 0x0200) CRC2(state->check, hold);
+
+ 00404 f7 41 10 00 02
+ 00 00 test DWORD PTR [ecx+16], 512 ; 00000200H
+ 0040b 74 1d je SHORT $LN81@inflate
+ 0040d 6a 02 push 2
+ 0040f 8d 45 e4 lea eax, DWORD PTR _hbuf$[ebp]
+ 00412 88 55 e4 mov BYTE PTR _hbuf$[ebp], dl
+ 00415 50 push eax
+ 00416 ff 71 18 push DWORD PTR [ecx+24]
+ 00419 c1 ea 08 shr edx, 8
+ 0041c 88 55 e5 mov BYTE PTR _hbuf$[ebp+1], dl
+ 0041f e8 00 00 00 00 call _crc32@12
+ 00424 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 00427 89 41 18 mov DWORD PTR [ecx+24], eax
+$LN81@inflate:
+
+; 728 : INITBITS();
+
+ 0042a 33 f6 xor esi, esi
+ 0042c c7 45 fc 00 00
+ 00 00 mov DWORD PTR _hold$1$[ebp], 0
+ 00433 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+
+; 729 : }
+
+ 00436 eb 0e jmp SHORT $LN366@inflate
+$LN361@inflate:
+
+; 730 : else if (state->head != Z_NULL)
+
+ 00438 8b 41 20 mov eax, DWORD PTR [ecx+32]
+ 0043b 85 c0 test eax, eax
+ 0043d 74 07 je SHORT $LN366@inflate
+
+; 731 : state->head->extra = Z_NULL;
+
+ 0043f c7 40 10 00 00
+ 00 00 mov DWORD PTR [eax+16], 0
+$LN366@inflate:
+
+; 732 : state->mode = EXTRA;
+
+ 00446 c7 01 05 00 00
+ 00 mov DWORD PTR [ecx], 5
+$LN367@inflate:
+
+; 733 : case EXTRA:
+; 734 : if (state->flags & 0x0400) {
+
+ 0044c f7 41 10 00 04
+ 00 00 test DWORD PTR [ecx+16], 1024 ; 00000400H
+ 00453 0f 84 8d 00 00
+ 00 je $LN373@inflate
+
+; 735 : copy = state->length;
+
+ 00459 8b 41 40 mov eax, DWORD PTR [ecx+64]
+
+; 736 : if (copy > have) copy = have;
+
+ 0045c 3b c3 cmp eax, ebx
+ 0045e 8b d0 mov edx, eax
+ 00460 89 45 cc mov DWORD PTR _copy$1$[ebp], eax
+ 00463 0f 47 d3 cmova edx, ebx
+ 00466 89 55 c8 mov DWORD PTR _copy$2$[ebp], edx
+
+; 737 : if (copy) {
+
+ 00469 85 d2 test edx, edx
+ 0046b 74 6f je SHORT $LN370@inflate
+
+; 738 : if (state->head != Z_NULL &&
+
+ 0046d 8b 41 20 mov eax, DWORD PTR [ecx+32]
+ 00470 85 c0 test eax, eax
+ 00472 74 3f je SHORT $LN371@inflate
+ 00474 8b 78 10 mov edi, DWORD PTR [eax+16]
+ 00477 85 ff test edi, edi
+ 00479 89 7d f4 mov DWORD PTR tv2713[ebp], edi
+ 0047c 8b 7d f0 mov edi, DWORD PTR _next$1$[ebp]
+ 0047f 74 32 je SHORT $LN371@inflate
+
+; 739 : state->head->extra != Z_NULL) {
+; 740 : len = state->head->extra_len - state->length;
+
+ 00481 8b 48 14 mov ecx, DWORD PTR [eax+20]
+ 00484 2b 4d cc sub ecx, DWORD PTR _copy$1$[ebp]
+ 00487 89 4d d8 mov DWORD PTR _len$2$[ebp], ecx
+
+; 741 : zmemcpy(state->head->extra + len, next,
+
+ 0048a 8b 48 18 mov ecx, DWORD PTR [eax+24]
+ 0048d 8b 45 d8 mov eax, DWORD PTR _len$2$[ebp]
+ 00490 03 c2 add eax, edx
+ 00492 3b c1 cmp eax, ecx
+ 00494 8b 45 d8 mov eax, DWORD PTR _len$2$[ebp]
+ 00497 76 04 jbe SHORT $LN508@inflate
+ 00499 2b c8 sub ecx, eax
+ 0049b eb 02 jmp SHORT $LN509@inflate
+$LN508@inflate:
+ 0049d 8b ca mov ecx, edx
+$LN509@inflate:
+ 0049f 03 45 f4 add eax, DWORD PTR tv2713[ebp]
+ 004a2 51 push ecx
+ 004a3 57 push edi
+ 004a4 50 push eax
+ 004a5 e8 00 00 00 00 call _memcpy
+ 004aa 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 004ad 83 c4 0c add esp, 12 ; 0000000cH
+ 004b0 8b 55 c8 mov edx, DWORD PTR _copy$2$[ebp]
+$LN371@inflate:
+
+; 742 : len + copy > state->head->extra_max ?
+; 743 : state->head->extra_max - len : copy);
+; 744 : }
+; 745 : if (state->flags & 0x0200)
+
+ 004b3 f7 41 10 00 02
+ 00 00 test DWORD PTR [ecx+16], 512 ; 00000200H
+ 004ba 74 10 je SHORT $LN372@inflate
+
+; 746 : state->check = crc32(state->check, next, copy);
+
+ 004bc 52 push edx
+ 004bd 57 push edi
+ 004be ff 71 18 push DWORD PTR [ecx+24]
+ 004c1 e8 00 00 00 00 call _crc32@12
+ 004c6 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 004c9 89 41 18 mov DWORD PTR [ecx+24], eax
+$LN372@inflate:
+
+; 747 : have -= copy;
+
+ 004cc 8b 45 c8 mov eax, DWORD PTR _copy$2$[ebp]
+ 004cf 2b d8 sub ebx, eax
+
+; 748 : next += copy;
+
+ 004d1 03 f8 add edi, eax
+ 004d3 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+
+; 749 : state->length -= copy;
+
+ 004d6 29 41 40 sub DWORD PTR [ecx+64], eax
+ 004d9 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+$LN370@inflate:
+
+; 750 : }
+; 751 : if (state->length) goto inf_leave;
+
+ 004dc 83 79 40 00 cmp DWORD PTR [ecx+64], 0
+ 004e0 0f 85 94 00 00
+ 00 jne $LN886@inflate
+$LN373@inflate:
+
+; 752 : }
+; 753 : state->length = 0;
+
+ 004e6 c7 41 40 00 00
+ 00 00 mov DWORD PTR [ecx+64], 0
+
+; 754 : state->mode = NAME;
+
+ 004ed c7 01 06 00 00
+ 00 mov DWORD PTR [ecx], 6
+$LN374@inflate:
+
+; 755 : case NAME:
+; 756 : if (state->flags & 0x0800) {
+
+ 004f3 f7 41 10 00 08
+ 00 00 test DWORD PTR [ecx+16], 2048 ; 00000800H
+ 004fa 0f 84 fd 00 00
+ 00 je $LN375@inflate
+
+; 757 : if (have == 0) goto inf_leave;
+
+ 00500 85 db test ebx, ebx
+ 00502 74 76 je SHORT $LN886@inflate
+
+; 758 : copy = 0;
+
+ 00504 33 d2 xor edx, edx
+$LL88@inflate:
+
+; 759 : do {
+; 760 : len = (unsigned)(next[copy++]);
+
+ 00506 0f b6 04 3a movzx eax, BYTE PTR [edx+edi]
+ 0050a 42 inc edx
+ 0050b 89 45 d8 mov DWORD PTR _len$3$[ebp], eax
+
+; 761 : if (state->head != Z_NULL &&
+; 762 : state->head->name != Z_NULL &&
+
+ 0050e 8b 41 20 mov eax, DWORD PTR [ecx+32]
+ 00511 85 c0 test eax, eax
+ 00513 74 23 je SHORT $LN86@inflate
+ 00515 8b 70 1c mov esi, DWORD PTR [eax+28]
+ 00518 89 75 cc mov DWORD PTR tv2711[ebp], esi
+ 0051b 85 f6 test esi, esi
+ 0051d 74 19 je SHORT $LN86@inflate
+ 0051f 8b 71 40 mov esi, DWORD PTR [ecx+64]
+ 00522 3b 70 20 cmp esi, DWORD PTR [eax+32]
+ 00525 73 11 jae SHORT $LN86@inflate
+
+; 763 : state->length < state->head->name_max)
+; 764 : state->head->name[state->length++] = len;
+
+ 00527 8b 5d d8 mov ebx, DWORD PTR _len$3$[ebp]
+ 0052a 8b c6 mov eax, esi
+ 0052c 8b 75 cc mov esi, DWORD PTR tv2711[ebp]
+ 0052f 88 1c 06 mov BYTE PTR [esi+eax], bl
+ 00532 ff 41 40 inc DWORD PTR [ecx+64]
+ 00535 8b 5d f4 mov ebx, DWORD PTR _have$1$[ebp]
+$LN86@inflate:
+
+; 765 : } while (len && copy < have);
+
+ 00538 8b 45 d8 mov eax, DWORD PTR _len$3$[ebp]
+ 0053b 85 c0 test eax, eax
+ 0053d 74 04 je SHORT $LN379@inflate
+ 0053f 3b d3 cmp edx, ebx
+ 00541 72 c3 jb SHORT $LL88@inflate
+$LN379@inflate:
+
+; 766 : if (state->flags & 0x0200)
+
+ 00543 f7 41 10 00 02
+ 00 00 test DWORD PTR [ecx+16], 512 ; 00000200H
+ 0054a 8b 75 ec mov esi, DWORD PTR _bits$1$[ebp]
+ 0054d 89 55 c8 mov DWORD PTR _copy$3$[ebp], edx
+ 00550 74 16 je SHORT $LN380@inflate
+
+; 767 : state->check = crc32(state->check, next, copy);
+
+ 00552 52 push edx
+ 00553 57 push edi
+ 00554 ff 71 18 push DWORD PTR [ecx+24]
+ 00557 e8 00 00 00 00 call _crc32@12
+ 0055c 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 0055f 8b 55 c8 mov edx, DWORD PTR _copy$3$[ebp]
+ 00562 89 41 18 mov DWORD PTR [ecx+24], eax
+ 00565 8b 45 d8 mov eax, DWORD PTR _len$3$[ebp]
+$LN380@inflate:
+
+; 768 : have -= copy;
+
+ 00568 2b da sub ebx, edx
+
+; 769 : next += copy;
+
+ 0056a 03 fa add edi, edx
+ 0056c 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 0056f 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+
+; 770 : if (len) goto inf_leave;
+
+ 00572 85 c0 test eax, eax
+ 00574 0f 84 91 00 00
+ 00 je $LN382@inflate
+$LN886@inflate:
+ 0057a 8b 45 f4 mov eax, DWORD PTR _have$1$[ebp]
+$LN896@inflate:
+ 0057d 8b 55 0c mov edx, DWORD PTR _flush$[ebp]
+$inf_leave$937:
+
+; 1222 : }
+; 1223 :
+; 1224 : /*
+; 1225 : Return from inflate(), updating the total counts and the check value.
+; 1226 : If there was no progress during the inflate() call, return a buffer
+; 1227 : error. Call updatewindow() to create and/or update the window state.
+; 1228 : Note: a memory error from inflate() is non-recoverable.
+; 1229 : */
+; 1230 : inf_leave:
+; 1231 : RESTORE();
+
+ 00580 8b 7d 08 mov edi, DWORD PTR _strm$[ebp]
+ 00583 8b 4d e0 mov ecx, DWORD PTR _put$1$[ebp]
+ 00586 8b 5d f8 mov ebx, DWORD PTR _state$1$[ebp]
+ 00589 89 4f 0c mov DWORD PTR [edi+12], ecx
+ 0058c 8b 4d e8 mov ecx, DWORD PTR _left$1$[ebp]
+ 0058f 89 4f 10 mov DWORD PTR [edi+16], ecx
+ 00592 8b 4d f0 mov ecx, DWORD PTR _next$1$[ebp]
+ 00595 89 47 04 mov DWORD PTR [edi+4], eax
+ 00598 8b 45 fc mov eax, DWORD PTR _hold$1$[ebp]
+ 0059b 89 0f mov DWORD PTR [edi], ecx
+
+; 1232 : if (state->wsize || (out != strm->avail_out && state->mode < BAD &&
+
+ 0059d 83 7b 28 00 cmp DWORD PTR [ebx+40], 0
+ 005a1 89 73 3c mov DWORD PTR [ebx+60], esi
+ 005a4 8b 75 dc mov esi, DWORD PTR _out$1$[ebp]
+ 005a7 89 43 38 mov DWORD PTR [ebx+56], eax
+ 005aa 75 22 jne SHORT $LN501@inflate
+ 005ac 3b 77 10 cmp esi, DWORD PTR [edi+16]
+ 005af 0f 84 c9 0f 00
+ 00 je $LN502@inflate
+ 005b5 8b 03 mov eax, DWORD PTR [ebx]
+ 005b7 83 f8 1d cmp eax, 29 ; 0000001dH
+ 005ba 0f 8d be 0f 00
+ 00 jge $LN502@inflate
+ 005c0 83 f8 1a cmp eax, 26 ; 0000001aH
+ 005c3 7c 09 jl SHORT $LN501@inflate
+ 005c5 83 fa 04 cmp edx, 4
+ 005c8 0f 84 b0 0f 00
+ 00 je $LN502@inflate
+$LN501@inflate:
+
+; 1233 : (state->mode < CHECK || flush != Z_FINISH)))
+; 1234 : if (updatewindow(strm, strm->next_out, out - strm->avail_out)) {
+
+ 005ce 8b 57 0c mov edx, DWORD PTR [edi+12]
+ 005d1 8b c6 mov eax, esi
+ 005d3 2b 47 10 sub eax, DWORD PTR [edi+16]
+ 005d6 8b cf mov ecx, edi
+ 005d8 50 push eax
+ 005d9 e8 00 00 00 00 call _updatewindow
+ 005de 83 c4 04 add esp, 4
+ 005e1 85 c0 test eax, eax
+ 005e3 0f 84 95 0f 00
+ 00 je $LN502@inflate
+
+; 1235 : state->mode = MEM;
+
+ 005e9 c7 03 1e 00 00
+ 00 mov DWORD PTR [ebx], 30 ; 0000001eH
+$LN497@inflate:
+ 005ef 5f pop edi
+ 005f0 5e pop esi
+
+; 1236 : return Z_MEM_ERROR;
+
+ 005f1 b8 fc ff ff ff mov eax, -4 ; fffffffcH
+ 005f6 5b pop ebx
+
+; 1250 : ret = Z_BUF_ERROR;
+; 1251 : return ret;
+; 1252 : }
+
+ 005f7 8b e5 mov esp, ebp
+ 005f9 5d pop ebp
+ 005fa c2 08 00 ret 8
+$LN375@inflate:
+
+; 771 : }
+; 772 : else if (state->head != Z_NULL)
+
+ 005fd 8b 41 20 mov eax, DWORD PTR [ecx+32]
+ 00600 85 c0 test eax, eax
+ 00602 74 07 je SHORT $LN382@inflate
+
+; 773 : state->head->name = Z_NULL;
+
+ 00604 c7 40 1c 00 00
+ 00 00 mov DWORD PTR [eax+28], 0
+$LN382@inflate:
+
+; 774 : state->length = 0;
+
+ 0060b c7 41 40 00 00
+ 00 00 mov DWORD PTR [ecx+64], 0
+
+; 775 : state->mode = COMMENT;
+
+ 00612 c7 01 07 00 00
+ 00 mov DWORD PTR [ecx], 7
+$LN383@inflate:
+
+; 776 : case COMMENT:
+; 777 : if (state->flags & 0x1000) {
+
+ 00618 f7 41 10 00 10
+ 00 00 test DWORD PTR [ecx+16], 4096 ; 00001000H
+ 0061f 0f 84 81 00 00
+ 00 je $LN384@inflate
+
+; 778 : if (have == 0) goto inf_leave;
+
+ 00625 85 db test ebx, ebx
+ 00627 0f 84 4d ff ff
+ ff je $LN886@inflate
+
+; 779 : copy = 0;
+
+ 0062d 33 d2 xor edx, edx
+ 0062f 90 npad 1
+$LL91@inflate:
+
+; 780 : do {
+; 781 : len = (unsigned)(next[copy++]);
+
+ 00630 0f b6 04 3a movzx eax, BYTE PTR [edx+edi]
+ 00634 42 inc edx
+ 00635 89 45 d8 mov DWORD PTR _len$4$[ebp], eax
+
+; 782 : if (state->head != Z_NULL &&
+; 783 : state->head->comment != Z_NULL &&
+
+ 00638 8b 41 20 mov eax, DWORD PTR [ecx+32]
+ 0063b 85 c0 test eax, eax
+ 0063d 74 23 je SHORT $LN89@inflate
+ 0063f 8b 70 24 mov esi, DWORD PTR [eax+36]
+ 00642 89 75 cc mov DWORD PTR tv2710[ebp], esi
+ 00645 85 f6 test esi, esi
+ 00647 74 19 je SHORT $LN89@inflate
+ 00649 8b 71 40 mov esi, DWORD PTR [ecx+64]
+ 0064c 3b 70 28 cmp esi, DWORD PTR [eax+40]
+ 0064f 73 11 jae SHORT $LN89@inflate
+
+; 784 : state->length < state->head->comm_max)
+; 785 : state->head->comment[state->length++] = len;
+
+ 00651 8b 5d d8 mov ebx, DWORD PTR _len$4$[ebp]
+ 00654 8b c6 mov eax, esi
+ 00656 8b 75 cc mov esi, DWORD PTR tv2710[ebp]
+ 00659 88 1c 06 mov BYTE PTR [esi+eax], bl
+ 0065c ff 41 40 inc DWORD PTR [ecx+64]
+ 0065f 8b 5d f4 mov ebx, DWORD PTR _have$1$[ebp]
+$LN89@inflate:
+
+; 786 : } while (len && copy < have);
+
+ 00662 8b 45 d8 mov eax, DWORD PTR _len$4$[ebp]
+ 00665 85 c0 test eax, eax
+ 00667 74 04 je SHORT $LN388@inflate
+ 00669 3b d3 cmp edx, ebx
+ 0066b 72 c3 jb SHORT $LL91@inflate
+$LN388@inflate:
+
+; 787 : if (state->flags & 0x0200)
+
+ 0066d f7 41 10 00 02
+ 00 00 test DWORD PTR [ecx+16], 512 ; 00000200H
+ 00674 8b 75 ec mov esi, DWORD PTR _bits$1$[ebp]
+ 00677 89 55 c8 mov DWORD PTR _copy$4$[ebp], edx
+ 0067a 74 16 je SHORT $LN389@inflate
+
+; 788 : state->check = crc32(state->check, next, copy);
+
+ 0067c 52 push edx
+ 0067d 57 push edi
+ 0067e ff 71 18 push DWORD PTR [ecx+24]
+ 00681 e8 00 00 00 00 call _crc32@12
+ 00686 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 00689 8b 55 c8 mov edx, DWORD PTR _copy$4$[ebp]
+ 0068c 89 41 18 mov DWORD PTR [ecx+24], eax
+ 0068f 8b 45 d8 mov eax, DWORD PTR _len$4$[ebp]
+$LN389@inflate:
+
+; 789 : have -= copy;
+
+ 00692 2b da sub ebx, edx
+
+; 790 : next += copy;
+
+ 00694 03 fa add edi, edx
+ 00696 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 00699 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+
+; 791 : if (len) goto inf_leave;
+
+ 0069c 85 c0 test eax, eax
+ 0069e 0f 85 d6 fe ff
+ ff jne $LN886@inflate
+
+; 792 : }
+
+ 006a4 eb 0e jmp SHORT $LN391@inflate
+$LN384@inflate:
+
+; 793 : else if (state->head != Z_NULL)
+
+ 006a6 8b 41 20 mov eax, DWORD PTR [ecx+32]
+ 006a9 85 c0 test eax, eax
+ 006ab 74 07 je SHORT $LN391@inflate
+
+; 794 : state->head->comment = Z_NULL;
+
+ 006ad c7 40 24 00 00
+ 00 00 mov DWORD PTR [eax+36], 0
+$LN391@inflate:
+ 006b4 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+
+; 795 : state->mode = HCRC;
+
+ 006b7 c7 01 08 00 00
+ 00 mov DWORD PTR [ecx], 8
+$LN392@inflate:
+
+; 796 : case HCRC:
+; 797 : if (state->flags & 0x0200) {
+
+ 006bd f7 41 10 00 02
+ 00 00 test DWORD PTR [ecx+16], 512 ; 00000200H
+ 006c4 74 5d je SHORT $LN101@inflate
+
+; 798 : NEEDBITS(16);
+
+ 006c6 83 fe 10 cmp esi, 16 ; 00000010H
+ 006c9 73 2f jae SHORT $LN92@inflate
+ 006cb 0f 1f 44 00 00 npad 5
+$LL95@inflate:
+ 006d0 85 db test ebx, ebx
+ 006d2 0f 84 a2 fe ff
+ ff je $LN886@inflate
+ 006d8 0f b6 07 movzx eax, BYTE PTR [edi]
+ 006db 8b ce mov ecx, esi
+ 006dd d3 e0 shl eax, cl
+ 006df 83 c6 08 add esi, 8
+ 006e2 4b dec ebx
+ 006e3 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 006e6 03 d0 add edx, eax
+ 006e8 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 006eb 47 inc edi
+ 006ec 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 006ef 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 006f2 83 fe 10 cmp esi, 16 ; 00000010H
+ 006f5 72 d9 jb SHORT $LL95@inflate
+ 006f7 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+$LN92@inflate:
+
+; 799 : if (hold != (state->check & 0xffff)) {
+
+ 006fa 0f b7 41 18 movzx eax, WORD PTR [ecx+24]
+ 006fe 3b d0 cmp edx, eax
+ 00700 74 15 je SHORT $LN102@inflate
+
+; 800 : strm->msg = (char *)"header crc mismatch";
+
+ 00702 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00705 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BE@GONKLEPM@header?5crc?5mismatch?$AA@
+ 0070c c7 01 1d 00 00
+ 00 mov DWORD PTR [ecx], 29 ; 0000001dH
+ 00712 e9 05 04 00 00 jmp $LN8@inflate
+$LN102@inflate:
+
+; 801 : state->mode = BAD;
+; 802 : break;
+; 803 : }
+; 804 : INITBITS();
+
+ 00717 33 f6 xor esi, esi
+ 00719 c7 45 fc 00 00
+ 00 00 mov DWORD PTR _hold$1$[ebp], 0
+ 00720 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+$LN101@inflate:
+
+; 805 : }
+; 806 : if (state->head != Z_NULL) {
+
+ 00723 8b 51 20 mov edx, DWORD PTR [ecx+32]
+ 00726 85 d2 test edx, edx
+ 00728 74 16 je SHORT $LN396@inflate
+
+; 807 : state->head->hcrc = (int)((state->flags >> 9) & 1);
+
+ 0072a 8b 41 10 mov eax, DWORD PTR [ecx+16]
+ 0072d c1 f8 09 sar eax, 9
+ 00730 83 e0 01 and eax, 1
+ 00733 89 42 2c mov DWORD PTR [edx+44], eax
+
+; 808 : state->head->done = 1;
+
+ 00736 8b 41 20 mov eax, DWORD PTR [ecx+32]
+ 00739 c7 40 30 01 00
+ 00 00 mov DWORD PTR [eax+48], 1
+$LN396@inflate:
+
+; 809 : }
+; 810 : strm->adler = state->check = crc32(0L, Z_NULL, 0);
+
+ 00740 6a 00 push 0
+ 00742 6a 00 push 0
+ 00744 6a 00 push 0
+ 00746 e8 00 00 00 00 call _crc32@12
+ 0074b 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 0074e 8b 55 08 mov edx, DWORD PTR _strm$[ebp]
+ 00751 89 41 18 mov DWORD PTR [ecx+24], eax
+ 00754 89 42 30 mov DWORD PTR [edx+48], eax
+
+; 811 : state->mode = TYPE;
+
+ 00757 c7 01 0b 00 00
+ 00 mov DWORD PTR [ecx], 11 ; 0000000bH
+
+; 812 : break;
+
+ 0075d e9 b7 03 00 00 jmp $LN887@inflate
+$LN105@inflate:
+
+; 813 : #endif
+; 814 : case DICTID:
+; 815 : NEEDBITS(32);
+
+ 00762 83 fe 20 cmp esi, 32 ; 00000020H
+ 00765 73 24 jae SHORT $LN103@inflate
+$LL106@inflate:
+ 00767 85 db test ebx, ebx
+ 00769 0f 84 0b fe ff
+ ff je $LN886@inflate
+ 0076f 0f b6 07 movzx eax, BYTE PTR [edi]
+ 00772 8b ce mov ecx, esi
+ 00774 d3 e0 shl eax, cl
+ 00776 4b dec ebx
+ 00777 03 d0 add edx, eax
+ 00779 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 0077c 47 inc edi
+ 0077d 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00780 83 c6 08 add esi, 8
+ 00783 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 00786 83 fe 20 cmp esi, 32 ; 00000020H
+ 00789 72 dc jb SHORT $LL106@inflate
+$LN103@inflate:
+
+; 816 : strm->adler = state->check = ZSWAP32(hold);
+
+ 0078b 8b ca mov ecx, edx
+ 0078d 8b c2 mov eax, edx
+ 0078f c1 e0 10 shl eax, 16 ; 00000010H
+ 00792 81 e1 00 ff 00
+ 00 and ecx, 65280 ; 0000ff00H
+ 00798 03 c8 add ecx, eax
+ 0079a 8b c2 mov eax, edx
+ 0079c c1 e8 08 shr eax, 8
+ 0079f c1 e1 08 shl ecx, 8
+ 007a2 25 00 ff 00 00 and eax, 65280 ; 0000ff00H
+ 007a7 c1 ea 18 shr edx, 24 ; 00000018H
+ 007aa 03 c1 add eax, ecx
+ 007ac 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 007af 03 c2 add eax, edx
+ 007b1 8b 55 08 mov edx, DWORD PTR _strm$[ebp]
+ 007b4 89 41 18 mov DWORD PTR [ecx+24], eax
+ 007b7 89 42 30 mov DWORD PTR [edx+48], eax
+
+; 817 : INITBITS();
+
+ 007ba 33 d2 xor edx, edx
+ 007bc 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 007bf 33 f6 xor esi, esi
+
+; 818 : state->mode = DICT;
+
+ 007c1 c7 01 0a 00 00
+ 00 mov DWORD PTR [ecx], 10 ; 0000000aH
+$LN399@inflate:
+
+; 819 : case DICT:
+; 820 : if (state->havedict == 0) {
+
+ 007c7 83 79 0c 00 cmp DWORD PTR [ecx+12], 0
+ 007cb 0f 84 53 0d 00
+ 00 je $LN585@inflate
+
+; 823 : }
+; 824 : strm->adler = state->check = adler32(0L, Z_NULL, 0);
+
+ 007d1 6a 00 push 0
+ 007d3 6a 00 push 0
+ 007d5 6a 00 push 0
+ 007d7 e8 00 00 00 00 call _adler32@12
+ 007dc 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 007df 8b 55 08 mov edx, DWORD PTR _strm$[ebp]
+ 007e2 89 41 18 mov DWORD PTR [ecx+24], eax
+ 007e5 89 42 30 mov DWORD PTR [edx+48], eax
+ 007e8 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+
+; 825 : state->mode = TYPE;
+
+ 007eb c7 01 0b 00 00
+ 00 mov DWORD PTR [ecx], 11 ; 0000000bH
+$LN401@inflate:
+
+; 826 : case TYPE:
+; 827 : if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
+
+ 007f1 8b 45 0c mov eax, DWORD PTR _flush$[ebp]
+ 007f4 83 f8 05 cmp eax, 5
+ 007f7 0f 84 7d fd ff
+ ff je $LN886@inflate
+ 007fd 83 f8 06 cmp eax, 6
+ 00800 0f 84 74 fd ff
+ ff je $LN886@inflate
+$LN402@inflate:
+
+; 828 : case TYPEDO:
+; 829 : if (state->last) {
+
+ 00806 83 79 04 00 cmp DWORD PTR [ecx+4], 0
+ 0080a 74 1d je SHORT $LN122@inflate
+
+; 830 : BYTEBITS();
+
+ 0080c 8b ce mov ecx, esi
+ 0080e 83 e1 07 and ecx, 7
+ 00811 d3 ea shr edx, cl
+ 00813 2b f1 sub esi, ecx
+
+; 831 : state->mode = CHECK;
+
+ 00815 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 00818 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 0081b 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 0081e c7 01 1a 00 00
+ 00 mov DWORD PTR [ecx], 26 ; 0000001aH
+
+; 832 : break;
+
+ 00824 e9 f3 02 00 00 jmp $LN8@inflate
+$LN122@inflate:
+
+; 833 : }
+; 834 : NEEDBITS(3);
+
+ 00829 83 fe 03 cmp esi, 3
+ 0082c 73 29 jae SHORT $LN120@inflate
+ 0082e 66 90 npad 2
+$LL123@inflate:
+ 00830 85 db test ebx, ebx
+ 00832 0f 84 42 fd ff
+ ff je $LN886@inflate
+ 00838 0f b6 07 movzx eax, BYTE PTR [edi]
+ 0083b 8b ce mov ecx, esi
+ 0083d d3 e0 shl eax, cl
+ 0083f 4b dec ebx
+ 00840 03 d0 add edx, eax
+ 00842 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 00845 47 inc edi
+ 00846 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00849 83 c6 08 add esi, 8
+ 0084c 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 0084f 83 fe 03 cmp esi, 3
+ 00852 72 dc jb SHORT $LL123@inflate
+ 00854 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+$LN120@inflate:
+
+; 835 : state->last = BITS(1);
+
+ 00857 8b c2 mov eax, edx
+
+; 836 : DROPBITS(1);
+
+ 00859 d1 ea shr edx, 1
+ 0085b 83 e0 01 and eax, 1
+ 0085e 89 41 04 mov DWORD PTR [ecx+4], eax
+
+; 837 : switch (BITS(2)) {
+
+ 00861 8b c2 mov eax, edx
+ 00863 83 e0 03 and eax, 3
+ 00866 83 f8 03 cmp eax, 3
+ 00869 77 64 ja SHORT $LN138@inflate
+ 0086b ff 24 85 00 00
+ 00 00 jmp DWORD PTR $LN936@inflate[eax*4]
+$LN407@inflate:
+
+; 861 : }
+; 862 : DROPBITS(2);
+
+ 00872 c1 ea 02 shr edx, 2
+ 00875 83 ee 03 sub esi, 3
+ 00878 c7 01 0d 00 00
+ 00 mov DWORD PTR [ecx], 13 ; 0000000dH
+ 0087e 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00881 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+
+; 863 : break;
+
+ 00884 e9 93 02 00 00 jmp $LN8@inflate
+$LN408@inflate:
+
+; 838 : case 0: /* stored block */
+; 839 : Tracev((stderr, "inflate: stored block%s\n",
+; 840 : state->last ? " (last)" : ""));
+; 841 : state->mode = STORED;
+; 842 : break;
+; 843 : case 1: /* fixed block */
+; 844 : fixedtables(state);
+
+ 00889 e8 00 00 00 00 call _fixedtables
+
+; 845 : Tracev((stderr, "inflate: fixed codes block%s\n",
+; 846 : state->last ? " (last)" : ""));
+; 847 : state->mode = LEN_; /* decode codes */
+; 848 : if (flush == Z_TREES) {
+
+ 0088e 83 7d 0c 06 cmp DWORD PTR _flush$[ebp], 6
+ 00892 c7 01 13 00 00
+ 00 mov DWORD PTR [ecx], 19 ; 00000013H
+ 00898 75 35 jne SHORT $LN138@inflate
+
+; 849 : DROPBITS(2);
+
+ 0089a c1 ea 02 shr edx, 2
+ 0089d 83 ee 03 sub esi, 3
+ 008a0 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+
+; 850 : goto inf_leave;
+
+ 008a3 e9 d2 fc ff ff jmp $LN886@inflate
+$LN410@inflate:
+
+; 861 : }
+; 862 : DROPBITS(2);
+
+ 008a8 c1 ea 02 shr edx, 2
+ 008ab 83 ee 03 sub esi, 3
+ 008ae c7 01 10 00 00
+ 00 mov DWORD PTR [ecx], 16 ; 00000010H
+ 008b4 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 008b7 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+
+; 863 : break;
+
+ 008ba e9 5d 02 00 00 jmp $LN8@inflate
+$LN411@inflate:
+
+; 851 : }
+; 852 : break;
+; 853 : case 2: /* dynamic block */
+; 854 : Tracev((stderr, "inflate: dynamic codes block%s\n",
+; 855 : state->last ? " (last)" : ""));
+; 856 : state->mode = TABLE;
+; 857 : break;
+; 858 : case 3:
+; 859 : strm->msg = (char *)"invalid block type";
+
+ 008bf 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 008c2 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BD@PJCBIDD@invalid?5block?5type?$AA@
+
+; 860 : state->mode = BAD;
+
+ 008c9 c7 01 1d 00 00
+ 00 mov DWORD PTR [ecx], 29 ; 0000001dH
+$LN138@inflate:
+
+; 861 : }
+; 862 : DROPBITS(2);
+
+ 008cf c1 ea 02 shr edx, 2
+ 008d2 83 ee 03 sub esi, 3
+ 008d5 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 008d8 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+
+; 863 : break;
+
+ 008db e9 3c 02 00 00 jmp $LN8@inflate
+$LN141@inflate:
+
+; 864 : case STORED:
+; 865 : BYTEBITS(); /* go to byte boundary */
+
+ 008e0 8b ce mov ecx, esi
+ 008e2 83 e1 07 and ecx, 7
+ 008e5 2b f1 sub esi, ecx
+ 008e7 d3 ea shr edx, cl
+ 008e9 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 008ec 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+
+; 866 : NEEDBITS(32);
+
+ 008ef 83 fe 20 cmp esi, 32 ; 00000020H
+ 008f2 73 27 jae SHORT $LN142@inflate
+$LL145@inflate:
+ 008f4 85 db test ebx, ebx
+ 008f6 0f 84 7e fc ff
+ ff je $LN886@inflate
+ 008fc 0f b6 07 movzx eax, BYTE PTR [edi]
+ 008ff 8b ce mov ecx, esi
+ 00901 d3 e0 shl eax, cl
+ 00903 83 c6 08 add esi, 8
+ 00906 4b dec ebx
+ 00907 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 0090a 03 d0 add edx, eax
+ 0090c 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 0090f 47 inc edi
+ 00910 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00913 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 00916 83 fe 20 cmp esi, 32 ; 00000020H
+ 00919 72 d9 jb SHORT $LL145@inflate
+$LN142@inflate:
+
+; 867 : if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
+
+ 0091b 8b c2 mov eax, edx
+ 0091d 0f b7 ca movzx ecx, dx
+ 00920 f7 d0 not eax
+ 00922 89 4d c8 mov DWORD PTR tv2704[ebp], ecx
+ 00925 c1 e8 10 shr eax, 16 ; 00000010H
+ 00928 3b c8 cmp ecx, eax
+
+; 869 : state->mode = BAD;
+
+ 0092a 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 0092d 74 15 je SHORT $LN414@inflate
+
+; 868 : strm->msg = (char *)"invalid stored block lengths";
+
+ 0092f 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00932 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BN@LGAADGOK@invalid?5stored?5block?5lengths?$AA@
+ 00939 c7 01 1d 00 00
+ 00 mov DWORD PTR [ecx], 29 ; 0000001dH
+ 0093f e9 d8 01 00 00 jmp $LN8@inflate
+$LN414@inflate:
+
+; 870 : break;
+; 871 : }
+; 872 : state->length = (unsigned)hold & 0xffff;
+
+ 00944 8b 45 c8 mov eax, DWORD PTR tv2704[ebp]
+
+; 873 : Tracev((stderr, "inflate: stored length %u\n",
+; 874 : state->length));
+; 875 : INITBITS();
+
+ 00947 33 d2 xor edx, edx
+ 00949 33 f6 xor esi, esi
+ 0094b 89 41 40 mov DWORD PTR [ecx+64], eax
+
+; 876 : state->mode = COPY_;
+; 877 : if (flush == Z_TREES) goto inf_leave;
+
+ 0094e 83 7d 0c 06 cmp DWORD PTR _flush$[ebp], 6
+ 00952 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00955 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 00958 c7 01 0e 00 00
+ 00 mov DWORD PTR [ecx], 14 ; 0000000eH
+ 0095e 0f 84 16 fc ff
+ ff je $LN886@inflate
+$LN415@inflate:
+
+; 878 : case COPY_:
+; 879 : state->mode = COPY;
+
+ 00964 c7 01 0f 00 00
+ 00 mov DWORD PTR [ecx], 15 ; 0000000fH
+$LN417@inflate:
+
+; 880 : case COPY:
+; 881 : copy = state->length;
+
+ 0096a 8b 41 40 mov eax, DWORD PTR [ecx+64]
+
+; 882 : if (copy) {
+
+ 0096d 85 c0 test eax, eax
+ 0096f 0f 84 ee 06 00
+ 00 je $LN418@inflate
+
+; 883 : if (copy > have) copy = have;
+
+ 00975 3b c3 cmp eax, ebx
+ 00977 0f 47 c3 cmova eax, ebx
+
+; 884 : if (copy > left) copy = left;
+
+ 0097a 3b 45 e8 cmp eax, DWORD PTR _left$1$[ebp]
+ 0097d 0f 47 45 e8 cmova eax, DWORD PTR _left$1$[ebp]
+ 00981 89 45 c8 mov DWORD PTR _copy$7$[ebp], eax
+
+; 885 : if (copy == 0) goto inf_leave;
+
+ 00984 85 c0 test eax, eax
+ 00986 0f 84 ee fb ff
+ ff je $LN886@inflate
+
+; 886 : zmemcpy(put, next, copy);
+
+ 0098c 50 push eax
+ 0098d 57 push edi
+ 0098e ff 75 e0 push DWORD PTR _put$1$[ebp]
+ 00991 e8 00 00 00 00 call _memcpy
+
+; 887 : have -= copy;
+
+ 00996 8b 45 c8 mov eax, DWORD PTR _copy$7$[ebp]
+ 00999 83 c4 0c add esp, 12 ; 0000000cH
+
+; 888 : next += copy;
+; 889 : left -= copy;
+; 890 : put += copy;
+; 891 : state->length -= copy;
+
+ 0099c 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 0099f 2b d8 sub ebx, eax
+ 009a1 29 45 e8 sub DWORD PTR _left$1$[ebp], eax
+ 009a4 03 f8 add edi, eax
+ 009a6 01 45 e0 add DWORD PTR _put$1$[ebp], eax
+ 009a9 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 009ac 29 41 40 sub DWORD PTR [ecx+64], eax
+ 009af 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+
+; 892 : break;
+
+ 009b2 e9 62 01 00 00 jmp $LN887@inflate
+$LN155@inflate:
+
+; 893 : }
+; 894 : Tracev((stderr, "inflate: stored end\n"));
+; 895 : state->mode = TYPE;
+; 896 : break;
+; 897 : case TABLE:
+; 898 : NEEDBITS(14);
+
+ 009b7 83 fe 0e cmp esi, 14 ; 0000000eH
+ 009ba 73 2b jae SHORT $LN153@inflate
+ 009bc 0f 1f 40 00 npad 4
+$LL156@inflate:
+ 009c0 85 db test ebx, ebx
+ 009c2 0f 84 b2 fb ff
+ ff je $LN886@inflate
+ 009c8 0f b6 07 movzx eax, BYTE PTR [edi]
+ 009cb 8b ce mov ecx, esi
+ 009cd d3 e0 shl eax, cl
+ 009cf 4b dec ebx
+ 009d0 03 d0 add edx, eax
+ 009d2 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 009d5 47 inc edi
+ 009d6 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 009d9 83 c6 08 add esi, 8
+ 009dc 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 009df 83 fe 0e cmp esi, 14 ; 0000000eH
+ 009e2 72 dc jb SHORT $LL156@inflate
+ 009e4 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+$LN153@inflate:
+
+; 899 : state->nlen = BITS(5) + 257;
+
+ 009e7 8b c2 mov eax, edx
+
+; 900 : DROPBITS(5);
+; 901 : state->ndist = BITS(5) + 1;
+; 902 : DROPBITS(5);
+; 903 : state->ncode = BITS(4) + 4;
+; 904 : DROPBITS(4);
+
+ 009e9 83 ee 0e sub esi, 14 ; 0000000eH
+ 009ec 83 e0 1f and eax, 31 ; 0000001fH
+ 009ef c1 ea 05 shr edx, 5
+ 009f2 05 01 01 00 00 add eax, 257 ; 00000101H
+ 009f7 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 009fa 89 41 60 mov DWORD PTR [ecx+96], eax
+ 009fd 8b c2 mov eax, edx
+ 009ff 83 e0 1f and eax, 31 ; 0000001fH
+ 00a02 c1 ea 05 shr edx, 5
+ 00a05 40 inc eax
+ 00a06 89 41 64 mov DWORD PTR [ecx+100], eax
+ 00a09 8b c2 mov eax, edx
+ 00a0b 83 e0 0f and eax, 15 ; 0000000fH
+ 00a0e c1 ea 04 shr edx, 4
+ 00a11 83 c0 04 add eax, 4
+ 00a14 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+
+; 905 : #ifndef PKZIP_BUG_WORKAROUND
+; 906 : if (state->nlen > 286 || state->ndist > 30) {
+
+ 00a17 81 79 60 1e 01
+ 00 00 cmp DWORD PTR [ecx+96], 286 ; 0000011eH
+ 00a1e 89 41 5c mov DWORD PTR [ecx+92], eax
+ 00a21 0f 87 0e 01 00
+ 00 ja $LN425@inflate
+ 00a27 83 79 64 1e cmp DWORD PTR [ecx+100], 30 ; 0000001eH
+ 00a2b 0f 87 04 01 00
+ 00 ja $LN425@inflate
+
+; 908 : state->mode = BAD;
+; 909 : break;
+; 910 : }
+; 911 : #endif
+; 912 : Tracev((stderr, "inflate: table sizes ok\n"));
+; 913 : state->have = 0;
+
+ 00a31 c7 41 68 00 00
+ 00 00 mov DWORD PTR [ecx+104], 0
+
+; 914 : state->mode = LENLENS;
+
+ 00a38 c7 01 11 00 00
+ 00 mov DWORD PTR [ecx], 17 ; 00000011H
+$LN531@inflate:
+
+; 915 : case LENLENS:
+; 916 : while (state->have < state->ncode) {
+
+ 00a3e 8b 41 68 mov eax, DWORD PTR [ecx+104]
+ 00a41 3b 41 5c cmp eax, DWORD PTR [ecx+92]
+ 00a44 73 65 jae SHORT $LN533@inflate
+$LL170@inflate:
+
+; 917 : NEEDBITS(3);
+
+ 00a46 83 fe 03 cmp esi, 3
+ 00a49 73 29 jae SHORT $LN172@inflate
+ 00a4b 0f 1f 44 00 00 npad 5
+$LL175@inflate:
+ 00a50 85 db test ebx, ebx
+ 00a52 0f 84 22 fb ff
+ ff je $LN886@inflate
+ 00a58 0f b6 07 movzx eax, BYTE PTR [edi]
+ 00a5b 8b ce mov ecx, esi
+ 00a5d d3 e0 shl eax, cl
+ 00a5f 4b dec ebx
+ 00a60 03 d0 add edx, eax
+ 00a62 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 00a65 47 inc edi
+ 00a66 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00a69 83 c6 08 add esi, 8
+ 00a6c 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 00a6f 83 fe 03 cmp esi, 3
+ 00a72 72 dc jb SHORT $LL175@inflate
+$LN172@inflate:
+
+; 918 : state->lens[order[state->have++]] = (unsigned short)BITS(3);
+
+ 00a74 8b 45 f8 mov eax, DWORD PTR _state$1$[ebp]
+ 00a77 8b ca mov ecx, edx
+ 00a79 8b 7d f8 mov edi, DWORD PTR _state$1$[ebp]
+ 00a7c 83 e1 07 and ecx, 7
+
+; 919 : DROPBITS(3);
+
+ 00a7f c1 ea 03 shr edx, 3
+ 00a82 83 ee 03 sub esi, 3
+ 00a85 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00a88 8b 40 68 mov eax, DWORD PTR [eax+104]
+ 00a8b 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 00a8e 0f b7 04 45 00
+ 00 00 00 movzx eax, WORD PTR ?order@?1??inflate@@9@9[eax*2]
+ 00a96 66 89 4c 47 70 mov WORD PTR [edi+eax*2+112], cx
+ 00a9b 8b cf mov ecx, edi
+ 00a9d 8b 7d f0 mov edi, DWORD PTR _next$1$[ebp]
+ 00aa0 ff 41 68 inc DWORD PTR [ecx+104]
+ 00aa3 8b 41 68 mov eax, DWORD PTR [ecx+104]
+ 00aa6 3b 41 5c cmp eax, DWORD PTR [ecx+92]
+ 00aa9 72 9b jb SHORT $LL170@inflate
+$LN533@inflate:
+
+; 920 : }
+; 921 : while (state->have < 19)
+
+ 00aab 83 79 68 13 cmp DWORD PTR [ecx+104], 19 ; 00000013H
+ 00aaf 73 1b jae SHORT $LN184@inflate
+$LL183@inflate:
+
+; 922 : state->lens[order[state->have++]] = 0;
+
+ 00ab1 8b 41 68 mov eax, DWORD PTR [ecx+104]
+ 00ab4 33 d2 xor edx, edx
+ 00ab6 0f b7 04 45 00
+ 00 00 00 movzx eax, WORD PTR ?order@?1??inflate@@9@9[eax*2]
+ 00abe 66 89 54 41 70 mov WORD PTR [ecx+eax*2+112], dx
+ 00ac3 ff 41 68 inc DWORD PTR [ecx+104]
+ 00ac6 83 79 68 13 cmp DWORD PTR [ecx+104], 19 ; 00000013H
+ 00aca 72 e5 jb SHORT $LL183@inflate
+$LN184@inflate:
+
+; 923 : state->next = state->codes;
+; 924 : state->lencode = (const code FAR *)(state->next);
+
+ 00acc 8b 55 f8 mov edx, DWORD PTR _state$1$[ebp]
+ 00acf 8d 81 30 05 00
+ 00 lea eax, DWORD PTR [ecx+1328]
+ 00ad5 83 c1 6c add ecx, 108 ; 0000006cH
+ 00ad8 89 42 4c mov DWORD PTR [edx+76], eax
+ 00adb 89 01 mov DWORD PTR [ecx], eax
+
+; 925 : state->lenbits = 7;
+; 926 : ret = inflate_table(CODES, state->lens, 19, &(state->next),
+
+ 00add 8d 82 f0 02 00
+ 00 lea eax, DWORD PTR [edx+752]
+ 00ae3 50 push eax
+ 00ae4 8d 42 54 lea eax, DWORD PTR [edx+84]
+ 00ae7 c7 42 54 07 00
+ 00 00 mov DWORD PTR [edx+84], 7
+ 00aee 50 push eax
+ 00aef 51 push ecx
+ 00af0 6a 13 push 19 ; 00000013H
+ 00af2 83 c2 70 add edx, 112 ; 00000070H
+ 00af5 33 c9 xor ecx, ecx
+ 00af7 e8 00 00 00 00 call _inflate_table
+
+; 930 : state->mode = BAD;
+
+ 00afc 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 00aff 83 c4 10 add esp, 16 ; 00000010H
+ 00b02 89 45 d4 mov DWORD PTR _ret$1$[ebp], eax
+ 00b05 85 c0 test eax, eax
+ 00b07 74 3e je SHORT $LN428@inflate
+
+; 927 : &(state->lenbits), state->work);
+; 928 : if (ret) {
+; 929 : strm->msg = (char *)"invalid code lengths set";
+
+ 00b09 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00b0c c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BJ@HDEPPGOH@invalid?5code?5lengths?5set?$AA@
+$LN931@inflate:
+
+; 990 : state->mode = BAD;
+
+ 00b13 c7 01 1d 00 00
+ 00 mov DWORD PTR [ecx], 29 ; 0000001dH
+$LN887@inflate:
+ 00b19 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+$LN8@inflate:
+
+; 638 : for (;;)
+; 639 : switch (state->mode) {
+
+ 00b1c 8b 01 mov eax, DWORD PTR [ecx]
+ 00b1e 83 f8 1e cmp eax, 30 ; 0000001eH
+ 00b21 0f 86 6a f5 ff
+ ff jbe $LL5@inflate
+$LN498@inflate:
+ 00b27 5f pop edi
+ 00b28 5e pop esi
+
+; 1216 : goto inf_leave;
+; 1217 : case MEM:
+; 1218 : return Z_MEM_ERROR;
+; 1219 : case SYNC:
+; 1220 : default:
+; 1221 : return Z_STREAM_ERROR;
+
+ 00b29 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 00b2e 5b pop ebx
+
+; 1250 : ret = Z_BUF_ERROR;
+; 1251 : return ret;
+; 1252 : }
+
+ 00b2f 8b e5 mov esp, ebp
+ 00b31 5d pop ebp
+ 00b32 c2 08 00 ret 8
+$LN425@inflate:
+
+; 907 : strm->msg = (char *)"too many length or distance symbols";
+
+ 00b35 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00b38 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0CE@GMIGFPBB@too?5many?5length?5or?5distance?5symb@
+ 00b3f c7 01 1d 00 00
+ 00 mov DWORD PTR [ecx], 29 ; 0000001dH
+ 00b45 eb d5 jmp SHORT $LN8@inflate
+$LN428@inflate:
+
+; 931 : break;
+; 932 : }
+; 933 : Tracev((stderr, "inflate: code lengths ok\n"));
+; 934 : state->have = 0;
+
+ 00b47 c7 41 68 00 00
+ 00 00 mov DWORD PTR [ecx+104], 0
+
+; 935 : state->mode = CODELENS;
+
+ 00b4e c7 01 12 00 00
+ 00 mov DWORD PTR [ecx], 18 ; 00000012H
+$LN534@inflate:
+
+; 936 : case CODELENS:
+; 937 : while (state->have < state->nlen + state->ndist) {
+
+ 00b54 8b 41 64 mov eax, DWORD PTR [ecx+100]
+ 00b57 8b 51 68 mov edx, DWORD PTR [ecx+104]
+ 00b5a 03 41 60 add eax, DWORD PTR [ecx+96]
+ 00b5d 89 55 d8 mov DWORD PTR tv2696[ebp], edx
+ 00b60 3b d0 cmp edx, eax
+ 00b62 0f 83 12 02 00
+ 00 jae $LN186@inflate
+ 00b68 0f 1f 84 00 00
+ 00 00 00 npad 8
+$LL185@inflate:
+
+; 938 : for (;;) {
+; 939 : here = state->lencode[BITS(state->lenbits)];
+
+ 00b70 8b 45 d0 mov eax, DWORD PTR tv2779[ebp]
+ 00b73 ba 01 00 00 00 mov edx, 1
+ 00b78 8b 08 mov ecx, DWORD PTR [eax]
+ 00b7a 8b 45 f8 mov eax, DWORD PTR _state$1$[ebp]
+ 00b7d d3 e2 shl edx, cl
+ 00b7f 4a dec edx
+ 00b80 23 55 fc and edx, DWORD PTR _hold$1$[ebp]
+ 00b83 8b 40 4c mov eax, DWORD PTR [eax+76]
+ 00b86 8b 04 90 mov eax, DWORD PTR [eax+edx*4]
+
+; 940 : if ((unsigned)(here.bits) <= bits) break;
+
+ 00b89 8b c8 mov ecx, eax
+ 00b8b c1 e9 08 shr ecx, 8
+ 00b8e 0f b6 c9 movzx ecx, cl
+ 00b91 89 45 c8 mov DWORD PTR _here$[ebp], eax
+ 00b94 3b ce cmp ecx, esi
+ 00b96 76 45 jbe SHORT $LN561@inflate
+$LL187@inflate:
+
+; 941 : PULLBYTE();
+
+ 00b98 85 db test ebx, ebx
+ 00b9a 0f 84 da f9 ff
+ ff je $LN886@inflate
+ 00ba0 0f b6 07 movzx eax, BYTE PTR [edi]
+ 00ba3 8b ce mov ecx, esi
+ 00ba5 d3 e0 shl eax, cl
+ 00ba7 ba 01 00 00 00 mov edx, 1
+ 00bac 01 45 fc add DWORD PTR _hold$1$[ebp], eax
+ 00baf 4b dec ebx
+ 00bb0 8b 45 d0 mov eax, DWORD PTR tv2779[ebp]
+ 00bb3 47 inc edi
+ 00bb4 83 c6 08 add esi, 8
+ 00bb7 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 00bba 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 00bbd 8b 08 mov ecx, DWORD PTR [eax]
+ 00bbf 8b 45 f8 mov eax, DWORD PTR _state$1$[ebp]
+ 00bc2 d3 e2 shl edx, cl
+ 00bc4 4a dec edx
+ 00bc5 23 55 fc and edx, DWORD PTR _hold$1$[ebp]
+ 00bc8 8b 40 4c mov eax, DWORD PTR [eax+76]
+ 00bcb 8b 04 90 mov eax, DWORD PTR [eax+edx*4]
+ 00bce 8b c8 mov ecx, eax
+ 00bd0 c1 e9 08 shr ecx, 8
+ 00bd3 0f b6 c9 movzx ecx, cl
+ 00bd6 89 45 c8 mov DWORD PTR _here$[ebp], eax
+ 00bd9 3b ce cmp ecx, esi
+ 00bdb 77 bb ja SHORT $LL187@inflate
+$LN561@inflate:
+
+; 942 : }
+; 943 : if (here.val < 16) {
+
+ 00bdd 8b d0 mov edx, eax
+ 00bdf c1 ea 10 shr edx, 16 ; 00000010H
+ 00be2 66 83 fa 10 cmp dx, 16 ; 00000010H
+ 00be6 73 21 jae SHORT $LN928@inflate
+
+; 944 : DROPBITS(here.bits);
+
+ 00be8 c1 e8 08 shr eax, 8
+ 00beb 0f b6 c8 movzx ecx, al
+ 00bee d3 6d fc shr DWORD PTR _hold$1$[ebp], cl
+ 00bf1 2b f1 sub esi, ecx
+
+; 945 : state->lens[state->have++] = here.val;
+
+ 00bf3 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 00bf6 8b 45 d8 mov eax, DWORD PTR tv2696[ebp]
+ 00bf9 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 00bfc 66 89 54 41 70 mov WORD PTR [ecx+eax*2+112], dx
+ 00c01 ff 41 68 inc DWORD PTR [ecx+104]
+
+; 946 : }
+
+ 00c04 e9 5d 01 00 00 jmp $LN609@inflate
+$LN928@inflate:
+
+; 947 : else {
+; 948 : if (here.val == 16) {
+
+ 00c09 75 70 jne SHORT $LN434@inflate
+
+; 949 : NEEDBITS(here.bits + 2);
+
+ 00c0b 8b c8 mov ecx, eax
+ 00c0d c1 e9 08 shr ecx, 8
+ 00c10 0f b6 c9 movzx ecx, cl
+ 00c13 83 c1 02 add ecx, 2
+ 00c16 89 4d c8 mov DWORD PTR $T1[ebp], ecx
+ 00c19 3b f1 cmp esi, ecx
+ 00c1b 73 25 jae SHORT $LN196@inflate
+ 00c1d 0f 1f 00 npad 3
+$LL199@inflate:
+ 00c20 85 db test ebx, ebx
+ 00c22 0f 84 52 f9 ff
+ ff je $LN886@inflate
+ 00c28 0f b6 17 movzx edx, BYTE PTR [edi]
+ 00c2b 8b ce mov ecx, esi
+ 00c2d d3 e2 shl edx, cl
+ 00c2f 4b dec ebx
+ 00c30 01 55 fc add DWORD PTR _hold$1$[ebp], edx
+ 00c33 47 inc edi
+ 00c34 83 c6 08 add esi, 8
+ 00c37 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 00c3a 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 00c3d 3b 75 c8 cmp esi, DWORD PTR $T1[ebp]
+ 00c40 72 de jb SHORT $LL199@inflate
+$LN196@inflate:
+
+; 950 : DROPBITS(here.bits);
+
+ 00c42 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+ 00c45 0f b6 cc movzx ecx, ah
+
+; 951 : if (state->have == 0) {
+
+ 00c48 8b 45 d8 mov eax, DWORD PTR tv2696[ebp]
+ 00c4b 2b f1 sub esi, ecx
+ 00c4d d3 ea shr edx, cl
+
+; 953 : state->mode = BAD;
+; 954 : break;
+; 955 : }
+; 956 : len = state->lens[state->have - 1];
+
+ 00c4f 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 00c52 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00c55 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 00c58 85 c0 test eax, eax
+ 00c5a 0f 84 3c 01 00
+ 00 je $LN566@inflate
+ 00c60 0f b7 44 41 6e movzx eax, WORD PTR [ecx+eax*2+110]
+
+; 957 : copy = 3 + BITS(2);
+
+ 00c65 8b ca mov ecx, edx
+ 00c67 83 e1 03 and ecx, 3
+
+; 958 : DROPBITS(2);
+
+ 00c6a c1 ea 02 shr edx, 2
+ 00c6d 83 c1 03 add ecx, 3
+ 00c70 89 45 c8 mov DWORD PTR _len$5$[ebp], eax
+ 00c73 83 ee 02 sub esi, 2
+
+; 959 : }
+
+ 00c76 e9 ac 00 00 00 jmp $LN929@inflate
+$LN434@inflate:
+
+; 960 : else if (here.val == 17) {
+
+ 00c7b 66 83 7d ca 11 cmp WORD PTR _here$[ebp+2], 17 ; 00000011H
+ 00c80 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+
+; 961 : NEEDBITS(here.bits + 3);
+
+ 00c83 0f b6 cc movzx ecx, ah
+ 00c86 75 4a jne SHORT $LN226@inflate
+ 00c88 8d 41 03 lea eax, DWORD PTR [ecx+3]
+ 00c8b 89 4d ec mov DWORD PTR tv2678[ebp], ecx
+ 00c8e 3b f0 cmp esi, eax
+ 00c90 73 29 jae SHORT $LN210@inflate
+$LL213@inflate:
+ 00c92 85 db test ebx, ebx
+ 00c94 0f 84 e0 f8 ff
+ ff je $LN886@inflate
+ 00c9a 0f b6 07 movzx eax, BYTE PTR [edi]
+ 00c9d 8b ce mov ecx, esi
+ 00c9f d3 e0 shl eax, cl
+ 00ca1 4b dec ebx
+ 00ca2 8b 4d ec mov ecx, DWORD PTR tv2678[ebp]
+ 00ca5 03 d0 add edx, eax
+ 00ca7 47 inc edi
+ 00ca8 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 00cab 83 c6 08 add esi, 8
+ 00cae 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00cb1 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 00cb4 8d 41 03 lea eax, DWORD PTR [ecx+3]
+ 00cb7 3b f0 cmp esi, eax
+ 00cb9 72 d7 jb SHORT $LL213@inflate
+$LN210@inflate:
+
+; 962 : DROPBITS(here.bits);
+
+ 00cbb d3 ea shr edx, cl
+
+; 963 : len = 0;
+; 964 : copy = 3 + BITS(3);
+; 965 : DROPBITS(3);
+
+ 00cbd b8 fd ff ff ff mov eax, -3 ; fffffffdH
+ 00cc2 8b ca mov ecx, edx
+ 00cc4 c1 ea 03 shr edx, 3
+ 00cc7 83 e1 07 and ecx, 7
+ 00cca 83 c1 03 add ecx, 3
+ 00ccd 2b 45 ec sub eax, DWORD PTR tv2678[ebp]
+
+; 966 : }
+
+ 00cd0 eb 4c jmp SHORT $LN930@inflate
+$LN226@inflate:
+
+; 967 : else {
+; 968 : NEEDBITS(here.bits + 7);
+
+ 00cd2 8d 41 07 lea eax, DWORD PTR [ecx+7]
+ 00cd5 89 4d ec mov DWORD PTR tv2677[ebp], ecx
+ 00cd8 3b f0 cmp esi, eax
+ 00cda 73 2d jae SHORT $LN224@inflate
+ 00cdc 0f 1f 40 00 npad 4
+$LL227@inflate:
+ 00ce0 85 db test ebx, ebx
+ 00ce2 0f 84 92 f8 ff
+ ff je $LN886@inflate
+ 00ce8 0f b6 07 movzx eax, BYTE PTR [edi]
+ 00ceb 8b ce mov ecx, esi
+ 00ced d3 e0 shl eax, cl
+ 00cef 4b dec ebx
+ 00cf0 8b 4d ec mov ecx, DWORD PTR tv2677[ebp]
+ 00cf3 03 d0 add edx, eax
+ 00cf5 47 inc edi
+ 00cf6 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 00cf9 83 c6 08 add esi, 8
+ 00cfc 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00cff 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 00d02 8d 41 07 lea eax, DWORD PTR [ecx+7]
+ 00d05 3b f0 cmp esi, eax
+ 00d07 72 d7 jb SHORT $LL227@inflate
+$LN224@inflate:
+
+; 969 : DROPBITS(here.bits);
+
+ 00d09 d3 ea shr edx, cl
+
+; 970 : len = 0;
+; 971 : copy = 11 + BITS(7);
+; 972 : DROPBITS(7);
+
+ 00d0b b8 f9 ff ff ff mov eax, -7 ; fffffff9H
+ 00d10 8b ca mov ecx, edx
+ 00d12 c1 ea 07 shr edx, 7
+ 00d15 83 e1 7f and ecx, 127 ; 0000007fH
+ 00d18 83 c1 0b add ecx, 11 ; 0000000bH
+ 00d1b 2b 45 ec sub eax, DWORD PTR tv2677[ebp]
+$LN930@inflate:
+ 00d1e 03 f0 add esi, eax
+ 00d20 c7 45 c8 00 00
+ 00 00 mov DWORD PTR _len$5$[ebp], 0
+$LN929@inflate:
+
+; 973 : }
+; 974 : if (state->have + copy > state->nlen + state->ndist) {
+
+ 00d27 8b 45 f8 mov eax, DWORD PTR _state$1$[ebp]
+ 00d2a 8b 7d f8 mov edi, DWORD PTR _state$1$[ebp]
+ 00d2d 89 4d cc mov DWORD PTR _copy$8$[ebp], ecx
+ 00d30 03 4d d8 add ecx, DWORD PTR tv2696[ebp]
+ 00d33 8b 40 64 mov eax, DWORD PTR [eax+100]
+ 00d36 03 47 60 add eax, DWORD PTR [edi+96]
+ 00d39 8b 7d f0 mov edi, DWORD PTR _next$1$[ebp]
+ 00d3c 3b c8 cmp ecx, eax
+ 00d3e 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 00d41 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00d44 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 00d47 77 53 ja SHORT $LN566@inflate
+
+; 975 : strm->msg = (char *)"invalid bit length repeat";
+; 976 : state->mode = BAD;
+; 977 : break;
+; 978 : }
+; 979 : while (copy--)
+
+ 00d49 8b 55 cc mov edx, DWORD PTR _copy$8$[ebp]
+ 00d4c 85 d2 test edx, edx
+ 00d4e 74 16 je SHORT $LN609@inflate
+ 00d50 8b 5d c8 mov ebx, DWORD PTR _len$5$[ebp]
+$LL238@inflate:
+
+; 980 : state->lens[state->have++] = (unsigned short)len;
+
+ 00d53 8b 41 68 mov eax, DWORD PTR [ecx+104]
+ 00d56 66 89 5c 41 70 mov WORD PTR [ecx+eax*2+112], bx
+ 00d5b ff 41 68 inc DWORD PTR [ecx+104]
+ 00d5e 83 ea 01 sub edx, 1
+ 00d61 75 f0 jne SHORT $LL238@inflate
+ 00d63 8b 5d f4 mov ebx, DWORD PTR _have$1$[ebp]
+$LN609@inflate:
+
+; 936 : case CODELENS:
+; 937 : while (state->have < state->nlen + state->ndist) {
+
+ 00d66 8b 41 64 mov eax, DWORD PTR [ecx+100]
+ 00d69 8b 51 68 mov edx, DWORD PTR [ecx+104]
+ 00d6c 03 41 60 add eax, DWORD PTR [ecx+96]
+ 00d6f 89 55 d8 mov DWORD PTR tv2696[ebp], edx
+ 00d72 3b d0 cmp edx, eax
+ 00d74 0f 82 f6 fd ff
+ ff jb $LL185@inflate
+$LN186@inflate:
+
+; 981 : }
+; 982 : }
+; 983 :
+; 984 : /* handle error breaks in while */
+; 985 : if (state->mode == BAD) break;
+
+ 00d7a 83 39 1d cmp DWORD PTR [ecx], 29 ; 0000001dH
+ 00d7d 0f 84 96 fd ff
+ ff je $LN887@inflate
+
+; 986 :
+; 987 : /* check for end-of-block code (better have one) */
+; 988 : if (state->lens[256] == 0) {
+
+ 00d83 66 83 b9 70 02
+ 00 00 00 cmp WORD PTR [ecx+624], 0
+ 00d8b 75 24 jne SHORT $LN444@inflate
+
+; 989 : strm->msg = (char *)"invalid code -- missing end-of-block";
+
+ 00d8d 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00d90 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0CF@DGDMADCD@invalid?5code?5?9?9?5missing?5end?9of?9b@
+
+; 991 : break;
+
+ 00d97 e9 77 fd ff ff jmp $LN931@inflate
+$LN566@inflate:
+
+; 952 : strm->msg = (char *)"invalid bit length repeat";
+
+ 00d9c 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00d9f c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BK@BMMPFBBH@invalid?5bit?5length?5repeat?$AA@
+ 00da6 c7 01 1d 00 00
+ 00 mov DWORD PTR [ecx], 29 ; 0000001dH
+ 00dac e9 6b fd ff ff jmp $LN8@inflate
+$LN444@inflate:
+
+; 992 : }
+; 993 :
+; 994 : /* build code tables -- note: do not change the lenbits or distbits
+; 995 : values here (9 and 6) without reading the comments in inftrees.h
+; 996 : concerning the ENOUGH constants, which depend on those values */
+; 997 : state->next = state->codes;
+
+ 00db1 8d 51 6c lea edx, DWORD PTR [ecx+108]
+
+; 998 : state->lencode = (const code FAR *)(state->next);
+; 999 : state->lenbits = 9;
+
+ 00db4 c7 41 54 09 00
+ 00 00 mov DWORD PTR [ecx+84], 9
+ 00dbb 8d 81 30 05 00
+ 00 lea eax, DWORD PTR [ecx+1328]
+ 00dc1 89 55 c8 mov DWORD PTR tv2690[ebp], edx
+ 00dc4 89 02 mov DWORD PTR [edx], eax
+ 00dc6 89 41 4c mov DWORD PTR [ecx+76], eax
+
+; 1000 : ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
+
+ 00dc9 8d 81 f0 02 00
+ 00 lea eax, DWORD PTR [ecx+752]
+ 00dcf 50 push eax
+ 00dd0 8d 41 54 lea eax, DWORD PTR [ecx+84]
+ 00dd3 50 push eax
+ 00dd4 52 push edx
+ 00dd5 ff 71 60 push DWORD PTR [ecx+96]
+ 00dd8 8d 51 70 lea edx, DWORD PTR [ecx+112]
+ 00ddb b9 01 00 00 00 mov ecx, 1
+ 00de0 e8 00 00 00 00 call _inflate_table
+
+; 1004 : state->mode = BAD;
+
+ 00de5 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 00de8 83 c4 10 add esp, 16 ; 00000010H
+ 00deb 89 45 d4 mov DWORD PTR _ret$1$[ebp], eax
+ 00dee 85 c0 test eax, eax
+ 00df0 74 0f je SHORT $LN445@inflate
+
+; 1001 : &(state->lenbits), state->work);
+; 1002 : if (ret) {
+; 1003 : strm->msg = (char *)"invalid literal/lengths set";
+
+ 00df2 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00df5 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BM@IIMGAINC@invalid?5literal?1lengths?5set?$AA@
+
+; 1005 : break;
+
+ 00dfc e9 12 fd ff ff jmp $LN931@inflate
+$LN445@inflate:
+
+; 1006 : }
+; 1007 : state->distcode = (const code FAR *)(state->next);
+
+ 00e01 8b 55 c8 mov edx, DWORD PTR tv2690[ebp]
+
+; 1008 : state->distbits = 6;
+
+ 00e04 c7 41 58 06 00
+ 00 00 mov DWORD PTR [ecx+88], 6
+ 00e0b 8b 02 mov eax, DWORD PTR [edx]
+ 00e0d 89 41 50 mov DWORD PTR [ecx+80], eax
+
+; 1009 : ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
+
+ 00e10 8d 81 f0 02 00
+ 00 lea eax, DWORD PTR [ecx+752]
+ 00e16 50 push eax
+ 00e17 8d 41 58 lea eax, DWORD PTR [ecx+88]
+ 00e1a 50 push eax
+ 00e1b 8b 41 60 mov eax, DWORD PTR [ecx+96]
+ 00e1e 52 push edx
+ 00e1f ff 71 64 push DWORD PTR [ecx+100]
+ 00e22 83 c1 70 add ecx, 112 ; 00000070H
+ 00e25 8d 14 41 lea edx, DWORD PTR [ecx+eax*2]
+ 00e28 b9 02 00 00 00 mov ecx, 2
+ 00e2d e8 00 00 00 00 call _inflate_table
+
+; 1013 : state->mode = BAD;
+
+ 00e32 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 00e35 83 c4 10 add esp, 16 ; 00000010H
+ 00e38 89 45 d4 mov DWORD PTR _ret$1$[ebp], eax
+ 00e3b 85 c0 test eax, eax
+ 00e3d 74 0f je SHORT $LN446@inflate
+
+; 1010 : &(state->next), &(state->distbits), state->work);
+; 1011 : if (ret) {
+; 1012 : strm->msg = (char *)"invalid distances set";
+
+ 00e3f 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00e42 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BG@GMDFCBGP@invalid?5distances?5set?$AA@
+
+; 1014 : break;
+
+ 00e49 e9 c5 fc ff ff jmp $LN931@inflate
+$LN446@inflate:
+
+; 1015 : }
+; 1016 : Tracev((stderr, "inflate: codes ok\n"));
+; 1017 : state->mode = LEN_;
+; 1018 : if (flush == Z_TREES) goto inf_leave;
+
+ 00e4e 8b 55 0c mov edx, DWORD PTR _flush$[ebp]
+ 00e51 c7 01 13 00 00
+ 00 mov DWORD PTR [ecx], 19 ; 00000013H
+ 00e57 83 fa 06 cmp edx, 6
+ 00e5a 0f 84 16 07 00
+ 00 je $LN862@inflate
+ 00e60 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+$LN447@inflate:
+
+; 1019 : case LEN_:
+; 1020 : state->mode = LEN;
+
+ 00e63 c7 01 14 00 00
+ 00 mov DWORD PTR [ecx], 20 ; 00000014H
+$LN449@inflate:
+
+; 1021 : case LEN:
+; 1022 : if (have >= 6 && left >= 258) {
+
+ 00e69 83 fb 06 cmp ebx, 6
+ 00e6c 72 71 jb SHORT $LN450@inflate
+ 00e6e 81 7d e8 02 01
+ 00 00 cmp DWORD PTR _left$1$[ebp], 258 ; 00000102H
+ 00e75 72 68 jb SHORT $LN450@inflate
+
+; 1023 : RESTORE();
+
+ 00e77 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00e7a 8b 7d e0 mov edi, DWORD PTR _put$1$[ebp]
+ 00e7d 89 78 0c mov DWORD PTR [eax+12], edi
+ 00e80 8b 7d e8 mov edi, DWORD PTR _left$1$[ebp]
+ 00e83 89 78 10 mov DWORD PTR [eax+16], edi
+ 00e86 8b 7d f0 mov edi, DWORD PTR _next$1$[ebp]
+ 00e89 89 38 mov DWORD PTR [eax], edi
+ 00e8b 89 58 04 mov DWORD PTR [eax+4], ebx
+ 00e8e 89 51 38 mov DWORD PTR [ecx+56], edx
+
+; 1024 : inflate_fast(strm, out);
+
+ 00e91 8b 55 dc mov edx, DWORD PTR _out$1$[ebp]
+ 00e94 89 71 3c mov DWORD PTR [ecx+60], esi
+ 00e97 8b c8 mov ecx, eax
+ 00e99 e8 00 00 00 00 call _inflate_fast
+
+; 1025 : LOAD();
+
+ 00e9e 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00ea1 8b 48 0c mov ecx, DWORD PTR [eax+12]
+ 00ea4 8b 38 mov edi, DWORD PTR [eax]
+ 00ea6 8b 58 04 mov ebx, DWORD PTR [eax+4]
+ 00ea9 89 4d e0 mov DWORD PTR _put$1$[ebp], ecx
+ 00eac 8b 48 10 mov ecx, DWORD PTR [eax+16]
+ 00eaf 89 4d e8 mov DWORD PTR _left$1$[ebp], ecx
+ 00eb2 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 00eb5 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 00eb8 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+
+; 1026 : if (state->mode == TYPE)
+
+ 00ebb 83 39 0b cmp DWORD PTR [ecx], 11 ; 0000000bH
+ 00ebe 8b 51 38 mov edx, DWORD PTR [ecx+56]
+ 00ec1 8b 71 3c mov esi, DWORD PTR [ecx+60]
+ 00ec4 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00ec7 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 00eca 0f 85 4c fc ff
+ ff jne $LN8@inflate
+
+; 1027 : state->back = -1;
+
+ 00ed0 c7 81 c4 1b 00
+ 00 ff ff ff ff mov DWORD PTR [ecx+7108], -1
+
+; 1028 : break;
+
+ 00eda e9 3d fc ff ff jmp $LN8@inflate
+$LN450@inflate:
+
+; 1029 : }
+; 1030 : state->back = 0;
+; 1031 : for (;;) {
+; 1032 : here = state->lencode[BITS(state->lenbits)];
+
+ 00edf 8b 41 4c mov eax, DWORD PTR [ecx+76]
+ 00ee2 c7 81 c4 1b 00
+ 00 00 00 00 00 mov DWORD PTR [ecx+7108], 0
+ 00eec 8b 4d d0 mov ecx, DWORD PTR tv2779[ebp]
+ 00eef 89 45 cc mov DWORD PTR tv2688[ebp], eax
+ 00ef2 b8 01 00 00 00 mov eax, 1
+ 00ef7 8b 09 mov ecx, DWORD PTR [ecx]
+ 00ef9 d3 e0 shl eax, cl
+ 00efb 8b 4d cc mov ecx, DWORD PTR tv2688[ebp]
+ 00efe 48 dec eax
+ 00eff 23 c2 and eax, edx
+ 00f01 8b 04 81 mov eax, DWORD PTR [ecx+eax*4]
+
+; 1033 : if ((unsigned)(here.bits) <= bits) break;
+
+ 00f04 8b c8 mov ecx, eax
+ 00f06 c1 e9 08 shr ecx, 8
+ 00f09 0f b6 c9 movzx ecx, cl
+ 00f0c 3b ce cmp ecx, esi
+ 00f0e 76 47 jbe SHORT $LN568@inflate
+$LL246@inflate:
+
+; 1034 : PULLBYTE();
+
+ 00f10 85 db test ebx, ebx
+ 00f12 0f 84 62 f6 ff
+ ff je $LN886@inflate
+ 00f18 0f b6 07 movzx eax, BYTE PTR [edi]
+ 00f1b 8b ce mov ecx, esi
+ 00f1d d3 e0 shl eax, cl
+ 00f1f 4b dec ebx
+ 00f20 03 d0 add edx, eax
+ 00f22 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 00f25 8b 45 d0 mov eax, DWORD PTR tv2779[ebp]
+ 00f28 47 inc edi
+ 00f29 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 00f2c 83 c6 08 add esi, 8
+ 00f2f ba 01 00 00 00 mov edx, 1
+ 00f34 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 00f37 8b 08 mov ecx, DWORD PTR [eax]
+ 00f39 8b 45 f8 mov eax, DWORD PTR _state$1$[ebp]
+ 00f3c d3 e2 shl edx, cl
+ 00f3e 4a dec edx
+ 00f3f 23 55 fc and edx, DWORD PTR _hold$1$[ebp]
+ 00f42 8b 40 4c mov eax, DWORD PTR [eax+76]
+ 00f45 8b 04 90 mov eax, DWORD PTR [eax+edx*4]
+ 00f48 8b c8 mov ecx, eax
+ 00f4a 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+ 00f4d c1 e9 08 shr ecx, 8
+ 00f50 0f b6 c9 movzx ecx, cl
+ 00f53 3b ce cmp ecx, esi
+ 00f55 77 b9 ja SHORT $LL246@inflate
+$LN568@inflate:
+
+; 1035 : }
+; 1036 : if (here.op && (here.op & 0xf0) == 0) {
+
+ 00f57 84 c0 test al, al
+ 00f59 0f 84 be 00 00
+ 00 je $LN263@inflate
+ 00f5f a8 f0 test al, 240 ; 000000f0H
+ 00f61 0f 85 b6 00 00
+ 00 jne $LN263@inflate
+
+; 1037 : last = here;
+; 1038 : for (;;) {
+; 1039 : here = state->lencode[last.val +
+
+ 00f67 8b c8 mov ecx, eax
+ 00f69 bb 01 00 00 00 mov ebx, 1
+ 00f6e c1 e9 08 shr ecx, 8
+ 00f71 8b d0 mov edx, eax
+ 00f73 0f b6 f9 movzx edi, cl
+ 00f76 89 4d d8 mov DWORD PTR tv2687[ebp], ecx
+ 00f79 0f b6 c8 movzx ecx, al
+ 00f7c 03 cf add ecx, edi
+ 00f7e c1 e8 10 shr eax, 16 ; 00000010H
+ 00f81 d3 e3 shl ebx, cl
+ 00f83 8b cf mov ecx, edi
+ 00f85 4b dec ebx
+ 00f86 89 55 c8 mov DWORD PTR _last$[ebp], edx
+ 00f89 23 5d fc and ebx, DWORD PTR _hold$1$[ebp]
+ 00f8c d3 eb shr ebx, cl
+ 00f8e 8b 4d cc mov ecx, DWORD PTR tv2688[ebp]
+ 00f91 03 d8 add ebx, eax
+ 00f93 8b 04 99 mov eax, DWORD PTR [ecx+ebx*4]
+
+; 1040 : (BITS(last.bits + last.op) >> last.bits)];
+; 1041 : if ((unsigned)(last.bits + here.bits) <= bits) break;
+
+ 00f96 8b c8 mov ecx, eax
+ 00f98 c1 e9 08 shr ecx, 8
+ 00f9b 0f b6 f9 movzx edi, cl
+ 00f9e 8b 4d d8 mov ecx, DWORD PTR tv2687[ebp]
+ 00fa1 0f b6 c9 movzx ecx, cl
+ 00fa4 03 f9 add edi, ecx
+ 00fa6 3b fe cmp edi, esi
+ 00fa8 76 5d jbe SHORT $LN260@inflate
+ 00faa 66 0f 1f 44 00
+ 00 npad 6
+$LL252@inflate:
+
+; 1042 : PULLBYTE();
+
+ 00fb0 8b 45 f4 mov eax, DWORD PTR _have$1$[ebp]
+ 00fb3 85 c0 test eax, eax
+ 00fb5 0f 84 c2 f5 ff
+ ff je $LN896@inflate
+ 00fbb 8b 5d f0 mov ebx, DWORD PTR _next$1$[ebp]
+ 00fbe 48 dec eax
+ 00fbf 89 45 f4 mov DWORD PTR _have$1$[ebp], eax
+ 00fc2 8b ce mov ecx, esi
+ 00fc4 bf 01 00 00 00 mov edi, 1
+ 00fc9 83 c6 08 add esi, 8
+ 00fcc 0f b6 03 movzx eax, BYTE PTR [ebx]
+ 00fcf 43 inc ebx
+ 00fd0 d3 e0 shl eax, cl
+ 00fd2 01 45 fc add DWORD PTR _hold$1$[ebp], eax
+ 00fd5 0f b7 45 ca movzx eax, WORD PTR _last$[ebp+2]
+ 00fd9 89 5d f0 mov DWORD PTR _next$1$[ebp], ebx
+ 00fdc 0f b6 de movzx ebx, dh
+ 00fdf 0f b6 ca movzx ecx, dl
+ 00fe2 03 cb add ecx, ebx
+ 00fe4 d3 e7 shl edi, cl
+ 00fe6 8b cb mov ecx, ebx
+ 00fe8 4f dec edi
+ 00fe9 23 7d fc and edi, DWORD PTR _hold$1$[ebp]
+ 00fec d3 ef shr edi, cl
+ 00fee 03 f8 add edi, eax
+ 00ff0 8b 45 f8 mov eax, DWORD PTR _state$1$[ebp]
+ 00ff3 8b 40 4c mov eax, DWORD PTR [eax+76]
+ 00ff6 8b 04 b8 mov eax, DWORD PTR [eax+edi*4]
+ 00ff9 8b c8 mov ecx, eax
+ 00ffb c1 e9 08 shr ecx, 8
+ 00ffe 0f b6 c9 movzx ecx, cl
+ 01001 03 cb add ecx, ebx
+ 01003 3b ce cmp ecx, esi
+ 01005 77 a9 ja SHORT $LL252@inflate
+$LN260@inflate:
+
+; 1043 : }
+; 1044 : DROPBITS(last.bits);
+; 1045 : state->back += last.bits;
+
+ 01007 8b 5d f8 mov ebx, DWORD PTR _state$1$[ebp]
+ 0100a 0f b6 ce movzx ecx, dh
+ 0100d 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+ 01010 d3 ea shr edx, cl
+ 01012 2b f1 sub esi, ecx
+ 01014 89 8b c4 1b 00
+ 00 mov DWORD PTR [ebx+7108], ecx
+ 0101a 8b 5d f4 mov ebx, DWORD PTR _have$1$[ebp]
+$LN263@inflate:
+
+; 1046 : }
+; 1047 : DROPBITS(here.bits);
+; 1048 : state->back += here.bits;
+
+ 0101d 8b 7d f8 mov edi, DWORD PTR _state$1$[ebp]
+ 01020 8b c8 mov ecx, eax
+ 01022 c1 e9 08 shr ecx, 8
+ 01025 0f b6 c9 movzx ecx, cl
+ 01028 d3 ea shr edx, cl
+ 0102a 2b f1 sub esi, ecx
+ 0102c 01 8f c4 1b 00
+ 00 add DWORD PTR [edi+7108], ecx
+
+; 1049 : state->length = (unsigned)here.val;
+
+ 01032 8b c8 mov ecx, eax
+ 01034 c1 e9 10 shr ecx, 16 ; 00000010H
+ 01037 89 4f 40 mov DWORD PTR [edi+64], ecx
+
+; 1050 : if ((int)(here.op) == 0) {
+
+ 0103a 8b 7d f0 mov edi, DWORD PTR _next$1$[ebp]
+
+; 1051 : Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+; 1052 : "inflate: literal '%c'\n" :
+; 1053 : "inflate: literal 0x%02x\n", here.val));
+; 1054 : state->mode = LIT;
+
+ 0103d 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 01040 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 01043 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 01046 84 c0 test al, al
+ 01048 75 0b jne SHORT $LN457@inflate
+ 0104a c7 01 19 00 00
+ 00 mov DWORD PTR [ecx], 25 ; 00000019H
+
+; 1055 : break;
+
+ 01050 e9 c7 fa ff ff jmp $LN8@inflate
+$LN457@inflate:
+
+; 1056 : }
+; 1057 : if (here.op & 32) {
+
+ 01055 a8 20 test al, 32 ; 00000020H
+ 01057 74 15 je SHORT $LN458@inflate
+
+; 1058 : Tracevv((stderr, "inflate: end of block\n"));
+; 1059 : state->back = -1;
+
+ 01059 c7 81 c4 1b 00
+ 00 ff ff ff ff mov DWORD PTR [ecx+7108], -1
+$LN418@inflate:
+
+; 1060 : state->mode = TYPE;
+
+ 01063 c7 01 0b 00 00
+ 00 mov DWORD PTR [ecx], 11 ; 0000000bH
+
+; 1061 : break;
+
+ 01069 e9 ae fa ff ff jmp $LN8@inflate
+$LN458@inflate:
+
+; 1062 : }
+; 1063 : if (here.op & 64) {
+
+ 0106e a8 40 test al, 64 ; 00000040H
+ 01070 74 15 je SHORT $LN459@inflate
+
+; 1064 : strm->msg = (char *)"invalid literal/length code";
+
+ 01072 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 01075 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BM@FFFLPBBC@invalid?5literal?1length?5code?$AA@
+ 0107c c7 01 1d 00 00
+ 00 mov DWORD PTR [ecx], 29 ; 0000001dH
+ 01082 e9 95 fa ff ff jmp $LN8@inflate
+$LN459@inflate:
+
+; 1065 : state->mode = BAD;
+; 1066 : break;
+; 1067 : }
+; 1068 : state->extra = (unsigned)(here.op) & 15;
+
+ 01087 0f b6 c0 movzx eax, al
+ 0108a 83 e0 0f and eax, 15 ; 0000000fH
+
+; 1069 : state->mode = LENEXT;
+
+ 0108d c7 01 15 00 00
+ 00 mov DWORD PTR [ecx], 21 ; 00000015H
+ 01093 89 41 48 mov DWORD PTR [ecx+72], eax
+$LN460@inflate:
+
+; 1070 : case LENEXT:
+; 1071 : if (state->extra) {
+
+ 01096 8b 41 48 mov eax, DWORD PTR [ecx+72]
+ 01099 89 45 c8 mov DWORD PTR tv2666[ebp], eax
+ 0109c 85 c0 test eax, eax
+ 0109e 74 50 je SHORT $LN461@inflate
+
+; 1072 : NEEDBITS(state->extra);
+
+ 010a0 3b f0 cmp esi, eax
+ 010a2 73 24 jae SHORT $LN264@inflate
+$LL267@inflate:
+ 010a4 85 db test ebx, ebx
+ 010a6 0f 84 ce f4 ff
+ ff je $LN886@inflate
+ 010ac 0f b6 07 movzx eax, BYTE PTR [edi]
+ 010af 8b ce mov ecx, esi
+ 010b1 d3 e0 shl eax, cl
+ 010b3 4b dec ebx
+ 010b4 03 d0 add edx, eax
+ 010b6 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 010b9 47 inc edi
+ 010ba 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 010bd 83 c6 08 add esi, 8
+ 010c0 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 010c3 3b 75 c8 cmp esi, DWORD PTR tv2666[ebp]
+ 010c6 72 dc jb SHORT $LL267@inflate
+$LN264@inflate:
+
+; 1073 : state->length += BITS(state->extra);
+
+ 010c8 8b 4d c8 mov ecx, DWORD PTR tv2666[ebp]
+ 010cb b8 01 00 00 00 mov eax, 1
+ 010d0 d3 e0 shl eax, cl
+ 010d2 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 010d5 48 dec eax
+ 010d6 23 c2 and eax, edx
+ 010d8 01 41 40 add DWORD PTR [ecx+64], eax
+
+; 1074 : DROPBITS(state->extra);
+
+ 010db 8b 45 c8 mov eax, DWORD PTR tv2666[ebp]
+ 010de 8b c8 mov ecx, eax
+ 010e0 d3 ea shr edx, cl
+ 010e2 2b f0 sub esi, eax
+
+; 1075 : state->back += state->extra;
+
+ 010e4 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 010e7 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 010ea 01 81 c4 1b 00
+ 00 add DWORD PTR [ecx+7108], eax
+$LN461@inflate:
+
+; 1076 : }
+; 1077 : Tracevv((stderr, "inflate: length %u\n", state->length));
+; 1078 : state->was = state->length;
+
+ 010f0 8b 41 40 mov eax, DWORD PTR [ecx+64]
+ 010f3 89 81 c8 1b 00
+ 00 mov DWORD PTR [ecx+7112], eax
+
+; 1079 : state->mode = DIST;
+
+ 010f9 c7 01 16 00 00
+ 00 mov DWORD PTR [ecx], 22 ; 00000016H
+$LN463@inflate:
+
+; 1080 : case DIST:
+; 1081 : for (;;) {
+; 1082 : here = state->distcode[BITS(state->distbits)];
+
+ 010ff 8b 41 50 mov eax, DWORD PTR [ecx+80]
+ 01102 8b 4d c0 mov ecx, DWORD PTR tv2776[ebp]
+ 01105 89 45 cc mov DWORD PTR tv2664[ebp], eax
+ 01108 b8 01 00 00 00 mov eax, 1
+ 0110d 8b 09 mov ecx, DWORD PTR [ecx]
+ 0110f d3 e0 shl eax, cl
+ 01111 8b 4d cc mov ecx, DWORD PTR tv2664[ebp]
+ 01114 48 dec eax
+ 01115 23 c2 and eax, edx
+ 01117 8b 04 81 mov eax, DWORD PTR [ecx+eax*4]
+
+; 1083 : if ((unsigned)(here.bits) <= bits) break;
+
+ 0111a 8b c8 mov ecx, eax
+ 0111c c1 e9 08 shr ecx, 8
+ 0111f 0f b6 c9 movzx ecx, cl
+ 01122 3b ce cmp ecx, esi
+ 01124 76 47 jbe SHORT $LN573@inflate
+$LL275@inflate:
+
+; 1084 : PULLBYTE();
+
+ 01126 85 db test ebx, ebx
+ 01128 0f 84 4c f4 ff
+ ff je $LN886@inflate
+ 0112e 0f b6 07 movzx eax, BYTE PTR [edi]
+ 01131 8b ce mov ecx, esi
+ 01133 d3 e0 shl eax, cl
+ 01135 4b dec ebx
+ 01136 03 d0 add edx, eax
+ 01138 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 0113b 8b 45 c0 mov eax, DWORD PTR tv2776[ebp]
+ 0113e 47 inc edi
+ 0113f 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 01142 83 c6 08 add esi, 8
+ 01145 ba 01 00 00 00 mov edx, 1
+ 0114a 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 0114d 8b 08 mov ecx, DWORD PTR [eax]
+ 0114f 8b 45 f8 mov eax, DWORD PTR _state$1$[ebp]
+ 01152 d3 e2 shl edx, cl
+ 01154 4a dec edx
+ 01155 23 55 fc and edx, DWORD PTR _hold$1$[ebp]
+ 01158 8b 40 50 mov eax, DWORD PTR [eax+80]
+ 0115b 8b 04 90 mov eax, DWORD PTR [eax+edx*4]
+ 0115e 8b c8 mov ecx, eax
+ 01160 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+ 01163 c1 e9 08 shr ecx, 8
+ 01166 0f b6 c9 movzx ecx, cl
+ 01169 3b ce cmp ecx, esi
+ 0116b 77 b9 ja SHORT $LL275@inflate
+$LN573@inflate:
+
+; 1085 : }
+; 1086 : if ((here.op & 0xf0) == 0) {
+
+ 0116d a8 f0 test al, 240 ; 000000f0H
+ 0116f 0f 85 b7 00 00
+ 00 jne $LN891@inflate
+
+; 1087 : last = here;
+; 1088 : for (;;) {
+; 1089 : here = state->distcode[last.val +
+
+ 01175 8b c8 mov ecx, eax
+ 01177 bb 01 00 00 00 mov ebx, 1
+ 0117c c1 e9 08 shr ecx, 8
+ 0117f 8b d0 mov edx, eax
+ 01181 0f b6 f9 movzx edi, cl
+ 01184 89 4d d8 mov DWORD PTR tv2686[ebp], ecx
+ 01187 0f b6 c8 movzx ecx, al
+ 0118a 03 cf add ecx, edi
+ 0118c c1 e8 10 shr eax, 16 ; 00000010H
+ 0118f d3 e3 shl ebx, cl
+ 01191 8b cf mov ecx, edi
+ 01193 4b dec ebx
+ 01194 89 55 c8 mov DWORD PTR _last$[ebp], edx
+ 01197 23 5d fc and ebx, DWORD PTR _hold$1$[ebp]
+ 0119a d3 eb shr ebx, cl
+ 0119c 8b 4d cc mov ecx, DWORD PTR tv2664[ebp]
+ 0119f 03 d8 add ebx, eax
+ 011a1 8b 04 99 mov eax, DWORD PTR [ecx+ebx*4]
+
+; 1090 : (BITS(last.bits + last.op) >> last.bits)];
+; 1091 : if ((unsigned)(last.bits + here.bits) <= bits) break;
+
+ 011a4 8b c8 mov ecx, eax
+ 011a6 c1 e9 08 shr ecx, 8
+ 011a9 0f b6 f9 movzx edi, cl
+ 011ac 8b 4d d8 mov ecx, DWORD PTR tv2686[ebp]
+ 011af 0f b6 c9 movzx ecx, cl
+ 011b2 03 f9 add edi, ecx
+ 011b4 3b fe cmp edi, esi
+ 011b6 76 5f jbe SHORT $LN289@inflate
+ 011b8 0f 1f 84 00 00
+ 00 00 00 npad 8
+$LL281@inflate:
+
+; 1092 : PULLBYTE();
+
+ 011c0 8b 45 f4 mov eax, DWORD PTR _have$1$[ebp]
+ 011c3 85 c0 test eax, eax
+ 011c5 0f 84 b2 f3 ff
+ ff je $LN896@inflate
+ 011cb 8b 5d f0 mov ebx, DWORD PTR _next$1$[ebp]
+ 011ce 48 dec eax
+ 011cf 89 45 f4 mov DWORD PTR _have$1$[ebp], eax
+ 011d2 8b ce mov ecx, esi
+ 011d4 bf 01 00 00 00 mov edi, 1
+ 011d9 83 c6 08 add esi, 8
+ 011dc 0f b6 03 movzx eax, BYTE PTR [ebx]
+ 011df 43 inc ebx
+ 011e0 d3 e0 shl eax, cl
+ 011e2 01 45 fc add DWORD PTR _hold$1$[ebp], eax
+ 011e5 0f b7 45 ca movzx eax, WORD PTR _last$[ebp+2]
+ 011e9 89 5d f0 mov DWORD PTR _next$1$[ebp], ebx
+ 011ec 0f b6 de movzx ebx, dh
+ 011ef 0f b6 ca movzx ecx, dl
+ 011f2 03 cb add ecx, ebx
+ 011f4 d3 e7 shl edi, cl
+ 011f6 8b cb mov ecx, ebx
+ 011f8 4f dec edi
+ 011f9 23 7d fc and edi, DWORD PTR _hold$1$[ebp]
+ 011fc d3 ef shr edi, cl
+ 011fe 03 f8 add edi, eax
+ 01200 8b 45 f8 mov eax, DWORD PTR _state$1$[ebp]
+ 01203 8b 40 50 mov eax, DWORD PTR [eax+80]
+ 01206 8b 04 b8 mov eax, DWORD PTR [eax+edi*4]
+ 01209 8b c8 mov ecx, eax
+ 0120b c1 e9 08 shr ecx, 8
+ 0120e 0f b6 c9 movzx ecx, cl
+ 01211 03 cb add ecx, ebx
+ 01213 3b ce cmp ecx, esi
+ 01215 77 a9 ja SHORT $LL281@inflate
+$LN289@inflate:
+
+; 1093 : }
+; 1094 : DROPBITS(last.bits);
+; 1095 : state->back += last.bits;
+
+ 01217 8b 5d f8 mov ebx, DWORD PTR _state$1$[ebp]
+ 0121a 0f b6 ce movzx ecx, dh
+ 0121d 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+ 01220 2b f1 sub esi, ecx
+ 01222 d3 ea shr edx, cl
+ 01224 01 8b c4 1b 00
+ 00 add DWORD PTR [ebx+7108], ecx
+ 0122a eb 03 jmp SHORT $LN292@inflate
+$LN891@inflate:
+ 0122c 8b 5d f8 mov ebx, DWORD PTR _state$1$[ebp]
+$LN292@inflate:
+
+; 1102 : break;
+
+ 0122f 8b 7d f0 mov edi, DWORD PTR _next$1$[ebp]
+ 01232 8b c8 mov ecx, eax
+ 01234 c1 e9 08 shr ecx, 8
+ 01237 0f b6 c9 movzx ecx, cl
+ 0123a 01 8b c4 1b 00
+ 00 add DWORD PTR [ebx+7108], ecx
+ 01240 2b f1 sub esi, ecx
+ 01242 d3 ea shr edx, cl
+ 01244 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 01247 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 0124a a8 40 test al, 64 ; 00000040H
+ 0124c 74 1b je SHORT $LN469@inflate
+
+; 1096 : }
+; 1097 : DROPBITS(here.bits);
+; 1098 : state->back += here.bits;
+; 1099 : if (here.op & 64) {
+; 1100 : strm->msg = (char *)"invalid distance code";
+; 1101 : state->mode = BAD;
+
+ 0124e 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 01251 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+
+; 1102 : break;
+
+ 01254 8b 5d f4 mov ebx, DWORD PTR _have$1$[ebp]
+ 01257 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BG@LBKINIKP@invalid?5distance?5code?$AA@
+ 0125e c7 01 1d 00 00
+ 00 mov DWORD PTR [ecx], 29 ; 0000001dH
+ 01264 e9 b3 f8 ff ff jmp $LN8@inflate
+$LN469@inflate:
+
+; 1103 : }
+; 1104 : state->offset = (unsigned)here.val;
+
+ 01269 8b c8 mov ecx, eax
+
+; 1105 : state->extra = (unsigned)(here.op) & 15;
+
+ 0126b 0f b6 c0 movzx eax, al
+ 0126e c1 e9 10 shr ecx, 16 ; 00000010H
+ 01271 83 e0 0f and eax, 15 ; 0000000fH
+ 01274 89 4b 44 mov DWORD PTR [ebx+68], ecx
+ 01277 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 0127a 8b 5d f4 mov ebx, DWORD PTR _have$1$[ebp]
+ 0127d 89 41 48 mov DWORD PTR [ecx+72], eax
+
+; 1106 : state->mode = DISTEXT;
+
+ 01280 c7 01 17 00 00
+ 00 mov DWORD PTR [ecx], 23 ; 00000017H
+$LN470@inflate:
+
+; 1107 : case DISTEXT:
+; 1108 : if (state->extra) {
+
+ 01286 8b 41 48 mov eax, DWORD PTR [ecx+72]
+ 01289 89 45 c8 mov DWORD PTR tv2665[ebp], eax
+ 0128c 85 c0 test eax, eax
+ 0128e 74 53 je SHORT $LN471@inflate
+
+; 1109 : NEEDBITS(state->extra);
+
+ 01290 3b f0 cmp esi, eax
+ 01292 73 24 jae SHORT $LN293@inflate
+$LL296@inflate:
+ 01294 85 db test ebx, ebx
+ 01296 0f 84 de f2 ff
+ ff je $LN886@inflate
+ 0129c 0f b6 07 movzx eax, BYTE PTR [edi]
+ 0129f 8b ce mov ecx, esi
+ 012a1 d3 e0 shl eax, cl
+ 012a3 4b dec ebx
+ 012a4 03 d0 add edx, eax
+ 012a6 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 012a9 47 inc edi
+ 012aa 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 012ad 83 c6 08 add esi, 8
+ 012b0 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 012b3 3b 75 c8 cmp esi, DWORD PTR tv2665[ebp]
+ 012b6 72 dc jb SHORT $LL296@inflate
+$LN293@inflate:
+
+; 1110 : state->offset += BITS(state->extra);
+
+ 012b8 8b 4d c8 mov ecx, DWORD PTR tv2665[ebp]
+ 012bb b8 01 00 00 00 mov eax, 1
+ 012c0 d3 e0 shl eax, cl
+ 012c2 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 012c5 48 dec eax
+ 012c6 23 c2 and eax, edx
+ 012c8 01 41 44 add DWORD PTR [ecx+68], eax
+
+; 1111 : DROPBITS(state->extra);
+
+ 012cb 8b 45 c8 mov eax, DWORD PTR tv2665[ebp]
+ 012ce 8b c8 mov ecx, eax
+ 012d0 d3 ea shr edx, cl
+ 012d2 2b f0 sub esi, eax
+
+; 1112 : state->back += state->extra;
+
+ 012d4 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 012d7 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 012da 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 012dd 01 81 c4 1b 00
+ 00 add DWORD PTR [ecx+7108], eax
+$LN471@inflate:
+
+; 1113 : }
+; 1114 : #ifdef INFLATE_STRICT
+; 1115 : if (state->offset > state->dmax) {
+; 1116 : strm->msg = (char *)"invalid distance too far back";
+; 1117 : state->mode = BAD;
+; 1118 : break;
+; 1119 : }
+; 1120 : #endif
+; 1121 : Tracevv((stderr, "inflate: distance %u\n", state->offset));
+; 1122 : state->mode = MATCH;
+
+ 012e3 c7 01 18 00 00
+ 00 mov DWORD PTR [ecx], 24 ; 00000018H
+$LN473@inflate:
+
+; 1123 : case MATCH:
+; 1124 : if (left == 0) goto inf_leave;
+
+ 012e9 83 7d e8 00 cmp DWORD PTR _left$1$[ebp], 0
+ 012ed 0f 84 87 f2 ff
+ ff je $LN886@inflate
+
+; 1125 : copy = out - left;
+
+ 012f3 8b 45 dc mov eax, DWORD PTR _out$1$[ebp]
+ 012f6 2b 45 e8 sub eax, DWORD PTR _left$1$[ebp]
+ 012f9 89 45 c8 mov DWORD PTR _copy$9$[ebp], eax
+
+; 1126 : if (state->offset > copy) { /* copy from window */
+
+ 012fc 8b 41 44 mov eax, DWORD PTR [ecx+68]
+ 012ff 3b 45 c8 cmp eax, DWORD PTR _copy$9$[ebp]
+ 01302 76 54 jbe SHORT $LN475@inflate
+
+; 1127 : copy = state->offset - copy;
+
+ 01304 2b 45 c8 sub eax, DWORD PTR _copy$9$[ebp]
+
+; 1128 : if (copy > state->whave) {
+
+ 01307 3b 41 2c cmp eax, DWORD PTR [ecx+44]
+ 0130a 76 1e jbe SHORT $LN478@inflate
+
+; 1129 : if (state->sane) {
+
+ 0130c 83 b9 c0 1b 00
+ 00 00 cmp DWORD PTR [ecx+7104], 0
+ 01313 74 15 je SHORT $LN478@inflate
+
+; 1130 : strm->msg = (char *)"invalid distance too far back";
+
+ 01315 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 01318 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BO@ECPMAOGG@invalid?5distance?5too?5far?5back?$AA@
+ 0131f c7 01 1d 00 00
+ 00 mov DWORD PTR [ecx], 29 ; 0000001dH
+ 01325 e9 f2 f7 ff ff jmp $LN8@inflate
+$LN478@inflate:
+
+; 1131 : state->mode = BAD;
+; 1132 : break;
+; 1133 : }
+; 1134 : #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+; 1135 : Trace((stderr, "inflate.c too far\n"));
+; 1136 : copy -= state->whave;
+; 1137 : if (copy > state->length) copy = state->length;
+; 1138 : if (copy > left) copy = left;
+; 1139 : left -= copy;
+; 1140 : state->length -= copy;
+; 1141 : do {
+; 1142 : *put++ = 0;
+; 1143 : } while (--copy);
+; 1144 : if (state->length == 0) state->mode = LEN;
+; 1145 : break;
+; 1146 : #endif
+; 1147 : }
+; 1148 : if (copy > state->wnext) {
+
+ 0132a 3b 41 30 cmp eax, DWORD PTR [ecx+48]
+ 0132d 76 10 jbe SHORT $LN479@inflate
+
+; 1149 : copy -= state->wnext;
+; 1150 : from = state->window + (state->wsize - copy);
+
+ 0132f 8b 79 34 mov edi, DWORD PTR [ecx+52]
+ 01332 2b 41 30 sub eax, DWORD PTR [ecx+48]
+ 01335 03 79 28 add edi, DWORD PTR [ecx+40]
+ 01338 2b f8 sub edi, eax
+ 0133a 89 7d d8 mov DWORD PTR _from$1$[ebp], edi
+
+; 1151 : }
+
+ 0133d eb 0b jmp SHORT $LN480@inflate
+$LN479@inflate:
+
+; 1152 : else
+; 1153 : from = state->window + (state->wnext - copy);
+
+ 0133f 8b 59 34 mov ebx, DWORD PTR [ecx+52]
+ 01342 2b d8 sub ebx, eax
+ 01344 03 59 30 add ebx, DWORD PTR [ecx+48]
+ 01347 89 5d d8 mov DWORD PTR _from$1$[ebp], ebx
+$LN480@inflate:
+
+; 1154 : if (copy > state->length) copy = state->length;
+
+ 0134a 8b 79 40 mov edi, DWORD PTR [ecx+64]
+ 0134d 89 7d c8 mov DWORD PTR tv2620[ebp], edi
+ 01350 3b c7 cmp eax, edi
+ 01352 76 13 jbe SHORT $LN476@inflate
+ 01354 8b c7 mov eax, edi
+
+; 1155 : }
+
+ 01356 eb 0f jmp SHORT $LN476@inflate
+$LN475@inflate:
+
+; 1156 : else { /* copy from output */
+; 1157 : from = put - state->offset;
+
+ 01358 8b 5d e0 mov ebx, DWORD PTR _put$1$[ebp]
+ 0135b 89 5d d8 mov DWORD PTR _from$1$[ebp], ebx
+ 0135e 29 45 d8 sub DWORD PTR _from$1$[ebp], eax
+
+; 1158 : copy = state->length;
+
+ 01361 8b 41 40 mov eax, DWORD PTR [ecx+64]
+ 01364 89 45 c8 mov DWORD PTR tv2620[ebp], eax
+$LN476@inflate:
+
+; 1159 : }
+; 1160 : if (copy > left) copy = left;
+
+ 01367 8b 5d e8 mov ebx, DWORD PTR _left$1$[ebp]
+ 0136a 3b c3 cmp eax, ebx
+ 0136c 0f 47 c3 cmova eax, ebx
+
+; 1161 : left -= copy;
+
+ 0136f 2b d8 sub ebx, eax
+ 01371 89 45 cc mov DWORD PTR _copy$11$[ebp], eax
+ 01374 89 5d e8 mov DWORD PTR _left$1$[ebp], ebx
+ 01377 8b f8 mov edi, eax
+
+; 1162 : state->length -= copy;
+
+ 01379 8b 5d c8 mov ebx, DWORD PTR tv2620[ebp]
+ 0137c 2b d8 sub ebx, eax
+ 0137e 89 59 40 mov DWORD PTR [ecx+64], ebx
+
+; 1165 : } while (--copy);
+
+ 01381 8b 5d d8 mov ebx, DWORD PTR _from$1$[ebp]
+ 01384 8b 4d e0 mov ecx, DWORD PTR _put$1$[ebp]
+ 01387 2b d9 sub ebx, ecx
+ 01389 0f 1f 80 00 00
+ 00 00 npad 7
+$LL306@inflate:
+
+; 1163 : do {
+; 1164 : *put++ = *from++;
+
+ 01390 8a 04 0b mov al, BYTE PTR [ebx+ecx]
+ 01393 88 01 mov BYTE PTR [ecx], al
+ 01395 41 inc ecx
+
+; 1165 : } while (--copy);
+
+ 01396 83 ef 01 sub edi, 1
+ 01399 75 f5 jne SHORT $LL306@inflate
+
+; 1166 : if (state->length == 0) state->mode = LEN;
+
+ 0139b 8b 5d f4 mov ebx, DWORD PTR _have$1$[ebp]
+ 0139e 8b 7d f0 mov edi, DWORD PTR _next$1$[ebp]
+ 013a1 89 4d e0 mov DWORD PTR _put$1$[ebp], ecx
+ 013a4 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 013a7 83 79 40 00 cmp DWORD PTR [ecx+64], 0
+ 013ab 0f 85 6b f7 ff
+ ff jne $LN8@inflate
+ 013b1 c7 01 14 00 00
+ 00 mov DWORD PTR [ecx], 20 ; 00000014H
+
+; 1167 : break;
+
+ 013b7 e9 60 f7 ff ff jmp $LN8@inflate
+$LN484@inflate:
+
+; 1168 : case LIT:
+; 1169 : if (left == 0) goto inf_leave;
+
+ 013bc 83 7d e8 00 cmp DWORD PTR _left$1$[ebp], 0
+ 013c0 0f 84 b4 f1 ff
+ ff je $LN886@inflate
+
+; 1170 : *put++ = (unsigned char)(state->length);
+
+ 013c6 8b 7d e0 mov edi, DWORD PTR _put$1$[ebp]
+ 013c9 8a 41 40 mov al, BYTE PTR [ecx+64]
+ 013cc ff 45 e0 inc DWORD PTR _put$1$[ebp]
+
+; 1171 : left--;
+
+ 013cf ff 4d e8 dec DWORD PTR _left$1$[ebp]
+ 013d2 88 07 mov BYTE PTR [edi], al
+
+; 1172 : state->mode = LEN;
+; 1173 : break;
+
+ 013d4 8b 7d f0 mov edi, DWORD PTR _next$1$[ebp]
+ 013d7 c7 01 14 00 00
+ 00 mov DWORD PTR [ecx], 20 ; 00000014H
+ 013dd e9 3a f7 ff ff jmp $LN8@inflate
+$LN486@inflate:
+
+; 1174 : case CHECK:
+; 1175 : if (state->wrap) {
+
+ 013e2 83 79 08 00 cmp DWORD PTR [ecx+8], 0
+ 013e6 0f 84 d4 00 00
+ 00 je $LN316@inflate
+
+; 1176 : NEEDBITS(32);
+
+ 013ec 83 fe 20 cmp esi, 32 ; 00000020H
+ 013ef 73 2a jae SHORT $LN307@inflate
+$LL310@inflate:
+ 013f1 85 db test ebx, ebx
+ 013f3 0f 84 81 f1 ff
+ ff je $LN886@inflate
+ 013f9 0f b6 07 movzx eax, BYTE PTR [edi]
+ 013fc 8b ce mov ecx, esi
+ 013fe d3 e0 shl eax, cl
+ 01400 83 c6 08 add esi, 8
+ 01403 4b dec ebx
+ 01404 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 01407 03 d0 add edx, eax
+ 01409 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 0140c 47 inc edi
+ 0140d 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 01410 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 01413 83 fe 20 cmp esi, 32 ; 00000020H
+ 01416 72 d9 jb SHORT $LL310@inflate
+ 01418 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+$LN307@inflate:
+
+; 1177 : out -= left;
+
+ 0141b 8b 45 e8 mov eax, DWORD PTR _left$1$[ebp]
+ 0141e 29 45 dc sub DWORD PTR _out$1$[ebp], eax
+
+; 1178 : strm->total_out += out;
+
+ 01421 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 01424 8b 7d dc mov edi, DWORD PTR _out$1$[ebp]
+ 01427 01 78 14 add DWORD PTR [eax+20], edi
+
+; 1179 : state->total += out;
+
+ 0142a 8b c7 mov eax, edi
+ 0142c 01 41 1c add DWORD PTR [ecx+28], eax
+
+; 1180 : if (out)
+
+ 0142f 8b 7d f0 mov edi, DWORD PTR _next$1$[ebp]
+ 01432 85 c0 test eax, eax
+ 01434 74 2c je SHORT $LN489@inflate
+
+; 1181 : strm->adler = state->check =
+
+ 01436 50 push eax
+ 01437 8b 45 e0 mov eax, DWORD PTR _put$1$[ebp]
+ 0143a 2b 45 dc sub eax, DWORD PTR _out$1$[ebp]
+ 0143d 83 79 10 00 cmp DWORD PTR [ecx+16], 0
+ 01441 50 push eax
+ 01442 ff 71 18 push DWORD PTR [ecx+24]
+ 01445 74 07 je SHORT $LN510@inflate
+ 01447 e8 00 00 00 00 call _crc32@12
+ 0144c eb 05 jmp SHORT $LN511@inflate
+$LN510@inflate:
+ 0144e e8 00 00 00 00 call _adler32@12
+$LN511@inflate:
+ 01453 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 01456 8b 55 08 mov edx, DWORD PTR _strm$[ebp]
+ 01459 89 41 18 mov DWORD PTR [ecx+24], eax
+ 0145c 89 42 30 mov DWORD PTR [edx+48], eax
+ 0145f 8b 55 fc mov edx, DWORD PTR _hold$1$[ebp]
+$LN489@inflate:
+
+; 1182 : UPDATE(state->check, put - out, out);
+; 1183 : out = left;
+; 1184 : if ((
+; 1185 : #ifdef GUNZIP
+; 1186 : state->flags ? hold :
+; 1187 : #endif
+; 1188 : ZSWAP32(hold)) != state->check) {
+
+ 01462 83 79 10 00 cmp DWORD PTR [ecx+16], 0
+ 01466 8b 45 e8 mov eax, DWORD PTR _left$1$[ebp]
+ 01469 89 45 dc mov DWORD PTR _out$1$[ebp], eax
+ 0146c 8b c2 mov eax, edx
+ 0146e 75 2c jne SHORT $LN513@inflate
+ 01470 25 00 ff 00 00 and eax, 65280 ; 0000ff00H
+ 01475 89 45 d8 mov DWORD PTR tv2786[ebp], eax
+ 01478 8b c2 mov eax, edx
+ 0147a c1 e0 10 shl eax, 16 ; 00000010H
+ 0147d 01 45 d8 add DWORD PTR tv2786[ebp], eax
+ 01480 8b c2 mov eax, edx
+ 01482 c1 65 d8 08 shl DWORD PTR tv2786[ebp], 8
+ 01486 c1 e8 08 shr eax, 8
+ 01489 25 00 ff 00 00 and eax, 65280 ; 0000ff00H
+ 0148e 01 45 d8 add DWORD PTR tv2786[ebp], eax
+ 01491 8b c2 mov eax, edx
+ 01493 c1 e8 18 shr eax, 24 ; 00000018H
+ 01496 01 45 d8 add DWORD PTR tv2786[ebp], eax
+ 01499 8b 45 d8 mov eax, DWORD PTR tv2786[ebp]
+$LN513@inflate:
+ 0149c 3b 41 18 cmp eax, DWORD PTR [ecx+24]
+ 0149f 74 15 je SHORT $LN317@inflate
+
+; 1189 : strm->msg = (char *)"incorrect data check";
+
+ 014a1 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 014a4 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BF@MEIGEHBE@incorrect?5data?5check?$AA@
+ 014ab c7 01 1d 00 00
+ 00 mov DWORD PTR [ecx], 29 ; 0000001dH
+ 014b1 e9 66 f6 ff ff jmp $LN8@inflate
+$LN317@inflate:
+
+; 1190 : state->mode = BAD;
+; 1191 : break;
+; 1192 : }
+; 1193 : INITBITS();
+
+ 014b6 33 d2 xor edx, edx
+ 014b8 33 f6 xor esi, esi
+ 014ba 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 014bd 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+$LN316@inflate:
+
+; 1194 : Tracev((stderr, "inflate: check matches trailer\n"));
+; 1195 : }
+; 1196 : #ifdef GUNZIP
+; 1197 : state->mode = LENGTH;
+
+ 014c0 c7 01 1b 00 00
+ 00 mov DWORD PTR [ecx], 27 ; 0000001bH
+$LN491@inflate:
+
+; 1198 : case LENGTH:
+; 1199 : if (state->wrap && state->flags) {
+
+ 014c6 83 79 08 00 cmp DWORD PTR [ecx+8], 0
+ 014ca 0f 84 88 00 00
+ 00 je $LN327@inflate
+ 014d0 83 79 10 00 cmp DWORD PTR [ecx+16], 0
+ 014d4 0f 84 7e 00 00
+ 00 je $LN327@inflate
+
+; 1200 : NEEDBITS(32);
+
+ 014da 83 fe 20 cmp esi, 32 ; 00000020H
+ 014dd 73 2b jae SHORT $LN318@inflate
+ 014df 90 npad 1
+$LL321@inflate:
+ 014e0 85 db test ebx, ebx
+ 014e2 0f 84 92 f0 ff
+ ff je $LN886@inflate
+ 014e8 0f b6 07 movzx eax, BYTE PTR [edi]
+ 014eb 8b ce mov ecx, esi
+ 014ed d3 e0 shl eax, cl
+ 014ef 83 c6 08 add esi, 8
+ 014f2 4b dec ebx
+ 014f3 89 75 ec mov DWORD PTR _bits$1$[ebp], esi
+ 014f6 03 d0 add edx, eax
+ 014f8 89 5d f4 mov DWORD PTR _have$1$[ebp], ebx
+ 014fb 47 inc edi
+ 014fc 89 55 fc mov DWORD PTR _hold$1$[ebp], edx
+ 014ff 89 7d f0 mov DWORD PTR _next$1$[ebp], edi
+ 01502 83 fe 20 cmp esi, 32 ; 00000020H
+ 01505 72 d9 jb SHORT $LL321@inflate
+ 01507 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+$LN318@inflate:
+
+; 1201 : if (hold != (state->total & 0xffffffffUL)) {
+
+ 0150a 3b 51 1c cmp edx, DWORD PTR [ecx+28]
+ 0150d 74 40 je SHORT $LN328@inflate
+
+; 1202 : strm->msg = (char *)"incorrect length check";
+
+ 0150f 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 01512 c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BH@FGKKJGOC@incorrect?5length?5check?$AA@
+ 01519 c7 01 1d 00 00
+ 00 mov DWORD PTR [ecx], 29 ; 0000001dH
+ 0151f e9 f8 f5 ff ff jmp $LN8@inflate
+$LN585@inflate:
+
+; 821 : RESTORE();
+
+ 01524 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 01527 8b 4d e0 mov ecx, DWORD PTR _put$1$[ebp]
+ 0152a 89 48 0c mov DWORD PTR [eax+12], ecx
+ 0152d 8b 4d e8 mov ecx, DWORD PTR _left$1$[ebp]
+ 01530 89 48 10 mov DWORD PTR [eax+16], ecx
+ 01533 8b 4d f8 mov ecx, DWORD PTR _state$1$[ebp]
+ 01536 89 38 mov DWORD PTR [eax], edi
+ 01538 89 58 04 mov DWORD PTR [eax+4], ebx
+
+; 822 : return Z_NEED_DICT;
+
+ 0153b b8 02 00 00 00 mov eax, 2
+ 01540 5f pop edi
+ 01541 89 71 3c mov DWORD PTR [ecx+60], esi
+ 01544 5e pop esi
+ 01545 89 51 38 mov DWORD PTR [ecx+56], edx
+ 01548 5b pop ebx
+
+; 1250 : ret = Z_BUF_ERROR;
+; 1251 : return ret;
+; 1252 : }
+
+ 01549 8b e5 mov esp, ebp
+ 0154b 5d pop ebp
+ 0154c c2 08 00 ret 8
+$LN328@inflate:
+
+; 1203 : state->mode = BAD;
+; 1204 : break;
+; 1205 : }
+; 1206 : INITBITS();
+
+ 0154f c7 45 fc 00 00
+ 00 00 mov DWORD PTR _hold$1$[ebp], 0
+ 01556 33 f6 xor esi, esi
+$LN327@inflate:
+
+; 1207 : Tracev((stderr, "inflate: length matches trailer\n"));
+; 1208 : }
+; 1209 : #endif
+; 1210 : state->mode = DONE;
+
+ 01558 c7 01 1c 00 00
+ 00 mov DWORD PTR [ecx], 28 ; 0000001cH
+$LN495@inflate:
+
+; 1211 : case DONE:
+; 1212 : ret = Z_STREAM_END;
+
+ 0155e c7 45 d4 01 00
+ 00 00 mov DWORD PTR _ret$1$[ebp], 1
+
+; 1213 : goto inf_leave;
+
+ 01565 e9 10 f0 ff ff jmp $LN886@inflate
+$LN496@inflate:
+
+; 1214 : case BAD:
+; 1215 : ret = Z_DATA_ERROR;
+
+ 0156a c7 45 d4 fd ff
+ ff ff mov DWORD PTR _ret$1$[ebp], -3 ; fffffffdH
+ 01571 e9 04 f0 ff ff jmp $LN886@inflate
+$LN862@inflate:
+ 01576 8b 45 f4 mov eax, DWORD PTR _have$1$[ebp]
+ 01579 e9 02 f0 ff ff jmp $inf_leave$937
+$LN502@inflate:
+
+; 1237 : }
+; 1238 : in -= strm->avail_in;
+
+ 0157e 8b 45 c4 mov eax, DWORD PTR _in$1$[ebp]
+ 01581 2b 47 04 sub eax, DWORD PTR [edi+4]
+
+; 1239 : out -= strm->avail_out;
+
+ 01584 2b 77 10 sub esi, DWORD PTR [edi+16]
+
+; 1240 : strm->total_in += in;
+
+ 01587 01 47 08 add DWORD PTR [edi+8], eax
+
+; 1241 : strm->total_out += out;
+
+ 0158a 01 77 14 add DWORD PTR [edi+20], esi
+
+; 1242 : state->total += out;
+
+ 0158d 01 73 1c add DWORD PTR [ebx+28], esi
+
+; 1243 : if (state->wrap && out)
+
+ 01590 83 7b 08 00 cmp DWORD PTR [ebx+8], 0
+ 01594 89 45 c4 mov DWORD PTR _in$1$[ebp], eax
+ 01597 89 75 dc mov DWORD PTR _out$1$[ebp], esi
+ 0159a 74 26 je SHORT $LN503@inflate
+ 0159c 85 f6 test esi, esi
+ 0159e 74 22 je SHORT $LN503@inflate
+
+; 1244 : strm->adler = state->check =
+
+ 015a0 8b 47 0c mov eax, DWORD PTR [edi+12]
+ 015a3 56 push esi
+ 015a4 2b c6 sub eax, esi
+ 015a6 83 7b 10 00 cmp DWORD PTR [ebx+16], 0
+ 015aa 50 push eax
+ 015ab ff 73 18 push DWORD PTR [ebx+24]
+ 015ae 74 07 je SHORT $LN514@inflate
+ 015b0 e8 00 00 00 00 call _crc32@12
+ 015b5 eb 05 jmp SHORT $LN515@inflate
+$LN514@inflate:
+ 015b7 e8 00 00 00 00 call _adler32@12
+$LN515@inflate:
+ 015bc 89 43 18 mov DWORD PTR [ebx+24], eax
+ 015bf 89 47 30 mov DWORD PTR [edi+48], eax
+$LN503@inflate:
+
+; 1245 : UPDATE(state->check, strm->next_out - out, out);
+; 1246 : strm->data_type = state->bits + (state->last ? 64 : 0) +
+
+ 015c2 8b 13 mov edx, DWORD PTR [ebx]
+ 015c4 83 fa 13 cmp edx, 19 ; 00000013H
+ 015c7 74 09 je SHORT $LN516@inflate
+ 015c9 83 fa 0e cmp edx, 14 ; 0000000eH
+ 015cc 74 04 je SHORT $LN516@inflate
+ 015ce 33 f6 xor esi, esi
+ 015d0 eb 05 jmp SHORT $LN517@inflate
+$LN516@inflate:
+ 015d2 be 00 01 00 00 mov esi, 256 ; 00000100H
+$LN517@inflate:
+ 015d7 8b 4b 04 mov ecx, DWORD PTR [ebx+4]
+ 015da f7 d9 neg ecx
+ 015dc c7 45 08 80 00
+ 00 00 mov DWORD PTR tv2648[ebp], 128 ; 00000080H
+ 015e3 1b c9 sbb ecx, ecx
+ 015e5 33 c0 xor eax, eax
+ 015e7 83 e1 40 and ecx, 64 ; 00000040H
+ 015ea 83 fa 0b cmp edx, 11 ; 0000000bH
+ 015ed 0f 44 45 08 cmove eax, DWORD PTR tv2648[ebp]
+ 015f1 03 ce add ecx, esi
+ 015f3 03 c1 add eax, ecx
+ 015f5 03 43 3c add eax, DWORD PTR [ebx+60]
+ 015f8 89 47 2c mov DWORD PTR [edi+44], eax
+
+; 1247 : (state->mode == TYPE ? 128 : 0) +
+; 1248 : (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
+; 1249 : if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
+
+ 015fb 8b 45 c4 mov eax, DWORD PTR _in$1$[ebp]
+ 015fe 85 c0 test eax, eax
+ 01600 75 05 jne SHORT $LN506@inflate
+ 01602 39 45 dc cmp DWORD PTR _out$1$[ebp], eax
+ 01605 74 06 je SHORT $LN505@inflate
+$LN506@inflate:
+ 01607 83 7d 0c 04 cmp DWORD PTR _flush$[ebp], 4
+ 0160b 75 16 jne SHORT $LN894@inflate
+$LN505@inflate:
+ 0160d 8b 45 d4 mov eax, DWORD PTR _ret$1$[ebp]
+ 01610 b9 fb ff ff ff mov ecx, -5 ; fffffffbH
+ 01615 5f pop edi
+ 01616 85 c0 test eax, eax
+ 01618 5e pop esi
+ 01619 0f 44 c1 cmove eax, ecx
+ 0161c 5b pop ebx
+
+; 1250 : ret = Z_BUF_ERROR;
+; 1251 : return ret;
+; 1252 : }
+
+ 0161d 8b e5 mov esp, ebp
+ 0161f 5d pop ebp
+ 01620 c2 08 00 ret 8
+$LN894@inflate:
+ 01623 8b 45 d4 mov eax, DWORD PTR _ret$1$[ebp]
+ 01626 5f pop edi
+ 01627 5e pop esi
+ 01628 5b pop ebx
+ 01629 8b e5 mov esp, ebp
+ 0162b 5d pop ebp
+ 0162c c2 08 00 ret 8
+$LN333@inflate:
+
+; 629 : (strm->next_in == Z_NULL && strm->avail_in != 0))
+; 630 : return Z_STREAM_ERROR;
+
+ 0162f b8 fe ff ff ff mov eax, -2 ; fffffffeH
+
+; 1250 : ret = Z_BUF_ERROR;
+; 1251 : return ret;
+; 1252 : }
+
+ 01634 8b e5 mov esp, ebp
+ 01636 5d pop ebp
+ 01637 c2 08 00 ret 8
+ 0163a 66 90 npad 2
+$LN935@inflate:
+ 0163c 00 00 00 00 DD $LN335@inflate
+ 01640 00 00 00 00 DD $LN32@inflate
+ 01644 00 00 00 00 DD $LN46@inflate
+ 01648 00 00 00 00 DD $LN60@inflate
+ 0164c 00 00 00 00 DD $LN360@inflate
+ 01650 00 00 00 00 DD $LN367@inflate
+ 01654 00 00 00 00 DD $LN374@inflate
+ 01658 00 00 00 00 DD $LN383@inflate
+ 0165c 00 00 00 00 DD $LN392@inflate
+ 01660 00 00 00 00 DD $LN105@inflate
+ 01664 00 00 00 00 DD $LN399@inflate
+ 01668 00 00 00 00 DD $LN401@inflate
+ 0166c 00 00 00 00 DD $LN402@inflate
+ 01670 00 00 00 00 DD $LN141@inflate
+ 01674 00 00 00 00 DD $LN415@inflate
+ 01678 00 00 00 00 DD $LN417@inflate
+ 0167c 00 00 00 00 DD $LN155@inflate
+ 01680 00 00 00 00 DD $LN531@inflate
+ 01684 00 00 00 00 DD $LN534@inflate
+ 01688 00 00 00 00 DD $LN447@inflate
+ 0168c 00 00 00 00 DD $LN449@inflate
+ 01690 00 00 00 00 DD $LN460@inflate
+ 01694 00 00 00 00 DD $LN463@inflate
+ 01698 00 00 00 00 DD $LN470@inflate
+ 0169c 00 00 00 00 DD $LN473@inflate
+ 016a0 00 00 00 00 DD $LN484@inflate
+ 016a4 00 00 00 00 DD $LN486@inflate
+ 016a8 00 00 00 00 DD $LN491@inflate
+ 016ac 00 00 00 00 DD $LN495@inflate
+ 016b0 00 00 00 00 DD $LN496@inflate
+ 016b4 00 00 00 00 DD $LN497@inflate
+$LN936@inflate:
+ 016b8 00 00 00 00 DD $LN407@inflate
+ 016bc 00 00 00 00 DD $LN408@inflate
+ 016c0 00 00 00 00 DD $LN410@inflate
+ 016c4 00 00 00 00 DD $LN411@inflate
+_inflate@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _inflateEnd@4
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_inflateEnd@4 PROC ; COMDAT
+
+; 1256 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 1257 : struct inflate_state FAR *state;
+; 1258 : if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+
+ 00004 8b 75 08 mov esi, DWORD PTR _strm$[ebp]
+ 00007 85 f6 test esi, esi
+ 00009 74 3a je SHORT $LN3@inflateEnd
+ 0000b 8b 46 1c mov eax, DWORD PTR [esi+28]
+ 0000e 85 c0 test eax, eax
+ 00010 74 33 je SHORT $LN3@inflateEnd
+ 00012 8b 4e 24 mov ecx, DWORD PTR [esi+36]
+ 00015 85 c9 test ecx, ecx
+ 00017 74 2c je SHORT $LN3@inflateEnd
+
+; 1260 : state = (struct inflate_state FAR *)strm->state;
+; 1261 : if (state->window != Z_NULL) ZFREE(strm, state->window);
+
+ 00019 8b 40 34 mov eax, DWORD PTR [eax+52]
+ 0001c 85 c0 test eax, eax
+ 0001e 74 09 je SHORT $LN4@inflateEnd
+ 00020 50 push eax
+ 00021 ff 76 28 push DWORD PTR [esi+40]
+ 00024 ff d1 call ecx
+ 00026 83 c4 08 add esp, 8
+$LN4@inflateEnd:
+
+; 1262 : ZFREE(strm, strm->state);
+
+ 00029 ff 76 1c push DWORD PTR [esi+28]
+ 0002c 8b 46 24 mov eax, DWORD PTR [esi+36]
+ 0002f ff 76 28 push DWORD PTR [esi+40]
+ 00032 ff d0 call eax
+ 00034 83 c4 08 add esp, 8
+
+; 1263 : strm->state = Z_NULL;
+
+ 00037 c7 46 1c 00 00
+ 00 00 mov DWORD PTR [esi+28], 0
+
+; 1264 : Tracev((stderr, "inflate: end\n"));
+; 1265 : return Z_OK;
+
+ 0003e 33 c0 xor eax, eax
+ 00040 5e pop esi
+
+; 1266 : }
+
+ 00041 5d pop ebp
+ 00042 c2 04 00 ret 4
+$LN3@inflateEnd:
+
+; 1259 : return Z_STREAM_ERROR;
+
+ 00045 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 0004a 5e pop esi
+
+; 1266 : }
+
+ 0004b 5d pop ebp
+ 0004c c2 04 00 ret 4
+_inflateEnd@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _inflateResetKeep@4
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_inflateResetKeep@4 PROC ; COMDAT
+
+; 106 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 107 : struct inflate_state FAR *state;
+; 108 :
+; 109 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00003 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00006 85 c0 test eax, eax
+ 00008 0f 84 8d 00 00
+ 00 je $LN3@inflateRes
+ 0000e 8b 48 1c mov ecx, DWORD PTR [eax+28]
+ 00011 85 c9 test ecx, ecx
+ 00013 0f 84 82 00 00
+ 00 je $LN3@inflateRes
+
+; 110 : state = (struct inflate_state FAR *)strm->state;
+; 111 : strm->total_in = strm->total_out = state->total = 0;
+
+ 00019 c7 41 1c 00 00
+ 00 00 mov DWORD PTR [ecx+28], 0
+ 00020 c7 40 14 00 00
+ 00 00 mov DWORD PTR [eax+20], 0
+ 00027 c7 40 08 00 00
+ 00 00 mov DWORD PTR [eax+8], 0
+
+; 112 : strm->msg = Z_NULL;
+
+ 0002e c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], 0
+
+; 113 : if (state->wrap) /* to support ill-conceived Java test suite */
+
+ 00035 8b 51 08 mov edx, DWORD PTR [ecx+8]
+ 00038 85 d2 test edx, edx
+ 0003a 74 06 je SHORT $LN4@inflateRes
+
+; 114 : strm->adler = state->wrap & 1;
+
+ 0003c 83 e2 01 and edx, 1
+ 0003f 89 50 30 mov DWORD PTR [eax+48], edx
+$LN4@inflateRes:
+
+; 115 : state->mode = HEAD;
+; 116 : state->last = 0;
+; 117 : state->havedict = 0;
+; 118 : state->dmax = 32768U;
+; 119 : state->head = Z_NULL;
+; 120 : state->hold = 0;
+; 121 : state->bits = 0;
+; 122 : state->lencode = state->distcode = state->next = state->codes;
+
+ 00042 8d 81 30 05 00
+ 00 lea eax, DWORD PTR [ecx+1328]
+ 00048 c7 01 00 00 00
+ 00 mov DWORD PTR [ecx], 0
+ 0004e 89 41 6c mov DWORD PTR [ecx+108], eax
+ 00051 89 41 50 mov DWORD PTR [ecx+80], eax
+ 00054 89 41 4c mov DWORD PTR [ecx+76], eax
+
+; 123 : state->sane = 1;
+; 124 : state->back = -1;
+; 125 : Tracev((stderr, "inflate: reset\n"));
+; 126 : return Z_OK;
+
+ 00057 33 c0 xor eax, eax
+ 00059 c7 41 04 00 00
+ 00 00 mov DWORD PTR [ecx+4], 0
+ 00060 c7 41 0c 00 00
+ 00 00 mov DWORD PTR [ecx+12], 0
+ 00067 c7 41 14 00 80
+ 00 00 mov DWORD PTR [ecx+20], 32768 ; 00008000H
+ 0006e c7 41 20 00 00
+ 00 00 mov DWORD PTR [ecx+32], 0
+ 00075 c7 41 38 00 00
+ 00 00 mov DWORD PTR [ecx+56], 0
+ 0007c c7 41 3c 00 00
+ 00 00 mov DWORD PTR [ecx+60], 0
+ 00083 c7 81 c0 1b 00
+ 00 01 00 00 00 mov DWORD PTR [ecx+7104], 1
+ 0008d c7 81 c4 1b 00
+ 00 ff ff ff ff mov DWORD PTR [ecx+7108], -1
+
+; 127 : }
+
+ 00097 5d pop ebp
+ 00098 c2 04 00 ret 4
+$LN3@inflateRes:
+
+; 107 : struct inflate_state FAR *state;
+; 108 :
+; 109 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 0009b b8 fe ff ff ff mov eax, -2 ; fffffffeH
+
+; 127 : }
+
+ 000a0 5d pop ebp
+ 000a1 c2 04 00 ret 4
+_inflateResetKeep@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _inflateReset2@8
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_windowBits$ = 12 ; size = 4
+_inflateReset2@8 PROC ; COMDAT
+
+; 145 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 146 : int wrap;
+; 147 : struct inflate_state FAR *state;
+; 148 :
+; 149 : /* get the state */
+; 150 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00003 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00006 57 push edi
+ 00007 85 c0 test eax, eax
+ 00009 74 73 je SHORT $LN3@inflateRes
+ 0000b 8b 78 1c mov edi, DWORD PTR [eax+28]
+ 0000e 85 ff test edi, edi
+ 00010 74 6c je SHORT $LN3@inflateRes
+
+; 151 : state = (struct inflate_state FAR *)strm->state;
+; 152 :
+; 153 : /* extract wrap request from windowBits parameter */
+; 154 : if (windowBits < 0) {
+
+ 00012 53 push ebx
+ 00013 56 push esi
+ 00014 8b 75 0c mov esi, DWORD PTR _windowBits$[ebp]
+ 00017 85 f6 test esi, esi
+ 00019 79 06 jns SHORT $LN4@inflateRes
+
+; 155 : wrap = 0;
+
+ 0001b 33 db xor ebx, ebx
+
+; 156 : windowBits = -windowBits;
+
+ 0001d f7 de neg esi
+
+; 157 : }
+
+ 0001f eb 0e jmp SHORT $LN6@inflateRes
+$LN4@inflateRes:
+
+; 158 : else {
+; 159 : wrap = (windowBits >> 4) + 1;
+
+ 00021 8b de mov ebx, esi
+ 00023 c1 fb 04 sar ebx, 4
+ 00026 43 inc ebx
+
+; 160 : #ifdef GUNZIP
+; 161 : if (windowBits < 48)
+
+ 00027 83 fe 30 cmp esi, 48 ; 00000030H
+ 0002a 7d 03 jge SHORT $LN6@inflateRes
+
+; 162 : windowBits &= 15;
+
+ 0002c 83 e6 0f and esi, 15 ; 0000000fH
+$LN6@inflateRes:
+
+; 163 : #endif
+; 164 : }
+; 165 :
+; 166 : /* set number of window bits, free window if different */
+; 167 : if (windowBits && (windowBits < 8 || windowBits > 15))
+
+ 0002f 85 f6 test esi, esi
+ 00031 74 16 je SHORT $LN7@inflateRes
+ 00033 83 fe 08 cmp esi, 8
+ 00036 7c 05 jl SHORT $LN8@inflateRes
+ 00038 83 fe 0f cmp esi, 15 ; 0000000fH
+ 0003b 7e 0c jle SHORT $LN7@inflateRes
+$LN8@inflateRes:
+ 0003d 5e pop esi
+ 0003e 5b pop ebx
+
+; 168 : return Z_STREAM_ERROR;
+
+ 0003f b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 00044 5f pop edi
+
+; 178 : }
+
+ 00045 5d pop ebp
+ 00046 c2 08 00 ret 8
+$LN7@inflateRes:
+
+; 169 : if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) {
+
+ 00049 8b 4f 34 mov ecx, DWORD PTR [edi+52]
+ 0004c 85 c9 test ecx, ecx
+ 0004e 74 1b je SHORT $LN9@inflateRes
+ 00050 39 77 24 cmp DWORD PTR [edi+36], esi
+ 00053 74 16 je SHORT $LN9@inflateRes
+
+; 170 : ZFREE(strm, state->window);
+
+ 00055 51 push ecx
+ 00056 ff 70 28 push DWORD PTR [eax+40]
+ 00059 8b 40 24 mov eax, DWORD PTR [eax+36]
+ 0005c ff d0 call eax
+ 0005e 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00061 83 c4 08 add esp, 8
+
+; 171 : state->window = Z_NULL;
+
+ 00064 c7 47 34 00 00
+ 00 00 mov DWORD PTR [edi+52], 0
+$LN9@inflateRes:
+
+; 172 : }
+; 173 :
+; 174 : /* update state and reset the rest of it */
+; 175 : state->wrap = wrap;
+; 176 : state->wbits = (unsigned)windowBits;
+; 177 : return inflateReset(strm);
+
+ 0006b 50 push eax
+ 0006c 89 5f 08 mov DWORD PTR [edi+8], ebx
+ 0006f 89 77 24 mov DWORD PTR [edi+36], esi
+ 00072 e8 00 00 00 00 call _inflateReset@4
+ 00077 5e pop esi
+ 00078 5b pop ebx
+ 00079 5f pop edi
+
+; 178 : }
+
+ 0007a 5d pop ebp
+ 0007b c2 08 00 ret 8
+$LN3@inflateRes:
+
+; 146 : int wrap;
+; 147 : struct inflate_state FAR *state;
+; 148 :
+; 149 : /* get the state */
+; 150 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 0007e b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 00083 5f pop edi
+
+; 178 : }
+
+ 00084 5d pop ebp
+ 00085 c2 08 00 ret 8
+_inflateReset2@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _inflateInit_@12
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_version$ = 12 ; size = 4
+_stream_size$ = 16 ; size = 4
+_inflateInit_@12 PROC ; COMDAT
+
+; 226 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 227 : return inflateInit2_(strm, DEF_WBITS, version, stream_size);
+
+ 00003 ff 75 10 push DWORD PTR _stream_size$[ebp]
+ 00006 ff 75 0c push DWORD PTR _version$[ebp]
+ 00009 6a 0f push 15 ; 0000000fH
+ 0000b ff 75 08 push DWORD PTR _strm$[ebp]
+ 0000e e8 00 00 00 00 call _inflateInit2_@16
+
+; 228 : }
+
+ 00013 5d pop ebp
+ 00014 c2 0c 00 ret 12 ; 0000000cH
+_inflateInit_@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _inflatePrime@12
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_bits$ = 12 ; size = 4
+_value$ = 16 ; size = 4
+_inflatePrime@12 PROC ; COMDAT
+
+; 234 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 235 : struct inflate_state FAR *state;
+; 236 :
+; 237 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00003 8b 55 08 mov edx, DWORD PTR _strm$[ebp]
+ 00006 85 d2 test edx, edx
+ 00008 74 5c je SHORT $LN3@inflatePri
+ 0000a 8b 52 1c mov edx, DWORD PTR [edx+28]
+ 0000d 85 d2 test edx, edx
+ 0000f 74 55 je SHORT $LN3@inflatePri
+
+; 238 : state = (struct inflate_state FAR *)strm->state;
+; 239 : if (bits < 0) {
+
+ 00011 8b 4d 0c mov ecx, DWORD PTR _bits$[ebp]
+ 00014 85 c9 test ecx, ecx
+ 00016 79 14 jns SHORT $LN4@inflatePri
+
+; 240 : state->hold = 0;
+
+ 00018 c7 42 38 00 00
+ 00 00 mov DWORD PTR [edx+56], 0
+
+; 241 : state->bits = 0;
+; 242 : return Z_OK;
+
+ 0001f 33 c0 xor eax, eax
+ 00021 c7 42 3c 00 00
+ 00 00 mov DWORD PTR [edx+60], 0
+
+; 249 : }
+
+ 00028 5d pop ebp
+ 00029 c2 0c 00 ret 12 ; 0000000cH
+$LN4@inflatePri:
+ 0002c 56 push esi
+ 0002d 57 push edi
+
+; 243 : }
+; 244 : if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;
+
+ 0002e 83 f9 10 cmp ecx, 16 ; 00000010H
+ 00031 7f 28 jg SHORT $LN6@inflatePri
+ 00033 8b 72 3c mov esi, DWORD PTR [edx+60]
+ 00036 8d 3c 0e lea edi, DWORD PTR [esi+ecx]
+ 00039 83 ff 20 cmp edi, 32 ; 00000020H
+ 0003c 77 1d ja SHORT $LN6@inflatePri
+
+; 245 : value &= (1L << bits) - 1;
+
+ 0003e b8 01 00 00 00 mov eax, 1
+
+; 246 : state->hold += value << state->bits;
+; 247 : state->bits += bits;
+
+ 00043 89 7a 3c mov DWORD PTR [edx+60], edi
+ 00046 d3 e0 shl eax, cl
+ 00048 8b ce mov ecx, esi
+ 0004a 48 dec eax
+ 0004b 23 45 10 and eax, DWORD PTR _value$[ebp]
+ 0004e d3 e0 shl eax, cl
+ 00050 01 42 38 add DWORD PTR [edx+56], eax
+
+; 248 : return Z_OK;
+
+ 00053 33 c0 xor eax, eax
+ 00055 5f pop edi
+ 00056 5e pop esi
+
+; 249 : }
+
+ 00057 5d pop ebp
+ 00058 c2 0c 00 ret 12 ; 0000000cH
+$LN6@inflatePri:
+ 0005b 5f pop edi
+
+; 243 : }
+; 244 : if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;
+
+ 0005c b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 00061 5e pop esi
+
+; 249 : }
+
+ 00062 5d pop ebp
+ 00063 c2 0c 00 ret 12 ; 0000000cH
+$LN3@inflatePri:
+
+; 235 : struct inflate_state FAR *state;
+; 236 :
+; 237 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00066 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+
+; 249 : }
+
+ 0006b 5d pop ebp
+ 0006c c2 0c 00 ret 12 ; 0000000cH
+_inflatePrime@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _fixedtables
+_TEXT SEGMENT
+_fixedtables PROC ; COMDAT
+; _state$ = ecx
+
+; 264 : #ifdef BUILDFIXED
+; 265 : static int virgin = 1;
+; 266 : static code *lenfix, *distfix;
+; 267 : static code fixed[544];
+; 268 :
+; 269 : /* build fixed huffman tables if first call (may not be thread safe) */
+; 270 : if (virgin) {
+; 271 : unsigned sym, bits;
+; 272 : static code *next;
+; 273 :
+; 274 : /* literal/length table */
+; 275 : sym = 0;
+; 276 : while (sym < 144) state->lens[sym++] = 8;
+; 277 : while (sym < 256) state->lens[sym++] = 9;
+; 278 : while (sym < 280) state->lens[sym++] = 7;
+; 279 : while (sym < 288) state->lens[sym++] = 8;
+; 280 : next = fixed;
+; 281 : lenfix = next;
+; 282 : bits = 9;
+; 283 : inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
+; 284 :
+; 285 : /* distance table */
+; 286 : sym = 0;
+; 287 : while (sym < 32) state->lens[sym++] = 5;
+; 288 : distfix = next;
+; 289 : bits = 5;
+; 290 : inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
+; 291 :
+; 292 : /* do this just once */
+; 293 : virgin = 0;
+; 294 : }
+; 295 : #else /* !BUILDFIXED */
+; 296 : # include "inffixed.h"
+; 297 : #endif /* BUILDFIXED */
+; 298 : state->lencode = lenfix;
+
+ 00000 c7 41 4c 00 00
+ 00 00 mov DWORD PTR [ecx+76], OFFSET ?lenfix@?1??fixedtables@@9@9
+
+; 299 : state->lenbits = 9;
+
+ 00007 c7 41 54 09 00
+ 00 00 mov DWORD PTR [ecx+84], 9
+
+; 300 : state->distcode = distfix;
+
+ 0000e c7 41 50 00 00
+ 00 00 mov DWORD PTR [ecx+80], OFFSET ?distfix@?1??fixedtables@@9@9
+
+; 301 : state->distbits = 5;
+
+ 00015 c7 41 58 05 00
+ 00 00 mov DWORD PTR [ecx+88], 5
+
+; 302 : }
+
+ 0001c c3 ret 0
+_fixedtables ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _updatewindow
+_TEXT SEGMENT
+_end$1$ = -4 ; size = 4
+_copy$ = 8 ; size = 4
+_updatewindow PROC ; COMDAT
+; _strm$ = ecx
+; _end$ = edx
+
+; 383 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 8b c2 mov eax, edx
+ 00006 8b d1 mov edx, ecx
+ 00008 56 push esi
+ 00009 57 push edi
+ 0000a 89 45 fc mov DWORD PTR _end$1$[ebp], eax
+
+; 384 : struct inflate_state FAR *state;
+; 385 : unsigned dist;
+; 386 :
+; 387 : state = (struct inflate_state FAR *)strm->state;
+; 388 :
+; 389 : /* if it hasn't been done already, allocate space for the window */
+; 390 : if (state->window == Z_NULL) {
+
+ 0000d bf 01 00 00 00 mov edi, 1
+ 00012 8b 72 1c mov esi, DWORD PTR [edx+28]
+ 00015 83 7e 34 00 cmp DWORD PTR [esi+52], 0
+ 00019 75 26 jne SHORT $LN3@updatewind
+
+; 391 : state->window = (unsigned char FAR *)
+
+ 0001b 8b 4e 24 mov ecx, DWORD PTR [esi+36]
+ 0001e 8b c7 mov eax, edi
+ 00020 d3 e0 shl eax, cl
+ 00022 57 push edi
+ 00023 50 push eax
+ 00024 ff 72 28 push DWORD PTR [edx+40]
+ 00027 8b 42 20 mov eax, DWORD PTR [edx+32]
+ 0002a ff d0 call eax
+ 0002c 83 c4 0c add esp, 12 ; 0000000cH
+ 0002f 89 46 34 mov DWORD PTR [esi+52], eax
+
+; 392 : ZALLOC(strm, 1U << state->wbits,
+; 393 : sizeof(unsigned char));
+; 394 : if (state->window == Z_NULL) return 1;
+
+ 00032 85 c0 test eax, eax
+ 00034 75 08 jne SHORT $LN13@updatewind
+ 00036 8b c7 mov eax, edi
+ 00038 5f pop edi
+ 00039 5e pop esi
+
+; 427 : }
+
+ 0003a 8b e5 mov esp, ebp
+ 0003c 5d pop ebp
+ 0003d c3 ret 0
+$LN13@updatewind:
+ 0003e 8b 45 fc mov eax, DWORD PTR _end$1$[ebp]
+$LN3@updatewind:
+
+; 395 : }
+; 396 :
+; 397 : /* if window not in use yet, initialize */
+; 398 : if (state->wsize == 0) {
+
+ 00041 83 7e 28 00 cmp DWORD PTR [esi+40], 0
+ 00045 75 16 jne SHORT $LN4@updatewind
+
+; 399 : state->wsize = 1U << state->wbits;
+
+ 00047 8b 4e 24 mov ecx, DWORD PTR [esi+36]
+ 0004a d3 e7 shl edi, cl
+ 0004c 89 7e 28 mov DWORD PTR [esi+40], edi
+
+; 400 : state->wnext = 0;
+
+ 0004f c7 46 30 00 00
+ 00 00 mov DWORD PTR [esi+48], 0
+
+; 401 : state->whave = 0;
+
+ 00056 c7 46 2c 00 00
+ 00 00 mov DWORD PTR [esi+44], 0
+$LN4@updatewind:
+
+; 402 : }
+; 403 :
+; 404 : /* copy state->wsize or less output bytes into the circular window */
+; 405 : if (copy >= state->wsize) {
+
+ 0005d 8b 7e 28 mov edi, DWORD PTR [esi+40]
+ 00060 53 push ebx
+ 00061 8b 5d 08 mov ebx, DWORD PTR _copy$[ebp]
+ 00064 3b df cmp ebx, edi
+ 00066 72 25 jb SHORT $LN5@updatewind
+
+; 406 : zmemcpy(state->window, end - state->wsize, state->wsize);
+
+ 00068 57 push edi
+ 00069 2b c7 sub eax, edi
+ 0006b 50 push eax
+ 0006c ff 76 34 push DWORD PTR [esi+52]
+ 0006f e8 00 00 00 00 call _memcpy
+
+; 407 : state->wnext = 0;
+; 408 : state->whave = state->wsize;
+
+ 00074 8b 46 28 mov eax, DWORD PTR [esi+40]
+ 00077 83 c4 0c add esp, 12 ; 0000000cH
+
+; 423 : if (state->whave < state->wsize) state->whave += dist;
+
+ 0007a 89 46 2c mov DWORD PTR [esi+44], eax
+
+; 424 : }
+; 425 : }
+; 426 : return 0;
+
+ 0007d 33 c0 xor eax, eax
+ 0007f c7 46 30 00 00
+ 00 00 mov DWORD PTR [esi+48], 0
+ 00086 5b pop ebx
+ 00087 5f pop edi
+ 00088 5e pop esi
+
+; 427 : }
+
+ 00089 8b e5 mov esp, ebp
+ 0008b 5d pop ebp
+ 0008c c3 ret 0
+$LN5@updatewind:
+
+; 409 : }
+; 410 : else {
+; 411 : dist = state->wsize - state->wnext;
+
+ 0008d 2b 7e 30 sub edi, DWORD PTR [esi+48]
+
+; 412 : if (dist > copy) dist = copy;
+
+ 00090 3b fb cmp edi, ebx
+ 00092 0f 47 fb cmova edi, ebx
+
+; 413 : zmemcpy(state->window + state->wnext, end - copy, dist);
+
+ 00095 2b c3 sub eax, ebx
+ 00097 57 push edi
+ 00098 50 push eax
+ 00099 8b 46 34 mov eax, DWORD PTR [esi+52]
+ 0009c 03 46 30 add eax, DWORD PTR [esi+48]
+ 0009f 50 push eax
+ 000a0 e8 00 00 00 00 call _memcpy
+ 000a5 83 c4 0c add esp, 12 ; 0000000cH
+
+; 414 : copy -= dist;
+
+ 000a8 2b df sub ebx, edi
+
+; 415 : if (copy) {
+
+ 000aa 74 24 je SHORT $LN8@updatewind
+
+; 416 : zmemcpy(state->window, end - copy, copy);
+
+ 000ac 8b 45 fc mov eax, DWORD PTR _end$1$[ebp]
+ 000af 53 push ebx
+ 000b0 2b c3 sub eax, ebx
+ 000b2 50 push eax
+ 000b3 ff 76 34 push DWORD PTR [esi+52]
+ 000b6 e8 00 00 00 00 call _memcpy
+
+; 417 : state->wnext = copy;
+; 418 : state->whave = state->wsize;
+
+ 000bb 8b 46 28 mov eax, DWORD PTR [esi+40]
+ 000be 83 c4 0c add esp, 12 ; 0000000cH
+ 000c1 89 5e 30 mov DWORD PTR [esi+48], ebx
+
+; 423 : if (state->whave < state->wsize) state->whave += dist;
+
+ 000c4 89 46 2c mov DWORD PTR [esi+44], eax
+
+; 424 : }
+; 425 : }
+; 426 : return 0;
+
+ 000c7 33 c0 xor eax, eax
+ 000c9 5b pop ebx
+ 000ca 5f pop edi
+ 000cb 5e pop esi
+
+; 427 : }
+
+ 000cc 8b e5 mov esp, ebp
+ 000ce 5d pop ebp
+ 000cf c3 ret 0
+$LN8@updatewind:
+
+; 419 : }
+; 420 : else {
+; 421 : state->wnext += dist;
+
+ 000d0 01 7e 30 add DWORD PTR [esi+48], edi
+
+; 422 : if (state->wnext == state->wsize) state->wnext = 0;
+
+ 000d3 8b 4e 28 mov ecx, DWORD PTR [esi+40]
+ 000d6 39 4e 30 cmp DWORD PTR [esi+48], ecx
+ 000d9 75 07 jne SHORT $LN10@updatewind
+ 000db c7 46 30 00 00
+ 00 00 mov DWORD PTR [esi+48], 0
+$LN10@updatewind:
+
+; 423 : if (state->whave < state->wsize) state->whave += dist;
+
+ 000e2 8b 46 2c mov eax, DWORD PTR [esi+44]
+ 000e5 3b c1 cmp eax, ecx
+ 000e7 73 05 jae SHORT $LN11@updatewind
+ 000e9 03 c7 add eax, edi
+ 000eb 89 46 2c mov DWORD PTR [esi+44], eax
+$LN11@updatewind:
+
+; 424 : }
+; 425 : }
+; 426 : return 0;
+
+ 000ee 5b pop ebx
+ 000ef 5f pop edi
+ 000f0 33 c0 xor eax, eax
+ 000f2 5e pop esi
+
+; 427 : }
+
+ 000f3 8b e5 mov esp, ebp
+ 000f5 5d pop ebp
+ 000f6 c3 ret 0
+_updatewindow ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _inflateGetDictionary@12
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_dictionary$ = 12 ; size = 4
+_dictLength$ = 16 ; size = 4
+_inflateGetDictionary@12 PROC ; COMDAT
+
+; 1272 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 1273 : struct inflate_state FAR *state;
+; 1274 :
+; 1275 : /* check state */
+; 1276 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00004 8b 75 08 mov esi, DWORD PTR _strm$[ebp]
+ 00007 85 f6 test esi, esi
+ 00009 74 52 je SHORT $LN3@inflateGet
+ 0000b 8b 76 1c mov esi, DWORD PTR [esi+28]
+ 0000e 85 f6 test esi, esi
+ 00010 74 4b je SHORT $LN3@inflateGet
+
+; 1277 : state = (struct inflate_state FAR *)strm->state;
+; 1278 :
+; 1279 : /* copy dictionary */
+; 1280 : if (state->whave && dictionary != Z_NULL) {
+
+ 00012 8b 46 2c mov eax, DWORD PTR [esi+44]
+ 00015 85 c0 test eax, eax
+ 00017 74 31 je SHORT $LN4@inflateGet
+ 00019 57 push edi
+ 0001a 8b 7d 0c mov edi, DWORD PTR _dictionary$[ebp]
+ 0001d 85 ff test edi, edi
+ 0001f 74 28 je SHORT $LN7@inflateGet
+
+; 1281 : zmemcpy(dictionary, state->window + state->wnext,
+
+ 00021 2b 46 30 sub eax, DWORD PTR [esi+48]
+ 00024 50 push eax
+ 00025 8b 46 34 mov eax, DWORD PTR [esi+52]
+ 00028 03 46 30 add eax, DWORD PTR [esi+48]
+ 0002b 50 push eax
+ 0002c 57 push edi
+ 0002d e8 00 00 00 00 call _memcpy
+
+; 1282 : state->whave - state->wnext);
+; 1283 : zmemcpy(dictionary + state->whave - state->wnext,
+
+ 00032 8b 4e 30 mov ecx, DWORD PTR [esi+48]
+ 00035 8b 46 2c mov eax, DWORD PTR [esi+44]
+ 00038 51 push ecx
+ 00039 ff 76 34 push DWORD PTR [esi+52]
+ 0003c 2b c1 sub eax, ecx
+ 0003e 03 c7 add eax, edi
+ 00040 50 push eax
+ 00041 e8 00 00 00 00 call _memcpy
+ 00046 83 c4 18 add esp, 24 ; 00000018H
+$LN7@inflateGet:
+ 00049 5f pop edi
+$LN4@inflateGet:
+
+; 1284 : state->window, state->wnext);
+; 1285 : }
+; 1286 : if (dictLength != Z_NULL)
+
+ 0004a 8b 4d 10 mov ecx, DWORD PTR _dictLength$[ebp]
+ 0004d 85 c9 test ecx, ecx
+ 0004f 74 05 je SHORT $LN5@inflateGet
+
+; 1287 : *dictLength = state->whave;
+
+ 00051 8b 46 2c mov eax, DWORD PTR [esi+44]
+ 00054 89 01 mov DWORD PTR [ecx], eax
+$LN5@inflateGet:
+
+; 1288 : return Z_OK;
+
+ 00056 33 c0 xor eax, eax
+ 00058 5e pop esi
+
+; 1289 : }
+
+ 00059 5d pop ebp
+ 0005a c2 0c 00 ret 12 ; 0000000cH
+$LN3@inflateGet:
+
+; 1273 : struct inflate_state FAR *state;
+; 1274 :
+; 1275 : /* check state */
+; 1276 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 0005d b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 00062 5e pop esi
+
+; 1289 : }
+
+ 00063 5d pop ebp
+ 00064 c2 0c 00 ret 12 ; 0000000cH
+_inflateGetDictionary@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _inflateSetDictionary@12
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_dictionary$ = 12 ; size = 4
+_dictLength$ = 16 ; size = 4
+_inflateSetDictionary@12 PROC ; COMDAT
+
+; 1295 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+ 00004 57 push edi
+
+; 1296 : struct inflate_state FAR *state;
+; 1297 : unsigned long dictid;
+; 1298 : int ret;
+; 1299 :
+; 1300 : /* check state */
+; 1301 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00005 8b 7d 08 mov edi, DWORD PTR _strm$[ebp]
+ 00008 85 ff test edi, edi
+ 0000a 0f 84 84 00 00
+ 00 je $LN3@inflateSet
+ 00010 8b 77 1c mov esi, DWORD PTR [edi+28]
+ 00013 85 f6 test esi, esi
+ 00015 74 7d je SHORT $LN3@inflateSet
+
+; 1302 : state = (struct inflate_state FAR *)strm->state;
+; 1303 : if (state->wrap != 0 && state->mode != DICT)
+
+ 00017 83 7e 08 00 cmp DWORD PTR [esi+8], 0
+ 0001b 53 push ebx
+ 0001c 8b 5d 10 mov ebx, DWORD PTR _dictLength$[ebp]
+ 0001f 74 11 je SHORT $LN4@inflateSet
+ 00021 83 3e 0a cmp DWORD PTR [esi], 10 ; 0000000aH
+ 00024 74 11 je SHORT $LN9@inflateSet
+
+; 1304 : return Z_STREAM_ERROR;
+
+ 00026 5b pop ebx
+ 00027 5f pop edi
+ 00028 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 0002d 5e pop esi
+
+; 1324 : }
+
+ 0002e 5d pop ebp
+ 0002f c2 0c 00 ret 12 ; 0000000cH
+$LN4@inflateSet:
+
+; 1305 :
+; 1306 : /* check for correct dictionary identifier */
+; 1307 : if (state->mode == DICT) {
+
+ 00032 83 3e 0a cmp DWORD PTR [esi], 10 ; 0000000aH
+ 00035 75 26 jne SHORT $LN6@inflateSet
+$LN9@inflateSet:
+
+; 1308 : dictid = adler32(0L, Z_NULL, 0);
+; 1309 : dictid = adler32(dictid, dictionary, dictLength);
+
+ 00037 53 push ebx
+ 00038 ff 75 0c push DWORD PTR _dictionary$[ebp]
+ 0003b 6a 00 push 0
+ 0003d 6a 00 push 0
+ 0003f 6a 00 push 0
+ 00041 e8 00 00 00 00 call _adler32@12
+ 00046 50 push eax
+ 00047 e8 00 00 00 00 call _adler32@12
+
+; 1310 : if (dictid != state->check)
+
+ 0004c 3b 46 18 cmp eax, DWORD PTR [esi+24]
+ 0004f 74 0c je SHORT $LN6@inflateSet
+
+; 1311 : return Z_DATA_ERROR;
+
+ 00051 5b pop ebx
+ 00052 5f pop edi
+ 00053 b8 fd ff ff ff mov eax, -3 ; fffffffdH
+ 00058 5e pop esi
+
+; 1324 : }
+
+ 00059 5d pop ebp
+ 0005a c2 0c 00 ret 12 ; 0000000cH
+$LN6@inflateSet:
+
+; 1312 : }
+; 1313 :
+; 1314 : /* copy dictionary to window using updatewindow(), which will amend the
+; 1315 : existing dictionary if appropriate */
+; 1316 : ret = updatewindow(strm, dictionary + dictLength, dictLength);
+
+ 0005d 8b 55 0c mov edx, DWORD PTR _dictionary$[ebp]
+ 00060 8b cf mov ecx, edi
+ 00062 53 push ebx
+ 00063 8d 14 1a lea edx, DWORD PTR [edx+ebx]
+ 00066 e8 00 00 00 00 call _updatewindow
+ 0006b 83 c4 04 add esp, 4
+
+; 1317 : if (ret) {
+
+ 0006e 85 c0 test eax, eax
+ 00070 74 12 je SHORT $LN7@inflateSet
+
+; 1318 : state->mode = MEM;
+
+ 00072 5b pop ebx
+ 00073 5f pop edi
+ 00074 c7 06 1e 00 00
+ 00 mov DWORD PTR [esi], 30 ; 0000001eH
+
+; 1319 : return Z_MEM_ERROR;
+
+ 0007a b8 fc ff ff ff mov eax, -4 ; fffffffcH
+ 0007f 5e pop esi
+
+; 1324 : }
+
+ 00080 5d pop ebp
+ 00081 c2 0c 00 ret 12 ; 0000000cH
+$LN7@inflateSet:
+ 00084 5b pop ebx
+ 00085 5f pop edi
+
+; 1320 : }
+; 1321 : state->havedict = 1;
+
+ 00086 c7 46 0c 01 00
+ 00 00 mov DWORD PTR [esi+12], 1
+
+; 1322 : Tracev((stderr, "inflate: dictionary set\n"));
+; 1323 : return Z_OK;
+
+ 0008d 33 c0 xor eax, eax
+ 0008f 5e pop esi
+
+; 1324 : }
+
+ 00090 5d pop ebp
+ 00091 c2 0c 00 ret 12 ; 0000000cH
+$LN3@inflateSet:
+ 00094 5f pop edi
+
+; 1296 : struct inflate_state FAR *state;
+; 1297 : unsigned long dictid;
+; 1298 : int ret;
+; 1299 :
+; 1300 : /* check state */
+; 1301 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00095 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 0009a 5e pop esi
+
+; 1324 : }
+
+ 0009b 5d pop ebp
+ 0009c c2 0c 00 ret 12 ; 0000000cH
+_inflateSetDictionary@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _inflateGetHeader@8
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_head$ = 12 ; size = 4
+_inflateGetHeader@8 PROC ; COMDAT
+
+; 1329 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1330 : struct inflate_state FAR *state;
+; 1331 :
+; 1332 : /* check state */
+; 1333 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00003 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp]
+ 00006 85 c9 test ecx, ecx
+ 00008 74 20 je SHORT $LN3@inflateGet
+ 0000a 8b 49 1c mov ecx, DWORD PTR [ecx+28]
+ 0000d 85 c9 test ecx, ecx
+ 0000f 74 19 je SHORT $LN3@inflateGet
+
+; 1334 : state = (struct inflate_state FAR *)strm->state;
+; 1335 : if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;
+
+ 00011 f6 41 08 02 test BYTE PTR [ecx+8], 2
+ 00015 74 13 je SHORT $LN3@inflateGet
+
+; 1336 :
+; 1337 : /* save header structure */
+; 1338 : state->head = head;
+
+ 00017 8b 45 0c mov eax, DWORD PTR _head$[ebp]
+ 0001a 89 41 20 mov DWORD PTR [ecx+32], eax
+
+; 1339 : head->done = 0;
+
+ 0001d c7 40 30 00 00
+ 00 00 mov DWORD PTR [eax+48], 0
+
+; 1340 : return Z_OK;
+
+ 00024 33 c0 xor eax, eax
+
+; 1341 : }
+
+ 00026 5d pop ebp
+ 00027 c2 08 00 ret 8
+$LN3@inflateGet:
+
+; 1330 : struct inflate_state FAR *state;
+; 1331 :
+; 1332 : /* check state */
+; 1333 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 0002a b8 fe ff ff ff mov eax, -2 ; fffffffeH
+
+; 1341 : }
+
+ 0002f 5d pop ebp
+ 00030 c2 08 00 ret 8
+_inflateGetHeader@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _syncsearch
+_TEXT SEGMENT
+_buf$1$ = -8 ; size = 4
+_have$1$ = -4 ; size = 4
+_len$ = 8 ; size = 4
+_syncsearch PROC ; COMDAT
+; _have$ = ecx
+; _buf$ = edx
+
+; 1358 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 08 sub esp, 8
+
+; 1359 : unsigned got;
+; 1360 : unsigned next;
+; 1361 :
+; 1362 : got = *have;
+
+ 00006 8b 01 mov eax, DWORD PTR [ecx]
+ 00008 56 push esi
+ 00009 57 push edi
+
+; 1363 : next = 0;
+; 1364 : while (next < len && got < 4) {
+
+ 0000a 8b 7d 08 mov edi, DWORD PTR _len$[ebp]
+ 0000d 33 f6 xor esi, esi
+ 0000f 89 55 f8 mov DWORD PTR _buf$1$[ebp], edx
+ 00012 89 4d fc mov DWORD PTR _have$1$[ebp], ecx
+ 00015 85 ff test edi, edi
+ 00017 74 50 je SHORT $LN13@syncsearch
+ 00019 53 push ebx
+ 0001a 66 0f 1f 44 00
+ 00 npad 6
+$LL2@syncsearch:
+ 00020 83 f8 04 cmp eax, 4
+ 00023 73 36 jae SHORT $LN14@syncsearch
+
+; 1365 : if ((int)(buf[next]) == (got < 2 ? 0 : 0xff))
+
+ 00025 8a 1c 16 mov bl, BYTE PTR [esi+edx]
+ 00028 83 f8 02 cmp eax, 2
+ 0002b 0f b6 cb movzx ecx, bl
+ 0002e 1b d2 sbb edx, edx
+ 00030 81 e2 01 ff ff
+ ff and edx, -255 ; ffffff01H
+ 00036 81 c2 ff 00 00
+ 00 add edx, 255 ; 000000ffH
+ 0003c 3b ca cmp ecx, edx
+ 0003e 75 03 jne SHORT $LN4@syncsearch
+
+; 1366 : got++;
+
+ 00040 40 inc eax
+ 00041 eb 10 jmp SHORT $LN7@syncsearch
+$LN4@syncsearch:
+
+; 1367 : else if (buf[next])
+; 1368 : got = 0;
+; 1369 : else
+; 1370 : got = 4 - got;
+
+ 00043 b9 04 00 00 00 mov ecx, 4
+ 00048 33 d2 xor edx, edx
+ 0004a 2b c8 sub ecx, eax
+ 0004c 84 db test bl, bl
+ 0004e 8b c1 mov eax, ecx
+ 00050 0f 45 c2 cmovne eax, edx
+$LN7@syncsearch:
+
+; 1371 : next++;
+
+ 00053 8b 55 f8 mov edx, DWORD PTR _buf$1$[ebp]
+ 00056 46 inc esi
+ 00057 3b f7 cmp esi, edi
+ 00059 72 c5 jb SHORT $LL2@syncsearch
+$LN14@syncsearch:
+
+; 1372 : }
+; 1373 : *have = got;
+
+ 0005b 8b 4d fc mov ecx, DWORD PTR _have$1$[ebp]
+ 0005e 5b pop ebx
+ 0005f 5f pop edi
+ 00060 89 01 mov DWORD PTR [ecx], eax
+
+; 1374 : return next;
+
+ 00062 8b c6 mov eax, esi
+ 00064 5e pop esi
+
+; 1375 : }
+
+ 00065 8b e5 mov esp, ebp
+ 00067 5d pop ebp
+ 00068 c3 ret 0
+$LN13@syncsearch:
+
+; 1372 : }
+; 1373 : *have = got;
+
+ 00069 89 01 mov DWORD PTR [ecx], eax
+
+; 1374 : return next;
+
+ 0006b 8b c6 mov eax, esi
+ 0006d 5f pop edi
+ 0006e 5e pop esi
+
+; 1375 : }
+
+ 0006f 8b e5 mov esp, ebp
+ 00071 5d pop ebp
+ 00072 c3 ret 0
+_syncsearch ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _inflateSync@4
+_TEXT SEGMENT
+_in$1$ = 8 ; size = 4
+_buf$ = 8 ; size = 4
+_strm$ = 8 ; size = 4
+_inflateSync@4 PROC ; COMDAT
+
+; 1379 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 53 push ebx
+
+; 1380 : unsigned len; /* number of bytes to look at or looked at */
+; 1381 : unsigned long in, out; /* temporary to save total_in and total_out */
+; 1382 : unsigned char buf[4]; /* to restore bit buffer to byte string */
+; 1383 : struct inflate_state FAR *state;
+; 1384 :
+; 1385 : /* check parameters */
+; 1386 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00004 8b 5d 08 mov ebx, DWORD PTR _strm$[ebp]
+ 00007 57 push edi
+ 00008 85 db test ebx, ebx
+ 0000a 0f 84 cf 00 00
+ 00 je $LN5@inflateSyn
+ 00010 8b 7b 1c mov edi, DWORD PTR [ebx+28]
+ 00013 85 ff test edi, edi
+ 00015 0f 84 c4 00 00
+ 00 je $LN5@inflateSyn
+
+; 1387 : state = (struct inflate_state FAR *)strm->state;
+; 1388 : if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
+
+ 0001b 83 7b 04 00 cmp DWORD PTR [ebx+4], 0
+ 0001f 75 11 jne SHORT $LN6@inflateSyn
+ 00021 83 7f 3c 08 cmp DWORD PTR [edi+60], 8
+ 00025 73 0b jae SHORT $LN6@inflateSyn
+ 00027 5f pop edi
+ 00028 b8 fb ff ff ff mov eax, -5 ; fffffffbH
+ 0002d 5b pop ebx
+
+; 1418 : }
+
+ 0002e 5d pop ebp
+ 0002f c2 04 00 ret 4
+$LN6@inflateSyn:
+
+; 1389 :
+; 1390 : /* if first time, start search in bit buffer */
+; 1391 : if (state->mode != SYNC) {
+
+ 00032 83 3f 1f cmp DWORD PTR [edi], 31 ; 0000001fH
+ 00035 56 push esi
+ 00036 74 56 je SHORT $LN7@inflateSyn
+
+; 1392 : state->mode = SYNC;
+; 1393 : state->hold <<= state->bits & 7;
+
+ 00038 8b 57 3c mov edx, DWORD PTR [edi+60]
+
+; 1394 : state->bits -= state->bits & 7;
+; 1395 : len = 0;
+
+ 0003b 33 f6 xor esi, esi
+ 0003d 8b ca mov ecx, edx
+ 0003f c7 07 1f 00 00
+ 00 mov DWORD PTR [edi], 31 ; 0000001fH
+ 00045 83 e1 07 and ecx, 7
+ 00048 d3 67 38 shl DWORD PTR [edi+56], cl
+ 0004b 2b d1 sub edx, ecx
+ 0004d 89 57 3c mov DWORD PTR [edi+60], edx
+
+; 1396 : while (state->bits >= 8) {
+
+ 00050 83 fa 08 cmp edx, 8
+ 00053 72 24 jb SHORT $LN3@inflateSyn
+ 00055 8b 4f 38 mov ecx, DWORD PTR [edi+56]
+ 00058 0f 1f 84 00 00
+ 00 00 00 npad 8
+$LL2@inflateSyn:
+
+; 1397 : buf[len++] = (unsigned char)(state->hold);
+
+ 00060 8a 47 38 mov al, BYTE PTR [edi+56]
+
+; 1398 : state->hold >>= 8;
+; 1399 : state->bits -= 8;
+
+ 00063 83 ea 08 sub edx, 8
+ 00066 88 44 35 08 mov BYTE PTR _buf$[ebp+esi], al
+ 0006a 46 inc esi
+ 0006b c1 e9 08 shr ecx, 8
+ 0006e 89 4f 38 mov DWORD PTR [edi+56], ecx
+ 00071 83 fa 08 cmp edx, 8
+ 00074 73 ea jae SHORT $LL2@inflateSyn
+ 00076 89 57 3c mov DWORD PTR [edi+60], edx
+$LN3@inflateSyn:
+
+; 1400 : }
+; 1401 : state->have = 0;
+
+ 00079 8d 4f 68 lea ecx, DWORD PTR [edi+104]
+
+; 1402 : syncsearch(&(state->have), buf, len);
+
+ 0007c 8d 55 08 lea edx, DWORD PTR _buf$[ebp]
+ 0007f c7 01 00 00 00
+ 00 mov DWORD PTR [ecx], 0
+ 00085 56 push esi
+ 00086 e8 00 00 00 00 call _syncsearch
+ 0008b 83 c4 04 add esp, 4
+$LN7@inflateSyn:
+
+; 1403 : }
+; 1404 :
+; 1405 : /* search available input */
+; 1406 : len = syncsearch(&(state->have), strm->next_in, strm->avail_in);
+
+ 0008e ff 73 04 push DWORD PTR [ebx+4]
+ 00091 8b 13 mov edx, DWORD PTR [ebx]
+ 00093 8d 4f 68 lea ecx, DWORD PTR [edi+104]
+ 00096 e8 00 00 00 00 call _syncsearch
+
+; 1407 : strm->avail_in -= len;
+
+ 0009b 29 43 04 sub DWORD PTR [ebx+4], eax
+ 0009e 83 c4 04 add esp, 4
+
+; 1408 : strm->next_in += len;
+
+ 000a1 01 03 add DWORD PTR [ebx], eax
+
+; 1409 : strm->total_in += len;
+
+ 000a3 01 43 08 add DWORD PTR [ebx+8], eax
+
+; 1410 :
+; 1411 : /* return no joy or set up to restart inflate() on a new block */
+; 1412 : if (state->have != 4) return Z_DATA_ERROR;
+
+ 000a6 83 7f 68 04 cmp DWORD PTR [edi+104], 4
+ 000aa 8b 43 08 mov eax, DWORD PTR [ebx+8]
+ 000ad 89 45 08 mov DWORD PTR _in$1$[ebp], eax
+ 000b0 74 0c je SHORT $LN8@inflateSyn
+ 000b2 5e pop esi
+ 000b3 5f pop edi
+ 000b4 b8 fd ff ff ff mov eax, -3 ; fffffffdH
+ 000b9 5b pop ebx
+
+; 1418 : }
+
+ 000ba 5d pop ebp
+ 000bb c2 04 00 ret 4
+$LN8@inflateSyn:
+
+; 1413 : in = strm->total_in; out = strm->total_out;
+
+ 000be 8b 73 14 mov esi, DWORD PTR [ebx+20]
+
+; 1414 : inflateReset(strm);
+
+ 000c1 53 push ebx
+ 000c2 e8 00 00 00 00 call _inflateReset@4
+
+; 1415 : strm->total_in = in; strm->total_out = out;
+
+ 000c7 8b 45 08 mov eax, DWORD PTR _in$1$[ebp]
+ 000ca 89 73 14 mov DWORD PTR [ebx+20], esi
+ 000cd 89 43 08 mov DWORD PTR [ebx+8], eax
+
+; 1416 : state->mode = TYPE;
+; 1417 : return Z_OK;
+
+ 000d0 33 c0 xor eax, eax
+ 000d2 5e pop esi
+ 000d3 c7 07 0b 00 00
+ 00 mov DWORD PTR [edi], 11 ; 0000000bH
+ 000d9 5f pop edi
+ 000da 5b pop ebx
+
+; 1418 : }
+
+ 000db 5d pop ebp
+ 000dc c2 04 00 ret 4
+$LN5@inflateSyn:
+ 000df 5f pop edi
+
+; 1380 : unsigned len; /* number of bytes to look at or looked at */
+; 1381 : unsigned long in, out; /* temporary to save total_in and total_out */
+; 1382 : unsigned char buf[4]; /* to restore bit buffer to byte string */
+; 1383 : struct inflate_state FAR *state;
+; 1384 :
+; 1385 : /* check parameters */
+; 1386 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 000e0 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 000e5 5b pop ebx
+
+; 1418 : }
+
+ 000e6 5d pop ebp
+ 000e7 c2 04 00 ret 4
+_inflateSync@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _inflateSyncPoint@4
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_inflateSyncPoint@4 PROC ; COMDAT
+
+; 1430 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1431 : struct inflate_state FAR *state;
+; 1432 :
+; 1433 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00003 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00006 85 c0 test eax, eax
+ 00008 74 21 je SHORT $LN3@inflateSyn
+ 0000a 8b 40 1c mov eax, DWORD PTR [eax+28]
+ 0000d 85 c0 test eax, eax
+ 0000f 74 1a je SHORT $LN3@inflateSyn
+
+; 1434 : state = (struct inflate_state FAR *)strm->state;
+; 1435 : return state->mode == STORED && state->bits == 0;
+
+ 00011 83 38 0d cmp DWORD PTR [eax], 13 ; 0000000dH
+ 00014 75 0f jne SHORT $LN5@inflateSyn
+ 00016 83 78 3c 00 cmp DWORD PTR [eax+60], 0
+ 0001a 75 09 jne SHORT $LN5@inflateSyn
+ 0001c b8 01 00 00 00 mov eax, 1
+
+; 1436 : }
+
+ 00021 5d pop ebp
+ 00022 c2 04 00 ret 4
+$LN5@inflateSyn:
+
+; 1434 : state = (struct inflate_state FAR *)strm->state;
+; 1435 : return state->mode == STORED && state->bits == 0;
+
+ 00025 33 c0 xor eax, eax
+
+; 1436 : }
+
+ 00027 5d pop ebp
+ 00028 c2 04 00 ret 4
+$LN3@inflateSyn:
+
+; 1431 : struct inflate_state FAR *state;
+; 1432 :
+; 1433 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 0002b b8 fe ff ff ff mov eax, -2 ; fffffffeH
+
+; 1436 : }
+
+ 00030 5d pop ebp
+ 00031 c2 04 00 ret 4
+_inflateSyncPoint@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _inflateCopy@8
+_TEXT SEGMENT
+_dest$ = 8 ; size = 4
+_window$1$ = 12 ; size = 4
+_source$ = 12 ; size = 4
+_inflateCopy@8 PROC ; COMDAT
+
+; 1441 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1442 : struct inflate_state FAR *state;
+; 1443 : struct inflate_state FAR *copy;
+; 1444 : unsigned char FAR *window;
+; 1445 : unsigned wsize;
+; 1446 :
+; 1447 : /* check input */
+; 1448 : if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
+; 1449 : source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
+
+ 00003 8b 45 08 mov eax, DWORD PTR _dest$[ebp]
+ 00006 56 push esi
+ 00007 57 push edi
+ 00008 85 c0 test eax, eax
+ 0000a 0f 84 44 01 00
+ 00 je $LN3@inflateCop
+ 00010 8b 75 0c mov esi, DWORD PTR _source$[ebp]
+ 00013 85 f6 test esi, esi
+ 00015 0f 84 39 01 00
+ 00 je $LN3@inflateCop
+ 0001b 8b 7e 1c mov edi, DWORD PTR [esi+28]
+ 0001e 85 ff test edi, edi
+ 00020 0f 84 2e 01 00
+ 00 je $LN3@inflateCop
+ 00026 8b 46 20 mov eax, DWORD PTR [esi+32]
+ 00029 85 c0 test eax, eax
+ 0002b 0f 84 23 01 00
+ 00 je $LN3@inflateCop
+ 00031 83 7e 24 00 cmp DWORD PTR [esi+36], 0
+ 00035 0f 84 19 01 00
+ 00 je $LN3@inflateCop
+
+; 1451 : state = (struct inflate_state FAR *)source->state;
+; 1452 :
+; 1453 : /* allocate space */
+; 1454 : copy = (struct inflate_state FAR *)
+
+ 0003b 53 push ebx
+ 0003c 68 cc 1b 00 00 push 7116 ; 00001bccH
+ 00041 6a 01 push 1
+ 00043 ff 76 28 push DWORD PTR [esi+40]
+ 00046 ff d0 call eax
+ 00048 8b d8 mov ebx, eax
+ 0004a 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1455 : ZALLOC(source, 1, sizeof(struct inflate_state));
+; 1456 : if (copy == Z_NULL) return Z_MEM_ERROR;
+
+ 0004d 85 db test ebx, ebx
+ 0004f 74 38 je SHORT $LN11@inflateCop
+
+; 1457 : window = Z_NULL;
+; 1458 : if (state->window != Z_NULL) {
+
+ 00051 83 7f 34 00 cmp DWORD PTR [edi+52], 0
+ 00055 c7 45 0c 00 00
+ 00 00 mov DWORD PTR _window$1$[ebp], 0
+ 0005c 74 37 je SHORT $LN6@inflateCop
+
+; 1459 : window = (unsigned char FAR *)
+
+ 0005e 8b 4f 24 mov ecx, DWORD PTR [edi+36]
+ 00061 b8 01 00 00 00 mov eax, 1
+ 00066 d3 e0 shl eax, cl
+ 00068 6a 01 push 1
+ 0006a 50 push eax
+ 0006b ff 76 28 push DWORD PTR [esi+40]
+ 0006e 8b 46 20 mov eax, DWORD PTR [esi+32]
+ 00071 ff d0 call eax
+ 00073 83 c4 0c add esp, 12 ; 0000000cH
+ 00076 89 45 0c mov DWORD PTR _window$1$[ebp], eax
+
+; 1460 : ZALLOC(source, 1U << state->wbits, sizeof(unsigned char));
+; 1461 : if (window == Z_NULL) {
+
+ 00079 85 c0 test eax, eax
+ 0007b 75 18 jne SHORT $LN6@inflateCop
+
+; 1462 : ZFREE(source, copy);
+
+ 0007d 8b 46 24 mov eax, DWORD PTR [esi+36]
+ 00080 53 push ebx
+ 00081 ff 76 28 push DWORD PTR [esi+40]
+ 00084 ff d0 call eax
+ 00086 83 c4 08 add esp, 8
+$LN11@inflateCop:
+
+; 1463 : return Z_MEM_ERROR;
+
+ 00089 5b pop ebx
+ 0008a 5f pop edi
+ 0008b b8 fc ff ff ff mov eax, -4 ; fffffffcH
+ 00090 5e pop esi
+
+; 1483 : }
+
+ 00091 5d pop ebp
+ 00092 c2 08 00 ret 8
+$LN6@inflateCop:
+
+; 1464 : }
+; 1465 : }
+; 1466 :
+; 1467 : /* copy state */
+; 1468 : zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
+
+ 00095 0f 10 06 movups xmm0, XMMWORD PTR [esi]
+ 00098 8b 45 08 mov eax, DWORD PTR _dest$[ebp]
+
+; 1469 : zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
+
+ 0009b 68 cc 1b 00 00 push 7116 ; 00001bccH
+ 000a0 57 push edi
+ 000a1 53 push ebx
+ 000a2 0f 11 00 movups XMMWORD PTR [eax], xmm0
+ 000a5 0f 10 46 10 movups xmm0, XMMWORD PTR [esi+16]
+ 000a9 0f 11 40 10 movups XMMWORD PTR [eax+16], xmm0
+ 000ad 0f 10 46 20 movups xmm0, XMMWORD PTR [esi+32]
+ 000b1 0f 11 40 20 movups XMMWORD PTR [eax+32], xmm0
+ 000b5 f3 0f 7e 46 30 movq xmm0, QWORD PTR [esi+48]
+ 000ba 66 0f d6 40 30 movq QWORD PTR [eax+48], xmm0
+ 000bf e8 00 00 00 00 call _memcpy
+
+; 1470 : if (state->lencode >= state->codes &&
+
+ 000c4 8b 4f 4c mov ecx, DWORD PTR [edi+76]
+ 000c7 8d 87 30 05 00
+ 00 lea eax, DWORD PTR [edi+1328]
+ 000cd 83 c4 0c add esp, 12 ; 0000000cH
+ 000d0 3b c8 cmp ecx, eax
+ 000d2 72 38 jb SHORT $LN7@inflateCop
+ 000d4 8d 87 bc 1b 00
+ 00 lea eax, DWORD PTR [edi+7100]
+ 000da 3b c8 cmp ecx, eax
+ 000dc 77 2e ja SHORT $LN7@inflateCop
+
+; 1471 : state->lencode <= state->codes + ENOUGH - 1) {
+; 1472 : copy->lencode = copy->codes + (state->lencode - state->codes);
+
+ 000de 2b cf sub ecx, edi
+ 000e0 8d 81 d0 fa ff
+ ff lea eax, DWORD PTR [ecx-1328]
+ 000e6 c1 f8 02 sar eax, 2
+ 000e9 05 4c 01 00 00 add eax, 332 ; 0000014cH
+ 000ee 8d 04 83 lea eax, DWORD PTR [ebx+eax*4]
+ 000f1 89 43 4c mov DWORD PTR [ebx+76], eax
+
+; 1473 : copy->distcode = copy->codes + (state->distcode - state->codes);
+
+ 000f4 8b 47 50 mov eax, DWORD PTR [edi+80]
+ 000f7 2b c7 sub eax, edi
+ 000f9 2d 30 05 00 00 sub eax, 1328 ; 00000530H
+ 000fe c1 f8 02 sar eax, 2
+ 00101 05 4c 01 00 00 add eax, 332 ; 0000014cH
+ 00106 8d 04 83 lea eax, DWORD PTR [ebx+eax*4]
+ 00109 89 43 50 mov DWORD PTR [ebx+80], eax
+$LN7@inflateCop:
+
+; 1474 : }
+; 1475 : copy->next = copy->codes + (state->next - state->codes);
+
+ 0010c 8b 47 6c mov eax, DWORD PTR [edi+108]
+
+; 1476 : if (window != Z_NULL) {
+
+ 0010f 8b 75 0c mov esi, DWORD PTR _window$1$[ebp]
+ 00112 2b c7 sub eax, edi
+ 00114 2d 30 05 00 00 sub eax, 1328 ; 00000530H
+ 00119 c1 f8 02 sar eax, 2
+ 0011c 05 4c 01 00 00 add eax, 332 ; 0000014cH
+ 00121 8d 04 83 lea eax, DWORD PTR [ebx+eax*4]
+ 00124 89 43 6c mov DWORD PTR [ebx+108], eax
+ 00127 85 f6 test esi, esi
+ 00129 74 17 je SHORT $LN8@inflateCop
+
+; 1477 : wsize = 1U << state->wbits;
+
+ 0012b 8b 4f 24 mov ecx, DWORD PTR [edi+36]
+ 0012e b8 01 00 00 00 mov eax, 1
+ 00133 d3 e0 shl eax, cl
+
+; 1478 : zmemcpy(window, state->window, wsize);
+
+ 00135 50 push eax
+ 00136 ff 77 34 push DWORD PTR [edi+52]
+ 00139 56 push esi
+ 0013a e8 00 00 00 00 call _memcpy
+ 0013f 83 c4 0c add esp, 12 ; 0000000cH
+$LN8@inflateCop:
+
+; 1479 : }
+; 1480 : copy->window = window;
+; 1481 : dest->state = (struct internal_state FAR *)copy;
+
+ 00142 8b 45 08 mov eax, DWORD PTR _dest$[ebp]
+ 00145 89 73 34 mov DWORD PTR [ebx+52], esi
+ 00148 89 58 1c mov DWORD PTR [eax+28], ebx
+
+; 1482 : return Z_OK;
+
+ 0014b 33 c0 xor eax, eax
+ 0014d 5b pop ebx
+ 0014e 5f pop edi
+ 0014f 5e pop esi
+
+; 1483 : }
+
+ 00150 5d pop ebp
+ 00151 c2 08 00 ret 8
+$LN3@inflateCop:
+ 00154 5f pop edi
+
+; 1450 : return Z_STREAM_ERROR;
+
+ 00155 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+ 0015a 5e pop esi
+
+; 1483 : }
+
+ 0015b 5d pop ebp
+ 0015c c2 08 00 ret 8
+_inflateCopy@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _inflateUndermine@8
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_subvert$ = 12 ; size = 4
+_inflateUndermine@8 PROC ; COMDAT
+
+; 1488 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1489 : struct inflate_state FAR *state;
+; 1490 :
+; 1491 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00003 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00006 85 c0 test eax, eax
+ 00008 74 1a je SHORT $LN3@inflateUnd
+ 0000a 8b 40 1c mov eax, DWORD PTR [eax+28]
+ 0000d 85 c0 test eax, eax
+ 0000f 74 13 je SHORT $LN3@inflateUnd
+
+; 1492 : state = (struct inflate_state FAR *)strm->state;
+; 1493 : state->sane = !subvert;
+; 1494 : #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+; 1495 : return Z_OK;
+; 1496 : #else
+; 1497 : state->sane = 1;
+
+ 00011 c7 80 c0 1b 00
+ 00 01 00 00 00 mov DWORD PTR [eax+7104], 1
+
+; 1498 : return Z_DATA_ERROR;
+
+ 0001b b8 fd ff ff ff mov eax, -3 ; fffffffdH
+
+; 1499 : #endif
+; 1500 : }
+
+ 00020 5d pop ebp
+ 00021 c2 08 00 ret 8
+$LN3@inflateUnd:
+
+; 1489 : struct inflate_state FAR *state;
+; 1490 :
+; 1491 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ 00024 b8 fe ff ff ff mov eax, -2 ; fffffffeH
+
+; 1499 : #endif
+; 1500 : }
+
+ 00029 5d pop ebp
+ 0002a c2 08 00 ret 8
+_inflateUndermine@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inflate.c
+; COMDAT _inflateMark@4
+_TEXT SEGMENT
+_strm$ = 8 ; size = 4
+_inflateMark@4 PROC ; COMDAT
+
+; 1504 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1505 : struct inflate_state FAR *state;
+; 1506 :
+; 1507 : if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16;
+
+ 00003 8b 45 08 mov eax, DWORD PTR _strm$[ebp]
+ 00006 85 c0 test eax, eax
+ 00008 74 4e je SHORT $LN3@inflateMar
+ 0000a 8b 40 1c mov eax, DWORD PTR [eax+28]
+ 0000d 85 c0 test eax, eax
+ 0000f 74 47 je SHORT $LN3@inflateMar
+
+; 1508 : state = (struct inflate_state FAR *)strm->state;
+; 1509 : return ((long)(state->back) << 16) +
+
+ 00011 8b 08 mov ecx, DWORD PTR [eax]
+ 00013 83 f9 0f cmp ecx, 15 ; 0000000fH
+ 00016 75 12 jne SHORT $LN7@inflateMar
+ 00018 8b 48 40 mov ecx, DWORD PTR [eax+64]
+ 0001b 8b 80 c4 1b 00
+ 00 mov eax, DWORD PTR [eax+7108]
+ 00021 c1 e0 10 shl eax, 16 ; 00000010H
+ 00024 03 c1 add eax, ecx
+
+; 1510 : (state->mode == COPY ? state->length :
+; 1511 : (state->mode == MATCH ? state->was - state->length : 0));
+; 1512 : }
+
+ 00026 5d pop ebp
+ 00027 c2 04 00 ret 4
+$LN7@inflateMar:
+
+; 1508 : state = (struct inflate_state FAR *)strm->state;
+; 1509 : return ((long)(state->back) << 16) +
+
+ 0002a 83 f9 18 cmp ecx, 24 ; 00000018H
+ 0002d 75 18 jne SHORT $LN5@inflateMar
+ 0002f 8b 88 c8 1b 00
+ 00 mov ecx, DWORD PTR [eax+7112]
+ 00035 2b 48 40 sub ecx, DWORD PTR [eax+64]
+ 00038 8b 80 c4 1b 00
+ 00 mov eax, DWORD PTR [eax+7108]
+ 0003e c1 e0 10 shl eax, 16 ; 00000010H
+ 00041 03 c1 add eax, ecx
+
+; 1510 : (state->mode == COPY ? state->length :
+; 1511 : (state->mode == MATCH ? state->was - state->length : 0));
+; 1512 : }
+
+ 00043 5d pop ebp
+ 00044 c2 04 00 ret 4
+$LN5@inflateMar:
+
+; 1508 : state = (struct inflate_state FAR *)strm->state;
+; 1509 : return ((long)(state->back) << 16) +
+
+ 00047 8b 80 c4 1b 00
+ 00 mov eax, DWORD PTR [eax+7108]
+ 0004d 33 c9 xor ecx, ecx
+ 0004f c1 e0 10 shl eax, 16 ; 00000010H
+ 00052 03 c1 add eax, ecx
+
+; 1510 : (state->mode == COPY ? state->length :
+; 1511 : (state->mode == MATCH ? state->was - state->length : 0));
+; 1512 : }
+
+ 00054 5d pop ebp
+ 00055 c2 04 00 ret 4
+$LN3@inflateMar:
+
+; 1505 : struct inflate_state FAR *state;
+; 1506 :
+; 1507 : if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16;
+
+ 00058 b8 00 00 ff ff mov eax, -65536 ; ffff0000H
+
+; 1510 : (state->mode == COPY ? state->length :
+; 1511 : (state->mode == MATCH ? state->was - state->length : 0));
+; 1512 : }
+
+ 0005d 5d pop ebp
+ 0005e c2 04 00 ret 4
+_inflateMark@4 ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inflate.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inflate.obj
new file mode 100644
index 0000000000..bab335459e
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inflate.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inftrees.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inftrees.cod
new file mode 100644
index 0000000000..9523ecade6
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inftrees.cod
@@ -0,0 +1,1069 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\inftrees.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+ ORG $+2
+?dext@?1??inflate_table@@9@9 DW 010H ; `inflate_table'::`2'::dext
+ DW 010H
+ DW 010H
+ DW 010H
+ DW 011H
+ DW 011H
+ DW 012H
+ DW 012H
+ DW 013H
+ DW 013H
+ DW 014H
+ DW 014H
+ DW 015H
+ DW 015H
+ DW 016H
+ DW 016H
+ DW 017H
+ DW 017H
+ DW 018H
+ DW 018H
+ DW 019H
+ DW 019H
+ DW 01aH
+ DW 01aH
+ DW 01bH
+ DW 01bH
+ DW 01cH
+ DW 01cH
+ DW 01dH
+ DW 01dH
+ DW 040H
+ DW 040H
+?lext@?1??inflate_table@@9@9 DW 010H ; `inflate_table'::`2'::lext
+ DW 010H
+ DW 010H
+ DW 010H
+ DW 010H
+ DW 010H
+ DW 010H
+ DW 010H
+ DW 011H
+ DW 011H
+ DW 011H
+ DW 011H
+ DW 012H
+ DW 012H
+ DW 012H
+ DW 012H
+ DW 013H
+ DW 013H
+ DW 013H
+ DW 013H
+ DW 014H
+ DW 014H
+ DW 014H
+ DW 014H
+ DW 015H
+ DW 015H
+ DW 015H
+ DW 015H
+ DW 010H
+ DW 048H
+ DW 04eH
+ ORG $+2
+?lbase@?1??inflate_table@@9@9 DW 03H ; `inflate_table'::`2'::lbase
+ DW 04H
+ DW 05H
+ DW 06H
+ DW 07H
+ DW 08H
+ DW 09H
+ DW 0aH
+ DW 0bH
+ DW 0dH
+ DW 0fH
+ DW 011H
+ DW 013H
+ DW 017H
+ DW 01bH
+ DW 01fH
+ DW 023H
+ DW 02bH
+ DW 033H
+ DW 03bH
+ DW 043H
+ DW 053H
+ DW 063H
+ DW 073H
+ DW 083H
+ DW 0a3H
+ DW 0c3H
+ DW 0e3H
+ DW 0102H
+ DW 00H
+ DW 00H
+ ORG $+2
+?dbase@?1??inflate_table@@9@9 DW 01H ; `inflate_table'::`2'::dbase
+ DW 02H
+ DW 03H
+ DW 04H
+ DW 05H
+ DW 07H
+ DW 09H
+ DW 0dH
+ DW 011H
+ DW 019H
+ DW 021H
+ DW 031H
+ DW 041H
+ DW 061H
+ DW 081H
+ DW 0c1H
+ DW 0101H
+ DW 0181H
+ DW 0201H
+ DW 0301H
+ DW 0401H
+ DW 0601H
+ DW 0801H
+ DW 0c01H
+ DW 01001H
+ DW 01801H
+ DW 02001H
+ DW 03001H
+ DW 04001H
+ DW 06001H
+ DW 00H
+ DW 00H
+PUBLIC _inflate_table
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\inftrees.c
+; COMDAT _inflate_table
+_TEXT SEGMENT
+_offs$ = -128 ; size = 32
+_count$ = -96 ; size = 32
+_min$2$ = -64 ; size = 4
+_mask$1$ = -60 ; size = 4
+tv1501 = -56 ; size = 4
+tv1495 = -56 ; size = 4
+_low$1$ = -52 ; size = 4
+_used$1$ = -48 ; size = 4
+tv1502 = -44 ; size = 4
+_lens$1$ = -40 ; size = 4
+_base$1$ = -36 ; size = 4
+_extra$1$ = -32 ; size = 4
+_end$1$ = -28 ; size = 4
+_root$3$ = -24 ; size = 4
+_len$2$ = -20 ; size = 4
+_type$1$ = -16 ; size = 4
+_huff$1$ = -12 ; size = 4
+_next$1$ = -8 ; size = 4
+_drop$1$ = -4 ; size = 4
+_here$ = 8 ; size = 4
+_codes$ = 8 ; size = 4
+_table$ = 12 ; size = 4
+_bits$ = 16 ; size = 4
+_work$ = 20 ; size = 4
+_inflate_table PROC ; COMDAT
+; _type$ = ecx
+; _lens$ = edx
+
+; 39 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 81 ec 80 00 00
+ 00 sub esp, 128 ; 00000080H
+ 00009 53 push ebx
+ 0000a 56 push esi
+ 0000b 89 4d f0 mov DWORD PTR _type$1$[ebp], ecx
+ 0000e 0f 57 c0 xorps xmm0, xmm0
+
+; 40 : unsigned len; /* a code's length in bits */
+; 41 : unsigned sym; /* index of code symbols */
+; 42 : unsigned min, max; /* minimum and maximum code lengths */
+; 43 : unsigned root; /* number of index bits for root table */
+; 44 : unsigned curr; /* number of index bits for current table */
+; 45 : unsigned drop; /* code bits to drop for sub-table */
+; 46 : int left; /* number of prefix codes available */
+; 47 : unsigned used; /* code entries in table used */
+; 48 : unsigned huff; /* Huffman code */
+; 49 : unsigned incr; /* for incrementing code, index */
+; 50 : unsigned fill; /* index for replicating entries */
+; 51 : unsigned low; /* low bits for current root entry */
+; 52 : unsigned mask; /* mask for low root bits */
+; 53 : code here; /* table entry for duplication */
+; 54 : code FAR *next; /* next available space in table */
+; 55 : const unsigned short FAR *base; /* base value table to use */
+; 56 : const unsigned short FAR *extra; /* extra bits table to use */
+; 57 : int end; /* use base and extra for symbol > end */
+; 58 : unsigned short count[MAXBITS+1]; /* number of codes of each length */
+; 59 : unsigned short offs[MAXBITS+1]; /* offsets in table for each length */
+; 60 : static const unsigned short lbase[31] = { /* Length codes 257..285 base */
+; 61 : 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
+; 62 : 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
+; 63 : static const unsigned short lext[31] = { /* Length codes 257..285 extra */
+; 64 : 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
+; 65 : 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78};
+; 66 : static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
+; 67 : 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
+; 68 : 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
+; 69 : 8193, 12289, 16385, 24577, 0, 0};
+; 70 : static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
+; 71 : 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
+; 72 : 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
+; 73 : 28, 28, 29, 29, 64, 64};
+; 74 :
+; 75 : /*
+; 76 : Process a set of code lengths to create a canonical Huffman code. The
+; 77 : code lengths are lens[0..codes-1]. Each length corresponds to the
+; 78 : symbols 0..codes-1. The Huffman code is generated by first sorting the
+; 79 : symbols by length from short to long, and retaining the symbol order
+; 80 : for codes with equal lengths. Then the code starts with all zero bits
+; 81 : for the first code of the shortest length, and the codes are integer
+; 82 : increments for the same length, and zeros are appended as the length
+; 83 : increases. For the deflate format, these bits are stored backwards
+; 84 : from their more natural integer increment ordering, and so when the
+; 85 : decoding tables are built in the large loop below, the integer codes
+; 86 : are incremented backwards.
+; 87 :
+; 88 : This routine assumes, but does not check, that all of the entries in
+; 89 : lens[] are in the range 0..MAXBITS. The caller must assure this.
+; 90 : 1..MAXBITS is interpreted as that code length. zero means that that
+; 91 : symbol does not occur in this code.
+; 92 :
+; 93 : The codes are sorted by computing a count of codes for each length,
+; 94 : creating from that a table of starting indices for each length in the
+; 95 : sorted table, and then entering the symbols in order in the sorted
+; 96 : table. The sorted table is work[], with that space being provided by
+; 97 : the caller.
+; 98 :
+; 99 : The length counts are used for other purposes as well, i.e. finding
+; 100 : the minimum and maximum length codes, determining if there are any
+; 101 : codes at all, checking for a valid set of lengths, and looking ahead
+; 102 : at length counts to determine sub-table sizes when building the
+; 103 : decoding tables.
+; 104 : */
+; 105 :
+; 106 : /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
+; 107 : for (len = 0; len <= MAXBITS; len++)
+; 108 : count[len] = 0;
+; 109 : for (sym = 0; sym < codes; sym++)
+
+ 00011 8b 4d 08 mov ecx, DWORD PTR _codes$[ebp]
+ 00014 8b c2 mov eax, edx
+ 00016 33 f6 xor esi, esi
+ 00018 89 45 d8 mov DWORD PTR _lens$1$[ebp], eax
+ 0001b 57 push edi
+ 0001c 0f 11 45 a0 movups XMMWORD PTR _count$[ebp], xmm0
+ 00020 0f 11 45 b0 movups XMMWORD PTR _count$[ebp+16], xmm0
+ 00024 85 c9 test ecx, ecx
+ 00026 74 18 je SHORT $LN6@inflate_ta
+ 00028 0f 1f 84 00 00
+ 00 00 00 npad 8
+$LL7@inflate_ta:
+
+; 110 : count[lens[sym]]++;
+
+ 00030 0f b7 04 70 movzx eax, WORD PTR [eax+esi*2]
+ 00034 46 inc esi
+ 00035 66 ff 44 45 a0 inc WORD PTR _count$[ebp+eax*2]
+ 0003a 8b c2 mov eax, edx
+ 0003c 3b f1 cmp esi, ecx
+ 0003e 72 f0 jb SHORT $LL7@inflate_ta
+$LN6@inflate_ta:
+
+; 111 :
+; 112 : /* bound code lengths, force root to be within code lengths */
+; 113 : root = *bits;
+
+ 00040 8b 5d 10 mov ebx, DWORD PTR _bits$[ebp]
+ 00043 8d 45 ba lea eax, DWORD PTR _count$[ebp+26]
+
+; 114 : for (max = MAXBITS; max >= 1; max--)
+
+ 00046 bf 0f 00 00 00 mov edi, 15 ; 0000000fH
+ 0004b 8b 0b mov ecx, DWORD PTR [ebx]
+ 0004d 0f 1f 00 npad 3
+$LL10@inflate_ta:
+
+; 115 : if (count[max] != 0) break;
+
+ 00050 66 83 78 04 00 cmp WORD PTR [eax+4], 0
+ 00055 75 38 jne SHORT $LN78@inflate_ta
+ 00057 66 83 78 02 00 cmp WORD PTR [eax+2], 0
+ 0005c 75 30 jne SHORT $LN111@inflate_ta
+ 0005e 66 83 38 00 cmp WORD PTR [eax], 0
+ 00062 75 25 jne SHORT $LN112@inflate_ta
+ 00064 66 83 78 fe 00 cmp WORD PTR [eax-2], 0
+ 00069 75 19 jne SHORT $LN113@inflate_ta
+ 0006b 66 83 78 fc 00 cmp WORD PTR [eax-4], 0
+ 00070 75 0d jne SHORT $LN114@inflate_ta
+
+; 114 : for (max = MAXBITS; max >= 1; max--)
+
+ 00072 83 ef 05 sub edi, 5
+ 00075 83 e8 0a sub eax, 10 ; 0000000aH
+ 00078 83 ff 01 cmp edi, 1
+ 0007b 73 d3 jae SHORT $LL10@inflate_ta
+ 0007d eb 10 jmp SHORT $LN78@inflate_ta
+$LN114@inflate_ta:
+
+; 115 : if (count[max] != 0) break;
+
+ 0007f 83 ef 04 sub edi, 4
+ 00082 eb 0b jmp SHORT $LN78@inflate_ta
+$LN113@inflate_ta:
+ 00084 83 ef 03 sub edi, 3
+ 00087 eb 06 jmp SHORT $LN78@inflate_ta
+$LN112@inflate_ta:
+ 00089 83 ef 02 sub edi, 2
+ 0008c eb 01 jmp SHORT $LN78@inflate_ta
+$LN111@inflate_ta:
+ 0008e 4f dec edi
+$LN78@inflate_ta:
+
+; 116 : if (root > max) root = max;
+
+ 0008f 3b cf cmp ecx, edi
+ 00091 0f 47 cf cmova ecx, edi
+
+; 117 : if (max == 0) { /* no symbols to code at all */
+
+ 00094 85 ff test edi, edi
+ 00096 75 2a jne SHORT $LN37@inflate_ta
+
+; 118 : here.op = (unsigned char)64; /* invalid code marker */
+; 119 : here.bits = (unsigned char)1;
+; 120 : here.val = (unsigned short)0;
+; 121 : *(*table)++ = here; /* make a table to force an error */
+
+ 00098 8b 55 0c mov edx, DWORD PTR _table$[ebp]
+ 0009b c7 45 08 40 01
+ 00 00 mov DWORD PTR _here$[ebp], 320 ; 00000140H
+ 000a2 8b 45 08 mov eax, DWORD PTR _here$[ebp]
+ 000a5 5f pop edi
+ 000a6 8b 0a mov ecx, DWORD PTR [edx]
+ 000a8 5e pop esi
+ 000a9 89 01 mov DWORD PTR [ecx], eax
+ 000ab 83 02 04 add DWORD PTR [edx], 4
+ 000ae 8b 0a mov ecx, DWORD PTR [edx]
+
+; 122 : *(*table)++ = here;
+
+ 000b0 89 01 mov DWORD PTR [ecx], eax
+ 000b2 83 02 04 add DWORD PTR [edx], 4
+
+; 123 : *bits = 1;
+; 124 : return 0; /* no symbols, but wait for decoding to report error */
+
+ 000b5 33 c0 xor eax, eax
+ 000b7 c7 03 01 00 00
+ 00 mov DWORD PTR [ebx], 1
+ 000bd 5b pop ebx
+
+; 306 : }
+
+ 000be 8b e5 mov esp, ebp
+ 000c0 5d pop ebp
+ 000c1 c3 ret 0
+$LN37@inflate_ta:
+
+; 125 : }
+; 126 : for (min = 1; min < max; min++)
+
+ 000c2 bb 01 00 00 00 mov ebx, 1
+ 000c7 89 5d ec mov DWORD PTR _len$2$[ebp], ebx
+ 000ca 3b fb cmp edi, ebx
+ 000cc 76 12 jbe SHORT $LN79@inflate_ta
+ 000ce 66 90 npad 2
+$LL13@inflate_ta:
+
+; 127 : if (count[min] != 0) break;
+
+ 000d0 66 83 7c 5d a0
+ 00 cmp WORD PTR _count$[ebp+ebx*2], 0
+ 000d6 75 05 jne SHORT $LN134@inflate_ta
+
+; 125 : }
+; 126 : for (min = 1; min < max; min++)
+
+ 000d8 43 inc ebx
+ 000d9 3b df cmp ebx, edi
+ 000db 72 f3 jb SHORT $LL13@inflate_ta
+$LN134@inflate_ta:
+ 000dd 89 5d ec mov DWORD PTR _len$2$[ebp], ebx
+$LN79@inflate_ta:
+
+; 128 : if (root < min) root = min;
+
+ 000e0 3b cb cmp ecx, ebx
+
+; 129 :
+; 130 : /* check for an over-subscribed or incomplete set of lengths */
+; 131 : left = 1;
+
+ 000e2 ba 01 00 00 00 mov edx, 1
+ 000e7 0f 42 cb cmovb ecx, ebx
+ 000ea 89 4d e8 mov DWORD PTR _root$3$[ebp], ecx
+
+; 132 : for (len = 1; len <= MAXBITS; len++) {
+
+ 000ed 8b ca mov ecx, edx
+ 000ef 90 npad 1
+$LL16@inflate_ta:
+
+; 133 : left <<= 1;
+; 134 : left -= count[len];
+
+ 000f0 0f b7 44 4d a0 movzx eax, WORD PTR _count$[ebp+ecx*2]
+ 000f5 03 d2 add edx, edx
+ 000f7 2b d0 sub edx, eax
+
+; 135 : if (left < 0) return -1; /* over-subscribed */
+
+ 000f9 0f 88 04 03 00
+ 00 js $LN80@inflate_ta
+
+; 132 : for (len = 1; len <= MAXBITS; len++) {
+
+ 000ff 41 inc ecx
+ 00100 83 f9 0f cmp ecx, 15 ; 0000000fH
+ 00103 76 eb jbe SHORT $LL16@inflate_ta
+
+; 136 : }
+; 137 : if (left > 0 && (type == CODES || max != 1))
+
+ 00105 85 d2 test edx, edx
+ 00107 7e 13 jle SHORT $LN41@inflate_ta
+ 00109 83 7d f0 00 cmp DWORD PTR _type$1$[ebp], 0
+ 0010d 0f 84 f0 02 00
+ 00 je $LN80@inflate_ta
+ 00113 83 ff 01 cmp edi, 1
+ 00116 0f 85 e7 02 00
+ 00 jne $LN80@inflate_ta
+$LN41@inflate_ta:
+
+; 138 : return -1; /* incomplete set */
+; 139 :
+; 140 : /* generate offsets into symbol table for each length for sorting */
+; 141 : offs[1] = 0;
+
+ 0011c 33 c0 xor eax, eax
+
+; 142 : for (len = 1; len < MAXBITS; len++)
+
+ 0011e b9 02 00 00 00 mov ecx, 2
+ 00123 66 89 45 82 mov WORD PTR _offs$[ebp+2], ax
+ 00127 66 0f 1f 84 00
+ 00 00 00 00 npad 9
+$LL19@inflate_ta:
+
+; 143 : offs[len + 1] = offs[len] + count[len];
+
+ 00130 66 8b 44 0d 80 mov ax, WORD PTR _offs$[ebp+ecx]
+ 00135 66 03 44 0d a0 add ax, WORD PTR _count$[ebp+ecx]
+ 0013a 66 89 44 0d 82 mov WORD PTR _offs$[ebp+ecx+2], ax
+ 0013f 83 c1 02 add ecx, 2
+ 00142 83 f9 1e cmp ecx, 30 ; 0000001eH
+ 00145 72 e9 jb SHORT $LL19@inflate_ta
+
+; 144 :
+; 145 : /* sort symbols by length, by symbol order within each length */
+; 146 : for (sym = 0; sym < codes; sym++)
+
+ 00147 8b 55 08 mov edx, DWORD PTR _codes$[ebp]
+ 0014a 33 c9 xor ecx, ecx
+ 0014c 8b 75 14 mov esi, DWORD PTR _work$[ebp]
+ 0014f 85 d2 test edx, edx
+ 00151 74 26 je SHORT $LN21@inflate_ta
+ 00153 8b 5d d8 mov ebx, DWORD PTR _lens$1$[ebp]
+$LL22@inflate_ta:
+
+; 147 : if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
+
+ 00156 0f b7 04 4b movzx eax, WORD PTR [ebx+ecx*2]
+ 0015a 66 85 c0 test ax, ax
+ 0015d 74 12 je SHORT $LN20@inflate_ta
+ 0015f 0f b7 44 45 80 movzx eax, WORD PTR _offs$[ebp+eax*2]
+ 00164 66 89 0c 46 mov WORD PTR [esi+eax*2], cx
+ 00168 0f b7 04 4b movzx eax, WORD PTR [ebx+ecx*2]
+ 0016c 66 ff 44 45 80 inc WORD PTR _offs$[ebp+eax*2]
+$LN20@inflate_ta:
+
+; 144 :
+; 145 : /* sort symbols by length, by symbol order within each length */
+; 146 : for (sym = 0; sym < codes; sym++)
+
+ 00171 41 inc ecx
+ 00172 3b ca cmp ecx, edx
+ 00174 72 e0 jb SHORT $LL22@inflate_ta
+ 00176 8b 5d ec mov ebx, DWORD PTR _len$2$[ebp]
+$LN21@inflate_ta:
+
+; 148 :
+; 149 : /*
+; 150 : Create and fill in decoding tables. In this loop, the table being
+; 151 : filled is at next and has curr index bits. The code being used is huff
+; 152 : with length len. That code is converted to an index by dropping drop
+; 153 : bits off of the bottom. For codes where len is less than drop + curr,
+; 154 : those top drop + curr - len bits are incremented through all values to
+; 155 : fill the table with replicated entries.
+; 156 :
+; 157 : root is the number of index bits for the root table. When len exceeds
+; 158 : root, sub-tables are created pointed to by the root entry with an index
+; 159 : of the low root bits of huff. This is saved in low to check for when a
+; 160 : new sub-table should be started. drop is zero when the root table is
+; 161 : being filled, and drop is root when sub-tables are being filled.
+; 162 :
+; 163 : When a new sub-table is needed, it is necessary to look ahead in the
+; 164 : code lengths to determine what size sub-table is needed. The length
+; 165 : counts are used for this, and so count[] is decremented as codes are
+; 166 : entered in the tables.
+; 167 :
+; 168 : used keeps track of how many table entries have been allocated from the
+; 169 : provided *table space. It is checked for LENS and DIST tables against
+; 170 : the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
+; 171 : the initial root table size constants. See the comments in inftrees.h
+; 172 : for more information.
+; 173 :
+; 174 : sym increments through all symbols, and the loop terminates when
+; 175 : all codes of length max, i.e. all codes, have been processed. This
+; 176 : routine permits incomplete codes, so another loop after this one fills
+; 177 : in the rest of the decoding tables with invalid code markers.
+; 178 : */
+; 179 :
+; 180 : /* set up for code type */
+; 181 : switch (type) {
+
+ 00179 8b 45 f0 mov eax, DWORD PTR _type$1$[ebp]
+ 0017c 83 e8 00 sub eax, 0
+ 0017f 74 3f je SHORT $LN44@inflate_ta
+ 00181 83 e8 01 sub eax, 1
+ 00184 74 16 je SHORT $LN45@inflate_ta
+
+; 193 : default: /* DISTS */
+; 194 : base = dbase;
+; 195 : extra = dext;
+; 196 : end = -1;
+
+ 00186 83 c8 ff or eax, -1
+ 00189 c7 45 dc 00 00
+ 00 00 mov DWORD PTR _base$1$[ebp], OFFSET ?dbase@?1??inflate_table@@9@9
+ 00190 c7 45 e0 00 00
+ 00 00 mov DWORD PTR _extra$1$[ebp], OFFSET ?dext@?1??inflate_table@@9@9
+ 00197 89 45 e4 mov DWORD PTR _end$1$[ebp], eax
+ 0019a eb 31 jmp SHORT $LN23@inflate_ta
+$LN45@inflate_ta:
+
+; 185 : break;
+; 186 : case LENS:
+; 187 : base = lbase;
+; 188 : base -= 257;
+
+ 0019c b8 00 00 00 00 mov eax, OFFSET ?lbase@?1??inflate_table@@9@9
+ 001a1 2d 02 02 00 00 sub eax, 514 ; 00000202H
+ 001a6 89 45 dc mov DWORD PTR _base$1$[ebp], eax
+
+; 189 : extra = lext;
+; 190 : extra -= 257;
+
+ 001a9 b8 00 00 00 00 mov eax, OFFSET ?lext@?1??inflate_table@@9@9
+ 001ae 2d 02 02 00 00 sub eax, 514 ; 00000202H
+ 001b3 89 45 e0 mov DWORD PTR _extra$1$[ebp], eax
+
+; 191 : end = 256;
+
+ 001b6 b8 00 01 00 00 mov eax, 256 ; 00000100H
+ 001bb 89 45 e4 mov DWORD PTR _end$1$[ebp], eax
+
+; 192 : break;
+
+ 001be eb 0d jmp SHORT $LN23@inflate_ta
+$LN44@inflate_ta:
+
+; 182 : case CODES:
+; 183 : base = extra = work; /* dummy value--not used */
+
+ 001c0 89 75 e0 mov DWORD PTR _extra$1$[ebp], esi
+ 001c3 89 75 dc mov DWORD PTR _base$1$[ebp], esi
+
+; 184 : end = 19;
+
+ 001c6 c7 45 e4 13 00
+ 00 00 mov DWORD PTR _end$1$[ebp], 19 ; 00000013H
+$LN23@inflate_ta:
+
+; 197 : }
+; 198 :
+; 199 : /* initialize state for loop */
+; 200 : huff = 0; /* starting code */
+; 201 : sym = 0; /* starting code symbol */
+; 202 : len = min; /* starting code length */
+; 203 : next = *table; /* current table to fill in */
+
+ 001cd 8b 4d 0c mov ecx, DWORD PTR _table$[ebp]
+
+; 204 : curr = root; /* current table index bits */
+; 205 : drop = 0; /* current bits to drop from code for index */
+; 206 : low = (unsigned)(-1); /* trigger new sub-table when len > root */
+; 207 : used = 1U << root; /* use root table entries */
+
+ 001d0 ba 01 00 00 00 mov edx, 1
+ 001d5 c7 45 f4 00 00
+ 00 00 mov DWORD PTR _huff$1$[ebp], 0
+ 001dc c7 45 fc 00 00
+ 00 00 mov DWORD PTR _drop$1$[ebp], 0
+ 001e3 c7 45 cc ff ff
+ ff ff mov DWORD PTR _low$1$[ebp], -1
+ 001ea 8b 01 mov eax, DWORD PTR [ecx]
+ 001ec 8b 4d e8 mov ecx, DWORD PTR _root$3$[ebp]
+ 001ef d3 e2 shl edx, cl
+ 001f1 89 45 f8 mov DWORD PTR _next$1$[ebp], eax
+ 001f4 8b c2 mov eax, edx
+ 001f6 89 55 d4 mov DWORD PTR tv1502[ebp], edx
+ 001f9 89 45 d0 mov DWORD PTR _used$1$[ebp], eax
+
+; 208 : mask = used - 1; /* mask for comparing low */
+
+ 001fc 8d 48 ff lea ecx, DWORD PTR [eax-1]
+ 001ff 89 4d c4 mov DWORD PTR _mask$1$[ebp], ecx
+
+; 209 :
+; 210 : /* check available table space */
+; 211 : if ((type == LENS && used > ENOUGH_LENS) ||
+
+ 00202 8b 4d f0 mov ecx, DWORD PTR _type$1$[ebp]
+ 00205 83 f9 01 cmp ecx, 1
+ 00208 75 09 jne SHORT $LN49@inflate_ta
+ 0020a 3d 54 03 00 00 cmp eax, 852 ; 00000354H
+ 0020f 77 0e ja SHORT $LN48@inflate_ta
+ 00211 eb 25 jmp SHORT $LL25@inflate_ta
+$LN49@inflate_ta:
+ 00213 83 f9 02 cmp ecx, 2
+ 00216 75 20 jne SHORT $LL25@inflate_ta
+ 00218 3d 50 02 00 00 cmp eax, 592 ; 00000250H
+ 0021d 76 19 jbe SHORT $LL25@inflate_ta
+$LN48@inflate_ta:
+ 0021f 5f pop edi
+ 00220 5e pop esi
+
+; 212 : (type == DISTS && used > ENOUGH_DISTS))
+; 213 : return 1;
+
+ 00221 b8 01 00 00 00 mov eax, 1
+ 00226 5b pop ebx
+
+; 306 : }
+
+ 00227 8b e5 mov esp, ebp
+ 00229 5d pop ebp
+ 0022a c3 ret 0
+ 0022b 0f 1f 44 00 00 npad 5
+$LL136@inflate_ta:
+ 00230 8b 55 d4 mov edx, DWORD PTR tv1502[ebp]
+ 00233 eb 03 jmp SHORT $LL25@inflate_ta
+$LN137@inflate_ta:
+ 00235 8b 75 14 mov esi, DWORD PTR _work$[ebp]
+$LL25@inflate_ta:
+
+; 214 :
+; 215 : /* process all codes and make table entries */
+; 216 : for (;;) {
+; 217 : /* create table entry */
+; 218 : here.bits = (unsigned char)(len - drop);
+
+ 00238 8a c3 mov al, bl
+ 0023a 2a 45 fc sub al, BYTE PTR _drop$1$[ebp]
+ 0023d 88 45 09 mov BYTE PTR _here$[ebp+1], al
+
+; 219 : if ((int)(work[sym]) < end) {
+
+ 00240 0f b7 06 movzx eax, WORD PTR [esi]
+ 00243 8b 75 e4 mov esi, DWORD PTR _end$1$[ebp]
+ 00246 8b c8 mov ecx, eax
+ 00248 3b ce cmp ecx, esi
+ 0024a 7d 06 jge SHORT $LN143@inflate_ta
+
+; 220 : here.op = (unsigned char)0;
+
+ 0024c c6 45 08 00 mov BYTE PTR _here$[ebp], 0
+
+; 221 : here.val = work[sym];
+; 222 : }
+
+ 00250 eb 1a jmp SHORT $LN144@inflate_ta
+$LN143@inflate_ta:
+
+; 223 : else if ((int)(work[sym]) > end) {
+
+ 00252 7e 12 jle SHORT $LN52@inflate_ta
+
+; 224 : here.op = (unsigned char)(extra[work[sym]]);
+
+ 00254 8b 45 e0 mov eax, DWORD PTR _extra$1$[ebp]
+ 00257 8a 04 48 mov al, BYTE PTR [eax+ecx*2]
+ 0025a 88 45 08 mov BYTE PTR _here$[ebp], al
+
+; 225 : here.val = base[work[sym]];
+
+ 0025d 8b 45 dc mov eax, DWORD PTR _base$1$[ebp]
+ 00260 66 8b 04 48 mov ax, WORD PTR [eax+ecx*2]
+
+; 226 : }
+
+ 00264 eb 06 jmp SHORT $LN144@inflate_ta
+$LN52@inflate_ta:
+
+; 227 : else {
+; 228 : here.op = (unsigned char)(32 + 64); /* end of block */
+
+ 00266 c6 45 08 60 mov BYTE PTR _here$[ebp], 96 ; 00000060H
+
+; 229 : here.val = 0;
+
+ 0026a 33 c0 xor eax, eax
+$LN144@inflate_ta:
+
+; 230 : }
+; 231 :
+; 232 : /* replicate for those indices with low len bits equal to huff */
+; 233 : incr = 1U << (len - drop);
+
+ 0026c 8b cb mov ecx, ebx
+ 0026e 66 89 45 0a mov WORD PTR _here$[ebp+2], ax
+ 00272 2b 4d fc sub ecx, DWORD PTR _drop$1$[ebp]
+ 00275 be 01 00 00 00 mov esi, 1
+ 0027a d3 e6 shl esi, cl
+ 0027c 8b 4d fc mov ecx, DWORD PTR _drop$1$[ebp]
+
+; 234 : fill = 1U << curr;
+; 235 : min = fill; /* save offset to next table */
+
+ 0027f 89 55 c0 mov DWORD PTR _min$2$[ebp], edx
+ 00282 8d 04 b5 00 00
+ 00 00 lea eax, DWORD PTR [esi*4]
+ 00289 89 45 c8 mov DWORD PTR tv1495[ebp], eax
+ 0028c 8b 45 f4 mov eax, DWORD PTR _huff$1$[ebp]
+ 0028f d3 e8 shr eax, cl
+ 00291 8b 4d f8 mov ecx, DWORD PTR _next$1$[ebp]
+ 00294 03 c2 add eax, edx
+ 00296 8d 0c 81 lea ecx, DWORD PTR [ecx+eax*4]
+ 00299 8b 45 08 mov eax, DWORD PTR _here$[ebp]
+ 0029c 0f 1f 40 00 npad 4
+$LL30@inflate_ta:
+
+; 236 : do {
+; 237 : fill -= incr;
+
+ 002a0 2b 4d c8 sub ecx, DWORD PTR tv1495[ebp]
+
+; 238 : next[(huff >> drop) + fill] = here;
+
+ 002a3 89 01 mov DWORD PTR [ecx], eax
+ 002a5 2b d6 sub edx, esi
+
+; 239 : } while (fill != 0);
+
+ 002a7 75 f7 jne SHORT $LL30@inflate_ta
+
+; 240 :
+; 241 : /* backwards increment the len-bit code huff */
+; 242 : incr = 1U << (len - 1);
+
+ 002a9 8d 4b ff lea ecx, DWORD PTR [ebx-1]
+ 002ac ba 01 00 00 00 mov edx, 1
+ 002b1 d3 e2 shl edx, cl
+
+; 243 : while (huff & incr)
+
+ 002b3 8b 4d f4 mov ecx, DWORD PTR _huff$1$[ebp]
+ 002b6 85 d1 test edx, ecx
+ 002b8 74 0c je SHORT $LN32@inflate_ta
+ 002ba 66 0f 1f 44 00
+ 00 npad 6
+$LL31@inflate_ta:
+
+; 244 : incr >>= 1;
+
+ 002c0 d1 ea shr edx, 1
+ 002c2 85 d1 test edx, ecx
+ 002c4 75 fa jne SHORT $LL31@inflate_ta
+$LN32@inflate_ta:
+
+; 245 : if (incr != 0) {
+
+ 002c6 85 d2 test edx, edx
+ 002c8 74 09 je SHORT $LN54@inflate_ta
+
+; 246 : huff &= incr - 1;
+
+ 002ca 8d 42 ff lea eax, DWORD PTR [edx-1]
+ 002cd 23 c1 and eax, ecx
+
+; 247 : huff += incr;
+
+ 002cf 03 d0 add edx, eax
+
+; 248 : }
+
+ 002d1 eb 02 jmp SHORT $LN145@inflate_ta
+$LN54@inflate_ta:
+
+; 249 : else
+; 250 : huff = 0;
+
+ 002d3 33 d2 xor edx, edx
+$LN145@inflate_ta:
+
+; 251 :
+; 252 : /* go to next symbol, update count, len */
+; 253 : sym++;
+
+ 002d5 8b 45 14 mov eax, DWORD PTR _work$[ebp]
+
+; 254 : if (--(count[len]) == 0) {
+
+ 002d8 b9 ff ff 00 00 mov ecx, 65535 ; 0000ffffH
+ 002dd 83 c0 02 add eax, 2
+ 002e0 89 55 f4 mov DWORD PTR _huff$1$[ebp], edx
+ 002e3 66 01 4c 5d a0 add WORD PTR _count$[ebp+ebx*2], cx
+ 002e8 89 45 14 mov DWORD PTR _work$[ebp], eax
+ 002eb 75 15 jne SHORT $LN56@inflate_ta
+
+; 255 : if (len == max) break;
+
+ 002ed 3b df cmp ebx, edi
+ 002ef 0f 84 d5 00 00
+ 00 je $LN82@inflate_ta
+
+; 256 : len = lens[work[sym]];
+
+ 002f5 0f b7 00 movzx eax, WORD PTR [eax]
+ 002f8 8b 4d d8 mov ecx, DWORD PTR _lens$1$[ebp]
+ 002fb 0f b7 1c 41 movzx ebx, WORD PTR [ecx+eax*2]
+ 002ff 89 5d ec mov DWORD PTR _len$2$[ebp], ebx
+$LN56@inflate_ta:
+
+; 257 : }
+; 258 :
+; 259 : /* create new sub-table if needed */
+; 260 : if (len > root && (huff & mask) != low) {
+
+ 00302 8b 45 e8 mov eax, DWORD PTR _root$3$[ebp]
+ 00305 8b 75 14 mov esi, DWORD PTR _work$[ebp]
+ 00308 3b d8 cmp ebx, eax
+ 0030a 0f 86 20 ff ff
+ ff jbe $LL136@inflate_ta
+ 00310 8b 75 c4 mov esi, DWORD PTR _mask$1$[ebp]
+ 00313 23 f2 and esi, edx
+ 00315 8b 55 d4 mov edx, DWORD PTR tv1502[ebp]
+ 00318 89 75 c8 mov DWORD PTR tv1501[ebp], esi
+ 0031b 3b 75 cc cmp esi, DWORD PTR _low$1$[ebp]
+ 0031e 0f 84 11 ff ff
+ ff je $LN137@inflate_ta
+
+; 261 : /* if first time, transition to sub-tables */
+; 262 : if (drop == 0)
+
+ 00324 8b 55 fc mov edx, DWORD PTR _drop$1$[ebp]
+ 00327 85 d2 test edx, edx
+
+; 263 : drop = root;
+; 264 :
+; 265 : /* increment past last table */
+; 266 : next += min; /* here min is 1 << curr */
+
+ 00329 8b 4d f8 mov ecx, DWORD PTR _next$1$[ebp]
+ 0032c 0f 44 d0 cmove edx, eax
+ 0032f 8b 45 c0 mov eax, DWORD PTR _min$2$[ebp]
+
+; 267 :
+; 268 : /* determine length of next table */
+; 269 : curr = len - drop;
+
+ 00332 2b da sub ebx, edx
+ 00334 89 55 fc mov DWORD PTR _drop$1$[ebp], edx
+
+; 270 : left = (int)(1 << curr);
+; 271 : while (curr + drop < max) {
+
+ 00337 03 d3 add edx, ebx
+ 00339 8d 0c 81 lea ecx, DWORD PTR [ecx+eax*4]
+ 0033c b8 01 00 00 00 mov eax, 1
+ 00341 89 4d f8 mov DWORD PTR _next$1$[ebp], ecx
+ 00344 8b cb mov ecx, ebx
+ 00346 d3 e0 shl eax, cl
+ 00348 3b d7 cmp edx, edi
+ 0034a 73 1d jae SHORT $LN81@inflate_ta
+
+; 263 : drop = root;
+; 264 :
+; 265 : /* increment past last table */
+; 266 : next += min; /* here min is 1 << curr */
+
+ 0034c 8d 75 a0 lea esi, DWORD PTR _count$[ebp]
+ 0034f 8d 34 56 lea esi, DWORD PTR [esi+edx*2]
+$LL33@inflate_ta:
+
+; 272 : left -= count[curr + drop];
+
+ 00352 0f b7 0e movzx ecx, WORD PTR [esi]
+ 00355 2b c1 sub eax, ecx
+
+; 273 : if (left <= 0) break;
+
+ 00357 85 c0 test eax, eax
+ 00359 7e 0b jle SHORT $LN135@inflate_ta
+
+; 274 : curr++;
+
+ 0035b 42 inc edx
+ 0035c 43 inc ebx
+ 0035d 83 c6 02 add esi, 2
+
+; 275 : left <<= 1;
+
+ 00360 03 c0 add eax, eax
+ 00362 3b d7 cmp edx, edi
+ 00364 72 ec jb SHORT $LL33@inflate_ta
+$LN135@inflate_ta:
+ 00366 8b 75 c8 mov esi, DWORD PTR tv1501[ebp]
+$LN81@inflate_ta:
+
+; 276 : }
+; 277 :
+; 278 : /* check for enough space */
+; 279 : used += 1U << curr;
+
+ 00369 8b 45 d0 mov eax, DWORD PTR _used$1$[ebp]
+ 0036c 8b cb mov ecx, ebx
+ 0036e ba 01 00 00 00 mov edx, 1
+ 00373 d3 e2 shl edx, cl
+
+; 280 : if ((type == LENS && used > ENOUGH_LENS) ||
+
+ 00375 8b 4d f0 mov ecx, DWORD PTR _type$1$[ebp]
+ 00378 03 c2 add eax, edx
+ 0037a 89 55 d4 mov DWORD PTR tv1502[ebp], edx
+ 0037d 89 45 d0 mov DWORD PTR _used$1$[ebp], eax
+ 00380 83 f9 01 cmp ecx, 1
+ 00383 75 07 jne SHORT $LN63@inflate_ta
+ 00385 3d 54 03 00 00 cmp eax, 852 ; 00000354H
+ 0038a eb 0a jmp SHORT $LN146@inflate_ta
+$LN63@inflate_ta:
+ 0038c 83 f9 02 cmp ecx, 2
+ 0038f 75 0b jne SHORT $LN61@inflate_ta
+ 00391 3d 50 02 00 00 cmp eax, 592 ; 00000250H
+$LN146@inflate_ta:
+ 00396 0f 87 83 fe ff
+ ff ja $LN48@inflate_ta
+$LN61@inflate_ta:
+
+; 281 : (type == DISTS && used > ENOUGH_DISTS))
+; 282 : return 1;
+; 283 :
+; 284 : /* point entry in root table to sub-table */
+; 285 : low = huff & mask;
+; 286 : (*table)[low].op = (unsigned char)curr;
+
+ 0039c 8b 4d 0c mov ecx, DWORD PTR _table$[ebp]
+ 0039f 89 75 cc mov DWORD PTR _low$1$[ebp], esi
+ 003a2 8b 01 mov eax, DWORD PTR [ecx]
+ 003a4 88 1c b0 mov BYTE PTR [eax+esi*4], bl
+
+; 287 : (*table)[low].bits = (unsigned char)root;
+
+ 003a7 8b 01 mov eax, DWORD PTR [ecx]
+ 003a9 8b 4d e8 mov ecx, DWORD PTR _root$3$[ebp]
+
+; 288 : (*table)[low].val = (unsigned short)(next - *table);
+; 289 : }
+; 290 : }
+
+ 003ac 8b 5d ec mov ebx, DWORD PTR _len$2$[ebp]
+ 003af 88 4c b0 01 mov BYTE PTR [eax+esi*4+1], cl
+ 003b3 8b 4d 0c mov ecx, DWORD PTR _table$[ebp]
+ 003b6 8b 45 f8 mov eax, DWORD PTR _next$1$[ebp]
+ 003b9 8b 09 mov ecx, DWORD PTR [ecx]
+ 003bb 2b c1 sub eax, ecx
+ 003bd c1 f8 02 sar eax, 2
+ 003c0 66 89 44 b1 02 mov WORD PTR [ecx+esi*4+2], ax
+ 003c5 e9 6b fe ff ff jmp $LN137@inflate_ta
+$LN82@inflate_ta:
+
+; 291 :
+; 292 : /* fill in remaining table entry if code is incomplete (guaranteed to have
+; 293 : at most one remaining entry, since if the code is incomplete, the
+; 294 : maximum code length that was allowed to get this far is one bit) */
+; 295 : if (huff != 0) {
+
+ 003ca 85 d2 test edx, edx
+ 003cc 74 19 je SHORT $LN64@inflate_ta
+
+; 296 : here.op = (unsigned char)64; /* invalid code marker */
+; 297 : here.bits = (unsigned char)(len - drop);
+
+ 003ce 2a 5d fc sub bl, BYTE PTR _drop$1$[ebp]
+
+; 298 : here.val = (unsigned short)0;
+
+ 003d1 33 c0 xor eax, eax
+
+; 299 : next[huff] = here;
+
+ 003d3 8b 4d f8 mov ecx, DWORD PTR _next$1$[ebp]
+ 003d6 c6 45 08 40 mov BYTE PTR _here$[ebp], 64 ; 00000040H
+ 003da 88 5d 09 mov BYTE PTR _here$[ebp+1], bl
+ 003dd 66 89 45 0a mov WORD PTR _here$[ebp+2], ax
+ 003e1 8b 45 08 mov eax, DWORD PTR _here$[ebp]
+ 003e4 89 04 91 mov DWORD PTR [ecx+edx*4], eax
+$LN64@inflate_ta:
+
+; 300 : }
+; 301 :
+; 302 : /* set return parameters */
+; 303 : *table += used;
+
+ 003e7 8b 4d 0c mov ecx, DWORD PTR _table$[ebp]
+ 003ea 8b 45 d0 mov eax, DWORD PTR _used$1$[ebp]
+ 003ed c1 e0 02 shl eax, 2
+ 003f0 5f pop edi
+ 003f1 01 01 add DWORD PTR [ecx], eax
+
+; 304 : *bits = root;
+
+ 003f3 8b 4d 10 mov ecx, DWORD PTR _bits$[ebp]
+ 003f6 8b 45 e8 mov eax, DWORD PTR _root$3$[ebp]
+ 003f9 5e pop esi
+ 003fa 5b pop ebx
+ 003fb 89 01 mov DWORD PTR [ecx], eax
+
+; 305 : return 0;
+
+ 003fd 33 c0 xor eax, eax
+
+; 306 : }
+
+ 003ff 8b e5 mov esp, ebp
+ 00401 5d pop ebp
+ 00402 c3 ret 0
+$LN80@inflate_ta:
+ 00403 5f pop edi
+ 00404 5e pop esi
+
+; 135 : if (left < 0) return -1; /* over-subscribed */
+
+ 00405 83 c8 ff or eax, -1
+ 00408 5b pop ebx
+
+; 306 : }
+
+ 00409 8b e5 mov esp, ebp
+ 0040b 5d pop ebp
+ 0040c c3 ret 0
+_inflate_table ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inftrees.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inftrees.obj
new file mode 100644
index 0000000000..2fca5acb27
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/inftrees.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/ioapi.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/ioapi.cod
new file mode 100644
index 0000000000..949629adf2
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/ioapi.cod
@@ -0,0 +1,882 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\ioapi.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+PUBLIC ??_C@_02JDPG@rb?$AA@ ; `string'
+PUBLIC ??_C@_03HMFOOINA@r?$CLb?$AA@ ; `string'
+PUBLIC ??_C@_02GMLFBBN@wb?$AA@ ; `string'
+EXTRN __imp___fseeki64:PROC
+EXTRN __imp__fread:PROC
+EXTRN __imp___ftelli64:PROC
+EXTRN __imp__fwrite:PROC
+EXTRN __imp__fseek:PROC
+EXTRN __imp__fclose:PROC
+EXTRN __imp__fopen:PROC
+EXTRN __imp__ferror:PROC
+EXTRN __imp__ftell:PROC
+_DATA ENDS
+; COMDAT ??_C@_02GMLFBBN@wb?$AA@
+CONST SEGMENT
+??_C@_02GMLFBBN@wb?$AA@ DB 'wb', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_03HMFOOINA@r?$CLb?$AA@
+CONST SEGMENT
+??_C@_03HMFOOINA@r?$CLb?$AA@ DB 'r+b', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_02JDPG@rb?$AA@
+CONST SEGMENT
+??_C@_02JDPG@rb?$AA@ DB 'rb', 00H ; `string'
+PUBLIC _fill_fopen64_filefunc
+PUBLIC _fill_zlib_filefunc64_32_def_from_filefunc32
+PUBLIC _call_ztell64
+PUBLIC _call_zseek64
+PUBLIC _call_zopen64
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\ioapi.c
+; COMDAT _call_zopen64
+_TEXT SEGMENT
+_mode$ = 8 ; size = 4
+_call_zopen64 PROC ; COMDAT
+; _pfilefunc$ = ecx
+; _filename$ = edx
+
+; 32 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 33 : if (pfilefunc->zfile_func64.zopen64_file != NULL)
+; 34 : return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode);
+
+ 00003 ff 75 08 push DWORD PTR _mode$[ebp]
+ 00006 8b 01 mov eax, DWORD PTR [ecx]
+ 00008 52 push edx
+ 00009 ff 71 1c push DWORD PTR [ecx+28]
+ 0000c 85 c0 test eax, eax
+ 0000e 75 03 jne SHORT $LN5@call_zopen
+
+; 35 : else
+; 36 : {
+; 37 : return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,(const char*)filename,mode);
+
+ 00010 8b 41 20 mov eax, DWORD PTR [ecx+32]
+$LN5@call_zopen:
+ 00013 ff d0 call eax
+ 00015 83 c4 0c add esp, 12 ; 0000000cH
+
+; 38 : }
+; 39 : }
+
+ 00018 5d pop ebp
+ 00019 c3 ret 0
+_call_zopen64 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\ioapi.c
+; COMDAT _call_zseek64
+_TEXT SEGMENT
+_offset$ = 8 ; size = 8
+_origin$ = 16 ; size = 4
+_call_zseek64 PROC ; COMDAT
+; _pfilefunc$ = ecx
+; _filestream$ = edx
+
+; 42 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 51 push ecx
+
+; 43 : if (pfilefunc->zfile_func64.zseek64_file != NULL)
+
+ 00007 8b 41 10 mov eax, DWORD PTR [ecx+16]
+ 0000a 56 push esi
+ 0000b 85 c0 test eax, eax
+ 0000d 74 17 je SHORT $LN2@call_zseek
+
+; 44 : return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin);
+
+ 0000f ff 75 10 push DWORD PTR _origin$[ebp]
+ 00012 ff 75 0c push DWORD PTR _offset$[ebp+4]
+ 00015 ff 75 08 push DWORD PTR _offset$[ebp]
+ 00018 52 push edx
+ 00019 ff 71 1c push DWORD PTR [ecx+28]
+ 0001c ff d0 call eax
+ 0001e 83 c4 14 add esp, 20 ; 00000014H
+
+; 52 : }
+; 53 : }
+
+ 00021 5e pop esi
+ 00022 8b e5 mov esp, ebp
+ 00024 5d pop ebp
+ 00025 c3 ret 0
+$LN2@call_zseek:
+
+; 45 : else
+; 46 : {
+; 47 : uLong offsetTruncated = (uLong)offset;
+; 48 : if (offsetTruncated != offset)
+
+ 00026 8b 45 08 mov eax, DWORD PTR _offset$[ebp]
+ 00029 33 f6 xor esi, esi
+ 0002b 3b c0 cmp eax, eax
+ 0002d 75 1a jne SHORT $LN7@call_zseek
+ 0002f 3b 75 0c cmp esi, DWORD PTR _offset$[ebp+4]
+ 00032 75 15 jne SHORT $LN7@call_zseek
+
+; 50 : else
+; 51 : return (*(pfilefunc->zseek32_file))(pfilefunc->zfile_func64.opaque,filestream,offsetTruncated,origin);
+
+ 00034 ff 75 10 push DWORD PTR _origin$[ebp]
+ 00037 50 push eax
+ 00038 8b 41 28 mov eax, DWORD PTR [ecx+40]
+ 0003b 52 push edx
+ 0003c ff 71 1c push DWORD PTR [ecx+28]
+ 0003f ff d0 call eax
+ 00041 83 c4 10 add esp, 16 ; 00000010H
+
+; 52 : }
+; 53 : }
+
+ 00044 5e pop esi
+ 00045 8b e5 mov esp, ebp
+ 00047 5d pop ebp
+ 00048 c3 ret 0
+$LN7@call_zseek:
+
+; 49 : return -1;
+
+ 00049 83 c8 ff or eax, -1
+
+; 52 : }
+; 53 : }
+
+ 0004c 5e pop esi
+ 0004d 8b e5 mov esp, ebp
+ 0004f 5d pop ebp
+ 00050 c3 ret 0
+_call_zseek64 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\ioapi.c
+; COMDAT _call_ztell64
+_TEXT SEGMENT
+_call_ztell64 PROC ; COMDAT
+; _pfilefunc$ = ecx
+; _filestream$ = edx
+
+; 57 : if (pfilefunc->zfile_func64.zseek64_file != NULL)
+
+ 00000 83 79 10 00 cmp DWORD PTR [ecx+16], 0
+
+; 58 : return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream);
+
+ 00004 52 push edx
+ 00005 ff 71 1c push DWORD PTR [ecx+28]
+ 00008 74 09 je SHORT $LN2@call_ztell
+ 0000a 8b 41 0c mov eax, DWORD PTR [ecx+12]
+ 0000d ff d0 call eax
+ 0000f 83 c4 08 add esp, 8
+
+; 66 : }
+; 67 : }
+
+ 00012 c3 ret 0
+$LN2@call_ztell:
+
+; 59 : else
+; 60 : {
+; 61 : uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);
+
+ 00013 8b 41 24 mov eax, DWORD PTR [ecx+36]
+ 00016 ff d0 call eax
+ 00018 83 c4 08 add esp, 8
+
+; 62 : if ((tell_uLong) == MAXU32)
+
+ 0001b 83 f8 ff cmp eax, -1
+ 0001e 75 06 jne SHORT $LN4@call_ztell
+
+; 63 : return (ZPOS64_T)-1;
+
+ 00020 0b c0 or eax, eax
+ 00022 83 ca ff or edx, -1
+
+; 66 : }
+; 67 : }
+
+ 00025 c3 ret 0
+$LN4@call_ztell:
+
+; 64 : else
+; 65 : return tell_uLong;
+
+ 00026 33 d2 xor edx, edx
+
+; 66 : }
+; 67 : }
+
+ 00028 c3 ret 0
+_call_ztell64 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\ioapi.c
+; COMDAT _fill_zlib_filefunc64_32_def_from_filefunc32
+_TEXT SEGMENT
+_fill_zlib_filefunc64_32_def_from_filefunc32 PROC ; COMDAT
+; _p_filefunc64_32$ = ecx
+; _p_filefunc32$ = edx
+
+; 71 : p_filefunc64_32->zfile_func64.zopen64_file = NULL;
+; 72 : p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file;
+
+ 00000 8b 02 mov eax, DWORD PTR [edx]
+ 00002 89 41 20 mov DWORD PTR [ecx+32], eax
+
+; 73 : p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
+; 74 : p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file;
+
+ 00005 8b 42 04 mov eax, DWORD PTR [edx+4]
+ 00008 89 41 04 mov DWORD PTR [ecx+4], eax
+
+; 75 : p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file;
+
+ 0000b 8b 42 08 mov eax, DWORD PTR [edx+8]
+ 0000e 89 41 08 mov DWORD PTR [ecx+8], eax
+
+; 76 : p_filefunc64_32->zfile_func64.ztell64_file = NULL;
+; 77 : p_filefunc64_32->zfile_func64.zseek64_file = NULL;
+; 78 : p_filefunc64_32->zfile_func64.zclose_file = p_filefunc32->zclose_file;
+
+ 00011 8b 42 14 mov eax, DWORD PTR [edx+20]
+ 00014 89 41 14 mov DWORD PTR [ecx+20], eax
+
+; 79 : p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
+
+ 00017 8b 42 18 mov eax, DWORD PTR [edx+24]
+ 0001a 89 41 18 mov DWORD PTR [ecx+24], eax
+
+; 80 : p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque;
+
+ 0001d 8b 42 1c mov eax, DWORD PTR [edx+28]
+ 00020 89 41 1c mov DWORD PTR [ecx+28], eax
+
+; 81 : p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file;
+
+ 00023 8b 42 10 mov eax, DWORD PTR [edx+16]
+ 00026 89 41 28 mov DWORD PTR [ecx+40], eax
+
+; 82 : p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file;
+
+ 00029 8b 42 0c mov eax, DWORD PTR [edx+12]
+ 0002c c7 01 00 00 00
+ 00 mov DWORD PTR [ecx], 0
+ 00032 c7 41 0c 00 00
+ 00 00 mov DWORD PTR [ecx+12], 0
+ 00039 c7 41 10 00 00
+ 00 00 mov DWORD PTR [ecx+16], 0
+ 00040 89 41 24 mov DWORD PTR [ecx+36], eax
+
+; 83 : }
+
+ 00043 c3 ret 0
+_fill_zlib_filefunc64_32_def_from_filefunc32 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\ioapi.c
+; COMDAT _fopen_file_func
+_TEXT SEGMENT
+_opaque$ = 8 ; size = 4
+_filename$ = 12 ; size = 4
+_mode$ = 16 ; size = 4
+_fopen_file_func PROC ; COMDAT
+
+; 96 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 97 : FILE* file = NULL;
+; 98 : const char* mode_fopen = NULL;
+; 99 : if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
+
+ 00003 8b 4d 10 mov ecx, DWORD PTR _mode$[ebp]
+ 00006 33 d2 xor edx, edx
+ 00008 8b c1 mov eax, ecx
+ 0000a 24 03 and al, 3
+ 0000c 3c 01 cmp al, 1
+ 0000e 75 07 jne SHORT $LN2@fopen_file
+
+; 100 : mode_fopen = "rb";
+
+ 00010 b8 00 00 00 00 mov eax, OFFSET ??_C@_02JDPG@rb?$AA@
+ 00015 eb 17 jmp SHORT $LN6@fopen_file
+$LN2@fopen_file:
+
+; 101 : else
+; 102 : if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
+
+ 00017 f6 c1 04 test cl, 4
+ 0001a 74 07 je SHORT $LN4@fopen_file
+
+; 103 : mode_fopen = "r+b";
+
+ 0001c b8 00 00 00 00 mov eax, OFFSET ??_C@_03HMFOOINA@r?$CLb?$AA@
+ 00021 eb 0b jmp SHORT $LN6@fopen_file
+$LN4@fopen_file:
+
+; 104 : else
+; 105 : if (mode & ZLIB_FILEFUNC_MODE_CREATE)
+
+ 00023 f6 c1 08 test cl, 8
+ 00026 b8 00 00 00 00 mov eax, OFFSET ??_C@_02GMLFBBN@wb?$AA@
+ 0002b 0f 44 c2 cmove eax, edx
+$LN6@fopen_file:
+
+; 106 : mode_fopen = "wb";
+; 107 :
+; 108 : if ((filename!=NULL) && (mode_fopen != NULL))
+
+ 0002e 8b 4d 0c mov ecx, DWORD PTR _filename$[ebp]
+ 00031 85 c9 test ecx, ecx
+ 00033 74 11 je SHORT $LN9@fopen_file
+ 00035 85 c0 test eax, eax
+ 00037 74 0d je SHORT $LN9@fopen_file
+
+; 109 : file = fopen(filename, mode_fopen);
+
+ 00039 50 push eax
+ 0003a 51 push ecx
+ 0003b ff 15 00 00 00
+ 00 call DWORD PTR __imp__fopen
+ 00041 83 c4 08 add esp, 8
+
+; 111 : }
+
+ 00044 5d pop ebp
+ 00045 c3 ret 0
+$LN9@fopen_file:
+
+; 110 : return file;
+
+ 00046 33 c0 xor eax, eax
+
+; 111 : }
+
+ 00048 5d pop ebp
+ 00049 c3 ret 0
+_fopen_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\ioapi.c
+; COMDAT _fopen64_file_func
+_TEXT SEGMENT
+_opaque$ = 8 ; size = 4
+_filename$ = 12 ; size = 4
+_mode$ = 16 ; size = 4
+_fopen64_file_func PROC ; COMDAT
+
+; 114 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 115 : FILE* file = NULL;
+; 116 : const char* mode_fopen = NULL;
+; 117 : if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
+
+ 00003 8b 4d 10 mov ecx, DWORD PTR _mode$[ebp]
+ 00006 33 d2 xor edx, edx
+ 00008 8b c1 mov eax, ecx
+ 0000a 24 03 and al, 3
+ 0000c 3c 01 cmp al, 1
+ 0000e 75 07 jne SHORT $LN2@fopen64_fi
+
+; 118 : mode_fopen = "rb";
+
+ 00010 b8 00 00 00 00 mov eax, OFFSET ??_C@_02JDPG@rb?$AA@
+ 00015 eb 17 jmp SHORT $LN6@fopen64_fi
+$LN2@fopen64_fi:
+
+; 119 : else
+; 120 : if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
+
+ 00017 f6 c1 04 test cl, 4
+ 0001a 74 07 je SHORT $LN4@fopen64_fi
+
+; 121 : mode_fopen = "r+b";
+
+ 0001c b8 00 00 00 00 mov eax, OFFSET ??_C@_03HMFOOINA@r?$CLb?$AA@
+ 00021 eb 0b jmp SHORT $LN6@fopen64_fi
+$LN4@fopen64_fi:
+
+; 122 : else
+; 123 : if (mode & ZLIB_FILEFUNC_MODE_CREATE)
+
+ 00023 f6 c1 08 test cl, 8
+ 00026 b8 00 00 00 00 mov eax, OFFSET ??_C@_02GMLFBBN@wb?$AA@
+ 0002b 0f 44 c2 cmove eax, edx
+$LN6@fopen64_fi:
+
+; 124 : mode_fopen = "wb";
+; 125 :
+; 126 : if ((filename!=NULL) && (mode_fopen != NULL))
+
+ 0002e 8b 4d 0c mov ecx, DWORD PTR _filename$[ebp]
+ 00031 85 c9 test ecx, ecx
+ 00033 74 11 je SHORT $LN9@fopen64_fi
+ 00035 85 c0 test eax, eax
+ 00037 74 0d je SHORT $LN9@fopen64_fi
+
+; 127 : file = FOPEN_FUNC((const char*)filename, mode_fopen);
+
+ 00039 50 push eax
+ 0003a 51 push ecx
+ 0003b ff 15 00 00 00
+ 00 call DWORD PTR __imp__fopen
+ 00041 83 c4 08 add esp, 8
+
+; 129 : }
+
+ 00044 5d pop ebp
+ 00045 c3 ret 0
+$LN9@fopen64_fi:
+
+; 128 : return file;
+
+ 00046 33 c0 xor eax, eax
+
+; 129 : }
+
+ 00048 5d pop ebp
+ 00049 c3 ret 0
+_fopen64_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\ioapi.c
+; COMDAT _fread_file_func
+_TEXT SEGMENT
+_opaque$ = 8 ; size = 4
+_stream$ = 12 ; size = 4
+_buf$ = 16 ; size = 4
+_size$ = 20 ; size = 4
+_fread_file_func PROC ; COMDAT
+
+; 133 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 134 : uLong ret;
+; 135 : ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream);
+
+ 00003 ff 75 0c push DWORD PTR _stream$[ebp]
+ 00006 ff 75 14 push DWORD PTR _size$[ebp]
+ 00009 6a 01 push 1
+ 0000b ff 75 10 push DWORD PTR _buf$[ebp]
+ 0000e ff 15 00 00 00
+ 00 call DWORD PTR __imp__fread
+ 00014 83 c4 10 add esp, 16 ; 00000010H
+
+; 136 : return ret;
+; 137 : }
+
+ 00017 5d pop ebp
+ 00018 c3 ret 0
+_fread_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\ioapi.c
+; COMDAT _fwrite_file_func
+_TEXT SEGMENT
+_opaque$ = 8 ; size = 4
+_stream$ = 12 ; size = 4
+_buf$ = 16 ; size = 4
+_size$ = 20 ; size = 4
+_fwrite_file_func PROC ; COMDAT
+
+; 140 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 141 : uLong ret;
+; 142 : ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream);
+
+ 00003 ff 75 0c push DWORD PTR _stream$[ebp]
+ 00006 ff 75 14 push DWORD PTR _size$[ebp]
+ 00009 6a 01 push 1
+ 0000b ff 75 10 push DWORD PTR _buf$[ebp]
+ 0000e ff 15 00 00 00
+ 00 call DWORD PTR __imp__fwrite
+ 00014 83 c4 10 add esp, 16 ; 00000010H
+
+; 143 : return ret;
+; 144 : }
+
+ 00017 5d pop ebp
+ 00018 c3 ret 0
+_fwrite_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\ioapi.c
+; COMDAT _ftell_file_func
+_TEXT SEGMENT
+_opaque$ = 8 ; size = 4
+_stream$ = 12 ; size = 4
+_ftell_file_func PROC ; COMDAT
+
+; 147 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 148 : long ret;
+; 149 : ret = ftell((FILE *)stream);
+
+ 00003 ff 75 0c push DWORD PTR _stream$[ebp]
+ 00006 ff 15 00 00 00
+ 00 call DWORD PTR __imp__ftell
+ 0000c 83 c4 04 add esp, 4
+
+; 150 : return ret;
+; 151 : }
+
+ 0000f 5d pop ebp
+ 00010 c3 ret 0
+_ftell_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\ioapi.c
+; COMDAT _ftell64_file_func
+_TEXT SEGMENT
+_opaque$ = 8 ; size = 4
+_stream$ = 12 ; size = 4
+_ftell64_file_func PROC ; COMDAT
+
+; 155 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 156 : ZPOS64_T ret;
+; 157 : ret = FTELLO_FUNC((FILE *)stream);
+
+ 00003 ff 75 0c push DWORD PTR _stream$[ebp]
+ 00006 ff 15 00 00 00
+ 00 call DWORD PTR __imp___ftelli64
+ 0000c 83 c4 04 add esp, 4
+
+; 158 : return ret;
+; 159 : }
+
+ 0000f 5d pop ebp
+ 00010 c3 ret 0
+_ftell64_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\ioapi.c
+; COMDAT _fseek_file_func
+_TEXT SEGMENT
+_opaque$ = 8 ; size = 4
+_stream$ = 12 ; size = 4
+_offset$ = 16 ; size = 4
+_origin$ = 20 ; size = 4
+_fseek_file_func PROC ; COMDAT
+
+; 162 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 163 : int fseek_origin=0;
+; 164 : long ret;
+; 165 : switch (origin)
+
+ 00003 8b 45 14 mov eax, DWORD PTR _origin$[ebp]
+ 00006 83 e8 00 sub eax, 0
+ 00009 74 1d je SHORT $LN6@fseek_file
+ 0000b 83 e8 01 sub eax, 1
+ 0000e 74 11 je SHORT $LN4@fseek_file
+ 00010 83 e8 01 sub eax, 1
+ 00013 74 05 je SHORT $LN5@fseek_file
+
+; 175 : break;
+; 176 : default: return -1;
+
+ 00015 83 c8 ff or eax, -1
+
+; 182 : }
+
+ 00018 5d pop ebp
+ 00019 c3 ret 0
+$LN5@fseek_file:
+
+; 170 : case ZLIB_FILEFUNC_SEEK_END :
+; 171 : fseek_origin = SEEK_END;
+
+ 0001a b8 02 00 00 00 mov eax, 2
+
+; 172 : break;
+
+ 0001f eb 09 jmp SHORT $LN2@fseek_file
+$LN4@fseek_file:
+
+; 166 : {
+; 167 : case ZLIB_FILEFUNC_SEEK_CUR :
+; 168 : fseek_origin = SEEK_CUR;
+
+ 00021 b8 01 00 00 00 mov eax, 1
+
+; 169 : break;
+
+ 00026 eb 02 jmp SHORT $LN2@fseek_file
+$LN6@fseek_file:
+
+; 173 : case ZLIB_FILEFUNC_SEEK_SET :
+; 174 : fseek_origin = SEEK_SET;
+
+ 00028 33 c0 xor eax, eax
+$LN2@fseek_file:
+ 0002a 56 push esi
+
+; 177 : }
+; 178 : ret = 0;
+; 179 : if (fseek((FILE *)stream, offset, fseek_origin) != 0)
+
+ 0002b 50 push eax
+ 0002c ff 75 10 push DWORD PTR _offset$[ebp]
+ 0002f 33 f6 xor esi, esi
+ 00031 ff 75 0c push DWORD PTR _stream$[ebp]
+ 00034 ff 15 00 00 00
+ 00 call DWORD PTR __imp__fseek
+ 0003a 83 c4 0c add esp, 12 ; 0000000cH
+ 0003d 83 c9 ff or ecx, -1
+ 00040 85 c0 test eax, eax
+ 00042 0f 45 f1 cmovne esi, ecx
+
+; 180 : ret = -1;
+; 181 : return ret;
+
+ 00045 8b c6 mov eax, esi
+ 00047 5e pop esi
+
+; 182 : }
+
+ 00048 5d pop ebp
+ 00049 c3 ret 0
+_fseek_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\ioapi.c
+; COMDAT _fseek64_file_func
+_TEXT SEGMENT
+_opaque$ = 8 ; size = 4
+_stream$ = 12 ; size = 4
+_offset$ = 16 ; size = 8
+_origin$ = 24 ; size = 4
+_fseek64_file_func PROC ; COMDAT
+
+; 185 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 186 : int fseek_origin=0;
+; 187 : long ret;
+; 188 : switch (origin)
+
+ 00003 8b 45 18 mov eax, DWORD PTR _origin$[ebp]
+ 00006 83 e8 00 sub eax, 0
+ 00009 74 1d je SHORT $LN6@fseek64_fi
+ 0000b 83 e8 01 sub eax, 1
+ 0000e 74 11 je SHORT $LN4@fseek64_fi
+ 00010 83 e8 01 sub eax, 1
+ 00013 74 05 je SHORT $LN5@fseek64_fi
+
+; 198 : break;
+; 199 : default: return -1;
+
+ 00015 83 c8 ff or eax, -1
+
+; 207 : }
+
+ 00018 5d pop ebp
+ 00019 c3 ret 0
+$LN5@fseek64_fi:
+
+; 193 : case ZLIB_FILEFUNC_SEEK_END :
+; 194 : fseek_origin = SEEK_END;
+
+ 0001a b8 02 00 00 00 mov eax, 2
+
+; 195 : break;
+
+ 0001f eb 09 jmp SHORT $LN2@fseek64_fi
+$LN4@fseek64_fi:
+
+; 189 : {
+; 190 : case ZLIB_FILEFUNC_SEEK_CUR :
+; 191 : fseek_origin = SEEK_CUR;
+
+ 00021 b8 01 00 00 00 mov eax, 1
+
+; 192 : break;
+
+ 00026 eb 02 jmp SHORT $LN2@fseek64_fi
+$LN6@fseek64_fi:
+
+; 196 : case ZLIB_FILEFUNC_SEEK_SET :
+; 197 : fseek_origin = SEEK_SET;
+
+ 00028 33 c0 xor eax, eax
+$LN2@fseek64_fi:
+ 0002a 56 push esi
+
+; 200 : }
+; 201 : ret = 0;
+; 202 :
+; 203 : if(FSEEKO_FUNC((FILE *)stream, offset, fseek_origin) != 0)
+
+ 0002b 50 push eax
+ 0002c ff 75 14 push DWORD PTR _offset$[ebp+4]
+ 0002f 33 f6 xor esi, esi
+ 00031 ff 75 10 push DWORD PTR _offset$[ebp]
+ 00034 ff 75 0c push DWORD PTR _stream$[ebp]
+ 00037 ff 15 00 00 00
+ 00 call DWORD PTR __imp___fseeki64
+ 0003d 83 c4 10 add esp, 16 ; 00000010H
+ 00040 83 c9 ff or ecx, -1
+ 00043 85 c0 test eax, eax
+ 00045 0f 45 f1 cmovne esi, ecx
+
+; 204 : ret = -1;
+; 205 :
+; 206 : return ret;
+
+ 00048 8b c6 mov eax, esi
+ 0004a 5e pop esi
+
+; 207 : }
+
+ 0004b 5d pop ebp
+ 0004c c3 ret 0
+_fseek64_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\ioapi.c
+; COMDAT _fclose_file_func
+_TEXT SEGMENT
+_opaque$ = 8 ; size = 4
+_stream$ = 12 ; size = 4
+_fclose_file_func PROC ; COMDAT
+
+; 211 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 212 : int ret;
+; 213 : ret = fclose((FILE *)stream);
+
+ 00003 ff 75 0c push DWORD PTR _stream$[ebp]
+ 00006 ff 15 00 00 00
+ 00 call DWORD PTR __imp__fclose
+ 0000c 83 c4 04 add esp, 4
+
+; 214 : return ret;
+; 215 : }
+
+ 0000f 5d pop ebp
+ 00010 c3 ret 0
+_fclose_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\ioapi.c
+; COMDAT _ferror_file_func
+_TEXT SEGMENT
+_opaque$ = 8 ; size = 4
+_stream$ = 12 ; size = 4
+_ferror_file_func PROC ; COMDAT
+
+; 218 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 219 : int ret;
+; 220 : ret = ferror((FILE *)stream);
+
+ 00003 ff 75 0c push DWORD PTR _stream$[ebp]
+ 00006 ff 15 00 00 00
+ 00 call DWORD PTR __imp__ferror
+ 0000c 83 c4 04 add esp, 4
+
+; 221 : return ret;
+; 222 : }
+
+ 0000f 5d pop ebp
+ 00010 c3 ret 0
+_ferror_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\ioapi.c
+; COMDAT _fill_fopen64_filefunc
+_TEXT SEGMENT
+_fill_fopen64_filefunc PROC ; COMDAT
+; _pzlib_filefunc_def$ = ecx
+
+; 239 : pzlib_filefunc_def->zopen64_file = fopen64_file_func;
+
+ 00000 c7 01 00 00 00
+ 00 mov DWORD PTR [ecx], OFFSET _fopen64_file_func
+
+; 240 : pzlib_filefunc_def->zread_file = fread_file_func;
+
+ 00006 c7 41 04 00 00
+ 00 00 mov DWORD PTR [ecx+4], OFFSET _fread_file_func
+
+; 241 : pzlib_filefunc_def->zwrite_file = fwrite_file_func;
+
+ 0000d c7 41 08 00 00
+ 00 00 mov DWORD PTR [ecx+8], OFFSET _fwrite_file_func
+
+; 242 : pzlib_filefunc_def->ztell64_file = ftell64_file_func;
+
+ 00014 c7 41 0c 00 00
+ 00 00 mov DWORD PTR [ecx+12], OFFSET _ftell64_file_func
+
+; 243 : pzlib_filefunc_def->zseek64_file = fseek64_file_func;
+
+ 0001b c7 41 10 00 00
+ 00 00 mov DWORD PTR [ecx+16], OFFSET _fseek64_file_func
+
+; 244 : pzlib_filefunc_def->zclose_file = fclose_file_func;
+
+ 00022 c7 41 14 00 00
+ 00 00 mov DWORD PTR [ecx+20], OFFSET _fclose_file_func
+
+; 245 : pzlib_filefunc_def->zerror_file = ferror_file_func;
+
+ 00029 c7 41 18 00 00
+ 00 00 mov DWORD PTR [ecx+24], OFFSET _ferror_file_func
+
+; 246 : pzlib_filefunc_def->opaque = NULL;
+
+ 00030 c7 41 1c 00 00
+ 00 00 mov DWORD PTR [ecx+28], 0
+
+; 247 : }
+
+ 00037 c3 ret 0
+_fill_fopen64_filefunc ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/ioapi.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/ioapi.obj
new file mode 100644
index 0000000000..3249cd139e
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/ioapi.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/iowin32.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/iowin32.cod
new file mode 100644
index 0000000000..9f349a34ff
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/iowin32.cod
@@ -0,0 +1,1691 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+EXTRN __imp__SetFilePointerEx@20:PROC
+EXTRN __imp__CloseHandle@4:PROC
+EXTRN __imp__GetLastError@0:PROC
+EXTRN __imp__MultiByteToWideChar@24:PROC
+EXTRN __imp__CreateFile2@20:PROC
+EXTRN __imp__WriteFile@20:PROC
+EXTRN __imp__ReadFile@20:PROC
+PUBLIC _fill_win32_filefunc64W
+PUBLIC _fill_win32_filefunc64A
+PUBLIC _fill_win32_filefunc64
+PUBLIC _fill_win32_filefunc
+PUBLIC _win32_error_file_func
+PUBLIC _win32_close_file_func
+PUBLIC _win32_seek64_file_func
+PUBLIC _win32_seek_file_func
+PUBLIC _win32_tell64_file_func
+PUBLIC _win32_tell_file_func
+PUBLIC _win32_write_file_func
+PUBLIC _win32_read_file_func
+PUBLIC _win32_open_file_func
+PUBLIC _win32_open64_file_funcW
+PUBLIC _win32_open64_file_funcA
+PUBLIC _win32_open64_file_func
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _win32_translate_open_mode
+_TEXT SEGMENT
+_lpdwCreationDisposition$ = 8 ; size = 4
+_lpdwShareMode$ = 12 ; size = 4
+_lpdwFlagsAndAttributes$ = 16 ; size = 4
+_win32_translate_open_mode PROC ; COMDAT
+; _mode$ = ecx
+; _lpdwDesiredAccess$ = edx
+
+; 55 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 56 : *lpdwDesiredAccess = *lpdwShareMode = *lpdwFlagsAndAttributes = *lpdwCreationDisposition = 0;
+
+ 00003 8b 45 10 mov eax, DWORD PTR _lpdwFlagsAndAttributes$[ebp]
+ 00006 56 push esi
+ 00007 8b 75 08 mov esi, DWORD PTR _lpdwCreationDisposition$[ebp]
+ 0000a 57 push edi
+ 0000b 8b 7d 0c mov edi, DWORD PTR _lpdwShareMode$[ebp]
+ 0000e c7 00 00 00 00
+ 00 mov DWORD PTR [eax], 0
+
+; 57 :
+; 58 : if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
+
+ 00014 8b c1 mov eax, ecx
+ 00016 24 03 and al, 3
+ 00018 c7 06 00 00 00
+ 00 mov DWORD PTR [esi], 0
+ 0001e c7 02 00 00 00
+ 00 mov DWORD PTR [edx], 0
+ 00024 c7 07 00 00 00
+ 00 mov DWORD PTR [edi], 0
+ 0002a 3c 01 cmp al, 1
+ 0002c 75 16 jne SHORT $LN2@win32_tran
+
+; 59 : {
+; 60 : *lpdwDesiredAccess = GENERIC_READ;
+; 61 : *lpdwCreationDisposition = OPEN_EXISTING;
+; 62 : *lpdwShareMode = FILE_SHARE_READ;
+
+ 0002e c7 07 01 00 00
+ 00 mov DWORD PTR [edi], 1
+ 00034 5f pop edi
+ 00035 c7 06 03 00 00
+ 00 mov DWORD PTR [esi], 3
+ 0003b c7 02 00 00 00
+ 80 mov DWORD PTR [edx], -2147483648 ; 80000000H
+ 00041 5e pop esi
+
+; 73 : }
+; 74 : }
+
+ 00042 5d pop ebp
+ 00043 c3 ret 0
+$LN2@win32_tran:
+
+; 63 : }
+; 64 : else if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
+
+ 00044 f6 c1 04 test cl, 4
+ 00047 74 10 je SHORT $LN4@win32_tran
+
+; 65 : {
+; 66 : *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
+; 67 : *lpdwCreationDisposition = OPEN_EXISTING;
+
+ 00049 5f pop edi
+ 0004a c7 06 03 00 00
+ 00 mov DWORD PTR [esi], 3
+
+; 70 : {
+; 71 : *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
+
+ 00050 c7 02 00 00 00
+ c0 mov DWORD PTR [edx], -1073741824 ; c0000000H
+ 00056 5e pop esi
+
+; 73 : }
+; 74 : }
+
+ 00057 5d pop ebp
+ 00058 c3 ret 0
+$LN4@win32_tran:
+
+; 68 : }
+; 69 : else if (mode & ZLIB_FILEFUNC_MODE_CREATE)
+
+ 00059 f6 c1 08 test cl, 8
+ 0005c 74 0c je SHORT $LN6@win32_tran
+
+; 72 : *lpdwCreationDisposition = CREATE_ALWAYS;
+
+ 0005e c7 06 02 00 00
+ 00 mov DWORD PTR [esi], 2
+ 00064 c7 02 00 00 00
+ c0 mov DWORD PTR [edx], -1073741824 ; c0000000H
+$LN6@win32_tran:
+ 0006a 5f pop edi
+ 0006b 5e pop esi
+
+; 73 : }
+; 74 : }
+
+ 0006c 5d pop ebp
+ 0006d c3 ret 0
+_win32_translate_open_mode ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _win32_build_iowin
+_TEXT SEGMENT
+_win32_build_iowin PROC ; COMDAT
+; _hFile$ = ecx
+
+; 77 : {
+
+ 00000 56 push esi
+ 00001 8b f1 mov esi, ecx
+
+; 78 : voidpf ret=NULL;
+; 79 :
+; 80 : if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))
+
+ 00003 85 f6 test esi, esi
+ 00005 74 2f je SHORT $LN7@win32_buil
+ 00007 83 fe ff cmp esi, -1
+ 0000a 74 2a je SHORT $LN7@win32_buil
+
+; 81 : {
+; 82 : WIN32FILE_IOWIN w32fiow;
+; 83 : w32fiow.hf = hFile;
+; 84 : w32fiow.error = 0;
+; 85 : ret = malloc(sizeof(WIN32FILE_IOWIN));
+
+ 0000c 57 push edi
+ 0000d 6a 08 push 8
+ 0000f ff 15 00 00 00
+ 00 call DWORD PTR __imp__malloc
+ 00015 8b f8 mov edi, eax
+ 00017 83 c4 04 add esp, 4
+
+; 86 :
+; 87 : if (ret==NULL)
+
+ 0001a 85 ff test edi, edi
+ 0001c 75 0c jne SHORT $LN3@win32_buil
+
+; 88 : CloseHandle(hFile);
+
+ 0001e 56 push esi
+ 0001f ff 15 00 00 00
+ 00 call DWORD PTR __imp__CloseHandle@4
+
+; 91 : }
+; 92 : return ret;
+
+ 00025 8b c7 mov eax, edi
+ 00027 5f pop edi
+ 00028 5e pop esi
+
+; 93 : }
+
+ 00029 c3 ret 0
+$LN3@win32_buil:
+
+; 89 : else
+; 90 : *((WIN32FILE_IOWIN*)ret) = w32fiow;
+
+ 0002a 89 37 mov DWORD PTR [edi], esi
+ 0002c c7 47 04 00 00
+ 00 00 mov DWORD PTR [edi+4], 0
+ 00033 5f pop edi
+ 00034 5e pop esi
+
+; 93 : }
+
+ 00035 c3 ret 0
+$LN7@win32_buil:
+
+; 91 : }
+; 92 : return ret;
+
+ 00036 33 c0 xor eax, eax
+ 00038 5e pop esi
+
+; 93 : }
+
+ 00039 c3 ret 0
+_win32_build_iowin ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _win32_open64_file_func
+_TEXT SEGMENT
+_filenameW$1 = -1564 ; size = 1546
+_dwFlagsAndAttributes$ = -16 ; size = 4
+_dwShareMode$ = -12 ; size = 4
+_dwCreationDisposition$ = -8 ; size = 4
+_dwDesiredAccess$ = -4 ; size = 4
+_opaque$ = 8 ; size = 4
+_filename$ = 12 ; size = 4
+_mode$ = 16 ; size = 4
+_win32_open64_file_func PROC ; COMDAT
+
+; 96 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 97 : const char* mode_fopen = NULL;
+; 98 : DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
+; 99 : HANDLE hFile = NULL;
+; 100 :
+; 101 : win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
+
+ 00003 8b 4d 10 mov ecx, DWORD PTR _mode$[ebp]
+ 00006 8d 45 f0 lea eax, DWORD PTR _dwFlagsAndAttributes$[ebp]
+ 00009 81 ec 1c 06 00
+ 00 sub esp, 1564 ; 0000061cH
+ 0000f 8d 55 fc lea edx, DWORD PTR _dwDesiredAccess$[ebp]
+ 00012 57 push edi
+ 00013 50 push eax
+ 00014 8d 45 f4 lea eax, DWORD PTR _dwShareMode$[ebp]
+ 00017 33 ff xor edi, edi
+ 00019 50 push eax
+ 0001a 8d 45 f8 lea eax, DWORD PTR _dwCreationDisposition$[ebp]
+ 0001d 50 push eax
+ 0001e e8 00 00 00 00 call _win32_translate_open_mode
+
+; 102 :
+; 103 : #ifdef IOWIN32_USING_WINRT_API
+; 104 : #ifdef UNICODE
+; 105 : if ((filename!=NULL) && (dwDesiredAccess != 0))
+; 106 : hFile = CreateFile2((LPCTSTR)filename, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+; 107 : #else
+; 108 : if ((filename!=NULL) && (dwDesiredAccess != 0))
+
+ 00023 8b 45 0c mov eax, DWORD PTR _filename$[ebp]
+ 00026 83 c4 0c add esp, 12 ; 0000000cH
+ 00029 85 c0 test eax, eax
+ 0002b 74 35 je SHORT $LN2@win32_open
+ 0002d 39 7d fc cmp DWORD PTR _dwDesiredAccess$[ebp], edi
+ 00030 74 30 je SHORT $LN2@win32_open
+
+; 109 : {
+; 110 : WCHAR filenameW[FILENAME_MAX + 0x200 + 1];
+; 111 : MultiByteToWideChar(CP_ACP,0,(const char*)filename,-1,filenameW,FILENAME_MAX + 0x200);
+
+ 00032 68 04 03 00 00 push 772 ; 00000304H
+ 00037 8d 8d e4 f9 ff
+ ff lea ecx, DWORD PTR _filenameW$1[ebp]
+ 0003d 51 push ecx
+ 0003e 6a ff push -1
+ 00040 50 push eax
+ 00041 57 push edi
+ 00042 57 push edi
+ 00043 ff 15 00 00 00
+ 00 call DWORD PTR __imp__MultiByteToWideChar@24
+
+; 112 : hFile = CreateFile2(filenameW, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+
+ 00049 57 push edi
+ 0004a ff 75 f8 push DWORD PTR _dwCreationDisposition$[ebp]
+ 0004d 8d 85 e4 f9 ff
+ ff lea eax, DWORD PTR _filenameW$1[ebp]
+ 00053 ff 75 f4 push DWORD PTR _dwShareMode$[ebp]
+ 00056 ff 75 fc push DWORD PTR _dwDesiredAccess$[ebp]
+ 00059 50 push eax
+ 0005a ff 15 00 00 00
+ 00 call DWORD PTR __imp__CreateFile2@20
+ 00060 8b f8 mov edi, eax
+$LN2@win32_open:
+
+; 113 : }
+; 114 : #endif
+; 115 : #else
+; 116 : if ((filename!=NULL) && (dwDesiredAccess != 0))
+; 117 : hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+; 118 : #endif
+; 119 :
+; 120 : return win32_build_iowin(hFile);
+
+ 00062 8b cf mov ecx, edi
+ 00064 e8 00 00 00 00 call _win32_build_iowin
+ 00069 5f pop edi
+
+; 121 : }
+
+ 0006a 8b e5 mov esp, ebp
+ 0006c 5d pop ebp
+ 0006d c3 ret 0
+_win32_open64_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _win32_open64_file_funcA
+_TEXT SEGMENT
+_filenameW$1 = -1564 ; size = 1546
+_dwFlagsAndAttributes$ = -16 ; size = 4
+_dwShareMode$ = -12 ; size = 4
+_dwCreationDisposition$ = -8 ; size = 4
+_dwDesiredAccess$ = -4 ; size = 4
+_opaque$ = 8 ; size = 4
+_filename$ = 12 ; size = 4
+_mode$ = 16 ; size = 4
+_win32_open64_file_funcA PROC ; COMDAT
+
+; 125 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 126 : const char* mode_fopen = NULL;
+; 127 : DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
+; 128 : HANDLE hFile = NULL;
+; 129 :
+; 130 : win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
+
+ 00003 8b 4d 10 mov ecx, DWORD PTR _mode$[ebp]
+ 00006 8d 45 f0 lea eax, DWORD PTR _dwFlagsAndAttributes$[ebp]
+ 00009 81 ec 1c 06 00
+ 00 sub esp, 1564 ; 0000061cH
+ 0000f 8d 55 fc lea edx, DWORD PTR _dwDesiredAccess$[ebp]
+ 00012 57 push edi
+ 00013 50 push eax
+ 00014 8d 45 f4 lea eax, DWORD PTR _dwShareMode$[ebp]
+ 00017 33 ff xor edi, edi
+ 00019 50 push eax
+ 0001a 8d 45 f8 lea eax, DWORD PTR _dwCreationDisposition$[ebp]
+ 0001d 50 push eax
+ 0001e e8 00 00 00 00 call _win32_translate_open_mode
+
+; 131 :
+; 132 : #ifdef IOWIN32_USING_WINRT_API
+; 133 : if ((filename!=NULL) && (dwDesiredAccess != 0))
+
+ 00023 8b 45 0c mov eax, DWORD PTR _filename$[ebp]
+ 00026 83 c4 0c add esp, 12 ; 0000000cH
+ 00029 85 c0 test eax, eax
+ 0002b 74 35 je SHORT $LN2@win32_open
+ 0002d 39 7d fc cmp DWORD PTR _dwDesiredAccess$[ebp], edi
+ 00030 74 30 je SHORT $LN2@win32_open
+
+; 134 : {
+; 135 : WCHAR filenameW[FILENAME_MAX + 0x200 + 1];
+; 136 : MultiByteToWideChar(CP_ACP,0,(const char*)filename,-1,filenameW,FILENAME_MAX + 0x200);
+
+ 00032 68 04 03 00 00 push 772 ; 00000304H
+ 00037 8d 8d e4 f9 ff
+ ff lea ecx, DWORD PTR _filenameW$1[ebp]
+ 0003d 51 push ecx
+ 0003e 6a ff push -1
+ 00040 50 push eax
+ 00041 57 push edi
+ 00042 57 push edi
+ 00043 ff 15 00 00 00
+ 00 call DWORD PTR __imp__MultiByteToWideChar@24
+
+; 137 : hFile = CreateFile2(filenameW, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+
+ 00049 57 push edi
+ 0004a ff 75 f8 push DWORD PTR _dwCreationDisposition$[ebp]
+ 0004d 8d 85 e4 f9 ff
+ ff lea eax, DWORD PTR _filenameW$1[ebp]
+ 00053 ff 75 f4 push DWORD PTR _dwShareMode$[ebp]
+ 00056 ff 75 fc push DWORD PTR _dwDesiredAccess$[ebp]
+ 00059 50 push eax
+ 0005a ff 15 00 00 00
+ 00 call DWORD PTR __imp__CreateFile2@20
+ 00060 8b f8 mov edi, eax
+$LN2@win32_open:
+
+; 138 : }
+; 139 : #else
+; 140 : if ((filename!=NULL) && (dwDesiredAccess != 0))
+; 141 : hFile = CreateFileA((LPCSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+; 142 : #endif
+; 143 :
+; 144 : return win32_build_iowin(hFile);
+
+ 00062 8b cf mov ecx, edi
+ 00064 e8 00 00 00 00 call _win32_build_iowin
+ 00069 5f pop edi
+
+; 145 : }
+
+ 0006a 8b e5 mov esp, ebp
+ 0006c 5d pop ebp
+ 0006d c3 ret 0
+_win32_open64_file_funcA ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _win32_open64_file_funcW
+_TEXT SEGMENT
+_dwFlagsAndAttributes$ = -16 ; size = 4
+_dwShareMode$ = -12 ; size = 4
+_dwCreationDisposition$ = -8 ; size = 4
+_dwDesiredAccess$ = -4 ; size = 4
+_opaque$ = 8 ; size = 4
+_filename$ = 12 ; size = 4
+_mode$ = 16 ; size = 4
+_win32_open64_file_funcW PROC ; COMDAT
+
+; 149 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 150 : const char* mode_fopen = NULL;
+; 151 : DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
+; 152 : HANDLE hFile = NULL;
+; 153 :
+; 154 : win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
+
+ 00003 8b 4d 10 mov ecx, DWORD PTR _mode$[ebp]
+ 00006 8d 45 f0 lea eax, DWORD PTR _dwFlagsAndAttributes$[ebp]
+ 00009 83 ec 10 sub esp, 16 ; 00000010H
+ 0000c 8d 55 fc lea edx, DWORD PTR _dwDesiredAccess$[ebp]
+ 0000f 56 push esi
+ 00010 50 push eax
+ 00011 8d 45 f4 lea eax, DWORD PTR _dwShareMode$[ebp]
+ 00014 33 f6 xor esi, esi
+ 00016 50 push eax
+ 00017 8d 45 f8 lea eax, DWORD PTR _dwCreationDisposition$[ebp]
+ 0001a 50 push eax
+ 0001b e8 00 00 00 00 call _win32_translate_open_mode
+
+; 155 :
+; 156 : #ifdef IOWIN32_USING_WINRT_API
+; 157 : if ((filename!=NULL) && (dwDesiredAccess != 0))
+
+ 00020 8b 4d 0c mov ecx, DWORD PTR _filename$[ebp]
+ 00023 83 c4 0c add esp, 12 ; 0000000cH
+ 00026 85 c9 test ecx, ecx
+ 00028 74 18 je SHORT $LN2@win32_open
+ 0002a 8b 45 fc mov eax, DWORD PTR _dwDesiredAccess$[ebp]
+ 0002d 85 c0 test eax, eax
+ 0002f 74 11 je SHORT $LN2@win32_open
+
+; 158 : hFile = CreateFile2((LPCWSTR)filename, dwDesiredAccess, dwShareMode, dwCreationDisposition,NULL);
+
+ 00031 56 push esi
+ 00032 ff 75 f8 push DWORD PTR _dwCreationDisposition$[ebp]
+ 00035 ff 75 f4 push DWORD PTR _dwShareMode$[ebp]
+ 00038 50 push eax
+ 00039 51 push ecx
+ 0003a ff 15 00 00 00
+ 00 call DWORD PTR __imp__CreateFile2@20
+ 00040 8b f0 mov esi, eax
+$LN2@win32_open:
+
+; 159 : #else
+; 160 : if ((filename!=NULL) && (dwDesiredAccess != 0))
+; 161 : hFile = CreateFileW((LPCWSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+; 162 : #endif
+; 163 :
+; 164 : return win32_build_iowin(hFile);
+
+ 00042 8b ce mov ecx, esi
+ 00044 e8 00 00 00 00 call _win32_build_iowin
+ 00049 5e pop esi
+
+; 165 : }
+
+ 0004a 8b e5 mov esp, ebp
+ 0004c 5d pop ebp
+ 0004d c3 ret 0
+_win32_open64_file_funcW ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _win32_open_file_func
+_TEXT SEGMENT
+_filenameW$1 = -1564 ; size = 1546
+_dwFlagsAndAttributes$ = -16 ; size = 4
+_dwShareMode$ = -12 ; size = 4
+_dwCreationDisposition$ = -8 ; size = 4
+_dwDesiredAccess$ = -4 ; size = 4
+_opaque$ = 8 ; size = 4
+_filename$ = 12 ; size = 4
+_mode$ = 16 ; size = 4
+_win32_open_file_func PROC ; COMDAT
+
+; 169 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 170 : const char* mode_fopen = NULL;
+; 171 : DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
+; 172 : HANDLE hFile = NULL;
+; 173 :
+; 174 : win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
+
+ 00003 8b 4d 10 mov ecx, DWORD PTR _mode$[ebp]
+ 00006 8d 45 f0 lea eax, DWORD PTR _dwFlagsAndAttributes$[ebp]
+ 00009 81 ec 1c 06 00
+ 00 sub esp, 1564 ; 0000061cH
+ 0000f 8d 55 fc lea edx, DWORD PTR _dwDesiredAccess$[ebp]
+ 00012 57 push edi
+ 00013 50 push eax
+ 00014 8d 45 f4 lea eax, DWORD PTR _dwShareMode$[ebp]
+ 00017 33 ff xor edi, edi
+ 00019 50 push eax
+ 0001a 8d 45 f8 lea eax, DWORD PTR _dwCreationDisposition$[ebp]
+ 0001d 50 push eax
+ 0001e e8 00 00 00 00 call _win32_translate_open_mode
+
+; 175 :
+; 176 : #ifdef IOWIN32_USING_WINRT_API
+; 177 : #ifdef UNICODE
+; 178 : if ((filename!=NULL) && (dwDesiredAccess != 0))
+; 179 : hFile = CreateFile2((LPCTSTR)filename, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+; 180 : #else
+; 181 : if ((filename!=NULL) && (dwDesiredAccess != 0))
+
+ 00023 8b 45 0c mov eax, DWORD PTR _filename$[ebp]
+ 00026 83 c4 0c add esp, 12 ; 0000000cH
+ 00029 85 c0 test eax, eax
+ 0002b 74 35 je SHORT $LN2@win32_open
+ 0002d 39 7d fc cmp DWORD PTR _dwDesiredAccess$[ebp], edi
+ 00030 74 30 je SHORT $LN2@win32_open
+
+; 182 : {
+; 183 : WCHAR filenameW[FILENAME_MAX + 0x200 + 1];
+; 184 : MultiByteToWideChar(CP_ACP,0,(const char*)filename,-1,filenameW,FILENAME_MAX + 0x200);
+
+ 00032 68 04 03 00 00 push 772 ; 00000304H
+ 00037 8d 8d e4 f9 ff
+ ff lea ecx, DWORD PTR _filenameW$1[ebp]
+ 0003d 51 push ecx
+ 0003e 6a ff push -1
+ 00040 50 push eax
+ 00041 57 push edi
+ 00042 57 push edi
+ 00043 ff 15 00 00 00
+ 00 call DWORD PTR __imp__MultiByteToWideChar@24
+
+; 185 : hFile = CreateFile2(filenameW, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+
+ 00049 57 push edi
+ 0004a ff 75 f8 push DWORD PTR _dwCreationDisposition$[ebp]
+ 0004d 8d 85 e4 f9 ff
+ ff lea eax, DWORD PTR _filenameW$1[ebp]
+ 00053 ff 75 f4 push DWORD PTR _dwShareMode$[ebp]
+ 00056 ff 75 fc push DWORD PTR _dwDesiredAccess$[ebp]
+ 00059 50 push eax
+ 0005a ff 15 00 00 00
+ 00 call DWORD PTR __imp__CreateFile2@20
+ 00060 8b f8 mov edi, eax
+$LN2@win32_open:
+
+; 186 : }
+; 187 : #endif
+; 188 : #else
+; 189 : if ((filename!=NULL) && (dwDesiredAccess != 0))
+; 190 : hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+; 191 : #endif
+; 192 :
+; 193 : return win32_build_iowin(hFile);
+
+ 00062 8b cf mov ecx, edi
+ 00064 e8 00 00 00 00 call _win32_build_iowin
+ 00069 5f pop edi
+
+; 194 : }
+
+ 0006a 8b e5 mov esp, ebp
+ 0006c 5d pop ebp
+ 0006d c3 ret 0
+_win32_open_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _win32_read_file_func
+_TEXT SEGMENT
+_ret$ = -4 ; size = 4
+_opaque$ = 8 ; size = 4
+_stream$ = 12 ; size = 4
+_buf$ = 16 ; size = 4
+_size$ = 20 ; size = 4
+_win32_read_file_func PROC ; COMDAT
+
+; 198 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 56 push esi
+
+; 199 : uLong ret=0;
+; 200 : HANDLE hFile = NULL;
+; 201 : if (stream!=NULL)
+
+ 00005 8b 75 0c mov esi, DWORD PTR _stream$[ebp]
+ 00008 c7 45 fc 00 00
+ 00 00 mov DWORD PTR _ret$[ebp], 0
+ 0000f 85 f6 test esi, esi
+ 00011 74 36 je SHORT $LN9@win32_read
+
+; 202 : hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+
+ 00013 8b 06 mov eax, DWORD PTR [esi]
+
+; 203 :
+; 204 : if (hFile != NULL)
+
+ 00015 85 c0 test eax, eax
+ 00017 74 30 je SHORT $LN9@win32_read
+
+; 205 : {
+; 206 : if (!ReadFile(hFile, buf, size, &ret, NULL))
+
+ 00019 6a 00 push 0
+ 0001b 8d 4d fc lea ecx, DWORD PTR _ret$[ebp]
+ 0001e 51 push ecx
+ 0001f ff 75 14 push DWORD PTR _size$[ebp]
+ 00022 ff 75 10 push DWORD PTR _buf$[ebp]
+ 00025 50 push eax
+ 00026 ff 15 00 00 00
+ 00 call DWORD PTR __imp__ReadFile@20
+ 0002c 85 c0 test eax, eax
+ 0002e 75 11 jne SHORT $LN7@win32_read
+
+; 207 : {
+; 208 : DWORD dwErr = GetLastError();
+
+ 00030 ff 15 00 00 00
+ 00 call DWORD PTR __imp__GetLastError@0
+
+; 209 : if (dwErr == ERROR_HANDLE_EOF)
+
+ 00036 33 c9 xor ecx, ecx
+ 00038 83 f8 26 cmp eax, 38 ; 00000026H
+ 0003b 0f 44 c1 cmove eax, ecx
+
+; 210 : dwErr = 0;
+; 211 : ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+
+ 0003e 89 46 04 mov DWORD PTR [esi+4], eax
+$LN7@win32_read:
+
+; 212 : }
+; 213 : }
+; 214 :
+; 215 : return ret;
+
+ 00041 8b 45 fc mov eax, DWORD PTR _ret$[ebp]
+ 00044 5e pop esi
+
+; 216 : }
+
+ 00045 8b e5 mov esp, ebp
+ 00047 5d pop ebp
+ 00048 c3 ret 0
+$LN9@win32_read:
+
+; 212 : }
+; 213 : }
+; 214 :
+; 215 : return ret;
+
+ 00049 33 c0 xor eax, eax
+ 0004b 5e pop esi
+
+; 216 : }
+
+ 0004c 8b e5 mov esp, ebp
+ 0004e 5d pop ebp
+ 0004f c3 ret 0
+_win32_read_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _win32_write_file_func
+_TEXT SEGMENT
+_ret$ = -4 ; size = 4
+_opaque$ = 8 ; size = 4
+_stream$ = 12 ; size = 4
+_buf$ = 16 ; size = 4
+_size$ = 20 ; size = 4
+_win32_write_file_func PROC ; COMDAT
+
+; 220 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 56 push esi
+
+; 221 : uLong ret=0;
+; 222 : HANDLE hFile = NULL;
+; 223 : if (stream!=NULL)
+
+ 00005 8b 75 0c mov esi, DWORD PTR _stream$[ebp]
+ 00008 c7 45 fc 00 00
+ 00 00 mov DWORD PTR _ret$[ebp], 0
+ 0000f 85 f6 test esi, esi
+ 00011 74 36 je SHORT $LN9@win32_writ
+
+; 224 : hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+
+ 00013 8b 06 mov eax, DWORD PTR [esi]
+
+; 225 :
+; 226 : if (hFile != NULL)
+
+ 00015 85 c0 test eax, eax
+ 00017 74 30 je SHORT $LN9@win32_writ
+
+; 227 : {
+; 228 : if (!WriteFile(hFile, buf, size, &ret, NULL))
+
+ 00019 6a 00 push 0
+ 0001b 8d 4d fc lea ecx, DWORD PTR _ret$[ebp]
+ 0001e 51 push ecx
+ 0001f ff 75 14 push DWORD PTR _size$[ebp]
+ 00022 ff 75 10 push DWORD PTR _buf$[ebp]
+ 00025 50 push eax
+ 00026 ff 15 00 00 00
+ 00 call DWORD PTR __imp__WriteFile@20
+ 0002c 85 c0 test eax, eax
+ 0002e 75 11 jne SHORT $LN7@win32_writ
+
+; 229 : {
+; 230 : DWORD dwErr = GetLastError();
+
+ 00030 ff 15 00 00 00
+ 00 call DWORD PTR __imp__GetLastError@0
+
+; 231 : if (dwErr == ERROR_HANDLE_EOF)
+
+ 00036 33 c9 xor ecx, ecx
+ 00038 83 f8 26 cmp eax, 38 ; 00000026H
+ 0003b 0f 44 c1 cmove eax, ecx
+
+; 232 : dwErr = 0;
+; 233 : ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+
+ 0003e 89 46 04 mov DWORD PTR [esi+4], eax
+$LN7@win32_writ:
+
+; 234 : }
+; 235 : }
+; 236 :
+; 237 : return ret;
+
+ 00041 8b 45 fc mov eax, DWORD PTR _ret$[ebp]
+ 00044 5e pop esi
+
+; 238 : }
+
+ 00045 8b e5 mov esp, ebp
+ 00047 5d pop ebp
+ 00048 c3 ret 0
+$LN9@win32_writ:
+
+; 234 : }
+; 235 : }
+; 236 :
+; 237 : return ret;
+
+ 00049 33 c0 xor eax, eax
+ 0004b 5e pop esi
+
+; 238 : }
+
+ 0004c 8b e5 mov esp, ebp
+ 0004e 5d pop ebp
+ 0004f c3 ret 0
+_win32_write_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _MySetFilePointerEx
+_TEXT SEGMENT
+_dwMoveMethod$ = 8 ; size = 4
+_pos$ = 12 ; size = 8
+_MySetFilePointerEx PROC ; COMDAT
+; _hFile$ = ecx
+; _newPos$ = edx
+
+; 241 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 242 : #ifdef IOWIN32_USING_WINRT_API
+; 243 : return SetFilePointerEx(hFile, pos, newPos, dwMoveMethod);
+
+ 00003 ff 75 08 push DWORD PTR _dwMoveMethod$[ebp]
+ 00006 52 push edx
+ 00007 ff 75 10 push DWORD PTR _pos$[ebp+4]
+ 0000a ff 75 0c push DWORD PTR _pos$[ebp]
+ 0000d 51 push ecx
+ 0000e ff 15 00 00 00
+ 00 call DWORD PTR __imp__SetFilePointerEx@20
+
+; 244 : #else
+; 245 : LONG lHigh = pos.HighPart;
+; 246 : DWORD dwNewPos = SetFilePointer(hFile, pos.LowPart, &lHigh, FILE_CURRENT);
+; 247 : BOOL fOk = TRUE;
+; 248 : if (dwNewPos == 0xFFFFFFFF)
+; 249 : if (GetLastError() != NO_ERROR)
+; 250 : fOk = FALSE;
+; 251 : if ((newPos != NULL) && (fOk))
+; 252 : {
+; 253 : newPos->LowPart = dwNewPos;
+; 254 : newPos->HighPart = lHigh;
+; 255 : }
+; 256 : return fOk;
+; 257 : #endif
+; 258 : }
+
+ 00014 5d pop ebp
+ 00015 c3 ret 0
+_MySetFilePointerEx ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _win32_tell_file_func
+_TEXT SEGMENT
+_pos$1 = -8 ; size = 8
+_opaque$ = 8 ; size = 4
+_stream$ = 12 ; size = 4
+_win32_tell_file_func PROC ; COMDAT
+
+; 261 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 83 ec 0c sub esp, 12 ; 0000000cH
+ 00009 56 push esi
+
+; 262 : long ret=-1;
+; 263 : HANDLE hFile = NULL;
+; 264 : if (stream!=NULL)
+
+ 0000a 8b 75 0c mov esi, DWORD PTR _stream$[ebp]
+ 0000d 85 f6 test esi, esi
+ 0000f 74 32 je SHORT $LN8@win32_tell
+
+; 265 : hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+
+ 00011 8b 0e mov ecx, DWORD PTR [esi]
+
+; 266 : if (hFile != NULL)
+
+ 00013 85 c9 test ecx, ecx
+ 00015 74 2c je SHORT $LN8@win32_tell
+
+; 267 : {
+; 268 : LARGE_INTEGER pos;
+; 269 : pos.QuadPart = 0;
+; 270 :
+; 271 : if (!MySetFilePointerEx(hFile, pos, &pos, FILE_CURRENT))
+
+ 00017 0f 57 c0 xorps xmm0, xmm0
+ 0001a 8d 54 24 08 lea edx, DWORD PTR _pos$1[esp+16]
+ 0001e 66 0f 13 44 24
+ 08 movlpd QWORD PTR _pos$1[esp+16], xmm0
+ 00024 ff 74 24 0c push DWORD PTR _pos$1[esp+20]
+ 00028 ff 74 24 0c push DWORD PTR _pos$1[esp+20]
+ 0002c 6a 01 push 1
+ 0002e e8 00 00 00 00 call _MySetFilePointerEx
+ 00033 83 c4 0c add esp, 12 ; 0000000cH
+ 00036 85 c0 test eax, eax
+ 00038 75 11 jne SHORT $LN4@win32_tell
+
+; 272 : {
+; 273 : DWORD dwErr = GetLastError();
+
+ 0003a ff 15 00 00 00
+ 00 call DWORD PTR __imp__GetLastError@0
+
+; 274 : ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+
+ 00040 89 46 04 mov DWORD PTR [esi+4], eax
+$LN8@win32_tell:
+
+; 275 : ret = -1;
+; 276 : }
+; 277 : else
+; 278 : ret=(long)pos.LowPart;
+; 279 : }
+; 280 : return ret;
+
+ 00043 83 c8 ff or eax, -1
+
+; 281 : }
+
+ 00046 5e pop esi
+ 00047 8b e5 mov esp, ebp
+ 00049 5d pop ebp
+ 0004a c3 ret 0
+$LN4@win32_tell:
+
+; 275 : ret = -1;
+; 276 : }
+; 277 : else
+; 278 : ret=(long)pos.LowPart;
+; 279 : }
+; 280 : return ret;
+
+ 0004b 8b 44 24 08 mov eax, DWORD PTR _pos$1[esp+16]
+
+; 281 : }
+
+ 0004f 5e pop esi
+ 00050 8b e5 mov esp, ebp
+ 00052 5d pop ebp
+ 00053 c3 ret 0
+_win32_tell_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _win32_tell64_file_func
+_TEXT SEGMENT
+_pos$1 = -8 ; size = 8
+_opaque$ = 8 ; size = 4
+_stream$ = 12 ; size = 4
+_win32_tell64_file_func PROC ; COMDAT
+
+; 284 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 83 ec 0c sub esp, 12 ; 0000000cH
+ 00009 56 push esi
+
+; 285 : ZPOS64_T ret= (ZPOS64_T)-1;
+; 286 : HANDLE hFile = NULL;
+; 287 : if (stream!=NULL)
+
+ 0000a 8b 75 0c mov esi, DWORD PTR _stream$[ebp]
+ 0000d 85 f6 test esi, esi
+ 0000f 74 32 je SHORT $LN8@win32_tell
+
+; 288 : hFile = ((WIN32FILE_IOWIN*)stream)->hf;
+
+ 00011 8b 0e mov ecx, DWORD PTR [esi]
+
+; 289 :
+; 290 : if (hFile)
+
+ 00013 85 c9 test ecx, ecx
+ 00015 74 2c je SHORT $LN8@win32_tell
+
+; 291 : {
+; 292 : LARGE_INTEGER pos;
+; 293 : pos.QuadPart = 0;
+; 294 :
+; 295 : if (!MySetFilePointerEx(hFile, pos, &pos, FILE_CURRENT))
+
+ 00017 0f 57 c0 xorps xmm0, xmm0
+ 0001a 8d 54 24 08 lea edx, DWORD PTR _pos$1[esp+16]
+ 0001e 66 0f 13 44 24
+ 08 movlpd QWORD PTR _pos$1[esp+16], xmm0
+ 00024 ff 74 24 0c push DWORD PTR _pos$1[esp+20]
+ 00028 ff 74 24 0c push DWORD PTR _pos$1[esp+20]
+ 0002c 6a 01 push 1
+ 0002e e8 00 00 00 00 call _MySetFilePointerEx
+ 00033 83 c4 0c add esp, 12 ; 0000000cH
+ 00036 85 c0 test eax, eax
+ 00038 75 14 jne SHORT $LN4@win32_tell
+
+; 296 : {
+; 297 : DWORD dwErr = GetLastError();
+
+ 0003a ff 15 00 00 00
+ 00 call DWORD PTR __imp__GetLastError@0
+
+; 298 : ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+
+ 00040 89 46 04 mov DWORD PTR [esi+4], eax
+$LN8@win32_tell:
+
+; 299 : ret = (ZPOS64_T)-1;
+; 300 : }
+; 301 : else
+; 302 : ret=pos.QuadPart;
+; 303 : }
+; 304 : return ret;
+
+ 00043 83 c8 ff or eax, -1
+ 00046 83 ca ff or edx, -1
+
+; 305 : }
+
+ 00049 5e pop esi
+ 0004a 8b e5 mov esp, ebp
+ 0004c 5d pop ebp
+ 0004d c3 ret 0
+$LN4@win32_tell:
+
+; 299 : ret = (ZPOS64_T)-1;
+; 300 : }
+; 301 : else
+; 302 : ret=pos.QuadPart;
+; 303 : }
+; 304 : return ret;
+
+ 0004e 8b 44 24 08 mov eax, DWORD PTR _pos$1[esp+16]
+ 00052 8b 54 24 0c mov edx, DWORD PTR _pos$1[esp+20]
+
+; 305 : }
+
+ 00056 5e pop esi
+ 00057 8b e5 mov esp, ebp
+ 00059 5d pop ebp
+ 0005a c3 ret 0
+_win32_tell64_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _win32_seek_file_func
+_TEXT SEGMENT
+_opaque$ = 8 ; size = 4
+_stream$ = 12 ; size = 4
+_offset$ = 16 ; size = 4
+_origin$ = 20 ; size = 4
+_win32_seek_file_func PROC ; COMDAT
+
+; 309 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 56 push esi
+
+; 310 : DWORD dwMoveMethod=0xFFFFFFFF;
+; 311 : HANDLE hFile = NULL;
+; 312 :
+; 313 : long ret=-1;
+; 314 : if (stream!=NULL)
+
+ 00007 8b 75 0c mov esi, DWORD PTR _stream$[ebp]
+ 0000a 83 c9 ff or ecx, -1
+ 0000d 57 push edi
+ 0000e 33 ff xor edi, edi
+ 00010 85 f6 test esi, esi
+ 00012 74 02 je SHORT $LN4@win32_seek
+
+; 315 : hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+
+ 00014 8b 3e mov edi, DWORD PTR [esi]
+$LN4@win32_seek:
+
+; 316 : switch (origin)
+
+ 00016 8b 45 14 mov eax, DWORD PTR _origin$[ebp]
+ 00019 83 e8 00 sub eax, 0
+ 0001c 74 21 je SHORT $LN7@win32_seek
+ 0001e 83 e8 01 sub eax, 1
+ 00021 74 15 je SHORT $LN5@win32_seek
+ 00023 83 e8 01 sub eax, 1
+ 00026 74 09 je SHORT $LN6@win32_seek
+
+; 326 : break;
+; 327 : default: return -1;
+
+ 00028 83 c8 ff or eax, -1
+
+; 344 : }
+
+ 0002b 5f pop edi
+ 0002c 5e pop esi
+ 0002d 8b e5 mov esp, ebp
+ 0002f 5d pop ebp
+ 00030 c3 ret 0
+$LN6@win32_seek:
+
+; 321 : case ZLIB_FILEFUNC_SEEK_END :
+; 322 : dwMoveMethod = FILE_END;
+
+ 00031 b8 02 00 00 00 mov eax, 2
+
+; 323 : break;
+
+ 00036 eb 09 jmp SHORT $LN2@win32_seek
+$LN5@win32_seek:
+
+; 317 : {
+; 318 : case ZLIB_FILEFUNC_SEEK_CUR :
+; 319 : dwMoveMethod = FILE_CURRENT;
+
+ 00038 b8 01 00 00 00 mov eax, 1
+
+; 320 : break;
+
+ 0003d eb 02 jmp SHORT $LN2@win32_seek
+$LN7@win32_seek:
+
+; 324 : case ZLIB_FILEFUNC_SEEK_SET :
+; 325 : dwMoveMethod = FILE_BEGIN;
+
+ 0003f 33 c0 xor eax, eax
+$LN2@win32_seek:
+
+; 328 : }
+; 329 :
+; 330 : if (hFile != NULL)
+
+ 00041 85 ff test edi, edi
+ 00043 74 2c je SHORT $LN11@win32_seek
+
+; 331 : {
+; 332 : LARGE_INTEGER pos;
+; 333 : pos.QuadPart = offset;
+; 334 : if (!MySetFilePointerEx(hFile, pos, NULL, dwMoveMethod))
+
+ 00045 6a 00 push 0
+ 00047 ff 75 10 push DWORD PTR _offset$[ebp]
+ 0004a 33 d2 xor edx, edx
+ 0004c 8b cf mov ecx, edi
+ 0004e 50 push eax
+ 0004f e8 00 00 00 00 call _MySetFilePointerEx
+ 00054 83 c4 0c add esp, 12 ; 0000000cH
+ 00057 85 c0 test eax, eax
+ 00059 75 14 jne SHORT $LN10@win32_seek
+
+; 335 : {
+; 336 : DWORD dwErr = GetLastError();
+
+ 0005b ff 15 00 00 00
+ 00 call DWORD PTR __imp__GetLastError@0
+
+; 337 : ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+; 338 : ret = -1;
+
+ 00061 83 c9 ff or ecx, -1
+ 00064 89 46 04 mov DWORD PTR [esi+4], eax
+
+; 342 : }
+; 343 : return ret;
+
+ 00067 8b c1 mov eax, ecx
+
+; 344 : }
+
+ 00069 5f pop edi
+ 0006a 5e pop esi
+ 0006b 8b e5 mov esp, ebp
+ 0006d 5d pop ebp
+ 0006e c3 ret 0
+$LN10@win32_seek:
+
+; 339 : }
+; 340 : else
+; 341 : ret=0;
+
+ 0006f 33 c9 xor ecx, ecx
+$LN11@win32_seek:
+
+; 344 : }
+
+ 00071 5f pop edi
+ 00072 8b c1 mov eax, ecx
+ 00074 5e pop esi
+ 00075 8b e5 mov esp, ebp
+ 00077 5d pop ebp
+ 00078 c3 ret 0
+_win32_seek_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _win32_seek64_file_func
+_TEXT SEGMENT
+_opaque$ = 8 ; size = 4
+_stream$ = 12 ; size = 4
+_offset$ = 16 ; size = 8
+_origin$ = 24 ; size = 4
+_win32_seek64_file_func PROC ; COMDAT
+
+; 347 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 56 push esi
+
+; 348 : DWORD dwMoveMethod=0xFFFFFFFF;
+; 349 : HANDLE hFile = NULL;
+; 350 : long ret=-1;
+; 351 :
+; 352 : if (stream!=NULL)
+
+ 00007 8b 75 0c mov esi, DWORD PTR _stream$[ebp]
+ 0000a 83 c9 ff or ecx, -1
+ 0000d 57 push edi
+ 0000e 33 ff xor edi, edi
+ 00010 85 f6 test esi, esi
+ 00012 74 02 je SHORT $LN4@win32_seek
+
+; 353 : hFile = ((WIN32FILE_IOWIN*)stream)->hf;
+
+ 00014 8b 3e mov edi, DWORD PTR [esi]
+$LN4@win32_seek:
+
+; 354 :
+; 355 : switch (origin)
+
+ 00016 8b 45 18 mov eax, DWORD PTR _origin$[ebp]
+ 00019 83 e8 00 sub eax, 0
+ 0001c 74 13 je SHORT $LN6@win32_seek
+ 0001e 83 e8 01 sub eax, 1
+ 00021 74 0e je SHORT $LN6@win32_seek
+ 00023 83 e8 01 sub eax, 1
+ 00026 74 09 je SHORT $LN6@win32_seek
+
+; 356 : {
+; 357 : case ZLIB_FILEFUNC_SEEK_CUR :
+; 358 : dwMoveMethod = FILE_CURRENT;
+; 359 : break;
+; 360 : case ZLIB_FILEFUNC_SEEK_END :
+; 361 : dwMoveMethod = FILE_END;
+; 362 : break;
+; 363 : case ZLIB_FILEFUNC_SEEK_SET :
+; 364 : dwMoveMethod = FILE_BEGIN;
+; 365 : break;
+; 366 : default: return -1;
+
+ 00028 83 c8 ff or eax, -1
+
+; 383 : }
+
+ 0002b 5f pop edi
+ 0002c 5e pop esi
+ 0002d 8b e5 mov esp, ebp
+ 0002f 5d pop ebp
+ 00030 c3 ret 0
+$LN6@win32_seek:
+
+; 367 : }
+; 368 :
+; 369 : if (hFile)
+
+ 00031 85 ff test edi, edi
+ 00033 74 2e je SHORT $LN11@win32_seek
+
+; 370 : {
+; 371 : LARGE_INTEGER pos;
+; 372 : pos.QuadPart = offset;
+; 373 : if (!MySetFilePointerEx(hFile, pos, NULL, FILE_CURRENT))
+
+ 00035 ff 75 14 push DWORD PTR _offset$[ebp+4]
+ 00038 33 d2 xor edx, edx
+ 0003a 8b cf mov ecx, edi
+ 0003c ff 75 10 push DWORD PTR _offset$[ebp]
+ 0003f 6a 01 push 1
+ 00041 e8 00 00 00 00 call _MySetFilePointerEx
+ 00046 83 c4 0c add esp, 12 ; 0000000cH
+ 00049 85 c0 test eax, eax
+ 0004b 75 14 jne SHORT $LN10@win32_seek
+
+; 374 : {
+; 375 : DWORD dwErr = GetLastError();
+
+ 0004d ff 15 00 00 00
+ 00 call DWORD PTR __imp__GetLastError@0
+
+; 376 : ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+; 377 : ret = -1;
+
+ 00053 83 c9 ff or ecx, -1
+ 00056 89 46 04 mov DWORD PTR [esi+4], eax
+
+; 381 : }
+; 382 : return ret;
+
+ 00059 8b c1 mov eax, ecx
+
+; 383 : }
+
+ 0005b 5f pop edi
+ 0005c 5e pop esi
+ 0005d 8b e5 mov esp, ebp
+ 0005f 5d pop ebp
+ 00060 c3 ret 0
+$LN10@win32_seek:
+
+; 378 : }
+; 379 : else
+; 380 : ret=0;
+
+ 00061 33 c9 xor ecx, ecx
+$LN11@win32_seek:
+
+; 383 : }
+
+ 00063 5f pop edi
+ 00064 8b c1 mov eax, ecx
+ 00066 5e pop esi
+ 00067 8b e5 mov esp, ebp
+ 00069 5d pop ebp
+ 0006a c3 ret 0
+_win32_seek64_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _win32_close_file_func
+_TEXT SEGMENT
+_opaque$ = 8 ; size = 4
+_stream$ = 12 ; size = 4
+_win32_close_file_func PROC ; COMDAT
+
+; 386 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+ 00004 57 push edi
+
+; 387 : int ret=-1;
+; 388 :
+; 389 : if (stream!=NULL)
+
+ 00005 8b 7d 0c mov edi, DWORD PTR _stream$[ebp]
+ 00008 83 ce ff or esi, -1
+ 0000b 85 ff test edi, edi
+ 0000d 74 19 je SHORT $LN5@win32_clos
+
+; 390 : {
+; 391 : HANDLE hFile;
+; 392 : hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+
+ 0000f 8b 07 mov eax, DWORD PTR [edi]
+
+; 393 : if (hFile != NULL)
+
+ 00011 85 c0 test eax, eax
+ 00013 74 09 je SHORT $LN3@win32_clos
+
+; 394 : {
+; 395 : CloseHandle(hFile);
+
+ 00015 50 push eax
+ 00016 ff 15 00 00 00
+ 00 call DWORD PTR __imp__CloseHandle@4
+
+; 396 : ret=0;
+
+ 0001c 33 f6 xor esi, esi
+$LN3@win32_clos:
+
+; 397 : }
+; 398 : free(stream);
+
+ 0001e 57 push edi
+ 0001f ff 15 00 00 00
+ 00 call DWORD PTR __imp__free
+ 00025 83 c4 04 add esp, 4
+$LN5@win32_clos:
+
+; 399 : }
+; 400 : return ret;
+
+ 00028 5f pop edi
+ 00029 8b c6 mov eax, esi
+ 0002b 5e pop esi
+
+; 401 : }
+
+ 0002c 5d pop ebp
+ 0002d c3 ret 0
+_win32_close_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _win32_error_file_func
+_TEXT SEGMENT
+_opaque$ = 8 ; size = 4
+_stream$ = 12 ; size = 4
+_win32_error_file_func PROC ; COMDAT
+
+; 404 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 405 : int ret=-1;
+; 406 : if (stream!=NULL)
+
+ 00003 8b 45 0c mov eax, DWORD PTR _stream$[ebp]
+ 00006 85 c0 test eax, eax
+ 00008 74 05 je SHORT $LN4@win32_erro
+
+; 407 : {
+; 408 : ret = ((WIN32FILE_IOWIN*)stream) -> error;
+; 409 : }
+; 410 : return ret;
+
+ 0000a 8b 40 04 mov eax, DWORD PTR [eax+4]
+
+; 411 : }
+
+ 0000d 5d pop ebp
+ 0000e c3 ret 0
+$LN4@win32_erro:
+
+; 407 : {
+; 408 : ret = ((WIN32FILE_IOWIN*)stream) -> error;
+; 409 : }
+; 410 : return ret;
+
+ 0000f 83 c8 ff or eax, -1
+
+; 411 : }
+
+ 00012 5d pop ebp
+ 00013 c3 ret 0
+_win32_error_file_func ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _fill_win32_filefunc
+_TEXT SEGMENT
+_pzlib_filefunc_def$ = 8 ; size = 4
+_fill_win32_filefunc PROC ; COMDAT
+
+; 414 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 415 : pzlib_filefunc_def->zopen_file = win32_open_file_func;
+
+ 00003 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp]
+ 00006 c7 00 00 00 00
+ 00 mov DWORD PTR [eax], OFFSET _win32_open_file_func
+
+; 416 : pzlib_filefunc_def->zread_file = win32_read_file_func;
+
+ 0000c c7 40 04 00 00
+ 00 00 mov DWORD PTR [eax+4], OFFSET _win32_read_file_func
+
+; 417 : pzlib_filefunc_def->zwrite_file = win32_write_file_func;
+
+ 00013 c7 40 08 00 00
+ 00 00 mov DWORD PTR [eax+8], OFFSET _win32_write_file_func
+
+; 418 : pzlib_filefunc_def->ztell_file = win32_tell_file_func;
+
+ 0001a c7 40 0c 00 00
+ 00 00 mov DWORD PTR [eax+12], OFFSET _win32_tell_file_func
+
+; 419 : pzlib_filefunc_def->zseek_file = win32_seek_file_func;
+
+ 00021 c7 40 10 00 00
+ 00 00 mov DWORD PTR [eax+16], OFFSET _win32_seek_file_func
+
+; 420 : pzlib_filefunc_def->zclose_file = win32_close_file_func;
+
+ 00028 c7 40 14 00 00
+ 00 00 mov DWORD PTR [eax+20], OFFSET _win32_close_file_func
+
+; 421 : pzlib_filefunc_def->zerror_file = win32_error_file_func;
+
+ 0002f c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET _win32_error_file_func
+
+; 422 : pzlib_filefunc_def->opaque = NULL;
+
+ 00036 c7 40 1c 00 00
+ 00 00 mov DWORD PTR [eax+28], 0
+
+; 423 : }
+
+ 0003d 5d pop ebp
+ 0003e c3 ret 0
+_fill_win32_filefunc ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _fill_win32_filefunc64
+_TEXT SEGMENT
+_pzlib_filefunc_def$ = 8 ; size = 4
+_fill_win32_filefunc64 PROC ; COMDAT
+
+; 426 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 427 : pzlib_filefunc_def->zopen64_file = win32_open64_file_func;
+
+ 00003 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp]
+ 00006 c7 00 00 00 00
+ 00 mov DWORD PTR [eax], OFFSET _win32_open64_file_func
+
+; 428 : pzlib_filefunc_def->zread_file = win32_read_file_func;
+
+ 0000c c7 40 04 00 00
+ 00 00 mov DWORD PTR [eax+4], OFFSET _win32_read_file_func
+
+; 429 : pzlib_filefunc_def->zwrite_file = win32_write_file_func;
+
+ 00013 c7 40 08 00 00
+ 00 00 mov DWORD PTR [eax+8], OFFSET _win32_write_file_func
+
+; 430 : pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
+
+ 0001a c7 40 0c 00 00
+ 00 00 mov DWORD PTR [eax+12], OFFSET _win32_tell64_file_func
+
+; 431 : pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
+
+ 00021 c7 40 10 00 00
+ 00 00 mov DWORD PTR [eax+16], OFFSET _win32_seek64_file_func
+
+; 432 : pzlib_filefunc_def->zclose_file = win32_close_file_func;
+
+ 00028 c7 40 14 00 00
+ 00 00 mov DWORD PTR [eax+20], OFFSET _win32_close_file_func
+
+; 433 : pzlib_filefunc_def->zerror_file = win32_error_file_func;
+
+ 0002f c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET _win32_error_file_func
+
+; 434 : pzlib_filefunc_def->opaque = NULL;
+
+ 00036 c7 40 1c 00 00
+ 00 00 mov DWORD PTR [eax+28], 0
+
+; 435 : }
+
+ 0003d 5d pop ebp
+ 0003e c3 ret 0
+_fill_win32_filefunc64 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _fill_win32_filefunc64A
+_TEXT SEGMENT
+_pzlib_filefunc_def$ = 8 ; size = 4
+_fill_win32_filefunc64A PROC ; COMDAT
+
+; 439 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 440 : pzlib_filefunc_def->zopen64_file = win32_open64_file_funcA;
+
+ 00003 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp]
+ 00006 c7 00 00 00 00
+ 00 mov DWORD PTR [eax], OFFSET _win32_open64_file_funcA
+
+; 441 : pzlib_filefunc_def->zread_file = win32_read_file_func;
+
+ 0000c c7 40 04 00 00
+ 00 00 mov DWORD PTR [eax+4], OFFSET _win32_read_file_func
+
+; 442 : pzlib_filefunc_def->zwrite_file = win32_write_file_func;
+
+ 00013 c7 40 08 00 00
+ 00 00 mov DWORD PTR [eax+8], OFFSET _win32_write_file_func
+
+; 443 : pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
+
+ 0001a c7 40 0c 00 00
+ 00 00 mov DWORD PTR [eax+12], OFFSET _win32_tell64_file_func
+
+; 444 : pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
+
+ 00021 c7 40 10 00 00
+ 00 00 mov DWORD PTR [eax+16], OFFSET _win32_seek64_file_func
+
+; 445 : pzlib_filefunc_def->zclose_file = win32_close_file_func;
+
+ 00028 c7 40 14 00 00
+ 00 00 mov DWORD PTR [eax+20], OFFSET _win32_close_file_func
+
+; 446 : pzlib_filefunc_def->zerror_file = win32_error_file_func;
+
+ 0002f c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET _win32_error_file_func
+
+; 447 : pzlib_filefunc_def->opaque = NULL;
+
+ 00036 c7 40 1c 00 00
+ 00 00 mov DWORD PTR [eax+28], 0
+
+; 448 : }
+
+ 0003d 5d pop ebp
+ 0003e c3 ret 0
+_fill_win32_filefunc64A ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\iowin32.c
+; COMDAT _fill_win32_filefunc64W
+_TEXT SEGMENT
+_pzlib_filefunc_def$ = 8 ; size = 4
+_fill_win32_filefunc64W PROC ; COMDAT
+
+; 452 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 453 : pzlib_filefunc_def->zopen64_file = win32_open64_file_funcW;
+
+ 00003 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp]
+ 00006 c7 00 00 00 00
+ 00 mov DWORD PTR [eax], OFFSET _win32_open64_file_funcW
+
+; 454 : pzlib_filefunc_def->zread_file = win32_read_file_func;
+
+ 0000c c7 40 04 00 00
+ 00 00 mov DWORD PTR [eax+4], OFFSET _win32_read_file_func
+
+; 455 : pzlib_filefunc_def->zwrite_file = win32_write_file_func;
+
+ 00013 c7 40 08 00 00
+ 00 00 mov DWORD PTR [eax+8], OFFSET _win32_write_file_func
+
+; 456 : pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
+
+ 0001a c7 40 0c 00 00
+ 00 00 mov DWORD PTR [eax+12], OFFSET _win32_tell64_file_func
+
+; 457 : pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
+
+ 00021 c7 40 10 00 00
+ 00 00 mov DWORD PTR [eax+16], OFFSET _win32_seek64_file_func
+
+; 458 : pzlib_filefunc_def->zclose_file = win32_close_file_func;
+
+ 00028 c7 40 14 00 00
+ 00 00 mov DWORD PTR [eax+20], OFFSET _win32_close_file_func
+
+; 459 : pzlib_filefunc_def->zerror_file = win32_error_file_func;
+
+ 0002f c7 40 18 00 00
+ 00 00 mov DWORD PTR [eax+24], OFFSET _win32_error_file_func
+
+; 460 : pzlib_filefunc_def->opaque = NULL;
+
+ 00036 c7 40 1c 00 00
+ 00 00 mov DWORD PTR [eax+28], 0
+
+; 461 : }
+
+ 0003d 5d pop ebp
+ 0003e c3 ret 0
+_fill_win32_filefunc64W ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/iowin32.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/iowin32.obj
new file mode 100644
index 0000000000..34f529518b
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/iowin32.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/trees.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/trees.cod
new file mode 100644
index 0000000000..ab1a163973
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/trees.cod
@@ -0,0 +1,5535 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\trees.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+PUBLIC __length_code
+PUBLIC __dist_code
+_static_l_desc DD FLAT:_static_ltree
+ DD FLAT:_extra_lbits
+ DD 0101H
+ DD 011eH
+ DD 0fH
+_static_bl_desc DD 00H
+ DD FLAT:_extra_blbits
+ DD 00H
+ DD 013H
+ DD 07H
+_static_d_desc DD FLAT:_static_dtree
+ DD FLAT:_extra_dbits
+ DD 00H
+ DD 01eH
+ DD 0fH
+__length_code DB 00H
+ DB 01H
+ DB 02H
+ DB 03H
+ DB 04H
+ DB 05H
+ DB 06H
+ DB 07H
+ DB 08H
+ DB 08H
+ DB 09H
+ DB 09H
+ DB 0aH
+ DB 0aH
+ DB 0bH
+ DB 0bH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 010H
+ DB 010H
+ DB 010H
+ DB 010H
+ DB 010H
+ DB 010H
+ DB 010H
+ DB 010H
+ DB 011H
+ DB 011H
+ DB 011H
+ DB 011H
+ DB 011H
+ DB 011H
+ DB 011H
+ DB 011H
+ DB 012H
+ DB 012H
+ DB 012H
+ DB 012H
+ DB 012H
+ DB 012H
+ DB 012H
+ DB 012H
+ DB 013H
+ DB 013H
+ DB 013H
+ DB 013H
+ DB 013H
+ DB 013H
+ DB 013H
+ DB 013H
+ DB 014H
+ DB 014H
+ DB 014H
+ DB 014H
+ DB 014H
+ DB 014H
+ DB 014H
+ DB 014H
+ DB 014H
+ DB 014H
+ DB 014H
+ DB 014H
+ DB 014H
+ DB 014H
+ DB 014H
+ DB 014H
+ DB 015H
+ DB 015H
+ DB 015H
+ DB 015H
+ DB 015H
+ DB 015H
+ DB 015H
+ DB 015H
+ DB 015H
+ DB 015H
+ DB 015H
+ DB 015H
+ DB 015H
+ DB 015H
+ DB 015H
+ DB 015H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01cH
+__dist_code DB 00H
+ DB 01H
+ DB 02H
+ DB 03H
+ DB 04H
+ DB 04H
+ DB 05H
+ DB 05H
+ DB 06H
+ DB 06H
+ DB 06H
+ DB 06H
+ DB 07H
+ DB 07H
+ DB 07H
+ DB 07H
+ DB 08H
+ DB 08H
+ DB 08H
+ DB 08H
+ DB 08H
+ DB 08H
+ DB 08H
+ DB 08H
+ DB 09H
+ DB 09H
+ DB 09H
+ DB 09H
+ DB 09H
+ DB 09H
+ DB 09H
+ DB 09H
+ DB 0aH
+ DB 0aH
+ DB 0aH
+ DB 0aH
+ DB 0aH
+ DB 0aH
+ DB 0aH
+ DB 0aH
+ DB 0aH
+ DB 0aH
+ DB 0aH
+ DB 0aH
+ DB 0aH
+ DB 0aH
+ DB 0aH
+ DB 0aH
+ DB 0bH
+ DB 0bH
+ DB 0bH
+ DB 0bH
+ DB 0bH
+ DB 0bH
+ DB 0bH
+ DB 0bH
+ DB 0bH
+ DB 0bH
+ DB 0bH
+ DB 0bH
+ DB 0bH
+ DB 0bH
+ DB 0bH
+ DB 0bH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0cH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0dH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 0fH
+ DB 00H
+ DB 00H
+ DB 010H
+ DB 011H
+ DB 012H
+ DB 012H
+ DB 013H
+ DB 013H
+ DB 014H
+ DB 014H
+ DB 014H
+ DB 014H
+ DB 015H
+ DB 015H
+ DB 015H
+ DB 015H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 016H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 017H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 018H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 019H
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01aH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01bH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01cH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+ DB 01dH
+_static_dtree DW 00H
+ DW 05H
+ DW 010H
+ DW 05H
+ DW 08H
+ DW 05H
+ DW 018H
+ DW 05H
+ DW 04H
+ DW 05H
+ DW 014H
+ DW 05H
+ DW 0cH
+ DW 05H
+ DW 01cH
+ DW 05H
+ DW 02H
+ DW 05H
+ DW 012H
+ DW 05H
+ DW 0aH
+ DW 05H
+ DW 01aH
+ DW 05H
+ DW 06H
+ DW 05H
+ DW 016H
+ DW 05H
+ DW 0eH
+ DW 05H
+ DW 01eH
+ DW 05H
+ DW 01H
+ DW 05H
+ DW 011H
+ DW 05H
+ DW 09H
+ DW 05H
+ DW 019H
+ DW 05H
+ DW 05H
+ DW 05H
+ DW 015H
+ DW 05H
+ DW 0dH
+ DW 05H
+ DW 01dH
+ DW 05H
+ DW 03H
+ DW 05H
+ DW 013H
+ DW 05H
+ DW 0bH
+ DW 05H
+ DW 01bH
+ DW 05H
+ DW 07H
+ DW 05H
+ DW 017H
+ DW 05H
+_extra_blbits DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 02H
+ DD 03H
+ DD 07H
+ ORG $+4
+_extra_lbits DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 01H
+ DD 01H
+ DD 01H
+ DD 01H
+ DD 02H
+ DD 02H
+ DD 02H
+ DD 02H
+ DD 03H
+ DD 03H
+ DD 03H
+ DD 03H
+ DD 04H
+ DD 04H
+ DD 04H
+ DD 04H
+ DD 05H
+ DD 05H
+ DD 05H
+ DD 05H
+ DD 00H
+ ORG $+4
+_base_dist DD 00H
+ DD 01H
+ DD 02H
+ DD 03H
+ DD 04H
+ DD 06H
+ DD 08H
+ DD 0cH
+ DD 010H
+ DD 018H
+ DD 020H
+ DD 030H
+ DD 040H
+ DD 060H
+ DD 080H
+ DD 0c0H
+ DD 0100H
+ DD 0180H
+ DD 0200H
+ DD 0300H
+ DD 0400H
+ DD 0600H
+ DD 0800H
+ DD 0c00H
+ DD 01000H
+ DD 01800H
+ DD 02000H
+ DD 03000H
+ DD 04000H
+ DD 06000H
+_base_length DD 00H
+ DD 01H
+ DD 02H
+ DD 03H
+ DD 04H
+ DD 05H
+ DD 06H
+ DD 07H
+ DD 08H
+ DD 0aH
+ DD 0cH
+ DD 0eH
+ DD 010H
+ DD 014H
+ DD 018H
+ DD 01cH
+ DD 020H
+ DD 028H
+ DD 030H
+ DD 038H
+ DD 040H
+ DD 050H
+ DD 060H
+ DD 070H
+ DD 080H
+ DD 0a0H
+ DD 0c0H
+ DD 0e0H
+ DD 00H
+ ORG $+4
+_extra_dbits DD 00H
+ DD 00H
+ DD 00H
+ DD 00H
+ DD 01H
+ DD 01H
+ DD 02H
+ DD 02H
+ DD 03H
+ DD 03H
+ DD 04H
+ DD 04H
+ DD 05H
+ DD 05H
+ DD 06H
+ DD 06H
+ DD 07H
+ DD 07H
+ DD 08H
+ DD 08H
+ DD 09H
+ DD 09H
+ DD 0aH
+ DD 0aH
+ DD 0bH
+ DD 0bH
+ DD 0cH
+ DD 0cH
+ DD 0dH
+ DD 0dH
+_static_ltree DW 0cH
+ DW 08H
+ DW 08cH
+ DW 08H
+ DW 04cH
+ DW 08H
+ DW 0ccH
+ DW 08H
+ DW 02cH
+ DW 08H
+ DW 0acH
+ DW 08H
+ DW 06cH
+ DW 08H
+ DW 0ecH
+ DW 08H
+ DW 01cH
+ DW 08H
+ DW 09cH
+ DW 08H
+ DW 05cH
+ DW 08H
+ DW 0dcH
+ DW 08H
+ DW 03cH
+ DW 08H
+ DW 0bcH
+ DW 08H
+ DW 07cH
+ DW 08H
+ DW 0fcH
+ DW 08H
+ DW 02H
+ DW 08H
+ DW 082H
+ DW 08H
+ DW 042H
+ DW 08H
+ DW 0c2H
+ DW 08H
+ DW 022H
+ DW 08H
+ DW 0a2H
+ DW 08H
+ DW 062H
+ DW 08H
+ DW 0e2H
+ DW 08H
+ DW 012H
+ DW 08H
+ DW 092H
+ DW 08H
+ DW 052H
+ DW 08H
+ DW 0d2H
+ DW 08H
+ DW 032H
+ DW 08H
+ DW 0b2H
+ DW 08H
+ DW 072H
+ DW 08H
+ DW 0f2H
+ DW 08H
+ DW 0aH
+ DW 08H
+ DW 08aH
+ DW 08H
+ DW 04aH
+ DW 08H
+ DW 0caH
+ DW 08H
+ DW 02aH
+ DW 08H
+ DW 0aaH
+ DW 08H
+ DW 06aH
+ DW 08H
+ DW 0eaH
+ DW 08H
+ DW 01aH
+ DW 08H
+ DW 09aH
+ DW 08H
+ DW 05aH
+ DW 08H
+ DW 0daH
+ DW 08H
+ DW 03aH
+ DW 08H
+ DW 0baH
+ DW 08H
+ DW 07aH
+ DW 08H
+ DW 0faH
+ DW 08H
+ DW 06H
+ DW 08H
+ DW 086H
+ DW 08H
+ DW 046H
+ DW 08H
+ DW 0c6H
+ DW 08H
+ DW 026H
+ DW 08H
+ DW 0a6H
+ DW 08H
+ DW 066H
+ DW 08H
+ DW 0e6H
+ DW 08H
+ DW 016H
+ DW 08H
+ DW 096H
+ DW 08H
+ DW 056H
+ DW 08H
+ DW 0d6H
+ DW 08H
+ DW 036H
+ DW 08H
+ DW 0b6H
+ DW 08H
+ DW 076H
+ DW 08H
+ DW 0f6H
+ DW 08H
+ DW 0eH
+ DW 08H
+ DW 08eH
+ DW 08H
+ DW 04eH
+ DW 08H
+ DW 0ceH
+ DW 08H
+ DW 02eH
+ DW 08H
+ DW 0aeH
+ DW 08H
+ DW 06eH
+ DW 08H
+ DW 0eeH
+ DW 08H
+ DW 01eH
+ DW 08H
+ DW 09eH
+ DW 08H
+ DW 05eH
+ DW 08H
+ DW 0deH
+ DW 08H
+ DW 03eH
+ DW 08H
+ DW 0beH
+ DW 08H
+ DW 07eH
+ DW 08H
+ DW 0feH
+ DW 08H
+ DW 01H
+ DW 08H
+ DW 081H
+ DW 08H
+ DW 041H
+ DW 08H
+ DW 0c1H
+ DW 08H
+ DW 021H
+ DW 08H
+ DW 0a1H
+ DW 08H
+ DW 061H
+ DW 08H
+ DW 0e1H
+ DW 08H
+ DW 011H
+ DW 08H
+ DW 091H
+ DW 08H
+ DW 051H
+ DW 08H
+ DW 0d1H
+ DW 08H
+ DW 031H
+ DW 08H
+ DW 0b1H
+ DW 08H
+ DW 071H
+ DW 08H
+ DW 0f1H
+ DW 08H
+ DW 09H
+ DW 08H
+ DW 089H
+ DW 08H
+ DW 049H
+ DW 08H
+ DW 0c9H
+ DW 08H
+ DW 029H
+ DW 08H
+ DW 0a9H
+ DW 08H
+ DW 069H
+ DW 08H
+ DW 0e9H
+ DW 08H
+ DW 019H
+ DW 08H
+ DW 099H
+ DW 08H
+ DW 059H
+ DW 08H
+ DW 0d9H
+ DW 08H
+ DW 039H
+ DW 08H
+ DW 0b9H
+ DW 08H
+ DW 079H
+ DW 08H
+ DW 0f9H
+ DW 08H
+ DW 05H
+ DW 08H
+ DW 085H
+ DW 08H
+ DW 045H
+ DW 08H
+ DW 0c5H
+ DW 08H
+ DW 025H
+ DW 08H
+ DW 0a5H
+ DW 08H
+ DW 065H
+ DW 08H
+ DW 0e5H
+ DW 08H
+ DW 015H
+ DW 08H
+ DW 095H
+ DW 08H
+ DW 055H
+ DW 08H
+ DW 0d5H
+ DW 08H
+ DW 035H
+ DW 08H
+ DW 0b5H
+ DW 08H
+ DW 075H
+ DW 08H
+ DW 0f5H
+ DW 08H
+ DW 0dH
+ DW 08H
+ DW 08dH
+ DW 08H
+ DW 04dH
+ DW 08H
+ DW 0cdH
+ DW 08H
+ DW 02dH
+ DW 08H
+ DW 0adH
+ DW 08H
+ DW 06dH
+ DW 08H
+ DW 0edH
+ DW 08H
+ DW 01dH
+ DW 08H
+ DW 09dH
+ DW 08H
+ DW 05dH
+ DW 08H
+ DW 0ddH
+ DW 08H
+ DW 03dH
+ DW 08H
+ DW 0bdH
+ DW 08H
+ DW 07dH
+ DW 08H
+ DW 0fdH
+ DW 08H
+ DW 013H
+ DW 09H
+ DW 0113H
+ DW 09H
+ DW 093H
+ DW 09H
+ DW 0193H
+ DW 09H
+ DW 053H
+ DW 09H
+ DW 0153H
+ DW 09H
+ DW 0d3H
+ DW 09H
+ DW 01d3H
+ DW 09H
+ DW 033H
+ DW 09H
+ DW 0133H
+ DW 09H
+ DW 0b3H
+ DW 09H
+ DW 01b3H
+ DW 09H
+ DW 073H
+ DW 09H
+ DW 0173H
+ DW 09H
+ DW 0f3H
+ DW 09H
+ DW 01f3H
+ DW 09H
+ DW 0bH
+ DW 09H
+ DW 010bH
+ DW 09H
+ DW 08bH
+ DW 09H
+ DW 018bH
+ DW 09H
+ DW 04bH
+ DW 09H
+ DW 014bH
+ DW 09H
+ DW 0cbH
+ DW 09H
+ DW 01cbH
+ DW 09H
+ DW 02bH
+ DW 09H
+ DW 012bH
+ DW 09H
+ DW 0abH
+ DW 09H
+ DW 01abH
+ DW 09H
+ DW 06bH
+ DW 09H
+ DW 016bH
+ DW 09H
+ DW 0ebH
+ DW 09H
+ DW 01ebH
+ DW 09H
+ DW 01bH
+ DW 09H
+ DW 011bH
+ DW 09H
+ DW 09bH
+ DW 09H
+ DW 019bH
+ DW 09H
+ DW 05bH
+ DW 09H
+ DW 015bH
+ DW 09H
+ DW 0dbH
+ DW 09H
+ DW 01dbH
+ DW 09H
+ DW 03bH
+ DW 09H
+ DW 013bH
+ DW 09H
+ DW 0bbH
+ DW 09H
+ DW 01bbH
+ DW 09H
+ DW 07bH
+ DW 09H
+ DW 017bH
+ DW 09H
+ DW 0fbH
+ DW 09H
+ DW 01fbH
+ DW 09H
+ DW 07H
+ DW 09H
+ DW 0107H
+ DW 09H
+ DW 087H
+ DW 09H
+ DW 0187H
+ DW 09H
+ DW 047H
+ DW 09H
+ DW 0147H
+ DW 09H
+ DW 0c7H
+ DW 09H
+ DW 01c7H
+ DW 09H
+ DW 027H
+ DW 09H
+ DW 0127H
+ DW 09H
+ DW 0a7H
+ DW 09H
+ DW 01a7H
+ DW 09H
+ DW 067H
+ DW 09H
+ DW 0167H
+ DW 09H
+ DW 0e7H
+ DW 09H
+ DW 01e7H
+ DW 09H
+ DW 017H
+ DW 09H
+ DW 0117H
+ DW 09H
+ DW 097H
+ DW 09H
+ DW 0197H
+ DW 09H
+ DW 057H
+ DW 09H
+ DW 0157H
+ DW 09H
+ DW 0d7H
+ DW 09H
+ DW 01d7H
+ DW 09H
+ DW 037H
+ DW 09H
+ DW 0137H
+ DW 09H
+ DW 0b7H
+ DW 09H
+ DW 01b7H
+ DW 09H
+ DW 077H
+ DW 09H
+ DW 0177H
+ DW 09H
+ DW 0f7H
+ DW 09H
+ DW 01f7H
+ DW 09H
+ DW 0fH
+ DW 09H
+ DW 010fH
+ DW 09H
+ DW 08fH
+ DW 09H
+ DW 018fH
+ DW 09H
+ DW 04fH
+ DW 09H
+ DW 014fH
+ DW 09H
+ DW 0cfH
+ DW 09H
+ DW 01cfH
+ DW 09H
+ DW 02fH
+ DW 09H
+ DW 012fH
+ DW 09H
+ DW 0afH
+ DW 09H
+ DW 01afH
+ DW 09H
+ DW 06fH
+ DW 09H
+ DW 016fH
+ DW 09H
+ DW 0efH
+ DW 09H
+ DW 01efH
+ DW 09H
+ DW 01fH
+ DW 09H
+ DW 011fH
+ DW 09H
+ DW 09fH
+ DW 09H
+ DW 019fH
+ DW 09H
+ DW 05fH
+ DW 09H
+ DW 015fH
+ DW 09H
+ DW 0dfH
+ DW 09H
+ DW 01dfH
+ DW 09H
+ DW 03fH
+ DW 09H
+ DW 013fH
+ DW 09H
+ DW 0bfH
+ DW 09H
+ DW 01bfH
+ DW 09H
+ DW 07fH
+ DW 09H
+ DW 017fH
+ DW 09H
+ DW 0ffH
+ DW 09H
+ DW 01ffH
+ DW 09H
+ DW 00H
+ DW 07H
+ DW 040H
+ DW 07H
+ DW 020H
+ DW 07H
+ DW 060H
+ DW 07H
+ DW 010H
+ DW 07H
+ DW 050H
+ DW 07H
+ DW 030H
+ DW 07H
+ DW 070H
+ DW 07H
+ DW 08H
+ DW 07H
+ DW 048H
+ DW 07H
+ DW 028H
+ DW 07H
+ DW 068H
+ DW 07H
+ DW 018H
+ DW 07H
+ DW 058H
+ DW 07H
+ DW 038H
+ DW 07H
+ DW 078H
+ DW 07H
+ DW 04H
+ DW 07H
+ DW 044H
+ DW 07H
+ DW 024H
+ DW 07H
+ DW 064H
+ DW 07H
+ DW 014H
+ DW 07H
+ DW 054H
+ DW 07H
+ DW 034H
+ DW 07H
+ DW 074H
+ DW 07H
+ DW 03H
+ DW 08H
+ DW 083H
+ DW 08H
+ DW 043H
+ DW 08H
+ DW 0c3H
+ DW 08H
+ DW 023H
+ DW 08H
+ DW 0a3H
+ DW 08H
+ DW 063H
+ DW 08H
+ DW 0e3H
+ DW 08H
+_bl_order DB 010H
+ DB 011H
+ DB 012H
+ DB 00H
+ DB 08H
+ DB 07H
+ DB 09H
+ DB 06H
+ DB 0aH
+ DB 05H
+ DB 0bH
+ DB 04H
+ DB 0cH
+ DB 03H
+ DB 0dH
+ DB 02H
+ DB 0eH
+ DB 01H
+ DB 0fH
+PUBLIC __tr_align
+PUBLIC __tr_init
+PUBLIC __tr_flush_block
+PUBLIC __tr_flush_bits
+PUBLIC __tr_stored_block
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT __tr_stored_block
+_TEXT SEGMENT
+_stored_len$ = 8 ; size = 4
+_last$ = 12 ; size = 4
+__tr_stored_block PROC ; COMDAT
+; _s$ = ecx
+; _buf$ = edx
+
+; 870 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 53 push ebx
+ 00004 57 push edi
+ 00005 8b f9 mov edi, ecx
+ 00007 8b da mov ebx, edx
+
+; 871 : send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */
+
+ 00009 8b 8f bc 16 00
+ 00 mov ecx, DWORD PTR [edi+5820]
+ 0000f 83 f9 0d cmp ecx, 13 ; 0000000dH
+ 00012 7e 65 jle SHORT $LN2@tr_stored_
+ 00014 8b 57 08 mov edx, DWORD PTR [edi+8]
+ 00017 56 push esi
+ 00018 8b 75 0c mov esi, DWORD PTR _last$[ebp]
+ 0001b 66 8b c6 mov ax, si
+ 0001e 66 d3 e0 shl ax, cl
+ 00021 8b 4f 14 mov ecx, DWORD PTR [edi+20]
+ 00024 66 09 87 b8 16
+ 00 00 or WORD PTR [edi+5816], ax
+ 0002b 0f b6 87 b8 16
+ 00 00 movzx eax, BYTE PTR [edi+5816]
+ 00032 88 04 0a mov BYTE PTR [edx+ecx], al
+ 00035 ff 47 14 inc DWORD PTR [edi+20]
+ 00038 8b 4f 08 mov ecx, DWORD PTR [edi+8]
+ 0003b 8b 57 14 mov edx, DWORD PTR [edi+20]
+ 0003e 0f b6 87 b9 16
+ 00 00 movzx eax, BYTE PTR [edi+5817]
+ 00045 88 04 0a mov BYTE PTR [edx+ecx], al
+ 00048 b1 10 mov cl, 16 ; 00000010H
+ 0004a 2a 8f bc 16 00
+ 00 sub cl, BYTE PTR [edi+5820]
+
+; 872 : #ifdef DEBUG
+; 873 : s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
+; 874 : s->compressed_len += (stored_len + 4) << 3;
+; 875 : #endif
+; 876 : copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
+
+ 00050 8b d3 mov edx, ebx
+ 00052 ff 47 14 inc DWORD PTR [edi+20]
+ 00055 83 87 bc 16 00
+ 00 f3 add DWORD PTR [edi+5820], -13 ; fffffff3H
+ 0005c 66 d3 ee shr si, cl
+ 0005f 66 89 b7 b8 16
+ 00 00 mov WORD PTR [edi+5816], si
+ 00066 5e pop esi
+ 00067 51 push ecx
+ 00068 ff 75 08 push DWORD PTR _stored_len$[ebp]
+ 0006b 8b cf mov ecx, edi
+ 0006d e8 00 00 00 00 call _copy_block
+ 00072 83 c4 08 add esp, 8
+ 00075 5f pop edi
+ 00076 5b pop ebx
+
+; 877 : }
+
+ 00077 5d pop ebp
+ 00078 c3 ret 0
+$LN2@tr_stored_:
+
+; 871 : send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */
+
+ 00079 66 8b 45 0c mov ax, WORD PTR _last$[ebp]
+
+; 872 : #ifdef DEBUG
+; 873 : s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
+; 874 : s->compressed_len += (stored_len + 4) << 3;
+; 875 : #endif
+; 876 : copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
+
+ 0007d 8b d3 mov edx, ebx
+ 0007f 66 d3 e0 shl ax, cl
+ 00082 66 09 87 b8 16
+ 00 00 or WORD PTR [edi+5816], ax
+ 00089 8d 41 03 lea eax, DWORD PTR [ecx+3]
+ 0008c 51 push ecx
+ 0008d ff 75 08 push DWORD PTR _stored_len$[ebp]
+ 00090 8b cf mov ecx, edi
+ 00092 89 87 bc 16 00
+ 00 mov DWORD PTR [edi+5820], eax
+ 00098 e8 00 00 00 00 call _copy_block
+ 0009d 83 c4 08 add esp, 8
+ 000a0 5f pop edi
+ 000a1 5b pop ebx
+
+; 877 : }
+
+ 000a2 5d pop ebp
+ 000a3 c3 ret 0
+__tr_stored_block ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT __tr_flush_bits
+_TEXT SEGMENT
+__tr_flush_bits PROC ; COMDAT
+; _s$ = ecx
+
+; 885 : bi_flush(s);
+
+ 00000 e9 00 00 00 00 jmp _bi_flush
+__tr_flush_bits ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT __tr_flush_block
+_TEXT SEGMENT
+_max_blindex$1$ = -8 ; size = 4
+_buf$1$ = -4 ; size = 4
+_stored_len$ = 8 ; size = 4
+_last$ = 12 ; size = 4
+__tr_flush_block PROC ; COMDAT
+; _s$ = ecx
+; _buf$ = edx
+
+; 912 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 08 sub esp, 8
+ 00006 53 push ebx
+ 00007 56 push esi
+
+; 913 : ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
+; 914 : int max_blindex = 0; /* index of last bit length code of non zero freq */
+; 915 :
+; 916 : /* Build the Huffman trees unless a stored block is forced */
+; 917 : if (s->level > 0) {
+
+ 00008 8b 75 08 mov esi, DWORD PTR _stored_len$[ebp]
+ 0000b 8b da mov ebx, edx
+ 0000d 57 push edi
+ 0000e 8b f9 mov edi, ecx
+ 00010 89 5d fc mov DWORD PTR _buf$1$[ebp], ebx
+ 00013 c7 45 f8 00 00
+ 00 00 mov DWORD PTR _max_blindex$1$[ebp], 0
+ 0001a 83 bf 84 00 00
+ 00 00 cmp DWORD PTR [edi+132], 0
+ 00021 7e 55 jle SHORT $LN2@tr_flush_b
+
+; 918 :
+; 919 : /* Check if the file is binary or text */
+; 920 : if (s->strm->data_type == Z_UNKNOWN)
+
+ 00023 8b 1f mov ebx, DWORD PTR [edi]
+ 00025 83 7b 2c 02 cmp DWORD PTR [ebx+44], 2
+ 00029 75 08 jne SHORT $LN4@tr_flush_b
+
+; 921 : s->strm->data_type = detect_data_type(s);
+
+ 0002b e8 00 00 00 00 call _detect_data_type
+ 00030 89 43 2c mov DWORD PTR [ebx+44], eax
+$LN4@tr_flush_b:
+
+; 922 :
+; 923 : /* Construct the literal and distance trees */
+; 924 : build_tree(s, (tree_desc *)(&(s->l_desc)));
+
+ 00033 8d 97 18 0b 00
+ 00 lea edx, DWORD PTR [edi+2840]
+ 00039 8b cf mov ecx, edi
+ 0003b e8 00 00 00 00 call _build_tree
+
+; 925 : Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
+; 926 : s->static_len));
+; 927 :
+; 928 : build_tree(s, (tree_desc *)(&(s->d_desc)));
+
+ 00040 8d 97 24 0b 00
+ 00 lea edx, DWORD PTR [edi+2852]
+ 00046 8b cf mov ecx, edi
+ 00048 e8 00 00 00 00 call _build_tree
+
+; 929 : Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
+; 930 : s->static_len));
+; 931 : /* At this point, opt_len and static_len are the total bit lengths of
+; 932 : * the compressed block data, excluding the tree representations.
+; 933 : */
+; 934 :
+; 935 : /* Build the bit length tree for the above two trees, and get the index
+; 936 : * in bl_order of the last bit length code to send.
+; 937 : */
+; 938 : max_blindex = build_bl_tree(s);
+
+ 0004d 8b cf mov ecx, edi
+ 0004f e8 00 00 00 00 call _build_bl_tree
+
+; 939 :
+; 940 : /* Determine the best encoding. Compute the block lengths in bytes. */
+; 941 : opt_lenb = (s->opt_len+3+7)>>3;
+
+ 00054 8b 8f a8 16 00
+ 00 mov ecx, DWORD PTR [edi+5800]
+
+; 942 : static_lenb = (s->static_len+3+7)>>3;
+
+ 0005a 8b 97 ac 16 00
+ 00 mov edx, DWORD PTR [edi+5804]
+ 00060 83 c1 0a add ecx, 10 ; 0000000aH
+
+; 943 :
+; 944 : Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
+; 945 : opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
+; 946 : s->last_lit));
+; 947 :
+; 948 : if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
+; 949 :
+; 950 : } else {
+
+ 00063 8b 5d fc mov ebx, DWORD PTR _buf$1$[ebp]
+ 00066 83 c2 0a add edx, 10 ; 0000000aH
+ 00069 c1 e9 03 shr ecx, 3
+ 0006c c1 ea 03 shr edx, 3
+ 0006f 89 45 f8 mov DWORD PTR _max_blindex$1$[ebp], eax
+ 00072 3b d1 cmp edx, ecx
+ 00074 77 07 ja SHORT $LN3@tr_flush_b
+ 00076 eb 03 jmp SHORT $LN18@tr_flush_b
+$LN2@tr_flush_b:
+
+; 951 : Assert(buf != (char*)0, "lost buf");
+; 952 : opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
+
+ 00078 8d 56 05 lea edx, DWORD PTR [esi+5]
+$LN18@tr_flush_b:
+ 0007b 8b ca mov ecx, edx
+$LN3@tr_flush_b:
+
+; 953 : }
+; 954 :
+; 955 : #ifdef FORCE_STORED
+; 956 : if (buf != (char*)0) { /* force stored block */
+; 957 : #else
+; 958 : if (stored_len+4 <= opt_lenb && buf != (char*)0) {
+
+ 0007d 8d 46 04 lea eax, DWORD PTR [esi+4]
+ 00080 3b c1 cmp eax, ecx
+ 00082 77 1b ja SHORT $LN6@tr_flush_b
+ 00084 85 db test ebx, ebx
+ 00086 74 17 je SHORT $LN6@tr_flush_b
+
+; 959 : /* 4: two words for the lengths */
+; 960 : #endif
+; 961 : /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
+; 962 : * Otherwise we can't have processed more than WSIZE input bytes since
+; 963 : * the last block flush, because compression would have been
+; 964 : * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
+; 965 : * transform a block into a stored block.
+; 966 : */
+; 967 : _tr_stored_block(s, buf, stored_len, last);
+
+ 00088 8b 5d 0c mov ebx, DWORD PTR _last$[ebp]
+ 0008b 8b cf mov ecx, edi
+ 0008d 8b 55 fc mov edx, DWORD PTR _buf$1$[ebp]
+ 00090 53 push ebx
+ 00091 56 push esi
+ 00092 e8 00 00 00 00 call __tr_stored_block
+ 00097 83 c4 08 add esp, 8
+ 0009a e9 4a 01 00 00 jmp $LN9@tr_flush_b
+$LN6@tr_flush_b:
+
+; 968 :
+; 969 : #ifdef FORCE_STATIC
+; 970 : } else if (static_lenb >= 0) { /* force static trees */
+; 971 : #else
+; 972 : } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) {
+
+ 0009f 83 bf 88 00 00
+ 00 04 cmp DWORD PTR [edi+136], 4
+ 000a6 0f 84 b4 00 00
+ 00 je $LN10@tr_flush_b
+ 000ac 3b d1 cmp edx, ecx
+ 000ae 0f 84 ac 00 00
+ 00 je $LN10@tr_flush_b
+
+; 976 : (const ct_data *)static_dtree);
+; 977 : #ifdef DEBUG
+; 978 : s->compressed_len += 3 + s->static_len;
+; 979 : #endif
+; 980 : } else {
+; 981 : send_bits(s, (DYN_TREES<<1)+last, 3);
+
+ 000b4 8b 8f bc 16 00
+ 00 mov ecx, DWORD PTR [edi+5820]
+ 000ba 8b 5d 0c mov ebx, DWORD PTR _last$[ebp]
+ 000bd 83 f9 0d cmp ecx, 13 ; 0000000dH
+ 000c0 7e 51 jle SHORT $LN13@tr_flush_b
+ 000c2 8b 57 14 mov edx, DWORD PTR [edi+20]
+ 000c5 8d 73 04 lea esi, DWORD PTR [ebx+4]
+ 000c8 66 8b c6 mov ax, si
+ 000cb 66 d3 e0 shl ax, cl
+ 000ce 66 09 87 b8 16
+ 00 00 or WORD PTR [edi+5816], ax
+ 000d5 8b 4f 08 mov ecx, DWORD PTR [edi+8]
+ 000d8 0f b6 87 b8 16
+ 00 00 movzx eax, BYTE PTR [edi+5816]
+ 000df 88 04 0a mov BYTE PTR [edx+ecx], al
+ 000e2 ff 47 14 inc DWORD PTR [edi+20]
+ 000e5 8b 57 14 mov edx, DWORD PTR [edi+20]
+ 000e8 8b 4f 08 mov ecx, DWORD PTR [edi+8]
+ 000eb 0f b6 87 b9 16
+ 00 00 movzx eax, BYTE PTR [edi+5817]
+ 000f2 88 04 0a mov BYTE PTR [edx+ecx], al
+ 000f5 b1 10 mov cl, 16 ; 00000010H
+ 000f7 2a 8f bc 16 00
+ 00 sub cl, BYTE PTR [edi+5820]
+ 000fd ff 47 14 inc DWORD PTR [edi+20]
+ 00100 66 d3 ee shr si, cl
+ 00103 83 87 bc 16 00
+ 00 f3 add DWORD PTR [edi+5820], -13 ; fffffff3H
+ 0010a 66 89 b7 b8 16
+ 00 00 mov WORD PTR [edi+5816], si
+ 00111 eb 16 jmp SHORT $LN14@tr_flush_b
+$LN13@tr_flush_b:
+ 00113 8d 43 04 lea eax, DWORD PTR [ebx+4]
+ 00116 66 d3 e0 shl ax, cl
+ 00119 66 09 87 b8 16
+ 00 00 or WORD PTR [edi+5816], ax
+ 00120 8d 41 03 lea eax, DWORD PTR [ecx+3]
+ 00123 89 87 bc 16 00
+ 00 mov DWORD PTR [edi+5820], eax
+$LN14@tr_flush_b:
+
+; 982 : send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1,
+
+ 00129 8b 45 f8 mov eax, DWORD PTR _max_blindex$1$[ebp]
+ 0012c 8b cf mov ecx, edi
+ 0012e 8b 97 1c 0b 00
+ 00 mov edx, DWORD PTR [edi+2844]
+ 00134 40 inc eax
+ 00135 50 push eax
+ 00136 8b 87 28 0b 00
+ 00 mov eax, DWORD PTR [edi+2856]
+ 0013c 42 inc edx
+ 0013d 40 inc eax
+ 0013e 50 push eax
+ 0013f e8 00 00 00 00 call _send_all_trees
+
+; 983 : max_blindex+1);
+; 984 : compress_block(s, (const ct_data *)s->dyn_ltree,
+
+ 00144 8d 87 88 09 00
+ 00 lea eax, DWORD PTR [edi+2440]
+ 0014a 8b cf mov ecx, edi
+ 0014c 50 push eax
+ 0014d 8d 97 94 00 00
+ 00 lea edx, DWORD PTR [edi+148]
+ 00153 e8 00 00 00 00 call _compress_block
+ 00158 83 c4 0c add esp, 12 ; 0000000cH
+ 0015b e9 89 00 00 00 jmp $LN9@tr_flush_b
+$LN10@tr_flush_b:
+
+; 973 : #endif
+; 974 : send_bits(s, (STATIC_TREES<<1)+last, 3);
+
+ 00160 8b 8f bc 16 00
+ 00 mov ecx, DWORD PTR [edi+5820]
+ 00166 8b 5d 0c mov ebx, DWORD PTR _last$[ebp]
+ 00169 83 f9 0d cmp ecx, 13 ; 0000000dH
+ 0016c 7e 51 jle SHORT $LN11@tr_flush_b
+ 0016e 8b 57 14 mov edx, DWORD PTR [edi+20]
+ 00171 8d 73 02 lea esi, DWORD PTR [ebx+2]
+ 00174 66 8b c6 mov ax, si
+ 00177 66 d3 e0 shl ax, cl
+ 0017a 66 09 87 b8 16
+ 00 00 or WORD PTR [edi+5816], ax
+ 00181 8b 4f 08 mov ecx, DWORD PTR [edi+8]
+ 00184 0f b6 87 b8 16
+ 00 00 movzx eax, BYTE PTR [edi+5816]
+ 0018b 88 04 0a mov BYTE PTR [edx+ecx], al
+ 0018e ff 47 14 inc DWORD PTR [edi+20]
+ 00191 8b 57 14 mov edx, DWORD PTR [edi+20]
+ 00194 8b 4f 08 mov ecx, DWORD PTR [edi+8]
+ 00197 0f b6 87 b9 16
+ 00 00 movzx eax, BYTE PTR [edi+5817]
+ 0019e 88 04 0a mov BYTE PTR [edx+ecx], al
+ 001a1 b1 10 mov cl, 16 ; 00000010H
+ 001a3 2a 8f bc 16 00
+ 00 sub cl, BYTE PTR [edi+5820]
+ 001a9 ff 47 14 inc DWORD PTR [edi+20]
+ 001ac 66 d3 ee shr si, cl
+ 001af 83 87 bc 16 00
+ 00 f3 add DWORD PTR [edi+5820], -13 ; fffffff3H
+ 001b6 66 89 b7 b8 16
+ 00 00 mov WORD PTR [edi+5816], si
+ 001bd eb 16 jmp SHORT $LN12@tr_flush_b
+$LN11@tr_flush_b:
+ 001bf 8d 43 02 lea eax, DWORD PTR [ebx+2]
+ 001c2 66 d3 e0 shl ax, cl
+ 001c5 66 09 87 b8 16
+ 00 00 or WORD PTR [edi+5816], ax
+ 001cc 8d 41 03 lea eax, DWORD PTR [ecx+3]
+ 001cf 89 87 bc 16 00
+ 00 mov DWORD PTR [edi+5820], eax
+$LN12@tr_flush_b:
+
+; 975 : compress_block(s, (const ct_data *)static_ltree,
+
+ 001d5 68 00 00 00 00 push OFFSET _static_dtree
+ 001da ba 00 00 00 00 mov edx, OFFSET _static_ltree
+ 001df 8b cf mov ecx, edi
+ 001e1 e8 00 00 00 00 call _compress_block
+ 001e6 83 c4 04 add esp, 4
+$LN9@tr_flush_b:
+
+; 985 : (const ct_data *)s->dyn_dtree);
+; 986 : #ifdef DEBUG
+; 987 : s->compressed_len += 3 + s->opt_len;
+; 988 : #endif
+; 989 : }
+; 990 : Assert (s->compressed_len == s->bits_sent, "bad compressed size");
+; 991 : /* The above check is made mod 2^32, for files larger than 512 MB
+; 992 : * and uLong implemented on 32 bits.
+; 993 : */
+; 994 : init_block(s);
+
+ 001e9 8b cf mov ecx, edi
+ 001eb e8 00 00 00 00 call _init_block
+
+; 995 :
+; 996 : if (last) {
+
+ 001f0 85 db test ebx, ebx
+ 001f2 74 05 je SHORT $LN15@tr_flush_b
+
+; 997 : bi_windup(s);
+
+ 001f4 e8 00 00 00 00 call _bi_windup
+$LN15@tr_flush_b:
+ 001f9 5f pop edi
+ 001fa 5e pop esi
+ 001fb 5b pop ebx
+
+; 998 : #ifdef DEBUG
+; 999 : s->compressed_len += 7; /* align on byte boundary */
+; 1000 : #endif
+; 1001 : }
+; 1002 : Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
+; 1003 : s->compressed_len-7*last));
+; 1004 : }
+
+ 001fc 8b e5 mov esp, ebp
+ 001fe 5d pop ebp
+ 001ff c3 ret 0
+__tr_flush_block ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT __tr_init
+_TEXT SEGMENT
+__tr_init PROC ; COMDAT
+; _s$ = ecx
+
+; 384 : tr_static_init();
+; 385 :
+; 386 : s->l_desc.dyn_tree = s->dyn_ltree;
+
+ 00000 8d 81 94 00 00
+ 00 lea eax, DWORD PTR [ecx+148]
+
+; 387 : s->l_desc.stat_desc = &static_l_desc;
+
+ 00006 c7 81 20 0b 00
+ 00 00 00 00 00 mov DWORD PTR [ecx+2848], OFFSET _static_l_desc
+ 00010 89 81 18 0b 00
+ 00 mov DWORD PTR [ecx+2840], eax
+
+; 388 :
+; 389 : s->d_desc.dyn_tree = s->dyn_dtree;
+
+ 00016 8d 81 88 09 00
+ 00 lea eax, DWORD PTR [ecx+2440]
+ 0001c 89 81 24 0b 00
+ 00 mov DWORD PTR [ecx+2852], eax
+
+; 390 : s->d_desc.stat_desc = &static_d_desc;
+; 391 :
+; 392 : s->bl_desc.dyn_tree = s->bl_tree;
+
+ 00022 8d 81 7c 0a 00
+ 00 lea eax, DWORD PTR [ecx+2684]
+ 00028 89 81 30 0b 00
+ 00 mov DWORD PTR [ecx+2864], eax
+
+; 393 : s->bl_desc.stat_desc = &static_bl_desc;
+; 394 :
+; 395 : s->bi_buf = 0;
+
+ 0002e 33 c0 xor eax, eax
+ 00030 c7 81 2c 0b 00
+ 00 00 00 00 00 mov DWORD PTR [ecx+2860], OFFSET _static_d_desc
+ 0003a c7 81 38 0b 00
+ 00 00 00 00 00 mov DWORD PTR [ecx+2872], OFFSET _static_bl_desc
+ 00044 66 89 81 b8 16
+ 00 00 mov WORD PTR [ecx+5816], ax
+
+; 396 : s->bi_valid = 0;
+
+ 0004b 89 81 bc 16 00
+ 00 mov DWORD PTR [ecx+5820], eax
+
+; 397 : #ifdef DEBUG
+; 398 : s->compressed_len = 0L;
+; 399 : s->bits_sent = 0L;
+; 400 : #endif
+; 401 :
+; 402 : /* Initialize the first block of the first file: */
+; 403 : init_block(s);
+
+ 00051 e9 00 00 00 00 jmp _init_block
+__tr_init ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT __tr_align
+_TEXT SEGMENT
+__tr_align PROC ; COMDAT
+; _s$ = ecx
+
+; 894 : {
+
+ 00000 57 push edi
+ 00001 8b f9 mov edi, ecx
+
+; 895 : send_bits(s, STATIC_TREES<<1, 3);
+
+ 00003 8b 8f bc 16 00
+ 00 mov ecx, DWORD PTR [edi+5820]
+ 00009 83 f9 0d cmp ecx, 13 ; 0000000dH
+ 0000c 7e 54 jle SHORT $LN2@tr_align
+ 0000e 8b 57 08 mov edx, DWORD PTR [edi+8]
+ 00011 56 push esi
+ 00012 be 02 00 00 00 mov esi, 2
+ 00017 8b c6 mov eax, esi
+ 00019 66 d3 e0 shl ax, cl
+ 0001c 8b 4f 14 mov ecx, DWORD PTR [edi+20]
+ 0001f 66 09 87 b8 16
+ 00 00 or WORD PTR [edi+5816], ax
+ 00026 0f b6 87 b8 16
+ 00 00 movzx eax, BYTE PTR [edi+5816]
+ 0002d 88 04 0a mov BYTE PTR [edx+ecx], al
+ 00030 ff 47 14 inc DWORD PTR [edi+20]
+ 00033 8b 57 14 mov edx, DWORD PTR [edi+20]
+ 00036 8b 4f 08 mov ecx, DWORD PTR [edi+8]
+ 00039 0f b6 87 b9 16
+ 00 00 movzx eax, BYTE PTR [edi+5817]
+ 00040 88 04 0a mov BYTE PTR [edx+ecx], al
+ 00043 b1 10 mov cl, 16 ; 00000010H
+ 00045 2a 8f bc 16 00
+ 00 sub cl, BYTE PTR [edi+5820]
+ 0004b ff 47 14 inc DWORD PTR [edi+20]
+ 0004e 66 d3 ee shr si, cl
+ 00051 83 87 bc 16 00
+ 00 f3 add DWORD PTR [edi+5820], -13 ; fffffff3H
+ 00058 66 89 b7 b8 16
+ 00 00 mov WORD PTR [edi+5816], si
+ 0005f 5e pop esi
+ 00060 eb 18 jmp SHORT $LN3@tr_align
+$LN2@tr_align:
+ 00062 b8 02 00 00 00 mov eax, 2
+ 00067 66 d3 e0 shl ax, cl
+ 0006a 66 09 87 b8 16
+ 00 00 or WORD PTR [edi+5816], ax
+ 00071 8d 41 03 lea eax, DWORD PTR [ecx+3]
+ 00074 89 87 bc 16 00
+ 00 mov DWORD PTR [edi+5820], eax
+$LN3@tr_align:
+
+; 896 : send_code(s, END_BLOCK, static_ltree);
+
+ 0007a 8b 8f bc 16 00
+ 00 mov ecx, DWORD PTR [edi+5820]
+ 00080 33 c0 xor eax, eax
+ 00082 66 d3 e0 shl ax, cl
+ 00085 66 09 87 b8 16
+ 00 00 or WORD PTR [edi+5816], ax
+ 0008c 83 f9 09 cmp ecx, 9
+ 0008f 7e 49 jle SHORT $LN4@tr_align
+ 00091 8b 4f 14 mov ecx, DWORD PTR [edi+20]
+ 00094 8b 57 08 mov edx, DWORD PTR [edi+8]
+ 00097 0f b6 87 b8 16
+ 00 00 movzx eax, BYTE PTR [edi+5816]
+ 0009e 88 04 0a mov BYTE PTR [edx+ecx], al
+ 000a1 ff 47 14 inc DWORD PTR [edi+20]
+ 000a4 8b 4f 08 mov ecx, DWORD PTR [edi+8]
+ 000a7 8b 57 14 mov edx, DWORD PTR [edi+20]
+ 000aa 0f b6 87 b9 16
+ 00 00 movzx eax, BYTE PTR [edi+5817]
+ 000b1 88 04 0a mov BYTE PTR [edx+ecx], al
+ 000b4 b1 10 mov cl, 16 ; 00000010H
+ 000b6 2a 8f bc 16 00
+ 00 sub cl, BYTE PTR [edi+5820]
+ 000bc 33 c0 xor eax, eax
+ 000be ff 47 14 inc DWORD PTR [edi+20]
+ 000c1 66 d3 e8 shr ax, cl
+
+; 897 : #ifdef DEBUG
+; 898 : s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
+; 899 : #endif
+; 900 : bi_flush(s);
+
+ 000c4 8b cf mov ecx, edi
+ 000c6 83 87 bc 16 00
+ 00 f7 add DWORD PTR [edi+5820], -9 ; fffffff7H
+ 000cd 66 89 87 b8 16
+ 00 00 mov WORD PTR [edi+5816], ax
+ 000d4 5f pop edi
+ 000d5 e9 00 00 00 00 jmp _bi_flush
+$LN4@tr_align:
+
+; 896 : send_code(s, END_BLOCK, static_ltree);
+
+ 000da 8d 41 07 lea eax, DWORD PTR [ecx+7]
+
+; 897 : #ifdef DEBUG
+; 898 : s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
+; 899 : #endif
+; 900 : bi_flush(s);
+
+ 000dd 8b cf mov ecx, edi
+ 000df 89 87 bc 16 00
+ 00 mov DWORD PTR [edi+5820], eax
+ 000e5 5f pop edi
+ 000e6 e9 00 00 00 00 jmp _bi_flush
+__tr_align ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT _tr_static_init
+_TEXT SEGMENT
+_tr_static_init PROC ; COMDAT
+
+; 236 : #if defined(GEN_TREES_H) || !defined(STDC)
+; 237 : static int static_init_done = 0;
+; 238 : int n; /* iterates over tree elements */
+; 239 : int bits; /* bit counter */
+; 240 : int length; /* length value */
+; 241 : int code; /* code value */
+; 242 : int dist; /* distance index */
+; 243 : ush bl_count[MAX_BITS+1];
+; 244 : /* number of codes at each bit length for an optimal tree */
+; 245 :
+; 246 : if (static_init_done) return;
+; 247 :
+; 248 : /* For some embedded targets, global variables are not initialized: */
+; 249 : #ifdef NO_INIT_GLOBAL_POINTERS
+; 250 : static_l_desc.static_tree = static_ltree;
+; 251 : static_l_desc.extra_bits = extra_lbits;
+; 252 : static_d_desc.static_tree = static_dtree;
+; 253 : static_d_desc.extra_bits = extra_dbits;
+; 254 : static_bl_desc.extra_bits = extra_blbits;
+; 255 : #endif
+; 256 :
+; 257 : /* Initialize the mapping length (0..255) -> length code (0..28) */
+; 258 : length = 0;
+; 259 : for (code = 0; code < LENGTH_CODES-1; code++) {
+; 260 : base_length[code] = length;
+; 261 : for (n = 0; n < (1<<extra_lbits[code]); n++) {
+; 262 : _length_code[length++] = (uch)code;
+; 263 : }
+; 264 : }
+; 265 : Assert (length == 256, "tr_static_init: length != 256");
+; 266 : /* Note that the length 255 (match length 258) can be represented
+; 267 : * in two different ways: code 284 + 5 bits or code 285, so we
+; 268 : * overwrite length_code[255] to use the best encoding:
+; 269 : */
+; 270 : _length_code[length-1] = (uch)code;
+; 271 :
+; 272 : /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
+; 273 : dist = 0;
+; 274 : for (code = 0 ; code < 16; code++) {
+; 275 : base_dist[code] = dist;
+; 276 : for (n = 0; n < (1<<extra_dbits[code]); n++) {
+; 277 : _dist_code[dist++] = (uch)code;
+; 278 : }
+; 279 : }
+; 280 : Assert (dist == 256, "tr_static_init: dist != 256");
+; 281 : dist >>= 7; /* from now on, all distances are divided by 128 */
+; 282 : for ( ; code < D_CODES; code++) {
+; 283 : base_dist[code] = dist << 7;
+; 284 : for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
+; 285 : _dist_code[256 + dist++] = (uch)code;
+; 286 : }
+; 287 : }
+; 288 : Assert (dist == 256, "tr_static_init: 256+dist != 512");
+; 289 :
+; 290 : /* Construct the codes of the static literal tree */
+; 291 : for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0;
+; 292 : n = 0;
+; 293 : while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++;
+; 294 : while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++;
+; 295 : while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++;
+; 296 : while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++;
+; 297 : /* Codes 286 and 287 do not exist, but we must include them in the
+; 298 : * tree construction to get a canonical Huffman tree (longest code
+; 299 : * all ones)
+; 300 : */
+; 301 : gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count);
+; 302 :
+; 303 : /* The static distance tree is trivial: */
+; 304 : for (n = 0; n < D_CODES; n++) {
+; 305 : static_dtree[n].Len = 5;
+; 306 : static_dtree[n].Code = bi_reverse((unsigned)n, 5);
+; 307 : }
+; 308 : static_init_done = 1;
+; 309 :
+; 310 : # ifdef GEN_TREES_H
+; 311 : gen_trees_header();
+; 312 : # endif
+; 313 : #endif /* defined(GEN_TREES_H) || !defined(STDC) */
+; 314 : }
+
+ 00000 c3 ret 0
+_tr_static_init ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT _init_block
+_TEXT SEGMENT
+_init_block PROC ; COMDAT
+; _s$ = ecx
+
+; 412 : int n; /* iterates over tree elements */
+; 413 :
+; 414 : /* Initialize the trees. */
+; 415 : for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0;
+
+ 00000 8d 81 94 00 00
+ 00 lea eax, DWORD PTR [ecx+148]
+ 00006 ba 1e 01 00 00 mov edx, 286 ; 0000011eH
+ 0000b 56 push esi
+ 0000c 0f 1f 40 00 npad 4
+$LL4@init_block:
+ 00010 33 f6 xor esi, esi
+ 00012 8d 40 04 lea eax, DWORD PTR [eax+4]
+ 00015 66 89 70 fc mov WORD PTR [eax-4], si
+ 00019 83 ea 01 sub edx, 1
+ 0001c 75 f2 jne SHORT $LL4@init_block
+
+; 416 : for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0;
+
+ 0001e 8d 81 88 09 00
+ 00 lea eax, DWORD PTR [ecx+2440]
+ 00024 ba 1e 00 00 00 mov edx, 30 ; 0000001eH
+ 00029 0f 1f 80 00 00
+ 00 00 npad 7
+$LL7@init_block:
+ 00030 33 f6 xor esi, esi
+ 00032 8d 40 04 lea eax, DWORD PTR [eax+4]
+ 00035 66 89 70 fc mov WORD PTR [eax-4], si
+ 00039 83 ea 01 sub edx, 1
+ 0003c 75 f2 jne SHORT $LL7@init_block
+
+; 417 : for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
+
+ 0003e 8d 81 7c 0a 00
+ 00 lea eax, DWORD PTR [ecx+2684]
+ 00044 ba 13 00 00 00 mov edx, 19 ; 00000013H
+ 00049 0f 1f 80 00 00
+ 00 00 npad 7
+$LL10@init_block:
+ 00050 33 f6 xor esi, esi
+ 00052 8d 40 04 lea eax, DWORD PTR [eax+4]
+ 00055 66 89 70 fc mov WORD PTR [eax-4], si
+ 00059 83 ea 01 sub edx, 1
+ 0005c 75 f2 jne SHORT $LL10@init_block
+
+; 418 :
+; 419 : s->dyn_ltree[END_BLOCK].Freq = 1;
+
+ 0005e b8 01 00 00 00 mov eax, 1
+
+; 420 : s->opt_len = s->static_len = 0L;
+
+ 00063 89 b1 ac 16 00
+ 00 mov DWORD PTR [ecx+5804], esi
+ 00069 89 b1 a8 16 00
+ 00 mov DWORD PTR [ecx+5800], esi
+
+; 421 : s->last_lit = s->matches = 0;
+
+ 0006f 89 b1 b0 16 00
+ 00 mov DWORD PTR [ecx+5808], esi
+ 00075 89 b1 a0 16 00
+ 00 mov DWORD PTR [ecx+5792], esi
+ 0007b 66 89 81 94 04
+ 00 00 mov WORD PTR [ecx+1172], ax
+ 00082 5e pop esi
+
+; 422 : }
+
+ 00083 c3 ret 0
+_init_block ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT _pqdownheap
+_TEXT SEGMENT
+tv287 = -8 ; size = 4
+_tree$1$ = -4 ; size = 4
+_v$1$ = 8 ; size = 4
+_k$ = 8 ; size = 4
+_pqdownheap PROC ; COMDAT
+; _s$ = ecx
+; _tree$ = edx
+
+; 457 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 08 sub esp, 8
+
+; 458 : int v = s->heap[k];
+; 459 : int j = k << 1; /* left son of k */
+; 460 : while (j <= s->heap_len) {
+
+ 00006 8b 81 50 14 00
+ 00 mov eax, DWORD PTR [ecx+5200]
+ 0000c 53 push ebx
+ 0000d 8b 5d 08 mov ebx, DWORD PTR _k$[ebp]
+ 00010 56 push esi
+ 00011 57 push edi
+ 00012 89 55 fc mov DWORD PTR _tree$1$[ebp], edx
+ 00015 8b bc 99 5c 0b
+ 00 00 mov edi, DWORD PTR [ecx+ebx*4+2908]
+ 0001c 8d 34 1b lea esi, DWORD PTR [ebx+ebx]
+ 0001f 89 7d 08 mov DWORD PTR _v$1$[ebp], edi
+ 00022 3b f0 cmp esi, eax
+ 00024 0f 8f 91 00 00
+ 00 jg $LN16@pqdownheap
+ 0002a 8d 14 ba lea edx, DWORD PTR [edx+edi*4]
+ 0002d 89 55 f8 mov DWORD PTR tv287[ebp], edx
+$LN19@pqdownheap:
+
+; 461 : /* Set j to the smallest of the two sons: */
+; 462 : if (j < s->heap_len &&
+
+ 00030 7d 42 jge SHORT $LN4@pqdownheap
+ 00032 8b bc b1 60 0b
+ 00 00 mov edi, DWORD PTR [ecx+esi*4+2912]
+ 00039 8b 45 fc mov eax, DWORD PTR _tree$1$[ebp]
+ 0003c 8b 94 b1 5c 0b
+ 00 00 mov edx, DWORD PTR [ecx+esi*4+2908]
+ 00043 0f b7 04 b8 movzx eax, WORD PTR [eax+edi*4]
+ 00047 8b 7d fc mov edi, DWORD PTR _tree$1$[ebp]
+ 0004a 0f b7 14 97 movzx edx, WORD PTR [edi+edx*4]
+ 0004e 8b bc b1 60 0b
+ 00 00 mov edi, DWORD PTR [ecx+esi*4+2912]
+ 00055 66 3b c2 cmp ax, dx
+ 00058 72 19 jb SHORT $LN5@pqdownheap
+ 0005a 75 18 jne SHORT $LN4@pqdownheap
+ 0005c 8b 94 b1 5c 0b
+ 00 00 mov edx, DWORD PTR [ecx+esi*4+2908]
+ 00063 8a 84 0f 58 14
+ 00 00 mov al, BYTE PTR [edi+ecx+5208]
+ 0006a 3a 84 0a 58 14
+ 00 00 cmp al, BYTE PTR [edx+ecx+5208]
+ 00071 77 01 ja SHORT $LN4@pqdownheap
+$LN5@pqdownheap:
+
+; 463 : smaller(tree, s->heap[j+1], s->heap[j], s->depth)) {
+; 464 : j++;
+
+ 00073 46 inc esi
+$LN4@pqdownheap:
+
+; 465 : }
+; 466 : /* Exit if v is smaller than both sons */
+; 467 : if (smaller(tree, v, s->heap[j], s->depth)) break;
+
+ 00074 8b 94 b1 5c 0b
+ 00 00 mov edx, DWORD PTR [ecx+esi*4+2908]
+ 0007b 8b 45 f8 mov eax, DWORD PTR tv287[ebp]
+ 0007e 8b 7d fc mov edi, DWORD PTR _tree$1$[ebp]
+ 00081 0f b7 00 movzx eax, WORD PTR [eax]
+ 00084 0f b7 3c 97 movzx edi, WORD PTR [edi+edx*4]
+ 00088 66 3b c7 cmp ax, di
+ 0008b 72 3c jb SHORT $LN15@pqdownheap
+ 0008d 8b 7d 08 mov edi, DWORD PTR _v$1$[ebp]
+ 00090 75 10 jne SHORT $LN6@pqdownheap
+ 00092 8a 84 0f 58 14
+ 00 00 mov al, BYTE PTR [edi+ecx+5208]
+ 00099 3a 84 0a 58 14
+ 00 00 cmp al, BYTE PTR [edx+ecx+5208]
+ 000a0 76 19 jbe SHORT $LN16@pqdownheap
+$LN6@pqdownheap:
+
+; 468 :
+; 469 : /* Exchange v with the smallest son */
+; 470 : s->heap[k] = s->heap[j]; k = j;
+
+ 000a2 89 94 99 5c 0b
+ 00 00 mov DWORD PTR [ecx+ebx*4+2908], edx
+ 000a9 8b de mov ebx, esi
+ 000ab 8b 81 50 14 00
+ 00 mov eax, DWORD PTR [ecx+5200]
+
+; 471 :
+; 472 : /* And continue down the tree, setting j to the left son of k */
+; 473 : j <<= 1;
+
+ 000b1 03 f6 add esi, esi
+ 000b3 3b f0 cmp esi, eax
+ 000b5 0f 8e 75 ff ff
+ ff jle $LN19@pqdownheap
+$LN16@pqdownheap:
+
+; 474 : }
+; 475 : s->heap[k] = v;
+
+ 000bb 89 bc 99 5c 0b
+ 00 00 mov DWORD PTR [ecx+ebx*4+2908], edi
+ 000c2 5f pop edi
+ 000c3 5e pop esi
+ 000c4 5b pop ebx
+
+; 476 : }
+
+ 000c5 8b e5 mov esp, ebp
+ 000c7 5d pop ebp
+ 000c8 c3 ret 0
+$LN15@pqdownheap:
+
+; 474 : }
+; 475 : s->heap[k] = v;
+
+ 000c9 8b 45 08 mov eax, DWORD PTR _v$1$[ebp]
+ 000cc 5f pop edi
+ 000cd 5e pop esi
+ 000ce 89 84 99 5c 0b
+ 00 00 mov DWORD PTR [ecx+ebx*4+2908], eax
+ 000d5 5b pop ebx
+
+; 476 : }
+
+ 000d6 8b e5 mov esp, ebp
+ 000d8 5d pop ebp
+ 000d9 c3 ret 0
+_pqdownheap ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT _gen_bitlen
+_TEXT SEGMENT
+tv644 = -52 ; size = 4
+_extra$1$ = -48 ; size = 4
+_s$1$ = -44 ; size = 4
+tv653 = -40 ; size = 4
+tv628 = -40 ; size = 4
+tv632 = -36 ; size = 4
+_stree$1$ = -32 ; size = 4
+_base$1$ = -28 ; size = 4
+_max_code$1$ = -24 ; size = 4
+_overflow$1$ = -20 ; size = 4
+tv647 = -16 ; size = 4
+_h$1$ = -12 ; size = 4
+_bits$3$ = -8 ; size = 4
+_tree$1$ = -4 ; size = 4
+_gen_bitlen PROC ; COMDAT
+; _s$ = ecx
+; _desc$ = edx
+
+; 491 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 34 sub esp, 52 ; 00000034H
+
+; 492 : ct_data *tree = desc->dyn_tree;
+; 493 : int max_code = desc->max_code;
+
+ 00006 8b 42 04 mov eax, DWORD PTR [edx+4]
+ 00009 0f 57 c0 xorps xmm0, xmm0
+ 0000c 89 45 e8 mov DWORD PTR _max_code$1$[ebp], eax
+
+; 494 : const ct_data *stree = desc->stat_desc->static_tree;
+
+ 0000f 8b 42 08 mov eax, DWORD PTR [edx+8]
+ 00012 53 push ebx
+ 00013 8b d9 mov ebx, ecx
+
+; 495 : const intf *extra = desc->stat_desc->extra_bits;
+; 496 : int base = desc->stat_desc->extra_base;
+; 497 : int max_length = desc->stat_desc->max_length;
+; 498 : int h; /* heap index */
+; 499 : int n, m; /* iterate over the tree elements */
+; 500 : int bits; /* bit length */
+; 501 : int xbits; /* extra bits */
+; 502 : ush f; /* frequency */
+; 503 : int overflow = 0; /* number of elements with bit length too large */
+
+ 00015 c7 45 ec 00 00
+ 00 00 mov DWORD PTR _overflow$1$[ebp], 0
+ 0001c 8b 0a mov ecx, DWORD PTR [edx]
+ 0001e 8b 10 mov edx, DWORD PTR [eax]
+ 00020 89 55 e0 mov DWORD PTR _stree$1$[ebp], edx
+ 00023 8b 50 04 mov edx, DWORD PTR [eax+4]
+ 00026 89 55 d0 mov DWORD PTR _extra$1$[ebp], edx
+ 00029 8b 50 08 mov edx, DWORD PTR [eax+8]
+ 0002c 56 push esi
+ 0002d 8b 70 10 mov esi, DWORD PTR [eax+16]
+
+; 504 :
+; 505 : for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0;
+
+ 00030 0f 11 83 3c 0b
+ 00 00 movups XMMWORD PTR [ebx+2876], xmm0
+ 00037 89 55 e4 mov DWORD PTR _base$1$[ebp], edx
+
+; 506 :
+; 507 : /* In a first pass, compute the optimal bit lengths (which may
+; 508 : * overflow in the case of the bit length tree).
+; 509 : */
+; 510 : tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */
+
+ 0003a 33 d2 xor edx, edx
+ 0003c 0f 11 83 4c 0b
+ 00 00 movups XMMWORD PTR [ebx+2892], xmm0
+ 00043 8b 83 54 14 00
+ 00 mov eax, DWORD PTR [ebx+5204]
+ 00049 89 5d d4 mov DWORD PTR _s$1$[ebp], ebx
+ 0004c 89 4d fc mov DWORD PTR _tree$1$[ebp], ecx
+ 0004f 89 75 f8 mov DWORD PTR _bits$3$[ebp], esi
+ 00052 8b 84 83 5c 0b
+ 00 00 mov eax, DWORD PTR [ebx+eax*4+2908]
+ 00059 66 89 54 81 02 mov WORD PTR [ecx+eax*4+2], dx
+
+; 511 :
+; 512 : for (h = s->heap_max+1; h < HEAP_SIZE; h++) {
+
+ 0005e 8b 93 54 14 00
+ 00 mov edx, DWORD PTR [ebx+5204]
+ 00064 42 inc edx
+ 00065 81 fa 3d 02 00
+ 00 cmp edx, 573 ; 0000023dH
+ 0006b 0f 8d 95 01 00
+ 00 jge $LN14@gen_bitlen
+
+; 506 :
+; 507 : /* In a first pass, compute the optimal bit lengths (which may
+; 508 : * overflow in the case of the bit length tree).
+; 509 : */
+; 510 : tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */
+
+ 00071 b8 3d 02 00 00 mov eax, 573 ; 0000023dH
+ 00076 8d 8b 5c 0b 00
+ 00 lea ecx, DWORD PTR [ebx+2908]
+ 0007c 2b c2 sub eax, edx
+ 0007e 8d 0c 91 lea ecx, DWORD PTR [ecx+edx*4]
+
+; 511 :
+; 512 : for (h = s->heap_max+1; h < HEAP_SIZE; h++) {
+
+ 00081 03 d0 add edx, eax
+ 00083 89 45 d8 mov DWORD PTR tv653[ebp], eax
+ 00086 8b 45 fc mov eax, DWORD PTR _tree$1$[ebp]
+ 00089 89 55 f4 mov DWORD PTR _h$1$[ebp], edx
+ 0008c 33 d2 xor edx, edx
+ 0008e 89 4d dc mov DWORD PTR tv632[ebp], ecx
+ 00091 57 push edi
+$LL7@gen_bitlen:
+
+; 513 : n = s->heap[h];
+
+ 00092 8b 39 mov edi, DWORD PTR [ecx]
+
+; 514 : bits = tree[tree[n].Dad].Len + 1;
+
+ 00094 8d 0c bd 00 00
+ 00 00 lea ecx, DWORD PTR [edi*4]
+ 0009b 0f b7 44 01 02 movzx eax, WORD PTR [ecx+eax+2]
+ 000a0 89 4d f0 mov DWORD PTR tv647[ebp], ecx
+ 000a3 8b 4d fc mov ecx, DWORD PTR _tree$1$[ebp]
+ 000a6 0f b7 4c 81 02 movzx ecx, WORD PTR [ecx+eax*4+2]
+ 000ab 41 inc ecx
+
+; 515 : if (bits > max_length) bits = max_length, overflow++;
+
+ 000ac 3b ce cmp ecx, esi
+ 000ae 7e 06 jle SHORT $LN18@gen_bitlen
+ 000b0 42 inc edx
+ 000b1 8b ce mov ecx, esi
+ 000b3 89 55 ec mov DWORD PTR _overflow$1$[ebp], edx
+$LN18@gen_bitlen:
+
+; 516 : tree[n].Len = (ush)bits;
+
+ 000b6 8b 75 f0 mov esi, DWORD PTR tv647[ebp]
+ 000b9 8b 45 fc mov eax, DWORD PTR _tree$1$[ebp]
+ 000bc 66 89 4c 06 02 mov WORD PTR [esi+eax+2], cx
+
+; 517 : /* We overwrite tree[n].Dad which is no longer needed */
+; 518 :
+; 519 : if (n > max_code) continue; /* not a leaf node */
+
+ 000c1 8b 75 f8 mov esi, DWORD PTR _bits$3$[ebp]
+ 000c4 3b 7d e8 cmp edi, DWORD PTR _max_code$1$[ebp]
+ 000c7 7f 5b jg SHORT $LN5@gen_bitlen
+
+; 520 :
+; 521 : s->bl_count[bits]++;
+
+ 000c9 66 ff 84 4b 3c
+ 0b 00 00 inc WORD PTR [ebx+ecx*2+2876]
+
+; 522 : xbits = 0;
+; 523 : if (n >= base) xbits = extra[n-base];
+
+ 000d1 3b 7d e4 cmp edi, DWORD PTR _base$1$[ebp]
+ 000d4 7c 0e jl SHORT $LN50@gen_bitlen
+ 000d6 8b 75 d0 mov esi, DWORD PTR _extra$1$[ebp]
+ 000d9 2b 7d e4 sub edi, DWORD PTR _base$1$[ebp]
+ 000dc 8b 3c be mov edi, DWORD PTR [esi+edi*4]
+ 000df 8b 75 f8 mov esi, DWORD PTR _bits$3$[ebp]
+ 000e2 eb 02 jmp SHORT $LN20@gen_bitlen
+$LN50@gen_bitlen:
+ 000e4 33 ff xor edi, edi
+$LN20@gen_bitlen:
+
+; 524 : f = tree[n].Freq;
+
+ 000e6 8b 55 f0 mov edx, DWORD PTR tv647[ebp]
+ 000e9 0f b7 04 02 movzx eax, WORD PTR [edx+eax]
+
+; 525 : s->opt_len += (ulg)f * (bits + xbits);
+; 526 : if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
+
+ 000ed 8b 55 ec mov edx, DWORD PTR _overflow$1$[ebp]
+ 000f0 89 45 cc mov DWORD PTR tv644[ebp], eax
+ 000f3 8d 04 0f lea eax, DWORD PTR [edi+ecx]
+ 000f6 8b 4d cc mov ecx, DWORD PTR tv644[ebp]
+ 000f9 0f af c1 imul eax, ecx
+ 000fc 01 83 a8 16 00
+ 00 add DWORD PTR [ebx+5800], eax
+ 00102 83 7d e0 00 cmp DWORD PTR _stree$1$[ebp], 0
+ 00106 74 19 je SHORT $LN51@gen_bitlen
+ 00108 8b 75 e0 mov esi, DWORD PTR _stree$1$[ebp]
+ 0010b 8b 45 f0 mov eax, DWORD PTR tv647[ebp]
+ 0010e 0f b7 44 30 02 movzx eax, WORD PTR [eax+esi+2]
+ 00113 8b 75 f8 mov esi, DWORD PTR _bits$3$[ebp]
+ 00116 03 c7 add eax, edi
+ 00118 0f af c1 imul eax, ecx
+ 0011b 01 83 ac 16 00
+ 00 add DWORD PTR [ebx+5804], eax
+$LN51@gen_bitlen:
+ 00121 8b 45 fc mov eax, DWORD PTR _tree$1$[ebp]
+$LN5@gen_bitlen:
+
+; 511 :
+; 512 : for (h = s->heap_max+1; h < HEAP_SIZE; h++) {
+
+ 00124 8b 4d dc mov ecx, DWORD PTR tv632[ebp]
+ 00127 83 c1 04 add ecx, 4
+ 0012a 83 6d d8 01 sub DWORD PTR tv653[ebp], 1
+ 0012e 89 4d dc mov DWORD PTR tv632[ebp], ecx
+ 00131 0f 85 5b ff ff
+ ff jne $LL7@gen_bitlen
+
+; 527 : }
+; 528 : if (overflow == 0) return;
+
+ 00137 85 d2 test edx, edx
+ 00139 0f 84 c6 00 00
+ 00 je $LN52@gen_bitlen
+ 0013f 8d 56 ff lea edx, DWORD PTR [esi-1]
+ 00142 81 c6 9e 05 00
+ 00 add esi, 1438 ; 0000059eH
+ 00148 8d 3c 73 lea edi, DWORD PTR [ebx+esi*2]
+ 0014b 8b 75 ec mov esi, DWORD PTR _overflow$1$[ebp]
+ 0014e 89 7d d8 mov DWORD PTR tv628[ebp], edi
+$LL10@gen_bitlen:
+
+; 529 :
+; 530 : Trace((stderr,"\nbit length overflow\n"));
+; 531 : /* This happens for example on obj2 and pic of the Calgary corpus */
+; 532 :
+; 533 : /* Find the first bit length which could increase: */
+; 534 : do {
+; 535 : bits = max_length-1;
+
+ 00151 8b ca mov ecx, edx
+
+; 536 : while (s->bl_count[bits] == 0) bits--;
+
+ 00153 8d 83 3c 0b 00
+ 00 lea eax, DWORD PTR [ebx+2876]
+ 00159 66 83 3c 48 00 cmp WORD PTR [eax+ecx*2], 0
+ 0015e 8d 04 48 lea eax, DWORD PTR [eax+ecx*2]
+ 00161 75 0a jne SHORT $LN12@gen_bitlen
+$LL11@gen_bitlen:
+ 00163 8d 40 fe lea eax, DWORD PTR [eax-2]
+ 00166 49 dec ecx
+ 00167 66 83 38 00 cmp WORD PTR [eax], 0
+ 0016b 74 f6 je SHORT $LL11@gen_bitlen
+$LN12@gen_bitlen:
+
+; 537 : s->bl_count[bits]--; /* move one leaf down the tree */
+; 538 : s->bl_count[bits+1] += 2; /* move one overflow item as its brother */
+
+ 0016d 66 83 84 4b 3e
+ 0b 00 00 02 add WORD PTR [ebx+ecx*2+2878], 2
+ 00176 b8 ff ff 00 00 mov eax, 65535 ; 0000ffffH
+ 0017b 66 01 84 4b 3c
+ 0b 00 00 add WORD PTR [ebx+ecx*2+2876], ax
+
+; 539 : s->bl_count[max_length]--;
+; 540 : /* The brother of the overflow item also moves one step up,
+; 541 : * but this does not affect bl_count[max_length]
+; 542 : */
+; 543 : overflow -= 2;
+
+ 00183 83 ee 02 sub esi, 2
+ 00186 66 01 07 add WORD PTR [edi], ax
+
+; 544 : } while (overflow > 0);
+
+ 00189 85 f6 test esi, esi
+ 0018b 7f c4 jg SHORT $LL10@gen_bitlen
+
+; 545 :
+; 546 : /* Now recompute all bit lengths, scanning in increasing frequency.
+; 547 : * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
+; 548 : * lengths instead of fixing only the wrong ones. This idea is taken
+; 549 : * from 'ar' written by Haruhiko Okumura.)
+; 550 : */
+; 551 : for (bits = max_length; bits != 0; bits--) {
+
+ 0018d 8b 75 f8 mov esi, DWORD PTR _bits$3$[ebp]
+ 00190 8b 55 f4 mov edx, DWORD PTR _h$1$[ebp]
+ 00193 85 f6 test esi, esi
+ 00195 74 6e je SHORT $LN52@gen_bitlen
+$LL15@gen_bitlen:
+
+; 552 : n = s->bl_count[bits];
+
+ 00197 0f b7 07 movzx eax, WORD PTR [edi]
+
+; 553 : while (n != 0) {
+
+ 0019a 85 c0 test eax, eax
+ 0019c 74 5c je SHORT $LN13@gen_bitlen
+
+; 552 : n = s->bl_count[bits];
+
+ 0019e 8b 4d e8 mov ecx, DWORD PTR _max_code$1$[ebp]
+ 001a1 8d ba d7 02 00
+ 00 lea edi, DWORD PTR [edx+727]
+ 001a7 8d 3c bb lea edi, DWORD PTR [ebx+edi*4]
+ 001aa 66 0f 1f 44 00
+ 00 npad 6
+$LL16@gen_bitlen:
+
+; 554 : m = s->heap[--h];
+
+ 001b0 8b 5f fc mov ebx, DWORD PTR [edi-4]
+ 001b3 8d 7f fc lea edi, DWORD PTR [edi-4]
+ 001b6 4a dec edx
+ 001b7 89 55 f4 mov DWORD PTR _h$1$[ebp], edx
+
+; 555 : if (m > max_code) continue;
+
+ 001ba 3b d9 cmp ebx, ecx
+ 001bc 7f 32 jg SHORT $LN36@gen_bitlen
+
+; 556 : if ((unsigned) tree[m].Len != (unsigned) bits) {
+
+ 001be 8b 4d fc mov ecx, DWORD PTR _tree$1$[ebp]
+ 001c1 0f b7 4c 99 02 movzx ecx, WORD PTR [ecx+ebx*4+2]
+ 001c6 3b ce cmp ecx, esi
+ 001c8 74 22 je SHORT $LN24@gen_bitlen
+
+; 557 : Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
+; 558 : s->opt_len += ((long)bits - (long)tree[m].Len)
+
+ 001ca 8b d6 mov edx, esi
+ 001cc 2b d1 sub edx, ecx
+ 001ce 8b 4d fc mov ecx, DWORD PTR _tree$1$[ebp]
+ 001d1 0f b7 0c 99 movzx ecx, WORD PTR [ecx+ebx*4]
+ 001d5 0f af d1 imul edx, ecx
+ 001d8 8b 4d d4 mov ecx, DWORD PTR _s$1$[ebp]
+ 001db 01 91 a8 16 00
+ 00 add DWORD PTR [ecx+5800], edx
+
+; 559 : *(long)tree[m].Freq;
+; 560 : tree[m].Len = (ush)bits;
+
+ 001e1 8b 4d fc mov ecx, DWORD PTR _tree$1$[ebp]
+ 001e4 8b 55 f4 mov edx, DWORD PTR _h$1$[ebp]
+ 001e7 66 89 74 99 02 mov WORD PTR [ecx+ebx*4+2], si
+$LN24@gen_bitlen:
+
+; 561 : }
+; 562 : n--;
+
+ 001ec 8b 4d e8 mov ecx, DWORD PTR _max_code$1$[ebp]
+ 001ef 48 dec eax
+$LN36@gen_bitlen:
+
+; 553 : while (n != 0) {
+
+ 001f0 85 c0 test eax, eax
+ 001f2 75 bc jne SHORT $LL16@gen_bitlen
+ 001f4 8b 5d d4 mov ebx, DWORD PTR _s$1$[ebp]
+ 001f7 8b 7d d8 mov edi, DWORD PTR tv628[ebp]
+$LN13@gen_bitlen:
+
+; 545 :
+; 546 : /* Now recompute all bit lengths, scanning in increasing frequency.
+; 547 : * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
+; 548 : * lengths instead of fixing only the wrong ones. This idea is taken
+; 549 : * from 'ar' written by Haruhiko Okumura.)
+; 550 : */
+; 551 : for (bits = max_length; bits != 0; bits--) {
+
+ 001fa 83 ef 02 sub edi, 2
+ 001fd 89 7d d8 mov DWORD PTR tv628[ebp], edi
+ 00200 83 ee 01 sub esi, 1
+ 00203 75 92 jne SHORT $LL15@gen_bitlen
+$LN52@gen_bitlen:
+ 00205 5f pop edi
+$LN14@gen_bitlen:
+ 00206 5e pop esi
+ 00207 5b pop ebx
+
+; 563 : }
+; 564 : }
+; 565 : }
+
+ 00208 8b e5 mov esp, ebp
+ 0020a 5d pop ebp
+ 0020b c3 ret 0
+_gen_bitlen ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT _gen_codes
+_TEXT SEGMENT
+_next_code$ = -36 ; size = 32
+_tree$1$ = -4 ; size = 4
+_bl_count$ = 8 ; size = 4
+_gen_codes PROC ; COMDAT
+; _tree$ = ecx
+; _max_code$ = edx
+
+; 579 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 24 sub esp, 36 ; 00000024H
+ 00006 53 push ebx
+ 00007 56 push esi
+ 00008 8b da mov ebx, edx
+ 0000a 89 4d fc mov DWORD PTR _tree$1$[ebp], ecx
+
+; 580 : ush next_code[MAX_BITS+1]; /* next code value for each bit length */
+; 581 : ush code = 0; /* running code value */
+; 582 : int bits; /* bit index */
+; 583 : int n; /* code index */
+; 584 :
+; 585 : /* The distribution counts are first used to generate the code values
+; 586 : * without bit reversal.
+; 587 : */
+; 588 : for (bits = 1; bits <= MAX_BITS; bits++) {
+
+ 0000d 8b 55 08 mov edx, DWORD PTR _bl_count$[ebp]
+ 00010 8d 45 de lea eax, DWORD PTR _next_code$[ebp+2]
+ 00013 57 push edi
+ 00014 33 ff xor edi, edi
+ 00016 be 01 00 00 00 mov esi, 1
+ 0001b 2b d0 sub edx, eax
+ 0001d 0f 1f 00 npad 3
+$LL14@gen_codes:
+ 00020 8d 04 72 lea eax, DWORD PTR [edx+esi*2]
+
+; 589 : next_code[bits] = code = (code + bl_count[bits-1]) << 1;
+
+ 00023 66 8b 44 05 dc mov ax, WORD PTR _next_code$[ebp+eax]
+ 00028 66 03 c7 add ax, di
+ 0002b 66 03 c0 add ax, ax
+ 0002e 0f b7 f8 movzx edi, ax
+ 00031 66 89 7c 75 dc mov WORD PTR _next_code$[ebp+esi*2], di
+ 00036 46 inc esi
+ 00037 83 fe 0f cmp esi, 15 ; 0000000fH
+ 0003a 7e e4 jle SHORT $LL14@gen_codes
+
+; 590 : }
+; 591 : /* Check that the bit counts in bl_count are consistent. The last code
+; 592 : * must be all ones.
+; 593 : */
+; 594 : Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
+; 595 : "inconsistent bit counts");
+; 596 : Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
+; 597 :
+; 598 : for (n = 0; n <= max_code; n++) {
+
+ 0003c 33 f6 xor esi, esi
+ 0003e 85 db test ebx, ebx
+ 00040 78 27 js SHORT $LN6@gen_codes
+$LL7@gen_codes:
+
+; 599 : int len = tree[n].Len;
+
+ 00042 0f b7 54 b1 02 movzx edx, WORD PTR [ecx+esi*4+2]
+
+; 600 : if (len == 0) continue;
+
+ 00047 85 d2 test edx, edx
+ 00049 74 19 je SHORT $LN5@gen_codes
+
+; 601 : /* Now reverse the bits */
+; 602 : tree[n].Code = bi_reverse(next_code[len]++, len);
+
+ 0004b 0f b7 44 55 dc movzx eax, WORD PTR _next_code$[ebp+edx*2]
+ 00050 8b c8 mov ecx, eax
+ 00052 40 inc eax
+ 00053 66 89 44 55 dc mov WORD PTR _next_code$[ebp+edx*2], ax
+ 00058 e8 00 00 00 00 call _bi_reverse
+ 0005d 8b 4d fc mov ecx, DWORD PTR _tree$1$[ebp]
+ 00060 66 89 04 b1 mov WORD PTR [ecx+esi*4], ax
+$LN5@gen_codes:
+
+; 590 : }
+; 591 : /* Check that the bit counts in bl_count are consistent. The last code
+; 592 : * must be all ones.
+; 593 : */
+; 594 : Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
+; 595 : "inconsistent bit counts");
+; 596 : Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
+; 597 :
+; 598 : for (n = 0; n <= max_code; n++) {
+
+ 00064 46 inc esi
+ 00065 3b f3 cmp esi, ebx
+ 00067 7e d9 jle SHORT $LL7@gen_codes
+$LN6@gen_codes:
+ 00069 5f pop edi
+ 0006a 5e pop esi
+ 0006b 5b pop ebx
+
+; 603 :
+; 604 : Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
+; 605 : n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
+; 606 : }
+; 607 : }
+
+ 0006c 8b e5 mov esp, ebp
+ 0006e 5d pop ebp
+ 0006f c3 ret 0
+_gen_codes ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT _build_tree
+_TEXT SEGMENT
+tv503 = -16 ; size = 4
+_stree$1$ = -16 ; size = 4
+_desc$1$ = -12 ; size = 4
+_node$2$ = -8 ; size = 4
+_max_code$1$ = -4 ; size = 4
+_build_tree PROC ; COMDAT
+; _s$ = ecx
+; _desc$ = edx
+
+; 620 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 10 sub esp, 16 ; 00000010H
+ 00006 8b c2 mov eax, edx
+
+; 621 : ct_data *tree = desc->dyn_tree;
+; 622 : const ct_data *stree = desc->stat_desc->static_tree;
+; 623 : int elems = desc->stat_desc->elems;
+; 624 : int n, m; /* iterate over heap elements */
+; 625 : int max_code = -1; /* largest code with non zero frequency */
+
+ 00008 83 ca ff or edx, -1
+ 0000b 53 push ebx
+ 0000c 89 45 f4 mov DWORD PTR _desc$1$[ebp], eax
+ 0000f 56 push esi
+ 00010 8b 18 mov ebx, DWORD PTR [eax]
+ 00012 8b f1 mov esi, ecx
+ 00014 8b 40 08 mov eax, DWORD PTR [eax+8]
+ 00017 57 push edi
+ 00018 89 55 fc mov DWORD PTR _max_code$1$[ebp], edx
+ 0001b 8b 08 mov ecx, DWORD PTR [eax]
+ 0001d 8b 78 0c mov edi, DWORD PTR [eax+12]
+ 00020 89 4d f0 mov DWORD PTR _stree$1$[ebp], ecx
+
+; 626 : int node; /* new node being created */
+; 627 :
+; 628 : /* Construct the initial heap, with least frequent element in
+; 629 : * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
+; 630 : * heap[0] is not used.
+; 631 : */
+; 632 : s->heap_len = 0, s->heap_max = HEAP_SIZE;
+; 633 :
+; 634 : for (n = 0; n < elems; n++) {
+
+ 00023 33 c9 xor ecx, ecx
+ 00025 89 7d f8 mov DWORD PTR _node$2$[ebp], edi
+ 00028 c7 86 50 14 00
+ 00 00 00 00 00 mov DWORD PTR [esi+5200], 0
+ 00032 c7 86 54 14 00
+ 00 3d 02 00 00 mov DWORD PTR [esi+5204], 573 ; 0000023dH
+ 0003c 85 ff test edi, edi
+ 0003e 7e 35 jle SHORT $LN22@build_tree
+$LL4@build_tree:
+
+; 635 : if (tree[n].Freq != 0) {
+
+ 00040 66 83 3c 8b 00 cmp WORD PTR [ebx+ecx*4], 0
+ 00045 74 1f je SHORT $LN13@build_tree
+
+; 636 : s->heap[++(s->heap_len)] = max_code = n;
+
+ 00047 ff 86 50 14 00
+ 00 inc DWORD PTR [esi+5200]
+ 0004d 8b d1 mov edx, ecx
+ 0004f 8b 86 50 14 00
+ 00 mov eax, DWORD PTR [esi+5200]
+ 00055 89 8c 86 5c 0b
+ 00 00 mov DWORD PTR [esi+eax*4+2908], ecx
+
+; 637 : s->depth[n] = 0;
+
+ 0005c c6 84 31 58 14
+ 00 00 00 mov BYTE PTR [ecx+esi+5208], 0
+
+; 638 : } else {
+
+ 00064 eb 07 jmp SHORT $LN2@build_tree
+$LN13@build_tree:
+
+; 639 : tree[n].Len = 0;
+
+ 00066 33 c0 xor eax, eax
+ 00068 66 89 44 8b 02 mov WORD PTR [ebx+ecx*4+2], ax
+$LN2@build_tree:
+
+; 626 : int node; /* new node being created */
+; 627 :
+; 628 : /* Construct the initial heap, with least frequent element in
+; 629 : * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
+; 630 : * heap[0] is not used.
+; 631 : */
+; 632 : s->heap_len = 0, s->heap_max = HEAP_SIZE;
+; 633 :
+; 634 : for (n = 0; n < elems; n++) {
+
+ 0006d 41 inc ecx
+ 0006e 3b cf cmp ecx, edi
+ 00070 7c ce jl SHORT $LL4@build_tree
+ 00072 89 55 fc mov DWORD PTR _max_code$1$[ebp], edx
+$LN22@build_tree:
+
+; 640 : }
+; 641 : }
+; 642 :
+; 643 : /* The pkzip format requires that at least one distance code exists,
+; 644 : * and that at least one bit should be sent even if there is only one
+; 645 : * possible code. So to avoid special checks later on we force at least
+; 646 : * two codes of non zero frequency.
+; 647 : */
+; 648 : while (s->heap_len < 2) {
+
+ 00075 83 be 50 14 00
+ 00 02 cmp DWORD PTR [esi+5200], 2
+ 0007c 7d 54 jge SHORT $LN6@build_tree
+ 0007e bf 01 00 00 00 mov edi, 1
+$LL5@build_tree:
+
+; 649 : node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0);
+
+ 00083 83 fa 02 cmp edx, 2
+ 00086 7d 05 jge SHORT $LN17@build_tree
+ 00088 42 inc edx
+ 00089 8b ca mov ecx, edx
+ 0008b eb 02 jmp SHORT $LN18@build_tree
+$LN17@build_tree:
+ 0008d 33 c9 xor ecx, ecx
+$LN18@build_tree:
+ 0008f ff 86 50 14 00
+ 00 inc DWORD PTR [esi+5200]
+ 00095 8b 86 50 14 00
+ 00 mov eax, DWORD PTR [esi+5200]
+ 0009b 89 8c 86 5c 0b
+ 00 00 mov DWORD PTR [esi+eax*4+2908], ecx
+
+; 650 : tree[node].Freq = 1;
+; 651 : s->depth[node] = 0;
+; 652 : s->opt_len--; if (stree) s->static_len -= stree[node].Len;
+
+ 000a2 8b 45 f0 mov eax, DWORD PTR _stree$1$[ebp]
+ 000a5 66 89 3c 8b mov WORD PTR [ebx+ecx*4], di
+ 000a9 c6 84 0e 58 14
+ 00 00 00 mov BYTE PTR [esi+ecx+5208], 0
+ 000b1 ff 8e a8 16 00
+ 00 dec DWORD PTR [esi+5800]
+ 000b7 85 c0 test eax, eax
+ 000b9 74 0b je SHORT $LN15@build_tree
+ 000bb 0f b7 44 88 02 movzx eax, WORD PTR [eax+ecx*4+2]
+ 000c0 29 86 ac 16 00
+ 00 sub DWORD PTR [esi+5804], eax
+$LN15@build_tree:
+
+; 640 : }
+; 641 : }
+; 642 :
+; 643 : /* The pkzip format requires that at least one distance code exists,
+; 644 : * and that at least one bit should be sent even if there is only one
+; 645 : * possible code. So to avoid special checks later on we force at least
+; 646 : * two codes of non zero frequency.
+; 647 : */
+; 648 : while (s->heap_len < 2) {
+
+ 000c6 83 be 50 14 00
+ 00 02 cmp DWORD PTR [esi+5200], 2
+ 000cd 7c b4 jl SHORT $LL5@build_tree
+ 000cf 89 55 fc mov DWORD PTR _max_code$1$[ebp], edx
+$LN6@build_tree:
+
+; 653 : /* node is 0 or 1 so it does not have extra bits */
+; 654 : }
+; 655 : desc->max_code = max_code;
+
+ 000d2 8b 45 f4 mov eax, DWORD PTR _desc$1$[ebp]
+ 000d5 89 50 04 mov DWORD PTR [eax+4], edx
+
+; 656 :
+; 657 : /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
+; 658 : * establish sub-heaps of increasing lengths:
+; 659 : */
+; 660 : for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n);
+
+ 000d8 8b 86 50 14 00
+ 00 mov eax, DWORD PTR [esi+5200]
+ 000de 99 cdq
+ 000df 2b c2 sub eax, edx
+ 000e1 8b f8 mov edi, eax
+ 000e3 d1 ff sar edi, 1
+ 000e5 83 ff 01 cmp edi, 1
+ 000e8 7c 26 jl SHORT $LL12@build_tree
+ 000ea 66 0f 1f 44 00
+ 00 npad 6
+$LL9@build_tree:
+ 000f0 57 push edi
+ 000f1 8b d3 mov edx, ebx
+ 000f3 8b ce mov ecx, esi
+ 000f5 e8 00 00 00 00 call _pqdownheap
+ 000fa 4f dec edi
+ 000fb 83 c4 04 add esp, 4
+ 000fe 83 ff 01 cmp edi, 1
+ 00101 7d ed jge SHORT $LL9@build_tree
+ 00103 0f 1f 40 00 66
+ 0f 1f 84 00 00
+ 00 00 00 npad 13
+$LL12@build_tree:
+
+; 661 :
+; 662 : /* Construct the Huffman tree by repeatedly combining the least two
+; 663 : * frequent nodes.
+; 664 : */
+; 665 : node = elems; /* next internal node of the tree */
+; 666 : do {
+; 667 : pqremove(s, tree, n); /* n = node of least frequency */
+
+ 00110 8b 86 50 14 00
+ 00 mov eax, DWORD PTR [esi+5200]
+ 00116 8b d3 mov edx, ebx
+ 00118 8b be 60 0b 00
+ 00 mov edi, DWORD PTR [esi+2912]
+ 0011e 8b ce mov ecx, esi
+ 00120 6a 01 push 1
+ 00122 8b 84 86 5c 0b
+ 00 00 mov eax, DWORD PTR [esi+eax*4+2908]
+ 00129 89 86 60 0b 00
+ 00 mov DWORD PTR [esi+2912], eax
+ 0012f ff 8e 50 14 00
+ 00 dec DWORD PTR [esi+5200]
+ 00135 e8 00 00 00 00 call _pqdownheap
+
+; 668 : m = s->heap[SMALLEST]; /* m = node of next least frequency */
+
+ 0013a 8b 8e 60 0b 00
+ 00 mov ecx, DWORD PTR [esi+2912]
+ 00140 83 c4 04 add esp, 4
+
+; 669 :
+; 670 : s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */
+
+ 00143 ff 8e 54 14 00
+ 00 dec DWORD PTR [esi+5204]
+ 00149 8b 86 54 14 00
+ 00 mov eax, DWORD PTR [esi+5204]
+
+; 671 : s->heap[--(s->heap_max)] = m;
+; 672 :
+; 673 : /* Create a new node father of n and m */
+; 674 : tree[node].Freq = tree[n].Freq + tree[m].Freq;
+
+ 0014f 8b 55 f8 mov edx, DWORD PTR _node$2$[ebp]
+ 00152 89 bc 86 5c 0b
+ 00 00 mov DWORD PTR [esi+eax*4+2908], edi
+ 00159 ff 8e 54 14 00
+ 00 dec DWORD PTR [esi+5204]
+ 0015f 8b 86 54 14 00
+ 00 mov eax, DWORD PTR [esi+5204]
+ 00165 89 8c 86 5c 0b
+ 00 00 mov DWORD PTR [esi+eax*4+2908], ecx
+ 0016c 8d 04 8b lea eax, DWORD PTR [ebx+ecx*4]
+ 0016f 89 45 f0 mov DWORD PTR tv503[ebp], eax
+ 00172 66 8b 00 mov ax, WORD PTR [eax]
+ 00175 66 03 04 bb add ax, WORD PTR [ebx+edi*4]
+ 00179 66 89 04 93 mov WORD PTR [ebx+edx*4], ax
+
+; 675 : s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ?
+
+ 0017d 8a 84 3e 58 14
+ 00 00 mov al, BYTE PTR [esi+edi+5208]
+ 00184 8a 8c 0e 58 14
+ 00 00 mov cl, BYTE PTR [esi+ecx+5208]
+ 0018b 3a c1 cmp al, cl
+ 0018d 0f b6 c0 movzx eax, al
+ 00190 73 03 jae SHORT $LN20@build_tree
+ 00192 0f b6 c1 movzx eax, cl
+$LN20@build_tree:
+
+; 676 : s->depth[n] : s->depth[m]) + 1);
+; 677 : tree[n].Dad = tree[m].Dad = (ush)node;
+
+ 00195 8b 4d f0 mov ecx, DWORD PTR tv503[ebp]
+ 00198 fe c0 inc al
+ 0019a 88 84 16 58 14
+ 00 00 mov BYTE PTR [esi+edx+5208], al
+ 001a1 0f b7 c2 movzx eax, dx
+
+; 678 : #ifdef DUMP_BL_TREE
+; 679 : if (tree == s->bl_tree) {
+; 680 : fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)",
+; 681 : node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq);
+; 682 : }
+; 683 : #endif
+; 684 : /* and insert the new node in the heap */
+; 685 : s->heap[SMALLEST] = node++;
+; 686 : pqdownheap(s, tree, SMALLEST);
+
+ 001a4 6a 01 push 1
+ 001a6 66 89 41 02 mov WORD PTR [ecx+2], ax
+ 001aa 8b ce mov ecx, esi
+ 001ac 66 89 44 bb 02 mov WORD PTR [ebx+edi*4+2], ax
+ 001b1 89 96 60 0b 00
+ 00 mov DWORD PTR [esi+2912], edx
+ 001b7 42 inc edx
+ 001b8 89 55 f8 mov DWORD PTR _node$2$[ebp], edx
+ 001bb 8b d3 mov edx, ebx
+ 001bd e8 00 00 00 00 call _pqdownheap
+ 001c2 83 c4 04 add esp, 4
+
+; 687 :
+; 688 : } while (s->heap_len >= 2);
+
+ 001c5 83 be 50 14 00
+ 00 02 cmp DWORD PTR [esi+5200], 2
+ 001cc 0f 8d 3e ff ff
+ ff jge $LL12@build_tree
+
+; 689 :
+; 690 : s->heap[--(s->heap_max)] = s->heap[SMALLEST];
+
+ 001d2 ff 8e 54 14 00
+ 00 dec DWORD PTR [esi+5204]
+ 001d8 8b be 54 14 00
+ 00 mov edi, DWORD PTR [esi+5204]
+ 001de 8b 86 60 0b 00
+ 00 mov eax, DWORD PTR [esi+2912]
+
+; 691 :
+; 692 : /* At this point, the fields freq and dad are set. We can now
+; 693 : * generate the bit lengths.
+; 694 : */
+; 695 : gen_bitlen(s, (tree_desc *)desc);
+
+ 001e4 8b 55 f4 mov edx, DWORD PTR _desc$1$[ebp]
+ 001e7 89 84 be 5c 0b
+ 00 00 mov DWORD PTR [esi+edi*4+2908], eax
+ 001ee e8 00 00 00 00 call _gen_bitlen
+
+; 696 :
+; 697 : /* The field len is now set, we can generate the bit codes */
+; 698 : gen_codes ((ct_data *)tree, max_code, s->bl_count);
+
+ 001f3 8b 55 fc mov edx, DWORD PTR _max_code$1$[ebp]
+ 001f6 81 c6 3c 0b 00
+ 00 add esi, 2876 ; 00000b3cH
+ 001fc 56 push esi
+ 001fd 8b cb mov ecx, ebx
+ 001ff e8 00 00 00 00 call _gen_codes
+ 00204 83 c4 04 add esp, 4
+ 00207 5f pop edi
+ 00208 5e pop esi
+ 00209 5b pop ebx
+
+; 699 : }
+
+ 0020a 8b e5 mov esp, ebp
+ 0020c 5d pop ebp
+ 0020d c3 ret 0
+_build_tree ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT _scan_tree
+_TEXT SEGMENT
+_s$1$ = -12 ; size = 4
+_prevlen$1$ = -8 ; size = 4
+tv326 = -4 ; size = 4
+_tree$1$ = -4 ; size = 4
+tv333 = 8 ; size = 4
+_max_code$ = 8 ; size = 4
+_scan_tree PROC ; COMDAT
+; _s$ = ecx
+; _tree$ = edx
+
+; 709 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 0c sub esp, 12 ; 0000000cH
+ 00006 53 push ebx
+ 00007 8b c2 mov eax, edx
+ 00009 89 4d f4 mov DWORD PTR _s$1$[ebp], ecx
+ 0000c 56 push esi
+
+; 710 : int n; /* iterates over all tree elements */
+; 711 : int prevlen = -1; /* last emitted length */
+; 712 : int curlen; /* length of current code */
+; 713 : int nextlen = tree[0].Len; /* length of next code */
+; 714 : int count = 0; /* repeat count of the current code */
+
+ 0000d 33 f6 xor esi, esi
+ 0000f 89 45 fc mov DWORD PTR _tree$1$[ebp], eax
+ 00012 57 push edi
+ 00013 0f b7 58 02 movzx ebx, WORD PTR [eax+2]
+ 00017 c7 45 f8 ff ff
+ ff ff mov DWORD PTR _prevlen$1$[ebp], -1
+
+; 715 : int max_count = 7; /* max repeat count */
+
+ 0001e 8d 56 07 lea edx, DWORD PTR [esi+7]
+
+; 716 : int min_count = 4; /* min repeat count */
+
+ 00021 8d 7e 04 lea edi, DWORD PTR [esi+4]
+
+; 717 :
+; 718 : if (nextlen == 0) max_count = 138, min_count = 3;
+
+ 00024 85 db test ebx, ebx
+ 00026 75 08 jne SHORT $LN5@scan_tree
+ 00028 ba 8a 00 00 00 mov edx, 138 ; 0000008aH
+ 0002d 8d 7e 03 lea edi, DWORD PTR [esi+3]
+$LN5@scan_tree:
+
+; 719 : tree[max_code+1].Len = (ush)0xffff; /* guard */
+
+ 00030 8b 45 08 mov eax, DWORD PTR _max_code$[ebp]
+ 00033 be ff ff 00 00 mov esi, 65535 ; 0000ffffH
+ 00038 8b 4d fc mov ecx, DWORD PTR _tree$1$[ebp]
+ 0003b 66 89 74 81 06 mov WORD PTR [ecx+eax*4+6], si
+
+; 720 :
+; 721 : for (n = 0; n <= max_code; n++) {
+
+ 00040 be 00 00 00 00 mov esi, 0
+ 00045 8b 4d f4 mov ecx, DWORD PTR _s$1$[ebp]
+ 00048 85 c0 test eax, eax
+ 0004a 0f 88 95 00 00
+ 00 js $LN3@scan_tree
+
+; 719 : tree[max_code+1].Len = (ush)0xffff; /* guard */
+
+ 00050 8b 45 fc mov eax, DWORD PTR _tree$1$[ebp]
+ 00053 83 c0 06 add eax, 6
+ 00056 89 45 fc mov DWORD PTR tv326[ebp], eax
+ 00059 8b 45 08 mov eax, DWORD PTR _max_code$[ebp]
+ 0005c 40 inc eax
+ 0005d 89 45 08 mov DWORD PTR tv333[ebp], eax
+$LL4@scan_tree:
+
+; 722 : curlen = nextlen; nextlen = tree[n+1].Len;
+
+ 00060 8b c3 mov eax, ebx
+
+; 723 : if (++count < max_count && curlen == nextlen) {
+
+ 00062 46 inc esi
+ 00063 8b 5d fc mov ebx, DWORD PTR tv326[ebp]
+ 00066 0f b7 1b movzx ebx, WORD PTR [ebx]
+ 00069 3b f2 cmp esi, edx
+ 0006b 7d 04 jge SHORT $LN6@scan_tree
+ 0006d 3b c3 cmp eax, ebx
+ 0006f 74 66 je SHORT $LN2@scan_tree
+$LN6@scan_tree:
+
+; 724 : continue;
+; 725 : } else if (count < min_count) {
+
+ 00071 3b f7 cmp esi, edi
+ 00073 7d 0a jge SHORT $LN8@scan_tree
+
+; 726 : s->bl_tree[curlen].Freq += count;
+
+ 00075 66 01 b4 81 7c
+ 0a 00 00 add WORD PTR [ecx+eax*4+2684], si
+ 0007d eb 2f jmp SHORT $LN14@scan_tree
+$LN8@scan_tree:
+
+; 727 : } else if (curlen != 0) {
+
+ 0007f 85 c0 test eax, eax
+ 00081 74 16 je SHORT $LN10@scan_tree
+
+; 728 : if (curlen != prevlen) s->bl_tree[curlen].Freq++;
+
+ 00083 3b 45 f8 cmp eax, DWORD PTR _prevlen$1$[ebp]
+ 00086 74 08 je SHORT $LN12@scan_tree
+ 00088 66 ff 84 81 7c
+ 0a 00 00 inc WORD PTR [ecx+eax*4+2684]
+$LN12@scan_tree:
+
+; 729 : s->bl_tree[REP_3_6].Freq++;
+
+ 00090 66 ff 81 bc 0a
+ 00 00 inc WORD PTR [ecx+2748]
+ 00097 eb 15 jmp SHORT $LN14@scan_tree
+$LN10@scan_tree:
+
+; 730 : } else if (count <= 10) {
+
+ 00099 83 fe 0a cmp esi, 10 ; 0000000aH
+ 0009c 7f 09 jg SHORT $LN13@scan_tree
+
+; 731 : s->bl_tree[REPZ_3_10].Freq++;
+
+ 0009e 66 ff 81 c0 0a
+ 00 00 inc WORD PTR [ecx+2752]
+
+; 732 : } else {
+
+ 000a5 eb 07 jmp SHORT $LN14@scan_tree
+$LN13@scan_tree:
+
+; 733 : s->bl_tree[REPZ_11_138].Freq++;
+
+ 000a7 66 ff 81 c4 0a
+ 00 00 inc WORD PTR [ecx+2756]
+$LN14@scan_tree:
+
+; 734 : }
+; 735 : count = 0; prevlen = curlen;
+
+ 000ae 33 f6 xor esi, esi
+ 000b0 89 45 f8 mov DWORD PTR _prevlen$1$[ebp], eax
+
+; 736 : if (nextlen == 0) {
+
+ 000b3 85 db test ebx, ebx
+ 000b5 75 0a jne SHORT $LN15@scan_tree
+
+; 737 : max_count = 138, min_count = 3;
+
+ 000b7 ba 8a 00 00 00 mov edx, 138 ; 0000008aH
+ 000bc 8d 7e 03 lea edi, DWORD PTR [esi+3]
+ 000bf eb 16 jmp SHORT $LN2@scan_tree
+$LN15@scan_tree:
+
+; 738 : } else if (curlen == nextlen) {
+
+ 000c1 3b c3 cmp eax, ebx
+ 000c3 75 0a jne SHORT $LN17@scan_tree
+
+; 739 : max_count = 6, min_count = 3;
+
+ 000c5 ba 06 00 00 00 mov edx, 6
+ 000ca 8d 7a fd lea edi, DWORD PTR [edx-3]
+
+; 740 : } else {
+
+ 000cd eb 08 jmp SHORT $LN2@scan_tree
+$LN17@scan_tree:
+
+; 741 : max_count = 7, min_count = 4;
+
+ 000cf ba 07 00 00 00 mov edx, 7
+ 000d4 8d 7a fd lea edi, DWORD PTR [edx-3]
+$LN2@scan_tree:
+
+; 720 :
+; 721 : for (n = 0; n <= max_code; n++) {
+
+ 000d7 83 45 fc 04 add DWORD PTR tv326[ebp], 4
+ 000db 83 6d 08 01 sub DWORD PTR tv333[ebp], 1
+ 000df 0f 85 7b ff ff
+ ff jne $LL4@scan_tree
+$LN3@scan_tree:
+ 000e5 5f pop edi
+ 000e6 5e pop esi
+ 000e7 5b pop ebx
+
+; 742 : }
+; 743 : }
+; 744 : }
+
+ 000e8 8b e5 mov esp, ebp
+ 000ea 5d pop ebp
+ 000eb c3 ret 0
+_scan_tree ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT _send_tree
+_TEXT SEGMENT
+tv1077 = -28 ; size = 4
+_len$1$ = -28 ; size = 4
+_len$1$ = -28 ; size = 4
+_len$1$ = -28 ; size = 4
+_len$1$ = -28 ; size = 4
+tv1063 = -24 ; size = 4
+_len$1$ = -20 ; size = 4
+tv1078 = -16 ; size = 4
+_tree$1$ = -16 ; size = 4
+_curlen$1$ = -12 ; size = 4
+_s$1$ = -8 ; size = 4
+tv1032 = -4 ; size = 4
+_nextlen$1$ = 8 ; size = 4
+_max_code$ = 8 ; size = 4
+_send_tree PROC ; COMDAT
+; _s$ = ecx
+; _tree$ = edx
+
+; 754 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 1c sub esp, 28 ; 0000001cH
+ 00006 53 push ebx
+ 00007 8b da mov ebx, edx
+ 00009 89 4d f8 mov DWORD PTR _s$1$[ebp], ecx
+
+; 755 : int n; /* iterates over all tree elements */
+; 756 : int prevlen = -1; /* last emitted length */
+
+ 0000c 83 ca ff or edx, -1
+ 0000f 89 5d f0 mov DWORD PTR _tree$1$[ebp], ebx
+ 00012 56 push esi
+ 00013 57 push edi
+
+; 757 : int curlen; /* length of current code */
+; 758 : int nextlen = tree[0].Len; /* length of next code */
+
+ 00014 0f b7 4b 02 movzx ecx, WORD PTR [ebx+2]
+
+; 759 : int count = 0; /* repeat count of the current code */
+
+ 00018 33 db xor ebx, ebx
+
+; 760 : int max_count = 7; /* max repeat count */
+
+ 0001a 8d 7a 08 lea edi, DWORD PTR [edx+8]
+
+; 761 : int min_count = 4; /* min repeat count */
+
+ 0001d 8d 72 05 lea esi, DWORD PTR [edx+5]
+
+; 762 :
+; 763 : /* tree[max_code+1].Len = -1; */ /* guard already set */
+; 764 : if (nextlen == 0) max_count = 138, min_count = 3;
+
+ 00020 85 c9 test ecx, ecx
+ 00022 75 08 jne SHORT $LN8@send_tree
+ 00024 bf 8a 00 00 00 mov edi, 138 ; 0000008aH
+ 00029 8d 72 04 lea esi, DWORD PTR [edx+4]
+$LN8@send_tree:
+
+; 765 :
+; 766 : for (n = 0; n <= max_code; n++) {
+
+ 0002c 39 5d 08 cmp DWORD PTR _max_code$[ebp], ebx
+ 0002f 0f 8c d9 04 00
+ 00 jl $LN3@send_tree
+ 00035 8b 45 f0 mov eax, DWORD PTR _tree$1$[ebp]
+ 00038 83 c0 06 add eax, 6
+ 0003b 89 45 fc mov DWORD PTR tv1032[ebp], eax
+ 0003e 8b 45 08 mov eax, DWORD PTR _max_code$[ebp]
+ 00041 40 inc eax
+ 00042 89 45 f0 mov DWORD PTR tv1078[ebp], eax
+$LL4@send_tree:
+
+; 767 : curlen = nextlen; nextlen = tree[n+1].Len;
+
+ 00045 8b 45 fc mov eax, DWORD PTR tv1032[ebp]
+
+; 768 : if (++count < max_count && curlen == nextlen) {
+
+ 00048 43 inc ebx
+ 00049 89 4d f4 mov DWORD PTR _curlen$1$[ebp], ecx
+ 0004c 0f b7 08 movzx ecx, WORD PTR [eax]
+ 0004f 8b 45 f8 mov eax, DWORD PTR _s$1$[ebp]
+ 00052 89 4d 08 mov DWORD PTR _nextlen$1$[ebp], ecx
+ 00055 8b 4d f4 mov ecx, DWORD PTR _curlen$1$[ebp]
+ 00058 3b df cmp ebx, edi
+ 0005a 7d 09 jge SHORT $LN9@send_tree
+ 0005c 3b 4d 08 cmp ecx, DWORD PTR _nextlen$1$[ebp]
+ 0005f 0f 84 98 04 00
+ 00 je $LN2@send_tree
+$LN9@send_tree:
+
+; 769 : continue;
+; 770 : } else if (count < min_count) {
+
+ 00065 3b de cmp ebx, esi
+ 00067 0f 8d b9 00 00
+ 00 jge $LN11@send_tree
+ 0006d 8d 14 8d 7e 0a
+ 00 00 lea edx, DWORD PTR [ecx*4+2686]
+ 00074 8d b9 9f 02 00
+ 00 lea edi, DWORD PTR [ecx+671]
+ 0007a 03 d0 add edx, eax
+ 0007c 8d 3c b8 lea edi, DWORD PTR [eax+edi*4]
+ 0007f 89 55 e4 mov DWORD PTR tv1077[ebp], edx
+ 00082 89 7d e8 mov DWORD PTR tv1063[ebp], edi
+ 00085 66 66 66 0f 1f
+ 84 00 00 00 00
+ 00 npad 11
+$LL7@send_tree:
+
+; 771 : do { send_code(s, curlen, s->bl_tree); } while (--count != 0);
+
+ 00090 0f b7 32 movzx esi, WORD PTR [edx]
+ 00093 ba 10 00 00 00 mov edx, 16 ; 00000010H
+ 00098 8b 88 bc 16 00
+ 00 mov ecx, DWORD PTR [eax+5820]
+ 0009e 2b d6 sub edx, esi
+ 000a0 89 75 ec mov DWORD PTR _len$1$[ebp], esi
+ 000a3 3b ca cmp ecx, edx
+ 000a5 7e 59 jle SHORT $LN13@send_tree
+ 000a7 0f b7 3f movzx edi, WORD PTR [edi]
+ 000aa 8b 70 08 mov esi, DWORD PTR [eax+8]
+ 000ad 66 8b d7 mov dx, di
+ 000b0 66 d3 e2 shl dx, cl
+ 000b3 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 000ba 8b 50 14 mov edx, DWORD PTR [eax+20]
+ 000bd 0f b6 88 b8 16
+ 00 00 movzx ecx, BYTE PTR [eax+5816]
+ 000c4 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 000c7 ff 40 14 inc DWORD PTR [eax+20]
+ 000ca 8b 70 14 mov esi, DWORD PTR [eax+20]
+ 000cd 8b 50 08 mov edx, DWORD PTR [eax+8]
+ 000d0 0f b6 88 b9 16
+ 00 00 movzx ecx, BYTE PTR [eax+5817]
+ 000d7 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 000da b1 10 mov cl, 16 ; 00000010H
+ 000dc 2a 88 bc 16 00
+ 00 sub cl, BYTE PTR [eax+5820]
+ 000e2 ff 40 14 inc DWORD PTR [eax+20]
+ 000e5 66 d3 ef shr di, cl
+ 000e8 8b 4d ec mov ecx, DWORD PTR _len$1$[ebp]
+ 000eb 83 c1 f0 add ecx, -16 ; fffffff0H
+ 000ee 66 89 b8 b8 16
+ 00 00 mov WORD PTR [eax+5816], di
+ 000f5 01 88 bc 16 00
+ 00 add DWORD PTR [eax+5820], ecx
+ 000fb 8b 7d e8 mov edi, DWORD PTR tv1063[ebp]
+ 000fe eb 15 jmp SHORT $LN5@send_tree
+$LN13@send_tree:
+ 00100 66 8b 17 mov dx, WORD PTR [edi]
+ 00103 66 d3 e2 shl dx, cl
+ 00106 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 0010d 03 ce add ecx, esi
+ 0010f 89 88 bc 16 00
+ 00 mov DWORD PTR [eax+5820], ecx
+$LN5@send_tree:
+ 00115 8b 55 e4 mov edx, DWORD PTR tv1077[ebp]
+ 00118 83 eb 01 sub ebx, 1
+ 0011b 0f 85 6f ff ff
+ ff jne $LL7@send_tree
+
+; 772 :
+; 773 : } else if (curlen != 0) {
+
+ 00121 e9 a9 03 00 00 jmp $LN33@send_tree
+$LN11@send_tree:
+ 00126 85 c9 test ecx, ecx
+ 00128 0f 84 a1 01 00
+ 00 je $LN15@send_tree
+
+; 774 : if (curlen != prevlen) {
+
+ 0012e 3b ca cmp ecx, edx
+ 00130 0f 84 97 00 00
+ 00 je $LN17@send_tree
+
+; 775 : send_code(s, curlen, s->bl_tree); count--;
+
+ 00136 0f b7 bc 88 7e
+ 0a 00 00 movzx edi, WORD PTR [eax+ecx*4+2686]
+ 0013e ba 10 00 00 00 mov edx, 16 ; 00000010H
+ 00143 8b b0 bc 16 00
+ 00 mov esi, DWORD PTR [eax+5820]
+ 00149 2b d7 sub edx, edi
+ 0014b 89 7d e4 mov DWORD PTR _len$1$[ebp], edi
+ 0014e 3b f2 cmp esi, edx
+ 00150 7e 5d jle SHORT $LN18@send_tree
+ 00152 0f b7 bc 88 7c
+ 0a 00 00 movzx edi, WORD PTR [eax+ecx*4+2684]
+ 0015a 8b ce mov ecx, esi
+ 0015c 8b 70 08 mov esi, DWORD PTR [eax+8]
+ 0015f 66 8b d7 mov dx, di
+ 00162 66 d3 e2 shl dx, cl
+ 00165 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 0016c 8b 50 14 mov edx, DWORD PTR [eax+20]
+ 0016f 0f b6 88 b8 16
+ 00 00 movzx ecx, BYTE PTR [eax+5816]
+ 00176 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 00179 ff 40 14 inc DWORD PTR [eax+20]
+ 0017c 8b 70 14 mov esi, DWORD PTR [eax+20]
+ 0017f 8b 50 08 mov edx, DWORD PTR [eax+8]
+ 00182 0f b6 88 b9 16
+ 00 00 movzx ecx, BYTE PTR [eax+5817]
+ 00189 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 0018c b1 10 mov cl, 16 ; 00000010H
+ 0018e 2a 88 bc 16 00
+ 00 sub cl, BYTE PTR [eax+5820]
+ 00194 ff 40 14 inc DWORD PTR [eax+20]
+ 00197 66 d3 ef shr di, cl
+ 0019a 8b 4d e4 mov ecx, DWORD PTR _len$1$[ebp]
+ 0019d 83 c1 f0 add ecx, -16 ; fffffff0H
+ 001a0 66 89 b8 b8 16
+ 00 00 mov WORD PTR [eax+5816], di
+ 001a7 01 88 bc 16 00
+ 00 add DWORD PTR [eax+5820], ecx
+ 001ad eb 1d jmp SHORT $LN19@send_tree
+$LN18@send_tree:
+ 001af 66 8b 94 88 7c
+ 0a 00 00 mov dx, WORD PTR [eax+ecx*4+2684]
+ 001b7 8b ce mov ecx, esi
+ 001b9 66 d3 e2 shl dx, cl
+ 001bc 8d 0c 3e lea ecx, DWORD PTR [esi+edi]
+ 001bf 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 001c6 89 88 bc 16 00
+ 00 mov DWORD PTR [eax+5820], ecx
+$LN19@send_tree:
+ 001cc 4b dec ebx
+$LN17@send_tree:
+
+; 776 : }
+; 777 : Assert(count >= 3 && count <= 6, " 3_6?");
+; 778 : send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2);
+
+ 001cd 0f b7 b0 be 0a
+ 00 00 movzx esi, WORD PTR [eax+2750]
+ 001d4 ba 10 00 00 00 mov edx, 16 ; 00000010H
+ 001d9 8b 88 bc 16 00
+ 00 mov ecx, DWORD PTR [eax+5820]
+ 001df 2b d6 sub edx, esi
+ 001e1 89 75 e4 mov DWORD PTR _len$1$[ebp], esi
+ 001e4 3b ca cmp ecx, edx
+ 001e6 7e 5a jle SHORT $LN20@send_tree
+ 001e8 0f b7 b8 bc 0a
+ 00 00 movzx edi, WORD PTR [eax+2748]
+ 001ef 8b 70 08 mov esi, DWORD PTR [eax+8]
+ 001f2 66 8b d7 mov dx, di
+ 001f5 66 d3 e2 shl dx, cl
+ 001f8 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 001ff 8b 50 14 mov edx, DWORD PTR [eax+20]
+ 00202 0f b6 88 b8 16
+ 00 00 movzx ecx, BYTE PTR [eax+5816]
+ 00209 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 0020c ff 40 14 inc DWORD PTR [eax+20]
+ 0020f 8b 70 14 mov esi, DWORD PTR [eax+20]
+ 00212 8b 50 08 mov edx, DWORD PTR [eax+8]
+ 00215 0f b6 88 b9 16
+ 00 00 movzx ecx, BYTE PTR [eax+5817]
+ 0021c 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 0021f b1 10 mov cl, 16 ; 00000010H
+ 00221 2a 88 bc 16 00
+ 00 sub cl, BYTE PTR [eax+5820]
+ 00227 ff 40 14 inc DWORD PTR [eax+20]
+ 0022a 66 d3 ef shr di, cl
+ 0022d 8b 4d e4 mov ecx, DWORD PTR _len$1$[ebp]
+ 00230 83 c1 f0 add ecx, -16 ; fffffff0H
+ 00233 66 89 b8 b8 16
+ 00 00 mov WORD PTR [eax+5816], di
+ 0023a 01 88 bc 16 00
+ 00 add DWORD PTR [eax+5820], ecx
+ 00240 eb 19 jmp SHORT $LN21@send_tree
+$LN20@send_tree:
+ 00242 66 8b 90 bc 0a
+ 00 00 mov dx, WORD PTR [eax+2748]
+ 00249 66 d3 e2 shl dx, cl
+ 0024c 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 00253 03 ce add ecx, esi
+ 00255 89 88 bc 16 00
+ 00 mov DWORD PTR [eax+5820], ecx
+$LN21@send_tree:
+ 0025b 8b 88 bc 16 00
+ 00 mov ecx, DWORD PTR [eax+5820]
+ 00261 83 f9 0e cmp ecx, 14 ; 0000000eH
+ 00264 7e 54 jle SHORT $LN22@send_tree
+ 00266 8b 70 08 mov esi, DWORD PTR [eax+8]
+ 00269 8d 7b fd lea edi, DWORD PTR [ebx-3]
+ 0026c 66 8b d7 mov dx, di
+ 0026f 66 d3 e2 shl dx, cl
+ 00272 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 00279 8b 50 14 mov edx, DWORD PTR [eax+20]
+ 0027c 0f b6 88 b8 16
+ 00 00 movzx ecx, BYTE PTR [eax+5816]
+ 00283 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 00286 ff 40 14 inc DWORD PTR [eax+20]
+ 00289 8b 70 14 mov esi, DWORD PTR [eax+20]
+ 0028c 8b 50 08 mov edx, DWORD PTR [eax+8]
+ 0028f 0f b6 88 b9 16
+ 00 00 movzx ecx, BYTE PTR [eax+5817]
+ 00296 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 00299 b1 10 mov cl, 16 ; 00000010H
+ 0029b 2a 88 bc 16 00
+ 00 sub cl, BYTE PTR [eax+5820]
+ 002a1 ff 40 14 inc DWORD PTR [eax+20]
+ 002a4 66 d3 ef shr di, cl
+ 002a7 83 80 bc 16 00
+ 00 f2 add DWORD PTR [eax+5820], -14 ; fffffff2H
+ 002ae 66 89 b8 b8 16
+ 00 00 mov WORD PTR [eax+5816], di
+ 002b5 e9 15 02 00 00 jmp $LN33@send_tree
+$LN22@send_tree:
+ 002ba 8d 53 fd lea edx, DWORD PTR [ebx-3]
+ 002bd 66 d3 e2 shl dx, cl
+ 002c0 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 002c7 83 c1 02 add ecx, 2
+ 002ca e9 fa 01 00 00 jmp $LN46@send_tree
+$LN15@send_tree:
+
+; 779 :
+; 780 : } else if (count <= 10) {
+; 781 : send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3);
+
+ 002cf 8b 88 bc 16 00
+ 00 mov ecx, DWORD PTR [eax+5820]
+ 002d5 ba 10 00 00 00 mov edx, 16 ; 00000010H
+ 002da 83 fb 0a cmp ebx, 10 ; 0000000aH
+ 002dd 0f 8f f7 00 00
+ 00 jg $LN24@send_tree
+ 002e3 0f b7 b0 c2 0a
+ 00 00 movzx esi, WORD PTR [eax+2754]
+ 002ea 2b d6 sub edx, esi
+ 002ec 89 75 e4 mov DWORD PTR _len$1$[ebp], esi
+ 002ef 3b ca cmp ecx, edx
+ 002f1 7e 5a jle SHORT $LN26@send_tree
+ 002f3 0f b7 b8 c0 0a
+ 00 00 movzx edi, WORD PTR [eax+2752]
+ 002fa 8b 70 08 mov esi, DWORD PTR [eax+8]
+ 002fd 66 8b d7 mov dx, di
+ 00300 66 d3 e2 shl dx, cl
+ 00303 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 0030a 8b 50 14 mov edx, DWORD PTR [eax+20]
+ 0030d 0f b6 88 b8 16
+ 00 00 movzx ecx, BYTE PTR [eax+5816]
+ 00314 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 00317 ff 40 14 inc DWORD PTR [eax+20]
+ 0031a 8b 70 14 mov esi, DWORD PTR [eax+20]
+ 0031d 8b 50 08 mov edx, DWORD PTR [eax+8]
+ 00320 0f b6 88 b9 16
+ 00 00 movzx ecx, BYTE PTR [eax+5817]
+ 00327 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 0032a b1 10 mov cl, 16 ; 00000010H
+ 0032c 2a 88 bc 16 00
+ 00 sub cl, BYTE PTR [eax+5820]
+ 00332 ff 40 14 inc DWORD PTR [eax+20]
+ 00335 66 d3 ef shr di, cl
+ 00338 8b 4d e4 mov ecx, DWORD PTR _len$1$[ebp]
+ 0033b 83 c1 f0 add ecx, -16 ; fffffff0H
+ 0033e 66 89 b8 b8 16
+ 00 00 mov WORD PTR [eax+5816], di
+ 00345 01 88 bc 16 00
+ 00 add DWORD PTR [eax+5820], ecx
+ 0034b eb 19 jmp SHORT $LN27@send_tree
+$LN26@send_tree:
+ 0034d 66 8b 90 c0 0a
+ 00 00 mov dx, WORD PTR [eax+2752]
+ 00354 66 d3 e2 shl dx, cl
+ 00357 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 0035e 03 ce add ecx, esi
+ 00360 89 88 bc 16 00
+ 00 mov DWORD PTR [eax+5820], ecx
+$LN27@send_tree:
+ 00366 8b 88 bc 16 00
+ 00 mov ecx, DWORD PTR [eax+5820]
+ 0036c 83 f9 0d cmp ecx, 13 ; 0000000dH
+ 0036f 7e 54 jle SHORT $LN28@send_tree
+ 00371 8b 70 08 mov esi, DWORD PTR [eax+8]
+ 00374 8d 7b fd lea edi, DWORD PTR [ebx-3]
+ 00377 66 8b d7 mov dx, di
+ 0037a 66 d3 e2 shl dx, cl
+ 0037d 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 00384 8b 50 14 mov edx, DWORD PTR [eax+20]
+ 00387 0f b6 88 b8 16
+ 00 00 movzx ecx, BYTE PTR [eax+5816]
+ 0038e 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 00391 ff 40 14 inc DWORD PTR [eax+20]
+ 00394 8b 70 14 mov esi, DWORD PTR [eax+20]
+ 00397 8b 50 08 mov edx, DWORD PTR [eax+8]
+ 0039a 0f b6 88 b9 16
+ 00 00 movzx ecx, BYTE PTR [eax+5817]
+ 003a1 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 003a4 b1 10 mov cl, 16 ; 00000010H
+ 003a6 2a 88 bc 16 00
+ 00 sub cl, BYTE PTR [eax+5820]
+ 003ac ff 40 14 inc DWORD PTR [eax+20]
+ 003af 66 d3 ef shr di, cl
+ 003b2 83 80 bc 16 00
+ 00 f3 add DWORD PTR [eax+5820], -13 ; fffffff3H
+ 003b9 66 89 b8 b8 16
+ 00 00 mov WORD PTR [eax+5816], di
+ 003c0 e9 0a 01 00 00 jmp $LN33@send_tree
+$LN28@send_tree:
+ 003c5 8d 53 fd lea edx, DWORD PTR [ebx-3]
+ 003c8 66 d3 e2 shl dx, cl
+ 003cb 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 003d2 83 c1 03 add ecx, 3
+
+; 782 :
+; 783 : } else {
+
+ 003d5 e9 ef 00 00 00 jmp $LN46@send_tree
+$LN24@send_tree:
+
+; 784 : send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7);
+
+ 003da 0f b7 b0 c6 0a
+ 00 00 movzx esi, WORD PTR [eax+2758]
+ 003e1 2b d6 sub edx, esi
+ 003e3 89 75 e4 mov DWORD PTR _len$1$[ebp], esi
+ 003e6 3b ca cmp ecx, edx
+ 003e8 7e 5a jle SHORT $LN30@send_tree
+ 003ea 0f b7 b8 c4 0a
+ 00 00 movzx edi, WORD PTR [eax+2756]
+ 003f1 8b 70 08 mov esi, DWORD PTR [eax+8]
+ 003f4 66 8b d7 mov dx, di
+ 003f7 66 d3 e2 shl dx, cl
+ 003fa 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 00401 8b 50 14 mov edx, DWORD PTR [eax+20]
+ 00404 0f b6 88 b8 16
+ 00 00 movzx ecx, BYTE PTR [eax+5816]
+ 0040b 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 0040e ff 40 14 inc DWORD PTR [eax+20]
+ 00411 8b 70 14 mov esi, DWORD PTR [eax+20]
+ 00414 8b 50 08 mov edx, DWORD PTR [eax+8]
+ 00417 0f b6 88 b9 16
+ 00 00 movzx ecx, BYTE PTR [eax+5817]
+ 0041e 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 00421 b1 10 mov cl, 16 ; 00000010H
+ 00423 2a 88 bc 16 00
+ 00 sub cl, BYTE PTR [eax+5820]
+ 00429 ff 40 14 inc DWORD PTR [eax+20]
+ 0042c 66 d3 ef shr di, cl
+ 0042f 8b 4d e4 mov ecx, DWORD PTR _len$1$[ebp]
+ 00432 83 c1 f0 add ecx, -16 ; fffffff0H
+ 00435 66 89 b8 b8 16
+ 00 00 mov WORD PTR [eax+5816], di
+ 0043c 01 88 bc 16 00
+ 00 add DWORD PTR [eax+5820], ecx
+ 00442 eb 19 jmp SHORT $LN31@send_tree
+$LN30@send_tree:
+ 00444 66 8b 90 c4 0a
+ 00 00 mov dx, WORD PTR [eax+2756]
+ 0044b 66 d3 e2 shl dx, cl
+ 0044e 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 00455 03 ce add ecx, esi
+ 00457 89 88 bc 16 00
+ 00 mov DWORD PTR [eax+5820], ecx
+$LN31@send_tree:
+ 0045d 8b 88 bc 16 00
+ 00 mov ecx, DWORD PTR [eax+5820]
+ 00463 83 f9 09 cmp ecx, 9
+ 00466 7e 51 jle SHORT $LN32@send_tree
+ 00468 8b 70 08 mov esi, DWORD PTR [eax+8]
+ 0046b 8d 7b f5 lea edi, DWORD PTR [ebx-11]
+ 0046e 66 8b d7 mov dx, di
+ 00471 66 d3 e2 shl dx, cl
+ 00474 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 0047b 8b 50 14 mov edx, DWORD PTR [eax+20]
+ 0047e 0f b6 88 b8 16
+ 00 00 movzx ecx, BYTE PTR [eax+5816]
+ 00485 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 00488 ff 40 14 inc DWORD PTR [eax+20]
+ 0048b 8b 70 14 mov esi, DWORD PTR [eax+20]
+ 0048e 8b 50 08 mov edx, DWORD PTR [eax+8]
+ 00491 0f b6 88 b9 16
+ 00 00 movzx ecx, BYTE PTR [eax+5817]
+ 00498 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 0049b b1 10 mov cl, 16 ; 00000010H
+ 0049d 2a 88 bc 16 00
+ 00 sub cl, BYTE PTR [eax+5820]
+ 004a3 ff 40 14 inc DWORD PTR [eax+20]
+ 004a6 66 d3 ef shr di, cl
+ 004a9 83 80 bc 16 00
+ 00 f7 add DWORD PTR [eax+5820], -9 ; fffffff7H
+ 004b0 66 89 b8 b8 16
+ 00 00 mov WORD PTR [eax+5816], di
+ 004b7 eb 16 jmp SHORT $LN33@send_tree
+$LN32@send_tree:
+ 004b9 8d 53 f5 lea edx, DWORD PTR [ebx-11]
+ 004bc 66 d3 e2 shl dx, cl
+ 004bf 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 004c6 83 c1 07 add ecx, 7
+$LN46@send_tree:
+ 004c9 89 88 bc 16 00
+ 00 mov DWORD PTR [eax+5820], ecx
+$LN33@send_tree:
+
+; 785 : }
+; 786 : count = 0; prevlen = curlen;
+; 787 : if (nextlen == 0) {
+
+ 004cf 8b 75 08 mov esi, DWORD PTR _nextlen$1$[ebp]
+ 004d2 33 db xor ebx, ebx
+ 004d4 8b 4d f4 mov ecx, DWORD PTR _curlen$1$[ebp]
+ 004d7 8b d1 mov edx, ecx
+ 004d9 85 f6 test esi, esi
+ 004db 75 0a jne SHORT $LN34@send_tree
+
+; 788 : max_count = 138, min_count = 3;
+
+ 004dd bf 8a 00 00 00 mov edi, 138 ; 0000008aH
+ 004e2 8d 73 03 lea esi, DWORD PTR [ebx+3]
+ 004e5 eb 16 jmp SHORT $LN2@send_tree
+$LN34@send_tree:
+
+; 789 : } else if (curlen == nextlen) {
+
+ 004e7 3b ce cmp ecx, esi
+ 004e9 75 0a jne SHORT $LN36@send_tree
+
+; 790 : max_count = 6, min_count = 3;
+
+ 004eb bf 06 00 00 00 mov edi, 6
+ 004f0 8d 77 fd lea esi, DWORD PTR [edi-3]
+
+; 791 : } else {
+
+ 004f3 eb 08 jmp SHORT $LN2@send_tree
+$LN36@send_tree:
+
+; 792 : max_count = 7, min_count = 4;
+
+ 004f5 bf 07 00 00 00 mov edi, 7
+ 004fa 8d 77 fd lea esi, DWORD PTR [edi-3]
+$LN2@send_tree:
+
+; 765 :
+; 766 : for (n = 0; n <= max_code; n++) {
+
+ 004fd 83 45 fc 04 add DWORD PTR tv1032[ebp], 4
+ 00501 83 6d f0 01 sub DWORD PTR tv1078[ebp], 1
+ 00505 8b 4d 08 mov ecx, DWORD PTR _nextlen$1$[ebp]
+ 00508 0f 85 37 fb ff
+ ff jne $LL4@send_tree
+$LN3@send_tree:
+ 0050e 5f pop edi
+ 0050f 5e pop esi
+ 00510 5b pop ebx
+
+; 793 : }
+; 794 : }
+; 795 : }
+
+ 00511 8b e5 mov esp, ebp
+ 00513 5d pop ebp
+ 00514 c3 ret 0
+_send_tree ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT _build_bl_tree
+_TEXT SEGMENT
+_build_bl_tree PROC ; COMDAT
+; _s$ = ecx
+
+; 803 : {
+
+ 00000 56 push esi
+ 00001 8b f1 mov esi, ecx
+
+; 804 : int max_blindex; /* index of last bit length code of non zero freq */
+; 805 :
+; 806 : /* Determine the bit length frequencies for literal and distance trees */
+; 807 : scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code);
+
+ 00003 ff b6 1c 0b 00
+ 00 push DWORD PTR [esi+2844]
+ 00009 8d 96 94 00 00
+ 00 lea edx, DWORD PTR [esi+148]
+ 0000f e8 00 00 00 00 call _scan_tree
+
+; 808 : scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code);
+
+ 00014 ff b6 28 0b 00
+ 00 push DWORD PTR [esi+2856]
+ 0001a 8d 96 88 09 00
+ 00 lea edx, DWORD PTR [esi+2440]
+ 00020 8b ce mov ecx, esi
+ 00022 e8 00 00 00 00 call _scan_tree
+ 00027 83 c4 08 add esp, 8
+
+; 809 :
+; 810 : /* Build the bit length tree: */
+; 811 : build_tree(s, (tree_desc *)(&(s->bl_desc)));
+
+ 0002a 8d 96 30 0b 00
+ 00 lea edx, DWORD PTR [esi+2864]
+ 00030 8b ce mov ecx, esi
+ 00032 e8 00 00 00 00 call _build_tree
+
+; 812 : /* opt_len now includes the length of the tree representations, except
+; 813 : * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
+; 814 : */
+; 815 :
+; 816 : /* Determine the number of bit length codes to send. The pkzip format
+; 817 : * requires that at least 4 bit length codes be sent. (appnote.txt says
+; 818 : * 3 but the actual value used is 4.)
+; 819 : */
+; 820 : for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
+
+ 00037 b8 12 00 00 00 mov eax, 18 ; 00000012H
+ 0003c 0f 1f 40 00 npad 4
+$LL4@build_bl_t:
+
+; 821 : if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
+
+ 00040 0f b6 88 00 00
+ 00 00 movzx ecx, BYTE PTR _bl_order[eax]
+ 00047 66 83 bc 8e 7e
+ 0a 00 00 00 cmp WORD PTR [esi+ecx*4+2686], 0
+ 00050 75 78 jne SHORT $LN8@build_bl_t
+ 00052 0f b6 88 ff ff
+ ff ff movzx ecx, BYTE PTR _bl_order[eax-1]
+ 00059 66 83 bc 8e 7e
+ 0a 00 00 00 cmp WORD PTR [esi+ecx*4+2686], 0
+ 00062 75 65 jne SHORT $LN11@build_bl_t
+ 00064 0f b6 88 fe ff
+ ff ff movzx ecx, BYTE PTR _bl_order[eax-2]
+ 0006b 66 83 bc 8e 7e
+ 0a 00 00 00 cmp WORD PTR [esi+ecx*4+2686], 0
+ 00074 75 3f jne SHORT $LN12@build_bl_t
+ 00076 0f b6 88 fd ff
+ ff ff movzx ecx, BYTE PTR _bl_order[eax-3]
+ 0007d 66 83 bc 8e 7e
+ 0a 00 00 00 cmp WORD PTR [esi+ecx*4+2686], 0
+ 00086 75 19 jne SHORT $LN13@build_bl_t
+
+; 812 : /* opt_len now includes the length of the tree representations, except
+; 813 : * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
+; 814 : */
+; 815 :
+; 816 : /* Determine the number of bit length codes to send. The pkzip format
+; 817 : * requires that at least 4 bit length codes be sent. (appnote.txt says
+; 818 : * 3 but the actual value used is 4.)
+; 819 : */
+; 820 : for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
+
+ 00088 83 e8 04 sub eax, 4
+ 0008b 83 f8 03 cmp eax, 3
+ 0008e 7d b0 jge SHORT $LL4@build_bl_t
+
+; 822 : }
+; 823 : /* Update opt_len to include the bit length tree and counts */
+; 824 : s->opt_len += 3*(max_blindex+1) + 5+5+4;
+
+ 00090 8d 0c 45 11 00
+ 00 00 lea ecx, DWORD PTR [eax*2+17]
+ 00097 03 c8 add ecx, eax
+ 00099 01 8e a8 16 00
+ 00 add DWORD PTR [esi+5800], ecx
+ 0009f 5e pop esi
+
+; 825 : Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
+; 826 : s->opt_len, s->static_len));
+; 827 :
+; 828 : return max_blindex;
+; 829 : }
+
+ 000a0 c3 ret 0
+$LN13@build_bl_t:
+
+; 821 : if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
+
+ 000a1 83 e8 03 sub eax, 3
+
+; 822 : }
+; 823 : /* Update opt_len to include the bit length tree and counts */
+; 824 : s->opt_len += 3*(max_blindex+1) + 5+5+4;
+
+ 000a4 8d 0c 45 11 00
+ 00 00 lea ecx, DWORD PTR [eax*2+17]
+ 000ab 03 c8 add ecx, eax
+ 000ad 01 8e a8 16 00
+ 00 add DWORD PTR [esi+5800], ecx
+ 000b3 5e pop esi
+
+; 825 : Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
+; 826 : s->opt_len, s->static_len));
+; 827 :
+; 828 : return max_blindex;
+; 829 : }
+
+ 000b4 c3 ret 0
+$LN12@build_bl_t:
+
+; 821 : if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
+
+ 000b5 83 e8 02 sub eax, 2
+
+; 822 : }
+; 823 : /* Update opt_len to include the bit length tree and counts */
+; 824 : s->opt_len += 3*(max_blindex+1) + 5+5+4;
+
+ 000b8 8d 0c 45 11 00
+ 00 00 lea ecx, DWORD PTR [eax*2+17]
+ 000bf 03 c8 add ecx, eax
+ 000c1 01 8e a8 16 00
+ 00 add DWORD PTR [esi+5800], ecx
+ 000c7 5e pop esi
+
+; 825 : Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
+; 826 : s->opt_len, s->static_len));
+; 827 :
+; 828 : return max_blindex;
+; 829 : }
+
+ 000c8 c3 ret 0
+$LN11@build_bl_t:
+
+; 821 : if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
+
+ 000c9 48 dec eax
+$LN8@build_bl_t:
+
+; 822 : }
+; 823 : /* Update opt_len to include the bit length tree and counts */
+; 824 : s->opt_len += 3*(max_blindex+1) + 5+5+4;
+
+ 000ca 8d 0c 45 11 00
+ 00 00 lea ecx, DWORD PTR [eax*2+17]
+ 000d1 03 c8 add ecx, eax
+ 000d3 01 8e a8 16 00
+ 00 add DWORD PTR [esi+5800], ecx
+ 000d9 5e pop esi
+
+; 825 : Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
+; 826 : s->opt_len, s->static_len));
+; 827 :
+; 828 : return max_blindex;
+; 829 : }
+
+ 000da c3 ret 0
+_build_bl_tree ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT _send_all_trees
+_TEXT SEGMENT
+_lcodes$1$ = -4 ; size = 4
+_dcodes$ = 8 ; size = 4
+_blcodes$ = 12 ; size = 4
+_send_all_trees PROC ; COMDAT
+; _s$ = ecx
+; _lcodes$ = edx
+
+; 839 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 53 push ebx
+ 00005 56 push esi
+ 00006 8b f1 mov esi, ecx
+ 00008 8b c2 mov eax, edx
+ 0000a 57 push edi
+ 0000b 89 45 fc mov DWORD PTR _lcodes$1$[ebp], eax
+
+; 840 : int rank; /* index in bl_order */
+; 841 :
+; 842 : Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
+; 843 : Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
+; 844 : "too many codes");
+; 845 : Tracev((stderr, "\nbl counts: "));
+; 846 : send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
+
+ 0000e 8b 8e bc 16 00
+ 00 mov ecx, DWORD PTR [esi+5820]
+ 00014 83 f9 0b cmp ecx, 11 ; 0000000bH
+ 00017 7e 54 jle SHORT $LN5@send_all_t
+ 00019 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 0001c 8d b8 ff fe ff
+ ff lea edi, DWORD PTR [eax-257]
+ 00022 66 8b c7 mov ax, di
+ 00025 66 d3 e0 shl ax, cl
+ 00028 66 09 86 b8 16
+ 00 00 or WORD PTR [esi+5816], ax
+ 0002f 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 00032 0f b6 86 b8 16
+ 00 00 movzx eax, BYTE PTR [esi+5816]
+ 00039 88 04 0a mov BYTE PTR [edx+ecx], al
+ 0003c ff 46 14 inc DWORD PTR [esi+20]
+ 0003f 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 00042 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 00045 0f b6 86 b9 16
+ 00 00 movzx eax, BYTE PTR [esi+5817]
+ 0004c 88 04 0a mov BYTE PTR [edx+ecx], al
+ 0004f b1 10 mov cl, 16 ; 00000010H
+ 00051 2a 8e bc 16 00
+ 00 sub cl, BYTE PTR [esi+5820]
+ 00057 ff 46 14 inc DWORD PTR [esi+20]
+ 0005a 66 d3 ef shr di, cl
+ 0005d 83 86 bc 16 00
+ 00 f5 add DWORD PTR [esi+5820], -11 ; fffffff5H
+ 00064 66 89 be b8 16
+ 00 00 mov WORD PTR [esi+5816], di
+ 0006b eb 18 jmp SHORT $LN6@send_all_t
+$LN5@send_all_t:
+ 0006d 05 ff fe ff ff add eax, -257 ; fffffeffH
+ 00072 66 d3 e0 shl ax, cl
+ 00075 66 09 86 b8 16
+ 00 00 or WORD PTR [esi+5816], ax
+ 0007c 8d 41 05 lea eax, DWORD PTR [ecx+5]
+ 0007f 89 86 bc 16 00
+ 00 mov DWORD PTR [esi+5820], eax
+$LN6@send_all_t:
+
+; 847 : send_bits(s, dcodes-1, 5);
+
+ 00085 8b 8e bc 16 00
+ 00 mov ecx, DWORD PTR [esi+5820]
+ 0008b 83 f9 0b cmp ecx, 11 ; 0000000bH
+ 0008e 7e 52 jle SHORT $LN7@send_all_t
+ 00090 8b 7d 08 mov edi, DWORD PTR _dcodes$[ebp]
+ 00093 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 00096 4f dec edi
+ 00097 66 8b c7 mov ax, di
+ 0009a 66 d3 e0 shl ax, cl
+ 0009d 66 09 86 b8 16
+ 00 00 or WORD PTR [esi+5816], ax
+ 000a4 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 000a7 0f b6 86 b8 16
+ 00 00 movzx eax, BYTE PTR [esi+5816]
+ 000ae 88 04 0a mov BYTE PTR [edx+ecx], al
+ 000b1 ff 46 14 inc DWORD PTR [esi+20]
+ 000b4 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 000b7 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 000ba 0f b6 86 b9 16
+ 00 00 movzx eax, BYTE PTR [esi+5817]
+ 000c1 88 04 0a mov BYTE PTR [edx+ecx], al
+ 000c4 b1 10 mov cl, 16 ; 00000010H
+ 000c6 2a 8e bc 16 00
+ 00 sub cl, BYTE PTR [esi+5820]
+ 000cc ff 46 14 inc DWORD PTR [esi+20]
+ 000cf 66 d3 ef shr di, cl
+ 000d2 83 86 bc 16 00
+ 00 f5 add DWORD PTR [esi+5820], -11 ; fffffff5H
+ 000d9 66 89 be b8 16
+ 00 00 mov WORD PTR [esi+5816], di
+ 000e0 eb 17 jmp SHORT $LN8@send_all_t
+$LN7@send_all_t:
+ 000e2 8b 45 08 mov eax, DWORD PTR _dcodes$[ebp]
+ 000e5 48 dec eax
+ 000e6 66 d3 e0 shl ax, cl
+ 000e9 66 09 86 b8 16
+ 00 00 or WORD PTR [esi+5816], ax
+ 000f0 8d 41 05 lea eax, DWORD PTR [ecx+5]
+ 000f3 89 86 bc 16 00
+ 00 mov DWORD PTR [esi+5820], eax
+$LN8@send_all_t:
+
+; 848 : send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */
+
+ 000f9 8b 8e bc 16 00
+ 00 mov ecx, DWORD PTR [esi+5820]
+ 000ff 83 f9 0c cmp ecx, 12 ; 0000000cH
+ 00102 7e 54 jle SHORT $LN9@send_all_t
+ 00104 8b 7d 0c mov edi, DWORD PTR _blcodes$[ebp]
+ 00107 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 0010a 83 c7 fc add edi, -4 ; fffffffcH
+ 0010d 66 8b c7 mov ax, di
+ 00110 66 d3 e0 shl ax, cl
+ 00113 66 09 86 b8 16
+ 00 00 or WORD PTR [esi+5816], ax
+ 0011a 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 0011d 0f b6 86 b8 16
+ 00 00 movzx eax, BYTE PTR [esi+5816]
+ 00124 88 04 0a mov BYTE PTR [edx+ecx], al
+ 00127 ff 46 14 inc DWORD PTR [esi+20]
+ 0012a 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 0012d 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 00130 0f b6 86 b9 16
+ 00 00 movzx eax, BYTE PTR [esi+5817]
+ 00137 88 04 0a mov BYTE PTR [edx+ecx], al
+ 0013a b1 10 mov cl, 16 ; 00000010H
+ 0013c 2a 8e bc 16 00
+ 00 sub cl, BYTE PTR [esi+5820]
+ 00142 ff 46 14 inc DWORD PTR [esi+20]
+ 00145 66 d3 ef shr di, cl
+ 00148 83 86 bc 16 00
+ 00 f4 add DWORD PTR [esi+5820], -12 ; fffffff4H
+ 0014f 66 89 be b8 16
+ 00 00 mov WORD PTR [esi+5816], di
+ 00156 eb 19 jmp SHORT $LN10@send_all_t
+$LN9@send_all_t:
+ 00158 8b 45 0c mov eax, DWORD PTR _blcodes$[ebp]
+ 0015b 83 c0 fc add eax, -4 ; fffffffcH
+ 0015e 66 d3 e0 shl ax, cl
+ 00161 66 09 86 b8 16
+ 00 00 or WORD PTR [esi+5816], ax
+ 00168 8d 41 04 lea eax, DWORD PTR [ecx+4]
+ 0016b 89 86 bc 16 00
+ 00 mov DWORD PTR [esi+5820], eax
+$LN10@send_all_t:
+
+; 849 : for (rank = 0; rank < blcodes; rank++) {
+
+ 00171 33 db xor ebx, ebx
+ 00173 39 5d 0c cmp DWORD PTR _blcodes$[ebp], ebx
+ 00176 0f 8e 91 00 00
+ 00 jle $LN3@send_all_t
+ 0017c 0f 1f 40 00 npad 4
+$LL4@send_all_t:
+
+; 850 : Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
+; 851 : send_bits(s, s->bl_tree[bl_order[rank]].Len, 3);
+
+ 00180 8b 8e bc 16 00
+ 00 mov ecx, DWORD PTR [esi+5820]
+ 00186 0f b6 83 00 00
+ 00 00 movzx eax, BYTE PTR _bl_order[ebx]
+ 0018d 83 f9 0d cmp ecx, 13 ; 0000000dH
+ 00190 7e 56 jle SHORT $LN11@send_all_t
+ 00192 0f b7 bc 86 7e
+ 0a 00 00 movzx edi, WORD PTR [esi+eax*4+2686]
+ 0019a 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 0019d 66 8b c7 mov ax, di
+ 001a0 66 d3 e0 shl ax, cl
+ 001a3 66 09 86 b8 16
+ 00 00 or WORD PTR [esi+5816], ax
+ 001aa 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 001ad 0f b6 86 b8 16
+ 00 00 movzx eax, BYTE PTR [esi+5816]
+ 001b4 88 04 0a mov BYTE PTR [edx+ecx], al
+ 001b7 ff 46 14 inc DWORD PTR [esi+20]
+ 001ba 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 001bd 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 001c0 0f b6 86 b9 16
+ 00 00 movzx eax, BYTE PTR [esi+5817]
+ 001c7 88 04 0a mov BYTE PTR [edx+ecx], al
+ 001ca b1 10 mov cl, 16 ; 00000010H
+ 001cc 2a 8e bc 16 00
+ 00 sub cl, BYTE PTR [esi+5820]
+ 001d2 ff 46 14 inc DWORD PTR [esi+20]
+ 001d5 66 d3 ef shr di, cl
+ 001d8 83 86 bc 16 00
+ 00 f3 add DWORD PTR [esi+5820], -13 ; fffffff3H
+ 001df 66 89 be b8 16
+ 00 00 mov WORD PTR [esi+5816], di
+ 001e6 eb 1b jmp SHORT $LN2@send_all_t
+$LN11@send_all_t:
+ 001e8 66 8b 84 86 7e
+ 0a 00 00 mov ax, WORD PTR [esi+eax*4+2686]
+ 001f0 66 d3 e0 shl ax, cl
+ 001f3 66 09 86 b8 16
+ 00 00 or WORD PTR [esi+5816], ax
+ 001fa 8d 41 03 lea eax, DWORD PTR [ecx+3]
+ 001fd 89 86 bc 16 00
+ 00 mov DWORD PTR [esi+5820], eax
+$LN2@send_all_t:
+
+; 849 : for (rank = 0; rank < blcodes; rank++) {
+
+ 00203 43 inc ebx
+ 00204 3b 5d 0c cmp ebx, DWORD PTR _blcodes$[ebp]
+ 00207 0f 8c 73 ff ff
+ ff jl $LL4@send_all_t
+$LN3@send_all_t:
+
+; 852 : }
+; 853 : Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
+; 854 :
+; 855 : send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */
+
+ 0020d 8b 45 fc mov eax, DWORD PTR _lcodes$1$[ebp]
+ 00210 8d 96 94 00 00
+ 00 lea edx, DWORD PTR [esi+148]
+ 00216 48 dec eax
+ 00217 8b ce mov ecx, esi
+ 00219 50 push eax
+ 0021a e8 00 00 00 00 call _send_tree
+
+; 856 : Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
+; 857 :
+; 858 : send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */
+
+ 0021f 8b 45 08 mov eax, DWORD PTR _dcodes$[ebp]
+ 00222 8d 96 88 09 00
+ 00 lea edx, DWORD PTR [esi+2440]
+ 00228 48 dec eax
+ 00229 8b ce mov ecx, esi
+ 0022b 50 push eax
+ 0022c e8 00 00 00 00 call _send_tree
+ 00231 83 c4 08 add esp, 8
+ 00234 5f pop edi
+ 00235 5e pop esi
+ 00236 5b pop ebx
+
+; 859 : Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
+; 860 : }
+
+ 00237 8b e5 mov esp, ebp
+ 00239 5d pop ebp
+ 0023a c3 ret 0
+_send_all_trees ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT _compress_block
+_TEXT SEGMENT
+_len$1$ = -20 ; size = 4
+_lx$1$ = -20 ; size = 4
+_extra$1$ = -16 ; size = 4
+_lc$1$ = -16 ; size = 4
+_len$1$ = -12 ; size = 4
+_code$1$ = -12 ; size = 4
+_len$1$ = -8 ; size = 4
+_code$2$ = -8 ; size = 4
+_ltree$1$ = -4 ; size = 4
+_dtree$ = 8 ; size = 4
+_compress_block PROC ; COMDAT
+; _s$ = ecx
+; _ltree$ = edx
+
+; 1064 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 14 sub esp, 20 ; 00000014H
+ 00006 53 push ebx
+ 00007 8b da mov ebx, edx
+ 00009 8b c1 mov eax, ecx
+
+; 1065 : unsigned dist; /* distance of matched string */
+; 1066 : int lc; /* match length or unmatched char (if dist == 0) */
+; 1067 : unsigned lx = 0; /* running index in l_buf */
+
+ 0000b 33 d2 xor edx, edx
+ 0000d 89 5d fc mov DWORD PTR _ltree$1$[ebp], ebx
+ 00010 56 push esi
+ 00011 57 push edi
+
+; 1068 : unsigned code; /* the code to send */
+; 1069 : int extra; /* number of extra bits to send */
+; 1070 :
+; 1071 : if (s->last_lit != 0) do {
+
+ 00012 8d 72 10 lea esi, DWORD PTR [edx+16]
+ 00015 39 90 a0 16 00
+ 00 cmp DWORD PTR [eax+5792], edx
+ 0001b 0f 84 3d 03 00
+ 00 je $LN3@compress_b
+ 00021 0f 1f 40 00 66
+ 66 66 0f 1f 84
+ 00 00 00 00 00 npad 15
+$LL4@compress_b:
+
+; 1072 : dist = s->d_buf[lx];
+
+ 00030 8b 88 a4 16 00
+ 00 mov ecx, DWORD PTR [eax+5796]
+ 00036 0f b7 1c 51 movzx ebx, WORD PTR [ecx+edx*2]
+
+; 1073 : lc = s->l_buf[lx++];
+
+ 0003a 8b 88 98 16 00
+ 00 mov ecx, DWORD PTR [eax+5784]
+ 00040 0f b6 3c 0a movzx edi, BYTE PTR [edx+ecx]
+ 00044 42 inc edx
+ 00045 89 7d f0 mov DWORD PTR _lc$1$[ebp], edi
+ 00048 89 55 ec mov DWORD PTR _lx$1$[ebp], edx
+
+; 1074 : if (dist == 0) {
+
+ 0004b 85 db test ebx, ebx
+ 0004d 0f 85 88 00 00
+ 00 jne $LN6@compress_b
+
+; 1075 : send_code(s, lc, ltree); /* send a literal byte */
+
+ 00053 8b 4d fc mov ecx, DWORD PTR _ltree$1$[ebp]
+ 00056 8b d6 mov edx, esi
+ 00058 0f b7 5c b9 02 movzx ebx, WORD PTR [ecx+edi*4+2]
+ 0005d 8d 3c b9 lea edi, DWORD PTR [ecx+edi*4]
+ 00060 8b 88 bc 16 00
+ 00 mov ecx, DWORD PTR [eax+5820]
+ 00066 2b d3 sub edx, ebx
+ 00068 3b ca cmp ecx, edx
+ 0006a 7e 5b jle SHORT $LN8@compress_b
+ 0006c 0f b7 3f movzx edi, WORD PTR [edi]
+ 0006f 8b 70 08 mov esi, DWORD PTR [eax+8]
+ 00072 66 8b d7 mov dx, di
+ 00075 66 d3 e2 shl dx, cl
+ 00078 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 0007f 8b 50 14 mov edx, DWORD PTR [eax+20]
+ 00082 0f b6 88 b8 16
+ 00 00 movzx ecx, BYTE PTR [eax+5816]
+ 00089 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 0008c ff 40 14 inc DWORD PTR [eax+20]
+ 0008f 8b 70 14 mov esi, DWORD PTR [eax+20]
+ 00092 8b 50 08 mov edx, DWORD PTR [eax+8]
+ 00095 0f b6 88 b9 16
+ 00 00 movzx ecx, BYTE PTR [eax+5817]
+ 0009c 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 0009f b1 10 mov cl, 16 ; 00000010H
+ 000a1 2a 88 bc 16 00
+ 00 sub cl, BYTE PTR [eax+5820]
+ 000a7 be 10 00 00 00 mov esi, 16 ; 00000010H
+ 000ac ff 40 14 inc DWORD PTR [eax+20]
+ 000af 66 d3 ef shr di, cl
+ 000b2 8d 4b f0 lea ecx, DWORD PTR [ebx-16]
+ 000b5 01 88 bc 16 00
+ 00 add DWORD PTR [eax+5820], ecx
+ 000bb 66 89 b8 b8 16
+ 00 00 mov WORD PTR [eax+5816], di
+ 000c2 e9 85 02 00 00 jmp $LN2@compress_b
+$LN8@compress_b:
+ 000c7 66 8b 17 mov dx, WORD PTR [edi]
+ 000ca 66 d3 e2 shl dx, cl
+ 000cd 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 000d4 03 cb add ecx, ebx
+
+; 1076 : Tracecv(isgraph(lc), (stderr," '%c' ", lc));
+; 1077 : } else {
+
+ 000d6 e9 6b 02 00 00 jmp $LN28@compress_b
+$LN6@compress_b:
+
+; 1078 : /* Here, lc is the match length - MIN_MATCH */
+; 1079 : code = _length_code[lc];
+
+ 000db 0f b6 8f 00 00
+ 00 00 movzx ecx, BYTE PTR __length_code[edi]
+
+; 1080 : send_code(s, code+LITERALS+1, ltree); /* send the length code */
+
+ 000e2 8b 55 fc mov edx, DWORD PTR _ltree$1$[ebp]
+ 000e5 89 4d f4 mov DWORD PTR _code$1$[ebp], ecx
+ 000e8 0f b7 8c 8a 06
+ 04 00 00 movzx ecx, WORD PTR [edx+ecx*4+1030]
+ 000f0 8b d6 mov edx, esi
+ 000f2 8b 75 fc mov esi, DWORD PTR _ltree$1$[ebp]
+ 000f5 89 4d f8 mov DWORD PTR _len$1$[ebp], ecx
+ 000f8 2b 55 f8 sub edx, DWORD PTR _len$1$[ebp]
+ 000fb 8b 88 bc 16 00
+ 00 mov ecx, DWORD PTR [eax+5820]
+ 00101 3b ca cmp ecx, edx
+ 00103 8b 55 f4 mov edx, DWORD PTR _code$1$[ebp]
+ 00106 7e 5e jle SHORT $LN10@compress_b
+ 00108 0f b7 bc 96 04
+ 04 00 00 movzx edi, WORD PTR [esi+edx*4+1028]
+ 00110 8b 70 08 mov esi, DWORD PTR [eax+8]
+ 00113 66 8b d7 mov dx, di
+ 00116 66 d3 e2 shl dx, cl
+ 00119 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 00120 8b 50 14 mov edx, DWORD PTR [eax+20]
+ 00123 0f b6 88 b8 16
+ 00 00 movzx ecx, BYTE PTR [eax+5816]
+ 0012a 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 0012d ff 40 14 inc DWORD PTR [eax+20]
+ 00130 8b 70 14 mov esi, DWORD PTR [eax+20]
+ 00133 8b 50 08 mov edx, DWORD PTR [eax+8]
+ 00136 0f b6 88 b9 16
+ 00 00 movzx ecx, BYTE PTR [eax+5817]
+ 0013d 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 00140 b1 10 mov cl, 16 ; 00000010H
+ 00142 2a 88 bc 16 00
+ 00 sub cl, BYTE PTR [eax+5820]
+ 00148 ff 40 14 inc DWORD PTR [eax+20]
+ 0014b 66 d3 ef shr di, cl
+ 0014e 8b 4d f8 mov ecx, DWORD PTR _len$1$[ebp]
+ 00151 83 c1 f0 add ecx, -16 ; fffffff0H
+ 00154 66 89 b8 b8 16
+ 00 00 mov WORD PTR [eax+5816], di
+ 0015b 01 88 bc 16 00
+ 00 add DWORD PTR [eax+5820], ecx
+ 00161 8b 7d f0 mov edi, DWORD PTR _lc$1$[ebp]
+ 00164 eb 1b jmp SHORT $LN11@compress_b
+$LN10@compress_b:
+ 00166 66 8b 94 96 04
+ 04 00 00 mov dx, WORD PTR [esi+edx*4+1028]
+ 0016e 66 d3 e2 shl dx, cl
+ 00171 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 00178 03 4d f8 add ecx, DWORD PTR _len$1$[ebp]
+ 0017b 89 88 bc 16 00
+ 00 mov DWORD PTR [eax+5820], ecx
+$LN11@compress_b:
+
+; 1081 : extra = extra_lbits[code];
+
+ 00181 8b 4d f4 mov ecx, DWORD PTR _code$1$[ebp]
+ 00184 8b 34 8d 00 00
+ 00 00 mov esi, DWORD PTR _extra_lbits[ecx*4]
+ 0018b 89 75 f0 mov DWORD PTR _extra$1$[ebp], esi
+
+; 1082 : if (extra != 0) {
+
+ 0018e 85 f6 test esi, esi
+ 00190 74 7d je SHORT $LN14@compress_b
+
+; 1083 : lc -= base_length[code];
+
+ 00192 2b 3c 8d 00 00
+ 00 00 sub edi, DWORD PTR _base_length[ecx*4]
+
+; 1084 : send_bits(s, lc, extra); /* send the extra length bits */
+
+ 00199 ba 10 00 00 00 mov edx, 16 ; 00000010H
+ 0019e 8b 88 bc 16 00
+ 00 mov ecx, DWORD PTR [eax+5820]
+ 001a4 2b d6 sub edx, esi
+ 001a6 3b ca cmp ecx, edx
+ 001a8 7e 53 jle SHORT $LN13@compress_b
+ 001aa 8b 70 08 mov esi, DWORD PTR [eax+8]
+ 001ad 66 8b d7 mov dx, di
+ 001b0 66 d3 e2 shl dx, cl
+ 001b3 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 001ba 8b 50 14 mov edx, DWORD PTR [eax+20]
+ 001bd 0f b6 88 b8 16
+ 00 00 movzx ecx, BYTE PTR [eax+5816]
+ 001c4 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 001c7 ff 40 14 inc DWORD PTR [eax+20]
+ 001ca 8b 70 14 mov esi, DWORD PTR [eax+20]
+ 001cd 8b 50 08 mov edx, DWORD PTR [eax+8]
+ 001d0 0f b6 88 b9 16
+ 00 00 movzx ecx, BYTE PTR [eax+5817]
+ 001d7 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 001da b1 10 mov cl, 16 ; 00000010H
+ 001dc 2a 88 bc 16 00
+ 00 sub cl, BYTE PTR [eax+5820]
+ 001e2 ff 40 14 inc DWORD PTR [eax+20]
+ 001e5 66 d3 ef shr di, cl
+ 001e8 8b 4d f0 mov ecx, DWORD PTR _extra$1$[ebp]
+ 001eb 83 c1 f0 add ecx, -16 ; fffffff0H
+ 001ee 66 89 b8 b8 16
+ 00 00 mov WORD PTR [eax+5816], di
+ 001f5 01 88 bc 16 00
+ 00 add DWORD PTR [eax+5820], ecx
+ 001fb eb 12 jmp SHORT $LN14@compress_b
+$LN13@compress_b:
+ 001fd 66 d3 e7 shl di, cl
+ 00200 66 09 b8 b8 16
+ 00 00 or WORD PTR [eax+5816], di
+ 00207 03 ce add ecx, esi
+ 00209 89 88 bc 16 00
+ 00 mov DWORD PTR [eax+5820], ecx
+$LN14@compress_b:
+
+; 1085 : }
+; 1086 : dist--; /* dist is now the match distance - 1 */
+
+ 0020f 4b dec ebx
+
+; 1087 : code = d_code(dist);
+
+ 00210 81 fb 00 01 00
+ 00 cmp ebx, 256 ; 00000100H
+ 00216 73 09 jae SHORT $LN23@compress_b
+ 00218 0f b6 8b 00 00
+ 00 00 movzx ecx, BYTE PTR __dist_code[ebx]
+ 0021f eb 0c jmp SHORT $LN29@compress_b
+$LN23@compress_b:
+ 00221 8b cb mov ecx, ebx
+ 00223 c1 e9 07 shr ecx, 7
+ 00226 0f b6 89 00 01
+ 00 00 movzx ecx, BYTE PTR __dist_code[ecx+256]
+$LN29@compress_b:
+
+; 1088 : Assert (code < D_CODES, "bad d_code");
+; 1089 :
+; 1090 : send_code(s, code, dtree); /* send the distance code */
+
+ 0022d 8b 55 08 mov edx, DWORD PTR _dtree$[ebp]
+ 00230 be 10 00 00 00 mov esi, 16 ; 00000010H
+ 00235 89 4d f8 mov DWORD PTR _code$2$[ebp], ecx
+ 00238 8d 3c 8a lea edi, DWORD PTR [edx+ecx*4]
+ 0023b 8b d6 mov edx, esi
+ 0023d 0f b7 4f 02 movzx ecx, WORD PTR [edi+2]
+ 00241 89 4d f4 mov DWORD PTR _len$1$[ebp], ecx
+ 00244 2b 55 f4 sub edx, DWORD PTR _len$1$[ebp]
+ 00247 8b 88 bc 16 00
+ 00 mov ecx, DWORD PTR [eax+5820]
+ 0024d 3b ca cmp ecx, edx
+ 0024f 7e 5b jle SHORT $LN15@compress_b
+ 00251 0f b7 3f movzx edi, WORD PTR [edi]
+ 00254 8b 70 08 mov esi, DWORD PTR [eax+8]
+ 00257 66 8b d7 mov dx, di
+ 0025a 66 d3 e2 shl dx, cl
+ 0025d 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 00264 8b 50 14 mov edx, DWORD PTR [eax+20]
+ 00267 0f b6 88 b8 16
+ 00 00 movzx ecx, BYTE PTR [eax+5816]
+ 0026e 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 00271 ff 40 14 inc DWORD PTR [eax+20]
+ 00274 8b 70 14 mov esi, DWORD PTR [eax+20]
+ 00277 8b 50 08 mov edx, DWORD PTR [eax+8]
+ 0027a 0f b6 88 b9 16
+ 00 00 movzx ecx, BYTE PTR [eax+5817]
+ 00281 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 00284 b1 10 mov cl, 16 ; 00000010H
+ 00286 2a 88 bc 16 00
+ 00 sub cl, BYTE PTR [eax+5820]
+ 0028c be 10 00 00 00 mov esi, 16 ; 00000010H
+ 00291 ff 40 14 inc DWORD PTR [eax+20]
+ 00294 66 d3 ef shr di, cl
+ 00297 8b 4d f4 mov ecx, DWORD PTR _len$1$[ebp]
+ 0029a 83 c1 f0 add ecx, -16 ; fffffff0H
+ 0029d 66 89 b8 b8 16
+ 00 00 mov WORD PTR [eax+5816], di
+ 002a4 01 88 bc 16 00
+ 00 add DWORD PTR [eax+5820], ecx
+ 002aa eb 16 jmp SHORT $LN16@compress_b
+$LN15@compress_b:
+ 002ac 66 8b 17 mov dx, WORD PTR [edi]
+ 002af 66 d3 e2 shl dx, cl
+ 002b2 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 002b9 03 4d f4 add ecx, DWORD PTR _len$1$[ebp]
+ 002bc 89 88 bc 16 00
+ 00 mov DWORD PTR [eax+5820], ecx
+$LN16@compress_b:
+
+; 1091 : extra = extra_dbits[code];
+
+ 002c2 8b 4d f8 mov ecx, DWORD PTR _code$2$[ebp]
+ 002c5 8b 3c 8d 00 00
+ 00 00 mov edi, DWORD PTR _extra_dbits[ecx*4]
+
+; 1092 : if (extra != 0) {
+
+ 002cc 85 ff test edi, edi
+ 002ce 74 7c je SHORT $LN2@compress_b
+
+; 1093 : dist -= base_dist[code];
+
+ 002d0 2b 1c 8d 00 00
+ 00 00 sub ebx, DWORD PTR _base_dist[ecx*4]
+
+; 1094 : send_bits(s, dist, extra); /* send the extra distance bits */
+
+ 002d7 8b d6 mov edx, esi
+ 002d9 8b 88 bc 16 00
+ 00 mov ecx, DWORD PTR [eax+5820]
+ 002df 2b d7 sub edx, edi
+ 002e1 3b ca cmp ecx, edx
+ 002e3 7e 55 jle SHORT $LN18@compress_b
+ 002e5 8b 70 08 mov esi, DWORD PTR [eax+8]
+ 002e8 66 8b d3 mov dx, bx
+ 002eb 66 d3 e2 shl dx, cl
+ 002ee 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 002f5 8b 50 14 mov edx, DWORD PTR [eax+20]
+ 002f8 0f b6 88 b8 16
+ 00 00 movzx ecx, BYTE PTR [eax+5816]
+ 002ff 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 00302 ff 40 14 inc DWORD PTR [eax+20]
+ 00305 8b 70 14 mov esi, DWORD PTR [eax+20]
+ 00308 8b 50 08 mov edx, DWORD PTR [eax+8]
+ 0030b 0f b6 88 b9 16
+ 00 00 movzx ecx, BYTE PTR [eax+5817]
+ 00312 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 00315 b1 10 mov cl, 16 ; 00000010H
+ 00317 2a 88 bc 16 00
+ 00 sub cl, BYTE PTR [eax+5820]
+ 0031d be 10 00 00 00 mov esi, 16 ; 00000010H
+ 00322 ff 40 14 inc DWORD PTR [eax+20]
+ 00325 66 d3 eb shr bx, cl
+ 00328 8d 4f f0 lea ecx, DWORD PTR [edi-16]
+ 0032b 01 88 bc 16 00
+ 00 add DWORD PTR [eax+5820], ecx
+ 00331 66 89 98 b8 16
+ 00 00 mov WORD PTR [eax+5816], bx
+ 00338 eb 12 jmp SHORT $LN2@compress_b
+$LN18@compress_b:
+ 0033a 66 d3 e3 shl bx, cl
+ 0033d 66 09 98 b8 16
+ 00 00 or WORD PTR [eax+5816], bx
+ 00344 03 cf add ecx, edi
+$LN28@compress_b:
+ 00346 89 88 bc 16 00
+ 00 mov DWORD PTR [eax+5820], ecx
+$LN2@compress_b:
+
+; 1095 : }
+; 1096 : } /* literal or match pair ? */
+; 1097 :
+; 1098 : /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
+; 1099 : Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
+; 1100 : "pendingBuf overflow");
+; 1101 :
+; 1102 : } while (lx < s->last_lit);
+
+ 0034c 8b 55 ec mov edx, DWORD PTR _lx$1$[ebp]
+ 0034f 3b 90 a0 16 00
+ 00 cmp edx, DWORD PTR [eax+5792]
+ 00355 0f 82 d5 fc ff
+ ff jb $LL4@compress_b
+ 0035b 8b 5d fc mov ebx, DWORD PTR _ltree$1$[ebp]
+$LN3@compress_b:
+
+; 1103 :
+; 1104 : send_code(s, END_BLOCK, ltree);
+
+ 0035e 0f b7 bb 02 04
+ 00 00 movzx edi, WORD PTR [ebx+1026]
+ 00365 8b 88 bc 16 00
+ 00 mov ecx, DWORD PTR [eax+5820]
+ 0036b 2b f7 sub esi, edi
+ 0036d 89 7d ec mov DWORD PTR _len$1$[ebp], edi
+ 00370 3b ce cmp ecx, esi
+ 00372 7e 5f jle SHORT $LN20@compress_b
+ 00374 0f b7 bb 00 04
+ 00 00 movzx edi, WORD PTR [ebx+1024]
+ 0037b 8b 70 08 mov esi, DWORD PTR [eax+8]
+ 0037e 66 8b d7 mov dx, di
+ 00381 66 d3 e2 shl dx, cl
+ 00384 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 0038b 8b 50 14 mov edx, DWORD PTR [eax+20]
+ 0038e 0f b6 88 b8 16
+ 00 00 movzx ecx, BYTE PTR [eax+5816]
+ 00395 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 00398 ff 40 14 inc DWORD PTR [eax+20]
+ 0039b 8b 70 14 mov esi, DWORD PTR [eax+20]
+ 0039e 8b 50 08 mov edx, DWORD PTR [eax+8]
+ 003a1 0f b6 88 b9 16
+ 00 00 movzx ecx, BYTE PTR [eax+5817]
+ 003a8 88 0c 16 mov BYTE PTR [esi+edx], cl
+ 003ab b1 10 mov cl, 16 ; 00000010H
+ 003ad 2a 88 bc 16 00
+ 00 sub cl, BYTE PTR [eax+5820]
+ 003b3 ff 40 14 inc DWORD PTR [eax+20]
+ 003b6 66 d3 ef shr di, cl
+ 003b9 8b 4d ec mov ecx, DWORD PTR _len$1$[ebp]
+ 003bc 66 89 b8 b8 16
+ 00 00 mov WORD PTR [eax+5816], di
+ 003c3 83 c1 f0 add ecx, -16 ; fffffff0H
+ 003c6 01 88 bc 16 00
+ 00 add DWORD PTR [eax+5820], ecx
+ 003cc 5f pop edi
+ 003cd 5e pop esi
+ 003ce 5b pop ebx
+
+; 1105 : }
+
+ 003cf 8b e5 mov esp, ebp
+ 003d1 5d pop ebp
+ 003d2 c3 ret 0
+$LN20@compress_b:
+
+; 1103 :
+; 1104 : send_code(s, END_BLOCK, ltree);
+
+ 003d3 66 8b 93 00 04
+ 00 00 mov dx, WORD PTR [ebx+1024]
+ 003da 66 d3 e2 shl dx, cl
+ 003dd 66 09 90 b8 16
+ 00 00 or WORD PTR [eax+5816], dx
+ 003e4 03 cf add ecx, edi
+ 003e6 5f pop edi
+ 003e7 5e pop esi
+ 003e8 89 88 bc 16 00
+ 00 mov DWORD PTR [eax+5820], ecx
+ 003ee 5b pop ebx
+
+; 1105 : }
+
+ 003ef 8b e5 mov esp, ebp
+ 003f1 5d pop ebp
+ 003f2 c3 ret 0
+_compress_block ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT _detect_data_type
+_TEXT SEGMENT
+_detect_data_type PROC ; COMDAT
+; _s$ = ecx
+
+; 1122 : {
+
+ 00000 56 push esi
+ 00001 57 push edi
+ 00002 8b f9 mov edi, ecx
+
+; 1123 : /* black_mask is the bit mask of black-listed bytes
+; 1124 : * set bits 0..6, 14..25, and 28..31
+; 1125 : * 0xf3ffc07f = binary 11110011111111111100000001111111
+; 1126 : */
+; 1127 : unsigned long black_mask = 0xf3ffc07fUL;
+
+ 00004 b8 7f c0 ff f3 mov eax, -201342849 ; f3ffc07fH
+
+; 1128 : int n;
+; 1129 :
+; 1130 : /* Check for non-textual ("black-listed") bytes. */
+; 1131 : for (n = 0; n <= 31; n++, black_mask >>= 1)
+
+ 00009 33 f6 xor esi, esi
+ 0000b 8d 97 94 00 00
+ 00 lea edx, DWORD PTR [edi+148]
+$LL4@detect_dat:
+
+; 1132 : if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0))
+
+ 00011 a8 01 test al, 1
+ 00013 74 06 je SHORT $LN2@detect_dat
+ 00015 66 83 3a 00 cmp WORD PTR [edx], 0
+ 00019 75 47 jne SHORT $LN15@detect_dat
+$LN2@detect_dat:
+
+; 1128 : int n;
+; 1129 :
+; 1130 : /* Check for non-textual ("black-listed") bytes. */
+; 1131 : for (n = 0; n <= 31; n++, black_mask >>= 1)
+
+ 0001b 46 inc esi
+ 0001c d1 e8 shr eax, 1
+ 0001e 83 c2 04 add edx, 4
+ 00021 83 fe 1f cmp esi, 31 ; 0000001fH
+ 00024 7e eb jle SHORT $LL4@detect_dat
+
+; 1133 : return Z_BINARY;
+; 1134 :
+; 1135 : /* Check for textual ("white-listed") bytes. */
+; 1136 : if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0
+; 1137 : || s->dyn_ltree[13].Freq != 0)
+
+ 00026 66 83 bf b8 00
+ 00 00 00 cmp WORD PTR [edi+184], 0
+ 0002e 75 37 jne SHORT $LN10@detect_dat
+ 00030 66 83 bf bc 00
+ 00 00 00 cmp WORD PTR [edi+188], 0
+ 00038 75 2d jne SHORT $LN10@detect_dat
+ 0003a 66 83 bf c8 00
+ 00 00 00 cmp WORD PTR [edi+200], 0
+ 00042 75 23 jne SHORT $LN10@detect_dat
+
+; 1139 : for (n = 32; n < LITERALS; n++)
+
+ 00044 b9 20 00 00 00 mov ecx, 32 ; 00000020H
+ 00049 8d 87 14 01 00
+ 00 lea eax, DWORD PTR [edi+276]
+ 0004f 90 npad 1
+$LL7@detect_dat:
+
+; 1140 : if (s->dyn_ltree[n].Freq != 0)
+
+ 00050 66 83 38 00 cmp WORD PTR [eax], 0
+ 00054 75 11 jne SHORT $LN10@detect_dat
+
+; 1139 : for (n = 32; n < LITERALS; n++)
+
+ 00056 41 inc ecx
+ 00057 83 c0 04 add eax, 4
+ 0005a 81 f9 00 01 00
+ 00 cmp ecx, 256 ; 00000100H
+ 00060 7c ee jl SHORT $LL7@detect_dat
+$LN15@detect_dat:
+ 00062 5f pop edi
+
+; 1141 : return Z_TEXT;
+; 1142 :
+; 1143 : /* There are no "black-listed" or "white-listed" bytes:
+; 1144 : * this stream either is empty or has tolerated ("gray-listed") bytes only.
+; 1145 : */
+; 1146 : return Z_BINARY;
+
+ 00063 33 c0 xor eax, eax
+ 00065 5e pop esi
+
+; 1147 : }
+
+ 00066 c3 ret 0
+$LN10@detect_dat:
+ 00067 5f pop edi
+
+; 1138 : return Z_TEXT;
+
+ 00068 b8 01 00 00 00 mov eax, 1
+ 0006d 5e pop esi
+
+; 1147 : }
+
+ 0006e c3 ret 0
+_detect_data_type ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT _bi_reverse
+_TEXT SEGMENT
+_bi_reverse PROC ; COMDAT
+; _code$ = ecx
+; _len$ = edx
+
+; 1158 : register unsigned res = 0;
+
+ 00000 33 c0 xor eax, eax
+ 00002 56 push esi
+$LL4@bi_reverse:
+
+; 1159 : do {
+; 1160 : res |= code & 1;
+
+ 00003 8b f1 mov esi, ecx
+
+; 1161 : code >>= 1, res <<= 1;
+; 1162 : } while (--len > 0);
+
+ 00005 4a dec edx
+ 00006 83 e6 01 and esi, 1
+ 00009 d1 e9 shr ecx, 1
+ 0000b 0b c6 or eax, esi
+ 0000d 03 c0 add eax, eax
+ 0000f 85 d2 test edx, edx
+ 00011 7f f0 jg SHORT $LL4@bi_reverse
+
+; 1163 : return res >> 1;
+
+ 00013 d1 e8 shr eax, 1
+ 00015 5e pop esi
+
+; 1164 : }
+
+ 00016 c3 ret 0
+_bi_reverse ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT _bi_flush
+_TEXT SEGMENT
+_bi_flush PROC ; COMDAT
+; _s$ = ecx
+
+; 1171 : {
+
+ 00000 56 push esi
+ 00001 8b f1 mov esi, ecx
+
+; 1172 : if (s->bi_valid == 16) {
+
+ 00003 8b 86 bc 16 00
+ 00 mov eax, DWORD PTR [esi+5820]
+ 00009 83 f8 10 cmp eax, 16 ; 00000010H
+ 0000c 75 37 jne SHORT $LN2@bi_flush
+
+; 1173 : put_short(s, s->bi_buf);
+
+ 0000e 8b 4e 14 mov ecx, DWORD PTR [esi+20]
+ 00011 8b 56 08 mov edx, DWORD PTR [esi+8]
+ 00014 0f b6 86 b8 16
+ 00 00 movzx eax, BYTE PTR [esi+5816]
+ 0001b 88 04 0a mov BYTE PTR [edx+ecx], al
+ 0001e ff 46 14 inc DWORD PTR [esi+20]
+ 00021 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 00024 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 00027 0f b6 86 b9 16
+ 00 00 movzx eax, BYTE PTR [esi+5817]
+ 0002e 88 04 0a mov BYTE PTR [edx+ecx], al
+ 00031 ff 46 14 inc DWORD PTR [esi+20]
+
+; 1174 : s->bi_buf = 0;
+
+ 00034 33 c0 xor eax, eax
+
+; 1175 : s->bi_valid = 0;
+
+ 00036 89 86 bc 16 00
+ 00 mov DWORD PTR [esi+5820], eax
+
+; 1178 : s->bi_buf >>= 8;
+
+ 0003c 66 89 86 b8 16
+ 00 00 mov WORD PTR [esi+5816], ax
+ 00043 5e pop esi
+
+; 1180 : }
+; 1181 : }
+
+ 00044 c3 ret 0
+$LN2@bi_flush:
+
+; 1176 : } else if (s->bi_valid >= 8) {
+
+ 00045 83 f8 08 cmp eax, 8
+ 00048 7c 27 jl SHORT $LN4@bi_flush
+
+; 1177 : put_byte(s, (Byte)s->bi_buf);
+
+ 0004a 8b 4e 14 mov ecx, DWORD PTR [esi+20]
+ 0004d 8b 56 08 mov edx, DWORD PTR [esi+8]
+ 00050 8a 86 b8 16 00
+ 00 mov al, BYTE PTR [esi+5816]
+ 00056 88 04 0a mov BYTE PTR [edx+ecx], al
+
+; 1178 : s->bi_buf >>= 8;
+
+ 00059 0f b6 86 b9 16
+ 00 00 movzx eax, BYTE PTR [esi+5817]
+ 00060 ff 46 14 inc DWORD PTR [esi+20]
+
+; 1179 : s->bi_valid -= 8;
+
+ 00063 83 86 bc 16 00
+ 00 f8 add DWORD PTR [esi+5820], -8 ; fffffff8H
+ 0006a 66 89 86 b8 16
+ 00 00 mov WORD PTR [esi+5816], ax
+$LN4@bi_flush:
+ 00071 5e pop esi
+
+; 1180 : }
+; 1181 : }
+
+ 00072 c3 ret 0
+_bi_flush ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT _bi_windup
+_TEXT SEGMENT
+_bi_windup PROC ; COMDAT
+; _s$ = ecx
+
+; 1188 : {
+
+ 00000 56 push esi
+ 00001 8b f1 mov esi, ecx
+
+; 1189 : if (s->bi_valid > 8) {
+
+ 00003 8b 86 bc 16 00
+ 00 mov eax, DWORD PTR [esi+5820]
+ 00009 83 f8 08 cmp eax, 8
+ 0000c 7e 22 jle SHORT $LN2@bi_windup
+
+; 1190 : put_short(s, s->bi_buf);
+
+ 0000e 8b 4e 14 mov ecx, DWORD PTR [esi+20]
+ 00011 8b 56 08 mov edx, DWORD PTR [esi+8]
+ 00014 0f b6 86 b8 16
+ 00 00 movzx eax, BYTE PTR [esi+5816]
+ 0001b 88 04 0a mov BYTE PTR [edx+ecx], al
+ 0001e ff 46 14 inc DWORD PTR [esi+20]
+ 00021 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 00024 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 00027 0f b6 86 b9 16
+ 00 00 movzx eax, BYTE PTR [esi+5817]
+ 0002e eb 10 jmp SHORT $LN6@bi_windup
+$LN2@bi_windup:
+
+; 1191 : } else if (s->bi_valid > 0) {
+
+ 00030 85 c0 test eax, eax
+ 00032 7e 12 jle SHORT $LN4@bi_windup
+
+; 1192 : put_byte(s, (Byte)s->bi_buf);
+
+ 00034 8b 56 08 mov edx, DWORD PTR [esi+8]
+ 00037 8b 4e 14 mov ecx, DWORD PTR [esi+20]
+ 0003a 8a 86 b8 16 00
+ 00 mov al, BYTE PTR [esi+5816]
+$LN6@bi_windup:
+ 00040 88 04 0a mov BYTE PTR [edx+ecx], al
+ 00043 ff 46 14 inc DWORD PTR [esi+20]
+$LN4@bi_windup:
+
+; 1193 : }
+; 1194 : s->bi_buf = 0;
+
+ 00046 33 c0 xor eax, eax
+ 00048 66 89 86 b8 16
+ 00 00 mov WORD PTR [esi+5816], ax
+
+; 1195 : s->bi_valid = 0;
+
+ 0004f 89 86 bc 16 00
+ 00 mov DWORD PTR [esi+5820], eax
+ 00055 5e pop esi
+
+; 1196 : #ifdef DEBUG
+; 1197 : s->bits_sent = (s->bits_sent+7) & ~7;
+; 1198 : #endif
+; 1199 : }
+
+ 00056 c3 ret 0
+_bi_windup ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\trees.c
+; COMDAT _copy_block
+_TEXT SEGMENT
+_len$ = 8 ; size = 4
+_header$dead$ = 12 ; size = 4
+_copy_block PROC ; COMDAT
+; _s$ = ecx
+; _buf$ = edx
+
+; 1210 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 53 push ebx
+ 00004 56 push esi
+ 00005 57 push edi
+ 00006 8b fa mov edi, edx
+ 00008 8b f1 mov esi, ecx
+
+; 1211 : bi_windup(s); /* align on byte boundary */
+
+ 0000a e8 00 00 00 00 call _bi_windup
+
+; 1212 :
+; 1213 : if (header) {
+; 1214 : put_short(s, (ush)len);
+
+ 0000f 8b 4e 14 mov ecx, DWORD PTR [esi+20]
+ 00012 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 00015 8b 5d 08 mov ebx, DWORD PTR _len$[ebp]
+ 00018 88 1c 01 mov BYTE PTR [ecx+eax], bl
+ 0001b 8b cb mov ecx, ebx
+ 0001d ff 46 14 inc DWORD PTR [esi+20]
+ 00020 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 00023 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 00026 c1 e9 08 shr ecx, 8
+ 00029 88 0c 02 mov BYTE PTR [edx+eax], cl
+
+; 1215 : put_short(s, (ush)~len);
+
+ 0002c 8a cb mov cl, bl
+ 0002e ff 46 14 inc DWORD PTR [esi+20]
+ 00031 f6 d1 not cl
+ 00033 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 00036 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 00039 88 0c 02 mov BYTE PTR [edx+eax], cl
+ 0003c 8b cb mov ecx, ebx
+ 0003e ff 46 14 inc DWORD PTR [esi+20]
+ 00041 f7 d1 not ecx
+ 00043 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 00046 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 00049 c1 e9 08 shr ecx, 8
+ 0004c 88 0c 02 mov BYTE PTR [edx+eax], cl
+ 0004f ff 46 14 inc DWORD PTR [esi+20]
+ 00052 8b 56 14 mov edx, DWORD PTR [esi+20]
+
+; 1216 : #ifdef DEBUG
+; 1217 : s->bits_sent += 2*16;
+; 1218 : #endif
+; 1219 : }
+; 1220 : #ifdef DEBUG
+; 1221 : s->bits_sent += (ulg)len<<3;
+; 1222 : #endif
+; 1223 : while (len--) {
+
+ 00055 85 db test ebx, ebx
+ 00057 74 1e je SHORT $LN7@copy_block
+ 00059 0f 1f 80 00 00
+ 00 00 npad 7
+$LL2@copy_block:
+
+; 1224 : put_byte(s, *buf++);
+
+ 00060 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 00063 8d 7f 01 lea edi, DWORD PTR [edi+1]
+ 00066 8a 47 ff mov al, BYTE PTR [edi-1]
+ 00069 88 04 0a mov BYTE PTR [edx+ecx], al
+ 0006c ff 46 14 inc DWORD PTR [esi+20]
+ 0006f 8b 56 14 mov edx, DWORD PTR [esi+20]
+ 00072 83 eb 01 sub ebx, 1
+ 00075 75 e9 jne SHORT $LL2@copy_block
+$LN7@copy_block:
+ 00077 5f pop edi
+ 00078 5e pop esi
+ 00079 5b pop ebx
+
+; 1225 : }
+; 1226 : }
+
+ 0007a 5d pop ebp
+ 0007b c3 ret 0
+_copy_block ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/trees.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/trees.obj
new file mode 100644
index 0000000000..b23c52a020
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/trees.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/uncompr.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/uncompr.cod
new file mode 100644
index 0000000000..8f92e65124
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/uncompr.cod
@@ -0,0 +1,159 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\uncompr.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+PUBLIC _uncompress@16
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\uncompr.c
+; COMDAT _uncompress@16
+_TEXT SEGMENT
+_stream$ = -56 ; size = 56
+_dest$ = 8 ; size = 4
+_destLen$ = 12 ; size = 4
+_source$ = 16 ; size = 4
+_sourceLen$ = 20 ; size = 4
+_uncompress@16 PROC ; COMDAT
+
+; 29 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 83 ec 38 sub esp, 56 ; 00000038H
+
+; 30 : z_stream stream;
+; 31 : int err;
+; 32 :
+; 33 : stream.next_in = (z_const Bytef *)source;
+
+ 00009 8b 45 10 mov eax, DWORD PTR _source$[ebp]
+ 0000c 56 push esi
+ 0000d 57 push edi
+
+; 34 : stream.avail_in = (uInt)sourceLen;
+; 35 : /* Check for source > 64K on 16-bit machine: */
+; 36 : if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
+; 37 :
+; 38 : stream.next_out = dest;
+; 39 : stream.avail_out = (uInt)*destLen;
+
+ 0000e 8b 7d 0c mov edi, DWORD PTR _destLen$[ebp]
+ 00011 89 44 24 08 mov DWORD PTR _stream$[esp+64], eax
+ 00015 8b 45 14 mov eax, DWORD PTR _sourceLen$[ebp]
+ 00018 89 44 24 0c mov DWORD PTR _stream$[esp+68], eax
+ 0001c 8b 45 08 mov eax, DWORD PTR _dest$[ebp]
+ 0001f 89 44 24 14 mov DWORD PTR _stream$[esp+76], eax
+ 00023 8b 07 mov eax, DWORD PTR [edi]
+
+; 40 : if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+; 41 :
+; 42 : stream.zalloc = (alloc_func)0;
+; 43 : stream.zfree = (free_func)0;
+; 44 :
+; 45 : err = inflateInit(&stream);
+
+ 00025 6a 38 push 56 ; 00000038H
+ 00027 89 44 24 1c mov DWORD PTR _stream$[esp+84], eax
+ 0002b 8d 44 24 0c lea eax, DWORD PTR _stream$[esp+68]
+ 0002f 68 00 00 00 00 push OFFSET ??_C@_05IAIEPMAK@1?42?48?$AA@
+ 00034 50 push eax
+ 00035 c7 44 24 34 00
+ 00 00 00 mov DWORD PTR _stream$[esp+108], 0
+ 0003d c7 44 24 38 00
+ 00 00 00 mov DWORD PTR _stream$[esp+112], 0
+ 00045 e8 00 00 00 00 call _inflateInit_@12
+
+; 46 : if (err != Z_OK) return err;
+
+ 0004a 85 c0 test eax, eax
+ 0004c 75 55 jne SHORT $LN1@uncompress
+
+; 47 :
+; 48 : err = inflate(&stream, Z_FINISH);
+
+ 0004e 6a 04 push 4
+ 00050 8d 44 24 0c lea eax, DWORD PTR _stream$[esp+68]
+ 00054 50 push eax
+ 00055 e8 00 00 00 00 call _inflate@8
+ 0005a 8b f0 mov esi, eax
+
+; 49 : if (err != Z_STREAM_END) {
+
+ 0005c 83 fe 01 cmp esi, 1
+ 0005f 74 32 je SHORT $LN5@uncompress
+
+; 50 : inflateEnd(&stream);
+
+ 00061 8d 44 24 08 lea eax, DWORD PTR _stream$[esp+64]
+ 00065 50 push eax
+ 00066 e8 00 00 00 00 call _inflateEnd@4
+
+; 51 : if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
+
+ 0006b 83 fe 02 cmp esi, 2
+ 0006e 74 16 je SHORT $LN7@uncompress
+ 00070 83 fe fb cmp esi, -5 ; fffffffbH
+ 00073 75 07 jne SHORT $LN6@uncompress
+ 00075 83 7c 24 0c 00 cmp DWORD PTR _stream$[esp+68], 0
+ 0007a 74 0a je SHORT $LN7@uncompress
+$LN6@uncompress:
+
+; 53 : return err;
+
+ 0007c 8b c6 mov eax, esi
+
+; 58 : return err;
+; 59 : }
+
+ 0007e 5f pop edi
+ 0007f 5e pop esi
+ 00080 8b e5 mov esp, ebp
+ 00082 5d pop ebp
+ 00083 c2 10 00 ret 16 ; 00000010H
+$LN7@uncompress:
+
+; 52 : return Z_DATA_ERROR;
+
+ 00086 b8 fd ff ff ff mov eax, -3 ; fffffffdH
+
+; 58 : return err;
+; 59 : }
+
+ 0008b 5f pop edi
+ 0008c 5e pop esi
+ 0008d 8b e5 mov esp, ebp
+ 0008f 5d pop ebp
+ 00090 c2 10 00 ret 16 ; 00000010H
+$LN5@uncompress:
+
+; 54 : }
+; 55 : *destLen = stream.total_out;
+
+ 00093 8b 44 24 1c mov eax, DWORD PTR _stream$[esp+84]
+ 00097 89 07 mov DWORD PTR [edi], eax
+
+; 56 :
+; 57 : err = inflateEnd(&stream);
+
+ 00099 8d 44 24 08 lea eax, DWORD PTR _stream$[esp+64]
+ 0009d 50 push eax
+ 0009e e8 00 00 00 00 call _inflateEnd@4
+$LN1@uncompress:
+
+; 58 : return err;
+; 59 : }
+
+ 000a3 5f pop edi
+ 000a4 5e pop esi
+ 000a5 8b e5 mov esp, ebp
+ 000a7 5d pop ebp
+ 000a8 c2 10 00 ret 16 ; 00000010H
+_uncompress@16 ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/uncompr.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/uncompr.obj
new file mode 100644
index 0000000000..bf538d3fa9
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/uncompr.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/unzip.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/unzip.cod
new file mode 100644
index 0000000000..246916c093
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/unzip.cod
@@ -0,0 +1,7065 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+PUBLIC _unz_copyright
+ ORG $+5
+_unz_copyright DB ' unzip 1.01 Copyright 1998-2004 Gilles Vollant - http:'
+ DB '//www.winimage.com/zLibDll', 00H
+PUBLIC _unzGetGlobalComment@12
+PUBLIC _unzCloseCurrentFile@4
+PUBLIC _unzGetLocalExtrafield@12
+PUBLIC _unzeof@4
+PUBLIC _unztell64@4
+PUBLIC _unztell@4
+PUBLIC _unzReadCurrentFile@12
+PUBLIC _unzGetCurrentFileZStreamPos64@4
+PUBLIC _unzOpenCurrentFile2@16
+PUBLIC _unzOpenCurrentFilePassword@8
+PUBLIC _unzOpenCurrentFile@4
+PUBLIC _unzOpenCurrentFile3@20
+PUBLIC _unzGoToFilePos@8
+PUBLIC _unzGoToFilePos64@8
+PUBLIC _unzGetFilePos@8
+PUBLIC _unzGetFilePos64@8
+PUBLIC _unzLocateFile@12
+PUBLIC _unzGoToNextFile@4
+PUBLIC _unzGoToFirstFile@4
+PUBLIC _unzGetCurrentFileInfo@32
+PUBLIC _unzGetCurrentFileInfo64@32
+PUBLIC _unzGetGlobalInfo@8
+PUBLIC _unzGetGlobalInfo64@8
+PUBLIC _unzClose@4
+PUBLIC _unzOpen64@4
+PUBLIC _unzOpen@4
+PUBLIC _unzOpen2_64@8
+PUBLIC _unzOpen2@8
+PUBLIC _unzStringFileNameCompare@12
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unz64local_getByte
+_TEXT SEGMENT
+_c$ = -1 ; size = 1
+_pi$ = 8 ; size = 4
+_unz64local_getByte PROC ; COMDAT
+; _pzlib_filefunc_def$ = ecx
+; _filestream$ = edx
+
+; 213 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 56 push esi
+ 00005 57 push edi
+
+; 214 : unsigned char c;
+; 215 : int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1);
+
+ 00006 6a 01 push 1
+ 00008 8b f1 mov esi, ecx
+ 0000a 8d 45 ff lea eax, DWORD PTR _c$[ebp]
+ 0000d 50 push eax
+ 0000e 8b fa mov edi, edx
+ 00010 57 push edi
+ 00011 ff 76 1c push DWORD PTR [esi+28]
+ 00014 8b 46 04 mov eax, DWORD PTR [esi+4]
+ 00017 ff d0 call eax
+ 00019 83 c4 10 add esp, 16 ; 00000010H
+
+; 216 : if (err==1)
+
+ 0001c 83 f8 01 cmp eax, 1
+ 0001f 75 11 jne SHORT $LN2@unz64local
+
+; 217 : {
+; 218 : *pi = (int)c;
+
+ 00021 8b 45 08 mov eax, DWORD PTR _pi$[ebp]
+ 00024 0f b6 4d ff movzx ecx, BYTE PTR _c$[ebp]
+ 00028 5f pop edi
+ 00029 5e pop esi
+ 0002a 89 08 mov DWORD PTR [eax], ecx
+
+; 219 : return UNZ_OK;
+
+ 0002c 33 c0 xor eax, eax
+
+; 224 : return UNZ_ERRNO;
+; 225 : else
+; 226 : return UNZ_EOF;
+; 227 : }
+; 228 : }
+
+ 0002e 8b e5 mov esp, ebp
+ 00030 5d pop ebp
+ 00031 c3 ret 0
+$LN2@unz64local:
+
+; 220 : }
+; 221 : else
+; 222 : {
+; 223 : if (ZERROR64(*pzlib_filefunc_def,filestream))
+
+ 00032 8b 46 18 mov eax, DWORD PTR [esi+24]
+ 00035 57 push edi
+ 00036 ff 76 1c push DWORD PTR [esi+28]
+ 00039 ff d0 call eax
+ 0003b 83 c4 08 add esp, 8
+ 0003e f7 d8 neg eax
+ 00040 1b c0 sbb eax, eax
+ 00042 5f pop edi
+ 00043 5e pop esi
+
+; 224 : return UNZ_ERRNO;
+; 225 : else
+; 226 : return UNZ_EOF;
+; 227 : }
+; 228 : }
+
+ 00044 8b e5 mov esp, ebp
+ 00046 5d pop ebp
+ 00047 c3 ret 0
+_unz64local_getByte ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unz64local_getShort
+_TEXT SEGMENT
+_i$ = -4 ; size = 4
+_pX$ = 8 ; size = 4
+_unz64local_getShort PROC ; COMDAT
+; _pzlib_filefunc_def$ = ecx
+; _filestream$ = edx
+
+; 242 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 53 push ebx
+ 00005 56 push esi
+ 00006 57 push edi
+
+; 243 : uLong x ;
+; 244 : int i = 0;
+; 245 : int err;
+; 246 :
+; 247 : err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 00007 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 0000a c7 45 fc 00 00
+ 00 00 mov DWORD PTR _i$[ebp], 0
+ 00011 50 push eax
+ 00012 8b f2 mov esi, edx
+ 00014 8b f9 mov edi, ecx
+ 00016 e8 00 00 00 00 call _unz64local_getByte
+
+; 248 : x = (uLong)i;
+
+ 0001b 8b 5d fc mov ebx, DWORD PTR _i$[ebp]
+ 0001e 8b d0 mov edx, eax
+ 00020 83 c4 04 add esp, 4
+
+; 249 :
+; 250 : if (err==UNZ_OK)
+
+ 00023 85 d2 test edx, edx
+ 00025 75 2c jne SHORT $LN3@unz64local
+
+; 251 : err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 00027 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 0002a 8b d6 mov edx, esi
+ 0002c 50 push eax
+ 0002d 8b cf mov ecx, edi
+ 0002f e8 00 00 00 00 call _unz64local_getByte
+ 00034 8b d0 mov edx, eax
+ 00036 83 c4 04 add esp, 4
+
+; 252 : x |= ((uLong)i)<<8;
+; 253 :
+; 254 : if (err==UNZ_OK)
+
+ 00039 85 d2 test edx, edx
+ 0003b 75 16 jne SHORT $LN3@unz64local
+
+; 255 : *pX = x;
+
+ 0003d 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 00040 8b 45 08 mov eax, DWORD PTR _pX$[ebp]
+ 00043 c1 e1 08 shl ecx, 8
+ 00046 5f pop edi
+ 00047 0b cb or ecx, ebx
+ 00049 5e pop esi
+ 0004a 89 08 mov DWORD PTR [eax], ecx
+
+; 258 : return err;
+
+ 0004c 8b c2 mov eax, edx
+ 0004e 5b pop ebx
+
+; 259 : }
+
+ 0004f 8b e5 mov esp, ebp
+ 00051 5d pop ebp
+ 00052 c3 ret 0
+$LN3@unz64local:
+
+; 256 : else
+; 257 : *pX = 0;
+
+ 00053 8b 45 08 mov eax, DWORD PTR _pX$[ebp]
+ 00056 5f pop edi
+ 00057 5e pop esi
+ 00058 5b pop ebx
+ 00059 c7 00 00 00 00
+ 00 mov DWORD PTR [eax], 0
+
+; 258 : return err;
+
+ 0005f 8b c2 mov eax, edx
+
+; 259 : }
+
+ 00061 8b e5 mov esp, ebp
+ 00063 5d pop ebp
+ 00064 c3 ret 0
+_unz64local_getShort ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unz64local_getLong
+_TEXT SEGMENT
+_i$ = -4 ; size = 4
+_pX$ = 8 ; size = 4
+_unz64local_getLong PROC ; COMDAT
+; _pzlib_filefunc_def$ = ecx
+; _filestream$ = edx
+
+; 269 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 53 push ebx
+ 00005 56 push esi
+ 00006 57 push edi
+
+; 270 : uLong x ;
+; 271 : int i = 0;
+; 272 : int err;
+; 273 :
+; 274 : err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 00007 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 0000a c7 45 fc 00 00
+ 00 00 mov DWORD PTR _i$[ebp], 0
+ 00011 50 push eax
+ 00012 8b fa mov edi, edx
+ 00014 8b d9 mov ebx, ecx
+ 00016 e8 00 00 00 00 call _unz64local_getByte
+
+; 275 : x = (uLong)i;
+
+ 0001b 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 0001e 8b d0 mov edx, eax
+ 00020 83 c4 04 add esp, 4
+ 00023 8b f1 mov esi, ecx
+
+; 276 :
+; 277 : if (err==UNZ_OK)
+
+ 00025 85 d2 test edx, edx
+ 00027 75 15 jne SHORT $LN2@unz64local
+
+; 278 : err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 00029 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 0002c 8b d7 mov edx, edi
+ 0002e 50 push eax
+ 0002f 8b cb mov ecx, ebx
+ 00031 e8 00 00 00 00 call _unz64local_getByte
+ 00036 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 00039 83 c4 04 add esp, 4
+ 0003c 8b d0 mov edx, eax
+$LN2@unz64local:
+
+; 279 : x |= ((uLong)i)<<8;
+
+ 0003e 8b c1 mov eax, ecx
+ 00040 c1 e0 08 shl eax, 8
+ 00043 0b f0 or esi, eax
+
+; 280 :
+; 281 : if (err==UNZ_OK)
+
+ 00045 85 d2 test edx, edx
+ 00047 75 15 jne SHORT $LN3@unz64local
+
+; 282 : err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 00049 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 0004c 8b d7 mov edx, edi
+ 0004e 50 push eax
+ 0004f 8b cb mov ecx, ebx
+ 00051 e8 00 00 00 00 call _unz64local_getByte
+ 00056 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 00059 83 c4 04 add esp, 4
+ 0005c 8b d0 mov edx, eax
+$LN3@unz64local:
+
+; 283 : x |= ((uLong)i)<<16;
+
+ 0005e c1 e1 10 shl ecx, 16 ; 00000010H
+ 00061 0b f1 or esi, ecx
+
+; 284 :
+; 285 : if (err==UNZ_OK)
+
+ 00063 85 d2 test edx, edx
+ 00065 75 2c jne SHORT $LN5@unz64local
+
+; 286 : err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 00067 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 0006a 8b d7 mov edx, edi
+ 0006c 50 push eax
+ 0006d 8b cb mov ecx, ebx
+ 0006f e8 00 00 00 00 call _unz64local_getByte
+ 00074 8b d0 mov edx, eax
+ 00076 83 c4 04 add esp, 4
+
+; 287 : x += ((uLong)i)<<24;
+; 288 :
+; 289 : if (err==UNZ_OK)
+
+ 00079 85 d2 test edx, edx
+ 0007b 75 16 jne SHORT $LN5@unz64local
+
+; 290 : *pX = x;
+
+ 0007d 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 00080 8b 45 08 mov eax, DWORD PTR _pX$[ebp]
+ 00083 c1 e1 18 shl ecx, 24 ; 00000018H
+ 00086 5f pop edi
+ 00087 03 ce add ecx, esi
+ 00089 5e pop esi
+ 0008a 89 08 mov DWORD PTR [eax], ecx
+
+; 293 : return err;
+
+ 0008c 8b c2 mov eax, edx
+ 0008e 5b pop ebx
+
+; 294 : }
+
+ 0008f 8b e5 mov esp, ebp
+ 00091 5d pop ebp
+ 00092 c3 ret 0
+$LN5@unz64local:
+
+; 291 : else
+; 292 : *pX = 0;
+
+ 00093 8b 45 08 mov eax, DWORD PTR _pX$[ebp]
+ 00096 5f pop edi
+ 00097 5e pop esi
+ 00098 5b pop ebx
+ 00099 c7 00 00 00 00
+ 00 mov DWORD PTR [eax], 0
+
+; 293 : return err;
+
+ 0009f 8b c2 mov eax, edx
+
+; 294 : }
+
+ 000a1 8b e5 mov esp, ebp
+ 000a3 5d pop ebp
+ 000a4 c3 ret 0
+_unz64local_getLong ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unz64local_getLong64
+_TEXT SEGMENT
+_pzlib_filefunc_def$1$ = -12 ; size = 4
+_filestream$1$ = -8 ; size = 4
+_i$ = -4 ; size = 4
+_pX$ = 8 ; size = 4
+_unz64local_getLong64 PROC ; COMDAT
+; _pzlib_filefunc_def$ = ecx
+; _filestream$ = edx
+
+; 305 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 0c sub esp, 12 ; 0000000cH
+ 00006 53 push ebx
+ 00007 8b c2 mov eax, edx
+ 00009 89 4d f4 mov DWORD PTR _pzlib_filefunc_def$1$[ebp], ecx
+ 0000c 56 push esi
+
+; 306 : ZPOS64_T x ;
+; 307 : int i = 0;
+; 308 : int err;
+; 309 :
+; 310 : err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 0000d 8d 55 fc lea edx, DWORD PTR _i$[ebp]
+ 00010 89 45 f8 mov DWORD PTR _filestream$1$[ebp], eax
+ 00013 57 push edi
+ 00014 52 push edx
+ 00015 8b d0 mov edx, eax
+ 00017 c7 45 fc 00 00
+ 00 00 mov DWORD PTR _i$[ebp], 0
+ 0001e e8 00 00 00 00 call _unz64local_getByte
+
+; 311 : x = (ZPOS64_T)i;
+
+ 00023 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 00026 8b f0 mov esi, eax
+ 00028 8b c1 mov eax, ecx
+ 0002a 83 c4 04 add esp, 4
+ 0002d 99 cdq
+ 0002e 8b f8 mov edi, eax
+ 00030 8b da mov ebx, edx
+
+; 312 :
+; 313 : if (err==UNZ_OK)
+
+ 00032 85 f6 test esi, esi
+ 00034 75 17 jne SHORT $LN2@unz64local
+
+; 314 : err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 00036 8b 55 f8 mov edx, DWORD PTR _filestream$1$[ebp]
+ 00039 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 0003c 8b 4d f4 mov ecx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 0003f 50 push eax
+ 00040 e8 00 00 00 00 call _unz64local_getByte
+ 00045 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 00048 83 c4 04 add esp, 4
+ 0004b 8b f0 mov esi, eax
+$LN2@unz64local:
+
+; 315 : x |= ((ZPOS64_T)i)<<8;
+
+ 0004d 8b c1 mov eax, ecx
+ 0004f 99 cdq
+ 00050 0f a4 c2 08 shld edx, eax, 8
+ 00054 c1 e0 08 shl eax, 8
+ 00057 0b da or ebx, edx
+ 00059 0b f8 or edi, eax
+
+; 316 :
+; 317 : if (err==UNZ_OK)
+
+ 0005b 85 f6 test esi, esi
+ 0005d 75 17 jne SHORT $LN3@unz64local
+
+; 318 : err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 0005f 8b 55 f8 mov edx, DWORD PTR _filestream$1$[ebp]
+ 00062 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 00065 8b 4d f4 mov ecx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 00068 50 push eax
+ 00069 e8 00 00 00 00 call _unz64local_getByte
+ 0006e 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 00071 83 c4 04 add esp, 4
+ 00074 8b f0 mov esi, eax
+$LN3@unz64local:
+
+; 319 : x |= ((ZPOS64_T)i)<<16;
+
+ 00076 8b c1 mov eax, ecx
+ 00078 99 cdq
+ 00079 0f a4 c2 10 shld edx, eax, 16
+ 0007d c1 e0 10 shl eax, 16 ; 00000010H
+ 00080 0b da or ebx, edx
+ 00082 0b f8 or edi, eax
+
+; 320 :
+; 321 : if (err==UNZ_OK)
+
+ 00084 85 f6 test esi, esi
+ 00086 75 17 jne SHORT $LN4@unz64local
+
+; 322 : err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 00088 8b 55 f8 mov edx, DWORD PTR _filestream$1$[ebp]
+ 0008b 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 0008e 8b 4d f4 mov ecx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 00091 50 push eax
+ 00092 e8 00 00 00 00 call _unz64local_getByte
+ 00097 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 0009a 83 c4 04 add esp, 4
+ 0009d 8b f0 mov esi, eax
+$LN4@unz64local:
+
+; 323 : x |= ((ZPOS64_T)i)<<24;
+
+ 0009f 8b c1 mov eax, ecx
+ 000a1 99 cdq
+ 000a2 0f a4 c2 18 shld edx, eax, 24
+ 000a6 c1 e0 18 shl eax, 24 ; 00000018H
+ 000a9 0b da or ebx, edx
+ 000ab 0b f8 or edi, eax
+
+; 324 :
+; 325 : if (err==UNZ_OK)
+
+ 000ad 85 f6 test esi, esi
+ 000af 75 17 jne SHORT $LN5@unz64local
+
+; 326 : err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 000b1 8b 55 f8 mov edx, DWORD PTR _filestream$1$[ebp]
+ 000b4 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 000b7 8b 4d f4 mov ecx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 000ba 50 push eax
+ 000bb e8 00 00 00 00 call _unz64local_getByte
+ 000c0 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 000c3 83 c4 04 add esp, 4
+ 000c6 8b f0 mov esi, eax
+$LN5@unz64local:
+
+; 327 : x |= ((ZPOS64_T)i)<<32;
+
+ 000c8 8b c1 mov eax, ecx
+ 000ca 99 cdq
+ 000cb 0b d8 or ebx, eax
+
+; 328 :
+; 329 : if (err==UNZ_OK)
+
+ 000cd 85 f6 test esi, esi
+ 000cf 75 17 jne SHORT $LN6@unz64local
+
+; 330 : err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 000d1 8b 55 f8 mov edx, DWORD PTR _filestream$1$[ebp]
+ 000d4 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 000d7 8b 4d f4 mov ecx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 000da 50 push eax
+ 000db e8 00 00 00 00 call _unz64local_getByte
+ 000e0 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 000e3 83 c4 04 add esp, 4
+ 000e6 8b f0 mov esi, eax
+$LN6@unz64local:
+
+; 331 : x |= ((ZPOS64_T)i)<<40;
+
+ 000e8 8b c1 mov eax, ecx
+ 000ea 99 cdq
+ 000eb c1 e0 08 shl eax, 8
+ 000ee 0b d8 or ebx, eax
+
+; 332 :
+; 333 : if (err==UNZ_OK)
+
+ 000f0 85 f6 test esi, esi
+ 000f2 75 17 jne SHORT $LN7@unz64local
+
+; 334 : err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 000f4 8b 55 f8 mov edx, DWORD PTR _filestream$1$[ebp]
+ 000f7 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 000fa 8b 4d f4 mov ecx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 000fd 50 push eax
+ 000fe e8 00 00 00 00 call _unz64local_getByte
+ 00103 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 00106 83 c4 04 add esp, 4
+ 00109 8b f0 mov esi, eax
+$LN7@unz64local:
+
+; 335 : x |= ((ZPOS64_T)i)<<48;
+
+ 0010b 8b c1 mov eax, ecx
+ 0010d 99 cdq
+ 0010e c1 e0 10 shl eax, 16 ; 00000010H
+ 00111 0b d8 or ebx, eax
+
+; 336 :
+; 337 : if (err==UNZ_OK)
+
+ 00113 85 f6 test esi, esi
+ 00115 75 36 jne SHORT $LN9@unz64local
+
+; 338 : err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 00117 8b 55 f8 mov edx, DWORD PTR _filestream$1$[ebp]
+ 0011a 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 0011d 8b 4d f4 mov ecx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 00120 50 push eax
+ 00121 e8 00 00 00 00 call _unz64local_getByte
+ 00126 8b f0 mov esi, eax
+ 00128 83 c4 04 add esp, 4
+
+; 339 : x |= ((ZPOS64_T)i)<<56;
+; 340 :
+; 341 : if (err==UNZ_OK)
+
+ 0012b 85 f6 test esi, esi
+ 0012d 75 1e jne SHORT $LN9@unz64local
+
+; 342 : *pX = x;
+
+ 0012f 8b 45 fc mov eax, DWORD PTR _i$[ebp]
+ 00132 8b 4d 08 mov ecx, DWORD PTR _pX$[ebp]
+ 00135 99 cdq
+ 00136 33 d2 xor edx, edx
+ 00138 c1 e0 18 shl eax, 24 ; 00000018H
+ 0013b 0b d7 or edx, edi
+ 0013d 0b c3 or eax, ebx
+ 0013f 89 41 04 mov DWORD PTR [ecx+4], eax
+
+; 345 : return err;
+
+ 00142 8b c6 mov eax, esi
+ 00144 89 11 mov DWORD PTR [ecx], edx
+
+; 346 : }
+
+ 00146 5f pop edi
+ 00147 5e pop esi
+ 00148 5b pop ebx
+ 00149 8b e5 mov esp, ebp
+ 0014b 5d pop ebp
+ 0014c c3 ret 0
+$LN9@unz64local:
+
+; 343 : else
+; 344 : *pX = 0;
+
+ 0014d 8b 45 08 mov eax, DWORD PTR _pX$[ebp]
+
+; 346 : }
+
+ 00150 5f pop edi
+ 00151 c7 00 00 00 00
+ 00 mov DWORD PTR [eax], 0
+ 00157 c7 40 04 00 00
+ 00 00 mov DWORD PTR [eax+4], 0
+ 0015e 8b c6 mov eax, esi
+ 00160 5e pop esi
+ 00161 5b pop ebx
+ 00162 8b e5 mov esp, ebp
+ 00164 5d pop ebp
+ 00165 c3 ret 0
+_unz64local_getLong64 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _strcmpcasenosensitive_internal
+_TEXT SEGMENT
+_strcmpcasenosensitive_internal PROC ; COMDAT
+; _fileName1$ = ecx
+; _fileName2$ = edx
+
+; 367 : }
+
+ 00000 2b ca sub ecx, edx
+ 00002 53 push ebx
+$LL2@strcmpcase:
+
+; 351 : for (;;)
+; 352 : {
+; 353 : char c1=*(fileName1++);
+; 354 : char c2=*(fileName2++);
+
+ 00003 8a 24 11 mov ah, BYTE PTR [ecx+edx]
+ 00006 8d 52 01 lea edx, DWORD PTR [edx+1]
+ 00009 8a 5a ff mov bl, BYTE PTR [edx-1]
+
+; 355 : if ((c1>='a') && (c1<='z'))
+
+ 0000c 8a c4 mov al, ah
+ 0000e 2c 61 sub al, 97 ; 00000061H
+ 00010 3c 19 cmp al, 25 ; 00000019H
+ 00012 77 03 ja SHORT $LN5@strcmpcase
+
+; 356 : c1 -= 0x20;
+
+ 00014 80 c4 e0 add ah, -32 ; ffffffe0H
+$LN5@strcmpcase:
+
+; 357 : if ((c2>='a') && (c2<='z'))
+
+ 00017 8a c3 mov al, bl
+ 00019 2c 61 sub al, 97 ; 00000061H
+ 0001b 3c 19 cmp al, 25 ; 00000019H
+ 0001d 77 03 ja SHORT $LN6@strcmpcase
+
+; 358 : c2 -= 0x20;
+
+ 0001f 80 c3 e0 add bl, -32 ; ffffffe0H
+$LN6@strcmpcase:
+
+; 359 : if (c1=='\0')
+
+ 00022 84 e4 test ah, ah
+ 00024 74 16 je SHORT $LN14@strcmpcase
+
+; 361 : if (c2=='\0')
+
+ 00026 84 db test bl, bl
+ 00028 74 06 je SHORT $LN15@strcmpcase
+
+; 362 : return 1;
+; 363 : if (c1<c2)
+
+ 0002a 3a e3 cmp ah, bl
+ 0002c 7c 09 jl SHORT $LN16@strcmpcase
+
+; 365 : if (c1>c2)
+
+ 0002e 7e d3 jle SHORT $LL2@strcmpcase
+$LN15@strcmpcase:
+
+; 366 : return 1;
+
+ 00030 b8 01 00 00 00 mov eax, 1
+ 00035 5b pop ebx
+
+; 368 : }
+
+ 00036 c3 ret 0
+$LN16@strcmpcase:
+
+; 364 : return -1;
+
+ 00037 83 c8 ff or eax, -1
+ 0003a 5b pop ebx
+
+; 368 : }
+
+ 0003b c3 ret 0
+$LN14@strcmpcase:
+
+; 360 : return ((c2=='\0') ? 0 : -1);
+
+ 0003c 0f be c3 movsx eax, bl
+ 0003f f7 d8 neg eax
+ 00041 5b pop ebx
+ 00042 1b c0 sbb eax, eax
+
+; 368 : }
+
+ 00044 c3 ret 0
+_strcmpcasenosensitive_internal ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzStringFileNameCompare@12
+_TEXT SEGMENT
+_fileName1$ = 8 ; size = 4
+_fileName2$ = 12 ; size = 4
+_iCaseSensitivity$ = 16 ; size = 4
+_unzStringFileNameCompare@12 PROC ; COMDAT
+
+; 394 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 395 : if (iCaseSensitivity==0)
+
+ 00003 8b 45 10 mov eax, DWORD PTR _iCaseSensitivity$[ebp]
+ 00006 85 c0 test eax, eax
+ 00008 74 36 je SHORT $LN3@unzStringF
+
+; 396 : iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE;
+; 397 :
+; 398 : if (iCaseSensitivity==1)
+
+ 0000a 83 f8 01 cmp eax, 1
+ 0000d 75 31 jne SHORT $LN3@unzStringF
+
+; 399 : return strcmp(fileName1,fileName2);
+
+ 0000f 8b 45 0c mov eax, DWORD PTR _fileName2$[ebp]
+ 00012 8b 4d 08 mov ecx, DWORD PTR _fileName1$[ebp]
+$LL5@unzStringF:
+ 00015 8a 11 mov dl, BYTE PTR [ecx]
+ 00017 3a 10 cmp dl, BYTE PTR [eax]
+ 00019 75 1c jne SHORT $LN6@unzStringF
+ 0001b 84 d2 test dl, dl
+ 0001d 74 12 je SHORT $LN7@unzStringF
+ 0001f 8a 51 01 mov dl, BYTE PTR [ecx+1]
+ 00022 3a 50 01 cmp dl, BYTE PTR [eax+1]
+ 00025 75 10 jne SHORT $LN6@unzStringF
+ 00027 83 c1 02 add ecx, 2
+ 0002a 83 c0 02 add eax, 2
+ 0002d 84 d2 test dl, dl
+ 0002f 75 e4 jne SHORT $LL5@unzStringF
+$LN7@unzStringF:
+ 00031 33 c0 xor eax, eax
+
+; 402 : }
+
+ 00033 5d pop ebp
+ 00034 c2 0c 00 ret 12 ; 0000000cH
+$LN6@unzStringF:
+
+; 399 : return strcmp(fileName1,fileName2);
+
+ 00037 1b c0 sbb eax, eax
+ 00039 83 c8 01 or eax, 1
+
+; 402 : }
+
+ 0003c 5d pop ebp
+ 0003d c2 0c 00 ret 12 ; 0000000cH
+$LN3@unzStringF:
+
+; 400 :
+; 401 : return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2);
+
+ 00040 8b 55 0c mov edx, DWORD PTR _fileName2$[ebp]
+ 00043 8b 4d 08 mov ecx, DWORD PTR _fileName1$[ebp]
+ 00046 e8 00 00 00 00 call _strcmpcasenosensitive_internal
+
+; 402 : }
+
+ 0004b 5d pop ebp
+ 0004c c2 0c 00 ret 12 ; 0000000cH
+_unzStringFileNameCompare@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unz64local_SearchCentralDir
+_TEXT SEGMENT
+_uPosFound$ = -48 ; size = 8
+_uReadPos$1$ = -44 ; size = 4
+_uBackRead$2$ = -40 ; size = 4
+_uReadPos$2$ = -36 ; size = 4
+_pzlib_filefunc_def$1$ = -32 ; size = 4
+_filestream$1$ = -28 ; size = 4
+_uSizeFile$1$ = -24 ; size = 4
+_uSizeFile$2$ = -20 ; size = 4
+_uPosFound$1$ = -16 ; size = 4
+_uPosFound$2$ = -12 ; size = 4
+_uMaxBack$1$ = -8 ; size = 4
+_uMaxBack$2$ = -4 ; size = 4
+_unz64local_SearchCentralDir PROC ; COMDAT
+; _pzlib_filefunc_def$ = ecx
+; _filestream$ = edx
+
+; 414 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 34 sub esp, 52 ; 00000034H
+ 00006 53 push ebx
+ 00007 56 push esi
+ 00008 57 push edi
+
+; 415 : unsigned char* buf;
+; 416 : ZPOS64_T uSizeFile;
+; 417 : ZPOS64_T uBackRead;
+; 418 : ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
+
+ 00009 33 c0 xor eax, eax
+ 0000b 8b f2 mov esi, edx
+
+; 419 : ZPOS64_T uPosFound=0;
+; 420 :
+; 421 : if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+
+ 0000d 6a 02 push 2
+ 0000f 50 push eax
+ 00010 8b d9 mov ebx, ecx
+ 00012 89 75 e4 mov DWORD PTR _filestream$1$[ebp], esi
+ 00015 0f 57 c0 xorps xmm0, xmm0
+ 00018 89 5d e0 mov DWORD PTR _pzlib_filefunc_def$1$[ebp], ebx
+ 0001b bf ff ff 00 00 mov edi, 65535 ; 0000ffffH
+ 00020 89 45 fc mov DWORD PTR _uMaxBack$2$[ebp], eax
+ 00023 50 push eax
+ 00024 89 7d f8 mov DWORD PTR _uMaxBack$1$[ebp], edi
+ 00027 66 0f 13 45 d0 movlpd QWORD PTR _uPosFound$[ebp], xmm0
+ 0002c e8 00 00 00 00 call _call_zseek64
+ 00031 83 c4 0c add esp, 12 ; 0000000cH
+ 00034 85 c0 test eax, eax
+ 00036 74 0b je SHORT $LN7@unz64local
+
+; 422 : return 0;
+
+ 00038 33 c0 xor eax, eax
+$LN43@unz64local:
+ 0003a 33 d2 xor edx, edx
+
+; 467 : }
+
+ 0003c 5f pop edi
+ 0003d 5e pop esi
+ 0003e 5b pop ebx
+ 0003f 8b e5 mov esp, ebp
+ 00041 5d pop ebp
+ 00042 c3 ret 0
+$LN7@unz64local:
+
+; 423 :
+; 424 :
+; 425 : uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+
+ 00043 8b d6 mov edx, esi
+ 00045 8b cb mov ecx, ebx
+ 00047 e8 00 00 00 00 call _call_ztell64
+ 0004c 8b ca mov ecx, edx
+ 0004e 89 45 e8 mov DWORD PTR _uSizeFile$1$[ebp], eax
+ 00051 89 4d ec mov DWORD PTR _uSizeFile$2$[ebp], ecx
+
+; 426 :
+; 427 : if (uMaxBack>uSizeFile)
+
+ 00054 85 c9 test ecx, ecx
+ 00056 77 11 ja SHORT $LN8@unz64local
+ 00058 72 07 jb SHORT $LN33@unz64local
+ 0005a 3d ff ff 00 00 cmp eax, 65535 ; 0000ffffH
+ 0005f 73 08 jae SHORT $LN8@unz64local
+$LN33@unz64local:
+
+; 428 : uMaxBack = uSizeFile;
+
+ 00061 8b f8 mov edi, eax
+ 00063 89 4d fc mov DWORD PTR _uMaxBack$2$[ebp], ecx
+ 00066 89 7d f8 mov DWORD PTR _uMaxBack$1$[ebp], edi
+$LN8@unz64local:
+
+; 429 :
+; 430 : buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+
+ 00069 68 04 04 00 00 push 1028 ; 00000404H
+ 0006e ff 15 00 00 00
+ 00 call DWORD PTR __imp__malloc
+ 00074 8b f0 mov esi, eax
+ 00076 83 c4 04 add esp, 4
+
+; 431 : if (buf==NULL)
+; 432 : return 0;
+
+ 00079 33 c0 xor eax, eax
+ 0007b 85 f6 test esi, esi
+ 0007d 74 bb je SHORT $LN43@unz64local
+
+; 433 :
+; 434 : uBackRead = 4;
+; 435 : while (uBackRead<uMaxBack)
+
+ 0007f 8b 4d fc mov ecx, DWORD PTR _uMaxBack$2$[ebp]
+ 00082 8d 58 04 lea ebx, DWORD PTR [eax+4]
+ 00085 3b c1 cmp eax, ecx
+ 00087 0f 87 f3 00 00
+ 00 ja $LN42@unz64local
+ 0008d 72 08 jb SHORT $LN40@unz64local
+ 0008f 3b df cmp ebx, edi
+ 00091 0f 83 e9 00 00
+ 00 jae $LN42@unz64local
+$LN40@unz64local:
+ 00097 8b 55 d4 mov edx, DWORD PTR _uPosFound$[ebp+4]
+ 0009a 89 55 f0 mov DWORD PTR _uPosFound$1$[ebp], edx
+ 0009d 8b 55 d0 mov edx, DWORD PTR _uPosFound$[ebp]
+ 000a0 89 55 f4 mov DWORD PTR _uPosFound$2$[ebp], edx
+$LL2@unz64local:
+
+; 436 : {
+; 437 : uLong uReadSize;
+; 438 : ZPOS64_T uReadPos ;
+; 439 : int i;
+; 440 : if (uBackRead+BUFREADCOMMENT>uMaxBack)
+
+ 000a3 81 c3 00 04 00
+ 00 add ebx, 1024 ; 00000400H
+ 000a9 83 d0 00 adc eax, 0
+ 000ac 89 45 d8 mov DWORD PTR _uBackRead$2$[ebp], eax
+ 000af 3b c1 cmp eax, ecx
+ 000b1 72 0d jb SHORT $LN11@unz64local
+ 000b3 77 04 ja SHORT $LN35@unz64local
+ 000b5 3b df cmp ebx, edi
+ 000b7 76 07 jbe SHORT $LN11@unz64local
+$LN35@unz64local:
+
+; 441 : uBackRead = uMaxBack;
+
+ 000b9 8b df mov ebx, edi
+ 000bb 89 4d d8 mov DWORD PTR _uBackRead$2$[ebp], ecx
+ 000be 8b c1 mov eax, ecx
+$LN11@unz64local:
+
+; 442 : else
+; 443 : uBackRead+=BUFREADCOMMENT;
+; 444 : uReadPos = uSizeFile-uBackRead ;
+
+ 000c0 8b 4d e8 mov ecx, DWORD PTR _uSizeFile$1$[ebp]
+ 000c3 8b d1 mov edx, ecx
+ 000c5 8b 7d ec mov edi, DWORD PTR _uSizeFile$2$[ebp]
+ 000c8 2b d3 sub edx, ebx
+ 000ca 89 55 d4 mov DWORD PTR _uReadPos$1$[ebp], edx
+ 000cd 1b f8 sbb edi, eax
+
+; 445 :
+; 446 : uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+
+ 000cf 8b 45 ec mov eax, DWORD PTR _uSizeFile$2$[ebp]
+ 000d2 2b ca sub ecx, edx
+ 000d4 89 7d dc mov DWORD PTR _uReadPos$2$[ebp], edi
+ 000d7 1b c7 sbb eax, edi
+ 000d9 85 c0 test eax, eax
+ 000db 72 11 jb SHORT $LN18@unz64local
+ 000dd 77 08 ja SHORT $LN36@unz64local
+ 000df 81 f9 04 04 00
+ 00 cmp ecx, 1028 ; 00000404H
+ 000e5 76 07 jbe SHORT $LN18@unz64local
+$LN36@unz64local:
+ 000e7 bf 04 04 00 00 mov edi, 1028 ; 00000404H
+ 000ec eb 05 jmp SHORT $LN19@unz64local
+$LN18@unz64local:
+ 000ee 8b 7d e8 mov edi, DWORD PTR _uSizeFile$1$[ebp]
+ 000f1 2b fa sub edi, edx
+$LN19@unz64local:
+
+; 447 : (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+; 448 : if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 000f3 8b 4d e0 mov ecx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 000f6 6a 00 push 0
+ 000f8 ff 75 dc push DWORD PTR _uReadPos$2$[ebp]
+ 000fb 52 push edx
+ 000fc 8b 55 e4 mov edx, DWORD PTR _filestream$1$[ebp]
+ 000ff e8 00 00 00 00 call _call_zseek64
+ 00104 83 c4 0c add esp, 12 ; 0000000cH
+ 00107 85 c0 test eax, eax
+ 00109 0f 85 7d 00 00
+ 00 jne $LN37@unz64local
+
+; 449 : break;
+; 450 :
+; 451 : if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+
+ 0010f 8b 45 e0 mov eax, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 00112 57 push edi
+ 00113 56 push esi
+ 00114 ff 75 e4 push DWORD PTR _filestream$1$[ebp]
+ 00117 ff 70 1c push DWORD PTR [eax+28]
+ 0011a 8b 40 04 mov eax, DWORD PTR [eax+4]
+ 0011d ff d0 call eax
+ 0011f 83 c4 10 add esp, 16 ; 00000010H
+ 00122 3b c7 cmp eax, edi
+ 00124 75 66 jne SHORT $LN37@unz64local
+
+; 452 : break;
+; 453 :
+; 454 : for (i=(int)uReadSize-3; (i--)>0;)
+
+ 00126 8d 47 fd lea eax, DWORD PTR [edi-3]
+ 00129 85 c0 test eax, eax
+ 0012b 7e 36 jle SHORT $LN32@unz64local
+ 0012d 0f 1f 00 npad 3
+$LL4@unz64local:
+ 00130 48 dec eax
+
+; 455 : if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
+; 456 : ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
+
+ 00131 80 3c 30 50 cmp BYTE PTR [eax+esi], 80 ; 00000050H
+ 00135 75 15 jne SHORT $LN14@unz64local
+ 00137 80 7c 30 01 4b cmp BYTE PTR [eax+esi+1], 75 ; 0000004bH
+ 0013c 75 0e jne SHORT $LN14@unz64local
+ 0013e 80 7c 30 02 05 cmp BYTE PTR [eax+esi+2], 5
+ 00143 75 07 jne SHORT $LN14@unz64local
+ 00145 80 7c 30 03 06 cmp BYTE PTR [eax+esi+3], 6
+ 0014a 74 06 je SHORT $LN22@unz64local
+$LN14@unz64local:
+
+; 452 : break;
+; 453 :
+; 454 : for (i=(int)uReadSize-3; (i--)>0;)
+
+ 0014c 85 c0 test eax, eax
+ 0014e 7f e0 jg SHORT $LL4@unz64local
+ 00150 eb 11 jmp SHORT $LN32@unz64local
+$LN22@unz64local:
+
+; 457 : {
+; 458 : uPosFound = uReadPos+i;
+
+ 00152 99 cdq
+ 00153 03 45 d4 add eax, DWORD PTR _uReadPos$1$[ebp]
+ 00156 89 45 f4 mov DWORD PTR _uPosFound$2$[ebp], eax
+ 00159 13 55 dc adc edx, DWORD PTR _uReadPos$2$[ebp]
+
+; 459 : break;
+; 460 : }
+; 461 :
+; 462 : if (uPosFound!=0)
+
+ 0015c 0b c2 or eax, edx
+ 0015e 89 55 f0 mov DWORD PTR _uPosFound$1$[ebp], edx
+ 00161 75 29 jne SHORT $LN37@unz64local
+$LN32@unz64local:
+
+; 433 :
+; 434 : uBackRead = 4;
+; 435 : while (uBackRead<uMaxBack)
+
+ 00163 8b 45 d8 mov eax, DWORD PTR _uBackRead$2$[ebp]
+ 00166 8b 4d fc mov ecx, DWORD PTR _uMaxBack$2$[ebp]
+ 00169 8b 7d f8 mov edi, DWORD PTR _uMaxBack$1$[ebp]
+ 0016c 3b c1 cmp eax, ecx
+ 0016e 0f 82 2f ff ff
+ ff jb $LL2@unz64local
+ 00174 77 16 ja SHORT $LN37@unz64local
+ 00176 3b df cmp ebx, edi
+ 00178 0f 82 25 ff ff
+ ff jb $LL2@unz64local
+ 0017e eb 0c jmp SHORT $LN37@unz64local
+$LN42@unz64local:
+ 00180 8b 45 d4 mov eax, DWORD PTR _uPosFound$[ebp+4]
+ 00183 89 45 f0 mov DWORD PTR _uPosFound$1$[ebp], eax
+ 00186 8b 45 d0 mov eax, DWORD PTR _uPosFound$[ebp]
+ 00189 89 45 f4 mov DWORD PTR _uPosFound$2$[ebp], eax
+$LN37@unz64local:
+
+; 463 : break;
+; 464 : }
+; 465 : TRYFREE(buf);
+
+ 0018c 56 push esi
+ 0018d ff 15 00 00 00
+ 00 call DWORD PTR __imp__free
+
+; 466 : return uPosFound;
+
+ 00193 8b 45 f4 mov eax, DWORD PTR _uPosFound$2$[ebp]
+ 00196 83 c4 04 add esp, 4
+ 00199 8b 55 f0 mov edx, DWORD PTR _uPosFound$1$[ebp]
+
+; 467 : }
+
+ 0019c 5f pop edi
+ 0019d 5e pop esi
+ 0019e 5b pop ebx
+ 0019f 8b e5 mov esp, ebp
+ 001a1 5d pop ebp
+ 001a2 c3 ret 0
+_unz64local_SearchCentralDir ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unz64local_SearchCentralDir64
+_TEXT SEGMENT
+_relativeOffset$ = -48 ; size = 8
+_uPosFound$ = -48 ; size = 8
+_uReadPos$1$ = -44 ; size = 4
+_uBackRead$2$ = -40 ; size = 4
+_uReadPos$2$ = -36 ; size = 4
+_uSizeFile$1$ = -32 ; size = 4
+_uSizeFile$2$ = -28 ; size = 4
+_uPosFound$1$ = -24 ; size = 4
+_uPosFound$2$ = -20 ; size = 4
+_uMaxBack$2$ = -16 ; size = 4
+_filestream$1$ = -12 ; size = 4
+_uMaxBack$1$ = -8 ; size = 4
+_uL$ = -8 ; size = 4
+_pzlib_filefunc_def$1$ = -4 ; size = 4
+_unz64local_SearchCentralDir64 PROC ; COMDAT
+; _pzlib_filefunc_def$ = ecx
+; _filestream$ = edx
+
+; 480 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 34 sub esp, 52 ; 00000034H
+ 00006 53 push ebx
+ 00007 56 push esi
+ 00008 57 push edi
+
+; 481 : unsigned char* buf;
+; 482 : ZPOS64_T uSizeFile;
+; 483 : ZPOS64_T uBackRead;
+; 484 : ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
+
+ 00009 b8 ff ff 00 00 mov eax, 65535 ; 0000ffffH
+ 0000e 8b da mov ebx, edx
+ 00010 89 45 f8 mov DWORD PTR _uMaxBack$1$[ebp], eax
+ 00013 8b f9 mov edi, ecx
+ 00015 33 c0 xor eax, eax
+ 00017 89 5d f4 mov DWORD PTR _filestream$1$[ebp], ebx
+
+; 485 : ZPOS64_T uPosFound=0;
+; 486 : uLong uL;
+; 487 : ZPOS64_T relativeOffset;
+; 488 :
+; 489 : if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+
+ 0001a 6a 02 push 2
+ 0001c 50 push eax
+ 0001d 0f 57 c0 xorps xmm0, xmm0
+ 00020 89 7d fc mov DWORD PTR _pzlib_filefunc_def$1$[ebp], edi
+ 00023 50 push eax
+ 00024 89 45 f0 mov DWORD PTR _uMaxBack$2$[ebp], eax
+ 00027 66 0f 13 45 d0 movlpd QWORD PTR _uPosFound$[ebp], xmm0
+ 0002c e8 00 00 00 00 call _call_zseek64
+ 00031 83 c4 0c add esp, 12 ; 0000000cH
+ 00034 85 c0 test eax, eax
+ 00036 74 0b je SHORT $LN7@unz64local
+$LN61@unz64local:
+
+; 490 : return 0;
+
+ 00038 33 c0 xor eax, eax
+$LN60@unz64local:
+ 0003a 33 d2 xor edx, edx
+
+; 573 : }
+
+ 0003c 5f pop edi
+ 0003d 5e pop esi
+ 0003e 5b pop ebx
+ 0003f 8b e5 mov esp, ebp
+ 00041 5d pop ebp
+ 00042 c3 ret 0
+$LN7@unz64local:
+
+; 491 :
+; 492 :
+; 493 : uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+
+ 00043 8b d3 mov edx, ebx
+ 00045 8b cf mov ecx, edi
+ 00047 e8 00 00 00 00 call _call_ztell64
+ 0004c 8b ca mov ecx, edx
+ 0004e 89 45 e0 mov DWORD PTR _uSizeFile$1$[ebp], eax
+ 00051 89 4d e4 mov DWORD PTR _uSizeFile$2$[ebp], ecx
+
+; 494 :
+; 495 : if (uMaxBack>uSizeFile)
+
+ 00054 85 c9 test ecx, ecx
+ 00056 77 0f ja SHORT $LN8@unz64local
+ 00058 72 07 jb SHORT $LN44@unz64local
+ 0005a 3d ff ff 00 00 cmp eax, 65535 ; 0000ffffH
+ 0005f 73 06 jae SHORT $LN8@unz64local
+$LN44@unz64local:
+
+; 496 : uMaxBack = uSizeFile;
+
+ 00061 89 45 f8 mov DWORD PTR _uMaxBack$1$[ebp], eax
+ 00064 89 4d f0 mov DWORD PTR _uMaxBack$2$[ebp], ecx
+$LN8@unz64local:
+
+; 497 :
+; 498 : buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+
+ 00067 68 04 04 00 00 push 1028 ; 00000404H
+ 0006c ff 15 00 00 00
+ 00 call DWORD PTR __imp__malloc
+ 00072 8b f0 mov esi, eax
+ 00074 83 c4 04 add esp, 4
+
+; 499 : if (buf==NULL)
+; 500 : return 0;
+
+ 00077 33 c0 xor eax, eax
+ 00079 85 f6 test esi, esi
+ 0007b 74 bd je SHORT $LN60@unz64local
+
+; 501 :
+; 502 : uBackRead = 4;
+; 503 : while (uBackRead<uMaxBack)
+
+ 0007d 8b 55 f0 mov edx, DWORD PTR _uMaxBack$2$[ebp]
+ 00080 8d 58 04 lea ebx, DWORD PTR [eax+4]
+ 00083 3b c2 cmp eax, edx
+ 00085 0f 87 f3 01 00
+ 00 ja $LN53@unz64local
+ 0008b 8b 4d f8 mov ecx, DWORD PTR _uMaxBack$1$[ebp]
+ 0008e 72 08 jb SHORT $LN51@unz64local
+ 00090 3b d9 cmp ebx, ecx
+ 00092 0f 83 e6 01 00
+ 00 jae $LN53@unz64local
+$LN51@unz64local:
+ 00098 8b 7d d4 mov edi, DWORD PTR _uPosFound$[ebp+4]
+ 0009b 89 7d e8 mov DWORD PTR _uPosFound$1$[ebp], edi
+ 0009e 8b 7d d0 mov edi, DWORD PTR _uPosFound$[ebp]
+ 000a1 89 7d ec mov DWORD PTR _uPosFound$2$[ebp], edi
+$LL2@unz64local:
+
+; 504 : {
+; 505 : uLong uReadSize;
+; 506 : ZPOS64_T uReadPos;
+; 507 : int i;
+; 508 : if (uBackRead+BUFREADCOMMENT>uMaxBack)
+
+ 000a4 81 c3 00 04 00
+ 00 add ebx, 1024 ; 00000400H
+ 000aa 83 d0 00 adc eax, 0
+ 000ad 89 45 d8 mov DWORD PTR _uBackRead$2$[ebp], eax
+ 000b0 3b c2 cmp eax, edx
+ 000b2 72 0d jb SHORT $LN11@unz64local
+ 000b4 77 04 ja SHORT $LN46@unz64local
+ 000b6 3b d9 cmp ebx, ecx
+ 000b8 76 07 jbe SHORT $LN11@unz64local
+$LN46@unz64local:
+
+; 509 : uBackRead = uMaxBack;
+
+ 000ba 8b d9 mov ebx, ecx
+ 000bc 89 55 d8 mov DWORD PTR _uBackRead$2$[ebp], edx
+ 000bf 8b c2 mov eax, edx
+$LN11@unz64local:
+
+; 510 : else
+; 511 : uBackRead+=BUFREADCOMMENT;
+; 512 : uReadPos = uSizeFile-uBackRead ;
+
+ 000c1 8b 4d e0 mov ecx, DWORD PTR _uSizeFile$1$[ebp]
+ 000c4 8b d1 mov edx, ecx
+ 000c6 8b 7d e4 mov edi, DWORD PTR _uSizeFile$2$[ebp]
+ 000c9 2b d3 sub edx, ebx
+ 000cb 89 55 d4 mov DWORD PTR _uReadPos$1$[ebp], edx
+ 000ce 1b f8 sbb edi, eax
+
+; 513 :
+; 514 : uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+
+ 000d0 8b 45 e4 mov eax, DWORD PTR _uSizeFile$2$[ebp]
+ 000d3 2b ca sub ecx, edx
+ 000d5 89 7d dc mov DWORD PTR _uReadPos$2$[ebp], edi
+ 000d8 1b c7 sbb eax, edi
+ 000da 85 c0 test eax, eax
+ 000dc 72 11 jb SHORT $LN29@unz64local
+ 000de 77 08 ja SHORT $LN47@unz64local
+ 000e0 81 f9 04 04 00
+ 00 cmp ecx, 1028 ; 00000404H
+ 000e6 76 07 jbe SHORT $LN29@unz64local
+$LN47@unz64local:
+ 000e8 bf 04 04 00 00 mov edi, 1028 ; 00000404H
+ 000ed eb 05 jmp SHORT $LN30@unz64local
+$LN29@unz64local:
+ 000ef 8b 7d e0 mov edi, DWORD PTR _uSizeFile$1$[ebp]
+ 000f2 2b fa sub edi, edx
+$LN30@unz64local:
+
+; 515 : (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+; 516 : if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 000f4 8b 4d fc mov ecx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 000f7 6a 00 push 0
+ 000f9 ff 75 dc push DWORD PTR _uReadPos$2$[ebp]
+ 000fc 52 push edx
+ 000fd 8b 55 f4 mov edx, DWORD PTR _filestream$1$[ebp]
+ 00100 e8 00 00 00 00 call _call_zseek64
+ 00105 83 c4 0c add esp, 12 ; 0000000cH
+ 00108 85 c0 test eax, eax
+ 0010a 75 76 jne SHORT $LN57@unz64local
+
+; 517 : break;
+; 518 :
+; 519 : if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+
+ 0010c 8b 45 fc mov eax, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 0010f 57 push edi
+ 00110 56 push esi
+ 00111 ff 75 f4 push DWORD PTR _filestream$1$[ebp]
+ 00114 ff 70 1c push DWORD PTR [eax+28]
+ 00117 8b 40 04 mov eax, DWORD PTR [eax+4]
+ 0011a ff d0 call eax
+ 0011c 83 c4 10 add esp, 16 ; 00000010H
+ 0011f 3b c7 cmp eax, edi
+ 00121 75 5f jne SHORT $LN57@unz64local
+
+; 520 : break;
+; 521 :
+; 522 : for (i=(int)uReadSize-3; (i--)>0;)
+
+ 00123 8d 47 fd lea eax, DWORD PTR [edi-3]
+ 00126 85 c0 test eax, eax
+ 00128 7e 3d jle SHORT $LN43@unz64local
+ 0012a 66 0f 1f 44 00
+ 00 npad 6
+$LL4@unz64local:
+ 00130 48 dec eax
+
+; 523 : if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
+; 524 : ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
+
+ 00131 80 3c 30 50 cmp BYTE PTR [eax+esi], 80 ; 00000050H
+ 00135 75 15 jne SHORT $LN14@unz64local
+ 00137 80 7c 30 01 4b cmp BYTE PTR [eax+esi+1], 75 ; 0000004bH
+ 0013c 75 0e jne SHORT $LN14@unz64local
+ 0013e 80 7c 30 02 06 cmp BYTE PTR [eax+esi+2], 6
+ 00143 75 07 jne SHORT $LN14@unz64local
+ 00145 80 7c 30 03 07 cmp BYTE PTR [eax+esi+3], 7
+ 0014a 74 06 je SHORT $LN33@unz64local
+$LN14@unz64local:
+
+; 520 : break;
+; 521 :
+; 522 : for (i=(int)uReadSize-3; (i--)>0;)
+
+ 0014c 85 c0 test eax, eax
+ 0014e 7f e0 jg SHORT $LL4@unz64local
+ 00150 eb 15 jmp SHORT $LN43@unz64local
+$LN33@unz64local:
+
+; 525 : {
+; 526 : uPosFound = uReadPos+i;
+
+ 00152 99 cdq
+ 00153 03 45 d4 add eax, DWORD PTR _uReadPos$1$[ebp]
+ 00156 8b fa mov edi, edx
+
+; 527 : break;
+; 528 : }
+; 529 :
+; 530 : if (uPosFound!=0)
+
+ 00158 8b c8 mov ecx, eax
+ 0015a 89 45 ec mov DWORD PTR _uPosFound$2$[ebp], eax
+ 0015d 13 7d dc adc edi, DWORD PTR _uReadPos$2$[ebp]
+ 00160 0b cf or ecx, edi
+ 00162 89 7d e8 mov DWORD PTR _uPosFound$1$[ebp], edi
+ 00165 75 1b jne SHORT $LN57@unz64local
+$LN43@unz64local:
+
+; 501 :
+; 502 : uBackRead = 4;
+; 503 : while (uBackRead<uMaxBack)
+
+ 00167 8b 45 d8 mov eax, DWORD PTR _uBackRead$2$[ebp]
+ 0016a 8b 55 f0 mov edx, DWORD PTR _uMaxBack$2$[ebp]
+ 0016d 8b 4d f8 mov ecx, DWORD PTR _uMaxBack$1$[ebp]
+ 00170 3b c2 cmp eax, edx
+ 00172 0f 82 2c ff ff
+ ff jb $LL2@unz64local
+ 00178 77 08 ja SHORT $LN57@unz64local
+ 0017a 3b d9 cmp ebx, ecx
+ 0017c 0f 82 22 ff ff
+ ff jb $LL2@unz64local
+$LN57@unz64local:
+ 00182 8b 7d fc mov edi, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+$LN48@unz64local:
+
+; 531 : break;
+; 532 : }
+; 533 : TRYFREE(buf);
+
+ 00185 56 push esi
+ 00186 ff 15 00 00 00
+ 00 call DWORD PTR __imp__free
+
+; 534 : if (uPosFound == 0)
+
+ 0018c 8b 55 ec mov edx, DWORD PTR _uPosFound$2$[ebp]
+ 0018f 83 c4 04 add esp, 4
+ 00192 8b 4d e8 mov ecx, DWORD PTR _uPosFound$1$[ebp]
+ 00195 8b c2 mov eax, edx
+ 00197 0b c1 or eax, ecx
+ 00199 0f 84 99 fe ff
+ ff je $LN61@unz64local
+
+; 535 : return 0;
+; 536 :
+; 537 : /* Zip64 end of central directory locator */
+; 538 : if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 0019f 8b 5d f4 mov ebx, DWORD PTR _filestream$1$[ebp]
+ 001a2 6a 00 push 0
+ 001a4 51 push ecx
+ 001a5 52 push edx
+ 001a6 8b d3 mov edx, ebx
+ 001a8 8b cf mov ecx, edi
+ 001aa e8 00 00 00 00 call _call_zseek64
+ 001af 83 c4 0c add esp, 12 ; 0000000cH
+ 001b2 85 c0 test eax, eax
+ 001b4 0f 85 7e fe ff
+ ff jne $LN61@unz64local
+
+; 539 : return 0;
+; 540 :
+; 541 : /* the signature, already checked */
+; 542 : if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+
+ 001ba 8d 45 f8 lea eax, DWORD PTR _uL$[ebp]
+ 001bd 8b d3 mov edx, ebx
+ 001bf 50 push eax
+ 001c0 8b cf mov ecx, edi
+ 001c2 e8 00 00 00 00 call _unz64local_getLong
+ 001c7 83 c4 04 add esp, 4
+ 001ca 85 c0 test eax, eax
+ 001cc 0f 85 66 fe ff
+ ff jne $LN61@unz64local
+
+; 543 : return 0;
+; 544 :
+; 545 : /* number of the disk with the start of the zip64 end of central directory */
+; 546 : if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+
+ 001d2 8d 45 f8 lea eax, DWORD PTR _uL$[ebp]
+ 001d5 8b d3 mov edx, ebx
+ 001d7 50 push eax
+ 001d8 8b cf mov ecx, edi
+ 001da e8 00 00 00 00 call _unz64local_getLong
+ 001df 83 c4 04 add esp, 4
+ 001e2 85 c0 test eax, eax
+ 001e4 0f 85 4e fe ff
+ ff jne $LN61@unz64local
+
+; 547 : return 0;
+; 548 : if (uL != 0)
+
+ 001ea 39 45 f8 cmp DWORD PTR _uL$[ebp], eax
+ 001ed 0f 85 45 fe ff
+ ff jne $LN61@unz64local
+
+; 549 : return 0;
+; 550 :
+; 551 : /* relative offset of the zip64 end of central directory record */
+; 552 : if (unz64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=UNZ_OK)
+
+ 001f3 8d 45 d0 lea eax, DWORD PTR _relativeOffset$[ebp]
+ 001f6 8b d3 mov edx, ebx
+ 001f8 50 push eax
+ 001f9 8b cf mov ecx, edi
+ 001fb e8 00 00 00 00 call _unz64local_getLong64
+ 00200 83 c4 04 add esp, 4
+ 00203 85 c0 test eax, eax
+ 00205 0f 85 2d fe ff
+ ff jne $LN61@unz64local
+
+; 553 : return 0;
+; 554 :
+; 555 : /* total number of disks */
+; 556 : if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+
+ 0020b 8d 45 f8 lea eax, DWORD PTR _uL$[ebp]
+ 0020e 8b d3 mov edx, ebx
+ 00210 50 push eax
+ 00211 8b cf mov ecx, edi
+ 00213 e8 00 00 00 00 call _unz64local_getLong
+ 00218 83 c4 04 add esp, 4
+ 0021b 85 c0 test eax, eax
+ 0021d 0f 85 15 fe ff
+ ff jne $LN61@unz64local
+
+; 557 : return 0;
+; 558 : if (uL != 1)
+
+ 00223 83 7d f8 01 cmp DWORD PTR _uL$[ebp], 1
+ 00227 0f 85 0b fe ff
+ ff jne $LN61@unz64local
+
+; 559 : return 0;
+; 560 :
+; 561 : /* Goto end of central directory record */
+; 562 : if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 0022d 8b 75 d4 mov esi, DWORD PTR _relativeOffset$[ebp+4]
+ 00230 8b d3 mov edx, ebx
+ 00232 8b 7d d0 mov edi, DWORD PTR _relativeOffset$[ebp]
+ 00235 8b 5d fc mov ebx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 00238 8b cb mov ecx, ebx
+ 0023a 50 push eax
+ 0023b 56 push esi
+ 0023c 57 push edi
+ 0023d e8 00 00 00 00 call _call_zseek64
+ 00242 83 c4 0c add esp, 12 ; 0000000cH
+ 00245 85 c0 test eax, eax
+ 00247 0f 85 eb fd ff
+ ff jne $LN61@unz64local
+
+; 563 : return 0;
+; 564 :
+; 565 : /* the signature */
+; 566 : if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+
+ 0024d 8b 55 f4 mov edx, DWORD PTR _filestream$1$[ebp]
+ 00250 8d 45 f8 lea eax, DWORD PTR _uL$[ebp]
+ 00253 50 push eax
+ 00254 8b cb mov ecx, ebx
+ 00256 e8 00 00 00 00 call _unz64local_getLong
+ 0025b 83 c4 04 add esp, 4
+ 0025e 85 c0 test eax, eax
+ 00260 0f 85 d2 fd ff
+ ff jne $LN61@unz64local
+
+; 567 : return 0;
+; 568 :
+; 569 : if (uL != 0x06064b50)
+
+ 00266 81 7d f8 50 4b
+ 06 06 cmp DWORD PTR _uL$[ebp], 101075792 ; 06064b50H
+ 0026d 0f 85 c5 fd ff
+ ff jne $LN61@unz64local
+
+; 570 : return 0;
+; 571 :
+; 572 : return relativeOffset;
+
+ 00273 8b c7 mov eax, edi
+ 00275 8b d6 mov edx, esi
+
+; 573 : }
+
+ 00277 5f pop edi
+ 00278 5e pop esi
+ 00279 5b pop ebx
+ 0027a 8b e5 mov esp, ebp
+ 0027c 5d pop ebp
+ 0027d c3 ret 0
+$LN53@unz64local:
+
+; 501 :
+; 502 : uBackRead = 4;
+; 503 : while (uBackRead<uMaxBack)
+
+ 0027e 8b 45 d4 mov eax, DWORD PTR _uPosFound$[ebp+4]
+ 00281 89 45 e8 mov DWORD PTR _uPosFound$1$[ebp], eax
+ 00284 8b 45 d0 mov eax, DWORD PTR _uPosFound$[ebp]
+ 00287 89 45 ec mov DWORD PTR _uPosFound$2$[ebp], eax
+ 0028a e9 f6 fe ff ff jmp $LN48@unz64local
+_unz64local_SearchCentralDir64 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzOpenInternal
+_TEXT SEGMENT
+_uL$ = -264 ; size = 4
+_number_disk$ = -260 ; size = 4
+_uS$1 = -260 ; size = 4
+_number_disk_with_CD$ = -256 ; size = 4
+_central_pos$1$ = -252 ; size = 4
+_central_pos$2$ = -248 ; size = 4
+_number_entry_CD$ = -248 ; size = 8
+_uL64$2 = -248 ; size = 8
+_us$ = -240 ; size = 240
+_is64bitOpenFunction$ = 8 ; size = 4
+_unzOpenInternal PROC ; COMDAT
+; _path$ = ecx
+; _pzlib_filefunc64_32_def$ = edx
+
+; 587 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 81 ec 0c 01 00
+ 00 sub esp, 268 ; 0000010cH
+ 0000c 53 push ebx
+ 0000d 56 push esi
+ 0000e 57 push edi
+
+; 588 : unz64_s us;
+; 589 : unz64_s *s;
+; 590 : ZPOS64_T central_pos;
+; 591 : uLong uL;
+; 592 :
+; 593 : uLong number_disk; /* number of the current dist, used for
+; 594 : spaning ZIP, unsupported, always 0*/
+; 595 : uLong number_disk_with_CD; /* number the the disk with central dir, used
+; 596 : for spaning ZIP, unsupported, always 0*/
+; 597 : ZPOS64_T number_entry_CD; /* total number of entries in
+; 598 : the central dir
+; 599 : (same than number_entry on nospan) */
+; 600 :
+; 601 : int err=UNZ_OK;
+
+ 0000f 33 ff xor edi, edi
+ 00011 8b f1 mov esi, ecx
+
+; 602 :
+; 603 : if (unz_copyright[0]!=' ')
+; 604 : return NULL;
+; 605 :
+; 606 : us.z_filefunc.zseek32_file = NULL;
+
+ 00013 89 7c 24 50 mov DWORD PTR _us$[esp+320], edi
+
+; 607 : us.z_filefunc.ztell32_file = NULL;
+
+ 00017 89 7c 24 4c mov DWORD PTR _us$[esp+316], edi
+
+; 608 : if (pzlib_filefunc64_32_def==NULL)
+
+ 0001b 85 d2 test edx, edx
+ 0001d 75 0b jne SHORT $LN3@unzOpenInt
+
+; 609 : fill_fopen64_filefunc(&us.z_filefunc.zfile_func64);
+
+ 0001f 8d 4c 24 28 lea ecx, DWORD PTR _us$[esp+280]
+ 00023 e8 00 00 00 00 call _fill_fopen64_filefunc
+ 00028 eb 23 jmp SHORT $LN4@unzOpenInt
+$LN3@unzOpenInt:
+
+; 610 : else
+; 611 : us.z_filefunc = *pzlib_filefunc64_32_def;
+
+ 0002a 0f 10 02 movups xmm0, XMMWORD PTR [edx]
+ 0002d 8b 42 28 mov eax, DWORD PTR [edx+40]
+ 00030 89 44 24 50 mov DWORD PTR _us$[esp+320], eax
+ 00034 0f 11 44 24 28 movups XMMWORD PTR _us$[esp+280], xmm0
+ 00039 0f 10 42 10 movups xmm0, XMMWORD PTR [edx+16]
+ 0003d 0f 11 44 24 38 movups XMMWORD PTR _us$[esp+296], xmm0
+ 00042 f3 0f 7e 42 20 movq xmm0, QWORD PTR [edx+32]
+ 00047 66 0f d6 44 24
+ 48 movq QWORD PTR _us$[esp+312], xmm0
+$LN4@unzOpenInt:
+
+; 612 : us.is64bitOpenFunction = is64bitOpenFunction;
+
+ 0004d 8b 45 08 mov eax, DWORD PTR _is64bitOpenFunction$[ebp]
+
+; 613 :
+; 614 :
+; 615 :
+; 616 : us.filestream = ZOPEN64(us.z_filefunc,
+
+ 00050 8d 4c 24 28 lea ecx, DWORD PTR _us$[esp+280]
+ 00054 6a 05 push 5
+ 00056 8b d6 mov edx, esi
+ 00058 89 44 24 58 mov DWORD PTR _us$[esp+328], eax
+ 0005c e8 00 00 00 00 call _call_zopen64
+ 00061 8b d8 mov ebx, eax
+ 00063 83 c4 04 add esp, 4
+ 00066 89 5c 24 58 mov DWORD PTR _us$[esp+328], ebx
+
+; 617 : path,
+; 618 : ZLIB_FILEFUNC_MODE_READ |
+; 619 : ZLIB_FILEFUNC_MODE_EXISTING);
+; 620 : if (us.filestream==NULL)
+
+ 0006a 85 db test ebx, ebx
+ 0006c 0f 84 a5 03 00
+ 00 je $LN39@unzOpenInt
+
+; 621 : return NULL;
+; 622 :
+; 623 : central_pos = unz64local_SearchCentralDir64(&us.z_filefunc,us.filestream);
+
+ 00072 8b d3 mov edx, ebx
+ 00074 8d 4c 24 28 lea ecx, DWORD PTR _us$[esp+280]
+ 00078 e8 00 00 00 00 call _unz64local_SearchCentralDir64
+ 0007d 8b f0 mov esi, eax
+ 0007f 8b c2 mov eax, edx
+
+; 624 : if (central_pos)
+
+ 00081 8b ce mov ecx, esi
+ 00083 89 44 24 1c mov DWORD PTR _central_pos$1$[esp+280], eax
+ 00087 0b c8 or ecx, eax
+
+; 625 : {
+; 626 : uLong uS;
+; 627 : ZPOS64_T uL64;
+; 628 :
+; 629 : us.isZip64 = 1;
+; 630 :
+; 631 : if (ZSEEK64(us.z_filefunc, us.filestream,
+; 632 : central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 00089 8b d3 mov edx, ebx
+ 0008b 8d 4c 24 28 lea ecx, DWORD PTR _us$[esp+280]
+ 0008f 0f 84 72 01 00
+ 00 je $LN6@unzOpenInt
+ 00095 6a 00 push 0
+ 00097 50 push eax
+ 00098 56 push esi
+ 00099 c7 84 24 1c 01
+ 00 00 01 00 00
+ 00 mov DWORD PTR _us$[esp+524], 1
+ 000a4 e8 00 00 00 00 call _call_zseek64
+ 000a9 83 c9 ff or ecx, -1
+ 000ac 83 c4 0c add esp, 12 ; 0000000cH
+ 000af 85 c0 test eax, eax
+
+; 633 : err=UNZ_ERRNO;
+; 634 :
+; 635 : /* the signature, already checked */
+; 636 : if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+
+ 000b1 8b d3 mov edx, ebx
+ 000b3 8d 44 24 10 lea eax, DWORD PTR _uL$[esp+280]
+ 000b7 0f 45 f9 cmovne edi, ecx
+ 000ba 8d 4c 24 28 lea ecx, DWORD PTR _us$[esp+280]
+ 000be 50 push eax
+ 000bf e8 00 00 00 00 call _unz64local_getLong
+ 000c4 83 c4 04 add esp, 4
+
+; 637 : err=UNZ_ERRNO;
+; 638 :
+; 639 : /* size of zip64 end of central directory record */
+; 640 : if (unz64local_getLong64(&us.z_filefunc, us.filestream,&uL64)!=UNZ_OK)
+
+ 000c7 8d 4c 24 28 lea ecx, DWORD PTR _us$[esp+280]
+ 000cb 85 c0 test eax, eax
+ 000cd 8b d3 mov edx, ebx
+ 000cf b8 ff ff ff ff mov eax, -1
+ 000d4 0f 45 f8 cmovne edi, eax
+ 000d7 8d 44 24 20 lea eax, DWORD PTR _uL64$2[esp+280]
+ 000db 50 push eax
+ 000dc e8 00 00 00 00 call _unz64local_getLong64
+ 000e1 83 c4 04 add esp, 4
+
+; 641 : err=UNZ_ERRNO;
+; 642 :
+; 643 : /* version made by */
+; 644 : if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK)
+
+ 000e4 8d 4c 24 28 lea ecx, DWORD PTR _us$[esp+280]
+ 000e8 85 c0 test eax, eax
+ 000ea 8b d3 mov edx, ebx
+ 000ec b8 ff ff ff ff mov eax, -1
+ 000f1 0f 45 f8 cmovne edi, eax
+ 000f4 8d 44 24 14 lea eax, DWORD PTR _uS$1[esp+280]
+ 000f8 50 push eax
+ 000f9 e8 00 00 00 00 call _unz64local_getShort
+ 000fe 83 c4 04 add esp, 4
+
+; 645 : err=UNZ_ERRNO;
+; 646 :
+; 647 : /* version needed to extract */
+; 648 : if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK)
+
+ 00101 8d 4c 24 28 lea ecx, DWORD PTR _us$[esp+280]
+ 00105 85 c0 test eax, eax
+ 00107 8b d3 mov edx, ebx
+ 00109 b8 ff ff ff ff mov eax, -1
+ 0010e 0f 45 f8 cmovne edi, eax
+ 00111 8d 44 24 14 lea eax, DWORD PTR _uS$1[esp+280]
+ 00115 50 push eax
+ 00116 e8 00 00 00 00 call _unz64local_getShort
+ 0011b 83 c4 04 add esp, 4
+
+; 649 : err=UNZ_ERRNO;
+; 650 :
+; 651 : /* number of this disk */
+; 652 : if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK)
+
+ 0011e 8d 4c 24 28 lea ecx, DWORD PTR _us$[esp+280]
+ 00122 85 c0 test eax, eax
+ 00124 8b d3 mov edx, ebx
+ 00126 b8 ff ff ff ff mov eax, -1
+ 0012b 0f 45 f8 cmovne edi, eax
+ 0012e 8d 44 24 14 lea eax, DWORD PTR _number_disk$[esp+280]
+ 00132 50 push eax
+ 00133 e8 00 00 00 00 call _unz64local_getLong
+ 00138 83 c4 04 add esp, 4
+
+; 653 : err=UNZ_ERRNO;
+; 654 :
+; 655 : /* number of the disk with the start of the central directory */
+; 656 : if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK)
+
+ 0013b 8d 4c 24 28 lea ecx, DWORD PTR _us$[esp+280]
+ 0013f 85 c0 test eax, eax
+ 00141 8b d3 mov edx, ebx
+ 00143 b8 ff ff ff ff mov eax, -1
+ 00148 0f 45 f8 cmovne edi, eax
+ 0014b 8d 44 24 18 lea eax, DWORD PTR _number_disk_with_CD$[esp+280]
+ 0014f 50 push eax
+ 00150 e8 00 00 00 00 call _unz64local_getLong
+ 00155 83 c4 04 add esp, 4
+
+; 657 : err=UNZ_ERRNO;
+; 658 :
+; 659 : /* total number of entries in the central directory on this disk */
+; 660 : if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK)
+
+ 00158 8d 4c 24 28 lea ecx, DWORD PTR _us$[esp+280]
+ 0015c 85 c0 test eax, eax
+ 0015e 8b d3 mov edx, ebx
+ 00160 b8 ff ff ff ff mov eax, -1
+ 00165 0f 45 f8 cmovne edi, eax
+ 00168 8d 44 24 60 lea eax, DWORD PTR _us$[esp+336]
+ 0016c 50 push eax
+ 0016d e8 00 00 00 00 call _unz64local_getLong64
+
+; 661 : err=UNZ_ERRNO;
+; 662 :
+; 663 : /* total number of entries in the central directory */
+; 664 : if (unz64local_getLong64(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK)
+
+ 00172 8b 54 24 5c mov edx, DWORD PTR _us$[esp+332]
+ 00176 8d 4c 24 2c lea ecx, DWORD PTR _us$[esp+284]
+ 0017a 83 c4 04 add esp, 4
+ 0017d bb ff ff ff ff mov ebx, -1
+ 00182 85 c0 test eax, eax
+ 00184 8d 44 24 20 lea eax, DWORD PTR _number_entry_CD$[esp+280]
+ 00188 0f 45 fb cmovne edi, ebx
+ 0018b 50 push eax
+ 0018c e8 00 00 00 00 call _unz64local_getLong64
+ 00191 83 c4 04 add esp, 4
+ 00194 85 c0 test eax, eax
+
+; 665 : err=UNZ_ERRNO;
+; 666 :
+; 667 : if ((number_entry_CD!=us.gi.number_entry) ||
+; 668 : (number_disk_with_CD!=0) ||
+
+ 00196 8b 44 24 20 mov eax, DWORD PTR _number_entry_CD$[esp+280]
+ 0019a 0f 45 fb cmovne edi, ebx
+ 0019d 3b 44 24 60 cmp eax, DWORD PTR _us$[esp+336]
+ 001a1 75 18 jne SHORT $LN18@unzOpenInt
+ 001a3 8b 44 24 24 mov eax, DWORD PTR _number_entry_CD$[esp+284]
+ 001a7 3b 44 24 64 cmp eax, DWORD PTR _us$[esp+340]
+ 001ab 75 0e jne SHORT $LN18@unzOpenInt
+ 001ad 83 7c 24 18 00 cmp DWORD PTR _number_disk_with_CD$[esp+280], 0
+ 001b2 75 07 jne SHORT $LN18@unzOpenInt
+ 001b4 83 7c 24 14 00 cmp DWORD PTR _number_disk$[esp+280], 0
+ 001b9 74 05 je SHORT $LN17@unzOpenInt
+$LN18@unzOpenInt:
+
+; 669 : (number_disk!=0))
+; 670 : err=UNZ_BADZIPFILE;
+
+ 001bb bf 99 ff ff ff mov edi, -103 ; ffffff99H
+$LN17@unzOpenInt:
+
+; 671 :
+; 672 : /* size of the central directory */
+; 673 : if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK)
+
+ 001c0 8b 54 24 58 mov edx, DWORD PTR _us$[esp+328]
+ 001c4 8d 84 24 98 00
+ 00 00 lea eax, DWORD PTR _us$[esp+392]
+ 001cb 50 push eax
+ 001cc 8d 4c 24 2c lea ecx, DWORD PTR _us$[esp+284]
+ 001d0 e8 00 00 00 00 call _unz64local_getLong64
+
+; 674 : err=UNZ_ERRNO;
+; 675 :
+; 676 : /* offset of start of central directory with respect to the
+; 677 : starting disk number */
+; 678 : if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK)
+
+ 001d5 8b 54 24 5c mov edx, DWORD PTR _us$[esp+332]
+ 001d9 8d 4c 24 2c lea ecx, DWORD PTR _us$[esp+284]
+ 001dd 83 c4 04 add esp, 4
+ 001e0 85 c0 test eax, eax
+ 001e2 8d 84 24 a0 00
+ 00 00 lea eax, DWORD PTR _us$[esp+400]
+ 001e9 0f 45 fb cmovne edi, ebx
+ 001ec 50 push eax
+ 001ed e8 00 00 00 00 call _unz64local_getLong64
+ 001f2 83 c4 04 add esp, 4
+
+; 679 : err=UNZ_ERRNO;
+; 680 :
+; 681 : us.gi.size_comment = 0;
+
+ 001f5 c7 44 24 68 00
+ 00 00 00 mov DWORD PTR _us$[esp+344], 0
+ 001fd 85 c0 test eax, eax
+ 001ff 0f 45 fb cmovne edi, ebx
+
+; 682 : }
+
+ 00202 e9 62 01 00 00 jmp $LN32@unzOpenInt
+$LN6@unzOpenInt:
+
+; 683 : else
+; 684 : {
+; 685 : central_pos = unz64local_SearchCentralDir(&us.z_filefunc,us.filestream);
+
+ 00207 e8 00 00 00 00 call _unz64local_SearchCentralDir
+ 0020c 8b c8 mov ecx, eax
+ 0020e 89 54 24 1c mov DWORD PTR _central_pos$1$[esp+280], edx
+
+; 686 : if (central_pos==0)
+
+ 00212 0b c2 or eax, edx
+ 00214 89 4c 24 20 mov DWORD PTR _central_pos$2$[esp+280], ecx
+ 00218 75 03 jne SHORT $LN21@unzOpenInt
+
+; 687 : err=UNZ_ERRNO;
+
+ 0021a 83 cf ff or edi, -1
+$LN21@unzOpenInt:
+
+; 688 :
+; 689 : us.isZip64 = 0;
+; 690 :
+; 691 : if (ZSEEK64(us.z_filefunc, us.filestream,
+; 692 : central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 0021d 6a 00 push 0
+ 0021f 52 push edx
+ 00220 51 push ecx
+ 00221 8b d3 mov edx, ebx
+ 00223 c7 84 24 1c 01
+ 00 00 00 00 00
+ 00 mov DWORD PTR _us$[esp+524], 0
+ 0022e 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292]
+ 00232 e8 00 00 00 00 call _call_zseek64
+ 00237 83 c4 0c add esp, 12 ; 0000000cH
+
+; 693 : err=UNZ_ERRNO;
+; 694 :
+; 695 : /* the signature, already checked */
+; 696 : if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+
+ 0023a 8d 4c 24 28 lea ecx, DWORD PTR _us$[esp+280]
+ 0023e 83 ce ff or esi, -1
+ 00241 8b d3 mov edx, ebx
+ 00243 85 c0 test eax, eax
+ 00245 8d 44 24 10 lea eax, DWORD PTR _uL$[esp+280]
+ 00249 50 push eax
+ 0024a 0f 45 fe cmovne edi, esi
+ 0024d e8 00 00 00 00 call _unz64local_getLong
+ 00252 83 c4 04 add esp, 4
+
+; 697 : err=UNZ_ERRNO;
+; 698 :
+; 699 : /* number of this disk */
+; 700 : if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK)
+
+ 00255 8d 4c 24 28 lea ecx, DWORD PTR _us$[esp+280]
+ 00259 85 c0 test eax, eax
+ 0025b 8b d3 mov edx, ebx
+ 0025d 8d 44 24 14 lea eax, DWORD PTR _number_disk$[esp+280]
+ 00261 0f 45 fe cmovne edi, esi
+ 00264 50 push eax
+ 00265 e8 00 00 00 00 call _unz64local_getShort
+ 0026a 83 c4 04 add esp, 4
+
+; 701 : err=UNZ_ERRNO;
+; 702 :
+; 703 : /* number of the disk with the start of the central directory */
+; 704 : if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK)
+
+ 0026d 8d 4c 24 28 lea ecx, DWORD PTR _us$[esp+280]
+ 00271 85 c0 test eax, eax
+ 00273 8b d3 mov edx, ebx
+ 00275 8d 44 24 18 lea eax, DWORD PTR _number_disk_with_CD$[esp+280]
+ 00279 0f 45 fe cmovne edi, esi
+ 0027c 50 push eax
+ 0027d e8 00 00 00 00 call _unz64local_getShort
+ 00282 83 c4 04 add esp, 4
+
+; 705 : err=UNZ_ERRNO;
+; 706 :
+; 707 : /* total number of entries in the central dir on this disk */
+; 708 : if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+
+ 00285 8d 4c 24 28 lea ecx, DWORD PTR _us$[esp+280]
+ 00289 85 c0 test eax, eax
+ 0028b 8b d3 mov edx, ebx
+ 0028d 8d 44 24 10 lea eax, DWORD PTR _uL$[esp+280]
+ 00291 0f 45 fe cmovne edi, esi
+ 00294 50 push eax
+ 00295 e8 00 00 00 00 call _unz64local_getShort
+ 0029a 83 c4 04 add esp, 4
+
+; 709 : err=UNZ_ERRNO;
+; 710 : us.gi.number_entry = uL;
+
+ 0029d c7 44 24 64 00
+ 00 00 00 mov DWORD PTR _us$[esp+340], 0
+ 002a5 85 c0 test eax, eax
+
+; 711 :
+; 712 : /* total number of entries in the central dir */
+; 713 : if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+
+ 002a7 8d 4c 24 28 lea ecx, DWORD PTR _us$[esp+280]
+ 002ab 8d 44 24 10 lea eax, DWORD PTR _uL$[esp+280]
+ 002af 8b d3 mov edx, ebx
+ 002b1 0f 45 fe cmovne edi, esi
+ 002b4 8b 74 24 10 mov esi, DWORD PTR _uL$[esp+280]
+ 002b8 50 push eax
+ 002b9 89 74 24 64 mov DWORD PTR _us$[esp+340], esi
+ 002bd e8 00 00 00 00 call _unz64local_getShort
+ 002c2 83 c4 04 add esp, 4
+ 002c5 85 c0 test eax, eax
+ 002c7 b8 ff ff ff ff mov eax, -1
+ 002cc 0f 45 f8 cmovne edi, eax
+
+; 714 : err=UNZ_ERRNO;
+; 715 : number_entry_CD = uL;
+
+ 002cf 33 c0 xor eax, eax
+
+; 716 :
+; 717 : if ((number_entry_CD!=us.gi.number_entry) ||
+; 718 : (number_disk_with_CD!=0) ||
+
+ 002d1 39 74 24 10 cmp DWORD PTR _uL$[esp+280], esi
+ 002d5 75 10 jne SHORT $LN29@unzOpenInt
+ 002d7 85 c0 test eax, eax
+ 002d9 75 0c jne SHORT $LN29@unzOpenInt
+ 002db 39 44 24 18 cmp DWORD PTR _number_disk_with_CD$[esp+280], eax
+ 002df 75 06 jne SHORT $LN29@unzOpenInt
+ 002e1 39 44 24 14 cmp DWORD PTR _number_disk$[esp+280], eax
+ 002e5 74 05 je SHORT $LN28@unzOpenInt
+$LN29@unzOpenInt:
+
+; 719 : (number_disk!=0))
+; 720 : err=UNZ_BADZIPFILE;
+
+ 002e7 bf 99 ff ff ff mov edi, -103 ; ffffff99H
+$LN28@unzOpenInt:
+
+; 721 :
+; 722 : /* size of the central directory */
+; 723 : if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+
+ 002ec 8d 44 24 10 lea eax, DWORD PTR _uL$[esp+280]
+ 002f0 8b d3 mov edx, ebx
+ 002f2 50 push eax
+ 002f3 8d 4c 24 2c lea ecx, DWORD PTR _us$[esp+284]
+ 002f7 e8 00 00 00 00 call _unz64local_getLong
+ 002fc 83 c4 04 add esp, 4
+
+; 724 : err=UNZ_ERRNO;
+; 725 : us.size_central_dir = uL;
+
+ 002ff c7 84 24 9c 00
+ 00 00 00 00 00
+ 00 mov DWORD PTR _us$[esp+396], 0
+ 0030a 85 c0 test eax, eax
+
+; 726 :
+; 727 : /* offset of start of central directory with respect to the
+; 728 : starting disk number */
+; 729 : if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+
+ 0030c 8d 4c 24 28 lea ecx, DWORD PTR _us$[esp+280]
+ 00310 8b 44 24 10 mov eax, DWORD PTR _uL$[esp+280]
+ 00314 be ff ff ff ff mov esi, -1
+ 00319 89 84 24 98 00
+ 00 00 mov DWORD PTR _us$[esp+392], eax
+ 00320 8b d3 mov edx, ebx
+ 00322 8d 44 24 10 lea eax, DWORD PTR _uL$[esp+280]
+ 00326 0f 45 fe cmovne edi, esi
+ 00329 50 push eax
+ 0032a e8 00 00 00 00 call _unz64local_getLong
+ 0032f 83 c4 04 add esp, 4
+
+; 730 : err=UNZ_ERRNO;
+; 731 : us.offset_central_dir = uL;
+
+ 00332 c7 84 24 a4 00
+ 00 00 00 00 00
+ 00 mov DWORD PTR _us$[esp+404], 0
+ 0033d 85 c0 test eax, eax
+
+; 732 :
+; 733 : /* zipfile comment length */
+; 734 : if (unz64local_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK)
+
+ 0033f 8d 4c 24 28 lea ecx, DWORD PTR _us$[esp+280]
+ 00343 8b 44 24 10 mov eax, DWORD PTR _uL$[esp+280]
+ 00347 8b d3 mov edx, ebx
+ 00349 89 84 24 a0 00
+ 00 00 mov DWORD PTR _us$[esp+400], eax
+ 00350 0f 45 fe cmovne edi, esi
+ 00353 8d 44 24 68 lea eax, DWORD PTR _us$[esp+344]
+ 00357 50 push eax
+ 00358 e8 00 00 00 00 call _unz64local_getShort
+ 0035d 83 c4 04 add esp, 4
+ 00360 85 c0 test eax, eax
+ 00362 0f 45 fe cmovne edi, esi
+ 00365 8b 74 24 20 mov esi, DWORD PTR _central_pos$2$[esp+280]
+$LN32@unzOpenInt:
+
+; 735 : err=UNZ_ERRNO;
+; 736 : }
+; 737 :
+; 738 : if ((central_pos<us.offset_central_dir+us.size_central_dir) &&
+
+ 00369 8b 9c 24 a0 00
+ 00 00 mov ebx, DWORD PTR _us$[esp+400]
+ 00370 8b cb mov ecx, ebx
+ 00372 03 8c 24 98 00
+ 00 00 add ecx, DWORD PTR _us$[esp+392]
+ 00379 8b 84 24 a4 00
+ 00 00 mov eax, DWORD PTR _us$[esp+404]
+ 00380 13 84 24 9c 00
+ 00 00 adc eax, DWORD PTR _us$[esp+396]
+ 00387 8b 54 24 1c mov edx, DWORD PTR _central_pos$1$[esp+280]
+ 0038b 3b d0 cmp edx, eax
+ 0038d 72 79 jb SHORT $LN37@unzOpenInt
+ 0038f 77 04 ja SHORT $LN38@unzOpenInt
+ 00391 3b f1 cmp esi, ecx
+ 00393 72 73 jb SHORT $LN37@unzOpenInt
+$LN38@unzOpenInt:
+
+; 739 : (err==UNZ_OK))
+; 740 : err=UNZ_BADZIPFILE;
+; 741 :
+; 742 : if (err!=UNZ_OK)
+
+ 00395 85 ff test edi, edi
+ 00397 75 6f jne SHORT $LN37@unzOpenInt
+
+; 745 : return NULL;
+; 746 : }
+; 747 :
+; 748 : us.byte_before_the_zipfile = central_pos -
+
+ 00399 8b ce mov ecx, esi
+
+; 749 : (us.offset_central_dir+us.size_central_dir);
+; 750 : us.central_pos = central_pos;
+
+ 0039b 89 b4 24 90 00
+ 00 00 mov DWORD PTR _us$[esp+384], esi
+ 003a2 2b cb sub ecx, ebx
+ 003a4 89 94 24 94 00
+ 00 00 mov DWORD PTR _us$[esp+388], edx
+ 003ab 8b c2 mov eax, edx
+
+; 751 : us.pfile_in_zip_read = NULL;
+
+ 003ad 89 bc 24 08 01
+ 00 00 mov DWORD PTR _us$[esp+504], edi
+ 003b4 1b 84 24 a4 00
+ 00 00 sbb eax, DWORD PTR _us$[esp+404]
+ 003bb 2b 8c 24 98 00
+ 00 00 sub ecx, DWORD PTR _us$[esp+392]
+
+; 752 : us.encrypted = 0;
+; 753 :
+; 754 :
+; 755 : s=(unz64_s*)ALLOC(sizeof(unz64_s));
+
+ 003c2 68 f0 00 00 00 push 240 ; 000000f0H
+ 003c7 1b 84 24 a0 00
+ 00 00 sbb eax, DWORD PTR _us$[esp+400]
+ 003ce 89 4c 24 74 mov DWORD PTR _us$[esp+356], ecx
+ 003d2 89 44 24 78 mov DWORD PTR _us$[esp+360], eax
+ 003d6 89 bc 24 10 01
+ 00 00 mov DWORD PTR _us$[esp+512], edi
+ 003dd ff 15 00 00 00
+ 00 call DWORD PTR __imp__malloc
+ 003e3 8b d8 mov ebx, eax
+ 003e5 83 c4 04 add esp, 4
+
+; 756 : if( s != NULL)
+
+ 003e8 85 db test ebx, ebx
+ 003ea 74 13 je SHORT $LN35@unzOpenInt
+
+; 757 : {
+; 758 : *s=us;
+
+ 003ec b9 3c 00 00 00 mov ecx, 60 ; 0000003cH
+ 003f1 8d 74 24 28 lea esi, DWORD PTR _us$[esp+280]
+ 003f5 8b fb mov edi, ebx
+ 003f7 f3 a5 rep movsd
+
+; 759 : unzGoToFirstFile((unzFile)s);
+
+ 003f9 53 push ebx
+ 003fa e8 00 00 00 00 call _unzGoToFirstFile@4
+$LN35@unzOpenInt:
+
+; 760 : }
+; 761 : return (unzFile)s;
+
+ 003ff 8b c3 mov eax, ebx
+
+; 762 : }
+
+ 00401 5f pop edi
+ 00402 5e pop esi
+ 00403 5b pop ebx
+ 00404 8b e5 mov esp, ebp
+ 00406 5d pop ebp
+ 00407 c3 ret 0
+$LN37@unzOpenInt:
+
+; 743 : {
+; 744 : ZCLOSE64(us.z_filefunc, us.filestream);
+
+ 00408 ff 74 24 58 push DWORD PTR _us$[esp+328]
+ 0040c ff 74 24 48 push DWORD PTR _us$[esp+312]
+ 00410 ff 54 24 44 call DWORD PTR _us$[esp+308]
+ 00414 83 c4 08 add esp, 8
+$LN39@unzOpenInt:
+
+; 762 : }
+
+ 00417 5f pop edi
+ 00418 5e pop esi
+ 00419 33 c0 xor eax, eax
+ 0041b 5b pop ebx
+ 0041c 8b e5 mov esp, ebp
+ 0041e 5d pop ebp
+ 0041f c3 ret 0
+_unzOpenInternal ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzOpen2@8
+_TEXT SEGMENT
+_zlib_filefunc64_32_def_fill$1 = -44 ; size = 44
+_path$ = 8 ; size = 4
+_pzlib_filefunc32_def$ = 12 ; size = 4
+_unzOpen2@8 PROC ; COMDAT
+
+; 767 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+
+; 768 : if (pzlib_filefunc32_def != NULL)
+
+ 00006 8b 55 0c mov edx, DWORD PTR _pzlib_filefunc32_def$[ebp]
+ 00009 83 ec 30 sub esp, 48 ; 00000030H
+ 0000c 85 d2 test edx, edx
+ 0000e 74 1e je SHORT $LN2@unzOpen2
+
+; 769 : {
+; 770 : zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
+; 771 : fill_zlib_filefunc64_32_def_from_filefunc32(&zlib_filefunc64_32_def_fill,pzlib_filefunc32_def);
+
+ 00010 8d 4c 24 04 lea ecx, DWORD PTR _zlib_filefunc64_32_def_fill$1[esp+48]
+ 00014 e8 00 00 00 00 call _fill_zlib_filefunc64_32_def_from_filefunc32
+
+; 772 : return unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 0);
+
+ 00019 8b d1 mov edx, ecx
+
+; 773 : }
+; 774 : else
+; 775 : return unzOpenInternal(path, NULL, 0);
+
+ 0001b 8b 4d 08 mov ecx, DWORD PTR _path$[ebp]
+ 0001e 6a 00 push 0
+ 00020 e8 00 00 00 00 call _unzOpenInternal
+ 00025 83 c4 04 add esp, 4
+
+; 776 : }
+
+ 00028 8b e5 mov esp, ebp
+ 0002a 5d pop ebp
+ 0002b c2 08 00 ret 8
+$LN2@unzOpen2:
+
+; 773 : }
+; 774 : else
+; 775 : return unzOpenInternal(path, NULL, 0);
+
+ 0002e 8b 4d 08 mov ecx, DWORD PTR _path$[ebp]
+ 00031 33 d2 xor edx, edx
+ 00033 52 push edx
+ 00034 e8 00 00 00 00 call _unzOpenInternal
+ 00039 83 c4 04 add esp, 4
+
+; 776 : }
+
+ 0003c 8b e5 mov esp, ebp
+ 0003e 5d pop ebp
+ 0003f c2 08 00 ret 8
+_unzOpen2@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzOpen2_64@8
+_TEXT SEGMENT
+_zlib_filefunc64_32_def_fill$1 = -44 ; size = 44
+_path$ = 8 ; size = 4
+_pzlib_filefunc_def$ = 12 ; size = 4
+_unzOpen2_64@8 PROC ; COMDAT
+
+; 780 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+
+; 781 : if (pzlib_filefunc_def != NULL)
+
+ 00006 8b 45 0c mov eax, DWORD PTR _pzlib_filefunc_def$[ebp]
+ 00009 83 ec 30 sub esp, 48 ; 00000030H
+
+; 782 : {
+; 783 : zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
+; 784 : zlib_filefunc64_32_def_fill.zfile_func64 = *pzlib_filefunc_def;
+; 785 : zlib_filefunc64_32_def_fill.ztell32_file = NULL;
+; 786 : zlib_filefunc64_32_def_fill.zseek32_file = NULL;
+; 787 : return unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 1);
+
+ 0000c 8b 4d 08 mov ecx, DWORD PTR _path$[ebp]
+ 0000f 6a 01 push 1
+ 00011 85 c0 test eax, eax
+ 00013 74 33 je SHORT $LN2@unzOpen2_6
+ 00015 0f 10 00 movups xmm0, XMMWORD PTR [eax]
+ 00018 8d 54 24 08 lea edx, DWORD PTR _zlib_filefunc64_32_def_fill$1[esp+52]
+ 0001c c7 44 24 2c 00
+ 00 00 00 mov DWORD PTR _zlib_filefunc64_32_def_fill$1[esp+88], 0
+ 00024 c7 44 24 30 00
+ 00 00 00 mov DWORD PTR _zlib_filefunc64_32_def_fill$1[esp+92], 0
+ 0002c 0f 11 44 24 08 movups XMMWORD PTR _zlib_filefunc64_32_def_fill$1[esp+52], xmm0
+ 00031 0f 10 40 10 movups xmm0, XMMWORD PTR [eax+16]
+ 00035 0f 11 44 24 18 movups XMMWORD PTR _zlib_filefunc64_32_def_fill$1[esp+68], xmm0
+
+; 788 : }
+; 789 : else
+; 790 : return unzOpenInternal(path, NULL, 1);
+
+ 0003a e8 00 00 00 00 call _unzOpenInternal
+ 0003f 83 c4 04 add esp, 4
+
+; 791 : }
+
+ 00042 8b e5 mov esp, ebp
+ 00044 5d pop ebp
+ 00045 c2 08 00 ret 8
+$LN2@unzOpen2_6:
+
+; 788 : }
+; 789 : else
+; 790 : return unzOpenInternal(path, NULL, 1);
+
+ 00048 33 d2 xor edx, edx
+ 0004a e8 00 00 00 00 call _unzOpenInternal
+ 0004f 83 c4 04 add esp, 4
+
+; 791 : }
+
+ 00052 8b e5 mov esp, ebp
+ 00054 5d pop ebp
+ 00055 c2 08 00 ret 8
+_unzOpen2_64@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzOpen@4
+_TEXT SEGMENT
+_path$ = 8 ; size = 4
+_unzOpen@4 PROC ; COMDAT
+
+; 794 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 795 : return unzOpenInternal(path, NULL, 0);
+
+ 00003 8b 4d 08 mov ecx, DWORD PTR _path$[ebp]
+ 00006 33 d2 xor edx, edx
+ 00008 6a 00 push 0
+ 0000a e8 00 00 00 00 call _unzOpenInternal
+ 0000f 83 c4 04 add esp, 4
+
+; 796 : }
+
+ 00012 5d pop ebp
+ 00013 c2 04 00 ret 4
+_unzOpen@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzOpen64@4
+_TEXT SEGMENT
+_path$ = 8 ; size = 4
+_unzOpen64@4 PROC ; COMDAT
+
+; 799 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 800 : return unzOpenInternal(path, NULL, 1);
+
+ 00003 8b 4d 08 mov ecx, DWORD PTR _path$[ebp]
+ 00006 33 d2 xor edx, edx
+ 00008 6a 01 push 1
+ 0000a e8 00 00 00 00 call _unzOpenInternal
+ 0000f 83 c4 04 add esp, 4
+
+; 801 : }
+
+ 00012 5d pop ebp
+ 00013 c2 04 00 ret 4
+_unzOpen64@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzClose@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_unzClose@4 PROC ; COMDAT
+
+; 809 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 810 : unz64_s* s;
+; 811 : if (file==NULL)
+
+ 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 00007 85 f6 test esi, esi
+ 00009 75 08 jne SHORT $LN2@unzClose
+
+; 812 : return UNZ_PARAMERROR;
+
+ 0000b 8d 46 9a lea eax, DWORD PTR [esi-102]
+ 0000e 5e pop esi
+
+; 821 : }
+
+ 0000f 5d pop ebp
+ 00010 c2 04 00 ret 4
+$LN2@unzClose:
+
+; 813 : s=(unz64_s*)file;
+; 814 :
+; 815 : if (s->pfile_in_zip_read!=NULL)
+
+ 00013 83 be e0 00 00
+ 00 00 cmp DWORD PTR [esi+224], 0
+ 0001a 74 06 je SHORT $LN3@unzClose
+
+; 816 : unzCloseCurrentFile(file);
+
+ 0001c 56 push esi
+ 0001d e8 00 00 00 00 call _unzCloseCurrentFile@4
+$LN3@unzClose:
+
+; 817 :
+; 818 : ZCLOSE64(s->z_filefunc, s->filestream);
+
+ 00022 ff 76 30 push DWORD PTR [esi+48]
+ 00025 8b 46 14 mov eax, DWORD PTR [esi+20]
+ 00028 ff 76 1c push DWORD PTR [esi+28]
+ 0002b ff d0 call eax
+
+; 819 : TRYFREE(s);
+
+ 0002d 56 push esi
+ 0002e ff 15 00 00 00
+ 00 call DWORD PTR __imp__free
+ 00034 83 c4 0c add esp, 12 ; 0000000cH
+
+; 820 : return UNZ_OK;
+
+ 00037 33 c0 xor eax, eax
+ 00039 5e pop esi
+
+; 821 : }
+
+ 0003a 5d pop ebp
+ 0003b c2 04 00 ret 4
+_unzClose@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzGetGlobalInfo64@8
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_pglobal_info$ = 12 ; size = 4
+_unzGetGlobalInfo64@8 PROC ; COMDAT
+
+; 829 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 830 : unz64_s* s;
+; 831 : if (file==NULL)
+
+ 00003 8b 45 08 mov eax, DWORD PTR _file$[ebp]
+ 00006 85 c0 test eax, eax
+ 00008 75 09 jne SHORT $LN2@unzGetGlob
+
+; 832 : return UNZ_PARAMERROR;
+
+ 0000a b8 9a ff ff ff mov eax, -102 ; ffffff9aH
+
+; 836 : }
+
+ 0000f 5d pop ebp
+ 00010 c2 08 00 ret 8
+$LN2@unzGetGlob:
+
+; 833 : s=(unz64_s*)file;
+; 834 : *pglobal_info=s->gi;
+
+ 00013 0f 10 40 38 movups xmm0, XMMWORD PTR [eax+56]
+ 00017 8b 45 0c mov eax, DWORD PTR _pglobal_info$[ebp]
+ 0001a 0f 11 00 movups XMMWORD PTR [eax], xmm0
+
+; 835 : return UNZ_OK;
+
+ 0001d 33 c0 xor eax, eax
+
+; 836 : }
+
+ 0001f 5d pop ebp
+ 00020 c2 08 00 ret 8
+_unzGetGlobalInfo64@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzGetGlobalInfo@8
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_pglobal_info32$ = 12 ; size = 4
+_unzGetGlobalInfo@8 PROC ; COMDAT
+
+; 839 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 840 : unz64_s* s;
+; 841 : if (file==NULL)
+
+ 00003 8b 55 08 mov edx, DWORD PTR _file$[ebp]
+ 00006 85 d2 test edx, edx
+ 00008 75 07 jne SHORT $LN2@unzGetGlob
+
+; 842 : return UNZ_PARAMERROR;
+
+ 0000a 8d 42 9a lea eax, DWORD PTR [edx-102]
+
+; 848 : }
+
+ 0000d 5d pop ebp
+ 0000e c2 08 00 ret 8
+$LN2@unzGetGlob:
+
+; 843 : s=(unz64_s*)file;
+; 844 : /* to do : check if number_entry is not truncated */
+; 845 : pglobal_info32->number_entry = (uLong)s->gi.number_entry;
+
+ 00011 8b 4d 0c mov ecx, DWORD PTR _pglobal_info32$[ebp]
+ 00014 8b 42 38 mov eax, DWORD PTR [edx+56]
+ 00017 89 01 mov DWORD PTR [ecx], eax
+
+; 846 : pglobal_info32->size_comment = s->gi.size_comment;
+
+ 00019 8b 42 40 mov eax, DWORD PTR [edx+64]
+ 0001c 89 41 04 mov DWORD PTR [ecx+4], eax
+
+; 847 : return UNZ_OK;
+
+ 0001f 33 c0 xor eax, eax
+
+; 848 : }
+
+ 00021 5d pop ebp
+ 00022 c2 08 00 ret 8
+_unzGetGlobalInfo@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unz64local_DosDateToTmuDate
+_TEXT SEGMENT
+_ptm$1$ = -4 ; size = 4
+_ulDosDate$ = 8 ; size = 8
+_unz64local_DosDateToTmuDate PROC ; COMDAT
+; _ptm$ = ecx
+
+; 853 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 53 push ebx
+
+; 854 : ZPOS64_T uDate;
+; 855 : uDate = (ZPOS64_T)(ulDosDate>>16);
+
+ 00005 8b 5d 08 mov ebx, DWORD PTR _ulDosDate$[ebp]
+ 00008 56 push esi
+ 00009 57 push edi
+ 0000a 8b 7d 0c mov edi, DWORD PTR _ulDosDate$[ebp+4]
+ 0000d 8b f3 mov esi, ebx
+ 0000f 8b d7 mov edx, edi
+ 00011 89 4d fc mov DWORD PTR _ptm$1$[ebp], ecx
+ 00014 0f ac d6 10 shrd esi, edx, 16
+
+; 856 : ptm->tm_mday = (uInt)(uDate&0x1f) ;
+
+ 00018 8b c6 mov eax, esi
+ 0001a c1 ea 10 shr edx, 16 ; 00000010H
+ 0001d 83 e0 1f and eax, 31 ; 0000001fH
+ 00020 89 41 0c mov DWORD PTR [ecx+12], eax
+
+; 857 : ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ;
+
+ 00023 8b ce mov ecx, esi
+ 00025 8b c2 mov eax, edx
+ 00027 0f ac c1 05 shrd ecx, eax, 5
+
+; 858 : ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;
+
+ 0002b 0f ac d6 09 shrd esi, edx, 9
+ 0002f c1 e8 05 shr eax, 5
+ 00032 83 e1 0f and ecx, 15 ; 0000000fH
+ 00035 8b 45 fc mov eax, DWORD PTR _ptm$1$[ebp]
+ 00038 49 dec ecx
+ 00039 c1 ea 09 shr edx, 9
+ 0003c 83 e6 7f and esi, 127 ; 0000007fH
+ 0003f 8b d0 mov edx, eax
+ 00041 81 c6 bc 07 00
+ 00 add esi, 1980 ; 000007bcH
+ 00047 89 48 10 mov DWORD PTR [eax+16], ecx
+
+; 859 :
+; 860 : ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);
+
+ 0004a 8b cb mov ecx, ebx
+ 0004c 8b c7 mov eax, edi
+ 0004e 0f ac c1 0b shrd ecx, eax, 11
+ 00052 89 72 14 mov DWORD PTR [edx+20], esi
+ 00055 c1 e8 0b shr eax, 11 ; 0000000bH
+ 00058 83 e1 1f and ecx, 31 ; 0000001fH
+
+; 861 : ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ;
+
+ 0005b 8b c3 mov eax, ebx
+ 0005d 89 4a 08 mov DWORD PTR [edx+8], ecx
+ 00060 0f ac f8 05 shrd eax, edi, 5
+
+; 862 : ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ;
+
+ 00064 83 e3 1f and ebx, 31 ; 0000001fH
+ 00067 c1 ef 05 shr edi, 5
+ 0006a 83 e0 3f and eax, 63 ; 0000003fH
+
+; 863 : }
+
+ 0006d 5f pop edi
+ 0006e 03 db add ebx, ebx
+ 00070 89 42 04 mov DWORD PTR [edx+4], eax
+ 00073 5e pop esi
+ 00074 89 1a mov DWORD PTR [edx], ebx
+ 00076 5b pop ebx
+ 00077 8b e5 mov esp, ebp
+ 00079 5d pop ebp
+ 0007a c3 ret 0
+_unz64local_DosDateToTmuDate ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unz64local_GetCurrentFileInfoInternal
+_TEXT SEGMENT
+_lSeek$1$ = -132 ; size = 4
+_uL$ = -132 ; size = 4
+_uSizeRead$1$ = -128 ; size = 4
+_uSizeRead$1$ = -128 ; size = 4
+_uSizeRead$1$ = -128 ; size = 4
+_dataSize$1 = -128 ; size = 4
+_file_info_internal$2$ = -124 ; size = 4
+_acc$1$ = -120 ; size = 4
+_uMagic$ = -120 ; size = 4
+_headerId$2 = -116 ; size = 4
+_pfile_info$1$ = -112 ; size = 4
+_uL$3 = -108 ; size = 4
+_file_info_internal$ = -104 ; size = 8
+_file_info$ = -96 ; size = 88
+_pfile_info_internal$ = 8 ; size = 4
+_szFileName$ = 12 ; size = 4
+_fileNameBufferSize$ = 16 ; size = 4
+_extraField$ = 20 ; size = 4
+_extraFieldBufferSize$ = 24 ; size = 4
+_szComment$ = 28 ; size = 4
+_commentBufferSize$ = 32 ; size = 4
+_unz64local_GetCurrentFileInfoInternal PROC ; COMDAT
+; _file$ = ecx
+; _pfile_info$ = edx
+
+; 889 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f0 and esp, -16 ; fffffff0H
+ 00006 81 ec 88 00 00
+ 00 sub esp, 136 ; 00000088H
+ 0000c 56 push esi
+ 0000d 57 push edi
+ 0000e 8b f9 mov edi, ecx
+ 00010 89 54 24 20 mov DWORD PTR _pfile_info$1$[esp+144], edx
+
+; 890 : unz64_s* s;
+; 891 : unz_file_info64 file_info;
+; 892 : unz_file_info64_internal file_info_internal;
+; 893 : int err=UNZ_OK;
+
+ 00014 33 f6 xor esi, esi
+
+; 894 : uLong uMagic;
+; 895 : long lSeek=0;
+; 896 : uLong uL;
+; 897 :
+; 898 : if (file==NULL)
+
+ 00016 85 ff test edi, edi
+ 00018 75 09 jne SHORT $LN4@unz64local
+
+; 899 : return UNZ_PARAMERROR;
+
+ 0001a 8d 41 9a lea eax, DWORD PTR [ecx-102]
+
+; 1115 : }
+
+ 0001d 5f pop edi
+ 0001e 5e pop esi
+ 0001f 8b e5 mov esp, ebp
+ 00021 5d pop ebp
+ 00022 c3 ret 0
+$LN4@unz64local:
+
+; 900 : s=(unz64_s*)file;
+; 901 : if (ZSEEK64(s->z_filefunc, s->filestream,
+; 902 : s->pos_in_central_dir+s->byte_before_the_zipfile,
+; 903 : ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 00023 8b 4f 58 mov ecx, DWORD PTR [edi+88]
+ 00026 03 4f 48 add ecx, DWORD PTR [edi+72]
+ 00029 8b 47 5c mov eax, DWORD PTR [edi+92]
+ 0002c 13 47 4c adc eax, DWORD PTR [edi+76]
+ 0002f 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 00032 6a 00 push 0
+ 00034 50 push eax
+ 00035 51 push ecx
+ 00036 8b cf mov ecx, edi
+ 00038 e8 00 00 00 00 call _call_zseek64
+ 0003d 83 c4 0c add esp, 12 ; 0000000cH
+ 00040 85 c0 test eax, eax
+ 00042 74 05 je SHORT $LN72@unz64local
+
+; 904 : err=UNZ_ERRNO;
+
+ 00044 83 ce ff or esi, -1
+
+; 905 :
+; 906 :
+; 907 : /* we check the magic */
+; 908 : if (err==UNZ_OK)
+
+ 00047 eb 2b jmp SHORT $LN9@unz64local
+$LN72@unz64local:
+
+; 909 : {
+; 910 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
+
+ 00049 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 0004c 8d 44 24 18 lea eax, DWORD PTR _uMagic$[esp+144]
+ 00050 50 push eax
+ 00051 8b cf mov ecx, edi
+ 00053 e8 00 00 00 00 call _unz64local_getLong
+ 00058 83 c4 04 add esp, 4
+ 0005b 85 c0 test eax, eax
+ 0005d 74 05 je SHORT $LN7@unz64local
+
+; 911 : err=UNZ_ERRNO;
+
+ 0005f 83 ce ff or esi, -1
+ 00062 eb 10 jmp SHORT $LN9@unz64local
+$LN7@unz64local:
+
+; 912 : else if (uMagic!=0x02014b50)
+
+ 00064 81 7c 24 18 50
+ 4b 01 02 cmp DWORD PTR _uMagic$[esp+144], 33639248 ; 02014b50H
+ 0006c b8 99 ff ff ff mov eax, -103 ; ffffff99H
+ 00071 0f 45 f0 cmovne esi, eax
+$LN9@unz64local:
+
+; 913 : err=UNZ_BADZIPFILE;
+; 914 : }
+; 915 :
+; 916 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK)
+
+ 00074 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 00077 8d 44 24 30 lea eax, DWORD PTR _file_info$[esp+144]
+ 0007b 50 push eax
+ 0007c 8b cf mov ecx, edi
+ 0007e e8 00 00 00 00 call _unz64local_getShort
+
+; 917 : err=UNZ_ERRNO;
+; 918 :
+; 919 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK)
+
+ 00083 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 00086 83 c9 ff or ecx, -1
+ 00089 83 c4 04 add esp, 4
+ 0008c 85 c0 test eax, eax
+ 0008e 8d 44 24 34 lea eax, DWORD PTR _file_info$[esp+148]
+ 00092 0f 45 f1 cmovne esi, ecx
+ 00095 8b cf mov ecx, edi
+ 00097 50 push eax
+ 00098 e8 00 00 00 00 call _unz64local_getShort
+
+; 920 : err=UNZ_ERRNO;
+; 921 :
+; 922 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK)
+
+ 0009d 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 000a0 83 c4 04 add esp, 4
+ 000a3 85 c0 test eax, eax
+ 000a5 8b cf mov ecx, edi
+ 000a7 b8 ff ff ff ff mov eax, -1
+ 000ac 0f 45 f0 cmovne esi, eax
+ 000af 8d 44 24 38 lea eax, DWORD PTR _file_info$[esp+152]
+ 000b3 50 push eax
+ 000b4 e8 00 00 00 00 call _unz64local_getShort
+
+; 923 : err=UNZ_ERRNO;
+; 924 :
+; 925 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK)
+
+ 000b9 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 000bc 83 c4 04 add esp, 4
+ 000bf 85 c0 test eax, eax
+ 000c1 8b cf mov ecx, edi
+ 000c3 b8 ff ff ff ff mov eax, -1
+ 000c8 0f 45 f0 cmovne esi, eax
+ 000cb 8d 44 24 3c lea eax, DWORD PTR _file_info$[esp+156]
+ 000cf 50 push eax
+ 000d0 e8 00 00 00 00 call _unz64local_getShort
+
+; 926 : err=UNZ_ERRNO;
+; 927 :
+; 928 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK)
+
+ 000d5 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 000d8 83 c4 04 add esp, 4
+ 000db 85 c0 test eax, eax
+ 000dd 8b cf mov ecx, edi
+ 000df b8 ff ff ff ff mov eax, -1
+ 000e4 0f 45 f0 cmovne esi, eax
+ 000e7 8d 44 24 40 lea eax, DWORD PTR _file_info$[esp+160]
+ 000eb 50 push eax
+ 000ec e8 00 00 00 00 call _unz64local_getLong
+ 000f1 83 c4 04 add esp, 4
+
+; 929 : err=UNZ_ERRNO;
+; 930 :
+; 931 : unz64local_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date);
+
+ 000f4 8d 4c 24 70 lea ecx, DWORD PTR _file_info$[esp+208]
+ 000f8 85 c0 test eax, eax
+ 000fa b8 ff ff ff ff mov eax, -1
+ 000ff 0f 45 f0 cmovne esi, eax
+ 00102 6a 00 push 0
+ 00104 ff 74 24 44 push DWORD PTR _file_info$[esp+164]
+ 00108 e8 00 00 00 00 call _unz64local_DosDateToTmuDate
+
+; 932 :
+; 933 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK)
+
+ 0010d 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 00110 8d 44 24 4c lea eax, DWORD PTR _file_info$[esp+172]
+ 00114 50 push eax
+ 00115 8b cf mov ecx, edi
+ 00117 e8 00 00 00 00 call _unz64local_getLong
+
+; 934 : err=UNZ_ERRNO;
+; 935 :
+; 936 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
+
+ 0011c 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 0011f 83 c4 0c add esp, 12 ; 0000000cH
+ 00122 85 c0 test eax, eax
+ 00124 8b cf mov ecx, edi
+ 00126 b8 ff ff ff ff mov eax, -1
+ 0012b 0f 45 f0 cmovne esi, eax
+ 0012e 8d 44 24 0c lea eax, DWORD PTR _uL$[esp+144]
+ 00132 50 push eax
+ 00133 e8 00 00 00 00 call _unz64local_getLong
+
+; 937 : err=UNZ_ERRNO;
+; 938 : file_info.compressed_size = uL;
+; 939 :
+; 940 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
+
+ 00138 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 0013b 83 c4 04 add esp, 4
+ 0013e 85 c0 test eax, eax
+ 00140 c7 44 24 4c 00
+ 00 00 00 mov DWORD PTR _file_info$[esp+172], 0
+ 00148 b8 ff ff ff ff mov eax, -1
+ 0014d 8b cf mov ecx, edi
+ 0014f 0f 45 f0 cmovne esi, eax
+ 00152 8b 44 24 0c mov eax, DWORD PTR _uL$[esp+144]
+ 00156 89 44 24 48 mov DWORD PTR _file_info$[esp+168], eax
+ 0015a 8d 44 24 0c lea eax, DWORD PTR _uL$[esp+144]
+ 0015e 50 push eax
+ 0015f e8 00 00 00 00 call _unz64local_getLong
+ 00164 83 c4 04 add esp, 4
+ 00167 85 c0 test eax, eax
+ 00169 b8 ff ff ff ff mov eax, -1
+ 0016e 0f 45 f0 cmovne esi, eax
+
+; 941 : err=UNZ_ERRNO;
+; 942 : file_info.uncompressed_size = uL;
+
+ 00171 8b 44 24 0c mov eax, DWORD PTR _uL$[esp+144]
+ 00175 89 44 24 50 mov DWORD PTR _file_info$[esp+176], eax
+
+; 943 :
+; 944 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK)
+
+ 00179 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 0017c 8d 44 24 58 lea eax, DWORD PTR _file_info$[esp+184]
+ 00180 50 push eax
+ 00181 8b cf mov ecx, edi
+ 00183 c7 44 24 58 00
+ 00 00 00 mov DWORD PTR _file_info$[esp+184], 0
+ 0018b e8 00 00 00 00 call _unz64local_getShort
+
+; 945 : err=UNZ_ERRNO;
+; 946 :
+; 947 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK)
+
+ 00190 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 00193 83 c4 04 add esp, 4
+ 00196 85 c0 test eax, eax
+ 00198 8b cf mov ecx, edi
+ 0019a b8 ff ff ff ff mov eax, -1
+ 0019f 0f 45 f0 cmovne esi, eax
+ 001a2 8d 44 24 5c lea eax, DWORD PTR _file_info$[esp+188]
+ 001a6 50 push eax
+ 001a7 e8 00 00 00 00 call _unz64local_getShort
+
+; 948 : err=UNZ_ERRNO;
+; 949 :
+; 950 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK)
+
+ 001ac 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 001af 83 c4 04 add esp, 4
+ 001b2 85 c0 test eax, eax
+ 001b4 8b cf mov ecx, edi
+ 001b6 b8 ff ff ff ff mov eax, -1
+ 001bb 0f 45 f0 cmovne esi, eax
+ 001be 8d 44 24 60 lea eax, DWORD PTR _file_info$[esp+192]
+ 001c2 50 push eax
+ 001c3 e8 00 00 00 00 call _unz64local_getShort
+
+; 951 : err=UNZ_ERRNO;
+; 952 :
+; 953 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK)
+
+ 001c8 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 001cb 83 c4 04 add esp, 4
+ 001ce 85 c0 test eax, eax
+ 001d0 8b cf mov ecx, edi
+ 001d2 b8 ff ff ff ff mov eax, -1
+ 001d7 0f 45 f0 cmovne esi, eax
+ 001da 8d 44 24 64 lea eax, DWORD PTR _file_info$[esp+196]
+ 001de 50 push eax
+ 001df e8 00 00 00 00 call _unz64local_getShort
+
+; 954 : err=UNZ_ERRNO;
+; 955 :
+; 956 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK)
+
+ 001e4 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 001e7 83 c4 04 add esp, 4
+ 001ea 85 c0 test eax, eax
+ 001ec 8b cf mov ecx, edi
+ 001ee b8 ff ff ff ff mov eax, -1
+ 001f3 0f 45 f0 cmovne esi, eax
+ 001f6 8d 44 24 68 lea eax, DWORD PTR _file_info$[esp+200]
+ 001fa 50 push eax
+ 001fb e8 00 00 00 00 call _unz64local_getShort
+
+; 957 : err=UNZ_ERRNO;
+; 958 :
+; 959 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK)
+
+ 00200 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 00203 83 c4 04 add esp, 4
+ 00206 85 c0 test eax, eax
+ 00208 8b cf mov ecx, edi
+ 0020a b8 ff ff ff ff mov eax, -1
+ 0020f 0f 45 f0 cmovne esi, eax
+ 00212 8d 44 24 6c lea eax, DWORD PTR _file_info$[esp+204]
+ 00216 50 push eax
+ 00217 e8 00 00 00 00 call _unz64local_getLong
+
+; 960 : err=UNZ_ERRNO;
+; 961 :
+; 962 : // relative offset of local header
+; 963 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
+
+ 0021c 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 0021f 83 c4 04 add esp, 4
+ 00222 85 c0 test eax, eax
+ 00224 8b cf mov ecx, edi
+ 00226 b8 ff ff ff ff mov eax, -1
+ 0022b 0f 45 f0 cmovne esi, eax
+ 0022e 8d 44 24 0c lea eax, DWORD PTR _uL$[esp+144]
+ 00232 50 push eax
+ 00233 e8 00 00 00 00 call _unz64local_getLong
+
+; 964 : err=UNZ_ERRNO;
+; 965 : file_info_internal.offset_curfile = uL;
+; 966 :
+; 967 : lSeek+=file_info.size_filename;
+
+ 00238 8b 4c 24 5c mov ecx, DWORD PTR _file_info$[esp+188]
+ 0023c 83 c4 04 add esp, 4
+ 0023f 85 c0 test eax, eax
+ 00241 c7 44 24 2c 00
+ 00 00 00 mov DWORD PTR _file_info_internal$[esp+148], 0
+ 00249 b8 ff ff ff ff mov eax, -1
+ 0024e 0f 45 f0 cmovne esi, eax
+ 00251 8b 44 24 0c mov eax, DWORD PTR _uL$[esp+144]
+ 00255 89 44 24 14 mov DWORD PTR _file_info_internal$2$[esp+144], eax
+ 00259 89 44 24 28 mov DWORD PTR _file_info_internal$[esp+144], eax
+ 0025d 89 4c 24 0c mov DWORD PTR _lSeek$1$[esp+144], ecx
+
+; 968 : if ((err==UNZ_OK) && (szFileName!=NULL))
+
+ 00261 85 f6 test esi, esi
+ 00263 0f 85 f7 00 00
+ 00 jne $LN30@unz64local
+ 00269 8b 55 0c mov edx, DWORD PTR _szFileName$[ebp]
+ 0026c 85 d2 test edx, edx
+ 0026e 74 53 je SHORT $LN73@unz64local
+
+; 969 : {
+; 970 : uLong uSizeRead ;
+; 971 : if (file_info.size_filename<fileNameBufferSize)
+
+ 00270 8b 45 10 mov eax, DWORD PTR _fileNameBufferSize$[ebp]
+ 00273 3b c8 cmp ecx, eax
+ 00275 73 0c jae SHORT $LN26@unz64local
+
+; 972 : {
+; 973 : *(szFileName+file_info.size_filename)='\0';
+
+ 00277 c6 04 11 00 mov BYTE PTR [ecx+edx], 0
+
+; 974 : uSizeRead = file_info.size_filename;
+
+ 0027b 8b d1 mov edx, ecx
+ 0027d 89 54 24 10 mov DWORD PTR _uSizeRead$1$[esp+144], edx
+
+; 975 : }
+
+ 00281 eb 06 jmp SHORT $LN27@unz64local
+$LN26@unz64local:
+
+; 976 : else
+; 977 : uSizeRead = fileNameBufferSize;
+
+ 00283 8b d0 mov edx, eax
+ 00285 89 44 24 10 mov DWORD PTR _uSizeRead$1$[esp+144], eax
+$LN27@unz64local:
+
+; 978 :
+; 979 : if ((file_info.size_filename>0) && (fileNameBufferSize>0))
+
+ 00289 85 c9 test ecx, ecx
+ 0028b 74 28 je SHORT $LN29@unz64local
+ 0028d 85 c0 test eax, eax
+ 0028f 74 24 je SHORT $LN29@unz64local
+
+; 980 : if (ZREAD64(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead)
+
+ 00291 8b 47 04 mov eax, DWORD PTR [edi+4]
+ 00294 52 push edx
+ 00295 ff 75 0c push DWORD PTR _szFileName$[ebp]
+ 00298 ff 77 30 push DWORD PTR [edi+48]
+ 0029b ff 77 1c push DWORD PTR [edi+28]
+ 0029e ff d0 call eax
+ 002a0 8b 54 24 20 mov edx, DWORD PTR _uSizeRead$1$[esp+160]
+ 002a4 83 c4 10 add esp, 16 ; 00000010H
+ 002a7 8b 4c 24 0c mov ecx, DWORD PTR _lSeek$1$[esp+144]
+ 002ab 3b c2 cmp eax, edx
+ 002ad b8 ff ff ff ff mov eax, -1
+ 002b2 0f 45 f0 cmovne esi, eax
+$LN29@unz64local:
+
+; 981 : err=UNZ_ERRNO;
+; 982 : lSeek -= uSizeRead;
+
+ 002b5 2b ca sub ecx, edx
+ 002b7 89 4c 24 0c mov DWORD PTR _lSeek$1$[esp+144], ecx
+
+; 983 : }
+; 984 :
+; 985 : // Read extrafield
+; 986 : if ((err==UNZ_OK) && (extraField!=NULL))
+
+ 002bb 85 f6 test esi, esi
+ 002bd 0f 85 9d 00 00
+ 00 jne $LN30@unz64local
+$LN73@unz64local:
+ 002c3 83 7d 14 00 cmp DWORD PTR _extraField$[ebp], 0
+ 002c7 0f 84 93 00 00
+ 00 je $LN30@unz64local
+
+; 987 : {
+; 988 : ZPOS64_T uSizeRead ;
+; 989 : if (file_info.size_file_extra<extraFieldBufferSize)
+
+ 002cd 8b 44 24 5c mov eax, DWORD PTR _file_info$[esp+188]
+ 002d1 8b 55 18 mov edx, DWORD PTR _extraFieldBufferSize$[ebp]
+
+; 990 : uSizeRead = file_info.size_file_extra;
+
+ 002d4 89 44 24 10 mov DWORD PTR _uSizeRead$1$[esp+144], eax
+ 002d8 3b c2 cmp eax, edx
+ 002da 72 04 jb SHORT $LN33@unz64local
+
+; 991 : else
+; 992 : uSizeRead = extraFieldBufferSize;
+
+ 002dc 89 54 24 10 mov DWORD PTR _uSizeRead$1$[esp+144], edx
+$LN33@unz64local:
+
+; 993 :
+; 994 : if (lSeek!=0)
+
+ 002e0 85 c9 test ecx, ecx
+ 002e2 74 2e je SHORT $LN36@unz64local
+
+; 995 : {
+; 996 : if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
+
+ 002e4 8b c1 mov eax, ecx
+ 002e6 8b cf mov ecx, edi
+ 002e8 99 cdq
+ 002e9 6a 01 push 1
+ 002eb 52 push edx
+ 002ec 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 002ef 50 push eax
+ 002f0 e8 00 00 00 00 call _call_zseek64
+
+; 997 : lSeek=0;
+
+ 002f5 8b 55 18 mov edx, DWORD PTR _extraFieldBufferSize$[ebp]
+ 002f8 83 c4 0c add esp, 12 ; 0000000cH
+ 002fb 85 c0 test eax, eax
+ 002fd 8b 44 24 5c mov eax, DWORD PTR _file_info$[esp+188]
+ 00301 75 08 jne SHORT $LN35@unz64local
+ 00303 33 c9 xor ecx, ecx
+ 00305 89 4c 24 0c mov DWORD PTR _lSeek$1$[esp+144], ecx
+ 00309 eb 07 jmp SHORT $LN36@unz64local
+$LN35@unz64local:
+ 0030b 8b 4c 24 0c mov ecx, DWORD PTR _lSeek$1$[esp+144]
+
+; 998 : else
+; 999 : err=UNZ_ERRNO;
+
+ 0030f 83 ce ff or esi, -1
+$LN36@unz64local:
+
+; 1000 : }
+; 1001 :
+; 1002 : if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0))
+
+ 00312 85 c0 test eax, eax
+ 00314 74 3c je SHORT $LN80@unz64local
+ 00316 85 d2 test edx, edx
+ 00318 74 38 je SHORT $LN80@unz64local
+
+; 1003 : if (ZREAD64(s->z_filefunc, s->filestream,extraField,(uLong)uSizeRead)!=uSizeRead)
+
+ 0031a ff 74 24 10 push DWORD PTR _uSizeRead$1$[esp+144]
+ 0031e 8b 47 04 mov eax, DWORD PTR [edi+4]
+ 00321 ff 75 14 push DWORD PTR _extraField$[ebp]
+ 00324 ff 77 30 push DWORD PTR [edi+48]
+ 00327 ff 77 1c push DWORD PTR [edi+28]
+ 0032a ff d0 call eax
+ 0032c 8b 54 24 20 mov edx, DWORD PTR _uSizeRead$1$[esp+160]
+ 00330 83 c4 10 add esp, 16 ; 00000010H
+ 00333 33 c9 xor ecx, ecx
+ 00335 3b c2 cmp eax, edx
+ 00337 75 04 jne SHORT $LN77@unz64local
+ 00339 85 c9 test ecx, ecx
+ 0033b 74 03 je SHORT $LN78@unz64local
+$LN77@unz64local:
+
+; 1004 : err=UNZ_ERRNO;
+
+ 0033d 83 ce ff or esi, -1
+$LN78@unz64local:
+ 00340 8b 44 24 5c mov eax, DWORD PTR _file_info$[esp+188]
+ 00344 8b 4c 24 0c mov ecx, DWORD PTR _lSeek$1$[esp+144]
+
+; 1005 :
+; 1006 : lSeek += file_info.size_file_extra - (uLong)uSizeRead;
+
+ 00348 2b c2 sub eax, edx
+ 0034a 03 c8 add ecx, eax
+
+; 1007 : }
+
+ 0034c 8b 44 24 5c mov eax, DWORD PTR _file_info$[esp+188]
+ 00350 eb 14 jmp SHORT $LN81@unz64local
+$LN80@unz64local:
+ 00352 8b 54 24 10 mov edx, DWORD PTR _uSizeRead$1$[esp+144]
+
+; 1005 :
+; 1006 : lSeek += file_info.size_file_extra - (uLong)uSizeRead;
+
+ 00356 2b c2 sub eax, edx
+ 00358 03 c8 add ecx, eax
+
+; 1007 : }
+
+ 0035a 8b 44 24 5c mov eax, DWORD PTR _file_info$[esp+188]
+ 0035e eb 06 jmp SHORT $LN81@unz64local
+$LN30@unz64local:
+
+; 1008 : else
+; 1009 : lSeek += file_info.size_file_extra;
+
+ 00360 8b 44 24 5c mov eax, DWORD PTR _file_info$[esp+188]
+ 00364 03 c8 add ecx, eax
+$LN81@unz64local:
+ 00366 89 4c 24 0c mov DWORD PTR _lSeek$1$[esp+144], ecx
+
+; 1010 :
+; 1011 :
+; 1012 : if ((err==UNZ_OK) && (file_info.size_file_extra != 0))
+
+ 0036a 85 f6 test esi, esi
+ 0036c 0f 85 3e 02 00
+ 00 jne $LN66@unz64local
+ 00372 85 c0 test eax, eax
+ 00374 0f 84 63 01 00
+ 00 je $LN74@unz64local
+
+; 1013 : {
+; 1014 : uLong acc = 0;
+; 1015 :
+; 1016 : // since lSeek now points to after the extra field we need to move back
+; 1017 : lSeek -= file_info.size_file_extra;
+
+ 0037a 2b c8 sub ecx, eax
+ 0037c 89 74 24 18 mov DWORD PTR _acc$1$[esp+144], esi
+ 00380 89 4c 24 0c mov DWORD PTR _lSeek$1$[esp+144], ecx
+
+; 1018 :
+; 1019 : if (lSeek!=0)
+
+ 00384 74 25 je SHORT $LN68@unz64local
+
+; 1020 : {
+; 1021 : if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
+
+ 00386 8b c1 mov eax, ecx
+ 00388 8b cf mov ecx, edi
+ 0038a 99 cdq
+ 0038b 6a 01 push 1
+ 0038d 52 push edx
+ 0038e 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 00391 50 push eax
+ 00392 e8 00 00 00 00 call _call_zseek64
+ 00397 83 c4 0c add esp, 12 ; 0000000cH
+ 0039a 85 c0 test eax, eax
+
+; 1022 : lSeek=0;
+
+ 0039c 8b 44 24 5c mov eax, DWORD PTR _file_info$[esp+188]
+ 003a0 75 06 jne SHORT $LN41@unz64local
+ 003a2 89 74 24 0c mov DWORD PTR _lSeek$1$[esp+144], esi
+ 003a6 eb 03 jmp SHORT $LN68@unz64local
+$LN41@unz64local:
+
+; 1023 : else
+; 1024 : err=UNZ_ERRNO;
+
+ 003a8 83 ce ff or esi, -1
+$LN68@unz64local:
+
+; 1025 : }
+; 1026 :
+; 1027 : while(acc < file_info.size_file_extra)
+
+ 003ab 85 c0 test eax, eax
+ 003ad 0f 84 22 01 00
+ 00 je $LN3@unz64local
+$LL2@unz64local:
+
+; 1028 : {
+; 1029 : uLong headerId;
+; 1030 : uLong dataSize;
+; 1031 :
+; 1032 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&headerId) != UNZ_OK)
+
+ 003b3 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 003b6 8d 44 24 1c lea eax, DWORD PTR _headerId$2[esp+144]
+ 003ba 50 push eax
+ 003bb 8b cf mov ecx, edi
+ 003bd e8 00 00 00 00 call _unz64local_getShort
+
+; 1033 : err=UNZ_ERRNO;
+; 1034 :
+; 1035 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&dataSize) != UNZ_OK)
+
+ 003c2 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 003c5 83 c4 04 add esp, 4
+ 003c8 85 c0 test eax, eax
+ 003ca 8b cf mov ecx, edi
+ 003cc b8 ff ff ff ff mov eax, -1
+ 003d1 0f 45 f0 cmovne esi, eax
+ 003d4 8d 44 24 10 lea eax, DWORD PTR _dataSize$1[esp+144]
+ 003d8 50 push eax
+ 003d9 e8 00 00 00 00 call _unz64local_getShort
+ 003de 83 c4 04 add esp, 4
+ 003e1 85 c0 test eax, eax
+ 003e3 b8 ff ff ff ff mov eax, -1
+ 003e8 0f 45 f0 cmovne esi, eax
+
+; 1036 : err=UNZ_ERRNO;
+; 1037 :
+; 1038 : /* ZIP64 extra fields */
+; 1039 : if (headerId == 0x0001)
+
+ 003eb 83 7c 24 1c 01 cmp DWORD PTR _headerId$2[esp+144], 1
+ 003f0 0f 85 a7 00 00
+ 00 jne $LN45@unz64local
+
+; 1040 : {
+; 1041 : uLong uL;
+; 1042 :
+; 1043 : if(file_info.uncompressed_size == MAXU32)
+
+ 003f6 39 44 24 50 cmp DWORD PTR _file_info$[esp+176], eax
+ 003fa 75 23 jne SHORT $LN48@unz64local
+ 003fc 83 7c 24 54 00 cmp DWORD PTR _file_info$[esp+180], 0
+ 00401 75 1c jne SHORT $LN48@unz64local
+
+; 1044 : {
+; 1045 : if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK)
+
+ 00403 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 00406 8d 44 24 50 lea eax, DWORD PTR _file_info$[esp+176]
+ 0040a 50 push eax
+ 0040b 8b cf mov ecx, edi
+ 0040d e8 00 00 00 00 call _unz64local_getLong64
+ 00412 83 c4 04 add esp, 4
+ 00415 85 c0 test eax, eax
+ 00417 b8 ff ff ff ff mov eax, -1
+ 0041c 0f 45 f0 cmovne esi, eax
+$LN48@unz64local:
+
+; 1046 : err=UNZ_ERRNO;
+; 1047 : }
+; 1048 :
+; 1049 : if(file_info.compressed_size == MAXU32)
+
+ 0041f 83 7c 24 48 ff cmp DWORD PTR _file_info$[esp+168], -1
+ 00424 75 23 jne SHORT $LN50@unz64local
+ 00426 83 7c 24 4c 00 cmp DWORD PTR _file_info$[esp+172], 0
+ 0042b 75 1c jne SHORT $LN50@unz64local
+
+; 1050 : {
+; 1051 : if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK)
+
+ 0042d 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 00430 8d 44 24 48 lea eax, DWORD PTR _file_info$[esp+168]
+ 00434 50 push eax
+ 00435 8b cf mov ecx, edi
+ 00437 e8 00 00 00 00 call _unz64local_getLong64
+ 0043c 83 c4 04 add esp, 4
+ 0043f 85 c0 test eax, eax
+ 00441 b8 ff ff ff ff mov eax, -1
+ 00446 0f 45 f0 cmovne esi, eax
+$LN50@unz64local:
+
+; 1052 : err=UNZ_ERRNO;
+; 1053 : }
+; 1054 :
+; 1055 : if(file_info_internal.offset_curfile == MAXU32)
+
+ 00449 83 7c 24 14 ff cmp DWORD PTR _file_info_internal$2$[esp+144], -1
+ 0044e 75 2b jne SHORT $LN52@unz64local
+ 00450 83 7c 24 2c 00 cmp DWORD PTR _file_info_internal$[esp+148], 0
+ 00455 75 24 jne SHORT $LN52@unz64local
+
+; 1056 : {
+; 1057 : /* Relative Header offset */
+; 1058 : if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK)
+
+ 00457 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 0045a 8d 44 24 28 lea eax, DWORD PTR _file_info_internal$[esp+144]
+ 0045e 50 push eax
+ 0045f 8b cf mov ecx, edi
+ 00461 e8 00 00 00 00 call _unz64local_getLong64
+ 00466 83 c4 04 add esp, 4
+ 00469 85 c0 test eax, eax
+ 0046b b8 ff ff ff ff mov eax, -1
+ 00470 0f 45 f0 cmovne esi, eax
+ 00473 8b 44 24 28 mov eax, DWORD PTR _file_info_internal$[esp+144]
+ 00477 89 44 24 14 mov DWORD PTR _file_info_internal$2$[esp+144], eax
+$LN52@unz64local:
+
+; 1059 : err=UNZ_ERRNO;
+; 1060 : }
+; 1061 :
+; 1062 : if(file_info.disk_num_start == MAXU32)
+
+ 0047b 83 7c 24 64 ff cmp DWORD PTR _file_info$[esp+196], -1
+ 00480 75 3a jne SHORT $LN55@unz64local
+
+; 1063 : {
+; 1064 : /* Disk Start Number */
+; 1065 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
+
+ 00482 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 00485 8d 44 24 24 lea eax, DWORD PTR _uL$3[esp+144]
+ 00489 50 push eax
+ 0048a 8b cf mov ecx, edi
+ 0048c e8 00 00 00 00 call _unz64local_getLong
+ 00491 83 c4 04 add esp, 4
+ 00494 85 c0 test eax, eax
+ 00496 74 24 je SHORT $LN55@unz64local
+
+; 1066 : err=UNZ_ERRNO;
+
+ 00498 83 ce ff or esi, -1
+
+; 1067 : }
+; 1068 :
+; 1069 : }
+
+ 0049b eb 1f jmp SHORT $LN55@unz64local
+$LN45@unz64local:
+
+; 1070 : else
+; 1071 : {
+; 1072 : if (ZSEEK64(s->z_filefunc, s->filestream,dataSize,ZLIB_FILEFUNC_SEEK_CUR)!=0)
+
+ 0049d 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 004a0 8b cf mov ecx, edi
+ 004a2 6a 01 push 1
+ 004a4 6a 00 push 0
+ 004a6 ff 74 24 18 push DWORD PTR _dataSize$1[esp+152]
+ 004aa e8 00 00 00 00 call _call_zseek64
+ 004af 83 c4 0c add esp, 12 ; 0000000cH
+ 004b2 85 c0 test eax, eax
+ 004b4 b8 ff ff ff ff mov eax, -1
+ 004b9 0f 45 f0 cmovne esi, eax
+$LN55@unz64local:
+
+; 1073 : err=UNZ_ERRNO;
+; 1074 : }
+; 1075 :
+; 1076 : acc += 2 + 2 + dataSize;
+
+ 004bc 8b 44 24 18 mov eax, DWORD PTR _acc$1$[esp+144]
+ 004c0 83 c0 04 add eax, 4
+ 004c3 03 44 24 10 add eax, DWORD PTR _dataSize$1[esp+144]
+ 004c7 89 44 24 18 mov DWORD PTR _acc$1$[esp+144], eax
+ 004cb 3b 44 24 5c cmp eax, DWORD PTR _file_info$[esp+188]
+ 004cf 0f 82 de fe ff
+ ff jb $LL2@unz64local
+$LN3@unz64local:
+
+; 1077 : }
+; 1078 : }
+; 1079 :
+; 1080 : if ((err==UNZ_OK) && (szComment!=NULL))
+
+ 004d5 85 f6 test esi, esi
+ 004d7 0f 85 d3 00 00
+ 00 jne $LN66@unz64local
+$LN74@unz64local:
+ 004dd 8b 55 1c mov edx, DWORD PTR _szComment$[ebp]
+ 004e0 85 d2 test edx, edx
+ 004e2 74 76 je SHORT $LN75@unz64local
+
+; 1081 : {
+; 1082 : uLong uSizeRead ;
+; 1083 : if (file_info.size_file_comment<commentBufferSize)
+
+ 004e4 8b 4d 20 mov ecx, DWORD PTR _commentBufferSize$[ebp]
+ 004e7 8b 44 24 60 mov eax, DWORD PTR _file_info$[esp+192]
+ 004eb 3b c1 cmp eax, ecx
+ 004ed 73 0a jae SHORT $LN58@unz64local
+
+; 1084 : {
+; 1085 : *(szComment+file_info.size_file_comment)='\0';
+
+ 004ef c6 04 10 00 mov BYTE PTR [eax+edx], 0
+
+; 1086 : uSizeRead = file_info.size_file_comment;
+
+ 004f3 89 44 24 10 mov DWORD PTR _uSizeRead$1$[esp+144], eax
+
+; 1087 : }
+
+ 004f7 eb 04 jmp SHORT $LN59@unz64local
+$LN58@unz64local:
+
+; 1088 : else
+; 1089 : uSizeRead = commentBufferSize;
+
+ 004f9 89 4c 24 10 mov DWORD PTR _uSizeRead$1$[esp+144], ecx
+$LN59@unz64local:
+
+; 1090 :
+; 1091 : if (lSeek!=0)
+
+ 004fd 8b 44 24 0c mov eax, DWORD PTR _lSeek$1$[esp+144]
+ 00501 85 c0 test eax, eax
+ 00503 74 22 je SHORT $LN62@unz64local
+
+; 1092 : {
+; 1093 : if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
+
+ 00505 99 cdq
+ 00506 8b cf mov ecx, edi
+ 00508 6a 01 push 1
+ 0050a 52 push edx
+ 0050b 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 0050e 50 push eax
+ 0050f e8 00 00 00 00 call _call_zseek64
+ 00514 8b 4d 20 mov ecx, DWORD PTR _commentBufferSize$[ebp]
+ 00517 83 c4 0c add esp, 12 ; 0000000cH
+ 0051a 8b 55 1c mov edx, DWORD PTR _szComment$[ebp]
+ 0051d 85 c0 test eax, eax
+ 0051f b8 ff ff ff ff mov eax, -1
+ 00524 0f 45 f0 cmovne esi, eax
+$LN62@unz64local:
+
+; 1094 : lSeek=0;
+; 1095 : else
+; 1096 : err=UNZ_ERRNO;
+; 1097 : }
+; 1098 :
+; 1099 : if ((file_info.size_file_comment>0) && (commentBufferSize>0))
+
+ 00527 83 7c 24 60 00 cmp DWORD PTR _file_info$[esp+192], 0
+ 0052c 76 28 jbe SHORT $LN64@unz64local
+ 0052e 85 c9 test ecx, ecx
+ 00530 74 24 je SHORT $LN64@unz64local
+
+; 1100 : if (ZREAD64(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead)
+
+ 00532 ff 74 24 10 push DWORD PTR _uSizeRead$1$[esp+144]
+ 00536 8b 47 04 mov eax, DWORD PTR [edi+4]
+ 00539 52 push edx
+ 0053a ff 77 30 push DWORD PTR [edi+48]
+ 0053d ff 77 1c push DWORD PTR [edi+28]
+ 00540 ff d0 call eax
+ 00542 83 c4 10 add esp, 16 ; 00000010H
+ 00545 3b 44 24 10 cmp eax, DWORD PTR _uSizeRead$1$[esp+144]
+ 00549 74 0b je SHORT $LN64@unz64local
+
+; 1101 : err=UNZ_ERRNO;
+
+ 0054b 83 ce ff or esi, -1
+
+; 1113 :
+; 1114 : return err;
+
+ 0054e 8b c6 mov eax, esi
+
+; 1115 : }
+
+ 00550 5f pop edi
+ 00551 5e pop esi
+ 00552 8b e5 mov esp, ebp
+ 00554 5d pop ebp
+ 00555 c3 ret 0
+$LN64@unz64local:
+
+; 1102 : lSeek+=file_info.size_file_comment - uSizeRead;
+; 1103 : }
+; 1104 : else
+; 1105 : lSeek+=file_info.size_file_comment;
+; 1106 :
+; 1107 :
+; 1108 : if ((err==UNZ_OK) && (pfile_info!=NULL))
+
+ 00556 85 f6 test esi, esi
+ 00558 75 56 jne SHORT $LN66@unz64local
+$LN75@unz64local:
+ 0055a 8b 44 24 20 mov eax, DWORD PTR _pfile_info$1$[esp+144]
+ 0055e 85 c0 test eax, eax
+ 00560 74 3a je SHORT $LN76@unz64local
+
+; 1109 : *pfile_info=file_info;
+
+ 00562 0f 10 44 24 30 movups xmm0, XMMWORD PTR _file_info$[esp+144]
+ 00567 0f 11 00 movups XMMWORD PTR [eax], xmm0
+ 0056a 0f 10 44 24 40 movups xmm0, XMMWORD PTR _file_info$[esp+160]
+ 0056f 0f 11 40 10 movups XMMWORD PTR [eax+16], xmm0
+ 00573 0f 10 44 24 50 movups xmm0, XMMWORD PTR _file_info$[esp+176]
+ 00578 0f 11 40 20 movups XMMWORD PTR [eax+32], xmm0
+ 0057c 0f 10 44 24 60 movups xmm0, XMMWORD PTR _file_info$[esp+192]
+ 00581 0f 11 40 30 movups XMMWORD PTR [eax+48], xmm0
+ 00585 0f 10 44 24 70 movups xmm0, XMMWORD PTR _file_info$[esp+208]
+ 0058a 0f 11 40 40 movups XMMWORD PTR [eax+64], xmm0
+ 0058e f3 0f 7e 84 24
+ 80 00 00 00 movq xmm0, QWORD PTR _file_info$[esp+224]
+ 00597 66 0f d6 40 50 movq QWORD PTR [eax+80], xmm0
+$LN76@unz64local:
+
+; 1110 :
+; 1111 : if ((err==UNZ_OK) && (pfile_info_internal!=NULL))
+
+ 0059c 8b 4d 08 mov ecx, DWORD PTR _pfile_info_internal$[ebp]
+ 0059f 85 c9 test ecx, ecx
+ 005a1 74 0d je SHORT $LN66@unz64local
+
+; 1112 : *pfile_info_internal=file_info_internal;
+
+ 005a3 8b 44 24 14 mov eax, DWORD PTR _file_info_internal$2$[esp+144]
+ 005a7 89 01 mov DWORD PTR [ecx], eax
+ 005a9 8b 44 24 2c mov eax, DWORD PTR _file_info_internal$[esp+148]
+ 005ad 89 41 04 mov DWORD PTR [ecx+4], eax
+$LN66@unz64local:
+
+; 1115 : }
+
+ 005b0 5f pop edi
+ 005b1 8b c6 mov eax, esi
+ 005b3 5e pop esi
+ 005b4 8b e5 mov esp, ebp
+ 005b6 5d pop ebp
+ 005b7 c3 ret 0
+_unz64local_GetCurrentFileInfoInternal ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzGetCurrentFileInfo64@32
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_pfile_info$ = 12 ; size = 4
+_szFileName$ = 16 ; size = 4
+_fileNameBufferSize$ = 20 ; size = 4
+_extraField$ = 24 ; size = 4
+_extraFieldBufferSize$ = 28 ; size = 4
+_szComment$ = 32 ; size = 4
+_commentBufferSize$ = 36 ; size = 4
+_unzGetCurrentFileInfo64@32 PROC ; COMDAT
+
+; 1129 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1130 : return unz64local_GetCurrentFileInfoInternal(file,pfile_info,NULL,
+
+ 00003 ff 75 24 push DWORD PTR _commentBufferSize$[ebp]
+ 00006 8b 55 0c mov edx, DWORD PTR _pfile_info$[ebp]
+ 00009 ff 75 20 push DWORD PTR _szComment$[ebp]
+ 0000c 8b 4d 08 mov ecx, DWORD PTR _file$[ebp]
+ 0000f ff 75 1c push DWORD PTR _extraFieldBufferSize$[ebp]
+ 00012 ff 75 18 push DWORD PTR _extraField$[ebp]
+ 00015 ff 75 14 push DWORD PTR _fileNameBufferSize$[ebp]
+ 00018 ff 75 10 push DWORD PTR _szFileName$[ebp]
+ 0001b 6a 00 push 0
+ 0001d e8 00 00 00 00 call _unz64local_GetCurrentFileInfoInternal
+ 00022 83 c4 1c add esp, 28 ; 0000001cH
+
+; 1131 : szFileName,fileNameBufferSize,
+; 1132 : extraField,extraFieldBufferSize,
+; 1133 : szComment,commentBufferSize);
+; 1134 : }
+
+ 00025 5d pop ebp
+ 00026 c2 20 00 ret 32 ; 00000020H
+_unzGetCurrentFileInfo64@32 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzGetCurrentFileInfo@32
+_TEXT SEGMENT
+_file_info64$ = -88 ; size = 88
+_file$ = 8 ; size = 4
+_pfile_info$ = 12 ; size = 4
+_szFileName$ = 16 ; size = 4
+_fileNameBufferSize$ = 20 ; size = 4
+_extraField$ = 24 ; size = 4
+_extraFieldBufferSize$ = 28 ; size = 4
+_szComment$ = 32 ; size = 4
+_commentBufferSize$ = 36 ; size = 4
+_unzGetCurrentFileInfo@32 PROC ; COMDAT
+
+; 1141 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 83 ec 5c sub esp, 92 ; 0000005cH
+
+; 1142 : int err;
+; 1143 : unz_file_info64 file_info64;
+; 1144 : err = unz64local_GetCurrentFileInfoInternal(file,&file_info64,NULL,
+
+ 00009 8b 4d 08 mov ecx, DWORD PTR _file$[ebp]
+ 0000c 8d 54 24 04 lea edx, DWORD PTR _file_info64$[esp+92]
+ 00010 56 push esi
+ 00011 ff 75 24 push DWORD PTR _commentBufferSize$[ebp]
+ 00014 ff 75 20 push DWORD PTR _szComment$[ebp]
+ 00017 ff 75 1c push DWORD PTR _extraFieldBufferSize$[ebp]
+ 0001a ff 75 18 push DWORD PTR _extraField$[ebp]
+ 0001d ff 75 14 push DWORD PTR _fileNameBufferSize$[ebp]
+ 00020 ff 75 10 push DWORD PTR _szFileName$[ebp]
+ 00023 6a 00 push 0
+ 00025 e8 00 00 00 00 call _unz64local_GetCurrentFileInfoInternal
+ 0002a 8b f0 mov esi, eax
+ 0002c 83 c4 1c add esp, 28 ; 0000001cH
+
+; 1145 : szFileName,fileNameBufferSize,
+; 1146 : extraField,extraFieldBufferSize,
+; 1147 : szComment,commentBufferSize);
+; 1148 : if ((err==UNZ_OK) && (pfile_info != NULL))
+
+ 0002f 85 f6 test esi, esi
+ 00031 75 7e jne SHORT $LN2@unzGetCurr
+ 00033 8b 55 0c mov edx, DWORD PTR _pfile_info$[ebp]
+ 00036 85 d2 test edx, edx
+ 00038 74 77 je SHORT $LN2@unzGetCurr
+
+; 1149 : {
+; 1150 : pfile_info->version = file_info64.version;
+; 1151 : pfile_info->version_needed = file_info64.version_needed;
+
+ 0003a 8b 44 24 0c mov eax, DWORD PTR _file_info64$[esp+100]
+
+; 1152 : pfile_info->flag = file_info64.flag;
+; 1153 : pfile_info->compression_method = file_info64.compression_method;
+; 1154 : pfile_info->dosDate = file_info64.dosDate;
+; 1155 : pfile_info->crc = file_info64.crc;
+; 1156 :
+; 1157 : pfile_info->size_filename = file_info64.size_filename;
+; 1158 : pfile_info->size_file_extra = file_info64.size_file_extra;
+; 1159 : pfile_info->size_file_comment = file_info64.size_file_comment;
+; 1160 :
+; 1161 : pfile_info->disk_num_start = file_info64.disk_num_start;
+; 1162 : pfile_info->internal_fa = file_info64.internal_fa;
+; 1163 : pfile_info->external_fa = file_info64.external_fa;
+; 1164 :
+; 1165 : pfile_info->tmu_date = file_info64.tmu_date,
+
+ 0003e 0f 10 44 24 48 movups xmm0, XMMWORD PTR _file_info64$[esp+160]
+ 00043 89 42 04 mov DWORD PTR [edx+4], eax
+ 00046 8b 44 24 10 mov eax, DWORD PTR _file_info64$[esp+104]
+ 0004a 89 42 08 mov DWORD PTR [edx+8], eax
+ 0004d 8b 44 24 14 mov eax, DWORD PTR _file_info64$[esp+108]
+ 00051 8b 4c 24 08 mov ecx, DWORD PTR _file_info64$[esp+96]
+ 00055 89 42 0c mov DWORD PTR [edx+12], eax
+ 00058 8b 44 24 18 mov eax, DWORD PTR _file_info64$[esp+112]
+ 0005c 89 42 10 mov DWORD PTR [edx+16], eax
+ 0005f 8b 44 24 1c mov eax, DWORD PTR _file_info64$[esp+116]
+ 00063 89 42 14 mov DWORD PTR [edx+20], eax
+ 00066 8b 44 24 30 mov eax, DWORD PTR _file_info64$[esp+136]
+ 0006a 89 42 20 mov DWORD PTR [edx+32], eax
+ 0006d 8b 44 24 34 mov eax, DWORD PTR _file_info64$[esp+140]
+ 00071 89 42 24 mov DWORD PTR [edx+36], eax
+ 00074 8b 44 24 38 mov eax, DWORD PTR _file_info64$[esp+144]
+ 00078 89 42 28 mov DWORD PTR [edx+40], eax
+ 0007b 8b 44 24 3c mov eax, DWORD PTR _file_info64$[esp+148]
+ 0007f 89 42 2c mov DWORD PTR [edx+44], eax
+ 00082 8b 44 24 40 mov eax, DWORD PTR _file_info64$[esp+152]
+ 00086 89 42 30 mov DWORD PTR [edx+48], eax
+ 00089 8b 44 24 44 mov eax, DWORD PTR _file_info64$[esp+156]
+ 0008d 89 42 34 mov DWORD PTR [edx+52], eax
+ 00090 8b 44 24 20 mov eax, DWORD PTR _file_info64$[esp+120]
+ 00094 0f 11 42 38 movups XMMWORD PTR [edx+56], xmm0
+ 00098 89 42 18 mov DWORD PTR [edx+24], eax
+
+; 1166 :
+; 1167 :
+; 1168 : pfile_info->compressed_size = (uLong)file_info64.compressed_size;
+; 1169 : pfile_info->uncompressed_size = (uLong)file_info64.uncompressed_size;
+
+ 0009b 8b 44 24 28 mov eax, DWORD PTR _file_info64$[esp+128]
+ 0009f f3 0f 7e 44 24
+ 58 movq xmm0, QWORD PTR _file_info64$[esp+176]
+ 000a5 89 42 1c mov DWORD PTR [edx+28], eax
+
+; 1170 :
+; 1171 : }
+; 1172 : return err;
+
+ 000a8 8b c6 mov eax, esi
+ 000aa 89 0a mov DWORD PTR [edx], ecx
+ 000ac 66 0f d6 42 48 movq QWORD PTR [edx+72], xmm0
+$LN2@unzGetCurr:
+
+; 1173 : }
+
+ 000b1 5e pop esi
+ 000b2 8b e5 mov esp, ebp
+ 000b4 5d pop ebp
+ 000b5 c2 20 00 ret 32 ; 00000020H
+_unzGetCurrentFileInfo@32 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzGoToFirstFile@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_unzGoToFirstFile@4 PROC ; COMDAT
+
+; 1179 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 1180 : int err=UNZ_OK;
+; 1181 : unz64_s* s;
+; 1182 : if (file==NULL)
+
+ 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 00007 85 f6 test esi, esi
+ 00009 75 08 jne SHORT $LN2@unzGoToFir
+
+; 1183 : return UNZ_PARAMERROR;
+
+ 0000b 8d 46 9a lea eax, DWORD PTR [esi-102]
+
+; 1192 : }
+
+ 0000e 5e pop esi
+ 0000f 5d pop ebp
+ 00010 c2 04 00 ret 4
+$LN2@unzGoToFir:
+
+; 1184 : s=(unz64_s*)file;
+; 1185 : s->pos_in_central_dir=s->offset_central_dir;
+
+ 00013 8b 46 78 mov eax, DWORD PTR [esi+120]
+
+; 1186 : s->num_file=0;
+; 1187 : err=unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+
+ 00016 8d 96 80 00 00
+ 00 lea edx, DWORD PTR [esi+128]
+ 0001c 6a 00 push 0
+ 0001e 6a 00 push 0
+ 00020 6a 00 push 0
+ 00022 6a 00 push 0
+ 00024 89 46 58 mov DWORD PTR [esi+88], eax
+ 00027 8b ce mov ecx, esi
+ 00029 8b 46 7c mov eax, DWORD PTR [esi+124]
+ 0002c 6a 00 push 0
+ 0002e 89 46 5c mov DWORD PTR [esi+92], eax
+ 00031 8d 86 d8 00 00
+ 00 lea eax, DWORD PTR [esi+216]
+ 00037 6a 00 push 0
+ 00039 50 push eax
+ 0003a c7 46 50 00 00
+ 00 00 mov DWORD PTR [esi+80], 0
+ 00041 c7 46 54 00 00
+ 00 00 mov DWORD PTR [esi+84], 0
+ 00048 e8 00 00 00 00 call _unz64local_GetCurrentFileInfoInternal
+ 0004d 8b c8 mov ecx, eax
+ 0004f 83 c4 1c add esp, 28 ; 0000001cH
+
+; 1188 : &s->cur_file_info_internal,
+; 1189 : NULL,0,NULL,0,NULL,0);
+; 1190 : s->current_file_ok = (err == UNZ_OK);
+
+ 00052 33 c0 xor eax, eax
+ 00054 85 c9 test ecx, ecx
+ 00056 0f 94 c0 sete al
+ 00059 99 cdq
+ 0005a 89 46 60 mov DWORD PTR [esi+96], eax
+
+; 1191 : return err;
+
+ 0005d 8b c1 mov eax, ecx
+ 0005f 89 56 64 mov DWORD PTR [esi+100], edx
+
+; 1192 : }
+
+ 00062 5e pop esi
+ 00063 5d pop ebp
+ 00064 c2 04 00 ret 4
+_unzGoToFirstFile@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzGoToNextFile@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_unzGoToNextFile@4 PROC ; COMDAT
+
+; 1200 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 1201 : unz64_s* s;
+; 1202 : int err;
+; 1203 :
+; 1204 : if (file==NULL)
+
+ 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 00007 85 f6 test esi, esi
+ 00009 75 08 jne SHORT $LN2@unzGoToNex
+
+; 1205 : return UNZ_PARAMERROR;
+
+ 0000b 8d 46 9a lea eax, DWORD PTR [esi-102]
+
+; 1221 : }
+
+ 0000e 5e pop esi
+ 0000f 5d pop ebp
+ 00010 c2 04 00 ret 4
+$LN2@unzGoToNex:
+
+; 1206 : s=(unz64_s*)file;
+; 1207 : if (!s->current_file_ok)
+
+ 00013 8b 46 60 mov eax, DWORD PTR [esi+96]
+ 00016 0b 46 64 or eax, DWORD PTR [esi+100]
+ 00019 75 0a jne SHORT $LN3@unzGoToNex
+$LN8@unzGoToNex:
+
+; 1208 : return UNZ_END_OF_LIST_OF_FILE;
+
+ 0001b b8 9c ff ff ff mov eax, -100 ; ffffff9cH
+
+; 1221 : }
+
+ 00020 5e pop esi
+ 00021 5d pop ebp
+ 00022 c2 04 00 ret 4
+$LN3@unzGoToNex:
+
+; 1209 : if (s->gi.number_entry != 0xffff) /* 2^16 files overflow hack */
+
+ 00025 81 7e 38 ff ff
+ 00 00 cmp DWORD PTR [esi+56], 65535 ; 0000ffffH
+ 0002c 8b 56 3c mov edx, DWORD PTR [esi+60]
+ 0002f 75 04 jne SHORT $LN7@unzGoToNex
+ 00031 85 d2 test edx, edx
+ 00033 74 15 je SHORT $LN5@unzGoToNex
+$LN7@unzGoToNex:
+
+; 1210 : if (s->num_file+1==s->gi.number_entry)
+
+ 00035 8b 46 50 mov eax, DWORD PTR [esi+80]
+ 00038 8b 4e 54 mov ecx, DWORD PTR [esi+84]
+ 0003b 83 c0 01 add eax, 1
+ 0003e 83 d1 00 adc ecx, 0
+ 00041 3b 46 38 cmp eax, DWORD PTR [esi+56]
+ 00044 75 04 jne SHORT $LN5@unzGoToNex
+ 00046 3b ca cmp ecx, edx
+ 00048 74 d1 je SHORT $LN8@unzGoToNex
+$LN5@unzGoToNex:
+
+; 1211 : return UNZ_END_OF_LIST_OF_FILE;
+; 1212 :
+; 1213 : s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename +
+
+ 0004a 8b 8e b0 00 00
+ 00 mov ecx, DWORD PTR [esi+176]
+
+; 1214 : s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ;
+; 1215 : s->num_file++;
+; 1216 : err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+
+ 00050 8d 96 80 00 00
+ 00 lea edx, DWORD PTR [esi+128]
+ 00056 03 8e ac 00 00
+ 00 add ecx, DWORD PTR [esi+172]
+ 0005c 8b 86 a8 00 00
+ 00 mov eax, DWORD PTR [esi+168]
+ 00062 6a 00 push 0
+ 00064 83 c0 2e add eax, 46 ; 0000002eH
+ 00067 6a 00 push 0
+ 00069 03 c1 add eax, ecx
+ 0006b 8b ce mov ecx, esi
+ 0006d 01 46 58 add DWORD PTR [esi+88], eax
+ 00070 8d 86 d8 00 00
+ 00 lea eax, DWORD PTR [esi+216]
+ 00076 6a 00 push 0
+ 00078 83 56 5c 00 adc DWORD PTR [esi+92], 0
+ 0007c 83 46 50 01 add DWORD PTR [esi+80], 1
+ 00080 6a 00 push 0
+ 00082 83 56 54 00 adc DWORD PTR [esi+84], 0
+ 00086 6a 00 push 0
+ 00088 6a 00 push 0
+ 0008a 50 push eax
+ 0008b e8 00 00 00 00 call _unz64local_GetCurrentFileInfoInternal
+ 00090 8b c8 mov ecx, eax
+ 00092 83 c4 1c add esp, 28 ; 0000001cH
+
+; 1217 : &s->cur_file_info_internal,
+; 1218 : NULL,0,NULL,0,NULL,0);
+; 1219 : s->current_file_ok = (err == UNZ_OK);
+
+ 00095 33 c0 xor eax, eax
+ 00097 85 c9 test ecx, ecx
+ 00099 0f 94 c0 sete al
+ 0009c 99 cdq
+ 0009d 89 46 60 mov DWORD PTR [esi+96], eax
+
+; 1220 : return err;
+
+ 000a0 8b c1 mov eax, ecx
+ 000a2 89 56 64 mov DWORD PTR [esi+100], edx
+
+; 1221 : }
+
+ 000a5 5e pop esi
+ 000a6 5d pop ebp
+ 000a7 c2 04 00 ret 4
+_unzGoToNextFile@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzLocateFile@12
+_TEXT SEGMENT
+_num_fileSaved$1$ = -392 ; size = 4
+_num_fileSaved$2$ = -388 ; size = 4
+_pos_in_central_dirSaved$1$ = -384 ; size = 4
+_pos_in_central_dirSaved$2$ = -380 ; size = 4
+_cur_file_info_internalSaved$1$ = -376 ; size = 4
+_cur_file_info_internalSaved$2$ = -372 ; size = 4
+_cur_file_infoSaved$6$ = -368 ; size = 8
+_cur_file_infoSaved$1$ = -352 ; size = 16
+_cur_file_infoSaved$2$ = -336 ; size = 16
+_cur_file_infoSaved$3$ = -320 ; size = 16
+_cur_file_infoSaved$4$ = -304 ; size = 16
+_cur_file_infoSaved$5$ = -288 ; size = 16
+_szCurrentFileName$1 = -264 ; size = 257
+_file$ = 8 ; size = 4
+_szFileName$ = 12 ; size = 4
+_iCaseSensitivity$ = 16 ; size = 4
+_unzLocateFile@12 PROC ; COMDAT
+
+; 1233 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f0 and esp, -16 ; fffffff0H
+ 00006 81 ec 88 01 00
+ 00 sub esp, 392 ; 00000188H
+ 0000c 56 push esi
+
+; 1234 : unz64_s* s;
+; 1235 : int err;
+; 1236 :
+; 1237 : /* We remember the 'current' position in the file so that we can jump
+; 1238 : * back there if we fail.
+; 1239 : */
+; 1240 : unz_file_info64 cur_file_infoSaved;
+; 1241 : unz_file_info64_internal cur_file_info_internalSaved;
+; 1242 : ZPOS64_T num_fileSaved;
+; 1243 : ZPOS64_T pos_in_central_dirSaved;
+; 1244 :
+; 1245 :
+; 1246 : if (file==NULL)
+
+ 0000d 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 00010 57 push edi
+ 00011 85 f6 test esi, esi
+ 00013 75 0d jne SHORT $LN4@unzLocateF
+$LN18@unzLocateF:
+
+; 1247 : return UNZ_PARAMERROR;
+
+ 00015 b8 9a ff ff ff mov eax, -102 ; ffffff9aH
+
+; 1286 : return err;
+; 1287 : }
+
+ 0001a 5f pop edi
+ 0001b 5e pop esi
+ 0001c 8b e5 mov esp, ebp
+ 0001e 5d pop ebp
+ 0001f c2 0c 00 ret 12 ; 0000000cH
+$LN4@unzLocateF:
+
+; 1248 :
+; 1249 : if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP)
+
+ 00022 8b 7d 0c mov edi, DWORD PTR _szFileName$[ebp]
+ 00025 8b c7 mov eax, edi
+ 00027 8d 50 01 lea edx, DWORD PTR [eax+1]
+ 0002a 66 0f 1f 44 00
+ 00 npad 6
+$LL15@unzLocateF:
+ 00030 8a 08 mov cl, BYTE PTR [eax]
+ 00032 40 inc eax
+ 00033 84 c9 test cl, cl
+ 00035 75 f9 jne SHORT $LL15@unzLocateF
+ 00037 2b c2 sub eax, edx
+ 00039 3d 00 01 00 00 cmp eax, 256 ; 00000100H
+ 0003e 73 d5 jae SHORT $LN18@unzLocateF
+
+; 1250 : return UNZ_PARAMERROR;
+; 1251 :
+; 1252 : s=(unz64_s*)file;
+; 1253 : if (!s->current_file_ok)
+
+ 00040 8b 46 60 mov eax, DWORD PTR [esi+96]
+ 00043 0b 46 64 or eax, DWORD PTR [esi+100]
+ 00046 75 0d jne SHORT $LN6@unzLocateF
+
+; 1254 : return UNZ_END_OF_LIST_OF_FILE;
+
+ 00048 b8 9c ff ff ff mov eax, -100 ; ffffff9cH
+
+; 1286 : return err;
+; 1287 : }
+
+ 0004d 5f pop edi
+ 0004e 5e pop esi
+ 0004f 8b e5 mov esp, ebp
+ 00051 5d pop ebp
+ 00052 c2 0c 00 ret 12 ; 0000000cH
+$LN6@unzLocateF:
+
+; 1255 :
+; 1256 : /* Save the current state */
+; 1257 : num_fileSaved = s->num_file;
+; 1258 : pos_in_central_dirSaved = s->pos_in_central_dir;
+; 1259 : cur_file_infoSaved = s->cur_file_info;
+
+ 00055 0f 10 86 80 00
+ 00 00 movups xmm0, XMMWORD PTR [esi+128]
+ 0005c 8b 46 50 mov eax, DWORD PTR [esi+80]
+ 0005f 89 44 24 08 mov DWORD PTR _num_fileSaved$1$[esp+400], eax
+ 00063 8b 46 54 mov eax, DWORD PTR [esi+84]
+ 00066 0f 29 44 24 30 movaps XMMWORD PTR _cur_file_infoSaved$1$[esp+400], xmm0
+ 0006b 0f 10 86 90 00
+ 00 00 movups xmm0, XMMWORD PTR [esi+144]
+ 00072 89 44 24 0c mov DWORD PTR _num_fileSaved$2$[esp+400], eax
+ 00076 8b 46 58 mov eax, DWORD PTR [esi+88]
+ 00079 0f 29 44 24 40 movaps XMMWORD PTR _cur_file_infoSaved$2$[esp+400], xmm0
+ 0007e 0f 10 86 a0 00
+ 00 00 movups xmm0, XMMWORD PTR [esi+160]
+ 00085 89 44 24 10 mov DWORD PTR _pos_in_central_dirSaved$1$[esp+400], eax
+ 00089 8b 46 5c mov eax, DWORD PTR [esi+92]
+ 0008c 0f 29 44 24 50 movaps XMMWORD PTR _cur_file_infoSaved$3$[esp+400], xmm0
+ 00091 0f 10 86 b0 00
+ 00 00 movups xmm0, XMMWORD PTR [esi+176]
+ 00098 89 44 24 14 mov DWORD PTR _pos_in_central_dirSaved$2$[esp+400], eax
+
+; 1260 : cur_file_info_internalSaved = s->cur_file_info_internal;
+
+ 0009c 8b 86 d8 00 00
+ 00 mov eax, DWORD PTR [esi+216]
+ 000a2 0f 29 44 24 60 movaps XMMWORD PTR _cur_file_infoSaved$4$[esp+400], xmm0
+ 000a7 0f 10 86 c0 00
+ 00 00 movups xmm0, XMMWORD PTR [esi+192]
+ 000ae 89 44 24 18 mov DWORD PTR _cur_file_info_internalSaved$1$[esp+400], eax
+ 000b2 8b 86 dc 00 00
+ 00 mov eax, DWORD PTR [esi+220]
+ 000b8 0f 29 44 24 70 movaps XMMWORD PTR _cur_file_infoSaved$5$[esp+400], xmm0
+ 000bd f3 0f 7e 86 d0
+ 00 00 00 movq xmm0, QWORD PTR [esi+208]
+
+; 1261 :
+; 1262 : err = unzGoToFirstFile(file);
+
+ 000c5 56 push esi
+ 000c6 66 0f d6 44 24
+ 24 movq QWORD PTR _cur_file_infoSaved$6$[esp+404], xmm0
+ 000cc 89 44 24 20 mov DWORD PTR _cur_file_info_internalSaved$2$[esp+404], eax
+ 000d0 e8 00 00 00 00 call _unzGoToFirstFile@4
+
+; 1263 :
+; 1264 : while (err == UNZ_OK)
+
+ 000d5 85 c0 test eax, eax
+ 000d7 75 4b jne SHORT $LN14@unzLocateF
+ 000d9 0f 1f 80 00 00
+ 00 00 npad 7
+$LL2@unzLocateF:
+
+; 1265 : {
+; 1266 : char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1];
+; 1267 : err = unzGetCurrentFileInfo64(file,NULL,
+
+ 000e0 6a 00 push 0
+ 000e2 6a 00 push 0
+ 000e4 6a 00 push 0
+ 000e6 6a 00 push 0
+ 000e8 68 00 01 00 00 push 256 ; 00000100H
+ 000ed 8d 84 24 9c 00
+ 00 00 lea eax, DWORD PTR _szCurrentFileName$1[esp+420]
+ 000f4 50 push eax
+ 000f5 6a 00 push 0
+ 000f7 56 push esi
+ 000f8 e8 00 00 00 00 call _unzGetCurrentFileInfo64@32
+
+; 1268 : szCurrentFileName,sizeof(szCurrentFileName)-1,
+; 1269 : NULL,0,NULL,0);
+; 1270 : if (err == UNZ_OK)
+
+ 000fd 85 c0 test eax, eax
+ 000ff 75 23 jne SHORT $LN14@unzLocateF
+
+; 1271 : {
+; 1272 : if (unzStringFileNameCompare(szCurrentFileName,
+; 1273 : szFileName,iCaseSensitivity)==0)
+
+ 00101 ff 75 10 push DWORD PTR _iCaseSensitivity$[ebp]
+ 00104 8d 84 24 8c 00
+ 00 00 lea eax, DWORD PTR _szCurrentFileName$1[esp+404]
+ 0010b 57 push edi
+ 0010c 50 push eax
+ 0010d e8 00 00 00 00 call _unzStringFileNameCompare@12
+ 00112 85 c0 test eax, eax
+ 00114 0f 84 8c 00 00
+ 00 je $LN11@unzLocateF
+
+; 1274 : return UNZ_OK;
+; 1275 : err = unzGoToNextFile(file);
+
+ 0011a 56 push esi
+ 0011b e8 00 00 00 00 call _unzGoToNextFile@4
+ 00120 85 c0 test eax, eax
+ 00122 74 bc je SHORT $LL2@unzLocateF
+$LN14@unzLocateF:
+
+; 1276 : }
+; 1277 : }
+; 1278 :
+; 1279 : /* We failed, so restore the state of the 'current file' to where we
+; 1280 : * were.
+; 1281 : */
+; 1282 : s->num_file = num_fileSaved ;
+; 1283 : s->pos_in_central_dir = pos_in_central_dirSaved ;
+; 1284 : s->cur_file_info = cur_file_infoSaved;
+
+ 00124 0f 28 44 24 30 movaps xmm0, XMMWORD PTR _cur_file_infoSaved$1$[esp+400]
+ 00129 8b 4c 24 08 mov ecx, DWORD PTR _num_fileSaved$1$[esp+400]
+ 0012d 0f 11 86 80 00
+ 00 00 movups XMMWORD PTR [esi+128], xmm0
+ 00134 89 4e 50 mov DWORD PTR [esi+80], ecx
+ 00137 0f 28 44 24 40 movaps xmm0, XMMWORD PTR _cur_file_infoSaved$2$[esp+400]
+ 0013c 8b 4c 24 0c mov ecx, DWORD PTR _num_fileSaved$2$[esp+400]
+ 00140 0f 11 86 90 00
+ 00 00 movups XMMWORD PTR [esi+144], xmm0
+ 00147 89 4e 54 mov DWORD PTR [esi+84], ecx
+ 0014a 0f 28 44 24 50 movaps xmm0, XMMWORD PTR _cur_file_infoSaved$3$[esp+400]
+ 0014f 8b 4c 24 10 mov ecx, DWORD PTR _pos_in_central_dirSaved$1$[esp+400]
+ 00153 0f 11 86 a0 00
+ 00 00 movups XMMWORD PTR [esi+160], xmm0
+ 0015a 89 4e 58 mov DWORD PTR [esi+88], ecx
+ 0015d 0f 28 44 24 60 movaps xmm0, XMMWORD PTR _cur_file_infoSaved$4$[esp+400]
+ 00162 8b 4c 24 14 mov ecx, DWORD PTR _pos_in_central_dirSaved$2$[esp+400]
+ 00166 0f 11 86 b0 00
+ 00 00 movups XMMWORD PTR [esi+176], xmm0
+ 0016d 89 4e 5c mov DWORD PTR [esi+92], ecx
+ 00170 0f 28 44 24 70 movaps xmm0, XMMWORD PTR _cur_file_infoSaved$5$[esp+400]
+
+; 1285 : s->cur_file_info_internal = cur_file_info_internalSaved;
+
+ 00175 8b 4c 24 18 mov ecx, DWORD PTR _cur_file_info_internalSaved$1$[esp+400]
+ 00179 0f 11 86 c0 00
+ 00 00 movups XMMWORD PTR [esi+192], xmm0
+ 00180 89 8e d8 00 00
+ 00 mov DWORD PTR [esi+216], ecx
+ 00186 f3 0f 7e 44 24
+ 20 movq xmm0, QWORD PTR _cur_file_infoSaved$6$[esp+400]
+ 0018c 8b 4c 24 1c mov ecx, DWORD PTR _cur_file_info_internalSaved$2$[esp+400]
+ 00190 66 0f d6 86 d0
+ 00 00 00 movq QWORD PTR [esi+208], xmm0
+ 00198 89 8e dc 00 00
+ 00 mov DWORD PTR [esi+220], ecx
+
+; 1286 : return err;
+; 1287 : }
+
+ 0019e 5f pop edi
+ 0019f 5e pop esi
+ 001a0 8b e5 mov esp, ebp
+ 001a2 5d pop ebp
+ 001a3 c2 0c 00 ret 12 ; 0000000cH
+$LN11@unzLocateF:
+ 001a6 5f pop edi
+ 001a7 33 c0 xor eax, eax
+ 001a9 5e pop esi
+ 001aa 8b e5 mov esp, ebp
+ 001ac 5d pop ebp
+ 001ad c2 0c 00 ret 12 ; 0000000cH
+_unzLocateFile@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzGetFilePos64@8
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_file_pos$ = 12 ; size = 4
+_unzGetFilePos64@8 PROC ; COMDAT
+
+; 1309 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1310 : unz64_s* s;
+; 1311 :
+; 1312 : if (file==NULL || file_pos==NULL)
+
+ 00003 8b 4d 08 mov ecx, DWORD PTR _file$[ebp]
+ 00006 85 c9 test ecx, ecx
+ 00008 74 35 je SHORT $LN3@unzGetFile
+ 0000a 8b 55 0c mov edx, DWORD PTR _file_pos$[ebp]
+ 0000d 85 d2 test edx, edx
+ 0000f 74 2e je SHORT $LN3@unzGetFile
+
+; 1314 : s=(unz64_s*)file;
+; 1315 : if (!s->current_file_ok)
+
+ 00011 8b 41 60 mov eax, DWORD PTR [ecx+96]
+ 00014 0b 41 64 or eax, DWORD PTR [ecx+100]
+ 00017 75 09 jne SHORT $LN4@unzGetFile
+
+; 1316 : return UNZ_END_OF_LIST_OF_FILE;
+
+ 00019 b8 9c ff ff ff mov eax, -100 ; ffffff9cH
+
+; 1322 : }
+
+ 0001e 5d pop ebp
+ 0001f c2 08 00 ret 8
+$LN4@unzGetFile:
+
+; 1317 :
+; 1318 : file_pos->pos_in_zip_directory = s->pos_in_central_dir;
+
+ 00022 8b 41 58 mov eax, DWORD PTR [ecx+88]
+ 00025 89 02 mov DWORD PTR [edx], eax
+ 00027 8b 41 5c mov eax, DWORD PTR [ecx+92]
+ 0002a 89 42 04 mov DWORD PTR [edx+4], eax
+
+; 1319 : file_pos->num_of_file = s->num_file;
+
+ 0002d 8b 41 50 mov eax, DWORD PTR [ecx+80]
+ 00030 89 42 08 mov DWORD PTR [edx+8], eax
+ 00033 8b 41 54 mov eax, DWORD PTR [ecx+84]
+ 00036 89 42 0c mov DWORD PTR [edx+12], eax
+
+; 1320 :
+; 1321 : return UNZ_OK;
+
+ 00039 33 c0 xor eax, eax
+
+; 1322 : }
+
+ 0003b 5d pop ebp
+ 0003c c2 08 00 ret 8
+$LN3@unzGetFile:
+
+; 1313 : return UNZ_PARAMERROR;
+
+ 0003f b8 9a ff ff ff mov eax, -102 ; ffffff9aH
+
+; 1322 : }
+
+ 00044 5d pop ebp
+ 00045 c2 08 00 ret 8
+_unzGetFilePos64@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzGetFilePos@8
+_TEXT SEGMENT
+_file_pos64$ = -16 ; size = 16
+_file$ = 8 ; size = 4
+_file_pos$ = 12 ; size = 4
+_unzGetFilePos@8 PROC ; COMDAT
+
+; 1327 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 10 sub esp, 16 ; 00000010H
+
+; 1328 : unz64_file_pos file_pos64;
+; 1329 : int err = unzGetFilePos64(file,&file_pos64);
+
+ 00006 8d 45 f0 lea eax, DWORD PTR _file_pos64$[ebp]
+ 00009 50 push eax
+ 0000a ff 75 08 push DWORD PTR _file$[ebp]
+ 0000d e8 00 00 00 00 call _unzGetFilePos64@8
+
+; 1330 : if (err==UNZ_OK)
+
+ 00012 85 c0 test eax, eax
+ 00014 75 0e jne SHORT $LN2@unzGetFile
+
+; 1331 : {
+; 1332 : file_pos->pos_in_zip_directory = (uLong)file_pos64.pos_in_zip_directory;
+
+ 00016 8b 55 0c mov edx, DWORD PTR _file_pos$[ebp]
+ 00019 8b 4d f0 mov ecx, DWORD PTR _file_pos64$[ebp]
+ 0001c 89 0a mov DWORD PTR [edx], ecx
+
+; 1333 : file_pos->num_of_file = (uLong)file_pos64.num_of_file;
+
+ 0001e 8b 4d f8 mov ecx, DWORD PTR _file_pos64$[ebp+8]
+ 00021 89 4a 04 mov DWORD PTR [edx+4], ecx
+$LN2@unzGetFile:
+
+; 1334 : }
+; 1335 : return err;
+; 1336 : }
+
+ 00024 8b e5 mov esp, ebp
+ 00026 5d pop ebp
+ 00027 c2 08 00 ret 8
+_unzGetFilePos@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzGoToFilePos64@8
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_file_pos$ = 12 ; size = 4
+_unzGoToFilePos64@8 PROC ; COMDAT
+
+; 1339 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 1340 : unz64_s* s;
+; 1341 : int err;
+; 1342 :
+; 1343 : if (file==NULL || file_pos==NULL)
+
+ 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 00007 85 f6 test esi, esi
+ 00009 74 58 je SHORT $LN3@unzGoToFil
+ 0000b 8b 4d 0c mov ecx, DWORD PTR _file_pos$[ebp]
+ 0000e 85 c9 test ecx, ecx
+ 00010 74 51 je SHORT $LN3@unzGoToFil
+
+; 1345 : s=(unz64_s*)file;
+; 1346 :
+; 1347 : /* jump to the right spot */
+; 1348 : s->pos_in_central_dir = file_pos->pos_in_zip_directory;
+
+ 00012 8b 01 mov eax, DWORD PTR [ecx]
+
+; 1349 : s->num_file = file_pos->num_of_file;
+; 1350 :
+; 1351 : /* set the current file */
+; 1352 : err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+
+ 00014 8d 96 80 00 00
+ 00 lea edx, DWORD PTR [esi+128]
+ 0001a 6a 00 push 0
+ 0001c 6a 00 push 0
+ 0001e 89 46 58 mov DWORD PTR [esi+88], eax
+ 00021 8b 41 04 mov eax, DWORD PTR [ecx+4]
+ 00024 6a 00 push 0
+ 00026 89 46 5c mov DWORD PTR [esi+92], eax
+ 00029 8b 41 08 mov eax, DWORD PTR [ecx+8]
+ 0002c 6a 00 push 0
+ 0002e 89 46 50 mov DWORD PTR [esi+80], eax
+ 00031 8b 41 0c mov eax, DWORD PTR [ecx+12]
+ 00034 8b ce mov ecx, esi
+ 00036 6a 00 push 0
+ 00038 89 46 54 mov DWORD PTR [esi+84], eax
+ 0003b 8d 86 d8 00 00
+ 00 lea eax, DWORD PTR [esi+216]
+ 00041 6a 00 push 0
+ 00043 50 push eax
+ 00044 e8 00 00 00 00 call _unz64local_GetCurrentFileInfoInternal
+ 00049 8b c8 mov ecx, eax
+ 0004b 83 c4 1c add esp, 28 ; 0000001cH
+
+; 1353 : &s->cur_file_info_internal,
+; 1354 : NULL,0,NULL,0,NULL,0);
+; 1355 : /* return results */
+; 1356 : s->current_file_ok = (err == UNZ_OK);
+
+ 0004e 33 c0 xor eax, eax
+ 00050 85 c9 test ecx, ecx
+ 00052 0f 94 c0 sete al
+ 00055 99 cdq
+ 00056 89 46 60 mov DWORD PTR [esi+96], eax
+
+; 1357 : return err;
+
+ 00059 8b c1 mov eax, ecx
+ 0005b 89 56 64 mov DWORD PTR [esi+100], edx
+
+; 1358 : }
+
+ 0005e 5e pop esi
+ 0005f 5d pop ebp
+ 00060 c2 08 00 ret 8
+$LN3@unzGoToFil:
+
+; 1344 : return UNZ_PARAMERROR;
+
+ 00063 b8 9a ff ff ff mov eax, -102 ; ffffff9aH
+
+; 1358 : }
+
+ 00068 5e pop esi
+ 00069 5d pop ebp
+ 0006a c2 08 00 ret 8
+_unzGoToFilePos64@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzGoToFilePos@8
+_TEXT SEGMENT
+_file_pos64$ = -16 ; size = 16
+_file$ = 8 ; size = 4
+_file_pos$ = 12 ; size = 4
+_unzGoToFilePos@8 PROC ; COMDAT
+
+; 1363 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+
+; 1364 : unz64_file_pos file_pos64;
+; 1365 : if (file_pos == NULL)
+
+ 00006 8b 4d 0c mov ecx, DWORD PTR _file_pos$[ebp]
+ 00009 83 ec 10 sub esp, 16 ; 00000010H
+ 0000c 85 c9 test ecx, ecx
+ 0000e 75 09 jne SHORT $LN2@unzGoToFil
+
+; 1366 : return UNZ_PARAMERROR;
+
+ 00010 8d 41 9a lea eax, DWORD PTR [ecx-102]
+
+; 1371 : }
+
+ 00013 8b e5 mov esp, ebp
+ 00015 5d pop ebp
+ 00016 c2 08 00 ret 8
+$LN2@unzGoToFil:
+
+; 1367 :
+; 1368 : file_pos64.pos_in_zip_directory = file_pos->pos_in_zip_directory;
+
+ 00019 8b 01 mov eax, DWORD PTR [ecx]
+ 0001b 89 04 24 mov DWORD PTR _file_pos64$[esp+16], eax
+
+; 1369 : file_pos64.num_of_file = file_pos->num_of_file;
+
+ 0001e 8b 41 04 mov eax, DWORD PTR [ecx+4]
+ 00021 89 44 24 08 mov DWORD PTR _file_pos64$[esp+24], eax
+
+; 1370 : return unzGoToFilePos64(file,&file_pos64);
+
+ 00025 8d 04 24 lea eax, DWORD PTR _file_pos64$[esp+16]
+ 00028 50 push eax
+ 00029 ff 75 08 push DWORD PTR _file$[ebp]
+ 0002c c7 44 24 0c 00
+ 00 00 00 mov DWORD PTR _file_pos64$[esp+28], 0
+ 00034 c7 44 24 14 00
+ 00 00 00 mov DWORD PTR _file_pos64$[esp+36], 0
+ 0003c e8 00 00 00 00 call _unzGoToFilePos64@8
+
+; 1371 : }
+
+ 00041 8b e5 mov esp, ebp
+ 00043 5d pop ebp
+ 00044 c2 08 00 ret 8
+_unzGoToFilePos@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unz64local_CheckCurrentFileCoherencyHeader
+_TEXT SEGMENT
+_size_extra_field$ = -12 ; size = 4
+_size_filename$ = -12 ; size = 4
+_uFlags$ = -12 ; size = 4
+_piSizeVar$1$ = -8 ; size = 4
+_uData$ = -4 ; size = 4
+_uMagic$ = -4 ; size = 4
+_poffset_local_extrafield$ = 8 ; size = 4
+_psize_local_extrafield$ = 12 ; size = 4
+_unz64local_CheckCurrentFileCoherencyHeader PROC ; COMDAT
+; _s$ = ecx
+; _piSizeVar$ = edx
+
+; 1388 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 0c sub esp, 12 ; 0000000cH
+ 00006 53 push ebx
+ 00007 8b c2 mov eax, edx
+ 00009 56 push esi
+
+; 1389 : uLong uMagic,uData,uFlags;
+; 1390 : uLong size_filename;
+; 1391 : uLong size_extra_field;
+; 1392 : int err=UNZ_OK;
+
+ 0000a 33 f6 xor esi, esi
+ 0000c 89 45 f8 mov DWORD PTR _piSizeVar$1$[ebp], eax
+ 0000f 57 push edi
+
+; 1393 :
+; 1394 : *piSizeVar = 0;
+
+ 00010 89 30 mov DWORD PTR [eax], esi
+ 00012 8b f9 mov edi, ecx
+
+; 1395 : *poffset_local_extrafield = 0;
+
+ 00014 8b 45 08 mov eax, DWORD PTR _poffset_local_extrafield$[ebp]
+
+; 1396 : *psize_local_extrafield = 0;
+; 1397 :
+; 1398 : if (ZSEEK64(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile +
+; 1399 : s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 00017 56 push esi
+ 00018 8b 4f 48 mov ecx, DWORD PTR [edi+72]
+ 0001b 03 8f d8 00 00
+ 00 add ecx, DWORD PTR [edi+216]
+ 00021 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 00024 89 30 mov DWORD PTR [eax], esi
+ 00026 89 70 04 mov DWORD PTR [eax+4], esi
+ 00029 8b 45 0c mov eax, DWORD PTR _psize_local_extrafield$[ebp]
+ 0002c 89 30 mov DWORD PTR [eax], esi
+ 0002e 8b 47 4c mov eax, DWORD PTR [edi+76]
+ 00031 13 87 dc 00 00
+ 00 adc eax, DWORD PTR [edi+220]
+ 00037 50 push eax
+ 00038 51 push ecx
+ 00039 8b cf mov ecx, edi
+ 0003b e8 00 00 00 00 call _call_zseek64
+ 00040 83 c4 0c add esp, 12 ; 0000000cH
+ 00043 85 c0 test eax, eax
+ 00045 74 0a je SHORT $LN28@unz64local
+
+; 1400 : return UNZ_ERRNO;
+
+ 00047 83 c8 ff or eax, -1
+
+; 1462 :
+; 1463 : *piSizeVar += (uInt)size_extra_field;
+; 1464 :
+; 1465 : return err;
+; 1466 : }
+
+ 0004a 5f pop edi
+ 0004b 5e pop esi
+ 0004c 5b pop ebx
+ 0004d 8b e5 mov esp, ebp
+ 0004f 5d pop ebp
+ 00050 c3 ret 0
+$LN28@unz64local:
+
+; 1401 :
+; 1402 :
+; 1403 : if (err==UNZ_OK)
+; 1404 : {
+; 1405 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
+
+ 00051 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 00054 8d 45 fc lea eax, DWORD PTR _uMagic$[ebp]
+ 00057 50 push eax
+ 00058 8b cf mov ecx, edi
+ 0005a e8 00 00 00 00 call _unz64local_getLong
+ 0005f 83 c4 04 add esp, 4
+ 00062 bb 99 ff ff ff mov ebx, -103 ; ffffff99H
+ 00067 85 c0 test eax, eax
+ 00069 74 05 je SHORT $LN4@unz64local
+
+; 1406 : err=UNZ_ERRNO;
+
+ 0006b 83 ce ff or esi, -1
+ 0006e eb 0a jmp SHORT $LN6@unz64local
+$LN4@unz64local:
+
+; 1407 : else if (uMagic!=0x04034b50)
+
+ 00070 81 7d fc 50 4b
+ 03 04 cmp DWORD PTR _uMagic$[ebp], 67324752 ; 04034b50H
+ 00077 0f 45 f3 cmovne esi, ebx
+$LN6@unz64local:
+
+; 1408 : err=UNZ_BADZIPFILE;
+; 1409 : }
+; 1410 :
+; 1411 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
+
+ 0007a 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 0007d 8d 45 fc lea eax, DWORD PTR _uData$[ebp]
+ 00080 50 push eax
+ 00081 8b cf mov ecx, edi
+ 00083 e8 00 00 00 00 call _unz64local_getShort
+
+; 1412 : err=UNZ_ERRNO;
+; 1413 : /*
+; 1414 : else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion))
+; 1415 : err=UNZ_BADZIPFILE;
+; 1416 : */
+; 1417 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK)
+
+ 00088 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 0008b 83 c9 ff or ecx, -1
+ 0008e 83 c4 04 add esp, 4
+ 00091 85 c0 test eax, eax
+ 00093 8d 45 f4 lea eax, DWORD PTR _uFlags$[ebp]
+ 00096 0f 45 f1 cmovne esi, ecx
+ 00099 8b cf mov ecx, edi
+ 0009b 50 push eax
+ 0009c e8 00 00 00 00 call _unz64local_getShort
+
+; 1418 : err=UNZ_ERRNO;
+; 1419 :
+; 1420 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
+
+ 000a1 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 000a4 83 c4 04 add esp, 4
+ 000a7 85 c0 test eax, eax
+ 000a9 8b cf mov ecx, edi
+ 000ab b8 ff ff ff ff mov eax, -1
+ 000b0 0f 45 f0 cmovne esi, eax
+ 000b3 8d 45 fc lea eax, DWORD PTR _uData$[ebp]
+ 000b6 50 push eax
+ 000b7 e8 00 00 00 00 call _unz64local_getShort
+ 000bc 83 c4 04 add esp, 4
+ 000bf 85 c0 test eax, eax
+ 000c1 74 05 je SHORT $LN9@unz64local
+
+; 1421 : err=UNZ_ERRNO;
+
+ 000c3 83 ce ff or esi, -1
+ 000c6 eb 22 jmp SHORT $LN12@unz64local
+$LN9@unz64local:
+
+; 1422 : else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method))
+
+ 000c8 85 f6 test esi, esi
+ 000ca 75 1e jne SHORT $LN12@unz64local
+ 000cc 8b 87 8c 00 00
+ 00 mov eax, DWORD PTR [edi+140]
+ 000d2 39 45 fc cmp DWORD PTR _uData$[ebp], eax
+ 000d5 74 04 je SHORT $LN29@unz64local
+
+; 1423 : err=UNZ_BADZIPFILE;
+
+ 000d7 8b f3 mov esi, ebx
+
+; 1424 :
+; 1425 : if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) &&
+; 1426 : /* #ifdef HAVE_BZIP2 */
+; 1427 : (s->cur_file_info.compression_method!=Z_BZIP2ED) &&
+
+ 000d9 eb 0f jmp SHORT $LN12@unz64local
+$LN29@unz64local:
+ 000db 85 c0 test eax, eax
+ 000dd 74 0b je SHORT $LN12@unz64local
+ 000df 83 f8 0c cmp eax, 12 ; 0000000cH
+ 000e2 74 06 je SHORT $LN12@unz64local
+ 000e4 83 f8 08 cmp eax, 8
+ 000e7 0f 45 f3 cmovne esi, ebx
+$LN12@unz64local:
+
+; 1428 : /* #endif */
+; 1429 : (s->cur_file_info.compression_method!=Z_DEFLATED))
+; 1430 : err=UNZ_BADZIPFILE;
+; 1431 :
+; 1432 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */
+
+ 000ea 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 000ed 8d 45 fc lea eax, DWORD PTR _uData$[ebp]
+ 000f0 50 push eax
+ 000f1 8b cf mov ecx, edi
+ 000f3 e8 00 00 00 00 call _unz64local_getLong
+
+; 1433 : err=UNZ_ERRNO;
+; 1434 :
+; 1435 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */
+
+ 000f8 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 000fb 83 c4 04 add esp, 4
+ 000fe 85 c0 test eax, eax
+ 00100 8b cf mov ecx, edi
+ 00102 b8 ff ff ff ff mov eax, -1
+ 00107 0f 45 f0 cmovne esi, eax
+ 0010a 8d 45 fc lea eax, DWORD PTR _uData$[ebp]
+ 0010d 50 push eax
+ 0010e e8 00 00 00 00 call _unz64local_getLong
+ 00113 8b 5d f4 mov ebx, DWORD PTR _uFlags$[ebp]
+ 00116 83 c4 04 add esp, 4
+ 00119 85 c0 test eax, eax
+ 0011b 74 05 je SHORT $LN14@unz64local
+
+; 1436 : err=UNZ_ERRNO;
+
+ 0011d 83 ce ff or esi, -1
+ 00120 eb 1a jmp SHORT $LN16@unz64local
+$LN14@unz64local:
+
+; 1437 : else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && ((uFlags & 8)==0))
+
+ 00122 85 f6 test esi, esi
+ 00124 75 16 jne SHORT $LN16@unz64local
+ 00126 8b 45 fc mov eax, DWORD PTR _uData$[ebp]
+ 00129 3b 87 94 00 00
+ 00 cmp eax, DWORD PTR [edi+148]
+ 0012f 74 0b je SHORT $LN16@unz64local
+ 00131 f6 c3 08 test bl, 8
+ 00134 b8 99 ff ff ff mov eax, -103 ; ffffff99H
+ 00139 0f 44 f0 cmove esi, eax
+$LN16@unz64local:
+
+; 1438 : err=UNZ_BADZIPFILE;
+; 1439 :
+; 1440 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */
+
+ 0013c 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 0013f 8d 45 fc lea eax, DWORD PTR _uData$[ebp]
+ 00142 50 push eax
+ 00143 8b cf mov ecx, edi
+ 00145 e8 00 00 00 00 call _unz64local_getLong
+ 0014a 83 c4 04 add esp, 4
+ 0014d 85 c0 test eax, eax
+ 0014f 74 05 je SHORT $LN17@unz64local
+
+; 1441 : err=UNZ_ERRNO;
+
+ 00151 83 ce ff or esi, -1
+ 00154 eb 29 jmp SHORT $LN19@unz64local
+$LN17@unz64local:
+
+; 1442 : else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && ((uFlags & 8)==0))
+
+ 00156 8b 45 fc mov eax, DWORD PTR _uData$[ebp]
+ 00159 83 f8 ff cmp eax, -1
+ 0015c 74 21 je SHORT $LN19@unz64local
+ 0015e 85 f6 test esi, esi
+ 00160 75 1d jne SHORT $LN19@unz64local
+ 00162 33 c9 xor ecx, ecx
+ 00164 3b 87 98 00 00
+ 00 cmp eax, DWORD PTR [edi+152]
+ 0016a 75 08 jne SHORT $LN30@unz64local
+ 0016c 3b 8f 9c 00 00
+ 00 cmp ecx, DWORD PTR [edi+156]
+ 00172 74 0b je SHORT $LN19@unz64local
+$LN30@unz64local:
+ 00174 f6 c3 08 test bl, 8
+ 00177 b8 99 ff ff ff mov eax, -103 ; ffffff99H
+ 0017c 0f 44 f0 cmove esi, eax
+$LN19@unz64local:
+
+; 1443 : err=UNZ_BADZIPFILE;
+; 1444 :
+; 1445 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */
+
+ 0017f 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 00182 8d 45 fc lea eax, DWORD PTR _uData$[ebp]
+ 00185 50 push eax
+ 00186 8b cf mov ecx, edi
+ 00188 e8 00 00 00 00 call _unz64local_getLong
+ 0018d 83 c4 04 add esp, 4
+ 00190 85 c0 test eax, eax
+ 00192 74 05 je SHORT $LN20@unz64local
+
+; 1446 : err=UNZ_ERRNO;
+
+ 00194 83 ce ff or esi, -1
+ 00197 eb 29 jmp SHORT $LN22@unz64local
+$LN20@unz64local:
+
+; 1447 : else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && ((uFlags & 8)==0))
+
+ 00199 8b 45 fc mov eax, DWORD PTR _uData$[ebp]
+ 0019c 83 f8 ff cmp eax, -1
+ 0019f 74 21 je SHORT $LN22@unz64local
+ 001a1 85 f6 test esi, esi
+ 001a3 75 1d jne SHORT $LN22@unz64local
+ 001a5 33 c9 xor ecx, ecx
+ 001a7 3b 87 a0 00 00
+ 00 cmp eax, DWORD PTR [edi+160]
+ 001ad 75 08 jne SHORT $LN31@unz64local
+ 001af 3b 8f a4 00 00
+ 00 cmp ecx, DWORD PTR [edi+164]
+ 001b5 74 0b je SHORT $LN22@unz64local
+$LN31@unz64local:
+ 001b7 f6 c3 08 test bl, 8
+ 001ba b8 99 ff ff ff mov eax, -103 ; ffffff99H
+ 001bf 0f 44 f0 cmove esi, eax
+$LN22@unz64local:
+
+; 1448 : err=UNZ_BADZIPFILE;
+; 1449 :
+; 1450 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK)
+
+ 001c2 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 001c5 8d 45 f4 lea eax, DWORD PTR _size_filename$[ebp]
+ 001c8 50 push eax
+ 001c9 8b cf mov ecx, edi
+ 001cb e8 00 00 00 00 call _unz64local_getShort
+ 001d0 8b 5d f4 mov ebx, DWORD PTR _size_filename$[ebp]
+ 001d3 83 c4 04 add esp, 4
+ 001d6 85 c0 test eax, eax
+ 001d8 74 05 je SHORT $LN23@unz64local
+
+; 1451 : err=UNZ_ERRNO;
+
+ 001da 83 ce ff or esi, -1
+ 001dd eb 12 jmp SHORT $LN25@unz64local
+$LN23@unz64local:
+
+; 1452 : else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename))
+
+ 001df 85 f6 test esi, esi
+ 001e1 75 0e jne SHORT $LN25@unz64local
+ 001e3 3b 9f a8 00 00
+ 00 cmp ebx, DWORD PTR [edi+168]
+ 001e9 b8 99 ff ff ff mov eax, -103 ; ffffff99H
+ 001ee 0f 45 f0 cmovne esi, eax
+$LN25@unz64local:
+
+; 1453 : err=UNZ_BADZIPFILE;
+; 1454 :
+; 1455 : *piSizeVar += (uInt)size_filename;
+
+ 001f1 8b 45 f8 mov eax, DWORD PTR _piSizeVar$1$[ebp]
+
+; 1456 :
+; 1457 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK)
+
+ 001f4 8b cf mov ecx, edi
+ 001f6 8b 57 30 mov edx, DWORD PTR [edi+48]
+ 001f9 01 18 add DWORD PTR [eax], ebx
+ 001fb 8d 45 f4 lea eax, DWORD PTR _size_extra_field$[ebp]
+ 001fe 50 push eax
+ 001ff e8 00 00 00 00 call _unz64local_getShort
+ 00204 83 c4 04 add esp, 4
+ 00207 85 c0 test eax, eax
+ 00209 b8 ff ff ff ff mov eax, -1
+ 0020e 0f 45 f0 cmovne esi, eax
+
+; 1458 : err=UNZ_ERRNO;
+; 1459 : *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile +
+
+ 00211 8b 45 08 mov eax, DWORD PTR _poffset_local_extrafield$[ebp]
+ 00214 33 c9 xor ecx, ecx
+ 00216 03 9f d8 00 00
+ 00 add ebx, DWORD PTR [edi+216]
+ 0021c 13 8f dc 00 00
+ 00 adc ecx, DWORD PTR [edi+220]
+ 00222 83 c3 1e add ebx, 30 ; 0000001eH
+ 00225 89 18 mov DWORD PTR [eax], ebx
+ 00227 83 d1 00 adc ecx, 0
+ 0022a 89 48 04 mov DWORD PTR [eax+4], ecx
+
+; 1460 : SIZEZIPLOCALHEADER + size_filename;
+; 1461 : *psize_local_extrafield = (uInt)size_extra_field;
+
+ 0022d 8b 45 0c mov eax, DWORD PTR _psize_local_extrafield$[ebp]
+ 00230 8b 4d f4 mov ecx, DWORD PTR _size_extra_field$[ebp]
+
+; 1462 :
+; 1463 : *piSizeVar += (uInt)size_extra_field;
+; 1464 :
+; 1465 : return err;
+; 1466 : }
+
+ 00233 5f pop edi
+ 00234 89 08 mov DWORD PTR [eax], ecx
+ 00236 8b 45 f8 mov eax, DWORD PTR _piSizeVar$1$[ebp]
+ 00239 01 08 add DWORD PTR [eax], ecx
+ 0023b 8b c6 mov eax, esi
+ 0023d 5e pop esi
+ 0023e 5b pop ebx
+ 0023f 8b e5 mov esp, ebp
+ 00241 5d pop ebp
+ 00242 c3 ret 0
+_unz64local_CheckCurrentFileCoherencyHeader ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzOpenCurrentFile3@20
+_TEXT SEGMENT
+_size_local_extrafield$ = -16 ; size = 4
+_iSizeVar$ = -12 ; size = 4
+_offset_local_extrafield$ = -8 ; size = 8
+_file$ = 8 ; size = 4
+_method$ = 12 ; size = 4
+_level$ = 16 ; size = 4
+_raw$ = 20 ; size = 4
+_password$ = 24 ; size = 4
+_unzOpenCurrentFile3@20 PROC ; COMDAT
+
+; 1474 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 83 ec 14 sub esp, 20 ; 00000014H
+
+; 1475 : int err=UNZ_OK;
+; 1476 : uInt iSizeVar;
+; 1477 : unz64_s* s;
+; 1478 : file_in_zip64_read_info_s* pfile_in_zip_read_info;
+; 1479 : ZPOS64_T offset_local_extrafield; /* offset of the local extra field */
+; 1480 : uInt size_local_extrafield; /* size of the local extra field */
+; 1481 : # ifndef NOUNCRYPT
+; 1482 : char source[12];
+; 1483 : # else
+; 1484 : if (password != NULL)
+
+ 00009 83 7d 18 00 cmp DWORD PTR _password$[ebp], 0
+ 0000d 53 push ebx
+ 0000e 56 push esi
+ 0000f 57 push edi
+ 00010 74 0e je SHORT $LN4@unzOpenCur
+$LN25@unzOpenCur:
+
+; 1485 : return UNZ_PARAMERROR;
+
+ 00012 b8 9a ff ff ff mov eax, -102 ; ffffff9aH
+
+; 1639 : }
+
+ 00017 5f pop edi
+ 00018 5e pop esi
+ 00019 5b pop ebx
+ 0001a 8b e5 mov esp, ebp
+ 0001c 5d pop ebp
+ 0001d c2 14 00 ret 20 ; 00000014H
+$LN4@unzOpenCur:
+
+; 1486 : # endif
+; 1487 :
+; 1488 : if (file==NULL)
+
+ 00020 8b 7d 08 mov edi, DWORD PTR _file$[ebp]
+ 00023 85 ff test edi, edi
+ 00025 74 eb je SHORT $LN25@unzOpenCur
+
+; 1489 : return UNZ_PARAMERROR;
+; 1490 : s=(unz64_s*)file;
+; 1491 : if (!s->current_file_ok)
+
+ 00027 8b 47 60 mov eax, DWORD PTR [edi+96]
+ 0002a 0b 47 64 or eax, DWORD PTR [edi+100]
+ 0002d 74 e3 je SHORT $LN25@unzOpenCur
+
+; 1492 : return UNZ_PARAMERROR;
+; 1493 :
+; 1494 : if (s->pfile_in_zip_read != NULL)
+
+ 0002f 83 bf e0 00 00
+ 00 00 cmp DWORD PTR [edi+224], 0
+ 00036 74 06 je SHORT $LN7@unzOpenCur
+
+; 1495 : unzCloseCurrentFile(file);
+
+ 00038 57 push edi
+ 00039 e8 00 00 00 00 call _unzCloseCurrentFile@4
+$LN7@unzOpenCur:
+
+; 1496 :
+; 1497 : if (unz64local_CheckCurrentFileCoherencyHeader(s,&iSizeVar, &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK)
+
+ 0003e 8d 44 24 10 lea eax, DWORD PTR _size_local_extrafield$[esp+32]
+ 00042 8b cf mov ecx, edi
+ 00044 50 push eax
+ 00045 8d 44 24 1c lea eax, DWORD PTR _offset_local_extrafield$[esp+36]
+ 00049 50 push eax
+ 0004a 8d 54 24 1c lea edx, DWORD PTR _iSizeVar$[esp+40]
+ 0004e e8 00 00 00 00 call _unz64local_CheckCurrentFileCoherencyHeader
+ 00053 83 c4 08 add esp, 8
+ 00056 85 c0 test eax, eax
+ 00058 74 0e je SHORT $LN8@unzOpenCur
+
+; 1498 : return UNZ_BADZIPFILE;
+
+ 0005a b8 99 ff ff ff mov eax, -103 ; ffffff99H
+
+; 1639 : }
+
+ 0005f 5f pop edi
+ 00060 5e pop esi
+ 00061 5b pop ebx
+ 00062 8b e5 mov esp, ebp
+ 00064 5d pop ebp
+ 00065 c2 14 00 ret 20 ; 00000014H
+$LN8@unzOpenCur:
+
+; 1499 :
+; 1500 : pfile_in_zip_read_info = (file_in_zip64_read_info_s*)ALLOC(sizeof(file_in_zip64_read_info_s));
+
+ 00068 8b 1d 00 00 00
+ 00 mov ebx, DWORD PTR __imp__malloc
+ 0006e 68 d0 00 00 00 push 208 ; 000000d0H
+ 00073 ff d3 call ebx
+ 00075 8b f0 mov esi, eax
+ 00077 83 c4 04 add esp, 4
+
+; 1501 : if (pfile_in_zip_read_info==NULL)
+
+ 0007a 85 f6 test esi, esi
+ 0007c 74 46 je SHORT $LN26@unzOpenCur
+
+; 1502 : return UNZ_INTERNALERROR;
+; 1503 :
+; 1504 : pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE);
+
+ 0007e 68 00 40 00 00 push 16384 ; 00004000H
+ 00083 ff d3 call ebx
+
+; 1505 : pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield;
+
+ 00085 8b 4c 24 1c mov ecx, DWORD PTR _offset_local_extrafield$[esp+36]
+ 00089 83 c4 04 add esp, 4
+
+; 1506 : pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield;
+; 1507 : pfile_in_zip_read_info->pos_local_extrafield=0;
+; 1508 : pfile_in_zip_read_info->raw=raw;
+
+ 0008c 8b 55 14 mov edx, DWORD PTR _raw$[ebp]
+ 0008f 89 4e 50 mov DWORD PTR [esi+80], ecx
+ 00092 8b 4c 24 1c mov ecx, DWORD PTR _offset_local_extrafield$[esp+36]
+ 00096 89 4e 54 mov DWORD PTR [esi+84], ecx
+ 00099 8b 4c 24 10 mov ecx, DWORD PTR _size_local_extrafield$[esp+32]
+ 0009d 89 06 mov DWORD PTR [esi], eax
+ 0009f 89 4e 58 mov DWORD PTR [esi+88], ecx
+ 000a2 c7 46 60 00 00
+ 00 00 mov DWORD PTR [esi+96], 0
+ 000a9 c7 46 64 00 00
+ 00 00 mov DWORD PTR [esi+100], 0
+ 000b0 89 96 c8 00 00
+ 00 mov DWORD PTR [esi+200], edx
+
+; 1509 :
+; 1510 : if (pfile_in_zip_read_info->read_buffer==NULL)
+
+ 000b6 85 c0 test eax, eax
+ 000b8 75 18 jne SHORT $LN10@unzOpenCur
+
+; 1511 : {
+; 1512 : TRYFREE(pfile_in_zip_read_info);
+
+ 000ba 56 push esi
+ 000bb ff 15 00 00 00
+ 00 call DWORD PTR __imp__free
+ 000c1 83 c4 04 add esp, 4
+$LN26@unzOpenCur:
+
+; 1513 : return UNZ_INTERNALERROR;
+
+ 000c4 b8 98 ff ff ff mov eax, -104 ; ffffff98H
+
+; 1639 : }
+
+ 000c9 5f pop edi
+ 000ca 5e pop esi
+ 000cb 5b pop ebx
+ 000cc 8b e5 mov esp, ebp
+ 000ce 5d pop ebp
+ 000cf c2 14 00 ret 20 ; 00000014H
+$LN10@unzOpenCur:
+
+; 1514 : }
+; 1515 :
+; 1516 : pfile_in_zip_read_info->stream_initialised=0;
+; 1517 :
+; 1518 : if (method!=NULL)
+
+ 000d2 8b 4d 0c mov ecx, DWORD PTR _method$[ebp]
+ 000d5 c7 46 48 00 00
+ 00 00 mov DWORD PTR [esi+72], 0
+ 000dc 85 c9 test ecx, ecx
+ 000de 74 08 je SHORT $LN12@unzOpenCur
+
+; 1519 : *method = (int)s->cur_file_info.compression_method;
+
+ 000e0 8b 87 8c 00 00
+ 00 mov eax, DWORD PTR [edi+140]
+ 000e6 89 01 mov DWORD PTR [ecx], eax
+$LN12@unzOpenCur:
+
+; 1520 :
+; 1521 : if (level!=NULL)
+
+ 000e8 8b 4d 10 mov ecx, DWORD PTR _level$[ebp]
+ 000eb 85 c9 test ecx, ecx
+ 000ed 74 34 je SHORT $LN2@unzOpenCur
+
+; 1522 : {
+; 1523 : *level = 6;
+
+ 000ef c7 01 06 00 00
+ 00 mov DWORD PTR [ecx], 6
+
+; 1524 : switch (s->cur_file_info.flag & 0x06)
+
+ 000f5 8b 87 88 00 00
+ 00 mov eax, DWORD PTR [edi+136]
+ 000fb 83 e0 06 and eax, 6
+ 000fe 83 e8 02 sub eax, 2
+ 00101 74 1a je SHORT $LN16@unzOpenCur
+ 00103 83 e8 02 sub eax, 2
+ 00106 74 0d je SHORT $LN15@unzOpenCur
+ 00108 83 e8 02 sub eax, 2
+ 0010b 75 16 jne SHORT $LN2@unzOpenCur
+
+; 1525 : {
+; 1526 : case 6 : *level = 1; break;
+
+ 0010d c7 01 01 00 00
+ 00 mov DWORD PTR [ecx], 1
+ 00113 eb 0e jmp SHORT $LN2@unzOpenCur
+$LN15@unzOpenCur:
+
+; 1527 : case 4 : *level = 2; break;
+
+ 00115 c7 01 02 00 00
+ 00 mov DWORD PTR [ecx], 2
+ 0011b eb 06 jmp SHORT $LN2@unzOpenCur
+$LN16@unzOpenCur:
+
+; 1528 : case 2 : *level = 9; break;
+
+ 0011d c7 01 09 00 00
+ 00 mov DWORD PTR [ecx], 9
+$LN2@unzOpenCur:
+
+; 1529 : }
+; 1530 : }
+; 1531 :
+; 1532 : if ((s->cur_file_info.compression_method!=0) &&
+; 1533 : /* #ifdef HAVE_BZIP2 */
+; 1534 : (s->cur_file_info.compression_method!=Z_BZIP2ED) &&
+; 1535 : /* #endif */
+; 1536 : (s->cur_file_info.compression_method!=Z_DEFLATED))
+; 1537 :
+; 1538 : err=UNZ_BADZIPFILE;
+; 1539 :
+; 1540 : pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc;
+
+ 00123 8b 87 94 00 00
+ 00 mov eax, DWORD PTR [edi+148]
+ 00129 89 46 74 mov DWORD PTR [esi+116], eax
+
+; 1541 : pfile_in_zip_read_info->crc32=0;
+
+ 0012c c7 46 70 00 00
+ 00 00 mov DWORD PTR [esi+112], 0
+
+; 1542 : pfile_in_zip_read_info->total_out_64=0;
+
+ 00133 c7 46 68 00 00
+ 00 00 mov DWORD PTR [esi+104], 0
+ 0013a c7 46 6c 00 00
+ 00 00 mov DWORD PTR [esi+108], 0
+
+; 1543 : pfile_in_zip_read_info->compression_method = s->cur_file_info.compression_method;
+
+ 00141 8b 87 8c 00 00
+ 00 mov eax, DWORD PTR [edi+140]
+ 00147 89 86 b8 00 00
+ 00 mov DWORD PTR [esi+184], eax
+
+; 1544 : pfile_in_zip_read_info->filestream=s->filestream;
+
+ 0014d 8b 47 30 mov eax, DWORD PTR [edi+48]
+ 00150 89 86 b4 00 00
+ 00 mov DWORD PTR [esi+180], eax
+
+; 1545 : pfile_in_zip_read_info->z_filefunc=s->z_filefunc;
+
+ 00156 0f 10 07 movups xmm0, XMMWORD PTR [edi]
+ 00159 0f 11 86 88 00
+ 00 00 movups XMMWORD PTR [esi+136], xmm0
+ 00160 0f 10 47 10 movups xmm0, XMMWORD PTR [edi+16]
+ 00164 0f 11 86 98 00
+ 00 00 movups XMMWORD PTR [esi+152], xmm0
+ 0016b f3 0f 7e 47 20 movq xmm0, QWORD PTR [edi+32]
+ 00170 66 0f d6 86 a8
+ 00 00 00 movq QWORD PTR [esi+168], xmm0
+ 00178 8b 47 28 mov eax, DWORD PTR [edi+40]
+ 0017b 89 86 b0 00 00
+ 00 mov DWORD PTR [esi+176], eax
+
+; 1546 : pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile;
+
+ 00181 8b 47 48 mov eax, DWORD PTR [edi+72]
+ 00184 89 86 c0 00 00
+ 00 mov DWORD PTR [esi+192], eax
+ 0018a 8b 47 4c mov eax, DWORD PTR [edi+76]
+ 0018d 89 86 c4 00 00
+ 00 mov DWORD PTR [esi+196], eax
+
+; 1547 :
+; 1548 : pfile_in_zip_read_info->stream.total_out = 0;
+
+ 00193 c7 46 18 00 00
+ 00 00 mov DWORD PTR [esi+24], 0
+
+; 1549 :
+; 1550 : if ((s->cur_file_info.compression_method==Z_BZIP2ED) && (!raw))
+
+ 0019a 8b 87 8c 00 00
+ 00 mov eax, DWORD PTR [edi+140]
+ 001a0 83 f8 0c cmp eax, 12 ; 0000000cH
+ 001a3 75 78 jne SHORT $LN18@unzOpenCur
+ 001a5 85 d2 test edx, edx
+ 001a7 75 74 jne SHORT $LN18@unzOpenCur
+
+; 1551 : {
+; 1552 : #ifdef HAVE_BZIP2
+; 1553 : pfile_in_zip_read_info->bstream.bzalloc = (void *(*) (void *, int, int))0;
+; 1554 : pfile_in_zip_read_info->bstream.bzfree = (free_func)0;
+; 1555 : pfile_in_zip_read_info->bstream.opaque = (voidpf)0;
+; 1556 : pfile_in_zip_read_info->bstream.state = (voidpf)0;
+; 1557 :
+; 1558 : pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;
+; 1559 : pfile_in_zip_read_info->stream.zfree = (free_func)0;
+; 1560 : pfile_in_zip_read_info->stream.opaque = (voidpf)0;
+; 1561 : pfile_in_zip_read_info->stream.next_in = (voidpf)0;
+; 1562 : pfile_in_zip_read_info->stream.avail_in = 0;
+; 1563 :
+; 1564 : err=BZ2_bzDecompressInit(&pfile_in_zip_read_info->bstream, 0, 0);
+; 1565 : if (err == Z_OK)
+; 1566 : pfile_in_zip_read_info->stream_initialised=Z_BZIP2ED;
+; 1567 : else
+; 1568 : {
+; 1569 : TRYFREE(pfile_in_zip_read_info);
+; 1570 : return err;
+; 1571 : }
+; 1572 : #else
+; 1573 : pfile_in_zip_read_info->raw=1;
+
+ 001a9 c7 86 c8 00 00
+ 00 01 00 00 00 mov DWORD PTR [esi+200], 1
+$LN22@unzOpenCur:
+
+; 1591 : }
+; 1592 : /* windowBits is passed < 0 to tell that there is no zlib header.
+; 1593 : * Note that in this case inflate *requires* an extra "dummy" byte
+; 1594 : * after the compressed stream in order to complete decompression and
+; 1595 : * return Z_STREAM_END.
+; 1596 : * In unzip, i don't wait absolutely Z_STREAM_END because I known the
+; 1597 : * size of both compressed and uncompressed data
+; 1598 : */
+; 1599 : }
+; 1600 : pfile_in_zip_read_info->rest_read_compressed =
+
+ 001b3 8b 87 98 00 00
+ 00 mov eax, DWORD PTR [edi+152]
+
+; 1601 : s->cur_file_info.compressed_size ;
+; 1602 : pfile_in_zip_read_info->rest_read_uncompressed =
+; 1603 : s->cur_file_info.uncompressed_size ;
+; 1604 :
+; 1605 :
+; 1606 : pfile_in_zip_read_info->pos_in_zipfile =
+
+ 001b9 33 c9 xor ecx, ecx
+ 001bb 89 46 78 mov DWORD PTR [esi+120], eax
+ 001be 8b 87 9c 00 00
+ 00 mov eax, DWORD PTR [edi+156]
+ 001c4 89 46 7c mov DWORD PTR [esi+124], eax
+ 001c7 8b 87 a0 00 00
+ 00 mov eax, DWORD PTR [edi+160]
+ 001cd 89 86 80 00 00
+ 00 mov DWORD PTR [esi+128], eax
+ 001d3 8b 87 a4 00 00
+ 00 mov eax, DWORD PTR [edi+164]
+ 001d9 89 86 84 00 00
+ 00 mov DWORD PTR [esi+132], eax
+ 001df 8b 44 24 14 mov eax, DWORD PTR _iSizeVar$[esp+32]
+ 001e3 03 87 d8 00 00
+ 00 add eax, DWORD PTR [edi+216]
+ 001e9 13 8f dc 00 00
+ 00 adc ecx, DWORD PTR [edi+220]
+ 001ef 83 c0 1e add eax, 30 ; 0000001eH
+ 001f2 89 46 40 mov DWORD PTR [esi+64], eax
+ 001f5 83 d1 00 adc ecx, 0
+
+; 1607 : s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER +
+; 1608 : iSizeVar;
+; 1609 :
+; 1610 : pfile_in_zip_read_info->stream.avail_in = (uInt)0;
+
+ 001f8 c7 46 08 00 00
+ 00 00 mov DWORD PTR [esi+8], 0
+ 001ff 89 4e 44 mov DWORD PTR [esi+68], ecx
+
+; 1611 :
+; 1612 : s->pfile_in_zip_read = pfile_in_zip_read_info;
+; 1613 : s->encrypted = 0;
+; 1614 :
+; 1615 : # ifndef NOUNCRYPT
+; 1616 : if (password != NULL)
+; 1617 : {
+; 1618 : int i;
+; 1619 : s->pcrc_32_tab = get_crc_table();
+; 1620 : init_keys(password,s->keys,s->pcrc_32_tab);
+; 1621 : if (ZSEEK64(s->z_filefunc, s->filestream,
+; 1622 : s->pfile_in_zip_read->pos_in_zipfile +
+; 1623 : s->pfile_in_zip_read->byte_before_the_zipfile,
+; 1624 : SEEK_SET)!=0)
+; 1625 : return UNZ_INTERNALERROR;
+; 1626 : if(ZREAD64(s->z_filefunc, s->filestream,source, 12)<12)
+; 1627 : return UNZ_INTERNALERROR;
+; 1628 :
+; 1629 : for (i = 0; i<12; i++)
+; 1630 : zdecode(s->keys,s->pcrc_32_tab,source[i]);
+; 1631 :
+; 1632 : s->pfile_in_zip_read->pos_in_zipfile+=12;
+; 1633 : s->encrypted=1;
+; 1634 : }
+; 1635 : # endif
+; 1636 :
+; 1637 :
+; 1638 : return UNZ_OK;
+
+ 00202 33 c0 xor eax, eax
+ 00204 89 b7 e0 00 00
+ 00 mov DWORD PTR [edi+224], esi
+ 0020a c7 87 e4 00 00
+ 00 00 00 00 00 mov DWORD PTR [edi+228], 0
+
+; 1639 : }
+
+ 00214 5f pop edi
+ 00215 5e pop esi
+ 00216 5b pop ebx
+ 00217 8b e5 mov esp, ebp
+ 00219 5d pop ebp
+ 0021a c2 14 00 ret 20 ; 00000014H
+$LN18@unzOpenCur:
+
+; 1574 : #endif
+; 1575 : }
+; 1576 : else if ((s->cur_file_info.compression_method==Z_DEFLATED) && (!raw))
+
+ 0021d 83 f8 08 cmp eax, 8
+ 00220 75 91 jne SHORT $LN22@unzOpenCur
+ 00222 85 d2 test edx, edx
+ 00224 75 8d jne SHORT $LN22@unzOpenCur
+
+; 1577 : {
+; 1578 : pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;
+; 1579 : pfile_in_zip_read_info->stream.zfree = (free_func)0;
+; 1580 : pfile_in_zip_read_info->stream.opaque = (voidpf)0;
+; 1581 : pfile_in_zip_read_info->stream.next_in = 0;
+; 1582 : pfile_in_zip_read_info->stream.avail_in = 0;
+; 1583 :
+; 1584 : err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS);
+
+ 00226 6a 38 push 56 ; 00000038H
+ 00228 68 00 00 00 00 push OFFSET ??_C@_05IAIEPMAK@1?42?48?$AA@
+ 0022d 8d 46 04 lea eax, DWORD PTR [esi+4]
+ 00230 89 56 24 mov DWORD PTR [esi+36], edx
+ 00233 6a f1 push -15 ; fffffff1H
+ 00235 50 push eax
+ 00236 89 56 28 mov DWORD PTR [esi+40], edx
+ 00239 89 56 2c mov DWORD PTR [esi+44], edx
+ 0023c 89 10 mov DWORD PTR [eax], edx
+ 0023e 89 56 08 mov DWORD PTR [esi+8], edx
+ 00241 e8 00 00 00 00 call _inflateInit2_@16
+ 00246 8b d8 mov ebx, eax
+
+; 1585 : if (err == Z_OK)
+
+ 00248 85 db test ebx, ebx
+ 0024a 75 0c jne SHORT $LN21@unzOpenCur
+
+; 1586 : pfile_in_zip_read_info->stream_initialised=Z_DEFLATED;
+
+ 0024c c7 46 48 08 00
+ 00 00 mov DWORD PTR [esi+72], 8
+ 00253 e9 5b ff ff ff jmp $LN22@unzOpenCur
+$LN21@unzOpenCur:
+
+; 1587 : else
+; 1588 : {
+; 1589 : TRYFREE(pfile_in_zip_read_info);
+
+ 00258 56 push esi
+ 00259 ff 15 00 00 00
+ 00 call DWORD PTR __imp__free
+ 0025f 83 c4 04 add esp, 4
+
+; 1590 : return err;
+
+ 00262 8b c3 mov eax, ebx
+
+; 1639 : }
+
+ 00264 5f pop edi
+ 00265 5e pop esi
+ 00266 5b pop ebx
+ 00267 8b e5 mov esp, ebp
+ 00269 5d pop ebp
+ 0026a c2 14 00 ret 20 ; 00000014H
+_unzOpenCurrentFile3@20 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzOpenCurrentFile@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_unzOpenCurrentFile@4 PROC ; COMDAT
+
+; 1642 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1643 : return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL);
+
+ 00003 6a 00 push 0
+ 00005 6a 00 push 0
+ 00007 6a 00 push 0
+ 00009 6a 00 push 0
+ 0000b ff 75 08 push DWORD PTR _file$[ebp]
+ 0000e e8 00 00 00 00 call _unzOpenCurrentFile3@20
+
+; 1644 : }
+
+ 00013 5d pop ebp
+ 00014 c2 04 00 ret 4
+_unzOpenCurrentFile@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzOpenCurrentFilePassword@8
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_password$ = 12 ; size = 4
+_unzOpenCurrentFilePassword@8 PROC ; COMDAT
+
+; 1647 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1648 : return unzOpenCurrentFile3(file, NULL, NULL, 0, password);
+
+ 00003 ff 75 0c push DWORD PTR _password$[ebp]
+ 00006 6a 00 push 0
+ 00008 6a 00 push 0
+ 0000a 6a 00 push 0
+ 0000c ff 75 08 push DWORD PTR _file$[ebp]
+ 0000f e8 00 00 00 00 call _unzOpenCurrentFile3@20
+
+; 1649 : }
+
+ 00014 5d pop ebp
+ 00015 c2 08 00 ret 8
+_unzOpenCurrentFilePassword@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzOpenCurrentFile2@16
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_method$ = 12 ; size = 4
+_level$ = 16 ; size = 4
+_raw$ = 20 ; size = 4
+_unzOpenCurrentFile2@16 PROC ; COMDAT
+
+; 1652 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1653 : return unzOpenCurrentFile3(file, method, level, raw, NULL);
+
+ 00003 6a 00 push 0
+ 00005 ff 75 14 push DWORD PTR _raw$[ebp]
+ 00008 ff 75 10 push DWORD PTR _level$[ebp]
+ 0000b ff 75 0c push DWORD PTR _method$[ebp]
+ 0000e ff 75 08 push DWORD PTR _file$[ebp]
+ 00011 e8 00 00 00 00 call _unzOpenCurrentFile3@20
+
+; 1654 : }
+
+ 00016 5d pop ebp
+ 00017 c2 10 00 ret 16 ; 00000010H
+_unzOpenCurrentFile2@16 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzGetCurrentFileZStreamPos64@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_unzGetCurrentFileZStreamPos64@4 PROC ; COMDAT
+
+; 1659 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1660 : unz64_s* s;
+; 1661 : file_in_zip64_read_info_s* pfile_in_zip_read_info;
+; 1662 : s=(unz64_s*)file;
+; 1663 : if (file==NULL)
+
+ 00003 8b 4d 08 mov ecx, DWORD PTR _file$[ebp]
+ 00006 85 c9 test ecx, ecx
+ 00008 75 08 jne SHORT $LN2@unzGetCurr
+$LN5@unzGetCurr:
+
+; 1664 : return 0; //UNZ_PARAMERROR;
+
+ 0000a 33 c0 xor eax, eax
+ 0000c 33 d2 xor edx, edx
+
+; 1669 : pfile_in_zip_read_info->byte_before_the_zipfile;
+; 1670 : }
+
+ 0000e 5d pop ebp
+ 0000f c2 04 00 ret 4
+$LN2@unzGetCurr:
+
+; 1665 : pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ 00012 8b 89 e0 00 00
+ 00 mov ecx, DWORD PTR [ecx+224]
+
+; 1666 : if (pfile_in_zip_read_info==NULL)
+
+ 00018 85 c9 test ecx, ecx
+ 0001a 74 ee je SHORT $LN5@unzGetCurr
+
+; 1667 : return 0; //UNZ_PARAMERROR;
+; 1668 : return pfile_in_zip_read_info->pos_in_zipfile +
+
+ 0001c 8b 81 c0 00 00
+ 00 mov eax, DWORD PTR [ecx+192]
+ 00022 03 41 40 add eax, DWORD PTR [ecx+64]
+ 00025 8b 91 c4 00 00
+ 00 mov edx, DWORD PTR [ecx+196]
+ 0002b 13 51 44 adc edx, DWORD PTR [ecx+68]
+
+; 1669 : pfile_in_zip_read_info->byte_before_the_zipfile;
+; 1670 : }
+
+ 0002e 5d pop ebp
+ 0002f c2 04 00 ret 4
+_unzGetCurrentFileZStreamPos64@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzReadCurrentFile@12
+_TEXT SEGMENT
+_iRead$1$ = -16 ; size = 4
+_uTotalOutBefore$1$ = -12 ; size = 4
+tv353 = -8 ; size = 4
+_err$1$ = -8 ; size = 4
+_bufBefore$1$ = -4 ; size = 4
+_file$ = 8 ; size = 4
+_buf$ = 12 ; size = 4
+_len$ = 16 ; size = 4
+_unzReadCurrentFile@12 PROC ; COMDAT
+
+; 1685 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 83 ec 14 sub esp, 20 ; 00000014H
+ 00009 53 push ebx
+ 0000a 56 push esi
+
+; 1686 : int err=UNZ_OK;
+; 1687 : uInt iRead = 0;
+; 1688 : unz64_s* s;
+; 1689 : file_in_zip64_read_info_s* pfile_in_zip_read_info;
+; 1690 : if (file==NULL)
+
+ 0000b 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 0000e 33 db xor ebx, ebx
+ 00010 89 5c 24 0c mov DWORD PTR _iRead$1$[esp+28], ebx
+ 00014 57 push edi
+ 00015 85 f6 test esi, esi
+ 00017 75 0e jne SHORT $LN7@unzReadCur
+$LN55@unzReadCur:
+
+; 1691 : return UNZ_PARAMERROR;
+
+ 00019 b8 9a ff ff ff mov eax, -102 ; ffffff9aH
+
+; 1882 : return err;
+; 1883 : }
+
+ 0001e 5f pop edi
+ 0001f 5e pop esi
+ 00020 5b pop ebx
+ 00021 8b e5 mov esp, ebp
+ 00023 5d pop ebp
+ 00024 c2 0c 00 ret 12 ; 0000000cH
+$LN7@unzReadCur:
+
+; 1692 : s=(unz64_s*)file;
+; 1693 : pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ 00027 8b b6 e0 00 00
+ 00 mov esi, DWORD PTR [esi+224]
+
+; 1694 :
+; 1695 : if (pfile_in_zip_read_info==NULL)
+
+ 0002d 85 f6 test esi, esi
+ 0002f 74 e8 je SHORT $LN55@unzReadCur
+
+; 1696 : return UNZ_PARAMERROR;
+; 1697 :
+; 1698 :
+; 1699 : if (pfile_in_zip_read_info->read_buffer == NULL)
+
+ 00031 39 1e cmp DWORD PTR [esi], ebx
+ 00033 75 0e jne SHORT $LN9@unzReadCur
+
+; 1700 : return UNZ_END_OF_LIST_OF_FILE;
+
+ 00035 b8 9c ff ff ff mov eax, -100 ; ffffff9cH
+
+; 1882 : return err;
+; 1883 : }
+
+ 0003a 5f pop edi
+ 0003b 5e pop esi
+ 0003c 5b pop ebx
+ 0003d 8b e5 mov esp, ebp
+ 0003f 5d pop ebp
+ 00040 c2 0c 00 ret 12 ; 0000000cH
+$LN9@unzReadCur:
+
+; 1701 : if (len==0)
+
+ 00043 8b 4d 10 mov ecx, DWORD PTR _len$[ebp]
+ 00046 85 c9 test ecx, ecx
+ 00048 75 0b jne SHORT $LN10@unzReadCur
+$LN33@unzReadCur:
+
+; 1702 : return 0;
+
+ 0004a 33 c0 xor eax, eax
+
+; 1882 : return err;
+; 1883 : }
+
+ 0004c 5f pop edi
+ 0004d 5e pop esi
+ 0004e 5b pop ebx
+ 0004f 8b e5 mov esp, ebp
+ 00051 5d pop ebp
+ 00052 c2 0c 00 ret 12 ; 0000000cH
+$LN10@unzReadCur:
+
+; 1703 :
+; 1704 : pfile_in_zip_read_info->stream.next_out = (Bytef*)buf;
+
+ 00055 8b 45 0c mov eax, DWORD PTR _buf$[ebp]
+ 00058 89 46 10 mov DWORD PTR [esi+16], eax
+
+; 1705 :
+; 1706 : pfile_in_zip_read_info->stream.avail_out = (uInt)len;
+; 1707 :
+; 1708 : if ((len>pfile_in_zip_read_info->rest_read_uncompressed) &&
+
+ 0005b 33 c0 xor eax, eax
+ 0005d 89 4e 14 mov DWORD PTR [esi+20], ecx
+ 00060 3b 86 84 00 00
+ 00 cmp eax, DWORD PTR [esi+132]
+ 00066 72 1b jb SHORT $LN11@unzReadCur
+ 00068 77 08 ja SHORT $LN49@unzReadCur
+ 0006a 3b 8e 80 00 00
+ 00 cmp ecx, DWORD PTR [esi+128]
+ 00070 76 11 jbe SHORT $LN11@unzReadCur
+$LN49@unzReadCur:
+ 00072 39 86 c8 00 00
+ 00 cmp DWORD PTR [esi+200], eax
+ 00078 75 09 jne SHORT $LN11@unzReadCur
+
+; 1709 : (!(pfile_in_zip_read_info->raw)))
+; 1710 : pfile_in_zip_read_info->stream.avail_out =
+
+ 0007a 8b 86 80 00 00
+ 00 mov eax, DWORD PTR [esi+128]
+ 00080 89 46 14 mov DWORD PTR [esi+20], eax
+$LN11@unzReadCur:
+
+; 1711 : (uInt)pfile_in_zip_read_info->rest_read_uncompressed;
+; 1712 :
+; 1713 : if ((len>pfile_in_zip_read_info->rest_read_compressed+
+; 1714 : pfile_in_zip_read_info->stream.avail_in) &&
+
+ 00083 8b 7e 08 mov edi, DWORD PTR [esi+8]
+ 00086 33 c0 xor eax, eax
+ 00088 8b d7 mov edx, edi
+ 0008a 03 56 78 add edx, DWORD PTR [esi+120]
+ 0008d 13 46 7c adc eax, DWORD PTR [esi+124]
+ 00090 3b d8 cmp ebx, eax
+ 00092 72 16 jb SHORT $LN31@unzReadCur
+ 00094 77 04 ja SHORT $LN50@unzReadCur
+ 00096 3b ca cmp ecx, edx
+ 00098 76 10 jbe SHORT $LN31@unzReadCur
+$LN50@unzReadCur:
+ 0009a 39 9e c8 00 00
+ 00 cmp DWORD PTR [esi+200], ebx
+ 000a0 74 08 je SHORT $LN31@unzReadCur
+
+; 1715 : (pfile_in_zip_read_info->raw))
+; 1716 : pfile_in_zip_read_info->stream.avail_out =
+
+ 000a2 8b 46 78 mov eax, DWORD PTR [esi+120]
+ 000a5 03 c7 add eax, edi
+ 000a7 89 46 14 mov DWORD PTR [esi+20], eax
+$LN31@unzReadCur:
+
+; 1717 : (uInt)pfile_in_zip_read_info->rest_read_compressed+
+; 1718 : pfile_in_zip_read_info->stream.avail_in;
+; 1719 :
+; 1720 : while (pfile_in_zip_read_info->stream.avail_out>0)
+
+ 000aa 39 5e 14 cmp DWORD PTR [esi+20], ebx
+ 000ad 0f 86 d0 01 00
+ 00 jbe $LN48@unzReadCur
+ 000b3 bb fd ff ff ff mov ebx, -3 ; fffffffdH
+ 000b8 0f 1f 84 00 00
+ 00 00 00 npad 8
+$LL2@unzReadCur:
+
+; 1721 : {
+; 1722 : if ((pfile_in_zip_read_info->stream.avail_in==0) &&
+
+ 000c0 83 7e 08 00 cmp DWORD PTR [esi+8], 0
+ 000c4 0f 85 96 00 00
+ 00 jne $LN13@unzReadCur
+ 000ca 8b 4e 7c mov ecx, DWORD PTR [esi+124]
+ 000cd 8b 46 78 mov eax, DWORD PTR [esi+120]
+ 000d0 85 c9 test ecx, ecx
+ 000d2 75 08 jne SHORT $LN51@unzReadCur
+ 000d4 85 c0 test eax, eax
+ 000d6 0f 84 84 00 00
+ 00 je $LN13@unzReadCur
+$LN51@unzReadCur:
+
+; 1723 : (pfile_in_zip_read_info->rest_read_compressed>0))
+; 1724 : {
+; 1725 : uInt uReadThis = UNZ_BUFSIZE;
+
+ 000dc bf 00 40 00 00 mov edi, 16384 ; 00004000H
+
+; 1726 : if (pfile_in_zip_read_info->rest_read_compressed<uReadThis)
+
+ 000e1 85 c9 test ecx, ecx
+ 000e3 77 11 ja SHORT $LN47@unzReadCur
+ 000e5 72 04 jb SHORT $LN52@unzReadCur
+ 000e7 3b c7 cmp eax, edi
+ 000e9 73 0b jae SHORT $LN47@unzReadCur
+$LN52@unzReadCur:
+
+; 1727 : uReadThis = (uInt)pfile_in_zip_read_info->rest_read_compressed;
+
+ 000eb 8b 7e 78 mov edi, DWORD PTR [esi+120]
+
+; 1728 : if (uReadThis == 0)
+
+ 000ee 85 ff test edi, edi
+ 000f0 0f 84 54 ff ff
+ ff je $LN33@unzReadCur
+$LN47@unzReadCur:
+
+; 1729 : return UNZ_EOF;
+; 1730 : if (ZSEEK64(pfile_in_zip_read_info->z_filefunc,
+; 1731 : pfile_in_zip_read_info->filestream,
+; 1732 : pfile_in_zip_read_info->pos_in_zipfile +
+; 1733 : pfile_in_zip_read_info->byte_before_the_zipfile,
+; 1734 : ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 000f6 8b 8e c0 00 00
+ 00 mov ecx, DWORD PTR [esi+192]
+ 000fc 03 4e 40 add ecx, DWORD PTR [esi+64]
+ 000ff 8b 86 c4 00 00
+ 00 mov eax, DWORD PTR [esi+196]
+ 00105 13 46 44 adc eax, DWORD PTR [esi+68]
+ 00108 8b 96 b4 00 00
+ 00 mov edx, DWORD PTR [esi+180]
+ 0010e 6a 00 push 0
+ 00110 50 push eax
+ 00111 51 push ecx
+ 00112 8d 8e 88 00 00
+ 00 lea ecx, DWORD PTR [esi+136]
+ 00118 e8 00 00 00 00 call _call_zseek64
+ 0011d 83 c4 0c add esp, 12 ; 0000000cH
+ 00120 85 c0 test eax, eax
+ 00122 0f 85 66 01 00
+ 00 jne $LN34@unzReadCur
+
+; 1736 : if (ZREAD64(pfile_in_zip_read_info->z_filefunc,
+; 1737 : pfile_in_zip_read_info->filestream,
+; 1738 : pfile_in_zip_read_info->read_buffer,
+; 1739 : uReadThis)!=uReadThis)
+
+ 00128 8b 86 8c 00 00
+ 00 mov eax, DWORD PTR [esi+140]
+ 0012e 57 push edi
+ 0012f ff 36 push DWORD PTR [esi]
+ 00131 ff b6 b4 00 00
+ 00 push DWORD PTR [esi+180]
+ 00137 ff b6 a4 00 00
+ 00 push DWORD PTR [esi+164]
+ 0013d ff d0 call eax
+ 0013f 83 c4 10 add esp, 16 ; 00000010H
+ 00142 3b c7 cmp eax, edi
+ 00144 0f 85 44 01 00
+ 00 jne $LN34@unzReadCur
+
+; 1740 : return UNZ_ERRNO;
+; 1741 :
+; 1742 :
+; 1743 : # ifndef NOUNCRYPT
+; 1744 : if(s->encrypted)
+; 1745 : {
+; 1746 : uInt i;
+; 1747 : for(i=0;i<uReadThis;i++)
+; 1748 : pfile_in_zip_read_info->read_buffer[i] =
+; 1749 : zdecode(s->keys,s->pcrc_32_tab,
+; 1750 : pfile_in_zip_read_info->read_buffer[i]);
+; 1751 : }
+; 1752 : # endif
+; 1753 :
+; 1754 :
+; 1755 : pfile_in_zip_read_info->pos_in_zipfile += uReadThis;
+
+ 0014a 01 7e 40 add DWORD PTR [esi+64], edi
+
+; 1756 :
+; 1757 : pfile_in_zip_read_info->rest_read_compressed-=uReadThis;
+; 1758 :
+; 1759 : pfile_in_zip_read_info->stream.next_in =
+
+ 0014d 8b 06 mov eax, DWORD PTR [esi]
+ 0014f 83 56 44 00 adc DWORD PTR [esi+68], 0
+ 00153 29 7e 78 sub DWORD PTR [esi+120], edi
+ 00156 89 46 04 mov DWORD PTR [esi+4], eax
+ 00159 83 5e 7c 00 sbb DWORD PTR [esi+124], 0
+
+; 1760 : (Bytef*)pfile_in_zip_read_info->read_buffer;
+; 1761 : pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis;
+
+ 0015d 89 7e 08 mov DWORD PTR [esi+8], edi
+$LN13@unzReadCur:
+
+; 1762 : }
+; 1763 :
+; 1764 : if ((pfile_in_zip_read_info->compression_method==0) || (pfile_in_zip_read_info->raw))
+
+ 00160 8b 86 b8 00 00
+ 00 mov eax, DWORD PTR [esi+184]
+ 00166 85 c0 test eax, eax
+ 00168 0f 84 97 00 00
+ 00 je $LN20@unzReadCur
+ 0016e 83 be c8 00 00
+ 00 00 cmp DWORD PTR [esi+200], 0
+ 00175 0f 85 8a 00 00
+ 00 jne $LN20@unzReadCur
+
+; 1794 : }
+; 1795 : else if (pfile_in_zip_read_info->compression_method==Z_BZIP2ED)
+
+ 0017b 83 f8 0c cmp eax, 12 ; 0000000cH
+ 0017e 0f 84 f1 00 00
+ 00 je $LN28@unzReadCur
+
+; 1796 : {
+; 1797 : #ifdef HAVE_BZIP2
+; 1798 : uLong uTotalOutBefore,uTotalOutAfter;
+; 1799 : const Bytef *bufBefore;
+; 1800 : uLong uOutThis;
+; 1801 :
+; 1802 : pfile_in_zip_read_info->bstream.next_in = (char*)pfile_in_zip_read_info->stream.next_in;
+; 1803 : pfile_in_zip_read_info->bstream.avail_in = pfile_in_zip_read_info->stream.avail_in;
+; 1804 : pfile_in_zip_read_info->bstream.total_in_lo32 = pfile_in_zip_read_info->stream.total_in;
+; 1805 : pfile_in_zip_read_info->bstream.total_in_hi32 = 0;
+; 1806 : pfile_in_zip_read_info->bstream.next_out = (char*)pfile_in_zip_read_info->stream.next_out;
+; 1807 : pfile_in_zip_read_info->bstream.avail_out = pfile_in_zip_read_info->stream.avail_out;
+; 1808 : pfile_in_zip_read_info->bstream.total_out_lo32 = pfile_in_zip_read_info->stream.total_out;
+; 1809 : pfile_in_zip_read_info->bstream.total_out_hi32 = 0;
+; 1810 :
+; 1811 : uTotalOutBefore = pfile_in_zip_read_info->bstream.total_out_lo32;
+; 1812 : bufBefore = (const Bytef *)pfile_in_zip_read_info->bstream.next_out;
+; 1813 :
+; 1814 : err=BZ2_bzDecompress(&pfile_in_zip_read_info->bstream);
+; 1815 :
+; 1816 : uTotalOutAfter = pfile_in_zip_read_info->bstream.total_out_lo32;
+; 1817 : uOutThis = uTotalOutAfter-uTotalOutBefore;
+; 1818 :
+; 1819 : pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;
+; 1820 :
+; 1821 : pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,bufBefore, (uInt)(uOutThis));
+; 1822 : pfile_in_zip_read_info->rest_read_uncompressed -= uOutThis;
+; 1823 : iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
+; 1824 :
+; 1825 : pfile_in_zip_read_info->stream.next_in = (Bytef*)pfile_in_zip_read_info->bstream.next_in;
+; 1826 : pfile_in_zip_read_info->stream.avail_in = pfile_in_zip_read_info->bstream.avail_in;
+; 1827 : pfile_in_zip_read_info->stream.total_in = pfile_in_zip_read_info->bstream.total_in_lo32;
+; 1828 : pfile_in_zip_read_info->stream.next_out = (Bytef*)pfile_in_zip_read_info->bstream.next_out;
+; 1829 : pfile_in_zip_read_info->stream.avail_out = pfile_in_zip_read_info->bstream.avail_out;
+; 1830 : pfile_in_zip_read_info->stream.total_out = pfile_in_zip_read_info->bstream.total_out_lo32;
+; 1831 :
+; 1832 : if (err==BZ_STREAM_END)
+; 1833 : return (iRead==0) ? UNZ_EOF : iRead;
+; 1834 : if (err!=BZ_OK)
+; 1835 : break;
+; 1836 : #endif
+; 1837 : } // end Z_BZIP2ED
+; 1838 : else
+; 1839 : {
+; 1840 : ZPOS64_T uTotalOutBefore,uTotalOutAfter;
+; 1841 : const Bytef *bufBefore;
+; 1842 : ZPOS64_T uOutThis;
+; 1843 : int flush=Z_SYNC_FLUSH;
+; 1844 :
+; 1845 : uTotalOutBefore = pfile_in_zip_read_info->stream.total_out;
+
+ 00184 8b 46 18 mov eax, DWORD PTR [esi+24]
+ 00187 89 44 24 14 mov DWORD PTR _uTotalOutBefore$1$[esp+32], eax
+
+; 1846 : bufBefore = pfile_in_zip_read_info->stream.next_out;
+
+ 0018b 8b 46 10 mov eax, DWORD PTR [esi+16]
+ 0018e 89 44 24 1c mov DWORD PTR _bufBefore$1$[esp+32], eax
+
+; 1847 :
+; 1848 : /*
+; 1849 : if ((pfile_in_zip_read_info->rest_read_uncompressed ==
+; 1850 : pfile_in_zip_read_info->stream.avail_out) &&
+; 1851 : (pfile_in_zip_read_info->rest_read_compressed == 0))
+; 1852 : flush = Z_FINISH;
+; 1853 : */
+; 1854 : err=inflate(&pfile_in_zip_read_info->stream,flush);
+
+ 00192 8d 46 04 lea eax, DWORD PTR [esi+4]
+ 00195 6a 02 push 2
+ 00197 50 push eax
+ 00198 e8 00 00 00 00 call _inflate@8
+ 0019d 89 44 24 18 mov DWORD PTR _err$1$[esp+32], eax
+
+; 1855 :
+; 1856 : if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL))
+
+ 001a1 85 c0 test eax, eax
+ 001a3 78 0b js SHORT $LN26@unzReadCur
+ 001a5 83 7e 1c 00 cmp DWORD PTR [esi+28], 0
+ 001a9 0f 45 c3 cmovne eax, ebx
+ 001ac 89 44 24 18 mov DWORD PTR _err$1$[esp+32], eax
+$LN26@unzReadCur:
+
+; 1857 : err = Z_DATA_ERROR;
+; 1858 :
+; 1859 : uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;
+; 1860 : uOutThis = uTotalOutAfter-uTotalOutBefore;
+
+ 001b0 8b 7e 18 mov edi, DWORD PTR [esi+24]
+ 001b3 33 db xor ebx, ebx
+ 001b5 2b 7c 24 14 sub edi, DWORD PTR _uTotalOutBefore$1$[esp+32]
+
+; 1861 :
+; 1862 : pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;
+; 1863 :
+; 1864 : pfile_in_zip_read_info->crc32 =
+
+ 001b9 57 push edi
+ 001ba ff 74 24 20 push DWORD PTR _bufBefore$1$[esp+36]
+ 001be 1b db sbb ebx, ebx
+ 001c0 01 7e 68 add DWORD PTR [esi+104], edi
+ 001c3 ff 76 70 push DWORD PTR [esi+112]
+ 001c6 11 5e 6c adc DWORD PTR [esi+108], ebx
+ 001c9 e8 00 00 00 00 call _crc32@12
+
+; 1865 : crc32(pfile_in_zip_read_info->crc32,bufBefore,
+; 1866 : (uInt)(uOutThis));
+; 1867 :
+; 1868 : pfile_in_zip_read_info->rest_read_uncompressed -=
+
+ 001ce 29 be 80 00 00
+ 00 sub DWORD PTR [esi+128], edi
+
+; 1869 : uOutThis;
+; 1870 :
+; 1871 : iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
+
+ 001d4 8b 4c 24 10 mov ecx, DWORD PTR _iRead$1$[esp+32]
+ 001d8 19 9e 84 00 00
+ 00 sbb DWORD PTR [esi+132], ebx
+ 001de 89 46 70 mov DWORD PTR [esi+112], eax
+ 001e1 8b 46 18 mov eax, DWORD PTR [esi+24]
+ 001e4 2b 44 24 14 sub eax, DWORD PTR _uTotalOutBefore$1$[esp+32]
+ 001e8 03 c8 add ecx, eax
+
+; 1872 :
+; 1873 : if (err==Z_STREAM_END)
+
+ 001ea 8b 44 24 18 mov eax, DWORD PTR _err$1$[esp+32]
+ 001ee 89 4c 24 10 mov DWORD PTR _iRead$1$[esp+32], ecx
+ 001f2 83 f8 01 cmp eax, 1
+ 001f5 0f 84 9f 00 00
+ 00 je $LN36@unzReadCur
+
+; 1875 : if (err!=Z_OK)
+
+ 001fb 85 c0 test eax, eax
+ 001fd 0f 85 82 00 00
+ 00 jne $LN1@unzReadCur
+ 00203 eb 6b jmp SHORT $LN54@unzReadCur
+$LN20@unzReadCur:
+
+; 1765 : {
+; 1766 : uInt uDoCopy,i ;
+; 1767 :
+; 1768 : if ((pfile_in_zip_read_info->stream.avail_in == 0) &&
+
+ 00205 8b 5e 08 mov ebx, DWORD PTR [esi+8]
+ 00208 85 db test ebx, ebx
+ 0020a 75 0c jne SHORT $LN21@unzReadCur
+ 0020c 8b 46 78 mov eax, DWORD PTR [esi+120]
+ 0020f 0b 46 7c or eax, DWORD PTR [esi+124]
+ 00212 0f 84 8d 00 00
+ 00 je $LN38@unzReadCur
+$LN21@unzReadCur:
+
+; 1771 :
+; 1772 : if (pfile_in_zip_read_info->stream.avail_out <
+
+ 00218 39 5e 14 cmp DWORD PTR [esi+20], ebx
+ 0021b 0f 42 5e 14 cmovb ebx, DWORD PTR [esi+20]
+
+; 1773 : pfile_in_zip_read_info->stream.avail_in)
+; 1774 : uDoCopy = pfile_in_zip_read_info->stream.avail_out ;
+; 1775 : else
+; 1776 : uDoCopy = pfile_in_zip_read_info->stream.avail_in ;
+; 1777 :
+; 1778 : for (i=0;i<uDoCopy;i++)
+
+ 0021f 33 d2 xor edx, edx
+ 00221 85 db test ebx, ebx
+ 00223 74 11 je SHORT $LN5@unzReadCur
+$LL40@unzReadCur:
+
+; 1779 : *(pfile_in_zip_read_info->stream.next_out+i) =
+
+ 00225 8b 46 04 mov eax, DWORD PTR [esi+4]
+ 00228 8b 4e 10 mov ecx, DWORD PTR [esi+16]
+ 0022b 8a 04 02 mov al, BYTE PTR [edx+eax]
+ 0022e 88 04 0a mov BYTE PTR [edx+ecx], al
+ 00231 42 inc edx
+ 00232 3b d3 cmp edx, ebx
+ 00234 72 ef jb SHORT $LL40@unzReadCur
+$LN5@unzReadCur:
+
+; 1780 : *(pfile_in_zip_read_info->stream.next_in+i);
+; 1781 :
+; 1782 : pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uDoCopy;
+; 1783 :
+; 1784 : pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,
+
+ 00236 8b 7e 10 mov edi, DWORD PTR [esi+16]
+ 00239 01 5e 68 add DWORD PTR [esi+104], ebx
+ 0023c 53 push ebx
+ 0023d 83 56 6c 00 adc DWORD PTR [esi+108], 0
+ 00241 57 push edi
+ 00242 ff 76 70 push DWORD PTR [esi+112]
+ 00245 e8 00 00 00 00 call _crc32@12
+
+; 1785 : pfile_in_zip_read_info->stream.next_out,
+; 1786 : uDoCopy);
+; 1787 : pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy;
+
+ 0024a 29 9e 80 00 00
+ 00 sub DWORD PTR [esi+128], ebx
+ 00250 89 46 70 mov DWORD PTR [esi+112], eax
+
+; 1788 : pfile_in_zip_read_info->stream.avail_in -= uDoCopy;
+; 1789 : pfile_in_zip_read_info->stream.avail_out -= uDoCopy;
+; 1790 : pfile_in_zip_read_info->stream.next_out += uDoCopy;
+
+ 00253 8d 04 1f lea eax, DWORD PTR [edi+ebx]
+ 00256 83 9e 84 00 00
+ 00 00 sbb DWORD PTR [esi+132], 0
+ 0025d 29 5e 08 sub DWORD PTR [esi+8], ebx
+ 00260 29 5e 14 sub DWORD PTR [esi+20], ebx
+
+; 1791 : pfile_in_zip_read_info->stream.next_in += uDoCopy;
+
+ 00263 01 5e 04 add DWORD PTR [esi+4], ebx
+
+; 1792 : pfile_in_zip_read_info->stream.total_out += uDoCopy;
+
+ 00266 01 5e 18 add DWORD PTR [esi+24], ebx
+
+; 1793 : iRead += uDoCopy;
+
+ 00269 01 5c 24 10 add DWORD PTR _iRead$1$[esp+32], ebx
+ 0026d 89 46 10 mov DWORD PTR [esi+16], eax
+$LN54@unzReadCur:
+ 00270 bb fd ff ff ff mov ebx, -3 ; fffffffdH
+$LN28@unzReadCur:
+
+; 1717 : (uInt)pfile_in_zip_read_info->rest_read_compressed+
+; 1718 : pfile_in_zip_read_info->stream.avail_in;
+; 1719 :
+; 1720 : while (pfile_in_zip_read_info->stream.avail_out>0)
+
+ 00275 83 7e 14 00 cmp DWORD PTR [esi+20], 0
+ 00279 0f 87 41 fe ff
+ ff ja $LL2@unzReadCur
+ 0027f 8b 5c 24 10 mov ebx, DWORD PTR _iRead$1$[esp+32]
+$LN48@unzReadCur:
+
+; 1876 : break;
+; 1877 : }
+; 1878 : }
+; 1879 :
+; 1880 : if (err==Z_OK)
+; 1881 : return iRead;
+
+ 00283 8b c3 mov eax, ebx
+$LN1@unzReadCur:
+
+; 1882 : return err;
+; 1883 : }
+
+ 00285 5f pop edi
+ 00286 5e pop esi
+ 00287 5b pop ebx
+ 00288 8b e5 mov esp, ebp
+ 0028a 5d pop ebp
+ 0028b c2 0c 00 ret 12 ; 0000000cH
+$LN34@unzReadCur:
+
+; 1735 : return UNZ_ERRNO;
+
+ 0028e 83 c8 ff or eax, -1
+
+; 1882 : return err;
+; 1883 : }
+
+ 00291 5f pop edi
+ 00292 5e pop esi
+ 00293 5b pop ebx
+ 00294 8b e5 mov esp, ebp
+ 00296 5d pop ebp
+ 00297 c2 0c 00 ret 12 ; 0000000cH
+$LN36@unzReadCur:
+
+; 1874 : return (iRead==0) ? UNZ_EOF : iRead;
+
+ 0029a 8b c1 mov eax, ecx
+
+; 1882 : return err;
+; 1883 : }
+
+ 0029c 5f pop edi
+ 0029d 5e pop esi
+ 0029e 5b pop ebx
+ 0029f 8b e5 mov esp, ebp
+ 002a1 5d pop ebp
+ 002a2 c2 0c 00 ret 12 ; 0000000cH
+$LN38@unzReadCur:
+
+; 1769 : (pfile_in_zip_read_info->rest_read_compressed == 0))
+; 1770 : return (iRead==0) ? UNZ_EOF : iRead;
+
+ 002a5 8b 44 24 10 mov eax, DWORD PTR _iRead$1$[esp+32]
+
+; 1882 : return err;
+; 1883 : }
+
+ 002a9 5f pop edi
+ 002aa 5e pop esi
+ 002ab 5b pop ebx
+ 002ac 8b e5 mov esp, ebp
+ 002ae 5d pop ebp
+ 002af c2 0c 00 ret 12 ; 0000000cH
+_unzReadCurrentFile@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unztell@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_unztell@4 PROC ; COMDAT
+
+; 1890 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1891 : unz64_s* s;
+; 1892 : file_in_zip64_read_info_s* pfile_in_zip_read_info;
+; 1893 : if (file==NULL)
+
+ 00003 8b 45 08 mov eax, DWORD PTR _file$[ebp]
+ 00006 85 c0 test eax, eax
+ 00008 75 09 jne SHORT $LN2@unztell
+$LN5@unztell:
+
+; 1894 : return UNZ_PARAMERROR;
+
+ 0000a b8 9a ff ff ff mov eax, -102 ; ffffff9aH
+
+; 1902 : }
+
+ 0000f 5d pop ebp
+ 00010 c2 04 00 ret 4
+$LN2@unztell:
+
+; 1895 : s=(unz64_s*)file;
+; 1896 : pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ 00013 8b 80 e0 00 00
+ 00 mov eax, DWORD PTR [eax+224]
+
+; 1897 :
+; 1898 : if (pfile_in_zip_read_info==NULL)
+
+ 00019 85 c0 test eax, eax
+ 0001b 74 ed je SHORT $LN5@unztell
+
+; 1899 : return UNZ_PARAMERROR;
+; 1900 :
+; 1901 : return (z_off_t)pfile_in_zip_read_info->stream.total_out;
+
+ 0001d 8b 40 18 mov eax, DWORD PTR [eax+24]
+
+; 1902 : }
+
+ 00020 5d pop ebp
+ 00021 c2 04 00 ret 4
+_unztell@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unztell64@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_unztell64@4 PROC ; COMDAT
+
+; 1905 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1906 :
+; 1907 : unz64_s* s;
+; 1908 : file_in_zip64_read_info_s* pfile_in_zip_read_info;
+; 1909 : if (file==NULL)
+
+ 00003 8b 55 08 mov edx, DWORD PTR _file$[ebp]
+ 00006 85 d2 test edx, edx
+ 00008 75 0a jne SHORT $LN2@unztell64
+$LN5@unztell64:
+
+; 1910 : return (ZPOS64_T)-1;
+
+ 0000a 83 c8 ff or eax, -1
+ 0000d 83 ca ff or edx, -1
+
+; 1918 : }
+
+ 00010 5d pop ebp
+ 00011 c2 04 00 ret 4
+$LN2@unztell64:
+
+; 1911 : s=(unz64_s*)file;
+; 1912 : pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ 00014 8b 92 e0 00 00
+ 00 mov edx, DWORD PTR [edx+224]
+
+; 1913 :
+; 1914 : if (pfile_in_zip_read_info==NULL)
+
+ 0001a 85 d2 test edx, edx
+ 0001c 74 ec je SHORT $LN5@unztell64
+
+; 1915 : return (ZPOS64_T)-1;
+; 1916 :
+; 1917 : return pfile_in_zip_read_info->total_out_64;
+
+ 0001e 8b 42 68 mov eax, DWORD PTR [edx+104]
+ 00021 8b 52 6c mov edx, DWORD PTR [edx+108]
+
+; 1918 : }
+
+ 00024 5d pop ebp
+ 00025 c2 04 00 ret 4
+_unztell64@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzeof@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_unzeof@4 PROC ; COMDAT
+
+; 1925 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1926 : unz64_s* s;
+; 1927 : file_in_zip64_read_info_s* pfile_in_zip_read_info;
+; 1928 : if (file==NULL)
+
+ 00003 8b 4d 08 mov ecx, DWORD PTR _file$[ebp]
+ 00006 85 c9 test ecx, ecx
+ 00008 75 09 jne SHORT $LN2@unzeof
+$LN7@unzeof:
+
+; 1929 : return UNZ_PARAMERROR;
+
+ 0000a b8 9a ff ff ff mov eax, -102 ; ffffff9aH
+
+; 1940 : }
+
+ 0000f 5d pop ebp
+ 00010 c2 04 00 ret 4
+$LN2@unzeof:
+
+; 1930 : s=(unz64_s*)file;
+; 1931 : pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ 00013 8b 89 e0 00 00
+ 00 mov ecx, DWORD PTR [ecx+224]
+
+; 1932 :
+; 1933 : if (pfile_in_zip_read_info==NULL)
+
+ 00019 85 c9 test ecx, ecx
+ 0001b 74 ed je SHORT $LN7@unzeof
+
+; 1934 : return UNZ_PARAMERROR;
+; 1935 :
+; 1936 : if (pfile_in_zip_read_info->rest_read_uncompressed == 0)
+
+ 0001d 8b 81 80 00 00
+ 00 mov eax, DWORD PTR [ecx+128]
+ 00023 0b 81 84 00 00
+ 00 or eax, DWORD PTR [ecx+132]
+ 00029 75 09 jne SHORT $LN4@unzeof
+
+; 1937 : return 1;
+
+ 0002b b8 01 00 00 00 mov eax, 1
+
+; 1940 : }
+
+ 00030 5d pop ebp
+ 00031 c2 04 00 ret 4
+$LN4@unzeof:
+
+; 1938 : else
+; 1939 : return 0;
+
+ 00034 33 c0 xor eax, eax
+
+; 1940 : }
+
+ 00036 5d pop ebp
+ 00037 c2 04 00 ret 4
+_unzeof@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzGetLocalExtrafield@12
+_TEXT SEGMENT
+tv81 = -4 ; size = 4
+_file$ = 8 ; size = 4
+_buf$ = 12 ; size = 4
+_len$ = 16 ; size = 4
+_unzGetLocalExtrafield@12 PROC ; COMDAT
+
+; 1957 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 83 ec 08 sub esp, 8
+ 00009 56 push esi
+ 0000a 57 push edi
+
+; 1958 : unz64_s* s;
+; 1959 : file_in_zip64_read_info_s* pfile_in_zip_read_info;
+; 1960 : uInt read_now;
+; 1961 : ZPOS64_T size_to_read;
+; 1962 :
+; 1963 : if (file==NULL)
+
+ 0000b 8b 7d 08 mov edi, DWORD PTR _file$[ebp]
+ 0000e 85 ff test edi, edi
+ 00010 75 0d jne SHORT $LN2@unzGetLoca
+$LN13@unzGetLoca:
+
+; 1964 : return UNZ_PARAMERROR;
+
+ 00012 b8 9a ff ff ff mov eax, -102 ; ffffff9aH
+
+; 1995 : return UNZ_ERRNO;
+; 1996 :
+; 1997 : return (int)read_now;
+; 1998 : }
+
+ 00017 5f pop edi
+ 00018 5e pop esi
+ 00019 8b e5 mov esp, ebp
+ 0001b 5d pop ebp
+ 0001c c2 0c 00 ret 12 ; 0000000cH
+$LN2@unzGetLoca:
+
+; 1965 : s=(unz64_s*)file;
+; 1966 : pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ 0001f 8b bf e0 00 00
+ 00 mov edi, DWORD PTR [edi+224]
+
+; 1967 :
+; 1968 : if (pfile_in_zip_read_info==NULL)
+
+ 00025 85 ff test edi, edi
+ 00027 74 e9 je SHORT $LN13@unzGetLoca
+
+; 1969 : return UNZ_PARAMERROR;
+; 1970 :
+; 1971 : size_to_read = (pfile_in_zip_read_info->size_local_extrafield -
+
+ 00029 8b 77 58 mov esi, DWORD PTR [edi+88]
+ 0002c 33 c0 xor eax, eax
+ 0002e 8b 57 60 mov edx, DWORD PTR [edi+96]
+ 00031 2b f2 sub esi, edx
+ 00033 1b 47 64 sbb eax, DWORD PTR [edi+100]
+
+; 1972 : pfile_in_zip_read_info->pos_local_extrafield);
+; 1973 :
+; 1974 : if (buf==NULL)
+
+ 00036 83 7d 0c 00 cmp DWORD PTR _buf$[ebp], 0
+ 0003a 74 7c je SHORT $LN12@unzGetLoca
+
+; 1975 : return (int)size_to_read;
+; 1976 :
+; 1977 : if (len>size_to_read)
+
+ 0003c 8b 4d 10 mov ecx, DWORD PTR _len$[ebp]
+ 0003f c7 44 24 0c 00
+ 00 00 00 mov DWORD PTR tv81[esp+16], 0
+ 00047 39 44 24 0c cmp DWORD PTR tv81[esp+16], eax
+ 0004b 72 06 jb SHORT $LN5@unzGetLoca
+ 0004d 77 06 ja SHORT $LN6@unzGetLoca
+ 0004f 3b ce cmp ecx, esi
+ 00051 77 02 ja SHORT $LN6@unzGetLoca
+$LN5@unzGetLoca:
+
+; 1978 : read_now = (uInt)size_to_read;
+; 1979 : else
+; 1980 : read_now = (uInt)len ;
+
+ 00053 8b f1 mov esi, ecx
+$LN6@unzGetLoca:
+
+; 1981 :
+; 1982 : if (read_now==0)
+
+ 00055 85 f6 test esi, esi
+ 00057 75 0a jne SHORT $LN7@unzGetLoca
+
+; 1983 : return 0;
+
+ 00059 33 c0 xor eax, eax
+
+; 1995 : return UNZ_ERRNO;
+; 1996 :
+; 1997 : return (int)read_now;
+; 1998 : }
+
+ 0005b 5f pop edi
+ 0005c 5e pop esi
+ 0005d 8b e5 mov esp, ebp
+ 0005f 5d pop ebp
+ 00060 c2 0c 00 ret 12 ; 0000000cH
+$LN7@unzGetLoca:
+
+; 1984 :
+; 1985 : if (ZSEEK64(pfile_in_zip_read_info->z_filefunc,
+; 1986 : pfile_in_zip_read_info->filestream,
+; 1987 : pfile_in_zip_read_info->offset_local_extrafield +
+; 1988 : pfile_in_zip_read_info->pos_local_extrafield,
+; 1989 : ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 00063 8b 4f 50 mov ecx, DWORD PTR [edi+80]
+ 00066 8b 47 54 mov eax, DWORD PTR [edi+84]
+ 00069 03 ca add ecx, edx
+ 0006b 8b 97 b4 00 00
+ 00 mov edx, DWORD PTR [edi+180]
+ 00071 13 47 64 adc eax, DWORD PTR [edi+100]
+ 00074 6a 00 push 0
+ 00076 50 push eax
+ 00077 51 push ecx
+ 00078 8d 8f 88 00 00
+ 00 lea ecx, DWORD PTR [edi+136]
+ 0007e e8 00 00 00 00 call _call_zseek64
+ 00083 83 c4 0c add esp, 12 ; 0000000cH
+ 00086 85 c0 test eax, eax
+ 00088 74 0b je SHORT $LN8@unzGetLoca
+
+; 1990 : return UNZ_ERRNO;
+
+ 0008a 83 c8 ff or eax, -1
+
+; 1995 : return UNZ_ERRNO;
+; 1996 :
+; 1997 : return (int)read_now;
+; 1998 : }
+
+ 0008d 5f pop edi
+ 0008e 5e pop esi
+ 0008f 8b e5 mov esp, ebp
+ 00091 5d pop ebp
+ 00092 c2 0c 00 ret 12 ; 0000000cH
+$LN8@unzGetLoca:
+
+; 1991 :
+; 1992 : if (ZREAD64(pfile_in_zip_read_info->z_filefunc,
+; 1993 : pfile_in_zip_read_info->filestream,
+; 1994 : buf,read_now)!=read_now)
+
+ 00095 8b 87 8c 00 00
+ 00 mov eax, DWORD PTR [edi+140]
+ 0009b 56 push esi
+ 0009c ff 75 0c push DWORD PTR _buf$[ebp]
+ 0009f ff b7 b4 00 00
+ 00 push DWORD PTR [edi+180]
+ 000a5 ff b7 a4 00 00
+ 00 push DWORD PTR [edi+164]
+ 000ab ff d0 call eax
+ 000ad 83 c9 ff or ecx, -1
+ 000b0 83 c4 10 add esp, 16 ; 00000010H
+ 000b3 3b c6 cmp eax, esi
+ 000b5 0f 45 f1 cmovne esi, ecx
+$LN12@unzGetLoca:
+
+; 1995 : return UNZ_ERRNO;
+; 1996 :
+; 1997 : return (int)read_now;
+; 1998 : }
+
+ 000b8 5f pop edi
+ 000b9 8b c6 mov eax, esi
+ 000bb 5e pop esi
+ 000bc 8b e5 mov esp, ebp
+ 000be 5d pop ebp
+ 000bf c2 0c 00 ret 12 ; 0000000cH
+_unzGetLocalExtrafield@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzCloseCurrentFile@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_unzCloseCurrentFile@4 PROC ; COMDAT
+
+; 2005 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 53 push ebx
+
+; 2006 : int err=UNZ_OK;
+; 2007 :
+; 2008 : unz64_s* s;
+; 2009 : file_in_zip64_read_info_s* pfile_in_zip_read_info;
+; 2010 : if (file==NULL)
+
+ 00004 8b 5d 08 mov ebx, DWORD PTR _file$[ebp]
+ 00007 57 push edi
+ 00008 33 ff xor edi, edi
+ 0000a 85 db test ebx, ebx
+ 0000c 75 09 jne SHORT $LN2@unzCloseCu
+
+; 2011 : return UNZ_PARAMERROR;
+
+ 0000e 8d 47 9a lea eax, DWORD PTR [edi-102]
+ 00011 5f pop edi
+ 00012 5b pop ebx
+
+; 2043 : }
+
+ 00013 5d pop ebp
+ 00014 c2 04 00 ret 4
+$LN2@unzCloseCu:
+ 00017 56 push esi
+
+; 2012 : s=(unz64_s*)file;
+; 2013 : pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ 00018 8b b3 e0 00 00
+ 00 mov esi, DWORD PTR [ebx+224]
+
+; 2014 :
+; 2015 : if (pfile_in_zip_read_info==NULL)
+
+ 0001e 85 f6 test esi, esi
+ 00020 75 0a jne SHORT $LN3@unzCloseCu
+
+; 2016 : return UNZ_PARAMERROR;
+
+ 00022 8d 46 9a lea eax, DWORD PTR [esi-102]
+ 00025 5e pop esi
+ 00026 5f pop edi
+ 00027 5b pop ebx
+
+; 2043 : }
+
+ 00028 5d pop ebp
+ 00029 c2 04 00 ret 4
+$LN3@unzCloseCu:
+
+; 2017 :
+; 2018 :
+; 2019 : if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) &&
+
+ 0002c 8b 86 80 00 00
+ 00 mov eax, DWORD PTR [esi+128]
+ 00032 0b 86 84 00 00
+ 00 or eax, DWORD PTR [esi+132]
+ 00038 75 16 jne SHORT $LN5@unzCloseCu
+ 0003a 39 be c8 00 00
+ 00 cmp DWORD PTR [esi+200], edi
+ 00040 75 0e jne SHORT $LN5@unzCloseCu
+
+; 2020 : (!pfile_in_zip_read_info->raw))
+; 2021 : {
+; 2022 : if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait)
+
+ 00042 8b 46 70 mov eax, DWORD PTR [esi+112]
+ 00045 b9 97 ff ff ff mov ecx, -105 ; ffffff97H
+ 0004a 3b 46 74 cmp eax, DWORD PTR [esi+116]
+ 0004d 0f 45 f9 cmovne edi, ecx
+$LN5@unzCloseCu:
+
+; 2023 : err=UNZ_CRCERROR;
+; 2024 : }
+; 2025 :
+; 2026 :
+; 2027 : TRYFREE(pfile_in_zip_read_info->read_buffer);
+
+ 00050 8b 06 mov eax, DWORD PTR [esi]
+ 00052 85 c0 test eax, eax
+ 00054 74 0a je SHORT $LN6@unzCloseCu
+ 00056 50 push eax
+ 00057 ff 15 00 00 00
+ 00 call DWORD PTR __imp__free
+ 0005d 83 c4 04 add esp, 4
+$LN6@unzCloseCu:
+
+; 2028 : pfile_in_zip_read_info->read_buffer = NULL;
+; 2029 : if (pfile_in_zip_read_info->stream_initialised == Z_DEFLATED)
+
+ 00060 83 7e 48 08 cmp DWORD PTR [esi+72], 8
+ 00064 c7 06 00 00 00
+ 00 mov DWORD PTR [esi], 0
+ 0006a 75 09 jne SHORT $LN7@unzCloseCu
+
+; 2030 : inflateEnd(&pfile_in_zip_read_info->stream);
+
+ 0006c 8d 4e 04 lea ecx, DWORD PTR [esi+4]
+ 0006f 51 push ecx
+ 00070 e8 00 00 00 00 call _inflateEnd@4
+$LN7@unzCloseCu:
+
+; 2031 : #ifdef HAVE_BZIP2
+; 2032 : else if (pfile_in_zip_read_info->stream_initialised == Z_BZIP2ED)
+; 2033 : BZ2_bzDecompressEnd(&pfile_in_zip_read_info->bstream);
+; 2034 : #endif
+; 2035 :
+; 2036 :
+; 2037 : pfile_in_zip_read_info->stream_initialised = 0;
+; 2038 : TRYFREE(pfile_in_zip_read_info);
+
+ 00075 56 push esi
+ 00076 c7 46 48 00 00
+ 00 00 mov DWORD PTR [esi+72], 0
+ 0007d ff 15 00 00 00
+ 00 call DWORD PTR __imp__free
+ 00083 83 c4 04 add esp, 4
+
+; 2039 :
+; 2040 : s->pfile_in_zip_read=NULL;
+
+ 00086 c7 83 e0 00 00
+ 00 00 00 00 00 mov DWORD PTR [ebx+224], 0
+
+; 2041 :
+; 2042 : return err;
+
+ 00090 8b c7 mov eax, edi
+ 00092 5e pop esi
+ 00093 5f pop edi
+ 00094 5b pop ebx
+
+; 2043 : }
+
+ 00095 5d pop ebp
+ 00096 c2 04 00 ret 4
+_unzCloseCurrentFile@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\unzip.c
+; COMDAT _unzGetGlobalComment@12
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_szComment$ = 12 ; size = 4
+_uSizeBuf$ = 16 ; size = 4
+_unzGetGlobalComment@12 PROC ; COMDAT
+
+; 2052 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 2053 : unz64_s* s;
+; 2054 : uLong uReadThis ;
+; 2055 : if (file==NULL)
+
+ 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 00007 85 f6 test esi, esi
+ 00009 75 08 jne SHORT $LN2@unzGetGlob
+
+; 2056 : return (int)UNZ_PARAMERROR;
+
+ 0000b 8d 46 9a lea eax, DWORD PTR [esi-102]
+ 0000e 5e pop esi
+
+; 2076 : }
+
+ 0000f 5d pop ebp
+ 00010 c2 0c 00 ret 12 ; 0000000cH
+$LN2@unzGetGlob:
+
+; 2057 : s=(unz64_s*)file;
+; 2058 :
+; 2059 : uReadThis = uSizeBuf;
+
+ 00013 8b 4d 10 mov ecx, DWORD PTR _uSizeBuf$[ebp]
+
+; 2060 : if (uReadThis>s->gi.size_comment)
+
+ 00016 3b 4e 40 cmp ecx, DWORD PTR [esi+64]
+
+; 2061 : uReadThis = s->gi.size_comment;
+; 2062 :
+; 2063 : if (ZSEEK64(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 00019 8b 46 6c mov eax, DWORD PTR [esi+108]
+ 0001c 8b 56 30 mov edx, DWORD PTR [esi+48]
+ 0001f 53 push ebx
+ 00020 8b d9 mov ebx, ecx
+ 00022 8b 4e 68 mov ecx, DWORD PTR [esi+104]
+ 00025 0f 47 5e 40 cmova ebx, DWORD PTR [esi+64]
+ 00029 83 c1 16 add ecx, 22 ; 00000016H
+ 0002c 6a 00 push 0
+ 0002e 83 d0 00 adc eax, 0
+ 00031 50 push eax
+ 00032 51 push ecx
+ 00033 8b ce mov ecx, esi
+ 00035 e8 00 00 00 00 call _call_zseek64
+ 0003a 83 c4 0c add esp, 12 ; 0000000cH
+ 0003d 85 c0 test eax, eax
+ 0003f 74 09 je SHORT $LN4@unzGetGlob
+
+; 2064 : return UNZ_ERRNO;
+
+ 00041 5b pop ebx
+ 00042 83 c8 ff or eax, -1
+ 00045 5e pop esi
+
+; 2076 : }
+
+ 00046 5d pop ebp
+ 00047 c2 0c 00 ret 12 ; 0000000cH
+$LN4@unzGetGlob:
+ 0004a 57 push edi
+
+; 2065 :
+; 2066 : if (uReadThis>0)
+
+ 0004b 8b 7d 0c mov edi, DWORD PTR _szComment$[ebp]
+ 0004e 85 db test ebx, ebx
+ 00050 74 21 je SHORT $LN6@unzGetGlob
+
+; 2067 : {
+; 2068 : *szComment='\0';
+; 2069 : if (ZREAD64(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis)
+
+ 00052 53 push ebx
+ 00053 c6 07 00 mov BYTE PTR [edi], 0
+ 00056 8b 46 04 mov eax, DWORD PTR [esi+4]
+ 00059 57 push edi
+ 0005a ff 76 30 push DWORD PTR [esi+48]
+ 0005d ff 76 1c push DWORD PTR [esi+28]
+ 00060 ff d0 call eax
+ 00062 83 c4 10 add esp, 16 ; 00000010H
+ 00065 3b c3 cmp eax, ebx
+ 00067 74 0a je SHORT $LN6@unzGetGlob
+
+; 2070 : return UNZ_ERRNO;
+
+ 00069 5f pop edi
+ 0006a 5b pop ebx
+ 0006b 83 c8 ff or eax, -1
+ 0006e 5e pop esi
+
+; 2076 : }
+
+ 0006f 5d pop ebp
+ 00070 c2 0c 00 ret 12 ; 0000000cH
+$LN6@unzGetGlob:
+
+; 2071 : }
+; 2072 :
+; 2073 : if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment))
+
+ 00073 85 ff test edi, edi
+ 00075 74 0c je SHORT $LN7@unzGetGlob
+ 00077 8b 46 40 mov eax, DWORD PTR [esi+64]
+ 0007a 39 45 10 cmp DWORD PTR _uSizeBuf$[ebp], eax
+ 0007d 76 04 jbe SHORT $LN7@unzGetGlob
+
+; 2074 : *(szComment+s->gi.size_comment)='\0';
+
+ 0007f c6 04 38 00 mov BYTE PTR [eax+edi], 0
+$LN7@unzGetGlob:
+ 00083 5f pop edi
+
+; 2075 : return (int)uReadThis;
+
+ 00084 8b c3 mov eax, ebx
+ 00086 5b pop ebx
+ 00087 5e pop esi
+
+; 2076 : }
+
+ 00088 5d pop ebp
+ 00089 c2 0c 00 ret 12 ; 0000000cH
+_unzGetGlobalComment@12 ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/unzip.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/unzip.obj
new file mode 100644
index 0000000000..43f344f7af
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/unzip.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zip.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zip.cod
new file mode 100644
index 0000000000..6e5780d7b4
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zip.cod
@@ -0,0 +1,7727 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+PUBLIC ??_C@_01JOAMLHOP@?9?$AA@ ; `string'
+EXTRN __imp___time64:PROC
+EXTRN __imp__rand:PROC
+EXTRN __imp__srand:PROC
+?calls@?1??crypthead@@9@9 DD 01H DUP (?) ; `crypthead'::`2'::calls
+_BSS ENDS
+; COMDAT ??_C@_01JOAMLHOP@?9?$AA@
+CONST SEGMENT
+??_C@_01JOAMLHOP@?9?$AA@ DB '-', 00H ; `string'
+PUBLIC _zipClose@8
+PUBLIC _Write_GlobalComment
+PUBLIC _Write_EndOfCentralDirectoryRecord
+PUBLIC _Write_Zip64EndOfCentralDirectoryRecord
+PUBLIC _Write_Zip64EndOfCentralDirectoryLocator
+PUBLIC _zipCloseFileInZip@4
+PUBLIC _zipCloseFileInZipRaw64@16
+PUBLIC _zipCloseFileInZipRaw@12
+PUBLIC _zipWriteInFileInZip@12
+PUBLIC _zipOpenNewFileInZip@40
+PUBLIC _zipOpenNewFileInZip64@44
+PUBLIC _zipOpenNewFileInZip2_64@48
+PUBLIC _zipOpenNewFileInZip2@44
+PUBLIC _zipOpenNewFileInZip3_64@68
+PUBLIC _zipOpenNewFileInZip3@64
+PUBLIC _zipOpenNewFileInZip4_64@76
+PUBLIC _Write_LocalFileHeader
+PUBLIC _zipOpen64@8
+PUBLIC _zipOpen@8
+PUBLIC _zipOpen2_64@16
+PUBLIC _zipOpen2@16
+PUBLIC _zipOpen3@16
+PUBLIC _LoadCentralDirectoryRecord
+; Function compile flags: /Ogtp
+; File c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\time.h
+; COMDAT _time
+_TEXT SEGMENT
+_time PROC ; COMDAT
+; __Time$dead$ = ecx
+
+; 535 : return _time64(_Time);
+
+ 00000 6a 00 push 0
+ 00002 ff 15 00 00 00
+ 00 call DWORD PTR __imp___time64
+ 00008 83 c4 04 add esp, 4
+
+; 536 : }
+
+ 0000b c3 ret 0
+_time ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\crypt.h
+; COMDAT _decrypt_byte
+_TEXT SEGMENT
+_decrypt_byte PROC ; COMDAT
+; _pkeys$ = ecx
+; _pcrc_32_tab$dead$ = edx
+
+; 37 : unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an
+; 38 : * unpredictable manner on 16-bit systems; not a problem
+; 39 : * with any known compiler so far, though */
+; 40 :
+; 41 : temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2;
+
+ 00000 8b 49 08 mov ecx, DWORD PTR [ecx+8]
+ 00003 81 e1 fd ff 00
+ 00 and ecx, 65533 ; 0000fffdH
+ 00009 83 c9 02 or ecx, 2
+
+; 42 : return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);
+
+ 0000c 8b c1 mov eax, ecx
+ 0000e 83 f0 01 xor eax, 1
+ 00011 0f af c1 imul eax, ecx
+ 00014 c1 e8 08 shr eax, 8
+ 00017 0f b6 c0 movzx eax, al
+
+; 43 : }
+
+ 0001a c3 ret 0
+_decrypt_byte ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\crypt.h
+; COMDAT _update_keys
+_TEXT SEGMENT
+_pkeys$1$ = -4 ; size = 4
+_c$ = 8 ; size = 4
+_update_keys PROC ; COMDAT
+; _pkeys$ = ecx
+; _pcrc_32_tab$ = edx
+
+; 49 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 53 push ebx
+ 00005 56 push esi
+
+; 50 : (*(pkeys+0)) = CRC32((*(pkeys+0)), c);
+
+ 00006 8b 31 mov esi, DWORD PTR [ecx]
+ 00008 8b da mov ebx, edx
+
+; 51 : (*(pkeys+1)) += (*(pkeys+0)) & 0xff;
+; 52 : (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1;
+; 53 : {
+; 54 : register int keyshift = (int)((*(pkeys+1)) >> 24);
+; 55 : (*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift);
+
+ 0000a 8b 51 08 mov edx, DWORD PTR [ecx+8]
+ 0000d 8b c6 mov eax, esi
+ 0000f 33 45 08 xor eax, DWORD PTR _c$[ebp]
+ 00012 0f b6 c0 movzx eax, al
+ 00015 c1 ee 08 shr esi, 8
+ 00018 89 4d fc mov DWORD PTR _pkeys$1$[ebp], ecx
+ 0001b 8b 04 83 mov eax, DWORD PTR [ebx+eax*4]
+ 0001e 33 c6 xor eax, esi
+ 00020 89 01 mov DWORD PTR [ecx], eax
+ 00022 0f b6 c0 movzx eax, al
+ 00025 03 41 04 add eax, DWORD PTR [ecx+4]
+ 00028 69 c0 05 84 08
+ 08 imul eax, eax, 134775813
+ 0002e 5e pop esi
+ 0002f 40 inc eax
+ 00030 89 41 04 mov DWORD PTR [ecx+4], eax
+ 00033 c1 e8 18 shr eax, 24 ; 00000018H
+ 00036 33 c2 xor eax, edx
+ 00038 c1 ea 08 shr edx, 8
+ 0003b 0f b6 c8 movzx ecx, al
+ 0003e 8b 45 fc mov eax, DWORD PTR _pkeys$1$[ebp]
+ 00041 33 14 8b xor edx, DWORD PTR [ebx+ecx*4]
+ 00044 89 50 08 mov DWORD PTR [eax+8], edx
+
+; 56 : }
+; 57 : return c;
+
+ 00047 8b 45 08 mov eax, DWORD PTR _c$[ebp]
+ 0004a 5b pop ebx
+
+; 58 : }
+
+ 0004b 8b e5 mov esp, ebp
+ 0004d 5d pop ebp
+ 0004e c3 ret 0
+_update_keys ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\crypt.h
+; COMDAT _init_keys
+_TEXT SEGMENT
+_pcrc_32_tab$ = 8 ; size = 4
+_init_keys PROC ; COMDAT
+; _passwd$ = ecx
+; _pkeys$ = edx
+
+; 66 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+ 00004 57 push edi
+ 00005 8b fa mov edi, edx
+ 00007 8b f1 mov esi, ecx
+
+; 67 : *(pkeys+0) = 305419896L;
+
+ 00009 c7 07 78 56 34
+ 12 mov DWORD PTR [edi], 305419896 ; 12345678H
+
+; 68 : *(pkeys+1) = 591751049L;
+
+ 0000f c7 47 04 89 67
+ 45 23 mov DWORD PTR [edi+4], 591751049 ; 23456789H
+
+; 69 : *(pkeys+2) = 878082192L;
+
+ 00016 c7 47 08 90 78
+ 56 34 mov DWORD PTR [edi+8], 878082192 ; 34567890H
+
+; 70 : while (*passwd != '\0') {
+
+ 0001d 8a 06 mov al, BYTE PTR [esi]
+ 0001f 84 c0 test al, al
+ 00021 74 1f je SHORT $LN3@init_keys
+ 00023 53 push ebx
+ 00024 8b 5d 08 mov ebx, DWORD PTR _pcrc_32_tab$[ebp]
+$LL2@init_keys:
+
+; 71 : update_keys(pkeys,pcrc_32_tab,(int)*passwd);
+
+ 00027 0f be c0 movsx eax, al
+ 0002a 8b d3 mov edx, ebx
+ 0002c 50 push eax
+ 0002d 8b cf mov ecx, edi
+ 0002f e8 00 00 00 00 call _update_keys
+ 00034 8a 46 01 mov al, BYTE PTR [esi+1]
+
+; 72 : passwd++;
+
+ 00037 8d 76 01 lea esi, DWORD PTR [esi+1]
+ 0003a 83 c4 04 add esp, 4
+ 0003d 84 c0 test al, al
+ 0003f 75 e6 jne SHORT $LL2@init_keys
+ 00041 5b pop ebx
+$LN3@init_keys:
+ 00042 5f pop edi
+ 00043 5e pop esi
+
+; 73 : }
+; 74 : }
+
+ 00044 5d pop ebp
+ 00045 c3 ret 0
+_init_keys ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\crypt.h
+; File c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\time.h
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\crypt.h
+; COMDAT _crypthead
+_TEXT SEGMENT
+_header$ = -28 ; size = 10
+tv254 = -16 ; size = 4
+_t$3$ = -16 ; size = 4
+_passwd$1$ = -16 ; size = 4
+_c$1$ = -12 ; size = 4
+_buf$1$ = -8 ; size = 4
+tv247 = -1 ; size = 1
+_bufSize$dead$ = 8 ; size = 4
+_pkeys$ = 12 ; size = 4
+_pcrc_32_tab$ = 16 ; size = 4
+_crcForCrypting$ = 20 ; size = 4
+_crypthead PROC ; COMDAT
+; _passwd$ = ecx
+; _buf$ = edx
+
+; 96 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 1c sub esp, 28 ; 0000001cH
+
+; 97 : int n; /* index in random header */
+; 98 : int t; /* temporary */
+; 99 : int c; /* random byte */
+; 100 : unsigned char header[RAND_HEAD_LEN-2]; /* random header */
+; 101 : static unsigned calls = 0; /* ensure different random header each time */
+; 102 :
+; 103 : if (bufSize<RAND_HEAD_LEN)
+; 104 : return 0;
+; 105 :
+; 106 : /* First generate RAND_HEAD_LEN-2 random bytes. We encrypt the
+; 107 : * output of rand() to get less predictability, since rand() is
+; 108 : * often poorly implemented.
+; 109 : */
+; 110 : if (++calls == 1)
+
+ 00006 a1 00 00 00 00 mov eax, DWORD PTR ?calls@?1??crypthead@@9@9
+ 0000b 53 push ebx
+ 0000c 40 inc eax
+ 0000d 89 55 f8 mov DWORD PTR _buf$1$[ebp], edx
+ 00010 a3 00 00 00 00 mov DWORD PTR ?calls@?1??crypthead@@9@9, eax
+ 00015 8b d9 mov ebx, ecx
+ 00017 89 5d f0 mov DWORD PTR _passwd$1$[ebp], ebx
+ 0001a 56 push esi
+ 0001b 57 push edi
+ 0001c 83 f8 01 cmp eax, 1
+ 0001f 75 17 jne SHORT $LN9@crypthead
+; File c:\program files (x86)\windows kits\10\include\10.0.10240.0\ucrt\time.h
+
+; 535 : return _time64(_Time);
+
+ 00021 6a 00 push 0
+ 00023 ff 15 00 00 00
+ 00 call DWORD PTR __imp___time64
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\crypt.h
+
+; 112 : srand((unsigned)(time(NULL) ^ ZCR_SEED2));
+
+ 00029 35 4e e6 40 bb xor eax, -1153374642 ; bb40e64eH
+ 0002e 50 push eax
+ 0002f ff 15 00 00 00
+ 00 call DWORD PTR __imp__srand
+ 00035 83 c4 08 add esp, 8
+$LN9@crypthead:
+
+; 113 : }
+; 114 : init_keys(passwd, pkeys, pcrc_32_tab);
+
+ 00038 ff 75 10 push DWORD PTR _pcrc_32_tab$[ebp]
+ 0003b 8b 7d 0c mov edi, DWORD PTR _pkeys$[ebp]
+ 0003e 8b cb mov ecx, ebx
+ 00040 8b d7 mov edx, edi
+ 00042 e8 00 00 00 00 call _init_keys
+ 00047 83 c4 04 add esp, 4
+
+; 115 : for (n = 0; n < RAND_HEAD_LEN-2; n++)
+
+ 0004a 33 f6 xor esi, esi
+ 0004c 0f 1f 40 00 npad 4
+$LL4@crypthead:
+
+; 116 : {
+; 117 : c = (rand() >> 7) & 0xff;
+
+ 00050 ff 15 00 00 00
+ 00 call DWORD PTR __imp__rand
+ 00056 c1 f8 07 sar eax, 7
+
+; 118 : header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t);
+
+ 00059 8b cf mov ecx, edi
+ 0005b 0f b6 d0 movzx edx, al
+ 0005e 89 55 f4 mov DWORD PTR _c$1$[ebp], edx
+ 00061 e8 00 00 00 00 call _decrypt_byte
+ 00066 52 push edx
+ 00067 8b 55 10 mov edx, DWORD PTR _pcrc_32_tab$[ebp]
+ 0006a 8b cf mov ecx, edi
+ 0006c 8b d8 mov ebx, eax
+ 0006e e8 00 00 00 00 call _update_keys
+ 00073 8b 45 f4 mov eax, DWORD PTR _c$1$[ebp]
+ 00076 83 c4 04 add esp, 4
+ 00079 32 c3 xor al, bl
+ 0007b 88 44 35 e4 mov BYTE PTR _header$[ebp+esi], al
+ 0007f 46 inc esi
+ 00080 83 fe 0a cmp esi, 10 ; 0000000aH
+ 00083 7c cb jl SHORT $LL4@crypthead
+
+; 119 : }
+; 120 : /* Encrypt random header (last two bytes is high word of crc) */
+; 121 : init_keys(passwd, pkeys, pcrc_32_tab);
+
+ 00085 ff 75 10 push DWORD PTR _pcrc_32_tab$[ebp]
+ 00088 8b 4d f0 mov ecx, DWORD PTR _passwd$1$[ebp]
+ 0008b 8b d7 mov edx, edi
+ 0008d e8 00 00 00 00 call _init_keys
+
+; 122 : for (n = 0; n < RAND_HEAD_LEN-2; n++)
+
+ 00092 8b 45 f8 mov eax, DWORD PTR _buf$1$[ebp]
+ 00095 8d 4d e4 lea ecx, DWORD PTR _header$[ebp]
+ 00098 83 c4 04 add esp, 4
+ 0009b 33 f6 xor esi, esi
+ 0009d 2b c1 sub eax, ecx
+ 0009f 89 45 f0 mov DWORD PTR tv254[ebp], eax
+$LL7@crypthead:
+
+; 123 : {
+; 124 : buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t);
+
+ 000a2 8b cf mov ecx, edi
+ 000a4 e8 00 00 00 00 call _decrypt_byte
+ 000a9 0f b6 4c 35 e4 movzx ecx, BYTE PTR _header$[ebp+esi]
+ 000ae 8b d8 mov ebx, eax
+ 000b0 8b 55 10 mov edx, DWORD PTR _pcrc_32_tab$[ebp]
+ 000b3 51 push ecx
+ 000b4 8b cf mov ecx, edi
+ 000b6 e8 00 00 00 00 call _update_keys
+ 000bb 8b 45 f0 mov eax, DWORD PTR tv254[ebp]
+ 000be 83 c4 04 add esp, 4
+ 000c1 8a 4c 35 e4 mov cl, BYTE PTR _header$[ebp+esi]
+ 000c5 03 c6 add eax, esi
+ 000c7 32 cb xor cl, bl
+ 000c9 46 inc esi
+ 000ca 88 4c 05 e4 mov BYTE PTR _header$[ebp+eax], cl
+ 000ce 83 fe 0a cmp esi, 10 ; 0000000aH
+ 000d1 7c cf jl SHORT $LL7@crypthead
+
+; 125 : }
+; 126 : buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t);
+
+ 000d3 8b cf mov ecx, edi
+ 000d5 e8 00 00 00 00 call _decrypt_byte
+ 000da 8b 7d 14 mov edi, DWORD PTR _crcForCrypting$[ebp]
+ 000dd 8b df mov ebx, edi
+ 000df 8b 55 10 mov edx, DWORD PTR _pcrc_32_tab$[ebp]
+ 000e2 c1 eb 10 shr ebx, 16 ; 00000010H
+ 000e5 0f b6 cb movzx ecx, bl
+ 000e8 51 push ecx
+ 000e9 8b 4d 0c mov ecx, DWORD PTR _pkeys$[ebp]
+ 000ec 89 45 f0 mov DWORD PTR _t$3$[ebp], eax
+ 000ef e8 00 00 00 00 call _update_keys
+ 000f4 8b 45 f8 mov eax, DWORD PTR _buf$1$[ebp]
+ 000f7 32 5d f0 xor bl, BYTE PTR _t$3$[ebp]
+
+; 127 : buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t);
+
+ 000fa 8b 4d 0c mov ecx, DWORD PTR _pkeys$[ebp]
+ 000fd 88 1c 06 mov BYTE PTR [esi+eax], bl
+ 00100 e8 00 00 00 00 call _decrypt_byte
+ 00105 8b 55 10 mov edx, DWORD PTR _pcrc_32_tab$[ebp]
+ 00108 8b d8 mov ebx, eax
+ 0010a 8b 4d 0c mov ecx, DWORD PTR _pkeys$[ebp]
+ 0010d c1 ef 18 shr edi, 24 ; 00000018H
+ 00110 57 push edi
+ 00111 e8 00 00 00 00 call _update_keys
+ 00116 8b 4d f8 mov ecx, DWORD PTR _buf$1$[ebp]
+ 00119 83 c4 08 add esp, 8
+ 0011c 8b c7 mov eax, edi
+ 0011e 32 c3 xor al, bl
+ 00120 88 44 0e 01 mov BYTE PTR [esi+ecx+1], al
+ 00124 8d 46 02 lea eax, DWORD PTR [esi+2]
+ 00127 5f pop edi
+ 00128 5e pop esi
+ 00129 5b pop ebx
+
+; 128 : return n;
+; 129 : }
+
+ 0012a 8b e5 mov esp, ebp
+ 0012c 5d pop ebp
+ 0012d c3 ret 0
+_crypthead ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _allocate_new_datablock
+_TEXT SEGMENT
+_allocate_new_datablock PROC ; COMDAT
+
+; 191 : linkedlist_datablock_internal* ldi;
+; 192 : ldi = (linkedlist_datablock_internal*)
+
+ 00000 68 00 10 00 00 push 4096 ; 00001000H
+ 00005 ff 15 00 00 00
+ 00 call DWORD PTR __imp__malloc
+ 0000b 83 c4 04 add esp, 4
+
+; 193 : ALLOC(sizeof(linkedlist_datablock_internal));
+; 194 : if (ldi!=NULL)
+
+ 0000e 85 c0 test eax, eax
+ 00010 74 14 je SHORT $LN2@allocate_n
+
+; 195 : {
+; 196 : ldi->next_datablock = NULL ;
+
+ 00012 c7 00 00 00 00
+ 00 mov DWORD PTR [eax], 0
+
+; 197 : ldi->filled_in_this_block = 0 ;
+
+ 00018 c7 40 08 00 00
+ 00 00 mov DWORD PTR [eax+8], 0
+
+; 198 : ldi->avail_in_this_block = SIZEDATA_INDATABLOCK ;
+
+ 0001f c7 40 04 f0 0f
+ 00 00 mov DWORD PTR [eax+4], 4080 ; 00000ff0H
+$LN2@allocate_n:
+
+; 199 : }
+; 200 : return ldi;
+; 201 : }
+
+ 00026 c3 ret 0
+_allocate_new_datablock ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _free_datablock
+_TEXT SEGMENT
+_free_datablock PROC ; COMDAT
+; _ldi$ = ecx
+
+; 205 : while (ldi!=NULL)
+
+ 00000 85 c9 test ecx, ecx
+ 00002 74 1c je SHORT $LN3@free_datab
+ 00004 56 push esi
+ 00005 57 push edi
+ 00006 8b 3d 00 00 00
+ 00 mov edi, DWORD PTR __imp__free
+ 0000c 0f 1f 40 00 npad 4
+$LL2@free_datab:
+
+; 206 : {
+; 207 : linkedlist_datablock_internal* ldinext = ldi->next_datablock;
+
+ 00010 8b 31 mov esi, DWORD PTR [ecx]
+
+; 208 : TRYFREE(ldi);
+
+ 00012 51 push ecx
+ 00013 ff d7 call edi
+ 00015 83 c4 04 add esp, 4
+
+; 209 : ldi = ldinext;
+
+ 00018 8b ce mov ecx, esi
+ 0001a 85 f6 test esi, esi
+ 0001c 75 f2 jne SHORT $LL2@free_datab
+ 0001e 5f pop edi
+ 0001f 5e pop esi
+$LN3@free_datab:
+
+; 210 : }
+; 211 : }
+
+ 00020 c3 ret 0
+_free_datablock ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _init_linkedlist
+_TEXT SEGMENT
+_init_linkedlist PROC ; COMDAT
+; _ll$ = ecx
+
+; 215 : ll->first_block = ll->last_block = NULL;
+
+ 00000 c7 41 04 00 00
+ 00 00 mov DWORD PTR [ecx+4], 0
+ 00007 c7 01 00 00 00
+ 00 mov DWORD PTR [ecx], 0
+
+; 216 : }
+
+ 0000d c3 ret 0
+_init_linkedlist ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _free_linkedlist
+_TEXT SEGMENT
+_free_linkedlist PROC ; COMDAT
+; _ll$ = ecx
+
+; 219 : {
+
+ 00000 56 push esi
+ 00001 8b f1 mov esi, ecx
+
+; 220 : free_datablock(ll->first_block);
+
+ 00003 8b 0e mov ecx, DWORD PTR [esi]
+ 00005 e8 00 00 00 00 call _free_datablock
+
+; 221 : ll->first_block = ll->last_block = NULL;
+
+ 0000a c7 46 04 00 00
+ 00 00 mov DWORD PTR [esi+4], 0
+ 00011 c7 06 00 00 00
+ 00 mov DWORD PTR [esi], 0
+ 00017 5e pop esi
+
+; 222 : }
+
+ 00018 c3 ret 0
+_free_linkedlist ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _add_data_in_datablock
+_TEXT SEGMENT
+_ll$1$ = -8 ; size = 4
+_from_copy$1$ = -4 ; size = 4
+_len$ = 8 ; size = 4
+_add_data_in_datablock PROC ; COMDAT
+; _ll$ = ecx
+; _buf$ = edx
+
+; 226 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 08 sub esp, 8
+ 00006 57 push edi
+ 00007 8b f9 mov edi, ecx
+ 00009 89 55 fc mov DWORD PTR _from_copy$1$[ebp], edx
+ 0000c 89 7d f8 mov DWORD PTR _ll$1$[ebp], edi
+
+; 227 : linkedlist_datablock_internal* ldi;
+; 228 : const unsigned char* from_copy;
+; 229 :
+; 230 : if (ll==NULL)
+
+ 0000f 85 ff test edi, edi
+ 00011 75 0a jne SHORT $LN7@add_data_i
+$LN29@add_data_i:
+
+; 231 : return ZIP_INTERNALERROR;
+
+ 00013 b8 98 ff ff ff mov eax, -104 ; ffffff98H
+ 00018 5f pop edi
+
+; 274 : }
+
+ 00019 8b e5 mov esp, ebp
+ 0001b 5d pop ebp
+ 0001c c3 ret 0
+$LN7@add_data_i:
+
+; 232 :
+; 233 : if (ll->last_block == NULL)
+
+ 0001d 83 7f 04 00 cmp DWORD PTR [edi+4], 0
+ 00021 75 0e jne SHORT $LN9@add_data_i
+
+; 234 : {
+; 235 : ll->first_block = ll->last_block = allocate_new_datablock();
+
+ 00023 e8 00 00 00 00 call _allocate_new_datablock
+ 00028 89 47 04 mov DWORD PTR [edi+4], eax
+ 0002b 89 07 mov DWORD PTR [edi], eax
+
+; 236 : if (ll->first_block == NULL)
+
+ 0002d 85 c0 test eax, eax
+ 0002f 74 e2 je SHORT $LN29@add_data_i
+$LN9@add_data_i:
+ 00031 53 push ebx
+
+; 237 : return ZIP_INTERNALERROR;
+; 238 : }
+; 239 :
+; 240 : ldi = ll->last_block;
+; 241 : from_copy = (unsigned char*)buf;
+; 242 :
+; 243 : while (len>0)
+
+ 00032 8b 5d 08 mov ebx, DWORD PTR _len$[ebp]
+ 00035 56 push esi
+ 00036 8b 77 04 mov esi, DWORD PTR [edi+4]
+ 00039 85 db test ebx, ebx
+ 0003b 74 59 je SHORT $LN26@add_data_i
+ 0003d 0f 1f 00 npad 3
+$LL2@add_data_i:
+
+; 244 : {
+; 245 : uInt copy_this;
+; 246 : uInt i;
+; 247 : unsigned char* to_copy;
+; 248 :
+; 249 : if (ldi->avail_in_this_block==0)
+
+ 00040 83 7e 04 00 cmp DWORD PTR [esi+4], 0
+ 00044 75 10 jne SHORT $LN10@add_data_i
+
+; 250 : {
+; 251 : ldi->next_datablock = allocate_new_datablock();
+
+ 00046 e8 00 00 00 00 call _allocate_new_datablock
+ 0004b 89 06 mov DWORD PTR [esi], eax
+
+; 252 : if (ldi->next_datablock == NULL)
+
+ 0004d 85 c0 test eax, eax
+ 0004f 74 4e je SHORT $LN17@add_data_i
+
+; 254 : ldi = ldi->next_datablock ;
+
+ 00051 8b f0 mov esi, eax
+
+; 255 : ll->last_block = ldi;
+
+ 00053 89 77 04 mov DWORD PTR [edi+4], esi
+$LN10@add_data_i:
+
+; 256 : }
+; 257 :
+; 258 : if (ldi->avail_in_this_block < len)
+
+ 00056 39 5e 04 cmp DWORD PTR [esi+4], ebx
+ 00059 8b d3 mov edx, ebx
+
+; 259 : copy_this = (uInt)ldi->avail_in_this_block;
+; 260 : else
+; 261 : copy_this = (uInt)len;
+; 262 :
+; 263 : to_copy = &(ldi->data[ldi->filled_in_this_block]);
+
+ 0005b 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 0005e 0f 42 56 04 cmovb edx, DWORD PTR [esi+4]
+ 00062 83 c0 10 add eax, 16 ; 00000010H
+ 00065 03 c6 add eax, esi
+
+; 264 :
+; 265 : for (i=0;i<copy_this;i++)
+
+ 00067 85 d2 test edx, edx
+ 00069 74 1b je SHORT $LN5@add_data_i
+ 0006b 8b 5d fc mov ebx, DWORD PTR _from_copy$1$[ebp]
+ 0006e 8b fa mov edi, edx
+ 00070 2b d8 sub ebx, eax
+$LL20@add_data_i:
+
+; 266 : *(to_copy+i)=*(from_copy+i);
+
+ 00072 8a 0c 03 mov cl, BYTE PTR [ebx+eax]
+ 00075 8d 40 01 lea eax, DWORD PTR [eax+1]
+ 00078 88 48 ff mov BYTE PTR [eax-1], cl
+ 0007b 83 ef 01 sub edi, 1
+ 0007e 75 f2 jne SHORT $LL20@add_data_i
+ 00080 8b 5d 08 mov ebx, DWORD PTR _len$[ebp]
+ 00083 8b 7d f8 mov edi, DWORD PTR _ll$1$[ebp]
+$LN5@add_data_i:
+
+; 267 :
+; 268 : ldi->filled_in_this_block += copy_this;
+
+ 00086 01 56 08 add DWORD PTR [esi+8], edx
+
+; 269 : ldi->avail_in_this_block -= copy_this;
+
+ 00089 29 56 04 sub DWORD PTR [esi+4], edx
+
+; 270 : from_copy += copy_this ;
+
+ 0008c 01 55 fc add DWORD PTR _from_copy$1$[ebp], edx
+
+; 271 : len -= copy_this;
+
+ 0008f 2b da sub ebx, edx
+ 00091 89 5d 08 mov DWORD PTR _len$[ebp], ebx
+ 00094 75 aa jne SHORT $LL2@add_data_i
+$LN26@add_data_i:
+ 00096 5e pop esi
+ 00097 5b pop ebx
+
+; 272 : }
+; 273 : return ZIP_OK;
+
+ 00098 33 c0 xor eax, eax
+ 0009a 5f pop edi
+
+; 274 : }
+
+ 0009b 8b e5 mov esp, ebp
+ 0009d 5d pop ebp
+ 0009e c3 ret 0
+$LN17@add_data_i:
+ 0009f 5e pop esi
+ 000a0 5b pop ebx
+
+; 253 : return ZIP_INTERNALERROR;
+
+ 000a1 b8 98 ff ff ff mov eax, -104 ; ffffff98H
+ 000a6 5f pop edi
+
+; 274 : }
+
+ 000a7 8b e5 mov esp, ebp
+ 000a9 5d pop ebp
+ 000aa c3 ret 0
+_add_data_in_datablock ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zip64local_putValue
+_TEXT SEGMENT
+_filestream$1$ = -8 ; size = 4
+_pzlib_filefunc_def$1$ = -4 ; size = 4
+_buf$ = 8 ; size = 8
+_x$ = 8 ; size = 8
+_nbByte$ = 16 ; size = 4
+_zip64local_putValue PROC ; COMDAT
+; _pzlib_filefunc_def$ = ecx
+; _filestream$ = edx
+
+; 288 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 08 sub esp, 8
+
+; 289 : unsigned char buf[8];
+; 290 : int n;
+; 291 : for (n = 0; n < nbByte; n++)
+
+ 00006 8b 45 0c mov eax, DWORD PTR _x$[ebp+4]
+ 00009 53 push ebx
+ 0000a 8b 5d 10 mov ebx, DWORD PTR _nbByte$[ebp]
+ 0000d 56 push esi
+ 0000e 89 55 f8 mov DWORD PTR _filestream$1$[ebp], edx
+ 00011 33 f6 xor esi, esi
+ 00013 8b d1 mov edx, ecx
+ 00015 8b 4d 08 mov ecx, DWORD PTR _x$[ebp]
+ 00018 89 55 fc mov DWORD PTR _pzlib_filefunc_def$1$[ebp], edx
+ 0001b 85 db test ebx, ebx
+ 0001d 7e 11 jle SHORT $LN3@zip64local
+ 0001f 90 npad 1
+$LL16@zip64local:
+
+; 292 : {
+; 293 : buf[n] = (unsigned char)(x & 0xff);
+
+ 00020 88 4c 35 08 mov BYTE PTR _buf$[ebp+esi], cl
+ 00024 46 inc esi
+
+; 294 : x >>= 8;
+
+ 00025 0f ac c1 08 shrd ecx, eax, 8
+ 00029 c1 e8 08 shr eax, 8
+ 0002c 3b f3 cmp esi, ebx
+ 0002e 7c f0 jl SHORT $LL16@zip64local
+$LN3@zip64local:
+
+; 295 : }
+; 296 : if (x != 0)
+
+ 00030 0b c8 or ecx, eax
+ 00032 74 1f je SHORT $LN6@zip64local
+
+; 297 : { /* data overflow - hack for ZIP64 (X Roche) */
+; 298 : for (n = 0; n < nbByte; n++)
+
+ 00034 85 db test ebx, ebx
+ 00036 7e 1b jle SHORT $LN6@zip64local
+
+; 299 : {
+; 300 : buf[n] = 0xff;
+
+ 00038 57 push edi
+ 00039 8b cb mov ecx, ebx
+ 0003b 8d 7d 08 lea edi, DWORD PTR _buf$[ebp]
+ 0003e 8b d1 mov edx, ecx
+ 00040 83 c8 ff or eax, -1
+ 00043 c1 e9 02 shr ecx, 2
+ 00046 f3 ab rep stosd
+ 00048 8b ca mov ecx, edx
+ 0004a 8b 55 fc mov edx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 0004d 83 e1 03 and ecx, 3
+ 00050 f3 aa rep stosb
+ 00052 5f pop edi
+$LN6@zip64local:
+
+; 301 : }
+; 302 : }
+; 303 :
+; 304 : if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte)
+
+ 00053 53 push ebx
+ 00054 8d 45 08 lea eax, DWORD PTR _buf$[ebp]
+ 00057 50 push eax
+ 00058 ff 75 f8 push DWORD PTR _filestream$1$[ebp]
+ 0005b 8b 42 08 mov eax, DWORD PTR [edx+8]
+ 0005e ff 72 1c push DWORD PTR [edx+28]
+ 00061 ff d0 call eax
+ 00063 83 c4 10 add esp, 16 ; 00000010H
+ 00066 2b c3 sub eax, ebx
+ 00068 f7 d8 neg eax
+ 0006a 1b c0 sbb eax, eax
+ 0006c 5e pop esi
+ 0006d 5b pop ebx
+
+; 305 : return ZIP_ERRNO;
+; 306 : else
+; 307 : return ZIP_OK;
+; 308 : }
+
+ 0006e 8b e5 mov esp, ebp
+ 00070 5d pop ebp
+ 00071 c3 ret 0
+_zip64local_putValue ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zip64local_putValue_inmemory
+_TEXT SEGMENT
+_x$ = 8 ; size = 8
+_zip64local_putValue_inmemory PROC ; COMDAT
+; _dest$ = ecx
+; _nbByte$ = edx
+
+; 312 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 313 : unsigned char* buf=(unsigned char*)dest;
+; 314 : int n;
+; 315 : for (n = 0; n < nbByte; n++) {
+
+ 00003 8b 45 0c mov eax, DWORD PTR _x$[ebp+4]
+ 00006 56 push esi
+ 00007 57 push edi
+ 00008 33 f6 xor esi, esi
+ 0000a 8b f9 mov edi, ecx
+ 0000c 8b 4d 08 mov ecx, DWORD PTR _x$[ebp]
+ 0000f 85 d2 test edx, edx
+ 00011 7e 0f jle SHORT $LN3@zip64local
+$LL14@zip64local:
+
+; 316 : buf[n] = (unsigned char)(x & 0xff);
+
+ 00013 88 0c 3e mov BYTE PTR [esi+edi], cl
+ 00016 46 inc esi
+
+; 317 : x >>= 8;
+
+ 00017 0f ac c1 08 shrd ecx, eax, 8
+ 0001b c1 e8 08 shr eax, 8
+ 0001e 3b f2 cmp esi, edx
+ 00020 7c f1 jl SHORT $LL14@zip64local
+$LN3@zip64local:
+
+; 318 : }
+; 319 :
+; 320 : if (x != 0)
+
+ 00022 0b c8 or ecx, eax
+ 00024 74 15 je SHORT $LN6@zip64local
+
+; 321 : { /* data overflow - hack for ZIP64 */
+; 322 : for (n = 0; n < nbByte; n++)
+
+ 00026 85 d2 test edx, edx
+ 00028 7e 11 jle SHORT $LN6@zip64local
+
+; 323 : {
+; 324 : buf[n] = 0xff;
+
+ 0002a 8b ca mov ecx, edx
+ 0002c 83 c8 ff or eax, -1
+ 0002f c1 e9 02 shr ecx, 2
+ 00032 f3 ab rep stosd
+ 00034 8b ca mov ecx, edx
+ 00036 83 e1 03 and ecx, 3
+ 00039 f3 aa rep stosb
+$LN6@zip64local:
+ 0003b 5f pop edi
+ 0003c 5e pop esi
+
+; 325 : }
+; 326 : }
+; 327 : }
+
+ 0003d 5d pop ebp
+ 0003e c3 ret 0
+_zip64local_putValue_inmemory ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zip64local_TmzDateToDosDate
+_TEXT SEGMENT
+_zip64local_TmzDateToDosDate PROC ; COMDAT
+; _ptm$ = ecx
+
+; 333 : {
+
+ 00000 56 push esi
+ 00001 8b f1 mov esi, ecx
+
+; 334 : uLong year = (uLong)ptm->tm_year;
+
+ 00003 8b 56 14 mov edx, DWORD PTR [esi+20]
+
+; 335 : if (year>=1980)
+
+ 00006 81 fa bc 07 00
+ 00 cmp edx, 1980 ; 000007bcH
+ 0000c 72 08 jb SHORT $LN2@zip64local
+
+; 336 : year-=1980;
+
+ 0000e 81 ea bc 07 00
+ 00 sub edx, 1980 ; 000007bcH
+ 00014 eb 08 jmp SHORT $LN4@zip64local
+$LN2@zip64local:
+
+; 337 : else if (year>=80)
+
+ 00016 83 fa 50 cmp edx, 80 ; 00000050H
+ 00019 72 03 jb SHORT $LN4@zip64local
+
+; 338 : year-=80;
+
+ 0001b 83 ea 50 sub edx, 80 ; 00000050H
+$LN4@zip64local:
+
+; 339 : return
+
+ 0001e 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 00021 8b 0e mov ecx, DWORD PTR [esi]
+ 00023 c1 e0 06 shl eax, 6
+ 00026 03 46 04 add eax, DWORD PTR [esi+4]
+ 00029 d1 e9 shr ecx, 1
+ 0002b c1 e0 05 shl eax, 5
+ 0002e 03 c1 add eax, ecx
+ 00030 c1 e2 04 shl edx, 4
+ 00033 8b 4e 10 mov ecx, DWORD PTR [esi+16]
+ 00036 41 inc ecx
+ 00037 03 ca add ecx, edx
+ 00039 c1 e1 05 shl ecx, 5
+ 0003c 03 4e 0c add ecx, DWORD PTR [esi+12]
+ 0003f c1 e1 10 shl ecx, 16 ; 00000010H
+ 00042 0b c1 or eax, ecx
+ 00044 5e pop esi
+
+; 340 : (uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) |
+; 341 : ((ptm->tm_sec/2) + (32* ptm->tm_min) + (2048 * (uLong)ptm->tm_hour));
+; 342 : }
+
+ 00045 c3 ret 0
+_zip64local_TmzDateToDosDate ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zip64local_getByte
+_TEXT SEGMENT
+_c$ = -1 ; size = 1
+_pi$ = 8 ; size = 4
+_zip64local_getByte PROC ; COMDAT
+; _pzlib_filefunc_def$ = ecx
+; _filestream$ = edx
+
+; 350 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 56 push esi
+ 00005 57 push edi
+
+; 351 : unsigned char c;
+; 352 : int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1);
+
+ 00006 6a 01 push 1
+ 00008 8b f1 mov esi, ecx
+ 0000a 8d 45 ff lea eax, DWORD PTR _c$[ebp]
+ 0000d 50 push eax
+ 0000e 8b fa mov edi, edx
+ 00010 57 push edi
+ 00011 ff 76 1c push DWORD PTR [esi+28]
+ 00014 8b 46 04 mov eax, DWORD PTR [esi+4]
+ 00017 ff d0 call eax
+ 00019 83 c4 10 add esp, 16 ; 00000010H
+
+; 353 : if (err==1)
+
+ 0001c 83 f8 01 cmp eax, 1
+ 0001f 75 11 jne SHORT $LN2@zip64local
+
+; 354 : {
+; 355 : *pi = (int)c;
+
+ 00021 8b 45 08 mov eax, DWORD PTR _pi$[ebp]
+ 00024 0f b6 4d ff movzx ecx, BYTE PTR _c$[ebp]
+ 00028 5f pop edi
+ 00029 5e pop esi
+ 0002a 89 08 mov DWORD PTR [eax], ecx
+
+; 356 : return ZIP_OK;
+
+ 0002c 33 c0 xor eax, eax
+
+; 361 : return ZIP_ERRNO;
+; 362 : else
+; 363 : return ZIP_EOF;
+; 364 : }
+; 365 : }
+
+ 0002e 8b e5 mov esp, ebp
+ 00030 5d pop ebp
+ 00031 c3 ret 0
+$LN2@zip64local:
+
+; 357 : }
+; 358 : else
+; 359 : {
+; 360 : if (ZERROR64(*pzlib_filefunc_def,filestream))
+
+ 00032 8b 46 18 mov eax, DWORD PTR [esi+24]
+ 00035 57 push edi
+ 00036 ff 76 1c push DWORD PTR [esi+28]
+ 00039 ff d0 call eax
+ 0003b 83 c4 08 add esp, 8
+ 0003e f7 d8 neg eax
+ 00040 1b c0 sbb eax, eax
+ 00042 5f pop edi
+ 00043 5e pop esi
+
+; 361 : return ZIP_ERRNO;
+; 362 : else
+; 363 : return ZIP_EOF;
+; 364 : }
+; 365 : }
+
+ 00044 8b e5 mov esp, ebp
+ 00046 5d pop ebp
+ 00047 c3 ret 0
+_zip64local_getByte ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zip64local_getShort
+_TEXT SEGMENT
+_i$ = -4 ; size = 4
+_pX$ = 8 ; size = 4
+_zip64local_getShort PROC ; COMDAT
+; _pzlib_filefunc_def$ = ecx
+; _filestream$ = edx
+
+; 374 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 53 push ebx
+ 00005 56 push esi
+ 00006 57 push edi
+
+; 375 : uLong x ;
+; 376 : int i = 0;
+; 377 : int err;
+; 378 :
+; 379 : err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 00007 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 0000a c7 45 fc 00 00
+ 00 00 mov DWORD PTR _i$[ebp], 0
+ 00011 50 push eax
+ 00012 8b f2 mov esi, edx
+ 00014 8b f9 mov edi, ecx
+ 00016 e8 00 00 00 00 call _zip64local_getByte
+
+; 380 : x = (uLong)i;
+
+ 0001b 8b 5d fc mov ebx, DWORD PTR _i$[ebp]
+ 0001e 8b d0 mov edx, eax
+ 00020 83 c4 04 add esp, 4
+
+; 381 :
+; 382 : if (err==ZIP_OK)
+
+ 00023 85 d2 test edx, edx
+ 00025 75 2c jne SHORT $LN3@zip64local
+
+; 383 : err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 00027 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 0002a 8b d6 mov edx, esi
+ 0002c 50 push eax
+ 0002d 8b cf mov ecx, edi
+ 0002f e8 00 00 00 00 call _zip64local_getByte
+ 00034 8b d0 mov edx, eax
+ 00036 83 c4 04 add esp, 4
+
+; 384 : x += ((uLong)i)<<8;
+; 385 :
+; 386 : if (err==ZIP_OK)
+
+ 00039 85 d2 test edx, edx
+ 0003b 75 16 jne SHORT $LN3@zip64local
+
+; 387 : *pX = x;
+
+ 0003d 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 00040 8b 45 08 mov eax, DWORD PTR _pX$[ebp]
+ 00043 c1 e1 08 shl ecx, 8
+ 00046 5f pop edi
+ 00047 03 cb add ecx, ebx
+ 00049 5e pop esi
+ 0004a 89 08 mov DWORD PTR [eax], ecx
+
+; 390 : return err;
+
+ 0004c 8b c2 mov eax, edx
+ 0004e 5b pop ebx
+
+; 391 : }
+
+ 0004f 8b e5 mov esp, ebp
+ 00051 5d pop ebp
+ 00052 c3 ret 0
+$LN3@zip64local:
+
+; 388 : else
+; 389 : *pX = 0;
+
+ 00053 8b 45 08 mov eax, DWORD PTR _pX$[ebp]
+ 00056 5f pop edi
+ 00057 5e pop esi
+ 00058 5b pop ebx
+ 00059 c7 00 00 00 00
+ 00 mov DWORD PTR [eax], 0
+
+; 390 : return err;
+
+ 0005f 8b c2 mov eax, edx
+
+; 391 : }
+
+ 00061 8b e5 mov esp, ebp
+ 00063 5d pop ebp
+ 00064 c3 ret 0
+_zip64local_getShort ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zip64local_getLong
+_TEXT SEGMENT
+_i$ = -4 ; size = 4
+_pX$ = 8 ; size = 4
+_zip64local_getLong PROC ; COMDAT
+; _pzlib_filefunc_def$ = ecx
+; _filestream$ = edx
+
+; 396 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 53 push ebx
+ 00005 56 push esi
+ 00006 57 push edi
+
+; 397 : uLong x ;
+; 398 : int i = 0;
+; 399 : int err;
+; 400 :
+; 401 : err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 00007 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 0000a c7 45 fc 00 00
+ 00 00 mov DWORD PTR _i$[ebp], 0
+ 00011 50 push eax
+ 00012 8b fa mov edi, edx
+ 00014 8b d9 mov ebx, ecx
+ 00016 e8 00 00 00 00 call _zip64local_getByte
+
+; 402 : x = (uLong)i;
+
+ 0001b 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 0001e 8b d0 mov edx, eax
+ 00020 83 c4 04 add esp, 4
+ 00023 8b f1 mov esi, ecx
+
+; 403 :
+; 404 : if (err==ZIP_OK)
+
+ 00025 85 d2 test edx, edx
+ 00027 75 15 jne SHORT $LN2@zip64local
+
+; 405 : err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 00029 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 0002c 8b d7 mov edx, edi
+ 0002e 50 push eax
+ 0002f 8b cb mov ecx, ebx
+ 00031 e8 00 00 00 00 call _zip64local_getByte
+ 00036 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 00039 83 c4 04 add esp, 4
+ 0003c 8b d0 mov edx, eax
+$LN2@zip64local:
+
+; 406 : x += ((uLong)i)<<8;
+
+ 0003e 8b c1 mov eax, ecx
+ 00040 c1 e0 08 shl eax, 8
+ 00043 03 f0 add esi, eax
+
+; 407 :
+; 408 : if (err==ZIP_OK)
+
+ 00045 85 d2 test edx, edx
+ 00047 75 15 jne SHORT $LN3@zip64local
+
+; 409 : err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 00049 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 0004c 8b d7 mov edx, edi
+ 0004e 50 push eax
+ 0004f 8b cb mov ecx, ebx
+ 00051 e8 00 00 00 00 call _zip64local_getByte
+ 00056 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 00059 83 c4 04 add esp, 4
+ 0005c 8b d0 mov edx, eax
+$LN3@zip64local:
+
+; 410 : x += ((uLong)i)<<16;
+
+ 0005e c1 e1 10 shl ecx, 16 ; 00000010H
+ 00061 03 f1 add esi, ecx
+
+; 411 :
+; 412 : if (err==ZIP_OK)
+
+ 00063 85 d2 test edx, edx
+ 00065 75 2c jne SHORT $LN5@zip64local
+
+; 413 : err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 00067 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 0006a 8b d7 mov edx, edi
+ 0006c 50 push eax
+ 0006d 8b cb mov ecx, ebx
+ 0006f e8 00 00 00 00 call _zip64local_getByte
+ 00074 8b d0 mov edx, eax
+ 00076 83 c4 04 add esp, 4
+
+; 414 : x += ((uLong)i)<<24;
+; 415 :
+; 416 : if (err==ZIP_OK)
+
+ 00079 85 d2 test edx, edx
+ 0007b 75 16 jne SHORT $LN5@zip64local
+
+; 417 : *pX = x;
+
+ 0007d 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 00080 8b 45 08 mov eax, DWORD PTR _pX$[ebp]
+ 00083 c1 e1 18 shl ecx, 24 ; 00000018H
+ 00086 5f pop edi
+ 00087 03 ce add ecx, esi
+ 00089 5e pop esi
+ 0008a 89 08 mov DWORD PTR [eax], ecx
+
+; 420 : return err;
+
+ 0008c 8b c2 mov eax, edx
+ 0008e 5b pop ebx
+
+; 421 : }
+
+ 0008f 8b e5 mov esp, ebp
+ 00091 5d pop ebp
+ 00092 c3 ret 0
+$LN5@zip64local:
+
+; 418 : else
+; 419 : *pX = 0;
+
+ 00093 8b 45 08 mov eax, DWORD PTR _pX$[ebp]
+ 00096 5f pop edi
+ 00097 5e pop esi
+ 00098 5b pop ebx
+ 00099 c7 00 00 00 00
+ 00 mov DWORD PTR [eax], 0
+
+; 420 : return err;
+
+ 0009f 8b c2 mov eax, edx
+
+; 421 : }
+
+ 000a1 8b e5 mov esp, ebp
+ 000a3 5d pop ebp
+ 000a4 c3 ret 0
+_zip64local_getLong ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zip64local_getLong64
+_TEXT SEGMENT
+_pzlib_filefunc_def$1$ = -12 ; size = 4
+_filestream$1$ = -8 ; size = 4
+_i$ = -4 ; size = 4
+_pX$ = 8 ; size = 4
+_zip64local_getLong64 PROC ; COMDAT
+; _pzlib_filefunc_def$ = ecx
+; _filestream$ = edx
+
+; 427 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 0c sub esp, 12 ; 0000000cH
+ 00006 53 push ebx
+ 00007 8b c2 mov eax, edx
+ 00009 89 4d f4 mov DWORD PTR _pzlib_filefunc_def$1$[ebp], ecx
+ 0000c 56 push esi
+
+; 428 : ZPOS64_T x;
+; 429 : int i = 0;
+; 430 : int err;
+; 431 :
+; 432 : err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 0000d 8d 55 fc lea edx, DWORD PTR _i$[ebp]
+ 00010 89 45 f8 mov DWORD PTR _filestream$1$[ebp], eax
+ 00013 57 push edi
+ 00014 52 push edx
+ 00015 8b d0 mov edx, eax
+ 00017 c7 45 fc 00 00
+ 00 00 mov DWORD PTR _i$[ebp], 0
+ 0001e e8 00 00 00 00 call _zip64local_getByte
+
+; 433 : x = (ZPOS64_T)i;
+
+ 00023 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 00026 8b f0 mov esi, eax
+ 00028 8b c1 mov eax, ecx
+ 0002a 83 c4 04 add esp, 4
+ 0002d 99 cdq
+ 0002e 8b f8 mov edi, eax
+ 00030 8b da mov ebx, edx
+
+; 434 :
+; 435 : if (err==ZIP_OK)
+
+ 00032 85 f6 test esi, esi
+ 00034 75 17 jne SHORT $LN2@zip64local
+
+; 436 : err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 00036 8b 55 f8 mov edx, DWORD PTR _filestream$1$[ebp]
+ 00039 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 0003c 8b 4d f4 mov ecx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 0003f 50 push eax
+ 00040 e8 00 00 00 00 call _zip64local_getByte
+ 00045 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 00048 83 c4 04 add esp, 4
+ 0004b 8b f0 mov esi, eax
+$LN2@zip64local:
+
+; 437 : x += ((ZPOS64_T)i)<<8;
+
+ 0004d 8b c1 mov eax, ecx
+ 0004f 99 cdq
+ 00050 0f a4 c2 08 shld edx, eax, 8
+ 00054 c1 e0 08 shl eax, 8
+ 00057 03 f8 add edi, eax
+ 00059 13 da adc ebx, edx
+
+; 438 :
+; 439 : if (err==ZIP_OK)
+
+ 0005b 85 f6 test esi, esi
+ 0005d 75 17 jne SHORT $LN3@zip64local
+
+; 440 : err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 0005f 8b 55 f8 mov edx, DWORD PTR _filestream$1$[ebp]
+ 00062 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 00065 8b 4d f4 mov ecx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 00068 50 push eax
+ 00069 e8 00 00 00 00 call _zip64local_getByte
+ 0006e 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 00071 83 c4 04 add esp, 4
+ 00074 8b f0 mov esi, eax
+$LN3@zip64local:
+
+; 441 : x += ((ZPOS64_T)i)<<16;
+
+ 00076 8b c1 mov eax, ecx
+ 00078 99 cdq
+ 00079 0f a4 c2 10 shld edx, eax, 16
+ 0007d c1 e0 10 shl eax, 16 ; 00000010H
+ 00080 03 f8 add edi, eax
+ 00082 13 da adc ebx, edx
+
+; 442 :
+; 443 : if (err==ZIP_OK)
+
+ 00084 85 f6 test esi, esi
+ 00086 75 17 jne SHORT $LN4@zip64local
+
+; 444 : err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 00088 8b 55 f8 mov edx, DWORD PTR _filestream$1$[ebp]
+ 0008b 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 0008e 8b 4d f4 mov ecx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 00091 50 push eax
+ 00092 e8 00 00 00 00 call _zip64local_getByte
+ 00097 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 0009a 83 c4 04 add esp, 4
+ 0009d 8b f0 mov esi, eax
+$LN4@zip64local:
+
+; 445 : x += ((ZPOS64_T)i)<<24;
+
+ 0009f 8b c1 mov eax, ecx
+ 000a1 99 cdq
+ 000a2 0f a4 c2 18 shld edx, eax, 24
+ 000a6 c1 e0 18 shl eax, 24 ; 00000018H
+ 000a9 03 f8 add edi, eax
+ 000ab 13 da adc ebx, edx
+
+; 446 :
+; 447 : if (err==ZIP_OK)
+
+ 000ad 85 f6 test esi, esi
+ 000af 75 17 jne SHORT $LN5@zip64local
+
+; 448 : err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 000b1 8b 55 f8 mov edx, DWORD PTR _filestream$1$[ebp]
+ 000b4 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 000b7 8b 4d f4 mov ecx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 000ba 50 push eax
+ 000bb e8 00 00 00 00 call _zip64local_getByte
+ 000c0 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 000c3 83 c4 04 add esp, 4
+ 000c6 8b f0 mov esi, eax
+$LN5@zip64local:
+
+; 449 : x += ((ZPOS64_T)i)<<32;
+
+ 000c8 8b c1 mov eax, ecx
+ 000ca 83 c7 00 add edi, 0
+ 000cd 99 cdq
+ 000ce 13 d8 adc ebx, eax
+
+; 450 :
+; 451 : if (err==ZIP_OK)
+
+ 000d0 85 f6 test esi, esi
+ 000d2 75 17 jne SHORT $LN6@zip64local
+
+; 452 : err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 000d4 8b 55 f8 mov edx, DWORD PTR _filestream$1$[ebp]
+ 000d7 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 000da 8b 4d f4 mov ecx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 000dd 50 push eax
+ 000de e8 00 00 00 00 call _zip64local_getByte
+ 000e3 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 000e6 83 c4 04 add esp, 4
+ 000e9 8b f0 mov esi, eax
+$LN6@zip64local:
+
+; 453 : x += ((ZPOS64_T)i)<<40;
+
+ 000eb 8b c1 mov eax, ecx
+ 000ed 99 cdq
+ 000ee c1 e0 08 shl eax, 8
+ 000f1 83 c7 00 add edi, 0
+ 000f4 13 d8 adc ebx, eax
+
+; 454 :
+; 455 : if (err==ZIP_OK)
+
+ 000f6 85 f6 test esi, esi
+ 000f8 75 17 jne SHORT $LN7@zip64local
+
+; 456 : err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 000fa 8b 55 f8 mov edx, DWORD PTR _filestream$1$[ebp]
+ 000fd 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 00100 8b 4d f4 mov ecx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 00103 50 push eax
+ 00104 e8 00 00 00 00 call _zip64local_getByte
+ 00109 8b 4d fc mov ecx, DWORD PTR _i$[ebp]
+ 0010c 83 c4 04 add esp, 4
+ 0010f 8b f0 mov esi, eax
+$LN7@zip64local:
+
+; 457 : x += ((ZPOS64_T)i)<<48;
+
+ 00111 8b c1 mov eax, ecx
+ 00113 99 cdq
+ 00114 c1 e0 10 shl eax, 16 ; 00000010H
+ 00117 83 c7 00 add edi, 0
+ 0011a 13 d8 adc ebx, eax
+
+; 458 :
+; 459 : if (err==ZIP_OK)
+
+ 0011c 85 f6 test esi, esi
+ 0011e 75 36 jne SHORT $LN9@zip64local
+
+; 460 : err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+
+ 00120 8b 55 f8 mov edx, DWORD PTR _filestream$1$[ebp]
+ 00123 8d 45 fc lea eax, DWORD PTR _i$[ebp]
+ 00126 8b 4d f4 mov ecx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 00129 50 push eax
+ 0012a e8 00 00 00 00 call _zip64local_getByte
+ 0012f 8b f0 mov esi, eax
+ 00131 83 c4 04 add esp, 4
+
+; 461 : x += ((ZPOS64_T)i)<<56;
+; 462 :
+; 463 : if (err==ZIP_OK)
+
+ 00134 85 f6 test esi, esi
+ 00136 75 1e jne SHORT $LN9@zip64local
+
+; 464 : *pX = x;
+
+ 00138 8b 45 fc mov eax, DWORD PTR _i$[ebp]
+ 0013b 8b 4d 08 mov ecx, DWORD PTR _pX$[ebp]
+ 0013e 99 cdq
+ 0013f 33 d2 xor edx, edx
+ 00141 c1 e0 18 shl eax, 24 ; 00000018H
+ 00144 03 d7 add edx, edi
+ 00146 89 11 mov DWORD PTR [ecx], edx
+ 00148 13 c3 adc eax, ebx
+ 0014a 89 41 04 mov DWORD PTR [ecx+4], eax
+
+; 467 :
+; 468 : return err;
+
+ 0014d 8b c6 mov eax, esi
+
+; 469 : }
+
+ 0014f 5f pop edi
+ 00150 5e pop esi
+ 00151 5b pop ebx
+ 00152 8b e5 mov esp, ebp
+ 00154 5d pop ebp
+ 00155 c3 ret 0
+$LN9@zip64local:
+
+; 465 : else
+; 466 : *pX = 0;
+
+ 00156 8b 45 08 mov eax, DWORD PTR _pX$[ebp]
+
+; 469 : }
+
+ 00159 5f pop edi
+ 0015a c7 00 00 00 00
+ 00 mov DWORD PTR [eax], 0
+ 00160 c7 40 04 00 00
+ 00 00 mov DWORD PTR [eax+4], 0
+ 00167 8b c6 mov eax, esi
+ 00169 5e pop esi
+ 0016a 5b pop ebx
+ 0016b 8b e5 mov esp, ebp
+ 0016d 5d pop ebp
+ 0016e c3 ret 0
+_zip64local_getLong64 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zip64local_SearchCentralDir
+_TEXT SEGMENT
+_uPosFound$ = -48 ; size = 8
+_uReadPos$1$ = -44 ; size = 4
+_uBackRead$2$ = -40 ; size = 4
+_uReadPos$2$ = -36 ; size = 4
+_pzlib_filefunc_def$1$ = -32 ; size = 4
+_filestream$1$ = -28 ; size = 4
+_uSizeFile$1$ = -24 ; size = 4
+_uSizeFile$2$ = -20 ; size = 4
+_uPosFound$1$ = -16 ; size = 4
+_uPosFound$2$ = -12 ; size = 4
+_uMaxBack$1$ = -8 ; size = 4
+_uMaxBack$2$ = -4 ; size = 4
+_zip64local_SearchCentralDir PROC ; COMDAT
+; _pzlib_filefunc_def$ = ecx
+; _filestream$ = edx
+
+; 481 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 34 sub esp, 52 ; 00000034H
+ 00006 53 push ebx
+ 00007 56 push esi
+ 00008 57 push edi
+
+; 482 : unsigned char* buf;
+; 483 : ZPOS64_T uSizeFile;
+; 484 : ZPOS64_T uBackRead;
+; 485 : ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
+
+ 00009 33 c0 xor eax, eax
+ 0000b 8b f2 mov esi, edx
+
+; 486 : ZPOS64_T uPosFound=0;
+; 487 :
+; 488 : if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+
+ 0000d 6a 02 push 2
+ 0000f 50 push eax
+ 00010 8b d9 mov ebx, ecx
+ 00012 89 75 e4 mov DWORD PTR _filestream$1$[ebp], esi
+ 00015 0f 57 c0 xorps xmm0, xmm0
+ 00018 89 5d e0 mov DWORD PTR _pzlib_filefunc_def$1$[ebp], ebx
+ 0001b bf ff ff 00 00 mov edi, 65535 ; 0000ffffH
+ 00020 89 45 fc mov DWORD PTR _uMaxBack$2$[ebp], eax
+ 00023 50 push eax
+ 00024 89 7d f8 mov DWORD PTR _uMaxBack$1$[ebp], edi
+ 00027 66 0f 13 45 d0 movlpd QWORD PTR _uPosFound$[ebp], xmm0
+ 0002c e8 00 00 00 00 call _call_zseek64
+ 00031 83 c4 0c add esp, 12 ; 0000000cH
+ 00034 85 c0 test eax, eax
+ 00036 74 0b je SHORT $LN7@zip64local
+
+; 489 : return 0;
+
+ 00038 33 c0 xor eax, eax
+$LN43@zip64local:
+ 0003a 33 d2 xor edx, edx
+
+; 534 : }
+
+ 0003c 5f pop edi
+ 0003d 5e pop esi
+ 0003e 5b pop ebx
+ 0003f 8b e5 mov esp, ebp
+ 00041 5d pop ebp
+ 00042 c3 ret 0
+$LN7@zip64local:
+
+; 490 :
+; 491 :
+; 492 : uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+
+ 00043 8b d6 mov edx, esi
+ 00045 8b cb mov ecx, ebx
+ 00047 e8 00 00 00 00 call _call_ztell64
+ 0004c 8b ca mov ecx, edx
+ 0004e 89 45 e8 mov DWORD PTR _uSizeFile$1$[ebp], eax
+ 00051 89 4d ec mov DWORD PTR _uSizeFile$2$[ebp], ecx
+
+; 493 :
+; 494 : if (uMaxBack>uSizeFile)
+
+ 00054 85 c9 test ecx, ecx
+ 00056 77 11 ja SHORT $LN8@zip64local
+ 00058 72 07 jb SHORT $LN33@zip64local
+ 0005a 3d ff ff 00 00 cmp eax, 65535 ; 0000ffffH
+ 0005f 73 08 jae SHORT $LN8@zip64local
+$LN33@zip64local:
+
+; 495 : uMaxBack = uSizeFile;
+
+ 00061 8b f8 mov edi, eax
+ 00063 89 4d fc mov DWORD PTR _uMaxBack$2$[ebp], ecx
+ 00066 89 7d f8 mov DWORD PTR _uMaxBack$1$[ebp], edi
+$LN8@zip64local:
+
+; 496 :
+; 497 : buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+
+ 00069 68 04 04 00 00 push 1028 ; 00000404H
+ 0006e ff 15 00 00 00
+ 00 call DWORD PTR __imp__malloc
+ 00074 8b f0 mov esi, eax
+ 00076 83 c4 04 add esp, 4
+
+; 498 : if (buf==NULL)
+; 499 : return 0;
+
+ 00079 33 c0 xor eax, eax
+ 0007b 85 f6 test esi, esi
+ 0007d 74 bb je SHORT $LN43@zip64local
+
+; 500 :
+; 501 : uBackRead = 4;
+; 502 : while (uBackRead<uMaxBack)
+
+ 0007f 8b 4d fc mov ecx, DWORD PTR _uMaxBack$2$[ebp]
+ 00082 8d 58 04 lea ebx, DWORD PTR [eax+4]
+ 00085 3b c1 cmp eax, ecx
+ 00087 0f 87 f3 00 00
+ 00 ja $LN42@zip64local
+ 0008d 72 08 jb SHORT $LN40@zip64local
+ 0008f 3b df cmp ebx, edi
+ 00091 0f 83 e9 00 00
+ 00 jae $LN42@zip64local
+$LN40@zip64local:
+ 00097 8b 55 d4 mov edx, DWORD PTR _uPosFound$[ebp+4]
+ 0009a 89 55 f0 mov DWORD PTR _uPosFound$1$[ebp], edx
+ 0009d 8b 55 d0 mov edx, DWORD PTR _uPosFound$[ebp]
+ 000a0 89 55 f4 mov DWORD PTR _uPosFound$2$[ebp], edx
+$LL2@zip64local:
+
+; 503 : {
+; 504 : uLong uReadSize;
+; 505 : ZPOS64_T uReadPos ;
+; 506 : int i;
+; 507 : if (uBackRead+BUFREADCOMMENT>uMaxBack)
+
+ 000a3 81 c3 00 04 00
+ 00 add ebx, 1024 ; 00000400H
+ 000a9 83 d0 00 adc eax, 0
+ 000ac 89 45 d8 mov DWORD PTR _uBackRead$2$[ebp], eax
+ 000af 3b c1 cmp eax, ecx
+ 000b1 72 0d jb SHORT $LN11@zip64local
+ 000b3 77 04 ja SHORT $LN35@zip64local
+ 000b5 3b df cmp ebx, edi
+ 000b7 76 07 jbe SHORT $LN11@zip64local
+$LN35@zip64local:
+
+; 508 : uBackRead = uMaxBack;
+
+ 000b9 8b df mov ebx, edi
+ 000bb 89 4d d8 mov DWORD PTR _uBackRead$2$[ebp], ecx
+ 000be 8b c1 mov eax, ecx
+$LN11@zip64local:
+
+; 509 : else
+; 510 : uBackRead+=BUFREADCOMMENT;
+; 511 : uReadPos = uSizeFile-uBackRead ;
+
+ 000c0 8b 4d e8 mov ecx, DWORD PTR _uSizeFile$1$[ebp]
+ 000c3 8b d1 mov edx, ecx
+ 000c5 8b 7d ec mov edi, DWORD PTR _uSizeFile$2$[ebp]
+ 000c8 2b d3 sub edx, ebx
+ 000ca 89 55 d4 mov DWORD PTR _uReadPos$1$[ebp], edx
+ 000cd 1b f8 sbb edi, eax
+
+; 512 :
+; 513 : uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+
+ 000cf 8b 45 ec mov eax, DWORD PTR _uSizeFile$2$[ebp]
+ 000d2 2b ca sub ecx, edx
+ 000d4 89 7d dc mov DWORD PTR _uReadPos$2$[ebp], edi
+ 000d7 1b c7 sbb eax, edi
+ 000d9 85 c0 test eax, eax
+ 000db 72 11 jb SHORT $LN18@zip64local
+ 000dd 77 08 ja SHORT $LN36@zip64local
+ 000df 81 f9 04 04 00
+ 00 cmp ecx, 1028 ; 00000404H
+ 000e5 76 07 jbe SHORT $LN18@zip64local
+$LN36@zip64local:
+ 000e7 bf 04 04 00 00 mov edi, 1028 ; 00000404H
+ 000ec eb 05 jmp SHORT $LN19@zip64local
+$LN18@zip64local:
+ 000ee 8b 7d e8 mov edi, DWORD PTR _uSizeFile$1$[ebp]
+ 000f1 2b fa sub edi, edx
+$LN19@zip64local:
+
+; 514 : (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+; 515 : if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 000f3 8b 4d e0 mov ecx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 000f6 6a 00 push 0
+ 000f8 ff 75 dc push DWORD PTR _uReadPos$2$[ebp]
+ 000fb 52 push edx
+ 000fc 8b 55 e4 mov edx, DWORD PTR _filestream$1$[ebp]
+ 000ff e8 00 00 00 00 call _call_zseek64
+ 00104 83 c4 0c add esp, 12 ; 0000000cH
+ 00107 85 c0 test eax, eax
+ 00109 0f 85 7d 00 00
+ 00 jne $LN37@zip64local
+
+; 516 : break;
+; 517 :
+; 518 : if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+
+ 0010f 8b 45 e0 mov eax, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 00112 57 push edi
+ 00113 56 push esi
+ 00114 ff 75 e4 push DWORD PTR _filestream$1$[ebp]
+ 00117 ff 70 1c push DWORD PTR [eax+28]
+ 0011a 8b 40 04 mov eax, DWORD PTR [eax+4]
+ 0011d ff d0 call eax
+ 0011f 83 c4 10 add esp, 16 ; 00000010H
+ 00122 3b c7 cmp eax, edi
+ 00124 75 66 jne SHORT $LN37@zip64local
+
+; 519 : break;
+; 520 :
+; 521 : for (i=(int)uReadSize-3; (i--)>0;)
+
+ 00126 8d 47 fd lea eax, DWORD PTR [edi-3]
+ 00129 85 c0 test eax, eax
+ 0012b 7e 36 jle SHORT $LN32@zip64local
+ 0012d 0f 1f 00 npad 3
+$LL4@zip64local:
+ 00130 48 dec eax
+
+; 522 : if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
+; 523 : ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
+
+ 00131 80 3c 30 50 cmp BYTE PTR [eax+esi], 80 ; 00000050H
+ 00135 75 15 jne SHORT $LN14@zip64local
+ 00137 80 7c 30 01 4b cmp BYTE PTR [eax+esi+1], 75 ; 0000004bH
+ 0013c 75 0e jne SHORT $LN14@zip64local
+ 0013e 80 7c 30 02 05 cmp BYTE PTR [eax+esi+2], 5
+ 00143 75 07 jne SHORT $LN14@zip64local
+ 00145 80 7c 30 03 06 cmp BYTE PTR [eax+esi+3], 6
+ 0014a 74 06 je SHORT $LN22@zip64local
+$LN14@zip64local:
+
+; 519 : break;
+; 520 :
+; 521 : for (i=(int)uReadSize-3; (i--)>0;)
+
+ 0014c 85 c0 test eax, eax
+ 0014e 7f e0 jg SHORT $LL4@zip64local
+ 00150 eb 11 jmp SHORT $LN32@zip64local
+$LN22@zip64local:
+
+; 524 : {
+; 525 : uPosFound = uReadPos+i;
+
+ 00152 99 cdq
+ 00153 03 45 d4 add eax, DWORD PTR _uReadPos$1$[ebp]
+ 00156 89 45 f4 mov DWORD PTR _uPosFound$2$[ebp], eax
+ 00159 13 55 dc adc edx, DWORD PTR _uReadPos$2$[ebp]
+
+; 526 : break;
+; 527 : }
+; 528 :
+; 529 : if (uPosFound!=0)
+
+ 0015c 0b c2 or eax, edx
+ 0015e 89 55 f0 mov DWORD PTR _uPosFound$1$[ebp], edx
+ 00161 75 29 jne SHORT $LN37@zip64local
+$LN32@zip64local:
+
+; 500 :
+; 501 : uBackRead = 4;
+; 502 : while (uBackRead<uMaxBack)
+
+ 00163 8b 45 d8 mov eax, DWORD PTR _uBackRead$2$[ebp]
+ 00166 8b 4d fc mov ecx, DWORD PTR _uMaxBack$2$[ebp]
+ 00169 8b 7d f8 mov edi, DWORD PTR _uMaxBack$1$[ebp]
+ 0016c 3b c1 cmp eax, ecx
+ 0016e 0f 82 2f ff ff
+ ff jb $LL2@zip64local
+ 00174 77 16 ja SHORT $LN37@zip64local
+ 00176 3b df cmp ebx, edi
+ 00178 0f 82 25 ff ff
+ ff jb $LL2@zip64local
+ 0017e eb 0c jmp SHORT $LN37@zip64local
+$LN42@zip64local:
+ 00180 8b 45 d4 mov eax, DWORD PTR _uPosFound$[ebp+4]
+ 00183 89 45 f0 mov DWORD PTR _uPosFound$1$[ebp], eax
+ 00186 8b 45 d0 mov eax, DWORD PTR _uPosFound$[ebp]
+ 00189 89 45 f4 mov DWORD PTR _uPosFound$2$[ebp], eax
+$LN37@zip64local:
+
+; 530 : break;
+; 531 : }
+; 532 : TRYFREE(buf);
+
+ 0018c 56 push esi
+ 0018d ff 15 00 00 00
+ 00 call DWORD PTR __imp__free
+
+; 533 : return uPosFound;
+
+ 00193 8b 45 f4 mov eax, DWORD PTR _uPosFound$2$[ebp]
+ 00196 83 c4 04 add esp, 4
+ 00199 8b 55 f0 mov edx, DWORD PTR _uPosFound$1$[ebp]
+
+; 534 : }
+
+ 0019c 5f pop edi
+ 0019d 5e pop esi
+ 0019e 5b pop ebx
+ 0019f 8b e5 mov esp, ebp
+ 001a1 5d pop ebp
+ 001a2 c3 ret 0
+_zip64local_SearchCentralDir ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zip64local_SearchCentralDir64
+_TEXT SEGMENT
+_relativeOffset$ = -48 ; size = 8
+_uPosFound$ = -48 ; size = 8
+_uReadPos$1$ = -44 ; size = 4
+_uBackRead$2$ = -40 ; size = 4
+_uReadPos$2$ = -36 ; size = 4
+_uSizeFile$1$ = -32 ; size = 4
+_uSizeFile$2$ = -28 ; size = 4
+_uPosFound$1$ = -24 ; size = 4
+_uPosFound$2$ = -20 ; size = 4
+_uMaxBack$2$ = -16 ; size = 4
+_filestream$1$ = -12 ; size = 4
+_uMaxBack$1$ = -8 ; size = 4
+_uL$ = -8 ; size = 4
+_pzlib_filefunc_def$1$ = -4 ; size = 4
+_zip64local_SearchCentralDir64 PROC ; COMDAT
+; _pzlib_filefunc_def$ = ecx
+; _filestream$ = edx
+
+; 543 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 34 sub esp, 52 ; 00000034H
+ 00006 53 push ebx
+ 00007 56 push esi
+ 00008 57 push edi
+
+; 544 : unsigned char* buf;
+; 545 : ZPOS64_T uSizeFile;
+; 546 : ZPOS64_T uBackRead;
+; 547 : ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
+
+ 00009 b8 ff ff 00 00 mov eax, 65535 ; 0000ffffH
+ 0000e 8b da mov ebx, edx
+ 00010 89 45 f8 mov DWORD PTR _uMaxBack$1$[ebp], eax
+ 00013 8b f9 mov edi, ecx
+ 00015 33 c0 xor eax, eax
+ 00017 89 5d f4 mov DWORD PTR _filestream$1$[ebp], ebx
+
+; 548 : ZPOS64_T uPosFound=0;
+; 549 : uLong uL;
+; 550 : ZPOS64_T relativeOffset;
+; 551 :
+; 552 : if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+
+ 0001a 6a 02 push 2
+ 0001c 50 push eax
+ 0001d 0f 57 c0 xorps xmm0, xmm0
+ 00020 89 7d fc mov DWORD PTR _pzlib_filefunc_def$1$[ebp], edi
+ 00023 50 push eax
+ 00024 89 45 f0 mov DWORD PTR _uMaxBack$2$[ebp], eax
+ 00027 66 0f 13 45 d0 movlpd QWORD PTR _uPosFound$[ebp], xmm0
+ 0002c e8 00 00 00 00 call _call_zseek64
+ 00031 83 c4 0c add esp, 12 ; 0000000cH
+ 00034 85 c0 test eax, eax
+ 00036 74 0b je SHORT $LN7@zip64local
+$LN61@zip64local:
+
+; 553 : return 0;
+
+ 00038 33 c0 xor eax, eax
+$LN60@zip64local:
+ 0003a 33 d2 xor edx, edx
+
+; 638 : }
+
+ 0003c 5f pop edi
+ 0003d 5e pop esi
+ 0003e 5b pop ebx
+ 0003f 8b e5 mov esp, ebp
+ 00041 5d pop ebp
+ 00042 c3 ret 0
+$LN7@zip64local:
+
+; 554 :
+; 555 : uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+
+ 00043 8b d3 mov edx, ebx
+ 00045 8b cf mov ecx, edi
+ 00047 e8 00 00 00 00 call _call_ztell64
+ 0004c 8b ca mov ecx, edx
+ 0004e 89 45 e0 mov DWORD PTR _uSizeFile$1$[ebp], eax
+ 00051 89 4d e4 mov DWORD PTR _uSizeFile$2$[ebp], ecx
+
+; 556 :
+; 557 : if (uMaxBack>uSizeFile)
+
+ 00054 85 c9 test ecx, ecx
+ 00056 77 0f ja SHORT $LN8@zip64local
+ 00058 72 07 jb SHORT $LN44@zip64local
+ 0005a 3d ff ff 00 00 cmp eax, 65535 ; 0000ffffH
+ 0005f 73 06 jae SHORT $LN8@zip64local
+$LN44@zip64local:
+
+; 558 : uMaxBack = uSizeFile;
+
+ 00061 89 45 f8 mov DWORD PTR _uMaxBack$1$[ebp], eax
+ 00064 89 4d f0 mov DWORD PTR _uMaxBack$2$[ebp], ecx
+$LN8@zip64local:
+
+; 559 :
+; 560 : buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+
+ 00067 68 04 04 00 00 push 1028 ; 00000404H
+ 0006c ff 15 00 00 00
+ 00 call DWORD PTR __imp__malloc
+ 00072 8b f0 mov esi, eax
+ 00074 83 c4 04 add esp, 4
+
+; 561 : if (buf==NULL)
+; 562 : return 0;
+
+ 00077 33 c0 xor eax, eax
+ 00079 85 f6 test esi, esi
+ 0007b 74 bd je SHORT $LN60@zip64local
+
+; 563 :
+; 564 : uBackRead = 4;
+; 565 : while (uBackRead<uMaxBack)
+
+ 0007d 8b 55 f0 mov edx, DWORD PTR _uMaxBack$2$[ebp]
+ 00080 8d 58 04 lea ebx, DWORD PTR [eax+4]
+ 00083 3b c2 cmp eax, edx
+ 00085 0f 87 f3 01 00
+ 00 ja $LN53@zip64local
+ 0008b 8b 4d f8 mov ecx, DWORD PTR _uMaxBack$1$[ebp]
+ 0008e 72 08 jb SHORT $LN51@zip64local
+ 00090 3b d9 cmp ebx, ecx
+ 00092 0f 83 e6 01 00
+ 00 jae $LN53@zip64local
+$LN51@zip64local:
+ 00098 8b 7d d4 mov edi, DWORD PTR _uPosFound$[ebp+4]
+ 0009b 89 7d e8 mov DWORD PTR _uPosFound$1$[ebp], edi
+ 0009e 8b 7d d0 mov edi, DWORD PTR _uPosFound$[ebp]
+ 000a1 89 7d ec mov DWORD PTR _uPosFound$2$[ebp], edi
+$LL2@zip64local:
+
+; 566 : {
+; 567 : uLong uReadSize;
+; 568 : ZPOS64_T uReadPos;
+; 569 : int i;
+; 570 : if (uBackRead+BUFREADCOMMENT>uMaxBack)
+
+ 000a4 81 c3 00 04 00
+ 00 add ebx, 1024 ; 00000400H
+ 000aa 83 d0 00 adc eax, 0
+ 000ad 89 45 d8 mov DWORD PTR _uBackRead$2$[ebp], eax
+ 000b0 3b c2 cmp eax, edx
+ 000b2 72 0d jb SHORT $LN11@zip64local
+ 000b4 77 04 ja SHORT $LN46@zip64local
+ 000b6 3b d9 cmp ebx, ecx
+ 000b8 76 07 jbe SHORT $LN11@zip64local
+$LN46@zip64local:
+
+; 571 : uBackRead = uMaxBack;
+
+ 000ba 8b d9 mov ebx, ecx
+ 000bc 89 55 d8 mov DWORD PTR _uBackRead$2$[ebp], edx
+ 000bf 8b c2 mov eax, edx
+$LN11@zip64local:
+
+; 572 : else
+; 573 : uBackRead+=BUFREADCOMMENT;
+; 574 : uReadPos = uSizeFile-uBackRead ;
+
+ 000c1 8b 4d e0 mov ecx, DWORD PTR _uSizeFile$1$[ebp]
+ 000c4 8b d1 mov edx, ecx
+ 000c6 8b 7d e4 mov edi, DWORD PTR _uSizeFile$2$[ebp]
+ 000c9 2b d3 sub edx, ebx
+ 000cb 89 55 d4 mov DWORD PTR _uReadPos$1$[ebp], edx
+ 000ce 1b f8 sbb edi, eax
+
+; 575 :
+; 576 : uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+
+ 000d0 8b 45 e4 mov eax, DWORD PTR _uSizeFile$2$[ebp]
+ 000d3 2b ca sub ecx, edx
+ 000d5 89 7d dc mov DWORD PTR _uReadPos$2$[ebp], edi
+ 000d8 1b c7 sbb eax, edi
+ 000da 85 c0 test eax, eax
+ 000dc 72 11 jb SHORT $LN29@zip64local
+ 000de 77 08 ja SHORT $LN47@zip64local
+ 000e0 81 f9 04 04 00
+ 00 cmp ecx, 1028 ; 00000404H
+ 000e6 76 07 jbe SHORT $LN29@zip64local
+$LN47@zip64local:
+ 000e8 bf 04 04 00 00 mov edi, 1028 ; 00000404H
+ 000ed eb 05 jmp SHORT $LN30@zip64local
+$LN29@zip64local:
+ 000ef 8b 7d e0 mov edi, DWORD PTR _uSizeFile$1$[ebp]
+ 000f2 2b fa sub edi, edx
+$LN30@zip64local:
+
+; 577 : (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+; 578 : if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 000f4 8b 4d fc mov ecx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 000f7 6a 00 push 0
+ 000f9 ff 75 dc push DWORD PTR _uReadPos$2$[ebp]
+ 000fc 52 push edx
+ 000fd 8b 55 f4 mov edx, DWORD PTR _filestream$1$[ebp]
+ 00100 e8 00 00 00 00 call _call_zseek64
+ 00105 83 c4 0c add esp, 12 ; 0000000cH
+ 00108 85 c0 test eax, eax
+ 0010a 75 76 jne SHORT $LN57@zip64local
+
+; 579 : break;
+; 580 :
+; 581 : if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+
+ 0010c 8b 45 fc mov eax, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 0010f 57 push edi
+ 00110 56 push esi
+ 00111 ff 75 f4 push DWORD PTR _filestream$1$[ebp]
+ 00114 ff 70 1c push DWORD PTR [eax+28]
+ 00117 8b 40 04 mov eax, DWORD PTR [eax+4]
+ 0011a ff d0 call eax
+ 0011c 83 c4 10 add esp, 16 ; 00000010H
+ 0011f 3b c7 cmp eax, edi
+ 00121 75 5f jne SHORT $LN57@zip64local
+
+; 582 : break;
+; 583 :
+; 584 : for (i=(int)uReadSize-3; (i--)>0;)
+
+ 00123 8d 47 fd lea eax, DWORD PTR [edi-3]
+ 00126 85 c0 test eax, eax
+ 00128 7e 3d jle SHORT $LN43@zip64local
+ 0012a 66 0f 1f 44 00
+ 00 npad 6
+$LL4@zip64local:
+ 00130 48 dec eax
+
+; 585 : {
+; 586 : // Signature "0x07064b50" Zip64 end of central directory locater
+; 587 : if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
+
+ 00131 80 3c 30 50 cmp BYTE PTR [eax+esi], 80 ; 00000050H
+ 00135 75 15 jne SHORT $LN14@zip64local
+ 00137 80 7c 30 01 4b cmp BYTE PTR [eax+esi+1], 75 ; 0000004bH
+ 0013c 75 0e jne SHORT $LN14@zip64local
+ 0013e 80 7c 30 02 06 cmp BYTE PTR [eax+esi+2], 6
+ 00143 75 07 jne SHORT $LN14@zip64local
+ 00145 80 7c 30 03 07 cmp BYTE PTR [eax+esi+3], 7
+ 0014a 74 06 je SHORT $LN33@zip64local
+$LN14@zip64local:
+
+; 582 : break;
+; 583 :
+; 584 : for (i=(int)uReadSize-3; (i--)>0;)
+
+ 0014c 85 c0 test eax, eax
+ 0014e 7f e0 jg SHORT $LL4@zip64local
+ 00150 eb 15 jmp SHORT $LN43@zip64local
+$LN33@zip64local:
+
+; 588 : {
+; 589 : uPosFound = uReadPos+i;
+
+ 00152 99 cdq
+ 00153 03 45 d4 add eax, DWORD PTR _uReadPos$1$[ebp]
+ 00156 8b fa mov edi, edx
+
+; 590 : break;
+; 591 : }
+; 592 : }
+; 593 :
+; 594 : if (uPosFound!=0)
+
+ 00158 8b c8 mov ecx, eax
+ 0015a 89 45 ec mov DWORD PTR _uPosFound$2$[ebp], eax
+ 0015d 13 7d dc adc edi, DWORD PTR _uReadPos$2$[ebp]
+ 00160 0b cf or ecx, edi
+ 00162 89 7d e8 mov DWORD PTR _uPosFound$1$[ebp], edi
+ 00165 75 1b jne SHORT $LN57@zip64local
+$LN43@zip64local:
+
+; 563 :
+; 564 : uBackRead = 4;
+; 565 : while (uBackRead<uMaxBack)
+
+ 00167 8b 45 d8 mov eax, DWORD PTR _uBackRead$2$[ebp]
+ 0016a 8b 55 f0 mov edx, DWORD PTR _uMaxBack$2$[ebp]
+ 0016d 8b 4d f8 mov ecx, DWORD PTR _uMaxBack$1$[ebp]
+ 00170 3b c2 cmp eax, edx
+ 00172 0f 82 2c ff ff
+ ff jb $LL2@zip64local
+ 00178 77 08 ja SHORT $LN57@zip64local
+ 0017a 3b d9 cmp ebx, ecx
+ 0017c 0f 82 22 ff ff
+ ff jb $LL2@zip64local
+$LN57@zip64local:
+ 00182 8b 7d fc mov edi, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+$LN48@zip64local:
+
+; 595 : break;
+; 596 : }
+; 597 :
+; 598 : TRYFREE(buf);
+
+ 00185 56 push esi
+ 00186 ff 15 00 00 00
+ 00 call DWORD PTR __imp__free
+
+; 599 : if (uPosFound == 0)
+
+ 0018c 8b 55 ec mov edx, DWORD PTR _uPosFound$2$[ebp]
+ 0018f 83 c4 04 add esp, 4
+ 00192 8b 4d e8 mov ecx, DWORD PTR _uPosFound$1$[ebp]
+ 00195 8b c2 mov eax, edx
+ 00197 0b c1 or eax, ecx
+ 00199 0f 84 99 fe ff
+ ff je $LN61@zip64local
+
+; 600 : return 0;
+; 601 :
+; 602 : /* Zip64 end of central directory locator */
+; 603 : if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 0019f 8b 5d f4 mov ebx, DWORD PTR _filestream$1$[ebp]
+ 001a2 6a 00 push 0
+ 001a4 51 push ecx
+ 001a5 52 push edx
+ 001a6 8b d3 mov edx, ebx
+ 001a8 8b cf mov ecx, edi
+ 001aa e8 00 00 00 00 call _call_zseek64
+ 001af 83 c4 0c add esp, 12 ; 0000000cH
+ 001b2 85 c0 test eax, eax
+ 001b4 0f 85 7e fe ff
+ ff jne $LN61@zip64local
+
+; 604 : return 0;
+; 605 :
+; 606 : /* the signature, already checked */
+; 607 : if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+
+ 001ba 8d 45 f8 lea eax, DWORD PTR _uL$[ebp]
+ 001bd 8b d3 mov edx, ebx
+ 001bf 50 push eax
+ 001c0 8b cf mov ecx, edi
+ 001c2 e8 00 00 00 00 call _zip64local_getLong
+ 001c7 83 c4 04 add esp, 4
+ 001ca 85 c0 test eax, eax
+ 001cc 0f 85 66 fe ff
+ ff jne $LN61@zip64local
+
+; 608 : return 0;
+; 609 :
+; 610 : /* number of the disk with the start of the zip64 end of central directory */
+; 611 : if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+
+ 001d2 8d 45 f8 lea eax, DWORD PTR _uL$[ebp]
+ 001d5 8b d3 mov edx, ebx
+ 001d7 50 push eax
+ 001d8 8b cf mov ecx, edi
+ 001da e8 00 00 00 00 call _zip64local_getLong
+ 001df 83 c4 04 add esp, 4
+ 001e2 85 c0 test eax, eax
+ 001e4 0f 85 4e fe ff
+ ff jne $LN61@zip64local
+
+; 612 : return 0;
+; 613 : if (uL != 0)
+
+ 001ea 39 45 f8 cmp DWORD PTR _uL$[ebp], eax
+ 001ed 0f 85 45 fe ff
+ ff jne $LN61@zip64local
+
+; 614 : return 0;
+; 615 :
+; 616 : /* relative offset of the zip64 end of central directory record */
+; 617 : if (zip64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=ZIP_OK)
+
+ 001f3 8d 45 d0 lea eax, DWORD PTR _relativeOffset$[ebp]
+ 001f6 8b d3 mov edx, ebx
+ 001f8 50 push eax
+ 001f9 8b cf mov ecx, edi
+ 001fb e8 00 00 00 00 call _zip64local_getLong64
+ 00200 83 c4 04 add esp, 4
+ 00203 85 c0 test eax, eax
+ 00205 0f 85 2d fe ff
+ ff jne $LN61@zip64local
+
+; 618 : return 0;
+; 619 :
+; 620 : /* total number of disks */
+; 621 : if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+
+ 0020b 8d 45 f8 lea eax, DWORD PTR _uL$[ebp]
+ 0020e 8b d3 mov edx, ebx
+ 00210 50 push eax
+ 00211 8b cf mov ecx, edi
+ 00213 e8 00 00 00 00 call _zip64local_getLong
+ 00218 83 c4 04 add esp, 4
+ 0021b 85 c0 test eax, eax
+ 0021d 0f 85 15 fe ff
+ ff jne $LN61@zip64local
+
+; 622 : return 0;
+; 623 : if (uL != 1)
+
+ 00223 83 7d f8 01 cmp DWORD PTR _uL$[ebp], 1
+ 00227 0f 85 0b fe ff
+ ff jne $LN61@zip64local
+
+; 624 : return 0;
+; 625 :
+; 626 : /* Goto Zip64 end of central directory record */
+; 627 : if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 0022d 8b 75 d4 mov esi, DWORD PTR _relativeOffset$[ebp+4]
+ 00230 8b d3 mov edx, ebx
+ 00232 8b 7d d0 mov edi, DWORD PTR _relativeOffset$[ebp]
+ 00235 8b 5d fc mov ebx, DWORD PTR _pzlib_filefunc_def$1$[ebp]
+ 00238 8b cb mov ecx, ebx
+ 0023a 50 push eax
+ 0023b 56 push esi
+ 0023c 57 push edi
+ 0023d e8 00 00 00 00 call _call_zseek64
+ 00242 83 c4 0c add esp, 12 ; 0000000cH
+ 00245 85 c0 test eax, eax
+ 00247 0f 85 eb fd ff
+ ff jne $LN61@zip64local
+
+; 628 : return 0;
+; 629 :
+; 630 : /* the signature */
+; 631 : if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+
+ 0024d 8b 55 f4 mov edx, DWORD PTR _filestream$1$[ebp]
+ 00250 8d 45 f8 lea eax, DWORD PTR _uL$[ebp]
+ 00253 50 push eax
+ 00254 8b cb mov ecx, ebx
+ 00256 e8 00 00 00 00 call _zip64local_getLong
+ 0025b 83 c4 04 add esp, 4
+ 0025e 85 c0 test eax, eax
+ 00260 0f 85 d2 fd ff
+ ff jne $LN61@zip64local
+
+; 632 : return 0;
+; 633 :
+; 634 : if (uL != 0x06064b50) // signature of 'Zip64 end of central directory'
+
+ 00266 81 7d f8 50 4b
+ 06 06 cmp DWORD PTR _uL$[ebp], 101075792 ; 06064b50H
+ 0026d 0f 85 c5 fd ff
+ ff jne $LN61@zip64local
+
+; 635 : return 0;
+; 636 :
+; 637 : return relativeOffset;
+
+ 00273 8b c7 mov eax, edi
+ 00275 8b d6 mov edx, esi
+
+; 638 : }
+
+ 00277 5f pop edi
+ 00278 5e pop esi
+ 00279 5b pop ebx
+ 0027a 8b e5 mov esp, ebp
+ 0027c 5d pop ebp
+ 0027d c3 ret 0
+$LN53@zip64local:
+
+; 563 :
+; 564 : uBackRead = 4;
+; 565 : while (uBackRead<uMaxBack)
+
+ 0027e 8b 45 d4 mov eax, DWORD PTR _uPosFound$[ebp+4]
+ 00281 89 45 e8 mov DWORD PTR _uPosFound$1$[ebp], eax
+ 00284 8b 45 d0 mov eax, DWORD PTR _uPosFound$[ebp]
+ 00287 89 45 ec mov DWORD PTR _uPosFound$2$[ebp], eax
+ 0028a e9 f6 fe ff ff jmp $LN48@zip64local
+_zip64local_SearchCentralDir64 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _LoadCentralDirectoryRecord
+_TEXT SEGMENT
+_size_central_dir$ = -48 ; size = 8
+_number_entry_CD$ = -48 ; size = 8
+_sizeEndOfCentralDirectory$1 = -48 ; size = 8
+tv537 = -44 ; size = 4
+_VersionNeeded$ = -44 ; size = 4
+_VersionMadeBy$ = -44 ; size = 4
+_offset_central_dir$ = -40 ; size = 8
+_number_entry$ = -40 ; size = 8
+tv538 = -36 ; size = 4
+tv529 = -36 ; size = 4
+_number_entry_CD$1$ = -32 ; size = 4
+_number_entry_CD$2$ = -28 ; size = 4
+_number_entry$1$ = -24 ; size = 4
+_buf_read$1$ = -24 ; size = 4
+_size_comment$1$ = -24 ; size = 4
+_size_comment$ = -24 ; size = 4
+_read_this$2$ = -20 ; size = 4
+_offset_central_dir$1$ = -20 ; size = 4
+_number_disk_with_CD$ = -20 ; size = 4
+_byte_before_the_zipfile$2$ = -16 ; size = 4
+_byte_before_the_zipfile$1$ = -12 ; size = 4
+_size_central_dir_to_read$2$ = -8 ; size = 4
+_number_disk$ = -8 ; size = 4
+_offset_central_dir$2$ = -4 ; size = 4
+_read_this$1$ = -4 ; size = 4
+_uL$ = -4 ; size = 4
+_LoadCentralDirectoryRecord PROC ; COMDAT
+; _pziinit$ = ecx
+
+; 641 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 34 sub esp, 52 ; 00000034H
+ 00006 53 push ebx
+ 00007 56 push esi
+ 00008 8b f1 mov esi, ecx
+ 0000a 57 push edi
+
+; 642 : int err=ZIP_OK;
+
+ 0000b 33 ff xor edi, edi
+
+; 643 : ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
+; 644 :
+; 645 : ZPOS64_T size_central_dir; /* size of the central directory */
+; 646 : ZPOS64_T offset_central_dir; /* offset of start of central directory */
+; 647 : ZPOS64_T central_pos;
+; 648 : uLong uL;
+; 649 :
+; 650 : uLong number_disk; /* number of the current dist, used for
+; 651 : spaning ZIP, unsupported, always 0*/
+; 652 : uLong number_disk_with_CD; /* number the the disk with central dir, used
+; 653 : for spaning ZIP, unsupported, always 0*/
+; 654 : ZPOS64_T number_entry;
+; 655 : ZPOS64_T number_entry_CD; /* total number of entries in
+; 656 : the central dir
+; 657 : (same than number_entry on nospan) */
+; 658 : uLong VersionMadeBy;
+; 659 : uLong VersionNeeded;
+; 660 : uLong size_comment;
+; 661 :
+; 662 : int hasZIP64Record = 0;
+; 663 :
+; 664 : // check first if we find a ZIP64 record
+; 665 : central_pos = zip64local_SearchCentralDir64(&pziinit->z_filefunc,pziinit->filestream);
+
+ 0000d 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00010 e8 00 00 00 00 call _zip64local_SearchCentralDir64
+ 00015 89 55 f4 mov DWORD PTR _byte_before_the_zipfile$1$[ebp], edx
+ 00018 8b c8 mov ecx, eax
+ 0001a 89 4d f0 mov DWORD PTR _byte_before_the_zipfile$2$[ebp], ecx
+
+; 666 : if(central_pos > 0)
+
+ 0001d 85 d2 test edx, edx
+ 0001f 0f 87 92 01 00
+ 00 ja $LN53@LoadCentra
+ 00025 72 08 jb SHORT $LN55@LoadCentra
+ 00027 85 c9 test ecx, ecx
+ 00029 0f 85 88 01 00
+ 00 jne $LN53@LoadCentra
+$LN55@LoadCentra:
+
+; 667 : {
+; 668 : hasZIP64Record = 1;
+; 669 : }
+; 670 : else if(central_pos == 0)
+
+ 0002f 0b c2 or eax, edx
+ 00031 75 12 jne SHORT $LN7@LoadCentra
+
+; 671 : {
+; 672 : central_pos = zip64local_SearchCentralDir(&pziinit->z_filefunc,pziinit->filestream);
+
+ 00033 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00036 8b ce mov ecx, esi
+ 00038 e8 00 00 00 00 call _zip64local_SearchCentralDir
+ 0003d 8b c8 mov ecx, eax
+ 0003f 89 45 f0 mov DWORD PTR _byte_before_the_zipfile$2$[ebp], eax
+ 00042 89 55 f4 mov DWORD PTR _byte_before_the_zipfile$1$[ebp], edx
+$LN7@LoadCentra:
+
+; 733 : }
+; 734 : else
+; 735 : {
+; 736 : // Read End of central Directory info
+; 737 : if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 00045 6a 00 push 0
+ 00047 52 push edx
+ 00048 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 0004b 51 push ecx
+ 0004c 8b ce mov ecx, esi
+ 0004e e8 00 00 00 00 call _call_zseek64
+
+; 738 : err=ZIP_ERRNO;
+; 739 :
+; 740 : /* the signature, already checked */
+; 741 : if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK)
+
+ 00053 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00056 83 c4 0c add esp, 12 ; 0000000cH
+ 00059 83 cb ff or ebx, -1
+ 0005c 8b ce mov ecx, esi
+ 0005e 85 c0 test eax, eax
+ 00060 8d 45 fc lea eax, DWORD PTR _uL$[ebp]
+ 00063 50 push eax
+ 00064 0f 45 fb cmovne edi, ebx
+ 00067 e8 00 00 00 00 call _zip64local_getLong
+
+; 742 : err=ZIP_ERRNO;
+; 743 :
+; 744 : /* number of this disk */
+; 745 : if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK)
+
+ 0006c 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 0006f 83 c4 04 add esp, 4
+ 00072 85 c0 test eax, eax
+ 00074 8b ce mov ecx, esi
+ 00076 8d 45 f8 lea eax, DWORD PTR _number_disk$[ebp]
+ 00079 0f 45 fb cmovne edi, ebx
+ 0007c 50 push eax
+ 0007d e8 00 00 00 00 call _zip64local_getShort
+
+; 746 : err=ZIP_ERRNO;
+; 747 :
+; 748 : /* number of the disk with the start of the central directory */
+; 749 : if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK)
+
+ 00082 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00085 83 c4 04 add esp, 4
+ 00088 85 c0 test eax, eax
+ 0008a 8b ce mov ecx, esi
+ 0008c 8d 45 ec lea eax, DWORD PTR _number_disk_with_CD$[ebp]
+ 0008f 0f 45 fb cmovne edi, ebx
+ 00092 50 push eax
+ 00093 e8 00 00 00 00 call _zip64local_getShort
+
+; 750 : err=ZIP_ERRNO;
+; 751 :
+; 752 : /* total number of entries in the central dir on this disk */
+; 753 : number_entry = 0;
+; 754 : if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+
+ 00098 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 0009b 83 c4 04 add esp, 4
+ 0009e 85 c0 test eax, eax
+ 000a0 0f 57 c0 xorps xmm0, xmm0
+ 000a3 8d 45 fc lea eax, DWORD PTR _uL$[ebp]
+ 000a6 66 0f 13 45 d8 movlpd QWORD PTR _number_entry$[ebp], xmm0
+ 000ab 8b ce mov ecx, esi
+ 000ad 0f 45 fb cmovne edi, ebx
+ 000b0 50 push eax
+ 000b1 e8 00 00 00 00 call _zip64local_getShort
+ 000b6 83 c4 04 add esp, 4
+ 000b9 85 c0 test eax, eax
+ 000bb 74 0d je SHORT $LN26@LoadCentra
+
+; 755 : err=ZIP_ERRNO;
+
+ 000bd 8b 45 dc mov eax, DWORD PTR _number_entry$[ebp+4]
+ 000c0 0b fb or edi, ebx
+ 000c2 8b 5d d8 mov ebx, DWORD PTR _number_entry$[ebp]
+ 000c5 89 45 e8 mov DWORD PTR _number_entry$1$[ebp], eax
+ 000c8 eb 0a jmp SHORT $LN27@LoadCentra
+$LN26@LoadCentra:
+
+; 756 : else
+; 757 : number_entry = uL;
+
+ 000ca 8b 5d fc mov ebx, DWORD PTR _uL$[ebp]
+ 000cd c7 45 e8 00 00
+ 00 00 mov DWORD PTR _number_entry$1$[ebp], 0
+$LN27@LoadCentra:
+
+; 758 :
+; 759 : /* total number of entries in the central dir */
+; 760 : number_entry_CD = 0;
+; 761 : if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+
+ 000d4 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 000d7 8d 45 fc lea eax, DWORD PTR _uL$[ebp]
+ 000da 0f 57 c0 xorps xmm0, xmm0
+ 000dd 8b ce mov ecx, esi
+ 000df 50 push eax
+ 000e0 66 0f 13 45 d0 movlpd QWORD PTR _number_entry_CD$[ebp], xmm0
+ 000e5 e8 00 00 00 00 call _zip64local_getShort
+ 000ea 83 c4 04 add esp, 4
+ 000ed 85 c0 test eax, eax
+ 000ef 74 0b je SHORT $LN28@LoadCentra
+
+; 762 : err=ZIP_ERRNO;
+
+ 000f1 8b 45 d4 mov eax, DWORD PTR _number_entry_CD$[ebp+4]
+ 000f4 83 cf ff or edi, -1
+ 000f7 8b 4d d0 mov ecx, DWORD PTR _number_entry_CD$[ebp]
+ 000fa eb 05 jmp SHORT $LN66@LoadCentra
+$LN28@LoadCentra:
+
+; 763 : else
+; 764 : number_entry_CD = uL;
+
+ 000fc 8b 4d fc mov ecx, DWORD PTR _uL$[ebp]
+ 000ff 33 c0 xor eax, eax
+$LN66@LoadCentra:
+ 00101 89 45 e0 mov DWORD PTR _number_entry_CD$1$[ebp], eax
+ 00104 89 4d e4 mov DWORD PTR _number_entry_CD$2$[ebp], ecx
+
+; 765 :
+; 766 : if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0))
+
+ 00107 3b cb cmp ecx, ebx
+ 00109 75 11 jne SHORT $LN31@LoadCentra
+ 0010b 3b 45 e8 cmp eax, DWORD PTR _number_entry$1$[ebp]
+ 0010e 75 0c jne SHORT $LN31@LoadCentra
+ 00110 83 7d ec 00 cmp DWORD PTR _number_disk_with_CD$[ebp], 0
+ 00114 75 06 jne SHORT $LN31@LoadCentra
+ 00116 83 7d f8 00 cmp DWORD PTR _number_disk$[ebp], 0
+ 0011a 74 05 je SHORT $LN30@LoadCentra
+$LN31@LoadCentra:
+
+; 767 : err=ZIP_BADZIPFILE;
+
+ 0011c bf 99 ff ff ff mov edi, -103 ; ffffff99H
+$LN30@LoadCentra:
+
+; 768 :
+; 769 : /* size of the central directory */
+; 770 : size_central_dir = 0;
+; 771 : if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+
+ 00121 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00124 8d 45 fc lea eax, DWORD PTR _uL$[ebp]
+ 00127 0f 57 c0 xorps xmm0, xmm0
+ 0012a 8b ce mov ecx, esi
+ 0012c 50 push eax
+ 0012d 66 0f 13 45 d0 movlpd QWORD PTR _size_central_dir$[ebp], xmm0
+ 00132 e8 00 00 00 00 call _zip64local_getLong
+ 00137 83 c4 04 add esp, 4
+ 0013a 85 c0 test eax, eax
+ 0013c 74 0e je SHORT $LN32@LoadCentra
+
+; 772 : err=ZIP_ERRNO;
+
+ 0013e 8b 45 d4 mov eax, DWORD PTR _size_central_dir$[ebp+4]
+ 00141 83 cf ff or edi, -1
+ 00144 8b 5d d0 mov ebx, DWORD PTR _size_central_dir$[ebp]
+ 00147 89 45 f8 mov DWORD PTR _size_central_dir_to_read$2$[ebp], eax
+ 0014a eb 0a jmp SHORT $LN33@LoadCentra
+$LN32@LoadCentra:
+
+; 773 : else
+; 774 : size_central_dir = uL;
+
+ 0014c 8b 5d fc mov ebx, DWORD PTR _uL$[ebp]
+ 0014f c7 45 f8 00 00
+ 00 00 mov DWORD PTR _size_central_dir_to_read$2$[ebp], 0
+$LN33@LoadCentra:
+
+; 775 :
+; 776 : /* offset of start of central directory with respect to the starting disk number */
+; 777 : offset_central_dir = 0;
+; 778 : if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+
+ 00156 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00159 8d 45 fc lea eax, DWORD PTR _uL$[ebp]
+ 0015c 0f 57 c0 xorps xmm0, xmm0
+ 0015f 8b ce mov ecx, esi
+ 00161 50 push eax
+ 00162 66 0f 13 45 d8 movlpd QWORD PTR _offset_central_dir$[ebp], xmm0
+ 00167 e8 00 00 00 00 call _zip64local_getLong
+ 0016c 83 c4 04 add esp, 4
+ 0016f 85 c0 test eax, eax
+ 00171 74 0e je SHORT $LN34@LoadCentra
+
+; 779 : err=ZIP_ERRNO;
+
+ 00173 8b 45 dc mov eax, DWORD PTR _offset_central_dir$[ebp+4]
+ 00176 83 cf ff or edi, -1
+ 00179 89 45 ec mov DWORD PTR _offset_central_dir$1$[ebp], eax
+ 0017c 8b 45 d8 mov eax, DWORD PTR _offset_central_dir$[ebp]
+ 0017f eb 0a jmp SHORT $LN67@LoadCentra
+$LN34@LoadCentra:
+
+; 780 : else
+; 781 : offset_central_dir = uL;
+
+ 00181 8b 45 fc mov eax, DWORD PTR _uL$[ebp]
+ 00184 c7 45 ec 00 00
+ 00 00 mov DWORD PTR _offset_central_dir$1$[ebp], 0
+$LN67@LoadCentra:
+
+; 782 :
+; 783 :
+; 784 : /* zipfile global comment length */
+; 785 : if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &size_comment)!=ZIP_OK)
+
+ 0018b 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 0018e 8b ce mov ecx, esi
+ 00190 89 45 fc mov DWORD PTR _offset_central_dir$2$[ebp], eax
+ 00193 8d 45 e8 lea eax, DWORD PTR _size_comment$[ebp]
+ 00196 50 push eax
+ 00197 e8 00 00 00 00 call _zip64local_getShort
+ 0019c 8b 55 e8 mov edx, DWORD PTR _size_comment$[ebp]
+ 0019f 83 c4 04 add esp, 4
+ 001a2 8b 4d fc mov ecx, DWORD PTR _offset_central_dir$2$[ebp]
+ 001a5 85 c0 test eax, eax
+ 001a7 b8 ff ff ff ff mov eax, -1
+ 001ac 0f 45 f8 cmovne edi, eax
+ 001af 8b 45 ec mov eax, DWORD PTR _offset_central_dir$1$[ebp]
+ 001b2 e9 33 01 00 00 jmp $LN68@LoadCentra
+$LN53@LoadCentra:
+
+; 673 : }
+; 674 :
+; 675 : /* disable to allow appending to empty ZIP archive
+; 676 : if (central_pos==0)
+; 677 : err=ZIP_ERRNO;
+; 678 : */
+; 679 :
+; 680 : if(hasZIP64Record)
+; 681 : {
+; 682 : ZPOS64_T sizeEndOfCentralDirectory;
+; 683 : if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos, ZLIB_FILEFUNC_SEEK_SET) != 0)
+
+ 001b7 6a 00 push 0
+ 001b9 52 push edx
+ 001ba 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 001bd 51 push ecx
+ 001be 8b ce mov ecx, esi
+ 001c0 e8 00 00 00 00 call _call_zseek64
+
+; 684 : err=ZIP_ERRNO;
+; 685 :
+; 686 : /* the signature, already checked */
+; 687 : if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK)
+
+ 001c5 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 001c8 83 c4 0c add esp, 12 ; 0000000cH
+ 001cb 83 cb ff or ebx, -1
+ 001ce 8b ce mov ecx, esi
+ 001d0 85 c0 test eax, eax
+ 001d2 8d 45 fc lea eax, DWORD PTR _uL$[ebp]
+ 001d5 50 push eax
+ 001d6 0f 45 fb cmovne edi, ebx
+ 001d9 e8 00 00 00 00 call _zip64local_getLong
+
+; 688 : err=ZIP_ERRNO;
+; 689 :
+; 690 : /* size of zip64 end of central directory record */
+; 691 : if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &sizeEndOfCentralDirectory)!=ZIP_OK)
+
+ 001de 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 001e1 83 c4 04 add esp, 4
+ 001e4 85 c0 test eax, eax
+ 001e6 8b ce mov ecx, esi
+ 001e8 8d 45 d0 lea eax, DWORD PTR _sizeEndOfCentralDirectory$1[ebp]
+ 001eb 0f 45 fb cmovne edi, ebx
+ 001ee 50 push eax
+ 001ef e8 00 00 00 00 call _zip64local_getLong64
+
+; 692 : err=ZIP_ERRNO;
+; 693 :
+; 694 : /* version made by */
+; 695 : if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionMadeBy)!=ZIP_OK)
+
+ 001f4 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 001f7 83 c4 04 add esp, 4
+ 001fa 85 c0 test eax, eax
+ 001fc 8b ce mov ecx, esi
+ 001fe 8d 45 d4 lea eax, DWORD PTR _VersionMadeBy$[ebp]
+ 00201 0f 45 fb cmovne edi, ebx
+ 00204 50 push eax
+ 00205 e8 00 00 00 00 call _zip64local_getShort
+
+; 696 : err=ZIP_ERRNO;
+; 697 :
+; 698 : /* version needed to extract */
+; 699 : if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionNeeded)!=ZIP_OK)
+
+ 0020a 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 0020d 83 c4 04 add esp, 4
+ 00210 85 c0 test eax, eax
+ 00212 8b ce mov ecx, esi
+ 00214 8d 45 d4 lea eax, DWORD PTR _VersionNeeded$[ebp]
+ 00217 0f 45 fb cmovne edi, ebx
+ 0021a 50 push eax
+ 0021b e8 00 00 00 00 call _zip64local_getShort
+
+; 700 : err=ZIP_ERRNO;
+; 701 :
+; 702 : /* number of this disk */
+; 703 : if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK)
+
+ 00220 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00223 83 c4 04 add esp, 4
+ 00226 85 c0 test eax, eax
+ 00228 8b ce mov ecx, esi
+ 0022a 8d 45 f8 lea eax, DWORD PTR _number_disk$[ebp]
+ 0022d 0f 45 fb cmovne edi, ebx
+ 00230 50 push eax
+ 00231 e8 00 00 00 00 call _zip64local_getLong
+
+; 704 : err=ZIP_ERRNO;
+; 705 :
+; 706 : /* number of the disk with the start of the central directory */
+; 707 : if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK)
+
+ 00236 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00239 83 c4 04 add esp, 4
+ 0023c 85 c0 test eax, eax
+ 0023e 8b ce mov ecx, esi
+ 00240 8d 45 ec lea eax, DWORD PTR _number_disk_with_CD$[ebp]
+ 00243 0f 45 fb cmovne edi, ebx
+ 00246 50 push eax
+ 00247 e8 00 00 00 00 call _zip64local_getLong
+
+; 708 : err=ZIP_ERRNO;
+; 709 :
+; 710 : /* total number of entries in the central directory on this disk */
+; 711 : if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &number_entry)!=ZIP_OK)
+
+ 0024c 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 0024f 83 c4 04 add esp, 4
+ 00252 85 c0 test eax, eax
+ 00254 8b ce mov ecx, esi
+ 00256 8d 45 d8 lea eax, DWORD PTR _number_entry$[ebp]
+ 00259 0f 45 fb cmovne edi, ebx
+ 0025c 50 push eax
+ 0025d e8 00 00 00 00 call _zip64local_getLong64
+
+; 712 : err=ZIP_ERRNO;
+; 713 :
+; 714 : /* total number of entries in the central directory */
+; 715 : if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&number_entry_CD)!=ZIP_OK)
+
+ 00262 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00265 83 c4 04 add esp, 4
+ 00268 85 c0 test eax, eax
+ 0026a 8b ce mov ecx, esi
+ 0026c 8d 45 d0 lea eax, DWORD PTR _number_entry_CD$[ebp]
+ 0026f 0f 45 fb cmovne edi, ebx
+ 00272 50 push eax
+ 00273 e8 00 00 00 00 call _zip64local_getLong64
+ 00278 83 c4 04 add esp, 4
+ 0027b 85 c0 test eax, eax
+
+; 716 : err=ZIP_ERRNO;
+; 717 :
+; 718 : if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0))
+
+ 0027d 8b 45 d0 mov eax, DWORD PTR _number_entry_CD$[ebp]
+ 00280 0f 45 fb cmovne edi, ebx
+ 00283 89 45 e4 mov DWORD PTR _number_entry_CD$2$[ebp], eax
+ 00286 3b 45 d8 cmp eax, DWORD PTR _number_entry$[ebp]
+ 00289 8b 45 d4 mov eax, DWORD PTR _number_entry_CD$[ebp+4]
+ 0028c 89 45 e0 mov DWORD PTR _number_entry_CD$1$[ebp], eax
+ 0028f 75 11 jne SHORT $LN19@LoadCentra
+ 00291 3b 45 dc cmp eax, DWORD PTR _number_entry$[ebp+4]
+ 00294 75 0c jne SHORT $LN19@LoadCentra
+ 00296 83 7d ec 00 cmp DWORD PTR _number_disk_with_CD$[ebp], 0
+ 0029a 75 06 jne SHORT $LN19@LoadCentra
+ 0029c 83 7d f8 00 cmp DWORD PTR _number_disk$[ebp], 0
+ 002a0 74 05 je SHORT $LN18@LoadCentra
+$LN19@LoadCentra:
+
+; 719 : err=ZIP_BADZIPFILE;
+
+ 002a2 bf 99 ff ff ff mov edi, -103 ; ffffff99H
+$LN18@LoadCentra:
+
+; 720 :
+; 721 : /* size of the central directory */
+; 722 : if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&size_central_dir)!=ZIP_OK)
+
+ 002a7 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 002aa 8d 45 d0 lea eax, DWORD PTR _size_central_dir$[ebp]
+ 002ad 50 push eax
+ 002ae 8b ce mov ecx, esi
+ 002b0 e8 00 00 00 00 call _zip64local_getLong64
+
+; 723 : err=ZIP_ERRNO;
+; 724 :
+; 725 : /* offset of start of central directory with respect to the
+; 726 : starting disk number */
+; 727 : if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&offset_central_dir)!=ZIP_OK)
+
+ 002b5 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 002b8 83 c4 04 add esp, 4
+ 002bb 85 c0 test eax, eax
+ 002bd 8b ce mov ecx, esi
+ 002bf 8d 45 d8 lea eax, DWORD PTR _offset_central_dir$[ebp]
+ 002c2 0f 45 fb cmovne edi, ebx
+ 002c5 50 push eax
+ 002c6 e8 00 00 00 00 call _zip64local_getLong64
+
+; 728 : err=ZIP_ERRNO;
+; 729 :
+; 730 : // TODO..
+; 731 : // read the comment from the standard central header.
+; 732 : size_comment = 0;
+
+ 002cb 8b 4d d8 mov ecx, DWORD PTR _offset_central_dir$[ebp]
+ 002ce 83 c4 04 add esp, 4
+ 002d1 85 c0 test eax, eax
+ 002d3 89 4d fc mov DWORD PTR _offset_central_dir$2$[ebp], ecx
+ 002d6 8b 45 d4 mov eax, DWORD PTR _size_central_dir$[ebp+4]
+ 002d9 0f 45 fb cmovne edi, ebx
+ 002dc 89 45 f8 mov DWORD PTR _size_central_dir_to_read$2$[ebp], eax
+ 002df 8b 45 dc mov eax, DWORD PTR _offset_central_dir$[ebp+4]
+ 002e2 33 d2 xor edx, edx
+ 002e4 8b 5d d0 mov ebx, DWORD PTR _size_central_dir$[ebp]
+ 002e7 89 45 ec mov DWORD PTR _offset_central_dir$1$[ebp], eax
+$LN68@LoadCentra:
+
+; 786 : err=ZIP_ERRNO;
+; 787 : }
+; 788 :
+; 789 : if ((central_pos<offset_central_dir+size_central_dir) &&
+
+ 002ea 03 cb add ecx, ebx
+ 002ec 89 55 e8 mov DWORD PTR _size_comment$1$[ebp], edx
+ 002ef 89 4d dc mov DWORD PTR tv529[ebp], ecx
+ 002f2 13 45 f8 adc eax, DWORD PTR _size_central_dir_to_read$2$[ebp]
+ 002f5 8b 4d f4 mov ecx, DWORD PTR _byte_before_the_zipfile$1$[ebp]
+ 002f8 3b c8 cmp ecx, eax
+ 002fa 0f 82 8b 01 00
+ 00 jb $LN52@LoadCentra
+ 00300 77 0c ja SHORT $LN56@LoadCentra
+ 00302 8b 45 dc mov eax, DWORD PTR tv529[ebp]
+ 00305 39 45 f0 cmp DWORD PTR _byte_before_the_zipfile$2$[ebp], eax
+ 00308 0f 82 7d 01 00
+ 00 jb $LN52@LoadCentra
+$LN56@LoadCentra:
+
+; 790 : (err==ZIP_OK))
+; 791 : err=ZIP_BADZIPFILE;
+; 792 :
+; 793 : if (err!=ZIP_OK)
+
+ 0030e 85 ff test edi, edi
+ 00310 0f 85 75 01 00
+ 00 jne $LN52@LoadCentra
+
+; 797 : }
+; 798 :
+; 799 : if (size_comment>0)
+
+ 00316 85 d2 test edx, edx
+ 00318 74 36 je SHORT $LN40@LoadCentra
+
+; 800 : {
+; 801 : pziinit->globalcomment = (char*)ALLOC(size_comment+1);
+
+ 0031a 8d 42 01 lea eax, DWORD PTR [edx+1]
+ 0031d 50 push eax
+ 0031e ff 15 00 00 00
+ 00 call DWORD PTR __imp__malloc
+ 00324 83 c4 04 add esp, 4
+ 00327 89 86 00 01 01
+ 00 mov DWORD PTR [esi+65792], eax
+
+; 802 : if (pziinit->globalcomment)
+
+ 0032d 85 c0 test eax, eax
+ 0032f 74 1c je SHORT $LN65@LoadCentra
+
+; 803 : {
+; 804 : size_comment = ZREAD64(pziinit->z_filefunc, pziinit->filestream, pziinit->globalcomment,size_comment);
+
+ 00331 ff 75 e8 push DWORD PTR _size_comment$1$[ebp]
+ 00334 50 push eax
+ 00335 ff 76 2c push DWORD PTR [esi+44]
+ 00338 8b 46 04 mov eax, DWORD PTR [esi+4]
+ 0033b ff 76 1c push DWORD PTR [esi+28]
+ 0033e ff d0 call eax
+
+; 805 : pziinit->globalcomment[size_comment]=0;
+
+ 00340 8b 8e 00 01 01
+ 00 mov ecx, DWORD PTR [esi+65792]
+ 00346 83 c4 10 add esp, 16 ; 00000010H
+ 00349 c6 04 08 00 mov BYTE PTR [eax+ecx], 0
+$LN65@LoadCentra:
+ 0034d 8b 4d f4 mov ecx, DWORD PTR _byte_before_the_zipfile$1$[ebp]
+$LN40@LoadCentra:
+
+; 806 : }
+; 807 : }
+; 808 :
+; 809 : byte_before_the_zipfile = central_pos - (offset_central_dir+size_central_dir);
+
+ 00350 8b 45 f0 mov eax, DWORD PTR _byte_before_the_zipfile$2$[ebp]
+ 00353 2b 45 fc sub eax, DWORD PTR _offset_central_dir$2$[ebp]
+
+; 810 : pziinit->add_position_when_writting_offset = byte_before_the_zipfile;
+; 811 :
+; 812 : {
+; 813 : ZPOS64_T size_central_dir_to_read = size_central_dir;
+; 814 : size_t buf_size = SIZEDATA_INDATABLOCK;
+; 815 : void* buf_read = (void*)ALLOC(buf_size);
+
+ 00356 68 f0 0f 00 00 push 4080 ; 00000ff0H
+ 0035b 1b 4d ec sbb ecx, DWORD PTR _offset_central_dir$1$[ebp]
+ 0035e 2b c3 sub eax, ebx
+ 00360 89 45 f0 mov DWORD PTR _byte_before_the_zipfile$2$[ebp], eax
+ 00363 1b 4d f8 sbb ecx, DWORD PTR _size_central_dir_to_read$2$[ebp]
+ 00366 89 4d f4 mov DWORD PTR _byte_before_the_zipfile$1$[ebp], ecx
+ 00369 89 86 f0 00 01
+ 00 mov DWORD PTR [esi+65776], eax
+ 0036f 89 8e f4 00 01
+ 00 mov DWORD PTR [esi+65780], ecx
+ 00375 ff 15 00 00 00
+ 00 call DWORD PTR __imp__malloc
+
+; 816 : if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir + byte_before_the_zipfile, ZLIB_FILEFUNC_SEEK_SET) != 0)
+
+ 0037b 8b 4d f0 mov ecx, DWORD PTR _byte_before_the_zipfile$2$[ebp]
+ 0037e 83 c4 04 add esp, 4
+ 00381 03 4d fc add ecx, DWORD PTR _offset_central_dir$2$[ebp]
+ 00384 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00387 89 45 e8 mov DWORD PTR _buf_read$1$[ebp], eax
+ 0038a 8b 45 f4 mov eax, DWORD PTR _byte_before_the_zipfile$1$[ebp]
+ 0038d 13 45 ec adc eax, DWORD PTR _offset_central_dir$1$[ebp]
+ 00390 6a 00 push 0
+ 00392 50 push eax
+ 00393 89 4d d4 mov DWORD PTR tv537[ebp], ecx
+ 00396 51 push ecx
+ 00397 8b ce mov ecx, esi
+ 00399 89 45 dc mov DWORD PTR tv538[ebp], eax
+ 0039c e8 00 00 00 00 call _call_zseek64
+ 003a1 83 c4 0c add esp, 12 ; 0000000cH
+ 003a4 85 c0 test eax, eax
+ 003a6 b8 ff ff ff ff mov eax, -1
+ 003ab 0f 45 f8 cmovne edi, eax
+
+; 817 : err=ZIP_ERRNO;
+; 818 :
+; 819 : while ((size_central_dir_to_read>0) && (err==ZIP_OK))
+
+ 003ae 8b 45 f8 mov eax, DWORD PTR _size_central_dir_to_read$2$[ebp]
+ 003b1 85 c0 test eax, eax
+ 003b3 75 0b jne SHORT $LL2@LoadCentra
+ 003b5 85 db test ebx, ebx
+ 003b7 74 75 je SHORT $LN60@LoadCentra
+ 003b9 0f 1f 80 00 00
+ 00 00 npad 7
+$LL2@LoadCentra:
+ 003c0 85 ff test edi, edi
+ 003c2 75 6a jne SHORT $LN60@LoadCentra
+
+; 820 : {
+; 821 : ZPOS64_T read_this = SIZEDATA_INDATABLOCK;
+
+ 003c4 c7 45 ec 00 00
+ 00 00 mov DWORD PTR _read_this$2$[ebp], 0
+ 003cb bf f0 0f 00 00 mov edi, 4080 ; 00000ff0H
+ 003d0 89 7d fc mov DWORD PTR _read_this$1$[ebp], edi
+
+; 822 : if (read_this > size_central_dir_to_read)
+
+ 003d3 85 c0 test eax, eax
+ 003d5 77 0e ja SHORT $LN42@LoadCentra
+ 003d7 72 04 jb SHORT $LN58@LoadCentra
+ 003d9 3b df cmp ebx, edi
+ 003db 73 08 jae SHORT $LN42@LoadCentra
+$LN58@LoadCentra:
+
+; 823 : read_this = size_central_dir_to_read;
+
+ 003dd 8b fb mov edi, ebx
+ 003df 89 5d fc mov DWORD PTR _read_this$1$[ebp], ebx
+ 003e2 89 45 ec mov DWORD PTR _read_this$2$[ebp], eax
+$LN42@LoadCentra:
+
+; 824 :
+; 825 : if (ZREAD64(pziinit->z_filefunc, pziinit->filestream,buf_read,(uLong)read_this) != read_this)
+
+ 003e5 8b 46 04 mov eax, DWORD PTR [esi+4]
+ 003e8 57 push edi
+ 003e9 ff 75 e8 push DWORD PTR _buf_read$1$[ebp]
+ 003ec ff 76 2c push DWORD PTR [esi+44]
+ 003ef ff 76 1c push DWORD PTR [esi+28]
+ 003f2 ff d0 call eax
+ 003f4 83 c4 10 add esp, 16 ; 00000010H
+ 003f7 33 c9 xor ecx, ecx
+ 003f9 3b c7 cmp eax, edi
+ 003fb 75 18 jne SHORT $LN59@LoadCentra
+ 003fd 3b 4d ec cmp ecx, DWORD PTR _read_this$2$[ebp]
+ 00400 75 13 jne SHORT $LN59@LoadCentra
+
+; 827 :
+; 828 : if (err==ZIP_OK)
+; 829 : err = add_data_in_datablock(&pziinit->central_dir,buf_read, (uLong)read_this);
+
+ 00402 8b 55 e8 mov edx, DWORD PTR _buf_read$1$[ebp]
+ 00405 8d 4e 30 lea ecx, DWORD PTR [esi+48]
+ 00408 57 push edi
+ 00409 e8 00 00 00 00 call _add_data_in_datablock
+ 0040e 83 c4 04 add esp, 4
+ 00411 8b f8 mov edi, eax
+ 00413 eb 03 jmp SHORT $LN44@LoadCentra
+$LN59@LoadCentra:
+
+; 826 : err=ZIP_ERRNO;
+
+ 00415 83 cf ff or edi, -1
+$LN44@LoadCentra:
+
+; 830 :
+; 831 : size_central_dir_to_read-=read_this;
+
+ 00418 2b 5d fc sub ebx, DWORD PTR _read_this$1$[ebp]
+ 0041b 8b 45 f8 mov eax, DWORD PTR _size_central_dir_to_read$2$[ebp]
+ 0041e 1b 45 ec sbb eax, DWORD PTR _read_this$2$[ebp]
+ 00421 89 45 f8 mov DWORD PTR _size_central_dir_to_read$2$[ebp], eax
+ 00424 85 c0 test eax, eax
+ 00426 77 98 ja SHORT $LL2@LoadCentra
+
+; 817 : err=ZIP_ERRNO;
+; 818 :
+; 819 : while ((size_central_dir_to_read>0) && (err==ZIP_OK))
+
+ 00428 72 04 jb SHORT $LN60@LoadCentra
+ 0042a 85 db test ebx, ebx
+ 0042c 75 92 jne SHORT $LL2@LoadCentra
+$LN60@LoadCentra:
+
+; 832 : }
+; 833 : TRYFREE(buf_read);
+
+ 0042e 8b 45 e8 mov eax, DWORD PTR _buf_read$1$[ebp]
+ 00431 85 c0 test eax, eax
+ 00433 74 0a je SHORT $LN45@LoadCentra
+ 00435 50 push eax
+ 00436 ff 15 00 00 00
+ 00 call DWORD PTR __imp__free
+ 0043c 83 c4 04 add esp, 4
+$LN45@LoadCentra:
+
+; 834 : }
+; 835 : pziinit->begin_pos = byte_before_the_zipfile;
+
+ 0043f 8b 45 f0 mov eax, DWORD PTR _byte_before_the_zipfile$2$[ebp]
+
+; 836 : pziinit->number_entry = number_entry_CD;
+; 837 :
+; 838 : if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir+byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET) != 0)
+
+ 00442 8b ce mov ecx, esi
+ 00444 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00447 89 86 e8 00 01
+ 00 mov DWORD PTR [esi+65768], eax
+ 0044d 8b 45 f4 mov eax, DWORD PTR _byte_before_the_zipfile$1$[ebp]
+ 00450 6a 00 push 0
+ 00452 ff 75 dc push DWORD PTR tv538[ebp]
+ 00455 89 86 ec 00 01
+ 00 mov DWORD PTR [esi+65772], eax
+ 0045b 8b 45 e4 mov eax, DWORD PTR _number_entry_CD$2$[ebp]
+ 0045e ff 75 d4 push DWORD PTR tv537[ebp]
+ 00461 89 86 f8 00 01
+ 00 mov DWORD PTR [esi+65784], eax
+ 00467 8b 45 e0 mov eax, DWORD PTR _number_entry_CD$1$[ebp]
+ 0046a 89 86 fc 00 01
+ 00 mov DWORD PTR [esi+65788], eax
+ 00470 e8 00 00 00 00 call _call_zseek64
+ 00475 83 c4 0c add esp, 12 ; 0000000cH
+ 00478 85 c0 test eax, eax
+ 0047a b8 ff ff ff ff mov eax, -1
+ 0047f 0f 45 f8 cmovne edi, eax
+
+; 839 : err=ZIP_ERRNO;
+; 840 :
+; 841 : return err;
+
+ 00482 8b c7 mov eax, edi
+
+; 842 : }
+
+ 00484 5f pop edi
+ 00485 5e pop esi
+ 00486 5b pop ebx
+ 00487 8b e5 mov esp, ebp
+ 00489 5d pop ebp
+ 0048a c3 ret 0
+$LN52@LoadCentra:
+
+; 794 : {
+; 795 : ZCLOSE64(pziinit->z_filefunc, pziinit->filestream);
+
+ 0048b ff 76 2c push DWORD PTR [esi+44]
+ 0048e 8b 4e 14 mov ecx, DWORD PTR [esi+20]
+ 00491 ff 76 1c push DWORD PTR [esi+28]
+ 00494 ff d1 call ecx
+ 00496 83 c4 08 add esp, 8
+
+; 796 : return ZIP_ERRNO;
+
+ 00499 83 c8 ff or eax, -1
+
+; 842 : }
+
+ 0049c 5f pop edi
+ 0049d 5e pop esi
+ 0049e 5b pop ebx
+ 0049f 8b e5 mov esp, ebp
+ 004a1 5d pop ebp
+ 004a2 c3 ret 0
+_LoadCentralDirectoryRecord ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zipOpen3@16
+_TEXT SEGMENT
+_ziinit$ = -65800 ; size = 65800
+_globalcomment$ = 8 ; size = 4
+_pzlib_filefunc64_32_def$ = 12 ; size = 4
+_zipOpen3@16 PROC ; COMDAT
+; _pathname$ = ecx
+; _append$ = edx
+
+; 850 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 b8 0c 01 01 00 mov eax, 65804 ; 0001010cH
+ 0000b e8 00 00 00 00 call __chkstk
+
+; 851 : zip64_internal ziinit;
+; 852 : zip64_internal* zi;
+; 853 : int err=ZIP_OK;
+; 854 :
+; 855 : ziinit.z_filefunc.zseek32_file = NULL;
+; 856 : ziinit.z_filefunc.ztell32_file = NULL;
+; 857 : if (pzlib_filefunc64_32_def==NULL)
+
+ 00010 8b 45 0c mov eax, DWORD PTR _pzlib_filefunc64_32_def$[ebp]
+ 00013 53 push ebx
+ 00014 56 push esi
+ 00015 33 db xor ebx, ebx
+ 00017 89 5c 24 34 mov DWORD PTR _ziinit$[esp+65852], ebx
+ 0001b 89 5c 24 30 mov DWORD PTR _ziinit$[esp+65848], ebx
+ 0001f 57 push edi
+ 00020 8b fa mov edi, edx
+ 00022 8b d1 mov edx, ecx
+ 00024 85 c0 test eax, eax
+ 00026 75 0b jne SHORT $LN2@zipOpen3
+
+; 858 : fill_fopen64_filefunc(&ziinit.z_filefunc.zfile_func64);
+
+ 00028 8d 4c 24 10 lea ecx, DWORD PTR _ziinit$[esp+65816]
+ 0002c e8 00 00 00 00 call _fill_fopen64_filefunc
+ 00031 eb 23 jmp SHORT $LN3@zipOpen3
+$LN2@zipOpen3:
+
+; 859 : else
+; 860 : ziinit.z_filefunc = *pzlib_filefunc64_32_def;
+
+ 00033 0f 10 00 movups xmm0, XMMWORD PTR [eax]
+ 00036 0f 11 44 24 10 movups XMMWORD PTR _ziinit$[esp+65816], xmm0
+ 0003b 0f 10 40 10 movups xmm0, XMMWORD PTR [eax+16]
+ 0003f 0f 11 44 24 20 movups XMMWORD PTR _ziinit$[esp+65832], xmm0
+ 00044 f3 0f 7e 40 20 movq xmm0, QWORD PTR [eax+32]
+ 00049 8b 40 28 mov eax, DWORD PTR [eax+40]
+ 0004c 66 0f d6 44 24
+ 30 movq QWORD PTR _ziinit$[esp+65848], xmm0
+ 00052 89 44 24 38 mov DWORD PTR _ziinit$[esp+65856], eax
+$LN3@zipOpen3:
+
+; 861 :
+; 862 : ziinit.filestream = ZOPEN64(ziinit.z_filefunc,
+
+ 00056 33 c0 xor eax, eax
+ 00058 8d 4c 24 10 lea ecx, DWORD PTR _ziinit$[esp+65816]
+ 0005c 85 ff test edi, edi
+ 0005e 0f 94 c0 sete al
+ 00061 8d 04 85 07 00
+ 00 00 lea eax, DWORD PTR [eax*4+7]
+ 00068 50 push eax
+ 00069 e8 00 00 00 00 call _call_zopen64
+ 0006e 8b f0 mov esi, eax
+ 00070 83 c4 04 add esp, 4
+ 00073 89 74 24 3c mov DWORD PTR _ziinit$[esp+65860], esi
+
+; 863 : pathname,
+; 864 : (append == APPEND_STATUS_CREATE) ?
+; 865 : (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_CREATE) :
+; 866 : (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_EXISTING));
+; 867 :
+; 868 : if (ziinit.filestream == NULL)
+
+ 00077 85 f6 test esi, esi
+ 00079 74 7e je SHORT $LN14@zipOpen3
+
+; 869 : return NULL;
+; 870 :
+; 871 : if (append == APPEND_STATUS_CREATEAFTER)
+
+ 0007b 83 ff 01 cmp edi, 1
+ 0007e 75 14 jne SHORT $LN5@zipOpen3
+
+; 872 : ZSEEK64(ziinit.z_filefunc,ziinit.filestream,0,SEEK_END);
+
+ 00080 6a 02 push 2
+ 00082 6a 00 push 0
+ 00084 6a 00 push 0
+ 00086 8b d6 mov edx, esi
+ 00088 8d 4c 24 1c lea ecx, DWORD PTR _ziinit$[esp+65828]
+ 0008c e8 00 00 00 00 call _call_zseek64
+ 00091 83 c4 0c add esp, 12 ; 0000000cH
+$LN5@zipOpen3:
+
+; 873 :
+; 874 : ziinit.begin_pos = ZTELL64(ziinit.z_filefunc,ziinit.filestream);
+
+ 00094 8b d6 mov edx, esi
+ 00096 8d 4c 24 10 lea ecx, DWORD PTR _ziinit$[esp+65816]
+ 0009a e8 00 00 00 00 call _call_ztell64
+ 0009f 0f 57 c0 xorps xmm0, xmm0
+ 000a2 89 84 24 f8 00
+ 01 00 mov DWORD PTR _ziinit$[esp+131584], eax
+
+; 875 : ziinit.in_opened_file_inzip = 0;
+; 876 : ziinit.ci.stream_initialised = 0;
+; 877 : ziinit.number_entry = 0;
+; 878 : ziinit.add_position_when_writting_offset = 0;
+; 879 : init_linkedlist(&(ziinit.central_dir));
+
+ 000a9 8d 4c 24 40 lea ecx, DWORD PTR _ziinit$[esp+65864]
+ 000ad 89 94 24 fc 00
+ 01 00 mov DWORD PTR _ziinit$[esp+131588], edx
+ 000b4 89 5c 24 48 mov DWORD PTR _ziinit$[esp+65872], ebx
+ 000b8 89 9c 24 88 00
+ 00 00 mov DWORD PTR _ziinit$[esp+65936], ebx
+ 000bf 66 0f 13 84 24
+ 08 01 01 00 movlpd QWORD PTR _ziinit$[esp+131600], xmm0
+ 000c8 66 0f 13 84 24
+ 00 01 01 00 movlpd QWORD PTR _ziinit$[esp+131592], xmm0
+ 000d1 e8 00 00 00 00 call _init_linkedlist
+
+; 880 :
+; 881 :
+; 882 :
+; 883 : zi = (zip64_internal*)ALLOC(sizeof(zip64_internal));
+
+ 000d6 68 08 01 01 00 push 65800 ; 00010108H
+ 000db ff 15 00 00 00
+ 00 call DWORD PTR __imp__malloc
+ 000e1 8b f0 mov esi, eax
+ 000e3 83 c4 04 add esp, 4
+
+; 884 : if (zi==NULL)
+
+ 000e6 85 f6 test esi, esi
+ 000e8 75 1a jne SHORT $LN6@zipOpen3
+
+; 885 : {
+; 886 : ZCLOSE64(ziinit.z_filefunc,ziinit.filestream);
+
+ 000ea ff 74 24 3c push DWORD PTR _ziinit$[esp+65860]
+ 000ee ff 74 24 30 push DWORD PTR _ziinit$[esp+65848]
+ 000f2 ff 54 24 2c call DWORD PTR _ziinit$[esp+65844]
+ 000f6 83 c4 08 add esp, 8
+$LN14@zipOpen3:
+
+; 887 : return NULL;
+
+ 000f9 33 c0 xor eax, eax
+
+; 917 : }
+; 918 : }
+
+ 000fb 5f pop edi
+ 000fc 5e pop esi
+ 000fd 5b pop ebx
+ 000fe 8b e5 mov esp, ebp
+ 00100 5d pop ebp
+ 00101 c2 08 00 ret 8
+$LN6@zipOpen3:
+
+; 888 : }
+; 889 :
+; 890 : /* now we add file in a zipfile */
+; 891 : # ifndef NO_ADDFILEINEXISTINGZIP
+; 892 : ziinit.globalcomment = NULL;
+
+ 00104 33 c0 xor eax, eax
+ 00106 89 84 24 10 01
+ 01 00 mov DWORD PTR _ziinit$[esp+131608], eax
+
+; 893 : if (append == APPEND_STATUS_ADDINZIP)
+
+ 0010d 83 ff 02 cmp edi, 2
+ 00110 75 12 jne SHORT $LN7@zipOpen3
+
+; 894 : {
+; 895 : // Read and Cache Central Directory Records
+; 896 : err = LoadCentralDirectoryRecord(&ziinit);
+
+ 00112 8d 4c 24 10 lea ecx, DWORD PTR _ziinit$[esp+65816]
+ 00116 e8 00 00 00 00 call _LoadCentralDirectoryRecord
+ 0011b 8b d8 mov ebx, eax
+ 0011d 8b 84 24 10 01
+ 01 00 mov eax, DWORD PTR _ziinit$[esp+131608]
+$LN7@zipOpen3:
+
+; 897 : }
+; 898 :
+; 899 : if (globalcomment)
+
+ 00124 8b 4d 08 mov ecx, DWORD PTR _globalcomment$[ebp]
+ 00127 85 c9 test ecx, ecx
+ 00129 74 02 je SHORT $LN8@zipOpen3
+
+; 900 : {
+; 901 : *globalcomment = ziinit.globalcomment;
+
+ 0012b 89 01 mov DWORD PTR [ecx], eax
+$LN8@zipOpen3:
+
+; 902 : }
+; 903 : # endif /* !NO_ADDFILEINEXISTINGZIP*/
+; 904 :
+; 905 : if (err != ZIP_OK)
+
+ 0012d 85 db test ebx, ebx
+ 0012f 74 21 je SHORT $LN9@zipOpen3
+
+; 906 : {
+; 907 : # ifndef NO_ADDFILEINEXISTINGZIP
+; 908 : TRYFREE(ziinit.globalcomment);
+
+ 00131 8b 3d 00 00 00
+ 00 mov edi, DWORD PTR __imp__free
+ 00137 85 c0 test eax, eax
+ 00139 74 06 je SHORT $LN11@zipOpen3
+ 0013b 50 push eax
+ 0013c ff d7 call edi
+ 0013e 83 c4 04 add esp, 4
+$LN11@zipOpen3:
+
+; 909 : # endif /* !NO_ADDFILEINEXISTINGZIP*/
+; 910 : TRYFREE(zi);
+
+ 00141 56 push esi
+ 00142 ff d7 call edi
+ 00144 83 c4 04 add esp, 4
+
+; 911 : return NULL;
+
+ 00147 33 c0 xor eax, eax
+
+; 917 : }
+; 918 : }
+
+ 00149 5f pop edi
+ 0014a 5e pop esi
+ 0014b 5b pop ebx
+ 0014c 8b e5 mov esp, ebp
+ 0014e 5d pop ebp
+ 0014f c2 08 00 ret 8
+$LN9@zipOpen3:
+
+; 912 : }
+; 913 : else
+; 914 : {
+; 915 : *zi = ziinit;
+
+ 00152 68 08 01 01 00 push 65800 ; 00010108H
+ 00157 8d 44 24 14 lea eax, DWORD PTR _ziinit$[esp+65820]
+ 0015b 50 push eax
+ 0015c 56 push esi
+ 0015d e8 00 00 00 00 call _memcpy
+ 00162 83 c4 0c add esp, 12 ; 0000000cH
+
+; 916 : return (zipFile)zi;
+
+ 00165 8b c6 mov eax, esi
+
+; 917 : }
+; 918 : }
+
+ 00167 5f pop edi
+ 00168 5e pop esi
+ 00169 5b pop ebx
+ 0016a 8b e5 mov esp, ebp
+ 0016c 5d pop ebp
+ 0016d c2 08 00 ret 8
+_zipOpen3@16 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zipOpen2@16
+_TEXT SEGMENT
+_zlib_filefunc64_32_def_fill$1 = -44 ; size = 44
+_pathname$ = 8 ; size = 4
+_append$ = 12 ; size = 4
+_globalcomment$ = 16 ; size = 4
+_pzlib_filefunc32_def$ = 20 ; size = 4
+_zipOpen2@16 PROC ; COMDAT
+
+; 921 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+
+; 922 : if (pzlib_filefunc32_def != NULL)
+
+ 00006 8b 55 14 mov edx, DWORD PTR _pzlib_filefunc32_def$[ebp]
+ 00009 83 ec 30 sub esp, 48 ; 00000030H
+ 0000c 85 d2 test edx, edx
+ 0000e 74 20 je SHORT $LN2@zipOpen2
+
+; 923 : {
+; 924 : zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
+; 925 : fill_zlib_filefunc64_32_def_from_filefunc32(&zlib_filefunc64_32_def_fill,pzlib_filefunc32_def);
+
+ 00010 8d 4c 24 04 lea ecx, DWORD PTR _zlib_filefunc64_32_def_fill$1[esp+48]
+ 00014 e8 00 00 00 00 call _fill_zlib_filefunc64_32_def_from_filefunc32
+
+; 926 : return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill);
+; 927 : }
+; 928 : else
+; 929 : return zipOpen3(pathname, append, globalcomment, NULL);
+
+ 00019 8b 55 0c mov edx, DWORD PTR _append$[ebp]
+ 0001c 8b c1 mov eax, ecx
+ 0001e 8b 4d 08 mov ecx, DWORD PTR _pathname$[ebp]
+ 00021 50 push eax
+ 00022 ff 75 10 push DWORD PTR _globalcomment$[ebp]
+ 00025 e8 00 00 00 00 call _zipOpen3@16
+
+; 930 : }
+
+ 0002a 8b e5 mov esp, ebp
+ 0002c 5d pop ebp
+ 0002d c2 10 00 ret 16 ; 00000010H
+$LN2@zipOpen2:
+
+; 926 : return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill);
+; 927 : }
+; 928 : else
+; 929 : return zipOpen3(pathname, append, globalcomment, NULL);
+
+ 00030 8b 55 0c mov edx, DWORD PTR _append$[ebp]
+ 00033 8b 4d 08 mov ecx, DWORD PTR _pathname$[ebp]
+ 00036 6a 00 push 0
+ 00038 ff 75 10 push DWORD PTR _globalcomment$[ebp]
+ 0003b e8 00 00 00 00 call _zipOpen3@16
+
+; 930 : }
+
+ 00040 8b e5 mov esp, ebp
+ 00042 5d pop ebp
+ 00043 c2 10 00 ret 16 ; 00000010H
+_zipOpen2@16 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zipOpen2_64@16
+_TEXT SEGMENT
+_zlib_filefunc64_32_def_fill$1 = -44 ; size = 44
+_pathname$ = 8 ; size = 4
+_append$ = 12 ; size = 4
+_globalcomment$ = 16 ; size = 4
+_pzlib_filefunc_def$ = 20 ; size = 4
+_zipOpen2_64@16 PROC ; COMDAT
+
+; 933 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+
+; 934 : if (pzlib_filefunc_def != NULL)
+
+ 00006 8b 45 14 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp]
+ 00009 83 ec 30 sub esp, 48 ; 00000030H
+
+; 940 : return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill);
+
+ 0000c 8b 55 0c mov edx, DWORD PTR _append$[ebp]
+ 0000f 8b 4d 08 mov ecx, DWORD PTR _pathname$[ebp]
+ 00012 85 c0 test eax, eax
+ 00014 74 34 je SHORT $LN2@zipOpen2_6
+
+; 935 : {
+; 936 : zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
+; 937 : zlib_filefunc64_32_def_fill.zfile_func64 = *pzlib_filefunc_def;
+; 938 : zlib_filefunc64_32_def_fill.ztell32_file = NULL;
+
+ 00016 0f 10 00 movups xmm0, XMMWORD PTR [eax]
+ 00019 c7 44 24 28 00
+ 00 00 00 mov DWORD PTR _zlib_filefunc64_32_def_fill$1[esp+84], 0
+
+; 939 : zlib_filefunc64_32_def_fill.zseek32_file = NULL;
+
+ 00021 c7 44 24 2c 00
+ 00 00 00 mov DWORD PTR _zlib_filefunc64_32_def_fill$1[esp+88], 0
+ 00029 0f 11 44 24 04 movups XMMWORD PTR _zlib_filefunc64_32_def_fill$1[esp+48], xmm0
+ 0002e 0f 10 40 10 movups xmm0, XMMWORD PTR [eax+16]
+
+; 940 : return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill);
+
+ 00032 8d 44 24 04 lea eax, DWORD PTR _zlib_filefunc64_32_def_fill$1[esp+48]
+ 00036 50 push eax
+
+; 941 : }
+; 942 : else
+; 943 : return zipOpen3(pathname, append, globalcomment, NULL);
+
+ 00037 ff 75 10 push DWORD PTR _globalcomment$[ebp]
+ 0003a 0f 11 44 24 1c movups XMMWORD PTR _zlib_filefunc64_32_def_fill$1[esp+72], xmm0
+ 0003f e8 00 00 00 00 call _zipOpen3@16
+
+; 944 : }
+
+ 00044 8b e5 mov esp, ebp
+ 00046 5d pop ebp
+ 00047 c2 10 00 ret 16 ; 00000010H
+$LN2@zipOpen2_6:
+
+; 941 : }
+; 942 : else
+; 943 : return zipOpen3(pathname, append, globalcomment, NULL);
+
+ 0004a 6a 00 push 0
+ 0004c ff 75 10 push DWORD PTR _globalcomment$[ebp]
+ 0004f e8 00 00 00 00 call _zipOpen3@16
+
+; 944 : }
+
+ 00054 8b e5 mov esp, ebp
+ 00056 5d pop ebp
+ 00057 c2 10 00 ret 16 ; 00000010H
+_zipOpen2_64@16 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zipOpen@8
+_TEXT SEGMENT
+_pathname$ = 8 ; size = 4
+_append$ = 12 ; size = 4
+_zipOpen@8 PROC ; COMDAT
+
+; 949 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 950 : return zipOpen3((const void*)pathname,append,NULL,NULL);
+
+ 00003 8b 55 0c mov edx, DWORD PTR _append$[ebp]
+ 00006 8b 4d 08 mov ecx, DWORD PTR _pathname$[ebp]
+ 00009 6a 00 push 0
+ 0000b 6a 00 push 0
+ 0000d e8 00 00 00 00 call _zipOpen3@16
+
+; 951 : }
+
+ 00012 5d pop ebp
+ 00013 c2 08 00 ret 8
+_zipOpen@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zipOpen64@8
+_TEXT SEGMENT
+_pathname$ = 8 ; size = 4
+_append$ = 12 ; size = 4
+_zipOpen64@8 PROC ; COMDAT
+
+; 954 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 955 : return zipOpen3(pathname,append,NULL,NULL);
+
+ 00003 8b 55 0c mov edx, DWORD PTR _append$[ebp]
+ 00006 8b 4d 08 mov ecx, DWORD PTR _pathname$[ebp]
+ 00009 6a 00 push 0
+ 0000b 6a 00 push 0
+ 0000d e8 00 00 00 00 call _zipOpen3@16
+
+; 956 : }
+
+ 00012 5d pop ebp
+ 00013 c2 08 00 ret 8
+_zipOpen64@8 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _Write_LocalFileHeader
+_TEXT SEGMENT
+_filename$1$ = -8 ; size = 4
+_size_extrafield_local$ = 8 ; size = 4
+_extrafield_local$ = 12 ; size = 4
+_Write_LocalFileHeader PROC ; COMDAT
+; _zi$ = ecx
+; _filename$ = edx
+
+; 959 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 08 sub esp, 8
+ 00006 53 push ebx
+ 00007 56 push esi
+ 00008 8b c2 mov eax, edx
+ 0000a 8b f1 mov esi, ecx
+ 0000c 57 push edi
+
+; 960 : /* write the local header */
+; 961 : int err;
+; 962 : uInt size_filename = (uInt)strlen(filename);
+
+ 0000d 8b f8 mov edi, eax
+ 0000f 89 45 f8 mov DWORD PTR _filename$1$[ebp], eax
+ 00012 8d 4f 01 lea ecx, DWORD PTR [edi+1]
+$LL26@Write_Loca:
+ 00015 8a 07 mov al, BYTE PTR [edi]
+ 00017 47 inc edi
+ 00018 84 c0 test al, al
+ 0001a 75 f9 jne SHORT $LL26@Write_Loca
+
+; 963 : uInt size_extrafield = size_extrafield_local;
+; 964 :
+; 965 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)LOCALHEADERMAGIC, 4);
+
+ 0001c 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 0001f 2b f9 sub edi, ecx
+ 00021 8b 5d 08 mov ebx, DWORD PTR _size_extrafield_local$[ebp]
+ 00024 8b ce mov ecx, esi
+ 00026 6a 04 push 4
+ 00028 6a 00 push 0
+ 0002a 68 50 4b 03 04 push 67324752 ; 04034b50H
+ 0002f e8 00 00 00 00 call _zip64local_putValue
+ 00034 83 c4 0c add esp, 12 ; 0000000cH
+
+; 966 :
+; 967 : if (err==ZIP_OK)
+
+ 00037 85 c0 test eax, eax
+ 00039 0f 85 e6 00 00
+ 00 jne $LN15@Write_Loca
+
+; 968 : {
+; 969 : if(zi->ci.zip64)
+; 970 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);/* version needed to extract */
+
+ 0003f 8b ce mov ecx, esi
+ 00041 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00044 6a 02 push 2
+ 00046 50 push eax
+ 00047 39 86 b0 00 01
+ 00 cmp DWORD PTR [esi+65712], eax
+ 0004d 74 04 je SHORT $LN3@Write_Loca
+ 0004f 6a 2d push 45 ; 0000002dH
+ 00051 eb 02 jmp SHORT $LN31@Write_Loca
+$LN3@Write_Loca:
+
+; 971 : else
+; 972 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)20,2);/* version needed to extract */
+
+ 00053 6a 14 push 20 ; 00000014H
+$LN31@Write_Loca:
+ 00055 e8 00 00 00 00 call _zip64local_putValue
+ 0005a 83 c4 0c add esp, 12 ; 0000000cH
+
+; 973 : }
+; 974 :
+; 975 : if (err==ZIP_OK)
+
+ 0005d 85 c0 test eax, eax
+ 0005f 0f 85 c0 00 00
+ 00 jne $LN15@Write_Loca
+
+; 976 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.flag,2);
+
+ 00065 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00068 8b ce mov ecx, esi
+ 0006a 6a 02 push 2
+ 0006c 50 push eax
+ 0006d ff b6 98 00 00
+ 00 push DWORD PTR [esi+152]
+ 00073 e8 00 00 00 00 call _zip64local_putValue
+ 00078 83 c4 0c add esp, 12 ; 0000000cH
+
+; 977 :
+; 978 : if (err==ZIP_OK)
+
+ 0007b 85 c0 test eax, eax
+ 0007d 0f 85 a2 00 00
+ 00 jne $LN15@Write_Loca
+
+; 979 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.method,2);
+
+ 00083 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00086 8b ce mov ecx, esi
+ 00088 6a 02 push 2
+ 0008a 50 push eax
+ 0008b ff b6 9c 00 00
+ 00 push DWORD PTR [esi+156]
+ 00091 e8 00 00 00 00 call _zip64local_putValue
+ 00096 83 c4 0c add esp, 12 ; 0000000cH
+
+; 980 :
+; 981 : if (err==ZIP_OK)
+
+ 00099 85 c0 test eax, eax
+ 0009b 0f 85 84 00 00
+ 00 jne $LN15@Write_Loca
+
+; 982 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.dosDate,4);
+
+ 000a1 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 000a4 8b ce mov ecx, esi
+ 000a6 6a 04 push 4
+ 000a8 50 push eax
+ 000a9 ff b6 a4 00 01
+ 00 push DWORD PTR [esi+65700]
+ 000af e8 00 00 00 00 call _zip64local_putValue
+ 000b4 83 c4 0c add esp, 12 ; 0000000cH
+
+; 983 :
+; 984 : // CRC / Compressed size / Uncompressed size will be filled in later and rewritten later
+; 985 : if (err==ZIP_OK)
+
+ 000b7 85 c0 test eax, eax
+ 000b9 75 6a jne SHORT $LN15@Write_Loca
+
+; 986 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* crc 32, unknown */
+
+ 000bb 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 000be 8b ce mov ecx, esi
+ 000c0 6a 04 push 4
+ 000c2 50 push eax
+ 000c3 50 push eax
+ 000c4 e8 00 00 00 00 call _zip64local_putValue
+ 000c9 83 c4 0c add esp, 12 ; 0000000cH
+
+; 987 : if (err==ZIP_OK)
+
+ 000cc 85 c0 test eax, eax
+ 000ce 75 55 jne SHORT $LN15@Write_Loca
+
+; 988 : {
+; 989 : if(zi->ci.zip64)
+; 990 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* compressed size, unknown */
+
+ 000d0 8b ce mov ecx, esi
+ 000d2 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 000d5 6a 04 push 4
+ 000d7 50 push eax
+ 000d8 39 86 b0 00 01
+ 00 cmp DWORD PTR [esi+65712], eax
+ 000de 74 04 je SHORT $LN10@Write_Loca
+ 000e0 6a ff push -1
+ 000e2 eb 02 jmp SHORT $LN32@Write_Loca
+$LN10@Write_Loca:
+
+; 991 : else
+; 992 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* compressed size, unknown */
+
+ 000e4 6a 00 push 0
+$LN32@Write_Loca:
+ 000e6 e8 00 00 00 00 call _zip64local_putValue
+ 000eb 83 c4 0c add esp, 12 ; 0000000cH
+
+; 993 : }
+; 994 : if (err==ZIP_OK)
+
+ 000ee 85 c0 test eax, eax
+ 000f0 75 33 jne SHORT $LN15@Write_Loca
+
+; 995 : {
+; 996 : if(zi->ci.zip64)
+; 997 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* uncompressed size, unknown */
+
+ 000f2 8b ce mov ecx, esi
+ 000f4 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 000f7 6a 04 push 4
+ 000f9 50 push eax
+ 000fa 39 86 b0 00 01
+ 00 cmp DWORD PTR [esi+65712], eax
+ 00100 74 04 je SHORT $LN13@Write_Loca
+ 00102 6a ff push -1
+ 00104 eb 02 jmp SHORT $LN33@Write_Loca
+$LN13@Write_Loca:
+
+; 998 : else
+; 999 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* uncompressed size, unknown */
+
+ 00106 6a 00 push 0
+$LN33@Write_Loca:
+ 00108 e8 00 00 00 00 call _zip64local_putValue
+ 0010d 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1000 : }
+; 1001 :
+; 1002 : if (err==ZIP_OK)
+
+ 00110 85 c0 test eax, eax
+ 00112 75 11 jne SHORT $LN15@Write_Loca
+
+; 1003 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_filename,2);
+
+ 00114 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00117 8b ce mov ecx, esi
+ 00119 6a 02 push 2
+ 0011b 50 push eax
+ 0011c 57 push edi
+ 0011d e8 00 00 00 00 call _zip64local_putValue
+ 00122 83 c4 0c add esp, 12 ; 0000000cH
+$LN15@Write_Loca:
+
+; 1004 :
+; 1005 : if(zi->ci.zip64)
+
+ 00125 83 be b0 00 01
+ 00 00 cmp DWORD PTR [esi+65712], 0
+
+; 1006 : {
+; 1007 : size_extrafield += 20;
+
+ 0012c 8d 4b 14 lea ecx, DWORD PTR [ebx+20]
+ 0012f 75 02 jne SHORT $LN16@Write_Loca
+ 00131 8b cb mov ecx, ebx
+$LN16@Write_Loca:
+
+; 1008 : }
+; 1009 :
+; 1010 : if (err==ZIP_OK)
+
+ 00133 85 c0 test eax, eax
+ 00135 0f 85 c7 00 00
+ 00 jne $LN22@Write_Loca
+
+; 1011 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_extrafield,2);
+
+ 0013b 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 0013e 6a 02 push 2
+ 00140 50 push eax
+ 00141 51 push ecx
+ 00142 8b ce mov ecx, esi
+ 00144 e8 00 00 00 00 call _zip64local_putValue
+ 00149 8b d8 mov ebx, eax
+ 0014b 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1012 :
+; 1013 : if ((err==ZIP_OK) && (size_filename > 0))
+
+ 0014e 85 db test ebx, ebx
+ 00150 0f 85 aa 00 00
+ 00 jne $LN28@Write_Loca
+ 00156 85 ff test edi, edi
+ 00158 74 20 je SHORT $LN24@Write_Loca
+
+; 1014 : {
+; 1015 : if (ZWRITE64(zi->z_filefunc,zi->filestream,filename,size_filename)!=size_filename)
+
+ 0015a 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 0015d 57 push edi
+ 0015e ff 75 f8 push DWORD PTR _filename$1$[ebp]
+ 00161 ff 76 2c push DWORD PTR [esi+44]
+ 00164 ff 76 1c push DWORD PTR [esi+28]
+ 00167 ff d0 call eax
+ 00169 83 c4 10 add esp, 16 ; 00000010H
+ 0016c 3b c7 cmp eax, edi
+ 0016e 74 0a je SHORT $LN24@Write_Loca
+$LN34@Write_Loca:
+
+; 1042 : }
+; 1043 :
+; 1044 : return err;
+
+ 00170 83 c8 ff or eax, -1
+
+; 1045 : }
+
+ 00173 5f pop edi
+ 00174 5e pop esi
+ 00175 5b pop ebx
+ 00176 8b e5 mov esp, ebp
+ 00178 5d pop ebp
+ 00179 c3 ret 0
+$LN24@Write_Loca:
+
+; 1016 : err = ZIP_ERRNO;
+; 1017 : }
+; 1018 :
+; 1019 : if ((err==ZIP_OK) && (size_extrafield_local > 0))
+
+ 0017a 8b 7d 08 mov edi, DWORD PTR _size_extrafield_local$[ebp]
+ 0017d 85 ff test edi, edi
+ 0017f 74 16 je SHORT $LN25@Write_Loca
+
+; 1020 : {
+; 1021 : if (ZWRITE64(zi->z_filefunc, zi->filestream, extrafield_local, size_extrafield_local) != size_extrafield_local)
+
+ 00181 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 00184 57 push edi
+ 00185 ff 75 0c push DWORD PTR _extrafield_local$[ebp]
+ 00188 ff 76 2c push DWORD PTR [esi+44]
+ 0018b ff 76 1c push DWORD PTR [esi+28]
+ 0018e ff d0 call eax
+ 00190 83 c4 10 add esp, 16 ; 00000010H
+ 00193 3b c7 cmp eax, edi
+ 00195 75 d9 jne SHORT $LN34@Write_Loca
+$LN25@Write_Loca:
+
+; 1022 : err = ZIP_ERRNO;
+; 1023 : }
+; 1024 :
+; 1025 :
+; 1026 : if ((err==ZIP_OK) && (zi->ci.zip64))
+
+ 00197 83 be b0 00 01
+ 00 00 cmp DWORD PTR [esi+65712], 0
+ 0019e 74 60 je SHORT $LN28@Write_Loca
+
+; 1027 : {
+; 1028 : // write the Zip64 extended info
+; 1029 : short HeaderID = 1;
+; 1030 : short DataSize = 16;
+; 1031 : ZPOS64_T CompressedSize = 0;
+; 1032 : ZPOS64_T UncompressedSize = 0;
+; 1033 :
+; 1034 : // Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file)
+; 1035 : zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream);
+
+ 001a0 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 001a3 8b ce mov ecx, esi
+ 001a5 e8 00 00 00 00 call _call_ztell64
+
+; 1036 :
+; 1037 : err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)HeaderID,2);
+
+ 001aa 6a 02 push 2
+ 001ac 89 96 bc 00 01
+ 00 mov DWORD PTR [esi+65724], edx
+ 001b2 8b ce mov ecx, esi
+ 001b4 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 001b7 6a 00 push 0
+ 001b9 6a 01 push 1
+ 001bb 89 86 b8 00 01
+ 00 mov DWORD PTR [esi+65720], eax
+ 001c1 e8 00 00 00 00 call _zip64local_putValue
+
+; 1038 : err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)DataSize,2);
+
+ 001c6 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 001c9 8b ce mov ecx, esi
+ 001cb 6a 02 push 2
+ 001cd 6a 00 push 0
+ 001cf 6a 10 push 16 ; 00000010H
+ 001d1 e8 00 00 00 00 call _zip64local_putValue
+
+; 1039 :
+; 1040 : err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8);
+
+ 001d6 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 001d9 8b ce mov ecx, esi
+ 001db 6a 08 push 8
+ 001dd 6a 00 push 0
+ 001df 6a 00 push 0
+ 001e1 e8 00 00 00 00 call _zip64local_putValue
+
+; 1041 : err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8);
+
+ 001e6 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 001e9 8b ce mov ecx, esi
+ 001eb 6a 08 push 8
+ 001ed 6a 00 push 0
+ 001ef 6a 00 push 0
+ 001f1 e8 00 00 00 00 call _zip64local_putValue
+ 001f6 83 c4 30 add esp, 48 ; 00000030H
+
+; 1045 : }
+
+ 001f9 5f pop edi
+ 001fa 5e pop esi
+ 001fb 5b pop ebx
+ 001fc 8b e5 mov esp, ebp
+ 001fe 5d pop ebp
+ 001ff c3 ret 0
+$LN28@Write_Loca:
+
+; 1042 : }
+; 1043 :
+; 1044 : return err;
+
+ 00200 8b c3 mov eax, ebx
+$LN22@Write_Loca:
+
+; 1045 : }
+
+ 00202 5f pop edi
+ 00203 5e pop esi
+ 00204 5b pop ebx
+ 00205 8b e5 mov esp, ebp
+ 00207 5d pop ebp
+ 00208 c3 ret 0
+_Write_LocalFileHeader ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zipOpenNewFileInZip4_64@76
+_TEXT SEGMENT
+_size_comment$1$ = -20 ; size = 4
+_filename$2$ = -16 ; size = 4
+_bufHead$1 = -12 ; size = 12
+_file$ = 8 ; size = 4
+_filename$ = 12 ; size = 4
+_zipfi$ = 16 ; size = 4
+_extrafield_local$ = 20 ; size = 4
+_size_extrafield_local$ = 24 ; size = 4
+_extrafield_global$ = 28 ; size = 4
+_size_extrafield_global$ = 32 ; size = 4
+_comment$ = 36 ; size = 4
+_method$ = 40 ; size = 4
+_level$ = 44 ; size = 4
+_raw$ = 48 ; size = 4
+_windowBits$ = 52 ; size = 4
+_memLevel$ = 56 ; size = 4
+_strategy$ = 60 ; size = 4
+_password$ = 64 ; size = 4
+_crcForCrypting$ = 68 ; size = 4
+_versionMadeBy$ = 72 ; size = 4
+_flagBase$ = 76 ; size = 4
+_zip64$ = 80 ; size = 4
+_zipOpenNewFileInZip4_64@76 PROC ; COMDAT
+
+; 1062 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 83 ec 14 sub esp, 20 ; 00000014H
+ 00009 53 push ebx
+ 0000a 56 push esi
+
+; 1063 : zip64_internal* zi;
+; 1064 : uInt size_filename;
+; 1065 : uInt size_comment;
+; 1066 : uInt i;
+; 1067 : int err = ZIP_OK;
+; 1068 :
+; 1069 : # ifdef NOCRYPT
+; 1070 : (crcForCrypting);
+; 1071 : if (password != NULL)
+; 1072 : return ZIP_PARAMERROR;
+; 1073 : # endif
+; 1074 :
+; 1075 : if (file == NULL)
+
+ 0000b 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 0000e 57 push edi
+ 0000f 85 f6 test esi, esi
+ 00011 75 0e jne SHORT $LN11@zipOpenNew
+$LN64@zipOpenNew:
+
+; 1076 : return ZIP_PARAMERROR;
+
+ 00013 b8 9a ff ff ff mov eax, -102 ; ffffff9aH
+
+; 1263 : }
+
+ 00018 5f pop edi
+ 00019 5e pop esi
+ 0001a 5b pop ebx
+ 0001b 8b e5 mov esp, ebp
+ 0001d 5d pop ebp
+ 0001e c2 4c 00 ret 76 ; 0000004cH
+$LN11@zipOpenNew:
+
+; 1077 :
+; 1078 : #ifdef HAVE_BZIP2
+; 1079 : if ((method!=0) && (method!=Z_DEFLATED) && (method!=Z_BZIP2ED))
+; 1080 : return ZIP_PARAMERROR;
+; 1081 : #else
+; 1082 : if ((method!=0) && (method!=Z_DEFLATED))
+
+ 00021 8b 45 28 mov eax, DWORD PTR _method$[ebp]
+ 00024 85 c0 test eax, eax
+ 00026 74 05 je SHORT $LN12@zipOpenNew
+ 00028 83 f8 08 cmp eax, 8
+ 0002b 75 e6 jne SHORT $LN64@zipOpenNew
+$LN12@zipOpenNew:
+
+; 1083 : return ZIP_PARAMERROR;
+; 1084 : #endif
+; 1085 :
+; 1086 : zi = (zip64_internal*)file;
+; 1087 :
+; 1088 : if (zi->in_opened_file_inzip == 1)
+
+ 0002d 83 7e 38 01 cmp DWORD PTR [esi+56], 1
+ 00031 75 0e jne SHORT $LN14@zipOpenNew
+
+; 1089 : {
+; 1090 : err = zipCloseFileInZip (file);
+
+ 00033 56 push esi
+ 00034 e8 00 00 00 00 call _zipCloseFileInZip@4
+
+; 1091 : if (err != ZIP_OK)
+
+ 00039 85 c0 test eax, eax
+ 0003b 0f 85 95 04 00
+ 00 jne $LN1@zipOpenNew
+$LN14@zipOpenNew:
+
+; 1092 : return err;
+; 1093 : }
+; 1094 :
+; 1095 : if (filename==NULL)
+
+ 00041 8b 45 0c mov eax, DWORD PTR _filename$[ebp]
+ 00044 b9 00 00 00 00 mov ecx, OFFSET ??_C@_01JOAMLHOP@?9?$AA@
+ 00049 85 c0 test eax, eax
+ 0004b 0f 45 c8 cmovne ecx, eax
+
+; 1096 : filename="-";
+; 1097 :
+; 1098 : if (comment==NULL)
+
+ 0004e 8b 45 24 mov eax, DWORD PTR _comment$[ebp]
+ 00051 89 4c 24 10 mov DWORD PTR _filename$2$[esp+32], ecx
+ 00055 85 c0 test eax, eax
+ 00057 75 04 jne SHORT $LN16@zipOpenNew
+
+; 1099 : size_comment = 0;
+
+ 00059 33 db xor ebx, ebx
+ 0005b eb 0e jmp SHORT $LN61@zipOpenNew
+$LN16@zipOpenNew:
+
+; 1100 : else
+; 1101 : size_comment = (uInt)strlen(comment);
+
+ 0005d 8b d8 mov ebx, eax
+ 0005f 8d 53 01 lea edx, DWORD PTR [ebx+1]
+$LL58@zipOpenNew:
+ 00062 8a 03 mov al, BYTE PTR [ebx]
+ 00064 43 inc ebx
+ 00065 84 c0 test al, al
+ 00067 75 f9 jne SHORT $LL58@zipOpenNew
+ 00069 2b da sub ebx, edx
+$LN61@zipOpenNew:
+
+; 1102 :
+; 1103 : size_filename = (uInt)strlen(filename);
+
+ 0006b 8b f9 mov edi, ecx
+ 0006d 89 5c 24 0c mov DWORD PTR _size_comment$1$[esp+32], ebx
+ 00071 8d 4f 01 lea ecx, DWORD PTR [edi+1]
+$LL59@zipOpenNew:
+ 00074 8a 07 mov al, BYTE PTR [edi]
+ 00076 47 inc edi
+ 00077 84 c0 test al, al
+ 00079 75 f9 jne SHORT $LL59@zipOpenNew
+
+; 1104 :
+; 1105 : if (zipfi == NULL)
+
+ 0007b 8b 45 10 mov eax, DWORD PTR _zipfi$[ebp]
+ 0007e 2b f9 sub edi, ecx
+ 00080 85 c0 test eax, eax
+ 00082 75 08 jne SHORT $LN18@zipOpenNew
+
+; 1106 : zi->ci.dosDate = 0;
+
+ 00084 89 86 a4 00 01
+ 00 mov DWORD PTR [esi+65700], eax
+ 0008a eb 1c jmp SHORT $LN21@zipOpenNew
+$LN18@zipOpenNew:
+
+; 1107 : else
+; 1108 : {
+; 1109 : if (zipfi->dosDate != 0)
+
+ 0008c 8b 48 18 mov ecx, DWORD PTR [eax+24]
+ 0008f 85 c9 test ecx, ecx
+ 00091 74 08 je SHORT $LN20@zipOpenNew
+
+; 1110 : zi->ci.dosDate = zipfi->dosDate;
+
+ 00093 89 8e a4 00 01
+ 00 mov DWORD PTR [esi+65700], ecx
+ 00099 eb 0d jmp SHORT $LN21@zipOpenNew
+$LN20@zipOpenNew:
+
+; 1111 : else
+; 1112 : zi->ci.dosDate = zip64local_TmzDateToDosDate(&zipfi->tmz_date);
+
+ 0009b 8b c8 mov ecx, eax
+ 0009d e8 00 00 00 00 call _zip64local_TmzDateToDosDate
+ 000a2 89 86 a4 00 01
+ 00 mov DWORD PTR [esi+65700], eax
+$LN21@zipOpenNew:
+
+; 1113 : }
+; 1114 :
+; 1115 : zi->ci.flag = flagBase;
+; 1116 : if ((level==8) || (level==9))
+
+ 000a8 8b 4d 2c mov ecx, DWORD PTR _level$[ebp]
+ 000ab 8b 45 4c mov eax, DWORD PTR _flagBase$[ebp]
+ 000ae 89 86 98 00 00
+ 00 mov DWORD PTR [esi+152], eax
+ 000b4 83 f9 08 cmp ecx, 8
+ 000b7 74 05 je SHORT $LN23@zipOpenNew
+ 000b9 83 f9 09 cmp ecx, 9
+ 000bc 75 09 jne SHORT $LN22@zipOpenNew
+$LN23@zipOpenNew:
+
+; 1117 : zi->ci.flag |= 2;
+
+ 000be 83 c8 02 or eax, 2
+ 000c1 89 86 98 00 00
+ 00 mov DWORD PTR [esi+152], eax
+$LN22@zipOpenNew:
+
+; 1118 : if (level==2)
+
+ 000c7 83 f9 02 cmp ecx, 2
+ 000ca 75 09 jne SHORT $LN24@zipOpenNew
+
+; 1119 : zi->ci.flag |= 4;
+
+ 000cc 83 8e 98 00 00
+ 00 04 or DWORD PTR [esi+152], 4
+
+; 1120 : if (level==1)
+
+ 000d3 eb 0c jmp SHORT $LN25@zipOpenNew
+$LN24@zipOpenNew:
+ 000d5 83 f9 01 cmp ecx, 1
+ 000d8 75 07 jne SHORT $LN25@zipOpenNew
+
+; 1121 : zi->ci.flag |= 6;
+
+ 000da 83 8e 98 00 00
+ 00 06 or DWORD PTR [esi+152], 6
+$LN25@zipOpenNew:
+
+; 1122 : if (password != NULL)
+
+ 000e1 83 7d 40 00 cmp DWORD PTR _password$[ebp], 0
+ 000e5 74 07 je SHORT $LN26@zipOpenNew
+
+; 1123 : zi->ci.flag |= 1;
+
+ 000e7 83 8e 98 00 00
+ 00 01 or DWORD PTR [esi+152], 1
+$LN26@zipOpenNew:
+
+; 1124 :
+; 1125 : zi->ci.crc32 = 0;
+; 1126 : zi->ci.method = method;
+
+ 000ee 8b 45 28 mov eax, DWORD PTR _method$[ebp]
+
+; 1127 : zi->ci.encrypt = 0;
+; 1128 : zi->ci.stream_initialised = 0;
+; 1129 : zi->ci.pos_in_buffered_data = 0;
+; 1130 : zi->ci.raw = raw;
+; 1131 : zi->ci.pos_local_header = ZTELL64(zi->z_filefunc,zi->filestream);
+
+ 000f1 8b ce mov ecx, esi
+ 000f3 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 000f6 89 86 9c 00 00
+ 00 mov DWORD PTR [esi+156], eax
+ 000fc 8b 45 30 mov eax, DWORD PTR _raw$[ebp]
+ 000ff c7 86 a8 00 01
+ 00 00 00 00 00 mov DWORD PTR [esi+65704], 0
+ 00109 c7 86 ac 00 01
+ 00 00 00 00 00 mov DWORD PTR [esi+65708], 0
+ 00113 c7 46 78 00 00
+ 00 00 mov DWORD PTR [esi+120], 0
+ 0011a c7 46 7c 00 00
+ 00 00 mov DWORD PTR [esi+124], 0
+ 00121 89 86 a0 00 00
+ 00 mov DWORD PTR [esi+160], eax
+ 00127 e8 00 00 00 00 call _call_ztell64
+
+; 1132 :
+; 1133 : zi->ci.size_centralheader = SIZECENTRALHEADER + size_filename + size_extrafield_global + size_comment;
+
+ 0012c 8b 4d 20 mov ecx, DWORD PTR _size_extrafield_global$[ebp]
+ 0012f 89 86 80 00 00
+ 00 mov DWORD PTR [esi+128], eax
+ 00135 83 c1 2e add ecx, 46 ; 0000002eH
+ 00138 8d 04 1f lea eax, DWORD PTR [edi+ebx]
+ 0013b 89 96 84 00 00
+ 00 mov DWORD PTR [esi+132], edx
+ 00141 03 c1 add eax, ecx
+
+; 1134 : zi->ci.size_centralExtraFree = 32; // Extra space we have reserved in case we need to add ZIP64 extra info data
+
+ 00143 c7 86 94 00 00
+ 00 20 00 00 00 mov DWORD PTR [esi+148], 32 ; 00000020H
+ 0014d 89 86 90 00 00
+ 00 mov DWORD PTR [esi+144], eax
+
+; 1135 :
+; 1136 : zi->ci.central_header = (char*)ALLOC((uInt)zi->ci.size_centralheader + zi->ci.size_centralExtraFree);
+
+ 00153 83 c0 20 add eax, 32 ; 00000020H
+ 00156 50 push eax
+ 00157 ff 15 00 00 00
+ 00 call DWORD PTR __imp__malloc
+
+; 1137 :
+; 1138 : zi->ci.size_centralExtra = size_extrafield_global;
+
+ 0015d 8b 4d 20 mov ecx, DWORD PTR _size_extrafield_global$[ebp]
+ 00160 83 c4 04 add esp, 4
+ 00163 89 8e 8c 00 00
+ 00 mov DWORD PTR [esi+140], ecx
+
+; 1139 : zip64local_putValue_inmemory(zi->ci.central_header,(uLong)CENTRALHEADERMAGIC,4);
+
+ 00169 ba 04 00 00 00 mov edx, 4
+ 0016e 8b c8 mov ecx, eax
+ 00170 89 86 88 00 00
+ 00 mov DWORD PTR [esi+136], eax
+ 00176 6a 00 push 0
+ 00178 68 50 4b 01 02 push 33639248 ; 02014b50H
+ 0017d e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1140 : /* version info */
+; 1141 : zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)versionMadeBy,2);
+
+ 00182 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 00188 6a 00 push 0
+ 0018a ff 75 48 push DWORD PTR _versionMadeBy$[ebp]
+ 0018d 03 ca add ecx, edx
+ 0018f ba 02 00 00 00 mov edx, 2
+ 00194 e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1142 : zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)20,2);
+
+ 00199 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 0019f 6a 00 push 0
+ 001a1 6a 14 push 20 ; 00000014H
+ 001a3 83 c1 06 add ecx, 6
+ 001a6 e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1143 : zip64local_putValue_inmemory(zi->ci.central_header+8,(uLong)zi->ci.flag,2);
+
+ 001ab 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 001b1 6a 00 push 0
+ 001b3 ff b6 98 00 00
+ 00 push DWORD PTR [esi+152]
+ 001b9 83 c1 08 add ecx, 8
+ 001bc e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1144 : zip64local_putValue_inmemory(zi->ci.central_header+10,(uLong)zi->ci.method,2);
+
+ 001c1 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 001c7 6a 00 push 0
+ 001c9 ff b6 9c 00 00
+ 00 push DWORD PTR [esi+156]
+ 001cf 83 c1 0a add ecx, 10 ; 0000000aH
+ 001d2 e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1145 : zip64local_putValue_inmemory(zi->ci.central_header+12,(uLong)zi->ci.dosDate,4);
+
+ 001d7 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 001dd ba 04 00 00 00 mov edx, 4
+ 001e2 6a 00 push 0
+ 001e4 ff b6 a4 00 01
+ 00 push DWORD PTR [esi+65700]
+ 001ea 83 c1 0c add ecx, 12 ; 0000000cH
+ 001ed e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1146 : zip64local_putValue_inmemory(zi->ci.central_header+16,(uLong)0,4); /*crc*/
+
+ 001f2 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 001f8 6a 00 push 0
+ 001fa 6a 00 push 0
+ 001fc 83 c1 10 add ecx, 16 ; 00000010H
+ 001ff e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1147 : zip64local_putValue_inmemory(zi->ci.central_header+20,(uLong)0,4); /*compr size*/
+
+ 00204 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 0020a 6a 00 push 0
+ 0020c 6a 00 push 0
+ 0020e 83 c1 14 add ecx, 20 ; 00000014H
+ 00211 e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1148 : zip64local_putValue_inmemory(zi->ci.central_header+24,(uLong)0,4); /*uncompr size*/
+
+ 00216 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 0021c 83 c4 40 add esp, 64 ; 00000040H
+ 0021f 83 c1 18 add ecx, 24 ; 00000018H
+ 00222 6a 00 push 0
+ 00224 6a 00 push 0
+ 00226 e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1149 : zip64local_putValue_inmemory(zi->ci.central_header+28,(uLong)size_filename,2);
+
+ 0022b 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 00231 ba 02 00 00 00 mov edx, 2
+ 00236 6a 00 push 0
+ 00238 57 push edi
+ 00239 83 c1 1c add ecx, 28 ; 0000001cH
+ 0023c e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1150 : zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)size_extrafield_global,2);
+
+ 00241 6a 00 push 0
+ 00243 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 00249 ff 75 20 push DWORD PTR _size_extrafield_global$[ebp]
+ 0024c 83 c1 1e add ecx, 30 ; 0000001eH
+ 0024f e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1151 : zip64local_putValue_inmemory(zi->ci.central_header+32,(uLong)size_comment,2);
+
+ 00254 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 0025a 6a 00 push 0
+ 0025c 53 push ebx
+ 0025d 83 c1 20 add ecx, 32 ; 00000020H
+ 00260 e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1152 : zip64local_putValue_inmemory(zi->ci.central_header+34,(uLong)0,2); /*disk nm start*/
+
+ 00265 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 0026b 6a 00 push 0
+ 0026d 6a 00 push 0
+ 0026f 83 c1 22 add ecx, 34 ; 00000022H
+ 00272 e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1153 :
+; 1154 : if (zipfi==NULL)
+; 1155 : zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)0,2);
+
+ 00277 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 0027d 83 c4 28 add esp, 40 ; 00000028H
+ 00280 8b 45 10 mov eax, DWORD PTR _zipfi$[ebp]
+ 00283 83 c1 24 add ecx, 36 ; 00000024H
+ 00286 6a 00 push 0
+ 00288 85 c0 test eax, eax
+ 0028a 75 0c jne SHORT $LN27@zipOpenNew
+ 0028c 50 push eax
+ 0028d e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1158 :
+; 1159 : if (zipfi==NULL)
+; 1160 : zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)0,4);
+
+ 00292 6a 00 push 0
+ 00294 6a 00 push 0
+ 00296 eb 10 jmp SHORT $LN62@zipOpenNew
+$LN27@zipOpenNew:
+
+; 1156 : else
+; 1157 : zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)zipfi->internal_fa,2);
+
+ 00298 ff 70 1c push DWORD PTR [eax+28]
+ 0029b e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1161 : else
+; 1162 : zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)zipfi->external_fa,4);
+
+ 002a0 8b 45 10 mov eax, DWORD PTR _zipfi$[ebp]
+ 002a3 6a 00 push 0
+ 002a5 ff 70 20 push DWORD PTR [eax+32]
+$LN62@zipOpenNew:
+ 002a8 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 002ae ba 04 00 00 00 mov edx, 4
+ 002b3 83 c1 26 add ecx, 38 ; 00000026H
+ 002b6 e8 00 00 00 00 call _zip64local_putValue_inmemory
+ 002bb 83 c4 10 add esp, 16 ; 00000010H
+
+; 1163 :
+; 1164 : if(zi->ci.pos_local_header >= 0xffffffff)
+
+ 002be 83 be 84 00 00
+ 00 00 cmp DWORD PTR [esi+132], 0
+ 002c5 77 21 ja SHORT $LN60@zipOpenNew
+ 002c7 83 be 80 00 00
+ 00 ff cmp DWORD PTR [esi+128], -1
+ 002ce 73 18 jae SHORT $LN60@zipOpenNew
+
+; 1166 : else
+; 1167 : zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header - zi->add_position_when_writting_offset,4);
+
+ 002d0 8b 8e 80 00 00
+ 00 mov ecx, DWORD PTR [esi+128]
+ 002d6 33 c0 xor eax, eax
+ 002d8 2b 8e f0 00 01
+ 00 sub ecx, DWORD PTR [esi+65776]
+ 002de 1b 86 f4 00 01
+ 00 sbb eax, DWORD PTR [esi+65780]
+ 002e4 50 push eax
+ 002e5 51 push ecx
+ 002e6 eb 04 jmp SHORT $LN63@zipOpenNew
+$LN60@zipOpenNew:
+
+; 1165 : zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)0xffffffff,4);
+
+ 002e8 6a 00 push 0
+ 002ea 6a ff push -1
+$LN63@zipOpenNew:
+ 002ec 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 002f2 ba 04 00 00 00 mov edx, 4
+ 002f7 83 c1 2a add ecx, 42 ; 0000002aH
+ 002fa e8 00 00 00 00 call _zip64local_putValue_inmemory
+ 002ff 83 c4 08 add esp, 8
+
+; 1168 :
+; 1169 : for (i=0;i<size_filename;i++)
+
+ 00302 33 d2 xor edx, edx
+ 00304 85 ff test edi, edi
+ 00306 74 1e je SHORT $LN3@zipOpenNew
+ 00308 8b 5c 24 10 mov ebx, DWORD PTR _filename$2$[esp+32]
+ 0030c 0f 1f 40 00 npad 4
+$LL4@zipOpenNew:
+
+; 1170 : *(zi->ci.central_header+SIZECENTRALHEADER+i) = *(filename+i);
+
+ 00310 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 00316 8a 04 1a mov al, BYTE PTR [edx+ebx]
+ 00319 88 44 11 2e mov BYTE PTR [ecx+edx+46], al
+ 0031d 42 inc edx
+ 0031e 3b d7 cmp edx, edi
+ 00320 72 ee jb SHORT $LL4@zipOpenNew
+ 00322 8b 5c 24 0c mov ebx, DWORD PTR _size_comment$1$[esp+32]
+$LN3@zipOpenNew:
+
+; 1171 :
+; 1172 : for (i=0;i<size_extrafield_global;i++)
+
+ 00326 33 d2 xor edx, edx
+ 00328 39 55 20 cmp DWORD PTR _size_extrafield_global$[ebp], edx
+ 0032b 76 1e jbe SHORT $LN6@zipOpenNew
+ 0032d 8b 5d 20 mov ebx, DWORD PTR _size_extrafield_global$[ebp]
+$LL7@zipOpenNew:
+
+; 1173 : *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+i) =
+
+ 00330 8b 45 1c mov eax, DWORD PTR _extrafield_global$[ebp]
+ 00333 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 00339 03 ca add ecx, edx
+ 0033b 8a 04 02 mov al, BYTE PTR [edx+eax]
+ 0033e 42 inc edx
+ 0033f 88 44 39 2e mov BYTE PTR [ecx+edi+46], al
+ 00343 3b d3 cmp edx, ebx
+ 00345 72 e9 jb SHORT $LL7@zipOpenNew
+ 00347 8b 5c 24 0c mov ebx, DWORD PTR _size_comment$1$[esp+32]
+$LN6@zipOpenNew:
+
+; 1174 : *(((const char*)extrafield_global)+i);
+; 1175 :
+; 1176 : for (i=0;i<size_comment;i++)
+
+ 0034b 33 d2 xor edx, edx
+ 0034d 85 db test ebx, ebx
+ 0034f 74 1f je SHORT $LN9@zipOpenNew
+$LL10@zipOpenNew:
+
+; 1177 : *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+
+; 1178 : size_extrafield_global+i) = *(comment+i);
+
+ 00351 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 00357 8b 45 24 mov eax, DWORD PTR _comment$[ebp]
+ 0035a 03 ca add ecx, edx
+ 0035c 8b 75 20 mov esi, DWORD PTR _size_extrafield_global$[ebp]
+ 0035f 03 cf add ecx, edi
+ 00361 8a 04 02 mov al, BYTE PTR [edx+eax]
+ 00364 42 inc edx
+ 00365 88 44 31 2e mov BYTE PTR [ecx+esi+46], al
+ 00369 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 0036c 3b d3 cmp edx, ebx
+ 0036e 72 e1 jb SHORT $LL10@zipOpenNew
+$LN9@zipOpenNew:
+
+; 1179 : if (zi->ci.central_header == NULL)
+
+ 00370 83 be 88 00 00
+ 00 00 cmp DWORD PTR [esi+136], 0
+ 00377 75 0e jne SHORT $LN33@zipOpenNew
+
+; 1180 : return ZIP_INTERNALERROR;
+
+ 00379 b8 98 ff ff ff mov eax, -104 ; ffffff98H
+
+; 1263 : }
+
+ 0037e 5f pop edi
+ 0037f 5e pop esi
+ 00380 5b pop ebx
+ 00381 8b e5 mov esp, ebp
+ 00383 5d pop ebp
+ 00384 c2 4c 00 ret 76 ; 0000004cH
+$LN33@zipOpenNew:
+
+; 1181 :
+; 1182 : zi->ci.zip64 = zip64;
+; 1183 : zi->ci.totalCompressedData = 0;
+; 1184 : zi->ci.totalUncompressedData = 0;
+; 1185 : zi->ci.pos_zip64extrainfo = 0;
+; 1186 :
+; 1187 : err = Write_LocalFileHeader(zi, filename, size_extrafield_local, extrafield_local);
+
+ 00387 ff 75 14 push DWORD PTR _extrafield_local$[ebp]
+ 0038a 8b 45 50 mov eax, DWORD PTR _zip64$[ebp]
+ 0038d 8b ce mov ecx, esi
+ 0038f ff 75 18 push DWORD PTR _size_extrafield_local$[ebp]
+ 00392 8b 54 24 18 mov edx, DWORD PTR _filename$2$[esp+40]
+ 00396 89 86 b0 00 01
+ 00 mov DWORD PTR [esi+65712], eax
+ 0039c c7 86 c0 00 01
+ 00 00 00 00 00 mov DWORD PTR [esi+65728], 0
+ 003a6 c7 86 c4 00 01
+ 00 00 00 00 00 mov DWORD PTR [esi+65732], 0
+ 003b0 c7 86 c8 00 01
+ 00 00 00 00 00 mov DWORD PTR [esi+65736], 0
+ 003ba c7 86 cc 00 01
+ 00 00 00 00 00 mov DWORD PTR [esi+65740], 0
+ 003c4 c7 86 b8 00 01
+ 00 00 00 00 00 mov DWORD PTR [esi+65720], 0
+ 003ce c7 86 bc 00 01
+ 00 00 00 00 00 mov DWORD PTR [esi+65724], 0
+ 003d8 e8 00 00 00 00 call _Write_LocalFileHeader
+ 003dd 8b d8 mov ebx, eax
+
+; 1188 :
+; 1189 : #ifdef HAVE_BZIP2
+; 1190 : zi->ci.bstream.avail_in = (uInt)0;
+; 1191 : zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
+; 1192 : zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;
+; 1193 : zi->ci.bstream.total_in_hi32 = 0;
+; 1194 : zi->ci.bstream.total_in_lo32 = 0;
+; 1195 : zi->ci.bstream.total_out_hi32 = 0;
+; 1196 : zi->ci.bstream.total_out_lo32 = 0;
+; 1197 : #endif
+; 1198 :
+; 1199 : zi->ci.stream.avail_in = (uInt)0;
+
+ 003df c7 46 44 00 00
+ 00 00 mov DWORD PTR [esi+68], 0
+ 003e6 83 c4 08 add esp, 8
+
+; 1200 : zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
+
+ 003e9 c7 46 50 00 00
+ 01 00 mov DWORD PTR [esi+80], 65536 ; 00010000H
+
+; 1201 : zi->ci.stream.next_out = zi->ci.buffered_data;
+; 1202 : zi->ci.stream.total_in = 0;
+
+ 003f0 c7 46 48 00 00
+ 00 00 mov DWORD PTR [esi+72], 0
+ 003f7 8d 8e a4 00 00
+ 00 lea ecx, DWORD PTR [esi+164]
+ 003fd 89 4e 4c mov DWORD PTR [esi+76], ecx
+
+; 1203 : zi->ci.stream.total_out = 0;
+
+ 00400 c7 46 54 00 00
+ 00 00 mov DWORD PTR [esi+84], 0
+
+; 1204 : zi->ci.stream.data_type = Z_BINARY;
+
+ 00407 c7 46 6c 00 00
+ 00 00 mov DWORD PTR [esi+108], 0
+
+; 1205 :
+; 1206 : #ifdef HAVE_BZIP2
+; 1207 : if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED || zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
+; 1208 : #else
+; 1209 : if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
+
+ 0040e 85 db test ebx, ebx
+ 00410 75 4c jne SHORT $LN38@zipOpenNew
+ 00412 83 be 9c 00 00
+ 00 08 cmp DWORD PTR [esi+156], 8
+ 00419 75 43 jne SHORT $LN38@zipOpenNew
+ 0041b 39 86 a0 00 00
+ 00 cmp DWORD PTR [esi+160], eax
+ 00421 75 3b jne SHORT $LN38@zipOpenNew
+
+; 1210 : #endif
+; 1211 : {
+; 1212 : if(zi->ci.method == Z_DEFLATED)
+; 1213 : {
+; 1214 : zi->ci.stream.zalloc = (alloc_func)0;
+
+ 00423 89 46 60 mov DWORD PTR [esi+96], eax
+
+; 1215 : zi->ci.stream.zfree = (free_func)0;
+
+ 00426 89 46 64 mov DWORD PTR [esi+100], eax
+
+; 1216 : zi->ci.stream.opaque = (voidpf)0;
+
+ 00429 89 46 68 mov DWORD PTR [esi+104], eax
+
+; 1217 :
+; 1218 : if (windowBits>0)
+
+ 0042c 8b 45 34 mov eax, DWORD PTR _windowBits$[ebp]
+ 0042f 85 c0 test eax, eax
+ 00431 7e 02 jle SHORT $LN37@zipOpenNew
+
+; 1219 : windowBits = -windowBits;
+
+ 00433 f7 d8 neg eax
+$LN37@zipOpenNew:
+
+; 1220 :
+; 1221 : err = deflateInit2(&zi->ci.stream, level, Z_DEFLATED, windowBits, memLevel, strategy);
+
+ 00435 6a 38 push 56 ; 00000038H
+ 00437 68 00 00 00 00 push OFFSET ??_C@_05IAIEPMAK@1?42?48?$AA@
+ 0043c ff 75 3c push DWORD PTR _strategy$[ebp]
+ 0043f ff 75 38 push DWORD PTR _memLevel$[ebp]
+ 00442 50 push eax
+ 00443 6a 08 push 8
+ 00445 ff 75 2c push DWORD PTR _level$[ebp]
+ 00448 8d 46 40 lea eax, DWORD PTR [esi+64]
+ 0044b 50 push eax
+ 0044c e8 00 00 00 00 call _deflateInit2_@32
+ 00451 8b d8 mov ebx, eax
+
+; 1222 :
+; 1223 : if (err==Z_OK)
+
+ 00453 85 db test ebx, ebx
+ 00455 75 07 jne SHORT $LN38@zipOpenNew
+
+; 1224 : zi->ci.stream_initialised = Z_DEFLATED;
+
+ 00457 c7 46 78 08 00
+ 00 00 mov DWORD PTR [esi+120], 8
+$LN38@zipOpenNew:
+
+; 1225 : }
+; 1226 : else if(zi->ci.method == Z_BZIP2ED)
+; 1227 : {
+; 1228 : #ifdef HAVE_BZIP2
+; 1229 : // Init BZip stuff here
+; 1230 : zi->ci.bstream.bzalloc = 0;
+; 1231 : zi->ci.bstream.bzfree = 0;
+; 1232 : zi->ci.bstream.opaque = (voidpf)0;
+; 1233 :
+; 1234 : err = BZ2_bzCompressInit(&zi->ci.bstream, level, 0,35);
+; 1235 : if(err == BZ_OK)
+; 1236 : zi->ci.stream_initialised = Z_BZIP2ED;
+; 1237 : #endif
+; 1238 : }
+; 1239 :
+; 1240 : }
+; 1241 :
+; 1242 : # ifndef NOCRYPT
+; 1243 : zi->ci.crypt_header_size = 0;
+
+ 0045e c7 86 e0 00 01
+ 00 00 00 00 00 mov DWORD PTR [esi+65760], 0
+
+; 1244 : if ((err==Z_OK) && (password != NULL))
+
+ 00468 85 db test ebx, ebx
+ 0046a 75 68 jne SHORT $LN42@zipOpenNew
+ 0046c 8b 7d 40 mov edi, DWORD PTR _password$[ebp]
+ 0046f 85 ff test edi, edi
+ 00471 74 5a je SHORT $LN57@zipOpenNew
+
+; 1245 : {
+; 1246 : unsigned char bufHead[RAND_HEAD_LEN];
+; 1247 : unsigned int sizeHead;
+; 1248 : zi->ci.encrypt = 1;
+
+ 00473 c7 86 ac 00 01
+ 00 01 00 00 00 mov DWORD PTR [esi+65708], 1
+
+; 1249 : zi->ci.pcrc_32_tab = get_crc_table();
+
+ 0047d e8 00 00 00 00 call _get_crc_table@0
+
+; 1250 : /*init_keys(password,zi->ci.keys,zi->ci.pcrc_32_tab);*/
+; 1251 :
+; 1252 : sizeHead=crypthead(password,bufHead,RAND_HEAD_LEN,zi->ci.keys,zi->ci.pcrc_32_tab,crcForCrypting);
+
+ 00482 ff 75 44 push DWORD PTR _crcForCrypting$[ebp]
+ 00485 89 86 dc 00 01
+ 00 mov DWORD PTR [esi+65756], eax
+ 0048b 8d 54 24 18 lea edx, DWORD PTR _bufHead$1[esp+36]
+ 0048f 50 push eax
+ 00490 8d 86 d0 00 01
+ 00 lea eax, DWORD PTR [esi+65744]
+ 00496 50 push eax
+ 00497 51 push ecx
+ 00498 8b cf mov ecx, edi
+ 0049a e8 00 00 00 00 call _crypthead
+
+; 1253 : zi->ci.crypt_header_size = sizeHead;
+; 1254 :
+; 1255 : if (ZWRITE64(zi->z_filefunc,zi->filestream,bufHead,sizeHead) != sizeHead)
+
+ 0049f 8b 4e 08 mov ecx, DWORD PTR [esi+8]
+ 004a2 8b f8 mov edi, eax
+ 004a4 57 push edi
+ 004a5 8d 44 24 28 lea eax, DWORD PTR _bufHead$1[esp+52]
+ 004a9 89 be e0 00 01
+ 00 mov DWORD PTR [esi+65760], edi
+ 004af 50 push eax
+ 004b0 ff 76 2c push DWORD PTR [esi+44]
+ 004b3 ff 76 1c push DWORD PTR [esi+28]
+ 004b6 ff d1 call ecx
+ 004b8 83 c4 20 add esp, 32 ; 00000020H
+ 004bb 3b c7 cmp eax, edi
+ 004bd 74 0e je SHORT $LN57@zipOpenNew
+
+; 1256 : err = ZIP_ERRNO;
+
+ 004bf 83 cb ff or ebx, -1
+
+; 1262 : return err;
+
+ 004c2 8b c3 mov eax, ebx
+
+; 1263 : }
+
+ 004c4 5f pop edi
+ 004c5 5e pop esi
+ 004c6 5b pop ebx
+ 004c7 8b e5 mov esp, ebp
+ 004c9 5d pop ebp
+ 004ca c2 4c 00 ret 76 ; 0000004cH
+$LN57@zipOpenNew:
+
+; 1257 : }
+; 1258 : # endif
+; 1259 :
+; 1260 : if (err==Z_OK)
+; 1261 : zi->in_opened_file_inzip = 1;
+
+ 004cd c7 46 38 01 00
+ 00 00 mov DWORD PTR [esi+56], 1
+$LN42@zipOpenNew:
+
+; 1262 : return err;
+
+ 004d4 8b c3 mov eax, ebx
+$LN1@zipOpenNew:
+
+; 1263 : }
+
+ 004d6 5f pop edi
+ 004d7 5e pop esi
+ 004d8 5b pop ebx
+ 004d9 8b e5 mov esp, ebp
+ 004db 5d pop ebp
+ 004dc c2 4c 00 ret 76 ; 0000004cH
+_zipOpenNewFileInZip4_64@76 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zipOpenNewFileInZip3@64
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_filename$ = 12 ; size = 4
+_zipfi$ = 16 ; size = 4
+_extrafield_local$ = 20 ; size = 4
+_size_extrafield_local$ = 24 ; size = 4
+_extrafield_global$ = 28 ; size = 4
+_size_extrafield_global$ = 32 ; size = 4
+_comment$ = 36 ; size = 4
+_method$ = 40 ; size = 4
+_level$ = 44 ; size = 4
+_raw$ = 48 ; size = 4
+_windowBits$ = 52 ; size = 4
+_memLevel$ = 56 ; size = 4
+_strategy$ = 60 ; size = 4
+_password$ = 64 ; size = 4
+_crcForCrypting$ = 68 ; size = 4
+_zipOpenNewFileInZip3@64 PROC ; COMDAT
+
+; 1287 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1288 : return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+
+ 00003 6a 00 push 0
+ 00005 6a 00 push 0
+ 00007 6a 00 push 0
+ 00009 ff 75 44 push DWORD PTR _crcForCrypting$[ebp]
+ 0000c ff 75 40 push DWORD PTR _password$[ebp]
+ 0000f ff 75 3c push DWORD PTR _strategy$[ebp]
+ 00012 ff 75 38 push DWORD PTR _memLevel$[ebp]
+ 00015 ff 75 34 push DWORD PTR _windowBits$[ebp]
+ 00018 ff 75 30 push DWORD PTR _raw$[ebp]
+ 0001b ff 75 2c push DWORD PTR _level$[ebp]
+ 0001e ff 75 28 push DWORD PTR _method$[ebp]
+ 00021 ff 75 24 push DWORD PTR _comment$[ebp]
+ 00024 ff 75 20 push DWORD PTR _size_extrafield_global$[ebp]
+ 00027 ff 75 1c push DWORD PTR _extrafield_global$[ebp]
+ 0002a ff 75 18 push DWORD PTR _size_extrafield_local$[ebp]
+ 0002d ff 75 14 push DWORD PTR _extrafield_local$[ebp]
+ 00030 ff 75 10 push DWORD PTR _zipfi$[ebp]
+ 00033 ff 75 0c push DWORD PTR _filename$[ebp]
+ 00036 ff 75 08 push DWORD PTR _file$[ebp]
+ 00039 e8 00 00 00 00 call _zipOpenNewFileInZip4_64@76
+
+; 1289 : extrafield_local, size_extrafield_local,
+; 1290 : extrafield_global, size_extrafield_global,
+; 1291 : comment, method, level, raw,
+; 1292 : windowBits, memLevel, strategy,
+; 1293 : password, crcForCrypting, VERSIONMADEBY, 0, 0);
+; 1294 : }
+
+ 0003e 5d pop ebp
+ 0003f c2 40 00 ret 64 ; 00000040H
+_zipOpenNewFileInZip3@64 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zipOpenNewFileInZip3_64@68
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_filename$ = 12 ; size = 4
+_zipfi$ = 16 ; size = 4
+_extrafield_local$ = 20 ; size = 4
+_size_extrafield_local$ = 24 ; size = 4
+_extrafield_global$ = 28 ; size = 4
+_size_extrafield_global$ = 32 ; size = 4
+_comment$ = 36 ; size = 4
+_method$ = 40 ; size = 4
+_level$ = 44 ; size = 4
+_raw$ = 48 ; size = 4
+_windowBits$ = 52 ; size = 4
+_memLevel$ = 56 ; size = 4
+_strategy$ = 60 ; size = 4
+_password$ = 64 ; size = 4
+_crcForCrypting$ = 68 ; size = 4
+_zip64$ = 72 ; size = 4
+_zipOpenNewFileInZip3_64@68 PROC ; COMDAT
+
+; 1302 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1303 : return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+
+ 00003 ff 75 48 push DWORD PTR _zip64$[ebp]
+ 00006 6a 00 push 0
+ 00008 6a 00 push 0
+ 0000a ff 75 44 push DWORD PTR _crcForCrypting$[ebp]
+ 0000d ff 75 40 push DWORD PTR _password$[ebp]
+ 00010 ff 75 3c push DWORD PTR _strategy$[ebp]
+ 00013 ff 75 38 push DWORD PTR _memLevel$[ebp]
+ 00016 ff 75 34 push DWORD PTR _windowBits$[ebp]
+ 00019 ff 75 30 push DWORD PTR _raw$[ebp]
+ 0001c ff 75 2c push DWORD PTR _level$[ebp]
+ 0001f ff 75 28 push DWORD PTR _method$[ebp]
+ 00022 ff 75 24 push DWORD PTR _comment$[ebp]
+ 00025 ff 75 20 push DWORD PTR _size_extrafield_global$[ebp]
+ 00028 ff 75 1c push DWORD PTR _extrafield_global$[ebp]
+ 0002b ff 75 18 push DWORD PTR _size_extrafield_local$[ebp]
+ 0002e ff 75 14 push DWORD PTR _extrafield_local$[ebp]
+ 00031 ff 75 10 push DWORD PTR _zipfi$[ebp]
+ 00034 ff 75 0c push DWORD PTR _filename$[ebp]
+ 00037 ff 75 08 push DWORD PTR _file$[ebp]
+ 0003a e8 00 00 00 00 call _zipOpenNewFileInZip4_64@76
+
+; 1304 : extrafield_local, size_extrafield_local,
+; 1305 : extrafield_global, size_extrafield_global,
+; 1306 : comment, method, level, raw,
+; 1307 : windowBits, memLevel, strategy,
+; 1308 : password, crcForCrypting, VERSIONMADEBY, 0, zip64);
+; 1309 : }
+
+ 0003f 5d pop ebp
+ 00040 c2 44 00 ret 68 ; 00000044H
+_zipOpenNewFileInZip3_64@68 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zipOpenNewFileInZip2@44
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_filename$ = 12 ; size = 4
+_zipfi$ = 16 ; size = 4
+_extrafield_local$ = 20 ; size = 4
+_size_extrafield_local$ = 24 ; size = 4
+_extrafield_global$ = 28 ; size = 4
+_size_extrafield_global$ = 32 ; size = 4
+_comment$ = 36 ; size = 4
+_method$ = 40 ; size = 4
+_level$ = 44 ; size = 4
+_raw$ = 48 ; size = 4
+_zipOpenNewFileInZip2@44 PROC ; COMDAT
+
+; 1315 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1316 : return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+
+ 00003 6a 00 push 0
+ 00005 6a 00 push 0
+ 00007 6a 00 push 0
+ 00009 6a 00 push 0
+ 0000b 6a 00 push 0
+ 0000d 6a 00 push 0
+ 0000f 6a 08 push 8
+ 00011 6a f1 push -15 ; fffffff1H
+ 00013 ff 75 30 push DWORD PTR _raw$[ebp]
+ 00016 ff 75 2c push DWORD PTR _level$[ebp]
+ 00019 ff 75 28 push DWORD PTR _method$[ebp]
+ 0001c ff 75 24 push DWORD PTR _comment$[ebp]
+ 0001f ff 75 20 push DWORD PTR _size_extrafield_global$[ebp]
+ 00022 ff 75 1c push DWORD PTR _extrafield_global$[ebp]
+ 00025 ff 75 18 push DWORD PTR _size_extrafield_local$[ebp]
+ 00028 ff 75 14 push DWORD PTR _extrafield_local$[ebp]
+ 0002b ff 75 10 push DWORD PTR _zipfi$[ebp]
+ 0002e ff 75 0c push DWORD PTR _filename$[ebp]
+ 00031 ff 75 08 push DWORD PTR _file$[ebp]
+ 00034 e8 00 00 00 00 call _zipOpenNewFileInZip4_64@76
+
+; 1317 : extrafield_local, size_extrafield_local,
+; 1318 : extrafield_global, size_extrafield_global,
+; 1319 : comment, method, level, raw,
+; 1320 : -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+; 1321 : NULL, 0, VERSIONMADEBY, 0, 0);
+; 1322 : }
+
+ 00039 5d pop ebp
+ 0003a c2 2c 00 ret 44 ; 0000002cH
+_zipOpenNewFileInZip2@44 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zipOpenNewFileInZip2_64@48
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_filename$ = 12 ; size = 4
+_zipfi$ = 16 ; size = 4
+_extrafield_local$ = 20 ; size = 4
+_size_extrafield_local$ = 24 ; size = 4
+_extrafield_global$ = 28 ; size = 4
+_size_extrafield_global$ = 32 ; size = 4
+_comment$ = 36 ; size = 4
+_method$ = 40 ; size = 4
+_level$ = 44 ; size = 4
+_raw$ = 48 ; size = 4
+_zip64$ = 52 ; size = 4
+_zipOpenNewFileInZip2_64@48 PROC ; COMDAT
+
+; 1328 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1329 : return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+
+ 00003 ff 75 34 push DWORD PTR _zip64$[ebp]
+ 00006 6a 00 push 0
+ 00008 6a 00 push 0
+ 0000a 6a 00 push 0
+ 0000c 6a 00 push 0
+ 0000e 6a 00 push 0
+ 00010 6a 08 push 8
+ 00012 6a f1 push -15 ; fffffff1H
+ 00014 ff 75 30 push DWORD PTR _raw$[ebp]
+ 00017 ff 75 2c push DWORD PTR _level$[ebp]
+ 0001a ff 75 28 push DWORD PTR _method$[ebp]
+ 0001d ff 75 24 push DWORD PTR _comment$[ebp]
+ 00020 ff 75 20 push DWORD PTR _size_extrafield_global$[ebp]
+ 00023 ff 75 1c push DWORD PTR _extrafield_global$[ebp]
+ 00026 ff 75 18 push DWORD PTR _size_extrafield_local$[ebp]
+ 00029 ff 75 14 push DWORD PTR _extrafield_local$[ebp]
+ 0002c ff 75 10 push DWORD PTR _zipfi$[ebp]
+ 0002f ff 75 0c push DWORD PTR _filename$[ebp]
+ 00032 ff 75 08 push DWORD PTR _file$[ebp]
+ 00035 e8 00 00 00 00 call _zipOpenNewFileInZip4_64@76
+
+; 1330 : extrafield_local, size_extrafield_local,
+; 1331 : extrafield_global, size_extrafield_global,
+; 1332 : comment, method, level, raw,
+; 1333 : -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+; 1334 : NULL, 0, VERSIONMADEBY, 0, zip64);
+; 1335 : }
+
+ 0003a 5d pop ebp
+ 0003b c2 30 00 ret 48 ; 00000030H
+_zipOpenNewFileInZip2_64@48 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zipOpenNewFileInZip64@44
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_filename$ = 12 ; size = 4
+_zipfi$ = 16 ; size = 4
+_extrafield_local$ = 20 ; size = 4
+_size_extrafield_local$ = 24 ; size = 4
+_extrafield_global$ = 28 ; size = 4
+_size_extrafield_global$ = 32 ; size = 4
+_comment$ = 36 ; size = 4
+_method$ = 40 ; size = 4
+_level$ = 44 ; size = 4
+_zip64$ = 48 ; size = 4
+_zipOpenNewFileInZip64@44 PROC ; COMDAT
+
+; 1341 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1342 : return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+
+ 00003 ff 75 30 push DWORD PTR _zip64$[ebp]
+ 00006 6a 00 push 0
+ 00008 6a 00 push 0
+ 0000a 6a 00 push 0
+ 0000c 6a 00 push 0
+ 0000e 6a 00 push 0
+ 00010 6a 08 push 8
+ 00012 6a f1 push -15 ; fffffff1H
+ 00014 6a 00 push 0
+ 00016 ff 75 2c push DWORD PTR _level$[ebp]
+ 00019 ff 75 28 push DWORD PTR _method$[ebp]
+ 0001c ff 75 24 push DWORD PTR _comment$[ebp]
+ 0001f ff 75 20 push DWORD PTR _size_extrafield_global$[ebp]
+ 00022 ff 75 1c push DWORD PTR _extrafield_global$[ebp]
+ 00025 ff 75 18 push DWORD PTR _size_extrafield_local$[ebp]
+ 00028 ff 75 14 push DWORD PTR _extrafield_local$[ebp]
+ 0002b ff 75 10 push DWORD PTR _zipfi$[ebp]
+ 0002e ff 75 0c push DWORD PTR _filename$[ebp]
+ 00031 ff 75 08 push DWORD PTR _file$[ebp]
+ 00034 e8 00 00 00 00 call _zipOpenNewFileInZip4_64@76
+
+; 1343 : extrafield_local, size_extrafield_local,
+; 1344 : extrafield_global, size_extrafield_global,
+; 1345 : comment, method, level, 0,
+; 1346 : -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+; 1347 : NULL, 0, VERSIONMADEBY, 0, zip64);
+; 1348 : }
+
+ 00039 5d pop ebp
+ 0003a c2 2c 00 ret 44 ; 0000002cH
+_zipOpenNewFileInZip64@44 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zipOpenNewFileInZip@40
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_filename$ = 12 ; size = 4
+_zipfi$ = 16 ; size = 4
+_extrafield_local$ = 20 ; size = 4
+_size_extrafield_local$ = 24 ; size = 4
+_extrafield_global$ = 28 ; size = 4
+_size_extrafield_global$ = 32 ; size = 4
+_comment$ = 36 ; size = 4
+_method$ = 40 ; size = 4
+_level$ = 44 ; size = 4
+_zipOpenNewFileInZip@40 PROC ; COMDAT
+
+; 1354 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1355 : return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+
+ 00003 6a 00 push 0
+ 00005 6a 00 push 0
+ 00007 6a 00 push 0
+ 00009 6a 00 push 0
+ 0000b 6a 00 push 0
+ 0000d 6a 00 push 0
+ 0000f 6a 08 push 8
+ 00011 6a f1 push -15 ; fffffff1H
+ 00013 6a 00 push 0
+ 00015 ff 75 2c push DWORD PTR _level$[ebp]
+ 00018 ff 75 28 push DWORD PTR _method$[ebp]
+ 0001b ff 75 24 push DWORD PTR _comment$[ebp]
+ 0001e ff 75 20 push DWORD PTR _size_extrafield_global$[ebp]
+ 00021 ff 75 1c push DWORD PTR _extrafield_global$[ebp]
+ 00024 ff 75 18 push DWORD PTR _size_extrafield_local$[ebp]
+ 00027 ff 75 14 push DWORD PTR _extrafield_local$[ebp]
+ 0002a ff 75 10 push DWORD PTR _zipfi$[ebp]
+ 0002d ff 75 0c push DWORD PTR _filename$[ebp]
+ 00030 ff 75 08 push DWORD PTR _file$[ebp]
+ 00033 e8 00 00 00 00 call _zipOpenNewFileInZip4_64@76
+
+; 1356 : extrafield_local, size_extrafield_local,
+; 1357 : extrafield_global, size_extrafield_global,
+; 1358 : comment, method, level, 0,
+; 1359 : -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+; 1360 : NULL, 0, VERSIONMADEBY, 0, 0);
+; 1361 : }
+
+ 00038 5d pop ebp
+ 00039 c2 28 00 ret 40 ; 00000028H
+_zipOpenNewFileInZip@40 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zip64FlushWriteBuffer
+_TEXT SEGMENT
+tv237 = -4 ; size = 4
+_zip64FlushWriteBuffer PROC ; COMDAT
+; _zi$ = ecx
+
+; 1364 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 53 push ebx
+ 00005 56 push esi
+ 00006 8b f1 mov esi, ecx
+
+; 1365 : int err=ZIP_OK;
+
+ 00008 33 db xor ebx, ebx
+ 0000a 57 push edi
+
+; 1366 :
+; 1367 : if (zi->ci.encrypt != 0)
+
+ 0000b 39 9e ac 00 01
+ 00 cmp DWORD PTR [esi+65708], ebx
+ 00011 74 53 je SHORT $LN3@zip64Flush
+
+; 1368 : {
+; 1369 : #ifndef NOCRYPT
+; 1370 : uInt i;
+; 1371 : int t;
+; 1372 : for (i=0;i<zi->ci.pos_in_buffered_data;i++)
+
+ 00013 39 5e 7c cmp DWORD PTR [esi+124], ebx
+ 00016 76 4e jbe SHORT $LN3@zip64Flush
+ 00018 b9 5c ff ff ff mov ecx, -164 ; ffffff5cH
+ 0001d 8d 86 d0 00 01
+ 00 lea eax, DWORD PTR [esi+65744]
+ 00023 2b ce sub ecx, esi
+ 00025 8d be a4 00 00
+ 00 lea edi, DWORD PTR [esi+164]
+ 0002b 89 4d fc mov DWORD PTR tv237[ebp], ecx
+ 0002e 66 90 npad 2
+$LL4@zip64Flush:
+
+; 1373 : zi->ci.buffered_data[i] = zencode(zi->ci.keys, zi->ci.pcrc_32_tab, zi->ci.buffered_data[i],t);
+
+ 00030 8b c8 mov ecx, eax
+ 00032 e8 00 00 00 00 call _decrypt_byte
+ 00037 0f b6 0f movzx ecx, BYTE PTR [edi]
+ 0003a 8b d8 mov ebx, eax
+ 0003c 8b 96 dc 00 01
+ 00 mov edx, DWORD PTR [esi+65756]
+ 00042 51 push ecx
+ 00043 8d 8e d0 00 01
+ 00 lea ecx, DWORD PTR [esi+65744]
+ 00049 e8 00 00 00 00 call _update_keys
+ 0004e 30 1f xor BYTE PTR [edi], bl
+ 00050 83 c4 04 add esp, 4
+ 00053 8b 45 fc mov eax, DWORD PTR tv237[ebp]
+ 00056 47 inc edi
+ 00057 03 c7 add eax, edi
+ 00059 3b 46 7c cmp eax, DWORD PTR [esi+124]
+ 0005c 8d 86 d0 00 01
+ 00 lea eax, DWORD PTR [esi+65744]
+ 00062 72 cc jb SHORT $LL4@zip64Flush
+ 00064 33 db xor ebx, ebx
+$LN3@zip64Flush:
+
+; 1374 : #endif
+; 1375 : }
+; 1376 :
+; 1377 : if (ZWRITE64(zi->z_filefunc,zi->filestream,zi->ci.buffered_data,zi->ci.pos_in_buffered_data) != zi->ci.pos_in_buffered_data)
+
+ 00066 8b 7e 7c mov edi, DWORD PTR [esi+124]
+ 00069 8d 86 a4 00 00
+ 00 lea eax, DWORD PTR [esi+164]
+ 0006f 57 push edi
+ 00070 50 push eax
+ 00071 ff 76 2c push DWORD PTR [esi+44]
+ 00074 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 00077 ff 76 1c push DWORD PTR [esi+28]
+ 0007a ff d0 call eax
+ 0007c 83 c4 10 add esp, 16 ; 00000010H
+
+; 1378 : err = ZIP_ERRNO;
+; 1379 :
+; 1380 : zi->ci.totalCompressedData += zi->ci.pos_in_buffered_data;
+; 1381 :
+; 1382 : #ifdef HAVE_BZIP2
+; 1383 : if(zi->ci.method == Z_BZIP2ED)
+; 1384 : {
+; 1385 : zi->ci.totalUncompressedData += zi->ci.bstream.total_in_lo32;
+; 1386 : zi->ci.bstream.total_in_lo32 = 0;
+; 1387 : zi->ci.bstream.total_in_hi32 = 0;
+; 1388 : }
+; 1389 : else
+; 1390 : #endif
+; 1391 : {
+; 1392 : zi->ci.totalUncompressedData += zi->ci.stream.total_in;
+; 1393 : zi->ci.stream.total_in = 0;
+; 1394 : }
+; 1395 :
+; 1396 :
+; 1397 : zi->ci.pos_in_buffered_data = 0;
+
+ 0007f c7 46 7c 00 00
+ 00 00 mov DWORD PTR [esi+124], 0
+ 00086 83 c9 ff or ecx, -1
+ 00089 3b c7 cmp eax, edi
+ 0008b 0f 45 d9 cmovne ebx, ecx
+ 0008e 01 be c0 00 01
+ 00 add DWORD PTR [esi+65728], edi
+ 00094 8b 4e 48 mov ecx, DWORD PTR [esi+72]
+
+; 1398 :
+; 1399 : return err;
+
+ 00097 8b c3 mov eax, ebx
+ 00099 83 96 c4 00 01
+ 00 00 adc DWORD PTR [esi+65732], 0
+ 000a0 01 8e c8 00 01
+ 00 add DWORD PTR [esi+65736], ecx
+ 000a6 5f pop edi
+ 000a7 83 96 cc 00 01
+ 00 00 adc DWORD PTR [esi+65740], 0
+ 000ae c7 46 48 00 00
+ 00 00 mov DWORD PTR [esi+72], 0
+ 000b5 5e pop esi
+ 000b6 5b pop ebx
+
+; 1400 : }
+
+ 000b7 8b e5 mov esp, ebp
+ 000b9 5d pop ebp
+ 000ba c3 ret 0
+_zip64FlushWriteBuffer ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zipWriteInFileInZip@12
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_buf$ = 12 ; size = 4
+_len$ = 16 ; size = 4
+_zipWriteInFileInZip@12 PROC ; COMDAT
+
+; 1403 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+
+; 1404 : zip64_internal* zi;
+; 1405 : int err=ZIP_OK;
+; 1406 :
+; 1407 : if (file == NULL)
+
+ 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 00007 85 f6 test esi, esi
+ 00009 75 0a jne SHORT $LN7@zipWriteIn
+$LN29@zipWriteIn:
+
+; 1408 : return ZIP_PARAMERROR;
+
+ 0000b b8 9a ff ff ff mov eax, -102 ; ffffff9aH
+ 00010 5e pop esi
+
+; 1507 : }
+
+ 00011 5d pop ebp
+ 00012 c2 0c 00 ret 12 ; 0000000cH
+$LN7@zipWriteIn:
+
+; 1409 : zi = (zip64_internal*)file;
+; 1410 :
+; 1411 : if (zi->in_opened_file_inzip == 0)
+
+ 00015 83 7e 38 00 cmp DWORD PTR [esi+56], 0
+ 00019 74 f0 je SHORT $LN29@zipWriteIn
+
+; 1412 : return ZIP_PARAMERROR;
+; 1413 :
+; 1414 : zi->ci.crc32 = crc32(zi->ci.crc32,buf,(uInt)len);
+
+ 0001b 53 push ebx
+ 0001c 8b 5d 10 mov ebx, DWORD PTR _len$[ebp]
+ 0001f 57 push edi
+ 00020 8b 7d 0c mov edi, DWORD PTR _buf$[ebp]
+ 00023 53 push ebx
+ 00024 57 push edi
+ 00025 ff b6 a8 00 01
+ 00 push DWORD PTR [esi+65704]
+ 0002b e8 00 00 00 00 call _crc32@12
+
+; 1415 :
+; 1416 : #ifdef HAVE_BZIP2
+; 1417 : if(zi->ci.method == Z_BZIP2ED && (!zi->ci.raw))
+; 1418 : {
+; 1419 : zi->ci.bstream.next_in = (void*)buf;
+; 1420 : zi->ci.bstream.avail_in = len;
+; 1421 : err = BZ_RUN_OK;
+; 1422 :
+; 1423 : while ((err==BZ_RUN_OK) && (zi->ci.bstream.avail_in>0))
+; 1424 : {
+; 1425 : if (zi->ci.bstream.avail_out == 0)
+; 1426 : {
+; 1427 : if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+; 1428 : err = ZIP_ERRNO;
+; 1429 : zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
+; 1430 : zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;
+; 1431 : }
+; 1432 :
+; 1433 :
+; 1434 : if(err != BZ_RUN_OK)
+; 1435 : break;
+; 1436 :
+; 1437 : if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
+; 1438 : {
+; 1439 : uLong uTotalOutBefore_lo = zi->ci.bstream.total_out_lo32;
+; 1440 : // uLong uTotalOutBefore_hi = zi->ci.bstream.total_out_hi32;
+; 1441 : err=BZ2_bzCompress(&zi->ci.bstream, BZ_RUN);
+; 1442 :
+; 1443 : zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore_lo) ;
+; 1444 : }
+; 1445 : }
+; 1446 :
+; 1447 : if(err == BZ_RUN_OK)
+; 1448 : err = ZIP_OK;
+; 1449 : }
+; 1450 : else
+; 1451 : #endif
+; 1452 : {
+; 1453 : zi->ci.stream.next_in = (Bytef*)buf;
+
+ 00030 8d 4e 40 lea ecx, DWORD PTR [esi+64]
+
+; 1454 : zi->ci.stream.avail_in = len;
+
+ 00033 89 5e 44 mov DWORD PTR [esi+68], ebx
+ 00036 89 39 mov DWORD PTR [ecx], edi
+ 00038 83 cf ff or edi, -1
+ 0003b 89 86 a8 00 01
+ 00 mov DWORD PTR [esi+65704], eax
+ 00041 33 db xor ebx, ebx
+$LL2@zipWriteIn:
+
+; 1455 :
+; 1456 : while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0))
+
+ 00043 83 7e 44 00 cmp DWORD PTR [esi+68], 0
+ 00047 0f 86 9d 00 00
+ 00 jbe $LN28@zipWriteIn
+
+; 1457 : {
+; 1458 : if (zi->ci.stream.avail_out == 0)
+
+ 0004d 83 7e 50 00 cmp DWORD PTR [esi+80], 0
+ 00051 75 20 jne SHORT $LN9@zipWriteIn
+
+; 1459 : {
+; 1460 : if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+
+ 00053 8b ce mov ecx, esi
+ 00055 e8 00 00 00 00 call _zip64FlushWriteBuffer
+ 0005a 83 f8 ff cmp eax, -1
+
+; 1461 : err = ZIP_ERRNO;
+; 1462 : zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
+
+ 0005d c7 46 50 00 00
+ 01 00 mov DWORD PTR [esi+80], 65536 ; 00010000H
+
+; 1463 : zi->ci.stream.next_out = zi->ci.buffered_data;
+
+ 00064 8d 86 a4 00 00
+ 00 lea eax, DWORD PTR [esi+164]
+ 0006a 0f 44 df cmove ebx, edi
+ 0006d 89 46 4c mov DWORD PTR [esi+76], eax
+ 00070 8d 4e 40 lea ecx, DWORD PTR [esi+64]
+$LN9@zipWriteIn:
+
+; 1464 : }
+; 1465 :
+; 1466 :
+; 1467 : if(err != ZIP_OK)
+
+ 00073 85 db test ebx, ebx
+ 00075 75 73 jne SHORT $LN28@zipWriteIn
+
+; 1468 : break;
+; 1469 :
+; 1470 : if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
+
+ 00077 83 be 9c 00 00
+ 00 08 cmp DWORD PTR [esi+156], 8
+ 0007e 75 28 jne SHORT $LN12@zipWriteIn
+ 00080 39 9e a0 00 00
+ 00 cmp DWORD PTR [esi+160], ebx
+ 00086 75 20 jne SHORT $LN12@zipWriteIn
+
+; 1471 : {
+; 1472 : uLong uTotalOutBefore = zi->ci.stream.total_out;
+
+ 00088 8b 7e 54 mov edi, DWORD PTR [esi+84]
+
+; 1473 : err=deflate(&zi->ci.stream, Z_NO_FLUSH);
+
+ 0008b 53 push ebx
+ 0008c 51 push ecx
+ 0008d e8 00 00 00 00 call _deflate@8
+
+; 1474 : if(uTotalOutBefore > zi->ci.stream.total_out)
+; 1475 : {
+; 1476 : int bBreak = 0;
+; 1477 : bBreak++;
+; 1478 : }
+; 1479 :
+; 1480 : zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;
+
+ 00092 8b 4e 54 mov ecx, DWORD PTR [esi+84]
+ 00095 8b d8 mov ebx, eax
+ 00097 2b cf sub ecx, edi
+ 00099 01 4e 7c add DWORD PTR [esi+124], ecx
+ 0009c 85 db test ebx, ebx
+ 0009e 75 4a jne SHORT $LN28@zipWriteIn
+
+; 1455 :
+; 1456 : while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0))
+
+ 000a0 8d 4e 40 lea ecx, DWORD PTR [esi+64]
+ 000a3 83 cf ff or edi, -1
+ 000a6 eb 9b jmp SHORT $LL2@zipWriteIn
+$LN12@zipWriteIn:
+
+; 1481 : }
+; 1482 : else
+; 1483 : {
+; 1484 : uInt copy_this,i;
+; 1485 : if (zi->ci.stream.avail_in < zi->ci.stream.avail_out)
+
+ 000a8 8b 7e 50 mov edi, DWORD PTR [esi+80]
+ 000ab 39 7e 44 cmp DWORD PTR [esi+68], edi
+ 000ae 0f 42 7e 44 cmovb edi, DWORD PTR [esi+68]
+
+; 1486 : copy_this = zi->ci.stream.avail_in;
+; 1487 : else
+; 1488 : copy_this = zi->ci.stream.avail_out;
+; 1489 :
+; 1490 : for (i = 0; i < copy_this; i++)
+
+ 000b2 33 d2 xor edx, edx
+ 000b4 85 ff test edi, edi
+ 000b6 74 16 je SHORT $LN5@zipWriteIn
+$LL22@zipWriteIn:
+
+; 1491 : *(((char*)zi->ci.stream.next_out)+i) =
+
+ 000b8 8b 01 mov eax, DWORD PTR [ecx]
+ 000ba 8b 4e 4c mov ecx, DWORD PTR [esi+76]
+ 000bd 8a 04 02 mov al, BYTE PTR [edx+eax]
+ 000c0 88 04 0a mov BYTE PTR [edx+ecx], al
+ 000c3 42 inc edx
+ 000c4 8d 4e 40 lea ecx, DWORD PTR [esi+64]
+ 000c7 3b d7 cmp edx, edi
+ 000c9 72 ed jb SHORT $LL22@zipWriteIn
+ 000cb 8d 4e 40 lea ecx, DWORD PTR [esi+64]
+$LN5@zipWriteIn:
+
+; 1492 : *(((const char*)zi->ci.stream.next_in)+i);
+; 1493 : {
+; 1494 : zi->ci.stream.avail_in -= copy_this;
+
+ 000ce 29 7e 44 sub DWORD PTR [esi+68], edi
+
+; 1495 : zi->ci.stream.avail_out-= copy_this;
+
+ 000d1 29 7e 50 sub DWORD PTR [esi+80], edi
+
+; 1496 : zi->ci.stream.next_in+= copy_this;
+
+ 000d4 01 39 add DWORD PTR [ecx], edi
+
+; 1497 : zi->ci.stream.next_out+= copy_this;
+
+ 000d6 01 7e 4c add DWORD PTR [esi+76], edi
+
+; 1498 : zi->ci.stream.total_in+= copy_this;
+
+ 000d9 01 7e 48 add DWORD PTR [esi+72], edi
+
+; 1499 : zi->ci.stream.total_out+= copy_this;
+
+ 000dc 01 7e 54 add DWORD PTR [esi+84], edi
+
+; 1500 : zi->ci.pos_in_buffered_data += copy_this;
+
+ 000df 01 7e 7c add DWORD PTR [esi+124], edi
+ 000e2 83 cf ff or edi, -1
+ 000e5 e9 59 ff ff ff jmp $LL2@zipWriteIn
+$LN28@zipWriteIn:
+ 000ea 5f pop edi
+
+; 1501 : }
+; 1502 : }
+; 1503 : }// while(...)
+; 1504 : }
+; 1505 :
+; 1506 : return err;
+
+ 000eb 8b c3 mov eax, ebx
+ 000ed 5b pop ebx
+ 000ee 5e pop esi
+
+; 1507 : }
+
+ 000ef 5d pop ebp
+ 000f0 c2 0c 00 ret 12 ; 0000000cH
+_zipWriteInFileInZip@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zipCloseFileInZipRaw@12
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_uncompressed_size$ = 12 ; size = 4
+_crc32$ = 16 ; size = 4
+_zipCloseFileInZipRaw@12 PROC ; COMDAT
+
+; 1510 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+
+; 1511 : return zipCloseFileInZipRaw64 (file, uncompressed_size, crc32);
+
+ 00006 ff 75 10 push DWORD PTR _crc32$[ebp]
+ 00009 6a 00 push 0
+ 0000b ff 75 0c push DWORD PTR _uncompressed_size$[ebp]
+ 0000e ff 75 08 push DWORD PTR _file$[ebp]
+ 00011 e8 00 00 00 00 call _zipCloseFileInZipRaw64@16
+
+; 1512 : }
+
+ 00016 8b e5 mov esp, ebp
+ 00018 5d pop ebp
+ 00019 c2 0c 00 ret 12 ; 0000000cH
+_zipCloseFileInZipRaw@12 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zipCloseFileInZipRaw64@16
+_TEXT SEGMENT
+_uncompressed_size$2$ = -28 ; size = 4
+_uncompressed_size$1$ = -24 ; size = 4
+_cur_pos_inzip$2$ = -20 ; size = 4
+_p$1$ = -20 ; size = 4
+_compressed_size$2$ = -16 ; size = 4
+_compressed_size$1$ = -12 ; size = 4
+_crc32$1$ = -8 ; size = 4
+_cur_pos_inzip$1$ = -4 ; size = 4
+tv640 = -4 ; size = 4
+_file$ = 8 ; size = 4
+_uncompressed_size$ = 12 ; size = 8
+_crc32$ = 20 ; size = 4
+_zipCloseFileInZipRaw64@16 PROC ; COMDAT
+
+; 1515 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 83 ec 1c sub esp, 28 ; 0000001cH
+ 00009 53 push ebx
+ 0000a 56 push esi
+
+; 1516 : zip64_internal* zi;
+; 1517 : ZPOS64_T compressed_size;
+; 1518 : uLong invalidValue = 0xffffffff;
+; 1519 : short datasize = 0;
+; 1520 : int err=ZIP_OK;
+; 1521 :
+; 1522 : if (file == NULL)
+
+ 0000b 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 0000e 33 db xor ebx, ebx
+ 00010 57 push edi
+ 00011 85 f6 test esi, esi
+ 00013 75 0e jne SHORT $LN4@zipCloseFi
+$LN82@zipCloseFi:
+
+; 1523 : return ZIP_PARAMERROR;
+
+ 00015 b8 9a ff ff ff mov eax, -102 ; ffffff9aH
+
+; 1748 : }
+
+ 0001a 5f pop edi
+ 0001b 5e pop esi
+ 0001c 5b pop ebx
+ 0001d 8b e5 mov esp, ebp
+ 0001f 5d pop ebp
+ 00020 c2 10 00 ret 16 ; 00000010H
+$LN4@zipCloseFi:
+
+; 1524 : zi = (zip64_internal*)file;
+; 1525 :
+; 1526 : if (zi->in_opened_file_inzip == 0)
+
+ 00023 39 5e 38 cmp DWORD PTR [esi+56], ebx
+ 00026 74 ed je SHORT $LN82@zipCloseFi
+
+; 1527 : return ZIP_PARAMERROR;
+; 1528 : zi->ci.stream.avail_in = 0;
+; 1529 :
+; 1530 : if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
+
+ 00028 83 be 9c 00 00
+ 00 08 cmp DWORD PTR [esi+156], 8
+ 0002f 89 5e 44 mov DWORD PTR [esi+68], ebx
+ 00032 75 4d jne SHORT $LN11@zipCloseFi
+ 00034 39 9e a0 00 00
+ 00 cmp DWORD PTR [esi+160], ebx
+ 0003a 75 45 jne SHORT $LN11@zipCloseFi
+ 0003c 0f 1f 40 00 npad 4
+$LL70@zipCloseFi:
+
+; 1531 : {
+; 1532 : while (err==ZIP_OK)
+; 1533 : {
+; 1534 : uLong uTotalOutBefore;
+; 1535 : if (zi->ci.stream.avail_out == 0)
+
+ 00040 83 7e 50 00 cmp DWORD PTR [esi+80], 0
+ 00044 8d 5e 40 lea ebx, DWORD PTR [esi+64]
+ 00047 75 17 jne SHORT $LN8@zipCloseFi
+
+; 1536 : {
+; 1537 : if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+
+ 00049 8b ce mov ecx, esi
+ 0004b e8 00 00 00 00 call _zip64FlushWriteBuffer
+
+; 1538 : err = ZIP_ERRNO;
+; 1539 : zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
+; 1540 : zi->ci.stream.next_out = zi->ci.buffered_data;
+
+ 00050 8d 86 a4 00 00
+ 00 lea eax, DWORD PTR [esi+164]
+ 00056 c7 46 50 00 00
+ 01 00 mov DWORD PTR [esi+80], 65536 ; 00010000H
+ 0005d 89 46 4c mov DWORD PTR [esi+76], eax
+$LN8@zipCloseFi:
+
+; 1541 : }
+; 1542 : uTotalOutBefore = zi->ci.stream.total_out;
+
+ 00060 8b 7e 54 mov edi, DWORD PTR [esi+84]
+
+; 1543 : err=deflate(&zi->ci.stream, Z_FINISH);
+
+ 00063 6a 04 push 4
+ 00065 53 push ebx
+ 00066 e8 00 00 00 00 call _deflate@8
+ 0006b 8b d8 mov ebx, eax
+
+; 1544 : zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;
+
+ 0006d 8b 46 54 mov eax, DWORD PTR [esi+84]
+ 00070 2b c7 sub eax, edi
+ 00072 01 46 7c add DWORD PTR [esi+124], eax
+ 00075 85 db test ebx, ebx
+ 00077 74 c7 je SHORT $LL70@zipCloseFi
+
+; 1545 : }
+; 1546 : }
+; 1547 : else if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
+; 1548 : {
+; 1549 : #ifdef HAVE_BZIP2
+; 1550 : err = BZ_FINISH_OK;
+; 1551 : while (err==BZ_FINISH_OK)
+; 1552 : {
+; 1553 : uLong uTotalOutBefore;
+; 1554 : if (zi->ci.bstream.avail_out == 0)
+; 1555 : {
+; 1556 : if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+; 1557 : err = ZIP_ERRNO;
+; 1558 : zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
+; 1559 : zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;
+; 1560 : }
+; 1561 : uTotalOutBefore = zi->ci.bstream.total_out_lo32;
+; 1562 : err=BZ2_bzCompress(&zi->ci.bstream, BZ_FINISH);
+; 1563 : if(err == BZ_STREAM_END)
+; 1564 : err = Z_STREAM_END;
+; 1565 :
+; 1566 : zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore);
+; 1567 : }
+; 1568 :
+; 1569 : if(err == BZ_FINISH_OK)
+; 1570 : err = ZIP_OK;
+; 1571 : #endif
+; 1572 : }
+; 1573 :
+; 1574 : if (err==Z_STREAM_END)
+
+ 00079 33 c0 xor eax, eax
+ 0007b 83 fb 01 cmp ebx, 1
+ 0007e 0f 44 d8 cmove ebx, eax
+$LN11@zipCloseFi:
+
+; 1575 : err=ZIP_OK; /* this is normal */
+; 1576 :
+; 1577 : if ((zi->ci.pos_in_buffered_data>0) && (err==ZIP_OK))
+
+ 00081 83 cf ff or edi, -1
+ 00084 83 7e 7c 00 cmp DWORD PTR [esi+124], 0
+ 00088 76 10 jbe SHORT $LN13@zipCloseFi
+ 0008a 85 db test ebx, ebx
+ 0008c 75 0c jne SHORT $LN13@zipCloseFi
+
+; 1578 : {
+; 1579 : if (zip64FlushWriteBuffer(zi)==ZIP_ERRNO)
+
+ 0008e 8b ce mov ecx, esi
+ 00090 e8 00 00 00 00 call _zip64FlushWriteBuffer
+ 00095 3b c7 cmp eax, edi
+ 00097 0f 44 df cmove ebx, edi
+$LN13@zipCloseFi:
+
+; 1580 : err = ZIP_ERRNO;
+; 1581 : }
+; 1582 :
+; 1583 : if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
+
+ 0009a 83 be 9c 00 00
+ 00 08 cmp DWORD PTR [esi+156], 8
+ 000a1 75 1e jne SHORT $LN14@zipCloseFi
+ 000a3 83 be a0 00 00
+ 00 00 cmp DWORD PTR [esi+160], 0
+ 000aa 75 36 jne SHORT $LN69@zipCloseFi
+
+; 1584 : {
+; 1585 : int tmp_err = deflateEnd(&zi->ci.stream);
+
+ 000ac 8d 46 40 lea eax, DWORD PTR [esi+64]
+ 000af 50 push eax
+ 000b0 e8 00 00 00 00 call _deflateEnd@4
+
+; 1586 : if (err == ZIP_OK)
+
+ 000b5 85 db test ebx, ebx
+
+; 1587 : err = tmp_err;
+; 1588 : zi->ci.stream_initialised = 0;
+
+ 000b7 c7 46 78 00 00
+ 00 00 mov DWORD PTR [esi+120], 0
+ 000be 0f 44 d8 cmove ebx, eax
+$LN14@zipCloseFi:
+
+; 1589 : }
+; 1590 : #ifdef HAVE_BZIP2
+; 1591 : else if((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
+; 1592 : {
+; 1593 : int tmperr = BZ2_bzCompressEnd(&zi->ci.bstream);
+; 1594 : if (err==ZIP_OK)
+; 1595 : err = tmperr;
+; 1596 : zi->ci.stream_initialised = 0;
+; 1597 : }
+; 1598 : #endif
+; 1599 :
+; 1600 : if (!zi->ci.raw)
+
+ 000c1 83 be a0 00 00
+ 00 00 cmp DWORD PTR [esi+160], 0
+ 000c8 75 18 jne SHORT $LN69@zipCloseFi
+
+; 1601 : {
+; 1602 : crc32 = (uLong)zi->ci.crc32;
+
+ 000ca 8b 86 a8 00 01
+ 00 mov eax, DWORD PTR [esi+65704]
+
+; 1603 : uncompressed_size = zi->ci.totalUncompressedData;
+
+ 000d0 8b 8e c8 00 01
+ 00 mov ecx, DWORD PTR [esi+65736]
+ 000d6 89 44 24 20 mov DWORD PTR _crc32$1$[esp+40], eax
+ 000da 8b 86 cc 00 01
+ 00 mov eax, DWORD PTR [esi+65740]
+ 000e0 eb 0d jmp SHORT $LN78@zipCloseFi
+$LN69@zipCloseFi:
+ 000e2 8b 45 14 mov eax, DWORD PTR _crc32$[ebp]
+ 000e5 8b 4d 0c mov ecx, DWORD PTR _uncompressed_size$[ebp]
+ 000e8 89 44 24 20 mov DWORD PTR _crc32$1$[esp+40], eax
+ 000ec 8b 45 10 mov eax, DWORD PTR _uncompressed_size$[ebp+4]
+$LN78@zipCloseFi:
+ 000ef 89 44 24 0c mov DWORD PTR _uncompressed_size$2$[esp+40], eax
+
+; 1604 : }
+; 1605 : compressed_size = zi->ci.totalCompressedData;
+; 1606 :
+; 1607 : # ifndef NOCRYPT
+; 1608 : compressed_size += zi->ci.crypt_header_size;
+
+ 000f3 8b 86 e0 00 01
+ 00 mov eax, DWORD PTR [esi+65760]
+ 000f9 99 cdq
+ 000fa 8b f8 mov edi, eax
+ 000fc 89 4c 24 10 mov DWORD PTR _uncompressed_size$1$[esp+40], ecx
+ 00100 03 be c0 00 01
+ 00 add edi, DWORD PTR [esi+65728]
+ 00106 8b c2 mov eax, edx
+ 00108 89 7c 24 18 mov DWORD PTR _compressed_size$2$[esp+40], edi
+ 0010c 13 86 c4 00 01
+ 00 adc eax, DWORD PTR [esi+65732]
+ 00112 89 44 24 1c mov DWORD PTR _compressed_size$1$[esp+40], eax
+
+; 1609 : # endif
+; 1610 :
+; 1611 : // update Current Item crc and sizes,
+; 1612 : if(compressed_size >= 0xffffffff || uncompressed_size >= 0xffffffff || zi->ci.pos_local_header >= 0xffffffff)
+
+ 00116 85 c0 test eax, eax
+ 00118 77 27 ja SHORT $LN57@zipCloseFi
+ 0011a 72 05 jb SHORT $LN55@zipCloseFi
+ 0011c 83 ff ff cmp edi, -1
+ 0011f 73 20 jae SHORT $LN57@zipCloseFi
+$LN55@zipCloseFi:
+ 00121 83 7c 24 0c 00 cmp DWORD PTR _uncompressed_size$2$[esp+40], 0
+ 00126 77 19 ja SHORT $LN57@zipCloseFi
+ 00128 72 05 jb SHORT $LN56@zipCloseFi
+ 0012a 83 f9 ff cmp ecx, -1
+ 0012d 73 12 jae SHORT $LN57@zipCloseFi
+$LN56@zipCloseFi:
+ 0012f 83 be 84 00 00
+ 00 00 cmp DWORD PTR [esi+132], 0
+ 00136 77 09 ja SHORT $LN57@zipCloseFi
+ 00138 83 be 80 00 00
+ 00 ff cmp DWORD PTR [esi+128], -1
+ 0013f 72 2c jb SHORT $LN17@zipCloseFi
+$LN57@zipCloseFi:
+
+; 1613 : {
+; 1614 : /*version Made by*/
+; 1615 : zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)45,2);
+
+ 00141 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 00147 ba 02 00 00 00 mov edx, 2
+ 0014c 6a 00 push 0
+ 0014e 6a 2d push 45 ; 0000002dH
+ 00150 83 c1 04 add ecx, 4
+ 00153 e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1616 : /*version needed*/
+; 1617 : zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)45,2);
+
+ 00158 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 0015e 6a 00 push 0
+ 00160 6a 2d push 45 ; 0000002dH
+ 00162 83 c1 06 add ecx, 6
+ 00165 e8 00 00 00 00 call _zip64local_putValue_inmemory
+ 0016a 83 c4 10 add esp, 16 ; 00000010H
+$LN17@zipCloseFi:
+
+; 1618 :
+; 1619 : }
+; 1620 :
+; 1621 : zip64local_putValue_inmemory(zi->ci.central_header+16,crc32,4); /*crc*/
+
+ 0016d 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 00173 ba 04 00 00 00 mov edx, 4
+ 00178 6a 00 push 0
+ 0017a ff 74 24 24 push DWORD PTR _crc32$1$[esp+44]
+ 0017e 83 c1 10 add ecx, 16 ; 00000010H
+ 00181 e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1622 :
+; 1623 :
+; 1624 : if(compressed_size >= 0xffffffff)
+
+ 00186 8b 44 24 24 mov eax, DWORD PTR _compressed_size$1$[esp+48]
+ 0018a 83 c4 08 add esp, 8
+ 0018d 85 c0 test eax, eax
+ 0018f 75 09 jne SHORT $LN58@zipCloseFi
+ 00191 83 ff ff cmp edi, -1
+ 00194 73 04 jae SHORT $LN58@zipCloseFi
+
+; 1626 : else
+; 1627 : zip64local_putValue_inmemory(zi->ci.central_header+20, compressed_size,4); /*compr size*/
+
+ 00196 50 push eax
+ 00197 57 push edi
+ 00198 eb 04 jmp SHORT $LN79@zipCloseFi
+$LN58@zipCloseFi:
+
+; 1625 : zip64local_putValue_inmemory(zi->ci.central_header+20, invalidValue,4); /*compr size*/
+
+ 0019a 6a 00 push 0
+ 0019c 6a ff push -1
+$LN79@zipCloseFi:
+ 0019e 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 001a4 83 c1 14 add ecx, 20 ; 00000014H
+ 001a7 e8 00 00 00 00 call _zip64local_putValue_inmemory
+ 001ac 83 c4 08 add esp, 8
+
+; 1628 :
+; 1629 : /// set internal file attributes field
+; 1630 : if (zi->ci.stream.data_type == Z_ASCII)
+
+ 001af 83 7e 6c 01 cmp DWORD PTR [esi+108], 1
+ 001b3 75 1a jne SHORT $LN21@zipCloseFi
+
+; 1631 : zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)Z_ASCII,2);
+
+ 001b5 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 001bb ba 02 00 00 00 mov edx, 2
+ 001c0 6a 00 push 0
+ 001c2 6a 01 push 1
+ 001c4 83 c1 24 add ecx, 36 ; 00000024H
+ 001c7 e8 00 00 00 00 call _zip64local_putValue_inmemory
+ 001cc 83 c4 08 add esp, 8
+$LN21@zipCloseFi:
+
+; 1632 :
+; 1633 : if(uncompressed_size >= 0xffffffff)
+
+ 001cf 8b 4c 24 0c mov ecx, DWORD PTR _uncompressed_size$2$[esp+40]
+ 001d3 85 c9 test ecx, ecx
+ 001d5 75 0d jne SHORT $LN59@zipCloseFi
+ 001d7 8b 44 24 10 mov eax, DWORD PTR _uncompressed_size$1$[esp+40]
+ 001db 83 f8 ff cmp eax, -1
+ 001de 73 04 jae SHORT $LN59@zipCloseFi
+
+; 1635 : else
+; 1636 : zip64local_putValue_inmemory(zi->ci.central_header+24, uncompressed_size,4); /*uncompr size*/
+
+ 001e0 51 push ecx
+ 001e1 50 push eax
+ 001e2 eb 04 jmp SHORT $LN80@zipCloseFi
+$LN59@zipCloseFi:
+
+; 1634 : zip64local_putValue_inmemory(zi->ci.central_header+24, invalidValue,4); /*uncompr size*/
+
+ 001e4 6a 00 push 0
+ 001e6 6a ff push -1
+$LN80@zipCloseFi:
+ 001e8 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 001ee ba 04 00 00 00 mov edx, 4
+ 001f3 83 c1 18 add ecx, 24 ; 00000018H
+ 001f6 e8 00 00 00 00 call _zip64local_putValue_inmemory
+ 001fb 83 c4 08 add esp, 8
+
+; 1637 :
+; 1638 : // Add ZIP64 extra info field for uncompressed size
+; 1639 : if(uncompressed_size >= 0xffffffff)
+
+ 001fe 83 7c 24 0c 00 cmp DWORD PTR _uncompressed_size$2$[esp+40], 0
+ 00203 77 07 ja SHORT $LN60@zipCloseFi
+ 00205 83 7c 24 10 ff cmp DWORD PTR _uncompressed_size$1$[esp+40], -1
+ 0020a 72 07 jb SHORT $LN76@zipCloseFi
+$LN60@zipCloseFi:
+
+; 1640 : datasize += 8;
+
+ 0020c b8 08 00 00 00 mov eax, 8
+ 00211 eb 02 jmp SHORT $LN24@zipCloseFi
+$LN76@zipCloseFi:
+ 00213 33 c0 xor eax, eax
+$LN24@zipCloseFi:
+
+; 1641 :
+; 1642 : // Add ZIP64 extra info field for compressed size
+; 1643 : if(compressed_size >= 0xffffffff)
+
+ 00215 83 7c 24 1c 00 cmp DWORD PTR _compressed_size$1$[esp+40], 0
+ 0021a 77 05 ja SHORT $LN61@zipCloseFi
+ 0021c 83 ff ff cmp edi, -1
+ 0021f 72 03 jb SHORT $LN25@zipCloseFi
+$LN61@zipCloseFi:
+
+; 1644 : datasize += 8;
+
+ 00221 83 c0 08 add eax, 8
+$LN25@zipCloseFi:
+
+; 1645 :
+; 1646 : // Add ZIP64 extra info field for relative offset to local file header of current file
+; 1647 : if(zi->ci.pos_local_header >= 0xffffffff)
+
+ 00224 83 be 84 00 00
+ 00 00 cmp DWORD PTR [esi+132], 0
+ 0022b 77 09 ja SHORT $LN62@zipCloseFi
+ 0022d 83 be 80 00 00
+ 00 ff cmp DWORD PTR [esi+128], -1
+ 00234 72 03 jb SHORT $LN26@zipCloseFi
+$LN62@zipCloseFi:
+
+; 1648 : datasize += 8;
+
+ 00236 83 c0 08 add eax, 8
+$LN26@zipCloseFi:
+
+; 1649 :
+; 1650 : if(datasize > 0)
+
+ 00239 66 85 c0 test ax, ax
+ 0023c 0f 8e 1d 01 00
+ 00 jle $LN27@zipCloseFi
+
+; 1651 : {
+; 1652 : char* p = NULL;
+; 1653 :
+; 1654 : if((uLong)(datasize + 4) > zi->ci.size_centralExtraFree)
+
+ 00242 98 cwde
+ 00243 89 44 24 24 mov DWORD PTR tv640[esp+40], eax
+ 00247 83 c0 04 add eax, 4
+ 0024a 3b 86 94 00 00
+ 00 cmp eax, DWORD PTR [esi+148]
+ 00250 76 0e jbe SHORT $LN28@zipCloseFi
+
+; 1655 : {
+; 1656 : // we can not write more data to the buffer that we have room for.
+; 1657 : return ZIP_BADZIPFILE;
+
+ 00252 b8 99 ff ff ff mov eax, -103 ; ffffff99H
+
+; 1748 : }
+
+ 00257 5f pop edi
+ 00258 5e pop esi
+ 00259 5b pop ebx
+ 0025a 8b e5 mov esp, ebp
+ 0025c 5d pop ebp
+ 0025d c2 10 00 ret 16 ; 00000010H
+$LN28@zipCloseFi:
+
+; 1658 : }
+; 1659 :
+; 1660 : p = zi->ci.central_header + zi->ci.size_centralheader;
+
+ 00260 8b 86 88 00 00
+ 00 mov eax, DWORD PTR [esi+136]
+
+; 1661 :
+; 1662 : // Add Extra Information Header for 'ZIP64 information'
+; 1663 : zip64local_putValue_inmemory(p, 0x0001, 2); // HeaderID
+
+ 00266 ba 02 00 00 00 mov edx, 2
+ 0026b 03 86 90 00 00
+ 00 add eax, DWORD PTR [esi+144]
+ 00271 6a 00 push 0
+ 00273 6a 01 push 1
+ 00275 8b c8 mov ecx, eax
+ 00277 89 44 24 1c mov DWORD PTR _p$1$[esp+48], eax
+ 0027b e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1664 : p += 2;
+
+ 00280 8b 4c 24 1c mov ecx, DWORD PTR _p$1$[esp+48]
+
+; 1665 : zip64local_putValue_inmemory(p, datasize, 2); // DataSize
+
+ 00284 8b 44 24 2c mov eax, DWORD PTR tv640[esp+48]
+ 00288 03 ca add ecx, edx
+ 0028a 99 cdq
+ 0028b 52 push edx
+ 0028c 50 push eax
+ 0028d ba 02 00 00 00 mov edx, 2
+ 00292 89 4c 24 24 mov DWORD PTR _p$1$[esp+56], ecx
+ 00296 e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1666 : p += 2;
+
+ 0029b 8b 44 24 24 mov eax, DWORD PTR _p$1$[esp+56]
+ 0029f 83 c4 10 add esp, 16 ; 00000010H
+
+; 1667 :
+; 1668 : if(uncompressed_size >= 0xffffffff)
+
+ 002a2 8b 4c 24 10 mov ecx, DWORD PTR _uncompressed_size$1$[esp+40]
+ 002a6 03 c2 add eax, edx
+ 002a8 8b 54 24 0c mov edx, DWORD PTR _uncompressed_size$2$[esp+40]
+ 002ac 89 44 24 14 mov DWORD PTR _p$1$[esp+40], eax
+ 002b0 85 d2 test edx, edx
+ 002b2 75 05 jne SHORT $LN63@zipCloseFi
+ 002b4 83 f9 ff cmp ecx, -1
+ 002b7 72 1b jb SHORT $LN29@zipCloseFi
+$LN63@zipCloseFi:
+
+; 1669 : {
+; 1670 : zip64local_putValue_inmemory(p, uncompressed_size, 8);
+
+ 002b9 52 push edx
+ 002ba 51 push ecx
+ 002bb ba 08 00 00 00 mov edx, 8
+ 002c0 8b c8 mov ecx, eax
+ 002c2 e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1671 : p += 8;
+
+ 002c7 8b 44 24 1c mov eax, DWORD PTR _p$1$[esp+48]
+ 002cb 83 c4 08 add esp, 8
+ 002ce 03 c2 add eax, edx
+ 002d0 89 44 24 14 mov DWORD PTR _p$1$[esp+40], eax
+$LN29@zipCloseFi:
+
+; 1672 : }
+; 1673 :
+; 1674 : if(compressed_size >= 0xffffffff)
+
+ 002d4 8b 4c 24 1c mov ecx, DWORD PTR _compressed_size$1$[esp+40]
+ 002d8 85 c9 test ecx, ecx
+ 002da 75 05 jne SHORT $LN64@zipCloseFi
+ 002dc 83 ff ff cmp edi, -1
+ 002df 72 17 jb SHORT $LN30@zipCloseFi
+$LN64@zipCloseFi:
+
+; 1675 : {
+; 1676 : zip64local_putValue_inmemory(p, compressed_size, 8);
+
+ 002e1 51 push ecx
+ 002e2 57 push edi
+ 002e3 ba 08 00 00 00 mov edx, 8
+ 002e8 8b c8 mov ecx, eax
+ 002ea e8 00 00 00 00 call _zip64local_putValue_inmemory
+
+; 1677 : p += 8;
+
+ 002ef 8b 44 24 1c mov eax, DWORD PTR _p$1$[esp+48]
+ 002f3 83 c4 08 add esp, 8
+ 002f6 03 c2 add eax, edx
+$LN30@zipCloseFi:
+
+; 1678 : }
+; 1679 :
+; 1680 : if(zi->ci.pos_local_header >= 0xffffffff)
+
+ 002f8 8b be 84 00 00
+ 00 mov edi, DWORD PTR [esi+132]
+ 002fe 8b 8e 80 00 00
+ 00 mov ecx, DWORD PTR [esi+128]
+ 00304 85 ff test edi, edi
+ 00306 75 05 jne SHORT $LN65@zipCloseFi
+ 00308 83 f9 ff cmp ecx, -1
+ 0030b 72 11 jb SHORT $LN31@zipCloseFi
+$LN65@zipCloseFi:
+
+; 1681 : {
+; 1682 : zip64local_putValue_inmemory(p, zi->ci.pos_local_header, 8);
+
+ 0030d 57 push edi
+ 0030e 51 push ecx
+ 0030f ba 08 00 00 00 mov edx, 8
+ 00314 8b c8 mov ecx, eax
+ 00316 e8 00 00 00 00 call _zip64local_putValue_inmemory
+ 0031b 83 c4 08 add esp, 8
+$LN31@zipCloseFi:
+
+; 1683 : p += 8;
+; 1684 : }
+; 1685 :
+; 1686 : // Update how much extra free space we got in the memory buffer
+; 1687 : // and increase the centralheader size so the new ZIP64 fields are included
+; 1688 : // ( 4 below is the size of HeaderID and DataSize field )
+; 1689 : zi->ci.size_centralExtraFree -= datasize + 4;
+
+ 0031e 8b 4c 24 24 mov ecx, DWORD PTR tv640[esp+40]
+ 00322 b8 fc ff ff ff mov eax, -4 ; fffffffcH
+ 00327 2b c1 sub eax, ecx
+
+; 1690 : zi->ci.size_centralheader += datasize + 4;
+; 1691 :
+; 1692 : // Update the extra info size field
+; 1693 : zi->ci.size_centralExtra += datasize + 4;
+; 1694 : zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)zi->ci.size_centralExtra,2);
+
+ 00329 ba 02 00 00 00 mov edx, 2
+ 0032e 01 86 94 00 00
+ 00 add DWORD PTR [esi+148], eax
+ 00334 6a 00 push 0
+ 00336 8d 41 04 lea eax, DWORD PTR [ecx+4]
+ 00339 01 86 90 00 00
+ 00 add DWORD PTR [esi+144], eax
+ 0033f 8d 41 04 lea eax, DWORD PTR [ecx+4]
+ 00342 01 86 8c 00 00
+ 00 add DWORD PTR [esi+140], eax
+ 00348 8b 8e 88 00 00
+ 00 mov ecx, DWORD PTR [esi+136]
+ 0034e ff b6 8c 00 00
+ 00 push DWORD PTR [esi+140]
+ 00354 83 c1 1e add ecx, 30 ; 0000001eH
+ 00357 e8 00 00 00 00 call _zip64local_putValue_inmemory
+ 0035c 83 c4 08 add esp, 8
+$LN27@zipCloseFi:
+
+; 1695 : }
+; 1696 :
+; 1697 : if (err==ZIP_OK)
+
+ 0035f 85 db test ebx, ebx
+ 00361 75 19 jne SHORT $LN32@zipCloseFi
+
+; 1698 : err = add_data_in_datablock(&zi->central_dir, zi->ci.central_header, (uLong)zi->ci.size_centralheader);
+
+ 00363 ff b6 90 00 00
+ 00 push DWORD PTR [esi+144]
+ 00369 8b 96 88 00 00
+ 00 mov edx, DWORD PTR [esi+136]
+ 0036f 8d 4e 30 lea ecx, DWORD PTR [esi+48]
+ 00372 e8 00 00 00 00 call _add_data_in_datablock
+ 00377 83 c4 04 add esp, 4
+ 0037a 8b d8 mov ebx, eax
+$LN32@zipCloseFi:
+
+; 1699 :
+; 1700 : free(zi->ci.central_header);
+
+ 0037c ff b6 88 00 00
+ 00 push DWORD PTR [esi+136]
+ 00382 ff 15 00 00 00
+ 00 call DWORD PTR __imp__free
+ 00388 83 c4 04 add esp, 4
+
+; 1701 :
+; 1702 : if (err==ZIP_OK)
+
+ 0038b 85 db test ebx, ebx
+ 0038d 0f 85 3a 01 00
+ 00 jne $LN46@zipCloseFi
+
+; 1703 : {
+; 1704 : // Update the LocalFileHeader with the new values.
+; 1705 :
+; 1706 : ZPOS64_T cur_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream);
+
+ 00393 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00396 8b ce mov ecx, esi
+ 00398 e8 00 00 00 00 call _call_ztell64
+
+; 1707 :
+; 1708 : if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_local_header + 14,ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 0039d 8b be 80 00 00
+ 00 mov edi, DWORD PTR [esi+128]
+ 003a3 8b 8e 84 00 00
+ 00 mov ecx, DWORD PTR [esi+132]
+ 003a9 83 c7 0e add edi, 14 ; 0000000eH
+ 003ac 53 push ebx
+ 003ad 13 cb adc ecx, ebx
+ 003af 89 54 24 28 mov DWORD PTR _cur_pos_inzip$1$[esp+44], edx
+ 003b3 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 003b6 51 push ecx
+ 003b7 57 push edi
+ 003b8 8b ce mov ecx, esi
+ 003ba 89 44 24 20 mov DWORD PTR _cur_pos_inzip$2$[esp+52], eax
+ 003be e8 00 00 00 00 call _call_zseek64
+ 003c3 83 c4 0c add esp, 12 ; 0000000cH
+ 003c6 85 c0 test eax, eax
+ 003c8 74 05 je SHORT $LN53@zipCloseFi
+
+; 1709 : err = ZIP_ERRNO;
+
+ 003ca 83 cb ff or ebx, -1
+
+; 1710 :
+; 1711 : if (err==ZIP_OK)
+
+ 003cd eb 17 jmp SHORT $LN35@zipCloseFi
+$LN53@zipCloseFi:
+
+; 1712 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */
+
+ 003cf 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 003d2 8b ce mov ecx, esi
+ 003d4 6a 04 push 4
+ 003d6 6a 00 push 0
+ 003d8 ff 74 24 28 push DWORD PTR _crc32$1$[esp+48]
+ 003dc e8 00 00 00 00 call _zip64local_putValue
+ 003e1 83 c4 0c add esp, 12 ; 0000000cH
+ 003e4 8b d8 mov ebx, eax
+$LN35@zipCloseFi:
+
+; 1713 :
+; 1714 : if(uncompressed_size >= 0xffffffff || compressed_size >= 0xffffffff )
+
+ 003e6 83 7c 24 0c 00 cmp DWORD PTR _uncompressed_size$2$[esp+40], 0
+ 003eb 77 4b ja SHORT $LN73@zipCloseFi
+ 003ed 72 07 jb SHORT $LN66@zipCloseFi
+ 003ef 83 7c 24 10 ff cmp DWORD PTR _uncompressed_size$1$[esp+40], -1
+ 003f4 73 42 jae SHORT $LN73@zipCloseFi
+$LN66@zipCloseFi:
+ 003f6 8b 44 24 1c mov eax, DWORD PTR _compressed_size$1$[esp+40]
+ 003fa 8b 7c 24 18 mov edi, DWORD PTR _compressed_size$2$[esp+40]
+ 003fe 85 c0 test eax, eax
+ 00400 77 3a ja SHORT $LN38@zipCloseFi
+ 00402 72 05 jb SHORT $LN67@zipCloseFi
+ 00404 83 ff ff cmp edi, -1
+ 00407 73 33 jae SHORT $LN38@zipCloseFi
+$LN67@zipCloseFi:
+
+; 1730 : }
+; 1731 : else
+; 1732 : {
+; 1733 : if (err==ZIP_OK) /* compressed size, unknown */
+
+ 00409 85 db test ebx, ebx
+ 0040b 0f 85 9b 00 00
+ 00 jne $LN40@zipCloseFi
+
+; 1734 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4);
+
+ 00411 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00414 8b ce mov ecx, esi
+ 00416 6a 04 push 4
+ 00418 50 push eax
+ 00419 57 push edi
+ 0041a e8 00 00 00 00 call _zip64local_putValue
+ 0041f 8b d8 mov ebx, eax
+ 00421 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1735 :
+; 1736 : if (err==ZIP_OK) /* uncompressed size, unknown */
+
+ 00424 85 db test ebx, ebx
+ 00426 0f 85 80 00 00
+ 00 jne $LN40@zipCloseFi
+
+; 1737 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,uncompressed_size,4);
+
+ 0042c 6a 04 push 4
+ 0042e ff 74 24 10 push DWORD PTR _uncompressed_size$2$[esp+44]
+ 00432 ff 74 24 18 push DWORD PTR _uncompressed_size$1$[esp+48]
+ 00436 eb 65 jmp SHORT $LN81@zipCloseFi
+$LN73@zipCloseFi:
+ 00438 8b 7c 24 18 mov edi, DWORD PTR _compressed_size$2$[esp+40]
+$LN38@zipCloseFi:
+
+; 1715 : {
+; 1716 : if(zi->ci.pos_zip64extrainfo > 0)
+
+ 0043c 8b 8e bc 00 01
+ 00 mov ecx, DWORD PTR [esi+65724]
+ 00442 8b 86 b8 00 01
+ 00 mov eax, DWORD PTR [esi+65720]
+ 00448 85 c9 test ecx, ecx
+ 0044a 75 09 jne SHORT $LN68@zipCloseFi
+ 0044c 85 c0 test eax, eax
+ 0044e 75 05 jne SHORT $LN68@zipCloseFi
+
+; 1727 : }
+; 1728 : else
+; 1729 : err = ZIP_BADZIPFILE; // Caller passed zip64 = 0, so no room for zip64 info -> fatal
+
+ 00450 8d 58 99 lea ebx, DWORD PTR [eax-103]
+ 00453 eb 57 jmp SHORT $LN40@zipCloseFi
+$LN68@zipCloseFi:
+
+; 1717 : {
+; 1718 : // Update the size in the ZIP64 extended field.
+; 1719 : if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_zip64extrainfo + 4,ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 00455 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00458 83 c0 04 add eax, 4
+ 0045b 6a 00 push 0
+ 0045d 83 d1 00 adc ecx, 0
+ 00460 51 push ecx
+ 00461 50 push eax
+ 00462 8b ce mov ecx, esi
+ 00464 e8 00 00 00 00 call _call_zseek64
+ 00469 83 c4 0c add esp, 12 ; 0000000cH
+ 0046c 85 c0 test eax, eax
+ 0046e 74 05 je SHORT $LN41@zipCloseFi
+
+; 1720 : err = ZIP_ERRNO;
+
+ 00470 83 cb ff or ebx, -1
+
+; 1721 :
+; 1722 : if (err==ZIP_OK) /* compressed size, unknown */
+
+ 00473 eb 37 jmp SHORT $LN40@zipCloseFi
+$LN41@zipCloseFi:
+ 00475 85 db test ebx, ebx
+ 00477 75 33 jne SHORT $LN40@zipCloseFi
+
+; 1723 : err = zip64local_putValue(&zi->z_filefunc, zi->filestream, uncompressed_size, 8);
+
+ 00479 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 0047c 8b ce mov ecx, esi
+ 0047e 6a 08 push 8
+ 00480 ff 74 24 10 push DWORD PTR _uncompressed_size$2$[esp+44]
+ 00484 ff 74 24 18 push DWORD PTR _uncompressed_size$1$[esp+48]
+ 00488 e8 00 00 00 00 call _zip64local_putValue
+ 0048d 8b d8 mov ebx, eax
+ 0048f 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1724 :
+; 1725 : if (err==ZIP_OK) /* uncompressed size, unknown */
+
+ 00492 85 db test ebx, ebx
+ 00494 75 16 jne SHORT $LN40@zipCloseFi
+
+; 1726 : err = zip64local_putValue(&zi->z_filefunc, zi->filestream, compressed_size, 8);
+
+ 00496 6a 08 push 8
+ 00498 ff 74 24 20 push DWORD PTR _compressed_size$1$[esp+44]
+ 0049c 57 push edi
+$LN81@zipCloseFi:
+ 0049d 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 004a0 8b ce mov ecx, esi
+ 004a2 e8 00 00 00 00 call _zip64local_putValue
+ 004a7 8b d8 mov ebx, eax
+ 004a9 83 c4 0c add esp, 12 ; 0000000cH
+$LN40@zipCloseFi:
+
+; 1738 : }
+; 1739 :
+; 1740 : if (ZSEEK64(zi->z_filefunc,zi->filestream, cur_pos_inzip,ZLIB_FILEFUNC_SEEK_SET)!=0)
+
+ 004ac 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 004af 8b ce mov ecx, esi
+ 004b1 6a 00 push 0
+ 004b3 ff 74 24 28 push DWORD PTR _cur_pos_inzip$1$[esp+44]
+ 004b7 ff 74 24 1c push DWORD PTR _cur_pos_inzip$2$[esp+48]
+ 004bb e8 00 00 00 00 call _call_zseek64
+ 004c0 83 c4 0c add esp, 12 ; 0000000cH
+ 004c3 85 c0 test eax, eax
+ 004c5 b8 ff ff ff ff mov eax, -1
+ 004ca 0f 45 d8 cmovne ebx, eax
+$LN46@zipCloseFi:
+
+; 1741 : err = ZIP_ERRNO;
+; 1742 : }
+; 1743 :
+; 1744 : zi->number_entry ++;
+
+ 004cd 83 86 f8 00 01
+ 00 01 add DWORD PTR [esi+65784], 1
+
+; 1745 : zi->in_opened_file_inzip = 0;
+; 1746 :
+; 1747 : return err;
+
+ 004d4 8b c3 mov eax, ebx
+
+; 1748 : }
+
+ 004d6 5f pop edi
+ 004d7 83 96 fc 00 01
+ 00 00 adc DWORD PTR [esi+65788], 0
+ 004de c7 46 38 00 00
+ 00 00 mov DWORD PTR [esi+56], 0
+ 004e5 5e pop esi
+ 004e6 5b pop ebx
+ 004e7 8b e5 mov esp, ebp
+ 004e9 5d pop ebp
+ 004ea c2 10 00 ret 16 ; 00000010H
+_zipCloseFileInZipRaw64@16 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zipCloseFileInZip@4
+_TEXT SEGMENT
+_file$ = 8 ; size = 4
+_zipCloseFileInZip@4 PROC ; COMDAT
+
+; 1751 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 1752 : return zipCloseFileInZipRaw (file,0,0);
+
+ 00003 6a 00 push 0
+ 00005 6a 00 push 0
+ 00007 ff 75 08 push DWORD PTR _file$[ebp]
+ 0000a e8 00 00 00 00 call _zipCloseFileInZipRaw@12
+
+; 1753 : }
+
+ 0000f 5d pop ebp
+ 00010 c2 04 00 ret 4
+_zipCloseFileInZip@4 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _Write_Zip64EndOfCentralDirectoryLocator
+_TEXT SEGMENT
+_zip64eocd_pos_inzip$ = 8 ; size = 8
+_Write_Zip64EndOfCentralDirectoryLocator PROC ; COMDAT
+; _zi$ = ecx
+
+; 1756 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 53 push ebx
+
+; 1757 : int err = ZIP_OK;
+; 1758 : ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writting_offset;
+
+ 00004 8b 5d 0c mov ebx, DWORD PTR _zip64eocd_pos_inzip$[ebp+4]
+ 00007 56 push esi
+ 00008 57 push edi
+ 00009 8b 7d 08 mov edi, DWORD PTR _zip64eocd_pos_inzip$[ebp]
+ 0000c 8b f1 mov esi, ecx
+
+; 1759 :
+; 1760 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4);
+
+ 0000e 6a 04 push 4
+ 00010 6a 00 push 0
+ 00012 68 50 4b 06 07 push 117853008 ; 07064b50H
+ 00017 2b be f0 00 01
+ 00 sub edi, DWORD PTR [esi+65776]
+ 0001d 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00020 1b 9e f4 00 01
+ 00 sbb ebx, DWORD PTR [esi+65780]
+ 00026 e8 00 00 00 00 call _zip64local_putValue
+ 0002b 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1761 :
+; 1762 : /*num disks*/
+; 1763 : if (err==ZIP_OK) /* number of the disk with the start of the central directory */
+
+ 0002e 85 c0 test eax, eax
+ 00030 75 3c jne SHORT $LN4@Write_Zip6
+
+; 1764 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
+
+ 00032 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00035 8b ce mov ecx, esi
+ 00037 6a 04 push 4
+ 00039 50 push eax
+ 0003a 50 push eax
+ 0003b e8 00 00 00 00 call _zip64local_putValue
+ 00040 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1765 :
+; 1766 : /*relative offset*/
+; 1767 : if (err==ZIP_OK) /* Relative offset to the Zip64EndOfCentralDirectory */
+
+ 00043 85 c0 test eax, eax
+ 00045 75 27 jne SHORT $LN4@Write_Zip6
+
+; 1768 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream, pos,8);
+
+ 00047 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 0004a 8b ce mov ecx, esi
+ 0004c 6a 08 push 8
+ 0004e 53 push ebx
+ 0004f 57 push edi
+ 00050 e8 00 00 00 00 call _zip64local_putValue
+ 00055 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1769 :
+; 1770 : /*total disks*/ /* Do not support spawning of disk so always say 1 here*/
+; 1771 : if (err==ZIP_OK) /* number of the disk with the start of the central directory */
+
+ 00058 85 c0 test eax, eax
+ 0005a 75 12 jne SHORT $LN4@Write_Zip6
+
+; 1772 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4);
+
+ 0005c 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 0005f 8b ce mov ecx, esi
+ 00061 6a 04 push 4
+ 00063 50 push eax
+ 00064 6a 01 push 1
+ 00066 e8 00 00 00 00 call _zip64local_putValue
+ 0006b 83 c4 0c add esp, 12 ; 0000000cH
+$LN4@Write_Zip6:
+
+; 1773 :
+; 1774 : return err;
+; 1775 : }
+
+ 0006e 5f pop edi
+ 0006f 5e pop esi
+ 00070 5b pop ebx
+ 00071 5d pop ebp
+ 00072 c3 ret 0
+_Write_Zip64EndOfCentralDirectoryLocator ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _Write_Zip64EndOfCentralDirectoryRecord
+_TEXT SEGMENT
+_centraldir_pos_inzip$ = 8 ; size = 8
+_Write_Zip64EndOfCentralDirectoryRecord PROC ; COMDAT
+; _zi$ = ecx
+; _size_centraldir$ = edx
+
+; 1778 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 56 push esi
+ 00004 57 push edi
+ 00005 8b f1 mov esi, ecx
+ 00007 8b fa mov edi, edx
+
+; 1779 : int err = ZIP_OK;
+; 1780 :
+; 1781 : uLong Zip64DataSize = 44;
+; 1782 :
+; 1783 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDHEADERMAGIC,4);
+
+ 00009 6a 04 push 4
+ 0000b 6a 00 push 0
+ 0000d 68 50 4b 06 06 push 101075792 ; 06064b50H
+ 00012 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00015 e8 00 00 00 00 call _zip64local_putValue
+ 0001a 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1784 :
+; 1785 : if (err==ZIP_OK) /* size of this 'zip64 end of central directory' */
+
+ 0001d 85 c0 test eax, eax
+ 0001f 0f 85 f2 00 00
+ 00 jne $LN10@Write_Zip6
+
+; 1786 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)Zip64DataSize,8); // why ZPOS64_T of this ?
+
+ 00025 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00028 8b ce mov ecx, esi
+ 0002a 6a 08 push 8
+ 0002c 50 push eax
+ 0002d 6a 2c push 44 ; 0000002cH
+ 0002f e8 00 00 00 00 call _zip64local_putValue
+ 00034 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1787 :
+; 1788 : if (err==ZIP_OK) /* version made by */
+
+ 00037 85 c0 test eax, eax
+ 00039 0f 85 d8 00 00
+ 00 jne $LN10@Write_Zip6
+
+; 1789 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);
+
+ 0003f 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00042 8b ce mov ecx, esi
+ 00044 6a 02 push 2
+ 00046 50 push eax
+ 00047 6a 2d push 45 ; 0000002dH
+ 00049 e8 00 00 00 00 call _zip64local_putValue
+ 0004e 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1790 :
+; 1791 : if (err==ZIP_OK) /* version needed */
+
+ 00051 85 c0 test eax, eax
+ 00053 0f 85 be 00 00
+ 00 jne $LN10@Write_Zip6
+
+; 1792 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);
+
+ 00059 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 0005c 8b ce mov ecx, esi
+ 0005e 6a 02 push 2
+ 00060 50 push eax
+ 00061 6a 2d push 45 ; 0000002dH
+ 00063 e8 00 00 00 00 call _zip64local_putValue
+ 00068 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1793 :
+; 1794 : if (err==ZIP_OK) /* number of this disk */
+
+ 0006b 85 c0 test eax, eax
+ 0006d 0f 85 a4 00 00
+ 00 jne $LN10@Write_Zip6
+
+; 1795 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
+
+ 00073 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00076 8b ce mov ecx, esi
+ 00078 6a 04 push 4
+ 0007a 50 push eax
+ 0007b 50 push eax
+ 0007c e8 00 00 00 00 call _zip64local_putValue
+ 00081 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1796 :
+; 1797 : if (err==ZIP_OK) /* number of the disk with the start of the central directory */
+
+ 00084 85 c0 test eax, eax
+ 00086 0f 85 8b 00 00
+ 00 jne $LN10@Write_Zip6
+
+; 1798 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
+
+ 0008c 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 0008f 8b ce mov ecx, esi
+ 00091 6a 04 push 4
+ 00093 50 push eax
+ 00094 50 push eax
+ 00095 e8 00 00 00 00 call _zip64local_putValue
+ 0009a 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1799 :
+; 1800 : if (err==ZIP_OK) /* total number of entries in the central dir on this disk */
+
+ 0009d 85 c0 test eax, eax
+ 0009f 75 76 jne SHORT $LN10@Write_Zip6
+
+; 1801 : err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8);
+
+ 000a1 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 000a4 8b ce mov ecx, esi
+ 000a6 6a 08 push 8
+ 000a8 ff b6 fc 00 01
+ 00 push DWORD PTR [esi+65788]
+ 000ae ff b6 f8 00 01
+ 00 push DWORD PTR [esi+65784]
+ 000b4 e8 00 00 00 00 call _zip64local_putValue
+ 000b9 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1802 :
+; 1803 : if (err==ZIP_OK) /* total number of entries in the central dir */
+
+ 000bc 85 c0 test eax, eax
+ 000be 75 57 jne SHORT $LN10@Write_Zip6
+
+; 1804 : err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8);
+
+ 000c0 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 000c3 8b ce mov ecx, esi
+ 000c5 6a 08 push 8
+ 000c7 ff b6 fc 00 01
+ 00 push DWORD PTR [esi+65788]
+ 000cd ff b6 f8 00 01
+ 00 push DWORD PTR [esi+65784]
+ 000d3 e8 00 00 00 00 call _zip64local_putValue
+ 000d8 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1805 :
+; 1806 : if (err==ZIP_OK) /* size of the central directory */
+
+ 000db 85 c0 test eax, eax
+ 000dd 75 38 jne SHORT $LN10@Write_Zip6
+
+; 1807 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)size_centraldir,8);
+
+ 000df 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 000e2 8b ce mov ecx, esi
+ 000e4 6a 08 push 8
+ 000e6 50 push eax
+ 000e7 57 push edi
+ 000e8 e8 00 00 00 00 call _zip64local_putValue
+ 000ed 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1808 :
+; 1809 : if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */
+
+ 000f0 85 c0 test eax, eax
+ 000f2 75 23 jne SHORT $LN10@Write_Zip6
+
+; 1810 : {
+; 1811 : ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;
+
+ 000f4 8b 4d 08 mov ecx, DWORD PTR _centraldir_pos_inzip$[ebp]
+ 000f7 2b 8e f0 00 01
+ 00 sub ecx, DWORD PTR [esi+65776]
+ 000fd 8b 45 0c mov eax, DWORD PTR _centraldir_pos_inzip$[ebp+4]
+ 00100 1b 86 f4 00 01
+ 00 sbb eax, DWORD PTR [esi+65780]
+
+; 1812 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8);
+
+ 00106 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00109 6a 08 push 8
+ 0010b 50 push eax
+ 0010c 51 push ecx
+ 0010d 8b ce mov ecx, esi
+ 0010f e8 00 00 00 00 call _zip64local_putValue
+ 00114 83 c4 0c add esp, 12 ; 0000000cH
+$LN10@Write_Zip6:
+
+; 1813 : }
+; 1814 : return err;
+; 1815 : }
+
+ 00117 5f pop edi
+ 00118 5e pop esi
+ 00119 5d pop ebp
+ 0011a c3 ret 0
+_Write_Zip64EndOfCentralDirectoryRecord ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _Write_EndOfCentralDirectoryRecord
+_TEXT SEGMENT
+tv191 = -8 ; size = 8
+_centraldir_pos_inzip$ = 8 ; size = 8
+_Write_EndOfCentralDirectoryRecord PROC ; COMDAT
+; _zi$ = ecx
+; _size_centraldir$ = edx
+
+; 1817 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 ec 08 sub esp, 8
+ 00006 56 push esi
+ 00007 57 push edi
+ 00008 8b f1 mov esi, ecx
+ 0000a 8b fa mov edi, edx
+
+; 1818 : int err = ZIP_OK;
+; 1819 :
+; 1820 : /*signature*/
+; 1821 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4);
+
+ 0000c 6a 04 push 4
+ 0000e 6a 00 push 0
+ 00010 68 50 4b 05 06 push 101010256 ; 06054b50H
+ 00015 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00018 e8 00 00 00 00 call _zip64local_putValue
+ 0001d 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1822 :
+; 1823 : if (err==ZIP_OK) /* number of this disk */
+
+ 00020 85 c0 test eax, eax
+ 00022 0f 85 0c 01 00
+ 00 jne $LN13@Write_EndO
+
+; 1824 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);
+
+ 00028 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 0002b 8b ce mov ecx, esi
+ 0002d 6a 02 push 2
+ 0002f 50 push eax
+ 00030 50 push eax
+ 00031 e8 00 00 00 00 call _zip64local_putValue
+ 00036 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1825 :
+; 1826 : if (err==ZIP_OK) /* number of the disk with the start of the central directory */
+
+ 00039 85 c0 test eax, eax
+ 0003b 0f 85 f3 00 00
+ 00 jne $LN13@Write_EndO
+
+; 1827 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);
+
+ 00041 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00044 8b ce mov ecx, esi
+ 00046 6a 02 push 2
+ 00048 50 push eax
+ 00049 50 push eax
+ 0004a e8 00 00 00 00 call _zip64local_putValue
+ 0004f 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1828 :
+; 1829 : if (err==ZIP_OK) /* total number of entries in the central dir on this disk */
+
+ 00052 85 c0 test eax, eax
+ 00054 0f 85 da 00 00
+ 00 jne $LN13@Write_EndO
+
+; 1830 : {
+; 1831 : {
+; 1832 : if(zi->number_entry >= 0xFFFF)
+
+ 0005a 39 86 fc 00 01
+ 00 cmp DWORD PTR [esi+65788], eax
+ 00060 77 17 ja SHORT $LN15@Write_EndO
+ 00062 81 be f8 00 01
+ 00 ff ff 00 00 cmp DWORD PTR [esi+65784], 65535 ; 0000ffffH
+ 0006c 73 0b jae SHORT $LN15@Write_EndO
+
+; 1834 : else
+; 1835 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);
+
+ 0006e 6a 02 push 2
+ 00070 50 push eax
+ 00071 ff b6 f8 00 01
+ 00 push DWORD PTR [esi+65784]
+ 00077 eb 09 jmp SHORT $LN24@Write_EndO
+$LN15@Write_EndO:
+
+; 1833 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record
+
+ 00079 6a 02 push 2
+ 0007b 6a 00 push 0
+ 0007d 68 ff ff 00 00 push 65535 ; 0000ffffH
+$LN24@Write_EndO:
+ 00082 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00085 8b ce mov ecx, esi
+ 00087 e8 00 00 00 00 call _zip64local_putValue
+ 0008c 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1836 : }
+; 1837 : }
+; 1838 :
+; 1839 : if (err==ZIP_OK) /* total number of entries in the central dir */
+
+ 0008f 85 c0 test eax, eax
+ 00091 0f 85 9d 00 00
+ 00 jne $LN13@Write_EndO
+
+; 1840 : {
+; 1841 : if(zi->number_entry >= 0xFFFF)
+
+ 00097 39 86 fc 00 01
+ 00 cmp DWORD PTR [esi+65788], eax
+ 0009d 77 17 ja SHORT $LN16@Write_EndO
+ 0009f 81 be f8 00 01
+ 00 ff ff 00 00 cmp DWORD PTR [esi+65784], 65535 ; 0000ffffH
+ 000a9 73 0b jae SHORT $LN16@Write_EndO
+
+; 1843 : else
+; 1844 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);
+
+ 000ab 6a 02 push 2
+ 000ad 50 push eax
+ 000ae ff b6 f8 00 01
+ 00 push DWORD PTR [esi+65784]
+ 000b4 eb 09 jmp SHORT $LN25@Write_EndO
+$LN16@Write_EndO:
+
+; 1842 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record
+
+ 000b6 6a 02 push 2
+ 000b8 6a 00 push 0
+ 000ba 68 ff ff 00 00 push 65535 ; 0000ffffH
+$LN25@Write_EndO:
+ 000bf 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 000c2 8b ce mov ecx, esi
+ 000c4 e8 00 00 00 00 call _zip64local_putValue
+ 000c9 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1845 : }
+; 1846 :
+; 1847 : if (err==ZIP_OK) /* size of the central directory */
+
+ 000cc 85 c0 test eax, eax
+ 000ce 75 64 jne SHORT $LN13@Write_EndO
+
+; 1848 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_centraldir,4);
+
+ 000d0 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 000d3 8b ce mov ecx, esi
+ 000d5 6a 04 push 4
+ 000d7 50 push eax
+ 000d8 57 push edi
+ 000d9 e8 00 00 00 00 call _zip64local_putValue
+ 000de 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1849 :
+; 1850 : if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */
+
+ 000e1 85 c0 test eax, eax
+ 000e3 75 4f jne SHORT $LN13@Write_EndO
+
+; 1851 : {
+; 1852 : ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;
+
+ 000e5 8b 55 08 mov edx, DWORD PTR _centraldir_pos_inzip$[ebp]
+ 000e8 8b ca mov ecx, edx
+ 000ea 2b 8e f0 00 01
+ 00 sub ecx, DWORD PTR [esi+65776]
+ 000f0 8b 45 0c mov eax, DWORD PTR _centraldir_pos_inzip$[ebp+4]
+ 000f3 1b 86 f4 00 01
+ 00 sbb eax, DWORD PTR [esi+65780]
+
+; 1853 : if(pos >= 0xffffffff)
+
+ 000f9 89 45 fc mov DWORD PTR tv191[ebp+4], eax
+ 000fc 75 23 jne SHORT $LN17@Write_EndO
+ 000fe 83 f9 ff cmp ecx, -1
+ 00101 73 1e jae SHORT $LN17@Write_EndO
+
+; 1856 : }
+; 1857 : else
+; 1858 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)(centraldir_pos_inzip - zi->add_position_when_writting_offset),4);
+
+ 00103 2b 96 f0 00 01
+ 00 sub edx, DWORD PTR [esi+65776]
+ 00109 8b ce mov ecx, esi
+ 0010b 6a 04 push 4
+ 0010d 6a 00 push 0
+ 0010f 52 push edx
+ 00110 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00113 e8 00 00 00 00 call _zip64local_putValue
+ 00118 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1859 : }
+; 1860 :
+; 1861 : return err;
+; 1862 : }
+
+ 0011b 5f pop edi
+ 0011c 5e pop esi
+ 0011d 8b e5 mov esp, ebp
+ 0011f 5d pop ebp
+ 00120 c3 ret 0
+$LN17@Write_EndO:
+
+; 1854 : {
+; 1855 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)0xffffffff,4);
+
+ 00121 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 00124 8b ce mov ecx, esi
+ 00126 6a 04 push 4
+ 00128 6a 00 push 0
+ 0012a 6a ff push -1
+ 0012c e8 00 00 00 00 call _zip64local_putValue
+ 00131 83 c4 0c add esp, 12 ; 0000000cH
+$LN13@Write_EndO:
+
+; 1859 : }
+; 1860 :
+; 1861 : return err;
+; 1862 : }
+
+ 00134 5f pop edi
+ 00135 5e pop esi
+ 00136 8b e5 mov esp, ebp
+ 00138 5d pop ebp
+ 00139 c3 ret 0
+_Write_EndOfCentralDirectoryRecord ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _Write_GlobalComment
+_TEXT SEGMENT
+_global_comment$1$ = -4 ; size = 4
+_Write_GlobalComment PROC ; COMDAT
+; _zi$ = ecx
+; _global_comment$ = edx
+
+; 1865 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 51 push ecx
+ 00004 53 push ebx
+ 00005 56 push esi
+ 00006 8b c2 mov eax, edx
+
+; 1866 : int err = ZIP_OK;
+; 1867 : uInt size_global_comment = 0;
+
+ 00008 33 f6 xor esi, esi
+ 0000a 89 45 fc mov DWORD PTR _global_comment$1$[ebp], eax
+ 0000d 8b d9 mov ebx, ecx
+ 0000f 57 push edi
+
+; 1868 :
+; 1869 : if(global_comment != NULL)
+
+ 00010 85 c0 test eax, eax
+ 00012 74 15 je SHORT $LN2@Write_Glob
+
+; 1870 : size_global_comment = (uInt)strlen(global_comment);
+
+ 00014 8b f0 mov esi, eax
+ 00016 8d 4e 01 lea ecx, DWORD PTR [esi+1]
+ 00019 0f 1f 80 00 00
+ 00 00 npad 7
+$LL6@Write_Glob:
+ 00020 8a 06 mov al, BYTE PTR [esi]
+ 00022 46 inc esi
+ 00023 84 c0 test al, al
+ 00025 75 f9 jne SHORT $LL6@Write_Glob
+ 00027 2b f1 sub esi, ecx
+$LN2@Write_Glob:
+
+; 1871 :
+; 1872 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_global_comment,2);
+
+ 00029 8b 53 2c mov edx, DWORD PTR [ebx+44]
+ 0002c 8b cb mov ecx, ebx
+ 0002e 6a 02 push 2
+ 00030 6a 00 push 0
+ 00032 56 push esi
+ 00033 e8 00 00 00 00 call _zip64local_putValue
+ 00038 8b f8 mov edi, eax
+ 0003a 83 c4 0c add esp, 12 ; 0000000cH
+
+; 1873 :
+; 1874 : if (err == ZIP_OK && size_global_comment > 0)
+
+ 0003d 85 ff test edi, edi
+ 0003f 75 1e jne SHORT $LN7@Write_Glob
+ 00041 85 f6 test esi, esi
+ 00043 74 1a je SHORT $LN7@Write_Glob
+
+; 1875 : {
+; 1876 : if (ZWRITE64(zi->z_filefunc,zi->filestream, global_comment, size_global_comment) != size_global_comment)
+
+ 00045 8b 4b 08 mov ecx, DWORD PTR [ebx+8]
+ 00048 56 push esi
+ 00049 ff 75 fc push DWORD PTR _global_comment$1$[ebp]
+ 0004c ff 73 2c push DWORD PTR [ebx+44]
+ 0004f ff 73 1c push DWORD PTR [ebx+28]
+ 00052 ff d1 call ecx
+ 00054 83 c9 ff or ecx, -1
+ 00057 83 c4 10 add esp, 16 ; 00000010H
+ 0005a 3b c6 cmp eax, esi
+ 0005c 0f 45 f9 cmovne edi, ecx
+$LN7@Write_Glob:
+
+; 1877 : err = ZIP_ERRNO;
+; 1878 : }
+; 1879 : return err;
+
+ 0005f 8b c7 mov eax, edi
+
+; 1880 : }
+
+ 00061 5f pop edi
+ 00062 5e pop esi
+ 00063 5b pop ebx
+ 00064 8b e5 mov esp, ebp
+ 00066 5d pop ebp
+ 00067 c3 ret 0
+_Write_GlobalComment ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\contrib\minizip\zip.c
+; COMDAT _zipClose@8
+_TEXT SEGMENT
+_size_centraldir$1$ = -16 ; size = 4
+_err$1$ = -12 ; size = 4
+_centraldir_pos_inzip$2$ = -8 ; size = 4
+_centraldir_pos_inzip$1$ = -4 ; size = 4
+_file$ = 8 ; size = 4
+_global_comment$ = 12 ; size = 4
+_zipClose@8 PROC ; COMDAT
+
+; 1883 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+ 00003 83 e4 f8 and esp, -8 ; fffffff8H
+ 00006 83 ec 14 sub esp, 20 ; 00000014H
+ 00009 53 push ebx
+ 0000a 56 push esi
+
+; 1884 : zip64_internal* zi;
+; 1885 : int err = 0;
+; 1886 : uLong size_centraldir = 0;
+; 1887 : ZPOS64_T centraldir_pos_inzip;
+; 1888 : ZPOS64_T pos;
+; 1889 :
+; 1890 : if (file == NULL)
+
+ 0000b 8b 75 08 mov esi, DWORD PTR _file$[ebp]
+ 0000e 33 db xor ebx, ebx
+ 00010 89 5c 24 10 mov DWORD PTR _err$1$[esp+28], ebx
+ 00014 89 5c 24 0c mov DWORD PTR _size_centraldir$1$[esp+28], ebx
+ 00018 57 push edi
+ 00019 85 f6 test esi, esi
+ 0001b 75 0c jne SHORT $LN4@zipClose
+
+; 1891 : return ZIP_PARAMERROR;
+
+ 0001d 8d 43 9a lea eax, DWORD PTR [ebx-102]
+
+; 1949 : }
+
+ 00020 5f pop edi
+ 00021 5e pop esi
+ 00022 5b pop ebx
+ 00023 8b e5 mov esp, ebp
+ 00025 5d pop ebp
+ 00026 c2 08 00 ret 8
+$LN4@zipClose:
+
+; 1892 :
+; 1893 : zi = (zip64_internal*)file;
+; 1894 :
+; 1895 : if (zi->in_opened_file_inzip == 1)
+
+ 00029 83 7e 38 01 cmp DWORD PTR [esi+56], 1
+ 0002d 75 0c jne SHORT $LN5@zipClose
+
+; 1896 : {
+; 1897 : err = zipCloseFileInZip (file);
+
+ 0002f 56 push esi
+ 00030 e8 00 00 00 00 call _zipCloseFileInZip@4
+ 00035 8b d8 mov ebx, eax
+ 00037 89 44 24 14 mov DWORD PTR _err$1$[esp+32], eax
+$LN5@zipClose:
+
+; 1898 : }
+; 1899 :
+; 1900 : #ifndef NO_ADDFILEINEXISTINGZIP
+; 1901 : if (global_comment==NULL)
+
+ 0003b 83 7d 0c 00 cmp DWORD PTR _global_comment$[ebp], 0
+ 0003f 75 09 jne SHORT $LN6@zipClose
+
+; 1902 : global_comment = zi->globalcomment;
+
+ 00041 8b 86 00 01 01
+ 00 mov eax, DWORD PTR [esi+65792]
+ 00047 89 45 0c mov DWORD PTR _global_comment$[ebp], eax
+$LN6@zipClose:
+
+; 1903 : #endif
+; 1904 :
+; 1905 : centraldir_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream);
+
+ 0004a 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 0004d 8b ce mov ecx, esi
+ 0004f e8 00 00 00 00 call _call_ztell64
+ 00054 89 44 24 18 mov DWORD PTR _centraldir_pos_inzip$2$[esp+32], eax
+ 00058 89 54 24 1c mov DWORD PTR _centraldir_pos_inzip$1$[esp+32], edx
+
+; 1906 :
+; 1907 : if (err==ZIP_OK)
+
+ 0005c 85 db test ebx, ebx
+ 0005e 75 4e jne SHORT $LN3@zipClose
+
+; 1908 : {
+; 1909 : linkedlist_datablock_internal* ldi = zi->central_dir.first_block;
+
+ 00060 8b 7e 30 mov edi, DWORD PTR [esi+48]
+
+; 1910 : while (ldi!=NULL)
+
+ 00063 85 ff test edi, edi
+ 00065 74 47 je SHORT $LN3@zipClose
+ 00067 33 c0 xor eax, eax
+ 00069 0f 1f 80 00 00
+ 00 00 npad 7
+$LL2@zipClose:
+
+; 1911 : {
+; 1912 : if ((err==ZIP_OK) && (ldi->filled_in_this_block>0))
+
+ 00070 85 db test ebx, ebx
+ 00072 75 29 jne SHORT $LN9@zipClose
+ 00074 8b 47 08 mov eax, DWORD PTR [edi+8]
+ 00077 85 c0 test eax, eax
+ 00079 74 1e je SHORT $LN25@zipClose
+
+; 1913 : {
+; 1914 : if (ZWRITE64(zi->z_filefunc,zi->filestream, ldi->data, ldi->filled_in_this_block) != ldi->filled_in_this_block)
+
+ 0007b 50 push eax
+ 0007c 8d 47 10 lea eax, DWORD PTR [edi+16]
+ 0007f 50 push eax
+ 00080 ff 76 2c push DWORD PTR [esi+44]
+ 00083 8b 46 08 mov eax, DWORD PTR [esi+8]
+ 00086 ff 76 1c push DWORD PTR [esi+28]
+ 00089 ff d0 call eax
+ 0008b 83 c4 10 add esp, 16 ; 00000010H
+ 0008e 3b 47 08 cmp eax, DWORD PTR [edi+8]
+ 00091 b8 ff ff ff ff mov eax, -1
+ 00096 0f 45 d8 cmovne ebx, eax
+$LN25@zipClose:
+ 00099 8b 44 24 10 mov eax, DWORD PTR _size_centraldir$1$[esp+32]
+$LN9@zipClose:
+
+; 1915 : err = ZIP_ERRNO;
+; 1916 : }
+; 1917 :
+; 1918 : size_centraldir += ldi->filled_in_this_block;
+
+ 0009d 03 47 08 add eax, DWORD PTR [edi+8]
+
+; 1919 : ldi = ldi->next_datablock;
+
+ 000a0 8b 3f mov edi, DWORD PTR [edi]
+ 000a2 89 44 24 10 mov DWORD PTR _size_centraldir$1$[esp+32], eax
+ 000a6 85 ff test edi, edi
+ 000a8 75 c6 jne SHORT $LL2@zipClose
+ 000aa 89 5c 24 14 mov DWORD PTR _err$1$[esp+32], ebx
+$LN3@zipClose:
+
+; 1920 : }
+; 1921 : }
+; 1922 : free_linkedlist(&(zi->central_dir));
+
+ 000ae 8d 4e 30 lea ecx, DWORD PTR [esi+48]
+ 000b1 e8 00 00 00 00 call _free_linkedlist
+
+; 1923 :
+; 1924 : pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;
+
+ 000b6 8b 54 24 18 mov edx, DWORD PTR _centraldir_pos_inzip$2$[esp+32]
+ 000ba 8b ca mov ecx, edx
+ 000bc 2b 8e f0 00 01
+ 00 sub ecx, DWORD PTR [esi+65776]
+ 000c2 8b 7c 24 1c mov edi, DWORD PTR _centraldir_pos_inzip$1$[esp+32]
+ 000c6 8b c7 mov eax, edi
+ 000c8 1b 86 f4 00 01
+ 00 sbb eax, DWORD PTR [esi+65780]
+
+; 1925 : if(pos >= 0xffffffff || zi->number_entry > 0xFFFF)
+
+ 000ce 85 c0 test eax, eax
+ 000d0 77 1c ja SHORT $LN24@zipClose
+ 000d2 72 05 jb SHORT $LN23@zipClose
+ 000d4 83 f9 ff cmp ecx, -1
+ 000d7 73 15 jae SHORT $LN24@zipClose
+$LN23@zipClose:
+ 000d9 83 be fc 00 01
+ 00 00 cmp DWORD PTR [esi+65788], 0
+ 000e0 77 0c ja SHORT $LN24@zipClose
+ 000e2 81 be f8 00 01
+ 00 ff ff 00 00 cmp DWORD PTR [esi+65784], 65535 ; 0000ffffH
+ 000ec 76 39 jbe SHORT $LN10@zipClose
+$LN24@zipClose:
+
+; 1926 : {
+; 1927 : ZPOS64_T Zip64EOCDpos = ZTELL64(zi->z_filefunc,zi->filestream);
+
+ 000ee 8b 56 2c mov edx, DWORD PTR [esi+44]
+ 000f1 8b ce mov ecx, esi
+ 000f3 e8 00 00 00 00 call _call_ztell64
+
+; 1928 : Write_Zip64EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);
+
+ 000f8 ff 74 24 1c push DWORD PTR _centraldir_pos_inzip$1$[esp+32]
+ 000fc 8b fa mov edi, edx
+ 000fe 8b ce mov ecx, esi
+ 00100 ff 74 24 1c push DWORD PTR _centraldir_pos_inzip$2$[esp+36]
+ 00104 8b 54 24 18 mov edx, DWORD PTR _size_centraldir$1$[esp+40]
+ 00108 8b d8 mov ebx, eax
+ 0010a e8 00 00 00 00 call _Write_Zip64EndOfCentralDirectoryRecord
+
+; 1929 :
+; 1930 : Write_Zip64EndOfCentralDirectoryLocator(zi, Zip64EOCDpos);
+
+ 0010f 57 push edi
+ 00110 53 push ebx
+ 00111 8b ce mov ecx, esi
+ 00113 e8 00 00 00 00 call _Write_Zip64EndOfCentralDirectoryLocator
+ 00118 8b 5c 24 24 mov ebx, DWORD PTR _err$1$[esp+48]
+ 0011c 83 c4 10 add esp, 16 ; 00000010H
+ 0011f 8b 54 24 18 mov edx, DWORD PTR _centraldir_pos_inzip$2$[esp+32]
+ 00123 8b 7c 24 1c mov edi, DWORD PTR _centraldir_pos_inzip$1$[esp+32]
+$LN10@zipClose:
+
+; 1931 : }
+; 1932 :
+; 1933 : if (err==ZIP_OK)
+
+ 00127 85 db test ebx, ebx
+ 00129 75 22 jne SHORT $LN13@zipClose
+
+; 1934 : err = Write_EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);
+
+ 0012b 57 push edi
+ 0012c 52 push edx
+ 0012d 8b 54 24 18 mov edx, DWORD PTR _size_centraldir$1$[esp+40]
+ 00131 8b ce mov ecx, esi
+ 00133 e8 00 00 00 00 call _Write_EndOfCentralDirectoryRecord
+ 00138 8b d8 mov ebx, eax
+ 0013a 83 c4 08 add esp, 8
+
+; 1935 :
+; 1936 : if(err == ZIP_OK)
+
+ 0013d 85 db test ebx, ebx
+ 0013f 75 0c jne SHORT $LN13@zipClose
+
+; 1937 : err = Write_GlobalComment(zi, global_comment);
+
+ 00141 8b 55 0c mov edx, DWORD PTR _global_comment$[ebp]
+ 00144 8b ce mov ecx, esi
+ 00146 e8 00 00 00 00 call _Write_GlobalComment
+ 0014b 8b d8 mov ebx, eax
+$LN13@zipClose:
+
+; 1938 :
+; 1939 : if (ZCLOSE64(zi->z_filefunc,zi->filestream) != 0)
+
+ 0014d ff 76 2c push DWORD PTR [esi+44]
+ 00150 8b 46 14 mov eax, DWORD PTR [esi+20]
+ 00153 ff 76 1c push DWORD PTR [esi+28]
+ 00156 ff d0 call eax
+ 00158 83 c4 08 add esp, 8
+ 0015b 85 c0 test eax, eax
+ 0015d 74 0a je SHORT $LN15@zipClose
+
+; 1940 : if (err == ZIP_OK)
+
+ 0015f 85 db test ebx, ebx
+ 00161 b8 ff ff ff ff mov eax, -1
+ 00166 0f 44 d8 cmove ebx, eax
+$LN15@zipClose:
+
+; 1941 : err = ZIP_ERRNO;
+; 1942 :
+; 1943 : #ifndef NO_ADDFILEINEXISTINGZIP
+; 1944 : TRYFREE(zi->globalcomment);
+
+ 00169 8b 86 00 01 01
+ 00 mov eax, DWORD PTR [esi+65792]
+ 0016f 8b 3d 00 00 00
+ 00 mov edi, DWORD PTR __imp__free
+ 00175 85 c0 test eax, eax
+ 00177 74 06 je SHORT $LN16@zipClose
+ 00179 50 push eax
+ 0017a ff d7 call edi
+ 0017c 83 c4 04 add esp, 4
+$LN16@zipClose:
+
+; 1945 : #endif
+; 1946 : TRYFREE(zi);
+
+ 0017f 56 push esi
+ 00180 ff d7 call edi
+ 00182 83 c4 04 add esp, 4
+
+; 1947 :
+; 1948 : return err;
+
+ 00185 8b c3 mov eax, ebx
+
+; 1949 : }
+
+ 00187 5f pop edi
+ 00188 5e pop esi
+ 00189 5b pop ebx
+ 0018a 8b e5 mov esp, ebp
+ 0018c 5d pop ebp
+ 0018d c2 08 00 ret 8
+_zipClose@8 ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zip.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zip.obj
new file mode 100644
index 0000000000..f7b88cac91
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zip.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlib.res b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlib.res
new file mode 100644
index 0000000000..9316316bcc
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlib.res
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.log b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.log
new file mode 100644
index 0000000000..1b01ff01d7
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.log
@@ -0,0 +1,25 @@
+ adler32.c
+ compress.c
+ crc32.c
+ deflate.c
+ gzclose.c
+ gzlib.c
+ gzread.c
+ gzwrite.c
+ infback.c
+ inffast.c
+ inflate.c
+ inftrees.c
+ ioapi.c
+ iowin32.c
+ trees.c
+ uncompr.c
+ unzip.c
+ zip.c
+ zutil.c
+ Creating library x86\ZlibDllReleaseWithoutAsm\zlibwapi.lib and object x86\ZlibDllReleaseWithoutAsm\zlibwapi.exp
+ Generating code
+ All 255 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
+ Finished generating code
+ zlibvc.vcxproj -> d:\Downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\ZlibDllReleaseWithoutAsm\zlibwapi.dll
+ zlibvc.vcxproj -> x86\ZlibDllReleaseWithoutAsm\zlibwapi.pdb (Full PDB)
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/CL.command.1.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/CL.command.1.tlog
new file mode 100644
index 0000000000..7b1c7f359f
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/CL.command.1.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/CL.read.1.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/CL.read.1.tlog
new file mode 100644
index 0000000000..3eab217343
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/CL.read.1.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/CL.write.1.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/CL.write.1.tlog
new file mode 100644
index 0000000000..612c48e1a4
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/CL.write.1.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/link.command.1.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/link.command.1.tlog
new file mode 100644
index 0000000000..5f847490e7
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/link.command.1.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/link.read.1.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/link.read.1.tlog
new file mode 100644
index 0000000000..4dfd27e5a9
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/link.read.1.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/link.write.1.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/link.write.1.tlog
new file mode 100644
index 0000000000..d4cad299ae
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/link.write.1.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/rc.command.1.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/rc.command.1.tlog
new file mode 100644
index 0000000000..6ff6699b4a
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/rc.command.1.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/rc.read.1.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/rc.read.1.tlog
new file mode 100644
index 0000000000..1d1629b28b
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/rc.read.1.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/rc.write.1.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/rc.write.1.tlog
new file mode 100644
index 0000000000..37a72c41da
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/rc.write.1.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/zlibvc.lastbuildstate b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/zlibvc.lastbuildstate
new file mode 100644
index 0000000000..2b818f9515
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/zlibvc.lastbuildstate
@@ -0,0 +1,2 @@
+#TargetFrameworkVersion=v4.0:PlatformToolSet=v140:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=8.1
+ReleaseWithoutAsm|Win32|D:\Downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\|
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/zlibvc.write.1u.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/zlibvc.write.1u.tlog
new file mode 100644
index 0000000000..54f7582e08
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibvc.tlog/zlibvc.write.1u.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibwapi.Build.CppClean.log b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibwapi.Build.CppClean.log
new file mode 100644
index 0000000000..91635388f2
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zlibwapi.Build.CppClean.log
@@ -0,0 +1,31 @@
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\vc140.pdb
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\zutil.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\zip.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\unzip.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\uncompr.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\trees.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\iowin32.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\ioapi.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\inftrees.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\inflate.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\inffast.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\infback.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\gzwrite.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\gzread.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\gzlib.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\gzclose.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\deflate.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\crc32.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\compress.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\adler32.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\zlib.res
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\zlibwapi.dll
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\zlibvc.tlog\cl.command.1.tlog
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\zlibvc.tlog\cl.read.1.tlog
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\zlibvc.tlog\cl.write.1.tlog
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\zlibvc.tlog\link.command.1.tlog
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\zlibvc.tlog\link.read.1.tlog
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\zlibvc.tlog\link.write.1.tlog
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\zlibvc.tlog\rc.command.1.tlog
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\zlibvc.tlog\rc.read.1.tlog
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibdllreleasewithoutasm\tmp\zlibvc.tlog\rc.write.1.tlog
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zutil.cod b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zutil.cod
new file mode 100644
index 0000000000..f090b9859a
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zutil.cod
@@ -0,0 +1,259 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 19.00.23506.0
+
+ TITLE d:\downloads\tgl-master\tgl-master\zlib\zutil.c
+ .686P
+ .XMM
+ include listing.inc
+ .model flat
+
+INCLUDELIB OLDNAMES
+
+PUBLIC _z_errmsg
+PUBLIC ??_C@_0BA@MOKMMFOD@need?5dictionary?$AA@ ; `string'
+PUBLIC ??_C@_0L@FNAOCBOG@stream?5end?$AA@ ; `string'
+PUBLIC ??_C@_0L@KIJFAKBJ@file?5error?$AA@ ; `string'
+PUBLIC ??_C@_0N@MKKNPMJD@stream?5error?$AA@ ; `string'
+PUBLIC ??_C@_0L@HAHMBNLP@data?5error?$AA@ ; `string'
+PUBLIC ??_C@_0BE@OGGJBMCE@insufficient?5memory?$AA@ ; `string'
+PUBLIC ??_C@_0N@DFPGLBGC@buffer?5error?$AA@ ; `string'
+PUBLIC ??_C@_0BF@CJFPCCEG@incompatible?5version?$AA@ ; `string'
+; COMDAT ??_C@_0BF@CJFPCCEG@incompatible?5version?$AA@
+CONST SEGMENT
+??_C@_0BF@CJFPCCEG@incompatible?5version?$AA@ DB 'incompatible version', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0N@DFPGLBGC@buffer?5error?$AA@
+CONST SEGMENT
+??_C@_0N@DFPGLBGC@buffer?5error?$AA@ DB 'buffer error', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0BE@OGGJBMCE@insufficient?5memory?$AA@
+CONST SEGMENT
+??_C@_0BE@OGGJBMCE@insufficient?5memory?$AA@ DB 'insufficient memory', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0L@HAHMBNLP@data?5error?$AA@
+CONST SEGMENT
+??_C@_0L@HAHMBNLP@data?5error?$AA@ DB 'data error', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0N@MKKNPMJD@stream?5error?$AA@
+CONST SEGMENT
+??_C@_0N@MKKNPMJD@stream?5error?$AA@ DB 'stream error', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0L@KIJFAKBJ@file?5error?$AA@
+CONST SEGMENT
+??_C@_0L@KIJFAKBJ@file?5error?$AA@ DB 'file error', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0L@FNAOCBOG@stream?5end?$AA@
+CONST SEGMENT
+??_C@_0L@FNAOCBOG@stream?5end?$AA@ DB 'stream end', 00H ; `string'
+CONST ENDS
+; COMDAT ??_C@_0BA@MOKMMFOD@need?5dictionary?$AA@
+CONST SEGMENT
+??_C@_0BA@MOKMMFOD@need?5dictionary?$AA@ DB 'need dictionary', 00H ; `string'
+ ORG $+3
+_z_errmsg DD FLAT:??_C@_0BA@MOKMMFOD@need?5dictionary?$AA@
+ DD FLAT:??_C@_0L@FNAOCBOG@stream?5end?$AA@
+ DD FLAT:??_C@_00CNPNBAHC@?$AA@
+ DD FLAT:??_C@_0L@KIJFAKBJ@file?5error?$AA@
+ DD FLAT:??_C@_0N@MKKNPMJD@stream?5error?$AA@
+ DD FLAT:??_C@_0L@HAHMBNLP@data?5error?$AA@
+ DD FLAT:??_C@_0BE@OGGJBMCE@insufficient?5memory?$AA@
+ DD FLAT:??_C@_0N@DFPGLBGC@buffer?5error?$AA@
+ DD FLAT:??_C@_0BF@CJFPCCEG@incompatible?5version?$AA@
+ DD FLAT:??_C@_00CNPNBAHC@?$AA@
+PUBLIC _zError@4
+PUBLIC _zlibCompileFlags@0
+PUBLIC _zlibVersion@0
+PUBLIC _zcfree
+PUBLIC _zcalloc
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\zutil.c
+; COMDAT _zcalloc
+_TEXT SEGMENT
+_opaque$ = 8 ; size = 4
+_items$ = 12 ; size = 4
+_size$ = 16 ; size = 4
+_zcalloc PROC ; COMDAT
+
+; 308 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 309 : if (opaque) items += size - size; /* make compiler happy */
+; 310 : return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
+
+ 00003 8b 45 0c mov eax, DWORD PTR _items$[ebp]
+ 00006 0f af 45 10 imul eax, DWORD PTR _size$[ebp]
+ 0000a 50 push eax
+ 0000b ff 15 00 00 00
+ 00 call DWORD PTR __imp__malloc
+ 00011 83 c4 04 add esp, 4
+
+; 311 : (voidpf)calloc(items, size);
+; 312 : }
+
+ 00014 5d pop ebp
+ 00015 c3 ret 0
+_zcalloc ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\zutil.c
+; COMDAT _zcfree
+_TEXT SEGMENT
+_opaque$ = 8 ; size = 4
+_ptr$ = 12 ; size = 4
+_zcfree PROC ; COMDAT
+
+; 317 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 318 : free(ptr);
+
+ 00003 ff 75 0c push DWORD PTR _ptr$[ebp]
+ 00006 ff 15 00 00 00
+ 00 call DWORD PTR __imp__free
+ 0000c 83 c4 04 add esp, 4
+
+; 319 : if (opaque) return; /* make compiler happy */
+; 320 : }
+
+ 0000f 5d pop ebp
+ 00010 c3 ret 0
+_zcfree ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\zutil.c
+; COMDAT _zlibVersion@0
+_TEXT SEGMENT
+_zlibVersion@0 PROC ; COMDAT
+
+; 32 : return ZLIB_VERSION;
+
+ 00000 b8 00 00 00 00 mov eax, OFFSET ??_C@_05IAIEPMAK@1?42?48?$AA@
+
+; 33 : }
+
+ 00005 c3 ret 0
+_zlibVersion@0 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\zutil.c
+; COMDAT _zlibCompileFlags@0
+_TEXT SEGMENT
+_zlibCompileFlags@0 PROC ; COMDAT
+
+; 37 : uLong flags;
+; 38 :
+; 39 : flags = 0;
+; 40 : switch ((int)(sizeof(uInt))) {
+; 41 : case 2: break;
+; 42 : case 4: flags += 1; break;
+; 43 : case 8: flags += 2; break;
+; 44 : default: flags += 3;
+; 45 : }
+; 46 : switch ((int)(sizeof(uLong))) {
+; 47 : case 2: break;
+; 48 : case 4: flags += 1 << 2; break;
+; 49 : case 8: flags += 2 << 2; break;
+; 50 : default: flags += 3 << 2;
+; 51 : }
+; 52 : switch ((int)(sizeof(voidpf))) {
+; 53 : case 2: break;
+; 54 : case 4: flags += 1 << 4; break;
+; 55 : case 8: flags += 2 << 4; break;
+; 56 : default: flags += 3 << 4;
+; 57 : }
+; 58 : switch ((int)(sizeof(z_off_t))) {
+; 59 : case 2: break;
+; 60 : case 4: flags += 1 << 6; break;
+; 61 : case 8: flags += 2 << 6; break;
+; 62 : default: flags += 3 << 6;
+; 63 : }
+; 64 : #ifdef DEBUG
+; 65 : flags += 1 << 8;
+; 66 : #endif
+; 67 : #if defined(ASMV) || defined(ASMINF)
+; 68 : flags += 1 << 9;
+; 69 : #endif
+; 70 : #ifdef ZLIB_WINAPI
+; 71 : flags += 1 << 10;
+; 72 : #endif
+; 73 : #ifdef BUILDFIXED
+; 74 : flags += 1 << 12;
+; 75 : #endif
+; 76 : #ifdef DYNAMIC_CRC_TABLE
+; 77 : flags += 1 << 13;
+; 78 : #endif
+; 79 : #ifdef NO_GZCOMPRESS
+; 80 : flags += 1L << 16;
+; 81 : #endif
+; 82 : #ifdef NO_GZIP
+; 83 : flags += 1L << 17;
+; 84 : #endif
+; 85 : #ifdef PKZIP_BUG_WORKAROUND
+; 86 : flags += 1L << 20;
+; 87 : #endif
+; 88 : #ifdef FASTEST
+; 89 : flags += 1L << 21;
+; 90 : #endif
+; 91 : #if defined(STDC) || defined(Z_HAVE_STDARG_H)
+; 92 : # ifdef NO_vsnprintf
+; 93 : flags += 1L << 25;
+; 94 : # ifdef HAS_vsprintf_void
+; 95 : flags += 1L << 26;
+; 96 : # endif
+; 97 : # else
+; 98 : # ifdef HAS_vsnprintf_void
+; 99 : flags += 1L << 26;
+; 100 : # endif
+; 101 : # endif
+; 102 : #else
+; 103 : flags += 1L << 24;
+; 104 : # ifdef NO_snprintf
+; 105 : flags += 1L << 25;
+; 106 : # ifdef HAS_sprintf_void
+; 107 : flags += 1L << 26;
+; 108 : # endif
+; 109 : # else
+; 110 : # ifdef HAS_snprintf_void
+; 111 : flags += 1L << 26;
+; 112 : # endif
+; 113 : # endif
+; 114 : #endif
+; 115 : return flags;
+
+ 00000 b8 55 04 00 00 mov eax, 1109 ; 00000455H
+
+; 116 : }
+
+ 00005 c3 ret 0
+_zlibCompileFlags@0 ENDP
+_TEXT ENDS
+; Function compile flags: /Ogtp
+; File d:\downloads\tgl-master\tgl-master\zlib\zutil.c
+; COMDAT _zError@4
+_TEXT SEGMENT
+_err$ = 8 ; size = 4
+_zError@4 PROC ; COMDAT
+
+; 138 : {
+
+ 00000 55 push ebp
+ 00001 8b ec mov ebp, esp
+
+; 139 : return ERR_MSG(err);
+
+ 00003 8b 45 08 mov eax, DWORD PTR _err$[ebp]
+ 00006 b9 08 00 00 00 mov ecx, OFFSET _z_errmsg+8
+ 0000b c1 e0 02 shl eax, 2
+ 0000e 2b c8 sub ecx, eax
+ 00010 8b 01 mov eax, DWORD PTR [ecx]
+
+; 140 : }
+
+ 00012 5d pop ebp
+ 00013 c2 04 00 ret 4
+_zError@4 ENDP
+_TEXT ENDS
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zutil.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zutil.obj
new file mode 100644
index 0000000000..508155a890
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/Tmp/zutil.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/vc140.pdb b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/vc140.pdb
new file mode 100644
index 0000000000..616296a510
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/vc140.pdb
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.dll b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.dll
new file mode 100644
index 0000000000..6b12faecb8
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.dll
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.exp b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.exp
new file mode 100644
index 0000000000..97d7a3df8e
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.exp
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.iobj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.iobj
new file mode 100644
index 0000000000..47e1656954
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.iobj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.ipdb b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.ipdb
new file mode 100644
index 0000000000..5e1382c377
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.ipdb
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.lib b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.lib
new file mode 100644
index 0000000000..ab26344338
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.lib
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.map b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.map
new file mode 100644
index 0000000000..5714b565d7
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.map
@@ -0,0 +1,861 @@
+ zlibwapi
+
+ Timestamp is 56dd9cc4 (Mon Mar 7 18:22:44 2016)
+
+ Preferred load address is 10000000
+
+ Start Length Name Class
+ 0001:00000000 000102c4H .text$mn CODE
+ 0002:00000000 0000011cH .idata$5 DATA
+ 0002:0000011c 00000004H .00cfg DATA
+ 0002:00000120 00000004H .CRT$XCA DATA
+ 0002:00000124 00000004H .CRT$XCZ DATA
+ 0002:00000128 00000004H .CRT$XIA DATA
+ 0002:0000012c 00000004H .CRT$XIZ DATA
+ 0002:00000130 00000004H .CRT$XPA DATA
+ 0002:00000134 00000004H .CRT$XPZ DATA
+ 0002:00000138 00000004H .CRT$XTA DATA
+ 0002:0000013c 00000004H .CRT$XTZ DATA
+ 0002:00000140 000041dcH .rdata DATA
+ 0002:00004320 00000004H .rdata$sxdata DATA
+ 0002:00004324 000002d0H .rdata$zzzdbg DATA
+ 0002:000045f4 00000004H .rtc$IAA DATA
+ 0002:000045f8 00000004H .rtc$IZZ DATA
+ 0002:000045fc 00000004H .rtc$TAA DATA
+ 0002:00004600 00000004H .rtc$TZZ DATA
+ 0002:00004608 0000007cH .xdata$x DATA
+ 0002:00004690 00000c44H .edata DATA
+ 0002:000052d4 000000a0H .idata$2 DATA
+ 0002:00005374 00000014H .idata$3 DATA
+ 0002:00005388 0000011cH .idata$4 DATA
+ 0002:000054a4 0000050aH .idata$6 DATA
+ 0003:00000000 00000060H .data DATA
+ 0003:00000060 00000388H .bss DATA
+ 0004:00000000 0000001cH .gfids$y DATA
+ 0005:00000000 00000058H .rsrc$01 DATA
+ 0005:00000060 00000338H .rsrc$02 DATA
+
+ Address Publics by Value Rva+Base Lib:Object
+
+ 0000:00000000 ___guard_iat_count 00000000 <absolute>
+ 0000:00000000 ___guard_fids_table 00000000 <absolute>
+ 0000:00000000 ___guard_longjmp_count 00000000 <absolute>
+ 0000:00000000 ___guard_iat_table 00000000 <absolute>
+ 0000:00000000 ___guard_longjmp_table 00000000 <absolute>
+ 0000:00000000 ___guard_fids_count 00000000 <absolute>
+ 0000:00000001 ___safe_se_handler_count 00000001 <absolute>
+ 0000:00000100 ___guard_flags 00000100 <absolute>
+ 0000:00000000 ___ImageBase 10000000 <linker-defined>
+ 0001:00000000 _adler32@12 10001000 f adler32.obj
+ 0001:00000340 _adler32_combine@12 10001340 f adler32.obj
+ 0001:00000360 _compress2@20 10001360 f compress.obj
+ 0001:00000410 _compress@16 10001410 f compress.obj
+ 0001:00000430 _compressBound@4 10001430 f compress.obj
+ 0001:00000450 _get_crc_table@0 10001450 f crc32.obj
+ 0001:00000460 _crc32@12 10001460 f crc32.obj
+ 0001:00000b50 _crc32_combine@12 10001b50 f crc32.obj
+ 0001:00000b70 _deflateInit_@16 10001b70 f deflate.obj
+ 0001:00000b90 _deflateInit2_@32 10001b90 f deflate.obj
+ 0001:00000dc0 _deflateSetDictionary@12 10001dc0 f deflate.obj
+ 0001:00000f60 _deflateResetKeep@4 10001f60 f deflate.obj
+ 0001:00001010 _deflateReset@4 10002010 f deflate.obj
+ 0001:00001040 _deflateSetHeader@8 10002040 f deflate.obj
+ 0001:00001070 _deflatePending@12 10002070 f deflate.obj
+ 0001:000010b0 _deflatePrime@12 100020b0 f deflate.obj
+ 0001:00001140 _deflateParams@12 10002140 f deflate.obj
+ 0001:00001240 _deflateTune@20 10002240 f deflate.obj
+ 0001:00001290 _deflateBound@8 10002290 f deflate.obj
+ 0001:00001400 _deflate@8 10002400 f deflate.obj
+ 0001:00001c70 _deflateEnd@4 10002c70 f deflate.obj
+ 0001:00001d50 _deflateCopy@8 10002d50 f deflate.obj
+ 0001:00003010 _gzclose@4 10004010 f gzclose.obj
+ 0001:00003040 ___local_stdio_printf_options 10004040 f i gzlib.obj
+ 0001:00003050 __vsnprintf_l 10004050 f i gzlib.obj
+ 0001:00003080 __vsnprintf 10004080 f i gzlib.obj
+ 0001:000030b0 __snprintf 100040b0 f i gzlib.obj
+ 0001:00003450 _gzopen@8 10004450 f gzlib.obj
+ 0001:00003470 _gzdopen@8 10004470 f gzlib.obj
+ 0001:000034d0 _gzopen_w@8 100044d0 f gzlib.obj
+ 0001:000034f0 _gzbuffer@8 100044f0 f gzlib.obj
+ 0001:00003530 _gzrewind@4 10004530 f gzlib.obj
+ 0001:00003590 _gzseek64@16 10004590 f gzlib.obj
+ 0001:00003720 _gzseek@12 10004720 f gzlib.obj
+ 0001:00003760 _gztell64@4 10004760 f gzlib.obj
+ 0001:000037c0 _gztell@4 100047c0 f gzlib.obj
+ 0001:000037f0 _gzoffset64@4 100047f0 f gzlib.obj
+ 0001:00003840 _gzoffset@4 10004840 f gzlib.obj
+ 0001:00003870 _gzeof@4 10004870 f gzlib.obj
+ 0001:000038b0 _gzerror@8 100048b0 f gzlib.obj
+ 0001:00003900 _gzclearerr@4 10004900 f gzlib.obj
+ 0001:00003940 _gz_error 10004940 f gzlib.obj
+ 0001:00003e90 _gzread@12 10004e90 f gzread.obj
+ 0001:00003fe0 _gzgetc@4 10004fe0 f gzread.obj
+ 0001:00004040 _gzgetc_@4 10005040 f gzread.obj
+ 0001:00004050 _gzungetc@8 10005050 f gzread.obj
+ 0001:00004130 _gzgets@12 10005130 f gzread.obj
+ 0001:00004240 _gzdirect@4 10005240 f gzread.obj
+ 0001:00004280 _gzclose_r@4 10005280 f gzread.obj
+ 0001:00004310 _vsnprintf 10005310 f i gzwrite.obj
+ 0001:00004620 _gzwrite@12 10005620 f gzwrite.obj
+ 0001:00004740 _gzputc@8 10005740 f gzwrite.obj
+ 0001:000047f0 _gzputs@8 100057f0 f gzwrite.obj
+ 0001:00004830 _gzvprintf 10005830 f gzwrite.obj
+ 0001:00004910 _gzprintf 10005910 f gzwrite.obj
+ 0001:00004930 _gzflush@8 10005930 f gzwrite.obj
+ 0001:000049a0 _gzsetparams@12 100059a0 f gzwrite.obj
+ 0001:00004a50 _gzclose_w@4 10005a50 f gzwrite.obj
+ 0001:00004b10 _inflateBackInit_@20 10005b10 f infback.obj
+ 0001:00004c10 _inflateBack@20 10005c10 f infback.obj
+ 0001:00005a10 _inflateBackEnd@4 10006a10 f infback.obj
+ 0001:00005a50 _inflate_fast 10006a50 f inffast.obj
+ 0001:00005e80 _inflateResetKeep@4 10006e80 f inflate.obj
+ 0001:00005f30 _inflateReset@4 10006f30 f inflate.obj
+ 0001:00005f70 _inflateReset2@8 10006f70 f inflate.obj
+ 0001:00006000 _inflateInit2_@16 10007000 f inflate.obj
+ 0001:000060c0 _inflateInit_@12 100070c0 f inflate.obj
+ 0001:000060e0 _inflatePrime@12 100070e0 f inflate.obj
+ 0001:00006270 _inflate@8 10007270 f inflate.obj
+ 0001:00007940 _inflateEnd@4 10008940 f inflate.obj
+ 0001:00007990 _inflateGetDictionary@12 10008990 f inflate.obj
+ 0001:00007a00 _inflateSetDictionary@12 10008a00 f inflate.obj
+ 0001:00007aa0 _inflateGetHeader@8 10008aa0 f inflate.obj
+ 0001:00007b60 _inflateSync@4 10008b60 f inflate.obj
+ 0001:00007c50 _inflateSyncPoint@4 10008c50 f inflate.obj
+ 0001:00007c90 _inflateCopy@8 10008c90 f inflate.obj
+ 0001:00007df0 _inflateUndermine@8 10008df0 f inflate.obj
+ 0001:00007e20 _inflateMark@4 10008e20 f inflate.obj
+ 0001:00007e90 _inflate_table 10008e90 f inftrees.obj
+ 0001:000082a0 _call_zopen64 100092a0 f ioapi.obj
+ 0001:000082c0 _call_zseek64 100092c0 f ioapi.obj
+ 0001:00008320 _call_ztell64 10009320 f ioapi.obj
+ 0001:00008350 _fill_zlib_filefunc64_32_def_from_filefunc32 10009350 f ioapi.obj
+ 0001:000085a0 _fill_fopen64_filefunc 100095a0 f ioapi.obj
+ 0001:00008690 _win32_open64_file_func 10009690 f iowin32.obj
+ 0001:00008700 _win32_open64_file_funcA 10009700 f iowin32.obj
+ 0001:00008770 _win32_open64_file_funcW 10009770 f iowin32.obj
+ 0001:000087c0 _win32_open_file_func 100097c0 f iowin32.obj
+ 0001:00008830 _win32_read_file_func 10009830 f iowin32.obj
+ 0001:00008880 _win32_write_file_func 10009880 f iowin32.obj
+ 0001:000088f0 _win32_tell_file_func 100098f0 f iowin32.obj
+ 0001:00008950 _win32_tell64_file_func 10009950 f iowin32.obj
+ 0001:000089b0 _win32_seek_file_func 100099b0 f iowin32.obj
+ 0001:00008a30 _win32_seek64_file_func 10009a30 f iowin32.obj
+ 0001:00008aa0 _win32_close_file_func 10009aa0 f iowin32.obj
+ 0001:00008ad0 _win32_error_file_func 10009ad0 f iowin32.obj
+ 0001:00008af0 _fill_win32_filefunc 10009af0 f iowin32.obj
+ 0001:00008b30 _fill_win32_filefunc64 10009b30 f iowin32.obj
+ 0001:00008b70 _fill_win32_filefunc64A 10009b70 f iowin32.obj
+ 0001:00008bb0 _fill_win32_filefunc64W 10009bb0 f iowin32.obj
+ 0001:00008c00 __tr_init 10009c00 f trees.obj
+ 0001:00009b90 __tr_stored_block 1000ab90 f trees.obj
+ 0001:00009c40 __tr_flush_bits 1000ac40 f trees.obj
+ 0001:00009c50 __tr_align 1000ac50 f trees.obj
+ 0001:00009d40 __tr_flush_block 1000ad40 f trees.obj
+ 0001:0000a530 _uncompress@16 1000b530 f uncompr.obj
+ 0001:0000a910 _unzStringFileNameCompare@12 1000b910 f unzip.obj
+ 0001:0000b1c0 _unzOpen2@8 1000c1c0 f unzip.obj
+ 0001:0000b210 _unzOpen2_64@8 1000c210 f unzip.obj
+ 0001:0000b270 _unzOpen@4 1000c270 f unzip.obj
+ 0001:0000b290 _unzOpen64@4 1000c290 f unzip.obj
+ 0001:0000b2b0 _unzClose@4 1000c2b0 f unzip.obj
+ 0001:0000b2f0 _unzGetGlobalInfo64@8 1000c2f0 f unzip.obj
+ 0001:0000b320 _unzGetGlobalInfo@8 1000c320 f unzip.obj
+ 0001:0000b990 _unzGetCurrentFileInfo64@32 1000c990 f unzip.obj
+ 0001:0000b9c0 _unzGetCurrentFileInfo@32 1000c9c0 f unzip.obj
+ 0001:0000ba80 _unzGoToFirstFile@4 1000ca80 f unzip.obj
+ 0001:0000baf0 _unzGoToNextFile@4 1000caf0 f unzip.obj
+ 0001:0000bba0 _unzLocateFile@12 1000cba0 f unzip.obj
+ 0001:0000bd50 _unzGetFilePos64@8 1000cd50 f unzip.obj
+ 0001:0000bda0 _unzGetFilePos@8 1000cda0 f unzip.obj
+ 0001:0000bdd0 _unzGoToFilePos64@8 1000cdd0 f unzip.obj
+ 0001:0000be40 _unzGoToFilePos@8 1000ce40 f unzip.obj
+ 0001:0000c0e0 _unzOpenCurrentFile3@20 1000d0e0 f unzip.obj
+ 0001:0000c350 _unzOpenCurrentFile@4 1000d350 f unzip.obj
+ 0001:0000c370 _unzOpenCurrentFilePassword@8 1000d370 f unzip.obj
+ 0001:0000c390 _unzOpenCurrentFile2@16 1000d390 f unzip.obj
+ 0001:0000c3b0 _unzGetCurrentFileZStreamPos64@4 1000d3b0 f unzip.obj
+ 0001:0000c3f0 _unzReadCurrentFile@12 1000d3f0 f unzip.obj
+ 0001:0000c6b0 _unztell@4 1000d6b0 f unzip.obj
+ 0001:0000c6e0 _unztell64@4 1000d6e0 f unzip.obj
+ 0001:0000c710 _unzeof@4 1000d710 f unzip.obj
+ 0001:0000c750 _unzGetLocalExtrafield@12 1000d750 f unzip.obj
+ 0001:0000c820 _unzCloseCurrentFile@4 1000d820 f unzip.obj
+ 0001:0000c8c0 _unzGetGlobalComment@12 1000d8c0 f unzip.obj
+ 0001:0000d4c0 _LoadCentralDirectoryRecord 1000e4c0 f zip.obj
+ 0001:0000d970 _zipOpen3@16 1000e970 f zip.obj
+ 0001:0000dae0 _zipOpen2@16 1000eae0 f zip.obj
+ 0001:0000db30 _zipOpen2_64@16 1000eb30 f zip.obj
+ 0001:0000db90 _zipOpen@8 1000eb90 f zip.obj
+ 0001:0000dbb0 _zipOpen64@8 1000ebb0 f zip.obj
+ 0001:0000dbd0 _Write_LocalFileHeader 1000ebd0 f zip.obj
+ 0001:0000dde0 _zipOpenNewFileInZip4_64@76 1000ede0 f zip.obj
+ 0001:0000e2c0 _zipOpenNewFileInZip3@64 1000f2c0 f zip.obj
+ 0001:0000e310 _zipOpenNewFileInZip3_64@68 1000f310 f zip.obj
+ 0001:0000e360 _zipOpenNewFileInZip2@44 1000f360 f zip.obj
+ 0001:0000e3a0 _zipOpenNewFileInZip2_64@48 1000f3a0 f zip.obj
+ 0001:0000e3e0 _zipOpenNewFileInZip64@44 1000f3e0 f zip.obj
+ 0001:0000e420 _zipOpenNewFileInZip@40 1000f420 f zip.obj
+ 0001:0000e520 _zipWriteInFileInZip@12 1000f520 f zip.obj
+ 0001:0000e620 _zipCloseFileInZipRaw@12 1000f620 f zip.obj
+ 0001:0000e640 _zipCloseFileInZipRaw64@16 1000f640 f zip.obj
+ 0001:0000eb30 _zipCloseFileInZip@4 1000fb30 f zip.obj
+ 0001:0000eb50 _Write_Zip64EndOfCentralDirectoryLocator 1000fb50 f zip.obj
+ 0001:0000ebd0 _Write_Zip64EndOfCentralDirectoryRecord 1000fbd0 f zip.obj
+ 0001:0000ecf0 _Write_EndOfCentralDirectoryRecord 1000fcf0 f zip.obj
+ 0001:0000ee30 _Write_GlobalComment 1000fe30 f zip.obj
+ 0001:0000eea0 _zipClose@8 1000fea0 f zip.obj
+ 0001:0000f030 _zlibVersion@0 10010030 f zutil.obj
+ 0001:0000f040 _zlibCompileFlags@0 10010040 f zutil.obj
+ 0001:0000f050 _zError@4 10010050 f zutil.obj
+ 0001:0000f070 _zcalloc 10010070 f zutil.obj
+ 0001:0000f090 _zcfree 10010090 f zutil.obj
+ 0001:0000f0a2 _ReadFile@20 100100a2 f kernel32:KERNEL32.dll
+ 0001:0000f0a8 _WriteFile@20 100100a8 f kernel32:KERNEL32.dll
+ 0001:0000f0ae _CreateFile2@20 100100ae f kernel32:KERNEL32.dll
+ 0001:0000f0b4 _MultiByteToWideChar@24 100100b4 f kernel32:KERNEL32.dll
+ 0001:0000f0ba _GetLastError@0 100100ba f kernel32:KERNEL32.dll
+ 0001:0000f0c0 _CloseHandle@4 100100c0 f kernel32:KERNEL32.dll
+ 0001:0000f0c6 _SetFilePointerEx@20 100100c6 f kernel32:KERNEL32.dll
+ 0001:0000f3e1 __CRT_INIT@12 100103e1 f MSVCRT:dll_dllmain.obj
+ 0001:0000f3ea __DllMainCRTStartup@12 100103ea f MSVCRT:dll_dllmain.obj
+ 0001:0000f40d ??$__crt_fast_decode_pointer@PAP6AXXZ@@YAPAP6AXXZQAP6AXXZ@Z 1001040d f i MSVCRT:utility.obj
+ 0001:0000f421 ??$__crt_fast_encode_pointer@PAP6AXXZ@@YAPAP6AXXZQAP6AXXZ@Z 10010421 f i MSVCRT:utility.obj
+ 0001:0000f43e ?__crt_rotate_pointer_value@@YAIIH@Z 1001043e f i MSVCRT:utility.obj
+ 0001:0000f4c2 _NtCurrentTeb 100104c2 f i MSVCRT:utility.obj
+ 0001:0000f4c9 ___scrt_acquire_startup_lock 100104c9 f MSVCRT:utility.obj
+ 0001:0000f4fe ___scrt_dllmain_after_initialize_c 100104fe f MSVCRT:utility.obj
+ 0001:0000f516 ___scrt_dllmain_before_initialize_c 10010516 f MSVCRT:utility.obj
+ 0001:0000f524 ___scrt_dllmain_crt_thread_attach 10010524 f MSVCRT:utility.obj
+ 0001:0000f543 ___scrt_dllmain_crt_thread_detach 10010543 f MSVCRT:utility.obj
+ 0001:0000f550 ___scrt_dllmain_exception_filter 10010550 f MSVCRT:utility.obj
+ 0001:0000f583 ___scrt_dllmain_uninitialize_c 10010583 f MSVCRT:utility.obj
+ 0001:0000f5a6 ___scrt_dllmain_uninitialize_critical 100105a6 f MSVCRT:utility.obj
+ 0001:0000f5b3 ___scrt_initialize_crt 100105b3 f MSVCRT:utility.obj
+ 0001:0000f5ec ___scrt_initialize_onexit_tables 100105ec f MSVCRT:utility.obj
+ 0001:0000f683 ___scrt_is_nonwritable_in_current_image 10010683 f MSVCRT:utility.obj
+ 0001:0000f710 ___scrt_release_startup_lock 10010710 f MSVCRT:utility.obj
+ 0001:0000f72d ___scrt_uninitialize_crt 1001072d f MSVCRT:utility.obj
+ 0001:0000f755 __onexit 10010755 f MSVCRT:utility.obj
+ 0001:0000f790 _at_quick_exit 10010790 f MSVCRT:utility.obj
+ 0001:0000f7c1 _atexit 100107c1 f MSVCRT:utility.obj
+ 0001:0000f7d6 ___security_init_cookie 100107d6 f MSVCRT:gs_support.obj
+ 0001:0000f872 _DllMain@12 10010872 f MSVCRT:dll_dllmain_stub.obj
+ 0001:0000f894 ?__scrt_initialize_type_info@@YAXXZ 10010894 f MSVCRT:tncleanup.obj
+ 0001:0000f8a0 ?__scrt_uninitialize_type_info@@YAXXZ 100108a0 f MSVCRT:tncleanup.obj
+ 0001:0000f8ac ___local_stdio_scanf_options 100108ac f i MSVCRT:default_local_stdio_options.obj
+ 0001:0000f8b2 ___scrt_initialize_default_local_stdio_options 100108b2 f MSVCRT:default_local_stdio_options.obj
+ 0001:0000f8cf ___scrt_get_dyn_tls_init_callback 100108cf f MSVCRT:dyn_tls_init.obj
+ 0001:0000f8d5 ___scrt_fastfail 100108d5 f MSVCRT:utility_desktop.obj
+ 0001:0000f9f0 ___scrt_get_show_window_mode 100109f0 f MSVCRT:utility_desktop.obj
+ 0001:0000fa23 ___scrt_initialize_winrt 10010a23 f MSVCRT:utility_desktop.obj
+ 0001:0000fa26 ___scrt_is_managed_app 10010a26 f MSVCRT:utility_desktop.obj
+ 0001:0000fa6a ___scrt_set_unhandled_exception_filter 10010a6a f MSVCRT:utility_desktop.obj
+ 0001:0000fa76 ___scrt_unhandled_exception_filter@4 10010a76 f MSVCRT:utility_desktop.obj
+ 0001:0000fab7 __crt_debugger_hook 10010ab7 f MSVCRT:utility_desktop.obj
+ 0001:0000fabf __RTC_Initialize 10010abf f MSVCRT:_initsect_.obj
+ 0001:0000faea __RTC_Terminate 10010aea f MSVCRT:_initsect_.obj
+ 0001:0000fb15 @_guard_check_icall@4 10010b15 f i MSVCRT:checkcfg.obj
+ 0001:0000fb20 __SEH_prolog4 10010b20 f MSVCRT:_sehprolg4_.obj
+ 0001:0000fb66 __SEH_epilog4 10010b66 f MSVCRT:_sehprolg4_.obj
+ 0001:0000fb7b __except_handler4 10010b7b f MSVCRT:_chandler4gs_.obj
+ 0001:0000fb9e ___isa_available_init 10010b9e f MSVCRT:_cpu_disp_.obj
+ 0001:0000fd3f ___scrt_is_ucrt_dll_in_use 10010d3f f MSVCRT:ucrt_detection.obj
+ 0001:0000fd4b @_guard_check_icall_nop@4 10010d4b f i MSVCRT:guard_support.obj
+ 0001:0000fd4c __guard_icall_checks_enforced 10010d4c f i MSVCRT:guard_support.obj
+ 0001:0000fd5e @__security_check_cookie@4 10010d5e f MSVCRT:_secchk_.obj
+ 0001:0000fd6f ___raise_securityfailure 10010d6f f MSVCRT:gs_report.obj
+ 0001:0000fd97 ___report_gsfailure 10010d97 f MSVCRT:gs_report.obj
+ 0001:0000fe92 ___report_rangecheckfailure 10010e92 f MSVCRT:gs_report.obj
+ 0001:0000fe9e ___report_securityfailure 10010e9e f MSVCRT:gs_report.obj
+ 0001:0000ff6e ___report_securityfailureEx 10010f6e f MSVCRT:gs_report.obj
+ 0001:00010084 _memchr 10011084 f vcruntime:VCRUNTIME140.dll
+ 0001:0001008a ___telemetry_main_invoke_trigger 1001108a f vcruntime:VCRUNTIME140.dll
+ 0001:00010090 ___telemetry_main_return_trigger 10011090 f vcruntime:VCRUNTIME140.dll
+ 0001:00010096 ___std_type_info_destroy_list 10011096 f vcruntime:VCRUNTIME140.dll
+ 0001:0001009c _memset 1001109c f vcruntime:VCRUNTIME140.dll
+ 0001:000100a2 __except_handler4_common 100110a2 f vcruntime:VCRUNTIME140.dll
+ 0001:000100a8 __lseeki64 100110a8 f ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0001:000100ae __wopen 100110ae f ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0001:000100b4 __open 100110b4 f ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0001:000100ba _wcstombs 100110ba f ucrt:api-ms-win-crt-convert-l1-1-0.dll
+ 0001:000100c0 ___stdio_common_vsprintf 100110c0 f ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0001:000100c6 _free 100110c6 f ucrt:api-ms-win-crt-heap-l1-1-0.dll
+ 0001:000100cc _malloc 100110cc f ucrt:api-ms-win-crt-heap-l1-1-0.dll
+ 0001:000100d2 __read 100110d2 f ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0001:000100d8 __close 100110d8 f ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0001:000100de __errno 100110de f ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0001:000100e4 _strerror 100110e4 f ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0001:000100ea __write 100110ea f ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0001:000100f0 _ftell 100110f0 f ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0001:000100f6 _ferror 100110f6 f ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0001:000100fc _fopen 100110fc f ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0001:00010102 _fclose 10011102 f ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0001:00010108 _fseek 10011108 f ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0001:0001010e _fwrite 1001110e f ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0001:00010114 __ftelli64 10011114 f ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0001:0001011a _fread 1001111a f ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0001:00010120 __fseeki64 10011120 f ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0001:00010126 _srand 10011126 f ucrt:api-ms-win-crt-utility-l1-1-0.dll
+ 0001:0001012c _rand 1001112c f ucrt:api-ms-win-crt-utility-l1-1-0.dll
+ 0001:00010132 __time64 10011132 f ucrt:api-ms-win-crt-time-l1-1-0.dll
+ 0001:00010138 __initterm 10011138 f ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0001:0001013e __initterm_e 1001113e f ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0001:00010144 __seh_filter_dll 10011144 f ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0001:0001014a __initialize_narrow_environment 1001114a f ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0001:00010150 __initialize_onexit_table 10011150 f ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0001:00010156 __register_onexit_function 10011156 f ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0001:0001015c __execute_onexit_table 1001115c f ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0001:00010162 __crt_atexit 10011162 f ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0001:00010168 __crt_at_quick_exit 10011168 f ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0001:0001016e __cexit 1001116e f ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0001:00010174 _terminate 10011174 f ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0001:0001017a _QueryPerformanceCounter@4 1001117a f kernel32:KERNEL32.dll
+ 0001:00010180 _GetCurrentProcessId@0 10011180 f kernel32:KERNEL32.dll
+ 0001:00010186 _GetCurrentThreadId@0 10011186 f kernel32:KERNEL32.dll
+ 0001:0001018c _GetSystemTimeAsFileTime@4 1001118c f kernel32:KERNEL32.dll
+ 0001:00010192 _DisableThreadLibraryCalls@4 10011192 f kernel32:KERNEL32.dll
+ 0001:00010198 _InitializeSListHead@4 10011198 f kernel32:KERNEL32.dll
+ 0001:0001019e _IsDebuggerPresent@0 1001119e f kernel32:KERNEL32.dll
+ 0001:000101a4 _UnhandledExceptionFilter@4 100111a4 f kernel32:KERNEL32.dll
+ 0001:000101aa _SetUnhandledExceptionFilter@4 100111aa f kernel32:KERNEL32.dll
+ 0001:000101b0 _GetStartupInfoW@4 100111b0 f kernel32:KERNEL32.dll
+ 0001:000101b6 _IsProcessorFeaturePresent@4 100111b6 f kernel32:KERNEL32.dll
+ 0001:000101bc _GetModuleHandleW@4 100111bc f kernel32:KERNEL32.dll
+ 0001:000101c2 _GetCurrentProcess@0 100111c2 f kernel32:KERNEL32.dll
+ 0001:000101c8 _TerminateProcess@8 100111c8 f kernel32:KERNEL32.dll
+ 0001:000101ce ___acrt_initialize 100111ce f MSVCRT:ucrt_stubs.obj
+ 0001:000101ce ___scrt_stub_for_acrt_initialize 100111ce f MSVCRT:ucrt_stubs.obj
+ 0001:000101ce ___vcrt_initialize 100111ce f MSVCRT:ucrt_stubs.obj
+ 0001:000101d1 ___vcrt_thread_attach 100111d1 f MSVCRT:ucrt_stubs.obj
+ 0001:000101d1 ___acrt_thread_attach 100111d1 f MSVCRT:ucrt_stubs.obj
+ 0001:000101d1 ___scrt_stub_for_acrt_thread_attach 100111d1 f MSVCRT:ucrt_stubs.obj
+ 0001:000101d4 ___scrt_stub_for_acrt_thread_detach 100111d4 f MSVCRT:ucrt_stubs.obj
+ 0001:000101d4 ___vcrt_thread_detach 100111d4 f MSVCRT:ucrt_stubs.obj
+ 0001:000101d4 ___acrt_thread_detach 100111d4 f MSVCRT:ucrt_stubs.obj
+ 0001:000101d7 ___vcrt_uninitialize 100111d7 f MSVCRT:ucrt_stubs.obj
+ 0001:000101d7 ___acrt_uninitialize 100111d7 f MSVCRT:ucrt_stubs.obj
+ 0001:000101d7 ___scrt_stub_for_acrt_uninitialize 100111d7 f MSVCRT:ucrt_stubs.obj
+ 0001:000101da ___acrt_uninitialize_critical 100111da f MSVCRT:ucrt_stubs.obj
+ 0001:000101da ___vcrt_uninitialize_critical 100111da f MSVCRT:ucrt_stubs.obj
+ 0001:000101da ___scrt_stub_for_acrt_uninitialize_critical 100111da f MSVCRT:ucrt_stubs.obj
+ 0001:000101dd __is_c_termination_complete 100111dd f MSVCRT:ucrt_stubs.obj
+ 0001:000101dd ___scrt_stub_for_is_c_termination_complete 100111dd f MSVCRT:ucrt_stubs.obj
+ 0001:000101e0 __alldiv 100111e0 f MSVCRT:lldiv.obj
+ 0001:00010290 __chkstk 10011290 f MSVCRT:chkstk.obj
+ 0001:00010290 __alloca_probe 10011290 f MSVCRT:chkstk.obj
+ 0001:000102be _memcpy 100112be f vcruntime:VCRUNTIME140.dll
+ 0002:00000000 __imp__ReadFile@20 10012000 kernel32:KERNEL32.dll
+ 0002:00000004 __imp__WriteFile@20 10012004 kernel32:KERNEL32.dll
+ 0002:00000008 __imp__CreateFile2@20 10012008 kernel32:KERNEL32.dll
+ 0002:0000000c __imp__MultiByteToWideChar@24 1001200c kernel32:KERNEL32.dll
+ 0002:00000010 __imp__GetLastError@0 10012010 kernel32:KERNEL32.dll
+ 0002:00000014 __imp__CloseHandle@4 10012014 kernel32:KERNEL32.dll
+ 0002:00000018 __imp__SetFilePointerEx@20 10012018 kernel32:KERNEL32.dll
+ 0002:0000001c __imp__GetCurrentProcessId@0 1001201c kernel32:KERNEL32.dll
+ 0002:00000020 __imp__GetCurrentThreadId@0 10012020 kernel32:KERNEL32.dll
+ 0002:00000024 __imp__GetSystemTimeAsFileTime@4 10012024 kernel32:KERNEL32.dll
+ 0002:00000028 __imp__DisableThreadLibraryCalls@4 10012028 kernel32:KERNEL32.dll
+ 0002:0000002c __imp__InitializeSListHead@4 1001202c kernel32:KERNEL32.dll
+ 0002:00000030 __imp__IsDebuggerPresent@0 10012030 kernel32:KERNEL32.dll
+ 0002:00000034 __imp__QueryPerformanceCounter@4 10012034 kernel32:KERNEL32.dll
+ 0002:00000038 __imp__TerminateProcess@8 10012038 kernel32:KERNEL32.dll
+ 0002:0000003c __imp__GetCurrentProcess@0 1001203c kernel32:KERNEL32.dll
+ 0002:00000040 __imp__GetModuleHandleW@4 10012040 kernel32:KERNEL32.dll
+ 0002:00000044 __imp__IsProcessorFeaturePresent@4 10012044 kernel32:KERNEL32.dll
+ 0002:00000048 __imp__GetStartupInfoW@4 10012048 kernel32:KERNEL32.dll
+ 0002:0000004c __imp__SetUnhandledExceptionFilter@4 1001204c kernel32:KERNEL32.dll
+ 0002:00000050 __imp__UnhandledExceptionFilter@4 10012050 kernel32:KERNEL32.dll
+ 0002:00000054 \177KERNEL32_NULL_THUNK_DATA 10012054 kernel32:KERNEL32.dll
+ 0002:00000058 __imp__memset 10012058 vcruntime:VCRUNTIME140.dll
+ 0002:0000005c __imp____std_type_info_destroy_list 1001205c vcruntime:VCRUNTIME140.dll
+ 0002:00000060 __imp____telemetry_main_return_trigger 10012060 vcruntime:VCRUNTIME140.dll
+ 0002:00000064 __imp____telemetry_main_invoke_trigger 10012064 vcruntime:VCRUNTIME140.dll
+ 0002:00000068 __imp__memchr 10012068 vcruntime:VCRUNTIME140.dll
+ 0002:0000006c __imp___except_handler4_common 1001206c vcruntime:VCRUNTIME140.dll
+ 0002:00000070 __imp__memcpy 10012070 vcruntime:VCRUNTIME140.dll
+ 0002:00000074 \177VCRUNTIME140_NULL_THUNK_DATA 10012074 vcruntime:VCRUNTIME140.dll
+ 0002:00000078 __imp__wcstombs 10012078 ucrt:api-ms-win-crt-convert-l1-1-0.dll
+ 0002:0000007c \177api-ms-win-crt-convert-l1-1-0_NULL_THUNK_DATA 1001207c ucrt:api-ms-win-crt-convert-l1-1-0.dll
+ 0002:00000080 __imp__malloc 10012080 ucrt:api-ms-win-crt-heap-l1-1-0.dll
+ 0002:00000084 __imp__free 10012084 ucrt:api-ms-win-crt-heap-l1-1-0.dll
+ 0002:00000088 \177api-ms-win-crt-heap-l1-1-0_NULL_THUNK_DATA 10012088 ucrt:api-ms-win-crt-heap-l1-1-0.dll
+ 0002:0000008c __imp__strerror 1001208c ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0002:00000090 __imp___errno 10012090 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0002:00000094 __imp__terminate 10012094 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0002:00000098 __imp___initterm 10012098 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0002:0000009c __imp___initterm_e 1001209c ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0002:000000a0 __imp___seh_filter_dll 100120a0 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0002:000000a4 __imp___initialize_narrow_environment 100120a4 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0002:000000a8 __imp___initialize_onexit_table 100120a8 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0002:000000ac __imp___register_onexit_function 100120ac ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0002:000000b0 __imp___execute_onexit_table 100120b0 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0002:000000b4 __imp___crt_atexit 100120b4 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0002:000000b8 __imp___crt_at_quick_exit 100120b8 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0002:000000bc __imp___cexit 100120bc ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0002:000000c0 \177api-ms-win-crt-runtime-l1-1-0_NULL_THUNK_DATA 100120c0 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0002:000000c4 __imp___open 100120c4 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:000000c8 __imp___wopen 100120c8 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:000000cc __imp___lseeki64 100120cc ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:000000d0 __imp__fopen 100120d0 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:000000d4 __imp__fread 100120d4 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:000000d8 __imp____stdio_common_vsprintf 100120d8 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:000000dc __imp__ferror 100120dc ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:000000e0 __imp__ftell 100120e0 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:000000e4 __imp___write 100120e4 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:000000e8 __imp___ftelli64 100120e8 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:000000ec __imp__fwrite 100120ec ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:000000f0 __imp___close 100120f0 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:000000f4 __imp___read 100120f4 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:000000f8 __imp__fseek 100120f8 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:000000fc __imp__fclose 100120fc ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:00000100 __imp___fseeki64 10012100 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:00000104 \177api-ms-win-crt-stdio-l1-1-0_NULL_THUNK_DATA 10012104 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:00000108 __imp___time64 10012108 ucrt:api-ms-win-crt-time-l1-1-0.dll
+ 0002:0000010c \177api-ms-win-crt-time-l1-1-0_NULL_THUNK_DATA 1001210c ucrt:api-ms-win-crt-time-l1-1-0.dll
+ 0002:00000110 __imp__srand 10012110 ucrt:api-ms-win-crt-utility-l1-1-0.dll
+ 0002:00000114 __imp__rand 10012114 ucrt:api-ms-win-crt-utility-l1-1-0.dll
+ 0002:00000118 \177api-ms-win-crt-utility-l1-1-0_NULL_THUNK_DATA 10012118 ucrt:api-ms-win-crt-utility-l1-1-0.dll
+ 0002:0000011c ___guard_check_icall_fptr 1001211c MSVCRT:guard_support.obj
+ 0002:00000120 ___xc_a 10012120 MSVCRT:initializers.obj
+ 0002:00000124 ___xc_z 10012124 MSVCRT:initializers.obj
+ 0002:00000128 ___xi_a 10012128 MSVCRT:initializers.obj
+ 0002:0000012c ___xi_z 1001212c MSVCRT:initializers.obj
+ 0002:00000130 ___xp_a 10012130 MSVCRT:initializers.obj
+ 0002:00000134 ___xp_z 10012134 MSVCRT:initializers.obj
+ 0002:00000138 ___xt_a 10012138 MSVCRT:initializers.obj
+ 0002:0000013c ___xt_z 1001213c MSVCRT:initializers.obj
+ 0002:00000140 __pRawDllMain 10012140 MSVCRT:dll_dllmain.obj
+ 0002:00000140 __pDefaultRawDllMain 10012140 MSVCRT:dll_dllmain.obj
+ 0002:0000014c ??_C@_05IAIEPMAK@1?42?48?$AA@ 1001214c compress.obj
+ 0002:00003428 __length_code 10015428 trees.obj
+ 0002:00003528 __dist_code 10015528 trees.obj
+ 0002:00003e68 _unz_copyright 10015e68 unzip.obj
+ 0002:00003ebc _z_errmsg 10015ebc zutil.obj
+ 0002:00003ee4 ??_C@_02DKCKIIND@?$CFs?$AA@ 10015ee4 gzlib.obj
+ 0002:00003ee8 ??_C@_07EBNKNFJN@?$DMfd?3?$CFd?$DO?$AA@ 10015ee8 gzlib.obj
+ 0002:00003ef0 ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@ 10015ef0 gzlib.obj
+ 0002:00003efe ??_C@_00CNPNBAHC@?$AA@ 10015efe gzlib.obj
+ 0002:00003f00 ??_C@_02LMMGGCAJ@?3?5?$AA@ 10015f00 gzlib.obj
+ 0002:00003f04 ??_C@_06DIJPEION@?$CFs?$CFs?$CFs?$AA@ 10015f04 gzlib.obj
+ 0002:00003f0c ??_C@_0BH@CFIIDOJD@unexpected?5end?5of?5file?$AA@ 10015f0c gzread.obj
+ 0002:00003f24 ??_C@_0CH@CPOLIEKA@internal?5error?3?5inflate?5stream?5c@ 10015f24 gzread.obj
+ 0002:00003f4c ??_C@_0BG@HCKBMIHF@compressed?5data?5error?$AA@ 10015f4c gzread.obj
+ 0002:00003f64 ??_C@_0CF@MLPJFDMM@requested?5length?5does?5not?5fit?5in@ 10015f64 gzread.obj
+ 0002:00003f8c ??_C@_0BP@IIKIGMCC@out?5of?5room?5to?5push?5characters?$AA@ 10015f8c gzread.obj
+ 0002:00003fac ??_C@_0CH@DEEGAHIB@internal?5error?3?5deflate?5stream?5c@ 10015fac gzwrite.obj
+ 0002:00003fd4 ??_C@_0BD@PJCBIDD@invalid?5block?5type?$AA@ 10015fd4 infback.obj
+ 0002:00003fe8 ??_C@_0BN@LGAADGOK@invalid?5stored?5block?5lengths?$AA@ 10015fe8 infback.obj
+ 0002:00004008 ??_C@_0CE@GMIGFPBB@too?5many?5length?5or?5distance?5symb@ 10016008 infback.obj
+ 0002:0000402c ??_C@_0BJ@HDEPPGOH@invalid?5code?5lengths?5set?$AA@ 1001602c infback.obj
+ 0002:00004048 ??_C@_0BK@BMMPFBBH@invalid?5bit?5length?5repeat?$AA@ 10016048 infback.obj
+ 0002:00004064 ??_C@_0CF@DGDMADCD@invalid?5code?5?9?9?5missing?5end?9of?9b@ 10016064 infback.obj
+ 0002:0000408c ??_C@_0BM@IIMGAINC@invalid?5literal?1lengths?5set?$AA@ 1001608c infback.obj
+ 0002:000040a8 ??_C@_0BG@GMDFCBGP@invalid?5distances?5set?$AA@ 100160a8 infback.obj
+ 0002:000040c0 ??_C@_0BM@FFFLPBBC@invalid?5literal?1length?5code?$AA@ 100160c0 infback.obj
+ 0002:000040dc ??_C@_0BG@LBKINIKP@invalid?5distance?5code?$AA@ 100160dc infback.obj
+ 0002:000040f4 ??_C@_0BO@ECPMAOGG@invalid?5distance?5too?5far?5back?$AA@ 100160f4 infback.obj
+ 0002:00004114 ??_C@_0BH@LIBMMIGA@incorrect?5header?5check?$AA@ 10016114 inflate.obj
+ 0002:0000412c ??_C@_0BL@IHKGDAEE@unknown?5compression?5method?$AA@ 1001612c inflate.obj
+ 0002:00004148 ??_C@_0BE@EMOGCLGO@invalid?5window?5size?$AA@ 10016148 inflate.obj
+ 0002:0000415c ??_C@_0BJ@BLBBCOMO@unknown?5header?5flags?5set?$AA@ 1001615c inflate.obj
+ 0002:00004178 ??_C@_0BE@GONKLEPM@header?5crc?5mismatch?$AA@ 10016178 inflate.obj
+ 0002:0000418c ??_C@_0BF@MEIGEHBE@incorrect?5data?5check?$AA@ 1001618c inflate.obj
+ 0002:000041a4 ??_C@_0BH@FGKKJGOC@incorrect?5length?5check?$AA@ 100161a4 inflate.obj
+ 0002:000041bc ??_C@_02JDPG@rb?$AA@ 100161bc ioapi.obj
+ 0002:000041c0 ??_C@_03HMFOOINA@r?$CLb?$AA@ 100161c0 ioapi.obj
+ 0002:000041c4 ??_C@_02GMLFBBN@wb?$AA@ 100161c4 ioapi.obj
+ 0002:000041c8 ??_C@_01JOAMLHOP@?9?$AA@ 100161c8 zip.obj
+ 0002:000041cc ??_C@_0BA@MOKMMFOD@need?5dictionary?$AA@ 100161cc zutil.obj
+ 0002:000041dc ??_C@_0L@FNAOCBOG@stream?5end?$AA@ 100161dc zutil.obj
+ 0002:000041e8 ??_C@_0L@KIJFAKBJ@file?5error?$AA@ 100161e8 zutil.obj
+ 0002:000041f4 ??_C@_0N@MKKNPMJD@stream?5error?$AA@ 100161f4 zutil.obj
+ 0002:00004204 ??_C@_0L@HAHMBNLP@data?5error?$AA@ 10016204 zutil.obj
+ 0002:00004210 ??_C@_0BE@OGGJBMCE@insufficient?5memory?$AA@ 10016210 zutil.obj
+ 0002:00004224 ??_C@_0N@DFPGLBGC@buffer?5error?$AA@ 10016224 zutil.obj
+ 0002:00004234 ??_C@_0BF@CJFPCCEG@incompatible?5version?$AA@ 10016234 zutil.obj
+ 0002:000042c0 __load_config_used 100162c0 MSVCRT:loadcfg.obj
+ 0002:00004320 ___safe_se_handler_table 10016320 <linker-defined>
+ 0002:000045f4 ___rtc_iaa 100165f4 MSVCRT:_initsect_.obj
+ 0002:000045f8 ___rtc_izz 100165f8 MSVCRT:_initsect_.obj
+ 0002:000045fc ___rtc_taa 100165fc MSVCRT:_initsect_.obj
+ 0002:00004600 ___rtc_tzz 10016600 MSVCRT:_initsect_.obj
+ 0002:000052d4 __IMPORT_DESCRIPTOR_KERNEL32 100172d4 kernel32:KERNEL32.dll
+ 0002:000052e8 __IMPORT_DESCRIPTOR_VCRUNTIME140 100172e8 vcruntime:VCRUNTIME140.dll
+ 0002:000052fc __IMPORT_DESCRIPTOR_api-ms-win-crt-stdio-l1-1-0 100172fc ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:00005310 __IMPORT_DESCRIPTOR_api-ms-win-crt-convert-l1-1-0 10017310 ucrt:api-ms-win-crt-convert-l1-1-0.dll
+ 0002:00005324 __IMPORT_DESCRIPTOR_api-ms-win-crt-heap-l1-1-0 10017324 ucrt:api-ms-win-crt-heap-l1-1-0.dll
+ 0002:00005338 __IMPORT_DESCRIPTOR_api-ms-win-crt-runtime-l1-1-0 10017338 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0002:0000534c __IMPORT_DESCRIPTOR_api-ms-win-crt-utility-l1-1-0 1001734c ucrt:api-ms-win-crt-utility-l1-1-0.dll
+ 0002:00005360 __IMPORT_DESCRIPTOR_api-ms-win-crt-time-l1-1-0 10017360 ucrt:api-ms-win-crt-time-l1-1-0.dll
+ 0002:00005374 __NULL_IMPORT_DESCRIPTOR 10017374 kernel32:KERNEL32.dll
+ 0003:00000000 ___scrt_native_dllmain_reason 10018000 MSVCRT:utility.obj
+ 0003:00000010 ___isa_enabled 10018010 MSVCRT:_cpu_disp_.obj
+ 0003:00000014 ___security_cookie_complement 10018014 MSVCRT:gs_cookie.obj
+ 0003:00000018 ___security_cookie 10018018 MSVCRT:gs_cookie.obj
+ 0003:0000001c ___scrt_ucrt_dll_is_in_use 1001801c MSVCRT:ucrt_stubs.obj
+ 0003:00000064 ___scrt_current_native_startup_state 10018064 MSVCRT:utility.obj
+ 0003:00000068 ___scrt_native_startup_lock 10018068 MSVCRT:utility.obj
+ 0003:00000088 ?__type_info_root_node@@3U__type_info_node@@A 10018088 MSVCRT:tncleanup.obj
+ 0003:00000090 ?_OptionsStorage@?1??__local_stdio_printf_options@@9@4_KA 10018090 MSVCRT:default_local_stdio_options.obj
+ 0003:00000098 ?_OptionsStorage@?1??__local_stdio_scanf_options@@9@4_KA 10018098 MSVCRT:default_local_stdio_options.obj
+ 0003:000000a0 ___scrt_debugger_hook_flag 100180a0 MSVCRT:utility_desktop.obj
+ 0003:000000a4 ___isa_available 100180a4 MSVCRT:_cpu_disp_.obj
+ 0003:000000a8 ___favor 100180a8 MSVCRT:_cpu_disp_.obj
+ 0003:000003d0 ___dyn_tls_init_callback 100183d0 <common>
+ 0003:000003d8 ?_OptionsStorage@?1??__local_stdio_printf_options@@9@9 100183d8 <common>
+ 0003:000003e0 ?_OptionsStorage@?1??__local_stdio_scanf_options@@9@9 100183e0 <common>
+
+ entry point at 0001:0000f3ea
+
+ Static symbols
+
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-convert-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-heap-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-heap-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 vcruntime:VCRUNTIME140.dll
+ 0000:fffe4000 .debug$S 10000000 vcruntime:VCRUNTIME140.dll
+ 0000:fffe4000 .debug$S 10000000 vcruntime:VCRUNTIME140.dll
+ 0000:fffe4000 .debug$S 10000000 vcruntime:VCRUNTIME140.dll
+ 0000:fffe4000 .debug$S 10000000 vcruntime:VCRUNTIME140.dll
+ 0000:fffe4000 .debug$S 10000000 vcruntime:VCRUNTIME140.dll
+ 0000:fffe4000 .debug$S 10000000 vcruntime:VCRUNTIME140.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-utility-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-utility-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-time-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0000:fffe4000 .debug$S 10000000 zlibwapi.exp
+ 0000:fffe4000 .debug$S 10000000 kernel32:KERNEL32.dll
+ 0001:00000280 _adler32_combine_ 10001280 f adler32.obj
+ 0001:00000490 _crc32_little 10001490 f crc32.obj
+ 0001:00000720 _crc32_big 10001720 f crc32.obj
+ 0001:00000a00 _gf2_matrix_times 10001a00 f crc32.obj
+ 0001:00000a20 _gf2_matrix_square 10001a20 f crc32.obj
+ 0001:00000a60 _crc32_combine_ 10001a60 f crc32.obj
+ 0001:00001380 _putShortMSB 10002380 f deflate.obj
+ 0001:000013b0 _flush_pending 100023b0 f deflate.obj
+ 0001:00001ef0 _read_buf 10002ef0 f deflate.obj
+ 0001:00001f70 _lm_init 10002f70 f deflate.obj
+ 0001:00002020 _longest_match 10003020 f deflate.obj
+ 0001:000021a0 _fill_window 100031a0 f deflate.obj
+ 0001:00002380 _deflate_stored 10003380 f deflate.obj
+ 0001:00002500 _deflate_fast 10003500 f deflate.obj
+ 0001:00002810 _deflate_slow 10003810 f deflate.obj
+ 0001:00002c10 _deflate_rle 10003c10 f deflate.obj
+ 0001:00002eb0 _deflate_huff 10003eb0 f deflate.obj
+ 0001:000030f0 _gz_reset 100040f0 f gzlib.obj
+ 0001:00003150 _gz_open 10004150 f gzlib.obj
+ 0001:000033cc $LN57 100043cc gzlib.obj
+ 0001:000033f8 $LN49 100043f8 gzlib.obj
+ 0001:00003a20 _gz_load 10004a20 f gzread.obj
+ 0001:00003aa0 _gz_avail 10004aa0 f gzread.obj
+ 0001:00003b20 _gz_look 10004b20 f gzread.obj
+ 0001:00003ca0 _gz_decomp 10004ca0 f gzread.obj
+ 0001:00003da0 _gz_fetch 10004da0 f gzread.obj
+ 0001:00003e20 _gz_skip 10004e20 f gzread.obj
+ 0001:00004340 _gz_init 10005340 f gzwrite.obj
+ 0001:00004430 _gz_comp 10005430 f gzwrite.obj
+ 0001:00004570 _gz_zero 10005570 f gzwrite.obj
+ 0001:00004bf0 _fixedtables 10005bf0 f infback.obj
+ 0001:000059c4 $LN507 100069c4 infback.obj
+ 0001:000059e0 $LN473 100069e0 infback.obj
+ 0001:000059f4 $LN508 100069f4 infback.obj
+ 0001:00006150 _fixedtables 10007150 f inflate.obj
+ 0001:00006170 _updatewindow 10007170 f inflate.obj
+ 0001:000078ac $LN935 100088ac inflate.obj
+ 0001:00007928 $LN936 10008928 inflate.obj
+ 0001:00007ae0 _syncsearch 10008ae0 f inflate.obj
+ 0001:000083a0 _fopen_file_func 100093a0 f ioapi.obj
+ 0001:000083f0 _fopen64_file_func 100093f0 f ioapi.obj
+ 0001:00008440 _fread_file_func 10009440 f ioapi.obj
+ 0001:00008460 _fwrite_file_func 10009460 f ioapi.obj
+ 0001:00008480 _ftell_file_func 10009480 f ioapi.obj
+ 0001:000084a0 _ftell64_file_func 100094a0 f ioapi.obj
+ 0001:000084c0 _fseek_file_func 100094c0 f ioapi.obj
+ 0001:00008510 _fseek64_file_func 10009510 f ioapi.obj
+ 0001:00008560 _fclose_file_func 10009560 f ioapi.obj
+ 0001:00008580 _ferror_file_func 10009580 f ioapi.obj
+ 0001:000085e0 _win32_translate_open_mode 100095e0 f iowin32.obj
+ 0001:00008650 _win32_build_iowin 10009650 f iowin32.obj
+ 0001:000088d0 _MySetFilePointerEx 100098d0 f iowin32.obj
+ 0001:00008bf0 _tr_static_init 10009bf0 f trees.obj
+ 0001:00008c60 _init_block 10009c60 f trees.obj
+ 0001:00008cf0 _pqdownheap 10009cf0 f trees.obj
+ 0001:00008dd0 _gen_bitlen 10009dd0 f trees.obj
+ 0001:00008fe0 _gen_codes 10009fe0 f trees.obj
+ 0001:00009050 _build_tree 1000a050 f trees.obj
+ 0001:00009260 _scan_tree 1000a260 f trees.obj
+ 0001:00009350 _send_tree 1000a350 f trees.obj
+ 0001:00009870 _build_bl_tree 1000a870 f trees.obj
+ 0001:00009950 _send_all_trees 1000a950 f trees.obj
+ 0001:00009f40 _compress_block 1000af40 f trees.obj
+ 0001:0000a340 _detect_data_type 1000b340 f trees.obj
+ 0001:0000a3b0 _bi_reverse 1000b3b0 f trees.obj
+ 0001:0000a3d0 _bi_flush 1000b3d0 f trees.obj
+ 0001:0000a450 _bi_windup 1000b450 f trees.obj
+ 0001:0000a4b0 _copy_block 1000b4b0 f trees.obj
+ 0001:0000a5e0 _unz64local_getByte 1000b5e0 f unzip.obj
+ 0001:0000a630 _unz64local_getShort 1000b630 f unzip.obj
+ 0001:0000a6a0 _unz64local_getLong 1000b6a0 f unzip.obj
+ 0001:0000a750 _unz64local_getLong64 1000b750 f unzip.obj
+ 0001:0000a8c0 _strcmpcasenosensitive_internal 1000b8c0 f unzip.obj
+ 0001:0000a960 _unz64local_SearchCentralDir 1000b960 f unzip.obj
+ 0001:0000ab10 _unz64local_SearchCentralDir64 1000bb10 f unzip.obj
+ 0001:0000ada0 _unzOpenInternal 1000bda0 f unzip.obj
+ 0001:0000b350 _unz64local_DosDateToTmuDate 1000c350 f unzip.obj
+ 0001:0000b3d0 _unz64local_GetCurrentFileInfoInternal 1000c3d0 f unzip.obj
+ 0001:0000be90 _unz64local_CheckCurrentFileCoherencyHeader 1000ce90 f unzip.obj
+ 0001:0000c950 _time 1000d950 f zip.obj
+ 0001:0000c960 _decrypt_byte 1000d960 f zip.obj
+ 0001:0000c980 _update_keys 1000d980 f zip.obj
+ 0001:0000c9d0 _init_keys 1000d9d0 f zip.obj
+ 0001:0000ca20 _crypthead 1000da20 f zip.obj
+ 0001:0000cb50 _allocate_new_datablock 1000db50 f zip.obj
+ 0001:0000cb80 _free_datablock 1000db80 f zip.obj
+ 0001:0000cbb0 _init_linkedlist 1000dbb0 f zip.obj
+ 0001:0000cbc0 _free_linkedlist 1000dbc0 f zip.obj
+ 0001:0000cbe0 _add_data_in_datablock 1000dbe0 f zip.obj
+ 0001:0000cc90 _zip64local_putValue 1000dc90 f zip.obj
+ 0001:0000cd10 _zip64local_putValue_inmemory 1000dd10 f zip.obj
+ 0001:0000cd50 _zip64local_TmzDateToDosDate 1000dd50 f zip.obj
+ 0001:0000cda0 _zip64local_getByte 1000dda0 f zip.obj
+ 0001:0000cdf0 _zip64local_getShort 1000ddf0 f zip.obj
+ 0001:0000ce60 _zip64local_getLong 1000de60 f zip.obj
+ 0001:0000cf10 _zip64local_getLong64 1000df10 f zip.obj
+ 0001:0000d080 _zip64local_SearchCentralDir 1000e080 f zip.obj
+ 0001:0000d230 _zip64local_SearchCentralDir64 1000e230 f zip.obj
+ 0001:0000e460 _zip64FlushWriteBuffer 1000f460 f zip.obj
+ 0001:0000f0cc ?dllmain_crt_dispatch@@YGHQAUHINSTANCE__@@KQAX@Z 100100cc f MSVCRT:dll_dllmain.obj
+ 0001:0000f11f ?dllmain_crt_process_attach@@YAHQAUHINSTANCE__@@QAX@Z 1001011f f MSVCRT:dll_dllmain.obj
+ 0001:0000f231 ?dllmain_crt_process_detach@@YAH_N@Z 10010231 f MSVCRT:dll_dllmain.obj
+ 0001:0000f2ae ?dllmain_dispatch@@YAHQAUHINSTANCE__@@KQAX@Z 100102ae f MSVCRT:dll_dllmain.obj
+ 0001:0000f3b7 ?dllmain_raw@@YGHQAUHINSTANCE__@@KQAX@Z 100103b7 f MSVCRT:dll_dllmain.obj
+ 0001:0000f44b ?find_pe_section@@YAPAU_IMAGE_SECTION_HEADER@@QAEI@Z 1001044b f MSVCRT:utility.obj
+ 0001:0000f48f ?is_potentially_valid_image_base@@YA_NQAX@Z 1001048f f MSVCRT:utility.obj
+ 0001:0000fb20 $$000000 10010b20 MSVCRT:_sehprolg4_.obj
+ 0001:000101e0 $$000000 100111e0 MSVCRT:lldiv.obj
+ 0001:00010290 $$000000 10011290 MSVCRT:chkstk.obj
+ 0002:00000144 _GS_ExceptionPointers 10012144 MSVCRT:gs_report.obj
+ 0002:00000158 _crc_table 10012158 crc32.obj
+ 0002:00002158 ?my_version@?1??deflateInit2_@@9@9 10014158 deflate.obj
+ 0002:00002160 _configuration_table 10014160 deflate.obj
+ 0002:000021d8 ?lenfix@?1??fixedtables@@9@9 100141d8 infback.obj
+ 0002:000029d8 ?distfix@?1??fixedtables@@9@9 100149d8 infback.obj
+ 0002:00002a58 ?order@?1??inflateBack@@9@9 10014a58 infback.obj
+ 0002:00002a80 ?lenfix@?1??fixedtables@@9@9 10014a80 inflate.obj
+ 0002:00003280 ?distfix@?1??fixedtables@@9@9 10015280 inflate.obj
+ 0002:00003300 ?order@?1??inflate@@9@9 10015300 inflate.obj
+ 0002:00003328 ?dext@?1??inflate_table@@9@9 10015328 inftrees.obj
+ 0002:00003368 ?lext@?1??inflate_table@@9@9 10015368 inftrees.obj
+ 0002:000033a8 ?lbase@?1??inflate_table@@9@9 100153a8 inftrees.obj
+ 0002:000033e8 ?dbase@?1??inflate_table@@9@9 100153e8 inftrees.obj
+ 0002:00003728 _static_dtree 10015728 trees.obj
+ 0002:000037a0 _extra_blbits 100157a0 trees.obj
+ 0002:000037f0 _extra_lbits 100157f0 trees.obj
+ 0002:00003868 _base_dist 10015868 trees.obj
+ 0002:000038e0 _base_length 100158e0 trees.obj
+ 0002:00003958 _extra_dbits 10015958 trees.obj
+ 0002:000039d0 _static_ltree 100159d0 trees.obj
+ 0002:00003e50 _bl_order 10015e50 trees.obj
+ 0002:00004608 __sehtable$?dllmain_crt_process_attach@@YAHQAUHINSTANCE__@@QAX@Z 10016608 MSVCRT:dll_dllmain.obj
+ 0002:00004628 __sehtable$?dllmain_crt_process_detach@@YAH_N@Z 10016628 MSVCRT:dll_dllmain.obj
+ 0002:00004648 __sehtable$?dllmain_dispatch@@YAHQAUHINSTANCE__@@KQAX@Z 10016648 MSVCRT:dll_dllmain.obj
+ 0002:00004668 __sehtable$___scrt_is_nonwritable_in_current_image 10016668 MSVCRT:utility.obj
+ 0002:00004690 .edata 10016690 zlibwapi.exp
+ 0002:000046b8 rgpv 100166b8 zlibwapi.exp
+ 0002:00004954 rgszName 10016954 zlibwapi.exp
+ 0002:00004b38 rgwOrd 10016b38 zlibwapi.exp
+ 0002:00004c2a szName 10016c2a zlibwapi.exp
+ 0002:00004c37 $N00001 10016c37 zlibwapi.exp
+ 0002:00004c3f $N00140 10016c3f zlibwapi.exp
+ 0002:00004c4f $N00039 10016c4f zlibwapi.exp
+ 0002:00004c59 $N00002 10016c59 zlibwapi.exp
+ 0002:00004c62 $N00046 10016c62 zlibwapi.exp
+ 0002:00004c70 $N00003 10016c70 zlibwapi.exp
+ 0002:00004c76 $N00142 10016c76 zlibwapi.exp
+ 0002:00004c84 $N00004 10016c84 zlibwapi.exp
+ 0002:00004c8c $N00047 10016c8c zlibwapi.exp
+ 0002:00004c99 $N00005 10016c99 zlibwapi.exp
+ 0002:00004ca5 $N00006 10016ca5 zlibwapi.exp
+ 0002:00004cb0 $N00007 10016cb0 zlibwapi.exp
+ 0002:00004cbe $N00008 10016cbe zlibwapi.exp
+ 0002:00004ccb $N00009 10016ccb zlibwapi.exp
+ 0002:00004cd9 $N00052 10016cd9 zlibwapi.exp
+ 0002:00004ce8 $N00051 10016ce8 zlibwapi.exp
+ 0002:00004cf5 $N00010 10016cf5 zlibwapi.exp
+ 0002:00004d02 $N00164 10016d02 zlibwapi.exp
+ 0002:00004d13 $N00011 10016d13 zlibwapi.exp
+ 0002:00004d28 $N00144 10016d28 zlibwapi.exp
+ 0002:00004d39 $N00145 10016d39 zlibwapi.exp
+ 0002:00004d45 $N00110 10016d45 zlibwapi.exp
+ 0002:00004d59 $N00111 10016d59 zlibwapi.exp
+ 0002:00004d6f $N00112 10016d6f zlibwapi.exp
+ 0002:00004d86 $N00113 10016d86 zlibwapi.exp
+ 0002:00004d9d $N00038 10016d9d zlibwapi.exp
+ 0002:00004dab $N00146 10016dab zlibwapi.exp
+ 0002:00004db4 $N00048 10016db4 zlibwapi.exp
+ 0002:00004dbf $N00012 10016dbf zlibwapi.exp
+ 0002:00004dc7 $N00147 10016dc7 zlibwapi.exp
+ 0002:00004dd1 $N00148 10016dd1 zlibwapi.exp
+ 0002:00004ddb $N00149 10016ddb zlibwapi.exp
+ 0002:00004de4 $N00013 10016de4 zlibwapi.exp
+ 0002:00004dec $N00034 10016dec zlibwapi.exp
+ 0002:00004df2 $N00014 10016df2 zlibwapi.exp
+ 0002:00004dfa $N00015 10016dfa zlibwapi.exp
+ 0002:00004e02 $N00030 10016e02 zlibwapi.exp
+ 0002:00004e09 $N00161 10016e09 zlibwapi.exp
+ 0002:00004e11 $N00041 10016e11 zlibwapi.exp
+ 0002:00004e18 $N00150 10016e18 zlibwapi.exp
+ 0002:00004e21 $N00016 10016e21 zlibwapi.exp
+ 0002:00004e28 $N00165 10016e28 zlibwapi.exp
+ 0002:00004e31 $N00028 10016e31 zlibwapi.exp
+ 0002:00004e3a $N00029 10016e3a zlibwapi.exp
+ 0002:00004e41 $N00040 10016e41 zlibwapi.exp
+ 0002:00004e48 $N00017 10016e48 zlibwapi.exp
+ 0002:00004e4f $N00032 10016e4f zlibwapi.exp
+ 0002:00004e58 $N00031 10016e58 zlibwapi.exp
+ 0002:00004e5f $N00035 10016e5f zlibwapi.exp
+ 0002:00004e6b $N00033 10016e6b zlibwapi.exp
+ 0002:00004e72 $N00049 10016e72 zlibwapi.exp
+ 0002:00004e7b $N00167 10016e7b zlibwapi.exp
+ 0002:00004e85 $N00018 10016e85 zlibwapi.exp
+ 0002:00004e8d $N00019 10016e8d zlibwapi.exp
+ 0002:00004e95 $N00044 10016e95 zlibwapi.exp
+ 0002:00004ea1 $N00045 10016ea1 zlibwapi.exp
+ 0002:00004eb0 $N00043 10016eb0 zlibwapi.exp
+ 0002:00004ec1 $N00042 10016ec1 zlibwapi.exp
+ 0002:00004ecd $N00020 10016ecd zlibwapi.exp
+ 0002:00004ed8 $N00166 10016ed8 zlibwapi.exp
+ 0002:00004eed $N00156 10016eed zlibwapi.exp
+ 0002:00004efe $N00021 10016efe zlibwapi.exp
+ 0002:00004f0c $N00022 10016f0c zlibwapi.exp
+ 0002:00004f19 $N00157 10016f19 zlibwapi.exp
+ 0002:00004f25 $N00158 10016f25 zlibwapi.exp
+ 0002:00004f32 $N00159 10016f32 zlibwapi.exp
+ 0002:00004f40 $N00023 10016f40 zlibwapi.exp
+ 0002:00004f4d $N00163 10016f4d zlibwapi.exp
+ 0002:00004f5e $N00024 10016f5e zlibwapi.exp
+ 0002:00004f73 $N00025 10016f73 zlibwapi.exp
+ 0002:00004f7f $N00037 10016f7f zlibwapi.exp
+ 0002:00004f90 $N00160 10016f90 zlibwapi.exp
+ 0002:00004fa1 $N00026 10016fa1 zlibwapi.exp
+ 0002:00004fac $N00062 10016fac zlibwapi.exp
+ 0002:00004fb5 $N00072 10016fb5 zlibwapi.exp
+ 0002:00004fc9 $N00124 10016fc9 zlibwapi.exp
+ 0002:00004fe1 $N00064 10016fe1 zlibwapi.exp
+ 0002:00004ff7 $N00125 10016ff7 zlibwapi.exp
+ 0002:00005015 $N00127 10017015 zlibwapi.exp
+ 0002:00005025 $N00100 10017025 zlibwapi.exp
+ 0002:00005033 $N00073 10017033 zlibwapi.exp
+ 0002:00005047 $N00122 10017047 zlibwapi.exp
+ 0002:0000505a $N00063 1001705a zlibwapi.exp
+ 0002:0000506b $N00076 1001706b zlibwapi.exp
+ 0002:00005081 $N00128 10017081 zlibwapi.exp
+ 0002:00005092 $N00101 10017092 zlibwapi.exp
+ 0002:000050a1 $N00065 100170a1 zlibwapi.exp
+ 0002:000050b2 $N00066 100170b2 zlibwapi.exp
+ 0002:000050c2 $N00075 100170c2 zlibwapi.exp
+ 0002:000050d0 $N00077 100170d0 zlibwapi.exp
+ 0002:000050d9 $N00121 100170d9 zlibwapi.exp
+ 0002:000050e5 $N00120 100170e5 zlibwapi.exp
+ 0002:000050ef $N00061 100170ef zlibwapi.exp
+ 0002:000050f7 $N00078 100170f7 zlibwapi.exp
+ 0002:0000510b $N00069 1001710b zlibwapi.exp
+ 0002:0000511f $N00067 1001711f zlibwapi.exp
+ 0002:00005132 $N00079 10017132 zlibwapi.exp
+ 0002:0000514d $N00068 1001714d zlibwapi.exp
+ 0002:00005160 $N00074 10017160 zlibwapi.exp
+ 0002:00005179 $N00071 10017179 zlibwapi.exp
+ 0002:00005180 $N00126 10017180 zlibwapi.exp
+ 0002:0000518a $N00070 1001718a zlibwapi.exp
+ 0002:00005192 $N00036 10017192 zlibwapi.exp
+ 0002:00005199 $N00084 10017199 zlibwapi.exp
+ 0002:000051a2 $N00083 100171a2 zlibwapi.exp
+ 0002:000051b4 $N00136 100171b4 zlibwapi.exp
+ 0002:000051cb $N00087 100171cb zlibwapi.exp
+ 0002:000051e0 $N00088 100171e0 zlibwapi.exp
+ 0002:000051e9 $N00131 100171e9 zlibwapi.exp
+ 0002:000051f5 $N00130 100171f5 zlibwapi.exp
+ 0002:000051ff $N00080 100171ff zlibwapi.exp
+ 0002:00005207 $N00086 10017207 zlibwapi.exp
+ 0002:0000521c $N00133 1001721c zlibwapi.exp
+ 0002:00005234 $N00089 10017234 zlibwapi.exp
+ 0002:00005249 $N00134 10017249 zlibwapi.exp
+ 0002:00005261 $N00135 10017261 zlibwapi.exp
+ 0002:00005279 $N00132 10017279 zlibwapi.exp
+ 0002:0000528f $N00081 1001728f zlibwapi.exp
+ 0002:000052a3 $N00082 100172a3 zlibwapi.exp
+ 0002:000052b7 $N00050 100172b7 zlibwapi.exp
+ 0002:000052c8 $N00027 100172c8 zlibwapi.exp
+ 0002:00005512 .idata$6 10017512 kernel32:KERNEL32.dll
+ 0002:000055b2 .idata$6 100175b2 vcruntime:VCRUNTIME140.dll
+ 0002:00005794 .idata$6 10017794 ucrt:api-ms-win-crt-stdio-l1-1-0.dll
+ 0002:000057b4 .idata$6 100177b4 ucrt:api-ms-win-crt-convert-l1-1-0.dll
+ 0002:000057d6 .idata$6 100177d6 ucrt:api-ms-win-crt-heap-l1-1-0.dll
+ 0002:000057f6 .idata$6 100177f6 ucrt:api-ms-win-crt-runtime-l1-1-0.dll
+ 0002:00005818 .idata$6 10017818 ucrt:api-ms-win-crt-utility-l1-1-0.dll
+ 0002:0000583a .idata$6 1001783a ucrt:api-ms-win-crt-time-l1-1-0.dll
+ 0003:00000020 _static_l_desc 10018020 trees.obj
+ 0003:00000034 _static_bl_desc 10018034 trees.obj
+ 0003:00000048 _static_d_desc 10018048 trees.obj
+ 0003:00000060 ?__proc_attached@@3HA 10018060 MSVCRT:dll_dllmain.obj
+ 0003:0000006c ?module_local_atexit_table@@3U_onexit_table_t@@A 1001806c MSVCRT:utility.obj
+ 0003:00000078 ?module_local_at_quick_exit_table@@3U_onexit_table_t@@A 10018078 MSVCRT:utility.obj
+ 0003:00000084 ?is_initialized_as_dll@@3_NA 10018084 MSVCRT:utility.obj
+ 0003:000000b0 _GS_ExceptionRecord 100180b0 MSVCRT:gs_report.obj
+ 0003:00000100 _GS_ContextRecord 10018100 MSVCRT:gs_report.obj
+ 0003:000003cc ?calls@?1??crypthead@@9@9 100183cc zip.obj
+ 0004:00000000 __guard_fids_?dllmain_crt_process_attach@@YAHQAUHINSTANCE__@@QAX@Z 10019000 MSVCRT:dll_dllmain.obj
+ 0004:00000008 __guard_fids_?dllmain_dispatch@@YAHQAUHINSTANCE__@@KQAX@Z 10019008 MSVCRT:dll_dllmain.obj
+ 0004:0000000c __guard_fids____scrt_set_unhandled_exception_filter 1001900c MSVCRT:utility_desktop.obj
+ 0004:00000010 __guard_fids___except_handler4 10019010 MSVCRT:_chandler4gs_.obj
+ 0004:00000014 __guard_fids__ 10019014 MSVCRT:guard_support.obj
+ 0004:00000018 __guard_fids___guard_icall_checks_enforced 10019018 MSVCRT:guard_support.obj
+ 0005:00000060 $R000000 1001a060 zlib.res
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.pdb b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.pdb
new file mode 100644
index 0000000000..1b761c6def
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibDllReleaseWithoutAsm/zlibwapi.pdb
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/adler32.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/adler32.obj
new file mode 100644
index 0000000000..28048bddb8
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/adler32.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/compress.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/compress.obj
new file mode 100644
index 0000000000..09ee24ce1b
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/compress.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/crc32.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/crc32.obj
new file mode 100644
index 0000000000..e29cab3751
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/crc32.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/deflate.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/deflate.obj
new file mode 100644
index 0000000000..753e7a3b17
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/deflate.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/gzclose.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/gzclose.obj
new file mode 100644
index 0000000000..16f1e5671e
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/gzclose.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/gzlib.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/gzlib.obj
new file mode 100644
index 0000000000..fe61c42d3a
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/gzlib.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/gzread.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/gzread.obj
new file mode 100644
index 0000000000..3de52c1f07
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/gzread.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/gzwrite.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/gzwrite.obj
new file mode 100644
index 0000000000..e101adcd41
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/gzwrite.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/infback.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/infback.obj
new file mode 100644
index 0000000000..aeac887736
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/infback.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/inffast.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/inffast.obj
new file mode 100644
index 0000000000..a40ec6ef5f
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/inffast.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/inflate.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/inflate.obj
new file mode 100644
index 0000000000..75fa823409
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/inflate.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/inftrees.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/inftrees.obj
new file mode 100644
index 0000000000..6bb4e5657f
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/inftrees.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/ioapi.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/ioapi.obj
new file mode 100644
index 0000000000..b2f7d0f915
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/ioapi.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/trees.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/trees.obj
new file mode 100644
index 0000000000..ac4a582bcf
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/trees.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/uncompr.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/uncompr.obj
new file mode 100644
index 0000000000..f8785d912d
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/uncompr.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/unzip.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/unzip.obj
new file mode 100644
index 0000000000..321b3c6ff9
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/unzip.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zip.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zip.obj
new file mode 100644
index 0000000000..fa24aa117e
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zip.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlib.res b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlib.res
new file mode 100644
index 0000000000..9316316bcc
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlib.res
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.Build.CppClean.log b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.Build.CppClean.log
new file mode 100644
index 0000000000..b05585d142
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.Build.CppClean.log
@@ -0,0 +1,30 @@
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\zlibstat.pdb
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\zutil.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\zip.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\unzip.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\uncompr.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\trees.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\ioapi.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\inftrees.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\inflate.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\inffast.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\infback.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\gzwrite.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\gzread.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\gzlib.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\gzclose.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\deflate.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\crc32.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\compress.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\adler32.obj
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\zlibstat.lib
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\zlib.res
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\zlibstat.tlog\cl.command.1.tlog
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\zlibstat.tlog\cl.read.1.tlog
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\zlibstat.tlog\cl.write.1.tlog
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\zlibstat.tlog\lib-link-cvtres.read.1.tlog
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\zlibstat.tlog\lib-link-cvtres.write.1.tlog
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\zlibstat.tlog\lib.command.1.tlog
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\zlibstat.tlog\rc.command.1.tlog
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\zlibstat.tlog\rc.read.1.tlog
+d:\downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\zlibstatreleasewithoutasm\tmp\zlibstat.tlog\rc.write.1.tlog
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.log b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.log
new file mode 100644
index 0000000000..86a2e30a4b
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.log
@@ -0,0 +1,20 @@
+ adler32.c
+ compress.c
+ crc32.c
+ deflate.c
+ gzclose.c
+ gzlib.c
+ gzread.c
+ gzwrite.c
+ infback.c
+ inffast.c
+ inflate.c
+ inftrees.c
+ ioapi.c
+ trees.c
+ uncompr.c
+ unzip.c
+ zip.c
+ zutil.c
+ Generating Code...
+ zlibstat.vcxproj -> d:\Downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\x86\ZlibStatReleaseWithoutAsm\zlibstat.lib
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/CL.command.1.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/CL.command.1.tlog
new file mode 100644
index 0000000000..b0ebd1c83e
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/CL.command.1.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/CL.read.1.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/CL.read.1.tlog
new file mode 100644
index 0000000000..f687971e81
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/CL.read.1.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/CL.write.1.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/CL.write.1.tlog
new file mode 100644
index 0000000000..1aebb19db8
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/CL.write.1.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/Lib-link-cvtres.read.1.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/Lib-link-cvtres.read.1.tlog
new file mode 100644
index 0000000000..534e06f08f
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/Lib-link-cvtres.read.1.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/Lib-link-cvtres.write.1.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/Lib-link-cvtres.write.1.tlog
new file mode 100644
index 0000000000..8f40ed4d2a
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/Lib-link-cvtres.write.1.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/lib.command.1.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/lib.command.1.tlog
new file mode 100644
index 0000000000..4e43961448
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/lib.command.1.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/rc.command.1.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/rc.command.1.tlog
new file mode 100644
index 0000000000..21e6f0f15e
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/rc.command.1.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/rc.read.1.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/rc.read.1.tlog
new file mode 100644
index 0000000000..1d1629b28b
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/rc.read.1.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/rc.write.1.tlog b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/rc.write.1.tlog
new file mode 100644
index 0000000000..5e477b9e82
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/rc.write.1.tlog
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/zlibstat.lastbuildstate b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/zlibstat.lastbuildstate
new file mode 100644
index 0000000000..2b818f9515
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zlibstat.tlog/zlibstat.lastbuildstate
@@ -0,0 +1,2 @@
+#TargetFrameworkVersion=v4.0:PlatformToolSet=v140:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=8.1
+ReleaseWithoutAsm|Win32|D:\Downloads\tgl-master\tgl-master\zlib\contrib\vstudio\vc11\|
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zutil.obj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zutil.obj
new file mode 100644
index 0000000000..482129e1fa
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/Tmp/zutil.obj
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/zlibstat.lib b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/zlibstat.lib
new file mode 100644
index 0000000000..0cc7de9a07
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/zlibstat.lib
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/zlibstat.pdb b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/zlibstat.pdb
new file mode 100644
index 0000000000..ed0c0fb3c9
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/x86/ZlibStatReleaseWithoutAsm/zlibstat.pdb
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlib.rc b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlib.rc
new file mode 100644
index 0000000000..73f6476d60
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlib.rc
@@ -0,0 +1,32 @@
+#include <windows.h>
+
+#define IDR_VERSION1 1
+IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
+ FILEVERSION 1,2,8,0
+ PRODUCTVERSION 1,2,8,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.2.8\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-2013 Jean-loup Gailly & Mark Adler\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x0409, 1252
+ END
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlibstat.vcxproj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlibstat.vcxproj
new file mode 100644
index 0000000000..9864a4c289
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlibstat.vcxproj
@@ -0,0 +1,465 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Itanium">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Win32">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|x64">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}</ProjectGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>OldStyle</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <CompileAs>CompileAsC</CompileAs>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>OldStyle</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>OldStyle</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c" />
+ <ClCompile Include="..\..\..\compress.c" />
+ <ClCompile Include="..\..\..\crc32.c" />
+ <ClCompile Include="..\..\..\deflate.c" />
+ <ClCompile Include="..\..\..\gzclose.c" />
+ <ClCompile Include="..\..\..\gzlib.c" />
+ <ClCompile Include="..\..\..\gzread.c" />
+ <ClCompile Include="..\..\..\gzwrite.c" />
+ <ClCompile Include="..\..\..\infback.c" />
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c" />
+ <ClCompile Include="..\..\..\inflate.c" />
+ <ClCompile Include="..\..\..\inftrees.c" />
+ <ClCompile Include="..\..\minizip\ioapi.c" />
+ <ClCompile Include="..\..\..\trees.c" />
+ <ClCompile Include="..\..\..\uncompr.c" />
+ <ClCompile Include="..\..\minizip\unzip.c" />
+ <ClCompile Include="..\..\minizip\zip.c" />
+ <ClCompile Include="..\..\..\zutil.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="zlib.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="zlibvc.def" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlibvc.def b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlibvc.def
new file mode 100644
index 0000000000..88f37bf6e7
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlibvc.def
@@ -0,0 +1,143 @@
+LIBRARY
+; zlib data compression and ZIP file I/O library
+
+;VERSION 1.2.8
+
+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
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlibvc.sln b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlibvc.sln
new file mode 100644
index 0000000000..9fcbafdd02
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlibvc.vcxproj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlibvc.vcxproj
new file mode 100644
index 0000000000..47e61d2a53
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc11/zlibvc.vcxproj
@@ -0,0 +1,689 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Itanium">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Win32">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|x64">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{8FD826F8-3739-44E6-8CC8-997122E53B8D}</ProjectGuid>
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">zlibwapi</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">zlibwapi</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">zlibwapi</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">zlibwapi</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">zlibwapi</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">zlibwapi</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ </Link>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx86
+bld_ml32.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ </Link>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx86
+bld_ml32.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ <PreBuildEvent>
+ <Command>cd ..\..\contrib\masmx64
+bld_ml64.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx64
+bld_ml64.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c" />
+ <ClCompile Include="..\..\..\compress.c" />
+ <ClCompile Include="..\..\..\crc32.c" />
+ <ClCompile Include="..\..\..\deflate.c" />
+ <ClCompile Include="..\..\..\gzclose.c" />
+ <ClCompile Include="..\..\..\gzlib.c" />
+ <ClCompile Include="..\..\..\gzread.c" />
+ <ClCompile Include="..\..\..\gzwrite.c" />
+ <ClCompile Include="..\..\..\infback.c" />
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c" />
+ <ClCompile Include="..\..\..\inflate.c" />
+ <ClCompile Include="..\..\..\inftrees.c" />
+ <ClCompile Include="..\..\minizip\ioapi.c" />
+ <ClCompile Include="..\..\minizip\iowin32.c" />
+ <ClCompile Include="..\..\..\trees.c" />
+ <ClCompile Include="..\..\..\uncompr.c" />
+ <ClCompile Include="..\..\minizip\unzip.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\zip.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\..\..\zutil.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="zlib.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="zlibvc.def" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\deflate.h" />
+ <ClInclude Include="..\..\..\infblock.h" />
+ <ClInclude Include="..\..\..\infcodes.h" />
+ <ClInclude Include="..\..\..\inffast.h" />
+ <ClInclude Include="..\..\..\inftrees.h" />
+ <ClInclude Include="..\..\..\infutil.h" />
+ <ClInclude Include="..\..\..\zconf.h" />
+ <ClInclude Include="..\..\..\zlib.h" />
+ <ClInclude Include="..\..\..\zutil.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/miniunz.vcproj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/miniunz.vcproj
new file mode 100644
index 0000000000..7da32b91ea
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/miniunz.vcproj
@@ -0,0 +1,565 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="miniunz"
+ ProjectGUID="{C52F9E7B-498A-42BE-8DB4-85A15694382A}"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ <Platform
+ Name="Itanium"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="x86\MiniUnzip$(ConfigurationName)"
+ IntermediateDirectory="x86\MiniUnzip$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x86\ZlibDllDebug\zlibwapi.lib"
+ OutputFile="$(OutDir)/miniunz.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/miniunz.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="x86\MiniUnzip$(ConfigurationName)"
+ IntermediateDirectory="x86\MiniUnzip$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x86\ZlibDllRelease\zlibwapi.lib"
+ OutputFile="$(OutDir)/miniunz.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="x64\MiniUnzip$(ConfigurationName)"
+ IntermediateDirectory="x64\MiniUnzip$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x64\ZlibDllDebug\zlibwapi.lib"
+ OutputFile="$(OutDir)/miniunz.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/miniunz.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Itanium"
+ OutputDirectory="ia64\MiniUnzip$(ConfigurationName)"
+ IntermediateDirectory="ia64\MiniUnzip$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="ia64\ZlibDllDebug\zlibwapi.lib"
+ OutputFile="$(OutDir)/miniunz.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/miniunz.pdb"
+ SubSystem="1"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="x64\MiniUnzip$(ConfigurationName)"
+ IntermediateDirectory="x64\MiniUnzip$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x64\ZlibDllRelease\zlibwapi.lib"
+ OutputFile="$(OutDir)/miniunz.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Itanium"
+ OutputDirectory="ia64\MiniUnzip$(ConfigurationName)"
+ IntermediateDirectory="ia64\MiniUnzip$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="ia64\ZlibDllRelease\zlibwapi.lib"
+ OutputFile="$(OutDir)/miniunz.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
+ >
+ <File
+ RelativePath="..\..\minizip\miniunz.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/minizip.vcproj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/minizip.vcproj
new file mode 100644
index 0000000000..e57e07d90c
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/minizip.vcproj
@@ -0,0 +1,562 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="minizip"
+ ProjectGUID="{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ <Platform
+ Name="Itanium"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="x86\MiniZip$(ConfigurationName)"
+ IntermediateDirectory="x86\MiniZip$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x86\ZlibDllDebug\zlibwapi.lib"
+ OutputFile="$(OutDir)/minizip.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/minizip.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="x86\MiniZip$(ConfigurationName)"
+ IntermediateDirectory="x86\MiniZip$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x86\ZlibDllRelease\zlibwapi.lib"
+ OutputFile="$(OutDir)/minizip.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="x64\$(ConfigurationName)"
+ IntermediateDirectory="x64\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x64\ZlibDllDebug\zlibwapi.lib"
+ OutputFile="$(OutDir)/minizip.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/minizip.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Itanium"
+ OutputDirectory="ia64\$(ConfigurationName)"
+ IntermediateDirectory="ia64\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="ia64\ZlibDllDebug\zlibwapi.lib"
+ OutputFile="$(OutDir)/minizip.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/minizip.pdb"
+ SubSystem="1"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="x64\$(ConfigurationName)"
+ IntermediateDirectory="x64\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x64\ZlibDllRelease\zlibwapi.lib"
+ OutputFile="$(OutDir)/minizip.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Itanium"
+ OutputDirectory="ia64\$(ConfigurationName)"
+ IntermediateDirectory="ia64\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="ia64\ZlibDllRelease\zlibwapi.lib"
+ OutputFile="$(OutDir)/minizip.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
+ >
+ <File
+ RelativePath="..\..\minizip\minizip.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/testzlib.vcproj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/testzlib.vcproj
new file mode 100644
index 0000000000..9cb0bf877f
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/testzlib.vcproj
@@ -0,0 +1,852 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="testzlib"
+ ProjectGUID="{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}"
+ RootNamespace="testzlib"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ <Platform
+ Name="Itanium"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="x86\TestZlib$(ConfigurationName)"
+ IntermediateDirectory="x86\TestZlib$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\.."
+ PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerOutput="4"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/testzlib.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="x64\TestZlib$(ConfigurationName)"
+ IntermediateDirectory="x64\TestZlib$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\.."
+ PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ AssemblerListingLocation="$(IntDir)\"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj"
+ GenerateManifest="false"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Itanium"
+ OutputDirectory="ia64\TestZlib$(ConfigurationName)"
+ IntermediateDirectory="ia64\TestZlib$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\.."
+ PreprocessorDefinitions="ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerOutput="4"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/testzlib.pdb"
+ SubSystem="1"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="ReleaseWithoutAsm|Win32"
+ OutputDirectory="x86\TestZlib$(ConfigurationName)"
+ IntermediateDirectory="x86\TestZlib$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\.."
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="ReleaseWithoutAsm|x64"
+ OutputDirectory="x64\TestZlib$(ConfigurationName)"
+ IntermediateDirectory="x64\TestZlib$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\.."
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ AssemblerListingLocation="$(IntDir)\"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies=""
+ GenerateManifest="false"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="ReleaseWithoutAsm|Itanium"
+ OutputDirectory="ia64\TestZlib$(ConfigurationName)"
+ IntermediateDirectory="ia64\TestZlib$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\.."
+ PreprocessorDefinitions="ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="x86\TestZlib$(ConfigurationName)"
+ IntermediateDirectory="x86\TestZlib$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\.."
+ PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="x64\TestZlib$(ConfigurationName)"
+ IntermediateDirectory="x64\TestZlib$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\.."
+ PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="false"
+ AssemblerListingLocation="$(IntDir)\"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj"
+ GenerateManifest="false"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Itanium"
+ OutputDirectory="ia64\TestZlib$(ConfigurationName)"
+ IntermediateDirectory="ia64\TestZlib$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\.."
+ PreprocessorDefinitions="ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
+ >
+ <File
+ RelativePath="..\..\..\adler32.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\compress.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\crc32.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\deflate.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\infback.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\masmx64\inffas8664.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Itanium"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="ReleaseWithoutAsm|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="ReleaseWithoutAsm|Itanium"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Itanium"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\inffast.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\inflate.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\inftrees.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\testzlib\testzlib.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\trees.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\uncompr.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\zutil.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/testzlibdll.vcproj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/testzlibdll.vcproj
new file mode 100644
index 0000000000..b1ddde05f9
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/testzlibdll.vcproj
@@ -0,0 +1,565 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="TestZlibDll"
+ ProjectGUID="{C52F9E7B-498A-42BE-8DB4-85A15694366A}"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ <Platform
+ Name="Itanium"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="x86\TestZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x86\TestZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x86\ZlibDllDebug\zlibwapi.lib"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/testzlib.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="x86\TestZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x86\TestZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x86\ZlibDllRelease\zlibwapi.lib"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="x64\TestZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x64\TestZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x64\ZlibDllDebug\zlibwapi.lib"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/testzlib.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Itanium"
+ OutputDirectory="ia64\TestZlibDll$(ConfigurationName)"
+ IntermediateDirectory="ia64\TestZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="ia64\ZlibDllDebug\zlibwapi.lib"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/testzlib.pdb"
+ SubSystem="1"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="x64\TestZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x64\TestZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x64\ZlibDllRelease\zlibwapi.lib"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Itanium"
+ OutputDirectory="ia64\TestZlibDll$(ConfigurationName)"
+ IntermediateDirectory="ia64\TestZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="ia64\ZlibDllRelease\zlibwapi.lib"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
+ >
+ <File
+ RelativePath="..\..\testzlib\testzlib.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlib.rc b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlib.rc
new file mode 100644
index 0000000000..73f6476d60
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlib.rc
@@ -0,0 +1,32 @@
+#include <windows.h>
+
+#define IDR_VERSION1 1
+IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
+ FILEVERSION 1,2,8,0
+ PRODUCTVERSION 1,2,8,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.2.8\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-2013 Jean-loup Gailly & Mark Adler\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x0409, 1252
+ END
+END
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlibstat.vcproj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlibstat.vcproj
new file mode 100644
index 0000000000..61c76c7c5b
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlibstat.vcproj
@@ -0,0 +1,835 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="zlibstat"
+ ProjectGUID="{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ <Platform
+ Name="Itanium"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="x86\ZlibStat$(ConfigurationName)"
+ IntermediateDirectory="x86\ZlibStat$(ConfigurationName)\Tmp"
+ ConfigurationType="4"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
+ ExceptionHandling="0"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="false"
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/MACHINE:X86 /NODEFAULTLIB"
+ OutputFile="$(OutDir)\zlibstat.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="x64\ZlibStat$(ConfigurationName)"
+ IntermediateDirectory="x64\ZlibStat$(ConfigurationName)\Tmp"
+ ConfigurationType="4"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
+ ExceptionHandling="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/MACHINE:AMD64 /NODEFAULTLIB"
+ OutputFile="$(OutDir)\zlibstat.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Itanium"
+ OutputDirectory="ia64\ZlibStat$(ConfigurationName)"
+ IntermediateDirectory="ia64\ZlibStat$(ConfigurationName)\Tmp"
+ ConfigurationType="4"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
+ ExceptionHandling="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/MACHINE:IA64 /NODEFAULTLIB"
+ OutputFile="$(OutDir)\zlibstat.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="x86\ZlibStat$(ConfigurationName)"
+ IntermediateDirectory="x86\ZlibStat$(ConfigurationName)\Tmp"
+ ConfigurationType="4"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/MACHINE:X86 /NODEFAULTLIB"
+ AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj "
+ OutputFile="$(OutDir)\zlibstat.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="x64\ZlibStat$(ConfigurationName)"
+ IntermediateDirectory="x64\ZlibStat$(ConfigurationName)\Tmp"
+ ConfigurationType="4"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;WIN64"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/MACHINE:AMD64 /NODEFAULTLIB"
+ AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj "
+ OutputFile="$(OutDir)\zlibstat.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Itanium"
+ OutputDirectory="ia64\ZlibStat$(ConfigurationName)"
+ IntermediateDirectory="ia64\ZlibStat$(ConfigurationName)\Tmp"
+ ConfigurationType="4"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/MACHINE:IA64 /NODEFAULTLIB"
+ OutputFile="$(OutDir)\zlibstat.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="ReleaseWithoutAsm|Win32"
+ OutputDirectory="x86\ZlibStat$(ConfigurationName)"
+ IntermediateDirectory="x86\ZlibStat$(ConfigurationName)\Tmp"
+ ConfigurationType="4"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/MACHINE:X86 /NODEFAULTLIB"
+ OutputFile="$(OutDir)\zlibstat.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="ReleaseWithoutAsm|x64"
+ OutputDirectory="x64\ZlibStat$(ConfigurationName)"
+ IntermediateDirectory="x64\ZlibStat$(ConfigurationName)\Tmp"
+ ConfigurationType="4"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/MACHINE:AMD64 /NODEFAULTLIB"
+ OutputFile="$(OutDir)\zlibstat.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="ReleaseWithoutAsm|Itanium"
+ OutputDirectory="ia64\ZlibStat$(ConfigurationName)"
+ IntermediateDirectory="ia64\ZlibStat$(ConfigurationName)\Tmp"
+ ConfigurationType="4"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/MACHINE:IA64 /NODEFAULTLIB"
+ OutputFile="$(OutDir)\zlibstat.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ >
+ <File
+ RelativePath="..\..\..\adler32.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\compress.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\crc32.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\deflate.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzclose.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzguts.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzlib.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzread.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzwrite.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\infback.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\masmx64\inffas8664.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Itanium"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Itanium"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="ReleaseWithoutAsm|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="ReleaseWithoutAsm|Itanium"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\inffast.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\inflate.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\inftrees.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\minizip\ioapi.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\trees.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\uncompr.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\minizip\unzip.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\minizip\zip.c"
+ >
+ </File>
+ <File
+ RelativePath=".\zlib.rc"
+ >
+ </File>
+ <File
+ RelativePath=".\zlibvc.def"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\zutil.c"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlibvc.def b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlibvc.def
new file mode 100644
index 0000000000..6367046722
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlibvc.def
@@ -0,0 +1,143 @@
+LIBRARY
+; zlib data compression and ZIP file I/O library
+
+VERSION 1.2.8
+
+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
diff --git a/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlibvc.sln b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlibvc.sln
new file mode 100644
index 0000000000..b4829671f6
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlibvc.vcproj b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlibvc.vcproj
new file mode 100644
index 0000000000..c9a89471e7
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/contrib/vstudio/vc9/zlibvc.vcproj
@@ -0,0 +1,1156 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="zlibvc"
+ ProjectGUID="{8FD826F8-3739-44E6-8CC8-997122E53B8D}"
+ RootNamespace="zlibvc"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ <Platform
+ Name="Itanium"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="x86\ZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x86\ZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="2"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF"
+ ExceptionHandling="0"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="false"
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ BrowseInformation="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj"
+ OutputFile="$(OutDir)\zlibwapi.dll"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ ModuleDefinitionFile=".\zlibvc.def"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/zlibwapi.map"
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(OutDir)/zlibwapi.lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="x64\ZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x64\ZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="2"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64"
+ ExceptionHandling="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ BrowseInformation="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj "
+ OutputFile="$(OutDir)\zlibwapi.dll"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ ModuleDefinitionFile=".\zlibvc.def"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/zlibwapi.map"
+ SubSystem="2"
+ ImportLibrary="$(OutDir)/zlibwapi.lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Itanium"
+ OutputDirectory="ia64\ZlibDll$(ConfigurationName)"
+ IntermediateDirectory="ia64\ZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="2"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="2"
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64"
+ ExceptionHandling="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ BrowseInformation="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)\zlibwapi.dll"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ ModuleDefinitionFile=".\zlibvc.def"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/zlibwapi.map"
+ SubSystem="2"
+ ImportLibrary="$(OutDir)/zlibwapi.lib"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="ReleaseWithoutAsm|Win32"
+ OutputDirectory="x86\ZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x86\ZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="2"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ BrowseInformation="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ OutputFile="$(OutDir)\zlibwapi.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ ModuleDefinitionFile=".\zlibvc.def"
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/zlibwapi.map"
+ SubSystem="2"
+ OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(OutDir)/zlibwapi.lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="ReleaseWithoutAsm|x64"
+ OutputDirectory="x64\ZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x64\ZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="2"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ BrowseInformation="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)\zlibwapi.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ ModuleDefinitionFile=".\zlibvc.def"
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/zlibwapi.map"
+ SubSystem="2"
+ OptimizeForWindows98="1"
+ ImportLibrary="$(OutDir)/zlibwapi.lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="ReleaseWithoutAsm|Itanium"
+ OutputDirectory="ia64\ZlibDll$(ConfigurationName)"
+ IntermediateDirectory="ia64\ZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="2"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="2"
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ BrowseInformation="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)\zlibwapi.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ ModuleDefinitionFile=".\zlibvc.def"
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/zlibwapi.map"
+ SubSystem="2"
+ OptimizeForWindows98="1"
+ ImportLibrary="$(OutDir)/zlibwapi.lib"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="x86\ZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x86\ZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="2"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ BrowseInformation="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj "
+ OutputFile="$(OutDir)\zlibwapi.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ ModuleDefinitionFile=".\zlibvc.def"
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/zlibwapi.map"
+ SubSystem="2"
+ OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(OutDir)/zlibwapi.lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="x64\ZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x64\ZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="2"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ BrowseInformation="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj "
+ OutputFile="$(OutDir)\zlibwapi.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ ModuleDefinitionFile=".\zlibvc.def"
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/zlibwapi.map"
+ SubSystem="2"
+ OptimizeForWindows98="1"
+ ImportLibrary="$(OutDir)/zlibwapi.lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Itanium"
+ OutputDirectory="ia64\ZlibDll$(ConfigurationName)"
+ IntermediateDirectory="ia64\ZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="2"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="2"
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ BrowseInformation="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)\zlibwapi.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ ModuleDefinitionFile=".\zlibvc.def"
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/zlibwapi.map"
+ SubSystem="2"
+ OptimizeForWindows98="1"
+ ImportLibrary="$(OutDir)/zlibwapi.lib"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
+ >
+ <File
+ RelativePath="..\..\..\adler32.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\compress.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\crc32.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\deflate.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzclose.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzguts.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzlib.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzread.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzwrite.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\infback.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\masmx64\inffas8664.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Itanium"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="ReleaseWithoutAsm|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="ReleaseWithoutAsm|Itanium"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Itanium"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\inffast.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\inflate.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\inftrees.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\minizip\ioapi.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\minizip\iowin32.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\trees.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\uncompr.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\minizip\unzip.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="ZLIB_INTERNAL"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="ZLIB_INTERNAL"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Itanium"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="ZLIB_INTERNAL"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\minizip\zip.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="ZLIB_INTERNAL"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="ZLIB_INTERNAL"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Itanium"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="ZLIB_INTERNAL"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\zlib.rc"
+ >
+ </File>
+ <File
+ RelativePath=".\zlibvc.def"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\zutil.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;fi;fd"
+ >
+ <File
+ RelativePath="..\..\..\deflate.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\infblock.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\infcodes.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\inffast.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\inftrees.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\infutil.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\zconf.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\zlib.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\zutil.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/protocols/Telegram/tgl/zlib/crc32.c b/protocols/Telegram/tgl/zlib/crc32.c
new file mode 100644
index 0000000000..979a7190a3
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/crc32.c
@@ -0,0 +1,425 @@
+/* crc32.c -- compute the CRC-32 of a data stream
+ * Copyright (C) 1995-2006, 2010, 2011, 2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ *
+ * Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster
+ * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing
+ * tables for updating the shift register in one step with three exclusive-ors
+ * instead of four steps with four exclusive-ors. This results in about a
+ * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3.
+ */
+
+/* @(#) $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().
+
+ DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h.
+ */
+
+#ifdef MAKECRCH
+# include <stdio.h>
+# ifndef DYNAMIC_CRC_TABLE
+# define DYNAMIC_CRC_TABLE
+# endif /* !DYNAMIC_CRC_TABLE */
+#endif /* MAKECRCH */
+
+#include "zutil.h" /* for STDC and FAR definitions */
+
+#define local static
+
+/* Definitions for doing the crc four data bytes at a time. */
+#if !defined(NOBYFOUR) && defined(Z_U4)
+# define BYFOUR
+#endif
+#ifdef BYFOUR
+ local unsigned long crc32_little OF((unsigned long,
+ const unsigned char FAR *, unsigned));
+ local unsigned long crc32_big OF((unsigned long,
+ const unsigned char FAR *, unsigned));
+# define TBLS 8
+#else
+# define TBLS 1
+#endif /* BYFOUR */
+
+/* Local functions for crc concatenation */
+local unsigned long gf2_matrix_times OF((unsigned long *mat,
+ unsigned long vec));
+local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat));
+local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2));
+
+
+#ifdef DYNAMIC_CRC_TABLE
+
+local volatile int crc_table_empty = 1;
+local z_crc_t FAR crc_table[TBLS][256];
+local void make_crc_table OF((void));
+#ifdef MAKECRCH
+ local void write_table OF((FILE *, const z_crc_t FAR *));
+#endif /* MAKECRCH */
+/*
+ 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+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 first 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. The remaining tables
+ allow for word-at-a-time CRC calculation for both big-endian and little-
+ endian machines, where a word is four bytes.
+*/
+local void make_crc_table()
+{
+ z_crc_t c;
+ int n, k;
+ z_crc_t poly; /* polynomial exclusive-or pattern */
+ /* terms of polynomial defining this crc (except x^32): */
+ static volatile int first = 1; /* flag to limit concurrent making */
+ static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
+
+ /* See if another task is already doing this (not thread-safe, but better
+ than nothing -- significantly reduces duration of vulnerability in
+ case the advice about DYNAMIC_CRC_TABLE is ignored) */
+ if (first) {
+ first = 0;
+
+ /* make exclusive-or pattern from polynomial (0xedb88320UL) */
+ poly = 0;
+ for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++)
+ poly |= (z_crc_t)1 << (31 - p[n]);
+
+ /* generate a crc for every 8-bit value */
+ for (n = 0; n < 256; n++) {
+ c = (z_crc_t)n;
+ for (k = 0; k < 8; k++)
+ c = c & 1 ? poly ^ (c >> 1) : c >> 1;
+ crc_table[0][n] = c;
+ }
+
+#ifdef BYFOUR
+ /* generate crc for each value followed by one, two, and three zeros,
+ and then the byte reversal of those as well as the first table */
+ for (n = 0; n < 256; n++) {
+ c = crc_table[0][n];
+ crc_table[4][n] = ZSWAP32(c);
+ for (k = 1; k < 4; k++) {
+ c = crc_table[0][c & 0xff] ^ (c >> 8);
+ crc_table[k][n] = c;
+ crc_table[k + 4][n] = ZSWAP32(c);
+ }
+ }
+#endif /* BYFOUR */
+
+ crc_table_empty = 0;
+ }
+ else { /* not first */
+ /* wait for the other guy to finish (not efficient, but rare) */
+ while (crc_table_empty)
+ ;
+ }
+
+#ifdef MAKECRCH
+ /* write out CRC tables to crc32.h */
+ {
+ FILE *out;
+
+ out = fopen("crc32.h", "w");
+ if (out == NULL) return;
+ fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n");
+ fprintf(out, " * Generated automatically by crc32.c\n */\n\n");
+ fprintf(out, "local const z_crc_t FAR ");
+ fprintf(out, "crc_table[TBLS][256] =\n{\n {\n");
+ write_table(out, crc_table[0]);
+# ifdef BYFOUR
+ fprintf(out, "#ifdef BYFOUR\n");
+ for (k = 1; k < 8; k++) {
+ fprintf(out, " },\n {\n");
+ write_table(out, crc_table[k]);
+ }
+ fprintf(out, "#endif\n");
+# endif /* BYFOUR */
+ fprintf(out, " }\n};\n");
+ fclose(out);
+ }
+#endif /* MAKECRCH */
+}
+
+#ifdef MAKECRCH
+local void write_table(out, table)
+ FILE *out;
+ const z_crc_t FAR *table;
+{
+ int n;
+
+ for (n = 0; n < 256; n++)
+ fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ",
+ (unsigned long)(table[n]),
+ n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", "));
+}
+#endif /* MAKECRCH */
+
+#else /* !DYNAMIC_CRC_TABLE */
+/* ========================================================================
+ * Tables of CRC-32s of all single-byte values, made by make_crc_table().
+ */
+#include "crc32.h"
+#endif /* DYNAMIC_CRC_TABLE */
+
+/* =========================================================================
+ * This function can be used by asm versions of crc32()
+ */
+const z_crc_t FAR * ZEXPORT get_crc_table()
+{
+#ifdef DYNAMIC_CRC_TABLE
+ if (crc_table_empty)
+ make_crc_table();
+#endif /* DYNAMIC_CRC_TABLE */
+ return (const z_crc_t FAR *)crc_table;
+}
+
+/* ========================================================================= */
+#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8)
+#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
+
+/* ========================================================================= */
+unsigned long ZEXPORT crc32(crc, buf, len)
+ unsigned long crc;
+ const unsigned char FAR *buf;
+ uInt len;
+{
+ if (buf == Z_NULL) return 0UL;
+
+#ifdef DYNAMIC_CRC_TABLE
+ if (crc_table_empty)
+ make_crc_table();
+#endif /* DYNAMIC_CRC_TABLE */
+
+#ifdef BYFOUR
+ if (sizeof(void *) == sizeof(ptrdiff_t)) {
+ z_crc_t endian;
+
+ endian = 1;
+ if (*((unsigned char *)(&endian)))
+ return crc32_little(crc, buf, len);
+ else
+ return crc32_big(crc, buf, len);
+ }
+#endif /* BYFOUR */
+ crc = crc ^ 0xffffffffUL;
+ while (len >= 8) {
+ DO8;
+ len -= 8;
+ }
+ if (len) do {
+ DO1;
+ } while (--len);
+ return crc ^ 0xffffffffUL;
+}
+
+#ifdef BYFOUR
+
+/* ========================================================================= */
+#define DOLIT4 c ^= *buf4++; \
+ c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
+ crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24]
+#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4
+
+/* ========================================================================= */
+local unsigned long crc32_little(crc, buf, len)
+ unsigned long crc;
+ const unsigned char FAR *buf;
+ unsigned len;
+{
+ register z_crc_t c;
+ register const z_crc_t FAR *buf4;
+
+ c = (z_crc_t)crc;
+ c = ~c;
+ while (len && ((ptrdiff_t)buf & 3)) {
+ c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
+ len--;
+ }
+
+ buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
+ while (len >= 32) {
+ DOLIT32;
+ len -= 32;
+ }
+ while (len >= 4) {
+ DOLIT4;
+ len -= 4;
+ }
+ buf = (const unsigned char FAR *)buf4;
+
+ if (len) do {
+ c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
+ } while (--len);
+ c = ~c;
+ return (unsigned long)c;
+}
+
+/* ========================================================================= */
+#define DOBIG4 c ^= *++buf4; \
+ c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
+ crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
+#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
+
+/* ========================================================================= */
+local unsigned long crc32_big(crc, buf, len)
+ unsigned long crc;
+ const unsigned char FAR *buf;
+ unsigned len;
+{
+ register z_crc_t c;
+ register const z_crc_t FAR *buf4;
+
+ c = ZSWAP32((z_crc_t)crc);
+ c = ~c;
+ while (len && ((ptrdiff_t)buf & 3)) {
+ c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
+ len--;
+ }
+
+ buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
+ buf4--;
+ while (len >= 32) {
+ DOBIG32;
+ len -= 32;
+ }
+ while (len >= 4) {
+ DOBIG4;
+ len -= 4;
+ }
+ buf4++;
+ buf = (const unsigned char FAR *)buf4;
+
+ if (len) do {
+ c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
+ } while (--len);
+ c = ~c;
+ return (unsigned long)(ZSWAP32(c));
+}
+
+#endif /* BYFOUR */
+
+#define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */
+
+/* ========================================================================= */
+local unsigned long gf2_matrix_times(mat, vec)
+ unsigned long *mat;
+ unsigned long vec;
+{
+ unsigned long sum;
+
+ sum = 0;
+ while (vec) {
+ if (vec & 1)
+ sum ^= *mat;
+ vec >>= 1;
+ mat++;
+ }
+ return sum;
+}
+
+/* ========================================================================= */
+local void gf2_matrix_square(square, mat)
+ unsigned long *square;
+ unsigned long *mat;
+{
+ int n;
+
+ for (n = 0; n < GF2_DIM; n++)
+ square[n] = gf2_matrix_times(mat, mat[n]);
+}
+
+/* ========================================================================= */
+local uLong crc32_combine_(crc1, crc2, len2)
+ uLong crc1;
+ uLong crc2;
+ z_off64_t len2;
+{
+ int n;
+ unsigned long row;
+ unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */
+ unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */
+
+ /* degenerate case (also disallow negative lengths) */
+ if (len2 <= 0)
+ return crc1;
+
+ /* put operator for one zero bit in odd */
+ odd[0] = 0xedb88320UL; /* CRC-32 polynomial */
+ row = 1;
+ for (n = 1; n < GF2_DIM; n++) {
+ odd[n] = row;
+ row <<= 1;
+ }
+
+ /* put operator for two zero bits in even */
+ gf2_matrix_square(even, odd);
+
+ /* put operator for four zero bits in odd */
+ gf2_matrix_square(odd, even);
+
+ /* apply len2 zeros to crc1 (first square will put the operator for one
+ zero byte, eight zero bits, in even) */
+ do {
+ /* apply zeros operator for this bit of len2 */
+ gf2_matrix_square(even, odd);
+ if (len2 & 1)
+ crc1 = gf2_matrix_times(even, crc1);
+ len2 >>= 1;
+
+ /* if no more bits set, then done */
+ if (len2 == 0)
+ break;
+
+ /* another iteration of the loop with odd and even swapped */
+ gf2_matrix_square(odd, even);
+ if (len2 & 1)
+ crc1 = gf2_matrix_times(odd, crc1);
+ len2 >>= 1;
+
+ /* if no more bits set, then done */
+ } while (len2 != 0);
+
+ /* return combined crc */
+ crc1 ^= crc2;
+ return crc1;
+}
+
+/* ========================================================================= */
+uLong ZEXPORT crc32_combine(crc1, crc2, len2)
+ uLong crc1;
+ uLong crc2;
+ z_off_t len2;
+{
+ return crc32_combine_(crc1, crc2, len2);
+}
+
+uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
+ uLong crc1;
+ uLong crc2;
+ z_off64_t len2;
+{
+ return crc32_combine_(crc1, crc2, len2);
+}
diff --git a/protocols/Telegram/tgl/zlib/crc32.h b/protocols/Telegram/tgl/zlib/crc32.h
new file mode 100644
index 0000000000..9e0c778102
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/crc32.h
@@ -0,0 +1,441 @@
+/* crc32.h -- tables for rapid CRC calculation
+ * Generated automatically by crc32.c
+ */
+
+local const z_crc_t FAR crc_table[TBLS][256] =
+{
+ {
+ 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL,
+ 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL,
+ 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL,
+ 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL,
+ 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL,
+ 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL,
+ 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL,
+ 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL,
+ 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL,
+ 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL,
+ 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL,
+ 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL,
+ 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL,
+ 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL,
+ 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL,
+ 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL,
+ 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL,
+ 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL,
+ 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL,
+ 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL,
+ 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL,
+ 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL,
+ 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL,
+ 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL,
+ 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL,
+ 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL,
+ 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL,
+ 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL,
+ 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL,
+ 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL,
+ 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL,
+ 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL,
+ 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL,
+ 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL,
+ 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL,
+ 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL,
+ 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL,
+ 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL,
+ 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL,
+ 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL,
+ 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL,
+ 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL,
+ 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL,
+ 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL,
+ 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL,
+ 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL,
+ 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL,
+ 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL,
+ 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL,
+ 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL,
+ 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL,
+ 0x2d02ef8dUL
+#ifdef BYFOUR
+ },
+ {
+ 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL,
+ 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL,
+ 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL,
+ 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL,
+ 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL,
+ 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL,
+ 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL,
+ 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL,
+ 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL,
+ 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL,
+ 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL,
+ 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL,
+ 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL,
+ 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL,
+ 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL,
+ 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL,
+ 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL,
+ 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL,
+ 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL,
+ 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL,
+ 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL,
+ 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL,
+ 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL,
+ 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL,
+ 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL,
+ 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL,
+ 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL,
+ 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL,
+ 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL,
+ 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL,
+ 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL,
+ 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL,
+ 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL,
+ 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL,
+ 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL,
+ 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL,
+ 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL,
+ 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL,
+ 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL,
+ 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL,
+ 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL,
+ 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL,
+ 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL,
+ 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL,
+ 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL,
+ 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL,
+ 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL,
+ 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL,
+ 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL,
+ 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL,
+ 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL,
+ 0x9324fd72UL
+ },
+ {
+ 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL,
+ 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL,
+ 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL,
+ 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL,
+ 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL,
+ 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL,
+ 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL,
+ 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL,
+ 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL,
+ 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL,
+ 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL,
+ 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL,
+ 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL,
+ 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL,
+ 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL,
+ 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL,
+ 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL,
+ 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL,
+ 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL,
+ 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL,
+ 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL,
+ 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL,
+ 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL,
+ 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL,
+ 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL,
+ 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL,
+ 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL,
+ 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL,
+ 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL,
+ 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL,
+ 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL,
+ 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL,
+ 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL,
+ 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL,
+ 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL,
+ 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL,
+ 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL,
+ 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL,
+ 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL,
+ 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL,
+ 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL,
+ 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL,
+ 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL,
+ 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL,
+ 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL,
+ 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL,
+ 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL,
+ 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL,
+ 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL,
+ 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL,
+ 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL,
+ 0xbe9834edUL
+ },
+ {
+ 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL,
+ 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL,
+ 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL,
+ 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL,
+ 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL,
+ 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL,
+ 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL,
+ 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL,
+ 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL,
+ 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL,
+ 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL,
+ 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL,
+ 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL,
+ 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL,
+ 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL,
+ 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL,
+ 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL,
+ 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL,
+ 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL,
+ 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL,
+ 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL,
+ 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL,
+ 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL,
+ 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL,
+ 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL,
+ 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL,
+ 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL,
+ 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL,
+ 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL,
+ 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL,
+ 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL,
+ 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL,
+ 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL,
+ 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL,
+ 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL,
+ 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL,
+ 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL,
+ 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL,
+ 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL,
+ 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL,
+ 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL,
+ 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL,
+ 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL,
+ 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL,
+ 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL,
+ 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL,
+ 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL,
+ 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL,
+ 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL,
+ 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL,
+ 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL,
+ 0xde0506f1UL
+ },
+ {
+ 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL,
+ 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL,
+ 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL,
+ 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL,
+ 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL,
+ 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL,
+ 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL,
+ 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL,
+ 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL,
+ 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL,
+ 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL,
+ 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL,
+ 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL,
+ 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL,
+ 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL,
+ 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL,
+ 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL,
+ 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL,
+ 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL,
+ 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL,
+ 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL,
+ 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL,
+ 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL,
+ 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL,
+ 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL,
+ 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL,
+ 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL,
+ 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL,
+ 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL,
+ 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL,
+ 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL,
+ 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL,
+ 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL,
+ 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL,
+ 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL,
+ 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL,
+ 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL,
+ 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL,
+ 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL,
+ 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL,
+ 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL,
+ 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL,
+ 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL,
+ 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL,
+ 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL,
+ 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL,
+ 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL,
+ 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL,
+ 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL,
+ 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL,
+ 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL,
+ 0x8def022dUL
+ },
+ {
+ 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL,
+ 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL,
+ 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL,
+ 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL,
+ 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL,
+ 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL,
+ 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL,
+ 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL,
+ 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL,
+ 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL,
+ 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL,
+ 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL,
+ 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL,
+ 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL,
+ 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL,
+ 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL,
+ 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL,
+ 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL,
+ 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL,
+ 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL,
+ 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL,
+ 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL,
+ 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL,
+ 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL,
+ 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL,
+ 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL,
+ 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL,
+ 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL,
+ 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL,
+ 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL,
+ 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL,
+ 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL,
+ 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL,
+ 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL,
+ 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL,
+ 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL,
+ 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL,
+ 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL,
+ 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL,
+ 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL,
+ 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL,
+ 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL,
+ 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL,
+ 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL,
+ 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL,
+ 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL,
+ 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL,
+ 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL,
+ 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL,
+ 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL,
+ 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL,
+ 0x72fd2493UL
+ },
+ {
+ 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL,
+ 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL,
+ 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL,
+ 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL,
+ 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL,
+ 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL,
+ 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL,
+ 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL,
+ 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL,
+ 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL,
+ 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL,
+ 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL,
+ 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL,
+ 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL,
+ 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL,
+ 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL,
+ 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL,
+ 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL,
+ 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL,
+ 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL,
+ 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL,
+ 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL,
+ 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL,
+ 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL,
+ 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL,
+ 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL,
+ 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL,
+ 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL,
+ 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL,
+ 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL,
+ 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL,
+ 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL,
+ 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL,
+ 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL,
+ 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL,
+ 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL,
+ 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL,
+ 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL,
+ 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL,
+ 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL,
+ 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL,
+ 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL,
+ 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL,
+ 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL,
+ 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL,
+ 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL,
+ 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL,
+ 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL,
+ 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL,
+ 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL,
+ 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL,
+ 0xed3498beUL
+ },
+ {
+ 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL,
+ 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL,
+ 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL,
+ 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL,
+ 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL,
+ 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL,
+ 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL,
+ 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL,
+ 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL,
+ 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL,
+ 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL,
+ 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL,
+ 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL,
+ 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL,
+ 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL,
+ 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL,
+ 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL,
+ 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL,
+ 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL,
+ 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL,
+ 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL,
+ 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL,
+ 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL,
+ 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL,
+ 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL,
+ 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL,
+ 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL,
+ 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL,
+ 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL,
+ 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL,
+ 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL,
+ 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL,
+ 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL,
+ 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL,
+ 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL,
+ 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL,
+ 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL,
+ 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL,
+ 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL,
+ 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL,
+ 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL,
+ 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL,
+ 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL,
+ 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL,
+ 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL,
+ 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL,
+ 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL,
+ 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL,
+ 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL,
+ 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL,
+ 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL,
+ 0xf10605deUL
+#endif
+ }
+};
diff --git a/protocols/Telegram/tgl/zlib/deflate.c b/protocols/Telegram/tgl/zlib/deflate.c
new file mode 100644
index 0000000000..696957705b
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/deflate.c
@@ -0,0 +1,1967 @@
+/* deflate.c -- compress data using the deflation algorithm
+ * Copyright (C) 1995-2013 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.2.8 Copyright 1995-2013 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.
+ */
+
+/* ===========================================================================
+ * Function prototypes.
+ */
+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) OF((deflate_state *s, int flush));
+/* Compression function. Returns the block state after the call. */
+
+local void fill_window OF((deflate_state *s));
+local block_state deflate_stored OF((deflate_state *s, int flush));
+local block_state deflate_fast OF((deflate_state *s, int flush));
+#ifndef FASTEST
+local block_state deflate_slow OF((deflate_state *s, int flush));
+#endif
+local block_state deflate_rle OF((deflate_state *s, int flush));
+local block_state deflate_huff OF((deflate_state *s, int flush));
+local void lm_init OF((deflate_state *s));
+local void putShortMSB OF((deflate_state *s, uInt b));
+local void flush_pending OF((z_streamp strm));
+local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size));
+#ifdef ASMV
+ void match_init OF((void)); /* asm code initialization */
+ uInt longest_match OF((deflate_state *s, IPos cur_match));
+#else
+local uInt longest_match OF((deflate_state *s, IPos cur_match));
+#endif
+
+#ifdef DEBUG
+local void check_match OF((deflate_state *s, IPos start, IPos match,
+ int length));
+#endif
+
+/* ===========================================================================
+ * 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.
+ */
+
+#define EQUAL 0
+/* result of memcmp for equal strings */
+
+#ifndef NO_DUMMY_DECL
+struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
+#endif
+
+/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */
+#define RANK(f) (((f) << 1) - ((f) > 4 ? 9 : 0))
+
+/* ===========================================================================
+ * Update a hash value with the given input byte
+ * IN assertion: all calls to 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 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) \
+ s->head[s->hash_size-1] = NIL; \
+ zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
+
+/* ========================================================================= */
+int ZEXPORT deflateInit_(strm, level, version, stream_size)
+ 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_(strm, level, method, windowBits, memLevel, strategy,
+ version, stream_size)
+ 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;
+
+ ushf *overlay;
+ /* We overlay pending_buf and d_buf+l_buf. This works since the average
+ * output size for (length,distance) codes is <= 24 bits.
+ */
+
+ 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;
+ 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) {
+ 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->wrap = wrap;
+ s->gzhead = Z_NULL;
+ s->w_bits = windowBits;
+ s->w_size = 1 << s->w_bits;
+ s->w_mask = s->w_size - 1;
+
+ s->hash_bits = 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 */
+
+ overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
+ s->pending_buf = (uchf *) overlay;
+ s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
+
+ 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;
+ }
+ s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
+ s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
+
+ s->level = level;
+ s->strategy = strategy;
+ s->method = (Byte)method;
+
+ return deflateReset(strm);
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
+ z_streamp strm;
+ const Bytef *dictionary;
+ uInt dictLength;
+{
+ deflate_state *s;
+ uInt str, n;
+ int wrap;
+ unsigned avail;
+ z_const unsigned char *next;
+
+ if (strm == Z_NULL || strm->state == Z_NULL || 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 deflateResetKeep (strm)
+ z_streamp strm;
+{
+ deflate_state *s;
+
+ if (strm == Z_NULL || strm->state == Z_NULL ||
+ strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) {
+ 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 = s->wrap ? INIT_STATE : BUSY_STATE;
+ strm->adler =
+#ifdef GZIP
+ s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
+#endif
+ adler32(0L, Z_NULL, 0);
+ s->last_flush = Z_NO_FLUSH;
+
+ _tr_init(s);
+
+ return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateReset (strm)
+ z_streamp strm;
+{
+ int ret;
+
+ ret = deflateResetKeep(strm);
+ if (ret == Z_OK)
+ lm_init(strm->state);
+ return ret;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateSetHeader (strm, head)
+ z_streamp strm;
+ gz_headerp head;
+{
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (strm->state->wrap != 2) return Z_STREAM_ERROR;
+ strm->state->gzhead = head;
+ return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflatePending (strm, pending, bits)
+ unsigned *pending;
+ int *bits;
+ z_streamp strm;
+{
+ if (strm == Z_NULL || strm->state == Z_NULL) 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 (strm, bits, value)
+ z_streamp strm;
+ int bits;
+ int value;
+{
+ deflate_state *s;
+ int put;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ s = strm->state;
+ if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
+ return Z_BUF_ERROR;
+ 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(strm, level, strategy)
+ z_streamp strm;
+ int level;
+ int strategy;
+{
+ deflate_state *s;
+ compress_func func;
+ int err = Z_OK;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) 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) &&
+ strm->total_in != 0) {
+ /* Flush the last buffer: */
+ err = deflate(strm, Z_BLOCK);
+ if (err == Z_BUF_ERROR && s->pending == 0)
+ err = Z_OK;
+ }
+ if (s->level != level) {
+ 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 err;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain)
+ z_streamp strm;
+ int good_length;
+ int max_lazy;
+ int nice_length;
+ int max_chain;
+{
+ deflate_state *s;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ s = strm->state;
+ s->good_match = good_length;
+ s->max_lazy_match = max_lazy;
+ s->nice_match = nice_length;
+ s->max_chain_length = 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.
+ * They are coded as constants here for a reason--if the #define's are
+ * changed, then this function needs to be changed as well. The return
+ * value for 15 and 8 only works for those exact settings.
+ *
+ * For any setting other than those defaults for windowBits and memLevel,
+ * the value returned is a conservative worst case for the maximum expansion
+ * resulting from using fixed blocks instead of stored blocks, which deflate
+ * can emit on compressed data for some combinations of the parameters.
+ *
+ * This function could be more sophisticated to provide closer upper bounds for
+ * every combination of windowBits and memLevel. But even the conservative
+ * upper bound of about 14% expansion does not seem onerous for output buffer
+ * allocation.
+ */
+uLong ZEXPORT deflateBound(strm, sourceLen)
+ z_streamp strm;
+ uLong sourceLen;
+{
+ deflate_state *s;
+ uLong complen, wraplen;
+ Bytef *str;
+
+ /* conservative upper bound for compressed data */
+ complen = sourceLen +
+ ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;
+
+ /* if can't get parameters, return conservative bound plus zlib wrapper */
+ if (strm == Z_NULL || strm->state == Z_NULL)
+ return complen + 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;
+ case 2: /* gzip wrapper */
+ wraplen = 18;
+ if (s->gzhead != Z_NULL) { /* user-supplied gzip header */
+ 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;
+ default: /* for compiler happiness */
+ wraplen = 6;
+ }
+
+ /* if not default parameters, return conservative bound */
+ if (s->w_bits != 15 || s->hash_bits != 8 + 7)
+ return complen + wraplen;
+
+ /* default settings: return tight bound for that case */
+ 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 (s, b)
+ 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 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(strm)
+ 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;
+ }
+}
+
+/* ========================================================================= */
+int ZEXPORT deflate (strm, flush)
+ z_streamp strm;
+ int flush;
+{
+ int old_flush; /* value of flush param for previous deflate call */
+ deflate_state *s;
+
+ if (strm == Z_NULL || strm->state == Z_NULL ||
+ flush > Z_BLOCK || flush < 0) {
+ return Z_STREAM_ERROR;
+ }
+ s = strm->state;
+
+ if (strm->next_out == Z_NULL ||
+ (strm->next_in == Z_NULL && strm->avail_in != 0) ||
+ (s->status == FINISH_STATE && flush != Z_FINISH)) {
+ ERR_RETURN(strm, Z_STREAM_ERROR);
+ }
+ if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
+
+ s->strm = strm; /* just in case */
+ old_flush = s->last_flush;
+ s->last_flush = flush;
+
+ /* Write the header */
+ if (s->status == INIT_STATE) {
+#ifdef GZIP
+ if (s->wrap == 2) {
+ 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;
+ }
+ 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;
+ }
+ }
+ else
+#endif
+ {
+ 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);
+
+ s->status = BUSY_STATE;
+ 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);
+ }
+ }
+#ifdef GZIP
+ if (s->status == EXTRA_STATE) {
+ if (s->gzhead->extra != Z_NULL) {
+ uInt beg = s->pending; /* start of bytes to update crc */
+
+ while (s->gzindex < (s->gzhead->extra_len & 0xffff)) {
+ if (s->pending == s->pending_buf_size) {
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ flush_pending(strm);
+ beg = s->pending;
+ if (s->pending == s->pending_buf_size)
+ break;
+ }
+ put_byte(s, s->gzhead->extra[s->gzindex]);
+ s->gzindex++;
+ }
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ if (s->gzindex == s->gzhead->extra_len) {
+ s->gzindex = 0;
+ s->status = NAME_STATE;
+ }
+ }
+ else
+ s->status = NAME_STATE;
+ }
+ if (s->status == NAME_STATE) {
+ if (s->gzhead->name != Z_NULL) {
+ uInt beg = s->pending; /* start of bytes to update crc */
+ int val;
+
+ do {
+ if (s->pending == s->pending_buf_size) {
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ flush_pending(strm);
+ beg = s->pending;
+ if (s->pending == s->pending_buf_size) {
+ val = 1;
+ break;
+ }
+ }
+ val = s->gzhead->name[s->gzindex++];
+ put_byte(s, val);
+ } while (val != 0);
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ if (val == 0) {
+ s->gzindex = 0;
+ s->status = COMMENT_STATE;
+ }
+ }
+ else
+ s->status = COMMENT_STATE;
+ }
+ if (s->status == COMMENT_STATE) {
+ if (s->gzhead->comment != Z_NULL) {
+ uInt beg = s->pending; /* start of bytes to update crc */
+ int val;
+
+ do {
+ if (s->pending == s->pending_buf_size) {
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ flush_pending(strm);
+ beg = s->pending;
+ if (s->pending == s->pending_buf_size) {
+ val = 1;
+ break;
+ }
+ }
+ val = s->gzhead->comment[s->gzindex++];
+ put_byte(s, val);
+ } while (val != 0);
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ if (val == 0)
+ s->status = HCRC_STATE;
+ }
+ else
+ 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 + 2 <= s->pending_buf_size) {
+ 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;
+ }
+ }
+ else
+ s->status = BUSY_STATE;
+ }
+#endif
+
+ /* 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);
+ }
+
+ /* 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->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;
+ }
+ }
+ }
+ Assert(strm->avail_out > 0, "bug2");
+
+ 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 (strm)
+ z_streamp strm;
+{
+ int status;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ status = strm->state->status;
+ if (status != INIT_STATE &&
+ status != EXTRA_STATE &&
+ status != NAME_STATE &&
+ status != COMMENT_STATE &&
+ status != HCRC_STATE &&
+ status != BUSY_STATE &&
+ status != FINISH_STATE) {
+ return Z_STREAM_ERROR;
+ }
+
+ /* 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 (dest, source)
+ z_streamp dest;
+ z_streamp source;
+{
+#ifdef MAXSEG_64K
+ return Z_STREAM_ERROR;
+#else
+ deflate_state *ds;
+ deflate_state *ss;
+ ushf *overlay;
+
+
+ if (source == Z_NULL || dest == Z_NULL || source->state == 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));
+ overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
+ ds->pending_buf = (uchf *) overlay;
+
+ 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, (uInt)ds->pending_buf_size);
+
+ ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
+ ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
+ ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
+
+ 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 */
+}
+
+/* ===========================================================================
+ * 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 int read_buf(strm, buf, size)
+ 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 (int)len;
+}
+
+/* ===========================================================================
+ * Initialize the "longest match" routines for a new zlib stream
+ */
+local void lm_init (s)
+ 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;
+#ifndef FASTEST
+#ifdef ASMV
+ match_init(); /* initialize the asm code */
+#endif
+#endif
+}
+
+#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.
+ */
+#ifndef ASMV
+/* For 80x86 and 680x0, an optimized version will be provided in match.asm or
+ * match.S. The code will be functionally equivalent.
+ */
+local uInt longest_match(s, cur_match)
+ deflate_state *s;
+ IPos cur_match; /* current 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 = 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 = 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;
+}
+#endif /* ASMV */
+
+#else /* FASTEST */
+
+/* ---------------------------------------------------------------------------
+ * Optimized version for FASTEST only
+ */
+local uInt longest_match(s, cur_match)
+ deflate_state *s;
+ IPos cur_match; /* current 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 DEBUG
+/* ===========================================================================
+ * Check that the match at match_start is indeed a match.
+ */
+local void check_match(s, start, match, length)
+ deflate_state *s;
+ IPos start, match;
+ int length;
+{
+ /* check that the match is indeed a match */
+ if (zmemcmp(s->window + match,
+ s->window + start, length) != EQUAL) {
+ fprintf(stderr, " start %u, match %u, length %d\n",
+ start, match, length);
+ do {
+ fprintf(stderr, "%c%c", s->window[match++], s->window[start++]);
+ } while (--length != 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 /* DEBUG */
+
+/* ===========================================================================
+ * 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(s)
+ deflate_state *s;
+{
+ register unsigned n, m;
+ register Posf *p;
+ 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);
+ s->match_start -= wsize;
+ s->strstart -= wsize; /* we now have strstart >= MAX_DIST */
+ s->block_start -= (long) wsize;
+
+ /* Slide the hash table (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. (Using level 0 permanently is not an optimal usage of
+ zlib, so we don't care about this pathological case.)
+ */
+ 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
+ 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");
+}
+
+/* ===========================================================================
+ * 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; \
+}
+
+/* ===========================================================================
+ * Copy without compression as much as possible from the input stream, return
+ * the current block state.
+ * This function does not insert new strings in the dictionary since
+ * uncompressible data is probably not useful. This function is used
+ * only for the level=0 compression option.
+ * NOTE: this function should be optimized to avoid extra copying from
+ * window to pending_buf.
+ */
+local block_state deflate_stored(s, flush)
+ deflate_state *s;
+ int flush;
+{
+ /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
+ * to pending_buf_size, and each stored block has a 5 byte header:
+ */
+ ulg max_block_size = 0xffff;
+ ulg max_start;
+
+ if (max_block_size > s->pending_buf_size - 5) {
+ max_block_size = s->pending_buf_size - 5;
+ }
+
+ /* Copy as much as possible from input to output: */
+ for (;;) {
+ /* Fill the window as much as possible: */
+ if (s->lookahead <= 1) {
+
+ Assert(s->strstart < s->w_size+MAX_DIST(s) ||
+ s->block_start >= (long)s->w_size, "slide too late");
+
+ fill_window(s);
+ if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
+
+ if (s->lookahead == 0) break; /* flush the current block */
+ }
+ Assert(s->block_start >= 0L, "block gone");
+
+ s->strstart += s->lookahead;
+ s->lookahead = 0;
+
+ /* Emit a stored block if pending_buf will be full: */
+ max_start = s->block_start + max_block_size;
+ if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
+ /* strstart == 0 is possible when wraparound on 16-bit machine */
+ s->lookahead = (uInt)(s->strstart - max_start);
+ s->strstart = (uInt)max_start;
+ FLUSH_BLOCK(s, 0);
+ }
+ /* Flush if we may have to slide, otherwise block_start may become
+ * negative and the data will be gone:
+ */
+ if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
+ FLUSH_BLOCK(s, 0);
+ }
+ }
+ s->insert = 0;
+ if (flush == Z_FINISH) {
+ FLUSH_BLOCK(s, 1);
+ return finish_done;
+ }
+ if ((long)s->strstart > s->block_start)
+ FLUSH_BLOCK(s, 0);
+ return block_done;
+}
+
+/* ===========================================================================
+ * 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(s, flush)
+ 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->last_lit)
+ 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(s, flush)
+ 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->last_lit)
+ 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(s, flush)
+ 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 - (int)(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->last_lit)
+ 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(s, flush)
+ 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->last_lit)
+ FLUSH_BLOCK(s, 0);
+ return block_done;
+}
diff --git a/protocols/Telegram/tgl/zlib/deflate.h b/protocols/Telegram/tgl/zlib/deflate.h
new file mode 100644
index 0000000000..ce0299edd1
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/deflate.h
@@ -0,0 +1,346 @@
+/* deflate.h -- internal compression state
+ * Copyright (C) 1995-2012 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
+
+/* ===========================================================================
+ * 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
+#define EXTRA_STATE 69
+#define NAME_STATE 73
+#define COMMENT_STATE 91
+#define HCRC_STATE 103
+#define BUSY_STATE 113
+#define FINISH_STATE 666
+/* 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 */
+ 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 */
+ uInt 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 */
+ uInt 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
+ */
+
+ uchf *l_buf; /* buffer for literals or lengths */
+
+ 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 last_lit; /* running index in l_buf */
+
+ ushf *d_buf;
+ /* Buffer for distances. To simplify the code, d_buf and l_buf have
+ * the same number of elements. To use different lengths, an extra flag
+ * array would be necessary.
+ */
+
+ 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 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++] = (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 OF((deflate_state *s));
+int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
+void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf,
+ ulg stored_len, int last));
+void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s));
+void ZLIB_INTERNAL _tr_align OF((deflate_state *s));
+void ZLIB_INTERNAL _tr_stored_block OF((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 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
+
+# define _tr_tally_lit(s, c, flush) \
+ { uch cc = (c); \
+ s->d_buf[s->last_lit] = 0; \
+ s->l_buf[s->last_lit++] = cc; \
+ s->dyn_ltree[cc].Freq++; \
+ flush = (s->last_lit == s->lit_bufsize-1); \
+ }
+# define _tr_tally_dist(s, distance, length, flush) \
+ { uch len = (length); \
+ ush dist = (distance); \
+ s->d_buf[s->last_lit] = dist; \
+ s->l_buf[s->last_lit++] = len; \
+ dist--; \
+ s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
+ s->dyn_dtree[d_code(dist)].Freq++; \
+ flush = (s->last_lit == s->lit_bufsize-1); \
+ }
+#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/protocols/Telegram/tgl/zlib/doc/algorithm.txt b/protocols/Telegram/tgl/zlib/doc/algorithm.txt
new file mode 100644
index 0000000000..c97f495020
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/doc/rfc1950.txt b/protocols/Telegram/tgl/zlib/doc/rfc1950.txt
new file mode 100644
index 0000000000..ce6428a0f2
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/doc/rfc1950.txt
@@ -0,0 +1,619 @@
+
+
+
+
+
+
+Network Working Group P. Deutsch
+Request for Comments: 1950 Aladdin Enterprises
+Category: Informational J-L. Gailly
+ Info-ZIP
+ May 1996
+
+
+ ZLIB Compressed Data Format Specification version 3.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 and Jean-Loup Gailly
+
+ 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
+ <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>.
+
+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: <ghost@aladdin.com>
+
+
+ Jean-Loup Gailly
+
+ EMail: <gzip@prep.ai.mit.edu>
+
+ Questions about the technical content of this specification can be
+ sent by email to
+
+ Jean-Loup Gailly <gzip@prep.ai.mit.edu> and
+ Mark Adler <madler@alumni.caltech.edu>
+
+ Editorial comments on this specification can be sent by email to
+
+ L. Peter Deutsch <ghost@aladdin.com> and
+ Glenn Randers-Pehrson <randeg@alumni.rpi.edu>
+
+
+
+
+
+
+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/protocols/Telegram/tgl/zlib/doc/rfc1951.txt b/protocols/Telegram/tgl/zlib/doc/rfc1951.txt
new file mode 100644
index 0000000000..403c8c722f
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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
+ <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>.
+
+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 <length, backward distance>. 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 <length = 5, distance = 2>
+ 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 <length, backward distance> 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: <ghost@aladdin.com>
+
+ Questions about the technical content of this specification can be
+ sent by email to:
+
+ Jean-Loup Gailly <gzip@prep.ai.mit.edu> and
+ Mark Adler <madler@alumni.caltech.edu>
+
+ Editorial comments on this specification can be sent by email to:
+
+ L. Peter Deutsch <ghost@aladdin.com> and
+ Glenn Randers-Pehrson <randeg@alumni.rpi.edu>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Deutsch Informational [Page 17]
+
diff --git a/protocols/Telegram/tgl/zlib/doc/rfc1952.txt b/protocols/Telegram/tgl/zlib/doc/rfc1952.txt
new file mode 100644
index 0000000000..a8e51b4567
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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
+ <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>.
+
+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
+ <gzip@prep.ai.mit.edu> 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: <ghost@aladdin.com>
+
+ Questions about the technical content of this specification can be
+ sent by email to:
+
+ Jean-Loup Gailly <gzip@prep.ai.mit.edu> and
+ Mark Adler <madler@alumni.caltech.edu>
+
+ Editorial comments on this specification can be sent by email to:
+
+ L. Peter Deutsch <ghost@aladdin.com> and
+ Glenn Randers-Pehrson <randeg@alumni.rpi.edu>
+
+
+
+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 <gzip@prep.ai.mit.edu>. 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/protocols/Telegram/tgl/zlib/doc/txtvsbin.txt b/protocols/Telegram/tgl/zlib/doc/txtvsbin.txt
new file mode 100644
index 0000000000..3d0f0634f7
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 white 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 black 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 white list and
+no byte that belongs to the black 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 black-listed codes, either by mistake or by peculiar design
+considerations. In such cases, a scheme that tolerates a small fraction
+of black-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/protocols/Telegram/tgl/zlib/examples/README.examples b/protocols/Telegram/tgl/zlib/examples/README.examples
new file mode 100644
index 0000000000..56a31714e5
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/examples/README.examples
@@ -0,0 +1,49 @@
+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
+
+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
+ 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/protocols/Telegram/tgl/zlib/examples/enough.c b/protocols/Telegram/tgl/zlib/examples/enough.c
new file mode 100644
index 0000000000..b991144305
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/examples/enough.c
@@ -0,0 +1,572 @@
+/* enough.c -- determine the maximum size of inflate's Huffman code tables over
+ * all possible valid and complete Huffman codes, subject to a length limit.
+ * Copyright (C) 2007, 2008, 2012 Mark Adler
+ * Version 1.4 18 August 2012 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
+ */
+
+/*
+ Examine all possible Huffman codes for a given number of symbols and a
+ maximum code length in bits to determine the maximum table size for zilb's
+ inflate. Only complete Huffman 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
+ remaining.
+
+ 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 in the current inflate implementation). The 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 2^(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 Huffman 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 Huffman 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 an unsigned long long 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 unsigned long long arithmetic in that case. This
+ program will abort if an overflow occurs. The big_t type identifies where
+ the counting takes place.
+
+ An unsigned long long 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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#define local static
+
+/* special data types */
+typedef unsigned long long big_t; /* type for code counting */
+typedef unsigned long long code_t; /* type for bit pattern counting */
+struct tab { /* type for been here check */
+ size_t len; /* length of bit vector in char's */
+ 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
+ count() 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 Huffman 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 beenhere() for the details.
+
+ For the deflate example of 286 symbols limited to 15-bit codes, the bit
+ vectors grow to total approximately 21 MB, in addition to the 4.3 MB done[]
+ array itself.
+ */
+
+/* Globals to avoid propagating constants or constant pointers recursively */
+local int max; /* maximum allowed bit length for the codes */
+local int root; /* size of base code table in bits */
+local int large; /* largest code table so far */
+local size_t size; /* number of elements in num and done */
+local int *code; /* number of symbols assigned to each bit length */
+local big_t *num; /* saved results array for code counting */
+local struct tab *done; /* states already evaluated array */
+
+/* Index function for num[] and done[] */
+#define INDEX(i,j,k) (((size_t)((i-1)>>1)*((i-2)>>1)+(j>>1)-1)*(max-1)+k-1)
+
+/* Free allocated space. Uses globals code, num, and done. */
+local void cleanup(void)
+{
+ size_t n;
+
+ if (done != NULL) {
+ for (n = 0; n < size; n++)
+ if (done[n].len)
+ free(done[n].vec);
+ free(done);
+ }
+ if (num != NULL)
+ free(num);
+ if (code != NULL)
+ free(code);
+}
+
+/* Return the number of possible Huffman 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. Uses the globals max and num. */
+local big_t count(int syms, int len, int left)
+{
+ big_t sum; /* number of possible codes from this juncture */
+ big_t got; /* value returned from count() */
+ int least; /* least number of syms to use at this juncture */
+ int most; /* most number of syms to use at this juncture */
+ int use; /* number of bit patterns to use in next call */
+ size_t index; /* index of this case in *num */
+
+ /* see if only one possible code */
+ if (syms == left)
+ return 1;
+
+ /* note and verify the expected state */
+ assert(syms > left && left > 0 && len < max);
+
+ /* see if we've done this one already */
+ index = INDEX(syms, left, len);
+ got = 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) */
+ 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) */
+ most = (((code_t)left << (max - len)) - syms) /
+ (((code_t)1 << (max - len)) - 1);
+
+ /* count all possible codes from this juncture and add them up */
+ sum = 0;
+ for (use = least; use <= most; use++) {
+ got = count(syms - use, len + 1, (left - use) << 1);
+ sum += got;
+ if (got == (big_t)0 - 1 || sum < got) /* overflow */
+ return (big_t)0 - 1;
+ }
+
+ /* verify that all recursive calls are productive */
+ assert(sum != 0);
+
+ /* save the result and return it */
+ 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 if needed to allow setting the (mem,rem) bit. */
+local int beenhere(int syms, int len, int left, int mem, int rem)
+{
+ size_t index; /* index for this state's bit vector */
+ size_t offset; /* offset in this state's bit vector */
+ int bit; /* mask for this state's bit */
+ size_t length; /* length of the bit vector in bytes */
+ char *vector; /* new or enlarged bit vector */
+
+ /* point to vector for (syms,left,len), bit in vector for (mem,rem) */
+ index = INDEX(syms, left, len);
+ mem -= 1 << root;
+ offset = (mem >> 3) + rem;
+ offset = ((offset * (offset + 1)) >> 1) + rem;
+ bit = 1 << (mem & 7);
+
+ /* see if we've been here */
+ length = done[index].len;
+ if (offset < length && (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 */
+ if (length) {
+ do {
+ length <<= 1;
+ } while (length <= offset);
+ vector = realloc(done[index].vec, length);
+ if (vector != NULL)
+ memset(vector + done[index].len, 0, length - done[index].len);
+ }
+
+ /* otherwise we need to make a new vector and zero it out */
+ else {
+ length = 1 << (len - root);
+ while (length <= offset)
+ length <<= 1;
+ vector = calloc(length, sizeof(char));
+ }
+
+ /* in either case, bail if we can't get the memory */
+ if (vector == NULL) {
+ fputs("abort: unable to allocate enough memory\n", stderr);
+ cleanup();
+ exit(1);
+ }
+
+ /* install the new vector */
+ done[index].len = length;
+ done[index].vec = vector;
+ }
+
+ /* set the bit */
+ 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. Uses the globals max, code, root, large, and
+ done. */
+local void examine(int syms, int len, int left, int mem, int rem)
+{
+ int least; /* least number of syms to use at this juncture */
+ int most; /* most number of syms to use at this juncture */
+ int use; /* number of bit patterns to use in next call */
+
+ /* see if we have a complete code */
+ if (syms == left) {
+ /* set the last code entry */
+ code[len] = left;
+
+ /* complete computation of memory used by this code */
+ while (rem < left) {
+ left -= rem;
+ rem = 1 << (len - root);
+ mem += rem;
+ }
+ assert(rem == left);
+
+ /* if this is a new maximum, show the entries used and the sub-code */
+ if (mem > large) {
+ large = mem;
+ printf("max %d: ", mem);
+ for (use = root + 1; use <= max; use++)
+ if (code[use])
+ printf("%d[%d] ", code[use], use);
+ putchar('\n');
+ fflush(stdout);
+ }
+
+ /* remove entries as we drop back down in the recursion */
+ code[len] = 0;
+ return;
+ }
+
+ /* prune the tree if we can */
+ if (beenhere(syms, len, left, 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) */
+ 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) */
+ most = (((code_t)left << (max - len)) - syms) /
+ (((code_t)1 << (max - len)) - 1);
+
+ /* occupy least table spaces, creating new sub-tables as needed */
+ use = least;
+ while (rem < use) {
+ use -= rem;
+ rem = 1 << (len - root);
+ mem += rem;
+ }
+ rem -= use;
+
+ /* examine codes from here, updating table space as we go */
+ for (use = least; use <= most; use++) {
+ code[len] = use;
+ examine(syms - use, len + 1, (left - use) << 1,
+ mem + (rem ? 1 << (len - root) : 0), rem << 1);
+ if (rem == 0) {
+ rem = 1 << (len - root);
+ mem += rem;
+ }
+ rem--;
+ }
+
+ /* remove entries as we drop back down in the recursion */
+ 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 code that
+ requires that maximum. Uses the globals max, root, and num. */
+local void enough(int syms)
+{
+ int n; /* number of remaing symbols for this node */
+ int left; /* number of unused bit patterns at this length */
+ size_t index; /* index of this case in *num */
+
+ /* clear code */
+ for (n = 0; n <= max; n++)
+ code[n] = 0;
+
+ /* look at all (root + 1) bit and longer codes */
+ large = 1 << root; /* base table */
+ if (root < max) /* otherwise, there's only a base table */
+ for (n = 3; n <= syms; n++)
+ for (left = 2; left < n; left += 2)
+ {
+ /* look at all reachable (root + 1) bit nodes, and the
+ resulting codes (complete at root + 2 or more) */
+ index = INDEX(n, left, root + 1);
+ if (root + 1 < max && num[index]) /* reachable node */
+ examine(n, root + 1, left, 1 << root, 0);
+
+ /* also look at root bit codes with completions at root + 1
+ bits (not saved in num, since complete), just in case */
+ if (num[index - 1] && n <= left << 1)
+ examine((n - left) << 1, root + 1, (n - left) << 1,
+ 1 << root, 0);
+ }
+
+ /* done */
+ printf("done: maximum of %d table entries\n", large);
+}
+
+/*
+ Examine and show the total number of possible Huffman 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 entires 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 Huffman 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".
+
+ This uses the %llu printf format to print big_t numbers, which assumes that
+ big_t is an unsigned long long. If the big_t type is changed (for example
+ to a multiple precision type), the method of printing will also need to be
+ updated.
+ */
+int main(int argc, char **argv)
+{
+ int syms; /* total number of symbols to code */
+ int n; /* number of symbols to code for this run */
+ big_t got; /* return value of count() */
+ big_t sum; /* accumulated number of codes over n */
+ code_t word; /* for counting bits in code_t */
+
+ /* set up globals for cleanup() */
+ code = NULL;
+ num = NULL;
+ done = NULL;
+
+ /* get arguments -- default to the deflate literal/length code */
+ syms = 286;
+ root = 9;
+ max = 15;
+ if (argc > 1) {
+ syms = atoi(argv[1]);
+ if (argc > 2) {
+ root = atoi(argv[2]);
+ if (argc > 3)
+ max = atoi(argv[3]);
+ }
+ }
+ if (argc > 4 || syms < 2 || root < 1 || 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 (max > syms - 1)
+ max = syms - 1;
+
+ /* determine the number of bits in a code_t */
+ for (n = 0, word = 1; word; n++, word <<= 1)
+ ;
+
+ /* make sure that the calculation of most will not overflow */
+ if (max > n || (code_t)(syms - 2) >= (((code_t)0 - 1) >> (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 << max) - 1) {
+ fprintf(stderr, "%d symbols cannot be coded in %d bits\n",
+ syms, max);
+ return 1;
+ }
+
+ /* allocate code vector */
+ code = calloc(max + 1, sizeof(int));
+ if (code == NULL) {
+ fputs("abort: unable to allocate enough memory\n", stderr);
+ return 1;
+ }
+
+ /* 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 */
+ num = NULL; /* won't be saving any results */
+ else {
+ size = syms >> 1;
+ if (size > ((size_t)0 - 1) / (n = (syms - 1) >> 1) ||
+ (size *= n, size > ((size_t)0 - 1) / (n = max - 1)) ||
+ (size *= n, size > ((size_t)0 - 1) / sizeof(big_t)) ||
+ (num = calloc(size, sizeof(big_t))) == NULL) {
+ fputs("abort: unable to allocate enough memory\n", stderr);
+ cleanup();
+ return 1;
+ }
+ }
+
+ /* count possible codes for all numbers of symbols, add up counts */
+ sum = 0;
+ for (n = 2; n <= syms; n++) {
+ got = count(n, 1, 2);
+ sum += got;
+ if (got == (big_t)0 - 1 || sum < got) { /* overflow */
+ fputs("abort: can't count that high!\n", stderr);
+ cleanup();
+ return 1;
+ }
+ printf("%llu %d-codes\n", got, n);
+ }
+ printf("%llu total codes for 2 to %d symbols", sum, syms);
+ if (max < syms - 1)
+ printf(" (%d-bit length limit)\n", max);
+ else
+ puts(" (no length limit)");
+
+ /* allocate and clear done array for beenhere() */
+ if (syms == 2)
+ done = NULL;
+ else if (size > ((size_t)0 - 1) / sizeof(struct tab) ||
+ (done = calloc(size, sizeof(struct tab))) == NULL) {
+ fputs("abort: unable to allocate enough memory\n", stderr);
+ cleanup();
+ return 1;
+ }
+
+ /* find and show maximum inflate table usage */
+ if (root > max) /* reduce root to max length */
+ root = max;
+ if ((code_t)syms < ((code_t)1 << (root + 1)))
+ enough(syms);
+ else
+ puts("cannot handle minimum code lengths > root");
+
+ /* done */
+ cleanup();
+ return 0;
+}
diff --git a/protocols/Telegram/tgl/zlib/examples/fitblk.c b/protocols/Telegram/tgl/zlib/examples/fitblk.c
new file mode 100644
index 0000000000..c61de5c996
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 specfied 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 <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#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 decompresed 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 reocmpression */
+ 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/protocols/Telegram/tgl/zlib/examples/gun.c b/protocols/Telegram/tgl/zlib/examples/gun.c
new file mode 100644
index 0000000000..89e484fee6
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 concantenated. 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 orignal 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 <stdio.h> /* fprintf() */
+#include <stdlib.h> /* malloc(), free() */
+#include <string.h> /* strerror(), strcmp(), strlen(), memcpy() */
+#include <errno.h> /* errno */
+#include <fcntl.h> /* open() */
+#include <unistd.h> /* read(), write(), close(), chown(), unlink() */
+#include <sys/types.h>
+#include <sys/stat.h> /* stat(), chmod() */
+#include <utime.h> /* 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/protocols/Telegram/tgl/zlib/examples/gzappend.c b/protocols/Telegram/tgl/zlib/examples/gzappend.c
new file mode 100644
index 0000000000..662dec3794
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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
+ * - Simplfy 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 unusued 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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+#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;
+ memcpy(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/protocols/Telegram/tgl/zlib/examples/gzjoin.c b/protocols/Telegram/tgl/zlib/examples/gzjoin.c
new file mode 100644
index 0000000000..89e8098441
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 <stdio.h> /* fputs(), fprintf(), fwrite(), putc() */
+#include <stdlib.h> /* exit(), malloc(), free() */
+#include <fcntl.h> /* open() */
+#include <unistd.h> /* 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/protocols/Telegram/tgl/zlib/examples/gzlog.c b/protocols/Telegram/tgl/zlib/examples/gzlog.c
new file mode 100644
index 0000000000..922f878dde
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/examples/gzlog.c
@@ -0,0 +1,1059 @@
+/*
+ * gzlog.c
+ * Copyright (C) 2004, 2008, 2012 Mark Adler, all rights reserved
+ * For conditions of distribution and use, see copyright notice in gzlog.h
+ * version 2.2, 14 Aug 2012
+ */
+
+/*
+ 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 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 <sys/types.h>
+#include <stdio.h> /* rename, fopen, fprintf, fclose */
+#include <stdlib.h> /* malloc, free */
+#include <string.h> /* strlen, strrchr, strcpy, strncpy, strcmp */
+#include <fcntl.h> /* open */
+#include <unistd.h> /* lseek, read, write, close, unlink, sleep, */
+ /* ftruncate, fsync */
+#include <errno.h> /* errno */
+#include <time.h> /* time, ctime */
+#include <sys/stat.h> /* stat */
+#include <sys/time.h> /* 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 DEBUG
+ #include <setjmp.h> /* 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) {
+ log_log(log, op, ".add file read failure");
+ return -1;
+ }
+ ret = (size_t)read(fd, data, len) != len;
+ close(fd);
+ if (ret) {
+ 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/protocols/Telegram/tgl/zlib/examples/gzlog.h b/protocols/Telegram/tgl/zlib/examples/gzlog.h
new file mode 100644
index 0000000000..86f0cecba5
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 interupted 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/protocols/Telegram/tgl/zlib/examples/zlib_how.html b/protocols/Telegram/tgl/zlib/examples/zlib_how.html
new file mode 100644
index 0000000000..444ff1c9a3
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/examples/zlib_how.html
@@ -0,0 +1,545 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+ "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>zlib Usage Example</title>
+<!-- Copyright (c) 2004, 2005 Mark Adler. -->
+</head>
+<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#00A000">
+<h2 align="center"> zlib Usage Example </h2>
+We often get questions about how the <tt>deflate()</tt> and <tt>inflate()</tt> functions should be used.
+Users wonder when they should provide more input, when they should use more output,
+what to do with a <tt>Z_BUF_ERROR</tt>, how to make sure the process terminates properly, and
+so on. So for those who have read <tt>zlib.h</tt> (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 <tt>deflate()</tt> and <tt>inflate()</tt> 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 <em>zlib</em>.
+<p>
+Without further adieu, here is the program <a href="zpipe.c"><tt>zpipe.c</tt></a>:
+<pre><b>
+/* 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
+ */
+</b></pre><!-- -->
+We now include the header files for the required definitions. From
+<tt>stdio.h</tt> we use <tt>fopen()</tt>, <tt>fread()</tt>, <tt>fwrite()</tt>,
+<tt>feof()</tt>, <tt>ferror()</tt>, and <tt>fclose()</tt> for file i/o, and
+<tt>fputs()</tt> for error messages. From <tt>string.h</tt> we use
+<tt>strcmp()</tt> for command line argument processing.
+From <tt>assert.h</tt> we use the <tt>assert()</tt> macro.
+From <tt>zlib.h</tt>
+we use the basic compression functions <tt>deflateInit()</tt>,
+<tt>deflate()</tt>, and <tt>deflateEnd()</tt>, and the basic decompression
+functions <tt>inflateInit()</tt>, <tt>inflate()</tt>, and
+<tt>inflateEnd()</tt>.
+<pre><b>
+#include &lt;stdio.h&gt;
+#include &lt;string.h&gt;
+#include &lt;assert.h&gt;
+#include "zlib.h"
+</b></pre><!-- -->
+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.
+<tt>SET_BINARY_MODE()</tt> will be used later on <tt>stdin</tt> and <tt>stdout</tt>, at the beginning of <tt>main()</tt>.
+<pre><b>
+#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
+# include &lt;fcntl.h&gt;
+# include &lt;io.h&gt;
+# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
+#else
+# define SET_BINARY_MODE(file)
+#endif
+</b></pre><!-- -->
+<tt>CHUNK</tt> is simply the buffer size for feeding data to and pulling data
+from the <em>zlib</em> routines. Larger buffer sizes would be more efficient,
+especially for <tt>inflate()</tt>. If the memory is available, buffers sizes
+on the order of 128K or 256K bytes should be used.
+<pre><b>
+#define CHUNK 16384
+</b></pre><!-- -->
+The <tt>def()</tt> routine compresses data from an input file to an output file. The output data
+will be in the <em>zlib</em> format, which is different from the <em>gzip</em> or <em>zip</em>
+formats. The <em>zlib</em> format has a very small header of only two bytes to identify it as
+a <em>zlib</em> 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.
+<pre><b>
+/* 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)
+{
+</b></pre>
+Here are the local variables for <tt>def()</tt>. <tt>ret</tt> will be used for <em>zlib</em>
+return codes. <tt>flush</tt> will keep track of the current flushing state for <tt>deflate()</tt>,
+which is either no flushing, or flush to completion after the end of the input file is reached.
+<tt>have</tt> is the amount of data returned from <tt>deflate()</tt>. The <tt>strm</tt> structure
+is used to pass information to and from the <em>zlib</em> routines, and to maintain the
+<tt>deflate()</tt> state. <tt>in</tt> and <tt>out</tt> are the input and output buffers for
+<tt>deflate()</tt>.
+<pre><b>
+ int ret, flush;
+ unsigned have;
+ z_stream strm;
+ unsigned char in[CHUNK];
+ unsigned char out[CHUNK];
+</b></pre><!-- -->
+The first thing we do is to initialize the <em>zlib</em> state for compression using
+<tt>deflateInit()</tt>. This must be done before the first use of <tt>deflate()</tt>.
+The <tt>zalloc</tt>, <tt>zfree</tt>, and <tt>opaque</tt> fields in the <tt>strm</tt>
+structure must be initialized before calling <tt>deflateInit()</tt>. Here they are
+set to the <em>zlib</em> constant <tt>Z_NULL</tt> to request that <em>zlib</em> use
+the default memory allocation routines. An application may also choose to provide
+custom memory allocation routines here. <tt>deflateInit()</tt> will allocate on the
+order of 256K bytes for the internal state.
+(See <a href="zlib_tech.html"><em>zlib Technical Details</em></a>.)
+<p>
+<tt>deflateInit()</tt> 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 <em>zlib</em> 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 <em>zlib</em> format (it is not a byte-for-byte copy of the input).
+More advanced applications of <em>zlib</em>
+may use <tt>deflateInit2()</tt> 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
+<em>gzip</em> header and trailer instead of a <em>zlib</em> header and trailer, or raw
+encoding with no header or trailer at all.
+<p>
+We must check the return value of <tt>deflateInit()</tt> against the <em>zlib</em> constant
+<tt>Z_OK</tt> to make sure that it was able to
+allocate memory for the internal state, and that the provided arguments were valid.
+<tt>deflateInit()</tt> will also check that the version of <em>zlib</em> that the <tt>zlib.h</tt>
+file came from matches the version of <em>zlib</em> actually linked with the program. This
+is especially important for environments in which <em>zlib</em> is a shared library.
+<p>
+Note that an application can initialize multiple, independent <em>zlib</em> streams, which can
+operate in parallel. The state information maintained in the structure allows the <em>zlib</em>
+routines to be reentrant.
+<pre><b>
+ /* allocate deflate state */
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ ret = deflateInit(&amp;strm, level);
+ if (ret != Z_OK)
+ return ret;
+</b></pre><!-- -->
+With the pleasantries out of the way, now we can get down to business. The outer <tt>do</tt>-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 <tt>deflate()</tt>. 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.
+<pre><b>
+ /* compress until end of file */
+ do {
+</b></pre>
+We start off by reading data from the input file. The number of bytes read is put directly
+into <tt>avail_in</tt>, and a pointer to those bytes is put into <tt>next_in</tt>. We also
+check to see if end-of-file on the input has been reached. If we are at the end of file, then <tt>flush</tt> is set to the
+<em>zlib</em> constant <tt>Z_FINISH</tt>, which is later passed to <tt>deflate()</tt> to
+indicate that this is the last chunk of input data to compress. We need to use <tt>feof()</tt>
+to check for end-of-file as opposed to seeing if fewer than <tt>CHUNK</tt> bytes have been read. The
+reason is that if the input file length is an exact multiple of <tt>CHUNK</tt>, we will miss
+the fact that we got to the end-of-file, and not know to tell <tt>deflate()</tt> to finish
+up the compressed stream. If we are not yet at the end of the input, then the <em>zlib</em>
+constant <tt>Z_NO_FLUSH</tt> will be passed to <tt>deflate</tt> to indicate that we are still
+in the middle of the uncompressed data.
+<p>
+If there is an error in reading from the input file, the process is aborted with
+<tt>deflateEnd()</tt> being called to free the allocated <em>zlib</em> state before returning
+the error. We wouldn't want a memory leak, now would we? <tt>deflateEnd()</tt> can be called
+at any time after the state has been initialized. Once that's done, <tt>deflateInit()</tt> (or
+<tt>deflateInit2()</tt>) would have to be called to start a new compression process. There is
+no point here in checking the <tt>deflateEnd()</tt> return code. The deallocation can't fail.
+<pre><b>
+ strm.avail_in = fread(in, 1, CHUNK, source);
+ if (ferror(source)) {
+ (void)deflateEnd(&amp;strm);
+ return Z_ERRNO;
+ }
+ flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;
+ strm.next_in = in;
+</b></pre><!-- -->
+The inner <tt>do</tt>-loop passes our chunk of input data to <tt>deflate()</tt>, and then
+keeps calling <tt>deflate()</tt> until it is done producing output. Once there is no more
+new output, <tt>deflate()</tt> is guaranteed to have consumed all of the input, i.e.,
+<tt>avail_in</tt> will be zero.
+<pre><b>
+ /* run deflate() on input until output buffer not full, finish
+ compression if all of source has been read in */
+ do {
+</b></pre>
+Output space is provided to <tt>deflate()</tt> by setting <tt>avail_out</tt> to the number
+of available output bytes and <tt>next_out</tt> to a pointer to that space.
+<pre><b>
+ strm.avail_out = CHUNK;
+ strm.next_out = out;
+</b></pre>
+Now we call the compression engine itself, <tt>deflate()</tt>. It takes as many of the
+<tt>avail_in</tt> bytes at <tt>next_in</tt> as it can process, and writes as many as
+<tt>avail_out</tt> bytes to <tt>next_out</tt>. 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 <tt>avail_in</tt>
+and <tt>next_in</tt> are updated by <tt>deflate()</tt>, we don't have to mess with those
+between <tt>deflate()</tt> calls until it's all used up.
+<p>
+The parameters to <tt>deflate()</tt> are a pointer to the <tt>strm</tt> 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 <tt>deflate</tt> 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,
+<tt>deflate()</tt>
+must be told to terminate the stream, complete the compression with provided input data, and
+write out the trailer check value. <tt>deflate()</tt> will continue to compress normally as long
+as the flush parameter is <tt>Z_NO_FLUSH</tt>. Once the <tt>Z_FINISH</tt> parameter is provided,
+<tt>deflate()</tt> will begin to complete the compressed output stream. However depending on how
+much output space is provided, <tt>deflate()</tt> 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 <tt>Z_FINISH</tt> for those subsequent calls.
+<p>
+There are other values of the flush parameter that are used in more advanced applications. You can
+force <tt>deflate()</tt> 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 <tt>deflate()</tt> 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.
+<p>
+<tt>deflate()</tt> has a return value that can indicate errors, yet we do not check it here. Why
+not? Well, it turns out that <tt>deflate()</tt> can do no wrong here. Let's go through
+<tt>deflate()</tt>'s return values and dispense with them one by one. The possible values are
+<tt>Z_OK</tt>, <tt>Z_STREAM_END</tt>, <tt>Z_STREAM_ERROR</tt>, or <tt>Z_BUF_ERROR</tt>. <tt>Z_OK</tt>
+is, well, ok. <tt>Z_STREAM_END</tt> is also ok and will be returned for the last call of
+<tt>deflate()</tt>. This is already guaranteed by calling <tt>deflate()</tt> with <tt>Z_FINISH</tt>
+until it has no more output. <tt>Z_STREAM_ERROR</tt> is only possible if the stream is not
+initialized properly, but we did initialize it properly. There is no harm in checking for
+<tt>Z_STREAM_ERROR</tt> here, for example to check for the possibility that some
+other part of the application inadvertently clobbered the memory containing the <em>zlib</em> state.
+<tt>Z_BUF_ERROR</tt> will be explained further below, but
+suffice it to say that this is simply an indication that <tt>deflate()</tt> could not consume
+more input or produce more output. <tt>deflate()</tt> can be called again with more output space
+or more available input, which it will be in this code.
+<pre><b>
+ ret = deflate(&amp;strm, flush); /* no bad return value */
+ assert(ret != Z_STREAM_ERROR); /* state not clobbered */
+</b></pre>
+Now we compute how much output <tt>deflate()</tt> 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 <tt>deflate()</tt>. Again if there
+is a file i/o error, we call <tt>deflateEnd()</tt> before returning to avoid a memory leak.
+<pre><b>
+ have = CHUNK - strm.avail_out;
+ if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
+ (void)deflateEnd(&amp;strm);
+ return Z_ERRNO;
+ }
+</b></pre>
+The inner <tt>do</tt>-loop is repeated until the last <tt>deflate()</tt> call fails to fill the
+provided output buffer. Then we know that <tt>deflate()</tt> 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.
+<p>
+The way we tell that <tt>deflate()</tt> has no more output is by seeing that it did not fill
+the output buffer, leaving <tt>avail_out</tt> greater than zero. However suppose that
+<tt>deflate()</tt> has no more output, but just so happened to exactly fill the output buffer!
+<tt>avail_out</tt> is zero, and we can't tell that <tt>deflate()</tt> has done all it can.
+As far as we know, <tt>deflate()</tt>
+has more output for us. So we call it again. But now <tt>deflate()</tt> produces no output
+at all, and <tt>avail_out</tt> remains unchanged as <tt>CHUNK</tt>. That <tt>deflate()</tt> call
+wasn't able to do anything, either consume input or produce output, and so it returns
+<tt>Z_BUF_ERROR</tt>. (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 <tt>deflate()</tt> is really done,
+and so we drop out of the inner loop to provide more input to <tt>deflate()</tt>.
+<p>
+With <tt>flush</tt> set to <tt>Z_FINISH</tt>, this final set of <tt>deflate()</tt> calls will
+complete the output stream. Once that is done, subsequent calls of <tt>deflate()</tt> would return
+<tt>Z_STREAM_ERROR</tt> if the flush parameter is not <tt>Z_FINISH</tt>, and do no more processing
+until the state is reinitialized.
+<p>
+Some applications of <em>zlib</em> have two loops that call <tt>deflate()</tt>
+instead of the single inner loop we have here. The first loop would call
+without flushing and feed all of the data to <tt>deflate()</tt>. The second loop would call
+<tt>deflate()</tt> with no more
+data and the <tt>Z_FINISH</tt> 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.
+<pre><b>
+ } while (strm.avail_out == 0);
+ assert(strm.avail_in == 0); /* all input will be used */
+</b></pre><!-- -->
+Now we check to see if we have already processed all of the input file. That information was
+saved in the <tt>flush</tt> variable, so we see if that was set to <tt>Z_FINISH</tt>. If so,
+then we're done and we fall out of the outer loop. We're guaranteed to get <tt>Z_STREAM_END</tt>
+from the last <tt>deflate()</tt> call, since we ran it until the last chunk of input was
+consumed and all of the output was generated.
+<pre><b>
+ /* done when last data in file processed */
+ } while (flush != Z_FINISH);
+ assert(ret == Z_STREAM_END); /* stream will be complete */
+</b></pre><!-- -->
+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.
+<pre><b>
+ /* clean up and return */
+ (void)deflateEnd(&amp;strm);
+ return Z_OK;
+}
+</b></pre><!-- -->
+Now we do the same thing for decompression in the <tt>inf()</tt> routine. <tt>inf()</tt>
+decompresses what is hopefully a valid <em>zlib</em> stream from the input file and writes the
+uncompressed data to the output file. Much of the discussion above for <tt>def()</tt>
+applies to <tt>inf()</tt> as well, so the discussion here will focus on the differences between
+the two.
+<pre><b>
+/* 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)
+{
+</b></pre>
+The local variables have the same functionality as they do for <tt>def()</tt>. The
+only difference is that there is no <tt>flush</tt> variable, since <tt>inflate()</tt>
+can tell from the <em>zlib</em> stream itself when the stream is complete.
+<pre><b>
+ int ret;
+ unsigned have;
+ z_stream strm;
+ unsigned char in[CHUNK];
+ unsigned char out[CHUNK];
+</b></pre><!-- -->
+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. <tt>avail_in</tt>
+and <tt>next_in</tt> must be initialized before calling <tt>inflateInit()</tt>. This
+is because the application has the option to provide the start of the zlib stream in
+order for <tt>inflateInit()</tt> to have access to information about the compression
+method to aid in memory allocation. In the current implementation of <em>zlib</em>
+(up through versions 1.2.x), the method-dependent memory allocations are deferred to the first call of
+<tt>inflate()</tt> anyway. However those fields must be initialized since later versions
+of <em>zlib</em> that provide more compression methods may take advantage of this interface.
+In any case, no decompression is performed by <tt>inflateInit()</tt>, so the
+<tt>avail_out</tt> and <tt>next_out</tt> fields do not need to be initialized before calling.
+<p>
+Here <tt>avail_in</tt> is set to zero and <tt>next_in</tt> is set to <tt>Z_NULL</tt> to
+indicate that no input data is being provided.
+<pre><b>
+ /* 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(&amp;strm);
+ if (ret != Z_OK)
+ return ret;
+</b></pre><!-- -->
+The outer <tt>do</tt>-loop decompresses input until <tt>inflate()</tt> indicates
+that it has reached the end of the compressed data and has produced all of the uncompressed
+output. This is in contrast to <tt>def()</tt> 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.
+<pre><b>
+ /* decompress until deflate stream ends or end of file */
+ do {
+</b></pre>
+We read input data and set the <tt>strm</tt> 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 <tt>inflate()</tt>, if the input file continues past the <em>zlib</em> stream.
+For applications where <em>zlib</em> 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 <em>zlib</em> stream.
+<pre><b>
+ strm.avail_in = fread(in, 1, CHUNK, source);
+ if (ferror(source)) {
+ (void)inflateEnd(&amp;strm);
+ return Z_ERRNO;
+ }
+ if (strm.avail_in == 0)
+ break;
+ strm.next_in = in;
+</b></pre><!-- -->
+The inner <tt>do</tt>-loop has the same function it did in <tt>def()</tt>, which is to
+keep calling <tt>inflate()</tt> until has generated all of the output it can with the
+provided input.
+<pre><b>
+ /* run inflate() on input until output buffer not full */
+ do {
+</b></pre>
+Just like in <tt>def()</tt>, the same output space is provided for each call of <tt>inflate()</tt>.
+<pre><b>
+ strm.avail_out = CHUNK;
+ strm.next_out = out;
+</b></pre>
+Now we run the decompression engine itself. There is no need to adjust the flush parameter, since
+the <em>zlib</em> format is self-terminating. The main difference here is that there are
+return values that we need to pay attention to. <tt>Z_DATA_ERROR</tt>
+indicates that <tt>inflate()</tt> detected an error in the <em>zlib</em> compressed data format,
+which means that either the data is not a <em>zlib</em> 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
+<tt>Z_MEM_ERROR</tt>, which can occur since memory allocation is deferred until <tt>inflate()</tt>
+needs it, unlike <tt>deflate()</tt>, whose memory is allocated at the start by <tt>deflateInit()</tt>.
+<p>
+Advanced applications may use
+<tt>deflateSetDictionary()</tt> to prime <tt>deflate()</tt> with a set of likely data to improve the
+first 32K or so of compression. This is noted in the <em>zlib</em> header, so <tt>inflate()</tt>
+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 <tt>Z_NEED_DICT</tt> indication is converted to a <tt>Z_DATA_ERROR</tt>.
+<p>
+<tt>inflate()</tt> can also return <tt>Z_STREAM_ERROR</tt>, which should not be possible here,
+but could be checked for as noted above for <tt>def()</tt>. <tt>Z_BUF_ERROR</tt> does not need to be
+checked for here, for the same reasons noted for <tt>def()</tt>. <tt>Z_STREAM_END</tt> will be
+checked for later.
+<pre><b>
+ ret = inflate(&amp;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(&amp;strm);
+ return ret;
+ }
+</b></pre>
+The output of <tt>inflate()</tt> is handled identically to that of <tt>deflate()</tt>.
+<pre><b>
+ have = CHUNK - strm.avail_out;
+ if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
+ (void)inflateEnd(&amp;strm);
+ return Z_ERRNO;
+ }
+</b></pre>
+The inner <tt>do</tt>-loop ends when <tt>inflate()</tt> has no more output as indicated
+by not filling the output buffer, just as for <tt>deflate()</tt>. In this case, we cannot
+assert that <tt>strm.avail_in</tt> will be zero, since the deflate stream may end before the file
+does.
+<pre><b>
+ } while (strm.avail_out == 0);
+</b></pre><!-- -->
+The outer <tt>do</tt>-loop ends when <tt>inflate()</tt> reports that it has reached the
+end of the input <em>zlib</em> stream, has completed the decompression and integrity
+check, and has provided all of the output. This is indicated by the <tt>inflate()</tt>
+return value <tt>Z_STREAM_END</tt>. The inner loop is guaranteed to leave <tt>ret</tt>
+equal to <tt>Z_STREAM_END</tt> if the last chunk of the input file read contained the end
+of the <em>zlib</em> stream. So if the return value is not <tt>Z_STREAM_END</tt>, the
+loop continues to read more input.
+<pre><b>
+ /* done when inflate() says it's done */
+ } while (ret != Z_STREAM_END);
+</b></pre><!-- -->
+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 <tt>inflate()</tt> return value
+is not <tt>Z_STREAM_END</tt>, then the <em>zlib</em> stream was incomplete and a data error
+is returned. Otherwise, we return with a happy return value. Of course, <tt>inflateEnd()</tt>
+is called first to avoid a memory leak.
+<pre><b>
+ /* clean up and return */
+ (void)inflateEnd(&amp;strm);
+ return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR;
+}
+</b></pre><!-- -->
+That ends the routines that directly use <em>zlib</em>. The following routines make this
+a command-line program by running data through the above routines from <tt>stdin</tt> to
+<tt>stdout</tt>, and handling any errors reported by <tt>def()</tt> or <tt>inf()</tt>.
+<p>
+<tt>zerr()</tt> is used to interpret the possible error codes from <tt>def()</tt>
+and <tt>inf()</tt>, 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 <tt>deflate()</tt>
+and <tt>inflate()</tt>.
+<pre><b>
+/* 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);
+ }
+}
+</b></pre><!-- -->
+Here is the <tt>main()</tt> routine used to test <tt>def()</tt> and <tt>inf()</tt>. The
+<tt>zpipe</tt> command is simply a compression pipe from <tt>stdin</tt> to <tt>stdout</tt>, if
+no arguments are given, or it is a decompression pipe if <tt>zpipe -d</tt> is used. If any other
+arguments are provided, no compression or decompression is performed. Instead a usage
+message is displayed. Examples are <tt>zpipe < foo.txt > foo.txt.z</tt> to compress, and
+<tt>zpipe -d < foo.txt.z > foo.txt</tt> to decompress.
+<pre><b>
+/* 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 &amp;&amp; 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] &lt; source &gt; dest\n", stderr);
+ return 1;
+ }
+}
+</b></pre>
+<hr>
+<i>Copyright (c) 2004, 2005 by Mark Adler<br>Last modified 11 December 2005</i>
+</body>
+</html>
diff --git a/protocols/Telegram/tgl/zlib/examples/zpipe.c b/protocols/Telegram/tgl/zlib/examples/zpipe.c
new file mode 100644
index 0000000000..83535d1693
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include "zlib.h"
+
+#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
+
+#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/protocols/Telegram/tgl/zlib/examples/zran.c b/protocols/Telegram/tgl/zlib/examples/zran.c
new file mode 100644
index 0000000000..278f9ad07d
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/examples/zran.c
@@ -0,0 +1,409 @@
+/* zran.c -- example of zlib/gzip stream indexing and random access
+ * Copyright (C) 2005, 2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ Version 1.1 29 Sep 2012 Mark Adler */
+
+/* Version History:
+ 1.0 29 May 2005 First version
+ 1.1 29 Sep 2012 Fix memory reallocation error
+ */
+
+/* Illustrate the use of Z_BLOCK, inflatePrime(), and inflateSetDictionary()
+ for random access of a compressed file. A file containing a zlib or gzip
+ 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 referece for locating a desired starting
+ point in the uncompressed stream. build_index() works by decompressing the
+ input zlib or gzip stream a block at a time, and at the end of each block
+ deciding 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 accees 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
+ the decompression then proceeds until the desired offset in the file is
+ reached. Then the decompression continues to read the desired uncompressed
+ data from the file.
+
+ Another approach would be to generate the index on demand. In that case,
+ requests for random access reads from the compressed data would try to use
+ the index, but if a read far enough past the end of the index is required,
+ then further index entries would be generated and added.
+
+ There is some fair bit of overhead to starting inflation for the random
+ access, mainly copying the 32K byte dictionary. So if small pieces of the
+ file are being accessed, it would make sense to implement a cache to hold
+ some lookahead and avoid many calls to 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 requires
+ more memory per access point, and also cannot be saved to file due to the
+ use of pointers in the state. The approach here allows for storage of the
+ index in a file.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "zlib.h"
+
+#define local static
+
+#define SPAN 1048576L /* desired distance between access points */
+#define WINSIZE 32768U /* sliding window size */
+#define CHUNK 16384 /* file input buffer size */
+
+/* access point entry */
+struct point {
+ off_t out; /* corresponding offset in uncompressed data */
+ off_t in; /* offset in input file of first full byte */
+ int bits; /* number of bits (1-7) from byte at in - 1, or 0 */
+ unsigned char window[WINSIZE]; /* preceding 32K of uncompressed data */
+};
+
+/* access point list */
+struct access {
+ int have; /* number of list entries filled in */
+ int size; /* number of list entries allocated */
+ struct point *list; /* allocated list */
+};
+
+/* Deallocate an index built by build_index() */
+local void free_index(struct access *index)
+{
+ if (index != NULL) {
+ free(index->list);
+ free(index);
+ }
+}
+
+/* Add an entry to the access point list. If out of memory, deallocate the
+ existing list and return NULL. */
+local struct access *addpoint(struct access *index, int bits,
+ off_t in, off_t out, unsigned left, unsigned char *window)
+{
+ struct point *next;
+
+ /* if list is empty, create it (start with eight points) */
+ if (index == NULL) {
+ index = malloc(sizeof(struct access));
+ if (index == NULL) return NULL;
+ index->list = malloc(sizeof(struct point) << 3);
+ if (index->list == NULL) {
+ free(index);
+ return NULL;
+ }
+ index->size = 8;
+ index->have = 0;
+ }
+
+ /* if list is full, make it bigger */
+ else if (index->have == index->size) {
+ index->size <<= 1;
+ next = realloc(index->list, sizeof(struct point) * index->size);
+ if (next == NULL) {
+ free_index(index);
+ return NULL;
+ }
+ index->list = next;
+ }
+
+ /* fill in entry and increment how many we have */
+ next = index->list + index->have;
+ next->bits = bits;
+ next->in = in;
+ next->out = out;
+ if (left)
+ memcpy(next->window, window + WINSIZE - left, left);
+ if (left < WINSIZE)
+ memcpy(next->window + left, window, WINSIZE - left);
+ index->have++;
+
+ /* return list, possibly reallocated */
+ return index;
+}
+
+/* Make one entire pass through the compressed stream and build an index, with
+ access points about every span bytes of uncompressed output -- span is
+ chosen to balance the speed of random access against the memory requirements
+ of the list, about 32K bytes per access point. Note that data after the end
+ of the first zlib or gzip stream in the file is ignored. build_index()
+ returns the number of access points on success (>= 1), Z_MEM_ERROR for out
+ of memory, Z_DATA_ERROR for an error in the input file, or Z_ERRNO for a
+ file read error. On success, *built points to the resulting index. */
+local int build_index(FILE *in, off_t span, struct access **built)
+{
+ int ret;
+ off_t totin, totout; /* our own total counters to avoid 4GB limit */
+ off_t last; /* totout value of last access point */
+ struct access *index; /* access points being generated */
+ z_stream strm;
+ unsigned char input[CHUNK];
+ unsigned char window[WINSIZE];
+
+ /* initialize inflate */
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ strm.avail_in = 0;
+ strm.next_in = Z_NULL;
+ ret = inflateInit2(&strm, 47); /* automatic zlib or gzip decoding */
+ if (ret != Z_OK)
+ return ret;
+
+ /* inflate the input, maintain a sliding window, and build an index -- this
+ also validates the integrity of the compressed data using the check
+ information at the end of the gzip or zlib stream */
+ totin = totout = last = 0;
+ index = NULL; /* will be allocated by first addpoint() */
+ strm.avail_out = 0;
+ do {
+ /* get some compressed data from input file */
+ strm.avail_in = fread(input, 1, CHUNK, in);
+ if (ferror(in)) {
+ ret = Z_ERRNO;
+ goto build_index_error;
+ }
+ if (strm.avail_in == 0) {
+ ret = Z_DATA_ERROR;
+ goto build_index_error;
+ }
+ strm.next_in = input;
+
+ /* process all of that, or until end of stream */
+ do {
+ /* reset sliding window if necessary */
+ if (strm.avail_out == 0) {
+ strm.avail_out = WINSIZE;
+ strm.next_out = window;
+ }
+
+ /* inflate until out of input, output, or at end of block --
+ update the total input and output counters */
+ totin += strm.avail_in;
+ totout += strm.avail_out;
+ ret = inflate(&strm, Z_BLOCK); /* return at end of block */
+ totin -= strm.avail_in;
+ totout -= strm.avail_out;
+ if (ret == Z_NEED_DICT)
+ ret = Z_DATA_ERROR;
+ if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
+ goto build_index_error;
+ if (ret == Z_STREAM_END)
+ break;
+
+ /* if at end of block, consider adding an index entry (note that if
+ data_type indicates an end-of-block, then all of the
+ uncompressed data from that block has been delivered, and none
+ of the compressed data after that block has been consumed,
+ except for up to seven bits) -- the totout == 0 provides an
+ entry point after the zlib or gzip header, and assures that the
+ index always has at least one access point; we avoid creating an
+ access point after the last block by checking bit 6 of data_type
+ */
+ if ((strm.data_type & 128) && !(strm.data_type & 64) &&
+ (totout == 0 || totout - last > span)) {
+ index = addpoint(index, strm.data_type & 7, totin,
+ totout, strm.avail_out, window);
+ if (index == NULL) {
+ ret = Z_MEM_ERROR;
+ goto build_index_error;
+ }
+ last = totout;
+ }
+ } while (strm.avail_in != 0);
+ } while (ret != Z_STREAM_END);
+
+ /* clean up and return index (release unused entries in list) */
+ (void)inflateEnd(&strm);
+ index->list = realloc(index->list, sizeof(struct point) * index->have);
+ index->size = index->have;
+ *built = index;
+ return index->size;
+
+ /* return error */
+ build_index_error:
+ (void)inflateEnd(&strm);
+ if (index != NULL)
+ free_index(index);
+ return ret;
+}
+
+/* Use the index to read len bytes from offset into buf, return bytes read or
+ negative for error (Z_DATA_ERROR or Z_MEM_ERROR). If data is requested past
+ the end of the uncompressed data, then extract() will return a value less
+ than len, indicating how much as actually read into buf. This function
+ should not return a data error unless the file was modified since the index
+ was generated. extract() may also return Z_ERRNO if there is an error on
+ reading or seeking the input file. */
+local int extract(FILE *in, struct access *index, off_t offset,
+ unsigned char *buf, int len)
+{
+ int ret, skip;
+ z_stream strm;
+ struct point *here;
+ unsigned char input[CHUNK];
+ unsigned char discard[WINSIZE];
+
+ /* proceed only if something reasonable to do */
+ if (len < 0)
+ return 0;
+
+ /* find where in stream to start */
+ here = index->list;
+ ret = index->have;
+ while (--ret && here[1].out <= offset)
+ here++;
+
+ /* initialize file and inflate state to start there */
+ 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); /* raw inflate */
+ if (ret != Z_OK)
+ return ret;
+ ret = fseeko(in, here->in - (here->bits ? 1 : 0), SEEK_SET);
+ if (ret == -1)
+ goto extract_ret;
+ if (here->bits) {
+ ret = getc(in);
+ if (ret == -1) {
+ ret = ferror(in) ? Z_ERRNO : Z_DATA_ERROR;
+ goto extract_ret;
+ }
+ (void)inflatePrime(&strm, here->bits, ret >> (8 - here->bits));
+ }
+ (void)inflateSetDictionary(&strm, here->window, WINSIZE);
+
+ /* skip uncompressed bytes until offset reached, then satisfy request */
+ offset -= here->out;
+ strm.avail_in = 0;
+ skip = 1; /* while skipping to offset */
+ do {
+ /* define where to put uncompressed data, and how much */
+ if (offset == 0 && skip) { /* at offset now */
+ strm.avail_out = len;
+ strm.next_out = buf;
+ skip = 0; /* only do this once */
+ }
+ if (offset > WINSIZE) { /* skip WINSIZE bytes */
+ strm.avail_out = WINSIZE;
+ strm.next_out = discard;
+ offset -= WINSIZE;
+ }
+ else if (offset != 0) { /* last skip */
+ strm.avail_out = (unsigned)offset;
+ strm.next_out = discard;
+ offset = 0;
+ }
+
+ /* uncompress until avail_out filled, or end of stream */
+ do {
+ if (strm.avail_in == 0) {
+ strm.avail_in = fread(input, 1, CHUNK, in);
+ if (ferror(in)) {
+ ret = Z_ERRNO;
+ goto extract_ret;
+ }
+ if (strm.avail_in == 0) {
+ ret = Z_DATA_ERROR;
+ goto extract_ret;
+ }
+ strm.next_in = input;
+ }
+ ret = inflate(&strm, Z_NO_FLUSH); /* normal inflate */
+ if (ret == Z_NEED_DICT)
+ ret = Z_DATA_ERROR;
+ if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
+ goto extract_ret;
+ if (ret == Z_STREAM_END)
+ break;
+ } while (strm.avail_out != 0);
+
+ /* if reach end of stream, then don't keep trying to get more */
+ if (ret == Z_STREAM_END)
+ break;
+
+ /* do until offset reached and requested data read, or stream ends */
+ } while (skip);
+
+ /* compute number of uncompressed bytes read after offset */
+ ret = skip ? 0 : len - strm.avail_out;
+
+ /* clean up and return bytes read or error */
+ extract_ret:
+ (void)inflateEnd(&strm);
+ return ret;
+}
+
+/* Demonstrate the use of build_index() and extract() by processing the file
+ provided on the command line, and the extracting 16K from about 2/3rds of
+ the way through the uncompressed output, and writing that to stdout. */
+int main(int argc, char **argv)
+{
+ int len;
+ off_t offset;
+ FILE *in;
+ struct access *index = NULL;
+ unsigned char buf[CHUNK];
+
+ /* open input file */
+ if (argc != 2) {
+ fprintf(stderr, "usage: zran file.gz\n");
+ return 1;
+ }
+ in = fopen(argv[1], "rb");
+ if (in == NULL) {
+ fprintf(stderr, "zran: could not open %s for reading\n", argv[1]);
+ return 1;
+ }
+
+ /* build index */
+ len = build_index(in, SPAN, &index);
+ if (len < 0) {
+ fclose(in);
+ switch (len) {
+ case Z_MEM_ERROR:
+ fprintf(stderr, "zran: out of memory\n");
+ 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 */
+ offset = (index->list[index->have - 1].out << 1) / 3;
+ len = extract(in, index, offset, buf, CHUNK);
+ if (len < 0)
+ fprintf(stderr, "zran: extraction failed: %s error\n",
+ len == Z_MEM_ERROR ? "out of memory" : "input corrupted");
+ else {
+ fwrite(buf, 1, len, stdout);
+ fprintf(stderr, "zran: extracted %d bytes at %llu\n", len, offset);
+ }
+
+ /* clean up and exit */
+ free_index(index);
+ fclose(in);
+ return 0;
+}
diff --git a/protocols/Telegram/tgl/zlib/gzclose.c b/protocols/Telegram/tgl/zlib/gzclose.c
new file mode 100644
index 0000000000..caeb99a317
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/gzclose.c
@@ -0,0 +1,25 @@
+/* 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(file)
+ 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/protocols/Telegram/tgl/zlib/gzguts.h b/protocols/Telegram/tgl/zlib/gzguts.h
new file mode 100644
index 0000000000..d87659d031
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/gzguts.h
@@ -0,0 +1,209 @@
+/* gzguts.h -- zlib internal header definitions for gz* operations
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 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
+# ifdef _FILE_OFFSET_BITS
+# undef _FILE_OFFSET_BITS
+# endif
+#endif
+
+#ifdef HAVE_HIDDEN
+# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
+#else
+# define ZLIB_INTERNAL
+#endif
+
+#include <stdio.h>
+#include "zlib.h"
+#ifdef STDC
+# include <string.h>
+# include <stdlib.h>
+# include <limits.h>
+#endif
+#include <fcntl.h>
+
+#ifdef _WIN32
+# include <stddef.h>
+#endif
+
+#if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32)
+# include <io.h>
+#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, yet still not supported by
+ Microsoft more than a decade later!), _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 */
+#ifdef _MSC_VER
+# define snprintf _snprintf
+#endif
+
+#ifndef local
+# define local static
+#endif
+/* compile with -Dlocal if your debugger can't find static symbols */
+
+/* gz* functions always use library allocation functions */
+#ifndef STDC
+ extern voidp malloc OF((uInt size));
+ extern void free OF((voidpf ptr));
+#endif
+
+/* get errno and strerror definition */
+#if defined UNDER_CE
+# include <windows.h>
+# define zstrerror() gz_strwinerror((DWORD)GetLastError())
+#else
+# ifndef NO_STRERROR
+# include <errno.h>
+# 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 OF((const char *, const char *));
+ ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
+ ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
+ ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((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 */
+ 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 */
+ /* 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 OF((gz_statep, int, const char *));
+#if defined UNDER_CE
+char ZLIB_INTERNAL *gz_strwinerror OF((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) */
+#ifdef INT_MAX
+# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX)
+#else
+unsigned ZLIB_INTERNAL gz_intmax OF((void));
+# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax())
+#endif
diff --git a/protocols/Telegram/tgl/zlib/gzlib.c b/protocols/Telegram/tgl/zlib/gzlib.c
new file mode 100644
index 0000000000..fae202ef89
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/gzlib.c
@@ -0,0 +1,634 @@
+/* gzlib.c -- zlib functions common to reading and writing gzip files
+ * Copyright (C) 2004, 2010, 2011, 2012, 2013 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
+
+/* Local functions */
+local void gz_reset OF((gz_statep));
+local gzFile gz_open OF((const void *, int, const char *));
+
+#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 (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;
+}
+
+#endif /* UNDER_CE */
+
+/* Reset gzip file state */
+local void gz_reset(state)
+ 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 */
+ }
+ 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(path, fd, mode)
+ const void *path;
+ int fd;
+ const char *mode;
+{
+ gz_statep state;
+ 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 _WIN32
+ if (fd == -2) {
+ len = wcstombs(NULL, path, 0);
+ if (len == (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 _WIN32
+ if (fd == -2)
+ if (len)
+ wcstombs(state->path, path, len + 1);
+ else
+ *(state->path) = 0;
+ else
+#endif
+#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
+ 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 _WIN32
+ 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)
+ 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(path, mode)
+ const char *path;
+ const char *mode;
+{
+ return gz_open(path, -1, mode);
+}
+
+/* -- see zlib.h -- */
+gzFile ZEXPORT gzopen64(path, mode)
+ const char *path;
+ const char *mode;
+{
+ return gz_open(path, -1, mode);
+}
+
+/* -- see zlib.h -- */
+gzFile ZEXPORT gzdopen(fd, mode)
+ 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)
+ snprintf(path, 7 + 3 * sizeof(int), "<fd:%d>", fd); /* for debugging */
+#else
+ sprintf(path, "<fd:%d>", fd); /* for debugging */
+#endif
+ gz = gz_open(path, fd, mode);
+ free(path);
+ return gz;
+}
+
+/* -- see zlib.h -- */
+#ifdef _WIN32
+gzFile ZEXPORT gzopen_w(path, mode)
+ const wchar_t *path;
+ const char *mode;
+{
+ return gz_open(path, -2, mode);
+}
+#endif
+
+/* -- see zlib.h -- */
+int ZEXPORT gzbuffer(file, size)
+ 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 < 2)
+ size = 2; /* need two bytes to check magic header */
+ state->want = size;
+ return 0;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzrewind(file)
+ 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(file, offset, whence)
+ 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 - 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(file, offset, whence)
+ 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(file)
+ 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(file)
+ 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(file)
+ 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(file)
+ 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(file)
+ 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(file, errnum)
+ 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(file)
+ 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(state, err, msg)
+ 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)
+ 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
+ return;
+}
+
+#ifndef INT_MAX
+/* 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()
+{
+ unsigned p, q;
+
+ p = 1;
+ do {
+ q = p;
+ p <<= 1;
+ p++;
+ } while (p > q);
+ return q >> 1;
+}
+#endif
diff --git a/protocols/Telegram/tgl/zlib/gzread.c b/protocols/Telegram/tgl/zlib/gzread.c
new file mode 100644
index 0000000000..bf4538eb27
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/gzread.c
@@ -0,0 +1,594 @@
+/* gzread.c -- zlib functions for reading gzip files
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "gzguts.h"
+
+/* Local functions */
+local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *));
+local int gz_avail OF((gz_statep));
+local int gz_look OF((gz_statep));
+local int gz_decomp OF((gz_statep));
+local int gz_fetch OF((gz_statep));
+local int gz_skip OF((gz_statep, z_off64_t));
+
+/* 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(state, buf, len, have)
+ gz_statep state;
+ unsigned char *buf;
+ unsigned len;
+ unsigned *have;
+{
+ int ret;
+
+ *have = 0;
+ do {
+ ret = read(state->fd, buf + *have, len - *have);
+ if (ret <= 0)
+ break;
+ *have += 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(state)
+ 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(state)
+ 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) {
+ if (state->out != NULL)
+ free(state->out);
+ if (state->in != NULL)
+ 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;
+ if (strm->avail_in) {
+ 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(state)
+ 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(state)
+ 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(state, len)
+ 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;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzread(file, buf, len)
+ gzFile file;
+ voidp buf;
+ unsigned len;
+{
+ unsigned got, n;
+ 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 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 the flaw in the interface) */
+ if ((int)len < 0) {
+ gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
+ return -1;
+ }
+
+ /* 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 -1;
+ }
+
+ /* get len bytes to buf, or less than len if at the end */
+ got = 0;
+ do {
+ /* first just try copying data from the output buffer */
+ if (state->x.have) {
+ n = state->x.have > len ? len : 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 && 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 || len < (state->size << 1)) {
+ /* get more output, looking for header if required */
+ if (gz_fetch(state) == -1)
+ return -1;
+ 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, len, &n) == -1)
+ return -1;
+ }
+
+ /* large len -- decompress directly into user buffer */
+ else { /* state->how == GZIP */
+ strm->avail_out = len;
+ strm->next_out = (unsigned char *)buf;
+ if (gz_decomp(state) == -1)
+ return -1;
+ 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 (will fit in int) */
+ return (int)got;
+}
+
+/* -- see zlib.h -- */
+#ifdef Z_PREFIX_SET
+# undef z_gzgetc
+#else
+# undef gzgetc
+#endif
+int ZEXPORT gzgetc(file)
+ gzFile file;
+{
+ int ret;
+ 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 gzread() */
+ ret = gzread(file, buf, 1);
+ return ret < 1 ? -1 : buf[0];
+}
+
+int ZEXPORT gzgetc_(file)
+gzFile file;
+{
+ return gzgetc(file);
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzungetc(c, file)
+ int c;
+ 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 (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] = 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] = c;
+ state->x.pos--;
+ state->past = 0;
+ return c;
+}
+
+/* -- see zlib.h -- */
+char * ZEXPORT gzgets(file, buf, len)
+ 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(file)
+ 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(file)
+ 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/protocols/Telegram/tgl/zlib/gzwrite.c b/protocols/Telegram/tgl/zlib/gzwrite.c
new file mode 100644
index 0000000000..aa767fbf63
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/gzwrite.c
@@ -0,0 +1,577 @@
+/* gzwrite.c -- zlib functions for writing gzip files
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "gzguts.h"
+
+/* Local functions */
+local int gz_init OF((gz_statep));
+local int gz_comp OF((gz_statep, int));
+local int gz_zero OF((gz_statep, z_off64_t));
+
+/* Initialize state for writing a gzip file. Mark initialization by setting
+ state->size to non-zero. Return -1 on failure or 0 on success. */
+local int gz_init(state)
+ gz_statep state;
+{
+ int ret;
+ z_streamp strm = &(state->strm);
+
+ /* allocate input buffer */
+ state->in = (unsigned char *)malloc(state->want);
+ 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;
+ }
+ }
+
+ /* 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, 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(state, flush)
+ gz_statep state;
+ int flush;
+{
+ int ret, got;
+ unsigned have;
+ 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) {
+ got = write(state->fd, strm->next_in, strm->avail_in);
+ if (got < 0 || (unsigned)got != strm->avail_in) {
+ gz_error(state, Z_ERRNO, zstrerror());
+ return -1;
+ }
+ strm->avail_in = 0;
+ return 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))) {
+ have = (unsigned)(strm->next_out - state->x.next);
+ if (have && ((got = write(state->fd, state->x.next, have)) < 0 ||
+ (unsigned)got != have)) {
+ gz_error(state, Z_ERRNO, zstrerror());
+ return -1;
+ }
+ if (strm->avail_out == 0) {
+ strm->avail_out = state->size;
+ strm->next_out = state->out;
+ }
+ state->x.next = strm->next_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)
+ deflateReset(strm);
+
+ /* all done, no errors */
+ return 0;
+}
+
+/* Compress len zeros to output. Return -1 on error, 0 on success. */
+local int gz_zero(state, len)
+ 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;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzwrite(file, buf, len)
+ gzFile file;
+ voidpc buf;
+ unsigned len;
+{
+ unsigned put = len;
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return 0;
+ 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 0;
+
+ /* since an int is returned, make sure len fits in one, otherwise return
+ with an error (this avoids the flaw in the interface) */
+ if ((int)len < 0) {
+ gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
+ return 0;
+ }
+
+ /* 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 (strm->avail_in == 0)
+ strm->next_in = state->in;
+ have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
+ copy = state->size - have;
+ if (copy > len)
+ copy = len;
+ memcpy(state->in + have, buf, copy);
+ 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 (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+
+ /* directly compress user buffer to file */
+ strm->avail_in = len;
+ strm->next_in = (z_const Bytef *)buf;
+ state->x.pos += len;
+ if (gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+ }
+
+ /* input was all buffered or compressed (put will fit in int) */
+ return (int)put;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzputc(file, c)
+ 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] = c;
+ strm->avail_in++;
+ state->x.pos++;
+ return c & 0xff;
+ }
+ }
+
+ /* no room in buffer or not initialized, use gz_write() */
+ buf[0] = c;
+ if (gzwrite(file, buf, 1) != 1)
+ return -1;
+ return c & 0xff;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzputs(file, str)
+ gzFile file;
+ const char *str;
+{
+ int ret;
+ unsigned len;
+
+ /* write string */
+ len = (unsigned)strlen(str);
+ ret = gzwrite(file, str, len);
+ return ret == 0 && len != 0 ? -1 : ret;
+}
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#include <stdarg.h>
+
+/* -- see zlib.h -- */
+int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va)
+{
+ int size, len;
+ 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 0;
+
+ /* make sure we have some buffer space */
+ 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;
+ }
+
+ /* consume whatever's left in the input buffer */
+ if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+
+ /* do the printf() into the input buffer, put length in len */
+ size = (int)(state->size);
+ state->in[size - 1] = 0;
+#ifdef NO_vsnprintf
+# ifdef HAS_vsprintf_void
+ (void)vsprintf((char *)(state->in), format, va);
+ for (len = 0; len < size; len++)
+ if (state->in[len] == 0) break;
+# else
+ len = vsprintf((char *)(state->in), format, va);
+# endif
+#else
+# ifdef HAS_vsnprintf_void
+ (void)vsnprintf((char *)(state->in), size, format, va);
+ len = strlen((char *)(state->in));
+# else
+ len = vsnprintf((char *)(state->in), size, format, va);
+# endif
+#endif
+
+ /* check that printf() results fit in buffer */
+ if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
+ return 0;
+
+ /* update buffer and position, defer compression until needed */
+ strm->avail_in = (unsigned)len;
+ strm->next_in = state->in;
+ state->x.pos += len;
+ 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 (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
+ a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
+ gzFile file;
+ const char *format;
+ int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
+ a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
+{
+ int size, len;
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that can really pass pointer in ints */
+ if (sizeof(int) != sizeof(void *))
+ return 0;
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return 0;
+
+ /* make sure we have some buffer space */
+ 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;
+ }
+
+ /* consume whatever's left in the input buffer */
+ if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+
+ /* do the printf() into the input buffer, put length in len */
+ size = (int)(state->size);
+ state->in[size - 1] = 0;
+#ifdef NO_snprintf
+# ifdef HAS_sprintf_void
+ sprintf((char *)(state->in), 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 (state->in[len] == 0) break;
+# else
+ len = sprintf((char *)(state->in), 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((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6, a7, a8,
+ a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+ len = strlen((char *)(state->in));
+# else
+ len = snprintf((char *)(state->in), 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 >= (int)size || state->in[size - 1] != 0)
+ return 0;
+
+ /* update buffer and position, defer compression until needed */
+ strm->avail_in = (unsigned)len;
+ strm->next_in = state->in;
+ state->x.pos += len;
+ return len;
+}
+
+#endif
+
+/* -- see zlib.h -- */
+int ZEXPORT gzflush(file, flush)
+ gzFile file;
+ int flush;
+{
+ 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 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 -1;
+ }
+
+ /* compress remaining data with requested flush */
+ gz_comp(state, flush);
+ return state->err;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzsetparams(file, level, strategy)
+ 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)
+ 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 -1;
+ }
+
+ /* 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_PARTIAL_FLUSH) == -1)
+ return state->err;
+ deflateParams(strm, level, strategy);
+ }
+ state->level = level;
+ state->strategy = strategy;
+ return Z_OK;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzclose_w(file)
+ 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/protocols/Telegram/tgl/zlib/infback.c b/protocols/Telegram/tgl/zlib/infback.c
new file mode 100644
index 0000000000..f3833c2e43
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/infback.c
@@ -0,0 +1,640 @@
+/* infback.c -- inflate using a call-back interface
+ * Copyright (C) 1995-2011 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"
+
+/* function prototypes */
+local void fixedtables OF((struct inflate_state FAR *state));
+
+/*
+ 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_(strm, windowBits, window, version, stream_size)
+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 = windowBits;
+ state->wsize = 1U << windowBits;
+ state->window = window;
+ state->wnext = 0;
+ state->whave = 0;
+ 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(state)
+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(strm, in, in_desc, out, out_desc)
+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;
+
+ 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 -- write leftover output */
+ ret = Z_STREAM_END;
+ if (left < state->wsize) {
+ if (out(out_desc, state->window, state->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 inflateBackEnd(strm)
+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/protocols/Telegram/tgl/zlib/inffast.c b/protocols/Telegram/tgl/zlib/inffast.c
new file mode 100644
index 0000000000..bda59ceb6a
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/inffast.c
@@ -0,0 +1,340 @@
+/* inffast.c -- fast decoding
+ * Copyright (C) 1995-2008, 2010, 2013 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"
+
+#ifndef ASMINF
+
+/* Allow machine dependent optimization for post-increment or pre-increment.
+ Based on testing to date,
+ Pre-increment preferred for:
+ - PowerPC G3 (Adler)
+ - MIPS R5000 (Randers-Pehrson)
+ Post-increment preferred for:
+ - none
+ No measurable difference:
+ - Pentium III (Anderson)
+ - M68060 (Nikl)
+ */
+#ifdef POSTINC
+# define OFF 0
+# define PUP(a) *(a)++
+#else
+# define OFF 1
+# define PUP(a) *++(a)
+#endif
+
+/*
+ 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(strm, start)
+z_streamp strm;
+unsigned start; /* inflate()'s starting value for strm->avail_out */
+{
+ 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 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 - OFF;
+ last = in + (strm->avail_in - 5);
+ out = strm->next_out - OFF;
+ 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)(PUP(in)) << bits;
+ bits += 8;
+ hold += (unsigned long)(PUP(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));
+ PUP(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)(PUP(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)(PUP(in)) << bits;
+ bits += 8;
+ hold += (unsigned long)(PUP(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)(PUP(in)) << bits;
+ bits += 8;
+ if (bits < op) {
+ hold += (unsigned long)(PUP(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 {
+ PUP(out) = 0;
+ } while (--len);
+ continue;
+ }
+ len -= op - whave;
+ do {
+ PUP(out) = 0;
+ } while (--op > whave);
+ if (op == 0) {
+ from = out - dist;
+ do {
+ PUP(out) = PUP(from);
+ } while (--len);
+ continue;
+ }
+#endif
+ }
+ from = window - OFF;
+ if (wnext == 0) { /* very common case */
+ from += wsize - op;
+ if (op < len) { /* some from window */
+ len -= op;
+ do {
+ PUP(out) = PUP(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 {
+ PUP(out) = PUP(from);
+ } while (--op);
+ from = window - OFF;
+ if (wnext < len) { /* some from start of window */
+ op = wnext;
+ len -= op;
+ do {
+ PUP(out) = PUP(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 {
+ PUP(out) = PUP(from);
+ } while (--op);
+ from = out - dist; /* rest from output */
+ }
+ }
+ while (len > 2) {
+ PUP(out) = PUP(from);
+ PUP(out) = PUP(from);
+ PUP(out) = PUP(from);
+ len -= 3;
+ }
+ if (len) {
+ PUP(out) = PUP(from);
+ if (len > 1)
+ PUP(out) = PUP(from);
+ }
+ }
+ else {
+ from = out - dist; /* copy direct from output */
+ do { /* minimum length is three */
+ PUP(out) = PUP(from);
+ PUP(out) = PUP(from);
+ PUP(out) = PUP(from);
+ len -= 3;
+ } while (len > 2);
+ if (len) {
+ PUP(out) = PUP(from);
+ if (len > 1)
+ PUP(out) = PUP(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 + OFF;
+ strm->next_out = out + OFF;
+ 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/protocols/Telegram/tgl/zlib/inffast.h b/protocols/Telegram/tgl/zlib/inffast.h
new file mode 100644
index 0000000000..e5c1aa4ca8
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 OF((z_streamp strm, unsigned start));
diff --git a/protocols/Telegram/tgl/zlib/inffixed.h b/protocols/Telegram/tgl/zlib/inffixed.h
new file mode 100644
index 0000000000..d628327769
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/inflate.c b/protocols/Telegram/tgl/zlib/inflate.c
new file mode 100644
index 0000000000..870f89bb4d
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/inflate.c
@@ -0,0 +1,1512 @@
+/* inflate.c -- zlib decompression
+ * Copyright (C) 1995-2012 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
+
+/* function prototypes */
+local void fixedtables OF((struct inflate_state FAR *state));
+local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
+ unsigned copy));
+#ifdef BUILDFIXED
+ void makefixed OF((void));
+#endif
+local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf,
+ unsigned len));
+
+int ZEXPORT inflateResetKeep(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) 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->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(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) 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(strm, windowBits)
+z_streamp strm;
+int windowBits;
+{
+ int wrap;
+ struct inflate_state FAR *state;
+
+ /* get the state */
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+
+ /* extract wrap request from windowBits parameter */
+ if (windowBits < 0) {
+ wrap = 0;
+ windowBits = -windowBits;
+ }
+ else {
+ wrap = (windowBits >> 4) + 1;
+#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_(strm, windowBits, version, stream_size)
+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->window = Z_NULL;
+ ret = inflateReset2(strm, windowBits);
+ if (ret != Z_OK) {
+ ZFREE(strm, state);
+ strm->state = Z_NULL;
+ }
+ return ret;
+}
+
+int ZEXPORT inflateInit_(strm, version, stream_size)
+z_streamp strm;
+const char *version;
+int stream_size;
+{
+ return inflateInit2_(strm, DEF_WBITS, version, stream_size);
+}
+
+int ZEXPORT inflatePrime(strm, bits, value)
+z_streamp strm;
+int bits;
+int value;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if (bits < 0) {
+ state->hold = 0;
+ state->bits = 0;
+ return Z_OK;
+ }
+ if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;
+ value &= (1L << bits) - 1;
+ state->hold += value << state->bits;
+ state->bits += 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(state)
+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 <stdio.h>
+
+/*
+ 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()
+{
+ 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(strm, end, copy)
+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, buf, len) \
+ (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
+#else
+# define UPDATE(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(strm, flush)
+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 (strm == Z_NULL || strm->state == Z_NULL || 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 */
+ state->check = crc32(0L, Z_NULL, 0);
+ CRC2(state->check, hold);
+ INITBITS();
+ state->mode = FLAGS;
+ break;
+ }
+ state->flags = 0; /* expect zlib header */
+ 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;
+ else if (len > state->wbits) {
+ strm->msg = (char *)"invalid window size";
+ state->mode = BAD;
+ break;
+ }
+ state->dmax = 1U << len;
+ 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) CRC2(state->check, hold);
+ INITBITS();
+ state->mode = TIME;
+ case TIME:
+ NEEDBITS(32);
+ if (state->head != Z_NULL)
+ state->head->time = hold;
+ if (state->flags & 0x0200) CRC4(state->check, hold);
+ INITBITS();
+ state->mode = OS;
+ 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) CRC2(state->check, hold);
+ INITBITS();
+ state->mode = EXLEN;
+ 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) CRC2(state->check, hold);
+ INITBITS();
+ }
+ else if (state->head != Z_NULL)
+ state->head->extra = Z_NULL;
+ state->mode = EXTRA;
+ 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;
+ zmemcpy(state->head->extra + len, next,
+ len + copy > state->head->extra_max ?
+ state->head->extra_max - len : copy);
+ }
+ if (state->flags & 0x0200)
+ 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;
+ 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++] = len;
+ } while (len && copy < have);
+ if (state->flags & 0x0200)
+ 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;
+ 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++] = len;
+ } while (len && copy < have);
+ if (state->flags & 0x0200)
+ 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;
+ case HCRC:
+ if (state->flags & 0x0200) {
+ NEEDBITS(16);
+ if (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;
+ case DICT:
+ if (state->havedict == 0) {
+ RESTORE();
+ return Z_NEED_DICT;
+ }
+ strm->adler = state->check = adler32(0L, Z_NULL, 0);
+ state->mode = TYPE;
+ case TYPE:
+ if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
+ 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;
+ case COPY_:
+ state->mode = COPY;
+ 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;
+ 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;
+ 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;
+ case LEN_:
+ state->mode = LEN;
+ 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;
+ 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;
+ 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;
+ 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;
+ 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 (out)
+ strm->adler = state->check =
+ UPDATE(state->check, put - out, out);
+ out = left;
+ if ((
+#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;
+ case LENGTH:
+ if (state->wrap && state->flags) {
+ NEEDBITS(32);
+ if (hold != (state->total & 0xffffffffUL)) {
+ strm->msg = (char *)"incorrect length check";
+ state->mode = BAD;
+ break;
+ }
+ INITBITS();
+ Tracev((stderr, "inflate: length matches trailer\n"));
+ }
+#endif
+ state->mode = DONE;
+ 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:
+ 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 && out)
+ strm->adler = state->check =
+ UPDATE(state->check, strm->next_out - out, out);
+ strm->data_type = 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(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+ if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+ 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(strm, dictionary, dictLength)
+z_streamp strm;
+Bytef *dictionary;
+uInt *dictLength;
+{
+ struct inflate_state FAR *state;
+
+ /* check state */
+ if (strm == Z_NULL || strm->state == Z_NULL) 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(strm, dictionary, dictLength)
+z_streamp strm;
+const Bytef *dictionary;
+uInt dictLength;
+{
+ struct inflate_state FAR *state;
+ unsigned long dictid;
+ int ret;
+
+ /* check state */
+ if (strm == Z_NULL || strm->state == Z_NULL) 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(strm, head)
+z_streamp strm;
+gz_headerp head;
+{
+ struct inflate_state FAR *state;
+
+ /* check state */
+ if (strm == Z_NULL || strm->state == Z_NULL) 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(have, buf, len)
+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(strm)
+z_streamp strm;
+{
+ unsigned len; /* number of bytes to look at or looked at */
+ 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 (strm == Z_NULL || strm->state == Z_NULL) 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;
+ in = strm->total_in; out = strm->total_out;
+ inflateReset(strm);
+ strm->total_in = in; strm->total_out = out;
+ 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(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ return state->mode == STORED && state->bits == 0;
+}
+
+int ZEXPORT inflateCopy(dest, source)
+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 (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
+ source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
+ 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));
+ 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(strm, subvert)
+z_streamp strm;
+int subvert;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ state->sane = !subvert;
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+ return Z_OK;
+#else
+ state->sane = 1;
+ return Z_DATA_ERROR;
+#endif
+}
+
+long ZEXPORT inflateMark(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16;
+ state = (struct inflate_state FAR *)strm->state;
+ return ((long)(state->back) << 16) +
+ (state->mode == COPY ? state->length :
+ (state->mode == MATCH ? state->was - state->length : 0));
+}
diff --git a/protocols/Telegram/tgl/zlib/inflate.h b/protocols/Telegram/tgl/zlib/inflate.h
new file mode 100644
index 0000000000..95f4986d40
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/inflate.h
@@ -0,0 +1,122 @@
+/* inflate.h -- internal inflate state definition
+ * Copyright (C) 1995-2009 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, /* 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 10K bytes. */
+struct inflate_state {
+ 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 */
+ int havedict; /* true if dictionary provided */
+ int flags; /* gzip header method and flags (0 if zlib) */
+ 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/protocols/Telegram/tgl/zlib/inftrees.c b/protocols/Telegram/tgl/zlib/inftrees.c
new file mode 100644
index 0000000000..44d89cf24e
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/inftrees.c
@@ -0,0 +1,306 @@
+/* inftrees.c -- generate Huffman trees for efficient decoding
+ * Copyright (C) 1995-2013 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.2.8 Copyright 1995-2013 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(type, lens, codes, table, bits, work)
+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 */
+ 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, 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, 72, 78};
+ 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 */
+ 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 */
+ here.bits = (unsigned char)(len - drop);
+ if ((int)(work[sym]) < end) {
+ here.op = (unsigned char)0;
+ here.val = work[sym];
+ }
+ else if ((int)(work[sym]) > end) {
+ here.op = (unsigned char)(extra[work[sym]]);
+ here.val = base[work[sym]];
+ }
+ 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/protocols/Telegram/tgl/zlib/inftrees.h b/protocols/Telegram/tgl/zlib/inftrees.h
new file mode 100644
index 0000000000..baa53a0b1a
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 distribtution. 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 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 OF((codetype type, unsigned short FAR *lens,
+ unsigned codes, code FAR * FAR *table,
+ unsigned FAR *bits, unsigned short FAR *work));
diff --git a/protocols/Telegram/tgl/zlib/make_vms.com b/protocols/Telegram/tgl/zlib/make_vms.com
new file mode 100644
index 0000000000..65e9d0cbc8
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 exmples
+$! subdir path, update module search in makefile.in
+$! 0.07 20120115 Triggered by work done by Alexey Chupahin completly 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 <unistd.h>"
+$ write aconf "#include <unixio.h>"
+$ 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
+# <zinser@zinser.no-ip.info or martin.zinser@eurexchange.com>
+
+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 <stdio.h>
+
+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/protocols/Telegram/tgl/zlib/msdos/Makefile.bor b/protocols/Telegram/tgl/zlib/msdos/Makefile.bor
new file mode 100644
index 0000000000..3d12a2c252
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/msdos/Makefile.dj2 b/protocols/Telegram/tgl/zlib/msdos/Makefile.dj2
new file mode 100644
index 0000000000..29b03954d7
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 <sp>'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 -DDEBUG
+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/protocols/Telegram/tgl/zlib/msdos/Makefile.emx b/protocols/Telegram/tgl/zlib/msdos/Makefile.emx
new file mode 100644
index 0000000000..9c1b57a585
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 -DDEBUG
+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/protocols/Telegram/tgl/zlib/msdos/Makefile.msc b/protocols/Telegram/tgl/zlib/msdos/Makefile.msc
new file mode 100644
index 0000000000..ae8378615e
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/msdos/Makefile.tc b/protocols/Telegram/tgl/zlib/msdos/Makefile.tc
new file mode 100644
index 0000000000..5aec82a9d5
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/nintendods/Makefile b/protocols/Telegram/tgl/zlib/nintendods/Makefile
new file mode 100644
index 0000000000..21337d01ab
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/nintendods/Makefile
@@ -0,0 +1,126 @@
+#---------------------------------------------------------------------------------
+.SUFFIXES:
+#---------------------------------------------------------------------------------
+
+ifeq ($(strip $(DEVKITARM)),)
+$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>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/protocols/Telegram/tgl/zlib/nintendods/README b/protocols/Telegram/tgl/zlib/nintendods/README
new file mode 100644
index 0000000000..ba7a37dbe8
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 <eduardo.m.costa@gmail.com>
+January 3, 2009
+
diff --git a/protocols/Telegram/tgl/zlib/old/Makefile.emx b/protocols/Telegram/tgl/zlib/old/Makefile.emx
new file mode 100644
index 0000000000..4d6ab0efa6
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 -DDEBUG
+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/protocols/Telegram/tgl/zlib/old/Makefile.riscos b/protocols/Telegram/tgl/zlib/old/Makefile.riscos
new file mode 100644
index 0000000000..57e29d3fba
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/old/README b/protocols/Telegram/tgl/zlib/old/README
new file mode 100644
index 0000000000..800bf07982
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/old/descrip.mms b/protocols/Telegram/tgl/zlib/old/descrip.mms
new file mode 100644
index 0000000000..7066da5b55
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/old/descrip.mms
@@ -0,0 +1,48 @@
+# descrip.mms: MMS description file for building zlib on VMS
+# written by Martin P.J. Zinser <m.zinser@gsi.de>
+
+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/protocols/Telegram/tgl/zlib/old/os2/Makefile.os2 b/protocols/Telegram/tgl/zlib/old/os2/Makefile.os2
new file mode 100644
index 0000000000..a105aaa5bb
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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 -DDEBUG
+#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/protocols/Telegram/tgl/zlib/old/os2/zlib.def b/protocols/Telegram/tgl/zlib/old/os2/zlib.def
new file mode 100644
index 0000000000..4c753f1a3b
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/old/visual-basic.txt b/protocols/Telegram/tgl/zlib/old/visual-basic.txt
new file mode 100644
index 0000000000..57efe58124
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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" <jon-net@usa.net>
+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 <c_rios@sonda.cl>, 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 <michael_borgsys@hotmail.com> 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: <parameter> [optional] {Range of possible values}
+'Call subCompressFile(<path with filename to compress> [, <path with
+filename to write to>, [level of compression {1..9}]])
+'Call subUncompressFile(<path with filename to compress>)
+
+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 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/protocols/Telegram/tgl/zlib/qnx/package.qpg b/protocols/Telegram/tgl/zlib/qnx/package.qpg
new file mode 100644
index 0000000000..aebf6e3ac1
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/qnx/package.qpg
@@ -0,0 +1,141 @@
+<QPG:Generation>
+ <QPG:Options>
+ <QPG:User unattended="no" verbosity="2" listfiles="yes"/>
+ <QPG:Defaults type="qnx_package"/>
+ <QPG:Source></QPG:Source>
+ <QPG:Release number="+"/>
+ <QPG:Build></QPG:Build>
+ <QPG:FileSorting strip="yes"/>
+ <QPG:Package targets="combine"/>
+ <QPG:Repository generate="yes"/>
+ <QPG:FinalDir></QPG:FinalDir>
+ <QPG:Cleanup></QPG:Cleanup>
+ </QPG:Options>
+
+ <QPG:Responsible>
+ <QPG:Company></QPG:Company>
+ <QPG:Department></QPG:Department>
+ <QPG:Group></QPG:Group>
+ <QPG:Team></QPG:Team>
+ <QPG:Employee></QPG:Employee>
+ <QPG:EmailAddress></QPG:EmailAddress>
+ </QPG:Responsible>
+
+ <QPG:Values>
+ <QPG:Files>
+ <QPG:Add file="../zconf.h" install="/opt/include/" user="root:sys" permission="644"/>
+ <QPG:Add file="../zlib.h" install="/opt/include/" user="root:sys" permission="644"/>
+ <QPG:Add file="../libz.so.1.2.8" install="/opt/lib/" user="root:bin" permission="644"/>
+ <QPG:Add file="libz.so" install="/opt/lib/" component="dev" filetype="symlink" linkto="libz.so.1.2.8"/>
+ <QPG:Add file="libz.so.1" install="/opt/lib/" filetype="symlink" linkto="libz.so.1.2.8"/>
+ <QPG:Add file="../libz.so.1.2.8" install="/opt/lib/" component="slib"/>
+ </QPG:Files>
+
+ <QPG:PackageFilter>
+ <QPM:PackageManifest>
+ <QPM:PackageDescription>
+ <QPM:PackageType>Library</QPM:PackageType>
+ <QPM:PackageReleaseNotes></QPM:PackageReleaseNotes>
+ <QPM:PackageReleaseUrgency>Medium</QPM:PackageReleaseUrgency>
+ <QPM:PackageRepository></QPM:PackageRepository>
+ <QPM:FileVersion>2.0</QPM:FileVersion>
+ </QPM:PackageDescription>
+
+ <QPM:ProductDescription>
+ <QPM:ProductName>zlib</QPM:ProductName>
+ <QPM:ProductIdentifier>zlib</QPM:ProductIdentifier>
+ <QPM:ProductEmail>alain.bonnefoy@icbt.com</QPM:ProductEmail>
+ <QPM:VendorName>Public</QPM:VendorName>
+ <QPM:VendorInstallName>public</QPM:VendorInstallName>
+ <QPM:VendorURL>www.gzip.org/zlib</QPM:VendorURL>
+ <QPM:VendorEmbedURL></QPM:VendorEmbedURL>
+ <QPM:VendorEmail></QPM:VendorEmail>
+ <QPM:AuthorName>Jean-Loup Gailly,Mark Adler</QPM:AuthorName>
+ <QPM:AuthorURL>www.gzip.org/zlib</QPM:AuthorURL>
+ <QPM:AuthorEmbedURL></QPM:AuthorEmbedURL>
+ <QPM:AuthorEmail>zlib@gzip.org</QPM:AuthorEmail>
+ <QPM:ProductIconSmall></QPM:ProductIconSmall>
+ <QPM:ProductIconLarge></QPM:ProductIconLarge>
+ <QPM:ProductDescriptionShort>A massively spiffy yet delicately unobtrusive compression library.</QPM:ProductDescriptionShort>
+ <QPM:ProductDescriptionLong>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.</QPM:ProductDescriptionLong>
+ <QPM:ProductDescriptionURL>http://www.gzip.org/zlib</QPM:ProductDescriptionURL>
+ <QPM:ProductDescriptionEmbedURL></QPM:ProductDescriptionEmbedURL>
+ </QPM:ProductDescription>
+
+ <QPM:ReleaseDescription>
+ <QPM:ReleaseVersion>1.2.8</QPM:ReleaseVersion>
+ <QPM:ReleaseUrgency>Medium</QPM:ReleaseUrgency>
+ <QPM:ReleaseStability>Stable</QPM:ReleaseStability>
+ <QPM:ReleaseNoteMinor></QPM:ReleaseNoteMinor>
+ <QPM:ReleaseNoteMajor></QPM:ReleaseNoteMajor>
+ <QPM:ExcludeCountries>
+ <QPM:Country></QPM:Country>
+ </QPM:ExcludeCountries>
+
+ <QPM:ReleaseCopyright>No License</QPM:ReleaseCopyright>
+ </QPM:ReleaseDescription>
+
+ <QPM:ContentDescription>
+ <QPM:ContentTopic xmlmultiple="true">Software Development/Libraries and Extensions/C Libraries</QPM:ContentTopic>
+ <QPM:ContentKeyword>zlib,compression</QPM:ContentKeyword>
+ <QPM:TargetOS>qnx6</QPM:TargetOS>
+ <QPM:HostOS>qnx6</QPM:HostOS>
+ <QPM:DisplayEnvironment xmlmultiple="true">None</QPM:DisplayEnvironment>
+ <QPM:TargetAudience xmlmultiple="true">Developer</QPM:TargetAudience>
+ </QPM:ContentDescription>
+ </QPM:PackageManifest>
+ </QPG:PackageFilter>
+
+ <QPG:PackageFilter proc="none" target="none">
+ <QPM:PackageManifest>
+ <QPM:ProductInstallationDependencies>
+ <QPM:ProductRequirements></QPM:ProductRequirements>
+ </QPM:ProductInstallationDependencies>
+
+ <QPM:ProductInstallationProcedure>
+ <QPM:Script xmlmultiple="true">
+ <QPM:ScriptName></QPM:ScriptName>
+ <QPM:ScriptType>Install</QPM:ScriptType>
+ <QPM:ScriptTiming>Post</QPM:ScriptTiming>
+ <QPM:ScriptBlocking>No</QPM:ScriptBlocking>
+ <QPM:ScriptResult>Ignore</QPM:ScriptResult>
+ <QPM:ShortDescription></QPM:ShortDescription>
+ <QPM:UseBinaries>No</QPM:UseBinaries>
+ <QPM:Priority>Optional</QPM:Priority>
+ </QPM:Script>
+ </QPM:ProductInstallationProcedure>
+ </QPM:PackageManifest>
+
+ <QPM:Launch>
+ </QPM:Launch>
+ </QPG:PackageFilter>
+
+ <QPG:PackageFilter type="core" component="none">
+ <QPM:PackageManifest>
+ <QPM:ProductInstallationProcedure>
+ <QPM:OrderDependency xmlmultiple="true">
+ <QPM:Order>InstallOver</QPM:Order>
+ <QPM:Product>zlib</QPM:Product>
+ </QPM:OrderDependency>
+ </QPM:ProductInstallationProcedure>
+ </QPM:PackageManifest>
+
+ <QPM:Launch>
+ </QPM:Launch>
+ </QPG:PackageFilter>
+
+ <QPG:PackageFilter type="core" component="dev">
+ <QPM:PackageManifest>
+ <QPM:ProductInstallationProcedure>
+ <QPM:OrderDependency xmlmultiple="true">
+ <QPM:Order>InstallOver</QPM:Order>
+ <QPM:Product>zlib-dev</QPM:Product>
+ </QPM:OrderDependency>
+ </QPM:ProductInstallationProcedure>
+ </QPM:PackageManifest>
+
+ <QPM:Launch>
+ </QPM:Launch>
+ </QPG:PackageFilter>
+ </QPG:Values>
+</QPG:Generation>
diff --git a/protocols/Telegram/tgl/zlib/test/example.c b/protocols/Telegram/tgl/zlib/test/example.c
new file mode 100644
index 0000000000..138a699bd5
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/test/example.c
@@ -0,0 +1,601 @@
+/* example.c -- usage example of the zlib compression library
+ * Copyright (C) 1995-2006, 2011 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#include "zlib.h"
+#include <stdio.h>
+
+#ifdef STDC
+# include <string.h>
+# include <stdlib.h>
+#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); \
+ } \
+}
+
+z_const char hello[] = "hello, hello!";
+/* "hello world" would be more standard, but the repeated "hello"
+ * stresses the compression code better, sorry...
+ */
+
+const char dictionary[] = "hello";
+uLong dictId; /* Adler32 value of the dictionary */
+
+void test_deflate OF((Byte *compr, uLong comprLen));
+void test_inflate OF((Byte *compr, uLong comprLen,
+ Byte *uncompr, uLong uncomprLen));
+void test_large_deflate OF((Byte *compr, uLong comprLen,
+ Byte *uncompr, uLong uncomprLen));
+void test_large_inflate OF((Byte *compr, uLong comprLen,
+ Byte *uncompr, uLong uncomprLen));
+void test_flush OF((Byte *compr, uLong *comprLen));
+void test_sync OF((Byte *compr, uLong comprLen,
+ Byte *uncompr, uLong uncomprLen));
+void test_dict_deflate OF((Byte *compr, uLong comprLen));
+void test_dict_inflate OF((Byte *compr, uLong comprLen,
+ Byte *uncompr, uLong uncomprLen));
+int main OF((int argc, char *argv[]));
+
+
+#ifdef Z_SOLO
+
+void *myalloc OF((void *, unsigned, unsigned));
+void myfree OF((void *, void *));
+
+void *myalloc(q, n, m)
+ void *q;
+ unsigned n, m;
+{
+ q = Z_NULL;
+ return calloc(n, m);
+}
+
+void myfree(void *q, void *p)
+{
+ q = Z_NULL;
+ 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;
+
+void test_compress OF((Byte *compr, uLong comprLen,
+ Byte *uncompr, uLong uncomprLen));
+void test_gzio OF((const char *fname,
+ Byte *uncompr, uLong uncomprLen));
+
+/* ===========================================================================
+ * Test compress() and uncompress()
+ */
+void test_compress(compr, comprLen, uncompr, uncomprLen)
+ Byte *compr, *uncompr;
+ uLong comprLen, 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
+ */
+void test_gzio(fname, uncompr, uncomprLen)
+ const char *fname; /* compressed file name */
+ 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
+ */
+void test_deflate(compr, comprLen)
+ 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
+ */
+void test_inflate(compr, comprLen, uncompr, uncomprLen)
+ Byte *compr, *uncompr;
+ uLong comprLen, 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
+ */
+void test_large_deflate(compr, comprLen, uncompr, uncomprLen)
+ Byte *compr, *uncompr;
+ uLong comprLen, 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)comprLen/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
+ */
+void test_large_inflate(compr, comprLen, uncompr, uncomprLen)
+ Byte *compr, *uncompr;
+ uLong comprLen, 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 + comprLen/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
+ */
+void test_flush(compr, comprLen)
+ 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()
+ */
+void test_sync(compr, comprLen, uncompr, uncomprLen)
+ Byte *compr, *uncompr;
+ uLong comprLen, 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;
+
+ 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_DATA_ERROR) {
+ fprintf(stderr, "inflate should report DATA_ERROR\n");
+ /* Because of incorrect adler32 */
+ exit(1);
+ }
+ err = inflateEnd(&d_stream);
+ CHECK_ERR(err, "inflateEnd");
+
+ printf("after inflateSync(): hel%s\n", (char *)uncompr);
+}
+
+/* ===========================================================================
+ * Test deflate() with preset dictionary
+ */
+void test_dict_deflate(compr, comprLen)
+ 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
+ */
+void test_dict_inflate(compr, comprLen, uncompr, uncomprLen)
+ Byte *compr, *uncompr;
+ uLong comprLen, 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(argc, argv)
+ int argc;
+ char *argv[];
+{
+ Byte *compr, *uncompr;
+ uLong comprLen = 10000*sizeof(int); /* don't overflow on MSDOS */
+ uLong uncomprLen = comprLen;
+ 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\n");
+ }
+
+ 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
+ argc = strlen(argv[0]);
+#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 = uncomprLen;
+
+ test_dict_deflate(compr, comprLen);
+ test_dict_inflate(compr, comprLen, uncompr, uncomprLen);
+
+ free(compr);
+ free(uncompr);
+
+ return 0;
+}
diff --git a/protocols/Telegram/tgl/zlib/test/infcover.c b/protocols/Telegram/tgl/zlib/test/infcover.c
new file mode 100644
index 0000000000..fe3d9203a0
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/test/infcover.c
@@ -0,0 +1,671 @@
+/* infcover.c -- test zlib's inflate routines with full code coverage
+ * Copyright (C) 2011 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* to use, do: ./configure --cover && make cover */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#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 delimited by any non-hex character, where
+ the delimiters are ignored except when a single hex digit is followed by a
+ delimiter in which case 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;
+ 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;
+ in = reallocf(in, next);
+ return in;
+}
+
+/* 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(&copy, &strm); assert(ret == Z_OK);
+ ret = inflateEnd(&copy); 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, ZLIB_VERSION - 1, (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(&copy, &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)
+{
+ buf += 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/protocols/Telegram/tgl/zlib/test/minigzip.c b/protocols/Telegram/tgl/zlib/test/minigzip.c
new file mode 100644
index 0000000000..b3025a489a
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/test/minigzip.c
@@ -0,0 +1,651 @@
+/* minigzip.c -- simulate gzip using the zlib compression library
+ * Copyright (C) 1995-2006, 2010, 2011 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 <stdio.h>
+
+#ifdef STDC
+# include <string.h>
+# include <stdlib.h>
+#endif
+
+#ifdef USE_MMAP
+# include <sys/types.h>
+# include <sys/mman.h>
+# include <sys/stat.h>
+#endif
+
+#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
+# include <fcntl.h>
+# include <io.h>
+# ifdef UNDER_CE
+# include <stdlib.h>
+# endif
+# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
+#else
+# define SET_BINARY_MODE(file)
+#endif
+
+#ifdef _MSC_VER
+# 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 <unix.h> /* for fileno */
+#endif
+
+#if !defined(Z_HAVE_UNISTD_H) && !defined(_LARGEFILE64_SOURCE)
+#ifndef WIN32 /* unlink already in stdio.h for WIN32 */
+ extern int unlink OF((const char *));
+#endif
+#endif
+
+#if defined(UNDER_CE)
+# include <windows.h>
+# 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 <unistd.h> /* for unlink() */
+#endif
+
+void *myalloc OF((void *, unsigned, unsigned));
+void myfree OF((void *, void *));
+
+void *myalloc(q, n, m)
+ void *q;
+ unsigned n, m;
+{
+ q = Z_NULL;
+ return calloc(n, m);
+}
+
+void myfree(q, p)
+ void *q, *p;
+{
+ q = Z_NULL;
+ free(p);
+}
+
+typedef struct gzFile_s {
+ FILE *file;
+ int write;
+ int err;
+ char *msg;
+ z_stream strm;
+} *gzFile;
+
+gzFile gzopen OF((const char *, const char *));
+gzFile gzdopen OF((int, const char *));
+gzFile gz_open OF((const char *, int, const char *));
+
+gzFile gzopen(path, mode)
+const char *path;
+const char *mode;
+{
+ return gz_open(path, -1, mode);
+}
+
+gzFile gzdopen(fd, mode)
+int fd;
+const char *mode;
+{
+ return gz_open(NULL, fd, mode);
+}
+
+gzFile gz_open(path, fd, mode)
+ 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;
+}
+
+int gzwrite OF((gzFile, const void *, unsigned));
+
+int gzwrite(gz, buf, len)
+ 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;
+}
+
+int gzread OF((gzFile, void *, unsigned));
+
+int gzread(gz, buf, len)
+ 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;
+}
+
+int gzclose OF((gzFile));
+
+int gzclose(gz)
+ 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;
+}
+
+const char *gzerror OF((gzFile, int *));
+
+const char *gzerror(gz, err)
+ gzFile gz;
+ int *err;
+{
+ *err = gz->err;
+ return gz->msg;
+}
+
+#endif
+
+char *prog;
+
+void error OF((const char *msg));
+void gz_compress OF((FILE *in, gzFile out));
+#ifdef USE_MMAP
+int gz_compress_mmap OF((FILE *in, gzFile out));
+#endif
+void gz_uncompress OF((gzFile in, FILE *out));
+void file_compress OF((char *file, char *mode));
+void file_uncompress OF((char *file));
+int main OF((int argc, char *argv[]));
+
+/* ===========================================================================
+ * Display error message and exit
+ */
+void error(msg)
+ const char *msg;
+{
+ fprintf(stderr, "%s: %s\n", prog, msg);
+ exit(1);
+}
+
+/* ===========================================================================
+ * Compress input to output then close both files.
+ */
+
+void gz_compress(in, out)
+ 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");
+}
+
+#ifdef USE_MMAP /* MMAP version, Miguel Albrecht <malbrech@eso.org> */
+
+/* Try compressing the input file at once using mmap. Return Z_OK if
+ * if success, Z_ERRNO otherwise.
+ */
+int gz_compress_mmap(in, out)
+ 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 */
+
+/* ===========================================================================
+ * Uncompress input to output then close both files.
+ */
+void gz_uncompress(in, out)
+ 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.
+ */
+void file_compress(file, mode)
+ 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.
+ */
+void file_uncompress(file)
+ char *file;
+{
+ local char buf[MAX_NAME_LEN];
+ char *infile, *outfile;
+ FILE *out;
+ gzFile in;
+ 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(argc, argv)
+ 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/protocols/Telegram/tgl/zlib/treebuild.xml b/protocols/Telegram/tgl/zlib/treebuild.xml
new file mode 100644
index 0000000000..38d29d75ef
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/treebuild.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" ?>
+<package name="zlib" version="1.2.8">
+ <library name="zlib" dlversion="1.2.8" dlname="z">
+ <property name="description"> zip compression library </property>
+ <property name="include-target-dir" value="$(@PACKAGE/install-includedir)" />
+
+ <!-- fixme: not implemented yet -->
+ <property name="compiler/c/inline" value="yes" />
+
+ <include-file name="zlib.h" scope="public" mode="644" />
+ <include-file name="zconf.h" scope="public" mode="644" />
+
+ <source name="adler32.c">
+ <depend name="zlib.h" />
+ <depend name="zconf.h" />
+ </source>
+ <source name="compress.c">
+ <depend name="zlib.h" />
+ <depend name="zconf.h" />
+ </source>
+ <source name="crc32.c">
+ <depend name="zlib.h" />
+ <depend name="zconf.h" />
+ <depend name="crc32.h" />
+ </source>
+ <source name="gzclose.c">
+ <depend name="zlib.h" />
+ <depend name="zconf.h" />
+ <depend name="gzguts.h" />
+ </source>
+ <source name="gzlib.c">
+ <depend name="zlib.h" />
+ <depend name="zconf.h" />
+ <depend name="gzguts.h" />
+ </source>
+ <source name="gzread.c">
+ <depend name="zlib.h" />
+ <depend name="zconf.h" />
+ <depend name="gzguts.h" />
+ </source>
+ <source name="gzwrite.c">
+ <depend name="zlib.h" />
+ <depend name="zconf.h" />
+ <depend name="gzguts.h" />
+ </source>
+ <source name="uncompr.c">
+ <depend name="zlib.h" />
+ <depend name="zconf.h" />
+ </source>
+ <source name="deflate.c">
+ <depend name="zlib.h" />
+ <depend name="zconf.h" />
+ <depend name="zutil.h" />
+ <depend name="deflate.h" />
+ </source>
+ <source name="trees.c">
+ <depend name="zlib.h" />
+ <depend name="zconf.h" />
+ <depend name="zutil.h" />
+ <depend name="deflate.h" />
+ <depend name="trees.h" />
+ </source>
+ <source name="zutil.c">
+ <depend name="zlib.h" />
+ <depend name="zconf.h" />
+ <depend name="zutil.h" />
+ </source>
+ <source name="inflate.c">
+ <depend name="zlib.h" />
+ <depend name="zconf.h" />
+ <depend name="zutil.h" />
+ <depend name="inftrees.h" />
+ <depend name="inflate.h" />
+ <depend name="inffast.h" />
+ </source>
+ <source name="infback.c">
+ <depend name="zlib.h" />
+ <depend name="zconf.h" />
+ <depend name="zutil.h" />
+ <depend name="inftrees.h" />
+ <depend name="inflate.h" />
+ <depend name="inffast.h" />
+ </source>
+ <source name="inftrees.c">
+ <depend name="zlib.h" />
+ <depend name="zconf.h" />
+ <depend name="zutil.h" />
+ <depend name="inftrees.h" />
+ </source>
+ <source name="inffast.c">
+ <depend name="zlib.h" />
+ <depend name="zconf.h" />
+ <depend name="zutil.h" />
+ <depend name="inftrees.h" />
+ <depend name="inflate.h" />
+ <depend name="inffast.h" />
+ </source>
+ </library>
+</package>
+
+<!--
+CFLAGS=-O
+#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
+#CFLAGS=-g -DDEBUG
+#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
+# -Wstrict-prototypes -Wmissing-prototypes
+
+# OBJA =
+# to use the asm code: make OBJA=match.o
+#
+match.o: match.S
+ $(CPP) match.S > _match.s
+ $(CC) -c _match.s
+ mv _match.o match.o
+ rm -f _match.s
+-->
diff --git a/protocols/Telegram/tgl/zlib/trees.c b/protocols/Telegram/tgl/zlib/trees.c
new file mode 100644
index 0000000000..1fd7759ef0
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/trees.c
@@ -0,0 +1,1226 @@
+/* trees.c -- output deflated data using Huffman coding
+ * Copyright (C) 1995-2012 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 DEBUG
+# include <ctype.h>
+#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 */
+};
+
+local static_tree_desc static_l_desc =
+{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
+
+local static_tree_desc static_d_desc =
+{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS};
+
+local static_tree_desc static_bl_desc =
+{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS};
+
+/* ===========================================================================
+ * Local (static) routines in this file.
+ */
+
+local void tr_static_init OF((void));
+local void init_block OF((deflate_state *s));
+local void pqdownheap OF((deflate_state *s, ct_data *tree, int k));
+local void gen_bitlen OF((deflate_state *s, tree_desc *desc));
+local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count));
+local void build_tree OF((deflate_state *s, tree_desc *desc));
+local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code));
+local void send_tree OF((deflate_state *s, ct_data *tree, int max_code));
+local int build_bl_tree OF((deflate_state *s));
+local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
+ int blcodes));
+local void compress_block OF((deflate_state *s, const ct_data *ltree,
+ const ct_data *dtree));
+local int detect_data_type OF((deflate_state *s));
+local unsigned bi_reverse OF((unsigned value, int length));
+local void bi_windup OF((deflate_state *s));
+local void bi_flush OF((deflate_state *s));
+local void copy_block OF((deflate_state *s, charf *buf, unsigned len,
+ int header));
+
+#ifdef GEN_TREES_H
+local void gen_trees_header OF((void));
+#endif
+
+#ifndef 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 /* 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
+
+/* ===========================================================================
+ * 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)); \
+}
+
+/* ===========================================================================
+ * Send a value on a given number of bits.
+ * IN assertion: length <= 16 and value fits in length bits.
+ */
+#ifdef DEBUG
+local void send_bits OF((deflate_state *s, int value, int length));
+
+local void send_bits(s, value, length)
+ deflate_state *s;
+ int value; /* value to send */
+ int length; /* number of bits */
+{
+ 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 /* !DEBUG */
+
+#define send_bits(s, value, length) \
+{ int len = length;\
+ if (s->bi_valid > (int)Buf_size - len) {\
+ int val = 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 /* DEBUG */
+
+
+/* the arguments must not have side effects */
+
+/* ===========================================================================
+ * Initialize the various 'constant' tables.
+ */
+local void tr_static_init()
+{
+#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) */
+}
+
+/* ===========================================================================
+ * Genererate the file trees.h describing the static trees.
+ */
+#ifdef GEN_TREES_H
+# ifndef DEBUG
+# include <stdio.h>
+# endif
+
+# define SEPARATOR(i, last, width) \
+ ((i) == (last)? "\n};\n\n" : \
+ ((i) % (width) == (width)-1 ? ",\n" : ", "))
+
+void gen_trees_header()
+{
+ 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 the tree data structures for a new zlib stream.
+ */
+void ZLIB_INTERNAL _tr_init(s)
+ 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 DEBUG
+ s->compressed_len = 0L;
+ s->bits_sent = 0L;
+#endif
+
+ /* Initialize the first block of the first file: */
+ init_block(s);
+}
+
+/* ===========================================================================
+ * Initialize a new block.
+ */
+local void init_block(s)
+ 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->last_lit = s->matches = 0;
+}
+
+#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(s, tree, k)
+ deflate_state *s;
+ ct_data *tree; /* the tree to restore */
+ int k; /* node to move down */
+{
+ 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(s, desc)
+ deflate_state *s;
+ tree_desc *desc; /* the tree descriptor */
+{
+ 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 * (bits + xbits);
+ if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
+ }
+ if (overflow == 0) return;
+
+ Trace((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) {
+ Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
+ s->opt_len += ((long)bits - (long)tree[m].Len)
+ *(long)tree[m].Freq;
+ tree[m].Len = (ush)bits;
+ }
+ n--;
+ }
+ }
+}
+
+/* ===========================================================================
+ * 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 (tree, max_code, bl_count)
+ ct_data *tree; /* the tree to decorate */
+ int max_code; /* largest code with non zero frequency */
+ ushf *bl_count; /* number of codes at each bit length */
+{
+ ush next_code[MAX_BITS+1]; /* next code value for each bit length */
+ ush 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++) {
+ next_code[bits] = code = (code + bl_count[bits-1]) << 1;
+ }
+ /* 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 = 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));
+ }
+}
+
+/* ===========================================================================
+ * 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(s, desc)
+ deflate_state *s;
+ tree_desc *desc; /* the tree descriptor */
+{
+ 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 (s, tree, max_code)
+ deflate_state *s;
+ ct_data *tree; /* the tree to be scanned */
+ int max_code; /* and its largest code of non zero frequency */
+{
+ 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 (s, tree, max_code)
+ deflate_state *s;
+ ct_data *tree; /* the tree to be scanned */
+ int max_code; /* and its largest code of non zero frequency */
+{
+ 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(s)
+ 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*(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(s, lcodes, dcodes, blcodes)
+ deflate_state *s;
+ int lcodes, dcodes, blcodes; /* number of codes for each tree */
+{
+ 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(s, buf, stored_len, last)
+ deflate_state *s;
+ charf *buf; /* input block */
+ ulg stored_len; /* length of input block */
+ int last; /* one if this is the last block for a file */
+{
+ send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */
+#ifdef DEBUG
+ s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
+ s->compressed_len += (stored_len + 4) << 3;
+#endif
+ copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
+}
+
+/* ===========================================================================
+ * Flush the bits in the bit buffer to pending output (leaves at most 7 bits)
+ */
+void ZLIB_INTERNAL _tr_flush_bits(s)
+ 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(s)
+ deflate_state *s;
+{
+ send_bits(s, STATIC_TREES<<1, 3);
+ send_code(s, END_BLOCK, static_ltree);
+#ifdef DEBUG
+ s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
+#endif
+ bi_flush(s);
+}
+
+/* ===========================================================================
+ * Determine the best encoding for the current block: dynamic trees, static
+ * trees or store, and output the encoded block to the zip file.
+ */
+void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
+ deflate_state *s;
+ charf *buf; /* input block, or NULL if too old */
+ ulg stored_len; /* length of input block */
+ int last; /* one if this is the last block for a file */
+{
+ 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->last_lit));
+
+ if (static_lenb <= opt_lenb) 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);
+
+#ifdef FORCE_STATIC
+ } else if (static_lenb >= 0) { /* force static trees */
+#else
+ } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) {
+#endif
+ send_bits(s, (STATIC_TREES<<1)+last, 3);
+ compress_block(s, (const ct_data *)static_ltree,
+ (const ct_data *)static_dtree);
+#ifdef 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 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 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 (s, dist, lc)
+ deflate_state *s;
+ unsigned dist; /* distance of matched string */
+ unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
+{
+ s->d_buf[s->last_lit] = (ush)dist;
+ s->l_buf[s->last_lit++] = (uch)lc;
+ 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++;
+ }
+
+#ifdef TRUNCATE_BLOCK
+ /* Try to guess if it is profitable to stop the current block here */
+ if ((s->last_lit & 0x1fff) == 0 && s->level > 2) {
+ /* Compute an upper bound for the compressed length */
+ ulg out_length = (ulg)s->last_lit*8L;
+ ulg in_length = (ulg)((long)s->strstart - s->block_start);
+ int dcode;
+ for (dcode = 0; dcode < D_CODES; dcode++) {
+ out_length += (ulg)s->dyn_dtree[dcode].Freq *
+ (5L+extra_dbits[dcode]);
+ }
+ out_length >>= 3;
+ Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
+ s->last_lit, in_length, out_length,
+ 100L - out_length*100L/in_length));
+ if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
+ }
+#endif
+ return (s->last_lit == s->lit_bufsize-1);
+ /* We avoid equality with lit_bufsize because of wraparound at 64K
+ * on 16 bit machines and because stored blocks are restricted to
+ * 64K-1 bytes.
+ */
+}
+
+/* ===========================================================================
+ * Send the block data compressed using the given Huffman trees
+ */
+local void compress_block(s, ltree, dtree)
+ deflate_state *s;
+ const ct_data *ltree; /* literal tree */
+ const ct_data *dtree; /* distance tree */
+{
+ unsigned dist; /* distance of matched string */
+ int lc; /* match length or unmatched char (if dist == 0) */
+ unsigned lx = 0; /* running index in l_buf */
+ unsigned code; /* the code to send */
+ int extra; /* number of extra bits to send */
+
+ if (s->last_lit != 0) do {
+ dist = s->d_buf[lx];
+ lc = s->l_buf[lx++];
+ 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 the 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 -= base_dist[code];
+ send_bits(s, dist, extra); /* send the extra distance bits */
+ }
+ } /* literal or match pair ? */
+
+ /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
+ Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
+ "pendingBuf overflow");
+
+ } while (lx < s->last_lit);
+
+ 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
+ * "black list" (0..6, 14..25, 28..31).
+ * b) There is at least one printable character belonging to the
+ * "white 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(s)
+ deflate_state *s;
+{
+ /* black_mask is the bit mask of black-listed bytes
+ * set bits 0..6, 14..25, and 28..31
+ * 0xf3ffc07f = binary 11110011111111111100000001111111
+ */
+ unsigned long black_mask = 0xf3ffc07fUL;
+ int n;
+
+ /* Check for non-textual ("black-listed") bytes. */
+ for (n = 0; n <= 31; n++, black_mask >>= 1)
+ if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0))
+ return Z_BINARY;
+
+ /* Check for textual ("white-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 "black-listed" or "white-listed" bytes:
+ * this stream either is empty or has tolerated ("gray-listed") bytes only.
+ */
+ return Z_BINARY;
+}
+
+/* ===========================================================================
+ * 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(code, len)
+ unsigned code; /* the value to invert */
+ int len; /* its bit length */
+{
+ 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(s)
+ 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(s)
+ 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 DEBUG
+ s->bits_sent = (s->bits_sent+7) & ~7;
+#endif
+}
+
+/* ===========================================================================
+ * Copy a stored block, storing first the length and its
+ * one's complement if requested.
+ */
+local void copy_block(s, buf, len, header)
+ deflate_state *s;
+ charf *buf; /* the input data */
+ unsigned len; /* its length */
+ int header; /* true if block header must be written */
+{
+ bi_windup(s); /* align on byte boundary */
+
+ if (header) {
+ put_short(s, (ush)len);
+ put_short(s, (ush)~len);
+#ifdef DEBUG
+ s->bits_sent += 2*16;
+#endif
+ }
+#ifdef DEBUG
+ s->bits_sent += (ulg)len<<3;
+#endif
+ while (len--) {
+ put_byte(s, *buf++);
+ }
+}
diff --git a/protocols/Telegram/tgl/zlib/trees.h b/protocols/Telegram/tgl/zlib/trees.h
new file mode 100644
index 0000000000..d35639d82a
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/uncompr.c b/protocols/Telegram/tgl/zlib/uncompr.c
new file mode 100644
index 0000000000..242e9493df
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/uncompr.c
@@ -0,0 +1,59 @@
+/* uncompr.c -- decompress a memory buffer
+ * Copyright (C) 1995-2003, 2010 Jean-loup Gailly.
+ * 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 actual size of the compressed buffer.
+
+ 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.
+*/
+int ZEXPORT uncompress (dest, destLen, source, sourceLen)
+ Bytef *dest;
+ uLongf *destLen;
+ const Bytef *source;
+ uLong sourceLen;
+{
+ z_stream stream;
+ int err;
+
+ stream.next_in = (z_const Bytef *)source;
+ stream.avail_in = (uInt)sourceLen;
+ /* Check for source > 64K on 16-bit machine: */
+ if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
+
+ stream.next_out = dest;
+ stream.avail_out = (uInt)*destLen;
+ if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+
+ stream.zalloc = (alloc_func)0;
+ stream.zfree = (free_func)0;
+
+ err = inflateInit(&stream);
+ if (err != Z_OK) return err;
+
+ err = inflate(&stream, Z_FINISH);
+ if (err != Z_STREAM_END) {
+ inflateEnd(&stream);
+ if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
+ return Z_DATA_ERROR;
+ return err;
+ }
+ *destLen = stream.total_out;
+
+ err = inflateEnd(&stream);
+ return err;
+}
diff --git a/protocols/Telegram/tgl/zlib/watcom/watcom_f.mak b/protocols/Telegram/tgl/zlib/watcom/watcom_f.mak
new file mode 100644
index 0000000000..37f4d74c19
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/watcom/watcom_l.mak b/protocols/Telegram/tgl/zlib/watcom/watcom_l.mak
new file mode 100644
index 0000000000..193eed7b31
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/win32/DLL_FAQ.txt b/protocols/Telegram/tgl/zlib/win32/DLL_FAQ.txt
new file mode 100644
index 0000000000..12c009018c
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/win32/DLL_FAQ.txt
@@ -0,0 +1,397 @@
+
+ Frequently Asked Questions about ZLIB1.DLL
+
+
+This document describes the design, the rationale, and the usage
+of the official DLL build of zlib, named ZLIB1.DLL. If you have
+general questions about zlib, you should see the file "FAQ" found
+in the zlib distribution, or at the following location:
+ http://www.gzip.org/zlib/zlib_faq.html
+
+
+ 1. What is ZLIB1.DLL, and how can I get it?
+
+ - ZLIB1.DLL is the official build of zlib as a DLL.
+ (Please remark the character '1' in the name.)
+
+ Pointers to a precompiled ZLIB1.DLL can be found in the zlib
+ web site at:
+ http://www.zlib.net/
+
+ Applications that link to ZLIB1.DLL can rely on the following
+ specification:
+
+ * The exported symbols are exclusively defined in the source
+ files "zlib.h" and "zlib.def", found in an official zlib
+ source distribution.
+ * The symbols are exported by name, not by ordinal.
+ * The exported names are undecorated.
+ * The calling convention of functions is "C" (CDECL).
+ * The ZLIB1.DLL binary is linked to MSVCRT.DLL.
+
+ The archive in which ZLIB1.DLL is bundled contains compiled
+ test programs that must run with a valid build of ZLIB1.DLL.
+ It is recommended to download the prebuilt DLL from the zlib
+ web site, instead of building it yourself, to avoid potential
+ incompatibilities that could be introduced by your compiler
+ and build settings. If you do build the DLL yourself, please
+ make sure that it complies with all the above requirements,
+ and it runs with the precompiled test programs, bundled with
+ the original ZLIB1.DLL distribution.
+
+ If, for any reason, you need to build an incompatible DLL,
+ please use a different file name.
+
+
+ 2. Why did you change the name of the DLL to ZLIB1.DLL?
+ What happened to the old ZLIB.DLL?
+
+ - The old ZLIB.DLL, built from zlib-1.1.4 or earlier, required
+ compilation settings that were incompatible to those used by
+ a static build. The DLL settings were supposed to be enabled
+ by defining the macro ZLIB_DLL, before including "zlib.h".
+ Incorrect handling of this macro was silently accepted at
+ build time, resulting in two major problems:
+
+ * ZLIB_DLL was missing from the old makefile. When building
+ the DLL, not all people added it to the build options. In
+ consequence, incompatible incarnations of ZLIB.DLL started
+ to circulate around the net.
+
+ * When switching from using the static library to using the
+ DLL, applications had to define the ZLIB_DLL macro and
+ to recompile all the sources that contained calls to zlib
+ functions. Failure to do so resulted in creating binaries
+ that were unable to run with the official ZLIB.DLL build.
+
+ The only possible solution that we could foresee was to make
+ a binary-incompatible change in the DLL interface, in order to
+ remove the dependency on the ZLIB_DLL macro, and to release
+ the new DLL under a different name.
+
+ We chose the name ZLIB1.DLL, where '1' indicates the major
+ zlib version number. We hope that we will not have to break
+ the binary compatibility again, at least not as long as the
+ zlib-1.x series will last.
+
+ There is still a ZLIB_DLL macro, that can trigger a more
+ efficient build and use of the DLL, but compatibility no
+ longer dependents on it.
+
+
+ 3. Can I build ZLIB.DLL from the new zlib sources, and replace
+ an old ZLIB.DLL, that was built from zlib-1.1.4 or earlier?
+
+ - In principle, you can do it by assigning calling convention
+ keywords to the macros ZEXPORT and ZEXPORTVA. In practice,
+ it depends on what you mean by "an old ZLIB.DLL", because the
+ old DLL exists in several mutually-incompatible versions.
+ You have to find out first what kind of calling convention is
+ being used in your particular ZLIB.DLL build, and to use the
+ same one in the new build. If you don't know what this is all
+ about, you might be better off if you would just leave the old
+ DLL intact.
+
+
+ 4. Can I compile my application using the new zlib interface, and
+ link it to an old ZLIB.DLL, that was built from zlib-1.1.4 or
+ earlier?
+
+ - The official answer is "no"; the real answer depends again on
+ what kind of ZLIB.DLL you have. Even if you are lucky, this
+ course of action is unreliable.
+
+ If you rebuild your application and you intend to use a newer
+ version of zlib (post- 1.1.4), it is strongly recommended to
+ link it to the new ZLIB1.DLL.
+
+
+ 5. Why are the zlib symbols exported by name, and not by ordinal?
+
+ - Although exporting symbols by ordinal is a little faster, it
+ is risky. Any single glitch in the maintenance or use of the
+ DEF file that contains the ordinals can result in incompatible
+ builds and frustrating crashes. Simply put, the benefits of
+ exporting symbols by ordinal do not justify the risks.
+
+ Technically, it should be possible to maintain ordinals in
+ the DEF file, and still export the symbols by name. Ordinals
+ exist in every DLL, and even if the dynamic linking performed
+ at the DLL startup is searching for names, ordinals serve as
+ hints, for a faster name lookup. However, if the DEF file
+ contains ordinals, the Microsoft linker automatically builds
+ an implib that will cause the executables linked to it to use
+ those ordinals, and not the names. It is interesting to
+ notice that the GNU linker for Win32 does not suffer from this
+ problem.
+
+ It is possible to avoid the DEF file if the exported symbols
+ are accompanied by a "__declspec(dllexport)" attribute in the
+ source files. You can do this in zlib by predefining the
+ ZLIB_DLL macro.
+
+
+ 6. I see that the ZLIB1.DLL functions use the "C" (CDECL) calling
+ convention. Why not use the STDCALL convention?
+ STDCALL is the standard convention in Win32, and I need it in
+ my Visual Basic project!
+
+ (For readability, we use CDECL to refer to the convention
+ triggered by the "__cdecl" keyword, STDCALL to refer to
+ the convention triggered by "__stdcall", and FASTCALL to
+ refer to the convention triggered by "__fastcall".)
+
+ - Most of the native Windows API functions (without varargs) use
+ indeed the WINAPI convention (which translates to STDCALL in
+ Win32), but the standard C functions use CDECL. If a user
+ application is intrinsically tied to the Windows API (e.g.
+ it calls native Windows API functions such as CreateFile()),
+ sometimes it makes sense to decorate its own functions with
+ WINAPI. But if ANSI C or POSIX portability is a goal (e.g.
+ it calls standard C functions such as fopen()), it is not a
+ sound decision to request the inclusion of <windows.h>, or to
+ use non-ANSI constructs, for the sole purpose to make the user
+ functions STDCALL-able.
+
+ The functionality offered by zlib is not in the category of
+ "Windows functionality", but is more like "C functionality".
+
+ Technically, STDCALL is not bad; in fact, it is slightly
+ faster than CDECL, and it works with variable-argument
+ functions, just like CDECL. It is unfortunate that, in spite
+ of using STDCALL in the Windows API, it is not the default
+ convention used by the C compilers that run under Windows.
+ The roots of the problem reside deep inside the unsafety of
+ the K&R-style function prototypes, where the argument types
+ are not specified; but that is another story for another day.
+
+ The remaining fact is that CDECL is the default convention.
+ Even if an explicit convention is hard-coded into the function
+ prototypes inside C headers, problems may appear. The
+ necessity to expose the convention in users' callbacks is one
+ of these problems.
+
+ The calling convention issues are also important when using
+ zlib in other programming languages. Some of them, like Ada
+ (GNAT) and Fortran (GNU G77), have C bindings implemented
+ initially on Unix, and relying on the C calling convention.
+ On the other hand, the pre- .NET versions of Microsoft Visual
+ Basic require STDCALL, while Borland Delphi prefers, although
+ it does not require, FASTCALL.
+
+ In fairness to all possible uses of zlib outside the C
+ programming language, we choose the default "C" convention.
+ Anyone interested in different bindings or conventions is
+ encouraged to maintain specialized projects. The "contrib/"
+ directory from the zlib distribution already holds a couple
+ of foreign bindings, such as Ada, C++, and Delphi.
+
+
+ 7. I need a DLL for my Visual Basic project. What can I do?
+
+ - Define the ZLIB_WINAPI macro before including "zlib.h", when
+ building both the DLL and the user application (except that
+ you don't need to define anything when using the DLL in Visual
+ Basic). The ZLIB_WINAPI macro will switch on the WINAPI
+ (STDCALL) convention. The name of this DLL must be different
+ than the official ZLIB1.DLL.
+
+ Gilles Vollant has contributed a build named ZLIBWAPI.DLL,
+ with the ZLIB_WINAPI macro turned on, and with the minizip
+ functionality built in. For more information, please read
+ the notes inside "contrib/vstudio/readme.txt", found in the
+ zlib distribution.
+
+
+ 8. I need to use zlib in my Microsoft .NET project. What can I
+ do?
+
+ - Henrik Ravn has contributed a .NET wrapper around zlib. Look
+ into contrib/dotzlib/, inside the zlib distribution.
+
+
+ 9. If my application uses ZLIB1.DLL, should I link it to
+ MSVCRT.DLL? Why?
+
+ - It is not required, but it is recommended to link your
+ application to MSVCRT.DLL, if it uses ZLIB1.DLL.
+
+ The executables (.EXE, .DLL, etc.) that are involved in the
+ same process and are using the C run-time library (i.e. they
+ are calling standard C functions), must link to the same
+ library. There are several libraries in the Win32 system:
+ CRTDLL.DLL, MSVCRT.DLL, the static C libraries, etc.
+ Since ZLIB1.DLL is linked to MSVCRT.DLL, the executables that
+ depend on it should also be linked to MSVCRT.DLL.
+
+
+10. Why are you saying that ZLIB1.DLL and my application should
+ be linked to the same C run-time (CRT) library? I linked my
+ application and my DLLs to different C libraries (e.g. my
+ application to a static library, and my DLLs to MSVCRT.DLL),
+ and everything works fine.
+
+ - If a user library invokes only pure Win32 API (accessible via
+ <windows.h> and the related headers), its DLL build will work
+ in any context. But if this library invokes standard C API,
+ things get more complicated.
+
+ There is a single Win32 library in a Win32 system. Every
+ function in this library resides in a single DLL module, that
+ is safe to call from anywhere. On the other hand, there are
+ multiple versions of the C library, and each of them has its
+ own separate internal state. Standalone executables and user
+ DLLs that call standard C functions must link to a C run-time
+ (CRT) library, be it static or shared (DLL). Intermixing
+ occurs when an executable (not necessarily standalone) and a
+ DLL are linked to different CRTs, and both are running in the
+ same process.
+
+ Intermixing multiple CRTs is possible, as long as their
+ internal states are kept intact. The Microsoft Knowledge Base
+ articles KB94248 "HOWTO: Use the C Run-Time" and KB140584
+ "HOWTO: Link with the Correct C Run-Time (CRT) Library"
+ mention the potential problems raised by intermixing.
+
+ If intermixing works for you, it's because your application
+ and DLLs are avoiding the corruption of each of the CRTs'
+ internal states, maybe by careful design, or maybe by fortune.
+
+ Also note that linking ZLIB1.DLL to non-Microsoft CRTs, such
+ as those provided by Borland, raises similar problems.
+
+
+11. Why are you linking ZLIB1.DLL to MSVCRT.DLL?
+
+ - MSVCRT.DLL exists on every Windows 95 with a new service pack
+ installed, or with Microsoft Internet Explorer 4 or later, and
+ on all other Windows 4.x or later (Windows 98, Windows NT 4,
+ or later). It is freely distributable; if not present in the
+ system, it can be downloaded from Microsoft or from other
+ software provider for free.
+
+ The fact that MSVCRT.DLL does not exist on a virgin Windows 95
+ is not so problematic. Windows 95 is scarcely found nowadays,
+ Microsoft ended its support a long time ago, and many recent
+ applications from various vendors, including Microsoft, do not
+ even run on it. Furthermore, no serious user should run
+ Windows 95 without a proper update installed.
+
+
+12. Why are you not linking ZLIB1.DLL to
+ <<my favorite C run-time library>> ?
+
+ - We considered and abandoned the following alternatives:
+
+ * Linking ZLIB1.DLL to a static C library (LIBC.LIB, or
+ LIBCMT.LIB) is not a good option. People are using the DLL
+ mainly to save disk space. If you are linking your program
+ to a static C library, you may as well consider linking zlib
+ in statically, too.
+
+ * Linking ZLIB1.DLL to CRTDLL.DLL looks appealing, because
+ CRTDLL.DLL is present on every Win32 installation.
+ Unfortunately, it has a series of problems: it does not
+ work properly with Microsoft's C++ libraries, it does not
+ provide support for 64-bit file offsets, (and so on...),
+ and Microsoft discontinued its support a long time ago.
+
+ * Linking ZLIB1.DLL to MSVCR70.DLL or MSVCR71.DLL, supplied
+ with the Microsoft .NET platform, and Visual C++ 7.0/7.1,
+ raises problems related to the status of ZLIB1.DLL as a
+ system component. According to the Microsoft Knowledge Base
+ article KB326922 "INFO: Redistribution of the Shared C
+ Runtime Component in Visual C++ .NET", MSVCR70.DLL and
+ MSVCR71.DLL are not supposed to function as system DLLs,
+ because they may clash with MSVCRT.DLL. Instead, the
+ application's installer is supposed to put these DLLs
+ (if needed) in the application's private directory.
+ If ZLIB1.DLL depends on a non-system runtime, it cannot
+ function as a redistributable system component.
+
+ * Linking ZLIB1.DLL to non-Microsoft runtimes, such as
+ Borland's, or Cygwin's, raises problems related to the
+ reliable presence of these runtimes on Win32 systems.
+ It's easier to let the DLL build of zlib up to the people
+ who distribute these runtimes, and who may proceed as
+ explained in the answer to Question 14.
+
+
+13. If ZLIB1.DLL cannot be linked to MSVCR70.DLL or MSVCR71.DLL,
+ how can I build/use ZLIB1.DLL in Microsoft Visual C++ 7.0
+ (Visual Studio .NET) or newer?
+
+ - Due to the problems explained in the Microsoft Knowledge Base
+ article KB326922 (see the previous answer), the C runtime that
+ comes with the VC7 environment is no longer considered a
+ system component. That is, it should not be assumed that this
+ runtime exists, or may be installed in a system directory.
+ Since ZLIB1.DLL is supposed to be a system component, it may
+ not depend on a non-system component.
+
+ In order to link ZLIB1.DLL and your application to MSVCRT.DLL
+ in VC7, you need the library of Visual C++ 6.0 or older. If
+ you don't have this library at hand, it's probably best not to
+ use ZLIB1.DLL.
+
+ We are hoping that, in the future, Microsoft will provide a
+ way to build applications linked to a proper system runtime,
+ from the Visual C++ environment. Until then, you have a
+ couple of alternatives, such as linking zlib in statically.
+ If your application requires dynamic linking, you may proceed
+ as explained in the answer to Question 14.
+
+
+14. I need to link my own DLL build to a CRT different than
+ MSVCRT.DLL. What can I do?
+
+ - Feel free to rebuild the DLL from the zlib sources, and link
+ it the way you want. You should, however, clearly state that
+ your build is unofficial. You should give it a different file
+ name, and/or install it in a private directory that can be
+ accessed by your application only, and is not visible to the
+ others (i.e. it's neither in the PATH, nor in the SYSTEM or
+ SYSTEM32 directories). Otherwise, your build may clash with
+ applications that link to the official build.
+
+ For example, in Cygwin, zlib is linked to the Cygwin runtime
+ CYGWIN1.DLL, and it is distributed under the name CYGZ.DLL.
+
+
+15. May I include additional pieces of code that I find useful,
+ link them in ZLIB1.DLL, and export them?
+
+ - No. A legitimate build of ZLIB1.DLL must not include code
+ that does not originate from the official zlib source code.
+ But you can make your own private DLL build, under a different
+ file name, as suggested in the previous answer.
+
+ For example, zlib is a part of the VCL library, distributed
+ with Borland Delphi and C++ Builder. The DLL build of VCL
+ is a redistributable file, named VCLxx.DLL.
+
+
+16. May I remove some functionality out of ZLIB1.DLL, by enabling
+ macros like NO_GZCOMPRESS or NO_GZIP at compile time?
+
+ - No. A legitimate build of ZLIB1.DLL must provide the complete
+ zlib functionality, as implemented in the official zlib source
+ code. But you can make your own private DLL build, under a
+ different file name, as suggested in the previous answer.
+
+
+17. I made my own ZLIB1.DLL build. Can I test it for compliance?
+
+ - We prefer that you download the official DLL from the zlib
+ web site. If you need something peculiar from this DLL, you
+ can send your suggestion to the zlib mailing list.
+
+ However, in case you do rebuild the DLL yourself, you can run
+ it with the test programs found in the DLL distribution.
+ Running these test programs is not a guarantee of compliance,
+ but a failure can imply a detected problem.
+
+**
+
+This document is written and maintained by
+Cosmin Truta <cosmint@cs.ubbcluj.ro>
diff --git a/protocols/Telegram/tgl/zlib/win32/Makefile.bor b/protocols/Telegram/tgl/zlib/win32/Makefile.bor
new file mode 100644
index 0000000000..d152bbb7ff
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/win32/Makefile.bor
@@ -0,0 +1,110 @@
+# Makefile for zlib
+# Borland C++ for Win32
+#
+# Usage:
+# make -f win32/Makefile.bor
+# make -f win32/Makefile.bor LOCAL_ZLIB=-DASMV OBJA=match.obj OBJPA=+match.obj
+
+# ------------ 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)
+
+CC = bcc32
+AS = bcc32
+LD = bcc32
+AR = tlib
+CFLAGS = -a -d -k- -O2 $(LOC)
+ASFLAGS = $(LOC)
+LDFLAGS = $(LOC)
+
+
+# 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
+#OBJA =
+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
+#OBJPA=
+
+
+# targets
+all: $(ZLIB_LIB) example.exe minigzip.exe
+
+.c.obj:
+ $(CC) -c $(CFLAGS) $<
+
+.asm.obj:
+ $(AS) -c $(ASFLAGS) $<
+
+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) $(OBJA)
+ -del $(ZLIB_LIB)
+ $(AR) $(ZLIB_LIB) $(OBJP1)
+ $(AR) $(ZLIB_LIB) $(OBJP2)
+ $(AR) $(ZLIB_LIB) $(OBJPA)
+
+
+# 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 $(ZLIB_LIB)
+ -del *.obj
+ -del *.exe
+ -del *.tds
+ -del zlib.bak
+ -del foo.gz
diff --git a/protocols/Telegram/tgl/zlib/win32/Makefile.gcc b/protocols/Telegram/tgl/zlib/win32/Makefile.gcc
new file mode 100644
index 0000000000..6d1ded622b
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/win32/Makefile.gcc
@@ -0,0 +1,182 @@
+# Makefile for zlib, derived from Makefile.dj2.
+# Modified for mingw32 by C. Spieler, 6/16/98.
+# Updated for zlib 1.2.x by Christian Spieler and Cosmin Truta, Mar-2003.
+# Last updated: Mar 2012.
+# Tested under Cygwin and MinGW.
+
+# Copyright (C) 1995-2003 Jean-loup Gailly.
+# For conditions of distribution and use, see copyright notice in zlib.h
+
+# To compile, or to compile and test, type from the top level zlib directory:
+#
+# make -fwin32/Makefile.gcc; make test testdll -fwin32/Makefile.gcc
+#
+# To use the asm code, type:
+# cp contrib/asm?86/match.S ./match.S
+# make LOC=-DASMV OBJA=match.o -fwin32/Makefile.gcc
+#
+# To install libz.a, zconf.h and zlib.h in the system directories, type:
+#
+# make install -fwin32/Makefile.gcc
+#
+# BINARY_PATH, INCLUDE_PATH and LIBRARY_PATH must be set.
+#
+# To install the shared lib, append SHARED_MODE=1 to the make command :
+#
+# make install -fwin32/Makefile.gcc SHARED_MODE=1
+
+# Note:
+# If the platform is *not* MinGW (e.g. it is Cygwin or UWIN),
+# the DLL name should be changed from "zlib1.dll".
+
+STATICLIB = libz.a
+SHAREDLIB = zlib1.dll
+IMPLIB = libz.dll.a
+
+#
+# Set to 1 if shared object needs to be installed
+#
+SHARED_MODE=0
+
+#LOC = -DASMV
+#LOC = -DDEBUG -g
+
+PREFIX =
+CC = $(PREFIX)gcc
+CFLAGS = $(LOC) -O3 -Wall
+
+AS = $(CC)
+ASFLAGS = $(LOC) -Wall
+
+LD = $(CC)
+LDFLAGS = $(LOC)
+
+AR = $(PREFIX)ar
+ARFLAGS = rcs
+
+RC = $(PREFIX)windres
+RCFLAGS = --define GCC_WINDRES
+
+STRIP = $(PREFIX)strip
+
+CP = cp -fp
+# If GNU install is available, replace $(CP) with install.
+INSTALL = $(CP)
+RM = rm -f
+
+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
+OBJA =
+
+all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) example.exe minigzip.exe example_d.exe minigzip_d.exe
+
+test: example.exe minigzip.exe
+ ./example
+ echo hello world | ./minigzip | ./minigzip -d
+
+testdll: example_d.exe minigzip_d.exe
+ ./example_d
+ echo hello world | ./minigzip_d | ./minigzip_d -d
+
+.c.o:
+ $(CC) $(CFLAGS) -c -o $@ $<
+
+.S.o:
+ $(AS) $(ASFLAGS) -c -o $@ $<
+
+$(STATICLIB): $(OBJS) $(OBJA)
+ $(AR) $(ARFLAGS) $@ $(OBJS) $(OBJA)
+
+$(IMPLIB): $(SHAREDLIB)
+
+$(SHAREDLIB): win32/zlib.def $(OBJS) $(OBJA) zlibrc.o
+ $(CC) -shared -Wl,--out-implib,$(IMPLIB) $(LDFLAGS) \
+ -o $@ win32/zlib.def $(OBJS) $(OBJA) zlibrc.o
+ $(STRIP) $@
+
+example.exe: example.o $(STATICLIB)
+ $(LD) $(LDFLAGS) -o $@ example.o $(STATICLIB)
+ $(STRIP) $@
+
+minigzip.exe: minigzip.o $(STATICLIB)
+ $(LD) $(LDFLAGS) -o $@ minigzip.o $(STATICLIB)
+ $(STRIP) $@
+
+example_d.exe: example.o $(IMPLIB)
+ $(LD) $(LDFLAGS) -o $@ example.o $(IMPLIB)
+ $(STRIP) $@
+
+minigzip_d.exe: minigzip.o $(IMPLIB)
+ $(LD) $(LDFLAGS) -o $@ minigzip.o $(IMPLIB)
+ $(STRIP) $@
+
+example.o: test/example.c zlib.h zconf.h
+ $(CC) $(CFLAGS) -I. -c -o $@ test/example.c
+
+minigzip.o: test/minigzip.c zlib.h zconf.h
+ $(CC) $(CFLAGS) -I. -c -o $@ test/minigzip.c
+
+zlibrc.o: win32/zlib1.rc
+ $(RC) $(RCFLAGS) -o $@ win32/zlib1.rc
+
+.PHONY: install uninstall clean
+
+install: zlib.h zconf.h $(STATICLIB) $(IMPLIB)
+ @if test -z "$(DESTDIR)$(INCLUDE_PATH)" -o -z "$(DESTDIR)$(LIBRARY_PATH)" -o -z "$(DESTDIR)$(BINARY_PATH)"; then \
+ echo INCLUDE_PATH, LIBRARY_PATH, and BINARY_PATH must be specified; \
+ exit 1; \
+ fi
+ -@mkdir -p '$(DESTDIR)$(INCLUDE_PATH)'
+ -@mkdir -p '$(DESTDIR)$(LIBRARY_PATH)' '$(DESTDIR)$(LIBRARY_PATH)'/pkgconfig
+ -if [ "$(SHARED_MODE)" = "1" ]; then \
+ mkdir -p '$(DESTDIR)$(BINARY_PATH)'; \
+ $(INSTALL) $(SHAREDLIB) '$(DESTDIR)$(BINARY_PATH)'; \
+ $(INSTALL) $(IMPLIB) '$(DESTDIR)$(LIBRARY_PATH)'; \
+ fi
+ -$(INSTALL) zlib.h '$(DESTDIR)$(INCLUDE_PATH)'
+ -$(INSTALL) zconf.h '$(DESTDIR)$(INCLUDE_PATH)'
+ -$(INSTALL) $(STATICLIB) '$(DESTDIR)$(LIBRARY_PATH)'
+ sed \
+ -e 's|@prefix@|${prefix}|g' \
+ -e 's|@exec_prefix@|${exec_prefix}|g' \
+ -e 's|@libdir@|$(LIBRARY_PATH)|g' \
+ -e 's|@sharedlibdir@|$(LIBRARY_PATH)|g' \
+ -e 's|@includedir@|$(INCLUDE_PATH)|g' \
+ -e 's|@VERSION@|'`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' zlib.h`'|g' \
+ zlib.pc.in > '$(DESTDIR)$(LIBRARY_PATH)'/pkgconfig/zlib.pc
+
+uninstall:
+ -if [ "$(SHARED_MODE)" = "1" ]; then \
+ $(RM) '$(DESTDIR)$(BINARY_PATH)'/$(SHAREDLIB); \
+ $(RM) '$(DESTDIR)$(LIBRARY_PATH)'/$(IMPLIB); \
+ fi
+ -$(RM) '$(DESTDIR)$(INCLUDE_PATH)'/zlib.h
+ -$(RM) '$(DESTDIR)$(INCLUDE_PATH)'/zconf.h
+ -$(RM) '$(DESTDIR)$(LIBRARY_PATH)'/$(STATICLIB)
+
+clean:
+ -$(RM) $(STATICLIB)
+ -$(RM) $(SHAREDLIB)
+ -$(RM) $(IMPLIB)
+ -$(RM) *.o
+ -$(RM) *.exe
+ -$(RM) foo.gz
+
+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
+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
+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/protocols/Telegram/tgl/zlib/win32/Makefile.msc b/protocols/Telegram/tgl/zlib/win32/Makefile.msc
new file mode 100644
index 0000000000..67b773171d
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/win32/Makefile.msc
@@ -0,0 +1,163 @@
+# Makefile for zlib using Microsoft (Visual) C
+# zlib is copyright (C) 1995-2006 Jean-loup Gailly and Mark Adler
+#
+# Usage:
+# nmake -f win32/Makefile.msc (standard build)
+# nmake -f win32/Makefile.msc LOC=-DFOO (nonstandard build)
+# nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" \
+# OBJA="inffas32.obj match686.obj" (use ASM code, x86)
+# nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -I." \
+# OBJA="inffasx64.obj gvmat64.obj inffas8664.obj" (use ASM code, x64)
+
+# The toplevel directory of the source tree.
+#
+TOP = .
+
+# optional build flags
+LOC =
+
+# variables
+STATICLIB = zlib.lib
+SHAREDLIB = zlib1.dll
+IMPLIB = zdll.lib
+
+CC = cl
+AS = ml
+LD = link
+AR = lib
+RC = rc
+CFLAGS = -nologo -MD -W3 -O2 -Oy- -Zi -Fd"zlib" $(LOC)
+WFLAGS = -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
+ASFLAGS = -coff -Zi $(LOC)
+LDFLAGS = -nologo -debug -incremental:no -opt:ref
+ARFLAGS = -nologo
+RCFLAGS = /dWIN32 /r
+
+OBJS = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj \
+ gzwrite.obj infback.obj inflate.obj inftrees.obj inffast.obj trees.obj uncompr.obj zutil.obj
+OBJA =
+
+
+# targets
+all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) \
+ example.exe minigzip.exe example_d.exe minigzip_d.exe
+
+$(STATICLIB): $(OBJS) $(OBJA)
+ $(AR) $(ARFLAGS) -out:$@ $(OBJS) $(OBJA)
+
+$(IMPLIB): $(SHAREDLIB)
+
+$(SHAREDLIB): $(TOP)/win32/zlib.def $(OBJS) $(OBJA) zlib1.res
+ $(LD) $(LDFLAGS) -def:$(TOP)/win32/zlib.def -dll -implib:$(IMPLIB) \
+ -out:$@ -base:0x5A4C0000 $(OBJS) $(OBJA) zlib1.res
+ if exist $@.manifest \
+ mt -nologo -manifest $@.manifest -outputresource:$@;2
+
+example.exe: example.obj $(STATICLIB)
+ $(LD) $(LDFLAGS) example.obj $(STATICLIB)
+ if exist $@.manifest \
+ mt -nologo -manifest $@.manifest -outputresource:$@;1
+
+minigzip.exe: minigzip.obj $(STATICLIB)
+ $(LD) $(LDFLAGS) minigzip.obj $(STATICLIB)
+ if exist $@.manifest \
+ mt -nologo -manifest $@.manifest -outputresource:$@;1
+
+example_d.exe: example.obj $(IMPLIB)
+ $(LD) $(LDFLAGS) -out:$@ example.obj $(IMPLIB)
+ if exist $@.manifest \
+ mt -nologo -manifest $@.manifest -outputresource:$@;1
+
+minigzip_d.exe: minigzip.obj $(IMPLIB)
+ $(LD) $(LDFLAGS) -out:$@ minigzip.obj $(IMPLIB)
+ if exist $@.manifest \
+ mt -nologo -manifest $@.manifest -outputresource:$@;1
+
+{$(TOP)}.c.obj:
+ $(CC) -c $(WFLAGS) $(CFLAGS) $<
+
+{$(TOP)/test}.c.obj:
+ $(CC) -c -I$(TOP) $(WFLAGS) $(CFLAGS) $<
+
+{$(TOP)/contrib/masmx64}.c.obj:
+ $(CC) -c $(WFLAGS) $(CFLAGS) $<
+
+{$(TOP)/contrib/masmx64}.asm.obj:
+ $(AS) -c $(ASFLAGS) $<
+
+{$(TOP)/contrib/masmx86}.asm.obj:
+ $(AS) -c $(ASFLAGS) $<
+
+adler32.obj: $(TOP)/adler32.c $(TOP)/zlib.h $(TOP)/zconf.h
+
+compress.obj: $(TOP)/compress.c $(TOP)/zlib.h $(TOP)/zconf.h
+
+crc32.obj: $(TOP)/crc32.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/crc32.h
+
+deflate.obj: $(TOP)/deflate.c $(TOP)/deflate.h $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h
+
+gzclose.obj: $(TOP)/gzclose.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h
+
+gzlib.obj: $(TOP)/gzlib.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h
+
+gzread.obj: $(TOP)/gzread.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h
+
+gzwrite.obj: $(TOP)/gzwrite.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h
+
+infback.obj: $(TOP)/infback.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h $(TOP)/inflate.h \
+ $(TOP)/inffast.h $(TOP)/inffixed.h
+
+inffast.obj: $(TOP)/inffast.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h $(TOP)/inflate.h \
+ $(TOP)/inffast.h
+
+inflate.obj: $(TOP)/inflate.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h $(TOP)/inflate.h \
+ $(TOP)/inffast.h $(TOP)/inffixed.h
+
+inftrees.obj: $(TOP)/inftrees.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h
+
+trees.obj: $(TOP)/trees.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/deflate.h $(TOP)/trees.h
+
+uncompr.obj: $(TOP)/uncompr.c $(TOP)/zlib.h $(TOP)/zconf.h
+
+zutil.obj: $(TOP)/zutil.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h
+
+gvmat64.obj: $(TOP)/contrib\masmx64\gvmat64.asm
+
+inffasx64.obj: $(TOP)/contrib\masmx64\inffasx64.asm
+
+inffas8664.obj: $(TOP)/contrib\masmx64\inffas8664.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h \
+ $(TOP)/inftrees.h $(TOP)/inflate.h $(TOP)/inffast.h
+
+inffas32.obj: $(TOP)/contrib\masmx86\inffas32.asm
+
+match686.obj: $(TOP)/contrib\masmx86\match686.asm
+
+example.obj: $(TOP)/test/example.c $(TOP)/zlib.h $(TOP)/zconf.h
+
+minigzip.obj: $(TOP)/test/minigzip.c $(TOP)/zlib.h $(TOP)/zconf.h
+
+zlib1.res: $(TOP)/win32/zlib1.rc
+ $(RC) $(RCFLAGS) /fo$@ $(TOP)/win32/zlib1.rc
+
+# testing
+test: example.exe minigzip.exe
+ example
+ echo hello world | minigzip | minigzip -d
+
+testdll: example_d.exe minigzip_d.exe
+ example_d
+ echo hello world | minigzip_d | minigzip_d -d
+
+
+# cleanup
+clean:
+ -del $(STATICLIB)
+ -del $(SHAREDLIB)
+ -del $(IMPLIB)
+ -del *.obj
+ -del *.res
+ -del *.exp
+ -del *.exe
+ -del *.pdb
+ -del *.manifest
+ -del foo.gz
diff --git a/protocols/Telegram/tgl/zlib/win32/README-WIN32.txt b/protocols/Telegram/tgl/zlib/win32/README-WIN32.txt
new file mode 100644
index 0000000000..3d77d521e8
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/win32/README-WIN32.txt
@@ -0,0 +1,103 @@
+ZLIB DATA COMPRESSION LIBRARY
+
+zlib 1.2.8 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://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format)
+and rfc1952.txt (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). Two compiled
+examples are distributed in this package, example and minigzip. The example_d
+and minigzip_d flavors validate that the zlib1.dll file is working correctly.
+
+Questions about zlib should be sent to <zlib@gzip.org>. 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 DLL_FAQ.txt, and the the zlib FAQ http://zlib.net/zlib_faq.html
+before asking for help.
+
+
+Manifest:
+
+The package zlib-1.2.8-win32-x86.zip will contain the following files:
+
+ README-WIN32.txt This document
+ ChangeLog Changes since previous zlib packages
+ DLL_FAQ.txt Frequently asked questions about zlib1.dll
+ zlib.3.pdf Documentation of this library in Adobe Acrobat format
+
+ example.exe A statically-bound example (using zlib.lib, not the dll)
+ example.pdb Symbolic information for debugging example.exe
+
+ example_d.exe A zlib1.dll bound example (using zdll.lib)
+ example_d.pdb Symbolic information for debugging example_d.exe
+
+ minigzip.exe A statically-bound test program (using zlib.lib, not the dll)
+ minigzip.pdb Symbolic information for debugging minigzip.exe
+
+ minigzip_d.exe A zlib1.dll bound test program (using zdll.lib)
+ minigzip_d.pdb Symbolic information for debugging minigzip_d.exe
+
+ zlib.h Install these files into the compilers' INCLUDE path to
+ zconf.h compile programs which use zlib.lib or zdll.lib
+
+ zdll.lib Install these files into the compilers' LIB path if linking
+ zdll.exp a compiled program to the zlib1.dll binary
+
+ zlib.lib Install these files into the compilers' LIB path to link zlib
+ zlib.pdb into compiled programs, without zlib1.dll runtime dependency
+ (zlib.pdb provides debugging info to the compile time linker)
+
+ zlib1.dll Install this binary shared library into the system PATH, or
+ the program's runtime directory (where the .exe resides)
+ zlib1.pdb Install in the same directory as zlib1.dll, in order to debug
+ an application crash using WinDbg or similar tools.
+
+All .pdb files above are entirely optional, but are very useful to a developer
+attempting to diagnose program misbehavior or a crash. Many additional
+important files for developers can be found in the zlib127.zip source package
+available from http://zlib.net/ - review that package's README file for details.
+
+
+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-2012 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.
+
+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/protocols/Telegram/tgl/zlib/win32/VisualC.txt b/protocols/Telegram/tgl/zlib/win32/VisualC.txt
new file mode 100644
index 0000000000..579a5fc9e0
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/win32/VisualC.txt
@@ -0,0 +1,3 @@
+
+To build zlib using the Microsoft Visual C++ environment,
+use the appropriate project from the projects/ directory.
diff --git a/protocols/Telegram/tgl/zlib/win32/zlib.def b/protocols/Telegram/tgl/zlib/win32/zlib.def
new file mode 100644
index 0000000000..face655183
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/win32/zlib.def
@@ -0,0 +1,86 @@
+; zlib data compression library
+EXPORTS
+; basic functions
+ zlibVersion
+ deflate
+ deflateEnd
+ inflate
+ inflateEnd
+; advanced functions
+ deflateSetDictionary
+ deflateCopy
+ deflateReset
+ deflateParams
+ deflateTune
+ deflateBound
+ deflatePending
+ deflatePrime
+ deflateSetHeader
+ inflateSetDictionary
+ inflateGetDictionary
+ inflateSync
+ inflateCopy
+ inflateReset
+ inflateReset2
+ inflatePrime
+ inflateMark
+ inflateGetHeader
+ inflateBack
+ inflateBackEnd
+ zlibCompileFlags
+; utility functions
+ compress
+ compress2
+ compressBound
+ uncompress
+ gzopen
+ gzdopen
+ gzbuffer
+ gzsetparams
+ gzread
+ gzwrite
+ gzprintf
+ gzvprintf
+ gzputs
+ gzgets
+ gzputc
+ gzgetc
+ gzungetc
+ gzflush
+ gzseek
+ gzrewind
+ gztell
+ gzoffset
+ gzeof
+ gzdirect
+ gzclose
+ gzclose_r
+ gzclose_w
+ gzerror
+ gzclearerr
+; large file functions
+ gzopen64
+ gzseek64
+ gztell64
+ gzoffset64
+ adler32_combine64
+ crc32_combine64
+; checksum functions
+ adler32
+ crc32
+ adler32_combine
+ crc32_combine
+; various hacks, don't look :)
+ deflateInit_
+ deflateInit2_
+ inflateInit_
+ inflateInit2_
+ inflateBackInit_
+ gzgetc_
+ zError
+ inflateSyncPoint
+ get_crc_table
+ inflateUndermine
+ inflateResetKeep
+ deflateResetKeep
+ gzopen_w
diff --git a/protocols/Telegram/tgl/zlib/win32/zlib1.rc b/protocols/Telegram/tgl/zlib/win32/zlib1.rc
new file mode 100644
index 0000000000..5c0feed1b4
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/win32/zlib1.rc
@@ -0,0 +1,40 @@
+#include <winver.h>
+#include "../zlib.h"
+
+#ifdef GCC_WINDRES
+VS_VERSION_INFO VERSIONINFO
+#else
+VS_VERSION_INFO VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
+#endif
+ FILEVERSION ZLIB_VER_MAJOR,ZLIB_VER_MINOR,ZLIB_VER_REVISION,0
+ PRODUCTVERSION ZLIB_VER_MAJOR,ZLIB_VER_MINOR,ZLIB_VER_REVISION,0
+ FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
+#ifdef _DEBUG
+ FILEFLAGS 1
+#else
+ FILEFLAGS 0
+#endif
+ FILEOS VOS__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 library\0"
+ VALUE "FileVersion", ZLIB_VERSION "\0"
+ VALUE "InternalName", "zlib1.dll\0"
+ VALUE "LegalCopyright", "(C) 1995-2013 Jean-loup Gailly & Mark Adler\0"
+ VALUE "OriginalFilename", "zlib1.dll\0"
+ VALUE "ProductName", "zlib\0"
+ VALUE "ProductVersion", ZLIB_VERSION "\0"
+ VALUE "Comments", "For more information visit http://www.zlib.net/\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x0409, 1252
+ END
+END
diff --git a/protocols/Telegram/tgl/zlib/zconf.h b/protocols/Telegram/tgl/zlib/zconf.h
new file mode 100644
index 0000000000..9987a77553
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/zconf.h
@@ -0,0 +1,511 @@
+/* zconf.h -- configuration of the zlib compression library
+ * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * 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 */
+# 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
+# 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 deflate z_deflate
+# define deflateBound z_deflateBound
+# define deflateCopy z_deflateCopy
+# define deflateEnd z_deflateEnd
+# 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 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 gzvprintf z_gzvprintf
+# 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 gzwrite z_gzwrite
+# endif
+# define inflate z_inflate
+# define inflateBack z_inflateBack
+# define inflateBackEnd z_inflateBackEnd
+# define inflateBackInit_ z_inflateBackInit_
+# define inflateCopy z_inflateCopy
+# define inflateEnd z_inflateEnd
+# define inflateGetHeader z_inflateGetHeader
+# 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 inflateSetDictionary z_inflateSetDictionary
+# define inflateGetDictionary z_inflateGetDictionary
+# define inflateSync z_inflateSync
+# define inflateSyncPoint z_inflateSyncPoint
+# define inflateUndermine z_inflateUndermine
+# define inflateResetKeep z_inflateResetKeep
+# 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
+# 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
+
+/* Some Mac compilers merge all .h files incorrectly: */
+#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
+# define NO_DUMMY_DECL
+#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 a few kilobytes
+ for small objects.
+*/
+
+ /* Type declarations */
+
+#ifndef OF /* function prototypes */
+# ifdef STDC
+# define OF(args) args
+# else
+# define OF(args) ()
+# endif
+#endif
+
+#ifndef Z_ARG /* function prototypes for stdarg */
+# if defined(STDC) || defined(Z_HAVE_STDARG_H)
+# define Z_ARG(args) args
+# else
+# define Z_ARG(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
+# include <windows.h>
+ /* 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 <limits.h>
+# 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 <sys/types.h> /* for off_t */
+# endif
+#endif
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+# ifndef Z_SOLO
+# include <stdarg.h> /* for va_list */
+# endif
+#endif
+
+#ifdef _WIN32
+# ifndef Z_SOLO
+# include <stddef.h> /* 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
+
+#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
+# define Z_HAVE_UNISTD_H
+#endif
+#ifndef Z_SOLO
+# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
+# include <unistd.h> /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
+# ifdef VMS
+# include <unixio.h> /* 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__) && !defined(Z_SOLO)
+# 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/protocols/Telegram/tgl/zlib/zconf.h.cmakein b/protocols/Telegram/tgl/zlib/zconf.h.cmakein
new file mode 100644
index 0000000000..043019cda1
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/zconf.h.cmakein
@@ -0,0 +1,513 @@
+/* zconf.h -- configuration of the zlib compression library
+ * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * 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 */
+# 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
+# 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 deflate z_deflate
+# define deflateBound z_deflateBound
+# define deflateCopy z_deflateCopy
+# define deflateEnd z_deflateEnd
+# 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 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 gzvprintf z_gzvprintf
+# 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 gzwrite z_gzwrite
+# endif
+# define inflate z_inflate
+# define inflateBack z_inflateBack
+# define inflateBackEnd z_inflateBackEnd
+# define inflateBackInit_ z_inflateBackInit_
+# define inflateCopy z_inflateCopy
+# define inflateEnd z_inflateEnd
+# define inflateGetHeader z_inflateGetHeader
+# 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 inflateSetDictionary z_inflateSetDictionary
+# define inflateGetDictionary z_inflateGetDictionary
+# define inflateSync z_inflateSync
+# define inflateSyncPoint z_inflateSyncPoint
+# define inflateUndermine z_inflateUndermine
+# define inflateResetKeep z_inflateResetKeep
+# 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
+# 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
+
+/* Some Mac compilers merge all .h files incorrectly: */
+#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
+# define NO_DUMMY_DECL
+#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 a few kilobytes
+ for small objects.
+*/
+
+ /* Type declarations */
+
+#ifndef OF /* function prototypes */
+# ifdef STDC
+# define OF(args) args
+# else
+# define OF(args) ()
+# endif
+#endif
+
+#ifndef Z_ARG /* function prototypes for stdarg */
+# if defined(STDC) || defined(Z_HAVE_STDARG_H)
+# define Z_ARG(args) args
+# else
+# define Z_ARG(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
+# include <windows.h>
+ /* 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 <limits.h>
+# 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 <sys/types.h> /* for off_t */
+# endif
+#endif
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+# ifndef Z_SOLO
+# include <stdarg.h> /* for va_list */
+# endif
+#endif
+
+#ifdef _WIN32
+# ifndef Z_SOLO
+# include <stddef.h> /* 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
+
+#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
+# define Z_HAVE_UNISTD_H
+#endif
+#ifndef Z_SOLO
+# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
+# include <unistd.h> /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
+# ifdef VMS
+# include <unixio.h> /* 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__) && !defined(Z_SOLO)
+# 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/protocols/Telegram/tgl/zlib/zconf.h.in b/protocols/Telegram/tgl/zlib/zconf.h.in
new file mode 100644
index 0000000000..9987a77553
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/zconf.h.in
@@ -0,0 +1,511 @@
+/* zconf.h -- configuration of the zlib compression library
+ * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * 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 */
+# 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
+# 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 deflate z_deflate
+# define deflateBound z_deflateBound
+# define deflateCopy z_deflateCopy
+# define deflateEnd z_deflateEnd
+# 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 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 gzvprintf z_gzvprintf
+# 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 gzwrite z_gzwrite
+# endif
+# define inflate z_inflate
+# define inflateBack z_inflateBack
+# define inflateBackEnd z_inflateBackEnd
+# define inflateBackInit_ z_inflateBackInit_
+# define inflateCopy z_inflateCopy
+# define inflateEnd z_inflateEnd
+# define inflateGetHeader z_inflateGetHeader
+# 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 inflateSetDictionary z_inflateSetDictionary
+# define inflateGetDictionary z_inflateGetDictionary
+# define inflateSync z_inflateSync
+# define inflateSyncPoint z_inflateSyncPoint
+# define inflateUndermine z_inflateUndermine
+# define inflateResetKeep z_inflateResetKeep
+# 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
+# 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
+
+/* Some Mac compilers merge all .h files incorrectly: */
+#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
+# define NO_DUMMY_DECL
+#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 a few kilobytes
+ for small objects.
+*/
+
+ /* Type declarations */
+
+#ifndef OF /* function prototypes */
+# ifdef STDC
+# define OF(args) args
+# else
+# define OF(args) ()
+# endif
+#endif
+
+#ifndef Z_ARG /* function prototypes for stdarg */
+# if defined(STDC) || defined(Z_HAVE_STDARG_H)
+# define Z_ARG(args) args
+# else
+# define Z_ARG(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
+# include <windows.h>
+ /* 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 <limits.h>
+# 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 <sys/types.h> /* for off_t */
+# endif
+#endif
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+# ifndef Z_SOLO
+# include <stdarg.h> /* for va_list */
+# endif
+#endif
+
+#ifdef _WIN32
+# ifndef Z_SOLO
+# include <stddef.h> /* 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
+
+#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
+# define Z_HAVE_UNISTD_H
+#endif
+#ifndef Z_SOLO
+# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
+# include <unistd.h> /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
+# ifdef VMS
+# include <unixio.h> /* 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__) && !defined(Z_SOLO)
+# 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/protocols/Telegram/tgl/zlib/zlib.3 b/protocols/Telegram/tgl/zlib/zlib.3
new file mode 100644
index 0000000000..0160e62b69
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/zlib.3
@@ -0,0 +1,151 @@
+.TH ZLIB 3 "28 Apr 2013"
+.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 available in Java using the java.util.zip package:
+.IP
+http://java.sun.com/developer/technicalArticles/Programming/compression/
+.LP
+A Perl interface to
+.IR zlib ,
+written by Paul Marquess (pmqs@cpan.org),
+is available at CPAN (Comprehensive Perl Archive Network) sites,
+including:
+.IP
+http://search.cpan.org/~pmqs/IO-Compress-Zlib/
+.LP
+A Python interface to
+.IR zlib ,
+written by A.M. Kuchling (amk@magnet.com),
+is available in Python 1.5 and later versions:
+.IP
+http://docs.python.org/library/zlib.html
+.LP
+.I zlib
+is built into
+.IR tcl:
+.IP
+http://wiki.tcl.tk/4610
+.LP
+An experimental package to read and write files in .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 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
+Version 1.2.8
+Copyright (C) 1995-2013 Jean-loup Gailly (jloup@gzip.org)
+and Mark Adler (madler@alumni.caltech.edu).
+.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.
+See the distribution directory with respect to requirements
+governing redistribution.
+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/protocols/Telegram/tgl/zlib/zlib.3.pdf b/protocols/Telegram/tgl/zlib/zlib.3.pdf
new file mode 100644
index 0000000000..a346b5d7e2
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/zlib.3.pdf
Binary files differ
diff --git a/protocols/Telegram/tgl/zlib/zlib.h b/protocols/Telegram/tgl/zlib/zlib.h
new file mode 100644
index 0000000000..3e0c7672ac
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/zlib.h
@@ -0,0 +1,1768 @@
+/* zlib.h -- interface of the 'zlib' general purpose compression library
+ version 1.2.8, April 28th, 2013
+
+ Copyright (C) 1995-2013 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.2.8"
+#define ZLIB_VERNUM 0x1280
+#define ZLIB_VER_MAJOR 1
+#define ZLIB_VER_MINOR 2
+#define ZLIB_VER_REVISION 8
+#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 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 case of corrupted input.
+*/
+
+typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
+typedef void (*free_func) OF((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 should be put there */
+ 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 */
+ uLong adler; /* adler32 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.
+
+ 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 in 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 (though see inflate()) */
+
+#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 OF((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 OF((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.
+
+ 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 OF((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().
+
+ - Provide 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 (in interactive applications). Some
+ output may be provided even if flush is not set.
+
+ 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.
+
+ 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 code
+ 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 to avoid repeated flush markers due to
+ avail_out == 0 on return.
+
+ 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, 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 immediately after deflateInit if all the compression
+ is to be done in a single step. In this case, 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 adler32 checksum of all input read
+ so far (that is, total_in bytes).
+
+ deflate() may update strm->data_type if it can make a good guess about
+ the input data type (Z_BINARY or Z_TEXT). 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), 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 OF((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 OF((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. If next_in is not Z_NULL and avail_in is large enough (the
+ exact value depends on the compression method), inflateInit determines the
+ compression method from the zlib header and allocates all data structures
+ accordingly; otherwise the allocation will be deferred to the first call of
+ inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to
+ use default allocation functions.
+
+ 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
+ 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 inflateInit() does not process any header information -- that is deferred
+ until inflate() is called.
+*/
+
+
+ZEXTERN int ZEXPORT inflate OF((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), next_in is updated and processing will
+ resume at this point for the next call of inflate().
+
+ - Provide 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. 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.
+ Also to assist in this, on return inflate() will set 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 adler32
+ 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, so applications that need that information should
+ instead use raw inflate, see inflateInit2() below, or inflateBack() and
+ perform their own processing of the gzip header and trailer. When processing
+ gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output
+ producted so far. The CRC-32 is checked against the gzip trailer.
+
+ 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), Z_STREAM_ERROR if the stream structure was inconsistent (for example
+ next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory,
+ Z_BUF_ERROR if no progress is 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 desired.
+*/
+
+
+ZEXTERN int ZEXPORT inflateEnd OF((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, Z_STREAM_ERROR if the stream state
+ was inconsistent. In the error case, msg may be set but then points to a
+ static string (which must not be deallocated).
+*/
+
+
+ /* Advanced functions */
+
+/*
+ The following functions are needed only in some special applications.
+*/
+
+/*
+ZEXTERN int ZEXPORT deflateInit2 OF((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 next_in, 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.
+
+ 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 an adler32 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 255 (unknown). If a
+ gzip stream is being written, strm->adler is a crc32 instead of an adler32.
+
+ 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 OF((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 adler32 value
+ of the dictionary; the decompressor may later use this value to determine
+ which dictionary has been used by the compressor. (The adler32 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
+ adler32 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 deflateCopy OF((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 OF((z_streamp strm));
+/*
+ This function is equivalent to deflateEnd followed by deflateInit,
+ but does not free and reallocate all the internal compression state. The
+ stream will keep the same compression level and any other attributes that
+ may have been set by deflateInit2.
+
+ 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 OF((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 level is changed, the input available so far is
+ compressed with the old level (and may be flushed); the new level will take
+ effect only at the next call of deflate().
+
+ Before the call of deflateParams, the stream state must be set as for
+ a call of deflate(), since the currently available input may have to be
+ compressed and flushed. In particular, strm->avail_out must be non-zero.
+
+ deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
+ stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if
+ strm->avail_out was zero.
+*/
+
+ZEXTERN int ZEXPORT deflateTune OF((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 OF((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 OF((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 OF((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 OF((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 255, 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 OF((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 adler32 or a crc32 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
+ crc32 instead of an adler32.
+
+ 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 OF((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 adler32 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 adler32 value). inflateSetDictionary does not
+ perform any decompression: this will be done by subsequent calls of
+ inflate().
+*/
+
+ZEXTERN int ZEXPORT inflateGetDictionary OF((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.
+ Similary, 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 OF((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 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 OF((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 OF((z_streamp strm));
+/*
+ This function is equivalent to inflateEnd followed by inflateInit,
+ but does not free and reallocate all the internal decompression state. The
+ stream will keep attributes that may have been set by inflateInit2.
+
+ 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 OF((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.
+
+ 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 OF((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 OF((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 -1 << 16 if the provided
+ source stream state was inconsistent.
+*/
+
+ZEXTERN int ZEXPORT inflateGetHeader OF((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 OF((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) OF((void FAR *,
+ z_const unsigned char FAR * FAR *));
+typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));
+
+ZEXTERN int ZEXPORT inflateBack OF((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 normal
+ behavior of inflate(), which expects either a zlib or gzip 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 OF((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 OF((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: 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 OF((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 buffer.
+
+ 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 OF((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 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.
+*/
+
+ZEXTERN uLong ZEXPORT compressBound OF((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 OF((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 buffer.
+
+ 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.
+*/
+
+ /* 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 OF((const char *path, const char *mode));
+
+ Opens a gzip (.gz) file for reading or 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 OF((int fd, const char *mode));
+/*
+ gzdopen associates 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 OF((gzFile file, unsigned size));
+/*
+ Set the internal buffer size used by this library's functions. 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. Two buffers are allocated, either both of the specified size when
+ writing, or one of the specified size and the other twice that size when
+ reading. 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 OF((gzFile file, int level, int strategy));
+/*
+ Dynamically update the compression level or strategy. See the description
+ of deflateInit2 for the meaning of these parameters.
+
+ gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
+ opened for writing.
+*/
+
+ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
+/*
+ Reads the given number of uncompressed bytes from the compressed file. 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.
+*/
+
+ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
+ voidpc buf, unsigned len));
+/*
+ Writes the given number of uncompressed bytes into the compressed file.
+ gzwrite returns the number of uncompressed bytes written or 0 in case of
+ error.
+*/
+
+ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
+/*
+ Converts, formats, and writes the arguments to the compressed file under
+ control of the format string, as in fprintf. gzprintf returns the number of
+ uncompressed bytes actually written, or 0 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 OF((gzFile file, const char *s));
+/*
+ Writes the given null-terminated string to the compressed file, excluding
+ the terminating null character.
+
+ gzputs returns the number of characters written, or -1 in case of error.
+*/
+
+ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
+/*
+ Reads bytes from the compressed file until len-1 characters are read, or 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 == 1, the
+ string is terminated with a null character. If no characters are read due
+ to an end-of-file or len < 1, 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 OF((gzFile file, int c));
+/*
+ Writes c, converted to an unsigned char, into the compressed file. gzputc
+ returns the value that was written, or -1 in case of error.
+*/
+
+ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
+/*
+ Reads one byte from the compressed 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 OF((int c, gzFile file));
+/*
+ Push one character back onto the stream to be read as the first character
+ on the next read. At least one character of push-back is 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 OF((gzFile file, int flush));
+/*
+ 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). 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
+ concatented 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 OF((gzFile file,
+ z_off_t offset, int whence));
+
+ Sets the starting position for the next gzread or gzwrite on the given
+ compressed 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 OF((gzFile file));
+/*
+ Rewinds the given 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 OF((gzFile file));
+
+ Returns the starting position for the next gzread or gzwrite on the given
+ compressed 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 OF((gzFile file));
+
+ Returns the current offset in the file being read or written. 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 OF((gzFile file));
+/*
+ Returns true (1) if the end-of-file indicator 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 OF((gzFile file));
+/*
+ Returns 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 OF((gzFile file));
+/*
+ Flushes all pending output if necessary, closes the compressed file and
+ deallocates 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 OF((gzFile file));
+ZEXTERN int ZEXPORT gzclose_w OF((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 OF((gzFile file, int *errnum));
+/*
+ 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.
+
+ 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 OF((gzFile file));
+/*
+ Clears 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 OF((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. 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 CRC32 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_combine OF((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 OF((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. 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_combine OF((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.
+*/
+
+
+ /* 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_ OF((z_streamp strm, int level,
+ const char *version, int stream_size));
+ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,
+ const char *version, int stream_size));
+ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method,
+ int windowBits, int memLevel,
+ int strategy, const char *version,
+ int stream_size));
+ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits,
+ const char *version, int stream_size));
+ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
+ unsigned char FAR *window,
+ const char *version,
+ int stream_size));
+#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))
+
+#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_ OF((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 OF((const char *, const char *));
+ ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
+ ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
+ ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
+ ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t));
+ ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, 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
+# else
+# define gzopen gzopen64
+# define gzseek gzseek64
+# define gztell gztell64
+# define gzoffset gzoffset64
+# define adler32_combine adler32_combine64
+# define crc32_combine crc32_combine64
+# endif
+# ifndef Z_LARGE64
+ ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+ ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int));
+ ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile));
+ ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile));
+ ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
+ ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+# endif
+#else
+ ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *));
+ ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int));
+ ZEXTERN z_off_t ZEXPORT gztell OF((gzFile));
+ ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile));
+ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
+ ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+#endif
+
+#else /* Z_SOLO */
+
+ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
+ ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+
+#endif /* !Z_SOLO */
+
+/* hack for buggy compilers */
+#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
+ struct internal_state {int dummy;};
+#endif
+
+/* undocumented functions */
+ZEXTERN const char * ZEXPORT zError OF((int));
+ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp));
+ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void));
+ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int));
+ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp));
+ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp));
+#if defined(_WIN32) && !defined(Z_SOLO)
+ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path,
+ const char *mode));
+#endif
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+# ifndef Z_SOLO
+ZEXTERN int ZEXPORTVA gzvprintf Z_ARG((gzFile file,
+ const char *format,
+ va_list va));
+# endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ZLIB_H */
diff --git a/protocols/Telegram/tgl/zlib/zlib.map b/protocols/Telegram/tgl/zlib/zlib.map
new file mode 100644
index 0000000000..55c6647eb4
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/zlib.map
@@ -0,0 +1,83 @@
+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;
diff --git a/protocols/Telegram/tgl/zlib/zlib.pc.cmakein b/protocols/Telegram/tgl/zlib/zlib.pc.cmakein
new file mode 100644
index 0000000000..a5e642938c
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/zlib.pc.in b/protocols/Telegram/tgl/zlib/zlib.pc.in
new file mode 100644
index 0000000000..7e5acf9c77
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/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/protocols/Telegram/tgl/zlib/zlib2ansi b/protocols/Telegram/tgl/zlib/zlib2ansi
new file mode 100644
index 0000000000..15e3e165f3
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/zlib2ansi
@@ -0,0 +1,152 @@
+#!/usr/bin/perl
+
+# Transform K&R C function definitions into ANSI equivalent.
+#
+# Author: Paul Marquess
+# Version: 1.0
+# Date: 3 October 2006
+
+# TODO
+#
+# Asumes no function pointer parameters. unless they are typedefed.
+# Assumes no literal strings that look like function definitions
+# Assumes functions start at the beginning of a line
+
+use strict;
+use warnings;
+
+local $/;
+$_ = <>;
+
+my $sp = qr{ \s* (?: /\* .*? \*/ )? \s* }x; # assume no nested comments
+
+my $d1 = qr{ $sp (?: [\w\*\s]+ $sp)* $sp \w+ $sp [\[\]\s]* $sp }x ;
+my $decl = qr{ $sp (?: \w+ $sp )+ $d1 }xo ;
+my $dList = qr{ $sp $decl (?: $sp , $d1 )* $sp ; $sp }xo ;
+
+
+while (s/^
+ ( # Start $1
+ ( # Start $2
+ .*? # Minimal eat content
+ ( ^ \w [\w\s\*]+ ) # $3 -- function name
+ \s* # optional whitespace
+ ) # $2 - Matched up to before parameter list
+
+ \( \s* # Literal "(" + optional whitespace
+ ( [^\)]+ ) # $4 - one or more anythings except ")"
+ \s* \) # optional whitespace surrounding a Literal ")"
+
+ ( (?: $dList )+ ) # $5
+
+ $sp ^ { # literal "{" at start of line
+ ) # Remember to $1
+ //xsom
+ )
+{
+ my $all = $1 ;
+ my $prefix = $2;
+ my $param_list = $4 ;
+ my $params = $5;
+
+ StripComments($params);
+ StripComments($param_list);
+ $param_list =~ s/^\s+//;
+ $param_list =~ s/\s+$//;
+
+ my $i = 0 ;
+ my %pList = map { $_ => $i++ }
+ split /\s*,\s*/, $param_list;
+ my $pMatch = '(\b' . join('|', keys %pList) . '\b)\W*$' ;
+
+ my @params = split /\s*;\s*/, $params;
+ my @outParams = ();
+ foreach my $p (@params)
+ {
+ if ($p =~ /,/)
+ {
+ my @bits = split /\s*,\s*/, $p;
+ my $first = shift @bits;
+ $first =~ s/^\s*//;
+ push @outParams, $first;
+ $first =~ /^(\w+\s*)/;
+ my $type = $1 ;
+ push @outParams, map { $type . $_ } @bits;
+ }
+ else
+ {
+ $p =~ s/^\s+//;
+ push @outParams, $p;
+ }
+ }
+
+
+ my %tmp = map { /$pMatch/; $_ => $pList{$1} }
+ @outParams ;
+
+ @outParams = map { " $_" }
+ sort { $tmp{$a} <=> $tmp{$b} }
+ @outParams ;
+
+ print $prefix ;
+ print "(\n" . join(",\n", @outParams) . ")\n";
+ print "{" ;
+
+}
+
+# Output any trailing code.
+print ;
+exit 0;
+
+
+sub StripComments
+{
+
+ no warnings;
+
+ # Strip C & C++ coments
+ # From the perlfaq
+ $_[0] =~
+
+ s{
+ /\* ## Start of /* ... */ comment
+ [^*]*\*+ ## Non-* followed by 1-or-more *'s
+ (
+ [^/*][^*]*\*+
+ )* ## 0-or-more things which don't start with /
+ ## but do end with '*'
+ / ## End of /* ... */ comment
+
+ | ## OR C++ Comment
+ // ## Start of C++ comment //
+ [^\n]* ## followed by 0-or-more non end of line characters
+
+ | ## OR various things which aren't comments:
+
+ (
+ " ## Start of " ... " string
+ (
+ \\. ## Escaped char
+ | ## OR
+ [^"\\] ## Non "\
+ )*
+ " ## End of " ... " string
+
+ | ## OR
+
+ ' ## Start of ' ... ' string
+ (
+ \\. ## Escaped char
+ | ## OR
+ [^'\\] ## Non '\
+ )*
+ ' ## End of ' ... ' string
+
+ | ## OR
+
+ . ## Anything other char
+ [^/"'\\]* ## Chars which doesn't start a comment, string or escape
+ )
+ }{$2}gxs;
+
+}
diff --git a/protocols/Telegram/tgl/zlib/zutil.c b/protocols/Telegram/tgl/zlib/zutil.c
new file mode 100644
index 0000000000..23d2ebef00
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/zutil.c
@@ -0,0 +1,324 @@
+/* zutil.c -- target dependent utility functions for the compression library
+ * Copyright (C) 1995-2005, 2010, 2011, 2012 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
+
+#ifndef NO_DUMMY_DECL
+struct internal_state {int dummy;}; /* for buggy compilers */
+#endif
+
+z_const char * const z_errmsg[10] = {
+"need dictionary", /* Z_NEED_DICT 2 */
+"stream end", /* Z_STREAM_END 1 */
+"", /* Z_OK 0 */
+"file error", /* Z_ERRNO (-1) */
+"stream error", /* Z_STREAM_ERROR (-2) */
+"data error", /* Z_DATA_ERROR (-3) */
+"insufficient memory", /* Z_MEM_ERROR (-4) */
+"buffer error", /* Z_BUF_ERROR (-5) */
+"incompatible version",/* Z_VERSION_ERROR (-6) */
+""};
+
+
+const char * ZEXPORT zlibVersion()
+{
+ return ZLIB_VERSION;
+}
+
+uLong ZEXPORT zlibCompileFlags()
+{
+ 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 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 DEBUG
+
+# ifndef verbose
+# define verbose 0
+# endif
+int ZLIB_INTERNAL z_verbose = verbose;
+
+void ZLIB_INTERNAL z_error (m)
+ 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(err)
+ int err;
+{
+ return ERR_MSG(err);
+}
+
+#if defined(_WIN32_WCE)
+ /* The 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(dest, source, len)
+ Bytef* dest;
+ const Bytef* source;
+ uInt len;
+{
+ if (len == 0) return;
+ do {
+ *dest++ = *source++; /* ??? to be unrolled */
+ } while (--len != 0);
+}
+
+int ZLIB_INTERNAL zmemcmp(s1, s2, len)
+ 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(dest, len)
+ 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 = opaque; /* just to make some compilers happy */
+ ulg bsize = (ulg)items*size;
+
+ /* 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;
+ 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;
+ }
+ ptr = opaque; /* just to make some compilers happy */
+ 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)
+{
+ if (opaque) opaque = 0; /* to make compiler happy */
+ return _halloc((long)items, size);
+}
+
+void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
+{
+ if (opaque) opaque = 0; /* to make compiler happy */
+ _hfree(ptr);
+}
+
+#endif /* M_I86 */
+
+#endif /* SYS16BIT */
+
+
+#ifndef MY_ZCALLOC /* Any system without a special alloc function */
+
+#ifndef STDC
+extern voidp malloc OF((uInt size));
+extern voidp calloc OF((uInt items, uInt size));
+extern void free OF((voidpf ptr));
+#endif
+
+voidpf ZLIB_INTERNAL zcalloc (opaque, items, size)
+ voidpf opaque;
+ unsigned items;
+ unsigned size;
+{
+ if (opaque) items += size - size; /* make compiler happy */
+ return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
+ (voidpf)calloc(items, size);
+}
+
+void ZLIB_INTERNAL zcfree (opaque, ptr)
+ voidpf opaque;
+ voidpf ptr;
+{
+ free(ptr);
+ if (opaque) return; /* make compiler happy */
+}
+
+#endif /* MY_ZCALLOC */
+
+#endif /* !Z_SOLO */
diff --git a/protocols/Telegram/tgl/zlib/zutil.h b/protocols/Telegram/tgl/zlib/zutil.h
new file mode 100644
index 0000000000..24ab06b1cf
--- /dev/null
+++ b/protocols/Telegram/tgl/zlib/zutil.h
@@ -0,0 +1,253 @@
+/* zutil.h -- internal interface and configuration of the compression library
+ * Copyright (C) 1995-2013 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 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 <stddef.h>
+# endif
+# include <string.h>
+# include <stdlib.h>
+#endif
+
+#ifdef Z_SOLO
+ typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */
+#endif
+
+#ifndef local
+# define local static
+#endif
+/* 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;
+
+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[Z_NEED_DICT-(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 <alloc.h>
+# endif
+# else /* MSC or DJGPP */
+# include <malloc.h>
+# endif
+# endif
+#endif
+
+#ifdef AMIGA
+# define OS_CODE 0x01
+#endif
+
+#if defined(VAXC) || defined(VMS)
+# define OS_CODE 0x02
+# define F_OPEN(name, mode) \
+ fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
+#endif
+
+#if defined(ATARI) || defined(atarist)
+# define OS_CODE 0x05
+#endif
+
+#ifdef OS2
+# define OS_CODE 0x06
+# if defined(M_I86) && !defined(Z_SOLO)
+# include <malloc.h>
+# endif
+#endif
+
+#if defined(MACOS) || defined(TARGET_OS_MAC)
+# define OS_CODE 0x07
+# ifndef Z_SOLO
+# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
+# include <unix.h> /* for fdopen */
+# else
+# ifndef fdopen
+# define fdopen(fd,mode) NULL /* No fdopen() */
+# endif
+# endif
+# endif
+#endif
+
+#ifdef TOPS20
+# define OS_CODE 0x0a
+#endif
+
+#ifdef WIN32
+# ifndef __CYGWIN__ /* Cygwin is Unix, not Win32 */
+# define OS_CODE 0x0b
+# endif
+#endif
+
+#ifdef __50SERIES /* Prime/PRIMOS */
+# define OS_CODE 0x0f
+#endif
+
+#if defined(_BEOS_) || defined(RISCOS)
+# define fdopen(fd,mode) NULL /* No fdopen() */
+#endif
+
+#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX
+# if defined(_WIN32_WCE)
+# define fdopen(fd,mode) NULL /* No fdopen() */
+# ifndef _PTRDIFF_T_DEFINED
+ typedef int ptrdiff_t;
+# define _PTRDIFF_T_DEFINED
+# endif
+# else
+# define fdopen(fd,type) _fdopen(fd,type)
+# endif
+#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 OF((uLong, uLong, z_off_t));
+ ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+#endif
+
+ /* common defaults */
+
+#ifndef OS_CODE
+# define OS_CODE 0x03 /* 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 OF((Bytef* dest, const Bytef* source, uInt len));
+ int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len));
+ void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len));
+#endif
+
+/* Diagnostic functions */
+#ifdef DEBUG
+# include <stdio.h>
+ extern int ZLIB_INTERNAL z_verbose;
+ extern void ZLIB_INTERNAL z_error OF((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 OF((voidpf opaque, unsigned items,
+ unsigned size));
+ void ZLIB_INTERNAL zcfree OF((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 */