Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Pygments / examplefiles / output / test.php
Size: Mime:
€]q(cpygments.token
_TokenType
qXCommentqXPreprocq†q…qq}q(Xsubtypesqcbuiltins
set
q	]q
…qRqXparentq
hh…q…qq}q(hh	]q(hhhXMultiq†q…qq}q(hh	]q…qRqh
hubhhXHashbangq†q…qq}q(hh	]q …q!Rq"h
hubhhXSingleq#†q$…q%q&}q'(hh	]q(…q)Rq*h
hubhhX
SingleLineq+†q,…q-q.}q/(hh	]q0…q1Rq2h
hubhhXDocq3†q4…q5q6}q7(hh	]q8…q9Rq:h
hubhhX	Directiveq;†q<…q=q>}q?(hh	]q@…qARqBh
hubhhX	MultilineqC†qD…qEqF}qG(hh	]qH…qIRqJh
hubhhX
SinglelineqK†qL…qMqN}qO(hh	]qP…qQRqRh
hubhhXPreprocFileqS†qT…qUqV}qW(hh	]qX…qYRqZh
hubhhXSpecialq[†q\…q]q^}q_(hh	]q`…qaRqbh
hube…qcRqdh
h)…qeqf}qg(hh	]qh(hXEscapeqi…qj…qkql}qm(hh	]qn…qoRqph
hfubhXOperatorqq…qr…qsqt}qu(hh	]qv(hhqXDBSqw†qx…qyqz}q{(hh	]q|…q}Rq~h
htubhhqXWordq†q€…qq‚}qƒ(hh	]q„…q…Rq†h
htube…q‡Rqˆh
hfhh‚hwhzubhXNameq‰…qŠ…q‹qŒ}q(hh	]qŽ(hh‰XTagq†q…q‘q’}q“(hh	]q”…q•Rq–h
hŒubhh‰XEntityq—†q˜…q™qš}q›(hh	]qœhh‰h—hw‡q…qžqŸ}q (hh	]q¡…q¢Rq£h
hšuba…q¤Rq¥h
hŒhwhŸubhh‰X	Exceptionq¦†q§…q¨q©}qª(hh	]q«…q¬Rq­h
hŒubhh‰X	Decoratorq®†q¯…q°q±}q²(hh	]q³…q´Rqµh
hŒubhh‰XClassq¶†q·…q¸q¹}qº(hh	]q»(hh‰h¶hw‡q¼…q½q¾}q¿(hh	]qqÁRqÂh
h¹ubhh‰h¶XStartqÇqąqŁqÆ}qÇ(hh	]qȅqÉRqÊh
h¹ube…qËRqÌh
hŒhÃhÆhwh¾ubhh‰XVariableq͆q΅qρqÐ}qÑ(hh	]qÒ(hh‰hÍX	AnonymousqӇqԅqՁqÖ}q×(hh	]q؅qÙRqÚh
hÐubhh‰hÍh¶‡qۅq܁qÝ}qÞ(hh	]q߅qàRqáh
hÐubhh‰hÍXMagicqâ‡qã…qäqå}qæ(hh	]qç…qèRqéh
hÐubhh‰hÍXGlobalqê‡që…qìqí}qî(hh	]qï…qðRqñh
hÐubhh‰hÍXInstanceqò‡qó…qôqõ}qö(hh	]q÷…qøRqùh
hÐube…qúRqûh
hŒh¶hÝhêhíhòhõhâhåhÓhÖubhh‰X	Attributeqü†qý…qþqÿ}r(hh	]rhh‰hüh͇r…rr}r(hh	]r…rRrh
hÿuba…r	Rr
h
hŒhÍjubhh‰X	Namespacer†r…r
r}r(hh	]r…rRrh
hŒubhh‰XPropertyr†r…rr}r(hh	]r…rRrh
hŒubhh‰XSymbolr†r…rr}r(hh	]r …r!Rr"h
hŒubhh‰XClassesr#†r$…r%r&}r'(hh	]r(…r)Rr*h
hŒubhh‰XPseudor+†r,…r-r.}r/(hh	]r0…r1Rr2h
hŒubhh‰XLabelr3†r4…r5r6}r7(hh	]r8…r9Rr:h
hŒubhh‰hq†r;…r<r=}r>(hh	]r?…r@RrAh
hŒubhh‰XBuiltinrB†rC…rDrE}rF(hh	]rG(hh‰jBj+‡rH…rIrJ}rK(hh	]rL…rMRrNh
jEubhh‰jBXTyperO‡rP…rQrR}rS(hh	]rT…rURrVh
jEube…rWRrXh
hŒj+jJjOjRubhh‰XFieldrY†rZ…r[r\}r](hh	]r^…r_Rr`h
hŒubhh‰XOtherra†rb…rcrd}re(hh	]rfhh‰jaXMemberrg‡rh…rirj}rk(hh	]rl…rmRrnh
jduba…roRrph
hŒjgjjubhh‰XFunctionrq†rr…rsrt}ru(hh	]rvhh‰jqhâ‡rw…rxry}rz(hh	]r{…r|Rr}h
jtuba…r~Rrh
hŒhâjyubhh‰jO†r€…rr‚}rƒ(hh	]r„…r…Rr†h
hŒubhh‰XConstantr‡†rˆ…r‰rŠ}r‹(hh	]rŒ…rRrŽh
hŒube…rRrh
hfhühÿjBjEh¶h¹j‡jŠh®h±h—hšh¦h©jqjtjjj3j6jjjajdhh’hÍhÐjYj\jjj+j.hqj=j#j&jOj‚ubhXLiteralr‘…r’…r“r”}r•(hh	]r–(hj‘ja†r—…r˜r™}rš(hh	]r›…rœRrh
j”ubhj‘XCharrž†rŸ…r r¡}r¢(hh	]r£…r¤Rr¥h
j”ubhj‘XDater¦†r§…r¨r©}rª(hh	]r«…r¬Rr­h
j”ubhj‘XScalarr®†r¯…r°r±}r²(hh	]r³hj‘j®XPlainr´‡rµ…r¶r·}r¸(hh	]r¹…rºRr»h
j±uba…r¼Rr½h
j”j´j·ubhj‘XStringr¾†r¿…rÀrÁ}rÂ(hh	]rÃ(hj‘j¾XInterpolrćrÅ…rƁrÇ}rÈ(hh	]rÉ…rÊRrËh
jÁubhj‘j¾X	DelimeterṙrÍ…r΁rÏ}rÐ(hh	]rÑ…rÒRrÓh
jÁubhj‘j¾jž‡rÔ…rՁrÖ}r×(hh	]rØ…rÙRrÚh
jÁubhj‘j¾j‡rÛ…r܁rÝ}rÞ(hh	]rß…ràRráh
jÁubhj‘j¾h#‡râ…rãrä}rå(hh	]ræ…rçRrèh
jÁubhj‘j¾ja‡ré…rêrë}rì(hh	]rí…rîRrïh
jÁubhj‘j¾XBacktickrð‡rñ…ròró}rô(hh	]rõ…röRr÷h
jÁubhj‘j¾hi‡rø…rùrú}rû(hh	]rü…rýRrþh
jÁubhj‘j¾XRegexrÿ‡r…rr}r(hh	]r…rRrh
jÁubhj‘j¾XMomentr‡r…r	r
}r(hh	]r…r
Rrh
jÁubhj‘j¾XBooleanr‡r…rr}r(hh	]r…rRrh
jÁubhj‘j¾X	Characterr‡r…rr}r(hh	]r…rRrh
jÁubhj‘j¾X	Delimiterr‡r …r!r"}r#(hh	]r$…r%Rr&h
jÁubhj‘j¾h3‡r'…r(r)}r*(hh	]r+…r,Rr-h
jÁubhj‘j¾h‰‡r.…r/r0}r1(hh	]r2…r3Rr4h
jÁubhj‘j¾XAffixr5‡r6…r7r8}r9(hh	]r:…r;Rr<h
jÁubhj‘j¾XHeredocr=‡r>…r?r@}rA(hh	]rB…rCRrDh
jÁubhj‘j¾XDoublerE‡rF…rGrH}rI(hh	]rJ…rKRrLh
jÁubhj‘j¾XInterprM‡rN…rOrP}rQ(hh	]rR…rSRrTh
jÁubhj‘j¾XAtomrU‡rV…rWrX}rY(hh	]rZ…r[Rr\h
jÁube…r]Rr^h
j”j5j8jðjójžjÖjj"h3j)jEjHhijúj=j@jÄjÇjajëjÿjh#jäjjÝjjjj
jMjPjjjÌjÏjUjXh‰j0ubhj‘XNumberr_†r`…rarb}rc(hh	]rd(hj‘j_XFloatre‡rf…rgrh}ri(hh	]rj…rkRrlh
jbubhj‘j_XDecrm‡rn…rorp}rq(hh	]rr…rsRrth
jbubhj‘j_XRadixru‡rv…rwrx}ry(hh	]rz…r{Rr|h
jbubhj‘j_XOctr}‡r~…rr€}r(hh	]r‚…rƒRr„h
jbubhj‘j_XBinr…‡r†…r‡rˆ}r‰(hh	]rŠ…r‹RrŒh
jbubhj‘j_hü‡r…rށr}r(hh	]r‘…r’Rr“h
jbubhj‘j_XHexr”‡r•…r–r—}r˜(hh	]r™…ršRr›h
jbubhj‘j_XIntegerrœ‡r…ržrŸ}r (hh	]r¡h(j‘j_jœXLongr¢tr£…r¤r¥}r¦(hh	]r§…r¨Rr©h
jŸuba…rªRr«h
jbj¢j¥ubhj‘j_XDecimalr¬‡r­…r®r¯}r°(hh	]r±…r²Rr³h
jbube…r´Rrµh
j”j…jˆjejhj”j—jœjŸj}j€jujxhüjj¬j¯jmjpube…r¶Rr·h
hfj¾jÁj_jbj¦j©j®j±jaj™jžj¡ubhXGenericr¸…r¹…rºr»}r¼(hh	]r½(hj¸XErrorr¾†r¿…rÀrÁ}rÂ(hh	]rÃ…rÄRrÅh
j»ubhj¸X
SubheadingrƆrÇ…rȁrÉ}rÊ(hh	]rË…rÌRrÍh
j»ubhj¸X	TracebackrΆrÏ…rЁrÑ}rÒ(hh	]rÓ…rÔRrÕh
j»ubhj¸XOutputrÖ†r×…r؁rÙ}rÚ(hh	]rÛ…rÜRrÝh
j»ubhj¸XPromptrÞ†rß…ràrá}râ(hh	]rã…räRråh
j»ubhj¸XDeletedræ†rç…rèré}rê(hh	]rë…rìRríh
j»ubhj¸XInsertedrî†rï…rðrñ}rò(hh	]ró…rôRrõh
j»ubhj¸XHeadingrö†r÷…rørù}rú(hh	]rû…rüRrýh
j»ubhj¸XStrongrþ†rÿ…rr}r(hh	]r…rRrh
j»ubhj¸XEmphr†r…rr	}r
(hh	]r…rRr
h
j»ube…rRrh
hfjæjéjj	j¾jÁjöjùjîjñjÖjÙjÞjájþjjÆjÉjÎjÑubhj¾…r…rr}r(hh	]r…rRrh
hfubhXKeywordr…r…rr}r(hh	]r(hjh†r…rr}r (hh	]r!…r"Rr#h
jubhjj†r$…r%r&}r'(hh	]r(…r)Rr*h
jubhjjO†r+…r,r-}r.(hh	]r/…r0Rr1h
jubhjXPreProcr2†r3…r4r5}r6(hh	]r7…r8Rr9h
jubhjXControlr:†r;…r<r=}r>(hh	]r?…r@RrAh
jubhjj‡†rB…rCrD}rE(hh	]rF…rGRrHh
jubhjj†rI…rJrK}rL(hh	]rM…rNRrOh
jubhjj+†rP…rQrR}rS(hh	]rT…rURrVh
jubhjXDeclarationrW†rX…rYrZ}r[(hh	]r\…r]Rr^h
jubhjXReservedr_†r`…rarb}rc(hh	]rd…reRrfh
jube…rgRrhh
hfj‡jDjWjZjjKj+jRj_jbjOj-j:j=jj&j2j5hjubhja…ri…rjrk}rl(hh	]rm…rnRroh
hfubhXTextrp…rq…rrrs}rt(hh	]ru(hjpXRootrv†rw…rxry}rz(hh	]r{…r|Rr}h
jsubhjpj†r~…rr€}r(hh	]r‚…rƒRr„h
jsubhjpXRagr…†r†…r‡rˆ}r‰(hh	]rŠ…r‹RrŒh
jsubhjpX
Whitespacer†rŽ…rr}r‘(hh	]r’…r“Rr”h
jsubhjpXBeerr•†r–…r—r˜}r™(hh	]rš…r›Rrœh
jsubhjpXPunctuationr†rž…rŸr }r¡(hh	]r¢…r£Rr¤h
jsube…r¥Rr¦h
hfjjjj€jj jvjyj•j˜j…jˆubhhj…r§…r¨r©}rª(hh	]r«hjX	Indicatorr¬†r­…r®r¯}r°(hh	]r±…r²Rr³h
j©uba…r´Rrµh
hfj¬j¯ube…r¶Rr·jpjshihlj¾jjajkjjh‰hŒj‘j”jj©hqhthhj¸j»XTokenr¸hfj¾jÁj_jbubhhhChFhhhShVh#h&h[h^h;h>h+h.h3h6hhhKhNububX<?phpr¹†rºjsX

