[Biocorba-l] Part V - The final result (fwd)

Alan Robinson alan@ebi.ac.uk
Mon, 12 Feb 2001 18:33:33 +0000 (GMT Standard Time)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

--28951584-22591-981998880=:222
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.WNT.4.05.10102121740401.222@medusa.ebi.ac.uk>


Majordomo doesn't like large attachments, so I'll have to split the
last part of the message.

This one has the IDL.


---------- Forwarded message ----------
Date: Mon, 12 Feb 2001 18:30:34 +0000 (GMT Standard Time)
From: Alan Robinson <alan@ebi.ac.uk>
To: biocorba-l@biocorba.org
Subject: Part V - The final result

Finally...

Attached to this file is an IDL that takes into account my musings in my
last few e-mails with regard to location trees and composite sequence
features. I've also attached a "quasi-UML" diagram as drawn in PowerPoint
to try and illustrate the relationship between various objects.

I have not implemented this IDL. Mainly because it needs to be discussed
first and I really hope people comment on it (either positively or
negatively).

I'd really appreciate comments from people who understand the new bioperl
location/seqfeature model.


Best wishes,
Alan.

--
============================================================
Alan J. Robinson, D.Phil.             Tel:+44-(0)1223 494444
European Bioinformatics Institute     Fax:+44-(0)1223 494468
EMBL Outstation - Hinxton             Email:  alan@ebi.ac.uk
Wellcome Trust Genome Campus
Hinxton, Cambridge
CB10 1SD, UK                http://industry.ebi.ac.uk/~alan/
============================================================





--28951584-22591-981998880=:222
Content-Type: APPLICATION/OCTET-STREAM; NAME="BioCorba-TNG.idl"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.WNT.4.05.10102121728000.222@medusa.ebi.ac.uk>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME="BioCorba-TNG.idl"

