inflate.js 57 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178
  1. /*
  2. Copyright (c) 2013 Gildas Lormeau. All rights reserved.
  3. Redistribution and use in source and binary forms, with or without
  4. modification, are permitted provided that the following conditions are met:
  5. 1. Redistributions of source code must retain the above copyright notice,
  6. this list of conditions and the following disclaimer.
  7. 2. Redistributions in binary form must reproduce the above copyright
  8. notice, this list of conditions and the following disclaimer in
  9. the documentation and/or other materials provided with the distribution.
  10. 3. The names of the authors may not be used to endorse or promote products
  11. derived from this software without specific prior written permission.
  12. THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  13. INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  14. FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
  15. INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
  16. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  17. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  18. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  19. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  20. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  21. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  22. */
  23. /*
  24. * This program is based on JZlib 1.0.2 ymnk, JCraft,Inc.
  25. * JZlib is based on zlib-1.1.3, so all credit should go authors
  26. * Jean-loup Gailly([email protected]) and Mark Adler([email protected])
  27. * and contributors of zlib.
  28. */
  29. (function(global) {
  30. "use strict";
  31. // Global
  32. var MAX_BITS = 15;
  33. var Z_OK = 0;
  34. var Z_STREAM_END = 1;
  35. var Z_NEED_DICT = 2;
  36. var Z_STREAM_ERROR = -2;
  37. var Z_DATA_ERROR = -3;
  38. var Z_MEM_ERROR = -4;
  39. var Z_BUF_ERROR = -5;
  40. var inflate_mask = [ 0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff,
  41. 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff ];
  42. var MANY = 1440;
  43. // JZlib version : "1.0.2"
  44. var Z_NO_FLUSH = 0;
  45. var Z_FINISH = 4;
  46. // InfTree
  47. var fixed_bl = 9;
  48. var fixed_bd = 5;
  49. var fixed_tl = [ 96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, 192, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 160, 0, 8, 0,
  50. 0, 8, 128, 0, 8, 64, 0, 9, 224, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 144, 83, 7, 59, 0, 8, 120, 0, 8, 56, 0, 9, 208, 81, 7, 17, 0, 8, 104, 0, 8, 40,
  51. 0, 9, 176, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 240, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 200, 81, 7, 13,
  52. 0, 8, 100, 0, 8, 36, 0, 9, 168, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 232, 80, 7, 8, 0, 8, 92, 0, 8, 28, 0, 9, 152, 84, 7, 83, 0, 8, 124, 0, 8, 60,
  53. 0, 9, 216, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 184, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, 248, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7,
  54. 35, 0, 8, 114, 0, 8, 50, 0, 9, 196, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 164, 0, 8, 2, 0, 8, 130, 0, 8, 66, 0, 9, 228, 80, 7, 7, 0, 8, 90, 0, 8,
  55. 26, 0, 9, 148, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 212, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, 180, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 244, 80,
  56. 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 204, 81, 7, 15, 0, 8, 102, 0, 8, 38, 0, 9, 172, 0, 8, 6, 0, 8, 134, 0,
  57. 8, 70, 0, 9, 236, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 156, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, 220, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 188, 0,
  58. 8, 14, 0, 8, 142, 0, 8, 78, 0, 9, 252, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, 8, 113, 0, 8, 49, 0, 9, 194, 80, 7, 10, 0, 8, 97,
  59. 0, 8, 33, 0, 9, 162, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 226, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, 146, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 210,
  60. 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 178, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 242, 80, 7, 4, 0, 8, 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117,
  61. 0, 8, 53, 0, 9, 202, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 170, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, 234, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 154,
  62. 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 218, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 186, 0, 8, 13, 0, 8, 141, 0, 8, 77, 0, 9, 250, 80, 7, 3, 0, 8, 83,
  63. 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 198, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, 166, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 230,
  64. 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 150, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 214, 82, 7, 19, 0, 8, 107, 0, 8, 43, 0, 9, 182, 0, 8, 11, 0, 8, 139,
  65. 0, 8, 75, 0, 9, 246, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, 206, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 174,
  66. 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 238, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 158, 84, 7, 99, 0, 8, 127, 0, 8, 63, 0, 9, 222, 82, 7, 27, 0, 8, 111,
  67. 0, 8, 47, 0, 9, 190, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 254, 96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9,
  68. 193, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 161, 0, 8, 0, 0, 8, 128, 0, 8, 64, 0, 9, 225, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 145, 83, 7, 59, 0, 8,
  69. 120, 0, 8, 56, 0, 9, 209, 81, 7, 17, 0, 8, 104, 0, 8, 40, 0, 9, 177, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 241, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8,
  70. 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 201, 81, 7, 13, 0, 8, 100, 0, 8, 36, 0, 9, 169, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 233, 80, 7, 8, 0, 8,
  71. 92, 0, 8, 28, 0, 9, 153, 84, 7, 83, 0, 8, 124, 0, 8, 60, 0, 9, 217, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 185, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9,
  72. 249, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, 35, 0, 8, 114, 0, 8, 50, 0, 9, 197, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 165, 0, 8, 2, 0, 8,
  73. 130, 0, 8, 66, 0, 9, 229, 80, 7, 7, 0, 8, 90, 0, 8, 26, 0, 9, 149, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 213, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9,
  74. 181, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 245, 80, 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 205, 81, 7, 15, 0, 8,
  75. 102, 0, 8, 38, 0, 9, 173, 0, 8, 6, 0, 8, 134, 0, 8, 70, 0, 9, 237, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 157, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9,
  76. 221, 82, 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, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0,
  77. 8, 113, 0, 8, 49, 0, 9, 195, 80, 7, 10, 0, 8, 97, 0, 8, 33, 0, 9, 163, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 227, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9,
  78. 147, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 211, 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 179, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 243, 80, 7, 4, 0, 8,
  79. 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, 0, 8, 53, 0, 9, 203, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 171, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9,
  80. 235, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 155, 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 219, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 187, 0, 8, 13, 0, 8,
  81. 141, 0, 8, 77, 0, 9, 251, 80, 7, 3, 0, 8, 83, 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 199, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9,
  82. 167, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 231, 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 151, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 215, 82, 7, 19, 0, 8,
  83. 107, 0, 8, 43, 0, 9, 183, 0, 8, 11, 0, 8, 139, 0, 8, 75, 0, 9, 247, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9,
  84. 207, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 175, 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 239, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 159, 84, 7, 99, 0, 8,
  85. 127, 0, 8, 63, 0, 9, 223, 82, 7, 27, 0, 8, 111, 0, 8, 47, 0, 9, 191, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 255 ];
  86. var fixed_td = [ 80, 5, 1, 87, 5, 257, 83, 5, 17, 91, 5, 4097, 81, 5, 5, 89, 5, 1025, 85, 5, 65, 93, 5, 16385, 80, 5, 3, 88, 5, 513, 84, 5, 33, 92, 5,
  87. 8193, 82, 5, 9, 90, 5, 2049, 86, 5, 129, 192, 5, 24577, 80, 5, 2, 87, 5, 385, 83, 5, 25, 91, 5, 6145, 81, 5, 7, 89, 5, 1537, 85, 5, 97, 93, 5,
  88. 24577, 80, 5, 4, 88, 5, 769, 84, 5, 49, 92, 5, 12289, 82, 5, 13, 90, 5, 3073, 86, 5, 193, 192, 5, 24577 ];
  89. // Tables for deflate from PKZIP's appnote.txt.
  90. var cplens = [ // Copy lengths for literal codes 257..285
  91. 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 ];
  92. // see note #13 above about 258
  93. var cplext = [ // Extra bits for literal codes 257..285
  94. 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, 112, 112 // 112==invalid
  95. ];
  96. var cpdist = [ // Copy offsets for distance codes 0..29
  97. 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 ];
  98. var cpdext = [ // Extra bits for distance codes
  99. 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 ];
  100. // If BMAX needs to be larger than 16, then h and x[] should be uLong.
  101. var BMAX = 15; // maximum bit length of any code
  102. function InfTree() {
  103. var that = this;
  104. var hn; // hufts used in space
  105. var v; // work area for huft_build
  106. var c; // bit length count table
  107. var r; // table entry for structure assignment
  108. var u; // table stack
  109. var x; // bit offsets, then code stack
  110. function huft_build(b, // code lengths in bits (all assumed <=
  111. // BMAX)
  112. bindex, n, // number of codes (assumed <= 288)
  113. s, // number of simple-valued codes (0..s-1)
  114. d, // list of base values for non-simple codes
  115. e, // list of extra bits for non-simple codes
  116. t, // result: starting table
  117. m, // maximum lookup bits, returns actual
  118. hp,// space for trees
  119. hn,// hufts used in space
  120. v // working area: values in order of bit length
  121. ) {
  122. // Given a list of code lengths and a maximum table size, make a set of
  123. // tables to decode that set of codes. Return Z_OK on success,
  124. // Z_BUF_ERROR
  125. // if the given code set is incomplete (the tables are still built in
  126. // this
  127. // case), Z_DATA_ERROR if the input is invalid (an over-subscribed set
  128. // of
  129. // lengths), or Z_MEM_ERROR if not enough memory.
  130. var a; // counter for codes of length k
  131. var f; // i repeats in table every f entries
  132. var g; // maximum code length
  133. var h; // table level
  134. var i; // counter, current code
  135. var j; // counter
  136. var k; // number of bits in current code
  137. var l; // bits per table (returned in m)
  138. var mask; // (1 << w) - 1, to avoid cc -O bug on HP
  139. var p; // pointer into c[], b[], or v[]
  140. var q; // points to current table
  141. var w; // bits before this table == (l * h)
  142. var xp; // pointer into x
  143. var y; // number of dummy codes added
  144. var z; // number of entries in current table
  145. // Generate counts for each bit length
  146. p = 0;
  147. i = n;
  148. do {
  149. c[b[bindex + p]]++;
  150. p++;
  151. i--; // assume all entries <= BMAX
  152. } while (i !== 0);
  153. if (c[0] == n) { // null input--all zero length codes
  154. t[0] = -1;
  155. m[0] = 0;
  156. return Z_OK;
  157. }
  158. // Find minimum and maximum length, bound *m by those
  159. l = m[0];
  160. for (j = 1; j <= BMAX; j++)
  161. if (c[j] !== 0)
  162. break;
  163. k = j; // minimum code length
  164. if (l < j) {
  165. l = j;
  166. }
  167. for (i = BMAX; i !== 0; i--) {
  168. if (c[i] !== 0)
  169. break;
  170. }
  171. g = i; // maximum code length
  172. if (l > i) {
  173. l = i;
  174. }
  175. m[0] = l;
  176. // Adjust last length count to fill out codes, if needed
  177. for (y = 1 << j; j < i; j++, y <<= 1) {
  178. if ((y -= c[j]) < 0) {
  179. return Z_DATA_ERROR;
  180. }
  181. }
  182. if ((y -= c[i]) < 0) {
  183. return Z_DATA_ERROR;
  184. }
  185. c[i] += y;
  186. // Generate starting offsets into the value table for each length
  187. x[1] = j = 0;
  188. p = 1;
  189. xp = 2;
  190. while (--i !== 0) { // note that i == g from above
  191. x[xp] = (j += c[p]);
  192. xp++;
  193. p++;
  194. }
  195. // Make a table of values in order of bit lengths
  196. i = 0;
  197. p = 0;
  198. do {
  199. if ((j = b[bindex + p]) !== 0) {
  200. v[x[j]++] = i;
  201. }
  202. p++;
  203. } while (++i < n);
  204. n = x[g]; // set n to length of v
  205. // Generate the Huffman codes and for each, make the table entries
  206. x[0] = i = 0; // first Huffman code is zero
  207. p = 0; // grab values in bit order
  208. h = -1; // no tables yet--level -1
  209. w = -l; // bits decoded == (l * h)
  210. u[0] = 0; // just to keep compilers happy
  211. q = 0; // ditto
  212. z = 0; // ditto
  213. // go through the bit lengths (k already is bits in shortest code)
  214. for (; k <= g; k++) {
  215. a = c[k];
  216. while (a-- !== 0) {
  217. // here i is the Huffman code of length k bits for value *p
  218. // make tables up to required level
  219. while (k > w + l) {
  220. h++;
  221. w += l; // previous table always l bits
  222. // compute minimum size table less than or equal to l bits
  223. z = g - w;
  224. z = (z > l) ? l : z; // table size upper limit
  225. if ((f = 1 << (j = k - w)) > a + 1) { // try a k-w bit table
  226. // too few codes for
  227. // k-w bit table
  228. f -= a + 1; // deduct codes from patterns left
  229. xp = k;
  230. if (j < z) {
  231. while (++j < z) { // try smaller tables up to z bits
  232. if ((f <<= 1) <= c[++xp])
  233. break; // enough codes to use up j bits
  234. f -= c[xp]; // else deduct codes from patterns
  235. }
  236. }
  237. }
  238. z = 1 << j; // table entries for j-bit table
  239. // allocate new table
  240. if (hn[0] + z > MANY) { // (note: doesn't matter for fixed)
  241. return Z_DATA_ERROR; // overflow of MANY
  242. }
  243. u[h] = q = /* hp+ */hn[0]; // DEBUG
  244. hn[0] += z;
  245. // connect to last table, if there is one
  246. if (h !== 0) {
  247. x[h] = i; // save pattern for backing up
  248. r[0] = /* (byte) */j; // bits in this table
  249. r[1] = /* (byte) */l; // bits to dump before this table
  250. j = i >>> (w - l);
  251. r[2] = /* (int) */(q - u[h - 1] - j); // offset to this table
  252. hp.set(r, (u[h - 1] + j) * 3);
  253. // to
  254. // last
  255. // table
  256. } else {
  257. t[0] = q; // first table is returned result
  258. }
  259. }
  260. // set up table entry in r
  261. r[1] = /* (byte) */(k - w);
  262. if (p >= n) {
  263. r[0] = 128 + 64; // out of values--invalid code
  264. } else if (v[p] < s) {
  265. r[0] = /* (byte) */(v[p] < 256 ? 0 : 32 + 64); // 256 is
  266. // end-of-block
  267. r[2] = v[p++]; // simple code is just the value
  268. } else {
  269. r[0] = /* (byte) */(e[v[p] - s] + 16 + 64); // non-simple--look
  270. // up in lists
  271. r[2] = d[v[p++] - s];
  272. }
  273. // fill code-like entries with r
  274. f = 1 << (k - w);
  275. for (j = i >>> w; j < z; j += f) {
  276. hp.set(r, (q + j) * 3);
  277. }
  278. // backwards increment the k-bit code i
  279. for (j = 1 << (k - 1); (i & j) !== 0; j >>>= 1) {
  280. i ^= j;
  281. }
  282. i ^= j;
  283. // backup over finished tables
  284. mask = (1 << w) - 1; // needed on HP, cc -O bug
  285. while ((i & mask) != x[h]) {
  286. h--; // don't need to update q
  287. w -= l;
  288. mask = (1 << w) - 1;
  289. }
  290. }
  291. }
  292. // Return Z_BUF_ERROR if we were given an incomplete table
  293. return y !== 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
  294. }
  295. function initWorkArea(vsize) {
  296. var i;
  297. if (!hn) {
  298. hn = []; // []; //new Array(1);
  299. v = []; // new Array(vsize);
  300. c = new Int32Array(BMAX + 1); // new Array(BMAX + 1);
  301. r = []; // new Array(3);
  302. u = new Int32Array(BMAX); // new Array(BMAX);
  303. x = new Int32Array(BMAX + 1); // new Array(BMAX + 1);
  304. }
  305. if (v.length < vsize) {
  306. v = []; // new Array(vsize);
  307. }
  308. for (i = 0; i < vsize; i++) {
  309. v[i] = 0;
  310. }
  311. for (i = 0; i < BMAX + 1; i++) {
  312. c[i] = 0;
  313. }
  314. for (i = 0; i < 3; i++) {
  315. r[i] = 0;
  316. }
  317. // for(int i=0; i<BMAX; i++){u[i]=0;}
  318. u.set(c.subarray(0, BMAX), 0);
  319. // for(int i=0; i<BMAX+1; i++){x[i]=0;}
  320. x.set(c.subarray(0, BMAX + 1), 0);
  321. }
  322. that.inflate_trees_bits = function(c, // 19 code lengths
  323. bb, // bits tree desired/actual depth
  324. tb, // bits tree result
  325. hp, // space for trees
  326. z // for messages
  327. ) {
  328. var result;
  329. initWorkArea(19);
  330. hn[0] = 0;
  331. result = huft_build(c, 0, 19, 19, null, null, tb, bb, hp, hn, v);
  332. if (result == Z_DATA_ERROR) {
  333. z.msg = "oversubscribed dynamic bit lengths tree";
  334. } else if (result == Z_BUF_ERROR || bb[0] === 0) {
  335. z.msg = "incomplete dynamic bit lengths tree";
  336. result = Z_DATA_ERROR;
  337. }
  338. return result;
  339. };
  340. that.inflate_trees_dynamic = function(nl, // number of literal/length codes
  341. nd, // number of distance codes
  342. c, // that many (total) code lengths
  343. bl, // literal desired/actual bit depth
  344. bd, // distance desired/actual bit depth
  345. tl, // literal/length tree result
  346. td, // distance tree result
  347. hp, // space for trees
  348. z // for messages
  349. ) {
  350. var result;
  351. // build literal/length tree
  352. initWorkArea(288);
  353. hn[0] = 0;
  354. result = huft_build(c, 0, nl, 257, cplens, cplext, tl, bl, hp, hn, v);
  355. if (result != Z_OK || bl[0] === 0) {
  356. if (result == Z_DATA_ERROR) {
  357. z.msg = "oversubscribed literal/length tree";
  358. } else if (result != Z_MEM_ERROR) {
  359. z.msg = "incomplete literal/length tree";
  360. result = Z_DATA_ERROR;
  361. }
  362. return result;
  363. }
  364. // build distance tree
  365. initWorkArea(288);
  366. result = huft_build(c, nl, nd, 0, cpdist, cpdext, td, bd, hp, hn, v);
  367. if (result != Z_OK || (bd[0] === 0 && nl > 257)) {
  368. if (result == Z_DATA_ERROR) {
  369. z.msg = "oversubscribed distance tree";
  370. } else if (result == Z_BUF_ERROR) {
  371. z.msg = "incomplete distance tree";
  372. result = Z_DATA_ERROR;
  373. } else if (result != Z_MEM_ERROR) {
  374. z.msg = "empty distance tree with lengths";
  375. result = Z_DATA_ERROR;
  376. }
  377. return result;
  378. }
  379. return Z_OK;
  380. };
  381. }
  382. InfTree.inflate_trees_fixed = function(bl, // literal desired/actual bit depth
  383. bd, // distance desired/actual bit depth
  384. tl,// literal/length tree result
  385. td// distance tree result
  386. ) {
  387. bl[0] = fixed_bl;
  388. bd[0] = fixed_bd;
  389. tl[0] = fixed_tl;
  390. td[0] = fixed_td;
  391. return Z_OK;
  392. };
  393. // InfCodes
  394. // waiting for "i:"=input,
  395. // "o:"=output,
  396. // "x:"=nothing
  397. var START = 0; // x: set up for LEN
  398. var LEN = 1; // i: get length/literal/eob next
  399. var LENEXT = 2; // i: getting length extra (have base)
  400. var DIST = 3; // i: get distance next
  401. var DISTEXT = 4;// i: getting distance extra
  402. var COPY = 5; // o: copying bytes in window, waiting
  403. // for space
  404. var LIT = 6; // o: got literal, waiting for output
  405. // space
  406. var WASH = 7; // o: got eob, possibly still output
  407. // waiting
  408. var END = 8; // x: got eob and all data flushed
  409. var BADCODE = 9;// x: got error
  410. function InfCodes() {
  411. var that = this;
  412. var mode; // current inflate_codes mode
  413. // mode dependent information
  414. var len = 0;
  415. var tree; // pointer into tree
  416. var tree_index = 0;
  417. var need = 0; // bits needed
  418. var lit = 0;
  419. // if EXT or COPY, where and how much
  420. var get = 0; // bits to get for extra
  421. var dist = 0; // distance back to copy from
  422. var lbits = 0; // ltree bits decoded per branch
  423. var dbits = 0; // dtree bits decoder per branch
  424. var ltree; // literal/length/eob tree
  425. var ltree_index = 0; // literal/length/eob tree
  426. var dtree; // distance tree
  427. var dtree_index = 0; // distance tree
  428. // Called with number of bytes left to write in window at least 258
  429. // (the maximum string length) and number of input bytes available
  430. // at least ten. The ten bytes are six bytes for the longest length/
  431. // distance pair plus four bytes for overloading the bit buffer.
  432. function inflate_fast(bl, bd, tl, tl_index, td, td_index, s, z) {
  433. var t; // temporary pointer
  434. var tp; // temporary pointer
  435. var tp_index; // temporary pointer
  436. var e; // extra bits or operation
  437. var b; // bit buffer
  438. var k; // bits in bit buffer
  439. var p; // input data pointer
  440. var n; // bytes available there
  441. var q; // output window write pointer
  442. var m; // bytes to end of window or read pointer
  443. var ml; // mask for literal/length tree
  444. var md; // mask for distance tree
  445. var c; // bytes to copy
  446. var d; // distance back to copy from
  447. var r; // copy source pointer
  448. var tp_index_t_3; // (tp_index+t)*3
  449. // load input, output, bit values
  450. p = z.next_in_index;
  451. n = z.avail_in;
  452. b = s.bitb;
  453. k = s.bitk;
  454. q = s.write;
  455. m = q < s.read ? s.read - q - 1 : s.end - q;
  456. // initialize masks
  457. ml = inflate_mask[bl];
  458. md = inflate_mask[bd];
  459. // do until not enough input or output space for fast loop
  460. do { // assume called with m >= 258 && n >= 10
  461. // get literal/length code
  462. while (k < (20)) { // max bits for literal/length code
  463. n--;
  464. b |= (z.read_byte(p++) & 0xff) << k;
  465. k += 8;
  466. }
  467. t = b & ml;
  468. tp = tl;
  469. tp_index = tl_index;
  470. tp_index_t_3 = (tp_index + t) * 3;
  471. if ((e = tp[tp_index_t_3]) === 0) {
  472. b >>= (tp[tp_index_t_3 + 1]);
  473. k -= (tp[tp_index_t_3 + 1]);
  474. s.window[q++] = /* (byte) */tp[tp_index_t_3 + 2];
  475. m--;
  476. continue;
  477. }
  478. do {
  479. b >>= (tp[tp_index_t_3 + 1]);
  480. k -= (tp[tp_index_t_3 + 1]);
  481. if ((e & 16) !== 0) {
  482. e &= 15;
  483. c = tp[tp_index_t_3 + 2] + (/* (int) */b & inflate_mask[e]);
  484. b >>= e;
  485. k -= e;
  486. // decode distance base of block to copy
  487. while (k < (15)) { // max bits for distance code
  488. n--;
  489. b |= (z.read_byte(p++) & 0xff) << k;
  490. k += 8;
  491. }
  492. t = b & md;
  493. tp = td;
  494. tp_index = td_index;
  495. tp_index_t_3 = (tp_index + t) * 3;
  496. e = tp[tp_index_t_3];
  497. do {
  498. b >>= (tp[tp_index_t_3 + 1]);
  499. k -= (tp[tp_index_t_3 + 1]);
  500. if ((e & 16) !== 0) {
  501. // get extra bits to add to distance base
  502. e &= 15;
  503. while (k < (e)) { // get extra bits (up to 13)
  504. n--;
  505. b |= (z.read_byte(p++) & 0xff) << k;
  506. k += 8;
  507. }
  508. d = tp[tp_index_t_3 + 2] + (b & inflate_mask[e]);
  509. b >>= (e);
  510. k -= (e);
  511. // do the copy
  512. m -= c;
  513. if (q >= d) { // offset before dest
  514. // just copy
  515. r = q - d;
  516. if (q - r > 0 && 2 > (q - r)) {
  517. s.window[q++] = s.window[r++]; // minimum
  518. // count is
  519. // three,
  520. s.window[q++] = s.window[r++]; // so unroll
  521. // loop a
  522. // little
  523. c -= 2;
  524. } else {
  525. s.window.set(s.window.subarray(r, r + 2), q);
  526. q += 2;
  527. r += 2;
  528. c -= 2;
  529. }
  530. } else { // else offset after destination
  531. r = q - d;
  532. do {
  533. r += s.end; // force pointer in window
  534. } while (r < 0); // covers invalid distances
  535. e = s.end - r;
  536. if (c > e) { // if source crosses,
  537. c -= e; // wrapped copy
  538. if (q - r > 0 && e > (q - r)) {
  539. do {
  540. s.window[q++] = s.window[r++];
  541. } while (--e !== 0);
  542. } else {
  543. s.window.set(s.window.subarray(r, r + e), q);
  544. q += e;
  545. r += e;
  546. e = 0;
  547. }
  548. r = 0; // copy rest from start of window
  549. }
  550. }
  551. // copy all or what's left
  552. if (q - r > 0 && c > (q - r)) {
  553. do {
  554. s.window[q++] = s.window[r++];
  555. } while (--c !== 0);
  556. } else {
  557. s.window.set(s.window.subarray(r, r + c), q);
  558. q += c;
  559. r += c;
  560. c = 0;
  561. }
  562. break;
  563. } else if ((e & 64) === 0) {
  564. t += tp[tp_index_t_3 + 2];
  565. t += (b & inflate_mask[e]);
  566. tp_index_t_3 = (tp_index + t) * 3;
  567. e = tp[tp_index_t_3];
  568. } else {
  569. z.msg = "invalid distance code";
  570. c = z.avail_in - n;
  571. c = (k >> 3) < c ? k >> 3 : c;
  572. n += c;
  573. p -= c;
  574. k -= c << 3;
  575. s.bitb = b;
  576. s.bitk = k;
  577. z.avail_in = n;
  578. z.total_in += p - z.next_in_index;
  579. z.next_in_index = p;
  580. s.write = q;
  581. return Z_DATA_ERROR;
  582. }
  583. } while (true);
  584. break;
  585. }
  586. if ((e & 64) === 0) {
  587. t += tp[tp_index_t_3 + 2];
  588. t += (b & inflate_mask[e]);
  589. tp_index_t_3 = (tp_index + t) * 3;
  590. if ((e = tp[tp_index_t_3]) === 0) {
  591. b >>= (tp[tp_index_t_3 + 1]);
  592. k -= (tp[tp_index_t_3 + 1]);
  593. s.window[q++] = /* (byte) */tp[tp_index_t_3 + 2];
  594. m--;
  595. break;
  596. }
  597. } else if ((e & 32) !== 0) {
  598. c = z.avail_in - n;
  599. c = (k >> 3) < c ? k >> 3 : c;
  600. n += c;
  601. p -= c;
  602. k -= c << 3;
  603. s.bitb = b;
  604. s.bitk = k;
  605. z.avail_in = n;
  606. z.total_in += p - z.next_in_index;
  607. z.next_in_index = p;
  608. s.write = q;
  609. return Z_STREAM_END;
  610. } else {
  611. z.msg = "invalid literal/length code";
  612. c = z.avail_in - n;
  613. c = (k >> 3) < c ? k >> 3 : c;
  614. n += c;
  615. p -= c;
  616. k -= c << 3;
  617. s.bitb = b;
  618. s.bitk = k;
  619. z.avail_in = n;
  620. z.total_in += p - z.next_in_index;
  621. z.next_in_index = p;
  622. s.write = q;
  623. return Z_DATA_ERROR;
  624. }
  625. } while (true);
  626. } while (m >= 258 && n >= 10);
  627. // not enough input or output--restore pointers and return
  628. c = z.avail_in - n;
  629. c = (k >> 3) < c ? k >> 3 : c;
  630. n += c;
  631. p -= c;
  632. k -= c << 3;
  633. s.bitb = b;
  634. s.bitk = k;
  635. z.avail_in = n;
  636. z.total_in += p - z.next_in_index;
  637. z.next_in_index = p;
  638. s.write = q;
  639. return Z_OK;
  640. }
  641. that.init = function(bl, bd, tl, tl_index, td, td_index) {
  642. mode = START;
  643. lbits = /* (byte) */bl;
  644. dbits = /* (byte) */bd;
  645. ltree = tl;
  646. ltree_index = tl_index;
  647. dtree = td;
  648. dtree_index = td_index;
  649. tree = null;
  650. };
  651. that.proc = function(s, z, r) {
  652. var j; // temporary storage
  653. var tindex; // temporary pointer
  654. var e; // extra bits or operation
  655. var b = 0; // bit buffer
  656. var k = 0; // bits in bit buffer
  657. var p = 0; // input data pointer
  658. var n; // bytes available there
  659. var q; // output window write pointer
  660. var m; // bytes to end of window or read pointer
  661. var f; // pointer to copy strings from
  662. // copy input/output information to locals (UPDATE macro restores)
  663. p = z.next_in_index;
  664. n = z.avail_in;
  665. b = s.bitb;
  666. k = s.bitk;
  667. q = s.write;
  668. m = q < s.read ? s.read - q - 1 : s.end - q;
  669. // process input and output based on current state
  670. while (true) {
  671. switch (mode) {
  672. // waiting for "i:"=input, "o:"=output, "x:"=nothing
  673. case START: // x: set up for LEN
  674. if (m >= 258 && n >= 10) {
  675. s.bitb = b;
  676. s.bitk = k;
  677. z.avail_in = n;
  678. z.total_in += p - z.next_in_index;
  679. z.next_in_index = p;
  680. s.write = q;
  681. r = inflate_fast(lbits, dbits, ltree, ltree_index, dtree, dtree_index, s, z);
  682. p = z.next_in_index;
  683. n = z.avail_in;
  684. b = s.bitb;
  685. k = s.bitk;
  686. q = s.write;
  687. m = q < s.read ? s.read - q - 1 : s.end - q;
  688. if (r != Z_OK) {
  689. mode = r == Z_STREAM_END ? WASH : BADCODE;
  690. break;
  691. }
  692. }
  693. need = lbits;
  694. tree = ltree;
  695. tree_index = ltree_index;
  696. mode = LEN;
  697. /* falls through */
  698. case LEN: // i: get length/literal/eob next
  699. j = need;
  700. while (k < (j)) {
  701. if (n !== 0)
  702. r = Z_OK;
  703. else {
  704. s.bitb = b;
  705. s.bitk = k;
  706. z.avail_in = n;
  707. z.total_in += p - z.next_in_index;
  708. z.next_in_index = p;
  709. s.write = q;
  710. return s.inflate_flush(z, r);
  711. }
  712. n--;
  713. b |= (z.read_byte(p++) & 0xff) << k;
  714. k += 8;
  715. }
  716. tindex = (tree_index + (b & inflate_mask[j])) * 3;
  717. b >>>= (tree[tindex + 1]);
  718. k -= (tree[tindex + 1]);
  719. e = tree[tindex];
  720. if (e === 0) { // literal
  721. lit = tree[tindex + 2];
  722. mode = LIT;
  723. break;
  724. }
  725. if ((e & 16) !== 0) { // length
  726. get = e & 15;
  727. len = tree[tindex + 2];
  728. mode = LENEXT;
  729. break;
  730. }
  731. if ((e & 64) === 0) { // next table
  732. need = e;
  733. tree_index = tindex / 3 + tree[tindex + 2];
  734. break;
  735. }
  736. if ((e & 32) !== 0) { // end of block
  737. mode = WASH;
  738. break;
  739. }
  740. mode = BADCODE; // invalid code
  741. z.msg = "invalid literal/length code";
  742. r = Z_DATA_ERROR;
  743. s.bitb = b;
  744. s.bitk = k;
  745. z.avail_in = n;
  746. z.total_in += p - z.next_in_index;
  747. z.next_in_index = p;
  748. s.write = q;
  749. return s.inflate_flush(z, r);
  750. case LENEXT: // i: getting length extra (have base)
  751. j = get;
  752. while (k < (j)) {
  753. if (n !== 0)
  754. r = Z_OK;
  755. else {
  756. s.bitb = b;
  757. s.bitk = k;
  758. z.avail_in = n;
  759. z.total_in += p - z.next_in_index;
  760. z.next_in_index = p;
  761. s.write = q;
  762. return s.inflate_flush(z, r);
  763. }
  764. n--;
  765. b |= (z.read_byte(p++) & 0xff) << k;
  766. k += 8;
  767. }
  768. len += (b & inflate_mask[j]);
  769. b >>= j;
  770. k -= j;
  771. need = dbits;
  772. tree = dtree;
  773. tree_index = dtree_index;
  774. mode = DIST;
  775. /* falls through */
  776. case DIST: // i: get distance next
  777. j = need;
  778. while (k < (j)) {
  779. if (n !== 0)
  780. r = Z_OK;
  781. else {
  782. s.bitb = b;
  783. s.bitk = k;
  784. z.avail_in = n;
  785. z.total_in += p - z.next_in_index;
  786. z.next_in_index = p;
  787. s.write = q;
  788. return s.inflate_flush(z, r);
  789. }
  790. n--;
  791. b |= (z.read_byte(p++) & 0xff) << k;
  792. k += 8;
  793. }
  794. tindex = (tree_index + (b & inflate_mask[j])) * 3;
  795. b >>= tree[tindex + 1];
  796. k -= tree[tindex + 1];
  797. e = (tree[tindex]);
  798. if ((e & 16) !== 0) { // distance
  799. get = e & 15;
  800. dist = tree[tindex + 2];
  801. mode = DISTEXT;
  802. break;
  803. }
  804. if ((e & 64) === 0) { // next table
  805. need = e;
  806. tree_index = tindex / 3 + tree[tindex + 2];
  807. break;
  808. }
  809. mode = BADCODE; // invalid code
  810. z.msg = "invalid distance code";
  811. r = Z_DATA_ERROR;
  812. s.bitb = b;
  813. s.bitk = k;
  814. z.avail_in = n;
  815. z.total_in += p - z.next_in_index;
  816. z.next_in_index = p;
  817. s.write = q;
  818. return s.inflate_flush(z, r);
  819. case DISTEXT: // i: getting distance extra
  820. j = get;
  821. while (k < (j)) {
  822. if (n !== 0)
  823. r = Z_OK;
  824. else {
  825. s.bitb = b;
  826. s.bitk = k;
  827. z.avail_in = n;
  828. z.total_in += p - z.next_in_index;
  829. z.next_in_index = p;
  830. s.write = q;
  831. return s.inflate_flush(z, r);
  832. }
  833. n--;
  834. b |= (z.read_byte(p++) & 0xff) << k;
  835. k += 8;
  836. }
  837. dist += (b & inflate_mask[j]);
  838. b >>= j;
  839. k -= j;
  840. mode = COPY;
  841. /* falls through */
  842. case COPY: // o: copying bytes in window, waiting for space
  843. f = q - dist;
  844. while (f < 0) { // modulo window size-"while" instead
  845. f += s.end; // of "if" handles invalid distances
  846. }
  847. while (len !== 0) {
  848. if (m === 0) {
  849. if (q == s.end && s.read !== 0) {
  850. q = 0;
  851. m = q < s.read ? s.read - q - 1 : s.end - q;
  852. }
  853. if (m === 0) {
  854. s.write = q;
  855. r = s.inflate_flush(z, r);
  856. q = s.write;
  857. m = q < s.read ? s.read - q - 1 : s.end - q;
  858. if (q == s.end && s.read !== 0) {
  859. q = 0;
  860. m = q < s.read ? s.read - q - 1 : s.end - q;
  861. }
  862. if (m === 0) {
  863. s.bitb = b;
  864. s.bitk = k;
  865. z.avail_in = n;
  866. z.total_in += p - z.next_in_index;
  867. z.next_in_index = p;
  868. s.write = q;
  869. return s.inflate_flush(z, r);
  870. }
  871. }
  872. }
  873. s.window[q++] = s.window[f++];
  874. m--;
  875. if (f == s.end)
  876. f = 0;
  877. len--;
  878. }
  879. mode = START;
  880. break;
  881. case LIT: // o: got literal, waiting for output space
  882. if (m === 0) {
  883. if (q == s.end && s.read !== 0) {
  884. q = 0;
  885. m = q < s.read ? s.read - q - 1 : s.end - q;
  886. }
  887. if (m === 0) {
  888. s.write = q;
  889. r = s.inflate_flush(z, r);
  890. q = s.write;
  891. m = q < s.read ? s.read - q - 1 : s.end - q;
  892. if (q == s.end && s.read !== 0) {
  893. q = 0;
  894. m = q < s.read ? s.read - q - 1 : s.end - q;
  895. }
  896. if (m === 0) {
  897. s.bitb = b;
  898. s.bitk = k;
  899. z.avail_in = n;
  900. z.total_in += p - z.next_in_index;
  901. z.next_in_index = p;
  902. s.write = q;
  903. return s.inflate_flush(z, r);
  904. }
  905. }
  906. }
  907. r = Z_OK;
  908. s.window[q++] = /* (byte) */lit;
  909. m--;
  910. mode = START;
  911. break;
  912. case WASH: // o: got eob, possibly more output
  913. if (k > 7) { // return unused byte, if any
  914. k -= 8;
  915. n++;
  916. p--; // can always return one
  917. }
  918. s.write = q;
  919. r = s.inflate_flush(z, r);
  920. q = s.write;
  921. m = q < s.read ? s.read - q - 1 : s.end - q;
  922. if (s.read != s.write) {
  923. s.bitb = b;
  924. s.bitk = k;
  925. z.avail_in = n;
  926. z.total_in += p - z.next_in_index;
  927. z.next_in_index = p;
  928. s.write = q;
  929. return s.inflate_flush(z, r);
  930. }
  931. mode = END;
  932. /* falls through */
  933. case END:
  934. r = Z_STREAM_END;
  935. s.bitb = b;
  936. s.bitk = k;
  937. z.avail_in = n;
  938. z.total_in += p - z.next_in_index;
  939. z.next_in_index = p;
  940. s.write = q;
  941. return s.inflate_flush(z, r);
  942. case BADCODE: // x: got error
  943. r = Z_DATA_ERROR;
  944. s.bitb = b;
  945. s.bitk = k;
  946. z.avail_in = n;
  947. z.total_in += p - z.next_in_index;
  948. z.next_in_index = p;
  949. s.write = q;
  950. return s.inflate_flush(z, r);
  951. default:
  952. r = Z_STREAM_ERROR;
  953. s.bitb = b;
  954. s.bitk = k;
  955. z.avail_in = n;
  956. z.total_in += p - z.next_in_index;
  957. z.next_in_index = p;
  958. s.write = q;
  959. return s.inflate_flush(z, r);
  960. }
  961. }
  962. };
  963. that.free = function() {
  964. // ZFREE(z, c);
  965. };
  966. }
  967. // InfBlocks
  968. // Table for deflate from PKZIP's appnote.txt.
  969. var border = [ // Order of the bit length code lengths
  970. 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];
  971. var TYPE = 0; // get type bits (3, including end bit)
  972. var LENS = 1; // get lengths for stored
  973. var STORED = 2;// processing stored block
  974. var TABLE = 3; // get table lengths
  975. var BTREE = 4; // get bit lengths tree for a dynamic
  976. // block
  977. var DTREE = 5; // get length, distance trees for a
  978. // dynamic block
  979. var CODES = 6; // processing fixed or dynamic block
  980. var DRY = 7; // output remaining window bytes
  981. var DONELOCKS = 8; // finished last block, done
  982. var BADBLOCKS = 9; // ot a data error--stuck here
  983. function InfBlocks(z, w) {
  984. var that = this;
  985. var mode = TYPE; // current inflate_block mode
  986. var left = 0; // if STORED, bytes left to copy
  987. var table = 0; // table lengths (14 bits)
  988. var index = 0; // index into blens (or border)
  989. var blens; // bit lengths of codes
  990. var bb = [ 0 ]; // bit length tree depth
  991. var tb = [ 0 ]; // bit length decoding tree
  992. var codes = new InfCodes(); // if CODES, current state
  993. var last = 0; // true if this block is the last block
  994. var hufts = new Int32Array(MANY * 3); // single malloc for tree space
  995. var check = 0; // check on output
  996. var inftree = new InfTree();
  997. that.bitk = 0; // bits in bit buffer
  998. that.bitb = 0; // bit buffer
  999. that.window = new Uint8Array(w); // sliding window
  1000. that.end = w; // one byte after sliding window
  1001. that.read = 0; // window read pointer
  1002. that.write = 0; // window write pointer
  1003. that.reset = function(z, c) {
  1004. if (c)
  1005. c[0] = check;
  1006. // if (mode == BTREE || mode == DTREE) {
  1007. // }
  1008. if (mode == CODES) {
  1009. codes.free(z);
  1010. }
  1011. mode = TYPE;
  1012. that.bitk = 0;
  1013. that.bitb = 0;
  1014. that.read = that.write = 0;
  1015. };
  1016. that.reset(z, null);
  1017. // copy as much as possible from the sliding window to the output area
  1018. that.inflate_flush = function(z, r) {
  1019. var n;
  1020. var p;
  1021. var q;
  1022. // local copies of source and destination pointers
  1023. p = z.next_out_index;
  1024. q = that.read;
  1025. // compute number of bytes to copy as far as end of window
  1026. n = /* (int) */((q <= that.write ? that.write : that.end) - q);
  1027. if (n > z.avail_out)
  1028. n = z.avail_out;
  1029. if (n !== 0 && r == Z_BUF_ERROR)
  1030. r = Z_OK;
  1031. // update counters
  1032. z.avail_out -= n;
  1033. z.total_out += n;
  1034. // copy as far as end of window
  1035. z.next_out.set(that.window.subarray(q, q + n), p);
  1036. p += n;
  1037. q += n;
  1038. // see if more to copy at beginning of window
  1039. if (q == that.end) {
  1040. // wrap pointers
  1041. q = 0;
  1042. if (that.write == that.end)
  1043. that.write = 0;
  1044. // compute bytes to copy
  1045. n = that.write - q;
  1046. if (n > z.avail_out)
  1047. n = z.avail_out;
  1048. if (n !== 0 && r == Z_BUF_ERROR)
  1049. r = Z_OK;
  1050. // update counters
  1051. z.avail_out -= n;
  1052. z.total_out += n;
  1053. // copy
  1054. z.next_out.set(that.window.subarray(q, q + n), p);
  1055. p += n;
  1056. q += n;
  1057. }
  1058. // update pointers
  1059. z.next_out_index = p;
  1060. that.read = q;
  1061. // done
  1062. return r;
  1063. };
  1064. that.proc = function(z, r) {
  1065. var t; // temporary storage
  1066. var b; // bit buffer
  1067. var k; // bits in bit buffer
  1068. var p; // input data pointer
  1069. var n; // bytes available there
  1070. var q; // output window write pointer
  1071. var m; // bytes to end of window or read pointer
  1072. var i;
  1073. // copy input/output information to locals (UPDATE macro restores)
  1074. // {
  1075. p = z.next_in_index;
  1076. n = z.avail_in;
  1077. b = that.bitb;
  1078. k = that.bitk;
  1079. // }
  1080. // {
  1081. q = that.write;
  1082. m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q);
  1083. // }
  1084. // process input based on current state
  1085. // DEBUG dtree
  1086. while (true) {
  1087. switch (mode) {
  1088. case TYPE:
  1089. while (k < (3)) {
  1090. if (n !== 0) {
  1091. r = Z_OK;
  1092. } else {
  1093. that.bitb = b;
  1094. that.bitk = k;
  1095. z.avail_in = n;
  1096. z.total_in += p - z.next_in_index;
  1097. z.next_in_index = p;
  1098. that.write = q;
  1099. return that.inflate_flush(z, r);
  1100. }
  1101. n--;
  1102. b |= (z.read_byte(p++) & 0xff) << k;
  1103. k += 8;
  1104. }
  1105. t = /* (int) */(b & 7);
  1106. last = t & 1;
  1107. switch (t >>> 1) {
  1108. case 0: // stored
  1109. // {
  1110. b >>>= (3);
  1111. k -= (3);
  1112. // }
  1113. t = k & 7; // go to byte boundary
  1114. // {
  1115. b >>>= (t);
  1116. k -= (t);
  1117. // }
  1118. mode = LENS; // get length of stored block
  1119. break;
  1120. case 1: // fixed
  1121. // {
  1122. var bl = []; // new Array(1);
  1123. var bd = []; // new Array(1);
  1124. var tl = [ [] ]; // new Array(1);
  1125. var td = [ [] ]; // new Array(1);
  1126. InfTree.inflate_trees_fixed(bl, bd, tl, td);
  1127. codes.init(bl[0], bd[0], tl[0], 0, td[0], 0);
  1128. // }
  1129. // {
  1130. b >>>= (3);
  1131. k -= (3);
  1132. // }
  1133. mode = CODES;
  1134. break;
  1135. case 2: // dynamic
  1136. // {
  1137. b >>>= (3);
  1138. k -= (3);
  1139. // }
  1140. mode = TABLE;
  1141. break;
  1142. case 3: // illegal
  1143. // {
  1144. b >>>= (3);
  1145. k -= (3);
  1146. // }
  1147. mode = BADBLOCKS;
  1148. z.msg = "invalid block type";
  1149. r = Z_DATA_ERROR;
  1150. that.bitb = b;
  1151. that.bitk = k;
  1152. z.avail_in = n;
  1153. z.total_in += p - z.next_in_index;
  1154. z.next_in_index = p;
  1155. that.write = q;
  1156. return that.inflate_flush(z, r);
  1157. }
  1158. break;
  1159. case LENS:
  1160. while (k < (32)) {
  1161. if (n !== 0) {
  1162. r = Z_OK;
  1163. } else {
  1164. that.bitb = b;
  1165. that.bitk = k;
  1166. z.avail_in = n;
  1167. z.total_in += p - z.next_in_index;
  1168. z.next_in_index = p;
  1169. that.write = q;
  1170. return that.inflate_flush(z, r);
  1171. }
  1172. n--;
  1173. b |= (z.read_byte(p++) & 0xff) << k;
  1174. k += 8;
  1175. }
  1176. if ((((~b) >>> 16) & 0xffff) != (b & 0xffff)) {
  1177. mode = BADBLOCKS;
  1178. z.msg = "invalid stored block lengths";
  1179. r = Z_DATA_ERROR;
  1180. that.bitb = b;
  1181. that.bitk = k;
  1182. z.avail_in = n;
  1183. z.total_in += p - z.next_in_index;
  1184. z.next_in_index = p;
  1185. that.write = q;
  1186. return that.inflate_flush(z, r);
  1187. }
  1188. left = (b & 0xffff);
  1189. b = k = 0; // dump bits
  1190. mode = left !== 0 ? STORED : (last !== 0 ? DRY : TYPE);
  1191. break;
  1192. case STORED:
  1193. if (n === 0) {
  1194. that.bitb = b;
  1195. that.bitk = k;
  1196. z.avail_in = n;
  1197. z.total_in += p - z.next_in_index;
  1198. z.next_in_index = p;
  1199. that.write = q;
  1200. return that.inflate_flush(z, r);
  1201. }
  1202. if (m === 0) {
  1203. if (q == that.end && that.read !== 0) {
  1204. q = 0;
  1205. m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q);
  1206. }
  1207. if (m === 0) {
  1208. that.write = q;
  1209. r = that.inflate_flush(z, r);
  1210. q = that.write;
  1211. m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q);
  1212. if (q == that.end && that.read !== 0) {
  1213. q = 0;
  1214. m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q);
  1215. }
  1216. if (m === 0) {
  1217. that.bitb = b;
  1218. that.bitk = k;
  1219. z.avail_in = n;
  1220. z.total_in += p - z.next_in_index;
  1221. z.next_in_index = p;
  1222. that.write = q;
  1223. return that.inflate_flush(z, r);
  1224. }
  1225. }
  1226. }
  1227. r = Z_OK;
  1228. t = left;
  1229. if (t > n)
  1230. t = n;
  1231. if (t > m)
  1232. t = m;
  1233. that.window.set(z.read_buf(p, t), q);
  1234. p += t;
  1235. n -= t;
  1236. q += t;
  1237. m -= t;
  1238. if ((left -= t) !== 0)
  1239. break;
  1240. mode = last !== 0 ? DRY : TYPE;
  1241. break;
  1242. case TABLE:
  1243. while (k < (14)) {
  1244. if (n !== 0) {
  1245. r = Z_OK;
  1246. } else {
  1247. that.bitb = b;
  1248. that.bitk = k;
  1249. z.avail_in = n;
  1250. z.total_in += p - z.next_in_index;
  1251. z.next_in_index = p;
  1252. that.write = q;
  1253. return that.inflate_flush(z, r);
  1254. }
  1255. n--;
  1256. b |= (z.read_byte(p++) & 0xff) << k;
  1257. k += 8;
  1258. }
  1259. table = t = (b & 0x3fff);
  1260. if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29) {
  1261. mode = BADBLOCKS;
  1262. z.msg = "too many length or distance symbols";
  1263. r = Z_DATA_ERROR;
  1264. that.bitb = b;
  1265. that.bitk = k;
  1266. z.avail_in = n;
  1267. z.total_in += p - z.next_in_index;
  1268. z.next_in_index = p;
  1269. that.write = q;
  1270. return that.inflate_flush(z, r);
  1271. }
  1272. t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);
  1273. if (!blens || blens.length < t) {
  1274. blens = []; // new Array(t);
  1275. } else {
  1276. for (i = 0; i < t; i++) {
  1277. blens[i] = 0;
  1278. }
  1279. }
  1280. // {
  1281. b >>>= (14);
  1282. k -= (14);
  1283. // }
  1284. index = 0;
  1285. mode = BTREE;
  1286. /* falls through */
  1287. case BTREE:
  1288. while (index < 4 + (table >>> 10)) {
  1289. while (k < (3)) {
  1290. if (n !== 0) {
  1291. r = Z_OK;
  1292. } else {
  1293. that.bitb = b;
  1294. that.bitk = k;
  1295. z.avail_in = n;
  1296. z.total_in += p - z.next_in_index;
  1297. z.next_in_index = p;
  1298. that.write = q;
  1299. return that.inflate_flush(z, r);
  1300. }
  1301. n--;
  1302. b |= (z.read_byte(p++) & 0xff) << k;
  1303. k += 8;
  1304. }
  1305. blens[border[index++]] = b & 7;
  1306. // {
  1307. b >>>= (3);
  1308. k -= (3);
  1309. // }
  1310. }
  1311. while (index < 19) {
  1312. blens[border[index++]] = 0;
  1313. }
  1314. bb[0] = 7;
  1315. t = inftree.inflate_trees_bits(blens, bb, tb, hufts, z);
  1316. if (t != Z_OK) {
  1317. r = t;
  1318. if (r == Z_DATA_ERROR) {
  1319. blens = null;
  1320. mode = BADBLOCKS;
  1321. }
  1322. that.bitb = b;
  1323. that.bitk = k;
  1324. z.avail_in = n;
  1325. z.total_in += p - z.next_in_index;
  1326. z.next_in_index = p;
  1327. that.write = q;
  1328. return that.inflate_flush(z, r);
  1329. }
  1330. index = 0;
  1331. mode = DTREE;
  1332. /* falls through */
  1333. case DTREE:
  1334. while (true) {
  1335. t = table;
  1336. if (index >= 258 + (t & 0x1f) + ((t >> 5) & 0x1f)) {
  1337. break;
  1338. }
  1339. var j, c;
  1340. t = bb[0];
  1341. while (k < (t)) {
  1342. if (n !== 0) {
  1343. r = Z_OK;
  1344. } else {
  1345. that.bitb = b;
  1346. that.bitk = k;
  1347. z.avail_in = n;
  1348. z.total_in += p - z.next_in_index;
  1349. z.next_in_index = p;
  1350. that.write = q;
  1351. return that.inflate_flush(z, r);
  1352. }
  1353. n--;
  1354. b |= (z.read_byte(p++) & 0xff) << k;
  1355. k += 8;
  1356. }
  1357. // if (tb[0] == -1) {
  1358. // System.err.println("null...");
  1359. // }
  1360. t = hufts[(tb[0] + (b & inflate_mask[t])) * 3 + 1];
  1361. c = hufts[(tb[0] + (b & inflate_mask[t])) * 3 + 2];
  1362. if (c < 16) {
  1363. b >>>= (t);
  1364. k -= (t);
  1365. blens[index++] = c;
  1366. } else { // c == 16..18
  1367. i = c == 18 ? 7 : c - 14;
  1368. j = c == 18 ? 11 : 3;
  1369. while (k < (t + i)) {
  1370. if (n !== 0) {
  1371. r = Z_OK;
  1372. } else {
  1373. that.bitb = b;
  1374. that.bitk = k;
  1375. z.avail_in = n;
  1376. z.total_in += p - z.next_in_index;
  1377. z.next_in_index = p;
  1378. that.write = q;
  1379. return that.inflate_flush(z, r);
  1380. }
  1381. n--;
  1382. b |= (z.read_byte(p++) & 0xff) << k;
  1383. k += 8;
  1384. }
  1385. b >>>= (t);
  1386. k -= (t);
  1387. j += (b & inflate_mask[i]);
  1388. b >>>= (i);
  1389. k -= (i);
  1390. i = index;
  1391. t = table;
  1392. if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) || (c == 16 && i < 1)) {
  1393. blens = null;
  1394. mode = BADBLOCKS;
  1395. z.msg = "invalid bit length repeat";
  1396. r = Z_DATA_ERROR;
  1397. that.bitb = b;
  1398. that.bitk = k;
  1399. z.avail_in = n;
  1400. z.total_in += p - z.next_in_index;
  1401. z.next_in_index = p;
  1402. that.write = q;
  1403. return that.inflate_flush(z, r);
  1404. }
  1405. c = c == 16 ? blens[i - 1] : 0;
  1406. do {
  1407. blens[i++] = c;
  1408. } while (--j !== 0);
  1409. index = i;
  1410. }
  1411. }
  1412. tb[0] = -1;
  1413. // {
  1414. var bl_ = []; // new Array(1);
  1415. var bd_ = []; // new Array(1);
  1416. var tl_ = []; // new Array(1);
  1417. var td_ = []; // new Array(1);
  1418. bl_[0] = 9; // must be <= 9 for lookahead assumptions
  1419. bd_[0] = 6; // must be <= 9 for lookahead assumptions
  1420. t = table;
  1421. t = inftree.inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f), blens, bl_, bd_, tl_, td_, hufts, z);
  1422. if (t != Z_OK) {
  1423. if (t == Z_DATA_ERROR) {
  1424. blens = null;
  1425. mode = BADBLOCKS;
  1426. }
  1427. r = t;
  1428. that.bitb = b;
  1429. that.bitk = k;
  1430. z.avail_in = n;
  1431. z.total_in += p - z.next_in_index;
  1432. z.next_in_index = p;
  1433. that.write = q;
  1434. return that.inflate_flush(z, r);
  1435. }
  1436. codes.init(bl_[0], bd_[0], hufts, tl_[0], hufts, td_[0]);
  1437. // }
  1438. mode = CODES;
  1439. /* falls through */
  1440. case CODES:
  1441. that.bitb = b;
  1442. that.bitk = k;
  1443. z.avail_in = n;
  1444. z.total_in += p - z.next_in_index;
  1445. z.next_in_index = p;
  1446. that.write = q;
  1447. if ((r = codes.proc(that, z, r)) != Z_STREAM_END) {
  1448. return that.inflate_flush(z, r);
  1449. }
  1450. r = Z_OK;
  1451. codes.free(z);
  1452. p = z.next_in_index;
  1453. n = z.avail_in;
  1454. b = that.bitb;
  1455. k = that.bitk;
  1456. q = that.write;
  1457. m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q);
  1458. if (last === 0) {
  1459. mode = TYPE;
  1460. break;
  1461. }
  1462. mode = DRY;
  1463. /* falls through */
  1464. case DRY:
  1465. that.write = q;
  1466. r = that.inflate_flush(z, r);
  1467. q = that.write;
  1468. m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q);
  1469. if (that.read != that.write) {
  1470. that.bitb = b;
  1471. that.bitk = k;
  1472. z.avail_in = n;
  1473. z.total_in += p - z.next_in_index;
  1474. z.next_in_index = p;
  1475. that.write = q;
  1476. return that.inflate_flush(z, r);
  1477. }
  1478. mode = DONELOCKS;
  1479. /* falls through */
  1480. case DONELOCKS:
  1481. r = Z_STREAM_END;
  1482. that.bitb = b;
  1483. that.bitk = k;
  1484. z.avail_in = n;
  1485. z.total_in += p - z.next_in_index;
  1486. z.next_in_index = p;
  1487. that.write = q;
  1488. return that.inflate_flush(z, r);
  1489. case BADBLOCKS:
  1490. r = Z_DATA_ERROR;
  1491. that.bitb = b;
  1492. that.bitk = k;
  1493. z.avail_in = n;
  1494. z.total_in += p - z.next_in_index;
  1495. z.next_in_index = p;
  1496. that.write = q;
  1497. return that.inflate_flush(z, r);
  1498. default:
  1499. r = Z_STREAM_ERROR;
  1500. that.bitb = b;
  1501. that.bitk = k;
  1502. z.avail_in = n;
  1503. z.total_in += p - z.next_in_index;
  1504. z.next_in_index = p;
  1505. that.write = q;
  1506. return that.inflate_flush(z, r);
  1507. }
  1508. }
  1509. };
  1510. that.free = function(z) {
  1511. that.reset(z, null);
  1512. that.window = null;
  1513. hufts = null;
  1514. // ZFREE(z, s);
  1515. };
  1516. that.set_dictionary = function(d, start, n) {
  1517. that.window.set(d.subarray(start, start + n), 0);
  1518. that.read = that.write = n;
  1519. };
  1520. // Returns true if inflate is currently at the end of a block generated
  1521. // by Z_SYNC_FLUSH or Z_FULL_FLUSH.
  1522. that.sync_point = function() {
  1523. return mode == LENS ? 1 : 0;
  1524. };
  1525. }
  1526. // Inflate
  1527. // preset dictionary flag in zlib header
  1528. var PRESET_DICT = 0x20;
  1529. var Z_DEFLATED = 8;
  1530. var METHOD = 0; // waiting for method byte
  1531. var FLAG = 1; // waiting for flag byte
  1532. var DICT4 = 2; // four dictionary check bytes to go
  1533. var DICT3 = 3; // three dictionary check bytes to go
  1534. var DICT2 = 4; // two dictionary check bytes to go
  1535. var DICT1 = 5; // one dictionary check byte to go
  1536. var DICT0 = 6; // waiting for inflateSetDictionary
  1537. var BLOCKS = 7; // decompressing blocks
  1538. var DONE = 12; // finished check, done
  1539. var BAD = 13; // got an error--stay here
  1540. var mark = [ 0, 0, 0xff, 0xff ];
  1541. function Inflate() {
  1542. var that = this;
  1543. that.mode = 0; // current inflate mode
  1544. // mode dependent information
  1545. that.method = 0; // if FLAGS, method byte
  1546. // if CHECK, check values to compare
  1547. that.was = [ 0 ]; // new Array(1); // computed check value
  1548. that.need = 0; // stream check value
  1549. // if BAD, inflateSync's marker bytes count
  1550. that.marker = 0;
  1551. // mode independent information
  1552. that.wbits = 0; // log2(window size) (8..15, defaults to 15)
  1553. // this.blocks; // current inflate_blocks state
  1554. function inflateReset(z) {
  1555. if (!z || !z.istate)
  1556. return Z_STREAM_ERROR;
  1557. z.total_in = z.total_out = 0;
  1558. z.msg = null;
  1559. z.istate.mode = BLOCKS;
  1560. z.istate.blocks.reset(z, null);
  1561. return Z_OK;
  1562. }
  1563. that.inflateEnd = function(z) {
  1564. if (that.blocks)
  1565. that.blocks.free(z);
  1566. that.blocks = null;
  1567. // ZFREE(z, z->state);
  1568. return Z_OK;
  1569. };
  1570. that.inflateInit = function(z, w) {
  1571. z.msg = null;
  1572. that.blocks = null;
  1573. // set window size
  1574. if (w < 8 || w > 15) {
  1575. that.inflateEnd(z);
  1576. return Z_STREAM_ERROR;
  1577. }
  1578. that.wbits = w;
  1579. z.istate.blocks = new InfBlocks(z, 1 << w);
  1580. // reset state
  1581. inflateReset(z);
  1582. return Z_OK;
  1583. };
  1584. that.inflate = function(z, f) {
  1585. var r;
  1586. var b;
  1587. if (!z || !z.istate || !z.next_in)
  1588. return Z_STREAM_ERROR;
  1589. f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK;
  1590. r = Z_BUF_ERROR;
  1591. while (true) {
  1592. // System.out.println("mode: "+z.istate.mode);
  1593. switch (z.istate.mode) {
  1594. case METHOD:
  1595. if (z.avail_in === 0)
  1596. return r;
  1597. r = f;
  1598. z.avail_in--;
  1599. z.total_in++;
  1600. if (((z.istate.method = z.read_byte(z.next_in_index++)) & 0xf) != Z_DEFLATED) {
  1601. z.istate.mode = BAD;
  1602. z.msg = "unknown compression method";
  1603. z.istate.marker = 5; // can't try inflateSync
  1604. break;
  1605. }
  1606. if ((z.istate.method >> 4) + 8 > z.istate.wbits) {
  1607. z.istate.mode = BAD;
  1608. z.msg = "invalid window size";
  1609. z.istate.marker = 5; // can't try inflateSync
  1610. break;
  1611. }
  1612. z.istate.mode = FLAG;
  1613. /* falls through */
  1614. case FLAG:
  1615. if (z.avail_in === 0)
  1616. return r;
  1617. r = f;
  1618. z.avail_in--;
  1619. z.total_in++;
  1620. b = (z.read_byte(z.next_in_index++)) & 0xff;
  1621. if ((((z.istate.method << 8) + b) % 31) !== 0) {
  1622. z.istate.mode = BAD;
  1623. z.msg = "incorrect header check";
  1624. z.istate.marker = 5; // can't try inflateSync
  1625. break;
  1626. }
  1627. if ((b & PRESET_DICT) === 0) {
  1628. z.istate.mode = BLOCKS;
  1629. break;
  1630. }
  1631. z.istate.mode = DICT4;
  1632. /* falls through */
  1633. case DICT4:
  1634. if (z.avail_in === 0)
  1635. return r;
  1636. r = f;
  1637. z.avail_in--;
  1638. z.total_in++;
  1639. z.istate.need = ((z.read_byte(z.next_in_index++) & 0xff) << 24) & 0xff000000;
  1640. z.istate.mode = DICT3;
  1641. /* falls through */
  1642. case DICT3:
  1643. if (z.avail_in === 0)
  1644. return r;
  1645. r = f;
  1646. z.avail_in--;
  1647. z.total_in++;
  1648. z.istate.need += ((z.read_byte(z.next_in_index++) & 0xff) << 16) & 0xff0000;
  1649. z.istate.mode = DICT2;
  1650. /* falls through */
  1651. case DICT2:
  1652. if (z.avail_in === 0)
  1653. return r;
  1654. r = f;
  1655. z.avail_in--;
  1656. z.total_in++;
  1657. z.istate.need += ((z.read_byte(z.next_in_index++) & 0xff) << 8) & 0xff00;
  1658. z.istate.mode = DICT1;
  1659. /* falls through */
  1660. case DICT1:
  1661. if (z.avail_in === 0)
  1662. return r;
  1663. r = f;
  1664. z.avail_in--;
  1665. z.total_in++;
  1666. z.istate.need += (z.read_byte(z.next_in_index++) & 0xff);
  1667. z.istate.mode = DICT0;
  1668. return Z_NEED_DICT;
  1669. case DICT0:
  1670. z.istate.mode = BAD;
  1671. z.msg = "need dictionary";
  1672. z.istate.marker = 0; // can try inflateSync
  1673. return Z_STREAM_ERROR;
  1674. case BLOCKS:
  1675. r = z.istate.blocks.proc(z, r);
  1676. if (r == Z_DATA_ERROR) {
  1677. z.istate.mode = BAD;
  1678. z.istate.marker = 0; // can try inflateSync
  1679. break;
  1680. }
  1681. if (r == Z_OK) {
  1682. r = f;
  1683. }
  1684. if (r != Z_STREAM_END) {
  1685. return r;
  1686. }
  1687. r = f;
  1688. z.istate.blocks.reset(z, z.istate.was);
  1689. z.istate.mode = DONE;
  1690. /* falls through */
  1691. case DONE:
  1692. return Z_STREAM_END;
  1693. case BAD:
  1694. return Z_DATA_ERROR;
  1695. default:
  1696. return Z_STREAM_ERROR;
  1697. }
  1698. }
  1699. };
  1700. that.inflateSetDictionary = function(z, dictionary, dictLength) {
  1701. var index = 0;
  1702. var length = dictLength;
  1703. if (!z || !z.istate || z.istate.mode != DICT0)
  1704. return Z_STREAM_ERROR;
  1705. if (length >= (1 << z.istate.wbits)) {
  1706. length = (1 << z.istate.wbits) - 1;
  1707. index = dictLength - length;
  1708. }
  1709. z.istate.blocks.set_dictionary(dictionary, index, length);
  1710. z.istate.mode = BLOCKS;
  1711. return Z_OK;
  1712. };
  1713. that.inflateSync = function(z) {
  1714. var n; // number of bytes to look at
  1715. var p; // pointer to bytes
  1716. var m; // number of marker bytes found in a row
  1717. var r, w; // temporaries to save total_in and total_out
  1718. // set up
  1719. if (!z || !z.istate)
  1720. return Z_STREAM_ERROR;
  1721. if (z.istate.mode != BAD) {
  1722. z.istate.mode = BAD;
  1723. z.istate.marker = 0;
  1724. }
  1725. if ((n = z.avail_in) === 0)
  1726. return Z_BUF_ERROR;
  1727. p = z.next_in_index;
  1728. m = z.istate.marker;
  1729. // search
  1730. while (n !== 0 && m < 4) {
  1731. if (z.read_byte(p) == mark[m]) {
  1732. m++;
  1733. } else if (z.read_byte(p) !== 0) {
  1734. m = 0;
  1735. } else {
  1736. m = 4 - m;
  1737. }
  1738. p++;
  1739. n--;
  1740. }
  1741. // restore
  1742. z.total_in += p - z.next_in_index;
  1743. z.next_in_index = p;
  1744. z.avail_in = n;
  1745. z.istate.marker = m;
  1746. // return no joy or set up to restart on a new block
  1747. if (m != 4) {
  1748. return Z_DATA_ERROR;
  1749. }
  1750. r = z.total_in;
  1751. w = z.total_out;
  1752. inflateReset(z);
  1753. z.total_in = r;
  1754. z.total_out = w;
  1755. z.istate.mode = BLOCKS;
  1756. return Z_OK;
  1757. };
  1758. // Returns true if inflate is currently at the end of a block generated
  1759. // by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
  1760. // implementation to provide an additional safety check. PPP uses
  1761. // Z_SYNC_FLUSH
  1762. // but removes the length bytes of the resulting empty stored block. When
  1763. // decompressing, PPP checks that at the end of input packet, inflate is
  1764. // waiting for these length bytes.
  1765. that.inflateSyncPoint = function(z) {
  1766. if (!z || !z.istate || !z.istate.blocks)
  1767. return Z_STREAM_ERROR;
  1768. return z.istate.blocks.sync_point();
  1769. };
  1770. }
  1771. // ZStream
  1772. function ZStream() {
  1773. }
  1774. ZStream.prototype = {
  1775. inflateInit : function(bits) {
  1776. var that = this;
  1777. that.istate = new Inflate();
  1778. if (!bits)
  1779. bits = MAX_BITS;
  1780. return that.istate.inflateInit(that, bits);
  1781. },
  1782. inflate : function(f) {
  1783. var that = this;
  1784. if (!that.istate)
  1785. return Z_STREAM_ERROR;
  1786. return that.istate.inflate(that, f);
  1787. },
  1788. inflateEnd : function() {
  1789. var that = this;
  1790. if (!that.istate)
  1791. return Z_STREAM_ERROR;
  1792. var ret = that.istate.inflateEnd(that);
  1793. that.istate = null;
  1794. return ret;
  1795. },
  1796. inflateSync : function() {
  1797. var that = this;
  1798. if (!that.istate)
  1799. return Z_STREAM_ERROR;
  1800. return that.istate.inflateSync(that);
  1801. },
  1802. inflateSetDictionary : function(dictionary, dictLength) {
  1803. var that = this;
  1804. if (!that.istate)
  1805. return Z_STREAM_ERROR;
  1806. return that.istate.inflateSetDictionary(that, dictionary, dictLength);
  1807. },
  1808. read_byte : function(start) {
  1809. var that = this;
  1810. return that.next_in.subarray(start, start + 1)[0];
  1811. },
  1812. read_buf : function(start, size) {
  1813. var that = this;
  1814. return that.next_in.subarray(start, start + size);
  1815. }
  1816. };
  1817. // Inflater
  1818. function Inflater() {
  1819. var that = this;
  1820. var z = new ZStream();
  1821. var bufsize = 512;
  1822. var flush = Z_NO_FLUSH;
  1823. var buf = new Uint8Array(bufsize);
  1824. var nomoreinput = false;
  1825. z.inflateInit();
  1826. z.next_out = buf;
  1827. that.decompress = function (data) {
  1828. var input = data;
  1829. var buffer;
  1830. var adler32;
  1831. buffer = this.rawinflate.decompress();
  1832. this.ip = this.rawinflate.ip;
  1833. // verify adler-32
  1834. if (this.verify) {
  1835. adler32 = (
  1836. input[this.ip++] << 24 | input[this.ip++] << 16 |
  1837. input[this.ip++] << 8 | input[this.ip++]
  1838. ) >>> 0;
  1839. if (adler32 !== Zlib.Adler32(buffer)) {
  1840. throw new Error('invalid adler-32 checksum');
  1841. }
  1842. }
  1843. return buffer;
  1844. };
  1845. that.append = function (data, onprogress) {
  1846. var err, buffers = [], lastIndex = 0, bufferIndex = 0, bufferSize = 0, array;
  1847. if (data.length === 0)
  1848. return;
  1849. z.next_in_index = 0;
  1850. z.next_in = data;
  1851. z.avail_in = data.length;
  1852. do {
  1853. z.next_out_index = 0;
  1854. z.avail_out = bufsize;
  1855. if ((z.avail_in === 0) && (!nomoreinput)) { // if buffer is empty and more input is available, refill it
  1856. z.next_in_index = 0;
  1857. nomoreinput = true;
  1858. }
  1859. err = z.inflate(flush);
  1860. if (nomoreinput && (err === Z_BUF_ERROR)) {
  1861. if (z.avail_in !== 0)
  1862. throw new Error("inflating: bad input");
  1863. } else if (err !== Z_OK && err !== Z_STREAM_END)
  1864. throw new Error("inflating: " + z.msg);
  1865. if ((nomoreinput || err === Z_STREAM_END) && (z.avail_in === data.length))
  1866. throw new Error("inflating: bad input");
  1867. if (z.next_out_index)
  1868. if (z.next_out_index === bufsize)
  1869. buffers.push(new Uint8Array(buf));
  1870. else
  1871. buffers.push(new Uint8Array(buf.subarray(0, z.next_out_index)));
  1872. bufferSize += z.next_out_index;
  1873. if (onprogress && z.next_in_index > 0 && z.next_in_index != lastIndex) {
  1874. onprogress(z.next_in_index);
  1875. lastIndex = z.next_in_index;
  1876. }
  1877. } while (z.avail_in > 0 || z.avail_out === 0);
  1878. array = new Uint8Array(bufferSize);
  1879. buffers.forEach(function(chunk) {
  1880. array.set(chunk, bufferIndex);
  1881. bufferIndex += chunk.length;
  1882. });
  1883. return array;
  1884. };
  1885. that.flush = function() {
  1886. z.inflateEnd();
  1887. };
  1888. }
  1889. // 'zip' may not be defined in z-worker and some tests
  1890. var env = global.zip || global;
  1891. env.Inflater = env._jzlib_Inflater = Inflater;
  1892. })(this);