r»†r¼hÐX$disapproval_ಠ_ಠ_of_phpr½†r¾jsX r¿†rÀhtX=rÁ†rÂjsj¿†rÃjäX
'unicode var'rĆrÅj©X;rƆrÇjsX

rȆrÉhÐX$testrʆrËjsj¿†rÌhtjÁ†rÍjsj¿†rÎjXfunctionrφrÐj©X(rцrÒhÐX$arÓ†rÔj©X)rÕ†rÖjsj¿†r×j©X{r؆rÙjsj¿†rÚhÐX$lambdarÛ†rÜjsj¿†rÝhtjÁ†rÞjsj¿†rßjŸX1rà†ráj©jƆrâjsj¿†rãj©X}rä†råjsX

ræ†rçj)XP/**
 *  Zip class file
 *
 *  @package     fnord.bb
 *  @subpackage  archive
 */rè†réjsX

rê†rëh&X// Unlock?
rì†ríjXifrî†rïj©jцrðhtX!rñ†ròjEXdefinedró†rôj©jцrõjäX'UNLOCK'rö†r÷j©jÕ†røjsj¿†rùhtX||rú†rûjsj¿†rühtjñ†rýjdXUNLOCKrþ†rÿj©jÕ†rjsX
  r†rjXdier†rj©X();r†rjsX
  
r†rh&X!// Load the parent archive class
r	†r
jXrequire_oncer†rj©jцr
jdX	ROOT_PATHr†rhtX.r†rjäX'/classes/archive.class.php'r†rj©X);r†rjsX

r†rjXclassr†rjsj¿†rh¹XZip\Zippಠ_ಠ_r†rjsj¿†rj©j؆rjsX

r†r j©jä†r!jsX

r"†r#j)XZ/**
 *  Zip class
 *
 *  @author      Manni <manni@fnord.name>
 *  @copyright   Copyright (c) 2006, Manni
 *  @version     1.0
 *  @link        http://www.pkware.com/business_and_developers/developer/popups/appnote.txt
 *  @link        http://mannithedark.is-a-geek.net/
 *  @since       1.0
 *  @package     fnord.bb
 *  @subpackage  archive
 */r$†r%jsX
r&†r'jXclassr(†r)jsj¿†r*h¹XZipr+†r,jsj¿†r-jXextendsr.†r/jsj¿†r0jdXArchiver1†r2jsj¿†r3j©j؆r4jsX
 r5†r6j)Xa/**
  *  Outputs the zip file
  *
  *  This function creates the zip file with the dirs and files given.
  *  If the optional parameter $file is given, the zip file is will be
  *  saved at that location. Otherwise the function returns the zip file's content.
  *
  *  @access                   public
  *
  *  @link                     http://www.pkware.com/business_and_developers/developer/popups/appnote.txt
  *  @param  string $filename  The path where the zip file will be saved
  *
  *  @return bool|string       Returns either true if the fil is sucessfully created or the content of the zip file
  */r7†r8jsX
  r9†r:jXfunctionr;†r<jsj¿†r=jtXoutr>†r?j©jцr@hÐX	$filenamerA†rBjsj¿†rChtjÁ†rDjsj¿†rEjXfalserF†rGj©jÕ†rHjsj¿†rIj©j؆rJjsX
    rK†rLh&X// Empty output
rM†rNjsX    rO†rPhÐX
$file_datarQ†rRjsj¿†rShtjÁ†rTjsj¿†rUjXarrayrV†rWj©X();rX†rYjsj¿†rZh&X// Data of the file part
r[†r\jsX    r]†r^hÐX$cd_datar_†r`jsX   ra†rbhtjÁ†rcjsj¿†rdjXarrayre†rfj©X();rg†rhjsj¿†rih&X!// Data of the central directory
rj†rkjsX
    rl†rmh&X&// Sort dirs and files by path length
rn†rojsX    rp†rqjEXuksortrr†rsj©jцrthÐX$thisru†rvhtX->rw†rxhÿXdirsry†rzj©X,r{†r|jsX  r}†r~jäX'sort_by_length'r†r€j©X);r†r‚jsX
    rƒ†r„jEXuksortr…†r†j©jцr‡hÐX$thisrˆ†r‰htX->rІr‹hÿXfilesrŒ†rj©j{†rŽjsj¿†rjäX'sort_by_length'r†r‘j©X);r’†r“jsX

    r”†r•h&X// Handle dirs
r–†r—jsX    r˜†r™jXforeachrš†r›j©jцrœhÐX$thisr†ržhtX->rŸ†r hÿXdirsr¡†r¢jsj¿†r£jXasr¤†r¥jsj¿†r¦hÐX$dirr§†r¨j©jÕ†r©jsj¿†rªj©j؆r«jsX
      r¬†r­hÐX$dirr®†r¯jsj¿†r°htX.=r±†r²jsj¿†r³jäX'/'r´†rµj©jƆr¶jsX
      r·†r¸h&X
// File part
r¹†rºjsX
      r»†r¼h&X// Reset dir data
r½†r¾jsX      r¿†rÀhÐX	$dir_datarÁ†rÂjsj¿†rÃhtjÁ†rÄjsj¿†rÅjäX''rƆrÇj©jƆrÈjsX

      rɆrÊh&X// Local file header
rˆrÌjsX      r͆rÎhÐX	$dir_datarφrÐjsj¿†rÑhtX.=rÒ†rÓjsj¿†rÔjHX"rÕ†rÖjúX\x50r׆rØjúX\x4brÙ†rÚjúX\x03rÛ†rÜjúX\x04r݆rÞjHjÕ†rßj©jƆràjsX      rá†râh&X// Local file header signature
rã†räjsX      rå†ræhÐX	$dir_datarç†rèjsj¿†réhtX.=rê†rëjsj¿†rìjEXpackrí†rîj©jцrïjHjÕ†rðjHXvrñ†ròjHjÕ†rój©j{†rôjsj¿†rõjŸX10rö†r÷j©X);rø†rùjsX           rú†rûh&X// Version needed to extract
rü†rýjsX      rþ†rÿhÐX	$dir_datar†rjsj¿†rhtX.=r†rjsj¿†rjEXpackr†rj©jцrjHjÕ†r	jHjñ†r
jHjÕ†rj©j{†rjsj¿†r
jŸX0r†rj©X);r†rjsX            r†rh&X// General purpose bit flag
r†rjsX      r†rhÐX	$dir_datar†rjsj¿†rhtX.=r†rjsj¿†rjEXpackr†rj©jцr jHjÕ†r!jHjñ†r"jHjÕ†r#j©j{†r$jsj¿†r%jŸj†r&j©X);r'†r(jsX            r)†r*h&X// Compression method
r+†r,jsX      r-†r.hÐX	$dir_datar/†r0jsj¿†r1htX.=r2†r3jsj¿†r4jEXpackr5†r6j©jцr7jHjÕ†r8jHjñ†r9jHjÕ†r:j©j{†r;jsj¿†r<jŸj†r=j©X);r>†r?jsX            r@†rAh&X// Last mod file time
rB†rCjsX      rD†rEhÐX	$dir_datarF†rGjsj¿†rHhtX.=rI†rJjsj¿†rKjEXpackrL†rMj©jцrNjHjÕ†rOjHjñ†rPjHjÕ†rQj©j{†rRjsj¿†rSjŸj†rTj©X);rU†rVjsX            rW†rXh&X// Last mod file date
rY†rZjsX      r[†r\hÐX	$dir_datar]†r^jsj¿†r_htX.=r`†rajsj¿†rbjEXpackrc†rdj©jцrejHjÕ†rfjHXVrg†rhjHjÕ†rij©j{†rjjsj¿†rkjŸj†rlj©X);rm†rnjsX            ro†rph&X
// crc-32
rq†rrjsX      rs†rthÐX	$dir_dataru†rvjsj¿†rwhtX.=rx†ryjsj¿†rzjEXpackr{†r|j©jцr}jHjÕ†r~jHjg†rjHjÕ†r€j©j{†rjsj¿†r‚jŸj†rƒj©X);r„†r…jsX            r††r‡h&X// Compressed size
rˆ†r‰jsX      rІr‹hÐX	$dir_datarŒ†rjsj¿†rŽhtX.=r†rjsj¿†r‘jEXpackr’†r“j©jцr”jHjÕ†r•jHjg†r–jHjÕ†r—j©j{†r˜jsj¿†r™jŸj†ršj©X);r›†rœjsX            r†ržh&X// Uncompressed size
rŸ†r jsX      r¡†r¢hÐX	$dir_datar£†r¤jsj¿†r¥htX.=r¦†r§jsj¿†r¨jEXpackr©†rªj©jцr«jHjÕ†r¬jHjñ†r­jHjÕ†r®j©j{†r¯jsj¿†r°jEXstrlenr±†r²j©jцr³hÐX$dirr´†rµj©X));r¶†r·jsj¿†r¸h&X// File name length
r¹†rºjsX      r»†r¼hÐX	$dir_datar½†r¾jsj¿†r¿htX.=rÀ†rÁjsj¿†rÂjEXpackrÆrÄj©jцrÅjHjÕ†rÆjHjñ†rÇjHjÕ†rÈj©j{†rÉjsj¿†rÊjŸj†rËj©X);r̆rÍjsX            rΆrÏh&X// Extra field length
rІrÑjsX
      rÒ†rÓhÐX	$dir_datarÔ†rÕjsj¿†rÖhtX.=r׆rØjsj¿†rÙhÐX$dirrÚ†rÛj©jƆrÜjsX                    r݆rÞh&X