Ly8gTm90ZXMgb24gdGhlIGJpb2NvcmJhIElETC4gCi8vCi8vIFZlcnNpb24g
QmlvQ29yYmEsIFRORy4KLy8KLy8gVGhpcyBJREwgaXMgZGVzaWduZWQgdG8g
YmUgcHJldHR5IHVuY29udHJvdmVyc2lhbCBhbmQgc2ltcGxlLiBJdCBpcwov
LyB1c2luZyBzdGFuZGFyZCBDT1JCQSBmZWF0dXJlcywgYW5kIGNvbnRhaW5z
IG5vIHZhbHVldHlwZXMgb3IKLy8gYW55J3MuIFRoaXMgSURMIHdpbGwgd29y
ayB3aXRoIE9SQmFjdXMgJiBKYXZhT1JCIGZvciBKYXZhLCBPUkJpdAovLyBm
b3IgcGVybCwgYW5kID8/PyBmb3IgUHl0aG9uLgovLwovLyBUaGlzIElETCBp
cyBkZXNpZ25lZCBmb3IgYmlvbG9naWNhbCBzZXF1ZW5jZXMgYW5kIHRoZWly
Ci8vIGZlYXR1cmVzLiAKCgovLyBUaGlzIGNvbWVzIGRpcmVjdGx5IGZyb20g
dGhlIEdOT01FIGJvbm9ib28gbW9kZWwuCi8vIEl0IGFsbG93cyBtZW1vcnkg
bWFuYWdlbWVudCB2aWEgcmVmIGFuZCB1bnJlZiBjYWxscy4KLy8gVGhlIHF1
ZXJ5X2ludGVyZmFjZSBpcyBub3QgaW1wb3J0YW50IGZvciB0aGlzIGNhc2Us
Ci8vIGJ1dCBoZXJlIGZvciBjb21wbGV0ZW5lc3MuCm1vZHVsZSBHTk9NRSB7
CiAgaW50ZXJmYWNlIFVua25vd24gCiAgewogICAgdm9pZCByZWYoKTsKICAg
IHZvaWQgdW5yZWYoKTsKICAgIE9iamVjdCBxdWVyeV9pbnRlcmZhY2UoaW4g
c3RyaW5nIHJlcG9pZCk7CiAgfTsKfTsKIAoKLy8gVGhlc2UgYXJlIHRoZSBi
aW9sb2dpY2FsIG9iamVjdHMgdGhhdCBhcmUgZGVmaW5lZDoKLy8gCi8vIDEp
IFRoZXJlIGFyZSB0aHJlZSBsZXZlbHMgb2Ygb2JqZWN0IGRlc2NyaWJpbmcg
YmlvbG9naWNhbAovLyBzZXF1ZW5jZXM6IEFub255bW91c1NlcSwgUHJpbWFy
eVNlcSBhbmQgU2VxLiAKLy8KLy8gMikgT2JqZWN0cyB0aGF0IGRlc2NyaWJl
IHRoZSBmZWF0dXJlcyBvZiBiaW9sb2dpY2FsIHNlcXVlbmNlczoKLy8gQW5u
b3RhdGlvbiwgU2VxRmVhdHVyZSBhbmQgQ29tcG9zaXRlU2VxRmVhdHVyZS4K
Ly8gCi8vIDMpIE9iamVjdHMgdGhhdCBkZXNjcmliZSBsb2NhdGlvbnMgb2Yg
ZmVhdHVyZXMgb24gYSBiaW9sb2dpY2FsCi8vIHNlcXVlbmNlOiBTZXFGZWF0
dXJlTG9jYXRpb24gYW5kIFNlcUZlYXR1cmVMb2NhdGlvbk9wZXJhdG9yLgov
LwovLyA0KSBWZWN0b3IgYW5kIGl0ZXJhdG9yIG9iamVjdHMgdGhhdCBhbGxv
dyB1cyB0byBwcm9jZXNzIGxpc3RzIG9mCi8vIGJpb2xvZ2ljYWwgb2JqZWN0
cyBlYXNpbHkgYW5kIGFyZSBkZXNpZ25lZCBmb3IgbmV0d29yayBhY2Nlc3M6
Ci8vIFByaW1hcnlTZXFJdGVyYXRvciwgUHJpbWFyeVNlcVZlY3RvciwgQW5u
b3RhdGlvbkl0ZXJhdG9yLAovLyBBbm5vdGF0aW9uVmVjdG9yLCBTZXFGZWF0
dXJlSXRlcmF0b3IgYW5kIFNlcUZlYXR1cmVWZWN0b3IuCi8vCi8vIDUpIFRo
ZXJlIGFyZSB0aHJlZSBsZXZlbHMgb2Ygb2JqZWN0cyBkZXNjcmliaW5nIGJp
b2xvZ2ljYWwKLy8gZGF0YWJhc2VzOiBQcmltYXJ5U2VxREIsIFNlcURCIGFu
ZCBVcGRhdGVhYmxlU2VxREIuIEVhY2ggb25lCi8vIHByb3ZpZGVzIGEgcmlj
aGVyIGxldmVsIG9mIGZ1bmN0aW9uYWxpdHkgdGhhbiBpdHMgc3VwZXJjbGFz
cy4KLy8KLy8gNikgQSBmYWN0b3J5IG9iamVjdCB0aGF0IGNyZWF0ZXMgYW5k
IG1ha2VzIGF2YWlsYWJsZSBiaW9sb2dpY2FsCi8vIGRhdGFiYXNlIG9iamVj
dHM6IEJpb0Vudi4KLy8KLy8gNykgQSBjb2xsZWN0aW9uIG9mIEV4Y2VwdGlv
bnMgZm9yIHdoZW4gZXJyb3IgY29uZGl0aW9ucyBvY2N1ci4KCi8vIFRoZSBv
cmcuYmlvY29yYmEuc2VxY29yZSBwYWNrYWdlIGlzIHNvIHdlIGxvb2sgZ29v
ZCBpbiBKYXZhLgptb2R1bGUgb3JnIHsKICBtb2R1bGUgYmlvY29yYmEgewog
ICAgbW9kdWxlIHNlcWNvcmUgCiAgICB7CiAgICAgIC8vICoqKiBFWENFUFRJ
T05TICoqKgoKICAgICAgLy8gRXhjZXB0aW9uIHRocm93biB3aGVuIHRoZSBz
aXplIG9mIHRoZSBvYmplY3QgcmVxdWVzdGVkIGlzCiAgICAgIC8vIGxhcmdl
ciB0aGFuIHRoZSBzZXJ2ZXIgd2lsbCBhbGxvdy4KICAgICAgZXhjZXB0aW9u
IFJlcXVlc3RUb29MYXJnZSB7IHN0cmluZyByZWFzb247IGxvbmcgc3VnZ2Vz
dGVkX3NpemU7IH07IAoKICAgICAgLy8gRXhjZXB0aW9uIHRocm93biB3aGVu
IHZhbHVlcyBzcGVjaWZpZWQgYXJlIG91dHNpZGUgb2YgdGhlCiAgICAgIC8v
IGFsbG93ZWQgcmFuZ2UuCiAgICAgIGV4Y2VwdGlvbiBPdXRPZlJhbmdlIHsg
c3RyaW5nIHJlYXNvbjsgfTsKCiAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24g
d2hlbiB0aGUgbWV0aG9kIGhhcyByZWFjaGVkIHRoZSBlbmQgb2YgYQogICAg
ICAvLyBzdHJlYW0uCiAgICAgIGV4Y2VwdGlvbiBFbmRPZlN0cmVhbSB7IH07
ICAgICAgICAgICAgICAgICAgIAoKICAgICAgLy8gRXhjZXB0aW9uIHRocm93
biB3aGVuIHRoZSBvYmplY3QgbmVlZHMgdG8gYmUgdXBkYXRlZC4KICAgICAg
ZXhjZXB0aW9uIE5lZWRzVXBkYXRlIHsgc3RyaW5nIHJlYXNvbjsgfTsKCiAg
ICAgIC8vRXhjZXB0aW9uIHRocm93biB3aGVuIHRoZSByZXF1ZXN0ZWQgSUQg
ZG9lcyBub3QgZXhpc3QgaW4gYQogICAgICAvL2RhdGFiYXNlLgogICAgICBl
eGNlcHRpb24gRG9lc05vdEV4aXN0IHsgc3RyaW5nIHJlYXNvbjsgfTsKCiAg
ICAgIC8vIEEgZ2VuZXJhbCBleGNlcHRpb24gdGhyb3duIGZvciBvdGhlciBl
cnJvciBjb25kaXRpb25zLgogICAgICBleGNlcHRpb24gVW5hYmxlVG9Qcm9j
ZXNzIHsgc3RyaW5nIHJlYXNvbjsgfTsgCiAKCiAgICAgIC8vICoqKiBTSU1Q
TEUgVFlQRURFRlMgKioqCgogICAgICAvLyBEZWZpbmUgYW4gYXJyYXkgb2Yg
c3RyaW5nIG9iamVjdHMuCiAgICAgIHR5cGVkZWYgc2VxdWVuY2U8c3RyaW5n
PiBTdHJpbmdMaXN0OwogCiAgICAgIC8vIERlZmluZSBhbiBhcnJheSBvZiBs
b25nIHR5cGVzCiAgICAgIHR5cGVkZWYgc2VxdWVuY2U8bG9uZz4gTG9uZ0xp
c3Q7CgoKICAgICAgLy8gKioqIEdFTkVSQUwgT0JKRUNUUyAqKioqCgogICAg
ICAvLyBEZWZpbmUgYSBzdHJ1Y3QgdG8gaG9sZCBhIE5hbWUtVmFsdWVzIHBy
b3BlcnR5IG9iamVjdC4gVGhlCiAgICAgIC8vIE5hbWVWYWx1ZVNldCBpcyB1
c2VkIHRvIGhvbGQgc3RydWN0dXJlZCBhbm5vdGF0aW9uLgogICAgICBzdHJ1
Y3QgTmFtZVZhbHVlU2V0IAogICAgICB7CgkvLyBUaGUgbmFtZSBvZiB0aGUg
cHJvcGVydHkuCglzdHJpbmcgbmFtZTsKCgkvLyBUaGUgdmFsdWVzIG9mIHRo
ZSBuYW1lZCBwcm9wZXJ0eS4KCVN0cmluZ0xpc3QgdmFsdWVzOwogICAgICB9
OwogCiAgICAgIC8vIERlZmluZSBhbiBhcnJheSBvZiBOYW1lLVZhbHVlcyBw
cm9wZXJ0eSBvYmplY3RzLgogICAgICB0eXBlZGVmIHNlcXVlbmNlPE5hbWVW
YWx1ZVNldD4gTmFtZVZhbHVlU2V0TGlzdDsKIAoKICAgICAgLy8gKioqIEJJ
T0xPR0lDQUwgU0VRVUVOQ0UgT0JKRUNUUyAqKioqCgogICAgICAvLyBEZWZp
bmUgdHlwZSBjb2RlcyBmb3IgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBiaW9s
b2dpY2FsCiAgICAgIC8vIHNlcXVlbmNlLiBBcyBsb25nIGFzIHRoZSBudW1l
cmljYWwgdmFsdWVzIGZvciBwcmV2aW91c2x5CiAgICAgIC8vIGRlY2xhcmVk
IHR5cGVzIGRvIG5vdCBjaGFuZ2UsIHRoZW4gbmV3IHR5cGVzIG1heSBiZSBh
ZGRlZAogICAgICAvLyB3aXRob3V0IHRoZSByaXNrIG9mIGNsaWVudHMgdXNp
bmcgYW4gb2xkZXIgdmVyc2lvbiBicmVha2luZy4KICAgICAgLy8KICAgICAg
Ly9FbnVtcyBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSB0aGV5IGNhbiBsZWFk
IHRvIGV4YWN0bHkgdGhlc2UKICAgICAgLy9wcm9ibGVtcyBmb3IgY2xpZW50
IGFwcGxpY2F0aW9ucyB3aGVuIHRoZSBJREwgaXMgZXh0ZW5kZWQuIFRoZQog
ICAgICAvL25ldyAnY29uc3QnIHZhbHVlcyBhcmUgY29uc2lzdGVudCB3aXRo
IHRoZSBwcmV2aW91cyBlbnVtCiAgICAgIC8vdmFsdWVzLgogICAgICBpbnRl
cmZhY2UgU2VxVHlwZSAKICAgICAgewoJLy9UeXBlIGNvZGVzIGZvciBkaWZm
ZXJlbnQgdHlwZXMgb2YgYmlvbG9naWNhbCBzZXF1ZW5jZS4KCWNvbnN0IHNo
b3J0IFBST1RFSU4gPSAwOwoJY29uc3Qgc2hvcnQgRE5BID0gMTsKCWNvbnN0
IHNob3J0IFJOQSA9IDI7CgoJLy8gUmVwcmVzZW50cyBhbnl0aGluZyB0aGF0
IGlzIG9mIHVua25vd24gdHlwZS4KCWNvbnN0IHNob3J0IFVOS05PV04gPSAt
MTsKICAgICAgfTsKIAoKICAgICAgLy8gSW50ZXJmYWNlIGZvciBhbiB1bHRy
YSBsaWdodHdlaWdodCBiaW9sb2dpY2FsIHNlcXVlbmNlIG9iamVjdC4KICAg
ICAgLy8gQW5vbnltb3VzU2VxIGlzIHRoZSBzZXF1ZW5jZSBpbmZvcm1hdGlv
biBvbmx5LgogICAgICBpbnRlcmZhY2UgQW5vbnltb3VzU2VxIDogR05PTUU6
OlVua25vd24gCiAgICAgIHsKCS8vIFJldHVybiB0aGUgdHlwZSBvZiB0aGUg
YmlvbG9naWNhbCBzZXF1ZW5jZSwgZS5nLiBQUk9URUlOLAoJLy8gUk5BLCBE
TkEsIGV0Yy4gYXMgZGVmaW5lZCB1c2luZyB0aGUgdHlwZSBjb2RlcyBkZWNs
YXJlZCBpbgoJLy8gdGhlIFNlcVR5cGUgaW50ZXJmYWNlLgoJc2hvcnQgdHlw
ZSgpOyAKCgkvLyBSZXR1cm4gd2hldGhlciB0aGUgYmlvbG9naWNhbCBzZXF1
ZW5jZSBpcyBjaXJjdWxhciBvcgoJLy8gbGluZWFyLgoJYm9vbGVhbiBpc19j
aXJjdWxhcigpOwoKCS8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBiaW9s
b2dpY2FsIHNlcXVlbmNlLgoJbG9uZyBsZW5ndGgoKTsKCgkvLyBSZXR1cm4g
dGhlIGJpb2xvZ2ljYWwgc2VxdWVuY2UgYXMgYSBzdHJpbmcuCglzdHJpbmcg
c2VxKCkgCgkgIHJhaXNlcyAoUmVxdWVzdFRvb0xhcmdlKTsKCgkvLyBSZXR1
cm4gYSBzdWItc3RyaW5nIG9mIHRoZSBiaW9sb2dpY2FsIHNlcXVlbmNlLiBU
aGUgc3RhcnQKCS8vIGFuZCBlbmQgdmFsdWVzIGFyZSBpbiBiaW9sb2dpY2Fs
IGNvb3JkaW5hdGVzLCBpLmUuLCAxLTIgYXJlCgkvLyB0aGUgZmlyc3QgdHdv
IGJhc2VzLgoJc3RyaW5nIHN1YnNlcShpbiBsb25nIHN0YXJ0LAoJCSAgICAg
IGluIGxvbmcgZW5kKSAKCSAgcmFpc2VzIChPdXRPZlJhbmdlLAoJCSAgUmVx
dWVzdFRvb0xhcmdlKTsKICAgICAgfTsKIAoKICAgICAgLy8gSW50ZXJmYWNl
IGZvciBhIGxpZ2h0d2VpZ2h0IGJpb2xvZ2ljYWwgc2VxdWVuY2Ugb2JqZWN0
LiBBCiAgICAgIC8vIFByaW1hcnlTZXF1ZW5jZSBvYmplY3QgcmVwcmVzZW50
cyBqdXN0IHRoZSBzZXF1ZW5jZQogICAgICAvLyBpbmZvcm1hdGlvbiBhbmQg
aWRlbnRpdHkgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gcHJvY2VzcyB0aGUK
ICAgICAgLy8gc2VxdWVuY2UsIHN0b3JlIHJlc3VsdHMsIGV0Yy4KICAgICAg
Ly8KICAgICAgLy8gUHJpbWFyeVNlcSBkZWZpbmVzIHRocmVlIGRpZmZlcmVu
dCB0eXBlcyBvZiBJRCwgd2hpY2ggbWF5IGFsbAogICAgICAvLyBoYXZlIHRo
ZSBpZGVudGljYWwgdmFsdWUuCiAgICAgIGludGVyZmFjZSBQcmltYXJ5U2Vx
IDogQW5vbnltb3VzU2VxIAogICAgICB7CgkvLyBSZXR1cm4gdGhlIElEIHRv
IGJlIHVzZWQgZm9yIGRpc3BsYXkgcHVycG9zZXMuCglzdHJpbmcgZGlzcGxh
eV9pZCgpOwoKCS8vIFJldHVybiB0aGUgSUQgdG8gdXNlZCBhcyBhIHVuaXF1
ZSBJRCBmb3IgdGhpcyBzZXF1ZW5jZSwKCS8vIGUuZy4gdGhlIGFjY2Vzc2lv
biBudW1iZXIgb3IgdGhlIGJ5dGUgcG9zaXRpb24vZmlsZSBtdW5nZWQKCS8v
IGludG8gYSBzdHJpbmcuCglzdHJpbmcgcHJpbWFyeV9pZCgpOyAgICAgICAg
CgoJLy8gUmV0dXJuIHRoZSB1bmlxdWUgSUQgZm9yIHRoZSBQcmltYXJ5U2Vx
IGluIGl0cyBiaW9sb2dpY2FsCgkvLyBkYXRhYmFzZS4KCXN0cmluZyBhY2Nl
c3Npb25fbnVtYmVyKCk7ICAKCQoJLy8gUmV0dXJuIHRoZSAodW5zdGFibGUp
IHZlcnNpb24gbnVtYmVyIGZvciB0aGUgc2VxdWVuY2UuIFRoaXMKCS8vIGlz
IDAgZm9yIFByaW1hcnlTZXEgb2JqZWN0cyB0aGF0IGRvIG5vdCBoYXZlIGEg
dmVyc2lvbgoJLy8gbnVtYmVyLgoJbG9uZyB2ZXJzaW9uKCk7ICAgIAogICAg
ICB9OwogCgogICAgICAvLyBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIEFubm90
YXRpb25WZWN0b3IgaW50ZXJmYWNlLgogICAgICBpbnRlcmZhY2UgQW5ub3Rh
dGlvblZlY3RvcjsKCiAgICAgIC8vIEZvcndhcmQgZGVjbGFyYXRpb24gb2Yg
U2VxRmVhdHVyZVZlY3RvciBpbnRlcmZhY2UuCiAgICAgIGludGVyZmFjZSBT
ZXFGZWF0dXJlVmVjdG9yOwogCiAgICAgIC8vIEludGVyZmFjZSBmb3IgYSBi
aW9sb2dpY2FsIHNlcXVlbmNlIG9iamVjdC4gTm90aWNlIHRoYXQgdGhlCiAg
ICAgIC8vIFNlcSBvYmplY3QgYm90aCBpbmhlcml0cyBmcm9tIHRoZSBQcmlt
YXJ5U2VxIGludGVyZmFjZSBhbmQKICAgICAgLy8gYWxzbyBoYXMtYSBQcmlt
YXJ5U2VxIGludGVyZmFjZS4gVGhpcyBpcyBkZWxpYmVyYXRlIHNvIHRoYXQg
YQogICAgICAvLyBjbGllbnQgbWF5IGluZGljYXRlIHdoZW4gdGhleSB3YW50
IHRvIGRpc2NhcmQgYSBjb21wbGV0ZSBTZXEKICAgICAgLy8gb2JqZWN0IHdp
dGggU2VxRmVhdHVyZSBmZWF0dXJlcyBieSBmcmVlaW5nIGl0LCB3aGlsc3QK
ICAgICAgLy8gcmV0YWluaW5nIGEgcmVmZXJlbmNlIHRvIGEgbGlnaHR3ZWln
aHQgUHJpbWFyeVNlcSBvYmplY3QgZm9yCiAgICAgIC8vIGl0LgogICAgICBp
bnRlcmZhY2UgU2VxIDogUHJpbWFyeVNlcSAKICAgICAgewoJLy8gUmV0dXJu
IGFuIEFubm90YXRpb25WZWN0b3IgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIGFs
bCB0aGUKCS8vIEFubm90YXRpb24gb2JqZWN0cyBvZiB0aGUgU2VxLgoJQW5u
b3RhdGlvblZlY3RvciBhbm5vdGF0aW9ucygpOwoKCS8vIFJldHVybiBhIFNl
cUZlYXR1cmVWZWN0b3IgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIGFsbCB0aGUK
CS8vIFNlcUZlYXR1cmUgb2JqZWN0cyBhbG9uZyB0aGUgU2VxLiAKCVNlcUZl
YXR1cmVWZWN0b3IgZ2V0X1NlcUZlYXR1cmVzKCk7CgkKCS8vIFJldHVybiBh
IFNlcUZlYXR1cmVWZWN0b3IgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIGFsbCB0
aGUKCS8vIFNlcUZlYXR1cmUgb2JqZWN0cyBhbG9uZyB0aGUgU2VxIG9mIGEg
cGFydGljdWxhciB0eXBlLAoJLy8gZS5nLiBleG9uLiAKCVNlcUZlYXR1cmVW
ZWN0b3IgZ2V0X1NlcUZlYXR1cmVzX2J5X3R5cGUoaW4gc3RyaW5nIHR5cGUp
OwoJCgkvLyBSZXR1cm4gYSBTZXFGZWF0dXJlVmVjdG9yIHRoYXQgYWxsb3dz
IGFjY2VzcyB0byBhbGwgdGhlCgkvLyBTZXFGZWF0dXJlIG9iamVjdHMgYWxv
bmcgdGhlIGdpdmVuIHJhbmdlIG9mIHRoZSBTZXEuIAoJU2VxRmVhdHVyZVZl
Y3RvciBnZXRfU2VxRmVhdHVyZXNfaW5fcmVnaW9uKGluIGxvbmcgc3RhcnQs
CgkJCQkJCSAgIGluIGxvbmcgZW5kKSAKCSAgcmFpc2VzIChPdXRPZlJhbmdl
KTsKCQoJLy8gUmV0dXJuIGEgU2VxRmVhdHVyZVZlY3RvciB0aGF0IGFsbG93
cyBhY2Nlc3MgdG8gYWxsIHRoZQoJLy8gU2VxRmVhdHVyZSBvYmplY3RzIGFs
b25nIHRoZSBnaXZlbiByYW5nZSBvZiB0aGUgU2VxIG9mIGEKCS8vIHBhcnRp
Y3VsYXIgdHlwZSwgZS5nLiBleG9uLiAKCVNlcUZlYXR1cmVWZWN0b3IgZ2V0
X1NlcUZlYXR1cmVzX2luX3JlZ2lvbl9ieV90eXBlKGluIGxvbmcgc3RhcnQs
CgkJCQkJCQkgICBpbiBsb25nIGVuZCwgCgkJCQkJCQkgICBpbiBzdHJpbmcg
dHlwZSkgCgkgIHJhaXNlcyAoT3V0T2ZSYW5nZSk7CgkKCS8vIFJldHVybiBh
IHJlZmVyZW5jZSB0byBhIFByaW1hcnlTZXEgZm9yIHRoaXMgU2VxIG9iamVj
dC4KCS8vIFRoaXMgaXMgc28gdGhhdCBjbGllbnRzIG1heSBhc2sgc2VydmVy
cyBmb3IganVzdCB0aGUKCS8vIHNlcXVlbmNlIGFuZCB0aGVuIGZyZWUgdGhl
IFNlcSBvYmplY3QgYW5kIGFsbCBpdHMKCS8vIGFzc29jaWF0ZWQgU2VxRmVh
dHVyZSBvYmplY3RzLgoJUHJpbWFyeVNlcSBnZXRfUHJpbWFyeVNlcSgpOyAK
ICAgICAgfTsgIAogCgogICAgICAvLyAqKiogU0VRVUVOQ0UgQU5OT1RBVElP
TiBPQkpFQ1RTICoqKgoKCiAgICAgIC8vIERlZmluZSBhbiBBbm5vdGF0aW9u
IG9iamVjdC4gQW5ub3RhdGlvbnMgZGVzY3JpYmUgaW5mb3JtYXRpb24KICAg
ICAgLy8gdGhhdCBpcyBvZiByZWxldmFuY2UgdG8gdGhlIHdob2xlIHNlcXVl
bmNlLCBub3QganVzdCBhIHBvcnRpb24gCiAgICAgIC8vIG9mIGl0IChjLmYu
IFNlcUZlYXR1cmUpLgogICAgICBpbnRlcmZhY2UgQW5ub3RhdGlvbiA6IEdO
T01FOjpVbmtub3duIAogICAgICB7CgkvLyBSZXR1cm4gdGhlIHR5cGUgb2Yg
dGhlIEFubm90YXRpb24sIGUuZy4gZXhvbiwgcmVwZWF0LCBldGMuCglzdHJp
bmcgdHlwZSgpOyAgICAgICAgICAgCgoJLy8gUmV0dXJuIHRoZSBzb3VyY2Ug
b2YgdGhlIEFubm90YXRpb24uIFRoaXMgaXMgaW5jbHVkZWQKCS8vIG1haW5s
eSBmb3IgR0ZGIGNvbXBhdGliaWxpdHkuCglzdHJpbmcgc291cmNlKCk7ICAg
ICAgICAgCgoJLy8gUmV0dXJuIHRoZSBwcmltYXJ5IElEIG9mIHRoZSBTZXEg
dGhhdCB0aGlzIEFubm90YXRpb24KCS8vIGJlbG9uZ3MgdG8uCglzdHJpbmcg
c2VxX3ByaW1hcnlfaWQoKTsgCgoJLy8gUmV0dXJuIGFkZGl0aW9uYWwgYW5u
b3RhdGlvbiBmb3IgdGhlIEFubm90YXRpb24gd2hpY2ggaXMKCS8vIHN0b3Jl
ZCBhcyBOYW1lLVZhbHVlcyBwcm9wZXJ0eSBvYmplY3RzLgoJTmFtZVZhbHVl
U2V0TGlzdCBxdWFsaWZpZXJzKCk7IAogICAgICB9OwoKCiAgICAgIC8vICoq
KiBTRVFVRU5DRSBGRUFUVVJFIExPQ0FUSU9OIE9CSkVDVFMgKioqCgogICAg
ICAvLyBBIHNlcXVlbmNlIGZlYXR1cmUgbG9jYXRpb24gaW4gR2VuQmFuayBv
ciBFTUJMIHVzdWFsbHkgbG9va3MKICAgICAgLy8gbGlrZToKICAgICAgLy8g
CiAgICAgIC8vICAgICAgam9pbigxLi4xMDAsb25lLW9mKDEyMC4uMjAwLCAx
NTYuLjIwMCkpCiAgICAgIC8vCiAgICAgIC8vIFRoaXMgbWF5IGJlIHJlcHJl
c2VudGVkIGFzIGEgdHJlZToKICAgICAgLy8KICAgICAgLy8gICAgICAgICAg
ICBqb2luCiAgICAgIC8vICAgICAgICAgICAvICAgIFwKICAgICAgLy8gICAg
ICAgICAgLyAgICAgIFwKICAgICAgLy8gICAgICAoMS4uMTAwKSBvbmUtb2YK
ICAgICAgLy8gICAgICAgICAgICAgICAvICAgIFwKICAgICAgLy8gICAgICAg
ICAgICAgIC8gICAgICBcCiAgICAgIC8vICAgICAgICgxMjAuLjIwMCkgICgx
NTYuLjIwMCkKICAgICAgLy8KICAgICAgLy8gVGhpcyB0cmVlIGhhcyAoYSkg
bG9jYXRpb25zIChlLmcuIDEuLjEwMCkgYW5kIChiKSBvcGVyYXRpb25zCiAg
ICAgIC8vIHRoYXQgd29yayBvbiBsb2NhdGlvbnMsIGUuZy4gJ2pvaW4nIGFu
ZCAnb25lLW9mJy4gSW4gdGhpcwogICAgICAvLyBJREwsIHdlIHJlcHJlc2Vu
dCB0aGVzZSB0d28gY2xhc3NlcyBhcyAnU2VxRmVhdHVyZUxvY2F0aW9uJwog
ICAgICAvLyBhbmQgJ1NlcUZlYXR1cmVMb2NhdGlvbk9wZXJhdG9yJyByZXNw
ZWN0aXZlbHkuCiAgICAgIC8vCiAgICAgIC8vIEEgcmVxdWVzdCBmb3IgdGhl
IGxvY2F0aW9ucyBvZiBhIFNlcUZlYXR1cmUgd2lsbCByZXR1cm4KICAgICAg
Ly8gZWl0aGVyIGEgU2VxRmVhdHVyZUxvY2F0aW9uIG9yIGFub3RoZXIKICAg
ICAgLy8gU2VxRmVhdHVyZUxvY2F0aW9uT3BlcmF0b3IgKHRoYXQgY29udGFp
bnMgU2VxRmVhdHVyZUxvY2F0aW9ucwogICAgICAvLyBhbmQgZGVmaW5lcyBo
b3cgdGhlc2UgYXJlIHRvIGJlIGNvbWJpbmVkKS4KICAgICAgLy8KICAgICAg
Ly8gTi5CLiBTaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQgdHlwZSBvZiBhbiBv
YmplY3QgbWF5IGJlCiAgICAgIC8vIHJldHVybmVkIGF0IHJ1biB0aW1lIGZv
ciB0aGUgbG9jYXRpb24gb2YgYSBTZXFGZWF0dXJlLCB3ZQogICAgICAvLyBu
ZWVkIHRvIHVzZSB0aGUgQ09SQkEgJ3VuaW9uJyB0eXBlIGluIHRoZSBJREwu
CgogICAgICAvLyBBIFNlcUZlYXR1cmVMb2NhdGlvbiwgZS5nLiAoMS4uMTAw
KSwgaXMgc3BlY2lmaWVkIHVzaW5nCiAgICAgIC8vIFNlcUZlYXR1cmVQb3Np
dGlvbiBvYmplY3RzIHRvIGRlZmluZSBpdHMgc3RhcnQgYW5kIGVuZAogICAg
ICAvLyBwb2ludHMuCgogICAgICAvLyBBIHN0cnVjdCBkZWZpbmluZyB0aGUg
cHJvcGVydGllcyBvZiBhIHBvc2l0aW9uIG9uIGEKICAgICAgLy8gYmlvbG9n
aWNhbCBzZXF1ZW5jZSBpbiBiYXNlIGNvb3JkaW5hdGVzLgogICAgICB0eXBl
ZGVmIHNob3J0IEZ1enp5VHlwZUNvZGU7CiAgICAgIHN0cnVjdCBTZXFGZWF0
dXJlUG9zaXRpb24KICAgICAgewoJLy8gU3BlY2lmaWVzIHRoZSBwb3NpdGlv
biBvZiBhIFNlcUZlYXR1cmUgb24gYSBiaW9sb2dpY2FsCgkvLyBzZXF1ZW5j
ZS4KCWxvbmcgcG9zaXRpb247CgkKCS8vIFNwZWNpZmllcyB0aGUgZXh0ZW5z
aW9uIG9mIHRoZSBwb3NpdGlvbiwgZS5nLiBmb3IKCS8vICgxLjMuLjEyKSwg
dGhlIGV4dGVuc2lvbiBvZiB0aGUgc3RhcnQgcG9zaXRpb24gaXMgMi4gRm9y
CgkvLyAoMS4uMTIpLCB0aGUgZXh0ZW5zaW9uIG9mIGJvdGggdGhlIHN0YXJ0
IGFuZCBlbmQgcG9zaXRpb25zCgkvLyBpcyAwLgoJbG9uZyBleHRlbnNpb247
CgoJLy8gU3BlY2lmaWVzIHRoZSB0eXBlIGNvZGUgZGVzY3JpYmluZyB0aGUg
ZnV6enkgY2hhcmFjdGVyIG9mCgkvLyB0aGUgcG9zaXRpb24gYXMgc3BlY2lm
aWVkIGluIEZ1enp5VHlwZUNvZGVzIGludGVyZmFjZS4KCUZ1enp5VHlwZUNv
ZGUgZnV6enk7CiAgICAgIH07CgoKICAgICAgLy8gQSBzdHJ1Y3QgZGVjbGFy
aW5nIHR5cGUgY29kZXMgZm9yIGRpZmZlcmVudCB0eXBlcyBvZgogICAgICAv
LyBmdXp6aW5lc3MgcG9zc2libGUgZm9yIGEgcG9zaXRpb24gb24gYSBiaW9s
b2dpY2FsIHNlcXVlbmNlLgogICAgICBpbnRlcmZhY2UgRnV6enlUeXBlQ29k
ZXMgCiAgICAgIHsKCS8vIFBvc2l0aW9uIGlzICdleGFjdCcuCgljb25zdCBz
aG9ydCBFWEFDVCA9IDE7CgoJLy8gRXhhY3QgcG9zaXRpb24gaXMgdW5rbm93
biwgYnV0IGlzIHdpdGhpbiB0aGUgcmFuZ2UKCS8vIHNwZWNpZmllZCwgZS5n
LiBmb3IgKCgxLjIpLi4xMDApLCB0aGUgcG9zaXRpb24gaXMgMSBvciAyCgkv
LyBmb3IgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBsb2NhdGlvbi4KCWNv
bnN0IHNob3J0IFdJVEhJTiA9IDI7CgoJLy8gRXhhY3QgcG9zaXRpb24gaXMg
YmV0d2VlbiB0d28gb2YgdGhlIHBvc2l0aW9ucyBpbiB0aGUgcmFuZ2UKCS8v
IHNwZWNpZmllZCwgZS5nLiBmb3IgKDFeMiksIHRoZSBwb3NpdGlvbiBpcyBi
ZXR3ZWVuIGJhc2VzIDEKCS8vIGFuZCAyLgoJY29uc3Qgc2hvcnQgQkVUV0VF
TiA9IDM7CgoJLy8gRXhhY3QgbG93ZXIgYm91bmRhcnkgb2YgcG9zaXRpb24g
aXMgdW5rbm93biwgYnV0IHByZXZpb3VzCgkvLyB0byB0aGUgcG9zaXRpb24g
c3BlY2lmaWVkLCBlLmcuIGZvciAoPDEwLi4xMDApLCB0aGUKCS8vIHBvc2l0
aW9uIHN0YXJ0cyBiZWZvcmUgMTAgZm9yIHRoZSBzdGFydCBwb3NpdGlvbiBv
ZiB0aGUKCS8vIGxvY2F0aW9uLgoJY29uc3Qgc2hvcnQgQkVGT1JFID0gNDsK
CgkvLyBFeGFjdCB1cHBlciBib3VuZGFyeSBvZiBwb3NpdGlvbiBpcyB1bmtu
b3duLCBidXQgZm9sbG93aW5nCgkvLyB0aGUgcG9zaXRpb24gc3BlY2lmaWVk
LCBlLmcuIGZvciAoPjEwLi4xMDApLCB0aGUgcG9zaXRpb24KCS8vIHN0YXJ0
cyBhZnRlciAxMCBmb3IgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBsb2Nh
dGlvbi4KCWNvbnN0IHNob3J0IEFGVEVSID0gNTsKICAgICAgfTsKIAoKICAg
ICAgLy8gQSBzdHJ1Y3QgZGVmaW5pbmcgdGhlIHByb3BlcnRpZXMgb2YgYSBT
ZXFGZWF0dXJlTG9jYXRpb24KICAgICAgLy8gb2JqZWN0IHRoYXQgc3BlY2lm
aWVzIHRoZSBsb2NhdGlvbiBvZiBhIFNlcUZlYXR1cmUgYWxvbmcgYQogICAg
ICAvLyBiaW9sb2dpY2FsIHNlcXVlbmNlIHVzaW5nIHN0YXJ0IGFuZCBlbmQg
cG9zaXRpb25zLiBUaGVzZQogICAgICAvLyBwb3NpdGlvbnMgbWF5IGJlICdm
dXp6eScuIE4uQi4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZQogICAgICAvLyBs
b2NhdGlvbiAnam9pbigxLi4xMCwyMCknIGlzIGVxdWl2YWxlbnQgdG8KICAg
ICAgLy8gJ2pvaW4oMS4uMTAsMjAuLjIwKScuCiAgICAgIHN0cnVjdCBTZXFG
ZWF0dXJlTG9jYXRpb24gCiAgICAgIHsKCS8vIFNwZWNpZmllcyB0aGUgKGZ1
enp5KSBzdGFydCBwb3NpdGlvbiBvZiBhIFNlcUZlYXR1cmUgYWxvbmcKCS8v
IGEgYmlvbG9naWNhbCBzZXF1ZW5jZSB1c2luZyBhIFNlcUZlYXR1cmVQb3Np
dGlvbi4KCVNlcUZlYXR1cmVQb3NpdGlvbiBzdGFydDsKCgkvLyBTcGVjaWZp
ZXMgdGhlIChmdXp6eSkgZW5kIHBvc2l0aW9uIG9mIGEgU2VxRmVhdHVyZSBh
bG9uZyBhCgkvLyBiaW9sb2dpY2FsIHNlcXVlbmNlIHVzaW5nIGEgU2VxRmVh
dHVyZVBvc2l0aW9uLgoJU2VxRmVhdHVyZVBvc2l0aW9uIGVuZDsKCgkvLyBT
cGVjaWZpZXMgd2hpY2ggc3RyYW5kIG9mIHRoZSBTZXEgdGhlIFNlcUZlYXR1
cmVMb2NhdGlvbgoJLy8gbGllcyBvbi4gVmFsdWVzOiAtMSwwLDEgWy0xID0g
cmV2ZXJzZTsgMCA9IGVpdGhlcjsgMSA9CgkvLyBmb3J3YXJkXS4gSXJyZWxl
dmFudCBmb3IgcHJvdGVpbnMuCglzaG9ydCBzdHJhbmQ7ICAgICAgICAgIAog
ICAgICB9OwogCgogICAgICAvLyBEZWZpbmUgU2VxRmVhdHVyZUxvY2F0aW9u
VW5pb24gaGVyZSBhcyBDT1JCQSB1bmlvbidzIGNhbm5vdAogICAgICAvLyBi
ZSBmb3J3YXJkIGRlY2xhcmVkIGFuZCB0aGlzIG9iamVjdCBpcyByZXF1aXJl
ZCBpbiB0aGUKICAgICAgLy8gU2VxRmVhdHVyZUxvY2F0aW9uT3BlcmF0b3Ig
aW50ZXJmYWNlLiBTZXFGZWF0dXJlTG9jYXRpb25VbmlvbgogICAgICAvLyBp
cyBhIENPUkJBICd1bmlvbicgZm9yIHRoZSByZXR1cm4gb2YgZWl0aGVyIGEK
ICAgICAgLy8gU2VxRmVhdHVyZUxvY2F0aW9uIG9yIGEgU2VxRmVhdHVyZUxv
Y2F0aW9uT3BlcmF0b3Igb2JqZWN0LgoKICAgICAgLy8gV2hlbiB0aGUgJ2xv
Y2F0aW9uKCknIG1ldGhvZCBvZiBTZXFGZWF0dXJlLCBvciB0aGUKICAgICAg
Ly8gJ2xvY2F0aW9ucygpJyBtZXRob2Qgb2YgU2VxRmVhdHVyZUxvY2F0aW9u
T3BlcmF0b3IgaXMgY2FsbGVkLAogICAgICAvLyBpdCBpcyB1bmtub3duIGJl
Zm9yZSBydW4tdGltZSBpZiB0aGUgcmV0dXJuaW5nIG9iamVjdHMgd2lsbAog
ICAgICAvLyBiZSBlaXRoZXIgYSBTZXFGZWF0dXJlTG9jYXRpb24gb3IgYQog
ICAgICAvLyBTZXFGZWF0dXJlTG9jYXRpb25PcGVyYXRvciAoY29udGFpbmlu
ZyBvdGhlcgogICAgICAvLyBTZXFGZWF0dXJlTG9jYXRpb24gb2JqZWN0cyku
IFRoaXMgaXMgYmVjYXVzZSB0aGUgcmV0dXJuZWQKICAgICAgLy8gb2JqZWN0
cyB3aWxsIGRlcGVuZCB1cG9uIHRoZSBsb2NhdGlvbiBzdHJ1Y3R1cmUgb2Yg
dGhlCiAgICAgIC8vIHBhcnRpY3VsYXIgU2VxRmVhdHVyZSBpbiBxdWVzdGlv
bi4gVGh1cyBhIENPUkJBICd1bmlvbicgaXMKICAgICAgLy8gdXNlZCB0byBy
ZXR1cm4gb25lIG9mIHRoZSB0d28gcG9zc2libGUgb2JqZWN0cyB0aGF0IGFy
ZSB1c2VkCiAgICAgIC8vIHRvIGRlZmluZSB0aGUgbG9jYXRpb24gb2YgYSBT
ZXFGZWF0dXJlLgoKICAgICAgLy8gQW4gaW50ZXJmYWNlIHRoYXQgZGVmaW5l
cyB0aGUgdHlwZSBjb2RlcyBmb3IgdGhlIHBlcm1pc3NpYmxlCiAgICAgIC8v
IHR5cGVzIG9mIG9iamVjdCB0aGF0IHRoZSBTZXFGZWF0dXJlTG9jYXRpb25V
bmlvbiBtYXkgcmV0dXJuLgogICAgICBpbnRlcmZhY2UgU2VxRmVhdHVyZUxv
Y2F0aW9uVW5pb25UeXBlQ29kZXMKICAgICAgewogICAgICAgIGNvbnN0IHNo
b3J0IExPQ0FUSU9OID0gMDsKICAgICAgICBjb25zdCBzaG9ydCBPUEVSQVRP
UiA9IDE7CiAgICAgIH07CgogICAgICAvLyBmb3J3YXJkIGRlY2xhcmF0aW9u
IG9mIFNlcUZlYXR1cmVMb2NhdGlvbm9wZXJhdG9yLgogICAgICBpbnRlcmZh
Y2UgU2VxRmVhdHVyZUxvY2F0aW9uT3BlcmF0b3I7CgogICAgICAvLyBUaGUg
Q09SQkEgJ3VuaW9uJyBhcyB1c2VkIGJ5IHRoZSAnU2VxRmVhdHVyZScgYW5k
CiAgICAgIC8vICdTZXFGZWF0dXJlTG9jYXRpb25PcGVyYXRvcicgaW50ZXJm
YWNlcy4KICAgICAgdHlwZWRlZiBzaG9ydCBTZXFGZWF0dXJlTG9jYXRpb25V
bmlvblR5cGVDb2RlOwogICAgICB1bmlvbiBTZXFGZWF0dXJlTG9jYXRpb25V
bmlvbiBzd2l0Y2ggKFNlcUZlYXR1cmVMb2NhdGlvblVuaW9uVHlwZUNvZGUp
CiAgICAgIHsKICAgICAgICBjYXNlIFNlcUZlYXR1cmVMb2NhdGlvblVuaW9u
VHlwZUNvZGVzOjpMT0NBVElPTjogU2VxRmVhdHVyZUxvY2F0aW9uIGxvY2F0
aW9uOwogICAgICAgIGNhc2UgU2VxRmVhdHVyZUxvY2F0aW9uVW5pb25UeXBl
Q29kZXM6Ok9QRVJBVE9SOiBTZXFGZWF0dXJlTG9jYXRpb25PcGVyYXRvciBv
cGVyYXRvcjsKICAgICAgfTsKCgogICAgICAvLyBUaGUgU2VxRmVhdHVyZUxv
Y2F0aW9uT3BlcmF0b3Igb2JqZWN0IHNwZWNpZmllcyBob3cKICAgICAgLy8g
U2VxRmVhdHVyZUxvY2F0aW9uIG9iamVjdHMgaXQgY29udGFpbnMgYXJlIHRv
IGJlIGNvbWJpbmVkLgogICAgICBpbnRlcmZhY2UgU2VxRmVhdHVyZUxvY2F0
aW9uT3BlcmF0b3IgOiBHTk9NRTo6VW5rbm93bgogICAgICB7CiAgICAgICAg
dHlwZWRlZiBzaG9ydCBTZXFGZWF0dXJlTG9jYXRpb25PcGVyYXRvclR5cGVD
b2RlOwogICAgICAgIHR5cGVkZWYgc2VxdWVuY2U8U2VxRmVhdHVyZUxvY2F0
aW9uVW5pb24+IFNlcUZlYXR1cmVMb2NhdGlvblVuaW9uTGlzdDsKCgkvLyBS
ZXR1cm4gdGhlIHR5cGUgY29kZSB0aGF0IHNwZWNpZmllcyBob3cgdGhlCgkv
LyBTZXFGZWF0dXJlTG9jYXRpb24gb2JqZWN0cyBhcmUgdG8gYmUgY29tYmlu
ZWQsIGUuZy4gJ0pPSU4nCgkvLyBvciAnT1JERVInLgogICAgICAgIFNlcUZl
YXR1cmVMb2NhdGlvbk9wZXJhdG9yVHlwZUNvZGUgb3BlcmF0b3IoKTsKCgkv
LyBSZXR1cm4gdGhlIFNlcUZlYXR1cmVMb2NhdGlvbiBvYmplY3RzIHVwb24g
d2hpY2ggdGhlCgkvLyBvcGVyYXRvciBpcyB0byBhY3QuIElmIHRoZSBsb2Nh
dGlvbiBjYW5ub3QgYmUgbW9kZWxsZWQgYnkKCS8vIHRoaXMgSURMIHRoZW4g
YW4gZXhjZXB0aW9uIGlzIHRocm93bi4gVGhlIEV4Y2VwdGlvbgoJLy8gZGVz
Y3JpcHRpb24gc3RyaW5nIG1heSByZXR1cm4gdGhlIGFjdHVhbCBsb2NhdGlv
biBhcyBhCgkvLyBzdHJpbmcgZm9yIHBhcnNpbmcgYnkgYSBjbGllbnQuCiAg
ICAgICAgU2VxRmVhdHVyZUxvY2F0aW9uVW5pb25MaXN0IGxvY2F0aW9ucygp
CgkgIHJhaXNlcyAoVW5hYmxlVG9Qcm9jZXNzKTsKICAgICAgfTsKCgogICAg
ICAvLyBBbiBpbnRlcmZhY2UgdGhhdCBzcGVjaWZpZXMgdGhlIHR5cGUgY29k
ZXMgZm9yIHBlcm1pc3NpYmxlCiAgICAgIC8vIGxvY2F0aW9uIG9wZXJhdG9y
IHRoYXQgbWF5IGJlIHBlcmZvcm1lZCBvbiBTZXFGZWF0dXJlTG9jYXRpb24K
ICAgICAgLy8gb2JqZWN0KHMpLgogICAgICBpbnRlcmZhY2UgU2VxRmVhdHVy
ZUxvY2F0aW9uT3BlcmF0b3JUeXBlQ29kZXMKICAgICAgewogICAgICAgIGNv
bnN0IHNob3J0IEpPSU4gPSAwOwogICAgICAgIGNvbnN0IHNob3J0IE9SREVS
ID0gMTsKICAgICAgICBjb25zdCBzaG9ydCBPTkVfT0YgPSAyOwogICAgICAg
IGNvbnN0IHNob3J0IENPTVBMRU1FTlQgPSAzOwogICAgICB9OwoKCiAgICAg
IC8vIERlZmluZSBhIFNlcUZlYXR1cmUgb2JqZWN0LiBTZXFGZWF0dXJlcyBh
cmUgZmVhdHVyZXMgb24gYQogICAgICAvLyBzZXF1ZW5jZSBhbmQgaGF2ZSBh
IGRlZmluZWQgbG9jYXRpb24uIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmUKICAg
ICAgLy8gR0ZGIGNvbXBhdGlibGUuCiAgICAgIC8vCiAgICAgIC8vIE4uQi4g
VGhlICdsb2NhdGlvbicgcmV0dXJuZWQgZm9yIGEgU2VxRmVhdHVyZSByZWZl
cnMgdG8gdGhhdAogICAgICAvLyAndHlwZScgb2YgU2VxRmVhdHVyZSBvbmx5
LCBpLmUuIHRoZSBsb2NhdGlvbiBzaG91bGRuJ3QKICAgICAgLy8gaW5jbHVk
ZSBsb2NhdGlvbnMgc3BlY2lmaWMgdG8gc3ViLVNlcUZlYXR1cmVzIEUuZy4g
dGhlCiAgICAgIC8vIGxvY2F0aW9uIG9mIGEgJ2dlbmUnIFNlcUZlYXR1cmUg
bWF5IGJlIG1vZGVsbGVkIGFzIHRoZSBzdGFydAogICAgICAvLyBvZiB0aGUg
aW5pdGlhbCAnZXhvbicgYW5kIGVuZCBvZiB0aGUgZmluYWwgJ2V4b24nLCBi
dXQgaXQKICAgICAgLy8gcHJvYmFibHkgc2hvdWxkbid0IGJlIGRlZmluZWQg
aW4gdGVybXMgb2YgdGhlIGxvY2F0aW9ucyBvZgogICAgICAvLyB0aGUgb3Ro
ZXIgY29uc3RpdHVlbnQgZXhvbnMgYW5kIGludHJvbnMuIEhvd2V2ZXIsIGEg
J21STkEnCiAgICAgIC8vIFNlcUZlYXR1cmUgbWF5IGhhdmUgaXRzIGxvY2F0
aW9uIHNwZWNpZmllZCB1c2luZyB0aGUKICAgICAgLy8gbG9jYXRpb25zIG9m
IGFsbCB0aGUgY29uc3RpdHVlbnQgZXhvbnMuCgogICAgICBpbnRlcmZhY2Ug
U2VxRmVhdHVyZSA6IEFubm90YXRpb24KICAgICAgewoJLy8gUmV0dXJuIHRo
ZSBzdGFydCBpbiBiaW9sb2dpY2FsIGNvb3JkaW5hdGVzIG9mIHRoZQoJLy8g
U2VxRmVhdHVyZSBvbiB0aGUgU2VxICgxIGlzIHRoZSBmaXJzdCBiYXNlKS4K
CWxvbmcgc3RhcnQoKTsgICAgICAgICAgICAKCgkvLyBSZXR1cm4gdGhlIGVu
ZCBpbiBiaW9sb2dpY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBTZXFGZWF0dXJl
CgkvLyBvbiB0aGUgU2VxIChzdGFydD0xOmVuZD0yIGFyZSB0aGUgZmlyc3Qg
dHdvIGJhc2VzKS4KCWxvbmcgZW5kKCk7ICAgICAgICAgICAgICAKCgkvLyBS
ZXR1cm4gd2hpY2ggc3RyYW5kIG9mIHRoZSBTZXEgdGhlIFNlcUZlYXR1cmUg
bGllcwoJLy8gb24uIFZhbHVlczogLTEsMCwxIFstMSA9IHJldmVyc2U7IDAg
PSBlaXRoZXIvYm90aDsgMSA9CgkvLyBmb3J3YXJkXS4gSXJyZWxldmFudCBm
b3IgcHJvdGVpbnMuCglzaG9ydCBzdHJhbmQoKTsgICAgICAgICAgCgoJLy8g
UmV0dXJuIHRoZSBsb2NhdGlvbiBvZiB0aGlzIFNlcUZlYXR1cmUgYWxvbmcg
aXRzIFNlcSB1c2luZwoJLy8gU2VxRmVhdHVyZUxvY2F0aW9uIGFuZCBTZXFG
ZWF0dXJlTG9jYXRpb25PcGVyYXRvciBvYmplY3RzCgkvLyB2aWEgYSBDT1JC
QSAndW5pb24nLiAgVGhpcyBwcm92aWRlcyB0aGUgcm9vdCBvZiB0aGUKCS8v
ICdTZXFGZWF0dXJlTG9jYXRpb24gdHJlZScuIElmIHRoZSBsb2NhdGlvbiBj
YW5ub3QgYmUKCS8vIG1vZGVsbGVkIGJ5IHRoaXMgSURMIHRoZW4gYW4gZXhj
ZXB0aW9uIGlzIHRocm93bi4gVGhlCgkvLyBFeGNlcHRpb24gZGVzY3JpcHRp
b24gc3RyaW5nIG1heSByZXR1cm4gdGhlIGFjdHVhbCBsb2NhdGlvbgoJLy8g
YXMgYSBzdHJpbmcgZm9yIHBhcnNpbmcgYnkgYSBjbGllbnQuCglTZXFGZWF0
dXJlTG9jYXRpb25VbmlvbiBsb2NhdGlvbigpCgkgIHJhaXNlcyAoVW5hYmxl
VG9Qcm9jZXNzKTsKCgkvLyBEZXRlcm1pbmUgaWYgdGhlIFByaW1hcnlTZXEg
Zm9yIHRoaXMgU2VxRmVhdHVyZSBpcwoJLy8gYXZhaWxhYmxlLgoJYm9vbGVh
biBQcmltYXJ5U2VxX2lzX2F2YWlsYWJsZSgpOyAgCgkKCS8vIFJldHVybiB0
aGUgUHJpbWFyeVNlcSBmb3IgdGhpcyBTZXFGZWF0dXJlLCBpZiBpdCBpcwoJ
Ly8gYXZhaWxhYmxlLgoJUHJpbWFyeVNlcSBnZXRfUHJpbWFyeVNlcSgpIAoJ
ICByYWlzZXMgKFVuYWJsZVRvUHJvY2Vzcyk7IAogICAgICB9OwogCgogICAg
ICAvLyBBIFNlcUZlYXR1cmUgbWF5IGJlIGNvbXBvc2VkIG9mIG90aGVyIFNl
cUZlYXR1cmUgb2JqZWN0cywKICAgICAgLy8gZS5nLiBhICdnZW5lJyBTZXFG
ZWF0dXJlIG1heSBiZSBjb21wb3NlZCBvZiAnZXhvbicgYW5kCiAgICAgIC8v
ICdpbnRyb24nIFNlcUZlYXR1cmUgb2JqZWN0cyAoYW1vbmdzdCBvdGhlcnMp
LiBJbiBzdWNoIGNhc2VzLAogICAgICAvLyB0aGUgc2VxdWVuY2UgZmVhdHVy
ZSBzaG91bGQgYmUgbW9kZWxsZWQgYXMgYQogICAgICAvLyBDb21wb3NpdGVT
ZXFGZWF0dXJlIHRvIHByb3ZpZGUgYWNjZXNzIHRvIHRoZXNlIHN1Yi1TZXFG
ZWF0dXJlCiAgICAgIC8vIG9iamVjdHMuCiAgICAgIGludGVyZmFjZSBDb21w
b3NpdGVTZXFGZWF0dXJlIDogU2VxRmVhdHVyZQogICAgICB7CgkvLyBSZXR1
cm4gYSBTZXFGZWF1cmVWZWN0b3IgYWxsb3dpbmcgYWNjZXNzIHRvIHJlZmVy
ZW5jZXMgdG8KCS8vIHRoZSBzdWItU2VxRmVhdHVyZSBvYmplY3RzIG9mIHRo
aXMgQ29tcG9zaXRlU2VxRmVhdHVyZS4gCglTZXFGZWF0dXJlVmVjdG9yIHN1
Yl9TZXFGZWF0dXJlcygpOwogICAgICB9OwogICAgICAKCiAgICAgIC8vICoq
KiBJVEVSQVRPUlMgRk9SIEJJT0xPR0lDQUwgT0JKRUNUUyAqKioKCiAgICAg
IC8vIEFuIGludGVyZmFjZSB0byBhbiBpdGVyYXRvciBmb3IgUHJpbWFyeVNl
cSBvYmplY3RzLgogICAgICBpbnRlcmZhY2UgUHJpbWFyeVNlcUl0ZXJhdG9y
IDogR05PTUU6OlVua25vd24gCiAgICAgIHsKCS8vIFJldHVybiBhIHJlZmVy
ZW5jZSB0byB0aGUgbmV4dCBQcmltYXJ5U2VxIG9iamVjdCBpbiB0aGlzCgkv
LyBQcmltYXJ5U2VxSXRlcmF0b3IuCglQcmltYXJ5U2VxIG5leHQoKSAKCSAg
cmFpc2VzIChFbmRPZlN0cmVhbSk7CgoJLy8gUmV0dXJuIHdoZXRoZXIgdGhp
cyBQcmltYXJ5U2VxSXRlcmF0b3IgY2FuIHJldHVybiBhbm90aGVyCgkvLyBQ
cmltYXJ5U2VxIG9iamVjdC4KCWJvb2xlYW4gaGFzX21vcmUoKTsgCiAgICAg
IH07CiAKCiAgICAgIC8vIEFuIGludGVyZmFjZSB0byBhbiBpdGVyYXRvciBm
b3IgQW5ub3RhdGlvbiBvYmplY3RzLgogICAgICBpbnRlcmZhY2UgQW5ub3Rh
dGlvbkl0ZXJhdG9yIDogR05PTUU6OlVua25vd24gCiAgICAgIHsKCS8vIFJl
dHVybiB0aGUgbmV4dCBBbm5vdGF0aW9uIGluIHRoaXMgQW5ub3RhdGlvbkl0
ZXJhdG9yLgoJQW5ub3RhdGlvbiBuZXh0KCkgCgkgIHJhaXNlcyAoRW5kT2ZT
dHJlYW0pOwoKCS8vIFJldHVybiB3aGV0aGVyIHRoaXMgQW5ub3RhdGlvbkl0
ZXJhdG9yIGNhbiByZXR1cm4gYW5vdGhlcgoJLy8gQW5ub3RhdGlvbiBvYmpl
Y3QuCglib29sZWFuIGhhc19tb3JlKCk7CiAgICAgIH07CiAKCiAgICAgIC8v
IEFuIGludGVyZmFjZSB0byBhbiBpdGVyYXRvciBmb3IgU2VxRmVhdHVyZSBv
YmplY3RzLgogICAgICBpbnRlcmZhY2UgU2VxRmVhdHVyZUl0ZXJhdG9yIDog
R05PTUU6OlVua25vd24gCiAgICAgIHsKCS8vIFJldHVybiB0aGUgbmV4dCBT
ZXFGZWF0dXJlIGluIHRoaXMgU2VxRmVhdHVyZUl0ZXJhdG9yLgoJU2VxRmVh
dHVyZSBuZXh0KCkgCgkgIHJhaXNlcyAoRW5kT2ZTdHJlYW0pOwoKCS8vIFJl
dHVybiB3aGV0aGVyIHRoaXMgU2VxRmVhdHVyZUl0ZXJhdG9yIGNhbiByZXR1
cm4gYW5vdGhlcgoJLy8gU2VxRmVhdHVyZSBvYmplY3QuCglib29sZWFuIGhh
c19tb3JlKCk7CiAgICAgIH07CiAKCiAgICAgIC8vICoqKiBWRUNUT1JTIEZP
UiBCSU9MT0dJQ0FMIE9CSkVDVFMgKioqCgogICAgICAvLyBBbiBpbnRlcmZh
Y2UgdG8gYSB2ZWN0b3Igb2YgUHJpbWFyeVNlcSBvYmplY3RzLgogICAgICBp
bnRlcmZhY2UgUHJpbWFyeVNlcVZlY3RvciA6IEdOT01FOjpVbmtub3duCiAg
ICAgIHsKCS8vIFJldHVybiB0aGUgbnVtYmVyIG9mIFByaW1hcnlTZXEgb2Jq
ZWN0cyBpbiB0aGlzCgkvLyB2ZWN0b3IuIE9wdGlvbmFsIGltcGxlbWVudGF0
aW9uLgoJbG9uZyBzaXplKCk7CgoJLy8gUmV0dXJuIHRoZSBQcmltYXJ5U2Vx
IG9iamVjdCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gaW4gdGhpcwoJLy8gUHJp
bWFyeVNlcVZlY3Rvci4gT3B0aW9uYWwgaW1wbGVtZW50YXRpb24uCglQcmlt
YXJ5U2VxIGVsZW1lbnRBdChpbiBsb25nIGluZGV4KQoJICByYWlzZXMgKE91
dE9mUmFuZ2UpOwoKCS8vIFJldHVybiBhbiBpdGVyYXRvciBmb3IgdGhlIFBy
aW1hcnlTZXFvYmplY3RzIGluIHRoaXMKCS8vIFByaW1hcnlTZXFWZWN0b3Iu
CglQcmltYXJ5U2VxSXRlcmF0b3IgaXRlcmF0b3IoKTsKICAgICAgfTsKIAoK
ICAgICAgLy8gQW4gaW50ZXJmYWNlIHRvIGEgdmVjdG9yIG9mIEFubm90YXRp
b24gb2JqZWN0cy4KICAgICAgaW50ZXJmYWNlIEFubm90YXRpb25WZWN0b3Ig
OiBHTk9NRTo6VW5rbm93bgogICAgICB7CgkvLyBSZXR1cm4gdGhlIG51bWJl
ciBvZiBBbm5vdGF0aW9uIG9iamVjdHMgaW4gdGhpcwoJLy8gQW5ub3RhdGlv
blZlY3Rvci4gT3B0aW9uYWwgaW1wbGVtZW50YXRpb24uCglsb25nIHNpemUo
KTsKCgkvLyBSZXR1cm4gdGhlIEFubm90YXRpb24gb2JqZWN0IGF0IHRoZSBn
aXZlbiBwb3NpdGlvbiBpbiB0aGlzCgkvLyBBbm5vdGF0aW9uVmVjdG9yLiBP
cHRpb25hbCBpbXBsZW1lbnRhdGlvbi4KCUFubm90YXRpb24gZWxlbWVudEF0
KGluIGxvbmcgaW5kZXgpCgkgIHJhaXNlcyAoT3V0T2ZSYW5nZSk7CgoJLy8g
UmV0dXJuIGFuIGl0ZXJhdG9yIGZvciB0aGUgQW5ub3RhdGlvbiBvYmplY3Rz
IGluIHRoaXMKCS8vIEFubm90YXRpb25WZWN0b3IuCglBbm5vdGF0aW9uSXRl
cmF0b3IgaXRlcmF0b3IoKTsKICAgICAgfTsKIAoKICAgICAgLy8gQW4gaW50
ZXJmYWNlIHRvIGEgdmVjdG9yIG9mIFNlcUZlYXR1cmUgb2JqZWN0cy4KICAg
ICAgaW50ZXJmYWNlIFNlcUZlYXR1cmVWZWN0b3IgOiBHTk9NRTo6VW5rbm93
bgogICAgICB7CgkvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBTZXFGZWF0dXJl
IG9iamVjdHMgaW4gdGhpcwoJLy8gU2VxRmVhdHVyZVZlY3Rvci4gT3B0aW9u
YWwgaW1wbGVtZW50YXRpb24uCglsb25nIHNpemUoKTsKCgkvLyBSZXR1cm4g
dGhlIFNlcUZlYXR1cmUgb2JqZWN0IGF0IHRoZSBnaXZlbiBwb3NpdGlvbiBp
biB0aGlzCgkvLyBTZXFGZWF0dXJlVmVjdG9yLiBPcHRpb25hbCBpbXBsZW1l
bnRhdGlvbi4KCVNlcUZlYXR1cmUgZWxlbWVudEF0KGluIGxvbmcgaW5kZXgp
CgkgIHJhaXNlcyAoT3V0T2ZSYW5nZSk7CgoJLy8gUmV0dXJuIGFuIGl0ZXJh
dG9yIGZvciB0aGUgU2VxRmVhdHVyZSBvYmplY3RzIGluIHRoaXMKCS8vIFNl
cUZlYXR1cmVWZWN0b3IuCglTZXFGZWF0dXJlSXRlcmF0b3IgaXRlcmF0b3Io
KTsKICAgICAgfTsKIAoKICAgICAgLy8gKioqIEJJT0xPR0lDQUwgU0VRVUVO
Q0UgREFUQUJBU0UgT0JKRUNUUyAqKioqCgogICAgICAvLyBEZWZpbmUgYSBQ
cmltYXJ5U2VxREIgb2JqZWN0LiBQcmltYXJ5U2VxREIgcHJvdmlkZXMgYW4K
ICAgICAgLy8gaW50ZXJmYWNlIHRvIGEgZGF0YWJhc2UgdGhhdCBzZXJ2ZXMg
UHJpbWFyeVNlcSBvYmplY3RzLiBJdAogICAgICAvLyBjYW4gYmUgcXVlcmll
ZCBieSBzZXF1ZW5jZSBhY2Nlc3Npb24gbnVtYmVyIGFuZCByZXR1cm4KICAg
ICAgLy8gUHJpbWFyeVNlcSBvYmplY3RzIGFuZCB2ZWN0b3JzLgogICAgICBp
bnRlcmZhY2UgUHJpbWFyeVNlcURCIDogR05PTUU6OlVua25vd24gCiAgICAg
IHsKCS8vIFJldHVybiB0aGUgbmFtZSBvZiB0aGlzIGRhdGFiYXNlLgoJc3Ry
aW5nIG5hbWUoKTsgICAgIAoKCS8vIFJldHVybiB0aGUgdmVyc2lvbiBvZiB0
aGlzIGRhdGFiYXNlLgoJc3RyaW5nIHZlcnNpb24oKTsgCgkKICAgICAgICAv
LyBSZXR1cm4gYSBmcmVlLXRleHQgZGVzY3JpcHRpb24gb2YgdGhpcyBkYXRh
YmFzZS4KICAgICAgICBzdHJpbmcgZGVzY3JpcHRpb24oKTsKCgkvLyBSZXR1
cm4gdGhlIGxlbmd0aCBvZiB0aGUgbGFyZ2VzdCBzdHJpbmcgZm9yIGEgYmlv
bG9naWNhbAoJLy8gc2VxdWVuY2UgdGhhdCBjYW4gYmUgcmV0dXJuZWQgYnkg
dGhpcyBzZXJ2ZXIuCglsb25nIG1heF9zZXF1ZW5jZV9sZW5ndGgoKTsgCgoJ
Ly8gUmV0dXJuIGEgcmVmZXJlbmNlIHRvIGEgUHJpbWFyeVNlcSBvYmplY3Qg
d2l0aCB0aGUgZ2l2ZW4KCS8vIGFjY2Vzc2lvbiBudW1iZXIgaW4gdGhpcyBk
YXRhYmFzZS4gSWYgdGhlIHNlcXVlbmNlIHZlcnNpb24KCS8vIGlzIHVua25v
d24sIG9yIHRoZSBsYXRlc3QgdmVyc2lvbiBpcyByZXF1aXJlZCwgdGhlbiBz
cGVjaWZ5CgkvLyB2ZXJzaW9uIGlzICcwJy4KCVByaW1hcnlTZXEgZ2V0X1By
aW1hcnlTZXEoaW4gc3RyaW5nIGFjY2Vzc2lvbl9udW1iZXIsIAoJCQkJICBp
biBzdHJpbmcgdmVyc2lvbikgCgkgIHJhaXNlcyAoRG9lc05vdEV4aXN0KTsK
CgkvLyBSZXR1cm4gYSByZWZlcmVuY2UgdG8gYSBQcmltYXJ5U2VxVmVjdG9y
IHRoYXQgbWF5IGJlIHVzZWQKCS8vIHRvIGFjY2VzcyBhbGwgdGhlIFByaW1h
cnlTZXEgb2JqZWN0cyBpbiB0aGlzIGRhdGFiYXNlLgoJUHJpbWFyeVNlcVZl
Y3RvciBnZXRfUHJpbWFyeVNlcVZlY3RvcigpOyAKICAgICAgfTsKIAoKICAg
ICAgLy8gRGVmaW5lIGEgU2VxREIgb2JqZWN0LiBTZXFEQiBwcm92aWRlcyBh
biBpbnRlcmZhY2UgdG8gYQogICAgICAvLyBkYXRhYmFzZSB0aGF0IHNlcnZl
cyBTZXEgb2JqZWN0cy4gSXQgY2FuIGJlIHF1ZXJpZWQgYnkKICAgICAgLy8g
c2VxdWVuY2UgYWNjZXNzaW9uIG51bWJlciBhbmQgcmV0dXJuIFNlcSBvYmpl
Y3RzLgogICAgICBpbnRlcmZhY2UgU2VxREIgOiBQcmltYXJ5U2VxREIgCiAg
ICAgIHsKCS8vIFJldHVybiBhIHJlZmVyZW5jZSB0byBhIFNlcSBvYmplY3Qg
d2l0aCB0aGUgZ2l2ZW4gYWNjZXNzaW9uCgkvLyBudW1iZXIgaW4gdGhpcyBk
YXRhYmFzZS4gSWYgdGhlIHNlcXVlbmNlIHZlcnNpb24gaXMKCS8vIHVua25v
d24sIG9yIHRoZSBsYXRlc3QgdmVyc2lvbiBpcyByZXF1aXJlZCwgdGhlbiBz
cGVjaWZ5CgkvLyB2ZXJzaW9uIGlzICcwJy4KCVNlcSBnZXRfU2VxKGluIHN0
cmluZyBhY2Nlc3Npb25fbnVtYmVyLCAKCQkgICAgaW4gbG9uZyB2ZXJzaW9u
KSAKCSAgcmFpc2VzIChEb2VzTm90RXhpc3QpOyAKCgkvLyBSZXR1cm4gYSBs
aXN0IG9mIGFsbCB0aGUgYWNjZXNzaW9uIG51bWJlcnMgaW4gdGhpcwoJLy8g
ZGF0YWJhc2UuCglTdHJpbmdMaXN0IGFjY2Vzc2lvbl9udW1iZXJzKCk7CiAg
ICAgIH07CgogCiAgICAgIC8vIERlZmluZSBhbiBhcnJheSBvZiBQcmltYXJ5
U2VxIG9iamVjdHMuCiAgICAgIHR5cGVkZWYgc2VxdWVuY2U8UHJpbWFyeVNl
cT4gUHJpbWFyeVNlcUxpc3Q7CiAKICAgICAgLy8gRGVmaW5lIGFuIGFycmF5
IG9mIFNlcSBvYmplY3RzLgogICAgICB0eXBlZGVmIHNlcXVlbmNlPFNlcT4g
U2VxTGlzdDsKIAogICAgICAvLyBBbiBpbnRlcmZhY2UgdG8gYSBtdXRhYmxl
IGJpb2xvZ2ljYWwgc2VxdWVuY2UgZGF0YWJhc2Ugd2hlcmUKICAgICAgLy8g
aXQgaXMgcG9zc2libGUgdG8gYWRkLCByZW1vdmUsIG9yIHVwZGF0ZSBTZXEg
YW5kIFByaW1hcnlTZXEKICAgICAgLy8gb2JqZWN0cy4KICAgICAgaW50ZXJm
YWNlIFVwZGF0ZWFibGVTZXFEQiA6IFNlcURCIAogICAgICB7CgkvLyBXcml0
ZSBsaXN0cyBvZiB1cGRhdGVkLCBhZGRlZCBhbmQgZGVhZCBTZXEgb2JqZWN0
cyB0byB0aGlzCgkvLyBkYXRhYmFzZS4KCXZvaWQgd3JpdGVfU2VxKGluIFNl
cUxpc3QgdXBkYXRlZFNlcXMsIAoJCSAgICAgICBpbiBTZXFMaXN0IGFkZGVk
U2VxcywKCQkgICAgICAgaW4gU2VxTGlzdCBkZWFkU2VxcykgCgkgIHJhaXNl
cyAoTmVlZHNVcGRhdGUsCgkJICBVbmFibGVUb1Byb2Nlc3MsIAoJCSAgT3V0
T2ZSYW5nZSk7CgkKCS8vIFdyaXRlIGxpc3RzIG9mIHVwZGF0ZWQsIGFkZGVk
IGFuZCBkZWFkIFByaW1hcnlTZXEgb2JqZWN0cwoJLy8gdG8gdGhpcyBkYXRh
YmFzZS4KCXZvaWQgd3JpdGVfUHJpbWFyeVNlcShpbiBQcmltYXJ5U2VxTGlz
dCB1cGRhdGVkU2VxcywgCgkJCSAgICAgIGluIFByaW1hcnlTZXFMaXN0IGFk
ZGVkU2VxcywKCQkJICAgICAgaW4gUHJpbWFyeVNlcUxpc3QgZGVhZFNlcXMp
IAoJICByYWlzZXMgKE5lZWRzVXBkYXRlLCAKCQkgIFVuYWJsZVRvUHJvY2Vz
cywgCgkJICBPdXRPZlJhbmdlKTsKICAgICAgfTsKIAoKICAgICAgLy8gKioq
IEJJT0xPR0lDQUwgU0VRVUVOQ0UgREFUQUJBU0UgRkFDVE9SWSBPQkpFQ1Qg
KioqCgogICAgICAvLyBEZWZpbmUgYSBCaW9FbnYgb2JqZWN0LiBUaGUgQmlv
RW52IHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byBhCiAgICAgIC8vIGZhY3Rv
cnkgZm9yIFByaW1hcnlTZXEsIFNlcSBhbmQgU2VxREIgcmVmZXJlbmNlcy4g
CiAgICAgIC8vCiAgICAgIC8vIE5vdGljZSB0aGF0IHdlIGFsbG93IGNvbmNl
cHRzIGxpa2UgZmlsZW5hbWVzIGhlcmUuIElmIHNvCiAgICAgIC8vIHdpc2hl
ZCwgdGhlIHNlcnZlciBjYW4gdGhyb3cgYW4gZXhjZXB0aW9uIG9uIGFsbCB0
aGUgZmlsZW5hbWUKICAgICAgLy8gY29kZSAoZS5nLiBpZiBjbGllbnQgaXMg
b24gYSBkaWZmZXJlbnQgbWFjaGluZSB0byBzZXJ2ZXIpLgogICAgICBpbnRl
cmZhY2UgQmlvRW52IAogICAgICB7CgkvLyBSZXR1cm4gYSBQcmltYXJ5U2Vx
VmVjdG9yIG9iamVjdCBnZW5lcmF0ZWQgYnkgdGhpcyBCaW9FbnYKCS8vIGZh
Y3RvcnkgZnJvbSB0aGUgc2VxdWVuY2VzIGluIHRoZSBsb2NhbCBmaWxlIHNw
ZWNpZmllZCBpbgoJLy8gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIGZvcm1hdCBt
YXkgYmUgYW4gZW1wdHkgc3RyaW5nLCBpbgoJLy8gd2hpY2ggY2FzZSB0aGUg
QmlvRW52IGZhY3RvcnkgZ3Vlc3NlcyB0aGUgZm9ybWF0LCBidXQKCS8vIHRo
cm93cyBhbiBleGNlcHRpb24gaWYgaXQgY2Fubm90IGRldGVybWluZSBpdC4K
CVByaW1hcnlTZXFJdGVyYXRvciBnZXRfUHJpbWFyeVNlcUl0ZXJhdG9yX2Zy
b21fZmlsZShpbiBzdHJpbmcgZm9ybWF0LAoJCQkJCQkJICAgIGluIHN0cmlu
ZyBmaWxlbmFtZSkgCgkgIHJhaXNlcyAoVW5hYmxlVG9Qcm9jZXNzKTsKCgkv
LyBSZXR1cm4gYSBQcmltYXJ5U2VxIG9iamVjdCBnZW5lcmF0ZWQgYnkgdGhp
cyBCaW9FbnYgZmFjdG9yeQoJLy8gZnJvbSB0aGUgc2VxdWVuY2UgaW4gdGhl
IGxvY2FsIGZpbGUgc3BlY2lmaWVkIGluIHRoZSBnaXZlbgoJLy8gZm9ybWF0
LgoJUHJpbWFyeVNlcSBnZXRfUHJpbWFyeVNlcV9mcm9tX2ZpbGUoaW4gc3Ry
aW5nIGZvcm1hdCwKCQkJCQkgICAgaW4gc3RyaW5nIGZpbGVuYW1lKSAKCSAg
cmFpc2VzIChVbmFibGVUb1Byb2Nlc3MpOwoJCgkvLyBSZXR1cm4gYSBTZXEg
b2JqZWN0IGdlbmVyYXRlZCBieSB0aGlzIEJpb0VudiBmYWN0b3J5IGZyb20K
CS8vIHRoZSBzZXF1ZW5jZSBpbiB0aGUgbG9jYWwgZmlsZSBzcGVjaWZpZWQg
aW4gdGhlIGdpdmVuCgkvLyBmb3JtYXQuCglTZXEgZ2V0X1NlcV9mcm9tX2Zp
bGUoaW4gc3RyaW5nIGZvcm1hdCwKCQkJICAgICAgaW4gc3RyaW5nIGZpbGVu
YW1lKQoJICByYWlzZXMgKFVuYWJsZVRvUHJvY2Vzcyk7CgoJLy8gUmV0dXJu
IGEgbGlzdCBvZiB0aGUgbmFtZXMgb2YgdGhlIGRhdGFiYXNlcyBhdmFpbGFi
bGUgZnJvbQoJLy8gdGhpcyBCaW9FbnYgc2VydmVyLgoJU3RyaW5nTGlzdCBn
ZXRfU2VxREJfbmFtZXMoKTsKCgkvLyBSZXR1cm4gYSBsaXN0IG9mIHRoZSBh
dmFpbGFibGUgdmVyc2lvbnMgb2YgYSBkYXRhYmFzZSB3aXRoCgkvLyB0aGUg
Z2l2ZW4gbmFtZS4KCUxvbmdMaXN0IGdldF9TZXFEQl92ZXJzaW9ucyAoaW4g
c3RyaW5nIG5hbWUpCgkgIHJhaXNlcyAoRG9lc05vdEV4aXN0KTsKCgkvLyBS
ZXR1cm4gYSBTZXFEQiByZWZlcmVuY2UgZm9yIHRoZSBkYXRhYmFzZSB3aXRo
IHRoZSBnaXZlbgoJLy8gbmFtZSBhbmQgdmVyc2lvbi4gVGhlICd2ZXJzaW9u
JyBtYXkgYmUgYW4gZW1wdHkgc3RyaW5nIChpLmUuICIiKSwgaW4gd2hpY2gg
Y2FzZQoJLy8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSBp
cyByZXR1cm5lZC4KCVNlcURCIGdldF9TZXFEQl9ieV9uYW1lKGluIHN0cmlu
ZyBuYW1lLAoJCQkJaW4gc3RyaW5nIHZlcnNpb24pCgkgIHJhaXNlcyAoRG9l
c05vdEV4aXN0KTsKICAgICAgfTsgICAgCiAgICB9OwogIH07Cn07IAoK
--28951584-22591-981998880=:222--