PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIHNpbmNlIFUtQm9vdCAxLjEuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBGaXggY29uZmlndXJhdGlvbiBmb3IgRVJJQyBib2FyZCAobmVlZHMgbW9yZSByb29tKQoKKiBBZGp1c3QgTUlQUyBjb21waWxlciBvcHRpb25zIGF0IHJ1bi10aW1lIGRlcGVuZGluZyBvbiB0b29scyB2ZXJzaW9uCiAgKCItbWFyY2g9NGtjIC1tdHVuZT00a2MgLVdhLC1taXBzX2FsbG93X2JyYW5jaF90b191bmRlZmluZWQiIGZvciBuZXcsCiAgIi1tY3B1PTRrYyIgZm9yIG9sZCB0b29scykKCiogQWRkIHBhc3Npbmcgb2YgdGhlIGNvbW1hbmQgbGluZSBhbmQgbWVtb3J5IHNpemUgaW5mb3JtYXRpb24gdG8gIHRoZQogIGtlcm5lbCBvbiB4YWVuaWF4IGJvYXJkLgoKKiBFbmFibGUgTkFORCBmbGFzaCBzdXBwb3J0IGZvciBOQzY1MCBib2FyZC4KCiogUGF0Y2ggYnkgVGhvbWFzIExhbmdlIDA3IE9jdCAyMDA0OgogIFVwZGF0ZWQgUkVBRE1FIGZvciBEQkF1MXgwMCBib2FyZHMgdG8gbWF0Y2ggY3VycmVudCBzdGF0dXMKCiogUGF0Y2ggYnkgUGhpbGlwcGUgUm9iaW4sIDI4IFNlcHQgMjAwNDoKICBGaXggRmxhc2ggc3VwcG9ydCBmb3IgVmVyc2F0aWxlLgoKKiBQYXRjaCBieSBSb2dlciBCbG9mZWxkLCAxNiBTZXAgMjAwNDoKICBGaXggdGltZW91dCBmb3IgREhDUCBjb21tYW5kIHJldHJ5CgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNCBTZXAgMjAwNDoKICBGaXggZWFybHkgc2VyaWFsIGhhbmcgd2hlbiBDT05GSUdfU0VSSUFMX01VTFRJIGlzIGRlZmluZWQuCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNCBTZXAgMjAwNDoKICBLaWNrIHdhdGNoZG9nIHdoZW4gYnotZGVjb21wcmVzc2luZwoKKiBGaXggQ0ZHX0haIHByb2JsZW1zIG9uIEFUOTFSTTkyMDAgc3lzdGVtcwogIFtSZW1lbWJlcjogQ0ZHX0haIHNob3VsZCBiZSAxMDAwIG9uIEFMTCBzeXN0ZW1zIV0KCiogUGF0Y2ggYnkgR3JpZGlzaCBTaGxvbWksIDMwIEF1ZyAyMDA0OgogIC0gQWRkIHN1cHBvcnQgdG8gcmV2QSB2ZXJzaW9uIG9mIFBRMjcgYW5kIFBRMjdFLgogIC0gUmV2ZXJ0ZWQgTVBDODI2MEFEUyBiYXVkcmF0ZSBiYWNrIHRvIG9yaWdpbmFsIDExNTIwMAoKKiBQYXRjaCBieSBIb2ppbiwgMTcgU2VwIDIwMDQ6CiAgRml4IHR5cG8gaW4gY2ZpX2ZsYXNoLmMKCiogUGF0Y2ggYnkgTWFyayBKb25hcywgMDkgU2VwdGVtYmVyIDIwMDQ6CiAgbXRlc3QncyBkYXRhIGxpbmUgdGVzdCAod2l0aCBDRkdfQUxUX01FTVRFU1Qgc2V0KSByZXR1cm5lZCBhIHdyb25nCiAgZXJyb3IgbWVzc2FnZQoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAzMSBBdWd1c3QgMjAwNDoKICBBZGRlZCBvcHRpb24gQ0ZHX1hMQl9QSVBFTElOSU5HIHRvIGVuYWJsZSBYTEIgcGlwZWxpbmluZy4gVGhpcwogIGltcHJvdmVzIEZUUCBwZXJmb3JtYW5jZSBmb3IgTVBDNTIwMCBzeXN0ZW1zLiBFbmFibGVkIGZvciBJY2VDdWJlCiAgYnkgZGVmYXVsdC4KCiogUGF0Y2ggYnkgTWljaGFlbCBCZW5kemljaywgMzAgQXVnIDIwMDQ6CiAgLSBJbXByb3ZlIHBsYXRmb3JtLlMgY29kZSBmb3Igb21hcDE1MTBpbm4gdGhhdCBkZXRlY3RzIHdoZXRoZXIgY29kZQogICAgaXMgcnVubmluZyBmcm9tIFNEUkFNIG9yIG5vdC4gUGF0Y2ggYWxsb3dzIFNEUkFNIHRvIGJlIGNvbmZpZ3VyZWQKICAgIGlmIGNvZGUgaXMgcnVubmluZyBvdXQgb2YgU1JBTSBhdCAweDIwMDAwMDAwLgoKKiBQYXRjaCBieSBGcmVkZXJpY2sgS2xhdHQsIDMwIEF1ZyAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciB0aGUgV2luZCBSaXZlciBTQkM4NTQwL1NCQzg1NjAgYm9hcmRzCgoqIENvbmZpZ3VyZSBTWDEgYm9hcmQgdG8gdXNlIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKCiogUGF0Y2hlcyBieSBNaWNoYWVsIEJlbmR6aWNrLCAzMCBBdWcgMjAwNDoKICAtIENvbmZpZ3VyZSBvbWFwMTUxMGlubiBib2FyZCB0byB1c2UgZHJpdmVycy9jZmlfZmxhc2guYwogIC0gTWFrZSBkcml2ZXJzL2NmaV9mbGFzaC5jIHByb3RlY3QgZW52aXJvbm1lbnQgYW5kIHJlZHVuZGFudAogICAgZW52aXJvbm1lbnQuCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIzIEp1biAyMDA0OgogIC0gQWRkIHNjcmlwdCAodG9vbHMvaW1nMmJyZWMuc2gpIHRvIHByb2dyYW1tIFUtQm9vdCBpbnRvCiAgICAoU3luY2gpRmxhc2ggdXNpbmcgdGhlIEJvb3RzdHJhcCBNb2RlIG9mIHRoZSBNQzkzMjhNWDEvTAoKKiBQYXRjaGVzIGJ5IFNjb3R0IE1jTnV0dCwgMjQgQXVnIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIE5pb3MtSUkgcHJvY2Vzc29ycy4KICAtIEFkZCBzdXBwb3J0IGZvciBQc3llbnQgUENJLTU0NDEgYm9hcmQuCiAgLSBBZGQgc3VwcG9ydCBmb3IgUHN5ZW50IFBLMUMyMCBib2FyZC4KCiogUGF0Y2hlcyBieSBKb24gTG9lbGlnZXIsIDI0IEF1ZyAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBNUEM4NTQxIGFuZCBNUEM4NTU1IENEUyBib2FyZHMKICAtIENsZWFudXAgZXRoP2FkZHIgaGFuZGxpbmc6IG1ha2UgZGVwZW5kZW50IG9uIENPTkZJR19FVEg/QUREUgogIC0gQ29udmVydCBNUEM4NXh4QURTIHRvIHVzZSBjb21tb24gQ0ZJIGZsYXNoIGRyaXZlcgogIC0gRml4IFBDSSB3aW5kb3cgb24gTVBDODV4eDsgcmVtb3ZlIHVubmVlZGVkIFBDSSBpbml0aWFsaXphdGlvbgogICAgZnJvbSBib2FyZF9lYXJseV9pbml0X2YoKQogIC0gUHJvdmlkZSBTVyB3b3JrYXJvdW5kIGZvciBQQ0kgaW5pdGlhbGl6YXRpb24gb24gODV4eCBDRFMKCiogUGF0Y2hlcyBieSBHZW9yZ2UgRy4gRGF2aXMsIDI0IEF1ZyAyMDA0OgogIC0gRW5hYmxlIHJhbWRpc2svaW5pdHJkIHRhZ2dlZCBwYXJhbSBzdXBwb3J0IGZvciBvbWFwMTYxMGgyX2NvbmZpZwogIC0gUmVtb3ZlIHN0YXRpYyBuZXR3b3JrIHNldHVwIGRlZmF1bHRzIGZyb20gbXgxYWRzX2NvbmZpZwogIC0gdXBkYXRlIEFSTSBib2FyZHMgdG8gdXNlIGNvbnN0YW50cyBmcm9tIG1hY2gtdHlwZXMuaAoKKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMDQgT2N0IDIwMDQ6CiAgLSBmaXggSTJDIG9uIGF0OTFybTkyMDAKICAtIGFkZCBzdXBwb3J0IGZvciBSaWNvaCBSUzVDMzcyQSBSVEMKCiogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDAxIE9jdCAyMDA0OgogIC0gYWRkIHN1cHBvcnQgZm9yIENNQyBQVTIgYm9hcmQKICAtIGFkZCBzdXBwb3J0IGZvciBJMkMgb24gYXQ5MXJtOTIwMAoKKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMjggU2VwIDIwMDQ6CiAgZml4IGJhdWRyYXRlIGhhbmRsaW5nIG9uIGF0OTFybTkyMDAKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjIgQXVnIDIwMDQ6CiAgLSByZW1vdmUgWlBDLjE5MDAgYm9hcmQtc3BlY2lmaWMgZmxhc2ggZHJpdmVyOwogICAgc3dpdGNoIHRoZSBwb3J0IHRvIGdlbmVyaWMgQ0ZJIGRyaXZlcjsKICAtIHBvcnQgY2xlYW4tdXAKCiogUGF0Y2ggYnkgSGlua28gS29jZXZhciwgMjEgQXVnIDIwMDQ6CiAgQWRkIGNhbGNfZmJzaXplKCkgZnVuY3Rpb24gdXNlZCB3aXRoIFZJREVPTEZCX1RBRyBvbiBUUkFCCgoqIENsZWFuIHVwIHRvb2xzL2JtcF9sb2dvLmMgdG8gbm90IGFkZCB0cmFpbGluZyB3aGl0ZSBzcGFjZQoKKiBQYXRjaCBieSBIaW5rbyBLb2NldmFyLCAyMSBBdWcgMjAwNDoKICAtIEdyb3VwIGNvbW1vbiBmcmFtZWJ1ZmZlciBmdW5jdGlvbnMgaW4gY29tbW9uL2xjZC5jCiAgLSBHcm91cCBjb21tb24gZnJhbWVidWZmZXIgbWFjcm9zIGFuZCAjZGVmaW5lcyBpbiBpbmNsdWRlL2xjZC5oCiAgLSBQcm92aWRlIGNhbGNfZmJzaXplKCkgZm9yIHZpZGVvIEFUQUcKCiogUGF0Y2ggYnkgU2FtIFNvbmcsIDIxIEF1Z3VzdCAyMDA0OgogIC0gRml4IGEgdHlwbyBpbiBSRUFETUUKICAtIEFsaWduICIoUk8pIiBvdXRwdXQgZm9yICJmbGluZm8iIGFmdGVyICJwcm90ZWN0IG9uIgogIC0gQWRkIFJFU0VUIHN1cHBvcnQgZm9yIFJQWGxpdGVfRFcgYm9hcmQ7IGFkanVzdCBDUFU6QlVTIGZyZXF1ZW5jeQogICAgcmF0aW8gMToxIHdoZW4gY29yZSBmcmVxdWVuY3kgbGVzcyB0aGFuIDUwTUh6CgoqIFBhdGNoZXMgYnkgSGlua28gS29jZXZhciwgMjEgQXVnIDIwMDQ6CiAgLSBmaXggc29tZSAidXNlIG9mIGxhYmVsIGF0IGVuZCBvZiBjb21wb3VuZCBzdGF0ZW1lbnQiIHdhcm5pbmdzCiAgLSBEZWZpbmUgdHlwZSBvZiBMQ0QgcGFuZWwgb24gbHViYm9jayBib2FyZCBpZiBDT05GSUdfTENEIGlzIHVzZWQKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTYgQXVnIDIwMDQ6CiAgLSBJbnRyb2R1Y2luZyB0aGUgY29uY2VwdCBvZiBTb0NzICIuL2NwdS8kKENQVSkvJChTT0MpIgogIC0gY3JlYXRpbmcgc3ViZGlycyBmb3IgU29DcyAuL2NwdS9hcm05MjB0L2lteCBhbmQgLi9jcHUvYXJtOTIwdC9zM2MyNHgwCiAgLSBtb3ZpbmcgU29DIHNwZWNpZmljIGNvZGUgb3V0IG9mIGNwdS9hcm05MjB0LyBpbnRvIGNwdS9hcm05MjB0LyQoU09DKS8KICAtIG1vdmluZyBkcml2ZXJzL3MzYzI0eDBfaTJjLmMgYW5kIGRyaXZlcnMvc2VyaWFsX2lteC5jIG91dCBvZiBkcml2ZXJzLwogICAgaW50byBjcHUvYXJtOTIwdC8kKFNPQykvCgoqIFBhdGNoZXMgYnkgU2VhbiBDaGFuZywgMDkgQXVnIDIwMDQ6CiAgLSBBZGRlZCBzdXBwb3J0IGZvciBib3RoIDggYW5kIDE2IGJpdCBtb2RlIGFjY2VzcyB0byBTeXN0ZW0gQUNFIENGCiAgICB0aHJvdWdoIE1QVS4KICAtIEZpeGVkIG1pc3NpbmcgU3lzdGVtIEFDRSBDRiBkZXZpY2UgZHVyaW5nIGdldCBGQVQgcGFydGl0aW9uIGluZm8KICAgIGluIGZhdF9yZWdpc3Rlcl9kZXZpY2UgZnVuY3Rpb24uCiAgLSBFbmFibGVkIFN5c3RlbSBBQ0UgQ0Ygc3VwcG9ydCBvbiBNTDMwMC4KCiogUGF0Y2ggYnkgU2VhbiBDaGFuZywgMDkgQXVnIDIwMDQ6CiAgU3luY2ggZGVmaW5lcyBmb3Igc2F2ZWVudiBhbmQgZG9fc2F2ZWVudiBmdW5jdGlvbnMgc28gdGhleSBnZXQKICBjb21waWxlZCB1bmRlciB0aGUgc2FtZSBzdGF0ZW1lbnQuCgoqIFBhdGNoIGJ5IFNlYW4gQ2hhbmcsIDA5IEF1ZyAyMDA0OgogIC0gQWRkZWQgSTJDIHN1cHBvcnQgZm9yIE1MMzAwLgogIC0gQWRkZWQgc3VwcG9ydCBmb3IgTUwzMDAgdG8gcmVhZCBvdXQgaXRzIGVudmlyb25tZW50IGluZm9ybWF0aW9uCiAgICBzdG9yZWQgb24gdGhlIEVFUFJPTS4KICAtIEFkZGVkIHN1cHBvcnQgdG8gdXNlIGJvYXJkIHNwZWNpZmljIHBhcmFtZXRlcnMgYXMgcGFydCBvZgogICAgVS1Cb290J3MgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uCiAgLSBVcGRhdGVkIE1MRCBmaWxlcyB0byBzdXBwb3J0IGNvbmZpZ3VyYXRpb24gZm9yIG5ldyBmZWF0dXJlcwogICAgYWJvdmUuCgoqIFBhdGNoZXMgYnkgVHJhdmlzIFNhd3llciwgMDUgQXVnIDIwMDQ6CiAgLSBSZW1vdmUgaW5jb3JyZWN0IGJyaWRnZSBzZXR0aW5ncyBmb3IgZXRoIGdyb3VwIDYKICAtIEFkZCBjYWxsIHRvIHNldHVwIGJyaWRnZSBpbiBwcGNfNDQweF9ldGhfaW5pdGlhbGl6ZQogIC0gRml4IHBwY180NDB4X2V0aF9pbml0IHRvIHJlc2V0IHRoZSBwaHkgb25seSBpZiBpdHMgdGhlCiAgICBmaXJzdCB0aW1lIHRocm91Z2gsIG90aGVyd2lzZSwganVzdCBjaGVjayB0aGUgcGh5IGZvciB0aGUKICAgIGF1dG9uZWdvdGlhdGVkIHNwZWVkL2R1cGxleC4gIFRoaXMgYWxsb3dzIHRoZSB1c2Ugb2YgbmV0Y29uc29sZQogIC0gb25seSBwcmludCB0aGUgc3BlZWQvZHVwbGV4IHRoZSBmaXJzdCB0aW1lIHRoZSBwaHkgaXMgcmVzZXQuCgoqIFBhdGNoIGJ5IFNobG9tbyBLdXQsIDI5IE1hciAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBNS1MgSW5zdHJ1bWVudHMgIlF1YW50dW0iIGJvYXJkCgoqIEZpeCBidWlsZCBwcm9ibGVtIHdpdGggQ29nZW50IGJvYXJkczsKICBhdm9pZCB1c2luZyA8YXNtL2J5dGVvcmRlci5oPiB3aGVuIHVzaW5nIHRoZSBob3N0IGNvbXBpbGVyCgoqIFBhdGNoIGJ5IEdhbmFwYXRoaSBDLCAwNCBBdWcgMjAwNDoKICBGaXggTkZTIHRpbWVvdXQgaXNzdWUKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTkgSnVsIDIwMDQ6CiAgLSBGaXggaG9zdCB0b29scyBidWlsZGluZyBpbiBDeWd3aW4gZW52aXJvbm1lbnQKICAtIEZpeCBoZWFkZXIgZmlsZXMgc2VhcmNoIG9yZGVyIGZvciBob3N0IHRvb2xzCgoqIFBhdGNoIGJ5IFRvbSBBcm1pc3RlYWQsIDE5IEp1bCAyMDA0OgogIEZpeCBrZ2RiLlMgc3VwcG9ydCBmb3IgNzR4eF83NXggY3B1CgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMTUgSnVsIDIwMDQ6CiAgRml4IE1QQzg1eHggSTJDIGRyaXZlcgoKKiBGaXggcHJvYmxlbXMgd2l0aCBDRFJPTSBkcml2ZSBhcyBzbGF2ZSBkZXZpY2Ugb24gTGl0ZTUyMDAgSURFIGJ1cy4KCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMTUgSnVseSAyMDA0CiAgU2V0IHRoZSBQQ0kgY2xhc3MgY29kZSBmb3IgSlNFIGJvYXJkIGFzIHBhcnQgb2YgUENJIGludGVyZmFjZSBzZXR1cAoKKiBQYXRjaCBieSBNaWNoYWVsIEJlbmR6aWNrLCAxNSBKdWwgMjAwNDoKICBGaXggcHJvYmxlbSB3aXRoIHdyaXRlcyB3aXRoIG9kZCBzaXplcyBpbiBkcml2ZXJzL2NmaV9mbGFzaC5jIHdoZW4KICBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURSBpcyBzZXQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTMgSnVsIDIwMDQ6CiAgQWxsb3cgY2xvY2sgc2V0dGluZyBvbiBNUEM4NjYvTVBDODg1IHNlcmllcyBjaGlwcyBhY2NvcmRpbmcgdG8KICBlbnZpcm9ubWVudCB2YXJpYWJsZSBgY3B1Y2xrJwoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMCBBcHIgMjAwNDoKICBSZW1vdmUgdW5uZWNlc3NhcnkgcmVkZWZpbmUgb2YgQ1BNX0RBVEFPTkxZX1NJWkUgZm9yIE1QQzgyNngKCiogUGF0Y2ggYnkgVmluY2VudCBEdWJleSwgMjQgU2VwIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHhhZW5pYXggYm9hcmQKCiogQWRkIGNvbW1lbnQgYWJvdXQgbm9uLUdQTCBjaGFyYWN0ZXIgb2Ygc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMgdG8KICBDT1BZSU5HIGZpbGUKCiogRml4IEZFQyBldGhlcm5ldCBwcm9ibGVtIG9uIE5TQ1UgYm9hcmQuCgoqIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAwOSBTZXAgMjAwNDoKICBhbGxvdyB0byB1c2UgVVNBUlQxIGFzIGNvbnNvbGUgcG9ydCBvbiBhdDkxcm05MjAwZGsgYm9hcmRzCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTYgU2VwIDIwMDQ6CiAgVXBkYXRlIEFSNDA1IGJvYXJkLgoKKiBGaXggU3lzQ2xrIGhhbmRsaW5nIGZvciBQUENoYW1lbGVvbiBhbmQgQ0FUY2VudGVyIGJvYXJkcwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAwOCBTZXAgMjAwNDoKICBVcGRhdGUgZXRhZ3MgYnVpbGQgdGFyZ2V0CgoqIEltcHJvdmUgTmV0Q29uc29sZSBzdXBwb3J0OiBhZGQgc3VwcG9ydCBmb3IgYnJvYWRjYXN0IGRlc3RpbmF0aW9uCiAgYWRkcmVzcyBhbmQgYnVmZmVyZWQgaW5wdXQuCgoqIENsZWFudXAgY29tcGlsZXIgd2FybmluZ3MgZm9yIEdDQyAzLjMueCBhbmQgbGF0ZXIKCiogRml4IHByb2JsZW0gaW4gY21kX2pmZnMyLmMgaW50cm9kdWNlZCBieSBDRkdfSkZGU19TSU5HTEVfUEFSVCBwYXRjaAoKKiBBZGQgc3VwcG9ydCBmb3IgSURTICJOQzY1MCIgYm9hcmQKCiogQWRkIGF1dG9tYXRpYyB1cGRhdGUgc3VwcG9ydCBmb3IgTFdNT04gYm9hcmQKCiogQ2xlYXIgQmxvY2sgTG9jay1CaXRzIHdoZW4gZXJhc2luZyBmbGFzaCBvbiBMV01PTiBib2FyZC4KCiogRml4IHJldHVybiBjb2RlIG9mICJmYXRsb2FkIiBjb21tYW5kCgoqIEVuYWJsZSBNU0RPUy9WRkFUIGZpbGVzeXN0ZW0gc3VwcG9ydCBmb3IgTFdNT04gYm9hcmQKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDMgQXVnIDIwMDQ6CiAgY2hhbmdlIHRpbWluZyBmb3IgU001MDEgZ3JhcGhpY3MgY29udHJvbGxlciBvbiBUUU01MjAwIG1vZHVsZQoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAxMyBKdWx5IDIwMDQ6CiAgLSBUb3RhbDUyMDAgTENEIG5vdyBydW4gaW4gbGl0dGxlIGVuZGlhbiBtb2RlLiBFbmRpYW5lc3MgY29udmVyc2lvbgogICAgaXMgZG9uZSBpbiBoYXJkd2FyZS4KICAtIFJlbW92ZWQgbGFzdCByZWZlcmVuY2UgdG8gImNvbnNvbGUiIGVudmlyb25tZW50IHZhcmlhYmxlLgoKKiBQYXRjaGVzIGJ5IExhcnMgTXVuY2gsIDEyIEp1bCAyMDA0OgogIC0gbW92ZSBhdDQ1LmMgdG8gYm9hcmQvYXQ5MXJtOTIwMGRrLyBzaW5jZSB0aGlzIGlzIGF0OTFybTkyMDBkawogICAgYm9hcmQgc3BlY2lmaWMKICAtIHNwbGl0IG91dCB0aGUgTFhUOTcxQSBQSFkgZnJvbSBuc185NzUwX2V0aC5oCiAgLSBzcGxpdCB0aGUgZG05MTYxIHBoeSBwYXJ0IG91dCBvZiBhdDkxcm05MjAwX2V0aGVyLmMKCiogUGF0Y2ggYnkgQW5kcmVhcyBFbmdlbCwgMTIgSnVsIDIwMDQ6CiAgUmVwbGFjZWQgaGFyZGNvZGVkIFBMMDExIGNsb2NrIGZyZXF1ZW5jeSB3aXRoIGNvbmZpZyB2YXJpYWJsZS4KICBGaXhlZCB3cm9uZyBDT05GSUdfQ01EX0RGTCBkb2MuCgoqIFBhdGNoIGJ5IFRob21hcyBWaWVod2VnZXIsIDA5IEp1biAyMDA0OgogIG1ha2UgaXQgcG9zc2libGUgdG8gcmVtb3ZlIGNocGFydCB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIHBhcnRpdGlvbgoKKiBBZGQgc3VwcG9ydCBmb3IgY29uc29sZSBvdmVyIFVEUCAoY29tcGF0aWJsZSB0byBJbmdvIE1vbG5hcidzCiAgbmV0Y29uc29sZSBwYXRjaCB1bmRlciBMaW51eCkKCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxNiBKdWwgMjAwNDoKICAtIHN1cHBvcnQgbGFyZ2VyIEREUiBtZW1vcmllcyB1cCB0byAyRyBvbiB0aGUgUEM4NTQwLzg1NjBBRFMgYW5kCiAgICBTVFhHUDMgYm9hcmRzCiAgLSBNYWRlIE1QQzg1NDAvODU2MEFEUyBiZSAzM01oeiBQQ0kgYnkgZGVmYXVsdC4KICAtIFJlbW92ZWQgbW9sZHkgQ09ORklHX1JBTV9BU19GTEFTSCwgQ0ZHX0ZMQVNIX1BPUlRfV0lEVEhfMTYKICAgIGFuZCBDT05GSUdfTDJfSU5JVF9SQU0gb3B0aW9ucy4KICAtIFJlZmFjdG9yIExvY2FsIEJ1cyBpbml0aWFsaXphdGlvbiBvdXQgb2YgU0RSQU0gc2V0dXAuCiAgLSBSZS1pbXBsZW1lbnQgbmV3IHZlcnNpb24gb2YgTEJDMTEvRERSMTEgZXJyYXRhIHdvcmthcm91bmRzLgogIC0gTW92ZWQgYm9hcmQgc3BlY2lmaWMgUENJIGluaXQgcGFydHMgb3V0IG9mIENQVSBkaXJlY3RvcnkuCiAgLSBBZGRlZCBUTEIgZW50cnkgZm9yIFBDSS0xIElPIE1lbW9yeQogIC0gVXBkYXRlZCBSRUFETUUubXBjODV4eGFkcwoKKiBQYXRjaCBieSBTYXNjaGEgSGF1ZXIsIDI4IEp1bjoKICAtIGFkZCBnZW5lcmljIHN1cHBvcnQgZm9yIE1vdG9yb2xhIGkuTVggYXJjaGl0ZWN0dXJlCiAgLSBhZGQgc3VwcG9ydCBmb3IgbXgxYWRzLCBteDFmczIgYW5kIHNjYjkzMjggYm9hcmRzCgoqIFBhdGNoZXMgYnkgTWFyYyBMZWVtYW4sIDIzIEp1bCAyMDA0OgogIC0gQWRkIGRlZmluZSBmb3IgdGhlIFBDSS9NZW1vcnkgQnVmZmVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKICAtIGNvcnJlY3RlZCBjb21tZW50cyBpbiBjcHUvbXBjODI0eC9jcHVfaW5pdC5jCgoqIEFkZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzZXJpYWwgaW50ZXJmYWNlcwogIChmb3IgZXhhbXBsZSB0byBhbGxvdyBtb2RlbSBkaWFsLWluIC8gZGlhbC1vdXQpCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTUgSnVsIDIwMDQ6CiAgY3B1L3BwYzR4eC9zZHJhbS5jIHJld3JpdHRlbiBub3cgdXNpbmcgZ2V0X3JhbV9zaXplKCkKCiogRml4IE5TQ1UgY29uZmlnOyBhZGQgZXRoZXJuZXQgd2FrZXVwIGNvZGUuCgoqIEFkZCBsaW5rIGZvciBwcmVsb2FkZXIgZm9yIE1vdG9yb2xhIENvbGRmaXJlIHRvIFJFQURNRS5tNjhrCgoqIFBhdGNoIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDEyIEp1bCAyMDA0OgogIGZpeCBvdXRwdXQgZm9ybWF0dGluZyBpbiBkcml2ZXJzL2NmaV9mbGFzaC5jCgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDAyIEp1bCAyMDA0OgogIEZpeCBsb3dib290IChhZ2Fpbikgb24gTVBDNXh4eAoKKiBQYXRjaCBieSBDdXJ0IEJydW5lLCAwNyBKdWwgMjAwNDoKICByZWxvY2F0ZSBleGNlcHRpb24gdmVjdG9ycyBvbiBhcm03MjB0IGlmIG5lZWRlZAoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDA2IEp1bCAyMDA0OgogIC0gdXBkYXRlIG1hY2gtdHlwZXMuaCB0byBsYXRlc3QgYXJtLmxpbnV4Lm9yZy51ayBtYXN0ZXIgbGlzdAogIC0gU2V0IGNvcnJlY3QgT01BUDE2MTAgYmlfYXJjaF9udW1iZXIgZm9yIGJ1aWxkIHRhcmdldAoKKiBQYXRjaCBieSBDdXJ0IEJydW5lLCAwNiBKdWwgMjAwNDoKICBldmI0NTEwOiBhZGQgc3VwcG9ydCBmb3IgdGltZXIgaW50ZXJydXB0OyBjbGVhbnVwCgoqIFBhdGNoIGJ5IERhbiBQb2lyb3QsIDA2IEp1bCAyMDA0OgogIEZpeCBzYmM4MjYwIGVudmlyb25tZW50IHZhcmlhYmxlcwoKKiBDbGVhbnVwIHJlZHVuZGFuZCAiY29uc29sZSIgZW52aXJvbm1lbnQgdmFyaWFibGUKCiogUGF0Y2ggYnkgTWFyayBKb25hcywgMDUgSnVsIDIwMDQ6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBUb3RhbDUxMDAncyBhbmQgVG90YWw1MjAwJ3MgTENEIHNjcmVlbgoKKiBQYXRjaGVzIGJ5IERhbiBFaXNlbmh1dCwgMDEgSnVsIDIwMDQ6CiAgLSBSRUFETUUgZml4ZXMuCiAgLSBNb3ZlIGRvYzIwMDAuaCBpbmNsdWRlIHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZyBvbiBzb21lIGJvYXJkcwoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwMSBKdWwgMjAwNDoKICBBZGRlZCBzdXBwb3J0IGZvciBUb3RhbDUxMDAgYW5kIFRvdGFsNTIwMCAoUmV2LjEgYW5kIFJldi4yKQogIE1HVDUxMDAgYW5kIE1QQzUyMDAgYmFzZWQgRnJlZXNjYWxlIHBsYXRmb3Jtcy4KCiogUGF0Y2ggYnkgUGhpbGlwcGUgUm9iaW4sIDAxIEp1bCAyMDA0OgogIEFkZCBpbml0aWFsaXphdGlvbiBmb3IgSW50ZWdyYXRvciBhbmQgdmVyc2F0aWxlIGJvYXJkIGZpbGVzLgoKKiBQYXRjaCBieSBIaW5rbyBLb2NldmFyLCAwMSBKdW4gMjAwNDoKICBGaXggVkZEIEZCIGFsbG9jYXRpb24sIGFkZCBMQ0QgRkIgYWxsb2NhdGlvbiBvbiBBUk0KCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMzAgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFRRTTUyMDAgYm9hcmQKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjkgSnVuIDIwMDQ6CiAgQWRkIGxvb3B3IGNvbW1hbmQ6IGluZmluaXRlIHdyaXRlIGxvb3Agb24gYWRkcmVzcyByYW5nZQoKKiBQYXRjaGVzIGJ5IFlhc3VzaGkgU2hvamksIDI5IEp1biAyMDA0OgogIC0gYWRkIGVtcHR5IGluY2x1ZGUvYXNtLW1pY3JvYmxhemUvcHJvY2Vzc29yLmgKICAtIGFkZCB0byBDUkVESVRTIGFuZCBNQUlOVEFJTkVSUwogIC0gYWRkIGdkIGluaXRpYWxpemF0aW9uCiAgLSBhZGQgTWljcm9CbGF6ZSBhbmQgU1VaQUtVIGJvYXJkIHRvIE1BS0VBTEwgc2NyaXB0CiAgLSBhZGQgcmVzZXQgc3VwcG9ydCBmb3IgU1VaQUtVCiAgLSBhZGQgZmx1c2hfY2FjaGUoKSBmb3IgTWljcm9CbGF6ZQogIC0gYWRkIENGR19GTEFTSF9TSVpFIHRvIGluY2x1ZGUvY29uZmlncy9zdXpha3UuaCBzaW5jZSB3ZSBoYXZlIGZpeGVkCiAgICBzaXplIGZsYXNoIG1lbW9yeSBvbiBTVVpBS1UKCiogUGF0Y2ggYnkgUHJha2FzaCBLdW1hciwgMjcgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBQWEEyNTAgYmFzZWQgSW50cmluc3ljIENlcmYgYm9hcmQuCgoqIFBhdGNoIGJ5IFlhc3VzaGkgU2hvamksIDI3IEp1biAyMDA0OgogIGZpeCBjb21tZW50IGluIGluY2x1ZGUvY29tbW9uLmgKCiogUmVuYW1lIFNCQzg1NjAgaW50byBzYmM4NTYwIGZvciBjb25zaXN0ZW5jeQoKKiBQYXRjaCBieSBEYW5pZWwgUG9pcm90LCAyNCBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgV2luZCBSaXZlcidzIHNiYzgyNDAgYm9hcmQKCiogUGF0Y2hlcyBieSBZYXN1c2hpIFNob2ppLCAyNiBKdW4gMjAwNDoKICAtIGRyaXZlcnMvc2VyaWFsX3h1YXJ0bGl0ZS5jOiBmaXggInJldHVybiAwIiBpbiB2b2lkIGZ1bmN0aW9uCiAgLSBhZGQgbWljcm9ibGF6ZSBzdXBwb3J0IHRvIG1raW1hZ2UgdG9vbAoKKiBQYXRjaCBieSBGcmVkIEtsYXR0LCAyNSBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgV2luZFJpdmVyJ3Mgc2JjODU2MCBib2FyZAoKKiBQYXRjaCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5pZXJlLCAyNCBKdW4gMjAwNAogIFNtYWxsIEJ1Z3MgZml4ZXMgZm9yICJhdDkxcm05MjAwZGsiIGJvYXJkOgogIC0gVGltaW5nIG1vZGlmaWNhdGlvbnMgZm9yIFNQSSBEYXRhRmxhc2ggYWNjZXNzCiAgLSBGaXggTkFORCBmbGFzaCBkZXRlY3Rpb24gYnVnCgoqIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmllcmUsIDI0IEp1biAyMDA0OgogIEFkZCBTdXBwb3J0IGZvciBGbGFzaCBBVDQ5QlY2NDE2IGZvciBBVDkxUk05MjAwREsgYm9hcmQKCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxNyBKdW5lIDIwMDQ6CiAgQ29tcGxldGlvbiBvZiB0aGUgODU0MEFEUy84NTYwQURTIHVwZGF0ZXM6CiAgRml4IHNvbWUgUENJIGFuZCBSYXBpZCBJL08gbWVtb3J5IG1hcHMsCiAgSW5pdGlhbGl6ZSBib3RoIFRTRUMgMSBhbmQgMiwKICBJbml0aWFsaXplIFNEUkFNCiAgVXBkYXRlIE1BSU5UQUlORVIgZm9yIDg1eHggYm9hcmRzIGFuZCBSRUFETUUubXBjODV4eGFkcwoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxNiBKdW4gMjAwNDoKICBSZW1vdmUgb2Jzb2xldGUgQWRkZXJJSSBwb3J0IHdoaWNoIHdhcyBzdXBlcnNlZGVkIGJ5IHVuaWZpZWQKICBBZGRlcklJL0FkZGVyODd4IHBvcnQKCiogUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDE2IEp1biAyMDA0OgogIEZpeCBnY2MtMy4zLjMgd2FybmluZ3MgZm9yIHNtYzkxMTExLmMKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMiBKdWwgMjAwNDoKICAtIEZpeCBidWcgaW4gNDA1IGV0aGVybmV0IGRyaXZlcjsgYWxsb2NhdGVkIGRhdGEgbm90IGNsZWFyZWQhCiAgLSBGaXggcHJvYmxlbSBpbiA0MDUgaTJjIGRyaXZlcjsgZG9uJ3QgdHJ5IHRvIHByaW50IHdpdGhvdXQgY29uc29sZSEKCiogUGF0Y2ggYnkgUGF1bCBSdWhsYW5kLCAxMSBKdW4gMjAwNDoKICBSZW1vdmUgZGVidWcgY29kZSBmcm9tICdib2FyZC9scGQ3YTQweC9mbGFzaC5jJwoKKiBQYXRjaCBieSBBbmRyZWEgTWFyc29uLCAxMSBKdW4gMjAwNDoKICBVcGRhdGUgZm9yIFBQQ2hhbWVsZW9uIGJvYXJkOgogIC0gc3VwcG9ydCBmb3IgU3lzQ2xrIEAgMjVNSHoKICAtIHN1cHBvcnQgZm9yIFNpbGljb24gTW90aW9uIFNNNzEyIFZHQSBjb250cm9sbGVyCiAgLSBzb21lIGNsZWFuIHVwcwoKKiBQYXRjaGVzIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDEwIEp1biAyMDA0OgogIC0gZml4IHByb2JsZW1zIHdpdGggZXhhbXBsZXMvc3R1YnMuYyBmb3IgR0NDID49IDMuNAogIC0gZml4IHByb2JsZW1zIHdpdGggZ2QgaW5pdGlhbGl6YXRpb24KCiogUGF0Y2ggYnkgQ3VydCBCcnVuZSwgMTcgTWF5IDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgU2Ftc3VuZyBTM0M0NTEwQiBDUFUgKEFSTTd0ZG1pIGJhc2VkIFNvQykKICAtIEFkZCBzdXBwb3J0IGZvciBFU1BELUluYy4gRVZCNDUxMCBCb2FyZAoKKiBQYXRjaCBieSBNYXJjIExlZW1hbiwgMTEgTWF5IDIwMDQ6CiAgRml4IGZvciBNUEM4MjQ1IC0gcmVhZGluZyBQUEMgTWVtb3J5IGZyb20gYW5vdGhlciBkZXZpY2Ugd2l0aCB0aGUKICBQUEMgYXMgUENJIHRhcmdldCBkZXZpY2UgY29ycnVwdHMgZGF0YSBkdWUgdG8gaW50ZXJlbmFsIGhhcmR3YXJlCiAgYnVmZmVyaW5nLgoKKiBGaXggImNscyIgY29tbWFuZCB3aGVuIHVzZWQgd2l0aCBzcGxhc2ggc2NyZWVuCgoqIEluY3JlYXNlIE5GUyBkb3dubG9hZCB0aW1lb3V0IChub3cgMSBtaW4gLSAxMCBzZWMgaXMgdG8gc2hvcnQgZm9yIGEKICBzbG93IGRvd25sb2FkIG9mIGEgYmlnIGltYWdlKQoKKiBBZGQgImNscyIgZnVuY3Rpb24gdG8gTVBDODIzIExDRCBkcml2ZXIgc28gd2UgY2FuIHJlaW5pdGlhbGl6ZSB0aGUKICBkaXNwbGF5IGV2ZW4gYWZ0ZXIgc2hvd2luZyBhIGJpdG1hcAoKKiBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDA0IEp1biAyMDA0OgogIC0gRERSIFJhbSBzdXBwb3J0IGZvciBQTTUyMCAoTVBDNTIwMCkKICAtIHN1cHBvcnQgZm9yIGRpZmZlcmVudCBmbGFzaCB0eXBlcyAoUE01MjApCiAgLSBVU0IgLyBJREUgLyBDRi1DYXJkIC8gRGlza09uQ2hpcCBzdXBwb3J0IGZvciBQTTUyMAogIC0gOCBiaXQgYm9vdCByb20gc3VwcG9ydCBmb3IgUE01MjAvQ0U1MjAKICAtIEFkZCBhdXRvIFNEUkFNIG1vZHVsZSBkZXRlY3Rpb24gZm9yIE1pY3JvU3lzIENQQzQ1IGJvYXJkIChNUEM4MjQ1KQogIC0gSTJDIGFuZCBSVEMgc3VwcG9ydCBmb3IgQ1BDNDUKICAtIHN1cHBvcnQgb2YgbmV3IGZsYXNoIHR5cGUgKDI4RjE2MEMzVCkgZm9yIENQQzQ1CgoqIEZpeCBmbGFzaCBwYXJhbWV0ZXJzIHBhc3NlZCB0byBMaW51eCBmb3IgUFBDaGFtZWxlb24gYm9hcmQKCiogUmVtb3ZlIGV0aF9pbml0KCkgZnJvbSBsaWJfYXJtL2JvYXJkLmM7IGl0J3MgZG9uZSBpbiBuZXQubmV0LmMuCgoqIFBhdGNoIGJ5IFBhdWwgUnVobGFuZCwgMTAgSnVuIDIwMDQ6CiAgZml4IHN1cHBvcnQgZm9yIExvZ2ljIFNESy1MSDdBNDA0IGJvYXJkIGFuZCBjbGVhbiB1cCB0aGUKICBMSDdBNDA0IHJlZ2lzdGVyIG1hY3Jvcy4KCiogUGF0Y2ggYnkgTWF0dGhldyBNY0NsaW50b2NrLCAxMCBKdW4gMjAwNDoKICBNb2RpZnkgY29kZSB0byBzZWxlY3QgY29ycmVjdCBzZXJpYWwgY2xvY2sgb24gU2FuZHBvaW50ODI0NQoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEwIEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBJbnRlbCBLMyBzdHJhdGEgZmxhc2guCgoqIFBhdGNoIGJ5IFRob21hcyBCcmFuZCwgMTAgSnVuIDIwMDQ6CiAgRml4ICJsb2FkcyIgY29tbWFuZCBvbiBESzFTMTAgYm9hcmQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDkgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIDhNQiBmbGFzaCBTSU1NIGFuZCBKRkZTMiBmaWxlIHN5c3RlbSBvbgogIE1vdG9yb2xhIEZBRFMgYm9hcmQgYW5kIGl0cyBkZXJpdmF0aXZlcyAoTVBDODZ4QURTLCBNUEM4ODVBRFMpLgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwOSBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgQW5hbG9ndWUmTWljcm8gQWRkZXI4N3ggYW5kIHRoZSBvbGRlciBBZGRlcklJIGJvYXJkLgoKKiBQYXRjaCBieSBNaW5nLUxlbiBXdSwgMDkgSnVuIDIwMDQ6CiAgQWRkIHN1cHBwb3J0IGZvciBNQzkzMjggKERhcmdvbmJhbGwpIENQVSBhbmQgTW90b3JvbGEgTVgxQURTIGJvYXJkCgoqIFBhdGNoIGJ5IFNhbSBTb25nLCAwOSBKdW4gMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBSUFhsaXRlX0RXIGJvYXJkCiAgLSBVcGRhdGUgRkxBU0ggZHJpdmVyIGZvciA0KkFNMjlETDMyM0RCOTBWSQogIC0gQWRkIG9wdGlvbiBjb25maWd1cmF0aW9uIG9mIENGR19FTlZfSVNfSU5fTlZSQU0gb24gUlBYbGl0ZV9EVyBib2FyZAoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwOCBKdW5lIDIwMDQ6CiAgLSBNYWtlIE1QQzUyMDAgYm9hcmRzIGV2YWx1YXRlIHRoZSBTVlIgdG8gcHJpbnQgcHJvY2Vzc29yIG5hbWUgYW5kCiAgICB2ZXJzaW9uIGluIGNoZWNrY3B1KCkgKGNwdS9tcGM1eHh4L2NwdS5jKS4KCiogUGF0Y2ggYnkgS2FpLVV3ZSBCbG9lbSwgMDYgTWF5IDIwMDQ6CiAgRml4IGVuZGlhbmVzcyBwcm9ibGVtIGluIGNyYW1mcyBjb2RlCgoqIFBhdGNoIGJ5IFRvbSBBcm1pc3RlYWQsIDA0IEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBNQVg2OTAwIFJUQwoKKiBQYXRjaGVzIGJ5IExhZGlzbGF2IE1pY2hsLCAwMyBKdW4gMjAwNDoKICAtIGZpeCBjZmlfZmxhc2guYyBvbiBMRSBzeXN0ZW1zCiAgLSBsZXQgJ21ha2UgbXJwcm9wZXInIGRlbGV0ZSB1LWJvb3QuaW1nIGFzIHdlbGwKICAtIHR1cm4gcHJpbnRmIGludG8gZGVidWcgaW4gY2ZpX2ZsYXNoLmMKCiogUGF0Y2ggYnkgS3VydCBTdHJlbWVyY2gsIDI4IE1heSAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBFeHlzIFhTRW5naW5lIGJvYXJkCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI3IE1heSAyMDA0OgogIEZpeCBhIE1QQzV4eHggSTJDIHRpbWluZyBpc3N1ZSBpbiBpMmNfcHJvYmUoKS4KCiogUGF0Y2ggYnkgTGVpZiBMaW5kaG9sbSwgMjcgTWF5IDIwMDQ6CiAgRml4IGJvYXJkX2luaXRfZigpIGZvciBkYmF1MXgwMCBib2FyZC4KCiogUGF0Y2ggYnkgSW1yZSBEZWFrLCAyNiBNYXkgMjAwNDoKICBPbiBPTUFQMTYxMCBwbGF0Zm9ybXMgY2hlY2sgaWYgYm9vdGluZyBmcm9tIFJBTShDUzApIG9yIGZsYXNoKENTMykuCiAgU2V0IGZsYXNoIGJhc2UgYWNjb3JkaW5nbHksIGFuZCBkZWNpZGUgd2hldGhlciB0byBkbyBvciBza2lwIGJvYXJkCiAgc3BlY2lmaWMgc2V0dXAgc3RlcHMuCgoqIFBhdGNoIGJ5IEpvc2VmIEJhdW1nYXJ0bmVyLCAyNiBNYXkgMjAwNDoKICBBZGQgbWlzc2luZyBkZWZpbmUgaW4gaW5jbHVkZS9hc20tbTY4ay9nbG9iYWxfZGF0YS5oCgoqIFBhdGNoIGJ5IEpvc2VmIEJhdW1nYXJ0bmVyLCAyNSBNYXkgMjAwNDoKICBBZGQgbWlzc2luZyBmdW5jdGlvbnMgZ2V0X3RpY2tzKCkgYW5kIGdldF90YmNsaygpIGluIGxpYl9tNjhrL3RpbWUuYwoKKiBQYXRjaCBieSBQYXVsIFJ1aGxhbmQsIDI0IE1heSAyMDA0OgogIGZpeCBTRFJBTSBpbml0aWFsaXphdGlvbiBmb3IgTFBEN0E0MDAgYm9hcmQuCgoqIFBhdGNoIGJ5IEppYW4gWmhhbmcsIDIwIE1heSAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciBlbnZpcm9ubWVudCBpbiBOQU5EIGZsYXNoCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIwIE1heSAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBJbnRlcnBoYXNlIGlTUEFOIGJvYXJkcy4KCiogUGF0Y2hlcyBieSBQYXVsIFJ1aGxhbmQsIDE3IE1heSAyMDA0OgogIC0gQWRkIEkvTyBmdW5jdGlvbnMgdG8gdGhlIHNtYzkxMTExIGV0aGVybmV0IGRyaXZlciB0byBzdXBwb3J0IHRoZQogICAgTG9naWMgTFBEN0E0MHggYm9hcmRzLgogIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBMb2dpYyBab29tIExIN0E0MHggYmFzZWQgU0RLIGJvYXJkKHMpLAogICAgc3BlY2lmaWNhbGx5IHRoZSBMUEQ3QTQwMC4KCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE1IE1heSAyMDA0OgogIC0gY2FsbCBNQUMgYWRkcmVzcyByZWFkaW5nIGNvZGUgYWxzbyBmb3IgU01TQzkxQzExMTsKICAtIG1ha2UgU01TQzkxQzExMSB0aW1lb3V0IGNvbmZpZ3VyYWJsZSwgcmVtb3ZlIGR1cGxpY2F0ZSBjb2RlCiAgLSBmaXggZ2V0X3RpbWVyKCkgZm9yIFBYQQogIC0gdXBkYXRlIGRvYy9SRUFETUUuSkZGUzIKICAtIHVzZSAiYm9vdGZpbGUiIGVudiB2YXJpYWJsZSBhbHNvIGZvciBqZmZzMgoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxNCBNYXkgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgQ29nZW50IENTQjQ3MiBib2FyZCAoOE1CIEZsYXNoIFJldikKCiogUGF0Y2ggYnkgVGhvbWFzIFZpZWh3ZWdlciwgMTQgTWF5IDIwMDQ6CiAgLSBmbGFzaC5oOiBtb3JlIGZsYXNoIHR5cGVzIGFkZGVkCiAgLSBpbW1hcF84MjYwLmg6IHNvbWUgYml0cyBhZGRlZCAodXNlZnVsIGZvciBSTUlJKQogIC0gY21kX2NvbmluZm8uYzogdHlwbyBjb3JyZWN0ZWQsIHByaW50ZiAtPiBwdXRzCiAgLSByZWR1Y2VkIHNpemUgYnkgcmVwbGFjaW5nIHNwYWNlcyB3aXRoIHRhYgoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEzIE1heSAyMDA0OgogIEFkZCAnaW1nZXh0cmFjdCcgY29tbWFuZDogZXh0cmFjdCBvbmUgcGFydCBvZiBhIG11bHRpIGZpbGUgaW1hZ2UuCgoqIFBhdGNoZXMgYnkgSm9uIExvZWxpZ2VyLCAxMSBNYXkgMjAwNDoKICBEeW5hbWljYWxseSBoYW5kbGUgUkVWMSBhbmQgUkVWMiBNUEM4NXh4IHBhcnRzLgogICAgKEpvbiBMb2VsaWdlciwgMTAtTWF5LTIwMDQpLgogIE5ldyBjb25zaXN0ZW50IG1lbW9yeSBtYXAgYW5kIExvY2FsIEFjY2VzcyBXaW5kb3cgYWNyb3NzIE1QQzg1eHggbGluZS4KICBOZXcgQ0NTUkJBUiBhdCAweEUwMDBfMDAwMCBub3cuCiAgQWRkIFJBUElEIEkvTyBtZW1vcnkgbWFwLgogIE5ldyBtZW1vcnkgbWFwIGluIFJFQURNRS5NUEM4NXh4YWRzCiAgICAoS3VtYXIgR2FsYSwgMTAtTWF5LTIwMDQpCiAgQmV0dGVyIGJvYXJkIGFuZCBDUFUgaWRlbnRpZmljYXRpb24gb24gTVBDODV4eCBib2FyZHMgYXQgYm9vdC4KICAgIChKb24gTG9lbGlnZXIsIDEwLU1heS0yMDA0KQogIFNEUkFNIGNsb2NrIGNvbnRyb2wgZml4ZXMgb24gTVBDODU0MEFEUyAmIE1QQzg1NjAgYm9hcmRzLgogIFNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBNUEM4NTQwQURTICYgTVBDODU2MEFEUyBjbGVhbmVkIHVwLgogICAgKEppbSBSb2JlcnRzb24sIDEwLU1heS0yMDA0KQogIFJld3JpdGUgb2YgdGhlIE1QQzg1eHggVGhyZWUgU3BlZWQgRXRoZXJuZXQgQ29udHJvbGxlciAoVFNFQykgZHJpdmVyLgogIFN1cHBvcnRzIG11bHRpcGxlIFBIWXMuCiAgICAoQW5keSBGbGVtaW5nLCAxMC1NYXktMjAwNCkKICBTb21lIFJFQURNRS5NUEM4NXh4YWRzIHVwZGF0ZXMuCiAgICAoS3VtYXIgR2FsYSwgMTAtTWF5LTIwMDQpCiAgQ29weXJpZ2h0IHVwZGF0ZXMgZm9yICJGcmVlc2NhbGUiCiAgICAoQW5keSBGbGVtaW5nLCAxMC1NYXktMjAwNCkKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMTEgTWF5IDIwMDQ6CiAgQWRkIGZsYXNoIHN1cHBvcnQgZm9yIFNUIE0yOVcwNDBCCiAgUmVkdWNlIEpTRSBzcGVjaWZpYyBmbGFzaC5jIHRvIHJlbW92ZSBkZWFkIGNvZGUuCgoqIFBhdGNoIGJ5IE1hcmt1cyBQaWV0cmVrLCAwNCBNYXkgMjAwNDoKICBGaXggY2xlYXJfYnNzIGNvZGUgZm9yIEFSTSBzeXN0ZW1zIChhbGwgZXhjZXB0IHMzYzQ0YjAgd2hpY2gKICBkb2Vzbid0IGNsZWFyIEJTUyBhdCBhbGw/KQoKKiBGaXggInBpbmciIHByb2JsZW0gb24gSU5DLUlQIGJvYXJkLiBTdHJhbmdlIHByb2JsZW06CiAgU29tZXRpbWVzIHRoZSBzdG9yZSB3b3JkIGluc3RydWN0aW9uIGhhbmdzIHdoaWxlIHdyaXRpbmcgdG8gb25lIG9mCiAgdGhlIFN3aXRjaCByZWdpc3RlcnMsIGJ1dCBvbmx5IGlmIHRoZSBuZXh0IGluc3RydWN0aW9uIGlzIDE2LWJ5dGUKICBhbGlnbmVkLiBNb3ZpbmcgdGhlIGluc3RydWN0aW9uIGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBzb21laG93CiAgbWFrZXMgdGhlIHByb2JsZW0gZ28gYXdheS4KCiogUGF0Y2ggYnkgUmlzaGkgQmhhdHRhY2hhcnlhLCAwOCBNYXkgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgVEkgT01BUDU5MTIgT1NLIEJvYXJkCgoqIFBhdGNoIGJ5IFNhbSBTb25nIE1heSwgMDcgTWF5IDIwMDQ6CiAgRml4IHR5cG8gb2YgVVBNIHRhYmxlIGZvciBybXUgYm9hcmQKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDA1IE1heSAyMDA0OgogIC0gSW50cmFjb20gYm9hcmQgdXBkYXRlLgogIC0gQWRkIENvZGVjIFBPU1QuCgoqIEFkZCBzdXBwb3J0IGZvciB0aGUgc2Vjb25kIEV0aGVybmV0IGludGVyZmFjZSBmb3IgdGhlICdQUENoYW1lbGVvbicKICBib2FyZC4KCiogUGF0Y2ggYnkgRGF2ZSBQZXZlcmxleSwgMzAgQXByIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIE9NQVA3MzAgUGVyc2V1czIgRGV2ZWxvcG1lbnQgYm9hcmQKCiogUGF0Y2ggYnkgQWxhbiBKLiBMdXNlLCAyOSBBcHIgMjAwNDoKICBGaXggZmxhc2ggY2hpcC1zZWxlY3QgKE9SMCkgb3B0aW9uIHJlZ2lzdGVyIHNldHRpbmcgb24gRkFEUyBib2FyZHMuCgoqIFBhdGNoIGJ5IEFsYW4gSi4gTHVzZSwgMjkgQXByIDIwMDQ6CiAgUmVwb3J0IE1JSSBuZXR3b3JrIHNwZWVkIGFuZCBkdXBsZXggc2V0dGluZyBwcm9wZXJseSB3aGVuCiAgYXV0by1uZWdvdGlhdGUgaXMgbm90IGVuYWJsZWQuCgoqIFBhdGNoIGJ5IEphcnJldHQgUmVkZCwgMjkgQXByIDIwMDQ6CiAgRml4IGhhbmcgb24gcmVzZXQgb24gT2NvdGVhIGJvYXJkIGR1ZSB0byBmbGFzaCBpbiB3cm9uZyBtb2RlLgoKKiBQYXRjaCBieSBEYXZlIFBldmVybGV5LCAyOSBBcHIgMjAwNDoKICBhZGQgTUFDIGFkZHJlc3MgZGV0ZWN0aW9uIHRvIHNtYzkxMTExIGRyaXZlcgoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDI4IEFwciAyMDA0OgogIGZpeCB0eXBvIGluIGxpYl9hcm0vYm9hcmQuYwoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAyMCBBcHIgMjAwNDoKICAtIFJFQURNRSB1cGRhdGU6IGFkZCBDT05GSUdfQ1NCMjcyIGFuZCBjc2IyNzJfY29uZmlnCiAgLSBhZGQgZGVzY3JpcHRpb25zIGZvciBzb21lIE1JSS9QSFkgb3B0aW9ucywgQ09ORklHX0kyQ0ZBU1QsIGFuZAogICAgaTJjZmFzdCBlbnZpcm9ubWVudCB2YXJpYWJsZQoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxOSBBcHIgMjAwNDoKICAtIFJlbmFtZSBEVUVUX0FEUyB0byBNUEM4ODVBRFMKICAtIFJlbmFtZSBDT05GSUdfRFVFVCB0byBDT05GSUdfTVBDODg1X0ZBTUlMWQogIC0gUmVuYW1lIENPTkZJR184NjZfZXRfYWwgdG8gQ09ORklHX01QQzg2Nl9GQU1JTFkKICAtIENsZWFuIHVwIEZBRFMgZmFtaWx5IHBvcnQgdG8gdXNlIHRoZSBuZXcgZGVmaW5lcwoKKiBGaXggUENJIHN1cHBvcnQgb24gQ1BDNDUgYm9hcmQKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyNSBBcHIgMjAwNDoKICBBZGQgTmlvcyBHREIvSlRBRyBDb25zb2xlIHN1cHBvcnQ6CiAgLSBBZGQgc3R1YnMgdG8gc3VwcG9ydCBnZGIgdmlhIEpUQUcuCiAgLSBBZGQgc3VwcG9ydCBmb3IgY29uc29sZSBvdmVyIEpUQUcuCiAgLSBNaW5vciBjbGVhbnVwLgoKKiBBZGQgc3VwcG9ydCBmb3IgQ0FUY2VudGVyIGJvYXJkIChiYXNlZCBvbiBQUENoYW1lbGVvbiBNRSBtb2R1bGUpCgoqIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDEyIE1heSAyMDA0OgogIFVzaW5nIGV4dGVybmFsIHdhdGNoZG9nIGZvciBLVVA0IGJvYXJkcyBpbiBtcGM4eHgvY3B1LmM7CiAgbG9hZF9zZXJudW1fZXRoYWRkcigpIGZvciBLVVA0IGJvYXJkcyBpbiBsaWJfcHBjL2JvYXJkLmM7CiAgdmFyaW91cyBjaGFuZ2VzIHRvIEtVUDQgYm9hcmQgc3BlY2lmaWMgZmlsZXMKCiogRml4IG1pbm9yIG5ldHdvcmsgcHJvYmxlbSBvbiBNUEM1MjAwOiBuZWVkIHNvbWUgZGVsYXkgYmV0d2VlbgogIHJlc2V0dGluZyB0aGUgUEhZIGFuZCBzZW5kaW5nIHRoZSBmaXJzdCBwYWNrZXQuIEltcGxlbWVudGVkIGluIGEKICAibmF0dXJhbCIgd2F5IGJ5IGludm9raW5nIHRoZSBQSFkgcmVzZXQgYW5kIGluaXRpYWxpemF0aW9uIGNvZGUKICBvbmx5IG9uY2UgYWZ0ZXIgcG93ZXIgb24gdnMuIGVhY2ggdGltZSB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgdXAuCgoqIEFkZCBzb21lIGxpbWl0ZWQgc3VwcG9ydCBmb3IgbG93LXNwZWVkIGRldmljZXMgdG8gU0w4MTEgVVNCIGNvbnRyb2xsZXIKICAoYXQgbGVhc3QgInVzYiByZXNldCIgbm93IHBhc3NlcyBzdWNjZXNzZnVsbHkgYW5kICJ1c2IgaW5mbyIgZGlzcGxheXMKICBjb3JyZWN0IGluZm9ybWF0aW9uKQoKKiBDaGFuZ2UgaW5pdCBzZXF1ZW5jZSBmb3IgbXVsdGlwbGUgbmV0d29yayBpbnRlcmZhY2VzOiBpbml0aWFsaXplCiAgb24tY2hpcCBpbnRlcmZhY2VzIGJlZm9yZSBleHRlcm5hbCBjYXJkcy4KCiogRml4IG1lbW9yeSBsZWFrIGluIHRoZSBOQU5ELXNwZWNpZmljIEpGRlMyIGNvZGUKCiogRml4IFNMODExIFVTQiBjb250cm9sbGVyIHdoZW4gYXR0YWNoZWQgdG8gYSBVU0IgaHViCgoqIEZpeCBjb25maWcgb3B0aW9uIHNwZWxsaW5nIGluIFBNNTIwIGNvbmZpZyBmaWxlCgoqIEZpeCBQSFkgZGlzY292ZXJ5IHByb2JsZW0gaW4gY3B1L21wYzh4eC9mZWMuYyAoaW50cm9kdWNlZCBieQogIHBhdGNoZXMgYnkgUGFudGVsaXMgQW50b25pb3UsIDMwIE1hciAyMDA0KQoKKiBGaXggbWlub3IgTkFORCBKRkZTMiByZWxhdGVkIGlzc3VlCgoqIEZpeGVzIGZvciBTTDgxMSBVU0IgY29udHJvbGxlcjoKICAtIGltcGxlbWVudCB3b3JrYXJvdW5kIGZvciBicm9rZW4gbWVtb3J5IHN0aWNrCiAgLSBpbXByb3ZlIGVycm9yIGhhbmRsaW5nCgoqIEluY3JlYXNlIHBhY2tldCBzZW5kIHRpbWVvdXQgdG8gMSBtcyBpbiBjcHUvbXBjOHh4L3NjYy5jIHRvIGJldHRlcgogIGNvcGUgd2l0aCBjb25nZXN0ZWQgbmV0d29ya3MuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAyMyBBcHIgMjAwNDoKICBGaXggVlNDL0NJUyA4MjAxIHBoeSBkZXNjcmFtYmxlciBpbnRlcm9wZXJhYmlsaXR5IHRpbWluZyBkdWUgdG8KICBlcnJhdGEgZnJvbSBWaXRlc3NlIFNlbWljb25kdWN0b3IuCgoqIFBhdGNoIGJ5IFBoaWxpcHBlIFJvYmluLCAyMiBBcHIgMjAwNDoKICBGaXggZXRoZXJuZXQgY29uZmlndXJhdGlvbiBmb3IgInZlcnNhdGlsZSIgYm9hcmQKCiogUGF0Y2ggYnkgS3NoaXRpaiBHdXB0YSwgMjEgQXByIDIwMDQ6CiAgUmVtb3ZlIGJ1c3kgbG9vcCBhbmQgdXNlIE1QVSB0aW1lciBmciB1c2xlZXAoKSBvbiBPTUFQMTUxMC8xNjEwIGJvYXJkcwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNCBGZWIgMjAwNDoKICBGaXggYSBidWcgaW4gQVQ5MVJNOTIwMCBldGhlcm5ldCBkcml2ZXI6CiAgVGhlIE1JSSBpbnRlcmZhY2UgaXMgbm93IGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIFBIWS4KCiogUGF0Y2ggYnkgSm9obiBLZXJsLCAxOSBBcHIgMjAwNDoKICBVc2UgVS1ib290J3MgbWlpcGh5LmggZm9yIFBIWSByZWdpc3RlciBuYW1lcywgcmF0aGVyIHRoYW4KICBpbnRyb2R1Y2luZyBhIG5ldyBoZWFkZXIgZmlsZS4KCiogVXBkYXRlIHBjaV9pZHMuaCBmcm9tIGxpbnV4LTIuNC4yNgoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAxOSBBcHIgMjAwNDoKICBGaXggcHJvYmxlbSBjYXVzZSBieSBWTEFOIGZ1bmN0aW9uIG9uIGxpdHRsZSBlbmRpYW4gYXJjaGl0ZWN0dXJlCiAgd2l0aG91dCBWTEFOIGVudmlyb25tZW50CgoqIENsZWFuIHVwIHRoZSBUUU04eHhfWVlNSHogY29uZmlndXJhdGlvbnM7IGFsbG93IHRvIHVzZSB0aGUgc2FtZQogIGJpbmFyeSBpbWFnZSBmb3IgYWxsIGNsb2NrIGZyZXF1ZW5jaWVzLiBJbXBsZW1lbnQgcnVuLXRpbWUKICBvcHRpbWl6YXRpb24gb2YgZmxhc2ggYWNjZXNzIHRpbWluZyBiYXNlZCBvbiB0aGUgYWN0dWFsIGJ1cwogIGZyZXF1ZW5jeS4KCiogTW9kaWZ5IEtVUDRYIGJvYXJkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIFNMODExIGRyaXZlciBmb3IgVVNCIG1lbW9yeQogIHN0aWNrcyAoaW5jbHVkaW5nIEZBVCAvIFZGQVQgZmlsZXN5c3RlbSBzdXBwb3J0KQoKKiBBZGQgU0w4MTEgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBkcml2ZXIgZm9yIFVTQgoKKiBBZGQgQ0ZHX0kyQ19FRVBST01fQUREUl9PVkVSRkxPVyBkZXNyaXB0aW9uIHRvIFJFQURNRQoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTkgQXByIDIwMDQ6CiAgQWxsb3cgdG8gdXNlIHNoZWxsIHN0eWxlIHN5bnRheCAoaS4gZS4gJHt2YXJ9ICkgd2l0aCBzdGFuZGFyZCBwYXJzZXIuCiAgTWlub3IgcGF0Y2hlcyBmb3IgSW50cmFjb20gYm9hcmRzLgoKKiBQYXRjaCBieSBDaHJpc3RpYW4gUGVsbCwgMTkgQXByIDIwMDQ6CiAgY2xlYW51cCBzdXBwb3J0IGZvciBDRi9JREUgb24gUENNQ0lBIGZvciBQWEEyNVgKCiogVGVtcG9yYXJpbHkgZGlzYWJsZWQgSm9obiBLZXJsJ3MgZXh0ZW5kZWQgTUlJIGNvbW1hbmQgY29kZSBiZWNhdXNlCiAgIm1paXZhbHMuaCIgaXMgbWlzc2luZwoKKiBQYXRjaGVzIGJ5IE1hcmsgSm9uYXMsIDEzIEFwciAyMDA0OgogIC0gUmVtb3ZlIENTMCBjaGlwIHNlbGVjdCB0aW1pbmcgc2V0dGluZyBmcm9tIGNwdS9tcGM1eHh4L3N0YXJ0LlMKICAtIEFkZCBzeW5jIGluc3RydWN0aW9ucyB0byBJY2VDdWJlIFNEUkFNIGluaXQgY29kZQogIC0gTW92ZSBTRFJBTSBjaGlwIGNvbnN0YW50cyBpbnRvIHNlcGVyYXRlIGluY2x1ZGUgZmlsZXMKICAtIFVuaWZ5IEREUiBhbmQgU0RSIGluaXRpYWxpemF0aW9uIGNvZGUKICAtIFVuaWZ5IGFsbCBJY2VDdWJlIChMaXRlNXh4eCkgdGFyZ2V0IG5hbWVzCgoqIFBhdGNoIGJ5IEpvaG4gS2VybCwgMTYgQXByIDIwMDQ6CiAgRW5hYmxlIHJhbmdlcyBpbiBtaWkgY29tbWFuZCwgZS5nLiBtaWkgcmVhZCAwLTFmIDAgb3IKICBtaWkgcmVhZCA0LTcgMTgtMWEuICBBbHNvIGFkZCBtaWkgZHVtcCBzdWJjb21tYW5kIGZvcgogIHByZXR0eS1wcmludGluZyBzdGFuZGFyZCByZWdzIDAtNS4KCiogUGF0Y2ggYnkgIFN0ZXBoZW4gV2lsbGlhbXMsIDE2IEFwcmlsIDIwMDQ6CiAgZml4IHR5cG8gaW4gSlNFLmg7IHVwZGF0ZSBNQUlOVEFJTkVSUwoKKiBQYXRjaCBieSBNYXR0aGV3IFMuIE1jQ2xpbnRvY2ssIDE0IEFwciAyMDA0OgogIGZpeCBpbml0ZHJhbSBmdW5jdGlvbiBmb3IgdXR4ODI0NSBib2FyZAoKKiBQYXRjaCBieSBNYXJrdXMgUGlldHJlaywgMTQgQXByIDIwMDQ6CiAgdXNlIEFUQUdfSU5JVFJEMiBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWQgQVRBR19JTklUUkQgdGFnCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAxOCBBcHIgMjAwNDoKICBwcm92aWRlIHRoZSBJREUgUmVzZXQgRnVuY3Rpb24gZm9yIEVNSyA1MjAwIGJvYXJkcwoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAxMiBBcHIgMjAwNDoKICBmaXggcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3tieXRlLHdvcmR9X3ZpYV9kd29yZCBwcm9ibGVtcwoKKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDEyIEFwciAyMDA0OgogIFVwZGF0ZSBtYXggUkFNIHNpemUgZm9yIGRlYnJpcyBib2FyZAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOCBBcHIgMjAwNDoKICBBZGQgVExCIGVudHJ5IGZvciBzZWNvbmQgRElNTSBzbG90IG9uIG9jb3RlYQoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwOCBBcHIgMjAwNDoKICBhZGQgUlRMODE2OSBuZXR3b3JrIGRyaXZlcgoKKiBQYXRjaCBieSBEYW4gTWFsZWssIDA3IEFwciAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIFJQQy9TVHggR1AzLCBNb3Rvcm9sYSA4NTYwIGJvYXJkCiAgLSBVcGRhdGUgODV4eCBUU0VDIGRyaXZlciBzbyBpdCBzZWFyY2hlcyBNSUkgZm9yIGZpcnN0IGF2YWlsYWJsZSBQSFkKICAgIGFuZCB1c2VzIHRoYXQgb25lLgogIC0gQWRkIGZ1bmN0aW9ucyB0byBzdXBwb3J0IGNvbnNvbGUgTUlJIGNvbW1hbmRzLgoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAwNyBBcHIgMjAwNDoKICBNb3ZlIGluaXRpYWxpemF0aW9uIG9mIGJpX2lpY19mYXN0W10KICBmcm9tIGJvYXJkX2luaXRfZigpIHRvIGJvYXJkX2luaXRfcigpCgoqIFBhdGNoIGJ5IFlhc3VzaGkgU2hvamksIDA3IEFwciAyMDA0OgogIENsZWFudXAgbWljcm9ibGF6ZSBwb3J0CgoqIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMDcgQXByIDIwMDQ6CiAgQWRkIGF1dG8gU0RSQU0gbW9kdWxlIGRldGVjdGlvbiBmb3IgRGVicmlzIGJvYXJkCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAwNiBBcHIgMjAwNDoKICAtIEZpeCBzb21lIFBDSSBwcm9ibGVtcyBvbiB0aGUgTVBDODI2NkFEUyBib2FyZAogIC0gRml4IHRoZSBsb2NhdGlvbiBvZiBzb21lIFBDSSBlbnRyaWVzIGluIHRoZSBpbW1hcCBzdHJ1Y3R1cmUKCiogUGF0Y2ggYnkgWWFzdXNoaSBTaG9qaSwgMDcgQXByIDIwMDQ6CiAgLSBhZGQgc3VwcG9ydCBmb3IgbWljcm9ibGF6ZSBwcm9jZXNzb3JzCiAgLSBhZGQgc3VwcG9ydCBmb3IgQXRtYXJrVGVjaG5vICJzdXpha3UiIGJvYXJkCgoqIENvbmZpZ3VyZSBQUENoYW1lbGVvbiBib2FyZCB0byB1c2UgcmVkdW5kYW5kIGVudmlyb25tZW50IGluIGZsYXNoCgoqIENvbmZpZ3VyZSBQUENoYW1lbGVvbiBib2FyZCB0byB1c2UgSkZGUzIgTkFORCBzdXBwb3J0LgoKKiBBZGRlZCBzdXBwb3J0IGZvciBKRkZTMiBmaWxlc3lzdGVtIChyZWFkLW9ubHkpIG9uIHRvcCBvZiBOQU5EIGZsYXNoCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxNiBBcHIgMjAwNDoKICBMQkE0OCBmaXhlcwoKKiBQYXRjaGVzIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNiBBcHIgMjAwNDoKICAtIGFkZCBzdXBwb3J0IGZvciBhIG5ldyB2ZXJzaW9uIG9mIGFuIEludHJhY29tIGJvYXJkIGFuZCBmaXgKICAgIHZhcmlvdXMgb3RoZXIgdGhpbmdzIG9uIG90aGVycy4KICAtIGFkZCB2ZXJpZnkgc3VwcG9ydCB0byB0aGUgY3JjMzIgY29tbWFuZCAoZGVmaW5lCiAgICBDT05GSUdfQ1JDMzJfVkVSSUZZIHRvIGVuYWJsZSBpdCkKICAtIGZpeCBGRUMgZHJpdmVyIGZvciBNUEM4eHggc3lzdGVtczoKICAgIDEuIGZpeCBjb21waWxhdGlvbiBwcm9ibGVtcyBmb3IgYm9hcmRzIHRoYXQgdXNlIGR5bmFtaWMKICAgICAgIGFsbG9jYXRpb24gb2YgRFBSQU0KICAgIDIuIHNodXQgZG93biBGRUMgYWZ0ZXIgbmV0d29yayB0cmFuc2ZlcnMKICAtIEhVU0ggcGFyc2VyIGZpeGVzOgogICAgMS4gQSBuZXcgdGVzdCBjb21tYW5kIHdhcyBhZGRlZC4gVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZgogICAgICAgdGhlIG9uZSBpbiB0aGUgYm91cm5lIHNoZWxsLgogICAgMi4gQSBuZXcgZXhpdCBjb21tYW5kIHdhcyBhZGRlZCB3aGljaCB0ZXJtaW5hdGVzIHRoZSBjdXJyZW50CiAgICAgICBleGVjdXRpbmcgc2NyaXB0LgogICAgMy4gRml4ZWQgaGFuZGluZyBvZiAkPyAoZXhpdCBjb2RlIG9mIGxhc3QgZXhlY3V0ZWQgY29tbWFuZCkKICAtIEZpeCBzb21lIGNvbXBpbGUgcHJvYmxlbXM7CiAgICBhZGQgIm9uY2UiIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBuZXRyZXRyeSB2YXJpYWJsZQoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDAyIEFwciAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciBJbnRlbCBBc3NhYmV0IGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDAxIEFwciAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBQaWN0dXJlIEVsZW1lbnRzIEpTRSBib2FyZAoKKiBQYXRjaCBieSBDaHJpc3RpYW4gUGVsbCwgMDEgQXByIDIwMDQ6CiAgQWRkIENvbXBhY3RGbGFzaCBzdXBwb3J0IGZvciBQWEEgc3lzdGVtcy4KCiogUGF0Y2hlcyBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMzAgTWFyIDIwMDQ6CiAgLSBhZGQgYXV0by1jb21wbGV0ZSBzdXBwb3J0IHRvIHRoZSBVLUJvb3QgQ0xJCiAgLSBhZGQgc3VwcG9ydCBmb3IgTkVUVEEgYW5kIE5FVFBIT05FIGJvYXJkczsgZml4IE5FVFZJQSBib2FyZAogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBFcHNvbiAxNTZ4IHNlcmllcyBvZiBncmFwaGljYWwgZGlzcGxheXMKICAgIChUaGVzZSBkaXNwbGF5cyBhcmUgc2VyaWFsIGFuZCBub3Qgc3VpdGFibGUgZm9yIHVzaW5nIGEgbm9ybWFsCiAgICBmcmFtZWJ1ZmZlciBjb25zb2xlIG9uIHRoZW0pCiAgLSBhZGQgaW5mcmFzdHJ1Y3R1cmUgbmVlZGVkIGluIG9yZGVyIHRvIFBPU1QgYW55IERTUHMgaW4gYSBib2FyZAogIC0gaW1wcm92ZSBhbmQgZml4IHZhcmlvdXMgdGhpbmdzIGluIHRoZSBNUEM4eHggRkVDIGRyaXZlcjoKICAgIDEuIFRoZSBuZXcgODd4IGFuZCA4OHggc2VyaWVzIG9mIHByb2Nlc3NvcnMgaGF2ZSB0d28gRkVDcywKICAgICAgIGFuZCB0aGUgbmV3IGRyaXZlciBzdXBwb3J0cyB0aGVtIGJvdGguCiAgICAyLiBBbm90aGVyIGNoYW5nZSBpbiB0aGUgODd4Lzg4eCBzZXJpZXMgaXMgc3VwcG9ydCBmb3IKICAgICAgIHRoZSBSTUlJIChSZWR1Y2VkIE1JSSkgaW50ZXJmYWNlLiBIb3dldmVyIG51bWVyb3VzCiAgICAgICBjaGFuZ2VzIGFyZSBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIHNpbmNlIHRoZSBQSFlzCiAgICAgICBhcmUgY29ubmVjdGVkIHRvIHRoZSBzYW1lIGxpbmVzLiBUaGF0IG1lYW5zIHRoYXQKICAgICAgIHlvdSBoYXZlIHRvIGFkZHJlc3MgdGhlbSBjb3JyZWN0bHkgb3ZlciB0aGUgTUlJCiAgICAgICBpbnRlcmZhY2UuCiAgICAzLiBXZSBub3cgY29ycmVjdGx5IG1hdGNoIHRoZSBNSUkvUk1JSSBpbnRlcmZhY2UKICAgICAgIGNvbmZpZ3VyYXRpb24gdG8gd2hhdCB0aGUgUEhZIHJlcG9ydHMuCiAgLSBGaXggcHJvYmxlbSB3aGVuIHJlYWRpbmd0aGUgTUlJIHN0YXR1cyByZWdpc3Rlci4gRHVlIHRvIHRoZQogICAgaW50ZXJuYWwgZGVzaWduIG9mIG1hbnkgUEhZcyB5b3UgaGF2ZSB0byByZWFkIHRoZSByZWdpc3RlcgogICAgdHdpY2UuIFRoZSBwcm9ibGVtIGlzIG1vcmUgYXBwYXJlbnQgaW4gMTBNYml0IG1vZGUuCiAgLSBhZGQgbmV3IG1vZGUgIi5qZmZzMnMiIGZvciByZWFkaW5nIGZyb20gYSBOQU5EIGRldmljZTogaXQganVzdAogICAgc2tpcHMgb3ZlciBiYWQgYmxvY2tzLgogIC0gYWRkIG5ldHdvcmtpbmcgc3VwcG9ydCBmb3IgVkxBTnMgKDgwMi4xcSksIGFuZCBDRFAgKENpc2NvCiAgICBEaXNjb3ZlcnkgUHJvdG9jb2wpCiAgLSBzb21lIG1pbm9yIHBhdGNoZXMgLyBjbGVhbnVwCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDI4IE1hciAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIE1QQzgyNzIgZmFtaWx5IGluY2x1ZGluZyBNUEM4MjQ3LzgyNDgvODI3MS84MjcyCiAgLSBBZGQgc3VwcG9ydCBmb3IgTVBDODI3MkFEUyBldmFsdWF0aW9uIGJvYXJkIChhbm90aGVyIGZsYXZvdXIgb2YgTVBDODI2MEFEUykKICAtIENoYW5nZSBjb25maWd1cmF0aW9uIG1ldGhvZCBmb3IgTVBDODI2MEFEUyBmYW1pbHkKCiogYWRkIHN0YXJ0dXAgY29kZSB0byBjbGVhciB0aGUgQlNTIG9mIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zCgoqIEZpeCBpZiAvIGVsaWYgaGFuZGxpbmcgYnVnIGluIEhVU0ggc2hlbGwKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXM6IFJlbW92ZSBjb25maWcudG1wIGZpbGVzIG9ubHkgd2hlbgogIHVuY29uZmlndXJpbmcgdGhlIGJvYXJkCgoqIEFkYXB0IFJNVSBib2FyZCBmb3IgYmlnZ2VyIGZsYXNoIG1lbW9yeQoKKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAxMyBNYXIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgS1VQNFggQm9hcmQKCiogUGF0Y2ggYnkgUGF2ZWwgQmFydHVzZWssIDIxIE1hciAyMDA0CiAgQWRkIFJlaXNlcmZzIHN1cHBvcnQKCiogUGF0Y2ggYnkgSGlua28gS29jZXZhciwgMjAgTWFyIDIwMDQKICAtIEFkZCBhdXRvLXJlbGVhc2UgZm9yIFNNU0MgTEFOOTFjMTExIGRyaXZlcgogIC0gQWRkIHNhdmUvcmVzdG9yZSBvZiBQVFIgYW5kIFBOUiByZWdzIGFzIHN1Z2dlc3RlZCBpbiBkYXRhc2hlZXQKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMTkgTWFyY2ggMjAwNAogIEluY3JlYXNlIHNwZWVkIG9mIHNlY3RvciByZWFkcyBmcm9tIFN5c3RlbUFDRSwKICBzaG9ydGVuIHBvbGwgdGltZW91dCBhbmQgcmVtb3ZlIGEgdXNlbGVzcyByZXNldAoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxOSBNYXIgMjAwNDoKICBNYWtlIEdpZ0UgUEhZIDEwMDBNYnBzIFNwZWVkL0R1cGxleCBkZXRlY3Rpb24gY29uZGl0aW9uYWwKICAoQ09ORklHX1BIWV9HSUdFKQoKKiBQYXRjaCBieSBCcmFkIEtlbXAsIDE4IE1hciAyMDA0OgogIHByZXZlbnQgbWFjaGluZSBjaGVja3MgZHVyaW5nIGEgUENJIHNjYW4KCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTggTWFyIDIwMDQ6CiAgRml4IHN0cmluZyBjbGVhbmluZyBpbiBJREUgaWRlbnRpZmljYXRpb24KCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTggTWFyIDIwMDQ6CiAgLSBVbmlmeSB2aWRlbyBtb2RlIGhhbmRsaW5nIGZvciBDaGlwcyAmIFRlY2hub2xvZ2llcyA2OTAwMCBWaWRlbwogICAgY2hpcCBhbmQgU2lsaWNvbiBNb3Rpb24gU01JIDcxMi83MTAvODEwIFZpZGVvIGNoaXAKICAtIEFkZCBzZWxlY3Rpb24gb2YgdGhlIHZpZGVvIG91dHB1dCAoQ1JUIG9yIExDRCkgdmlhICd2aWRlb291dCcKICAgIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciB0aGUgU2lsaWNvbiBNb3Rpb24KICAtIFJFQURNRSB1cGRhdGUKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTggTWFyIDIwMDQ6CiAgaW5jbHVkZS9jb21tb24uaCB0eXBvIGZpeAoKKiBQYXRjaGVzIGJ5IFRvbHVuYXkgT3JrdW4sIDE3IE1hciAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIGJkLT5iaV9paWNfZmFzdFtdIGluaXRpYWxpemF0aW9uIHZpYSBlbnZpcm9ubWVudAogICAgdmFyaWFibGUgImkyY2Zhc3QiIChDT05GSUdfSTJDRkFTVCkKICAtIEFkZCAiaTJjZmFzdCIgdS1ib290IGVudmlyb25tZW50IHZhcmlhYmxlIHN1cHBvcnQgZm9yIGNzYjI3MgoKKiBQYXRjaCBieSBDYXJsIFJpZWNoZXJzLCAxNyBNYXIgMjAwNDoKICBJZ25vcmUgJ1wwJyBjaGFyYWN0ZXJzIGluIGNvbnNvbGUgaW5wdXQgZm9yIHVzZSB3aXRoIHRlbG5ldCBhbmQKICB0ZWxjbyBwYWRzLgoKKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDE3IE1hciAyMDA0OgogIHR5cG8gZml4IGZvciBzdHJzd2FiIHByb3RvdHlwZSAjaWZkZWYKCiogUGF0Y2hlcyBieSBUaG9tYXMgVmllaHdlZ2VyLCAxNiBNYXIgMjAwNDoKICAtIHNob3cgUENJIGNsb2NrIGZyZXF1ZW5jeSBvbiBNUEM4MjYwIHN5c3RlbXMKICAtIGFkZCBGQ0NfUFNNUl9STUlJIGZsYWcgZm9yIEhpUDcgcHJvY2Vzc29ycwogIC0gaW4gZG9famZmczJfZnNsb2FkKCksIHRha2UgbG9hZCBhZGRyZXNzIGZyb20gbG9hZF9hZGRyIGlmIG5vdCBzZXQKICAgIGV4cGxpY2l0LCB1cGRhdGUgbG9hZF9hZGRyIG90aGVyd2lzZQogIC0gcmVwbGFjZWQgcHJpbnRmIGJ5IHB1dGMvcHV0cyB3aGVuIG5vIGZvcm1hdHRpbmcgaXMgbmVlZGVkCiAgICAoc21hbGxlciBjb2RlIHNpemUsIGZhc3RlciBleGVjdXRpb24pCgoqIFBhdGNoIGJ5IFBoaWxsaXBwZSBSb2JpbiwgMTYgTWFyIDIwMDQ6CiAgYXZvaWQgZGVyZWZlcmVuY2luZyBOVUxMIHBvaW50ZXIgaW4gbGliX2FybS9hcm1saW51eC5jCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDE1IE1hciAyMDA0OgogIEZpeCBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8gZG9jdW1lbnRhdGlvbgoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxNSBNYXIgMjAwNDoKICBJbml0aWFsaXplIGJpX29wYmZyZXEgdG8gcmVhbCBPUEIgZnJlcXVlbmN5IHZpYSBnZXRfT1BCX2ZyZXEoKQoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxNSBNYXIgMjAwNDoKICBVcGRhdGUgQ1JFRElUUyAmIE1BSU5UQUlORVJTIGZpbGVzIGZvciBQUEM0NDBHWCAmIE9jb3RlYSBwb3J0CgoqIEFkZCBzdGFydC11cCBkZWxheSB0byBtYWtlIHN1cmUgcG93ZXIgaGFzIHN0YWJpbGl6ZWQgYmVmb3JlCiAgYXR0ZW1wdGluZyB0byBzd2l0Y2ggb24gVVNCIG9uIFNYMSBib2FyZC4KCiogUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAxOCBNYXIgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBYTTI1MCBib2FyZCAoUFhBMjU1KQogIC0gQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNODI4IGJvYXJkIChNUEM4MjgwKQogIC0gQWRkIHN1cHBvcnQgZm9yIDMyIE1CIEZsYXNoIG9uIFBNODI1LzgyNgogIC0gbmV3IFNEUkFNIHJlZnJlc2ggcmF0ZSBmb3IgUE04MjUvUE04MjYKICAtIGFkZGVkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNNTIwIChNUEM1MjAwKQogIC0gcmVwbGFjZWQgUXVlcnkgYnkgSWRlbnRpZnkgY29tbWFuZCBpbiBDUFU4Ni9mbGFzaC5jCiAgICB0byBzdXBwb3J0IDI4RjE2MEYzQgoKKiBGaXggd3JhcCBhcm91bmQgcHJvYmxlbSB3aXRoIHVkZWxheSgpIG9uIEFSTTkyMFQKCiogQWRkIHN1cHBvcnQgZm9yIE1hY3Jvbml4IGZsYXNoIG9uIFRSQUIgYm9hcmQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTUgTWFyIDIwMDQ6CiAgRml4IGJ1ZmZlciBvdmVyZmxvdyBpbiBJREUgaWRlbnRpZmljYXRpb24KCiogRml4IHBvd2VyLW9mZiBvZiBMQ0QgZm9yIG91dC1vZi1iYW5kIHRlbXBlcmF0dXJlcyBvbiBMV01PTiBib2FyZAoKKiBSZW1vdmUgcmVkdW5kYW5kICNkZWZpbmUgaW4gSWNlQ3ViZS5oCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI3IEZlYiAyMDA0OgogIC0gQWRkaW5nIGdldF90aWNrcygpIGFuZCBnZXRfdGJjbGsoKSBmb3IgQVQ5MVJNOTIwMAogIC0gTWFueSB3aGl0ZSBzcGFjZSBmaXhlcyBpbiBjcHUvYXQ5MXJtOTIwMC9pbnRlcnJ1cHRzLmMKCiogUGF0Y2hlcyBieSBTdGV2ZW4gU2Nob2x6LCAyMCBGZWIgMjAwNDoKICBzb21lIGNsZWFudXAgaW4gQVQ5MVJNOTIwMCByZWxhdGVkIGNvZGUKCiogUGF0Y2hlcyBieSBUcmF2aXMgU2F3eWVyLCAxMiBNYXIgMjAwNDoKICAtIEZpeCBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnQgZm9yIDQ0MEdYCiAgLSBBZGQgR2lnYWJpdCBFdGhlcm5ldCBTdXBwb3J0IHRvIE1JSSBQSFkgdXRpbGl0aWVzCgoqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgMTIgTWFyIDIwMDQ6CiAgRml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CiAgLSBCZXR0ZXIgc3VwcG9ydCBmb3IgeDgveDE2IGltcGxlbWVudGF0aW9ucwogIC0gQWRkZWQgZmFpbHVyZSBmb3IgQU1EIGNoaXBzIGF0dGVtcHRpbmcgdG8gdXNlIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCiAgLSBBZGRlZCBkZWZpbmVzIGZvciBBTUQgY29tbWFuZCBhbmQgYWRkcmVzcyBjb25zdGFudHMKCiogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAxMiBNYXIgMjAwNDoKICBGaXggZ2V0X2RlbnRmcm9tZGlyKCkgdG8gY29ycmVjdGx5IGhhbmRsZSBkZWxldGVkIGRlbnRyaWVzCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTEgTWFyIDIwMDQ6CiAgUmVtb3ZlIGhhcmQgY29kZWQgbmV0d29yayBzZXR0aW5ncyBpbiBUSSBPTUFQMTYxMCBIMgogIGRlZmF1bHQgYm9hcmQgY29uZmlnCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTEgTWFyIDIwMDQ6CiAgYWRkIHN1cHBvcnQgZm9yIEFEUyBHcmFwaGljc0NsaWVudCsgYm9hcmQuCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDExIE1hciAyMDA0OgogIC0gYWRkIGJpdG1hcCBjb21tYW5kIGFuZCBzcGxhc2ggc2NyZWVuIHN1cHBvcnQgaW4gY2ZiIGNvbnNvbGUKICAtIGFkZCBbb3B0aW9uYWxdIG9yaWdpbiBpbiB0aGUgYml0bWFwIGRpc3BsYXkgY29tbWFuZAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxMSBNYXIgMjAwNDoKICBGaXggb2NvdGVhIGJvYXJkIGVhcmx5IGluaXQgaW50ZXJydXB0IHNldHVwLgoKKiBQYXRjaCBieSBUaG9tYXMgVmllaHdlZ2VyLCAxMSBNYXIgMjAwNDoKICBSZW1vdmUgcmVkdW5kYW5kIGNvZGU7IGFkZCAgUENJLXNwZWNpZmljIGJpdHMgdG8gaW5jbHVkZS9tcGM4MjYwLmgKCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAwOSBNYXIgMjAwNAogIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBTU1YgQUROUC9FU0MxIChOaW9zIFNvZnRjb3JlKQoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDkgTWFyIDIwMDQ6CiAgZml4IHJlY2VudCBidWlsZCBmYWlsdXJlIGZvciBTQTExMDAgdGFyZ2V0CgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA5IE1hciAyMDA0OgogIFN1cHBvcnQgbmF0aXZlIGludGVycnVwdCBtb2RlIGZvciB0aGUgSUJNNDQwR1guCiAgUHJldmlvdXNseSBpdCB3YXMgcnVubmluZyBpbiA0NDBHUCBjb21wYXRpYmlsaXR5IG1vZGUuCgoqIFBhdGNoIGJ5IFBoaWxpcHBlIFJvYmluLCAwOSBNYXIgMjAwNDoKICBBZGRlZCBBUk0gSW50ZWdyYXRvciBBUCwgQ1AgYW5kIFZlcnNhdGlsZSBQQjkyNkVKLVMgUmVmZXJlbmNlCiAgUGxhdGZvcm0gc3VwcG9ydC4KCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDggTWFyIDIwMDQ6CiAgRG9uJ3Qgb3ZlcndyaXRlIHNlcnZlciBJUCBhZGRyZXNzIG9yIGJvb3QgZmlsZSBuYW1lCiAgd2hlbiB0aGUgYm9vdCBzZXJ2ZXIgZG9lcyBub3QgcmV0dXJuIHZhbHVlcwoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCA1IE1hciAyMDA0OgogIFJlbW92ZWQgY29tcGlsZSB0aW1lIHJlc3RyaWN0aW9uIG9uIENGR19JMkNfU1BFRUQgZm9yIERTMTMzOCBSVEMKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgNSBNYXIgMjAwNDoKICBGaXggZWFybHkgYm9hcmQgaW5pdGlhbGl6YXRpb24gZm9yIENvZ2VudCBDU0IyNzIgYm9hcmQKCiogUGF0Y2ggYnkgRWQgT2tlcnNvbiwgMyBNYXIgMjAwNDoKICBmaXggQ0ZJIGZsYXNoIHdyaXRlcyBmb3IgbGl0dGxlIGVuZGlhbiBzeXN0ZW1zCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAwMSBNYXIgMjAwNDoKICBnZW5lcmFsaXplIFVTQiBhbmQgSURFIHN1cHBvcnQgZm9yIE1QQzUyMDAgd2l0aCBhY2NvcmRpbmcKICBjaGFuZ2VzIHRvIEljZUN1YmUuaCBhbmQgVE9QNTIwMC5oCiAgYWRkIEFtMjlMVjI1NiAyNTYgTUJpdCBGTEFTSCBzdXBwb3J0IGZvciBUT1A1MjAwIGJvYXJkcwogIGFkZCBpbmZvIGFib3V0IFVTQiBhbmQgSURFIHRvIFJFQURNRQoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCA0IE1hciAyMDA0OgogIEZpeCBwcm9ibGVtcyB3aXRoIEdDQyAzLjMueCB3aGljaCBjaGFuZ2VkIGhhbmRsaW5nIG9mIGdsb2JhbAogIHZhcmlhYmxlcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8gKG5vdyBpbiAuYnNzIGluc3RlYWQgb2YKICAuZGF0YSBhcyBiZWZvcmUpLgoKKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDAyIE1hciAyMDA0OgogIGFkZCBzdHJzd2FiKCkgdG8gZml4IElERSBMQkEgY2FwYWNpdHksIGZpcm13YXJlIGFuZCBtb2RlbCBudW1iZXJzCiAgb24gbGl0dGxlIGVuZGlhbiBtYWNoaW5lcwoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwMiBNYXIgMjAwNDoKICAtIFJlbW92ZSBnZXRfdGlja3MoKSBmcm9tIE5GUyBjb2RlCiAgLSBBZGQgdmVyaWZpY2F0aW9uIG9mIFJQQyB0cmFuc2FjdGlvbiBJRAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwMiBNYXIgMjAwNDoKICBjbGVhbnVwIGZvciBJREUgYW5kIFVTQiBkcml2ZXJzIGZvciBNUEM1MjAwCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDAxIE1hciAyMDA0OgogIE9jb3RlYToKICAtIEFkZCBJQk0gUFBDNDQwR1ggUmVmIFBsYXRmb3JtIHN1cHBvcnQgKE9jb3RlYSkKICAgIE9yaWdpbmFsIGNvZGUgYnkgUGF1bCBSZXlub2xkcyA8UGF1bFJleW5vbGRzQGxoc29sdXRpb25zLmNvbT4KICAgIEFkYXB0ZWQgdG8gVS1Cb290IGFuZCA0NDBHWCBwb3J0CiAgNDQwZ3hfZW5ldC5jOgogIC0gQWRkIGdyYWNpb3VzIGhhbmRsaW5nIG9mIGFsbCBFdGhlcm5ldCBQaW4gU2VsZWN0aW9ucyBmb3IgNDQwR1gKICAtIEFkZCBSR01JSSBzZWxlY3Rpb24gZm9yIENpY2FkYSBDSVM4MjAxIEdpZ2FiaXQgUEhZCiAgcHBjNDQwLmg6CiAgLSBBZGQgbmVlZGVkIGJpdCBkZWZpbml0aW9ucwogIC0gRml4IGZvcm1hdHRpbmcKCiogUGF0Y2ggYnkgQ2FybCBSaWVjaGVycywgMSBNYXIgMjAwNDoKICBBZGQgUFBDNDQwR1ggcHJiZHYwIGRpdmlkZXIgdG8gZml4IG1lbW9yeSBjbG9jayBjYWxjdWxhdGlvbi4KCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAyNyBGZWIgMjAwNAogIC0gYXZvaWQgcHJvYmxlbXMgZm9yIHRhcmdldHMgd2l0aG91dCBORlMgZG93bmxvYWQgc3VwcG9ydAoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMjcgRmViIDIwMDQ6CiAgLSBBZGRlZCBMQkE0OCBzdXBwb3J0IChDT05GSUdfTEJBNDggJiBDRkdfNjRCSVRfTEJBKQogIC0gQWRkZWQgc3VwcG9ydCBmb3IgNjRiaXQgcHJpbnRpbmcgaW4gdnNwcmludGYgKENGR182NEJJVF9WU1BSSU5URikKICAtIEFkZGVkIHN1cHBvcnQgZm9yIDY0Yml0IHN0cnRvdWwgKENGR182NEJJVF9TVFJUT1VMKQoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNyBGZWIgMjAwNDoKICBGaXggcmFycGJvb3Q6IGFkZCBhdXRvbG9hZCBieSBORlMKCiogUGF0Y2ggYnkgRGFuIEVpc2VuaHV0LCAyNiBGZWIgMjAwNDoKICBmaXggZmxhc2hfd3JpdGUgcmV0dXJuIHZhbHVlIGluIHNhdmVlbnYKCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAxMSBEZWMgMjAwMwogIGV4cGFuZCBjb25maWcubWsgdG8gYXZvaWQgdHJpZ3JhcGggd2FybmluZ3Mgb24gTklPUwoKKiBSZW5hbWUgIkJNUzIwMDMiIGJvYXJkIGludG8gIkhNSTEwIgoKKiBTWDEgcGF0Y2hlczogdXNlICJzZXJpYWwjIiBmb3IgVVNCIHNlcmlhbCAjOyB1c2UgcmVkdW5kYW5kIGVudmlyb25tZW50CiAgc3RvcmFnZTsgYXV0by1zZXQgY29uc29sZSBvbiBVU0IgcG9ydCAodXNpbmcgcHJlYm9vdCBjb21tYW5kKQoKKiBBZGQgc3VwcG9ydCBmb3IgU1gxIG1vYmlsZSBwaG9uZTsgYWRkIHN1cHBvcnQgZm9yIFVTQi1iYXNlZCBjb25zb2xlCiAgKGVuYWJsZSB3aXRoICJzZXRlbnYgc3Rkb3V0IHVzYnR0eTsgc2V0ZW52IHN0ZGluIHVzYnR0eSIpCgoqIEZpeCBMT1dCT09UIGNvbmZpZ3VyYXRpb24gZm9yIE1QQzUyMDAgd2l0aCBERFIgbWVtb3J5CgoqIEZpeCBTRFJBTSB0aW1pbmdzIGZvciBMSVRFNTIwMCAvIEljZUN1YmUgYm9hcmQKCiogSGFuZGxlIEF1dGktTURJWCAvIGNvbm5lY3Rpb24gc3RhdHVzIGZvciBJTkNBLUlQCgoqIEZpeCBVU0IgcHJvYmxlbXMgd2hlbiBhdHRlbXB0aW5nIHRvIHJlYWQgMCBieXRlcwoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAyNiBGZWIgMjAwNDoKICBGaXggYnJva2VuIGNvbXBpbGUgZm9yIFhQRURJVEUxSyB0YXJnZXQuCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjYgRmViIDIwMDQ6CiAgQnVnIGZpeCBmb3IgTkZTIGNvZGUgb24gTklPUyB0YXJnZXRzCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDI2IEZlYiAyMDA0OgogIEJyZWFrIHVwIFN5c3RlbUFDRSByZWFkcyBvZiBsYXJnZSBibG9jayBjb3VudHMKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjYgRmViIDIwMDQKICBhZGQgSURFIHN1cHBvcnQgZm9yIE1QQzUyMDAKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMjYgRmViIDIwMDQ6CiAgYWRkIGF1dG9sb2FkIHZpYSBORlMKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcwogIFVzZSBvZiBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8gaW4gYm9hcmQuYyBjb25zaXN0ZW50IHdpdGggdXNlcwogIGVsc2V3aGVyZSBpbiB0aGUgc291cmNlLgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNSBGZWIgMjAwNDoKICAtIFRpbWVvdXRzIGluIEZQR0EgY29kZSBzaG91bGQgYmUgYmFzZWQgb24gQ0ZHX0haCiAgLSBNaW5vciBjbGVhbnVwIGluIGNvZGUgZm9yIEFsdGVyYSBGUEdBIEFDRVgxSwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNSBGZWIgMjAwNDoKICBDaGFuZ2VkICJEaXJlY3RvcnkgSGllcmFyY2h5IiBzZWN0aW9uIGluIFJFQURNRQoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNSBGZWIgMjAwNDoKICBSZWR1Y2UgY29weSBjb3VudCBpbiBuZnNfcmVhZF9yZXBseSgpIG9mIE5GUyBjb2RlCgoqIFBhdGNoIGJ5IE1hcmt1cyBQaWV0cmVrLCAyNCBGZWIgMjAwNDoKICBOUzk3NTAgRGV2Qm9hcmQgYWRkZWQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjQgRmViIDIwMDQKICBhZGQgVVNCIHN1cHBvcnQgZm9yIE1QQzUyMDAKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjQgRmViIDIwMDQ6CiAgLSBmaXggTUlJIGNvbW1hbmRzIHRvIHVzZSB2YWx1ZXMgZnJvbSBsYXN0IGNvbW1hbmQKCiogUGF0Y2ggYnkgVG9yc3RlbiBEZW1rZSwgMjQgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBlWGFsaW9uIHBsYXRmb3JtIChTUFNXLTgyNDAsIEYtMzAsIEYtMzAwKQoKKiBQYXRjaCBieSBSYWh1bCBTaGFuYmhhZywgMTkgRmViIDIwMDQ6CiAgRml4ZXMgZm9yIGZvciBPTUFQMTYxMCBib2FyZDoKICAtIHNoaWZ0IHNvbWUgSVJRIHNwZWNpZmljIGNvZGUgdG8gcGxhdGZvcm0uUyBmaWxlCiAgLSByZW1vdmUgZHVwbGljYXRld2F0Y2hkb2cgcmVzZXQgY29kZSBmcm9tIHN0YXJ0LlMKCiogTWFrZSBBdXRvLU1ESVggU3VwcG9ydCBjb25maWd1cmFibGUgb24gSU5DQS1JUCBib2FyZAoKKiBGaXggbGljZW5zZSBmb3IgbWtpbWFnZSB0b29sCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDI0IEZlYiAyMDA0OgogIFVwZGF0ZSBOZXRCb290RmlsZVhmZXJTaXplIGluIE5GUyBjb2RlCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjQgRmViIDIwMDQ6CiAgZml4IHBhY2tldCBsZW5ndGggaW4gTkZTIGNvZGUKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5LCAyMiBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgTkZTIGZvciBmaWxlIGRvd25sb2FkCgoqIFBhdGNoIGJ5IEFuZHJlYSBTY2lhbiwgMTcgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFMzQzQ0QjAgcHJvY2Vzc29yIGFuZCBEQVZFIEIyIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIwIEZlYiAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIE1JSSBjb21tYW5kcyBvbiBBVDkxUk05MjAwIGJvYXJkcwogIC0gc29tZSBjbGVhbnVwIGluIEFUOTFSTTkyMDAgZXRoZXJuZXQgY29kZQoKKiBQYXRjaCBieSBQZXRlciBSeXNlciwgMjAgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBYaWxpbnggTUwzMDAgcGxhdGZvcm0KCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAxNyBGZWIgMjAwNDoKICBGaXggd2F0Y2hkb2cgc3VwcG9ydCBmb3IgTklPUwoKKiBQYXRjaCBieSBKb3NoIEZyeW1hbiwgMTYgRmViIDIwMDQ6CiAgRml4IGJ5dGUtc3dhcHBpbmcgZm9yIGNmaV9mbGFzaC5jIGZvciBkaWZmZXJlbnQgYnVzIHdpZHRocwoKKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTQgSmViIDIwMDQ6CiAgUmVtb3ZlIGR1cGxpY2F0ZSAiRlBHQSBTdXBwb3J0IiBub3RlcyBmcm9tIHRoZSBSRUFETUUgZmlsZQoKKiBQYXRjaGVzIGJ5IFJlaW5oYXJkIE1leWVyLCAxNCBGZWIgMjAwNDoKICAtIHVwZGF0ZSBib2FyZC9lbWsgdHJlZTsgdXNlIGNvbW1vbiBmbGFzaCBkcml2ZXIKICAtIENvcnJlY3RlZCB0ZXN0ZWQgYml0cyBpbiBtYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbiBpbiBjcHUvbXBjNXh4eC90cmFwcy5jCiAgICBbYWRhcHRlZCBmb3Igb3RoZXIgUFBDIENQVXMgLS0gd2RdCiAgLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgTTQ4VDA4IG9uIHRoZSBFVkFMNTIwMCBib2FyZCBpbiBydGMvbWs0OHQ1OS5jCgoqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxMyBGZWIgMjAwNDoKICBDYWxsIHNob3dfYm9vdF9wcm9ncmVzcygpIHdoZW5ldmVyIFBPU1QgIkZBSUxFRCIgaXMgcHJpbnRlZC4KCiogUGF0Y2ggYnkgTmlzaGFudCBLYW1hdCwgMTMgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFRJIE9NQVAxNjEwIEgyIEJvYXJkCiAgRml4ZXMgZm9yIGNwdS9hcm05MjZlanMvaW50ZXJydXB0LmMKCShiYXNlZCBvbiBSaWNoYXJkIFdvb2RydWZmJ3MgcGF0Y2ggZm9yIGFybTkyNSwgMTYgT2N0IDAzKQogIEZpeCBmb3IgYSB0aW1lciBidWcgaW4gT01BUDE2MTAgSW5ub3ZhdG9yCiAgQWRkIHN1cHBvcnQgZm9yIENTMCAoUk9NKS9DUzMgKEZsYXNoKSBib290IGluIE9NQVAxNjEwIElubm92YXRvciBhbmQgSDIKCiogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDEyIEZlYiAyMDA0OgogIC0gYWRkIHN1cHBvcnQgZm9yIE5JT1MgdGltZXIgd2l0aCB2YXJpYWJsZSBwZXJpb2QgcHJlbG9hZCBjb3VudGVyIHZhbHVlCiAgLSBwcmVwYXJlIFBPU1QgZnJhbWV3b3JrIHN1cHBvcnQgZm9yIE5JT1MgdGFyZ2V0cwoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTEgRmViIDIwMDQ6CiAgYWRkIFBPU1Qgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNSBib2FyZAoKKiBQYXRjaCBieSBMYXVyZW50IE1vaGluLCAxMCBGZWIgMjAwNDoKICBGaXggYnVmZmVyIG92ZXJmbG93IGluIGNvbW1vbi91c2IuYwoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxMCBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgQ29nZW50IENTQjI3MiBib2FyZAoKKiBQYXRjaCBieSBUaG9tYXMgRWxzdGUsIDEwIEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBORVQrNTAgQ1BVIGFuZCBNb2RORVQ1MCBib2FyZAoKKiBQYXRjaCBieSBTYW0gU29uZywgMTAgRmViIDIwMDQ6CiAgRml4IHR5cG9zIGluIGNmaV9mbGFzaC5jCgoqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTAgRmViIDIwMDQKICBGaXhlZCBsb25nIGRpciBlbnRyeSBzbG90IGlkIGNhbGN1bGF0aW9uIGluIGdldF92ZmF0bmFtZQoKKiBQYXRjaCBieSBSb2JpbiBHaWxrcywgMTAgRmViIDIwMDQ6CiAgYWRkICJpdGVzdCIgY29tbWFuZCAob3BlcmF0b3JzOiAtZXEsIC1uZSwgLWx0LCAtZ3QsIC1sZSwgLWdlLCA9PSwKICAhPSwgPD4sIDwsID4sIDw9LCA+PSkKCiogRml4IHByb2JsZW0gd2l0aCBzaWRlIGVmZmVjdHMgaW4gbWFjcm9zIGluIGluY2x1ZGUvdXNiLmgKCiogUGF0Y2ggYnkgRGF2aWQgQmVuc29uLCAxMyBOb3YgMjAwMzoKICBidWcgODQxMzU4IC0gZml4IFRGVFAgZG93bmxvYWQgc2l6ZSBsaW1pdAoKKiBGaXhpbmcgYnVnIDg1MDc2ODoKICBpbXByb3BlciBmbHVzaF9jYWNoZSgpIGluIGxvYWRfc2VyaWFsKCkKCiogRml4aW5nIGJ1ZyA4MzQ5NDM6CiAgTVBDODU0MCAtIG1pc3Npbmcgdm9sYXRpbGUgZGVjbGFyYXRpb25zCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDA5IEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBYaWxpbnggU3lzdGVtQUNFIGNoaXA6CiAgLSBOZXcgZmlsZXMgY29tbW9uL2NtZF9hY2UuYyBhbmQgaW5jbHVkZS9zeXN0ZW1hY2UuaAogIC0gSG9vayBzeXN0ZW1hY2Ugc3VwcG9ydCBpbnRvIGNtZF9mYXQgYW5kIHRoZSBwYXJ0aXRpb24gbWFuYWdlcgoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOSBGZWIgMjAwNDoKICBBZGQgYmlfb3BiZnJlcSAmIGJpX2lpY19mYXN0IHRvIDQ0MEdYIGJkX2luZm8gYXMgbmVlZGVkIGZvciBMaW51eAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOSBGZWIgMjAwNDoKICBvIDQ0MEdYOgogICAgLSBGaXggUENJIEluZGlyZWN0IGFjY2VzcyBmb3IgdHlwZSAxIGNvbmZpZyBjeWNsZXMgd2l0aCBwcGM0NDAuCiAgICAtIEFkZCBwaHltb2RlIGZvciA0NDAgZW5ldAogICAgLSBmaXggcGNpIHByZSBpbml0CiAgbyBYUGVkaXRlMUs6CiAgICAtIENoYW5nZSBib2FyZF9wcmVfaW5pdCB0byBib2FyZF9lYXJseV9pbml0X2YKICAgIC0gQWRkIHVzZXIgZmxhc2ggdG8gYnVzIGNvbnRyb2xsZXIgc2V0dXAKICAgIC0gRml4IHBjaSBwcmUgaW5pdAogICAgLSBGaXggaXNfcGNpX2hvc3QgdG8gY2hlY2sgR1BJTyBmb3IgbW9uYXJjaCBiaXQKICAgIC0gRm9yY2UgeHBlZGl0ZTFrIHRvIHBjaSBjb252ZW50aW9uYWwgbW9kZSAodmlhICNkZWZpbmUgb3B0aW9uKQoKKiBQYXRjaCBieSBCcmFkIEtlbXAsIDQgRmViIDIwMDQ6CiAgLSBoYW5kbGUgdGhlIG1hY2hpbmUgY2hlY2sgdGhhdCBpcyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBQQ0kgc2NhbnMKICAgIG9uIDgyeHggcHJvY2Vzc29ycy4KICAtIGRlZmluZSB0aGUgcmVnaXN0ZXJzIHVzZWQgaW4gdGhlIElNTVIgYnkgdGhlIFBDSSBzdWJzeXN0ZW0uCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDAzIEZlYiAyMDA0OgogIGNwdS9tcGM1eHh4L3N0YXJ0LlM6IGNvcHkgTUJBUiBpbnRvIFNQUjMxMQoKKiBQYXRjaCBieSBKZWZmIEFuZ2llbHNraSwgMDMgRmViIDIwMDQ6CiAgRml4IGNvcHkgJiBwYXN0ZSBlcnJvciBpbiBjcHUvbXBjODI2MC9wY2kuYwoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMjQgSmFuIDIwMDQ6CiAgRml4IHR5cG8gaW4gY3B1L21wYzV4eHgvcGNpX21wYzUyMDAuYwoKKiBBZGQgQXV0by1NRElYIHN1cHBvcnQgZm9yIElOQ0EtSVAKCiogU29tZSBjb2RlIGNsZWFudXAKCiogUGF0Y2ggYnkgSm9zZWYgQmF1bWdhcnRuZXIsIDEwIEZlYiAyMDA0OgogIEZpeGVzIGZvciBDb2xkZmlyZSBwb3J0CgoqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgMTEgRmViIDIwMDQ6CiAgRml4IENGSSBmbGFzaCBkcml2ZXIgcHJvYmxlbXMKCiogTWFrZSBzdXJlIHRvIHVzZSBhIGJ1cyBjbG9jayBkaXZpZGVyIG9mIDIgb25seSB3aGVuIHJ1bm5pbmcgVFFNOHh4TQogIG1vZHVsZXMgYXQgQ1BVIGNsb2NrIGZyZXF1ZW5jaWVzIGFib3ZlIDY2IE1Iei4KCiogT3B0aW1pemUgZmxhc2ggcHJvZ3JhbW1pbmcgc3BlZWQgZm9yIExXTU9OIChieSBhbm90aGVyIDEwMCUgOi0pCgoqIFBhdGNoIGJ5IEppYW4gWmhhbmcsIDMgRmViIDIwMDQ6CiAgLSBDaGFuZ2VkIHRoZSBpbmNvcnJlY3QgRkFUMTJCVUZTSVpFCiAgLSBkYXRhX2JlZ2luIGluIGZzZGF0YSBjYW4gYmUgbmVnYXRpdmUuIENoYW5nZWQgaXQgdG8gYmUgc2hvcnQuCgoqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAzMCBKYW4gMjAwNDoKICAxOiAtIGJvYXJkL2FsdGVyYS9jb21tb24vZmxhc2guYzpmbGFzaF9lcmFzZSgpOgogICAgICAgbyBhbGxvdyBpbnRlcnJ1cHRzIGJlZm9yIGdldF90aW1lcigpIGNhbGwKICAgICAgIG8gY2hlY2stdXAgZWFjaCBlcmFzZWQgc2VjdG9yIGFuZCBhdm9pZCB1bmV4cGVjdGVkIHRpbWVvdXRzCiAgICAgLSBib2FyZC9hbHRlcmEvZGsxYzIwL2RrMXMxMC5jOmJvYXJkX2Vhcmx5X2luaXRfZigpOgogICAgICAgbyBlbmNsb3NlIHNldmVuc2VnX3NldCgpIGluIGNwcCBjb25kaXRpb24KICAgICAtIHJlbW92ZSB0aGUgQVNNSSBjb25maWd1cmF0aW9uIGZvciBESzFTMTBfc3RhbmRhcmRfMzIgKG5ldmVyIHByZXNlbnQpCiAgICAgLSBmaXggc29tZSB0eXBlZCBpbiBtaXN0YWtlcyBpbiB0aGUgTklPUyBkb2N1bWVudGF0aW9uCiAgMjogLSBzcGxpdCBESzFDMjAgY29uZmlndXJhdGlvbiBpbnRvIHNldmVyYWwgaGVhZGVyIGZpbGVzOgogICAgICAgbyB0d28gbmV3IGZpbGVzIGZvciBlYWNoIE5JT1MgQ1BVIGRlc2NyaXB0aW9uCiAgICAgICBvIFUtQm9vdCByZWxhdGVkIHBhcnQgaXMgcmVtYWluaW5nIGluIERLMUMyMC5oCiAgMzogLSBzcGxpdCBESzFTMTAgY29uZmlndXJhdGlvbiBpbnRvIHNldmVyYWwgaGVhZGVyIGZpbGVzOgogICAgICAgbyB0d28gbmV3IGZpbGVzIGZvciBlYWNoIE5JT1MgQ1BVIGRlc2NyaXB0aW9uCiAgICAgICBvIFUtQm9vdCByZWxhdGVkIHBhcnQgaXMgcmVtYWluaW5nIGluIERLMVMxMC5oCiAgNDogLSBBZGQgc3VwcG9ydCBmb3IgdGhlIE1pY3JvdHJvbml4IExpbnV4IERldmVsb3BtZW50IEtpdAogICAgICAgTklPUyBDUFUgY29uZmlndXJhdGlvbiBhdCB0aGUgQWx0ZXJhIE5pb3MgRGV2ZWxvcG1lbnQgS2l0LAogICAgICAgU3RyYXRpeCBFZGl0aW9uIChESy0xUzEwKQogIDU6IC0gQWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBBbHRlcmEgTmlvcyBEZXZlbG9wbWVudCBLaXQsCiAgICAgICBTdHJhdGl4IEVkaXRpb24gKERLLTFTMTApCiAgNjogLSBBZGQgc3VwcG9ydCBmb3IgdGhlIE5pb3MgU2VyaWFsIFBlcmlwaGFyZWwgSW50ZXJmYWNlIChTUEkpCiAgICAgICAobWFzdGVyIG9ubHkpCiAgNzogLSBBZGQgc3VwcG9ydCBmb3IgdGhlIGNvbW1vbiBVLUJvb3QgU1BJIGZyYW1ld29yayBhdAogICAgICAgUlRDIGRyaXZlciBEUzEzMDYKCiogUGF0Y2ggYnkgUmFodWwgU2hhbmJoYWcsIDI4IEphbiAyMDA0OgogIEZpeCBmbGFzaCBwcm90ZWN0aW9uL2xvY2tpbmcgaGFuZGxpbmcgZm9yIE9NQVAxNjEwIGlubm92YXRvciBib2FyZC4KCiogUGF0Y2ggYnkgUm9sZiBQZXVrZXJ0LCAyOCBKYW4gMjAwNDoKICBmaXggZmxhc2ggd3JpdGUgcHJvYmxlbXMgb24gQ1NCMjI2IGJvYXJkICh3cml0ZSB3aXRoIDMyIGJpdCBidXMgd2lkdGgpCgoqIFBhdGNoZXMgYnkgTWFyayBKb25hcywgMTYgSmFuIDIwMDQ6CiAgLSBmaXggcm91bmRpbmcgZXJyb3Igd2hlbiBjYWxjdWxhdGluZyBiYXVkcmF0ZXMgZm9yIE1QQzUyMDAgUFNDcwogIC0gbWFrZSBzdXJlIENGR19SQU1CT09UIGFuZCBDRkdfTE9XQk9PVCBhcmUgbm90IGVuYWJsZWQgYXQgdGhlIHNhbWUKICAgIHRpbWUgd2hpY2ggaXMgbm90IHN1cHBvcnRlZAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyNiBKYW4gMjAwNDoKICBBbGxvdyBiemlwMiBjb21wcmVzc2lvbiBmb3Igc21hbGwgbWVtb3J5IGZvb3RwcmludCBib2FyZHMKCiogUGF0Y2ggYnkgQnJhZCBLZW1wLCAyMSBKYW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgQ0ZJIGZsYXNoIGRyaXZlciBmb3IgYm90aCB0aGUgSW50ZWwgYW5kIHRoZSBBTUQKICBjb21tYW5kIHNldHMuCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDIwIEphbiAyMDA0OgogIEZpeCBwY2kgYnJpZGdlIGF1dG8gZW51bWVyYXRpb24gb2Ygc2libGluZyBwMnAgYnJpZGdlcy4KCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTIgSmFuIDIwMDQ6CiAgQWRkIHNvbWUgZGVsYXlzIGFzIG5lZWRlZCBmb3IgSW50ZWwgTFhUOTcxQSBQSFkgc3VwcG9ydAoKKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMDkgSmFuIDIwMDQ6CiAgLSBhdm9pZCB3YXJuaW5nOiB1bnVzZWQgdmFyaWFibGUgYHBpb3AnIGluIGJvYXJkL2FsdGVyYS9jb21tb24vc2V2ZW5zZWcuYwogIC0gbWFrZSBESzFDMjAgYm9hcmQgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIEFTTUkgY29uZm9ybSB0bwogICAgZG9jdW1lbnRhdGlvbgoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwOSBKYW4gMjAwNDoKCiAgQVJNIG1lbW9yeSBsYXlvdXQgZml4ZXM6IHRoZSBhYm9ydC1zdGFjayBpcyBub3cgc2V0IHVwIGluIHRoZQogIGNvcnJlY3QgUkFNIGFyZWEsIGFuZCB0aGUgQlNTIGlzIHplcm9lZCBvdXQgYXMgaXQgc2hvdWxkIGJlLgoKICBGdXJ0aGVybW9yZSwgdGhlIG1hZ2ljIHZhcmlhYmxlcyAnYXJtYm9vdF9lbmQnIGFuZCAnYXJtYm9vdF9lbmRfZGF0YScKICBvZiB0aGUgbGlua2VyIHNjcmlwdHMgYXJlIHJlcGxhY2VkIGJ5ICdfX2Jzc19zdGFydCcgYW5kICdfZW5kJywKICByZXNwLiwgd2hpY2ggaXMgYSBmdXJ0aGVyIHN0ZXAgdG8gZWxpbWluYXRlIHVubmVjZXNzYXJ5IGRpZmZlcmVuY2VzCiAgYmV0d2VlbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIENQVSBhcmNoaXRlY3R1cmVzLgoKKiBQYXRjaCBieSBsaWFuZyBhIGxlaSwgOSBKYW4gMjAwNDoKICBGaXggSW50ZWwgMjhGMTI4SjMgSUQgaW4gaW5jbHVkZS9mbGFzaC5oCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDA5IEphbiAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciBUQjAyMjkgYm9hcmQgKE5FQyBWUjQxMzEgTUlQUyBwcm9jZXNzb3IpCgoqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTIgRGVjIDIwMDM6CiAgY2hhbmdlZCBleHRlcm4gX19pbmxpbmVfXyBpbnRvIHN0YXRpYyBfX2lubGluZV9fIGluCiAgaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDMwIERlYyAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBJQk0gUFBDNDQwR1guIE11bHRpcGxlIEVNQUMgRXRoZXJuZXQgZGV2aWNlcywKICBzZWxlY3QgTURJIHBvcnQgYmFzZWQgb24gZW5hYmxlZCBFTUFDIGRldmljZS4KICBBZGQgc3VwcG9ydCBmb3IgWEVTIEluYyA8aHR0cDovL3d3dy54ZXMtaW5jLmNvbT4gWFBlZGl0ZTEwMDAgNDQwR1gKICBiYXNlIFByUE1DIGJvYXJkLgoKKiBQYXRjaCBieSBXb2x0ZXIgS2FtcGh1aXMsIDE1IERlYyAyMDAzOgogIG1hZGUgQ09ORklHX1NJTEVOVF9DT05TT0xFIHVzYWJsZSBvbiBhbGwgYXJjaGl0ZWN0dXJlcwoKKiBEaXNhYmxlIGRhdGUgY29tbWFuZCBvbiBUUU04NjZNIC0gdGhlcmUgaXMgbm8gUlRDIG9uIE1QQzg2NgoKKiBGaXggdmFyaWFibGUgQ1BVIGNsb2NrIGZvciBNUEM4NTkvODY2IHN5c3RlbXMgZm9yIGxvdyBDUFUgY2xvY2tzCgoqIEltcGxlbWVudCBhZGFwdGl2ZSBTRFJBTSB0aW1pbmcgY29uZmlndXJhdGlvbiBiYXNlZCBvbiBhY3R1YWwgQ1BVCiAgY2xvY2sgZnJlcXVlbmN5IGZvciBJTkNBLUlQOyBmaXggcHJvYmxlbSB3aXRoIGJvYXJkIGhhbmdpbmcgd2hlbgogIHN3aXRjaGluZyBmcm9tIDE1ME1IeiB0byAxMDBNSHoKCiogQWRkIFBDTUNJQSBDUyBzdXBwb3J0IGZvciBCTVMyMDAzIGJvYXJkCgoqIEFkZCB2YXJpYWJsZSBDUFUgY2xvY2sgZm9yIE1QQzg1OS84NjYgc3lzdGVtcyAoc28gZmFyIG9ubHkgVFFNODY2TSk6CiAgc2VlIGRvYy9SRUFETUUuTVBDODY2IGZvciBkZXRhaWxzOwogIGltcGxlbWVudCB3b3JrYXJvdW5kIGZvciAiU0lVNCIgYW5kICJTSVU5IiBzaWxpY29uIGJ1Z3Mgb24gTVBDODY2OwogIGNhbGN1bGF0ZSBDUFUgY2xvY2sgZnJlcXVlbmN5IGZyb20gUExMIHJlZ2lzdGVyIHZhbHVlcy4KCiogQWRkIHN1cHBvcnQgZm9yIDEyOCBNQiBSQU0gb24gVFFNOHh4TC9NIG1vZHVsZXMKCiogRml4IFBTLzIga2V5Ym9hcmQgcHJvYmxlbSBjYXVzZWQgYnkgc3RhdGljYWxseSBpbml0aWFsaXplZCB2YXJpYWJsZQogIHBvaW50aW5nIHRvIGEgbG9jYXRpb24gaW4gZmxhc2gKCiogRml4IElOQ0EtSVAgY2xvY2sgY2FsY3VsYXRpb246IDQwMC8zID0gMTMzLjMgTUh6LCBub3QgMTMwLgoKKiBUaGUgUFMvMiBtdXggb24gdGhlIEJNUzIwMDMgYm9hcmQgbmVlZHMgNDUwIG1zIGFmdGVyIHBvd2VyIG9uCiAgYmVmb3JlIHdlIGNhbiBhY2Nlc3MgaXQ7IGFkZCBkZWxheSBpbiBjYXNlIHdlIGFyZSBmYXN0ZXIgKHdpdGggbm8KICBDRiBjYXJkIGluc2VydGVkKQoKKiBDbGVhbnVwIG9mIHNvbWUgaW5pdCBmdW5jdGlvbnMKCiogTWFrZSBzdXJlIFNDQyBFdGhlcm5ldCBpcyBhbHdheXMgc3RvcHBlZCBieSB0aGUgdGltZSB3ZSBib290IExpbnV4CiAgdG8gYXZvaWQgTGludXggY3Jhc2hlcyBieSBlYXJseSBwYWNrZXRzIGNvbWluZyBpbi4KCiogQWNjZWxlcmF0ZSBmbGFzaCBhY2Nlc3NlcyBvbiBMV01PTiBib2FyZCBieSB1c2luZyBidWZmZXJlZCB3cml0ZXMKCiogRml4IHR5cG8gaW4gTWFrZWZpbGU7CiAgZml4IHByb2JsZW0gd2l0aCBQQVJUTlVNIGRldGVjdGlvbgoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMDkgSmFuIDIwMDQ6CiAgLSBhZGQgUlRDIHN1cHBvcnQgZm9yIE1QQzUyMDAgYmFzZWQgYm9hcmRzIChyZXF1aXJlcyBSVENfWFRBTCkKCiogQWRkIHN1cHBvcnQgZm9yIElERSBMRUQgb24gQk1TMjAwMyBib2FyZAogIChleGNsdXNpdmUgd2l0aCBzdGF0dXMgTEVEISkKCiogQWRkIHN1cHBvcnQgZm9yIFBTLzIga2V5Ym9hcmQgKHVzZWQgd2l0aCBQUy8yIG11bHRpcGxleG9yIG9uCiAgQk1TMjAwMyBib2FyZCkKCiogUGF0Y2hlcyBieSBSZWluaGFyZCBNZXllciwgNCBKYW4gMjAwNCArIDcgSmFuIDIwMDQ6CiAgQWRkIGNvbW1vbiBmaWxlcyBmb3IgImVtayIgYm9hcmRzCgoqIEFkZCBhIGNvbW1vbiBnZXRfcmFtX3NpemUoKSBmdW5jdGlvbiBhbmQgbW9kaWZ5IHRoZSB0aGUKICBib2FyZC1zcGVjaWZpYyBmaWxlcyB0byBpbnZva2UgdGhhdCBjb21tb24gaW1wbGVtZW50YXRpb24uCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjAuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBTZXQgZGVmYXVsdCBjbG9jayBmb3IgSU5DQS1JUCB0byAxNTAgTUh6CgoqIE1ha2UgQk1TMjAwMyB1c2UgYSBzZXBhcmF0ZSBjb25maWcgZmlsZSB0byBhdm9pZCAjaWZkZWYgbWVzczsKICBhZGQgSTJDIHN1cHBvcnQ7IGFkZCBzdXBwb3J0IGZvciBEUzEzMzcgUlRDCgoqIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCAgZm9yIEJNUzIwMDMgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIHN0YXR1cyBMRUQgb24gQk1TMjAwMyBib2FyZAoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDAyIEphbiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciB0aGUgTmlvcyBBY3RpdmUgU2VyaWFsIE1lbW9yeSBJbnRlcmZhY2UgKEFTTUkpCiAgb24gQ3ljbG9uZSBkZXZpY2VzCgoqIFBhdGNoIGJ5IEFuZHJlYSBNYXJzb24sIDE2IERlYyAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciB0aGUgUFBDaGFtZWxlb24gTUUgYW5kIEhJIG1vZHVsZXMKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjIgRGVjIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIE1vdG9yb2xhIERVRVQgQURTIGJvYXJkIChNUEM4N3gvODh4KQoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDE1IERlYyAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBjcmFtZnMgKHVzZXMgSkZGUzIgY29tbWFuZCBpbnRlcmZhY2UpCgoqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAxMSBEZWMgMjAwMzoKICAtIG1vcmUgZG9jdW1lbnRhdGlvbiBmb3IgTklPUyBwb3J0CiAgLSBuZXcgc3RydWN0IG5pb3NfcGlvX3QsIHN0cnVjdCBuaW9zX3NwaV90CiAgLSBSZWNvbmZpZ3VyYXRpb24gZm9yIE5JT1MgRGV2ZWxvcG1lbnQgS2l0IERLMUMyMDoKICAgIG8gbW92ZSBib2FyZCByZWxhdGVkIGNvZGUgZnJvbSBib2FyZC9kazFjMjAKICAgICAgdG8gYm9hcmQvYWx0ZXJhL2RrMWMyMAogICAgbyBjcmVhdGUgYSBuZXcgY29tbW9uIHNvdXJjZSBwYXRoIGJvYXJkL2FsdGVyYS9jb21tb24KICAgICAgYW5kIG1vdmUgZ2VuZXJpYyBmbGFzaCBhY2Nlc3Mgc3R1ZmYgaW50byBpdAogICAgbyBjaGFuZ2UvZXhwYW5kIGNvbmZpZ3VyYXRpb24gZmlsZSBESzFDMjAuaAogIC0gQWRkIHN1cHBvcnQgZm9yIE5JT1MgRGV2ZWxvcG1lbnQgS2l0IERLMVMxMAogIC0gQWRkIHN0YXR1cyBMRUQgc3VwcG9ydCBmb3IgTklPUyBzeXN0ZW1zCiAgLSBBZGQgZHVhbCA3LXNlZ21lbnQgTEVEIHN1cHBvcnQgZm9yIEFsdGVyYSBOSU9TIERldktpdHMKCiogUGF0Y2ggYnkgUm9uZW4gU2hpdHJpdCwgMTAgRGVjIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIERCNjQzNjAgLyBEQjY0NDYwIGRldmVsb3BtZW50IGJvYXJkcwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxMCBEZWMgMjAwMzoKICBmaXggZGVwZW5kZW5jeSBwcm9ibGVtIGluIGV4YW1wbGVzL01ha2VmaWxlCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCA4IERlYyAyMDAzCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIFBBVEkgYm9hcmQgKE1QQzU1NSkKICAtIGFkZCBTUEkgc3VwcG9ydCBmb3IgdGhlIE1QQzV4eAoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwOCBEZWMgMjAwMzoKICBhZGQgY29uZmlndXJhdGlvbiBvcHRpb25zIENPTkZJR19TRVJJQUxfVEFHIGFuZCBDT05GSUdfUkVWSVNJT05fVEFHCiAgdG8gcGFzcyBBVEFHX1NFUklBTCBhbmQgQVRBR19SRVZJU0lPTiwgcmVzcC4sIHRvIHRoZSBBUk0gdGFyZ2V0OwogIGNsZWFudXAgc29tZSByZWR1bmRhbmQgI2RlZmluZXMKCiogUGF0Y2ggYnkgQW5kcukgU2Nod2FyeiwgOCBEZWMgMjAwMzoKICBmaXhlcyBmb3IgRGF2aWNvbSBETTkxMDJBIEV0aGVybmV0IENoaXAgKCNkZWZpbmUgQ09ORklHX1RVTElQX0ZJWF9EQVZJQ09NKToKICAtIFRYIGFuZCBSWCBkZXNrcmlwdG9ycyBtdXN0IGJlIHF1YWQtd29yZCBhbGlnbmVkCiAgLSBkb2VzIG5vdCB3b3JrIHdpdGggb25seSBvbmUgVFggZGVza3JpcHRvcgogIC0gc3RhbmRhcmQgcmVzZXQgbWV0aG9kIGRvZXMgbm90IHdvcmsKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDggRGVjIDIwMDM6CiAgYWRkIFJUTDgxMzkgZXRoZXJuZXQgZHJpdmVyCgoqIFBhdGNoZXMgYnkgRWQgT2tlcnNvbiwgMDcgRGVjIDIwMDM6CiAgLSBmaXggZXRoZXJuZXQgZm9yIHRoZSBBVTF4MDAgcHJvY2Vzc29ycyBpbiBsaXR0bGUtZW5kaWFuIG1vZGUuCiAgLSBleHRlbmQgbWVtc2V0dXAuUyBmb3IgdGhlIEFVMXgwMCBwcm9jZXNzb3JzIGluIEJFIGFuZCBMRSBtb2RlcwoKKiBNaW5vciBjb2RlIGNsZWFudXAgKGNvZGluZyBzdHlsZSkKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDMwIERlYyAyMDAzOgogIC0gY3B1L21wYzV4eHgvZmVjLmM6IGFkZGVkIENPTkZJR19QSFlfQUREUiwgYWRkZWQgQ09ORklHX1BIWV9UWVBFLAogIC0gYWRkZWQgQ09ORklHX1BIWV9BRERSIHRvIGluY2x1ZGUvY29uZmlncy9JY2VDdWJlLmgsCiAgLSB0dXJuZWQgZGVidWcgcHJpbnQgb2YgUEhZIHJlZ2lzdGVycyBpbnRvIGEgZnVuY3Rpb24gKGNhbGxlZCBpbiB0d28gcGxhY2VzKQogIC0gYWRkZWQgc3VwcG9ydCBmb3IgRU1LIE1QQzUyMDAgYmFzZWQgbW9kdWxlcwoKKiBGaXggTVBDOHh4IFBMUFJDUl9NRkRfU0hJRlQgdHlwbwoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODY2TSBtb2R1bGVzCgoqIEZpeGVzIGZvciBUUU04NTVNIHdpdGggNCBNQiBmbGFzaCAoQW0yOURMMTYzID0gX25vXyBtaXJyb3IgYml0IGZsYXNoKQoKKiBGaXggYSBmZXcgY29tcGlsZXIgd2FybmluZ3MKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDI4IERlYyAyMDAzOgogIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIFRPUDUyMDAgYm9hcmQKCiogTWFrZSBDUFUgY2xvY2sgb24gSUNBLUlQIGJvYXJkIGNvbnRyb2xsYWJsZSBieSBhICJjcHVjbGsiCiAgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hpY2ggY2FuIHNldCB0byAiMTAwIiwgIjEzMyIsIG9yICIxNTAiLiBUaGUKICBDUFUgY2xvY2sgd2lsbCBiZSBjb25maWd1cmVkIGFjY29yZGluZ2x5IHVwb24gbmV4dCByZWJvb3QuIE90aGVyCiAgdmFsdWVzIGFyZSBpZ25vcmVkLiBJbiBjYXNlIG9mIGFuIGludmFsaWQgb3IgdW5kZWZpbmVkICJjcHVjbGsiCiAgdmFsdWUsIHRoZSBjb21waWxlLXRpbWUgZGVmYXVsdCBDUFUgY2xvY2sgc3BlZWQgd2lsbCBiZSB1c2VkLgoKKiBFbmFibGUgUXVhZC1VQVJUIG9uIEJNUzIwMDMgYm9hcmQgKGluaXRpYWxpemUgdGhlIFBDTUNJQSBtZW1vcnkKICB3aW5kb3cgdGhhdCBpcyB1c2VkIHRvIGFjY2VzcyB0aGUgVUFSVCByZWdpc3RlcnMgYnkgdGhlIExpbnV4IGRyaXZlcikKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDIwIERlYyAyMDAzOgogIEZpeCBjbG9jayBjYWxjdWxhdGlvbiBmb3IgdGhlIE1QQzUyMDAgZm9yIGhpZ2hlciBjbG9jayBmcmVxdWVuY2llcwogIChhYm92ZSAyKiozMiAvIDEwID0gNDI5LjUgTUh6KS4KCiogRml4IENPTkZJR19QTExfUENJX1RPX01FTV9NVUxUSVBMSUVSIGRpdmlkZXIgZXJyb3IgaW4gU1A4MjQwIGNvbmZpZ3VyYXRpb24KCiogRml4IEljZUN1YmUgQ0xLSU4gY29uZmlndXJhdGlvbiAoaXQncyAzMy4wMDAwMDBNSHopCgoqIEFkZCBuZXcgY29uZmlndXJhdGlvbiBmb3IgSWNlQ3ViZSBib2FyZCB3aXRoIEREUiBtZW1vcnkKCiogVXBkYXRlIFRSQUIgbWVtb3J5IGNvbmZpZ3VyYXRpb25zCgoqIEFkZCBKRkZTMiBzdXBwb3J0IGZvciBJTkNBLUlQIGJvYXJkCgoqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAwOSBEZWMgMjAwMzoKICAtIEJVQklOR0E0MDVFUDogY2hhbmdlZCBmbGFzaCBkcml2ZXIgdG8gcHJvdGVjdCB0b3Agc2VjdG9yIGNvbnRhaW5pbmcKICAgIGZpcnN0IGluc3RydWN0aW9uLgogIC0gQlVCSU5HQTQwNUVQOiBjb25maWd1cmVkICJlZXByb20iIGNvbW1hbmQgdG8gYWNjZXNzIGJvb3QgY29uZmlnIEVFUFJPTS4KICAtIEJVQklOR0E0MDVFUDogZml4ZWQgUExMIGluaXQgKGluaXQgY2hpcCBzZWxlY3RzIGJlZm9yZSBGUEdBL05WUkFNIGFjY2VzcykuCiAgLSA0MDVFUDogZml4ZWQgU1BELWJhc2VkIFNEUkFNIGluaXQgKG9ubHkgdXNlIGJhbmtzIDAgYW5kIDEpLgogIC0gNDA1RVA6IGFkZGVkL2ZpeGVkIHN1cHBvcnQgZm9yICJyZWdpbmZvIiBjb21tYW5kLgogIC0gNHh4OiByZW1vdmVkIHNwdXJpb3VzIE1JSSBlcnJvciBtZXNzYWdlcyBvbiAibWlpIGluZm8iIGNvbW1hbmQuCgoqIFBhdGNoIGJ5IEJlcm5oYXJkIEt1aG4sIDI4IE5vdiAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBDb2xkZmlyZSBDUFUKICBhZGQgc3VwcG9ydCBmb3IgTW90b3JvbGEgTTUyNzJDMyBhbmQgTTUyODJFVkIgYm9hcmRzCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDI0IE5vdiAyMDAzOgogIC0gYWRkIGEgcmV0dXJuIHZhbHVlIGZvciB0aGUgZnBnYSBjb21tYW5kCiAgLSBhZGQgaWRlX3ByZWluaXQoKSBmdW5jdGlvbiBjYWxsZWQgaW4gaWRlX2luaXQgaWYgQ09ORklHX0lERV9QUkVJTklUCiAgICBpcyBkZWZpbmVkLiBJZiBpZGVfcHJlaW5pdCBmYWlscywgaWRlX2luaXQgaXMgYWJvcnRlZC4KICAtIGZpeCBhbiBlbmRpYW5lc3MgcHJvYmxlbSBpbiBmYXQuaAoKKiBQYXRjaCBieSBXb2x0ZXIgS2FtcGh1aXMsIDA1IERlYyAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBTTk1DJ3MgUVM4NTAvUVM4MjMvUVM4NjBUIGJvYXJkcwoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAzIERlYyAyMDAzOgogICJyZXZpdmUiIFUtQm9vdCBzdXBwb3J0IGZvciBvbGQgTW90b3JvbGEgTVBDODYwQURTIGJvYXJkCgoqIFBhdGNoIGJ5IENhbShpbG8/KSwgMDMgRGVjIDIwMDM6CiAgbWFrZSBleGFtcGxlcyBidWlsZCBldmVuIHdpdGggYnJva2VuIE1vbnRhdmlzdGEgb2JqY29weQoKKiBQYXRjaCBieSBQYXZlbCBCYXJ0dXNlaywgMjcgTm92IDIwMDM6CiAgZml4IGNvbnZlcnNpb24gcHJvYmxlbSB3aXRoICJib290cmV0cnkiIGV2aXJvbm1lbnQgdmFyaWFibGUKCiogUGF0Y2ggYnkgQW5kcmUgU2Nod2FyeiwgMjQgTm92IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIG12Ymx1ZSAobXZCbHVlTFlOWCBhbmQgbXZCbHVlQk9YKSBib2FyZHMKCiogUGF0Y2ggYnkgUGF2ZWwgQmFydHVzZWssIDIxIE5vdiAyMDAzOgogIHNldCBaTUlJIGJyaWRnZSBzcGVlZCBvbiA0NDAKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTcgTm92IDIwMDM6CiAgRml4IG1pc21hdGNoZWQgI2lmZGVmIC8gI2VuZGlmIGluIGluY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9oYXJkd2FyZS5oCgoqIFBhdGNoZXMgYnkgRGF2aWQgTfxsbGVyLCAxNCBOb3YgMjAwMzoKICAtIGJvYXJkL21wbC9jb21tb24vY29tbW9uX3V0aWwuYwogICAgKiBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgQlpJUDIgY29tcHJlc3NlZCBpbWFnZXMKICAgICogdmFyaW91cyBjbGVhbnVwcyAocHJpbnRmIC0+IHB1dHMsIC4uLikKICAtIGJvYXJkL21wbC9jb21tb24vZmxhc2guYwogICAgKiByZXBvcnQgY29ycmVjdCBlcnJvcnMgdG8gdXBwZXIgbGF5ZXJzCiAgICAqIGNoZWNrIHRoZSBlcmFzZSBmYWlsIGFuZCBWUFAgbG93IGJpdHMgaW4gc3RhdHVzIHJlZwogIC0gYm9hcmQvbXBsL3ZjbWE5L2NtZF92Y21hOS5jCiAgLSBib2FyZC9tcGwvdmNtYTkvZmxhc2guYwogICAgKiB2YXJpb3VzIGNsZWFudXBzIChwcmludGYgLT4gcHV0cywgLi4uKQogIC0gY29tbW9uL2NtZF91c2IuYwogICAgKiBmaXggdHlwbyBpbiBjb21tZW50CiAgLSBjcHUvYXJtOTIwdC91c2Jfb2hjaS5jCiAgICAqIHN1cHBvcnQgZm9yIFMzQzI0MTAgaXMgbWlzc2luZyBpbiAjaWYgbGluZQogIC0gZHJpdmVycy9jczg5MDAuYwogICAgKiByZWluaXQgc29tZSByZWdpc3RlcnMgaW4gY2FzZSBvZiBlcnJvciAoY2FibGUgbWlzc2luZywgLi4uKQogIC0gZnMvZmF0L2ZhdC5jCiAgICAqIHN1cHBvcnQgZm9yIFVTQi9NTUMgZGV2aWNlcyBpcyBtaXNzaW5nIGluICNpZiBsaW5lCiAgLSBpbmNsdWRlL2NvbmZpZ3MvTUlQNDA1LmgKICAtIGluY2x1ZGUvY29uZmlncy9QSVA0MDUuaAogICAgKiBlbmFibGUgQlpJUDIgc3VwcG9ydAogICAgKiBlbmxhcmdlIG1hbGxvYyBzcGFjZSB0byAxTWlCIGJlY2F1c2Ugb2YgQlpJUDIgc3VwcG9ydAogIC0gaW5jbHVkZS9jb25maWdzL1ZDTUE5LmgKICAgICogZW5hYmxlIEJaSVAyIHN1cHBvcnQKICAgICogZW5sYXJnZSBtYWxsb2Mgc3BhY2UgdG8gMU1pQiBiZWNhdXNlIG9mIEJaSVAyIHN1cHBvcnQKICAgICogZW5hYmxlIFVTQiBzdXBwb3J0CiAgLSBsaWJfYXJtL2FybWxpbnV4LmMKICAgICogY2hhbmdlIGNhbGxpbmcgY29udmVudGlvbiBvZiBBUk0gTGludXgga2VybmVsIGFzCiAgICAgIGRlc2NyaWJlZCBvbiBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL2Jvb3RpbmcucGhwCgoqIFBhdGNoIGJ5IFRob21hcyBMYW5nZSwgMTQgTm92IDIwMDM6CiAgU3BsaXQgZGJhdTF4MDAgaW50byBkYmF1MTAwMCwgZGJhdTExMDAgYW5kIGRiYXUxNTAwIGNvbmZpZ3MgdG8KICBzdXBwb3J0IGFsbCB0aGVzZSBBTUQgYm9hcmRzLgoKKiBQYXRjaCBieSBUaG9tYXMgTGFuZ2UsIDE0IE5vdiAyMDAzOgogIFdvcmthcm91bmQgZm9yIG1pcHMgYXUxeDAwIHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3NlcyAodGhlIGF1MXgwMAogIHVzZXMgYSAzNiBiaXQgYnVzIGludGVybmFsbHkgYW5kIGNhbm5vdCBhY2Nlc3MgcGh5c2ljYWwgbWVtb3J5CiAgZGlyZWN0bHkuIFVzZSB0aGUgdW5jYWNoZWQgU0RSQU0gYWRkcmVzcyBpbnN0ZWFkIG9mIHRoZSBwaHlzaWNhbAogIG9uZS4pCgoqIFBhdGNoIGJ5IFh1ZSBMaWdvbmcgKEpvZSksIDEzIE5vdiAyMDAzOgogIGFkZCBSZWFsdGVrIDgwMTkgZXRoZXJuZXQgZHJpdmVyCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDEzIE5vdiAyMDAzOgogIE1QQzgyNnhBRFMvUFEyRkFEUyAgY2xlYW51cAoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxMiBOb3YgMjAwMzoKICBVcGRhdGUgUkVBRE1FIHRvIG1hcmsgdGhlIFBPUlRJTyBjb21tYW5kcyBub24tc3RhbmRhcmQKCiogUGF0Y2ggYnkgTmljb2xhcyBMYWNyZXNzb25uaehyZSwgMTIgTm92IDIwMDM6CiAgdXBkYXRlIGZvciBmb3IgQXRtZWwgQVQ5MVJNOTIwMERLIGRldmVsb3BtZW50IGtpdDoKICAtIHN1cHBvcnQgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBEYXRhRmxhc2gKICAtIEF0bWVsIERhdGFGbGFzaCBBVDQ1REIxMjgyIHN1cHBvcnQKCiogUGF0Y2ggYnkgSmVmZiBDYXJyLCAxMSBOb3YgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgbmV3IHZlcnNpb24gb2YgODI3MCBwcm9jZXNzb3JzCgoqIFBhdGNoZXMgYnkgR2VvcmdlIEcuIERhdmlzLCAwNSBOb3YgMjAwMzoKICAtIG9ubHkgcGFzcyB0aGUgQVJNIGxpbnV4IGluaXRyZCB0YWcgdG8gdGhlIGtlcm5lbCB3aGVuIGFuIGluaXRyZAogICAgaXMgYWN0dWFsbHkgcHJlc2VudAogIC0gdXBkYXRlIG9tYXAxNTEwaW5uIGNvbmZpZ3VyYXRpb24gZmlsZQoKKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMyBOb3YgMjAwMzoKICAtIG1vcmUgZW5kaWFuZXNzIGZpeGVzIGZvciBMQU45MUMxMTEgZHJpdmVyCiAgLSBDRkdfSFogY29uZmlndXJhdGlvbiBwYXRjaCBmb3IgTklPUyBDeWNsb25lIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjggT2N0IDIwMDM6CiAgZml4IFBIWV9JTlRfUkVHIHZzLiBQSFlfTUFTS19SRUcgYnVnIGluIGRyaXZlcnMvc21jOTExMTEuYwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyMCBPY3QgMjAwMzoKICAtIG1ha2UgIm1paSBpbmZvIDxhZGRyPiIgc2hvdyBpbmZvciBmb3IgUEhZIGF0ICJhZGRyIiBvbmx5CiAgLSBFbmRpYW4gZml4IGZvciBtaWlwaHlfaW5mbygpCgoqIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMTkgU2VwIDIwMDM6CiAgTW92ZSBtb3N0IG9mIHRoZSB0aW1lciBpbnRlcnJ1cHQgcmVsYXRlZCBQUEMgY29kZSB0byBwcGNfbGliL2ludGVycnVwdHMuYwoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxNyBTZXAgMjAwMzoKICBCcmluZyBBUk0gbWVtb3J5IGxheW91dCBpbiBzeW5jIHdpdGggdGhlIGRvY3VtZW50YXRpb246CiAgc3RhY2sgYW5kIG1hbGxvYy1oZWFwIGFyZSBub3cgbG9jYXRlZCBfYmVsb3dfIHRoZSBVLUJvb3QgY29kZQoKKiBBY2NlbGVyYXRlIGJvb3Rpbmcgb24gVFJBQiBib2FyZDogcmVhZCBhbmQgY2hlY2sgIGF1dG91cGRhdGUgIGltYWdlCiAgaGVhZGVycyBmaXJzdCBpbnN0ZWFkIG9mIGFsd2F5cyByZWFkaW5nIHRoZSB3aG9sZSBpbWFnZXMuCgoqIEZpeCB0eXBlIGluIE1QQzVYWFggY29kZSAocG9pbnRlZCBvdXQgYnkgVmljdG9yIFdyZW4pCgoqIEVuYWJsZWQgcGFzc3dvcmQgY2hlY2sgb24gUk1VIGJvYXJkCgoqIEZpeCBjb25maWd1cmF0aW9uIHByb2JsZW0gd2l0aCBJY2VDdWJlIGluIExPV0JPT1QgY29uZmlndXJhdGlvbjoKICBlbnZyaW9ubWVudCBnb3QgZW1iZWRkZWQsIGNvcnJ1cHRpbmcgdGhlIGltYWdlIGxheW91dC4KCiogRml4IE5FQyBkaXNwbGF5IG5hbWVzIChpdCdzIDY0NDAgW2ZvciA2NDB4NDgwXSwgbm90IDY2NDApLgoKKiBBZGRlZCBCTVMyMDAzIGJvYXJkCiAgYWRkIHN1cHBvcnQgZm9yIE5FQyBOTDY0NDhCQzMzLTU0LiAxMC40IiwgNjQweDQ4MCBURlQgZGlzcGxheQoKKiBGaXggZmxhc2ggZHJpdmVyIGZvciBUUkFCIGJvYXJkIChtdXN0IHVzZSBVbmxvY2sgQnlwYXNzIFJlc2V0CiAgY29tbWFuZCB0byBleGl0IFVubG9jayBCeXBhc3MgTW9kZSk7IGFkanVzdCB0aW1pbmdzIGZvciBmbGFzaCwgU1JBTQogIGFuZCBDUExECgoqIFVzZSAiLWZQSUMiIGluc3RlYWQgb2YgIi1tcmVsb2NhdGFibGUiIHRvIHByZXZlbnQgcHJvYmxlbXMgd2l0aAogIHJlY2VudCB0b29scwoKKiBBZGQgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIHRvICdpbWxzJyBjb21tYW5kCgoqIEFkZCBiZF9pbmZvIGZpZWxkcyBuZWVkZWQgZm9yIDR4eCBMaW51eCBJMkMgZHJpdmVyCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDQgTm92LiAyMDAzOgogIEZpeCBlcnJvciBpbiBjbWRfdmZkLmMgKFRSQUIgYm9hcmQ6ICJ2ZmQgLzEiIHNob3dzIG5vdyBvbmx5IG9uZSBCaXRtYXApCgoqIFByaW50IHVzZWQgbmV0d29yayBpbnRlcmZhY2Ugd2hlbiBDT05GSUdfTkVUX01VTFRJIGlzIHNldAoKKiBQYXRjaCBieSBCZXJuaGFyZCBLdWhuLCAyOCBPY3QgMjAwMzoKICBBZGQgbG93IGJvb3Qgc3VwcG9ydCBmb3IgTVBDNTIwMAoKKiBGaXggcHJvYmxlbSB3aXRoIGR1YWwgUENNQ0lBIHN1cHBvcnQgKE5TQ1UpCgoqIEZpeCBNUEM1MjAwIEkyQyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4wLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogRml4IHBhcmFtZXRlciBwYXNzaW5nIHRvIHN0YW5kYWxvbmUgaW1hZ2VzIHdpdGggYm9vdG0gY29tbWFuZAoKKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMzAgT2N0IDIwMDM6CiAgRml4IGJ1aWxkIGVycm9ycyBmb3IgaXhkcDQyNSBib2FyZAoKKiBQYXRjaCBieSBEYXZpZCBNLiBIb3JuLCAyOSBPY3QgMjAwMzoKICBGaXhlcyB0byBidWlsZCB1bmRlciBDWUdXSU4KCiogR2V0IEljZUN1YmUgTUdUNTEwMCB3b3JraW5nIChhZ2FpbikKCiogRml4IHByb2JsZW1zIGluIG1lbW9yeSB0ZXN0IG9uIHNvbWUgYm9hcmRzICh3aGljaCB3YXMgbm90CiAgbm9uLWRlc3RydWN0aXZlIGFzIGludGVuZGVkKQoKKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMjggT2N0IDIwMDM6CiAgQ2hhbmdlIGZzL2ZhdC9mYXQuYyB0byBwdXQgSS9PIGJ1ZmZlcnMgaW4gQlNTIGluc3RlYWQgb24gdGhlIHN0YWNrCiAgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvdyBvbiBBUk0gc3lzdGVtcwoKKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDI4IE9jdCAyMDAzOgogIGZpeCBpbml0IHNlcXVlbmNlIGVycm9yIGZvciBOSU9TIHBvcnQKCiogQWxsb3cgbG93ZXJjYXNlIHNwZWxsaW5nIGZvciBJY2VDdWJlXzUyMDA7IHN1cHBvcnQgTVBDNTIwMExJVEUgbmFtZQoKKiBBZGQgQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUgdG8gVFJBQiBjb25maWd1cmF0aW9uCgoqIFBhdGNoIGJ5IFhpYW8gWGlhbmdodWEsIDIzIE9jdCAyMDAzOgogIHNtYWxsIHBhdGNoIGZvciBtcGM4NXh4CgoqIEZpeCBzbWFsbCBwcm9ibGVtIGluIE1QQzUyMDAgSTJDIGRyaXZlcgoKKiBGaXggRkNDMyBzdXBwb3J0IG9uIEFUQyBib2FyZAoKKiBDb3JyZWN0IGhlYWRlciBwcmludGluZyBmb3IgbXVsdGktaW1hZ2UgZmlsZXMgaW4gZG9fYm9vdG0oKQoKKiBNYWtlIENPTkZJR19TSUxFTlRfQ09OU09MRSB3b3JrIHdpdGggQ09ORklHX0FVVE9CT09UX0tFWUVECgoqIEZpeCBQQ0kgcHJvYmxlbXMgb24gUFBDaGFtZWxlb24gYm9hcmQKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTggT2N0IDIwMDM6CiAgRml4IEFUOTFSTTkyMDAgZXRoZXJuZXQgZHJpdmVyCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDE3IE9jdCAyMDAzOgogIEZpeCB0eXBvIGluIGluY2x1ZGUvbXBjOHh4LmgKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTYgT2N0IDAzOgogIEZpeGVzIGZvciBjcHUvYXJtOTI1L2ludGVycnVwdC5jCiAgLSBJbml0aWFsaXplIHRpbWVzdGFtcCAmIGxhc3RkZWMgdmFycy4KICAtIGZpeCB0aW1lc3RhbXAgb3ZlcmZsb3dzLgogIC0gZml4IGxhc3RkZWMgb3ZlcmZsb3cuCiAgLSBzbWFydGVyIG5vcm1hbGl6YXRpb24gdG8gYWxsb3cgdWRlbGF5KCkgYmVsb3cgMW1zIHRvIHdvcmsuCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMTYgT2N0CiAgYWRkIG5ldHdvcmtpbmcgc3VwcG9ydCBmb3IgdGhlIEFsdGVyYSBOaW9zIERldmVsb3BtZW50IEtpdCwKICBDeWNsb25lIEVkaXRpb24gKERLLTFDMjApCgoqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxNCBPY3QgMjAwMzoKICBhZGQgaGludCBhYm91dCBkb2MvUkVBRE1FLnNpbGVudCB0byBSRUFETUUgZmlsZQoKKiBBZGQgQ29tcGFjdEZsYXNoIHN1cHBvcnQgZm9yIE5TQ1UKCiogRml4IFBDSSBwcm9ibGVtcyBvbiBQUENoYW1lbGVvbkVWQgoKKiBUUkFCIGF1dG8tdXBkYXRlOiBCYXNlIGRlY2lzaW9uIGlmIHdlIGhhdmUgdG8gc3RyaXAgdGhlIGltYWdlCiAgaGVhZGVyIG9uIGltYWdlIHR5cGUgYXMgZW5jb2RlZCBpbiB0aGUgaGVhZGVyCiAgKGluY2x1ZGUgaW1hZ2UgdHlwZSBwYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNyBPY3QgMjAwMykKCiogUGF0Y2hlcyBieSBYaWFuZ2h1YSBYaWFvLCAxNSBPY3QgMjAwMzoKCiAgLSBBZGRlZCBNb3Rvcm9sYSBDUFUgODU0MC84NTYwIHN1cHBvcnQgKGNwdS84NXh4KQogIC0gQWRkZWQgTW90b3JvbGEgTVBDODU0MEFEUyBib2FyZCBzdXBwb3J0IChib2FyZC9tcGM4NTQwYWRzKQogIC0gQWRkZWQgTW90b3JvbGEgTVBDODU2MEFEUyBib2FyZCBzdXBwb3J0IChib2FyZC9tcGM4NTYwYWRzKQoKKiBGaXggZmxhc2ggdGltaW5ncyBvbiBUUkFCIGJvYXJkCgoqIE1ha2Ugc3VyZSBIVVNIIGlzIGluaXRpYWxpemVkIGZvciBydW5uaW5nIGF1dG8tdXBkYXRlIHNjcmlwdHMKCiogTWFrZSA1MjAwIHJlc2V0IGNvbW1hbmQgX3JlYWxseV8gcmVzZXQgdGhlIGJvYXJkLCB3aXRob3V0IHJ1bm5pbmcKICBhbnkgb3RoZXIgY29kZSBhZnRlciBpdAoKKiBGaXggZXJyb3JzIHdpdGggZmxhc2ggZXJhc2Ugd2hlbiByYW5nZSBzcGFucyAgYWNyb3NzIGJhbmtzCiAgdGhhdCBhcmUgbWFwcGVkIGluIHJldmVyc2Ugb3JkZXIKCiogRml4IGZsYXNoIG1hcHBpbmcgYW5kIGRpc3BsYXkgb24gUDNHNCBib2FyZAoKKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMTUgSnVsIDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgSW50ZWwgSVhQNDI1IENQVQogIC0gYWRkIHN1cHBvcnQgZm9yIElYRFA0MjUgZXZhbCBib2FyZAoKKiBBZGRlZCBjb25maWcgb3B0aW9uIENPTkZJR19TSUxFTlRfQ09OU09MRS4gIFNlZSBkb2MvUkVBRE1FLnNpbGVudAogIGZvciBtb3JlIGluZm9ybWF0aW9uCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEwIE9jdCAyMDAzCiAgLSBBZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIEZQR0EgQUNFWDFLCgoqIFBhdGNoZXMgYnkgVGhvbWFzIExhbmdlLCAwOSBPY3QgMjAwMzoKICAtIGZpeCBjbWRfaWRlLmMgZm9yIG5vbiBwcGMgYm9hcmRzIChyZWFkL3dyaXRlIGZ1bmN0aW9ucyBkaWQgbm90CiAgICBhZGQgQVRBIGJhc2UgYWRkcmVzcykKICAtIGZpeCBmb3Igc2hhbm5vbiBib2FyZAogIC0gI2lmZGVmIENPTkZJR19JREVfOHh4X0RJUkVDVCBzb21lIG90aGVyd2lzZSB1bnVzZWQgY29kZQogIC0gRW5kaWFuIHN3YXAgQVRBIGlkZW50aXR5IGZvciBhbGwgYmlnIGVuZGlhbiBDUFVzLCBub3QganVzdCBQUEMKICAtIE1JUFMgb25seTogTmV3IG9wdGlvbiBDT05GSUdfTUVNU0laRV9JTl9CWVRFUyBmb3IgcGFzc2luZyBtZW1zaXplCiAgICBhcmdzIHRvIGxpbnV4CiAgLSBhZGQgc3VwcG9ydCBmb3IgZGJhdTF4MDAgYm9hcmQgKE1JUFMzMikKCiogUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAwNyBPY3QgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgZGVicmlzIGJvYXJkCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA5IE9jdCAyMDAzOgogIEZpeGVzIGZvciBUUkFCIGJvYXJkCiAgLSAvYm9hcmQvdHJhYi9yczQ4NS5jOiBjb3JyZWN0IGJhdWRyYXRlCiAgLSAvYm9hcmQvdHJhYi9jbWRfdHJhYi5jOiBidWcgZml4IGZvciBwcm9ibGVtIHdpdGggdGltZXIgb3ZlcmZsb3cgaW4KICAgIHVkZWxheSgpOyBmaXggc29tZSB0aW1pbmcgcHJvYmxlbXMgd2l0aCBhZGMgY29udHJvbGxlcgogIC0gL2JvYXJkL3RyYWIvdHJhYl9ma3QuYzogYWRkIG5ldyBjb21tYW5kczogZ2FpbiwgZWVwcm9tIGFuZCBwb3dlcjsKICAgIG1vZGlmeSBjb21tYW5kczogdG91Y2ggYW5kIGJ1enplcgoKKiBEaXNhYmxlIENPTkZJR19TVVBQT1JUX1ZGQVQgd2hlbiB1c2VkIHdpdGggQ09ORklHX0FVVE9fVVBEQVRFCiAgKHF1aWNrICYgZGlydHkgd29ya2Fyb3VuZCBmb3Igcm9ndWUgcG9pbnRlciBwcm9ibGVtIGluIGdldF92ZmF0bmFtZSgpKTsKICBVc2UgZGlyZWN0IGZ1bmN0aW9uIGNhbGxzIGZvciBhdXRvX3VwZGF0ZSBpbnN0ZWFkIG9mIGh1c2ggY29tbWFuZHMKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwNCBPY3QgMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciBBbHRlcmEgTmlvcy0zMiBDUFUKICAtIGFkZCBzdXBwb3J0IGZvciBOaW9zIEN5Y2xvbmUgRGV2ZWxvcG1lbnQgS2l0IChESy0xQzIwKQoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyOSBTZXAgMjAwMzoKICAtIEEgc2Vjb25kIHBhcmFtZXRlciBmb3IgYm9vdG0gb3ZlcndyaXRlcyB0aGUgbG9hZCBhZGRyZXNzIGZvcgogICAgIlN0YW5kYWxvbmUgQXBwbGljYXRpb24iIGltYWdlcy4KICAtIGJvb3RtIHNldHMgZW52aXJvbm1lbnQgdmFyaWFibGUgImZpbGVzaXplIiB0byB0aGUgcmVzdWx0aW5nCiAgICAodW5jb21wcmVzc2VkKSBkYXRhIGxlbmd0aCBmb3IgIlN0YW5kYWxvbmUgQXBwbGljYXRpb24iIGltYWdlcwogICAgd2hlbiBhdXRvc3RhcnQgaXMgc2V0IHRvICJubyIuIE5vdyB5b3UgY2FuIGRvIHNvbWV0aGluZyBsaWtlCglpZiBib290bSAkZnBnYWRhdGEgJHNvbWVfZnJlZV9yYW0gOyB0aGVuCgkJZnBnYSBsb2FkIDAgJHNvbWVfZnJlZV9yYW0gJGZpbGVzaXplCglmaQoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMjUgU2VwdCAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1IFJldi4gQyBib2FyZAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyNSBTZXAgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgWmVwaHlyIEVuZ2luZWVyaW5nIFpQQy4xOTAwIGJvYXJkCgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDIzIFNlcCAyMDAzOgogIGFkZCBDTURfUE9SVElPIHRvIENGR19DTURfTk9OU1REIChjb21tYW5kcyBpbiBxdWVzdGlvbiBhcmUgb25seQogIGltcGxlbWVudGVkIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZSkKCiogUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAyMyBTZXAgMjAwMzoKICBmaXggcGxsX3BjaV90b19tZW1fbXVsdGlwbGllciB0YWJsZSBmb3IgTVBDODI0NQoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyMiBTZXAgMjAwMzoKICBlbmFibGUgdGltZWQgYXV0b2Jvb3Qgb24gUFhBCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMjIgU2VwIDIwMDM6CiAgLSBhZGQgJChDRkxBR1MpIHRvICItcHJpbnQtbGliZ2NjLWZpbGVuYW1lIiBzbyBjb21waWxlciBkcml2ZXIKICAgIHJldHVybnMgY29ycmVjdCBsaWJnY2MgZmlsZSBwYXRoCiAgLSAibGF0ZW5jeSIgcmVkdWN0aW9uIG9mIGJ1c3ktbG9vcCB3YWl0aW5nIHRvIGltcHJvdmUgIlUtQm9vdCIgYm9vdAogICAgdGltZSBvbiBzM2MyNHgwIHN5c3RlbXMKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDE5IFNlcCAyMDAzOgogIC0gQWRkIENGR19GQVVMVF9FQ0hPX0xJTktfRE9XTiBvcHRpb24gdG8gZWNobyB0aGUgaW52ZXJ0ZWQgRXRoZXJuZXQKICAgIGxpbmsgc3RhdGUgdG8gdGhlIGZhdWx0IExFRC4KICAtIEluIE5ldExvb3AsIG1ha2UgdGhlIEZhdWx0IExFRCByZWZsZWN0IHRoZSBsaW5rIHN0YXR1cy4gIFRoZSBsaW5rCiAgICBzdGF0dXMgZ2V0cyB1cGRhdGVkIG9uIGVudHJ5LCBhbmQgb24gdGltZW91dHMuCgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDE4IFNlcCAyMDAzOgogIGFsbG93IG1raW1hZ2UgdG8gYnVpbGQgYW5kIHJ1biBvbiBDeWd3aW4taG9zdGVkIHN5c3RlbXMKCiogUGF0Y2ggYnkgRnJhbmsgTfxsbGVyLCAxOCBTZXAgMjAwMzoKICB1c2UgYmlfaW50ZnJlcSBpbnN0ZWFkIG9mIGJpX2J1c2ZyZXEgdG8gY29tcHV0ZSBmZWNfbWlpX3NwZWVkIGluCiAgY3B1L21wYzh4eC9mZWMuYwoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTYgU2VwIDIwMDM6CiAgYWRkIHRvb2wgdG8gY29tcHV0ZSBmaWxlZHMgaW4gdGhlIFBMUFJDUiByZWdpc3RlciBmb3IgTVBDODZ4CgoqIFVzZSBJSF9UWVBFX0ZJTEVTWVNURU0gZm9yIFRSQUIgImRpc2siIGltYWdlcy4KCiogRml4IGJ1aWxkIHByb2JsZW1zIHVuZGVyIEZyZWVCU0QKCiogQWRkIGdlbmVyaWMgZmlsZXN5c3RlbSBpbWFnZSB0eXBlCgoqIE1ha2UgZmF0bG9hZCBzZXQgZmlsZXNpemUgZW52aXJvbm1lbnQgdmFyaWFibGUKCiogZW5hYmxlIGJhc2ljIC8gbWVkaXVtIC8gaGlnaC1lbmQgY29uZmlndXJhdGlvbnMgZm9yIFBQQ2hhbWVsZW9uRVZCCiAgYm9hcmQ7IGZpeCBOQU5EIGNvZGUKCiogZW5hYmxlIFRGVFAgY2xpZW50IGNvZGUgdG8gc3BlY2lmeSB0byB0aGUgc2VydmVyIHRoZSBkZXNpcmVkCiAgdGltZW91dCB2YWx1ZSAoc2VlIFJGQy0yMzQ5KQoKKiBJbXByb3ZlIFNEUkFNIHNldHVwIGZvciBUUkFCIGJvYXJkCgoqIFN1cHByZXNzIGFsbCBvdXRwdXQgd2l0aCBzcGxhc2hzY3JlZW4gY29uZmlndXJlZCBvbmx5IGlmICJzcGxhc2hpbWFnZSIKICBpcyBzZXQKCiogRml4IHByb2JsZW1zIHdpdGggSTJDIHN1cHBvcnQgZm9yIG1wYzUyMDAKCiogQWRhcHQgVFJBQiBjb25maWd1cmF0aW9uIGFuZCBhdXRvX3VwZGF0ZSB0byBuZXcgbWVtb3J5IGxheW91dAoKKiBBZGQgY29uZmlndXJhdGlvbiBmb3Igd3RrIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciB0aGUgU2hhcnAgTFEwNjVUOURSNTFVIExDRCBkaXNwbGF5CgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxNyBTZXAgMjAwMzoKICAtIEZpeGVzIGZvciBNUEM4MjY2IGRlZmF1bHQgY29uZmlnCiAgLSBBbGxvdyBldGhfbG9vcGJhY2tfdGVzdCgpIG9uIDgyNjAgdG8gdXNlIGEgc3Vic2V0IG9mIHRoZSBGQ0MncwoKKiBQYXRjaGVzIGJ5IEpvbiBEaWVrZW1hLCAxNyBTZXAgMjAwMzoKICAtIHVwZGF0ZSBSRUFETUUgKFNIT1dfQk9PVF9QUk9HUkVTUyB2YWx1ZXMgZm9yIGNtZF9uYW5kLmMgYW5kCiAgICBlbnZfY29tbW9uLmMpCiAgLSBzYmM4MjYwIHR3ZWFrcwogIC0gYWRqdXN0ICJoZWxwIiBvdXRwdXQKCiogUGF0Y2hlcyBieSBBbmRlcnMgTGFyc2VuLCAxNyBTZXAgMjAwMzoKICAtIGZpeCBzcGVsbGluZyBlcnJvcnMKICAtIHNldCBHRF9GTEdfREVWSU5JVCBmbGFnIG9ubHkgYWZ0ZXIgZGV2aWNlIGZ1bmN0aW9uIHBvaW50ZXJzCiAgICBhcmUgdmFsaWQKICAtIEFsbG93IENGR19BTFRfTUVNVEVTVCBvbiBzeXN0ZW1zIHdoZXJlIGFkZHJlc3MgemVybyBpc24ndAogICAgd3JpdGVhYmxlCiAgLSBlbmFibGUgMy5yZCBVQVJUIChTVC1VQVJUKSBvbiBQWEEoWFNjYWxlKSBDUFVzCiAgLSB0cmlnZ2VyIHdhdGNoZG9nIHdoaWxlIHdhaXRpbmcgaW4gc2VyaWFsIGRyaXZlcgoKKiBBZGQgYXV0by11cGRhdGUgY29kZSBmb3IgVFJBQiBib2FyZCB1c2luZyBVU0IgbWVtb3J5IHN0aWNrcywKICBzdXBwb3J0IG5ldyBjb25maWd1cmF0aW9uIHdpdGggbW9yZSBtZW1vcnkKCiogZGlzYWJsZSBNUEM1MjAwIGJ1cyBwaXBlbGluaW5nIGFzIHdvcmthcm91bmQgZm9yIGJ1cyBjb250ZW50aW9uCgoqIE1vZGlmeSBYTEIgYXJiaXRlciBwcmlvcml0aWVzIG9uIE1QQzUyMDAgc28gYWxsIGRldmljZXMgdXNlIHNhbWUKICBwcmlvcml0eTsgY29uZmlndXJlIGNyaXRpY2FsIGludGVycnVwdHMgdG8gYmUgaGFuZGxlZCBsaWtlIGV4dGVybmFsCiAgaW50ZXJydXB0cwoKKiBNYWtlIElQQiBjbG9jayBvbiBNR1Q1MTAwL01QQzUyMDAgY29uZmlndXJhYmxlIGluIGJvYXJkIGNvbmZpZyBmaWxlOwogIGdvIGJhY2sgdG8gNjYgTUh6IGZvciBzdGFiaWxpdHkKCiogUGF0Y2hlcyBieSBKb24gRGlla2VtYSwgMTUgU2VwIDIwMDM6CiAgLSBhZGQgZGVzY3JpcHRpb24gZm9yIG1pc3NpbmcgQ0ZHX0NNRF8qIGVudHJpZXMgaW4gdGhlIFJFQURNRSBmaWxlCiAgLSBzYWNzbmcgdHdlYWtzCgoqIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMTQgU2VwIDIwMDM6CiAgZW5hYmxlIHdhdGNoZG9nIHN1cHBvcnQgZm9yIGFsbCBNUEM4MjR4IGJvYXJkcyB0aGF0IGhhdmUgYSB3YXRjaGRvZwoKKiBPbiBNUEM1MjAwLCByZXN0cmljdCBGRUMgdG8gYSBtYXhpbXVtIG9mIDEwIE1icHMgdG8gd29yayBhcm91bmQgdGhlCiAgIk5vbi1vY3RldCBBbGlnbmVkIEZyYW1lIiBlcnJvcnMgd2Ugc2VlIGF0IDEwMCBNYnBzCgoqIFBhdGNoIGJ5IFNoYXJhZCBHdXB0YSwgMTQgU2VwIDIwMDM6CiAgZml4IFNQUiBudW1iZXJzIGZvciB1cHBlciBCQVQgcmVnaXN0ZXIgKFtJRF1CQVRbNC03XVtVTF0pCgoqIFBhdGNoIGJ5IGxsYW5kcmUsIDExIFNlcCAyMDAzOgogIHVwZGF0ZSBjb25maWd1cmF0aW9uIGZvciBQUENoYW1lbGVvbkVWQiBib2FyZAoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDEzIFNlcCAyMDAzOgogIHZhcmlvdXMgY2hhbmdlcyB0byBWQ01BOSBib2FyZCBzcGVjaWZpYyBmaWxlcwoKKiBBZGQgSTJDIHN1cHBvcnQgZm9yIE1HVDUxMDAgLyBNUEM1MjAwCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxMSBTZXAgMjAwMzoKICBDaGFuZ2VkIGRlZmF1bHQgbWVtb3J5IG9wdGlvbiBvbiBNUEM4MjY2QURTIHRvIE5PVCBiZSBQYWdlIEJhc2VkCiAgSW50ZXJsZWF2ZSwgc2luY2UgdGhpcyBkb2Vzbid0IHdvcmsgdmVyeSB3ZWxsIHdpdGggdGhlIHN0YW5kYXJkCiAgMTZNQiBESU1NCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTIgU2VwIDIwMDM6CiAgZml4IE1ha2VmaWxlIHNldHRpbmdzIGZvciBzazk4IGRyaXZlcgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEyIFNlcCAyMDAzOgogIC0gbmV3IGJvYXJkcyBhZGRlZDogRFA0MDUsIEhVQjQwNSwgUExVNDA1LCBWT0g0MDUKICAtIHNvbWUgZXNkIGJvYXJkcyB1cGRhdGVkCiAgLSBjcHUvcHBjNHh4L3NkcmFtLmM6IGRpc2FibGUgbWVtb3J5IGNvbnRyb2xsZXIgYmVmb3JlIHNldHRpbmcKICAgIGZpcnN0IHZhbHVlcwogIC0gY3B1L3BwYzR4eC80MDVfcGNpLmM6IHNldCB2ZW5kb3IgaWQgb24gUFBDNDA1RVAgc3lzdGVtcwoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxMSBTZXAgMjAwMzoKICBhZGQgYnVybi1pbiB0ZXN0cyBmb3IgVFJBQiBib2FyZAoKKiBFbmFibGUgaW5zdHJ1Y3Rpb24gY2FjaGUgb24gTVBDNTIwMCBib2FyZAoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTEgU2VwIDIwMDM6CiAgLSBmaXggVVNCIGRhdGEgcG9pbnRlciBhc3NpZ25tZW50IGZvciBidWxrIG9ubHkgdHJhbnNmZXIuCiAgLSBwcmV2ZW50IHRvIGRpc3BsYXkgZXJhc2VkIGRpcmVjdG9yaWVzIGluIEZBVCBmaWxlc3lzdGVtLgoKKiBDaGFuZ2Ugb3V0cHV0IGZvcm1hdCBmb3IgTkFORCBmbGFzaCAtIG1ha2UgaXQgbG9vayBsaWtlIGZvciBvdGhlcgogIG1lbW9yeSwgdG9vCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuODoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgSTJDIGFuZCBSVEMgc3VwcG9ydCBmb3IgUk1VIGJvYXJkCgoqIFBhdGNoZXMgYnkgRGVuaXMgUGV0ZXIsIDkgU2VwIDIwMDM6CiAgYWRkIEZBVCBzdXBwb3J0IGZvciBJREUsIFNDU0kgYW5kIFVTQgoKKiBQYXRjaGVzIGJ5IEdsZWIgTmF0YXBvdiwgMiBTZXAgMjAwMzoKICAtIGNsZWFudXAgb2YgUE9TVCBjb2RlIGZvciB1bnN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzCiAgLSBNUEM4MjR4IGxvY2tzIHdheTAgb2YgZGF0YSBjYWNoZSBmb3IgdXNlIGFzIGluaXRpYWwgUkFNOwogICAgdGhpcyBwYXRjaCB1bmxvY2tzIGl0IGFmdGVyIHJlbG9jYXRpb24gdG8gUkFNIGFuZCBpbnZhbGlkYXRlcwogICAgdGhlIGxvY2tlZCBlbnRyaWVzLgoKKiBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDMwIEF1ZyAyMDAzOgogIG5ldyBJMkMgZHJpdmVyIGZvciBtcGMxMDcgYnJpZGdlLiBOb3cgd29ya3MgZnJvbSBmbGFzaC4KCiogUGF0Y2ggYnkgRGF2ZSBFbGxpcywgMTEgQXVnIDIwMDM6CiAgLSBKRkZTMjogZml4IHR5cG8gaW4gY29tbW9uL2NtZF9qZmZzMi5jCiAgLSBKRkZTMjogZml4IENGR19KRkZTMl9TT1JUX0ZSQUdNRU5UUyBvcHRpb24KICAtIEpGRlMyOiByZW1vdmUgbm9kZSB2ZXJzaW9uIDAgd2FybmluZwogIC0gSkZGUzI6IGFjY2VwdCBKRkZTMiBQQURESU5HIG5vZGVzCiAgLSBTWE5JODU1VDogYWRkIEFNMjlMVjgwMCBzdXBwb3J0CiAgLSBTWE5JODU1VDogbW92ZSBlbnZpcm9ubWVudCBmcm9tIEVFUFJPTSB0byBmbGFzaAogIC0gU1hOSTg1NVQ6IGJvb3QgZnJvbSBKRkZTMiBpbiBOT1Igb3IgTkFORCBmbGFzaAoKKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMTEgQXVnIDIwMDM6CiAgZml4ZXMgZm9yIEkyQyBvbiBNUEM4MjQwCiAgLSBmaXggaTJjX3dyaXRlIHJvdXRpbmUKICAtIGZpeCBpcHJvYmUgY29tbWFuZAogIC0gZWxpbWluYXRlcyB1c2Ugb2YgZ2xvYmFsIHZhcmlhYmxlcywgcGx1cyBkZWFkIGNvZGUsIGNsZWFudXAuCgoqIEFkZCBzdXBwb3J0IGZvciBVU0IgTWFzcyBTdG9yYWdlIERldmljZXMgKEJCQikKICAodGVzdGVkIHdpdGggVVNCIG1lbW9yeSBzdGlja3Mgb25seSkKCiogQXZvaWQgZmxpY2tlciBvbiBUUkFCJ3MgVkZECgoqIEFkZCBzdXBwb3J0IGZvciBTSzk4eHggZHJpdmVyCgoqIEFkZCBQQ0kgc3VwcG9ydCBmb3IgU0w4MjQ1IGJvYXJkCgoqIFN1cHBvcnQgSWNlQ3ViZSBib2FyZCBjb25maWd1cmF0aW9ucyB3aXRoIDEgeCBBTUQgQU0yOUxWMDY1ICg4IE1CKQogIG9yIDEgeCBBTTI5TFY2NTIgKHR3byBMVjA2NSBpbiBvbmUgY2hpcCA9IDE2IE1CKTsKICBSdW4gSVBCIGF0IDEzMyBNaHo7IGFkanVzdCB0aGUgTUlJIGNsb2NrIGZyZXF1ZW5jeSBhY2NvcmRpbmdseQoKKiBTZXQgQlJHX0NMSyBvbiBQTTgyNS84MjYgdG8gNjRNSHogKFZDT19PVVQgLyA0LCBpbnN0ZWFkIG9mIDE2ICBNSHopCiAgdG8gYWxsb3cgZm9yIG1vcmUgYWNjdXJhdGUgYmF1ZHJhdGUgc2V0dGluZ3MKICAoZXJyb3Igbm93IDAuNyUgYXQgMTE1IGticHMsIGluc3RlYWQgb2YgMy41JSBiZWZvcmUpCgoqIFBhdGNoIGJ5IEFuZHJlYXMgTW9ociwgNCBTZXAgMjAwMzoKICBGaXggYSBsb3Qgb2Ygc3BlbGxpbmcgZXJyb3JzCgoqIEFkZCBzdXBwb3J0IGZvciBQUENoYW1lbGVvbiBFdmFsIEJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBQM0c0IGJvYXJkCgoqIEZpeCBwcm9ibGVtIHdpdGggTUdUNTEwMCBGRUMgZHJpdmVyOiBhZGQgImVhcmx5IiBNQUMgYWRkcmVzcwogIGluaXRpYWxpemF0aW9uCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDcgQXVnIDIwMDM6CiAgY2hlY2sgQkNTUiB0byBkZXRlY3QgaWYgdGhlIGJvYXJkIGlzIGNvbmZpZ3VyZWQgaW4gUENJIG1vZGUKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC43Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoIGJ5IFJhZ2h1IEtyaXNobmFwcmFzYWQsIDcgQXVnIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIEFkZGVyIElJIE1QQzg1MlQgbW9kdWxlCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTkgQXVnIDIwMDM6CiAgZml4IFRJIElubm92YXRvci9PTUFQMTUxMCBwaW4gY29uZmlncwoKKiBQYXRjaGVzIGJ5IEtzaGl0aWosIDE4IEF1ZyAyMDAzCiAgLSBhZGQgc3VwcG9ydCBmb3IgYXJtOTI2ZWpzIGNwdSBjb3JlCiAgLSBhZGQgc3VwcG9ydCBmb3IgVEkgT01BUCAxNjEwIElubm92YXRvciBCb2FyZAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxNCBBdWcgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgYnppcDIgdW5jb21wcmVzc2lvbgoKKiBBZGQgR0NDIGxpYnJhcnkgdG8gZXhhbXBsZXMvTWFrZWZpbGUgc28gR0NDIHV0aWxpdHkgZnVuY3Rpb25zIHdpbGwKICBiZSByZXNvbHZlZCwgdG9vCgoqIEFkZCBJMkMgYW5kIFJUQyBzdXBwb3J0IGZvciBSTVUgYm9hcmQgdXNpbmcgc29mdHdhcmUgSTJDIGRyaXZlcgogIChiZWNhdXNlIG9mIGJldHRlciByZXNwb25zZSB0byBpcHJvYmUgY29tbWFuZCk7IGZpeCBwcm9ibGVtIHdpdGgKICAicmVzZXQiIGNvbW1hbmQKCiogUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDI4IEF1ZyAyMDAzOgogIEFkZGVkIENPTkZJR19CT09UUF9ETlMyIGFuZCBDT05GSUdfQk9PVFBfU0VORF9IT1NUTkFNRSB0bwogIENPTkZJR19CT09UUF9NQUtTIChzZWUgUkVBRE1FKS4KCiogRml4IElDVTg2MiBlbnZpcm9ubWVudCBwcm9ibGVtCgoqIEZpeCBSQU0gc2l6ZSBkZXRlY3Rpb24gZm9yIFJNVSBib2FyZAoKKiBJbXBsZW1lbnQgInJlc2V0IiBmb3IgTUdUNTEwMC9NUEM1MjAwIHN5c3RlbXMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC42Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIE1ha2UgRXRoZXJuZXQgYXV0b25lZ290aWF0aW9uIG9uIElOQ0EtSVAgd29yayBmb3IgYWxsIGNsb2NrIHJhdGVzOwogIGFsbG93IHNlbGVjdGlvbiBvZiBjbG9jayBmcmVxdWVuY3kgYXMgIm1ha2UiIHRhcmdldAoKKiBJbXBsZW1lbnQgbWVtb3J5IGF1dG9zaXppbmcgY29kZSBmb3IgSWNlQ3ViZSBib2FyZHMKCiogQ29uZmlndXJlIG5ldHdvcmsgcG9ydCBvbiBJTkNBLUlQIGZvciBhdXRvbmVnb3RpYXRpb24KCiogRml4IG92ZXJmbG93IHByb2JsZW0gaW4gbmV0d29yayB0aW1lb3V0IGNvZGUKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgOCBBdWcgMjAwMzoKICBBbGxvdyBjcmMzMiB0byBiZSB1c2VkIGF0IGFkZHJlc3MgMHgwMDAgKGNyYzMyX25vX2NvbXAsIHRvbykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBVcGRhdGUgZm9yIFRRTSBib2FyZCBkZWZhdWx0czoKICBkaXNhYmxlIGNsb2Nrc19pbl9taHosIGVuYWJsZSBib290IGNvdW50IGxpbWl0CgoqIFJlbW92ZWQgdG9vbHMvZ2RiIGZyb20gIm1ha2UgYWxsIiB0YXJnZXQuICBBZGRlZCBtYWtlIHRhcmdldCAiZ2RidG9vbHMiCiAgaW4gdG9wbGV2ZWwgZGlyZWN0b3J5IGluc3RlYWQuICBSZW1vdmVkIGFzdGVzdC5jIGZyb20gdG9vbHMvZ2RiIGJlY2F1c2UKICBpdCBpcyBubyBsb25nZXIgcmVsZXZhbnQuCgoqIEZpeCBQQ0kgc3VwcG9ydCBmb3IgTVBDNTIwMCAvIEljZUN1YmUgQm9hcmQKCiogTWFwIElTUDEzNjIgVVNCIE9URyBjb250cm9sbGVyIGZvciBOU0NVIGJvYXJkCgoqIFBhdGNoIGJ5IEJyYWQgUGFya2VyLCAwMiBBdWcgMjAwMzoKICBmaXggc2M1MjBfY2RwIHByb2JsZW1zCgoqIEltcGxlbWVudCBCb290IEN5Y2xlIERldGVjdGlvbiAoUmVxLiAyLjMgb2YgT1NETCBDR0wgUmVxaXJlbWVudHMpCgoqIEFsbG93IGVyYXNlIGNvbW1hbmQgdG8gY3Jvc3MgZmxhc2ggYmFuayBib3VuZGFyaWVzCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjEgSnVsIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIEx5bnV4V29ya3MgS2VybmVsIERvd25sb2FkYWJsZSBJbWFnZXMgKEtESXMpLgogIEJvdGggTHlueE9TIGFuZCBCbHVlQ2F0IGxpbnV4IEtESXMgYXJlIHN1cHBvcnRlZC4KCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMjUgSnVsIDIwMDM6CiAgdXNlIG1vcmUgcmVsaWFibGUgcmVzZXQgZm9yIE9NQVAvOTI1VAoKKiBQYXRjaCBieSBOeWUgTGl1LCAyNSBKdWwgMjAwMzoKICBmaXggdHlwbyBpbiBtcGM4eHguaAoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAyNCBKdWwgMjAwMzoKICBGaXhlcyBmb3IgY21kX25hbmQuYzoKICAtIEZpeGVkIG51bGwgZGVyZWZlcmVjZSB3aGljaCBjb3VsZCByZXN1bHQgaW4gaW5jb3JyZWN0IEVDQyB2YWx1ZXMuCiAgLSBBZGRlZCBzdXBwb3J0IGZvciBkZXZpY2VzIHdpdGggbm8gUmVhZHkvQnVzeSBzaWduYWwgaG9va2VkIHVwLgogIC0gQWRkZWQgT01BUDE1MTAgcmVhZC93cml0ZSBwcm90ZWN0IGhhbmRsaW5nLgogIC0gRml4ZWQgbmFuZC5oJ3MgRUNDUE9TLiBBIGNvbmZsaWN0IGV4aXN0ZWQgd2l0aCBQT1M1IGFuZCBiYWRibG9jawogICAgZm9yIG5vbi1KRkZTMi4KICAtIFN3aXRjaGVkIGRlZmF1bHQgRUNDIHRvIGJlIEpGRlMyLgoKKiBBbGxvdyBjcmMzMiB0byBiZSB1c2VkIGF0IGFkZHJlc3MgMHgwMDAKCiogUHJvdmlkZSBjb25zaXN0ZW50IGludGVyZmFjZSB0byBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucyB0byBhY2Nlc3MKICB0aGUgJ2dsb2JhbF9kYXRhJyBzdHJ1Y3R1cmUKICBQcm92aWRlIGEgZG9jL1JFQURNRS5zdGFuZGFsb25lIG1vcmUgdXNlZnVsIHRvIHVzZXJzL2RldmVsb3BlcnMuCgoqIE1ha2UgSWNlQ3ViZSBNR1Q1MTAwIEZFQyBkcml2ZXIgd29yawoKKiBJbXBsZW1lbnQgbmV3IG1lY2hhbmlzbSB0byBleHBvcnQgVS1Cb290J3MgZnVuY3Rpb25zIHRvIHN0YW5kYWxvbmUKICBhcHBsaWNhdGlvbnM6IGluc3RlYWQgb2YgdXNpbmcgKFBQQy1zcGVjaWZpYykgc3lzdGVtIGNhbGxzIHdlIG5vdwogIHVzZSBhIGp1bXAgdGFibGU7IHBsZWFzZSBzZWUgZG9jL1JFQURNRS5zdGFuZGFsb25lIGZvciBkZXRhaWxzCgoqIFBhdGNoIGJ5IERhdmUgV2VzdHdvb2QsIDI0IEp1bCAyMDAzOgogIGFkZGVkIHN1cHBvcnQgZm9yIFVuaXR5IE9TIChhIHByb3ByaWV0YXJ5IE9TKQoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAyMyBKdWwgMjAwMzoKICBhZGQgImltbHMiIGNvbW1hbmQgdG8gcHJpbnQgZmxhc2ggdGFibGUgb2YgY29udGVudHMKCiogRml4IGNvbGQgYm9vdCBkZXRlY3Rpb24gZm9yIGxvZyBidWZmZXIgcmVzZXQKCiogUmV0dXJuIGVycm9yIGZvciBpbnZhbGlkIGxlbmd0aCBzcGVjaWZpZXJzIHdpdGggImNwLlgiIGV0Yy4KCiogRml4IHN0YXJ0dXAgcHJvYmxlbSBvbiBNSVBTCgoqIEFsbG93IGZvciBDT05GSUdfU1BMQVNIX1NDUkVFTiBldmVuIHdoZW4gbm8gZXhwbGljaXQKICBiaXRtYXAgc3VwcG9ydCBpcyBjb25maWd1cmVkCgoqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAxOCBKdWwgMjAwMzoKICAtIGZpeCBlbmRpbmFuZXNzIHByb2JsZW0gaW4gY3B1L21wYzgyNHgvZHJpdmVycy9pMmMvaTJjMS5jCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxOCBKdWwgMjAwMzoKICAtIGZpeCBtZW1vcnkgY29uZmlndXJhdGlvbiBmb3IgTUlQNDA1VAogIC0gZml4IHByaW50b3V0IG9mIGJhdWRyYXRlIGZvciAibG9hZGIgPGxvYWRhZGRyPiA8YmF1ZHJhdGU+IgoKKiBDbGVhbnVwIG9mIFRRTTgyeHggY29uZmlndXJhdGlvbnM7IHVzZSAib2ZmaWNpYWwiIGJvYXJkIHR5cGVzCiAgdG8gbWFrZSBzZWxlY3Rpb24gZWFzaWVyLgoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNyBKdWwgMjAwMzoKICBhZGQgZGVsYXkgdG8gZ2V0IEkyQyB3b3JraW5nIHdpdGggImltbSIgY29tbWFuZCBhbmQgczNjMjR4MF9pMmMuYwoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxNyBKdWx5IDAzOgogIC0gRml4ZWQgYnVnIGluIE9NQVAxNTEwIGJhdWQgcmF0ZSBkaXZpc29yIHNldHRpbmdzLgoKKiBQYXRjaCBieSBOeWUgTGl1LCAxNiBKdWx5IDIwMDM6CiAgTVBDODYwRkFEUyBmaXhlczoKICAtIGFkZCBNUEM4NnhBRFMgc3VwcG9ydCAodXNlcyBNUEM4NnhBRFMuaCkKICAtIGFkZCA4NjZQL1QgY29yZSBzdXBwb3J0IChhbHNvIE1QQzg1OVQvTVBDODU5RFNML01QQzg1MlQpCiAgICBvIFBMUFJDUiBjaGFuZ2VzCiAgICBvIEJSRyBjaGFuZ2VzIChFWFRBTC9YVEFMIHJlc3RyaWN0ZWQgdG8gMTBNSHopCiAgICBvIGRvbid0IHRydXN0IGdjbGsoKSBzb2Z0d2FyZSBtZWFzdXJlbWVudCBieSBkZWZhdWx0LCBkZXBlbmQgb24KICAgICAgQ09ORklHXzh4eF9HQ0xLX0ZSRVEKICAtIGFkZCBEUkFNIFNJTU0gbm90IGluc3RhbGxlZCBkZXRlY3Rpb24KICAtIHVzZSBtb3JlICJjb3JyZWN0IiBTRFJBTSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZQogIC0gYWxsb3cgZGlmZmVyZW50IFNEUkFNIHNpemVzICg4eHhBRFMgaGFzIDhNKQogIC0gZGVmYXVsdCBERVIgaXMgMAogIC0gcmVtb3ZlIHVudXNlZCBNQU1SIGRlZmluZXMgZnJvbSBGQURTODYwVC5oIChhbGwgZG9uZSBpbiBmYWRzLmMpCiAgLSByZW5hbWUgTUFNUi9NQk1SIGRlZmluZXMgdG8gYmUgbW9yZSBjb25zaXN0ZW50LiBTaG91bGQgZXZlbnR1YWxseQogICAgYmUgbWVyZ2VkIGludG8gTXhNUiB0byBiZXR0ZXIgcmVmbGVjdCB0aGUgUG93ZXJRVUlDQyBkYXRhc2hlZXQuCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE2IEp1bCAyMDAzOgogIHN1cHBvcnQgbmV3IE1vdG9yb2xhIFBRMkZBRFMtWlUgZXZhbHVhdGlvbiBib2FyZCB3aGljaCByZXBsYWNlZAogIE1QQzgyNjBBRFMgYW5kIE1QQzgyNjZBRFMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC40Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBzdXBwb3J0IGZvciBJY2VDdWJlIGJvYXJkICh3aXRoIE1HVDUxMDAgYW5kIE1QQzUyMDAgQ1BVcykKCiogQWRkIHN1cHBvcnQgZm9yIE1HVDUxMDAgYW5kIE1QQzUyMDAgcHJvY2Vzc29ycwoKKiBQYXRjaCBieSBMdXR6IERlbm5pZywgMTUgSnVsIDIwMDM6CiAgdXBkYXRlIGZvciBSMzYwTVBJIGJvYXJkCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMzoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaGVzIGJ5IEtzaGl0aWosIDA0IEp1bCAyMDAzCiAgLSBhZGRlZCBzdXBwb3J0IGZvciBhcm05MjV0IGNwdSBjb3JlCiAgLSBhZGRlZCBzdXBwb3J0IGZvciBUSSBPTUFQIDE1MTAgSW5ub3ZhdG9yIEJvYXJkCgoqIFBhdGNoZXMgYnkgTWFydGluIEtyYXVzZSwgMTQgSnVsIDIwMDM6CiAgLSBhZGQgSTJDIHN1cHBvcnQgZm9yIHMzYzI0MDAgc3lzdGVtcyAodHJhYiBib2FyZCkKICAtIChyZS0pIGFkZCAicGluZyIgdG8gY29tbWFuZCB0YWJsZQoKKiBGaXggaGFuZGxpbmcgb2YgInNsb3ciIFBPU1Qgcm91dGluZXMKCiogUGF0Y2hlcyBieSBZdWxpIEJhcmNvaGVuLCAxMyBKdWwgMjAwMzoKICAtIENvcnJlY3QgZmxhc2ggYW5kIEpGRlMyIHN1cHBvcnQgZm9yIE1QQzgyNjBBRFMKICAtIGZpeCBQVlIgdmFsdWVzIGFuZCBjbG9jayBnZW5lcmF0aW9uIGZvciBQb3dlclFVSUNDIElJIGZhbWlseQogICAgKDgyNzAvODI3NS84MjgwKQoKKiBQYXRjaCBieSBCZXJuaGFyZCBLdWhuLCAwOCBKdWwgMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciBNNjhLIHRhcmdldHMKCiogUGF0Y2ggYnkgS2VuIENob3UsIDMgSnVsOgogIC0gRml4IFBDSSBjb25maWcgdGFibGUgZm9yIEEzMDAwCiAgLSBGaXggaW9iYXNlIGZvciBuYXRzZW1pLmMKICAgIChQQ0lfQkFTRV9BRERSRVNTXzAgaXMgdGhlIElPIGJhc2UgcmVnaXN0ZXIgZm9yIERQODM4MTUpCgoqIEFsbG93IHRvIGVuYWJsZSAic2xvdyIgUE9TVCByb3V0aW5lcyBieSBrZXkgcHJlc3Mgb24gcG93ZXItb24KKiBGaXggdGVtcGVyYXR1cmUgZGVwZW5kZW5kIHN3aXRjaGluZyBvZiBMQ0QgYmFja2xpZ2h0IG9uIExXTU9OCiogVHdlYWsgb3V0cHV0IGZvcm1hdCBmb3IgTFdNT04KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMSBKdWwgMjAwMzoKICAtIEZpeCBidWcgaW4gQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUuCiAgLSBBUjQwNSBjb25maWcgdXBkYXRlZC4KICAtIE9DUlRDL09SU0c6IGJzcCBjb21tYW5kIGFkZGVkLgogIC0gQVNINDA1IGJzcCB1cGRhdGUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMjoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgc3VwcG9ydCBmb3IgTlNDVSBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODIzTSwgVFFNODUwTSwgVFFNODU1TSBhbmQgVFFNODYwTSBtb2R1bGVzCgoqIEFkZCBzdXBwb3J0IGZvciBBbTI5TFYxNjBNTCwgQW0yOUxWMzIwTUwsIGFuZCBBbTI5TFY2NDBNTAogIG1pcnJvciBiaXQgZmxhc2ggb24gVFFNOHh4TSBtb2R1bGVzCgoqIFBhdGNoIGJ5IEtlbm5ldGggSm9oYW5zc29uLCAzMCBKdW4gMjAwMzoKICBnZXQgcmlkIG9mIE1LX0NNRF9FTlRSWSBtYWNybzsgdXBkYXRlIGRvYy9SRUFETUUuY29tbWFuZAoKKiBQYXRjaCBieSBTZWIgSmFtZXMsIDMwIEp1biAyMDAzOgogIEltcHJvdmUgZG9jdW1lbnRhdGlvbiBvZiBJMkMgY29uZmlndXJhdGlvbiBpbiBSRUFETUUKCiogRml4IHByb2JsZW1zIHdpdGggcHJldmlvdXMgbG9nIGJ1ZmZlciAiZml4ZXMiCgoqIEZpeCBtaW5vciBoZWxwIHRleHQgaXNzdWVzCgoqICJsb2cgYXBwZW5kIiBkaWQgbm90IGFwcGVuZCBhIG5ld2xpbmUKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4xOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEZpeCBzb21lIG1pc3NpbmcgY29tbWFuZHMsIGNsZWFudXAgaGVhZGVyIGZpbGVzCiAgKGF1dG9zY3JpcHQsIGJtcCwgYnNwLCBmYXQsIG1tYywgbmFuZCwgcG9ydGlvLCAuLi4pCgoqIFJld3JpdGUgY29tbWFuZCBsb29rdXAgYW5kIGhlbHAgY29tbWFuZCAoZml4IHByb2JsZW1zIHdpdGggYnViYmxlCiAgc29ydCB3aGVuIHNvcnRpbmcgY29tbWFuZCBuYW1lIGxpc3QpLiBNaW5vciBjbGVhbnVwIGhlcmUgYW5kIHRoZXJlLgoKKiBNZXJnZSBmcm9tICJzdGFibGUgYnJhbmNoIiwgdGFnIExBQkVMXzIwMDNfMDZfMjhfMTgwMC1zdGFibGU6CiAgLSBBbGxvdyB0byBjYWxsIHN5c21vbiBmdW5jdGlvbiBpbnRlcmFjdGl2ZWx5CiAgLSBQSUMgb24gTFdNT04gYm9hcmQgbmVlZHMgZGVsYXkgYWZ0ZXIgcG93ZXItb24KICAtIEFkZCBtaXNzaW5nIFJTUiBkZWZpbml0aW9ucyBmb3IgTVBDOHh4CiAgLSBJbXByb3ZlIGxvZyBidWZmZXIgaGFuZGxpbmc6IGd1YXJhbnRlZSBjbGVhbiByZXNldCBhZnRlciBwb3dlci1vbgogIC0gQWRkIHN1cHBvcnQgZm9yIEVYQklUR0VOIGJvYXJkIChha2EgImdlbmllIikKICAtIEFkZCBzdXBwb3J0IGZvciBTTDgyNDUgYm9hcmQKCiogQ29kZSBjbGVhbnVwOgogIC0gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlIHNwYWNlLCB0cmFpbGluZyBlbXB0eSBsaW5lcywgQysrIGNvbW1lbnRzLCBldGMuCiAgLSBzcGxpdCBjbWRfYm9vdC5jIChzZXBhcmF0ZSBjbWRfYmRpbmZvLmMgYW5kIGNtZF9sb2FkLmMpCgoqIFBhdGNoZXMgYnkgS2VubmV0aCBKb2hhbnNzb24sIDI1IEp1biAyMDAzOgogIC0gbWFqb3IgcmV3b3JrIG9mIGNvbW1hbmQgc3RydWN0dXJlCiAgICAod29yayBkb25lIG1vc3RseSBieSBNaWNoYWwgQ2VuZHJvd3NraSBhbmQgSm9ha2ltIEtyaXN0aWFuc2VuKQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDI2IEp1biAyMDAzOgogIC0gY3NiMjI2IGNvbmZpZ3VyYXRpb24gdXBkYXRlZAogIC0gY3JlZGl0cyBmb3IgbG9nb2RsIHBvcnQgdXBkYXRlZAogIC0gaW5ub2tvbSBjb25maWd1cmF0aW9uIHVwZGF0ZWQKICAtIGxvZ29kbCB0cmVlIHVwZGF0ZSwgc3RpbGwgd2l0aCBjb2Rpbmcgc3R5bGUgaW5jb25zaXN0ZW5jaWVzCiAgLSBhZGRlZCBPQ00gZm9yIHBwYzQwNSB3YXJuaW5nIHRvIFJFQURNRQoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMjUgSnVuIDIwMDM6CiAgdXBkYXRlIE5ldFZpYSB3aXRoIFYyIGJvYXJkIHN1cHBvcnQKCiogSGVhZGVyIGZpbGUgY2xlYW51cCBmb3IgQVJNCgoqIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDI0IEp1biAyMDAzOgogIC0gbWFrZSBzdXJlIHRvIHVzZSBvbmx5IFUtYm9vdCBwcm92aWRlZCBoZWFkZXIgZmlsZXMKICAtIGZpeCBwcm9ibGVtcyB3aXRoICIucm9kYXRhLnN0cjEuNCIgc2VjdGlvbiBhcyB1c2VkIGJ5IEdDQy0zLngKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNCBKdW4gMjAwMzoKICAtIFVwZGF0ZSBlc2QgQVNINDA1IGJvYXJkIGZpbGVzLgogIC0gVXBkYXRlIGVzZCBEQVNBX1NJTSBjb25maWcgZmlsZS4KICAtIEFkZCBwaW5nIGNvbW1hbmQgdG8gc29tZSBlc2QgYm9hcmRzLgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMyBKdW4gMjAwMzoKICBVcGRhdGUgZm9yIE1QQzgyNjBBRFMgYm9hcmQKCiogUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMjMgSnVuIDIwMDM6CiAgLSBjbGVhbnVwIG9mIEdDQyAzLnggY29tcGlsZXIgd2FybmluZ3MKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDQgSnVuIDIwMDM6CiAgYWRkIGxhcmdlIG1lbW9yeSBzdXBwb3J0IGZvciBNUEM4MjY2QURTIGJvYXJkCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE5IEp1bmUgMDM6CiAgLSBFbmFibGVkIHN0YW5kYXJkIHUtYm9vdCBkZXZpY2UgYWJzdHJhY3Rpb24gZm9yIEFSTQogIC0gRW5hYmxlZCBjb25zb2xlIGRldmljZSBmb3IgQVJNCiAgLSBJbml0aWxpemVkIGJpX2JhdWRyYXRlIGZvciBBUk0KCiogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDIzIEFwciAyMDAzOgogIGZpeCBieXRlIG9yZGVyIGZvciA4MjR4IEkyQyBhZGRyZXNzZXMgKHdyaXRlIG9wKQoKKiBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAyMCBKdW4gMjAwMzoKICAtIGh5bW9kIHVwZGF0ZQogIC0gY2xlYW51cCAoZXNwZWNpYWxseSBmb3IgZ2NjLTMueCBjb21waWxlcnMpCgoqIFBhdGNoIGJ5IFRvbSBHdWlsbGlhbXMsIDIwIEp1biAyMDAzOgogIGFkZGVkIENPTkZJR183NTBGWCBzdXBwb3J0IGZvciBJQk0gNzUwRlggcHJvY2Vzc29ycwoKKiBQYXRjaCBieSBEZXZpbiBDcnVtYiwgMDIgQXByIDIwMDM6CiAgRml4IGNsb2NrIGRpdmlkZXIgcm91bmRpbmcgcHJvYmxlbSBpbiBkcml2ZXJzL3NlcmlhbC5jCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE5IEp1bmUgMDM6CiAgLSBGaXhlZCBzbWM5MWMxMTEgZHJpdmVyIHRvIHN5bmMgd2l0aCB0aGUgdS1ib290IGVudmlyb25tZW50CiAgICAoZHJpdmVyL3NtYzkxYzExMS5jKS4KICAtIEFkZGVkIGV0aF9pbml0IGVycm9yIHJldHVybiBjaGVjayBpbiBOZXRMb29wIChuZXQvbmV0LmMpLgoKKiBQYXRjaCBieSBLZW4gQ2hvdSwgMTkgSnVuZSAyMDAzOgogIEFkZGVkIHN1cHBvcnQgZm9yIEEzMDAwIFNCQyBib2FyZCAoQXJ0aXMgTWljcm9zeXN0ZW1zIEluYy4pCgoqIFBhdGNoZXMgYnkgTXVycmF5IEplbnNlbiwgMTcgSnVuIDIwMDM6CiAgLSBIeW1vZCBib2FyZCBkYXRhYmFzZSBtb2RzOiBhZGQgIndobyIgZmllbGQgYW5kIG5ldyB4aWxpbnggY2hpcCB0eXBlcwogIC0gcHJvdmlkZSBuZXcgImluaXRfY21kX3RpbWVvdXQoKSIgZnVuY3Rpb24gc28gY29kZSBleHRlcm5hbCB0bwogICAgImNvbW1vbi9tYWluLmMiIGNhbiB1c2UgdGhlICJyZXNldF9jbWRfdGltZW91dCgpIiBmdW5jdGlvbiBiZWZvcmUKICAgIGVudGVyaW5nIHRoZSBtYWluIGxvb3AKICAtIGFkZCBEVFQgc3VwcG9ydCBmb3IgYWRtMTAyMSAobmV3IGZpbGUgZHR0L2FkbTEwMjEuYzsgY29uZmlnCiAgICBzbGlnaHRseSBkaWZmZXJlbnQuIHNlZSBpbmNsdWRlL2NvbmZpZ3MvaHltb2QuaCBmb3IgYW4gZXhhbXBsZQogICAgKHJlcXVpcmVzIENPTkZJR19EVFRfQURNMTAyMSwgQ09ORklHX0RUVF9TRU5TT1JTLCBhbmQKICAgIENGR19EVFRfQURNMTAyMSBkZWZpbmVkKQogIC0gYWRkIG5ldyAiZWVwcm9tX3Byb2JlKCkiIGZ1bmN0aW9uIHdoaWNoIGhhcyBzaW1pbGFyIGFyZ3MgYW5kCiAgICBiZWhhdmVzIGluIGEgc2ltaWxhciB3YXkgdG8gImVlcHJvbV9yZWFkKCkiIGV0Yy4KICAtIGFkZCA4MjYwIEZDQyBldGhlcm5ldCBsb29wYmFjayBjb2RlIChuZXcgImV0aF9sb29wYmFja190ZXN0KCkiCiAgICBmdW5jdGlvbiB3aGljaCBpcyBlbmFibGVkIGJ5IGRlZmluaW5nIENPTkZJR19FVEhFUl9MT09QQkFDS19URVNUKQogIC0gZ2RidG9vbHMgY29weXJpZ2h0IHVwZGF0ZQogIC0gZW5zdXJlIHRoYXQgc2V0X21zcigpIGV4ZWN1dGVzIHRoZSAic3luYyIgYW5kICJpc3luYyIgaW5zdHJ1Y3Rpb25zCiAgICBhZnRlciB0aGUgIm10bXNyIiBpbnN0cnVjdGlvbiBpbiBjcHUvbXBjODI2MC9pbnRlcnJ1cHRzLmMKICAtIDgyNjAgSS9PIHBvcnRzIGZpeDogT3BlbiBEcmFpbiBzaG91bGQgYmUgc2V0IGxhc3Qgd2hlbiBjb25maWd1cmluZwogIC0gYWRkIFNJVSBJUlEgZGVmaW5lcyBmb3IgODI2MAogIC0gYWxsb3cgTERTQ1JJUFQgb3ZlcnJpZGUgYW5kIE9CSkNGTEFHUyBpbml0aWFsaXphdGlvbjogY2hhbmdlIHRvCiAgICBjb25maWcubWsgdG8gYWxsb3cgYm9hcmQgY29uZmlndXJhdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIEdOVQogICAgbGlua2VyIHNjcmlwdCwgc2VsZWN0ZWQgdmlhIHRoZSBMRFNDUklQVCwgbWFrZSB2YXJpYWJsZSwgYW5kIHRvCiAgICBnaXZlIGFuIGluaXRpYWwgdmFsdWUgdG8gdGhlIE9CSkNGTEFHUyBtYWtlIHZhcmlhYmxlCiAgLSA4MjYwIGkyYyBlbmhhbmNlbWVudDoKICAgIG8gY29ycmVjdGx5IGV4dGVuZHMgdGhlIHRpbWVvdXQgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGFsbAogICAgICBxdWV1ZWQgbWVzc2FnZXMgZm9yIGJvdGggdHJhbnNtaXQgYW5kIHJlY2VpdmUKICAgIG8gd2lsbCBub3QgY29udGludWUgd2l0aCByZWNlaXZlIGlmIHRyYW5zbWl0IHRpbWVzIG91dAogICAgbyBlbnN1cmVzIHRoYXQgdGhlIGVycm9yIGNhbGxiYWNrIGlzIGRvbmUgZm9yIGFsbCBxdWV1ZWQgdHgKICAgICAgYW5kIHJ4IG1lc3NhZ2VzCiAgICBvIGNvcnJlY3RseSBkZXRlY3RzIGJvdGggdHggYW5kIHJ4IHRpbWVvdXRzLCBvbmx5IGRlbGl2ZXJzIG9uZSB0bwogICAgICB0aGUgY2FsbGJhY2ssIGFuZCBkb2VzIG5vdCBvdmVyd3JpdGUgYW4gZWFybGllciBlcnJvcgogICAgbyBsb2dpYyBpbiBpMmNfcHJvYmUgbm93IGNvcnJlY3QKICAtIGFkZCAidnByaW50ZigpIiBmdW5jdGlvbiBzbyB0aGF0ICJwYW5pYygpIiBmdW5jdGlvbiBjYW4gYmUKICAgIHRlY2huaWNhbGx5IGNvcnJlY3QKICAtIG1hbnkgSHltb2QgYm9hcmQgY2hhbmdlcwoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTQgSnVuIDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgTG9nb3Ryb25pYyBETCBkYXRhbG9nZ2VyIGJvYXJkCiAgLSBjbGVhbnVwIHNlcmlhbCBsaW5lIGFmdGVyIGtlcm1pdCBiaW5hcnkgZG93bmxvYWQKICAtIGFkZCBkZWJ1Z1ggbWFjcm8gKGRlYnVnIGxldmVsIHN1cHBvcnQpCiAgLSB1cGRhdGUgbWFjaC10eXBlcy5oIHRvIGxhdGVzdCBhcm0ubGludXgub3JnLnVrIG1hc3RlciBsaXN0LgoKKiBQYXRjaGVzIGJ5IERhdmlkIE38bGxlciwgMTIgSnVuIDIwMDM6CiAgLSByZXdyaXRlIG9mIHRoZSBTM0MyNFgwIHJlZ2lzdGVyIGRlZmluaXRpb25zIHN0dWZmCiAgLSAiZHJpdmVyIiBmb3IgdGhlIGJ1aWx0LWluIFMzQzI0WDAgUlRDCgoqIFBhdGNoZXMgYnkgWXVsaSBCYXJjb2hlbiwgMTIgSnVuIDIwMDM6CiAgLSBBZGQgTUlJIHN1cHBvcnQgYW5kIEV0aGVybmV0IFBIWSBpbml0aWFsaXphdGlvbiBmb3IgTVBDODI2MEFEUyBib2FyZAogIC0gRml4IGluY29ycmVjdCBTSVVNQ1IgaW5pdGlhbGlzYXRpb24gY2F1c2VkIGJ5IHdyb25nIEhhcmQgUmVzZXQKICAgIGNvbmZpZ3VyYXRpb24gd29yZCBzdXBwbGllZCBieSBGUEdBIG9uIHNvbWUgTVBDODI2MEFEUyBib2FyZHMKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDEwIEp1biAyMDAzOgogIFVuaWZ5IHN0YXR1cyBMRUQgaW50ZXJmYWNlCgoqIEFkZCBzdXBwb3J0IGZvciBEUzEyODg3IFJUQzsgYWRkIFJUQyBzdXBwb3J0IGZvciBBVEMgYm9hcmQKCiogUGF0Y2ggYnkgTmljb2xhcyBMYWNyZXNzb25uaWVyZSwgMTEgSnVuIDIwMDM6CiAgTW9kaWZpY2F0aW9ucyBmb3IgQXRtZWwgQVQ5MVJNOTIwMERLIEFSTTkyMFQgYmFzZWQgZGV2ZWxvcG1lbnQga2l0CiAgLSBBZGQgQXRtZWwgRGF0YUZsYXNoIHN1cHBvcnQgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuCiAgLSBBZGQgcG9zc2liaWxpdHkgdG8gYm9vdCBhIExpbnV4IGZyb20gRGF0YUZsYXNoIHdpdGggQk9PVE0gY29tbWFuZC4KICAtIEFkZCBGbGFzaCBkZXRlY3Rpb24gb24gQXRtZWwgQVQ5MVJNOTIwMERLCiAgICAoYmV0d2VlbiBBdG1lbCBBVDQ5QlYxNjE0IGFuZCBBVDQ5QlYxNjE0QSBmbGFzaGVzKQogIC0gUmVwbGFjZSBvbGQgRXRoZXJuZXQgUEhZIGxheWVyIGZ1bmN0aW9ucwogIC0gQ2hhbmdlIGxpbmsgYWRkcmVzcwoKKiBQYXRjaCBieSBGcmFuayBTbWl0aCwgOSBKdW4gMjAwMzoKICB1c2UgQ1JJVF9FWENFUFRJT04gZm9yIG1hY2hpbmUgY2hlY2sgb24gNHh4CgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDEzIEp1biAyMDAzOgogIGFkZGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZSAiY2FyaW5mbyIgY29tbWFuZCBpbiBjbWRfaW1tYXAuYwoKKiBGaXggQ09ORklHX05FVF9NVUxUSSBzdXBwb3J0IGluIGluY2x1ZGUvbmV0LmgKCiogUGF0Y2hlcyBieSBLeWxlIEhhcnJpcywgMTMgTWFyIDIwMDM6CiAgLSBBZGQgRkFUIHBhcnRpdGlvbiBzdXBwb3J0CiAgLSBBZGQgY29tbWFuZCBzdXBwb3J0IGZvciBGQVQKICAtIEFkZCBjb21tYW5kIHN1cHBvcnQgZm9yIE1NQwogIC0tLS0KICAtIEFkZCBJbnRlbCBQWEEgc3VwcG9ydCBmb3IgdmlkZW8KICAtIEFkZCBJbnRlbCBQWEEgc3VwcG9ydCBmb3IgTU1DCiAgLS0tLQogIC0gRW5hYmxlIE1NQyBhbmQgRkFUIGZvciBsdWJib2NrIGJvYXJkCiAgLSBPdGhlciBtaXNjIGNoYW5nZXMgZm9yIGx1YmJvY2sgYm9hcmQKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCBBcHJpbCAwMiwgMjAwMzoKICBmaXggZm9yIFNNU0M5MTExMSBkcml2ZXIKCiogUGF0Y2ggYnkgVmxhZGltaXIgR3VyZXZpY2gsIDA0IEp1biAyMDAzOgogIG1ha2UgcHBjNDA1IGV0aGVybmV0IGRyaXZlciBjb21wYXRpYmxlIHdpdGggQ09ORklHX05FVF9NVUxUSSBvcHRpb24KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNSBKdW4gMjAwMzoKICAtIFBQQzR4eDogRml4IGJ1ZyBmb3IgaW5pdGlhbCBzdGFjayBpbiBkYXRhIGNhY2hlIGFzIHBvaW50ZWQgb3V0IGJ5CiAgICBUaG9tYXMgU2NoYWVmZXIgKHRzY2hhZWZlckBnaWdhLXN0cmVhbS5kZSkuIE5vdyBpbml0YWwgc3RhY2sgaW4KICAgIGRhdGEgY2FjaGUgY2FuIGJlIHVzZWQgZXZlbiBpZiB0aGUgY2hpcCBzZWxlY3QgaXMgaW4gdXNlLgogIC0gQ0ZHX1JYX0VUSF9CVUZGRVIgYWRkZWQgdG8gc2V0IHRoZSBldGhlcm5ldCByZWNlaXZlIGJ1ZmZlciBjb3VudAogICAgKHNlZSBSRUFETUUgZm9yIGZ1cnRoZXIgZGVzY3JpcHRpb24pLgogIC0gQ2hhbmdlZCBjb25maWcgZmlsZXMgb2YgQ09ORklHX0VFUFJPMTAwIGJvYXJkcyB0byB1c2UgdGhlCiAgICBDRkdfUlhfRVRIX0JVRkZFUiBkZWZpbmUuCgoqIEFkZCBzdXBwb3J0IGZvciBSTVUgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTg2MkwgYXQgMTAwLzUwIE1IegoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDIgSnVuIDIwMDM6CiAgbWFqb3IgcmVjb25zdHJ1Y3Rpb24gb2YgbmV0d29ya2luZyBjb2RlOwogIGFkZCAicGluZyIgc3VwcG9ydCAob3V0Z29pbmcgb25seSEpCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAwNCBKdW5lIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDVUIGJvYXJkCgoqIFBhdGNoZXMgYnkgVWRpIEZpbmtlbHN0ZWluLCAyIEp1bmUgMjAwMzoKICAtIEFkZGVkIHN1cHBvcnQgZm9yIGN1c3RvbSBrZXlib2FyZHMsIGluaXRpYWxpemVkIGJ5IGRlZmluaW5nIGEKICAgIGJvYXJkLXNwZWNpZmljIGRydl9rZXlib2FyZF9pbml0IGFzIHdlbGwgYXMgZGVmaW5pbmcgQ09ORklHX0tFWUJPQVJEIC4KICAtIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBSQkM4MjMgYm9hcmQuCiAgLSBjcHUvbXBjOHh4L2xjZC5jIG5vdyBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZXMgdGhlCiAgICBIb3Jpem9udGFsIFBpeGVsIENvdW50IGZpZWxkLgoKKiBGaXggYWxpZ25tZW50IHByb2JsZW0gaW4gQk9PVFAgKGRoY3BfbGVhc2V0aW1lIG9wdGlvbikKICBbcG9pbnRlZCBvdXQgYnkgTmljb2xhcyBMYWNyZXNzb25uaehyZSwgMiBKdW4gMjAwM10KCiogUGF0Y2ggYnkgTWFyayBSYWtlcywgMTQgTWF5IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIEludGVsIGUxMDAwIGdpZyBjYXJkcy4KCiogUGF0Y2ggYnkgTnllIExpdSwgMyBKdW4gMjAwMzoKICBmaXggY3JpdGljYWwgdHlwbyBpbiBNQU1SIGRlZmluaXRpb24gKGluY2x1ZGUvbXBjOHh4LmgpCgoqIEZpeCByZXF1aXJlbWVudCB0byBhbGlnbiBVLUJvb3QgaW1hZ2Ugb24gMTYga0IgYm91bmRhcmllcyBvbiBQUEMuCgoqIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDIgSnVuIDIwMDMKICBNaW5vciBjaGFuZ2VzIGZvciBLVVA0SyBjb25maWd1cmF0aW9uCgoqIFBhdGNoIGJ5IE1hcmMgU2luZ2VyLCAyOSBNYXkgMjAwMzoKICBGaXhlZCByYXJwIGJvb3QgbWV0aG9kIGZvciBJQTMyIGFuZCBvdGhlciBsaXR0bGUtZW5kaWFuIENQVXMuCgoqIFBhdGNoIGJ5IE1hcmMgU2luZ2VyLCAyOCBNYXkgMjAwMzoKICBBZGRlZCBwb3J0IEkvTyBjb21tYW5kcy4KCiogUGF0Y2ggYnkgTWF0dGhldyBNY0NsaW50b2NrLCAyOCBNYXkgMjAwMwogIC0gY3B1L21wYzgyNHgvc3RhcnQuUzogZml4IHJlbG9jYXRpb24gY29kZSB3aGVuIGJvb3RpbmcgZnJvbSBSQU0KICAtIG1pbm9yIHBhdGNoZXMgZm9yIHV0eDgyNDUKCiogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAyOCBNYXkgMjAwMzoKICB4ODYgdXBkYXRlCgoqIFBhdGNoIGJ5IERhdmUgRWxsaXMsIDkgTWF5IDIwMDMgKyAyNyBNYXkgMjAwMzoKICBhZGQgbmFuZCBmbGFzaCBzdXBwb3J0IHRvIFNYTkk4NTVUIGNvbmZpZ3VyYXRpb24KICBmaXgvZXh0ZW5kIG5hbmQgZmxhc2ggc3VwcG9ydDoKICAtIGZpeCAnbmFuZCBlcmFzZScgY29tbWFuZCBzbyBkb2VzIG5vdCBlcmFzZSBiYWQgYmxvY2tzCiAgLSBmaXggJ25hbmQgd3JpdGUnIGNvbW1hbmQgc28gZG9lcyBub3Qgd3JpdGUgdG8gYmFkIGJsb2NrcwogIC0gZml4IG5hbmRfcHJvYmUoKSBzbyBoYW5kbGVzIG5vIGZsYXNoIGRldGVjdGVkIHByb3Blcmx5CiAgLSBhZGQgZG9jL1JFQURNRS5uYW5kCiAgLSBhZGQgLmpmZnMyIGFuZCAub29iIG9wdGlvbnMgdG8gbmFuZCByZWFkL3dyaXRlCiAgLSBhZGQgJ25hbmQgYmFkJyBjb21tYW5kIHRvIGxpc3QgYmFkIGJsb2NrcwogIC0gYWRkICdjbGVhbicgb3B0aW9uIHRvICduYW5kIGVyYXNlJyB0byB3cml0ZSBKRkZTMiBjbGVhbiBtYXJrZXJzCiAgLSBtYWtlIE5BTkQgcmVhZC93cml0ZSBmYXN0ZXIKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDIzIE1heSAyMDAzOgogIFVwZGF0ZSBmb3IgTVBDODI2NkFEUyBib2FyZAoKKiBHZXQgKG1vc3RseSkgcmlkIG9mIENGR19NT05JVE9SX0xFTiBkZWZpbml0aW9uOyBjb21wdXRlIHJlYWwgbGVuZ3RoCiAgaW5zdGVhZCBDRkdfTU9OSVRPUl9MRU4gaXMgbm93IG9ubHkgdXNlZCB0byBkZXRlcm1pbmUgIF9hdF9jb21waWxlXwogIF90aW1lXyAgKCEpIGlmIHRoZSBlbnZpcm9ubWVudCBpcyBlbWJlZGRlZCB3aXRoaW4gdGhlIFUtQm9vdCBpbWFnZSwKICBvciBpbiBhIHNlcGFyYXRlIGZsYXNoIHNlY3Rvci4KCiogQ2xlYW51cCBDRkdfREVSICNkZWZpbmVzIGluIGNvbmZpZyBmaWxlcyAod2QgbWFpbnRhaW5lZCBvbmx5KQoKKiBGaXggZGF0YSBhYm9ydCBleGNlcHRpb24gaGFuZGxpbmcgZm9yIGFybTkyMHQgQ1BVCgoqIEZpeCBhbGlnbm1lbnQgcHJvYmxlbXMgd2l0aCBmbGFzaCBkcml2ZXIgZm9yIFRSQUIgYm9hcmQKCiogUGF0Y2ggYnkgRG9uYWxkIFdoaXRlLCAyMSBNYXkgMjAwMzoKICBmaXggY2FsY3VsYXRpb24gb2YgYmFzZSBhZGRyZXNzIGluIHBjaV9ob3NlX2NvbmZpZ19kZXZpY2UoKQoKKiBGaXggYnVnIGluIGNvbW1hbmQgbGluZSBwYXJzaW5nOiAiY21kMTtjbWQyIiBpcyBzdXBwb3NlZCB0byBhbHdheXMKICBleGVjdXRlICJjbWQyIiwgZXZlbiBpZiAiY21kMSIgZmFpbHMuIE5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudAogIHRvICJydW4gdmFyMSB2YXIyIiB3aGVyZSB0aGUgY29udGVudHMgb2YgInZhcjIiIHdpbGwgTk9UIGJlCiAgZXhlY3V0ZWQgd2hlbiBhIGNvbW1hbmQgaW4gInZhcjEiIGZhaWxzLgoKKiBBZGQgemVyby1jb3B5IHJhbWRpc2sgc3VwcG9ydCAocmVxdWlyZXMgY29ycmVzcG9uZGluZyBrZXJuZWwgc3VwcG9ydCEpCgoqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAyMCBNYXkgMjAwMzoKICBJbiBwcmVwYXJhdGlvbiBmb3IgYW4gaXhwIHBvcnQsIHJlbmFtZSBjcHUveHNjYWxlIGFuZCBhcmNoLXhzY2FsZQogIGludG8gY3B1L3B4YSBhbmQgYXJjaC1weGEuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjMgTWF5IDIwMDM6CiAgLSBJQk0gUFBDNDA1RVAgcG9ydCBhZGRlZC4KICAtIENPTkZJR19VQVJUMV9DT05TT0xFIGFkZGVkLiBJZiBkZWZpbmVkIGludGVybmFsIFVBUlQxIChhbmQgbm90CiAgICBVQVJUMCkgaXMgdXNlZCBhcyBkZWZhdWx0IFUtQm9vdCBjb25zb2xlLiBQUEM0eHggb25seSEKICAtIGVzZCBBU0g0MDUgYm9hcmQgYWRkZWQgKFBQQzQwNUVQIGJhc2VkKS4KICAtIEJVQklOR0E0MDVFUCBib2FyZCBhZGRlZCAoUFBDNDA1RVAgYmFzZWQgLSBJQk0gRXZhbCBCb2FyZCkuCiAgLSBlc2QgQ1BDSTQwNUFCIGJvYXJkIGFkZGVkLgogIC0gZXNkIFBNQzQwNSBib2FyZCBhZGRlZC4KICAtIFVwZGF0ZSBvZiBzb21lIGVzZCBib2FyZHMuCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxOSBNYWkgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNS0zIGJvYXJkCgoqIFBhdGNoIGJ5IERhdmUgRWxsaXMsIDIyIE1heSAyMDAzOgogIEZpeCBwcm9ibGVtIHdpdGggb25seSBwYXJ0aWFsbHkgY2xlYXJlZCAuYnNzIHNlZ21lbnQKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDEyIE1heSAyMDAzOgogIGdldCBQQ0kgdG8gd29yayBvbiBhIE1QQzgyNjZBRFMgYm9hcmQ7IGluY29ycG9yYXRlIGNoYW5nZSB0bwogIGNwdS9tcGM4MjYwL3BjaS5jIHRvIGVuYWJsZSBvdmVycmlkZXMgb2YgUENJIG1lbW9yeSBwYXJhbWV0ZXJzCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDEgTWF5IDIwMDM6CiAgbWlub3IgcGF0Y2hlcyBmb3IgdGhlIEZBRFM4eHgKCiogUGF0Y2ggYnkgVGhvbWFzIFNjaORmZXIsIDI4IEFwciAyMDAzOgogIEZpeCBTUEQgaGFuZGxpbmcgZm9yIDI1NiBFQ0MgRElNTSBvbiBXYWxudXQKCiogQWRkIHN1cHBvcnQgZm9yIGFyYml0cmFyeSBiaXRtYXBzIGZvciBUUkFCJ3MgIFZGRCBjb21tYW5kOwogIGFsbG93IHRvIHBhc3MgYm9vdCBiaXRtYXAgYWRkcmVzc2VzIGluIGVudmlyb25tZW50IHZhcmlhYmxlczsKICBhbGxvdyBmb3IgemVybyBib290IGRlbGF5CgoqIFBhdGNoIGJ5IENocmlzdGlhbiBHZWnfaW5nZXIsIDE5IE1heSAyMDAyOgogIE9uIFRSQUI6IHdhaXQgdW50aWwgdGhlIGR1bW15IGJ5dGUgaGFzIGJlZW4gY29tcGxldGVseSBzZW50CgoqIFBhdGNoIGJ5IERhdmlkIFVwZGVncmFmZiwgMjIgQXByIDIwMDM6CiAgdXBkYXRlIGZvciBDcmF5TDEgYm9hcmQKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDIxIEFwciAyMDAzOgogIGFkZCBib290IHN1cHBvcnQgZm9yIEFSVE9TIChhIHByb3ByaWV0YXJ5IE9TKQoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMSBBcHIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgUlRDIERTMTMzOAoKKiBQYXRjaCBieSBSb2QgQm95Y2UsIDI0IEphbiAyMDAzOgogIEZpeCBjb3VudGluZyBvZiBleHRlbmRlZCBwYXJ0aXRpb25zIGluIGRpc2tib290IGNvbW1hbmQKCiogUGF0Y2ggYnkgQ2hyaXN0b3BoZSBMaW5kaGVpbWVyLCAyMCBNYXkgMjAwMzoKICBhbGxvdyB0aGUgdXNlIG9mIENGR19MT0FEUyB3aGVuIENGR19OT19GTEFTSCBpcyBzZXQKCiogRml4IFNEUkFNIHRpbWluZyBvbiBQdXJwbGUgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIENvbXBhY3RGbGFzaCBvbiBBVEMgYm9hcmQKICAoaW5jbHVkZXMgc3VwcG9ydCBmb3IgSW50ZWwgODIzNjUgYW5kIGNvbXBhdGlibGUgUEMgQ2FyZCBjb250cm9sbGVycywKICBhbmQgWWVudGEtY29tcGF0aWJsZSBQQ0ktdG8tQ2FyZEJ1cyBjb250cm9sbGVycykKCiogUGF0Y2ggYnkgTWF0aGlqcyBIYWFybWFuLCAwOCBNYXkgMjAwMzoKICBBZGQgbGFuOTFjOTYgZHJpdmVyICh0ZXN0ZWQgb24gTHViYm9jayBhbmQgY3VzdG9tIFBYQTI1MCBib2FyZCBvbmx5KQoKKiBGaXggcHJvYmxlbSB3aXRoIHVzYWdlIG9mICJ0cnVlIiAodW5kZWZpbmVkIGluIGN1cnJlbnQgdmVyc2lvbnMgb2YgYmZkLmgpCgoqIEFkZCBzdXBwb3J0IGZvciBQcm9tZXNzIEFUQyBib2FyZAoKKiBQYXRjaCBieSBLZWl0aCBPdXR3YXRlciwgMjggQXByIDIwMDM6CiAgLSBNaXNjZWxsYW5lb3VzIGNvcnJlY3Rpb25zIGFuZCBhZGRpdGlvbnMgdG8gR0VOODYwVCBib2FyZCBzcGVjaWZpYyBjb2RlLgogIC0gQWRkZWQgR0VOODYwX1NDIHZhcmlhbnQgdG8gR0VOODYwVC4KICAtIE1pc2NlbGxhbmVvdXMgY29ycmVjdGlvbnMgdG8gR0VOODYwVCBkb2N1bWVudGF0aW9uLgogIC0gQ29ycmVjdCBkdXBsaWNhdGUgZW50cnkgaW4gVS1Cb290IENSRURJVFMgZmlsZS4KICAtIEFkZCBHRU44NjBUX1NDIGVudHJ5IGluIE1BSU5UQUlORVJTIGZpbGUuCiAgLSBVcGRhdGUgQ1JFRElUUyBmaWxlIHdpdGggR0VOODYwVF9TQyBpbmZvLgoKKiBVcGRhdGUgU21pdGhzIEFlcm9zcGFjZSBhZGRyZXNzZXMgaW4gTUFJTlRBSU5FUlMgZmlsZQoKKiBGaXggZXJyb3IgaGFuZGxpbmcgaW4gaHVzaCdzIHZlcnNpb24gb2YgInJ1biIgY29tbWFuZAoKKiBMV01PTiBleHRlbnNpb25zOgogIC0gU3BsYXNoc2NyZWVuIHN1cHBvcnQKICAtIG1vZGVtIHN1cHBvcnQKICAtIHN5c21vbiBzdXBwb3J0CiAgLSB0ZW1wZXJhdHVyZSBkZXBlbmRlbmQgZW5hYmxpbmcgb2YgTENECgoqIEFsbG93IGJvb3RpbmcgZnJvbSBvbGQgIlBQQ0Jvb3QiIGRpc2sgcGFydGl0aW9ucwoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODI1NSBCb2FyZCAvIE1QQzgyNTUgQ1BVCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjMuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBNYWtlIHN1cmUgQmxvY2sgTG9jayBCaXRzIGdldCBjbGVhcmVkIGluIFIzNjBNUEkgZmxhc2ggZHJpdmVyCgoqIE1QQzgyMyBMQ0QgZHJpdmVyOiBGaWxsIGNvbG9yIG1hcCBiYWNrd2FyZHMsIHRvIGFsbG93IGZvciBzdGVhZHkKICBkaXNwbGF5IHdoZW4gTGludXggdGFrZXMgb3ZlcgoKKiBQYXRjaCBieSBFcndpbiBSb2wsIDI3IEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBSVEVNUyAodGhpcyB0aW1lIGZvciByZWFsKS4KCiogQWRkIHN1cHBvcnQgZm9yICJibXAgaW5mbyIgYW5kICJibXAgZGlzcGxheSIgY29tbWFuZHMgdG8gbG9hZAogIGJpdG1hcCBpbWFnZXM7IHRoaXMgY2FuIGJlIHVzZWQgKGZvciBleGFtcGxlIGluIGEgInByZWJvb3QiCiAgY29tbWFuZCkgdG8gZGlzcGxheSBhIHNwbGFzaCBzY3JlZW4gdmVyeSBxdWlja2x5IGFmdGVyIHBvd2Vyb24uCgoqIEFkZCBzdXBwb3J0IGZvciAxMzMgTUh6IGNsb2NrIG9uIElOQ0EtSVAgYm9hcmQKCiogUGF0Y2ggYnkgTHV0eiBEZW5uaWcsIDEwIEFwciAyMDAzOgogIFVwZGF0ZSBmb3IgUjM2ME1QSSBib2FyZAoKKiBBZGQgbmV3IG1lYW5pbmcgdG8gImF1dG9zdGFydCIgZW52aXJvbm1lbnQgdmFyaWFibGU6CiAgSWYgc2V0IHRvICJubyIsIGEgc3RhbmRhbG9uZSBpbWFnZSBwYXNzZWQgdG8gdGhlCiAgImJvb3RtIiBjb21tYW5kIHdpbGwgYmUgY29waWVkIHRvIHRoZSBsb2FkIGFkZHJlc3MKICAoYW5kIGV2ZW50dWFsbHkgdW5jb21wcmVzc2VkKSwgYnV0IE5PVCBiZSBzdGFydGVkLgogIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9hZCBhbmQgdW5jb21wcmVzcyBhcmJpdHJhcnkKICBkYXRhLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIEFwciAyMDAzOgogIENoYW5nZWQgREhDUCBjbGllbnQgdG8gdXNlIElQIGFkZHJlc3MgZnJvbSBzZXJ2ZXIgb3B0aW9uIGZpZWxkICM1NAogIGZyb20gdGhlIE9GRkVSIHBhY2tldCBpbiB0aGUgc2VydmVyIG9wdGlvbiBmaWVsZCAjNTQgaW4gdGhlIFJFUVVFU1QKICBwYWNrZXQuIFRoaXMgZml4ZXMgYSBwcm9ibGVtIHVzaW5nIGEgV2luZG93cyAyMDAwIERIQ1Agc2VydmVyLAogIHdoZXJlIHRoZSBESENQLXNlcnZlciBpcyBub3QgdGhlIFRGVFAtc2VydmVyLgoKKiBTZXQgbWF4IGJyaWdodG5lc3MgZm9yIE1OMTEyMzYgZGlzcGxheXMgb24gVFJBQiBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODYyTCBtb2R1bGVzCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjMuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBBcnVuIERoYXJhbmthciwgNCBBcHIgMjAwMzoKICBBZGQgSURNQSBleGFtcGxlIGNvZGUgKHRlc3RlZCBvbiA4MjYwIG9ubHkpCgoqIEFkZCBzdXBwb3J0IGZvciBQdXJwbGUgQm9hcmQgKE1JUFM2NCA1S2MpCgoqIEFkZCBzdXBwb3J0IGZvciBNSVBTNjQgNUtjIENQVXMKCiogRml4IG1pc3Npbmcgc2V0dGluZyBvZiAibG9hZGFkZHIiIGFuZCAiYm9vdGZpbGUiIG9uIEFSTSBhbmQgTUlQUwoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMDQgQXByIDIwMDM6CiAgLSB1cGRhdGUgTUlQNDA1LTQgYm9hcmQKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA0IEFwciAyMDAzOgogIC0gVS1Cb290IHZlcnNpb24gZW52aXJvbm1lbnQgdmFyaWFibGUgInZlciIgYWRkZWQKICAgIChDT05GSUdfVkVSU0lPTl9WQVJJQUJMRSkuCiAgLSBDaGFuZ2VkIFBQQzQwNUdQciB2ZXJzaW9uIGZyb20gQSB0byBCLgogIC0gQ2hhbmdlZCBDUENJNDA1IHRvIHVzZSBDVFMgaW5zdGVhZCBvZiBEU1Igb24gUFBDNDA1IFVBUlQxLgoKKiBQYXRjaGVzIGJ5IERlbmlzIFBldGVyLCAwMyBBcHJpbCAyMDAzOgogIC0gZml4IFBDSSBJUlFzIG9uIE1QTCBib2FyZHMKICAtIGZpeCB0d28gbW9yZSB1bi1yZWxvY2F0ZWQgcG9pbnRlciBwcm9ibGVtcwoKKiBGaXggYmVoYXZpb3VyIG9mICJydW4iIGNvbW1hbmQ6CiAgLSBwcmludCBlcnJvciBtZXNzYWdlIGl2IHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0CiAgLSB0ZXJtaW5hdGUgcHJvY2Vzc2luZyBvZiBhcmd1bWVudHMgaW4gY2FzZSBvZiBlcnJvcgoKKiBQYXRjaGVzIGJ5IFBldGVyIEZpZ3VsaSwgMTAgTWFyIDIwMDMKICAtIEFkZCBzdXBwb3J0IGZvciBCVFVBUlQgb24gUFhBIHBsYXRmb3JtCiAgLSBBZGQgc3VwcG9ydCBmb3IgV0VQIEVQMjUwIChQWEEpIGJvYXJkCgoqIEZpeCBmbGFzaCBwcm9ibGVtcyBvbiBJTkNBLUlQOyBhZGQgdG9vbCB0byBhbGxvdyBicnVuaW5nIGltYWdlcyAgdG8KICBmbGFzaCB1c2luZyBhIEJESTIwMDAKCiogSW1wbGVtZW50IGZpeCBmb3IgSTJDIEVkZ2UgQ29uZGl0aW9ucyBwcm9ibGVtIGZvciBhbGwgYm9hcmRzIHRoYXQKICB1c2UgdGhlIGJpdC1iYW5naW5nIGRyaXZlciAoY29tbW9uL3NvZnRfaTJjLmMpCgoqIFBhdGNoIGJ5IE1hcnRpbiBXaW5pc3RvZXJmZXIsIDIzIE1hciAyMDAzCiAgLSBBZGQgcG9ydCB0byBNUEM1NTUvNTU2IG1pY3JvY29udHJvbGxlcnMKICAtIEFkZCBzdXBwb3J0IGZvciBjbWkgY3VzdG9tZXIgYm9hcmQgd2l0aAogICAgSW50ZWwgMjhGMTI4SjNBLCAyOEYzMjBKM0Egb3IgMjhGNjQwSjNBIGZsYXNoLgoKKiBQYXRjaCBieSBSaWNrIEJyb25zb24sIDI4IE1hciAyMDAzOgogIC0gZml4IGNvbW1vbi9jbWRfbmFuZC5jCgoqIFBhdGNoIGJ5IEFydW4gRGhhcmFua2FyLCAyNCBNYXIgMjAwMzoKICAtIGFkZCB0aHJlYWRzIC8gc2NoZWR1bGVyIGV4YW1wbGUgY29kZQoKKiBBZGQgcGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDMxIE1hciAyMDAzOgogIC0gYWRkIGN0cmwtYyBzdXBwb3J0IGZvciBrZXJtaXQgZG93bmxvYWQKICAtIGFsaWduIGJkaW5mbyBvdXRwdXQgb24gQVJNCiAgLSBjc2IyMjYgYm9hcmQ6IGJyaW5nIGluIHN5bmMgd2l0aCBpbm5va29tL21lbXNldHVwLlMKICAtIGNzYjIyNiBib2FyZDogZml4IE1EUkVGUiBoYW5kbGluZwogIC0gbWlzYyBkb2MgZml4ZXMgLyBleHRlbnNpb25zCiAgLSBpbm5va29tIGJvYXJkOiBjbGVhbnVwLCBNRFJFRlIgZml4IGluIG1lbXNldHVwLlMsIGNvbmZpZyB1cGRhdGUKICAtIGFkZCBCT09UX1BST0dSRVNTIHRvIGFybWxpbnV4LmMKCiogQWRkIENQVSBJRCwgdmVyc2lvbiwgYW5kIGNsb2NrIHNwZWVkIGZvciBJTkNBLUlQCgoqIFBhdGNoZXMgYnkgRGF2ZSBFbGxpcywgMTggTWFyIDIwMDMgZm9yIFNYTkk4NTVUIGJvYXJkOgogIC0gZml4IFNSQU0gYW5kIFNEUkFNIG1lbW9yeSBzaXppbmcKICAtIGFkZCBzdGF0dXMgTEVEIHN1cHBvcnQKICAtIGFkZCBNQUMgYWRkcmVzcyBmb3Igc2Vjb25kIChTQ0MxKSBldGhlcm5ldCBwb3J0CgoqIFVwZGF0ZSBkZWZhdWx0IGVudmlyb25tZW50IGZvciBUUU04MjYwIGJvYXJkCgoqIFBhdGNoIGJ5IFJpY2sgQnJvbnNvbiwgMTYgTWFyIDIwMDM6CiAgLSBBZGQgTkFORCBmbGFzaCBzdXBwb3J0IGZvciByZWFkaW5nLCB3cml0aW5nLCBhbmQgZXJhc2luZyBOQU5ECiAgICBmbGFzaCAoY2VydGFpbiBmb3JtcyBvZiB3aGljaCBhcmUgY2FsbGVkIFNtYXJ0TWVkaWEpLgogIC0gQWRkIHN1cHBvcnQgZm9yIEF0bWVsIEFUOTFSTTkyMDBESyBBUk05MjBUIGJhc2VkIGRldmVsb3BtZW50IGtpdC4KCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE5IE1hciAyMDAzOgogIC0gdXNlIGFybS1saW51eC1nY2MgYXMgZGVmYXVsdCBjb21waWxlciBmb3IgQVJNCiAgLSBmaXggaTJjIGZpeHVwIGNvZGUKICAtIGZpeCBtaXNzaW5nIGJhdWRyYXRlIHNldHRpbmcKICAtIGFkZGVkICRsb2FkYWRkciAvIENGR19MT0FEX0FERFIgc3VwcG9ydCB0byBsb2FkYgogIC0gbW92ZWQgImlnbm9yaW5nIHRyYWlsaW5nIGNoYXJhY3RlcnMiIF9iZWZvcmVfIHUtYm9vdCB3YW50cyB0bwogICAgcHJpbnQgb3V0IGRpYWdub3N0aWNzIG1lc3NhZ2VzOyByZW1vdmVzIGJvZ3VzIGNoYXJhY3RlcnMgYXQgdGhlCiAgICBlbmQgb2YgdHJhbnNtaXNzaW9uCgoqIFBhdGNoIGJ5IEpvaG4gWmhhbiwgMTggTWFyIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFNpbm9WZWUgTWljcm9zeXN0ZW1zIFNDOHh4IGJvYXJkcwoKKiBQYXRjaCBieSBSb2xmIE9mZmVybWFubnMsIDIxIE1hciAyMDAzOgogIHBvcnRlZCB0aGUgZG5wMTExMCByZWxhdGVkIGNoYW5nZXMgZnJvbSB0aGUgY3VycmVudCBhcm1ib290IGN2cyB0bwogIGN1cnJlbnQgdS1ib290IGN2cy4gc21jOTExMTEgZG9lcyBub3Qgd29yay4gcHJvYmxlbSBtYXJrZWQgaW4KICBzbWM5MTExMS5jLCBncmVwIGZvciAiRklYTUUiLgoKKiBQYXRjaCBieSBCcmlhbiBBdWxkLCAyNSBNYXIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgU1RNIGZsYXNoIGNoaXBzIG9uIGVib255IGJvYXJkCgoqIEFkZCBQQ0kgc3VwcG9ydCBmb3IgTVBDODI1MCBCb2FyZHMgKFBNODI1IG1vZHVsZSkKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNSBNYXIgMjAwMzoKICAtIFBDSTQwNSB1cGRhdGUuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgTWFyIDIwMDM6CiAgLSBDUENJNDA1MiB1cGRhdGUgKHN1cHBvcnQgZm9yIHJldmlzaW9uIDMpLgogIC0gU2V0IGVkZ2UgY29uZGl0aW9uaW5nIGNpcmN1aXRyeSBvbiBQUEM0MDVHUHIgZm9yIGNvbXBhdGliaWxpdHkKICAgIHRvIGV4aXN0aW5nIFBQQzQwNUdQIGRlc2lnbnMuCiAgLSBDbGlwIHVkaXYgdG8gNSBiaXRzIG9uIFBQQzQwNSAoc2VyaWFsLmMpLgoKKiBFeHRlbmQgSU5DQUlQIGJvYXJkIHN1cHBvcnQ6CiAgLSBhZGQgYXV0b21hdGljIFJBTSBzaXplIGRldGVjdGlvbgogIC0gYWRkICJiZGluZm8iIGNvbW1hbmQKICAtIHBhc3MgZmxhc2ggYWRkcmVzcyBhbmQgc2l6ZSB0byBMaW51eCBrZXJuZWwKICAtIHN3aXRjaCB0byAxNTAgTUh6IGNsb2NrCgoqIEF2b2lkIGZsaWNrZXIgb24gdGhlIFRSQUIncyBWRkQgYnkgc3luY2hyb25pemluZyB0aGUgZW5hYmxlIHdpdGgKICB0aGUgSFNZTkMvVlNZTkMuIFJlcXVpcmVzIG5ldyBDUExEIGNvZGUgKFZlcnNpb24gMTAxIGZvciBSZXYuIDEwMAogIGJvYXJkcywgdmVyc2lvbiAxNTMgZm9yIFJldi4gMjAwIGJvYXJkcykuCgoqIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAxMiBNYXIgMjAwMzoKICBGaXggcmVsb2NhdGlvbiBwcm9ibGVtIG9mIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgc3RyaW5nIHBvaW50ZXJzCiAgaW4gY29tbW9uL2NtZF9wY2kuYwoKKiBQYXRjaCBieSBLYWktVXdlIEJs9m0sIDEyIE1hciAyMDAzOgogIENsZWFudXAgJiBidWcgZml4ZXMgZm9yIEpGRlMyIGNvZGU6CiAgLSB0aGUgbWVtb3J5IG1hbmdlbWVudCB3YXMgYnJva2VuLiBJdCBjYXVzZWQgaGF2b2Mgb24gbWFsbG9jIGJ5CiAgICB3cml0aW5nIGJleW9uZCB0aGUgYmxvY2sgYm91bmRhcmllcy4KICAtIHRoZSBsZW5ndGggY2FsY3VsYXRpb24gZm9yIGZpbGVzIHdhcyB3cm9uZywgc29tZXRpbWVzIHJlc3VsdGluZwogICAgaW4gc2hvcnQgZmlsZSByZWFkcy4KICAtIGRhdGEgY29weWluZyBub3cgb3B0aW9uYWxseSB0YWtlcyBmcmFnbWVudCB2ZXJzaW9uIG51bWJlcnMgaW50bwogICAgYWNjb3VudCwgdG8gYXZvaWQgY29weWluZyBmcm9tIG9sZGVyIGRhdGEuCiAgU2VlIGRvYy9SRUFETUUuSkZGUzIgZm9yIGRldGFpbHMuCgoqIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMTIgTWFyIDIwMDM6CiAgLSAxNi8zMiBNQiBhbmQgNTAvODAgTUh6IHN1cHBvcnQgd2l0aCBhdXRvLWRldGVjdGlvbiBmb3IgSVA4NjAKICAtIEVUSDA1IGFuZCBCRURCVUcgc3VwcG9ydCBmb3IgQ1U4MjQKICAtIGFkZGVkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIENQQzQ1CiAgLSBuZXcgQk9PVFJPTS9GTEFTSDAgYW5kIERPQyBiYXNlIGZvciBQTTgyNgoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEyIE1hciAyMDAzOgogIEZpeCB0aGUgY2hwYXJ0IGNvbW1hbmQgb24gaW5ub2tvbSBib2FyZAoKKiBOYW1lIGNsZWFudXA6CiAgbXYgaW5jbHVkZS9hc20taTM4Ni9wcGNib290LWkzODYuaCBpbmNsdWRlL2FzbS1pMzg2L3UtYm9vdC1pMzg2LmgKICBzL1BQQ0Jvb3QvVS1Cb290LyBpbiBzb21lIGZpbGVzCiAgcy9wSW1hZ2UvdUltYWdlLyAgaW4gc29tZSBmaWxlcwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxNSBKYW4gMjAwMzoKICBGaXggJycgY29tbWFuZCBsaW5lIHF1b3RpbmcKCiogUGF0Y2ggYnkgVGhlIExFT1ggdGVhbSwgMTkgSmFuIDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEVMUFQ4NjAgYm9hcmQKICAtIGFkZCBzdXBwb3J0IGZvciBEYWxsYXMgZHMxNjR4IFJUQwoKKiBQYXRjaGVzIGJ5IERhdmlkIE38bGxlciwgMzEgSmFuIDIwMDM6CiAgLSBtaW5pbWFsIHNldHVwIGZvciBDYXJkQnVzIGJyaWRnZXMKICAtIGFkZCBFRVBST00gcmVhZC93cml0ZSBzdXBwb3J0IGluIHRoZSBDUzg5MDAgZHJpdmVyCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIGJ1aWx0aW4gSTJDIGNvbnRyb2xsZXIgaW4gdGhlIFNhbXN1bmcgczNjMjR4MCBjaGlwcwogIC0gYWRkIHN1cHBvcnQgZm9yIE1QTCdzIFZDTUE5IChTYW1zdW5nIHMzYzI0MTAgYmFzZWQpIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA0IEZlYiAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBSVEMgRFMxMzA3CgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCA1IEZlYiAyMDAzOgogIGZpeCBQTFBSQ1IvU0NDUiBpbml0IHNlcXVlbmNlIG9uIDh4eCB0byBhbGxvdyBmb3IKICBjaGFuZ2VzIG9mIEVCREYgYnkgc29mdHdhcmUKCiogUGF0Y2ggYnkgVmxhZGltaXIgR3VyZXZpY2gsIDA3IEZlYiAyMDAzOgogICJBUEktY29tcGF0aWJpbGl0eSBwYXRjaCIgZm9yIDR4eCBJMkMgZHJpdmVyCgoqIFRSQUIgZml4ZXMgLyBleHRlbnNpb25zOgogIC0gUmVzdG9yZSBWRkQgYnJpZ2h0bmVzcyBhcyBzYXZlZCBpbiBlbnZpcm9ubWVudAogIC0gYWRkIHN1cHBvcnQgZm9yIEZ1aml0c3UgZmxhc2hlcwogIC0gbWFrZSBzdXJlIGJvdGggYnV6emVycyBhcmUgdHVybmVkIG9mZiAoZHJpdmUgbG93IGxldmVsKQoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMDYgTWFyIDIwMDM6CiAgLSBmaXggYnVnIGluIEJPT1RQIGNvZGUgKG11c3QgdXNlIE5ldENvcHlJUCkKICAtIHVwZGF0ZSBvZiBDU0IyMjYgcG9ydAogIC0gY2xlYXIgQlNTIHNlZ21lbnQgb24gWFNjYWxlCiAgLSBhZGRlZCBzdXBwb3J0IGZvciBpMmNfaW5pdF9ib2FyZCgpIGZ1bmN0aW9uCiAgLSB1cGRhdGUgdG8gdGhlIElubm9rb20gcGxhdHRmb3JtCgoqIEV4dGVuZCBzdXBwb3J0IGZvciByZWR1bmRhbmQgZW52aXJvbm1lbnRzIGZvciBjb25maWd1cmF0aW9ucyB3aGVyZQogIGVudmlyb25tZW50IHNpemUgPCBzZWN0b3Igc2l6ZQoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTMgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIE1vdG9yb2xhIE1QQzgyNjZBRFMgYm9hcmQKCiogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDE5IEZlYiAyMDAzOgogIHBhdGNoZXMgZm9yIHRoZSBJbnRlbCBsdWJib2NrIGJvYXJkOgogIG1lbXNldHVwLlMgLSBnZW5lcmFsIGNsZWFudXAgKGJhc2VkIG9uIFJvYmVydCdzIGNzYjIyNiBjb2RlKQogIGZsYXNoLmMgLSBvdmVyaGF1bCwgYWN0dWFsbHkgd29ya3Mgbm93CiAgbHViYm9jay5jIC0gZml4IGluaXQgZnVuY3MgdG8gcmV0dXJuIHByb3BlciB2YWx1ZQoKKiBQYXRjaCBieSBLZW5uZXRoIEpvaGFuc3NvbiwgMjYgRmViIDIwMDM6CiAgLSBGaXhlZCBvZmYgYnkgb25lIGluIFJGVEEgY2FsY3VsYXRpb24uCiAgLSBObyBuZWVkIHRvIGFib3J0IHdoZW4gTERGIGlzIGxvd2VyIHRoYW4gd2UgY2FuIHByb2dyYW0gaXQncyBvbmx5CiAgICBtaW5pbXVtIHRpbWluZyBzbyBjbGFtcCBpdCB0byB3aGF0IHdlIGNhbiBkby4KICAtIFRha2VzIGZ1bmN0aW9uIHBvaW50ZXIgdG8gZnVuY3Rpb24gZm9yIHJlYWRpbmcgdGhlIHNwZF9udnJhbS4gVXNlZnVsbAogICAgZm9yIGZha2luZyBkYXRhIG9yIGhhcmRjb2RlIGEgbW9kdWxlIHdpdGhvdXQgdGhlIG52cmFtLgogIC0gZml4IG90aGVyIHVzZXIgZm9yIGFib3ZlIGNoYW5nZQogIC0gZml4IHNvbWUgY29tbWVudHMuCgoqIFBhdGNoZXMgYnkgQnJpYW4gV2FpdGUsIDI2IEZlYiAyMDAzOgogIC0gZml4IHBvcnQgZm9yIGV2YjY0MjYwIGJvYXJkCiAgLSBmaXggUENJIGZvciBldmI2NDI2MCBib2FyZAogIC0gZml4IFBDSSBzY2FuCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAxIE1hciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBFTUsgVE9QODYwIE1vZHVsZQoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwMiBNYXIgMjAwMzoKICBBZGQgU1BEIEVFUFJPTSBzdXBwb3J0IGZvciBNUEM4MjYwQURTIGJvYXJkCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMjEgSmFuIDIwMDM6CiAgLSBBZGQgc3VwcG9ydCBmb3IgSW5ub2tvbSBib2FyZAogIC0gRG9uJ3QgY29tcGxhaW4gaWYgImluc3RhbGwiIGZhaWxzCiAgLSBSRUFETUUgY2xlYW51cCAocmVtb3ZlIGR1cGxpY2F0ZWQgbGluZXMpCiAgLSBVcGRhdGUgUFhBIGhlYWRlciBmaWxlcwoKKiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZXhpc3RpbmcgUE9TVCBjb2RlIChkb2MvUkVBRE1FLlBPU1QpCgoqIFBhdGNoIGJ5IExhdWRuZXkgUmVuLCAxNSBKYW4gMjAwMzoKICBGaXggaGFuZGxpbmcgb2YgcmVkdW5kYW5kIGVudmlyb25tZW50IGluICJ0b29scy9lbnZjcmMuYyIKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjggRmViIDIwMDM6CiAgQWRkIGJlZGJ1ZyBzdXBwb3J0IGZvciA4MjR4IHN5c3RlbXMKCiogQWRkIHN1cHBvcnQgZm9yIDE2IE1CIGZsYXNoIGNvbmZpZ3VyYXRpb24gb2YgVFJBQiBib2FyZAoKKiBQYXRjaCBieSBFcndpbiBSb2wsIDI3IEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBSVEVNUwoKKiBBZGQgaW1hZ2UgaW5mb3JtYXRpb24gdG8gUkVBRE1FCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTggRmViIDIwMDM6CiAgQ1BDSUlTRVI0IGNvbmZpZ3VyYXRpb24gdXBkYXRlZC4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNyBGZWIgMjAwMzoKICBGaXhlZCBidWcgaW4gZXh0LiBzZXJpYWwgY2xvY2sgc2V0dXAgb24gUFBDNDA1IChzaW5jZSBQUEM0NDAgcG9ydCkuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgRmViIDIwMDM6CiAgQWRkICJwY2lkZWxheSIgZW52aXJvbm1lbnQgdmFyaWFibGUgKGluIG1zLCBlbmFibGVkIHZpYQogIENPTkZJR19QQ0lfQk9PVERFTEFZKS4KICBQQ0kgc3BlYyAyLjIgZGVmaW5lcywgdGhhdCBhIHBjaSB0YXJnZXQgaGFzIDJeMjUgcGNpIGNsb2NrcyBhZnRlcgogIFJTVCMgdG8gcmVzcG9uZCB0byBjb25maWd1cmF0aW9uIGN5Y2xlcyAoMzNNSHogLT4gMXMpLgoKKiBGaXggZHVhbCBQQ01DSUEgc2xvdCBzdXBwb3J0ICh3aGVuIHJ1bm5pbmcgd2l0aCBqdXN0IG9uZQogIHNsb3QgcG9wdWxhdGVkKQoKKiBBZGQgVkZEIHR5cGUgZGV0ZWN0aW9uIHRvIHRyYWIgYm9hcmQKCiogZXh0ZW5kIGRyaXZlcnMvY3M4OTAwLmMgZHJpdmVyIHRvIHN5bmNocm9uaXplICBldGhhZGRyICBlbnZpcm9ubWVudAogIHZhcmlhYmxlIHdpdGggdmFsdWUgaW4gdGhlIEVFUFJPTQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciA0TUIgYW5kIDEyOE1CIG9uYm9hcmQgU0RSQU0gKGNwdS9wcGM0eHgvc2RyYW0uYykKCiogQWRkIHN1cHBvcnQgZm9yIE1JUFMzMiA0S2MgQ1BVcwoKKiBBZGQgc3VwcG9ydCBmb3IgSU5DQS1JUCBCb2FyZAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjI6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIGR1YWwgZXRoZXJuZXQgc3VwcG9ydCBvbiBQTTgyNgoKKiBBZGQgc3VwcG9ydCBmb3IgTFhUOTcxIFBIWSBvbiBQTTgyNgoKKiBQYXRjaCBieSBUb3JkIEFuZGVyc3NvbiwgMTYgSmFuIDIwMDM6CiAgRml4IGZsYXNoIHNlY3RvciBjb3VudCBmb3IgVFFNOHh4TAoKKiBGaXggSTJDIEVFUFJPTSBwcm9ibGVtIG9uIElDVTg2MiBib2FyZCAod291bGQgb25seSB3cml0ZSB0aGUgZmlyc3QKICAxNiBieXRlcyBvdXQgb2YgZWFjaCAzMiBieXRlIGJsb2NrKQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIHN1cHBvcnQgZm9yIFYzNyBib2FyZAogIChwYXRjaCBieSBK824gQmVuZWRpa3Rzc29uLCAxMSBEZWMgMjAwMikKCiogVXBkYXRlIGJhdWRyYXRlIGluIGJkX2luZm8gd2hlbiBpdCBnZXRzIGNoYW5nZWQKCiogQWRkIHdhdGNoZG9nIHRyaWdnZXIgcG9pbnRzIHdoaWxlIHdhaXRpbmcgZm9yIHNlcmlhbCBwb3J0CiAgKHNvIGZhciBvbmx5IDh4eCAtLSBuZWVkZWQgb24gTFdNT04gd2l0aCAxMDBtcyB3YXRjaGRvZykKCiogSW1wcm92ZSBjb21tYW5kIGxpbmUgdG9vbCB0byBhY2Nlc3MgdGhlIFUtQm9vdCdzIGVudmlyb25tZW50CiAgKGZpZ3VyYXRpb24gb2YgdGhlIHV0aWxpdHksIHVzaW5nIGEgY29uZmlnIGZpbGUpCgoqIEFkZCBzaW5nbGUgcXVvdGUgc3VwcG9ydCBmb3IgKG9sZCkgY29tbWFuZCBsaW5lIHBhcnNlcgoKKiBTd2l0Y2ggTFdNT04gYm9hcmQgZGVmYXVsdCBjb25maWcgZnJvbSBGUkFNIHRvIEVFUFJPTTsKICBpbiBQT1NULCBFRVBST00gc2hvd3MgdXAgb24gOCBhZGRyZXNzZXMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMi4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFVzZSAxLWJ5dGUtcmVhZCBpbnN0ZWFkIG9mIC13cml0ZSBmb3IgaXByb2JlKCkgZnVuY3Rpb24KICBBZGQgaTJjIGNvbW1hbmRzIHRvIFBNODI2IGNvbmZpZwoKKiBleHRlbmQgSTJDIFBPU1QgY29kZTogY2hlY2sgZm9yIGxpc3Qgb24ga25vd24gYWRkcmVzc2VzCgoqIEltcHJvdmUgbG9nIGJ1ZmZlciBjb2RlOyB1c2UgImxvZ2xldmVsIiB0byBkZWNpZGUgd2hpY2ggbWVzc2FnZXMKICB0byBsb2cgb24gdGhlIGNvbnNvbGUsIHRvbyAobGlrZSBpbiBMaW51eCk7IGdldCByaWQgb2YgImxvZ3N0YXJ0IgoKKiBBZGQgY29tbWFuZCBsaW5lIHRvb2wgdG8gYWNjZXNzIHRoZSBVLUJvb3QncyBlbnZpcm9ubWVudAogIChib2FyZC1zcGVjaWZpYyBmb3IgVFJBQiBub3csIHRvIGJlIGZpeGVkIGxhdGVyKQoKKiBQYXRjaCBieSBIYW5zLUpvZXJnIEZyaWVkZW4sIDA2IERlYyAyMDAyCiAgRml4IG1pc2MgcHJvYmxlbXMgd2l0aCBBbWlnYU9uZSBzdXBwb3J0CgoqIFBhdGNoIGJ5IENocmlzIEhhbGxpbmFuLCAzIERlYyAyMDAyOgogIG1pbm9yIGNsZWFudXAgdG8gdGhlIE1QQzgyNDUgRVBJQyBkcml2ZXIKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDI4IE5vdiAyMDAyCiAgQWRkIHN1cHBvcnQgZm9yIGV4dGVybmFsIChTSVUpIGludGVycnVwdHMgb24gTVBDOHh4CgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQgLCAyOCBOb3YgMjAwMgogIEZpeCBuZXN0ZWQgc3lzY2FsbHMgYnVnIGluIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMjcgTm92IDIwMDI6CiAgZml4IG91dHB1dCBvZiAicGNpaW5mbyIgY29tbWFuZCBmb3IgQ2FyZEJ1cyBicmlkZ2UgZGV2aWNlcy4KCiogRml4IGJ1ZyBpbiBUUU04MjYwIGJvYXJkIGRldGVjdGlvbiAtIGJvYXJkcyBnb3Qgc3R1Y2sgd2hlbiBib2FyZCBJRAogIHdhcyBub3QgcmVhZGFibGUKCiogQWRkIExFRCBpbmRpY2F0aW9uIGZvciBJREUgYWN0aXZpdHkgb24gS1VQNEsgYm9hcmQKCiogRml4IHN0YXJ0dXAgcHJvYmxlbXMgd2l0aCBWRkQgZGlzcGxheSBvbiBUUkFCCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDIwIE5vdiAyMDAyCiAgQWRkIGRyaXZlciBmb3IgRXBzb24gU0VEMTM4MDYgZ3JhcGhpYyBjb250cm9sbGVyLgogIEFkZCBzdXBwb3J0IGZvciBCTVAgbG9nb3MgaW4gY2ZiX2NvbnNvbGUgZHJpdmVyLgoKKiBBZGRlZCBzdXBwb3J0IGZvciBib3RoIFBDTUNJQSBzbG90cyAoYXQgdGhlIHNhbWUgdGltZSEpIG9uIE1QQzh4eAoKKiBQYXRjaCBieSBSb2QgQm95Y2UsIDIxIE5vdiAyMDAyOgogIGZpeCBQQ01DSUEgb24gTUJYOHh4IGJvYXJkCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQgLCAyMSBOb3YgMjAwMgogIEFkZCBDRkdfQ1BNX1BPU1RfV09SRF9BRERSIHRvIG1ha2UgdGhlIG9mZnNldCBvZiB0aGUKICBib290bW9kZSB3b3JkIGluIERQUkFNIGNvbmZpZ3VyYWJsZQoKKiBQYXRjaCBieSBEYW5pZWwgRW5nc3Ry9m0sIDE4IE5vdiAyMDAyOgogIEZpeGVzIGZvciB4ODYgcG9ydCAobW9zdGx5IHN0cmluZ3MgaXNzdWVzKQoKKiBQYXRjaCBieSBLZW4gQ2hvdSwgMTggTm92IDIwMDI6CiAgRml4IGZvciBuYXRzZW1pIE5JQyBjYXJkcyAoRFA4MzgxNSkKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTkgTm92IDIwMDI6CiAgZml4IGEgYnVnIGZvciB0aGUgTUlJIGNvbmZpZ3VyYXRpb24sIGFuZCBzb21lIHdhcm5pbmdzCgoqIFBhdGNoIGJ5IFRob21hcyBGcmllZGVuLCAxMyBOb3YgMjAwMjoKICBBZGQgY29kZSBmb3IgQW1pZ2FPbmUgYm9hcmQKICAocHJlbGltaW5hcnkgbWVyZ2UgdG8gVS1Cb290LCBzdGlsbCBXSVApCgoqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxMiBOb3YgMjAwMjoKICAtIEFkZGluZyBVUkwgZm9yIElFRUUgT1VJIGxvb2t1cAogIC0gTWFraW5nIHRoZSBhdXRvYm9vdCAjZGVmaW5lcyBkZXBlbmRlbnQgb24gQ09ORklHX0FVVE9CT09UX0tFWUVECiAgICBiZWluZyBkZWZpbmVkLgogIC0gSW4gdGhlIENPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MgI2RlZmluZSwgdGhlIHJvb3Qtb24taW5pdHJkIGFuZAogICAgcm9vdC1vbi1uZnMgbWFjcm9zIGFyZSBkZXNpZ25lZCB0byBzd2l0Y2ggaG93IHRoZSBkZWZhdWx0IGJvb3QKICAgIG1ldGhvZCBnZXRzIGRlZmluZWQuCgoqIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMTMgTm92IDIwMDI6CiAgQWRkIHN1cHBvcnQgZm9yIGkzODYgYXJjaGl0ZWN0dXJlIGFuZCBBTUQgU0M1MjAgYm9hcmQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTIgTm92IDIwMDI6CiAgQWRkIHN1cHBvcnQgZm9yIERPUyBmaWxlc3lzdGVtIGFuZCBib290aW5nIGZyb20gRE9TIGZsb3BweSBkaXNrCgoqIFBhdGNoIGJ5IEppbSBTYW5kb3osIDA3IE5vdiAyMDAyOgogIEluY3JlYXNlIG51bWJlciBvZiBuZXR3b3JrIFJYIGJ1ZmZlcnMgKFBLVEJVRlNSWCBpbgogICJpbmNsdWRlL25ldC5oIikgZm9yIEVFUFJPMTAwIGJhc2VkIGJvYXJkcyAoZXNwZWNpYWxseSBTUDgyNDApCiAgd2hpY2ggc2hvd2VkICJSZWNlaXZlciBpcyBub3QgcmVhZHkiIGVycm9ycyB3aGVuIFUtQm9vdCB3YXMKICBwcm9jZXNzaW5nIHRoZSByZWNlaXZlIGJ1ZmZlcnMgc2xvd2VyIHRoYW4gdGhlIG5ldHdvcmsgY29udHJvbGxlcgogIHdhcyBmaWxsaW5nIHRoZW0uCgoqIFBhdGNoIGJ5IEFuZHJlYXMgT2JlcnJpdHRlciwgMDkgTm92IDIwMDI6CiAgQ2hhbmdlIGJlaGF2aW91ciBvZiBOZXRMb29wKCk6IHJldHVybiAtMSBmb3IgZXJyb3JzLCBmaWxlc2l6ZQogIG90aGVyd2lzZTsgcmV0dXJuIGNvZGUgMCBpcyB2YWxpZCBhbiBtZWFucyBubyBmaWxlIGxvYWRlZCAtIGluIHRoaXMKICBjYXNlIHRoZSBlbnZpcm9ubWVudCBzdGlsbCBnZXRzIHVwZGF0ZWQhCgoqIFBhdGNoZXMgYnkgSm9uIERpZWtlbWEsIDkgTm92IDIwMDI6CiAgLSBpbXByb3ZlIEFEQy9EQUMgY2xvY2tpbmcgb24gdGhlIFNBQ1NuZyBib2FyZCB0byBhbGlnbgogICAgdGhlIGZhaWxpbmcgZWRnZXMgb2YgTFJDTEsgYW5kIFNDTEsKICAtIHNiYzgyNjAgY29uZmlndXJhdGlvbiB0d2Vha3MKICAtIGFkZCBzdGF0dXMgTEVEIHN1cHBvcnQgZm9yIDgyeHggc3lzdGVtcwogIC0gd2lyZSBzc3BpL3NzcG8gY29tbWFuZHMgaW50byBjb21tYW5kIGhhbmRsZXI7IGltcHJvdmVkIGVycm9yCiAgICBoYW5kbGVyaW5nCiAgLSBhZGQgdGltZXN0YW1wIHN1cHBvcnQgYW5kIGFsdGVybmF0ZSBtZW1vcnkgdGVzdCB0byB0aGUKICAgIFNBQ1NuZyBjb25maWd1cmF0aW9uCgoqIFBhdGNoIGJ5IFZpbmNlIEh1c292c2t5LCA3IE5vdiAyMDAyOgogIEFkZCAiLW4iIHRvIGxpbmtlciBvcHRpb25zIHRvIGdldCByaWQgb2YgIk5vdCBlbm91Z2ggcm9vbSBmb3IKICBwcm9ncmFtIGhlYWRlcnMiIHByb2JsZW0KCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAwNSBOb3YgMjAwMgogIFJlbmFtZSBDT05GSUdfUExMX0lOUFVUX0ZSRVEgdG8gQ09ORklHX1NZU19DTEtfRlJFUQogIHNvIHdlIGNhbiB1c2UgYW4gYWxyZWFkeSBleGlzdGluZyBuYW1lCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDA1IE5vdiAyMDAyCiAgSGFyZHdhcmUgcmVsYXRpZWQgaW1wcm92bWVudHMgaW4gRkRDIGJvb3QgY29kZQoKKiBQYXRjaCBieSBIb2xnZXIgU2NodXJpZywgNSBOb3YgMjAwMjoKICBNYWtlIHRoZSBQWEEgcmVhbGx5IGNoYW5nZSBpdCdzIGZyZXF1ZW5jeQoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwNSBOb3YgMjAwMgogIEFkZCBzdXBwb3J0IGZvciBzbGF2ZSBzZXJpYWwgU3BhcnRhbiAyIEZQR0FzCgoqIEZpeCB1bmluaXRpYWxpemVkIG1lbW9yeSAoTUFDICBhZGRyZXNzKSAgaW4gIDh4eCAgU0NDL0ZFQyAgZXRoZXJuZXQKICBkcml2ZXJzCgoqIEFkZCBzdXBwb3J0IGZvciBsb2cgYnVmZmVyIHdoaWNoIGNhbiBiZSBwYXNzZWQgdG8gTGludXgga2VybmVsJ3MKICBzeXNsb2cgbWVjaGFuaXNtOyB1c2VkIGVzcGVjaWFsbHkgZm9yIFBPU1QgcmVzdWx0cy4KCiogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMzEgT2N0IDIwMDI6CiAgQWRkIGluaXRpYWwgc3VwcG9ydCBmb3Iga3VwNGsgYm9hcmQKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAwNCBOb3YgMjAwMjoKICAtIHVzZSB3YXRjaGRvZyB0byByZXNldCBQWEEyNTAgc3lzdGVtcwogIC0gYWRkZWQgcHJvZ3Jlc3MgY2FsbGJhY2tzIHRvIChzb21lIG9mIHRoZSkgQVJNIGNvZGUKICAtIHVwZGF0ZSBmb3IgQ29nZW50IENTQjIyNiBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgRlBTODYwIGJvYXJkCgoqIFBhdGNoIGJ5IEd1aWxsYXVtZSBBbGV4YW5kcmUsLCAwNCBOb3YgMjAwMjoKICBJbXByb3ZlIFBDSSBhY2Nlc3Mgb24gMzItYml0cyBDb21wYWN0IFBDSSBidXMKCiogRml4IG1kZWxheSgpIG9uIFRSQUIgLSB0aGlzIHdhcyBzdGlsbCB0aGUgZGVidWdnaW5nIHZlcnNpb24gd2l0aAogIHNlY29uZHMgaW5zdGVhZCBvZiBtcy4KCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxIE5vdiAyMDAyOgogIFhTY2FsZSByZWxhdGVkIGNsZWFudXAgKGFmZmVjdHMgYWxsIEFSTSBib2FyZHMpCgoqIENsZWFudXAgb2YgbmFtZXMgYW5kIFJFQURNRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KTm90ZXMgZm9yIFUtQm9vdCAwLjEuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBpcyB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mICJEYXMgVS1Cb290IiwgdGhlIFVuaXZlcnNhbCBCb290IExvYWRlci4KCkl0IGlzIGJhc2VkIG9uIHZlcnNpb24gMi4wLjAgKHRoZSAiSGFsbG93ZWVuIFJlbGVhc2UiKSBvZiBQUENCb290LgpGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhpc3Rvcnkgb2YgdGhlIHByb2plY3QgcGxlYXNlIHNlZSB0aGUKUFBDQm9vdCBwcm9qZWN0IHBhZ2UgYXQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9wcGNib290Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cg==