// File name
r߆ràjsX      rá†râhÐX	$dir_datarã†räjsj¿†råhtX.=ræ†rçjsj¿†rèjäX''ré†rêj©jƆrëjsX                      rì†ríh&X// Extra field (is empty)
rî†rïjsX
      rð†rñh&X
// File data
rò†rójsX      rô†rõhÐX	$dir_datarö†r÷jsj¿†røhtX.=rù†rújsj¿†rûjäX''rü†rýj©jƆrþjsX                      rÿ†rh&X// Dirs have no file data
r†rjsX
      r†rh&X// Data descriptor
r†rjsX      r†rhÐX	$dir_datar	†r
jsj¿†rhtX.=r†r
jsj¿†rjEXpackr†rj©jцrjHjÕ†rjHjg†rjHjÕ†rj©j{†rjsj¿†rjŸj†rj©X);r†rjsX            r†rh&X
// crc-32
r†rjsX      r†rhÐX	$dir_datar †r!jsj¿†r"htX.=r#†r$jsj¿†r%jEXpackr&†r'j©jцr(jHjÕ†r)jHjg†r*jHjÕ†r+j©j{†r,jsj¿†r-jŸj†r.j©X);r/†r0jsX            r1†r2h&X// Compressed size
r3†r4jsX      r5†r6hÐX	$dir_datar7†r8jsj¿†r9htX.=r:†r;jsj¿†r<jEXpackr=†r>j©jцr?jHjÕ†r@jHjg†rAjHjÕ†rBj©j{†rCjsj¿†rDjŸj†rEj©X);rF†rGjsX            rH†rIh&X// Uncompressed size
rJ†rKjsX
      rL†rMh&X// Save current offset
rN†rOjsX      rP†rQhÐX$offsetrR†rSjsj¿†rThtjÁ†rUjsj¿†rVjEXstrlenrW†rXj©jцrYjEXimploderZ†r[j©jцr\jäX''r]†r^j©j{†r_jsj¿†r`hÐX
$file_datara†rbj©X));rc†rdjsX

      re†rfh&X$// Append dir data to the file part
rg†rhjsX      ri†rjhÐX
$file_datark†rlj©X[]rm†rnjsj¿†rohtjÁ†rpjsj¿†rqhÐX	$dir_datarr†rsj©jƆrtjsX

      ru†rvh&X// Central directory
rw†rxjsX
      ry†rzh&X// Reset dir data
r{†r|jsX      r}†r~hÐX	$dir_datar†r€jsj¿†rhtjÁ†r‚jsj¿†rƒjäX''r„†r…j©jƆr†jsX

      r‡†rˆh&X// File header
r‰†rŠjsX      r‹†rŒhÐX	$dir_datar†rŽjsj¿†rhtX.=r†r‘jsj¿†r’jHjÕ†r“júX\x50r”†r•júX\x4br–†r—júX\x01r˜†r™júX\x02rš†r›jHjÕ†rœj©jƆrjsX      rž†rŸh&X// Local file header signature
r †r¡jsX      r¢†r£hÐX	$dir_datar¤†r¥jsj¿†r¦htX.=r§†r¨jsj¿†r©jEXpackrª†r«j©jцr¬jHjÕ†r­jHjñ†r®jHjÕ†r¯j©j{†r°jsj¿†r±jŸj†r²j©X);r³†r´jsX            rµ†r¶h&X// Version made by
r·†r¸jsX      r¹†rºhÐX	$dir_datar»†r¼jsj¿†r½htX.=r¾†r¿jsj¿†rÀjEXpackrÁ†rÂj©jцrÃjHjÕ†rÄjHjñ†rÅjHjÕ†rÆj©j{†rÇjsj¿†rÈjŸX10rɆrÊj©X);rˆrÌjsX           r͆rÎh&X// Version needed to extract
rφrÐjsX      rцrÒhÐX	$dir_datarÓ†rÔjsj¿†rÕhtX.=rÖ†r×jsj¿†rØjEXpackrÙ†rÚj©jцrÛjHjÕ†rÜjHjñ†rÝjHjÕ†rÞj©j{†rßjsj¿†ràjŸj†ráj©X);râ†rãjsX            rä†råh&X// General purpose bit flag
ræ†rçjsX      rè†réhÐX	$dir_datarê†rëjsj¿†rìhtX.=rí†rîjsj¿†rïjEXpackrð†rñj©jцròjHjÕ†rójHjñ†rôjHjÕ†rõj©j{†röjsj¿†r÷jŸj†røj©X);rù†rújsX            rû†rüh&X// Compression method
rý†rþjsX      rÿ†rhÐX	$dir_datar†rjsj¿†rhtX.=r†rjsj¿†rjEXpackr†rj©jцr	jHjÕ†r
jHjñ†rjHjÕ†rj©j{†r
jsj¿†rjŸj†rj©X);r†rjsX            r†rh&X// Last mod file time
r†rjsX      r†rhÐX	$dir_datar†rjsj¿†rhtX.=r†rjsj¿†rjEXpackr†rj©jцr jHjÕ†r!jHjñ†r"jHjÕ†r#j©j{†r$jsj¿†r%jŸj†r&j©X);r'†r(jsX            r)†r*h&X// Last mod file date
r+†r,jsX      r-†r.hÐX	$dir_datar/†r0jsj¿†r1htX.=r2†r3jsj¿†r4jEXpackr5†r6j©jцr7jHjÕ†r8jHjg†r9jHjÕ†r:j©j{†r;jsj¿†r<jŸj†r=j©X);r>†r?jsX            r@†rAh&X
// crc-32
rB†rCjsX      rD†rEhÐX	$dir_datarF†rGjsj¿†rHhtX.=rI†rJjsj¿†rKjEXpackrL†rMj©jцrNjHjÕ†rOjHjg†rPjHjÕ†rQj©j{†rRjsj¿†rSjŸj†rTj©X);rU†rVjsX            rW†rXh&X// Compressed size
rY†rZjsX      r[†r\hÐX	$dir_datar]†r^jsj¿†r_htX.=r`†rajsj¿†rbjEXpackrc†rdj©jцrejHjÕ†rfjHjg†rgjHjÕ†rhj©j{†rijsj¿†rjjŸj†rkj©X);rl†rmjsX            rn†roh&X// Uncompressed size
rp†rqjsX      rr†rshÐX	$dir_datart†rujsj¿†rvhtX.=rw†rxjsj¿†ryjEXpackrz†r{j©jцr|jHjÕ†r}jHjñ†r~jHjÕ†rj©j{†r€jsj¿†rjEXstrlenr‚†rƒj©jцr„hÐX$dirr…†r†j©X));r‡†rˆjsj¿†r‰h&X// File name length
rІr‹jsX      rŒ†rhÐX	$dir_datarކrjsj¿†rhtX.=r‘†r’jsj¿†r“jEXpackr”†r•j©jцr–jHjÕ†r—jHjñ†r˜jHjÕ†r™j©j{†ršjsj¿†r›jŸj†rœj©X);r†ržjsX            rŸ†r h&X// Extra field length
r¡†r¢jsX      r£†r¤hÐX	$dir_datar¥†r¦jsj¿†r§htX.=r¨†r©jsj¿†rªjEXpackr«†r¬j©jцr­jHjÕ†r®jHjñ†r¯jHjÕ†r°j©j{†r±jsj¿†r²jŸj†r³j©X);r´†rµjsX            r¶†r·h&X// File comment length
r¸†r¹jsX      rº†r»hÐX	$dir_datar¼†r½jsj¿†r¾htX.=r¿†rÀjsj¿†rÁjEXpackr†rÃj©jцrÄjHjÕ†rÅjHjñ†rÆjHjÕ†rÇj©j{†rÈjsj¿†rÉjŸj†rÊj©X);rˆrÌjsX            r͆rÎh&X// Disk number start
rφrÐjsX      rцrÒhÐX	$dir_datarÓ†rÔjsj¿†rÕhtX.=rÖ†r×jsj¿†rØjEXpackrÙ†rÚj©jцrÛjHjÕ†rÜjHjñ†rÝjHjÕ†rÞj©j{†rßjsj¿†ràjŸj†ráj©X);râ†rãjsX            rä†råh&X// Internal file attributes
ræ†rçjsX      rè†réhÐX	$dir_datarê†rëjsj¿†rìhtX.=rí†rîjsj¿†rïjEXpackrð†rñj©jцròjHjÕ†rójHjg†rôjHjÕ†rõj©j{†röjsj¿†r÷jŸX16rø†rùj©X);rú†rûjsX           rü†rýh&X// External file attributes
rþ†rÿjsX      r†rhÐX	$dir_datar†rjsj¿†rhtX.=r†rjsj¿†rjEXpackr†r	j©jцr
jHjÕ†rjHjg†rjHjÕ†r
j©j{†rjsj¿†rhÐX$offsetr†rj©X);r†rjsX      r†rh&X#// Relative offset of local header
r†rjsX
      r†rhÐX	$dir_datar†rjsj¿†rhtX.=r†rjsj¿†rhÐX$dirr †r!j©jƆr"jsX                    r#†r$h&X
// File name
r%†r&jsX      r'†r(hÐX	$dir_datar)†r*jsj¿†r+htX.=r,†r-jsj¿†r.jäX''r/†r0j©jƆr1jsX                      r2†r3h&X// Extra field (is empty)
r4†r5jsX      r6†r7hÐX	$dir_datar8†r9jsj¿†r:htX.=r;†r<jsj¿†r=jäX''r>†r?j©jƆr@jsX                      rA†rBh&X// File comment (is empty)
rC†rDjsX
      rE†rFhFXÚ/*
      // Data descriptor
      $dir_data .= pack("V", 0);            // crc-32
      $dir_data .= pack("V", 0);            // Compressed size
      $dir_data .= pack("V", 0);            // Uncompressed size
      */rG†rHjsX
      
      rI†rJh&X1// Append dir data to the central directory data
