HTML_Table revised

[email protected] (Bertrand Mansion) Mon, 12 Mar 2001 16:37:45 +0100
Newsgroups php.pear
Message-ID <B6D2ABD9.1BD1%[email protected]>
--MS_Mac_OE_3067259865_1320580_MIME_Part
Content-type: text/plain; charset="US-ASCII"
Content-transfer-encoding: 7bit

Attached is a revised version of Table.php. Should I continue to post that
here? If not, please open an account for me to manage this class.

I reckon it should go under Experimental/HTML for a start so one could
review it. With your comments and reviews, it shouldn't stay there too long.
(thanks Clayton)

For a reminder, the goal of this class is to generate HTML code to create
and manage table layout.

Thanks,

Bertrand Mansion
http://www.tapage.fr


--MS_Mac_OE_3067259865_1320580_MIME_Part
Content-type: text/plain; name="Table.php";
 x-mac-creator="522A6368";
 x-mac-type="54455854"
Content-disposition: attachment
Content-transfer-encoding: base64

PD9waHAKLy8KLy8gIEhUTUxfVGFibGUucGhwCi8vICBCZXJ0cmFuZCBNYW5zaW9uIDIwMDEw
MzEyCi8vCi8qKgoqIEhUTUwgdGFibGUgdXRpbGl0eSBmdW5jdGlvbnMuCiogCiogVGhpcyBj
bGFzcyBoZWxwcyB5b3UgY3JlYXRlIGh0bWwgdGFibGVzIG9uIHRoZSBmbHkuCiogSXQgaXMg
ZWFzeSB0byB1c2UgYW5kIHlldCBwb3dlcmZ1bCBlbm91Z2ggdG8gY3JlYXRlIGFsbW9zdCBh
bnkga2luZAoqIG9mIHRhYmxlcyB5b3Ugd291bGQgbGlrZS4gWW91IGNhbiBhbHNvIGNyZWF0
ZSBhIHRhYmxlIGludG8gYW5vdGhlcgoqIHRhYmxlIGNlbGwuIEl0IG1ha2VzIHBocCBjb2Rl
IGVhc2llciB0byByZWFkIGFuZCBtYWludGFpbiwgd2l0aAoqIGxlc3MgaHRtbCB0YWdzIGlu
IGl0LgoqCiogVGFibGVzIGNhbiBiZSBzaXplZCBkeW5hbWljYWxseSBhbmQgeW91IGNhbiBh
ZGQgcm93cyBvciBjb2x1bW5zIGFzCiogeW91IHdhbnQgdXNpbmcgYWRkUm93IG9yIGFkZENv
bCBtZXRob2RzLgoqIAoqIGh0bWwgYXR0cmlidXRlcyBhcmUgZ2l2ZW4gdG8gbWV0aG9kcyB3
aXRoIGFycmF5cyB3aGljaCBhbGxvdyB5b3UgCiogdG8gZGVmaW5lIGFuZCByZXVzZSB5b3Vy
IG93biBzdHlsZXMuIEFsbCB2YWxpZCBIVE1MIDMuMCBhdHRyaWJ1dGVzCiogc2hvdWxkIGJl
IHN1cHBvcnRlZC4KKiAKKiBFeGFtcGxlIDoKKgoqICR0YWJsZSA9IG5ldyBIVE1MX1RhYmxl
KGFycmF5KAoJCQkJCSJyb3dzIiA9PiAzLAoJCQkJCSJjb2xzIiA9PiAzLAoJCQkJCSJiZ2Nv
bG9yIiA9PiAiI0NDQ0NFRSIsCgkJCQkJImJvcmRlciIgPT4gMywKCQkJCQkid2lkdGgiID0+
IDQwMCwKCQkJCQkiY2VsbHBhZGRpbmciID0+IDYsCgkJCQkJImNlbGxzcGFjaW5nIiA9PiAz
KSk7CgokdGFibGUtPnNldENlbGxBdHRyaWJ1dGVzKDIsMixhcnJheSgiYmdjb2xvciIgPT4g
ImdyZWVuIikpOwoKJHRhYmxlLT5zZXRDZWxsQ29udGVudCgyLDIsImhlbGxvIik7CgokY29u
dGVudDI9IndvcmxkIjsKJHRhYmxlLT5zZXRDZWxsQ29udGVudCgzLDMsJGNvbnRlbnQyKTsK
JHRhYmxlLT5zZXRSb3dBdHRyaWJ1dGVzKDEsIGFycmF5KAoJCQkJCSJiZ2NvbG9yIiA9PiAi
Ymx1ZSIpKTsKCiR0YWJsZS0+c2V0Um93QXR0cmlidXRlcyg0LCBhcnJheSgKCQkJCQkiYmdj
b2xvciIgPT4gInllbGxvdyIsCgkJCQkJImhlaWdodCIgPT4gODApKTsKCiRjb250ZW50WzFd
PSJoZWxsbzEiOwokY29udGVudFsyXT0iaGVsbG8yIjsKJGNvbnRlbnRbNl09ImhlbGxvNiI7
CiR0YWJsZS0+YWRkQ29sKCRjb250ZW50KTsKCiR0YWJsZS0+c2V0Q2VsbEF0dHJpYnV0ZXMo
MiwyLGFycmF5KCJjb2xzcGFuIiA9PiAzLCAicm93c3BhbiIgPT4gMykpOwoKJHRhYmxlLT5z
aG93SFRNTF9UYWJsZSgpOwoqLwoKY2xhc3MgSFRNTF9UYWJsZSB7CgoJLy8ge3t7IHByb3Bl
cnRpZXMKCgkvKiogY29uc3RydWN0aW9uIHBhcmFtZXRlcnMgb2YgPFRBQkxFPiB0YWdzICov
Cgl2YXIgJGF0dHJpYnV0ZXMgPSBhcnJheSgpOwoKCS8qKiBhdXRvbWF0aWNseSBncm93cyB0
aGUgdGFibGUgaWYgcm93cyBvciBjb2x1bW5zIGFyZSBhZGRlZCovCgl2YXIgJGF1dG9ncm93
ID0gMTsKCQoJLyoqIGF1dG9tYXRpY2x5IGZpbGxzIGNlbGxzIHdpdGggbm9iYWNrc3BhY2Vz
ICZuYnNwOyAqLwoJdmFyICRhdXRvZmlsbCA9ICImbmJzcDsiOwoKCS8qKiBpZiB0cnVlLCBy
ZXBsYWNlIGV4aXN0aW5nIGF0dHJpYnV0ZXMgd2l0aCBlbXB0eSB2YWx1ZXMgKi8KCXZhciAk
b3ZlcndyaXRlID0gMDsKCgkvLyB9fX0KCS8vIHt7eyBjb25zdHJ1Y3RvcgoJCgkvKioKCSAq
IEhUTUxfVGFibGUgY29uc3RydWN0b3IuCgkgKgoJICogQHBhcmFtICRhdHRyaWJ1dGVzIGFy
cmF5IG9mIGF0dHJpYnV0ZXMgdXNlZCB0byBjcmVhdGUgdGhlIHRhYmxlCgkgKiBAYWNjZXNz
IHB1YmxpYwoJICovCgkKCWZ1bmN0aW9uIEhUTUxfVGFibGUoJGF0dHJpYnV0ZXMgPSAiIikg
ewkKCQkKCQkkdGhpcy0+cm93cyA9ICRhdHRyaWJ1dGVzWyJyb3dzIl07CgkJJHRoaXMtPmNv
bHMgPSAkYXR0cmlidXRlc1siY29scyJdOwoJCSR0aGlzLT5ib3JkZXIgPSAkYXR0cmlidXRl
c1siYm9yZGVyIl07CgkJJHRoaXMtPmJnY29sb3IgPSAkYXR0cmlidXRlc1siYmdjb2xvciJd
OwoJCSR0aGlzLT5iYWNrZ3JvdW5kID0gJGF0dHJpYnV0ZXNbImJhY2tncm91bmQiXTsKCQkk
dGhpcy0+d2lkdGggPSAkYXR0cmlidXRlc1sid2lkdGgiXTsKCQkkdGhpcy0+Y2VsbHNwYWNp
bmcgPSAkYXR0cmlidXRlc1siY2VsbHNwYWNpbmciXTsKCQkkdGhpcy0+Y2VsbHBhZGRpbmcg
PSAkYXR0cmlidXRlc1siY2VsbHBhZGRpbmciXTsKCQkKCX0KCgkvLyB9fX0KCS8vIHt7eyBt
YWtlSFRNTF9UYWJsZSgpCgkKCWZ1bmN0aW9uIG1ha2VIVE1MX1RhYmxlICgpIHsJCgkKCQkk
aHRtbCA9ICIiOwoJCQoJCWlmICgkdGhpcy0+cm93cyA9PSAwIHx8ICR0aGlzLT5jb2xzID09
IDApIHsKCQkJcmV0dXJuIDA7CgkJfQoJCQoJCSRodG1sIC49ICI8VEFCTEUiOwoJCSRodG1s
IC49IChpc3NldCgkdGhpcy0+Ym9yZGVyKQkJPyAiIEJPUkRFUj0nIi4kdGhpcy0+Ym9yZGVy
LiInIiA6ICIiKTsKCQkkaHRtbCAuPSAoaXNzZXQoJHRoaXMtPmJnY29sb3IpCQk/ICIgQkdD
T0xPUj0nIi4kdGhpcy0+Ymdjb2xvci4iJyIgOiAiIik7CgkJJGh0bWwgLj0gKGlzc2V0KCR0
aGlzLT5iYWNrZ3JvdW5kKQkJPyAiIEJBQ0tHUk9VTkQ9JyIuJHRoaXMtPmJhY2tncm91bmQu
IiciIDogIiIpOwoJCSRodG1sIC49IChpc3NldCgkdGhpcy0+d2lkdGgpCQkJPyAiIFdJRFRI
PSciLiR0aGlzLT53aWR0aC4iJyIgOiAiIik7CgkJJGh0bWwgLj0gKGlzc2V0KCR0aGlzLT5j
ZWxsc3BhY2luZykJPyAiIENFTExTUEFDSU5HPSciLiR0aGlzLT5jZWxsc3BhY2luZy4iJyIg
OiAiIik7CgkJJGh0bWwgLj0gKGlzc2V0KCR0aGlzLT5jZWxscGFkZGluZykgCT8gIiBDRUxM
UEFERElORz0nIi4kdGhpcy0+Y2VsbHBhZGRpbmcuIiciIDogIiIpOwoJCSRodG1sIC49ICI+
XG4iOwoJCQoJCWlmICgkdGhpcy0+Y2FwdGlvbikgewoJCQkkaHRtbCAuPSAiPENBUFRJT04i
OwoJCQkkaHRtbCAuPSAoJHRoaXMtPmNhcHRpb25fYWxpZ24gPyAiIEFMSUdOPSciLiR0aGlz
LT5jYXB0aW9uX2FsaWduLiInIiA6ICIiKTsKCQkJJGh0bWwgLj0gIj4iLiR0aGlzLT5jYXB0
aW9uLiI8L0NBUFRJT04+XG4iOwoJCX0KCQkKCQlmb3IgKCRpID0gMSA7ICRpIDw9ICR0aGlz
LT5yb3dzIDsgJGkrKykgewoJCQoJCQkkaHRtbCAuPSAiPFRSPiI7CgkJCWZvciAoJGogPSAx
IDsgJGogPD0gJHRoaXMtPmNvbHMgOyAkaisrKSB7CgkJCQoJCQkJaWYgKCR0aGlzLT5jZWxs
c3BhblsiJGk6JGoiXSAmJiAkdGhpcy0+Y2VsbHNwYW5bIiRpOiRqIl0gPT0gIlNQQU5ORUQi
KSB7CgkJCQkJJGh0bWwgLj0gIjwhLS0gc3BhbiAtLT4iOwoJCQkJCWNvbnRpbnVlOwoJCQkJ
fQoJCQkJCgkJCQlpZiAoJHRoaXMtPmNlbGxoZWFkWyIkaTokaiJdKSB7CgkJCQkJJGh0bWwg
Lj0gIjxUSCI7CgkJCQl9IGVsc2UgewoJCQkJCSRodG1sIC49ICI8VEQiOwoJCQkJfQoJCQoJ
CQkJaWYgKCR0aGlzLT5jZWxsYWxpZ25bIiRpOiRqIl0pICRodG1sIC49ICIgQUxJR049JyIu
JHRoaXMtPmNlbGxhbGlnblsiJGk6JGoiXS4iJyI7IAoJCQkJaWYgKCR0aGlzLT5jZWxsdmFs
aWduWyIkaTokaiJdKSAkaHRtbCAuPSIgVkFMSUdOPSciLiR0aGlzLT5jZWxsdmFsaWduWyIk
aTokaiJdLiInIjsKCQkKCQkJCWlmICgkdGhpcy0+Y2VsbHdpZHRoWyIkaTokaiJdKSAkaHRt
bCAuPSAiIFdJRFRIPSciLiR0aGlzLT5jZWxsd2lkdGhbIiRpOiRqIl0uIiciOwoJCQkJaWYg
KCR0aGlzLT5jZWxsaGVpZ2h0WyIkaTokaiJdKSAkaHRtbCAuPSAiIEhFSUdIVD0nIi4kdGhp
cy0+Y2VsbGhlaWdodFsiJGk6JGoiXS4iJyI7CgkJCQkKCQkJCWlmICgkdGhpcy0+Y2VsbGJn
Y29sb3JbIiRpOiRqIl0pICRodG1sIC49ICIgQkdDT0xPUj0nIi4kdGhpcy0+Y2VsbGJnY29s
b3JbIiRpOiRqIl0uIiciOwoJCQkJaWYgKCR0aGlzLT5jZWxsbm93cmFwWyIkaTokaiJdKSAk
aHRtbCAuPSAiIE5PV1JBUCciLiR0aGlzLT5jZWxsbm93cmFwWyIkaTokaiJdLiInIjsKCQkJ
CQkJCgkJCQlpZiAoJHRoaXMtPmNlbGxjb2xzcGFuWyIkaTokaiJdKSAkaHRtbCAuPSAiIENP
TFNQQU49JyIuJHRoaXMtPmNlbGxjb2xzcGFuWyIkaTokaiJdLiInIjsKCQkJCWlmICgkdGhp
cy0+Y2VsbHJvd3NwYW5bIiRpOiRqIl0pICRodG1sIC49ICIgUk9XU1BBTj0nIi4kdGhpcy0+
Y2VsbHJvd3NwYW5bIiRpOiRqIl0uIiciOwoJCQkJCQkKCQkJCSRodG1sIC49ICI+IjsKCQkJ
CQoJCQkJJGh0bWwgLj0gJHRoaXMtPmNlbGxzdGFydHN0cmluZ1siJGk6JGoiXTsKCQkJCQoJ
CQkJaWYgKCR0aGlzLT5jZWxsY29udGVudFsiJGk6JGoiXSkgewoJCQkJCSRodG1sIC49ICR0
aGlzLT5jZWxsY29udGVudFsiJGk6JGoiXTsKCQkJCX0gZWxzZSB7CgkJCQkJJGh0bWwgLj0g
JHRoaXMtPmF1dG9maWxsOwoJCQkJfQoJCQkJCgkJCQkkaHRtbCAuPSAkdGhpcy0+Y2VsbGVu
ZHN0cmluZ1siJGk6JGoiXTsKCQkJCQkJCQkJCgkJCQlpZiAoJHRoaXMtPmNlbGxoZWFkWyIk
aTokaiJdKSB7CgkJCQkJJGh0bWwgLj0gIjwvVEg+IjsKCQkJCX0gZWxzZSB7CgkJCQkJJGh0
bWwgLj0gIjwvVEQ+IjsKCQkJCX0KCQkJfQoJCQkkaHRtbCAuPSAiPC9UUj5cbiI7CgkJfQoJ
CSRodG1sIC49ICI8L1RBQkxFPlxuIjsKCQkKCQlyZXR1cm4gJGh0bWw7Cgl9CgoJLy8gfX19
CgkvLyB7e3sgc2hvd0hUTUxfVGFibGUoKQoJCglmdW5jdGlvbiBzaG93SFRNTF9UYWJsZSAo
KSB7CgkKCQlwcmludCAkdGhpcy0+bWFrZUhUTUxfVGFibGUoKTsKCX0KCQoJLy8gfX19Cgkv
LyB7e3sgYXV0b0dyb3coKQoJCglmdW5jdGlvbiBhdXRvR3JvdyAoJGF1dG9ncm93ID0gMSkg
ewoJCSR0aGlzLT5hdXRvZ3JvdyA9ICRhdXRvZ3JvdzsKCX0KCQoJLy8gfX19CgkvLyB7e3sg
YXV0b0ZpbGwoKQoJCglmdW5jdGlvbiBhdXRvRmlsbCAoJGF1dG9maWxsID0gIiZuYnNwOyIp
IHsKCQkkdGhpcy0+YXV0b2ZpbGwgPSAkYXV0b2ZpbGw7Cgl9CgkKCS8vIH19fQoJLy8ge3t7
IG92ZXJXcml0ZSgpCgkKCWZ1bmN0aW9uIG92ZXJXcml0ZSAoJG92ZXJ3cml0ZSA9IDApIHsK
CQkkdGhpcy0+b3ZlcndyaXRlID0gJG92ZXJ3cml0ZTsKCX0KCQoJLy8gfX19CgkvLyB7e3sg
c2V0VGFibGVBdHRyaWJ1dGVzKCkKCQoJZnVuY3Rpb24gc2V0VGFibGVBdHRyaWJ1dGVzICgk
YXR0cmlidXRlcykgewoJCgkJaWYgKCR0aGlzLT5vdmVyd3JpdGUpIHsKCgkJCSR0aGlzLT5i
Z2NvbG9yID0gJGF0dHJpYnV0ZXNbImJnY29sb3IiXTsKCQkJJHRoaXMtPmJvcmRlciA9ICRh
dHRyaWJ1dGVzWyJib3JkZXIiXTsKCQkJJHRoaXMtPndpZHRoID0gJGF0dHJpYnV0ZXNbIndp
ZHRoIl07CgkJCSR0aGlzLT5jZWxsc3BhY2luZyA9ICRhdHRyaWJ1dGVzWyJjZWxsc3BhY2lu
ZyJdOwoJCQkkdGhpcy0+Y2VsbHBhZGRpbmcgPSAkYXR0cmlidXRlc1siY2VsbHBhZGRpbmci
XTsKCQkJJHRoaXMtPmJhY2tncm91bmQgPSAkYXR0cmlidXRlc1siYmFja2dyb3VuZCJdOwoJ
CQoJCX0gZWxzZSB7CgoJCQlpZiAoJGF0dHJpYnV0ZXNbImJnY29sb3IiXSkgJHRoaXMtPmJn
Y29sb3IgPSAkYXR0cmlidXRlc1siYmdjb2xvciJdOwoJCQlpZiAoJGF0dHJpYnV0ZXNbImJv
cmRlciJdKSAkdGhpcy0+Ym9yZGVyID0gJGF0dHJpYnV0ZXNbImJvcmRlciJdOwoJCQlpZiAo
JGF0dHJpYnV0ZXNbIndpZHRoIl0pICR0aGlzLT53aWR0aCA9ICRhdHRyaWJ1dGVzWyJ3aWR0
aCJdOwoJCQlpZiAoJGF0dHJpYnV0ZXNbImNlbGxzcGFjaW5nIl0pICR0aGlzLT5jZWxsc3Bh
Y2luZyA9ICRhdHRyaWJ1dGVzWyJjZWxsc3BhY2luZyJdOwoJCQlpZiAoJGF0dHJpYnV0ZXNb
ImNlbGxwYWRkaW5nIl0pICR0aGlzLT5jZWxscGFkZGluZyA9ICRhdHRyaWJ1dGVzWyJjZWxs
cGFkZGluZyJdOwoJCQlpZiAoJGF0dHJpYnV0ZXNbImJhY2tncm91bmQiXSkgJHRoaXMtPmJh
Y2tncm91bmQgPSAkYXR0cmlidXRlc1siYmFja2dyb3VuZCJdOwoJCX0KCX0JCgoJLy8gfX19
CgkvLyB7e3sgc2V0Q2FwdGlvbigpCgkKCWZ1bmN0aW9uIHNldENhcHRpb24gKCRjYXB0aW9u
LCAkY2FwdGlvbl9hbGlnbj0iIikgewkKCQkkdGhpcy0+Y2FwdGlvbiA9ICRjYXB0aW9uOwoJ
CWlmICgkY2FwdGlvbl9hbGlnbiA9PSAiVE9QIiB8fCAkY2FwdGlvbl9hbGlnbiA9PSAiQk9U
VE9NIikgewoJCQkkdGhpcy0+Y2FwdGlvbl9hbGlnbiA9ICRjYXB0aW9uX2FsaWduOwoJCX0g
ZWxzZSB7CgkJCSRlcnJvcltdID0gInNldENhcHRpb24gOiBJbnZhbGlkIEFsaWdubWVudFxu
IjsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCX0JCgkKCS8vIH19fQoJLy8ge3t7IHNldENlbGxD
b250ZW50KCkKCQoJZnVuY3Rpb24gc2V0Q2VsbENvbnRlbnQgKCRyb3csICRjb2wsICRjb250
ZW50PSIiKSB7CQoJCQkJCgkJaWYgKCRyb3cgPiAkdGhpcy0+cm93KSB7CgkJCWlmICgkdGhp
cy0+YXV0b2dyb3cpIHsKCQkJCSR0aGlzLT5yb3cgPSAkcm93OwoJCQl9IGVsc2UgewoJCQkJ
JGVycm9yW10gPSAic2V0Q2VsbENvbnRlbnQgOiBJbnZhbGlkIHRhYmxlIHJvdyByZWZlcmVu
Y2UiOwoJCQl9CgkJfQoKCQlpZiAoJGNvbCA+ICR0aGlzLT5jb2wpIHsKCQkJaWYgKCR0aGlz
LT5hdXRvZ3JvdykgewoJCQkJJHRoaXMtPmNvbCA9ICRjb2w7CgkJCX0gZWxzZSB7CgkJCQkk
ZXJyb3JbXSA9ICJzZXRDZWxsQ29udGVudCA6IEludmFsaWQgdGFibGUgY29sdW1uIHJlZmVy
ZW5jZSI7CgkJCX0KCQl9CgkJCgkJJHRoaXMtPmNlbGxjb250ZW50WyIkcm93OiRjb2wiXSA9
ICRjb250ZW50OwoKCX0JCgoJLy8gfX19CgkvLyB7e3sgZ2V0Q2VsbCgpCgkKCWZ1bmN0aW9u
IGdldENlbGwgKCRyb3csICRjb2wpIHsJCQoJCXJldHVybiAkdGhpcy0+Y2VsbGNvbnRlbnRb
IiRyb3c6JGNvbCJdOwoJfQoKCS8vIH19fQoJLy8ge3t7IHNldENlbGxBdHRyaWJ1dGVzKCkK
CQoJZnVuY3Rpb24gc2V0Q2VsbEF0dHJpYnV0ZXMgKCRyb3csICRjb2wsICRhdHRyaWJ1dGVz
KSB7CgkJCgkJaWYgKCR0aGlzLT5vdmVyd3JpdGUpIHsKCgkJCSR0aGlzLT5jZWxsYWxpZ25b
IiRyb3c6JGNvbCJdID0gJGF0dHJpYnV0ZXNbImFsaWduIl07CgkJCSR0aGlzLT5jZWxsdmFs
aWduWyIkcm93OiRjb2wiXSA9ICRhdHRyaWJ1dGVzWyJ2YWxpZ24iXTsKCQkJJHRoaXMtPmNl
bGxoZWFkWyIkcm93OiRjb2wiXSA9ICRhdHRyaWJ1dGVzWyJoZWFkIl07CgkJCSR0aGlzLT5j
ZWxsbm93cmFwWyIkcm93OiRjb2wiXSA9ICRhdHRyaWJ1dGVzWyJub3dyYXAiXTsKCQkJJHRo
aXMtPmNlbGx3aWR0aFsiJHJvdzokY29sIl0gPSAkYXR0cmlidXRlc1sid2lkdGgiXTsKCQkJ
JHRoaXMtPmNlbGxoZWlnaHRbIiRyb3c6JGNvbCJdID0gJGF0dHJpYnV0ZXNbImhlaWdodCJd
OwoJCQkkdGhpcy0+Y2VsbGJnY29sb3JbIiRyb3c6JGNvbCJdID0gJGF0dHJpYnV0ZXNbImJn
Y29sb3IiXTsKCQkJJHRoaXMtPmNlbGxzdGFydHN0cmluZ1siJHJvdzokY29sIl0gPSAkYXR0
cmlidXRlc1sic3RhcnRzdHJpbmciXTsKCQkJJHRoaXMtPmNlbGxlbmRzdHJpbmdbIiRyb3c6
JGNvbCJdID0gJGF0dHJpYnV0ZXNbImVuZHN0cmluZyJdOwoJCQoJCX0gZWxzZSB7CgoJCQlp
ZiAoJGF0dHJpYnV0ZXNbImFsaWduIl0pICR0aGlzLT5jZWxsYWxpZ25bIiRyb3c6JGNvbCJd
ID0gJGF0dHJpYnV0ZXNbImFsaWduIl07CgkJCWlmICgkYXR0cmlidXRlc1sidmFsaWduIl0p
ICR0aGlzLT5jZWxsdmFsaWduWyIkcm93OiRjb2wiXSA9ICRhdHRyaWJ1dGVzWyJ2YWxpZ24i
XTsKCQkJaWYgKCRhdHRyaWJ1dGVzWyJoZWFkIl0pICR0aGlzLT5jZWxsaGVhZFsiJHJvdzok
Y29sIl0gPSAkYXR0cmlidXRlc1siaGVhZCJdOwoJCQlpZiAoJGF0dHJpYnV0ZXNbIm5vd3Jh
cCJdKSAkdGhpcy0+Y2VsbG5vd3JhcFsiJHJvdzokY29sIl0gPSAkYXR0cmlidXRlc1sibm93
cmFwIl07CgkJCWlmICgkYXR0cmlidXRlc1sid2lkdGgiXSkgJHRoaXMtPmNlbGx3aWR0aFsi
JHJvdzokY29sIl0gPSAkYXR0cmlidXRlc1sid2lkdGgiXTsKCQkJaWYgKCRhdHRyaWJ1dGVz
WyJoZWlnaHQiXSkgJHRoaXMtPmNlbGxoZWlnaHRbIiRyb3c6JGNvbCJdID0gJGF0dHJpYnV0
ZXNbImhlaWdodCJdOwoJCQlpZiAoJGF0dHJpYnV0ZXNbImJnY29sb3IiXSkgJHRoaXMtPmNl
bGxiZ2NvbG9yWyIkcm93OiRjb2wiXSA9ICRhdHRyaWJ1dGVzWyJiZ2NvbG9yIl07CgkJCWlm
ICgkYXR0cmlidXRlc1sic3RhcnRzdHJpbmciXSkgJHRoaXMtPmNlbGxzdGFydHN0cmluZ1si
JHJvdzokY29sIl0gPSAkYXR0cmlidXRlc1sic3RhcnRzdHJpbmciXTsKCQkJaWYgKCRhdHRy
aWJ1dGVzWyJlbmRzdHJpbmciXSkgJHRoaXMtPmNlbGxlbmRzdHJpbmdbIiRyb3c6JGNvbCJd
ID0gJGF0dHJpYnV0ZXNbImVuZHN0cmluZyJdOwoJCX0KCQkKCQlpZiAoJGF0dHJpYnV0ZXNb
InJvd3NwYW4iXSkgewoJCQkkdGhpcy0+Y2VsbHJvd3NwYW5bIiRyb3c6JGNvbCJdID0gJGF0
dHJpYnV0ZXNbInJvd3NwYW4iXTsKCQkJJHRoaXMtPnVwZGF0ZVNwYW5HcmlkICgkcm93LCAk
Y29sKTsKCQl9CgoJCWlmICgkYXR0cmlidXRlc1siY29sc3BhbiJdKSB7CgkJCSR0aGlzLT5j
ZWxsY29sc3BhblsiJHJvdzokY29sIl0gPSAkYXR0cmlidXRlc1siY29sc3BhbiJdOwoJCQkk
dGhpcy0+dXBkYXRlU3BhbkdyaWQgKCRyb3csICRjb2wpOwoJCX0KCX0JCgkJCgkvLyB9fX0K
CS8vIHt7eyBhZGRSb3coKQoJCglmdW5jdGlvbiBhZGRSb3cgKCRjb250ZW50KSB7CQkKCgkJ
ZW5kICgkY29udGVudCk7CgkJJGNvbCA9IGtleSAoJGNvbnRlbnQpOwoJCSRjb2wrKzsKCQkK
CQlpZiAoJGNvbCA+ICR0aGlzLT5jb2xzKSB7CgkJCSR0aGlzLT5jb2xzID0gJGNvbDsKCQl9
CgkJJHRoaXMtPnJvd3MrKzsKCgkJZm9yICgkaT0xOyRpIDw9ICRjb2wrMTskaSsrKSB7CgkJ
CSR0aGlzLT5jZWxsY29udGVudFsiJHRoaXMtPnJvd3M6JGkiXSA9ICRjb250ZW50WyRpLTFd
OwoJCX0KCX0KCQkKCQkKCS8vIH19fQoJLy8ge3t7IHNldFJvd0F0dHJpYnV0ZXMoKQoJCglm
dW5jdGlvbiBzZXRSb3dBdHRyaWJ1dGVzICgkcm93LCAkYXR0cmlidXRlcykgewoKCQlmb3Ig
KCRpID0gMTsgJGkgPD0gJHRoaXMtPmNvbHM7ICRpKyspIHsKCQkJJHRoaXMtPnNldENlbGxB
dHRyaWJ1dGVzKCRyb3csJGksJGF0dHJpYnV0ZXMpOwoJCX0KCX0KCQkKCS8vIH19fQoJLy8g
e3t7IGFsdFJvd0F0dHJpYnV0ZXMoKQoJCglmdW5jdGlvbiBhbHRSb3dBdHRyaWJ1dGVzICgk
c3RhcnRpbmdfcm93LCAkYXR0cmlidXRlMSwgJGF0dHJpYnV0ZTIpIHsKCgkJZm9yICgkcm93
ID0gJHN0YXJ0aW5nX3JvdyA7ICRyb3cgPD0gJHRoaXMtPnJvd3MgOyAkcm93KyspIHsKCQkK
CQkJJGF0dHJpYnV0ZXMgPSAoJHJvdyUyPT0wKSA/ICRhdHRyaWJ1dGUxIDogJGF0dHJpYnV0
ZTI7CgkJCSR0aGlzLT5zZXRSb3dBdHRyaWJ1dGVzKCRyb3csJGF0dHJpYnV0ZXMpOwoJCX0K
CX0KCgkvLyB9fX0KCS8vIHt7eyBjb3VudFJvd3MoKQoJCglmdW5jdGlvbiBjb3VudFJvd3Mg
KCkgewoJCgkJcmV0dXJuICR0aGlzLT5yb3dzOwoJfQoKCS8vIH19fQoJLy8ge3t7IGFkZENv
bCgpCgkKCWZ1bmN0aW9uIGFkZENvbCAoJGNvbnRlbnQpIHsJCQoKCQllbmQgKCRjb250ZW50
KTsKCQkkcm93ID0ga2V5ICgkY29udGVudCk7CgkJJHJvdysrOwoJCQoJCWlmICgkcm93ID4g
JHRoaXMtPnJvd3MpIHsKCQkJJHRoaXMtPnJvd3MgPSAkcm93OwoJCX0KCQkkdGhpcy0+Y29s
cysrOwoKCQlmb3IgKCRpPTE7JGkgPD0gJHJvdzskaSsrKSB7CgkJCSR0aGlzLT5jZWxsY29u
dGVudFsiJGk6JHRoaXMtPmNvbHMiXSA9ICRjb250ZW50WyRpLTFdOwoJCX0KCX0KCQkKCQkK
CS8vIH19fQoJLy8ge3t7IHNldENvbEF0dHJpYnV0ZXMoKQoJCglmdW5jdGlvbiBzZXRDb2xB
dHRyaWJ1dGVzICgkY29sLCAkYXR0cmlidXRlcykgewkJCgoJCWZvciAoJGkgPSAxOyAkaSA8
PSAkdGhpcy0+cm93czsgJGkrKykgewoJCQkkdGhpcy0+c2V0Q2VsbEF0dHJpYnV0ZXMoJGks
JGNvbCwkYXR0cmlidXRlcyk7CgkJfQoJfQoKCS8vIH19fQoJLy8ge3t7IGNvdW50Q29scygp
CgkKCWZ1bmN0aW9uIGNvdW50Q29scyAoKSB7CgkKCQlyZXR1cm4gJHRoaXMtPmNvbHM7Cgl9
CgoJLy8gfX19CgkvLyB7e3sgX3VwZGF0ZVNwYW5HcmlkKCkKCglmdW5jdGlvbiBfdXBkYXRl
U3BhbkdyaWQgKCRyb3csICRjb2wpIHsKCgkJJGNvbHNwYW4gPSAkdGhpcy0+Y2VsbGNvbHNw
YW5bIiRyb3c6JGNvbCJdOwoJCSRyb3dzcGFuID0gJHRoaXMtPmNlbGxyb3dzcGFuWyIkcm93
OiRjb2wiXTsKCQkKCQlpZiAoJGNvbHNwYW4pIHsKCQkJZm9yICgkaiA9ICRjb2wrMTsgKCgk
aiA8PSAkdGhpcy0+Y29scykgJiYgKCRqIDw9ICgkY29sICsgJGNvbHNwYW4gLSAxKSkpOyAk
aisrKSB7CgkJCQkkdGhpcy0+Y2VsbHNwYW5bIiRyb3c6JGoiXSA9ICJTUEFOTkVEIjsKCQkJ
fQoJCX0KCgkJaWYgKCRyb3dzcGFuKSB7CgkJCWZvciAoJGkgPSAkcm93KzE7ICgoJGkgPD0g
JHRoaXMtPnJvd3MpICYmICgkaSA8PSAoJHJvdyArICRyb3dzcGFuIC0gMSkpKTsgJGkrKykg
ewoJCQkJJHRoaXMtPmNlbGxzcGFuWyIkaTokY29sIl0gPSAiU1BBTk5FRCI7CgkJCX0KCQl9
CgkJCgkJaWYgKCRjb2xzcGFuICYmICRyb3dzcGFuKSB7CgkJCWZvciAoJGkgPSAkcm93KzE7
ICgoJGkgPD0gJHRoaXMtPnJvd3MpICYmICgkaSA8PSAoJHJvdyArICRyb3dzcGFuIC0gMSkp
KTsgJGkrKykgewoJCQkJZm9yICgkaiA9ICRjb2wrMTsgKCgkaiA8PSAkdGhpcy0+Y29scykg
JiYgKCRqIDw9ICgkY29sICsgJGNvbHNwYW4gLSAxKSkpOyAkaisrKSB7CgkJCQkJJHRoaXMt
PmNlbGxzcGFuWyIkaTokaiJdID0gIlNQQU5ORUQiOwoJCQkJfQoJCQl9CgkJfQoJfQoKfQo/
Pg==

--MS_Mac_OE_3067259865_1320580_MIME_Part--