rK†rLjsX      rM†rNhÐX$cd_datarO†rPj©X[]rQ†rRjsj¿†rShtjÁ†rTjsj¿†rUhÐX	$dir_datarV†rWj©jƆrXjsX
    rY†rZj©jä†r[jsX

    r\†r]h&X// Handle files
r^†r_jsX    r`†rajXforeachrb†rcj©jцrdhÐX$thisre†rfhtX->rg†rhhÿXfilesri†rjjsj¿†rkjXasrl†rmjsj¿†rnhÐX$namero†rpjsj¿†rqhtX=>rr†rsjsj¿†rthÐX$fileru†rvj©jÕ†rwjsj¿†rxj©j؆ryjsX
      rz†r{h&X// Get values
r|†r}jsX      r~†rhÐX$contentr€†rjsj¿†r‚htjÁ†rƒjsj¿†r„hÐX$filer…†r†j©X[r‡†rˆjŸj†r‰j©X];rІr‹jsX
    
      rŒ†rh&X
// File part
rކrjsX
      r†r‘h&X// Reset file data
r’†r“jsX      r”†r•hÐX$fdr–†r—jsj¿†r˜htjÁ†r™jsj¿†ršjäX''r›†rœj©jƆrjsX
      
      rž†rŸh&X // Detect possible compressions
r †r¡jsX      r¢†r£h&X// Use deflate
r¤†r¥jsX      r¦†r§jXifr¨†r©j©jцrªjEXfunction_existsr«†r¬j©jцr­jäX'gzdeflate'r®†r¯j©X))r°†r±jsj¿†r²j©j؆r³jsX	
        r´†rµhÐX$methodr¶†r·jsj¿†r¸htjÁ†r¹jsj¿†rºjŸX8r»†r¼j©jƆr½jsX


        r¾†r¿h&X// Compress file content
rÀ†rÁjsX        r†rÃhÐX$compressed_datarĆrÅjsj¿†rÆhtjÁ†rÇjsj¿†rÈjEX	gzdeflaterɆrÊj©jцrËhÐX$contentr̆rÍj©X);rΆrÏjsX

      rІrÑh&X
// Use bzip2
rÒ†rÓjsX      rÔ†rÕj©jä†rÖjsj¿†r×jXelseifr؆rÙj©jцrÚjEXfunction_existsrÛ†rÜj©jцrÝjäX'bzcompress'rÞ†rßj©X))rà†rájsj¿†râj©j؆rãjsX	
        rä†råhÐX$methodræ†rçjsj¿†rèhtjÁ†réjsj¿†rêjŸX12rë†rìj©jƆríjsX


        rî†rïh&X// Compress file content
rð†rñjsX        rò†róhÐX$compressed_datarô†rõjsj¿†röhtjÁ†r÷jsj¿†røjEX
bzcompressrù†rúj©jцrûhÐX$contentrü†rýj©X);rþ†rÿjsX

      r	†r	h&X// No compression
r	†r	jsX      r	†r	j©jä†r	jsj¿†r	jXelser	†r		jsj¿†r
	j©j؆r	jsX	
        r	†r
	hÐX$methodr	†r	jsj¿†r	htjÁ†r	jsj¿†r	jŸj†r	j©jƆr	jsX


        r	†r	h&X"// Do not compress the content :P
r	†r	jsX        r	†r	hÐX$compressed_datar	†r	jsj¿†r	htjÁ†r	jsj¿†r	hÐX$contentr 	†r!	j©jƆr"	jsX
      r#	†r$	j©jä†r%	jsX

      r&	†r'	h&X// Local file header
r(	†r)	jsX      r*	†r+	hÐX$fdr,	†r-	jsj¿†r.	htX.=r/	†r0	jsj¿†r1	jHjÕ†r2	júX\x50r3	†r4	júX\x4br5	†r6	júX\x03r7	†r8	júX\x04r9	†r:	jHjÕ†r;	j©jƆr<	jsX                  r=	†r>	h&X// Local file header signature
r?	†r@	jsX      rA	†rB	hÐX$fdrC	†rD	jsj¿†rE	htX.=rF	†rG	jsj¿†rH	jEXpackrI	†rJ	j©jцrK	jHjÕ†rL	jHjñ†rM	jHjÕ†rN	j©j{†rO	jsj¿†rP	jŸX20rQ	†rR	j©X);rS	†rT	jsX                       rU	†rV	h&X// Version needed to extract
rW	†rX	jsX      rY	†rZ	hÐX$fdr[	†r\	jsj¿†r]	htX.=r^	†r_	jsj¿†r`	jEXpackra	†rb	j©jцrc	jHjÕ†rd	jHjñ†re	jHjÕ†rf	j©j{†rg	jsj¿†rh	jŸj†ri	j©X);rj	†rk	jsX                        rl	†rm	h&X// General purpose bit flag
rn	†ro	jsX      rp	†rq	hÐX$fdrr	†rs	jsj¿†rt	htX.=ru	†rv	jsj¿†rw	jEXpackrx	†ry	j©jцrz	jHjÕ†r{	jHjñ†r|	jHjÕ†r}	j©j{†r~	jsj¿†r	hÐX$methodr€	†r	j©X);r‚	†rƒ	jsX                  r„	†r…	h&X// Compression method
r†	†r‡	jsX      rˆ	†r‰	hÐX$fdrŠ	†r‹	jsj¿†rŒ	htX.=r	†rŽ	jsj¿†r	jEXpackr	†r‘	j©jцr’	jHjÕ†r“	jHjñ†r”	jHjÕ†r•	j©j{†r–	jsj¿†r—	jŸj†r˜	j©X);r™	†rš	jsX                        r›	†rœ	h&X// Last mod file time
r	†rž	jsX      rŸ	†r 	hÐX$fdr¡	†r¢	jsj¿†r£	htX.=r¤	†r¥	jsj¿†r¦	jEXpackr§	†r¨	j©jцr©	jHjÕ†rª	jHjñ†r«	jHjÕ†r¬	j©j{†r­	jsj¿†r®	jŸj†r¯	j©X);r°	†r±	jsX                        r²	†r³	h&X// Last mod file date
r´	†rµ	e(jsX      r¶	†r·	hÐX$fdr¸	†r¹	jsj¿†rº	htX.=r»	†r¼	jsj¿†r½	jEXpackr¾	†r¿	j©jцrÀ	jHjÕ†rÁ	jHjg†rÂ	jHjÕ†rÃ	j©j{†rÄ	jsj¿†rÅ	jEXcrc32rÆ	†rÇ	j©jцrÈ	hÐX$contentrÉ	†rÊ	j©X));rË	†rÌ	jsX
          rÍ	†rÎ	h&X
// crc-32
rÏ	†rÐ	jsX      rÑ	†rÒ	hÐX$fdrÓ	†rÔ	jsj¿†rÕ	htX.=rÖ	†r×	jsj¿†rØ	jEXpackrÙ	†rÚ	j©jцrÛ	jHjÕ†rÜ	jHjg†rÝ	jHjÕ†rÞ	j©j{†rß	jsj¿†rà	jEXstrlenrá	†râ	j©jцrã	hÐX$compressed_datarä	†rå	j©X));ræ	†rç	jsj¿†rè	h&X// Compressed size
ré	†rê	jsX      rë	†rì	hÐX$fdrí	†rî	jsj¿†rï	htX.=rð	†rñ	jsj¿†rò	jEXpackró	†rô	j©jцrõ	jHjÕ†rö	jHjg†r÷	jHjÕ†rø	j©j{†rù	jsj¿†rú	jEXstrlenrû	†rü	j©jцrý	hÐX$contentrþ	†rÿ	j©X));r
†r
jsX	         r
†r
h&X// Uncompressed size
r
†r
jsX      r
†r
hÐX$fdr
†r	
jsj¿†r

htX.=r
†r
jsj¿†r
jEXpackr
†r
j©jцr
jHjÕ†r
jHjñ†r
jHjÕ†r
j©j{†r
jsj¿†r
jEXstrlenr
†r
j©jцr
hÐX$namer
†r
j©X));r
†r
jsX            r
†r
h&X// File name length
r
†r 
jsX      r!
†r"
hÐX$fdr#
†r$
jsj¿†r%
htX.=r&
†r'
jsj¿†r(
jEXpackr)
†r*
j©jцr+
jHjÕ†r,
jHjñ†r-
jHjÕ†r.
j©j{†r/
jsj¿†r0
jŸj†r1
j©X);r2
†r3
jsX                        r4
†r5
h&X// Extra field length
r6
†r7
jsX
      r8
†r9
hÐX$fdr:
†r;
jsj¿†r<
htX.=r=
†r>
jsj¿†r?
hÐX$namer@
†rA
j©jƆrB
jsX                               rC
†rD
h&X
// File name
rE
†rF
jsX      rG
†rH
hÐX$fdrI
†rJ
jsj¿†rK
htX.=rL
†rM
jsj¿†rN
jäX''rO
†rP
j©jƆrQ
jsX"                                  rR
†rS
h&X// Extra field (is empty)
rT
†rU
jsX
      rV
†rW
h&X
// File data
rX
†rY
jsX      rZ
†r[
hÐX$fdr\
†r]
jsj¿†r^
htX.=r_
†r`
jsj¿†ra
hÐX$compressed_datarb
†rc
j©jƆrd
jsX
      
      re
†rf
h&X// Data descriptor
rg
†rh
jsX      ri
†rj
hÐX$fdrk
†rl
jsj¿†rm
htX.=rn
†ro
jsj¿†rp
jEXpackrq
†rr
j©jцrs
jHjÕ†rt
jHjg†ru
jHjÕ†rv
j©j{†rw
jsj¿†rx
jEXcrc32ry
†rz
j©jцr{
hÐX$contentr|
†r}
j©X));r~
†r
jsX
          r€
†r
h&X
// crc-32
r‚
†rƒ
jsX      r„
†r…
hÐX$fdr†
†r‡
jsj¿†rˆ
htX.=r‰
†rŠ
jsj¿†r‹
jEXpackrŒ
†r
j©jцrŽ
jHjÕ†r
jHjg†r
jHjÕ†r‘
j©j{†r’
jsj¿†r“
jEXstrlenr”
†r•
j©jцr–
hÐX$compressed_datar—
†r˜
j©X));r™
†rš
jsj¿†r›
h&X// Compressed size
rœ
†r
jsX      rž
†rŸ
hÐX$fdr 
†r¡
jsj¿†r¢
htX.=r£
†r¤
jsj¿†r¥
jEXpackr¦
†r§
j©jцr¨
jHjÕ†r©
jHjg†rª
jHjÕ†r«
j©j{†r¬
jsj¿†r­
jEXstrlenr®
†r¯
j©jцr°
hÐX$contentr±
†r²
j©X));r³
†r´
jsX	         rµ
†r¶
h&X// Uncompressed size
r·
†r¸
jsX
      r¹
†rº
h&X// Save current offset
r»
†r¼
jsX      r½
†r¾
hÐX$offsetr¿
†rÀ
jsj¿†rÁ
htjÁ†rÂ
jsj¿†rÃ
jEXstrlenrÄ
†rÅ
j©jцrÆ
jEXimploderÇ
†rÈ
j©jцrÉ
jäX''rÊ
†rË
j©j{†rÌ
jsj¿†rÍ
hÐX
$file_datarÎ
†rÏ
j©X));rÐ
†rÑ
jsX

      rÒ
†rÓ
h&X%// Append file data to the file part
rÔ
†rÕ
jsX      rÖ
†r×
hÐX
$file_datarØ
†rÙ
j©X[]rÚ
†rÛ
jsj¿†rÜ
htjÁ†rÝ
jsj¿†rÞ
hÐX$fdrß
†rà
j©jƆrá
jsX

      râ
†rã
h&X// Central directory
rä
†rå
jsX
      ræ
†rç
h&X// Reset file data
rè
†ré
jsX      rê
†rë
hÐX$fdrì
†rí
jsj¿†rî
htjÁ†rï
jsj¿†rð
jäX''rñ
†rò
j©jƆró
jsX

      rô
†rõ
h&X// File header
rö
†r÷
jsX      rø
†rù
hÐX$fdrú
†rû
jsj¿†rü
htX.=rý
†rþ
jsj¿†rÿ
jHjÕ†rjúX\x50r†rjúX\x4br†rjúX\x01r†rjúX\x02r†rjHjÕ†r	j©jƆr
jsX                  r†rh&X// Local file header signature
r
†rjsX      r†rhÐX$fdr†rjsj¿†rhtX.=r†rjsj¿†rjEXpackr†rj©jцrjHjÕ†rjHjñ†rjHjÕ†rj©j{†rjsj¿†rjŸj†rj©X);r †r!jsX                        r"†r#h&X// Version made by
r$†r%jsX      r&†r'hÐX$fdr(†r)jsj¿†r*htX.=r+†r,jsj¿†r-jEXpackr.†r/j©jцr0jHjÕ†r1jHjñ†r2jHjÕ†r3j©j{†r4jsj¿†r5jŸX20r6†r7j©X);r8†r9jsX                       r:†r;h&X// Version needed to extract
r<†r=jsX      r>†r?hÐX$fdr@†rAjsj¿†rBhtX.=rC†rDjsj¿†rEjEXpackrF†rGj©jцrHjHjÕ†rIjHjñ†rJjHjÕ†rKj©j{†rLjsj¿†rMjŸj†rNj©X);rO†rPjsX                        rQ†rRh&X// General purpose bit flag
rS†rTjsX      rU†rVhÐX$fdrW†rXjsj¿†rYhtX.=rZ†r[jsj¿†r\jEXpackr]†r^j©jцr_jHjÕ†r`jHjñ†rajHjÕ†rbj©j{†rcjsj¿†rdhÐX$methodre†rfj©X);rg†rhjsX                  ri†rjh&X// Compression method
rk†rljsX      rm†rnhÐX$fdro†rpjsj¿†rqhtX.=rr†rsjsj¿†rtjEXpackru†rvj©jцrwjHjÕ†rxjHjñ†ryjHjÕ†rzj©j{†r{jsj¿†r|jŸj†r}j©X);r~†rjsX                        r€†rh&X// Last mod file time
r‚†rƒjsX      r„†r…hÐX$fdr††r‡jsj¿†rˆhtX.=r‰†rŠjsj¿†r‹jEXpackrŒ†rj©jцrŽjHjÕ†rjHjñ†rjHjÕ†r‘j©j{†r’jsj¿†r“jŸj†r”j©X);r•†r–jsX                        r—†r˜h&X// Last mod file date
r™†ršjsX      r›†rœhÐX$fdr†ržjsj¿†rŸhtX.=r †r¡jsj¿†r¢jEXpackr£†r¤j©jцr¥jHjÕ†r¦jHjg†r§jHjÕ†r¨j©j{†r©jsj¿†rªjEXcrc32r«†r¬j©jцr­hÐX$contentr®†r¯j©X));r°†r±jsX
          r²†r³h&X
// crc-32
r´†rµjsX      r¶†r·hÐX$fdr¸†r¹jsj¿†rºhtX.=r»†r¼jsj¿†r½jEXpackr¾†r¿j©jцrÀjHjÕ†rÁjHjg†rÂjHjÕ†rÃj©j{†rÄjsj¿†rÅjEXstrlenrƆrÇj©jцrÈhÐX$compressed_datarɆrÊj©X));rˆrÌjsj¿†rÍh&X// Compressed size
rΆrÏjsX      rІrÑhÐX$fdrÒ†rÓjsj¿†rÔhtX.=rÕ†rÖjsj¿†r×jEXpackr؆rÙj©jцrÚjHjÕ†rÛjHjg†rÜjHjÕ†rÝj©j{†rÞjsj¿†rßjEXstrlenrà†ráj©jцrâhÐX$contentrã†räj©X));rå†ræjsX	         rç†rèh&X// Uncompressed size
ré†rêjsX      rë†rìhÐX$fdrí†rîjsj¿†rïhtX.=rð†rñjsj¿†ròjEXpackró†rôj©jцrõjHjÕ†röjHjñ†r÷jHjÕ†røj©j{†rùjsj¿†rújEXstrlenrû†rüj©jцrýhÐX$namerþ†rÿj©X));r†rjsX            r†rh&X// File name length
r†rjsX      r†rhÐX$fdr†r	jsj¿†r
htX.=r†rjsj¿†r
jEXpackr†rj©jцrjHjÕ†rjHjñ†rjHjÕ†rj©j{†rjsj¿†rjŸj†rj©X);r†rjsX                        r†rh&X// Extra field length
r†rjsX      r†rhÐX$fdr†r jsj¿†r!htX.=r"†r#jsj¿†r$jEXpackr%†r&j©jцr'jHjÕ†r(jHjñ†r)jHjÕ†r*j©j{†r+jsj¿†r,jŸj†r-j©X);r.†r/jsX                        r0†r1h&X// File comment length
r2†r3jsX      r4†r5hÐX$fdr6†r7jsj¿†r8htX.=r9†r:jsj¿†r;jEXpackr<†r=j©jцr>jHjÕ†r?jHjñ†r@jHjÕ†rAj©j{†rBjsj¿†rCjŸj†rDj©X);rE†rFjsX                        rG†rHh&X// Disk number start
rI†rJjsX      rK†rLhÐX$fdrM†rNjsj¿†rOhtX.=rP†rQjsj¿†rRjEXpackrS†rTj©jцrUjHjÕ†rVjHjñ†rWjHjÕ†rXj©j{†rYjsj¿†rZjŸj†r[j©X);r\†r]jsX                        r^†r_h&X// Internal file attributes
r`†rajsX      rb†rchÐX$fdrd†rejsj¿†rfhtX.=rg†rhjsj¿†rijEXpackrj†rkj©jцrljHjÕ†rmjHjg†rnjHjÕ†roj©j{†rpjsj¿†rqjŸX32rr†rsj©X);rt†rujsX                       rv†rwh&X// External file attributes
rx†ryjsX      rz†r{hÐX$fdr|†r}jsj¿†r~htX.=r†r€jsj¿†rjEXpackr‚†rƒj©jцr„jHjÕ†r…jHjg†r†jHjÕ†r‡j©j{†rˆjsj¿†r‰hÐX$offsetrŠ†r‹j©X);rŒ†rjsX                  rŽ†rh&X#// Relative offset of local header
r†r‘jsX
      r’†r“hÐX$fdr”†r•jsj¿†r–htX.=r—†r˜jsj¿†r™hÐX$namerš†r›j©jƆrœjsX                               r†ržh&X
// File name
rŸ†r jsX      r¡†r¢hÐX$fdr£†r¤jsj¿†r¥htX.=r¦†r§jsj¿†r¨jäX''r©†rªj©jƆr«jsX"                                  r¬†r­h&X// Extra field (is empty)
r®†r¯jsX      r°†r±hÐX$fdr²†r³jsj¿†r´htX.=rµ†r¶jsj¿†r·jäX''r¸†r¹j©jƆrºjsX"                                  r»†r¼h&X// File comment (is empty)
r½†r¾jsX
      r¿†rÀhFXì/*
      // Data descriptor
      $fd .= pack("V", crc32($content));          // crc-32
      $fd .= pack("V", strlen($compressed_data)); // Compressed size
      $fd .= pack("V", strlen($content));         // Uncompressed size
      */rÁ†rÂjsX

      rÃ†rÄh&X2// Append file data to the central directory data
rÅ†rÆjsX      rÇ†rÈhÐX$cd_datarÉ†rÊj©X[]rË†rÌjsj¿†rÍhtjÁ†rÎjsj¿†rÏhÐX$fdrÐ†rÑj©jƆrÒjsX
    rÓ†rÔj©jä†rÕjsX

    rÖ†r×h&X// Digital signature
rØ†rÙjsX    rÚ†rÛhÐX$digital_signaturerÜ†rÝjsj¿†rÞhtjÁ†rßjsj¿†ràjäX''rá†râj©jƆrãjsX
    rä†råhÐX$digital_signatureræ†rçjsj¿†rèhtX.=ré†rêjsj¿†rëjHjÕ†rìjúX\x50rí†rîjúX\x4brï†rðjúX\x05rñ†ròjúX\x05ró†rôjHjÕ†rõj©jƆröjsX  r÷†røh&X// Header signature
rù†rújsX    rû†rühÐX$digital_signaturerý†rþjsj¿†rÿhtX.=r
†r
jsj¿†r
jEXpackr
†r
j©jцr
jHjÕ†r
jHjñ†r
jHjÕ†r
j©j{†r	
jsj¿†r

jŸj†r
j©X);r
†r

jsX        r
†r
h&X// Size of data
r
†r
jsX    r
†r
hÐX$digital_signaturer
†r
jsj¿†r
htX.=r
†r
jsj¿†r
jäX''r
†r
j©jƆr
jsX                  r
†r
h&X// Signature data (is empty)
r
†r 
jsX
    r!
†r"
hÐX$tmp_file_datar#
†r$
jsj¿†r%
htjÁ†r&
jsj¿†r'
jEXimploder(
†r)
j©jцr*
jäX''r+
†r,
j©j{†r-
jsj¿†r.
hÐX
$file_datar/
†r0
j©X);r1
†r2
jsX  r3
†r4
h&X
// File data
r5
†r6
jsX    r7
†r8
hÐX$tmp_cd_datar9
†r:
jsX   r;
†r<
htjÁ†r=
jsj¿†r>
jEXimploder?
†r@
j©jцrA
jäX''rB
†rC
j©j{†rD
jsj¿†rE
hÐX$cd_datarF
†rG
j©jÕ†rH
htj†rI
jsX    rJ
†rK
h&X// Central directory
rL
†rM
jsX                     rN
†rO
hÐX$digital_signaturerP
†rQ
j©jƆrR
jsX       rS
†rT
h&X// Digital signature
rU
†rV
jsX
    rW
†rX
h&X// End of central directory
rY
†rZ
jsX    r[
†r\
hÐX$eof_cdr]
†r^
jsj¿†r_
htjÁ†r`
jsj¿†ra
jäX''rb
†rc
j©jƆrd
jsX
    re
†rf
hÐX$eof_cdrg
†rh
jsj¿†ri
htX.=rj
†rk
jsj¿†rl
jHjÕ†rm
júX\x50rn
†ro
júX\x4brp
†rq
júX\x05rr
†rs
júX\x06rt
†ru
jHjÕ†rv
j©jƆrw
jsX                rx
†ry
h&X // End of central dir signature
rz
†r{
jsX    r|
†r}
hÐX$eof_cdr~
†r
jsj¿†r€
htX.=r
†r‚
jsj¿†rƒ
jEXpackr„
†r…
j©jцr†
jHjÕ†r‡
jHjñ†rˆ
jHjÕ†r‰
j©j{†rŠ
jsj¿†r‹
jŸj†rŒ
j©X);r
†rŽ
jsX                      r
†r
h&X// Number of this disk
r‘
†r’
jsX    r“
†r”
hÐX$eof_cdr•
†r–
jsj¿†r—
htX.=r˜
†r™
jsj¿†rš
jEXpackr›
†rœ
j©jцr
jHjÕ†rž
jHjñ†rŸ
jHjÕ†r 
j©j{†r¡
jsj¿†r¢
jŸj†r£
j©X);r¤
†r¥
jsX                      r¦
†r§
h&X>// Number of the disk with the start of the central directory
r¨
†r©
jsX    rª
†r«
hÐX$eof_cdr¬
†r­
jsj¿†r®
htX.=r¯
†r°
jsj¿†r±
jEXpackr²
†r³
j©jцr´
jHjÕ†rµ
jHjñ†r¶
jHjÕ†r·
j©j{†r¸
jsj¿†r¹
jEXcountrº
†r»
j©jцr¼
hÐX$cd_datar½
†r¾
j©X));r¿
†rÀ
jsX        rÁ
†rÂ
h&XA// Total number of entries in the central directory on this disk
rÃ
†rÄ
jsX    rÅ
†rÆ
hÐX$eof_cdrÇ
†rÈ
jsj¿†rÉ
htX.=rÊ
†rË
jsj¿†rÌ
jEXpackrÍ
†rÎ
j©jцrÏ
jHjÕ†rÐ
jHjñ†rÑ
jHjÕ†rÒ
j©j{†rÓ
jsj¿†rÔ
jEXcountrÕ
†rÖ
j©jцr×
hÐX$cd_datarØ
†rÙ
j©X));rÚ
†rÛ
jsX        rÜ
†rÝ
h&X4// Total number of entries in the central directory
rÞ
†rß
jsX    rà
†rá
hÐX$eof_cdrâ
†rã
jsj¿†rä
htX.=rå
†ræ
jsj¿†rç
jEXpackrè
†ré
j©jцrê
jHjÕ†rë
jHjg†rì
jHjÕ†rí
j©j{†rî
jsj¿†rï
jEXstrlenrð
†rñ
j©jцrò
hÐX$tmp_cd_dataró
†rô
j©X));rõ
†rö
jsX   r÷
†rø
h&X!// Size of the central directory
rù
†rú
jsX    rû
†rü
hÐX$eof_cdrý
†rþ
jsj¿†rÿ
htX.=r†rjsj¿†rjEXpackr†rj©jцrjHjÕ†rjHjg†rjHjÕ†rj©j{†r	jsj¿†r
jEXstrlenr†rj©jцr
hÐX$tmp_file_datar†rj©X));r†rjsj¿†rh&XQ// Offset of start of central directory with respect to the starting disk number
r†rjsX    r†rhÐX$eof_cdr†rjsj¿†rhtX.=r†rjsj¿†rjEXpackr†rj©jцrjHjÕ†r jHjñ†r!jHjÕ†r"j©j{†r#jsj¿†r$jŸj†r%j©X);r&†r'jsX                      r(†r)h&X// .ZIP file comment length
r*†r+jsX    r,†r-hÐX$eof_cdr.†r/jsj¿†r0htX.=r1†r2jsj¿†r3jäX''r4†r5j©jƆr6jsX                                 r7†r8h&X // .ZIP file comment (is empty)
r9†r:jsX
    r;†r<h&X// Content of the zip file
r=†r>jsX    r?†r@hÐX$datarA†rBjsj¿†rChtjÁ†rDjsj¿†rEhÐX$tmp_file_datarF†rGhtj†rHjsX

            rI†rJh&X// $extra_data_record.
rK†rLjsX            rM†rNhÐX$tmp_cd_datarO†rPhtj†rQjsX

            rR†rShÐX$eof_cdrT†rUj©jƆrVjsX

    rW†rXh&X// Return content?
rY†rZjsX    r[†r\jXifr]†r^j©jцr_htjñ†r`hÐX	$filenamera†rbj©jÕ†rcjsX
      rd†rejXreturnrf†rgjsj¿†rhhÐX$datari†rjj©jƆrkjsX
      
    rl†rmh&X// Write to file
rn†rojsX    rp†rqjXreturnrr†rsjsj¿†rtjEXfile_put_contentsru†rvj©jцrwhÐX	$filenamerx†ryj©j{†rzjsj¿†r{hÐX$datar|†r}j©X);r~†rjsX
  r€†rj©jä†r‚jsX
  
 rƒ†r„j)X|/**
  *  Load a zip file
  *
  *  This function loads the files and dirs from a zip file from the harddrive.
  *
  *  @access                public
  *
  *  @param  string $file   The path to the zip file
  *  @param  bool   $reset  Reset the files and dirs before adding the zip file's content?
  *
  *  @return bool           Returns true if the file was loaded sucessfully
  */r…†r†jsX
  r‡†rˆjXfunctionr‰†rŠjsj¿†r‹jtX	load_filerŒ†rj©jцrŽhÐX$filer†rj©j{†r‘jsj¿†r’hÐX$resetr“†r”jsj¿†r•htjÁ†r–jsj¿†r—jXtruer˜†r™j©jÕ†ršjsj¿†r›j©j؆rœjsX
    r†ržh&X!// Check whether the file exists
rŸ†r jsX    r¡†r¢jXifr£†r¤j©jцr¥htjñ†r¦jEXfile_existsr§†r¨j©jцr©hÐX$filerª†r«j©X))r¬†r­jsX
      r®†r¯jXreturnr°†r±jsj¿†r²jXfalser³†r´j©jƆrµjsX

    r¶†r·h&X// Load the files content
r¸†r¹jsX    rº†r»hÐX$contentr¼†r½jsj¿†r¾htjÁ†r¿jsj¿†rÀhtX@rÁ†rÂjEXfile_get_contentsrÆrÄj©jцrÅhÐX$filerƆrÇj©X);rȆrÉjsX

    rʆrËh&X-// Return false if the file cannot be opened
r̆rÍjsX    rΆrÏjXifrІrÑj©jцrÒhtjñ†rÓhÐX$contentrÔ†rÕj©jÕ†rÖjsX
      r׆rØjXreturnrÙ†rÚjsj¿†rÛjXfalser܆rÝj©jƆrÞjsX

    r߆ràh&X// Read the zip
rá†râjsX    rã†räjXreturnrå†ræjsj¿†rçhÐX$thisrè†réhtX->rê†rëhÿXload_stringrì†ríj©jцrîhÐX$contentrï†rðj©j{†rñjsj¿†ròhÐX$resetró†rôj©X);rõ†röjsX
  r÷†røj©jä†rùjsX
  
 rú†rûj)Xz/**
  *  Load a zip string
  *
  *  This function loads the files and dirs from a string
  *
  *  @access                 public
  *
  *  @param  string $string  The string the zip is generated from
  *  @param  bool   $reset   Reset the files and dirs before adding the zip file's content?
  *
  *  @return bool            Returns true if the string was loaded sucessfully
  */rü†rýjsX
  rþ†rÿjXfunctionr†rjsj¿†rjtXload_stringr†rj©jцrhÐX$stringr†rj©j{†rjsj¿†r	hÐX$resetr
†rjsj¿†rhtjÁ†r
jsj¿†rjXtruer†rj©jÕ†rjsj¿†rj©j؆rjsX
    r†rh&X// Reset the zip?
r†rjsX    r†rjXifr†rj©jцrhÐX$resetr†rj©jÕ†rjsj¿†r j©j؆r!jsX
      r"†r#hÐX$thisr$†r%htX->r&†r'hÿXdirsr(†r)jsX  r*†r+htjÁ†r,jsj¿†r-jXarrayr.†r/j©X();r0†r1jsX
      r2†r3hÐX$thisr4†r5htX->r6†r7hÿXfilesr8†r9jsj¿†r:htjÁ†r;jsj¿†r<jXarrayr=†r>j©X();r?†r@jsX
    rA†rBj©jä†rCjsX

    rD†rEh&XD// Get the starting position of the end of central directory record
rF†rGjsX    rH†rIhÐX$startrJ†rKjsj¿†rLhtjÁ†rMjsj¿†rNjEXstrposrO†rPj©jцrQhÐX$stringrR†rSj©j{†rTjsj¿†rUjHjÕ†rVjúX\x50rW†rXjúX\x4brY†rZjúX\x05r[†r\júX\x06r]†r^jHjÕ†r_j©X);r`†rajsX

    rb†rch&X	// Error
rd†rejsX    rf†rgjXifrh†rij©jцrjhÐX$startrk†rljsj¿†rmhtX===rn†rojsj¿†rpjXfalserq†rrj©jÕ†rsjsX
      rt†rujXdierv†rwj©jцrxjäX4'Could not find the end of central directory record'ry†rzj©X);r{†r|jsX

    r}†r~h&X// Get the ecdr
r†r€jsX    r†r‚hÐX$eof_cdrƒ†r„jsj¿†r…htjÁ†r†jsj¿†r‡jEXsubstrrˆ†r‰j©jцrŠhÐX$stringr‹†rŒj©j{†rjsj¿†rŽhÐX$startr†rhtX+r‘†r’jŸX4r“†r”j©j{†r•jsj¿†r–jŸX18r—†r˜j©X);r™†ršjsX

    r›†rœh&X// Unpack the ecdr infos
r†ržjsX    rŸ†r hÐX$eof_cdr¡†r¢jsj¿†r£htjÁ†r¤jsj¿†r¥jEXunpackr¦†r§j©jцr¨jäX	'vdisc1/'r©†rªhtj†r«jsX
                     r¬†r­jäX	'vdisc2/'r®†r¯htj†r°jsX
                     r±†r²jäX'ventries1/'r³†r´htj†rµjsX
                     r¶†r·e(jäX'ventries2/'r¸†r¹htj†rºjsX
                     r»†r¼jäX'Vsize/'r½†r¾htj†r¿jsX
                     rÀ†rÁjäX
'Voffset/'r†rÃhtj†rÄjsX
                     rņrÆjäX'vcomment_lenght'rdžrÈj©j{†rÉjsj¿†rÊhÐX$eof_cdrˆrÌj©X);r͆rÎjsX

    rφrÐh&X // Do not allow multi disc zips
rцrÒjsX    rÓ†rÔjXifrÕ†rÖj©jцr×hÐX$eof_cdr؆rÙj©j‡†rÚjäX'disc1'rÛ†rÜj©X]r݆rÞjsj¿†rßhtX!=rà†rájsj¿†râjŸj†rãj©jÕ†räjsX
      rå†ræjXdierç†rèj©jцréjäX,'multi disk stuff is not yet implemented :/'rê†rëj©X);rì†ríjsX

    rî†rïh&X// Save the interesting values
rð†rñjsX    rò†róhÐX$cd_entriesrô†rõjsj¿†röhtjÁ†r÷jsj¿†røhÐX$eof_cdrù†rúj©j‡†rûjäX
'entries1'rü†rýj©X];rþ†rÿjsX
    r†rhÐX$cd_sizer†rjsX    r†rhtjÁ†rjsj¿†rhÐX$eof_cdr†r	j©j‡†r
jäX'size'r†rj©X];r
†rjsX
    r†rhÐX
$cd_offsetr†rjsX  r†rhtjÁ†rjsj¿†rhÐX$eof_cdr†rj©j‡†rjäX'offset'r†rj©X];r†rjsX

    r†rh&X$// Get the central directory record
r †r!jsX    r"†r#hÐX$cdrr$†r%jsj¿†r&htjÁ†r'jsj¿†r(jEXsubstrr)†r*j©jцr+hÐX$stringr,†r-j©j{†r.jsj¿†r/hÐX
$cd_offsetr0†r1j©j{†r2jsj¿†r3hÐX$cd_sizer4†r5j©X);r6†r7jsX

    r8†r9h&X2// Reset the position and the list of the entries
r:†r;jsX    r<†r=hÐX$posr>†r?jsX     r@†rAhtjÁ†rBjsj¿†rCjŸj†rDj©jƆrEjsX
    rF†rGhÐX$entriesrH†rIjsj¿†rJhtjÁ†rKjsj¿†rLjXarrayrM†rNj©X();rO†rPjsX

    rQ†rRh&X// Handle cdr
rS†rTjsX    rU†rVjXwhilerW†rXj©jцrYhÐX$posrZ†r[jsj¿†r\htX<r]†r^jsj¿†r_jEXstrlenr`†raj©jцrbhÐX$cdrrc†rdj©X))re†rfjsj¿†rgj©j؆rhjsX
      ri†rjh&X// Check header signature
rk†rljsX      rm†rnh&X// Digital signature
ro†rpjsX      rq†rrjXifrs†rtj©jцrujEXsubstrrv†rwj©jцrxhÐX$cdrry†rzj©j{†r{jsj¿†r|hÐX$posr}†r~j©j{†rjsj¿†r€jŸj“†rj©jÕ†r‚jsj¿†rƒhtX==r„†r…jsj¿†r†jHjÕ†r‡júX\x50rˆ†r‰júX\x4brІr‹júX\x05rŒ†rjúX\x05rކrjHjÕ†rj©jÕ†r‘jsj¿†r’j©j؆r“jsX	
        r”†r•h&X// Get digital signature size
r–†r—jsX        r˜†r™hÐX	$tmp_inforš†r›jsj¿†rœhtjÁ†rjsj¿†ržjEXunpackrŸ†r j©jцr¡jäX'vsize'r¢†r£j©j{†r¤jsj¿†r¥jEXsubstrr¦†r§j©jцr¨hÐX$cdrr©†rªj©j{†r«jsj¿†r¬hÐX$posr­†r®jsj¿†r¯htj‘†r°jsj¿†r±jŸj“†r²j©j{†r³jsj¿†r´jŸX2rµ†r¶j©X));r·†r¸jsX


        r¹†rºh&X"// Read out the digital signature
r»†r¼jsX        r½†r¾hÐX$digital_sigr¿†rÀjsj¿†rÁhtjÁ†rÂjsj¿†rÃjEXsubstrrĆrÅj©jцrÆhÐX$headerrdžrÈj©j{†rÉjsj¿†rÊhÐX$posrˆrÌjsj¿†rÍhtj‘†rÎjsj¿†rÏjŸX6rІrÑj©j{†rÒjsj¿†rÓhÐX	$tmp_inforÔ†rÕj©j‡†rÖjäX'size'r׆rØj©X]);rÙ†rÚjsX


        rÛ†rÜjXbreakr݆rÞj©jƆrßjsX
      rà†ráj©jä†râjsX

      rã†räh&X// Get file header
rå†ræjsX      rç†rèhÐX$headerré†rêjsj¿†rëhtjÁ†rìjsj¿†ríjEXsubstrrî†rïj©jцrðhÐX$cdrrñ†ròj©j{†rójsj¿†rôhÐX$posrõ†röj©j{†r÷jsj¿†røjŸX46rù†rúj©X);rû†rüjsX

      rý†rþh&X!// Unpack the header information
rÿ†rjsX      r†rhÐX$header_infor†rjsj¿†rhtjÁ†rjsj¿†rhtjÁ†rjEXunpackr	†r
j©jцrjäX
'Vheader/'r†r
htj†rjsX
                             r†rjäX'vversion_made_by/'r†rhtj†rjsX
                             r†rjäX'vversion_needed/'r†rhtj†rjsX
                             r†rjäX'vgeneral_purpose/'r†rhtj†rjsX
                             r†rjäX'vcompression_method/'r †r!htj†r"jsX
                             r#†r$jäX'vlast_mod_time/'r%†r&htj†r'jsX
                             r(†r)jäX'vlast_mod_date/'r*†r+htj†r,jsX
                             r-†r.jäX	'Vcrc32/'r/†r0htj†r1jsX
                             r2†r3jäX'Vcompressed_size/'r4†r5htj†r6jsX
                             r7†r8jäX'Vuncompressed_size/'r9†r:htj†r;jsX
                             r<†r=jäX'vname_length/'r>†r?htj†r@jsX
                             rA†rBjäX'vextra_length/'rC†rDhtj†rEjsX
                             rF†rGjäX'vcomment_length/'rH†rIhtj†rJjsX
                             rK†rLjäX'vdisk_number/'rM†rNhtj†rOjsX
                             rP†rQjäX'vinternal_attributes/'rR†rShtj†rTjsX
                             rU†rVjäX'Vexternal_attributes/'rW†rXhtj†rYjsX
                             rZ†r[jäX	'Voffset'r\†r]j©j{†r^jsX
                             r_†r`hÐX$headerra†rbj©X);rc†rdjsX

      re†rfh&X// Valid header?
rg†rhjsX      ri†rjjXifrk†rlj©jцrmhÐX$header_inforn†roj©j‡†rpjäX'header'rq†rrj©j݆rsjsj¿†rthtX!=ru†rvjsj¿†rwjŸX33639248rx†ryj©jÕ†rzjsX	
        r{†r|jXreturnr}†r~jsj¿†rjXfalser€†rj©jƆr‚jsX

      rƒ†r„h&X// New position
r…†r†jsX      r‡†rˆhÐX$posr‰†rŠjsj¿†r‹htX+=rŒ†rjsj¿†rŽjŸX46r†rj©jƆr‘jsX

      r’†r“h&X// Read out the file name
r”†r•jsX      r–†r—hÐX$header_infor˜†r™j©j‡†ršjäX'name'r›†rœj©j݆rjsj¿†ržhtjÁ†rŸjsj¿†r jEXsubstrr¡†r¢j©jцr£hÐX$cdrr¤†r¥j©j{†r¦jsj¿†r§hÐX$posr¨†r©j©j{†rªjsj¿†r«hÐX$header_infor¬†r­j©j‡†r®jäX
'name_length'r¯†r°j©X]);r±†r²jsX

      r³†r´h&X// New position
rµ†r¶jsX      r·†r¸hÐX$posr¹†rºjsj¿†r»htX+=r¼†r½jsj¿†r¾hÐX$header_infor¿†rÀj©j‡†rÁjäX
'name_length'r†rÃj©X];rĆrÅjsX

      rƆrÇh&X// Read out the extra stuff
rȆrÉjsX      rʆrËhÐX$header_infor̆rÍj©j‡†rÎjäX'extra'rφrÐj©j݆rÑjsj¿†rÒhtjÁ†rÓjsj¿†rÔjEXsubstrrÕ†rÖj©jцr×hÐX$cdrr؆rÙj©j{†rÚjsj¿†rÛhÐX$posr܆rÝj©j{†rÞjsj¿†rßhÐX$header_inforà†ráj©j‡†râjäX'extra_length'rã†räj©X]);rå†ræjsX

      rç†rèh&X// New position
ré†rêjsX      rë†rìhÐX$posrí†rîjsj¿†rïhtX+=rð†rñjsj¿†ròhÐX$header_inforó†rôj©j‡†rõjäX'extra_length'rö†r÷j©X];rø†rùjsX

      rú†rûh&X// Read out the comment
rü†rýjsX      rþ†rÿhÐX$header_infor†rj©j‡†rjäX	'comment'r†rj©j݆rjsj¿†rhtjÁ†rjsj¿†rjEXsubstrr	†r
j©jцrhÐX$cdrr†r
j©j{†rjsj¿†rhÐX$posr†rj©j{†rjsj¿†rhÐX$header_infor†rj©j‡†rjäX'comment_length'r†rj©X]);r†rjsX

      r†rh&X// New position
r†rjsX      r†r hÐX$posr!†r"jsj¿†r#htX+=r$†r%jsj¿†r&hÐX$header_infor'†r(j©j‡†r)jäX'comment_length'r*†r+j©X];r,†r-jsX

      r.†r/h&X*// Append this file/dir to the entry list
r0†r1jsX      r2†r3hÐX$entriesr4†r5j©X[]r6†r7jsj¿†r8htjÁ†r9jsj¿†r:hÐX$header_infor;†r<j©jƆr=jsX
    r>†r?j©jä†r@jsX

    rA†rBh&X4// Check whether all entries where read sucessfully
rC†rDjsX    rE†rFjXifrG†rHj©jцrIjEXcountrJ†rKj©jцrLhÐX$entriesrM†rNj©jÕ†rOjsj¿†rPhtX!=rQ†rRjsj¿†rShÐX$cd_entriesrT†rUj©jÕ†rVjsX
      rW†rXjXreturnrY†rZjsj¿†r[jXfalser\†r]j©jƆr^jsX

    r_†r`h&X// Handle files/dirs
ra†rbjsX    rc†rdjXforeachre†rfj©jцrghÐX$entriesrh†rijsj¿†rjjXasrk†rljsj¿†rmhÐX$entryrn†roj©jÕ†rpjsj¿†rqj©j؆rrjsX
      rs†rth&X
// Is a dir?
ru†rvjsX      rw†rxjXifry†rzj©jцr{hÐX$entryr|†r}j©j‡†r~jäX'external_attributes'r†r€j©j݆rjsj¿†r‚htX&rƒ†r„jsj¿†r…jŸX16r††r‡j©jÕ†rˆjsj¿†r‰j©j؆rŠjsX	
        r‹†rŒhÐX$thisr†rŽhtX->r†rhÿXadd_dirr‘†r’j©jцr“hÐX$entryr”†r•j©j‡†r–jäX'name'r—†r˜j©X]);r™†ršjsX	
        r›†rœjXcontinuer†ržj©jƆrŸjsX
      r †r¡j©jä†r¢jsX

      r£†r¤h&X// Get local file header
r¥†r¦jsX      r§†r¨hÐX$headerr©†rªjsj¿†r«htjÁ†r¬jsj¿†r­jEXsubstrr®†r¯j©jцr°hÐX$stringr±†r²j©j{†r³jsj¿†r´hÐX$entryrµ†r¶j©j‡†r·jäX'offset'r¸†r¹j©X],rº†r»jsj¿†r¼jŸX30r½†r¾j©X);r¿†rÀjsX

      rÁ†rÂh&X!// Unpack the header information
rÆrÄjsX      rņrÆhÐX$header_infordžrÈjsj¿†rÉhtjÁ†rÊjsj¿†rËhtjÁ†rÌjEXunpackr͆rÎj©jцrÏjäX
'Vheader/'rІrÑhtj†rÒjsX
                             rÓ†rÔjäX'vversion_needed/'rÕ†rÖhtj†r×jsX
                             r؆rÙjäX'vgeneral_purpose/'rÚ†rÛhtj†rÜjsX
                             r݆rÞjäX'vcompression_method/'r߆ràhtj†rájsX
                             râ†rãjäX'vlast_mod_time/'rä†råhtj†ræjsX
                             rç†rèjäX'vlast_mod_date/'ré†rêhtj†rëjsX
                             rì†ríjäX	'Vcrc32/'rî†rïhtj†rðjsX
                             rñ†ròjäX'Vcompressed_size/'ró†rôhtj†rõjsX
                             rö†r÷jäX'Vuncompressed_size/'rø†rùhtj†rújsX
                             rû†rüjäX'vname_length/'rý†rþhtj†rÿjsX
                             r†rjäX'vextra_length'r†rj©j{†rjsX
                             r†rhÐX$headerr†rj©X);r	†r
jsX

      r†rh&X// Valid header?
r
†rjsX      r†rjXifr†rj©jцrhÐX$header_infor†rj©j‡†rjäX'header'r†rj©j݆rjsj¿†rhtX!=r†rjsj¿†rjŸX67324752r†rj©jÕ†r jsX	
        r!†r"jXreturnr#†r$jsj¿†r%jXfalser&†r'j©jƆr(jsX

      r)†r*h&X// Get content start position
r+†r,jsX      r-†r.hÐX$startr/†r0jsj¿†r1htjÁ†r2jsj¿†r3hÐX$entryr4†r5j©j‡†r6jäX'offset'r7†r8j©j݆r9jsj¿†r:htj‘†r;jsj¿†r<jŸX30r=†r>jsj¿†r?htj‘†r@jsj¿†rAhÐX$header_inforB†rCj©j‡†rDjäX
'name_length'rE†rFj©j݆rGjsj¿†rHhtj‘†rIjsj¿†rJhÐX$header_inforK†rLj©j‡†rMjäX'extra_length'rN†rOj©X];rP†rQjsX

      rR†rSh&X// Get the compressed data
rT†rUjsX      rV†rWhÐX$datarX†rYjsj¿†rZhtjÁ†r[jsj¿†r\jEXsubstrr]†r^j©jцr_hÐX$stringr`†raj©j{†rbjsj¿†rchÐX$startrd†rej©j{†rfjsj¿†rghÐX$header_inforh†rij©j‡†rjjäX'compressed_size'rk†rlj©X]);rm†rnjsX

      ro†rph&X// Detect compression type
rq†rrjsX      rs†rtjXswitchru†rvj©jцrwhÐX$header_inforx†ryj©j‡†rzjäX'compression_method'r{†r|j©X])r}†r~jsj¿†rj©j؆r€jsX	
        r†r‚h&X// No compression
rƒ†r„jsX        r…†r†jXcaser‡†rˆjsj¿†r‰jŸj†rŠhtX:r‹†rŒjsX
          r†rŽh&X// Ne decompression needed
r†rjsX
          r‘†r’hÐX$contentr“†r”jsj¿†r•htjÁ†r–jsj¿†r—hÐX$datar˜†r™j©jƆršjsX
          r›†rœjXbreakr†ržj©jƆrŸjsX


        r †r¡h&X// Gzip
r¢†r£jsX        r¤†r¥jXcaser¦†r§jsj¿†r¨jŸj»†r©htj‹†rªjsX
          r«†r¬jXifr­†r®j©jцr¯htjñ†r°jEXfunction_existsr±†r²j©jцr³jäX'gzinflate'r´†rµj©X))r¶†r·jsX

            r¸†r¹jXreturnrº†r»jsj¿†r¼jXfalser½†r¾j©jƆr¿jsX

          rÀ†rÁh&X// Uncompress data
r†rÃjsX
          rĆrÅhÐX$contentrƆrÇjsj¿†rÈhtjÁ†rÉjsj¿†rÊjEX	gzinflaterˆrÌj©jцrÍhÐX$datarΆrÏj©X);rІrÑjsX
          rÒ†rÓjXbreakrÔ†rÕj©jƆrÖjsX


        r׆rØh&X	// Bzip2
rÙ†rÚjsX        rÛ†rÜjXcaser݆rÞjsj¿†rßjŸX12rà†ráhtj‹†râjsX
          rã†räjXifrå†ræj©jцrçhtjñ†rèjEXfunction_existsré†rêj©jцrëjäX'bzdecompress'rì†ríj©X))rî†rïjsX

            rð†rñjXreturnrò†rójsj¿†rôjXfalserõ†röj©jƆr÷jsX

          rø†rùh&X// Decompress data
rú†rûjsX
          rü†rýhÐX$contentrþ†rÿjsj¿†rhtjÁ†rjsj¿†rjEXbzdecompressr†rj©jцrhÐX$datar†rj©X);r†r	jsX
          r
†rjXbreakr†r
j©jƆrjsX


        r†rh&X&// Compression not supported -> error
r†rjsX        r†rjXdefaultr†rhtj‹†rjsX
          r†rjXreturnr†rjsj¿†rjXfalser†rj©jƆrjsX
      r †r!j©jä†r"jsX

      r#†r$h&X// Try to add file
r%†r&jsX      r'†r(jXifr)†r*j©jцr+htjñ†r,hÐX$thisr-†r.htX->r/†r0hÿXadd_filer1†r2j©jцr3hÐX$entryr4†r5j©j‡†r6jäX'name'r7†r8j©X],r9†r:jsj¿†r;hÐX$contentr<†r=j©X))r>†r?jsX	
        r@†rAjXreturnrB†rCjsj¿†rDjXfalserE†rFj©jƆrGjsX
    rH†rIj©jä†rJjsX

    rK†rLjXreturnrM†rNjsj¿†rOjXtruerP†rQj©jƆrRjsX
  rS†rTj©jä†rUjsj&†rVj©jä†rWjsX

rX†rYjXfunctionrZ†r[jsj¿†r\htjƒ†r]jtXbyrefr^†r_j©X()r`†rajsj¿†rbj©j؆rcjsX
    rd†rehÐX$xrf†rgjsj¿†rhhtjÁ†rijsj¿†rjjXarrayrk†rlj©X();rm†rnjsX
    ro†rpjXreturnrq†rrjsj¿†rshÐX$xrt†ruj©jƆrvjsj&†rwj©jä†rxjsX

ry†rzh&X4// Test highlighting of magic methods and variables
r{†r|jXclassr}†r~jsj¿†rh¹X
MagicClassr€†rjsj¿†r‚j©j؆rƒjsX
  r„†r…jXpublicr††r‡jsj¿†rˆhÐX
$magic_strr‰†rŠj©jƆr‹jsX
  rŒ†rjXpublicrކrjsj¿†rhÐX
$ordinary_strr‘†r’j©jƆr“jsX

  r”†r•jXpublicr–†r—jsj¿†r˜jXfunctionr™†ršjsj¿†r›jyX__constructrœ†rj©jцržhÐX	$some_varrŸ†r j©jÕ†r¡jsj¿†r¢j©j؆r£jsX
    r¤†r¥hÐX$thisr¦†r§htX->r¨†r©hÿX	magic_strrª†r«jsj¿†r¬htjÁ†r­jsj¿†r®jŠX__FILE__r¯†r°j©jƆr±jsX
    r²†r³hÐX$thisr´†rµhtX->r¶†r·hÿXordinary_strr¸†r¹jsj¿†rºhtjÁ†r»jsj¿†r¼hÐX	$some_varr½†r¾j©jƆr¿jsX
  rÀ†rÁj©jä†rÂjsX

  rÆrÄjXpublicrņrÆjsj¿†rÇjXfunctionrȆrÉjsj¿†rÊjyX
__toStringrˆrÌj©X()r͆rÎjsj¿†rÏj©j؆rÐjsX
    rцrÒjXreturnrÓ†rÔjsj¿†rÕhÐX$thisrÖ†r×htX->r؆rÙhÿX	magic_strrÚ†rÛj©jƆrÜjsX
  r݆rÞj©jä†rßjsX

  rà†rájXpublicrâ†rãjsj¿†räjXfunctionrå†ræjsj¿†rçjtXnonMagicrè†réj©X()rê†rëjsj¿†rìj©j؆ríjsX
    rî†rïjXreturnrð†rñjsj¿†ròhÐX$thisró†rôhtX->rõ†röhÿXordinary_strr÷†røj©jƆrùjsX
  rú†rûj©jä†rüjsj&†rýj©jä†rþjsX

rÿ†rhÐX$magicr†rjsj¿†rhtjÁ†rjsj¿†rjXnewr†rjsj¿†rjdX
MagicClassr	†r
j©jцrjŠX__DIR__r†r
j©X);r†rjsj&†rjdX
__toStringr†rj©X();r†rjsj&†rhÐX$magicr†rhtX->r†rhÿXnonMagicr†rj©X();r†rjsj&†rhÐX$magicr†r htX->r!†r"hÿX
__toStringr#†r$j©X();r%†r&jsX

     r'†r(jXechor)†r*jsj¿†r+jÁX<<<r,†r-j"XEOFr.†r/jÁX"

     Test the heredocs...

     r0†r1j"XEOFr2†r3j©jƆr4jsj&†r5jsj&†r6jXechor7†r8jsj¿†r9jÁX<<<r:†r;jÁjÕ†r<j"Xsome_delimiterr=†r>jÁX."
more heredoc testing
continues on this line
r?†r@j"Xsome_delimiterrA†rBj©jƆrCjsj&†rDjsj&†rEhX?>rF†rGjkj&†rHe.