LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgSnVsIDI1IDE5OjQ1OjQ1IDE5OTggIEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoKCSogW2luY2x1ZGUvc2hsb2JqLmhdW21pc2Mvc2hlbGwuY11bbWlzYy9zaGVsbG9yZC5jXVtvbGUvZm9sZGVycy5jXQoJW3NoZWxsMzIuc3BlY10KCUFkZGVkIFNIRklMRU9QU1RSVUNUMzJbQXxXXSBhbmQgY29uc3RhbnRzLCBwcm90b3R5cGVzLgoJSW1wbGVtZW50ZWQgU0hHZXRTcGVjaWFsRm9sZGVyTG9jYXRpb24sIFNIR2V0UGF0aEZyb21JRExpc3QzMltBXS4KCU1hbnkgSVNoZWxsRm9sZGVyLCBwaWRsLCBzaGVsbCAtcmVsYXRlZCBjaGFuZ2VzLgoKCVNIQ2hhbmdlTm90aWZ5UmVnaXN0ZXIsIFNIQ2hhbmdlTm90aWZ5RGVyZWdpc3RlciwKCVNIU2hlbGxGb2xkZXJWaWV3X01lc3NhZ2UsIFNITWFwUElETFRvU3lzdGVtSW1hZ2VMaXN0SW5kZXgsCglTSEFkZFRvUmVjZW50RG9jczMyLCBTSEZpbGVPcGVyYXRpb24sIFNIQ2hhbmdlTm90aWZ5LCAKCVNIQ3JlYXRlU2hlbGxGb2xkZXJWaWV3RXggc3R1YnMuCgpTYXQgSnVsIDI1IDE3OjE2OjI1IDE5OTggIEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoKCSogW2ZpbGVzL3Byb2ZpbGUuY10KCUZpeCByZXR1cm4gdmFsdWUgb2YgUFJPRklMRV9HZXRTZWN0aW9uKCkuCgpGcmkgSnVsIDI0IDIyOjQ1OjE5IDE5OTggIE92ZSBLYWF2ZW4gPG92ZWtAaXNmbGFrLmFyY3RpY25ldC5ubz4KCgkqIFtjb250cm9scy9lZGl0LmNdCglLaWxsZWQgdGhlIG1vZGlmaWVkIGZsYWcgb24gV01fU0VUVEVYVC4gRXVkb3JhIHNob3VsZCBubyBsb25nZXIKCWJvdGhlciBhc2tpbmcgd2hldGhlciB5b3Ugd2FudCB0byBzYXZlIGFuIHVuY2hhbmdlZCBtZXNzYWdlLgoKRnJpIEp1bCAyNCAyMToyMTozNSAxOTk4ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFtjb250cm9scy9tZW51LmNdCglGaXhlZCBidWcgaW4gR2V0TWVudVN0YXRlMzIuCglEb2Vzbid0IGZpeCBGcmVlIEFnZW50IDMyIDooKAoKCSogW2RvY3VtZW50YXRpb24vZGVidWdnaW5nXQoJSGludHMgYWRkZWQuCgoJKiBbZmlsZXMvZG9zX2ZzLmNdIFtpbmNsdWRlL21zZG9zLmhdIFttc2Rvcy9pbnQyMS5jXQoJRW5oYW5jZWQgRE9TIGRldmljZSBzdXBwb3J0LgoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl0gW2lmMTYzMi9idWlsdGluLmNdIFtpZjE2MzIvcmFzYXBpMTYuc3BlY10KCSAgW3JlbGF5MzIvTWFrZWZpbGUuaW5dIFtyZWxheTMyL2J1aWx0aW4zMi5jXSBbcmVsYXkzMi9yYXNhcGkzMi5zcGVjXQoJQWRkZWQgUkFTQVBJMTYvMzIuRExMLgoKCSogW21pc2MvYXNwaS5jXSBbcmVsYXkzMi93bmFzcGkzMi5zcGVjXQoJSW1wbGVtZW50ZWQgR2V0QVNQSTMyU3VwcG9ydEluZm8uCgoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQoJSW1wbGVtZW50ZWQgbW1UYXNrQ3JlYXRlLgoKRnJpIEp1bCAyNCAyMDo1NTozMSAxOTk4ICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoKCSogW2NvbnRyb2xzL3Rvb2xiYXIuY10KCUZpeGVkIHNvbWUgYnVncyBhbmQgYWRkZWQgbmV3IGZlYXR1cmVzLgoKCSogW2NvbnRyb2xzL3Rvb2x0aXBzLmNdW2luY2x1ZGUvdG9vbHRpcHMuaF0KCUFkZGVkIG1vcmUgbWVzc2FnZXMgYW5kIHN0YXJ0ZWQgZGlzcGxheSBjb2RlLgoKCSogW21pc2Mvc2hlbGwuY11bbWlzYy9zaGVsbG9yZC5jXVtyZWxheTMyL3NoZWxsLnNwZWNdCglGaXhlZCBTdHJUb09sZVN0ck4gKFNIRUxMMzJfNzkpIGFuZCBhZGRlZCBPbGVTdHJUb1N0ck4gKFNIRUxMMzJfNzgpLgoJQWRkZWQgc29tZSBuZXcgc3R1YnMuCgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdW21pc2MvaW1hZ2VsaXN0LmNdW2luY2x1ZGUvd2luZG93cy5oXQoJRml4ZWQgR2V0SWNvbkluZm8gYW5kIHJlbW92ZWQgdGhlIEdldEljb25JbmZvIGhhY2sgZnJvbSB0aGUKCWltYWdlIGxpc3QgY29kZS4KCgkqIFtjb250cm9scy9wYWdlci5jXVtpbmNsdWRlL3BhZ2VyLmhdW2NvbnRyb2xzL3RyZWV2aWV3LmNdCgkgIFtpbmNsdWRlL3RyZWV2aWV3LmhdCglBZGRlZCBzb21lIG1lc3NhZ2VzLgoKCSogW21pc2MvdHdlYWsuY11bd2lub3dzL25vbmNsaWVudC5jXVtkb2N1bWVudGF0aW9uL3dpbjk1bG9va10KCVJlbW92ZWQgdW51c2VkIHR3ZWFrIHZhcmlhYmxlcy4KCgkqIFtkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9sc10KCVVwZGF0ZWQuCgpGcmkgSnVsIDI0IDE4OjM2OjMyIDE5OTggIEphbWVzIE1vb2R5IDwwMTMyNjNtQGRyYWdvbi5hY2FkaWF1LmNhPgoKCSogW29iamVjdHMvZm9udC5jXQoJRml4ZWQgYSBidWcgaW4gR2V0VGV4dEZhY2UuCgpGcmkgSnVsIDI0IDE3OjA5OjMzIDE5OTggIE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoKCSogW21pc2MvY29tbWRsZy5jXQoJRml4ZWQgc3RhY2tzbWFzaGluZyBidWcgZHVlIHRvIGludmFsaWQgc3BlY2lmaWVkIGZ1bmN0aW9uCglwb2ludGVycy4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCVNtYWxsIGNoYW5nZSBpbiBjYXNlIGhhbmRsaW5nLi4uIGJlIGFibGUgdG8gY3JlYXRlIGZpbGVzIHdpdGgKCXVwcGVyY2FzZSBpbiB0aGVtIChsaWtlIFByb2dyYW0gRmlsZXMvKS4KCgkqIFtncmFwaGljcy9kZHJhdy5jXQoJWEY4NkRHQSBzdXBwb3J0IG1hZGUgdGhyZWFkc2FmZSwgYWRkZWQgbW9yZSBYbGliIGRlcGVuZGVudCBzdHVmZgoJKGNyZWF0ZSBXaW5kb3cgdXNpbmcgQ3JlYXRlV2luZG93KCksIGRyYXcgaW50byBpdCkuIHhsaWIgc3VwcG9ydAoJaXMgbm90IHNhdGlzZnlpbmcuCgoJKiBbc2NoZWR1bGVyL2NyaXRzZWN0aW9uLmNdCglEb24ndCByZWN1cnNlIG9uIEhlYXBMb2NrIHdpdGggc2VtYXBob3JlIGlkIDAuCgoJKiBbd2luMzIvdXNlcjMyLmNdW3dpbmRvd3MvbWVzc2FnZS5jXVt3aW5kb3dzL2V2ZW50LmNdCglNb3ZlZCB3aW4zMiAqTWVzc2FnZSBmdW5jdGlvbnMgd2hlcmUgdGhleSBiZWxvbmcuCglSZW1vdmVkIHNvbWUgcG90ZW50aWFsIHJhY2VzIGJldHdlZW4gWFBlbmRpbmcgYW5kIFhOZXh0RXZlbnQgYnkKCWEgYml0IG1vcmUgbG9ja2luZy4KCkZyaSBKdWwgMjQgMTM6NTg6MTkgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdIFtsb2FkZXIvbmUvc2VnbWVudC5jXQoJVXNlIGJvZ3VzIHBvaW50ZXIgdmFsdWUgaW5zdGVhZCBvZiBOVUxMIGZvciB1bnJlc29sdmVkIGV4dGVybmFscy4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCUNsZWFyIHNhdmVkX2ZzIG9uIHNlbGVjdG9yIGZyZWUuCgoJKiBbbXNkb3MvY2Ryb20uY10gW2NvbmZpZ3VyZS5pbl0KCUFkZGVkIGNoZWNrIGZvciBsaW51eC91Y2Ryb20uaC4KCgkqIFtzY2hlZHVsZXIvY2xpZW50LmNdIFtzZXJ2ZXIvc29ja2V0LmNdCglGaXggZm9yIG1pc3Npbmcgc3RydWN0IGNtc2doZHIuCglBdHRlbXB0IHRvIHN1cHBvcnQgbXNnX2FjY3JpZ2h0cyBmZCBwYXNzaW5nIChjb21wbGV0ZWx5IHVudGVzdGVkKS4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglEbyBub3QgZ3JhYiB0aGUgcG9pbnRlciBpbiBTZXRDYXB0dXJlIChXaW4zMiBiZWhhdmlvcikuCgpUdWUgSnVsIDIxIDIyOjI4OjEzIDE5OTggIEphbWVzIEp1cmFuICA8anJqMTIwQHBzdS5lZHU+CgoJKiBbTWFrZS5ydWxlcy5pbl0KCUNoYW5nZWQgJChNS0RJUikgbWFjcm8gdG8gdXNlIC1wIG9wdGlvbiAobWFrZSBwYXJlbnQgZGlyZWN0b3JpZXMKCWlmIHRoZXkgZG9uJ3QgYWxyZWFkeSBleGlzdC4gIFRoaXMgZml4ZXMgYW4gZXJyb3IgaW4gJ21ha2UgaW5zdGFsbCcKCWlmIC91c3IvbG9jYWwvaW5jbHVkZSBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCgpUdWUgSnVsIDIxIDEzOjM3OjA0IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CgoJKiBbaW5jbHVkZS9oZWFwLmhdCglSZXBsYWNlZCBtYWNybyBTRUdQVFJfR0VUIGJ5IGlubGluZSBmdW5jdGlvbiB0byBhdm9pZCAqbG90cyoKCW9mIHdyb25nIHVzZSBvZiB0aGlzIG1hY3JvLgoKCSogW3JlbGF5MzIvY29tZGxnMzIuc3BlY10KCUNvcnJlY3RlZCBHZXRTYXZlRmlsZU5hbWVXIGVudHJ5LgoKCSogW3JlbGF5MzIvYWR2YXBpMzIuc3BlY10gW3dpbjMyL2FkdmFwaS5jXQoJICBbcmVsYXkzMi9vbGUzMi5zcGVjXSBbIG9sZS9tb25pa2VyLmNdCglBZGRlZCBzdHVicyBmb3IgU2V0RmlsZVNlY3VyaXR5W0FXXSBhbmQgQ3JlYXRlRmlsZU1vbmlrZXIzMgoKCSogW2dyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jXQoJRmluaXNoZWQgaW1wbGVtZW50YXRpb24gb2YgYmV6aWVyIGRyYXdpbmcgY29kZS4KClR1ZSBKdWwgMjEgMTE6MDA6NTEgMTk5OCAgQ2xhdXMgRmlzY2hlciA8Y2Zpc2NoZXJAdGQyY2FkLmludGVsLmNvbT4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJUmVtb3ZlIGxhYmVsIHRyYWlsaW5nIGJsYW5rcyBpbiBHZXRWb2x1bWVJbmZvcm1hdGlvbjMyQS4KCgkqIFtkb2N1bWVudGF0aW9uL2Nkcm9tLWxhYmVsc10KCUFkZGVkIGRvY3VtZW50YXRpb24gb24gaG93IHRvIGZpbmQgb3V0IGEgQ0QtUk9NIGxhYmVsLgoKU3VuIEp1bCAxOSAyMzoxNjo0MSAxOTk4ICBQYXNjYWwgQ3VvcSA8cGN1b3FAZW5zLWx5b24uZnI+CgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBzb21lIERNXyogYW5kIERJU1BfQ0hBTkdFXyogZmxhZ3MuCgoJKiBbcmVsYXkzMi91c2VyMzIuc3BlY10gW3dpbmRvd3MvdXNlci5jXQoJQWRkZWQgc3R1YiBmb3IgQ2hhbmdlRGlzcGxheVNldHRpbmdBLgoKCSogW29sZS9vbGUybmxzLmNdCglpc19wdW5jdHVhdGlvbjogcmV1c2UgaW5mb3JtYXRpb24gZnJvbSBhbm90aGVyIHRhYmxlLgoKU3VuIEp1bCAxOSAyMjowNDo0NiAxOTk4ICBEb3VnbGFzIFJpZGd3YXkgIDxyaWRnd2F5QHdpbmVocS5jb20+CgoJKiBbTWFrZS5ydWxlcy5pbl0KCVVwZGF0ZWQgYXV0b21hdGljIGRvY3VtZW50YXRpb24gcnVsZXMuCgoJKiBbZ3JhcGhpY3MvcGF0aC5jXSBbbWlzYy9hc3BpLmNdIFttaXNjL250ZGxsLmNdIFttaXNjL3dpbnNvY2tfZG5zLmNdCglbb2xlL29sZTJkc3AuY10gW3JlbGF5MzIvdXNlcjMyLnNwZWNdCglDb21tZW50IGZvcm1hdCBmdXR6aW5nIHRvIGtlZXAgYzJtYW4gaGFwcHkuCgoJKiBbZG9jdW1lbnRhdGlvbi9SRUFETUUuZG9jdW1lbnRhdGlvbl0KCVVwZGF0ZWQgZGVzY3JpcHRpb24gb2YgYXV0b21hdGljIGRvY3VtZW50YXRpb24uCgpXZWQgSnVsIDE1IDE5OjEwOjA5IDE5OTggICBBbmRyZXcgTS4gQmlzaG9wIDxhbWJAZ2VkYW5rZW4uZGVtb24uY28udWs+CgoJKiBbZmlsZXMvcHJvZmlsZS5jXQoJQ2FjaGUgdGhlIDEwIG1vc3QgcmVjZW50bHkgdXNlZCAuaW5pIGZpbGVzLgoKVHVlIE1heSAyMCAxOToyMDoyMyAxOTk3ICBQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KCgkqIFttaXNjL2NvbW1kbGcuY10KCU1ha2VzIFByaW50RGxnMzJBKCkgcmV0dXJuIFRSVUUgZXZlbiBpZiBpdCBpcyBhbiBlbXB0eQoJc3R1Yiwgc28gbW9zdCBwcm9ncmFtcyBhcmUgaGFwcHkgYW5kIHJ1biBhbnl3YXkgaW5zdGVhZCBvZgoJYWJvcnRpbmcgYXQgc3RhcnR1cC4KCgkqIFtncmFwaGljcy94MTFkcnYveGZvbnQuY10KCUluY3JlYXNlZCB0aGUgbWF4aW11bSBmb250IGZhbWlsaWVzIGFzIChYMTEpIGZvbnQgYWxpYXNlcwoJZWF0ZWQgdXAgYSBsb3Qgb2YgZmFtaWxpZXMgY2F1c2luZyB3aW5lIHRvIHN0b3AgcmVhZGluZyBmb250cy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEp1bCAxMiAxNjoyMzozNiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtzZXJ2ZXIvKl0gW3NjaGVkdWxlci9jbGllbnQuY10gKG5ldyBmaWxlcykKCSAgW3NjaGVkdWxlci9zeXNkZXBzLmNdIFtzY2hlZHVsZXIvdGhyZWFkLmNdIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXQoJQmVnaW5uaW5ncyBvZiBjbGllbnQvc2VydmVyIGNvbW11bmljYXRpb24gZm9yIGludGVyLXByb2Nlc3MKCXN5bmNocm9uaXNhdGlvbi4KClNhdCBKdWwgMTEgMTk6NDU6NDUgMTk5OCAgVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaW5jbHVkZS9iaXRtYXAuaF0gW29iamVjdHMvYml0bWFwLmNdIFtvYmplY3RzL2RpYi5jXSAKCSAgW29iamVjdHMvb2VtYml0bWFwLmNdCglTcGVlZCB1cCBESUIgc2VjdGlvbiBoYW5kbGluZyBieSB1c2luZyBwcmUtYWxsb2NhdGVkIGNvbG9ybWFwIGFuZCAKCVhJbWFnZS4gTW92ZWQgRElCIHNlY3Rpb24gZGF0YSBvdXQgb2YgZ2VuZXJhbCBCSVRNQVBPQkogc3RydWN0dXJlLgoJQnVnZml4OiBHZXRESUJpdHMzMiB3b3VsZCBvdmVyd3JpdGUgb25lIGJ5dGUgYmV5b25kIGJpdG1hcCBkYXRhLgoKCSogW2lmMTYzMi9zaGVsbC5zcGVjXSBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbd2luMzIva2VybmVsMzIuY10KCU1vcmUgdmVyYm9zZSBlcnJvciBtZXNzYWdlIGlmIFRodW5rQ29ubmVjdCBmYWlscy4KCUltcGxlbWVudGVkIEtFUk5FTF80NzUuCgoJKiBbZmlsZXMvcHJvZmlsZS5jXSBbb2xlL29sZTJubHMuY10KCU1pbm9yIGJ1Z2ZpeGVzLgoKCSogW2lmMTYzMi9idWlsdGluLmNdIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpbmNsdWRlL3Rhc2suaF0KCSAgW2xvYWRlci9uZS9tb2R1bGUuY10gW2xvYWRlci90YXNrLmNdCglJbXBsZW1lbnRlZCBLRVJORUwuVEhIT09LLgoKCSogW2lmMTYzMi93cHJvY3Muc3BlY10gW2luY2x1ZGUvcHJvY2Vzcy5oXSBbbXNkb3MvZHBtaS5jXSBbbXNkb3MvdnhkLmNdCglJbXBsZW1lbnRlZCBXaW4zMnMgVnhEIHNlcnZpY2VzIChXMzJTLjM4NikuCgpTYXQgSnVsIDExIDE3OjUyOjIzIDE5OTggIEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoKCSogW2dyYXBoaWNzL3gxMWRydi94Zm9udC5jXSBbZ3JhcGhpY3MveDExZHJ2L3RleHQuY10gCgkgIFtpbmNsdWRlL3gxMWZvbnQuaF0KCUltcHJvdmUgaGFuZGxpbmcgb2Ygcm90YXRlZCBYMTEgZm9udHMuIE1ldHJpY3MvZXh0ZW50cyBzaG91bGQgbm93IGJlCgljb3JyZWN0LiBFeHRUZXh0T3V0IHNob3VsZCBiZWhhdmUgYmV0dGVyIChzdGlsbCBkb2Vzbid0IGhhbmRsZSBscER4KS4KCgkqIFtncmFwaGljcy9wYWludGluZy5jXQoJRHJhd0ZvY3VzUmVjdDMyOiBEb24ndCBkbyBhbnl0aGluZyBpZiB3aWR0aCBvciBoZWlnaHQgYXJlIHplcm8uCgpTYXQgSnVsIDExIDE1OjIxOjM1IDE5OTggIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW2ZpbGVzL3Byb2ZpbGUuY10gW2luY2x1ZGUvd2luZG93cy5oXQoJVGhlIGxlbmd0aCBhcmd1bWVudHMgb2YgKlByb2ZpbGUqKCkgbmVlZCB0byBiZSB0cmVhdGVkCglhcyBVSU5UeHggaW5zdGVhZCBvZiBJTlR4eC4KCgkqIFtncmFwaGljcy9lbnYuY10gW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10gW2luY2x1ZGUvcHJpbnQuaF0KCSAgW21pc2MvcHJpbnRkcnYuY10KCU1hbnkgcHJpbnRlciBkcml2ZXIgZml4ZXMvY2hhbmdlcyAobWFueSB0aGFua3MgZ28gdG8gSHV3ICEpLgoJTW9zdCBwcmludGVycyBzaG91bGQgd29yayBhZ2FpbiA7KQoKCSogW21lbW9yeS9hdG9tLmNdCglGaXhlZCBBVE9NX0FkZEF0b20gdG8gc3RvcmUgYXRvbXMgZXhhY3RseSBsaWtlIFdpbmRvd3MuCgoJKiBbKi8qXQoJRml4ZWQgbWlzYyBjb21waWxlciB3YXJuaW5ncy4KCkZyaSBKdWwgMTAgMTU6NTg6MzYgMTk5OCAgTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CgoJKiBbZmlsZXMvZHJpdmUuY10KCUZpeGVkIEdldERyaXZlVHlwZTE2IHRvIHJldHVybiBEUklWRV9SRU1PVEUgYWdhaW4uCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdW2xvYWRlci9tb2R1bGUuY10KCUxvb2sgZm9yIG1vZHVsZXMgdGhhdCBoYXZlIHRoZSBzYW1lIG1vZHVsZW5hbWUgb3IgdGhlIHNhbWUKCWZpbGVuYW1lICh0aGV5IHNvbWV0aW1lcyBkaWZmZXIpLgoJRml4ZWQgdXAgZml4dXBfaW1wb3J0cywgcmVtb3ZlZCBvbmUgb2YgdGhlIGxvb3BzLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglBZGRlZCBzb21lIE5VTEwgcHRyIGNoZWNrcy4gTmVlZHMgbW9yZS4KCgkqIFtncmFwaGljcy9kZHJhdy5jXQoJU29tZSBzdHVicyBhZGRlZC4KCgkqIFtpZjE2MzIvc25vb3AuY10KCVVwZGF0ZWQsIG1hZGUgV0lORUxJQiBjb21wYXRpYmxlLgoKRnJpIEp1bCAxMCAwNDozOTo1NiAxOTk4ICBEb3VnbGFzIFJpZGd3YXkgIDxyaWRnd2F5QHdpbmVocS5jb20+CgoJKiBbb2JqZWN0cy9lbmhtZXRhZmlsZS5jXSBbcmVsYXkzMi9nZGkzMi5zcGVjXQoJU21hbGwgdHdlYWtzIGZvciBkb2N1bWVudGF0aW9uIHN5c3RlbS4KClRodSBKdWwgIDkgMjI6MDA6MTggMTk5OCAgRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCgkqIFtjb250cm9scy9jb21tY3RybC5jXVtpbmNsdWRlL2NvbW1jdHJsLmhdW3JlbGF5MzIvY29tY3RsMzIuc3BlY10KCUZpeGVkIEdldEVmZmVjdGl2ZUNsaWVudFJlY3QsIENyZWF0ZVRvb2xiYXJFeCBhbmQgQ3JlYXRlTWFwcGVkQml0bWFwLgoJQWRkZWQgc3R1YiBmb3IgU2hvd0hpZGVNZW51Q3RsLiBBZGRlZCBzb21lIGRvY3VtZW50YXRpb24uCgoJKiBbZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHNdCglBZGRlZCBhbmQgdXBkYXRlZCBzb21lIGluZm9ybWF0aW9uLgoKCSogW2NvbnRyb2xzL3Rvb2xiYXIuY11baW5jbHVkZS90b29sYmFyLmhdCglBZGRlZCBzdHJpbmcgc3VwcG9ydC4KCgkqIFttaXNjL3NoZWxsLmNdW21pc2Mvc2hlbGxvcmQuY11bcmVsYXkzMi9zaGVsbC5zcGVjXQoJQ2hhbmdlZCBuYW1lcyBvZiB1bmRvY3VtZW50ZWQgZnVuY3Rpb25zIHRvIHRoZWlyIHJlYWwgbmFtZXMgYW5kCglmaXhlZCB0aGUgZXhwb3J0IHRhYmxlLgoKCSogW2NvbnRyb2xzL2ltYWdlbGlzdC5jXVtyZWxheTMyL2NvbWN0bDMyLnNwZWNdCglBZGRlZCBzdHViIGZvciBJbWFnZUxpc3RfU2V0RmlsdGVyLgoJRml4ZWQgc29tZSBtaW5vciBidWdzIGFuZCB0eXBvcy4KCgkqIFtvYmplY3RzL2ZvbnQuY11baW5jbHVkZS93aW5kb3dzLmhdW3JlbGF5MzIvZ2RpMzIuc3BlY10KCUFkZGVkIHN0dWJzIGZvciBHZXRDaGFyYWN0ZXJQbGFjZW1lbnQzMltBL1ddLgoKCSogW29iamVjdHMvcmVnaW9uLmNdW3JlbGF5MzIvZ2RpMzIuc3BlY10KCUFkZGVkIHN0dWIgZm9yIFVORE9DVU1FTlRFRCBHZXRSYW5kb21SZ24uCgoJKiBbY29udHJvbHMvY29tbWN0cmwuY11bY29udHJvbHMvKi5jXVtpbmNsdWRlLyouaF0KCUFkZGVkIGR1bW15IGxpc3R2aWV3LCBwYWdlciwgcmViYXIsIHRvb2x0aXBzLCB0cmFja2JhciBhbmQKCXRyZWV2aWV3IGNvbnRyb2wuIFRoaXMga2VlcHMgc29tZSBwcm9ncmFtcyBmcm9tIGNvbXBsYWluaW5nLgoKVGh1IEp1bCAgOSAxMToyMzo1OCAxOTk4ICBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoKCSogW2dyYXBoaWNzL3BhaW50aW5nLmNdIFtncmFwaGljcy8qL2luaXQuY10KCSAgW2dyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jXSBbcmVsYXkzMi9nZGkzMi5zcGVjXQoJICBbaWYxNjMyL2dkaS5zcGVjXSBbaW5jbHVkZS9nZGkuaF0gW2luY2x1ZGUveDExZHJ2LmhdCglJbXBsZW1lbnRlZCBkcmF3aW5nIGJlemllciBjdXJ2ZXM6IFBvbHlCZXppZXIxNi8zMiBhbmQKCVBvbHlCZXppZXJUbzE2LzMyLgoKCSogW2dyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jXQoJSW1wcm92ZWQgYWNjdXJhY3kgb2Ygc2V2ZXJhbCBncmFwaGljIHJvdXRpbmVzLCBlc3BlY2lhbGx5IHRoZQoJZHJhd2luZyBvZiBwaWUncy4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW21pc2Mvc3B5LmNdCglBZGRlZCAyNSB3aW5kb3cgbWVzc2FnZXMgcmVsYXRlZCB0byBwcm9ncmFtcyBiYXNlZCBvbiBNRkMgYW5kL29yIE9MRS4KCldlZCBKdWwgIDggMjI6MDA6MDAgMTk5OCAgSmFtZXMgSnVyYW4gIDxqcmoxMjBAcHN1LmVkdT4KCgkqIFtkb2N1bWVudGF0aW9uL3dpbmUubWFuXQoJVXBkYXRlZCBtYW5wYWdlLgoKCSogW3dpbmUuaW5pXQoJQWRkZWQgc2VjdGlvbiBmb3IgV2luOTVMb29rPXRydWUgKGNvbW1lbnRlZCBvdXQgYnkgZGVmYXVsdCkuCgpXZWQgSnVsICA4IDA2OjIzOjE5IDE5OTggIE1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+CgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJRml4ZWQgYSBjcmFzaCBpbiBSZWdFbnVtVmFsdWUzMkEgd2hlbiB0aGUgZHdUeXBlIHBhcmFtZXRlciBpcwoJTlVMTC4KCgkqIFtwcm9ncmFtcy9yZWd0ZXN0L3JlZ3Rlc3QuY10KCUltcHJvdmVkIHRoZSBwcmludGluZyBvZiBlcnJvcnMuCgoJKiBbbWlzYy9udGRsbC5jXQoJQWRkZWQgc3R1YiBmb3IgUnRsRm9ybWF0Q3VycmVudFVzZXJLZXlQYXRoLgoKCSogW3dpbjMyL2NvbnNvbGUuY10KCUFkZGVkIHN0dWIgZm9yIFNjcm9sbENvbnNvbGVTY3JlZW5CdWZmZXIuCgpNb24gSnVsICA2IDE2OjQxOjQ3IDE5OTggIFBlciBMaW5kc3Ry9m0gPHBlbGluc3RyQGFsZ29uZXQuc2U+CgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdIFtyZWxheTMyL2tlcm5lbC5zcGVjXSBbd2luMzIvbmV3Zm5zLmNdCglBZGRlZCBzdHVicyBmb3IgU2xlZXBFeCBhbmQgVGVybWluYXRlUHJvY2Vzcy4KCgkqIFtyYy9SRUFETUVdCglDb3JyZWN0ZWQgYSBncmFtbWF0aWNhbCBlcnJvci4KCk1vbiBKdWwgIDMgMTI6MDA6MDAgMTk5OCAgSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CgoJKiBbbWlzYy9zaGVsbG9yZC5jXQoJUHV0IHNvbWUgVFJBQ0UgaW4uCgoJKiBbbWVtb3J5L3N0cmluZy5jXQoJRGVsZXRlZCB1bnVzZWQgdmFyaWFibGUgaW4gbHN0cmNtcGkzMkEuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdW21lbW9yeS9zdHJpbmcuY10KCUFkZGVkIGZ1bmN0aW9ucyBXaWRlQ2hhclRvTG9jYWwzMiBMb2NhbFRvV2lkZUNoYXIzMiBmb3IKCU9MRS1zdHJpbmdzCgoJKiBbaW5jbHVkZS9zaGxvYmouaF1baW5jbHVkZS93aW5lcnJvci5oXVttaXNjL3NoZWxsLmNdCgkgIFtvbGUvZm9sZGVycy5jXQoJQWRkZWQgZGVmaW5pdGlvbiBvZiBpbnRlcm5hbCBjbGFzcyBwaWRsbWdyLgoJQ2hhbmdlZCBkZWZpbml0aW9ucyBvZiBFbnVtSURMaXN0LCBJU2hlbGxGb2xkZXIuCglBZGRlZCBzb21lIE9MRSBlcnJvciBjb25zdGFudHMuCglJbXBsZW1lbnRlZCBFbnVtSURMaXN0LCBJU2hlbGxGb2xkZXIsIElDbGFzc0ZhY3RvcnksCglQaWRsTWdyLCBTSEVMTDMyX0RsbEdldENsYXNzT2JqZWN0LCBTSEdldERlc2t0b3BGb2xkZXIsCglTSEdldFNwZWNpYWxGb2xkZXJMb2NhdGlvbiAoaGFsZiksIFNIR2V0UGF0aEZyb21JRExpc3QKCSghIVRoaXMgc3R1ZmYgaXMgbm90IGZpbmlzaGVkIHlldCEhKQoKCSogW2luY2x1ZGUvd2luZG93cy5oXVttaXNjL25ldHdvcmtdW3JlbGV5MzIvbXByLnNwZWNdCglBZGRlZCBzdHVicyBmb3IgV05ldENvbm5lY3Rpb25EaWFsb2czMltBfFd8QVBJXS4KCUFkZGVkIHN0cnVjdCBMUENPTk5FQ1RETEdTVFJVQ1QzMltBfFddIGFuZCBzb21lIGNvbnN0YW50cy4KCUFkZGVkIHNvbWUgU2V0TGFzdEVycm9yKFdOX05PX05FVFdPUkspIHRvIHRoZSBzdHVicy4KCUZpeGVkIGJ1ZmZlcmhhbmRsaW5nIGluIFdOZXRDYW5jZWxDb25uZWN0aW9uCglBZGRlZCBzdHViIGZvciBNdWx0aW5ldEdldEVycm9yVGV4dFtBfFddCgoJKiBbb2xlL29sZTJubHMuY10KCVJld3JvdGUgR2V0VGltZUZvcm1hdDMyQS4KCkZyaSBKdWwgIDMgMTA6Mjc6MzAgMTk5OCAgTWljaGFlbCBQb29sZSA8cG9vbGUrQGFuZHJldy5jbXUuZWR1PgoKCSogW2dyYXBoaWNzL2RkcmF3LmNdIFt0c3gxMS9YMTFfY2FsbHNdCglJbXBsZW1lbnQgSURpcmVjdERyYXdQYWxldHRlX0dldEVudHJpZXMuCglVc2UgQ29weUNvbG9ybWFwQW5kRnJlZSB0byBhdm9pZCBlcmFzaW5nIHByZXZpb3VzbHktc2V0CglwYWxldHRlIGVudHJpZXMuCgoJKiBbZ3JhcGhpY3MvZGRyYXcuY10gW2luY2x1ZGUvZGRyYXcuaF0KCSAgW3Rvb2xzL21ha2VfWDExd3JhcHBlcnNdIFt0c3gxMS9YMTFfY2FsbHNdCglQcm92aWRlIGEgcHJlbGltaW5hcnksIG5vdC15ZXQtd29ya2luZyBmcmFtZXdvcmsgZm9yIGRvaW5nCglEaXJlY3REcmF3IHZpYSBYbGliIG9yIFhTaG0gYXMgd2VsbCBhcyBER0EuCgpUdWUgSnVuIDMwIDAwOjE2OjA5IDE5OTggIE1hcmNlbCBCYXVyIDxtYmF1ckBnMjYuZXRoei5jaD4KCgkqIFtvbGUvbmxzLyoubmxzXQoJQWRkZWQgcmVtYWluaW5nIDIyIGxvY2FsZXMgKGluY2x1ZGluZyBhcmFiaWMgbG9jYWxlcykuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBKdW4gMjggMTg6Mzc6MDIgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbaWYxNjMyL3NpZ25hbC5jXSBbbWlzY2VtdS9pbnN0ci5jXSBbbWVtb3J5L3ZpcnR1YWwuY10KCU1vdmVkIHBhZ2UtZmF1bHQgaGFuZGxpbmcgdG8gSU5TVFJfRW11bGF0ZUluc3RydWN0aW9uLgoKCSogW3NjaGVkdWxlci90aHJlYWQuY10KCUFkZGVkIGxvY2tpbmcgYW5kIGNoZWNrIGZvciBvd24gdGhyZWFkIGluIFN1c3BlbmQvUmVzdW1lVGhyZWFkLgoKU2F0IEp1biAyNyAyMToyNToyMSAxOTk4ICBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtvYmplY3RzL2RpYi5jXSBbb2JqZWN0cy9iaXRtYXAuY10gW29iamVjdHMvb2VtYml0bWFwLmNdIAoJICBbZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jXSBbaW5jbHVkZS9iaXRtYXAuaF0KCUltcHJvdmVkIERJQiBzZWN0aW9uIGhhbmRsaW5nIHVzaW5nIHBhZ2UgZmF1bHQgaGFuZGxlcnMuCgkoTm90ZTogVGhpcyBwYXRjaCBpbmNsdWRlcyBjb2RlIGNvbnRyaWJ1dGVkIGJ5IE1hdHRoZXcgSi4gRnJhbmNpcy4pCgoJKiBbbWVtb3J5L3ZpcnR1YWwuY10gW2lmMTYzMi9zaWduYWwuY10gW2luY2x1ZGUvZ2xvYmFsLmhdCglQYWdlIEZhdWx0IGhhbmRsZXIgc3VwcG9ydCBhZGRlZC4KCgkqIFtpZjE2MzIvc2lnbmFsLmNdIFtsb2FkZXIvc2lnbmFsLmNdIFt0b29scy9idWlsZC5jXSBbbWlzYy9zeXN0ZW0uY10KCSAgW21pc2Mvd2luc29ja19kbnMuY10gW2luY2x1ZGUvc2lnX2NvbnRleHQuaF0gW2luY2x1ZGUvdGhyZWFkLmhdCgkxNi1iaXQgJWZzIGhhbmRsaW5nIGltcHJvdmVkOiBBbHdheXMgcHJlc2VydmUgMTYtYml0ICVmcyB2YWx1ZSwKCWFsd2F5cyByZXN0b3JlIDMyLWJpdCAlZnMgdmFsdWUgZm9yIHNpZ25hbCBoYW5kbGVycy4KCgkqIFtpZjE2MzIvdGh1bmsuY10gW2xvYWRlci9tb2R1bGUuY10gW21pc2MvY2FsbGJhY2suY10gW3dpbmRvd3MvdXNlci5jXQoJICBbbG9hZGVyL25lL3Jlc291cmNlLmNdIFtpbmNsdWRlL2NhbGxiYWNrLmhdIFtpbmNsdWRlL21vZHVsZS5oXQoJICBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaWYxNjMyL3dwcm9jcy5zcGVjXQoJUmVzb3VyY2UgSGFuZGxlciBmdW5jdGlvbiBwb2ludGVyIHN0b3JlZCBhcyAxNi1iaXQgU0VHUFRSLgoKCSogW2xvYWRlci90YXNrLmNdIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy93aW5wb3MuY10gW2lmMTYzMi91c2VyLnNwZWNdCgkgIFtpZjE2MzIva2VybmVsLnNwZWNdIFtsb2FkZXIvbmUvbW9kdWxlLmNdCglTb21lIG1pbm9yIGluY29tcGF0aWJpbGl0aWVzIGZpeGVkIChXaW4zMnMgcmVsaWVzIG9uIHRob3NlKToKCUdldEV4ZVB0ciwgSXNXaW5kb3cxNiBzaG91bGQgc2V0IEVTIG9uIHJldHVybjsgV0lOUE9TX1NlbmROQ0NhbGNTaXplCglzaG91bGQgY29wZSB3aXRoIGhhdmluZyB0aGUgV0lORE9XUE9TIHN0cnVjdHVyZSB0cmFzaGVkOwoJdGhlIE9GU1RSVUNUIGluIHRoZSBORSBtb2R1bGUgaW1hZ2Ugc2hvdWxkIGJlIHBsYWNlZCAqbGFzdCouCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglNaXNzaW5nIHByb3RvdHlwZSBmb3IgRmx1c2hWaWV3T2ZGaWxlLgoKCSogW2xvYWRlci90YXNrLmNdCglCdWdmaXg6IENvbW1hbmQgbGluZSBzaG91bGQgKm5vdCogc3RhcnQgd2l0aCBhIGJsYW5rLgoJCgkqIFtsb2FkZXIvbmUvc2VnbWVudC5jXQoJQnVnZml4OiBGaXh1cHMgdG8gb2Zmc2V0IDAgd2VyZSBuZXZlciBhcHBsaWVkLgoKCSogW21pc2MvbHN0ci5jXQoJVXNlIGRlYnVnc3RyX2EgaW4gT3V0cHV0RGVidWdTdHJpbmcxNi4KCgkqIFttc2Rvcy9kcG1pLmNdCglTdHViIGZvciBpbnQgMzEgQkw9MmYgQVg9N2EyMCAoTmV0V2FyZTogR2V0IFZMTSBDYWxsIEFkZHJlc3MpIGFkZGVkLgoKCSogW21zZG9zL2ludDIxLmNdCglTdHViIGZvciBpbnQgMjEgQVg9NDQwZCBDTD02ZiAoZ2V0IGRyaXZlIG1hcCBpbmZvcm1hdGlvbikgYWRkZWQuCgpGcmkgSnVuIDI2IDE4OjA4OjMwIDE5OTggIFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CgoJKiBbd2luZG93cy93aW5wb3MuY10KCUZpeCBzbWFsbCBidWdsZXQgdGhhdCBtaXhlZCB1cCBtYXhpbWl6ZWQgYW5kIG1pbmltaXplZCB3aW5kb3dzLgoKCSogW2luY2x1ZGUveDExZHJ2LmhdIFtvYmplY3RzL2RjLmNdIFtncmFwaGljcy94MTFkcnYvcGVuLmNdCgkgIFtncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuY10KCUZpeCBzb21lIGJ1Z3Mgd2l0aCBsaW5lcyBqb2luaW5nIHN0eWxlcy4gRHJhd3MgcmVjdGFuZ2xlcwoJd2l0aCB0aGljayBwZW5zIG5vdyBjb3JyZWN0bHkuCgpGcmkgSnVuIDI2IDE2OjIyOjIzIDE5OTggIEphbWVzIEp1cmFuIDxqcmoxMjBAcHN1LmVkdT4KCgkqIFttaXNjL3NoZWxsLmNdCglGaXhlZCBidWcgSSBpbnRyb2R1Y2VkIGxhc3QgcmVsZWFzZSBpbiBJbnRlcm5hbEV4dHJhY3RJY29uLgoKCSogW3dpbjMyL2ZpbGUuY10KCUFkZGVkIGRvY3VtZW50YXRpb24gZm9yIENyZWF0ZUZpbGUzMkEuCgoJKiBbZG9jdW1lbnRhdGlvbi93aW5lLm1hbl0KCVVwZGF0ZWQgbWFucGFnZS4JCgoJKiBbQ2hhbmdlTG9nXQoJQWRkZWQgbXkgZW50cnkgZnJvbSBsYXN0IHJlbGVhc2UuCgpGcmkgSnVuIDI2IDEzOjMzOjMwIDE5OTggIEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoKCSogW2dyYXBoaWNzL3BzZHJ2LypdIFtpZjE2MzIvd2luZXBzLnNwZWNdIFtpbmNsdWRlL3BzZHJ2LmhdCgkgIFtpbmNsdWRlL3ByaW50LmhdIFtvYmplY3RzL2dkaW9iai5jXQoJRmlyc3Qgc3RhZ2VzIG9mIGFuIGludGVybmFsIFBvc3RzY3JpcHQgZHJpdmVyLiBTZWUKCWdyYXBoaWNzL3BzZHJ2L1JFQURNRSAuIFNob3VsZCBwcmludCB0ZXh0IChiYWRseSkgZnJvbSB3aW4zLjEgbm90ZXBhZCwKCXdyaXRlIGFuZCB3aW53b3JkNi4KCgkqIFtkb2N1bWVudGF0aW9uL3ByaW50aW5nXQoJU29tZSBub3RlcyBvbiBwcmludGluZy4KCgkqIFtjb250cm9scy9lZGl0LmNdCglTdHJpcCBvZmYgV1NfQk9SREVSIGluIFdNX05DUkVBVEUsIGVkaXQgZHJhd3MgaXRzIG93biByZWN0YW5nbGUuCglFQ19VU0VGT05USU5GTyBzZWVtcyB0byBiZSB1c2VkIGFzIGEgbGVmdC9yaWdodCB2YWx1ZSBmb3IgRU1fU0VUTUFSR0lOUwoJYW5kIG5vdCBhcyBhbiBhY3Rpb24gYXMgdGhlIGRvY3Mgc2F5LiBUaGlzIGFjdHVhbGx5IG1ha2VzIG1vcmUgc2Vuc2UuCglTY3JvbGwgdGhlIGNhcmV0IGJhY2sgdG8gemVybyBhZnRlciBhIFdNX1NFVFRFWFQuCgpGcmkgSnVuIDI2IDEwOjU2OjI1IDE5OTggIE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoKCSogW2lmMTYzMi9zbm9vcC5jXQoJQWRkZWQgd2luMTYgaW50ZXItZGxsIHNub29waW5nLgoKCSogW3dpbjMyL29yZGluYWxzLmNdCglLRVJORUxfNDg1IGlzIEdldFByb2Nlc3NEd29yZC4KCgkqIFtpbmNsdWRlL3htYWxsb2MuaF1baW5jbHVkZS9iaXRtYXAuaF1bbWlzYy94bWFsbG9jLmNdCglBZGRlZCB4Y2FsbG9jIHNvIHdlIDAgaW5pdGlhbGl6ZSBYSW1hZ2VzLiAKCUZpeGVzL0hpZGVzIHRoZSAnanVuayBhcm91bmQgTU9QWUZpc2gnLgoKCSogW21pc2MvbnRkbGwuY10KCVNvbWUgc3R1YnMgYWRkZWQuCgpUaHUgSnVuIDI1IDE1OjIyOjQzIDE5OTggIEFkcmlhbiBIYXJ2ZXkgPGFkcmlhbkBzZWxlY3QuY29tLmF1PgoKCSogW3NjaGVkdWxlci90aHJlYWQuY10gCglJbXBsZW1lbnRlZCBTdXNwZW5kVGhyZWFkIGFuZCBSZXN1bWVUaHJlYWQuCgpUaHUgSnVuIDI1IDAwOjU1OjAzIDE5OTggIFBldGVyIEh1bm5pc2V0dCA8aHVubmlzZUBub3J0ZWwuY2E+CgoJKiBbaW5jbHVkZS9kZWJ1Zy5oLGRwbGF5LmgsZHNvdW5kLmhdW211bHRpbWVkaWEvZHNvdW5kLmMsZHBsYXkuY10KCSAgW3JlbGF5MzIvZHBsYXl4LnNwZWMsZHBsYXkuc3BlY11bbXVsdGltZWRpYS9NYWtlZmlsZS5pbl0KCSAgW2RvY3VtZW50YXRpb24vc3RhdHVzL2RpcmVjdHBsYXldCglBZGRlZCBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBEaXJlY3RQbGF5ICYgRGlyZWN0UGxheUxvYmJ5LiBNb3ZlZCB0aGUKCXByZWxpbWluYXJ5IHN0dWJzIHB1dCBpbiB0aGUgZHNvdW5kIGZpbGVzIGludG8gdHdvIG5ldyBmaWxlcwoJZHBsYXkuaCBhbmQgZHBsYXkuYy4KCUFkZGVkIG5ldyBkZWJ1ZyBjaGFubmVsIChkcGxheSkgZm9yIHRoaXMuCglDcmVhdGVkIG5ldyBkb2N1bWVudCB0byBrZWVwIHRyYWNrIG9mIGltcGxlbWVudGF0aW9uLgoKCSogW2luY2x1ZGUvd2luaW9jdGwuaF1bd2luMzIvZGV2aWNlLmNdCglBZGRlZCBzb21lIGZyYW1ld29yayBpbiBEZXZpY2VJb0NvbnRyb2wgdG8sIGluIHRoZSBmdXR1cmUsIHN1cHBvcnQKCXRoZSAiYnVpbHRpbiIgd2luZG93cyBkd0lvQ29udHJvbENvZGVzLiBBZGRlZCBuZXcgaGVhZGVyIGZpbGUKCXdpbmlvY3RsLmggLiAKCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCglBZGRlZCBzbGlnaHRseSBpbXByb3ZlZCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIFBsYXlTb3VuZC4KCldlZCBKdW4gMjQgMTI6MDA6MDAgMTk5OCAgSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+IAoKCSogW2ZpbGVzL3Byb2ZpbGUuY11bZ3JhcGhpY3MveDExZHJ2L3hmb250LmNdW2xvYWRlci9tb2R1bGUuY10KCUNoYW5nZWQgbHN0cmNtcGkzMkEgdG8gc3RyY2FzZWNtcCwgbHN0cm5jbXBpMzJBIHRvIHN0cm5jYXNlY21wLAoJbHN0cmNweTMyQSB0byBzdHJjcHksIGxzdHJsZW4zMkEgdG8gc3RybGVuLCBsc3RyY21wMzJBIHRvIHN0cmNtcAoJYmVjYXVzZSBpdCdzIG5vdCBuZWNlc3NhcnkgdG8gc3VwcG9ydCBsb2NhbGUgb24gc3VjaCBwbGFjZXMuCglJdCBjYXVzZXMgYSBodWdlIG92ZXJoZWFkIGFuZCBldmVuIGZhaWxzIHNvbWV0aW1lcyAKCgkqIFtpbmNsdWRlL29sZWF1dG8uaF1baW5jbHVkZS93aW5lcnJvci5oXQoJQWRkZWQgc29tZSBvbGUtcmVsYXRlZCBjb25zdGFudHMuCgoJKiBbbWlzYy9zaGVsbC5jXQoJU0hFTEwzMl9EbGxHZXRDbGFzc09iamVjdCwgU0hHZXRTcGVjaWFsRm9sZGVyTG9jYXRpb24sCglTSEdldFBhdGhGcm9tSURMaXN0IGltcHJvdmVkIHRoZSBzdHVicwoKCSogW29sZS9mb2xkZXJzLmNdCglJU2hlbGxGb2xkZXIqIGZ1bmN0aW9ucyByZXdyb3RlIHRoZSBzdHVicyBzbyBkb24ndCBjcmFzaCBhbmQgZ2l2ZQoJc29tZXRoaW5nIHNlbnNpYmxlIGJhY2ssIHN0YXJ0ZWQgaW1wbGVtZW50YXRpb24gb2YuCgoJKiBbb2xlL3R5cGVsaWIuY11bcmVsYXkzMi9vbGVhdXQzMi5zcGVjXQoJTG9hZFR5cGVMaWIzMiwgUmVnaXN0ZXJUeXBlTGliIHN0dWIuCgoJKiBbb2xlL29sZTJubHMuY10KCUZpeGVkIGEgYnVmZmVyIG92ZXJydW4gaW4gQ29tcGFyZVN0cmluZzMyQS4KCVRlc3QgZm9yIGEgYmFkIHBvaW50ZXIgaW4gTENNYXBTdHJpbmczMkEgKGhhcHBlbnMKCWluIHdpbmhscDMyIHdoaWxlIGJ1aWxkaW5nIGEgaW5kZXggZm9yIHNlYXJjaGluZykuIAoKCSogW3JlbGF5MzIvb2xlYXV0MzIuc3BlY10gW29sZS90eXBlbGliLmNdCglBZGRlZCBzdHViIGZvciBMb2FkVHlwZUxpYiAob2xlMzIpIHRvIG1ha2UgZXhjZWw5NSBoYXBweS4KClR1ZSBKdW4gMjMgMjI6NDc6MDkgMTk5OCAgQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCgkqIFtmaWxlcy9wcm9maWxlLmNdIFtyZWxheTMyL2tlcm5lbDMyLnNwZWNdCglBZGRlZCBXcml0ZVByaXZhdGVQcm9maWxlU3RydWN0QSwgR2V0UHJpdmF0ZVByb2ZpbGVTdHJ1Y3RBLAoJR2V0UHJpdmF0ZVByb2ZpbGVTZWN0aW9uTmFtZXMxNi4KClR1ZSBKdW4gMjMgMDE6MzQ6NDMgMTk5OCAgUGFzY2FsIEN1b3EgPHBjdW9xQGVucy1seW9uLmZyPgoKCSogW29sZS9vbGUybmxzLmNdCglHZXRTdHJpbmdUeXBlRXgzMkE6IEltcGxlbWVudGVkIENUX0NUWVBFMiBhbmQgQ1RfQ1RZUEUzIGNhc2VzLgoJTENNYXBTdHJpbmczMkE6IE1hcCBmaW5hbCAnXDAnIGZvciAnXDAnLXRlcm1pbmF0ZWQgc3RyaW5ncy4KCgkqIFttaXNjL3NoZWxsb3JkLmNdIFtmaWxlcy9wcm9maWxlLmNdIFtncmFwaGljcy9kcml2ZXIuY10gCgkgIFtsb2FkZXIvbW9kdWxlLmNdIFttc2Rvcy9pbnQyMS5jXSBbd2luZG93cy9kcml2ZXIuY10gW2ZpbGVzL2RyaXZlLmNdCglDaGFuZ2VkIGxzdHJjbXBpMzJBIC0+IHN0cmNhc2VjbXAuICBTaG91bGQgYmUgT0sgaW4gdGhlc2UgcGxhY2VzLgoKU2F0IEp1biAyMCAyMzo0MDowMCAxOTk4ICBCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AYWtocGhkLmF1LmRrPgoKCSogW3Rvb2xzL3dyYy9dCglXcmMgdmVyc2lvbiAxLjAuMiAoMjAtSnVuLTE5OTgpLiBQbGVhc2UgcmV2ZXJ0IHRvIAoJdGhlIGZpbGUgdG9vbHMvd3JjL0NIQU5HRVMgZm9yIGRldGFpbHMuCgpTYXQgSnVuIDIwIDE0OjU4OjAwIDE5OTggIE1hcmNlbCBCYXVyICA8bWJhdXJAZzI2LmV0aHouY2g+CgoJKiBbb2xlL29sZTJubHMuY10gW29sZS9ubHMvKl0KCUFkZGVkIHRoZSBmaXJzdCA1NyBubHMgZmlsZXMsIG1vc3QgYXJlIG5vdCB5ZXQgY29tcGxldGUuCgpXZWQgSnVuIDE3IDExOjE2OjU0IDE5OTggIERhdmlkIEx1eWVyIDxsdXllckB1Y3MudXdhLmVkdS5hdT4KCgkqIFtyZWxheTMyL3JlbGF5Mzg2LmNdIFtpZjE2MzIvcmVsYXkuY10KCU1vdmUgZGVidWdfcmVsYXlfKGluY2x1ZGV8ZXhjbHVkZSlfbGlzdCBoYW5kbGluZyBpbnRvCglzZXBlcmF0ZSBmdW5jdGlvbiBSRUxBWV9TaG93RGVidWdtc2dzUmVsYXkoKS4gIEluY2x1ZGUKCWNoZWNraW5nIG9mIHRoaXMgZm9yIDE2IGJpdCBjYWxscyAob3JpZ2luYWxseSBvbmx5CgkzMi1iaXQgY2FsbHMpLgoKCSogW3JlbGF5MzIvc25vb3AuY10gW21pc2MvbWFpbi5jXQoJQWRkIGRlYnVnX3Nub29wXyhpbmNsdWRlfGV4Y2x1ZGUpX2xpc3QgYXMgcGVyIHRoZSByZWxheSBzdHVmZi4KCUZpeCB0eXBvIGFuZCBhZGQgaW5mb3JtYXRpb24gb24gLWRlYnVnbXNnICsvLXJlbGF5PS4uLiBpbgoJaGVscCBvbiAtZGVidWdtc2cuICBSZWZlciB0byBhdmFpbGFiaWxpdHkgb2Ygc25vb3AgdG9vLgoKVHVlIEp1biAxMCAyMjowMDoxOCAxOTk4ICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoKCSogW2NvbnRyb2xzL2hlYWRlci5jXVtpbmNsdWRlL2hlYWRlci5oXVtpbmNsdWRlL2NvbW1jdHJsLmhdCglBZGRlZCBvd25lciBkcmF3IHN1cHBvcnQuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY11bd2luZG93cy9zeXNtZXRpY3MuY10KCUZpeGVkIG1lbnUgYmFyIGhlaWdodCBmb3IgV2luOTUgbG9vay4KCVNwbGl0IE5DX0FkanVzdFJlY3Q5NSgpIGludG8gTkNfQWRqdXN0UmVjdE91dGVyOTUoKSBhbmQKCU5DX0FkanVzdFJlY3RJbm5lcjk1IHRvIGZpeCBhIG1lbnUgYmFyIGJ1Zy4KCUltcHJvdmVkIFdpbjk1IGxvb2suCgoJKiBbY29udHJvbHMvcHJvZ3Jlc3MuY10KCUltcHJvdmVkIGRyYXdpbmcgY29kZS4gQm9yZGVycyB3aWxsIGJlIGRyYXduIGJ5IG5vbi1jbGllbnQgY29kZS4KCgkqIFtjb250cm9scy91cGRvd24uY10KCUNoYW5nZWQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZpeGVkIHNvbWUgYnVncy4KCgkqIFtjb250cm9scy90b29sYmFyLmNdCglGaXhlZCBUQl9CVVRUT05TVFJVQ1RTSVpFIGJ1ZyBpbiBNRkMgcHJvZ3JhbXMuCglTZXZlcmFsIGltcHJvdmVtZW50cy4KCgkqIFttaXNjL3NoZWxsLmNdCglBZGRlZCBzdHViIGZvciBCcm93c2VGb3JGb2xkZXJzQSgpLgoKCSogW21pc2Mvc2hlbGxvcmQuY10KCUFkZGVkIHN0dWIgZm9yIFNIRUxMMzJfMTQ3KCkuCgoJKiBbY29udHJvbHMvY29tY3RsMzJ1bmRvYy5jXQoJTWlub3IgY2hhbmdlcy4KCgkqIFtkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9sc10KCU5ldyBGaWxlOiBEb2N1bWVudGF0aW9uIGFib3V0IGRldmVsb3BtZW50IHN0YXR1cywgdW5kb2N1bWVudGVkCglmZWF0dXJlcyBhbmQgZnVuY3Rpb25zIG9mIHRoZSBjb21tb24gY29udHJvbHMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBKdW4gMTUgMTA6MzA6MzUgMTk5OCAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbZmlsZXMvZG9zX2ZzLmNdIFtmaWxlcy9maWxlLmNdIFtpZjE2MzIvd3Byb2NzLnNwZWNdCgkgIFttaXNjL2FzcGkuY10KCUFkZGVkIHN1cHBvcnQgZm9yIHNjYW5uZXJzIHRoYXQgbmVlZCBBZGFwdGVjJ3MgQVNQSTJET1MuCgoJKiBbZ3JhcGhpY3MvZW52LmNdIFttaXNjL3ByaW50ZXJkcnYuY10gW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10KCSAgW2lmMTYzMi9nZGkuc3BlY10gW2luY2x1ZGUvZ2RpLmhdCglFbmhhbmNlZCBwcmludGVyIHN1cHBvcnQgKGVzcGVjaWFsbHkgV2luOTUpOgoJRHJ2W0dTXWV0UHJpbnRlckRhdGEsIFtHU11ldEVudmlyb25tZW50OyBhZGRlZCBBYm9ydFByb2MgaGFuZGxpbmcuCgoJKiBbbWlzYy90YXBpMzIuY10gW3JlbGF5MzIvdGFwaTMyLnNwZWNdCglBZGRlZCBzb21lIHN0dWJzLgoKCSogW2NvbmZpZ3VyZS5pbl0gW2dyYXBoaWNzL2ZvbnRlbmdpbmUuY10gW2luY2x1ZGUvd2luZG93cy5oXQoJICBbbWlzYy9jb21tLmNdIFttaXNjL3czMnNrcm5sLmNdIFttaXNjL3dpbjMyczE2LmNdCglNYWRlIFdpbmUgY29tcGlsZSBvbiBIUC1VWCAoanVzdCBmb3IgZnVuIDspCgoJKiBbY29udHJvbHMvbWVudS5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglDb21wbGV0ZSByZXdyaXRlIG9mIEVuYWJsZU1lbnVJdGVtMzIuCglGcmVlIEFnZW50IDMyIHN0aWxsIGRvZXNuJ3Qgd29yayA6KAoKCSogW21pc2MvdmVyc2lvbi5jXSBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaW5jbHVkZS93aW5iYXNlLmhdCglJbXBsZW1lbnRlZCBHZXRWZXJzaW9uRXgxNi4KCgkqIFttaXNjL25ldHdvcmsuY10gW2lmMTYzMi91c2VyLnNwZWNdCglGaXhlZCBhcmd1bWVudHMgb2YgV05ldEdldFByb3BlcnR5VGV4dC4KCgkqIFttaXNjL3ZlcnNpb24uY10gW3JlbGF5MzIvY29tY3RsMzIuc3BlY10gW3JlbGF5MzIvb2xlYXV0MzIuc3BlY10KCUltcGxlbWVudGVkIENPTUNUTDMyX0RsbEdldFZlcnNpb24sIE9hQnVpbGRWZXJzaW9uLgoKCSogW3dpbjMyL2ZpbGUuY10KCUZpeGVkIFVOQyBoYW5kbGluZyBvZiBDcmVhdGVGaWxlMzIuCgpTYXQgSnVuIDEzIDIyOjM1OjEyIDE5OTggIERvdWdsYXMgUmlkZ3dheSAgPHJpZGd3YXlAd2luZWhxLmNvbT4KCgkqIFtNYWtlZmlsZS5pbl0gW01ha2UucnVsZXMuaW5dCglBZGRlZCBwYXR0ZXJuIGZvciBDVlMgbWVyZ2UgZmlsZXMgdG8gJ21ha2UgY2xlYW4nCgoJKiBbb2xlL29sZWNsaS5jXSBbd2luZG93cy9zY3JvbGwuY10gW3dpbmRvd3MvZ3JhaGljcy5jXQoJQWRkIHNvbWUgREMgaGFuZGxlIHVubG9ja2luZy4gKFdoZW4gaGRjJ3MgYXJlIGFsd2F5cyB1bmxvY2tlZCwKCXRoZXkgY2FuIGJlIG1hZGUgbW92ZWFibGUuKQoKCSogW2RvY3VtZW50YXRpb24vd2luZS50ZXhpbmZvXSAKCVN0YXJ0ZWQgYSBXaW5lIERlc2lnbiBjaGFwdGVyIHdpdGggZGlzY3Vzc2lvbiBvZiAKCWdyYXBoaWNzIGRyaXZlciBtb2RlbC4KClNhdCBKdW4gMTMgMTE6MTk6MjUgMTk5OCAgRGF2aWQgTHV5ZXIgPGx1eWVyQHVjcy51d2EuZWR1LmF1PgoKCSogW21pc2MvbWFpbi5jXSBbcmVsYXkzMi9yZWxheTM4Ni5jXQoJQWRkZWQgbmV3IG9wdGlvbiAtZGVidWdtc2cgK3JlbGF5PS4uLi4gb3IgLWRlYnVnbXNnIC1yZWxheT0uLi4KCkZyaSBKdW4gMTIgMjI6NTY6MDkgMTk5OCAgTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CgoJKiBbcmVsYXkzMi9zbm9vcC5jXVtyZWxheTMyL2J1aWx0aW4uY11bbG9hZGVyL3BlX2ltYWdlLmNdCglBZGRlZCBpbnRlciB3aW4zMiBkbGwgc25vb3BpbmcuIFVzZSAtZGVidWdtc2cgK3Nub29wLgoJTnVtYmVyIG9mIGFyZ3VtZW50cyBhbmQgc3RyaW5nIHJlZmVyZW5jZXMgYXJlIGF1dG9kZXRlY3RlZC4KCVNvbWUgc21hbGwgYnVnZml4ZXMgaW4gdGhlIFBFIGxvYWRlci4KCgkqIFttaXNjL3N5c3RlbS5jXQoJRGlzYWJsZWQgU3lzdGVtVGltZXJzLiBUaGV5IGRvIG5vdCB3b3JrIHdpdGggdGhlIGN1cnJlbnQKCSVmcyBoYW5kbGluZyBpbiB0aGUgMzItPjE2IHJlbGF5Y29kZS4gKGhlbHBzIGxhYnZpZXcpCgoJKiBbbXNkb3MvZHBtaS5jXVttc2Rvcy9pbnQyZi5jXVtmaWxlcy9kcml2ZS5jXQoJQWRkZWQgYSBtb25vdG9uIGxpbmVhciBpbmNyZWFzaW5nIG1lbW9yeSBhbGxvY2F0b3IgZm9yIERQTUkgKHJlcXVpcmVkCglmb3IgTGFiVmlldywgSEFGQVMsIC4uLikKCW1zY2RleCBoYW5kbGluZyBpbiBlbXVsYXRlZCByZWFsbW9kZSBpbnRlcnJ1cHRzIChmb3IgbWNpY2RhLmRydikKCWFsbG9jYXRlIGxvZ2ljYWwgZHJpdmVzIG9ubHkgb25jZS4gKGhlbHBzIE15c3QpCgoJKiBbZmlsZXMvcHJvZmlsZS5jXQoJSGFuZGxlIF5aIGFzIHNwYWNlLiBGb3VuZCBvbiBDRFJPTVMgKGhlbHBzIE15c3QgSW5zdGFsbGVyKS4KCgkqIFttdWx0aW1lZGlhL21taW8uY10KCW1taW8qIHBhcnRpYWxseSB1cGRhdGVkIHRvIHdpbjMyLiBObyBmdW5ueSBhZGRpdGlvbnMuCgoJKiBbd2luZG93cy9kcml2ZXIuY10KCUFkZGVkIHdpbjMyIGRyaXZlciBoYW5kbGluZyAod2lsbCBiZSB1c2VkIGZvciB3aW4zMiBtdWx0aW1lZGlhLwoJbXN2aWRlbyBkcml2ZXJzKS4KCgkqIFt3aW4zMi9kZXZpY2UuY10KCUFkZGVkIGRldmljZSBoYW5kbGluZyAoSzMyT0JKX0RFVklDRV9JT0NUTCkuIEltcGxlbWVudGVkIAoJVlREQVBJLjUgKHVzZWQgYnkgd2luOTUnIFdJTk1NLnRpbWVHZXRUaW1lKCkpCgpGcmkgSnVuIDEyIDE4OjAxOjE4IDE5OTggUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCgkqIFtvbGUvY29tcG9iai5jIHJlbGF5MzIvb2xlMzIuc3BlY10KCUFkZCBhIHN0dWIgZm9yIENvTG9ja09iamVjdEV4dGVybmFsMzIuCgoJKiBbb2JqZWN0cy9jbGlwcGluZy5jXQoJRml4IGluIEludGVyc2VjdENsaXBSZWN0KCksIHdoZW4gdGhlcmUgaXMgbm8gaW5pdGlhbCBjbGlwcGluZwoJcmVnaW9uLgoKCSogW2dyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jXQoJQ29ycmVjdGVkIHNldmVyYWwgIm9uZS1vZmYiIGVycm9ycyBmb3IgdGhlIEVsbGlwc2UsIFJlY3RhbmdsZQoJYW5kIFJvdW5kUmVjdGFuZ2xlIChlc3BlY2lhbGx5IHNtYWxsIG9uZXMpIGRyYXcgcm91dGluZXMuIAoJQXJjIGFuZCBmcmllbmRzIHN0aWxsIGhhdmUgdG8gYmUgZG9uZS4KCkZyaSBKdW4gMTIgMDY6MjM6MTkgMTk5OCAgTWF0dGhldyBCZWNrZXIgPG1iZWNrZXJAZ2xhc3NjaXR5Lm5ldD4KCgkqIFttaXNjL250ZGxsLmNdCglGaXhlZCBzb21lIG9mIHRoZSBwYXJhbWV0ZXIgY291bnRzLgoKCSogW21pc2MvcmVnaXN0cnkuY10KCUdlbmVyYWwgY2xlYW51cCwgZG9jdW1lbnRhdGlvbi4KCVN0YW5kYXJkIGtleXMgYXJlIGFsbG93ZWQgdG8gYmUgJ2Nsb3NlZCcgYW5kIHN1Y2NlZWQuCgoJKiBbbWlzYy9zaGVsbC5jXQoJQ2hlY2sgZm9yIGNvcnJlY3QgcmV0dXJuIHZhbHVlcyBmcm9tIFJlZyogZnVuY3Rpb25zLgoKCSogW3dpbjMyL25ld2Zucy5jXQoJQWRkZWQgc3R1YnMgZm9yIE9wZW5EZXNrdG9wQSwgU2V0VGhyZWFkRGVza3RvcCwgYW5kCglTZXRVc2VyT2JqZWN0SW5mb3JtYXRpb25BLgoKV2VkIEp1biAxMCAgMjA6Mjg6MDggMTk5OCAgSmFtZXMgSnVyYW4gIDxqcmoxMjBAcHN1LmVkdT4KCgkqIFtkZWJ1Z2dlci9icmVhay5jXQoJRml4ZWQgYnVnIGludHJvZHVjZWQgaW4gOTgwNTAzIHRoYXQgYnJva2UgdGhlIC1kZWJ1ZyBjb21tYW5kIAoJbGluZSBvcHRpb24gZm9yIFBFIGV4ZWN1dGFibGUgZmlsZXMuCgoJKiBbY29uZmlndXJlLmluXSBbaW5jbHVkZS9hY2NvbmZpZy5oXSBbaW5jbHVkZS9kZWJ1Z3Rvb2xzLmhdCgkgIFtkb2N1bWVudGF0aW9uL2RlYnVnLW1zZ3NdCglBZGRlZCAnY29uZmlndXJlJyBvcHRpb25zIHRvIGNvbXBpbGUgb3V0IGRlYnVnZ2luZyBtZXNzYWdlcy4KCVVzZSAtLWRpc2FibGUtZGVidWcgdG8gZGlzYWJsZSBhbGwgZGVidWdnaW5nIG1lc3NhZ2VzLCBhbmQKCS0tZGlzYWJsZS10cmFjZSB0byBqdXN0IGRpc2FibGUgVFJBQ0UgbWVzc2FnZXMuICBUaGlzIHJlc3VsdHMKCWluIGEgc3RyaXBwZWQgZXhlY3V0YWJsZSB0aGF0IGlzIDE1LTIwJSBzbWFsbGVyLiAgVGhpcyBvcHRpb24KCWlzIHZlcnkgbXVjaCB1bnRlc3RlZC0tZG9uJ3QgZXhwZWN0IGl0IHRvIHdvcmsuCgoJKiBbZG9jdW1lbnRhdGlvbi9kZWJ1Zy1tc2dzXSBbZG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmddCglNaW5vciB1cGRhdGVzLgoKCSogWyovKi5jXQoJRml4ZWQgc29tZSBjb21waWxlIHdhcm5pbmdzLiAgVGhpcyBhbHNvIGluY2x1ZGVzIHRoZQoJY29tcGlsZV93YXJuaW5nc190cml2aWFsIHBhdGNoIGZyb20gV2luZUhRLgoKVHVlIEp1biAxMCAyMjowMDoxOCAxOTk4ICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoKCSogW3dpbmRvd3Mvc3lzbWV0cmljcy5jXVtpbmNsdWRlL3N5c21ldHJpY3MuaF0KCUZpeGVkIHNvbWUgV2luOTUgdmFsdWVzLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdW2luY2x1ZGUvd2luZG93cy5oXQoJRml4ZWQgc29tZSBXaW45NSBkcmF3aW5nIGJ1Z3MuCglBZGRlZCBleHRlbmRlZCB3aW5kb3cgc3R5bGUgZmxhZ3MgKFdTX0VYX3h4eCkuCgoJKiBbbWlzYy9wcmludGRydi5jXVtyZWxheTMyL3dpbnNwb29sLnNwZWNdCglBZGRlZCBzdHVicyBmb3IgRGVsZXRlUHJpbnRlckRyaXZlcjMyQSwgRGVsZXRlTW9uaXRvcjMyQQoJYW5kIERlbGV0ZVBvcnQzMkEuCgoJKiBbd2luZG93cy9tZGkuY11baW5jbHVkZS93aW5kb3dzLmhdW3JlbGF5MzIvdXNlcjMyLnNwZWNdCglBZGRlZCBzdHVicyBmb3IgQ2FzY2FkZVdpbmRvd3MgYW5kIFRpbGVXaW5kb3dzLgoKCSogW2NvbnRyb2xzL3Rvb2xiYXIuY11baW5jbHVkZS90b29sYmFyLmhdCglGaXhlZCBhIGZldyBidWdzIGFuZCBpbXBsZW1lbnRlZCBuZXcgZmVhdHVyZXMuCgoJKiBbbWlzYy9zaGVsbG9yZC5jXVtyZWxheTMyL3NoZWxsMzIuc3BlY10KCUFkZGVkIHN0dWJzIGZvciBTSEVMTDMyXzYwLCBTSEVMTDMyXzYxIGFuZCBTSEVMTDMyXzE4NC4KCgkqIFtjb250cm9scy9jb21jdGwzMnVuZG9jLmNdW3JlbGF5MzIvY29tY3RsMzIuc3BlY10KCU5ldyBmaWxlIGNvbWN0bDMydW5kb2MuYy4gQ29udGFpbnMgdW5kb2N1bWVudGVkIGZ1bmN0aW9ucwoJb2YgQ09NQ1RMMzIuRExMLiBUaGVzZSBmdW5jdGlvbnMgYXJlIG5lZWRlZCB0byBydW4gRVhQTE9SRVIuRVhFCglJRVhQTE9SRS5FWEUgYW5kIFRBU0tNQU4uRVhFLgoKCSogW2NvbnRyb2xzL3N0YXR1cy5jXQoJQWRkZWQgdGV4dCBhbGlnbm1lbnQuCgpUdWUgSnVuICA4IDIyOjAwOjAwIDE5OTggIEJlcnRobyBTdHVsdGllbnMgPGJlcnRob0Bha2hwaGQuYXUuZGs+CgoJKiBbcHJvZ3JhbXMvKi9NYWtlZmlsZS5pbl0KCUNoYW5nZWQgdGhlIHJ1bGVzIHRvIHVzZSB3cmMgYXMgcmVzb3VyY2UgY29tcGlsZXIgYnV0CglwYXNzaW5nIHRoZSBzb3VyY2UgdGhyb3VnaCBnY2MgZmlyc3QgZm9yIG1hY3JvIGV4cGFuc2lvbi4KCgkqIFtwcm9ncmFtcy8qLyoucmNdCglBZGRlZCAjaW5jbHVkZSAid2luZG93cy5oIiBmb3IgdGhlIHJlc291cmNlIGNvbXBpbGVyIGluIHRoZQoJYXBwcm9wcmlhdGUgZmlsZXMuCgoJKiBbdG9vbHMvd3JjL3dyYy5bY2hdXSBbdG9vbHMvd3JjL3dyaXRlcmVzLmNdCglBZGRlZCBjb21tYW5kbGluZSBvcHRpb24gLUEgZm9yIGF1dG9yZWdpc3RlciBjb2RlLgoJQ29ycmVjdGVkIHRoZSB1bmRlcnNjb3JlIHByb2JsZW0gYnkgY2hlY2tpbmcgdGhlIHByb3BlciBkZWZpbmUKCWZyb20gY29uZmlnLmguCgpTdW4gSnVuICA3IDIyOjA5OjI5IDE5OTggIFBhc2NhbCBDdW9xIDxwY3VvcUBlbnMtbHlvbi5mcj4KCgkqIFtvbGUvb2xlMm5scy5jXSBbbWVtb3J5L3N0cmluZy5jXQoJSW1wcm92ZWQgTENNYXBTdHJpbmczMkEsIGFuZCBjaGFuZ2VkIENvbXBhcmVTdHJpbmczMkEsCglsc3RyY21wLCBsc3RyY21waSB0byB1c2UgaXQuCgpTYXQgSnVuICA2IDE5OjAwOjUwIDE5OTggIE1hcnRpbiBTdHL2bWJlcmcgPGFtc0BsdWRkLmx1dGguc2U+CgoJKiBbaW5jbHVkZS93aW5udC5oXQoJQWRkZWQgdHlwZWRlZnMgZm9yIHNlY3VyaXR5IGFuZCB0b2tlbnMuCgpTYXQgSnVuICA2IDEyOjI2OjMxIDE5OTggIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+CgoJKiBbb2JqZWN0cy90ZXh0LmNdCglVc2UgZGVidWdzdHJfYW4gaW4gRHJhd1RleHQxNi4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCVVzZSBkZWJ1Z3Jlc193IGluIEZpbmRSZXNvdXJjZUV4MzJXLiAgQXZvaWQgY3Jhc2hpbmcgZHVyaW5nCglkZWJ1ZyB3aGVuIHdtIGlzIE5VTEwuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglJbiBSRUxBWV9EZWJ1Z0NhbGxUbzE2LCBzZW5kIG91dHB1dCB0byB0aGUgcmlnaHQgcGxhY2UgYW5kCglhdm9pZCBzaWRlIGVmZmVjdHMgaW4gbWFjcm8gYXJndW1lbnRzLgoKV2VkIEp1biAgMyAyMDo1NjowMyAxOTk4ICBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCgkqIFtjb250cm9scy9zY3JvbGwuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglGaXggc2V2ZXJhbCBvZmYgYnkgb25lIGVycm9ycyBpbiBzY3JvbGxiYXIgcGFpbnRpbmcuCgpUdWUgSnVuICAyIDIzOjU4OjU5IDE5OTggIEluc29tbmlhIChTdGVhIEdyZWVuZSkgPGluc29tbmlhQGNvcmUuYmluZ2hhbXRvbi5lZHU+CgoJKiBbZ3JhcGhpY3MvZHNvdW5kLmNdCglSZXdyb3RlIG1peGVyIGNvZGUgdG8gaGFuZGxlIHBhbm5pbmcgYW5kIHZvbHVtZSBmb3IgMTYtPjE2LCAxNi0+OCwKCTgtPjE2LCBhbmQgOC0+OCBiaXQgbWl4ZXMuICBDb25mb3JtcyB0byBEaXJlY3RYJ3MgImxvZ2FyaXRobWljCgloZWFyaW5nIHNjYWxlIiBhcyBzcGVjaWZpZWQgaW4gTSRWQyBkb2NzLiAgU3RpbGwgZG9lcyBub3QgaGFuZGxlCgltaXhpbmcgb2YgZGlmZmVyZW50IGZyZXF1ZW5jaWVzIChJIGFtIHN0aWxsIHdvcmtpbmcgb24gdGhhdCkuIAoJVGVzdGVkIDE2LT4xNiBleHRlbnNpdmVseSB3aXRoIFN0YXJDcmFmdC4gIE90aGVyIG1peGluZyBjb21iaW5hdGlvbnMKCXVudGVzdGVkIGJ1dCBzaG91bGQgd29yayBmaW5lLiAgU3RpbGwga2luZCBvZiBhIHdvcmsgaW4gcHJvZ3Jlc3MsCglzbyBiZSB3YXJuZWQuCgpUdWUgSnVuICAyIDAzOjMxOjMzIDE5OTggIEFsZXhhbmRlciBWLiBMdWt5YW5vdiA8bGF2QGxvbmcueWFyLnJ1PgoKCSogW3Rvb2xzL3dyYy91dGlscy5jXQoJZHVwX2Jhc2VuYW1lOiBmaXggdG8gc3RyaXAgZGlyZWN0b3J5LgoKTW9uIEp1biAgMSAyMDowMDowMCAxOTk4ICBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW29iamVjdHMvY3Vyc29yaWNvbi5jXSBbcmVsYXkzMi91c2VyMzIuc3BlY10KCUFkZGVkIHN0dWJzIExvYWRDdXJzb3JGcm9tRmlsZVcgYW5kIExvYWRDdXJzb3JGcm9tRmlsZUEuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBNYXkgMzEgMTM6NDA6MTMgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbaWYxNjMyL3NpZ25hbC5jXQoJQWRkZWQgZGlzcGxheSBvZiBleGNlcHRpb24gbmFtZS4KCgkqIFtsb2FkZXIvdGFzay5jXQoJWWV0IGFub3RoZXIgYXR0ZW1wdCBhdCBmaXhpbmcgU3dpdGNoU3RhY2tUby9Td2l0Y2hTdGFja0JhY2suCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdIFtyZWxheTMyL2J1aWx0aW4zMi5jXSBbdG9vbHMvYnVpbGQuY10KCSAgW3dpbjMyL2tlcm5lbDMyLmNdCglHZW5lcmF0ZSBhbiBhc3NlbWJseSBzdHViIGZvciBXaW4zMiByZWdpc3RlciBmdW5jdGlvbnMgdG8gbWFrZQoJdGhlaXIgbmFtZXMgYXZhaWxhYmxlIGF0IGxpbmsgdGltZS4KCgkqIFtwcm9ncmFtcy8qL01ha2VmaWxlLmluXQoJQWRkZWQgaGFja3MgdG8gc3VwcG9ydCBvbGQgcmVzb3VyY2UgY29tcGlsZXIuCgpGcmkgTWF5IDI5IDE2OjI3OjE0IDE5OTggIE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoKCSogW3Rvb2xzL3Rlc3RydW5dCglNZXJnZSBvZiBteSB0ZXN0c2NyaXB0cyBhdCBob21lIGludG8gb25lIHNpbmdsZSBwZXJsIHByb2dyYW0KCSh0ZXN0ZWQgd2l0aCBwZXJsNSkuIFdvcmtzIG9ubHkgb24gTGludXggZHVlIHRvICdwcycgYW5kICdpcGNzJwoJbWFnaWMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJQWRkZWQgc29tZSBEZWZhdWx0TWVudUl0ZW0gc3R1YnMuCgoJKiBbZGVidWdnZXIvc3RhYnMuY10KCUZpeGVkIHN0YWJzIGxvYWRpbmcsIG5vdyBzdXBwb3J0cyAoaW50LGludCkgdHlwZWluZm8gZm9ybWF0IHVzZWQKCWJ5IGdjYy0yLjggYW5kIGVnY3MtMS4gSWYgaXQgc3RpbGwgY3Jhc2hlcywgcGxlYXNlIG1haWwgbWUuCgoJKiBbaWYxNjMyL11bcmVsYXkzMi9dCglBZGRlZCBtc3ZpZGVvLmRsbCAoc3R1YnMgb25seSkKCVJlcGxhY2VkIHNvbWUgcHRyIGJ5IHN0ciBmb3Igc3RyaW5nY2FzZXMKCUFkZGVkIHNvbWUgbmV3IHN0dWJzIChWeERDYWxsLCBGaW5kQ2xvc2VOb3RpZi4uLi4pCgoJKiBbbWlzYy9uZXR3b3JrLmNdCglTb21lIGFyZ3VtZW50IGZpeGVzLgoKCSogW21pc2MvcmVnaXN0cnkuY11bbWlzYy9jcHUuY10KCVJlZ2lzdHJ5IGluaXRpYWxpemF0aW9uIHBhcnRpYWxseSByZXdyaXR0ZW4gYW5kIGVuaGFuY2VkLgoKCSogW3NjaGVkdWxlci8qLmNdCglTb21lIGFkZGl0aW9ucyBzbyB3ZSBkb24ndCBkbyBraWxsKDAsU0lHVVNSMSkgKGtpbGwgcHJvY2Vzc2dyb3VwCglpbnN0ZWFkIG9mIHRhcmdldGVkIHRocmVhZCkKCUFkZGVkIFNldFRocmVhZENvbnRleHQuCgpUaHUgTWF5IDI4IDIzOjU5OjU5IDE5OTggIEJlcnRobyBTdHVsdGllbnMgPGJlcnRob0Bha2hwaGQuYXUuZGs+CgoJKiBbdG9vbHMvd3JjLypdCglOZXcgcmVzb3VyY2UgY29tcGlsZXIgdmVyc2lvbiAxLjAuMCAoMjgtTWF5LTE5OTgpCgoJKiBbTWFrZS5ydWxlcy5pbl0gW01ha2VmaWxlLmluXQoJQ2hhbmdlZCBhbmQgYWRkZWQgcmMgcnVsZXMgdG8gcG9pbnQgdG8gdG9vbHMvd3JjL3dyYy4KCgkqIFtjb25maWd1cmUuaW5dIFtpbmNsdWRlL2NvbmZpZy5oLmluXQoJQWRkZWQgY2hlY2sgZm9yIGZ1bmN0aW9uICdzdHJpY21wJy4KCgkqIFtpbmNsdWRlL3Jlc291cmNlLmhdCglDb21tZW50ZWQgb3V0IHRoZSBvbGQgcmVzb3VyY2Ugc3RydWN0dXJlIHRvIGNhdGNoIHJlZmVyZW5jZXMuCglJdCBhbHNvIGluY2x1ZGVzIHdyY19yc2MuaC4KCgkqIFtpbmNsdWRlL3dyY19yc2MuaF0KCU5ldyBmaWxlLiBEZWZpbml0aW9ucyBmb3IgdGhlIHJlc291cmNlcyBnZW5lcmF0ZWQgd2l0aCB3cmMuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCAjaWZkZWYgUkNfSU5WT0tFRCB0byBleGNsdWRlIHN0ZGFyZy5oLgoJQWRkZWQgU1NfTk9USUZZIGZsYWcuCgoJKiBbaW5jbHVkZS93aW5ubHMuaF0KCUFkZGVkIFNVQkxBTkdfKiBkZWZpbml0aW9ucyBhbmQgY29ycmVjdGVkIHNvbWUgZGVmYXVsdHMuCgoJKiBbbG9hZGVyL2xpYnJlcy5jXQoJQ2hhbmdlZCB0aGUgc3lzcmVzIGxvYWQgZnVuY3Rpb25zIHRvIHN1cHBvcnQgd3JjIGdlbmVyYXRlZAoJcmVzb3VyY2VzLgoKCSogW3Jlc291cmNlL3N5c3Jlc18qLnJjXQoJQWRkZWQgI2luY2x1ZGUgPHdpbmRvd3MuaD4KCgkqIFtyZXNvdXJjZS9zeXNyZXMuY10KCUNoYW5nZWQgZGVjbGFyYXRpb25zIHRvIG1hdGNoIHdyYydzIG91dHB1dAoKCSogW3Jlc291cmNlL01ha2VmaWxlLmluXQoJQ2hhbmdlZCBydWxlcyB0byB3b3JrIHdpdGggd3JjLgoKCSogW3Rvb2xzL21ha2VkZXAuY10KCUNoYW5nZWQgZ2VuZXJhdGlvbiBvZiAucmMgZmlsZSBkZXBlbmRlbmNpZXMgdG8gLnMgdGFyZ2V0LgoKVGh1IE1heSAyOCAyMjoyODozOSAxOTk4ICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoKCSogW2ZpbGVzL2ZpbGUuY11baW5jbHVkZS93aW5kb3dzLmNdW3JlbGF5MzIva2VybmVsMzIuc3BlY10KCUltcGxlbWVudGVkIEdldEZpbGVBdHRyaWJ1dGVzRXgzMkEvVy4KCgkqIFttaXNjL2ltYWdlbGlzdC5oXVtpbmNsdWRlL2NvbW1jdHJsLmhdW3JlbGF5MzIvY29tY3RsMzIuc3BlY10KCUFkZGVkIEltYWdlTGlzdF9SZWFkIGFuZCBJbWFnZUxpc3RfV3JpdGUgc3R1YnMuCglBZGRlZCBJbWFnZUxpc3RfQWRkSWNvbiBmdW5jdGlvbi4KCUFkZGVkIEltYWdlTGlzdF9Mb2FkSW1hZ2UuIEl0IGlzIHRoZSBzYW1lIGFzIEltYWdlTGlzdF9Mb2FkSW1hZ2UzMkEuCgoJKiBbY29udHJvbHMvaGVhZGVyLmNdCglGaXhlZCBiaXRtYXAgZHJhd2luZyBidWcuCglBZGRlZCBmdWxsIGJpdG1hcCBzdXBwb3J0LgoKCSogW2luY2x1ZGUvY29tbWN0cmwuaF0KCUFkZGVkIG1pc3NpbmcgaGVhZGVyIG1hY3Jvcy4KCgkqIFtjb250cm9scy90b29sYmFyLmNdW2luY2x1ZGUvdG9vbGJhci5oXVtpbmNsdWRlL2NvbW1jdHJsLmhdCgkgIFtjb250cm9scy9jb21tY3RybC5jXSBbcmVsYXkzMi9jb21jdGwzMi5zcGVjXQoJRmlyc3QgaW1wbGVtZW50YXRpb24gb2YgdG9vbGJhciBjb250cm9sLgoJSW1wbGVtZW50ZWQgQ3JlYXRlVG9vbGJhciwgQ3JlYXRlVG9vbGJhckV4IGFuZCBDcmVhdGVNYXBwZWRCaXRtYXAuCgoJKiBbY29udHJvbHMvcHJvZ3Jlc3MuY11bY29udHJvbHMvc3RhdHVzLmNdCglTb21lIGNvZGUgY2xlYW51cC4KCgkqIFtjb250cm9scy9jb21tY3RybC5jXVtpbmNsdWRlL2NvbW1jdHJsLmhdW3JlbGF5MzIvY29tY3RsMzIuc3BlY10KCVJlbW92ZWQgQ3JlYXRlU3RhdHVzV2luZG93MTYgYW5kIERyYXdTdGF0dXNUZXh0MTYuCglDcmVhdGVTdGF0dXNXaW5kb3cgaXMgdGhlIHNhbWUgYXMgQ3JlYXRlU3RhdHVzV2luZG93MzJBLgoJRHJhd1N0YXR1c1RleHQgaXMgdGhlIHNhbWUgYXMgRHJhd1N0YXR1c1RleHQzMkEuCgpUaHUgTWF5IDI4IDE2OjAxOjI4IDE5OTggIE1hdHRoZXcgSi4gRnJhbmNpcyAgPGFzYmVsQGRpYWwucGlwZXguY29tPgoKCSogW29iamVjdHMvYml0bWFwLmNdIFtvYmplY3RzL2JpdG1hcC5oXSBbb2JqZWN0cy9vZW1iaXRtYXAuY10KCSAgW29iamVjdHMvZGMuY10gW2dyYXBoaWNzL3gxMWRydi9iaXRibHQuY10KCUFkZGVkIHBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgQ3JlYXRlRElCU2VjdGlvbiwgd2l0aCBncmVhdCB0aGFua3MKCXRvIFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPiBmb3IKCWNvbnRyaWJ1dGluZyB0aGUgYnVsayBvZiB0aGUgcGF0Y2guCgpXZWQgTWF5IDI3IDE5OjA0OjMxIDE5OTggIFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW3dpbjMyL2tlcm5lbDMyLmNdIFtpZjE2MzIvdGh1bmsuY10gW2luY2x1ZGUvZmxhdHRodW5rLmhdCglUaHVua0Nvbm5lY3QxNiBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgbW92ZWQgdG8gZW11bGF0b3IuCgoJKiBbbG9hZGVyL25lL3NlZ21lbnQuY10KCUNhbGwgRGxsRW50cnlQb2ludCB3aXRoIGNvcnJlY3QgYXJndW1lbnRzLgoKCSogW3JlbGF5MzIvYnVpbHRpbjMyLmNdCglCdWdmaXg6IFJlbGF5IGRlYnVnZ2luZyBkaWQgbm90IHdvcmsgZm9yIG11bHRpcGxlIHByb2Nlc3Nlcy4KCgkqIFtjb250cm9scy9tZW51LmNdCglCdWdmaXg6IGR3SXRlbURhdGEgd2FzIG5vdCBzZXQgZm9yIE1GX09XTkVSRFJBVyBtZW51cy4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW3JlbGF5MzIvcmVsYXkzODYuY10KCVJlbGF5IG1lc3NhZ2VzIGNvbnZlcnRlZCB0byB1c2UgRFBSSU5URi4KCgkqIFtjb250cm9scy9kZXNrdG9wLmNdIFtyZWxheTMyL3VzZXIzMi5zcGVjXQoJSW1wbGVtZW50ZWQgUGFpbnREZXNrdG9wLgoKCSogW2ZpbGVzL3Byb2ZpbGUuY10gW2lmMTYzMi9rZXJuZWwuc3BlY10gW21pc2MvbmV0d29yay5jXQoJICBbbWlzYy9wcmludGRydi5jXSBbcmVsYXkzMi93aW5zcG9vbC5zcGVjXSAKCSAgW3dpbjMyL29yZGluYWxzLmNdIFtyZWxheTMyL2tlcm5lbDMyLnNwZWNdCglTb21lIHN0dWJzIGFkZGVkLgoKCSogW3JlbGF5MzIvbXByLnNwZWNdCglBbGwgb3JkaW5hbHMgd2VyZSBvZmYgYnkgb25lLgoKVHVlIE1heSAyNiAxMzozMjo1NyAxOTk4ICBCaWxsIEhhd2VzIDx3aGF3ZXNAc3Rhci5uZXQ+CgoJKiBbbWlzYy9sc3RyLmNdIFtpbmNsdWRlL2Nhc2VtYXAuaF0gW3Rvb2xzL3VuaW1hcC5wbF0KCUFkZGVkIFVuaWNvZGUgY2FzZSBjb252ZXJzaW9uIHJvdXRpbmVzIHRvd3VwcGVyL3Rvd2xvd2VyLAoJd2l0aCBtYXBwaW5nIHRhYmxlcyBjYXNlbWFwLmggY3JlYXRlZCBieSB0b29scy91bmltYXAucGwuCgoJKiBbbWlzYy9udGRsbC5jXSBbaW5jbHVkZS93aW5ubHMuaF0gW3JlbGF5MzIvbnRkbGwuc3BlY10KCSAgW3JlbGF5MzIvYWR2YXBpLnNwZWNdCglNaW5pbWFsIGltcGxlbWVudGF0aW9uIG9mIElzVGV4dFVuaWNvZGUsIGp1c3QgZW5vdWdoIHRvIGdldAoJTlQ0IG5vdGVwYWQgdG8gb3BlbiBhc2NpaS91bmljb2RlIGZpbGVzLgoKCSogW01ha2UucnVsZXMuaW5dIFtyZXNvdXJjZXMvc3lzcmVzX0VuLnJjXQoJQWRkZWQgaW5jbHVkZSBmaWxlIGRsZ3MuaCBmb3IgYnVpbGRpbmcgcmVzb3VyY2UgZmlsZXMsIHNvIHRoYXQKCXJlc291cmNlcyBjYW4gcmVmZXIgdG8gZGVmaW5lZCB2YWx1ZXMgKGUuZy4gcHNoSGVscCkuCgoJKiBbbWlzYy9jcnRkbGwuY10gW3JlbGF5MzIvY3J0ZGxsLnNwZWNdCglVc2UgdG93dXBwZXIvdG93bG93ZXIgZm9yIDMyVyBjYXNlIGNvbnZlcnNpb25zLgoKCSogW21lbW9yeS9zdHJpbmcuY10KCVVzZSB0b3d1cHBlciBmb3IgMzJXIGNhc2UgY29udmVyc2lvbnMuCgoJKiBbb2xlL29sZTJubHMuY10KCVVzZSB0b3d1cHBlciBmb3IgMzJXIGNhc2UgY29udmVyc2lvbnM7IGZpeCBtZW0gbGVhazsgbWlub3IgY2xlYW51cAoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUFkZGVkIHNvZnQgYnJlYWsgZmxhZyB0byBlZGl0IHN0YXRlLiBQcmludCB1bmtub3duIGFjdGlvbiB2YWx1ZXMKCWZvciBXTV9WU0NST0xMIChhY3Rpb24gMTkwIG9jY3VycyB3aGVuIHJ1bm5pbmcgTlQ0IG5vdGVwYWQuKQoKTW9uIE1heSAyNSAyMjo0Mjo0MCAxOTk4ICBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CgoJKiBbZmlsZXMvZmlsZS5jXQoJQ2FyZSBmb3IgYSBwYXRob2xvZ2ljYWwgY2FzZSBpbiBTZXRGaWxlUG9pbnRlci4KCgkqIFtncmFwaGljcy94MTFkcnYveGZvbnQuY10KCUhhbmRsZSBsb25nZXIgRm9udCBuYW1lcyBpbiBMRkRfQ29tcG9zZUxGRCBhbmQgdHJ5IHRvIGNhdGNoIGVycm9ycy4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCVVubG9hZCBEdW1teW1vZHVsZSB3aGVuIFBFX0xvYWRMaWJyYXJ5RXgzMkEgZmFpbHMgd2l0aAoJUEVfTG9hZEltYWdlIChtYWtlcyBFbmNhcnRhIDk4IGluc3RhbGxlciBwcm9jZWVkKS4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglNb3ZlIGEgY2hlY2sgZm9yIGEgc3BlY2lhbCBjYXNlIGluIFJlZ0NyZWF0ZUtleUV4MzJXIGFmdGVyIHRoZQoJY2hlY2sgZm9yIGV4aXN0ZW5jZS4KClR1ZSBNYXkgMjUgMjA6MTg6MjYgMTk5OCAgTWF0dGhldyBCZWNrZXIgPG1iZWNrZXJAZ2xhc3NjaXR5Lm5ldD4KCgkqIFttaXNjL250ZGxsLmNdCglBZGRlZCBzb21lIHN0dWJzLCBqdXN0IGd1ZXNzaW5nIGF0IHRoZSBzaXplIG9mIHRoZWlyIHBhcmFtIGxpc3RzLgoKCSogW21pc2MvcmVnaXN0cnkuY10KCUFkZGVkIHN0dWJzIGZvciBSZWdVbkxvYWRLZXksIFJlZ1NldEtleVNlY3VyaXR5LCBSZWdTYXZlS2V5LAoJUmVnUmVzdG9yZUtleSwgYW5kIFJlZ1JlcGxhY2VLZXkKCgkqIFtwcm9ncmFtcy9yZWd0ZXN0L3JlZ3Rlc3QuY10KCVVwZGF0ZWQgcmVnaXN0cnkgdGVzdGluZyBwcm9ncmFtLgoKU3VuIE1heSAyNCAxODoxMTo0MCAxOTk4ICBBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgoKCSogW2ZpbGUvcHJvZmlsZS5jXQoJQWRkZWQgZmxhZyAncmV0dXJuX3ZhbHVlcycgdG8gUFJPRklMRV9HZXRTZWN0aW9uLgoKU3VuIE1heSAyNCAxMzo0MToxMCAxOTk4ICBKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CgoJKiBbbWlzYy9zaGVsbC5jXSBbZmlsZXMvZGlyZWN0b3J5LmNdCglEb2N1bWVudGF0aW9uL2RlYnVnZ2luZyBpbmZvIGFkZGl0aW9ucy4KCgkqIFsqLyouY10gW2luY2x1ZGUvKi5oXQoJTW92ZWQgbWFueSBleHRlcm4gZnVuY3Rpb24gZGVmaW5pdGlvbnMgdG8gYXBwcm9wcmlhdGUgaGVhZGVyIGZpbGVzLgoJQ2xlYW5lZCB1cCBhIGZldyBjb21waWxlIHdhcm5pbmdzLgoJSWYgI2luY2x1ZGUgImRlYnVnLmgiIGlzIHByZXNlbnQsIHJlbW92ZWQgI2luY2x1ZGUgPHN0ZGlvLmg+LgoJZGVidWcuaCBpbmNsdWRlcyBzdGRpby5oLCBzbyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGluY2x1ZGUgYm90aC4KCgkqIFtncmFwaGljcy8qLmNdIFtpZjE2MzIvc2lnbmFsLmNdIFtpcGMvKi5jXSBbc2NoZWR1bGVyLyouY10KCSAgW3dpbjMyLyouY10gW3dpbmRvd3MvKi5jXQoJRmluYWwgcGF0Y2ggdG8gY29udmVydCBmcHJpbnRmIHN0YXRlbWVudHMgdG8gbmV3IGRlYnVnZ2luZyBpbnRlcmZhY2UuCglTb21lIGZwcmludGZzIGFyZSBzdGlsbCBsZWZ0LCBlc3BlY2lhbGx5IGluIHRoZSBkZWJ1Z2dlci8gZGlyZWN0b3J5LgoJSG93ZXZlciwgSU1ITywgaXQncyBub3Qgd29ydGggdGhlIGVmZm9ydCB0byBjaGFuZ2UgdGhlIHJlc3QuCgpGcmkgTWF5IDIyIDIxOjU4OjM1IDE5OTggIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+CgoJKiBbd2luZG93cy9rZXlib2FyZC5jXQoJQ29ycmVjdCBoYW5kbGluZyBvZiBrZXlzICJgLT1bXVw7JywuLyIuCgpGcmkgTWF5IDIyIDEyOjA2OjAwIDE5OTggIFBlciBMaW5kc3Ry9m0gPHBlbGluc3RyQGFsZ29uZXQuc2U+CgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdIFtyZWxheTMyL2tlcm5lbDMyLnNwZWNdIFt3aW4zMi9jb25zb2xlLmNdCglBZGRlZCBzdHViIGZvciBSZWFkQ29uc29sZU91dHB1dENoYXJhY3RlcjMyQS4KClRodSBNYXkgMjEgMTY6NDU6NDggMTk5OCAgUGFzY2FsIEN1b3EgPHBjdW9xQGVucy1seW9uLmZyPgoKCSogW29sZS9vbGUybmxzLmNdCglCZWdhbiBiZXR0ZXIgaW1wbGVtZW50YXRpb24gb2YgTENNYXBTdHJpbmczMkEuCglOb3QgdmVyeSB3ZWxsIHRlc3RlZCB5ZXQsIGFuZCBzdGlsbCBuZWVkIGltcHJvdmVtZW50cy4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCURvY3VtZW50ZWQgZnVuY3Rpb25zLgoKV2VkIE1heSAyMCAyMTozNzo1NiAxOTk4ICBQZXRlciBIdW5uaXNldHQgPGh1bm5pc2VAbm9ydGVsLmNhPgoKCSogW2luY2x1ZGUvd2luZG93cy5oXVttaXNjL21haW4uY10KCUNoYW5nZSBTeXN0ZW1QYXJhbWV0ZXJJbmZvIHRvIHN1cHBvcnQgU1BJX0dFVEhJR0hDT05UUkFTVC4gQWxzbwoJaW5jbHVkZSBzb21lIG1pc3NpbmcgU1BJXyBkZWZpbml0aW9ucy4KCgkqIFtpbmNsdWRlL2Rzb3VuZC5oXVttdWx0aW1lZGlhL2Rzb3VuZC5jXVtyZWxheTMyL2RwbGF5eC5zcGVjXQoJQWRkZWQgc3R1YnMgZm9yIERpcmVjdFBsYXlMb2JieUNyZWF0ZVtBV10uIE5vdCBzdXJlIGlmIHRoZXNlCglzaG91bGQgZ28gaW50byBhIG5ldyBmaWxlcyBkcGxheXguYz8gQW55b25lIGNhcmU/CgoJKiBbaW5jbHVkZS93aW5ubHMuaF0KCUFkZGVkIHR3byBtaXNzaW5nIGZsYWdzIGZvciB0aGUgQ29tcGFyZVN0cmluZzMyIGZ1bmN0aW9ucy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE1heSAxNyAxNjoyMzo1NiAxOTk4ICBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CgoJKiBbZmlsZS9wcm9maWxlLmNdCglGaXggdGhlIHJldHVybiB2YWx1ZSBvZiBQUk9GSUxFX0dldFNlY3Rpb24KCgkqIFttaXNjL2NydGRsbC5jXQoJRG8gX2dldGRyaXZlLCBmaXggX2NoZHJpdmUuCgoJKiBbbWlzYy9jb21tZGxnLmNdCglGaXJzdCBjdXQgYXQgQ2hvb3NlQ29sb3JbV0FdLgoKCSogW21pc2MvbmV0d29yay5jXQoJRG8gc29tZXRoaW5nIHNlbnNpYmxlIGZvciBXTmV0R2V0RGlyZWN0b3J5VHlwZTE2LgoKU3VuIE1heSAxNyAxMDoyMTozNSAxOTk4ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFtjb250cm9scy9tZW51LmNdCglGaXhlZCBkaXNhYmxlZCBzdWIgbWVudXMgd2l0aCBNRl9CWVBPU0lUSU9OIHRoYXQgd2VyZSBub3QgZGlzYWJsZWQuCgoJKiBbbWlzYy9jcnRkbGwuY10gW3JlbGF5MzIvY3J0ZGxsLnNwZWNdIFtpbmNsdWRlL3dpbmVycm9yLmhdCglJbXBsZW1lbnRlZCBmc2NhbmYsIGZzZXRwb3MsIF9hY2Nlc3MsIF9mcHJlc2V0ICh0aGFua3MgdG8gVXdlIEJvbm5lcyksCglhbmQgX2x0b2EuIAoKCSogW2xvYWRlci90YXNrLmNdCglNYWtlUHJvY0luc3RhbmNlOiBtdXN0IHVzZSBDVVJSRU5UX0RTIGlmIGhJbnN0ID09IE5VTEwuCgoJKiBbbWlzYy9zaGVsbC5jXQoJU0hFTExfR2V0UmVzb3VyY2VUYWJsZSwgSW50ZXJuYWxFeHRyYWN0SWNvbjogZml4ZWQgYnJva2VuIC5JQ08gaGFuZGxpbmcKCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJRGVmZXJXaW5kb3dQb3M6IHJlbW92ZWQgInNhbWUgcGFyZW50IiByZXF1aXJlbWVudC4KCVdoaWNoIGRvYyBzdGF0ZXMgdGhhdCB0aGlzIGlzIHJlcXVpcmVkID8KClNhdCBNYXkgMTYgMjA6MDg6MTEgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbbG9hZGVyL21vZHVsZS5jXSBbbG9hZGVyL25lL21vZHVsZS5jXQoJTW9yZSBORSBtb2R1bGUgY2xlYW51cHMuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUZpeGVkIFN3aXRjaFN0YWNrQmFjaygpLgoKRnJpIE1heSAxNSAxMDowNDoyNyAxOTk4ICBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCgkqIFtjb25maWd1cmUuaW5dW2lubGN1ZGUvYWNjb25maWcuaF0KCUZpeGVkIGJyb2tlbiBPU1MgY2hlY2ssIGFkZGVkIGNoZWNrIGZvciB3b3JraW5nIHNpZ2FsdHN0YWNrLAoJZml4ZWQgYnJva2VuIHN0YXRmcyBjaGVja3Mgb24gc29tZSBsaW51eCBzeXN0ZW1zLgoKCSogW2ZpbGVzL2RpcmVjdG9yeS5jXVtsb2FkZXIvcGVfaW1hZ2UuY11bcmVsYXkzMi9idWlsdGluLmNdCgkgIFtsb2FkZXIvbW9kdWxlLmNdCglBZGRlZCBoYW5kbGluZyBvZiB3aW4zMiBtb2R1bGUgcGF0aG5hbWVzLgoKCSogW3JlbGF5MzIvd25hc3BpMzIuc3BlY10KCU5ldyBmaWxlLgoKCSogW21pc2MvbHpleHBhbmQuY10KCUxaQ29weSBhdXRvLWRlY29tcHJlc3NlcyBMWiBjb21wcmVzc2VkIGZpbGVzLCBldmVuIGlmIHRoZXkgYXJlIG5vdAoJc3BlY2lhbGx5IGZsYWdnZWQuIEZpeGVzIHNvbWUgSW5zdGFsbFNoaWVsZCBwcm9ibGVtcy4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglTb21lIGZpeGVzIGZvciBSZWdRdWVyeUluZm9LZXkgKHJlZmVyZW5jZSBwcm9ncmFtIG1vbmtleS5leGUKCWZyb20gV2luMzIgU0RLIHdvcmtzIG5vdyBiZXR0ZXIpLiBQcm9iYWJseSBzdGlsbCBoYXMgZmF1bHRzLgoKRnJpIE1heSAxNSAwODo1ODo1OCAxOTk4ICBNYXJ0aW4gQm9laG1lIDxib2VobWVAaW5mb3JtYXRpay5tdS1sdWViZWNrLmRlPgoKCSogW2dyYXBoaWNzL21hcHBpbmcuY10gW2luY2x1ZGUvZGMuaF0gW2luY2x1ZGUvZ2RpLmhdIFtvYmplY3RzL2RjLmNdCglSZXdvcmtlZCB0aGUgd2F5IHdvcmxkIHRyYW5zZm9ybWF0aW9ucyBhbmQgbWFwcGluZyBtb2RlcyBhcmUgaGFuZGxlZAoJc28gdGhhdCBib3RoIG9mIHRoZXNlIHRyYW5zZm9ybWF0aW9ucyBjYW4gYmUgY29tcHV0ZWQgaW4gYSBzaW5nbGUKCXN0ZXAuCgoJKiBbZ3JhcGhpY3MvcGFpbnRpbmcuY10gW2dyYXBoaWNzL3BhdGguY10gW2luY2x1ZGUvcGF0aC5oXQoJTW9yZSBHREkgcGF0aCBzdXBwb3J0LgoKCSogW2dyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jXQoJRml4ZWQgdGhlIHJldHVybiB2YWx1ZSBvZiBHUkFQSF9EcmF3QXJjIGZvciB0aGUgemVybyBoZWlnaHQgLwoJemVybyB3aWR0aCBjYXNlIHRvIHJlZmxlY3QgV2luZG93cycgYmVoYXZpb3VyLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXSBbcmVsYXkzMi9nZGkzMi5zcGVjXSBbb2JqZWN0cy9kYy5jXQoJSW1wbGVtZW50ZWQgTW9kaWZ5V29ybGRUcmFuc2Zvcm0gYW5kIENvbWJpbmVUcmFuc2Zvcm0uCgpUdWUgTWF5IDE0IDE4OjAzOjQ2IDE5OTggIEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CgoJKiBbY29udHJvbHMvY29tbWN0cmwuY11bcmVsYXkzMi9jb21jdGwzMi5zcGVjXQoJICBbY29udHJvbHMvKi5jXVtpbmNsdWRlLyouaF0KCUltcGxlbWVudGVkIEluaXRDb21tb25Db250cm9sc0V4IChkbGwgdmVyc2lvbiA0LjcyIGNvbXBhdGlibGUpLgoJSW5pdENvbW1vbkNvbnRyb2xzIGNhbGxzIEltYWdlQ29tbW9uQ29udHJvbHNFeC4KCVJlZ2lzdGVyaW5nIGNvZGUgb2YgdGhlIGNvbW1vbiBjb250cm9scyBoYWQgdG8gYmUgY2hhbmdlZAoJKHNlZSBYWFhYX1JlZ2lzdGVyIGZ1bmN0aW9ucykuCgoJKiBbY29udHJvbHMvc3RhdHVzLmNdW2luY2x1ZGUvY29tbWN0cmwuaF1baW5jbHVkZS9zdGF0dXMuaF0KCUltcGxlbWVudGVkIG1vc3QgbmV3IGZlYXR1cmVzIGFuZCBmaXhlZCB0aGUgbG9vayBhbmQgZmVlbC4KCgkqIFtjb250b2xzL2NvbW1jdHJsLmNdW2luY2x1ZGUvY29tbWN0cmwuaF1bcmVsYXkzMi9jb21jdGwzMi5zcGVjXQoJSW1wbGVtZW50ZWQgTWVudUhlbHAgKGluY29tcGxldGUpLgoKCSogW2NvbnRyb2xzL3N0YXR1cy5jXVtjb250cm9scy9wcm9ncmVzcy5jXQoJQ2hhbmdlZCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGZvciBjb250cm9sIHNwZWNpZmljIG1lbW9yeS4KCgkqIFtjb250cm9scy9oZWFkZXIuY11baW5jbHVkZS9oZWFkZXIuaF1baW5jbHVkZS9jb21tY3RybC5oXQoJRmlyc3QgaW1wbGVtZW50YXRpb24gb2YgaGVhZGVyIGNvbnRyb2wuCgoJKiBbd2luZG93cy9kZWZ3bmQuY11bd2luZG93cy9zeXNjb2xvcnMuY10KCUZpeGVkIGRlZmF1bHQgY29udHJvbCBjb2xvcnMgZm9yIFdpbjk1IGxvb2suCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUZpeGVkIG9mZiBieSBvbmUgZXJyb3IgZm9yIFdpbjk1IGxvb2suIFRvcCBib3JkZXIgb2YgY2hpbGQgd2luZG93cwoJc2hvdWxkIGJlIHZpc2libGUuCgoJKiBbbWlzYy9pbWFnZWxpc3QuaF0KCUltcHJvdmVkIGRvY3VtZW50YXRpb24gYW5kIGZpeGVkIHNvbWUgYnVncy4KClRodSBNYXkgMTQgMTU6NDI6MjEgMTk5OCAgUm9iZXJ0IFdpbGhlbG0gIDxyb2JlcnRAcGh5c2lvbC5tZWQudHUtbXVlbmNoZW4uZGU+CgoJKiBbcmVsYXkzMi9jcnRkbGwuc3BlY10KCUFkZGVkIGh5cG90LGowLGoxLGpuIGFuZCBjZWlsLgoKV2VkIE1heSAxMyAxOToxMDoxMCAxOTk4ICBQYXNjYWwgQ3VvcSA8cGN1b3FAZW5zLWx5b24uZnI+CgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJSXRlbSBoZWlnaHQgaXMgbm93IGV4YWN0bHkgZm9udCBoZWlnaHQuCglXaW5lIGxpc3Rib3hlcyBub3cgYmVoYXZlIGxpa2UgV2luZG93cycgd2hlbiB0aGV5IGFyZSAKCWNyZWF0ZWQgd2l0aG91dCBXU19WU0NST0xMIGJ1dCB0aGUgcHJvZ3JhbSBzdWJzZXF1ZW50bHkgCgljYWxscyBTaG93U2Nyb2xsQmFyIG9yIFNldFNjcm9sbEluZm8uCgpXZWQgTWF5IDEzIDE4OjMzOjAxIDE5OTggIFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW3JlbGF5MzIvcmVsYXkzODYuY10KCVJlc3RvcmUgRVMgYWxzbyBpbiB0aGUgbm9uLWRlYnVnIGNhc2UuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQnVnZml4OiBCbG9ja2luZyBUU1hOZXh0RXZlbnQgY291bGQgZGVhZGxvY2sgV2luZS4KCgkqIFt3aW4zMi9wcm9jZXNzLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCVNpbGx5IHN0dWJzIGZvciBNc2dXYWl0Rm9yTXVsdGlwbGVPYmplY3RzIC8gUG9zdFRocmVhZE1lc3NhZ2UKCXRoYXQgbWFrZSBzb21lIHByb2dyYW1zIHJ1biBiZXR0ZXIuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdCglXSU5QUk9DX01hcE1zZzMyQXRvMTYvMTZUbzMyQTogYWRkZWQgV01fTk9USUZZLiAgCgogICAgICAgICogW3dpbjMyL2tlcm5lbDMyLmNdCglBZGRlZCAxNi0+MzIgdGh1bmtpbmcgYW5kIGltcHJvdmVkIDMyLT4xNiB0aHVua2luZyBmdW5jdGlvbnMuCgoJKiBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIG5ldyB2YXJpYW50IG9mIENhbGxGcm9tMTYgc3R1YiBmb3IgdXNlIHdpdGggV2luOTUgdGh1bmtzLgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2lmMTYzMi9idWlsdGluLmNdIFt3aW4zMi9rZXJuZWwzMi5jXQoJQWRkZWQgYSBmZXcgdW5kb2N1bWVudGVkIEtFUk5FTCBmdW5jdGlvbnMuCgoJKiBbbG9hZGVyL25lL21vZHVsZS5jXSBbbG9hZGVyL25lL3NlZ21lbnQuY10KCUNhbGwgRGxsRW50cnlQb2ludCBmb3IgMTYtYml0IERMTHMgd2l0aCBzdWJzeXN0ZW0gPj0gNC4wLgoKCSogW3dpbjMyL2tlcm5lbDMyLnNwZWNdIFt3aW4zMi93b3czMi5zcGVjXSBbd2luMzIvb3JkaW5hbHMuY10KCVVzZSBuYW1lcyBmcm9tIHRoZSBPY3QgOTQgYmV0YSByZWxlYXNlIGZvciB1bmRvYy4gZnVuY3Rpb25zLgoKV2VkIE1heSAxMyAxNDoxODoyNiAxOTk4ICBNYXR0aGV3IEJlY2tlciA8bWJlY2tlckBnbGFzc2NpdHkubmV0PgoKCSogW21pc2MvcmVnaXN0cnkuY10KCUNvZGUgY2xlYW51cC4KCgkqIFttaXNjL2NwdS5jXQoJQ29tbWVudGVkIG91dCB0aGUgcmVnaXN0cnkgcHV0cyB0ZW1wb3JhcmlseS4KCgkqIFtwcm9ncmFtcy9yZWd0ZXN0LypdCglOZXcgcmVnaXN0cnkgdGVzdGluZyBwcm9ncmFtLgoKVHVlIE1heSAxMiAyMjo1NDowMyAxOTk4ICBNaWNoYWVsIE1lc3MgPG1pY2hhZWxAa2F3bzIucnd0aC1hYWNoZW4uZGU+CgoJKiBbbXVsdGltZWRpYS9hdWRpby5jXQoJaW9jdGwncyBkbyBub3QgY29tbXV0ZSBpbiAvZGV2L2RzcCBpbml0aWFsaXphdGlvbi4KClR1ZSBNYXkgMTIgMjA6MTE6NDIgMTk5OCAgS2FybCBHYXJyaXNvbiA8a2FybG9zQGV6bmV0Lm5ldD4KCgkqIFt3aW4zMi9jb25zb2xlLmNdCglJbXBsZW1lbnRlZCBTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZSwgRmlsbENvbnNvbGVPdXRwdXRDaGFyYWN0ZXIuCglJbXByb3ZlZCBjdXJzb3IgcG9zaXRpb25pbmcuCglUaGlzIGFsbG93cyBmb3IgdGV4dCBjb2xvcnMgaW4gYW4geHRlcm0sIHJ4dnQsIG9yIGNvbnNvbGUuCgpUdWUgTWF5IDEyIDE3OjU3OjUyIDE5OTggIFBldHRlciBSZWluaG9sZHRzZW4gPHBlcmVAdGQub3JnLnVpdC5ubz4KCgkqIFtNYWtlZmlsZS5pbl0KCUNyZWF0ZSBwcmVmaXgve2JpbnxsaWJ9IGRpcmVjdG9yaWVzIGlmIG1pc3NpbmcgZHVyaW5nIGluc3RhbGwuCgpTdW4gTWF5IDEwIDE5OjM3OjUxIDE5OTggIEphbiBXaWxsYW1vd2l1cyA8amFuQGphbmhoLnNobmV0Lm9yZz4KCgkqIFttdWx0aW1lZGlhL21taW8uY10KCUhhdmUgbW1pb1NldEJ1ZmZlciByZXR1cm4gc3VjY2VzcyAoMCksIHNvIENvcmVsIERyYXcgNAoJa2VlcHMgd29ya2luZy4gKElPIGlzIHN0aWxsIHVuYnVmZmVyZWQpCgpXZWQgTWF5ICA2IDE2OjU3OjU1IDE5OTggIEphbWVzIEp1cmFuIDxqcmoxMjBAcHN1LmVkdT4KCiAgICAgICAgKiBbTWFrZWZpbGUuaW5dIFtNYWtlLnJ1bGVzLmluXQoJQ2hhbmdlZCAibWFrZSBjbGVhbiIgdG8gcmVtb3ZlIGB0ZXh0ZWRpdGAgYmFja3VwIGZpbGVzICgqJSkKCgkqIFtjb250cm9scy9tZW51LmNdW2dyYXBoaWNzL3gxMWRydi94Zm9udC5jXVtpbmNsdWRlL2xpYnJlcy5oXQoJICBbbG9hZGVyL21haW4uY11bbG9hZGVyL25lL21vZHVsZS5jXVtzY2hlZHVsZXIvc3luY2hyby5jXQoJICBbd2luMzIvdGltZS5jXVt3aW5kb3dzL3dpbnBvcy5jXVtpbmNsdWRlL3dpbmRvd3MuaF0KCUZpeGVkIG1pc2NlbGxhbmVvdXMgY29tcGlsYXRpb24gd2FybmluZ3MuCgoJKiBbbWlzYy9tYWluLmNdW21pc2NlbXUvbWFpbi5jXVtpbmNsdWRlL21haW4uaF0KCU1vdmVkIHByb3RvdHlwZXMgdG8gbmV3IGluY2x1ZGUgZmlsZSBtYWluLmgsIHZhcmlvdXMgY2xlYW51cHMuCgpUdWUgTWF5ICA1IDIxOjA1OjA2IDE5OTggIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+CgoJKiBbbWlzYy93aW5zb2NrLmNdCglEb24ndCByZWZlciB0byBfX0ZyZWVCU0RfXyB3aGVuIEhBVkVfU1RSRVJST1IgaXMgbWVhbnQuCgoJKiBbbWlzYy9kZWJ1Z3N0ci5jXQoJRm9yIGRlYnVnX2R1bXBzdHJTZW5kLCBzZW5kIHN0cmluZ3MgdG8gc3RkZXJyLgoKVHVlIE1heSAgNSAyMTo0Nzo0MCAxOTk4ICBIdXcgRCBNIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW29iamVjdHMvcmVnaW9uLmNdCglGaXggZm9yIFJFR0lPTl9SZWdpb25PcCgpIGlmIG5ld1JlZyBpcyBvbmUgb2YgdGhlIHNvdXJjZSByZWdpb25zLgoKVHVlIE1heSAgNSAxODoyNzozMiAxOTk4ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAcm9hbm9rZS5pbmZpLm5ldD4KCgkqIFttaXNjL21haW4uY10KCUFkZCAnLWgvLWhlbHAnIG9wdGlvbiBhbmQgcHJpbnQgV0lORV9SRUxFQVNFX0lORk8gd2l0aCB1c2FnZSBtZXNzYWdlLgoKCSogW21pc2Mvc3B5LmNdCglSZWFsaWduIHRyYWNlIG1lc3NhZ2VzLgoKVHVlIE1heSAgNSAxNTo0Njo0NyAxOTk4ICBEb25uaWUgVi4gU2F2YWdlIDxkc2F2YWdlQGNpc2NvLmNvbT4KCgkqIFtncmFwaGljcy9kZHJhdy5jXQoJRml4ZWQgY29tcGlsZSB3YXJuaW5ncwoKCSogW21pc2Mvd2luc29jay5jXQoJV2FybmluZ3Mgc2hvdWxkIG5vdCBiZSBlcnJvcnMuCgpUdWUgTWF5ICA1IDEzOjQwOjQyIDE5OTggIEppbSBQZXRlcnNvbiA8anNwZXRlckByb2Fub2tlLmluZmkubmV0PgoKCSogWyovKl0KCVJlbW92ZSBtYW55IHdhcm5pbmdzIHRocm91Z2ggZXhwbGljaXQgY2FzdHMsIGFkZGVkICNpbmNsdWRlJ3MsCglhbmQgY29ycmVjdGVkIHByaW50ZiBmb3JtYXRzLgoKVHVlIE1heSAgNSAwNToxODoxMiAxOTk4ICBJbnNvbW5pYSAoU3RlYSBHcmVlbmUpIDxpbnNvbW5pYUBjb3JlLmJpbmdoYW10b24uZWR1PgoKCSogW2dyYXBoaWNzL2RkcmF3LmNdCglLZXB0IHVuY2hhbmdlZCBwb3J0aW9uIG9mIG9sZCBwYWxldHRlIHdoZW4gY2hhbmdpbmcgb25seSBhIGZldwoJcGFsZXR0ZSBlbnRyaWVzLiAgUmVhbGx5IHNob3VsZCBvbmx5IGRlYWxsb2NhdGUgdGhlIGNoYW5nZWQgY2VsbHMuCglUaGlzIG1ha2UgU3RhckNyYWZ0IHdvcmsgYWxtb3N0IHBlcmZlY3RseSAoc291bmQgb3ZlcmZsb3dzIHN0aWxsCgljYXVzZSBzdGF0aWMpLgoKTW9uIE1heSAgNCAxNTowNDo1NyAxOTk4ICBBbGV4YW5kZXIgVi4gTHVreWFub3YgPGxhdkBsb25nLnlhci5ydT4KCgkqIFttaXNjL2xzdHIuY10KCUZvcm1hdE1lc3NhZ2U6IHRlcm1pbmF0ZSBzdHJpbmcgb24gJTAsIHVuZG8gbGluZWZlZWQgc3RyaXAuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBBcHIgMzAgMTY6Mjg6MTIgMTk5OCAgSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoKCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdCglJbXBsZW1lbnRlZCBHZXRFeGl0Q29kZVByb2Nlc3MuICBUaGUgY29kZSBpcyBhIGRpcmVjdCB0cmFuc2xhdGlvbgoJb2YgR2V0RXhpdENvZGVUaHJlYWQuCgpNb24gQXByIDI3IDIyOjIwOjI1IDE5OTggIFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCVVubG9hZCBkdW1teSBtb2R1bGUgd2hlbiBQRV9Mb2FkTGlicmFyeUV4MzJBIGZhaWxzIHdpdGgKCVBFX0xvYWRJbWFnZSAobWFrZXMgRW5jYXJ0YSA5OCBpbnN0YWxsZXIgcHJvY2VlZCkuCgoJKiBbZmlsZXMvZHJpdmUuY10KCU1ha2UgR2V0RHJpdmVUeXBlMTYgcmV0dXJuIERSSVZFX1JFTU9WQUJMRSBmb3IgVFlQRV9DRFJPTS4KCU1ha2UgR2V0Q3VycmVudERpcmVjdG9yeTMyIGJlaGF2ZSBsaWtlIHRoZSBjb2RlIGRvZXMgYW5kIG5vdAoJbGlrZSB0aGUgaGVscCBkZXNjcmliZXMuCgoJKiBbZmlsZXMvcHJvZmlsZS5jXQoJUmV2b2tlIHJlY2VudCBjaGFuZ2UgaW4gUFJPRklMRV9HZXRTZWN0aW9uIGFuZCB0cnkgYmV0dGVyIAoJaGFuZGxpbmcgb2Ygc3BlY2lhbCBjYXNlLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQ2hhbmdlIGRlZmluaXRpb24gb2YgQUNDRUwzMi4KCgkqIFttaXNjL2NvbW1kbGcuY10KCVJlcGxhY2UgdGhlIEdldFhYWEZpbGVuYW1lMzIgbWFjcm9zIGJ5IG5vcm1hbCBjb2RlLgoJRml4IHR3byByZXBvcnRlZCBidWdzIGluIG15IGNoYW5nZXMgdG8gY29tbWRsZy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWRkIGEgaG9vayB0byBjYXRjaCBib2d1cyBXTV9TSVpFIG1lc3NhZ2VzIGJ5IGVtaXR0aW5nIGEgd2FybmluZwoJaW4gdGhlIGFwcHJvcHJpYXRlIGNhc2UuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCVJlamVjdCB1bnJlYXNvbmJhYmxlIGxhcmdlIHNpemUgYXJndW1lbnRzIGluCglDcmVhdGVDb21wYXRpYmxlQml0bWFwMzIgYW5kIGFkZCBhbiBmaXhtZSBmb3IgdGhhdCBzaXR1YXRpb24uCgpTdW4gQXByIDI2IDE4OjMwOjA3IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2luY2x1ZGUvbGR0LmhdIFtkZWJ1Z2dlci8qLmNdIFttaXNjZW11L2luc3RyLmNdCglBZGRlZCBJU19TRUxFQ1RPUl9TWVNURU0gYW5kIElTX1NFTEVDVE9SXzMyQklUIG1hY3Jvcy4KCU1ha2UgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIHN1cHBvcnQgc3lzdGVtIHNlbGVjdG9ycy4KCgkqIFtsb2FkZXIvKi5jXQoJU3RhcnRlZCBtb3ZpbmcgTkUgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHRoZSBuZXcgbG9hZGVyL25lCglkaXJlY3RvcnkuCgoJKiBbbWVtb3J5L2Vudmlyb24uY10KCUVuZm9yY2UgdGhlIDEyNyBjaGFycyBsaW1pdCBvbmx5IHdoZW4gY3JlYXRpbmcgdGhlIGVudmlyb25tZW50IG9mCglhIFdpbjE2IHByb2Nlc3MuCgpTdW4gQXByIDI2IDEyOjIyOjIzIDE5OTggIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW2ZpbGVzL2ZpbGUuY10KCUZpeGVkIGFuIGluY3JlZGlibGUgdHlwbyBpbiBDb3B5RmlsZTMyQSB0aGF0IG1hZGUgaXQgdW51c2FibGUKCXNpbmNlIGEgcmV3cml0ZSBpbiA5NzAxMTIgKCEhKS4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY10KCUZpeGVkIEdldFRlbXBQYXRoMzJBL1cgdG8gaW5jbHVkZSB0cmFpbGluZyBiYWNrc2xhc2guCgoJKiBbbWlzYy92ZXIuY10KCU1ha2UgZmluZF9wZV9yZXNvdXJjZSAid29yayIgd2l0aCBjb3JydXB0IGZpbGVzLgoKCSogW21pc2Mvd3NwcmludGYuY10KCUFsdGVyZWQgV1BSSU5URl9QYXJzZUZvcm1hdEEvVyB0byB0cmVhdCBpbnZhbGlkIGZvcm1hdCBjaGFycwoJYXMgbm9ybWFsIG91dHB1dCwgdG9vLgoKCSogW21zZG9zL2RwbWkuY10KCUltcGxlbWVudGVkICJBbGxvY2F0ZS9GcmVlIHJlYWwgbW9kZSBjYWxsYmFjayIgKDB4MDMwMy8weDAzMDQpLgoJQ3Jvc3MgeW91ciBmaW5nZXJzIGlmIHlvdSBuZWVkIHRvIHVzZSBpdCA7KSAoY29tcGxldGVseSB1bnRlc3RlZCkKCUltcGxlbWVudGVkICJDYWxsIHJlYWwgbW9kZSBwcm9jIHdpdGggZmFyIHJldHVybiIgKDB4MDMwMSwgdGVzdGVkKS4KCgkqIFttc2Rvcy9pbnQyMS5jXQoJRml4ZWQgaW9jdGxHZW5lcmljQmxrRGV2UmVxLzB4NjAuCgoJKiBbcmVsYXkzMi9kcGxheXguc3BlY10gW3JlbGF5MzIvYnVpbHRpbjMyLmNdIFtyZWxheTMyL01ha2VmaWxlLmluXQoJQWRkZWQgYnVpbHQtaW4gRFBMQVlYLkRMTC4gCgoJKiBbd2luZG93cy93aW4uY10KCUZpeGVkIEdldFdpbmRvd1dvcmQoKS9HV1dfSFdORFBBUkVOVCB0byByZXR1cm4gdGhlIHdpbmRvdydzIG93bmVyCglpZiBpdCBoYXMgbm8gcGFyZW50IChTREspLgoKU2F0IEFwciAyNSAxNTowOTo1MyAxOTk4ICBNLlQuRm9ydGVzY3VlICA8bWFya0BtdGZocGMuZGVtb24uY28udWs+CgoJKiBbZGVidWdnZXIvZGJfZGlzYXNtLmNdCglGaXhlZCBkaXNhc3NlbWJsZSBidWcgZm9yIG5vLWRpc3BsYXkgb3B0aW9uIGFuZCAnbG9jaycsCgkncmVwbmUnIGFuZCAncmVwZScgcHJlZml4ZXMuCgoJKiBbZGVidWdnZXIvcmVnaXN0ZXJzLmNdCglBZGRlZCB0ZXh0dWFsIGZsYWcgZGVzY3JpcHRpb24gb3V0cHV0IG9uICdpbmZvIHJlZ3MnLgoKU2F0IEFwciAyNSAxNDoxODoyNiAxOTk4ICBNYXR0aGV3IEJlY2tlciA8bWJlY2tlckBnbGFzc2NpdHkubmV0PgoKCSogWyovKi5jXQoJQWRkZWQgc3R1YnMgYW5kL29yIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOiAKCUxvb2t1cFByaXZpbGVnZVZhbHVlLCBPcGVuU2VydmljZSwgQ29udHJvbFNlcnZpY2UsIFJlZ0dldEtleVNlY3VyaXR5LCAKCVN0YXJ0U2VydmljZSwgU2V0Q29tcHV0ZXJOYW1lLCBEZWxldGVTZXJ2aWNlLCBDbG9zZVNlcnZpY2VIYW5kbGUsIAoJT3BlblByb2Nlc3NUb2tlbiwgT3BlblNDTWFuYWdlciwgRGVyZWdpc3RlckV2ZW50U291cmNlLCAKCVdhaXRGb3JEZWJ1Z0V2ZW50LCBXYWl0Rm9ySW5wdXRJZGxlLCBSZWdpc3RlckV2ZW50U291cmNlLAoJU2V0RGVidWdFcnJvckxldmVsLCBTZXRDb25zb2xlQ3Vyc29yUG9zaXRpb24sIENob29zZVBpeGVsRm9ybWF0LAoJU2V0UGl4ZWxGb3JtYXQsIEdldFBpeGVsRm9ybWF0LCBEZXNjcmliZVBpeGVsRm9ybWF0LCBTd2FwQnVmZmVycywKCVBvbHlCZXppZXIsIEFib3J0UGF0aCwgRGVzdHJveUFjY2VsZXJhdG9yVGFibGUsIEhlYXBXYWxrLAoJRGRlSW5pdGlhbGl6ZSwgRGRlVW5pbml0aWFsaXplLCBEZGVDb25uZWN0TGlzdCwgRGRlRGlzY29ubmVjdExpc3QsCglEZGVDcmVhdGVTdHJpbmdIYW5kbGUsIERkZVBvc3RBZHZpc2UsIERkZUdldERhdGEsIERkZU5hbWVTZXJ2aWNlLAoJRGRlR2V0TGFzdEVycm9yLCBXTmV0R2V0RGlyZWN0b3J5VHlwZSwgRW51bVByaW50ZXJzLCBSZWdGbHVzaEtleSwKCVJlZ0dldEtleVNlY3VyaXR5LCBEbGxHZXRDbGFzc09iamVjdCwgRGxsQ2FuVW5sb2FkTm93LCBDcmVhdGVCaXRtYXAsCglDcmVhdGVDb21wYXRpYmxlQml0bWFwLCBDcmVhdGVCaXRtYXBJbmRpcmVjdCwgR2V0Qml0bWFwQml0cywKCVNldEJpdG1hcEJpdHMsIExvYWRJbWFnZSwgQ29weUltYWdlLCBMb2FkQml0bWFwLCBEcmF3SWNvbiwKCUNyZWF0ZURpc2NhcmRhYmxlQml0bWFwLCBTZXRESUJpdHMsIEdldENoYXJBQkNXaWR0aHMsIExvYWRUeXBlTGliLAoJU2V0Q29uc29sZUN0cmxIYW5kbGVyLCBDcmVhdGVDb25zb2xlU2NyZWVuQnVmZmVyLCBSZWFkQ29uc29sZUlucHV0LAoJR2V0Q29uc29sZUN1cnNvckluZm8sIFNldENvbnNvbGVDdXJzb3JJbmZvLCBTZXRDb25zb2xlV2luZG93SW5mbywKCVNldENvbnNvbGVUZXh0QXR0cmlidXRlLCBTZXRDb25zb2xlU2NyZWVuQnVmZmVyU2l6ZSwKCUZpbGxDb25zb2xlT3V0cHV0Q2hhcmFjdGVyLCBGaWxsQ29uc29sZU91dHB1dEF0dHJpYnV0ZSwKCUNyZWF0ZU1haWxzbG90LCBHZXRNYWlsc2xvdEluZm8sIEdldENvbXByZXNzZWRGaWxlU2l6ZSwKCUdldFByb2Nlc3NXaW5kb3dTdGF0aW9uLCBHZXRUaHJlYWREZXNrdG9wLCBTZXREZWJ1Z0Vycm9yTGV2ZWwsCglXYWl0Rm9yRGVidWdFdmVudCwgU2V0Q29tcHV0ZXJOYW1lLCBDcmVhdGVNRElXaW5kb3cuCgpUaHUgQXByIDIzIDIzOjU0OjA0IDE5OTggIERvdWdsYXMgUmlkZ3dheSAgPHJpZGd3YXlAd2luZWhxLmNvbT4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW29iamVjdHMvZW5obWV0YWZpbGUuY10gW3JlbGF5MzIvZ2RpMzIuc3BlY10KCUltcGxlbWVudCBDb3B5RW5oTWV0YUZpbGUsIEdldC9TZXRFbmhNZXRhRmlsZUJpdHMsIG90aGVyIGZpeGVzLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXSBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbcmVsYXkzMi9nZGkzMi5zcGVjXQoJMzItYml0IG1ldGFmaWxlIGZpeGVzLCBpbXBsZW1lbnQgRW51bU1ldGFGaWxlMzIsIEdldE1ldGFGaWxlQml0c0V4LgoKCSogW29iamVjdHMvZm9udC5jXSBbZ3JhcGhpY3MveDExZHJ2L3hmb250LmNdIFtncmFwaGljcy94MTFkcnYvdGV4dC5jXQoJU29tZSByb3RhdGVkIHRleHQgc3VwcG9ydCBmb3IgWDExUjYgZGlzcGxheXMuCgoJKiBbd2luMzIvbmV3Zm5zLmNdIFtvbGUvb2xlMm5scy5jXQoJTW92ZWQgR2V0TnVtYmVyRm9ybWF0MzJBLgoKV2VkIEFwciAyMiAxNzozODoyMCAxOTk4ICBEYXZpZCBMZWUgTGFtYmVydCA8bGFtYmVyNDVAZWdyLm1zdS5lZHU+CgoJKiBbb2xlL29sZTJubHMuY10gW21pc2MvbmV0d29yay5jXQoJQ2hhbmdlZCBzb21lIGZ1bmN0aW9uIGRvY3VtZW50YXRpb24gdG8gdGhlIG5ldyBzdHlsZS4KCgkqIFttaXNjL25ldHdvcmsuY10gW2luY2x1ZGUvd2luZG93cy5oXSBbaWYxNjMyL3VzZXIuc3BlY10KCSAgW3JlbGF5MzIvbXByLnNwZWNdIFttaXNjL21wci5jXQoJQWRkZWQgc3R1YnMgZm9yIHNvbWUgV2luMzIgbmV0d29yayBmdW5jdGlvbnM7ICByZW5hbWVkIHNvbWUgCgkxNi1iaXQgb25lcyB3aXRoIDMyLWJpdCBjb3VudGVycGFydHMsICBhcyB3ZWxsIGFzCglXTmV0R2V0RGlyZWN0b3J5VHlwZTsgIG1vdmVkIHRoZSBzdHVicyBpbiBtaXNjL21wci5jICh0aHJlZSBvZgoJdGhlbSEpIHRvIG1pc2MvbmV0d29yay5jLgoKCSogW29sZS9jb21wb2JqLmNdIFtvbGUvc3RvcmFnZS5jXSBbb2xlL29sZTJkaXNwLmNdIAoJICBbb2xlL29sZTJubHMuY10gW29sZS9mb2xkZXJzLmNdIFtvbGUvbW9uaWtlci5jXSBbb2xlL29sZTIuY10KCSAgW2dyYXBoaWNzL2ZvbnRlbmdpbmUuY10gW2dyYXBoaWNzL2RkcmF3LmNdIFtncmFwaGljcy9lbnYuY10KCSAgW2dyYXBoaWNzL2RyaXZlci5jXSBbZ3JhcGhpY3MvZXNjYXBlLmNdCglDaGFuZ2VkIGZwcmludGYncyB0byBwcm9wZXIgZGVidWctbWFjcm9zLgoKCSogW2luY2x1ZGUvd2lubmxzLmhdCglBZGRlZCBzb21lIGZsYWdzIChmb3IgaW50ZXJuYWwgdXNlKS4KCgkqIFtvbGUvb2xlMm5scy5jXSAKCUFkZGVkIHRoZSBVbmljb2RlIGNvcmUgZnVuY3Rpb24sIGFuZCB3b3JrZWQgb3V0IGEgd2F5IHRvIGhpZGUKCXRoZSBjb21tb25hbGl0eSBvZiB0aGUgY29yZS4KCgkqIFtyZWxheTMyL2tlcm5lbDMyLnNwZWNdCglBZGRlZCBzdXBwb3J0IGZvciBHZXREYXRlL1RpbWUzMkEvVy4KCldlZCBBcHIgMjIgMDk6MTY6MDMgMTk5OCAgR29yZG9uIENoYWZmZWUgIDxjaGFmZmVlQGNzLmJlcmtlbGV5LmVkdT4KCgkqIFt3aW4zMi9jb2RlX3BhZ2UuY10KCUZpeGVkIHByb2JsZW0gd2l0aCBNdWx0aUJ5dGVUb1dpZGVDaGFyIHRoYXQgd2FzIGludHJvZHVjZWQgaW4KCWxhc3QgcmVsZWFzZS4gIE1hZGUgTXVsdGlCeXRlVG9XaWRlQ2hhciBtb3JlIGNvbXBhdGlibGUgd2l0aCBXaW4zMi4KCgkqIFtncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuY10KCUZpeGVkIHByb2JsZW0gd2l0aCBkcmF3aW5nIGFyY3MuCgpUdWUgQXByIDIxIDExOjI0OjU4IDE5OTggIENvbnN0YW50aW5lIFNhcHVudHpha2lzICA8Y3NhcHVudHpAdG1hLTEubGNzLm1pdC5lZHU+CgoJKiAgW29sZS9vbGUybmxzLmNdCglNb3ZlIHN0dWZmIGZyb20gMHg0MDkgY2FzZSB0byBMYW5nX0VuLiAKCgkqICBbcmVsYXkzMi91c2VyMzIuc3BlY10gW3dpbmRvd3Mvd2lucG9zLmNdCglBZGRlZCBzdHVicyBmb3IgR2V0V2luZG93UmduMzIgYW5kIFNldFdpbmRvd1JnbjMyLiBNYWtlcyBPZmZpY2UKCVBhcGVyY2xpcCBoYXBweS4KClR1ZSBBcHIgMjEgMTE6MTY6MTYgMTk5OCAgQ29uc3RhbnRpbmUgU2FwdW50emFraXMgIDxjc2FwdW50ekB0bWEtMS5sY3MubWl0LmVkdT4KCgkqICBbbG9hZGVyL3BlX2ltYWdlLmNdCglJZiBpbWFnZSBpcyByZWxvY2F0ZWQsIFRMUyBhZGRyZXNzZXMgbmVlZCB0byBiZSBhZGp1c3RlZC4KCgkqIFtkZWJ1Z2dlci8qLmNdCglHZW5lcmFsaXplZCB0ZXN0cyBmb3IgMzItYml0IHNlZ21lbnRzLgoKVHVlIEFwciAyMSAwMjowNDo1OSAxOTk4ICBKYW1lcyBKdXJhbiAgPGpyajEyMEBwc3UuZWR1PgoJCgkqIFttaXNjLyouY10gW21pc2NlbXUvKi5jXSBbbXNkb3MvKi5jXSBbaWYxNjMyLyouY10gCgkgIFtpbmNsdWRlLyouaF0gW2xvYWRlci8qLmNdIFttZW1vcnkvKi5jXSBbbXVsdGltZWRpYS8qLmNdIAoJICBbb2JqZWN0cy8qLmNdCglBbG1vc3QgYWxsIGZwcmludGYgc3RhdGVtZW50cyBjb252ZXJ0ZWQgdG8gYXBwcm9wcmlhdGUgCglkZWJ1ZyBtZXNzYWdlcy4KCgkqIFtSRUFETUVdCglVcGRhdGVkICJHRVRUSU5HIE1PUkUgSU5GT1JNQVRJT04iIHNlY3Rpb24gdG8gaW5jbHVkZSBXaW5lSFEuCgoJKiBbZG9jdW1lbnRhdGlvbi9kZWJ1Z2dlcl0KCUZpeGVkIHR5cG8uCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUFkZGVkIGZ1bmN0aW9uIGRvY3VtZW50YXRpb24uCgpTdW4gQXByIDE5IDE2OjMwOjU4IDE5OTggIE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQG11ZC5kZT4KCgkqIFtNYWtlLnJ1bGVzLmluXQoJQWRkZWQgbGludCB0YXJnZXQgKHVzaW5nIGxjbGludCkuCgoJKiBbcmVsYXkzMi9vbGVhdXQzMi5zcGVjXVtyZWxheTMyL01ha2VmaWxlLmluXVtvbGUvdHlwZWxpYi5jXQoJICBbb2xlL29sZTJkaXNwLmNdCglBZGRlZCBvbGVhdXQzMiBzcGVjLCBhZGRlZCBzb21lIFN5c1N0cmluZyBmdW5jdGlvbnMuCgoJKiBbaWYxNjMyL3NpZ25hbC5jXQoJQWRkZWQgcHJpbnRpbmcgb2YgZmF1bHRhZGRyZXNzIGluIExpbnV4ICh1c2luZyBDUjIgZGVidWcgcmVnaXN0ZXIpLgoKCSogW2NvbmZpZ3VyZS5pbl0KCUFkZGVkIDxzeXMvdHlwZXMuaD4gZm9yIHN0YXRmcyBjaGVja3MuCgoJKiBbbG9hZGVyLyouY11bZGVidWdnZXIvYnJlYWsuY11bZGVidWdnZXIvaGFzaC5jXQoJU3RhcnRlZCB0byBzcGxpdCB3aW4zMi93aW4xNiBtb2R1bGUgaGFuZGxpbmcsIHByZXBhcmluZyBzdXBwb3J0Cglmb3Igb3RoZXIgYmluYXJ5IGZvcm1hdHMgKGxpa2UgRUxGKS4KClNhdCBBcHIgMTggMTA6MDc6NDEgMTk5OCAgUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglGaXhlZCBhIGJ1ZyB0aGF0IG1hZGUgUmVnUXVlcnlWYWx1ZXh4eCByZXR1cm5pbmcKCWluY29ycmVjdCByZWdpc3RyeSB2YWx1ZXMuCgpGcmkgQXByIDE3IDIyOjU5OjIyIDE5OTggIEFsZXhhbmRlciBWLiBMdWt5YW5vdiA8bGF2QGxvbmcueWFyLnJ1PgoKCSogW21pc2MvbHN0ci5jXQoJRm9ybWF0TWVzc2FnZTMyKjogcmVtb3ZlIGxpbmVmZWVkIHdoZW4gbm9saW5lZmVlZCBzZXQ7CgljaGVjayBmb3IgdGFyZ2V0IHVuZGVyZmxvdy4KCkZyaSBBcHIgMTcgMDA6Mzg6MTQgMTk5OCAgQWxleGFuZGVyIFYuIEx1a3lhbm92IDxsYXZAbG9uZy55YXIucnU+CgoJKiBbbWlzYy9jcnRkbGwuY10KCUltcGxlbWVudCB4bGF0X2ZpbGVfcHRyIGZvciBDUlQgc3RkaW4vc3Rkb3V0L3N0ZGVyciBhZGRyZXNzCgl0cmFuc2xhdGlvbi4KCldlZCBBcHIgMTUgMjA6NDM6NTYgMTk5OCAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFtjb250cm9scy9tZW51LmNdCglBZGRlZCAnb2RhY3Rpb24nIHBhcmFtZXRlciB0byBNRU5VX0RyYXdNZW51SXRlbSgpIGFuZCByZWRpcmVjdGVkCglXTV9EUkFXSVRFTSBtZXNzYWdlcyB0byBHZXRXaW5kb3coaHduZCxHV19PV05FUikuCgpUdWUgQXByIDE0IDE2OjE3OjU1IDE5OTggIEJlcmVuZCBSZWl0c21hIDxiZXJlbmRAdW5pdGVkLWluZm8uY29tPgoKCSogW2dyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuY10JW2dyYXBoaWNzL3BhaW50aW5nLmNdIAoJICBbZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jXSBbZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmNdCgkgIFtncmFwaGljcy94MTFkcnYvaW5pdC5jXSBbaW5jbHVkZS9nZGkuaF0gW2luY2x1ZGUveDExZHJ2LmhdCgkgIFtyZWxheTMyL2dkaTMyLnNwZWNdCglBZGRlZCBQb2x5UG9seWxpbmUgcm91dGluZS4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10KCUNoYW5nZWQgV0lOUFJPQ19HZXRQcm9jKCkgdG8gcmV0dXJuIHByb2MgaW5zdGVhZCBvZiAmKGptcCBwcm9jKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEFwciAxMiAxMjoyMjoyMyAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJRml4ZWQgIm5vIGZyZWUgc3BhY2UiIHByb2JsZW0gd2l0aCBwYXJ0aXRpb24gc2l6ZXMgYmV0d2VlbiAxIGFuZCAyIEdCCgkoY2x1c3Rlcl9zZWN0b3JzIG1heSBub3QgZXhjZWVkIDB4NDApLgoKCSogW3dpbmRvd3MvbXNnYm94LmNdIFtpZjE2MzIvdXNlci5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdCglJbXBsZW1lbnRlZCBNZXNzYWdlQm94SW5kaXJlY3QxNiwgY29ycmVjdGVkIE1TR0JPWFBBUkFNUzE2LgoKCSogW2xvYWRlci90YXNrLmNdCglET1MgZW52aXJvbm1lbnQgc3RyaW5ncyBtYXkgbmV2ZXIgZXhjZWVkIDEyNyBjaGFycwoJLT4gdHJ1bmNhdGUgVW5peCBlbnZpcm9ubWVudCBzdHJpbmdzIGlmIG5lY2Vzc2FyeS4KClN1biBBcHIgMTIgMDI6NTE6NDQgMTk5OCAgRGltaXRyaWUgTy4gUGF1biAgPGRpbWlAbWFpbC5jcy50b3JvbnRvLmVkdT4KCgkqIFtmaWxlcy8qLmNdCglBbGwgZnByaW50ZiBzdGF0ZW1lbnRzIHdlcmUgY29udmVydGVkIHRvIGFwcHJvcHJpYXRlIGRlYnVnCgltZXNzYWdlcy4KCgkqIFt0b29scy9maW5kX2RlYnVnX2NoYW5uZWxzXQoJVXBkYXRlZCBjb21tZW50cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLgoKU2F0IEFwciAxMSAxNToyNzoyMSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdIFtsb2FkZXIvdGFzay5jXSBbc2NoZWR1bGVyL3Byb2Nlc3MuY10KCU1vdmVkIHNvbWUgY29kZSBhcm91bmQgdG8gcHJlcGFyZSB0aGUgZ3JvdW5kIGZvciBDcmVhdGVQcm9jZXNzKCkuCgoJKiBbbWVtb3J5L2Vudmlyb24uY10gW2xvYWRlci90YXNrLmNdCglNb3ZlZCBXaW4zMiBlbnZpcm9ubWVudCBzdHJpbmdzIGZ1bmN0aW9ucyB0byBlbnZpcm9uLmMuCglVbmlmaWVkIFdpbjE2IGFuZCBXaW4zMiBlbnZpcm9ubWVudCBtYW5hZ2VtZW50LgoKCSogW3NjaGVkdWxlci9oYW5kbGUuY10gW3NjaGVkdWxlci9rMzJvYmouY10gW3NjaGVkdWxlci8qLmNdCglJbXBsZW1lbnRlZCBoYW5kbGUgaW5oZXJpdGFuY2UgYW5kIER1cGxpY2F0ZUhhbmRsZSgpLgoKCSogW3NjaGVkdWxlci90aHJlYWQuY10KCUNyZWF0ZSBhIDE2LWJpdCBzdGFjayBmb3IgYWxsIHRocmVhZHMuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUltcGxlbWVudGVkIERJQUxPR0VYIHJlc291cmNlIGZvcm1hdC4KCkZyaSBBcHIgMTAgMjA6MjE6NTEgMTk5OCAgTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAbXVkLmRlPgoKCSogW2NvbmZpZ3VyZS5pbl1baW5jbHVkZS9hY2NvbmZpZy5oXVsqLypdW211bHRpbWVkaWEvKl0KCUNsZWFuZWQgdXAgdGhlIE9TUyBkZXRlY3Rpb24gc3R1ZmYsIGFkZGVkIHNvbWUgbW9yZSBjaGVja3MgZm9yCgloZWFkZXJmaWxlcy9mdW5jdGlvbnMuCglSZW1vdmVkIGEgbG90IG9mIE9TIHNwZWNpZmljICNpZmRlZnMuCglMb3RzIG9mIGRlcGVuZGVuZCBtdWx0aW1lZGlhIGNsZWFudXBzLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJRW5oYW5jZWQgY29tbWVudCwgYWRkZWQgbWlzc2luZyByZWZlcmVuY2UgY291bnQgaW5jcmVhc2UuCgoJKiBbb2xlL2NvbXBvYmouY10KCVJlcGxhY2VkIGJyb2tlbiBTdHJpbmdGcm9tR1VJRDIgYnkgd29ya2luZyBvbmUuCgoJKiBbbWlzYy93aW5zb2NrLmNdCglTT19MSU5HRVIgdXNlcyB1bnNpZ25lZCAxNiBiaXQgaW4gV2luMTYgYW5kIFdpbjMyLCBidXQgdW5zaWduZWQKCWludCAoMzJiaXQpIGZvciBVTklYLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUFsbG93IHJlYWxsb2MgZm9yIGxvY2tjb3VudCAxIHRvby4KCkZyaSBBcHIgMTAgMTU6Mjc6MzQgMTk5OCAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KCgkqIFtncmFwaGljcy94MTFkcnYvdGV4dC5jXQoJSGFuZGxlIGNvbnRyb2wgY2hhcmFjdGVycyBpbiB0cmFjZS4gIElnbm9yZSB0ZXJtaW5hdGluZyBuZXdsaW5lLgoKCSogW211bHRpbWVkaWEvaW5pdC5jXQoJKE1VTFRJTUVESUFfSW5pdCk6IENvcnJlY3QgYWxsb2NhdGlvbnMuCgoJKiBbdG9vbHMvZXhhbWluZS1yZWxheV0KIAlUaWR5IHVwLgoKCSogW3dpbmRvd3Mvc3lzY29sb3IuY10KCUNoYW5nZSBoaWdobGlnaHQgY29sb3VyIGZyb20gbGlnaHRibHVlIHRvIGxpZ2h0Z3JheS4gIFRoaXMKCWxvb2tzIGNvcnJlY3QgZm9yIG1lbnVzLgoKRnJpIEFwciAxMCAwMTo0OTo1OCAxOTk4ICBEb3VnbGFzIFJpZGd3YXkgIDxyaWRnd2F5QHdpbmVocS5jb20+CgoJKiBbY29uZmlndXJlLmluXSBbTWFrZS5ydWxlcy5pbl0KCUFkZCBjaGVjayBmb3IgYzJtYW4gYmVmb3JlIHVzaW5nIGl0LgoKRnJpIEFwciAxMCAwMjo1OToyMSAxOTk4ICBEb3VnbGFzIFJpZGd3YXkgIDxyaWRnd2F5QHdpbmVocS5jb20+CgoJKiBbREVWRUxPUEVSUy1ISU5UU10KCVNpbXBsZSBkZXNjcmlwdGlvbiBvZiBhZGRpbmcgQVBJIGNhbGxzLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0gW2luY2x1ZGUvd2luZG93cy5oXQoJR2V0IHJpZCBvZiBXaW5lbGliMTYsIGF2b2lkIGRlY2xhcmluZyBzb21lIGlsbGVnYWwgZnVuY3Rpb25zIGluCglXaW5lbGliLCBhZGQgcHJvdG90eXBlcyBmb3Igc29tZSBlbmhhbmNlZCBtZXRhZmlsZSBmdW5jdGlvbnMsIGZpeAoJR2V0VGV4dEV4dGVudFBvaW50MzIgZGVjbGFyYXRpb25zLgoKCSogW3JlbGF5MzIvZ2RpMzIuc3BlY10gW29iamVjdHMvZW5obWV0YWZpbGUuY10KCUNvc21ldGljIGFuZCBmdW5jdGlvbmFsIGltcHJvdmVtZW50cy4KCgkqIFtpbmNsdWRlL3dpbmNvbi5oXSBbcHJvZ3JhbXMvdmlldy8qXQoJRml4ZXMsIGltcHJvdmVkIGNvbXBhdGliaWxpdHkgd2l0aCBuYXRpdmUgY29tcGlsZXJzLgoKVGh1IEFwciAgOSAxNTo0ODo0OSAxOTk4ICBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFt3aW4zMi9rZXJuZWwzMi5jXQoJSW1wbGVtZW50ZWQgRlRfVGh1bmsgLyBGVF9Qcm9sb2cgLyBGVF9FeGl0IC8gRlRfUHJvbG9nUHJpbWUuCglGaXhlZCBDb21tb24zMlRoa0xTIHRodW5rIGZ1bmN0aW9uLgoKCSogW3Rvb2xzL2J1aWxkLmNdIFtyZWxheTMyL3JlbGF5Mzg2LmNdIFtpZjE2MzIvcmVsYXkuY10KCUNoYW5nZWQgcmVsYXkgY29kZSB0byBhbGxvdyByZWdpc3RlciBmdW5jdGlvbnMgdG8gbW9kaWZ5IHN0YWNrIGxheW91dC4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCUltcGxlbWVudGVkIEFsbG9jTWFwcGVkQnVmZmVyIC8gRnJlZU1hcHBlZEJ1ZmZlci4KCgkqIFtyZWxheTMyL2tlcm5lbDMyLnNwZWNdIFtpZjE2MzIva2VybmVsLnNwZWNdIFt3aW4zMi9vcmRpbmFscy5jXQoJQWRkZWQgbmFtZXMgZm9yIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnMuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJQnVnZml4OiBMb2FkTGlicmFyeTE2IHNob3VsZCAqbm90KiBzaWxlbnRseSBsb2FkIDMyLWJpdCBETEwuCgpUaHUgQXByICA5IDAzOjU0OjU4IDE5OTggIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbd2luZG93cy9rZXlib2FyZC5jXQoJRml4IGFuIGVycm9uZW91cyB0ZXN0IGluIFRyYW5zbGF0ZUFjY2VsZXJhdG9yezE2LDMyfSBmb3IgdGhlIGVuZAoJb2YgdGhlIGFjY2VsZXJhdG9yIHRhYmxlLgoKVGh1IEFwciAgOCAyMDozNjoyOCAxOTk4ICBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+IAoKCSogW21pc2MvY3J0ZGxsLmNdCglJbXBsZW1lbnQgZ2V0ZW52LgoKCSogW21pc2MvY29tbWRsZy5jXQoJTWFrZSBHZXRbU2F2ZS9PcGVuXUZpbGVOYW1lIHdvcmsgaW4gbW9zdCBzaXR1YXRpb25zLgoKCSogW21pc2MvbHN0ci5jXQoJVXNlIHd2c3ByaW50ZjMyQSBpbnN0ZWFkIG9mIHZzcHJpbnRmIGluIEZvcm1hdE1lc3NhZ2UzMlgKCgkqIFttaXNjL3ZlcnNpb25dCglNYWtlIE5UMy41MCBhIHJlY29nbmlzZWQgdmVyc2lvbgoKCSogW2dyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jXQoJQ2hhbmdlIHRoZSBhbGdvcml0aG1lIHRvIGRyYXcgYXJjcwoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJUmV0dXJuIGFuIGVtcHR5IGJ1ZmZlciBpbiBMb2FkU3RyaW5nMzJBIGlmIG5vIHJlc291cmNlIGZvdW5kLgoKCSogW3dpbjMyL2NvZGVfcGFnZS5jXQoJVHJ5IGhhcmRlciB0byBnZXQgdGhlIHJpZ2h0IHNpemUgaW4gTXVsdGlCeXRlVG9XaWRlQ2hhci4KCgkqIFt3aW4zMi9wcm9jZXNzLmNdCglDYWxsIFdpbkV4ZWMzMiBmb3IgQ3JlYXRlUHJvY2VzczMyQS4KCgkqIFt3aW5kb3dzL3VzZXIuY10KCUluc3RhbGwgZGVmYXVsdCBJbnQwIEhhbmRsZXIgaW4gSW5pdEFwcCgpLgoKVGh1IEFwciAgOCAxOToyOTo0OCAxOTk4ICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoKCSogW21pc2MvaW1hZ2VsaXN0LmNdCglQcmVsaW1pbmFyeSBmaXggZm9yIGRyYXdpbmcgc2VsZWN0ZWQgaW1hZ2VzLgoJVmFyaW91cyBpbXByb3ZlbWVudHMuCgoJKiBbY29udHJvbHMvcHJvZ3Jlc3MuY11baW5jbHVkZS9wcm9ncmVzcy5jXVtpbmNsdWRlL2NvbW1jdHJsLmhdCglBZGRlZCBwcm9ncmVzcyBiYXIgbWVzc2FnZXMgYW5kIHN0eWxlcyBmb3IgSUU0LjAxIChkbGwgdmVyc2lvbiA0LjcyKQoJY29tcGF0aWJpbGl0eS4KCUZpeGVkIGxlZCBzaXplIHByb2JsZW0uCgoJKiBbY29udHJvbHMvdXBkb3duLmNdW2luY2x1ZGUvY29tbWN0cmwuaF0KCUFkZGVkIFVETV9HRVRSQU5HRTMyIGFuZCBVRE1fU0VUUkFOR0UzMi4KCgkqIFtvYmplY3RzL29lbWJpdG1hcHMuY11baW5jbHVkZS93aW5kb3dzLmhdW2luY2x1ZGUvYml0bWFwcy8qXQoJQWRkZWQgV2luOTUgaWNvbnMgYW5kIGZpeGVkIFdpbjk1IGN1cnNvciBhbmQgcmVzdG9yZSBidXR0b24gYnVnLgoJTm93IHRoZXkgc2hvdWxkIGJlIHZpc2libGUuIFNvcnJ5ISEhCgoJKiBbcmVsYXkzMi9jb21jdGwzMi5zcGVjXQoJQWRkZWQgbW9zdCBtaXNzaW5nIGZ1bmN0aW9uIG5hbWVzLgoKVHVlIEFwciAgNiAxODo0ODozNiAxOTk4ICBNYXR0aGV3IEJlY2tlciA8bWJlY2tlckBnbGFzc2NpdHkubmV0PgoKCSogW29iamVjdHMvZm9udC5jXSBbaWYxNjMyL2dkaS5zcGVjXQoJR2V0T3V0bGluZVRleHRNZXRyaWNzOiBzdHViCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglHZXRUZXh0Q2hhcnNldCBzaG91bGQganVzdCBjYWxsIEdldFRleHRDaGFyc2V0SW5mby4KCgkqIFttaXNjL21wci5jXSBbcmVsYXkzMi9tcHIuc3BlY10KCVdOZXRDYWNoZVBhc3N3b3JkOiBzdHViCgoJKiBbc2NoZWR1bGVyL3RocmVhZC5jXSBbcmVsYXkzMi91c2VyMzIuc3BlY10KCUF0dGFjaFRocmVhZElucHV0OiBzdHViCglVcGRhdGVkIGRvY3VtZW50YXRpb24uCgoJKiBbb2JqZWN0cy9wYWxldHRlLmNdCglVcGRhdGVkIGRvY3VtZW50YXRpb24uCgpUdWUgTWFyIDMxIDE3OjA2OjMwIDE5OTggIEphbWVzIEp1cmFuIDxqcmoxMjBAcHN1LmVkdT4KCgkqIFsqLyouY10KCUZpbmlzaGVkIGZpeGluZyBVU0VSMzIgb3JkaW5hbCBudW1iZXJzIGluIGZ1bmN0aW9uIGRvY3VtZW50YXRpb24uCgpNb24gTWFyIDMwIDIwOjI3OjM4IDE5OTggIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+CgoJKiBbbWlzYy9kZWJ1Z3N0ci5jXSBbaW5jbHVkZS9kZWJ1Z3N0ci5oXQoJTW92ZWQgX2R1bXBzdHIgZnJvbSByZWxheTMyL3JlbGF5Mzg2LmMuICBJbXByb3ZlZCBjb250cm9sCgljaGFyYWN0ZXIgaGFuZGxpbmcuCgoJKiBbbXNkb3MvaW50MjEuY10KCUltcGxlbWVudCAyMTVFMDAgLS0gZ2V0IG1hY2hpbmUgbmFtZS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJU2V0V2luZG93UG9zMzI6IE1ha2UgYW4gZXh0cmEgc3luYyB3aGVuIG1hcHBpbmcgbWFuYWdlZAoJd2luZG93cy4gIFRoaXMgbWFrZXMgc3VyZSB0aGUgcmVjb25maWd1cmUgZXZlbnQgaGFzIGJlZW4KCWhhbmRsZWQuICBTZWUgTXNoZWFydHMnIHdoYXQncy15b3VyLW5hbWUgd2luZG93LgoKTW9uIE1hciAzMCAwMToxMzo1MCAxOTk4ICBBbGV4YW5kZXIgVi4gTHVreWFub3YgPGxhdkBsb25nLnlhci5ydT4KCgkqIFtNYWtlZmlsZS5pbl0KCUluc3RhbGwgaW5jbHVkZXMgZnJvbSBUT1BTUkNESVIuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBNYXIgMjkgMTU6MTg6NTcgMTk5OCAgVXdlIEJvbm5lcyA8ZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CgoJKiBbbXNkb3MvaW50MjEuY10KCU1vcmUgdmVyYm9zZSBUcmFjZSBtZXNzYWdlcwoKU3VuIE1hciAyOSAxNTowMzozMCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCVRlcm1pbmF0ZSByZWxvY2F0aW9uIGNoYWlucyBvbiAwIG9mZnNldC4KClN1biBNYXIgMjkgMDI6MzU6NDUgMTk5OCAgSmFtZXMgSnVyYW4gIDxqcmoxMjBAcHN1LmVkdT4KCgkqIFt3aW5kb3dzL2NhcmV0LmNdIFt3aW5kb3dzL2NsYXNzLmNdIFt3aW5kb3dzL2NsaXBib2FyZC5jXQoJRml4ZWQgbW9yZSBVU0VSMzIgb3JkaW5hbCBudW1iZXJzIGluIGZ1bmN0aW9uIGRvY3VtZW50YXRpb24uCgpTYXQgTWFyIDI4IDIyOjQwOjIzIDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KCVJldHVybiAxIGZvciBXTV9OQ0NSRUFURSBpbiBEZXNrdG9wV25kUHJvYy4KCgkqIFtjb250cm9scy9tZW51LmNdCglGaXhlZCBjcmFzaCB3aGVuIGRlc3Ryb3lpbmcgYSB0b3AgcG9wdXAgd2luIHRoYXQgd2FzIG9ubHkgY3JlYXRlZAoJYnV0IG5vdCBzaG93bi4KCgkqIFtvbGUvdHlwZWxpYi5jXSBbaWYxNjMyL3R5cGVsaWIuc3BlY10KCUltcGxlbWVudGVkIE9BQnVpbGRWZXJzaW9uLgoKCSogW3dpbmRvd3Mvd2luLmNdCglGaW5hbGx5IGZpeGVkIHVnbHkgYnVnIGluIEdldFBhcmVudDMyIHRoYXQgYWZmZWN0ZWQgd2luZG93IHBsYWNlbWVudDoKCURpZG4ndCByZXR1cm4gMCBmb3Igd2luZG93cyB0aGF0IGhhdmUgbmVpdGhlciBXU19QT1BVUCBub3IKCVdTX0NISUxEIHNldC4gTm93IGl0IGFjdHMgZXhhY3RseSBsaWtlIFdpbmRvd3MgKGF0IGxlYXN0IEkgaG9wZSBzbyA7KQoKU2F0IE1hciAyOCAwMjoyNjo0MyAxOTk4ICBEaW1pdHJpZSBPLiBQYXVuICA8ZGltaUBtYWlsLmNzLnRvcm9udG8uZWR1PgoKCSogW0RFVkVMT1BFUlMtSElOVFNdIFtkb2N1bWVudGF0aW9uL2RlYnVnLW1zZ3NdCglVcGRhdGVkIGRvY3VtZW50YXRpb24gb24gZGVidWcgbWVzc2FnZXMKCgkqIFtpbmNsdWRlL2J1dHRvbi5oXSBbY29udHJvbHMvYnV0dG9uLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCVtpbmNsdWRlL2NvbWJvLmhdIFtjb250cm9scy9jb21iby5jXSBbY29udHJvbHMvY29tbWN0cmwuY10KCVtjb250cm9scy9pY29udGl0bGUuY10gW2NvbnRyb2xzL2xpc3Rib3guY10JW2NvbnRyb2xzL21lbnUuY10KCVtjb250cm9scy9zY3JvbGwuY10gW2NvbnRyb2xzL3dpZGdldHMuY10gCglDaGFuZ2VkIHNvbWUgMTYtYml0IGNvZGUgdG8gMzItYml0IGNvZGUuIEkgYW0gcG9zaXRpdmUgdGhpcyB3aWxsCglub3QgYnJlYWsgYW55dGhpbmcuCgoJKiBbY29udHJvbHMvdWl0b29scy5jXSAKCVJlbmFtZWQgdGhlIHByZWZpeCBvZiBzb21lIGZ1bmN0aW9ucyBmcm9tIFVJVE9PTFNfIHRvIFVJVE9PTFM5NV8KCXRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCB0aGV5IGltcGxlbWVudCBXaW45NSBsb29rLiBNYXliZSB3ZSB3aWxsCgloYXZlIGEgVUlUT09MUzMxXyBpbiB0aGUgZnV0dXJlLiBBbnlob3csIHRoZSBjaGFuZ2UgaXMgY29tcGxldGVseQoJaW50ZXJuYWwgdG8gdGhpcyBmaWxlLgoKCSogWyovKi5jXQoJQ2hhbmdlZCBhIGxvdCBvZiBbZl1wcmludGYgaW50byBhcHByb3ByaWF0ZSBkZWJ1ZyBtZXNzYWdlcy4KCkZyaSBNYXIgMjcgMTk6NTY6MTIgMTk5OCAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgkqIFtkb2N1bWVudGF0aW9uL3N0YXR1cy9dCglBZGRlZCBkaXJlY3RkcmF3IGFuZCBkaXJlY3Rzb3VuZCBzdGF0dXMuCgoJKiBbaWYxNjMyL3RodW5rLmNdW29sZS8qLmNdW3dpbjMyL2tlcm5lbDMyLmNdCglBZGRlZCBzb21lIGRvY3VtZW50YXRpb24uCglNb3ZlZCBGVU5DMDA0IHRvIHRodW5rLmMgc2luY2UgaXQgc2VlbXMgdG8gYmUgYSAxNi0+MzIgdGh1bmsKCShjYWxsaW5nIGNvbnZlbnRpb25zIGFuZCB0aGUgbGlrZSBzdGlsbCB1bmtub3duKS4KCkZyaSBNYXIgMjcgMDk6NTk6MzIgMTk5OCAgTW9ydGVuIEVyaWtzZW4gIDxtb3J0ZW5lQHB2di5vcmc+CgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdW3dpbmRvd3Mva2V5Ym9hcmQuY10KCUltcGxlbWVudGVkIENvcHlBY2NlbGVyYXRvclRhYmxlKCkgYW5kIENyZWF0ZUFjY2VsZXJhdG9yVGFibGUoKS4KCQoJKiBbaW5jbHVkZS9jb21wb2JqLmhdW29sZS9jb21wb2JqLmNdW3JlbGF5MzIvb2xlMzIuc3BlY10KCUFkZGVkIGltcGxlbWVudGF0aW9uIG9mIFN0cmluZ0Zyb21HVUlEMigpLiAKClR1ZSBNYXIgMjYgMjM6MTI6MDUgMTk5OCAgRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCgkqIFttaXNjL2ltYWdlbGlzdC5jXVtyZWxheTMyL2NvbWN0bDMyLnNwZWNdCglJbXBsZW1lbnRlZCBuZXcgZGVidWdnaW5nIGludGVyZmFjZS4KCUFkZGVkIG1pc3NpbmcgZnVuY3Rpb25zIChzb21lIGFyZSBlbXB0eSBzdHVicykuCglDaGFuZ2VkIG9yZGluYWxzIGluIGNvbWN0bDMyLnNwZWMgKG5vdyBkbGwgdmVyc2lvbiA0LjcyIGNvbWF0aWJsZSkuCgoJKiBbb2JqZWN0cy9vZW1iaXRtYXBzLmNdW2luY2x1ZGUvd2luZG93cy5oXQoJICBbaW5jbHVkZS9iaXRtYXBzLypdCglBZGRlZCBtaXNzaW5nIHJlc3RvcmUgYml0bWFwcyBmb3IgV2luOTUgbG9vay4KCUFkZGVkIG1pc3NpbmcgV2luOTUgY3Vyc29ycy4KClRodSBNYXIgMjYgMTA6MTg6MjAgMTk5OCAgRG91Z2xhcyBSaWRnd2F5ICA8cmlkZ3dheUB3aW5laHEuY29tPgoKCSogW3Byb2dyYW1zL3ZpZXcvTWFrZWZpbGUuaW5dIFtwcm9ncmFtcy92aWV3L3ZpZXcuY10KCUZpeCBjb21waWxhdGlvbiwgQWxkdXMgcGxhY2VhYmxlIG1ldGFmaWxlIGxvYWRpbmcuCgoJKiBbZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jXSBbcmVsYXkzMi9nZGkzMi5zcGVjXSAKCSAgW29iamVjdHMvbWV0YWZpbGUuY10KCUltcGxlbWVudGVkIHZhcmlvdXMgMzIgYml0IHZlcnNpb25zIG9mIHJlZ3VsYXIgbWV0YWZpbGUgQVBJLgoKCSogW29iamVjdHMvZW5obWV0YWZpbGUuY10KCUltcGxlbWVudGVkIHJlbmRlcmluZyBvZiBhIGNvdXBsZSBvZiBkb3plbiByZWNvcmRzLgoKVHVlIE1hciAyNCAyMDowNjozOSAxOTk4ICBNYXR0aGV3IEJlY2tlciA8bWJlY2tlckBnbGFzc2NpdHkubmV0PgoKCSogW21lbW9yeS8qLmNdCglVcGRhdGVkIGRvY3VtZW50YXRpb24gZm9yIEFQSSBtYW5wYWdlcy4KCk1vbiBNYXIgMjMgMDk6MDk6MDAgMTk5OCAgQWxleCBLb3JvYmthIDxhbGV4QHBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbbWlzYy93aW5zb2NrLmNdCglGaXhlZCAzMi1iaXQgRE5TIGxvb2t1cC4KCk1vbiBNYXIgMjMgMjM6NTQ6NDcgMTk5OCAgTHVpeiBPdGF2aW8gTC4gWm9yemVsbGEgIDx6b3J6ZWxsYUBuci5jb25leHdhcmUuY29tPgoKCSogW211bHRpbWVkaWEvaW5pdC5jXQoJTmV3IGNvZGUgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZ2F0aGVyaW5nIG9mIGluZm9ybWF0aW9uIGFib3V0Cgl0aGUgTUlESSBkZXZpY2VzLCBmb3IgZnV0dXJlIHVzZS4KClRodSBNYXIgMTkgMDA6NTk6MjkgMTk5OCAgSmltIFBldGVyc29uIDxqc3BldGVyQG5vc3BhbS5iaXJjaC5lZS52dC5lZHU+CgoJKiBbd2luZG93cy93aW4uY10KCUVsaW1pbmF0ZWQgaW5hY2N1cmF0ZSBzZXR0aW5nIG9mIGNzLT5oTWVudSBpbgoJV0lOX0NyZWF0ZVdpbmRvd0V4LCBhbG9uZyB3aXRoIHN1cGVyZmx1b3VzIFNldE1lbnUzMiBjYWxsLgoKTW9uIE1hciAxNiAxNzo0MDo1MyAxOTk4ICBQZXR0ZXIgUmVpbmhvbGR0c2VuIDxwZXJlQHRkLm9yZy51aXQubm8+CgoJKiBbZGVidWdnZXIvZGJnLnldIFtkZWJ1Z2dlci9NYWtlZmlsZS5pbl0gW01ha2VmaWxlLmluXQoJSW5zdGFsbCB3aW5lLnN5bSBpbiAkKGV4ZWNfcHJlZml4KS9saWIgYW5kIG1ha2Ugc3VyZSB0aGUgZGVidWdnZXIKCWZpbmRzIGl0LgoKU3VuIE1hciAxNSAyMjozNjozNSAxOTk4ICBNaWNoYWVsIFZla3NsZXIgPG12ZWtzbGVyQHR4LnRlY2huaW9uLmFjLmlsPgoKCSogW2R1bW15LmNdIFtpZjE2MzIvZ2RpLnNwZWNdCglGaXhlZCBzdHViIGRlY2xhcmF0aW9uIG9mIEdESV81MzIsIHNvIEhlYnJldy1Xb3JkMiBraW5kIG9mIHdvcmtzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTWFyIDE1IDAzOjQ2OjUwIDE5OTggIERpbWl0cmllIE8uIFBhdW4gIDxkaW1pQG1haWwuY3MudG9yb250by5lZHU+CgoJKiBbKi8qXQoJRml4ZWQgc29tZSBkcHJpbnRmXyBzdWNoIHRoYXQgdGhlcmUgaXMgb25lIGFuZCBvbmx5IG9uZQoJbmV3IGxpbmUgZm9yIGVhY2ggZHByaW50ZiBhbmQgdGhhdCBuZXcgbGluZSBvY2N1cnMgYXQgdGhlIGVuZC4KCVRyYW5zZm9ybWVkIHNvbWUgZnByaW50ZnMgaW50byBwcm9wZXIgZGVidWcgc3RhdGVtZW50cy4KCVJlbW92ZWQgbXVjaCByZWR1bmRhbmN5IGZyb20gbW9zdCBvZiB0aGUgZGVidWcgc3RhdGVtZW50cy4gVGhlCglyZWR1bmRhbmN5IGFwcGVhcmVkIGJlY2F1c2Ugbm93IHRoZSBjb21wb25lbnQgYW5kIGZ1bmN0aW9uCgluYW1lIGlzIG91dHB1dCBhdXRvbWF0aWNhbGx5LiBNb3N0IGRlYnVnIHN0YXRlbWVudHMgYWxzbyB1c2VkIHRvCglvdXRwdXQgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLgoJQWxsIHRoZXNlIGNoYW5nZXMgcHJlcGFyZWQgdGhlIHNvdXJjZSB0byBzd2l0Y2ggY29tcGxldGVseSB0bwoJdGhlIG5ldyBkZWJ1Z2dpbmcgaW50ZXJmYWNlLgoJRm9yIG1vcmUgaW5mbywgcmVmZXIgdG8gLi9kb2N1bWVudGF0aW9uL2RlYnVnLW1zZwoKU2F0IE1hciAxNCAxOTo0NToyMyAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFttaXNjL3NoZWxsLmNdIFtpZjE2MzIva2VybmVsLnNwZWNdCglDaGFuZ2VkIHBhcmFtZXRlcnMgb2YgRlVOQzAwNCgpIHRvIGZpeCBhIGNyYXNoLgoJTm90IHN1cmUgaWYgdGhpcyBmaXggaXMgY29ycmVjdCAoZG9jIHdhbnRlZCkuCgoJKiBbd2luZG93cy91c2VyLmNdIFtpZjE2MzIvdXNlci5zcGVjXSBbaW5jbHVkZS91c2VyLmhdCglJbXBsZW1lbnRlZCBVc2VyU2VlVXNlckRvLgoKCSogW21zZG9zL2ludDIxLmNdIFtpbmNsdWRlL21zZG9zLmhdCglBZGRlZCAiR0VUIExJU1QgT0YgTElTVFMiIChJTlQgMjEvNTJoKS4KClNhdCBNYXIgMTQgMTU6NDg6MDIgMTk5OCAgRG91Z2xhcyBSaWRnd2F5IDxyaWRnd2F5QGdtY2wuY29tPgoKCSogW2luY2x1ZGUvd2luZG93cy5oXSBbcmVsYXkzMi9nZGkzMi5zcGVjXSBbb2JqZWN0cy9lbmhtZXRhZmlsZS5jXQoJQmVnaW5uaW5ncyBvZiBlbmhhbmNlZCBtZXRhZmlsZSBzdXBwb3J0LgoKRnJpIE1hciAxMyAyMDo1MzowOSAxOTk4ICBKb2huIFJpY2hhcmRzb24gPGpyaWNoYXJkQHprby5kZWMuY29tPgoKCSogW3dpbjMyL2NvbnNvbGUuY10KCVJlc3RhcnQgaW50ZXJydXB0ZWQgY29uc29sZSB3cml0ZXMuCgpGcmkgTWFyIDEzIDE4OjU5OjI0IDE5OTggIE1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+CgoJKiBbKi8qLmNdCglVcGRhdGVkIGRvY3VtZW50YXRpb24gZm9yIEFQSSBtYW5wYWdlcy4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJUmVsZWFzZURDMTY6IEZpeGVkIGNhc3QuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdIFttZW1vcnkvdmlydHVhbC5jXQoJVmlydHVhbFF1ZXJ5e0V4fSBzaG91bGQgcmV0dXJuIERXT1JEIGluc3RlYWQgb2YgQk9PTDMyLgoKRnJpIE1hciAxMyAxMzowMzowNiAxOTk4ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtSRUFETUVdW2RvY3VtZW50YXRpb24vc3RhdHVzL10KCVJFQURNRSB1cGRhdGVkLCBhZGRlZCBsemV4cGFuZCx2ZXJzaW9uIGFuZCBtdWx0aW1lZGlhCglzdGF0dXMgbm90ZXMgdG8gbmV3IGRvY3VtZW50YXRpb24vc3RhdHVzIGRpcmVjdG9yeS4KCgkqIFtvbGUvKi5jXVtpZjE2MzIvdHlwZWxpYi5zcGVjXQoJQWRkZWQgdHlwZWxpYiBzdHVicywgc2V2ZXJhbCBzbWFsbCBhZGRpdGlvbnMgYW5kIGZpeGVzLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJRml4ZWQgYSBzbWFsbCBidWcgKGZpeHVwX2ltcG9ydHMgZ290IHBhc3NlZCB0aGUgd3JvbmcgaE1vZHVsZSBpbiBhCglyZW1hcGNhc2UpLgoKCSogW2xvYWRlci9zaWduYWwuY11baWYxNjMyL3NpZ25hbC5jXVttaXNjL3dpbnNvY2tfZG5zLmNdCgkgIFtsb2FkZXIvbW9kdWxlLmNdCglGaXhlZCBzb21lIHJlY3Vyc2l2ZSBkZWJ1Z2dlciBjcmFzaGVzIChjYXVzZWQgYnkgaW52YWxpZCBGUykuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJVHdvIGJ1Z3MgZml4ZWQuCgpGcmkgTWFyIDEzIDA0OjU1OjAxIDE5OTggIERhdmlkIExlZSBMYW1iZXJ0IDxsYW1iZXI0NUBlZ3IubXN1LmVkdT4KCgkqIFtpbmNsdWRlL3dpbm50LmhdIFtpbmNsdWRlL3dpbm5scy5oXQoJTW92ZWQgTEFOR194eHggZmxhZ3MgdG8gd2lubmxzLmgKCgkqIFtpbmNsdWRlL3dpbm5scy5oXQoJQWRkZWQgZmxhZ3MgZm9yIEdldERhdGVGb3JtYXQoKTsgZml4ZWQgdmFsaWRpdHkgb2YKCUxPQ0FMRV9TWVNURU1fREVGQVVMVC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gCglBZGRlZCBHZXRUaW1lRm9ybWF0KCkgcHJvdG90eXBlcy4KCgkqIFtvbGUvb2xlMm5scy5jXQoJSW1wbGVtZW50ZWQgQVNDSUkgZGF0ZS0gYW5kIHRpbWUtZnVuY3Rpb25zLCAgdXNpbmcgYW4KCW9wdGltaXplZCBjb21tb24gY29yZTsgIGFkZGVkIHN0dWJzIGZvciBVbmljb2RlIHZlcnNpb25zOyAgCglzdGFydGVkIHdvcmsgb24gYSBVbmljb2RlIGNvcmUuCgoJKiBbQVVUSE9SU10KCUFkZGVkIG15IG5hbWUuCgpNb24gTWFyICA5IDIwOjEwOjE1IDE5OTggIEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CgoJKiBbcmVsYXkzMi9jb21jdGwzMi5zcGVjXSBbaW5jbHVkZS9pbWFnZWxpc3QuaF0KCSAgW2luY2x1ZGUvY29tbWN0cmwuaF0gW21pc2MvaW1hZ2VsaXN0LmNdIFttaXNjL01ha2VmaWxlLmluXQoJRmlyc3QgYXR0ZW1wdCBhdCBpbXBsZW1lbnRpbmcgSW1hZ2VMaXN0cy4KClN1biBNYXIgIDggMjA6MTk6NDkgMTk5OCAgVXdlIEJvbm5lcyAgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCgkqIFtmaWxlcy9kb3NfZnMuY10gW2NvbmZpZ3VyZS5pbl0KCVRyeSB0byBnZXQgRmlsZVRpbWVUb0xvY2FsRmlsZVRpbWUsRmlsZVRpbWVUb1N5c3RlbVRpbWUgYW5kCglTeXN0ZW1UaW1lVG9GaWxlVGltZSByaWdodC4KCVVzZSB0aW1lZ20oKSB3aGVyZSBhdmFpbGFibGUuCgoJKiBbbWlzYy9sc3RyLmNdCglGaXggYW4gb2ZmIGJ5IG9uZSBlcnJvciBpbiBGb3JtYXRNZXNzYWdlIGFuZCBoYW5kbGUgdGhlIGNhc2UgCgl3aGVuIGFyZ3MgPSBOVUxMICh1c2VkIGJ5IHByb2dyYW1zIHRvIGdldCB0aGUgbGVuZ3RoIG9mIHRoZSAKCXN0cmluZykuCgoJKiBbd2luMzIvY29uc29sZS5jXQoJQWN0dWFsIGRpc3BsYXkgYSBwZXItcHJvY2VzcyBUaXRsZSBzdHJpbmcsIGJldHRlciB3b3JraW5nCglhdHRlbXB0IGZvciBXcml0ZUNvbnNvbGUzMlcgYW5kIFJlYWRDb25zb2xlMzJXLgoKRnJpIE1hciAgNiAyMDozMzo0NSAxOTk4ICBTbGF2ZW4gUmV6aWMgIDxlc2VydGVAY3MudHUtYmVybGluLmRlPgoKCSogW2luY2x1ZGUvY29uZmlnLmguaW5dW2NvbmZpZ3VyZS5pbl1bbXVsdGltZWRpYS9hdWRpby5jXQoJICBbbXVsdGltZWRpYS9kc291bmQuY10KCUFkZGVkIGNoZWNrIGZvciBGcmVlQlNEIHNvdW5kIHN5c3RlbS4KClN1biBNYXIgIDEgMTc6NDA6MTAgMTk5OCAgSmFzb24gU2Nob25iZXJnIDxzY2hvbkBtdGkuc2dpLmNvbT4KCgkqIFtjb250cm9scy9lZGl0LmNdIFtpbmNsdWRlL29sZS5oXSBbaW5jbHVkZS9zaGxvYmouaF0KCVJlbW92ZWQgZmluYWwgY29tbWFzIGluIGVudW0gdHlwZXMuCgpNb24gRmViIDIzIDA3OjUyOjE4IDE5OTggIEx1aXogT3RhdmlvIEwuIFpvcnplbGxhICA8em9yemVsbGFAbnIuY29uZXh3YXJlLmNvbT4KCgkqIFttdWx0aW1lZGlhL3RpbWUuY10KCVdvcmthcm91bmQgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGluc2lkZSB0aW1lR2V0VGltZS4KCgkqIFttdWx0aW1lZGlhL2F1ZGlvLmNdCglXT0RNX0dFVE5VTURFVlMgYW5kIFdJRE1fR0VUTlVNREVWUyBvbmx5IHJldHVybiAxIG5vdyBpZiB0aGUKCVNPVU5EX0RFViBjYW4gYmUgb3BlbmVkLCBvciBpZiBpdCdzIGJ1c3kuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBNYXIgIDEgMTA6NDU6MjMgMTk5OCAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglGaXhlZCBwcm9ibGVtIHdpdGggd2VpcmQgRExMcyAoTkVfRkZMQUdTX1NJTkdMRURBVEEgJiYgREdST1VQID0gMCkuCgoJKiBbbXNkb3MvZG9zbWVtLmNdCglFeHBvcnQgYWRkcmVzcyBmb3IgX18wMDAwSCwgdG9vLgoKCSogW21zZG9zL2RwbWkuY10KCUNoYW5nZWQgTWVtQWxsb2MgZnVuY3Rpb25zIHRvIHJldHVybiBsZXNzIGZyYWdtZW50ZWQgYWRkcmVzc2VzLgoKU2F0IEZlYiAyOCAxODo1MDoxMiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXSBbc2NoZWR1bGVyL3N5c2RlcHMuY10KCURvbid0IHVzZSAlZnMgcmVnaXN0ZXIgYmVmb3JlIHRocmVhZGluZyBpbml0aWFsaXphdGlvbi4KClNhdCBGZWIgMjggMTQ6MDQ6NTYgMTk5OCAgS3Jpc3RpYW4gTmllbHNlbiAgPGtyaXN0aWFuLm5pZWxzZW5Acmlzb2UuZGs+CgoJKiBbY29uZmlndXJlLmluXSBbaW5jbHVkZS9hY2NvbmZpZy5oXQoJQXV0b2NvbmYgbWFjcm8gdG8gY2hlY2sgZm9yIG5vbi1yZWVudHJhbnQgWCBsaWJyYXJpZXMuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUluIFNldFdpbmRvd1BvczMyKCksIGRvIG5vdCBjYXVzZSBXTV9TSVpFIG1lc3NhZ2VzIHdoZW4gdGhlCglTV1BfTk9TSVpFIGZsYWcgaXMgc3BlY2lmaWVkLiBUaGlzIGZpeGVzIHRoZSBkaXZpc2lvbi1ieS16ZXJvIGluCglCb3JsYW5kIEMrKyA0LjAgIk9wZW4gUHJvamVjdCIgbWVudSBpdGVtLgoKU2F0IEZlYiAyOCAxMzoxMToyNiAxOTk4ICBKYW1lcyBNb29keSAgPDAxMzI2M21AZHJhZ29uLmFjYWRpYXUuY2E+CgoJKiBbb2xlL29sZTJubHMuY10KCUNoYW5nZWQgIkVuZ2xpc2giIHZhbHVlcyBmcm9tIEdlcm1hbiB0byBFbmdsaXNoLgoKCSogW2ZpbGVzL2Rvc19mcy5jXQoJRml4ZWQgb2ZmLWJ5LW9uZSBtb250aCBidWcuCgpGcmkgRmViIDI3IDIyOjEyOjAxIDE5OTggIERvdWdsYXMgUmlkZ3dheSAgPHJpZGd3YXlAd2luZWhxLmNvbT4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRml4IHdpbmVsaWIgY2xhc3MgbWVudSBsb2FkaW5nIGJ1Zy4KCgkqIFtpbmNsdWRlL21vZHVsZS5oXSBbbG9hZGVyL21vZHVsZS5jXQoJTG9hZE1vZHVsZTMyIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBDcmVhdGVQcm9jZXNzLgoKCSogW3Byb2dyYW1zL3ZpZXcvKl0KCU1ldGFmaWxlIHZpZXdlciBzYW1wbGUgcHJvZ3JhbS4KCgkqIFtkb2N1bWVudGF0aW9uL3dpbmUudGV4aW5mb10gW2RvY3VtZW50YXRpb24vTWFrZWZpbGUuaW5dCglJbXByb3ZlbWVudHMgYW5kIGFkZGl0aW9ucywgSFRNTCB0YXJnZXQuCgpGcmkgRmViIDI3IDA0OjI3OjQ4IDE5OTggIERpbWl0cmllIE8uIFBhdW4gPGRpbWlAY3MudG9yb250by5lZHU+CgoJKiBbKi8qXQoJU3dpdGNoZWQgdG8gdGhlIG5ldyBkZWJ1ZyBtZXNzYWdlcyBpbnRlcmZhY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uCglwbGVhc2UgcmVmZXIgdG8gZG9jdW1lbnRhdGlvbi9kZWJ1Zy1tc2dzLiBCZWNhdXNlIHRoZSBuZXcgc2NoZW1lCglpbnRyb2R1Y2VzIGEgbmV3IHNlbWFudGljIGxldmVsLCBJIGhhZCB0byBtYW51YWxseSBkbyB0aHJvdWdoCglhYm91dCA1MzAgZHByaW50Zl94eHghICBUaGUgcmVzdCBvZiBhYm91dCAyNDAwIHdoZXJlIHRyYW5zZm9ybWVkCgl2aWEgYSBzY3JpcHQuICBCZWNhdXNlIG9mIHRoZSBsYXJnZSBudW1iZXIgb2YgY2hhbmdlcyB0aGF0IEkgaGFkCgl0byBkbywgc29tZSBtYXkgaGF2ZSBub3QgY29tZSBvdXQgYXMgbmljZWx5IGFzIEkgd2FudGVkIHRoZW0uICBJZgoJdGhpcyBpcyB0aGUgY2FzZSwgcGxlYXNlIGxldCBtZSBrbm93LiBUaGVyZSBpcyBhIGxvdCBvZiB3b3JrIGxlZnQKCXRvIGRvOiAtLSBhIGZldyBodW5kcmVkIHByaW50ZidzIHRvIGJlIGNvbnZlcnRlZCAtLSBhYm91dCAyMzAwCglmcHJpbnRmJ3MgdG8gYmUgY29udmVydGVkIC0tIGFib3V0IDYwMCBGSVhNRSdzIHRvIGJlIHRyYW5zZm9ybWVkCglUaGUgcHJvYmxlbSBpcyB0aGF0IGluIHRoZSBhYm92ZSBtZW50aW9uZWQgY2FzZXMsIGEgbG90IG9mIG1hbnVhbAoJaW50ZXJ2ZW50aW9uIGlzIHJlcXVpcmVkIGJlY2F1c2UgYSBsb3Qgb2YgdGhlIGluZm9ybWF0aW9uIGlzCgltaXNzaW5nLiAgVGhlcmUgYXJlIGFsc28gYSBsb3Qgb2Ygb3RoZXIgdGhpbmdzIHRvIGJlIGRvbmUgdG8gdGhlCglpbnRlcmZhY2UgYW5kIHNvIGZvcnRoLiBJIGhhdmUgbm93IGlkZWFzIGZvciBhIGF0IGxlYXN0IGEgbW9udGgKCXdvcnRoIG9mIGZ1bGwgdGltZSB3b3JrIDopIEkgd2lsbCBwcm9jZWVkIHdpdGggbWFueSBjaGFuZ2VzIGluIHRoZQoJbmV4dCBmZXcgcmVsZWFzZXMsIHNvIHBsZWFzZSBkbyBub3Qgc3RhcnQgbW9kaWZpbmcgdGhpbmdzIGJlY2F1c2UKCXRoZXJlIHdpbGwgYmUgYSBoZWxsIG9mIGEgbG90IG9mIGNvbmZsaWN0cy4gSWYgeW91IGhhdmUgaWRlYXMgdGhhdAoJeW91IHdhbnQgdG8gaW50ZWdyYXRlIG9yIHlvdSB3YW50IHRvIHdvcmsgb24gZGlmZmVyZW50IHRoaW5ncywKCXBsZWFzZSBjb29yZGluYXRlIHdpdGggbWUuCgpUaHUgRmViIDI2IDEzOjA0OjI5IDE5OTggIERhdmlkIExlZSBMYW1iZXJ0IDxsYW1iZXI0NUBlZ3IubXN1LmVkdT4KCgkqIFtvbGUvb2xlMm5scy5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglGaXJzdCB0cnkgYXQgT0xFIGRhdGUtIGFuZCB0aW1lLWZvcm1hdHRpbmcgZnVuY3Rpb25zLgoKV2VkIEZlYiAyNSAxMToyMDozNSAxOTk4IE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2ZpbGVzLyouY10KCUNoYW5nZWQgZG9zIGRldmljZSBoYW5kbGluZywgYWRkZWQgJ0NPTicgZGV2aWNlaGFuZGxpbmcuCgoJKiBbZ3JhcGhpY3MvZGRyYXcuY10KCUJ1ZyBmaXhlcywgc29tZSBhZGRpdGlvbnMuCgoJKiBbaWYxNjMyL2J1aWx0aW4uY11bbG9hZGVyL21vZHVsZS5jXVtsaWJyYXJ5L3dpbmVzdHViLmNdCglTbWFsbCBoYWNrIHNvIHdlIGRvbid0IG5lZWQgYSBkdW1teSBCVUlMVElOX0xvYWRNb2R1bGUKCWluIHdpbmVzdHViLmMuCgoJKiBbb2xlLypdW3JlbGF5MzIvb2xlMzIuc3BlY11baWYxNjMyL3N0b3JhZ2Uuc3BlY10KCXN0b3JhZ2UuZGxsIHN0YXJ0ZWQuIHdpbndvcmQgbG9hZHMgZG9jdW1lbnRzIChzYXZpbmcKCWRvZXNuJ3Qgd29yayB5ZXQsIGR1bm5vIHdoeSkuCglTZXZlcmFsIG9sZSBhZGRpdGlvbnMsIHNvbWUgY2xlYW51cHMgYW5kIGJ1Z2ZpeGVzLgoJSU1hbGxvYzE2IGltcGxlbWVudGVkLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJQWRkZWQgc29tZSBjb21tZW50cywgZml4ZWQgY2lyY3VsYXIgZGxsIHJlZmVyZW5jZXMsCglmaXhlZCBtb2RyZWYgb3JkZXJpbmcsIGZpeGVkIHRscyBhbGxvY2F0aW9uLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUFkZGVkIHZhbGlkaXR5IGNoZWNrcyBiZWZvcmUgZXZlcnkgR0VUX0FSRU5BX1BUUi4KCShzZXZlcmFsIGZ1bmN0aW9ucyByZWx5IG9uIEdsb2JhbCogcmV0dXJuIHZhbHVlcwoJIG9uIGludmFsaWQgaGFuZGxlcywgbGlrZSBJc1Rhc2spLgoJSW1wbGVtZW50ZWQgR2xvYmFsVW5sb2NrRnJlZTE2LgoKCSogW21lbW9yeS92aXJ0dWFsLmNdCglSZXBsYWNlZCBkcHJpbnRmX3ZpcnR1YWwgYnkgZnByaW50Ziwgc28gd2UgY2FuCglkbyAnaW5mbyBtYXAnIGFnYWluIGluIHRoZSBkZWJ1Z2dlci4gSW5jcmVhc2UgcmVhZAoJbGluZXNpemUgZm9yIExpbnV4Mi4xIGNhc2VzLgoKCSogW21pc2MvY3B1LmNdW21pc2MvcmVnaXN0cnkuY10KCU1vdmVkIGNwdSByZWdpc3RyeSBpbml0aWFsaXphdGlvbiB0byBtaXNjL2NwdS5jLgoKCSogW211bHRpbWVkaWEvZHNvdW5kLmNdCglFbmhhbmNlZCwgcmVwbGFjZWQgR0VUT1NQQUNFIGJ1ZmZlcmluZ2NoZWNrIGJ5IFNFVEZSQUdNRU5ULgoKCSogW3JlbGF5MzIvY3J0ZGxsLnNwZWNdW3JlbGF5MzIvbnRkbGwuc3BlY10KCVJlcGxhY2VkIHNvbWUgcHRyIGJ5IHJlc3BlY3RpdmUgJ3N0cicgYW5kICd3c3RyJyBhcmd1bWVudHMKCWZvciBsaWJjIGZ1bmN0aW9ucy4KCgkqIFtzY2hlZHVsZXIvdGhyZWFkLmNdCglBZGRlZCBzb21lIHNhbml0eSBjaGVja3MgdG8gc3RhY2thbGxvY2F0aW9uLCB0bHNoYW5kbGluZyBmaXhlZC4KCgkqIFt0b29scy9idWlsZC5jXQoJRml4ZWQgY2RlY2wgYXJndW1lbnR0eXBlIG9yZGVyICh3YXMgcmV2ZXJzZWQpLgoKCSogW3dpbjMyL29yZGluYWxzLmNdCglJbXBsZW1lbnRlZCBLRVJORUxfNDQ5LgoKCSogW3dpbmRvd3MvZGlucHV0LmNdCglTb21lIGZpeGVzLCBuZWVkcyBtdWNoIG1vcmUgd29yay4gVG9tYiBSYWlkZXIyIHdvcmtzIHdpdGgga2V5Ym9hcmQgOykKClR1ZSBGZWIgMjQgMjA6NDY6MzcgMTk5OCAgSmFtZXMgSnVyYW4gICA8anJqMTIwQHBzdS5lZHU+CgoJKiBbd2luZG93cy93aW4uY10KCUZpeGVkIFVTRVIzMiBvcmRpbmFsIG51bWJlcnMgaW4gZG9jdW1lbnRhdGlvbi4KClNhdCBGZWIgMjEgMTI6MzA6MzggMTk5OCAgSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEB6a28uZGVjLmNvbT4KCgkqIFtmaWxlcy9maWxlLmNdIFtpbmNsdWRlL2szMm9iai5oXSBbbWVtb3J5L3ZpcnR1YWwuY10KCVtzY2hlZHVsZXIvY3JpdHNlY3Rpb24uY10gW3NjaGVkdWxlci9ldmVudC5jXSBbc2NoZWR1bGVyL2hhbmRsZS5jXQoJW3NjaGVkdWxlci9rMzJvYmouY10gW3NjaGVkdWxlci9tdXRleC5jXSBbc2NoZWR1bGVyL3Byb2Nlc3MuY10KCVtzY2hlZHVsZXIvc2VtYXBob3JlLmNdIFtzY2hlZHVsZXIvdGhyZWFkLmNdCglBZGRlZCBnZW5lcmljIGszMm9iaiByZWFkIGFuZCB3cml0ZSByb3V0aW5lcyBmb3IgazMyb2JqcyB0aGF0CglzdXBwb3J0IEkvTy4KCgkqIFtkb2N1bWVudGF0aW9uL2NvbnNvbGVdCglVcGRhdGVkIGNvbnNvbGUgZG9jcy4KCgkqIFt3aW4zMi9jb25zb2xlLmNdCglNYWtlIGNvbnNvbGUgd29yayBsaWtlIGEgazMyb2JqIHRoYXQgc3VwcG9ydHMgSS9PLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJTWFrZSBXcml0ZUZpbGUgYW5kIFJlYWRGaWxlIHRha2UgSEFORExFMzIgZm9yIGhhbmRsZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEZlYiAxNSAxNDowNzowNyAxOTk4ICBEaW1pdHJpZSBPLiBQYXVuICA8ZGltaUBtYWlsLmNzLnRvcm9udG8uZWR1PgoKCSogW2NvbnRyb2xzL21lbnUuY10gW21pc2MvdmVyLmNdIFttdWx0aW1lZGlhL2Rzb3VuZC5jXQoJICBbbXVsdGltZWRpYS9qb3lzdGljay5jXSBbd2luZG93cy9kaWFsb2cuY10KCU1vZGlmaWVkIHNvbWUgZHByaW50Zl94eHgncyB0byBwcmVwYXJlIHRoZW0gZm9yIGEgbmV3CglkcHJpbnRmXyBzY2hlbWUuIEJhc2ljYWxseSwgSSBjaGFuZ2VkIHRoZSBkcHJpbnRmJ3MgdGhhdAoJb3V0cHV0ZWQgYSBsaW5lIHdpdGggbWFueSBkcHJpbnRmIGNhbGxzIHRvIGRvIGp1c3Qgb25lCglkcHJpbnRmIGNhbGwuCgpTdW4gRmViIDE1IDEyOjAyOjU5IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2dyYXBoaWNzL3gxMWRydi8qLmNdIFtvYmplY3RzLyouY10KCUEgZmV3IFgxMSBjcml0aWNhbCBzZWN0aW9uIG9wdGltaXphdGlvbnMsIG1vc3RseSB3aXRoIFhHZXQvUHV0UGl4ZWwuCgoJKiBbc2NoZWR1bGVyL3N5c2RlcHMuY10gW21pc2MvbWFpbi5jXQoJTWFrZSBzdXJlIFgxMSBjcml0aWNhbCBzZWN0aW9uIGlzIGF2YWlsYWJsZSBiZWZvcmUgYW55IFhsaWIgY2FsbC4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW3Rvb2xzL2J1aWxkLmNdCglZZXQgYW5vdGhlciBhdHRlbXB0IGF0IGZpeGluZyBDYXRjaC9UaHJvdy4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUZpeGVkIGJyb2tlbiBQRSBETEwgbG9hZGluZy4KCgkqIFtpbmNsdWRlL3dpbm50LmhdIFtzY2hlZHVsZXIvaGFuZGxlLmNdIFtzY2hlZHVsZXIvKi5jXQoJSW1wbGVtZW50ZWQgaGFuZGxlIGFjY2VzcyByaWdodHMuCglBZGRlZCBHZXQvU2V0SGFuZGxlSW5mb3JtYXRpb24uCgpTdW4gRmViIDE1IDA5OjQ1OjIzIDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW21pc2Mvd2luc29jay5jXQoJRml4ZWQgYnVnIGluIFdTQUNsZWFudXAgd2hpY2ggbGVhZCB0byBjcmFzaGVzIGluIFdJTlNPQ0tfSGFuZGxlSU8uCgoJKiBbZ3JhcGhpY3MvZm9udGVuZ2luZS5jXSBbaW5jbHVkZS9mb250LmhdCglNaW5vciBpbXByb3ZlbWVudHMuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJSW1wbGVtZW50ZWQgR2xvYmFsRW50cnlIYW5kbGUuCgoJKiBbbWlzYy90b29saGVscC5jXQoJRml4ZWQgYSBtZW1vcnkgYnVnIGluIE5vdGlmeSpyZWdpc3Rlci4KCgkqIFttaXNjL3czMnNjb21iLmNdCglJbXByb3ZlZCBHZXQxNkRMTEFkZHJlc3MuCgoJKiBbb2JqZWN0cy9nZGlvYmouY10KCUltcGxlbWVudGVkIEdkaVNlZUdkaURvLgoKClNhdCBGZWIgMTQgMTQ6NTc6MzkgMTk5OCAgSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEB6a28uZGVjLmNvbT4KCgkqIFt3aW4zMi9jb25zb2xlLmNdCglBZGRlZCB0aGUgY29uc29sZSBpbXBsZW1lbnRhdGlvbiwgQWxsb2NDb25zb2xlLCBGcmVlQ29uc29sZSwKCUNPTlNPTEVfSW5oZXJpdENvbnNvbGUuCgoJKiBbZG9jdW1lbnRhdGlvbi9jb25zb2xlXQoJU29tZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBjb25zb2xlLgoKCSogW2luY2x1ZGUvd2luZXJyb3IuaF0KCUFkZGVkIHNvbWUgZXJyb3IgZGVmaW5lcy4KCgkqIFtzY2hlZHVsZXIvazMyb2JqLmNdCglSZWdpc3RlcmVkIHRoZSBzY2hlZHVsZXIgb3BzLgoKRnJpIEZlYiAxMyAxOTozNTozNSAxOTk4ICBKYW1lcyBNb29keSAgPDAxMzI2M21AZHJhZ29uLmFjYWRpYXUuY2E+CgoJKiBbb2xlL29sZTJubHMuY10KCVNvbWUgRW5nbGlzaCBsYW5ndWFnZSBmaXhlcyBmb3IgbWlzc2luZyB2YWx1ZXMuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJRml4IHRvIGFsbG93IGFuIGVtcHR5IGxpc3Rib3ggdG8gZGVzZWxlY3QgYWxsIGl0ZW1zLgoKCSogW3JlbGF5MzIvdXNlcjMyLnNwZWNdIFt3aW5kb3dzL2tleWJvYXJkLmNdCglDcmVhdGVBY2NlbGVyYXRvclRhYmxlQSBzdHViIG1ldGhvZC4KCgkqIFt3aW5kb3dzL3N5c21ldHJpY3MuY10KCUFkZGVkIG1pc3NpbmcgU01fQ1hDVVJTT1IgJiBTTV9DWUNVUlNPUiBpbml0aWFsaXplcnMuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglQb3N0VGhyZWFkTWVzc2FnZTMyQSBzdHViIG1ldGhvZC4KCkZyaSBGZWIgMTMgMTc6MTI6MjQgMTk5OCAgSmltIFBldGVyc29uIDxqc3BldGVyQHJvYW5va2UuaW5maS5uZXQ+CgoJKiBbbGlidGVzdC9oZWxsbzNyZXMucmNdIFtsaWJ0ZXN0L2hlbGxvMy5jXSBbbGlidGVzdC9NYWtlZmlsZS5pbl0KCVVwZGF0ZWQgdGhlICdoZWxsbzMnIHRlc3Qgc28gdGhhdCBpdCBmdW5jdGlvbnMgcHJvcGVybHkgYWdhaW4uCgpGcmkgRmViIDEzIDE0OjA4OjA3IDE5OTggIE1hcnRpbiBCb2VobWUgIDxib2VobWVAaW5mb3JtYXRpay5tdS1sdWViZWNrLmRlPgoJCgkqIFtncmFwaGljcy9tYXBwaW5nLmNdCglGaXhlZCB0aGUgZW1iYXJyYXNzaW5nIGJ1Z3MgSSBpbnRyb2R1Y2VkIGludG8gRFB0b0xQIGFuZAoJTFB0b0RQLgoKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglQcmV2ZW50IFNjcm9sbFdpbmRvdzMyIGZyb20gc2VuZGluZyBXTV9FUkFTRUJLR05ELgoKVGh1IEZlYiAxMiAyMjo0Njo1MyAxOTk4ICBIdXcgRCBNIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW29iamVjdHMvbWV0YWZpbGVdIFtpbmNsdWRlL2xkdC5oXQoJRml4IHRvIGNvcGUgd2l0aCByZWNvcmRzIGxvbmdlciB0aGFuIDY0Sy4KCgkqIFt3aW5kb3dzL2NsaXBib2FyZC5jXQoJQ2xlYW4gdXAgYml0bWFwcyBhbmQgbWV0YXBpY3RzIHByb3Blcmx5LgoKTW9uIEZlYiAgMyAyMTo1MjoxOCAxOTk4ICBLYXJsIEJhY2tzdHL2bSA8a2FybF9iQGdlb2NpdGllcy5jb20+CgoJKiBbcHJvZ3JhbXMvd2luaGVscC9Tdy5yY10gW3Jlc291cmNlcy9zeXNyZXNfU3cucmNdCglNaW5vciB1cGRhdGUgb2YgU3dlZGlzaCBsYW5ndWFnZSBzdXBwb3J0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gRmViICAxIDEzOjI0OjU0IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2ZpbGVzL2RyaXZlLmNdCglBZGRlZCBEZXZpY2U9IHBhcmFtZXRlciB0byBkcml2ZSBjb25maWd1cmF0aW9uLgoKCSogW2lmMTYzMi9yZWxheS5jXQoJVGhyb3coKSBhbmQgQ2F0Y2goKSBub3cgdXNlIHRoZSBjb3JyZWN0IENBVENIQlVGIGxheW91dCAodW50ZXN0ZWQpLgoKCSogW3Rvb2xzL2J1aWxkLmNdIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0gW2xvYWRlci90YXNrLmNdCglNb3ZlZCAxNi1iaXQgc3RhY2sgcG9pbnRlciBpbnRvIHRocmVhZCBkYXRhYmFzZS4KCVNhdmUgY3VycmVudCAlZnMgd2hpbGUgcnVubmluZyAxNi1iaXQgY29kZS4KCkZyaSBKYW4gMzAgMDk6MjU6NDkgMTk5OCAgTWFydGluIEJvZWhtZSAgPGJvZWhtZUBpbmZvcm1hdGlrLm11LWx1ZWJlY2suZGU+CgoJKiBbZ3JhcGhpY3MvbWFwcGluZy5jXQoJTWFkZSBEUHRvTFAzMiBhbmQgTFB0b0RQMzIgcmVzcGVjdCB3b3JsZCB0cmFuc2Zvcm1zLgoKCSogW2dyYXBoaWNzL3BhdGguY10gW2dyYXBoaWNzL3BhaW50aW5nLmNdIFtpZjE2MzIvZ2RpLnNwZWNdCgkgIFtpbmNsdWRlL3BhdGguaF0KCU1vcmUgcGF0aCBzdXBwb3J0LgoKCSogW2luY2x1ZGUvZ2RpLmhdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW29iamVjdHMvZGMuY10KCSAgW3JlbGF5L2dkaTMyLnNwZWNdCglTdXBwb3J0IGZvciBHZXQvU2V0QXJjRGlyZWN0aW9uIGFuZCBHZXQvU2V0V29ybGRUcmFuc2Zvcm0KCgkqIFt3aW5kb3dzL2hvb2suY10KCUZpeGVkIGEgYnVnIGluIEhPT0tfTWFwMTZUbzMyQ29tbW9uLgoKVGh1IEphbiAyOSAyMzo0MzoxOCAxOTk4ICBEb3VnbGFzIFJpZGd3YXkgPHJpZGd3YXlAdGFpZ2EuZ21jbC5jb20+CgoJKiBbZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jXSBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJRG9jdW1lbnRhdGlvbiBmb3IgbWV0YWZpbGUgcmVsYXRlZCBBUEkgY2FsbHMuIEZpeGVkIGEgYnVnIHRvIGF2b2lkCglkb2N1bWVudGluZyBpdC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCURlY2xhcmF0aW9uIGZvciBMb2FkSW1hZ2UuCgpUaHUgSmFuIDI5IDIxOjQ0OjQ1IDE5OTggIEh1dyBEIE0gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbZ3JhcGhpY3Mvd2luMTZkcnYvKl0KCUNoYW5nZXMgdG8gcHJpbnRpbmcgY29kZSB0byBlbmFibGUgdXNlIG9mIHByaW50ZXIgZm9udHMgd2l0aCB0aGUKCXdpbjMuMSBwb3N0c2NyaXB0IGRyaXZlci4gUmVtZW1iZXIgdG8gYWRkIHByaW50ZXI9b24gdG8gW3dpbmVdCglzZWN0aW9uIG9mIHdpbmUuY29uZiAuIFlvdSB3aWxsIGFsc28gbmVlZCB0byBkaXNhYmxlIHRydWV0eXBlCglmb250cyBmcm9tIGNvbnRyb2wgcGFuZWwuIFdpbndvcmQgNi4wIGFuZCBXcml0ZSBzZWVtIHRvIGJlIGhhcHB5Cgl3aXRoIHRoaXMuLi4KCgkqIFtpbmNsdWRlL2JpdG1hcC5oXQoJRml4IFdpZHRoYnl0ZXMgZm9yIDE1YnBwIGRpc3BsYXlzLgoKVHVlIEphbiAyNyAyMDo1NDowOCAxOTk4ICBLcmlzdGlhbiBOaWVsc2VuIDxrcmlzdGlhbi5uaWVsc2VuQHJpc29lLmRrPgoKCSogW3RzeDExLypdIFtpbmNsdWRlL3RzKl0gW3Rvb2xzL21ha2VfWDExd3JhcHBlcnNdCglJbXBsZW1lbnRlZCB0aHJlYWQtc2FmZSBYMTEgd3JhcHBlcnMuCgpUdWUgSmFuIDI3IDEzOjU0OjA5IDE5OTggIENvbnN0YW50aW5lIFNhcHVudHpha2lzICA8Y3NhcHVudHpAdG1hLTEubGNzLm1pdC5lZHU+CgoJKiBbd2luZG93cy9xdWV1ZS5jXQoJRm9yZ290IHRvIGNvbnZlcnQgdGhkYiB0byB0aHJlYWRfaWQuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJU3BlZCB1cCBXaW5kb3dzIDk1IHJlZ2lzdHJ5IHJlYWRpbmcuIENoYW5nZWQgY29kZSB0byB0cmF2ZXJzZQoJcmVnaXN0cnkgYXMgYSB0cmVlIHJhdGhlciB0aGFuIHJlYWQgaW4gYWxsIHBvc3NpYmxlIGtleXMKCShpbmNsdWRpbmcgZGVhZCBvbmVzKS4gCgpUdWUgSmFuIDI3IDEyOjQ2OjA5IDE5OTggIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXVtNYWtlZmlsZS5pbl1bc2NoZWR1bGVyL3RocmVhZC5jXQoJICBbbGlidGVzdC9oZWxsbzUuY10KCURvbid0IGV4aXQoKSBvbiBmYWlsZWQgdG8gbG9hZCByZWZlcmVuY2VkIGRsbHMuCglGaXhlZCBzdGF0aWMgdGxzIGFsbG9jYXRpb24gZm9yIG11bHRpcGxlIHRocmVhZHMuCglXSU5FTElCIHNob3VsZCBub3cgYmUgYWJsZSB0byBsb2FkIFBFIGRsbHMuIEEgc2FtcGxlCgl3aW5lbGliIHByb2dyYW0sIHRoYXQgZHluYW1pY2FsbHkgbG9hZHMgYSBpbnRlcm5hbCBkbGwKCWlzIGluY2x1ZGVkLgoKCSogW2dyYXBoaWNzL2RkcmF3LmNdW2luY2x1ZGUvZGRyYXcuaF1baW5jbHVkZS9kM2QuaF0KCUNsZWFuZWQgdXAgYW5kIGVuaGFuY2VkIGZ1cnRoZXIuIEFkZGVkIHNldmVyYWwgRGlyZWN0WDUKCWludGVyZmFjZSBkZWZpbml0aW9ucyBhbmQgRGlyZWN0U3VyZmFjZTMgaW1wbGVtZW50YXRpb24uCglTdHVicyBmb3IgRDNEIChOT1QgY29taW5nIHNvb24sIGp1c3QgdGhlcmUgc28gaXQgZmFpbHMgc2FmZWx5KS4KCgkqIFttdWx0aW1lZGlhL2Rzb3VuZC5jXVtpbmNsdWRlL2Rzb3VuZC5oXQoJQWN0dWFsbHkgd29ya3Mgbm93IGZvciBhIGxvdCBvZiBjYXNlcy4gU29tZSBEaXJlY3RYNSBzdHVmZgoJYWRkZWQuIFN0aWxsIGxhY2tpbmcgc2V2ZXJhbCBmZWF0dXJlcy4KCgkqIFt3aW5kb3dzL2RpbnB1dC5jXVtpbmNsdWRlL2RpbnB1dC5oXQoJU3RhcnRlZCBpbXBsZW1lbnRpbmcgRGlyZWN0SW5wdXQuIERvZXNuJ3Qgd29yayB5ZXQsIGRvbid0IAoJa25vdyB3aHkuCgoJKiBbaWYxNjMyL3RodW5rLmNdW21pc2MvY2FsbGJhY2tzLmNdCgkgIFt3aW4zMi9rZXJuZWwuY11baW5jbHVkZS9jYWxsYmFja3MuaF0KCUFkZGVkIFdPV0NhbGxiYWNrMTZFeCwgV09XSGFuZGxlMzIuCgoJKiBbbWlzYy9jcHUuY10KCUZpeGVkIEdldFN5c3RlbUluZm8sIElzUHJvY2Vzc29yRmVhdHVyZVByZXNlbnQuCgoJKiBbbXVsdGltZWRpYS9qb3lzdGljay5jXVttdWx0aW1lZGlhL3RpbWUuY10KCVNldmVyYWwgZml4ZXMuIFNtYWxsIGhhY2sgdG8gZ2V0IHRpbWVyZXZlbnRzIGluIHRpbWVHZXRUaW1lKCkgbG9vcHMuCgpUdWUgSmFuIDIwIDExOjI2OjI3IDE5OTggIFNsYXZlbiBSZXppYyAgPGVzZXJ0ZUBjcy50dS1iZXJsaW4uZGU+CgoJKiBbY29uZmlndXJlLmluXQoJRml4ZWQgY2hlY2sgZm9yIHVuaW9uIHNlbXVuIG9uIEZyZWVCU0Qgc3lzdGVtcy4KClN1biBKYW4gMTggMjM6MDU6MDQgMTk5OCAgS2FybCBCYWNrc3Ry9m0gPGthcmxfYkBnZW9jaXRpZXMuY29tPgoKCSogW21pc2Mvb2xlMm5scy5jXSBbcHJvZ3JhbXMvcHJvZ21hbi9Tdy5yY10gW3Byb2dyYW1zL3dpbmhlbHAvU3cucmNdCgkgIFtyZXNvdXJjZXMvc3lzcmVzX1N3LnJjXQoJQWRkZWQvdXBkYXRlZCBTd2VkaXNoIGxhbmd1YWdlIHN1cHBvcnQuCgpTdW4gSmFuIDE4IDE4OjQ5OjAxIDE5OTggIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbbWlzYy93aW5zb2NrLmNdIFttaXNjL3dpbnNvY2tfZG5zLmNdIFt3aW5kb3dzL2V2ZW50LmNdCgkgIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9kY2UuY10gW3dpbmRvd3Mvd2lucG9zLmNdCglCdWcgZml4ZXMuCgpTdW4gSmFuIDE4IDEyOjQ1OjIzIDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW21zZG9zL2ludDI1LmNdIFttc2Rvcy9pbnQyNi5jXQogICAgICAgIEltcGxlbWVudGVkICJuYXRpdmUiIGFic29sdXRlIGRpc2sgcmVhZC93cml0ZSBhY2Nlc3MuCgoJKiBbbXNkb3MvaW50MTMuY10gW21zZG9zL2lvcG9ydHMuY10KCUVuaGFuY2VkIEdFVCBEUklWRSBQQVJBTUVURVJTIChpbnQxMyBBSD0wOCkuCgoJKiBbZ3JhcGhpY3Mvd2luMTZkcnYvcHJ0ZHJ2LmNdIFtpZjE2MzIvZ2RpLnNwZWNdCglGaXhlZCB0eXBvcywgaW1wbGVtZW50ZWQgZG1FbnVtREZvbnRzLAoJU3RhcnRlZCBpbXBsZW1lbnRhdGlvbiBvZiBkbVJlYWxpemVPYmplY3QuCgoJKiBbaWYxNjMyL2NvbXBvYmouc3BlY10gW29sZS9jb21wb2JqLmNdIFtyZWxheTMyL29sZTMyLnNwZWNdCglTdHVicyBDb0NyZWF0ZUluc3RhbmNlLCBDb0ZyZWVVbnVzZWRMaWJyYXJpZXMsIGltcGxlbWVudGVkCglDb0ZpbGVUaW1lTm93LgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXSBbbWVtb3J5L2dsb2JhbC5jXQoJICBbbWVtb3J5L3N0cmluZy5jXSBbbWlzYy9rZXJuZWwuY10gW21pc2MvTWFrZWZpbGUuaW5dCgkgIFttaXNjL3Rvb2xoZWxwLmNdIFttc2Rvcy9pbnQyMS5jXQoJSW1wbGVtZW50ZWQgR2xvYmFsSGFuZGxlTm9SSVAsIEdldEZyZWVNZW1JbmZvLCBEZWJ1Z0ZpbGxCdWZmZXIsIAoJc3R1YnMgR2V0U2V0S2VybmVsRE9TUHJvYywgRGlhZ1F1ZXJ5LCBEaWFnT3V0cHV0LCBUb29sSGVscEhvb2sKCShVbmRvY3VtZW50ZWQgV2luZG93cykuCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10gW2lmMTYzMi93aW4zMnMxNi5zcGVjXSBbbWlzYy93aW4zMnMxNi5jXQoJTWlzYyBzdHVicy4KCgkqIFtpZjE2MzIvd2luYXNwaS5zcGVjXSBbbWlzYy9hc3BpLmNdCglJbXBsZW1lbnRlZCBHZXRBU1BJRExMVmVyc2lvbi4KCgkqIFtpZjE2MzIvd3Byb2NzLnNwZWNdIFttc2Rvcy9pbnQyMC5jXSBbbXNkb3MvTWFrZWZpbGUuaW5dCglBZGRlZCBoYW5kbGVyIGZvciBJbnQgMHgyMCAodGVybWluYXRlIHByb2dyYW0sIF92ZXJ5XyBvbGQtZmFzaGlvbmVkKS4KCgkqIFttaXNjL3czMnNjb21iLmNdCglJbXBsZW1lbnRlZCBHZXQxNkRMTEFkZHJlc3MoKSBwYXJ0aWFsbHkKCShiaWcgdGhhbmtzIHRvIE1hcmN1cyBhbmQgQWxleGFuZHJlKS4KCgkqIFtyZWxheTMyL01ha2VmaWxlLmluXSBbcmVsYXkzMi9idWlsdGluMzIuY10gW3JlbGF5MzIvZHBsYXkuc3BlY10KCUFkZGVkIGJ1aWx0LWluIERQTEFZLkRMTC4KCgkqIFtyZWxheTMyL3dpbm1tLnNwZWNdIFttdWx0aW1lZGlhL2pveXN0aWNrLmNdCglBZGRlZCBqb3lTZXRUaHJlc2hvbGQuCgoJKiBbbWlzYy93aW5kZWJ1Zy5jXQoJQWRkZWQgV2luTm90aWZ5LgoKCSogW3dpbjMyL2NvbnNvbGUuY10KCVN0dWJzIENyZWF0ZUNvbnNvbGVTY3JlZW5CdWZmZXIsIFNldENvbnNvbGVBY3RpdmVTY3JlZW5CdWZmZXIsCglXcml0ZUNvbnNvbGVPdXRwdXQzMkEuCgoJKiBbd2luZG93cy91c2VyLmNdCglTdHViIFNldEV2ZW50SG9vay4KClNhdCBKYW4gMTcgMTk6MzA6MzUgMTk5OCAgTWF0dGhldyBUb3NlbGFuZCAgPFBhdWwuVG9zZWxhbmRAYnRpbnRlcm5ldC5jb20+CgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJRml4ZWQgYnJva2VuIHJlc3RvcmUtdG8tbWF4aW1pemVkLgoKTW9uIEphbiAxMiAyMToyNTozMiAxOTk4ICBQZXJjZXZhbCAtIE1hcmMgSHVndWV0IFB1aWcgPG1ocEB0aW5ldC5mdXQuZXM+CgoJKiBbZG9jdW1lbnRhdGlvbi93aW5lLm1hbl0gW2luY2x1ZGUvb3B0aW9ucy5oXQoJICBbbWlzYy9tYWluLmNdIFtvbGUvb2xlMm5scy5jXSBbcmVzb3VyY2VzL3N5c3Jlcy5jXQoJICBbcmVzb3VyY2VzL3N5c3Jlc19DYS5yY10gW3Jlc291cmNlcy9NYWtlZmlsZS5pbl0KCUFkZGVkIGxhbmd1YWdlIGNhdGFsYW4uIChBZmVnaXQgbCdpZGlvbWEgY2F0YWzgKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEphbiAxOCAxNzowNTo1OCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0gW3Rvb2xzL2J1aWxkLmNdCglTb21lIGNsZWFudXBzIGluIHN0YWNrIGZyYW1lIGJ1aWxkaW5nLgoKCSogW21pc2MvcG9ydC5jXQoJSW1wbGVtZW50ZWQgY2xvbmUoKSB3cmFwcGVyIGZvciBsaWJjNSB1c2Vycy4KCgkqIFtzY2hlZHVsZXIvbXV0ZXguY10gW3NjaGVkdWxlci9zeW5jaHJvLmNdCglJbXBsZW1lbnRlZCBhYmFuZG9uZWQgbXV0ZXhlcy4KCgkqIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXSBbc2NoZWR1bGVyL3RocmVhZC5jXQoJV2Ugbm93IGNyZWF0ZSBhIHByb2Nlc3MgYW5kIGEgdGhyZWFkIHN0cnVjdHVyZSBhcyBzb29uIGFzIHBvc3NpYmxlCglkdXJpbmcgaW5pdGlhbGl6YXRpb24uCgoJKiBbc2NoZWR1bGVyL3RocmVhZC5jXSBbc2NoZWR1bGVyL3N5c2RlcHMuY10KCU1vdmVkIHN5c3RlbS1zcGVjaWZpYyB0aHJlYWQgaGFuZGxpbmcgdG8gc3lzZGVwcy5jLgoKRnJpIEphbiAxNiAxMDo0NToxNSAxOTk4ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtncmFwaGljcy9kZHJhdy5jXVtpbmNsdWRlL2RkcmF3LmhdCglTdXJmYWNlIGhhbmRsaW5nIGVuaGFuY2VkLiBTb21lIHN0dWZmIGFscmVhZHkgd29ya3MgOykKCgkqIFttdWx0aW1lZGlhL2Rzb3VuZC5jXVtpbmNsdWRlL2Rzb3VuZC5oXQoJSW1wbGVtZW50ZWQgdXNpbmcgdGhlIE9wZW4gU291bmQgU3lzdGVtLgoJU2xvd2x5IHN0YXJ0cyB0byB3b3JrIChzb3VuZHMgdGVycmlibGUgZm9yIHNvbWUgcHJvZ3JhbXMpLgoKCSogW2NvbmZpZ3VyZS5pbl1bbXVsdGltZWRpYS9hdWRpby5jXVtpbmNsdWRlL2NvbmZpZy5oLmluXQoJQWRkZWQgY2hlY2sgZm9yIE9wZW5Tb3VuZFN5c3RlbSwgZml4ZWQgLWxYeGY4NmRnYSBjaGVjay4KCVJlcGxhY2VkIE9TICNpZmRlZnMgYnkgI2lmZGVmIEhBVkVfT1NTIGluIG1tL2F1ZGlvLmMuCgoJKiBbaWYxNjMyL3JlbGF5LmNdW3JlbGF5MzIvcmVsYXkzODYuY10KCURvIG5vdCBwcmludCBjb250cm9sIGNoYXJhY3RlcnMgZm9yICdzdHInIG9yICd3c3RyJyBhcmdzLgoKCSogW21pc2MvcmVnaXN0cnkuY10KCSIiIHNlZW1zIHRvIGVxdWFscyBOVUxMIGluIGtleW5hbWVzLiBSZXBsYWNlIHdoZXJlIG5lZWRlZC4gU2VlbXMKCXRvIGhlbHAgdGhlIHdpbjk1IHJlZ2VkaXQuZXhlLi4uCgoJKiBbd2luMzIvbmV3Zm5zLmNdCglJbXBsZW1lbnRlZCBRdWVyeVBlcmZvcm1hbmNlKiB1c2luZyBnZXR0aW1lb2ZkYXkoMikKCShzaG91bGQgYmUgZG9uZSB1c2luZyB0aGUgcGVudGl1bSB0aW1lcnMgcHJvYmFibHkpLgoKCSogW3Rvb2xzL2lwY2xdCglSZW1vdmVkIHVzZWxlc3Mgb3Blbl9waXBlIGNvbnN0cnVjdC4KClN1biBKYW4gMTEgMTc6MTA6MDIgMTk5OCAgSHV3IEQgTSBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFtvYmplY3RzL3JlZ2lvbi5jXSBbaW5jbHVkZS9yZWdpb24uaF0gW2dyYXBoaWNzL3gxMWRydi9jbGlwcGluZy5jXQoJUmVnaW9ucyBhcmUgbm93IGludGVybmFsIHRvIFdpbmUuIFRoZSBiYXNpcyBvZiB0aGlzIGNvZGUgaXMgdGFrZW4KCWZyb20gdGhlIFgxMSBkaXN0cmlidXRpb24uIEdldFJlZ2lvbkRhdGEoKSBpcyBpbXBsZW1lbnRlZCBhcyBpcyAKCUV4dENyZWF0ZVJlZ2lvbigpICh3aXRob3V0IFhmb3JtcykuIENyZWF0ZVBvbHlQb2x5Z29uUmduKCkgc2hvdWxkCgliZWhhdmUgY29ycmVjdGx5IG5vdy4gCgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbZ3JhcGhpY3MvbWV0YWZpbGVkcnYvZ3JhcGhpY3MuY10KCSAgW2dyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuY10gW2luY2x1ZGUvbWV0YWZpbGUuaF0KCSAgW2luY2x1ZGUvbWV0YWZpbGVkcnYuaF0KCVBsYXliYWNrIG9mIE1FVEFfQ1JFQVRFUkVHSU9OIHNob3VsZCBub3cgd29yay4gSW1wbGVtZW50ZWQgcmVjb3JkaW5nCglvZiBNRVRBX0NSRUFURVJFR0lPTiBhbmQgTUVUQV9QQUlOVFJFR0lPTi4KCgkqIFtncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuY10KCUZpbGxSZ24oKSAoYW5kIHRoZXJlZm9yZSBpdHMgZnJpZW5kcykgcmVzcGVjdCBsb2dpY2FsIGNvLW9yZHMuCgpXZWQgSmFuICA3IDAxOjIxOjQ1IDE5OTggIFN0ZWluYXIgSGFtcmUgIDxzdGVpbmFyaEBzdHVkLmZpbS5udG51Lm5vPgoKCSogW2NvbmZpZ3VyZS5pbl0gW2luY2x1ZGUvYWNjb25maWcuaF0gW3Rvb2xzL2J1aWxkLmNdCglOb3cgY2hlY2tpbmcgd2hldGhlciB0byB1c2UgLnN0cmluZyBvciAuYXNjaWkuCgoJKiBbY29uZmlndXJlLmluXSBbaW5jbHVkZS9hY2NvbmZpZy5oXSBbc2NoZWR1bGVyL2NyaXRzZWN0aW9uLmNdCglEZWZpbmluZyB1bmlvbiBzZW11biBpZiB0aGlzIGlzIG5vdCBhdmFpbGFibGUgZnJvbSBoZWFkZXIgZmlsZXMuCgoJKiBbbWlzYy9sc3RyLmNdCglNb3ZlZCB3aW5lJ3Mgb3duIGhlYWRlciBmaWxlcyBiZWxvdyA8d2N0eXBlLmg+IHRvIGF2b2lkCglwYXJzZSBlcnJvciBvbiBTb2xhcmlzLgoKU3VuIEphbiAgNCAxNTozODowNyAxOTk4ICBBbmRyZXcgVGF5bG9yIDxhdGF5bG9yQGNhZHZpc2lvbi5jb20+CgoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXSBbbXVsdGltZWRpYS9tbWlvLmNdCglJbXBsZW1lbnRlZCBtbWlvU2VuZE1lc3NhZ2UgYW5kIHJlYXJyYW5nZWQgdGhlIG1taW8KCXN1YnN5c3RlbSBpbiB0ZXJtcyBvZiB0aGlzIGZ1bmN0aW9uLgoKV2VkIERlYyAyNCAwMDo1MToyOSAxOTk3ICBDaGFybGVzIER1ZmZ5IDxjZHVmZnlAYmlnZm9vdC5jb20+CgoJKiBbd2luZG93cy9jbGlwYm9hcmQuY10gW3JlbGF5MzIvdXNlcjMyLnNwZWNdCglHZXRQcmlvcml0eUNsaXBib2FyZEZvcm1hdDMyIG5vdyBoYXMgc29tZXRoaW5nIG90aGVyIHRoYW4ganVzdAoJYSBzdHViLiBJIGhhdmUgbm8gaWRlYSBpZiBpdCB3b3JrcyAoY2FuJ3QgdGVzdCB1bnRpbAoJU2V0Q2xpcGJvYXJkRGF0YSBpcyBmaW5pc2hlZCkgYnV0IEhFZGl0IGxpa2VzIHRoaW5ncyBhIGxvdCBtb3JlCgl0aGlzIHdheS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IEphbiAgMyAxNzoxNTo1NiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtkZWJ1Z2dlci9kYl9kaXNhc20uY10KCUFkZGVkIGNwdWlkIGFuZCBjbXB4Y2hnIGluc3RydWN0aW9ucy4KCgkqIFtpZjE2MzIvYnVpbHRpbi5jXSBbcmVsYXkzMi9idWlsdGluMzIuY10KCUZpeGVkIGJyb2tlbiAtZGxsIG9wdGlvbiB3aXRoIFdpbjMyIERMTHMuCgoJKiBbaW5jbHVkZS9oZWFwLmhdCglBZGRlZCBTWVNURU1fTE9DSy9TWVNURU1fVU5MT0NLIG1hY3Jvcy4KCgkqIFtjb25maWd1cmUuaW5dIFttaXNjL2xzdHIuY10KCUFkZGVkIGNoZWNrIGZvciB3Y3R5cGUuaC4KCUNvbW1lbnRlZCBvdXQgLS1lbmFibGUtaXBjIG9wdGlvbiAoSVBDIGNvZGUgaGFzIGJlZW4gYnJva2VuIGZvciBhCglsb25nIHRpbWUgYW55d2F5KS4KCgkqIFtzY2hlZHVsZXIvY3JpdHNlY3Rpb24uY10gW3NjaGVkdWxlci9ldmVudC5jXQoJICBbc2NoZWR1bGVyL211dGV4LmNdIFtzY2hlZHVsZXIvc2VtYXBob3JlLmNdCglJbXBsZW1lbnRlZCBXaW4zMiBzeW5jaHJvbml6YXRpb24gb2JqZWN0cy4KCgkqIFtzY2hlZHVsZXIvc3luY2hyby5jXQoJSW1wbGVtZW50ZWQgV2FpdEZvck11bHRpcGxlT2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuCgoJKiBbc2NoZWR1bGVyL3RocmVhZC5jXQoJSWYgcG9zc2libGUsIHVzZSBjbG9uZSgpIGluIENyZWF0ZVRocmVhZCgpLgoKCSogW3NjaGVkdWxlci90aHJlYWQuY10gW3NjaGVkdWxlci9wcm9jZXNzLmNdCglNYWRlIHRocmVhZCBhbmQgcHJvY2VzcyB3YWl0YWJsZSBvYmplY3RzLgoJVGhyZWFkIGFuZCBwcm9jZXNzIGlkIHZhbHVlcyBhcmUgbm93IGRpZmZlcmVudCBmcm9tIHRoZSBwb2ludGVycwoJdGhleSByZXByZXNlbnQuCgoJKiBbd2luMzIvazMyb2JqLmNdCglNb3ZlZCB0byBzY2hlZHVsZXIgZGlyZWN0b3J5LgoJQWRkZWQgZnVuY3Rpb24gdGFibGUgZm9yIHdhaXRpbmcgb3BlcmF0aW9ucyBvbiBvYmplY3RzLgoKCSogW2ZpbGVzL2ZpbGUuY10gW21lbW9yeS92aXJ0dWFsLmNdCglBZGRlZCBuZXcgSzMyT0JKIGZ1bmN0aW9uIHRhYmxlLgoKU3VuIEphbiAgMSAxNjo0ODoyMyAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFtmaWxlcy9maWxlLmNdCglGaXhlZCBteSBwYXRjaCBmb3IgR2V0VGVtcEZpbGVOYW1lMTYoKSBhcyBuZWVkZWQuCglJdCB3YXMgLi4uTmFtZTMyQSgpIHRoYXQgZGlkbid0IHdvcmsgcHJvcGVybHksIG5vdCAuLi5OYW1lMTYoKS4KCgkqIFtncmFwaGljcy94MTFkcnYvYnJ1c2guY10KCUZpeGVkIGEgQmFkTWF0Y2ggZXJyb3IuCgoJKiBbbXNkb3MvaW50MjEuY10KCUZpeGVkIElOVDIxX0ZpbmROZXh0RkNCKCkgdG8gZ2V0IGNvcnJlY3Qgdm9sdW1lIGxhYmVscyBlLmcuCglpbiAiZmlsZSBvcGVuIiBkaWFsb2cuCgoJKiBbbXVsdGltZWRpYS9qb3lzdGljay5jXSBbcmVsYXkzMi93aW5tbS5zcGVjXQoJU3R1YiBKb3lHZXRQb3NFeCgpLgoKCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdIFtyZWxheTMyL2tlcm5lbDMyLnNwZWNdCglJbXBsZW1lbnRlZCBSZWdpc3RlclNlcnZpY2VQcm9jZXNzKCkuCgpXZWQgRGVjIDMxIDExOjE0OjQzIDE5OTcgIExhd3NvbiBXaGl0bmV5ICA8bGF3c29uX3doaXRuZXlAanVuby5jb20+CgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaWYxNjMyL3JlbGF5LmNdCglEZWZpbmUgQ2FsbFByb2NFeDMydyAtIFRoYW5rcyB0byBNYXJjdXMgTWVpc3NuZXIgZm9yIGhpcyBleGNlbGxlbnQKCUNhbGxQcm9jMzJXLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCVRha2UgYSBzaG90IGF0IGRlZmluaW5nIEZyZWVMaWJyYXJ5MzJXLgoKU3VuIERlYyAyOCAxMjo0NDowNCAxOTk3ICBLYWkgTW9yaWNoIDxrYWkubW9yaWNoQHJoZWluLW5lY2thci5uZXRzdXJmLmRlPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU1lbnUgbW9kaWZpY2F0aW9uIGZyb20gV01fSU5JVE1FTlVQT1BVUCBtZXNzYWdlIGZpeGVkLgoJTWVudSBpdGVtcyBub3cgY2FuIGhhdmUgZGlmZmVyZW50IHdJRCBhbmQgaFN1Yk1lbnUgKFdpbjk1IGJlaGF2aW9yKS4KCgkqIFttaXNjL2NwdS5jXQoJSW1wcm92ZWQgSXNQcm9jZXNzb3JGZWF0dXJlUHJlc2VudC4KClN1biBEZWMgMjggMDM6MjE6MDggMTk5NyAgT3ZlIEthYXZlbiA8b3Zla0BtYWluLmFyY3RpY25ldC5ubz4KCgkqIFtpbmNsdWRlL3dpbnNvY2suaF0gW21pc2Mvd2luc29jay5jXQoJRml4ZWQgV1NfU09MX1NPQ0tFVCBmb3Igc2V0c29ja29wdCgpLCBhbmQgbWFkZSBzZWxlY3QoKSByZXR1cm4KCWVtcHR5IGZkX3NldHMgaWYgdGltZW91dC4KCgkqIFtvYmplY3RzL3BhbGV0dGUuY10KCUFuaW1hdGVQYWxldHRlKCkgYmFpbGVkIG91dCBpZiBlbnRpcmUgcGFsZXR0ZSBpcyBhbmltYXRlZC4gRml4ZWQuCgoJKiBbb2JqZWN0cy9kaWIuY10KCUFkZGVkIHNvbWUgY29kZSB0byBTZXRESUJpdHNUb0RldmljZSgpIGFuZCBpdHMgaGVscGVycyB0byBmaXgKCXNvbWUgb2Zmc2V0aW5nIHByb2JsZW1zLgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJTWFkZSBDcmVhdGVDdXJzb3IzMigpIGNvbnZlcnQgdGhlIGluc3RhbmNlIGhhbmRsZSBwcm9wZXJseS4gTWFkZQoJRGVzdHJveUN1cnNvcigpIHJldHVybiBjb3JyZWN0IHN1Y2Nlc3Mgc3RhdHVzLgoKV2VkIERlYyAyNCAxNzo1NjozNCAxOTk3ICBEaW1pdHJpZSBPLiBQYXVuICA8ZGltaUBjcy50b3JvbnRvLmVkdT4KCgkqIFt3aW5kb3dzL3N5c2NvbG9yLmNdCglBZGRlZCBkZWZpbml0aW9uIG9mIEdldFN5c0NvbG9yUGVuMTYvMzIuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QKCWV4aXN0IGluIHRoZSBXaW4zMiBBUEkgYnV0IGlzIGEgdmVyeSBjbG9zZSAoYW5kIG5hdHVyYWwpIHJlbGF0aXZlCgl0byBHZXRTeXNDb2xvckJydXNoIGZ1bmN0aW9uLiBNb3Jlb3ZlciwgaXQgaXMgKnZlcnkqIG11Y2ggdXNlZCAKCXdpdGhpbiBXaW5lIHNpbmNlIHRoZXJlIGFyZSBhIGxvdCBvZiBwbGFjZXMgd2hlcmUgd2UgbmVlZCB0byBkcmF3CglsaW5lcyB3aXRoIHRoZSBzdGFuZGFyZCBjb2xvcnMuCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdIFtjb250cm9scy9jb21iby5jXSBbY29udHJvbHMvaWNvbnRpdGxlLmNdCgkgIFtjb250cm9scy9tZW51LmNdIFtjb250cm9scy9wcm9ncmVzcy5jXSBbY29udHJvbHMvc2Nyb2xsLmNdCgkgIFtjb250cm9scy91cGRvd24uY10gW2dyYXBoaWNzL3BhaW50aW5nLmNdIFttaXNjL3R3ZWFrLmNdCgkgIFt3aW5kb3dzL2RlZnduZC5jXSBbd2luZG93cy9ncmFwaGljcy5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCVJlcGxhY2VkIHJlZmVyZW5jZXMgdG8gc3lzQ29sb3JPYmplY3RzIHdpdGggdGhlIGFwcHJvcHJpYXRlCgljYWxsIHRvIEdldFN5c0NvbG9yQnJ1c2gzMi9HZXRTeXNDb2xvclBlbjMyLiBUaGVyZSBpcyBubyBuZWVkIHRvCglleHBvc2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucywgZXZlbiB3aXRoaW4gV2luZS4KCVRoaXMgbWFrZXMgdGhlIGNvZGUgZWFzaWVyIHRvIHVuZGVyc3RhbmQsIGRlYnVnLCBtYWludGFpbi4KCgkqIFtjb250cm9scy91aXRvb2xzLmNdCglNb2RpZmllZCBtb3N0IG9mIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIHRvIHVzZSB0aGUgbm93CglzdGFuZGFyZCBwZW5zIChpLmUuIEdldFN5c0NvbG9yUGVuMzIpLiBUaGVzZSBmdW5jdGlvbnMgbWFkZQoJKmhlYXZ5KiB1c2Ugb2Ygc3RhbmRhcmQgcGVucyBzbyBJIGV4cGVjdCBhIGxvdCBsZXNzCglDcmVhdGVQZW4vRGVsZXRlT2JqZWN0IGNhbGxzIGNhbiBkbyBvbmx5IGdvb2QuLi46KQoJUGx1cyBzb21lIG1pbm9yIG1vZGlmaWNhdGlvbnMgKCpubyogZnVuY3Rpb25hbCBjaGFuZ2VzIHRob3VnaCkuCgoJKiBbY29udHJvbHMvdXBkb3duLmNdCglVc2VkIHRoZSBuZXcgRHJhd0ZyYW1lQ29udHJvbDMyIGZ1bmN0aW9uIHRvIHBhaW50IHRoZSBjb250cm9sLgoJSSBhbHNvIGRlbGV0ZWQgVURET1dOX0RyYXdBcnJvdyBzaW5jZSBpdCB3YXMgbm8gbG9uZ2VyIHJlcXVpcmVkLgoKVHVlIERlYyAyMyAwMDowMzozMyAxOTk3ICBTdGVpbmFyIEhhbXJlICA8c3RlaW5hcmhAc3R1ZC5maW0ubnRudS5ubz4KCgkqIFtjb25maWd1cmUuaW5dCglBZGRlZCBjaGVjayBmb3IgLWx3LgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0gW3Rvb2xzL2J1aWxkLmNdCglDaGFuZ2VzIHRvIG1ha2UgdGhlIGFzc2VtYmx5IHVuZGVyc3RhbmRhYmxlIGZvciBldmVuIHN1biBhcy4KCSIuYXNjaWkiIC0+ICIuc3RyaW5nIiwgImNhbGwgJWZvbyIgLT4gImNhbGwgKiVmb28iLAoJInB1c2h3L3BvcHcgJVtjZGVzXXMiIHdyaXR0ZW4gb3V0IHRvICIuYnl0ZSAweDY2XG5wdXNobC9wb3BsICVbY2Rlc11zIi4KCgkqIFttZW1vcnkvbGR0LmNdCgkjaWZkZWYgYWRkZWQgc28gPHN5cy9zZWcuaD4gd2lsbCBub3QgYmUgaW5jbHVkZWQgb24gU29sYXJpcy4KCk1vbiBEZWMgMjIgMTg6NTU6MTkgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbY29uZmlndXJlLmluXQoJQWRkZWQgWEY4NkRHQSBjaGVjay4KCgkqIFttdWx0aW1lZGlhL2Rzb3VuZC5jXVtyZWxheTMyL2Rzb3VuZC5zcGVjXVtpbmNsdWRlL2Rzb3VuZC5oXQoJU3RhcnRlZCBEaXJlY3RTb3VuZC4gT25seSBzdHVicyBmb3Igbm93LgoKCSogW2dyYXBoaWNzL2RkcmF3LmNdW2luY2x1ZGUvZGRyYXcuaF1bcmVsYXkzMi9kZHJhdy5zcGVjXQoJU3RhcnRlZCB0byBpbXBsZW1lbnQgRGlyZWN0RHJhdy4gTW9zdGx5IHN0dWJzLCBzb21lCgl0ZXN0Y2FzZXMgd29yay4gUmVxdWlyZXMgdGhlIFhGODZER0EgZXh0ZW5zaW9uIHRvIFhGcmVlODYuCgkoY2hlY2sgZGVtby9ibGl6ZGVtby5leGUgZnJvbSB0aGUgRGlhYmxvIENELVJPTSkuCgoJKiBbZmlsZXMvZHJpdmUuY10KCVJldHVybiBjb3JyZWN0ICJDREZTIiBmc25hbWUgc28gRGlhYmxvIGlzIGEgYml0IGhhcHBpZXIuCgpTdW4gRGVjIDIxIDIxOjQ1OjQ4IDE5OTcgIEtldmluIENvemVucyA8a2NvemVuc0BpbnRlcmxvZy5jb20+CgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJRml4ZWQgYnVncyBpbiB0aGUgcm91dGluZXMgd2hpY2ggcmVhZCB0aGUgV2luZG93cyAnOTUgcmVnaXN0cnkKCWZpbGVzLiBBZGRlZCBleHRyYSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIGZvcm1hdCBvZiB0aGUgV2luZG93cwoJJzk1IHJlZ2lzdHJ5IGZpbGVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGcmkgRGVjIDE5IDEwOjUwOjQ2IDE5OTcgIERvdWdsYXMgUmlkZ3dheSAgPHJpZGd3YXlAd2luZWhxLmNvbT4KCgkqIFtNYWtlLnJ1bGVzLmluXSBbTWFrZWZpbGUuaW5dIFtkb2N1bWVudGF0aW9uL01ha2VmaWxlLmluXQogCSAgW2RvY3VtZW50YXRpb24vUkVBRE1FLmRvY3VtZW50YXRpb25dCglGaXJzdCBjdXQgYXQgV2luZSBBUEkgZG9jdW1lbnRhdGlvbi4gTm8gbG9uZ2VyIGluc3RhbGwgcmVmZXJlbmNlCgltYW51YWwgYnkgZGVmYXVsdC4KCldlZCBEZWMgMTcgMjE6MzI6MjMgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbZmlsZXMvZmlsZS5jXQoJRml4ZWQgR2V0VGVtcEZpbGVOYW1lMTYoKSB0byB1c2UgY3VycmVudCBwYXRoIG9mIHJlcXVlc3RlZCBkcml2ZQoJYXMgbmVlZGVkLgoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl0gW2lmMTYzMi9idWlsdGluLmNdIFtpZjE2MzIvZGNpbWFuMzIuc3BlY10KCSAgW2lmMTYzMi9tc3ZmdzMyLnNwZWNdIFtpZjE2MzIvdGFwaTMyLnNwZWNdIFtpZjE2MzIvd293MzIuc3BlY10KCUFkZGVkIG1pc2MgRExMcyBuZWVkZWQgYnkgdmFyaW91cyBhcHBzLgoKV2VkIERlYyAxNyAxMjowMTo1MCAxOTk3ICBNb3J0ZW4gRXJpa3NlbiA8bW9ydGVuZUBzaW0ubm8+CgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW29iamVjdHMvcGFsZXR0ZS5jXQoJSW5zZXJ0ZWQgZW1wdHkgc3R1YiBmb3IgQ3JlYXRlSGFsZnRvbmVQYWxldHRlLgoKVHVlIERlYyAxNiAyMjowODowNiAxOTk3ICBIdXcgRCBNIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW3dpbmRvd3MvbWRpLmNdCglVc2UgVktfVEFCIGluc3RlYWQgb2YgVktfU0VQQVJBVE9SIGluIFRyYW5zbGF0ZU1ESVN5c0FjY2VsKCkuCgoJKiBbZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jXQoJRGVsZXRlREMoKSBvbiBhIE1ldGFEQyBkb2Vzbid0IGRvIGFueXRoaW5nIC0gaXQgc2hvdWxkbid0LiBUaGVyZWZvcmUKCWZpeCBjbGVhbnVwIG9mIE1ldGFEQ3MgaW4gQ2xvc2VNZXRhRmlsZSgpOyB0aGV5IG5vdyBhY3R1YWxseSBnZXQKCXJlbW92ZWQgZnJvbSB0aGUgR0RJIGhlYXAhCgoJKiBbZ3JhcGhpY3MveDExZHJ2L3hmb250LmNdCglQcmVzZXJ2ZSBGT19NQVRDSF9YWUlOREVQIGZsYWcgaW4gWEZPTlRfTWF0Y2hGSUxpc3QoKS4gU2hvdWxkIHJlZHVjZQoJdGhlIG51bWJlciBvZiBib2xkLWl0YWxpYyBtYXRjaGVzLgoKVHVlIERlYyAxNiAyMDoxMTo0MyAxOTk3ICBCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoKCSogW2dyYXBoaWNzL3BhaW50aW5nLmNdCglJbmNsdWRlZCBhbiBpbXBsZW1lbnRhdGlvbiBvZiBEcmF3U3RhdGUKCgkqIFtpZjE2MzIvdGh1bmsuY10KCUNoYW5nZWQgbWFueSBmcHJpbnRmcyBpbnRvIGRwcmludGZfdGh1bmsKCgkqIFtpbmNsdWRlL2NhY2hlLmhdIFtncmFwaGljcy9jYWNoZS5jXQoJTmV3IGZpbGVzIHRvIGhvbGQgY2FjaGVkIGhhbmRsZXMgdG8gcmVndWxhcnkgdXNlZCBHREkgb2JqZWN0LgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgRFJBV1NUQVRFeHggdHlwZWRlZnMKCUFkZGVkIERTU19ERUZBVUxUIGRlZmluZSBmb3IgRHJhd1N0YXRlCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglOZXcgaW1wbGVtZW50YXRpb24gb2YgR3JheVN0cmluZygpCgoJKiBbY29udHJvbHMvdWl0b29scy5jXQoJSW1wbGVtZW50ZWQgRHJhd0ZyYW1lQ29udHJvbCgpIGZ1bmN0aW9ucwoJQ2hhbmdlZCBEcmF3RWRnZSgpIGJlaGF2aW91ciB0byB3aW45NSBpbXBsZW1lbnRhdGlvbgoKTW9uIERlYyAxNSAyMzo0MzowMSAxOTk3ICBNYXJ0aW4gQm9laG1lIDxib2VobWVAaW5mb3JtYXRpay5tdS1sdWViZWNrLmRlPgoKCSogW2dyYXBoaWNzL3BhdGguY10gW2luY2x1ZGUvcGF0aC5oXSBbZ3JhcGhpY3MvcGFpbnRpbmcuY10KCSAgW2lmMTYzMi9nZGkzMi5zcGVjXSBbaW5jbHVkZS9nZGkuaF0gW2luY2x1ZGUvd2luZG93cy5oXQoJICBbb2JqZWN0cy9kYy5jXQogICAgICAgIEFkZGVkIHByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIEdESSBwYXRocy4KCgkqIFtvYmplY3RzL2RjLmNdCglBZGRlZCBEQ19Jbml0X0RDX0lORk8gZnVuY3Rpb24gZm9yIGluaXRpYWxpemluZyBXSU5fRENfSU5GTwoJc3RydWN0dXJlLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXSBbaW5jbHVkZS9nZGkuaF0gW29iamVjdHMvZ2Rpb2JqLmNdCglBZGRlZCBERUZBVUxUX0dVSV9GT05ULgoKCSogW2luY2x1ZGUvd2luZXJyb3IuaF0KCUFkZGVkIGEgZmV3IGVycm9yIGNvZGVzLgoKCSogW21lbW9yeS9oZWFwLmNdCglDaGFuZ2VkIEhlYXBBbGxvYyB0byBtYWtlIHRoZSBjb3JyZWN0IGNhbGxzIHRvIFNldExhc3RFcnJvcgoJKG5vdyBjb25mb3JtcyB0byBOVCdzIGJlaGF2aW91cikuCgoJKiBbd2luZG93cy93aW4uY10KCUNoYW5nZWQgV0lOX0NyZWF0ZVdpbmRvd0V4IHRvIGFsbG93IGNoaWxkIHdpbmRvd3Mgd2l0aCB6ZXJvCgl3aWR0aCAvIGhlaWdodC4KClN1biBEZWMgMTQgMTI6MDE6MDcgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbaWYxNjMyLypdIFtyZWxheTMyLypdCglNb3ZlZCBhbGwgMzItYml0IHJlbGF5IHN0dWZmIHRvIHJlbGF5MzIvCgoJKiBbZmkxNjMyL3RodW5rLmNdIFt3aW4zMi9rZXJuZWwzMi5jXQoJTW92ZWQgYWxsIEtFUk5FTDMyIG9yZGluYWwgZnVuY3Rpb25zIHRvIGtlcm5lbDMyLmMKCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCUluaXRpYWxpemUgc2VsZWN0b3JzIGluIEFsbG9jU2VsZWN0b3JBcnJheS4KCgkqIFt0b29scy9idWlsZC5jXQoJR2VuZXJhdGUgQyBpbnN0ZWFkIG9mIGFzc2VtYmx5IGZvciBXaW4zMiByZWxheXMuCglGaXhlZCBzdGFjayBjb3JydXB0aW9uIGluIENhbGxUbzE2IGZ1bmN0aW9ucywgZm91bmQgYnkgQmVydGhvCglTdHVsdGllbnMuCgkKU3VuIERlYyAxNCAxMDo1NTowMCAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dIFtpZjE2MzIvYnVpbHRpbi5jXSBbaWYxNjMyL29sZTJ0aGsuc3BlY10KCUFkZGVkIGJ1aWx0LWluIE9MRTJUSEsuRExMLiAKCgkqIFtpZjE2MzIvdG9vbGhlbHAuc3BlY10gW2luY2x1ZGUvdG9vbGhlbHAuaF0gW21lbW9yeS9zZWxlY3Rvci5jXQoJICBbbWlzYy90b29saGVscC5jXQoJQWRkZWQgc3R1YnMgZm9yIFN0YWNrVHJhY2VGaXJzdCgpLCBTdGFja1RyYWNlQ1NJUEZpcnN0KCksCglTdGFja1RyYWNlTmV4dCgpLCBVVFNlbGVjdG9yT2Zmc2V0VG9MaW5lYXIoKQoJYW5kIFVUTGluZWFyVG9TZWxlY3Rvck9mZnNldCgpLgoKU2F0IERlYyAxMyAxNzoyNjo0MSAxOTk3ICBBbGV4IEtvcm9ia2EgIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFttaXNjL3dpbnNvY2suY10KCTMyLWJpdCBBUEkgZml4ZXMgZm9yIHJlcG9ydGVkIHByb2JsZW1zICh0aGFua3MgdG8gTWFyY3VzCglhbmQgRGF2aWQpLgoKCSogW2dyYXBoaWNzL3gxMWRydi94Zm9udC5jXQoJTGl0dGxlIHR3ZWFrIGluIHBvaW50IHNpemUgY2FsY3VsYXRpb24uCgoJKiBbd2luZG93cy9kZWZ3bmQuY10gW3dpbmRvd3MvZGNlLmNdIFt3aW5kb3dzL3dpbmhlbHAuY10KCSAgW3dpbmRvd3Mvd2lucHJvYy5jXSBbd2luZG93cy93aW4uY10KCUJ1ZyBmaXhlcy4KClNhdCBEZWMgMTMgMTY6MzU6MTQgMTk5NyAgS2FpIE1vcmljaCA8a2FpLm1vcmljaEByaGVpbi1uZWNrYXIubmV0c3VyZi5kZT4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCU9wZW5GaWxlIHdpdGggZW1wdHkgZmlsZW5hbWUgYW5kIE9GX1BBUlNFIHJldHVybnMgY3VycmVudCBkaXIuCgoJKiBbbWlzYy9jb21tZGxnLmNdCglJZ25vcmUgaW5pdGlhbCBkaXIgaWYgYm9ndXMuCgoJKiBbZmlsZXMvZmlsZS5jXQoJTG9ja2luZyBhbiBpZGVudGljIHJlZ2lvbiBpbiBhIGZpbGUgbXVzdCBub3QgYmUgYW4gZXJyb3IuCgoJKiBbbWlzYy9sc3RyLmNdCglVc2Ugd2lkZSBjaGFyIGN0eXBlIGZ1bmN0aW9ucy4KCkZyaSBEZWMgMTIgMjM6NDY6MjIgMTk5NyAgVXdlIEJvbm5lcyAgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCgkqIFtmaWxlL2RyaXZlLmNdCglGaXJzdCBhdHRlbXB0IGZvciBHZXREaXNrRnJlZVNwYWNlRXguCgpGcmkgRGVjIDEyIDIzOjE4OjQxIDE5OTcgIE1hcmN1cyBNZWlzc25lciAgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtsb2FkZXIvcGVfcmVzb3VyY2UuY10JCglGaXhlZCB3cm9uZ2x5IGFwcGVhcmluZyBtZW51cyBwcm9ibGVtIChvbmx5IHVzZSBkZWZhdWx0IGxvb2t1cHMgaW4KCWxhc3QgcmVzb3VyY2Ugc3VidHJlZSkuCgoJKiBbbXVsdGltZWRpYS8qLmNdCglBZGRlZCB3aW4zMiBzdXBwb3J0IGZvciB0aW1lKiBhbmQgam95KiBsb3dsZXZlbCBkcml2ZXJzLAoJKG5vdCBleGNlc3NpdmVseSB0ZXN0ZWQpLCBzb21lIG1pc2MgZml4ZXMgYW5kIGNsZWFudXBzLgoKCSogW21pc2Mvc2hlbGxvcmQuY11bbWlzYy9zaGVsbC5jXVtvbGUvZm9sZGVycy5jXVtvbGUvaWZzLmNdCgkgIFtpbmNsdWRlL2ludGVyZmFjZXMuaF1baW5jbHVkZS9zaGxvYmouaF0KCUFkZGVkIHNvbWUgbW9yZSB1bmRvY3VtZW50ZWQgU0hFTEwzMiBmdW5jdGlvbnMsIHNvbWUgc2hlbGwgZm9sZGVyCiAJaW50ZXJmYWNlIHN0dWJzIGFkZGVkLCBTSEdldE1hbGxvYywgU0hHZXREZXNrdG9wRm9sZGVyLAoJU0hHZXRTcGVjaWFsRm9sZGVyTG9jYXRpb24sIFNIR2V0UGF0aEZyb21JRExpc3Qgc3R1YnMgYWRkZWQsCglJTWFsbG9jLCBJVW5rbm93biBpbXBsZW1lbnRlZC4KCgkqIFt3aW5kb3dzL21zZ2JveC5jXQoJSW1wbGVtZW50ZWQgTWVzc2FnZUJveEluZGlyZWN0Kiwgc29tZSBpbnRlcm5hbCBjaGFuZ2VzLgoKCSogW2lmMTYzMi90aHVuay5jXQoJS0VSTkVMXzQzMSBpbXBsZW1lbnRlZC4KCgkqIFtvYmplY3RzL2dkaW9iai5jXQoJR2V0Q3VycmVudE9iamVjdCBpbXBsZW1lbnRlZC4KCldlZCBEZWMgIDMgMDE6MDk6MTcgMTk5NyAgR29yZG9uIENoYWZmZWUgIDxjaGFmZmVlQGFwdS5jcy5iZXJrZWxleS5lZHU+CgoJKiBbb2JqZWN0cy9kaWIuY10KCUZpeCBhIGNvdXBsZSBzbWFsbCBESUIgcHJvYmxlbXMuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRml4IGEgdHlwby4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCVRyeSBub3JtYWwgcmVhZGRpciBpbiBjYXNlIGZzIGlzIHNwZWNpZmllZCBhcyB2ZmF0IGJ1dCBpc24ndC4KCgkqIFtmaWxlcy9wcm9maWxlLmNdCglJbXBsZW1lbnRhdGlvbiBvZiBXcml0ZVByaXZhdGVQcm9maWxlU2VjdGlvbjMyQSBmcm9tIFV3ZSBCb25uZXMuCgoJKiBbbWlzYy9wcmludGRydi5jXQoJT3BlblByaW50ZXIzMkEgc3R1YiwgaGVscHMgV29yZDk3IHN0YXJ0LgoKCSogW29iamVjdHMvdGV4dC5jXQoJRml4dXAgaW1wbGVtZW50YXRpb24gb2YgR2V0VGV4dENoYXJzZXRJbmZvLgoKCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdCglGaXggZW52aXJvbm1lbnQgdmFyaWFibGUgZXhwYW5zaW9uLgoKCSogW3dpbjMyL2NvZGVfcGFnZS5jXQoJTWFrZSBNdWx0aUJ5dGVUb1dpZGVDaGFyIGFuZCBXaWRlQ2hhclRvTXVsdGlCeXRlIGNvbmZvcm0gaW4gcmV0dXJuCgl2YWx1ZXMgYW5kIGVycm9yIGNvbmRpdGlvbnMgdG8gdGhvc2UgaW4gV2luZG93cyBOVCA0LjAuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglGaXggYnJvYWRjYXN0aW5nIHByb2JsZW1zIGluIFdpbjMyLiAgVGhlIFdpbjMyIGRvY3Mgc2F5IHRvIHVzZQoJSFdORF9UT1BNT1NUIHRvIGJyb2FkY2FzdCB0byBhbGwgV2luMzIgV2luZG93cy4KCgkqIFttZW1vcnkvdmlydHVhbC5jXSBbbG9hZGVyL3BlX2ltYWdlLmNdCglEbyBub3QgbWFwIGluIFZpcnR1YWxBbGxvYyBpZiBhZGRyZXNzIGlzIHNwZWNpZmllZCBhbmQgc3BhY2UgaXMKCW5vdCBhdmFpbGFibGUuICBUaGlzIGlzIHJlcXVpcmVkIGJ5IFdpbjMyLgoKCSogW2luY2x1ZGUvcGVuLmhdIFtpbmNsdWRlL3gxMWRydi5oXSBbb2JqZWN0cy9kYy5jXQoJICBbb2JqZWN0cy9wZW4uY10gW2dyYXBoaWNzL3gxMWRydi9wZW4uY10KCVN1cHBvcnQgZm9yIEV4dENyZWF0ZVBlbi4KClR1ZSBEZWMgIDIgMjA6MjI6MDYgMTk5NyAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KCgkqIFsqLyouY10gWyovKi5oXQoJQWRkIGxvdHMgb2YgcHJvdG90eXBlcy4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11baW5jbHVkZS93aW5kb3dzLmhdW2luY2x1ZGUvd2lubnQuaF0KCSAgW21pc2MvY3B1LmNdCglEZWZpbmUgSXNQcm9jZXNzb3JGZWF0dXJlUHJlc2VudC4KCgkqIFttaXNjL2NydGRsbC5jXQogCShDUlRETExfX2dldGN3ZCk6IEFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIHRoZSB0ZXJtaW5hdGluZyB6ZXJvLgoKCSogW21pc2MvdmVyLmNdCglJbXByb3ZlIGNoZWNrIGZvciBudWxsIGNvbXBvbmVudCBpbiBfZmluZF9kYXRhW0FXXS4gIFBsdWcgbGVha3MKCWluIFZlclF1ZXJ5VmFsdWUqLgoKCSogW3dpbjMyL2NvbnNvbGUuY11baWYxNjMyL2tlcm5lbDMyLnNwZWNdCglBZGQgc3R1YnMgZm9yIEdldENvbnNvbGVDdXJzb3JJbmZvMzIsIFNldENvbnNvbGVDdXJzb3JJbmZvMzIuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdW2lmMTYzMi91c2VyMzIuc3BlY11baW5jbHVkZS93aW5kb3dzLmhdCglEZWZpbmUgU2VuZE1lc3NhZ2VUaW1lb3V0Ki4KCgkqIFtncmFwaGljcy94MTFkcnYveGZvbnQuY10KCUNoYW5nZSBhbGdvcml0aG0gb2YgX19nZW5lcmljQ2hlY2tTdW0gdG8gYmUgYWxpZ25tZW50IHNhZmUuCgoJKiBbbWlzYy9tYWluLmNdIFttaXNjL3dpbnNvY2suY10gW21pc2Mvd2luc29ja19kbnMuY10KCUluY2x1ZGUgd2luc29jay5oIGVhcmx5IHRvIGF2b2lkIFNvbGFyaXMgcHJvYmxlbS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCVVuZGVmIEZTSElGVCBiZWZvcmUgd2UgZGVmaW5lIGl0LgoKCSogW3JjL3dpbmVyYy5jXQoJSW5jbHVkZSA8ZmNudGwuaD4gaW5zdGVhZCBvZiA8c3lzL2ZjbnRsLmg+LgoKCSogW2ZpbGVzL2ZpbGUuY10KCVVzZSBzdHJlcnJvciBpbiBGSUxFX1NldERvc0Vycm9yIGlmIGF2YWlsYWJsZS4KCgkqIFtpbmNsdWRlL2NvbmZpZy5oLmluXSBbY29uZmlndXJlLmluXQoJQ2hlY2sgZm9yIHN0cmVycm9yLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdCglNYWtlIHN0YXRpYyBmb250IHN0cnVjdHVyZXMgYWxpZ25lZC4KCk1vbiBEZWMgIDEgMTA6MTA6MjEgMTk5NyAgS2FybCBHYXJyaXNvbiAgPGthcmxvc0Blem5ldC5uZXQ+CgoJKiBbd2luMzIvY29uc29sZS5jXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIHN0dWIgZm9yIEdldE51bWJlck9mQ29uc29sZU1vdXNlQnV0dG9ucy4KCUFkZGVkIHN0dWIgZm9yIFBlZWtDb25zb2xlSW5wdXQoQSxXKS4KCUZpeGVkIHBhcmFtZXRlciBsaXN0IGZvciBXcml0ZUNvbnNvbGUoQSxXKS4KCUdldE51bWJlck9mQ29uc29sZUlucHV0RXZlbnRzIG5vdyByZXR1cm5zIDAgZXZlbnRzIGluc3RlYWQgb2YgMQoJKHNpbmNlIGxvdy1sZXZlbCBjb25zb2xlIGZ1bmN0aW9ucyBhcmUgbm90IHlldCBzdXBwb3J0ZWQpLgoJR2V0Q29uc29sZU1vZGUgbm8gbG9uZ2VyIHJldHVybnMgRU5BQkxFX1dJTkRPV19JTlBVVCBhbmQKCUVOQUJMRV9NT1VTRV9JTlBVVCBzaW5jZSB0aGVzZSBhcmUgbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IE5vdiAyOSAxMjozNToyNiAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtpZjE2MzIvYnVpbHRpbi5jXQoJQnVpbGQgYSBjb21wbGV0ZSBQRSBoZWFkZXIgZm9yIGJ1aWx0aW4gV2luMzIgbW9kdWxlcy4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10gW2xvYWRlci9tb2R1bGUuY10KCUhNT0RVTEUzMiBub3cgcG9pbnRzIHRvIHRoZSBsb2FkaW5nIGFkZHJlc3Mgb2YgdGhlIG1vZHVsZS4gVGhlcmUKCWlzIG5vIGxvbmdlciBhIHNlcGFyYXRlIFBFX01PRFVMRSBzdHJ1Y3R1cmUuCgpGcmkgTm92IDI4IDExOjIxOjQ3IDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW29sZS8qXVtjb25maWd1cmUuaW5dW01ha2VmaWxlLmluXVtpbmNsdWRlL2ludGVyZmFjZXMuaF0KCSAgW2lmMTYzMi9vbGVzdnIzMi5zcGVjXVtpZjE2MzIvb2xlY2xpMzIuc3BlY10KCU5ldyBkaXJlY3RvcnksIG1vdmVkIE9MRSBzdHVmZiB0aGVyZS4KCW5ldyAuc3BlYyBmaWxlcyBmb3Igb2xlY2xpMzIsb2xlc3ZyMzIsIHNvbWUgc3R1YnMgYWRkZWQuCgoJKiBbbWlzYy9zaGVsbC5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgZXh0cmFjdGluZyBpY29ucyBmcm9tIFBFIGRsbHMuCgoJKiBbbWlzYy9zaGVsbG9yZC5jXVtpZjE2MzIvc2hlbGwzMi5zcGVjXQoJQWRkZWQgYSBodWdlIGhlYXAgb2Ygb3JkaW5hbCBvbmx5IGV4cG9ydGVkIHNoZWxsIGZ1bmN0aW9ucwoJKHdpbGwgd29yayBvbmx5IGluIFdpbjk1KS4KCgkqIFtsb2FkZXIvdGFzay5jXQoJSGFjayB0byBtYWtlIE1ha2VQcm9jSW5zdGFuY2UxNiB3b3JrIGluIGFsbCBjYXNlcyAobXBsYXllci5leGUpLgoKCSogW3dpbjMyL3N0cmluZzMyLmNdW2luY2x1ZGUvc3RyaW5nMzIuaF0KCU9ic29sZXRlLCByZW1vdmVkLgoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KCUFkZGVkICpSZWdpc3RlckhvdGtleS4KCgkqIFtvYmplY3RzL2ZvbnQuY11bb2JqZWN0cy90ZXh0LmNdCglBZGRlZCBHZXRGb250TGFuZ3VhZ2VJbmZvLCBHZXRUZXh0Q2hhcnNldEluZm8uCgpXZWQgTm92IDI2IDE4OjEwOjQwIDE5OTcgIFV3ZSBCb25uZXMgIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CgoJKiBbbWlzYy9uZXR3b3JrLmNdCglJbiBXTmV0R2V0Q29ubmVjdGlvbjE2IHJldHVybiB0aGUgRHJpdmUgbGFiZWwgYW5kIG5vdCB0aGUgRE9TLUN3ZC4KCU1ha2VzIFdvcmR2aWV3IDYgc3RhcnQgb24gYSBuZXR3b3JrIGNvbm5lY3RlZCBtYWNoaW5lLgoKCSogW2NvbnRyb2xzL3N0YXR1cy5jXQoJQ2F0Y2ggYSBOdWxsIHBvaW50ZXIgaW4gU1dfU2V0VGV4dC4KCgkqIFtmaWxlcy9kb3NfZnMuY10KIAlBZGQgTlQ1IGZ1bmN0aW9ucyBHZXRMb25nUGF0aE5hbWUzMi4KCgkqIFtmaWxlcy9maWxlLmNdCglNYWtlIEdldFRlbXBGaWxlTmFtZTE2IGFjY2VwdCBkcml2ZSAwIChDdXJyZW50IERyaXZlKSB0b28uCglIYW5kbGUgbW9yZSBlcnJvcnMgYW5kIGJlIG1vcmUgdmVyYm9zZSBpbiBGSUxFX1NldERvc0Vycm9yLCBmaXgKCWFuIGVycm9yIGluIERlbGV0ZUZpbGUzMlcKCgkqIFttZW1vcnkvdmlydHVhbC5jXQoJSW1wbGVtZW50IEZsdXNoVmlld09mRmlsZS4KCgkqIFttaXNjL2NydGRsbF0KCUltcGxlbWVudCBfcm90bCBhbmQgc3BsaXRwYXRoIGFuZCBhZGQgYSBzdHViIGZvciAKCV9hYm5vcm1hbF90ZXJtaW5hdGlvbi4KCgkqIFttaXNjL3ByaW50ZHJ2LmNdCglTdHViIGZvciBFbnVtUHJpbnRlcnMzMkEuCgoJKiBbd2luMzIvbmV3Zm5zXQoJQWRkIFN0dWIgZm9yIFF1ZXJ5UGVyZm9ybWFuY2VGcmVxdWVuY3ksIGNoYW5nZSByZXR1cm4gdmFsdWUKCWZvciBRdWVyeVBlcmZvcm1hbmNlQ291bnRlci4KIAlBZGQgc3R1YiBmb3IgRGV2aWNlSW9Db250cm9sLgoKVHVlIE5vdiAyNSAxNTo1NTowMSAxOTk3IE1hcnRpbiBCb2VobWUgPGJvZWhtZUBpbmZvcm1hdGlrLm11LWx1ZWJlY2suZGU+CgoJKiBbY29udHJvbHMvY29tYm8uY10gW2NvbnRyb2xzL2VkaXQuY10gW3dpbmRvd3MvZGVmd25kLmNdCgkgIFt3aW5kb3dzL3dpbnBvcy5jXSBbd2luZG93cy93aW4uY10KCVJlbW92ZWQgV0lOX05PX1JFRFJBVyBmbGFnLgoKVHVlIE5vdiAyNSAxMzoyMDozNSAxOTk3ICBEb3VnbGFzIFJpZGd3YXkgPHJpZGd3YXlAdGFpZ2Eudi13YXZlLmNvbT4KCgkqIFtncmFwaGljcy94MTFkcnYvYml0Ymx0LmNdCglGaXhlZCBtZW1vcnkgbGVhayBpbiBCSVRCTFRfR2V0RHN0QXJlYS4KClN1biBOb3YgMjMgMTQ6MDU6MjMgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdCglFeHBvcnQgd2luZG93cyBzeXN0ZW0gZGlyZWN0b3J5IHRvIGVudmlyb25tZW50LgoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl0gW2lmMTYzMi9idWlsdGluLmNdIFtpZjE2MzIvdzMyc2tybmwuc3BlY10KCSAgW2lmMTYzMi93aW4zMnMxNi5zcGVjXSBbbWlzYy93MzJzY29tYi5jXSBbbWlzYy93MzJza3JubC5jXQoJQWRkZWQgV2luMzJzIERMTHMgVzMyU0tSTkwgYW5kIFdJTjMyUzE2LgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbbG9hZGVyL21vZHVsZS5jXQoJQWRkZWQgbWlzYyBmdW5jdGlvbnMgZm9yIFdpbjMycy4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtsb2FkZXIvdGFzay5jXQoJQWRkZWQgRGVmaW5lSGFuZGxlVGFibGUoKS4KCgkqIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXQoJRml4ZWQgU2V0RW52aXJvbm1lbnRWYXJpYWJsZTMyQSgpIHRvIGF2b2lkIGhlYXAgY29ycnVwdGlvbi4KClNhdCBOb3YgMjIgMTQ6MTE6NDIgMTk5NyAgS3Jpc3RpYW4gTmllbHNlbiAgPGtyaXN0aWFuLm5pZWxzZW5Acmlzb2UuZGs+CgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJRml4IGxlYWsgaW4gQmVnaW5QYWludDE2KCkgZm9yIENTX1BBUkVOVERDIHdpbmRvd3Mgd2hlcmUgdGhlCgl1cGRhdGUgcmVnaW9uIHdhcyBub3QgcHJvcGVybHkgcmVsZWFzZWQuCgpUaHUgTm92IDIwIDAzOjU1OjI5IDE5OTcgIEdvcmRvbiBDaGFmZmVlIDxjaGFmZmVlQENTLkJlcmtlbGV5LkVEVT4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUltcGxlbWVudGVkIGZvcndhcmRlZCBETEwgZnVuY3Rpb25zLgoKCSogW29iamVjdHMvZGliLmNdCglBZGRlZCBzdXBwb3J0IGZvciAxNi0gYW5kIDMyLWJpdCBtb2RlIERJQnMuCglTdXBwb3J0IG5lZ2F0aXZlIGJpdG1hcCBoZWlnaHRzLgoKCSogW3dpbjMyL3Byb2Nlc3MuY10KCUFkZGVkIHN0dWIgZm9yIENyZWF0ZVByb2Nlc3MzMlcuCgoJKiBbd2luMzIvc2VjdXJpdHkuY10gW2luY2x1ZGUvbnRkbGwuaF0KCUFkZGVkIHN0dWJzIGZvciBMb29rdXBBY2NvdW50U2lkMzJBL1cuCgoJKiBbc2NoZWR1bGVyL3Byb2Nlc3MuY10KCVVzZSB0aGUgc2l6ZSBzcGVjaWZpZWQgaW4gdGhlIFBFIGhlYWRlciBmb3IgdGhlIHByb2Nlc3MgaGVhcC4KCk1vbiBOb3YgMTcgMDA6NTM6MzUgMTk5NyAgTGVuIFdoaXRlIDxwaHJlYWtAY2dvY2FibGUubmV0PgoKCSogW21zZG9zL2ludDNkLmNdCglOZXcgZmlsZS4gU3R1YnMgZm9yIGludDNkLgoKU3VuIE5vdiAxNiAxMjozMDowMCBQU1QgMTk5NyAgSmFzb24gU2Nob25iZXJnICA8c2Nob25AbXRpLnNnaS5jb20+CgoJKiBbaW5jbHVkZS9hc3BpLmhdCglDaGFuZ2VkIGNvbW1lbnQgc3R5bGUgZnJvbSBDKysgdG8gQy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE5vdiAxNiAwNzo0Mjo0NCAxOTk3ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3MvZGNlLmNdIFt3aW5kb3dzL2NsaXBib2FyZC5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCUJ1ZyBmaXhlcy4KCgkqIFttaXNjL3NoZWxsLmNdIFtyZXNvdXJjZXMvKl0KCU5ldyAiQWJvdXQiIGRpYWxvZy4KClNhdCBOb3YgMTUgMTc6MzA6MTggMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29uZmlndXJlLmluXSBbTWFrZWZpbGUuaW5dCglSZXBsYWNlZCAtLXdpdGgtbGlicmFyeSBvcHRpb24gYnkgLS1kaXNhYmxlLWVtdWxhdG9yLiBUaGUgZGVmYXVsdAogCWlzIG5vdyB0byBidWlsZCBib3RoIHRoZSBsaWJyYXJ5IGFuZCB0aGUgZW11bGF0b3IuCglSZW5hbWVkIC0td2l0aCBvcHRpb25zIHRvIC0tZW5hYmxlIHRvIGZvbGxvdyBhdXRvY29uZiBndWlkZWxpbmVzLgoKCSogW2xvYWRlci9tYWluLmNdIFttaXNjZW11L21haW4uY10gKE5ldyBmaWxlKQoJU3BsaXQgaW5pdGlhbGl6YXRpb24gaW4gV2luZWxpYkluaXQvRW11bGF0b3JJbml0LgoKCSogW2xvYWRlci8qLmNdCglSZW1vdmVkIGFsbCByZW1haW5pbmcgI2lmZGVmJ3MgV0lORUxJQi4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdIFt3aW5kb3dzL21kaS5jXQoJQ29udmVydGVkIE1ESUNsaWVudFduZFByb2MgdG8gMzItYml0LgoKCSogW2RlYnVnZ2VyL2JyZWFrLmNdIFtpZjE2MzIvc2lnbmFsLmNdIFtpbmNsdWRlL3NlbGVjdG9ycy5oXQoJICBbc2NoZWR1bGVyL3RocmVhZC5jXQoJQ29kZSBhbmQgZGF0YSBzZWxlY3RvciB2YWx1ZXMgYXJlIG5vdyBjb21wdXRlZCBhdCBydW4tdGltZS4KCgkqIFtsaWJyYXJ5L2xpYnJlcy5jXQoJTW92ZWQgdG8gbG9hZGVyLyBkaXJlY3RvcnkuCgoJKiBbbWlzYy9tYWluLmNdIFttaXNjL3ZlcnNpb24uY10gKE5ldyBmaWxlKQoJTW92ZWQgYWxsIHZlcnNpb24gc3R1ZmYgdG8gdmVyc2lvbi5jLiBDbGVhbmVkIHVwIGEgYml0LgoKCSogW21zZG9zL2RwbWkuY10KCVVwZGF0ZSB0aGUgUkVBTE1PREVDQUxMIHN0cnVjdHVyZSBvbiByZXR1cm4gZnJvbSByZWFsLW1vZGUKCWludGVycnVwdC4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL2tleWJvYXJkLmNdCglDaGFuZ2VkIHRoZSB3YXkgZXZlbnQgY29vcmRpbmF0ZXMgYXJlIGRldGVybWluZWQuIERvbid0IHJlbHkgb24KCXRoZSBDb25maWd1cmVOb3RpZnkgZXZlbnQgdmFsdWVzLiBUaGlzIHNob3VsZCBmaXggYWxsIHByb2JsZW1zCgl3aXRoIGN1cnNvciBwb3NpdGlvbiBpbiAtZGVza3RvcCBhbmQgLW1hbmFnZWQgbW9kZXMuCgpTYXQgTm92IDE1IDE2OjA5OjM2IDE5OTcgIFNsYXZlbiBSZXppYyAgPGVzZXJ0ZUBjcy50dS1iZXJsaW4uZGU+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCgkoQlVUVE9OX0NoZWNrQXV0b1JhZGlvQnV0dG9uKTogUHJldmVudCBwb3NzaWJsZSBlbmRsZXNzIGxvb3AuCgpXZWQgTm92IDEyIDAzOjQyOjQ1IDE5OTcgIENocmlzIEZhaGVydHkgPGNocmlzZkBhbWVyaWNhLmNvbT4KCgkqIFttaXNjL3Zlci5jXQoJQ2hhbmdlZCBWZXJJbnN0YWxsMzJBIHRvIGFzc3VtZSBzcmNkaXIgYXMgZGVzdGluYXRpb24gaWYgZGVzdGRpcgoJaXMgYmxhbmsuICBUaGlzIHdhcyBjYXVzaW5nIGFsb3Qgb2YgRExMIGluc3RhbGxhdGlvbiBpbnRvIFNZU1RFTQoJZGlyZWN0b3J5IHRvIGZhaWwuCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglORV9Mb2FkU2VnbWVudCBidWZmZXJbMTAwXSB3YXMgdG9vIHNtYWxsIGFuZCBnZXR0aW5nIG92ZXJydW5zLgoJQ2hhbmdlZCBpdCB0byBidWZmZXJbMjAwXS4KClNhdCBOb3YgIDggMDY6MDk6NTcgMTk5NyAgTGVuIFdoaXRlIDxwaHJlYWtAY2dvY2FibGUubmV0PgoKCSogW21pc2MvZGRlbWwuY10gW2luY2x1ZGUvZGRlbWwuaF0gW2lmMTYzMi9kZGVtbC5zcGVjXQoJQWRkZWQgc3R1YiBmdW5jdGlvbnMgRGRlQ29ubmVjdExpc3QoKSwgRGRlUXVlcnlOZXh0U2VydmVyKCksCglEZGVEaXNjb25uZWN0TGlzdCgpLCBEZGVTZXRVc2VySGFuZGxlKCksIERkZUFiYW5kb25UcmFuc2FjdGlvbigpLAoJRGRlUG9zdEFkdmlzZSgpLCBEZGVDcmVhdGVEYXRhSGFuZGxlKCksIERkZUFkZERhdGEoKSwgRGRlR2V0RGF0YSgpLAoJRGRlQWNjZXNzRGF0YSgpLCBEZGVVbmFjY2Vzc0RhdGEoKSwgRGRlRW5hYmxlQ2FsbGJhY2soKSwKCURkZUNtcFN0cmluZ0hhbmRsZXMoKS4KCkZyaSBOb3YgIDcgMTk6NDQ6MjYgMTk5NyAgT2xhZiBGbGViYmUgIDxvLmZsZWJiZUBzY2llbmNlLWNvbXB1dGluZy5kZT4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY10KCUZpeCB0eXBvIGluIGRpcmVjdG9yeS5jIFticm9rZSBsb2FkaW5nIG9mIGNkcGxheWVyIG9uIG50NDBdCgoJKiBbbWlzYy9tYWluLmNdCglJbXBsZW1lbnRlZCAtd2ludmVyIG50NDAuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdIFt1c2VyMzIuc3BlY10KCVN0dWJzIGZvciBDb3B5QWNjZWxlcmF0b3JUYWJsZSwgRGVzdHJveSBBY2NlbGVyYXRvclRhYmxlLgoKVGh1IE5vdiAgNiAyMjozNzowNCAxOTk3ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgoKCSogW2ZpbGVzL2RyaXZlLmNdCgkoR2V0RGlza0ZyZWVTcGFjZTMyQSk6IENhcCBhdCAyR0IuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglQcm90b3R5cGUgRHJhd0ljb25FeCBhbmQgQ3JlYXRlRElCU2VjdGlvbjMyLgoJRGVmaW5lIE9CTV9SQURJT0NIRUNLLgoJQWRkIERJXyogbWFjcm9zLgoKCSogW29iamVjdHMvZGliLmNdIFtpZjE2MzIvZ2RpLnNwZWNdCglDcmVhdGVESUJTZWN0aW9uIGlzIGEgV0lOQVBJLiAgUmVuYW1lZCB0byBDcmVhdGVESUJTZWN0aW9uMzIuCglJbXBsZW1lbnQgQ3JlYXRlRElCU2VjdGlvbjE2LgoKCSogW2lmMTYzMi91c2VyLnNwZWNdIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglBZGQgRHJhd0ljb25FeC4KCgkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KCShDb3B5SWNvbjMyKTogRml4IGJvZ3VzIGltcGxlbWVudGF0aW9uLgoKCSogW29iamVjdHMvYml0bWFwLmNdCgkoQ29weUJpdG1hcDMyKTogTmV3IGZ1bmN0aW9uLgoJKENvcHlJbWFnZTMyKTogRG8gYml0bWFwcy4KCgkqIFtncmFwaGljcy94MTFkcnYvdGV4dC5jXQoJKFgxMURSVl9FeHRUZXh0T3V0KTogQ2hhbmdlIGFzY2VudCBhbmQgZGVzY2VudCBkZWZhdWx0IHRvIGF2b2lkCgl6ZXJvLXRoaW5rbmVzcyBvdmVyc3RyaWtlIGxpbmUuCgoJKiBbaW5jbHVkZS9kZWJ1Z3N0ci5oXSBbbWlzYy9kZWJ1Z3N0ci5jXQoJTmV3IGZpbGVzLgoKCSogW21zZG9zL2RwbWkuY10KCURvbid0IHByb3RvdHlwZSBkb19tc2NkZXguIEluIElOVF9JbnQzMUhhbmRsZXIsIGhhbmRsZSByZWFsLW1vZGUKCWludCAweDIxLCBhaD0weDUyLgoKCSogW21zZG9zL2ludDJmLmNdCglBZGQgZHVtbXlzIGZvciAweDE2ODEgYW5kIDB4MTY4Mi4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglGaXggbWVtb3J5IGxlYWtzIGluIFJlZ0RlbGV0ZUtleTMyVy4KCgkqIFtvYmplY3RzL3RleHQuY10KCUluIFRFWFRfTmV4dExpbmUsIGZpeCBhbm90aGVyIG9mZi1ieS1vbmUgYnVnLgoKCSogW2luY2x1ZGUvYml0bWFwcy9vYm1fcmFkaW9jaGVja10KCU5ldyBmaWxlLiAgKEl0IGEgc21hbGwgY2lyY2xlIHVzZWQgdG8gcmFkaW8tYnV0dG9uIG1lbnUgaXRlbXMKCXdoZW4gc2VsZWN0ZWQuKQoJCgkqIFtvYmplY3RzL29lbWJpdG1hcC5jXQoJQWRkIG9ibV9yYWRpb2NoZWNrLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXSBbaWYxNjMyL3VzZXIzMi5zcGVjXSBbY29udHJvbHMvbWVudS5jXQoJICBbaWYxNjMyL3VzZXIuc3BlY10KCURlZmluZSBDaGVja01lbnVSYWRpb0l0ZW17MTYsMzJ9LiAgRGVmaW5lIEdldE1lbnVJdGVtUmVjdHsxNiwzMn0uCgpXZWQgTm92ICA1IDExOjMwOjE0IDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJKiBbbWlzYy9tYWluLmNdCglBdXRvIGFkanVzdCB2ZXJzaW9ucyBkZXBlbmRpbmcgb24gYmluYXJ5LgoKVHVlIE5vdiAgNCAxNToyMTowMCAxOTk3ICBLcmlzdGlhbiBOaWVsc2VuICA8a3Jpc3RpYW4ubmllbHNlbkByaXNvZS5kaz4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglQYWludCBmdWxsIGJhY2tncm91bmQgaW4gbGlzdGJveCBpdGVtcyB3aXRoIHRhYiBzdG9wcyBlbmFibGVkLgoKCSogW2lmMTYzMi90aHVuay5jXQoJQ29weSBzb21lIG1vcmUgbWVzc2FnZSBwYXJhbWV0ZXIgc3RydWN0dXJlcyAoRFJBV0lURU1TVFJVQ1QxNiwKCUNPTVBBUkVJVEVNU1RSVUNUMTYpIHRvIHRoZSBzdGFjayBzZWdtZW50IHRvIGZpeCBicm9rZW4gcHJvZ3JhbXMKCXRoYXQgbmVlZCB0aGlzLgoKCSogW3dpbmRvd3MvZGNlLmNdCglPbmx5IGNsaXAgc2libGluZyB3aW5kb3dzIHdoZW4gdGhlIHBhcmVudCBoYXMgdGhlIFdTX0NMSVBTSUJMSU5HUwoJc3R5bGUgc2V0LgoKCSogW3dpbmRvd3MvZm9jdXMuY10KCU1ha2Ugb3JkZXIgb2YgZXZlbnRzIGluIEZPQ1VTX1N3aXRjaEZvY3VzKCkgcmVmbGVjdCBBUEkgZG9jcy4KCgkqIFt3aW5kb3dzL2RlZmRsZy5jXQoJRml4IHByb2JsZW0gd2l0aCBsb3NzIG9mIGZvY3VzIGluIHNvbWUgZGlhbG9ncy4KCgkqIFt3aW4zMi9jb2RlX3BhZ2UuY10KCUZpeCByZXR1cm4gdmFsdWUgZm9yIE11bHRpQnl0ZVRvV2lkZUNoYXIoKS4KCgkqIFtCVUdTXQoJQkNXIG5vdyB3b3Jrcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IE9jdCAzMCAyMTo1MjoyMyAxOTk3ICBNYXJ0aW4gQm9laG1lIDxib2VobWVAaW5mb3JtYXRpay5tdS1sdWViZWNrLmRlPgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglDaGFuZ2VkIE5DX1RyYWNrU3lzTWVudSB0byBnaXZlIHRoZSBzYW1lIGJlaGF2aW91ciBhcyBNUy1XaW5kb3dzLAoJaS5lLiBzeXN0ZW0gbWVudSBhbHJlYWR5IGFwcGVhcnMgd2hlbiBtb3VzZSBidXR0b24gaXMgZGVwcmVzc2VkLgoJQ2hhbmdlZCBOQ19IYW5kbGVOQ0xCdXR0b25EYmxDbGsgc28gdGhhdCBkb3VibGUgY2xpY2tzIG9uIHNjcm9sbAoJYmFyIGFycm93cyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgc2luZ2xlIGNsaWNrcy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJRml4ZWQgU2V0V2luZG93UG9zMzIgdG8gY2xlYXIgV0lOX05PX1JFRFJBVyB3aGVuIFNXUF9TSE9XV0lORE9XIGlzCglzZXQ7IHRoaXMgaXMgdGhlIHdheSBNUy1XaW5kb3dzIGJlaGF2ZXMuCgpUaHUgT2N0IDMwIDIxOjA4OjU3IDE5OTcgIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+CgoJKiBbY29udHJvbHMvc3RhdHVzLmNdCglJbiBTV19TZXRUZXh0LCBmaXggY29uZGl0aW9uLCBJIGhvcGUuCgoJKiBbY29udHJvbHMvbWVudS5jXQogCShHZXRNZW51U3RhdGUzMik6IERvbid0IG1hc2sgcmV0dXJuIHZhbHVlLiBQcmludCBtb3JlIGRlYnVnIGluZm8uCgkoTUVOVV9NZW51QmFyQ2FsY1NpemUpOiBCZSBtb3JlIGNhcmVmdWwgd2hlbiBwcmludGluZyBkZWJ1ZwoJaW5mb3JtYXRpb24uCgkoTUVOVV9TZXRJdGVtRGF0YSk6IEVtcHR5IHN0cmluZ3MgYXJlIHNlcGFyYXRvcnMuCgoJKiBbZ3JhcGhpY3MveDExZHJ2L3RleHQuY10KCURvbid0IHByb3RvdHlwZSBDTElQUElOR19JbnRlcnNlY3RDbGlwUmVjdC4KCgkqIFtpbmNsdWRlL2RjLmhdCglQcm90b3R5cGUgQ0xJUFBJTkdfSW50ZXJzZWN0Q2xpcFJlY3QuCgoJKiBbb2JqZWN0cy9mb250LmNdCglSZW1vdmUgbm9uLXBvcnRhYmxlIChhbmQgZmF1bHR5KSBzbWFydG5lc3MgaW4gRk9OVF9UZXh0TWV0cmljKnRvKi4KCUluIENyZWF0ZUZvbnQzMlcgYW5kIENyZWF0ZUZvbnQxNiwgaGFuZGxlIG51bGwgZm9udCBuYW1lLgoKCSogW29iamVjdHMvdGV4dC5jXQogCShURVhUX05leHRMaW5lKTogRml4IGVuZC1vZi1saW5lIGJ1Zy4KCgkqIFtpZjE2MzIvc2hlbGwzMi5zcGVjXQoJQWN0aXZhdGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24gb2YgRXh0cmFjdEljb25BLgoKCSogW21pc2Mvc2hlbGwuY10KCUZvciBDb250cm9sX1J1bkRMTCwgYWRkIHR5cGVzIGZvciBwYXJhbWV0ZXJzLgoKVGh1IE9jdCAzMCAxNDo1NDoxMSAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtjb250cm9scy9zdGF0aWMuY10gW2luY2x1ZGUvd2luZG93cy5oXSBbbWlzYy9zcHkuY10KCUFkZGVkIHNvbWUgd2luMzIgZGVmaW5lcyB0byBzdGF0aWMgY29udHJvbHMsIGJhc2ljIFNTX0JJVE1BUCBzdHlsZQoJaGFuZGxpbmcgaW1wbGVtZW50ZWQuIFtwbGVhc2UgYWRkIG1vcmUsIEkgYW0gbGFja2luZyBrbm93bGVkZ2UgYW5kCgl0aW1lXQoKCSogW2NvbnRyb2xzL3N0YXR1cy5jXQoJcGFydF9udW0gMjU1IHNlZW1zIHRvIGluZGljYXRlIHdob2xlIHN0YXR1c2xpbmUgKHdpbjk1IGNkcGxheWVyLmV4ZSkKCgkqIFtpZjE2MzIvdGh1bmsuY10gW3Rvb2xzL2J1aWxkLmNdCglTdXBwb3J0IGxyZXQgYW5kIDB4NjYgbHJldCBjYWxscyBmb3IgQ2FsbFRvMTZfcmVncwoJKG5lZWRlZCBmb3IgS0VSTkVMMzJfNDUpCglGaXhlZCBLRVJORUwzMl80NSwgUVRfVGh1bmsgKHNob3VsZCB3b3JrIG5vdykuCgoJKiBbaWYxNjMyL3JlbGF5LmNdW2lmMTYzMi9idWlsdGluLmNdW3Rvb2xzL2J1aWxkLmNdW2lmMTYzMi8qMzIuc3BlY10KCUFkZGVkIHN0cmluZyBkdW1waW5nIHRvIHJlbGF5IGRlYnVnZ2luZyBmb3Igd2luMzIgYXBpZnVuY3MuCgoJKiBbbWlzYy92ZXIuY10KCUZpeGVkIGFuZCBjbGVhbmVkIHVwIFZlclF1ZXJ5VmFsdWUqLgoKCSogW211bHRpbWVkaWEvKi5jXVtpbmNsdWRlL21tc3lzdGVtLmhdW2lmMTYzMi9tbXN5c3RlbS5zcGVjXQoJICBbaWYxNjMyL3dpbm1tLnNwZWNdCglXaW4zMiBzdXBwb3J0IGZvciBsb3dsZXZlbCBtdWx0aW1lZGlhIGZ1bmN0aW9ucy4KCUFkZGVkIHNvbWUgbWl4ZXIqIGxvd2xldmVsIGZ1bmN0aW9ucy4KCVNvbWUgc21hbGwgZml4ZXMgaW4gdGhlIGF1ZGlvIGxvd2xldmVsIHF1ZXVlIGhhbmRsaW5nLCBjb2RlCglyZWZvcm1hdHRpbmcvY2xlYW51cHMuCgoJKiBbZGVidWdnZXIvaGFzaC5jXQoJRG9uJ3Qgc2hvdyBkaWZmZXJlbmNlIGJldHdlZW4gMTZiaXQgc3ltYm9scyBpZiB0aGV5IGFyZSBpbgoJZGlmZmVyZW50IHNlZ21lbnRzLgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJQWRkZWQgR2V0SWNvbkluZm8gKHBhcnRpYWwpIGFuZCBDcmVhdGVJY29uSW5kaXJlY3QuCgoJKiBbd2luZG93cy9tZGkuY10KCUZpeGVkIHNvbWUgImJhZCBjbGFzcyIgcHJvYmxlbXMgYW5kIGNyYXNoZXMgaW4gTURJQ3JlYXRlQ2hpbGQsCgl3aGljaCBoYXBwZW4gaW4gV2luMzIgKGp3cDMyLmV4ZSkuCgpXZWQgT2N0IDI5IDAwOjU3OjI3IDE5OTcgIEJydWNlIE1pbG5lciAgPEJydWNlLk1pbG5lckBnZW5ldGljcy51dGFoLmVkdT4KCgkqIFtpZjE2MzIvd2luYXNwaS5zcGVjXSBbbWlzYy9hc3BpLmNdIFtpbmNsdWRlL2FzcGkuY10KCSAgW2RvY3VtZW50YXRpb24vYXNwaV0gW2luY2x1ZGUvY2FsbGJhY2suaF0KCUFkZGVkIHN1cHBvcnQgZm9yIDE2IGJpdCBBU1BJIGNhbGxzIHRvIGxpbnV4IGdlbmVyaWMgU0NTSS4KCVRoZSBzdXBwb3J0IGlzIG5vdCBjb21wbGV0ZSwgYnV0IGFwcGVhcnMgdG8gcnVuIG15IE11c3RlawoJc2Nhbm5lciBmcm9tIHdpdGhpbiBpcHBsdXMuZXhlLgoKTW9uIE9jdCAyNyAwMDo1OTo0MSAxOTk3ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3MvZGNlLmNdCglEQyByZXVzZSBmcmFtZXdvcmsuCgpTdW4gT2N0IDI2IDE4OjQxOjIxIDE5OTcgIEh1dyBEIE0gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbZ3JhcGhpY3MveDExZHJ2L3hmb250LmNdCglTdWJzdGl0dXRlZCBmb250cyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBhbGlhcyB0YWJsZS4gUmVmZXJlbmNlcyB0bwoJdGhlIG9sZCBuYW1lIGFyZSBhbHNvIHVwZGF0ZWQuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUxCX1NFTEVDVFNUUklORzMyIG5vdCBDQl9TRUxFQ1RTVFJJTkczMiBzaG91bGQgYmUgc2VudCB0bwoJQ29tYm9MQm94LgoKU3VuIE9jdCAyNiAxNDoyNTowMCAxOTk3ICBOaWtpdGEgVi4gWW91c2hjaGVua28gPHlvdXNoQGNzLm1zdS5zdT4KCgkqIFtpbmNsdWRlL2RyaXZlLmhdIFtmaWxlcy9kcml2ZS5jXSBbbXNkb3MvaW50MjEuY10KCVBhcnRpYWxseSBpbXBsZW1lbnRlZCBET1MgZHJpdmUgbWFwcGluZyAoaW50MjEgQVg9NDQwRikuCgpTYXQgT2N0IDI1IDEzOjAzOjI5IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2RlYnVnZ2VyL2RlYnVnLmxdCglTdXBwb3J0ICcuJyBpbiBpZGVudGlmaWVycy4gVXNlICJ4IC4geSIgdG8gYWNjZXNzIHN0cnVjdHVyZQoJZmllbGRzLgoKCSogW2RlYnVnZ2VyL2hhc2guY10gW2xvYWRlci9wZV9pbWFnZS5jXQoJTG9hZCBlbnRyeSBwb2ludHMgb2YgV2luMzIgbW9kdWxlcyBvbmx5IHdoZW4gZW50ZXJpbmcgdGhlCglkZWJ1Z2dlci4KCgkqIFtkZWJ1Z2dlci9icmVhay5jXQoJTmV3IGZ1bmN0aW9uIERFQlVHX0FkZE1vZHVsZUJyZWFrcG9pbnQoKSB0byBzZXQgYSBicmVha3BvaW50IGF0Cgl0aGUgc3RhcnQgb2YgZXZlcnkgbW9kdWxlLgoKCSogW2ZpbGVzL2ZpbGUuY10KCUZJTEVfbW1hcCgpIGNhbiBub3cgZmFrZSBtbWFwKCkgZm9yIHVuYWxpZ25lZCBvZmZzZXRzIG9yIGJyb2tlbgoJZmlsZXN5c3RlbXMuCgoJKiBbaW5jbHVkZS9jYWxsYmFjay5oXSBbbWlzYy9jYWxsYmFjay5jXSBbaWYxNjMyL3RodW5rLmNdCglVc2UgYSB0YWJsZSBvZiBjYWxsYmFja3MgaW5zdGVhZCBvZiBtYWNyb3MgdG8gZGlmZmVyZW50aWF0ZQoJYmV0d2VlbiBlbXVsYXRvciBhbmQgV2luZWxpYi4KCgkqIFtsb2FkZXIvdGFzay5jXQoJSW5pdGlhbGl6ZSBjdXJyZW50IGRpcmVjdG9yeSBmcm9tIGN3ZCwgbm90IGZyb20gbW9kdWxlIHBhdGguCgoJKiBbdG9vbHMvYnVpbGQuY10KCVJlYWQgQ2FsbFRvMTYgcHJvdG90eXBlcyBkaXJlY3RseSBmcm9tIHRodW5rLmMgc291cmNlIGZpbGUuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdIFt3aW5kb3dzL21kaS5jXQoJQWRkZWQgdHJhbnNsYXRpb24gZm9yIFdNX01ESUFDVElWQVRFIGFuZCBXTV9NRElHRVRBQ1RJVkUuCgpGcmkgT2N0IDI0IDIxOjQxOjI1IDE5OTcgIFV3ZSBCb25uZXMgIDxib25AZWxla3Ryb24uaWtwLnR1LWRhcm1zdGFkdC5kZT4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJQWxsb3cgYXJndW1lbnRzIGxpa2UgImEiIGZvciB0aGUgZHJpdmUgcmVsYXRlZCBhcGlzLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUtlZXAgdGhlIGNhbGN1bGF0aW9uIGZvciBkd01lbW9yeUxvYWQgaW4gcmFuZ2UuCgoJKiBbbWlzYy9jcnRkbGwuY10KCU1ha2UgQ1JURExMX2dldGN3ZCB1c2UgR2V0Q3VycmVudERpcmVjdG9yeTMyQSBhbmQgYWxsb2MKCWl0cyBtZW1vcnkgaWYgcmVxdWVzdGVkLgoJSW1wbGVtZW50ZWQgQ1JURExMX3JlbmFtZSBhbmQgQ1JURExMX3N0YXQgbmVlZGVkIGZvcgoJbGNjLXdpbjMyOndlZGl0LmV4ZS4KCUltcGxlbWVudGVkIENSVERMTF9fZnVsbHBhdGguCgoJKiBbbWlzYy9jb21tLmNdCglIaWdoIHNwZWVkIG1vZGVzIGZvciB0aGUgMTYtYml0IG1vZGUgQ29tbSBmdW5jdGlvbnMuCgoJKiBbbWlzYy9jcHUuY10KCUFzIGFwcGxpY2F0aW9ucyBtYXkgdHJlYXQgbHBNYXhpbXVtQXBwbGljYXRpb25BZGRyZXNzIGFzIGxvbmcsCgl1c2UgYSB2YWxpZCBsb25nIG51bWJlci4KCgkqIFttaXNjL21haW4uY10KCUluIFN5c3RlbVBhcmFtZXRlcnNJbmZvMTYgaWdub3JlIFNQSV9HRVRISUdIQ09OVFJBU1QgdG9vLgoKCSogW21pc2Mvb2xlMm5scy5jXQoJSW1wbGVtZW50IExDTUFQX1VQUEVSQ0FTRSBmb3IgTENNYXBTdHJpbmczMi4KCgkqIFttaXNjL3dzcHJpbnRmXQoJTWFkZSBXUFJJTlRGX1BhcnNlRm9ybWF0QSB1bmRlcnN0YW5kICV3cy4KCgkqIFt3aW4zMi9maWxlLmNdCglJZ25vcmUgRklMRV9BVFRSSUJVVEVfTk9STUFMLgoJU3R1YiBmb3IgUmVhZEZpbGVFeC4KCkZyaSBPY3QgMjQgMTU6MzY6MDIgMTk5NyAgRG91ZyBSaWRnd2F5IDxyaWRnd2F5QHJvdXRoLnVjc2QuZWR1PgoKCSogW21lbW9yeS9sb2NhbC5jXQoJTG9jYWwgaGVhcCBleGhhdXN0aW9uIG1lc3NhZ2Ugbm93IHByaW50cyB3aGljaCBidWlsdGluIGhlYXAgZmlsbGVkLgoKRnJpIE9jdCAyNCAwMDo0NjozNCAxOTk3ICBIdXcgRCBNIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglSZXZlcnNlZCBDcmVhdGVGb250MTYvMzJXIHR5cG8uCgpUaHUgT2N0IDIzIDIzOjQ0OjIwIDE5OTcgIEtyaXN0aWFuIE5pZWxzZW4gIDxrcmlzdGlhbi5uaWVsc2VuQHJpc29lLmRrPgoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglGaXhlZCBhcmd1bWVudCBsaXN0IGZvciBDaGFuZ2VDbGlwYm9hcmRDaGFpbi4KCgkqIFt3aW5kb3dzL21kaS5jXQoJUGFzcyBjb3JyZWN0IGhJbnN0YW5jZSB0byBDcmVhdGVXaW5kb3cxNigpIGluIE1ESUNyZWF0ZUNoaWxkKCkuCgpNb24gT2N0IDIwIDExOjUxOjI0IDE5OTcgIENhcnN0ZW4gRmFsbGVzZW4gPGNmQGl0LmR0dS5kaz4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglBZGRlZCBzdXBwb3J0IGZvciBNRVRBX1NFVFRFWFRDSEFSRVhUUkEuCgoJKiBbb2JqZWN0cy9yZWdpb24uY10KCUZpeGVkIGNyYXNoIGluIFhQb2x5Z29uUmVnaW9uIGlmIHRoZXJlIGlzIG9ubHkgb25lIHBvaW50IGluIAoJaW4gdGhlIHJlZ2lvbi4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY11baW5jbHVkZS9nZGkuaF1baW5jbHVkZS93aW5kb3dzLmhdCgkgIFtvYmplY3RzL2dkaW9iai5jXQoJQ29tcGxldGVkIE9CSl9YWFggZGVmaW5lcyBpbiBnZGkuaCwgcmVtb3ZlZCBPQkpfWFhYIGluIGdkaW9iai5jIAoJYW5kIGluY2x1ZGVkIGdkaS5oIGluc3RlYWQuIEltcGxlbWVudGVkIEdldE9iamVjdFR5cGUzMigpLgoKVGh1IE9jdCAxNiAxNzoyMTozMiAxOTk3ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW2RvY3VtZW50YXRpb24vd2luZS50ZXhpbmZvXQoJRml4ZWQgV0lOMzIgYW5kIE1ha2VmaWxlcyBlbnRyaWVzIG9mIFJlZmVyZW5jZSBtYW51YWwgbm9kZSwgdGhhdAoJbWFkZSBtYWtlaW5mbyBkdW1wIGNvcmUuCgpNb24gT2N0IDEzIDE3OjE1OjU3IDE5OTcgIFJvYmVydCBXaWxoZWxtICA8cm9iZXJ0QHBoeXNpb2wubWVkLnR1LW11ZW5jaGVuLmRlPgoKCSogW2lmMTYzMi9jcnRkbGwuc3BlY10KCUFkZGVkIG1pc3NpbmcgbWF0aCBmdW5jdGlvbnMgeTAoKSwgeTEoKSwgeTIoKSwgZmxvb3IoKSwgZnJleHAoKSwKCWxkZXhwKCksIG1vZGYoKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE9jdCAxMiAxNTowMzowMSAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtpZjE2MzIvYnVpbHRpbi5jXSBbaWYxNjMyL3JlbGF5LmNdCglSZWxheSBkZWJ1Z2dpbmcgZW50cnkgcG9pbnRzIGFyZSBub3cgZ2VuZXJhdGVkIG9uIHRoZSBmbHkgZm9yCglXaW4zMiBETExzLgoKCSogW2luY2x1ZGUvc3RhY2tmcmFtZS5oXQoJQWRkZWQgVkFfTElTVDE2IHR5cGUgYW5kIG1hY3JvcyB0byBhY2Nlc3MgYXJndW1lbnRzIG9uIHRoZSAxNi1iaXQKCXN0YWNrLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUZpeGVkIEdsb2JhbEhhbmRsZTMyIHRvIHdvcmsgd2l0aCBmaXhlZCBibG9ja3MuCgoJKiBbbWlzYy9kZGVtbC5jXSAoTmV3IGZpbGUpCglBZGRlZCBhIGxvdCBvZiBzdHVicyBmb3IgRERFTUwgZnVuY3Rpb25zLgoKCSogW29iamVjdHMvZGMuY10KCUFkZGVkIEdldC9TZXRHcmFwaGljc01vZGUoKS4KCgkqIFtvYmplY3RzL2dkaW9iai5jXSBbd2luZG93cy93aW5wb3MuY10KCUFkZGVkIGEgZmV3IHN0dWJzLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglSZW1vdmVkICdieXRlJywgJ3dvcmQnLCAnbG9uZycgYW5kICdyZXR1cm4nIGVudHJ5IHBvaW50cyBmb3IgV2luMzIuCgkncmVnaXN0ZXInIGZ1bmN0aW9ucyBjYW4gbm8gbG9uZ2VyIHRha2UgYXJndW1lbnRzIGluIFdpbjMyLgogCVRoZSBXaW4zMiBORSBtb2R1bGUgaXMgbm93IGdlbmVyYXRlZCBieSBNT0RVTEVfQ3JlYXRlRHVtbXlNb2R1bGUuCglDYWxsRnJvbTMyIGNhbGxiYWNrcyByZW1vdmVkIGV4Y2VwdCBmb3IgcmVnaXN0ZXIgZnVuY3Rpb25zLgoKRnJpIE9jdCAxMCAxODoyMjoxOCAxOTk3ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFtncmFwaGljcy93aW4xNmRydi9NYWtlZmlsZS5pbl0gW2dyYXBoaWNzL3dpbjE2ZHJ2L2JydXNoLmNdCgkgIFtncmFwaGljcy93aW4xNmRydi9ncmFwaGljcy5jXSBbZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jXQoJICBbZ3JhcGhpY3Mvd2luMTZkcnYvb2JqZWN0cy5jXSBbZ3JhcGhpY3Mvd2luMTZkcnYvcGVuLmNdCgkgIFtncmFwaGljcy93aW4xNmRydi9wcnRkcnYuY10gW2dyYXBoaWNzL3dpbjE2ZHJ2L3RleHQuY10KCSAgW2luY2x1ZGUvY2FsbGJhY2suaF0gW2luY2x1ZGUvd2luMTZkcnYuaF0KCUFkZGVkIHN1cHBvcnQgZm9yIHBlbnMgYW5kIGJydXNoZXMgaW4gU2VsZWN0T2JqZWN0LiBBZGRlZCBzdXBwb3J0Cglmb3IgTGluZVRvLCBNb3ZlVG9FeCwgUGF0Qmx0ICh2ZXJ5IHByZWxpbWluYXJ5KSwgUG9seWdvbiBhbmQKCVJlY3RhbmdsZS4gVGV4dCBpcyBkcmF3biBpbiB0aGUgY29ycmVjdCBwbGFjZSBtb3JlIG9mdGVuLiBUaGVzZQoJY2hhbmdlcyBtYXkgb25seSB3b3JrIHdpdGggdGhlIFdpbmRvd3MgUG9zdHNjcmlwdCBkcml2ZXIgc2luY2UKCW1hbnkgb3RoZXIgZHJpdmVycyBub3cgbmVlZCBtb3JlIEdESSBzdXBwb3J0LgoKVHVlIE9jdCAgNyAyMTowNjoyMyAxOTk3ICBLcmlzdGlhbiBOaWVsc2VuICA8a3Jpc3RpYW4ubmllbHNlbkByaXNvZS5kaz4KCgkqIFtkZWJ1Z2dlci9leHByLmNdCglGaXhlZCB0eXBvIGZvciB0aGUgPj4gb3BlcmF0b3IuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUZpeGVkIFN3aXRjaFN0YWNrVG8oKTsgaXQgdXNlZCB0byByZXR1cm4gd2l0aCB0aGUgbmV3IHN0YWNrIHBsYWNlZAoJZm91ciBieXRlcyB0b28gaGlnaCBpbiBtZW1vcnkuCgoJKiBbbG9hZGVyL25lX3Jlc291cmNlLmNdCglSZW1vdmVkIHByb2JsZW1hdGljIG5hbWV0YWJsZSBjb2RlIGludHJvZHVjZWQgaW4gV2luZSA5NzA5MTQuCgpUdWUgT2N0ICA3IDAyOjI0OjEyIDE5OTcgIERpbWl0cmllIE8uIFBhdW4gIDxkaW1pQGNzLnRvcm9udG8uZWR1PgoKCSogW2NvbnRyb2xzL2NvbW1jdHJsLmNdCglBZGRlZCB0aGlzIGZpbGVzIHRvIGhvbGQgZnVuY3Rpb25zIGZyb20gdGhlIGNvbWN0bDMyLmRsbAoJQWRkZWQgdG8gdGhpcyBmaWxlcyBzb21lIGZ1bmN0aW9ucyBzY2F0dGVyZWQgaW4gZGlmZmVyZW50IHBsYWNlcwoJKHN1Y2ggYXMgSW5pdENvbW1vbkNvbnRyb2xzKSBhbmQgYWRkZWQgc29tZSBuZXcgb25lcyBhcyB3ZWxsLgoKCSogW2luY2x1ZGUvc3lzY29sb3IuaF0gW3dpbmRvd3Mvc3lzY29sb3IuY10KCUFkZGVkIHByb3BlciBlbnRyaWVzIGZvciBhbGwgcG9zc2libGUgQ09MT1JfKiB2YWx1ZXMuCgoJKiBbb2JqZWN0cy9icnVzaC5jXQoJTW9kaWZpZWQgR2V0U3lzQ29sb3JCcnVzaCB0byByZXR1cm4gdGhlIGNvcnJlY3QgYnJ1c2ggZm9yIAoJYWxsIHBvc3NpYmxlIENPTE9SXyogY29uc3RhbnRzLgoKU2F0IE9jdCAgNCAyMzozNToyMCAxOTk3ICBVLkJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudGgtZGFybXN0YWR0LmRlPgoKCSogW2xvYWRlci9tb2R1bGUuY10gW3NjaGVkdWxlci9wcm9jZXNzLmNdIFt3aW4zMi9lbnZpcm9ubWVudC5jXQoJQW5vdGhlciBhcHByb2FjaCB0byBnZXQgYWNjZXNzIHRvIGFuIHVucmVzdHJpY3RlZCBjb21tYW5kbGluZS4KCgkqIFttaXNjL2NydGRsbC5jXQoJTWFrZSBmY2xvc2Ugd29yayBhZ2Fpbi4KCgkqIFtpZjE2MzIvY3J0ZGxsLnNwZWNdCglVc2Ugc3ByaW50ZiBmb3IgY3J0ZGxsLXNwcmludGYgYWdhaW4gYXMgZS5nLiAlZyBpcyBub3QgYXZhaWxhYmxlCglmb3Igd3NwcmludGYuCgoJKiBbbWlzYy93c3ByaW50Zi5jXQoJTWFrZSBXUFJfU1RSSU5HIHdvcmsgaW4gbW9yZSBzaXR1YXRpb25zLgoJQWRkZWQgZGVidWcgb3V0cHV0IGZvciB0aGUgd3NwcmludGYgZnVuY3Rpb25zLgoKCSogW21pc2MvY3J0ZGxsLmNdIFttaXNjL21haW4uY10KCVVzZSBhcmd2WzBdIGFzIGNvbWFuZCB3aXRoIENSVERMTF9zeXN0ZW0uCgpGcmkgT2N0ICAzIDE0OjAwOjI5IE1FVCBEU1QgMTk5NyAgSmFuIFdpbGxhbW93aXVzICA8amFuQGphbmhoLnNobmV0Lm9yZz4KCgkqIFsqLypdCiAgICAgICAgUmVtb3ZlZCBzb21lIGNvbXBpbGVyIHdhcm5pbmdzLgoKCSogW21zZG9zL2ludDE1LmNdCiAgICAgICAgTmV3IElOVCAxNSBoYW5kbGVyLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgU2VwIDI3IDEyOjM2OjU2IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2lmMTYzMi9yZWxheS5jXQoJTWFkZSBDYXRjaCBhbmQgVGhyb3cgYWxzbyBzYXZlICVzaSBhbmQgJWRpICh1bnRlc3RlZCkuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglBZGRlZCBjaGVjayBmb3IgJWZzIGFuZCAlZ3MgaW4gU0VMRUNUT1JfRnJlZUJsb2NrLgoKCSogW3JjL3dpbmVyYy5jXQoJR2VuZXJhdGVkIGZpbGVzIG5vIGxvbmdlciBkZXBlbmQgb24gV2luZSBpbmNsdWRlcy4KCU1hZGUgLmggZ2VuZXJhdGlvbiBvcHRpb25hbC4KCgkqIFt0b29scy9idWlsZC5jXSBbbG9hZGVyL3Rhc2suY10KCUFkZGVkIENBTEwzMl9Jbml0IGZ1bmN0aW9uLgoJQWRkZWQgcG9zc2liaWxpdHkgdG8gcGFzcyBhcmd1bWVudHMgd2hlbiB1c2luZyBDQUxMVE8xNl9yZWdzXy4KCTMyLWJpdCBzdGFjayBwb2ludGVyIGlzIG5vdyBzYXZlZCBvbiB0aGUgMTYtYml0IHN0YWNrLCBpbnN0ZWFkIG9mCgl1c2luZyBJRjE2MzJfU2F2ZWQzMl9lc3AuCglSZW1vdmVkIENhbGxUbzMyIGNhbGxiYWNrcy4KCgkqIFt0b29scy9tYWtlZGVwLmNdIFsqL01ha2VmaWxlLmluXQoJQWRkZWQgc3VwcG9ydCBmb3IgZGlyZWN0bHkgZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMgZm9yIC55LCAubCBhbmQKCS5yYyBmaWxlcy4gTW9kaWZpZWQgdGhlIG1ha2VmaWxlcyB0byB1c2UgdGhpcyBmZWF0dXJlLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXSBbaWYxNjMyL3RodW5rLmNdCglVc2UgQ0FMTFRPMTZfcmVncyB0byBjYWxsIHdpbmRvdyBwcm9jZWR1cmVzLgoKVGh1IFNlcCAyNSAxMjoxODo1NyAxOTk3ICBLcmlzdGlhbiBOaWVsc2VuIDxrcmlzdGlhbi5uaWVsc2VuQHJpc29lLmRrPgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCUNoYW5nZWQgZW50cnkgZm9yIFN3aXRjaFN0YWNrQmFjayB0byByZW1vdmUgYXJndW1lbnRzIGZyb20gc3RhY2sKCXVwb24gcmV0dXJuIChhcmd1bWVudHMgbGVmdCBvdmVyIGZyb20gcHJldmlvdXMgU3dpdGNoU3RhY2tUbygpKS4KCUJvcmxhbmQgQysrIDQuMCBub3cgY29tcGlsZXMgIkhlbGxvIFdvcmxkIiAoYnV0IGNyYXNoZXMgYWZ0ZXIKCW91dHB1dHRpbmcgdGhlIC5leGUpLgoKV2VkIFNlcCAyNCAxMzo1NDo0NCAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY10KCVNlYXJjaFBhdGggbWlnaHQgZ2V0IE5VTEwgYnVmZmVyIChlbXB0eSBMUlUgbGlzdCBpbiB3b3JkcGFkKS4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCUFkZGVkIFNVbk1hcExTKi4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUJlIGFibGUgdG8gcnVuIGV4ZWN1dGVhYmxlcyBmcm9tIG5vbiBtbWFwKClibGUgZmlsZXN5c3RlbXMuCglQRV9Mb2FkTGlicmFyeSBhZGRzIGxpYnJhcnlzIGxvYWRlZCBieSBhbm90aGVyIHByb2Nlc3MgdG8KCWl0cyBvd24gbW9kcmVmIGxpc3QgdG9vLgoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY11baW5jbHVkZS9hY2NlbC5oXVtsb2FkZXIvcmVzb3VyY2UuY10KCUZpeGVkIGFjY2VsZXJhdG9yIGxlYWthZ2UsIHVzZSBTREsgZGVmaW5lcy9uYW1lcy4KCgkqIFtncmFwaGljcy9lbnYuY11bbWlzYy9tYWluLmNdCglTZXQvR2V0RW52aXJvbmVtbnQgaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggZW52aXJvbm1lbnQgdmFycywKCWJ1dCB3aXRoIFByaW50ZXIgRW52aXJvbm1lbnQuCgoJKiBbZ3JhcGhpY3MvZXNjYXBlLmNdCglFc2NhcGUzMjogbWFwIGFyZ3MgYmFjayB0byBzZWdtZW50ZWQgcG9pbnRlcnMuCgoJKiBbd2luZG93cy93aW4uY10KCVdTX1BPUFVQfFdTX0NISUxEIHdpbmRvd3MgZG9uJ3QgbmVlZCBhIHBhcmVudCB3aW5kb3cgKFNESykuCgpUdWUgU2VwIDE2IDE0OjQwOjE2IDE5OTcgIFJvYmVydCBXaWxoZWxtICA8cm9iZXJ0QHBoeXNpb2wubWVkLnR1LW11ZW5jaGVuLmRlPgoKCSogW2lmMTYzMi9jcnRkbGwuc3BlY10gW21pc2MvY3J0ZGxsLmNdCglBZGRlZCBzaWduYWwoKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IFNlcCAxMSAxODoyNDo1NiAxOTk3ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW29iamVjdHMvZGMuY10KCUluIERDX1NldHVwR0NGb3JQYXRCbHQsIHJlcGxhY2UgUjJfTk9UIGJ5IEdYeG9yIHdpdGggKGJsYWNrIHhvciB3aGl0ZSkuCgpUdWUgU2VwICA5IDIzOjA0OjAyIDE5OTcgIFUuIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudGgtZGFybXN0YWR0LmRlPgoKCSogW21lbW9yeS92aXJ0dWFsLmNdIAoJRG8gbm90IHdyaXRlIGRlYnVnZ2luZyBpbmZvIHVuY29uZGl0aW9uYWxseSB0byBzdGRlcnIuCgoJKiBbZmlsZXMvcHJvZmlsZS5jXQoJQ2FsbCBQUk9GSUxFX0dldFNlY3Rpb24gaW4gUFJPRklMRV9HZXRTdHJpbmcgZm9yIGtleV9uYW1lICIiIHRvby4KCgkqIFttaXNjL2NydGRsbC5jXQoJTWFueSBuZXcgZnVuY3Rpb25zLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXSBbd2luZG93cy93aW5wb3MuY10KCUNsaWVudFRvU2NyZWVuMTYgZG9lc24ndCBoYXZlIGEgcmV0dXJuIHZhbHVlLgoKU3VuIFNlcCAgNyAxMDowNjozOSAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFttaXNjL21haW4uY10gW0FVVEhPUlNdCglVcGRhdGUgdGhlIGxpc3Qgb2YgY29udHJpYnV0b3JzLiBQbGVhc2UgbGV0IG1lIGtub3cgaWYgSSBmb3Jnb3QKCXNvbWVvbmUuCgoJKiBbaWYxNjMyLyouc3BlY10gW2lmMTYzMi9idWlsdGluLmNdIFt0b29scy9idWlsZC5jXQoJT3JkaW5hbCBiYXNlIGZvciBXaW4zMiBETExzIGlzIG5vdyBjb21wdXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlCglsb3dlc3Qgb3JkaW5hbCBmb3VuZC4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglXSU5BUEkgaXMgbm93IGRlZmluZWQgYXMgYXR0cmlidXRlKChzdGRjYWxsKSkuIFRoaXMgd2lsbCByZXF1aXJlCglnY2MgdG8gY29tcGlsZS4KCgkqIFtpZjE2MzIvdGh1bmsuY10KCVJlbW92ZWQgV2luMzIgdGh1bmtzIChubyBsb25nZXIgbmVlZGVkIHdpdGggc3RkY2FsbCkuCgoJKiBbaWYxNjMyL2NydGRsbC5zcGVjXSBbbWlzYy9jcnRkbGwuY10KCU1ha2Ugc3VyZSB3ZSBvbmx5IHJlZmVyZW5jZSBjZGVjbCBmdW5jdGlvbnMgaW4gdGhlIHNwZWMgZmlsZS4KCgkqIFtvYmplY3RzL2RjLmNdCglVc2UgQ2FwTm90TGFzdCBkcmF3aW5nIHN0eWxlIGZvciAxLXBpeGVsIHdpZGUgbGluZXMuCgoJKiBbdG9vbHMvYnVpbGQuY10KCUFkZGVkICdkb3VibGUnIGFyZ3VtZW50IHR5cGUuCglBZGRlZCAndmFyYXJncycgZnVuY3Rpb24gdHlwZSBmb3IgV2luMzIuCglNYWRlIENhbGxUbzE2X3h4eCBmdW5jdGlvbnMgc3RkY2FsbC4KCkZyaSBTZXAgIDUgMTQ6NTA6NDkgMTk5NyAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt0b29scy9idWlsZC5jXSBbd2luZG93cy93aW4uY10gW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJTW9yZSBmaXhlcyB0byBnZXQgbWVzc2FnZSBleGNoYW5nZSBjbG9zZXIgdG8gdGhlIG9yaWdpbmFsLgoKCSogW21pc2Mvc3B5LmNdCglNZXNzYWdlIGxvZ3Mgbm93IGNvbnRhaW4gd2luZG93IG5hbWVzLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXSBbbG9hZGVyL25lX3Jlc291cmNlLmNdIFtsb2FkZXIvdGFzay5jXQoJICBbb2JqZWN0cy9jdXJzb3JpY29uLmNdIFt3aW5kb3dzL3VzZXIuY10KCUFkZGVkIHNvbWUgb2JzY3VyZSBmZWF0dXJlcyB0byBmaXggbWVtb3J5IGxlYWtzLgoKRnJpIFNlcCAgNSAwMDo0NjoyOCAxOTk3ICBKYW4gV2lsbGFtb3dpdXMgPGphbkBqYW5oaC5zaG5ldC5vcmc+CgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFt3aW4zMi9uZXdmbnMuY10KCUFkZGVkIHN0dWIgZm9yIFVUUmVnaXN0ZXIoKSBhbmQgVVRVblJlZ2lzdGVyKCkuCgpUaHUgU2VwICA0IDEyOjAzOjEyIDE5OTcgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtcGM0OS5MZWlkZW5Vbml2Lm5sPgoJKiBbY29udHJvbHMvZWRpdC5jXQoJQWxsb3cgQVNDSUkgY29kZXMgPiAxMjcgaW4gV01fQ0hBUi4KCk1vbiBTZXAgIDEgMTc6MjM6MjQgMTk5NyAgRGltaXRyaWUgTy4gUGF1biAgPGRpbWlAbWFpbC5jcy50b3JvbnRvLmVkdT4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglJbiBJbml0Q29tbW9uQ29udHJvbHMsIHJlbWVtYmVyIHRoZSBuYW1lIG9mIHRoZSBjbGFzcwoJYmVjYXVzZSBscHN6Q2xhc3NOYW1lIHdhcyBtYWRlIHRvIHBvaW50IHRvIGEgbG9jYWwgYXJyYXkKCUFkZGVkIHRoZSBQcm9ncmVzc0JhciB0byB0aGUgbGlzdCBvZiBpbXBsZW1lbnRlZCBjb250cm9scy4KCUNhbGwgSW5pdENvbW1vbkNvbnRyb2xzIGZyb20gV0lER0VUU19Jbml0IHRvIHJlZ2lzdGVyIGFsbAoJaW1wbGVtZW50ZWQgQ29tbW9uIENvbnRyb2xzLgoJCgkqIFtpbmNsdWRlL2NvbW1jdHJsLmhdCglBZGRlZCBtaXNjIGRlY2wgZm9yIHRoZSBQcm9ncmVzcyBCYXIuCgoJKiBbY29udHJvbHMvcHJvZ3Jlc3MuY10gW2luY2x1ZGUvcHJvZ3Jlc3MuaF0KCUZpcnN0IGF0dGVtcHQgYXQgaW1wbGVtZW50aW9uZyB0aGUgUHJvZ3Jlc3MgQmFyIGNsYXNzLgoKCSogW29iamVjdHMvYnJ1c2guaF0KCUltcGxlbWVudGF0aW9uIGZvciBHZXRTeXNDb2xvckJydXNoWzE2fDMyXQoKCSogW2NvbnRyb2xzL3N0YXR1cy5jXQoJVXNlIERyYXdFZGdlIHRvIGRyYXcgdGhlIGJvcmRlcnMgYW5kIGZpbGwgdGhlIGJhY2tncm91bmQKCgkqIFtjb250cm9scy91aXRvb2xzLmNdCglBZGRlZCBEcmF3RGlhZ0VkZ2UzMiBhbmQgRHJhd1JlY3RFZGdlMzIKCgkqIFtncmFwaGljcy9wYWludGluZy5jXQoJSW1wbGVtZW50IERyYXdFZGdlWzE2fDMyXQoJU3RhcnRlZCBEcmF3RnJhbWVDb250cm9sMzIKCk1vbiBTZXAgIDEgMTA6MDc6MDkgMTk5NyAgTGF3c29uIFdoaXRuZXkgPGxhd3Nvbl93aGl0bmV5QGp1bm8uY29tPgoKCSogW21pc2MvY29tbS5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglTZXRDb21tRXZlbnRNYXNrIHJldHVybnMgYSBTRUdQVFIuCgpTdW4gQXVnIDMxIDIzOjI4OjMyIDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXVtsb2FkZXIvbW9kdWxlLmNdW2luY2x1ZGUvcGVfaW1hZ2UuaF0KCSAgW2luY2x1ZGUvbW9kdWxlLmhdCglDbGVhbmVkIHVwIHRoZSB3aG9sZSBXaW4zMiBsaWJyYXJ5IG1lc3MgKGEgYml0KS4KCgkqIFtkZWJ1Z2dlci9zdGFicy5jXQoJSWYgJ3dpbmUnIGhhcyBubyBhYnNvbHV0ZSBwYXRoIGFuZCBpc24ndCBmb3VuZCwgY2hlY2sgJFBBVEggdG9vLgoKCSogW21pc2Mvb2xlMm5scy5jXQoJU29tZSBmaXhlcy4KCgkqIFttaXNjL3Zlci5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgUEUgc3R5bGUgdmVyc2lvbiByZXNvdXJjZXMuCgoJKiBbbWVtb3J5L3N0cmluZy5jXQoJQ2hlY2sgZm9yIE5VTEwgcG9pbnRlcnMgdG8gX2xzdHIqIGZ1bmN0aW9ucywganVzdCBhcyBXaW5kb3dzOTUgZG9lcy4KCgkqIFttdWx0aW1lZGlhL3RpbWUuY10KCU1hZGUgbGlzdCBvZiB0aW1lcnMgYSBzaW1wbGUgbGlua2VkIGxpc3QuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglOZXRzY2FwZSAzIHNlZW1zIHRvIHBhc3MgTkVHQVRJVkUgcmVzb3VyY2UgSWRzIChpbiBhbgoJdW5zaWduZWQgaW50LCB5ZXMpLiBEb24ndCBrbm93IHdoeSwgZml4ZWQgaXQgYW55d2F5LgoKCSogW29iamVjdHMvYml0bWFwLmNdCglMb2FkSW1hZ2VXIGFkZGVkLgoKCSogW2luY2x1ZGUvd2luLmhdW3dpbmRvd3Mvd2luLmNdCglDaGFuZ2Ugd0lEbWVudSBmcm9tIFVJTlQxNiB0byBVSU5UMzIgYW5kIGNoYW5nZWQgdGhlCglTZXRXaW5kb3coTG9uZ3xXb3JkKSBhY2NvcmRpbmdseS4KClRodSBBdWcgMjggMTk6MzA6MDggMTk5NyAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZCBhIGZldyBtb3JlIGNvbG9ycyBkZWZpbmVkIGZvciBXaW45NS4KCUFkZCBhIGZldyBtb3JlIGJydXNoIHN0eWxlcy4KCgkqIFt3aW5kb3dzL3N5c2NvbG9yLmNdCiAJQWRkIGVycm9yIGNoZWNrcyBmb3IgU1lTQ09MT1JfU2V0Q29sb3IsIFNZU0NPTE9SX0luaXQsCglHZXRTeXNDb2xvcjE2LCBHZXRTeXNDb2xvcjMyLiAgQWRkIHN1cHBvcnQgZm9yIGFib3ZlIGNvbG9ycy4KClN1biBBdWcgMjQgMTY6MjI6NTcgMTk5NyAgQW5kcmV3IFRheWxvciA8YXRheWxvckBjYWR2aXNpb24uY29tPgoKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KCUNoYW5nZWQgbW1pb0Rlc2NlbmQgdG8gdXNlIG1taW8gZnVuY3Rpb25zIGZvciBmaWxlIEkvTywgbmVjY2Vzc2FyeQoJZm9yIG1lbW9yeSBmaWxlcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IEF1ZyAyMyAwMDowNToyMyAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpZjE2MzIvbW1zeXN0ZW0uc3BlY10KCUFkZGVkIHNvbWUgc3R1YnMuCgoJKiBbaW5jbHVkZS9uZWV4ZS5oXSBbbG9hZGVyL21vZHVsZS5jXQoJQWRkZWQgd2FybmluZyBmb3IgT1MvMiBleGVjdXRhYmxlcy4KCgkqIFttdWx0aW1lZGlhL21pZGkuY10KCVNob3J0ZW5lZCBNSURJT1VUIGRyaXZlciB2ZXJzaW9uIHN0cmluZyB0byBiZSBsZXNzIHRoYW4gMzEgY2hhcnMuCgoJKiBbb2JqZWN0cy9nZGlvYmouY10KCUZpeGVkIERlbGV0ZU9iamVjdDMyKCkgdG8gcmVhY3QgcHJvcGVybHkgd2hlbiBjYWxsZWQgd2l0aCBzdG9jayBvYmplY3QuCgpGcmkgQXVnIDIyIDE4OjAzOjI2IDE5OTcgIERpbWl0cmllIE8uIFBhdW4gPGRpbWlAY3MudG9yb250by5lZHU+CgoJKiBbY29udHJvbHMvdXBkb3duLmNdIFtpbmNsdWRlL3VwZG93bi5oXQoJRmlyc3QgYXR0ZW1wdCBhdCBpbXBsZW1lbnRpb25nIHRoZSBVcERvd24gY2xhc3MuCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJQWRkZWQgdGhlIFVwRG93biBjbGFzcyB0byBiZSBpbml0aWFsaXplZCBieSBJbml0Q29tbW9uQ29udHJvbHMoKS4KCldlZCBBdWcgMjAgMTg6MDE6MzMgMTk5NyAgRG91ZyBSaWRnd2F5IDxyaWRnd2F5QHJvdXRoLlVDU0QuRURVPgoKCSogW2dyYXBoaWNzLypdIFtvYmplY3RzLypdIFtpbmNsdWRlL2dkaS5oXQoJTWFkZSBhbGwgR0RJIG9iamVjdHMgKGV4Y2VwdCBEQ3MpIG1vdmVhYmxlLgoKTW9uIEF1ZyAxOCAwMzoyNTozMCAxOTk3ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3MvZXZlbnQuY10gW21pc2Mvd2luc29jay5jXSBbbWlzYy93aW5zb2NrX2Rucy5jXQoJUmVtb3ZlZCBJUEMgY29tbXVuaWNhdGlvbiB0byBzcGVlZCB1cCB3aW5zb2NrIHNlcnZpY2VzCgkodGVzdGVkIG9ubHkgd2l0aCAxNi1iaXQgbmV0c2NhcGUgMy4wMykuCgoJKiBbZ3JhcGhpY3MveDExZHJ2L3hmb250LmNdIFtkb2N1bWVudGF0aW9uL2ZvbnRzXQoJTWlzY2VsbGFuZW91cyBpbXByb3ZlbWVudHMuIFVwZGF0ZWQgZG9jcy4KClN1biBBdWcgMTcgMjA6Mzk6NTUgMTk5NyAgSW5nbyBTY2huZWlkZXIgPHNjaG5laWRpQGluZm9ybWF0aWsudHUtbXVlbmNoZW4uZGU+CgoJKiBbbWlzYy9jb21tLmNdCglBIGNvdXBsZSBvZiBidWcgZml4ZXMuCgpTdW4gQXVnIDE3IDE5OjI5OjIyIDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2RlYnVnZ2VyL2RiZy55XQoJRGlzcGxheSBuZXh0IGluc3RydWN0aW9uIGFmdGVyIHN0ZXBpL25leHRpLgoKCSogW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9jYWxsYmFjay5oXSBbdG9vbHMvYnVpbGQuY10KCVJlcGxhY2VkIENhbGxUbzMyX0xhcmdlU3RhY2sgd2l0aCB0aGUgQ0FMTF9MQVJHRV9TVEFDSyBtYWNybyBmb3IKCWJldHRlciBXaW5lbGliIHN1cHBvcnQuCgoJKiBbaW5jbHVkZS9zaWdjb250ZXh0LmhdCglSZW5hbWVkIHRvIHNpZ19jb250ZXh0LmggdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggbGliYy4KCgkqIFsqLypdCglBbGwgQVBJIGZ1bmN0aW9ucyBhcmUgbm93IHByZWZpeGVkIHdpdGggV0lOQVBJIGluIHByZXZpc2lvbiBvZgoJZnV0dXJlIFdpbmVsaWIgaW50ZWdyYXRpb24uCgoJKiBbbG9hZGVyL3NpZ25hbC5jXSBbbWVtb3J5L2xkdC5jXQoJRml4ZWQgYXNzZW1ibHkgY29kZSB0byBiZSAtZlBJQyBjb21wYXRpYmxlLgoKVGh1IEF1ZyAxNCAxNDozODoxNSAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpZjE2MzIvY3J0ZGxsLnNwZWNdW3dpbjMyL2V4Y2VwdC5jXQoJX2dsb2JhbF91bndpbmQsIF9sb2NhbF91bndpbmQgc3R1YiBhZGRlZC4KCgkqIFtvYmplY3RzL2RpYi5jXQkKCURvbid0IHJlYWQgbWVtb3J5IHlvdSBkb24ndCBldmVuIG5lZWQgZm9yIHRoZSB0YXJnZXQgYml0bWFwIChmaXhlcwoJb25lICdsYXp5JyBwcm9ncmFtKS4KCgkqIFtpZjE2MzIvcmVsYXkuY11baWYxNjMyL3RodW5rLmNdW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJICBbd2luMzIvb3JkaW5hbHMuY11bbWVtb3J5L3NlbGVjdG9yLmNdW21lbW9yeS9nbG9iYWwuY10KCSAgW2luY2x1ZGUvY2FsbGJhY2suaF0KCUFkZGVkL21vdmVkIHNvbWUgbW9yZSB3aW45NSBvcmRpbmFsIHN0dWZmLiBJbXBsZW1lbnRlZCBRVF9UaHVuawoJKG5vdCAxMDAlIGNvcnJlY3QgeWV0KSBhbmQgc29tZSBmcmllbmRzLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJQWRkIHBvc3NpYmlsaXR5IHRvIGJyZWFrIGF0IHRoZSBETEwgZW50cnlwb2ludC4KCgkqIFtjb250cm9scy9zdGF0aWMuY11bbWlzYy9jb21tZGxnLmNdW3NjaGVkdWxlci90aHJlYWQuY10KCU1pc2MgYnVnZml4ZXMgYW5kIGFkZGl0aW9ucy4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglUaGUgcmVnaXN0cnkgc2VlbXMgdG8gYmUgY2FzZS1wcmVzZXJ2aW5nIGJ1dCBjYXNlLWluc2Vuc2l0aXZlLgoKCSogW21lbW9yeS9nbG9iYWwuY10JCglBZGFwdGVkIHRvIG5ldyAvcHJvYy9tZW1pbmZvIGZvcm1hdC4KCgkqIFtvYmplY3RzL2ZvbnQuY11bZ3JhcGhpY3MveDExZHJ2L3hmb250LmNdCglGT05UX1NlbGVjdE9iamVjdCBhbmQgR2V0VGV4dE1ldHJpY3MqIGdldCBwYXNzZWQgcmFuZ2VzIGluIGxvZ2ljYWwKIAlhbmQgbm90IGRldmljZSBwb2ludHMgKHRoYW5rcyB0byBNYXJpb24gUmV5emwgZm9yIHBvaW50aW5nIHRoaXMKIAlvdXQpLgoKCSogW3dpbmRvd3MvY2FyZXQuY10KCVVzZSB0aGUgd2luZG93cyBvd24gREMgaWYgcHJlc2VudCAoVGhlIGNhcmV0IGNvb3JkaW5hdGVzIGFyZQoJbG9naWNhbCBjb29yZGluYXRlcyBiYXNlZCBvbiBpdCkuIEZpeGVzIGFub3RoZXIgQU1JUFJPIHByb2JsZW0uCgpXZWQgQXVnICA2IDE4OjIyOjIyIDE5OTcgIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJR2VuZXJhbCBjbGVhbi11cCBhbmQgV2luMzIgd29yazogc3BsaXQgaXRlbV9mbGFncyBpbnRvIGZUeXBlIGFuZAoJZlN0YXRlOyBzcGxpdCBpdGVtX2lkIGludG8gd0lEIGFuZCBoU3ViTWVudS4gIEltcHJvdmVkCglkZWJ1Zy1wcmludGluZy4gIEltcGxlbWVudGVkIEluc2VydE1lbnVJdGVtMzJbQVddLAoJU2V0TWVudURlZmF1bHRJdGVtMzIsIGFuZCBTZXRNZW51SXRlbUluZm8zMltBV10uICBGaXhlZAoJR2V0TWVudUl0ZW1JbmZvMzJbQVddLgoKCSogW2lmMTYzMi91c2VyMzIuc3BlY10KCURlZmluZSBhYm92ZSBuZXcgZnVuY3Rpb25zLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJRGVmaW5lIE1GX0RFRkFVTFQgYW5kIE1GX1JJR0hUSlVTVElGWS4gIFByb3RvdHlwZSBhYm92ZSBmdW5jdGlvbnMuCgoJKiBbaW5jbHVkZS9tZW51LmhdCglEb24ndCBwcm90b3R5cGUgbm93LXN0YXRpYyBNRU5VX0luaXRTeXNNZW51UG9wdXAuCgoJKiBbaW5jbHVkZS9jb21tLmhdCglSZWR1Y2UgTUFYX1BPUlRTIHRvIDkgKHdoaWNoIHRoZSBwcm9maWxlIGNvZGUgY2FuIGhhbmRsZSkuCgpUdWUgQXVnICA1IDIwOjE2OjIyIDE5OTcgIFZpY3RvciBTY2huZWlkZXIgPHZpc2NobmVAaWJtLm5ldD4KCgkqIFtsaWJyYXJ5L3dpbmVzdHViLmNdIFtsaWJ0ZXN0L2V4cGFuZC5jXQoJVGhlc2UgcGF0Y2hlcyBsZXQgcGVvcGxlIHBvcnRpbmcgV2luZG93cyBhcHBzIGNvbXBpbGUgdGhlbSB1c2luZwoJdGhlIHNhbWUgY29udmVudGlvbnMgcmVnYXJkaW5nIGdsb2JhbCBfYXJnYyBhbmQgX2FyZ3YgYXMgdGhvc2Ugb24KCVdpbmRvd3MgQy9DKysgY29tcGlsZXJzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gQXVnICAzIDE0OjAzOjQzIDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2RvY3VtZW50YXRpb24vTWFrZWZpbGUuaW5dCglDcmVhdGUgbGlua3MgZm9yIGZpbGVzIGluY2x1ZGVkIGZyb20gd2luZS50ZXhpbmZvLgoKCSogW3dpbmUubWFuXQoJTW92ZWQgdG8gZG9jdW1lbnRhdGlvbiBkaXIuCgoJKiBbaWYxNjMyL2J1aWx0aW4uY10KCU1hZGUgU1lTVEVNLkRMTCBhbHdheXMgbG9hZGVkIGJ5IGRlZmF1bHQuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXSBbaWYxNjMyL3NpZ25hbC5jXQoJU3BsaXQgc2lnbmFsLmMgaW4gZ2VuZXJpYy9lbXVsYXRvci1zcGVjaWZpYyBwYXJ0cy4KCgkqIFttaXNjL3N5c3RlbS5jXSBbaWYxNjMyL3RodW5rLmNdCglJbXBsZW1lbnRlZCBzeXN0ZW0gdGltZXIgZnVuY3Rpb25zLgoJRml4ZWQgSW5xdWlyZVN5c3RlbSBwYXJhbWV0ZXJzLgoKCSogW21zZG9zL2lvcG9ydHMuY10KCURlZmluZWQgaW5iL291dGIgZnVuY3Rpb25zIHRvIGF2b2lkIGluY2x1ZGluZyBhc20vaW8uaC4KCVVzZSB0aGUgcmlnaHQgaW5zdHJ1Y3Rpb24gZm9yIHdvcmQgYW5kIGR3b3JkIGRpcmVjdCBhY2Nlc3MuCgoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQoJRml4ZWQgQ2FsbFRvMTYgdXNhZ2UuCgpTYXQgQXVnIDIgMTM6MDU6MjMgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJV2hlbiB0ZXh0IGlzIGluc2VydGVkIGludG8gYSBuZXdseSBjcmVhdGVkIGVkaXRsaW5lLCB0aGUgY2FyZXQKCWlzIHBsYWNlZCBhZnRlciB0aGUgdGV4dC4gU2hvdWxkIGJlIHBsYWNlZCBiZWZvcmUgdGhlIHRleHQuIEZpeGVkLgoKCSogW2ZpbGVzL2ZpbGUuY10KCVJlbW92ZWQgT19UUlVOQyBmbGFnIGZyb20gT0ZfV1JJVEUgbW9kZSBpbiBfbG9wZW4zMigpLgoJQWNjb3JkaW5nIHRvIGRvYyBfbG9wZW4oKSBuZXZlciB0cnVuY2F0ZXMgZmlsZXMuCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10gW21pc2MvY29tbS5jXQoJQWRkZWQgc3R1YiBmb3IgRW5hYmxlQ29tbU5vdGlmaWNhdGlvbigpLgoKCSogW21pc2MvdmVyLmNdCglGaXhlZCBwcm9ibGVtIHdpdGggVmVyUXVlcnlWYWx1ZSooKSBydW5uaW5nIG92ZXIgZW5kIG9mIG5hbWUgdGFibGUKCWluIHJhcmUgY2FzZXMuCgoJKiBbbXNkb3MvaW50MjEuY10KCUVuaGFuY2VkIGlvY3RsR2V0RGV2aWNlSW5mbygpIHRvIGNvcnJlY3RseSByZXR1cm4gdGhlIGN1cnJlbnQgZHJpdmUuCgoJKiBbbXVsdGltZWRpYS9qb3lzdGljay5jXSBbd2luZG93cy9tZXNzYWdlLmNdCglBZGRlZCBqb3lzdGljayBzdXBwb3J0ICEhIQoJTmVlZHMgTGludXggPj0gMi4xLjQ1IG9yIGpveXN0aWNrLTAuOC4wLnRhci5nei4KCkZyaSBBdWcgIDEgMTg6MDI6MDkgMTk5NyAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglEZWZpbmUgRHJhd0FuaW1hdGVkUmVjdHMzMi4KCgkqIFtncmFwaGljcy9wYWludGluZy5jXQoJKERyYXdBbmltYXRlZFJlY3RzMzIpOiBDcmVhdGUgc3R1Yi4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglDb3BlIHdpdGggTlVMTCBjbGFzcyBpbiBSZWdRdWVyeUluZm9LZXkzMkEuCgoJKiBbaWYxNjMyL3VzZXIzMi5zcGVjXQoJQWRkIEdldE1lbnVJdGVtSW5mbzMyW0FXXS4KCgkqIFtjb250cm9scy9tZW51LmNdCgkoSW5zZXJ0TWVudTMyQSk6IFVwZ3JhZGUgZmxhZ3MgdG8gOCBoZXgtZGlnaXRzLgoJKE1FTlVFWF9QYXJzZVJlc291cmNlKTogRmlyc3Qgc2hvdCBhdCBpbXBsZW1lbnRhdGlvbi4KCShMb2FkTWVudUluZGlyZWN0MzJBKTogSGFuZGxlIGV4dGVuZGVkIG1lbnVzLgoJKEdldE1lbnVJdGVtSW5mbzMyW0FXXSk6IEZpcnN0IHNob3QgYXQgaW1wbGVtZW50YXRpb24uCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglEZWZpbmUgTUZUXyosIE1GU18qLCBNSUlNXyogbWFjcm9zLiAgRGVmaW5lIE1FTlVJVEVNSU5GT1tBV10KIAlzdHJ1Y3R1cmVzIGFuZCBwb2ludGVycy4KCgkqIFtNYWtlZmlsZS5pbl0KCShldGFncyk6IEFkZCBUQUdTIGFzIHRhcmdldC4KCgkqIFtpZjE2MzIvY29tY3RsMzIuc3BlY10KCVVzZSBXaW5kb3dzIDk1J3Mgb3JkaW5hbHMuICBBZGQgYSBmZXcgbWlzc2luZyBzdHVicy4KClRodSBKdWwgMzEgMTQ6MDE6MTMgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJRml4IGZvciAxNiBjb2xvciBtb2RlIG9mIFhGcmVlLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVt3aW4zMi9vcmRpbmFscy5jXQoJTW92ZWQvYWRkZWQgc29tZSBvcmRpbmFsIG9ubHkgZXhwb3J0ZWQgZnVuY3Rpb25zIGZyb20ga2VybmVsMzIuZGxsCgkobW9zdGx5IHRodW5raW5nIHByZXBhcmF0aW9uIHN0dWZmKS4KCldlZCBKdWwgMzAgMDk6MTY6MzggMTk5NyAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jXSBbaW5jbHVkZS93aW4xNmRydi5oXQogICAgICAgIEVzY2FwZShTRVRBQk9SVFBST0MpIHJldHVybnMgc3VjY2VzcyB0byBrZWVwIHBicnVzaC5leGUgaGFwcHkuCiAgICAgICAgRXNjYXBlKE5FWFRCQU5EKSBpbXBsZW1lbnRlZCB0byBtYWtlIEhQIFBDTCBwcmludGVyIGRyaXZlciB3b3JrIGluCiAJd29yZC4gIFN0dWIgZm9yIFBBVEJMVCBhZGRlZCB0byBzdGFydCB3b3JrIG9uIHByaW50aW5nIG1vcmUgdGhhbgogCXRleHQuCgpNb24gSnVsIDI4IDEzOjE0OjI4IDE5OTcgIFZpY3RvciBTY2huZWlkZXIgPHZpc2NobmVAaWJtLm5ldD4KCgkqIFtsaWJ0ZXN0L2V4cGFuZC5jXQoJTmV3IFdpbmVsaWIgdGVzdCBwcm9ncmFtLgoKV2VkIEp1bCAyMyAwOTozNzoxMyAxOTk3ICBBZHJpYW4gSGFydmV5IDxhZHJpYW5Ac2VsZWN0LmNvbS5hdT4KCgkqIFt0b29scy9idWlsZC5jXSBbdG9vbHMvYnVpbGQtc3BlYy50eHRdIFtpZjE2MzIva2VybmVsLnNwZWNdCgkgIFtpZjE2MzIvdXNlci5zcGVjXQoJQWRkZWQgYWJpbGl0eSB0byBzZXQgZmlsZW5hbWUgd2luZSBjb25zaWRlcnMgdGhlIGJ1aWx0LWluIERMTHMgCgl0byBiZSBpbiAgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gbmFtZS5ETEwgd2l0aCBuZXcgImZpbGUiIGtleQoJaW4gLnNwZWMgZmlsZXMuCglNYWRlIGtlcm5lbCBmaWxlbmFtZSBLUk5MMzg2LkVYRSAoc29tZSBwcm9ncmFtcyB1c2UgdGhpcyBuYW1lIAoJZXhwbGljaXRseSAtIENoZW1PZmZpY2UgaW5zdGFsbCBub3cgc3RhcnRzIHVwKS4KCU1hZGUgdXNlciBmaWxlbmFtZSBVU0VSLkVYRSAoanVzdCB0byBiZSB0aWR5KS4KClN1biBKdWwgMjAgMjM6NTE6MDIgMTk5NyAgRGF2aWQgQS4gQ3V0aGJlcnQgPGRhY3V0QGhlbnJ5LmVjZS5jbXUuZWR1PgoKCSogW2NvbnRyb2xzL21lbnUuY10gW21pc2MvdHdlYWsuY10gW2luY2x1ZGUvdHdlYWsuaF0KCUZpeGVkIE1FTlVfS2V5TGVmdCBhbmQgTUVOVV9LZXlSaWdodCB0byBoYW5kbGUgbXVsdGlwbGUtY29sdW1uCgltZW51cy4gIE1pc2MgbWVudSBkcmF3aW5nIGlzc3VlcyBmb3IgV2luOTUgdHdlYWtzIGZpeGVkLiAgTWlzYwoJd2FybmluZ3MgZml4ZWQuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJU3BhY2VzIGFyZSBub3cgcGVybWl0dGVkIGluIGZpbGUvcGF0aCBuYW1lcyBvbiB0aGUgY29tbWFuZCBsaW5lLgoJSWYgbXVsdGlwbGUgbWF0Y2hlcyBjYW4gYmUgbWFkZSwgdGhlIHByZWZlcnJlZCBtYXRjaCBpcyB0aGUKCXBhdGgvZmlsZSB3aXRoIGZld2VyIHNwYWNlcy4KClR1ZSBKdWwgMjkgMDI6MjE6MTUgMTk5NyAgQnJ1Y2UgTWlsbmVyIDxCcnVjZS5NaWxuZXJAZ2VuZXRpY3MudXRhaC5lZHU+CgoJKiBbbWlzYy9jb21wb2JqLmNdCglBZGRlZCBDTFNJREZyb21TdHJpbmcgYW5kIFN0cmluZ0Zyb21DTFNJRC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IEp1bCAxOSAxMzowMzowMSAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFt0b29scy9idWlsZC5jXSBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdCglTYXZlIHRoZSBjb21wbGV0ZSAlZWJwIHJlZ2lzdGVyIGluIENhbGxGcm9tMTY7IGZpeGVzIGEgY3Jhc2ggd2l0aAoJTGFiVmlldyByZXBvcnRlZCBieSBBbmRyZWFzIE1vaHIuCgoJKiBbbG9hZGVyL21haW4uY10KCUF2b2lkIGV4ZWN1dGluZyBhIGJ1aWx0LWluIERMTC4KCgkqIFtjb250cm9scy9zdGF0aWMuY10KCUNvbnZlcnRlZCBzdGF0aWMgd2luZG93IHByb2NlZHVyZSB0byBXaW4zMi4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3MvcXVldWUuY10gW2luY2x1ZGUvcXVldWUuaF0KCUhhY2tlZCBTZW5kTWVzc2FnZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBpbnRlci10YXNrIG1lc3NhZ2VzIHdpdGgKCVNlbmRNZXNzYWdlMzJBL1cuCgpTdW4gSnVsIDEzIDE2OjU1OjM1IDE5OTcgIEJlcm5oYXJkIFJvc2Vua3JhZW56ZXIgPGJlcm9AYmVyby1vbmxpbmUubWwub3JnPgoKCSogW2lwYy9iaXRfYXJyYXkuY10KCURvbid0IHVzZSBiaXRvcHMuaCBpbiBMaW51eCAyLjEueCAodGhlc2UgdmVyc2lvbnMgZG8gbm90IHJldHVybgoJdGhlIHByZXZpb3VzIHN0YXRlIGZvciBjbGVhcl9iaXQgYW5kIHNldF9iaXQpCgoJKiBbaXBjL3NobV9tYWluX2Jsay5jXQoJQWRhcHQgdG8gR0xJQkMncyBpcGNfcGVybSBzdHJ1Y3R1cmUuCgoJKiBbbWVtb3J5L2xkdC5jXQoJSW5jbHVkZSA8YXNtL3VuaXN0ZC5oPiBvbiBMaW51eC9HTElCQyBzeXN0ZW1zIChyZXF1aXJlZCBmb3IKCV9zeXNjYWxsMykuCgpXZWQgSnVsIDkgMjM6NTM6MTkgMTk5NyAgRGF2aWQgQS4gQ3V0aGJlcnQgIDxkYWN1dEBoZW5yeS5lY2UuY211LmVkdT4KCgkqIFtpbmNsdWRlL29wdGlvbnMuaF0gW2ZpbGVzL3Byb2ZpbGUuY10KCUFkZGVkIFBST0ZJTEVfR2V0V2luZUluaUJvb2wgYW5kIFBST0ZJTEVfRW51bWVyYXRlV2luZUluaVNlY3Rpb24uCgoJKiBbaW5jbHVkZS9zeXNtZXRyaWNzLmhdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW3dpbmRvd3Mvc3lzbWV0cmljcy5jXQoJQWxsIHN5c21ldHJpY3MgbW92ZWQgdG8gYXJyYXkgKG5vIG1vcmUgY29uc3RhbnQgbWFjcm9zKS4gIEFkZGVkCglNT1VTRVdIRUVMUFJFU0VOVCBtZXRyaWMuCgoJKiBbaW5jbHVkZS9iaXRtYXAuaF0gW29iamVjdHMvb2VtYml0bWFwLmNdCglBZGRlZCBPQk1fSW5pdCgpIChzZWUgYWxzbyBsb2FkZXIvbWFpbi5jKSBhbmQgbW9yZSBzdXBwb3J0IGZvciBXaW45NQoJYml0bWFwczsgYWRkZWQgc2l6ZSBpbmZvIHRvIE9FTSBiaXRtYXBzLgoKCSogW2luY2x1ZGUvZ3JhcGhpY3MuaF0gW3dpbmRvd3MvZ3JhcGhpY3MuaF0KCUFkZGVkIEdSQVBIX0RyYXdHZW5lcmljUmVsaWVmUmVjdC4KCgkqIFtsb2FkZXIvbWFpbi5jXQoJQWRkZWQgVFdFQUtfSW5pdCgpIGFuZCBUV0VBS19DaGVja0NvbmZpZ3VyYXRpb24oKSBjYWxscyAodGhlCglsYXR0ZXIgY2hlY2tzIGZvciBpbnZhbGlkIGVudHJpZXMgaW4gd2luZS5jb25mKS4KCgkqIFtpbmNsdWRlL2RlYnVnLmhdIFtpbmNsdWRlL3N0ZGRlYnVnLmhdIFtpbmNsdWRlL25vbmNsaWVudC5oXQoJICBbaW5jbHVkZS90d2Vhay5oXSBbY29udHJvbHMvbWVudS5jXSBbbWlzYy90d2Vhay5jXQoJICBbb2JqZWN0cy9nZGlvYmouY10gW3dpbmRvd3Mvc3lzY29sb3IuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCgkgIFtCVUdTXSBbZG9jdW1lbnRhdGlvbi93aW45NWxvb2tdCglBZGRlZCB0d2Vha3MgZm9yIFdpbmRvd3MgOTUgaW50ZXJmYWNlIHN1cHBvcnQuICBTZWUKIAlkb2N1bWVudGF0aW9uL3dpbjk1bG9vayBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCgkqIFtjb250cm9scy9lZGl0LmNdCglGaXhlZCBFRElUX01vdmVIb21lIGJ1Zy4KCgkqIFttaXNjL3Zlci5jXQoJQ2hhbmdlZCBuYW1lIG9mIGRwcmludGZfdmVyX3N0cmluZyB0byB2ZXJfZHN0cmluZyB0byBmaXgKCXByb2JsZW0gd2l0aCB0b29scy9tYWtlX2RlYnVnIHV0aWxpdHkuCgpXZWQgSnVsIDkgMjE6MzE6NTQgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbb2JqZWN0cy9kaWIuY10KCURvbid0IHVzZSBwYWxldHRlcyB3aXRoIGRpYnMgd2l0aCBiaUJpdENvdW50ID4gOC4KCgkqIFttaXNjL29sZTJubHMuY11bbWlzYy92ZXIuY10KCUlzVmFsaWRMb2NhbGUsIEVudW1TeXN0ZW1Mb2NhbGVzIGZpeGVkICh3aW5obHAzMi5leGUgd29ya3MpCglTb21lIFZlckxhbmd1YWdlIGNvZGVkIG1vdmVkIHRvIG9sZTJubHMuYywgc29tZSBjbGVhbnVwcy4KCgkqIFttdWx0aW1lZGlhL21jaXN0cmluZy5jXQoJRml4ZWQgImNhcGFiaWxpdGllcyA8ZGV2PiBkZXZpY2UgdHlwZSIgY3Jhc2ggKGNvb2wuZXhlKS4KCgkqIFttaXNjL21haW4uY10KCVN5c3RlbVBhcmFtZXRlcnNJbmZvKjogYWRkZWQgc3R1YiBvcHRpb24gNDEKCShHRVROT05DTElFTlRNRVRSSUNTKSwgZHVwbGljYXRlZCBzb21lIHN0dWZmIGF3YXkgZnJvbSBTUEkxNgoJdGhhdCB3cml0ZXMgMzJiaXQgdmFycy4ob25lIENPTUNUTDMyLkRMTCBjcmFzaCwgZnJlZWNlbGwuZXhlKQoKVHVlIEp1bCAgOCAyMjo0MDo1MyAxOTk3ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgoKCSogW2lmMTYzMi9zaGVsbDMyLnNwZWNdCglVc2UgV2luZG93cyA5NSdzIG9yZGluYWxzLiBIZWxwIHdhbnRlZCwgaW5xdWlyZSB3aXRoaW4uCgpNb24gSnVsICA3IDExOjIwOjM2IDE5OTcgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpZjE2MzIvdXNlci5zcGVjXSBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJICBbdG9vbHMvYnVpbGQtc3BlYy50eHRdIFt0b29scy9idWlsZC5jXQoJQWRkZWQgdHlwZSAnc2Vnc3RyJyAoc2VnbWVudGVkIHBvaW50ZXIgdG8gbnVsbC10ZXJtaW5hdGVkIHN0cmluZykKCXRvIC5zcGVjIGZpbGVzLgoKCSogW3dpbmRvd3MvdXNlci5jXSBbaWYxNjMyL3VzZXIuc3BlY10KCUV4aXRXaW5kb3dzRXhlYyBzdHViIGZ1bmN0aW9uIGFkZGVkLgoKTW9uIEp1bCAgNyAwMToxODoyNSAxOTk3ICBVLiBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnRoLWRhcm1zdGFkdC5kZT4KCgkqIFtmaWxlcy9maWxlLmNdIFtpbmNsdWRlL3dpbmJhc2UuaF0gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJSW1wbGVtZW50IE1vdmVGaWxlRXgzMiwgc29tZSBlbmhhbmNlbWVudCBmb3IgTW92ZWZpbGUzMi4KClNhdCBKdWwgIDUgMTg6MTM6NDggMTk5NyAgQnJ1Y2UgTWlsbmVyIDxCcnVjZS5NaWxuZXJAZ2VuZXRpY3MudXRhaC5lZHUuCgoJKiBbZmlsZXMvZmlsZS5jXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpbmNsdWRlL3dpbmVycm9yLmhdCiAgICAgICAgICBbbXNkb3MvaW50MjEuY10gW3dpbjMyL2ZpbGUuY10KCUFkZCBMb2NrRmlsZS9VbmxvY2tGaWxlIGltcGxlbWVudGF0aW9uLgoJQWRkIGJhY2sgaW4gaW50MjEgZnVuYygweDVjKSBSZWNvcmQgbG9ja2luZyBmdW5jdGlvbnMuCgoJKiBbZmlsZXMvZmlsZS5jXQoJRml4ZWQgYnVnIHdpdGggT0ZfUkVPUEVOIGluIEZJTEVfRG9PcGVuRmlsZS4KCkZyaSBKdWwgNCAxMjowMDowMCAxOTk3ICBIZW5yaWsgT2xzZW4gPEhlbnJpay5PbHNlbkBpYWVzdGUuZGs+CgoJKiBbbWlzYy9vbGUybmxzLmNdIFtwcm9ncmFtcy9wcm9nbWFuL0RhLnJjXSBbcHJvZ3JhbXMvd2luaGVscC9EYS5yY10KCSAgW3Jlc291cmNlcy9zeXNyZXNfRGEucmNdCglBZGRlZC91cGRhdGVkIERhbmlzaCBsYW5ndWFnZSBzdXBwb3J0LgoKVGh1IEp1bCAgMyAxMzowNDoyMCAxOTk3ICBDbGF1cyBGaXNjaGVyICA8ZmlzY2hlckBpdWUudHV3aWVuLmFjLmF0PgoKCSogW2ZpbGVzL2Rvc19mcy5jXQoJUHJvcGVybHkgaW1wbGVtZW50ZWQgRE9TRlNfVW5peFRpbWVUb0ZpbGVUaW1lIGFuZAoJRE9TRlNfRmlsZVRpbWVUb1VuaXhUaW1lLgoKCSogW2RvY3VtZW50YXRpb24vd2luZS50ZXhpbmZvXQoJRmlyc3QgdmVyc2lvbiBvZiB0ZXhpbmZvIGRvY3VtZW50YXRpb24uCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBKdW4gMjYgMDI6MTQ6MDMgMTk5NyAgU2xhdmVuIFJlemljICA8ZXNlcnRlQGNzLnR1LWJlcmxpbi5kZT4KCgkqIFtNYWtlZmlsZS5pbl0KCU5ldyB0YXJnZXQgaW5zdGFsbF9pbmNsdWRlcy4KCgkqIFtyYy9wYXJzZXIuaF0gW3JjL3BhcnNlci55XSBbcmMvd2luZXJjLmNdCglTb21lIGJ1ZyBmaXhlcy4KCldlZCBKdW4gMjUgMTQ6NDM6NDEgMTk5NyAgVmljdG9yIFNjaG5laWRlciA8dmlzY2huZUBpYm0ubmV0PgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUZpeGVkIFdNX0dFVFRFWFQgcmV0dXJuIHZhbHVlLgoKVHVlIEp1biAyNCAyMzo0NjowNCAxOTk3ICBNaWNoaWVsIHZhbiBMb29uIDxtZnZsQHhzNGFsbC5ubD4KCgkqIFttdWx0aW1lZGlhLyouY10gW2luY2x1ZGUvbW1zeXN0ZW0uaF0KCUFkZGVkIG1vcmUgY2FsbGJhY2sgY29kZSwgaW5jbHVkaW5nIChJIGhvcGUpIGZ1bmN0aW9uIGNhbGxiYWNrLgoJQ2hhbmdlZCBzb21lIGxpbmVhciBwb2ludGVycyBpbnRvIHNlZ21lbnRlZC4KCgkqIFttdWx0aW1lZGlhL2F1ZGlvLmNdCglSZW1vdmVkIHNvbWUgYnVncy4KClNhdCBKdW4gMjggMTE6Mzc6NTYgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaWYxNjMyL2NvbW1kbGcuc3BlY11baWYxNjMyL2NvbWRsZzMyLnNwZWNdW21pc2MvY29tbWRsZy5jXQoJICBbaW5jbHVkZS9jb21tZGxnLmhdCglJbXBsZW1lbnRlZCBwYXJ0cyBvZiBjb21kbGczMjogR2V0T3BlbkZpbGVOYW1lMzIqLAoJR2V0U2F2ZUZpbGVOYW1lMzIqLCBHZXRGaWxlVGl0bGUzMiogdXNpbmcgdGhlIDE2IGJpdCBlcXVpdmFsZW50cy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglFVkVOVF9RdWVyeVpPcmRlcjogY2hlY2sgZm9yIGNoaWxkcmVuICE9TlVMTCAoaGFwcGVucyB3aGVuCgl1c2luZyAtbWFuYWdlZCkuCgoJKiBbQlVHU11bREVWRUxPUEVSLUhJTlRTXQoJVXBkYXRlZC4KCgkqIFtvYmplY3RzL3RleHQuY10KCUFkZGVkIEdldFRleHRDaGFyc2V0Li4uIChzdHViIG1vc3RseSkuCgpTYXQgSnVuIDIxIDA4OjQ3OjU4IDE5OTcgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaWYxNjMyL2dkaS5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdCgkgIFtsb2FkZXIvcmVzb3VyY2UuY10gW2dyYXBoaWNzL3gxMWRydi94Zm9udC5jXQoJU2V0UmVzb3VyY2VIYW5kbGVyICYgUmVtb3ZlRm9udFJlc291cmNlIHByb3RvdHlwZXMgZml4ZWQuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpZjE2MzIvdXNlci5zcGVjXQoJICBbaWYxNjMyL29sZXN2ci5zcGVjXSBbaWYxNjMyL2NvbW1kbGcuc3BlY10gW2lmMTYzMi9kZGVtbC5zcGVjXQoJICBbaWYxNjMyL2dkaS5zcGVjXSBbaWYxNjMyL2x6ZXhwYW5kLnNwZWNdIFtpZjE2MzIvc2hlbGwuc3BlY10KCSAgW2luY2x1ZGUvd2luZG93cy5oXSBbbWVtb3J5L3N0cmluZy5jXSBbdG9vbHMvYnVpbGQuY10KCU5ldyB0eXBlIG9mIHBhcmFtZXRlciBhbGxvd2VkIGluIC5zcGVjIGZpbGVzIDogc3RyLCBwcmludGVkCglhcyBhIHN0cmluZyB3aXRoIC1kZWJ1Z21zZyArcmVsYXkuIC5zcGVjIGZpbGVzIHVwZGF0ZWQuCgoJKiBbb2JqZWN0cy9kYy5jXQoJSW4gRENfU2V0dXBHQ0ZvclBlbiwgY2FsbCBCbGFja1BpeGVsT2ZTY3JlZW4sIG5vdCBCbGFja1BpeGVsLgoJTGlrZXdpc2UgZm9yIFdoaXRlUGl4ZWwuCgoJKiBbb2JqZWN0cy9nZGlvYmouY10gW2dyYXBoaWNzL3gxMWRydi9icnVzaC5jXQoJVXNlIEJTX0hBVENIRUQgd2l0aCBhbiBhZGRlZCBlbnRyeSBpbiBIYXRjaEJydXNoZXMgZm9yIERrR3JheUJydXNoLAogCWluc3RlYWQgb2YgQlNfU09MSUQuCgpGcmkgTWF5IDMwIDE3OjU4OjAwIDE5OTcgIENocmlzIEZhaGVydHkgPGNocmlzZkBhbWVyaWNhLmNvbT4KCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdCglBZGRlZCB2a2V5IHRvIHNjYW5jb2RlIHRyYW5zbGF0aW9uIHRhYmxlLgoJVGhpcyB3YXMgcHJpbWFyaWx5IHRvIGZpeCBDaXRyaXggV2luRnJhbWUgY2xpZW50IHdoaWNoCglhbHdheXMgbmVlZHMgc2NhbmNvZGVzIGluIFdNX0tFWURPV04uCglUZXN0ZWQgd2l0aCBFeGNlZWQgNS4xLjAuMSAmIFhGcmVlODYgMy4xLjIuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBKdW4gMTQgMTM6MDU6MjMgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbaW5jbHVkZS9tbXN5c3RlbS5oXQoJQXZvaWRlZCBpbmZpbml0ZSBsb29wIGluIGF1ZGlvIGNvZGUgd2hlbiBhY2Nlc3NpbmcKIAlXQVZFT1VUQ0FQUy9XQVZFSU5DQVBTL01JRElPVVRDQVBTL0FVWENBUFMgd2l0aCByaWdpZCB2YXJpYWJsZQogCW9mZnNldHMgKEkgYXBwbGllZCBXSU5FX1BBQ0tFRCkuCgoJKiBbKi8qXQoJQWRkZWQgIldBUk5JTkc6IiBhbmQgIkVSUk9SOiIgdG8gc29tZSBwcmludGYncy4KCUp1c3QgZ3JlcCBmb3IgdGhlbSB3aXRoICctZGVidWdtc2cgK2FsbCcuCgoJKiBbbXVsdGltZWRpYS9hdWRpby5jXSBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQoJSW1wbGVtZW50ZWQgd2F2ZSBjYWxsYmFja3M6IHdpbmRvdyBhbmQgZnVuY3Rpb24gY2FsbGJhY2suCglGaXhlZCBwcm9ibGVtIHdpdGggV0FWRV9Ob3RpZnlDbGllbnQoKS4KCU1pc2MgZml4ZXMuCgoJKiBbd2luZG93cy93aW5oZWxwLmNdCglGaXhlZCBwcm9ibGVtIHdpdGggd2luZG93cyBoZWxwIHRlbGxpbmcgIkhlbHAgdG9waWMgZG9lc24ndCBleGlzdCIuCglCdXQgdGhpcyBwcm9ibGVtIHN0aWxsIHJlbWFpbnMgd2hlbiB1c2luZyBXaW53b3JkLgoKV2VkIEp1biAxMSAwOToxNDoyMCAxOTk3ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmUuaW5pXQoJTmV3ICdmb250cycgc2VjdGlvbiBmb3JtYXQuIFJlYWQgZG9jdW1lbnRhdGlvbi9mb250cy4KCgkqIFtjb250cm9scy9pY29udGl0bGUuY10gW3dpbmRvd3Mvd2lucG9zLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJICBbd2luZG93cy93aW4uY10gW2luY2x1ZGUvd2luLmhdCglJbXBsZW1lbnRlZCBpY29uIHRpdGxlcy4KCgkqIFtncmFwaGljcy94MTFkcnYveGZvbnQuY10gW29iamVjdHMvZm9udC5jXSBbb2JqZWN0cy9kYy5jXQoJICBbaW5jbHVkZS94MTFkcnYuaF0gW2luY2x1ZGUveDExZm9udC5oXSBbZG9jdW1lbnRhdGlvbi9mb250c10KCVJld3JvdGUgZm9udCBtYXBwZXIgZnJvbSBzY3JhdGNoLgoKCSogW3Rvb2xzL2ZudDJiZGYuY10KCUJ1ZyBmaXhlcy4gUkVQTEFDRSBGT05UUyBDUkVBVEVEIEJZIFRIRSBQUkVWSU9VUyBWRVJTSU9OUy4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCVdvcmQgZG9jdW1lbnQgd2luZG93IGFjdGl2YXRpb24gZml4LgoKCSogW3dpbmRvd3MvbWRpLmNdIFt3aW5kb3dzL3dpbi5jXQoJUmVwbGFjZWQgV0NMIGxpc3RzIHdpdGggV0lOX0J1aWxkV2luQXJyYXkoKS4KCk1vbiBKdW4gIDkgMjM6NTE6MTYgMTk5NyAgQW5kcmV3IFRheWxvciA8YXRheWxvckBjYWR2aXNpb24uY29tPgoKCSogW21pc2MvZXJyb3IuY10gW2luY2x1ZGUvd2luZG93cy5oXSBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJSW1wbGVtZW50ZWQgTG9nUGFyYW1FcnJvciwgTG9nRXJyb3IgZnVuY3Rpb25zLgoKVHVlIEp1biAgMyAyMzo0NjowNCAxOTk3ICBNaWNoaWVsIHZhbiBMb29uIDxtZnZsQHhzNGFsbC5ubD4KCgkqIFtpbmNsdWRlL21tc3lzdGVtLmhdIFttdWx0aW1lZGlhL2F1ZGlvLmNdCglDb25zdGFudHMgZm9yIGFzeW5jaHJvbm91cyBwbGF5IGFuZCByZWNvcmQuCgoJKiBbbXVsdGltZWRpYS90aW1lLmNdCglGaWxsZWQgaW4gc29tZSBlbXB0eSBmdW5jdGlvbnMuCgoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQoJRml4ZWQgYnVncyBpbiB3YXZlT3V0T3Blbi4KCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdIFttdWx0aW1lZGlhL2F1ZGlvLmNdCglJbXBsZW1lbnRlZCBXaW5kb3cgQ2FsbGJhY2sgZm9yIHdhdmUgb3V0cHV0IGF0IGxlYXN0LgoKCSogW2ZpbGVzL2ZpbGUuY10KCUNvcnJlY3RlZCBidWcgaW4gRmlsZURvc1NldEVycm9yLgoJTlVMTCBwb2ludGVyIGNoZWNraW5nIGFkZGVkLgoKCSogW21pc2Mvc3B5LmNdCglBZGRlZCBNdWx0aW1lZGlhIG1lc3NhZ2VzIHRvIFNQWV9HZXRNc2dOYW1lLgoKVHVlIEp1biAzIDIyOjM0OjMwIDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2RlYnVnZ2VyLyouY11baW5jbHVkZS9wZWV4ZS5oXVtsb2FkZXIvKi5jXVt0b29scy9idWlsZC5jXQoJICBbdG9vbHMvZm50MmJkZi5jXVtsaWJyYXJ5L3N1cC5jXQoJSU1BR0VfKiBzdHJ1Y3RzL2RlZmluZXMgY2hhbmdlZCBmaXQgYmV0dGVyIHRvIFNESyBuYW1pbmcKCURvbid0IGxvYWQgbm9uLWkzODYgUEUgZXhlY3V0YWJsZXMuCgklZnMgc2hvdWxkIGFscmVhZHkgYmUgaW5pdGlhbGlzZWQgZm9yIHRoZSBGSVJTVCBsb2FkZWQgUEUgbW9kdWxlLgoKCSogW2lmMTYzMi9hZHZhcGkuc3BlY11bd2luMzIvYWR2YXBpLmNdCglTb21lIHNtYWxsIHN0dWJzIGFkZGVkIHRvIGJyaW5nIHdpbjMyIHNldHVwLmV4ZSBhIGJpdCBmYXJ0aGVyLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVtzY2hlZHVsZXIvcHJvY2Vzcy5jXQoJQWRhcHRlZCB0byBtYXRjaCB3aW45NSBrZXJuZWwzMi5kbGwgb3JkaW5hbHMgKE5UIGRvZXNuJ3QgdXNlCiAJb3JkaW5hbCBpbXBvcnQpLCBzb21lIG9yZGluYWwgb25seSBleHBvcnRlZCBmdW5jdGlvbnMgYWRkZWQuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglBZGRlZCBDYWxsUHJvYzMyVy4KCgkqIFttaXNjL2x6ZXhwYW5kLmNdCglGaXhlZCByZXR1cm4gdmFsdWVzIG9mIEdldEV4cGFuZGVkTmFtZSogKHRoYW5rcyB0byBBbmRyZWFzIE1vaHIpLgoKCSogW29iamVjdHMvZGliLmNdCglFdmVyeXRoaW5nIHdpdGggbW9yZSB0aGFuIDggYml0IG9mIGNvbG9yIGlzIGEgdHJ1ZWNvbG9yIG1vZGUKCWFuZCBkb2Vzbid0IGhhdmUgYSBjb2xvcm1hcC4KClR1ZSBKdW4gIDMgMDk6MjQ6NTMgMTk5NyAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbZ3JhcGhpY3Mvd2luMTZkcnYvZm9udC5jXSBbZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jXQoJICBbZ3JhcGhpY3Mvd2luMTZkcnYvcHJ0ZHJ2LmNdIFtncmFwaGljcy93aW4xNmRydi90ZXh0LmNdCgkgIFtpbmNsdWRlL3dpbjE2ZHJ2LmhdCglDaGFuZ2VkIHNvbWUgc3RydWN0dXJlcyB0aGF0IGFyZSBwYXNzZWQgdG8gYW5kIGZyb20gdGhlIDE2IGJpdAogCWRyaXZlcnMgdG8gYmUgYWxsb2NhdGVkIG9uIHRoZSBnbG9iYWwgaGVhcC4KCUltcGxlbWVudGVkIEVzY2FwZShDb250cm9sKSAweDEwMCBHZXRFeHRUZXh0RGF0YSBwcm9wZXJseSB0bwoJc3RvcCB3b3JkIGZyb20gY3Jhc2hpbmcuCglQb3N0c2NyaXB0IGRyaXZlciBub3cgcHJpbnRzIG9uIGNvbXBsZXRlIHBhZ2UgaW5zdGVhZCBvZiB0b3AKCWxlZnQgY29ybmVyLgoJUHJpbnQgc3Bvb2xpbmcgaW1wbGVtZW50ZWQuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJTU9EVUxFX0dldE9yZGluYWwgY2hhbmdlZCBjaGFyIGJ1ZmZlciB0byB1bnNpZ25lZCBjaGFyIHRvIHN0b3AKCWEgbG9vcCB0aGF0IHdhcyBoYXBwZW5pbmcgd2hlbiBydW5uaW5nIHRoZSBmb250IGNvbnRyb2wKCXByb2dyYW0gZnJvbSB0aGUgY29udHJvbCBwYW5lbC4KClN1biBKdW4gIDEgMTk6MDU6MDIgMTk5NyAgUGV0ZXIgU2NobGFpbGUgPHVwOW5AcnoudW5pLWthcmxzcnVoZS5kZT4KCgkqIFtpbmNsdWRlL21pc2NlbXUuaF0gW2xvYWRlci9tYWluLmNdIFttc2Rvcy9pb3BvcnRzLmNdCglBZGRlZCBzdXBwb3J0IGZvciBkaXJlY3QgaW8gcG9ydCBhY2Nlc3MuCgpGcmkgTWF5IDMwIDE2OjE4OjM1IDE5OTcgIERhdmlkIEEuIEN1dGhiZXJ0IDxkYWN1dEBkc3NjMzM1My5lY2UuY211LmVkdT4KCgkqIFttaXNjL3Zlci5jXQoJSW1wbGVtZW50ZWQgVmVyRmluZEZpbGUxNi4KClR1ZSBNYXkgMjcgMjI6MDA6MzkgMTk5NyAgUmljayBSaWNoYXJkc29uIDxyaWNrQGRnaWkuY29tPgoKCSogW21pc2MvY29tbS5jXQoJRml4ZWQgR2V0Q29tbUVycm9yIGFuZCBHZXRDb21tRXZlbnRNYXNrLgoKVHVlIE1heSAyNyAgOToxMDo1MyAxOTk3ICBHZW9yZyBCZXllcmxlIDxnYmV5ZXJsZUBhd2ktcG90c2RhbS5kZT4KCgkqIFtzY2hlZHVsZXIvdGhyZWFkLmNdCglNaW5vciBmaXggaW4gdGhyZWFkIGRhdGFiYXNlIGluaXRpYWxpemF0aW9uLgoKTW9uIE1heSAyNiAxOTo0NjozNCAxOTk3ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW29iamVjdHMvZGMuY10KCUluIERDX1NldHVwR0NGb3JQZW4sIGF2b2lkIHRvIGRyYXcgaW4gR1h4b3IgbW9kZSB3aXRoIGEgMCBtYXNrLgoKTW9uIE1heSAyNiAxNToyMjo0MiAxOTk3ICBCcnVjZSBNaWxuZXIgPEJydWNlLk1pbG5lckBnZW5ldGljcy51dGFoLmVkdT4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUFkZCBjb2RlIGZvciBtb2R1bGVzIHRoYXQgY28tcmVmZXJlbmNlIGVhY2ggb3RoZXIuIFBob3RvZGV4J3MKCWFnZHMuZXhlIChjcGljMzIpIGhhcyB0d28gZGxsJ3MgdGhhdCBtYWtlIGNhbGxzIGludG8gZWFjaCBvdGhlci4KCk1vbiBNYXkgMjYgMTM6Mzg6MTYgMTk5NyAgSm9keSBHb2xkYmVyZyA8am9keWdAaWR0Lm5ldD4KCgkqIFttZW1vcnkvdmlydHVhbC5jXQoJRG9udCB1c2Ugc3RkaW8gd2hlbiByZWFkaW5nIC9wcm9jL3NlbGYvbWFwcy4gIEl0IGNhdXNlcyBwcm9ibGVtcwoJd2l0aCBsaWJjNi4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJVHJhbnNsYXRlIG1lc3NhZ2VzIGluIElzRGlhbG9nTWVzc2FnZSB3aGVuIERMR0NfV0FOVE1FU1NBR0UKCWlzIHVzZWQuCgpTdW4gTWF5IDI1IDE3OjAyOjIxIDE5OTcgIEh1dyBEIE0gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJUmVzb3VyY2UgY2xlYW51cCBpbiBFbnVtTWV0YUZpbGUoKS4gVGhpcyB3YXMgb25lIHJlYXNvbiBXb3JkIHdhcwoJY3Jhc2hpbmcgYWZ0ZXIgbG9uZyBwZXJpb2RzIG9mIHVzZS4gKFRoYW5rcyB0byBDaHJpcyBVbmRlcmhpbGwgZm9yCgl0aGUgbG9ncykKClN1biBNYXkgMjUgMTQ6NTk6MzMgMTk5NyAgSmltZW4gQ2hpbmcgIDxqY2hpbmdAZmxleC5jb20+CgoJKiBbbXVsdGltZWRpYS9tY2lzdHJpbmcuY10KCUluaXRpYWwgc3VwcG9ydCBmb3IgY29tcG91bmQgTUNJIGNvbW1hbmRzLgoJVXNlIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyZSBmb3IgJ2FsaWFzJyBhbmQgJ2VsZW1lbnQnIGtleXdvcmRzLgoJRml4ZWQgcG9pbnRlciBjb3B5IG9mIGFyZ3Mga2V5d29yZHMgYXJyYXkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBNYXkgMjAgMTk6MjA6MjMgMTk5NyAgUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuYWxwaGFuZXQuY2g+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Fcy5yY10KCVVwZGF0ZWQgQ0hPT1NFX0ZPTlQsIENIT09TRV9DT0xPUiwgRURJVE1FTlUgZm9yIFNwYW5pc2guCgpNb24gTWF5IDE5IDIyOjA2OjA0IDE5OTcgIE1pY2hpZWwgdmFuIExvb24gPG1mdmxAeHM0YWxsLm5sPgoKCSogW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdCglDb3JyZWN0ZWQgYnVnIGZvciBkZXZpY2UhZWxlbWVudCBjb21tYW5kLgoKCSogW211bHRpbWVkaWEvbW1hdXguY10KCVJlcGxhY2VkIHByaW50ZiBhbmQgZnByaW50ZiBjYWxscyBieSBkcHJpbnRmX21tYXV4LgoKCSogW211bHRpbWVkaWEvYXVkaW8uY10KCUNvcnJlY3RlZCBkZWJ1Z21lc3NhZ2UgaW4gd29kR2V0Vm9sdW1lLgoJSW5jbHVkZSBjb2RlIGZvciBNQ0lfQ1VFIGNvbW1hbmQuCgoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQoJQWRkZWQgdGhlIE1DSUVSUl9TRVEgZXJyb3IgbWVzc2FnZXMuCgoJKiBbaWYxNjMyL21tc3lzdGVtLnNwZWNdIFttdWx0aW1lZGlhL2F1ZGlvLmNdIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCglDaGFuZ2VkIGNhbGwgc3RydWN0dXJlIG9mIHdhdmVJbk9wZW4gYW5kIHdhdmVPdXRPcGVuLgoKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10gW211bHRpbWVkaWEvYXVkaW8uY10gW211bHRpbWVkaWEvbWlkaS5jXQoJICBbbXVsdGltZWRpYS9tbWF1eC5jXSBbbXVsdGltZWRpYS9tY2ljZGEuY10gW211bHRpbWVkaWEvbWNpYW5pbS5jXQoJICBbbXVsdGltZWRpYS9tY2lzdHJpbmcuY10gW2luY2x1ZGUvbW1zeXN0ZW0uaF0KCUNoYW5nZWQgdGhlIGRldmljZUlEIHNjaGVtZS4KCgkqIFtpbmNsdWRlL3F1ZXVlLmhdIFtpbmNsdWRlL3dpbjE2ZHJ2LmhdIFttc2Rvcy9kcG1pLmNdCgkgIFt3aW5kb3dzL3VzZXIuY10gW3dpbmRvd3MvZHJpdmVyLmNdIFtncmFwaGljL3dpbmcuY10KCSAgW2dyYXBoaWNzL3gxMWRydi9iaXRtYXAuY10gW21pc2Mvd3NwcmludGYuY10gW21pc2MvY3J0ZGxsLmNdCglSZW1vdmVkIGNvbXBpbGVyIHdhcm5pbmdzLgoKTW9uIE1heSAxOSAwMTozMjoyNCAxOTk3ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW2NvbnRyb2xzL21lbnUuY10gW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglQb3B1cCBtZW51IHNoYWRlLCBuZXcgc3lzdGVtIG1lbnUgaW1wbGVtZW50YXRpb24sIAoJTW9kaWZ5TWVudSgpIGZpeGVzLCBiZXR0ZXIgY2hlY2sgbWFyayBwYWludGluZy4KCgkqIFt3aW5kb3dzL21kaS5jXQoJTURJIGNsaWVudCBmaXggZm9yIFdpbjMyLgoKU2F0IE1heSAxNyAxMjowMjoxMSAxOTk3ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCUFkZGVkIGhhbmRsaW5nIG9mIE1FVEFfRElCQklUQkxULCBNRVRBX1NFVFRFWFRKVVNUSUZJQ0FUSU9OCglwbHVzIGJ1Z2ZpeCBpbiBNRVRBX0VYVFRFWFRPVVQgKHN0YXJ0X29mX3RleHQgZXRjLikKClRodSBNYXkgMTUgMjI6NTI6MDAgMTk5NyAgSmltZW4gQ2hpbmcgIDxqY2hpbmdAZmxleC5jb20+CgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglNYWtlIHN1cmUgZGdyb3VwIGlzIHZhbGlkIGJ5IGNoZWNraW5nIHBNb2R1bGUtPmZsYWdzIGNvbnNpc3RlbnRseS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIE1heSAgNiAxOToxMjoyMCAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtsb2FkZXIvdGFzay5jXSBbbG9hZGVyL21vZHVsZS5jXQoJRml4ZWQgY29tbWFuZCBsaW5lIGluIExvYWRNb2R1bGUgdG8gYWxyZWFkeSBpbmNsdWRlIHRoZSBsZW5ndGgKCWluZGljYXRvciAodGhhbmtzIHRvIEFuZHJlYXMgTW9ocikuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCURsZ0Rpckxpc3Q6IGZpeGVkIGJlaGF2aW9yIHdpdGggRERMX0RSSVZFUyB8IERETF9FWENMVVNJVkUgKHRoYW5rcwoJdG8gQnJ1Y2UgTWlsbmVyIGZvciB0aGlzIG9uZSk7IGNvcnJlY3RseSB1cGRhdGUgZmlsZSBzcGVjIG9uIGV4aXQuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdIFtpZjE2MzIvdGh1bmsuY10gW2luY2x1ZGUvY2FsbGJhY2suaF0KCU1vdmVkIGVtdWxhdG9yLXNwZWNpZmljIGNvZGUgZm9yIGNhbGxpbmcgd2luZG93IHByb2NlZHVyZSB0bwoJdGh1bmsuYy4KCk1vbiBBcHIgMjggMTA6MjE6NTkgMTk5NyAgSHV3IEQgTSBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUJldHRlciBpbXBsZW1lbnRhdGlvbiBvZiBtb3ZlYWJsZSBibG9ja3MgKGZpcnN0IHdvcmQgaW4gYmxvY2sgaXMKCXRoZSBoYW5kbGUgaXRzZWxmKSBhbmQgZGlzY2FyZGVkIGJsb2Nrcy4gTG9jYWwoUmUpQWxsb2MgaXMgbXVjaAoJbW9yZSBsaWtlIHRoZSByZWFsIHRoaW5nLgoKVGh1IEFwciAyNCAxOTo1MDoxOSAxOTk3ICBBbGJyZWNodCBLbGVpbmUgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJQWRkZWQgaGFuZGxpbmcgb2YgbWV0YSByZWNvcmQgTUVUQV9ESUJDUkVBVEVQQVRURVJOQlJVU0guCgpNb24gQXByIDIxIDE0OjAzOjMyIDE5OTcgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXSBbbXVsdGltZWRpYS9hdWRpby5jXQoJRml4ZWQgbGVmdG92ZXIgcHJvYmxlbXMgd2l0aCBtYXNrZWQgZGV2aWNlIElEcy4KCgkqIFttc2Rvcy9pbnQyMS5jXQoJUmVtb3ZlZCBjb2RlIGR1cGxpY2F0aW9ucywgZml4ZWQgV3JpdGUuCgoJKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9kY2UuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCgkgIFt3aW5kb3dzL3dpbnBvcy5jXQoJWWV0IGFub3RoZXIgYXR0ZW1wdCB0byBtYWtlIC1tYW5hZ2VkIHdvcmsgYmV0dGVyLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglVSSBmaXguCgpNb24gQXByIDIxIDEzOjEwOjI0IDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AaW1tZDQuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZGVidWdnZXIvKl0KCUFsbCAiTG9hZGluZyBmcm9tIC4uLiIgbGluZXMgbWVyZ2VkIGludG8gb25lIHNvIGltcG9ydGFudAoJaW5mb3JtYXRpb24gYmVmb3JlIHRoZSBjcmFzaCBkb2Vzbid0IHNjcm9sbCBvdXQuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJQWRkZWQgc29tZSBvcmRpbmFsIHN0dWJzIHVzZWQgYnkgd2luOTUgT0xFIGFuZCBmcmllbmRzLgoKCSogW3dpbjMyL3Byb2Nlc3MuY10gW2lmMTYzMi9rZXJuZWwuc3BlY10gW2xvYWRlci9tb2R1bGUuY10KCU1zZ1dhaXRGb3JNdWx0aXBsZU9iamVjdHMsR2V0UHJvY2Vzc1RpbWVzLFJ0bEltYWdlTnRIZWFkZXJzLAogCUxvYWRMaWJyYXJ5RXgzMlcgYW5kIEdldFByb2NBZGRyZXNzMzJXIGFkZGVkLgoKCSogW29iamVjdHMvYml0bWFwLmNdCglYSW1hZ2VzIHVzZSBhbm90aGVyIG1lbW9yeSBsYXlvdXQgZm9yIGRlcHRoIDQgKGFuZCBwb3NzLiBvdGhlcgogCWRlcHRocykgdGhlbiBXaW5kb3dzIGJpdG1hcHMuIFJlcGxhY2VkIHNwZWVkdXAgaGFjayBieSBnZW5lcmljCiAJKGFuZCBiZXR0ZXIgd29ya2luZykgY29kZS4KCgkqIFtvYmplY3RzL2RpYi5jXQoJQW5vdGhlciB4aW1hZ2UhPWJpdG1hcCBtZW1vcnkgbGF5b3V0IGJ1Zy4gCglBbGwgX1hpbml0SW1hZ2VGdW5jUHRycyBleGNlcHQgb25lIHJlbW92ZWQuCgpTdW4gQXByIDIwIDE3OjEyOjMwIDE5OTcgIEFuZHJldyBUYXlsb3IgPGF0YXlsb3JAY2FkdmlzaW9uLmNvbT4KCgkqIFttdWx0aW1lZGlhL2F1ZGlvLmNdCglGaXhlZCBzb21lIHJlZ3Jlc3Npb24gYnVncy4KClN1biBBcHIgMjAgMTI6MTU6MDkgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJRml4ZWQgTU9EVUxFX0xvYWRFeGVIZWFkZXIoKSB0byB1c2UgdGhlIGNvcnJlY3Qgb2Zmc2V0IGZvcgoJZmFzdC1sb2FkIGFyZWEuCgpTYXQgQXByIDE5IDE2OjQwOjAwIDE5OTcgIENoYWQgRnJhbGVpZ2ggPGNoYWRmQGJvb2tjYXNlLmNvbT4KCgkqIFtjb250cm9scy8qXSBbZGVidWdnZXIvKl0gW2dyYXBoaWNzL3dpbjE2ZHJ2LypdIFtsb2FkZXIvKl0gW21pc2MvKl0KCSAgW3dpbjMyLypdCglSZW1vdmVkIDxtYWxsb2MuaD4gYW5kIGFkZGVkIDxzdGRsaWIuaD4gd2hlcmUgbmVlZGVkLgoJQ2hhbmdlZCBwcmludGYgZm9ybWF0ZXJzIHRvIG1hdGNoIGFyZ3VtZW50IHR5cGVzICglbHggaW5zdGVhZCBvZiAleCkuCglDYXN0ZWQgc29tZSB0eXBlcyB0byBtYWtlIHRoZSBjb21waWxlciBoYXBweS4gTW9zdGx5IHBvaW50ZXI8LT51bG9uZy4KCgkqIFtncmFwaGljcy93aW4xNmRydi9pbml0LmNdCglGaXhlZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlLgoKCSogW2luY2x1ZGUvbXNkb3MuaF0KCUFkZGVkIDxzeXMvdHlwZXMuaD4gbmVlZGVkIGZvciA8ZGlyZW50Lmg+LgoKCSogW2luY2x1ZGUvc2lnY29udGV4dC5oXQoJQ29tYmluZWQgYSBjb21tb24gTmV0QlNEICYgRnJlZUJTRCAjaWZkZWYsIGFuZCBhZGRlZCBpbiBPcGVuQlNELgoJQ2FzdGVkIEVJUF9zaWcvRVNQX3NpZyB0byBiZSB1bnNpZ25lZCBsb25nIChkZWNsYXJlZCBhcyAnaW50JyBpbiAqQlNEKS4KCgkqIFttaXNjL2NydGRsbC5jXSBbbWlzYy9sc3RyLmNdCglDYXN0ZWQgbGFzdCBhcmd1bWVudCBpbiB2KnByaW50ZigpIHRvIGJlIHZhX2xpc3QuIFRoaXMgY29kZSBzZWVtcyB0bwoJbWFrZSBCSUcgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHZhX2xpc3QuCgoJKiBbbWlzYy92ZXIuY10KCUZpeGVkIGltcG9zc2libGUgaWYoKSBleHByZXNzaW9uICh1bnNpZ25lZCA8IDApLgoKCSogW21pc2Mvd2luc29jay5jXQoJUmVtb3ZlZCBzZW1pY29sb24gb24gdGhlIGVuZCBvZiBhbiBpZigpIHN0YXRlbWVudC4KCgkqIFt3aW5kb3dzL21kaS5jXQoJQ2hhbmdlZCBhIGNvdW50ZXIvaW5kZXggdG8gdW5zaWduZWQgc2luY2UgaXQgd2FzIGNvbXBsYWluaW5nIGFib3V0CglzaWduZWQvdW5zaWduZWQgY29tcGFyaXNvbiBhbmQgZGlkbid0IG5lZWQgdG8gYmUgbmVnYXRpdmUuCgpXZWQgQXByIDE2IDE3OjQzOjE5IDE5OTcgR2VvcmcgQmV5ZXJsZSA8Z2JleWVybGVAYXdpLXBvdHNkYW0uZGU+CgoJKiBbc2NoZWR1bGVyL3RocmVhZC5jXQoJTWlub3IgZml4IGluIHRocmVhZCBkYXRhYmFzZSBpbml0aWFsaXphdGlvbi4KCldlZCBBcHIgMTYgMTc6Mjg6MDUgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbZmlsZXMvZmlsZS5jXQoJRml4ZWQgRklMRV9GaWxsSW5mbygpIHRvIG9taXQgdGhlIGFyY2hpdmUgZmxhZyB3aGVuIGhhbmRsaW5nIGEgRE9TCglkaXJlY3RvcnkgZW50cnkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBBcHIgMTQgMTE6MjI6NTQgMTk5NyAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jXQoJTWlub3IgY2hhbmdlcyB0byBoZWxwIGRlYnVnIHByb2JsZW1zLgoKCSogW2lmMTYzMi9kdW1teS5jXSBbaWYxNjMyL2dkaS5zcGVjXQoJRHVtbXkgcm91dGluZXMgZm9yIFN0YXJ0UGFnZSwgRW5kUGFnZSwgU2V0QWJvcnRQcm9jLCBBYm9ydFByb2MuCgoJKiBbbWlzYy9wcmludGRydi5jXSBbaWYxNjMyL2dkaS5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdCglTdGFydERvYzE2LCBFbmREb2MxNiBuZXcgZnVuY3Rpb25zLgoKU3VuIEFwciAxMyAxMToxODozNSAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFttZW1vcnkvdmlydHVhbC5jXQoJSW1wbGVtZW50ZWQgTWFwVmlld09mRmlsZS4KCgkqIFtkZWJ1Z2dlci9kYmcueV0KCUFkZGVkICdpbmZvIG1hcHMnIGNvbW1hbmQuCgpGcmkgQXByIDExIDE2OjM0OjA4IDE5OTcgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkZXZlbEBydWxobXBjNTguTGVpZGVuVW5pdi5ubD4KCgkqIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy9FRElULlRPRE9dCglTdGFydGVkIHJlc3RydWN0dXJpbmcuICBQZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuCglGaXhlZDoJd29yZHdyYXAsIHNjcm9sbGJhciBoYW5kbGluZywgc2Nyb2xsaW5nLCBwYWludGluZywKCQlFZGl0V25kUHJvYygpIGlzIG5vdyByZWVudHJhbnQsIHdvcmRicmVhayBwcm9jcywKCQliZXR0ZXIgY29tcGxpYW5jZSB0byBzcGVjcy4KCU5ldzoJbWFyZ2lucywgZm9ybWF0IHJlY3RhbmdsZS4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglDaGFuZ2VkIHRoZSBjdXJzb3IgZm9yIHRoZSBlZGl0IGNvbnRyb2wgY2xhc3MgdG8gYW4gSS1iZWFtLgoKCSogW2luY2x1ZGUvY2FsbGJhY2suaF0KCUFkZGVkIDMyIGJpdCB3b3JkYnJlYWsgY2FsbGJhY2suCgpNb24gQXByICA3IDIwOjUzOjI4IDE5OTcgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJQWRkZWQgaGFuZGxpbmcgb2Ygc29tZSBtb3JlIG1ldGFmaWxlIHJlY29yZHM6IAoJTUVUQV9DUkVBVEVSRUdJT04sIE1FVEFfSU5WRVJUUkVHSU9OIGV0Yy4KClNhdCBBcHIgIDUgMDk6MjM6MDIgTUVUIERTVCAxOTk3IFN2ZW4gVmVyZG9vbGFlZ2UgPHNraW1vQGJyZXVnaGVsLnVmc2lhLmFjLmJlPgoKCSogW2xvYWRlci9zaWduYWwuY10KCURlZmluZSBrZXJuZWwgc2lnYWN0aW9uIG91cnNlbHZlcyBpbnN0ZWFkIG9mIGdldHRpbmcgaXQKCWZyb20gdGhlIGtlcm5lbCBzb3VyY2UuCgpXZWQgQXByICAyIDIxOjA1OjAwIDE5OTcgIFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnRoLWRhcm1zdGFkdC5kZT4KCgkqIFtjb250cm9sL21lbnUuY10KCUZpeCByZXR1cm4gdmFsdWUgcmFuZ2UgZm9yIEdldE1lbnVTdGF0ZS4KCgkqIFtmaWxlcy9maWxlLmNdCglBbHdheXMgZmlsbCBvdXQgb2ZzLT5zelBhdGhOYW1lIGluIEZJTEVfRG9PcGVuRmlsZS4KCgkqIFttZW1vcnkvc3RyaW5nLmNdCglBZGQgZGVidWcgb3B0aW9uIHN0cmluZy4KCgkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KCUZpeCByZXR1cm4gdmFsdWUgZm9yIERlc3Ryb3lJY29uMzIuCgpNb24gTWFyIDMxIDE3OjE2OjEyIDE5OTcgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbREVWRUxPUEVSUy1ISU5UU10gW21pc2MvKl0gW3dpbmRvd3MvKl0gW2dyYXBoaWNzLypdCglBZGRlZCBkZXNjcmlwdGlvbiBvZiB0aGUgc291cmNlIHRyZWUuIE1vdmVkIHNldmVyYWwKCWZpbGVzIHRvIGZpdCBpdC4KCgkqIFttaXNjL3NoZWxsLmNdCglVc2UgV2luMzIgaGVhcCBmdW5jdGlvbnMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZyaSBNYXIgMjggMTQ6MTg6MzIgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbbWlzYy9tYWluLmNdIFtBTk5PVU5DRV0KCVVwZGF0ZSB0aGUgbGlzdCBvZiBjb250cmlidXRvcnMuIFBsZWFzZSBsZXQgbWUga25vdyBpZiBJIGZvcmdvdAoJc29tZW9uZS4KCgkqIFtjb250cm9scy9jb21iby5jXQoJRml4ZWQgYnVnIGluIENCX0RJUjE2IGhhbmRsaW5nLgoJVXNlIGNvcnJlY3QgdGV4dCBjb2xvciBpbiBDQlBhaW50VGV4dC4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglGaXhlZCBXTV9DVExDT0xPUiBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10KCUFkZGVkIHRyYW5zbGF0aW9uIGZvciBFTV8qMzIgbWVzc2FnZXMuCgpNb24gTWFyIDI0IDAxOjMxOjUyIDE5OTcgIFN0ZWZmZW4gTW9lbGxlciA8bW9lbGxlckBtcGltZy1iZXJsaW4tZGFobGVtLm1wZy5kZT4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJQWRkZWQgaW5mb3JtYXRpb24gb24gZGV2aWNlIGFuZCBpbm9kZSBudW1iZXJzIHRvIHRoZSBET1NEUklWRQoJc3RydWN0LCB1c2luZyBpdCB0byBmaW5kIERPUyBkcml2ZXMgaW4gYSBwYXRoIGV2ZW4gaWYgaXQgY29udGFpbnMKCXN5bWJvbGljIGxpbmtzLCBlbGltaW5hdGluZyBhbm5veWluZyBtZXNzYWdlcyBhdCBzdGFydHVwLiAgCglFZGl0ZWQgZnVuY3Rpb25zIERSSVZFX0luaXQgYW5kIHJld3JvdGUgRFJJVkVfRmluZERyaXZlUm9vdC4KCldlZCBNYXIgMTkgMTY6MzE6MTggMTk5NyAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbZ3JhcGhpY3Mvd2luMTZkcnYvZm9udC5jXSBbZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jXQoJICBbZ3JhcGhpY3MveDExZHJ2L2ZvbnQuY10gW29iamVjdHMvZm9udC5jXSBbaW5jbHVkZS9nZGkuaF0KCSAgW2luY2x1ZGUvd2luMTZkcnYuaF0gW2luY2x1ZGUveDExZHJ2LmhdCglJbXBsZW1lbnRlZCBHZXRDaGFyV2lkdGggdmlhIGdyYXBoaWNzIGRyaXZlcnMuCgoJKiBbZ3JhcGhpY3Mvd2luMTZkcnYvTWFrZWZpbGUuaW5dIFtncmFwaGljcy93aW4xNmRydi9wcnRkcnYuY10KCU1vdmVkIHByaW50ZXIgZHJpdmVyIGludGVyZmFjZXMgaW50byBhIHNlcGFyYXRlIGZpbGUuCgoJKiBbZ3JhcGhpY3Mvd2luMTZkcnYvdGV4dC5jXQoJRml4ZWQgYnVncyB0aGF0IHNlZy1mYXVsdGVkIHdyaXRlLgoKV2VkIE1hciAxOSAxMzo1Mjo0MSAxOTk3ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW0JVR1NdCglVcGRhdGUuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJUmVtb3ZlZCB1c2VsZXNzIHBhcmFtZXRlcnMgZnJvbSBhIGxvdCBvZiBmdW5jdGlvbnMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJSW1wcm92ZWQga2V5Ym9hcmQgc2hvcnRjdXRzLiBBZGRlZCBjaGVjayBmb3IgZW50cmllcyB3aXRoIHBvcHVwIAoJbWVudSBpbiBFbmFibGVNZW51SXRlbSgpLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXSBbd2luZG93cy93aW4uY10gW21lbW9yeS9zZWxlY3Rvci5jXQoJRG8gbm90IGFsbG9jYXRlIHNlcGFyYXRlIHRodW5rcyBmb3IgbmV3IHdpbmRvd3MuCgoJKiBbbWlzYy9jbGlwYm9hcmQuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10KCUZpeGVkIHByb2JsZW1zIHdpdGggQ2xpcEJvb2suCgogICAgICAgICogW2NvbnRyb2xzL2NvbWJvLmNdIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy9saXN0Ym94LmNdCgkgIFtjb250cm9scy93aWRnZXRzLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdIFt3aW5kb3dzL2RlZmRsZy5jXQogICAgICAgIENvbWJvIHJld3JpdGUuCgoJKiBbb2JqZWN0cy9kaWIuY10KCVNsaWdodCBpbXByb3ZlbWVudHMuCgpXZWQgTWFyIDE5IDExOjIxOjE3IDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW21pc2MvY3J0ZGxsLmNdCglBZGRlZCBjaGRpci9ta2Rpci4KCgkqIFttaXNjL250ZGxsLmNdCglGaXhlZCBzb21lIGJ1Z3MsIGFkZGVkIFJ0bFVuaWNvZGVTdHJpbmdUb0Fuc2lTdHJpbmcuCgoJKiBbd2luMzIvcHJvY2Vzcy5jXQoJQWRkZWQgaW5pdGlhbGlzYXRpb24gb2YgZXZlbnRzL3NlbWFwaG9yZXMvbXV0aWNlcy4KCldlZCBNYXIgMTkgMDE6NTU6NDAgMTk5NyAgUmljYXJkbyBSLiBNYXNzYXJvIDxtYXNzYXJvQGltZS51c3AuYnI+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Qby5yY10KCUFkZGVkIHN1cHBvcnQgZm9yIFBvcnR1Z3Vlc2UgbGFuZ3VhZ2UuCgpTYXQgTWFyIDE4IDE4OjAwOjE0IDE5OTcgIFV3ZSBCb25uZXMgIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50aC1kYXJtc3RhZHQuZGU+CgoJKiBbd2luZG93cy93aW5wb3MuY10gW2lmMTYzMi91c2VyLnNwZWNdIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglJbXBsZW1lbnRlZCBTd2l0Y2hUb1RoaXNXaW5kb3coKS4KCQoJKiBbbWlzYy92ZXIuY10KCUNvcnJlY3RlZCBhIGZsYXcgaW4gVmVySW5zdGFsbEZpbGUzMkEuCgkKCSogW21zZG9zL2ludDIxLmNdCglDb3JyZWN0ZWQgd3JvbmcgbnVtYmVyIGluIEludDIxIDMzMDUKCUNvcnJlY3RlZCBJbnQyMSA3MTRlLCBpbXBsZW1lbnRlZCBJbnQyMSA3MTYwLENMPTIsIDcxNDMgYW5kIDcxNDcKCQpTdW4gTWFyIDE2IDA5OjUzOjA0IDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW2xvYWRlci9uZV9tb2R1bGUuY10KCUZpeGVkIE5FX0xvYWRTZWdtZW50cygpIHRvIHNldCBzaXplIHRvIHBTZWctPm1pbnNpemUgcmF0aGVyIHRoYW4KCXNldHRpbmcgaXQgdG8gMHgxMDAwMCBpZiBwU2VnLT5zaXplIGlzIDAuCgpUaHUgTWFyIDEzIDEyOjE1OjAwIDE5OTcgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KCgkqIFtBTk5PVU5DRV0KCUFkZGVkIGZ0cC5wcm9nc29jLnV0cy5lZHUuYXUgYXMgYSBtaXJyb3Igb2YgV2luZS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglSZW1vdmVkIE1lbU1hbkluZm8gc2l6ZW9mIGNoZWNrLgoKTW9uIE1hciAxMCAxMDozNTo0NCBNRVQgMTk5NyBTdmVuIFZlcmRvb2xhZWdlIDxza2ltb0BicmV1Z2hlbC51ZnNpYS5hYy5iZT4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCVBpY2sgdXAga2VybmVsIGRpcmVudCBvbiBnbGliYyBzeXN0ZW1zLgoKCSogW2xvYWRlci9zaWduYWwuY10KCVBpY2sgdXAga2VybmVsIHNpZ2FjdGlvbiBvbiBnbGliYyBzeXN0ZW1zLgoKU2F0IE1hciAgOCAyMTowNTozNyAxOTk3ICBKaW1lbiBDaGluZyAgPGpjaGluZ0BhbG9oYS5jb20+CgoJKiBbZGVidWdnZXIvc3RhYnMuY10gW2RlYnVnZ2VyL21zYy5jXQoJQ2hlY2sgcmV0dXJuIHZhbHVlIG9mIG1tYXAuCgpGcmkgTWFyICA3IDA1OjQyOjAzIDE5OTcgIExlZSBKYWVraWwgPGp1cmlhQHNlb2R1LmNvLmtyPgoKCSogW3dpbjMyL2NvZGVfcGFnZS5jXQoJQWRkZWQgSXNWYWxpZENvZGVQYWdlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTWFyICAyIDE0OjU3OjM3IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogWyovKl0KCUNvbXBsZXRlZCB0cmFuc2l0aW9uIHRvIG5ldyBXaW4zMiB0eXBlcy4KCgkqIFt0b29scy9idWlsZC5jXQoJQ2hhbmdlZCBDYWxsVG8xNl9yZWdzIHRvIHRha2UgYSBDT05URVhUIGFyZ3VtZW50LgoKCSogW21lbW9yeS92aXJ0dWFsLmNdCglSZXdyb3RlIFZpcnR1YWwqIGZ1bmN0aW9ucy4gSW1wbGVtZW50ZWQgQ3JlYXRlRmlsZU1hcHBpbmcgYW5kCglPcGVuRmlsZU1hcHBpbmcuIEJyb2tlIE1hcFZpZXdPZkZpbGUgOy0pCgoJKiBbd2luMzIvazMyb2JqLmNdCglJbXBsZW1lbnRlZCBuYW1lZCBvYmplY3RzLgoKU3VuIE1hciAgMiAwMDozMzoyMSAxOTk3ICBNaWtvbGFqIFphbGV3c2tpIDx6bWlrb2xhakBmcmVlLnBvbGJveC5wbD4KCgkqIFttaXNjL29sZTJubHMuY10gW3Jlc291cmNlcy9zeXNyZXNfUGwuY10KCUFkZGVkIFBvbGlzaCBsYW5ndWFnZSBzdXBwb3J0LgoKU2F0IE1hciAgMSAxMzozMToyNSAxOTk3ICBEYXZpZCBGYXVyZSA8ZGF2aWQuZmF1cmVAaWZoYW15Lmluc2EtbHlvbi5mcj4KCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdCglXcm90ZSBWa0tleVNjYW4gYW5kIHRlc3RlZCB3aXRoIFdpbndvcmQuIFdvcmtzIG9rIGV4Y2VwdCBmb3IgZGVhZAoJY2hhcnMuCgpGcmkgRmViIDI4IDA5OjM0OjAzIDE5OTcgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L2ZvbnQuY10gW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10KCSAgW2dyYXBoaWNzL3dpbjE2ZHJ2L29iZWN0cy5jXQoJQWRkZWQgc3RhcnQgb2YgU2VsZWN0T2JqZWN0IGNhbGwgZm9yIHByaW50ZXIgZHJpdmVyLiBXcml0ZSBzaG91bGQKCW5vdyBydW4gd2l0aCB0aGUgcHJpbnRlciBkcml2ZXIgZW5hYmxlZC4KCldlZCBGZWIgMjYgMjA6MDM6MzIgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZGVidWdnZXIvKi5jXQoJUmUtYWRkZWQgYSBkaXNhc3NlbWJseSBjb21tYW5kIChsaXN0IHNlcnZlcyBhbm90aGVyIGZ1bmN0aW9uYWxpdHkKCW5vdykuCgoJKiBbbG9hZGVyL3BlX3Jlc291cmNlLmNdCglBZGRlZCAjIHN1cHBvcnQuCgoJKiBbbWlzYy9vbGUybmxzLmNdCglHZXRTdHJpbmdUeXBlKiBhZGRlZC4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglWR0ExNiBmaXhlcy4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglMb29rIGZvciBnbG9iYWwgd2lkZ2V0IGNsYXNzZXMgdG9vIGluIEdldENsYXNzSW5mbzMyLgoKCSogW3dpbmRvd3Mvc3lzbWV0cmljcy5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBXaW4zMiBzeXNtZXRyaWNzLgoKU2F0IEZlYiAyMiAyMzo1NjoyOSAxOTk3ICBKdWtrYSBJaXZvbmVuIDxpaXZvbmVuQGNjLmhlbHNpbmtpLmZpPgoKCSogW2RvY3VtZW50YXRpb24vbGFuZ3VhZ2VzXQoJVGhlIGZvdXJ0aCBjYXNlIHVwZGF0ZWQuCgoJKiBbaWYxNjMyL250ZGxsLnNwZWNdCglBZGRlZCBzb21lIGlzKiBhbmQgdG8qIGZ1bmN0aW9ucy4KClNhdCBGZWIgMjIgMjM6MDU6NDcgMTk5NyAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KCgkqIFtjb25maWd1cmUuaW5dCglBZGQgdGVzdHMgZm9yIHdhaXQ0IGFuZCB3YWl0cGlkLgoKCSogW2xvYWRlci9zaWduYWwuY10KCUNsZWFuIHVwIE9TLWRlcGVuZGVudCBjb2RlLiAgSSBob3BlIEkgZ290IGl0IHJpZ2h0LCA6LSkKCgkqIFt0b29scy93aW5lY29uZl0KCVJlY29nbmlzZSB2ZmF0IGZpbGUgc3lzdGVtcy4gIElnbm9yZSBmbG9wcHkgZHJpdmVzIHNwZWNpZmllZCBpbgoJL2V0Yy9mc3RhYi4KCgkqIFtmaWxlcy8qXQoJRml4IGZ1bmN0aW9uIG5hbWVzIGluIGVycm9yIG1lc3NhZ2VzLgoKU2F0IEZlYiAyMiAwNjoxNToxMyAxOTk3ICBQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCVN1cHBvcnQgZm9yIG1vcmUgbGF0aW4gYWxwaGFiZXQgZGVhZCBrZXlzIGZvciBpc28tODg1OS17MSwyLDMsNCw5fQoJY2hhcmFjdGVycyBzZXRzLgoKRnJpIEZlYiAyMSAyMDozNzo1MCAxOTk3ICBIdXcgRCBNIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUZpeCBpbmNvcnJlY3QgYXJnIG9yZGVyIGluIExPQ0FMX0FsbG9jKCkgY2FsbC4KCkZyaSBGZWIgMjEgMTg6MTk6MTcgMTk5NyAgQW5kcmV3IFRheWxvciAgPGF0YXlsb3JAY2FkdmlzaW9uLmNvbT4KCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdIFttdWx0aW1lZGlhL21jaXN0cmluZy5jXQoJRml4ZWQgYnVnIHJlbGF0ZWQgdG8gZGV2aWNlIElEcyByZXR1cm5lZCBieSBtdWx0aW1lZGlhCglzeXN0ZW0uICBJbXBsZW1lbnRlZCBtY2lHZXREZXZpY2VJRC4KClNhdCBGZWIgMTUgMDA6NTg6MTkgMTk5NyAgSmltZW4gQ2hpbmcgIDxqY2hpbmdAYWxvaGEuY29tPgoKCSogW2RlYnVnZ2VyL2RiZy55XQoJRG8gbm90IGRlcmVmZXJlbmNlIGludmFsaWQgZXhwcmVzc2lvbnMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBGZWIgMTUgMTE6NTk6MTcgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbKi8qXQoJQ29udmVydGVkIGEgbG90IG9mIGZ1bmN0aW9ucyB0byBXaW4zMiB0eXBlcy4KCVJlbW92ZWQgSFdORCB0eXBlLgoKRnJpIEZlYiAxNCAxNTowOToxOSAxOTk3ICBPbm5vIEhvdmVycyA8b25ub0BzdGFjay5ubD4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglJbXBsZW1lbnRlZCBHTUVNX01PVkVBQkxFIGJsb2NrcyBmb3IgV2luMzIuCgpGcmkgRmViIDE0IDAwOjI0OjM5IDE5OTcgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbbG9hZGVyL3Rhc2suY10gW3dpbmRvd3MvcXVldWUuY10KCURvIG5vdCByZWFkIFggZXZlbnRzIHdoaWxlIGluIHRoZSBpbnRlcnRhc2sgU2VuZE1lc3NhZ2UoKS4KCgkqIFttaXNjL2xzdHIuY10KCUZpeGVkIENoYXJQcmV2MzJBKCkuCgoJKiBbd2luZG93cy9ob29rLmNdIFtpbmNsdWRlL2hvb2suaF0KCVJlc3RvcmVkIGJyb2tlbiBXSF9DQUxMV05EUFJPQyBmdW5jdGlvbmFsaXR5IGZvciBkaWFsb2dzLCBldGMuLi4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9kZWZ3bmQuY10gW3dpbmRvd3MvbWRpLmNdCgkgIFt3aW5kb3dzL2V2ZW50LmNdIFtjb250cm9scy9lZGl0LmNdIAoJQWRkZWQgV0lOX0lTV0lOMzIgZmxhZyB0byB3aW5kb3dzIGNyZWF0ZWQgYnkgV2luMzIgY2FsbHMuIAoJU2V2ZXJhbCBuZXcgV2luMzIgbWVzc2FnZXMgYXJlIHNlbnQgd2hlbiB0aGlzIGZsYWcgaXMgb24uCgkKCSogW21zZG9zL2Rvc21lbS5jXSBbbWVtb3J5L2dsb2JhbC5jXQoJU29tZSBjaGFuZ2VzIGluIERPUyBtZW1vcnkgYWxsb2NhdGlvbi4KCkZyaSBGZWIgIDcgMjE6NDY6MDMgMTk5NyAgQW5kcmV3IFRheWxvciAgPGF0YXlsb3JAY2FkdmlzaW9uLmNvbT4KCgkqIFt3aW4zMi9zZWN1cml0eS5jXQoJQWRkZWQgU0lEIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMuCgoJKiBbaW5jbHVkZS9kZWJ1Zy5oXQoJQWRkZWQgZGVidWdnaW5nIGNsYXNzICJzZWN1cml0eSIuCgpGcmkgIEZlYiA3IDIwOjQ2OjMzIDE5OTcgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAY2xpYy5uZXQ+CgoJKiBbZGVidWdnZXIvbXNjLmNdIFtkZWJ1Z2dlci9zb3VyY2UuY10gCgkgIFtkb2N1bWVudGF0aW9uL3dpbmVfb3MyLnR4dF0gW2xvYWRlci9zaWduYWwuY10KCVNvbWUgbW9yZSBjaGFuZ2VzIGZvciBPUy8yLiBEb2Vzbid0IHdvcmsgeWV0LgoKRnJpICBGZWIgNyAwOTozMToxNyAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXQoJQWRkZWQgRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzKi4KCgkqIFttaXNjL250ZGxsLmNdIFtpbmNsdWRlL250ZGxsLmhdCglBZGRlZCBzb21lIG5ldyBmdW5jdGlvbnMuCgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCglDVVJTT1JJQ09OX0xvYWRIYW5kbGVyOiBjaGVjayBhZ2FpbnN0IHNvbWUgYml6YXJyZSBvdXQgb2YgbWVtb3J5Cgljb25kaXRpb25zLgoJCgkqIFt3aW5kb3dzL21kaS5jXQoJRml4ZWQgRGVmRnJhbWVQcm9jMzIqLCBhZGRlZCBUcmFuc2xhdGVNRElTeXNBY2NlbDMyLgoKV2VkIEZlYiAgNSAwMTozMTowNSAxOTk3ICBKb2huIFplcm8gPGpvaG5AZ2xvYmUuZ3JhcGhpc29mdC5odT4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0h1LnJjXSBbbWlzYy9vbGUybmxzLmNdIFttaXNjL21haW4uY10KCSAgW3Byb2dyYW1zL3Byb2dtYW4vSHUucmNdIFtwcm9ncmFtcy93aW5oZWxwL0h1LnJjXQoJQWRkZWQgSHVuZ2FyaWFuIGxhbmd1YWdlIHN1cHBvcnQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBGZWIgIDIgMTI6MzE6MDMgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbZmlsZXMvZHJpdmUuY10KCUZpeGVkIFNldEN1cnJlbnREaXJlY3RvcnkoKSB0byBhbHNvIGNoYW5nZSB0aGUgY3VycmVudCBkcml2ZS4KCgkqIFt3aW4zMi9leGNlcHQuY10gW3Rvb2xzL2J1aWxkLmNdCglVc2UgV2luMzIgcmVnaXN0ZXIgZnVuY3Rpb25zIHRvIGltcGxlbWVudCBleGNlcHRpb24gaGFuZGxpbmcuCglGaXhlZCBVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXIuCgpGcmkgSmFuIDMxIDE1OjQyOjQxICAxOTk3ICBEYXZpZCBGYXVyZSAgPGRhdmlkLmZhdXJlQGloYW15Lmluc2EtbHlvbi5mcj4KCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdCglBZGRlZCBLRVlCT0FSRF9HZW5lcmF0ZU1zZyB0byBnZW5lcmF0ZSBDYXBzIExvY2sgYW5kIE51bUxvY2sgZXZlbnRzCglBZGRlZCBjYWxscyB0byBLRVlCT0FSRF9HZW5lcmF0ZU1zZyB3aGVuIHRoZSBrZXkgaXMgcHJlc3NlZC9yZWxlYXNlZAoJb3Igd2hlbiB0aGUgc3RhdGUgaGFzIGNoYW5nZWQsIG91dCBvZiB3aW5lLgoJQ2hhbmdlZCB0eXBlIDMtc3RhdGUgJ1RvZ2dsZUtleVN0YXRlJyB0byBib29sZWFuLiBUaGUgT24vT2ZmIGlzIGdpdmVuCglieSBJbnB1dEtleVN0YXRlVGFibGUuCgpXZWQgSmFuIDI5IDIxOjUzOjA0IDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2xvYWRlci8qcmVzb3VyY2UuY11baWYxNjMyL3RodW5rLmNdCglFbnVtUmVzb3VyY2UqIGFkZGVkLgoKCSogW2xvYWRlci9wZV9yZXNvdXJjZS5dIFtsb2FkZXIvcmVzb3VyY2UuY10KCVNpemVvZlJlc291cmNlMzIoKSwgTG9hZEFjY2VsZXJhdG9yczMyKCkgYWRkZWQuCgoJKiBbbWlzYy9sc3RyLmNdCglGb3JtYXRNZXNzYWdlICVuIGFkZGVkLgoKCSogW21pc2MvY3J0ZGxsLmNdW2luY2x1ZGUvY3RyZGxsLmhdW2lmMTYzMi9jcnRkbGwuc3BlY10KCV9jaGRyaXZlLF9lcnJubyxfaXNjdHlwZSBhZGRlZC4KCgkqIFttaXNjL2NwdS5jXQoJUmVwbGFjZWQgcnVudGltZV9jcHUgYnkgR2V0U3lzdGVtSW5mbygpLgoKCSogW3dpbmRvd3MvaG9vay5jXVtpbmNsdWRlL2hvb2suaF0KCUZpeGVkIG1hcHBpbmcgb2YgaG9va3MgdG8gd2luMzIvdW5pY29kZS4KCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdIFt3aW5kb3dzL2RlZnduZC5jXQoJVXBkYXRlZCB0byB3aW4zMiBzdGFuZGFyZC4KCUFMVC08TWVudWtleT4gZml4ZWQuCgoJKiBbd2luZG93cy9xdWV1ZS5jXQoJR2V0V2luZG93VGhyZWFkUHJvY2Vzc0lkKCkgaW1wbGVtZW50ZWQuCgpNb24gSmFuIDI3IDE2OjQyOjQ5IDE5OTcgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW2dyYXBoaWNzL21ldGFmaWxlZHJ2LypdIFtncmFwaGljcy94MTFkcnYvKl0KCSAgW29iamVjdHMvYml0bWFwLmNdIFtvYmplY3RzL2JydXNoLmNdIFtvYmplY3RzL2ZvbnQuY10KCSAgW29iamVjdHMvZ2Rpb2JqLmNdIFtvYmplY3RzL3Blbi5jXQoJTW92ZWQgU2VsZWN0T2JqZWN0IHRvIGdyYXBoaWNzIGRyaXZlcnMuIFByaW50ZXIgc3VwcG9ydCBub3cgd29ya3MKCWluIGEgZmV3IGNhc2VzIGJ1dCBpcyBkZWZpbml0ZWx5IG5vdCBjb21wbGV0ZS4gR2VuZXJpYy90ZXh0IGRyaXZlcgoJd29ya3MuIFRoZSBwb3N0c2NyaXB0IGRyaXZlciB3b3JrcyBpZiB0cnVlIHR5cGUgZm9udHMgYXJlIGRpc2FibGVkCglmcm9tIHRoZSBjb250cm9sIHBhbmVsLiBUbyBlbmFibGUgcHJpbnRlciBzdXBwb3J0IGFkZCBQcmludGVyPW9uCgl0byB0aGUgd2luZSBzZWN0aW9uIG9mIHlvdXIgd2luZS5jb25mIGZpbGUuIFRoaXMgY2F1c2VzIHdyaXRlIG5vdAoJdG8gd29yayBwcm9wZXJseS4gSSBrbm93IHRoYXQgc2V2ZXJhbCBvdGhlciBwcmludGVyIGRyaXZlcnMgZG8gbm90Cgl3b3JrLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglNYWtlIC5zdGFicyBub3QgdXNlZCBmb3Igc3ZyNCBzaW5jZSBpdCBkb2Vzbid0IHVzZSBHTlUgYXNzZW1ibGVyLgoKCSogW21pc2MvZm9udGVuZ2luZS5jXQoJTWFrZSBzdXJlIGEgcHJpbnRmIGRvZXNuJ3QgY3Jhc2ggdGhlIHN5c3RlbS4KClNhdCBKYW4gMjUgMTU6NTM6MzUgMTk5NyAgSHV3IEQgTSBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglGaXhlZCBzb21lIHByb2JsZW1zIHdpdGggUGxheU1ldGFGaWxlUmVjb3JkKCkuCgoJKiBbb2JqZWN0cy9kYy5jXQoJaENsaXBSZ24gZ2V0cyBpbml0aWFsaXplZCBpbiBHZXREQ1N0YXRlKCkuCgpGcmkgSmFuIDI0IDIxOjIyOjI2IDE5OTcgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CgoJKiBbZGVidWdnZXIvc3RhYnMuY10KCUhhbmRsZSBmaWxlIG5hbWVzIGJlZ2lubmluZyB3aXRoICcvJy4KCkZyaSBKYW4gMjQgMTg6MzM6MDQgMTk5NyAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KCgkqIFsqLypdCglTb21lIG1vcmUgcGF0Y2hlcyBmb3IgT1MvMiBzdXBwb3J0LgoKRnJpIEphbiAyNCAxMTozMDo0MSAxOTk3ICBCYW5nIEp1bi1Zb3VuZyAgPGJhbmdqeUBub3dudXJpLm5vd2NvbS5jby5rcj4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0tvLnJjXQoJVXBkYXRlZCBzdXBwb3J0IGZvciBLb3JlYW4gKEtvKSBsYW5ndWFnZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEphbiAxOSAxMTo0Njo0OCAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglGaXhlZCBMb2FkTW9kdWxlKCkgdG8gYWx3YXlzIGNhbGwgdGhlIERMTCBpbml0aWFsaXphdGlvbiBjb2RlLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCU1vdmVkIGFsbCB0aGUga2V5Ym9hcmQgc3R1ZmYgdG8gd2luZG93cy9rZXlib2FyZC5jCgoJKiBbdG9vbHMvYnVpbGQuY10KCUZpeGVkIFdpbjMyIHJlZ2lzdGVyIGZ1bmN0aW9ucy4KClNhdCBKYW4gMTggMjI6MjQ6NDEgMTk5NyAgRGF2aWQgTWFrZXBlYWNlICA8RC5NYWtlcGVhY2VAbWFpbGJveC51cS5vei5hdT4KCiAgICAgICAgKiBbdG9vbHMvbWFrZWRlcC5jXQogICAgICAgIEZpeGVkIGJ1ZyB3aGljaCBjYXVzZXMgU0VHViBvbiBTb2xhcmlzIHg4Ni4KCkZyaSBKYW4gMTcgMTg6MzI6MjcgMTk5NyAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG1wYzQ5LkxlaWRlblVuaXYubmw+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJSW1wbGVtZW50ZWQgV01fVU5ETywgV01fQ09OVEVYVE1FTlUgKHRlbXBvcmFyeSB1c2luZyBXTV9SQlVUVE9OVVApLAoJV01fQ09NTUFORCwgV01fSU5JVFBPUFVQTUVOVSwgV01fU1lTS0VZRE9XTi4KCUZpeGVkIEVNX1NFVFNFTCBhbmQgc29tZSBtaW5vciBidWdzIChmZWF0dXJlcykuCglIZW5jZTogZnVsbHkgZnVuY3Rpb25hbCB1bmRvIGFuZCBhIHdpbjk1IG1lbnUgd2l0aCB0aGUgcmlnaHQgbW91c2UKCQlidXR0b24uCgoJKiBbaW5jbHVkZS9yZXNvdXJjZXMuaF0gW3Jlc291cmNlcy9UT0RPXSBbcmVzb3VyY2VzL3N5c3Jlc18/Py5yY10KCUFkZGVkIGEgY29udGV4dCBtZW51IGZvciB0aGUgZWRpdCBjb250cm9sLgoJVHJhbnNsYXRpb25zLCBwbGVhc2UgLi4uCgpGcmkgSmFuCTE3IDA4OjI5OjUyIDE5OTcgIERhdmlkIEZhdXJlIDxkYXZpZC5mYXVyZUBpZmhhbXkuaW5zYS1seW9uLmZyPgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCU1vdmUgRVZFTlRfVG9Bc2NpaSB0byB3aW5kb3dzL2tleWJvYXJkLmMgKHdoZXJlIG5hbWUgVG9Bc2NpaSkKCUZpeGVkIEtleXBhZCBrZXlzIDAtOSBhbmQgLiBpbiBFVkVOVF9ldmVudF90b192a2V5LgoJQWRkZWQgMy1zdGF0ZSBoYW5kbGluZyBvZiB0b2dnbGUga2V5cyAoQ2Fwc0xvY2ssIE51bUxvY2spIGluIG9yZGVyCgl0byBtYWtlIHRoZW0gd29yayB3aXRoIGFueSBYIHNlcnZlci4KCVRvZ2dsZSBrZXlzIG5vdyBnZW5lcmF0ZSBXTV9LRVlET1dOIGFuZCBXTV9LRVlVUCBvbiBlYWNoIHByZXNzaW5nLgoKCSogW2luY2x1ZGUva2V5Ym9hcmQuaF0KCVRvdGFsbHkgcmVwbGFjZWQgdGhlIGZpbGUgKGZvcm1lcmx5IGNvbnRhaW5pbmcgdGhlIHZrY2FzZSBkZWZpbml0aW9ucykKCWJ5IHRoZSBkZWNsYXJhdGlvbiBvZiAnZXh0ZXJuJyB2YXJpYWJsZXMgY29udGFpbmVkIGJ5IGV2ZW50LmMgYW5kIHVzZWQKCWJ5IGtleWJvYXJkLmMKCQoJKiBbd2luZG93cy9rZXlib2FyZC5jXQoJU3RhcnRlZCB0byByZXdyaXRlIFZrS2V5U2NhbiBhbmQgTWFwVmlydHVhbEtleSwgdG8gbWFrZSB0aGVtIHVzZSB0aGUgCgl0YWJsZSBrZXljMnZrZXkgb3IgWCBmdW5jdGlvbnMgb25seS4KCVRvQXNjaWkgOiBhZGRlZCBrZXlwYWQgMC05IGFuZCAuIHNwZWNpYWwgY2FzZS4KCUNoYW5nZWQgdG9nZ2xlIGtleXMgYWN0aXZlIG1hc2sgZnJvbSAweDgwIHRvIDB4MS4KCgkqIFttaXNjL2tleWJvYXJkLmNdCglGaWxlIGRlbGV0ZWQuIENvbnRlbnRzIG1vdmVkIHRvIHdpbmRvd3Mva2V5Ym9hcmQuYy4KCgkqIFttaXNjL21haW4uY10KCUFkZGVkIHB1dGVudiBYS0JfRElTQUJMRSB0byBkaXNhYmxlIFhLQiBleHRlbnNpb24gKHdoaWNoLCB3aGVuCglwcmVzZW50LCBjYXVzZXMgQWx0R3IgdG8gY2hhbmdlIGtleWJvYXJkIGdyb3VwIGluc3RlYWQgb2YgYmVpbmcgYQoJbW9kaWZpZXIpLgoKVHVlIEphbiAxNCAyMjo1Njo0MyAxOTk3ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCURvIG5vdCBhc3N1bWUgTnVtTG9ja01hc2sgaXMgTW9kMk1hc2ssIGJ1dCBjb21wdXRlIGl0IGJ5IHNjYW5uaW5nCglvdXRwdXQgb2YgWEdldE1vZGlmaWVyTWFwcGluZyBmb3IgWEtfTnVtX0xvY2suCgpUdWUgSmFuIDE0IDE1OjQ5OjQ5IDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2xvYWRlci9wZV8qLmNdIFtpbmNsdWRlL3BlZXhlLmhdIFtpbmNsdWRlL3Jlc291cmNlMzIuaF0KCSAgW2RlYnVnZ2VyLyouY10KCUdlbmVyYWwgY2xlYW4gdXAuCglDaGFuZ2VkIGRlZmluZXMvc3RydWN0dXJlcyB0byBtYXRjaCBXaW5kb3dzIE5UIFNESy4KCgkqIFtsb2FkZXIvbWFpbi5jXQoJRG9uJ3QgY3Jhc2ggb24gZW1wdHkgY29tbWFuZC1saW5lLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCgl3aW5wb3MuYyBtYWRlIHdpbjMyIGNsZWFuLgoKCSogW21pc2MvbnRkbGwuY10KCVNvbWUgc3RyaW5nIGNvbnZlcnNpb24gYWRkaXRpb25zLgoKCSogW2ZpbGVzL2ZpbGUuY10KCUdldEZpbGVBdHRyaWJ1dGVzL0dldFRlbXBGaWxlTmFtZSBmaXhlZC4KCgkqIFttaXNjL3Zlci5jXQoJVmVySW5zdGFsbEZpbGUgaW1wbGVtZW50ZWQuCgpNb24gSmFuIDEzIDE1OjAzOjExIDE5OTcgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CgoJKiBbdG9vbHMvYnVpbGQuY106IFVzZSBQUkVGSVggYWxzbyBpbiBzdGFicyBtZXNzYWdlcy4KCk1vbiBKYW4gMTMgMTA6NDA6MzMgMTk5NyAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbZ3JhcGhpY3Mvd2luMTZkcnYvKl0gW2luY2x1ZGUvd2luMTZkcnYuaF0KCU1hbnkgZml4ZXMgYW5kIHNvbWUgbmV3IGZlYXR1cmVzLgoKCSogW2dyYXBoaWNzL3gxMWRydi9mb250LmNdIFtncmFwaGljcy94MTFkcnYvaW5pdC5jXQoJICBbaW5jbHVkZS94MTFkcnYuaF0gW29iamVjdHMvZm9udC5jXQoJR2V0VGV4dE1ldHJpY3MoKSBtb3ZlZCB0byBncmFwaGljcyBkcml2ZXIuCgoJKiBbaWYxNjMyL2dkaS5zcGVjXSBbbWlzYy9mb250ZW5naW5lLmNdIFttaXNjL01ha2VmaWxlLmluXQoJTmV3IGR1bW15IEVuZ2luZUVudW1lcmF0ZUZvbnQsIEVuZ2luZVJlYWxpemVGb250IGZ1bmN0aW9ucy4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCVRFWFRGT1JNMTYgYW5kIEZPTlRJTkZPMTYgc3RydWN0dXJlIGRlZmluaXRpb25zIG1vdmVkIGhlcmUgZnJvbQoJaW5jbHVkZS93aW4xNmRydi5oCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBKYW4gMTEgMTg6MTc6NTkgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJVXBkYXRlZCB0byBuZXcgV2luMzIgdHlwZXMuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJRml4ZWQgV2luZmlsZSBleHRlbmRlZCBzZWxlY3Rpb24gYnVnLgoKCSogW2ZpbGVzL2RpcmVjdG9yeS5jXQoJQ2hhbmdlZCBESVJfU2VhcmNoUGF0aCB0byByZXR1cm4gYm90aCBsb25nIGFuZCBzaG9ydCBmaWxlIG5hbWVzLgoKCSogW2ZpbGVzL2Rvc19mcy5jXQoJSW1wbGVtZW50ZWQgVkZBVCBpb2N0bCB0byByZXRyaWV2ZSB0aGUgb3JpZ2luYWwgc2hvcnQgZmlsZW5hbWVzCglmcm9tIGEgVkZBVCBmaWxlc3lzdGVtIChMaW51eCBvbmx5IGZvciBub3cpLgoJUmVwbGFjZWQgRE9TRlNfR2V0VW5peEZpbGVOYW1lKCkvRE9TRlNfR2V0RG9zVHJ1ZU5hbWUoKSBieQoJRE9TX0dldEZ1bGxOYW1lKCkuCglQcm9wZXJseSBpbXBsZW1lbnRlZCBHZXRTaG9ydFBhdGhOYW1lKCkgYW5kIEdldEZ1bGxQYXRoTmFtZSgpLgoJTWFkZSBhbGwgZnVuY3Rpb25zIHJlLWVudHJhbnQuCgoJKiBbZmlsZXMvZmlsZS5jXSBbbWlzYy9tYWluLmNdCglSZXBsYWNlZCAtYWxsb3dyZWFkb25seSBvcHRpb24gYnkgLWZhaWxyZWFkb25seS4gVGhlIGRlZmF1bHQgaXMKCW5vdyB0byByZXBvcnQgc3VjY2VzcyB3aGVuIG9wZW5pbmcgYSByZWFkLW9ubHkgZmlsZSBmb3Igd3JpdGluZy4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglGaXhlZCBidWcgaW4gRElCIGJpdG1hcHMgcG9pbnRlciBjYWxjdWxhdGlvbi4KCgkqIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXQoJSW1wbGVtZW50ZWQgZW52aXJvbm1lbnQgc3RyaW5ncyBhbmQgR2V0L1NldFN0ZEhhbmRsZSB3aXRoIHByb2Nlc3MKIAllbnZpcm9ubWVudCBibG9jay4KCgkqIFt0b29scy9idWlsZC5jXQoJUmV3cm90ZSBCdWlsZENvbnRleHQzMigpIHRvIGF2b2lkIGluc3RydWN0aW9ucyB0aGF0IG1heSBub3QgYmUKCXN1cHBvcnRlZCBieSBhbGwgYXNzZW1ibGVycy4KCQpGcmkgSmFuIDEwIDE3OjExOjA5IDE5OTcgIERhdmlkIEZhdXJlICA8ZGF2aWQuZmF1cmVAaWZoYW15Lmluc2EtbHlvbi5mcj4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglDcmVhdGVkIHRhYmxlIGtleWMydmtleSwgd2hpY2ggYXNzb2NpYXRlIGEgdmtleSgrZXh0ZW5kZWQgYml0KSB0bwoJYW55IGtleWNvZGUuIENoYW5nZWQgRVZFTlRfZXZlbnRfdG9fdmtleSB0byB1c2UgdGhpcyB0YWJsZSB0bwoJcmV0dXJuIHRoZSBjb3JyZWN0IHZrZXkuIENoYW5nZWQgRVZFTlRfVG9Bc2NpaSB0byBnZXQgdGhlIGtleWNvZGUKCWZyb20gdGhpcyB0YWJsZSB0b28uICBBc3NpZ25lZCBPRU0gc3BlY2lmaWMgdmtleXMgYXJiaXRyYXJpbHkuCgpGcmkgSmFuIDEwIDA5OjI2OjE3IDE5OTcgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW21pc2Mvd2luc29jay5jXSBbbWlzYy93aW5zb2NfYXN5bmMuY10KICAgICAgICBGaXhlZCBzdnI0IGhlYWRlciBmaWxlcy4KICAgICAgICBDaGFuZ2VkIGJ6ZXJvKCkgdG8gbWVtc2V0KCkuCgoJKiBbdG9vbHMvZm50MmJkZi5jXQogICAgICAgIFJlbW92ZWQgYmNvcHkoKSBhbmQgdXNlZCBtZW1jcHkoKSBpbnN0ZWFkLgoKCSogW2RlYnVnZ2VyL21zYy5jXQogICAgICAgIEluY2x1ZGUgc3RyaW5nLmggaW5zdGVhZCBvZiBzdHJpbmdzLmgKCgkqIFtkZWJ1Z2dlci9zdGFicy5jXQogICAgICAgIEluY2x1ZGUgc3RyaW5nLmggaW5zdGVhZCBvZiBzdHJpbmdzLmguCiAgICAgICAgRGVmaW5lIF9fRUxGX18gZm9yIHN2cjQgc3lzdGVtcy4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCiAgICAgICAgVXNlIHdhaXQoKSBpbnN0ZWFkIG9mIHdhaXQ0KCkgd2hpY2ggZG9lc250IGV4aXN0IG9uIFVuaXh3YXJlLgoKCSogW21lbW9yeS9nbG9iYWwuY10KICAgICAgICBVc2Ugc3lzY29uZigpIGluc3RlYWQgb2YgZ2V0cGFnZXNpemUoKSBmb3Igc3ZyNCBzeXN0ZW1zLgoKVGh1IEphbiAgOSAyMTowNzoyMCAxOTk3ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgoKCSogW01ha2UucnVsZXMuaW5dIFtNYWtlZmlsZS5pbl0gW21ha2Vfb3MyLnNoXSBbcmMvTWFrZWZpbGUuaW5dCgkgIFt0b29scy9NYWtlZmlsZS5pbl0gW2RvY3VtZW50YXRpb24vd2luZV9vczIudHh0XQoJUGF0Y2hlcyBmb3IgT1MvMiBzdXBwb3J0LiBOb3RlIHRoYXQgaXQgZG9lc24ndCBjb21waWxlIHlldC4KClR1ZSBKYW4gIDcgMjA6MDM6NTMgMTk5NyAgRXJpYyBZb3VuZ2RhbGUgPGVyaWNAc3ViMjMwNC5qaWMuY29tPgoKCSogW2RlYnVnZ2VyLypdCglNYW55IG1vcmUgZGVidWdnZXIgaW1wcm92ZW1lbnRzIChzZWUgZGVidWdnZXIvUkVBRE1FIGZvciBkZXRhaWxzKS4KClR1ZSBKYW4gIDcgMTU6MTI6MjEgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbd2luZG93cy9ncmFwaGljcy5jXSBbb2JqZWN0cy90ZXh0LmNdIFtncmFwaGljcy94MTFkcnYvKl0KCSAgW2dyYXBoaWNzL21ldGFmaWxlZHJ2LypdCglNb3ZlZCBzb21lIGRldmljZSBkZXBlbmRlbnQgY29kZSBpbnRvIHRoZSByZXNwLiBzdWJkaXJzLgoKCSogW2luY2x1ZGUvZ2RpLmhdIFtpbmNsdWRlL21ldGFmaWxlZHJ2LmhdIFtpbmNsdWRlL3gxMWRydi5oXQoJUHJvdG90eXBlcyBhZGRlZCwKCURDX0ZVTkNUSU9OUzogR2V0UGl4ZWwgYWRkZWQsIHNvbWUgdW5uZWNlc3NhcnkgZnVuY3Rpb25zIHJlbW92ZWQuCgoJKiBbb2JqZWN0cy9yZWdpb24uY10KCUNyZWF0ZVBvbHlQb2x5Z29uUmduMzIgYWRkZWQuCgoJKiBbZmlsZXMvZG9zX2ZzLmNdCglRdWVyeURvc0RldmljZSBhZGRlZC4KCgkqIFttaXNjL2xzdHIuY10KCUZvcm1hdE1lc3NhZ2U6IGJyb2tlbiBoZWFwIG1hbmFnZW1lbnQgZml4ZWQuCgoJKiBbc2NoZWR1bGVyL3Byb2Nlc3MuY10gW3NjaGVkdWxlci90aHJlYWQuY10KCUdldC9TZXRUaHJlYWRQcmlvcml0eS9Qcmlvcml0eUNsYXNzIGFkZGVkLgoKTW9uIEphbiAgNiAyMTo1NTozMCAxOTk3ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW21pc2Mva2V5Ym9hcmQuY10KCVRvQXNjaWkgOiBVc2UgRVZFTlRfVG9Bc2NpaSBpbnN0ZWFkLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCWtleXBhZF9rZXkgOiBEbyBub3QgY29udmVydCBYS19Nb2RlX3N3aXRjaCB0byBWS19NRU5VOyByZWNvZ25pemUKCWtleXBhZCBjdXJzb3Iga2V5cy4KCUVWRU5UX2V2ZW50X3RvX3ZrZXkgOiBOZXcgZnVuY3Rpb24sIHRvIHRyYW5zZm9ybSBhIFgga2V5Y29kZQoJaW50byBhIE1Td2luIHZrZXkgKyBleHRlbmRlZCBiaXQuCglFVkVOVF9Ub0FzY2lpIDogTmV3IGZ1bmN0aW9uLCB0byB0cmFuc2Zvcm0gYSB2a2V5ICsgZXh0ZW5kZWQgYml0CgkoKyBrZXkgc3RhdGUgdGFibGUpIGludG8gYXNjaWkgY2hhcihzKSwgdXNpbmcgWExvb2t1cFN0cmluZywgYW5kCglyZWNvZ25pemluZyBkZWFkIGNoYXJzLgoJRVZFTlRfa2V5IDogVHJhbnNmb3JtIEFsdEdyIGludG8gQ3RybCtBbHQgc2VxdWVuY2U7IGNhbGwKCUVWRU5UX2V2ZW50X3RvX3ZrZXkgZm9yIGtleWNvZGUgdG8gdmtleSBjb252ZXJzaW9uOyBmaXhlZAoJcHJldmlvdXMsIGNvbnRleHQgYW5kIGV4dGVuZGVkIGJpdHMuCgoJKiBbd2luZG93cy9rZXlib2FyZC5jXQoJSW5jbHVkZSBzdGRkZWJ1Zy5oLCB0byBnZXQgLWRlYnVnbXNnIG1lc3NhZ2VzLgoJR2V0S2V5U3RhdGUgOiBIYW5kbGUgVktfTUJVVFRPTiBjYXNlLgoJR2V0S2V5Ym9hcmRTdGF0ZSwgU2V0S2V5Ym9hcmRTdGF0ZSA6IERlYnVnZ2luZyBtZXNzYWdlcyBhZGRlZC4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCVRyYW5zbGF0ZU1lc3NhZ2UgOiBIYW5kbGUgZGVhZCBjaGFycy4KCk1vbiBKYW4gIDYgMjA6MTA6MTEgMTk5NyAgRG9taW5payBTdHJhc3NlciAgPGJtNDI0OTUzQG11ZW5jaGVuLm9yZz4KCgkqIFtpZjE2MzIvY3J0ZGxsLnNwZWNdIFttaXNjL2NydGRsbC5jXQoJQysrIGZ1bmN0aW9ucyBuZXcvZGVsZXRlL3NldF9uZXdfaGFuZGxlciBpbXBsZW1lbnRlZC4KCk1vbiBKYW4gIDYgMTU6NDg6MTUgMTk5NyBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobXBjNDkuTGVpZGVuVW5pdi5ubD4KCgkqIFtjb250cm9scy9lZGl0LmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCU1vdmVkIHRoZSBlZGl0IGNvbnRyb2wgdG8gMzIgYml0cy4KCUluY2x1ZGVkIG5ldyAod2luOTUpIG1lc3NhZ2UgZGVmaW5pdGlvbnMgaW4gd2luZG93cy5oCglJbXBsZW1lbnRlZCBFTV9TQ1JPTExDQVJFVCwgRU1fU0VUTUFSR0lOUywgRU1fR0VUTUFSR0lOUywKCUVNX0dFVExJTUlUVEVYVCwgRU1fUE9TRlJPTUNIQVIsIEVNX0NIQVJGUk9NUE9TLgoJQnJva2UgRU1fU0VUV09SREJSRUFLUFJPQyAoaW50ZXJuYWwgd29yZHdyYXAgc3RpbGwgd29ya3MpLgoJRml4ZWQgc29tZSBidWdzLCBpbnRyb2R1Y2VkIGEgY291cGxlIG9mIG90aGVycy4KCVRleHQgYnVmZmVyIGlzIG5vdyBpbml0aWFsbHkgaW4gMzItYml0IGhlYXAuCgoJKiBbY29udHJvbHMvRURJVC5UT0RPXSBbY29udHJvbHMvY29tYm8uY10gW2NvbnRyb2xzL3dpZGdldHMuY10KCSAgW2lmMTYzMi93cHJvY3Muc3BlY10gW2xpYnJhcnkvbWlzY3N0dWJzLmNdIFt3aW5kb3dzL2RlZmRsZy5jXQoJICBbbWlzYy9jb21tZGxnLmNdCglVcGRhdGVkIHRvIHdvcmsgd2l0aCAzMi1iaXQgZWRpdCBjb250cm9sLgoKU2F0IEphbiAgNCAyMjowNzoyNyAxOTk3ICBPLkZsZWJiZSAgPE8uRmxlYmJlQHNjaWVuY2UtY29tcHV0aW5nLnVuaS10dWViaW5nZW4uZGU+CgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglVc2UgbW1hcCByYXRoZXIgdGhlbiBtYWxsb2MuIEJldHRlciB3b3JrYXJvdW5kIGZvciBjbGVhbgoJc2VnbWVudHMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBKYW4gIDEgMTU6MzY6MTcgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJVXNlIEZpbmRGaXJzdEZpbGUvRmluZE5leHRGaWxlIGluIExJU1RCT1hfRGlyZWN0b3J5LgoKCSogW2ZpbGVzL2Rvc19mcy5jXQoJUmV3cm90ZSBGaW5kRmlyc3RGaWxlL0ZpbmROZXh0RmlsZSB0byB1c2UgRE9TRlNfRmluZE5leHQoKS4KCgkqIFtmaWxlcy9maWxlLmNdIFtmaWxlcy9kaXJlY3RvcnkuY10KCVVzZSBXaW4zMiBrZXJuZWwgb2JqZWN0cyBhbmQgaGFuZGxlcyBmb3IgZmlsZSBoYW5kbGVzLgoJVW5pZmllZCBTZWFyY2hQYXRoKCkgYW5kIE9wZW5GaWxlKCkuCgoJKiBbbG9hZGVyL2J1aWx0aW4uY10KCU1vdmVkIHRvIGlmMTYzMi8gZGlyZWN0b3J5LgoKCSogW3Rvb2xzL2J1aWxkLmNdIFtkZWJ1Z2dlci8qXSBbbWlzY2VtdS8qXQoJV2luMTYgcmVnaXN0ZXIgZnVuY3Rpb25zIG5vdyByZWNlaXZlIHRoZSBzYW1lIENPTlRFWFQgKiBzdHJ1Y3R1cmUKCWFzIFdpbjMyIGZ1bmN0aW9ucy4KCgkqIFtpbmNsdWRlL3NpZ2NvbnRleHQuaF0gW21pc2NlbXUvaW5zdHIuY10KCUFkZGVkIG5ldyBtYWNyb3MgdG8gZ2V0IHJlZ2lzdGVyIHZhbHVlcyBmcm9tIHRoZSBTSUdDT05URVhUCglzdHJ1Y3R1cmUgKG9ubHkgdXNlZCBmb3IgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIG5vdykuCgoJKiBbc2NoZWR1bGVyL3Byb2Nlc3MuY10gW3NjaGVkdWxlci90aHJlYWQuY10gKE5ldyBmaWxlcykKCUFsbG9jYXRlIHByb2Nlc3MgYW5kIHRocmVhZCBzdHJ1Y3R1cmVzLgoKCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdIFt3aW4zMi9rMzJvYmouY10KCUFkZGVkIFdpbjMyIGtlcm5lbCBvYmplY3RzIGFuZCBoYW5kbGVzIG1hbmFnZW1lbnQuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUNyZWF0ZSBhIFdpbjMyIHByb2Nlc3MgYW5kIHRocmVhZCBmb3IgZXZlcnkgV2luMTYgdGFzay4KCgkqIFttaXNjL2NvbW1kbGcuY10gW21pc2Mvc2hlbGwuY10gW3dpbmRvd3MvbXNnYm94LmNdCglCdWlsdC1pbiByZXNvdXJjZXMgYXJlIG5vdyBpbiBXaW4zMiBmb3JtYXQuIFRoaXMgYWxzbyBhdm9pZHMKCTE2LWJpdCBjYWxsYmFja3MgZm9yIGJ1aWx0LWluIGRpYWxvZ3MuCgoJKiBbbWlzYy9semV4cGFuZC5jXQoJRGlmZmVyZW50aWF0ZSBiZXR3ZWVuIDE2LWJpdCBhbmQgMzItYml0IGZpbGUgaGFuZGxlcy4KCgkqIFttaXNjZW11L2ludCouY10KCU1vdmVkIGFsbCBpbnQgZW11bGF0aW9uIHRvIG1zZG9zLyBkaXJlY3RvcnkuCgoJKiBbbXNkb3MvKl0KCU5ldyBkaXJlY3RvcnkgbXNkb3MvIGNvbnRhaW5zIGFsbCBNUy1ET1MgZW11bGF0aW9uIGNvZGUgdGhhdCBjYW4KCWFsc28gYmUgdXNlZCBmb3IgV2luZWxpYjsgdGhpcyBzaG91bGQgZW5hYmxlIFdpbmVsaWIgYXBwcyB0byB1c2UKCURPUzNDYWxsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4KCgkqIFtyYy93aW5lcmMuY10KCUEgZmV3IGJ1ZyBmaXhlcyBmb3IgV2luMzIgcmVzb3VyY2UgZm9ybWF0LgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglIYWNrIGluIFdJTlBPU19SZW9yZGVyT3duZXJQb3B1cHMoKSB0byBhdm9pZCBYIGNyYXNoZWQgKHN0aWxsIG5vdAoJcmlnaHQgdGhvdWdoKS4KClN1biBEZWMgMjkgMTc6NDc6NTUgMTk5NiAgTy4gRmxlYmJlIDxmbGViYmVAc2NpZW5jZS1jb21wdXRpbmcudW5pLXR1ZWJpbmdlbi5kZT4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCU1ha2Ugc3VyZSBCU1Mgb2YgYSBQRV9JbWFnZSBpcyB6ZXJvLgoKU2F0IERlYyAyOCAyMjoxNTozNCAxOTk2IEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9zY3JvbGwuY10KCVNjcm9sbFdpbmRvd0V4KCkgcmV3cml0ZSwgU2Nyb2xsREMoKSBmaXguCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10gW2NvbnRyb2xzL21lbnUuY10KCUZpeGVkIEFsdC1TcGFjZSBjcmFzaGVzIGluIGRpYWxvZ3MuCgoJKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9tZXNzYWdlLmNdCglTb21lIGNoYW5nZXMgaW4gbW91c2UgbWVzc2FnZSBnZW5lcmF0aW9uLgoKVGh1IERlYyAyNiAwOToyNToyNCAxOTk2ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW2RlYnVnZ2VyL3N0YWJzLmNdCglEdW1teSBERUJVR19SZWFkRXhlY3V0YWJsZURiZ0luZm8gcHJvdmlkZWQgZm9yICFfX0VMRl9fIGNhc2UuCgpUdWUgRGVjIDI0IDAwOjU5OjA1IE1FVCAxOTk2ICBNYXJ0aW4gQnVjayA8bWFydGluLTIuYnVja0BzdHVkZW50LnVuaS11bG0uZGU+CgoJKiBbd2luZG93cy9ldmVudC5jXQoJQ2hhbmdlZCBYS19QYWdlX3tVcCxEb3dufSB0byBYS197UHJpb3IsTmV4dH0gZm9yIFgxMVI1Cgljb21wYXRpYmlsaXR5LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gRGVjIDIyIDEzOjMwOjE4IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2dyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuY10gW2dyYXBoaXNjL21ldGFmaWxlZHJ2L21hcHBpbmcuY10KCUFkZGVkIG1hcHBpbmcgZnVuY3Rpb25zLgoKCSogW2lmMTYzMi9nZGkuc3BlY10gW29iamVjdHMvKi5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBhIGxvdCBvZiBXaW4zMiBmdW5jdGlvbnMuCgoJKiBbbWVtb3J5L2hlYXAuY10KCUFkZGVkIEhFQVBfc3RyZHVwQXRvVyBhbmQgSEVBUF9zdHJkdXBXdG9BLgoKCSogW21pc2MvbHN0ci5jXSBbbWVtb3J5L3N0cmluZy5jXQoJTW92ZWQgT0VNPC0+QW5zaSBjb252ZXJzaW9uIHRvIHN0cmluZy5jLiBGaXhlZCBhIGNvdXBsZSBvZiBidWdzLgoKCSogW29iamVjdC9mb250LmNdCglBdm9pZCB1cHBlcmNhc2luZyBmb250IG5hbWVzLgoKCSogW3dpbmRvd3MvaG9vay5jXQoJU2V0IGRzID0gc3MgYmVmb3JlIGNhbGxpbmcgaG9vayBwcm9jZWR1cmUuCgpTYXQgRGVjIDIxIDIxOjQ0OjE3IDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJVXNlIGNvbG9ycyBhbGxvY2F0ZWQgYnkgb3RoZXIgY2xpZW50cy4gCgoJKiBbd2luZG93cy9jYXJldC5jXQoJU2V0IGRlZmF1bHQgYmxpbmsgdGltZSB0byA1MDAuCgoJKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3MvZXZlbnQuY10KCURlbGV0ZSBYIGNvbnRleHQgYmVmb3JlIFhEZXN0cm95V2luZG93KCkuCgoJKiBbd2luZG93cy9rZXlib2FyZC5jXQoJRml4ZWQgR2V0S2V5U3RhdGUoKSBvbmNlIG1vcmUuCgpGcmkgRGVjIDIwIDA4OjI2OjMzIDE5OTYgIEVyaWMgWW91bmdkYWxlIDxlcmljQHN1YjIzMDQuamljLmNvbT4KCgkqIFtkZWJ1Z2dlci8qLmNdCglMb3RzIG9mIGJ1aWx0LWluIGRlYnVnZ2VyIGltcHJvdmVtZW50czogcGFyc2UgV2luMzIgRVhFcyBkZWJ1ZwogCWluZm9ybWF0aW9uLCBkaXNwbGF5IGxvY2FsIHZhcmlhYmxlcywgc291cmNlIGZpbGVzIGFuZCBsaW5lCiAJbnVtYmVycywgZ2V0IHN5bWJvbHMgZGlyZWN0bHkgZnJvbSB0aGUgV2luZSBleGVjdXRhYmxlLCBldGMuCgpUdWUgRGVjIDE3IDIyOjM5OjQyIDE5OTYgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CgoJKiBbbWlzYy93aW5zb2NrX2FzeW5jLmNdCiAJRXh0ZXJuIGRlY2xhcmF0aW9uIGFkZGVkIGZvciBoX2Vycm5vLgoKVHVlIERlYyAxNyAyMToyOTozNCAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJQWRkZWQgdHdvIG1vcmUgQ0JUIGhvb2sgY2FsbHM6IEhDQlRfQ0xJQ0tTS0lQUEVEL0hDQlRfS0VZU0tJUFBFRC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIERlYyAxNSAxNjoxODoxNSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtncmFwaGljcy94MTFkcnYvYml0Ymx0LmNdCglGaXhlZCBCSVRCTFRfU3RyZXRjaEltYWdlIGZvciBwYXJ0aWFsbHkgY292ZXJlZCBvciBpbnZlcnRlZAoJYml0bWFwcy4KCgkqIFtvYmplY3RzL2RpYi5jXQoJRml4ZWQgdGhlIHVwc2lkZS1kb3duIGJpdG1hcCBwcm9ibGVtLgoKU2F0IERlYyAxNCAwMjo0OTo1NyAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2lmMTYzMi91c2VyMzIuc3BlY10KCUlzTWVudSBhbmQgUmVtb3ZlTWVudSBhZGRlZCAodXNlIGV4aXN0aW5nIFdpbjE2IGZ1bmN0aW9ucykuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglDb3JyZWN0aW9ucyB0byBCSVRNQVBJTkZPSEVBREVSIHN0cnVjdHVyZS4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCU5ldyBmdW5jdGlvbiBHZXRNb2R1bGVGaWxlTmFtZTMyQSAoaGVhdmlseSBiYXNlZCBvbiBvcmlnaW5hbAoJV2luMTYgdmVyc2lvbikuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglIYWNrIHRvIGFsbG93IGZpbGVzIHdpdGggc2hvcnQgUEUgaGVhZGVyIHRvIGJlIGxvYWRlZCAoZS5nLgoJQ09NRExHMzIuRExMIGZyb20gV2luMzJzKS4KCgkqIFttaXNjL3dpbnNvY2tfYXN5bmMuY10KCSNpZiBvdXQgRUlEUk0gY2FzZSAobm90IHByZXNlbnQgaW4gRnJlZUJTRCkuCgoJKiBbdG9vbHMvYnVpbGQuY10KCVJlbW92ZSB0cmFpbGluZyBjb21tZW50cyBmcm9tIC5zIGZpbGVzIGdlbmVyYXRlZCBieSBidWlsZAoJYXMgdGhlc2UgYnJlYWsgYXNzZW1ibHkgd2hlbiBub3QgcnVuIHRocm91Z2ggcHJlLXByb2Nlc3Nvci4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdIFtpZjE2MzIvZ2RpMzIuc3BlY10KCU5ldyBmdW5jdGlvbiBQb2x5bGluZTMyIC0gYmFzZWQgb24gb3JpZ2luYWwgUG9seWxpbmUuIE5lZWRzCgltZXRhZmlsZSBzdXBwb3J0IGFkZGluZyBzdGlsbC4KCkZyaSBEZWMgMTMgMTM6MDQ6MDYgMTk5NiAgQnJ1Y2UgTWlsbmVyIDxCcnVjZS5NaWxuZXJAZ2VuZXRpY3MudXRhaC5lZHU+CgoJKiBbd2luMzIvZmluZGZpbGUuY10gW2lmMTYzMi9rZXJuZWwuc3BlY10KCUZpbmRGaXJzdEZpbGUzMkEoKTogVXNlIGRvcyBjdXJyZW50IGRpcmVjdG9yeSBmb3IgZHJpdmUgcHJlZml4ZXMuCglGaW5kTmV4dEZpbGUzMkEoKTogRmlsbCBpbiBmaWxlIGF0dHJpYnV0ZSBpbmZvcm1hdGlvbi4KCUltcGxlbWVudCBGaW5kRmlyc3RGaWxlMTYsIEZpbmROZXh0RmlsZTE2LCBGaW5kQ2xvc2UxNi4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJR2V0Q3VycmVudERpcmVjdG9yeTMyQSAtIEZpeCBwcm9ibGVtIHdpdGggbnVsbCAzcmQgY2hhcmFjdGVyIGluCglzdHJpbmcuCgpUdWUgRGVjIDEwIDE0OjQ5OjA3IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY11bd2luZG93cy9tZXNzYWdlLmNdCglEb24ndCB1c2UgbGlua2VkIGxpc3RzIHRvIGNhbGwgU2VuZE1lc3NhZ2UoKSwgZm9yIGl0IG1pZ2h0IGRlc3Ryb3kKIAl0aGUgY3VycmVudCBsaXN0ZW50cnkuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJRml4ZWQgdGVtcG9yYXJ5IGZpbGUgc2F2aW5nIChyZW5hbWUgZG9lc24ndCB3b3JrIGFjcm9zcwoJcGFydGl0aW9ucykuCgoJKiBbZmlsZXMvKi5jXQoJR2V0RnVsbFBhdGhOYW1lKixHZXREcml2ZVR5cGUzMkEgZml4ZWQsIENyZWF0ZURpcmVjdG9yeUV4KiwKCUdldFZvbHVtZUluZm9ybWF0aW9uMzJXIGZpeGVkLgoKCSogW3dpbjMyL3Byb2Nlc3MuY11baWYxNjMyL2tlcm5lbC5zcGVjXVtpZjE2MzIva2VybmVsMzIuc3BlY10KCUxvYWRMaWJyYXJ5KiB1cGRhdGVkIHRvIG5ldyBuYW1pbmcgc3RkLiwgKjMyVyBhZGRlZC4KCgkqIFt3aW4zMi9jb25zb2xlLmNdIFtpbmNsdWRlL3dpbmNvbi5oXQoJQWRkaXRpb25zIGZvciBOVCBjb21tYW5kbGluZSBleGVjdXRhYmxlcy4KCgkqIFtpZjE2MzIvYWR2YXBpMzIuc3BlY11baWYxNjMyL2tlcm5lbDMyLnNwZWNdW3dpbjMyL2luaXQuY10JCglHZXRVc2VyTmFtZTMyVyBhZGRlZCwgR2V0Q29tcHV0ZXJOYW1lMzJXIGFkZGVkLAoJR2V0U3RhcnR1cEluZm8zMlcgYWRkZWQsIEdldFN5c3RlbUluZm8gdXBkYXRlZCB0byBOVCBzdGFuZGFyZC4KCgkqIFt3aW5kb3dzL21zZ2JveC5jXVttaXNjL3NoZWxsLmNdW3dpbmRvd3MvZ3JhcGhpY3MuY10KCU1lc3NhZ2VCb3gzMlcsIFNoZWxsQWJvdXQzMlcsIENvbW1hbmRMaW5lVG9Bcmd2VywgUG9seWdvbjMyIGFkZGVkLgoKCSogW21pc2MvY3J0ZGxsLmNdW2luY2x1ZGUvY3J0ZGxsLmhdW2lmMTYzMi9jcnRkbGwuc3BlY11bbWlzYy9udGRsbC5jXQoJICBbaWYxNjMyL250ZGxsLnNwZWNdCglMb3Qgb2YgbmV3IHVuaWNvZGUgZnVuY3Rpb25zIGFkZGVkIChuZWVkZWQgZm9yIE5UKS4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCU50Q3VycmVudFRlYiBhZGRlZC4KClR1ZSBEZWMgMTAgMjI6Mzk6MzMgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdCglSZXdyb3RlIGZ1bmN0aW9uIFRyYW5zbGF0ZUFjY2VsZXJhdG9yKCkuCgpNb24gRGVjICA5IDE0OjUyOjEzIDE5OTYgIFNsYXZlbiBSZXppYyAgPGVzZXJ0ZUBjcy50dS1iZXJsaW4uZGU+CgoJKiBbd2luZG93cy9kZWZ3bmQuY10gCglERUZXTkRfU2V0VGV4dCgpOiBTZXQgaWNvbiBuYW1lLgoKU3VuIERlYyAgOCAyMzozMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW2xvYWRlci9zaWduYWwuY10gW21pc2Mvd2luc29jay5jXSBbbWlzYy93aW5zb2NrX2FzeW5jLmNdCgkgIFtpZjE2MzIvd2luc29jay5zcGVjXQoJSVBDIHJlc291cmNlIGNsZWFudXAsIGJ1Z2ZpeGVzLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdIFt3aW5kb3dzL2RlZmRsZy5jXQoJTW9yZSBEZWZEbGdQcm9jKCkgZml4ZXMuCgpTdW4gRGVjICA4IDE0OjAxOjQyIDE5OTYgIFZhZGltIFN0cml6aGV2c2t5ICA8c3RyaXZAbXMuY29tPgoKCSogW21pc2MvY2xpcGJvYXJkLmNdIFtvYmplY3RzL2ZvbnQuY10gW3dpbjMyL2luaXQuY10KIAkgIFt3aW4zMi9uZXdmbnMuY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUFkZGVkIGEgZmV3IFdJTjMyIGZ1bmN0aW9ucyB3aGljaCBuZWVkZWQgdG8gcnVuIHNvbWUgd2luMzIKCWFjY2Vzc29yaWVzLiBDbG9jayBzaG91bGQgbm93IHdvcmsgYWxtb3N0IGFzIHdlbGwgYXMgMTYgYml0IHZlcnNpb24uCglBZGQ6IFJlZ2lzdGVyQ2xpcGJvYXJkRm9ybWF0MzJXIEdldFRleHRFeHRlbnRFeFBvaW50MzIqCgkgICAgIEdldE1vZHVsZUhhbmRsZVcsIERpc2FibGVUaHJlYWRMaWJyYXJ5Q2FsbHMgKGVtcHR5IHN0dWIpLAoJICAgICBQb2x5Z29uMzIKCUZpeDogUG9seWdvbjE2IHBvc3NpYmxlIG1lbW9yeSBsZWFrIG9uIGVycm9yIHJldHVybi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIERlYyAgOCAxNDo1MTo1NyAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb25maWd1cmUuaW5dCglBZGRlZCBjaGVjayB0byBzZWUgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGJ1aWxkaW5nIGEgRExMIHdoZW4KCXRoZSAtLXdpdGgtZGxsIG9wdGlvbiBpcyB1c2VkLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCURvbid0IHNlbmQgTEJOX1NFTENIQU5HRSB0b28gb2Z0ZW4uCglBZGRlZCBXTV9DSEFSVE9JVEVNIHN1cHBvcnQuCgoJKiBbTWFrZS5ydWxlcy5pbl0gW2xpYnJhcnkvTWFrZWZpbGUuaW5dCglCdWlsZCB3aW5lc3R1Yi5vIGFuZCBsaW5rIGl0IHdpdGggV2luZWxpYiBwcm9ncmFtcy4KCgkqIFtvYmplY3RzL3RleHQuY10KCUFkZGVkIHN1cHBvcnQgZm9yICcmJicgaW4gRHJhd1RleHQoKS4KCgkqIFt0b29scy9idWlsZC5jXQoJQWRkZWQgLW8gb3B0aW9uLgoKU2F0IERlYyA3IDEyOjA3OjA3IDE5OTYgIEFuZHJldyBMZXd5Y2t5IDxwbGV3eWNreUBvaXNlLnV0b3JvbnRvLmNhPgoKCSogW3dpbjMyL3RocmVhZC5jXQoJR2V0Q3VycmVudFRocmVhZCgpOiByZXR1cm4gLTIgKGN1cnJlbnQgdGhyZWFkIHBzZXVkby1oYW5kbGUpLgoJR2V0Q3VycmVudFRocmVhZElkKCk6IHJldHVybiBHZXRDdXJyZW50VGFzaygpLgoKCSogW29iamVjdHMvZm9udC5jXSBbaWYxNjMyL2dkaTMyLnNwZWNdCglHZXRUZXh0RXh0ZW50UG9pbnQzMntBLFd9QnVnZ3koKTogZm9yIGZ1dHVyZSBidWctY29tcGF0aWJpbGl0eS4KCgkqIFt3aW4zMi9maW5kZmlsZS5jXQoJRmluZENsb3NlKCk6IGlnbm9yZSBJTlZBTElEX0hBTkRMRV9WQUxVRSAobGlrZSBXaW45NSkuCgoJKiBbd2luZG93cy9ob29rLmNdIFtpbmNsdWRlL2hvb2suaF0gW2lmMTYzMi91c2VyLnNwZWNdCgkgIFtpZjE2MzIvdXNlcjMyLnNwZWNdIFt3aW5kb3dzL2ZvY3VzLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCSAgW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy93aW5wb3MuY10KCUhvb2tzIHJld3JpdHRlbiB0byBzdXBwb3J0IFdpbjMyLgoKCSogW21pc2Mvd2luc29jay5jXQoJV0lOU09DS19zZWxlY3QoKTogbmVlZCB0byBwdXQgc29ja2V0cyB3aXRoIGVycm9ycyBpbnRvIGV4Y2VwdGZkcy4KCVdJTlNPQ0tfc29ja2V0KCk6IGZpeCBlcnJvciByZXR1cm4uCgoJKiBbd2luZG93cy93aW4uY10KCVNldFdpbmRvd1dvcmQoKTogY2FsbCBTZXRQYXJlbnQgb24gR1dXX0hXTkRQQVJFTlQuCgpXZWQgRGVjICA0IDIyOjAzOjA1IDE5OTYgIEFuZHJldyBUYXlsb3IgPGF0YXlsb3JAY2FkdmlzaW9uLmNvbT4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCUNoZWNrIGlmIGJ1ZiBpcyBOVUxMIGJlZm9yZSBjb3B5aW5nIHN0cmluZyBpbiBHZXRGdWxsUGF0aE5hbWUzMkEoKS4KCldlZCBEZWMgIDQgMjE6NDA6NTkgMTk5NiAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KCiAgICAgICAgKiBbZ3JhcGhpY3Mvd2luZy5jXSBbaWYxNjMyL3dpbmcuc3BlY10KCUltcGxlbWVudGVkIG1hbnkgV2luRyBmdW5jdGlvbnMsIGJ1dCBzb21lIGRvbid0IHNlZW0gdG8KCXdvcmsgY29ycmVjdGx5IChwcm9iYWJseSBkdWUgdG8gdGhlIG9uZSBub3QgZG9uZSkuCgkKV2VkIERlYyAgNCAwMzozODoyNSAxOTk2ICBMZWUgSmFla2lsIDxqdXJpYUBwdW1hLmthaXRlY2gucmUua3I+CgoJKiBbbWlzYy9tYWluLmNdCglJbXBsZW1lbnRlZCBhIGZldyBtb3JlIG9mIHRoZSBTeXN0ZW1QYXJhbWV0ZXJzSW5mbygpIGNhc2VzLgoKU3VuIERlYyAgMSAyMjozMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PiAKCgkqIFtjb250cm9scy9idXR0b24uY10KCUltcHJvdmVkIGZvY3VzIHJlY3RhbmdsZSBwYWludGluZy4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXSBbd2luZG93cy9kZWZkbGcuY10KCUZpeGVkIElFMy4wIHByb2JsZW1zIHdpdGggRFdMX01TR1JFU1VMVC4KClN1biBEZWMgIDEgMjA6NDk6MzIgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtmaWxlcy9wcm9maWxlLmNdCglDaGFuZ2VkIGVycm9yIGhhbmRsaW5nIGluIFBST0ZJTEVfU2V0U3RyaW5nKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBOb3YgMzAgMTk6MjE6MTcgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29uZmlndXJlXQoJUmUtZ2VuZXJhdGVkIHdpdGggYXV0b2NvbmYgMi4xMS4gTGV0IG1lIGtub3cgaWYgeW91IGhhdmUKCXByb2JsZW1zLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10gW2NvbnRyb2xzL29sZGxib3guY10KCUxpc3Rib3hlcyByZXdyaXR0ZW4gZnJvbSBzY3JhdGNoLiBNb3ZlZCBvbGQgY29kZSBzdGlsbCB1c2VkIGJ5Cgljb21ib2JveGVzIHRvIG9sZGxib3guYwoKCSogW21pc2MvcmVnaXN0cnkuY10KCVVzZSB0ZW1wb3JhcnkgZmlsZSB3aGVuIHNhdmluZyByZWdpc3RyeS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBEbGdEaXJMaXN0KCkgYW5kIERsZ0Rpckxpc3RDb21ib0JveCgpLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJQWRkZWQgdHJhbnNsYXRpb24gZm9yIGxpc3Rib3ggV2luMzIgbWVzc2FnZXMuCgpTYXQgTm92IDMwIDIxOjAwOjAwIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXSBbY29udHJvbHMvYnV0dG9uLmNdCglGaXhlZCBzb21lIGluY29tcGF0aWJpbGl0aWVzIHdpdGggQ1RMM0QgRExMLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglNYWRlIGRpYWxvZyB3aW5kb3dzIGZpdCBpbnRvIHRoZSBkZXNrdG9wLgoKCSogW21pc2Mvd2luc29jay5jXSBbbWlzYy93aW5zb2NrX2FzeW5jLmNdCglOZXcgV2luc29jayBlbmdpbmUuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglHZXRNZXNzYWdlKCkgZml4ZXMuCgoJKiBbd2luZG93cy9xdWV1ZS5jXSBbd2luZG93cy9ob29rLmNdIFt3aW5kb3dzL3dpbi5jXQoJU2V0TWVzc2FnZVF1ZXVlKCkgZml4ZXMuCgpGcmkgTm92IDI5IDEwOjI1OjEyIDE5OTYgIFNsYXZlbiBSZXppYyAgPGVzZXJ0ZUBjcy50dS1iZXJsaW4uZGU+CgoJKiBbb2JqZWN0cy90ZXh0LmNdCglEcmF3VGV4dDE2KCk6IEZpeGVkIHJldHVybiB2YWx1ZS4KClR1ZSBOb3YgMjYgMTQ6NDc6MDkgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZmlsZXMvcHJvZmlsZS5jXSBbKi8qXQoJQWRkZWQgV2luMzIgcHJvZmlsZSBmdW5jdGlvbnMsIHVwZGF0ZWQgdG8gbmV3IG5hbWluZyBzdGFuZGFyZC4KCgkqIFtvYmplY3RzL2ZvbnQuY10gW2lmMTYzMi90aHVuay5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBFbnVtRm9udHMzMiosIEVudW1Gb250RmFtaWxpZXNFeCosIGNoYW5nZWQgcHJvdG90eXBlcyBhbmQKCXN0cnVjdHVyZXMuCgoJKiBbbWlzYy9vbGUybmxzLmNdIFtpZjE2MzIvdGh1bmsuY10KCUFkZGVkIEVudW1TeXN0ZW1Mb2NhbGVzKCkgKHdpbmhlbHAuZXhlKS4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglBZGRlZCBXaW5kb3dzIDMuMSByZWdpc3RyeSBsb2FkZXIgc3VwcGxpZWQgYnkgVG9yIFNqeHdhbGwsIHRvckBzbi5ubwoKCSogW3dpbjMyL2ZpbGUuY10KCVBhcnRpYWxseSBmaXhlZCBDcmVhdGVGaWxlTWFwcGluZygpLCBhZGRlZCBVbm1hcFZpZXdPZkZpbGUoKS4KClNhdCBOb3YgMjMgMjM6MzY6MDUgMTk5NiAgUm9uYW4gV2FpZGUgIDx3YWlkZXJAd2FpZGVyLmllPgoKCSogW21pc2Mvc2hlbGwuY10KCUZpeGVkIHNvbWUgRklYTUVzIHJlbGF0aW5nIHRvIFNoZWxsRXhlYygpIGFuZCBGaW5kRXhlY3V0YWJsZSgpLgoKCSogW21pc2MvbWFpbi5jXQoJSW1wbGVtZW50ZWQgYSBmZXcgbW9yZSBvZiB0aGUgU3lzdGVtUGFyYW1ldGVyc0luZm8oKSBjYXNlcy4KClR1ZSBOb3YgMTkgMDE6MjQ6MzQgMTk5NiAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFtpbmNsdWRlL2tleWJvYXJkLmhdCglOZXcgZmlsZSwgbmV3IG1hY3JvIFdJTkVfVktFWV9NQVBQSU5HUyAodXNpbmcgY29kZSB0YWtlbiBmcm9tIGV2ZW50LmMpLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJTmV3IFtWS19BLCBWS19aXSBhbmQgW1ZLXzAsIFZLOV0gbWFjcm9zLgoKCSogW21pc2Mva2V5Ym9hcmQuY10KCUZpeGVzIGluIEtleVRhYmxlIGFuZCBUb0FzY2lpLgoKCSogW29iamVjdHMvZm9udC5jXQoJRk9OVF9pbml0IDogR2l2ZSBkZWZhdWx0IHZhbHVlIGZvciBNU1dJTiAic3lzdGVtIiBmb250LgoJRk9OVF9NYXRjaEZvbnQgOiBEbyBub3QgdHJ5IGV2ZXJ5IHNpemUgb2YgYSBmb250IGZhbWlseSBpZiB0aGUKCWZhbWlseSBkb2VzIG5vdCBleGlzdC4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglsYXN0RXZlbnRDaGFyIGhhY2sgcmVtb3ZlZC4KCUtleVN0YXRlVGFibGUgcmVwbGFjZWQgYnkgSW5wdXRLZXlTdGF0ZVRhYmxlIChtYWludGFpbmVkIGluIGV2ZW50LmMpCglhbmQgUXVldWVLZXlTdGF0ZVRhYmxlIChtYWludGFpbmVkIGluIG1lc3NhZ2UuYykuCglFVkVOVF9rZXkgOiBDb3JyZWN0aW9ucyB0byB0aGUgZXh0ZW5kZWQgYml0IHNldHRpbmcuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL2tleWJvYXJkLmNdCglJbXBsZW1lbnRhdGlvbiBvZiBhIG5ldyBRdWV1ZUtleVN0YXRlVGFibGUgOiB0YWJsZSBvZiBrZXkgc3RhdGVzCgl2YWxpZCB3aGVuIG1lc3NhZ2VzIGFyZSByZXRyaWV2ZWQgYnkgR2V0TWVzc2FnZSBvciBQZWVrTWVzc2FnZSwKCWFuZCB2YWxpZCBmb3IgVHJhbnNsYXRlTWVzc2FnZS4KCVRyYW5zbGF0ZU1lc3NhZ2UgOiBDb252ZXJ0IFdNKktFWSBtZXNzYWdlcyB1c2luZyBRdWV1ZUtleVN0YXRlVGFibGUKCWFuZCBUb0FzY2lpLgoJCk1vbiBOb3YgMTggMTY6NTk6MDEgMTk5NiAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KCgkqIFtncmFwaGljcy9NYWtlZmlsZS5pbl0gW2dyYXBoaWNzL3dpbmcuY10KCSAgW2lmMTYzMi93aW5nLnNwZWNdCglTb21lIGZ1bmN0aW9ucyBmb3IgV2luRyBzdXBwb3J0LCBtb3N0bHkgZW1wdHkgc3R1YnMuCgoJKiBbbWlzYy9jcnRkbGwuY10gW2lmMTYzMi9jcnRkbGwuc3BlY10KCU1hbnkgZnVuY3Rpb25zIGFkZGVkIHRvIENSVERMTCwgbW9zdGx5IGNhbGxzIHRvIFVuaXggQyBsaWJyYXJ5LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTm92IDE3IDE1OjAxOjQ1IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2dyYXBoaWNzL2JpdGJsdC5jXSBbZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jXQoJTW92ZWQgQml0Qmx0IG9wZXJhdGlvbnMgdG8gdGhlIG5ldyBncmFwaGljcyBkcml2ZXIKCWludGVyZmFjZS4gSW1wbGVtZW50ZWQgUGF0Qmx0MzIsIEJpdEJsdDMyIGFuZCBTdHJldGNoQmx0MzIuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJVW5pZmllZCBNZW1NYW5JbmZvKCkgYW5kIEdsb2JhbE1lbW9yeVN0YXR1cygpLgoKCSogW29iamVjdHMvdGV4dC5jXQoJRml4ZWQgRXh0VGV4dE91dCgpIHRvIGFsd2F5cyB1c2UgcGh5c2ljYWwgY29vcmRzIGZvciBjbGlwIHJlY3QuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUltcGxlbWVudGVkIERsZ0RpclNlbGVjdEV4KCkgYW5kIFdpbjMyIHZlcnNpb24gb2YgRGxnRGlyU2VsZWN0Ki4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglBdm9pZCBidXN5LWxvb3BpbmcgaW4gRVZFTlRfV2FpdFhFdmVudCB3aGVuIG5vIHRpbWVyIGlzIHBlbmRpbmcKCSh0aGFua3MgdG8gVGhvbWFzIEtvZW5pZykuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJTW92ZWQgdXBkYXRlIHJlZ2lvbiBjbGlwcGluZyBmb3IgQ1NfUEFSRU5UREMgd2luZG93cyB0byBCZWdpblBhaW50KCkuCgkKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIFNjcm9sbFdpbmRvdygpIGFuZCBTY3JvbGxEQygpLgoKVHVlIE5vdiAxMiAwOTo1MjoxNyAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtmaWxlcy8qLmNdIFt3aW4zMi9maWxlLmNdCglTb21lIHdpbjMyIGZpbGV0aW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFkZGVkLgoJRml4ZWQgYmVoYXZpb3VyIHdpdGggRE9TIGRyaXZlcyBwb2ludGluZyB0byBVTklYIC8KCVNldEN1cnJlbnREaXJlY3RvcnkoKSBtYXkgYWxzbyBnZXQgWDpceHh4IHBhdGhzLgoJRml4ZWQgRklMRV9PcGVuIHdoZW4gY2FsbGVkIGZyb20gQ3JlYXRlRmlsZSgpLgoJQWRkZWQgR2V0RmlsZVNpemUoKSwgTWFwVmlld09mRmlsZSgpLCBTZXRGaWxlVGltZSgpLCBHZXRGaWxlVGltZSgpLgoKCSogW21pc2MvY3J0ZGxsLmNdIFtpZjE2MzIvY3J0ZGxsLnNwZWNdCglBZGRlZCBzb21lIG5ldyBmdW5jdGlvbnMuCgoJKiBbaWYxNjMyL3VzZXIzMi5zcGVjXQoJU29tZSB0aHVua3MgaW50byB3aW4xNiBjb2RlIGFkZGVkLgoKCSogW3dpbjMyL2luaXQuY10KCUFkZGVkIEdldFN5c3RlbUluZm8oKSwgcmVtb3ZlZCBHZXRNb2R1bGVGaWxlTmFtZSgpIHN0dWIuCgoJKiBbd2luMzIvY29kZV9wYWdlLmNdIFtpZjE2MzIvdGh1bmsuY10KCUFkZGVkIEVudW1TeXN0ZW1Db2RlUGFnZXMqICh1bnRlc3RlZCkuCgoJKiBbb2JqZWN0cy9mb250LmNdIFtpZjE2MzIvdGh1bmsuY10KCUFkZGVkIEVudW1Gb250RmFtaWxpZXMzMiouCgkKTW9uIE5vdiAxMSAxNDo1MDoyNCAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy9tZGkuY10KCURvbid0IGRlbGV0ZSB0aGUgTURJIGB3aW5kb3dzJyBtZW51IGlmIGl0J3MgYWxyZWFkeSBiZWVuIGRlbGV0ZWQuCgoJKiBbbWlzYy9leGVjLmNdCglOb3RlcGFkIGFsd2F5cyBjYWxscyBXaW5IZWxwKC4uLCBIRUxQX1FVSVQsIC4uLikgYXQgdGVybWluYXRpb24KIAlhbmQgY29tcGxhaW5zIGlmIGl0IHJldHVybnMgRkFMU0UuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUdldCBtYXhpbWl6ZWQgTURJIGNoaWxkJ3Mgbm9uY2xpZW50IGFyZWEgcmVkcmF3biBhZnRlciByZXNpemUuCgpUaHUgTm92ICA3IDEzOjMyOjM0IDE5OTYgIExlZSBKYWVraWwgPGp1cmlhQHNlb2R1LmNvLmtyPgoKCSogW21lbW9yeS9nbG9iYWwuY10KCVVzZSAvcHJvYyBmaWxlc3lzdGVtIGZvciBHbG9iYWxNZW1vcnlTdGF0dXMoKSBvbiBMaW51eC4KCk1vbiBOb3YgIDQgMTg6MzA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglBZGRlZCBPZmZpWC1zdHlsZSBmaWxlIGRyb3AgaGFuZGxpbmcuIEZpbGUgcGF0aHMgbXVzdCBiZQoJRE9TLW1hcHBhYmxlIGJ5IFdpbmUgKHZpYSB3aW5lLmNvbmYpLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCiAgICAgICAgQWRkZWQgV01fR0VUVEVYVCBoYW5kbGVyLgoKCSogW29iamVjdHMvcGFsZXR0ZS5jXQoJQWRkZWQgUmVzaXplUGFsZXR0ZSgpICh1bnRlc3RlZCkuCgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCglJbXBsZW1lbnRlZCBpY29uIHRvIGN1cnNvciBjb252ZXJzaW9uLgoKCSogW29iamVjdHMvY29sb3IuY10KCUZpeGVkIGNyYXNoIG9uIHN0YXJ0dXAgd2hlbiBubyBjb2xvcmNlbGxzIGFyZSB3cml0ZWFibGUuCgpNb24gTm92ICA0IDAwOjQ5OjQxIDE5OTYgIFVscmljaCBTY2htaWQgIDx1c2NobWlkQG1haWwuaGgucHJvdmkuZGU+CgoJKiBbcmMvd2luZXJjLmNdCglBZGRlZCBzdXBwb3J0IGZvciB3aW4zMiBvdXRwdXQuCgoJKiBbbGlicmFyeS9saWJyZXMuY10gW2luY2x1ZGUvbGlicmVzLmhdIFtsb2FkZXIvcmVzb3VyY2UuY10KCVJlbmFtZWQgTElCUkVTX0ZpbmRSZXNvdXJjZSB0byBMSUJSRVNfRmluZFJlc291cmNlMTYuCglBZGRlZCBMSUJSRVNfRmluZFJlc291cmNlMzIuCgpTdW4gTm92IDMgMjE6MjE6NDUgMTk5NiAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KCgkqIFtsb2FkZXIvYnVpbHRpbi5jXSBbaWYxNjMyL01ha2VmaWxlLmluXSBbaWYxNjMyL3dpbmcuc3BlY10KCUFkZGVkIHRoZSBzcGVjIGZpbGUgZm9yIFdpbkcsIGl0J3Mgb25seSBzdHViIGZvciBub3csIGJ1dCBpdAoJc2hvdWxkIGJlIGVhc3kgdG8gZG8gYnkgc29tZW9uZSB3aXRoIFdpbmRvd3MgcHJvZ3JhbW1pbmcKCWtub3dsZWRnZS4gU2VlOiBmdHAubWljcm9zb2Z0LmNvbS9Tb2Z0TGliL01TTEZJTEVTL3dpbmcxMC5leGUuCgoJKiBbaWYxNjMyL2NydGRsbC5zcGVjXQoJQWRkZWQgc29tZSBzdHJpbmcgYW5kIG1lbW9yeSBmdW5jdGlvbnMgdG8gbWFrZSBzZnhlZDk1LmV4ZSAob2YKIAlXYXJjcmFmdCAyKSBhbG1vc3Qgd29yay4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IE5vdiAgMiAxMjo1MDo0MCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCUFkZGVkIGxvbmcgZmlsZSBuYW1lIG1hc2sgaW4gRE9TRlNfRmluZE5leHQoKS4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10gW2xvYWRlci90YXNrLmNdCglNb3ZlZCBXaW4zMiB0YXNrIHN0YXJ0dXAgaW50byBUQVNLX0NhbGxUb1N0YXJ0KCkuCgoJKiBbb2JqZWN0cy9kYy5jXQoJRml4ZWQgU2V0RENTdGF0ZSgpIGZvciBtZW1vcnkgREMgKHRoYW5rcyB0byBDb25zdGFudGluZQoJU2FwdW50emFraXMgZm9yIHNwb3R0aW5nIHRoaXMgb25lKS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJRml4ZWQgV0lOUE9TX0ZvcmNlWFdpbmRvd1JhaXNlKCkgdG8gcHJlc2VydmUgY29ycmVjdCBaLW9yZGVyLgoKCSogWyovKl0KCUFkZGVkIFdpbjMyIHZlcnNpb24gZm9yIG1hbnkgZ3JhcGhpY3MgZnVuY3Rpb25zLgoKVGh1IE9jdCAzMSAxMDowMDoxOCAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglCVVRUT05fQ2hlY2tBdXRvUmFkaW9CdXR0b24oKSB1bmNoZWNrcyBvbmx5IGF1dG8gcmFkaW8gYnV0dG9ucy4KCgkqIFtjb250cm9scy9lZGl0LmNdCglFTV9HRVRTRUwgcmVzdWx0IHNob3VsZCBoYXZlIEhJV09SRChyZXN1bHQpID49IExPV09SRChyZXN1bHQpOyBvbGQKCUVESVRfRU1fR2V0U2VsKCkgcmVuYW1lZCB0byBFRElUX0dldFNlbCgpLiAKCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJRFNfTE9DQUxFRElUIGlzIGEgZGlhbG9nIHN0eWxlIG5vdCBhbiBlZGl0IHN0eWxlLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJU3RvcCBzdGFjayB0cmFzaGluZyB3aGVuIHduZFB0ci0+dGV4dCA9PSBOVUxMLgoKVHVlIE9jdCAyOSAyMzozNTowNCAxOTk2ICAgQ29uc3RhbnRpbmUgUCBTYXB1bnR6YWtpcyA8Y3NhcHVudHpAbWl0LmVkdT4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJR2V0RENFeDMyIC0gVGhlIGRldGVybWluYXRpb24gb2Ygd2hldGhlciB0byB1c2UgdGhlIERDIGNhY2hlIG9yCiAJbm90IHNob3VsZCBiZSBpbmRlcGVuZGVudCBvZiBEQ1hfVVNFU1RZTEUuCgpTYXQgT2N0IDI2IDE3OjMxOjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdCglBZGRlZCBlcnJuby5oIHRvICNpbmNsdWRlcwoKCSogW3Rvb2xzL21ha2VkZXAuY10KCUNsb3NlIGZpbGVzIG9uY2UgdGhleSBoYXZlIGJlZW4gcHJvY2Vzc2VkLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgT2N0IDIyIDIwOjA5OjUyIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogWyovTWFrZWZpbGUuaW5dIFt0b29scy9tYWtlZGVwLmNdCglOZXcgcHJvZ3JhbSB0byBnZW5lcmF0ZSBkZXBlbmRlbmNpZXM7IHNob3VsZCBiZSBmYXN0ZXIgYW5kIG1vcmUKCXBvcnRhYmxlIHRoYW4gJ2djYyAtTU0nLgoKCSogWyovKl0KCVJlcGxhY2VkIFdQQVJBTSBhbmQgSERDIGJ5IGV4cGxpY2l0bHktc2l6ZWQgdHlwZXMuCgoJKiBbd2luZG93cy9ob29rLmNdCglGaXhlZCBidWcgaW4gSE9PS19HZXRIb29rMTYgZnVuY3Rpb24uCgpUaHUgT2N0IDE3IDA5OjEzOjUwIDE5OTYgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW2luY2x1ZGUvZGVidWcuaF0gW2luY2x1ZGUvc3RkZGVidWcuaF0KICAgICAgICBBZGRlZCBkZWJ1ZyBvcHRpb24gZm9yIHdpbjE2ZHJ2ICgtZGVidWdtc2cgK3dpbjE2ZHJ2KQoKCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10KICAgICAgICBPbmx5IGVuYWJsZSBDcmVhdGVEQyBpZiBwcmludGVyPW9uIHNwZWNpZmllZCBpbiB3aW5lIHNlY3Rpb24gb2YKIAl3aW5lLmNvbmYuCiAJcHJpbnRmcyBjaGFuZ2VkIHRvIGRwcmludGZfd2luMTZkcnYuCglTb21lIHRpZHlpbmcgdXAuCgoJKiBbaW5jbHVkZS9nZGkuaF0gW2dyYXBoaWNzL3gxMWRydi9jbGlwcGluZy5jXQoJICBbZ3JhcGhpY3MveDExZHJ2L01ha2VmaWxlLmluXQogICAgICAgIE1vdmVkIFNldERldmljZUNsaXBwaW5nIGludG8gZHJpdmVycy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE9jdCAxMyAxNTozMjozMiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtNYWtlLnJ1bGVzLmluXSBbKi9NYWtlZmlsZS5pbl0KCU1hZGUgaXQgcG9zc2libGUgdG8gY29tcGlsZSBmcm9tIGEgZGlyZWN0b3J5IG90aGVyIHRoYW4gdGhlIHNvdXJjZQoJZGlyZWN0b3J5LgoKCSogW2dyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuY10gW2luY2x1ZGUvbWV0YWZpbGVkcnYuaF0KCSAgW29iamVjdHMvbWV0YWZpbGUuY10gW29iamVjdHMvZGMuY10KCU5ldyBncmFwaGljcyBkcml2ZXIgZm9yIG1ldGFmaWxlcy4KCgkqIFtpZjE2MzIvdGh1bmsuY10KCUFkZGVkIHRodW5rcyBmb3IgU2V0V2luZG93c0hvb2sgYW5kIFNldERDSG9vay4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJRml4ZWQgR2V0TmV4dERsZ0dyb3VwSXRlbSBhbmQgR2V0TmV4dERsZ1RhYkl0ZW0gdG8gc2tpcCBkaXNhYmxlZAoJaXRlbXMuCgoJKiBbKi8qXQoJUmVtb3ZlZCBub24gV2luMzItY2xlYW4gdHlwZXMgSEFORExFLCBIQklUTUFQLCBIQlJVU0gsIEhGT05ULAogCUhJTlNUQU5DRSwgSE1FTlUsIEhSR04gYW5kIEhUQVNLLgoKV2VkIE9jdCAgOSAxNDo1OTo0NSAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciAgPGRvcnNzZWxAcnVsaG0xLkxlaWRlblVuaXYubmw+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRml4ZWQgRWRpdFduZFByb2MoKSB0byBmYWxsIGJhY2sgdG8gRGVmV25kUHJvYygpIHdoZW4gdGhlCgllZGl0IHN0YXRlIHN0cnVjdHVyZSBpcyBub3QgYXZhaWxhYmxlLgoKV2VkIE9jdCAgMiAxNDowMDozNCAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzICA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL21kaS5jXQoJQWRqdXN0V2luZG93UmVjdEV4MTYoKSBzaG91bGQgb25seSB0YWtlIG5vdGljZSBvZiB0aGUgc3R5bGVzCiAJV1NfRExHRlJBTUUsIFdTX0JPUkRFUiwgV1NfVEhJQ0tGUkFNRSBhbmQKIAlXU19FWF9ETEdNT0RBTEZSQU1FLiBUaGFua3MgdG8gQWxleCBLb3JvYmthLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJRml4ZWQgdHlwbyBpbiBTaG93U2Nyb2xsQmFyMzIoKS4KClN1biBBdWcgMjUgMjA6MTg6NTYgMTk5NiAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdIFtpZjE2MzIvd2lubW0uc3BlY10KCUFkZGVkIFNldFBhcmVudCBhbmQgc25kUGxheVNvdW5kQS4KCQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZyaSBTZXAgMjcgMTQ6MTg6NDIgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglGaXhlZCBmb2N1cyByZWN0YW5nbGUgc2l6ZSBhbmQgY2xpcHBpbmcuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglDb252ZXJ0ZWQgdG8gV2luMzIgYW5kIGFkZGVkIHN1cHBvcnQgZm9yIHNjcm9sbCBwYWdlLgoJQ29tcGxldGVkIFNldFNjcm9sbEluZm8oKSBhbmQgaW1wbGVtZW50ZWQgb3RoZXIgV2luMzIgZnVuY3Rpb25zLgoKCSogW2ZpbGVzL2ZpbGUuY10KCVJlbW92ZWQgRklMRV9SZWFkKCkgKHVzZSBfbHJlYWQzMiBpbnN0ZWFkKS4KCgkqIFtvYmplY3RzL2RjZS5jXSBbaW5jbHVkZS9kY2UuaF0KCUFsbG9jYXRlIERDRSBvbiB0aGUgV2luMzIgaGVhcCwgYW5kIHVzZSBwb2ludGVycyBpbnN0ZWFkIG9mCgloYW5kbGVzLgoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBEQyBmdW5jdGlvbnMuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJQXR0ZW1wdCB0byBtYWtlIENTX1BBUkVOVERDIHN0eWxlIHdvcmsgYWdhaW4uCgpXZWQgU2VwIDI1IDIzOjQwOjUyIDE5OTYgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL2RjZS5jXSBbd2luZG93cy93aW5wb3MuY10KCU92ZXJyaWRlIFNhdmVVbmRlciBhdHRyaWJ1dGUgd2hlbiBwYWludGluZyB0b29rIHBsYWNlCglpbiBhIHdpbmRvdyBiZWxvdy4gRm9yY2UgWCB0byByYWlzZSBhY3RpdmF0ZWQgd2luZG93IAoJaW4gc2VhbWxlc3MgbW9kZS4KCgkqIFttaXNjL2NsaXBib2FyZC5jXSBbd2luZG93cy9ldmVudC5jXQoJVHJhbnNsYXRpb24gYmV0d2VlbiBET1MgYW5kIFVuaXggdGV4dCBmb3JtYXRzIGFuZCBzZXZlcmFsCglvdGhlciBmaXhlcyBmb3IgdGhlIHN1ZGRlbiBzZWxlY3Rpb24gbG9zcy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUFwcGx5ICJmaXJzdCIgYW5kICJsYXN0IiB3aGVuIGNoZWNraW5nIGZvciBXTV9RVUlUIGluIAogICAgICAgIE1TR19QZWVrTWVzc2FnZSgpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglSZWFycmFuZ2VkIERlc3Ryb3lXaW5kb3coKSB0byBmaXQgIldpbmRvd3MgSW50ZXJuYWxzIgoJZGVzY3JpcHRpb24uCgoJKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3Mvd2lucG9zLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJTWlzYy4gZml4ZXMgdG8gQ0JUIGhvb2sgY2FsbHMuCgoJKiBbY29udHJvbHMvbWVudS5jXSBbbWlzYy91c2VyLmNdCglGaXh1cCByZXNpZGVudCBwb3B1cCBtZW51IHdpbmRvdyBzbyB0aGF0IGl0IGRvZXNuJ3QgZ2V0CglkZXN0cm95ZWQgYnkgVVNFUl9BcHBFeGl0KCkuCgoJKiBbbG9hZGVyL21vZHVsZS5jXSBbbG9hZGVyL3Rhc2suY10gW3dpbmRvd3MvZXZlbnQuY10KCVByb2Nlc3MgInVuc2FmZSIgWCBldmVudHMgb3V0c2lkZSB0aGUgc2NoZWR1bGVyIHRvIHByZXZlbnQKCWRlYWRsb2Nrcy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3MvcXVldWUuY10gW3dpbmRvd3Mvd2lucG9zLmNdCglMb3RzIG9mIGZpeGVzIGZvciBiZXR0ZXIgV2luMTYgbXVsdGl0YXNraW5nLgoKV2VkIFNlcCAyNSAyMDozNjozMCAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIHNvbWUgbWlzc2luZyBIT09LIGRlZmluZXMuCgoJKiBbbWlzYy9zaGVsbC5jXVtpZjE2MzIvc2hlbGwzMi5zcGVjXVtpbmNsdWRlL3NoZWxsLmhdCglTSEdldEZpbGVJbmZvQSBzdHViIGFkZGVkICh3aW45NSBtcGxheWVyLmV4ZSAvcGxheSBibGEuYXZpKS4KCgkqIFt3aW4zMi9jb25zb2xlLmNdW2luY2x1ZGUvd2luY29uLmhdCglHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbywgR2V0TGFyZ2VzdENvbnNvbGVXaW5kb3dTaXplIGFkZGVkLgoKCSogW21pc2MvcmVnaXN0cnkuY10KCVNvbWUgbnVsbCBwdHIgZml4ZXMuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglGaXhlZCBleHBvcnRlZCBmdW5jdGlvbiBsb29rdXAuIChtc3ZjcnQyMC5kbGwpCglBZGQgZGVidWdzeW1zIGZvciBlbnRyeXBvaW50LCBleHBvcnRlZCBmdW5jdGlvbnMgYW5kIHNlY3Rpb25zLgoKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KCU1DSU9wZW46IHN1cHBvcnQgZm9yIGVsZW1lbnQgb3BlbnMgKG1wbGF5ZXIuZXhlIC9wbGF5IGJsYS5hdmkpLgoKCSogW3NldmVyYWxdCglBZGRlZCBzZXZlcmFsIG1pc3NpbmcgdGhpbmdzL3N0dWJzL3NpbXBsZSB0aHVua3MgZnJvbSB3aW4zMgoJdG8gd2luMTYgY29kZS4KClNhdCBTZXAgMjEgMTc6Mjc6NDQgMTk5NiAgTy5GbGViYmUgIDxmbGViYmVAc2NpZW5jZS1jb21wdXRpbmcudW5pLXR1ZWJpbmdlbi5kZT4KCgkqIFt3aW5kb3dzL3Byb3BlcnR5LmNdCglGaXhlZCBkZWJ1Z2dpbmcgb2YgMTYgQml0IFJlbW92ZVByb3AoKS4KCgkqIFtkZWJ1Z2dlci9tZW1vcnkuY10KCUFkZGVkIERFQlVHX2NoZWNrbWFwX2JhZCgpIGZvciBsaW51eC4KClRodSBTZXAgMTkgMjA6NDg6MzEgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL2hvb2suY10KCVVzZSBFbmFibGVIYXJkd2FyZUlucHV0KCkgZm9yIEpvdXJuYWxQbGF5YmFjayBob29rLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUNoYW5nZWQgaGFuZGxpbmcgb2YgTEJfR0VUSVRFTVJFQ1QgaW4gZW1wdHkgbGlzdGJveGVzLgoKVGh1IFNlcCAxOSAxMzozNDozNSAxOTk2ICBTbGF2ZW4gUmV6aWMgIDxlc2VydGVAY3MudHUtYmVybGluLmRlPgoKCSogW21pc2MvbWFpbi5jXQoJRml4ZXMgdG8gWCByZXNvdXJjZXMgaGFuZGxpbmcuCQoKV2VkIFNlcCAxOCAwMDozMToxNSAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbaW5jbHVkZS9nZGkuaF0gW29iamVjdHMvZGMuY10KCUluZGl2aWR1YWwgaGFuZGxlIHRhYmxlIGNyZWF0ZWQgZm9yIGVhY2ggbWV0YWZpbGUuIEZpeGVkCiAJR2xvYmFsUmVBbGxvYygpIGJ1ZyBpbiBNRl9BZGRIYW5kbGVEQygpICh3YXMgTUZfQWRkSGFuZGxlSW50ZXJuYWwpLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10gW29iamVjdHMvZGMuY10KCVJlY3RhbmdsZSgpIGNoYW5nZWQgdG8gd29yayBiZXR0ZXIgd2l0aCB3aWRlIHBlbnMgYW5kIFBTX05VTEwuCglVc2UgSm9pbk1pdGVyLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglNYWtlIHRoZSB3aG9sZSAobm9uIFgpIHdpbmRvdyBpbnZhbGlkIG9uIHJlc2l6ZSBpZiBDU19bVkhdUkVEUkFXCiAJaXMgc2V0LgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBZGp1c3RXaW5kb3dSZWN0RXgoKSBzaG91bGQgcGVyZm9ybSBjYWxjdWxhdGlvbnMgZXZlbiBpZiB0aGUKIAl3aW5kb3cgaXMgbWluaW1pemVkLgoKCSogW3dpbmRvd3MvbWRpLmNdCglCZXR0ZXIgaGFuZGxpbmcgb2Ygc3lzdGVtIGJ1dHRvbiBwYWludGluZy4gTWF4aW1pemVkIHdpbmRvd3MgY2FuCiAJY29udGFpbiBzY3JvbGwgYmFycy4gSWNvbnMgbm93IG1heGltaXplIHByb3Blcmx5LgoKCSogW3dpbmRvd3MvZGVmd25kLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbY29udHJvbHMvbWVudS5jXQoJSW1wcm92ZWQgZ3JleWluZyBvZiBpdGVtcyBpbiBzeXN0ZW0gbWVudS4gV01fSU5JVE1FTVVQT1BVUCBubwogCWxvbmdlciBjYXVnaHQgaW4gRGVmV25kUHJvYywgREVGV05EX0luaXRTeXNNZW51UG9wdXAgbW92ZWQgdG8KIAltZW51LmMuCgpNb24gU2VwIDE2IDIxOjMwOjAwIDE5OTYgIFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnRoLWRhcm1zdGFkdC5kZT4KCgkqIFtzZXZlcmFsIGZpbGVzXQoJRml4IG1pc3NpbmcgaW5jbHVkZXMgYW5kIHdyb25nIHByaW50aW5nIGFyZ3VtZW50cy4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglEb24ndCBzb3J0IGRyaXZlcyBpbiBMaXN0Qm94RGlyZWN0b3J5KCkuCgkKU2F0IFNlcCAxNCAwOTowNTo0NyAxOTk2ICBQZXRyaSBUdW9tb2xhIDxwdHVvbW9sYUB4czRhbGwubmw+CgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUZpeGVkIGhhbmRsaW5nIG9mIFNoaWZ0LVRBQiBpbiBkaWFsb2dzLgoKVGh1IFNlcCAxMiAxODozMTowMCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXQoJQWRkZWQgU2VsZWN0Q2xpcFJnbiAtIGNhbGwgd2luMTYgdmVyc2lvbi4KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglBZGRlZCBHZXRBc3luY0tleVN0YXRlLCBHZXRNZW51SXRlbUlEIGFuZCBHZXRNZW51U3RyaW5nQS4KCgkqIFtpbmNsdWRlL3dpbmNvbi5oXQoJQWRkZWQgQ09PUkQgYW5kIFNNQUxMX1JFQ1QgdHlwZWRlZnMsIG1vdmVkIENPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPCglvdXQgb2YgI2lmIDAgcHJvdGVjdGVkIHBvcnRpb24gb2YgZmlsZS4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCVBFX0luaXRURUIoKSAtIFRpZHkgdXAsIGJ1ZyBmaXggdG8gc3RhY2sgcG9pbnRlciB2YWx1ZSAoQm9ybGFuZAoJcHJvZ3JhbXMgbm93IHdvcmsgYmV0dGVyKQoKCSogW3dpbjMyL2NvbnNvbGUuY10KCUFkZGVkIHN0dWIgZnVuY3Rpb25zIGZvciBHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyBhbmQgCglHZXRMYXJnZXN0Q29uc29sZVdpbmRvd1NpemUKCgkqIFt3aW4zMi9maW5kZmlsZS5jXQoJRmluZEZpcnN0RmlsZTMyQSgpIC0gcmVtb3ZlZCBlcnJvbmVvdXMgc3RyY3B5CgoJKiBbd2luZG93cy9rZXlib2FyZC5jXQoJR2V0QXN5bmNLZXlTdGF0ZSgpIC0gYnVnIGZpeCAtIG5vdyByZXR1cm5zIHZhbHVlIGFzIHBlciBNaWNyb3NvZnQKCXNwZWNpZmljYXRpb24uIE5CIC0gSSBzdGlsbCBoYXZlIGRvdWJ0cyBhYm91dCBzb21lIG90aGVyIGZ1bmN0aW9ucwoJaW4gdGhpcyBmaWxlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgU2VwIDExIDE4OjA4OjMwIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbd2luZG93cy9ldmVudC5jXQoJTWlub3IgaW1wcm92ZW1lbnRzIGluIHNldHRpbmcgZXZlbnQgdGltZSBpbiBNU0cgc3RydWN0LgoKCSogW3dpbmRvd3MvaG9vay5jXQoJUmVtb3ZlZCBhbiB1c2VsZXNzICd1bmltcGxlbWVudGVkIGhvb2snIG1lc3NhZ2UuCgoJKiBbd2luZG93cy93aW4uY10KCUFkZGVkIGEgV0hfQ0JUIGhvb2sgY2FsbCBkdXJpbmcgd2luZG93IGNyZWF0aW9uOiBnb29kIGZvciBDVEwzRC5ETEwKCldlZCBTZXAgMTEgMTE6MTk6NTYgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUZpeGVkIGltcG9ydHMgd2l0aCBubyBuYW1lL29yZGluYWwgbGlzdCAoTUZDMzAuRExMKS4KCUFkZGVkIGJvcmxhbmQgc3R5bGUgLSBvcmRpbmFsIGltcG9ydCAod3NvY2szMi5kbGwpLgoKCSogW2ZpbGVzL2ZpbGUuY10gW3dpbjMyL2ZpbGUuY10gW2lmMTYzMi9rZXJuZWwuc3BlY10KCSAgW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdCglXaW4zMiBhbmQgV2luMTYgY29kZSB1c2UgdGhlIHNhbWUgZmlsZWhhbmRsZXMvSEZJTEVzLgoJQWRkZWQgU2V0RW5kT2ZGaWxlLCBNb3ZlRmlsZSosIGRpdmVyc2UgKlcgZnVuY3Rpb25zLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJRml4ZWQgYXJndW1lbnQgMiB0byBEbGxFbnRyeS4KCgkqIFttaXNjL2NvbW0uY10KCUFkYXB0IHRvIGZpbGVoYW5kbGluZyBjaGFuZ2VzLCB3aW4zMiBjb2RlIHN0aWxsIGJyb2tlbi4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglVc2UgV2luZSBmaWxlaGFuZGxpbmcuCglTdGFydHVwUmVnaXN0cnkgdG8gYWRkIHN0YXJ0dXAtZGV0ZWN0ZWQgcmVnaXN0cnkgZW50cmllcy4KCgkqIFttaXNjZW11L2RwbWkuY10gW21pc2NlbXUvaW50MjEuY10KCVNvbWUgbWlzc2luZyBpbnRlcnJ1cHQtZnVuY3Rpb25zIGFkZGVkLgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXVtpZjE2MzIvdXNlcjMyLnNwZWNdCglTb21lIHRodW5rcyB0byAxNiBiaXQgZXF1aXZhbGVudCBmdW5jdGlvbnMgYWRkZWQuCgpTYXQgU2VwICA3IDExOjM2OjU3IEVEVCAxOTk2ICBNYXR0aGV3IEdoaW8gPGdoaW9AbmV0Y29tLmNvbT4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJUmV3cm90ZSBXSU5TT0NLX3NlbGVjdCgpIGFuZCBXU0FGRElzU2V0KCkgdG8gcHJvcGVybHkgY29udmVydAoJV2luZG93cyBmZF9zZXQgc3RydWN0cy4KCgkqIFtpZjE2MzIvd2luc29jay5zcGVjXQoJQ29ycmVjdGVkIGFyZ3VtZW50cyB0byBzZWxlY3QoKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIFNlcCAgMSAxOToyMjo0NiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFttaXNjL2NvbW1kbGcuY10gW2lmMTYzMi9jb21tZGxnLnNwZWNdCglGaXhlZCBzb21lIFNFR1BUUiBwcm9ibGVtcy4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10KCUFkZGVkIG1lc3NhZ2UgdHJhbnNsYXRpb24gZm9yIFdNX0NPTVBBUkVJVEVNLCBXTV9ERUxFVEVJVEVNCglhbmQgV01fTUVBU1VSRUlURU0KCUZpeGVkIDE2LXRvLTMyIHRyYW5zbGF0aW9uIGZvciBXTV9IU0NST0xML1dNX1ZTQ1JPTEwuCgpGcmkgQXVnIDMwIDEzOjM5OjAwIDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJKiBbZmlsZXMvZHJpdmUuY10KCUdldERyaXZlVHlwZTE2IHNob3VsZCByZXBvcnQgQ0RST01zIGFzIERSSVZFX1JFTU9URSAoQUNNRSBzZXR1cCkuCgoJKiBbbXVsdGltZWRpYS9hdWRpby5jXQoJVGhlIG1pbmltdW0gYXVkaW9idWZmZXIgc2l6ZSBzaHJ1bmsgc29tZXdoZXJlIGluIGxpbnV4IDEuMy54eAoJYmVsb3cgNDA5NiBieXRlcy4KCgkqIFttdWx0aW1lZGlhL21jaXN0cmluZy5jXQoJU2VncHRyIHN0cmluZyBoYW5kbGluZyBmaXhlZCAmIGVuaGFuY2VkLgoKCSogW2lmMTYzMi9jcnRkbGwuc3BlY11bbWlzYy9jcnRkbGwuY10KCW1hbGxvYyxmcmVlLF9zdHJ1cHIsX3N0cmljbXAsX3N0cmNtcGkgYWRkZWQuCgoJKiBbaWYxNjMyL3dzb2NrMzIuc3BlY11bbWlzYy93aW5zb2NrLmNdCglNb3JlIGRpcmVjdCB0aHVua3MgaW50byB1bml4IGxpYmMgYW5kIFdzQ29udHJvbC1zdHViIGFkZGVkLgoKVGh1IEF1ZyAyOSAyMzo1NDoyNSAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJQnVnIGZpeGVzIHRvIGJvdGggcmVjb3JkaW5nIGFuZCBwbGF5YmFjayBvZiBFeHRUZXh0T3V0KCkuCgpUdWUgQXVnIDI3IDE1OjQzOjIxIDE5OTYgIFNsYXZlbiBSZXppYyAgPGVzZXJ0ZUBjcy50dS1iZXJsaW4uZGU+CgoJKiBbbXVsdGltZWRpYS9hdWRpby5jXSBbbXVsdGltZWRpYS9tY2lhbmltLmNdCgkgIFttdWx0aW1lZGlhL21jaWNkYS5jXSBbbXVsdGltZWRpYS9taWRpLmNdCglNYWRlIGNkYXVkaW8sIGF1ZGlvIGFuZCBtaWRpIHdvcmsgZm9yIEZyZWVCU0QuCgpTdW4gQXVnIDI1IDIwOjE4OjU2IDE5OTYgIEp1a2thIElpdm9uZW4gPGlpdm9uZW5AY2MuaGVsc2lua2kuZmk+CgoJKiBbbWlzYy9jcnRkbGwuY10gW2lmMTYzMi9jcnRkbGwuc3BlY10KCUFkZGVkIGEgbG90IG9mIGZ1bmN0aW9ucy4KCgkqIFttaXNjL29sZTJubHMuY10KCUFkZGVkIElEIHZhbHVlcyBmb3IgYWxsIGxhbmd1YWdlcyBpbiBHZXRVc2VyRGVmYXVsdExDSUQoKS4KCQpGcmkgQXVnIDI0IDIxOjAyOjI4IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9tZXNzYWdlLmNdCglGaXJzdCBhdHRlbXB0IGF0IGhvb2sgV0hfSk9VUk5BTFBMQVlCQUNLLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgQXVnIDI0IDEzOjU3OjAxIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJUmVuYW1lZCBTQ1JPTExJTkZPIHRvIFNDUk9MTEJBUl9JTkZPIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggV2luMzIuCgoJKiBbZ3JhcGhpY3MvZHJpdmVyLmNdIFtpbmNsdWRlL3gxMWRydi5oXQoJTmV3IGZpbGVzIGZvciBncmFwaGljcyBkcml2ZXIgaGFuZGxpbmcuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL3JlZ2lzdGVycy5oXSBbdG9vbHMvYnVpbGQuY10KCUltcGxlbWVudGVkIFdpbjMyIHJlZ2lzdGVyIGZ1bmN0aW9ucy4gTm90IHJlYWxseSB0ZXN0ZWQgeWV0LgoKCSogW2luY2x1ZGUvZ2RpLmhdCglBZGRlZCBhIGxvdCBvZiBmdW5jdGlvbnMgdG8gdGhlIERDIGZ1bmMgdGFibGUuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglJbml0aWFsaXNlICVmcyBiZWZvcmUgY2FsbGluZyBvdXQgdG8gMzItYml0IGNvZGUuCgoJKiBbd2luZG93cy9ob29rLmNdCglGaXhlZCBidWcgaW4gSE9PS19HZXRIb29rKCkuCgoJKiBbd2luZG93cy93aW4uY10KCUZpeGVkIEZpbmRXaW5kb3cgdG8gcmV0dXJuIGFuIGVycm9yIGlmIHRoZSBjbGFzcyBuYW1lIGRvZXNuJ3QgZXhpc3QuCgpXZWQgQXVnIDIxIDE1OjE1OjUzIDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl0gW21pc2MvbXByLmNdIFtpZjE2MzIvbXByLnNwZWNdCgltcHIuZGxsIHNwZWNzIGFkZGVkLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbd2luMzIvbmV3Zm5zLmNdIFttZW1vcnkvZ2xvYmFsLmNdCglRdWVyeVBlcmZvcm1hbmNlQ291bnRlcigpLCBHbG9iYWxNZW1vcnlTdGF0dXMoKSBhZGRlZC4KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdIFt3aW4zMi9lcnJvci5jXQoJU2V0TGFzdEVycm9yRXgoKSBhZGRlZC4KCgkqIFttaXNjL2NvbW1kbGcuY10KCWxwc3RyRmlsdGVyIG1pZ2h0IGJlIE5VTEwgaW4gRklMRV9XTUluaXREaWFsb2cgKE5TIDMuMCBzZXR1cCkuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJU29tZSBtaXNzaW5nIE5VTEwgcHRyIGNoZWNrcyBhZGRlZCwgbWlzYyBjbGVhbiB1cC4KClR1ZSBBdWcgMjAgMjE6MDA6MDAgMTk5NiBBbGV4IEtvcm9ia2EgIDxhbGV4QHBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJQWRqdXN0IHBvcHVwIG1lbnUgY29vcmRpbmF0ZXMgc28gdGhhdCBpdCBhbHdheXMgc3RheXMgd2l0aGluIAoJdGhlIGRlc2t0b3AuCgoJKiBbbWlzYy9tYWluLmNdCglGaXhlZCBHZXRFbnZpcm9ubWVudCgpIHJldHVybiB2YWx1ZSBmb3IgbHBFbnYgPT0gTlVMTCBjYXNlLgoKTW9uIEF1ZyAxOSAyMjo0ODozNiAxOTk2ICBKdWtrYSBJaXZvbmVuIDxpaXZvbmVuQGNjLmhlbHNpbmtpLmZpPgoKCSogW21pc2MvY3J0ZGxsLmNdIFtpZjE2MzIvY3J0ZGxsLnNwZWNdCglBZGRlZCBzb21lIGlzKiBmdW5jdGlvbnMsIHN0cmxlbiBhbmQgdG9sb3dlci4KCQpNb24gQXVnIDE5IDEzOjMzOjEzIDE5OTYgIFN0ZXBoZW4gU2ltbW9ucyAgPHNzaW1tb25zQHZpdHNlbWkuY29tPgoKCSogW3Rvb2xzL3dpbmVjb25mXQoJTmV3IHBlcmwgc2NyaXB0IHRvIGdlbmVyYXRlIHRoZSB3aW5lLmNvbmYgZmlsZS4KCkZyaSBBdWcgMTYgMTU6MzE6NDQgMTk5NiAgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW2lmMTYzMi9nZGkuc3BlY10KICAgICAgICBMb3RzIG9mIHByaW50ZXIgZnVuY3Rpb25zLgoJCgkqIFtpbmNsdWRlL2NhbGxiYWNrLmhdCiAgICAgICAgTmV3IGZ1bmN0aW9ucyBmb3IgcHJpbnRlciBkcml2ZXIgc3VwcG9ydC4KCgkqIFtpbmNsdWRlL2dkaS5oXQogICAgICAgIE5ldy9jaGFuZ2VkIHN0cnVjdHVyZXMgdG8gc3VwcG9ydCBwcmludGVyIGRyaXZlci4KCgkqIFttaXNjL2VzY2FwZS5jXQogICAgICAgIE5ldyB2ZXJzaW9uIHRoYXQgdXNlcyBmdW5jdGlvbiB0YWJsZSBpbiBEQyBzdHJ1Y3R1cmUuCgoJKiBbb2JqZWN0cy9kYy5jXQogICAgICAgIENyZWF0ZURDIGNvcGVzIHdpdGggdGhpbmdzIG90aGVyIHRoYW4gRGlzcGxheS4KCVggY29kZSBmb3IgQ3JlYXRlREMgbW92ZWQgdG8gZ3JhcGhpY3MveDExZHJ2IGRpcmVjdG9yeS4KCUNyZWF0ZUNvbXBhdGlibGVEQyBjb3BpZXMgZnVuYyB0YWJsZSBmcm9tIG9yaWdpbmFsIERDLgoKCSogW29iamVjdHMvZm9udC5jXQogICAgICAgIEdldFRleHRFeHRlbnRQb2ludDMyQSxHZXRUZXh0TWV0cmljczE2IHVzZSBmdW5jdGlvbiB0YWJsZSBpbgogICAgICAgIERDIGFuZCBjb2RlIG1vdmVkIHRvIGRyaXZlcnMgZGlyZWN0b3J5LgoKCSogW21pc2MvcHJpbnRkcnYuY10gW2dyYXBoaWNzLyovKl0gW2luY2x1ZGUvd2luMTZkcnYuaF0KICAgICAgICBOZXcgZmlsZXMgZm9yIHByaW50ZXIgc3VwcG9ydC4gCgpGcmkgQXVnIDE2IDEyOjMzOjAwIDE5OTYgIEJydWNlIE1pbG5lciA8QnJ1Y2UuTWlsbmVyQGdlbmV0aWNzLnV0YWguZWR1PgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJQWRkZWQgU2V0U2Nyb2xsSW5mbzMyIGFuZCBHZXRTY3JvbGxJbmZvMzIuICBUaGVzZSBqdXN0IGNhbGwgZXhpc3RpbmcKCWNvZGUuIFRoZXJlIGFyZSBhIGZldyBvcHRpb25zIGluIHdoaWNoIEknbSBwcm9iYWJseSB0aGUgd3JvbmcgcGVyc29uCglmb3IgdGhlIGpvYiAocGFnZSBzaXplIGFuZCBkaXNhYmxlIGJhcikuIFRoZXJlIGFyZSBjb21tZW50cyBpbiB0aGUKCWNvZGUgYXMgdG8gd2hhdCB0aGV5IHNob3VsZCBkby4KCgkqIFtvYmplY3RzL2dkaW9iai5jXSBbb2JqZWN0cy9mb250LmNdIFtpbmNsdWRlL2ZvbnQuaF0KCUFkZGVkIDMyIGJpdCB2ZXJzaW9uIG9mIEZPTlRfR2V0T2JqZWN0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gQXVnIDE4IDEyOjE3OjU0IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2ZpbGVzL2RyaXZlLmNdCglBZGRlZCAnRmlsZXN5c3RlbScgb3B0aW9uIGluIGRyaXZlcyBjb25maWd1cmF0aW9uLgoKCSogW2ZpbGVzL2Rvc19mcy5jXSAKCUFkZGVkIGhhbmRsaW5nIG9mIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0KCVJlbW92ZWQgTUFLRV9TRUdQVFIuCgoJKiBbbWlzYy9jb21tZGxnLmNdIFttdWx0aW1lZGlhL21jaXN0cmluZy5jXQoJUmVwbGFjZWQgTUFLRV9TRUdQVFIgYnkgdGhlIFNFR1BUUl8qIG1hY3Jvcy4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXSBbd2luZG93cy9ncmFwaGljcy5jXQoJVXNlIGFuIGludGVybWVkaWFyeSBwaXhtYXAgdG8gYXZvaWQgc29tZSBCYWRNYXRjaCBlcnJvcnMgb24KCVhHZXRJbWFnZSgpLgoKU3VuIEF1ZyAxOCAwOToyMToyNyAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJQWRkZWQgaGFuZGxpbmcgb2YgV01fTkMuLi5tb3VzZSBtZXNzYWdlcyBpbiBKT1VSTkFMUkVDT1JEIGhvb2suCgoJKiBbbWlzYy92ZXIuY10KCUZpeGVkIGEgYmFkIHN0cmluZyByZXN1bHQgaW4gVmVyUXVlcnlWYWx1ZVsxNnwzMkF8MzJXXS4KCkZyaSBBdWcgMTYgMTk6NTU6MDQgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaWYxNjMyL2NydGRsbC5zcGVjXSBbbWlzYy9jcnRkbGwuY10KCU1vcmUgYWRkaXRpb25zIHRvIGdldCB3aW45NSBwcm9ncmFtcyBmdXJ0aGVyIGRvd24gdGhlIHJvYWQuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbbG9hZGVyL21vZHVsZS5jXQoJR2V0TW9kdWxlTmFtZSgpIGFkZGVkLgoJTG9hZE1vZHVsZSgpOiBwYXJhbXMtPnNob3dDbWQgY2FuIGJlIE5VTEwuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpZjE2MzIvdGh1bmsuY10KCVRodW5rQ29ubmVjdDMyKCkgc3R1YiBhZGRlZC4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUVudHJpZXMgaW5jbHVkZSBsYXN0ZW50cnkuCgoJKiBbbWlzYy9zaGVsbC5jXSBbZmlsZXMvZmlsZS5jXQoJTWFkZSBwcm9nbWFuIHdvcmsgYWdhaW4uCgpGcmkgQXVnIDE2IDA5OjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoJCgkqIFt3aW5kb3dzL2RlZnduZC5jXSBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10KCUljb24gcGFpbnRpbmcgZml4ZXMuCgoJKiBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10KCUVuZm9yY2UgYW5kIGZvbGxvdyBocmduVXBkYXRlIG1vcmUgY2xvc2VseSB0byBjdXQgZG93biBvbgoJcmVkdW5kYW50IFJlZHJhd1dpbmRvdygpIGNhbGxzLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVByb2Nlc3MgQ29uZmlndXJlTm90aWZ5IG9ubHkgZm9yIG1hbmFnZWQgd2luZG93cy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJRG8gbm90IHJlZHJhdyBwYXJlbnQgaWYgdGhlIHdpbmRvdyB3YXMgaGlkZGVuIGJlZm9yZSBTZXRXaW5kb3dQb3MoKS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJT21pdCBzb21lIG5vbmNsaWVudCBkZWNvcmF0aW9uIHBhaW50aW5nIGZvciBtYW5hZ2VkIHdpbmRvd3MuCgoJKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy9tZGkuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglJbXBsZW1lbnRlZCBXTV9ORVhUTUVOVS4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglNdWx0aWNvbHVtbiBsaXN0Ym94ZXMgcmV0dXJuIFdWUl9WUkVEUkFXIG9uIFdNX05DQ0FMQ1NJWkUuCgoJKiBbbWlzYy9zaGVsbC5jXQoJQWRkZWQgLklDTyBmaWxlIGhhbmRsaW5nIHRvIEV4dHJhY3RJY29uKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBBdWcgMTEgMTM6MDA6MjAgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29uZmlndXJlLmluXSBbaW5jbHVkZS9hY2NvbmZpZy5oXSBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIGNoZWNrIGZvciB1bmRlcnNjb3JlIG9uIGV4dGVybmFsIHN5bWJvbHMuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdIFttZW1vcnkvZ2xvYmFsLmNdCglGaXhlZCBGcmVlU2VsZWN0b3IoKSB0byBmcmVlIG9ubHkgb25lIHNlbGVjdG9yLgoJQWRkZWQgU0VMRUNUT1JfRnJlZUJsb2NrKCkgdG8gZnJlZSBhbiBhcnJheSBvZiBzZWxlY3RvcnMuCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJRml4ZWQgYSBidWcgaW4gQ09MT1JfVG9Mb2dpY2FsKCkgdGhhdCBjYXVzZWQgR2V0UGl4ZWwoKSB0byBmYWlsIG9uCgloaS1jb2xvciBkaXNwbGF5cy4KCgkqIFt0b29scy9idWlsZC5jXSBbaWYxNjMyL2NydGRsbC5zcGVjXQoJQWRkZWQgJ2V4dGVybicgdHlwZSwgdXNlZCBmb3IgZXh0ZXJuYWwgdmFyaWFibGVzIG9yIGZ1bmN0aW9ucy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQWxsb3cgZGUtYWN0aXZhdGluZyBhIHdpbmRvdyBpbiBXSU5QT1NfQ2hhbmdlQWN0aXZlV2luZG93KCkuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdCglBZGRlZCAzMi10by0xNiB0cmFuc2xhdGlvbiBmb3IgYnV0dG9uIG1lc3NhZ2VzLgoJRml4ZWQgV0lOUFJPQ19HZXRQdHIoKSB0byBhdm9pZCBjcmFzaGVzIG9uIDMyLWJpdCBwcm9jZWR1cmVzIHRoYXQKCWhhcHBlbiB0byBiZSB2YWxpZCBTRUdQVFJzLgoKU2F0IEF1ZyAxMCAxODoyMjoyNSAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJUmVtb3ZlZCBhIEZJWE1FIGluIE1TR19QZWVrSGFyZHdhcmVNc2coKTogcHJvZHVjZXMgY29ycmVjdCAKCWRhdGEgZm9yIHRoZSBKT1VSTkFMUkVDT1JELWhvb2sgKHVzaW5nIEVWRU5UTVNHMTYgc3RydWN0dXJlKS4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW29iamVjdHMvbWV0YWZpbGUuY10KCUludHJvZHVjZWQgdW5kb2N1bWVudGVkIEFQSSBmdW5jdGlvbiBJc1ZhbGlkTWV0YUZpbGUoKSwgcGx1cyBhCiAJbWlub3IgZml4IGluIGxhc3QgcGF0Y2ggb2YgQ29weU1ldGFGaWxlKCkuCgoJKiBbb2JqZWN0cy9nZGlvYmouY10KCVJlbW92ZWQgYSBGSVhNRSBpbiBJc0dESU9iamVjdCgpOiBhZGRlZCBtYWdpYyB3b3JkIGNoZWNrLgoKU3VuIEF1ZyAxMCAxODoxMDoxMCAxOTk2ICBCcnVjZSBNaWxuZXIgPEJydWNlLk1pbG5lckBnZW5ldGljcy51dGFoLmVkdT4KCgkqIFtjb250cm9scy9zdGF0dXN3aW4uY10KCUZpcnN0IHBhc3MgYXQgaW1wbGVtZW50aW5nIHRoZSBTdGF0dXNXaW5kb3cgY2xhc3MuCgoJKiBbaW5jbHVkZS9jb21tY3RybC5oXQoJSGVhZGVyIGZpbGUgZm9yIGNvbW1vbiBjb250cm9scy4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglBZGRlZCBJbml0Q29tbW9uQ29udHJvbHMoKS4KCgkqIFtpZjE2MzIvY29tY3RsMzIuc3BlY10KCUFkZCBEcmF3U3RhdHVzVGV4dEEsIENyZWF0ZVN0YXR1c1dpbmRvd0EsIEluaXRDb21tb25Db250cm9scy4KCgkqIFt3aW4zMi9maW5kZmlsZS5jXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglBZGQgRmluZE5leHRGaWxlMzJBLCBGaW5kQ2xvc2UuCglNb2RpZmllZCBGaW5kRmlyc3RGaWxlMzJBIHNvIGl0IHdvcmtzIHdpdGggRmluZE5leHRGaWxlMzJBLgoKCSogW2luY2x1ZGUvd2luYmFzZS5oXQoJRml4ZWQgV0lOMzJfRklORF9EQVRBIHN0cnVjdHVyZSBtZW1iZXIgbmFtZXMuCgpTYXQgQXVnIDEwIDA5OjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglDaGFuZ2VkIHNjcm9sbGluZyByb3V0aW5lcyB0byBiZW5lZml0IGZyb20gRENFIGNvZGUgdXBkYXRlLgoKVGh1IEF1ZyAgOCAxODowNTowOSAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtmaWxlcy9maWxlLmNdCglTZWFyY2hQYXRoKiBjb3VsZCBnZXQgTlVMTCBmb3IgbGFzdHBhcnQgYXJndW1lbnQuCgoJKiBbaWYxNjMyL2J1aWxkLXNwZWMudHh0XSBbZG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmddCglWYXJhcmdzIGRvY3VtZW50YXRpb24gYWRkZWQsIGRlYnVnZ2luZyBoaW50cyB1cGRhdGVkLgoKCSogW2lmMTYzMi9jcnRkbGwuc3BlY11bbWlzYy9jcnRkbGwuY11bbWlzYy9NYWtlZmlsZS5pbl0KCVN0YXJ0ZWQgdG8gaW1wbGVtZW50IENSVERMTC4KCgkqIFtpZjE2MzIvd3NvY2szMi5zcGVjXQoJU29tZSB0aHVua3MgdG8gc3RhbmRhcmQgbGliYyBmdW5jdGlvbnMgKHN0cnVjdHVyZXMgaGF2ZSB0aGUgc2FtZQogCWVsZW1lbnRzLCBidXQgcGVyaGFwcyB3cm9uZyBvZmZzZXQgZHVlIHRvIHBhY2tpbmcpLgoKCSogW2luY2x1ZGUva2VybmVsMzIuaF1baW5jbHVkZS93aW5kb3dzLmhdW3dpbjMyLyouY11bbG9hZGVyL21haW4uY10KCU1lcmdlZCBrZXJuZWwzMi5oIGludG8gd2luZG93cy5oLgoKCSogW21pc2MvbHN0ci5jXQoJRW5oYW5jZWQgRm9ybWF0TWVzc2FnZSgpLgoKCSogW21pc2MvbWFpbi5jXSBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdCglHZXRWZXJzaW9uKCkgdXBkYXRlZCB0byBuZXcgbmFtaW5nIHN0YW5kYXJkLgoJQ2hhbmdlZCBsYW5ndWFnZSBoYW5kbGluZyB0byBzdXBwb3J0IGxhbmd1YWdlIGlkcy4KCgkqIFttaXNjL3NoZWxsLmNdCglFbmhhbmNlZCBGaW5kRXhlY3V0YWJsZSwgc28gaXQgZmluZHMgZmlsZXMgaW4gdGhlIHNlYXJjaCBwYXRoIHRvby4KCgkqIFt3aW4zMi9lbnZpcm9ubWVudC5jXQoJR2V0Q29tbWFuZExpbmUqIHVwZGF0ZWQuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdIFtsb2FkZXIvcGVfcmVzb3VyY2UuY10KCUZpbmRSZXNvdXJjZUV4MzIqIGFkZGVkLgoJTG9hZGluZyBvZiBtZXNzYWdldGFibGVzIGFkZGVkLgoJTGFuZ3VhZ2UgaGFuZGxpbmcgbm93IHVzZXMgV2luZSBkZWZhdWx0IGxhbmd1YWdlIGlkLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gQXVnICA0IDE4OjE4OjQ4IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJQXR0ZW1wdGVkIHRvIGltcGxlbWVudCB1bmRvY3VtZW50ZWQgc2Nyb2xsLWJhciBtZXNzYWdlcy4KCgkqIFt0b29scy9idWlsZC5jXSBbaW5jbHVkZS9jYWxsYmFjay5oXSBbd2luZG93cy93aW5wcm9jLmNdCglDYWxsVG8xNl8qIGZ1bmN0aW9ucyBub3cgZ2V0IERTIGZyb20gdGhlIHByZXZpb3VzIDE2LWJpdCBzdGFja2ZyYW1lLgoKCSogW2lmMTYzMi90aHVuay5jXSBbaW5jbHVkZS9jYWxsYmFjay5oXQoJQWRkZWQgdGh1bmtzIHRvIGltcGxlbWVudCBjYWxsYmFja3MgZm9yIHRoZSBlbXVsYXRvci4gTm93IGFsbCB0aGUKCUVudW0qIGZ1bmN0aW9ucyBhbHdheXMgdGFrZSBhIHJlYWwgZnVuY3Rpb24gcG9pbnRlciBldmVuIGluIHRoZQoJZW11bGF0b3IuCgkKCSogW2xvYWRlci9idWlsdGluLmNdCglSZW1vdmVkIGJpbmFyeSBzZWFyY2ggaW4gQlVJTFRJTl9HZXRFbnRyeVBvaW50MzIoKSwgYXMgaXQgZGlkbid0CiAJd29yayB3aXRoIE5VTEwgZW50cnkgcG9pbnRzLiBVc2luZyBsaW5lYXIgc2VhcmNoIG5vdy4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglJbXBsZW1lbnRlZCBJc1NoYXJlZFNlbGVjdG9yKCkuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUNoYW5nZWQgU3dpdGNoU3RhY2tUby9CYWNrIHRvIHVzZSB0aGUgaW5zdGFuY2UgZGF0YSB0byBzdG9yZSB0aGUKCXByZXZpb3VzIHN0YWNrIGluc3RlYWQgb2YgdGhlIFREQi4gQWxzbyBjb3B5IHRoZSBsb2NhbCB2YXJpYWJsZXMKCW9udG8gdGhlIG5ldyBzdGFjay4KCUFkZGVkIEdldEV4ZVZlcnNpb24oKSBhbmQgU2V0VGFja1NpZ25hbFByb2MoKS4KCUltcGxlbWVudGVkIFNldFNpZ0hhbmRsZXIoKS4KClNhdCBBdWcgIDMgMjI6MTk6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtjb250cm9scy9tZW51LmNdCgkiRml4ZWQiIHByb2JsZW0gaW4gZGVsZXRpbmcgbWVudXMgd2hlcmUgd2luMzIgY291bGQgZ2V0IGludG8gYW4KCWVuZGxlc3MgbG9vcCB3aGVuIGl0IGNyYXNoZWQuIEkgdGhpbmsgSSd2ZSBmaXhlZCB0aGUgc3ltcHRvbXMsIG5vdAoJdGhlIG9yaWdpbmFsIHByb2JsZW0gc28gaXQgbWlnaHQgYmUgd29ydGggZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCSogW2RlYnVnZ2VyL3JlZ2lzdGVycy5jXQoJQWRkZWQgbWlzc2luZyAjaWZkZWZzIG9uIEZTX1JFRyBhbmQgR1NfUkVHLCBuZWVkZWQgZm9yIEZyZWVCU0QgdG8KCWNvbXBpbGUgd2luZSBwcm9wZXJseS4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCU1hZGUgRE9TRlNfSGFzaCBhbmQgRE9TRlNfTWF0Y2ggbm9uLXN0YXRpYyBzbyB0aGV5IGNhbiBiZSBjYWxsZWQKCWZyb20gd2luMzIvZmluZGZpbGUuYyAocS52LikuCgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdCglBZGRlZCBTZXRNYXBNb2RlIChjYWxsIGV4aXN0aW5nIGZ1bmN0aW9uKQoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQWRkZWQgRmluZEZpcnN0RmlsZUEgYW5kIFNldEZpbGVBdHRyaWJ1dGVzQS4KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglBZGRlZCBCcmluZ1dpbmRvd1RvVG9wLCBDcmVhdGVQb3B1cE1lbnUsIEdldEtleVN0YXRlLCBHZXRQYXJlbnQsCglJc0RsZ0J1dHRvbkNoZWNrZWQgKGNhbGwgZXhpc3RpbmcgZnVuY3Rpb25zKSBhbmQgSXNEaWFsb2dNZXNzYWdlQSwKCVVuaG9va1dpbmRvd3NIb29rRXguCgoJKiBbd2luMzIvZmlsZS5jXQoJQWRkZWQgc3R1YiBmdW5jdGlvbiBTZXRGaWxlQXR0cmlidXRlczMyQS4gSXQncyBhIHN0dWIgYmVjYXVzZSBJCgljYW4ndCByZWFsbHkgd29yayBvdXQgd2hhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBkbyB3aXRoIG1vc3QKCWF0dHJpYnV0ZXMgaW4gYSBVbml4IGVudmlyb25tZW50LiBBbnlvbmUgY2FyZSB0byBleHBhbmQgaXQ/CgoJKiBbd2luMzIvZmluZGZpbGUuY10KCU5ldyBmaWxlLiBJbml0aWFsIHN0YWIgYXQgRmluZEZpcnN0RmlsZS4gVGhpcyBkb2Vzbid0IHdvcmsgYXMKCXNwZWNpZmllZCB5ZXQsIHRob3VnaCBhIGxvdCBvZiB0aGUgZ3JvdW5kd29yayBpcyB0aGVyZS4gSSBoYXZlbid0Cgl0aW1lIHRvIHdvcmsgb24gdGhpcyBmb3IgdGhlIG5leHQgbW9udGgsIHNvIGlmIGFueW9uZSB3YW50cyB0byBwaWNrCglpdCB1cCBhbmQgcnVuIHdpdGggaXQgcGxlYXNlIGRvLgoKCSogW3dpbjMyL21lbW9yeS5jXQoJUmVtb3ZlZCBtYWxsb2MuaCBmcm9tIGluY2x1ZGVzIChjb3ZlcmVkIGJ5IHN0ZGxpYi5oIGluY2x1ZGUsIGFuZAoJZ2V0cyByaWQgb2YgYSB3YXJuaW5nIGluIEZyZWVCU0QpLgoKCSogW3dpbjMyL25ld2Zucy5jXQoJVW5ob29rV2luZG93c0hvb2tFeDMyQSBzdHViIGFkZGVkLgoKCSogW3dpbjMyL3VzZXIzMi5jXQoJQWRkZWQgaW1wbGVtZW50YXRpb24gb2YgSXNEaWFsb2dNZXNzYWdlMzJBLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglJc0RsZ0J1dHRvbkNoZWNrZWQgbm93IGNhbGxzIFNlbmREbGdJdGVtTWVzc2FnZTMyQSBpbnN0ZWFkIG9mCglTZW5kRGxnSXRlbU1lc3NhZ2UxNi4KClNhdCBBdWcgIDMgMTg6MDA6MDAgMTk5NiBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglSZW1vdmVkIHJlY3RhbmdsZSBjaGVja2luZyAoY29uZmxpY3RlZCB3aXRoIG5vbnN0YW5kYXJkCgltYXBwaW5nIG1vZGVzKS4gCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUFkZGVkIGNoZWNrIGZvciBjaGlsZC1zdHlsZSBkaWFsb2dzIHRvIERTX0FCU0FMSUdOCgljb29yZGluYXRlIGNvbnZlcnNpb24uCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJQ2xlYW5lZCB1cCBtaXNjLiBiaXRzCgpUaHUgQXVnICAxIDEwOjUxOjQ1IDE5OTYgIEFuZHJldyBMZXd5Y2t5IDxwbGV3eWNreUBvaXNlLnV0b3JvbnRvLmNhPgoKCSogW3dpbmRvd3MvZm9jdXMuY10gW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3Mvd2luLmNdCgkgIFt3aW5kb3dzL2RlZmRsZy5jXQoJRml4ZXMgdG8gZm9jdXNpbmcgYW5kIGFjdGl2YXRpb24uCgoJKiBbd2luZG93cy9kZWZkbGcuY10KCVByb3Blcmx5KD8pIGhhbmRsZSBETV9HRVRERUZJRC4KCgkqIFtjb250cm9scy9jb21iby5jXQoJSGFuZGxlIENCX0ZJTkRTVFJJTkdFWEFDVCwgQ0JfU0VURURJVFNFTCwgQ0JfR0VURURJVFNFTC4KCUNCQ2hlY2tTaXplOiBBZGp1c3QgZWRpdCBwb3NpdGlvbi4KClR1ZSBKdWwgMzAgMDk6NDY6MzYgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZmlsZXMvZmlsZS5jXSBbaW5jbHVkZS9maWxlLmhdIFtsb2FkZXIvbW9kdWxlLmNdIFtsb2FkZXIvbmVfaW1hZ2UuY10KCVBhc3MgSEZJTEVzIGluc3RlYWQgb2YgdW5peC1mZHMgdG8gc2VsZi1sb2FkZXIgY29kZS4KCk1vbiBKdWwgMjkgMjE6NDg6MjUgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtpbmNsdWRlL21ldGFmaWxlLmhdIFtvYmplY3RzL21ldGFmaWxlLmNdIFtvYmplY3RzL3RleHQuY10KCUltcGxlbWVudGVkIGhhbmRsaW5nIG9mIHNvbWUgbmV3IG1ldGFmaWxlIHJlY29yZHMgKE1FVEFfLi4uKQoJaW4gUGxheU1ldGFGaWxlUmVjb3JkKCksIHJld3JpdGUgb2YgJ2Nhc2UgTUVUQV9FWFRURVhUT1VUJy4KCUFkZGVkIGZ1bmN0aW9ucyBsaWtlIE1GX1N0cmV0Y2hCbHQoKSBmb3IgdXNhZ2UgaW4gbWV0YWZpbGVzLgoJTWlub3IgYnVnZml4IGluIENvcHlNZXRhZmlsZSgpLgoKCSogW29iamVjdHMvYml0bWFwLmNdW29iamVjdHMvZGliLmNdCglBZGRlZCBjaGVjayBmb3IgbWV0YWZpbGUtREMgaW4gQml0bWFwIGFuZCBESUIgZnVuY3Rpb25zOgoJQ3JlYXRlQ29tcGF0aWJsZUJpdG1hcCgpIGV0Yy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEp1bCAyOCAxNzo1NzoxOSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtsb2FkZXIvdGFzay5jXSBbaW5jbHVkZS90YXNrLmhdCglJbXBsZW1lbnRlZCBTd2l0Y2hTdGFja1RvKCkvU3dpdGNoU3RhY2tCYWNrKCkuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXSBbbG9hZGVyL21haW4uY10KCUFkZGVkIF9fd2luZWxpYiB2YXJpYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGVtdWxhdG9yIGFuZAogCWxpYnJhcnkgYXQgcnVuLXRpbWUuIExhdGVyIG9uLCB0aGlzIHNob3VsZCBhdm9pZCBzb21lCiAJcmVjb21waWxhdGlvbnMgd2hlbiBidWlsZGluZyBXaW5lbGliLgoKCSogW3dpbmRvd3MvcHJvcGVydHkuY10KCUltcGxlbWVudGVkIFdpbjMyIGZ1bmN0aW9ucyBmb3Igd2luZG93IHByb3BlcnRpZXMuCgpGcmkgSnVsIDI2IDE4OjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUltcGxlbWVudGVkIExCU19TT1JUIHN0eWxlLCBXTV9DT01QQVJFSVRFTSwgYW5kIFdNX0RFTEVURUlURU0KCW1lc3NhZ2VzLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUNhbGwgVHJhbnNsYXRlTWVzc2FnZSgpIHRvIGVuYWJsZSBzaG9ydGN1dHMgKG9uIFdNX0NIQVIpLgoKCSogW2luY2x1ZGUvY3Vyc29yaWNvbi5oXQoJTW92ZWQgI3ByYWdtYSBwYWNrKDEpIGJhY2sgdG8gd2hlcmUgaXQgYmVsb25ncy4KCgkqIFtvYmplY3RzL3BhbGV0dGUuY10KCVJlYWxpemVEZWZhdWx0UGFsZXR0ZSgpIG1hcHMgdG8gc3lzdGVtIGNvbG9ycyBvbmx5LgoJRG8gbm90IGJyb2FkY2FzdCBwYWxldHRlIG5vdGlmaWNhdGlvbnMgd2hlbiBpbiBUcnVlQ29sb3IuCgoJKiBbb2JqZWN0cy9jb2xvci5jXSBbaW5jbHVkZS9wYWxldHRlLmhdCglNaXNjZWxsYW5lb3VzIG9wdGltaXphdGlvbnMuIEhhZCB0byBmaXggc2V2ZXJhbAoJImltcHJvdmVtZW50cyIgbWFkZSB0byBteSBwYXRjaCBmb3IgcHJldmlvdXMgcmVsZWFzZS4KCgkqIFtvYmplY3RzL2RpYi5jXQoJUmV2ZXJzZSBkaWIgYml0cyBvcmRlciBmb3IgMjQtYml0IFNldERJQml0cygpLgoKCSogW29iamVjdHMvZGMuY10KCUdldERldmljZUNhcHMoKSBkb2VzIG5vdCByZXR1cm4gUkNfUEFMRVRURSB3aGVuIGluIFRydWVDb2xvci4KCgkqIFt3aW5kb3dzL3Njcm9sbC5jXQoJU2Nyb2xsIHVwZGF0ZSByZWdpb24gdG9vLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW5jbHVkZSBRU19NT1VTRSBpbnRvIHRoZSBldmVudCBtYXNrIGZvciBub25jbGllbnQgbW91c2UKCW1lc3NhZ2UgZmlsdGVyLiBGaXhlcyBwcm9ibGVtcyB3aXRoIFdvcmQgNiBmcmVlemluZyB3aGVuCgltb3VzZSBoaXRzIG5vbmNsaWVudCBhcmVhLgoKCSogW3dpbmRvd3Mvd2luLmNdIAoJQWxsb3cgdG9wLWxldmVsIHdpbmRvd3MgdG8gYmUgbGlua2VkIGFzIEhXTkRfVE9QIGluIENyZWF0ZVdpbmRvdygpLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdIFt3aW5kb3dzL21kaS5jXQoJQXR0ZW1wdCB0byBmaXggY29udHJvbCBtZW51IGR1cGxpY2F0aW9uLgoKRnJpIEp1bCAyNiAwOTo0OTozNSAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJR2V0RHJpdmVUeXBlMzJBKCk6IHJldHVybiB2YWx1ZSBmb3IgQ0RST00gZml4ZWQuCgoJKiBbZmlsZXMvZmlsZS5jXQoJU2VhcmNoUGF0aCogYWRkZWQuCgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdIFtvYmplY3RzL2JydXNoLmNdCglTZXRCcnVzaE9yZ0V4KCkgYWRkZWQuCgoJKiBbbG9hZGVyL3BlX3Jlc291cmNlLmNdCglJZiBldmVuIGxvYWRpbmcgdGhlIGRlZmF1bHQgZW50cnkgZmFpbHMsIHdlIGp1c3QgdXNlIHRoZSBmaXJzdAoJZW50cnkgZnJvbSB0aGUgcmVzb3VyY2UgZGlyZWN0b3J5LgoKCVtsb2FkZXIvdGFzay5jXQoJU2V0U2lnSGFuZGxlcigpIHN0dWIgYWRkZWQsIFBhcmFkb3ggNC41IG5vdyBzdGFydHMgdXAuCgoJKiBbbWlzYy9jb21tLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQ09NTSBmdW5jdGlvbnMgdXBkYXRlZCB0byB3aW4zMiwgbm90IGNvbXBsZXRlLgoKCSogW21pc2MvbHN0ci5jXQoJRm9ybWF0TWVzc2FnZUEgcGFydGlhbGx5IGltcGxlbWVudGVkLgoKCSogW2luY2x1ZGUvbWlzY2VtdS5oXSBbbWVtb3J5L3NlbGVjdG9yLmNdCgkgIFttZW1vcnkvZ2xvYmFsLmNdIFttaXNjZW11L2Rvc21lbS5jXQoJRE9TIG1lbW9yeSBoYW5kbGluZyBjaGFuZ2VkOiAxTUIgcHJlYWxsb2NhdGVkIGJsb2NrLCByZWFsLW1vZGUKCXNlZ21lbnQgaGFuZGxpbmcgcG9zc2libGUsIFNldFNlbGVjdG9yQmFzZSBpbnRvIGxvd2VyIHBoeXNpY2FsIDFNQgoJcG9zc2libGUuCgoJKiBbbWlzY2VtdS9kcG1pLmNdCglSZWFsLW1vZGUgc2VnbWVudHMgY2hhbmdlZCwgcmVhbC1tb2RlIGludCAyMSxheD02NTA2IGFkZGVkLgoJQVg9MHgwMzAzIGFkZGVkLgoKCSogW211bHRpbWVkaWEvdGltZS5jXQoJRml4ZWQgYnVnIGluIGtpbGxUaW1lci4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJTG9hZEltYWdlQSBwYXJ0aWFsbHkgaW1wbGVtZW50ZWQuCgpXZWQgSnVsIDI0IDE4OjIwOjI0IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbaW5jbHVkZS9kZGVfbWVtLmhdW2luY2x1ZGUvZGRlX3Byb2MuaF0KCSAgW2lwYy9kZGVfYXRvbS5jXVtpcGMvZGRlX3Byb2MuY11bd2luZG93cy9tZXNzYWdlLmNdCgkgIFtpcGMvZ2VuZXJpY19oYXNoLmhdW2xpYnJhcnkvbWlzY3N0dWJzLmNdCglDaGFuZ2VzIGZvciBlcnJvciBmcmVlIGNvbXBpbGF0aW9uIHVzaW5nICItLXdpdGgtaXBjIjoKCXJlcGxhY2VkIHNvbWUgbmFtZXMgd2l0aCAqMTYtZXF1aXZhbGVudCAoZS5nLiBNU0cgdG8gTVNHMTYpLAoJbW9kaWZpZWQgcHJvdG90eXBlIG9mIGZ1bmN0aW9uIERERV9HbG9iYWxGcmVlKCkgLgoKCSogW29iamVjdHMvcGFsZXR0ZS5jXQoJQWRkZWQgY2hlY2sgZm9yIG1ldGFmaWxlLURDIGluIEdESVNlbGVjdFBhbGV0dGUoKSwKCUdESVJlYWxpemVQYWxldHRlKCksUmVhbGl6ZURlZmF1bHRQYWxldHRlKCkgYW5kCglJc0RDQ3VycmVudFBhbGV0dGUoKS4KClR1ZSBKdWwgMjMgMjI6NDY6NTMgMTk5NiAgQW5kcmV3IExld3lja3kgPHBsZXd5Y2t5QG9pc2UudXRvcm9udG8uY2E+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRURJVF9XTV9DcmVhdGU6IERvbid0IEVESVRfRU1fUmVwbGFjZVNlbCBpZiBjcmVhdGVkIHdpdGggbFBhcmFtID0gIiIsCglmaXhlcyBXaW5oZWxwLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglESUFMT0dfQ3JlYXRlSW5kaXJlY3Q6IEluaXRpYWxpc2UgZGxnUHJvYyBiZWZvcmUgY3JlYXRpbmcgY2hpbGRyZW4uCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBKdWwgMTcgMTY6MTA6MTYgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29uZmlndXJlLmluXQoJR2VuZXJhdGUgaW5jbHVkZS9jb25maWcuaCBpbnN0ZWFkIG9mIHB1dHRpbmcgZXZlcnl0aGluZyBvbiB0aGUKCWNvbW1hbmQtbGluZS4KCVJlbW92ZWQgLXdpdGgtbWFsbG9jLWRlYnVnIG9wdGlvbiAobm90IHVzZWZ1bCBmb3IgZW5kIHVzZXJzCglhbnl3YXkpLgoJQWRkZWQgY2hlY2sgZm9yIG1lbW1vdmUoKS4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdIFsqL01ha2VmaWxlLmluXQoJQWRkZWQgZGVmaW5pdGlvbiBvZiBfX1dJTkVfXyBzeW1ib2wgd2hlbiBjb21waWxpbmcgV2luZSBjb2RlCgkoZW11bGF0b3Igb3IgbGlicmFyeSkgYXMgb3Bwb3NlZCB0byB1c2VyIHByb2dyYW1zLgoKCSogW2RlYnVnZ2VyL2VkaXRsaW5lLmNdIFtkZWJ1Z2dlci9yZWFkbGluZS8qXQoJTW92ZWQgYWxsIHRoZSByZWFkbGluZSBjb2RlIGludG8gZGVidWdnZXIvZWRpdGxpbmUuYy4gUmVtb3ZlZCB0aGUKCXJlYWRsaW5lIHN1YmRpcmVjdG9yeS4KCgkqIFtmaWxlcy9wcm9maWxlLmNdCglBZGRlZCBQUk9GSUxFX0dldFdpbmVJbmlJbnQoKS4KCgkqIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0gW2xvYWRlci90YXNrLmNdCglUaGUgMTYtYml0IHN0YWNrZnJhbWUgbm93IGFsc28gZXhpc3RzIGZvciBXaW5lbGliIChldmVuIHRob3VnaCBpdAoJb25seSBldmVyIGNvbnRhaW5zIG9uZSBmcmFtZSkuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJQWRkZWQgZnVuY3Rpb24gTU9EVUxFX0NyZWF0ZUR1bW15TW9kdWxlKCkgdG8gY3JlYXRlIGEgZHVtbXkgV2luMTYKCW1vZHVsZSBmb3IgV2luZWxpYiBhbmQgV2luMzIuCgoJKiBbbWVtb3J5L2xkdC5jXQoJTWFrZSBzdXJlIHRoZSBsZHQgZW50cnkgY29udGVudHMgd2lsbCBiZSBhY2NlcHRhYmxlIGZvciB0aGUgTGludXgKCWtlcm5lbC4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCUZpeGVkIFNldFNlbGVjdG9yTGltaXQoKSB3aGVuIHRoZSBsaW1pdCBpcyBpbiBwYWdlcy4KCgkqIFttaXNjL3BvcnQuY10KCUFkZGVkIG1lbW1vdmUoKS4KCgkqIFttaXNjZW11L2RwbWkuY10KCUNsZWFyIHRoZSBzZWdtZW50IHJlZ2lzdGVycyB0aGF0IGNvbnRhaW4gdGhlIHNlbGVjdG9yIGJlaW5nIGZyZWVkCglpbiBpbnQzMS9heD0wMDAxLgoJQWRkZWQgbWlzc2luZyBicmVhayBhZnRlciBTZWxlY3RvckFjY2Vzc1JpZ2h0cyBjYWxsLgoKCSogW3dpbjMyL3N0cnVjdDMyLmNdCglBZGRlZCBjb252ZXJzaW9ucyBmb3IgTURJQ1JFQVRFU1RSVUNULgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJQWRkZWQgbWVzc2FnZSBjb252ZXJzaW9ucyBmb3IgV01fTURJQ1JFQVRFLgoKVHVlIEp1bCAxNiAxOTo0NjoyNCAxOTk2ICBQYXZlbCBLYW5rb3Zza3kgPEtBTkBmcm9kZS5kY2l0LmN6PgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCUFkZGVkIEdldEV4ZVB0cigpIGNhbGwgaW4gQ0xBU1NfRmluZENsYXNzQnlBdG9tKCkuCgpNb24gSnVsIDE1IDE3OjQ5OjM4IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2lmMTYzMi8qLnNwZWNdCglTb21lIG1vcmUgdHJpdmlhbCBzcGVjcyBhZGRlZC4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY10gW29iamVjdHMvZm9udC5jXVt3aW5kb3dzL2RpYWxvZy5jXQoJQ3JlYXRlRm9udDMyKiBhZGRlZCwgY2hhbmdlZCB0byBuZXcgbmFtaW5nIHN0ZC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW2luY2x1ZGUvbW1zeXN0ZW0uaF0gW2luY2x1ZGUvd2ludHlwZXMuaF0KCVNvbWUgZGVmaW5lcy90eXBlcyBhZGRlZC4KCgkqIFt3aW4zMi90aHJlYWQuY10KCVRsc1NldFZhbHVlKCkgcmV0dXJucyBib29sZWFuLgoKCSogW3dpbjMyL3Jlc291cmNlLmNdIFtsb2FkZXIvcGVfcmVzb3VyY2UuY10gW2xvYWRlci9yZXNvdXJjZS5jXQogCSAgW2NvbnRyb2xzL21lbnUuY10gW29iamVjdHMvYml0bWFwLmNdCglDbGVhbnVwIG9mIHRoZSByZXNvdXJjZSBmdW5jdGlvbnMsIG1vc3RseSBjaGFuZ2VzIHRvIG5ldyBuYW1pbmcKIAlzdGFuZGFyZCBhbmQgZml4aW5nIG9mIGFyZ3VtZW50IHR5cGVzIHNvIHRoYXQgdGhleSBhZ3JlZSB3aXRoIHRoZQogCXdpbjE2L3dpbjMyIEFQSS4KClRodSBKdWwgMTEgMTU6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy93aW5wb3MuY10KCVNob3dXaW5kb3coKSBmaXhlcy4KCgkqIFt3aW5kb3dzL21kaS5jXQoJRml4IHJldmVyc2VkIExQQVJBTSBpbiBXTV9NRElBQ1RJVkFURS4KCgkqIFt3aW5lLmluaV0KCU5ldyBvcHRpb24gQWxsb2NTeXN0ZW1Db2xvcnMgdGVsbHMgV2luZSBob3cgbWFueSBjb2xvcnMgdG8gZ3JhYgoJZnJvbSB0aGUgc3lzdGVtIGNvbG9ybWFwLgoKCSogW29iamVjdHMvYml0Ymx0LmNdIFtvYmplY3RzL2RjLmNdCglGaXhlZCBwaW5rIGdhcmJhZ2Ugb3ZlciBXb3JkIGJ1dHRvbnMgaW4gUHNldWRvQ29sb3IuIEFkZGVkCglvcHRpb25hbCBEU1RJTlZFUlQgc2hvcnRjdXQgZm9yIGZhc3RlciB0ZXh0IHNlbGVjdGlvbi4KCgkqIFttaXNjL3dzcHJpbnRmLmNdCglTa2lwIGJvZ3VzIHNlZ21lbnRlZCBwb2ludGVycyBpbiB3c3ZucHJpbnRmMTYoKS4gCgoJKiBbb2JqZWN0cy9nZGlvYmouY10KCUFkZGVkIHBhbGV0dGUgaGFuZGxpbmcgdG8gVW5yZWFsaXplT2JqZWN0KCkuIAoKCSogW29iamVjdHMvY29sb3IuY10gW29iamVjdHMvcGFsZXR0ZS5jXSBbd2luZG93cy9kY2UuY10KCVdpbmUgZ2V0cyBwYWxldHRlIG1hbmFnZXIgd2l0aCBzdXBwb3J0IGZvciBtb3JlIHRoYW4gMjAgY29sb3JzLiAKCU9ubHkgUHNldWRvQ29sb3IgYW5kIFRydWVDb2xvciB2aXN1YWxzIHRlc3RlZCBzbyBmYXIuCgoJKiBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3Mvd2luLmNdIAoJU2V0IFggc2l6ZSBoaW50cyBmb3IgV1NfRVhfRExHTU9EQUxGUkFNRSB3aW5kb3dzIChubyByZXNpemUpIGFuZAoJdXNlIFhSZWNvbmZpZ3VyZVdNV2luZG93cygpIGluc3RlYWQgb2YgWENvbmZpZ3VyZVdpbmRvdygpIGluCgltYW5hZ2VkIG1vZGUuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJRG8gbm90IGFsbG9jYXRlIG1vcmUgdGhhbiA2NDBLIG9mIERPUyBtZW1vcnkuCgoJKiBbbWlzYy9tYWluLmNdCglEbyBub3QgYWxsb3cgLWRlc2t0b3AgYW5kIC1tYW5hZ2VkIHRvZ2V0aGVyLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGcmkgSnVsIDEyIDE3OjQzOjA1IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJVXNlIFdpbjMyIGhlYXAgZnVuY3Rpb25zIHRvIGFsbG9jYXRlIHNjcm9sbC1iYXIgaW5mbyBzdHJ1Y3R1cmUuCgoJKiBbZGVidWdnZXIvZGJnLnldIFtkZWJ1Z2dlci9yZWdpc3RlcnMuY10KCUFkZGVkIHN1cHBvcnQgZm9yIEZTIGFuZCBHUyBzZWdtZW50IHJlZ2lzdGVycy4KCUNoZWNrIHRoYXQgc2VnbWVudCByZWdpc3RlcnMgdmFsdWUgYXJlIE9LIGJlZm9yZSByZXR1cm5pbmcgZnJvbQoJdGhlIHNpZ25hbCBoYW5kbGVyLgoKCSogW3Rvb2xzL2J1aWxkLmNdIFtpZjE2MzIvcmVsYXkuY10gW2xvYWRlci9idWlsdGluLmNdCglDaGFuZ2VkIHJlbGF5IGRlYnVnZ2luZyBmb3IgV2luMzIgZnVuY3Rpb246IHRoZSByZWxheSBjb2RlIG5vdwoJcGFzc2VzIHRoZSBlbnRyeSBwb2ludCBhZGRyZXNzIGluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG5hbWUuCgoJKiBbdG9vbHMvYnVpbGQuY10gW21pc2NlbXUvKi5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgZGF0YSBlbnRyeSBwb2ludHMgaW4gV2luMzIgRExMcy4KCUFkZGVkICdjZGVjbCcgZnVuY3Rpb24gdHlwZSBmb3IgV2luMzIuCglGb3IgJ3JlZ2lzdGVyJyBmdW5jdGlvbiwgdGhlIHJlbGF5IGNvZGUgbm93IHBhc3NlcyBhIHBvaW50ZXIgdG8KCXRoZSBTSUdDT05URVhUIHN0cnVjdHVyZS4KCQoJKiBbaW5jbHVkZS9yZWdpc3RlcnMuaF0gW2luY2x1ZGUvd2luZS5oXQoJTW92ZWQgU0lHQ09OVEVYVCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpbiByZWdpc3RlcnMuaC4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCURvbid0IGRpZSBhdCBvbmNlIGlmIHNvbWUgV2luMzIgZW50cnkgcG9pbnRzIGNhbm5vdCBiZSBmb3VuZCwgYnV0CglzZXQgdGhlbSB0byBOVUxMLCBqdXN0IGxpa2Ugd2UgZG8gZm9yIFdpbjE2LiBUaGlzIGFsbG93cyBzb21lCglwcm9ncmFtcyB0byBnbyBmdXJ0aGVyIGJlZm9yZSBjcmFzaGluZy4KCgkqIFtsb2FkZXIvdGFzay5jXSBbbG9hZGVyL21haW4uY10KCU1vdmVkIGdsb2JhbCBpbml0aWFsaXphdGlvbnMgZnJvbSBJbml0VGFzaygpIHRvIE1BSU5fSW5pdCgpLCBhcwoJdGhleSBubyBsb25nZXIgbmVlZCBhIHRhc2sgY29udGV4dCB3aXRoIHRoZSBuZXcgU0VHUFRSIGhlYXAgZnVuY3Rpb25zLgoKCSogW21lbW9yeS9zdHJpbmcuY10KCUFkZGVkIGxzdHJjcHluQXRvVyBhbmQgbHN0cmNweW5XdG9BOyBub3QgcmVhbCBBUEkgZnVuY3Rpb25zLCBidXQKIAl2ZXJ5IGNvbnZlbmllbnQuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJUGFydGlhbGx5IGltcGxlbWVudGVkIERyYXdFZGdlKCkuCgoJKiBbd2luZG93cy90aW1lci5jXSBbd2luZG93cy9jYXJldC5jXQoJSW1wbGVtZW50ZWQgV2luMzIgdGltZXIgaGFuZGxpbmcuIFVwZGF0ZWQgY2FyZXQgbWFuYWdlbWVudCB0byB1c2UKCVdpbjMyIHRpbWVycyAoYXZvaWRzIGhhdmluZyB0byB1c2UgYSBXaW4xNiBjYWxsYmFjaykuCgoJKiBbd2luZG93cy93aW4uY10KCVByZXZlbnQgcHJvZ3JhbXMgZnJvbSBzZXR0aW5nIHNvbWUgc3R5bGUgYml0cyB3aXRoCglTZXRXaW5kb3dMb25nKCkuIFRoaXMgc2hvdWxkIGZpeCBzb21lIEJhZE1hdGNoIGNyYXNoZXMuCglMaW5rIG5ldyB3aW5kb3dzIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmtlZCBsaXN0LgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglEb24ndCB0cnkgdG8gYWN0aXZhdGUgYSBjaGlsZCB3aW5kb3cgaW4gU2hvd1dpbmRvdygpLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJQWRkZWQgYSAzMi0+MzIgdGh1bmsgdG8gc3VwcG9ydCBBbnNpLVVuaWNvZGUgdHJhbnNsYXRpb24uCgpXZWQgSnVsIDEwIDIyOjExOjEyIDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2ZpbGVzL2RpcmVjdG9yeS5jXQoJQWRkaXRpb25hbCAodW5kb2N1bWVudGVkKSByZXR1cm4gdmFsdWUgZm9yIEdldFRlbXBEcml2ZSgpIGFkZGVkLgoKCSogW2ZpbGVzL2Rvc19mcy5jXSBbZmlsZXMvZmlsZS5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglHZXRUZW1wRmlsZU5hbWUzMiogYWRkZWQuCglHZXRTaG9ydFBhdGhOYW1lKiBhZGRlZC4KCgkqIFttZW1vcnkvc3RyaW5nLmNdCglXaW4xNiBsc3RyY3B5KCkgY2FuIGdldCBOVUxMIHB0cnMgYXMgYXJndW1lbnQgYW5kIHN1cnZpdmUuCgoJKiBbbWlzYy9semV4cGFuZC5jXQoJTFpPcGVuRmlsZSgpOiBhbHNvIHRyeSBvcGVuaW5nIHdpdGggY29tcHJlc3NlZCBmaWxlbmFtZSBpZiBub3JtYWwKIAlvcGVuIGZhaWxzLgoKCSogW21pc2Mvb2xlMm5scy5jXSBbbWlzYy9sc3RyLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUNoYXIqIGFkZGVkLgoJQ29tcGFyZVN0cmluZyogYWRkZWQuCgpTdW4gSnVsICA3IDAxOjIyOjE0IDE5OTYgIEp1a2thIElpdm9uZW4gPGlpdm9uZW5AY2MuaGVsc2lua2kuZmk+CgoJKiBbb2JqZWN0cy9mb250LmNdIFtpZjE2MzIvZ2RpMzIuc3BlY10KCUNyZWF0ZUZvbnRJbmRpcmVjdDMyQSBhbmQgQ3JlYXRlRm9udEluZGlyZWN0MzJXIGFkZGVkLgoKCSogW21pc2Mvb2xlMm5scy5jXQoJR2V0VXNlckRlZmF1bHRMQ0lEIHJldHVybiB2YWx1ZXMgdXBkYXRlZCBmb3IgbmV3IGxhbmd1YWdlcy4KCUZpbm5pc2ggc3VwcG9ydCBhZGRlZCBmb3IgR2V0TG9jYWxlSW5mb0EuCgoJKiBbb2JqZWN0L3BhbGV0dGVdIFtnZGkzMi5zcGVjXQoJUmVhbGl6ZVBhbGV0dGUzMiBhbmQgU2VsZWN0UGFsZXR0ZTMyIGFkZGVkLgoJClNhdCBKdWwgIDYgMTc6Mjc6MzAgMTk5NiAgUm9uYW4gV2FpZGUgIDxyb290QHdhaWRlci5pZT4KCgkqIFttaXNjL3NoZWxsLmNdCglGaXh1cCBmb3IgU0hFTExfRmluZEV4ZWN1dGFibGUgc28gdGhhdCBGaWxlLT5SdW4gZnJvbSBwcm9nbWFuCgl3b3JrcyBvbmNlIG1vcmUuIFN0aWxsIG5lZWRzIHNvbWUgbW9yZSBmaXh1cHMgLSBncmVwIGZvciBGSVhNRSBpbgoJdGhpcyBmaWxlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGcmkgSnVsICA1IDE2OjI3OjQzIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KCVVzZSBXaW5kb3dzIGZpbGUgSS9PIHJvdXRpbmVzIHRvIGxvYWQgdGhlIGRlc2t0b3AgYml0bWFwLgoKCSogW2ZpbGVzL2ZpbGUuY10KCUltcGxlbWVudGVkIFJlbW92ZURpcmVjdG9yeSogYW5kIERlbGV0ZUZpbGUqLgoKCSogW2luY2x1ZGUvd2luZS5oXQoJQWRkZWQgU0lHQ09OVEVYVCB0eXBlZGVmIHRvIHJlcGxhY2UgI2RlZmluZSBzaWdjb250ZXh0X3N0cnVjdC4KCgkqIFtsb2FkZXIvdGFzay5jXQoJRml4ZWQgaW5pdGlhbCBicmVha3BvaW50IHNldHRpbmcgZm9yIFdpbjMyIHRhc2tzLgoKCSogW21pc2Mvd3NwcmludGYuY10KCUlnbm9yZSBVbmljb2RlIGZvcm1hdHMgZm9yIHdzcHJpbnRmMTYoKS4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgR2V0VGV4dE1ldHJpY3MuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9jbGFzcy5jXQoJICBbd2luZG93cy9kaWFsb2cuY10KCU1vZGlmaWVkIHdpbmRvd3MgcHJvY2VkdXJlcyB0byB1c2UgdGh1bmtzLCB0byBlbnN1cmUgdGhhdCB0aGUKCXByb2NlZHVyZSBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIFdpbmRvd3MgcHJvZ3JhbS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWRkZWQgZnVuY3Rpb24gV0lOX0J1aWxkV2luQXJyYXkoKSB0byBtYWtlIGl0IGVhc2llciB0byBlbnVtZXJhdGUKCXdpbmRvd3MuIEltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgRW51bVdpbmRvd3MoKSBhbmQgZnJpZW5kcy4KCkZyaSBKdWwgIDUgMTE6NTY6MjIgMTk5NiAgQW5kcmVhcyBLaXJzY2hiYXVtIDxhbmtAcmJnLmluZm9ybWF0aWsudGgtZGFybXN0YWR0LmRlPgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXSBbd2luZG93cy93aW4uY10KCU9wZXJhdG9yIHByZWNlZGVuY2UgZml4ZXMuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJSW1wbGVtZW50ZWQgRVNfUEFTU1dPUkQsIEVTX0xPV0VSQ0FTRSBhbmQgRVNfVVBQRVJDQVNFIHN0eWxlcy4KCUZpeGVkIHdvcmQgd3JhcCB3aXRoIGxvbmcgd29yZHMuCgoJKiBbZGVidWdnZXIvZGVidWcubF0KCU5ldyBhbGlhcyAid2hlcmUiIGZvciBjb21tYW5kICJiYWNrdHJhY2UiLgoKCSogW2lmMTYzMi9nZGkuc3BlY10KCUNvcnJlY3RlZCBwYXJhbWV0ZXIgb2YgRXh0VGV4dE91dC4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglDb3JyZWN0ZWQgcHJpbnRpbmcgb2YgdGFibGUgb2YgbW9kdWxlcy4KCgkqIFttaXNjL3NweS5jXQoJUmVtb3ZlZCBzdXBlcmZsdW91cyBcbiBpbiBtZXNzYWdlIG5hbWUuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglEZWNsYXJlZCBNU0dfU2VuZE1lc3NhZ2UgYXMgc3RhdGljLgoJQ2hhbmdlZCBwYXJhbWV0ZXIgb2YgRGlyZWN0ZWRZaWVsZCgpIGZyb20gcXVldWUgaGFuZGxlIHRvIHRhc2sgaGFuZGxlLgoJUmVtb3ZlZCB3YXJuaW5nIG1lc2FnZXMgZm9yIGFyZ3VtZW50IG9mIHByaW50Zi4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQWRkZWQgdGhlIGZsYWcgRFRfTk9QUkVGSVggd2hlbiBkcmF3aW5nIHdpbmRvdyB0aXRsZXMuCgoJKiBbd2luZG93cy93aW4uY10KCVdJTl9XYWxrV2luZG93cyBub3cgcHJpbnRzIHRoZSBpbnZhbGlkIHdpbmRvdyBoYW5kbGUuCglBZGRlZCBhIHdhcm5pbmcgaWYgR2V0LS9TZXRXaW5kb3dXb3JkLy1Mb25nIGdldHMgYW4gaW52YWxpZCBvZmZzZXQuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdCglBbGxvd3MgY3JlYXRpbmcgZGlhbG9nIHdpbmRvd3Mgd2l0aCBOVUxMIGFzIGRpYWxvZyBmdW5jdGlvbi4KCldlZCBKdWwgIDMgMDk6MjY6NDEgMTk5NiAgQW5kcmV3IExld3lja3kgPHBsZXd5Y2t5QG9pc2UudXRvcm9udG8uY2E+CgoJKiBbd2luZG93cy9ldmVudC5jXQoJRVZFTlRfa2V5OiBGaXhlcyB0byBWS18gY29kZSBnZW5lcmF0aW9uIGZvciBzcGFjZSBiYXIgYW5kCglwdW5jdHVhdGlvbi4KCgkqIFtmaWxlcy9maWxlLmNdCglHZXRUZW1wRmlsZU5hbWU6IGZpcnN0IGNoYXJhY3RlciBpbiB0ZW1wb3JhcnkgbmFtZSBpcyAifiIuCgoJKiBbbWVtb3J5L2hlYXAuY10KCUhFQVBfTWFrZUluVXNlQmxvY2tGcmVlIG5vdyBmcmVlcyB0aGUgd2hvbGUgc3ViaGVhcCBpZiBwb3NzaWJsZS4KCgkqIFtvYmplY3RzL3RleHQuY10KCUV4dFRleHRPdXQxNigpOiBoYW5kbGUgTlVMTCBscFJlY3QgYW5kIEVUT19PUEFRVUUuCgoJKiBbbWlzYy9kcml2ZXIuY10KCVJlbW92ZWQgc29tZSBidWdzIGFuZCByZWZvcm1hdHRlZC4gQWN0dWFsbHkgbG9hZHMgZHJpdmVycyBub3cuCgoJKiBbaW5jbHVkZS9jYWxsYmFjay5oXQoJQWRkZWQgQ2FsbERyaXZlclByb2MoKSBhbmQgQ2FsbFdpbmRvd3NFeGl0UHJvYygpLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCU1PRFVMRV9DYWxsV0VQKCk6IG5ldyBmdW5jdGlvbi4KCgkqIFttaXNjL2x6ZXhwYW5kLmNdCglMWlNlZWsoKTogcmV0dXJuIG5ldyBwb2ludGVyLCBub3Qgb2xkIG9uZS4KCgkqIFttaXNjL3Zlci5jXQoJZmluZF9uZV9yZXNvdXJjZSgpOiBmaXhlZCBkZXBlbmRlbmNlIG9uIExaU2VlaygpIGJ1Zy4KCUdldEZpbGVSZXNvdXJjZSgpOiBpbml0aWFsaXplIHJlc2xlbiBiZWZvcmUgdXNpbmcgaXQuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJU2V0Q2xhc3NXb3JkKCk6IGFkZCBtaXNzaW5nIGVsc2UuCgoJKiBbb2JqZWN0cy9mb250LmNdCglscEZvbnRMaXN0IGlzIG5vdyBNQVhfRk9OVFMrMS4gSXQgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGFycmF5LgoJSW5pdEZvbnRMaXN0OiBhbGxvY2F0ZSBvbmUgaHVnZSBhcnJheSBvZiBzdHJ1Y3R1cmVzLgoJRk9OVF9NYXRjaEZvbnQ6IHVwcGVyY2FzZSB0aGUgZmFjZSBuYW1lLgoKVGh1IEp1biAyNyAxMjo0MTo0MCAxOTk2ICBCcnVjZSBNaWxuZXIgPGJydWNlQGdlbmV0aWNzLnV0YWguZWR1PgoKCSogW21lbW9yeS9oZWFwLmNdCglGaXhlZCBhIHR5cG8gaW4gSGVhcFJlQWxsb2MoKS4KClR1ZSBKdW4gMjUgMjI6MjI6MDMgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdIFtmaWxlcy9kcml2ZS5jXSBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJICBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpZjE2MzIvc2hlbGwuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXQoJR2V0VGVtcFBhdGgqIGFkZGVkCglHZXREcml2ZVR5cGUqIGZpeGVkLCB1cGRhdGVkIHRvIE5ld05hbWVTdGFuZGFyZC4KCUdldEN1cnJlbnREaXJlY3RvcnkqIGZpeGVkIChuZWVkcyB0byBwcmVwZW5kIFg6XCkuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTWlzc2luZyBOVUxMIGNoZWNrIGFkZGVkLgoKCSogW2lmMTYzMi93aW5tbS5zcGVjXSBbbG9hZGVyL2J1aWx0aW4uY10KCXdpbm1tLmRsbCAoMzJiaXQgbW1zeXN0ZW0gZXF1aXZhbGVudCkgc3BlY3MgYWRkZWQuCgoJKiBbbWVtb3J5L3N0cmluZy5jXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCVJ0bHtNb3ZlLFplcm8sRmlsbH1NZW1vcnkgYWRkZWQuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJU29tZSBOVUxMIHB0ciBkZXJlZmVyZW5jZSBidWdzIGZpeGVkLgoKCSogW211bHRpbWVkaWEvbWNpY2RhLmNdW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KCUNoZWNrIGZvciBOVUxMIHB0ci4KCUZpbGwgbWNpT3BlbkRydiB3aGVuIG1peGluZyBtY2lPcGVuIGFuZCBtY2lTZW5kU3RyaW5nKCJvcGVuIC4uIikuCglBbGlhc2luZyBzaG91bGQgd29yayBmb3IgYWxsIE1DSSBkZXZpY2VzLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBbGxvdyBwYXNzaW5nIGludmFsaWQgd2luZG93IGhhbmRsZXMgdG8gQ2xvc2VXaW5kb3coKS4KClR1ZSBKdW4gMjUgMjA6MDI6MTUgMTk5NiAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJR2V0U3lzdGVtRGlyZWN0b3J5MzJBIGFuZCBHZXRTeXN0ZW1EaXJlY3RvcnkzMlcgYWRkZWQuCgoJKiBbbWlzYy9tYWluLmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUJlZXAgYW5kIFNldEVudmlyb25tZW50VmFyaWFibGUzMlcgYWRkZWQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBKdW4gMTkgMTQ6NDk6MjcgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBmYXVpNDUuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZmlsZXMvZHJpdmUuY10gCglHZXRGcmVlRGlza1NwYWNlKiwgR2V0Vm9sdW1lSW5mb3JtYXRpb24qIGFkZGVkLgoKCSogW2ZpbGVzL2ZpbGUuY10KCUZsdXNoRmlsZUJ1ZmZlcnMsIENyZWF0ZURpcmVjdG9yeSogYWRkZWQuCgoJKiBbaW5jbHVkZS93aW5iYXNlLmhdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCVByb3RvdHlwZXMsIGRlZmluZXMgYWRkZWQgYW5kIGZpeGVzLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaW5jbHVkZS9yZXNvdXJjZTMyLmhdCgkgIFt3aW4zMi9jdXJzb3JpY29uMzIuY10gW3dpbjMyL3Jlc291cmNlLmNdIFt3aW5kb3dzL2RpYWxvZy5jXQoJRml4ZXMgdG8gcmVzb3VyY2UgaGFuZGxpbmcuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglTcGVjcyBmb3IgaW1wbGVtZW50ZWQgZnVuY3Rpb25zIGFkZGVkCglTb21lIHRodW5rcyB0byBmdW5jdGlvbnMgd2hpY2ggYXJlIHNhbWUgYXMgd2luMTYgZXF1aXZhbGVudHMuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUdldEFwcENvbXBhdEZsYWdzKCkgYWRkZWQuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJT25lIG1pc3NpbmcgZWxzZSBhZGRlZCwgc21hbGwgaGFjayB0byBSZWdRdWVyeVZhbHVlMTYoKS4KCgkqIFt3aW4zMi9maWxlLmNdCglHZXRGaWxlQXR0cmlidXRlc0EoKSBmaXhlZCAod2FzIHVzaW5nIERPUyBwYXRoIGFzIFVOSVggcGF0aCkuCgpUdWUgSnVuIDE4IDIxOjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW2xvYWRlci9uZV9yZXNvdXJjZS5jXQoJRml4ZWQgRnJlZVJlc291cmNlKCkgcmV0dXJuIHZhbHVlLgoKCSogW29iamVjdHMvdGV4dC5jXQoJRml4ZWQgYSBidWcgaW4gRXh0VGV4dE91dCgpIHRoYXQgd2FzIGNhdXNpbmcgb3ZlcmxhcHBlZCBjaGFyYWN0ZXJzCglpbiBXaW5Xb3JkLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglTV1BfRlJBTUVDSEFOR0VEIGZvciB0b3AtbGV2ZWwgd2luZG93cyBub3cgaW52YWxpZGF0ZXMgY2xpZW50CglhcmVhIGFzIGNsb2NrLmV4ZSB3YW50cy4KClR1ZSBKdW4gMTggMTE6MzA6MjIgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglNaW5pIGJ1Z2ZpeDogJ3Jldml2YWwnIG9mIG1pc3Npbmcgc2Nyb2xsYmFyIGluIGxpc3Rib3hlcy4KCk1vbiBKdW4gMTcgMjA6Mjc6NDEgMTk5NiAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0ZyLnJjXSBbcmVzb3VyY2VzL1RPRE9dCglNYWRlIGNoYW5nZXMgZm9yIENob29zZV9Gb250IGRpYWxvZy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEp1biAxNiAxNjo1MTozMSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFttZW1vcnkvaGVhcC5jXQoJRml4ZWQgYnVnIGluIEhlYXBSZWFsbG9jICh0aGFua3MgdG8gQnJ1Y2UgTWlsbmVyKS4KCgkqIFttaXNjL3dzcHJpbnRmLmNdCglGaXhlZCBhcmd1bWVudCBzaXplIGZvciAlYyBmb3JtYXQgaW4gd3NwcmludGYxNigpLgoKCSogW29iamVjdHMvZGMuY10KCURvbid0IGZyZWUgaEZpcnN0Qml0bWFwIGZvciBzYXZlZCBEQ3MuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQWRkZWQgdGltZXIgaGFuZGxpbmcgaW4gRVZFTlRfV2FpdFhFdmVudCgpLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW4gTVNHX1RyYW5zbGF0ZU1vdXNlTXNnIGFuZCBNU0dfVHJhbnNsYXRlS2JkTXNnLCBjaGVjayBpZiB0aGUKCWV2ZW50IGlzIGZvciB0aGUgY3VycmVudCB0YXNrOyBpZiBub3QsIHdha2UgdGhlIG90aGVyIHRhc2suCgoJKiBbd2luZG93cy9xdWV1ZS5jXSBbaW5jbHVkZS9xdWV1ZS5oXQoJQWRkZWQgJ3NlbGYnIGhhbmRsZSBpbiBxdWV1ZSBzdHJ1Y3R1cmUuCgoJKiBbd2luZG93cy90aW1lci5jXQoJQWRkZWQgVElNRVJfRXhwaXJlVGltZXJzKCkgZnVuY3Rpb24gdG8gbWFyayBleHBpcmVkIHRpbWVycyBhbmQKCXdha2UgdXAgdGhlIGNvcnJlc3BvbmRpbmcgdGFza3MuCgpUaHUgSnVuIDEzIDAxOjQ2OjMzIEVEVCAxOTk2ICBXaWxsaWFtIE1hZ3JvIDx3bWFncm9AdGMuY29ybmVsbC5lZHU+CgoJKiBbd2luZG93cy9tYXBwaW5nLmNdCglGaXJzdCBwb2ludCBpbiBsaXN0IHdhcyBtYXBwZWQgbXVsdGlwbGUgdGltZXMgaW4gRFB0b0xQIGFuZAogCUxQdG9EUC4gIE90aGVyIHBvaW50cyB3ZXJlIG5vdCBtYXBwZWQuCgpXZWQgSnVuIDEyIDE4OjA4OjQ1IDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW21pc2Mvc2hlbGwuY10KCVNvbWUgZml4ZXMgZm9yIEV4dHJhY3RJY29uIGZ1bmN0aW9uIGZhbWlseS4KCgkqIFtkb2N1bWVudGF0aW9uL3VzZXJfbW9kdWxlXQoJQ2hhcHRlciBhYm91dCB3aW5kb3dpbmcgYW5kIG1lc3NhZ2luZyBzdWJzeXN0ZW1zLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgSnVuIDExIDE1OjIwOjQzIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2RlYnVnZ2VyL2JyZWFrLmNdIFtsb2FkZXIvc2lnbmFsLmNdCglGaXhlZCBicmVha3BvaW50cyBpbiAzMi1iaXQgY29kZS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIG1hbnkgbW9yZSBXaW4zMiB2ZXJzaW9ucyBvZiBzdGFuZGFyZCBzdHJ1Y3R1cmVzLgoKCSogW2luY2x1ZGUvd2lucmVnLmhdIFttaXNjL3JlZ2lzdHJ5LmNdCglNb3ZlZCBwcml2YXRlIHR5cGVzIGludG8gcmVnaXN0cnkuYy4KCgkqIFttZW1vcnkvc3RyaW5nLmNdIChOZXcgZmlsZSkKCU1vdmVkIG1vc3Qgc3RyaW5nIGZ1bmN0aW9ucyBmcm9tIG1pc2MvbHN0ci5jOyBhZGRlZCBXaW4zMiB2ZXJzaW9uCglvZiBhbGwgZnVuY3Rpb25zLgoKCSogW21pc2Mvd3NwcmludGYuY10KCUltcGxlbWVudGVkIFdpbjMyIHdzcHJpbnRmIGZ1bmN0aW9ucy4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJSW1wbGVtZW50ZWQgV2luMzIgYml0bWFwIGZ1bmN0aW9ucy4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJRG9uJ3Qgc2V0IGRpYWxvZyBwcm9jZWR1cmUgYmVmb3JlIHRoZSBjb250cm9scyBhcmUgY3JlYXRlZC4gVGhpcwoJYXZvaWRzIGEgY3Jhc2ggaW4gV2luaGVscC4KClR1ZSBKdW4gMTEgMTQ6MTA6MDYgMTk5NiBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2NvbnRyb2xzL21lbnUuY10gW2lmMTYzMi91c2VyLnNwZWNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCVJlcGxhY2UgUGVla01lc3NhZ2Ugd2l0aCBQZWVrTWVzc2FnZTE2LgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVttaXNjL21haW4uY10KCUdldFZlcnNpb24zMixHZXRWZXJzaW9uRXgzMkEsR2V0VmVyc2lvbkV4MzJXOiBuZXcgZnVuY3Rpb25zLgoJTUFJTl9QYXJzZVZlcnNpb246IG5ldyBmdW5jdGlvbiwgbmV3IGNvbW1hbmQgbGluZSBvcHRpb24gLXdpbnZlci4KCUdldFZlcnNpb246IG1vZGlmaWVkIHRvIHRha2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50IGludG8gYWNjb3VudC4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW3dpbjMyL3Byb2Nlc3MuY10KCUZyZWVMaWJyYXJ5MzI6IG5ldyBmdW5jdGlvbi4KCVRsc0FsbG9jOiBpbml0aWFsaXplIFRscyB0byB6ZXJvLgoJSW50ZXJsb2NrZWRJbmNyZW1lbnQsSW50ZXJsb2NrZWREZWNyZW1lbnQsSW50ZXJsb2NrZWRFeGNoYW5nZTogbmV3CglmdW5jdGlvbnMuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglTZXRFcnJvck1vZGUsR2V0QWN0aXZlV2luZG93OiBuZXcgcmVsYXlzIHRvIGV4aXN0aW5nIGZ1bmN0aW9ucy4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11bd2luMzIvdXNlcjMyLmNdCglQZWVrTWVzc2FnZTMyQSxQZWVrTWVzc2FnZTMyVzogbmV3IGZ1bmN0aW9ucy4KCgkqIFtpbmNsdWRlL3N0cnVjdDMyLmhdW2luY2x1ZGUvd2luZG93cy5oXQoJTW92ZWQgTVNHMzIgdG8gd2luZG93cy5oLgoJUmVuYW1lZCBNU0cgdG8gTVNHMTYuCglNb2RpZmllZCBwcm90b3R5cGVzIHRvIHVzZSBNU0cxNgoKCSogW2luY2x1ZGUvd2luYmFzZS5oXQoJT1NWRVJTSU9OSU5GTzMyQSxPU1ZFUlNJT05JTkZPMzJXOiBuZXcgc3RydWN0dXJlcy4KClN1biBKdW4gIDkgMjA6NTM6MzAgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXSBbbG9hZGVyL2J1aWx0aW4uY10KCXZlcnNpb24uZGxsLGx6MzIuZGxsIGFkZGVkLgoKCSogW2luY2x1ZGUvbHpleHBhbmQuaF0gW2lmMTYzMi9sejMyLnNwZWNdIFtpZjE2MzIvbHpleHBhbmQuc3BlY10KCSAgW21pc2MvbHpleHBhbmQuY10KCWx6MzIuZGxsIGFkZGVkLgoJTW9kaWZpZWQgdG8gbmV3IGZ1bmN0aW9uIG5hbWluZyBzdGFuZGFyZC4KCgkqIFtpbmNsdWRlL3Zlci5oXSBbaWYxNjMyL3Zlci5zcGVjXSBbaWYxNjMyL3ZlcnNpb24uc3BlY10gW21pc2MvdmVyLmNdCgl2ZXJzaW9uLmRsbCBhZGRlZCAod2luMzIgdmVyc2lvbiBvZiB2ZXIuZGxsKS4KCU1vZGlmaWVkIHRvIG5ldyBmdW5jdGlvbiBuYW1pbmcgc3RhbmRhcmQuCglVc2UgcmVnaXN0cnkgdG8gbG9vayB1cCBhIExPQ0FMRSBsYW5naWRzIHRvby4KCShWZXJJbnN0YWxsRmlsZSxWZXJGaW5kRmlsZSBzdGlsbCBzdHVicykKCkZyaSBKdW4gIDcgMjA6NDA6MjAgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtmaWxlcy9maWxlLmNdCglBZGRlZCBhIHdhcm5pbmcgaWYgR2V0VGVtcEZpbGVOYW1lKCkgZ2V0cyBhIGJhZCBkcml2ZSBwYXJhbWV0ZXIuCgoJKiBbbWlzYy9jb21tZGxnLmNdCglDaGFuZ2VkIGZpbGUgbGlzdGJveCBjb2xvciB0byBncmF5IGluIFNhdmVGaWxlIGRpYWxvZyAKCShqdXN0IGxpa2UgV2luZG93cyBkb2VzIHRoaXMpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgSnVuICA1IDIwOjEzOjU0IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXSBbY29udHJvbHMvbGlzdGJveC5jXQoJRml4ZWQgd1BhcmFtIG9mIFdNX0RSQVdJVEVNIG1lc3NhZ2UuCgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXSBbbG9hZGVyL2J1aWx0aW4uY10KCVJlbW92ZSBXUFJPQ1MzMiBETEwsIGFzIHRoZSByZWxheSBjb2RlIGNhbiBjYWxsIFdpbmUgcm91dGluZXMKCWRpcmVjdGx5LgoKCSogW2xvYWRlci9tb2R1bGUuY10gW2xvYWRlci9uZV9pbWFnZS5jXQoJRml4ZWQgaW5pdGlhbCBzdGFjayBsYXlvdXQgZm9yIHNlbGYtbG9hZGluZyBtb2R1bGVzLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglGaXhlZCBkYXRhIHNlZ21lbnQgYnVpbGRpbmcgZm9yIFdpbjE2IG1vZHVsZXMuCgoJKiBbd2luZG93cy9kZWZkbGcuY10KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb25zIG9mIERlZkRsZ1Byb2MoKS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJTWVyZ2VkIFdpbjE2IGFuZCBXaW4zMiBkaWFsb2cgY29kZS4KCUFkZGVkIHN1cHBvcnQgZm9yIGNvbnRyb2wgZXh0cmEgZGF0YSBpbiBkaWFsb2cgaXRlbSB0ZW1wbGF0ZS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJVW5pZmllZCBXaW4xNiBhbmQgV2luMzIgdmVyc2lvbnMgb2YgQ3JlYXRlV2luZG93KCkuCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIEdldFdpbmRvd0xvbmcoKS4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10KCUNoYW5nZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHdpbmRvdyBwcm9jZWR1cmVzLCBzbyB0aGF0IDE2LWJpdAoJd2lucHJvY3MgYXJlIHZhbGlkIHNlZ21lbnRlZCBwb2ludGVycy4KClN1biBKdW4gIDIgMTY6Mzk6NDYgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJRml4ZWQgYW5vdGhlciBidWcgaW4gdGhlIHc5NSBsb2FkZXIuIFF1aWV0ZW5lZCBzb21lIGRlYnVnIG91dHB1dC4KClN1biBKdW4gIDIgMTA6MDA6MjIgMTk5NiAgVWxyaWNoIFNjaG1pZCAgPHVzY2htaWRAbWFpbC5oaC5wcm92aS5kZT4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10KCUJ1ZyBmaXg6IFdNX1BBUkVOVE5PVElGWTogZG9uJ3QgZmFsbCB0aHJvdWdoIHRvIFdNX1NFVFRFWFQuCgpTYXQgSnVuICAxIDEyOjM3OjIyIDE5OTYgIFRyaXN0YW4gVGFycmFudCA8dHN0QHN0aGluYy5kZW1vbi5jby51az4KCgkqIFtyZXNvdXJjZXMvVE9ET10gW3Jlc291cmNlcy9zeXNyZXNfSXQucmNdCglVcGRhdGVkIGZvbnQgZGlhbG9nIGJveC4KClRodSBNYXkgMzAgMjE6MDU6MTkgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtpbmNsdWRlL2NvbW1kbGcuaF0gW21pc2MvY29tbWRsZy5jXQoJQ2hvb3NlRm9udCgpIGFuZCBDaG9vc2VDb2xvcigpOiAKCUJ1Z2ZpeGVzIGFuZCBhZGRlZCBtb3JlIHN1cHBvcnQgZm9yIHNvbWUgQ0ZfKiBhbmQgQ0NfKiBmbGFnczogCglkaWFsb2cgdGVtcGxhdGVzIGFuZCBmb250IHNpemUgY29udHJvbC4KCUJ1Z2ZpeCBpbiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBvZiBDSE9PU0VDT0xPUiBkZWZpbml0aW9uLgoKCSogW2lwYy9kZGVfcHJvYy5jXSBbd2luZG93cy9ldmVudC5jXQoJUmVwbGFjZWQgU2VuZE1lc3NhZ2Ugd2l0aCBTZW5kTWVzc2FnZTE2IGFuZCBhZGRlZCBpbmNsdXNpb24gb2YKIAlkZGVfcHJvYy5oIGZvciBlcnJvci1mcmVlIGNvbXBpbGF0aW9uIG9mIGlwYyBtb2R1bGUuCgpUaHUgTWF5IDMwIDE5OjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglNYWRlIFNjcm9sbERDIHRvIHNhdmUvcmVzdG9yZSBjdXJyZW50IGNsaXBwaW5nIHJlZ2lvbi4KCgkqIFttaXNjL2NsaXBib2FyZC5jXSBbd2luZG93cy9ldmVudC5jXQoJSW1wbGVtZW50ZWQgbW9zdCBvZiB0aGUgcHJldmlvdXNseSBtaXNzaW5nIGZlYXR1cmVzIChub3QgdGVzdGVkKSwgCglpbXByb3ZlZCB0ZXh0IHBhc3RpbmcgZnJvbS90byBYLiAKCgkqIFtpZjE2MzIvdXNlci5zcGVjXSBbaWYxNjMyL2dkaS5zcGVjXSBbb2JqZWN0cy9kYy5jXQoJICBbb2JqZWN0cy9nZGlvYmouY10gW29iamVjdHMvY2xpcHBpbmcuY10gW3dpbmRvd3MvZGNlLmNdCgkgIFt3aW5kb3dzL3dpbnBvcy5jXSBbd2luZG93cy9wYWludGluZy5jXQoJVXBkYXRlZCBEQ0UgY29kZSwgaW1wbGVtZW50ZWQgZHluYW1pYyBpbnZhbGlkYXRpb24gb2Ygb3duZWQgRENzLgoJVGhpcyBmaXhlcyBhIGxvdCBvZiBwcm9ibGVtcyB3aXRoIHNjcm9sbGluZyBpbiBXaW5Xb3JkLiBOb3QKCXN1cmUgYWJvdXQgdGhlIGVmZmVjdCBvbiAtZGVza3RvcC4KCldlZCBNYXkgMjkgMjM6MzU6NDQgMTk5NiAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KCgkqIFt3aW4zMi90aW1lLmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUFkZGVkIFNldFN5c3RlbVRpbWUgYW5kIFNldFRpbWVab25lSW5mb3JtYXRpb24uCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglBZGRlZCBsc3RyY2F0LCBsc3RyY2F0QSwgbHN0cmNtcCwgbHN0cmNtcEEsIGxzdHJjcHksIGxzdHJsZW4uCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBTWVNURU1fUE9XRVJfU1RBVFVTIHN0cnVjdHVyZSBhbmQgcHJvdG90eXBlcyBmb3IKCUdldFN5c3RlbVBvd2VyU3RhdHVzLCBTZXRTeXN0ZW1Qb3dlclN0YXRlLCBTZXRTeXN0ZW1UaW1lLgoKCSogW2luY2x1ZGUva2VybmVsMzIuaF0KCUFkZGVkIGEgcHJvdG90eXBlIGZvciBTZXRUaW1lWm9uZUluZm9ybWF0aW9uLgoKCSogW3dpbjMyL2Vudmlyb25tZW50LmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUFkZGVkIEdldFN5c3RlbVBvd2VyU3RhdHVzIGFuZCBTZXRTeXN0ZW1Qb3dlclN0YXRlIHN0dWJzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgTWF5IDI4IDE5OjM2OjM2IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglEZXN0cm95IHRoZSBsaXN0Ym94IGFuZCBlZGl0IGNvbnRyb2wgd2hlbiBkZXN0cm95aW5nIHRoZQoJY29tYm8uIFRoaXMgc2hvdWxkIHByZXZlbnQgY3Jhc2hlcyBvbiBhcHBsaWNhdGlvbiBleGl0LgoKCSogW21pc2Mvc3lzdGVtLmNdIFtpZjE2MzIvc3lzdGVtLnNwZWNdCglJbXBsZW1lbnRlZCBJbnF1aXJlU3lzdGVtKCkuCgoJKiBbbG9hZGVyL3Rhc2suY10gW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy9xdWV1ZS5jXQoJRmlyc3QgYXR0ZW1wdCBhdCBpbnRlci10YXNrIFNlbmRNZXNzYWdlKCkuIFN0aWxsIGhhcyBhIGxvdCBvZgoJcHJvYmxlbXMuCgpUdWUgTWF5IDI4IDE0OjI2OjA0IDE5OTYgIFBldGVyIEJhanVzeiAgPGh5cC14QGluZi5ibWUuaHU+CgoJKiBbd2luZG93cy9tZGkuY10KCUZpeGVkIE1ESVRpbGUgd2l0aCBpY29uaWMgY2hpbGRyZW4uCgpNb24gTWF5IDI3IDIwOjI4OjE4IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbbWlzYy9jb21tZGxnLmNdCglDaG9vc2VGb250IGRpYWxvZzoKCS0gY29tcGxldGUgcmV3cml0ZSBvZiBGb250RmFtaWx5RW51bVByb2MoKSBhbmQgRm9udFN0eWxlRW51bVByb2MoKQoJICBub3QgcmVhbCBhdmFpbGFibGUgZm9udCB0eXBlcyAoZS5nLiAiQm9sZCIpIGNhbiBub3Qgc2VsZWN0ZWQKCS0gc3VwcG9ydGluZyBtb3JlIENGX0xJTUlUU0laRS0gYW5kIENGXy4uLk9OTFktIGZsYWdzCgoJKiBbb2JqZWN0cy9mb250LmNdCglJbiBGT05UX01hdGNoRm9udCBwZXJmb3JtIGNoZWNrIGlmICJsZkZhY2VOYW1lIiBpcyBmYW1pbHkgZnJvbSBYMTEKCW9ubHkgaWYgImxmRmFjZU5hbWUiIGlzIGEgd2luZG93cyBmb250IGZhbWlseSB0aGVuIGRvIGEgY2FsbCBvZgoJRk9OVF9UcmFuc2xhdGVOYW1lKCkgOiB0aGlzIHJlc3VsdHMgaW4gYmV0dGVyIGZvbnQgc2VsZWN0aW9ucyBpbiAKCUNob29zZUZvbnQoKSBvciBhcHBsaWNhdGlvbnMgbGlrZSBjaGFybWFwLmV4ZSBvciB3cml0ZS5leGUuCglBZGRlZCBhIFBhcnNlRm9udFBhcm1zKCkgY2FsbCBpZiBuZWNlc3NhcnkgaW4gZnVuY3Rpb24gCglGT05UX01hdGNoRm9udCgpOiB3ZSBuZWVkIGEgZm9udCBuYW1lIGFzIGJhc2lzIGZvciBHZXRUZXh0RmFjZSgpIAoJZXZlbiBpZiB0aGVyZSBpc24ndCBvbmUuLi4KCgkqIFtyZXNvdXJjZXMvVE9ET10KCUludmVudG9yeSBvZiByZXNvdXJjZSB0cmFuc2xhdGlvbnMgaW4gc3lzcmVzXz8/LnJjCgpGcmkgTWF5IDI0IDE2OjMzOjI4IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW21pc2MvcmVnaXN0cnkuY10KCV93OTVfbG9hZHJlZzogdXNlIG9mZnNldCB0byBkZXRlcm1pbmUgbmV4dCBSR0RCIHBvc2l0aW9uIHRvby4KClRodSBNYXkgMjMgMTk6MzU6MzggMTk5NiAgR3JlZyBLcmVpZGVyIDxrcmVpZGVyQG5hdGxhYi5yZXNlYXJjaC5waGlsaXBzLmNvbT4KCgkqIFtjb250cm9scy9jb21iby5jXQoJRml4ZWQgc2l6ZSBvZiBjb21ibywgbGJveCwgYW5kIGJ1dHRvbiAobGIgc29tZXRpbWVzIG9mZiBieSAyIHBpeGVscykuCgoJKiBbbWlzYy9tYWluLmNdCglSZXN1bHQgb2Ygb3B0aW9uICItZml4ZWRtYXAiIGlzIHRvIHR1cm4gZmxhZyBvbi4KClRodSBNYXkgMjMgMTk6MTU6NDEgMTk5NiAgUm9uYW4gV2FpZGUgIDxyb290QHdhaWRlci5pZT4KCgkqIFttaXNjL3NoZWxsLmNdCglTaGVsbEV4ZWN1dGUgYW5kIEZpbmRFeGVjdXRhYmxlIG5vdyBib3RoIHVzZSBjb21tb24gY29kZSB0bwoJZGV0ZXJtaW5lIHRoZSByZXF1aXJlZCBleGVjdXRhYmxlIGZpbGUuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBNYXkgMjEgMTQ6MDY6MDcgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglNYWRlIEJ1dHRvblduZFByb2MgYSAzMi1iaXQgd2luZG93IHByb2NlZHVyZS4KCgkqIFtjb250cm9scy9kZXNrdG9wLmNdCglNYWRlIERlc2t0b3BXbmRQcm9jIGEgMzItYml0IHdpbmRvdyBwcm9jZWR1cmUuCglBZGRlZCBoYW5kbGluZyBvZiBXTV9TRVRDVVJTT1IuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJQWxsb2NhdGUgbWVudSBpdGVtcyBhbmQgc3RyaW5ncyBvbiB0aGUgMzItYml0IHN5c3RlbSBoZWFwLgoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbnMgZm9yIENoYW5nZU1lbnUsIEluc2VydE1lbnUsIE1vZGlmeU1lbnUsCglBcHBlbmRNZW51IGFuZCBMb2FkTWVudUluZGlyZWN0LgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCUFkZGVkIHBvc3NpYmlsaXR5IHRvIGhhdmUgMzItYml0IGJ1aWx0LWluIGNsYXNzZXMuCgoJKiBbZmlsZXMvZHJpdmUuY10KCUltcGxlbWVudGVkIEdldExvZ2ljYWxEcml2ZSgpIGFuZCBHZXRMb2dpY2FsRHJpdmVTdHJpbmdzKCkuCgoJKiBbbWlzYy9zcHkuY10gW2luY2x1ZGUvc3B5LmhdCglBZGRlZCBzdXBwb3J0IGZvciBzcHlpbmcgV2luMzIgbWVzc2FnZXMuCgoJKiBbbG9hZGVyL2J1aWx0aW4uY10KCUZpeGVkIGJ1ZyBpbiAtZGxsIG9wdGlvbiBwYXJzaW5nLgoKCSogW21lbW9yeS9sb2NhbC5jXQoJQWRkZWQgYmFjayB0aGUgY2hhbmdlIGJ5IEh1dyBELiBNLiBEYXZpZXMgdG8gZnJlZSB0aGUgYmxvY2sgaW4KCUxvY2FsUmVhbGxvYygpIGJlZm9yZSBhbGxvY2F0aW5nIHRoZSBuZXcgb25lLgoKCSogW29iamVjdHMvYml0bWFwLmNdIFtvYmplY3RzL2N1cnNvcmljb24uY10gW29iamVjdHMvb2VtYml0bWFwLmNdCglGaXhlZCBidWcgaW4gYml0bWFwIHNpemUgdGhhdCBjYXVzZWQgbWVtb3J5IGNvcnJ1cHRpb24gZm9yIDI0YnBwLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIERlZldpbmRvd1Byb2MoKS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBTZW5kRGxnSXRlbU1lc3NhZ2UsCglHZXQvU2V0RGxnSXRlbVRleHQgYW5kIEdldC9TZXREbGdJdGVtSW50LgoKCSogW3dpbmRvd3MvbWRpLmNdCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIERlZkZyYW1lUHJvYygpIGFuZCBEZWZNRElDaGlsZFByb2MoKS4KCURvbid0IG1ha2UgYSBjb3B5IG9mIHRoZSBPQk0gYml0bWFwcyBmb3IgZXZlcnkgTURJIHdpbmRvdy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgU2VuZE1lc3NhZ2UoKS4KCQoJKiBbd2luZG93cy93aW5wcm9jLmNdIFt3aW5kb3dzL2NsYXNzLmNdIFt3aW5kb3dzL3dpbi5jXQoJTmV3IHNjaGVtZSBmb3IgMzItYml0IHdpbmRvdyBwcm9jZWR1cmVzIHRvIHJlcGxhY2UgYWxpYXNlcy4gQWxsCgkzMi1iaXQgd2luZG93IHByb2NlZHVyZSBnZXQgYSAxNi1iaXQgYWRkcmVzcyBwb2ludGluZyB0byBhCglXSU5ET1dQUk9DIHN0cnVjdHVyZS4KCUltcGxlbWVudGVkIEFuc2k8LT5Vbmljb2RlIHRyYW5zbGF0aW9uIGZvciBDYWxsV2luZG93UHJvYygpLgoJQWRkZWQgdHJhbnNsYXRpb24gb2YgV01fRFJBV0lURU0gYmV0d2VlbiBXaW4xNiBhbmQgV2luMzIuCgoJKiBbd2luZG93cy93aW4uY10gW2luY2x1ZGUvY2FsbGJhY2suaF0KCUFkZGVkIHVnbHkgaGFjayB0byBidWlsZCBDUkVBVEVTVFJVQ1Qgb24gdGhlIHN0YWNrIHdoZW4gc2VuZGluZwoJV01fTkNDUkVBVEUuCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIEdldC9TZXRXaW5kb3dXb3JkL0xvbmcgYW5kCglHZXQvU2V0V2luZG93VGV4dC4KCQpGcmkgTWF5IDE3IDEwOjIwOjE2IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglBdm9pZCBncmF5IHRleHQgb24gZ3JheSBiYWNrZ3JvdW5kIGluIGRpc2FibGVkIHB1c2ggYnV0dG9ucwoJdXNpbmcgYSBiL3cgcmFzdGVyIGFuZCBzb21lIHJhc3RlciBvcGVyYXRpb25zIChQYXRCbHQsQml0Qmx0KS4KCgkqIFtvYmplY3RzL3RleHQuY10KCURyYXdUZXh0KCk6IGRvbid0IGRyYXcgYW4gdW5kZXJiYXIgYW55bW9yZSBpZiBEVF9DQUxDUkVDVCBpcyBzZXQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBNYXkgMTYgMTM6MzU6MzEgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbKi8qLmNdCglSZW5hbWVkIFJFQ1QsIFBPSU5UIGFuZCBTSVpFIHN0cnVjdHVyZXMgdG8gUkVDVDE2LCBQT0lOVDE2IGFuZAoJU0laRTE2LiBJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIG1vc3QgZnVuY3Rpb25zIHRoYXQgdGFrZQoJdGhlc2UgdHlwZXMgYXMgcGFyYW1ldGVycy4KCgkqIFtjb25maWd1cmVdCglQYXRjaGVkIGF1dG9jb25mIHRvIGF0dGVtcHQgdG8gY29ycmVjdGx5IGRldGVjdCAtbG5zbCBhbmQKCS1sc29ja2V0LiBQbGVhc2UgY2hlY2sgdGhpcyBvdXQuCgkKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgV2luMzIgQk1fKiBtZXNzYWdlcy4KCgkqIFtjb250cm9scy9tZW51LmNdCglBdm9pZCBzZW5kaW5nIGV4dHJhIFdNX01FTlVTRUxFQ1QgbWVzc2FnZXMuIFRoaXMgYXZvaWRzIGNyYXNoZXMKCXdpdGggRXhjZWwuCgoJKiBbbWVtb3J5LmhlYXAuY10gW2luY2x1ZGUvaGVhcC5oXQoJQWRkZWQgc3VwcG9ydCBmb3IgU0VHUFRScyBpbiBXaW4zMiBoZWFwcy4gQWRkZWQgYSBmZXcgbWFjcm9zIHRvCiAJbWFrZSB1c2luZyBTRUdQVFJzIGVhc2llci4gVGhleSBhcmUgYSBiaXQgc2xvd2VyIHRoYW4gTUFLRV9TRUdQVFIsCiAJYnV0IHRoZXkgd29yayB3aXRoIFdpbjMyLgoKCSogW21lbW9yeS9hdG9tLmNdCglJbXBsZW1lbnRlZCBXaW4zMiBhdG9tIGZ1bmN0aW9ucy4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUZpeGVkIExvY2FsUmVBbGxvYygpIGNoYW5nZXMgdG8gYXZvaWQgY29weWluZyB0aGUgd2hvbGUgYmxvY2sgdHdpY2UuCgoJKiBbd2luMzIvbWVtb3J5LmNdCglVc2UgL2Rldi96ZXJvIGluc3RlYWQgb2YgTUFQX0FOT04gZm9yIFZpcnR1YWxBbGxvYygpLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCVByb3Blcmx5IGltcGxlbWVudGVkIHRoZSBXaW4zMiBjbGFzcyBmdW5jdGlvbnMuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdIChOZXcgZmlsZSkKCU5ldyBmaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlIHRyYW5zbGF0aW9uIGJldHdlZW4gV2luMTYgYW5kIFdpbjMyLgoKTW9uIE1heSAxMyAxODowMDowMCAxOTk2IEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3MvbWRpLmNdIFt3aW5kb3dzL21lbnUuY10KCUltcHJvdmVkIFdNX01ESUNSRUFURSBhbmQgV01fTURJQ0FTQ0FERSBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFtvYmplY3RzL2JpdGJsdC5jXQoJSGFuZGxlIEdyYXBoaWNzRXhwb3NlIGV2ZW50IGZvciBCaXRCbHQgZnJvbSBzY3JlZW4gdG8gc2NyZWVuLgoKCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQnVuY2ggb2YgZml4ZXMgZm9yIHByb2JsZW1zIHdpdGggLW1hbmFnZWQuCgoJKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3Mvd2lucG9zLmNdCglDaGFuZ2VkIGNvbmRpdGlvbnMgZm9yIFdNX1NJWkUsIFdNX01PVkUsIGFuZCBXTV9HRVRNSU5NQVhJTkZPCglpbiBDcmVhdGVXaW5kb3cuCgoJKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3MvcXVldWUuY10gW21pc2MvdXNlci5jXQoJRG8gbm90IHNlbmQgV01fUEFSRU5UTk9USUZZIHdoZW4gaW4gQXBwRXhpdCBhbmQgY2FsbCBXSF9TSEVMTAoJb24gd2luZG93IGNyZWF0aW9uL2Rlc3RydWN0aW9uLgoKCSogW29iamVjdHMvcGFsZXR0ZS5jXQoJQ3J1ZGUgUmVhbGl6ZVBhbGV0dGUoKS4gQXQgbGVhc3Qgc29tZXRoaW5nIGlzIHZpc2libGUgaW4gTHZpZXdQcm8uCgpTdW4gTWF5IDEyIDAyOjA1OjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdCglBZGRlZCBSZWN0YW5nbGUgKHVzZSB3aW4xNiB2ZXJzaW9uKS4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUFkZGVkIEdldFdpbmRvd3NEaXJlY3RvcnlBICh1c2Ugd2luMTYgR2V0V2luZG93c0RpcmVjdG9yeSkuCgoJKiBbaWYxNjMyL3VzZXIzMi5zcGVjXQoJQWRkZWQgR2V0U3ViTWVudSwgTW92ZVdpbmRvdywgU2V0U2Nyb2xsUG9zLCBTZXRTY3JvbGxSYW5nZSAodXNlIHdpbjE2Cgl2ZXJzaW9ucykuCglBZGRlZCBTZXRXaW5kb3dzSG9va0V4QSAoZW1wdHkgc3R1YiBmb3Igbm93KS4KCgkqIFtpbmNsdWRlL2hhbmRsZTMyLmhdCglDaGFuZ2VkICNpbmNsdWRlIDxtYWxsb2MuaD4gdG8gI2luY2x1ZGUgPHN0ZGxpYi5oPiB0byBwcmV2ZW50CgloYXRlIG1lc3NhZ2UgZnJvbSBGcmVlQlNEIGNvbXBpbGVyLgoKCSogW3dpbjMyL25ld2Zucy5jXQoJQWRkZWQgbmV3IGZ1bmN0aW9uIFNldFdpbmRvd3NIb29rRXgzMkEgKGVtcHR5IHN0dWIgZm9yIG5vdykuCgoJKiBbd2luMzIvdXNlcjMyLmNdCglSZW1vdmVkIHJlZHVuZGFudCBkZWJ1Z2dpbmcgcHJpbnRmIHN0YXRlbWVudC4KClN1biBNYXkgMTIgMDE6MjQ6NTcgMTk5NiAgSHV3IEQuIE0uIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW21lbW9yeS9sb2NhbC5jXQoJQXZvaWQgY3JlYXRpbmcgYWRqYWNlbnQgZnJlZSBibG9ja3MuCglGcmVlIHRoZSBibG9jayBpbiBMb2NhbFJlQWxsb2MoKSBiZWZvcmUgYWxsb2NhdGluZyBhIG5ldyBvbmUuCglGaXhlZCBMb2NhbFJlQWxsb2MoKSBmb3IgZGlzY2FyZGVkIGJsb2Nrcy4KCQpGcmkgTWF5IDEwIDIzOjA1OjEyIDE5OTYgIEp1a2thIElpdm9uZW4gPGlpdm9uZW5AY2MuaGVsc2lua2kuZmk+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19GaS5yY10KCUNob29zZUZvbnQgYW5kIENob29zZUNvbG9yIGRpYWxvZ3MgdXBkYXRlZC4KCkZyaSBNYXkgMTAgMTc6MTk6MzMgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZmlsZXMvZHJpdmUuYyxpZjE2MzIva2VybmVsLnNwZWNdCglHZXRDdXJyZW50RGlyZWN0b3J5KCksU2V0Q3VycmVudERpcmVjdG9yeSgpIGltcGxlbWVudGVkLgoKCSogW2lmMTYzMi9hZHZhcGkzMi5zcGVjXSBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaWYxNjMyL3NoZWxsLnNwZWNdCgkgIFtpbmNsdWRlL3dpbmRvd3MuaF0gW2luY2x1ZGUvd2lucmVnLmhdIFtsb2FkZXIvbWFpbi5jXQoJICBbbWlzYy9tYWluLmNdIFttaXNjL3NoZWxsLmNdIFttaXNjL3JlZ2lzdHJ5LmNdCglSZWdpc3RyeSBmaXhlczoKCS0gbG9hZHMgd2luOTUgcmVnaXN0cnkgZGF0YWJhc2VzLAoJLSBzYXZlIG9ubHkgdXBkYXRlZCBrZXlzIG9uIGRlZmF1bHQsCgktIG5vdyBhZGhlcnMgdG8gdGhlIG5ldyBmdW5jdGlvbiBuYW1pbmcgc3RhbmRhcmQsCgktIG1pbm9yIGNsZWFudXBzLgoKVHVlIE1heSA3IDIyOjM2OjEzIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbY29tYm8uY10KCUFkZGVkIFdNX0NPTU1BTkQtaGFuZGxpbmcgZm9yIGludGVyYWN0aW9uIGJldHdlZW4gRURJVCBhbmQgQ09NQk9MQk9YCiAgICAgICAgYW5kIHN5bmNocm9uaXplZCBtaW5lIHdpdGggR3JlZyBLcmVpZGVyJ3Mgd29ya3MuCgoJKiBbY29tbWRsZy5jXQoJQnVnZml4IGluIENob29zZUZvbnQ6IGZvbnQgc2l6ZSBoYW5kbGluZy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIE1heSAgNiAxMjo1NjoyNiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtERVZFTE9QRVJTLUhJTlRTXQoJQWRkZWQgcGFyYWdyYXBoIG9uIG5hbWluZyBjb252ZW50aW9ucyBmb3IgV2luMTYvV2luMzIvV2luZWxpYi4KCgkqIFtjb250cm9scy9tZW51LmNdCglDcmVhdGUgYSBkZWZhdWx0IHN5c3RlbSBtZW51IHRoYXQgaXMgdGhlIHNhbWUgZm9yIGFsbCB3aW5kb3dzCglpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZXZlcnkgdGltZS4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglBZGRlZCBXSU5FTElCX05BTUUgYW5kIERFQ0xfV0lORUxJQl9UWVBFIG1hY3Jvcy4KCUFkZGVkIHh4MTYgYW5kIHh4MzIgZGVmaW5pdGlvbnMgZm9yIG1vc3QgdHlwZXMuIEdlbmVyYWwgY2xlYW4tdXAuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXSBbbWVtb3J5L2xvY2FsLmNdIFsqLypdCglSZW5hbWVkIEdsb2JhbCBhbmQgTG9jYWwgaGVhcCBmdW5jdGlvbnMgdG8geHh4MTYuIEFkZGVkIGFsbCB4eHgzMgoJdmVyc2lvbnMgb2YgdGhlIHNhbWUgZnVuY3Rpb25zLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJTWFzayBvdXQgbG93ZXIgYml0cyBvZiBzZWxlY3RvciBpbiBGcmVlU2VsZWN0b3IoKS4KCgkqIFttaXNjL2xzdHIuY10KCUZpeGVkIHd2c3ByaW50ZigpLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCUNoYW5nZWQgdGhlIGNsYXNzIHN0cnVjdHVyZSB0byBtYWtlIFdpbjMyIHN1cHBvcnQgZWFzaWVyLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglBZGRlZCBoYW5kbGluZyBvZiBXTV9JTklUTUVOVVBPUFVQIGZvciBzeXN0ZW0gbWVudSB0byBncmF5IG91dAoJaW52YWxpZCBvcHRpb25zLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglCdWcgZml4OiB0aGUgV0lORE9TUE9TIHN0cnVjdHVyZSBwb2ludGVyIGluIFdNX05DQ0FMQ1NJWkUgbXVzdCBiZQoJYSBTRUdQVFIuCgpTdW4gTWF5ICA1IDAzOjUxOjI2IDE5OTYgIEh1dyBELiBNLiBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUltcGxlbWVudGF0aW9uIG9mIG1vdmVhYmxlIGFuZCAocnVkaW1lbnRhcnkpIHN1cHBvcnQgZm9yCiAJZGlzY2FyZGFibGUgbG9jYWwgbWVtb3J5LCBwbHVzIHNldmVyYWwgYnVnIGZpeGVzLgoKU2F0IE1heSAgNCAxODozMzozNSAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW3dpbmRvd3Mvd2luLmNdIFtpZjE2MzIvdXNlci5zcGVjXSAKCUZpbmRXaW5kb3dFeCgpIGltcGxlbWVudGVkIChzb21lb25lIHJlcG9ydGVkIGl0IHdhcyBtaXNzaW5nCglmb3IgRnJhbWVNYWtlciA0LjEpLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaWYxNjMyL3VzZXIzMi5zcGVjXSBbd2luMzIvbWVtb3J5LmNdCgkgIFt3aW4zMi9yZXNvdXJjZS5jXQoJTWlzYyBzbWFsbCBzdHVicy9zbWFsbCBmdW5jdGlvbnMgd2hpY2ggYnJpbmcgd2luOTUgYmluYXJpZXMKCWZ1cnRoZXIgZG93biB0aGUgcm9hZC4gKElzQmFkQ29kZVB0ciwgTG9jYWxSZUFsbG9jLEdldEN1cnNvclBvcykKCVNtYWxsIGZpeCBpbiBXSU4zMl9Mb2FkQWNjZWxlcmF0b3JzQS4KCkZyaSBNYXkgIDMgMTk6NDM6MTIgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG0xLkxlaWRlblVuaXYubmw+CgoJKiBbY29udHJvbHMvZWRpdC5jXSBbY29udHJvbHMvRURJVC5UT0RPXQoJQ2hhbmdlZCAvIGZpeGVkIHNvbWUgdHlwZXMgYW5kIHR5cGVjYXN0cy4KCUZpeGVkIHRoZSBzY3JvbGxiYXIgcmVzZXQgYWZ0ZXIgV01fU0VUSEFORExFIC8gV01fU0VUVEVYVC4KCUFkZGVkIGhlYXAgaW5pdGlhbGl6YXRpb24gaW4gV01fQ1JFQVRFLgoKRnJpIE1heSAgMyAxOTozMDowMiAxOTk2ICBHcmVnIEtyZWlkZXIgPGtyZWlkZXJAbmF0bGFiLnJlc2VhcmNoLnBoaWxpcHMuY29tPgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdIFtjb250cm9scy9saXN0Ym94LmNdCglQYXNzIFdNX1tIVl1TQ1JPTEwgdG8gbGlzdGJveCwgYnV0IG5vdCBjb21iby4KCURvbid0IHRyeSB0byByZWRyYXcgbm9uLWV4aXN0YW50IHNjcm9sbCBiYXJzIChjaGFuZ2VzIGR3U3R5bGUgZmxhZ3MpLgoJQ29tYm8gYm94IGdldHMgYm9yZGVyLgoJQ29tYm8gYm94IGluY2x1ZGVzIGJ1dHRvbiAob3RoZXJ3aXNlIGJ1dHRvbiB3b24ndCB0cmlnZ2VyIGRyb3Bkb3duKS4KCVByb3BlciBib3JkZXIgYXJvdW5kIFJlY3RCdXR0b24uCglDaGVjayBzaXplIGNvbnNpc3RhbmN5IG9mIGNvbWJvLCBsaXN0Ym94LCBhbmQgYnV0dG9uIGFmdGVyIHJlc2l6aW5nIAoJb3IgYmVmb3JlIHBhaW50aW5nLiAgVGhlc2Ugcm91dGluZXMgc3RpbGwgYXJlbid0IGNvbXBsZXRlbHkgY29ycmVjdC4KCUxvY2FsaXplIHNpemUgY2hlY2tzIGluIHNlcGFyYXRlIHJvdXRpbmVzLgoJTGlzdGJveGVzIGFyZSB3aGl0ZS4KClRodSBNYXkgIDIgMTk6MjE6MjMgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtjb250cm9scy9jb21iby5jXVtpbmNsdWRlL2NvbW1kbGcuaF1baW5jbHVkZS9jb21tZGxnLmNdCgkgIFtyZXNvdXJjZXMvc3lzcmVzX0RlLnJjXVtyZXNvdXJjZXMvc3lzcmVzX0VuLnJjXQoJSW50cm9kdWNlZCBDaG9vc2VGb250IGRpYWxvZywgYnV0IG5lZWRlZCBzb21lIHBhdGNoZXMgaW4gCgloYW5kbGluZyBvZiBjb21ib2JveGVzIHdpdGggZWRpdCBjb250cm9scy4KClR1ZSBBcHIgMzAgMDA6MzM6MjcgMTk5NiAgVWxyaWNoIFNjaG1pZCAgPHVzY2htaWRAbWFpbC5oaC5wcm92aS5kZT4KCgkqIFtwcm9ncmFtcy93aW5oZWxwLypdCglBZGRlZCBhIGhlbHAgdmlld2VyIGFuZCBhIHNpbXBsZSBgLmhscCcgdG8gYC5zZ21sJyBjb252ZXJ0ZXIuCgpNb24gQXByIDI5IDE0OjE3OjU3IDE5OTYgIFRyaXN0YW4gVGFycmFudCA8dHN0QHN0aGluYy5kZW1vbi5jby51az4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzXyoucmNdIFttaXNjL3NoZWxsLmNdCglNb2RpZmllZCBzaXplIG9mICJBYm91dCIgZGlhbG9nIGJveGVzLgoKU2F0IEFwciAyNyAxODoxMDoxMSBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl1bbG9hZGVyL2J1aWx0aW4uY10KCWNydGRsbC5zcGVjLCBudGRsbC5zcGVjLCB3c29jazMyLnNwZWM6IG5ldyBmaWxlcy4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUZpeCBlcnJvciBtZXNzYWdlIGlmIGltcG9ydCBieSBvcmRpbmFsIGZhaWxlZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEFwciAyOCAxNDozMjo0MyAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtNYWtlZmlsZS5pbl0KCVN1YmRpciBtZW1vcnkgaXMgbm93IGFsc28gY29tcGlsZWQgZm9yIFdpbmVsaWIsIGluIG9yZGVyIHRvIGdldAoJdGhlIFdpbjMyIGhlYXAgZnVuY3Rpb25zLgoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl0KCVJlbmFtZWQgd2lucHJvY3MgYW5kIHdpbnByb2NzMzIgdG8gd3Byb2NzIGFuZCB3cHJvY3MzMiB0byBhdm9pZAoJRExMIG5hbWVzID4gOCBjaGFyYWN0ZXJzLgoKCSogW2xvYWRlci9idWlsdGluLmNdIChOZXcgZmlsZSkKCUdyb3VwZWQgYWxsIGJ1aWx0LWluIERMTHMgY29kZSBpbiBhIHNpbmdsZSBmaWxlLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCVVzZSB0aGUgV2luMzIgaGVhcCBjb2RlIGluc3RlYWQgb2YgbWFsbG9jKCkgdG8gYWxsb2NhdGUgbGluZWFyCgltZW1vcnkuIFRoaXMgd2lsbCBoZWxwIHRlc3QgdGhlIGhlYXAgY29kZS4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUZpeGVkIEZyZWVTZWxlY3RvcigpIHRvIGNsZWFyIERTIGFuZCBFUyBjb3JyZWN0bHkgZm9yIGh1Z2UgYmxvY2tzLgoKCSogW3Rvb2xzL2J1aWxkLmNdIFtpZjE2MzIvcmVsYXkuY10KCVJlbW92ZWQgJ2lkJyBkaXJlY3RpdmUgaW4gc3BlYyBmaWxlcy4gRm9yIHJlbGF5IGRlYnVnZ2luZywgdGhlIERMTAoJZW50cnkgcG9pbnQgaXMgbm93IGNvbXB1dGVkIGZyb20gdGhlIENTOklQIGVudHJ5IHBvaW50IGFkZHJlc3MuCglBZGRlZCAnaGVhcCcgZGlyZWN0aXZlIHRvIHNwZWNpZml5IGEgbG9jYWwgaGVhcCBmb3IgdGhlIERMTC4gVVNFUgoJYW5kIEdESSBoZWFwIGFyZSBub3cgY3JlYXRlZCB0aGlzIHdheS4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdIFtpbmNsdWRlL2NsYXNzLmhdCglDaGFuZ2VkIHRoZSBjbGFzcyBzdHJ1Y3R1cmUgdG8gdXNlIHBvaW50ZXJzIGluc3RlYWQgb2YgaGFuZGxlcy4KCUNoYW5nZWQgR2V0L1NldENsYXNzV29yZC9Mb25nIHRvIHVzZSBhIHN3aXRjaCBzdGF0ZW1lbnQ7IHRoaXMKCWFsbG93cyBjaGFuZ2luZyB0aGUgbGF5b3V0IG9mIHRoZSBDTEFTUyBzdHJ1Y3R1cmUuCgoJKiBbd2luZG93cy93aW4uY10gW2luY2x1ZGUvd2luLmhdCglVc2UgYSBDTEFTUyAqIGluc3RlYWQgb2YgYSBoYW5kbGUgZm9yIHRoZSB3aW5kb3cgY2xhc3MuCgpTYXQgQXByIDI3IDE4OjEwOjExIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFttZW1vcnkvZ2xvYmFsLmNdCgkgIFt3aW4zMi9tZW1vcnkuY10gW3dpbjMyL3Byb2Nlc3MuY10KCUdldFByb2Nlc3NBZmZpbml0eU1hc2ssR2xvYmFsTG9jayxJc0JhZFJlYWRQdHIsSXNCYWRXcml0ZVB0ciwKCUxvY2FsTG9jayxTZXRUaHJlYWRBZmZpbml0eU1hc2s6IG5ldyByZWxheXMuCgoJKiBbd2luMzIvY3Vyc29yaWNvbjMyLmNdCglSZXR1cm4gc2FtZSBoYW5kbGUgaWYgYSBjdXJzb3IgaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzLgoKU2F0IEFwciAyNyAxNToxMzozNyAxOTk2ICBCYW5nIEp1biBZb3VuZyA8YmFuZ2p5QG5vd251cmkubm93Y29tLmNvLmtyPgoKCSogW3Jlc291cmNlcy9zeXNyZXNfS28ucmNdCiAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgS29yZWFuIFtLb10gbGFuZ3VhZ2UuCgpGcmkgQXByIDI2IDAwOjQ5OjA1IDE5OTYgIEh1dyBELiBNLiBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFtvYmplY3RzL2RjLmNdIFtvYmplY3RzL2ZvbnQuY10KCUZpeGVkIHByb2JsZW0gd2l0aCBTYXZlREMoKS9SZXN0b3JlREMoKSBhbmQgZm9udCBjYWNoZSAndXNlZCcgY291bnQuCgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbb2JqZWN0cy9kY3ZhbHVlcy5jXQoJRml4ZWQgYnJva2VuIFNldFRleHRBbGlnbigpIG9uIG1ldGFmaWxlcy4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglEZWxldGUgb2JqZWN0cyBpbiBoYW5kbGUgdGFibGUgYXQgZW5kIG9mIFBsYXlNZXRhRmlsZSgpLgoKV2VkIEFwciAyNCAxOToyMTowMSAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaWYxNjMyL3Zlci5zcGVjXSBbbWlzYy92ZXIuY10gW2luY2x1ZGUvdmVyLmhdIChOZXcgZmlsZXMpCglWRVIuRExMIChwYXJ0aWFsbHkpIGltcGxlbWVudGVkIChWZXJGaW5kRmlsZSxWZXJJbnN0YWxsRmlsZSkKCVtJZiBpdCBkb2Vzbid0IHdvcmsgZm9yIHlvdSwgdXNlIC1kbGwgLXZlciBhbmQgcmVwb3J0IGl0IHRvIG1lXQoKCSogW2lmMTYzMi91c2VyMzIuc3BlY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaWYxNjMyL3NoZWxsLnNwZWNdCgkgIFtpZjE2MzIvc2hlbGwzMi5zcGVjXSBbbWlzYy9vbGUybmxzLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCSAgW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVNpbXBsZSB3aW4zMiBmdW5jdGlvbnMsIHdoZXJlIHdlIGNhbiBqdXN0IHVzZSB0aGUgd2luMTYgY291bnRlcnBhcnQuCglNaXNjLiBzdHVicy4gCgoJKiBbbWlzYy9sc3RyLmNdCglTb21lb25lIHJlcG9ydGVkIGEgX2xzdHJsZW4oTlVMTCkuIE5VTEwgaXMgYSB2YWxpZCBhcmd1bWVudC4gRml4ZWQuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJU29tZSBhbGxvY2xlbnMgd2VyZSBvZmYgYnkgMSwgb25lIGRvdWJsZSBmY2xvc2UoKSBmaXhlZC4KCVJlcXVlc3RpbmcgdmFsdWUgMCBvZiBhIGtleSB3aXRoIG5vIHZhbHVlcyByZXR1cm5zIGFuIGVycm9yIAoJKHNob3VsZCB3ZSBhbHdheXMgcmV0dXJuIGEgbWFkZSB1cCB2YWx1ZSBOVUxMPyB3aGF0IGRvZXMgd2luMy4xPykKClR1ZSBBcHIgMjMgMTc6MDA6MDAgMTk5NiBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFttaXNjL3NoZWxsLmNdCglJbXBsZW1lbnRlZCBGaW5kRW52aXJvbm1lbnRTdHJpbmcoKSwgRG9FbnZpcm9ubWVudFN1YnN0KCksCglFeHRyYWN0SWNvbigpLCBJbnRlcm5hbEV4dHJhY3RJY29uKCkgYW5kIEV4dHJhY3RBc3NvY2lhdGVkSWNvbigpLgoKCSogW21pc2MvdXNlci5jXQoJRG8gZXh0ZW5zaXZlIGNsZWFudXAgb24gYXBwbGljYXRpb24gZXhpdC4KCgkqIFt3aW5kb3dzL2hvb2suY10gW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL2NsYXNzLmNdCglBZGRlZCBtaXNjZWxsYW5lb3VzIGNsZWFudXAgcm91dGluZXMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTW9yZSBlZmZpY2llbnQgcG9wdXAgbWVudSB3aW5kb3cgaGFuZGxpbmcuCgpNb24gQXByIDIyIDIxOjM1OjIyIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdW29iamVjdHMvb2VtYml0bWFwLmNdW2luY2x1ZGUvYml0bWFwcy9vYm1fdHJ0eXBlXQoJQWRkZWQgIlRULWJpdG1hcCIgZm9yIGxhdGVyIHVzYWdlIGluIGEgQ2hvb3NlRm9udCgpIG93bmVyZHJhdyBjb21ib2JveC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IEFwciAyMCAyMzoyMzoxNiAxOTk2ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQHFiYy5jbGljLm5ldD4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0ZyLnJjXSBbcmVzb3VyY2VzL1RPRE9dCglNYWRlIGNoYW5nZXMgZm9yIENob29zZV9Db2xvciBkaWFsb2cuCgpTYXQgQXByIDIwIDE1OjQzOjQ5IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJRml4ZWQgdGVzdCB0aGF0IGdvdCBtaXNjb21waWxlZCBieSBzb21lIG9sZCBnY2MgdmVyc2lvbnMuCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglGaXhlZCB0aGUgbGF5b3V0IG9mIGhhbmRsZSB0YWJsZXMgc28gdGhhdCBtb3ZlYWJsZSBoYW5kbGUgZW50cmllcwoJY2FuIGJlIGZyZWVkIG9uIExvY2FsRnJlZSgpLgoJSW1wbGVtZW50ZWQgTG9jYWxGbGFncygpLCBMb2NhbENvdW50RnJlZSgpLCBMb2NhbEhhbmRsZURlbHRhKCkgYW5kCglHZXRIZWFwU3BhY2VzKCkuCgoJKiBbbWlzYy9tYWluLmNdIFtBTk5PVU5DRV0KCVVwZGF0ZSB0aGUgbGlzdCBvZiBjb250cmlidXRvcnMuIFBsZWFzZSBsZXQgbWUga25vdyBpZiBJIGZvcmdvdAoJc29tZW9uZS4KCkZyaSBBcHIgMTkgMjA6MDc6MjAgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgIDxkb3Jzc2VsQHJ1bGhtMS5sZWlkZW51bml2Lm5sPgoKCSogW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL0VESVQuVE9ET10KCUZpeGVkIEVNX1NFVEhBTkRMRSAvIFdNX0NSRUFURSAvIEVESVRfTWFrZUZpcigpIGJ1ZmZlciBhbGxvY2F0aW9uLgoJRml4ZWQgRVNfTk9ISURFU0VMIC8gV01fTU9VU0VNT1ZFIC8gV01fTEJVVFRPTkRPV04gaW1wbGVtZW50YXRpb24uCglBZGRlZCBXTV9FTkFCTEUgaW1wbGVtZW50YXRpb24gKGdyYXkgdGV4dCkuCglGaXhlZCBidWZmZXIgPiAzMjc2NyBidWcuCglGaXhlZCBhcmd1bWVudCB0eXBlcyAvIHR5cGVjYXN0aW5nLgoJRmFzdGVyIHNlbGVjdGlvbiAocmUpZHJhd2luZy4KClRodSBBcHIgMTggMTM6Mzg6MjYgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbWlzYy9yZWdpc3RyeS5jXSBbaW5jbHVkZS93aW5yZWcuaF0KCUNoYW5nZWQgc2F2ZWZpbGUgZm9ybWF0IGFnYWluIHRvIGh1bWFuIHJlYWRhYmxlL2VkaXRhYmxlCgkoVU5JQ09ERSBjaGFycyA+MHhmZiBhcmUgc3BlY2lmaWVkIGJ5IFx1WFhYWCwgZGF0YSBieSBYWCkuCglIYXMgbm93IGdsb2JhbCAvIGxvY2FsIHJlZ2lzdHJ5IGRhdGFiYXNlcyAoaW5jbHVkaW5nIG1lcmdpbmcgdGhlbSkuCglIS0VZX0NMQVNTRVNfUk9PVCA9PSBIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxDbGFzc2VzLgoJSEtFWV9DVVJSRU5UX1VTRVIgPT0gSEtFWV9VU0VSU1xcPGxvZ2lubmFtZT4uCgoJKiBbbWlzYy9jb21tLmNdCglBbGxvdyAiICIgYXMgQ09NeDogLi4uIHNwZWMgZGVsaW1pdGVyIHRvby4KCShBT0wtQ0Qgc2V0dXAuZXhlIHRyaWVzIHRvIGluaXRpYWxpemUgbW9kZW0yIGFzICI5NjAwLHgseCB4IiAoY2FuJ3QgCglyZW1lbWJlciB0aGUgeCkuCgpUaHUgQXByIDE4IDA5OjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3MvbWRpLmNdCglNaXNjZWxsYW5lb3VzIGNoYW5nZXMuCgoJKiBbd2luZG93cy93aW5wb3MuY10gCglVc2UgQml0Qmx0IHdoZW5ldmVyIHBvc3NpYmxlIGluIFNldFdpbmRvd1Bvcy4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglGaXggaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBocmduVXBkYXRlIGJlaW5nIDEuCgpXZWQgQXByIDE3IDE5OjE5OjIyIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbbWlzYy9jb21tZGxnLmNdCglNYW55IGJ1Z2ZpeGVzIGluIENob29zZUNvbG9yIGRpYWxvZy4KCUFkZGVkIGEgdXNlciBkZWZpbmVkIGRpYWxvZyB0aXRsZSBpbiBGaWxlT3Blbi0vRmlsZVNhdmUtIGRpYWxvZy4KCgkqIFttaXNjL2NvbW1kbGcuY11baW5jbHVkZS9jb21tZGxnLmhdCgkgIFtpZjE2MzIvY29tbWRsZy5zcGVjXVtpZjE2MzIvd2lucHJvY3Muc3BlY10KCUludHJvZHVjZWQgZGlhbG9nLSwgY2FsbGJhY2stIGFuZCBlbnVtLSBzdHViIGZ1bmN0aW9ucwoJZm9yIENob29zZUZvbnQgZGlhbG9nCgpXZWQgQXByIDE3IDE5OjA4OjM4IDE5OTYgIE5pZWxzIGRlIENhcnBlbnRpZXIgIDxuaWVsc0BjaW5keS5ldC50dWRlbGZ0Lm5sPgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10gW2luY2x1ZGUvbWV0YWZpbGUuaF0gW2lmMTYzMi9nZGkuc3BlY10KCUltcGxlbWVudGVkIEVudW1NZXRhRmlsZSBhbmQgQ29weU1ldGFGaWxlLiBSZW1vdmVkIE1FVEFGSUxFIHN0cnVjdC4KCUltcGxlbWVudGVkIE1FVEFfU1RSRVRDSERJQiBpbiBQbGF5TWV0YUZpbGVSZWNvcmQsIHNldmVyYWwgYnVnIAoJZml4ZXMuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCURvbid0IHRyeSB0byBoaWRlIHRoZSB3aW5kb3cgaWYgaXQncyBhbHJlYWR5IGhpZGRlbi4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUxldCBNU0dfUGVla0hhcmR3YXJlTXNnIGZpbGwgdGhlIG1lc3NhZ2UgcXVldWUgd2l0aCBldmVudHMgaWYKCWl0J3MgZW1wdHkuCgpXZWQgQXByIDE3IDE3OjU0OjA0IDE5OTYgIFRyaXN0YW4gVGFycmFudCA8dHN0QHN0aGluYy5kZW1vbi5jby51az4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0l0LnJjXQoJVXBkYXRlZCB0byBzdXBwb3J0IHRoZSBuZXcgQ0hPT1NFX0NPTE9SX0RJQUxPRy4KClR1ZSBBcHIgMTYgMTE6NTA6MDAgMTk5NiAgQW5hbmQgS3VtcmlhIDxha3VtcmlhQG96ZW1haWwuY29tLmF1PgoKCSogW2lmMTYzMi9NYWtlZmlsZV0gW2lmMTYzMi9yZWxheS5jXSBbaWYxNjMxL3czMnN5cy5zcGVjXQoJICBbaW5jbHVkZS93MzJzeXMuaF0gW2luY2x1ZGUvZGxscy5oXQoJICBbbWlzYy9NYWtlZmlsZV0gW21pc2MvdzMyc3lzLmNdCglXMzJTWVMuRExMIHBhcnRpYWxseSBpbXBsZW1lbnRlZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEFwciAxNCAxMjo1MToyNyAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9tZW51LmNdIFtpbmNsdWRlL2RpYWxvZy5oXSBbd2luZG93cy9kaWFsb2cuY10KCU1hZGUgdGhlIHJlc291cmNlIGxvYWRpbmcgY29kZSBhbHdheXMgdXNlIHRoZSBjb3JyZWN0IFdpbmRvd3MKCWxheW91dCBmb3IgV2luZWxpYiBvbiBvdGhlciBDUFVzLgoKCSogW2luY2x1ZGUvbW9kdWxlLmhdIFtsb2FkZXIvbW9kdWxlLmNdCglBZGRlZCBzZWxmIGhhbmRsZSBpbiBORV9NT0RVTEUgc3RydWN0dXJlLCBzbyB3ZSBjYW4gdXNlIGEgcG9pbnRlcgoJaW5zdGVhZCBvZiBhIGhhbmRsZS4KCUFkZGVkIGZ1bmN0aW9uIE1PRFVMRV9HZXRQdHIoKSB0byB2YWxpZGF0ZSBhIEhNT0RVTEUuCgoJKiBbbWVtb3J5L2hlYXAuY10KCUltcGxlbWVudGVkIFdpbjMyIGhlYXAgbWFuYWdlbWVudC4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCUZpeCBzZWxlY3RvciBsaW1pdCBmb3IgaHVnZSBibG9ja3MuCgpTYXQgQXByIDEzIDAwOjE5OjEyIDE5OTYgIEh1dyBELiBNLiBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglGaXhlZCBtZW1jcHkgYnVnIHRvIGFsbG93IG1lbW9yeSBiYXNlZCBtZXRhZmlsZXMgdG8gd29yay4KCkZyaSBBcHIgMTIgMTk6MjU6NDEgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgIDxkb3Jzc2VsQHJ1bGhtMS5sZWlkZW51bml2Lm5sPgoKCSogW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL0VESVQuVE9ET10KCUNvbXBsZXRlIHJld3JpdGUuICBFdmVyeXRoaW5nIGNoYW5nZWQ6IG5ldyBmZWF0dXJlcywgbmV3IGJ1Z3MuCglNYWluIGFkZGl0aW9uOiBXb3JkV3JhcC4KCkZyaSBBcHIgMTIgMjA6Mjk6NTUgMTk5NiAgVHJpc3RhbiBUYXJyYW50IDx0c3RAZGNzLmVkLmFjLnVrPgoKCSogW3Jlc291cmNlcy9zeXNyZXNfSXQucmNdCglGaXhlZCBhIGZldyBtaXN0YWtlcyBpbiB0aGUgZmlsZSBhbmQgcmVzaXplZCBzb21lIG9mIHRoZSBjb250cm9scy4KCkZyaSBBcHIgMTIgMDk6NTU6MTMgMTk5NiAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCUZpeGVkIGJyb2tlbiAjaWYgZGVmaW5lZCB0aGF0IHN0b3BwZWQgdW5peHdhcmUgY29tcGlsaW5nLgoKCSogW3dpbjMyL3Jlc291cmNlLmNdCiAgICAgICAgQWRkZWQgbWlzc2luZyByZXR1cm4gdG8gZW5kIG9mIEZpbmRSZXNvdXJjZTMyLgoKVGh1IEFwciAxMSAxODowMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdIFt3aW5kb3dzL2V2ZW50LmNdCglGaXhlZCBHZXRLZXlTdGF0ZSBmb3IgbW91c2UgYnV0dG9ucy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCVdNX01PVVNFQUNUSVZBVEUgd2Fzbid0IHNlbnQgaW4gc29tZSBjYXNlcy4KCldlZCBBcHIgMTAgMTg6NTk6NTMgMTk5NiAgTmllbHMgZGUgQ2FycGVudGllciAgPG5pZWxzQGNpbmR5LmV0LnR1ZGVsZnQubmw+CgoJKiBbb2JqZWN0cy9mb250LmNdCglNYXRjaCBzbGlnaHRseSBiaWdnZXIgZm9udCBpZiBoZWlnaHQgbmVnYXRpdmUuCgpNb24gQXByICA4IDEzOjQ2OjE1IDE5OTYgIERlYW5vIENhbHZlciA8ZGVhbm9AcmF0dGllLmRlbW9uLmNvLnVrPgoKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KCUNoYW5nZWQgcmVhZCdzIHRvIEZJTEVfcmVhZCdzIGluIG1tc3lzdGVtIHRvIGZpeCBtbWlvIGJ1Zy4KClN1biBBcHIgIDcgMjE6NDA6MjkgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFttaXNjL2NvbW1kbGcuY10gW3Jlc291cmNlcy9zeXNyZXNfRW4ucmNdIFtyZXNvdXJjZXMvc3lzcmVzX0RlLnJjXQoJSW50cm9kdWNlZCBDb2xvckRsZ1Byb2MoKSBmb3IgQ2hvb3NlQ29sb3IoKSBhbmQgcmVwbGFjZWQgZml0dGluZwoJRW4tLERlLSByZXNvdXJjZXMuIAoJQXMgd3JpdHRlbiBpbiBUT0RPOiBzb21lIG5hdGlvbmFsIGxhbmd1YWdlIHN1cHBvcnQgaXMgbmVlZGVkIGhlcmUuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZyaSBBcHIgIDUgMTU6MjI6NTUgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdIFtjb250cm9scy9zdGF0aWMuY10KCUNoYW5nZXMgdG8gdXNlIFdORCAqIHdoZXJldmVyIHBvc3NpYmxlLgoKCSogW2RlYnVnZ2VyL2RiZy55XSBbZGVidWdnZXIvZGVidWcubF0KCUFkZGVkICdpbmZvIG1vZHVsZScgYW5kICd3YWxrIG1vZHVsZScgY29tbWFuZHMuCgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXSBbaWYxNjMyL3JlbGF5LmNdIFt0b29scy9idWlsZC5jXQoJQWRkZWQgYXNzZW1ibHkgY29kZSBnZW5lcmF0aW9uIHRvIGNhbGwgZnJvbSBXaW5lIGludG8gMzItYml0IGNvZGUuCglDaGFuZ2VkIGFsbCAnY2FsbDMyJyByZWZlcmVuY2VzIGluICdjYWxsZnJvbTE2JyB0byBhdm9pZCBjb25mdXNpb24KCXdpdGggV2luMzIgcm91dGluZXMuCgoJKiBbaW5jbHVkZS9jYWxsYmFjay5oXQoJQWRkZWQgcHJvdG90eXBlcyBmb3IgMzItYml0IGNhbGxiYWNrcy4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdIFtpZjE2MzIvcmVsYXkzMi5jXSBbdG9vbHMvYnVpbGQuY10KCVVuaWZpZWQgMTYtIGFuZCAzMi1iaXQgbW9kdWxlcy4gVGhlIGZha2UgbW9kdWxlIGZvciAzMi1iaXQgRExMcyBpcwoJbm93IGdlbmVyYXRlZCBieSB0aGUgYnVpbGQgcHJvZ3JhbS4KCgkqIFtpbmNsdWRlL21vZHVsZS5oXQoJQWRkZWQgZXh0cmEgaW5mbyB0byBORV9NT0RVTEUgZm9yIFdpbjMyIG1vZHVsZXMgdG8gcG9pbnQgdG8gdGhlIFBFCgltb2R1bGUgZGF0YS4KCgkqIFtpbmNsdWRlL3BlX2ltYWdlLmhdIFtsb2FkZXIvcGVfaW1hZ2UuY10gW3dpbjMyL3Jlc291cmNlLmNdCglSZW1vdmVkIHRoZSB3aW5lX2ZpbGVzIGxpc3QuIFRoZSBQRSBkYXRhIGZvciBhIG1vZHVsZSBjYW4gbm93IGJlCglhY2Nlc3NlZCB3aXRoIHRoZSBORV9XSU4zMl9NT0RVTEUgbWFjcm8uCgoJKiBbbG9hZGVyL3NpZ25hbC5jXSBbbWlzY2VtdS9pbnN0ci5jXQoJRG9uJ3Qgc3RhcnQgdGhlIEJJT1MgdGltZXIgYXQgc3RhcnR1cCwgYnV0IG9ubHkgYWZ0ZXIgYW4gYWNjZXNzIHRvCgl0aGUgMHg0MCBzZWdtZW50LgoKCSogW21lbW9yeS9sb2NhbC5jXQoJQ2hhbmdlZCBMT0NBTF9Mb2NrKCkgdG8gcmV0dXJuIGEgMzItYml0IHBvaW50ZXIuCgoJKiBbbWlzYy9tYWluLmNdIFtpbmNsdWRlL2RsbHMuaF0KCVNvbWUgYnVpbHQtaW4gRExMcyAobGlrZSBLRVJORUwpIGNhbiBubyBsb25nZXIgYmUgZGlzYWJsZWQgZnJvbQogCXRoZSBjb21tYW5kLWxpbmUuCgkKVGh1IEFwciAgNCAxOTo1NDozOSAxOTk2ICBLZWl0aCBSZXlub2xkcyA8a2VpdGhyQHNjby5DT00+CgoJKiBbKi8qXQoJQSBsb3Qgb2Ygc21hbGwgY2hhbmdlcyB0byBzdXBwb3J0IFNDTyBPcGVuU2VydmVyIDUuCgpUaHUgQXByICA0IDE1OjM4OjEzIDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtMS5sZWlkZW51bml2Lm5sPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUZpeGVkIEdldEtleVN0YXRlKCkgY2FsbCB0byB1c2UgMHg4MDAwIGNvbnZlbnRpb24uCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCB1bmRvY3VtZW50ZWQgbWVzc2FnZXMgRU1fU0NST0xMIGFuZCBFTV9HRVRUSFVNQi4KClRodSBBcHIgIDQgMDk6NTI6NTIgMTk5NiAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbaWYxNjMyL2V4Y2VwdC5TXQoJTW9kaWZpZWQgY29kZSB0byBhc3NlbWJsZSBvbiB1bml4d2FyZS4KCldlZCBBcHIgIDMgMDk6Mzg6MjYgMTk5NiAgSnVlcmdlbiBNYXJxdWFyZHQgPG1hcnF1QGx1bmFyLmFkdmFudGVzdC5kZT4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUltcGxlbWVudGF0aW9uIG9mIGEgc2Vjb25kIGZvbnQgY2FjaGUgd2hpY2ggd2lsbCBiZSB1cGRhdGVkCglkeW5hbWljYWxseS4KCk1vbiBBcHIgIDEgMTY6NDc6NDAgMTk5NiAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BxYmMuY2xpYy5uZXQ+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Dei5yY10gW3Jlc291cmNlcy9zeXNyZXNfRGEucmNdCgkgIFtyZXNvdXJjZXMvc3lzcmVzX0RlLnJjXSBbcmVzb3VyY2VzL3N5c3Jlc19Fby5yY10KCSAgW3Jlc291cmNlcy9zeXNyZXNfRXMucmNdIFtyZXNvdXJjZXMvc3lzcmVzX0ZpLnJjXQoJICBbcmVzb3VyY2VzL3N5c3Jlc19Oby5yY10gW3Jlc291cmNlcy9UT0RPXQoJVXBkYXRlZCBGSU5EX1RFWFQgYW5kIFJFUExBQ0VfVEVYVCB0byB3b3JrIGxpa2UgdGhlIEVuZ2xpc2ggdmVyc2lvbi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE1hciAzMSAxMzo1NDo0NiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFt0b29scy9idWlsZC5jXQoJQ2hhbmdlZCBCdWlsZFNwZWMzMkZpbGVzKCkgdG8gZ2VuZXJhdGUgYXNzZW1ibHkgaW5zdGVhZCBvZiBDIGNvZGUuCglVbmlmaWVkIC1zcGVjMTYgYW5kIC1zcGVjMzIgb3B0aW9uczsgRExMIHR5cGUgaXMgbm93IGRldGVybWluZWQgYnkKCXRoZSAndHlwZScgZGVjbGFyYXRpb24gaW4gdGhlIC5zcGVjIGZpbGUuCglOZXcgLXN0ZGNhbGwgb3B0aW9uIHRvIGJ1aWxkIGFsbCBzdGRjYWxsIGFzc2VtYmx5IHJlbGF5cy4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2lmMTYzMi9yZWxheTMyLmNdIFtpbmNsdWRlL2RsbHMuaF0KCVN0YXJ0ZWQgdG8gdW5pZnkgMTYtIGFuZCAzMi1iaXQgYnVpbHRpbiBETExzLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUFkZGVkIE1PRFVMRV9HZXRXbmRQcm9jRW50cnkzMigpIHRvIG1pcnJvciBNT0RVTEVfR2V0V25kUHJvY0VudHJ5MTYoKS4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10gW2xvYWRlci9yZXNvdXJjZS5jXQoJQWxsIG1vZHVsZXMgbm93IGhhdmUgYSBORSBzaWduYXR1cmUsIGFuZCBjYW4gYmUgZGlzdGluZ3Vpc2hlZCBieQoJdGhlIE5FX0ZGTEFHU19XSU4zMiBmbGFnLgoKCSogW3dpbmRvd3MvYWxpYXMuY10KCUFsaWFzZXMgZm9yIGJ1aWx0LWluIHdpbmRvdyBwcm9jZWR1cmVzIGFyZSBub3cgYWxsIGNyZWF0ZWQgYXQKCXN0YXJ0dXAgaW4gQUxJQVNfSW5pdCgpLgoKRnJpIE1hciAyOSAxNDo1NjozOSAxOTk2ICBHcmVnIEtyZWlkZXIgPGtyZWlkZXJAbmF0bGFiLnJlc2VhcmNoLnBoaWxpcHMuY29tPgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglMaW1pdCByZWN0YW5nbGUgdG8gY2xlYXIgdG8gc2l6ZSBvZiBpdGVtIHdoZW4gcGFpbnRpbmcgY29tYm8sIG5vdAogCWRlZmF1bHQuICBPbmx5IGRyYXcgaXRlbXMgaW4gbGlzdCB3aGVuIHRoZXJlIGlzIGVub3VnaCByb29tIGZvciB0aGVtLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUdldCB0aGUgbWVhc3VyZSBvZiBldmVyeSBpdGVtIHRoYXQncyBhZGRlZCBhbmQgc3RvcmUgaW4gdGhlIGl0ZW0ncwogCWRhdGEgc3RydWN0dXJlLiAgU2Nyb2xsIGxpc3Rib3ggaWYgbW91c2UgbmVhciBlZGdlIG9mIGJveC4gIE9ubHkKIAlkcmF3IGl0ZW1zIGluIGxpc3Qgd2hlbiB0aGVyZSBpcyBlbm91Z2ggcm9vbS4KCkZyaSBNYXIgMjkgMTI6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9kZWZ3bmQuY10gW3dpbmRvd3MvZGlhbG9nLmNdIFt3aW5kb3dzL21kaS5jXQoJICBbd2luZG93cy9ub25jbGllbnQuY10gW2NvbnRyb2xzL21lbnUuY10gCglWYXJpb3VzIGNoYW5nZXMgZm9yIGJldHRlciBrZXlib2FyZCBoYW5kbGluZy4gCgoJKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9tZXNzYWdlLmNdIFttaXNjL2tleWJvYXJkLmNdCglQcm9wZXIga2V5Ym9hcmQgbWVzc2FnZSBvcmRlcmluZywgd29ya2luZyBHZXRLZXlTdGF0ZSgpIChmaW5hbGx5ISksIAoJaW1wcm92ZW1lbnRzIGluIFRvQXNjaWkoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9tZXNzYWdlLmNdCglTbWFsbCBpbXByb3ZlbWVudHMgaW4gV0lOX0ZpbmRXaW5Ub1JlcGFpbnQuCgoJKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3MvcGFpbnRpbmcuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglQdXQgdXBkYXRlIHJlZ2lvbiBpbiBXTV9OQ1BBSU5UIHdQYXJhbS4KCgkqIFtsb2FkZXIvdGFzay5jXQoJS2lsbCB0YXNrIHRpbWVycyB3aGVuIHRhc2sgaXMgZGVsZXRlZCwgc3dpdGNoIHRpbWVycyB0byB0aGUKCW5ldyBxdWV1ZSBpbiBTZXRUYXNrUXVldWUoKS4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdIFttaXNjZW11L2Rvc21lbS5jXQoJQWRkZWQgU0lHQUxSTSBzaWduYWwgaGFuZGxlciB0byBpbmNyZW1lbnQgQklPUyBjbG9jay4gCgoJKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3Mvd2lucG9zLmNdIFt3aW5kb3dzL21kaS5jXQoJRml4ZWQgQ2hpbGRXaW5kb3dGcm9tUG9pbnQoKSwgV01fUEFSRU5UTk9USUZZIGFuZCBpdHMgaGFuZGxpbmcgYnkKCU1ESSBjbGllbnQuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUltcHJvdmVtZW50cyBpbiBoYW5kbGluZyBvZiBvd25lZCBwb3B1cHMuICJGbG9hdGluZyIgdG9vbGJveGVzIAoJd29yayBiZXR0ZXIgbm93LiAKClRodSBNYXIgMjggMTI6Mzg6MjkgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJTmV3IGZpbGUsIHJlZ2lzdHJ5IHJld3JpdGUgaW5jbHVkaW5nIHdpbjMyIGV4dGVuc2lvbnMKCS0gVW5pY29kZQoJLSBtdWx0aXBsZSB2YWx1cyBwZXIga2V5CgktIGRpZmZlcmVudCBkYXRhdHlwZXMgZm9yIHZhbHVlcwoJLSBtdWx0aXBsZSByb290a2V5cwoJLSBzYXZpbmcgYW5kIGxvYWRpbmcgaW4gZGlmZmVyZW50IHJlZ2lzdHJpZXMuCgoJKiBbaW5jbHVkZS93aW5yZWcuaF0KCU5ldyBmaWxlLCBkZWZpbml0aW9ucyBhbmQgc3RydWN0cyBmb3IgcmVnaXN0cnkuCgoJKiBbaW5jbHVkZS93aW5lcnJvci5oXQoJU29tZSBuZXcgZXJyb3IgZGVmaW5lcyBhZGRlZC4uLiB0aGVyZSBhcmUgbW9yZSwgc29tZW9uZSBwbGVhc2UKIAljaGVjayBhIChyZWFsLSl3aW5kb3dzIHdpbmVycm9yLmguCgkKCSogW2lmMTYzMi9zaGVsbC5zcGVjXSBbaWYxNjMyL2FkdmFwaTMyLnNwZWNdIFtpZjE2MzIva2VybmVsLnNwZWNdCglSZWdpc3RyeSBzcGVjcyBhZGRlZC4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCVN3aXRjaCBpbnRlcm5hbCBTSEVMTC5ETEwgdG8gZGVmYXVsdCAndXNlZCcuCgoJKiBbd2luMzIvc3RyaW5nMzIuY10gW2luY2x1ZGUvc3RyaW5nMzIuaF0KCVNvbWUgbmV3IGZ1bmN0aW9ucyBhZGRlZC4KCWNoYXIgc2hvdWxkIGJlIHVuc2lnbmVkIGNoYXIgd2hlbiBjb252ZXJ0aW5nIHRvIDE2Yml0IGludHMuCgoJKiBbbWlzYy9zaGVsbC5jXSBbaW5jbHVkZS9zaGVsbC5oXSBbd2luMzIvYWR2YXBpLmNdCglSZW1vdmVkIG9sZCByZWdpc3RyeSBmdW5jdGlvbnMuCgpUdWUgTWFyIDI2IDE1OjAxOjQ2IDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtMS5sZWlkZW51bml2Lm5sPgoKCSogW2luY2x1ZGUvYml0bWFwcy9vY3JfaWJlYW1dCglGaXhlZCB0aGUgcG9zaXRpb24gb2YgdGhlIGhvdHNwb3QuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglGaXhlZCBhIGZldyBidWdzIGluIFRFWFRfVGFiYmVkVGV4dE91dCgpLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUZpeGVkIHRoZSBvcmRlciBvZiB0aGUgYml0cyBpbiB0aGUgS2V5U3RhdGVUYWJsZS4KCTB4ODAgaXMgdGhlIHVwL2Rvd24tYml0LiAgMHgwMSBpcyB0aGUgdG9nZ2xlIGJpdC4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10gW3dpbmRvd3MvbWRpLmNdIFtjb250cm9scy9lZGl0LmNdCglGaXhlZCB0aGUgY2FsbHMgdG8gR2V0S2V5U3RhdGUoKS4KClR1ZSBNYXIgMjYgMDg6NDM6MTUgMTk5NiAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BxYmMuY2xpYy5uZXQ+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Gci5yY10gW3Jlc291cmNlcy9UT0RPXQoJVXBkYXRlZCBGSU5EX1RFWFQgYW5kIFJFUExBQ0VfVEVYVCB0byB3b3JrIGxpa2UgdGhlIEVuZ2xpc2ggdmVyc2lvbi4KCk1vbiBNYXIgMjUgMTc6Mzg6NTkgMTk5NiAgVHJpc3RhbiBUYXJyYW50IDx0c3RAZGNzLmVkLmFjLnVrPgoKCSogW3Jlc291cmNlcy9zeXNyZXNfaXQucmNdCglBZGRlZCBzdXBwb3J0IGZvciBJdGFsaWFuIFtJdF0gbGFuZ3VhZ2UuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBNYXIgMjQgMTM6MTM6MTEgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbaW5jbHVkZS93aW4uaF0gW3dpbmRvd3MvKi5jXQoJUmVwbGFjZWQgbmV4dCwgcGFyZW50LCBjaGlsZCBhbmQgb3duZXIgaGFuZGxlcyBieSBwb2ludGVycyBpbiBXTkQKCXN0cnVjdHVyZS4gVGhpcyBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSwgYW5kIHNob3VsZCBiZQoJcmVhc29uYWJseSBzYWZlIHNpbmNlIE1pY3Jvc29mdCBkaWQgdGhlIHNhbWUgaW4gV2luOTUuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXSBbKi8qXQoJUmVkZWZpbmVkIEhBTkRMRSB0byBiZSBVSU5UIGluc3RlYWQgb2YgYSBwb2ludGVyIGZvciBXaW5lbGliLiBUaGlzCglhbGxvd3MgcmVtb3ZpbmcgYSBsb3Qgb2YgdW5uZWNlc3NhcnkgY2FzdHMgYW5kIE5QRk1Ucy4KCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglDcmVhdGUgdGhlIGNhcmV0IGJydXNoIHVwb24gQ3JlYXRlQ2FyZXQoKTsgdXNlIHRoZSBiaXRtYXAKCWRpbWVuc2lvbnMgZm9yIHRoZSBjYXJldC4KCUZpeGVkIENBUkVUX0Rpc3BsYXlDYXJldCgpIHRvIHVzZSBQYXRCbHQoKS4KCkZyaSBNYXIgMjIgMTY6MDA6MDAgMTk5NiAgQW5hbmQgS3VtcmlhIDxha3VtcmlhQG96ZW1haWwuY29tLmF1PgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglNb3JlIHNhbml0eSBjaGVja3MsIGZpeHVwIHNvbWUgZXJyb25lb3VzIHJldHVybiBjb2Rlcy4KCgkqIFtkb2N1bWVudGF0aW9uL3dpbnNvY2tdCglEZXNjcmlwdGlvbiBvZiBob3cgY29tcGF0aWJsZSB0aGUgd2luc29jayBpcyBjdXJyZW50bHkuCgpGcmkgTWFyIDIyIDEzOjA1OjM0IDE5OTYgIFVscmljaCBTY2htaWQgIDx1c2NobWlkQG1haWwuaGgucHJvdmkuZGU+CgoJKiBbbGlicmFyeS93aW5tYWluLmNdCglTZXQgYGxwc3pDbWRQYXJhbScgYnkgY29uY2F0ZW5hdGluZyBhcmd1bWVudHMuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJV2luRXhlYzogYWNjZXB0IFVuaXggY29tbWFuZHMsIHVzZSBXaW5lIGVtdWxhdG9yLgoKTW9uIE1hciAxOCAxMjoxNjoyNyAxOTk2ICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVt3aW4zMi90aHJlYWQuY11baW5jbHVkZS9rZXJuZWwzMi5oXQoJRGVsZXRlQ3JpdGljYWxTZWN0aW9uLCBFbnRlckNyaXRpY2FsU2VjdGlvbiwKIAlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uLCBMZWF2ZUNyaXRpY2FsU2VjdGlvbiwgVGxzQWxsb2MsCiAJVGxzRnJlZSwgVGxzR2V0VmFsdWUsIFRsc1NldFZhbHVlOiBuZXcgZnVuY3Rpb25zLgoJQ1JJVElDQUxfU0VDVElPTjogbmV3IHN0cnVjdHVyZS4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11bd2luMzIvY29kZV9wYWdlLmNdCglXaWRlQ2hhclRvTXVsdGlCeXRlOiBuZXcgZnVuY3Rpb24uCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW3dpbjMyL2ZpbGUuY10KCUdldEZpbGVBdHRyaWJ1dGVzQTogbmV3IGZ1bmN0aW9uLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVttaXNjL21haW4uY10KCUdldEVudmlyb25tZW50U3RyaW5nc1csIEZyZWVFbnZpcm9ubWVudFN0cmluZ3NBLAogCUZyZWVFbnZpcm9ubWVudFN0cmluZ3NXOiBuZXcgZnVuY3Rpb25zLgoJCgkqIFtpZjE2MzIvdXNlci5zcGVjXVt3aW4zMi9jdXJzb3JpY29uMzIuY11bd2luMzIvTWFrZWZpbGUuaW5dCgljdXJzb3JpY29uMzIuYzogbmV3IGZpbGUuCglMb2FkQ3Vyc29yQSwgTG9hZEN1cnNvclc6IG1vZGlmaWVkIGltcGxlbWVudGF0aW9uIGZyb20gTG9hZEN1cnNvcgogCXRvIFdJTjMyXyouCglMb2FkSWNvbkEsIExvYWRJY29uVzogbW9kaWZpZWQgaW1wbGVtZW50YXRpb24gZnJvbSBMb2FkSWNvbkEzMgoJdG8gV0lOMzJfKi4KCgkqIFtpbmNsdWRlL3N0cnVjdDMyLmhdCglwcmFnbWEgcGFjayBpbnNlcnRlZC4KCUNVUlNPUklDT04zMiBzdHJ1Y3R1cmVzIGFkZGVkLgoKCSogW2luY2x1ZGUvd2lubmxzLmhdCglDb25zdGFudHMgQ1BfKiBhbmQgV0NfKiBhZGRlZC4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCVBFX0xvYWRNb2R1bGU6IGNhbGwgUEVfSW5pdERMTCB3aXRoIGhNb2R1bGUgcmF0aGVyIHRoYW4gd3BudC4KClN1biBNYXIgMTcgMTY6NTk6MTIgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFttaXNjL2NvbW1kbGcuY10KCUludHJvZHVjZWQgaG9vayBmdW5jdGlvbiBoYW5kbGluZyBpbiBmaWxlIGRpYWxvZy4KCVJlbW92ZWQgYW4gdW5uZWNlc3NhcnkgU2hvd1dpbmRvdyBjYWxsIGluIEZJTEVETEdfV01Db21tYW5kKCkuCgpUaHUgTWFyIDE0IDEwOjUwOjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdCglBZGRlZCBHZXROZWFyZXN0Q29sb3IuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglBZGRlZCBHbG9iYWxBZGRBdG9tQS4KCgkqIFt3aW4zMi9wYXJhbTMyLmNdCglBZGRlZCBzdGFja2ZyYW1lLmggdG8gaW5jbHVkZXMuCglXSU4zMl9HbG9iYWxBZGRBdG9tQSgpIC0gbmV3IGZ1bmN0aW9uLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgTWFyIDEzIDE5OjQ2OjUwIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCVJlbW92ZWQgY2FsbHMgdG8gbWVtbW92ZSAobm90IHBvcnRhYmxlKS4KCgkqIFtkZWJ1Z2dlci9kYmcueV0gW2RlYnVnZ2VyL2RlYnVnLmxdCglQcmVmaXhlZCBhbGwgdG9rZW4gd2l0aCAndCcgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggdHlwZQoJZGVmaW5pdGlvbnMuCglBZGRlZCAnd2FsayBxdWV1ZScsICd3YWxrIGNsYXNzJyBhbmQgJ2luZm8gY2xhc3MnIGNvbW1hbmRzLgoKCSogW2RlYnVnZ2VyL2luZm8uY10KCU1vdmVkIHF1ZXVlIGFuZCB3aW5kb3cgaW5mb3JtYXRpb24gZnVuY3Rpb25zIHRvIHdpbmRvd3MvcXVldWUuYwoJYW5kIHdpbmRvd3Mvd2luLmMgcmVzcGVjdGl2ZWx5LgoKCSogW2xvYWRlci9zaWduYWwuY10KCUFkZGVkIFNJR0hVUCBoYW5kbGluZyB0byBmb3JjZSBlbnRyeSBpbnRvIGJ1aWx0LWluIGRlYnVnZ2VyLgoJQ2xlYW5lZCB1cCBhIGJpdC4KCgkqIFttaXNjL3NweS5jXQoJR2VuZXJhbCBjbGVhbnVwIGFuZCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJQWRkZWQgQ0xBU1NfRHVtcENsYXNzKCkgYW5kIENMQVNTX1dhbGtDbGFzc2VzKCkgZnVuY3Rpb25zIGZvcgoJZGVidWdnZXIuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJUHJlc3NpbmcgQ3RybC1BbHQtUmV0dXJuIGZvcmNlcyBhbiBlbnRyeSBpbnRvIHRoZSBkZWJ1Z2dlci4gTm90CglzdXJlIGlmIHRoaXMga2V5IGNvbWJpbmF0aW9uIGlzIGEgZ29vZCBjaG9pY2UuLi4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3MvcXVldWUuY10gKE5ldyBmaWxlKQoJTW92ZWQgbWVzc2FnZSBxdWV1ZSBoYW5kbGluZyBmdW5jdGlvbnMgdG8gd2luZG93cy9xdWV1ZS5jLgoKVHVlIE1hciAxMiAxNDo1NToxNiAxOTk2ICBPbm5vIEhvdmVycyAgPG9ubm9Ac3RhY2sudXJjLnR1ZS5ubD4KCgkqIFtpZjE2MzIvZXhjZXB0LlNdIFtpbmNsdWRlL2V4Y2VwdC5oXSBbd2luMzIvZXhjZXB0LmNdIChOZXcgZmlsZXMpCglJbXBsZW1lbnRlZCBXaW4zMiBleGNlcHRpb24gZnVuY3Rpb25zOiBSYWlzZUV4Y2VwdGlvbigpLAogCVJ0bFVud2luZCgpLCBTZXRVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXIoKSBhbmQKCVVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcigpLgoKTW9uIE1hciAxMSAxOToyMzoyOSAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10gW2luY2x1ZGUvbGlzdGJveC5oXQoJU3BlY2lhbCBoYW5kbGluZyBmb3IgQ09NQk9MQk9YIHN0eWxlcyBpbnRyb2R1Y2VkIHZpYSBleHRlbnNpb24gb2YKIAlIRUFETElTVCBzdHJ1Y3R1cmU6IGxwaGwtPmR3U3R5bGUuCgpNb24gTWFyIDExIDEzOjMxOjA2IDE5OTYgIEdyZWcgS3JlaWRlciA8a3JlaWRlckBuYXRsYWIucmVzZWFyY2gucGhpbGlwcy5jb20+CgoJKiBbY29udHJvbHMvY29tYm8uY10KCUFueSBtb3VzZSBtb3ZlbWVudCB3aXRoaW4gYSBzbWFsbCBkaXN0YW5jZSAoZGVmaW5lZCBieSBDQkxNTV9FREdFKQoJb2YgdGhlIHRvcCBvciBib3R0b20gZWRnZSBjYXVzZXMgdGhlIHdpbmRvdyB0byBzY3JvbGwuICBBbHNvIG1vdmVkIAoJc29tZSBhc3NpZ25tZW50cyBzbyB0aGUgcm91dGluZSB3b3JrcyBjb3JyZWN0bHkuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJQ2hhbmdpbmcgc2VsZWN0aW9uIGluIExpc3RCb3hTZXRDdXJTZWwgbm93IHVwZGF0ZXMgUHJldkZvY3VzZWQuCglBZGRlZCB0byBMQlNldEZvbnQgYW5kIENyZWF0ZUxpc3RCb3hTdHJ1Y3QgYSBmYWtlIGhkYyB0aGF0IHRlc3RzIAoJYW5kIHNldHMgdGhlIHN0YW5kYXJkIHRleHQgaGVpZ2h0LgoKU3VuIE1hciAxMCAwODozOToyMyAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJRml4ZWQgbWVtb3J5IGxlYWsgaW4gRENFX0NsaXBXaW5kb3dzKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZyaSBNYXIgIDggMTk6MDc6MTggMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29uZmlndXJlLmluXQoJUXVvdGUgJ1snIGFuZCAnXScgaW4gdGhlIHRlc3QgcHJvZ3JhbSBmb3IgdGhlIHN0cmVuZ3RoLXJlZHVjZQoJYnVnLiBUaGlzIHNob3VsZCB3b3JrIG11Y2ggYmV0dGVyLi4uCgoJKiBbZmlsZXMvZmlsZS5jXQoJQXVnbWVudGVkIERPU19GSUxFIHN0cnVjdHVyZS4gTW9zdCBpbnRlcm5hbCBmdW5jdGlvbnMgbm93IHJldHVybiBhCglET1NfRklMRSogaW5zdGVhZCBvZiBhIFVuaXggaGFuZGxlLgoJQWRkZWQgYSBsb2NhbCBmaWxlIGFycmF5IHRvIHJlcGxhY2UgdGhlIFBEQiBsaXN0IHVwb24gc3RhcnR1cCwgdG8KCWFsbG93IHVzaW5nIGZpbGUgSS9PIGZ1bmN0aW9ucyBiZWZvcmUgdGhlIGZpcnN0IHRhc2sgaXMgY3JlYXRlZC4KCUFkZGVkIEZJTEVfU2V0RGF0ZVRpbWUoKSBhbmQgRklMRV9TeW5jKCkgZnVuY3Rpb25zLgoJCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglVc2UgdGhlIERPUyBmaWxlIEkvTyBmdW5jdGlvbnMgaW4gTU9EVUxFX0xvYWRFeGVIZWFkZXIoKS4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJVXNlIHZpc2libGUgcmVnaW9uIGluc3RlYWQgb2YgR0MgY2xpcCByZWdpb24gdG8gY2xpcCBzb3VyY2UKCWFyZWEuIFRoaXMgZml4ZXMgdGhlIGNhcmQgZHJhd2luZyBidWcgaW4gZnJlZWNlbGwuCgoJKiBbb2JqZWN0cy9yZWdpb24uY10KCUZpeGVkIENvbWJpbmVSZ24oKSB0byBhbGxvdyBzcmMgYW5kIGRlc3QgcmVnaW9ucyB0byBiZSB0aGUgc2FtZS4KCkZyaSBNYXIgIDggMTY6MzI6MjMgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+CgoJKiBbY29udHJvbHMvRURJVC5UT0RPXQoJVXBkYXRlZCBzbyBpdCByZWZsZWN0cyB0aGUgY3VycmVudCBzdGF0dXMuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJSW1wbGVtZW50ZWQgaW50ZXJuYWwgRURJVF9Xb3JkQnJlYWtQcm9jKCkuCglJbXBsZW1lbnRlZCBFU19SRUFET05MWS4KCUltcGxlbWVudGVkIFdNX0xCVVRUT05EQkxDTEsgdG8gc2VsZWN0IHdob2xlIHdvcmRzLgoJRml4ZWQgYSBsb3Qgb2YgdHlwZXMgaW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25zLgoKV2VkIE1hciAgNiAxOTo1NTowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtkZWJ1Z2dlci9pbmZvLmNdCglBZGRlZCAid2FsayB3aW5kb3ciIGNvbW1hbmQgdG8gd2FsayB3aW5kb3cgbGlzdC4gCgoJKiBbd2luZG93cy9tZGkuY10KCUFkZGVkIHByb3Blcig/KSBXTV9NRElTRVRNRU5VIG1lc3NhZ2UgaGFuZGxpbmcuCgpXZWQgTWFyICA2IDA5OjI3OjEyIDE5OTYgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdW2lmMTYzMi9yZWxheTMyLmNdCglSRUxBWTMyX0NhbGxXaW5kb3dQcm9jQ29udlN0cnVjdDogbmV3IGZ1bmN0aW9uLgoKCSogW3dpbjMyL3N0cnVjdDMyLmNdW3dpbjMyL01ha2VmaWxlLmluXVt3aW4zMi9wYXJhbS5jXVt3aW4zMi91c2VyMzIuY10KCXN0cnVjdDMyLmM6IG5ldyBmaWxlLiBNb3ZlZCBhbGwgc3RydWN0dXJlIGNvbnZlcnNpb25zIGludG8gdGhhdCBmaWxlCglQQVJBTTMyX1BPSU5UMzJ0bzE2LE1TRzE2dG8zMixVU0VSMzJfUkVDVDMydG8xNjogCglyZW5hbWVkIHRvIFNUUlVDVDMyX1BPSU5UMzJ0bzE2LCAuLi4KCVdJTjMyX1BPSU5ULFdJTjMyX01TRyxXSU4zMl9SRUNULFdJTjMyX1BBSU5UU1RSVUNUOiByZW5hbWVkIHRvCglQT0lOVDMyLCAuLi4KCU5ldyBjb252ZXJzaW9uIGZ1bmN0aW9ucyBmb3IgTkNDQUxDU0laRV9QQVJBTVMsIFdJTkRPV1BPUywKIAlDUkVBVEVTVFJVQ1QuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdW21pc2MvZXhlYy5jXQoJV0lOSEVMUCwgTVVMVElLRVlIRUxQLCBIRUxQV0lOSU5GTzogbmV3IHN0cnVjdHVyZXMKCVdpbkhlbHA6IFJlaW1wbGVtZW50ZWQuIFRoYW5rcyB0byBQZXRlciBCYWxjaAogCSgxMDA3MTAuMjU2NkBjb21wdXNlcnZlLmNvbSkgZm9yIGhpcyB2YWx1YWJsZSByZXNlYXJjaC4KCgkqIFt3aW4zMi93aW5wcm9jcy5jXQoJV0lOMzJfQ2FsbFdpbmRvd1Byb2NUbzE2OiBuZXcgZnVuY3Rpb24sIGNhbGwgaW4KIAlVU0VSMzJfRGVmV2luZG93UHJvY0EsLi4uCgpNb24gTWFyICA0IDIzOjIyOjQwIDE5OTYgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJQWRkZWQgIiNkZWZpbmUgX19leHBvcnQiLgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglQdXQgaW4gYSBmZXcgaGFja3MgdG8gbWFrZSBiaXRibHQtaW5nIHdvcmsgd2hlbiB1cHNpZGUtZG93biBhbmQvb3IKCW1pcnJvcmVkLiAgQklUQkxUX1N0cmV0Y2hJbWFnZSBzaG91bGQgcmVhbGx5IGJlIGNoZWNrZWQgb3ZlcgoJdGhvcm91Z2hseS4KCgkqIFtwcm9ncmFtcy9wcm9nbWFuL21haW4uY10KCUFkZGVkICIjaW5jbHVkZSA8cmVzb3VyY2UuaD4iIGZvciBkZWZpbml0aW9uIG9mIEhBVkVfV0lORV9DT05TVFJVQ1RPUi4KCgkqIFtyYy9wYXJzZXIuaF0gW3JjL3BhcnNlci5sXSBbcmMvcGFyc2VyLnldIFtyYy93aW5lcmMuY10KCUVsaW1pbmF0ZWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IGluIHN0eWxlIGRlZmluaXRpb24uCglBZGRlZCBjcnVkZSBlcnJvciBtZXNzYWdlIHN1cHBvcnQ6ICJzdGRpbjolZDogcGFyc2UgZXJyb3IgYmVmb3JlICclcyciLgoJSW1wbGVtZW50ZWQgc3RyaW5nIHRhYmxlIHN1cHBvcnQgdG8gdGhlIGJlc3Qgb2YgbXkgYWJpbGl0eSAoaXQgd29ya3MKCXdpdGggTG9hZFN0cmluZygpIGNhbGxzKS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJRml4ZWQgYnVnIGluIE5DX0RvU2l6ZU1vdmUoKSB0aGF0IG1hZGUgc3lzdGVtIG1lbnUgcG9wIHVwIHdoZW4gdGl0bGUKCWJhciBvZiBub24taWNvbml6ZWQgd2luZG93IHdhcyBjbGlja2VkIChjaGVja2VkIGZvciBpY29uaXphdGlvbikuCgpNb24gTWFyIDA0IDIwOjU1OjE5IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2lmMTYzMi9semV4cGFuZC5zcGVjXSBbaWYxNjMyL3JlbGF5LmNdCgkgIFtpbmNsdWRlL2x6ZXhwYW5kLmhdW21pc2MvbHpleHBhbmQuY10KCUxaRVhQQU5ELkRMTCBhZGRlZC4KClN1biBNYXIgMDMgMTg6MTA6MjIgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJUHJldmVudCB1c2FnZSBvZiBpbnZhbGlkIEhXTkRzIGluIFdJTl9FbnVtQ2hpbGRXaW4oKSwKCXRoaXMgcHJldmVudHMgdG9vIGVhcmx5IHRlcm1pbmF0aW9uIG9mIEVudW1DaGlsZFdpbmRvd3MoKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IE1hciAgMiAxODoxOTowNiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCUZpeGVkIFNDUk9MTF9USFVNQiBwYWludGluZyBmaXhlcyBmcm9tIEFsZXggS29yb2JrYSB0byBzdG9yZSB0aGUKIAljdXJyZW50IHRyYWNraW5nIHdpbmRvdy4KCgkqIFtmaWxlcy9maWxlLmNdCglGaXhlZCB0d28gZmlsZSBkZXNjcmlwdG9yIGxlYWtzIGluIEZJTEVfT3BlbkZpbGUoKS4KCgkqIFtpZjE2MzIvcmVsYXkzMi5jXSBbbG9hZGVyL21vZHVsZS5jXSBbbG9hZGVyL3BlX2ltYWdlLmNdCgkgIFt0b29scy9idWlsZC5jXQoJUmVwbGFjZWQgTE9BREVERklMRUlORk8gc3RydWN0dXJlIGJ5IE9GU1RSVUNULgoKCSogW21lbW9yeS9hdG9tLmNdCglSZWxvYWQgdGhlIHBvaW50ZXIgdG8gdGhlIGF0b20gdGFibGUgaW4gQVRPTV9HZXRUYWJsZSgpIGFuZAogCUFUT01fQWRkQXRvbSgpIGluIGNhc2UgdGhlIExPQ0FMX0FsbG9jKCkgY2FsbHMgY2F1c2VkIHRoZSB0YWJsZSB0bwogCW1vdmUgaW4gbGluZWFyIG1lbW9yeS4KCkZyaSBNYXIgIDEgMTE6NTc6MTMgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+CgoJKiBbaW5jbHVkZS9jYWxsYmFjay5oXQoJQWRkZWQgc3VwcG9ydCBmb3IgQ2FsbFdvcmRCcmVha1Byb2MoKS4KCgkqIFtjb250cm9scy9lZGl0LmNdCglOZXcgY2FyZXQgaGFuZGxpbmcgKHJlYWxseSBlZmZpY2llbnQgLyBmYXN0KS4KCUltcGxlbWVudGVkIEVNX1NFVFdPUkRCUkVBS1BST0MgYW5kIEVNX0dFVFdPUkRCUkVBS1BST0MuCglGaXhlZCBFTV9TRVRGT05UIHNvIGl0IG5vdyBhbHNvIGNyZWF0ZXMgYSBwcm9wZXIgbmV3IGNhcmV0LgoKV2VkIEZlYiAyOCAyMjowMzozNCAxOTk2ICBEYW5pZWwgU2NoZXBsZXIgIDxkYW5pZWxAZnJvYm5pdHoud3VzdGwuZWR1PgoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10gW21pc2MvbWFpbi5jXSBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy93aW4uY10KCUFkZGVkIFdNX0RFTEVURSBwcm90b2NvbCB0byB0b3AtbGV2ZWwgd2luZG93cy4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCUZpeGVkIGEgcHJvYmxlbSB3aGljaCBjYXVzZWQgc2xvdyBzY3JvbGxpbmcgdG8gY29udGludWUJdW5jb250cm9sbGFibHkuCgoJKiBbbWlzYy9leGVjLmNdCglJbXBsZW1lbnRlZCBFeGl0V2luZG93cygpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglTZXQgdG9wLWxldmVsIG93bmVkIHdpbmRvd3MgdG8gYmUgdHJhbnNpZW50LgoKV2VkIEZlYiAyOCAxOToxMzoyMiAxOTk2ICBVbHJpY2ggU2NobWlkICA8dXNjaG1pZEBtYWlsLmhoLnByb3ZpLmRlPgoKCSogW3Byb2dyYW1zL3Byb2dtYW4vKl0KCUFkZGVkIGEgcHJvZ3JhbSBtYW5hZ2VyLgoKV2VkIEZlYiAyOCAxODozODowMSAxOTk2ICBEdW5jYW4gQyBUaG9tc29uIDxkdW5jYW5Ac3BkLmVlZS5zdHJhdGguYWMudWs+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Fby5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgRXNwZXJhbnRvIFtFb10gbGFuZ3VhZ2UuCgpXZWQgRmViIDI4IDAwOjIzOjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbaWYxNjMyL3VzZXIzMi5zcGVjXQoJQWRkZWQgRW5kRGlhbG9nLCBHZXREbGdJdGVtLCBHZXREbGdJdGVtSW50LCBTZXREbGdJdGVtSW50LAoKCSogW3dpbjMyL2luaXQuY10KCUFkZGVkIHRhc2suaCB0byBpbmNsdWRlcy4gR2V0TW9kdWxlSGFuZGxlQSgpIC0gcmV0dXJuIGhJbnN0YW5jZQoJaWYgY2FsbGVkIHdpdGggTlVMTCBwYXJhbWV0ZXIuIEZyZWVjZWxsIG5lZWRzIHRoaXMuIE5PVEUgdGhpcwoJbWF5IGluZGljYXRlIGEgcHJvYmxlbSB3aXRoIGRpZmZlcmVudGlhdGlvbiBiZXR3ZWVuIGhNb2R1bGUgYW5kCgloSW5zdGFuY2Ugd2l0aGluIFdpbmUuCgoJKiBbd2luMzIvcmVzb3VyY2UuY10KCUZpbmRSZXNvdXJjZTMyKCkgYW5kIExvYWRSZXNvdXJjZTMyKCkgLSBSZW1vdmVkICNpZiAwJ3MgYXJvdW5kCgljb252ZXJzaW9uIGZyb20gaEluc3RhbmNlIHRvIGhNb2R1bGUuIFNlZSByZW1hcmtzIGFib3ZlLgoKCSogW3dpbjMyL3N0cmluZzMyLmNdCglXSU4zMl9VbmlMZW4oKSAtIHJlbW92ZWQgc3RyYXkgc2VtaWNvbG9uLgoKVHVlIEZlYiAyNyAyMTowNToxOCAxOTk2ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoJCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglTZXQgYmxpbmsgcmF0ZSB3aXRoIGNhbGwgdG8gR2V0UHJvZmlsZUludCgpLgoKCSogW3JjL3dpbmVyYy5jXQoJSW4gbmV3X3N0eWxlKCksIG1hZGUgaW5pdGlhbCBmbGFnIHNldHRpbmdzIFdTX0NISUxEIHwgV1NfVklTSUJMRQogCWluc3RlYWQgb2YgMC4gIFRoaXMgc2VlbXMgdG8gY29ycmVzcG9uZCB0byBCb3JsYW5kJ3MgZGVmYXVsdHMsIGFuZAogCXRoZSBmbGFncyBjYW4gYmUgdW5zZXQgYnkgdXNpbmcgdGhlIChyYXRoZXIgb2J0dXNlKSAifCBOT1QgV1NfQ0hJTEQiCglvciAifCBOT1QgV1NfVklTSUJMRSIgdGVjaG5pcXVlIGluIHRoZSAqLnJjIGZpbGUuCgoJKiBbd2luMzIvdGltZS5jXQoJSW4gR2V0TG9jYWxUaW1lKCkgYW5kIEdldFN5c3RlbVRpbWUoKSwgdXNlZCB0dl9zZWMgZmllbGQgb2YgcmVzdWx0CiAJcmV0dXJuZWQgYnkgZ2V0dGltZW9mZGF5KCkgaW5zdGVhZCBvZiBtYWtpbmcgc2Vjb25kIGNhbGwgdG8KIAl0aW1lKCkuICBUaGlzIGVsaW1pbmF0ZXMgY2xvY2sgaml0dGVyIGlmIHRoZSBzZWNvbmRzIGNoYW5nZQogCWJldHdlZW4gdGhlIHR3byBjYWxscyAocmFyZSwgYnV0IHBvc3NpYmxlKS4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglBZGRlZCAiI2RlZmluZSBfZmFyIiBhbmQgIiNkZWZpbmUgX3Bhc2NhbCIuCgoJKiBbd2luZG93cy93aW4uY10KCUFkZGVkIGZ1bmN0aW9uIEdldERlc2t0b3BId25kKCkuCgoJKiBbaW5jbHVkZS94bWFsbG9jLmhdCglSZW1vdmVkIHRoZSAnI2lmZGVmIEhBVkVfU1RETElCX0gnIHN0cnVjdHVyZSwgc2luY2UgaXQgc2VlbWVkIHRvCiAJaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSAnY29uZmlndXJlJywgYW5kIHdhcyBjYXVzaW5nIHJlZGVmaW5pdGlvbgogCXdhcm5pbmdzLgoKVHVlIEZlYiAyNyAxOTozMToxMSAxOTk2ICBBbGJyZWNodCBLbGVpbmUgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbd2luZG93cy93aW5wb3MuY10gCglBZGRlZCBSRFdfQUxMQ0hJTERSRU4gZmxhZyBpbiBTZXRXaW5kb3dQb3MgKGhhbmRsaW5nIFNXUF9GUkFNRUNIQU5HRUQpCgl0byBmb3JjZSBhIHJlcGFpbnQgd2hlbiBzZXR0aW5nIG1lbnUgYmFycyB3aXRoIGRpZmZlcmVudCByb3dzLgoKU3VuIEZlYiAyNSAyMToxNTowMCAxOTk2IEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3Mvc3lzY29sb3JzLmNdIFtjb250cm9scy9zY3JvbGwuY10KCUZpeGVkIERyYXdGb2N1c1JlY3QgcGVuIGFuZCBTQ1JPTExfVEhVTUIgcGFpbnRpbmcuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBGZWIgMjQgMTY6MTc6MDUgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbZmlsZXMvcHJvZmlsZS5jXQoJQWRkZWQgXHIgd2hlbiB3cml0aW5nIHByb2ZpbGUgZmlsZXMsIGZvciBET1MgY29tcGF0aWJpbGl0eS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglGaXhlZCBidWcgaW4gR2xvYmFsUmVBbGxvYygpIHRoYXQgY2F1c2VkIGEgZGlzY2FyZGVkIGJsb2NrIG5vdCB0bwogCWJlIHJlYWxsb2NhdGVkIGlmIGl0cyBzaXplIHdhcyBub3QgY2hhbmdlZC4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCUF2b2lkIHNldHRpbmcgYSB2YWxpZCBMRFQgZW50cnkgd2l0aCBiYXNlIGFuZCBsaW1pdCBzZXQgdG8gMCwgYXMKIAl0aGlzIGNhdXNlcyB0aGUga2VybmVsIHRvIGNsZWFyIHRoZSBlbnRyeS4gVGhpcyBmaXhlcyBhIGNyYXNoIHdoZW4KIAlleGl0aW5nIFdpbmRvd3MgcHJvZ3JhbSBtYW5hZ2VyLgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCVJlbW92ZWQgY2FsbCB0byBjcmVhdCgpIGluc3RlYWQgb2YgX2xjcmVhdCgpIGZvciBXSU5FTElCLgoKRnJpIEZlYiAyMyAwMDozNTo1NCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHRkZ3NhbmRmQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXQoJR2V0VGV4dEV4dGVudFBvaW50QSBub3cgaGFzIHdpbjMyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLgoKCSogW2luY2x1ZGUvc3RydWN0MzIuaF0KCURlZmluZSBuZXcgc3RydWN0dXJlIHRhZ1NJWkUzMiBhbmQgdHlwZWRlZiBTSVpFMzIgdG8gaXQuCglEZWZpbmUgcHJvdG90eXBlIGZvciBmdW5jdGlvbiBQQVJBTTMyX1NJWkUxNnRvMzIKCgkqIFt3aW4zMi9wYXJhbTMyLmNdCglOZXcgZnVuY3Rpb25zIFBBUkFNMzJfU0laRTE2dG8zMiBhbmQgV0lOMzJfR2V0VGV4dEV4dGVudFBvaW50QQoKCSogW3dpbjMyL21lbW9yeS5jXQoJQWRkZWQgbWlzc2luZyBmaWxlIHBvaW50ZXIgcGFyYW1ldGVyIHRvIGZwcmludGYuCgpUaHUgRmViIDIyIDAxOjE0OjIxIDE5OTYgIEVyaWMgV2FybmtlIDxldzIxOTNAY3NjLmFsYmFueS5lZHU+CgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUFkZGVkIG1vcmUgZmFtaWxpYXIgaWNvbiBhY3Rpdml0eSwgaWUgc2luZ2xlIGNsaWNrIGJyaW5ncyB1cAogCXN5c3RlbSBtZW51LgoKV2VkIEZlYiAyMSAxMzowNzowNCAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KCgkqIFtjb250cm9scy9tZW51LmNdCglBZGRlZCBjYWxscyB0byBIaWRlQ2FyZXQoKSBhbmQgU2hvd0NhcmV0KCkgZnJvbSB3aXRoaW4KIAlUcmFja1BvcHVwTWVudSgpLCBNRU5VX1RyYWNrTW91c2VNZW51QmFyKCkgYW5kCiAJTUVOVV9UcmFja0tiZE1lbnVCYXIoKS4gIEFyZSB0aGVyZSBhbnkgbW9yZSBwbGFjZXMgd2hlcmUgdGhpcwogCXNob3VsZCBiZSBkb25lPwoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJRml4ZWQgYSBGSVhNRSBpbiBTVEFUSUNfU2V0SWNvbigpLCB3aGljaCBub3cgcmV0dXJucyBhIGhhbmRsZSB0bwogCXRoZSBwcmV2aW91cyBpY29uLiAgQWRkZWQgYSBuZXcgRklYTUUgYXQgdGhlIHBvaW50IHdoZXJlCiAJV01fU0VUVEVYVCBpcyBoYW5kbGVkIGZvciBhIFNTX0lDT04gc3RhdGljIGNvbnRyb2wuCgoJKiBbbWlzYy9jb21tZGxnLmNdCglJbXBsZW1lbnRlZCBGaW5kVGV4dCgpIGFuZCBSZXBsYWNlVGV4dCgpCglTdGlsbCBtaXNzaW5nIDogVGVtcGxhdGVzIGFuZCBIb29rcyBoYW5kbGluZyAvIGVycm9yIGNoZWNraW5nCgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Fbi5jXQoJUmVkZXNpZ25lZCBGSU5EX1RFWFQgYW5kIFJFUExBQ0VfVEVYVCBkaWFsb2dzLCBzbyB0aGV5IG5vdyB3b3JrLgoJTGFuZ3VhZ2VzIG90aGVyIHRoYW4gRW4gc2hvdWxkIHVwZGF0ZSB0aGVzZSB0b28sIHRob3VnaCwgYXMgd2VsbAogCWFzIHJlZGltZW5zaW9uIHRoZSBjb250cm9scyBiZWNhdXNlIHNvbWUgb2YgdGhlIHRleHQgZG9lc24ndCBmaXQuCiAgCUNyZWF0ZWQgZmlsZSByZXNvdXJjZXMvVE9ETyB0byBleHBsYWluIHRoaXMuCgoJKiBbd2luZG93cy9jYXJldC5jXQoJUmUtd3JpdHRlbi4gIEl0IG5vdyB1c2VzIHRoZSBjb3JyZWN0IFIyX1hPUlBFTi4gIEl0IHJlc2V0cyB0aGUKIAlibGluayB0aW1lciBvbiBTZXRDYXJldFBvcygpLiAgSXQgZG9lcyBpdHMgb3duIGhpZGUvc2hvdyBzY2hlbWUKIAl3aGVuIFNldENhcmV0UG9zKCkgaXMgY2FsbGVkIChzaG91bGQgYmUgZmFzdGVyKS4KCk1vbiBGZWIgMTkgMjE6NTA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTWlzY2VsbGFuZW91cyBjaGFuZ2VzIGZvciBiZXR0ZXIgTEJTX0VYVEVOREVEU0VMIHN1cHBvcnQuCglSZW1vdmVkIHNldmVyYWwgc3VwZXJmbHVvdXMgcmVkcmF3YWxzIG9mIGl0ZW0gbGlzdC4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVdNX0dFVERMR0NPREUgcmV0dXJuIHZhbHVlLgoKCSogW3dpbmRvd3Mvd2luLmNdCglGbGFzaFdpbmRvdyBmdW5jdGlvbi4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdIFt3aW5kb3dzL3Njcm9sbC5jXQoJQWRkZWQgSGlkZUNhcmV0L1Nob3dDYXJldCBjYWxscy4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUFkZGVkIEdldENoYXJBQkNXaWR0aHMgc3R1Yi4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCSIjZGVmaW5lInMgbmVlZGVkIGZvciBjaGFuZ2VzIG1lbnRpb25lZCBhYm92ZS4KCk1vbiBGZWIgMTkgMjA6MTI6MDMgMTk5NiAgSGFucyBkZSBHcmFhZmYgIDxIYW5zLmRlR3JhYWZmQHR3aTcyLnR3aS50dWRlbGZ0Lm5sPgoKCSogW2luY2x1ZGUvd2luc29jay5oXQoJQ2hhbmdlIG9yZGVyIG9mIGluY2x1ZGVzIHRvIGdldCBpbl9hZGRyIHN0cnVjdCBkZWZpbmVkIGluIHRpbWUuCgkoTm90ZTogTGludXggMS4zLjY2LCBsaWJjIDUuMi4xOCkKCgkqIFttaXNjL21haW4uY10gW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWlzY2VtdS9pbnQyZi5jXQoJQ2hhbmdlZCB0aGUgLWVuaGFuY2VkIG9wdGlvbiBpbnRvIGEgLW1vZGUgb3B0aW9uLCB3aGljaCBjYW4gYmUKCWVpdGhlciAnc3RhbmRhcmQnIG9yICdlbmhhbmNlZCcuICdlbmhhbmNlZCcgaXMgdGhlIGRlZmF1bHQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBGZWIgMTggMTY6MzU6NTQgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvZGVza3RvcC5jXQoJTG9vayBmb3IgdGhlIHdhbGxwYXBlciBmaWxlIGluIHRoZSBXaW5kb3dzIGRpcmVjdG9yeS4KCgkqIFtjb250cm9scy9tZW51LmNdCglGaXhlZCBzd2FwcGVkIHBhcmFtZXRlcnMgaW4gU2V0TWVudUl0ZW1CaXRtYXBzKCkuCglDcmVhdGUgYSBzZXBhcmF0b3IgaW4gTUVOVV9TZXRJdGVtRGF0YSgpIHdoZW4gdGhlIHN0cmluZyBpcyBOVUxMLgoKCSogW2ZpbGUvZG9zZnMuY10KCURPU0ZTX0ZpbmROZXh0OiBkb24ndCByZXR1cm4gJy4nIGFuZCAnLi4nIGluIGEgZHJpdmUgcm9vdCBkaXIuCgoJKiBbZmlsZXMvZmlsZS5jXQoJQWRkZWQgYSBET1NfRklMRSBzdHJ1Y3R1cmUgdG8gc3RvcmUgcGVyLWZpbGUgaW5mb3JtYXRpb24gKG5vdAoJcmVhbGx5IHVzZWQgeWV0KS4KCUZpeGVkIF9scmVhZCBhbmQgX2hyZWFkIHRvIGNoZWNrIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgYmVmb3JlCgljYWxsaW5nIFVuaXggcmVhZCgpIHRvIGF2b2lkIEVGQVVMVCBlcnJvci4KCgkqIFttaXNjL2V4ZWMuY10KCVJldHVybiBUUlVFIGluIFdpbkhlbHAoKSBmb3IgSEVMUF9RVUlUIHRvIHF1aWV0IE5vdGVwYWQgb24gZXhpdC4KCgkqIFttaXNjZW11L2luc3RyLmNdCglDYWxsIERPU01FTV9BbGFybSgpIGluIElOU1RSX1JlcGxhY2VTZWxlY3RvcigpLiBUaGlzIHNob3VsZCBmaXgKIAlwcm9ncmFtcyB0aGF0IHBvbGwgdGhlIEJJT1MgY291bnRlciwgcHJvdmlkZWQgdGhleSByZWxvYWQgdGhlCiAJc2VsZWN0b3Igb24gZXZlcnkgcmVhZC4KCgkqIFttaXNjZW11L2ludDIxLmNdCglSZS1pbXBsZW1lbnRlZCBGaW5kRmlyc3QvRmluZE5leHQgZm9yIEZDQiBjYWxscy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3Mvd2lucG9zLmNdCglNZXJnZWQgTVNHX0dldFdpbmRvd0ZvckV2ZW50KCkgYW5kIFdJTlBPU19XaW5kb3dGcm9tUG9pbnQoKS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy93aW4uY10gW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgYSBwZXItd2luZG93IFdJTl9NQU5BR0VEIGZsYWc7IG9ubHkgd2luZG93cyB0aGF0IGhhdmUgYQoJZGlhbG9nIGZyYW1lIG9yIGEgc2l6aW5nIGJvcmRlciBhcmUgbWFuYWdlZC4KClNhdCBGZWIgMTcgMTg6MjU6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0ZGdzYW5kZkBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dCglBZGRlZCAtZyBmbGFnIHRvIGNvbXBpbGF0aW9uIG9mIC5jIGZpbGVzIGdlbmVyYXRlZCBmcm9tICozMi5zcGVjLgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXQoJTnVtZXJvdXMgYWRkaXRpb25hbCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQuCgoJKiBpZjE2MzIvdXNlcjMyLnNwZWNdCgl3c3ByaW50ZkEgbWFwcyB0byB2c3ByaW50ZiBub3Qgd3NwcmludGYKCU51bWVyb3VzIGFkZGl0aW9uYWwgZnVuY3Rpb25zIGltcGxlbWVudGVkLgoKCSogW2luY2x1ZGUvZ2RpLmhdIFtvYmplY3RzL2dkaW9iai5jXQoJTmV3ICNkZWZpbmUgTUFHSUNfRE9OVENBUkUgYWRkZWQuIFRoaXMgaXMgdXNlZCBpbgoJR0RJX0dldE9ialB0ciB0byBlbmFibGUgZ2V0dGluZyBhIHBvaW50ZXIgdG8gYSBHREkgb2JqZWN0IG9mCgl1bmtub3cgdHlwZS4KCgkqIFt3aW4zMi9nZGkzMi5jXQoJTmV3IGZpbGUuCgoJKiBbd2luMzIvcGFyYW0zMi5jXQoJV0lOMzJfTW92ZVRvRXgoKSAtIGhhbmRsZSBOVUxMIHBvaW50ZXIgYXJndW1lbnQuCgoJKiBbd2luMzIvdXNlcjMyLmNdCglVU0VSMzJfSW52YWxpZGF0ZVJlY3QgLSBoYW5kbGUgcGFzc2luZyBvZiBhIE5VTEwgcG9pbnRlci4KCVVTRVIzMl9TZXRUaW1lciAtIE5ldyBmdW5jdGlvbi4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY10KCUZpeGVkIERJUl9Jbml0KCkgKG9mZiBieSBvbmUgaW4gYWxsb2NhdGlvbiBvZiBzcGFjZSBmb3IKCWVudmlyb25tZW50IHZhcmlhYmxlcykuCgoJKiBbZmlsZXMvZHJpdmUuY10KCUFkZGVkIDxzeXMvdHlwZXMuaD4gdG8gI2luY2x1ZGVzIChwcmVyZXF1aXNpdGUgZm9yIDxzeXMvc3RhdC5oPgoJb24gRnJlZUJTRCkuCgpGcmkgRmViIDE2IDEwOjI2OjU2IDE5OTYgIEFuZHJlYXMgS2lyc2NoYmF1bSA8YW5rQHJiZy5pbmZvcm1hdGlrLnRoLWRhcm1zdGFkdC5kZT4KCgkqIFtjb250cm9scy9tZW51LmNdCglNZW1vcnkgbGVhayBwbHVnZ2VkLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUVyYXNlIHNwYWNlIHdpdGggZnVuY3Rpb24gRXh0VGV4dE91dCgpLiBUaGlzIGVsaW1pbmF0ZXMgdGhlIHVzZSBvZgogCXhtYWxsb2MoKS4gIE1lbW9yeSBsZWFrIGluIEVESVRfV3JpdGVUZXh0IHBsdWdnZWQuCgoJKiBbZGVidWdnZXIvZGJfZGlzYXNtLmNdCglPcGVyYW5kIGZvciBzY2FzIG5vdyBpcyBkaS4KCgkqIFtmaWxlcy9wcm9maWxlLmNdCglQUk9GSUxFX0dldFNlY3Rpb24gd2FzIGNvcHlpbmcgdG9vIG11Y2ggZGF0YS4KCVBST0ZJTEVfR2V0U2VjdGlvbiBub3cgcmV0dXJucyB0aGUgY29ycmVjdCB2YWx1ZS4gSXQgd2FzIHJldHVybmluZwogCXRoZSBudW1iZXIgb2YgdW51c2VkIGluc3RlYWQgb2YgdXNlZCBieXRlcy4KCgkqIFtvYmplY3RzL2RjLmNdCglDb3JyZWN0ZWQgdHdvIHR5cG9zIGluIGNvbW1lbnRzLgoKCSogW29iamVjdHMvZm9udC5jXQoJRk9OVF9NYXRjaEZvbnQgZGlkbid0IHJldHVybiBpZiBpdCBjb3VsZG4ndCBmaW5kIGFueSBmb250LgoKCSogW29iamVjdHMvb2VtYml0bWFwLmNdCglGcmVlIG9iamVjdCBvbmx5IGlmIGl0IGhhcyBiZWVuIGFsbG9jYXRlZC4KCgkqIFt3aW5kb3dzL3Njcm9sbC5jXQoJTWVtb3J5IGxlYWsgaW4gU2Nyb2xsREMgcGx1Z2dlZC4KClR1ZSBGZWIgMTMgMTE6MTc6MDAgMTk5NiBXaWxsaWFtIE1hZ3JvICA8d21hZ3JvQHRjLmNvcm5lbGwuZWR1PgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUltcGxlbWVudGVkIEVTX05PSElERVNFTCBzdHlsZSwgc2hpZnQrY2xpY2sgc2VsZWN0aW9uLAogCXNoaWZ0K3thcnJvdyxob21lLGVuZCxwZ3VwLHBnZG59IHNlbGVjdGlvbi4gIE9wdGltaXplZAoJKGRlKXNlbGVjdGlvbiBkcmF3aW5nLiAgQ2hhbmdlZCBzZWxlY3Rpb24gZHJhd2luZyB0byB1c2UgY29ycmVjdAogCXN5c3RlbSBjb2xvcnMgaW5zdGVhZCBvZiBpbnZlcnRpbmcuICBGaXhlZCBkZWxldGluZyBvciBiYWNrc3BhY2luZwogCWFjcm9zcyBhICdcclxuJyBlbmQgb2YgbGluZSBwYWlyLiAgU2VsZWN0aW9uIG5vdyBhbmNob3JzCiAJY29ycmVjdGx5LiBGaXhlZCB0ZXh0IGxlYWtpbmcgYW5kIGV4dHJhIGdhcmJhZ2UgcHJvYmxlbSBidWcKIAl1bmNvdmVyZWQgYnkgY2hhbmdlIGluIGNsYXNzIHN0eWxlIGluIHdpbmU5NjAxMzEuCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJQ2xhc3MgZmxhZ3Mgbm93IG1hdGNoIHRob3NlIG9mIFdpbmRvd3MuCgpNb24gRmViIDEyIDIxOjI4OjE5IDE5OTYgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJV0lER0VUU19Jbml0OiBSRUxBWTMyX0dldEVudHJ5UG9pbnQgZG9lcyBub3QgdGFrZSBhIHN0cmluZyBhbnltb3JlLgoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl1baWYxNjMyL3JlbGF5MzIuY11baW5jbHVkZS9yZWxheTMyLmhdCgljb21jdGwzMi5zcGVjIG9sZTMyLnNwZWMgd2luc3Bvb2wuc3BlYzogbmV3IGZpbGVzLgoJUkVMQVkzMl9Jbml0OiBjYWxsIGluaXRpYWxpemF0aW9uIG9mIG5ldyBETExzLgoJUkVMQVkzMl9HZXRFbnRyeVBvaW50OiBleHBlY3RzIFdJTjMyX2J1aWx0aW4qIG5vdy4KCVJFTEFZMzJfTWFrZUZha2VNb2R1bGU6IG5ldyBmdW5jdGlvbi4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY11baWYxNjMyL2tlcm5lbDMyLnNwZWNdW2lmMTYzMi91c2VyMzIuc3BlY10KCUFkZGVkIFdpbjk1IGZ1bmN0aW9ucy4gT3JkaW5hbHMgbm93IGRpZmZlciBmcm9tIGJvdGggTlQgYW5kIFdpbjk1CglIZWFwQ3JlYXRlLCBDcmVhdGVEaWFsb2dJbmRpcmVjdFBhcmFtQSwgQ3JlYXRlRGlhbG9nSW5kaXJlY3RQYXJhbVcsCglDcmVhdGVEaWFsb2dQYXJhbUEsIENyZWF0ZURpYWxvZ1BhcmFtVywgRGlhbG9nQm94SW5kaXJlY3RQYXJhbUEKCURpYWxvZ0JveEluZGlyZWN0UGFyYW1XLCBEaWFsb2dCb3hQYXJhbUEsIERpYWxvZ0JveFBhcmFtVzoKCW5ldyByZWxheXMuCgoJKiBbaWYxNjMyL3NoZWxsMzIuc3BlY10KCXNoZWxsMzIuc3BlYzogcmVudW1iZXJlZCBhbGwgZnVuY3Rpb25zIHRvIHRha2UgaW50byBhY2NvdW50IG9yZGluYWxzLgoJVGhlc2Ugc2VlbSB0byBiZSBpZGVudGljYWwgYmV0d2VlbiBOVCBhbmQgV2luOTUuCgoJKiBbaW5jbHVkZS9kaWFsb2cuaF1bd2luZG93cy9kaWFsb2cuY10KCXhCYXNlVW5pdCx5QmFzZVVuaXQsRElBTE9HX0RvRGlhbG9nQm94OiBtYWRlIG5vbi1zdGF0aWMuCgoJKiBbaW5jbHVkZS9oYW5kbGUzMi5oXQoJTmV3IGhhbmRsZSB0eXBlcyBWUkFOR0UsIEhFQVAsIEhFQVBJVEVNLgoKCSogW2luY2x1ZGUvcGVfaW1hZ2UuaF1bbG9hZGVyL3BlX2ltYWdlLmNdCglzdHJ1Y3Qgd19maWxlczogbmV3IGZpZWxkIGJ1aWx0aW4uCglQRV9GaW5kRXhwb3J0ZWRGdW5jdGlvbjogc3VwcG9ydCBvcmRpbmFscy4KCVBFX0dldFByb2NBZGRyZXNzOiBjYWxsIFJFTEFZMzJfR2V0RW50cnlQb2ludCBmb3IgYnVpbHRpbnMuCglmaXh1cF9pbXBvcnRzOiBzdXBwb3J0IG9yZGluYWxzLgoJUEVfTG9hZEltYWdlOiBwcmVmZXIgZGlyZWN0b3JpZXMgb3ZlciBzZWdtZW50cy4KCgkqIFtpbmNsdWRlL3Jlc291cmNlLmhdW3dpbjMyL3Jlc291cmNlLmNdCglGaW5kUmVzb3VyY2UzMjogY2hhbmdlZCBwYXJhbWV0ZXIgZnJvbSBMUENUU1RSIHRvIExQQ1dTVFIKCQljaGVjayBMQU5HX05FVVRSQUwgaWYgTEFOR19FTkdMSVNIIGZhaWxzLgoJTG9hZEFjY2VsZXJhdG9yc1csU2l6ZW9mUmVzb3VyY2UzMixBY2Nlc3NSZXNvdXJjZTMyOiAKCQlkaXNhYmxlZCBiZWNhdXNlIGl0J3MgYnJva2VuLgoJQ2FzdGVkIHRvIGFuZCBmcm9tIExQV1NUUiBhdCB2YXJpb3VzIHBsYWNlcy4KCgkqIFtpbmNsdWRlL3N0cmluZzMyLmhdW3dpbjMyL3N0cmluZzMyLmNdCglDaGFuZ2VkIHByb3RvdHlwZXMgdG8gdGFrZSBjb25zdCBhcmd1bWVudHMgd2hlcmUgYXBwcm9wcmlhdGUuCgoJKiBbaW5jbHVkZS9zdHJ1Y3QzMi5oXQoJTmV3IHN0cnVjdHVyZXMgRExHVEVNUExBVEUzMiwgRExHSVRFTVRFTVBMQVRFMzIuCgoJKiBbdG9vbHMvYnVpbGQuY10KCUJ1aWxkU3BlYzMyRmlsZXM6IGdlbmVyYXRlIEJhc2UgdmFsdWUgaW50byBjb2RlLCBnZW5lcmF0ZSBjYWxsIHRvCglSRUxBWTMyX01ha2VGYWtlTW9kdWxlLgoJCgkqIFt3aW4zMi9oZWFwLmNdCglUaGlzIGlzIHN0aWxsIG5vdCBmaW5pc2hlZCBhbmQgbmVlZHMgcmV3b3JrLgoJSGVhcEFsbG9jOiByZW5hbWVkIHRvIFNJTVBMRV9IZWFwQWxsb2MsIGltcGxlbWVudGVkIEhlYXBBbGxvYy4KCUhlYXBDcmVhdGU6IGltcGxlbWVudGVkIG9uIHRvcCBvZiBWaXJ0dWFsQWxsb2MsIHdoaWNoIGRvZXMgbm90IHdvcmsgeWV0CglIZWFwRGVzdHJveSwgSEVBUF9Hcm93SGVhcCwgSGVhcEZyZWU6IG5ldyBmdW5jdGlvbnMuCgoJKiBbd2luMzIvbWVtb3J5LmNdCglTdXBwb3J0IGZvciBWUkFOR0VfT0JKRUNULiBUaGlzIGlzIG5vdCB5ZXQgY2FsbGVkIGZyb20gYW55IHBsYWNlLAoJYW5kIG5lZWRzIG1vcmUgcGxhdGZvcm0gc3BlY2lmaWMgc3VwcG9ydAoJTUVNT1JZX0ZpbmRWcmFuZ2UsIE1FTU9SWV9Jc1ZyYW5nZUZyZWUsIE1FTU9SWV9JbnNlcnRWcmFuZ2UsCglNRU1PUllfQWxsb2NWcmFuZ2UsIE1FTU9SWV9SZWxlYXNlVnJhbmdlOiBuZXcgZnVuY3Rpb25zLgoKCSogW3dpbjMyL3VzZXIzMi5jXQoJV0lOMzJfQ3JlYXRlV2luZG93RXhBOiBkb24ndCBHbG9iYWxBbGxvYyBmb3IgaW50ZWdlciBjbGFzcyBhbmQgd2luZG93CgluYW1lcywgYXMgaW4gZGlhbG9ncy4KCUltcGxlbWVudGVkIGRpYWxvZyBmdW5jdGlvbnMgKHNlZSB1c2VyMzIuc3BlYykuCgoJKiBbd2luZG93cy9jYXJldC5jXQoJQ0FSRVRfSW5pdGlhbGl6ZTogY2FsbCBSRUxBWTMyX0dldEJ1aWx0aW5ETEwuCgpNb24gRmViIDEyIDE4OjUyOjQwIDE5OTYgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJUmVtb3ZlZCBjb21tZW50ZWQgb3V0ICNpZmRlZnMgZm9yIFdJTkVMSUIuCgoJKiBbdG9vbHMvbWFrZWh0bWwucGxdCglQdXQgaW4gZXJyb3IgY2hlY2tpbmcgd2hlbiB0cnlpbmcgdG8gb3BlbiBhIGZpbGUuCgoJKiBbbGlidGVzdC9NYWtlZmlsZS5pbl0gW2xpYnRlc3QvbmV3LmNdIFtsaWJ0ZXN0L2hlbGxvNC5jXQoJQWRkZWQgdHdvIG5ldyB0YXJnZXRzOiBoZWxsbzQgYW5kIG5ldy4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIGRlZmluaXRpb24gb2YgREVWTU9ERSBzdHJ1Y3R1cmUsIGFsdGhvdWdoIGl0J3Mgbm90IHlldCB1c2VkLgogIAlNb2RpZmllZCB2YXJpb3VzIEFQSSBmdW5jdGlvbnMgZnJvbSBDcmVhdGVEQygpIHRvIEVzY2FwZSgpLCBpbgogCW9yZGVyIHRvIG1ha2UgdGhlbSBtb3JlIGNvbXBsaWFudCB3aXRoIHRoZSBzdHJpY3QgQVBJIGRlZmluaXRpb25zLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCUFkZGVkICd0eXBlZGVmIGNoYXIgVENIQVInLiAgSXQgcHJvYmFibHkgc2hvdWxkIGJlIGRlZmluZWQgYXMKCSdzaG9ydCcsIGJ1dCB0aGVuIHdlIHdvdWxkIGhhdmUgdG8gc3VwcG9ydCBzdWNoIGNoYXJhY3RlcnMuICBBbHNvIGRpZAoJJ3R5cGVkZWYgY29uc3QgVENIQVIqIExQQ1RTVFInIGFuZCAndHlwZWRlZiBUQ0hBUiogTFBUU1RSJy4KCUFsc28gZGVmaW5lZCBXTkRFTlVNUFJPQywgRk9OVEVOVU1QUk9DLCBHT0JKRU5VTVBST0MsIFBST1BFTlVNUFJPQwoJTUZFTlVNUFJPQywgYW5kIEhHRElPQkouCgpNb24gRmViICA1IDE2OjQyOjA3IDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtMS5sZWlkZW51bml2Lm5sPgoKCSogW21pc2MvY29tbWRsZy5jXQoJUGF0Y2hlZCBhIGJ1ZyB0aGF0IG9jY3VycmVkIGluIHRoZSBpbnRlcm5hbCBDT01NRExHIG1vZHVsZSBmb3IgdGhlCiAJRmlsZU9wZW4oKSwgRmlsZVNhdmUoKSBhbmQgRmlsZVNhdmVBcygpIGZ1bmN0aW9ucy4gIFRoZSBmaWxlLXR5cGUKIAljb21ib2JveCBpcyBub3cgaGFuZGxlZCBjb3JyZWN0bHkuCgpGcmkgRmViICAyIDIyOjUyOjU4IDE5OTYgIFJvbWFuIERvbGVqc2kgIDxyb21hbkBzb3JyeS52c2UuY3o+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Dei5yY10KCUFkZGVkIHN1cHBvcnQgZm9yIEN6ZWNoIFtDel0gbGFuZ3VhZ2UuCgpUaHUgRmViICAxIDAwOjM1OjA0IDE5OTYgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CgoJKiBbb2JqZWN0cy9mb250LmNdCglGT05UX21hdGNoZm9udCA6IGZvciBmaXhlZC1zcGFjaW5nIGZvbnRzLCBhbGxvdyAnYycgaWYgJ20nIGZhaWxzOwoJZm9yIHZhcmlhYmxlLXNwYWNpbmcgZm9udHMgOiBhbGxvdyAnKicgaWYgJ3AnIGZhaWxzOyBpZiBhc2tlZCBsZkhlaWdodAoJaXMgLTEsIGFzc3VtZSAwLgoJQ3JlYXRlRm9udEluZGlyZWN0IDogaWYgZm9udCBwYXJhbWV0ZXIgaXMgTlVMTCwgaXNzdWUgYW4gZXJyb3IgbWVzc2FnZS4KCUNyZWF0ZUZvbnQgOiBudWxsLXRlcm1pbmF0ZSBsZkZhY2VOYW1lLgoJUGFyc2VGb250UGFybXMgOiBkZWJ1ZyBjb2RlIHR1cm5lZCBvZmYgOiB0b28gdmVyYm9zZS4KCUluaXRGb250c0xpc3QgOiByZWNvZ25pemUgKi1jLSogZm9udHMgYXMgZml4ZWQtc3BhY2luZyBmb250cy4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglDb2xvclRvUGh5c2ljYWwgOiBhZG1pdCAweGZmLi4uLi4uIENPTE9SUkVGJ3MgYXMgMHgwMC4uLi4uLiBvbmVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIEphbiAzMSAxMDo1ODowMCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbY29uZmlndXJlLmluXQoJQWRkZWQgLS13aXRoLWRsbCBvcHRpb24gdG8gYnVpbGQgbGlid2luZS5zby4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglGaXhlZCBMaXN0Qm94RGlyZWN0b3J5KCksIERsZ0RpclNlbGVjdCgpIGFuZAoJRGxnRGlyTGlzdCgpLiBIb3BlZnVsbHkgdGhlaXIgYmVoYXZpb3IgaXMgY29ycmVjdCBub3cuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJVXNlIFNFR1BUUnMgaW4gQ2hhbmdlTWVudSgpLCBJbnNlcnRNZW51KCksIEFwcGVuZE1lbnUoKSBhbmQKIAlNb2RpZnlNZW51KCkgZm9yIHRoZSBpdGVtIGRhdGEsIHRvIGF2b2lkIGNvcnJ1cHRpbmcgdGhlIHBvaW50ZXIKIAlmb3Igb3duZXItZHJhd24gaXRlbXMuCgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglBdHRlbXB0IHRvIGxvYWQgT0VNIGljb25zIGZvciBTU19JQ09OIGNvbnRyb2xzLiBQcm9iYWJseSBub3QKCWVudGlyZWx5IGNvcnJlY3QuCglEb24ndCBjbGlwIHRoZSB0ZXh0IG91dHB1dC4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY10KCUFkZCB0ZW1wIGRpciBhbmQgV2luZG93cyBkaXIgdG8gZW52aXJvbm1lbnQuCgoJKiBbZmlsZXMvZG9zX2ZzLmNdCglGaXhlZCBhIGZldyBwYXRoIGhhbmRsaW5nIGJ1Z3MgaW4gRE9TRlNfR2V0VW5peEZpbGVOYW1lKCkuCglDYWNoZSBsYXN0IHVzZWQgZGlyZWN0b3J5IGluIERPU0ZTX0ZpbmROZXh0KCkgdG8gYXZvaWQgcXVhZHJhdGljCglzZWFyY2ggdGltZS4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJTmV3IGZvcm1hdCBmb3IgZHJpdmVzIGNvbmZpZ3VyYXRpb24gaW4gd2luZS5jb25mOyBhbGxvd3MKCXNwZWNpZnlpbmcgdGhlIHR5cGUsIGxhYmVsIGFuZCBzZXJpYWwgbnVtYmVyIG9mIGEgZHJpdmUuCgoJKiBbZmlsZXMvZmlsZS5jXQoJTmV3IGZ1bmN0aW9uIEZJTEVfT3BlblVuaXhGaWxlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBvcGVuIGEKCWRpcmVjdG9yeSBpbnN0ZWFkIG9mIGEgZmlsZS4KCUZpeGVkIERPU0ZTX0dldFVuaXhGaWxlTmFtZSgpIGNoZWNrX2xhc3QgZmxhZyBpbiBGSUxFX01ha2VEaXIoKS4KCgkqIFtmaWxlcy9wcm9maWxlLmNdCglSZXdyb3RlIHByb2ZpbGUgaGFuZGxpbmcuIFNob3VsZCBiZSBjbG9zZXIgdG8gV2luZG93cyBiZWhhdmlvciBub3cuCglOZXcgZnVuY3Rpb24gUFJPRklMRV9HZXRXaW5lSW5pU3RyaW5nKCkgdG8gZ2V0IGEgc3RyaW5nIGZyb20gd2luZS5jb25mLgoJU3VwcG9ydCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gd2luZS5jb25mLgoKCSogW2xvYWRlci90YXNrLmNdCglGaXhlZCB0aGUgb3JkZXIgb2YgZGVsZXRpb24gaW4gVEFTS19EZWxldGVUYXNrKCkgdG8gYXZvaWQgbWVtb3J5Cgljb3JydXB0aW9uLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUNyZWF0ZSBhIGRpc2NhcmRlZCBibG9jayBvbiBHbG9iYWxBbGxvYygpIGlmIHRoZSBzaXplIGlzIDA7IHRoYW5rcwoJdG8gSm9obiBIYXJ2ZXkgZm9yIG5vdGljaW5nIHRoaXMuCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglMT0NBTF9HZXRIZWFwOiBtYWtlIHN1cmUgdGhlIHBvaW50ZXIgaXMgdmFsaWQgYmVmb3JlIGNoZWNraW5nCgltYWdpYyBudW1iZXIuCgoJKiBbbWlzYy9tYWluLmNdCglNb3ZlZCBwcm9maWxlIGFuZCByZWdpc3RyeSBzYXZpbmcgdG8gRXhpdFdpbmRvd3MoKSwgc28gd2UgZG9uJ3QKCXRyeSB0byBzYXZlIHRoZW0gaW4gY2FzZSBvZiBhIGNyYXNoLgoKCSogW21pc2NlbXUvaW50MjEuY10KCUlOVDIxX0dldEZyZWVEaXNrU3BhY2U6IHRyeSB0byBjb21wdXRlIHRoZSBjbHVzdGVyIHNpemUgZnJvbSB0aGUKCWZpbGVzeXN0ZW0gc2l6ZSBpbnN0ZWFkIG9mIGhhcmQtY29kaW5nIGl0IHRvIDY0LgoJRml4ZWQgZnVuY3Rpb25zIDB4M2YgYW5kIDB4NDAgdG8gdXNlIF9ocmVhZCBhbmQgX2h3cml0ZSB0byBhbGxvdwoJcmVhZGluZyBvciB3cml0aW5nIDY1NTM1IGJ5dGVzICh0aGFua3MgdG8gQnJ1Y2UgTWlsbmVyIGZvciB0aGlzCW9uZSkuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglGaXhlZCBidWcgaW4gbGlua2VkLWxpc3QgaGFuZGxpbmcgaW4gTVNHX0RlbGV0ZVF1ZXVlKCkuCglTaW1wbGlmaWVkIFNldE1lc3NhZ2VRdWV1ZSgpLgoKCSogW3dpbmUuaW5pXSBbd2luZS5tYW5dCglVcGRhdGVkIGZvciBuZXcgZHJpdmVzIGNvbmZpZ3VyYXRpb24gZm9ybWF0LgoKVHVlIEphbiAzMCAxMToyNDo0NiAxOTk2ICBXaWxsaWFtIE1hZ3JvICA8d21hZ3JvQHRjLmNvcm5lbGwuZWR1PgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUltcGxlbWVudGVkIEVTX1BBU1NXT1JEIHN0eWxlLCBFTV9TRVRQQVNTV09SRENIQVIgYW5kCiAJRU1fR0VUUEFTU1dPUkRDSEFSIG1lc3NhZ2VzLgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCUFkanVzdGVkIGNsYXNzIGNyZWF0aW9uIGZsYWdzIHRvIGJldHRlciBtYXRjaCB2YWx1ZXMgV2luZG93cyB1c2VzLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJRml4ZWQgRVNfTk9ISURFU0VMIHR5cG8uCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglBZGRlZCBkZXRlY3Rpb24gZm9yIHplcm8gb2Zmc2V0IGluIFJBRERSIGZpeHVwcy4gUXVpY2tlbgoJd2FzIGluIGFuIGluZmluaXRlIGxvb3AgaGVyZS4KCk1vbiBKYW4gMjkgMjA6MTI6MjIgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCUJ1Z2ZpeDogcmFuZ2UgZXJyb3IgaW4gbW9udGggdmFsdWUgKDAuLjExIHNldCB0byAxLi4xMikuCgoJKiBbd2luZG93cy9jYXJldC5jXQoJQ2hhbmdlZCBST1AyLW1vZGUgdG8gUjJfTk9UWE9SUEVOIGluIENBUkVUX0NhbGxiYWNrIGZvciBwdWxzZWQKIAlhcHBlYXJhbmNlIG9mIHRoZSBjYXJldC4KCgkqIFt3aW5kb3dzL21kaS5jXSBbaW5jbHVkZS9tZGkuaF0KCUNoYW5nZWQgTURJVGlsZSgpOiBhZGRlZCBhIG5ldyBwYXJhbWV0ZXIgV09SRCB3UGFyYW0gZm9yCiAJV01fTURJVElMRSBzZWNvbmQgdGlsaW5nIG1ldGhvZCAoTURJVElMRV9IT1JJWk9OVEFMIGluIHdQYXJhbSkgYXMKIAl1c2VkIGluIFdpbjMuMQoKU3VuIEphbiAyOCAxNDoyMDowMCAxOTk2ICBDYW1lcm9uIEhlaWRlICA8aGVpZGVAZWUudWFsYmVydGEuY2E+CgoJKiBbbWlzY2VtdS9pbnQyZi5jXQoJQWRkZWQgYSBzbWFsbCBiaXQgb2YgTVNDREVYIGVtdWxhdGlvbi4KCgkqIFt3aW5kb3dzL2FsaWFzLmNdCglBTElBU19SZWdpc3RlckFsaWFzIHdhcyByZXR1cm5pbmcgdGhlIGhhc2ggdmFsdWUgd2hlbiBpdCBzaG91bGQKIAloYXZlIGJlZW4gcmV0dXJuaW5nIHRoZSByZWNvcmQgbnVtYmVyLgoJClNhdCBKYW4gMjcgMTA6NTM6NTEgMTk5NiAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFtpbmNsdWRlL3NoZWxsLmhdIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglNb3ZlZCBkZWZpbml0aW9uIG9mIEhLRVkgYW5kIExQSEtFWSB0eXBlcyB0byBpbmNsdWRlL3dpbnR5cGVzLmguCglEZWNsYXJlZCBGT05URU5VTVBST0MgaW4gd2ludHlwZXMuaC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIGRlZmluaXRpb24gb2YgS0VSTklOR1BBSVIgYW5kIExQS0VSTklOR1BBSVIgdHlwZXMuICBBZGRlZAoJZGVjbGFyYXRpb25zIGZvciBDb3B5Q3Vyc29yKCksIENvcHlJY29uKCksIEVudW1Gb250RmFtaWxpZXMoKSwKCUV4dHJhY3RJY29uKCksIEZhdGFsQXBwRXhpdCgpLCBGaW5kRXhlY3V0YWJsZSgpLCBHZXRDbGlwQ3Vyc29yKCksCglHZXRLZXJuaW5nUGFpcnMoKSwgR2V0UXVldWVTdGF0dXMoKSwgR2V0UmFzdGVyaXplckNhcHMoKSwKCUlzR0RJT2JqZWN0KCksIElzTWVudSgpLCBJc1Rhc2soKSwgUmVnQ2xvc2VLZXkoKSwgUmVnQ3JlYXRlS2V5KCksCglSZWdEZWxldGVLZXkoKSwgUmVnRW51bUtleSgpLCBSZWdPcGVuS2V5KCksIFJlZ1F1ZXJ5VmFsdWUoKSwKCVJlZ1NldFZhbHVlKCksIFJlc2V0REMoKSwgU2hlbGxFeGVjdXRlKCksIFN5c3RlbVBhcmFtZXRlcnNJbmZvKCksCglhbmQgd3NwcmludGYoKS4KCgkqIFt0b29scy9tYWtlaHRtbC5wbF0gW2RvY3VtZW50YXRpb24vYXBpdy5pbmRleF0KCU5ldyBmaWxlcyB0aGF0IHNjYW4gd2luZG93cy5oLCBjb21tZGxnLmgsIGFuZCB0b29saGVscC5oIGFuZCBvdXRwdXQKCWFuIEhUTUwgc29ydGVkIGxpc3Qgd2l0aCBvcHRpb25hbCBsaW5rcyB0byB3d3cud2lsbG93cy5jb20gYW5kIGEKCXRhbGx5IG9mIHVuaW1wbGVtZW50ZWQgQVBJVyBmdW5jdGlvbnMuCgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCglBZGRlZCBXaW4zMiB2ZXJzaW9ucyBvZiBDb3B5SWNvbigpIGFuZCBDb3B5Q3Vyc29yKCkgZm9yIHVzZSBpbgoJbGlid2luZS4KCgkqIFt3aW4zMi9yZXNvdXJjZS5jXSBbd2luMzIvd2lucHJvY3MuY10KCUFkZGVkICcjaW5jbHVkZSAibGlicmVzLmgiJyBhbmQgZXhwbGljaXQgZGVjbGFyYXRpb25zIG9mIHdpbmRvd3MKCXByb2NzIGluIG9yZGVyIHRvIGF2b2lkIHdhcm5pbmdzLgoKCSogW3dpbmRvd3MvdXRpbGl0eS5jXQoJQWRkZWQgV2luMzIgdmVyc2lvbiBvZiBNdWxEaXYoKSBmb3IgbGlid2luZS4KCgkqIFsqLypdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUNoYW5nZWQgc2V2ZXJhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgdG8gY29tcGx5IG1vcmUgc3RyaWN0bHkgdG8KCXRoZSB3aW5kb3dzIEFQSSAod2l0aG91dCwgaG9wZWZ1bGx5LCBhbHRlcmluZyB0aGVpciBmdW5jdGlvbmFsaXR5KS4KCgkqIFtjb250cm9scy9tZW51LmNdCglNYWRlIHRoZSByZXR1cm4gdmFsdWUgb2YgQ2hlY2tNZW51SXRlbSBiZSB0aGUgcHJldmlvdXMgc3RhdGUgb2YKIAl0aGUgbWVudSBpdGVtIGlmIGl0IHdhcyBmb3VuZCwgb3RoZXJ3aXNlIC0xIGFzIHNwZWNpZmllZCBpbiB0aGUKIAlTREsuIFRoaXMgY29uZmxpY3RzIHdpdGggdGhlIEFQSVcgc3BlY2lmaWNhdGlvbiwgd2hpY2ggc2F5cyBpdAogCXNob3VsZCByZXR1cm4gVFJVRSBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgRkFMU0UuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBvYnNvbGV0ZSBXTV9TSVpFIG1lc3NhZ2Ugd1BhcmFtIG5hbWVzIGZvciBjb21wYXRpYmlsaXR5LgogIAlBZGRlZCBXaW5IZWxwKCkgY29tbWFuZCBjb25zdGFudHMsIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIG5vdCB5ZXQKIAlzdXBwb3J0ZWQuCgoJKiBbcmMvd2luZXJjLmNdCglUaWRpZWQgdXAgdHJhbnNmb3JtX2JpbmFyeV9maWxlKCkuICBJbiBhcmd1bWVudCBjaGVja2luZywgZmxhdHRlbmVkCglhbnkgaW52YWxpZCBjaGFyYWN0ZXJzIHNwZWNpZmllZCB3aXRoIHRoZSBwcmVmaXggYXJndW1lbnQuCgoJKiBbbGlicmFyeS9saWJyZXMuY10KCU1hZGUgRmluZFJlc291cmNlKCkgY2FzZS1pbnNlbnNpdGl2ZSB3aGVuIHBhcmFtZXRlciAnbmFtZScgaXMgYSBzdHJpbmcuCgpTYXQgSmFuIDI3IDAyOjMwIDE5OTYgIFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnRoLWRhcm1zdGFkdC5kZQoKCSogW2ZpbGVzL2RyaXZlLmNdCglJZiByb290ICIvIiBpcyBnaXZlbiBpbiB3aW5lLmNvbmYsIHVzZSBpdCBhcyBsYXN0IHJlc29ydC4KCgkqIFtmaWxlcy9maWxlLmNdCglSZXBvcnQgRVJfQWNjZXNzRGVuaWVkIGl0IGRpc2sgaXN0IG5vdCB3cml0YWJsZQoJTW9yZSBEZWJ1ZyBPdXRwdXQKCgkqIFttaXNjZW11L2ludDIxLmNdCglTcXVlZXplZCBzb21lIGJ1Z3MgaW4gRXh0ZW5kZWRPcGVuQ3JlYXRlRmlsZQoJCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJU29tZSB3aW5kb3dzIG1heSBub3QgYmUgbW92ZWQgb3IgcmVzaXplZC4gV2UgYXJlIG1pc3Npbmcgc29tZQoJc3RydWN0dXJlcyB0byBiZSBleGFjdCwgYnV0IHRoZSBhcHByb2FjaCBzaG91bGQgaGVscCBpbiBzb21lIGNhc2VzCglhbmQgbWFrZSB0aGluZ3Mgd29yc2UgaW4gbXVjaCBmZXdlci4KCkZyaSBKYW4gMjYgMTA6MjQ6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCWZpeHVwX2ltcG9ydHM6IEZpbmQgYnVpbHRpbnMgZm9yIEJvcmxhbmQgc3R5bGUgZW50cmllcywgdG9vCgpGcmkgSmFuIDI2IDEwOjI0OjAwIDE5OTYgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJTG9hZE1lbnU6IGJyYW5jaCB0byBXaW4zMiBmb3IgUEUgbW9kdWxlcwoKCSogW2lmMTYzMi9nZGkuc3BlY11baWYxNjMyL2tlcm5lbDMyLnNwZWNdW2lmMTYzMi91c2VyMzIuc3BlY10KCURlbGV0ZU9iamVjdCwgR2V0UGl4ZWwsIFNldFBpeGVsLFdyaXRlUHJpdmF0ZVByb2ZpbGVTdHJpbmdBLAoJV3JpdGVQcm9maWxlU3RyaW5nQSwgRW1wdHlDbGlwYm9hcmQsIEVuYWJsZU1lbnVJdGVtLCBFbmFibGVTY3JvbGxCYXIsCglFbmFibGVXaW5kb3csIEludmFsaWRhdGVSZWN0LCBTZXRXaW5kb3dUZXh0QSwgV2luSGVscEE6IG5ldyByZWxheXMKCURyYXdUZXh0QSwgTW92ZVRvRXgsIEdldENsaWVudFJlY3QsIEludmFsaWRhdGVSZWN0LCBMb2FkQml0bWFwQS9XLAoJTG9hZEFjY2VsZXJhdG9yc0EvVywgTG9hZE1lbnVbSW5kaXJlY3RdQS9XLCBMb2FkU3RyaW5nQS9XOiBjaGFuZ2VkCgl0byBjb252ZXJ0IHBhcmFtZXRlcnMgb3IgbmFtaW5nIGNvbnZlbnRpb24KCgkqIFtpbmNsdWRlL2tlcm5lbDMyLmhdW2luY2x1ZGUvd2ludHlwZXMuaF0KCW1vdmVkIFdDSEFSLCBkZWZpbmVkIExQV1NUUgoKCSogW2luY2x1ZGUvc3RyaW5nMzIuaF1bd2luMzIvc3RyaW5nMzIuY11baW5jbHVkZS9zdHJ1Y3QzMi5oXQoJTmV3IGZpbGVzCgoJKiBbbG9hZGVyL21vZHVsZS5oXQoJTG9hZE1vZHVsZTogZXhpdCBhZnRlciByZXR1cm5pbmcgZnJvbSBQRV9Mb2FkTW9kdWxlCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglteV93Y3N0b21iczogaXNhc2NpaSBkb2VzIG5vdCB3b3JrIG9uIExpbnV4IGZvciBVbmljb2RlCglQRV9Mb2FkSW1hZ2U6IEhhbmRsZSBkaXJlY3RvcmllcwoKCSogW21pc2MvdXNlcjMyLmNdCglVU0VSMzJfUkVDVDMydG8xNiwgVVNFUjMyX1JFQ1QxNnRvMzI6IG5ldyBmdW5jdGlvbnMKCWltcGxlbWVudGVkIG5ldyB1c2VyMzIgcmVsYXlzCgoJKiBbbWlzYy9uZXdmbnMuY10KCVdJTjMyX1dpbkhlbHBBOiBuZXcgZnVuY3Rpb24KCgkqIFt3aW4zMi9wYXJhbTMyLmNdCglOZXcgZmlsZQoKCSogW3dpbjMyL3Jlc291cmNlLmNdCglHZXRSZXNEaXJFbnRyeTogYWRkZWQgc3VwcG9ydCBmb3IgbmFtZWQgZW50cmllcwoJV0lOMzJfTG9hZEFjY2VsZXJhdG9yc1c6IGludm9rZSAqMzIgcmVzb3VyY2UgZnVuY3Rpb25zCglXSU4zMl9Mb2FkQml0bWFwQTogY29udmVydCBuYW1lIHRvIHVuaWNvZGUgaWYgYXBwcm9wcmlhdGUKCVdJTjMyX1BhcnNlTWVudTogbmV3IGZ1bmN0aW9uCglpbXBsZW1lbnRlZCBuZXcgcmVzb3VyY2UgZnVuY3Rpb25zIGZyb20gdXNlcjMyLnNwZWMKCldlZCBKYW4gMjQgMTg6MDk6MDAgMTk5NiBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KCUdldEljb25JZCgpIGFuZCBMb2FkSWNvbkhhbmRsZXIoKSBmdW5jdGlvbnMuCgoJKiBbd2luZG93cy9tZGkuY10KCUJldHRlciBtYXhpbWl6YXRpb24gc3VwcG9ydCwgVHJhbnNsYXRlTURJU3lzQWNjZWwoKSBmdW5jdGlvbiwgCgltaXNjIGltcHJvdmVtZW50cy4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJRml4IGZvciBXTV9XSU5ET1dQT1NDSEFOR0VEIG1lc3NhZ2UgaGFuZGxlci4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJUmV3cm90ZSBXaW5kb3dGcm9tUG9pbnQoKSBmdW5jdGlvbi4KClN1biBKYW4gMjEgMTk5NiAxNzowNTowOSAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBmYXVpMDEuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaW5jbHVkZS90b29saGVscC5oXSBbbWlzYy90b29saGVscC5jXQoJQWRkZWQgTm90aWZ5KFVuKVJlZ2lzdGVyLCBidXQgbm8gY2FsbGJhY2tzIHlldC4KCkZyaSBKYW4gMTkgMDE6NDM6MzcgMTk5NiBWaWN0b3IgU2NobmVpZGVyIDxyb290QHRhaWxvci5yb21hbi5vcmc+CgoJKiBbTWFrZWZpbGUuaW5dCglBZGRlZCB0YXJnZXQgZm9yIGxpYndpbmUuc28uMS4wLgoKCSogW2xpYnJhcnkvd2lubWFpbi5jXQoJRm9yIFdJTkVMSUJETEwsIF9XaW5NYWluIGp1c3QgcmV0dXJucyBoSW5zdGFuY2UgaW5zdGVhZCBvZiBjYWxsaW5nCglXaW5NYWluKCkuCgoJKiBbbWlzYy9tYWluLmNdCglGb3IgV0lORUxJQkRMTCwgcmVuYW1lZCBtYWluKCkgdG8gX3dpbmVfbWFpbigpIGZvciBjYWxsaW5nIGZyb20gdGhlCglzdHViIG1haW4gZnVuY3Rpb24uCgoJKiBbbGlicmFyeS93aW5lc3R1Yi5jXSAobmV3IGZpbGUpCglQcm92aWRlcyBhIHN0dWIgbWFpbigpIGZ1bmN0aW9uIGZvciB1c2luZyBsaWJ3aW5lLnNvLgoKVHVlIEphbiAxNiAxMTowNDozNCAxOTk2ICBBbmFuZCBLdW1yaWEgPGFrdW1yaWFAb3plbWFpbC5jb20uYXU+CgoJKiBbd2luc29ja2V0LmNdCglGaXggRVBFUk0gcHJvYmxlbS4KCgkqIFtnbG9iYWwuY10KCUF0dGVtcHQgdG8gZG8gc29tZSBzYW5pdHkgY2hlY2tpbmcgaW4gTWVtTWFuSW5mbygpLgoKCSogW0NoYW5nZWxvZ10KCUZpeCBjaGFuZ2Vsb2cgb3ZlcnNpZ2h0IGZvciBwcmV2aW91cyBlbnRyeS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gSmFuIDE0IDEzOjQ1OjIyIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFtjb25maWd1cmUuaW5dCglBZGRlZCBjaGVjayBmb3IgZ2NjIHN0cmVuZ3RoLXJlZHVjZSBidWcuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJQ2hhbmdlZCBMaXN0Qm94RGlyZWN0b3J5KCkgdG8gdXNlIHRoZSBuZXcgRE9TIGZpbGUgZnVuY3Rpb25zLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUZpeGVkIHBhcmFtZXRlcnMgZm9yIERlbGV0ZU1lbnUoKSBjYWxsIGluIENoYW5nZU1lbnUoKS4KCgkqIFtkZWJ1Z2dlci9zdGFjay5jXQoJQWxzbyBkaXNwbGF5IGN1cnJlbnQgZnJhbWUgaW4gYmFjay10cmFjZS4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY10gW2ZpbGVzL2Rvc19mcy5jXSBbZmlsZXMvZHJpdmUuY10gW2ZpbGVzL2ZpbGUuY10KCUNvbXBsZXRlIHJld3JpdGUgb2YgdGhlIERPUyBmaWxlIGhhbmRsaW5nLgoJSW1wbGVtZW50ZWQgcGVyLXRhc2sgZmlsZSBoYW5kbGVzLgoJUmVtb3ZlZCBkZWZhdWx0IFo6IGRyaXZlOyBuZWVkcyB0byBiZSBwdXQgZXhwbGljaXRlbHkgaW4gd2luZS5pbmkKCWlmIGRlc2lyZWQuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJRml4ZWQgZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gTG9hZE1vZHVsZSgpLgoKCSogW2xvYWRlci90YXNrLmNdCglJbml0aWFsaXNlIFBEQiBmaWxlIGhhbmRsZSB0YWJsZSBpbiBUQVNLX0NyZWF0ZVRhc2soKS4KCUNsb3NlIGZpbGUgaGFuZGxlcyBvbiB0YXNrIHRlcm1pbmF0aW9uLgoJSW1wbGVtZW50ZWQgU2V0RXJyb3JNb2RlKCkuCgoJKiBbbWlzYy9uZXR3b3JrLmNdCglGaXhlZCBXTmV0R2V0Q29ubmVjdGlvbigpIHRvIHVzZSBHZXREcml2ZVR5cGUoKS4KCgkqIFttaXNjL3htYWxsb2MuY10KCUFkZGVkIGZ1bmN0aW9uIHhzdHJkdXAoKS4KCgkqIFttaXNjZW11L2ludDIxLmNdCglNYW55IGNoYW5nZXMgZm9yIG5ldyBET1MgZmlsZSBmdW5jdGlvbnMuCgoJKiBbbWlzY2VtdS9pbnRlcnJ1cHRzLmNdCglNb3ZlZCBET1NfR2V0RXF1aXBtZW50KCkgZnVuY3Rpb24gaW50byBJTlRfSW50MTFIYW5kbGVyKCkuCgoJKiBbd2luZG93cy93aW4uY10KCUJ1ZyBmaXg6IGNyZWF0ZSBzeXN0ZW0gbWVudSBiZWZvcmUgc2VuZGluZyBXTV9OQ0NSRUFURS4KCgkqIFsqLyouY10KCVJlcGxhY2VkIHN0cmNhc2VjbXAgYW5kIHN0cm5jYXNlY21wIGJ5IGxzdHJjbXBpIGFuZCBsc3RybmNtcGkgZm9yCgliZXR0ZXIgcG9ydGFiaWxpdHkuCgpTYXQgSmFuIDEzIDE2OjEzOjAyIDE5OTYgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJQWRkZWQgJ3R5cGVkZWYgSEdMT0JBTCBHT0JBTEhBTkRMRTsnLiAgVGhpcyBpcyBub3QgcHJlY2lzZWx5IGluIGxpbmUKCXdpdGggdGhlIHRydWUgd2luZG93cyAndHlwZWRlZiBIQU5ETEUgR0xPQkFMSEFORExFOycsIGJ1dCBJIGJlbGlldmUKCWl0IHNob3VsZCBzdWZmaWNlLgoKCSogW2luY2x1ZGUvd2luc29jay5oXQoJQWRkZWQgJyNpbmNsdWRlIDxhcnBhL2luZXQuaD4nIGZvciB2YXJpb3VzIGRlY2xhcmF0aW9ucy4gICcjaWZkZWYnLWVkCglvdXQgc29tZSBvbGQgc3R5bGUgaW50ZXJuZXQgYWRkcmVzcyAjZGVmaW5lJ3MuCgoJKiBbbG9hZGVyL3Rhc2suY10KCU1hZGUgTWFrZVByb2NJbnN0YW5jZSgpIHJldHVybiBmaXJzdCBwYXJhbWV0ZXIgI2lmZGVmIFdJTkVMSUIzMi4KCU1hZGUgRnJlZVByb2NJbnN0YW5jZSgpIGRvIG5vdGhpbmcgI2lmZGVmIFdJTkVMSUIzMi4KCScjaWZkZWYnLWVkIG91dCBUQVNLX0FsbG9jVGh1bmsoKSwgYXMgaXQgd2FzIHVudXNlZCBpbiBXSU5FTElCMzIuCgoJKiBbbGlicmFyeS9taXNjc3R1YnMuY10KCU1hZGUgR2V0V25kUHJvY0VudHJ5MTYoKSByZXR1cm4gQUNUSVZBVEVBUFBfY2FsbGJhY2soKSB3aGVuIGNhbGxlZAoJd2l0aCBuYW1lPSJBY3RpdmF0ZUFwcFByb2MiLiAgVGhpcyBoYXJkbHkgc2VlbXMgY29ycmVjdCwgYnV0IGl0J3MgbXkKCWJlc3QgZ3Vlc3MgYXMgdG8gaG93IHRoZSBlbXVsYXRvciByZXNwb25kcy4KClNhdCBKYW4gIDYgMTc6NTc6NDUgMTk5NiAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11bd2luMzIvcHJvY2Vzcy5jXQoJV0lOMzJfR2V0UHJvY0FkZHJlc3MsIExvYWRMaWJyYXJ5QTogbmV3IGZ1bmN0aW9ucwoKCSogW2lmMTYzMi9yZWxheTMyLmNdCglSRUxBWTMyX0dldEVudHJ5UG9pbnQ6IFJlbW92ZWQgY29kZSB0byBsb2FkIFBFIERMTHMKCgkqIFtpbmNsdWRlL3BlX2ltYWdlLmhdW2luY2x1ZGUvcGVfZXhlLmhdCglzdHJ1Y3QgcGVfZGF0YTogbmV3IGZpZWxkcyBiYXNlX2FkZHIsbG9hZF9hZGRyLHZtYV9zaXplLHBlX3JlbG9jCglzdHJ1Y3QgUEVfUmVsb2NfQmxvY2s6IG5ldyBzdHJ1Y3R1cmUKCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglNT0RVTEVfUmVnaXN0ZXJNb2R1bGU6IG5ldyBmdW5jdGlvbgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJUEVfRmluZEV4cG9ydGVkRnVuY3Rpb24sUEVfR2V0UHJvY0FkZHJlc3M6IG5ldyBmdW5jdGlvbnMKCWZpeHVwX2ltcG9ydHM6IGV4cGVjdCBzdHJ1Y3Qgd19maWxlcyogbm93LCBmaWxsIGRsbHNfdG9faW5pdCwKCSAgICAgICAgICAgICAgIGxvYWQgUEUgRExMcwoJZG9fcmVsb2NhdGlvbnM6IG5ldyBmdW5jdGlvbnMKCWNhbGNfdm1hX3NpemU6IHJlbmFtZWQgZnJvbSBkdW1wX3RhYmxlCglQRV9Mb2FkSW1hZ2U6IHVzZSBtYWxsb2MgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBpbWFnZQoJUEVfSW5pdERMTDogZXhwZWN0IEhNT0RVTEUKCVBFX0luaXRpYWxpemVETExzOiBuZXcgZnVuY3Rpb24KCgkqIFtsb2FkZXIvdGFzay5jXQoJTkVfSW5pdGlhbGl6ZURMTHM6IGJyYW5jaCB0byBQRV9Jbml0aWFsaXplRExMcyBmb3IgUEUgbW9kdWxlcwoJR2V0RXhlUHRyOiBBY2NlcHQgUEUgbW9kdWxlcwoKCSogW21pc2MvY29tbWRsZy5jXQoJRklMRURMR19XTUNvbW1hbmQ6IHVucGFjayBXSU4zMiBXTV9DT01NQU5EIGFwcHJvcHJpYXRlbHkgZm9yIFdpbmVMaWIKClRodSBKYW4gIDQgMTE6MzY6MjEgMTk5NiAgTWFuZnJlZCBXZWljaGVsIDxNYW5mcmVkLldlaWNoZWxAbWNoLnNuaS5kZT4KCgkqIFttaXNjL3BvcnQuY10KCU5ldyBmaWxlIHdpdGggdXNsZWVwKCkgZnVuY3Rpb24gZm9yIFNWUjQuCgoJKiBbY29uZmlndXJlLmluXQoJQ2hlY2sgZm9yIHVzbGVlcCgpIGZ1bmN0aW9uLgoKVHVlIEphbiAwMiAxNDowMDowMCAxOTk2ICBBbmFuZCBLdW1yaWEgPGFrdW1yaWFAb3plbWFpbC5jb20uYXU+CgoJKiBbaWYxNjMyL3Rvb2xoZWxwLnNwZWNdIFtpbmNsdWRlL3Rvb2xoZWxwLmhdCgkgIFttaXNjL3VzZXIuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW1wbGVtZW50IFRPT0xIRUxQLjgwIFRpbWVyQ291bnQuIEZpeCBHZXRUaWNrQ291bnQuCgoJKiBbd2luc29ja2V0LmNdCglGaXhlZCBFTk9FTlQgZXJyb3IuCgoJKiBbbWlzY2VtdS9kcG1pLmNdCglJbXBsZW1lbnQgRFBNSSBHZXQgUGFnZSBTaXplIChBWD0wNjA0LCBJTlQgMzEpCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJSW1wbGVtZW50IFRPT0xIRUxQLjcyIEdldE1lbU1hbkluZm8uCgpNb24gSmFuICAyIDEwOjMzOjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglDYWxsV2luZG93UHJvYygpIC0gV2hlbiBjYWxsaW5nIFJFTEFZMzJfQ2FsbFdpbmRvd1Byb2MsIGNoZWNrCgl3aGV0aGVyIGxQYXJhbSBzaG91bGQgYmUgYSBTRUdQVFIsIGFuZCBpZiBzbyBjb252ZXJ0IGl0IHRvIG9uZS4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2lmMTYzMi91c2VyMzIuc3BlY10KCU51bWVyb3VzIGZ1bmN0aW9ucyBhZGRlZCwgbW9zdGx5IGNhbGxzIHRvIG9yaWdpbmFsICh3aW4xNikKIAlmdW5jdGlvbnMuICBOb3RlIHRoYXQgc29tZSAobWFueSkgb2YgdGhlc2UgYXJlIHByb2JhYmx5IG5vdAogCXN0cmljdGx5IGNvcnJlY3QsIGJ1dCB3aXRoIHRoZXNlIGFkZGl0aW9ucyBmcmVlY2VsbCB3aWxsIGF0IGxlYXN0CiAJZGlzcGxheSBpdHMgbWFpbiB3aW5kb3cgdGhvdWdoIGl0IGlzIGdhcmJsZWQuCgoJKiBbaWYxNjMyL3dpbnByb2NzLnNwZWNdCglDb21wbGV0ZWx5IHJld3JpdHRlbiAtIGFsbCBXbmRQcm9jcyBub3cgaGF2ZSB3aW4zMiB2ZXJzaW9ucyB0bwoJaGVscCB3aXRoIHRoZSBscGFyYW0gU0VHUFRSIGZpeCBpbiBjYWxsYmFjay5jCgoJKiBbaW5jbHVkZS9rZXJuZWwzMi5oXQoJTFBUQ1NUUiBkZWZpbmVkLgoKCSogW2luY2x1ZGUvcGVleGUuaF0KCURlZmluaXRpb24gb2YgUEVfRXhwb3J0X0RpcmVjdG9yeSBhbWVuZGVkLgoKCSogW2luY2x1ZGUvcmVzb3VyY2UzMi5oXQoJTmV3IGZpbGUuCgoJKiBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdCglEZWZpbml0aW9uIG9mIE1BS0VfU0VHUFRSIG1hY3JvICNpZmRlZidkIG91dCBhbmQgcmVwbGFjZWQgd2l0aAoJcHJvdG90eXBlIGZvciByZXBsYWNlbWVudCBmdW5jdGlvbiBpbiBtZW1vcnkvc2VsZWN0b3IuYyB3aGljaAoJY2FuIG9wZXJhdGUgb24gYW55IGdpdmVuIG1lbW9yeSBhZGRyZXNzLiBUaGlzIGlzIGN1cnJlbnRseQoJcmVxdWlyZWQgZm9yIHdpbjMyIHN1cHBvcnQuIEl0IGlzIGEgZHJlYWRmdWwgY2x1ZGdlLCBhbmQgd2lsbAoJY2VydGFpbmx5IHNsb3cgZG93biBvdGhlciBwcm9ncmFtcy4gSWYgeW91IGFyZSBub3QgaW50ZXJlc3RlZAoJaW4gd2luMzIgZGV2ZWxvcG1lbnQgeW91IG1heSB3aXNoIHRvIHJldmVyc2UgdGhpcyBwYXRjaC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCURlZmluaXRpb24gb2YgU1dfU0hPV0RFRkFVTFQgYWRkZWQuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglFeHRlbnNpdmUgcmV3cml0ZXMgb2YgeG1tYXAoKSBmaXh1cF9pbXBvcnRzKCkuCglQRV9Mb2FkSW1hZ2UoKSAtIGluaXRpYWxpc2F0aW9uIG9mIGJzcyBhZGRlZCwgZXh0cmFjdGlvbiBvZgoJbW9kdWxlIG5hbWUgZml4ZWQsIGluaXRpYWxpc2F0aW9uIG9mIERMTCBhZGRlZC4KCVBFX0luaXRETEwoKSAtIG5vdyBkb2VzIHNvbWV0aGluZy4KCVBFX1dpbjMyQ2FsbFRvU3RhcnQoKSAtIGluaXRpYWxpc2F0aW9uIG9mIFRFQiBwb2ludGVkIHRvIGJ5CglmcyBhZGRlZC4KCVBFX0luaXRURUIoKSBjcmVhdGVkIHRvIHBlcmZvcm0gVEVCIGluaXRpYWxpc2F0aW9uLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXSAKCU5ldyBmdW5jdGlvbiBNQUtFX1NFR1BUUigpIC0gc2VlIGluY2x1ZGUvc3RhY2tmcmFtZS5oIGFib3ZlLgoKCSogW21pc2MvdXNlcjMyLmNdCglVU0VSMzJfUmVnaXN0ZXJDbGFzc0EoKSwgQ3JlYXRlV2luZG93RXhBKCkgbWVtb3J5IGFsbG9jYXRpb24KCW1ldGhvZCBjaGFuZ2VkLiBUaGlzIGlzIHByb2JhYmx5IG5vdyB1bm5lY2Vzc2FyeSB3aXRoIHRoZQoJbmV3IE1BS0VfU0VHUFRSIGhhbmRsaW5nIGNvZGUuCglVU0VSMzJfRGVmV25kUHJvY0EoKSByZW1vdmVkIHRvIHdpbjMyL3dpbnByb2NzLmMKCVVTRVIzMl9UcmFuc2xhdGVNZXNzYWdlIGFkZGVkLgoKCSogW3Rvb2xzL2J1aWxkLmNdCgloYW5kbGluZyBvZiB3aW4zMiBzcGVjIGZpbGVzIGNoYW5nZWQgdG8gc3VwcG9ydCBnY2MyLjYuWAoJdGhpcyByZXF1aXJlcyBvcHRpbWlzYXRpb25zIHRvIGJlIGRpc2FibGVkLgoKCSogW3dpbjMyL3Jlc291cmNlLmNdIFt3aW4zMi9uZXdmbnMuY10gW3dpbjMyL2hlYXAuY10gW3dpbjMyL3dpbnByb2NzLmNdCglOZXcgZmlsZXMuCgoJKiBbd2luMzIvTWFrZWZpbGUuaW5dCglOZXcgZmlsZXMgaGVhcC5jLCBuZXdmbnMuYywgcmVzb3VyY2UuYyBhbmQgd2lucHJvY3MuYyBhZGRlZCB0byBidWlsZC4KCgkqIFt3aW4zMi9maWxlLmNdCglOZXcgZnVuY3Rpb24gVzMyX1NldEhhbmRsZUNvdW50LgoKCSogW3dpbjMyL2luaXQuY10KCVdJTjMyX0dldE1vZHVsZUhhbmRsZSgpIC0gbm93IHJldHVybnMgaGFuZGxlIG9mIHJ1bm5pbmcgcHJvY2VzcwoJaWYgY2FsbGVkIHdpdGggTlVMTC4KCUdldFN0YXJ0dXBJbmZvQSgpIC0gc2V0IGNiUmVzZXJ2ZWQyIHRvIDAuCgoJKiBbd2luMzIvbWVtb3J5LmNdCglWaXJ0dWFsQWxsb2MoKSAtIHNldCBtbWFwKCkgZmlsZSBwYXJhbWV0ZXIgdG8gLTEgaW5zdGVhZCBvZiAwIHRvIG1ha2UKCWl0IHdvcmsgd2l0aCBGcmVlQlNELiBBbHNvIGNoZWNrIGZvciByZXR1cm4gdmFsdWUuIFJlbW92ZWQgZXh0cmEKCXJldHVybi4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJU2hvd1dpbmRvdygpIC0gU1dfU0hPV0RFRkFVTFQgaGFuZGxpbmcga2x1ZGdlZCBpbi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IERlYyAyMyAxODoxNTo1OSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbY29uZmlndXJlLmluXSBbTWFrZWZpbGUuaW5dIFt0b29scy9pbnN0YWxsLXNoXQoJTmV3ICdpbnN0YWxsJyB0YXJnZXQgaW5zdGFsbHMgV2luZSBiaW5hcnksIGxpYnJhcnkgYW5kIG1hbiBwYWdlLgoJTGlicmFyeSBpcyBub3cgbW9yZSBsb2dpY2FsbHkgbmFtZWQgbGlid2luZS5hLgoJU3BsaXQgdG9vbGtpdC8gZGlyZWN0b3J5IGludG8gbGlicmFyeSAoZm9yIGxpYnJhcnkgY29kZSkgYW5kCglsaWJ0ZXN0IChmb3IgdGVzdCBwcm9ncmFtcykuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJUXVpY2sgaGFjayB0byBwYXJ0aWFsbHkgc3VwcG9ydCBFTV9QQVNTV09SRCBzdHlsZSAoYXZvaWRzCglkaXNwbGF5aW5nIHlvdXIgcGFzc3dvcmRzIG9uIHRoZSBzY3JlZW4gd2hlbiB0ZXN0aW5nIHByb2dyYW1zLi4uKQoKCSogW2NvbmZpZ3VyZS5pbl0gW2NvbnRyb2xzL21lbnUuY10gW2luY2x1ZGUvcmVzb3VyY2UuaF0KCSAgW21pc2MvY29tbWRsZy5jXSBbbWlzYy9vbGUybmxzLmNdIFttaXNjL3NoZWxsLmNdIFt3aW5kb3dzL21zZ2JveC5jXQoJTGFuZ3VhZ2UgaXMgbm93IGEgcnVuLXRpbWUgb3B0aW9uICh3aW5lIC1sYW5ndWFnZSB4eCkuCgoJKiBbZGVidWdnZXIvZGJnLnldCglEdW1wIHNvbWUgbW9yZSBkZWJ1Z2dpbmcgaW5mbyBvbiBjcmFzaC4KCgkqIFttaXNjL3Byb2ZpbGUuY10KCU9ubHkgY29uc2lkZXIgJzsnIGFzIGEgY29tbWVudCBpZiBpdCdzIHRoZSBmaXJzdCBub24tYmxhbmsKCWNoYXJhY3RlciBvbiB0aGUgbGluZS4KCgkqIFttaXNjZW11L2RwbWkuY10KCU1vcmUgZGVidWdnaW5nIGluZm8gZm9yIHJlYWwtbW9kZSBjYWxsYmFjay4KCgkqIFtvYmplY3RzL2dkaW9iai5jXQoJUmV3cm90ZSBFbnVtT2JqZWN0cygpIHRvIGRvIHRoZSBSaWdodCBUaGluZy4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzKl0KCU5ldyBkaXJlY3RvcnkgY29udGFpbmluZyBzeXN0ZW0gcmVzb3VyY2VzLgoKRnJpIERlYyAyMiAxMToyNDozOSBHTVQgMTk5NSAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbd2luMzIvZmlsZS5jXSBbd2luMzIvbWVtb3J5LmNdCiAgICAgICAgVW5peHdhcmUgZG9lc24ndCBoYXZlIE1BUF9BTk9OIGlmZGVmZWQgb3V0IGZvciBub3cuCgoJKiBbbWlzYy9kb3NfZnMuY10KICAgICAgICBET1NfR2V0RG9zRmlsZU5hbWUgZGlkbid0IHRydW5jYXRlIHBhdGhzIHN0YXJ0aW5nIC4vIHByb3Blcmx5LgoKCSogW3Rvb2xzL2J1aWxkLmNdCglQcm9kdWNlcyBhc3NlbWJseSBjb2RlIHRoYXQgd29ya3Mgd2l0aCB0aGUgdW5peHdhcmUgYXNzZW1ibGVyLgoKV2VkIERlYyAyMCAyMjoyMjoyOSArMDEwMCAxOTk1ICBNb3J0ZW4gV2VsaW5kZXIgPHRlcnJhQGRpa3UuZGs+CgoJKiBbbWlzY2VtdS9pbnN0ci5jXQoJSU5TVFJfR2V0T3BlcmFuZEFkZHI6IDE2LWJpdCBhZGRyZXNzZXMgc2hvdWxkIGJlIG1hc2tlZCB0byAxNiBiaXRzLgoKCSogW21pc2MvZG9zX2ZzLmNdCglET1NfcmVhZGRpciBzaG91bGQgYWx3YXlzIHJldHVybiBkaXJlY3RvcmllcywgZXZlbiBpZiB0aGV5IGRvbid0CiAJbWF0Y2ggdGhlIGZpbGUgbmFtZSBtYXNrLgoKVHVlIERlYyAxOSAxODowMDowMCAxOTk1ICBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50aC1kYXJtc3RhZHQuZGU+CgkKCSogW21pc2MvZXhlYy5jXQoJR2l2ZSBhcmd1bWVudHMgdG8gd2luaGVscC4KCgkqIFttaXNjZW11L2ludDIxLmNdCglJbXBsZW1lbnRlZCBJbnRlcnJ1cHQgMjEgQVg9NkMwMCBFWFRFTkRFRCBPUEVOL0NSRUFURS4KCUNyZWF0ZWQgZnVuY3Rpb24gRXh0ZW5kZWRPcGVuQ3JlYXRlRmlsZS4KCUdpdmUgZm9yIHNvbWUgV2luZG93czk1IGludGVycnVwdHMgdGhlIHJldHVybiB2YWx1ZSAnbm90CglpbXBsZW1lbnRlZCcuCgpTdW4gRGVjIDE3IDE2OjUxOjU2IEVTVCAxOTk1ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogW2luY2x1ZGUva2VybmVsMzIuaF0gW2luY2x1ZGUvd2luZG93cy5oXQoJTW92ZWQgdGhlIHR5cGVkZWZzIGZvciBTWVNURU1USU1FIGFuZCBMUFNZU1RFTVRJTUUgZnJvbQogCWluY2x1ZGUva2VybmVsMzIuaCB0byBpbmNsdWRlL3dpbmRvd3MuaCBhbmQgZGVjbGFyZWQgdGhlIG5ldyBXaW4zMgogCUFQSSBmdW5jdGlvbnMgU2xlZXAoKSwgR2V0TG9jYWxUaW1lKCksIGFuZCBHZXRTeXN0ZW1UaW1lKCkuCiAgCVJlZGVmaW5lZCBJTkZJTklURSBhcyAweEZGRkZGRkZGIGlmIFdJTkVMSUIzMi4KCgkqIFtyYy9yYyAobmV3IGZpbGUpXQoJQ3JlYXRlZCB0aGUgc2hlbGwgc2NyaXB0ICdyYycsIHdoaWNoIHNob3VsZCBzaW1wbGlmeSByZXNvdXJjZQogCWNvbXBpbGF0aW9uLgoKCSogW3dpbjMyL2Vudmlyb25tZW50LmNdCglLbHVkZ2VkIGFyb3VuZCBhbiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIHdpbmVfZmlsZXMuICBUaGlzIGNoYW5nZQogCXNob3VsZCBiZSBmaXhlZCBzb21lIHRpbWUuCgoJKiBbd2luMzIvdGltZS5jXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglBZGRlZCB0aGUgZnVuY3Rpb25zIEdldFN5c3RlbVRpbWUoKSwgYW5kIFNsZWVwKCkuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJUmVuYW1lZCBzdGF0aWMgZnVuY3Rpb24gR2V0U3lzdGVtVGltZSB0byBJTlQyMV9HZXRTeXN0ZW1UaW1lIHRvCiAJYXZvaWQgY29uZmxpY3RzIHdpdGggdGhlIEFQSSBmdW5jdGlvbiBvZiB0aGUgc2FtZSBuYW1lLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCUFkZGVkIHRoZSBTUEZNVCBkZWZpbml0aW9uIGZvciBwcmludGYgc3RhdGVtZW50cy4KCgkqIFttaXNjL3NoZWxsLmNdIFtpbmNsdWRlL3NoZWxsLmhdCglDaGFuZ2VkIEVSUk9SXyogZGVmaW5lcyB0byBTSEVMTF9FUlJPUl8qLCBhcyB0aGV5IHdlcmUgY29uZmxpY3RpbmcKIAl3aXRoIHRoZSBvbmVzIGluIGluY2x1ZGUvd2luZXJyb3IuaC4gIFRoZXkgc2hvdWxkIHByb2JhYmx5IHVzZSB0aGUKIAl2ZXJzaW9ucyBpbiB3aW5lcnJvci5oLCBidXQgSSdtIG5vdCBjZXJ0YWluLCBhbmQgdGhhdCBjYW4gYmUgZG9uZQogCWxhdGVyLgoKCSogW3dpbmRvd3MvbWRpLmNdCglUcmFuc2xhdGVkIFdNX01ESUFDVElWQVRFKD8sKExPaHduZCxISWh3bmQpKSBtZXNzYWdlcyB0bwogCVdNX01ESUFDVElWQVRFKEhJaHduZCxMT2h3bmQpIGZvciBXSU5FTElCMzIuICBUaGUgPyBwYXJhbWV0ZXIKIAkoYm9vbGVhbikgd2FzIGRpc2NhcmRlZCB3aXRoIHRoaXMgdHJhbnNsYXRpb24uICBUcmFuc2xhdGVkIGhhbmRsZXIKIAlvZiBXTV9NRElTRVRNRU5VKHJlZiwobG9ITUVOVSxoaUhNRU5VKSkgdG8gaGFuZGxlCiAJV01fTURJU0VUTUVOVShsb0hNRU5VLCBoaUhNRU5VKSBtZXNzYWdlcyBpbiBXSU5FTElCMzIgKHJlZiBhc3N1bWVkCiAJZmFsc2UsIGNhbGwgRHJhd01lbnVCYXIoKSBpZiBkZXNpcmVkKS4KCgkqIFsqLypdCglHZW5lcmFsIGV4cGxpY2l0IGNhc3RzIGFuZCBtb3JlIHJpZ2lkIHR5cGluZyB0byByZW1vdmUgd2FybmluZ3MuCgoJKiBbaW5jbHVkZS93aW5wb3MuaF0gW3dpbmRvd3Mvd2lucG9zLmNdCglDaGFuZ2VkIHJldHVybiB0eXBlIG9mIFdJTlBPU19DaGFuZ2VBY3RpdmVXaW5kb3cgdG8gQk9PTC4KCgkqIFtpbmNsdWRlL2NvbW1kbGcuaF0gW21pc2MvY29tbWRsZy5jXQoJQWRkZWQgcHJvdG90eXBlcyBmb3IgQ2hvb3NlQ29sb3IoKSwgQ29tbURsZ0V4dGVuZGVkRXJyb3IoKSwKIAlGaW5kVGV4dCgpIEdldEZpbGVUaXRsZSgpLCBHZXRPcGVuRmlsZU5hbWUoKSwgR2V0U2F2ZUZpbGVOYW1lKCksCiAJUHJpbnREbGcsIGFuZCBSZXBsYWNlVGV4dCgpLgoJUmVuYW1lZCB0aGUgQ29tbURsZ0V4dGVuZEVycm9yKCkgZnVuY3Rpb24gdG8gQ29tbURsZ0V4dGVuZGVkRXJyb3IoKS4KCU1hZGUgR2V0RmlsZVRpdGxlIHJldHVybiBhIHNob3J0LCBhcyBwZXIgdGhlIEFQSSBkZWZpbml0aW9uLgoKCSogW01ha2VmaWxlLmluXQoJQWRkZWQgbGluZSB0byBjbGVhbiBhbmQgZGlzdGNsZWFuIHRoYXQgcmVtb3ZlcyB0ZW1wb3JhcmllcyBmcm9tCiAJdGhlIGluY2x1ZGUgZGlyZWN0b3J5LgoKU2F0IERlYyAxNiAxOTozOToxNCBNRVQgMTk5NSAgU3RlZmZlbiBNb2VsbGVyIDxzbW9lMDAyNEByei51bmktaGlsZGVzaGVpbS5kZT4KCgkqIFtjb250cm9scy9lZGl0LmNdCglBbG1vc3QgcmV3cm90ZSBFRElUX0dldExpbmVNc2cuCgpTYXQgRGVjIDE2IDEzOjUxOjQ4IE1TVCAxOTk1ICBBbmRyZXcgVGF5bG9yIDxhdGF5bG9yQGNhZHZpc2lvbi5jb20+CgoJKiBbd2luZG93cy9tZGkuY10KCUZpeGVkIE1ESVRpbGUoKSBidWcgdGhhdCBvY2N1cnMgd2hlbiAwIHdpbmRvd3MgYXJlIHByZXNlbnQgb3IgYWxsCgl3aW5kb3dzIGFyZSBtaW5pbWl6ZWQuCgpXZWQgRGVjIDEyIDIzOjMwOjAwIDE5OTUgIFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnRoLWRhcm1zdGFkdC5kZT4KCgkqIFttaXNjL3Byb2ZpbGUuY10KICAgICAgICBUcnkgaGFyZGVyIHRvIGZpbmQgZmlsZXMsIGVzcGVjaWFsbHkgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgoJTG9vayBpbiAkSE9NRS8ud2luZSB0b28gYW5kIGNyZWF0ZSBpdCB0aGVyZSBpZiBpdCBpc24ndCBmb3VuZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIERlYyAxMSAxOTowODo1NSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbbWlzYy9sc3RyLmNdCglSZXBsYWNlZCB3aW5lX3N0cm5jcHkoKSBieSBhIDMyLWJpdCB2ZXJzaW9uIG9mIGxzdHJjcHluKCksIHNpbmNlCiAJdGhleSBkbyB0aGUgc2FtZSBqb2IuCgoJKiBbdG9vbHMvYnVpbGQuY10KCUZpeGVkIF9fYXR0cmlidXRlX18oKHN0ZGNhbGwpKSB0byBtYWtlIGl0IGNvbXBpbGUgd2l0aCBnY2MKCXZlcnNpb25zIHVuZGVyIDIuNy4gRG9lc24ndCBtZWFuIGl0IHdpbGwgcnVuIE9LIHRob3VnaC4uLgoKU2F0IERlYyAwOSAxMzoyMjo1OCAxOTk1ICBDYW1lcm9uIEhlaWRlICA8aGVpZGVAZWUudWFsYmVydGEuY2E+CgoJKiBbaW5jbHVkZS9rZXJuZWwzMi5oXSBbaW5jbHVkZS93aW5lcnJvci5oXQoJQWRkZWQgZmlsZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMgYW5kIG1vcmUgZXJyb3IgY29kZXMuCgoJKiBbd2luMzIvZXJyb3IuY10KCUFkZGVkIHNvbWUgcnVkaW1lbnRhcnkgZXJybm8tdG8tV2luMzIgZXJyb3IgY29udmVyc2lvbgoJY29kZS4KCgkqIFt3aW4zMi9maWxlLmNdCglBZGRlZCB0byBHZXRGaWxlSW5mb3JtYXRpb25CeUhhbmRsZSwgZmlsbGVkIGluIHNvbWUga25vd24KCWVycm9yIGNvZGVzLCBhbmQgc3dpdGNoZWQgdG8gZHByaW50Zl93aW4zMi4KCgkqIFt3aW4zMi90aW1lLmNdCglBZGRlZCBHZXRMb2NhbFRpbWUuCgpGcmkgRGVjICA4IDE0OjM3OjM5IDE5OTUgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbY29udHJvbHMvY29tYm8uY10KCUNvbnZlcnRlZCBmdW5jdGlvbnMgb2YgdGhlIHR5cGUgTE9ORyBfKEhXTkQsV09SRCxMT05HKSB0byB0aGUgdHlwZQoJTFJFU1VMVCBfKEhXTkQsV1BBUkFNLExQQVJBTSkgd2hlcmUgbmVlZGVkLgoKCSogW2luY2x1ZGUvbGlicmVzLmhdCglSZXN0cnVjdHVyZWQgbGlicmVzIHByb3RvdHlwZXMgdG8gY2xvc2VyIG1hdGNoIHRoZSB3aW5kb3dzIEFQSS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUNoYW5nZWQgc2V2ZXJhbCBBUEkgcHJvdG90eXBlcycgcGFyYW1ldGVyIHR5cGVzIGZyb20gJ3Nob3J0JyB0byBJTlQsCgl3aGljaCBpcyAjZGVmaW5lZCBhcyBzaG9ydCBpbiB0aGUgZW11bGF0b3IsIGJ1dCBpcyBhIG5vcm1hbCBpbnQgaW4KCVdJTkVMSUIzMi4gIEFsc28gY2hhbmdlZCBTRUdQVFIgZnJvbSBEV09SRCB0byB2b2lkKiB3aGVuIFdJTkVMSUIzMi4KCShUaGlzIGNyZWF0ZXMgYSBsb3Qgb2Ygd2FybmluZ3MgYXQgbGlicmFyeS1jb21waWxlIHRpbWUsIGJ1dCBsZXNzCgl3YXJuaW5ncyBhdCBhcHAtY29tcGlsZSB0aW1lLiAgSSdsbCByZW1vdmUgdGhlIHdhcm5pbmdzIHNvb24uKQoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJRml4ZWQgcGFyYW1ldGVyIG1pc21hdGNoIGluIGNhbGwgdG8gTElCUkVTX0ZpbmRSZXNvdXJjZSgpLiAgQ2hhbmdlZAoJdmFyaW91cyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIExJQlJFU18qIEFQSSBmdW5jdGlvbnMuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJRGVsZXRlZCBsb2NhbCAnaScgZnJvbSB3aW5fZmF1bHQoKSwgc2luY2UgaXQgd2FzIHVudXNlZC4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJTWlycm9yZWQgY2hhbmdlcyB0byBpbmNsdWRlL3dpbmRvd3MuaCBtZW50aW9uZWQgYWJvdmUuCgoJKiBbdG9vbGtpdC9oZWxsbzMuY10KCUNoYW5nZWQgTG9hZE1lbnVJbmRpcmVjdCgpIGNhbGwgdG8gTG9hZE1lbnUoKSB0byB0ZXN0IHRoZSBuZXcKCXJlc291cmNlIHJlZ2lzdHJhdGlvbiB0ZWNobmlxdWUuCgoJKiBbdG9vbGtpdC9saWJyZXMuY10KCVJlbW92ZWQgZGVmaW5pdGlvbiBvZiAnc3RydWN0IHJlc291cmNlJyBhbmQgZml4ZWQgYnVncyBpbiB0aGUgcmVzb3VyY2UKCWltcGxlbWVudGF0aW9uLiAgSW1wbGVtZW50ZWQgTElCUkVTX0ZpbmRSZXNvdXJjZS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglNaXJyb3JlZCBjaGFuZ2VzIHRvIGluY2x1ZGUvd2luZG93cy5oIG1lbnRpb25lZCBhYm92ZS4KClRodSBEZWMgIDcgMjM6MTU6NTYgMTk5NSAgICAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtjb250cm9scy9lZGl0LmNdCglMT0NBTF9IZWFwRXhpc3RzOiBDaGFuZ2VkIHBhcmFtZXRlciB0byBIQU5ETEUuIEZvciBXaW5lTGliLCByZXR1cm4gdHJ1ZQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUNyZWF0ZUxpc3RCb3hTdHJ1Y3Q6IEluaXRpYWxpemUgSGVhcFNlbCB0byAwIGZvciBXaW5lTGliCgoJKiBbaW5jbHVkZS9saXN0Ym94LmhdCgljaGFuZ2UgSGVhcFNlbCBmcm9tIFdPUkQgdG8gSEFORExFCgoJKiBbaW5jbHVkZS9yZXNvdXJjZS5oXVtyYy93aW5lcmMuY10KCXN0cnVjdCBSZXNvdXJjZVRhYmxlOiByZW1vdmVkCglzdHJ1Y3QgcmVzb3VyY2U6IG1vdmVkIHRvIGhlYWRlciBmaWxlCglhdXRvcmVnaXN0ZXIgcmVzb3VyY2VzIGlmIHN1cHBvcnRlZCBieSBjb21waWxlcgoKCSogW21lbW9yeS9sb2NhbC5oXQoJTE9DQUxfR2V0SGVhcDogZXhwZWN0IEhBTkRMRSByYXRoZXIgdGhhbiBXT1JECgkKCSogW3Rvb2xraXQvTWFrZWZpbGUuaW5dCglBZGQgQUxMQ0ZMQUdTIHRvIG1ha2UgaGVsbG8zCgoJKiBbdG9vbGtpdC9oZWFwLmNdCglMb2NhbEZyZWUsIEhFQVBfRnJlZTogaGFuZGxlIDAgcGFyYW1ldGVyIGdyYWNlZnVsbHkKCldlZCBEZWMgMDYgMTU6MzQ6MjMgMTk5NSAgR3JlZyBDb29wZXIgPGNvb3BlckBpbWEtaW5jLmNvbT4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJRml4ZWQgdGhlIG1zZ3NuZCBhbmQgbXNncmN2IGVycm9ycyB0aGF0IHdpbnNvY2sgcHJvZ3JhbXMgZ2V0LgoKV2VkIERlYyAwNiAxMjo0NzoyMyBNRVQgMTk5NSBTdmVuIFZlcmRvb2xhZWdlIDxza2ltb0BkbnMudWZzaWEuYWMuYmU+CgkKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCUZpeGVkIF9ocmVhZCBhbmQgX2h3cml0ZSByZXR1cm4gdHlwZQoKCSogW2lmMTYzMi9yZWxheTMyLmNdIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUhhY2tlZCBsb2FkaW5nIG9mIFBFLWRsbCdzIGluCgoJKiBbd2luMzIvYWR2YXBpLmNdCglBZGRlZCBzdHVicyBmb3IgUmVnQ3JlYXRlS2V5RXgsIFJlZ1NldFZhbHVlRXgsIFJlZ1F1ZXJ5VmFsdWVFeAoKCSogW3dpbjMyL2ZpbGUuY10KCUFkZGVkIHN0dWJzIGZvciBPcGVuRmlsZU1hcHBpbmcsIENyZWF0ZUZpbGVNYXBwaW5nLCBNYXBWaWV3T2ZGaWxlRXgKCgkqIFt3aW4zMi9wcm9jZXNzLmNdCglBZGRlZCBzdHVicyBmb3IgQ3JlYXRlTXV0ZXhBLCBSZWxlYXNlTXV0ZXgsIENyZWF0ZUV2ZW50QSwKCVdhaXRGb3JTaW5nbGVPYmplY3QsIER1cGxpY2F0ZUhhbmRsZSwgR2V0Q3VycmVudFByb2Nlc3MKCQpNb24gRGVjIDA0IDEzOjA2OjM3IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIFtpbmNsdWRlL3dpbmUuaF0gW21pc2MvbHN0ci5jXQoJRGVmaW5lIHdpbmVfc3RybmNweSgpLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHBhZCB0aGUgYnVmZmVyIHdpdGggCgl6ZXJvZXMgbGlrZSBHTlUgc3RybmNweSgpLCB3aGljaCBtaWdodCBicmVhayBzb21lIFdpbmRvd3MgcHJvZ3JhbXMKCXRoYXQgcGFzcyBib2d1cyBzaXplIGFyZ3VtZW50cy4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdOiBHZXRNb2R1bGVGaWxlTmFtZSgpLAoJW21pc2MvY29tbWRsZy5jXTogR2V0RmlsZVRpdGxlKCksCglbbWlzYy9rZXlib2FyZC5jXSwgW21pc2MvbHN0ci5jXTogbHN0cmNweW4oKSwKCVttaXNjL29sZTJubHMuY10sIFttaXNjL3Byb2ZpbGUuY10sIFttdWx0aW1lZGlhL21jaXN0cmluZy5jXSwKCVttdWx0aW1lZGlhL21tc3lzdGVtLmNdLCBbb2JqZWN0cy9mb250LmNdOgoJVXNlIHdpbmVfc3RybmNweSgpIHdoZXJlIHN0cmluZ3MgYXJlIHJldHVybmVkIHRvIFdpbmRvd3MgcHJvZ3JhbXMuCgkKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCVBsYXlNZXRhZmlsZSgpOiBDbGVhciB0aGUgaGFuZGxlIHRhYmxlIGJlZm9yZSB1c2luZyBpdC4KCgkqIFttaXNjL3NoZWxsLmNdIFttaXNjL21haW4uY10KCVJlbmFtZSBTSEVMTF9SZWdDaGVja0ZvclJvb3QoKSB0byBTSEVMTF9Jbml0KCkgYW5kIGNhbGwgaXQgZnJvbSBtYWluKCkuCgkKCSogW21pc2MvcHJvZmlsZS5jXQoJbG9hZCgpOiBOZWVkIHRvIGhhbmRsZSBjb21tZW50cy4KCQoJKiBbdG9vbGtpdC9saWJyZXMuY10KCU1ha2UgaXQgY29tcGlsZS4KCQoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCVVzZSBNQUtFX1NFR1BUUiBtYWNybyBpbiB0d28gcGxhY2VzIHdoZXJlIGEgdXNlciBoZWFwIGJsb2NrIHVzZWQKCXRvIGJlIGFsbG9jYXRlZCBpbnN0ZWFkLgoKU2F0IERlYyAwMiAxNjo0Mzo0MyAxOTk1IFJhbW9uIEdhcmNpYSA8cmFtb25AaWUzLmNsdWJzLmV0c2l0LnVwbS5lcz4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJSW4gZnVuY3Rpb24gU2V0V2luZG93UG9zOiBkbyBub3QgcmVkcmF3IHRoZSBwYXJlbnQgb2YKCWEgd2luZG93IGlmIHRoZSBzcGVjaWZpZWQgd2luZG93IGlzIHBsYWNlZCBvbiB0aGUgdG9wLgoJVGhpcyBhdm9pZHMgdGhhdCBTaG93V2luZG93KGh3bmQsMSkgaGlkZXMgaHduZCBpbnN0ZWFkCglvZiBzaG93aW5nIGl0LgoKU2F0IERlYyAwMiAxMTowMDowMCAxOTk1IEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglOb3cgaXQgY2FuIHNjcm9sbCBjaGlsZHJlbiBhbG9uZyB3aXRoIHRoZSBjbGllbnQgcmVnaW9uIG9mIHBhcmVudCAKICAgICAgICB3aW5kb3cuIFRyaWVkIHRvIG9wdGltaXplIHVwZGF0ZSByZWdpb24gY2FsY3VsYXRpb24uIAoKCSogW3dpbmRvd3MvbWRpLmNdCglTY3JvbGxDaGlsZHJlbiBmdW5jdGlvbiwgbW9yZSBvdGhlciBmZWF0dXJlcyBhZGRlZC4gQmFzaWNhbGx5CglhIHJld3JpdGUuCgoJKiBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3MvZm9jdXMuY10KCVJlaW1wbGVtZW50ZWQgd2luZG93IGFjdGl2YXRpb24gYW5kIGZvY3VzIGhhbmRsaW5nLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBZGRlZCBuZXcgZmxhZyBXSU5fTkNBQ1RJVkFURUQuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFtsb2FkZXIvdGFzay5jXQoJU21hbGwgY2hhbmdlcyAodG8gbWFpbnRhaW4gbGlua2VkIGxpc3Qgb2YgbWVzc2FnZSBxdWV1ZXMpLgoKV2VkIE5vdiAyOSAxNTo1MTo0OCAxOTk1ICBEYW5pZWwgU2NoZXBsZXIgIDxkYW5pZWxAc2hlcDEzLnd1c3RsLmVkdT4KCgkqIFtpbmNsdWRlL29wdGlvbnMuaF0gW21pc2MvbWFpbi5jXSBbd2luZG93cy9kZWZ3bmQuY10KCSAgW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3dpbi5jXSBbV2luZS5tYW5dCglJbXBsZW1lbnRlZCBhIC1tYW5hZ2VkIG9wdGlvbiB0byByZXBsYWNlIHRoZSBzdGFuZGFyZCBXaW5kb3dzCglmcmFtZSBvZiB0b3AtbGV2ZWwgd2luZG93cyB3aXRoIHRoZSB3aW5kb3cgbWFuYWdlcidzIGRlY29yYXRpb25zLgoJSWYgYSB0b3AtbGV2ZWwgd2luZG93IG1ha2VzIGl0cyBvd24gZnJhbWUsIHRoaXMgd2lsbCBzdGlsbCBzaG93Cgl1cCwgaW5zaWRlIHRoZSB3aW5kb3cgbWFuYWdlciBkZWNvcmF0aW9ucyAoSSBiZWxpZXZlIGN0bDNkdjIuZGxsCgl3b3VsZCBkbyB0aGlzLCBhbHRob3VnaCBJIGNhbid0IHRlc3QgdGhpcykuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBOb3YgMjEgMTg6NDk6MTAgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW2NvbmZpZ3VyZS5pbl0gW01ha2VmaWxlXSBbbWlzYy9kb3NfZnMuY10KCUdvdCByaWQgb2YgYXV0b2NvbmYuaCBmaWxlLgoKCSogW2RlYnVnZ2VyL2RiZy55XQoJTW9yZSBsb2dpY2FsIGJlaGF2aW9yIHVwb24gc3ludGF4IGVycm9ycy4KCgkqIFtpbmNsdWRlL2hvb2suaF0gW3dpbmRvd3MvaG9vay5jXQoJQ2hhbmdlZCBob29rIHN0cnVjdHVyZSBhbmQgcmV3cm90ZSBtb3N0IG9mIHRoZSBob29rIGZ1bmN0aW9ucyBmb3IKCWJldHRlciBjb21wYXRpYmlsaXR5LCBiYXNlZCBvbiBpbnZlc3RpZ2F0aW9ucyBieSBBbGV4IEtvcm9ia2EuCgoJKiBbaW5jbHVkZS9tZXNzYWdlLmhdIFt3aW5kb3dzL21lc3NhZ2UuY10KCUFkZGVkIGhvb2tzIHRvIG1lc3NhZ2UgcXVldWUgc3RydWN0dXJlIGFuZCBtYWRlIHRoZSBzdHJ1Y3R1cmUKCWxheW91dCBXaW5kb3dzLWNvbXBhdGlibGUuCglBZGRlZCBzdXBwb3J0IGZvciBXSF9NT1VTRSwgV0hfS0VZQk9BUkQsIFdIX0hBUkRXQVJFIGFuZAoJV0hfSk9VUk5BTFJFQ09SRCBob29rcy4KCgkqIFttaXNjL21haW4uY10KCUFkZGVkIGNvbW1hbmQtbGluZSBvcHRpb24gZm9yIGNoYW5naW5nIHRoZSBsYW5ndWFnZSBhdCBydW4tdGltZQogCShub3QgaW1wbGVtZW50ZWQgeWV0KSwgYmFzZWQgb24gYSBzdWdnZXN0aW9uIGZyb20gTWljaGFlbCBQYXRyYS4KCgkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KCUZpeGVkIHNpbGx5IFNFR1BUUiBidWcgaW4gRHVtcEljb24oKS4KCk1vbiBOb3YgMjAgMjI6MjI6MjIgMTk5NSAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbY29udHJvbHMvbGlzdGJveC5jXSBbY29udHJvbHMvY29tYm8uY10gW2luY2x1ZGUvbGlzdGJveC5oXQoJUGFydGlhbCBpbXBsZW1lbnRhaW9uIG9mIExCU19FWFRFTkRFRFNFTCBzdHlsZSwKCXlldCBtb3JlIHVwZGF0ZXMgZm9yIGRyYWcgJiBkcm9wIHN1cHBvcnQuIE5vdyB3b3Jrcy4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJTW9yZSBtZXNzYWdlIGhhbmRsZXJzLgoKCSogW3dpbmRvd3Mvd2luLmNdCglEcmFnT2JqZWN0LCBEcmFnRGV0ZWN0LCBBbnlQb3B1cCBmdW5jdGlvbnMuIAoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU1vcmUga2x1ZGd5IGZpeGVzIChXTV8uLi5UT0lURU0sIGV0Yy4pLgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXSBbb2JqZWN0cy9vZW1iaXRtYXAuY10KCUljb25Ub0N1cnNvciBza2VsZXRvbiwgcGF0Y2ggZm9yIE9CTV9Mb2FkQ3Vyc29ySWNvbiB0byBoYW5kbGUgbmV3CgljdXJzb3IuCgoJKiBbaW5jbHVkZS9iaXRtYXBzL29jcipdCglOZXcgT0VNIGN1cnNvcnMuCgpNb24gTm92IDIwIDExOjA1OjIwIEVTVCAxOTk1ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogW3Rvb2xraXQvaGVhcC5jXQoJU3dhcHBlZCBmbGFncyBhbmQgc2l6ZSBhcmd1bWVudHMgdG8gTG9jYWxSZWFsbG9jIGFzIHBlciBjaGFuZ2VzIGluCgltZW1vcnkvbG9jYWwuYyBieSBXaWxsaWFtIE1hZ3JvIGluIHByZXZpb3VzIHJlbGVhc2UuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJUmVpbnN0YXRlZCB0aGUgI2RlZmluZSdzIGZvciAnbWluJyBhbmQgJ21heCcsIHNpbmNlIHRoZXkncmUgcGFydCBvZgoJdGhlIFdpbmRvd3MgQVBJLiAgSSByZWFsbHkgZG9uJ3QgdGhpbmsgaXQncyBhIHdpc2UgaWRlYSwgc28gSSBwdXQKCWEgJyNpZm5kZWYgRE9OVF9ERUZJTkVfbWluX0FORF9tYXgnIGFyb3VuZCB0aGVtLiAgSSB0aGluayB0aGUgYWN0dWFsCglXSU5FIGNvZGUgc2hvdWxkIG5ldmVyIHVzZSB0aGVzZSAoaXQgc2hvdWxkIHVzZSAnTUlOJyBhbmQgJ01BWCcKCWluc3RlYWQpLgoKCSogW2xvYWRlci8qXQoJUHV0ICcjaWZuZGVmIFdJTkVMSUInIGFyb3VuZCBtYW55IHRoaW5ncyB0aGF0IFdJTkVsaWIgc2hvdWxkIG5vdCBuZWVkLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCVRvb2sgb3V0IG1hbnkgJyNpZiBkZWZpbmVkKFdJTkVMSUIpJyBzZWN0aW9ucyB3aXRoIHRoZSBhc3NvY2lhdGVkCgljb21tZW50ICd0ZW1wb3JhcnkgZml4LCB1bnRpbCBMb2NhbCBtZW1vcnkgaXMgY29ycmVjdGx5IGltcGxlbWVudGVkIGluCglXSU5FTElCJywgc2luY2UgdGhlIGVmZmVjdGl2ZSB0cmFuc2xhdGlvbnMgYXJlIG5vdyBpbiAKCXRvb2xraXQvbWlzY3N0dWJzLmMuCglUb29rIG91dCB0aGUgI2lmbmRlZidzIEkgcHV0IGluIEVESVRfQ2xlYXJUZXh0LiAgV2hvZXZlciBtb2RpZmllZCB0aGlzCglmaWxlIGZpeGVkIChvciBhdCBsZWFzdCBwb3N0cG9uZWQpIHRoZSBidWcgSSBoYWQgZW5jb3VudGVyZWQuCgoJKiBbbG9hZGVyL3Rhc2suY10KCVB1dCBhbiAjaWZkZWYgaW4gVEFTS19DcmVhdGVUYXNrKCkgdGhhdCBoYXJkd2lyZXMgdGhlIGN1cnJlbnQgZHJpdmUgdG8KCUM6ICBUaGlzIHdpbGwgcHJvYmFibHkgY2F1c2UgYSBsb3Qgb2YgdHJvdWJsZSBpZiB0aGlzIGNoYW5nZSBpcwoJZm9yZ290dGVuIGluIHRoZSBmdXR1cmUsIGJ1dCBpdCB3aWxsIGxldCB0aGluZ3MgbGlrZSB0aGUgT3BlbkZpbGVOYW1lCglkaWFsb2cgd29yayBmb3Igbm93LgoKCSogW3Rvb2xraXQvbGlicmVzLmNdIFt0b29sa2l0L01ha2VmaWxlLmluXSBbdG9vbGtpdC9NYWtlZmlsZV0KCSAgW2luY2x1ZGUvbGlicmVzLmhdCglNYWRlIG5ldyBsaWJyZXMuYyBmaWxlLCB3aGljaCB3aWxsIGNvbnRhaW4gZnVuY3Rpb25zIGZvciBzdXBwb3J0aW5nCglhY2Nlc3NpbmcgcmVzb3VyY2VzIGJ5IG5hbWUgaW4gV0lORWxpYi4gICd3aW5lcmMnIHdpbGwgbmVlZCB0byBiZQoJY2hhbmdlZC4KCgkqIFt0b29sa2l0L2hlYXAuY10KCVJlZmluZWQgbWVtb3J5IHJvdXRpbmVzIHRvIGFsbG93IGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIExvY2FsQWxsb2MKCWFuZCBHbG9iYWxBbGxvYyBhbmQgYmV0d2VlbiBMb2NhbFNpemUgYW5kIEdsb2JhbFNpemUuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCURlZmluZWQgdGhlIEdldEN1cnJlbnRUaW1lIHJvdXRpbmUgaW4gd2luZG93cy9tZXNzYWdlLmMsIGFuZCByZW1vdmVkCgl0aGUgI2RlZmluZSBpbiB3aW5kb3dzLmguCgpNb24gTm92IDIwIDAwOjM2OjQyIE1FVCAxOTk1IFN2ZW4gVmVyZG9vbGFlZ2UgPHNraW1vQGRucy51ZnNpYS5hYy5iZT4KCgkqIFsqLypdCglBZGRlZCBuZXcgZGVidWdnaW5nIHR5cGUgREVCVUdfV0lOMzIgYW5kIERFQlVHX0VOVi4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglBZGRlZCB1bmRvY3VtZW50ZWQgR2V0RXhwV2luVmVyLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglQcmV2aW91cyBjb2RlIGRpZG4ndCBwb3AgcG9zc2libHkgY2hhbmdlZCAlZXNpLCAlZWRpIGFuZCAlZWR4Cglmcm9tIHRoZSBzdGFjay4KCQoJKiBbd2luMzIvYWR2YXBpLmNdCglBZGRlZCBHZXRVc2VyTmFtZUEuCgoJKiBbd2luMzIvY29kZV9wYWdlLmNdCglBZGRlZCBzdHViIGZvciBNdWx0aUJ5dGVUb1dpZGVDaGFyLgoKCSogW3dpbjMyL2NvbnNvbGUuY10KCUFkZGVkIFNldENvbnNvbGVDdHJsSGFuZGxlciBzdHViLgoKCSogW3dpbjMyL2ZpbGUuY10KCUFkZGVkIFJlYWRGaWxlIENyZWF0ZUZpbGVBIEdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlIHN0dWJzLgoJQWRkZWQgQ2xvc2VIYW5kbGUuCgoJKiBbd2luMzIvbWVtb3J5LmNdCglDaGFuZ2VkIFZpcnR1YWxBbGxvYyBhbmQgVmlydHVhbEZyZWUuCgoJKiBbd2luMzIvcHJvY2Vzcy5jXQoJQWRkZWQgRXhpdFByb2Nlc3MuCgpTdW4gTm92IDE5IDE3OjU0OjQyIDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUZpeGVkIGEgZmV3IGJyb2tlbiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglGaW5kUmVzb3VyY2UoKTogTmVlZCB0byBjaGVjayBmb3IgJyN4eHgnIHN0cmluZ3MgaGVyZS4KCgkqIFttaXNjZW11L2ludDIxLmNdCglGaW5kTmV4dCgpOiBSZXR1cm4gTVMtRE9TIGZpbGVuYW1lcyB1cHBlcmNhc2UuCgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCglDcmVhdGVJY29uKCksIENyZWF0ZUN1cnNvcigpOiBBZGRlZCBtaXNzaW5nIGVsZW1lbnQgdG8gQ1VSU09SSUNPTklORk8KCWluaXRpYWxpemVycy4KCQoJKiBbbWlzYy9maWxlLmNdCglfbG9wZW4oKTogRmlsZXMgb3BlbmVkIGluIE9GX1dSSVRFIG1vZGUgYXJlIHRydW5jYXRlZC4KCU9wZW5GaWxlKCk6IElnbm9yZSBPRl9SRUFEL09GX1dSSVRFL09GX1JFQURXUklURSB3aGVuIGZpbGVzIGFyZQoJY3JlYXRlZDsgdXNlIHJlYWQvd3JpdGUgbW9kZS4KCQoJKiBbbWlzYy9wcm9maWxlLmNdCglsb2FkKCk6IFJld3JpdHRlbi4KCQoJKiBbbWlzYy9jb21tZGxnLmNdCglGaXhlZCBiYWQgY2FsbCB0byBzdHJuY3B5KCkgdGhhdCBzbWFzaGVkIHRoZSBzdGFjay4KCgkqIFtjb250cm9scy9jb21iby5jXSBbd2luZG93cy93aW5wb3MuY10gW21lbW9yeS9zZWxlY3Rvci5jXQoJT3BlcmF0b3IgcHJlY2VkZW5jZSBmaXhlcy4gUGVvcGxlIHdobyB1c2UgZ2NjIDIuNy4xIGRvbid0IG5lZWQgYQoJZGVidWdnZXIgOi0pCgkKCSogW2lmMTYzMi9nZGkuc3BlY10gW29iamVjdHMvcGFsZXR0ZS5jXQoJQWRkIFJlc2l6ZVBhbGV0dGUoKSBhbmQgQW5pbWF0ZVBhbGV0dGUoKSBzdHVicy4gVGhleSBkb24ndCBkbyBhbnl0aGluZywKCWJ1dCBzb21ldGltZXMgdGhhdCdzIGdvb2QgZW5vdWdoLgoKRnJpIE5vdiAxNyAwOToxMDozNSBHTVQgMTk5NSAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbaW5jbHVkZS93aW5lLmhdIFtpbmNsdWRlL3JlZ2lzdGVycy5oXSBbaW5jbHVkZS93aW5zb2NrLmhdCiAgICAgICAgQWRkZWQgZGVmaW5pdGlvbnMgZm9yIFVuaXh3YXJlLgoKCSogW2xvYWRlci9zaWduYWwuY10gW21pc2MvY29tbS5jXSBbbWlzYy93aW5zb2NrZXQuY10KCU1pc2MuIGZpeGVzIGZvciBVbml4d2FyZS4KCgkqIFtsb2FkZXIvdGFzay5jXQogICAgICAgIE1hZGUgYXNzaWduZW10cyB0byBjb250ZXh0IGluIEluaXRUYXNrIGZvciByZWdpc3RlcnMgdXNlIHRoZSBtYWNyb3MKICAgICAgICBmcm9tIHJlZ2lzdGVycy5oIHRvIG1ha2UgdGhlbSBtb3JlIHBvcnRhYmxlLiAoTmVlZGVkIGZvciBVbml4d2FyZSkKCgkqIFt0b29scy9idWlsZC5jXQoJRml4ZWQgcmVnaXN0ZXIgYWNjZXMgcm91dGluZXMgdG8gd29yayBvbiBVbml4d2FyZS4gQml0IGdydWJieSBidXQKIAlpdCBzZWVtcyB0byB3b3JrLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUVESVRfV01fTkNDcmVhdGUgYWxsb2NhdGVzIGxvY2FsIGhlYXAgaWYgaGFzbid0IGJlZW4gcHJldmlvdXNseQoJYWxsb2NhdGVkLgoJCgkqIFttaXNjZW11L2ludDIxLmNdCglta2RpciBub3cgY3JlYXRlcyBkaXJlY3Rvcnkgd2l0aCBwZXJtaXNzaW9uIHRvIGFjY2VzcyBpdC4KCgkqIFttaXNjL2Rvc19mcy5jXQoJbWtkaXIgbm93IGNyZWF0ZXMgZGlyZWN0b3J5IHdpdGggcGVybWlzc2lvbiB0byBhY2Nlc3MgaXQuCglET1Nfb3BlbmRpciBub3cgdXNlcyBsaW5rZWQgbGlzdCBvZiBkaXJlbnRzIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggCglyZWFsbG9jIGNoYW5naW5nIGFkZHJlc3Mgb2YgbWFsbG9jZWQgbWVtb3J5LgoKVGh1IE5vdiAxNiAxMjo0NzoxMyAxOTk1ICBNaWNoYWVsIFBhdHJhICA8cGF0cmFAaXRwMS5QaHlzaWsuVFUtQmVybGluLkRFPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU1FTlVfQ2FsY0l0ZW1TaXplKCk6IEZpeGVkIGhhbmRsaW5nIG9mIGVtcHR5IG1lbnUgaXRlbXMuCgpTYXQgTm92IDExIDIxOjQ2OjU0IDE5OTUgIEhhbnMgZGUgR3JhYWZmICA8Z3JhYWZmQHR3aTcyLnR3aS50dWRlbGZ0Lm5sPgoKCSogW21pc2MvZmlsZS5jXQoJSW4gT3BlbkZpbGUsIHVubGluayBzaG91bGQgYmUgZG9uZSBvbiB0aGUgdW5peCBmaWxlbmFtZS4KClNhdCBOb3YgMTEgMTY6NDM6MjkgMTk5NSAgQ2FtZXJvbiBIZWlkZSAgKGhlaWRlQGVlLnVhbGJlcnRhLmNhKQoKICAgICAgICAqIFtpbmNsdWRlL2hhbmRsZTMyLmhdCiAgICAgICAgTmV3IGhlYWRlciBmaWxlIGNvbnRhaW5pbmcgaW50ZXJuYWwgV2luMzIga2VybmVsIGhhbmRsZQogICAgICAgIGluZm9ybWF0aW9uLgoKICAgICAgICAqIFt3aW4zMi9maWxlLmNdCiAgICAgICAgQWRkZWQgUmVhZEZpbGUsIENyZWF0ZUZpbGUsIGFuZCBDbG9zZUZpbGVIYW5kbGUsIGFuZCBkaWQKICAgICAgICBzb21lIHJlb3JnYW5pemluZyB0byBtYXRjaCB0aGUgbmV3IGhhbmRsZSBhbGxvY2F0aW9uIHNjaGVtZS4KCiAgICAgICAgKiBbd2luMzIvaW5pdC5jXQogICAgICAgIEFkZGVkIENsb3NlSGFuZGxlIGFuZCB0aGUgY3JlYXRpb24gb2Ygc3RhbmRhcmQgSS9PIGhhbmRsZXMuCgogICAgICAgICogW3dpbjMyL29iamVjdF9tZ3QuY10KICAgICAgICBOZXcgbW9kdWxlIGZvciBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIFdpbjMyIGtlcm5lbCBoYW5kbGVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGcmkgTm92ICAzIDIwOjA4OjE3IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFtjb25maWd1cmUuaW5dCglBdHRlbXB0IHRvIGNoZWNrIGZvciAtbGkzODYgb24gTmV0QlNELiBQbGVhc2UgdGVzdCB0aGlzLgoKTW9uIE9jdCAzMCAxMjo0MDozMiBFU1QgMTk5NSAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFsqLypdCglFbGltaW5hdGVkIHZhcmlvdXMgd2FybmluZ3Mgd2l0aCBlaXRoZXIgZXhwbGljaXQgY2FzdHMgb3IgbW9yZQoJYWNjdXJhdGUgdmFyaWFibGUvcGFyYW1ldGVyIGRlY2xhcmF0aW9ucyAoZS5nLiBJTlQgaW5zdGVhZCBvZiBzaG9ydAoJb3IgV09SRCkuCglDaGFuZ2VkIG1hY3JvcyAnbWluJyBhbmQgJ21heCcgdG8gJ01JTicgYW5kICdNQVgnLCBzaW5jZSB0aGV5J3JlCgltYWNyb3MuCgoJKiBbY29udHJvbHMvZWRpdC5jXSBbd2luZG93cy9kZWZkbGcuY10KCUFkZGVkICcjaWZkZWYgU1VQRVJGTFVPVVNfRlVOQ1RJT05TJyB3cmFwcGVycyBhcm91bmQgZnVuY3Rpb24KCWRlZmluaXRpb24gb2YgRURJVF9LZXlWU2Nyb2xsRG9jLCBFRElUX1RleHRMaW5lTnVtYmVyLCBhbmQKCURFRkRMR19GaW5kRGVmQnV0dG9uIHRvIGF2b2lkIHdhcm5pbmdzLgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXSBbY29udHJvbHMvc2Nyb2xsLmNdIFt3aW5kb3dzL2RlZnduZC5jXQoJICBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQ29udmVydGVkIE1BS0VQT0lOVCBtYWNybyBjYWxsIHRvIG1hbnVhbCBjb252ZXJzaW9uLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJRm9yIFdJTkVMSUIzMiwgc3RydWN0dXJlcyBQT0lOVCwgU0laRSwgYW5kIFJFQ1QgaGF2ZSBMT05HIG1lbWJlcnMKCWluc3RlYWQgb2YgSU5ULiAgVGhpcyBhbHNvIGludmFsaWRhdGVzIHRoZSBtYWNybyBNQUtFUE9JTlQoKSwgd2hpY2gKCWlzIG5vdCBzdXBwb3J0ZWQgaW4gV2luMzIuICBBbHNvIGRlZmluZWQgdGhlIFBPSU5UUyBzdHJ1Y3R1cmUgKFNIT1JUCgltZW1iZXJzKSBhbmQgdGhlIE1BS0VQT0lOVFMgbWFjcm8uCgoJKiBbbWlzYy9jb21tZGxnLmNdCglDaGFuZ2VkIGEgbG90IG9mICdzdHJjcHknIGNhbGxzIHRvICdzdHJuY3B5JyBjYWxscy4gIEknbSBkZXNwZXJhdGUgdG8KCWZpbmQgdGhpcyBtZW1vcnkgYnVnLCBhbmQgdGhpcyBzaG91bGQgYmUgZG9uZSBhbnl3YXkuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJV2VsbCwgdGhlIGFsdGVyYXRpb24gbWVudGlvbmVkIGFib3ZlIGRpZG4ndCBkbyBpdCwgYnV0ICNpZmRlZidpbmcgb3V0CglhIGZldyBsaW5lcyBpbiBFRElUX0NsZWFyVGV4dCBkaWQuICBUaGlzIGxlYWRzIHRvIGJ1Z3MsIGJ1dCBmb3Igbm93LAoJaXQncyBiZXR0ZXIgdGhhbiBiaXp6YXJlIG1lbW9yeSB0cm91Ymxlcy4KCgkqIFt0b29sa2l0L21pc2NzdHVicy5jXQoJUmVtb3ZlZCB3YXJuaW5nIG1lc3NhZ2VzIGluIEdMT0JBTF9DcmVhdGVCbG9jaygpLCBHTE9CQUxfRnJlZUJsb2NrKCksCglhbmQgUkVMQVkzMl9HZXRFbnRyeVBvaW50KCkuICBUaGVzZSBhcmUgdGhlIG1vc3QgcG9wdWxhciB3YXJuaW5ncywgYW5kCgl0aGVpciBjdXJyZW50IGltcGxlbWVudGF0aW9uIHNlZW1zIGZpbmUuCgpTYXQgT2N0IDI4IDA5OjM5OjE4IDE5OTUgIEpvY2hlbiBLYXJyZXIgPGNpcDMwN0B3cGF4MDEuUGh5c2lrLlVuaS1XdWVyemJ1cmcuREU+CgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCglGaXggZm9yICJicm9rZW4iIFggc2VydmVycyB0aGF0IGludmVydCBtYXNrZWQgY3Vyc29yIGNvbG9ycy4KCkZyaSBPY3QgMjcgMTk6Mjc6MjEgMTk5NSAgQWxleCBLb3JvYmthICA8YWxleEBwaG02LnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9kaWFsb2cuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglSZW1vdmUgdW5uZWNlc3NhcnkgaXRlbXMgZnJvbSB0aGUgc3lzdGVtIG1lbnUuCgpUaHUgT2N0IDI2IDA1OjAzOjAzIE1FVCAxOTk1ICBQaGlsaXBwZSBEZSBNdXl0ZXIgPHBoZG1AaW5mby51Y2wuYWMuYmU+CgoJKiBbb2JqZWN0cy9jb2xvci5jXSBbb2JqZWN0cy9wYWxldHRlLmNdCglNYWtlIEdldE5lYXJlc3RDb2xvciByZXR1cm4gYSBSR0IgdmFsdWUgaW5zdGVhZCBvZiBhIHBpeGVsIHZhbHVlLgoKV2VkIE9jdCAyNSAyMzozMzozOSAxOTk1ICAgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbY29udHJvbHMvZGVza3RvcC5jXVtjb250cm9scy9tZW51LmNdW2luY2x1ZGUvbWVudS5oXQoJQ2hhbmdlZCBXT1JEIHBhcmFtZXRlcnMgdG8gVUlOVCBwYXJhbWV0ZXJzLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCU1hZGUgVUlOVCAzMmJpdCBmb3IgV0lORUxJQi4KCgkqIFtsb2FkZXIvbWFpbi5jXQoJRGlzYWJsZWQgUkVMQVkzMl9Jbml0IGFuZCBNT0RVTEVfSW5pdCBmb3IgV0lORUxJQi4KCgkqIFttaXNjL21haW4uY10KCUFzc3VtZSBDUFUzODYgZm9yIFdJTkVMSUIuCgoJKiBbcmMvd2luZXJjXQoJYWRkX3BvcHVwOiBzZXQgTUZfUE9QVVAgZmxhZyBvbiBtZW51IGl0ZW0uCgoJKiBbdG9vbGtpdC9NYWtlZmlsZS5pbl1bdG9vbGtpdC9oZWxsbzMuY11bdG9vbGtpdC9oZWxsbzNyZXMuY10KCUFkZCByZXNvdXJjZSBkZW1vIGhlbGxvMyBmb3IgV0lORUxJQi4KCU5ldyBmaWxlIFJFQURNRS5yZXNvdXJjZXMuCgoJKiBbdG9vbGtpdC9taXNjc3R1YnMuY10KCUFkZCBhIGNhc2UgZm9yIDE3LgoKVHVlIE9jdCAxNyAxNToxMzoxMCBJU1QgMTk5NSAgSXRhaSBOYWhzaG9uIDxuYWhzaG9uQHZuZXQuaWJtLmNvbT4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglEbyBub3QgYXBwZW5kIC5leGUgaWYgdGhlIGZpbGUgbmFtZSBhbHJlYWR5IGhhcyBhbiBleHRlbnNpb24uCgoJKiBbbWlzYy9wcm9maWxlLmNdCglBdm9pZCBjcmVhdGluZyBhIGZpbGUgd2l0aCBhIGp1bmsgbmFtZSBpZiBhIC5pbmkgZmlsZSBkb2VzIG5vdAoJZXhpc3QuCgoJKiBbaWYxNjMyL2dkaS5zcGVjXSBbaWYxNjMyL3VzZXIuc3BlY10gW2lmMTYzMi9kdW1teS5jXQoJQWRkZWQgYSBsb3Qgb2YgZHVtbXkgc3R1YnMgZm9yIFdpbmRvd3MgSGVicmV3IHZlcnNpb24uCgpUdWUgT2N0IDE3IDAxOjAzOjI0IDE5OTUgV2lsbGlhbSBNYWdybyA8d21hZ3JvQHRjLmNvcm5lbGwuZWR1PgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJRml4IGZvciBidXR0b25zIHdpdGggbm8gbGFiZWwuCgoJKiBbY29udHJvbHMvY29tYm8uY11bY29udHJvbHMvbGlzdGJveC5jXQoJRml4ZXMgZm9yIHNjcm9sbGJhciBwb3NpdGlvbmluZy4gIE5vdyBkaXNhcHBlYXJzIGNvcnJlY3RseQoJZm9yIHNob3J0IGxpc3RzLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBkaWZmZXJlbnRseSB3aGVuIGJ1aWxkaW5nIGFzIGxpYnJhcnkuCgoJKiBbY29udHJvbHMvc3RhdGljXQoJRG9uJ3QgZGVzdHJveSBvbGQgaWNvbiBiZWZvcmUgZHJhd2luZyBuZXcgaWNvbi4gKEZpeGVzIGxhbmRzY2FwZS8KCXBvcnRyYWl0IHRvZ2dsZSBpY29uIGluIHByaW50IGRpYWxvZy4pCgoJKiBbaWYxNjMyL2dkaS5zcGVjXQoJTmV3IGZ1bmN0aW9ucyBTZXRNZXRhRmlsZUJpdHMgYW5kIEdldE1ldGFGaWxlQml0cwoKCSogW2luY2x1ZGUvc3lzbWV0cmljcy5oXSBbd2luZG93cy9zeXNtZXRyaWNzLmNdCglBZGQgc3VwcG9ydCBmb3IgR2V0U3lzdGVtTWV0cmljcyhTTV9DTUVUUklDUykgPT0gU01fQ01FVFJJQ1MKCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCU1FVEFfRVhUVEVYVE9VVCwgbm90IE1FVEFfU0VUVEVYVE9VVAoJZGVmaW5lIEdldEN1cnJlbnRUaW1lIGFzIEdldFRpY2tDb3VudCAoZm9yIHdpbmUgbGlicmFyeSkKCgkqIFtsb2FkZXIvbWFpbi5jXQoJRG9uJ3QgaW5pdGlhbGl6ZSBidWlsdC1pbiBtb2R1bGVzIGluIHdpbmUgbGlicmFyeQoKCSogW21lbW9yeS9sb2NhbC5jXQoJTG9jYWxSZUFsbG9jIHdhcyBkZWZpbmVkIGluY29ycmVjdGx5LiBTd2FwIGZsYWdzIGFuZCBzaXplIGFyZ3VtZW50cy4KCgkqIFttaXNjL21haW4uY10KCUFsd2F5cyByZXBvcnQgQ1BVVFlQRT00IHRvIHdpbmUgbGlicmFyeS4KCgkqIFtvYmplY3RzL2RpYi5jXQoJUkxFOCBpbWFnZXMgd2VyZSBtaXNzaW5nIHRvcCBsaW5lIHdoZW4gZGVjb21wcmVzc2VkLgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCVNldE1ldGFGaWxlQml0cyBhbmQgR2V0TWV0YUZpbGVCaXRzIGltcGxlbWVudGVkLiAgV29ya3Mgd2hlbiBjYWxsZWQKCWZyb20gd2luaGVscC4gIE1vcmUgdGVzdGluZyBuZWVkZWQuICBWYXJpb3VzIG1lbW9yeSBsZWFrcyBwbHVnZ2VkLgoJVmFyaW91cyBvdGhlciBidWcgZml4ZXMuICBOZXcgbWV0YWZpbGUgb3BlcmF0aW9ucyBhZGRlZCBpbgoJUGxheU1ldGFGaWxlUmVjb3JkOiBDcmVhdGVQYWxldHRlLCBTZXRUZXh0QWxpZ24sIFNlbGVjdFBhbGV0dGUsCglTZXRNYXBwZXJGbGFncywgUmVhbGl6ZVBhbGV0dGUsIEV4dFRleHRPdXQsIEVzY2FwZS4gIFRlc3RpbmcgbmVlZGVkLgoKCSogW3Rvb2xraXQvaGVhcC5jXQoJTG9jYWxVbkxvY2sgY2hhbmdlZCB0byBMb2NhbFVubG9jawoKU3VuIE9jdCAxNSAyMTo1NTozMyAxOTk1ICBBbmFuZCBLdW1yaWEgPGFrdW1yaWFAb3plbWFpbC5jb20uYXU+CgkKCSogW21pc2Mvd2luc29jay5jXSAKCVJldHVybiB0aGUgY29ycmVjdCBlcnJvciBudW1iZXIsIGZvciBob3N0IGxvb2t1cCBvcGVyYXRpb25zLgoJQWxzbywgY29ycmVjdCB0aGUgcHJvYmxlbSB3aXRoIHNlbmRfbWVzc2FnZS4KCkZyaSBPY3QgMTMgMTk6MDQ6MzUgMTk5NSAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KCgkqIFtNYWtlZmlsZS5pbl0KCVVzaW5nIG5tJ3MgYnVpbHQtaW4gc29ydGluZy4KCgkqIFsqLyouY10KCVVzZSB4bWFsbG9jIGZvciBtYWxsb2MgYW5kIHhyZWFsbG9jIGZvciByZWFsbG9jIGluIGFsbCB1bmdhcmRlZAoJY2FzZXMuCgoJKiBbZGVidWdnZXIvZGJnLnldCglIYW5kbGUgQy1saWtlIGV4cHJlc3Npb25zLiAgQ2xlYW4tdXAuCgoJKiBbZGVidWdnZXIvZGVidWcubF0KCUxvdHMgb2YgbmV3IHRva2VucyBmb3IgZXhwcmVzc2lvbnMuCgoJKiBbZGVidWdnZXIvaW5mby5jXQoJSW1wbGVtZW50ICJsaXN0IiBjb21tYW5kIGZvciBkaXNhc3NlbWJsaW5nLgoKCSogW21pc2Mvb2xlMm5scy5jXQoJSW1wbGVtZW50IG1vcmUgRGFuaXNoIHN0dWZmLgoKRnJpIE9jdCAgNiAxMDozOTozOSAxOTk1IFJhbSdvbiBHYXJjJ2lhIDxyYW1vbkBpZTMuY2x1YnMuZXRzaXQudXBtLmVzPgoKCSogW2xvYWRlci9tb2R1bGUuY10KCVVwZGF0ZWQgc2VsZi1sb2FkaW5nIG1vZHVsZXMgdG8gc3VwcG9ydCBmb3IgbmV3IDMyIGJpdCAKCXN0YWNrIGZyYW1lcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE9jdCAgMSAxNTo0ODozNCAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYz4KCgkqIFtjb250cm9scy9tZW51LmNdCglGaXhlZCBHZXRNZW51U3RyaW5nKCkgZm9yIG5vbi1zdHJpbmcgaXRlbXMuCgoJKiBbZGVidWdnZXIvKi5jXQoJRmlyc3QgYXR0ZW1wdCB0byBjaGVjayB2YWxpZGl0eSBvZiBwb2ludGVycyBiZWZvcmUgbWVtb3J5CglhY2Nlc3Nlcy4gRm9yIG5vdyBvbmx5IHNlZ21lbnRlZCBwb2ludGVycyBhcmUgY2hlY2tlZC4KCgkqIFtkZWJ1Z2dlci9kYmcueV0gW21lbW9yeS9sZHQuY10KCUFkZGVkIHBvc3NpYmlsaXR5IHRvIGR1bXAgb25seSBvbmUgc2VnbWVudCB3aXRoICdpbmZvIHNlZ21lbnQnLgoKCSogW2luY2x1ZGUvYml0bWFwcy9vY3JfKl0KCUFkZGVkIGFsbCBPRU0gY3Vyc29ycyBhcyBYUE0gYml0bWFwcy4KCgkqIFtpbmNsdWRlL2N1cnNvcmljb24uaF0gW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJUmV3cm90ZSBhbGwgY3Vyc29yIGFuZCBpY29uIG1hbmFnZW1lbnQgdG8gdXNlIHRoZSBzYW1lIG1lbW9yeQogCWxheW91dCBhcyBXaW5kb3dzLCBhbmQgdG8gZmFjdG9yIGNvbW1vbiBjb2RlIGJldHdlZW4gaWNvbnMgYW5kCgljdXJzb3JzLiBJbXBsZW1lbnRlZCBpY29uIGRpcmVjdG9yeSBsb29rdXAgdG8gZmluZCB0aGUgYmVzdAoJbWF0Y2hpbmcgaWNvbiAoaS5lLiB0aGUgY29sb3Igb25lKS4KICAJSW1wbGVtZW50ZWQgQ29weUN1cnNvcigpIGFuZCBEdW1wSWNvbigpLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUZvciBkaXNhYmxlZCBidWlsdC1pbiBtb2R1bGVzLCB3ZSBub3cgdHJ5IHRvIGxvYWQgdGhlIFdpbmRvd3MgRExMCglmaXJzdCwgYW5kIGlmIHRoaXMgZmFpbHMgd2UgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBidWlsdC1pbiBtb2R1bGUKCWFueXdheS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglGaXhlZCBHbG9iYWxIYW5kbGUoKSB0byByZXR1cm4gdGhlIGNvcnJlY3Qgc2VsZWN0b3IgaW4gdGhlIGhpZ2gKCXdvcmQgZXZlbiBpZiB3ZSBhcmUgcGFzc2VkIGEgaGFuZGxlIGluIHRoZSBmaXJzdCBwbGFjZS4KCgkqIFttaXNjZW11L2luc3RyLmNdCglUYWtlIGludG8gYWNjb3VudCB0aGUgc2l6ZSBvZiB0aGUgb3BlcmFuZCBhbmQgb2YgdGhlIHN0YWNrIHNlZ21lbnQKCXdoZW4gaW5jcmVtZW50aW5nIHRoZSBzdGFjayBwb2ludGVyLgoJQXZvaWQgcmVmZXJlbmNpbmcgRlNfcmVnIGFuZCBHU19yZWcgb24gKkJTRC4KCgkqIFtvYmplY3RzL2RpYi5jXQoJQWxsIERJQiBmdW5jdGlvbnMgbm93IGFjY2VwdCBhIEJJVE1BUENPUkVIRUFERVIgZm9ybWF0IGJpdG1hcC4KCU1vbm9jaHJvbWUgRElCcyBhcmUgY3JlYXRlZCBhcyBtb25vY2hyb21lIGJpdG1hcCBpZmYgdGhleSBhcmUKCWJsYWNrIGFuZCB3aGl0ZS4KCgkqIFtvYmplY3RzL29lbWJpdG1hcC5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgT0VNIGN1cnNvcnMsIGNoYW5nZWQgT0JNX0xvYWRJY29uIHRvIHVzZSB0aGUgbmV3CglpY29uIG1lbW9yeSBsYXlvdXQuCgoJKiBbcmMvc3lzcmVzX0ZyLnJjXQoJQWRkZWQgRnJlbmNoIFtGcl0gbGFuZ3VhZ2Ugc3VwcG9ydC4KCgkqIFt3aW4zMi9lbnZpcm9ubWVudC5jXQoJRml4ZWQgR2V0Q29tbWFuZExpbmVBKCkgdG8gdXNlIGN1cnJlbnQgUERCLgoKCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3Mvd2lucG9zLmNdCglTaW11bGF0ZSBhIG1vdXNlIG1vdGlvbiBldmVudCB1cG9uIFNldFdpbmRvd1BvcygpIHRvIGZvcmNlIHRoZQoJY3Vyc29yIHRvIGJlIHNldCBjb3JyZWN0bHkuCgpTYXQgU2VwIDMwIDE3OjQ5OjMyICBDYW1lcm9uIEhlaWRlICAoaGVpZGVAZWUudWFsYmVydGEuY2EpCgoJKiBbd2luMzIvKl0KICAgICAgICBOZXcgV2luMzIga2VybmVsIGZ1bmN0aW9uczogR2V0QUNQLCBHZXRDUEluZm8sCiAJR2V0RW52aXJvbm1lbnRWYXJpYWJsZUEsIEdldEZpbGVUeXBlLCBHZXRMYXN0RXJyb3IsIEdldE9FTUNQLAogCUdldFN0YXJ0dXBJbmZvQSwgR2V0VGltZVpvbmVJbmZvcm1hdGlvbiwgU2V0RW52aXJvbm1lbnRWYXJpYWJsZSwKIAlTZXRGaWxlUG9pbnRlciwgU2V0TGFzdEVycm9yLCBWaXJ0dWFsQWxsb2MsIFZpcnR1YWxGcmVlLAogCVdyaXRlRmlsZS4gIENvbXBsZXRlZCBpbXBsZW1lbnRhdGlvbnMgb2YgR2V0Q29tbWFuZExpbmVBLgoKCSogW2luY2x1ZGUva2VybmVsMzIuaF0KICAgICAgICBOZXcgZmlsZS4KCgkqIFtsb2FkZXIvbWFpbi5jXQogICAgICAgIENhbGwgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIFdpbjMyIGRhdGEgKGRvZXNuJ3QgY3VycmVudGx5IGRvCiAJYW55dGhpbmcpLgoKCSogW21pc2MvbWFpbi5jXQoJSW1wbGVtZW50ZWQgR2V0RW52aXJvbm1lbnRWYXJpYWJsZUEsIFNldEVudmlyb25tZW50VmFyaWFibGVBLgoKU2F0IFNlcCAzMCAwMDoyNjo1NiAxOTk1ICBOaWVscyBkZSBDYXJwZW50aWVyICA8bmllbHNAY2luZHkuZXQudHVkZWxmdC5ubD4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXVttaXNjZW11L2VtdWxhdGUuY11bbG9hZGVyL21vZHVsZS5jXQoJICBbbWlzYy9jb21tZGxnLmNdCglNaXNjLiBidWcgZml4ZXMKCkZyaSBTZXAgMjkgMTY6MTY6MTMgMTk5NSAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFsqLypdCglGb3IgV2luZWxpYiwgZXhwbGljaXQgY2FzdHMgaGF2ZSBiZWVuIHBsYWNlZCB3aGVyZSB3YXJuaW5ncyB3ZXJlCiAJdXN1YWxseSBnZW5lcmF0ZWQuCglwcmludGYgZm9ybWF0cyB3aGljaCBnaXZlIHRoZSBmb3JtYXQgZm9yIHByaW50aW5nIGEgaGFuZGxlIGFzCiAJIiUwNHgiIG9yIHNvbWV0aGluZyBzaW1pbGFyIGhhdmUgYmVlbiBjaGFuZ2VkIHRvIHVzZSB0aGUgTlBGTVQKIAltYWNybyBkZWZpbmVkIGluIGluY2x1ZGUvd2ludHlwZXMuaC4gIFNvbWUgdGltZXMsIGV4cGxpY2l0IGNhc3RzCiAJd2VyZSBhbHNvIG5lY2Vzc2FyeS4KICAgICAJUGFyYW1ldGVyLCBmaWVsZCwgYW5kIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBoYXZlIGJlZW4gbWFkZSBtb3JlCiAJZXhhY3QsIHN1Y2ggYXMgY29udmVydGluZyAnV09SRCB3UGFyYW0nIHRvICdXUEFSQU0gd1BhcmFtJyBvcgogCSdXT1JEIGhGb250JyB0byAnSEZPTlQgaEZvbnQnLgogICAgIAlBbnkgY2FsbCBvZiB0aGUgZm9ybSBHZXRXaW5kb3dXb3JkKGh3bmQsR1dXX0hJTlNUQU5DRSkgaGFzIGJlZW4KIAlyZXBsYWNlZCB3aXRoIGEgY2FsbCB0byBXSU5fR2V0V2luZG93SW5zdGFuY2UoaHduZCkuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUFkZGVkIFdJTkVMSUIzMiBzdXBwb3J0IGluIENMQm94R2V0Q29tYm8oKS4KCgkqIFtpbmNsdWRlL2RpYWxvZy5oXQoJQ29tbWVudGVkIG91dCB0aGUgJyNpZm5kZWYgV0lORUxJQicgYXJvdW5kIHRoZSAnI3ByYWdtYSBwYWNrKDEpJy4KCXdpbmVsaWIgbmVlZHMgdGhlIHBhY2tpbmcgYXMgd2VsbCAoZS5nLiB3aGVuIGFjY2Vzc2luZyByZXNvdXJjZXMKCWxpa2Ugc3lzcmVzX0RJQUxPR19TSEVMTF9BQk9VVF9NU0dCT1gpLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJR290IHJpZCBvZiB0aGUgRlthLWtdIG1hY3Jvcywgd2hpY2ggd2VyZSBjbHV0dGVyaW5nIHVwIHRoZSBnbG9iYWwKCW5hbWVzcGFjZS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW3dpbmRvd3MvZGVmd25kLmNdCglBZGRlZCBXaW4zMiBtZXNzYWdlcyBXTV9DVExDT0xPUiouCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJUHV0IGluIHByZXByb2Nlc3NvciAnI2RlZmluZSBXSU5FTElCMzInIGlmIGFwcHJvcHJpYXRlIGFuZCBjaGFuZ2VkCgl0aGUgdHlwZXMgb2Ygc29tZSB0eXBlZGVmcyAoV1BBUkFNLCBIQU5ETEUpIGJhc2VkIG9uIHRoaXMuCgkKCSogW2xvYWRlci9tb2R1bGUuY10gW3Rvb2xraXQvbWlzY3N0dWJzLmNdCglBZGRlZCAjaWZkZWYnZCBwb3J0aW9uIGluIExvYWRNb2R1bGUgdG8gaGFuZGxlIGxvYWRpbmcgYSBXSU5FbGliCgltb2R1bGUgKGFscmVhZHkgbG9hZGVkLCBqdXN0IGluaXQgdmFsdWVzKS4gICcjaWZkZWYnZWQgb3V0IHRoZQoJZGVmaW5pdGlvbiBmb3IgR2V0V25kUHJvY0VudHJ5MTYgYW5kIGFkZGVkIGEgbmV3IHZlcnNpb24gdG8KCXRvb2xraXQvbWlzY3N0dWJzLmMuCgoJKiBbbWlzYy9zaGVsbC5jXQoJQWRqdXN0ZWQgdGhlIGxlbmd0aHMgb2YgQXBwTmFtZSBhbmQgQXBwTWlzYyBmcm9tIDUxMiw1MTIgdG8gMTI4LDkwNi4KCVNhbWUgYW1vdW50IG9mIHRvdGFsIHN0b3JhZ2UsIGJ1dCBtdWNoIG1vcmUgcmVhc29uYWJsZS4gIEFsc28sIGNoYW5nZWQKCWNhbGxzIHRvIHN0cmNweSgpIGluIFNoZWxsQWJvdXQoKSB0byBjYWxscyB0byBzdHJuY3B5KCkgaW5zdGVhZC4KCVRoaXMgd2FzIGEgZGlmZmljdWx0IGJ1ZyB0byB0cmFjayBkb3duLCBidXQgdGhlIEFwcE1pc2MgZmllbGQgd2FzCgliZWluZyBpbml0aWFsaXplZCB3aXRoIHRoZSBjb250cmlidXRlcnMgdGV4dCwgd2hpY2ggd2FzIG11Y2ggbGFyZ2VyCgl0aGFuIDUxMiBjaGFyYWN0ZXJzLgoKCSogW3Rvb2xraXQvYXRvbS5jXQoJTmV3IGZpbGUgZm9yIGF0b20taGFuZGxpbmcgZnVuY3Rpb25zLiAgQ29waWVkIGZyb20gbWVtb3J5L2F0b20uYyBhbmQKCXRoZW4gaGVhdmlseSBtb2RpZmllZC4gIFJpZ2h0IG5vdywgaXQncyBqdXN0IGEgbGlua2VkIGxpc3Qgb2YgYXRvbXMuCglDb25zaWRlciBpdCBhcyBhIGhhc2ggdGFibGUgd2l0aCBqdXN0IG9uZSBlbnRyeS4gIEl0J3MgZWFzaWx5IGNoYW5nZWQKCWxhdGVyLgoKCSogW3Rvb2xraXQvaGVhcC5jXQoJQ29tbWVudGVkIG91dCB0aGUgaGVhcCBmdW5jdGlvbnMgd2l0aCBhICIjaWZkZWYgV0lORUxJQjE2IiBhbmQgcHV0IGluCglhIFdpbjMyIHZlcnNpb24gKHdoaWNoIGlzIGJhc2ljYWxseSBhIG1vZGlmaWVkIGNvcHkpLgoKCSogW3Rvb2xraXQvc3VwLmNdIFt0b29sa2l0L21pc2NzdHVicy5jXQoJTW92ZWQgdGhlIHN0dWZmIEkgcHV0IGluIHRvb2xraXQvc3VwLmMgaW50byB0b29sa2l0L21pc2NzdHVicy5jIGFuZAoJYWRkZWQgcXVpdGUgYSBmZXcgbW9yZSBzdHVicy4KCgkqIFt0b29sa2l0L3dpbm1haW4uY10KCVJlYXJyYW5nZWQgc3RhcnR1cCBjb2RlIGluIF9XaW5NYWluLiAgSSB0aGluayB0aGlzIHdpbGwgd29yay4KCgkqIFt0b29sa2l0L01ha2VmaWxlLmluXQoJQWRkZWQgdGFyZ2V0cyBmb3IgJ2hlbGxvJyBhbmQgJ2hlbGxvMicgaW4gY2FzZSBhbnlvbmUgY2FyZXMgdG8gdHJ5CglvdXQgdGhlIHNhbXBsZSBwcm9ncmFtcy4KCldlZCBTZXAgMjcgMjM6MTM6NDMgMTk5NSAgQW5hbmQgS3VtcmlhIDxha3VtcmlhQG96ZW1haWwuY29tLmF1PgoJCgkqIFttaXNjZW11L2ludDJmLmNdIFttaXNjZW11L3Z4ZC5jXSBbaWYxNjMyL3dpbnByb2NzLnNwZWNdCglGaXJzdCBhdHRlbXB0IGF0IHN1cHBvcnQgZm9yIHNvbWUgVnhEcy4gQ29tbSwgU2hlbGwgYW5kIFBhZ2VmaWxlLgoKVHVlIFNlcCAyNiAyMTozNDo0NSAxOTk1ICBIYW5zIGRlIEdyYWFmZiAgPGdyYWFmZkB0d2k3Mi50d2kudHVkZWxmdC5ubD4KCgkqIFttaXNjL2Rvc19mcy5jXQoJRE9TX1NpbXBsaWZ5UGF0aDogQWxzbyByZW1vdmUgIi8uLyIgZnJvbSBwYXRoLiAoSGFwcGVucyB3aGVuCiAJc3RhcnRpbmcgYXBwbGljYXRpb25zIGxpa2UgJ3dpbmUgLi9leGNlbC5leGUnKQoKU2F0IFNlcCAyMyAyMzozMjo0MCAxOTk1ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgoKCSogW2NvbmZpZ3VyZS5pbl0KCUF2b2lkIHJlbGF0aXZlIHBhdGggZm9yIHdpbmUuaW5pLgoKCSogW3JjL3N5c3Jlc19EYS5yY10KCVN1cHBvcnQgZm9yIERhbmlzaCBbRGFdIGxhbmd1YWdlLgoKCSogW21pc2MvbWFpbi5jXSBbbWlzY2VtdS9jcHUuY10KCVJldHVybiB0aGUgcHJvY2Vzc29yIHdlJ3JlIHJ1bm5pbmcgb24gY29ycmVjdGx5LgoKCSogW21pc2NlbXUvaW50MmYuY10KCU1pbm9yIHN0dWZmIGluIGludCAweDJmLCBmdW5jdGlvbiAweDE2LgoKU2F0IFNlcCAyMyAxOTk1IDE3OjU4OjA0ICBNYXJjdXMgTWVpc3NuZXIgIDxtc21laXNzbkBmYXVpMDEuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbWlzYy9zaGVsbC5jXSBbbWlzYy9tYWluLmNdCglJbXBsZW1lbnQgc2F2aW5nIGFuZCBsb2FkaW5nIG9mIHRoZSByZWdpc3RyeSBkYXRhYmFzZSAobmVlZGVkIGZvcgoJT0xFKS4gVmVyeSBleHBlcmltZW50YWwuIEZpeGVkIFNoZWxsRXhlY3V0ZSgpLgoJCgkqIFttaXNjZW11L2ludDIxLmNdCglFRVhJU1QgaXMgbm90IGEgY3JpdGljYWwgZXJyb3IgY29uZGl0aW9uIGZvciBta2RpcigpLgoKRnJpIFNlcCAyMiAwMTozMzozNCAxOTk1ICBBbGV4IEtvcm9ia2EgIDxhbGV4QHBobTYucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtpbmNsdWRlL3NoZWxsLmhdIFttaXNjL3NoZWxsLmNdCglJbXBsZW1lbnRlZCA0IGRyYWcvZHJvcCBmdW5jdGlvbnMgd2l0aCBkb2N1bWVudGVkIGZ1bmN0aW9uYWxpdHkuCgogICAgICAgICogW211bHRpbWVkaWEvdGltZS5jXQogICAgICAgICJGaXhlZCIgTU1TeXNUaW1lQ2FsbGJhY2sga2x1ZGdlIHNvIEV4Y2VsNSBsb2FkcyB1cCB3aXRob3V0IGNyYXNoaW5nLgoKCSogWyovKl0gCiAgICAgICAgQWRkZWQgbmV3IGZpbGVzLCBtb3JlIG1lc3NhZ2UgZGVmaW5pdGlvbnMsIHN0cnVjdHVyZXMsIGRlYnVnIGluZm8sCiAJZXRjLiAgUmV3cm90ZSBtZXNzYWdlIGxvZ2dpbmcgZnVuY3Rpb25zIHRvIHByb2R1Y2Ugb3V0cHV0IHNpbWlsYXIKIAl0byBXaW5TaWdodC4gIENoZWNrIG91dCAtZGVidWdtc2cgK21lc3NhZ2Ugb3B0aW9uLgoKCSogW21pc2MvZmlsZS5jXQogICAgICAgIEZpeGVkIEdldERyaXZlVHlwZSByZXR1cm4gdmFsdWUuICAKCiAgICAgICAgKiBbd2luZG93cy9tZXNzYWdlLmNdIAogICAgICAgIEhvb2tzIGFyZSBpbnZva2VkIGluIG5vcm1hbCBvcmRlci4KCiAgICAgICAgKiBbbWlzY2VtdS8qXQogICAgICAgIEFkZGVkIHNvbWUgZnVuY3Rpb25zIGFuZCBpbnRlcnJ1cHRzLgoKICAgICAgICAqIFttaXNjL3NoZWxsLmNdCiAgICAgICAgSW1wbGVtZW50ZWQgRHJhZy4uLiBmdW5jdGlvbnMuCgpUaHUgU2VwIDIxIDIzOjUwOjEyIDE5OTUgIEp1a2thIElpdm9uZW4gPGlpdm9uZW5AY2MuaGVsc2lua2kuZmk+CgoJKiBbcmMvc3lzcmVzX0ZpLnJjXSBbcmMvc3lzcmVzLnJjXQoJRmlyc3QgYXR0ZW1wdCBhdCBGaW5uaXNoIFtGaV0gbGFuZ3VhZ2Ugc3VwcG9ydC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIFNlcCAxNyAxNjo0Nzo0OSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbY29uZmlndXJlLmluXSBbKi9NYWtlZmlsZS5pbl0gW01ha2UucnVsZXMuaW5dCglDbGVhbmVkIHVwIG1ha2VmaWxlcywgYWRkZWQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIFdpbmVsaWIsCglncm91cGVkIGNvbW1vbiBtYWtlIHJ1bGVzIGluIE1ha2UucnVsZXMuaW4uCgoJKiBbQ29uZmlndXJlXQoJUmVuYW1lZCB0byAnQ29uZmlndXJlLm9sZCc7IHBsZWFzZSB1c2UgJ2NvbmZpZ3VyZScgaW5zdGVhZC4KCgkqIFtjb250cm9scy9tZW51LmNdCglGaXhlZCBEZXN0cm95TWVudSgpIHRvIGF2b2lkIGRlbGV0aW5nIHRoZSBzYW1lIG1lbnUgdHdpY2UuCglNb3JlIGZpeGVzIHRvIFdNX01FTlVTRUxFQ1QsIGFuZCBhZGRlZCBXTV9JTklUTUVOVS4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCUZpeGVkIHdyb25nIHJlZ2lzdGVyIHZhbHVlcyBkaXNwbGF5ZWQgYnkgUkVMQVlfRGVidWdDYWxsMzIoKS4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUZpeGVkIExvY2FsTG9jaygpIGFuZCBMb2NhbFVubG9jaygpIHRvIGluY3JlbWVudC9kZWNyZW1lbnQgdGhlCglsb2NrIGNvdW50IGZvciBtb3ZlYWJsZSBibG9ja3MuCgoJKiBbbWlzYy9jb21tZGxnLmNdIFttaXNjL3NoZWxsLmNdIFtyYy93aW5lcmMuY10KCU1vZGlmaWVkIHRoZSBnZW5lcmF0ZWQgQyBmaWxlIHNvIHRoYXQgdGhlIHJlc291cmNlIGluZm9ybWF0aW9uCgkoc2l6ZSwgZXRjLikgaXMgYWxzbyBleHBvcnRlZC4KCU1vZGlmaWVkIGNvbW1vbiBkaWFsb2dzIHRvIHVzZSB0aGUgbmV3IGluZm9ybWF0aW9ucy4KCgkqIFttaXNjL21haW4uY10gW0FOTk9VTkNFXQoJVXBkYXRlIHRoZSBsaXN0IG9mIGNvbnRyaWJ1dG9ycy4gUGxlYXNlIGxldCBtZSBrbm93IGlmIEkgZm9yZ290Cglzb21lb25lLgoKCSogW3JjL3N5c3Jlcy5yY10gW3JjL3N5c3Jlc19Fbi5yY10KCU1vdmVkIEVuZ2xpc2ggcmVzb3VyY2VzIHRvIHN5c3Jlc19Fbi5yYy4KCUNoYW5nZWQgaWRzIGZyb20gbnVtZXJpYyB0byBzeW1ib2xpYyBmb3IgZGlhbG9ncy4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJTW9kaWZpZWQgdGVtcGxhdGUgcGFyc2luZyB0byBiZSBhYmxlIHRvIHBhc3Mgc2VnbWVudGVkIHBvaW50ZXJzIHRvCglDcmVhdGVXaW5kb3coKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQ3JlYXRlV2luZG93KCkgbm93IHRha2VzIHNlZ21lbnRlZCBwb2ludGVycyBmb3IgY2xhc3MgYW5kIHdpbmRvdwoJbmFtZXMuCglNYXhtaW1pemUgb3IgbWluaW1pemUgdGhlIHdpbmRvdyB1cG9uIGNyZWF0aW9uIGlmIHRoZSBXU19NQVhJTUlaRQoJb3IgV1NfTUlOSU1JWkUgYml0cyBhcmUgc2V0LgoKVGh1IFNlcCAxNCAxNzoxOTo1NyAxOTk1ICBQYXVsIFdpbGhlbG0gIDxwYXVsQHBhdWwuYWNjZXNzb25lLmNvbT4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCUZpeGVkIHNjcm9sbC1iYXIgYnVncyBmb3Igbm9uLWNsaWVudCB3aW5kb3dzLgoKVGh1IFNlcCAxNCAxNDowNDoxNCBNRVQgRFNUIDE5OTUgSm9jaGVuIEhvZW5pY2tlIDxKb2NoZW4uSG9lbmlja2VAYXJiaS5JbmZvcm1hdGlrLlVuaS1PbGRlbmJ1cmcuZGU+CgoJKiBbaW5jbHVkZS9jdXJzb3IuaF0gW3dpbmRvd3MvY3Vyc29yLmNdCglDdXJzb3IgaXMgbm90IG1pcnJvcmVkIGFueSBtb3JlIGFuZCB0aGUgaG90c3BvdCBpcyBzZXQgcmlnaHQuCgpXZWQgU2VwIDEzIDE0OjIyOjMxIDE5OTUgIE1hcmN1cyBNZWlzc25lciAgPG1zbWVpc3NuQGZhdWkwMS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtvbGUuaF0KCU1pc2Mgc21hbGwgZml4ZXMuCgpNb24gU2VwICA0IDAwOjAxOjIzIDE5OTUgIEpvbiBUb21icyA8am9uQGd0ZS5lc2kudXMuZXM+CgoJKiBbcmMvc3lzcmVzX0VzLnJjXQoJRmlyc3QgYXR0ZW1wdCBhdCBTcGFuaXNoIFtFc10gbGFuZ3VhZ2Ugc3VwcG9ydC4KClN1biBTZXAgIDMgMTM6MjI6MzMgMTk5NSAgICAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpbmNsdWRlL2FsaWFzLmhdW3dpbmRvd3MvYWxpYXMuY11baW5jbHVkZS9yZWxheTMyLmhdCglOZXcgZmlsZXMKCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglXSURHRVRTX0luaXQ6IHJlZ2lzdGVyIGFsaWFzIHdpbmRvdyBwcm9jZWR1cmVzCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglDYWxsV25kUHJvYzogQ2FsbCBhbGlhcyBmdW5jdGlvbnMgaWYgbmVjZXNzYXJ5CgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdCglHZXRTdG9ja09iamVjdCwgVGV4dE91dEE6IG5ldyByZWxheXMKCgkqIFttaXNjL3VzZXIzMi5jXVtpZjE2MzIvdXNlcjMyLnNwZWNdW21pc2MvTWFrZWZpbGUuaW5dW21pc2MvSW1ha2VmaWxlXQoJdXNlcjMyLmM6IG5ldyBmaWxlCglCZWdpblBhaW50LENyZWF0ZVdpbmRvd0V4QSxEZWZXaW5kb3dQcm9jQSxEaXNwYXRjaE1lc3NhZ2UsRW5kUGFpbnQsCglHZXRNZXNzYWdlQSxSZWdpc3RlckNsYXNzQSxTaG93V2luZG93LFVwZGF0ZVdpbmRvdzogbmV3IHJlbGF5cwoKCSogW2lmMTYzMi93aW5wcm9jczMyLnNwZWNdW2xvYWRlci9wZV9pbWFnZS5jXVtsb2FkZXIvbW9kdWxlLmNdCglQRV9XaW4zMkNhbGxUb1N0YXJ0OiBuZXcgZnVuY3Rpb24KCU1PRFVMRV9DcmVhdGVJbnN0YW5jZTogcmVtb3ZlZCBzdGF0aWMgYXR0cmlidXRlCglMb2FkTW9kdWxlOiBUcnkgbG9hZGluZyBQRSBpbWFnZSBvbiBlcnJvciAyMQoJUEVfTG9hZE1vZHVsZTogbmV3IGZ1bmN0aW9uCglQRV9Mb2FkSW1hZ2U6IGluaXRpYWxpemUgcGVfZGF0YSB3aXRoIDAKCQoJKiBbaW5jbHVkZS9kbGxzLmhdW2luY2x1ZGUvcGVleGUuaF0KCW1vdmVkIHBlX2RhdGEgYW5kIHdfZmlsZXMgdG8gcGVleGUuaAoJCgkqIFttaXNjL3NoZWxsLmNdCglTaGVsbEFib3V0OiBSZWdpc3RlciBBYm91dFduZFByb2MgYWxpYXNlcwoKCSogW21pc2NlbXUvaW50MjEuY10KCWhhbmRsZSAweDQ0MEEgYW5kIDB4REMKCgkqIFttaXNjZW11L2ludDJmLmNdCgloYW5kbGUgMHg4NAoKCSogW29iamVjdHMvZGliLmNdCglDcmVhdGVESUJpdG1hcDogY29tcGxhaW4gaWYgQklUTUFQSU5GT0hFQURFUiBpcyBvZiB3cm9uZyBzaXplCgoJKiBbdG9vbHMvYnVpbGQuY10KCWluY2x1ZGUgd2luZG93cy5oIGFuZCByZWxheTMyLmggaW50byBnZW5lcmF0ZWQgV2luMzIgcmVsYXlzLAoJZG9uJ3QgZGVjbGFyZSB0aGUgaW1wbGVtZW50YXRpb24gYXMgaW50ICgqKSgpOwoJbGltaXQgaW4gV0lOMzJfYnVpbHRpbiB3YXMgb2ZmIGJ5IG9uZQoKCSogW3dpbmRvd3MvY2FyZXQuY10KCUNBUkVUX0luaXRpYWxpemU6IG5ldyBmdW5jdGlvbiwgY2FsbCBvbiBzdHJhdGVnaWMgcGxhY2VzCgoJKiBbd2luZG93cy9tZXNzYWdlYm94LmNdCglNZXNzYWdlQm94OiByZWdpc3RlciBtZXNzYWdlIGJveCBwcm9jIGFsaWFzZXMKCgkqIFtpZjE2MzIvYWR2YXBpMzIuc3BlY11baWYxNjMyL2NvbWRsZzMyLnNwZWNdCglOZXcgZmlsZXMKCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dW2lmMTYzMi9JbWFrZWZpbGVdW2lmMTYzMi9yZWxheTMyLmNdCglhZGRlZCBuZXcgc3BlYyBmaWxlcwoJUkVMQVkzMl9HZXRCdWlsdGluRExMOiBwZXJmb3JtIGxvb2t1cCBjYXNlIGluc2Vuc2l0aXZlCglSRUxBWTMyX0dldEVudHJ5UG9pbnQ6IHN0YXJ0IG5hbWUgc2VhcmNoIGF0IDAKCgkqIFtpZjE2MzIvdXNlci5zcGVjXVtpZjE2MzIva2VybmVsLnNwZWNdW2lmMTYzMi9nZGkuc3BlY10KCUFkZGVkIHN0dWJzIGZvciBuZXcgV2luOTUgQVBJCgpTYXQgU2VwIDIgMTk5NSAgTWFydGluIFJveQoKCSogW21pc2MvY29tbWRsZy5jXQoJSW4gV01fSU5JVERJQUxPRywgY3VycmVudCBmaWx0ZXIgbXVzdCByZWZsZWN0IGxwb2ZuLT5uRmlsdGVySW5kZXguCiAgCVdoZW4gcHJvY2VzcyBJRE9LIGJ1dHRvbiBpbiBGSUxFRExHX1dNQ29tbWFuZCgpLAogCWxwb2ZuLT5uRmlsdGVySW5kZXggc2hvdWxkIGJlIHVwZGF0ZWQgdG8gY3VycmVudCBzZWxlY3Rpb24uCgpUaHUgQXVnIDMxIDE1OjAwOjAwIDE5OTUgUmFtJ29uIEdhcmMnaWEgPHJhbW9uQGllMy5jbHVicy5ldHNpdC51cG0uZXM+CgoJKiBbbG9hZGVyL21vZHVsZS5jXSBbbG9hZGVyL25lX2ltYWdlLmNdCglBZGRlZCBzdXBwb3J0IG9mIHNlbGYtbG9hZGluZyBtb2R1bGVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBBdWcgMzEgMTc6MTk6NTcgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW0NvbmZpZ3VyZV0KCUFkZGVkIGNvbXBpbGUtdGltZSBvcHRpb24gZm9yIElQQy4KCgkqIFtjb25maWd1cmUuaW5dCglBZGRlZCBjb21tYW5kLWxpbmUgb3B0aW9ucyBmb3IgbGFuZ3VhZ2UsIElQQyBhbmQgbWFsbG9jCglkZWJ1Z2dpbmcuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJV01fTUVOVVNFTEVDVCB3YXMgc29tZXRpbWVzIHNlbnQgdG8gdGhlIHdyb25nIHdpbmRvdy4KCgkqIFtkZWJ1Z2dlci9icmVhay5jXQoJRm9yIHRoZSAnbmV4dCcgY29tbWFuZCwgb25seSBzdGVwIG92ZXIgaW5zdHJ1Y3Rpb24gdGhhdCByZXF1aXJlCglpdC4gVGhpcyBhbGxvd3MgJ25leHQnIHRvIGRvIHRoZSByaWdodCB0aGluZyB3aXRoIGptcCBhbmQgcmV0CglpbnN0cnVjdGlvbnMuCgoJKiBbaXBjLyouY10gW21lbW9yeS9hdG9tLmNdIFttZW1vcnkvZ2xvYmFsLmNdCglJUEMgY2FuIG5vdyBiZSBjb25maWd1cmVkIG91dCBhdCBjb21waWxlLXRpbWUuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUJ1ZyBmaXggaW4gVEFTS19SZXNjaGVkdWxlKCkgdGhhdCBjb3VsZCBjYXVzZSBhIHRhc2sgdG8gYmUgZGVsZXRlZAoJdHdpY2UuCgoJKiBbbWlzY2VtdS9kb3NtZW0uY10gKE5ldyBmaWxlKQoJUGFydGlhbCBlbXVsYXRpb24gb2YgdGhlIEJJT1MgZGF0YSBzZWdtZW50LgoKCSogW21pc2NlbXUvaW5zdHIuY10KCVRyYXAgYXR0ZW1wdHMgdG8gYWNjZXNzIHNlbGVjdG9yIDB4NDAgYW5kIHJlbWFwIHRoZSBhY2Nlc3MgdG8KCXNlZ21lbnQgX18wMDQwSC4KCgkqIFt0b29scy9idWlsZC5jXQoJRml4ZWQgYnVnIGluIENhbGxUbzMyX0xhcmdlU3RhY2soKSB0aGF0IGNhdXNlZCBwcm9ibGVtcyB3aGVuCgljb21waWxpbmcgV2luZSB3aXRoIHRoZSAtZm9taXQtZnJhbWUtcG9pbnRlciBvcHRpb24uCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglGaXhlZCBidWcgaW4gaGFyZHdhcmUgZXZlbnQgaGFuZGxpbmcgdGhhdCBjb3VsZCBjYXVzZSBzb21lIGV2ZW50cwoJdG8gZ2V0IGlnbm9yZWQuCgpTYXQgQXVnIDI2IDEzOjEyOjU5IElTVCAxOTk1IE1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdm5ldC5pYm0uY29tPgoKCSogW2lwYy9SRUFETUVdIFtpcGMvZGRlLnRleF0KCUxhVGVYIGRvY3VtZW50YXRpb24gZm9yIHRoZSBpcGMgYW5kIERERSBzdHVmZi4KCldlZCBBdWcgMjMgMjI6MDE6MjMgR01UIDE5OTUgTWljaGFlbCBWZWtzbGVyIDxtdmVrc2xlckB2bmV0LmlibS5jb20+CgoJKiBbaXBjL0ltYWtlZmlsZV0gW2lwYy93aW5lX3Rlc3Rfc3R1Yi5jXQoJRml4ZWQgSVBDIHRlc3RpbmcuIE5vdyBpdCBjYW4gYmUgY29tcGlsZWQgd2l0aCAibWFrZSB0ZXN0cyIKCldlZCBBdWcgMjMgMjE6MDQ6MTQgMTk5NSAgRm9ucyBCb3RtYW4gIDxib3RtYW5Ad2FiLXRpcy5yYWJvYmFuay5ubD4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW21pc2MvbWFpbi5jXQoJQWRkZWQgR2V0V2luRGVidWdJbmZvL1NldFdpbkRlYnVnSW5mbyBzdHViIGZvciBwbGF5ZXIuZXhlCgpTdW4gQXVnICAyMCAxMzo0OTo0MiAxOTk1ICBNYXJjdXMgTWVpc3NuZXIgIDxtc21laXNzbkBmYXVpMDEuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJTWlzYyBmaXggdG8gaW50MjEsYWg9NDAgKHdyaXRlKSB0byBtYXRjaCBfbHdyaXRlKCkuCglBWD0weDQ0MEEgKGNoZWNrIGlmIGhhbmRsZSBpcyByZW1vdGUpIGFkZGVkLgoKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KCU1vdmVkIG1jaVNlbmRTdHJpbmcgdG8gbWNpc3RyaW5nLmMuCgoJKiBbbXVsdGltZWRpYS9tY2lzdHJpbmcuY10KCU5ldyBmaWxlLCBzdHJpbmcgaW50ZXJmYWNlIGZvciBNQ0kgKG5vdCBjb21wbGV0ZSwgbm90IHRob3JvdWdobHkKCXRlc3RlZCkuCgoJKiBbbXVsdGltZWRpYS9hdWRpby5jXQoJSU9DVEwgcHJpbnRzIGVycm9yczsgb25lIHBhcmFub2lkIGNoZWNrIGRpc2FibGVkLgoKCSogW21pc2MvZmlsZS5jXQoJTWlzYyBvcGVyYXRvciBwcmVjZWRlbmNlIGZpeGVzLgoKCSogW2lmMTYzMi9nZGkuc3BlY10gW29iamVjdHMvYml0Ymx0LmNdCglTdHViIGZvciBGYXN0V2luZG93RnJhbWUgKHBhcmFtZXRlcnMgbm90IGNvcnJlY3QpLgoKU2F0IEF1ZyAxOSAwMTozMToyMyAxOTk1ICBHcmFoYW0gTWVuaGVubml0dCA8Z2ZtQHdlcnBsZS5taXJhLm5ldC5hdT4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCVByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIGl0ZXJhdGVkIHNlZ21lbnRzLgoKU2F0IEF1ZyAxOSAwMDo0MzowNCAxOTk1ICBBbmRyZXcgVGF5bG9yICAoYXRheWxvckBjYWR2aXNpb24uY29tKQoKCSogW3dpbmRvd3MvbWFwcGluZy5jXQoJSW4gZnVuY3Rpb24gTUFQUElOR19GaXhJc290cm9waWMoKSwgVnBvcnRFeHRbWFldIGlzIG11bHRpcGxpZWQgYnkKIAl0aGUgYWJzb2x1dGUgdmFsdWUgb2YgKHlkaW0gLyB4ZGltKSBvciAoeGRpbSAvIHlkaW0pLgoKVGh1IEF1ZyAxNSAyMzowMDoxNiAgR3JlZ29yeSBUcnViZXRza295ICA8Z3Jpc2hhQG1pcmEuY29tPgoKCSogW29iamVjdHMvb2VtYml0bWFwLmNdCglBZGRlZCBzb21lIGluY2x1ZGVzIGZvciBXaW5kb3dzIDk1LgoKCSogW2luY2x1ZGUvc3lzbWV0cmljcy5oXQoJQWRkZWQgc29tZSBzeXNtZXRyaWNzIGZvciBXaW5kb3dzIDk1LgoKCSogW2luY2x1ZGUvYml0bWFwcy8qOTVdCglOZXcgZmlsZXM6IG9ibV9jbG9zZV85NSwgb2JtX2Nsb3NlZF85NSwgb2JtX3JlZHVjZV85NSwgb2JtX3JlZHVjZWRfOTUKCW9ibV96b29tXzk1LCBvYm1fem9vbWRfOTUgLSB0aGVzZSBhcmUgc29tZSBwaXhtYXBzIGZvciBXaW5kb3dzIDk1LgoKVGh1IEF1ZyAxMCAxMjowMDowMCAxOTk1ICBKYW4gV2lsbGFtb3dpdXMgIChqYW5AamFuaGguc2huZXQub3JnKQoKCSogW21pc2Mvc2hlbGwuY10gW3JjL3N5c3JlcyoucmNdCglUaGUgY2FwdGlvbiBvZiB0aGUgU2hlbGxBYm91dCBkaWFsb2cgYm94IGlzIGxhbmd1YWdlIHNwZWNpZmljIGFuZAogCXNob3VsZCBiZSBkZWZpbmVkIGluIHRoZSByZXNvdXJjZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBBdWcgMTcgMTk6MzA6MTQgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogWyovTWFrZWZpbGUuaW5dCglSZW1vdmVkIHdpbmVsaWJjbGVhbiB0YXJnZXQsIGFzIGl0IGRvZXNuJ3Qgd29yayBhbnl3YXkuCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglBdm9pZCBkcmF3aW5nIHRoZSBmb2N1cyByZWN0YW5nbGUgb3V0c2lkZSBvZiB0aGUgYnV0dG9uLgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCUZpeGVkIGJ1ZyB3aXRoIHRoZSBzaXplIG9mIHRoZSByZXNlcnZlZCBieXRlcyBmb3IgdGhlIEVkaXQKCWNvbnRyb2wgKGNhdXNlZCBFdWRvcmEgdG8gY3Jhc2gpLgoKCSogW2RlYnVnZ2VyLypdIFtpbmNsdWRlL2RlYnVnZ2VyLmhdCglVbmlmaWVkIGRlYnVnZ2VyIGFkZHJlc3MgaGFuZGxpbmcuIFNlZ21lbnRlZCBhbmQgbGluZWFyIGFkZHJlc3NlcwoJYXJlIG5vIGdyb3VwZWQgaW4gYSBzaW5nbGUgdHlwZSBEQkdfQUREUi4KCUFsbCBjb21tYW5kcyBub3cgYWNjZXB0IHNlZzpvZmYgYWRkcmVzc2VzLgoJTW9kdWxlIGVudHJ5IHBvaW50cyBhcmUgbm93IGxvYWRlZCB1cG9uIGZpcnN0IGVudHJ5IHRvIHRoZQoJZGVidWdnZXIsIHNvIHRoYXQgZW50cnkgcG9pbnRzIG9mIHRoZSBsb2FkZWQgZXhlY3V0YWJsZSBhbHNvCglhcHBlYXIgaW4gdGhlIHN5bWJvbCB0YWJsZS4KCgkqIFtpbmNsdWRlL3JlZ2lzdGVycy5oXSBbbWlzY2VtdS8qLmNdCglSZWdpc3RlciBtYWNyb3MgYXJlIG5vdyBvZiB0aGUgZm9ybSAnQVhfcmVnKGNvbnRleHQpJyBpbnN0ZWFkIG9mICdBWCcuCglUaGlzIG1ha2VzIGNvZGUgbGVzcyByZWFkYWJsZSwgYnV0IHdpbGwgcHJldmVudCBhIGxvdCBvZiBuYW1lCgljbGFzaGVzIHdpdGggb3RoZXIgZGVmaW5pdGlvbnMuIEl0IGFsc28gYXZvaWRzIGEgaGlkZGVuIHJlZmVyZW5jZQoJdG8gdGhlICdjb250ZXh0JyB2YXJpYWJsZS4KCgkqIFtpcGMvZGRlX2F0b20uY10gW21pc2MvYXRvbS5jXQoJQWxsICpBZGRBdG9tIGFuZCAqRmluZEF0b20gZnVuY3Rpb25zIG5vdyB0YWtlIGEgU0VHUFRSIHBhcmFtZXRlciwKCXRvIGFsbG93IHN1cHBvcnRpbmcgaW50ZWdlciBhdG9tcy4KCU1vdmVkIGF0b20uYyB0byBtZW1vcnkvIGRpcmVjdG9yeS4KCgkqIFtsb2FkZXIvdGFzay5jXQoJRml4ZWQgZW52aXJvbm1lbnQgYWxsb2NhdGlvbiB0byBjb21wdXRlIHRoZSBzaXplIGR5bmFtaWNhbGx5LgoJQWRkZWQgJ3dpbmRpcicgZW52aXJvbm1lbnQgdmFyaWFibGUuCglGaXhlZCBHZXRET1NFbnZpcm9ubWVudCgpIHRvIHJldHVybiB0aGUgY3VycmVudCB0YXNrIGVudmlyb25tZW50LgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJRml4ZWQgYnVnIGluIE1TR19HZXRXaW5kb3dGb3JFdmVudCgpLgoKV2VkIEF1ZyAgOSAxMTo0MDo0MyAxOTk1ICBNYXJjdXMgTWVpc3NuZXIgIDxtc21laXNzbkBmYXVpMDEuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaW5jbHVkZS9vbGUuaF0KCUFkZGVkIGEgbG90IG9mIHN0cnVjdHVyZXMgIGZyb20gbXkgQm9ybGFuZCBNYW51YWwuIE5laXRoZXIgY29tcGxldGUsCglub3IgMTAwJSByaWdodCAoY2hlY2sgcGxlYXNlKQoJCgkqIFttaXNjL3NoZWxsLmNdCglGaXhlZCBzb21lIG9mIHRoZSBSZWcqIGZ1bmN0aW9ucy4KCUVuaGFuY2VkIFNoZWxsRXhlY3V0ZS4KCVBsZWFzZSB0ZXN0OiB3aW5lICJyZWdlZGl0LmV4ZSAvdiIgbXBsYXllci5leGUgc291bmRyZWMuZXhlCglEbyBZT1Uga25vdyB0aGUgZm9ybWF0IG9mIFxXSU5ET1dTXFJFRy5EQVQ/IE1haWwgbWUgcGxlYXNlIDopCgoJKiBbbWlzYy9kb3NfZnMuY10KCU1ha2UgdW1zZG9zIG1vdW50ZWQgd2luZG93cyBkaXJzIHdvcmsgYWdhaW4uCgoJKiBbbWlzY2VtdS9lbXVsYXRlLmNdCglBZGRlZCBzb21lIGNvbW1lbnRzLCBwcmVpbXBsZW1lbnRhdGlvbiBvZiBzdWJmdW5jdGlvbiA3LgoKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KCUltcGxlbWVudGVkIG1jaVNlbmRTdHJpbmcuIG5vdCBjb21wbGV0ZSwgbm90IGNsZWFuLCBub3QKCW5lY2Vzc2FyaWx5IHdvcmtpbmcgKG9ubHkgY2hlY2tlZCB3aXRoIGEgcHJvZ3JhbSB3aGljaCB1c2VzCiAJJ2NkYXVkaW8nIChvbmUgd29ya2luZyBwcm9ncmFtIGlzIGNvb2wuZXhlLCBhIHNoYXJld2FyZSB3YXZlZGl0b3IKIAl3aXRoIGNkYXVkaW8gcGxheSBmYWNpbGl0aWVzLikKCgkqIFttdWx0aW1lZGlhL21jaWNkYS5jXQoJU2VncHRyIGZpeGVzIGluIERyaXZlclByb2MKCURlZmF1bHQgY2Ryb20gZHJpdmUgaW4gTGludXggaXMgL2Rldi9jZHJvbSAuLi4gdXN1YWxseSBhIHN5bWJvbGljCiAJbGluayB0byB5b3VyIHJlYWwgY2Ryb20gZGV2aWNlLgoKVHVlIEF1ZyAgOCAxOTo0MTo1MCBDRFQgMTk5NSBEYW5pZWwgU2NoZXBsZXIgPGRrczJAY2VjLnd1c3RsLmVkdT4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCURvbid0IGNyYXNoIGluIGEgTG9hZFN0cmluZyB0byBOVUxMCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglGaXhlZCBhY2NlbGVyYXRvcnMgdG8gd29yayB3aXRoIG1vZGlmaWVycy4gIChBTFQteCBtb2RpZmllcnMgc3RpbGwKIAl3b24ndCB3b3JrIHVubGVzcyB0aGUgQUxUIGtleXByZXNzIGV4aXRlZCB0aGUgbWVudS4pCgoJKiBbbWlzYy9maWxlLmNdCglFeHBhbmQgYSBmaWxlIHRvIHRoZSBjdXJyZW50IG9mZnNldCB3aXRoIGFuIF9sd3JpdGUgb2Ygc2l6ZSB6ZXJvLgoKCSogW21pc2MvZmlsZS5jXQoJU2V0IGEgbmV3bHkgY3JlYXRlZCBmaWxlIHRvIHJlYWQtd3JpdGUgaW5zdGVhZCBvZiB3cml0ZS1vbmx5LgoJClN1biBBdWcgIDYgMjA6Mjg6MzUgMTk5NSAgQW5hbmQgS3VtcmlhIDxha3VtcmlhQG96ZW1haWwuY29tLmF1PgoKCSogW21pc2MvbWFpbi5jXSBbaW5jbHVkZS9tc2Rvcy5oXQoJRml4ZWQgdG8gcmV0dXJuIERPUyB2ZXJzaW9uIDYuMjIsIGFuZCB0aGUgY29ycmVjdCBieXRlIG9yZGVyCglmb3IgV2luZG93cyBwcm9ncmFtcy4KCldlZCBBdWcgIDIgMTI6MzY6MzMgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWVtb3J5L2dsb2JhbC5jXSBbbWlzYy9tYWluLmNdCglNYWtlIHRoZSBuZXcgSVBDIHJ1bi10aW1lIHNlbGVjdGlibGUsIGRpc2FibGluZyBpdCBieSBkZWZhdWx0LgoJKEkgdGhpbmsgaXQncyBvbmx5IHVzZWZ1bCBmb3IgbGlid2luZSwgYW55d2F5LikKCgkqIFtsb2FkZXIvdGFzay5jXSBbbWVtb3J5L3NlbGVjdG9yLmNdCglJbiBGcmVlU2VsZWN0b3IoKSwgd2FsayB1cCB0aGUgc3RhY2sgYW5kIGZpeCB0aGUgZnJhbWVzLgoKCSogW29iamVjdHMvZGliLmNdCglNaXNzaW5nIGJyZWFrIHN0YXRlbWVudCBpbiBESUJfU2V0SW1hZ2VCaXRzX1JMRTgoKS4KCUluIEdldERJQml0cygpLCBzZXQgdGhlIGNvbXByZXNzaW9uIGZsYWcgaW4gdGhlIGJpdG1hcCBpbmZvIHRvIHplcm8uCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUdldE5leHREbGdHcm91cEl0ZW0oKSBuZWVkcyB0byB0cmVhdCB0aGUgZmlyc3QgY2hpbGQgYXMgaWYgaXQgaGFkCglhbiBpbXBsaWNpdCBXU19HUk9VUCBiaXQgc2V0LgoKTW9uIEp1bCAzMSAxNTo0NDo0NyBFRFQgMTk5NSBMb3Vpcy1ELiBEdWJlYXUgPGxkZEBzdGVwLnBvbHltdGwuY2E+CgoJKiBbbWlzYy9kb3NfZnMuY10KCVF1aWNrJ24gZGlydHkgZml4IGZvciB0aGUgaW5pdGlhbGlzYXRpb24gb2YgdGhlIFo6IGluZm9ybWF0aW9uCglzdHJ1Y3R1cmUuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBKdWwgMjIgMjI6Mzk6MDkgSURUIDE5OTUgTWljaGFlbCBWZWtzbGVyIDxlMTY3ODIyM0B0b2NobmFwYzIudGVjaG5pb24uYWMuaWw+CgoJKiBbaXBjLypdCglOZXcgZGlyZWN0b3J5LiBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgbmV3IGludGVyLXdpbmUKIAljb21tdW5pY2F0aW9ucyBzdXBwb3J0LiBJdCBlbmFibGVzIERERSBwcm90b2NvbHMgYmV0d2VlbiB0d28gd2luZQogCWluc3RhbmNlcy4gIEN1cnJlbnRseSBpdCBpcyBsaW1pdGVkIHRvIERERSwgYnV0IGNhbiBiZSBlbmhhbmNlZCB0bwogCXN1cHBvcnQgT0xFIGJldHdlZW4gMiBkaWZmZXJlbnQgd2luZSBpbnN0YW5jZXMuICBUaGlzIGlzIHZlcnkKIAlpbXBvcnRhbnQgZm9yIGxpYndpbmUuYSBEREUvT0xFIHN1cHBvcnQuCgoJKiBbdG9vbHMvaXBjbF0KICAgIAlBIHNjcmlwdCB0byBkZWxldGUgZ2FyYmFnZSBJUEMgaGFuZGxlcyAoc2hhcmVkIG1lbW9yeSwgc2VtYXBob3JlcwogCWFuZCBtZXNzYWdlIHF1ZXVlcykuICBUaGUgY3VycmVudCBpbnRlci13aW5lIGNvbW11bmljYXRpb24gaXMgbm90CiAJcGVyZmVjdCwgYW5kIHNvbWV0aW1lcyBsZWF2ZXMgZ2FyYmFnZSBiZWhpbmQuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL2F0b20uaF0gW2luY2x1ZGUvZ2xvYmFsLmhdCiAJW2xvYWRlci9zZWxlY3Rvci5jXSBbbG9hZGVyL3Rhc2suY10gW2xvYWRlci9tb2R1bGUuY10KIAlbbG9hZGVyL3NpZ25hbC5jXSBbbWVtb3J5L2dsb2JhbC5jXSBbbWlzYy9hdG9tLmNdCiAJW3dpbmRvd3MvY2xhc3MuY10gW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy93aW4uY10KCVtJbWFrZWZpbGVdCiAgICAJSG9va3MgZm9yIGludGVyLXdpbmUgRERFIHN1cHBvcnQsIGN1cnJlbnQgR2xvYmFsLipBdG9tIGZ1bmN0aW9ucwogCXJlbmFtZWQgdG8gTG9jYWwuKkF0b20gc2luY2UgR2xvYmFsLipBdG9tIGFyZSB1c2VkIGZvciBJbnRlci1XaW5lCiAJRERFIGNvbW11bmljYXRpb24uIChUaGUgZmlyc3QgY2FsbCB0byB0aGVzZSBmdW5jdGlvbnMgc2V0cyB1cCB0aGUKIAlJUEMgc3RydWN0dXJlcyAtIHdoaWNoIG90aGVyd2lzZSBjYXVzZSB1bm5lZWRlZCBvdmVyaGVhZC4KCk1vbiBKdWwgMTcgMTk6NTU6MjEgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW2NvbnRyb2xzL21lbnUuY10KCURvbid0IGNyYXNoIGlmIGEgTlVMTCBzdHJpbmcgaXMgcGFzc2VkIHRvIG1lbnUgZnVuY3Rpb25zLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJV2Ugbm93IHVzZSBhIGJpdCBpbiBsZHRfZmxhZ3NfY29weSB0byBpbmRpY2F0ZSBmcmVlIExEVCBlbnRyaWVzLgoJRml4ZWQgYSBidWcgaW4gU0VMRUNUT1JfUmVhbGxvY0Jsb2NrIHRoYXQgY291bGQgY2F1c2UgaXQgdG8KCW92ZXJ3cml0ZSB2YWxpZCBMRFQgZW50cmllcyB3aGVuIGdyb3dpbmcgYSBibG9jay4KCgkqIFttaXNjZW11L2luc3RyLmNdCglFbXVsYXRlIGludCB4eCBpbnN0cnVjdGlvbiBieSBzdG9yaW5nIHRoZSBpbnRlcnJ1cHQgdmVjdG9yIGluCglDUzpJUCBhbmQgcmV0dXJuaW5nIGRpcmVjdGx5LiBUaGlzIGFsbG93cyBhIHByb2dyYW0gdG8gaW5zdGFsbCBhbgoJaW50ZXJydXB0IHZlY3Rvci4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWRkZWQgZnVuY3Rpb24gV0lOX0dldFRvcFBhcmVudCB0byBnZXQgdGhlIHRvcC1sZXZlbCBwYXJlbnQgb2YgYQoJd2luZG93LgoKU3VuIEp1bCAgMTYgMTg6MTc6MTcgMTk5NSAgR3JlZ29yeSBUcnViZXRza295IDxncmlzaGFAbWlyYS5jb20+CgogICAgICAgICogW2xvYWRlci9yZXNvdXJjZS5jXQogICAgICAgIEFkZGVkIExvYWRJY29uSGFuZGxlci4gSXQgZG9lc24ndCBkbyBhbnl0aGluZyB5ZXQsIGJ1dCBub3cgeW91CiAgICAgICAgY2FuIHVzZSBib3JsYW5kIGhlbHAgZmlsZXMgd2l0aCB3aW5oZWxwLmV4ZS4KClN1biBKdWwgMTYgMTE6NTg6NDUgMTk5NSBBbmFuZCBLdW1yaWEgPGFrdW1yaWFAb3plbWFpbC5jb20uYXU+CgoJKiBbbWlzYy9tYWluLmNdCglGaXhlZCB0byByZXR1cm4gMzg2IEVuaGFuY2VkIG1vZGUgY29ycmVjdGx5LiBBbHNvIHJldHVybiB0aGUgc2FtZQogCXR5cGUgb2YgQ1BVLCBmb3IgYm90aCBFbmhhbmNlZCBhbmQgU3RhbmRhcmQgbW9kZSwgbmFtZWx5IGEgMzg2LgoKU3VuIEp1bCAxNiAwMDowMjowNCAxOTk1ICAgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbQ29uZmlndXJlXSBbaW5jbHVkZS9vcHRpb25zLmhdIFtpbmNsdWRlL3dpbmVvcHRzLmhdCgkgIFttaXNjL21haW4uY11bbWlzYy9zcHkuY10KCSAgUmVtb3ZlZCBzdXBwb3J0IG9mIHNweSBmaWxlLiBSZWRpcmVjdGVkIHNweSBtZXNzYWdlcyB0byBzdGRkZWIuCgkgIFJlbW92ZWQgLXNweSBvcHRpb24uIEFkZGVkIC1kZWJ1Z21zZyArc3B5IG9wdGlvbi4KCgkqIFtkZWJ1Z2dlci9kYmcueV1bZGVidWdnZXIvZGVidWcubF0KCUVuYWJsZWQgc2VnbWVudGVkIGFkZHJlc3NlcyAoc2VnOm9mZnMpIGZvciBicmVhayBhbmQgeCBjb21tYW5kcy4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtvYmplY3RzL3JlZ2lvbi5jXSBbd2luZG93cy9ncmFwaGljcy5jXQoJICBbaW5jbHVkZS9yZWdpb24uaF0KCUZyYW1lUmduLCBSRUdJT05fRnJhbWVSZ246IE5ldyBmdW5jdGlvbnMKCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdCglJc1dpbk9sZEFwVGFzazogUmV0dXJuIGZhbHNlCgoJKiBbaWYxNjMyL21vdXNlLnNwZWNdCglDcGxBcHBsZXQ6IFJlbW92ZWQKCgkqIFtpZjE2MzIvdXNlci5zcGVjXSBbd2luZG93cy93aW4uY10KCVNob3dPd25lZFBvcHVwczogTmV3IGZ1bmN0aW9uCgoJKiBbaWYxNjMyL3dpbnNvY2suc3BlY10gW21pc2Mvd2luc29ja2V0LmNdCglpbmV0X2FkZHIsIHNlbGVjdDogTmV3IHByb3RvdHlwZXMgaW4gcmVsYXkgY29kZQoJRml4ZWQgbWVtb3J5IGxheW91dCBmb3IgbmV0ZGIgZnVuY3Rpb25zIChnZXRYYnlZKS4KCVdJTlNPQ0tfaW9jdGxzb2NrZXQ6IFRyYW5zbGF0ZWQgRklPTlJFQUQsIEZJT05CSU8sIGFuZCBGSU9BU1lOQwoKCSogW29iamVjdHMvY2xpcHBpbmcuY10KCVJlY3RWaXNpYmxlOiBGaXhlZCBjYWxsIHRvIExQVG9EUAoKCSogW3JjL3dpbmVyYy5jXQoJbWFpbjogUmVtb3ZlZCBleHRyYSBhcmd1bWVudCB0byBnZXRvcHQgZm9yIExpbnV4LgoKVHVlIEp1bCAxMSAwMDoxNDo0MSAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgogICAgICAgICogW2NvbnRyb2xzL2xpc3Rib3guY10KCVlldCBhbm90aGVyIGZpeCBmb3IgTGlzdEJveERpcmVjdG9yeSgpLgoJCgkqIFtsb2FkZXIvbW9kdWxlLmNdIFtpZjE2MzIva2VybmVsLnNwZWNdCglNYWtlIEdldE1vZHVsZUhhbmRsZSgpIGFjY2VwdCBpbnN0YW5jZSBoYW5kbGVzIGFzIHBhcmFtZXRlci4KCiAgICAgICAgKiBbaWYxNjMyL3JlbGF5LmNdIFtsb2FkZXIvdGFzay5jXQoJUHV0IGEgbWFnaWMgY29va2llIGF0IHRoZSBib3R0b20gb2YgdGhlIDMyIGJpdCBzdGFjaywgYW5kIGNoZWNrIG9uCgllYWNoIHJldHVybiBmcm9tIGEgMzIgYml0IGZ1bmN0aW9uIHdoZXRoZXIgaXQncyBzdGlsbCB0aGVyZS4gQ29tcGxhaW4KCWlmIGl0J3Mgbm90LgoKICAgICAgICAqIFtpZjE2MzIvdXNlci5zcGVjXQoJV3JvbmcgZW50cnkgZm9yIENsb3NlRHJpdmVyKCkuCgoJKiBbbWlzYy9kb3NfZnMuY10gW2xvYWRlci90YXNrLmNdIFtpbmNsdWRlL2Rvc19mcy5oXSBbbWlzYy9maWxlLmNdCglbbWlzY2VtdS9pbnQyMS5jXQoJTGFyZ2UgcGFydHMgb2YgZG9zX2ZzLmMgc2ltcGxpZmllZC4gQ2hhbmdlZCBpdCB0byB1c2Ugb25lCgljdXJyZW50IGRyaXZlL2RpcmVjdG9yeSBwZXIgdGFzaywgd2hpY2ggaXMgc2V0IHRvIHRoZSBtb2R1bGUgcGF0aCBvbgoJdGFzayBjcmVhdGlvbi4KCVByZXZlbnQgQ29yZWxQYWludCBmcm9tIGNsb3Npbmcgc3RkaW4uCglvcGVuKCkgd2l0aCBPX0NSRUFUIHNldCBtdXN0IGJlIHBhc3NlZCB0aHJlZSBwYXJhbWV0ZXJzLgoJRE9TIEZpbmRGaXJzdCgpL0ZpbmROZXh0KCkgY291bGQgY3Jhc2ggd2hlbiBGQV9MQUJFTCB3YXMgc2V0LiBGaXhlZCwKCWl0J3MgaW4gRE9TX3JlYWRkaXIoKSBub3cuCgoJKiBbbWlzYy9wcm9maWxlLmNdCglTb21lIGJhZGx5IHdyaXR0ZW4gc29mdHdhcmUgKExvdHVzIEZyZWVsYW5jZSBHcmFwaGljcykgcGFzc2VzIGEgYm9ndXMKCXNpemUgcGFyYW1ldGVyIHRoYXQgY2F1c2VkIFdpbmUgdG8gd3JpdGUgb2ZmIHRoZSBlbmQgb2YgYSBzZWdtZW50LgoJRml4ZWQuIChJdCdzIHByb2JhYmx5IHRvbyBwYXJhbm9pZCBub3cuKQoJCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdIFttdWx0aW1lZGlhL3RpbWUuY10gW211bHRpbWVkaWEvam95c3RpY2suY10KCVttdWx0aW1lZGlhL0ltYWtlZmlsZV0gW2lmMTYzMi93aW5wcm9jcy5zcGVjXQoJMTYgYml0IGVudHJ5IHBvaW50IGZvciBNTVN5c1RpbWVDYWxsYmFjay4KCVNwbGl0IG9mZiB0aW1lLmMgYW5kIGpveXN0aWNrLmMgZnJvbSBtbXN5c3RlbS5jLgoJCgkqIFtvYmplY3RzL2RpYi5jXQoJR2V0RElCaXRzKCk6IGNhbGwgWEdldEltYWdlKCkgdmlhIENhbGxUbzMyX0xhcmdlU3RhY2suCgogICAgICAgICogW3dpbmRvd3MvY3Vyc29yLmNdCglEZXN0cm95Q3Vyc29yKCk6IGRvIG5vdGhpbmcgZm9yIGJ1aWx0aW4gY3Vyc29ycy4KCQoJKiBbd2luZG93cy9tZGkuY10KCUhhbGYgb2YgV01fTURJU0VUTUVOVSBpbXBsZW1lbnRlZC4KCQoJKiBbd2luZG93cy93aW4uY10KCUVudW1XaW5kb3dzKCkgYW5kIEVudW1UYXNrV2luZG93cygpIG5ldmVyIGVudW1lcmF0ZWQgYW55IHdpbmRvd3MuCglGaXhlZC4KCgkqIFt3aW5kb3dzLyouY10KCUZpeGVkIEdldFBhcmVudCgpIHRvIHJldHVybiBjb3JyZWN0IHZhbHVlcyBmb3Igb3duZWQgd2luZG93cy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCURvbid0IHRyeSB0byBhY3RpdmF0ZSBkaXNhYmxlZCB0b3AtbGV2ZWwgd2luZG93cy4KCiAgICAgICAgKiBbd2luZG93cy9ub25jbGllbnQuY10KCVdvcmsgYXJvdW5kIGEgYnVnIGluIGdjYy0yLjcuMC4KCQoJKiBbdG9vbHMvYnVpbGQuY10gW2luY2x1ZGUvc3RhY2tmcmFtZS5oXSBbbWVtb3J5L2dsb2JhbC5jXSAKCVtsb2FkZXIvdGFzay5jXSBbbWVtb3J5L3NlbGVjdG9yLmNdCglTb21lIFZpc3VhbCBCYXNpYyBwcm9ncmFtcyAoYW5kIHBvc3NpYmx5IG90aGVycywgdG9vKSBleHBlY3QgRVMgdG8gYmUgCglwcmVzZXJ2ZWQgYnkgYSBjYWxsIHRvIGFuIEFQSSBmdW5jdGlvbiwgc28gd2UgaGF2ZSB0byBzYXZlIGl0LgoJSW4gR2xvYmFsRnJlZSgpIGFuZCBGcmVlU2VsZWN0b3IoKSwgd2UgbXVzdCBjbGVhciBDVVJSRU5UX1NUQUNLMTYtPmVzIAoJdG8gcHJldmVudCBzZWdmYXVsdHMgaWYgRVMgY29udGFpbmVkIHRoZSBzZWxlY3RvciB0byBiZSBmcmVlZC4KClN1biBKdWwgIDkgMjA6MjE6MjAgMTk5NSAgSm9uIFRvbWJzICA8am9uQGd0ZXgwMi51cy5lcz4KCgkqIFsqLypdCglBZGRlZCBtaXNzaW5nIHByb3RvdHlwZXMgdG8gaGVhZGVyIGZpbGVzIGFuZCByZWxldmFudCBpbmNsdWRlcwoJdG8gcmVkdWNlIGNvbXBpbGUgdGltZSB3YXJuaW5ncy4KClN1biBKdWwgIDkgMTg6MzI6NTYgMTk5NSAgTWljaGFlbCBQYXRyYSAgPG1pY2t5QG1hcmllLnBoeXNpay50dS1iZXJsaW4uZGU+CgoJKiBbY29uZmlndXJlLmluXSBbaW5jbHVkZS9jb25maWcuaF0gWyovTWFrZWZpbGUuaW5dCglOZXcgY29uZmlndXJhdGlvbiBzY2hlbWUgYmFzZWQgb24gYXV0b2NvbmYuCgpTYXQgSnVsICA4IDE0OjEyOjQ1IDE5OTUgIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhK0Bjcy5jbXUuZWR1PgoKCSogW21pc2NlbXUvaW9wb3J0cy5jXQoJUmV2YW1wIHRvIGhhdmUgb25seSBvbmUgaW4tIGFuZCBvbmUgb3V0LSB2YXJpYW50LCBib3RoIHJlYWxseQogCWltcGxlbWVudGVkLgoKCSogW21pc2NlbXUvaW5zdHIuY10KCUlOU1RSX0VtdWxhdGVJbnN0cnVjdGlvbjogVXNlIG5ldyBpb3BvcnQgaW50ZXJmYWNlLiAgSW1wbGVtZW50CiAJc3RyaW5nIGlvLiAgQ29ycmVjdCBpbnN0cnVjdGlvbiBwb2ludGVyIGZvciAzMi1iaXQgY29kZS4KCgkqIFtpbmNsdWRlL21pc2NlbXUuaF0KCVVwZGF0ZSBwb3J0IGZ1bmN0aW9uIHByb3RvdHlwZXMuCgoJKiBbaW5jbHVkZS9yZWdpc3RlcnMuaF0KCURlZmluZWQgRlMgYW5kIEdTLgoKU2F0IEp1bCAgOCAxMzozODo1NCAxOTk1ICBIYW5zIGRlIEdyYWFmZiAgPGdyYWFmZkB0d2k3Mi50d2kudHVkZWxmdC5ubD4KCgkqIFttaXNjL2Rvc19mcy5jXQoJQ2hvcE9mZlNsYXNoKCk6IEEgcGF0aCBjb25zaXN0aW5nIG9mZiBhIHNpbmdsZSBzbGFzaCBpcyBsZWZ0CiAJaW50YWN0LCBhbmQgbXVsdGlwbGUgc2xhc2hlcyBhcmUgYWxsIHJlbW92ZWQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBKdWwgIDUgMTk6MDY6MzUgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJRml4ZWQgZHJhd2luZyBidWcgdGhhdCBjYXVzZWQgcGFydCBvZiBhIG5vbi1jbGllbnQgc2Nyb2xsIGJhcgoJdG8gYmUgcGFpbnRlZCBldmVuIHdoZW4gdGhlIHNjcm9sbC1iYXIgd2FzIGhpZGRlbi4KCgkqIFtkZWJ1Z2dlci9icmVhay5jXSBbZGVidWdnZXIvZGJnLnldCglSZXdyb3RlIGJyZWFrcG9pbnQgaGFuZGxpbmcgdG8gd29yayBpbiAxNi1iaXQgbW9kZS4KCUltcGxlbWVudGVkIHNpbmdsZS1zdGVwcGluZyAoJ3N0ZXAnIGFuZCAnbmV4dCcgaW5zdHJ1Y3Rpb25zKS4KCgkqIFtkZWJ1Z2dlci9kZWJ1Zy5sXQoJRm9ybWF0IHNwZWNpZmllciBpcyBub3cgYSBzZXBhcmF0ZSB0b2tlbi4KCUVudGVyaW5nIGFuIGVtcHR5IGxpbmUgYXQgdGhlIGRlYnVnZ2VyIHByb21wdCBjYXVzZXMgdGhlIHByZXZpb3VzCgljb21tYW5kIHRvIGJlIHJlcGVhdGVkLCBsaWtlIHVuZGVyIGdkYi4KCQoJKiBbZGVidWdnZXIvZGVidWcubF0gW2RlYnVnZ2VyL3JlZ2lzdGVycy5jXQoJRGlmZmVyZW50aWF0ZSAxNi1iaXQgYW5kIDMyLWJpdCByZWdpc3RlcnMgd2l0aG91dCB0YWtpbmcgY3VycmVudAoJbW9kZSBpbnRvIGFjY291bnQgKCRlYXggaXMgYWx3YXlzIDMyLWJpdCwgJGF4IGFsd2F5cyAxNi1iaXQpLgoKCSogW2RlYnVnZ2VyL3N0YWNrLmNdCglGaXhlZCBzdGFjayBpbmZvcm1hdGlvbiByb3V0aW5lcyB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gMTYtYml0CglhbmQgMzItYml0IHN0YWNrcy4KCgkqIFtsb2FkZXIvdGFzay5jXQoJT3B0aW9uIC1kZWJ1ZyBub3cgc2V0cyBhIGJyZWFrcG9pbnQgYXQgdGhlIGZpcnN0IGluc3RydWN0aW9uIG9mCglldmVyeSBsb2FkZWQgdGFzay4KCgkqIFttaXNjZW11L2luc3RyLmNdCglBZGRlZCBoYW5kbGluZyBvZiBsb2NrLCByZXBlIGFuZCByZXBuZSBwcmVmaXhlcy4KCgkqIFtvYmplY3RzL2RpYi5jXQoJQ2hhbmdlZCBTdHJldGNoRElCaXRzKCkgdG8gZG8gdGhlIGNvcnJlY3QgdGhpbmcsIGV2ZW4gaWYgaXQncyBzdGlsbAoJbm90IHJlYWxseSBvcHRpbWFsLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUZpeGVzIGluIFJvdW5kUmVjdCgpLCB0aGFua3MgdG8gQmFiYWsgTWFzYWxlaGRhbi4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCVRyaWVkIHRvIGZpeCBtb3VzZSBldmVudCBoYW5kbGluZyB3aXRoIHJlc3BlY3QgdG8gZGlzYWJsZWQKCXdpbmRvd3MuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJQ2xlYXIgV0lOX05FRURTX05DUEFJTlQgZmxhZyBiZWZvcmUgc2VuZGluZyBXTV9OQ1BBSU5UIHRvIGF2b2lkCglpbmZpbml0ZSBsb29wcy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRml4ZWQgSXNXaW5kb3dWaXNpYmxlKCkgdG8gcmV0dXJuIEZBTFNFIHdoZW4gb25lIG9mIHRoZSBwYXJlbnQKCXdpbmRvd3MgaXMgaGlkZGVuLgoKU2F0IEp1bCAgMSAyMjowODoyMSAxOTk1ICAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIvY29tcG9iai5zcGVjXVttaXNjL2NvbXBvYmouY10KCUNvR2V0TWFsbG9jOiBOZXcgZnVuY3Rpb24KCUFkZGVkIHJlbGF5IGVudHJpZXMgZm9yIENPTVBPQkogb3JkaW5hbHMgYWJvdmUgMTAwCglDb0luaXRpYWxpemU6IENoYW5nZWQgcGFyYW1ldGVyIHRvIERXT1JECgoJKiBbaWYxNjMyL29sZTIuc3BlY10KCUV4cG9ydGVkIGltcGxlbWVudGF0aW9uIG9mIE9sZUJ1aWxkVmVyc2lvbgoKCSogW2lmMTYzMi9vbGUyZGlzcC5zcGVjXVttaXNjL29sZTJkaXNwLmNdW21pc2MvSW1ha2VmaWxlXQoJb2xlMmRpc3AuYzogTmV3IGZpbGUKCVN5c0FsbG9jU3RyaW5nLCBTeXNSZWFsbG9jU3RyaW5nLCBTeXNBbGxvY1N0cmluZ0xlbiwKCVN5c1JlQWxsb2NTdHJpbmdMZW4sIFN5c0ZyZWVTdHJpbmcsIFN5c1N0cmluZ0xlbjogbmV3IGZ1bmN0aW9ucwoKCSogW2lmMTYzMi9vbGUybmxzLnNwZWNdW2luY2x1ZGUvd2lubmxzLmhdW21pc2Mvb2xlMm5scy5jXQoJQ29tcGFyZVN0cmluZ0E6IE5ldyBmdW5jdGlvbgoKVGh1IEp1biAyOSAxOTo0MjowMiAxOTk1ICBNYXJjdXMgTWVpc3NuZXIgIDxtc21laXNzbkBmYXVpMDEuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgkqIFtvYmplY3RzL2ZvbnQuY10gW2lmMTYzMi9nZGkuc3BlY10KCU5ldyBzdHVicyBmb3IgQ3JlYXRlU2NhbGFibGVGb250UmVzb3VyY2UsIEdldEdseXBoT3V0bGluZS4KClRodSBKdW4gMjkgMTM6NDc6MDggR01UIDE5OTUgIEf2cmFuIFRoeW5pICAoZ29yYW5Abm9ycnNrZW4uYmlsZGJhc2VuLnNlKQoKCSogW21pc2MvY29tbWRsZy5jXQoJRXh0ZW5zaXZlIGNoYW5nZXMgYW5kIGJ1ZyBmaXhlcyB0byBGaWxlRGlhbG9nIGhhbmRsaW5nLAogICAgICAgIGJlaGF2ZXMgbW9yZSBsaWtlIG5hdGl2ZSBXaW5kb3dzLgoKV2VkIEp1biAyOCAxMzowNDo0NCAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgogICAgICAgICogW2NvbnRyb2xzL2xpc3Rib3guY10gW2NvbnRyb2xzL2NvbWJvLmNdCglTb21lIG1pbm9yIG9wdGltaXphdGlvbnMuCgkKCSogW21lbW9yeS9sb2NhbC5jXQoJTE9DQUxfRmluZEZyZWVCbG9jaygpOiBOZXZlciB1c2UgdGhlIGxhc3Qgb25lLgoJCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglHbG9iYWxSZUFsbG9jKCk6IEdNRU1fTU9ESUZZIG11c3Qgbm90IGJlIGlnbm9yZWQgd2hlbiBzaXplPT0wLgoJCgkqIFttaXNjL2ZpbGUuY10KCXJlYWQoKSByZXR1cm5zIGFuIGVycm9yIHdoZW4gbGVuZ3RoPT0wLiBUaGlzIGlzIG5vdCB3aGF0IFdpbmRvd3MKCXByb2dyYW1zIGV4cGVjdCwgc28gcGF5IGF0dGVudGlvbiB0byB0aGlzIGluIF9scmVhZCgpLiBDaGFuZ2VkIHRoaXMKCWluIF9sd3JpdGUoKSwgX2hyZWFkKCksIF9od3JpdGUoKSwgdG9vLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJTG9hZEljb24oKTogSWdub3JlIGJpaC0+YmlTaXplSW1hZ2UsIHNvbWUgaWNvbnMgaGF2ZSB3cm9uZyB2YWx1ZXMgaW4KCXRoZXJlLgoJCgkqIFtpZjE2MzIvc2hlbGwuc3BlY10gW21pc2Mvc2hlbGwuY10KCVdyb25nIHNwZWMgZmlsZSBlbnRyaWVzIGNhdXNlZCBoYXZvYzogSEtFWSBoYXMgMzIgYml0LCBub3QgMTYuCglBY2NlcHQgc29tZSBtb3JlIGNvbWJpbmF0aW9ucyBvZiBwYXJhbWV0ZXJzIGluIHRoZSBSZWcuLigpIGZ1bmN0aW9ucy4KCQoJKiBbaWYxNjMyL3Rvb2xoZWxwLnNwZWNdCglNYWtlIEludGVycnVwdFJlZ2lzdGVyKCkgYW5kIEludGVycnVwdFVucmVnaXN0ZXIoKSByZXR1cm4gZmFsc2UuCgoJKiBbd2luZG93cy9ob29rLmNdCglDYWxsTmV4dEhvb2tFeCgpIHVzZWQgdG8gY3Jhc2ggd2hlbiBjYWxsZWQgd2l0aCBhIG51bGwgaGhvb2suIEZpeGVkLgoKV2VkIEp1biAyOCAxMDoxNDozNCAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAgPG1hcnRpbkBpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpbmNsdWRlL25lZXhlLmhdW2xvYWRlci9uZV9pbWFnZS5jXQoJTkVfTG9hZFNlZ21lbnQ6IERldGVjdCBpdGVyYXRlZCBzZWdtZW50cwoKCSogW21pc2Mvb2xlMm5scy5jXQoJTE9DQUxFX1NMT05HREFURTogZml4ZWQgdHlwbwoKCSogW21pc2NlbXUvaW50NWMuY10KCVJlb3JkZXJlZCBpbmNsdWRlIGZpbGVzIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIExpbnV4IGxpYmMuNS4xCgoJKiBbcmMvd2luZXJjLmNdCglBZGRlZCAtYiBvcHRpb24gdG8gcHJvY2VzcyBiaW5hcnkgcmVzb3VyY2UgZmlsZXMgaW50byBDIGFycmF5cwoKCSogW2luY2x1ZGUvY2FsbGJhY2suaF0KCUNhbGxXbmRQcm9jOiBBZGRlZCBkdW1teSBkcyBwYXJhbWV0ZXIgZm9yIGxpYndpbmUKCgkqIFtpbmNsdWRlL2dkaS5oXVtpbmNsdWRlL3VzZXIuaF0KCVVTRVJfSEVBUF9BTExPQywgR0RJX0hFQVBfQUxMT0M6IGRyb3BwZWQgZmxhZ3MgcGFyYW1ldGVyCgoJKiBbaW5jbHVkZS9sZHQuaF1baW5jbHVkZS9zdGFja2ZyYW1lLmhdCglkZWZpbmVkIHNlZ21lbnQgY29udmVyc2lvbiBtYWNyb3MgZm9yIGxpYndpbmUKCgkqIFttaXNjL2F0b20uY10KCURlZmluZWQgVVNFUl9IZWFwU2VsIGZvciBsaWJ3aW5lCgoJKiBbbWlzYy9tYWluLmNdCglEaXNhYmxlIC1kbGwgb3B0aW9uIGZvciBsaWJ3aW5lCgoJKiBbbWlzYy91c2VyLmNdCglyZW1vdmVkIEdldEZyZWVTeXN0ZW1SZXNvdXJjZXMsIFN5c3RlbUhlYXBJbmZvIGZyb20gbGlid2luZSBmb3Igbm93CgoJKiBbdG9vbGtpdC9oZWFwLmNdCglmaXhlZCBMb2NhbExvY2sgcHJvdG90eXBlCgoJKiBbdG9vbGtpdC9zdXAuY10KCXN5bmMnZWQgbG9hZF9tel9oZWFkZXIsIGxvYWRfbmVfaGVhZGVyIHdpdGggc3RydWN0dXJlcwoKCSogW3Rvb2xraXQvd2lubWFpbi5jXQoJRGlzYWJsZWQgcmVzb3VyY2UgRExMcyBmb3IgbGlid2luZSBmb3Igbm93CgpNb24gSnVuIDI2IDE5OjMwOjI0IDE5OTUgIEhhbnMgZGUgR3JhYWZmICAoZ3JhYWZmQHR3aTcyLnR3aS50dWRlbGZ0Lm5sKQoKCSogW21pc2MvbWFpbi5jXQoJRml4ZWQgLWVuaGFuY2VkIG9wdGlvbiB0byByZXBvcnQgYSAzODYgQ1BVIGluc3RlYWQgb2YgYSAyODYuCgpGcmkgSnVuIDIzIDIzOjE4OjI1IDE5OTUgIE1hcmN1cyBNZWlzc25lciAgPG1zbWVpc3NuQGZhdWkwMS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFttaXNjL2Rvc19mcy5jXQoJUmVtb3ZlIG1heGltdW0gb3BlbiBkb3NkaXJlbnQgbGltaXQgKGZpeGluZyB0aGUgd2luZmlsZS5leGUKIAlwcm9ibGVtKSBieSB1c2luZyB0ZWxsZGlyKCkvc2Vla2RpcigpLgoJCkZyaSBKdW4gMjMgMTM6NDI6MjUgMTk5NSAgSGFucyBkZSBHcmFhZmYgIChncmFhZmZAdHdpNzIudHdpLnR1ZGVsZnQubmwpCgoJKiBbbWlzYy9wcm9maWxlLmNdCglGaXhlZCBwcm9ibGVtIHBhcnNpbmcgZW1wdHkgbGluZXMgd2l0aGluIHNlY3Rpb25zIGluIC5pbmkgZmlsZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBKdW4gMTkgMjA6Mjk6NTAgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQoKCSogW2RlYnVnZ2VyLyouY10KCU1vZGlmaWVkIGRlYnVnZ2VyIHRvIHVzZSBzZWdtZW50ZWQgcG9pbnRlcnMgZXZlcnl3aGVyZS4KCgkqIFtpZjE2MzIvc2hlbGwuc3BlY10gW2lmMTYzMi9zb3VuZC5zcGVjXSBbaWYxNjMyL3VzZXIuc3BlY10KCURlY2xhcmVkIGFsbCBmdW5jdGlvbnMgdGhhdCByZXR1cm4gb25seSAxNi1iaXQgYXMgJ3Bhc2NhbDE2Jy4KCgkqIFtpbmNsdWRlL2xkdC5oXSBbbWVtb3J5L2xkdC5jXQoJRXhwb3J0IExEVF9FbnRyeVRvQnl0ZXMgKG5ldykgYW5kIExEVF9CeXRlc1RvRW50cnkgZm9yIERQTUkuCglNYWludGFpbiBhIGNvcHkgb2YgdGhlIHNlbGVjdG9yIGZsYWdzLCByZW1vdmluZyB0aGUgbmVlZCB0byBtYWtlIGEKCXN5c3RlbSBjYWxsIHRvIHJldHJpZXZlIGFuIExEVCBlbnRyeS4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglGaXhlZCBidWcgd2l0aCBtb2R1bGUgZmlsZSBoYW5kbGUgY2FjaGUuCgoJKiBbbG9hZGVyL25lX3Jlc291cmNlLmNdCglGaXhlZCBmaWxlIG5hbWUgYnVnIGluIE5FX0FjY2Vzc1Jlc291cmNlKCkuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglGaXhlZCBidWcgaW4gTG9hZEljb24oKSB0aGF0IGNhdXNlZCB3cm9uZyBjb2xvcnMgdG8gYmUgdXNlZCBmb3IKCXRoZSBpY29uIG1hc2suCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJTW92ZWQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIHRvIG1pc2NlbXUvaW5zdHIuYy4KCgkqIFttaXNjL2Rvc19mcy5jXSBbbWlzY2VtdS9pbnQyMS5jXQoJTG90cyBvZiBzbWFsbCBmaXhlcywgdGhhbmtzIHRvIE1vcnRlbiBXZWxpbmRlci4KCgkqIFttaXNjZW11L2RwbWkuY10KCU1vcmUgY29tcGxldGUgRFBNSSBlbXVsYXRpb24uCgoJKiBbbWlzY2VtdS9pbnN0ci5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgcHJlZml4ZXMgaW4gaW5zdHJ1Y3Rpb25zIHRvIGVtdWxhdGUuCgoJKiBbbWlzY2VtdS9pbnQyZi5jXQoJVXNlIHJlZ2lzdGVyIG1hY3JvcyBpbnN0ZWFkIG9mIGRlc3Ryb3lpbmcgdGhlIGhpZ2ggcGFydCBvZiAzMi1iaXQKCXJlZ2lzdGVycy4KCgkqIFtvYmplY3RzL2RjLmNdCglGaXhlZCBidWcgaW4gR2V0RENTdGF0ZSgpIHRoYXQgZmFpbGVkIHRvIGNsZWFyIHRoZSBuZXcgREMuCgoJKiBbcmMvc3lzcmVzLnJjXQoJUmVtb3ZlZCBkaWFsb2dzIDExIGFuZCAxMiB0aGF0IHdlcmUgbmV2ZXIgdXNlZC4KCgkqIFt0b29scy9idWlsZC5jXQoJJ3Bhc2NhbDE2JyBnZW5lcmF0ZWQgZnVuY3Rpb25zIGRpZCBub3Qgc2F2ZSAlZHguCglSZW1vdmVkIHVzZSBvZiAlZnMgdG8gYWNjZXNzIHRoZSBzdGFjay4KCSVkcyBpcyBubyBsb25nZXIgaW5pdGlhbGl6ZWQgYmVmb3JlIGNhbGxpbmcgYSAxNi1iaXQgcm91dGluZS4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQWNjZXB0IGEgTlVMTCBwb2ludGVyIGFzIHdpbmRvdyB0aXRsZS4KCgkqIFt3aW5kb3dzL21kaS5jXQoJTURJQ2FzY2FkZTogc2tpcCBpY29uaWMgd2luZG93cy4KCUltcGxlbWVudGVkIENhbGNDaGlsZFNjcm9sbCgpLgoJCgkqIFt3aW5kb3dzL3V0aWxpdHkuY10KCUZpeGVkIE11bERpdigpIGZvciBpbGxlZ2FsIHZhbHVlcy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRml4ZWQgWCBlcnJvciBpbiBDcmVhdGVXaW5kb3dFeCgpIHdoZW4gV01fTkNDQUxDU0laRSByZXR1cm5lZAoJYSB6ZXJvIHdpZHRoIG9yIGhlaWdodC4KClN1biBKdW4gMTggMjI6MjI6MzAgTUVUIERTVCAxOTk1ICBGb25zIEJvdG1hbiAgKGJvdG1hbkBpbnRlci5ubC5uZXQpCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRml4ZWQgInVuaW5pdGFsaXplZCIgbWVzc2FnZSB3aGljaCAtV2FsbCBjb3VsZG50IHNlZSB0byBiZSBvawoJaW4gRURJVF9Xcml0ZVRleHQuCgoJKiBbaW5jbHVkZS9kZWJ1Zy5oXQoJQWRkZWQgZGVmaW5lIGZvciBleHRyYSBjaGVja3MgaW4gQVBJIGRlZmluaXRpb25zIGR1cmluZyBkZWJ1Z2dpbmcuCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglBZGRlZCBuZXdsaW5lIGluIE5FX0ZpeHVwUHJvbG9ncyB0byBhdm9pZCBsb25nIGxpbmVzLgoKCSogW21pc2MvZG9zX2ZzLmNdCglBZGRlZCBleHRyYSBzYWZldHkgY2hlY2sgaW4gRE9TX1ZhbGlkRHJpdmUuCgoJKiBbbWlzYy9leGVjLmNdCglGaXhlZCBkZWZpbml0aW9uIG9mIEV4aXRXaW5kb3dzLgoJClN1biBKdW4gMTggMjE6MTY6MDggMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCVNvbWUgZml4ZXMsIG1vc3RseSBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIGJ1dCBhbHNvIGZvciB0ZXh0IHNlbGVjdGlvbgoJYW5kIHRhYiBwb3N0aXRpb25zLiBHZW5lcmFsIGNsZWFudXAuIE5vdGVwYWQuZXhlIG5vdyB3b3Jrcy4KCgkqIFtjb250cm9scy9jb21iby5jXQoJRml4OiB0aGUgaHduZCBmaWVsZCBvZiB0aGUgRFJBV0lURU1TVFJVQ1Qgc2hvdWxkIGFsd2F5cyBiZSB0aGF0IG9mCgl0aGUgY29tYm8gYm94LCBub3QgdGhlIENvbWJvTEJveCB0aGF0IGJlbG9uZ3MgdG8gaXQuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJSGFuZGxlIGl0ZW1JRCBmaWVsZCBjb3JyZWN0bHkgdGhyb3VnaG91dC4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUltcGxlbWVudGVkIGZsYWcgTE1FTV9aRVJPSU5JVC4KCUxvY2FsUmVBbGxvYygpIGNvdWxkIHRyYXNoIHRoZSBoZWFwLiBGaXhlZC4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUZPTlRfTWF0Y2hGb250KCk6IGRvbid0IGdldCBjb25mdXNlZCBieSBuZWdhdGl2ZSB3aWR0aHMuCglGaXhlZCBhIHNlZ2ZhdWx0IGluIEVudW1Gb250cygpLgoKCSogW29iamVjdHMvdGV4dC5jXQoJRHJhd1RleHQoKTogRFRfQ0FMQ1JFQ1QgaW1wbGllcyBEVF9OT0NMSVAuCgoJKiBbb2JqZWN0cy9kY3ZhbHVlcy5jXQoJTUFLRUxPTkcgd2FzIHVzZWQgd2l0aCBiYWQgcGFyYW1ldGVycyBpbiBEQ19HRVRfWF9ZLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglEb24ndCBzaG93IHRoZSBkaWFsb2cgaWYgV1NfVklTSUJMRSBpc24ndCBzZXQgaW4gdGhlIHRlbXBsYXRlLgoKCSogW3dpbmRvd3MvdXRpbGl0eS5jXQoJVVRJTElUWV9jb252ZXJ0QXJncygpOiBOZXZlciBwYXNzIGFuIGV4cHJlc3Npb24gY29udGFpbmluZyArKyBpbnRvIGEKCW1hY3JvLi4uCgoJKiBbd2luZG93cy93aW4uY10KCVNldFBhcmVudCgpIHNob3VsZCB1bmxpbmsgdGhlIHdpbmRvdyBiZWZvcmUgY2hhbmdpbmcgdGhlIHBhcmVudC4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCURvbid0IGNhbGwgdGltZXIgZnVuY3Rpb25zIHZpYSBDYWxsV2luZG93UHJvYygpLCBzaW5jZSBpdCBjaGVja3MKCXdoZXRoZXIgaHduZD09MCBhbmQgZG9lcyBub3QgY2FsbCB0aGUgZnVuY3Rpb24gaW4gdGhhdCBjYXNlLgoKCSogW21pc2NlbXUvaW5zdHIuY10KCUlnbm9yZSBpbnRlcnJ1cHQgMHgzRCwgZm9yIFZCUlVOMzAwLkRMTC4KCgkqIFttaXNjL2NvbW1kbGcuY10KCURvbid0IHJlbHkgb24gdGhlIGl0ZW1EYXRhIGZpZWxkIG9mIHRoZSBEUkFXSVRFTVNUUlVDVCB0byBjb250YWluIGEKCXBvaW50ZXIgdG8gdGhlIGl0ZW0gdGV4dC4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCURpc2FibGUgT0xFIGFuZCBEREVNTCBETExzIGJ5IGRlZmF1bHQsIHNpbmNlIHRoZXkgY29udGFpbiBub3RoaW5nIGJ1dAoJc3R1YnMgYW55d2F5LiBTSEVMTCwgQ09NTURMRyBhbmQgV0lOODdFTSBhcmUgbGVmdCBlbmFibGVkLCBhbHRob3VnaAoJc29tZSBwcm9ncmFtcyBtYXkgd29yayBiZXR0ZXIgd2l0aG91dCB0aGVtLgoJCgkqIFttdWx0aW1lZGlhLyouY10gW2luY2x1ZGUvbXVsdGltZWRpYS5oXSBbaW5jbHVkZS9kcml2ZXIuaF0KCUJlZ3VuIGNsZWFuaW5nIHRoaW5ncyB1cCBhIGxpdHRsZS4gUmVwbGFjZWQgcHJpbnRmcyB3aXRoIGRwcmludGZfCgltYWNyb3MsIG1hZGUgZnVuY3Rpb25zIHN0YXRpYyB3aGVyZSBwb3NzaWJsZSwgYW5kIHNvbWUgb3RoZXIgbWlub3IKCWNoYW5nZXMuCgpTdW4gSnVuIDExIDIzOjE5OjEwIDE5OTUgIE1hcnRpbiB2b24gTG9ld2lzICA8bWFydGluQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2RlYnVnZ2VyL2RiZy55XVtkZWJ1Z2dlci9kYmcubF0KCVJlbW92ZWQgc3BlY2lhbCBoYW5kbGluZyBmb3IgRklMRV9JREVOVElGRVIsIGJlY2F1c2UgaXQgY2F1c2VkCglwcm9ibGVtcyB3aXRoIHgvPGZvcm1hdD4gc3RhdGVtZW50cy4KCgkqIFtkZWJ1Z2dlci9pbmZvLmNdCglVc2UgU0NfRVNQIGluc3RlYWQgb2YgU0NfRUlQIGZvciBzdGFjayBkdW1wLgoKCSogW21pc2MvY29tcG9iai5jXVtpZjE2MzIvY29tcG9iai5zcGVjXQoJQ29CdWlsZFZlcnNpb24sIENvSW5pdGlhbGl6ZSwgQ29VbmluaXRpYWxpemU6IG5ldyBmdW5jdGlvbnMKCgkqIFttaXNjL29sZTIuY11baWYxNjMyL29sZTIuc3BlY11bbWlzYy9JbWFrZWZpbGVdW2luY2x1ZGUvb2xlMi5oXQoJTmV3IGZpbGVzIG9sZTIuYywgb2xlMi5oCglPbGVCdWlsZFZlcnNpb24sIE9sZUluaXRpYWxpemUsIE9sZVVuaW5pdGlhbGl6ZTogbmV3IGZ1bmN0aW9ucwoKCSogW2lmMTYzMi9vbGUyZGlzcC5zcGVjXQoJQWRkZWQgbWlzc2luZyBvcmRpbmFscyBhYm92ZSAxMDkKCgkqIFttaXNjL29sZTJubHMuY11baWYxNjMyL29sZTJubHMuc3BlY11baW5jbHVkZS93aW5ubHMuaF0KCU5ldyBmaWxlIHdpbm5scy5oCglHZXRMb2NhbGVJbmZvQTogbmV3IGZ1bmN0aW9uCgoJKiBbaWYxNjMyL3NoZWxsLnNwZWNdCglBZGRlZCBGaW5kRW52aXJvbm1lbnRTdHJpbmcgYXMgc3R1YgoKCSogW21pc2Mvb2xlY2xpLmNdW2lmMTYzMi9vbGVjbGkuc3BlY10KCU9sZUlzRGNNZXRhOiBOZXcgZnVuY3Rpb24KCgkqIFtvYmplY3RzL2ZvbnRdW21pc2MvZ2RpLnNwZWNdCglHZXRLZXJuaW5nUGFpcnM6IG5ldyBmdW5jdGlvbgoKCSogW21pc2Mvc2hlbGwuY10KCVNoZWxsRXhlY3V0ZTogSW1wbGVtZW50ZWQgc3VwcG9ydCBmb3Igc3RhcnRpbmcgcHJvZ3JhbXMKCgkqIFtpZjE2MzIvdXNlci5zcGVjXQoJSW5zZXJ0ZWQgbWlzc2luZyByZWxheSB0byBHZXRDbGlwQ3Vyc29yCgpTdW4gSnVuIDExIDIwOjM0OjQ3IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KICAgICAgICAKCSogW2NvbnRyb2xzL2VkaXQuY10KCUZpeCBhIHByb2JsZW0gd2l0aCB0aGUgbG9jYWwgaGVhcC4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglGaXhlZCB3cm9uZyBkZWNsYXJhdGlvbnMgb2YgQ0FUQ0hCVUYgYW5kIExQQ0FUQ0hCVUYuCgkKCSogW2luY2x1ZGUvbWRpLmhdIFt3aW5kb3dzL21kaS5jXQoJVGhpcyBjb2RlIHN0aWxsIGFzc3VtZWQgc2VnbWVudGVkIGFkZHJlc3M9PWxpbmVhciBhZGRyZXNzLiBGaXhlZC4KCgkqIFtpbmNsdWRlL21zZG9zLmhdIFttaXNjL2Rvc19mcy5jXQoJVGhlIGZpbGVtYXNrIGZpZWxkIG9mIHRoZSBkb3NkaXJlbnQgc3RydWN0dXJlIGNvdWxkIGJlIG92ZXJydW4uIEZpeGVkLgoJSWYgeW91IGhhZCBhIGZpbGUgY2FsbGVkIGZvb2JhciBhbmQgYSBmaWxlIGNhbGxlZCBmb28sIHRyeWluZyB0byAKCUZpbmRGaWxlKGZvbykgY291bGQgYWNjaWRlbnRhbGx5IGZpbmQgZmlsZSBmb29iYXIgaW5zdGVhZC4gRml4ZWQuCgkKCSogW21pc2MvZmlsZS5jXQoJT3BlbkZpbGUoKTogQWx3YXlzIHJldHVybiB0aGUgZnVsbCBwYXRobmFtZSBpbiBvZnMtPnN6UGF0aE5hbWUuIFRoaXMgCglhbHNvIGZpeGVzIEdldE1vZHVsZUZpbGVuYW1lKCkuCglQcmV2ZW50IF9sY2xvc2UoKSBmcm9tIGNsb3Npbmcgc3RkZXJyIG9yIHN0ZG91dC4KCgkqIFttaXNjL3Byb2ZpbGUuY10KCVNlYXJjaCBmb3IgLmluaSBmaWxlcyBpbiB0aGUgcGF0aCBvZiB0aGUgY3VycmVudCBtb2R1bGUgYXMgd2VsbC4KCShOZWVkZWQgYnkgTG90dXMgT3JnYW5pemVyLikKCgkqIFtsb2FkZXIvdGFzay5jXSBbbG9hZGVyL25lX2ltYWdlLmNdIFtsb2FkZXIvbW9kdWxlLmNdCglbbWVtb3J5L2xvY2FsLmNdCglMb2NhbCBoZWFwcyBhcmUgbm93IGluaXRpYWxpemVkIGJ5IEluaXRUYXNrKCkgZm9yIGV4ZWN1dGFibGVzLiBETExzCgloYXZlIHRvIGNhbGwgTG9jYWxJbml0KCkgdGhlbXNlbHZlcywgTG9jYWxJbml0KCkgaGFzIHRvIHB1dCB0aGUKCWhlYXAgYXQgdGhlIGVuZCBvZiB0aGUgc2VnbWVudCB3aGVuIGNhbGxlZCB3aXRoIHN0YXJ0PT0wLiBXZSBubyBsb25nZXIKCWFsbG9jYXRlIHRoZSBER1JPVVAgd2l0aCA2NGsgb24gc3RhcnR1cCwgYnV0IGdyb3cgdGhlIGxvY2FsIGhlYXAKCWluIExPQ0FMX0dldEJsb2NrKCkgd2hlbiBuZWNlc3NhcnkuCgogICAgICAgICogW2xvYWRlci9tb2R1bGUuY10KCUxvYWRMaWJyYXJ5KCkgc2hvdWxkIGNhbGwgTG9hZE1vZHVsZSgpIGluIGFsbCBjYXNlcywgZXZlbiBpZiB0aGUKCURMTCBpcyBhbHJlYWR5IGxvYWRlZCwgdG8gZW5zdXJlIHRoYXQgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBjb3JyZWN0LgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJU29tZSBjaGFuZ2VzIHRvIGZ1bmN0aW9uIHByb2xvZyBmaXh1cC4gRG9lcyBhbnlvbmUga25vdyBleGFjdGx5IGhvdwoJdGhpcyBpcyBzdXBwb3NlZCB0byB3b3JrPyBJIGFtIG9ubHkgZ3Vlc3NpbmcgaGVyZS4KCUluIE5FX0luaXRpYWxpemVETExzKCksIGluaXRpYWxpemUgdGhlIERMTHMgYSBtb2R1bGUgcmVmZXJzIHRvIGJlZm9yZQoJdGhlIG1vZHVsZSBpdHNlbGYuCgkKICAgICAgICAqIFtsb2FkZXIvdGFzay5jXQoJSW5pdGlhbGl6ZSBpbnN0YW5jZSBkYXRhIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIERHUk9VUCBpbiBJbml0VGFzaygpLgoKCSogW21lbW9yeS9sb2NhbC5jXQoJU29tZSBmaXhlcyBmb3IgbW92ZWFibGUgYmxvY2tzLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJQWxsIHRoZSBJc0JhZCpQb2ludGVyKCkgZnVuY3Rpb25zIHJldHVybmVkIGV4YWN0bHkgdGhlIHdyb25nIGJvb2xlYW4KCXZhbHVlIGluIGFsbCBjYXNlcyEKCQoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUZpeGVkIGFub3RoZXIgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGRlYnVnZ2luZyBvdXRwdXQuCgkKCSogW29iamVjdHMvZm9udC5jXQoJU29tZSBtb3JlIHJlY292ZXJ5IHBvc3NpYmlsaXRpZXMgZm9yIEZPTlRfTWF0Y2hGb250KCkgaWYgYSBzcGVjaWZpZWQKCWZvbnQgZG9lcyBub3QgZXhpc3QuCgkKCSogW3dpbmRvd3Mvd2luLmNdCglUaGUgZGlhbG9nIGNvZGUgbWF5IGNhbGwgQ3JlYXRlV2luZG93RXggd2l0aCBhbiBpbnRlZ2VyIGluIHdpbmRvd05hbWUuCglUaGlzIGhhcHBlbnMgZm9yIHN0YXRpYyBpY29uIGNvbnRyb2xzIHRoYXQgZXhwZWN0IGEgcmVzb3VyY2UgSUQgYXMKCXRoZSB3aW5kb3cgbmFtZS4gQ3JlYXRlV2luZG93RXgoKSB1c2VkIHRvIGNyYXNoLiBGaXhlZC4KCQoJKiBbd2luZG93cy9jbGFzcy5jXSBbd2luZG93cy93aW4uY10KCVdpbmRvdyBjbGFzc2VzIGFyZSBvd25lZCBieSBtb2R1bGVzLCBub3QgaW5zdGFuY2VzLiBDaGFuZ2VkCglSZWdpc3RlckNsYXNzKCksIFVucmVnaXN0ZXJDbGFzcygpLCBHZXRDbGFzc0luZm8oKSBhbmQgQ3JlYXRlV2luZG93RXgoKQoJYWNjb3JkaW5nbHkuCgpTYXQgSnVuIDEwIDE2OjEwOjUzIDE5OTUgIE9sYWYgRmxlYmJlIDxvLmZsZWJiZUBzY2llbmNlLWNvbXB1dGluZy51bmktdHVlYmluZ2VuLmRlPgoKCSogW21pc2NlbXUvaW50MjEuY10KCSAgY2xvY2suZXhlIHdhcyBkaXNwbGF5aW5nIGluY29ycmVjdCB5ZWFyLgoKRnJpIEp1biA5IDIwOjM2OjU2IDE5OTUgIFZpY3RvciBTY2huZWlkZXIgPHRhaWxvckBjcmwuY29tPgoKCSogW2luY2x1ZGUvY3Vyc29yLmhdIFt3aW5kb3dzL2N1cnNvci5jXQoJSW1wbGVtZW50ZWQgQ3JlYXRlQ3Vyc29ySWNvbkluZGlyZWN0KCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBKdW4gIDYgMTI6MTE6NDEgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQoKCSogW2NvbnRyb2xzL21lbnUuY10KCUZpeGVkIGJ1ZyB3aXRoIGRyYXdpbmcgbXVsdGktY29sdW1uIG1lbnVzIHdpdGggdmVydGljYWwgc2VwYXJhdG9yLgoKCSogW2RlYnVnZ2VyL2RlYnVnLmxdCglGaXhlZCBOVUxMLXBvaW50ZXIgcmVmZXJlbmNlIGFmdGVyIHJlYWRsaW5lKCkuCgoJKiBbaWYxNjMyL3dpbnByb2NzLnNwZWNdIFttaXNjZW11L2ludDIxLmNdIFttaXNjZW11L2ludGVycnVwdHMuY10KCUFkZGVkIGludGVycnVwdCB2ZWN0b3IgZW11bGF0aW9uLiBBbGxvd3MgdG8gcmV0cmlldmUgYW4gaW50ZXJydXB0Cgl2ZWN0b3IgYW5kIGp1bXAgdG8gaXQgd2l0aG91dCBjcmFzaGluZy4KCgkqIFtsb2FkZXIvbGR0LmNdCglNb3ZlZCBsZHQuYyB0byBtZW1vcnkgZGlyZWN0b3J5LgoKCSogW2xvYWRlci90YXNrLmNdCglJbXBsZW1lbnRlZCBMb2NrQ3VycmVudFRhc2soKSBhbmQgR2V0SW5zdGFuY2VEYXRhKCkuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUZpeGVkIGEgYnVnIHRoYXQgY2F1c2VkIFN0cmV0Y2hCbHQoKSB0byB1c2Ugd3JvbmcgY29sb3JzIHdoZW4KCXN0cmV0Y2hpbmcgYSBtb25vY2hyb21lIGJpdG1hcCB0byBhIGNvbG9yIGRpc3BsYXkuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCUZpeGVkIGEgc2VnbWVudGVkIHBvaW50ZXIgYnVnIGluIENyZWF0ZUJpdG1hcEluZGlyZWN0KCkuCgoJKiBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIHBvc3NpYmlsaXR5IHRvIGhhdmUgYXJndW1lbnRzIGZvciByZWdpc3RlciBmdW5jdGlvbnM7IHVzZWQKCWJ5IGludGVycnVwdCB2ZWN0b3JzIHRvIHJlbW92ZSB0aGUgZmxhZ3MgZnJvbSB0aGUgc3RhY2suCglHZW5lcmF0ZSBhIG5ldyBmdW5jdGlvbiBDYWxsVG8zMl9MYXJnZVN0YWNrKCksIHRoYXQgYWxsb3dzIGNhbGxpbmcKCWEgMzItYml0IGZ1bmN0aW9uIHVzaW5nIHRoZSBvcmlnaW5hbCAzMi1iaXQgc3RhY2ssIGZvciBmdW5jdGlvbnMKCXRoYXQgbmVlZCBtb3JlIHRoYXQgNjRrIG9mIHN0YWNrLgoKVHVlIE1heSAzMCAxMDoyOTo1NiAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAgPG1hcnRpbkBpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIvc2hlbGwuc3BlY10gW21pc2Mvc2hlbGwuY10KCURvRW52aXJvbm1lbnRTdWJzdDogZml4ZWQgcHJvdG90eXBlCgoJKiBbaWYxNjMyL2dkaS5zcGVjXSBbb2JqZWN0cy9wYWxldHRlLmNdCglTZXRTeXN0ZW1QYWxldHRlVXNlOiBuZXcgZnVuY3Rpb24KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtsb2FkZXIvcmVzb3VyY2UuY10KCURpcmVjdFJlc0FsbG9jOiBuZXcgZnVuY3Rpb24KCgkqIFtpZjE2MzIvdXNlci5zcGVjXSBbd2luZG93cy9rZXlib2FyZC5jXQoJU2V0S2V5Ym9hcmRTdGF0ZTogbmV3IGZ1bmN0aW9uCgpNb24gTWF5IDI5IDEyOjU4OjI4IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KICAgICAgICAKCSogW3Rvb2xzL2J1aWxkLmNdCiAgICAgICAgUHJldmVudCBpbnRlcnJ1cHRzIGZyb20gZGVzdHJveWluZyB0aGUgYXJncyBmb3IgYSAzMiBiaXQgZnVuY3Rpb24KICAgICAgICBieSBsb2FkaW5nIHRoZSBjb3JyZWN0IHZhbHVlIGludG8gJWVzcCBkaXJlY3RseSBhZnRlciAlc3MuCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdIFtsb2FkZXIvbW9kdWxlLmNdCglUaGUgbmV3IGluc3RhbmNlIG11c3QgYmUgY3JlYXRlZCBlYXJsaWVyIGluIExvYWRNb2R1bGUoKSwgc28gdGhhdAoJZml4dXBzIHJlZmVyZW5jaW5nIGl0IHdpbGwgYmUgaGFuZGxlZCBjb3JyZWN0bHkuCiAgICAgICAgSW5pdGlhbGl6ZSB0aGUgbG9jYWwgaGVhcCBmb3IgYSBER1JPVVAgaW4gTkVfTG9hZFNlZ21lbnQoKS4KCQoJKiBbb2JqZWN0cy9kaWIuY10KCUxpa2UgUkxFOCBiaXRtYXBzLCBSTEU0IGJpdG1hcHMgZG9uJ3QgYWx3YXlzIGVuZCB3aXRoIGEgcHJvcGVyIGNvZGUuCglUaGlzIHVzZWQgdG8gY3Jhc2ggV2luZS4gRml4ZWQuCgogICAgICAgICogW29iamVjdHMvdGV4dC5jXQoJRml4IHBvc3NpYmxlIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBkZWJ1Z2dpbmcgb3V0cHV0LgoJCgkqIFttaXNjL2NvbW1kbGcuY10KCUhhbmRsZSB1c2VyIGlucHV0IGluIHRoZSBlZGl0IGNvbnRyb2wgYmV0dGVyLiBTb21lIGJ1Z3MgZml4ZWQuCgkKCSogW21lbW9yeS9sb2NhbC5jXQoJU3RhcnRlZCBpbXBsZW1lbnRpbmcgbW92ZWFibGUgYmxvY2tzLiBUaGlzIGlzIHVuZmluaXNoZWQgKCEpLCBidXQKCWF0IGxlYXN0IGl0IGRvZXMgbm90IHNlZW0gdG8gYnJlYWsgdGhpbmdzLgoKV2VkIE1heSAyNCAxMzoyNjozNiAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CiAgICAgICAgCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglMb2FkTW9kdWxlKCk6IERMTHMgb2NjYXNpb25hbGx5IGhhdmUgYSBkYXRhIHNlZ21lbnQsIGFuZCB0aGV5IHdvcmsKCW11Y2ggYmV0dGVyIGlmIGl0IGlzIGxvYWRlZCA6LSkKCUxvYWRMaWJyYXJ5KCk6IHBhc3MgSE1PRFVMRSBpbnN0ZWFkIG9mIEhJTlNUQU5DRSB0byBORV9Jbml0aWFsaXplRExMcy4KCUZpbmRNb2R1bGUoKTogYWxzbyBzdHJpcCBvZmYgdGhlIGxhc3QgYmFja3NsYXNoIG9mIHRoZSBwYXRobmFtZXMKCShXaW5oZWxwIHRyaWVkIHRvIGxvYWQgQzpcV0lORE9XU1xTWVNURU1cQ09NTURMRy5ETEwpLgoJR2V0TW9kdWxlSGFuZGxlKCk6IGp1c3QgY2FsbCBNT0RVTEVfRmluZE1vZHVsZSwgaXQgZG9lcyB0aGUgc2FtZSBqb2IsCglvbmx5IGJldHRlci4KCQoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglMb2NhbEluaXQoKSB0aGUgaGVhcCBvZiBhIERMTCBpbiBORV9Jbml0RExMLiAoVGhpcyBpcyBwcm9iYWJseQoJbm90IHJlYWxseSBjb3JyZWN0LCBpdCBzZWVtcyB0aGF0IGFsbCBwcm9ncmFtcyBhbmQgRExMcyB0cnkgdG8gZG8KCXRoaXMgdGhlbXNlbHZlcy4gQnV0IHRoZXkgcGFzcyB3ZWlyZCBwYXJhbWV0ZXJzLikKCU5FX0luaXRpYWxpemVETExzIHNob3VsZCBhbHNvIGNhbGwgTkVfSW5pdERMTCBmb3IgdGhlIHBhc3NlZCBoTW9kdWxlLgoJCgkqIFtsb2FkZXIvdGFzay5jXSBbbWlzYy91c2VyLmNdCglGaW5pc2ggZ2xvYmFsIGluaXRpYWxpemF0aW9ucyBpbiBJbml0VGFzayBpbnN0ZWFkIG9mIEluaXRBcHAsIG9yCglhbGwgdGhlIERMTHMgd2lsbCBiZSBpbml0aWFsaXplZCBpbiBJbml0VGFzayB3aXRob3V0IGFueSBhdmFpbGFibGUKCXdpbmRvdyBjbGFzc2VzIQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTWF5IDIxIDEyOjMwOjMwIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKCgkqIFtkZWJ1Z2dlci9oYXNoLmNdIFtkZWJ1Z2dlci9pbmZvLmNdCglBZGRlZCBzdXBwb3J0IGZvciBzeW1ib2xpYyBzZWdtZW50ZWQgYWRkcmVzc2VzLiBBZGQgc3ltYm9scyBmb3IgYWxsCglidWlsdC1pbiBBUEkgZW50cnkgcG9pbnRzLgoKCSogW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9kbGxzLmhdCglSZW1vdmVkIGRsbF90YWJsZSBzdHJ1Y3R1cmUsIGFzIHdlIG5vdyB1c2UgdGhlIGJ1aWx0LWluIG1vZHVsZQoJc3RydWN0dXJlcy4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2xvYWRlci9tYWluLmNdCglSZW1vdmVkIHdpbmVzdGF0IG9wdGlvbiwgYXMgaXQgd2FzIG5vIGxvbmdlciB2ZXJ5IG1lYW5pbmdmdWwuCgoJKiBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdCglOZXcgbWFjcm8gTUFLRV9TRUdQVFIgdGhhdCBjcmVhdGVzIGEgc2VnbWVudGVkIHBvaW50ZXIgdG8gYSBsb2NhbAoJdmFyaWFibGUgb24gdGhlIDMyLWJpdCBzdGFjay4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglBZGRlZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgYW4gYXBwbGljYXRpb24uCglJbXBsZW1lbnRlZCBMb2FkTW9kdWxlKCkgYW5kIEZyZWVNb2R1bGUoKS4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10gW2xvYWRlci90YXNrLmNdCglNb3ZlZCBpbml0aWFsaXNhdGlvbiBvZiBidWlsdC1pbiBETExzIHRvIEluaXRUYXNrKCkuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJSW1wbGVtZW50ZWQgZGlzY2FyZGFibGUgYmxvY2tzLgoKCSogW21pc2MvZmlsZS5jXQoJU2VhcmNoIHBhdGggb2YgY3VycmVudCBleGVjdXRhYmxlIGluIE9wZW5GaWxlKCkuCglGaXhlZCBidWcgd2l0aCBzZWFyY2hpbmcgaW4gV2luZG93cyBwYXRoLgoKCSogW21pc2MvbHN0ci5jXQoJSGFyZC1jb2RlZCB0cmFuc2xhdGlvbiB0YWJsZXMgZm9yIEFuc2k8LT5PZW0uCgoJKiBbbWlzYy91c2VyLmNdCglNb3ZlZCBzb21lIGdsb2JhbCBpbml0aWFsaXphdGlvbnMgdG8gSW5pdEFwcCgpLCBiZWNhdXNlIHRoZXkgbmVlZAoJYSB0YXNrIGNvbnRleHQgdG8gYmUgcGVyZm9ybWVkLgoKCSogW29iamVjdHMvZGMuY10KCUhhbmRsZSBSMl9CTEFDSyBhbmQgUjJfV0hJVEUgc3BlY2lhbGx5IHNvIHRoYXQgdGhleSB3b3JrIGNvcnJlY3RseQoJd2l0aCBwYWxldHRlIGRpc3BsYXlzLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglTdXBwcmVzc2VkIGdlbmVyYXRpb24gb2YgdGhlIEMgZmlsZSBmb3IgRExMIHNwZWNzLCBiZWNhdXNlIGl0J3Mgbm8KCWxvbmdlciBuZWVkZWQuIE91dHB1dCBhbGwgdGhlIGFzc2VtYmx5IGNvZGUgZGlyZWN0bHkgdG8gc3Rkb3V0LgoJU29tZSBjaGFuZ2VzIHRvIGludGVncmF0ZSBXaW4zMiBzdXBwb3J0IGZyb20gTWFydGluIHZvbglMb2V3aXMuIAoKCSogW3dpbmRvd3MvbXNnYm94LmNdCglNb3ZlZCBtZXNzYWdlIGJveCBjb2RlIGZyb20gbWlzYy8gdG8gd2luZG93cy8uCgpNb24gTWF5IDE1IDIzOjQwOjA0IDE5OTUgIE1hcnRpbiBBeW90dGUgKHdpbmVAdHJnY29ycC5ta3NpbmZvLnFjLmNhKQoKCSogW21pc2MvYXVkaW8uY10gW21pc2MvbWNpY2RhLmNdIFttaXNjL21jaWFuaW0uY10gW21pc2MvbWlkaS5jXQoJICBbbWlzYy9tbWF1eC5jXSBbbWlzYy9tbXN5c3RlbS5jXQoJTW9kaWZ5IGNvZGUgJiB1c2UgcG9pbnRlcnMgY29udmVyc2lvbiBtYWNyb3MuCglNYWtlIGNkYXVkaW8gJiB3YXZlIGRldmljZXMgd29yayBhZ2FpbiAob25seSB1c2luZyBzb21lIGFwcGxldHMpLgoKCSogW21pc2MvcHJvZmlsZS5jXQoJQ2hhbmdlIGdldGMoKSB0byBmZ2V0YygpIHdoZXJlIG5lZWRlZC4KCk1vbiBNYXkgMTUgMjI6MTA6NTYgMTk5NSAgTWFydGluIHZvbiBMb2V3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL0ltYWtlZmlsZV0KCWFkZGVkIGVudHJpZXMgZm9yIHRoZSBuZXcgZmlsZXMgZ2RpMzIuc3BlYywga2VybmVsMzIuc3BlYywKCXVzZXIzMi5zcGVjLCBzaGVsbDMyLnNwZWMgYW5kIHdpbnByb2NzMzIuc3BlYy4KCgkqIFtpZjE2MzIvY29tbWRsZy5zcGVjXVtpZjE2MzIva2VybmVsLnNwZWNdW2lmMTYzMi9zaGVsbC5zcGVjXQoJICBbaWYxNjMyL3N0b3JhZ2Uuc3BlY11baWYxNjMyL3N5c3RlbS5zcGVjXVtpZjE2MzIvdXNlci5zcGVjXQoJQ2hvb3NlRm9udCwgUkVTRVJWRUQ1LCBJbnRlcm5hbEV4dHJhY3RJY29uOiBNYXJrZWQgYXMgc3R1YnMKCUV4dHJhY3RBc3NvY2lhdGVkSWNvbiwgRG9FbnZpcm9ubWVudFN1YnN0LCBEdW1wSWNvbjoKCQlzdHViIGltcGxlbWVudGF0aW9ucyBwcm92aWRlZCAKCW1hcmtlZCBzdG9yYWdlLmRsbCxzdG9yZWdlLnN5cyBmdW5jdGlvbnMgYXMgc3R1YnMKCgkqIFtpbmNsdWRlL3BlX2ltYWdlLmhdCglBZGRlZCBzdHJ1Y3R1cmVzIFdJTjMyX2J1aWx0aW4gYW5kICBXSU4zMl9mdW5jdGlvbgoKCSogW2luY2x1ZGUvcGVleGUuaF0KCVBFX0ltcG9ydF9EaXJlY3Rvcnk6IHJlbmFtZWQgcmVzZXJ2ZWQgZmllbGRzIHRvIAoJCVRpbWVEYXRlLCBGb3J3YXJkZXIsIFRodW5rX0xpc3QKCgkqIFtpbmNsdWRlL3dpbmVycm9yLmhdCglOZXcgZmlsZS4KCgkqIFtsb2FkZXIvbWFpbi5jXQoJY2FsbGVkIFJFTEFZMzJfSW5pdAoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJeG1tYXA6IG1hcCBCU1MgYW5vbnltb3VzCglkdW1wX2ltcG9ydHM6IHJlbmFtZWQgdG8gZml4dXBfaW1wb3J0cywgZG8gdGhlIGZpeHVwIG9mIGltcG9ydGVkCgkgICAgICAgICAgICAgIHN5bWJvbHMKCVBFX0xvYWRJbWFnZTogcGFzcyByYXcgZGF0YSBzaXplIHRvIHhtbWFwCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglEdW1wSWNvbjogbmV3IGZ1bmN0aW9uCgoJKiBbbWlzYy9rZXJuZWwzMi5jXQoJTmV3IGZpbGUuCgoJKiBbbWlzYy9tYWluLmNdCgltYWtlIHN0ZG91dCBhbmQgc3RkZXJyIHVuYnVmZmVyZWQKCgkqIFttaXNjL3NoZWxsLmNdCglEb0Vudmlyb25tZW50U3Vic3Q6IG5ldyBmdW5jdGlvbgoKCSogW29iamVjdHMvZm9udC5jXQoJRk9OVF9NYXRjaEZvbnQ6IHRyeSBvYmxpcXVlIGlmIHRoZXJlIGlzIG5vIGl0YWxpYwoKCSogW3JjL0ltYWtlZmlsZV1bcmMvcGFyc2VyLmxdCgl5eXdyYXA6IG5ldyBmdW5jdGlvbgoJRG9uJ3QgbGluayB3aXRoIGxpYmZsLmEgb24gTGludXgKCgkqIFt0b29scy9idWlsZC5jXQoJQWRkZWQga2V5d29yZHMgc3RkY2FsbCwgc3Vic3lzdGVtLCBiYXNlCglHZW5lcmF0ZUZvcldpbjMyOiBuZXcgZnVuY3Rpb24KCUJ1aWxkU3BlY0ZpbGVzOiBjYWxsIEdlbmVyYXRlRm9yV2luMzIgaWYgc3Vic3lzdGVtIGlzIHdpbjMyCgpNb24gTWF5IDE1IDEwOjM4OjE0IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KICAgICAgICAKICAgICAgICAqIFtjb250cm9scy9saXN0Ym94LmNdIFtjb250cm9scy9jb21iby5jXSBbd2luZG93cy9kZWZ3bmQuY10KCU1pbm9yIGZpeGVzLgoJCgkqIFttaXNjL21lc3NhZ2UuY10gW21pc2MvbWFpbi5jXSBbcmMvc3lzcmVzKi5yY10gW2luY2x1ZGUvdGV4dHMuaF0KCVJld3JvdGUgbWVzc2FnZSBib3ggaGFuZGxpbmcuCgkKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglEaWFsb2dzIHNob3VsZCBiZSBpbnZpc2libGUgdW50aWwgYWZ0ZXIgV01fSU5JVERJQUxPRyBpcyBzZWVudC4KCURvbid0IHN3aXRjaCB0byBpbnZpc2libGUgZGlhbG9nIGl0ZW1zIG9uIGEgVEFCIGtleXByZXNzLgoJCgkqIFt3aW5kb3dzL21kaS5jXQoJU2VuZCBXTV9OQ1BBSU5UIG1lc3NhZ2UgaW4gTURJUmVzdG9yZUNoaWxkKCkuCgkKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUZpeGVkIHR5cG8gKCYmIC0+ICYpLgoJCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW2lmMTYzMi91c2VyLnNwZWNdCglJbXBsZW1lbnRlZCBQb3N0QXBwTWVzc2FnZSgpLgoJCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglTZXRDYXB0dXJlKDApIHNob3VsZCBhY3QgbGlrZSBSZWxlYXNlQ2FwdHVyZSgpLgoKVHVlIE1heSAgOSAxMTo1NTo1MiAxOTk1ICAgICBFZGRpZSBDLiBEb3N0ICAgICAgICAgICAgIChlY2RAZHJlc3NsZXIuZGUpCgoJKiBbSW1ha2VmaWxlXQoJQ2hhbmdlZCBDREVCVUdGTEFHUyBmb3Igc3lzdGVtcyBydW5uaW5nIF9fRUxGX18gKHRlbXBvcmFyaWx5KQoJQWRkZWQgQVNGTEFHUyB0byBleHBvcnRlZCB2YXJpYWJsZXMuCgoJKiBbZGVidWdnZXIvcmVhZGxpbmUvSW1ha2VmaWxlXQoJTW92ZWQgZGVmaW5lcyBmb3IgbGlicmVhZGxpbmUgZnJvbSBERUZJTkVTIHRvIEVYVFJBX0RFRklORVMKCgkqIFttZW1vcnkvbG9jYWwuY10gW21pc2NlbXUvaW50MjEuY10KCUFkZGVkIHNvbWUgbW9yZSBkZWJ1Z2dpbmcgb3V0cHV0cy4KCk1vbiBNYXkgIDggMDA6NTU6MjcgTUVUIERTVCAxOTk1CSAgRGFnIEFzaGVpbSAoZGFzaEBpZmkudWlvLm5vKQoKCSogW21pc2MvbWVzc2FnZS5jXQoJRml4ZWQgYSAiRklYTUUiIGNvbmNlcm5pbmcgbm9yd2VnaWFuIHRyYW5zbGF0aW9uLgoKU3VuIE1heSAgNyAyMzoyNToyMyAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CiAgICAgICAgCgkqIFsqLypdCiAgICAgICAgUmVtb3ZlZCB3YXJuaW5ncyBpbiBhIGNvdXBsZSBvZiBmaWxlcyBhbmQgZGVsZXRlZCBzb21lIG9ic29sZXRlIGNvZGUuCgogICAgICAgICogW2NvbnRyb2xzL2xpc3Rib3guY10KICAgICAgICBDbGVhbnVwLCBzcGVlZCBpbXByb3ZlbWVudHMgJiBsb3RzIG9mIGJ1ZyBmaXhlcy4KCiAgICAgICAgKiBbY29udHJvbHMvY29tYm8uY10KCU1vc3RseSByZXdyaXR0ZW4uIFRoaXMgaXMgc3RpbGwgdmVyeSBidWdneSwgYnV0IG5vdCBxdWl0ZSBhcyBiYWQgYXMgCgliZWZvcmUuCgogICAgICAgICogW2luY2x1ZGUvY29tbWRsZy5oXSBbbWlzYy9jb21tZGxnLmNdCiAgICAgICAgUmVtb3ZlZCB0aGUgbmVlZCBmb3Igc3lzcmVzLmRsbC4gU21hbGwgYnVnIGZpeGVzLgoJCiAgICAgICAgKiBbb2JqZWN0cy9vZW1iaXRtYXAuY10gW2luY2x1ZGUvYml0bWFwcy88bWFueT5dIFtpbmNsdWRlL3dpbmRvd3MuaF0KICAgICAgICAgIFtsb2FkZXIvbGlicmFyeS5jXSBbbG9hZGVyL21haW4uY10gW3JjL3N5c3JlcyoucmNdCiAgICAgICAgUmVtb3ZlZCBzeXNyZXMuZGxsIGFuZCByZXBsYWNlZCB0aGUgcmVtYWluaW5nIGJpdG1hcHMvaWNvbnMgd2l0aAogICAgICAgIFhQTSBlcXVpdmFsZW50cy4KCiAgICAgICAgKiBbbWlzYy9tZXNzYWdlLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbbWlzYy9tYWluLmNdCiAgICAgICAgICBbaWYxNjMyL3dpbnByb2NzLnNwZWNdCiAgICAgICAgIkFib3V0IFdpbmUuLi4iIG5vdyBicmluZ3MgdXAgYSBzdGFuZGFyZCBTaGVsbEFib3V0KCkgd2luZG93IHdpdGgKICAgICAgICB0aGUgV2luZSBpY29uIGFuZCB0aGUgbGlzdCBvZiBjb250cmlidXRvcnMuCgkKCSogW21pc2Mvc2hlbGwuY10KCUZpeGVkIFNoZWxsQWJvdXQoKS9BYm91dERpYWxvZ1Byb2MoKSB0byBzaG93IHRoZSByaWdodCBpY29uLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVNtYWxsIGhhY2sgZm9yIG5vbi1hbHBoYW51bWVyaWMga2V5czogRG9udCd0IHNlbmQgdGhlIGFzY2lpIHZhbHVlIGluCgl0aGUgV01fS0VZRE9XTiBtZXNzYWdlLCBidXQgc29tZSB1bnVzZWQgY29kZSBpbnN0ZWFkLiBTaG91bGQgYmUgZG9uZQoJcHJvcGVybHkgYnkgc2VuZGluZyBkaWZmZXJlbnQgY29kZXMgZm9yIGVhY2gga2V5LiBUaGUgZWRpdCBjb250cm9sCgl1c2VkIHRvIGdldCBhIFZLX0RFTEVURSBtZXNzYWdlIGVhY2ggdGltZSB0aGUgdXNlciB0eXBlZCAnLicuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJUmVtb3ZlZCBhIGNoZWNrIGZvciBDU19HTE9CQUxDTEFTUyBpbiBDTEFTU19GaW5kQ2xhc3NCeU5hbWUoKS4KCVRoaXMgdXNlZCB0byBiZSBubyBwcm9ibGVtLCBidXQgYnJlYWtzIFJlc291cmNlIFdvcmtzaG9wIGluIDk1MDQwMy4KCQoJKiBbb2JqZWN0cy9kaWIuY10KCU5ldyBkaWFnbm9zdGljIGZvciBhIGJ1ZyBJJ3ZlIGJlZW4gZW5jb3VudGVyaW5nLiBJZiBpdCBzaG93cyB1cCwKCXBsZWFzZSByZXBvcnQgaXQuCgpTdW4gTWF5ICA3IDIzOjExOjE4IEVEVCAxOTk1ICBXaWxsaWFtIE1hZ3JvICh3bWFncm9AdGMuY29ybmVsbC5lZHUpCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJSGFuZGxlIHNpdHVhdGlvbiB3aGVuICdkYycgZXhpc3RzLCBidXQgcGFsZXR0ZSBtYXBwaW5nCglkb2VzIG5vdC4gIChGaXhlcyBraWRwaXgyIGRlbW8uKQoKU3VuIE1heSAgNyAwMzozMjowMCAxOTk1ICBDaGFybGVzIE0uIEhhbm51bSAgKG15Y3JvZnRAbWl0LmVkdSkKCgkqIFtsb2FkZXIvbGR0LmNdCglMRFRfUHJpbnQ6IE9ubHkgc2hvdyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCB0aGUga2VybmVsCglyZXR1cm5lZC4gTWFrZSB0aGlzIHdvcmsgZm9yIE5ldEJTRC4KCkZyaSBNYXkgIDUgMDI6NTM6MjYgMTk5NSAgQ2hhcmxlcyBNLiBIYW5udW0gIChteWNyb2Z0QG1pdC5lZHUpCgoJKiBbZGVidWdnZXIvZGJnLnldIFtpbmNsdWRlL3dpbmUuaF0gW2xvYWRlci9zaWduYWwuY10KCU1vZGlmeSBjcyBhbmQgZHMgc2VsZWN0b3IgdmFsdWVzIGZvciBOZXRCU0QtY3VycmVudC4KCgkqIFtkZWJ1Z2dlci9kZWJ1Zy5sXQoJJHNwLCAkZXNwOiBVc2UgUk5fRVNQX0FUX1NJR05BTCByYXRoZXIgdGhhbiBSTl9FU1AuCgoJKiBbZGVidWdnZXIvcmVncG9zLmhdCglNb2RpZnkgc2lnY29udGV4dCBmb3JtYXQgZm9yIE5ldEJTRC1jdXJyZW50LgoJU0NfRVNQOiBVc2UgUk5fRVNQX0FUX1NJR05BTCByYXRoZXIgdGhhbiBSTl9FU1AuCgoJKiBbaW5jbHVkZS9sZHQuaF0KCVNFTEVDVE9SX1RPX0VOVFJZOiBFeHBsaWNpdGx5IGNsZWFyIHRoZSB0b3AgaGFsZiBvZiB0aGUgc2VsZWN0b3IKCXZhbHVlLCBzaW5jZSBvbmx5IDE2IGJpdHMgb2YgaXQgbWF5IGhhdmUgYmVlbiBzYXZlZC4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJU2V0IHN0cnVjdHVyZSBwYWNraW5nIHdpdGggYCNwcmFnbWEgcGFjaycgdG8gYWNjb21vZGF0ZQoJb3RoZXIvb2xkZXIgY29tcGlsZXJzLgoKVHVlIE1heSAgMiAxODoxNTowMSAxOTk1IFBhYWwgQmV5ZXIgKGJleWVyQGlkdC51bml0Lm5vKQoJCgkqIFttaXNjL2NvbW1kbGcuY10KCUZpeGVkIHBhdGgtbmFtZXMgc28gd2hlbiBjaGFuZ2luZyBkaXJlY3RvcnkgdGhlIGxpc3Rib3hlcwoJY2hhbmdlcyB0b28uCgkKCSogW2RlYnVnZ2VyL2RiZy55IGRlYnVnZ2VyL2RlYnVnLmwgd2luZS5pbmldCglBZGRlZCBTeW1ib2xUYWJsZUZpbGUgdG8gd2luZS5pbmkgc28gc3ltYm9scyBjYW4gYmUgcmVhZAoJd2l0aG91dCBzdGFuZGluZyBpbiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgd2luZS5zeW0uCglBZGRlZCB0aGUgcG9zc2liaWxpdHkgdG8gc3BlY2lmeSBmdWxsIG5hbWUgb2Ygd2luZS5zeW0gZnJvbQoJdGhlIGRlYnVnZ2VyIHByb21wdC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IEFwciAyOSAyMDo0MjowMSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHUpCgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglGaXhlZCBwYWludGluZyBvZiBTU18qRlJBTUUgY29udHJvbHMuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglQYXNzIHRoZSB3aW5kb3cgaW5zdGFuY2UgYXMgRFMgdG8gdGhlIDE2LWJpdCB3aW5kb3cgcHJvY2VkdXJlLgoJUmV3cm90ZSBDYXRjaCgpIGFuZCBUaHJvdygpIHRvIG1ha2UgdGhlbSB3b3JrIHdpdGggbXVsdGlwbGUgdGFza3MuCgoJKiBbbG9hZGVyL21haW4uY10KCU5ldyBmdW5jdGlvbiBNQUlOX0luaXQoKSB0byBwZXJmb3JtIGluaXRpYWxpemF0aW9ucyBiZWZvcmUgdGhlCglmaXJzdCB0YXNrIGlzIHN0YXJ0ZWQgaW5zdGVhZCBvZiBkb2luZyB0aGVtIGluIEluaXRBcHAoKS4KCVRlbXBvcmFyeSBoYWNrIHRvIGNvbW1hbmQtbGluZSBwYXJzaW5nIHRvIGxvYWQgb25lIHByb2dyYW0gcGVyCgljb21tYW5kLWxpbmUgYXJndW1lbnQsIHRvIG1ha2UgdGVzdGluZyB0YXNrLXN3aXRjaGluZyBlYXNpZXIuCgoJKiBbbG9hZGVyLyouY10KCVJlaW1wbGVtZW50ZWQgbW9kdWxlcyB0byB1c2UgYSBXaW5kb3dzLWNvbXBhdGlibGUgbGF5b3V0IGFuZCB0bwoJYWxsb3cgbXVsdGlwbGUgdGFza3MgYW5kIG11bHRpcGxlIG1vZHVsZSBpbnN0YW5jZXMuIE5vdCByZWFsbHkKCWZpbmlzaGVkIHlldC4KCgkqIFtsb2FkZXIvdGFzay5jXSBbbWlzYy9leGVjLmNdCglSZWltcGxlbWVudGVkIHRhc2tzIHRvIHVzZSBhIGNvbW1vbiBhZGRyZXNzIHNwYWNlLCBhbmQgaW1wbGVtZW50ZWQKCXByZWxpbWluYXJ5IHRhc2stc3dpdGNoaW5nIGNhcGFiaWxpdGllcy4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglGaXhlZCBidWcgaW4gR2xvYmFsTmV4dCgpLgoKCSogW21pc2MvbWFpbi5jXQoJVXBkYXRlZCB0aGUgbGlzdCBvZiBjb250cmlidXRvcnMuIExldCBtZSBrbm93IGlmIEkgZm9yZ290IHNvbWVvbmUuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJVXNlIG9uZSBEVEEgcGVyIHRhc2sgaW5zdGVhZCBvZiBhIGdsb2JhbCBvbmUuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUZpeGVkIGJ1ZyBpbiBCaXRCbHQoKSB0aGF0IGNvdWxkIGNhdXNlIEJhZE1hdGNoIGVycm9ycy4KCgkqIFt0b29scy9idWlsZC5jXQoJQWRkZWQgbmV3IGZ1bmN0aW9uIHR5cGUgJ3N0dWInLCB0aGF0IG1ha2VzIHBvc3NpYmxlIHRvIGV4cG9ydCBhbgoJdW5pbXBsZW1lbnRlZCBmdW5jdGlvbiBieSBuYW1lIGFzIHdlbGwgYXMgYnkgb3JkaW5hbC4gVGhpcyB3aWxsCglhdm9pZCBsb2FkaW5nIGVycm9ycyBmb3IgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbnMuCglHZW5lcmF0ZSBhbiBpbi1tZW1vcnkgbW9kdWxlIGxheW91dCBmb3IgYnVpbHQtaW4gRExMcyBzbyB0aGF0IHRoZQoJc2FtZSBjb2RlIGNhbiBiZSB1c2VkIGZvciBidWlsdC1pbiBhbmQgbG9hZGVkIG1vZHVsZXMuCglDaGFuZ2VkIHJlbGF5IGNvZGUgdG8gbWFrZSBpdCB1bm5lY2Vzc2FyeSB0byBzYXZlIHRoZSB2YWx1ZSBvZiB0aGUKCUJQIHJlZ2lzdGVyLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW1wbGVtZW50ZWQgbXVsdGlwbGUgbWVzc2FnZSBxdWV1ZXMgYW5kIHByZWxpbWluYXJ5IHRhc2stc3dpdGNoaW5nCgljYXBhYmlsaXRpZXMuIEludGVyLXRhc2sgU2VuZE1lc3NhZ2UoKSBjYWxscyBhcmUgbm90IGltcGxlbWVudGVkCgl5ZXQgYW5kIHdpbGwgcHJvYmFibHkgY2F1c2UgY3Jhc2hlcyBpZiB1c2VkLgoKCSogW3dpbmRvd3MvcHJvcGVydHkuY10KCVJlaW1wbGVtZW50ZWQgcHJvcGVydGllcyBhbmQgYWxsb2NhdGUgdGhlbSBvbiB0aGUgVVNFUiBoZWFwLgoKCSogW3dpbmRvd3Mvd2luLmNdCglGaXhlZCBidWcgaW4gU2V0V2luZG93V29yZCgpLgoJUmVpbXBsZW1lbnRlZCBFbnVtV2luZG93cygpIGFuZCBFbnVtVGFza1dpbmRvd3MoKS4KClR1ZSBBcHIgMTggMDk6NDg6MzggMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgogICAgICAgIAoJKiBbbWlzYy9tYWluLmNdCglHZXRTeXN0ZW1QYXJhbWV0ZXJzSW5mbygpOiBBZGRpdGlvbmFsIGFjdGlvbiBTUElfR0VUSUNPTlRJVExFRk9OVC4KCQoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglSZW1vdmVkIHRoZSBjaGVjayBmb3IgTkVfU0VHRkxBR1NfRVhFQ1VURU9OTFksIHNpbmNlIGl0IGJyb2tlCgljb250cm9sLmV4ZS4KCUZpeGVkIGljb24gbG9hZGluZy4KCQoJKiBbb2JqZWN0cy9mb250LmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUZpeGVkIGEgYnVnIGluIEluaXRGb250c0xpc3QoKSBhbmQgd29ya2VkIG9uIHRoZSBFbnVtRm9udHMoKQoJZnVuY3Rpb25zIHRvIG1ha2UgdGhlbSBjb21wcmVoZW5zaWJsZS4KCiAgICAgICAgKiBbY29udHJvbHMvYnV0dG9uLmNdCglGaXhlZCBteSBwcmV2aW91cyBwYXRjaCB0byBoYW5kbGUgTEJVVFRPTlVQIG1lc3NhZ2VzLgoKRnJpIEFwciAxNCAxMTo0MToyOCAxOTk1ICBDYW1lcm9uIEhlaWRlICAoaGVpZGVAZWUudWFsYmVydGEuY2EpCgogICAgICAgICogW21pc2MvbmV0d29yay5jLCBtaXNjL2Rvc19mcy5jXQogICAgICAgIEltcGxlbWVudGVkIFdOZXRHZXRDb25uZWN0aW9uLiAgQWxsIHRoYXQgaXMgY3VycmVudGx5CiAgICAgICAgc3VwcG9ydGVkIGFyZSBkcml2ZXMsIGZvciB3aGljaCB0aGUgcmVtb3RlIG5hbWUgaXMgc2ltcGx5CiAgICAgICAgdGhlIHJlZGlyZWN0ZWQgVU5JWCBkaXJlY3RvcnkgbmFtZS4KCiAgICAgICAgKiBbbWlzY2VtdS9pbnQyPy5jXQogICAgICAgIE1vcmUgZHJpdmUgbnVtYmVyIHZhbGlkaXR5IGNoZWNraW5nLgoKV2VkIEFwciAxMiAxMToyODozNyAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CiAgICAgICAgCiAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveC5jXQoJT29wcywgbXkgcHJldmlvdXMgY2hhbmdlIHRvIExpc3RCb3hEaXJlY3RvcnkgYnJva2UgdGhlIEJvcmxhbmQKCWZpbGUgb3BlbiBkaWFsb2cuIEZpeGVkLgoKTW9uIEFwciAxMCAyMzoxNzoxMiAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIvb2xlMm5scy5zcGVjXSBbbWlzYy9vbGUybmxzLmNdIFttaXNjL0ltYWtlZmlsZV0KCU5ldyBmaWxlIG9sZTJubHMuYy4gQWRkZWQgc3R1YnMgZm9yIEdldFVzZXJEZWZhdWx0TENJRCwgCglHZXRTeXN0ZW1EZWZhdWx0TENJRCwgR2V0VXNlckRlZmF1bHRMYW5nSUQsIEdldFN5c3RlbURlZmF1bHRMYW5nSUQuCgpNb24gQXByIDEwIDEwOjA1OjE4IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KICAgICAgICAKCSogW21lbW9yeS9nbG9iYWwuY10gW21lbW9yeS9sb2NhbC5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglHbG9iYWxSZUFsbG9jKCk6IElmIEdNRU1fTU9ESUZZIGlzIHNldCwgZG9uJ3QgcmVzaXplIHRoZSBibG9jay4KCUxvY2FsUmVBbGxvYygpOiBTYW1lIGZvciBMTUVNX01PRElGWS4KCQogICAgICAgICogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeGVkIGEgYnVnIGluIExpc3RCb3hEaXJlY3RvcnkgdGhhdCBwcmV2ZW50ZWQgY29tbWRsZyBmcm9tIHdvcmtpbmcuCglDaGVjayBmb3IgZXJyb3JzIGluIHNvbWUgbW9yZSBwbGFjZXMuCgogICAgICAgICogW2lmMTYzMi9nZGkuc3BlY10gW2lmMTYzMi91c2VyLnNwZWNdCgkxNiBiaXQgY2FsbGJhY2sgZnVuY3Rpb25zIHNob3VsZCBiZSBwYXNzZWQgYXMgc2VncHRycy4KCQoJKiBbaW5jbHVkZS9kbGxzLmhdIFtsb2FkZXIvbmVfaW1hZ2UuY10gW2xvYWRlci9zZWxlY3Rvci5jXQoJW2xvYWRlci9saWJyYXJ5LmNdCglQcmV2ZW50IGEgRExMIGZyb20gYmVpbmcgaW5pdGlhbGl6ZWQgdHdpY2UgKEJvcmxhbmRzIFJlc291cmNlCglXb3Jrc2hvcCB1c2VkIHRvIGRvIHRoaXMpLgoJUHJvdmlkZSBhbiBhZGRpdGlvbmFsIGZsYWcgZm9yIGVhY2ggd19maWxlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIKCWl0J3MgYW4gRVhFIG9yIGEgRExMLCBmb3IgY29tYmluYXRpb25zIGxpa2UgcGJydXNoLmV4ZS8uZGxsLgoJCgkqIFtjb250cm9scy9idXR0b24uY10KCUhhbmRsZSBMQlVUVE9OVVAgbWVzc2FnZXMgZXZlbiBpZiB0aGUgYnV0dG9uIG5vIGxvbmdlciBoYXMgdGhlCgljYXB0dXJlIChmb3IgV2luSGVscCkuCgkKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCUZBUlBST0MgaXMgbm93IGEgc2VncHRyIGZvciB0aGUgZW11bGF0b3IgYW5kIGEgZnVuY3Rpb24KCXBvaW50ZXIgZm9yIHRoZSBsaWJyYXJ5LgoJCgkqIFttaXNjL2NvbW1kbGcuY10gW21pc2MvY29tbWRsZy5oXQoJQ2xlYW5lZCB0aGUgZmlsZSBkaWFsb2dzIHVwIGEgbGl0dGxlLiBUaGV5IG5vdyB3b3JrIHJlYXNvbmFibHkgd2VsbCwKCWFsdGhvdWdoIHRoZXJlIGFyZSBzdGlsbCBzb21lIHByb2JsZW1zIChlLmcuIGZpbGVzIGFyZSBpbml0aWFsbHkKICAgICAgICBpbnZpc2libGUpLgoKCSogW3dpbmRvd3MvY2xhc3MuY10gW2lmMTYzMi91c2VyLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUdldENsYXNzSW5mbygpIG11c3QgdGFrZSBhIHNlZ3B0ciwgYXMgaXQgY2hlY2tzIHdoZXRoZXIgdGhlCgloaWdod29yZCBpcyB6ZXJvLgoJR2V0Q2xhc3NOYW1lKCkgY2FsbGVkIHRoZSB3cm9uZyBhdG9tIGZ1bmN0aW9uLiBObyBzdXJwcmlzZSBpdCBkaWRuJ3QKICAgICAgICBmaW5kIGFueXRoaW5nLgoKCSogW21pc2MvbHN0ci5jXQoJQW5zaVRvT2VtKCkgYW5kIE9lbVRvQW5zaSgpIGRpZG4ndCB0ZXJtaW5hdGUgdGhlIHN0cmluZ3MuIEZpeGVkLgogICAgICAgIFJlbW92ZWQgc29tZSB3YXJuaW5ncy4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2lmMTYzMi9kZGVtbC5zcGVjXSBbaW5jbHVkZS9kbGxzLmhdCglOZXcgc3BlYyBmaWxlIGZvciB0aGUgMy4xIERERU1MIERETC4gCgoJKiBbY29udHJvbHMvbWVudS5jXQoJU21hbGwgZml4IHRvIENoYW5nZU1lbnUgLSBtYXNrIG91dCB0aGUgb2Jzb2xldGUgZmxhZ3MKCShNRl9BUFBFTkQgPT0gTUZfT1dORVJEUkFXLCB0aGlzIGxlZCB0byBwcm9ibGVtcykuIEl0IGFsc28gaGFkCglwcm9ibGVtcyB3aXRoIHRoZSBNRl9CWVBPU0lUSU9OIGZsYWcuCgogICAgICAgICogW3dpbmRvd3MvbWVzc2FnZS5jXQogICAgICAgIFNlbmRNZXNzYWdlKCk6IGNhbGwgdGhlIFdIX0NBTExXTkRQUk9DIGhvb2sgZnVuY3Rpb24uIFRoaXMgaXMgcmF0aGVyCiAgICAgICAgdWdseSwgSSdtIGFmcmFpZC4gV2luZG93cyBwcm9iYWJseSBwYXNzZXMgYSBwb2ludGVyIHRvIHRoZSAxNiBiaXQKICAgICAgICBzdGFjayBmb3Igc3BlZWQgcmVhc29ucy4KCQogICAgICAgICogW3dpbmRvd3MvaG9vay5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCiAgICAgICAgU2V0L0hvb2tXaW5kb3dzSG9vaygpIHNob3VsZG4ndCBqdXN0IGNhbGwgdGhlaXIgKkV4IGNvdW50ZXJwYXJ0cywgYXMKICAgICAgICB0aGV5IGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IHNlbWFudGljcy4KICAgICAgICBNUyBIZWFydHMgbm93IHdvcmtzIHNvbWV3aGF0LCBpZiB5b3UgZGlzYWJsZSB0aGUgbmV3IGJ1aWx0aW4gRERFTUwuCiAgICAgICAgVGhlIGdyYXBoaWNzIGFyZSBjb21wbGV0ZWx5IG1lc3NlZCB1cCwgdGhvdWdoLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gQXByICAyIDE4OjMxOjEyIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKCgkqIFtDb25maWd1cmVdIFtpZjE2MzIvSW1ha2VmaWxlXQoJUmVtb3ZlZCBuZXcgYnVpbGQgYW5kIHNob3J0IG5hbWVzIG9wdGlvbnMuCgoJKiBbaWYxNjMyLyouY10gW3Rvb2xzL2J1aWxkLmNdCglJbXBsZW1lbnRlZCBjb21waWxlZCBjYWxsLWJhY2sgZnVuY3Rpb25zIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2U7CglhbGwgdGhlIHJlbGF5IGNvZGUgaXMgbm93IGRvbmUgaW4gYXNzZW1ibHkgY29kZSBnZW5lcmF0ZWQgYnkgdGhlCglidWlsZCBwcm9ncmFtLgoJUmVsYXkgY29kZSBpcyBubyBsb25nZXIgZGVwZW5kZW50IG9uIGJlaW5nIGxvYWRlZCBiZWxvdyA2NEsuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglGaXhlZCBtZW1vcnkgbGVhayBpbiBMb2FkU3RyaW5nKCkuIEEgZml4IHdpbGwgYWxzbyBiZSBuZWVkZWQgZm9yCglvdGhlciByZXNvdXJjZXMuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJSW1wbGVtZW50ZWQgZ2xvYmFsIGhlYXAgYXJlbmFzLCBzbyB3ZSBjYW4gc3RvcmUgaW5mb3JtYXRpb25zIGFib3V0CglnbG9iYWwgYmxvY2tzLCBsaWtlIGxvY2sgY291bnRzIG9yIG93bmVyIGhhbmRsZS4KCUltcGxlbWVudGVkIEZhckdldE93bmVyKCkgYW5kIEZhclNldE93bmVyKCkuCglJbXBsZW1lbnRlZCBnbG9iYWwgaGVhcCBUT09MSEVMUCBmdW5jdGlvbnMuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglCdWcgZml4OiBpdCB3YXMgbm90IHBvc3NpYmxlIHRvIHJlLXVzZSBhIGZyZWUgc2VsZWN0b3IuCgpTdW4gQXByIDIgMDE6MzQ6NTIgMTk5NSBDb25zdGFudGluZSBTYXB1bnR6YWtpcyAgKGNzYXB1bnR6QG1pdC5lZHUpCgoJKiAgW2NvbnRyb2xzL2xpc3Rib3guY10KCU1ham9yIHdvcmsgb24gbGlzdGJveCBjb2RlCiAgICAgICAgIC0gTWFueSBidWdzIGZpeGVkIChzdGlsbCBtYW55IGJ1Z3MpCiAgICAgICAgIC0gTW9yZSBtZXNzYWdlcyBzdXBwb3J0ZWQKICAgICAgICAgLSBDb2RlIHNpbXBsaWZpZWQKCkZyaSBNYXIgMzEgMDM6Mjc6MTYgRVNUIDE5OTUgV2lsbGlhbSBNYWdybyAod21hZ3JvQHRjLmNvcm5lbGwuZWR1KQoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUxvdHMgb2YgYnVnIGZpeGVzIHJlbGF0ZWQgdG8gZGlhcHBlYXJpbmcgdGV4dCwgbG9zdCBjYXJldHMsCgloaWdobGlnaHRpbmcsIHNlZ21lbnRhdGlvbiBmYXVsdHMsIG9jY3VyYW5jZSBvZiByYW5kb20KCWNoYXJhY3RlcnMsIGluc2VydGlvbiBvZiBjaGFyYWN0ZXJzIG92ZXIgc2VsZWN0aW9uLCBtaXNwbGFjZWQKCWNhcmV0IGxvY2F0aW9uLCBkaXNwbGF5IGNvcnJ1cHRpb24sIGVuZCBvZiBsaW5lIGJlaGF2aW9yLCBldGMuCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJRURJVCBjbGFzcyBkb2Vzbid0IHdhbnQgdG8gdXNlIENTX1BBUkVOVERDIGZsYWcuCgpUaHUgTWFyIDMwIDIwOjU4OjI1IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KICAgICAgICAKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJICBGaXh1cEZ1bmN0aW9uUHJvbG9ncygpIHNob3VsZCBhbHNvIGhhbmRsZSBtdWx0aXBsZSBkYXRhIG1vZHVsZXMuCgkgICh0aGlzIGJ1ZyBvbmx5IGJlY2FtZSB2aXNpYmxlIGJlY2F1c2UgTWFrZVByb2NJbnN0YW5jZSgpIHdhcyBmaXhlZAoJICBpbiA5NTAzMTkpCgkKCSogW21pc2MvZG9zZnMuY10KCSAgU2ltcGxpZmllZCBET1NfU2ltcGxpZnlQYXRoLgoJICBTbWFsbCBmaXggdG8gRE9TX29wZW5kaXIgdG8gcmV1c2UgYW4gZW50cnkgaWYgYW4gb3BlbiBkaXJlY3RvcnkKCSAgaXMgb3BlbmVkIGFnYWluLCB0byBwcmV2ZW50ICJ0b28gbWFueSBvcGVuIGRpcmVjdG9yaWVzIiBtZXNzYWdlcy4KClRodSBNYXIgMzAgMTI6MDU6MDUgMTk5NSBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIvY29tcG9iai5zcGVjXVtpbmNsdWRlL2NvbXBvYmouaF1bbWlzYy9jb21wb2JqLmNdCglDb0Rpc2Nvbm5lY3RPYmplY3Q6IG5ldyBzdHViIGZ1bmN0aW9uCgoJKiBbaW5jbHVkZS9tc2Rvcy5oXQoJZml4IERPU1ZFUlNJT04KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCU5FX0ZpeHVwU2VnbWVudDogQmUgbW9yZSBnZW5lcm91cyBvbiBhZGRpdGl2ZSBmaXh1cHMKCgkqIFtpZjE2MzIvdXNlci5zcGVjXVttaXNjL25ldHdvcmsuY10KCUFkZCBtb3JlIFdOZXQqIHN0dWJzCgpXZWQgTWFyIDI5IDExOjQ3OjIyIDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCiAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveC5jXQoJICBEbGdEaXJMaXN0KCk6IHNlbmQgc2VncHRyIGluc3RlYWQgb2YgbGluZWFyIHBvaW50ZXIgCgkgIGluIG1lc3NhZ2UgdG8gc3RhdGljIGNvbnRyb2wKCSogW2NvbnRyb2xzL21lbnUuY10KCSAgVHJpZWQgdG8gaW1wbGVtZW50IG93bmVyZHJhd24gbWVudWl0ZW1zLiBEb2Vzbid0IHdvcmsuCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW29iamVjdHMvZm9udC5jXQoJICBQcm92aWRlIGEgc3R1YiBmb3IgR2V0UmFzdGVyaXplckNhcHMoKQoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCgkgIFBhc3MgZW5kIGFkZHJlc3MgaW5zdGVhZCBvZiBsZW5ndGggdG8gTG9jYWxJbml0KCkgaW4gCgkgIENyZWF0ZVNlbGVjdG9ycygpCgkqIFttZW1vcnkvbG9jYWwuY10KCSAgTG9jYWxJbml0KCk6IElmIHRoZXJlJ3MgYWxyZWFkeSBhIGxvY2FsIGhlYXAgaW4gdGhlIHNlZ21lbnQsIGRvCgkgIG5vdGhpbmcgYW5kIHJldHVybiBUUlVFCgkqIFtvYmplY3RzL2xpbmVkZGEuY10KCSAgUmVwbGFjZWQgYnVnZ3kgTGluZUREQSgpIHdpdGggYSBCcmVzZW5oYW0gYWxnb3JpdGhtLiBTaG91bGQgd29yawoJICBub3cuCgkqIFt3aW5kb3dzL2N1cnNvci5jXQoJICBMb2FkQ3Vyc29yKCkvQ3JlYXRlQ3Vyc29yKCk6IENsZWFuZWQgdXAgdGhlIG1lc3MuIE5lZWRzIHNvbWUKCSAgbW9yZSB3b3JrIHN0aWxsLgoKVHVlIE1hciAyMSAxNzo1NDo0MyAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgogICAgICAgICogW2lmMTYzMi9yZWxheS5jXSBbaWYxNjMyL2NhbGxiYWNrLmNdIFtpbmNsdWRlL2RsbHMuaF0KCSAgW2lmMTYzMi93aW5wcm9jcy5zcGVjXSBbaWYxNjMyL3dpbnByb2NzLmNdIFtpbmNsdWRlL3dpbnByb2NzLmhdCgkgIFtjb250cm9scy93aWRnZXRzLmNdIFttaXNjL3NoZWxsLmNdIFttaXNjL2NvbW1kbGcuY10KCSAgW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFttaXNjL21lc3NhZ2UuY10KCSAgQWRkZWQgYSBuZXcgYnVpbHRpbiBETEwgdGhhdCBwcm92aWRlcyAxNiBiaXQgZW50cnkgcG9pbnRzIGZvciBhbGwKCSAgdGhlIERlZipQcm9jcyAoRGVmRGxnUHJvYywgQnV0dG9uUHJvYyBldGMuKS4gT1dMIHByb2dyYW1zIHdvcmsKCSAgYWdhaW4uCgkqIFttaXNjL3NoZWxsLmNdCgkgIFJlZ09wZW5LZXkoKS9SZWdDcmVhdGVLZXkoKSBidWdzIGZpeGVkLgogICAgICAgICogW2xvYWRlci9uZV9pbWFnZS5jXQoJICBTa2lwcGluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYSBETEwgd2hlbiBDUyA9PSAwIHdhcyBicm9rZW4uCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBNYXIgMTkgMTY6MzA6MjAgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQoKCSogWyovKl0KCUltcGxlbWVudGVkIGEgbmV3IG1lbW9yeSBtYXBwaW5nIHNjaGVtZS4gVGhlcmUncyBubyBsb25nZXIgYQoJb25lLXRvLW9uZSBtYXBwaW5nIGJldHdlZW4gMTYtYml0IGFuZCAzMi1iaXQgcG9pbnRlcnMuIFBsZWFzZSBzZWUKCWZpbGUgREVWRUxPUEVSUy1ISU5UUyBmb3IgdGVjaG5pY2FsIGRldGFpbHMuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglGaXhlZCBidWcgd2hlbiBkcmFnZ2luZyBtb3VzZSBpbiBob3Jpem9udGFsIHNjcm9sbGJhcnMuCgoJKiBbdG9vbHMvYnVpbGQuY10gW2lmMTYzMi8qLnNwZWNdCglSZW1vdmVkIHN1cHBvcnQgZm9yIEMgY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCBmb3IgcmUtb3JkZXJpbmcKCW9mIHRoZSAzMi1iaXQgYXJndW1lbnRzLCBhcyB0aGVzZSB3ZXJlIG5ldmVyIHVzZWQuIFRoaXMgc2hvdWxkCglhbGxvdyBhIG1vcmUgZWZmaWNpZW50IGNhbGxiYWNrIHNjaGVtZSB0byBiZSBpbXBsZW1lbnRlZC4KCgkqIFtpZjE2MzIvb2xlY2xpLnNwZWNdCglSZWR1Y2VkIHRoZSBudW1iZXIgb2YgZW50cmllcyB0byBtYWtlIHRoZSAxNi1iaXQgY29kZSBmaXQgaW4gNjRrLgoJVGhpcyBsaW1pdGF0aW9uIHdpbGwgc29vbiBiZSByZW1vdmVkLgoKCSogW2xvYWRlci9sZHQuY10KCVJld3JvdGUgTERUIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgYW5kIGltcGxlbWVudGVkIExEVF9HZXRFbnRyeSgpLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCVJld3JvdGUgR2xvYmFsKigpIHJvdXRpbmVzIHRvIHVzZSB0aGUgbmV3IHNlbGVjdG9yIGFsbG9jYXRpb24KCW1lY2hhbmlzbS4KCgkqIFttZW1vcnkvbG9jYWwuY10KCVJld3JvdGUgbG9jYWwgaGVhcCBoYW5kbGluZyB0byB1c2UgYSBXaW5kb3dzLWNvbXBhdGlibGUgbGF5b3V0Cgkobm90IHJlYWxseSBmaW5pc2hlZCB5ZXQpLgoJSW1wbGVtZW50ZWQgVE9PTEhFTFAgaGVhcC13YWxraW5nIHJvdXRpbmVzLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJSW1wbGVtZW50ZWQgTERUIG1hbmlwdWxhdGlvbiBBUEkgZnVuY3Rpb25zLgoKVHVlIE1hciAxNCAxOTo1MDoyOCBFU1QgMTk5NSBXaWxsaWFtIE1hZ3JvICh3bWFncm9AdGMuY29ybmVsbC5lZHUpCgoJKiBbd2luZG93cy9kZWZkbGcuY10KCUZpeGVkIHByb2JsZW0gd2hlcmUgZGlhbG9ncyBjbG9zZWQgdXNpbmcgdGhlIFN5c3RlbSBtZW51IAogICAgICAgICgnQ2xvc2UnIGl0ZW0gb3IgZG91YmxlIGNsaWNrIG9uIGNsb3NlIGJveCkgd291bGQKCWhhbmcgV2luZS4KClN1biBNYXIgMTIgMTQ6Mjg6MTMgMTk5NSAgTWljaGFlbCBQYXRyYSA8bWlja3lAbWFyaWUucGh5c2lrLlRVLUJlcmxpbi5ERT4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglSZW1vdmVkIG1vc3Qgb2YgdGhlIHN0YXRlbWVudHMgZm9yIHNlbmRpbmcgYSBub3RpZmljYXRpb24gbWVzc2FnZQoJTGlzdEJveERpcmVjdG9yeSgpLCBEbGdEaXJTZWxlY3QoKSwgRGxnRGlyTGlzdCgpOiBJbXByb3ZlZCB0aGUKCWNvZGU7IEJvcmxhbmQncyBzdGFuZGFyZCBmaWxlIG9wZW4gZGlhbG9nIHdpbGwgd29yayBub3cuCgkKCSogW21pc2MvbWFpbi5jXSwgW21pc2MvZmlsZS5jXSwgW21pc2NlbXUvaW50MjEuY10KCUFkZGVkIHN1cHBvcnQgZm9yIG5ldyBjb21tYW5kIGxpbmUgb3B0aW9uICItYWxsb3dyZWFkb25seSIuIElmIHNldAoJYW4gYXR0ZW1wdCB0byBvcGVuIGEgcmVhZCBvbmx5IGZpbGUgaW4gd3JpdGUgbW9kZSB3aWxsIGJlIGNvbnZlcnRlZCAKCXRvIG9wZW5pbmcgaXQgcmVhZCBvbmx5IChtYW55IHByb2dyYW1zIHRyeSB0byBvcGVuIGFsbCBmaWxlcyBpbiAKCXJlYWQvd3JpdGUgbW9kZSBldmVuIGlmIHRoZXkgb25seSBpbnRlbmQgdG8gcmVhZCBpdCAtIHRoaXMgbWlnaHQgCgljYXVzZSBhIGZldyB1bmRlciBwcm9ibGVtcyB1bmRlciBhbiB1bml4LWxpa2UgZW52aXJvbm1lbnQgd2hlcmUgbW9zdCAKCWZpbGVzIGFyZSByZWFkIG9ubHkgZm9yIGEgIm5vcm1hbCIgdXNlcikKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUdldE1lbW9yeVJlZmVyZW5jZSgpOiBBZGRlZCBzdXBwb3J0IGZvciBfX0FISW5jciBhbmQgX19BSFNoaWZ0CgoJKiBbbWlzYy9kb3NfZnMuY10KCURPU19TaW1wbGlmeVBhdGgoKTogVGhpcyByb3V0aW5lIHNpbXBsaWZpZXMgcGF0aCBuYW1lcyAoIGUuZy4sIGl0Cgl3aWxsIGNoYW5nZSAiL3Vzci8vL2xvY2FsL2Jpbi8uLi9saWIvL2EiIHRvICIvdXNyL2xvY2FsL2xpYi9hIiApCgltYXRjaCgpOiByZXdyaXR0ZW4KCQoJKiBbb2JqZWN0cy90ZXh0LmNdCglURVhUX05leHRMaW5lKCk6IFJlbW92ZWQgYSBidWcgaW4gdGhlIGhhbmRsaW5nIG9mIExGJ3MKCgkqIFttaXNjZW11L2ludDIxLmNdCglHZXRGaWxlRGF0ZVRpbWUoKTogRml4ZWQuIFNldEZpbGVEYXRlVGltZSgpIGlzIHN0aWxsIGJyb2tlbi4KClNhdCBNYXIgMTEgMTk6NDY6MTkgMTk5NSAgTWFydGluIHZvbiBMb2V3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJQ2hhbmdlTWVudTogZGVmYXVsdHMgdG8gTUZfSU5TRVJUCglJbnNlcnRNZW51OiBhbGxvdyBpbnNlcnRpb24gZXZlbiBpZiBwb3NpdGlvbiBpcyBvbmUgYWZ0ZXIgbGFzdCBpdGVtCgoJKiBbaWYxNjMyL0ltYWtlZmlsZV0gW2lmMTYzMi9jb21wb2JqLnNwZWNdIFtpZjE2MzIvcmVsYXkuY10KCSAgW2lmMTYzMi9zdG9yYWdlLnNwZWNdIFtpbmNsdWRlL2RsbHMuaF0KCUFkZGVkIHN0dWJzIGZvciBTVE9SQUdFLkRMTCBhbmQgQ09NUE9CSi5ETEwKCgkqIFtpZjE2MzIvdXNlci5zcGVjXSBbd2luZG93cy9tZXNzYWdlLmNdCglJblNlbmRNZXNzYWdlOiBuZXcgZnVuY3Rpb24KCgkqIFtpbmNsdWRlL25lZXhlLmhdW2luY2x1ZGUvbmVfaW1hZ2UuY10KCU5FX0ZpeHVwU2VnbWVudDogZml4ZWQgaGFuZGxpbmcgb2YgYWRkaXRpdmUgcmVjb3JkcwoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJR2V0RW50cnlETExOYW1lOiByZXR1cm4gTlVMTCBpbnN0ZWFkIG9mIHBvaW50ZXIgdG8gRExMLjAgaWYgbm90IGZvdW5kCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJd2luX2ZhdWx0OiBFbnRlciBkZWJ1Z2dlciBvbiBTSUdGUEUsIHRvbwoKV2VkIE1hciAgMSAyMTo0Nzo0MiAxOTk1ICBDYW1lcm9uIEhlaWRlICAoaGVpZGVAZWUudWFsYmVydGEuY2EpCgogICAgICAgICogW21pc2NlbXUvaW50Ki5jXQogICAgICAgIFZhcmlvdXMgbWlub3IgbW9kaWZpY2F0aW9ucyB0byB0aGUgY2xvY2sgdGljayBjb3VudGVyLAogICAgICAgIEZpbmRGaXJzdC9GaW5kTmV4dCBmdW5jcywgYW5kIERQQiBoYW5kbGluZy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IE1hciAgMiAxNzo0NDozMiAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHUpCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdIFtvYmplY3RzL29lbWJpdG1hcC5jXQoJUmVtb3ZlZCBzeXNyZXMgYml0bWFwIGNvZGU7IHlvdSBuZWVkIGxpYlhwbSB0byBjb21waWxlIG5vdy4KCUltcGxlbWVudGVkIExvYWRJY29uKCkgZm9yIE9FTSBpY29ucy4KCgkqIFtpbmNsdWRlL2JpdG1hcHMvb2ljXypdCglBZGRlZCBPRU0gaWNvbnMgaW4gWFBNIGZvcm1hdC4KCgkqIFtvYmplY3RzL2RpYi5jXQoJQnVnIGZpeCBpbiBEcmF3SWNvbigpLgoKCSogW3JjL3N5c3Jlc2JtLnJjXQoJUmVtb3ZlZDsgYWxsIGJpdG1hcHMgYXJlIHN0b3JlZCBpbiBYUE0gZm9ybWF0IG5vdy4KClR1ZSBGZWIgMjggMTg6NTQ6MjggMTk5NSAgVG9taSBMZXBwaWthbmdhcyAgKHRvbWlsZXBwQHBhanUub3VsdS5maSkKCgkqIFtjb250cm9scy9lZGl0LmNdCglTbWFsbCBwYXRjaCB0byBmaXggZWRpdC1jb250cm9sIHdoZW4gaXQncyBjcmVhdGVkIHdpdGggdGV4dC4KClN1biBGZWIgMjYgMjA6MjI6MTUgMTk5NSAgTWljaGFlbCBWZWtzbGVyICAoZTE2NzgyMjNAdG9jaG5hcGMyLnRlY2huaW9uLmFjLmlsKQoKCSogW3Rvb2xzL21ha2VfZGVidWddCglUaGUgY3JlYXRlZCBtYWNyb3Mgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHMgYW55bW9yZSB3aGVuIHVzZWQgaW4KCWFuICJpZi1lbHNlIiBzdHJ1Y3R1cmUuIE5vIG1vcmUgd2FybmluZ3MgZnJvbSB0aGUgY29tcGlsZXIgd2hlbgoJY29tcGlsZWQgd2l0aG91dCBkZWZpbmluZyBERUJVR19SVU5USU1FLgogClN1biBGZWIgMjYgMjA6MjA6NDkgMTk5NSAgTWljaGFlbCBQYXRyYSA8bWlja3lAbWFyaWUucGh5c2lrLlRVLUJlcmxpbi5ERT4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglMaXN0Qm94RGVsZXRlU3RyaW5nKCk6IEZpeGVkCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglHZXRNZW1vcnlSZWZlcmVuY2UoKTogV2hlbiBzcGVjaWFsIHNlZ21lbnRzIGFyZSByZWZlcmVuY2VkIGJ5Cglwc2V1ZG8tZnVuY3Rpb25zIGxpa2UgX18wMDQwSCwgYSByZWZlcmVuY2UgdG8gYSAibm9ybWFsIiBzZWdtZW50Cgl3aWxsIGJlIHJldHVybmVkIHByZXZlbnRpbmcgdGhlIHByb2dyYW0gZnJvbSBjcmFzaGluZyBhcyBzb29uCglhcyB0aGUgcmVmZXJlbmNlZCBzZWdtZW50IGlzIGFjdHVhbGx5IGFjY2Vzc2VkLgoKU3VuIEZlYiAyNiAxNTo1NToxNCBNRVQgMTk5NSAgTWFydGluIHZvbiBMb2V3aXMgKGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZSkKCgkqIFtDb25maWd1cmVdCglBc2sgZm9yIE9MRSBzdHVicyBhbmQgbWFsbG9jIGRlYnVnZ2luZwoKCSogW0ltYWtlZmlsZV0KCWxpbmsgd2l0aCBsaWJtY2hlY2suYSBpZiBuZWNlc3NhcnkKCgkqIFtpZjE2MzIvcmVsYXkuY11baW5jbHVkZS9kbGwuaF1baWYxNjMyL0ltYWtlZmlsZV0KCUFkZCBPTEUgc3R1YnMsIGluY3JlYXNlIG51bWJlciBvZiBidWlsdGlucwoJZGxsX25hbWVfdGFibGVfZW50cnlfczogbmV3IGZpZWxkIGRsbF9pc191c2VkCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCUdldE1vZHVsZUhhbmRsZSxNb2R1bGVOZXh0OiBDaGVjayBkbGxfaXNfdXNlZAoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJQmFyayBvbiB1bnN1cHBvcnRlZCBORV9SQUREUl9MT1dCWVRFIGZsYWcgKHdoYXQgaXMgaXQgc3VwcG9zZWQKCXRvIG1lYW4sIGFueXdheT8pCgoJKiBbbWlzYy9vbGVjbGkuY11bbWlzYy9vbGVzdnIuY10KCU5ldyBmaWxlcy4gQWRkIHRvIG1pc2MvSW1ha2VmaWxlCgoJKiBbbWlzYy9kb3NfZnMuY10KCURPU19HZXRVbml4RmlsZU5hbWU6IG1ha2UgYSBjb3B5IG9mIHRoZSBpbnB1dCBwYXJhbWV0ZXIgdG8gCglwcmV2ZW50IG92ZXJ3cml0aW5nCgoJKiBbbWlzYy9tYWluLmNdCglNQUlOX1BhcnNlRExMT3B0aW9uczogbmV3IGZ1bmN0aW9uCglNQUlOX1BhcnNlT3B0aW9uczogdHJlYXQgLWRsbCBjb21tYW5kIGxpbmUgZmxhZwoJbWFpbjogYWRkIHN1cHBvcnQgZm9yIG1hbGxvYyBkZWJ1Z2dpbmcKCkZyaSBGZWIgMjQgMTI6NDM6MjcgMTk5NSAgRXJpayBTdmVuZHNlbiAgPHozZXN2QGttZC1hYy5kaz4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglTbWFsbCBwYXRjaCBmb3IgcGVvcGxlIHVzaW5nIEZyZWVCU0QtMi4xLjAuCgpGcmkgRmViIDE3IDIyOjQ5OjE4IDE5OTUgIE1pZ3VlbCBkZSBJY2F6YSAobWlndWVsQHJveGFubmUubnVjbGVjdS51bmFtLm14KQoKCSogW3Rvb2xraXQvc3VwLmNdCglBZGRlZCByZXR1cm4gdmFsdWVzIHRvIHRoZSBDYWxsKiByb3V0aW5lcwoKCSogW3Rvb2xraXQvd2lubWFpbi5jXQoJTG9hZCB0aGUgcmVzb3VyY2UgZmlsZSBwcm9wZXJseSBmb3IgV2luZUxpYiBhcHBsaWNhdGlvbnMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBGZWIgMTYgMTg6NTc6MzEgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQoKCSogW2lmMTYzMi9jYWxsLlNdCglPbmx5IHNhdmUgdGhlIGxvd2VyIDE2LWJpdHMgb2YgU1AgYW5kIEJQLgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJV2hlbiBjYWxsaW5nIHRvIDE2LWJpdCBjb2RlLCByZXN0b3JlIERTIGZyb20gaXRzIHByZXZpb3VzIHZhbHVlIG9uCgllbnRyeSB0byB0aGUgMzItYml0IGNvZGUsIGluc3RlYWQgb2YgZnJvbSB0aGUgY29kZSBzZWdtZW50IG93bmVyLgoKCSogW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdCglVc2UgYSBzdHJ1Y3R1cmUgdG8gcmVwcmVzZW50IHRoZSAxNi1iaXQgc3RhY2sgZnJhbWUgbGF5b3V0CglpbnN0ZWFkIG9mIGhhcmQtY29kZWQgb2Zmc2V0cy4KCQoJKiBbcmMvSW1ha2VmaWxlXQoJVXNlIHkudGFiLmMgZm9yIGJpc29uIG91dHB1dCBmaWxlIGZvciBjb21wYXRpYmlsaXR5IHdpdGggeWFjYy4KCgkqIFt0b29scy9idWlsZC5jXQoJU21hbGwgb3B0aW1pemF0aW9uIGZvciBjYWxscyB0byAzMi1iaXQgY29kZS4KClN1biBGZWIgMTIgMDM6MTk6NDcgMTk5NSAgTWljaGFlbCBWZWtzbGVyIChzMTY3ODIyM0B0Mi50ZWNobmlvbi5hYy5pbCkKCgkqIFt0b29scy9idWlsZC5jXQoJRml4ZWQgYnVnIChpbmZsaWN0ZWQgYnkgcHJldmlvdXMgY2hhbmdlKSAtIFNFR1Ygb24gWk1BR0lDIGZpbGUgZm9ybWF0LgoKU3VuIEZlYiAxMSAyMDowMDowMCAxOTk1ICBH9nJhbiBUaHluaSAgKGdvcmFuQG5vcnJza2VuLmJpbGRiYXNlbi5zZSkKCgkqIFtkZWJ1Z2dlci9kYmcueV0KCVJlbW92ZSB1bm5lY2Vzc2FyeSBzeW0tdGFibGUgbG9hZGluZyB3aGVuIHN0b3BwZWQgaW4gMTYtYml0IG1vZGUuCgoJKiBbaW5jbHVkZS9zZWdtZW0uaF0gW2xvYWRlci9zZWxlY3Rvci5jXQogICAgICAgIEFkZGVkIGR5bmFtaWMgYWxsb2N0aW9uIG9mIHNlbGVjdG9ycy4KICAgICAgICBGaXhlZCBzb21lIHByb2JsZW1zIHdpdGggbGFyZ2UgcHJvZ3JhbXMgU0lHU0VHVi1pbmcgd2hpbGUKICAgICAgICBydW5uaW5nIG91dCBvZiBzZWxlY3RvcnMuCgoJKiBbaW5jbHVkZS9zZWdtZW0uaF0gW2xvYWRlci9zZWxlY3Rvci5jXSBbaWYxNjMyL2NhbGxiYWNrLmNdIAogICAgICAgICAgW21lbW9yeS9nbG9iYWwuY10gW21lbW9yeS9oZWFwLmNdIFttZW1vcnkvbGluZWFyLmNdCglVc2UgX19BSFNISUZUIGFuZCBfX0FISU5DUiBpbnN0ZWFkIG9mIDMgYW5kIDguCgpNb24gRmViICA2IDE4OjA3OjM4IDE5OTUgIENhbWVyb24gSGVpZGUgIChoZWlkZUBlZS51YWxiZXJ0YS5jYSkKCiAgICAgICAgKiBbbWlzYy9kb3NfZnMuY10KICAgICAgICBCZXR0ZXIgcmVsYXRpdmUgcGF0aCBoYW5kbGluZyB3aGVuIGNvbnZlcnRpbmcgZmlsZW5hbWVzIGJldHdlZW4KICAgICAgICBkb3MgYW5kIHVuaXgsIGFsbG93aW5nICcuJyB0byBiZSB1c2VkIGluIHRoZSBXaW5kb3dzIHBhdGguCiAgICAgICAgU3RhcnR1cCB3b3JraW5nIGRpciBpcyBub3cgYmFzZWQgb24gY3VycmVudCB3b3JraW5nIGRpci4KClNhdCBGZWIgIDQgMjE6MjE6MTMgMTk5NSAgTWljaGFlbCBWZWtzbGVyIChzMTY3ODIyM0B0Mi50ZWNobmlvbi5hYy5pbCkKCgkqIFtpZjE2MzIvcmVsYXkuY10gW2luY2x1ZGUvZGxscy5oXSBbdG9vbHMvYnVpbGQuY10KCVNxdWVlemVkIGRhdGEgc3RydWN0dXJlIHRoYXQgcmVmZXJlbmNlcyBpbnRlcm5hbCBkbGwncyAobW9zdGx5Cgkic3RydWN0IGRsbF90YWJsZV9lbnRyeV9zIikuIENhdXNlZCAyMCUgcmVkdWN0aW9uIGluIGV4ZWN1dGFibGUKCWNvZGUgc2l6ZS4KCkZyaSBGZWIgIDMgMTg6NTM6MTUgMTk5NSAgTWFydGluIHYuIExvZXdpcyAgKGxvZXdpc0BtYXJpZSkKCgkqIFtJbWFrZWZpbGVdCgltYWtlIHdpbmUuc3ltIG9ubHkgd2hlbiBtYWtpbmcgZW11bGF0b3IKCgkqIFttaXNjL2ZpbGUuY10KCU9wZW5GaWxlKCk6IHJlcG9ydCBhcyBub3QgaW1wbGVtZW50ZWQgZm9yIFdJTkVMSUIKCgkqIFttaXNjL3dpbnNvY2suY10KCUZpeCBDT05WRVJUX0hPU1RFTlQgYW5kIGZyaWVuZHMgZm9yIHVzZSB3aXRoIFdJTkVMSUIKCgkqIFtyYy9JbWFrZWZpbGVdW3JjL3JjLnldW3JjL3BhcnNlci5jXQoJUmVuYW1lIHJjLnkgdG8gcGFyc2VyLnkKCVVzZSBmbGV4IGFuZCBiaXNvbiBvbiBTdW4KCgkqIFt0b29sa2l0L3N1cC5jXQoJQ2FsbFdpbmRvd1Byb2M6IGZpeCBwYXJhbWV0ZXIgdHlwZQoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUNvbW1lbnRlZCAjaWZkZWYgc3BhcmMKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIEZlYiAgMSAxOToyNzo1NSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3Mvd2lucG9zLmNdCglJbXBsZW1lbnRlZCBtYXhpbWl6ZWQgd2luZG93cy4KCUltcGxlbWVudGVkIGljb24gcG9zaXRpb25pbmcgYW5kIEFycmFuZ2VJY29uaWNXaW5kb3dzKCkuCglCdWcgZml4ZXMgaW4gU2V0V2luZG93UG9zKCkuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJSW1wbGVtZW50ZWQgR2V0Q29udHJvbEJydXNoKCkuCglXaW5kb3cgZnJhbWUgaXMgbm8gbG9uZ2VyIGNvbnRhaW5lZCBpbiB0aGUgdXBkYXRlIHJlZ2lvbi4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRGVzdHJveSBvd25lZCB3aW5kb3dzIHVwb24gRGVzdHJveVdpbmRvdygpLgoKU3VuIEphbiAyOSAxNjoxNzoyMiAxOTk1ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJQ2hhbmdlZCBsaW5lIHRlcm1pbmF0b3IgdG8gXHJcbiB0byBiZSBjb21wYXRpYmxlIHdpdGgKCVdpbmRvd3MuICBGaXhlZCBidWcgaW4gdGV4dCBzZWxlY3Rpb24uCgpTdW4gSmFuIDI5IDE0OjEwOjIyIDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCiAgICAgICAqIFttaXNjL3NoZWxsLmNdCiAgICAgICBSZXdyb3RlIFJlZ0NyZWF0ZUtleSBhbmQgUmVnT3BlbktleSwgc2luY2UgdGhleSB3ZXJlIGNvbXBsZXRlbHkgYnJva2VuLgogICAgICAgRml4ZWQgYSBidWcgaW4gUmVnUXVlcnlLZXlWYWx1ZS4gSW1wbGVtZW50ZWQgUmVnRW51bUtleQogICAgICAgVGhlc2UgZnVuY3Rpb25zIG5vdyB3b3JrIHNvbWV3aGF0IG1vcmUgdGhlIHdheSBXaW5kb3dzIHByb2dyYW1zIGV4cGVjdAogICAgICAgdGhlbSB0byB3b3JrLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gSmFuIDIyIDE4OjU1OjMzIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10gW29iamVjdHMvZGliLmNdCglGaXhlZCBpY29uIGxvYWRpbmcgYW5kIGRyYXdpbmcsIG5vdyB0aGF0IEJpdEJsdCgpIHdvcmtzIGNvcnJlY3RseS4KCQoJKiBbb2JqZWN0cy9jbGlwcGluZy5jXSBbb2JqZWN0cy9yZWdpb24uY10KCUltcGxlbWVudGVkIGVsbGlwdGljIHJlZ2lvbnMgd2l0aCBhIHNldCBvZiByZWN0YW5nbGUuIFRoaXMgZ3JlYXRseQoJc2ltcGxpZmllcyB0aGUgcmVnaW9uIGNvZGUgYW5kIHNob3VsZCBib29zdCBjbGlwcGluZyBwZXJmb3JtYW5jZS4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglGaXhlZCBidWcgdGhhdCBjYXVzZWQgc2VnLWZhdWx0IG9uIDI0YnBwIGRpc3BsYXlzLgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglGaXhlZCBidWcgd2hlbiBzaHJpbmtpbmcgYSBiaXRtYXAgdG8gbW9yZSB0aGFuIGhhbGYgaXRzIHNpemUuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJRml4ZWQgYnVncyBpbiBQYWludFJnbigpIGFuZCBQb2x5bGluZSgpLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3BhaW50aW5nLmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJRml4ZWQgc29tZSBwcm9ibGVtcyB3aXRoIHdpbmRvdyBiYWNrZ3JvdW5kIHBhaW50aW5nLgoKVGh1IEphbiAxMiAxMjoyMDoyNSBQU1QgMTk5NSBSb3NzIEJpcm8gKGJpcm9AeWdnZHJhc2lsLmNvbSkKCiAgICAgICAqIFt0b29scy9idWlsZC5jXQogICAgICAgKiBbdG9vbHMvbmV3YnVpbGQuY10KICAgICAgICogW0ltYWtlZmlsZV0KICAgICAgICogW2luY2x1ZGUvd2luZS5oXQogICAgICAgKiBbbG9hZGVyL2NhbGwuU10KICAgICAgICogW2xvYWRlci9zZWxlY3Rvci5jXQogICAgICAgKiBbaW5jbHVkZS9zZWdtZW0uaF0KICAgICAgICogW21pc2MvbWFpbi5jXQogICAgICAgQ2hhbmdlZCBzZWxlY3RvciBjb2RlIGFuZCAxNi8zMiBiaXQgeGZlciBjb2RlIHNvIHRoYXQgd2luZQogICAgICAgbm8gbG9uZ2VyIGhhcyB0byBiZSBsb2FkZWQgbG93IGluIG1lbW9yeS4gIENoYW5nZWQgd2luZQogICAgICAgdG8gd29yayB3aXRoIEVMRiBiaW5hcnkgZm9ybWF0cyB1bmRlciBMaW51eC4KICAgICAgIApTYXQgU2VwIDE3IDExOjA4OjQ5IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKCgkqIFtkZWJ1Z2dlci9kYl9kaXNhc20uY10KCU5ldyBpbnN0cnVjdGlvbiBkaXNhc3NlbWJsZXIgLSBib3Jyb3dlZCBmcm9tIE1hY2gga2VybmVsLiAgSGFzIGEKCUJTRCBzdHlsZSBvZiBsaWNlbnNlIGFzIG9wcG9zZWQgdG8gdGhlIGdkYiBjb2RlIHdlIHdlcmUgcHJldmlvdXNseQoJdXNpbmcgd2hpY2ggd2FzIHVuZGVyIHRoZSBHUEwuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBKYW4gIDkgMTg6Mjc6MTEgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW0ltYWtlZmlsZV0KCUNvbXBpbGluZyB3aXRoIC1XYWxsIGZsYWcuCgoJKiBbKi8qXQoJRml4ZXMgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBjb21waWxhdGlvbiB3YXJuaW5ncy4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJRml4ZWQgQml0Qmx0KCkgYW5kIHVzZWQgdGhlIHNhbWUgY29kZSB0byByZXdyaXRlIFBhdEJsdCgpIGFuZAoJU3RyZXRjaEJsdCgpLiBUaGUgdGhyZWUgKkJsdCgpIGZ1bmN0aW9ucyBzaG91bGQgbm93IGJlIGNvcnJlY3QgaW4KCWV2ZXJ5IGNhc2UgKGZhbW91cyBsYXN0IHdvcmRzKS4KCgkqIFtvYmplY3RzL2JydXNoLmNdIFtvYmplY3RzL2RpdGhlci5jXQoJTWVyZ2VkIHRoZSB0d28gZmlsZXMgaW50byBicnVzaC5jCgoJKiBbb2JqZWN0cy9kYy5jXQoJRml4ZWQgYnVnIHdoZW4gdGhlIFdpbmRvd3MgcHJvZ3JhbXMgZm9yZ2V0IHRvIHJlLXNlbGVjdCB0aGUKCW9yaWdpbmFsIGJpdG1hcCBpbiBhIG1lbW9yeSBEQy4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCVR0eSB0byB1c2UgJ2ZpeGVkJyBmb250IHdoZW4gdGhlIHN5c3RlbSBmb250IGNhbid0IGJlIGZvdW5kLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglUZW50YXRpdmUgZml4IHRvIG1ha2UgZGlhbG9ncyBsb29rIGJldHRlciB3aGVuIHVzaW5nIGZpeGVkLXdpZHRoCglmb250cy4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglQYXJ0aWFsbHkgaW1wbGVtZW50ZWQgdGhlIFBTX0lOU0lERUZSQU1FIHBlbiBzdHlsZS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJRml4IGZvciB3aW5kb3dzIHRoYXQgaGF2ZSB0aGUgV1NfRVhfRExHTU9EQUxGUkFNRSBzdHlsZSBiaXQKCXdpdGhvdXQgdGhlIFdTX0RMR0ZSQU1FIHN0eWxlLgoKVGh1IEphbiAgNSAxMzozNzo0MiAxOTk1ICBDYW1lcm9uIEhlaWRlICAoaGVpZGVAZWUudWFsYmVydGEuY2EpCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJR2xvYmFsQ29tcGFjdCBzaG91bGQgbm93IHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZSB3aGVuIHRoZQoJbGFyZ2VzdCBydW4gb2YgZnJlZSBibG9ja3MgaW5jbHVkZXMgdGhlIGxhc3QgYmxvY2suCgoJKiBbd2luZG93cy9tZGkuY10KCVRpbGluZyBhbmQgY2FzY2FkaW5nIHdpbmRvd3Mgd2l0aG91dCBhbnkgTURJIGNoaWxkcmVuIHNob3VsZAoJbm8gbG9uZ2VyIGNyYXNoIChhc3N1bWluZyBuby1vcCBpcyB0aGUgY29ycmVjdCB0aGluZyB0byBkbykuCgpTdW4gSmFuICAxIDIzOjMwOjI1IDE5OTUgIEZvbnMgQm90bWFuICA8Ym90bWFuQHJhYm8ubmw+CgoJKiBbb2JqZWN0cy9mb250LmNdCglHZXRUZXh0RXh0ZW50UG9pbnQ6IGZpeGVkIGRlYnVnIG91dHB1dCwgc3RyIGlzIGNvdW50ZWQgc3RyaW5nLCBub3QKICAgICAgICB6ZXJvIHRlcm1pbmF0ZWQuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglETExSZWxheTogd2hlbiBkZWJ1Z2dpbmdfc3RhY2sgZ290IHNlZ3YsIGFkZGVkIHVwcGVyIGJvdW5kIGZvcgogICAgICAgIHN0YWNrIGR1bXAuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBEZWMgMjcgMTM6MzU6MTYgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogWyovSW1ha2VmaWxlXQoJQWxsIG9iamVjdHMgZmlsZXMgYXJlIG5vdyBrZXB0IGluIHRoZWlyIHJlc3BlY3RpdmUgZGlyZWN0b3J5LgoKCSogW1JFQURNRV0KCVJld3JvdGUgbW9zdCBvZiBpdC4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJUmV3cm90ZSBCaXRCbHQoKSB0byBsb29rIHJpZ2h0IGluIGV2ZXJ5IGNhc2UsIHdoaWxlIG1pbmltaXppbmcKCXRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UuIE5vdCByZWFsbHkgZmluaXNoZWQgeWV0LgoKCSogW29iamVjdHMvYml0bWFwLmNdIFtvYmplY3RzL2RjLmNdCglGaXhlZCBidWcgd2l0aCBwYXR0ZXJuIGJydXNoZXMuCgoJKiBbb2JqZWN0cy9jbGlwcGluZy5jXSBbd2luZG93cy9wYWludGluZy5jXQoJRml4ZXMgZm9yIGxvZ2ljYWwgY29vcmRpbmF0ZXMuCgoJKiBbb2JqZWN0cy9jb2xvci5jXSBbd2luZG93cy9ncmFwaGljcy5jXQoJRml4ZWQgR2V0UGl4ZWwoKSB0byByZXR1cm4gdGhlIGNvcnJlY3QgY29sb3IsIGFuZCBtYWRlIGl0IGZhc3Rlci4KCgkqIFtvYmplY3RzL3JlZ2lvbi5jXQoJRml4ZWQgYnVnIGluIENvbWJpbmVSZ24oKSB3aGVuIG9uZSBvZiB0aGUgcmVnaW9uIGlzIGVtcHR5LgoKRnJpIERlYyAyMiAwMTo0Mjo1NyBNRVQgMTk5NAkJICBEYWcgQXNoZWltIChkYXNoQGlmaS51aW8ubm8pCgoJKiBbQ29uZmlndXJlXQoJRG9uJ3QgYXNzdW1lIHRoYXQgZXhwciBoYW5kbGVzICc9PScsIHVzZSAnPScgaW5zdGVhZC4KCUdpdmUgYSAoaG9wZWZ1bGx5IGluZm9ybWF0aXZlKSBtZXNzYWdlIGlmIGltYWtlIGZhaWxzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgRGVjICA3IDE0OjUyOjI1IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglGaXhlZCBwcm9ibGVtcyBkdWUgdG8gbmV3IHNjcm9sbC1iYXIgY29kZS4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdIFttaXNjZW11L2lvcG9ydHMuY10KCUhhbmRsZSBJL08gb3Bjb2RlcyB0aGF0IHVzZSBhbiBhYnNvbHV0ZSBhZGRyZXNzLgoKCSogW29iamVjdHMvdGV4dC5jXQoJSW1wbGVtZW50ZWQgVGFiYmVkVGV4dE91dCgpLgoKU2F0IERlYyAgMyAxODo1MzowOCAxOTk0ICBLZW5uZXRoIE1hY0RvbmFsZCAgPEsuTWFjRG9uYWxkQGVkLmFjLnVrPgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCUltcGxlbWVudGVkIEdldE1ldGFmaWxlKCkuCglGaXhlZCBidWcgaW4gUGxheU1ldGFGaWxlKCkgd2hlbiByZWFkaW5nIGRpc2MgYmFzZWQgbWV0YWZpbGUgcmVjb3Jkcy4KCUFkZGVkIE1FVEFfUE9MWVBPTFlHT04sIE1FVEFfREVMRVRFT0JKRUNUIGFuZCBNRVRBX0VPRiB0byAKCVBsYXlNZXRhRmlsZVJlY29yZCgpLgoJCldlZCBOb3YgMzAgMDY6MzI6MjUgMTk5NCAgTWFydGluIHZvbiBMb2V3aXMgIChtYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdSkKCgkqIFtJbWFrZWZpbGVdCgl3aW5lLnN5bTogUmVtb3ZlIGdjYzJfY29tcGlsZWQgYW5kIGZyaWVuZHMKCgkqIFtjb250cm9scy9saXN0Ym94LmNdW2lmMTYzMi9yZWxheS5jXVtpZjE2MzIvcmVsYXkuY10KCSAgW2xvYWRlci9yZXNvdXJjZS5jXVttZW1vcnkvaGVhcC5jXVtvYmplY3RzL2RpYi5jXVt3aW5kb3dzL2RpYWxvZy5jXQoJUmVwbGFjZSAjaWZkZWYgREVCVUdfWFhYIHdpdGggaWYoZGVidWdnaW5nX3h4eCl7CgoJKiBbaWYxNjMyL2NhbGwuU10KCUNhbGxUb0xpYk1haW46IE5ldyBmdW5jdGlvbgoKCSogW2lmMTYzMi9yZWxheS5jXVtpbmNsdWRlL29wdGlvbnMuaF1bbWlzYy9tYWluLmNdCgkgIFttaXNjZW11L2ludDFhLmNdW21pc2NlbXUvaW50MjEuY11bbWlzY2VtdS9rZXJuZWwuY10KCXJlbW92ZWQgT3B0aW9ucy5yZWxheV9kZWJ1ZwoKCSogW2luY2x1ZGUvaGVhcC5oXQoJSEVBUF9PV05FUjogVXNlIGRzIGluc3RlYWQgb2YgY3M6aXAKCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCUxvYWRORUltYWdlOiBSZW1lbWJlciBjdXJyZW50IGV4ZSwgaGFuZGxlIG5vZGF0YSBkbGxzCglJbml0TkVETEw6IGhhbmRsZSBub2RhdGEgZGxscywgY2FsbCBDYWxsVG9MaWJNYWluCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglDcmVhdGVTZWxlY3RvcnM6IEluaXRpYWxpemUgYXV0b19kYXRhX3NlbCB3aXRoIDAKCgkqIFttZW1vcnkvaGVhcC5jXQoJSEVBUF9DaGVja0hlYXA6IENoZWNrIHByZXYKCUhFQVBfQ2hlY2tMb2NhbEhlYXBzOiBuZXcgZnVuY3Rpb24KCgkqIFttaXNjL3Byb2ZpbGVdCglSZW1lbWJlciBhbmQgZHVtcCBvbmx5IGNoYW5nZWQgcHJvZmlsZXMKCgkqIFt0b29scy9tYWtlZGVidWddCglJbnRyb2R1Y2UgZGVidWdnaW5nX3h4eCBmbGFncwoKU3VuIE5vdiAyNyAyMzoxMzoyMiBNRVQgMTk5NAk8ZXJpa0B4czRhbGwubmw+CgoJKiBbY2xpcGJvYXJkLmggY29sb3IuaCBkYy5oIGRvc19mcy5oIGV2ZW50LmggZm9udC5oIGdyYXBoaWNzLmgKCWlmMTYzMi5oIGtlcm5lbC5oIGxpYnJhcnkuaCBtaXNjZW11LmggbmVfaW1hZ2UuaCBub25jbGllbnQuaCAKCXBlX2ltYWdlLmggc2VsZWN0b3JzLmggd2ludHlwZXMuaF0KCUFkZGVkLgoKCSogWyovKl0KCS0gQ29tbWVudGVkIGFsbCAnc3RhdGljIGNoYXIgY29weXJpZ2h0IHN0YXRlbWVudHMnLCBzZWUgbWlzYy9tYWluLmMKCS0gbW92ZWQgcHJvdG90eXBlcyB0byBoZWFkZXJzIGZpbGVzLCBmaXhlZCB3cm9uZyBwcm90b3R5cGVzLgoJLSAqcGxlYXNlKiBhZGQgYSBoZWFkZXIgZmlsZSBmb3IgZWFjaCAuYyBpZiB5b3UgbmVlZCB0byBleHBvcnQKCSAgdGhpbmdzLgoKCSogW21pc2MvbWFpbi5jXQoJQWRkZWQgb25lIHN0YXRpYyBzdHJpbmcgd2hpY2ggbGlzdCB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycy4KCkZyaSBOb3YgMjUgMTY6MjQ6MjcgTUVUIDE5OTQJCSAgRGFnIEFzaGVpbSAoZGFzaEBpZmkudWlvLm5vKQoKCSogW0NvbmZpZ3VyZV0KCU1hZGUgdGhlIHN1cHBvcnQgZm9yIG11bHRpcGxlIGxhbmd1YWdlcyBtb3JlIGF1dG9tYXRpYy4gIEFkZGVkCglhIFtmb250c10gc2VjdGlvbiB0byB0aGUgd2luZS5jb25mIGZpbGUuICBNYWRlIHRoZSBkZWZhdWx0cwoJYmV0dGVyLiAgR2VuZXJhbGx5IGNsZWFuZWQgaXQgdXAuCgoJKiBbcmMvc3lzcmVzX05vLnJjXSBbcmMvc3lzcmVzX0RlLnJjXSBbcmMvc3lzcmVzLmNdCglOb3J3ZWdpYW4gcmVzb3VyY2VzIGFuZCBzbWFsbCBmaXhlcyB0byB0aGUgZ2VybWFuIHJlc291cmNlcy4KCldlZCBOb3YgMjMgMjA6Mjg6NTkgMTk5NCAgTWFydGluIHZvbiBMb2V3aXMgIChtYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdSkKCgkqIFtkZWJ1Z2dlci9icmVhay5jXQoJYmFyaygpLCB0b2dnbGVfbmV4dCgpLCBzaG91bGRfY29udGludWUoKTogTmV3IGZ1bmN0aW9ucwoJaW5zZXJ0X2JyZWFrKCk6IEZpeGVkLCBhZGRzIHdyaXRlIGFjY2VzcyB0byBwYWdlIGJlZm9yZSB3cml0aW5nCgl3aW5lX2JwLm5leHRfYWRkcjogbmV3IHN0cnVjdHVyZSBmaWVsZAoKCSogW2RlYnVnZ2VyL2RiZy55XQoJQ2hhbmdlZCBzeW1ib2wncyB2YWx1ZSB0byBiZSBpdCdzIHZhbHVlIGluc3RlYWQgb2YgdGhlIHZhbHVlCglwb2ludGVkIHRvIGJ5IHRoZSBzeW1ib2wuCglDaGFuZ2VkIFNJR1RSQVAgaGFuZGxpbmcgdG8gYWxsb3cgY29udGludWF0aW9uIGFmdGVyIGJyZWFrIHBvaW50CgoJKiBbbWlzYy9zaGVsbC5jXQoJU2hlbGxBYm91dCgpOiBMb2FkIHJlc291cmNlIGZyb20gbWVtb3J5CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBOb3YgMjAgMTg6MzA6MDYgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXSBbaW5jbHVkZS9zY3JvbGwuaF0KCVJld3JpdHRlbiBtb3N0IG9mIHNjcm9sbC1iYXIgY29kZSBmb3IgYmV0dGVyIFdpbmRvd3MgbG9vayAmIGZlZWwuCglJbXBsZW1lbnRlZCBFbmFibGVTY3JvbGxCYXIoKS4KCVByZWxpbWluYXJ5IGtleWJvYXJkIHN1cHBvcnQuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUZpeGVkIEJhZE1hdGNoIGVycm9yIGZvciBCaXRCbHQoKSBhbmQgU3RyZXRjaEJsdCgpIHdoZW4gcmVhZGluZwoJYml0cyBmcm9tIG91dHNpZGUgdGhlIHZpc2libGUgcmVnaW9uLgoKCSogW29iamVjdHMvb2VtYml0bWFwLmNdIFtpbmNsdWRlL2JpdG1hcHMvb2JtXypdCglVc2UgWFBNIHN5bWJvbGljIGNvbG9ycyB0byBsb2FkIGJpdG1hcHMuIFRoaXMgYWxsb3dzIHRoZSBjb2xvcnMKCW9mIHRoZSBiaXRtYXBzIHRvIGRlcGVuZCBvbiB0aGUgc3lzdGVtIGNvbG9ycy4KCgkqIFt0b29scy9tYWtlX2RlYnVnXQoJTWFkZSB0aGUgbWFrZV9kZWJ1ZyBzY3JpcHQgbW9yZSByb2J1c3QuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUZpeGVkIENoZWNrUmFkaW9CdXR0b24oKS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQSBmZXcgY2hhbmdlcyB0byBzY3JvbGwtYmFyIGRyYXdpbmcgYW5kIHRyYWNraW5nLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglSZW5hbWVkIE5leHRXaW5kb3dGcm9tUG9pbnQoKSB0byBXSU5QT1NfTmV4dFdpbmRvd0Zyb21Qb2ludCgpIHRvCglhdm9pZCBjb25mdXNpb24sIGFuZCBvcHRpbWl6ZWQgaXQgc29tZXdoYXQuCgpOb3YgMTksIDk0IE1hcnRpbiBBeW90dGUgKHdpbmVAdHJnY29ycC5ta3NpbmZvLnFjLmNhKQoKCSogW21pc2MvYXVkaW8uY10KCSogW21pc2MvbWNpYW5pbS5jXQoJbW9yZSBjb2RpbmcgYnV0IG5vdGhpbmcgc3BlY3RhY3VsYXIuCgoJKiBbbWlzYy9tbWF1eC5jXQoJc29tZSBjb2RpbmcgdG8gYWNjZXNzICcvZGV2L21peGVyJy4KCgkqIFttaXNjL21pZGkuY10KCXNvbWUgY29kaW5nIHRvIHJlYWQgLk1JRCBmaWxlcywgYnV0IGl0J3Mgbm90IHBsYXlpbmcgeWV0LgoKU3VuIE5vdiAxMyAxOTozMTowMyAxOTk0ICAgIEphbWVzIFlvdW5nbWFuIChtYmNzdGp5QGFmcy5tYW4uYWMudWspCgoJKiBbb2JqZWN0cy9kaWIuY10KCVJlaW1wbGVtZW50ZWQgRElCX1NldEltYWdlQml0c19STEU4KCkgc28gdGhhdCBpdCB3b3VsZCBjb3BlIHdpdGgKCWJpdG1hcHMgd2hpY2ggZG9uJ3QgZW5kIDB4MDAsIDB4MDIgKHByZXZpb3VzbHkgaXQgYmxldyB1cCkuICBUaGlzCglpbmNsdWRlcyBzb21lIGJpdG1hcHMgb3V0cHV0IGJ5IFBhaW50IFNob3AgUHJvLiAgSW1wbGVtZW50YXRpb24gaXMKCXBvc3NpYmx5IG5vdyB0b28gbGF4LiAgUGxlYXNlIHNlZSB0aGUgbm90ZXMgb24gdGhlIGZ1bmN0aW9uIGFib3V0Cgl3aHkuCgoJKiBbY29udHJvbHMvZGVza3RvcC5jXQoJVGhlIGRlc2t0b3AgcGF0dGVybiBzaG91bGQgYmUgcGFpbnRlZCBpZiB0aGUgd2FsbHBhcGVyIGRvZXNuJ3QKCWNvdmVyIHRoZSB3aG9sZSBzY3JlZW4gd2lkdGggT1IgdGhlIHdob2xlIHNjcmVlbiBoZWlnaHQuCgpTdW4gTm92IDEzIDAwOjA3OjExIE1FVCAxOTk0CUVyaWsgQm9zCTxlcmlrQHhzNGFsbC5ubD4KCgkqIFtvYmplY3RzL2RpYi5jXQoJU21hbGwgYnVnIGluIERJQl9TZXRJbWFnZUJpdHMoKSBmaXhlZCwgYml0bWFwcyBpbiAxNiwyNCBicHAKCW5vdyB3b3JrLgoKCSogW2xvYWRlci9uZV9yZXNvdXJjZS5jXSBbaW5jbHVkZS9yZXNvdXJjZS5oXQoJU29tZSBjbGVhbnVwLgoKVGh1IE5vdiAxMCAyMDo0NDo1OCAxOTk0ICBNYXJ0aW4gdm9uIExvZXdpcyAgKG1hcnRpbkBjcy5jc3VmcmVzbm8uZWR1KQoKCSogW0NvbmZpZ3VyZV0KCSAgW3JjL3N5c3Jlcy5yY10KCVByaW1pdGl2ZSBjb21waWxlLXRpbWUgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbGFuZ3VhZ2VzCgoJKiBbcmMvc3lzcmVzX0RlLnJjXQoJTmV3IGZpbGUKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUxvYWRCaXRtYXA6IFJlY29nbml6ZSBlbmQgb2Ygc3lzcmVzYm0gcHJvcGVybHkKCgkqIFtyYy9JbWFrZWZpbGVdCglSdWxlcyB0byBjb21waWxlIHJlc291cmNlcyBzaW1wbGlmaWVkLCBkZXBlbmRlbmNpZXMgY2hhbmdlZAoKCSogW3JjL3N5c3Jlc2JtLnJjXQoJRG9uJ3QgdXNlIHN5c3Jlc2JtIGlmIHVzaW5nIFhQTQoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglDcmVhdGVEaWFsb2dJbmRpcmVjdFBhcmFtOiBSZXZlcnNlIFotb3JkZXIgb2YgY29udHJvbHMKCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCU1TR19UcmFuc2xhdGVNb3VzZU1zZzogRml4IEhUVFJBTlNQQVJFTlQgaGFuZGxpbmcKCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJTmV4dFdpbmRvd0Zyb21Qb2ludDogTmV3IGZ1bmN0aW9uCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglXTV9OQ0hJVFRFU1Q6IEdyb3VwIEJveCBpcyBIVFRSQU5TUEFSRU5UCglCVVRUT05fQ2hlY2tBdXRvUmFkaW9CdXR0b246IE5ldyBmdW5jdGlvbgoJQk1fU0VUQ0hFQ0s6IEFkZGVkIGNhbGwgdG8gQlVUVE9OX0NoZWNrQXV0b1JhZGlvQnV0dG9uCgpNb24gTm92ICA3IDExOjIwOjI2IDE5OTQgIFBhdWwgRmFsc3RhZCAgKHBmQHpvb2YuY3RzLmNvbSkKCgkqIFtvYmplY3RzL3RleHQuY10KCUZpeCBoYW5nIHdoZW4gdXNpbmcgRHJhd1RleHQoLi4uLCBEVF9XT1JEQlJFQUspIHdpdGggYSB3b3JkIHRoYXQKCWlzIHRvbyBsb25nIHRvIGJyZWFrLgoKCSogW29iamVjdHMvZm9udC5jXQoJRG9uJ3QgYXNzdW1lIGhlbHZldGljYSBpZiB0aGVyZSBpcyBubyBmb250IGZhbWlseTsgbGV0IHRoZSBvdGhlcgoJZm9udCBhdHRyaWJ1dGVzIGRlY2lkZSB3aGF0IGZvbnQgdG8gdXNlLgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCUxpc3Rib3hlcyBhbmQgY29tYm8gYm94ZXMgbmVlZCB0byBiZSBub3RpZmllZCBvZiBkb3VibGUtY2xpY2tzLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCSAgW2luY2x1ZGUvbGlzdGJveC5oXQoKCXNjcm9sbGluZyB0byBib3R0b20gb2YgbGlzdCBib3ggc2hvdWxkIGRpc3BsYXkgbGFzdCBpdGVtIGF0IHRoZQoJYm90dG9tLCBub3QgYXQgdGhlIHRvcC4KCQoJbGlzdCBib3hlcyBuZWVkIHRvIGFsbG9jYXRlIGEgc2VwYXJhdGUgaGVhcCBmb3IgdGhlaXIgaXRlbSBkYXRhLAoJcmF0aGVyIHRoYW4gdXNpbmcgdGhlIHVzZXIgaGVhcC4gIE90aGVyd2lzZSwgaXQncyB2ZXJ5IGVhc3kgdG8gcnVuCglvdXQgb2YgbWVtb3J5IGZvciBsaXN0IGJveCBpdGVtcy4KCglyZW1vdmVkIHJlZHVuZGFudCBjb2RlIGluIExpc3RCb3hBZGRTdHJpbmcoKS4gIEltcGxlbWVudGVkIHNpbXBsZQoJdmVyc2lvbiBvZiBMQlNfU09SVC4KCglEb24ndCBwdXQgWy5dIGluIHRoZSBsaXN0IGJveCB3aGVuIHVzaW5nIERETF9ESVJFQ1RPUlkuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUNvbWJvcyBzaG91bGQgcGFzcyBDQlNfU09SVCBvbnRvIHRoZWlyIGxpc3QgYm94LgoKCSogW3dpbmRvd3Mvd2luLmNdCglJZiB3aW5kb3cgY3JlYXRpb24gaXMgYWJvcnRlZCwgcmVtb3ZlIHRoZSB3aW5kb3cgZnJvbSB0aGUKCWxpbmtlZCBsaXN0cy4KCgkqIFtjb250cm9scy9zdGF0aWMuY10KCXN0YXRpYyBjb250cm9scyB3aXRoIFNTX0lDT04gd2VyZSBhbHdheXMgcmV0dXJuaW5nIDAgZnJvbQoJV01fTkNDUkVBVEUuCgoJTWFrZSBzdXJlIHN0YXRpYyBjb250cm9scyBoYXZlIHRleHQgdG8gZHJhdyBiZWZvcmUgZHJhd2luZyBpdC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE5vdiAgNiAxODo1MjowNCAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbb2JqZWN0cy9vZW1iaXRtYXAuY10gIChOZXcgZmlsZSkKCUFkZGVkIHBvc3NpYmlsaXR5IHRvIHVzZSAueHBtIGZpbGVzIGZvciBPRU0gYml0bWFwcy4KCgkqIFtpbmNsdWRlL2JpdG1hcHMvb2JtKl0gIChOZXcgZmlsZXMpCglSZWRyYXduIGFsbCBPRU0gYml0bWFwcyBpbiB4cG0gZm9ybWF0LgoKCSogW29iamVjdHMvZm9udC5jXQoJQWRkIHNwYWNlIGZvciBpbnRlcm5hbCBsZWFkaW5nIHdoZW4gdXNpbmcgYSBuZWdhdGl2ZSBmb250IGhlaWdodC4KCVN0dWJzIGZvciBBZGRGb250UmVzb3VyY2UoKSBhbmQgUmVtb3ZlRm9udFJlc291cmNlKCkuCglGaXggaW4gRk9OVF9Jbml0KCkgZm9yIHVuaW5pdGlhbGlzZWQgZGVmYXVsdCBmb250LgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglNYWtlIGZvbnQgaGVpZ2h0IG5lZ2F0aXZlIGFzIGl0IGlzIHJlYWxseSBhIHBvaW50IHNpemUgYW5kIG5vdCBhCglwaXhlbCBzaXplOyBkaWFsb2dzIHVzaW5nIDgtcG9pbnQgZm9udHMgbG9vayBiZXR0ZXIgbm93LgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUZpeGVkIHRoZSBmaXggOi0pIGZvciBQaWUoKSB0byBtYWtlIGl0IHdvcmsgZm9yIEFyYygpIGFuZCBDaG9yZCgpIGFsc28uCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUEgZmV3IGNoYW5nZXMgZm9yIG5ldyBPRU0gYml0bWFwcy4KClN1biBOb3YgIDYgMTg6MjI6MTggMTk5NCAgTWljaGFlbCBQYXRyYSAgPG1pY2t5QG1hcmllLnBoeXNpay50dS1iZXJsaW4uZGU+CgoJKiBbd2luZG93cy9jbGFzcy5jXQoJVGhlIG5hbWVzIG9mIGxvY2FsIGNsYXNzZXMgaGF2ZSB0byBiZSBzdG9yZWQgdXNpbmcgR2xvYmFsQXRvbSouCglPdGhlcndpc2UgdGhleSBjb3VsZG4ndCBiZSBhY2Nlc3NlZCBmcm9tIG90aGVyIG1vZHVsZXMgKGUuZy4gQldDQykgCgoJKiBbaWYxNjMyL2NhbGwuU10KCUNhbGxUbzE2KGN4KTogSXQncyBwb3NzaWJsZSB0byBzZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBjeC1yZWdpc3Rlci4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCUluaXRORURMTCgpOiBUaGUgc2l6ZSBvZiB0aGUgbG9jYWwgaGVhcCBpcyBub3cgcGFzc2VkIGluIHRoZSBjeC0KCXJlZ2lzdGVyIHdoZW4gaW5pdGlhbGl6aW5nIGEgRExMLgoKCSogW21lbW9yeS9oZWFwLmNdCglMb2NhbEluaXQoKTogVGhlIGNhc2Ugc3RhcnQ9PTAgaXMgbm93IGhhbmRsZWQgaW4gdGhlIHdheSBpdCBzaG91bGQuCgoJKiBbd2luZG93cy93aW4uY10KCUdldFdpbmRvd0xvbmcoKTogSWYgdGhlIGFkcmVzcyBvZiB0aGUgd2luZG93cyBmdW5jdGlvbiBpcyByZXF1ZXN0ZWQKCWl0J3Mgbm8gbG9uZ2VyIHJldHVybmVkIGlmIGl0J3Mgd2l0aGluIHRoZSBXaW5lIGNvZGUgKGFuZCB0aGVyZWZvcmUKCXVucmVhY2hhYmxlIGJ5IGEgd2luZG93cyBwcm9ncmFtKS4gVGhpcyBtYWtlcyBCb3JsYW5kJ3MgT1dMIGhhcHB5LgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUVESVRfR2V0U3RyKCk6IEFkZGVkIGhhbmRsaW5nIGZvciBvZmY8MC4KClN1biBOb3YgIDYgMTc6Mzc6MTQgMTk5NCAgQ2hyaXMgSm9uZXMgIDxjaHJpc2pAaWNoaXBzLmludGVsLmNvbT4KCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJRml4ZWQgaW5maW5pdGUgbG9vcCBidWcgd2hlbiB0d28gRExMcyByZWZlciB0byBlYWNoIG90aGVyIChmaXhlcwoJaGFuZ3VwIG9mIFF1aWNrZW4gZHVyaW5nIGxvYWRpbmcpLgoKVGh1IE5vdiAwNCAxMjowMDowMCAxOTk0ICBKYW4gV2lsbGFtb3dpdXMgIChqYW5AamFuaGguc2guc3ViLmRlKQoKCSogW21pc2MvZG9zX2ZzLmNdCglCdWcgZml4OiBUaGUgc2l6ZSBvZiBhIGRpc2sgYW4gdGhlIGF2YWlsYWJsZSBzcGFjZQoJaXMgbm93IHJldHVybmVkIGluIGJ5dGVzIGluc3RlYWQgb2YgKGluY29ycmVjdGx5KQoJS0J5dGVzLgoKVGh1IE5vdiAwMyAxMjowMDowMCAxOTk0ICBKYW4gV2lsbGFtb3dpdXMgIChqYW5AamFuaGguc2guc3ViLmRlKQoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUJ1ZyBmaXg6IFBpZSBzZWdtZW50cyBhcmUgbm93IGZpbGxlZCB3aXRoIGNvcnJlY3QgYnJ1c2guCgpUaHUgTm92ICAzIDEwOjQwOjA5IDE5OTQgIE1hcnRpbiB2b24gTG9ld2lzICAobWFydGluQGNzLmNzdWZyZXNuby5lZHUpCgogICAgICAgICogW0ltYWtlZmlsZV0KICAgICAgICBnZW5lcmF0ZSByYy5vIGJlZm9yZSBsb2FkZXIubwoKICAgICAgICAqIFtjb250cm9scy9tZW51LmNdCiAgICAgICAgQ29weVN5c01lbnU6IGdlbmVyYXRlIFNZU01FTlUgb24gdGhlIGZseSwgZWxpbWluYXRlIGhTeXNNZW51CgogICAgICAgICogW2luY2x1ZGUvcmVzb3VyY2UuaF0KICAgICAgICBBZGQgc3RydWN0IFJlc291cmNlVGFibGUKCiAgICAgICAgKiBbbG9hZGVyL2JpdG1hcC5oXQogICAgICAgIExvYWQgc3lzdGVtIGJpdG1hcHMgZnJvbSBzeXNyZXNibVRhYmxlCgogICAgICAgICogW21pc2MvY2xpcGJvYXJkLmNdCiAgICAgICAgICBbd2luZG93cy9ldmVudC5jXQogICAgICAgIElzQ2xpcGJvYXJkRm9ybWF0QXZhaWxhYmxlLEVWRU5UX1NlbGVjdGlvblJlcXVlc3Q6IGJ1ZyBmaXhlcwogICAgICAgIAogICAgICAgICogW3JjL0ltYWtlZmlsZV0KICAgICAgICBnZW5lcmF0ZSByYy5vIGZyb20gc3lzcmVzLm8gYW5kIHN5c3Jlc2JtLm8uIEFkZGVkIC1sZmwKCiAgICAgICAgKiBbcmMvcmMueV0KICAgICAgICBjaGFuZ2Ugc3R5bGUgaGFuZGxpbmcgdG8gYWxsb3cgKCBTMSB8IFMyICkgfCBTMwoKICAgICAgICAqIFtyYy9zeXNyZXMucmNdCiAgICAgICAgICBbcmMvc3lzcmVzYm0ucmNdCiAgICAgICAgUHV0IGJpdG1hcHMgYW5kIGljb25zIHRvIHN5c3Jlc2JtLCBldmVyeXRoaW5nIGVsc2UgdG8gc3lzcmVzCgogICAgICAgICogW3JjL3dpbmVyYy5jXQogICAgICAgICAgW3JjL3dpbmVyYy5oXQogICAgICAgIEFkZGVkIC1vLCAtYyBmbGFncy4gTmV3IGZ1bmN0aW9uIHNldF9vdXRfZmlsZS4gT3V0cHV0IHRvIGZpbGVzLgoKICAgICAgICAqIFt3aW5kb3dzL2RpYWxvZy5jXQogICAgICAgIERpYWxvZ0JveEluZGlyZWN0UHRyLCBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtUHRyOiBOZXcgZnVuY3Rpb25zIAoKICAgICAgICAqIFt3aW5kb3dzL25vbmNsaWVudC5jXQogICAgICAgIENyZWF0ZSBBYm91dFdpbmUgZGlhbG9nIGZyb20gdGVtcGxhdGUgcG9pbnRlcgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gT2N0IDMwIDEzOjAxOjE4IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9zdGF0aWMuY10KCUJ1ZyBmaXggZm9yIFNTX0lDT04gY29udHJvbHMuCgoJKiBbaWYxNjMyL0ltYWtlZmlsZV0KCUZpeGVkIGNhbGwubyBkZXBlbmRlbmNpZXMuCgoJKiBbb2JqZWN0cy9jbGlwcGluZy5jXSBbb2JqZWN0cy9kYy5jXQoJRml4ZWQgdmlzaWJsZSByZWdpb24gaGFuZGxpbmcuIGhWaXNSZ24gaXMgYWx3YXlzIG5vbi1udWxsIG5vdy4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJQnVnIGZpeCBpbiBHZXREQ0V4IGZvciBDU19PV05EQyB3aW5kb3dzLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3BhaW50aW5nLmNdCglGaXhlcyB0byBpY29uIHdpbmRvdyBkcmF3aW5nLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglBIGZldyBmaXhlcyBpbiBTZXRXaW5kb3dQb3MoKS4KClN1biBPY3QgMzAgMTI6NTA6MjQgMTk5NCAgTWljaGFlbCBQYXRyYSAgPG1pY2t5QG1hcmllLnBoeXNpay50dS1iZXJsaW4uZGU+CgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUJpdEJsdCgpOiBCaXRCbHQgaXMgbm93IGFibGUgdG8gaGFuZGxlIGFueSByYXN0ZXIgb3BlcmF0aW9uLiBJZgoJdGhlIHJlcXVlc3QgY2FuJ3QgYmUgcGFzc2VkIHRvIFhXaW5kb3dzIGRpcmVjdGx5LCBpdCdzIHF1aXRlCglzbG93LCB0aG91Z2guCgoJKiBbKi8qLmNdCgkgIFttaXNjL21haW4uY10KCUltcHJvdmVtZW50cyBvZiB0aGUgc3lzdGVtIGZvciBoYW5kbGluZyBkZWJ1ZyBtZXNzYWdlcy4gT3B0aW9ucyBhcmUKCW5vdyBhbHNvIGxvYWRlZCBmcm9tIC91c3IvbGliL1gxMS9hcHAtZGVmYXVsdHMvV2luZSAoaW5zZXJ0CgkqZGVidWdvcHRpb25zOiAreHh4IHRoZXJlIGlmIHlvdSB3YW50IHRvIGhhdmUgdHVybiBtZXNzYWdlcyB4eHggb24pLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCURlc3Ryb3lNZW51KCk6IFRoZSB3aG9sZSB3aW5kb3cgd29uJ3QgYmUgZGVzdHJveWVkIGFzIGEgc2lkZWVmZmVjdAoJYW55IGxvbmdlci4KCgkqIFttaXNjL2ZpbGUuY10KCU9wZW5GaWxlKCk6IEZpeGVkIGJ1ZyBpbiBzZWFyY2hpbmcgaW4gc3lzdGVtL3dpbmRvdy1kaXJlY3RvcnkuCgpTdW4gT2N0IDMwIDEyOjI1OjUzIDE5OTQgIEppbW15IFRpcnRhd2FuZ3NhIDxqMHQyNTI3QHRhbTIwMDAudGFtdS5lZHU+CgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglCdWcgZml4IGZvciB3aW5kb3cgcmVsYXRlZCBzdHJ1Y3R1cmVzLgoJRENCIGFuZCBDT01TVEFUIGFyZSBhZmZlY3RlZC4gVGhleSBtdXN0IGJlIHBhY2tlZC4KCgkqIFttaXNjL2NvbW0uY10KCUJ1ZyBmaXggZm9yIENPTSBwb3J0czoKCURpYWwgYW5kIGRpYWxvZyB3aW5kb3cgaW4gdGVybWluYWwuZXhlIG5vdyB3b3Jrcy4KCU5vbiBzZXF1ZW50aWFsIENPTSBhc3NpZ25tZW50cyBpbiB3aW5lLmNvbmYgc2hvdWxkIG5vdCBicmVhayBub3cuCglCYXVkcmF0ZSBjYW4gYmUgc3BlY2lmaWVkIGluIHdpbmUuY29uZiB0byBvdmVyY29tZSBiYXVkcmF0ZSBsaW1pdGF0aW9uCglpbiBtc3dpbmRvdy4gU2VlIHNhbXBsZSB3aW5lLmluaQoKCSogW2luY2x1ZGUvY29tbS5oXQoJYWRkIGJhdWRyYXRlIGZpZWxkIHRvIERvc0RldmljZVN0cnVjdHJlCgoJKiBbb2JqZWN0L2ZvbnQuY10KCUJ1ZyBmaXggZm9yIGZvbnQgYXNzaWdubWVudC4KCVVzZSBwYWlycyBvZiBmb3VuZHJ5IGFuZCBmYW1pbHkgZm9udG5hbWVzIGluIFgxMSB0byBjb3JyZXNwb25kIHdpdGgKCXdpbmRvdydzIGZvbnRzLgoJUHV0IGZvbnQgYXNzaWdubWVudCBpbmkgd2luZS5pbmkuCgoJKiBbd2luZS5pbmldCglBZGRpbmcgb3B0aW9uYWwgYmF1ZHJhdGUgYWZ0ZXIgcG9ydCBuYW1lIGluICJzZXJpYWxwb3J0cyIgc2VjdGlvbgoJQWRkIG5ldyBzZWN0aW9uLCAiZm9udHMiLgoJImRlZmF1bHQiIGlzIHNwZWNpYWwga2V5IGluICJmb250cyIgdG8gbWF0Y2ggYW55IHVubWF0Y2ggd2luZG93IGZvbnQuCgpPY3QgMjksIDk0IChuZXcgYWRkcmVzcykgd2luZUB0cmdjb3JwLm1rc2luZm8ucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbaWYxNjMyL3JlbGF5LmNdCgkqIFtpZjE2MzIvY29tbWRsZy5zcGVjXSAJTmV3IGZpbGUuCgkqIFttaXNjL2NvbW1kbGcuY10gCQkJTmV3IGZpbGUuCgkqIFtpbmNsdWRlL2NvbW1kbGcuaF0gCQlOZXcgZmlsZS4KCUJlZ2luIG9mIGFuIGVtdWxhdGVkIENPTU1ETEcgRExMLCBidWlsdC1pbiBmb3Igbm93LgoJKEJUVywgaWYgeW91IHdhbnQgdG8gc3dpdGNoIGJldHdlZW4gYnVpbHQtaW4gJiAxNmJpdHMgQ29tbURsZywgb25seSAKCXRoaW5nIHlvdSBuZWVkIHRvIGRvIGlzIHRvIHB1dCB0aGUgcmVhbC9kdW1teSBuYW1lIGluIGZpbGUgcmVsYXkuYykKCgkqIFtjb250cm9scy9zY3JvbGwuY10KCSogW2NvbnRyb2xzL2NvbWJvLmNdCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglGZXcgYnVnIGZpeGVzIGFuZC9vciBjb3NtZXRpYy4KCgkqIFttaXNjL2F1ZGlvLmNdCgkqIFttaXNjL21tYXV4LmNdCglidWcgZml4ZXMgYW5kIGZsYWdzIHJldHVybmVkIHRvIGVtdWxhdGUgU0IxNi4KCgkqIFttaXNjL21pZGkuY10gCQkJTmV3IGZpbGUuCglza2VsZXRvbiBmb3IgJ01pZGknIE1NU1lTVEVNICYgTUNJIGRyaXZlci4KCgkqIFttaXNjL21jaWFuaW0uY10gCQkJTmV3IGZpbGUuCglza2VsZXRvbiBmb3IgJ0FuaW1hdGlvbjEnIE1DSSBkcml2ZXIuCgoJKiBbd2luZG93cy93aW4uY10KCUFkZCBuZXcgc3R1YiBmb3IgR2V0TGFzdEFjdGl2ZVdpbmRvdygpLgoKVHVlIE9jdCAyNSAwOToxNzoyNSAxOTk0ICBPbGFmIEZsZWJiZSAgKGZsZWJiZUB0YXQucGh5c2lrLnVuaS10dWViaW5nZW4uZGUpCgoJKiBbaWYxNjMyL2NhbGwuU10gW3Rvb2xzL2J1aWxkLmNdCiAgICAgICAgICAgU3VwcG9ydCBmb3IgRUxGIGZvcm1hdC4gKE5vdCBjb21wbGV0ZSkKClN1biBPY3QgMjMgMDA6NTE6NTAgMTk5NCAgUGF1bCBGYWxzdGFkICAocGZAem9vZikKCgkqIFtpZjE2MzIvdXNlci5zcGVjXQoJQWRkIHN0dWJzIGZvciBBcnJhbmdlSWNvbmljV2luZG93cygpLCBldGMuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJQWRkIElzQmFkKlB0cigpIGZ1bmN0aW9ucy4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglBZGQgdGVzdF9tZW1vcnkoKSwgZm9yIHVzZSB3aXRoIElzQmFkKlB0cigpLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglBZGQgc3R1YnMgZm9yIFRpbGVDaGlsZFdpbmRvd3MoKSwgZXRjLgoKCSogW3dpbmRvd3Mvd2luLmNdCglJc1dpbmRvdygpIHNob3VsZG4ndCBjcmFzaCBpZiBpdCdzIGdpdmVuIGEgYmFkIGhhbmRsZS4KCUFkZCBzdHViIGZvciBHZXRMYXN0QWN0aXZlUG9wdXAoKS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglJbXBsZW1lbnQgdGhlIElzQmFkKlB0cigpIGZ1bmN0aW9ucy4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglSZXR1cm4gdGhlIGZ1bGwgbG9uZ3dvcmQgb2YgdGhlIGl0ZW0gZGF0YSBpbiBMQl9HRVRJVEVNREFUQS4KCgkqIFtjb250cm9scy9lZGl0LmNdCglEb24ndCBsZXQgdGhlIHVzZXIgc2VsZWN0IGFuIGFyZWEgcGFzdCB0aGUgZW5kIG9mIHRoZSB0ZXh0LgoKCSogW29iamVjdHMvdGV4dC5jXQoJSW4gRHJhd1RleHQoKSwgdGhlIGNvZGUgdG8gZGVsZXRlIGNybGZzIGFsc28gcmVtb3ZlZCBtdWx0aXBsZQoJY29uc2VjdXRpdmUgbmV3bGluZXMuICBBbHNvLCB1c2luZyBEVF9DQUxDUkVDVCBkaWRuJ3QgcmV0dXJuCgl0aGUgcmlnaHQgaGVpZ2h0LCBhbmQgdGhlIHdpZHRoIHdhc24ndCByZXR1cm5lZCBhdCBhbGwuCglUaGlzIGNhdXNlZCBNZXNzYWdlQm94ZXMgdG8gYmUgbWlzc2luZyBtdWNoIG9mIHRoZWlyIHRleHQuCgoJKiBbd2luZG93cy9zY3JvbGwuY10KCVNjcm9sbFdpbmRvd1tFeF0gZGlkbid0IHdvcmsgcmlnaHQgd2l0aCBudWxsIExQUkVDVCBhcmd1bWVudHMuCgpGcmkgT2N0IDIxIDIxOjQ3OjE5IDE5OTQgIFBhdWwgRmFsc3RhZCAgKHBmQHpvb2YuY3RzLmNvbSkKCgkqIFttaXNjZW11L2ludDIxLmNdCglGaXhlZCBpbnQyMSAweDQyIGhhbmRsZXIgdG8gcHJvcGVybHkgYXNzZW1ibGUgMzItYml0IHNlZWsgcHRyLgoKCSogW21pc2MvcHJvcGVydHkuY10KCUZpeGVkIGludmVydGVkIGxvZ2ljIGluIEVudW1Qcm9wcygpLCBhbmQgY2hhbmdlZCBDYWxsQmFjazE2KCkKCWNhbGwgdG8gdXNlIG5ldyBhcmcgZm9ybWF0LgoKCSogW3dpbmRvd3Mvd2luLmNdCglGaXhlZCBDYWxsQmFjazE2KCkgY2FsbCBpbiBFbnVtW0NoaWxkXVdpbmRvd3MgdG8gdXNlIG5ldyBhcmcKCWZvcm1hdDsgdGhpcyBmaXhlcyBjcmFzaGVzIGluIGVudW0gcHJvY2VkdXJlcy4KCldlZCBPY3QgMTkgMjE6MzA6MDAgUERUIDE5OTQJCW1hcnRpbkBjcy5jc3VmcmVzbm8uZWR1CgoJKiBbbWlzYy9jbGlwYm9hcmQuY10KCSAgW3dpbmRvd3MvZXZlbnQuY10KCSAgW3dpbmRvd3MvbWVzc2FnZS5jXQoJQWRkZWQgY3V0IGFuZCBwYXN0ZSBiZXR3ZWVuIFdpbmUgYW5kIG90aGVyIFggY2xpZW50cyB2aWEKCXRoZSBQUklNQVJZIHNlbGVjdGlvbi4gVGV4dCBvbmx5IHRoaXMgdGltZS4KCgkqIFtjb250cm9scy9lZGl0LmNdCglFRElUX0xpbmVMZW5ndGgsIEVESVRfVGV4dExpbmUgcmV0dXJuIDAgZm9yIGxpbmVzIGFmdGVyIGxhc3Qgb25lLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglTZW5kIFdNX1NZU0NPTU1BTkQgdG8gb3ZlcmxhcHBlZCBhbmNlc3RvciB3aW5kb3csIAoJbm90IHRoZSByZWNlaXZlciBvZiBXTV9TWVNLRVlET1dOCgpTYXQgT2N0IDIyIDE1OjAxOjAyIDE5OTQgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAYnJhZGZvcmQuYWMudWs+CgogICAgICAgICogW2NvbnRyb2xzL2VkaXQuY10KCUNsaWVudFdpZHRoKCkvQ2xpZW50SGVpZ2h0KCkgbWFjcm9zOiByZXR1cm4gMCBpZiBzaXplIHdvdWxkCgliZSBuZWdhdGl2ZQoJRURJVF9TdHJMZW5ndGgoKTogdGFrZXMgdW5zaWduZWQgY2hhciogaW5zdGVhZCBvZiBjaGFyKgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUxpc3RCb3hXbmRQcm9jKCk6IGluICJjYXNlIFdNX01PVVNFTU9WRSIgLSBzZXQgbHBobCBhdCBzdGFydCBvZgoJY2FzZSBpbnN0ZWFkIG9mIGluIGVhY2ggcGxhY2UgcmVxdWlyZWQgKGl0IHdhcyBvbWl0dGVkIGluCglzb21lIHBsYWNlcyBjYXVzaW5nIHByb2JsZW1zISkKCgkqIFtjb250cm9scy9tZW51LmNdCglNRU5VX0NhbGNJdGVtU2l6ZSgpOiBkb24ndCB0cnkgdG8gZmluZCBzaXplIG9mIGEgdGV4dCBpdGVtCglpZiB0aGUgcG9pbnRlciBpcyBOVUxMCgoJKiBbaW5jbHVkZS9oZWFwLmhdCglhZGRlZCBkZWZpbml0aW9uIG9mIEhFQVBfTG9jYWxJbml0KCkKCgkqIFtpbmNsdWRlL21zZG9zLmhdCglyZW1vdmVkIGJ1Z2d5IHBvaW50ZXIoKSBtYWNybyAodXNlIFNBRkVNQUtFUFRSKCkgZnJvbSBzZWdtZW0uaAoJaW5zdGVhZCkKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUlQQ0NvcHlTZWxlY3RvcigpOiBhZGRlZCBtaXNzaW5nIGZsYWdzIHRvIHNobWdldCgpIGNhbGwKCT8gZG9lcyB0aGlzIGJyZWFrIGxpbnV4IC0gSSBhZGRlZCB0aGVzZSBmbGFncyBpbiBhIHByZXZpb3VzCglwYXRjaCBidXQgdGhleSB3ZXJlIG1pc3NpbmcgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVsZWFzZSA/CgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJd2luX2ZhdWx0KCk6IGFkZGVkIG1pc3NpbmcgZGVmaW5pdGlvbnMgb2YgaSwgZHVtcCBmb3IgdGhvc2UKCW5vdCBydW5uaW5nIE5ldEJTRCBvciBsaW51eAoKCSogW21pc2MvZG9zX2ZzLmNdCglET1NfR2V0Q3VycmVudERpcigpOiBtYWRlIHRlbXBbXSBzdGF0aWMgc28gaXQgY2FuIGJlIHNhZmVseQoJcmV0dXJuZWQKCgkqIFttaXNjZW11L2ludDIxLmMsaW50MjUuYyxpbnQyNi5jXQoJQ2hhbmdlZCBhbGwgaW52b2NhdGlvbnMgb2YgcG9pbnRlcigpIHRvIFNBRkVNQUtFUFRSKCkuIEluY2x1ZGVkCglzZWdtZW0uaCB3aGVyZSBuZWNlc3NhcnkuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUNyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW0oKTogQ2hhbmdlZCBIRUFQX0luaXQoKSBjYWxsIHRvIAoJSEVBUF9Mb2NhbEluaXQoKSwgcmVtb3ZlZCByZWR1bmRhbnQgdmFyaWFibGVzCgpTYXQgT2N0IDIyIDAwOjI5OjQxIE1FVCAxOTk0CQkgIERhZyBBc2hlaW0gKGRhc2hAaWZpLnVpby5ubykKCgkqIFtsb2FkZXIvbGlicmFyeS5jXSBbbG9hZGVyL21haW4uY10gW2xvYWRlci9uZV9pbWFnZS5jXQoJICBbbWlzYy9leGVjLmNdIFttaXNjZW11L2ludDEwLmNdIFttaXNjZW11L2ludDIxLmNdCgkgIFtvYmplY3RzL2JpdGJsdC5jXSBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJUmV3cml0dGVuIG1vcmUgcHJpbnRmJ3MgdG8gdXNlIHRoZSBuZXcgZGVidWdnaW5nIHN5c3RlbSwgYW5kCgltYWRlIHdpbmUgbGVzcyB2ZXJib3NlIHBlciBkZWZhdWx0LiBVc2UgIi1kZWJ1Z21zZyArbW9kdWxlIgoJdG8gZ2V0IChhbG1vc3QpIHRoZSBzYW1lIGJlaGF2aW9yIGFzIGJlZm9yZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE9jdCAxNiAxMzoyOTowNyAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglJbXBsZW1lbnRlZCBXTV9HRVRETEdDT0RFLCBXTV9TRVRGT05ULCBCTV9TRVRTVFlMRSwgQk1fU0VUQ0hFQ0ssCglCTV9TRVRTVEFURS4KCUltcGxlbWVudGVkIGRlZmF1bHQgYnV0dG9uIHBhaW50aW5nLgoJT3B0aW1pc2VkIHJlZHJhd2luZy4KCUZpeGVkIG93bmVyLWRyYXcgYnV0dG9ucy4KCgkqIFtjb250cm9scy9zdGF0aWMuY10KCUltcGxlbWVudGVkIFdNX1NFVEZPTlQuCglBIGZldyBvcHRpbWlzYXRpb25zIGluIHBhaW50aW5nIGNvZGUuCglCdWcgZml4IGZvciBTU19TSU1QTEUgY29udHJvbHMuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglQcmVsaW1pbmFyeSBHZXRDb2RlSGFuZGxlKCkuCgoJKiBbaWYxNjMyL2dkaS5zcGVjXQoJQ2hhbmdlZCAncGFzY2FsJyB0byAncGFzY2FsMTYnIGV2ZXJ5d2hlcmUgaXQncyBuZWVkZWQuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglGaXhlZCBhIGZldyBkYXRhIHN0cnVjdHVyZXMuCgoJKiBbbWVtb3J5L2hlYXAuY10KCUJ1ZyBmaXggaW4gSEVBUF9SZUFsbG9jKCkuCgoJKiBbbWlzYy9jdXJzb3IuY10KCUZpeGVkIFNldEN1cnNvcigpLgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglGaXhlZCBQYXRCbHQoKSB3aGVuIHVzaW5nIEJMQUNLTkVTUyBvciBXSElURU5FU1MgY29kZXMuCgoJKiBbb2JqZWN0cy9mb250LmNdCglCZXR0ZXIgZm9udCBtYXBwaW5nIGNvZGUuCglJbXBsZW1lbnRlZCBHZXRUZXh0RmFjZSgpLgoKCSogW29iamVjdHMvcmVnaW9uLmNdCglCdWcgZml4IGluIFJFR0lPTl9NYWtlUGl4bWFwKCkuCglGYXN0ZXIgcmVnaW9uIGNvcHlpbmcuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglJbXBsZW1lbnRlZCBFeHRUZXh0T3V0KCkuCglJbXBsZW1lbnRlZCBEVF9OT0NMSVAgc3R5bGUgZm9yIERyYXdUZXh0KCkuCgoJKiBbd2luZG93cy9kYy5jXQoJRnJlZSB0aGUgYml0bWFwIHdoZW4gZGVsZXRpbmcgYSBtZW1vcnkgREMuCgoJKiBbd2luZG93cy9kY2UuY10KCUFkZGVkIHN1cHBvcnQgZm9yIHdpbmRvd3MgdGhhdCBoYXZlIG5vIGFzc29jaWF0ZWQgWCB3aW5kb3cuCglJbXBsZW1lbnRlZCBEQ1hfQ0xJUFNJQkxJTkdTIGFuZCBEQ1hfUEFSRU5UQ0xJUCBpbiBHZXREQ0V4KCkuCgoJKiBbd2luZG93cy9kZWZkbGcuY10KCUltcGxlbWVudGVkIGRlZmF1bHQgcHVzaCBidXR0b24gaGFuZGxpbmcgYW5kIERNX1NFVERFRklELgoJSW1wbGVtZW50ZWQgV01fTkVYVERMR0NUTC4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJSW1wbGVtZW50ZWQgZGVmYXVsdCBwdXNoIGJ1dHRvbiBoYW5kbGluZy4KCUJlZ2lubmluZyBvZiBhIGtleWJvYXJkIGludGVyZmFjZSBpbiBkaWFsb2dzCgkoZG9lcyBub3QgcmVhbGx5IHdvcmsgeWV0KS4KCUZpeGVkIGRpYWxvZ3MgdGhhdCB1c2UgYSBzcGVjaWFsIGZvbnQuCgoJKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9mb2N1cy5jXQoJQWRkZWQgc3VwcG9ydCBmb3Igbm9uLVggd2luZG93cy4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglSZXdyaXR0ZW4gRmxvb2RGaWxsKCkgYW5kIGltcGxlbWVudGVkIEV4dEZsb29kRmlsbCgpLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJQ2xlYW5lciBoYXJkd2FyZSBtZXNzYWdlcyBhbmQgWCBldmVudHMgaGFuZGxpbmcuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10KCUltcGxlbWVudGVkIFdNX1NFVFJFRFJBVy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJT25seSBjcmVhdGUgYW4gWCB3aW5kb3cgZm9yIHRvcC1sZXZlbCB3aW5kb3dzLCBvciBmb3IgdGhlIGRlc2t0b3AuCglDaGlsZCB3aW5kb3dzIG5vdyB1c2UgdGhlaXIgcGFyZW50J3MgZHJhd2FibGUuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUJlZ2lubmluZyBvZiBzdXBwb3J0IGZvciBub24tWCB3aW5kb3dzIChzdGlsbCBzb21ld2hhdCBicm9rZW4pLgoJSW1wbGVtZW50ZWQgKkRlZmVyV2luZG93UG9zKCkuCgoJKiBbKi9JbWFrZWZpbGVdCglDbGVhbmVkIHVwIHNvbWUgSW1ha2VmaWxlcy4KCU1vdmVkIGRjLmMgZnJvbSB3aW5kb3dzLyB0byBvYmplY3RzLy4KCU1vdmVkIGN1cnNvci5jIGZyb20gbWlzYy8gdG8gd2luZG93cy8uCgpTdW4gT2N0IDE2IDEyOjIxOjUyIDE5OTQgIE1pY2hhZWwgUGF0cmEgPG1pY2t5QG1hcmllLnBoeXNpay50dS1iZXJsaW4uZDQwMC5kZT4KCgkqIFtpbmNsdWRlL2RlYnVnLmhdCgkgIFtpbmNsdWRlL3N0ZGRlYnVnLmhdCgkgIFsqLyouY10KICAgICAgICBSZXdyaXR0ZW4gYWxsIHRoZSBjYWxscyB0byBwcmludGYgZm9yIGRpc3BsYXlpbmcgZGVidWctaW5mb3JtYXRpb24KICAgICAgICAobWVzc2FnZXMgbGlrZSAiTG9hZEltYWdlOiBsb2FkaW5nIFNPTCAoU09MLkVYRSkiIGV0Yy4pIAogICAgICAgIEFkZGVkIG9wdGlvbiAiLWRlYnVnbXNnIiB0byBXaW5lLiBFeGFtcGxlOiAiLWRlYnVnbXNnICthbGwiIHdpbGwgdHVybgogICAgICAgIGFsbCB0aGVzZSBtZXNzYWdlcyBvbiwgIi1kZWJ1Z21zZyAtZGxsIiB3aWxsIHR1cm4gYWxsIG1lc3NhZ2VzIAoJY29uY2VybmluZyBETExzIG9mZi4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQWRkZWQgc29tZSBoYW5kbGluZyBmb3IgY29tYm8gY29udHJvbHMgd2l0aCBvd25lcmRyYXctc3R5bGVzCiAgICAgICAgKGp1c3QgY3JlYXRpbmcgYW5kIHBhc3NpbmcgdGhlIG5lY2Vzc2FyeSBtZXNzYWdlcyB0byB0aGUgCgljb3JyZXNwb25kaW5nIGxpc3Rib3ggY29udHJvbDsgdGhlIGVkaXQtY29udHJvbCBuZWVkcyB0byBiZQoJcmVwbGFjZWQgd2l0aCBzb21ldGhpbmcgZWxzZSkuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJICBbd2luZG93cy9kaWFsb2cuY10KCUFkZGVkIHN1cHBvcnQgZm9yIHVzZSBvZiBnbG9iYWwgaGVhcCBtZW1vcnkgaW4gZGlhbG9ncyB3aXRoIAoJZWRpdCBjb250cm9scy4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglBZGRlZCBzdXBwb3J0IGZvciBpdGVtIGRhdGEuCglMaXN0Qm94SW5zZXJ0U3RyaW5nKCk6IEZpeGVkIGJ1ZyBmb3IgZWxlbWVudHMgd2hpY2ggYXJlIG5vdCBpbnNlcnRlZAoJYWZ0ZXIgdGhlIGN1cnJlbnRseSBsYXN0IGVsZW1lbnQuCgkKCSogW21pc2MvZG9zX2ZzLmNdCgkgIFttaXNjZW11L2ludDIxLmNdCglET1NfVmFsaWREaXJlY3RvcnkoKTogQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBzdHJpbmcgaXMgaW4gZmFjdCB0aGUKCXZhbGlkIG5hbWUgb2YgYSBkaXJlY3RvcnkuCgpTYXQgT2N0IDE1IDE3OjM1OjAwIFBEVCAxOTk0CQk8bWFydGluQGNzLmNzdWZyZXNuby5lZHU+CgoJKiBbSW1ha2VmaWxlXQoJZ2VuZXJhdGUgd2luZS5zeW0gYWZ0ZXIgY3JlYXRpbmcgd2luZQoKCSogW2RlYnVnZ2VyL2RiZy55XQoJbG9hZCAid2luZS5zeW0iIHdoZW4gZW50ZXJpbmcgZGVidWdnZXIKCgkqIFtkZWJ1Z2dlci9pbmZvLmNdCglzeW1ib2xpYyBiYWNrdHJhY2UgZm9yIDMyLWJpdCBzdGFjay4gQnJlYWtzIDE2LWJpdCBidC4KClN1biBTZXAgIDI1IDEyOjAwOjAwIFBEVCAxOTk0ICAgPG1hcnRpbkBvc2lyaXMuY3MuY3N1ZnJlc25vLmVkdT4KCgkqIFtyYy9yYy55XSBbcmMvcmMuaF0gW3JjL3JjLmxdIFtyYy93aW5lcmMuY10KCUZpbGVzIGNyZWF0ZWQKClN1biBTZXAgMTggMTE6MDQ6NDUgTUVUIERTVCAxOTk0ICAgICAgICAgIERhZyBBc2hlaW0gKGRhc2hAaWZpLnVpby5ubykKCgkqIFttaXNjL3NweS5jXQoJRXhjbHVkZSBhbmQgSW5jbHVkZSBubyBsb25nZXIgcmVxdWlyZXMgYSB0ZXJtaW5hdGluZyAnOycgdG8KCXJlZ2lzdGVyIHRoZSBsYXN0IGNvbXBvbmVudC4KClRodSBTZXAgMTUgMjM6MTA6MDkgTUVUIERTVCAxOTk0ICAgICAgICAgIERhZyBBc2hlaW0gKGRhc2hAaWZpLnVpby5ubykKCgkqIFtDb25maWd1cmVdCglSZXdyb3RlIG11Y2ggb2YgaXQuICBBZGRlZCBjYXBhYmlsaXR5IHRvIGdlbmVyYXRlIGEgd2luZS5pbmkKCWZpbGUuICBDb21tZW50ZWQgb3V0IHRoZSBwcm9jZXNzb3IgZW11bGF0b3Igb3B0aW9ucyB1bnRpbCB0aGF0CgliZWNvbWVzIGludGVyZXN0aW5nLiAgR2l2ZXMgYSB3YXJuaW5nIGlmIGl0IHNlZXMgYW55ICoucmVqCglmaWxlcy4gIEkgaG9wZSBJIGhhdmVuJ3QgYXNzdW1lZCB0byBtdWNoIGFib3V0IHRoZSBzaGVsbC9PUyBzbwoJdGhhdCBpdCBicmVha3MgdW5kZXIgKkJTRC4KCgkqIFttaXNjL2Rvc19mcy5jXQoJUmVtb3ZlZC9jaGFuZ2VkIGNhbGxzIHRvIFRvVW5peCgpICh3aGljaCBjYWxscyB0b2xvd2VyKCkpIHNvCgl0aGF0IHRoZSBwYXJ0IG9mIHRoZSBwYXRobmFtZSB3aGljaCBjb3JyZXNwb25kIHdpdGggdGhlIGRyaXZlCglsZXR0ZXIgb24gRE9TIG5vIGxvbmdlciB3aWxsIGJlIG1hcHBlZCB0byBsb3dlcmNhc2UuICBUaGlzCgltZWFucyB0aGF0IGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBoYXZlIHVwcGVyY2FzZSBsZXR0ZXJzIGluCgl0aGUgW2RyaXZlc10gc2VjdGlvbiBvZiB3aW5lLmluaS4KCgkqIFtMSUNFTlNFXQoJQ29zbWV0aWMgY2hhbmdlcyBzbyB0aGF0IGl0IGRpc3BsYXlzIGJldHRlciBpbiB0aGUgd2luZG93IHlvdQoJZ2V0IGZyb20gcHJlc3NpbmcgIkNyZWRpdF9MaWNlbnNlIiBpbiB0aGUgIkFib3V0IFdJTkUiIHdpbmRvdy4KClN1biBBdWcgMjEgMjE6MTI6MDYgTUVUIERTVCAxOTk0CTxlcmlrQHhzNGFsbC5ubD4KCgkqIFtjb250cm9scy9tZW51LmNdCglMb2FkTWVudSgpIG1vdmVkIHRvIGxvYWRlci9yZXNvdXJjZS5jLgoKCSogW21pc2MvbWFpbi5jXQoJQWRkZWQgc3R1YiBmb3IgRmlsZUNEUigpLgoKCSogW2luY2x1ZGUvcGVleGUuaF0KCUFkZGVkLCBmcm9tIEVyaWMncyBwZS10ZXN0LgoKCSogW2luY2x1ZGUvcmVzb3VyY2UuaF0KCUFkZGVkLgoKCSogW2xvYWRlci9yZXNvdXJjZXMuY10KCVJlbW92ZWQgZHVwbGljYXRlZCBjb2RlIGluICpSZXNvdXJjZSgpIGZ1bmN0aW9ucy4KCU1vdmVkIE5FLXByb2dyYW0gc3BlY2lmaWMgZnVuY3Rpb25zIGludG8gbmVfaW1hZ2UuYy4KCU1vdmVkIE5FLWZpbGVmb3JtYXQgZnVuY3Rpb25zIHRvIG5lX3Jlc291cmNlLmMuCgoJKiBbcGVfaW1hZ2UuY10gW3BlX3Jlc291cmNlLmNdCglBZGRlZC4gTm90aGluZyBpbXBsZW1lbnRlZCB0byBydW4gUEUtZXhlY3V0YWJsZXMsIHJlc291cmNlCglsb2FkaW5nIG9ubHkuCgoJKiBbbWlzYy9maWxlLmNdCglDaGFuZ2VkIE9wZW5GaWxlKCkgdG8gdXNlIG1hY3Jvcy4KCgkqIFttaXNjL3NoZWxsLmNdCglBZGRlZCBOVUxMLXB0ciBjaGVja3MgdG8gU2hlbGxBYm91dCgpLgoKCSogW21pc2NlbXUvaW50MjEuY10KCUZpeGVkIGEgZmV3IHR5cG9zLgoKCSogW21pc2NlbXUva2VybmVsLmNdCglBZGRlZCBfREkgPSBfRFMsIHRvIHB1dCB0aGUgY2FsbGVyJ3MgaW5zdGFuY2UgaW4gREkuIERvZXNuJ3QKCXdvcmsgcHJvcGVybHkgaWYgY2FsbGVyIGNoYW5nZWQgRFMgOi0oCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBBdWcgMjUgMTU6MjQ6MzYgRURUIDE5OTQgICAgICAgICAgICA8anJpY2hhcmRAY3MudW1sLmVkdT4KCiAgICAgICAgKiBbaW5jbHVkZS93aW4uaF0KICAgICAgICBSZW1vdmVkIHNlcGVyYXRlIFggd2luZG93IGZvciBpY29uLCBhZGRlZCBpY29uIHdpZHRoLGhlaWdodC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUNvbW1lbnRlZCBvdXQgdGhlIG9sZCBTV194eHggZW11bSBhbmQgYWRkZWQgZGVmaW5lcyBzaW5jZQoJdGhleSBhcmVuJ3QgZW51bWVyYXRlZC4KCgkqIFt3aW5kb3dzL2RjZS5jXQogICAgICAgIFJlbW92ZWQgc29tZSBvbGRlciBJc0ljb25pYyBjaGVja3MgZnJvbSBHZXREQ0V4KCksIGZ1bmN0aW9uYWxpdHkKICAgICAgICBpcyBub3cgaW4gbm9uY2xpZW50IGFuZCBnZW5lcmljIHdpbmUgd2luZG93IGhhbmRsaW5nIGNvZGUuCiAgICAgICAgTG90cyBvZiB0aGFua3MgdG8gQWxleGFuZHJlIEp1bGxpYXJkIGFsbCB0aGUgaGludHMgYW5kCiAgICAgICAgaGVscC4uLgoKICAgICAgICAqIFt3aW5kb3dzL2RlZnduZC5jXQogICAgICAgIFJlbW92ZWQgY2FsbCB0byBOQ19IYW5kbGVOQ1BhaW50SWNvbigpIHVuZGVyIGNhc2UgV01fUEFJTlRJQ09OLAogICAgICAgIFdNX1BBSU5USUNPTiBub3cgY2FsbHMgTkNfSGFuZGxlTkNQYWludC4gIAoKICAgICAgICAqIFt3aW5kb3dzL2V2ZW50LmNdCiAgICAgICAgUmVtb3ZlZCBJc0ljb25pYyBjaGVja3MuCgogICAgICAgICogW3dpbmRvd3MvaWNvbi5jXQogICAgICAgIFJlbW92ZWQgZXZlcnl0aGluZyBpbiB0aGlzIGZpbGUgZm9yIG5vdy4uLiBjb3VsZCBiZSB1c2VkIGxhdGVyLgogICAgICAgIEljb24gZnVuY3Rpb25hbGl0eSBpcyBub3cgaGFuZGxlZCBieSB0aGUgZ2VuZXJpYyB3aW5lIHdpbmRvd3MKICAgICAgICBoYW5kbGluZyBmdW5jdGlvbnMuCiAgICAgICAgCiAgICAgICAgKiBbd2luZG93cy9tZGkuY10KICAgICAgICBBZGRlZCBhIFNob3dXaW5kb3cgaW4gTURJUmVzdG9yZUNoaWxkKCkuICBNREkgY2hpbGQgd2luZG93cyBub3cKICAgICAgICBzaG93IHVwIHdoZW4gZGVpY29uaWZpZWQuICBSZW1vdmVkIElzSWNvbmljIGNoZWNrcy4KCiAgICAgICAgKiBbd2luZG93cy9tZXNzYWdlLmNdCiAgICAgICAgUmVtb3ZlZCBvbGQgaWNvbiByb3V0aW5lcyBmcm9tIGhhcmR3YXJlX2V2ZW50KCkuCgogICAgICAgICogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCiAgICAgICAgQ2hhbmdlZCBOQ19IYW5kbGVOQ0NhbGNTaXplKCkgc28gaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHNpemUKICAgICAgICBvZiBhbiBpY29uIHdpbmRvdy4gIE1hZGUgTkNfSW50ZXJuYWxOQ0hpdFRlc3QoKSBvbiBhbiBJY29uaWMKICAgICAgICB3aW5kb3cgYWx3YXlzIHJldHVybiBIVENBUFRJT04uICBNYWRlIE5DX0hhbmRsZU5DTEJ1dHRvbkRibENsaygpCiAgICAgICAgb24gYW4gSWNvbmljIHdpbmRvdyBhbHdheXMgc2VuZCBhIFNDX1JFU1RPUkUgbWVzc2FnZS4KCiAgICAgICAgKiBbd2luZG93cy9wYWludGluZy5jXQogICAgICAgIENoYW5nZWQgUmVkcmF3V2luZG93KCkgc28gaXQgZG9lc24ndCByZWRyYXcgYW4gaWNvbmljIHdpbmRvdwogICAgICAgIHVubGVzcyBpdCBoYXMgdG8gKG5vIGljb24gZm9yIHRoaXMgY2xhc3MpLgogICAgICAgIAogICAgICAgICogW3dpbmRvd3Mvd2luLmNdCiAgICAgICAgUmVtb3ZlZCBjcmVhdGlvbiBvZiBzZXBlcmF0ZSBpY29uIHdpbmRvdyBmcm9tIENyZWF0ZVdpbmRvd0V4KCkuCiAgICAgICAgCiAgICAgICAgKiBbd2luZG93cy93aW5wb3MuY10KICAgICAgICBBZGRlZCBzYXZpbmcgYW5kIHJlc3RvcmluZyBvZiB3aW5kb3cgcmVjdGFuZ2xlIGR1cmluZwogICAgICAgIGljb25pZmljYXRpb24vZGVpY29uaWZpY2F0aW9uIHRvIFNob3dXaW5kb3coKS4gIEFkZGVkCglmdW5jdGlvbnMgdG8gcmVjdXJzaXZlbHkgaGlkZSBhbmQgc2hvdyBjaGlsZHJlbi4uLiBjYWxsZWQKCWJ5IFNob3dXaW5kb3cgZHVyaW5nIGljb25pZmljYXRpb24vZGVpY29uaWZpY2F0aW9uLgoKU2F0LCAyNyBBdWcgMTk5NCAxODo0NzozNCArMDEwMCAoTUVUIERTVCkgIG1pY2t5QG1hcmllLnBoeXNpay50dS1iZXJsaW4uZGUgKE1pY2hhZWwgUGF0cmEpCgogICAgICAgICogW3dpbmRvd3MvbWVzc2FnZS5jXQogICAgICAgIFdhaXRNZXNzYWdlKCk6IEZpeGVkIGhhbmRsaW5nIG9mIHdtX3RpbWVyLW1lc3NhZ2VzCgogICAgICAgICogW21pc2NlbXUvaW50MjEuY10KICAgICAgICBGaW5kTmV4dEZDQigpOiBSZXdyaXR0ZW4gdG8gc3VwcG9ydCBvdGhlciBmdW5jdGlvbnMgdGhhbiBqdXN0CiAgICAgICAgcmV0dXJuaW5nIHRoZSB2b2x1bWUgbGFiZWwKCgkqIFttaXNjL2ZpbGUuY10KCU9wZW5GaWxlKCk6IEZpeCBpbiBoYW5kbGluZyBvZiBPRl9DUkVBVEUKCldlZCBBdWcgMjQgMTk6NDA6NDIgUERUIDE5OTQgIEFuZHJldyBMYWdvZHppbnNraSAgKGFuZHJld0BuZXRjb20uY29tKQoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglBZGRlZCBTZXRQYXJlbnQuCgoJKiBbd2luZG93cy93aW4uY10KCUFkZGVkIFNldFBhcmVudC4KCkZyaSBBdWcgMTkgMTY6Mzc6MDAgMTk5NCAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBicmFkZm9yZC5hYy51az4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCU1hbnkgY2hhbmdlcyB0aHJvdWdob3V0IGZpbGUgdG8gY29ycmVjdCBoYW5kbGluZyBvZiBzaGFyZWQgbWVtb3J5CglmdW5jdGlvbiByZXR1cm4gY29kZXMuIEZyZWVCU0QgYW5kIFN1bk9TIHNobSBmdW5jdGlvbnMgcmV0dXJuCgktMSBub3QgMCBvbiBlcnJvci4gSWYgTGludXggaXMgZGlmZmVyZW50LCB0aGVzZSBjaGFuZ2VzCgl3aWxsIGhhdmUgdG8gYmUgYmFja2VkIG91dC4KCUNsZWFudXBTZWxlY3RvcnMoKTogdGhpcyBpcyBhIG5ldyAoaW50ZXJuYWwpIGNhbGwgdG8gZnJlZQoJdXAgYWxsIHNlbGVjdG9ycyAoYW5kIHNobSBoYW5kbGVzL21lbW9yeSkgZm9yIHVzZSBvbiBleGl0LgoKCSogW2luY2x1ZGUvc2VnbWVtLmhdCglDaGFuZ2UgY29tbWVudCB0byByZWZsZWN0IG5ldyB1c2Ugb2Ygc2htX2tleQoKCSogW21pc2MvbWFpbi5jXQoJY2FsbGVkX2F0X2V4aXQoKTogYWRkIGNhbGwgdG8gQ2xlYW51cFNlbGVjdG9ycygpCgpNb24gQXVnIDIyIDE4OjE5OjI1IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9idXR0b24uY10KCVVzZSBPQk1fQ0hFQ0tCT1hFUyB0byBkcmF3IGNoZWNrIGJveGVzIHdpdGggY29ycmVjdCBjb2xvcnMuCglGaXhlZCBidWcgd2l0aCBXTV9TRVRURVhUIGhhbmRsaW5nLgoJQSBmZXcgZHJhd2luZyBvcHRpbWlzYXRpb25zLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUltcGxlbWVudGVkIGNvcnJlY3QgXHQgYW5kIFxhIGhhbmRsaW5nIGluIG1lbnUgaXRlbXMuCglJbXBsZW1lbnRlZCBoZWxwIGl0ZW1zIChmbHVzaCByaWdodCkgb24gbWVudSBiYXIuCglBZGRlZCBXTV9FTlRFUk1FTlVMT09QIGFuZCBXTV9FWElUTUVOVUxPT1AgbWVzc2FnZXMuCgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglGaXhlZCBTU19JQ09OIGNvbnRyb2xzIGFuZCBpbXBsZW1lbnRlZCBTVE1fU0VUSUNPTiBtZXNzYWdlCgloYW5kbGluZy4KCgkqIFtjb250cm9scy93aWRnZXQuY10KCVNldCBjdXJzb3IgdG8gSURDX0FSUk9XIGZvciBidWlsdC1pbiBjbGFzc2VzLgoKCSogW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWlzYy9tYWluLmNdCglCYWNraW5nIHN0b3JlIGlzIG5vdyBvZmYgYnkgZGVmYXVsdC4KCgkqIFtvYmplY3RzL3JlZ2lvbi5jXQoJVXNlIFggcmVnaW9ucyBmb3IgcmVjdGFuZ2xlIGFuZCBwb2x5Z29uIHJlZ2lvbnM6ICptYWpvciogc3BlZWQKCWltcHJvdmVtZW50LgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglGaXhlZCB0aGUgZml4IGZvciBpbnRlZ2VyIGlkcyBpbiBjb250cm9scy4gU1NfSUNPTiBjb250cm9scyBpbgoJZGlhbG9ncyBzaG91bGQgd29yayBub3cuCglJbXBsZW1lbnRlZCBEU19BQlNBTElHTiBzdHlsZS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglJbXBsZW1lbnRlZCBJbnZlcnRSZ24oKS4KCU5ldyBpbnRlcm5hbCBmdW5jdGlvbiBHUkFQSF9EcmF3Qml0bWFwKCkgdG8gZHJhdyBiaXRtYXBzIGZhc3RlcgoJdGhhbiB3aXRoIENyZWF0ZUNvbXBhdGlibGVEQygpICsgQml0Qmx0KCkuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglEZXRlcm1pbmluZyB0aGUgd2luZG93IGZvciBhIG1vdXNlIG1lc3NhZ2UgaXMgbm93IGRvbmUgYXQKCUdldE1lc3NhZ2UoKSB0aW1lLgoJTW9kaWZpZWQgUGVla01lc3NhZ2UoKSBoYW5kbGluZyB0byBhdm9pZCBuZWVkbGVzc2x5IGZsdXNoaW5nIHRoZQoJb3V0cHV0IHF1ZXVlLgoKCSogW3dpbmRvd3MvdGltZXIuY10KCUNoZWNrIGZvciByZXN0YXJ0IG9mIGEgdGltZXIgKFNldFRpbWVyIGNhbGwgd2l0aCB0aGUgc2FtZSBod25kIGFuZAoJaWQgdGhhbiBhbiBleGlzdGluZyB0aW1lcikuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBBdWcgIDkgMjM6NTg6MjkgTUVUIERTVCAxOTk0CTxlcmlrQGhhY2t0aWMubmw+CgoJKiBbbWlzYy9maWxlLmNdCglPcGVuRmlsZSgpOiBDb21wbGV0bHkgcmV3cml0dGVuLgoKCSogW21pc2NlbXUvaW50MjEuY10KCUNyZWF0ZUZpbGUoKTogRml4ZWQgd3JvbmcgbW9kZSBpbiBjYWxsIHRvIG9wZW4uCglPcGVuRXhpc3RpbmdGaWxlKCk6IEltcGxlbWVudGVkIGZpbGUgc2hhcmluZy4KCUZpbmROZXh0KCk6IEZpeGVkLgoJQ3JlYXRlTmV3RmlsZSgpOiBGaXhlZCB3cm9uZyBtb2RlIGluIGNhbGwgdG8gb3Blbi4KCWZMb2NrKCk6IEFkZGVkIHRvIGhhbmRsZSByZWNvcmQgbG9ja2luZy4KCUdldEZpbGVBdHRyaWJ1dGUoKTogQWRkZWQuCglBcyBhIHJlc3VsdCwgQUggPSAweDVjLCAweDA5LCBhbmQgMHgwYiB3ZXJlIGNoYW5nZWQuCgoJKiBbbWlzY2VtdS9pbnQyZi5jXQoJQUggPSAweDEwOiBTSEFSRSBpbnN0YWxsYXRpb24gY2hlY2sKIAoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglBY2Nlc3NSZXNvdXJjZSgpOiBGaXhlZC4gQSBuZXcgZmlsZSBkZXNjcmlwdG9yIHdpbGwgYmUgcmV0dXJuZWQgYnkKCWV2ZXJ5IGNhbGwgdG8gQWNjZXNzUmVzb3VyY2UoKS4KCgkqIFt3aW5kb3dzL3V0aWxpdHkuY10KCXd2c3ByaW50ZigpOiBGaXhlZC4KCgkqIFtjb250cm9scy9tZW51LmNdCglGaW5kTWVudUl0ZW0oKTogRml4ZWQgKGhhbmRsaW5nIGZvciBuUG9zID09IC0xIGFkZGVkKS4JCgoJKiBbd2luZG93cy93aW4uY10KCUNyZWF0ZVdpbmRvd0V4KCk6IEFkZGVkIGNhbGwgdG8gV0lOUE9TX0dldE1pbk1heEluZm8uCgoJKiBbQ29uZmlndXJlXQoJQWRkZWQgdHdvIG9wdGlvbnMgZm9yIGEgcHJvY2Vzc29yIGVtdWxhdG9yIHRoYXQgbWlnaHQgYmUKCXBsdWdnZWQgaW4gbGF0ZXIuLgoKCSogW2xvYWRlci90YXNrLmNdIFtpbmNsdWRlL3Rvb2xoZWxwLmhdIFtpZjE2MzIvdG9vbGhlbHAuc3BlY10KCUNyZWF0ZU5ld1Rhc2soKSBzdG9yZXMgcmVhbCBtb2R1bGVuYW1lIGluc3RlYWQgb2YgJ1RBU0t4eHh4Jy4KCUFkZGVkIFRhc2tGaXJzdCgpLCBUYXNrTmV4dCgpLCBUYXNrRmluZEhhbmRsZSgpLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUFkZGVkIHN0dWIgZm9yIE1lbU1hbkluZm8oKS4KCgkqIFtvYmplY3RzL3RleHQuY10KCUFkZGVkIHN0dWIgZm9yIEdldFRhYmJlZFRleHRFeHQoKS4KCgkqIFttaXNjZW11LypdCglDaGFuZ2VkIGFsbCByZWZlcmVuY2VzIHRvIHJlZ2lzdGVycy4gUGxlYXNlIGRvbid0IGFjY2VzcwogCXRoZSBjb250ZXh0IHN0cnVjdHVyZS4KCWZpeCBmb3IgR2V0U3lzdGVtVGltZSgpIGJ5IDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4gYWRkZWQuCgoJKiBbbWlzYy9sc3RyLmNdCglGaXhlZCBidWcgaW4gQW5zaVVwcGVyKCkgJiBBbnNpTG93ZXIoKS4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJYnVnZml4IGluIGdldHNvY2tvcHQoKS9zZXRzb2Nrb3B0KCk6IHdpbnNvY2sgdXNlcyBkaWZmZXJlbnQgdmFsdWVzCgl0aGFuIHVuaXguCgoJKiBbb2JqZWN0cy9kaWIuY10KCUFkZGVkIERJQl9TZXRJbWFnZUJpdHNfUkxFWzQ4XSB0byBzdXBwb3J0IGNvbXByZXNzZWQgYml0bWFwcy4KCk1vbiBBdWcgIDggMjE6MTI6MzMgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUFkZGVkIHN1cHBvcnQgZm9yIFdNX0NPUFksIFdNX0NVVCBhbmQgV01fUEFTVEUgbWVzc2FnZXMuCgoJKiBbd2luZG93cy9kaWFsb2cuY10gW3dpbmRvd3MvZGVmZGxnLmNdIFtpbmNsdWRlL2RpYWxvZy5oXQoJTW9kaWZpZWQgZGlhbG9nIGNvZGUgdG8gY3JlYXRlIG5ldyBoZWFwIGZvciBlZGl0IGNvbnRyb2xzCgl1bmxlc3MgRFNfTE9DQUxFRElUIHN0eWxlIGlzIHNldC4KClRodSBBdWcgIDQgMTg6NTA6NTYgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXSBbY29udHJvbHMvZWRpdC5jXSBbY29udHJvbHMvc3RhdGljLmNdCglSZW1vdmVkIHVubmVlZGVkIEdsb2JhbFVubG9jaygpIGNhbGxzLgoKCSogW2NvbnRyb2xzL21lbnUuY10gW2luY2x1ZGUvbWVudS5oXQoJTG90cyBvZiBjaGFuZ2VzLCBmaXhlZCBhIGxvdCBvZiBvbGQgYnVncyBhbmQgaW50cm9kdWNlZCBhIGxvdCBvZgoJbmV3IG9uZXMgOi0pCgktIENoYW5nZWQgbWVzc2FnZSBsb29wIHRvIHVzZSBNU0dfR2V0SW50ZXJuYWxNZXNzYWdlKCkuCgktIEZpeGVkIGEgYnVnIHRoYXQgY2F1c2VkIHRoZSBtYWluIHdpbmRvdyB0byBsb3NlIGFjdGl2YXRpb24gd2hlbgoJICBkaXNwbGF5aW5nIGEgbWVudS4KCS0gQ29ycmVjdGx5IHNlbmQgaW5pdGlhbGlzYXRpb24gbWVzc2FnZXMgKFdNX0lOSVRNRU5VUE9QVVApLgoJLSBJbXBsZW1lbnRlZCBFbmRNZW51KCkgYW5kIExvb2t1cE1lbnVIYW5kbGUoKS4KCS0gQ2hhbmdlZCBpbnRlcm5hbCBzdHJ1Y3R1cmVzIHRvIGJlIGFzIGNvbXBhdGlibGUgYXMgcG9zc2libGUgd2l0aAoJICBNUy1XaW5kb3dzLgoJLSBBbGxvY2F0ZWQgZXZlcnl0aGluZyBvbiB0aGUgVVNFUiBoZWFwIGluc3RlYWQgb2YgdGhlIGdsb2JhbCBoZWFwLgoJLSBQcmVmaXhlZCBhbGwgaW50ZXJuYWwgZnVuY3Rpb24gbmFtZXMgd2l0aCBNRU5VXyBhbmQgZGVjbGFyZWQKCSAgdGhlbSBzdGF0aWMuCgktIE1vdmVkICJBYm91dCBXaW5lLi4uIiBoYW5kbGluZyB0byBOQ19IYW5kbGVTeXNDb21tYW5kKCkuCgktIE11bHRpLWxpbmUgbWVudXMgc2hvdWxkIG5vdyB3b3JrIGNvcnJlY3RseS4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10gW29iamVjdHMvYml0bWFwLmNdCglBZGRlZCB0aGUgcG9zc2liaWxpdHkgdG8gY3JlYXRlIE9FTSBiaXRtYXBzIGRpcmVjdGx5IGFzIFggYml0bWFwcy4KCgkqIFtvYmplY3RzL2RjdmFsdWVzLmNdIFt3aW5kb3dzL2RjLmNdCglGaXhlZCBHZXREQ09yZygpIHRvIHJldHVybiBzY3JlZW4gY29vcmRpbmF0ZXMuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglGaXhlZCBkb3VibGUtY2xpY2sgY2hlY2tzIHdoZW4gdGhlIG1lc3NhZ2UgaXMgbm90IHJlbW92ZWQgZnJvbSB0aGUKCXF1ZXVlLgoJRml4ZWQgTVNHX0dldEludGVybmFsTWVzc2FnZSgpIHRvIHNlbmQgV01fRU5URVJJRExFIG1lc3NhZ2VzLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglCdWcgZml4IGluIHN5c3RlbSBtZW51IGhpdC10ZXN0IGNhbGN1bGF0aW9uLgoJQSBmZXcgY2hhbmdlcyBmb3IgbmV3IG1lbnUgZnVuY3Rpb25zLgoKVGh1IEF1ZyAxMSAxNzo1MTowMiAxOTk0ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQGJyYWRmb3JkLmFjLnVrPgoKICAgICAgICAqIFtjb250cm9scy9lZGl0LmNdCiAgICAgICAgQnVnIGZpeCBpbiBFZGl0X05DQ3JlYXRlTWVzc2FnZQogICAgICAgIGVzLT50ZXh0bGVuIHdhcyBiZWluZyB1c2VkIGJlZm9yZSBiZWluZyBzZXQKCiAgICAgICAgKiBbY29udHJvbHMvbWVudS5jXQogICAgICAgIEJ1ZyBmaXggaW4gTUVOVV9EcmF3TWVudUl0ZW0KICAgICAgICBkb24ndCB0cnkgdG8gd3JpdGUgdGV4dCBpZiBOVUxMIHBvaW50ZXIgcGFzc2VkCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBBdWcgIDQgMDc6MTg6MDIgMTk5NCAgTWljaGFlbCBQYXRyYSAgPG1pY2t5QG1hcmllLnBoeXNpay50dS1iZXJsaW4uZGU+CgogICAgICAgICogW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW1wbGVtZW50ZWQgV2FpdE1lc3NhZ2UoKSAoVVNFUi4xMTIpLgoKICAgICAgICAqIFtpZjE2MzIvdXNlci5zcGVjXQoJQWRkZWQgV2FpdE1lc3NhZ2UuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCVdNX0VSQVNFQktHTkQ6IEFkZGVkIHN1cHBvcnQgZm9yIGhickJhY2tncm91bmQ9Q09MT1JfeHh4LgoKICAgCSogW21pc2NlbXUvaW50ezEzLDIxLDJhfS5jXQogICAgICAgICogW21pc2NlbXUvSW1ha2VmaWxlXQoJKiBbc2lnbmFsL2xvYWRlci5jXQoJQWRkZWQgYSBmZXcgYmFzaWMgZGlzayBpbmZvcm1hdGlvbiBhbmQgZGlhZ25vc3RpYyBmdW5jdGlvbnMgdG8KCXByZXZlbnQgcHJvZ3JhbXMgdXNpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIGNyYXNoaW5nLiBBbGwgZHJpdmVzCglhcmUgY2xhaW1lZCB0byBiZSByZW1vdGUgb25lcywgc28gZGlyZWN0IEkvTyBpc24ndCBhbGxvd2VkLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUVESVRfV3JpdGVUZXh0KCk6IEFkZGVkIGNvZGUgdG8gY29ycmVjdGx5IGVyYXNlIHRoZSByZW1haW5pbmcgc3BhY2UKCW9mIHRoZSBlZGl0LWNvbnRyb2wgaWYgdGhlIHNpemUgb2YgdGhlIGNvbnRyb2wgaGFzIGNoYW5nZWQgc2luY2VkIGl0J3MKCWNyZWF0aW9uLgoKVHVlIEp1bCAyNiAyMjowNTo1NCBNRVQgRFNUIDE5OTQgRXJpayBCb3MgPGVyaWtAaGFja3RpYy5ubD4KCgkqIFtpZjE2MzIvbW91c2Uuc3BlY10KCUFkZGVkIG1vdXNlLmRsbCBlbnRyeSwgbm8gZnVuY3Rpb25zLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJQnVnIGZpeCBpbiBBY2Nlc3NSZXNvdXJjZSgpLiAKCgkqIFttaXNjL2tleWJvYXJkLmNdLCBhZGRlZCBbaW5jbHVkZS9rZXlib2FyZC5oXQoJQ2hhbmdlZCBmdW5jdGlvbnMgdG8gcmV0dXJuIG1vcmUgdXNlZnVsIHZhbHVlcy4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJSGFja2VkIERJQUxPR19HZXRDb250cm9sKCkgdG8gc3VwcG9ydCByZXNvdXJjZXMgd2hpY2gKCWhhdmUgMHhmZjAwIC0gMHhmZmZmIGFzIGlkLiAqKiBOZWVkcyB0byBiZSBkb25lIHByb3Blcmx5IGJ5Cglzb21lb25lIHdobyBrbm93cyB0aGUgTkUgZmlsZWZvcm1hdCAqKgoKSnVsIDI5LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQWRkIG5ldyBzdHViIGZvciBFbmFibGVIR2FyZHdhcmVJbnB1dCgpIGZ1bmN0aW9uLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJQWRkIGNvZGluZyBmb3IgSFdORF9CUk9BRENBU1QgaW4gUG9zdE1lc3NhZ2UoKS4KCgkqIFttaXNjL2ZpbGUuY10KCUFkZCBjb2RpbmcgZm9yIE9wZW5GaWxlKCkgYWxzbyBzZWFyY2ggaW4gV2luZG93UGF0aHMuCgoJKiBbbWlzYy9tbXN5c3RlbS5jXQoJKiBbbWlzYy9hdWRpby5jXQoJKiBbbWlzYy9tbWF1eC5jXQoJKiBbbWlzYy9tY2ljZGEuY10KCUNoYW5nZSAjaW5jbHVkZSAibGludXgvc291bmRjYXJkLmgiIGJ5ICNpbmNsdWRlICJzeXMvc291bmRjYXJkLmgiCglBZGQgY29kaW5nIGluIE1NSU8gZnVuY3Rpb25zLiBOb3csIG1taW9EZXNjZW5kKCkgY2FuIGZpbmQgV0FWIGNodW5rcy4KCVNuZFBsYXlTb3VuZCAmIE1DSV9FTEVNRU5UIG5vdyB1c2UgTU1JTyBhbmQgYWRqdXN0IHRvIHByb3BlciBmb3JtYXRzLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBKdWwgMTggMjM6NTU6MTMgTUVUIERTVCAxOTk0CgoJKiBbaWYxNjMyL2NhbGwuU10KCUNhbGxUbzE2KCk6IGFkZGVkIGBtb3YgJWVheCwlZWR4JyBqdXN0IGJlZm9yZSBsY2FsbCwKCXRvIG1ha2Ugc3VyZSB0aGF0IERYIGNvbnRhaW4gdGhlIERMTCdzIGhpbnN0YW5jZSB3aGVuCglpbml0aWFsaXNlZC4KCglDYWxsVG8zMl8xNigpIGFkZGVkLCBlcXVhbCB0byBDYWxsVG8zMigpIGV4Y2VwdCBmb3IKCW9uZSB0aGluZzogaXQgc2F2ZXMgRFggYW5kIAoKCSogW3Rvb2xzL2J1aWxkLmNdCglBZGRlZCBzb21lIGNvZGUgdG8gc3VwcG9ydCAxNiBhbmQgMzIgYml0IHJldHVybiB2YWx1ZXMuCgoJKiBbMTYzMi97a2VybmVsLHVzZXJ9LnNwZWNdCglDaGFuZ2VkIG1vc3Qgb2YgdGhlIGBwYXNjYWwnIHN0eWxlIHRvIHBhc2NhbF8xNiB3aGVuCglmdW5jdGlvbiByZXR1cm5lZCBhIDE2Yml0IHZhbHVlLgoKVHVlIEp1bCAxOSAxODo0MDoyNSAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbY29udHJvbHMvbWVudS5jXQoJUmVvcmdhbml6ZWQgc2l6aW5nIGFuZCBkcmF3aW5nIGNvZGUgdG8gaW1wbGVtZW50IG11bHRpLWxpbmUgbWVudXMuCglJbXBsZW1lbnRlZCBNRU5VQlJFQUsgc3R5bGUuCglVc2Ugc3lzdGVtIGNvbG9ycyB0byBkcmF3IG1lbnVzLgoKCSogW29iamVjdHMvY29sb3IuY10KCUJ1ZyBmaXggaW4gQ09MT1JfSXNTb2xpZCgpLgoKCSogW29iamVjdHMvZm9udC5jXQoJQnVnIGZpeCBpbiBGT05UX0dldE1ldHJpY3MoKTogY2FsY3VsYXRlIGF2ZXJhZ2UgY2hhcmFjdGVyIHdpZHRoCglvbmx5IG9uIGV4aXN0aW5nIGNoYXJzIChkaWFsb2dzIGxvb2sgbXVjaCBiZXR0ZXIpLgoKCSogW29iamVjdHMvdGV4dC5jXQoJQnVnIGZpeCBpbiBEcmF3VGV4dCgpOiB1c2UgdGV4dCBjb2xvciB0byB1bmRlcmxpbmUgbW5lbW9uaWMuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUNoYW5nZWQgV01fTkNISVRURVNUIGhhbmRsaW5nIHRvIGNvcGUgd2l0aCBtdWx0aS1saW5lIG1lbnUgYmFycy4KCgkqIFt3aW5kb3dzL3N5c2NvbG9yLmNdCglBZGRlZCBzeXN0ZW0gb2JqZWN0cyBmb3IgbWVudSBjb2xvcnMuCgpNb24gSnVsIDE4IDE5OjMyOjA4IFBEVCAxOTk0ICBBbmRyZXcgTGFnb2R6aW5za2kgIChhbmRyZXdAbmV0Y29tLmNvbSkKCiAgICAgICAgKiBbY29udHJvbHMvbWVudS5jXQogICAgICAgIEZpeGVkIGJ1ZyBpbiBTZWxlY3RQcmV2SXRlbSB0aGF0IGNhdXNlZCBzZXBlcmF0b3JzIHRvIG5vdCBiZQoJc2tpcHBlZCB3aGVuIHVzaW5nIHRoZSB1cCBhcnJvdyBrZXkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBKdWwgMTQgMTc6NTA6NDUgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtDb25maWd1cmVdCglBdXRvZGV0ZWN0cyBMaW51eCB2ZXJzaW9uIChpZiBydW5uaW5nIExpbnV4KS4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglOZXcgc2lnbmFscyBmb3IgTGludXguCgoJKiBbbG9hZGVyL2xkdGxpYi5jXQoJTmV3IHN0cnVjdHVyZSBmaWVsZCBpbiBzeXMgY2FsbC4KClN1biBKdWwgMTAgMTk6MzE6MzQgMTk5NCAgT2xhZiBGbGViYmUgIChvbGFmQGRyYWdvbikKCiAgICAgICAgKiBbbG9hZC9yZXNvdXJjZS5jXSAKICAgICAgICAgIGZpeGVkIE1lbW9yeSAoUmVzb3VyY2UpIExlYWsuCgogICAgICAgICogW2xvYWQvbWFpbi5jXSAKICAgICAgICAgIGZpeGVkIGEgcHJpbnRmLgoKVHVlIEp1bCAxMiAxODo1MDozNCAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbY29udHJvbHMvZGVza3RvcC5jXQoJSW1wbGVtZW50ZWQgZGVza3RvcCB3YWxscGFwZXIgKG9ubHkgMTYgY29sb3JzIGZvciBub3cpLgoKCSogW2NvbnRyb2xzL21lbnUuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglQcmVsaW1pbmFyeSB3b3JrIHRvIGFsbG93IG11bHRpLWxpbmUgbWVudXMuCgoJKiBbbWlzYy9tYWluLmNdCglObyBiYWNraW5nIHN0b3JlIG9uIGRlc2t0b3Agd2luZG93IChub3QgdXNlZnVsKS4KCgkqIFtvYmplY3RzL3RleHQuY10KCUEgZmV3IGZpeGVzIHRvIERyYXdUZXh0KCkgdG8gbWFrZSB1bmRlcmxpbmVzIHVuZGVyIG1uZW1vbmljCglsZXR0ZXJzIHRvIGxvb2sgYmV0dGVyLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCU1vcmUgZml4ZXMgdG8gR1JBUEhfRHJhd0FyYygpLCBhbmQgc29tZSBmaXhlcyB0byBQb2x5Z29uKCkuCglJbXBsZW1lbnRlZCBQb2x5UG9seWdvbigpIChwYXJ0aWFsbHkgd29ya2luZykuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCU5ldyBmdW5jdGlvbiBXSU5QT1NfU2VuZE5DQ2FsY1NpemUoKS4KCUNsZWFuZWQgdXAgU2V0V2luZG93UG9zKCkgYW5kIGFkZGVkIHByZWxpbWluYXJ5IHN1cHBvcnQgZm9yCgltdWx0aS1saW5lIG1lbnVzLgoKTW9uIEp1bCAxMSAxOToxNTo1MSAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAc3BoaW54KQoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUNoYW5nZXMgdG8gd29yayBhcyBhIGxpYnJhcnkuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdIAoJSWZkZWZlZCBtb2R1bGUuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglDaGFuZ2VzIHRvIGFsbG93IGxpbmtpbmcgd2l0aCBXaW5lTGliLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgbWFjcm8gV0lORUxJQl9VTklNUAoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglXaGVuIGNvbXBpbGluZyBXaW5lTGliLCBHZXRQcm9jQWRkcmVzcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LgoKCSogW2xvYWRlci9tYWluLmNdCglBZGRlZCBlbXB0eSBJbml0RExMIHdoZW4gdXNpbmcgV2luZUxpYi4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCVNvbWUgcGFydHMgb2YgdGhlIGxvYWRlciBhcmUgbmVlZGVkIGZvciBXaW5lTGliLCBpZmRlZmVkIGNvcnJlY3RseQoKCSogW21pc2Mve2F1ZGlvLmMsbWNpY2RhLmMsbW1hdXguYyxtbXN5c3RlbS5jXQoJRGlzYWJsZSBjb21waWxhdGlvbiBvZiBtb2R1bGUgd2hlbiBjb21waWxpbmcgV2luZUxpYi4KCgkqIFt0b29sa2l0L2hlYXAuY10KCUZpeGVkIHNtYWxsIGJ1Zy4gIFdoZW4gcGFzc2VkIGFuIGludmFsaWQgaGFuZGxlIFdpbmVMaWIgd291bGQKCWNyYXNoLCBub3cgcmV0dXJuIE5VTEwuCgoJKiBbdG9vbGtpdC93aW5tYWluLmNdCglDYWxsIENyZWF0ZU5ld1Rhc2sgaW4gX1dpbk1haW4uCgpTdW4gSnVsIDEwIDA5OjA4OjAyIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy93aWRnZXQuY10KCU1vcmUgY2hhbmdlcyB0byBpbXByb3ZlIGNvbXBhdGliaWxpdHkgd2l0aCBXaW5kb3dzJyBlZGl0Cgljb250cm9sLiAgRmluaXNoZWQgb2ZmIHRhYiBzdG9wIHN1cHBvcnQuCgpNb24gSnVsIDExIDIxOjA1OjAyIE1FVCBEU1QgMTk5NCAgRXJpayBCb3MgPGVyaWtAaGFja3RpYy5ubD4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCSMgb2Ygb3JkaW5hbHMgaW4gc2hlbGwuZGxsIGNoYW5nZWQgdG8gMTAzLgoKCSogW2xvYWRlci9zaWduYWwuY10KCXN0aSwgY2xpIHdpbGwgbm93IGJlIGlnbm9yZWQuCgoJKiBbb2JqZWN0cy9icnVzaC5jXQoJQWRkZWQgc3R1YiBmb3IgR2V0U3lzQ29sb3JCcnVzaCgpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4sIDMgSnVsIDE5OTQgMjA6MTU6NTYgKzAxMDAgKEJTVCkgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtjb250cm9scy9lZGl0LmNdCglCdWcgZml4ZXMgYW5kIHRpZHlpbmcgdXAuICBQcmVsaW1pbmFyeSB0YWIgc3RvcCBzdXBwb3J0CgkoZG9lc24ndCB3b3JrIHlldCkuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCVJldmVyc2VkIG9yZGVyIG9mIGJ1dHRvbnMgaW4gQ2hlY2tSYWRpb0J1dHRvbnMgc28gdGhhdCBhbGwKCWJ1dHRvbnMgYXJlIG5vdyBkaXNwbGF5ZWQuCgpUdWUgSnVsICA1IDE4OjMwOjI0IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtpbmNsdWRlL29wdGlvbnMuaF0gW21pc2MvbWFpbi5jXSBbd2luZG93cy93aW4uY10KCVJlbW92ZWQgbm9zYXZldW5kZXJzIG9wdGlvbiwgcmVwbGFjZWQgYnkgaGFuZGxpbmcKCXRoZSBDU19TQVZFQklUUyBmbGFnLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCU1vZGlmaWVkIHRoZSBmaXggZm9yIG5lZ2F0aXZlIHNpemUgaW4gY2xhc3MgZXh0cmEgYnl0ZXMgdG8KCWF2b2lkIG1vZGlmeWluZyB0aGUgY2FsbGVyJ3MgZGF0YS4KCgkqIFt3aW5kb3dzL2RjLmNdCglCdWcgZml4OiBzeXN0ZW0gZm9udCBtdXN0IGJlIGEgcHJvcG9ydGlvbmFsIGZvbnQuCglGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCB0aGUgZGVmYXVsdCBwZW4gdG8gbm90IGJlIHNlbGVjdGVkCgljb3JyZWN0bHkgaW4gYSBEQy4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglCdWcgZml4IGluIEdSQVBIX0RyYXdBcmMoKS4gVGhhbmtzIHRvIEFkcmlhbm8gQXpldmVkbyBmb3IKCW5vdGljaW5nIGl0LgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCVJlbW92ZWQgaW5jb3JyZWN0IHNlbGVjdGluZyBvZiBkZWZhdWx0IG9iamVjdHMgaW4gQmVnaW5QYWludCgpCgkobm8gbG9uZ2VyIG5lZWRlZCBiZWNhdXNlIG9mIHRoZSBmaXggaW4gZGMuYykuCgpKdWwgNCwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW21pc2MvbW1zeXN0ZW0uY10KCSogW21pc2MvYXVkaW8uY10KCUFkZCBtb3JlIGNvZGUgdG8gaW50ZXJmYWNlICcvZGV2L2RzcCcuCgoJKiBOZXcgZmlsZSBbbWlzYy9tY2ljZGEuY10KCUNyZWF0ZSBhbiBNQ0lfREVWVFlQRV9DRF9BVURJTyBkcml2ZXIgY29ubmVjdGVkIHRvICcvZGV2L3NicGNkJy4KCgkqIE5ldyBmaWxlIFttaXNjL21tYXV4LmNdCglTdHVicyB0byBtYWtlIGEgZnV0dXJlIGRyaXZlciBjb25uZWN0ZWQgdG8gJy9kZXYvbWl4ZXInLgoKCSogW3dpbmRvd3Mvd2luLmNdCglUZW1wb3JhcnkgcGF0Y2ggdG8gQ3JlYXRlV2luZG93RXgoKSBmb3IgcmVzZXRpbmcgbmVnYXRpdmUKCWNvb3JkaW5hdGVzIHRvIDAsMCA7IGJlY2F1c2UgJ3NvdW5kcmVjLmV4ZScgZ2l2ZSBuZWdhdGl2ZSB2YWx1ZXMKCWFuZCBJIG5lZWQgaXQgdG8gd29yayBvbiBNTVNZU1RFTSAuLi4gOi0pCgoJKiBbbWlzY2VtdS9pbnQyZi5jXQoJYWRkIGEgc3R1YiAnZG9faW50MmZfMTYnIChmdW5jdGlvbiAweDE2KSBmb3IgRE1QSSBzZXJ2ZXIuCgpNb24gSnVuIDIwIDEwOjA4OjQwIEJTVCAxOTk0ICBXaWxsaWFtIFNtaXRoICh3b3NAZGNzLndhcndpY2suYWMudWspCgoJKiBpbmNsdWRlL2NvbW0uaAoJTmV3IGZpbGUgLS0gc29tZSBkZWZpbml0aW9ucyB0aGF0IHdlcmUgaW4gY29tbS5jIG5vdyBuZWVkIHRvCgliZSBzaGFyZWQgd2l0aCBtaXNjL2Rvc19mcy5jCgoJKiBtaXNjL2NvbW0uYwoJU29tZSBkZWZpbml0aW9ucyBtb3ZlZCBpbnRvIGluY2x1ZGUvY29tbS5oCgoJKiBtaXNjL2Rvc19mcy5jIChET1NfR2V0RXF1aXBtZW50KToKCUZpeGVkIGVycm9yIGluIGVxdWlwbWVudCAtLSBiaXR3aXNlIG9yIG9mIHR3byB2YWx1ZXMgc2hvdWxkCgliZSB1c2VkIGluc3RlYWQgb2YgbG9naWNhbCBvci4gIEFsc28gYWRkZWQgY29kZSB0byBjb3JyZWN0bHkKCXJlcG9ydCB0aGUgbnVtYmVyIG9mIHNlcmlhbCBhbmQgcGFyYWxsZWwgZGV2aWNlcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIEp1biAyMCAxNDoyNjo0MSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW29iamVjdHMvYml0bWFwLmNdCglBbGxvdyBuZWdhdGl2ZSBiaXRtYXAgc2l6ZXMuCgpTdW4gSnVuIDE5IDEyOjAwOjA0IDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCiAgICAgICAgKiBbY29udHJvbHMvZWRpdC5jXQogICAgICAgIEltcHJvdmVkIHNlbGVjdGlvbiBkaXNwbGF5LiAgQWRkZWQgcHJvY2Vzc2luZyBmb3IgV01fU0VURk9OVCwKICAgICAgICBFTV9SRVBMQUNFU0VMLCBFTV9MSU5FTEVOR1RILCBFTV9VTkRPLCBFTV9FTVBUWVVORE9CVUZGRVIsCiAgICAgICAgRU1fR0VUSEFORExFLCBFTV9TRVRIQU5ETEUgbWVzc2FnZXMuICBUZXh0IGJ1ZmZlciBub3cgc3RvcmVkIG9uIAogICAgICAgIGFwcGxpY2F0aW9uJ3MgbG9jYWwgaGVhcC4KCiAgICAgICAgKiBbd2luZG93cy9ncmFwaGljcy5jXQogICAgICAgIENvcnJlY3RlZCBidWcgaW4gUmVjdGFuZ2xlKCkuICBYRmlsbFJlY3RhbmdsZSBoYXMgdGhlIHNhbWUKICAgICAgICB3aWR0aCBhcyBSZWN0YW5nbGUsIGJ1dCBYRHJhd1JlY3RhbmdsZSBpcyBvbmUgcGl4ZWwgd2lkZXIKICAgICAgICBmb3IgdGhlIHNhbWUgY28tb3JkaW5hdGVzLgoKICAgICAgICAqIFttZW1vcnkvaGVhcC5jXSBbaW5jbHVkZS9oZWFwLmhdCiAgICAgICAgQWRkZWQgSEVBUF9Mb2NhbFNpemUgZnVuY3Rpb24uCgogICAgICAgICogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3Mva2V5Ym9hcmQuY10KICAgICAgICBJbXByb3ZlbWVudHMgdG8gS2V5U3RhdGVUYWJsZSBhbmQgYWRkaXRpb24gb2YgQXN5bmNLZXlTdGF0ZVRhYmxlLgogICAgICAgIEFkZGVkIHN1cHBvcnRpbmcgY29kZSB0byBHZXRLZXlTdGF0ZSBhbmQgR2V0QXN5bmNLZXlTdGF0ZSBhbmQKICAgICAgICBtZXJnZWQgbW91c2UgYnV0dG9uIHN0YXRlcyBpbnRvIEdldEtleWJvYXJkU3RhdGUuCgogICAgICAgICogW2xvYWRlci9yZXNvdXJjZS5jXSBbaW5jbHVkZS9hY2NlbC5oXQogICAgICAgIEFkZGVkIHJlY29nbml0aW9uIG9mIFNISUZULCBDT05UUk9MIGFuZCBBTFQga2V5cyB0bwogICAgICAgIFRyYW5zbGF0ZUFjY2VsZXJhdG9yLgoKICAgICAgICAqIFtvYmplY3RzL21ldGFmaWxlLmNdIFtvYmplY3RzL2ZvbnQuY10gW29iamVjdHMvYml0Ymx0LmNdCiAgICAgICAgQSBiaXQgbW9yZSBtZXRhZmlsZSBzdXBwb3J0LgoKU3VuIEp1biAxOSAxNzoyOTowMCBNRVQgRFNUIDE5OTQgIEVyaWsgQm9zIChlcmlrQGhhY2t0aWMubmwpCgogICAgICAgICogW2xvYWRlci9yZXNvdXJjZS5jXQogICAgICAgIFNpemVvZlJlc291cmNlKCkgYW5kIEFsbG9jUmVzb3VyY2UoKSBhZGRlZCwgQWNjZXNzUmVzb3VyY2UoKSB1cGRhdGVkLgoKICAgICAgICAqIFtpZjE2MzIva2VybmVsLnNwZWNdCiAgICAgICAgRnJlZUxpYnJhcnkoKSB1c2VkIGZvciBGcmVlTW9kdWxlKCkuCgogICAgICAgICogW3dpbmRvd3MvZ3JhcGhpY3MuY10KICAgICAgICBSZWN0YW5nbGUoKTogc3dhcCBsZWZ0ICYgcmlnaHQgY29ybmVycyB3aGVuIHJpZ2h0IDwgbGVmdCwKICAgICAgICBzd2FwIHRvcCAmIGJvdHRvbSB3aGVuIGJvdHRvbiA8IHRvcC4KCkp1biAxOSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglGaXggYnVnIGluIHdpbmRvdyBzdHlsZSBvZiB0aGUgYXNzb2NpYXRlZCBsaXN0Ym94LgoKCSogW2NvbnRyb2xzL21lbnUuY10KCVNraXAgc2VwYXJhdG9ycyBpbiBrZXlib2FyZCBuYXZpZ2F0aW9uIGJ5IHVzaW5nIG5ldyBpbnRlcm5hbCAKCQlmdW5jdGlvbnMgU2VsZWN0UHJldkl0ZW0oKSAmIFNlbGVjdE5leHRJdGVtKCksCgoJKiBbbWlzYy9wcm9maWxlLmNdCglCdWcgZml4IGluIEdldFByaXZhdGVQcm9maWxlSW50KCksIHdhcyBsaW1pdGVkIHRvIDQgZGlnaXQsCgkJSW50QnVmIG11c3QgYmUgYWxsb2MgdG8gKDUrMSk9Ni4gY2hhciBpbnN0ZWFkIG9mIDUuCgoJKiBbbWlzYy9tYWluLmNdCglQdXQgY29kZSBpbiBmdW5jdGlvbnMgU2V0RW52aXJvbm1lbnQoKSAmIEdldEVudmlyb25tZW50KCkuCgoJKiBbbWlzYy9zaGVsbC5jXQoJU3RhcnQgcHV0dGluZyBzb21lIGNvZGUgaW4gRXh0cmFjdEljb24oKSBmdW5jdGlvbi4KCgkqIFttaXNjL21tc3lzdGVtLmNdCglTb21lIGNvZGUgZm9yIE1NVGltZXIgZnVuY3Rpb25zICYgdGltZXJzIGxpc3QuCgoJKiBbbWlzY2VtdS9pbnQzMS5jXQoJRmV3IHN0dWJzIGZvciBEUE1JIGludGVycnVwdCBjYWxscy4gTm90aGluZyB3b3JrIHlldC4KCk1vbiBKdW4gMjAgMDc6Mzc6NDMgRURUIDE5OTQJSm9obiBSaWNoYXJkc29uIChqcmljaGFyZEBjcy51bWwuZWR1KQoKCSogaW5jbHVkZS93aW4uaCAodGFnV05EKToKCUFkZGVkIGljb24gZmllbGRzIGljb24sIGhJY29uIGFuZCByZWN0Q2xpZW50U2F2ZSB0byAKCXRoZSB0YWdXTkQgc3RydWN0LgoKCSogd2luZG93cy9JbWFrZWZpbGUKCUFkZGVkIGljb24uYyB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byBjb21waWxlCgoJKiB3aW5kb3dzL2RjZS5jIChHZXREQ0V4KToKCUFkZGVkIHNvbWUgY2hlY2tzIGZvciBpY29uaWMgbW9kZSBhbmQgcGFzcyBpY29uIHdpbmRvdyBhcyBkcmF3YWJsZSwKCW5vdCB0aGUgcmVhbCB3aW5kb3cuCgoJKiB3aW5kb3dzL2RlZnduZC5jIChEZWZXaW5kb3dQcm9jKQoJQWRkZWQgUEFJTlRJQ09OIGRlZmF1bHQgd2luZG93cyBwcm9jZWR1cmUuCgoJKiB3aW5kb3dzL2V2ZW50LmMgKEVWRU5UX0V4cG9zZSkKCUFkZGVkIGNoZWNrIGZvciBpY29uaWMgd2luZG93IGV4cG9zZS4gSWYgaWNvbmljIHdpbmRvdyBpcyBleHBvc2VkCglzZW5kIGEgV01fUEFJTlRJQ09OIG1lc3NhZ2UKCgkqIHdpbmRvd3MvaWNvbi5jIAoJTmV3IGZpbGUuICBJQ09OX0ljb25pZnksIElDT05fZmluZEljb25Gcm9tUG9pbnQsIElDT05fRGVpY29uaWZ5LgoKCSogd2luZG93cy9tZGkuYyAoRGVmTURJQ2hpbGRQcm9jKQoJVGVzdCBmb3IgSXNJY29uaWMgZHVyaW5nIGEgU0NfUkVTVE9SRSwgdGhpcyBkb2Vzbid0IHdvcmsgeWV0LgoKCSogd2luZG93cy9tZXNzYWdlLmMgKGhhcmR3YXJlX2V2ZW50KQoJTG9va3MgZm9yIGljb24gYXMgd2VsbCBhcyB3aW5kb3cgbm93LgoKCSogd2luZG93cy9ub25jbGllbnQuYyAoTkNfSGFuZGxlU3lzQ29tbWFuZCwgTkNfRG9OQ1BhaW50SWNvbikKCUFkZGVkIGljb25pZnkvZGVpY29uaWZ5IGluIE5DX0hhbmRsZVN5c0NvbW1hbmQsIG5ldyBmdW5jdGlvbgoJTkNfRG9OQ1BhaW50SWNvbiB3aGljaCBwYWludHMgYW4gaWNvbi4KCgkqIHdpbmRvd3MvcGFpbnRpbmcuYyAoQmVnaW5QYWludCkKCU1hZGUgYSBCZWdpblBhaW50IHNlbGVjdCB0aGUgU1RPQ0tfQkxBQ0tfUEVOLCBTVE9DS19XSElURV9CUlVTSCwKCWFuZCBTVE9DS19TWVNURU1fRk9OVCBvYmplY3RzIHNpbmNlIHRoaXMgaXMgKGhvcGVmdWxseSkgZGVmYXVsdAoJd2luZG93cyBiZWhhdmlvci4KCgkqIHdpbmRvd3Mvd2luLmggKENyZWF0ZVdpbmRvd0V4KQoJU2V0IHRoZSBkZWZhdWx0IGJhY2tncm91bmQgY29sb3Igb2YgYSB3aW5kb3cgdG8gYmUgd2hpdGUuCglDcmVhdGUgaWNvbiB3aW5kb3csIHR1cm4gb2ZmIE1JTklNSVpFIGlmIGl0IGlzIG9uLCBzaW5jZQoJSSBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCBpdCBhcyBvZiB5ZXQuLi4gcmVnaXN0ZXIKCXRoZSBpY29uIHdpdGggdGhlIGh3bmQgb2YgaXRzIHdpbmRvdyBzbyB3ZSBjYW4gaWRlbnRpZnkgd2hlcmUKCWljb24gbWVzc2FnZXMgYXJlIGNvbWluZyBmcm9tLgoKTW9uIEp1biAyMCAxMDoxNTo1OSAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAc3BoaW54KQoKCSogd2luZG93cy9ldmVudC5jOiBBZGRlZCBhIGhhY2sgdG8gZGVmaW5lIFhQb2ludGVyIHdoZW4gdXNpbmcKCVgxMVI0LiAKCgkqIHRvb2xraXQvaGVsbG8uYzogVGVzdCBhcHBsaWNhdGlvbiBmb3IgV2luZUxpYi4gVG8gY29tcGlsZSB5b3UnbGwKCW5lZWQ6IGdjYyAtSWluY2x1ZGUgLURXSU5FTElCIC1nIGhlbGxvLmMgLWMsIGFuZCB0byBsaW5rIHlvdSdsbAoJbmVlZDogZ2NjIGhlbGxvLm8gbGlid2luZS5hIC1sWDExIC1ML3Vzci9vcGVud2luL2xpYiAtbG0gCgoJKiB0b29sa2l0L2hlYXAuYzogRXh0ZW5kZWQgdGhlIHNpemUgb2YgdGhlIGJsb2NrIHNpemUgcGVyIGNodW5rLgoKCSogbWlzYy9zdHJlc3MuYyAoR2V0RnJlZUZpbGVIYW5kbGVzKTogRml4ZWQgdHlwby4KCgkqIG1pc2MvbWFpbi5jIChtYWluKTogQ2hhbmdlcyB0byBhbGxvdyBjb21waWxhdGlvbiB1bmRlciBTdW5PUy4gCgoJKiBsb2FkZXIvbGlicmFyeS5jOiBDaGFuZ2VkIHNvbWUgaWZkZWZzIHRvIGNvbXBpbGUgV2luZUxpYi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEp1biAxNCAwODowOToxNCAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogbG9hZGVyL3NlbGVjdG9yLmMgKEdldEN1cnJlbnRQREIpOiAKCUFkZGVkIHRyaXZpYWwgZnVuY3Rpb24gR2V0Q3VycmVudFBEQigpIHdoaWNoIHJldHVybnMgdGhlIHByb2dyYW0KCXNlZ21lbnQgcHJlZml4IHNlbGVjdG9yLgoKCSogbWVtb3J5L2hlYXAuYyAoSEVBUF9GcmVlKTogCglJZiBmcmVlIGxpc3QgaXMgZW1wdHksIG1ha2UgdGhlIGZyZWVkIGJsb2NrIHRoZSBmcmVlIGxpc3QuCgpGcmkgSnVuIDEwIDA3OjU2OjQ5IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBjb250cm9scy9lZGl0LmMgKEVESVRfU2V0VGV4dE1zZyk6IAoJRG8gbm90IGFwcGVuZCBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBsaW5lLgoKCSogd2luZG93cy9ldmVudC5jIChTZXRDYXB0dXJlKTogCglTZXQgd2luSGFzQ3Vyc29yIGlmIG1vdXNlIGNhcHR1cmUgc3VjY2VlZHMuCgpKdW4gMTMsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglGaXggYnVnIGluIGxpc3Rib3ggOiBJbnNlcnRTdHJpbmcgc2hvdWxkIGNhbGwgQWRkU3RyaW5nIGlmIC0xLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU5ldyBmdW5jdGlvbiBHZXRNZW51U3RhdGUoKS4KCgkqIFtjb250cm9scy9zY3JvbGwuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglUcnkgdG8gbWFrZSBTaG93U2Nyb2xsQmFyKCkgcmVjYWxjIE5DXyByZWdpb25zLiBOb3QgZmluaXNoZWQgIQoKCSogW29iamVjdHMvdGV4dC5jXQoJQWRkIFN0dWIgZm9yIFRhYmJlZFRleHRPdXQoKSwgd2hpY2ggdGVtcG9yYXJlbHkgY2FsbCBUZXh0b3V0KCkuCgoJKiBbd2luZG93cy9rZXlib2FyZC5jXSBbd2luZG93cy9ldmVudC5jXQoJTmV3IGZ1bmN0aW9uIEdldEtleUJvYXJkU3RhdGUoKSB3aXRoIGFuIEtleVN0YXRlVGFibGUgYXJyYXkKCQkmIGFzc29jaWF0ZWQgaGFuZGxpbmcgaW4gZnVuY3Rpb24gRVZFTlRfa2V5KCkuCgpNb24gSnVuIDEzIDE2OjQ1OjI0IE1FVCBEU1QgMTk5NCAoZXJpa0BoYWNrdGljLm5sKQoKICAgICAgICAqIFtjb250cm9scy9tZW51LmNdCiAgICAgICAgSXNNZW51KCkgYWRkZWQuCgogICAgICAgICogW2xvYWRlci9saWJyYXJ5LmNdCiAgICAgICAgTW9kdWxlRmlyc3QoKSwgTW9kdWxlTmV4dCgpLCBNb2R1bGVGaW5kTmFtZSgpLCBNb2R1bGVGaW5kSGFuZGxlKCkKICAgICAgICBhZGRlZC4KCiAgICAgICAgKiBbb2JqZWN0L2dkaW9iai5jXQogICAgICAgIElzR0RJT2JqZWN0KCkgYWRkZWQuCgogICAgICAgICogW21pc2NlbXUvaW50Mls1Nl0uY10KICAgICAgICBidWdmaXg6IGJvdGggZGlkbid0IGxlYXZlIGZsYWdzIHB1c2hlZCBvbiAxNmJpdC1zdGFjay4KICAgICAgICAod2luZmlsZSBnZXRzIGEgYml0IGZ1cnRoZXIpCgogICAgICAgICogW21pc2NlbXUvaW50MTYuY10KICAgICAgICBBZGRlZCAoZW1wdHkpLgoKU2F0IEp1biAxMSAyMjo1Njo0OCAxOTk0IEpvbiBUb21icyAoam9uQGVzaXgyLnVzLmVzKQoJKiB3aW5kb3dzL2V2ZW50LmM6CglBZGRlZCBjb2RlIHRvIGRyb3AgcmVkdW5kYW50IG1vdGlvbiBFdmVudHMgaW4gdGhlIFhFdmVudCBxdWV1ZS4KClRodSBKdW4gIDkgMTA6NTU6NTUgTUVUIERTVCAxOTk0ICBKb2NoZW4gSGVpbiAoIEhlaW5AU3R1ZGVudC5UVS1DbGF1c3RoYWwuZGUgKQoKCSogW21pc2MvbWFpbi5jIG1pc2MvbWVzc2FnZS5jIGluY2x1ZGUvdGV4dHMuaF0KCVJlbW92ZWQgdGhlIHRleHQtY29uc3RhbnRzIGZyb20gbWVzc2FnZS5jIGludG8gdmFyaWFibGVzCgl3aGljaCBtYXkgYmUgY2hhbmdlZCBmcm9tIFgtcmVzb3VyY2VzLgoKCSogW21pc2MvbWFpbi5jIG1pc2MvbWVzc2FnZS5jXQoJYWRkZWQgPGxvY2FsZS5oPiBhbmQgc2V0bG9jYWxlKCkgdG8gbWFpbi5jLCB1c2VkIHRvdXBwZXIoKSBpbiBtZXNzYWdlLmMKCk1vbiwgMTMgSnVuIDk0IDA5OjQxOjE2IC0wNTAwIFBhdWwgQnJhbWVsIDxwYXVsYnJAY29tbS5tb3QuY29tPgoKICAgICAgICAqIGNvbnRyb2xzL2J1dHRvbi5jICggW0NSXUJfTEJ1dHRvbiogKSAKICAgICAgICBsZWZ0IHJjLnJpZ2h0IGF0IGZ1bGwgd2luZG93IHdpZHRoIHNvIGNsaWNrIG9uIGxhYmVsIGFsc28gCiAgICAgICAgYWN0aXZhdGVzIHRoZSBjb250cm9sIChNU1dpbiBiZWhhdmlvcikKClNhdCBKdW4gMTEgMTk6MDU6NDAgMTk5NCAgT2xhZiBGbGViYmUgIChmbGViYmVAdGF0LnBoeXNpay51bmktdHVlYmluZ2VuLmRlKQoKICAgICAgICAqIGluY2x1ZGUvd2luZG93cy5oOgogICAgICAgICAgZnVuY3Rpb25zIHBvaW50ZXJzIGNhbiBub3QgYmUgcGFja2VkLgogICAgICAgICAgKGFubm95aW5nIHdhcm5pbmdzIHdpdGggZm9ydGhjb21taW5nIGdjYy0yLjYueCkKICAgICAgICAKICAgICAgICAqIGxvYWRlci9tYWluLmMgKEluaXRETEwpOiAKICAgICAgICAgIEZpeGVkIGEgcHJpbnRmIHN0YXRlbWVudC4gKGZvciBjb250cm9sLmV4ZSkgCgogICAgICAgICAgKEluaXRpYWxpemVMb2FkZWRETExzKTogCiAgICAgICAgICBkZWxldGVkIHNoYWRvdyBkZWZpbml0aW9uIG9mICAqd3BudC4KICAgICAgICAgIChCcmVha3MgbWFueSBwcm9ncmFtcywgYmVjYXVzZSBub3cgQ09NTURMRyB3aWxsIGJlCiAgICAgICAgICAgaW5pdGlhbGl6ZWQgOi0oCgogICAgICAgICogd2luZG93cy93aW4uYyAoU2V0V2luZG93VGV4dCk6IAogICAgICAgICAgYWRkZWQgbWlzc2luZyBicmVha3M7IChQRU5TQVRFIHN0YXJ0cykgCgogICAgICAgICogd2luZG93cy9ncmFwaGljcy5jIChGbG9vZEZpbGwpOiAKICAgICAgICAgIFByb3BlciBib3VuZGFyeXMuIChCQU5HQkFORyBzdGFydHMpIEZsb29kRmlsZV9yZWMgc2hvdWxkCiAgICAgICAgICBiZSByZXdyaXR0ZW4uCgogICAgICAgICogb2JqZWN0cy9mb250LmMgKEZPTlRfR2V0TWV0cmljcyk6IAogICAgICAgICAgVFlQTzogdXNlIGZvbnQtPnBlcmNoYXIgb25seSBpZiBpdCBpcyBkZWZpbmVkLiAoV1JJVEUgc3RhcnRzKQoKU3VuIEp1bmUgMTIsIFBldGVyIEJyb2FkaHVyc3QgKHBickB1YS5ud2wuYWMudWspCiAgICAgICAgY29udHJvbHMvc2Nyb2xsLmM6CiAgICAgICAgRml4ZXMgZm9yIGltcHJvdmVkIGJlaGF2aW91ciB3aGVuIGRyYWdnaW5nIHRodW1iOwogICAgICAgIEFkZGVkIFNCX1RIVU1CUE9TSVRJT04gbWVzc2FnZSB3aGVuIHRodW1iIGlzIHJlbGVhc2VkLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgSnVuICA3IDA4OjQxOjI3IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBsb2FkZXIvc2VsZWN0b3IuYyAoRml4dXBGdW5jdGlvblByb2xvZ3MpOiAKCU5ldyBmdW5jdGlvbiB0byBmaXh1cCBsb2FkZWQgRExMIGZ1bmN0aW9uIHByb2xvZ3MuICBJdCByZXBsYWNlcyB0aGUKCWRvIG5vdGhpbmcgY29kZSB3aXRoIGNvZGUgdGhhdCBsb2FkcyBEUyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkYXRhCglzZWdtZW50IGZvciB0aGUgRExMLgoKCSogbWlzYy9jdXJzb3IuYyAoTG9hZEN1cnNvcik6IAoJRGlzYWJsZWQgY3Vyc29yIGxvYWRpbmcgZnJvbSAuRVhFIG9yIC5ETEwuICBUaGUgY29kZSBuZWVkcyB0byBoYW5kbGUKCXRoZSBwb3NzaWJpbGl0eSBvZiBtdWx0aXBsZSBjdXJzb3JzIGluIGEgc2luZ2xlIGRpcmVjdG9yeS4gIEFsc28sCglpdCBzaG91bGQgY2hlY2sgdG8gc2VlIGlmIHRoZSBjdXJzb3IgaXMgdGhlIHJpZ2h0IHNpemUuCgoJKiBvYmplY3RzL2ZvbnQuYyAoRW51bUZvbnRzKTogCglDaGVja2VkIGZvciBscExvZ0ZvbnRMaXN0W2ldID09IE5VTEwKCgkqIG9iamVjdHMvZ2Rpb2JqLmMgKFNldE9iamVjdE93bmVyKTogCglSZW1vdmVkIHN0dWIuICBSZXBsYWNlZCB3aXRoIHNpbXBsZSByZXR1cm4gaW4gZ2RpLnNwZWMuICBUaGlzCglmdW5jdGlvbiBpcyBub3QgZGVmaW5lZCBmb3IgdGhlIHJldGFpbCB2ZXJzaW9uIG9mIFdpbmRvd3MuCgoJKiBtZW1vcnkvaGVhcC5jIChXSU4xNl9Mb2NhbEhhbmRsZURlbHRhKTogCglOZXcgZnVuY3Rpb24uICBUaGlzIGlzIHJlYWxseSBhIGR1bW15IHRoYXQgaW1pdGF0ZXMgdGhlIHByb3BlcgoJcmV0dXJuIHZhbHVlcy4KCgkqIGxvYWRlci9saWJyYXJ5LmMgKEdldFByb2NBZGRyZXNzKTogCglGaXhlZCBkZWZpbml0aW9uIG9mIElTX0JVSUxUSU5fRExMKCkgbWFjcm8uCgpNb24gSnVuICA2IDE4OjE1OjQwIDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBtaXNjZW11L2ludDIxLmMgKFNlZWtGaWxlKTogCglOZWVkZWQgdG8gcmV0dXJuIGN1cnJlbnQgcG9zaXRpb24gaW4gRFg6QVguCgoJKiB3aW5kb3dzL3V0aWxpdHkuYyAod2luZG93c193c3ByaW50Zik6IAoJQWRkZWQgc3VwcG9ydCBmb3IgJyMnIGluIGZvcm1hdCwgYW5kIGZpeGVkIGJ1ZyB3aXRoICJwdHIiIGJlaW5nCglpbmNyZW1lbnRlZCB0b28gbWFueSB0aW1lcy4KCgkqIG1pc2NlbXUvaW50MjEuYyAoT3BlbkV4aXN0aW5nRmlsZSk6IAoJQWRkIGNvZGUgdG8gaGFuZGxlIG9wZW5pbmcgZmlsZXMgcmVhZC1vbmx5IGFuZCB3cml0ZS1vbmx5LgoKCSogbG9hZGVyL3dpbmUuYzoKCVNlZ21lbnQgZml4dXBzIG5vdyBkb25lIGluIExvYWRJbWFnZSBpbnN0ZWFkIG9mIF9XaW5NYWluLiAgVGhpcwoJaXMgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgTG9hZExpYnJhcnkoKS4KClN1biBKdW4gIDUgMTc6MzQ6MjQgMTk5NCAgRXJpayBCb3MgKGVyaWtAaGFja3RpYy5ubCkKCgkqIFtsb2FkZXIvKl0KCQktIGZpeGVkOiBHZXRNb2R1bGVIYW5kbGUoKSBzb21ldGltZXMgcmV0dXJuZWQKCQkgIGEgd3JvbmcgaGFuZGxlLgoJCS0gZG9uJ3QgaW5pdCBkbGxzIHdoZW4gY3MgPT0gMCAobHpleHBhbmQsIGRvZXNuJ3QKCQkgIHNlZW0gdG8gaGF2ZSBhIGluaXQgZnVuY3Rpb24pCgkJLSBMb2FkTGlicmFyeSAmIExvYWRJbWFnZSBub3cgcmV0dXJuIGVycm9yIGluc3RlYWQKCQkgIG9mIHN0b3BwaW5nIHdpbmUuCgkJLSBtb3ZlZCBtb3N0IG9mIE5FLWZ1bmN0aW9ucyBpbnRvIG9uZSBmaWxlLgoJCS0gTG9hZExpYnJhcnkoKSB1c2VzIHdfZmlsZXMgbGlzdCBpbnN0ZWFkIG9mIGl0cwoJCSAgb3duIGxpc3QuCgkJLSBORSBleGVjdGFibGVzIGFyZSBub3cgZml4ZWQtdXAgYW5kIGluaXRpYWxpc2VkIHdoZW4KCQkgIGxvYWRlZCBpbnN0ZWFkIG9mIG9ubHkgb25jZSBiZWZvcmUgY2FsbGluZyBJbml0VGFzay4KCgkqIFttaXNjZW11L2ludDE1LmNdIFttaXNjZW11L2ludDMxLmNdCglBZGRlZC4JCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglTdHVicyBhZGRlZCBmb3Ige0dldHxTZXR9U2VsZWN0b3JMaW1pdCgpLCB7R2V0fFNldH1TZWxlY3RvckJhc2UoKS4KCgkqIFttaXNjL21haW4uY10KCVN0dWIgYWRkZWQgZm9yIElzUm9tTW9kdWxlKCkuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJU29tZSBjbGVhbnVwLCBhZGRlZCBoZWFwIGZvciByZXR1cm5pbmcgZGF0YS4KCkp1biA2LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbdG9vbHMvYnVpbGQuY10KCUNoYW5nZSBNQVhfT1JESU5BTFMJZGVmaW5lIHRvIGhpZ2hlciB2YWx1ZSwgMTI5OSBlbnRyaWVzLgoJKE1NU1lTVEVNIGRvZXNuJ3QgaGF2ZSBzdWNjZXNpdmUgbnVtYmVycywgc29tZSBhcmUgYXJvdW5kIDEyMDApLgoKCSogW3dpbmRvd3MvdXRpbGl0eS5jXQoJQnVnIGZpeCBpbiB3aW5kb3dzX3dzcHJpbnRmKCksICh0d2ljZSBpbmNyZW1lbnRzIC4uLikuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUJ1ZyBmaXggaW4gU2V0V2luZG93UG9zKCksIHJlZHJhdyB3YXMgZG9uZSBpZiBmbGFnCgkJd2FzIHNldCB0byBTV1BfTk9SRURSQVcgd2hpbGUgU1dQX1NIT1dXSU5ET1cpLgoKCSogW21pc2MvbWVzc2FnZS5jXSBbY29udHJvbHMvY29tYm8uY10KCUFkZCBhbiBJbnZhbGlkYXRlUmVjdCgpIGluIFdNX1NIT1dXSU5ET1cgdG8gc3RhdGlzZnkgdGhlIG5ldyAnc2F2ZXVuZGVyJy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJSW4gQ3JlYXRlV2luZG93RXgoKSwgZG8gU2V0TWVudSgpIGNhbGxzIGFmdGVyIHdpbmRvdyBjcmVhdGlvbiwKCQlqdXN0IGJlZm9yZSBzZW5kaW5nIHRvIFdNX05DQ0FMQ1NJWkUuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJSW4gZnVuY3Rpb24gU2V0TWVudSgpLCBub3cgdXNlIFNldFdpbmRvd1BvcygpIHdpdGggCgkJZmxhZ3MgU1dQX0ZSQU1FQ0hBTkdFRCB0byByZWFkanVzdCBtZW51IGFyZWEuCglGdW5jdGlvbiBNZW51QmFyQ2FsY1NpemUoKSByZWRvbmUuCgpTdW4gTWF5IDI5IDExOjA4OjI0IDE5OTQgIERhdmlkIEIuIFRob21hcyAgKGR0QHllbnRhLmFicS5ubS51cykKCiAgICAgICAgKiBbb2JqZWN0cy90ZXh0LmNdCiAgICAgICAgRml4ZWQgcHJvYmxlbXMgYXNzb2NpYXRlZCB3aXRoIERUX1dPUkRCUkVBSyBmbGFnLiAgU3RyaW5nIGxlbmd0aAogICAgICAgIHdhcyBub3QgYmVpbmcgcHJvcGVybHkgZGVjcmVtZW50ZWQgd2hlbiBsaW5lcyB3ZXJlIGZvbGRlZCwgYW5kCiAgICAgICAgd3JhcHBpbmcgd2FzIG5vdCBwZXJmb3JtZWQgd2hlbiBEVF9OT0NMSVAgYW5kIERUX05PUFJFRklYIHdlcmUKICAgICAgICBib3RoIG9uIGluIGFkZGl0aW9uIHRvIERUX1dPUkRCUkVBSy4gIFdpbmRvd3MgZG9lcyB3cmFwcGluZyBpbgogICAgICAgIHRoaXMgY2FzZSwgYW5kIG5vdyBzbyBkb2VzIHdpbmUuCgpTdW4gSnVuICA1IDE5OjE3OjQ5IDE5OTQgIE9sYWYgRmxlYmJlICAob2xhZkBkcmFnb24pCgogICAgICAgICogW2VkaXQuY10KICAgICAgICBjcDEgd2FzIHVuaW5pdGlhbGl6ZWQgaWZmIGxpbmVubyA9PSAwCgogICAgICAgICogIEZpbmRGaWxlIHRlc3RzIGZvciBleGlzdGFuY2Ugb2YgZmlsZSBldmVuIGlmIGEgZnVsbAogICAgICAgICAgIGZpbGVuYW1lIHdhcyBzdXBwbGllZC4gV2hhdCBhYm91dCB1bml4IGZpbGUgbmFtZXM/CgogICAgICAgICogW2NvbnRyb2xzL2xpc3Rib3ggXQogICAgICAgIHduZFB0ciB3YXMgdW5pbml0aWFsaXplZCBmb3IgTEJfU0VUVE9QSU5ERVgKCiAgICAgICAgKiBbbWlzYy9wcm9wZXJ0eS5jXSAgICAgCiAgICAgICAgRG8gbm90IGZyZWUgbHBQcm9wLiBJcyBpdCByZWFsbHkgYWxsb2NhdGVkIGJ5IG1hbGxvYz8KCXtlZGl0ZWQgYnkgQm9iIEFtc3RhZHQ6IGNoYW5nZWQgZnJlZSgpIHRvIEdsb2JhbEZyZWUoKX0KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IE1heSAyOCAxMjowMzoyMyAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogbWlzY2VtdS9pbnQyMS5jIChPcGVuRXhpc3RpbmdGaWxlKTogCglPcGVuRXhpc3RpbmdGaWxlIG5lZWRlZCB0byByZXR1cm4gaGFuZGxlIGluIEFYIHJlZ2lzdGVyIGluc3RlYWQKCW9mIHRoZSBCWCByZWdpc3Rlci4KCgkqIG1pc2NlbXUvaW50MjEuYyAoaW9jdGxHZXREZXZpY2VJbmZvKTogCglBZGRlZCBhIGxpdHRsZSBjb2RlIHRvIGdpdmUgYSBmYWtlIHJlc3VsdCBmb3Igbm9ybWFsIGZpbGVzLgoKV2VkIE1heSAyNSAyMTo1NTozOCAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW21lbW9yeS9nbG9iYWwuY10KCXJldHVybiB2YWx1ZSBmcm9tIEdsb2JhbFNpemUgd2FzIGNvbXBsZXRlbHkgd3JvbmcuCgoJKiBbbWlzY2VtdS9pbnQyMS5oXQoJZml4ZWQgYnVnIGluIEZpbmRGaXJzdC4gIERpcmVjdG9yeSBwb2ludGVyIChkcCkgd2FzIG5vdCBwbGFjZWQgaW4KCWR0YSBjb3JyZWN0bHkuCgoJKiBbdG9vbHMvYnVpbGQuY10KCWZpeGVkIGNyZWF0aW9uIG9mIHBvcC5oIHRvIGd1YXJhbnRlZSB0aGF0IGZsYWdzIGFyZSByZXN0b3JlZCBjb3JyZWN0bHkuCgoJKiBbbWlzYy9jb21tLmNdCgljaGFuZ2VkIGFsbCBvY2N1cmFuY2Ugb2Ygc3RybmNtcCgpIHRvIHN0cm5jYXNlY21wKCkuCglCdWlsZENvbW1EQ0IoKSBzaG91bGQgbm90IHJlcXVpcmUgdGhhdCBPcGVuQ29tbSgpIGJlIGNhbGxlZCBmaXJzdC4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUhlYXAgaW5pdGlhbGl6ZWQgdG8gc2l6ZSBvZiBmdWxsIHNlZ21lbnQgbGVzcyBzdGFjayBzaXplIGFuZCAKCWF1dG9tYXRpYyBkYXRhIHNpemUuCgpTYXQgTWF5IDI4IDA5OjE0OjMzIDE5OTQgIFJpY2sgU2xhZGtleSAgKGpyc0B3b3JsZC5zdGQuY29tKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUNvcnJlY3QgdHlwb3MgaW4gTGlzdEJveFJlc2V0Q29udGVudCB3aGVyZSBscGxzIHZhcmlhYmxlIGlzCgl1c2VkIHdoZXJlIGxzbHMyIHZhcmlhYmxlIGlzIG1lYW50LiAgRG9uJ3QgY2FsbCBVU0VSX0hFQVBfRlJFRQoJdHdpY2Ugb24gdGhlIHNhbWUgaGFuZGxlIGlmIGhEYXRhIGFuZCBoTWVtIGFyZSB0aGUgc2FtZS4KCgkqIFtkZWJ1Z2dlci9vcGNvZGVzL2kzODYtZGlzLmNdCglBZGQgbmV3IG5hbWUgYXJyYXkgbmFtZXNfcm13IGZvciB0YWJsZSBkcml2ZW4gZGVjb2Rpbmcgb2YgdGhlCgkxNi1iaXQgbW9kL3JtIGZpZWxkLiAgT21pdCBsYXJnZSBjYXNlIHN0YXRlbWVudCBpbiBPUF9FIGFuZAoJcmVwbGFjZSB3aXRoIGFycmF5IHJlZmVyZW5jZSB0byBtYXRjaCBleGlzdGluZyBjb2Rpbmcgc3R5bGUuCglBZGQgbmV3IHN0YXRpYyB2YXJpYWJsZSBtYWNoaW5lIHdpdGggdmFsdWUgMjg2IG9yIDM4NiB0bwoJY29ycmVjdGx5IGRlY29kZSBtb2Qvcm0gZmllbGQgaW4gZWl0aGVyIDE2IG9yIDMyIGJpdCBtb2Rlcy4KCVNldCBpdCBpbiBwcmludF9pbnNuX2l7MiwzfTg2LiAgSW4gT1BfRSB1c2UgaXQgdG8gZGVjaWRlIGhvdwoJdG8gZGVjb2RlIG1vZC9ybS4gIFdoaWxlIHRoZSBjb2RlIHdhcyBjb3JyZWN0IGZvciAxNiBiaXQgY29kZSwKCWl0IHdhcyBpbXByb3Blcmx5IGRlY29kaW5nIG1vZC9ybSBmaWVsZHMgb24gd29yZCBwcmVmaXhlZAoJMzIgYml0IGluc3RydWN0aW9ucy4KCgkqIFtkZWJ1Z2dlci9kZWJ1Zy5sXQoJUmVjb2duaXplIG5ldyB0b2tlbiBBQk9SVC4gICBSZWNvZ25pemUgc2luZ2xlIGxldHRlcnMgJ3AnCglhbmQgJ3EnIGFzIHRva2Vucy4KCgkqIFtkZWJ1Z2dlci9kYmcueV0KCUFkZCBuZXcgdG9rZW4gQUJPUlQuICBBbGxvdyBwcmludCBjb21tYW5kIHRvIGJlIGludm9rZWQgYnkKCSdwJyBhbmQgcXVpdCBjb21tYW5kIGJ5ICdxJywgYWxhIEdEQi4gIENoYW5nZSBsb3RzIG9mICd9OycKCXRvIGp1c3QgJ30nLiAgQWRkIHN0YXRpYyBkdW1teV9yZWdzIHRvIHdpbmVfZGVidWcgc28gdGhhdAoJd2luZV9kZWJ1ZygwLCBOVUxMKSBkb2Vzbid0IGNvcmUgZHVtcCB3aXRoIHFtYWdpYy4KCgkqIFtkZWJ1Z2dlci9pbmZvLmNdCglDb3JyZWN0IHN5bnRheCBvZiBicmVhayBjb21tYW5kIGluIGhlbHB0ZXh0IGFuZCBvbWl0IGZvcm1lcgoJY29tbWVudCBhYm91dCBwcm9iYWJsZSBidWdnaW5lc3Mgb2YgdGhlIGRpc2Fzc2VtYmx5IHNpbmNlIGl0CglpcyBub3cgY29ycmVjdC4gIENoYW5nZSBmcHJpbnRmIG9mIGZpcnN0IGJhY2t0cmFjZSBzdGFjawoJZnJhbWUgdG8gbWF0Y2ggdGhhdCBvZiB0aGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IGZyYW1lcy4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUNoYW5nZSBjb25zdHJ1Y3Rpb24gb2YgY29tbWFuZCBsaW5lIGluIENyZWF0ZVBTUCBmcm9tIGNyZWF0aW5nCglhIHN0cmluZyB0aGF0IGxvb2tzIGxpa2UgImFyZzEgYXJnMiBcciIgdG8gImFyZzEgYXJnMiIuICBBIERPUwoJUFNQIGNvbW1hbmQgbGluZSBsb29rcyBsaWtlICIgYXJnMSBhcmcyXHIiIHdpdGggdGhlIGxlbmd0aCBub3QKCWluY2x1ZGluZyB0aGUgdHJhaWxpbmcgIlxyIiBidXQgdGhhdCBpcyBub3QgaG93IFdpbmRvd3MgZG9lcyBpdC4KCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJQ2hhbmdlIHVzZXMgb2YgJXMgdG8gcHJpbnQgc3RyaW5ncyBpbiBHZXRNb2R1bGVIYW5kbGUgdG8gJXggc28KCXRoYXQgc3RyaW5nIElEcyBkb24ndCBjYXVzZSBhIGNvcmUgZHVtcCB3aXRoIHFtYWdpYy4gIEhhbmRsZQoJY29udmVydGluZyBhIHN0cmluZyBpZCB0byBhIGxpdGVyYWwgbW9kdWxlIGhhbmRsZS4gIEZvcgoJZXhhbXBsZSwgR2V0TW9kdWxlSGFuZGxlKChMUFNUUikgMHg1Nykgbm93IHJldHVybnMgMHg1NyBpZgoJaXQgaXMgYSByZWFsIG1vZHVsZSBoYW5kbGUuCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglJbiBNZXNzYWdlQm94LCB0cmFuc2xhdGUgYSBOVUxMIHRpdGxlIGFyZ3VtZW50IHRvIHRoZSBzdHJpbmcgIkVycm9yIi4KCgkqIFttaXNjL3Byb2ZpbGUuY10KCUluIEdldFNldFByb2ZpbGUgdHJhbnNsYXRlIGEgTlVMTCBEZWZhdWx0IGFyZ3VtZW50IHRvICIiLiAgQW55CgljYWxsZXIgd2hvc2UgRGVmYXVsdCBhcmd1bWVudCBpcyBOVUxMIGlzIGJ1Z2d5LCBidXQgQ0hBUk1BUCBkb2VzIGl0Cglhbnl3YXkuCgoJKiBbb2JqZWN0cy9mb250LmNdCglBZGQgTlVMTCBwb2ludGVyIGNoZWNrcyBpbiBFbnVtRm9udEZhbWlsaWVzIHRvIHByZXZlbnQgY29yZSBkdW1wcy4KClNhdCBNYXkgMjggMjA6MDE6NTEgMTk5NCBKb24gVG9tYnMgKGpvbkBndGV4MDIudXMuZXMpIAoKCSogTmV3IG9wdGlvbnMvcmVzb3Vyc2VzIG5vc2F2ZXVuZGVycyBhbmQgbm9iYWNraW5nc3RvcmUuICBCeSAKCWRlZmF1bHQgYmFja2luZ3N0b3JlIGFuZCBzYXZldW5kZXJzIGFyZSBub3cgZW5hYmxlZCwgdGhlc2UgdXNlIAoJbW9yZSBtZW1vcnkgYnV0IGF2b2lkcyB0aG9zZSBzbG93IChzb21ldGltZXMgbXVsdGlwbGUpIHJlZHJhd3MgCgljYXVzZWQgYmUgZXhwb3N1cmUgZXZlbnRzLgoKTWF5IDMwLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWlzYy9kcml2ZXIuY10gTmV3IGZpbGUKCVNrZWxldG9uIGZvciAnSW5zdGFsbGFibGUgV2luZSBEcml2ZXJzJyBmdW5jdGlvbnMuIDotKQoJKiBbbWlzYy9hdWRpby5jXSBOZXcgZmlsZQoJU2tlbGV0b24gZm9yIGJhc2ljICdBdWRpbyBEcml2ZXInIGZ1bmN0aW9ucy4KCSogW21pc2MvbmV0d29yay5jXSBOZXcgZmlsZQoJU3R1YnMgZm9yIGZldyBuZXR3b3JraW5nIGZ1bmN0aW9ucy4KCgkqIFttaXNjL21tc3lzdGVtLmNdCglNb3JlIGNvZGluZyAuLi4gYSBkdXN0IGluIGEgZ2FsYXh5IC4uLgoJKiBbbWlzYy9zaGVsbC5jXQoJU29tZSBjb2RpbmcgZm9yICdSZWdYWFgnIGZ1bmN0aW9ucyAuLi4gYSBkdXN0IGluIHRoZSB3aW5kIC4uLgoKCSogW21pc2MvcHJvZmlsZS5jXQoJQnVnIGZpeCBpbiBHZXRTZXRQcm9maWxlKCksIGJhZCBlbnVtZXJhdGlvbiBpZiBLZXlOYW1lID09IE5VTEwuCgoJKiBbb2JqZWN0cy9nZGkuY10KCU5ldyBmdW5jdGlvbiBDcmVhdGVEaXNjYXJkYWJsZUJpdG1hcCgpLCBpdCBqdXN0IGNhbGxpbmcgCglDcmVhdGVDb21wYXRpYmxlQml0bWFwKCkgZm9yIG5vdy4gSXQncyBnZXQgJ2Nsb2NrLmV4ZScgcnVubmluZyAhIDotKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCSogW2NvbnRyb2xzL2NvbWJvLmNdCglOZXcgZm9udCBtZW1iZXIgYXNzaWduZWQgdG8gU1lTVEVNX0ZPTlQgYXMgZGVmYXVsdC4KCUFkZGVkIHByb2Nlc3NpbmcgZm9yIFdNX1NFVEZPTlQgbWVzc2FnZTsKCgpUdWUgTWF5IDMxIDIwOjM0OjI1IEVEVCAxOTk0ICBKb2huIFJpY2hhcmRzb24gPGpyaWNoYXJkQGNzLnVtbC5lZHU+CgogICAgICAgICogW3dpbmRvd3MvZXZlbnQuY10KICAgICAgICBBZGRlZCBBc3luY01vdXNlQnV0dG9uc1N0YXRlcyBhcnJheSBmb3IgR2V0QXN5bmNLZXlTdGF0ZS4KCiAgICAgICAgKiBbd2luZG93cy9rZXlib2FyZC5jXQogICAgICAgIEltcGxlbWVudGVkIGJlZ2lubmluZyBvZiBHZXRBc3luY0tleVN0YXRlLgoKV2VkIE1heSAyNSAyMzozNTowMyAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgogICAgICAgICogW29iamVjdHMvbWV0YWZpbGUuY10gW2luY2x1ZGUvbWV0YWZpbGUuaF0KICAgICAgICAgIFt3aW5kb3dzL21hcHBpbmcuY10gW29iamVjdHMvY2xpcHBpbmcuY10gW29iamVjdHMvYml0Ymx0LmNdCiAgICAgICAgICBbd2luZG93cy9kYy5jXQogICAgICAgIEZ1cnRoZXIgbWV0YWZpbGUgc3VwcG9ydC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIE1heSAyMyAxNTowNzozNiAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJQWxsb2NhdGUgaGVhcCBhbmQgc3RhY2sgc2VnbWVudHMgYXMgNjRrLgoKU2F0IE1heSAyMSAwMToxNTo0OSAxOTk0ICBSaWNrIFNsYWRrZXkgIChqcnNAd29ybGQuc3RkLmNvbSkKCiAgICAgICAgKiBbbG9hZGVyL3NlbGVjdG9yLmNdCiAgICAgICAgQ29ycmVjdCB0eXBvcyB3aGVyZSBtZW1jcHkgaXMgdXNlZCBpbnN0ZWFkIG9mIG1lbXNldC4KCiAgICAgICAgKiBbbG9hZGVyL3Jlc291cmNlLmNdCiAgICAgICAgQWxsb3cgZm9yIGxlZ2l0aW1hdGUgY2FzZXMgd2hlcmUgYmlTaXplSW1hZ2UgaXMgMCBpbiBMb2FkSWNvbgogICAgICAgIGJ5IGNhbGN1bGF0aW5nIHRoZSB2YWx1ZSB3aGVuIHRoZSBiaXRtYXAgaXMgbm90IGNvbXByZXNzZWQuCgogICAgICAgICogW21pc2NlbXUvaW50MjEuY10KICAgICAgICBGaXggTlVMTCBkZXJlZmVyZW5jZSBjYXVzZWQgYnkgc3VwZXJmbHVvdXMgRE9TX2Nsb3NlZGlyIGluIEZpbmROZXh0LgoKICAgICAgICAqIFtsb2FkZXIvcmVzb3VyY2UuY10KICAgICAgICBOZXcgZnVuY3Rpb24gdHlwZV9tYXRjaCB0byBoYW5kbGUgc3RyaW5nIHJlc291cmNlIHR5cGVzIGFzCiAgICAgICAgd2VsbCBhcyBJRHMuICBJbiBhZGRpdGlvbiwgY29tcGFyZSBvbmx5IGxvdyA0IGJpdHMgb2YgdHlwZV9pZAogICAgICAgIHdoZW4gYm90aCBudW1iZXJzIGFyZSBJRHMgc28gdGhhdCAweDAwMDIgbWF0Y2hlcyAweDgwMDIuCiAgICAgICAgSW4gRmluZFJlc291cmNlQnlOdW1iZXIgYW5kIEZpbmRSZXNvdXJjZUJ5TmFtZSB1c2UgdHlwZV9tYXRjaAogICAgICAgIGluc3RlYWQgb2YgY29tcGFyaW5nIG51bWJlcnMuICBJbiBGaW5kUmVzb3VyY2UgaGFuZGxlIHRoZQogICAgICAgICIjbnVtYmVyIiBzeW50YXggYW5kIGVtcHR5IHN0cmluZ3MgaW4gYm90aCB0aGUgcmVzb3VyY2UgYW5kCiAgICAgICAgdHlwZSBuYW1lcy4KCk1vbiBNYXkgMjMgMDA6NDg6MjUgMTk5NCAgUmljayBTbGFka2V5ICAoanJzQHdvcmxkLnN0ZC5jb20pCgogICAgICAgICogW3dpbmRvd3MvZGlhbG9nLmNdCiAgICAgICAgRml4IGluYWR2ZXJ0ZW50IHByaW50aW5nIG9mIHN0cmluZyBJRHMgYXMgc3RyaW5ncy4KCk1heSAyMywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL21lbnUuY10KCU5ldyBmdW5jdGlvbnMgR2V0TWVudUl0ZW1Db3VudCgpLCBHZXRNZW51SXRlbUlEKCkuCgkJR2V0TWVudVN0cmluZygpICYgSGlsaXRlTWVudUl0ZW0oKS4KCUJ1ZyBmaXggaW4gQ2hlY2tNZW51SXRlbSgpLgoJRnVuY3Rpb24gU2V0TWVudSgpIG5vdyBtYWtlIGNsaWVudCBhcmVhIHJlY2FsYyBpZiBtZW51IHJlbW92ZWQuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUJ1ZyBmaXggaW4gU2V0V2luZG93UG9zKCksIG5vIG1vcmUgWE1hcHBpbmcgb3IgWENvbmZpZ3VyaW5nCW9mCgkJd2luZG93cyB3aXRoIGluaXRpYWwgd2lkdGggb3IgaGVpZ2h0IGVxdWFsIHplcm8uCgoJKiBbb2JqZWN0cy9nZGlvYmouY10KCU5ldyBmdW5jdGlvbiBFbnVtT2JqZWN0cygpLCB1c2luZyBuZXcgbHBQZW5CcnVzaExpc3QgYnVpbGR1cAoJCWZyb20gY2FsbHMgdG8gbmV3IGZ1bmN0aW9uIEdESV9BcHBlbmRUb1BlbkJydXNoTGlzdCgpLgoJCSgncGJydXNoLmV4ZScgZG9uJ3Qgc2hvdyBpdHMgZmFjZSB5ZXQgISAuLi4gOi0oICkKCU5ldyBFTVBUWSBTVFVCIGZvciBmdW5jdGlvbiBTZXRPYmplY3RPd25lcigpLAoJCSgnbXBsYXllci5leGUnIGNhbGwgaXQgdmlhIEdldFByb2NBZGRyZXNzKCkgLi4uKQoKCSogW29iamVjdHMvZm9udC5jXQoJTmV3IGludGVybmFsIGZ1bmN0aW9ucyBQYXJzZUZvbnRQYXJtcygpICYgSW5pdEZvbnRzTGlzdCgpLgoJRW51bUZvbnRzKCkgJiBFbnVtRm9udEZhbWlsaWVzKCkgZW51bWVyYXRlcyBmb250cyAobm8gbW9yZSBkdW1taWVzKS4KCUZPTlRfTWF0Y2hGb250IG5vdyBtYWtlIHJldHJpZXMgdG8gZmluZCBjbG9zZXN0LXNtYWxsZXN0IGZvbnQuCgkJKCdjaGFybWFwLmV4ZScgY2FuIG5vdyBzaG93IHRoZSBkaWZmZXJlbnRzIGZvbnRzIGF2YWlsYWJsZSkKCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJVXNlIHNtYWxsIGRvcyBPQk1fT0xEX0NMT1NFIGJ1dHRvbiBmb3IgTURJIHdpbmRvd3MuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXSBbb2JqZWN0cy9iaXRtYXAuY10KCVN0YXJ0IHRvIHJlbW92ZSBvYnNvbGV0ZSBnbG9iYWxzIHN1Y2ggWFRfc2NyZWVuIC4uLgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglNYWtlIGZ1bmN0aW9uIEdldFByb2NBZGRyZXNzKCkgd29ya2luZyBhbHNvIHdpdGggYnVpbHRpbiBETExzLgoKVHVlIE1heSAyNCAyMDoxODowMiAxOTk0ICBFcmlrIEJvcyAoZXJpa0BoYWNrdGljLm5sKQoKICAgICAgICAqIFtpZjE2MzIvc3lzdGVtLnNwZWNdIFtpZjE2MzIvdG9vbGhlbHAuc3BlY10KICAgICAgICBzeXN0ZW0uZGxsICYgdG9vbGhlbHAuZGxsIGFkZGVkLgoKICAgICAgICAqIFtsb2FkZXIvbGlicmFyeS5jXQogICAgICAgIE1vZGlmaWVkIEdldE1vZHVsZUZpbGVOYW1lKCkgdG8gcmV0dXJuIHRoZSBmdWxsCiAgICAgICAgZmlsZW5hbWUuCiAgICAgICAgQWRkZWQgYSBjaGVjayB0byBMb2FkTGlicmFyeSgpIHRvIHByZXZlbnQgbG9hZGluZwogICAgICAgIGJ1aWx0IGluIGRsbHMuIChlZy4gdXNlci5leGUpCiAgICAgICAgQWRkZWQgYSBjaGVjayB0byBGcmVlTGlicmFyeSgpIHRvIHByZXZlbnQgYnVpbHQtaW4KICAgICAgICBkbGxzIGZyb20gYmVpbmcgZnJlZWQuCiAgICAgICAgTW9kaWZpZWQgR2V0UHJvY0FkZHJlc3MoKSB0byBzdXBwb3J0IGJ1aWx0aW4gZGxscy4KCiAgICAgICAgKiBbbG9hZGVyL3NpZ25hbC5jXSBbbWlzY2VtdS9pbnQyZi5jXQogICAgICAgIEFkZGVkID0+IHBpZmVkaXQgcnVucy4KCiAgICAgICAgKiBbbWlzYy9kb3NfZnMuY10KICAgICAgICBBZGRlZCBhIE5VTEwtcHRyIGNoZWNrIHRvIERPU19jbG9zZWRpcigpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgTWF5IDE3IDIzOjAzOjE2IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbd2luZG93cy9kY2UuY10KCUZpeGVkIGJ1ZyB3aXRoIGRjZSBpbml0aWFsaXphdGlvbiB0aGF0IHdhcyBjYXVzaW5nIGRpYWxvZyBib3hlcyB0byBub3QKCWJlIGRpc3BsYXllZC4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUJldHRlciBmaXggZm9yIGJ1ZyBmb3VuZCBieSBNYXJ0aW4uCgpTYXQgTWF5IDE0IDE5OjQ4OjM5IDE5OTQgIFJpY2sgU2xhZGtleSAgKGpyc0B3b3JsZC5zdGQuY29tKQoKICAgICAgICAqIFsgbWVtb3J5L2hlYXAuYyBdCiAgICAgICAgUmVkaXJlY3QgSEVBUF9SZUFsbG9jIGNhbGxzIHdpdGggTlVMTCBhcmd1bWVudCB0byBIRUFQX0FsbG9jLgoKTWF5IDE2LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbb2JqZWN0cy9mb250LmNdCglNYWtlIEVudW1Gb250cygpIGNhbGxpbmcgYSBjYWxsYmFjayB3aXRoIGR1bW15IGZvbnRzIC4uLiA6LSkKCgkqIFtvYmplY3RzL3RleHQuY10KCUFkZCBFbXB0eSBTdHViIGZvciBFeHRUZXh0T3V0KCksIHdoaWNoIHRlbXBvcmFyZWx5IGNhbGwgVGV4dG91dCgpLgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJVGVtcG9yYXJlbHkgZ28gYXJvdW5kIGJ1ZyBpbiBDYWxsV2luZG93UHJvYygpLCB5b3Ugd2lsbCBzZWUgcHJpbnRmcy4KCgkqIFtjb250cm9scy9lZGl0LmNdCglNYWtlIEVESVQgY29udHJvbHMgZm9jdXNlZCBieSBhIG1vdXNlIGNsaWNrLgoKCSogW21pc2MvcHJvcGVydHkuY10KCUJ1ZyBGaXggaW4gZnVuY3Rpb24gRW51bVByb3BzKCksIGJldHRlciB1c2Ugb2YgQ2FsbEJhY2sxNigpLgoKCSogW21pc2MvbW1zeXN0ZW0uY10KCUJhc2ljIFNrZWx0b24ncyBmb3IgTUNJIG1lc3NhZ2VzIGRpc3BhdGNoaW5nIGZ1bmN0aW9uLgoKU3VuIE1heSAxNSAxNjoxNToxNyAxOTk0ICBFcmlrIEJvcyAoZXJpa0BoYWNrdGljLm5sKQoKICAgICAgICAqIFt3aW5kb3dzL3V0aWxpdHkuY10KICAgICAgICBBZGRlZCB3aW5kb3dzX3dzcHJpbnRmKCkgZm9yIHRoZSBlbXVsYXRvciwgd3NwcmludGYoKSBpcwogICAgICAgIGZvciBsaWJ3aW5lLgoKU2F0IE1heSAxNCAyMjoxNjo0MCAxOTk0ICBSaWNrIFNsYWRrZXkgIChqcnNAd29ybGQuc3RkLmNvbSkKCiAgICAgICAgKiBbbWlzYy9jdXJzb3IuY10KICAgICAgICBGaXggcG9pbnRlciBwcm9ibGVtcyBpbiBMb2FkQ3Vyc29yIGxlYWRpbmcgdG8gaGVhcCBjb3JydXB0aW9uLgoKICAgICAgICAqICBbIGNvbnRyb2xzL21lbnUuYyBdCiAgICAgICAgRml4IHR3byBOVUxMIGRlcmVmZXJlbmNpbmcgYnVncy4KClN1biBNYXkgMTUgMjA6MDc6NDggMTk5NCAgUmljayBTbGFka2V5ICAoanJzQHdvcmxkLnN0ZC5jb20pCgogICAgICAgICogW29iamVjdHMvZm9udC5jXQogICAgICAgIEZpeCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2luZyBidWcgaW4gR2V0Q2hhcldpZHRoLgoKICAgICAgICAqIFtsb2FkZXIvcmVzb3VyY2UuY10KICAgICAgICBGaXggdW5kZXItYWxsb2NhdGlvbiBvZiBtZW1vcnkgaW4gTG9hZEFjY2VsZXJhdG9ycy4KCiAgICAgICAgKiBbd2luZG93cy9jbGFzcy5jXQogICAgICAgIElnbm9yZSBuZWdhdGl2ZSBzaXplcyBmb3IgZXh0cmEgZmllbGRzIGluIFJlZ2lzdGVyQ2xhc3MuCgpTdW4gTWF5IDE1IDA2OjM1OjAzIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCiAgICAgICAgKiBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbaW5jbHVkZS9tZXRhZmlsZS5oXSBbaW5jbHVkZS93aW5kb3dzLmhdCiAgICAgICAgICBbb2JqZWN0cy9nZGlvYmouY10gW29iamVjdHMvYnJ1c2guY10gW29iamVjdHMvcGVuLmNdCiAgICAgICAgICBbb2JqZWN0cy90ZXh0LmNdIFtvYmplY3RzL2RjdmFsdWVzLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCiAgICAgICAgICBbd2luZG93cy9kYy5jXSBbd2luZG93cy9tYXBwaW5nLmNdCiAgICAgICAgQmVnaW5uaW5ncyBvZiBtZXRhZmlsZSBzdXBwb3J0LgoKICAgICAgICAqIFttaXNjL2ZpbGUuY10KICAgICAgICBDb3JyZWN0ZWQgc3BlbGxpbmcgb2YgX2xjcmVhdC4KCiAgICAgICAgKiBbY29udHJvbHMvZWRpdC5jXQogICAgICAgIE1pbm9yIGJ1ZyBmaXhlcy4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNYXkgOSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJTWFrZSB0aHVtYnRyYWNrIGJ1dHRvbiBkaXNhcHBlYXIgaWYgc2Nyb2xsIGJveCByYXRpbyA8IDM6MS4KCU1ha2UgYXJyb3cgYnV0dG9ucyByZWN0YW5ndWxhciBpZiBzY3JvbGwgYm94IHJhdGlvIDwgMjoxLgoJQWRkIGNvZGUgZm9yIFNCU19UT1BBTElHTiwgU0JTX0JPVFRPTUFMSUdOLCAKCQkJCVNCU19MRUZUQUxJR04gJiBTQlNfUklHSFRBTElHTi4KCUJ1ZyBmaXggaW4gTkNfQ3JlYXRlU2Nyb2xsQmFycygpLCBubyBtb3JlIGJpZ2J1dHQgaW4gY2FsZW5kYXIuZXhlLi4uIDotKQoKCSogW2xvYWRlci9saWJyYXJ5LmNdIFtsb2FkZXIvdGFzay5jXSBbbWlzYy9leGVjLmNdCglDb250aW51ZSBwbGF5aW5nIGFyb3VuZCB0cnlpbmcgdG8gZ2V0IGEgc2Vjb25kIHRhc2sgcnVubmluZy4KCgkqIFt3aW5kb3dzL21kaS5jXQoJQ2hhbmdlIE9CTV9DTE9TRSBmb3IgT0JNX09MRF9DTE9TRSwgYSBzbWFsbGVyIGRvdCBidXR0b24gd2hlbiBtYXhpbWl6ZWQuCgoJKiBbZXZlcnl3aGVyZV0KCUFkZGluZyBwcmV2aW91cyB3b3JrcyBvZiB0aGUgQXByIDI1LCA5NC4KClR1ZSBNYXkgMTAgMTg6MDk6MTQgMTk5NCBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW2lmMTYzMi9tbXN5c3RlbS5zcGVjXSBbbWlzYy9tbXN5c3RlbS5jXSBbaW5jbHVkZS9tbXN5c3RlbS5oXQoJQWRkZWQgTWFydGluJ3MgbW1zeXN0ZW0uZGxsIHN0dWJzLgoKCSogW21pc2Mvc291bmQuY10KCUFkZGVkIHJlbWFpbmluZyBzdHVicyBmb3Igc291bmQuZGxsLgoKCSogW2lmMTYzMi9zaGVsbC5zcGVjXSBbbWlzYy9zaGVsbC5jXQoJRml4ZWQgcHJvdG90eXBlcyAoSSBmb3VuZCB0aGVtIGluIEJDIDQpIGFuZCBhZGRlZCBTaGVsbEFib3V0KCkKCWFuZCBBYm91dERsZ1Byb2MoKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTWF5IDEsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglBZGQgWFVuZ3JhYlBvaW50ZXIoKSAmIFhVbmdyYWJTZXJ2ZXIoKSBpbiB3aW5lX2ZhdWx0KCkuCgpGcmkgQXByIDIyIDE5OjMwOjA4IDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCWNvbG9yX3N0cmV0Y2goKSByZXdyaXR0ZW4gdG8gdXNlIGludHMgb25seS4gKmZhc3QhKgoJQkxBQ0tPTldISVRFICYgV0hJVEVPTkJMQUNLIHN0cmV0Y2htb2RlcyByZWRpcmVjdGVkIHRvCgl1c2UgY29sb3Jfc3RyZXRjaCgpLgoKTW9uIE1heSAgMiAyMTozOTo0MyAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW2NvbnRyb2xzL21lbnUuY10KCVNldFN5c01lbnUoKSBhZGRlZC4KCgkqIFttaXNjL2N1cnNvci5jXQoJR2V0Q3Vyc29yKCkgYWRkZWQuCgoJKiBbbWlzYy9tYWluLmNdCglTd2FwTW91c2VCdXR0b24oKSBhZGRlZCwgKE5PUCkuCgoJKiBbd2luZG93cy93aW4uY10KCUdldERlc2t0b3BId25kKCkgYWRkZWQuCgoJKiBbaWYxNjMyLypzcGVjXQoJQWRkZWQgbm90IGltcGxlbWVudGVkIGZ1bmN0aW9ucyBkZWZzIGFzIGNvbW1lbnQuCgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCUNoYW5nZSBXU0FHZXRYYnlZKCkgZnVuY3Rpb25zIHRvIG5vbi1ibG9ja2luZyBvbmVzLAoJQWRkZWQgV1NBQXN5bmNTZWxlY3QoKS4gCgkoV1NBIGZ1bmN0aW9ucyBjYW4ndCBiZSBjYW5jZWxlZCB5ZXQpLgoKV2VkIEFwciAyMCAyMzo1ODo1OCAxOTk0ICBTY290dCBBLiBMYWlyZCAgKHNjb3R0QGN1cmx5KQoKCSogbWlzYy9wcm9maWxlLmM6IEZpeGVkIGJ1ZyB3aXRoIEdldEluaUZpbGVOYW1lIHJldHVybmluZyB3cm9uZwoJcGF0aCB3aGVuIGdpdmVuIGEgc2ltcGxlIGZpbGUgbmFtZS4gIEZpeGVkIEdldFNldFByb2ZpbGUgdG8gYWxsb3cKCWVudW1lcmF0aW5nIGFsbCBrZXkgbmFtZXMgd2hlbiBLZXlOYW1lIGlzIG51bGwuCgpBcHIgMjUsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJQWRkIHByb3RlY3Rpb24gdG8gQml0Qmx0KCkgJiBTdHJldGNoQmx0KCkgZm9yIHdpZHRoIG9yIGhlaWdodCA9IDAuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUF2b2lkIHBhaW50aW5nIGluIE5DX0RvTkNQYWludCgpIGlmIElzV2luZG93VmlzaWJsZSgpLgoJU2ltcGxpZnkgTkNfVHJhY2tNb3VzZU1lbnVCYXIoKSBiZWNhdXNlIGNvZGUgbW92ZWQgdG8gTWVudUZvY3VzTG9vcCgpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglDcmVhdGVXaW5kb3dFeCgpICYgRGVzdHJveVdpbmRvdygpIG5vdyBjYWxsIHJlc3BlY3RpdmVseQoJCUFkZFdpbmRvd1RvVGFzaygpICYgUmVtb3ZlV2luZG93RnJvbVRhc2soKS4KCU5ldyBlbXB0eSBzdHViIGZvciBmdW5jdGlvbiBBbnlQb3B1cCgpLgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglCdWcgRml4IDogR2V0TW9kdWxlRmlsZU5hbWUoKSBub3cgcmV0dXJuIGZ1bGwgcGF0aCBmaWxlbmFtZS4KCgkqIFtpbmNsdWRlL21lbnUuaF0gW2NvbnRyb2xzL21lbnUuY10KCUFkZCBoVGV4dCBoYW5kbGUgYW5kIHJlbW92ZSBvYnNvbGV0ZSBNRU5VSVRFTSBzdHJ1Y3QgbWVtYmVycy4KCUFkZCBhIFJlbGVhc2VDYXB0dXJlKCkgaW4gU2V0TWVudSgpIHdoZW4gbWVudWJhciBjaGFuZ2VkIHdoaWxlIGNhcHR1cmVkLgoJQWRkIE1lbnVNb3VzZU1vdmUoKSBNZW51QnV0dG9uVXAoKSBpbiBmdW5jdGlvbiBNZW51Rm9jdXNMb29wKCkuCgoJKiBbbWlzYy9maWxlLmNdCglHZXRUZW1wRmlsZW5hbWUoKSBub3cgY3JlYXRlIGEgZmlsZS4KCV9sY3JlYXRlKCkgdXNlIHVuaXggb3BlbiAobmFtZSwgbW9kZSwgcGVybSksIHdpdGggcGVybT1PNjY2LgoKCSogW2lmMTYzMi9yZWxheS5jXQoJUmVtb3ZlIHRlbXBvcmFybHkgYnVpbHRpbiBTSEVMTC5ETEwsIEFkZCBNTVNZU1RFTS5ETEwgaW4gYnVpbHRpbiBsaXN0LgoKCSogTmV3IGZpbGUgW21pc2MvbW1zeXN0ZW0uY10KCSogTmV3IGZpbGUgW2luY2x1ZGUvbW1zeXN0ZW0uaF0KCSogTmV3IGZpbGUgW2lmMTYzMi9tbXN5c3RlbS5zcGVjXQoJTWFueSwgbWFueSBlbXB0eSBzdHVicyAuLi4gOi0pCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpXZWQgQXByIDIwIDE0OjUzOjM1IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbdG9vbHMvYnVpbGQuY10gW2lmMTYzMi9jYWxsLlNdIFtpZjE2MzIvSW1ha2VmaWxlXQoJRml4ZWQgYnVnIGZvciBub24tTGludXggc3lzdGVtcy4KCkFwciAxOCwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW3dpbmRvd3Mvd2luLmNdCglCdWcgZml4ZWQgaW4gQ3JlYXRlV2luZG93RXgoKSA6IE5vdyB1c2UgU2V0TWVudSgpIGZvciBtZW51YmFyIHNldHVwLgoJTmV3IGVtcHR5IHN0dWIgZm9yIGZ1bmN0aW9uIFNldFN5c01vZGFsV2luZG93KCkuCgoJKiBbbWlzYy9leGVjLmNdCglOZXcgZW1wdHkgc3R1YiBmb3IgZnVuY3Rpb24gRXhpdFdpbmRvd3MoKS4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCU5ldyBlbXB0eSBzdHViIGZvciBmdW5jdGlvbiBFbnVtRm9udHMoKS4KCgkqIE5ldyBmaWxlIFttaXNjL3Byb3BlcnR5LmNdCglOZXcgZnVuY3Rpb25zIFJlbW92ZVByb3AoKSwgR2V0UHJvcCgpLCBTZXRQcm9wKCkgJiBFbnVtUHJvcHMoKS4KCgkqIE5ldyBmaWxlIFttaXNjL3NoZWxsLmNdCglOZXcgZW1wdHkgc3R1YnMgZm9yIGZ1bmN0aW9uIFJlZ2lzdGVyU2hlbGxQcm9jKCksIAoJCQlTaGVsbEV4ZWN1dGUoKSAmIFNoZWxsUHJvYygpLgoKCSogTmV3IGZpbGVzIFtsb2FkZXIvdGFzay5jXSAmIFtpbmNsdWRlL3Rhc2suaF0KCU1vdmUgZnVuY3Rpb25zIEdldFdpbmRvd1Rhc2soKSwgR2V0TnVtVGFzaygpLCBFbnVtVGFza1dpbmRvd3MoKQoJCWZyb20gJ2xvYWRlci9saWJyYXJ5LmMnLgoKCSogW2lmMTYzMi91c2VyLmNdIFtpZjE2MzIva2VybmVsLmNdCglQdXQgQXRvbXMgZnVuY3Rpb25zIGVudHJpZXMuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCU5ldyBmdW5jdGlvbnMgRGlyRGxnU2VsZWN0Q29tYm9Cb3goKSAmIERpckRsZ0xpc3RDb21ib0JveCgpLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU5ldyBmdW5jdGlvbnMgRGlyRGxnU2VsZWN0KCkgJiBEaXJEbGdMaXN0KCkuCgpTdW4gQXByIDE3IDIwOjU3OjU5IDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbb2JqZWN0cy90ZXN0LmNdCglHcmF5U3RyaW5nKCkgYWRkZWQuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglDYWxsR3JheVN0cmluZ1Byb2MoKSBhZGRlZC4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2lmMTYzMi9tbXN5c3RlbS5zcGVjXQoJQWRkZWQuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaWYxNjMyL3VzZXIuc3BlY10KCUFkZGVkIGZvcmdvdHRlbiBzcGVjcyBmb3IgYXRvbSBmdW5jdGlvbnMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBBcHIgMTIgMDA6MDU6MzEgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIG1pc2Mvc3B5LmMgKFNweUluaXQpOiBBZGRlZCBtb3JlIG1lc3NhZ2UgdHlwZXMKCgkqIFt3aW5kb3dzL21kaS5jXSBbaW5jbHVkZS9tZGkuaF0KCU1heGltaXppbmcgYW5kIHJlc3RvcmluZyBjaGlsZCB3aW5kb3dzLgoJVGlsaW5nIG9mIGNoaWxkIHdpbmRvd3MuCgpNb24gQXByIDExIDIwOjQ4OjI4IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJUmV2ZXJ0IGZvY3VzIGFuZCBhY3RpdmF0aW9uIHRvIHByZXZpb3VzIHdpbmRvdyB3aGVuIGhpZGluZyBhIHdpbmRvdy4KCgkqIFt3aW5kb3dzL3N5c2NvbG9yLmNdCglJbXBsZW1lbnRlZCBzeXN0ZW0gY29sb3Igb2JqZWN0cyAoYnJ1c2hlcyBhbmQgcGVucyBjcmVhdGVkIGF0CglTZXRTeXNDb2xvcigpIHRpbWUgZm9yIGJldHRlciBwZXJmb3JtYW5jZSkuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXSBbd2luZG93cy9ub25jbGllbnQuY10gW2NvbnRyb2xzL2J1dHRvbi5jXQoJQ2hhbmdlZCBwYWludGluZyBjb2RlIHRvIHVzZSBzeXN0ZW0gY29sb3Igb2JqZWN0cy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCU5ldyBmdW5jdGlvbiBNU0dfSW50ZXJuYWxHZXRNZXNzYWdlKCkgZm9yIGludGVybmFsIG1lc3NhZ2VzCglsb29wcyAoZS5nLiBmb3IgZGlhbG9ncyBvciBtZW51cykuCgoJKiBbd2luZG93cy9ob29rLmNdIFtpbmNsdWRlL2hvb2suaF0gIChOZXcgZmlsZXMpCglCZWdpbm5pbmcgb2YgdGhlIHdpbmRvdyBob29rcyBpbXBsZW1lbnRhdGlvbi4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJVXNlIG5ldyBmdW5jdGlvbiBNU0dfSW50ZXJuYWxHZXRNZXNzYWdlKCkgaW4gRGlhbG9nQm94KCkuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglBZGRlZCBmdW5jdGlvbiBDYWxsSG9va1Byb2MoKS4KCkFwciAxMSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUJ1ZyBmaXggOiBXTV9DSEFScyBhcmUgc2VudCB0byBmb2N1c2VkIHdpbmRvdyBsaWtlIFdNX0tFWT8/Py4KCgkqIFttaXNjL2V4ZWMuY10KCU5vdGhpbmcgbXVjaCBtb3JlIHRoYW4gYSBzdHViIGZvciBMb2FkTW9kdWxlKCksIEkgc2F3IHRoZXJlIGEgbG90CgkJdG8gYmUgZG9uZSBpbiB0aGF0IGNvcm5lciwgSSB3aWxsIGNvbWUgYmFjayBsYXRlciAuLi4KCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJTmV3IGZ1bmN0aW9ucyBHZXRXaW5kb3dUYXNrKCksIEdldE51bVRhc2soKSwgRW51bVRhc2tXaW5kb3dzKCkgCgkJCWFuZCBhc3NvY2lhdGVkIG1vZHVsZXMgJiB0YXNrcyBsaW5rZWQtbGlzdHMuCgkoaXQncyBvbmx5IGFuICdlbWVyZ2luZyBidWQnLCBtb3JlIHRvIGNvbWUgbmV4dCB3ZWVrcykuCgoJKiBbbG9hZGVyL3dpbmUuY10KCVVzZSBMb2FkTGlicmFyeSgpIGluc3RlYWQgb2YgTG9hZEltYWdlKCkgZm9yICdzeXNyZXMuZGxsJy4KCgkqIFtjb250cm9sL21lbnUuY10KCVlvdSBjYW4gbm93IGNsaWNrIG91dHNpZGUgbWVudSByZWdpb24gd2l0aG91dCBwcm9ibGVtLgoJS2V5Ym9hcmQgbmF2aWcgbW9yZSBzbW9vdGx5LCBldmVuIGlmIGEgY2hpbGQgaGFzIHRoZSBmb2N1cy4KCUJ1ZyBmaXggaW4gSW5zZXJ0SXRlbSgpLCAoYmFkIGxpbmtsaXN0IHdoZW4gaW5zZXJ0IHBvaW50IG5vdCBmb3VuZCkuCgljaGFuZ2UgUmVhbGxvYyBmb3IgRnJlZSAmIEFsbG9jIGluIE1vZGlmeUl0ZW0oKS4KCU1GX1NUUklORyBub3cgc2V0IEJMQUNLX1BFTiB0byBmaXggYnVnIG9mIGJhZCBjb2xvciBvZiB0aGUgdW5kZXJzY29yZXMgCgkJZG9uZSBieSBEcmF3VGV4dCgpLCAobWF5YmUgaXQgc2hvdWxkIGRvbmUgaW4gRHJhd1RleHQoKSBpdHNlbGYgPykuCgpTdW4gQXByIDEwIDE0OjA2OjA4IDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbWlzYy9wcm9maWxlLmNdCgkuSU5JIGZpbGVzIHdpbGwgbm93IGJlIHN0b3JlZCBpbiAvIGxvYWRlZCBmcm9tIHRoZSB3aW5kb3dzIGRpcgoJaWYgbm8gcGF0aCBpcyBzdXBwbGllZC4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdCglGaXhlZCBHZXREcml2ZVR5cGUncyBwcm90b3R5cGUuCgoJKiBbaWYxNjMyL3dpbnNvY2suc3BlY10gW2luY2x1ZGUvd2luc29jay5oXSBbbWlzYy93aW5zb2NrZXQuY10KCUZpeGVkIHByb3RvdHlwZXM6IHdpbnNvY2sgdXNlcyBhIHdvcmQgYXMgc29ja2V0IGhhbmRsZSBub3QgYW4gaW50LgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglBZGRlZCBoZWFwIGFsbG9jYXRpb24gZm9yIHJldHVybmVkIHN0cnVjdHVyZXMuCglBZGRlZCBub24tYmxvY2tpbmcgV1NBQXN5bmNHZXRYYnlZKCkgZnVuY3Rpb25zIGFzIGJsb2NraW5nIG9uZXMuCgoJKiBbbG9hZGVyL3dpbmUuY10KCUFkZGVkIElzRExMTG9hZGVkKCksIHVzZWQgaW4gTG9hZEltYWdlKCkgdG8gcHJldmVudCBsb2FkaW5nCglhIGRsbCBtdWx0aXBsZSB0aW1lcy4KCURpcmVjdG9yeSBpcyBhZGRlZCB0byB3aW5lJ3MgcGF0aCB3aGVuIGEgZnVsbHBhdGggaXMgc3VwcGxpZWQgd2hlbgoJc3RhcnRpbmcgd2luZS4KCUxvYWRJbWFnZSgpOiBETEwgZmlsZW5hbWUgdXNlZCBpbnN0ZWFkIERMTCdzIG93biBpbnRlcm5hbCBuYW1lLAoJZml4ZXMgJ0JhZCBETEwgbmFtZScgZXJyb3JzLgoKU2F0IEFwciAgOSAwODoyNjowMyAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbY29udHJvbHMvZWRpdC5jXSBbY29udHJvbHMvd2lkZ2V0cy5jXQoJRmlyc3QgcmVsZWFzZSBvZiBlZGl0IGNvbnRyb2wuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBBcHIgIDUgMTQ6MzY6NTkgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtpbmNsdWRlL21kaS5oXSBbd2luZG93cy9tZGkuY10KCVVzZSBXTV9QQVJFTlROT1RJRlkgbWVzc2FnZXMgdG8gYWN0aXZhdGUgY2hpbGRyZW4uCglHZW5lcmF0ZSBXTV9DSElMREFDVElWQVRFIG1lc3NhZ2VzLgoJQmVnaW5uaW5ncyBoYW5kbGVyIGZvciBtYXhtaXplZCBjaGlsZCB3aW5kb3cuCglDbGVhbiB1cCB3aGVuIGNoaWxkcmVuIGFyZSBkZXN0cm95ZWQuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy93aW5wb3MuY10KCVJlbW92ZWQgY29kZSBhZGQgOTQvMDMvMjYuCgpBcHIgNCwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2wvbWVudS5jXQoJTWFrZSBtb3VzZSBtZW51IG5hdmlnYXRpb24gd29ya2luZyBhZ2Fpbi4gOi0pKQoJKGJlIGNhcmVmdWxsLCBjbGlja2luZyBvdXRzaWRlIG1lbnVzIChpZS46IGNsaWVudHJlY3QpIAoJbm90IHJlc29sdmVkIHlldCkKCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSAgW2NvbnRyb2xzL3Njcm9sbC5jXQoJQnVncyBmaXggaW4gTkNUcmFja1Njcm9sbEJhcnMoKS4KCgkqIFttaXNjL2Rvc19mcy5jXQoJQnVnIGZpeCBpbiAnVG9Eb3MoKScgaW4gY29udmVyc2lvbiBmb3IgJy8nLAoJCShleGFtcGxlOiAnL3dpbmRvdy8nIHdhcyB0cmFuc2xhdGVkIHRvICdXSU5ET1dzJykuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJRnVuY3Rpb24gQ2hhbmdlRGlyKCkgZXh0cmFjdCBwb3NzaWJsZSBkcml2ZSBiZWZvcmUgRE9TX0NoYW5nZURpcigpLgoKCSogW2xvYWRlci9saWJyYXJ5LmNdICBbbG9hZGVyL3dpbmUuY10KCVBsYXlpbmcgYXJvdW5kIG1vdmluZyBmdW5jdGlvbiBHZXRQcm9jQWRkcmVzcygpIGFuZCBwdXQgc29tZSBjb2RlIGluLgoKTW9uIEFwciAgNCAyMTozOTowNyAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFttaXNjL21haW4uY10KCUJldHRlciBleHBsYW5hdGlvbiBvZiBjb21tYW5kLWxpbmUgb3B0aW9ucy4KCgkqIFtvYmplY3RzL2RpYi5jXQoJSW1wbGVtZW50ZWQgU2V0RElCaXRzVG9EZXZpY2UoKS4KCgkqIFt3aW5kb3dzL2RjLmNdCglCdWcgZml4IGluIFNldERDU3RhdGUoKS4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglSZW1vdmVkIFdTX0RJU0FCTEVEIGhhbmRsaW5nIChub3cgZG9uZSBpbiBtZXNzYWdlLmMpLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJQWRkZWQgc2VuZGluZyBhIFdNX1BBUkVOVE5PVElGWSBtZXNzYWdlIGluIE1TR19UcmFuc2xhdGVNb3VzZU1zZygpLgoJVXNlIFdpbmRvd0Zyb21Qb2ludCgpIHRvIGZpbmQgdGhlIHdpbmRvdyBmb3IgbW91c2UgZXZlbnRzLCB0YWtpbmcKCWludG8gYWNjb3VudCBkaXNhYmxlZCB3aW5kb3dzLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUJ1ZyBmaXggaW4gQmVnaW5QYWludCgpIHRvIGFsbG93IGNhbGxpbmcgaXQgYXQgb3RoZXIgdGltZXMgdGhhbgoJb24gV01fUEFJTlQgKFNvbGl0YWlyZSBuZWVkcyBpdC4uLikKCgkqIFt3aW5kb3dzL3dpbi5jXQoJSW1wbGVtZW50ZWQgRmluZFdpbmRvdygpLgoJUmV3cml0dGVuIEVuYWJsZVdpbmRvdygpIHRvIGJlaGF2ZSBtb3JlIGxpa2UgV2luZG93cy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJUmV3cml0dGVuIFdpbmRvd0Zyb21Qb2ludCgpIHRvIGFsc28gc2VhcmNoIGNoaWxkIHdpbmRvd3MuCgpNb24gQXByICA0IDE3OjM2OjMyIDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbaW5jbHVkZS9pbnQyMS5oXSAtPiBbbXNkb3MuaF0KCXJlbmFtZWQuCgoJKiBbbWlzY2VtdS9pbnQxMC5oXSBbbWlzY2VtdS9pbnQyNS5oXSBbbWlzY2VtdS9pbnQyNi5oXSAKCW5ldywgYWRkZWQgZm9yIGludCAxMCwgMjUgYW5kIDI2LgoKCSogW21pc2NlbXUvaW9wb3J0cy5jXQoJbmV3LCBhZGRlZCB0byBhbGxvdyB3aW4gYXBwcyB0byB1c2UgaW9wb3J0cy4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglBZGRlZCBzdXBwb3J0IGZvciBpbiwgaW5iLCBvdXQsIG91dGIgaW5zdHJ1Y3Rpb25zLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTWFyIDI3IDEzOjQwOjI1IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBjb250cm9scy9tZW51LmMgKEluc2VydE1lbnUpOiBDaGFuZ2VkIHRvIHVzZSBGaW5kTWVudUl0ZW0oKS4KClNhdCBNYXIgMjYgMjE6MjM6NTUgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFt3aW5kb3dzL21kaS5jXQoJV2luZG93IGxpc3QgcHJvcGVybHkgdXBkYXRlZC4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUNhbGwgV0lOUE9TX0NoaWxkQWN0aXZhdGUoKSB3aGVuIG1vdXNlIHByZXNzZWQuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCVVzZSBXSU5QT1NfSXNBbkFjdGl2ZVdpbmRvdygpIGluc3RlYWQgb2YgR2V0QWN0aXZlV2luZG93KCkgaW4KCU5DX0hhbmRsZU5DUGFpbnQoKS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQ3JlYXRlZCBmdW5jdGlvbnMgV0lOUE9TX0lzQW5BY3RpdmVXaW5kb3coKSBhbmQgV0lOUE9TX0FjdGl2YXRlQ2hpbGQoKQoKVGh1IE1hciAyNCAxNDo0OToxNyAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogY29udHJvbHMvbWVudS5jIChEZWxldGVNZW51KTogQ2hhbmdlZCB0byB1c2UgRmluZE1lbnVJdGVtCgkoRGVsZXRlTWVudSk6IE1hbnkgYnVnIGZpeGVzLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUNyZWF0ZWQgZnVuY3Rpb24gRmluZE1lbnVJdGVtKCkuCgpUaHUgTWFyIDI0IDE0OjE3OjI0IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbd2luZG93cy93aW4uY10KCVJlbW92ZWQgaW5jb3JyZWN0IE1ESSBoYW5kbGluZyBjb2RlIGZyb20gQ3JlYXRlV2luZG93RXgoKS4KCgkqIFtjb250cm9scy9tZW51LmNdCglNRl9TVFJJTkcgaXRlbXMgbmVlZGVkIHRvIGFsbG9jYXRlIGEgcHJpdmF0ZSBjb3B5IG9mIHN0cmluZy4KCgkqIFtjb250cm9scy9tZW51LmNdCglGaXhlZCBidWdneSBjYWxscyB0byBHbG9iYWxGcmVlKCkuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJRWxpbWluYXRlZCBzb21lIHJlZHVuZGFudCBjb2RlIHdpdGggZnVuY3Rpb24gY2FsbC4KCldlZCBNYXIgMjMgMTk5NCBQZW50dGkgTW9pbGFuZW4gKHBlbnR0aS5tb2lsYW5lbkBudGMubm9raWEuY29tKQoKCSogW3dpbmRvd3MvdGltZXIuY10KCXRpbWVyIGxpc3QgcG9pbnRlcnMgbG9vcGVkIGluIEluc2VydFRpbWVyCgpUdWUgTWFyIDI5IDEzOjMyOjA4IE1FVCBEU1QgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW21pc2MvY3Vyc29yLmNdCglBIGZldyBjaGFuZ2VzIGZvciBkZXNrdG9wIHdpbmRvdyBzdXBwb3J0LgoKCSogW21pc2MvbWFpbi5jXQoJQWRkZWQgLWRlcHRoIG9wdGlvbi4KCgkqIFttaXNjL3JlY3QuY10KCVlldCBhbm90aGVyIGJ1ZyBmaXggaW4gU3VidHJhY3RSZWN0KCkuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCUNoYW5nZXMgdG8gdXNlIG9ubHkgb25lIGRlcHRoIChzcGVjaWZpZWQgd2l0aCAtZGVwdGgpCglmb3IgY29sb3IgYml0bWFwcy4KCgkqIFtvYmplY3RzL2JydXNoLmNdCglBZGRlZCBzdXBwb3J0IGZvciBkaXRoZXJlZCBzb2xpZCBicnVzaGVzLgoKCSogW29iamVjdHMvY29sb3IuY10KCVVzZSB0aGUgc2FtZSAyMCBzeXN0ZW0gY29sb3JzIGFzIGluIFdpbmRvd3MuCglTeXN0ZW0gcGFsZXR0ZSBpbml0aWFsaXNhdGlvbiBub3cgZG9uZSBpbiBDT0xPUl9Jbml0UGFsZXR0ZSgpLgoJQWRkZWQgc3VwcG9ydCBmb3IgYSBjb2xvciBtYXBwaW5nIHRhYmxlIHRvIG1hcCBsb2dpY2FsIGNvbG9yCglpbmRleGVzIHRvIFggY29sb3JtYXAgZW50cmllcy4KCUltcGxlbWVudGVkIEdldE5lYXJlc3RDb2xvcigpIGFuZCBSZWFsaXplRGVmYXVsdFBhbGV0dGUoKS4KCgkqIFtvYmplY3RzL2RpYi5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgY29sb3IgbWFwcGluZyB0YWJsZS4KCgkqIFtvYmplY3RzL2RpdGhlci5jXSAgKE5ldyBmaWxlKQoJSW1wbGVtZW50ZWQgc29saWQgY29sb3IgZGl0aGVyaW5nLgoKCSogW29iamVjdHMvcGFsZXR0ZS5jXQoJSW1wbGVtZW50ZWQgR2V0U3lzdGVtUGFsZXR0ZUVudHJpZXMoKSBhbmQgU2VsZWN0UGFsZXR0ZSgpLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCU1ha2UgYSBjb3B5IG9mIHRoZSBtZW51IG5hbWUgaW4gUmVnaXN0ZXJDbGFzcygpLgoKCSogW3dpbmRvd3MvZGMuY10KCUZpeGVkIGRldmljZSBjYXBzIHdoZW4gdXNpbmcgYSBkZXNrdG9wIHdpbmRvdy4KCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBjb2xvciBtYXBwaW5nIHRhYmxlIGluIERDcy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglBZGRlZCBDb25maWd1cmVOb3RpZnkgaGFuZGxlciBvbiBkZXNrdG9wIHdpbmRvdy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCVJlbW92ZWQgY2FsbCB0byBYVHJhbnNsYXRlQ29vcmRpbmF0ZXMoKSBvbiBldmVyeSBtb3VzZSBtb3Rpb24KCU5ldyBmdW5jdGlvbiBNU0dfU3luY2hyb25pemUoKSB0byBzeW5jaHJvbml6ZSB3aXRoIHRoZSBYIHNlcnZlci4KCgkqIFt3aW5kb3dzL3N5c2NvbG9yLmNdCglSZXdyaXR0ZW4gU1lTQ09MT1JfSW5pdCgpIHRvIHJlYWQgdGhlIHN5c3RlbSBjb2xvcnMgZnJvbSBXSU4uSU5JLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglBZGRlZCBzeW5jaHJvbml6YXRpb24gb24gd2luZG93IG1hcHBpbmcuIFNvbHZlcyB0aGUgZG91YmxlIHJlZHJhdwoJcHJvYmxlbSB3aGVuIHN0YXJ0aW5nIFNvbGl0YWlyZS4KCk1hciAyNywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2wvbWVudS5jXQkqIFt3aW5kb3dzL2RlZnduZC5jXQoJTWFrZSBrZXlib2FyZCBuYXZpZ2F0aW9uIHdvcmtpbmcgd2l0aCBtZW51YmFyLAoJYnV0IHRlbXBvcmFyZWx5IGluc2VydGVkIGEgYnVnIGluIG1lbnViYXIgbW91c2UgaGFuZGxpbmcgLi4uIDotKCgKCShpdCB3aWxsIGJlIGZpeCBuZXh0IHdlZWsgISkKCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQ29ubmVjdCBWS19NRU5VIHRvIG1lbnViYXIgbmF2aWdhdGlvbi4KCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJR2V0TW9kdWxlSGFuZGxlKCkgcmV0dXJuICdmaWN0aXZlIDB4RjAwMCsgaGFuZGxlcycgZm9yIGJ1aWx0LWluIERMTHMuCgpTdW4gTWFyIDIwIDIyOjMyOjEzIDE5OTQgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFttaXNjL21haW4uY10KCUFkZGVkIENvcHkoKS4gQWRkZWQgYSBjaGVjayBmb3IgYC1oJyB0byBzaG93IHVzYWdlLgoKCSogW21pc2MvZG9zX2ZzLmNdCglGaXhlZCBidWcgaW4gRmluZEZpbGUoKSwgdG8gbG9hZCBkaXJlY3RvcmllcyBhcyBkbGxzLgoKCSogW21pc2MvZG9zX2ZzLmNdCglGaXhlZCBUb1VuaXgoKSBhbmQgVG9Eb3MoKSBhZ2FpbiwgYXMgbXkgcHJldmlvdXMgcGF0Y2gKCWRpZG4ndCBtYWtlIGl0LgoKCSogW21pc2MvZG9zX2ZzLmNdIFttaXNjZW11L2ludDIxLmNdCglCdWcgZml4ZXMsIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBhbGwgd2luZmlsZSBhbmQgcHJvZ21hbiBpbnQyMQoJcmVxdWVzdHMgbm93IGV4Y2VwdCBmb3IgYSBmZXcgc21hbGwgdGhpbmdzLgoKVHVlIE1hciAyOSAwNjoyNTo1NCAxOTk0ICBjcndAaGFycmlzLm1sYi5zZW1pLmhhcnJpcy5jb20gKENhcmwgV2lsbGlhbXMpCgoJKiBbbWVtb3J5L2hlYXAuY10KCUltcGxlbWVudGVkIEdldEZyZWVTeXN0ZW1SZXNvdXJjZXMoKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIE1hciAyMSAxNzozMjoyNSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogY29udHJvbHMvbWVudS5jIChHZXRTdWJNZW51KTogRnVuY3Rpb24gZGlkIG5vdCByZXR1cm4gY29ycmVjdCB2YWx1ZQoKCSogW3dpbmRvd3MvbWRpLmNdCglCZWdpbm5pbmdzIG9mIG1lbnUgaGFuZGxpbmcuCgpUaHUgTWFyIDEwIDExOjMyOjA2IDE5OTQgIFN0ZWZhbiAoU0FNKSBNdWVuemVsICAobXVlbnplbEB0YXQucGh5c2lrLnVuaS10dWViaW5nZW4uZGUpCgoJKiBbb2JqZWN0cy9mb250LmNdCglpZiBmb250LndpZHRoIGVxdWFscyB6ZXJvIHVzZSBhc3Rlcml4IGluc3RlYWQuCgpNb24gTWFyIDIxIDE3OjIzOjM3IE1FVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCVJld3JpdHRlbiBiaXRtYXAgY29kZSB0byB1c2UgZXhjbHVzaXZlbHkgWCBwaXhtYXBzOyAqbXVjaCogZmFzdGVyLgoKCSogW29iamVjdHMvYnJ1c2guY10KCVNvbWUgY2hhbmdlcyB3aXRoIHBhdHRlcm4gYnJ1c2hlcyBiZWNhdXNlIG9mIHRoZSBuZXcgYml0bWFwIGNvZGUuCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJQWRkZWQgZnVuY3Rpb24gQ09MT1JfVG9QaHlzaWNhbCBmb3IgYmV0dGVyIGNvbG9yIG1hcHBpbmcuCgoJKiBbb2JqZWN0cy9kaWIuY10KCUhlYXZpbHkgb3B0aW1pemVkIFNldERJQml0cygpLgoKCSogW3dpbmRvd3MvZGMuY10KCU9waW1pemVkIFNldERDU3RhdGUoKSBhbmQgRENfU2V0dXBHQyooKSBmdW5jdGlvbnMuCglBZGRlZCBzdHViIGZvciBDcmVhdGVJQygpLgoKTWFyIDIwLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglDYWxsIFNldEZvY3VzKCkgYWZ0ZXIgY2xvc2luZyBib3ggdG8gZ2l2ZSBiYWNrIGZvY3VzIHRvIHByZXZpb3VzIG93bmVyLgoKCSogW21pc2MvZmlsZXMuY10KCVNtYWxsIGJ1ZyBmaXggaW4gR2V0VGVtcEZpbGVuYW1lKCkgOiByZXBsYWNlIGEgJ1wnIHRvICdcXCcuCgoJKiBbY29udHJvbC9zY3JvbGwuY10KCUNhbGxzIHRvIEJpdEJsdCgpIHJlcGxhY2UgYnkgU3RyZXRjaEJsdCgpLgoKCSogW2NvbnRyb2wvbWVudS5jXQoJQ2FsbCBTZXRGb2N1cygpIHRvIHByZXZpb3VzIG93bmVyIGFmdGVyIGNsb3NpbmcgUG9wdXBzLgkKCUZpbGwgc3R1YiBEZWxldGVNZW51KCkuCgoJKiBbY29udHJvbC9saXN0Ym94LmNdCgkqIFtjb250cm9sL2NvbWJvLmNdCglVc2UgU2V0Rm9jdXMoKSBpbiBXTV9MQlVUVE9ORE9XTi4KCUNsb3NlIENvbWJvQm94IExpc3QgdXBvbiBXTV9LSUxMRk9DVVMuCglFYXJseSBkZXZlbG9wbWVudCBvZiBXTV9NRUFTVVJFSVRFTSBtZWNhbmlzbS4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJRWFybHkgZGV2ZWxvcG1lbnQgb2YgV01fTUVBU1VSRUlURU0gbWVjYW5pc20uCgpUdWUgTWFyIDIyIDEwOjQ0OjU3IDE5OTQgIE1pZ3VlbCBkZSBJY2F6YSAgKG1pZ3VlbEB4b2NoaXRsKQoKCSogW21pc2MvYXRvbS5jXQoJRml4ZWQgc2ludGF4aXMgcHJvYmxlbSB3aGVuIGJ1aWxkaW5nIHRoZSBsaWJyYXJ5LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgTWFyIDE1IDEzOjExOjU2IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBtZXNzYWdlIHR5cGVzIGFuZCBzdHJ1Y3R1cmVzIGZvciBNREkKCgkqIFtpbmNsdWRlL21kaS5oXQoJQ3JlYXRlZCBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGZvciBoYW5kbGluZyBNREkKCgkqIFt3aW5kb3dzL21kaS5jXQoJQmVnYW4gY3JlYXRpbmcgTURJIHN1cHBvcnQKClRodSBNYXIgMTAgMTY6NTE6NDYgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtsb2FkZXIvd2luZS5jXSBbaW5jbHVkZS93aW5lLmhdCglBZGRlZCBuZXcgZmllbGQgdG8gInN0cnVjdCB3X2ZpbGVzIiB0byBob2xkIHRoZSAibmFtZSB0YWJsZSIKCXJlc291cmNlIGZvciBXaW5kb3dzIDMuMCBwcm9ncmFtcwoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJQWRkZWQgY29kZSB0byBoYW5kbGUgcHJvZ3JhbXMgd2l0aCBhICJuYW1lIHRhYmxlIiByZXNvdXJjZS4KCUxvYWRSZXNvdXJjZUJ5TmFtZSgpIG1vZGlmaWVkIHRvIGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mCgl0aGlzIHJlc291cmNlLgoKTW9uIE1hciAxNCAyMjozMTo0MiBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW29iamVjdHMvY29sb3IuY10KCUFkZGVkIGluc3RhbGxpbmcgdGhlIHByaXZhdGUgY29sb3JtYXAgb24gdGhlIGRlc2t0b3Agd2luZG93LgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUNsZWFuZWQgdXAgZm9jdXMgZXZlbnQgaGFuZGxpbmcgKHNlZSBmb2N1cy5jKS4KCVVzZSBHZXRGb2N1cygpIHRvIGRpcmVjdCBrZXkgZXZlbnRzIHRvIHRoZSBjb3JyZWN0IHdpbmRvdy4KCgkqIFt3aW5kb3dzL2ZvY3VzLmNdCglSZXdyaXR0ZW4gU2V0Rm9jdXMoKSB0bzoKCS0gb25seSBzZXQgWCBmb2N1cyBvbiB0b3AtbGV2ZWwgd2luZG93cwoJLSBzZW5kIFdNX1NFVEZPQ1VTIGFuZCBXTV9LSUxMRk9DVVMgbWVzc2FnZXMgKHdhcyBkb25lIGluIGV2ZW50LmMpCgktIHByZXZlbnQgc2V0dGluZyBmb2N1cyB0byBkaXNhYmxlZCB3aW5kb3dzCgktIGluc3RhbGwgcHJpdmF0ZSBjb2xvcm1hcCBzbyAtcHJpdmF0ZW1hcCBvcHRpb24gd29ya3MgYWdhaW4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3MvdGltZXIuY10KCUNoYW5nZWQgdGltZXIgbWFuYWdlbWVudCB0byBubyBsb25nZXIgdXNlIFBvc3RNZXNzYWdlKCksIGJ1dAoJdG8gZ2VuZXJhdGUgdGltZXIgbWVzc2FnZXMgb24gdGhlIGZseS4gQWxzbyBmaXhlZCBhIHJlbGF0ZWQgYnVnCglpbiBHZXRNZXNzYWdlKCkgd2hpY2ggY291bGQgY2F1c2UgYnVzeS13YWl0aW5nLgoKCSogW3dpbmRvd3Mvd2luLmNdCglPbmx5IHNlbGVjdCBmb2N1cyBldmVudHMgb24gdG9wLWxldmVsIHdpbmRvd3MuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUFkZGVkIHNvbWUgc2FuaXR5IGNoZWNrcyBmb3IgZGVza3RvcCB3aW5kb3cuCgpGcmkgTWFyICA0IDIwOjQyOjAxIDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbWlzYy9kb3NfZnMuY10KCWJ1ZyBmaXhlcyBpbiBUb1VuaXgoKSwgV2luSW5pRmlsZU5hbWUoKSwgR2V0VW5peEZpbGVOYW1lKCkuIAoJU3VwcG9ydCBmb3IgdGlsZGUgc3ltYm9sIGFkZGVkIGZvciByb290ZGlyZWN0b3JpZXMgaW4gW2RyaXZlc10KCXNlY3Rpb24gb2Ygd2luZSdzIGNvbmZpZ2ZpbGUuCgoJKiBbbWlzYy9maWxlLmNdCglocmVhZCgpLCBod3JpdGUoKSBhZGRlZC4KCgkqIFttaXNjL21haW4uY10KCWhtZW1jcHkoKSBhZGRlZC4KCgkqIFtpZjE2MzIvc3RyZXNzLnNwZWNdIFtpbmNsdWRlL3N0cmVzcy5oXSBbbWlzYy9zdHJlc3MuY10KCUFkZGVkIFNUUkVTUy5ETEwsIGFuIHVzZWxlc3MgZGxsIHVzZWQgdG8gc3RyZXNzIGEgd2luZG93cyBzeXN0ZW0uCgoJKiBbKi8qXQoJQWRkZWQgbWlzc2luZyAjaW5jbHVkZXMsIGZpeGVkIHByb3RvdHlwZXMgZm9yIHByb3RvdHlwZSBjaGVja2luZy4KCgkqIFtpbmNsdWRlL3Byb3RvdHlwZXMuaF0KCglBZGRlZCBwcm90b3R5cGVzIGZvciBsb2FkZXIvKmMsIGlmMTYzMi8qYy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIE1hciAgOCAwOTo1NDozNCAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW0NvbmZpZ3VyZV0KCUFkZGVkIHJlbWluZGVyIHRvIHNldCBXSU5FUEFUSCwgaWYgaXQgaXMgbm90IHNldC4KCgkqIFtJbWFrZWZpbGVdCglSZW1vdmVkICNlbGlmJ3MKCgkqIFtjb250cm9scy9idXR0b24uY10KCUFkZGVkIEJOX0NMSUNLRUQgbm90aWZpY2F0aW9uIGZvciBvd25lci1kcmF3IGJ1dHRvbnMuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbbWVtb3J5L2hlYXAuY10KCUNoYW5nZWQgTG9jYWwqIGZ1bmN0aW9ucyB0byBXSU4xNl9Mb2NhbCogdG8gcHJldmVudCB1bmNvbmNpb3VzIHVzZQoJb2YgdGhlc2UgZnVuY3Rpb25zLgoKCSogW2lmMTYzMi9yZWxheS5jXQoJUHVzaCBvbGQgU3RhY2sxNkZyYW1lIG9uIHN0YWNrIGJlZm9yZSBzZXR0aW5nLgoKCSogW2luY2x1ZGUvYXRvbS5oXSBbbWlzYy9hdG9tLmNdIFtpbmNsdWRlL2hlYXAuaF0gW21lbW9yeS9sb2NhbC5jXQoJQWRkZWQgbXVsdGlwbGUgbG9jYWwgaGVhcCBoYW5kbGluZyBpbiBBdG9tKiBmdW5jdGlvbnMuCgoJKiBbaW5jbHVkZS9yZWdmdW5jLmhdIFttaXNjZW11L2ludDIxLmNdCglSZXdyb3RlIERPUzNDYWxsKCkgdXNlIGNvbnRleHQgZnJhbWUgdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBzdGFjay4KCgkqIFttaXNjL3Byb2ZpbGUuY10KCUZpeGVkIHRvIGFsbG93IGxlYWRpbmcgIjsiIHRvIG1hcmsgY29tbWVudHMuCgoJKiBbbWlzYy9zcHkuY10KCUZpeGVkIGJ1Z3MgYW5kIGFkZGVkIHN1cHBvcnQgZm9yICJpbmNsdWRlIiBhbmQgImV4Y2x1ZGUiIGZpbHRlcnMuCgoJKiBbbWlzYy91c2VyLmNdCglSZWFycmFuZ2VkIGNhbGxzIGluIEluaXRBcHAoKS4KCgkqIFttaXNjL2ZvbnQuY10KCUZpeGVkIGZvbnQgaGFuZGxpbmcgdG8gY3JlYXRlIHN5c3RlbSBmb250cywgaWYgdGhleSBhcmUgdXNlZC4KCgkqIFt3aW5kb3dzL2RjLmNdCglJZiB0ZXh0IGRyYXduIG9uIHdpbmRvdyB3aXRoIG5vIGZvbnQgc3BlY2lmaWVkLCB0aGVuIGRlZmF1bHQgdGhlCglmb250IHRvIHRoZSBzeXN0ZW0gZm9udC4KCk1vbiBNYXIgIDcgMjA6MzI6MDkgTUVUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtjb250cm9scy9kZXNrdG9wLmNdCglBZGRlZCBoYW5kbGluZyBvZiBXTV9OQ0NSRUFURSBhbmQgV01fRVJBU0VCS0dORCBmdW5jdGlvbnMuCglJbXBsZW1lbnRlZCBTZXREZXNrUGF0dGVybigpLgoKCSogW21pc2MvbWFpbi5jXQoJQWRkZWQgLWRlc2t0b3Agb3B0aW9uIHRvIGdldCBhIGxhcmdlIGRlc2t0b3Agd2luZG93IHdpdGgKCWV2ZXJ5dGhpbmcgaW5zaWRlIGl0LgoJQWRkZWQgLW5hbWUgb3B0aW9uLgoKCSogW21pc2MvcmVjdC5jXQoJQnVnIGZpeCBpbiBTdWJ0cmFjdFJlY3QoKS4KCgkqIFtvYmplY3RzLyouY10KCVJlcGxhY2VkIHRoZSBEZWZhdWx0Um9vdFdpbmRvdygpIG1hY3JvIGJ5IHRoZSByb290V2luZG93IHZhcmlhYmxlLgoKCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJICBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3Mvd2luLmNdCglBIGZldyBjaGFuZ2VzIHRvIGFjY29tb2RhdGUgdGhlIG5ldyBkZXNrdG9wIHdpbmRvdy4KCiBUdWUgTWFyICA4IDExOjEzOjAzIDE5OTQgIE1pZ3VlbCBkZSBJY2F6YSAgKG1pZ3VlbEB4b2NoaXRsLm51Y2xlY3UudW5hbS5teCkKIAogCSogW3Rvb2xraXQvYXJjaC5jXSAtLU5ldyBmaWxlLS0gCiAJUm91dGluZXMgZm9yIGNvbnZlcnRpbmcgbGl0dGxlIGVuZGlhbiBkYXRhIHN0cnVjdHVyZXMgdG8KIAliaWctZW5kaWFuIGRhdGEgc3RydWN0dXJlcywgY3VycmVudGx5IG9ubHkgQklUTUFQIHN0cnVjdHVyZXMgYXJlIAogCWNvbnZlcnRlZC4KIAogCSogW21pc2MvYXRvbS5jXQogCVdoZW4gdXNlZCBhcyBwYXJ0IG9mIHRoZSBXaW5lTGliLCB0aGUgY29kZSBpcyBtdWNoIHNpbXBsZXIuCiAJRG9lc24ndCBkZXBlbmQgb24gYWxpZ25lbWVudC4KIAogCSogW2xvYWRlci93aW5lLmNdCiAJSWZkZWZlZCBFbXVsYXRvciBkZXBlbmRlbnQgY29kZSBpZiBjb21waWxpbmcgV2luZUxpYi4KIAogCSogW2xvYWRlci9yZXNvdXJjZS5jXQogCU1vdmVkIG1pc2MvcmVzb3VyY2UuYyB0byBsb2FkZXIvcmVzb3VyY2UuYy4KIAogCSogW2xvYWRlci9kdW1wLmMsbGR0LmMsbGR0bGliLmMsbGlicmFyeSxjLHNlbGVjdG9yLmMsc2lnbmFsLmNdCiAJSWZkZWZlZCB3aG9sZSBjb2RlIGlmIGNvbXBpbGluZyBXSU5FTElCLgogCiAJKiBbaW5jbHVkZS93aW5zb2NrLmhdCiAJQWRkZWQgY29tcGlsYXRpb24gZGVmaW5lIHRvIGFsbG93IGNvbXBpbGF0aW9uIG9uIFN1bk9TLgogCiAJKiBbaW5jbHVkZS93aW5lLmhdCiAJUmVtb3ZlZCBsb2FkX3R5cGVpbmZvIGFuZCBsb2FkX25hbWVpbmZvIHByb3RvdHlwZXMsIHRoZXkgYmVsb25nCiAJdG8gbmVleGUuaAogCiAJKiBbaW5jbHVkZS9uZWV4ZS5oXQogCUFkZGVkIGxvYWRfdHlwZWluZm8gYW5kIGxvYWRfbmFtZWluZm8gcHJvdG90eXBlcy4KIAogCSogW2luY2x1ZGUvYXJjaC5oXQogCUZpeGVkIHNvbWUgYnVncyBpbiB0aGUgY29udmVyc2lvbiByb3V0aW5lcy4KIAlBZGRlZCBtYWNyb3MgZm9yIEJpdG1hcCBsb2FkaW5nLgoKVHVlIE1hciAgOCAxMjo1MjowNSAxOTk0ICBjcndAbWFuaWFjLm1sYi5zZW1pLmhhcnJpcy5jb20gKENhcmwgV2lsbGlhbXMpCiAJCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFttZW1vcnkvZ2xvYmFsLmNdCglJbXBsZW1lbnRlZCBHZXRGcmVlU3BhY2UoKQoKCSogW2lmMTYzMi91c2VyLnNwZWNdIFtsb2FkZXIvcmVzb3VyY2UuY10KCUltcGxlbWVudGVkIENyZWF0ZUljb24oKQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgTWFyICAxIDExOjMwOjIxIDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbQ29uZmlndXJlXSBbKi9JbWFrZWZpbGVdCglDcmVhdGVkIGNvbmZpZ3VyZSBzY3JpcHQgdG8gaGFuZGxlIGRpZmZlcmVudCB0eXBlcyBvZiBXaW5lIGJ1aWxkcy4KCgkqIFtDb25maWd1cmVdIFt0b29scy9idWlsZC5jXSBbaWYxNjMyL0ltYWtlZmlsZV0gW1dpbmUudG1wbF0KCUFkZGVkIGFiaWxpdHkgdG8gY29tcGlsZSBXaW5lIG9uIHN5c3RlbXMgd2l0aCAxNC1jaGFyIGZpbGVuYW1lIGxpbWl0LgoKCSogW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9vcHRpb25zLmhdIFttaXNjL21haW4uY10KCUFkZGVkIC1yZWxheWRiZyBvcHRpb24gdG8gY29tbWFuZCBsaW5lIGlmIERFQlVHX1JFTEFZIGlzIGRlZmluZWQuCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglGaXhlZCBidWcgaW4gR2V0RW50cnlETExOYW1lKCkgdGhhdCBjYXVzZWQgV2luZSB0byBzZWcgZmF1bHQuCgoJKiBbbWVtb3J5L2hlYXAuY10KCUZpeGVkIExvY2FsSW5pdCgpIHRvIHdvcmsgY29ycmVjdGx5LgoKCSogW21pc2MvdXNlci5jXQoJQWRkZWQgY29kZSB0byBjYWxsIGxvYWRlZCBETExzJyBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4KClR1ZSBNYXIgIDEgMDE6MDE6MTcgTUVUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFt3aW5kb3dzL2RjZS5jXQoJQWRkZWQgY2xpcHBpbmcgb2YgY2hpbGQgd2luZG93cyBieSB0aGVpciBwYXJlbnQncyBjbGllbnQgYXJlYS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQnVnIGZpeCBpbiBOQ19Eb05DUGFpbnQoKS4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglCdWcgZml4IGluIFJlZHJhd1dpbmRvdygpLgoKRmViIDI3LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWVtL2F0b20uY10KCUJ1ZyBmaXggYWdhaW4gaW4gQVRPTV9EZWxldGVBdG9tKCkgOiAKCQljaGFuZ2UgTG9jYWxGcmVlKCkgYnkgVVNFUl9IRUFQX0ZSRUUoKS4KCShQcmV2aW91cyBwYXRjaCBkb25lIEZlYiAxM3RoIGhhZCBiZWVuIGxvc3QpCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglNb3ZlIGJpdG1hcHMgbG9hZGluZyBpbiBBbGxvY1Njcm9sbEJhcigpIGluc3RlYWQgb2YgaW4gV01fQ1JFQVRFLgoKCSogW3dpbmRvd3MvY2xhc3MuY10gKHNvcnJ5IEFsZXggLi4uKQoJVGhlcmUgd2FzIG5vIGJ1ZyB0aGVyZSAiaW4gUmVnaXN0ZXJDbGFzcygpIDogCiAgICAgICAgICAgICAgICBXTkRDTEFTUy0+bHBzekNsYXNzTmFtZSB3YXMgcmVzZXQgdG8gTlVMTC4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eCgoJKiBbbWlzYy9jbGlwYm9hcmQuY10JLS0tIE5ldyBGaWxlIC0tLQoJTmV3IGZ1bmN0aW9uIEVudW1DbGlwYm9hcmRGb3JtYXRzKCkuCglOZXcgZnVuY3Rpb24gT3BlbkNsaXBib2FyZCgpLgoJTmV3IGZ1bmN0aW9uIENsb3NlQ2xpcGJvYXJkKCkuCglOZXcgZnVuY3Rpb24gRW1wdHlDbGlwYm9hcmQoKS4KCU5ldyBmdW5jdGlvbiBHZXRDbGlwYm9hcmRPd25lcigpLgoJTmV3IGZ1bmN0aW9uIEdldENsaXBib2FyZFZpZXdlcigpLgoJTmV3IGZ1bmN0aW9uIENvdW50Q2xpcGJvYXJkRm9ybWF0cygpLgoJTmV3IGZ1bmN0aW9uIElzQ2xpcGJvYXJkRm9ybWF0QXZhaWxhYmxlKCkuCglOZXcgZnVuY3Rpb24gT3BlbkNsaXBib2FyZCgpLgoJTmV3IGZ1bmN0aW9uIEdldENsaXBib2FyZERhdGEoKS4KCU5ldyBmdW5jdGlvbiBTZXRDbGlwYm9hcmRWaWV3ZXIoKS4KCU5ldyBmdW5jdGlvbiBFbnVtQ2xpcGJvYXJkRm9ybWF0cygpLgoJTmV3IGZ1bmN0aW9uIFJlZ2lzdGVyQ2xpcGJvYXJkRm9ybWF0KCkuCglOZXcgZnVuY3Rpb24gQ2hhbmdlQ2xpcGJvYXJkQ2hhaW4oKS4KCU5ldyBmdW5jdGlvbiBTZXRDbGlwYm9hcmREYXRhKCkuCglOZXcgZnVuY3Rpb24gR2V0T3BlbkNsaXBib2FyZFdpbmRvdygpLgoJTmV3IGZ1bmN0aW9uIEdldFByaW9yaXR5Q2xpcGJvYXJkRm9ybWF0KCkuCglOZXcgZnVuY3Rpb24gR2V0Q2xpcGJvYXJkRm9ybWF0TmFtZSgpLgoKVHVlIE1hciAgMSAyMDoxNTo0NSAxOTk0ICBFcmlrIEJvcyA8ZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sPgoKCSogW21pc2MvY29tbS5jXQoJYnVnZml4IGluIE9wZW5Db21tKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBGZWIgMjIgMTg6MDQ6MDIgMTk5NCAgSmVmZnJleSBIc3UgPGhzdUBmcmVlZmFsbC5jZHJvbS5jb20+CgoJKiBbaW5jbHVkZS93aW5zb2NrLmhdCglUaGUgc29ja3Byb3RvIHN0cnVjdCBpcyBhbHJlYWR5IGRlZmluZWQgaW4gPHN5cy9zb2NrZXQuaD4KCgkqIFttaXNjL3dpbnNvY2suY10KCU5lZWQgdG8gaW5jbHVkZSA8bmV0aW5ldC9pbi5oPiBmb3Igc3RydWN0IGluLWFkZHIuCglVc2Ugc3lzX2Vycmxpc3RbXSBpbnN0ZWFkIG9mIHN0cmVycm9yW10uCgoJKlt0b29sa2l0L2hlYXAuY10KCUFOU0kgQyBzcGVjaWZpZXMgdGhhdCB0aGUgbWFsbG9jIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiBzdGRsaWIuaCwKCSAgc28gd2UgZG9uJ3QgbmVlZCB0byBpbmNsdWRlIG1hbGxvYy5oLgoKCSpbbG9hZGVyL2xkdGxpYi5jXQoJUHJpbnQgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZSBhYm91dCBwcm9iYWJsZSBjYXVzZSBvZiBpMzg2X3NldF9sZHQoKQoJICBmYWlsdXJlIGFuZCB0aGVuIGV4aXQuCgoJKltJbWFrZWZpbGVdCglGb3Igc3lzdGVtcyB0aGF0IGRvbid0IHVzZSBnbWFrZSBieSBkZWZhdWx0LCBzZXQgdGhlIE1BS0UgdmFyaWFibGUKCSAgdG8gZ21ha2UgYW5kIHByb3BhZ2F0ZSBpdCBvbiByZWN1cnNpdmUgbWFrZXMuCglUYWtlIG91dCAtbGkzODYgZm9yIEZyZWVCU0Qgc3lzdGVtcyBhbmQgZGVmaW5lIF9fRnJlZUJTRF9fIHNvIFdpbmUKCSAgY2FuIGJlIGJ1aWx0IHdpdGggdGhlIEZyZWVCU0QgMS4wLjIgY29tcGlsZXIuCgpUdWUgRmViIDIyIDAyOjUyOjE5IEVTVCAxOTk0ICAgIGpyaWNoYXJkQGNzLnVtbC5lZHUgKEpvaG4gUmljaGFyZHNvbikKCiAgICAgICAgKiBbb2JqZWN0cy9iaXRibHQuY10KICAgICAgICBBZGRlZCBpbiB0aHJlZSBmdW5jdGlvbnMgdG8gZG8gc3RyZXRjaGluZyBhbmQgY29tcHJlc3Npb24KICAgICAgICBmb3IgV0hJVEVPTkJMQUNLLCBCTEFDS09OV0hJVEUsIGFuZCBjb2xvciBjb3BpZXMuCgpUdWUgRmViIDIyIDE1OjAxOjMxIEVTVCAxOTk0ICAgIGpyaWNoYXJkQGNzLnVtbC5lZHUgKEpvaG4gUmljaGFyZHNvbikKCiAgICAgICAgKiBbd2luZG93cy9ncmFwaGljcy5jXQogICAgICAgIEFkZGVkIEZsb29kRmlsbCBhbmQgRmxvb2RGaWxsX3JlYy4gIEZsb29kRmlsbF9yZWMgaXMgcHJldHR5CiAgICAgICAgaW5lZmZpY2VudCwgYnV0IHNob3VsZCBzdWZmaWNlIGZvciBub3cuCgogICAgICAgICogW2luY2x1ZGUvd2luZG93cy5oXQogICAgICAgIENoYW5nZWQgdGhlIHgseSBwYXJhbWF0ZXJzIGZvciB0aGUgRmxvb2RGaWxsIHByb3RvdHlwZSAKICAgICAgICBmcm9tIGludHMgdG8gc2hvcnRzCgpUdWUgRmViIDIyIDAwOjU4OjI4IE1FVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbd2luZG93cy93aWRnZXRzLmNdCglBZGRlZCBkZXNrdG9wIHdpbmRvdyBjbGFzcy4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglCdWcgZml4IGluIFJlZHJhd1dpbmRvdygpLgoJSW1wbGVtZW50ZWQgRXhjbHVkZVVwZGF0ZVJnbigpLgoKCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJSW1wbGVtZW50ZWQgZGVza3RvcCB3aW5kb3cuCgoJKiBbY29udHJvbHMvZGVza3RvcC5jXQoJUHJlbGltaW5hcnkgZGVza3RvcCB3aW5kb3cgcHJvY2VkdXJlLgoKRmViIDIwLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IGZ1bmN0aW9uIExvYWRNZW51SW5kaXJlY3QoKS4KCU5ldyBmdW5jdGlvbiBHZXRNZW51Q2hlY2tNYXJrRGltZW5zaW9ucygpLgoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglFbnRyeSBmb3IgRGVmRGxnUHJvYygpLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCUZpeCBidWcgaW4gUmVnaXN0ZXJDbGFzcygpIDogCgkJV05EQ0xBU1MtPmxwc3pNZW51TmFtZSB3YXMgcmVzZXQgdG8gTlVMTC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJSW4gQ3JlYXRlV2luZG93RXgoKSwgaWYgaE1lbnUgPT0gMCB0aGVuIHVzZSAKCQl3bmRjbGFzcy0+bHBzek1lbnVOYW1lIHRvIGxvYWQgTWVudSBmcm9tIHJlc291cmNlOwoKTW9uIEZlYiAyMSAyMjozODoyOCAxOTk0IEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10gW2xvYWRlci93aW5lLmNdCglGaXhlZCBydW5pbmcgRExMJ3MgYXMgbWFpbiBleGVjdXRhYmxlIHByb2JsZW0uCgoJKiBbbWlzYy9kb3NfZnMuY10KCUFkZGVkIHdpbGRjYXJkIHN1cHBvcnQgaW4gRE9TX3JlYWRkaXIoKS4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJQWRkZWQgcHJvcGVyIGVycm9yIGhhbmRsaW5nIG9mIEJTRCB3aW5zb2NrZXQgZnVuY3Rpb25zLgoKCSogW21pc2NlbXUvaW50MjEuY10KCUtFUk5FTF9ET1MzQ2FsbCByZW5hbWVkIHRvIERPUzNDYWxsIGFuZCBtb2RpZmllZCB0byB1c2UgZG9faW50MjEoKS4KCgkqIFttYWluL21haW4uY10KCUFkZGVkIGZ1bmN0aW9ucyBmb3IgR2V0VmVyc2lvbiwgR2V0V2luRmxhZ3MgYW5kIEdldFRpbWVyUmVzb2x1dGlvbgoJZm9yIGxpYndpbmUuYSwgU3lzdGVtUGFyYW1ldGVyc0luZm8oKSBwYXJ0bHkgaW1wbGVtZW50ZWQuCgpUdWUgRmViIDIyIDE5OjAwOjAyIDE5OTQgIE1pZ3VlbCBkZSBJY2F6YSAgKG1pZ3VlbEB4b2NoaXRsLm51Y2xlY3UudW5hbS5teCkKCgkqIFt0b29sa2l0L3dpbm1haW4uY10KCUFkZGVkIF9XaW5NYWluIGZ1bmN0aW9uLiBTZXR1cHMgdGhlIGxpYnJhcnkgKGNhbGxzIFVTRVJfSW5pdEFwcCkuCgoJKiBbdG9vbGtpdC9zdXAuY10KCUFkZGVkIGxvYWRfbXpfaGVhZGVyLCBsb2FkX25lX2hlYWRlciwgbG9hZF90eXBlX2luZm8gYW5kCglsb2FkX25hbWVfaW5mbyBmdW5jdGlvbnMuCgoJKiBbdG9vbGtpdC9oZWFwLmNdIAoJQ29kZSBjbGVhbnVwLiAKCgkqIFttaXNjL3VzZXIuY10KCU1vdmVkIGZyb20gbG9hZGVyL21pc2MuYy4gSSBob3BlIHRvIHB1dCBiYWNrIGFsbCB0aGUgbG9hZGVyCglmdW5jdGlvbnMgaW4gdGhlIH5sb2FkZXIgc3ViZGlyZWN0b3J5IGluIHRoZSBmdXR1cmUuIENVcnJlbnRseSBpcwoJbmVlZGVkIHNpbmNlIGl0IGhhcyBVU0VSX0luaXRBcHAuCgoJKiBbbWlzYy9yZXNvdXJjZS5jXQoJU2luY2UgV2luZUxpYiB3aWxsIHByb2JhYmx5IG5lZWQgRExMcyAoY3VycmVudGx5IGl0IG5lZWRzCglTeXNyZXMuZGxsKS4gV2luZUxpYiB3aWxsIGJlIHVzaW5nIG11Y2ggY29kZSBvZiB0aGUgbG9hZGVyIGFnYWluLgoJU28gSSByZW1vdmVkIHNvbWUgaWZkZWZzIHRoYXQgd2VyZSB1c2VkIGJ5IFdpbmVMaWIuCgoJQWRkZWQgbG9hZF90eXBlaW5mbyBhbmQgbG9hZF9uYW1laW5mbyAoYW5kIHRoZSBjb3JyZXNwb25kaW5nCglmdW5jdGlvbnMgaW4gW3Rvb2xraXQvc3VwLmNdCgoJQWRkZWQgaW50ZWdlciBjb252ZXJ0aW9uIGZ1bmN0aW9ucyBpbiB0aGUgbmVlZGVkIHBsYWNlcy4KCglBZGRlZCB2ZXJ5IHVnbHkgcGF0Y2ggKGluY2x1ZGVzIHdpbmUuYykuIEluIHRoZSBuZXh0IHJlbGVhc2UgSQoJcGxhbiB0byBtb3ZlIGJhY2sgYWxsIHRoZSBsb2FkZXIgcm91dGluZXMgdG8gfi9sb2FkZXIuIEluIHRoZQoJbWVhbnRpbWUgSSBuZWVkZWQgdGhpcyBwYXRjaC4gSXQgZG9lc24ndCBhZmZlY3QgYW55IG9mIHRoZQoJZW11bGF0b3IgY29kZSAoaXRzIGlmZGVmZWQgZm9yIFdpbmVMaWIpLgoKCSogW21pc2MvbWFpbi5jXQoJQ2xlYW5lZCB1cCBjYWxsIHRvIFdpbk1haW4gKG5vdyB1c2VzIFt0b29sa2l0L3dpbm1haW4uY10KCUlmZGVmZWQgYXJndW1lbnQgbnVtYmVyIGNoZWNraW5nIHdoZW4gY29tcGlsaW5nIHRoZSBsaWJyYXJ5LgoKCSogW2xvYWRlci93aW5lLmNdCglNb2RpZmllZCB0byB1c2UgbG9hZF8obXp8bmUpX2hlYWRlciBpbnN0ZWFkIG9mIGRvaW5nIGEgZGlyZWN0CglyZWFkLiAgV2hlbiBjb21waWxpbmcgdGhlIGVtdWxhdG9yIGl0IHN0aWxsIHVzZXMgdGhlIGRpcmVjdCByZWFkCglmb3IgcGVyZm9ybWFuY2UuIAoKCSogW2luY2x1ZGUvd2luZS5oXQoJUHJvdG90eXBlcyBmb3IgbG9hZGluZyByb3V0aW5lcy4KCgkqIFtpbmNsdWRlL2NsYXNzLmhdCglBZGRlZCBXSU5FX1BBQ0tFRCBtYWNybyBpbnN0ZWFkIG9mIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQoKCSogW2luY2x1ZGUvYXJjaC5oXQoJTWFjcm9zIGZvciBjb252ZXJ0aW5nIGludGVnZXJzIChMaXR0bGUgZW5kaWFuIHRvIGJpZy1lbmRpYW4pLgoJTmVlZGVkIGluIHRoZSBTdW4gdG8gYWxsb3cgbG9hZGluZyBvZiBETEwgZmlsZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBGZWIgMTQgMjM6NDg6MDkgTUVUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdCglNb3ZlZCBldmVyeXRoaW5nIGludG8gd2luZG93cy9wYWludGluZy5jIGFuZCByZW1vdmVkIHRoaXMgZmlsZS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCVJlbW92ZWQgY2FsbHMgdG8gbWVtbW92ZSgpIGluIE1TR19SZW1vdmVNc2coKS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQWRkZWQgV01fR0VUTUlOTUFYSU5GTyBzdXBwb3J0IGZvciB3aW5kb3cgcmVzaXppbmcuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJSW1wbGVtZW50ZWQgUmVkcmF3V2luZG93KCkuCgoJKiBbd2luZG93cy9zY3JvbGwuY10KCUJ1ZyBmaXggaW4gU2Nyb2xsV2luZG93RXgoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJTW92ZWQgVXBkYXRlV2luZG93KCkgdG8gd2luZG93cy9wYWludGluZy5jLgoKRnJpIEZlYiAxMSAxMjo0MToyOCAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoJCgkqIFtsb2FkZXIvd2luZS5jXSBbbWlzYy9kb3NfZnMuY10KCWdldGVudigpIGVxIE5VTEwgYnVnZml4ZXMuCgoJKiBbbWlzYy9jb21tLmNdCgljZm1ha2VyYXcgY2hhbmdlZCBmb3IgU3VuT1MuCgpGZWIgMTMsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttZW0vYXRvbS5jXQoJQnVnIGZpeCBpbiBBVE9NX0RlbGV0ZUF0b20oKSA6IAoJCWNoYW5nZSBMb2NhbEZyZWUoKSBieSBVU0VSX0hFQVBfRlJFRSgpLgoKCSogW21pc2MvbWVzc2FnZS5jXQoJTmV3IGZ1bmN0aW9uIEZhdGFsQXBwRXhpdCgpLgoKCSogW29iamVjdHMvZm9udC5jXQoJTmV3IGVtcHR5IHN0dWIgU2V0TWFwcGVyRmxhZ3MoKS4KCgkqIFtjb250cm9scy9tZW51LmNdCglCZXR0ZXIgQ2hlY2tNYXJrICYgb3RoZXIgYml0bWFwcyBwbGFjZW1lbnQuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJTmV3IGZ1bmN0aW9uIFJvdW5kUmVjdCgpIDogY2FsYy5leGUgbm93IHdvcmtpbmcuLi4KClR1ZSBGZWIgMTUgMTQ6Mjk6MzcgMTk5NCAgSm9obiBSaWNoYXJkc29uCgogICAgICAgICogW29iamVjdHMvYml0Ymx0LmNdCiAgICAgICAgRml4ZWQgU3RyZXRjaEJsdCBzbyBpdCB3b3JrcyBxdWlja2VyIGFuZCBmYXN0ZXIuICBJdCBzdGlsbCBkb2Vzbid0CiAgICAgICAgdXNlIHRoZSBTdHJldGNoTW9kZSBiaXRzIGZvciBiaXRtYXAgY29tcHJlc3Npb24sIGJ1dCB0aGF0IHdpbGwKICAgICAgICBjb21lIHNvb24uCgpNb24gRmViIDE0IDEzOjIxOjA0IDE5OTQgIE1pZ3VlbCBkZSBJY2F6YSAgKG1pZ3VlbEByb3hhbm5lLm51Y2xlY3UudW5hbS5teCkKCgkqIFtpbmNsdWRlL3dpbmRvd3MuaCxkaWFsb2cuaCxnZGkuaF0KCUNoYW5nZWQgX19hdHJpYnV0ZV9fICgocGFja2VkKSkgZm9yIFdJTkVfUEFDS0VELiAKCVdoZW4gY29tcGlsaW5nIHRoZSBsaWJyYXJ5IHRoaXMgaXMgZGVmaW5lZCBhcyBub3RoaW5nLiBUaGlzIGdldHMKCXJpZCB3aXRoIGFsbCB0aGUgcHJvYmxlbXMgY29tcGlsaW5nIHVuZGVyIFN1bk9TLiBBbHNvIAoKCSogW3dpbmRvd3MvdXRpbGl0eS5jXQoJQWRkZWQgRGVidWdQcmludFN0cmluZy4KCgkqIFt0b29sa2l0L3N1cC5jXQoJQWRkZWQgaFN5c1JlcyA9IDEgZGVmaW5pdGlvbiB0byByZXNvbHZlIGV4dGVybmFscy4KCUFkZGVkIENhbGxMaW5lRERBUHJvYyBmdW5jdGlvbiAodG9vbGtpdCB2ZXJzaW9uKS4KCUFkZGVkIHRveSwgYW5kIGhpIGluZWZpY2llbnQgbWVtbW92ZSB1bnRpbCBjb2RlIGluIG1lc3NhZ2UuYyBnZXQKCXJld3JpdHRlbi4KCgkqIFtvYmplY3RzL2dkaW9iai5jXQoJSWZkZWZlZCBsaW51eC9lbXVsYXRvci1kZXBlbmRlbnQgY29kZSB0byBhbGxvdyBjb21waWxhdGlvbiBvZgoJV2luZUxpYi4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJQWRkZWQgaWZkZWYgdG8gYWxsb3cgY29tcGlsYXRpb24gdW5kZXIgU3VuT1MuCgoJKiBbbWlzYy9yZXNvdXJjZS5jXQoJV2hlbiBjb21waWxpbmcgdGhlIGxpYnJhcnksIHRoZSByZXNvdXJjZSBmaWxlIGlzIGV4cGVjdGVkIHRvIGJlIGluCglhIGZpbGUgY2FsbGVkICRhcmd2WzBdLlJlcy4gQWxzbyB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIHJlc291cmNlCglpcyBleHBlY3RlZCB0byBiZSBhdCBvZmZzZXQgMCBvZiB0aGUgLlJlcyBmaWxlLgoKCSogW21pc2MvbWFpbi5jXQoJQ2FsbCBXaW5NYWluIHdpdGggYXJndW1lbnRzIGlmIGNvbXBpbGluZyBXaW5lTGliLgoJQ2FsbCBzaHV0ZG93biBmdW5jdGlvbnMgKENvbW1fRGVJbml0LCBET1NfRGVJbml0RlMpLgoJQ2FsbCBzeW5jX3Byb2ZpbGVzIHRvIHByZXNlcnZlIGNoYW5nZXMgdG8gLklOSSBmaWxlcy4KCgkqIFttaXNjL2NvbW0uYyxkb3NfZnMuY10KCXJlbW92ZWQgY2FsbCB0byBhdGV4aXQoQ29tbV9EZUluaXQpCglyZW1vdmVkIGNhbGwgdG8gYXRleGl0KERPU19EZUluaXRGUykKCVNodXRkb3duIGZ1bmN0aW9ucyBhcmUgbm93IGNhbGxlZCBmcm9tIHRoZSByZXR1cm4gb2YgV2luTWFpbgoKCSogcmVtb3ZlZCBtZW1vcnlsaWIgc3ViZGlyZWN0b3J5CgoJKiBtb3ZlZCBtZW1vcnkvYXRvbS5jICAgIHRvIG1pc2MvYXRvbS5jCgkgIG1vdmVkIG1lbW9yeWxpYi9oZWFwLmMgdG8gdG9vbGtpdC9oZWFwLmMKCgkqIFtsb2FkZXIvd2luZS5jXQoJTW92ZWQgRGVidWdQcmludFN0cmluZyB0byB3aW5kb3dzL3V0aWxpdHkuYwoKCSogW2luY2x1ZGUvd2luc29jay5oXQoJRGVmaW5lIFNPX0RPTlRMSU5HRVIgb25seSBpZiBpdCBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkZWZpbmVkLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJYWRkZWQgZGVmaW5pdGlvbiBmb3IgRExHUFJPQy4KCWFkZGVkIGRlZmluaXRpb24gZm9yIExNRU1fV0lORV9BTElHTiBhbmQgb3RoZXIgTE1FTV8qIGNvbnN0YW50cy4KCVdoZW4gY29tcGlsaW5nIFdpbmVMaWIgV05EUFJPQyBpcyBkZWZpbmVkIHdpdGggYWxsIHRoZSBwYXJhbWV0ZXJzCgl0byBhdm9pZCBjb21waWxhdGlvbiBwcm9ibGVtcy4KCgkqIFtpbmNsdWRlL3VzZXIuaF0KCVdoZW4gY29tcGlsaW5nIFdpbmVMaWIgVVNFUl9IRUFQXyhBTExPQ3xSRUFMTE9DfEFERFJ8RlJFRSkgdGhlCgljYWxscyBhcmUgdHJhbnNsYXRlZCB0byB0aGUgbGlicmFyeSBhbGxvY2F0aW9uIHJvdXRpbmVzLgoKCSogW2luY2x1ZGUvZ2RpLmgsdXNlci5oXQoJV2hlbiBjb21waWxpbmcgV2luZUxpYiBHRElfSEVBUF8oQUxMT0N8QUREUnxGUkVFKSB0aGUgY2FsbHMgYXJlCgl0cmFuc2xhdGVkIHRvIHRoZSBsaWJyYXJ5IGFsbG9jYXRpb24gcm91dGluZXMuCgoJKiBbaW5jbHVkZS9hdG9tLmhdCglEZWZpbmVkIExvY2FsQWxpZ24uIFdoZW4gY29tcGlsaW5nIHRoZSBlbXVsYXRvciBpdCdzIHRyYW5zbGF0ZWQgYXMKCWEgY2FsbCB0byBMb2NhbEFsbG9jICh0aGUgb3JpZ2luYWwgY29kZSksIHdoZW4gY29tcGlsaW5nIFdpbmVMaWIKCWFzIGEgY2FsbCB0byBMb2NhbEFsbG9jIHdpdGggYSBXSU5FLWZsYWcgY2FsbGVkIExNRU1fV0lORV9BTElHTgoJKGF0b20uYyBuZWVkcyBhbGlnbmVkIGRhdGEgb24gYSA0IGJ5dGUgYm91bmRhcnkpLgoKCSogW21pc2MvZmlsZS5jXQoJUmVuYW1lZCBLRVJORUxfKiBmdW5jdGlvbnMgYW5kIGZpeGVkIHByb3RvdHlwZXMuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJUmVuYW1lZCBLRVJORUxfKiBmdW5jdGlvbnMgaW4gb3JkZXIgdG8gYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMKCXVzaW5nIFdpbmUgYXMgYSBsaWJyYXJ5IChPcGVGaWxlLCBfbGNsb3NlLCBfbHJlYWQsIF9sY3JlYXRlLAoJX2xsc2VlaywgX2xvcGVuLCBfbHdyaXRlKS4KCgkqIFtNYWtlZmlsZV0KCUNyZWF0ZSBsaWJyYXJ5IGluc3RlYWQgb2YgZXhlY3V0YWJsZSB3aGVuIGJ1aWxkaW5nIHRhcmdldAoJbGlid2luZS5hIAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgRmViICA4IDEzOjUyOjExIDE5OTQgIE1pZ3VlbCBkZSBJY2F6YSAgKG1pZ3VlbEByb3hhbm5lKQoKCSogW01ha2VmaWxlc10KCVVzZSAkKENDKSBpbnN0ZWFkIG9mIGNjLgoJQWRkZWQgbGlid2luZSB0YXJnZXQuCgoJKiBbaW5jbHVkZS9wcm90b3R5cGVzXQoJI2lmZGVmZWQgc2VjdGlvbiBmb3IgV2luZUxpYgoKCSogbW92ZWQgbG9hZGVyL2N1cnNvci5jICAgdG8gbWlzYy9jdXJzb3IuYwoJICBtb3ZlZCBsb2FkZXIvcmVzb3VyY2UuYyB0byBtaXNjL3Jlc291cmNlLmMKCSAgbW92ZWQgbWlzYy9lbXVsYXRlLmMgICAgdG8gbWlzY2VtdS9lbXVsYXRlLmMKCSAgbW92ZWQgbWlzYy9pbnQxYS5jICAgICAgdG8gbWlzY2VtdS9pbnQxYS5jCgkgIG1vdmVkIG1pc2MvaW50MjEuYwkgIHRvIG1pc2NlbXUvaW50MjEuYwoJICBtb3ZlZAltaXNjL2tlcm5lbC5jCSAgdG8gbWlzY2VtdS9rZXJuZWwuYwoJICBtb3ZlZCBtaXNjL3VzZXIuYyAgICAgICB0byBtaXNjZW11L3VzZXIuYwoKCSogW21lbW9yeWxpYi9oZWFwLmNdCglIZWFwIG1hbmFnZW1lbnQgZm9yIFdpbmVMaWIKCgkqIFttaXNjL2NvbW0uY10KCU1vZGlmaWVkIHRvIGFsbG93IGNvbXBpbGF0aW9uIHVuZGVyIFN1bk9TICgjaW5jbHVkZSBlcnJubywgU3VuT1MKCWRvZXNuJ3QgaGF2ZSBhdGV4aXQgKCkpLgoKCSogW21pc2MvZG9zX2ZzLmNdCglNb2RpZmllZCB0byBhbGxvdyBjb21waWxhdGlvbiB1bmRlciBTdW5PUyAoI2luY2x1ZGUgdmZzLmgpCgoJKiBbbWlzYy9maWxlLmNdCglNb2RpZmllZCB0byBhbGxvdyBjb21waWxhdGlvbiB1bmRlciBTdW5PUyAoT1BFTl9NQVggY29uc3RhbnQsCgkjaW5jbHVkZSB1bmlzdGQuaCkKCgkqIFtvYmplY3RzL3BhbGV0dGUuY10KCU1vZGlmaWVkIHRvIGFsbG93IGNvbXBpbGF0aW9uIHVuZGVyIFN1bk9TICgjaW5jbHVkZSBsaW1pdHMpCgoJKiBbdG9vbGtpdC9zdXAuY10KCVdpbmVMaWIgdmVyc2lvbiBvZiBDYWxsV2luZG93UHJvYy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglUeXBlZGVmIFhQb2ludGVyIHVuZGVyIFgxMVI0IChPcGVuV2luZG93cykuCgoJKiBbd2luZG93cy93aW4uY10KCVdoZW4gY29tcGlsaW5nIFdpbmVMaWIsIHVzZSBkaXJlY3QgY2FsbGJhY2tzIGluc3RlYWQgb2YgdGhlCgl3aW5kb3dzIHN1cHBsaWVkIGNhbGxiYWNrcy4KCk1vbiBGZWIgIDcgMjI6Mzc6MzQgTUVUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtsb2FkZXIvY3Vyc29yLmNdCglOZXcgZnVuY3Rpb24gQ1VSU09SX1NldFdpbkN1cnNvcigpLCBmb3IgaW50ZXJuYWwgdXNlLCB0byBzZXQKCXRoZSBjdXJzb3Igb2YgYSBzcGVjaWZpYyB3aW5kb3cgbW9yZSByZWxpYWJseSB0aGFuIHdpdGggU2V0Q3Vyc29yKCkuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUJldHRlciB3aW5kb3cgbWFuYWdlbWVudC4gTW92aW5nIGFuZCByZXNpemluZyBmcm9tIHRoZSBzeXN0ZW0KCW1lbnUgc2hvdWxkIHdvcmsgbm93LgoJQWRkZWQgc2Nyb2xsLWJhciBtb3VzZSB0cmFja2luZy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJTW92ZWQgc2Nyb2xsLWJhciBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gdG8gZGVmd25kLmMuCgpGZWIgNSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglDYWxsIHRvIFN0ZERyYXdNZW51QmFyKCkgZHVyaW5nIE5DJ3MgZHJhd2luZy4KCU5ldyBOQ19UcmFja01vdXNlTWVudUJhcigpIGZ1bmN0aW9uIHdoaWNoIGNhbGwgCgkJTWVudUJ1dHRvbkRvd24oKSwgTWVudUJ1dHRvblVwKCkgJiBNZW51TW91c2VNb3ZlKCkuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IENoYW5nZU1lbnUoKSBmdW5jdGlvbi4KCVJlbW92ZSBwZXJtYW5lbnRseSBvbGQgWHQgbWVudSBjb2RlLgoJTWFrZSBjb21tb24gZnVuY3Rpb25zIE1lbnVCdXR0b25Eb3duKCksIE1lbnVCdXR0b25VcCgpCgkJJiBNZW51TW91c2VNb3ZlKCkgZm9yIGJvdGggcG9wdXBzICYgbWVudWJhci4KCQoJKiBbY29udHJvbHMvY29tYm8uY10KCVBhaW50IE9CTV9DT01CTyBkaXJlY3RseSBpbiBjb21ibyBjbGllbnQuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJRml4IGJ1ZyBpbiBtdWx0aWNvbHVtbnMgY2FsY3VsYXRpb25zLgoKCSogW2NvbnRyb2xzL01ha2VmaWxlXQoJUmVtb3ZlIHJ1bGVzIGZvciBvbGQgZmlsZSAnY2FwdGlvbi5jJy4KCgkqIFttaXNjL2tlcm5lbC5jXQoJUmVtb3ZlIGVtcHR5IHN0dWIgR2V0TW9kdWxlRmlsZU5hbWUoKS4KCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJTmV3IEdldE1vZHVsZUhhbmRsZSgpIGZ1bmN0aW9uLgoJTmV3IEdldE1vZHVsZVVzYWdlKCkgZnVuY3Rpb24uCglOZXcgR2V0TW9kdWxlRmlsZU5hbWUoKSBmdW5jdGlvbi4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCVRyeSB0byBmaW5kIHRoZSBidWcgYSBtaXNzaW5nIG1lbnUgbG9hZGluZyAuLi4gTm90IGZvdW5kIHlldCAhCgoJKiBbd2luZG93cy93aW4uY10KCVJlbW92ZSBvbGQgbWVudWJhciBjcmVhdGlvbi4KClRodSBGZWIgIDMgMjI6MzA6MTEgMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJTW9yZSBmdW5jdGlvbnMgYWRkZWQuCgoJKiBbaWYxNjMyL3dpbnNvY2suc3BlY10gW21pc2Mvd2luc29ja2V0LmNdCglBZGRlZCBKb2huIEJyZXphaydzIHdpbnNvY2suZGxsIHN0dWZmLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgRmViICAxIDIxOjE0OjQ3IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglBZGRlZCBmdW5jdGlvbiBDcmVhdGVOZXdTZWdtZW50cygpLiAgTW9kaWZpZWQgSVBDQ29weVNlbGVjdG9yCgl0byBhbGxvdyBhbGlhc2luZyB0byBhbnkgYXJiaXRyYXJ5IG1lbW9yeSBzcGFjZS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglGaXhlZCBwb3RlbnRpYWwgYnVnIGluIEdsb2JhbEdldEZyZWVTZWdtZW50cygpLgoKCSogW21lbW9yeS9saW5lYXIuY10KCUNyZWF0ZWQgZnVuY3Rpb25zIEdsb2JhbExpbmVhckxvY2soKSBhbmQgR2xvYmFsTGluZWFyVW5sb2NrKCkuCgpUdWUgRmViICAxIDA1OjUxOjQzIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglSZW1vdmVkIENBUFRJT04gd2luZG93IGNsYXNzLgoKCSogW2xvYWRlci9jdXJzb3IuY10KCUJ1ZyBmaXggaW4gTG9hZEN1cnNvcigpOiBkb24ndCBhbGxvY2F0ZSBtZW1vcnkgZXZlcnkgdGltZSBmb3IKCWJ1aWx0LWluIGN1cnNvcnMuCgoJKiBbd2luZG93cy9jbGlwcGluZy5jXQoJSW52YWxpZGF0ZSBjaGlsZCB3aW5kb3dzIGluIEludmFsaWRhdGVSZ24oKS4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQWRkZWQgcmVwYWludCBvZiB0aGUgY2FwdGlvbiB3aGVuIGNoYW5naW5nIHdpbmRvdyB0ZXh0LgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCU1vZGlmaWVkIFNldENhcHR1cmUoKSB0byBhbGxvdyBrZXlib2FyZCBldmVudHMgd2hpbGUgY2FwdHVyaW5nLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJTmV3IGZ1bmN0aW9uIE1TR19HZXRIYXJkd2FyZU1lc3NhZ2UoKSwgdG8gZG8gbW91c2UgdHJhY2tpbmcKCXdpdGhvdXQgcmV0dXJuaW5nIGNvbnRyb2wgdG8gdGhlIFdpbmRvd3MgcHJvZ3JhbS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQSBjb3VwbGUgb2YgY2hhbmdlcyBpbiBmcmFtZSBkcmF3aW5nIGZvciBETEdNT0RBTEZSQU1FIHdpbmRvd3MuCglSZXdyaXR0ZW4gd2luZG93IG1vdmluZyBjb2RlLCB0byB1c2UgTVNHX0dldEhhcmR3YXJlTWVzc2FnZSgpCglpbnN0ZWFkIG9mIG5vbi1jbGllbnQgbW91c2UgZXZlbnRzICh0aGlzIGlzIHRoZSB3YXkgV2luZG93cwoJZG9lcyBpdCksIGFuZCB0byBzZW5kIFdNX0VOVEVSU0laRU1PVkUgbWVzc2FnZXMuCglSZW1vdmVkIFdNX05DQlVUVE9OVVAgYW5kIFdNX05DTU9VU0VNT1ZFIGhhbmRsZXJzLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBbGxvY2F0ZSB0ZW1wb3Jhcnkgc3RydWN0dXJlcyBvbiB0aGUgVVNFUiBoZWFwIGluc3RlYWQgb2YKCXVzaW5nIEdsb2JhbEFsbG9jKCkuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUFkZGVkIGZ1bmN0aW9uIFdJTlBPU19HZXRNaW5NYXhJbmZvKCkgdG8gZ2V0IHNpemluZyBpbmZvcm1hdGlvbnMuCgpKYW4gMzEsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQ2FsbCB0byBTdGREcmF3U2Nyb2xsQmFyKCkgZHVyaW5nIE5DJ3MgZHJhd2luZy4KCUNhbGwgdG8gTkNfU2Nyb2xsQmFyQnV0dG9uRG93bigpIG9uIE5DIG1vdXNlIGV2ZW50cyBXTV9MQlVUVE9ORE9XTi4KCUNhbGwgdG8gTkNfU2Nyb2xsQmFyQnV0dG9uVXAoKSBvbiBOQyBtb3VzZSBldmVudHMgV01fTEJVVFRPTlVQLgoJQ2FsbCB0byBOQ19TY3JvbGxCYXJNb3VzZU1vdmUoKSBvbiBOQyBtb3VzZSBldmVudHMgV01fTU9VU0VNT1ZFLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU5ldyBHZXRTdWJNZW51KCkgZnVuY3Rpb24uCglNb3ZlIEdldE1lbnUoKSAmIFNldE1lbnUoKSBmdW5jdGlvbnMgZnJvbSAnd2luZG93cy93aW4uYycuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJU3RhcnQgY2hhbmdlcyB0byBzYXRpc2Z5IHJlY2VudCBjaGFuZ2VzIGluIHNjcm9sbGJhcnMvd2luZG93cy4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCVB1dCBzb21lIGNvZGUgaW4gTG9hZEFjY2VsZXJhdG9ycygpIHN0dWIuCglOZXcgVHJhbnNsYXRlQWNjZWxlcmF0b3IoKSBmdW5jdGlvbi4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJUmVtb3ZlIEdldE1lbnUoKSAmIFNldE1lbnUoKSBmdW5jdGlvbnMuCglDYWxsIHRvIE5DX0NyZWF0ZVNjcm9sbEJhcnMoKSBpZiByZXF1aXJlZCBieSBDcmVhdGVXaW5kb3coKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIEphbiAyNCAxMDo0MDoxMCBFU1QgMTk5NCBKb2huIFJpY2hhcmRzb24gKGpyaWNoYXJkQGNzLnVtbC5lZHUpCgogICAgICAgICogW3dpbmRvdy93aW4uY10KICAgICAgICBBZGRlZCBmdW5jdGlvbnMgRW51bVdpbmRvd3MsIEVudW1DaGlsZFdpbmRvd3MsIGFuZCBoZWxwZXIKICAgICAgICBXSU5fRW51bUNoaWxkV2luLiAgRW51bVdpbmRvd3Mgd29uJ3QgbGlzdCBhbGwgd2luZSB3aW5kb3dzCiAgICAgICAgYmVjYXVzZSBHZXREZXNrdG9wV2luZG93IGlzbid0IGNvbXBsZXRlLiAgSG93ZXZlciwgdGhlIGNvZGUKICAgICAgICBpcyBpbiBwbGFjZSBmb3IgaXQgdG8gd29yayBjb3JyZWN0bHkgYW5kIG9ubHkgbmVlZHMgCiAgICAgICAgR2V0RGVza3RvcFdpbmRvdyB0byBkbyBzby4gIAoKVHVlIEphbiAyNSAwNTo1MTo0NyAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUFkZGVkIGhhbmRsaW5nIG9mIGFjdGl2YXRpb24gbWVzc2FnZXMgKFdNX0FDVElWQVRFLAoJV01fTkNBQ1RJVkFURSwgV01fTU9VU0VBQ1RJVkFURSkKCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglEZS1hY3RpdmF0ZSB0aGUgd2luZG93IHdoZW4gbG9zaW5nIGlucHV0IGZvY3VzLgoKCSogW3dpbmRvd3MvZm9jdXMuY10KCUJ1ZyBmaXggaW4gU2V0Rm9jdXMoKS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUFkZGVkIGFjdGl2YXRpb24gb2YgdGhlIHdpbmRvdyBvbiBtb3VzZS1jbGlja3MuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUNoYW5nZWQgbm9uLWNsaWVudCBhcmVhIHBhaW50aW5nIHRvIHVzZSB0aGUgY29ycmVjdCBjb2xvcnMKCWRlcGVuZGluZyB1cG9uIHRoZSBhY3RpdmF0aW9uIHN0YXRlLgoJQWRkZWQgV01fTkNBQ1RJVkFURSBtZXNzYWdlIGhhbmRsaW5nLgoJRml4ZWQgYSBjb3VwbGUgb2YgYnVncyBpbiB3aW5kb3cgbW92aW5nIGFuZCByZXNpemluZy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJSW1wbGVtZW50ZWQgR2V0L1NldEFjdGl2ZVdpbmRvdygpLgoJSW1wbGVtZW50ZWQgU1dQX05PQUNUSVZBVEUgZmxhZyBpbiBTZXRXaW5kb3dQb3MoKS4KCkphbiAxNywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW21pc2MvbWVzc2FnZS5jXQoJTWVzc2FnZUJveCBoYXMgYSBDYXB0aW9uQmFyIGZvciBoaXMgdGl0bGUgZXhjZXB0IGZvcgoJCU1CX1NZU1RFTU1PREFMIHdpdGggTUJfSUNPTkhBTkQuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUNhbGwgdG8gTkNfVHJhY2tTeXNNZW51IG9uIFN5c01lbnUgYnV0dG9uIG1vdXNlIGNsaWNrLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglDYWxsIHRvIE5DX1RyYWNrU3lzTWVudSBvbiBBbHQga2V5IChWS19NRU5VKS4KCgkqIFtjb250cm9scy9tZW51LmNdCglOZXcgR2V0U3lzdGVtTWVudSgpIGZ1bmN0aW9uLgoJTmV3IENvcHlTeXN0ZW1NZW51KCkgaW50ZXJuYWwgZnVuY3Rpb24uCglOZXcgTkNfVHJhY2tTeXNNZW51KCkgaW50ZXJuYWwgZnVuY3Rpb24uCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglOZXcgV01fSU5JVE1FTlUsIFdNX0lOSVRNRU5VUE9QVVAsIFdNX01FTlVTRUxFQ1QgJiBXTV9NRU5VQ0hBUiBkZWZpbmVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgSmFuIDEzIDExOjQ1OjEzIDE5OTQgIEpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAY3MudW1sLmVkdT4KCgkqIFt3aW5kb3cvd2luLmNdCglBZGRlZCBmdW5jdGlvbnMgRW5hYmxlV2luZG93LCBJc1dpbmRvd0VuYWJsZWQsIGFuZCBoZWxwZXIgCglXSU5fU2V0U2Vuc2l0aXZlLgoJCgkqIFt3aW5kb3cvZXZlbnQuY10KCUFkZGVkIGNoZWNrcyBmb3IgV1NfRElTQUJMRUQgd2luZG93cyBpbiBFVkVOVF9rZXksIEVWRU5UX01vdGlvbk5vdGlmeSwKCUVWRU5UX0J1dHRvblByZXNzLCBFVkVOVF9CdXR0b25SZWxlYXNlLCBFVkVOVF9Db25maWd1cmVOb3RpZnksCglFVkVOVF9Gb2N1c0luLCBFVkVOVF9Gb2N1c091dCwgYW5kIEVWRU5UX0VudGVyTm90aWZ5LiAgS2V5IGFuZCAKCWJ1dHRvbiBwcmVzc2VzIGJlZXAgZm9yIGEgZGlzYWJsZWQgd2luZG93LiAgCglJZiBhbnlvbmUgZmluZHMgYmV0dGVyIHBsYWNlcyBmb3IgdGhlc2UgY2hlY2tzLCBwbGVhc2UgdGVsbCBtZS4KCkphbiAxNywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW21pc2MvbWVzc2FnZS5jXQoJQ2xlYW51cCBvbiBidXR0b25zIGFuc3dlciB2YWx1ZSByZXR1cm5lZC4KCgkqIFtjb250cm9sL2NvbWJvLmNdCglOb3cgdXNlIE9CTV9DT01CTyBiaXRtYXAgZHJvcGRvd24gYnV0dG9uLgoKTW9uIEphbiAxNyAyMTo1Njo0NSAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW21pc2MvY29tbS9jXQoJQSBmZXcgYnVnZml4ZXMuCgpUdWUgSmFuIDE4IDA2OjM2OjQ4IDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtsb2FkZXIvY3Vyc29yLmNdCglBZGRlZCBYIGN1cnNvciBmb3IgSURDX1NJWkVOUyBhbmQgSURDX1NJWkVXRS4KCgkqIFtpbmNsdWRlL29wdGlvbnMuaF0gW21pc2MvbWFpbi5jXSAgKE5ldyBmaWxlcykKCVJld3JvdGUgbWFpbigpIGZ1bmN0aW9uIHRvIGdldCByaWQgb2YgWHQgYXBwbGljYXRpb24gY29udGV4dCwKCWFuZCBhZGRlZCBjb21tYW5kLWxpbmUgb3B0aW9uIHBhcnNpbmcuCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJVXNlIG9mIGEgcHJpdmF0ZSBtYXAgbm93IGNvbmZpZ3VyYWJsZSB3aXRoIGNvbW1hbmQtbGluZSBvcHRpb24uCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUFkZGVkIFdNX1NZU0NPTU1BTkQgaGFuZGxpbmcsIGFuZCBiZXR0ZXIgV01fU0VUQ1VSU09SIGhhbmRsaW5nLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVJlbW92ZWQgQ29uZmlndXJlTm90aWZ5IGV2ZW50IGhhbmRsZXIgKG5vIGxvbmdlciBuZWVkZWQpLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJU2VuZCBXTV9TRVRDVVJTT1IgbWVzc2FnZSBvbiBtb3VzZSBldmVudHMuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCVVzZSBPRU0gYml0bWFwcyBmb3IgdGhlIGRyYXdpbmcgb2YgdGhlIG5vbi1jbGllbnQgYXJlYS4KCUFkZGVkIGNhcHRpb24gYmFyIGJ1dHRvbnMgaGFuZGxpbmcsIGFuZCBtb3ZpbmcgYW5kIHJlc2l6aW5nIG9mCgl0aGUgd2luZG93IHZpYSB0aGUgd2luZG93IGZyYW1lIChieXBhc3NpbmcgdGhlIHdpbmRvdyBtYW5hZ2VyKS4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglCdWcgZml4IGluIEJlZ2luUGFpbnQoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJU2V0IHRoZSBvdmVycmlkZV9yZWRpcmVjdCBmbGFnIGZvciB3aW5kb3dzICh0byBieXBhc3Mgd2luZG93CgltYW5hZ2VyKS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJSW1wbGVtZW50ZWQgV2luZG93RnJvbVBvaW50KCksIENoaWxkV2luZG93RnJvbVBvaW50KCksCglCcmluZ1dpbmRvd1RvVG9wKCksIEdldC9TZXRJbnRlcm5hbFdpbmRvd1BvcygpLAoJR2V0L1NldFdpbmRvd1BsYWNlbWVudCgpLgoKTW9uIEphbiAxNyAyMDo0ODoyNCAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW21lbW9yeS9oZWFwLmNdCglBZGRlZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBsb2NhbCBoZWFwcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEphbiAgNCAxMzowMTozMyAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgogICAgICAgICogW3dpbmRvdy9jYXJldC5jXQogICAgICAgIE1vZGlmaWVkIGNvZGUgdG8gdXNlIHN5c3RlbSB0aW1lci4KCkphbiA5LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbd2luZG93cy93aW4uY10KCVdpbmRvd3MgY3JlYXRlIGlmIHJlcXVpcmVkIG5ldyBYTElCIE1lbnVCYXIgJiBDYXB0aW9uQmFyLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglXTV9DQUxDU0laRSBNb3ZlICYgUmVzaXplIGNhcHRpb24sIG1lbnViYXIgJiBzY3JvbGxiYXJzLgoJKEknbSBub3Qgc3VyZSBpdCdzIHRoZSBnb29kIHBsYWNlIGZvciBpdCwgYnV0IGl0IHdvcmsuLi4pCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglvcHRpbWl6ZSBpbiBGaW5kUmVzb3VyY2VCeU51bWJlciwgbWFrZSBsc2VlaygpIGlmIG5leHQgdHlwZSAuLi4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCXNjcm9sbGJhciBidXR0b25zIGFyZSBub3cgdXNpbmcgc3lzdGVtIHJlc291cmNlcyBiaXRtYXBzLgoKCSogW2NvbnRyb2xzL2NhcHRpb24uY10gLSBuZXcgZmlsZSAuLi4KCWNhcHRpb25iYXIgc2hvd2luZyB0aXRsZSwgY2xvc2UgYnV0dG9uIHdpdGggU3lzTWVudSwKCWFuZCBvdGhlciBidXR0b25zIHVzaW5nIHN5c3RlbSByZXNvdXJjZXMgYml0bWFwcy4KCgkqIFtjb250cm9scy9tZW51LmNdCglOZXcgZnVuY3Rpb25zOiBTZXRNZW51SXRlbUJpdG1hcHMoKSB3aXRoICdnbHVlcycsCglNYWtlIG5ldyB2ZXJzaW9uIG9mIExvYWRNZW51KCkgJiBQYXJzZU1lbnUoKSwKCSggcHV0ICNkZWZpbmUgVVNFX1BPUFVQTUVOVSApLgoJSW1wbGVtZW50YXRpb24gb2YgTWVudUJhciBmdW5jdGlvbnMuCgkKCSogW3N5c3Jlcy5kbGxdCglOZXcgYml0bWFwcyBmb3Igc3lzdGVtIHN1Y2ggT0JNX0NMT1NFLCBPQk1fTUlOSU1JWkUsIE9CTV9VUEFSUk9XSS4KCU5ldyBTWVNNRU5VIG1lbnUsIGl0IGRvbid0IHdvcmsgeWV0ICEgOi0oKAoKVHVlIEphbiAxMSAwNToyNzo0NSAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFttZW1vcnkvYXRvbS5jXQoJRml4ZWQgYSBidWcgdGhhdCBjb3VsZCBjYXVzZSBhdG9tcyB0byBiZSBjYXNlLXNlbnNpdGl2ZS4KCgkqIFttaXNjL3JlY3QuY10KCUJ1ZyBmaXggaW4gU3VidHJhY3RSZWN0KCkuCgoJKiBbb2JqZWN0cy9jbGlwcGluZy5jXQoJQnVnIGZpeCB3aGVuIHNldHRpbmcgdGhlIGNsaXAgbWFzayB0byBhbiBlbXB0eSByZWdpb24uCgoJKiBbd2luZG93cy9kY2UuY10KCUJ1ZyBmaXggaW4gUmVsZWFzZURDKCkuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUNhbGwgQWRqdXN0V2luZG93UmVjdEV4KCkgYmVmb3JlIGNyZWF0aW5nIHRoZSBkaWFsb2cgd2luZG93LgoJQWRkZWQgc3VwcG9ydCBmb3IgRFNfTU9EQUxGUkFNRSBzdHlsZS4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglDbGVhbmVkIHVwIGV2ZW50IGhhbmRsaW5nIGFuZCByZW1vdmVkIG9sZCBYdCBzdHVmZi4KCU1vdmVkIGRvdWJsZS1jbGljayBoYW5kbGluZyB0byB3aW5kb3dzL21lc3NhZ2UuYwoKCSogW3dpbmRvd3MvZm9jdXMuY10KCUJ1ZyBmaXg6IG9ubHkgc2V0IHRoZSBYIGZvY3VzIHdoZW4gdGhlIHdpbmRvdyBpcyB2aWV3YWJsZS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglSZXdyaXR0ZW4gRHJhd1JlbGllZlJlY3QoKSB0byB1c2UgYnJ1c2ggaW5zdGVhZCBvZiBwZW4sIGFuZAoJdG8gdXNlIHRoZSBzeXN0ZW0gY29sb3JzLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW1wbGVtZW50ZWQgV01fTkNISVRURVNUIG1lc3NhZ2Ugc2VuZGluZywgYW5kIG5vbi1jbGllbnQKCW1vdXNlIG1lc3NhZ2VzLgoJQ2xlYW5lZCB1cCBkb3VibGUtY2xpY2sgaGFuZGxpbmcsIGFuZCByZW1vdmVkIHRoZSBYdCBjb2RlLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdICAoTmV3IGZpbGUpCglJbXBsZW1lbnRlZCBBZGp1c3RXaW5kb3dSZWN0KCkuCglJbXBsZW1lbnRlZCBXTV9OQ0NBTENTSVpFLCBXTV9OQ0hJVFRFU1QgYW5kIFdNX05DUEFJTlQgaGFuZGxpbmcuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJQWRkZWQgc2VuZGluZyBvZiB0aGUgV01fTkNQQUlOVCBtZXNzYWdlIGluIEJlZ2luUGFpbnQoKS4KCgkqIFt3aW5kb3dzL3N5c21ldHJpY3MuY10gW2luY2x1ZGUvc3lzbWV0cmljcy5oXSAgKE5ldyBmaWxlcykKCUltcGxlbWVudGVkIHN5c3RlbSBtZXRyaWNzLgoKCSogW3dpbmRvd3Mvd2luLmNdCglCdWcgZml4IGluIHNldHRpbmcgdGhlIHBhcmVudCBhbmQgb3duZXIgaW4gQ3JlYXRlV2luZG93KCkuCglSZW1vdmVkIHRoZSBYdCBjb2RlLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglBZGRlZCBzZW5kaW5nIG9mIHRoZSBXTV9OQ1BBSU5UIG1lc3NhZ2UgaW4gU2V0V2luZG93UG9zKCkuCglSZW1vdmVkIHRoZSBYdCBjb2RlLgoKU3VuIEphbiAgMiAxMjozODo1MyAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbd2luZG93cy9jbGFzcy5jXQoJSW1wbGVtZW50ZWQgR2V0Q2xhc3NOYW1lIGFuZCBHZXRDbGFzc0luZm8uCgoJKiBbd2luZG93cy9jYXJldC5jXQoJVmFyaW91cyBpbXByb3ZlbWVudHMgdG8gdGV4dCBjYXJldCBjb2RlLgoKRnJpIERlYyAzMSAxNToyMjoyMiAxOTkzICBKb2huIEJyZXphayA8YnJlemFrQGFwb2xsby5ocC5jb20+CgoJKiBbbWlzYy9jb21tLmNdCglQYXRjaGVzIHRvIHdvcmsgd2l0aCBOZXRCU0QuCgpUaHUgRGVjIDMwIDEyOjExOjU1IDE5OTMgIEpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAY3MudW1sLmVkdT4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXSBBZGRlZCBTdHJldGNoQmx0KCkuCgpUdWUgSmFuICA0IDA1OjIyOjA3IDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFttaXNjL3VzZXIuY10KCUFkZGVkIGNyZWF0aW9uIG9mIHN5c3RlbSBtZXNzYWdlIHF1ZXVlLgoKCSogW29iamVjdHMvYml0bWFwLmNdIFtvYmplY3RzL2RjdmFsdWVzLmNdIFt3aW5kb3dzL2RjLmNdCglBZGRlZCBEQyBzaXplIGZpZWxkcyBpbnRvIERDIHN0cnVjdHVyZS4JCQoKCSogW29iamVjdHMvY2xpcHBpbmcuY10KCUJ1ZyBmaXggaW4gQ0xJUFBJTkdfSW50ZXJzZWN0UmVjdCgpLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCUFsbG9jYXRlIGEgRENFIGluc3RlYWQgb2YgYSBEQyBmb3IgQ1NfQ0xBU1NEQyBjbGFzc2VzLgoKCSogW3dpbmRvd3MvY2xpcHBpbmcuY10KCUZpeGVkIEdldFVwZGF0ZVJlY3QoKSBhbmQgR2V0VXBkYXRlUmduKCkgdG8gY2xpcCB0byB0aGUgY2xpZW50IGFyZWEuCgoJKiBbd2luZG93cy9kY2UuY10KCUltcGxlbWVudGVkIEdldERDRXgoKSBhbmQgR2V0V2luZG93REMoKS4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJSW1wbGVtZW50ZWQgV01fV0lORE9XUE9TQ0hBTkdFRCBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglQcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBYbGliIGV2ZW50IGhhbmRsaW5nIGluc3RlYWQgb2YgWHQgY2FsbGJhY2tzLgoJQ2hhbmdlZCBNU0dfQWRkTXNnKCkgY2FsbHMgdG8gaGFyZHdhcmVfZXZlbnQoKSBvciBQb3N0TWVzc2FnZSgpLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJUHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbWVzc2FnZSBxdWV1ZXMuCglJbXBsZW1lbnRlZCBoYXJkd2FyZV9ldmVudCgpIHRvIHN0b3JlIG1lc3NhZ2VzIGludG8gdGhlIHN5c3RlbSBxdWV1ZS4KCUltcGxlbWVudGVkIEdldC9TZXRUYXNrUXVldWUoKS4KCUJldHRlciBXTV9QQUlOVCBhbmQgV01fVElNRVIgaGFuZGxpbmcuCglDaGFuZ2VzIHRvIHVzZSBYbGliIGluc3RlYWQgb2YgWHQgZm9yIGV2ZW50cy4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglVc2UgR2V0RENFeCgpIHRvIHJldHJpZXZlIHRoZSBEQywgdG8gZ2V0IGEgY29ycmVjdCB2aXNpYmxlIHJlZ2lvbi4KCgkqIFt3aW5kb3dzL3RpbWVyLmNdCglNb3ZlZCB0aGUgdGltZXIgcHJvY2VkdXJlIGNhbGxiYWNrIGludG8gRGlzcGF0Y2hNZXNzYWdlKCkuCglDaGFuZ2VkIGltcGxlbWVudGF0aW9uIHRvIGdldCByaWQgb2YgWHQgdGltZW91dHMuICBUaW1lciBjaGVja2luZwoJaXMgbm93IGRvbmUgaW5zaWRlIEdldE1lc3NhZ2UoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWxsb2NhdGUgYSBEQ0UgaW5zdGVhZCBvZiBhIERDIGZvciBDU19PV05EQyB3aW5kb3dzLgoJUmVwbGFjZWQgWHQgY2FsbHMgd2l0aCBYbGliIGNhbGxzLgoJTW92ZWQgd2luZG93IHBvc2l0aW9uaW5nIGZ1bmN0aW9ucyBpbnRvIHdpbmRvd3Mvd2lucG9zLmMKCgkqIFt3aW5kb3dzL3dpbnBvcy5jXSAgKE5ldyBmaWxlKQoJUmV3cml0dGVuIG1vc3Qgb2YgdGhlIHdpbmRvdyBwb3NpdGlvbmluZyBmdW5jdGlvbnMuCglJbXBsZW1lbnRlZCBTZXRXaW5kb3dQb3MoKSBhbmQgTWFwV2luZG93UG9pbnRzKCkuCgpKYW4gMywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglCYWQgYXJndW1lbnRzIGRlc2NyaXB0aW9uIGZvciBmdW5jdGlvbiBTZXREbGdJdGVtVGV4dC4KCgkqIFtvYmplY3RzL3RleHQuY10KCUZ1bmN0aW9uIERyYXdUZXh0IG5vdyBoYW5kbGUgRFRfQ0FMQ1JFQ1QgcmVxdWVzdC4KCgkqIFttaXNjL21lc3NhZ2UuY10KCU1lc3NhZ2UgYm94ZXMgbm93IHVzZSBEcmF3VGV4dCB3aXRoIERUX0NBTENSRUNULgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUJ1ZyBmaXggaW4gZnVuY3Rpb24gRnJhbWVSZWN0LCAoaXQgd2FzIHVzaW5nIFBFTiBpbnN0ZWFkIG9mIEJSVVNIKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQnVnIGZpeCBmb3IgZmxhZ3MgaW4gZnVuY3Rpb24gU2hvd1dpbmRvdy4KCU1vcmUgYWNjdXJhdGUgV01fU0laRSBnZW5lcmF0ZWQgYnkgZnVuY3Rpb24gU2hvd1dpbmRvdy4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglNb3JlIGNvZGUgZm9yIExCU19NVUxUSVBMRVNFTC4KCU1vcmUgY29kZSBmb3IgTEJTX01VTFRJQ09MVU1OLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQmFkIGRlZmluZSBmb3IgTUZfU0VQQVJBVE9SLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU5ldyBmdW5jdGlvbnM6IFBvcE1lbnVXbmRQcm9jKCkgd2l0aCAnZ2x1ZXMnLAoJQ3JlYXRlUG9wdXBNZW51KCksIEFwcGVuZE1lbnUoKSwgSW5zZXJ0TWVudSgpLCBSZW1vdmVNZW51KCksIAoJRGVsZXRlTWVudSgpLCBNb2RpZnlNZW51KCksIFRyYWNrUG9wdXBNZW51KCkuCglDb2RlIGluIHN0dWJzOiBDcmVhdGVNZW51KCksIERlc3Ryb3lNZW51KCkuIAoKU2F0IEphbiAgMSAxMDoyMjo0MyAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogbG9hZGVyL3dpbmUuYzogQWRkZWQgc3VwcG9ydCBmb3IgcmVsb2NhdGlvbiB0eXBlcyA1IGFuZCA2LgoKTW9uIERlYyAyNyAxMTowNjowMyAxOTkzICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW21pc2MvY29tbS5jXQoJbmV3IGZ1bmN0aW9uczogQnVpbGRDb21tRENCKCksIE9wZW5Db21tKCksIENsb3NlQ29tbSgpLAoJU2V0Q29tbUJyZWFrKCksIENsZWFyQ29tbUJyZWFrKCksIEVzY2FwZUNvbW1GdW5jdGlvbigpLCBGbHVzaENvbW0oKSwKCUdldENvbW1FcnJvcigpLCBTZXRDb21tRXZlbnRNYXNrKCksIEdldENvbW1FdmVudE1hc2soKSwKCVNldENvbW1TdGF0ZSgpLCBHZXRDb21tU3RhdGUoKSwgVHJhbnNtaXRDb21tQ2hhcigpLCBSZWFkQ29tbSgpLCAKCVdyaXRlQ29tbSgpLgoKV2VkIERlYyAyMiAxMzowMDoxNSAxOTkzICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbd2luZG93cy9jYXJldC5jXQoJSW1wbGVtZW50ZWQgdGV4dCBjYXJldCBmdW5jdGlvbnMuCgpUdWUgRGVjIDIxIDA2OjEzOjU4IDE5OTMgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtsb2FkZXIvd2luZS5jXQoJQnVnIGZpeCBpbiBMb2FkSW1hZ2UoKS4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXSBbb2JqZWN0cy9jbGlwcGluZy5jXSBbb2JqZWN0cy90ZXh0LmNdCgkgIFt3aW5kb3dzL2RjLmNdIFt3aW5kb3dzL2RjZS5jXSBbd2luZG93cy9ncmFwaGljcy5jXQoJTW9kaWZpZWQgZ3JhcGhpY3MgY2FsbHMgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIERDIG9yaWdpbi4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQWRkZWQgcHJlbGltaW5hcnkgV01fTkNDQUxDU0laRSBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglTZW5kIFdNX05DQ0FMQ1NJWkUgbWVzc2FnZSBvbiByZXNpemUgZXZlbnQuCgoJKiBbd2luZG93cy93aW4uY10KCVNlbmQgV01fTkNDQUxDU0laRSBtZXNzYWdlIGluIENyZWF0ZVdpbmRvdygpLgoJUmVhbGl6ZSB3aWRnZXRzIGF0IGNyZWF0aW9uIHRpbWUgKHNob3VsZCBwcmV2ZW50IHByb2JsZW1zIHdpdGgKCXVucmVhbGl6ZWQgd2lkZ2V0cykuCgpEZWMgMTksIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9zdGF0aWMuY10KCVNlbmQgbW91c2UgJiBrZXlib2FyZCBtZXNzYWdlIHJlY2VpdmVkIHRvIGl0cyBwYXJlbnQuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglTZW5kIGtleWJvYXJkIG1lc3NhZ2UgcmVjZWl2ZWQgdG8gaXRzIHBhcmVudC4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglBZGQgTmF2aWdhdGlvbiBrZXlzIC4KCUxpc3RCb3ggbm93IHVzZSBWU0NST0xMICYgSFNDUk9MTCBpbnN0ZWFkIG9mIGNoaWxkcmVuLgoJQWxwaGEgdmVyc2lvbiBvZiBMQlNfTVVMVElQTEVTRUwuCglBbHBoYSB2ZXJzaW9uIG9mIExCU19NVUxUSUNPTFVNTi4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQWRkIE5hdmlnYXRpb24ga2V5cyBvbiBjbG9zZWQgQ29tYm9Cb3guCglSZW1vdmUgdXNlbGVzcyAnQ09NQk9CT1hfQ3JlYXRlQ29tYm9Cb3gnIGZ1bmN0aW9uLgoKTW9uIERlYyAxOSAyMDozOTozNCAxOTkzICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW2xvYWRlci93aW5lLgoJTG9hZEltYWdlKCkgbW9kaWZpZWQgdG8gdXNlIEZpbmRGaWxlKCkuCgoJKiBbbWlzYy9maWxlLmNdCglTZXRFcnJvck1vZGUgYWRkZWQKCgkqIFttaXNjL2Rvc19mcy5jXQoJYnVnIGZpeGVzLgoKRGVjIDEzLCA5MyBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJYnVnIGZpeCBpbiBHbG9iYWxHZXRGcmVlU2VnbWVudCA6IGdvb2QgcHRyIGluICdnX3ByZXYnLgoKCSogW3N5c3Jlcy5kbGxdCglwcmVsaW1pbmFyeSB2ZXJzaW9uIG9mIGEgJ2dsYXNzIG9mIHdpbmUnIGJpdG1hcAoKCSogW3dpbmRvd3MvZXZlbnQuY10KCU5ldyBmdW5jdGlvbiAnR2V0Q2FwdHVyZScuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglSZW1vdmUgdXNlbGVzcyAnU0NST0xMQkFSX0NyZWF0ZVNjcm9sbEJhcicgZnVuY3Rpb24uCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJUmVtb3ZlIHVzZWxlc3MgJ0xJU1RCT1hfQ3JlYXRlTGlzdEJveCcgZnVuY3Rpb24uCgpNb24gRGVjIDEzIDEzOjUxOjAwIDE5OTMgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUNvcnJlY3RlZCBidWdzIGluIEdldENoYXJXaWR0aCgpLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCU1vZGlmaWVkIEVWRU5UX2tleSB0byBzZW5kIFdpbmRvd3MgdmlydHVhbCBrZXkgY29kZXMgZm9yCglXTV9LRVlET1dOIGFuZCBXTV9LRVlVUCBtZXNzYWdlcywgYW5kIGEgV01fQ0hBUiBtZXNzYWdlCglmb3IgcHJpbnRhYmxlIGNoYXJhY3RlcnMuCgpXZWQgRGVjIDA4IDE5OjIwOjAwIDE5OTMgIEthcmwgR3VlbnRlciBXdWVuc2NoIChobjMyNHd1QHVuaWR1aS51bmktZHVpc2J1cmcuZGUpCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJQWRkZWQgUG9seWxpbmUgYW5kIFBvbHlnb24KCk1vbiBEZWMgMTMgMTQ6NTE6NTQgMTk5MyAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglMaXN0Qm94RGlyZWN0b3J5KCkgbW9kaWZpZWQgdG8gdXNlIGRvc19mcy5jJ3MgZnVuY3Rpb25zIHRvCglhY2Nlc3MgZmlsZXMmfGRyaXZlcy4KClNhdCBEZWMgMDQgMTc6MDQ6MjMgMTk5MyAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCiAgICAgICAJKiBbbWlzYy9kb3NfZnMuY10KICAgICAgIAlBZGRlZCBGaW5kRmlsZSgpIHRvIHNlYXJjaCBhIGZpbGUgaW4gYSBkb3MvdW5peCBzdHlsZSBwYXRoLgoJCgkqIFttaXNjL2ZpbGUuY10KCU5ldyBXaW4zMSBmdW5jdGlvbnM6IE9wZW5GaWxlLCBfbGNyZWF0ZSwgX2xsc2VlaywgR2V0VGVtcERyaXZlLAoJR2V0VGVtcEZpbGVOYW1lLCBHZXRXaW5kb3dzRGlyZWN0b3J5LCBHZXRTeXN0ZW1EaXJlY3RvcnksCglHZXREcml2ZVR5cGUuCQkJICAgCgogICAgICAgCSogW21pc2MvaW50MjEuY10KICAgICAgIAlNb2RpZmllZC4KCldlZCBEZWMgIDEgMTY6MjA6NDUgMTk5MyAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHJveGFubmUubnVjbGVjdS51bmFtLm14KQoKICAgICAgICAqIFttaXNjL3Byb2ZpbGUuY10KICAgICAgICBUaGUgUHJvZmlsZSBmdW5jdGlvbnMgbm93IHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZXMuIFRoZXkgbm93CiAgICAgICAgaW1wbGVtZW50IGFsbCB0aGUgZmVhdHVyZXMgZGVzY3JpYmVkIGluIHRoZSBTREsuCgpUdWUgTm92IDMwIDEzOjU1OjI3IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IGFtc2NvbnMpCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglSZXdyb3RlIHNlbGVjdG9yIGFsaWFzaW5nIHJvdXRpbmVzIHRvIHVzZSBTeXN0ZW0gViBJUEMKCXJvdXRpbmUgdG8gYWxpYXMgbWVtb3J5IHNlZ21lbnRzLgoKTm92IDI4LCA5MyBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTW9yZSBjb25zaXN0ZW5jeSBpbiBmdW5jdGlvbnMgdXNpbmcgd0luZGV4ZXMKCgkqIFtjb250cm9scy9zY3JvbGwuY10KCU5ldyBmdW5jdGlvbiA6IFNob3dTY3JvbGxCYXIoKS4KCgkqIFtsb2FkZXIvY3Vyc29yLmNdIC4uLiBOZXcgZmlsZQoJTW92ZSBjdXJzb3IgZnVuY3Rpb25zIGZyb20gW2xvYWRlci9yZXNvdXJjZS5jXS4KCU5ldyBmdW5jdGlvbiA6IENsaXBDdXJzb3IoKS4KCU5ldyBmdW5jdGlvbiA6IEdldENsaXBDdXJzb3IoKS4KCU5ldyBmdW5jdGlvbiA6IENyZWF0ZUN1cnNvcigpLgoJU2V0Q3Vyc29yKCkgbm93IHdvcmtpbmcgdXNpbmcgZ2xvYWJhbCB2YXJpYWJsZSAnd2luSGFzQ3Vyc29yJy4KCgkqW29iamVjdC9wYWxldHRlLmNdCglOZXcgc3R1YiBvbmx5IDogU2VsZWN0UGFsZXR0ZSgpLgoJTmV3IHN0dWIgb25seSA6IFJlYWxpemVQYWxldHRlKCkuCgoJKlt3aW4vZXZlbnQuY10KCU5ldyBmdW5jdGlvbiA6IEVWRU5UX2VudGVyX25vdGlmeSgpLAoJCXVwZGF0ZSAnd2luSGFzQ3Vyc29yJyBhbmQgc2VuZCBXTV9TRVRDVVJTT1IuCgoJKlt3aW4vZGVmd25kLmNdCglBZGQgcHJvY2Vzc2luZyBvZiBXTV9TRVRDVVJTT1IgbWVzc2FnZS4KCgkqW3dpbi93aW4uY10KCU5ldyBtZW1iZXJzIGluIFdORCBzdHJ1Y3R1cmUgOiBoQ3Vyc29yLCBoV25kVlNjcm9sbCAmIGhXbmRIU2Nyb2xsLiAKCUNyZWF0ZVdpbmRvd0V4KCkgbm93IGNyZWF0ZSBjaGlsZHJlbiBmb3IgV01fSFNDUk9MTCAmIFdNX1ZTQ1JPTEwuCglOZXcgZnVuY3Rpb24gQ2xpZW50VG9TY3JlZW4oKS4KCU5ldyBmdW5jdGlvbiBTY3JlZW5Ub0NsaWVudCgpLgoKTW9uIE5vdiAyNSAxODoyNTo0MCAxOTkzICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKICAgICAgIAkqIFtmaWxlcy5oIC8gcmVnZnVuYy5oIC8gbWlzYy9kb3MuY10KICAgICAgIAlSZW1vdmVkLgoKICAgICAgIAkqIFttaXNjL2Rvc19mcy5jXQogICAgICAgCUFkZGVkIHN1cHBvcnQgZm9yIGxvYWRpbmcgZG9zZHJpdmUgY2ZnIGZyb20gd2luZS5pbmkuCgogICAgICAgCSogW21pc2MvaW50MjEuY10KICAgICAgIAlNb2RpZmllZC4KCgpXZWQgTm92IDI0IDExOjM3OjMzIDE5OTMgIGp1bGxpYXJkQGRpc3VuczIuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2luY2x1ZGUvYXRvbS5oXSBbbWVtb3J5L2F0b20uY10KCUltcGxlbWVudGVkIGF0b21zLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCU1vZGlmaWVkIFJlZ2lzdGVyQ2xhc3MoKSB0byB1c2UgYXRvbXMuCglJbXBsZW1lbnRlZCBDU19HTE9CQUxDTEFTUyBzdHlsZS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUltcGxlbWVudGVkIFJlZ2lzdGVyV2luZG93TWVzc2FnZSgpLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJQnVnIGZpeCBpbiBMb2FkUmVzb3VyY2UoKS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJTW9kaWZpZWQgQ3JlYXRlRGlhbG9nUGFyYW0oKSB0byB1c2UgRmluZC9Mb2FkUmVzb3VyY2UoKS4KCk1vbiBOb3YgMjIgMTM6NTg6NTYgMTk5MyAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKICAgICAgICAqIFt3aW5kb3dzL3Njcm9sbC5jXQoJUHJlbGltaW5hcnkgaW1wbGVtZW50YXRpb25zIG9mIFNjcm9sbFdpbmRvdywgU2Nyb2xsREMgYW5kCiAgICAgICAgU2Nyb2xsV2luZG93RXguCgpOb3YgMjEsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglPcHRpbWl6YXRpb24gb2YgcmVkcmF3IGR1cmluZyAnQWRkJyBvciAnSW5zZXJ0Jy4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCU9wdGltaXphdGlvbiBvZiBXTV9QQUlOVCBkdXJpbmcgJ3RodW1idHJhY2tpbmcnLgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJQWRkIG9mIGJldGEgaW1wbGVtZW50IG9mICdCU19PV05FUkRSQVcnCgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglTdHlsZSAnU1NfSUNPTicgbmV3IHN1cHBvcnRlZC4KCgkqIFttaXNjL21lc3NhZ2UuY10KCUJlZ2luIG9mIGltcGxlbWFudGF0aW9uIG9mIE1CX1hYWCBzdHlsZXMuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglGdW5jdGlvbiBMb2FkSWNvbigpIDogbm93IHByZXBhcmUgdHJhbnNwYXJlbmN5IEJpdG1hcCBtYXNrLgoJRnVuY3Rpb24gTG9hZEN1cnNvcigpIDogbm93IHByZXBhcmUgYSAnWCBwaXhtYXBjdXJzb3InLgoJTmV3IGZ1bmN0aW9uIFNldEN1cnNvcigpIDogbm90IGZpbmlzaGVkLgoJTmV3IGZ1bmN0aW9uIFNob3dDdXJzb3IoKSA6IG5vdCBmaW5pc2hlZC4KCU5ldyBmdW5jdGlvbiBBY2Nlc3NSZXNvdXJjZSgpIDogc3R1Yi4KCgkqIFtvYmovZGliLmNdCglGdW5jdGlvbiBEcmF3SWNvbigpOiBkZXVnZ2luZyBwaGFzZSBvZiBpY29uIHRyYW5zcGFyZW5jeSBtYXNrLgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCgluZXcgZmlsZSBmb3IgbmV3cyBmdW5jdGlvbnMgTG9hZExpYnJhcnkoKSAmIEZyZWVMaWJyYXJ5KCkuCgoJKiBbc3lzcmVzLmRsbF0KCVJlc291cmNlcyBvbmx5IDE2Yml0cyBETEwgZm9yIFN5c3RlbSBSZXNvdXJjZXMsIGljb25zLCBldGMuLi4KClN1biBOb3YgMTQgMTQ6Mzk6MDYgMTk5MyAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2luY2x1ZGUvZGlhbG9nLmhdIFt3aW5kb3dzL2RpYWxvZy5jXQoJU2ltcGxpZmllZCBkaWFsb2cgdGVtcGxhdGUgcGFyc2luZy4KCUltcGxlbWVudGVkIERpYWxvZ0JveEluZGlyZWN0KCkuCgoJKiBbd2luZG93cy93aW4uY10KCUZpeGVkIGJ1ZyBpbiBDcmVhdGVXaW5kb3coKSB3aGVuIGFib3J0aW5nIHdpbmRvdyBjcmVhdGlvbi4KCU1vZGlmaWVkIFVwZGF0ZVdpbmRvdygpIHRvIG9ubHkgdXBkYXRlIHZpc2libGUgd2luZG93cy4KCUltcGxlbWVudGVkIElzV2luZG93KCkuCgpOb3YgMTQsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglMaXN0Ym94IGNvbnRyb2wgd2luZG93IDogbmV3IG1lc3NhZ2VzLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglDb21ibyBib3ggY29udHJvbCB3aW5kb3cgOiBuZXcgbWVzc2FnZXMuCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglNb3ZlZCBzdHViIE1lc3NhZ2VCb3goKSB0byB0aGlzIG5ldyBmaWxlLgoJSW1wbGVtZW50ZWQgb2YgYSBjYWxsYmFjaywgbm93IE1lc3NhZ2VCb3ggc2hvdyBhIHdpbmRvdy4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCU5ldyBmdW5jdGlvbiBEZXN0cm95SWNvbigpCglOZXcgZnVuY3Rpb24gRGVzdHJveUN1cnNvcigpCglGaWxsZWQgc3R1YiBMb2FkSWNvbigpCglGaWxsZWQgc3R1YiBMb2FkQ3Vyc29yKCkKCUJ1ZyBmaXhlZCBpbiBGaW5kUmVzb3VyY2VCeU5hbWUoKSA6IG1pc3NpbmcgbHNlZWsoKS4KCgkqIFtvYmovZGliLmNdCglOZXcgZnVuY3Rpb24gRHJhd0ljb24oKQoKCSogW3dpbmRvd3Mvd2luLmNdCglOZXcgZnVuY3Rpb24gQ2xvc2VXaW5kb3coKQoJTmV3IGZ1bmN0aW9uIE9wZW5JY29uKCkKCU5ldyBmdW5jdGlvbiBJc0ljb25pYygpCglOZXcgRnVuY3Rpb24gRmluZFdpbmRvdygpCgpTdW4gTm92IDE0IDA4OjI3OjE5IDE5OTMgIEthcmwgR3VlbnRlciBXdWVuc2NoIChoejIyNXd1QHVuaWR1aS51bmktZHVpc2J1cmcuZGUpCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglXcm90ZSBBbGxvY0NTdG9EU0FsaWFzKCkgYW5kIEFsbG9jRFN0b0NTQWxpYXMoKQoKU3VuIE5vdiAxNCAwODoyNzoxOSAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBhbXNjb25zKQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJV3JvdGUgQWxsb2NTZWxlY3RvcigpIGFuZCBQcmVzdG9DaGFuZ29TZWxlY3RvcigpLiAgWVVLIQoKU2F0IE5vdiAxMyAxMzo1Njo0MiAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBhbXNjb25zKQoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJV3JvdGUgRmluZFJlc291cmNlKCksIExvYWRSZXNvdXJjZSgpLCBMb2NrUmVzb3VyY2UoKSwKCWFuZCBGcmVlUmVzb3VyY2UoKQoKCSogW2luY2x1ZGUvc2VnbWVtLmhdIFtsb2FkZXIvc2VsZWN0b3IuY10gW2xvYWRlci9zaWduYWwuaF0KCUNoYW5nZWQgc2VsZWN0b3IgYWxsb2NhdGlvbiBtZXRob2QuCgpTdW4gTm92IDEwIDA4OjI3OjE5IDE5OTMgIEthcmwgR3VlbnRlciBXdWVuc2NoIChoejIyNXd1QHVuaWR1aS51bmktZHVpc2J1cmcuZGUpCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmMgaWYxNjMyL2NhbGwuUyBpZjE2MzIvdXNlci5zcGVjXSAKCWFkZGVkIENhdGNoIChLRVJORUwuNTUpIGFuZCBUaHJvdyAoS0VSTkVMLjU2KQoJCk5vdiA3LCA5MyBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglTY3JvbGwgYmFyIGNvbnRyb2wgd2luZG93CgkJQnVnIHJlc29sdmVkIDogUGFpbnRpbmcgbWVzc2FnZSBiZWZvcmUgc2Nyb2xsIHZpc2libGUuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTGlzdGJveCBjb250cm9sIHdpbmRvdwoJCURlc3Ryb3kgY2xlYW51cC4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQ29tYm8gYm94IGNvbnRyb2wgd2luZG93CgkJRGVzdHJveSBjbGVhbnVwLgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJCUdldENoZWNrIE1lc3NhZ2Ugbm93IHJldHVybiBpcyBzdGF0ZS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJTmV3IGZ1bmN0aW9uIElzV2luZG93VmlzaWJsZSgpCgpNb24gTm92ICAxIDE0OjQwOjIxIDE5OTMgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtpZjE2MzIvdXNlci5zcGVjXQoJUmVtb3ZlZCBzb21lIGR1cGxpY2F0ZSBlbnRyaWVzLgoKCSogW2luY2x1ZGUvZGlhbG9nLmhdIFt3aW5kb3dzL2RpYWxvZy5jXQoJSW1wbGVtZW50ZWQgZGlhbG9nIHVuaXRzIGFuZCBmb250cy4KCUFkZGVkIHByZWxpbWluYXJ5IGxvYWRpbmcgb2YgZGlhbG9nIHJlc291cmNlcy4KCVByZWxpbWluYXJ5IGltcGxlbWVudGF0aW9uIG9mIERpYWxvZ0JveCgpLgoJSW1wbGVtZW50ZWQgR2V0L1NldERsZ0l0ZW0qIGZ1bmN0aW9ucy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJSW1wbGVtZW50ZWQgV01fUEFSRU5UTk9USUZZIG1lc3NhZ2UuCglJbXBsZW1lbnRlZCBDcmVhdGVXaW5kb3dFeCgpIGFuZCBHZXRXaW5kb3coKS4KCUNvbXBsZXRlZCBEZXN0cm95V2luZG93KCkuCgpNb24gTm92ICAxIDE4OjE5OjM0IDE5OTMgIEVyaWsgQm9zCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgaW50IDB4MTEgJiAweDEyLgoKICAgICAgICAqIFtsb2FkZXIvaW50MjEuY10KCUltcHJvdmVkIGZ1bmN0aW9uIGhhbmRsaW5nLgoKU3VuIE9jdCAzMSAxMjozODowOSAxOTkzICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbb2JqZWN0cy9mb250LmNdCglJbXBsZW1lbnRlZCBHZXRDaGFyV2lkdGgoKS4KCldlZCBPY3QgMjcgMDk6NTY6MDYgMTk5MyAgSm9obiBCcmV6YWsgPGJyZXpha0BjaC5ocC5jb20+CgoJKiBbTWFrZWZpbGVdCiAgICAgICAgVXNlIEdOVSBtYWxsb2MuCgoJKiBbaW5jbHVkZS9pbnQyMS5oIGluY2x1ZGUvd2luZS5oXQogICAgICAgIENoYW5nZSBzY19lZmxhZ3MgdG8gc2NfZWZsIC4KCgkqIFtpbmNsdWRlL3dpbmUuaF0KICAgICAgICBGaXggbWlzcGxhY2VkICNlbmRpZgogICAgICAgIEluY2x1ZGUgPHNpZ25hbC5oPiBmb3IgTmV0QlNECgoJKiBbbG9hZGVyL2ludDIxLmNdCiAgICAgICAgRG9uJ3QgaW5jbHVkZSA8c3lzL3Zmcy5oPiBpbiBOZXRCU0QKICAgICAgICBEbyBpbmNsdWRlIDxzeXMvbW91bnQuaD4gaW4gTmV0QlNECiAgICAgICAgQ2xlYW51cCBzb21lIGxpbnQuCgpNb24gT2N0IDI2IDE3OjU5OjAxIDE5OTMgIEVyaWsgQm9zCgogICAgICAgICogW2luY2x1ZGUvaW50MjEuaF0KICAgICAgICBBZGRlZC4KCiAgICAgICAgKiBbbG9hZGVyL2ludDIxLmNdCiAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgbWFueSBkb3MgaW50cy4KCiAgICAgICAgKiBbbWlzYy9maWxlLmNdIFtpbmNsdWRlL2ZpbGVzLmhdCiAgICAgICAgTW92ZWQgT1BFTl9NQVggYW5kIERvc0RyaXZlU3RydWN0IHRvIGZpbGVzLmguCgpTdW4gT2N0IDI0IDEzOjM2OjUwIDE5OTMgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtjb250cm9scy9idXR0b24uY10KCUltcGxlbWVudGVkIENIRUNLQk9YLCBBVVRPQ0hFQ0tCT1gsIDNTVEFURSwgQVVUTzNTVEFURSwKCVJBRElPQlVUVE9OLCBBVVRPUkFESU9CVVRUT04sIEdST1VQQk9YIGNvbnRyb2xzLCB0b2dldGhlciB3aXRoCglhIHByZWxpbWluYXJ5IFVTRVJCVVRUT04gY29udHJvbC4KCgkqIFtvYmplY3RzL3RleHQuY10KCUNvcnJlY3RlZCBidWdzIGluIFRFWFRfTmV4dExpbmUoKSBhbmQgYWRkZWQgaGFuZGxpbmcgb2YgcHJlZml4CgljaGFyYWN0ZXIuCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglEaXNhYmxlZCBmb2N1cyBoYW5kbGluZyBieSBjb21tZW50aW5nIG91dCBTZXRGb2N1cygpIGNhbGxzIHVudGlsCglzZXJpb3VzIGJ1ZyBjYW4gYmUgZm91bmQuCgpPY3QgIDIwLCA5MyBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTGlzdGJveCBjb250cm9sIHdpbmRvdwoJCVBhaW50aW5nIGNsZWFudXAsIG5ldyBtZXNzYWdlcyBwcm9jZXNzZWQuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglTY3JvbGwgYmFyIGNvbnRyb2wgd2luZG93CgkJUGFpbnRpbmcgY2xlYW51cC4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQ29tYm8gYm94IGNvbnRyb2wgd2luZG93CgkJUGFpbnRpbmcgY2xlYW51cC4KClR1ZSBPY3QgMTIgMTc6NTA6MTEgMTk5MyAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW29iamVjdHMvY29sb3IuY10gW29iamVjdHMvcGFsZXR0ZS5jXSBbd2luZG93cy9zeXNjb2xvci5jXQoJQmV0dGVyIHN1cHBvcnQgZm9yIHRoZSBwcml2YXRlIGNvbG9yIG1hcC4KCVVzaW5nIGEgcHJpdmF0ZSBtYXAgaXMgbm93IHRoZSBkZWZhdWx0LgoKCSogW3dpbmRvd3Mvd2luLmNdCglCdWcgZml4LgoKCSogW2luY2x1ZGUvZGlhbG9nLmhdIFt3aW5kb3dzL2RpYWxvZy5jXQoJSW1wbGVtZW50ZWQgQ3JlYXRlRGlhbG9nKigpIGFuZCBJc0RpYWxvZ01lc3NhZ2UoKS4KCgkqIFttaXNjL3h0LmNdIFt3aW5kb3dzL2RlZnduZC5jXQoJTW92ZWQgRGVmV2luZG93UHJvYygpIHRvIGRlZnduZC5jLgoJQWRkZWQgV01fTkNDUkVBVEUsIFdNX05DREVTVFJPWSBhbmQgV01fQ1RMQ09MT1IgaGFuZGxpbmcuCgoJKiBbd2luZG93cy9kZWZkbGcuY10KCVN0YXJ0ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIERlZkRsZ1Byb2MoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWRkZWQgV01fTkNDUkVBVEUgYW5kIFdNX05DREVTVFJPWSBtZXNzYWdlcy4KCUltcGxlbWVudGVkIElzQ2hpbGQoKS4KClR1ZSBPY3QgMTIgMTc6NTA6MjAgMTk5MyAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW3dpbmRvd3MvZm9jdXMuY10KCUltcGxlbWVudGVkIEdldEZvY3VzKCkgYW5kIFNldEZvY3VzKCkuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQWRkZWQgcHJvY2Vzc2luZyBvZiBGb2N1c0luIGFuZCBGb2N1c091dCBldmVudHMuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJQWRkZWQgRHJhd0ZvY3VzUmVjdCgpLgoKU2F0IE9jdCAgOSAxNDozNjo1NyAxOTkzICBFcmlrIEJvcwoKCSogW2xvYWRlci9pbnQxYS5jXQoJQWRkZWQgbW9yZSBmdW5jdGlvbiBoYW5kbGluZy4KCldlZCBPY3QgIDYgMTI6MjE6MjIgMTk5MyAgRXJpayBCb3MKCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglTcGxpdCBzaWduYWwuYyBpbnRvIGludDFhLmMsIGludDIxLmMgYW5kIHNpZ25hbC5jLgoKVHVlIE9jdCAgNSAyMjoxMjo0MCAxOTkzICBEYXZpZCBNZXRjYWxmZQoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXSBbY29udHJvbC93aWRnZXRzLmNdCglTdGF0aWMgY29udHJvbCBjbGFzcy4KCgkqIFtvYmplY3RzL3RleHQuY10KCUFkZGVkIHByb2Nlc3Npbmcgb2YgYWRkaXRpb25hbCBEVF8gZmxhZ3MgdG8gRHJhd1RleHQoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbbWlzYy94dC5jXQoJQWRkZWQgU2V0V2luZG93VGV4dCgpIGFuZCBXTV9TRVRURVhUIHByb2Nlc3NpbmcuCgpUdWUgT2N0ICA1IDIyOjEyOjQwIDE5OTMgIE1hcnRpbiBBeW90dGUKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglMaXN0Ym94IGNvbnRyb2wgd2luZG93CgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglTY3JvbGwgYmFyIGNvbnRyb2wgd2luZG93CgoJKiBbY29udHJvbHMvY29tYm8uY10KCUNvbWJvIGJveCBjb250cm9sIHdpbmRvdwoKCSogW2luY2x1ZGUvY29tYm8uaF0KCUNvbWJvIGJveCBkZWZpbml0aW9ucwoKCSogW2luY2x1ZGUvbGlzdGJveC5oXQoJTGlzdGJveCBkZWZpbml0aW9ucwoKCSogW2luY2x1ZGUvc2Nyb2xsLmhdCglTY3JvbGwgYmFyIGRlZmluaXRpb25zCgpTYXQgT2N0ICAyIDA5OjM1OjU0IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglGaXhlZCBidWcgaW4gTWFrZVByb2NJbnN0YW5jZSgpLgoKCSogW2RlYnVnZ2VyL2luZm8uY10KCUNoYW5nZWQgeC93IGFuZCB4L2IgdG8gZGlzcGxheSBpbiBoZXguCgoJKiBbZGVidWdnZXIvaTM4Ni1waW5zbi5jXQoJQWRkZWQgY29kZSB0byBwcm9wZXJseSB1bmFzc2VtYmxlIDE2LWJpdCBpbmRleGluZy4KCkZyaSBPY3QgIDEgMDg6Mjk6MDUgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtsb2FkZXIvZmlsZXMuY10gW21pc2MvcHJvZmlsZS5jXQoJU3lzdGVtIGluaXRpYWxpemF0aW9uIGZpbGUgaXMgbm93IGNhbGxlZCAid2luZS5pbmkiIGFuZCBjYW4KCWJlIGxvY2F0ZWQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LAoJb3IgYW55IGRpcmVjdG9yaWVzIHNwZWNpZmllZCBpbiB0aGUgV0lORVBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuCgoJKiBbdG9vbHMvYnVpbGQuY10gW2lmMTYzMi9jYWxsLlNdIFtpbmNsdWRlL3JlZ2Z1bmMuaF0KCUNoYW5nZWQgcmVnaXN0ZXIgZnVuY3Rpb24gc3RhY2sgdG8gbWF0Y2ggc2lnY29udGV4dCBzdHJ1Y3R1cmUuCgpUaHUgU2VwIDMwIDIyOjMwOjIxIDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbbG9hZGVyL2ZpbGVzLmNdCglDcmVhdGVkIGZ1bmN0aW9uIHRvIHNlYXJjaCBhIHBhdGggZm9yIGZpbGVzIHRvIGxvYWQuCgoJKiBbbG9hZGVyL3dpbmUuY10KCU1vZGlmaWVkIGV4ZSBhbmQgZGxsIGZpbGUgbG9hZGluZyB0byBzZWFyY2ggdGhyb3VnaCBwYXRoCglzcGVjaWZpZWQgYnkgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFdJTkVQQVRILgoKVGh1IFNlcCAzMCAyMjozMDoyMSAxOTkzICBFcmljIFlvdW5nZGFsZQoKCSogW2xvYWRlci9zaWduYWwuY10KCUJ1ZyBmaXguCgpUaHUgU2VwIDMwIDIyOjMwOjIxIDE5OTMgIEpvaG4gQnJlemFrCgoJKiBbZGVidWdnZXIvZGJnLnldIFtkZWJ1Z2dlci9kZWJ1Zy5sXSBbZGVidWdnZXIvZHRlc3QuY10gCgkgIFtkZWJ1Z2dlci9vYnN0YWNrLmhdCglVcGRhdGVzIHRvIGFsbG93IGRlYnVnZ2VyIHRvIGZ1bmN0aW9uIHVuZGVyIE5ldEJTRC4KClR1ZSBTZXAgMjggMTk6NTk6MjEgMTk5MyAgRGF2aWQgTWV0Y2FsZmUKCgkqIFt3aW5kb3dzL3dpbi5jXQoJSW1wbGVtZW50ZWQgc3VwcG9ydCBmb3Igd2luZG93cyB3aXRoIG5vIGJvcmRlcnMuICBBZGRlZAogCUdldFBhcmVudCgpLCBHZXREbGdDdHJsSUQoKSwgR2V0V2luZG93VGV4dCgpIGFuZAoJR2V0V2luZG93VGV4dExlbmd0aCgpIGZ1bmN0aW9ucy4KCgkqIFttaXNjL3h0LmNdCglBZGRlZCBwcm9jZXNzaW5nIG9mIFdNX0dFVFRFWFQgYW5kIFdNX0dFVFRFWFRMRU5HVEggbWVzc2FnZXMKCXRvIERlZldpbmRvd1Byb2MgYW5kIEltcGxlbWVudGVkIE1lc3NhZ2VCZWVwKCkuCgoJKiBbd2luZG93cy9zeXNjb2xvci5jXQoJQWRkZWQgcHJlbGltaW5hcnkgc3lzdGVtIGNvbG9yIHN1cHBvcnQuCgoJKiBbY29udHJvbHMvYnV0dG9uMS5jXQoJTW9kcyB0byBuZXcgYnV0dG9uIGNvbnRyb2wgYW5kIGludGVncmF0aW9uIHdpdGggV2luZS4KClR1ZSBTZXAgMjggMTk6NTk6MjEgMTk5MyAgSm9oYW5uZXMgUnVzY2hlaW5za2kKCgkqIFtjb250cm9scy9idXR0b24xLmNdCglOZXcgYnV0dG9uIGNvbnRyb2wgdXNpbmcgR0RJIGZ1bmN0aW9ucy4KCQpUdWUgU2VwIDI4IDE5OjU5OjIxIDE5OTMgIEVyaWMgWW91bmdkYWxlCgoJKiBbZGVidWdnZXIvKl0KCUFkZGVkIGRlYnVnZ2luZyBjYXBhYmlsaXRpZXMgdG8gV2luZQoKU2F0IFNlcCAyNSAxMzoyMjo1MCAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBkaS5lcGZsLmNoKQoKCSogW29iamVjdHMvcmVnaW9uLmNdCglCdWcgZml4CgpGcmkgU2VwIDI0IDA3OjM1OjExIDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbdG9vbHMvYnVpbGQuY10KCUNoYW5nZWQgdGhlIGVudHJ5IHBvaW50IGNvZGUgdG8gcmVkdWNlIHRoZSBzdGFuZGFyZCBlbnRyeQoJcG9pbnQgc2l6ZSBmcm9tIDIyIGJ5dGVzIHRvIDEwIGJ5dGVzLiAgVGhpcyBsZWF2ZXMgYWJvdXQKCTQwMDAgZnJlZSBlbnRyeSBwb2ludHMgaW5zdGVhZCBvZiB0aGUgODAwIGluIHZlcnNpb24gMC40LjIuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglSZXdyb3RlIGZ1bmN0aW9ucyB0byBhbGxvdyBsb2FkaW5nIG9mIHJlc291cmNlcyBmcm9tIGFueQoJRExMLgoKCSogW2xvYWRlci93aW5lLmNdIFtpbmNsdWRlL3dpbmUuaF0KCUFkZGVkIGZ1bmN0aW9ucyBHZXRGaWxlbmFtZUZyb21JbnN0YW5jZSgpIGFuZCBHZXRGaWxlSW5mbygpCgl0byBzZWFyY2ggZm9yIGEgbG9hZGVkIGZpbGUgYmFzZWQgb24gaXRzIGluc3RhbmNlIGhhbmRsZS4KCUFkZGVkIGEgZmllbGQgaW4gc3RydWN0IHdfZmlsZXMgdG8gbWFrZSBzZWFyY2hpbmcgYnkgYW4gaW5zdGFuY2UKCWhhbmRsZSBmYXN0ZXIuCgpUdWUgU2VwIDIxIDA5OjU3OjAxIDE5OTMgIG1pZ3VlbEByb3hhbm5lLm51Y2xlY3UudW5hbS5teCAoTWlndWVsIGRlIEljYXphKQoKCSogW21pc2MvcHJvZmlsZS5jXQoJSW1wbGVtZW50YXRpb24gb2YgLklOSSBmaWxlIGhhbmRsaW5nCgpNb24gU2VwIDIwIDEwOjU0OjMyIDE5OTMgIERhdmlkIE1ldGNhbGZlCgoJKiBbbWlzYy9wcm9maWxlLmMub2xkXQoJSW1wbGVtZW50YXRpb24gb2YgLklOSSBmaWxlIGhhbmRsaW5nCgpNb24gU2VwIDIwIDEwOjU0OjMyIDE5OTMgIEpvaG4gQnJlemFrCgoJKiBbY29udHJvbHMvV2luQnV0dG9uLmNdCglCdWcgZml4IHdpdGggY2FsbCB0byBYdFZhU2V0VmFsdWVzLgoKTW9uIFNlcCAyMCAxMDo1NDozMiAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFt3aW5kb3dzL3dpbi5jXQoJUXVpY2sgcGF0Y2ggdG8gZ2V0IGNvbG9ybWFwcyB0byB3b3JrIHdpdGggYnV0dG9uIHdpZGdldC4KCk1vbiBTZXAgMjAgMDI6NDI6NTQgMTk5MyAgICAoeW5ndmlAaGFmcm8uaXMpCgoJKiBtaXNjL2tleWJvYXJkLmM6IAoJSWZkZWZlZCBvdXQgc29tZSBib2d1cyBBbnNpPC0+T2VtIGNvbnZlcnNpb24gZnVuY3Rpb25zCgoJKiBtaXNjL2xzdHIuYzogCglOZXcgZmlsZSB3aXRoIHN0cmluZyBmdW5jdGlvbnMgbGlrZSBsc3RyKiBJc0NoYXIqICpBbnNpKiAKCldlZCBTZXAgMTUgMjA6MzU6MTAgMTk5MyAgSm9obiBCcmV6YWsKCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglBZGRpdGlvbmFsIGNoYW5nZXMgdG8gc3VwcG9ydCBOZXRCU0QuCgpXZWQgU2VwIDE1IDIyOjE5OjIyIDE5OTMgIE1hcnRpbiBBeW90dGUKCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglBZGRlZCBGcmFtZVJlY3QgZnVuY3Rpb24KClR1ZSBTZXAgMTQgMTM6NTQ6NDUgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbb2JqZWN0cy9jb2xvci5jXSBbb2JqZWN0cy9wYWxldHRlLmNdCglQcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBwcml2YXRlIGNvbG9yIG1hcC4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglJbXBsZW1lbnRlZCBDU19DTEFTU0RDIHN0eWxlLgoKCSogW3dpbmRvd3MvZGNlLmNdCglNb3ZlZCBEQ0VzIHRvIFVTRVIgaGVhcC4KCUltcGxlbWVudGVkIGNsYXNzIGFuZCB3aW5kb3cgRENzLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUltcGxlbWVudGVkIENTX0RCTENMS1Mgc3R5bGUuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJQnVnIGZpeCBpbiBTZXRQaXhlbCgpLgoKCSogW3dpbmRvd3Mvd2luLmNdCQoJSW1wbGVtZW50ZWQgQ1NfT1dOREMgc3R5bGUuCglJbXBsZW1lbnRlZCBHZXQvU2V0V2luZG93TG9uZygpLgoKCSogW2NvbnRyb2xzL21lbnUuY10gW3dpbmRvd3MvY2xhc3MuY10gW3dpbmRvd3MvY2xpcHBpbmcuY10gCgkgIFt3aW5kb3dzL2RjZS5jXSBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL3dpbi5jXQkKCU1vdmVkIHdpbmRvd3MgZnJvbSBnbG9iYWwgaGVhcCB0byBVU0VSIGhlYXAuCgpNb24gU2VwIDEzIDA1OjAwOjExIDE5OTMgIEVyaWMgWW91bmdkYWxlCgoJKiBbTWFrZWZpbGVdIFtpZjE2MzIvcmVsYXkuY10gW2luY2x1ZGUvZGxscy5oXSBbc2VsZWN0b3IuY10KCSAgW2xvYWRlci93aW5lLmNdIFt0b29scy9idWlsZC5jXQoJQWRkZWQgYWJpbGl0eSB0byBnZW5lcmF0ZSBtaXNzaW5nIGZ1bmN0aW9ucyBzdGF0aXN0aWNzLgoKTW9uIFNlcCAxMyAxMjowOTo0NyAxOTkzICBTY290dCBBLiBMYWlyZCAgKHNjb3R0QGN1cmx5KQoKCSogW1dJTjMxLUFQUExFVFNdCglBZGRlZCBuZXcgZmlsZS4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdCglBZGRlZCBkZWZpbml0aW9ucyBmb3IgR2V0UHJvZmlsZXtJbnQsU3RyaW5nfSBhbmQgU2V0SGFuZGxlQ291bnQuCgoJKiBbaWYxNjMyL2tleWJvYXJkLnNwZWNdCglDcmVhdGVkIGludGVyZmFjZSBzcGVjaWZpY2F0aW9uIGZvciBLZXlib2FyZCBkcml2ZXIgRExMLgoKCSogW2lmMTYzMi9yZWxheS5jXQoJQWRkZWQga2V5Ym9hcmQuZGxsIHRvIGxpc3Qgb2YgaW5jbHVkZWQgRExMcy4KCgkqIFtpZjE2MzIvdXNlci5zcGVjXQoJQWRkZWQgTG9hZEFjY2VsZXJhdG9ycyBkZWZpbml0aW9uLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJQWRkZWQgTG9hZEFjY2VsZXJhdG9ycyBzdHViLgoKCSogW21pc2MvZmlsZS5jXQoJQ2hhbmdlZCBPcGVuRmlsZSwgYW5kIGFkZGVkIFNldEhhbmRsZUNvdW50IChmb3Igd2luZmlsZS5leGUpCgoJKiBbbWlzYy9rZXlib2FyZC5jXQoJQWRkZWQga2V5Ym9hcmQgY29kZS4KCgkqIFttaXNjL3Byb2ZpbGUuY10gW21pc2MveHQuY10KCU1vdmVkIEdldFByaXZhdGVQcm9maWxlKiBjb21tYW5kcyBoZXJlLCBhbmQgYWRkZWQgR2V0UHJvZmlsZSoKCWNvbW1hbmRzLgoKTW9uIFNlcCAxMyAxMDoyNDozNyAxOTkzICBBbmRyZXcgQnVsaGFrCgoJKiBbd2luZG93cy91dGlsaXR5LmNdCglJbXBsZW1lbnRlZCBNdWxEaXYoKSwgT3V0cHV0RGVidWdTdHJpbmcoKSBhbmQgd3ZzcHJpbnRmKCkKCkZyaSBTZXAgMTAgMDk6MTM6MzAgMTk5MyAgSm9obiBCcmV6YWsKCgkqIFsqL01ha2VmaWxlXQoJQ3JlYXRlZCBwYXRjaCB0byBhbGxvdyBCU0QgbWFrZSB0byBidWlsZCB3aW5lLgoKCSogW3dpbmRvd3Mvd2luLmNdCglGaXhlZCBOVUxMIHBvaW50ZXIgcmVmZXJlbmNlLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbbWlzYy94dC5jXQoJRGVmaW5lZCBIWiB0byBoYW5kbGUgc3lzdGVtIHNwZWNpZmljIHRpbWluZy4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglVc2UgTV9QSSBpcyBQSQoKCSogW29iamVjdHMvcGFsbGV0ZS5jXQoJTmV0QlNEIGRvZXMgbm90IGhhdmUgL3Vzci9pbmNsdWRlL3ZhbHVlcy5oIGFuZCBNQVhJTlQgaXMgSU5UX01BWC4KCgkqIFtkdW1wLmNdIFtsZHQuY10gW3dpbmUuY10KCWlmZGVmJ2VkIGxpbnV4IGhlYWRlcnMgZm9yIGxpbnV4IGNvbXBpbGUuCgoJKiBbbG9hZGVyL2xkdGxpYi5jXQoJQWRkIE5ldEJTRCBzeXN0ZW0gY2FsbHMgd2hlbiBjb21waWxlZCBvbiB0aGF0IHN5c3RlbS4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCVVzZSBtbWFwKE1BUF9BTk9OLCAuLi4pIGZvciBOZXRCU0QuCgoJKiBbaWYxNjMyL2NhbGwuU10KCUZpeGVkIHNlbGVjdG9yIGFzc3VtcHRpb25zLgoKVGh1IFNlcCA5IDIwOjAxOjM3IDE5OTMgIERhdmlkIE1ldGNhbGZlCgoJKiBbY29udHJvbHMvV2luQnV0dG9uKl0gW2NvbnRyb2xzL2J1dHRvbi5jXSBbY29udHJvbHMvd2lkZ2V0LmNdCiAgCSAgW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL2NsYXNzLmNdCglBZGRlZCAzRCBidXR0b24gY29udHJvbCBhbmQgdGllZCBpbnRvIENyZWF0ZVdpbmRvdygpCgpUaHUgU2VwICA5IDA3OjM1OjI0IDE5OTMgIFNjb3R0IExhaXJkCgoJKiBbaWYxNjMyL3NvdW5kLnNwZWNdCglDcmVhdGVkIGludGVyZmFjZSBzcGVjaWZpY2F0aW9uIGZvciBTT1VORCBETEwuCgoJKiBbaWYxNjMyL3dpbjg3ZW0uc3BlY10KCUFkZGVkIG1vcmUgZnVuY3Rpb25zIHRvIHRoZSBXSU44N0VNIERMTCBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbgoKCSogW21pc2MvZW11bGF0ZS5jXQoJQ3JlYXRlZCBzdHVicyBmb3IgdGhlIG5ldyBtYXRoIGVtdWxhdGlvbiBmdW5jdGlvbnMuCgoJKiBbbWlzYy9zb3VuZC5jXQoJQ3JlYXRlZCBzdHVicyBmb3IgdGhlIFNPVU5EIERMTC4KClN1biBTZXAgIDUgMjE6MDI6MTAgMTk5MyAgSm9obiBCdXJ0b24KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdCglBZGRlZCBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbnMgZm9yIE9wZW5GaWxlLCBfbGNsb3NlLCBfbHJlYWQsIF9sb3BlbiwKCWFuZCBfbHdyaXRlLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgT0ZfIG1hY3JvcwoKCSogW21pc2MvZmlsZS5jXQoJSW1wbGVtZW50ZWQgT3BlbkZpbGUsIF9sY2xvc2UsIF9scmVhZCwgX2xvcGVuIGFuZCBfbHdyaXRlLgoKRnJpIFNlcCAgMyAxODo0NzowMyAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCiAgICAgICAgKiBbd2luZG93cy9kYy5jXQoJQnVnIGZpeAoKCSogW29iamVjdHMvdGV4dC5jXQoJQnVnIGZpeAoKRnJpIFNlcCAgMyAxODo0NzowMyAxOTkzICBCb2IgQW1zdGFkdAoKICAgICAgICAqIFtvYmplY3RzL2xpbmVkZGEuY10KICAgICAgICBGaW5pc2hlZCBMaW5lRERBKCkuCgpGcmkgU2VwICAzIDExOjUyOjE4IDE5OTMgIEJvYiBBbXN0YWR0CgoJKiBbd2luZG93cy90aW1lci5jXQoJQ2hhbmdlZCB0byB1c2UgQ2FsbFdpbmRvd1Byb2MoKSByYXRoZXIgZGlyZWN0bHkgY2FsbGluZyBjYWxsYmFjay4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglJbXBsZW1lbnRlZCBTZXRDYXB0dXJlKCkgYW5kIFJlbGVhc2VDYXB0dXJlKCkKCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdCglDcmVhdGVkIHN0dWIgZm9yIEdldEtleVN0YXRlKCkKCgkqIFtvYmplY3RzL2xpbmVkZGEuY10KCUNyZWF0ZWQgc3R1YiBmb3IgTGluZUREQSgpCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglDcmVhdGVkIGNhbGxiYWNrIGhhbmRsZXIgZm9yIExpbmVEREEgY2FsbGJhY2sgcHJvY2VkdXJlLgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJQ3JlYXRlZCBGcmVlUHJvY0luc3RhbmNlKCkKCkZyaSBTZXAgIDMgMDg6MzY6NTIgMTk5MyAgRGF2aWQgTWV0Y2FsZmUKCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglQYXRjaCB0byBhbmQgY29kZSBmb3IgSU5UIDFBCgpUaHUgU2VwICAyIDAwOjMxOjU0IDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW29iamVjdHMvZm9udC5jXSBbb2JqZWN0cy90ZXh0LmNdCglNb3JlIHRleHQgc3VwcG9ydDogaW1wbGVtZW50ZWQganVzdGlmaWNhdGlvbiBhbmQgdW5kZXJsaW5pbmcuCgoJKiBbd2luZG93cy9jbGlwcGluZy5jXSBbb2JqZWN0cy9jbGlwcGluZy5jXQoJTW92ZWQgbG93LWxldmVsIGNsaXBwaW5nIGZ1bmN0aW9ucyB0byBvYmplY3RzL2NsaXBwaW5nLmMuCgoJKiBbd2luZG93cy9jbGlwcGluZy5jXSBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9tZXNzYWdlLmNdCglJbXBsZW1lbnRlZCB3aW5kb3cgdXBkYXRlIHJlZ2lvbnMuCgoJKiBbd2luZG93cy9kYy5jXSBbb2JqZWN0cy9kY3ZhbHVlcy5jXQoJTW92ZWQgc29tZSBkZXZpY2UtaW5kZXBlbmRlbnQgREMgZnVuY3Rpb25zIHRvIG9iamVjdHMvZGN2YWx1ZXMuYy4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglJbXBsZW1lbnRlZCBJbnZlcnRSZWN0KCkgYW5kIEdldFBpeGVsKCkuCgpTYXQgQXVnIDI4IDA4OjQwOjIzIDE5OTMgIEVyaWMgWW91bmdkYWxlCgoJKiBbaW5jbHVkZS9uZWV4ZS5oXSBbbG9hZGVyL3dpbmUuY10KCUFkZGVkIGNvZGUgdG8gaGFuZGxlIHJlbG9jYXRpb24gdHlwZSA0LgoKCSogW2xvYWRlci9zaWduYWwuaF0gW2xvYWRlci93aW5lLmNdIFtsb2FkZXIvc2VsZWN0b3IuY10KCUFkZGVkIHN1cHBvcnQgZm9yIGRvcyBpbnRlcnJ1cHRzLgoKVGh1IDI2IEF1ZyAxOToxNTowMCAxOTkzICBFcmljIFlvdW5nZGFsZQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJRml4ZWQgYnVnIGRlYWxpbmcgd2l0aCBsb2FkaW5nIERMTHMuCgpUaHUgQXVnIDI2IDE5OjIyOjQwIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKICAgICAgICAqIFtpbmNsdWRlL2dkaS5oXSBbb2JqZWN0cy9mb250LmNdIFt3aW5kb3dzL2RjLmNdCiAgICAgICAgQmVnaW5uaW5nIG9mIHJlYWwgZm9udCBzdXBwb3J0LgoKICAgICAgICAqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCiAgICAgICAgSW1wbGVtZW50ZWQgUGF0Qmx0KCkuCgogICAgICAgICogW21lbW9yeS9nbG9iYWwuY10KICAgICAgICBDb3JyZWN0ZWQgYSBidWcgd2l0aCBsaW5rZWQgbGlzdCBoYW5kbGluZyBpbiBHbG9iYWxBbGxvYygpLgoKICAgICAgICAqIFtvYmplY3RzL2JpdG1hcC5jXQogICAgICAgIENvcnJlY3RlZCBhIGJ1ZyBpbiBCSVRNQVBfU2VsZWN0T2JqZWN0KCkuCgpUdWUgQXVnIDI0IDE5OjIyOjQwIDE5OTMgIERhdmlkIE1ldGNhbGZlCgogICAgICAgICogW2NvbnRyb2xzL0NvbW1hbmQqXSBbY29udHJvbHMvTGFiZWwqXSBbY29udHJvbHNbTWVudUJ1dHRvKl0KCSAgW2NvbnRyb2xzL1NtZU1lbnVCdXR0Kl0KCUNoYW5nZSBjb2RlIHRvIHN1cHBvcnQgJiBhcyBhIHNwZWNpYWwgY2hhcmFjdGVyIGluIG1lbnUgaXRlbSB0ZXh0LgoKVHVlIEF1ZyAyNCAxOToyMjo0MCAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFtpbmNsdWRlL2dkaS5oXSBbd2luZG93cy9kYy5jXQoJSGVhdmlseSBtb2RpZmllZCB0aGUgREMgc3RydWN0dXJlIGZvciBiZXR0ZXIgZGV2aWNlLWluZGVwZW5kZW5jZS4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJSW1wbGVtZW50ZWQgYml0bWFwIGRpbWVuc2lvbnMuCgoJKiBbd2luZG93cy9kYy5jXSBbd2luZG93cy9kY2UuY10KCUltcGxlbWVudGVkIERDIHN0YXRlIHNhdmluZyBhbmQgcmVzdG9yaW5nLgoKCSogW3dpbmRvd3MvZGMuY10KCUltcGxlbWVudGVkIFJPUCBtb2RlLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUltcGxlbWVudGVkIEZpbGxSZWN0KCkuCgpNb24gQXVnIDIzIDIyOjA4OjM0IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbbWlzYy94dC5jXQoJRml4ZWQgYnVnIGluIEludmFsaWRhdGVSZWN0KCkuICBTb2xpdGFpcmUgYXR0ZW1wdGVkIHRvCgljbGVhciB3aW5kb3cgYmVmb3JlIGl0IHdhcyByZWFsaXplZC4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUJlZ2FuIHJld3JpdGUgb2YgTG9hZEJpdG1hcCgpLgoKCSogW2xvYWRlci93aW5lLmNdCglGaXhlZCBjb2RlIHdoaWNoIHNldCBBcmd2IGFuZCBBcmdjIGdsb2JhbCB2YXJpYWJsZXMuCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglBZGRlZCBjb2RlIHRvIHNldCB1cCBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgoKCSogW2luY2x1ZGUvbmVleGUuaF0KCUZpeGVkIGVycm9yIGluIFBTUCBzdHJ1Y3R1cmUuCgpUdWUgQXVnIDE3IDIwOjQxOjEyIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW2luY2x1ZGUvZ2RpLmhdIFt3aW5kb3dzL2RjLmNdCglJbXBsZW1lbnRlZCBkZXZpY2UgY2FwYWJpbGl0aWVzLgoKCSogW29iamVjdHMvcmVnaW9uLmNdCglJbXBsZW1lbnRlZCBFcXVhbFJnbigpIGFuZCBDb21iaW5lUmduKCkuCgoJKiBbd2luZG93cy9jbGlwcGluZy5jXQoJSW1wbGVtZW50ZWQgU2F2ZS9SZXN0b3JlVmlzUmduKCkuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJSW1wbGVtZW50ZWQgUGFpbnRSZ24oKSBhbmQgRmlsbFJnbigpLgoKCSogW3dpbmRvd3MvbWFwcGluZy5jXQoJSW1wbGVtZW50ZWQgbWFwcGluZyBtb2Rlcy4KClR1ZSBBdWcgMTAgMTQ6MDc6MzggMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10gW21pc2MvcmVjdC5jXQoJSW1wbGVtZW50ZWQgcmVjdGFuZ2xlIEFQSSBmdW5jdGlvbnMuCgoJKiBbaWYxNjMyL2dkaS5zcGVjXSBbaW5jbHVkZS9nZGkuaF0gW29iamVjdHMvcmVnaW9uLmNdCglJbXBsZW1lbnRlZCByZWdpb25zLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCUNvcnJlY3RlZCBhIHR5cG8gaW4gVW5yZWdpc3RlckNsYXNzKCkuCgoJKiBbd2luZG93cy9jbGlwcGluZy5jXSBbd2luZG93cy9kYy5jXQoJSW1wbGVtZW50ZWQgREMgY2xpcHBpbmcgYW5kIHZpc2libGUgcmVnaW9uLgoKVHVlIEF1ZyAxMCAyMDo1Nzo1NiAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2NvbnRyb2xzL21lbnUuY10gW3dpbmRvd3Mvd2luLmNdCglTZXRNZW51KCksIEdldE1lbnUoKSwgQ2hlY2tNZW51SXRlbSgpIGltcGxlbWVudGVkCgpUaHUgQXVnICA1IDIyOjMzOjIyIDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy93aW4uY10KCU1hbnkgaW1wcm92ZW1lbnRzIG1lbnVzLiAgTG9hZE1lbnUoKSBzaG91bGQgd29yay4KCldlZCBBdWcgIDQgMTQ6NTU6MzYgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgogICAgICAgICogW29iamVjdHMvZGliLmNdCiAgICAgICAgU3RhcnRlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgZGV2aWNlLWluZGVwZW5kZW50IGJpdG1hcHMuCgogICAgICAgICogW29iamVjdHMvYml0bWFwLmNdCiAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgYml0bWFwIGRlcHRocy4KCiAgICAgICAgKiBbb2JqZWN0cy9icnVzaC5jXQogICAgICAgIEltcGxlbWVudGVkIHBhdHRlcm4gYnJ1c2hlcy4KCiAgICAgICAgKiBbd2luZG93cy9kYy5jXSBbd2luZG93cy9ncmFwaGljcy5jXQogICAgICAgIEltcGxlbWVudGVkIHNvbWUgR0RJIGdyYXBoaWNzIHByaW1pdGl2ZXMuCgpUdWUgQXVnICAzIDIxOjE2OjQ3IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy93aW4uY10gW2luY2x1ZGUvbWVudS5oXQoJQ29kZSB0byBsb2FkIGNsYXNzIG1lbnVzIGZyb20gZXhlY3V0YWJsZSBmaWxlLgoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglGaXhlZCBzcGVjaWZpY2F0aW9uIG9mIFNlbmRNZXNzYWdlKCkgYW5kIFBvc3RNZXNzYWdlLgoKTW9uIEp1bCAyNiAyMTo1MzoyNCAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFtpZjE2MzIvY2FsbC5TXQoJQ29ycmVjdGVkIGEgYnVnIGluIEtFUk5FTF9Jbml0VGFzaygpLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgYSBsb3Qgb2YgY29uc3RhbnRzLgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJQ29ycmVjdGVkIGEgYnVnIGluIHNlZ21lbnQgYWxsb2NhdGlvbiBpbiBDcmVhdGVTZWxlY3RvcnMoKS4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJSW1wbGVtZW50ZWQgU2VsZWN0T2JqZWN0KCkgZm9yIGJpdG1hcHMuCgoJKiBbb2JqZWN0cy9icnVzaC5jXQoJSW1wbGVtZW50ZWQgaGF0Y2hlZCBicnVzaGVzIGFuZCBTZWxlY3RPYmplY3QoKS4KCgkqIFtvYmplY3RzL2dkaW9iai5jXQoJUmVtb3ZlZCBsaW5rZWQgbGlzdCAobm90IG5lZWRlZCkuCgoJKiBbb2JqZWN0cy9wYWxldHRlLmNdCglJbXBsZW1lbnRlZCBzeXN0ZW0gcGFsZXR0ZSBjcmVhdGlvbiBhbmQgbWlzYy4gcGFsZXR0ZSBBUEkgZnVuY3Rpb25zLgoKCSogW3dpbmRvd3MvdGltZXIuY10KCUltcGxlbWVudGVkIHRpbWVycy4KCgkqIFt3aW5kb3dzL2RjLmNdCglJbXBsZW1lbnRlZCBtZW1vcnkgZGV2aWNlIGNvbnRleHRzLgoKVHVlIEp1bCAyMCAxMDozODo1OSAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKICAgICAgICAqIFtkb3MuY10KCVNwbGl0IERPUzNDYWxsKCkgb3V0IG9mIGtlcm5lbC5jLiAgQWRkZWQgc3VwcG9ydCBmb3IgZ2V0IGRhdGUKCWFuZCB0aW1lIGZ1bmN0aW9ucy4KCgkqIFtjYWxsLlNdCglBZGRlZCBmdW5jdGlvbiBSZXR1cm5Gcm9tUmVnaXN0ZXJGdW5jKCkgdG8gYWxsb3cgRE9TIGNhbGxzCgl0byByZXR1cm4gdmFsdWVzIGluIHJlZ2lzdGVycy4KCgkqIFtyZWdmdW5jLmhdCglNYWNyb3MgdG8gYWNjZXNzIHJlZ2lzdGVycyBzYXZlZCBvbiBzdGFjay4KClR1ZSBKdWwgMjAgMTA6Mzg6NTkgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgogICAgICAgICogW3dpbi5jXQogICAgICAgIENvcnJlY3RlZCBhbGxvY2F0aW9uIG9mIHRoZSBXTV9DUkVBVEUgZGF0YSBzdHJ1Y3R1cmUuCgogICAgICAgICogW2RjZS5jXSBbZGNlLmhdCiAgICAgICAgSW1wbGVtZW50ZWQgRENFIGhhbmRsaW5nLgoKICAgICAgICAqIFtiaXRtYXAuY10gW2JydXNoLmNdIFtkYy5jXSBbZm9udC5jXSBbZ2RpLmhdIFtnZGkuc3BlY10gCiAgICAgICAgICBbZ2Rpb2JqLmNdIFtwYWxldHRlLmNdIFtwZW4uY10KICAgICAgICBJbXBsZW1lbnRlZCB0aGUgR0RJIG9iamVjdHMgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGxvY2F0aW9uLgoKICAgICAgICAqIFt3aW5kb3dzLmhdCiAgICAgICAgQWRkZWQgc2V2ZXJhbCBzdHJ1Y3R1cmVzIGFuZCBjb25zdGFudHMgZm9yIEdESSBvYmplY3RzLgoKTW9uIEp1bCAxOSAxMjo1MToxMCAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2xkdGxpYi5jXQoJTW9kaWZpZWQgc3lzdGVtIGNhbGxzIHRvIG1hdGNoIExpbnVzJyBuZXcgaW50ZXJmYWNlIGZvcgoJdGhlIExEVCBtb2RpZmljYXRpb24uCgoJKiBbd2luLmNdCglGaXhlZCBidWcgd2l0aCBXTV9DUkVBVEUgbWVzc2FnZS4KCgkqIFtoZWFwLmNdIFtrZXJuZWwuc3BlY10KCUNvbXBsZXRlZCBsb2NhbCBoZWFwIGFsbG9jYXRpb24gZnVuY3Rpb25zLgoKCSogW2dsb2JhbC5jXQoJQ3JlYXRlZCBmdW5jdGlvbiBHbG9iYWxRdWlja0FsbG9jKCkgZm9yIGVhc3kgYWxsb2NhdGlvbiBmcm9tIERMTHMKClR1ZSBKdWwgMTMgMjA6MzE6MzEgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtnbG9iYWwuY10KCUNvbXBsZXRlZCBnbG9iYWwgbWVtb3J5IHBvb2wgQVBJCgpTdW4gSnVsIDExIDE2OjU5OjUyIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW21lc3NhZ2UuY10gW3VzZXIuY10gW3VzZXIuc3BlY10gW3dpbmRvd3MuaF0KCUFkZGVkIGVtdWxhdGlvbiBvZiBXaW5kb3dzIG1lc3NhZ2UgcXVldWUuCgpUaHUgSnVsICA4IDE5OjI5OjI3IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbYnVpbGQuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2NhbGxiYWNrLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IAoJQWxleGFuZHJlIEp1bGxpYXJkCgkqIFtkdW1wLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtnbG9iYWwuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2hlYXAuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2tlcm5lbC5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbbGR0LmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtsZHRsaWIuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW3JlbGF5LmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtyZXNvdXJjZS5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSAKCUFsZXhhbmRyZSBKdWxpYXJkCgkqIFtzZWxlY3Rvci5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSBFcmljIFlvdW5nZGFsZQoJKiBbdXNlci5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbd2luZS5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSBFcmljIFlvdW5nZGFsZSBhbmQKCUFsZXhhbmRyZSBKdWxsaWFyZAoJKiBbd2ludGNsLmNdIE9yaWdpbmFsIGJ5IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwKCXVwZGF0ZXMgYnkgUGV0ZXIgTWFjRG9uYWxkIGFuZCBBbGV4YW5kcmUgSnVsbGlhcmQKCSogW2NhbGxiYWNrLmhdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtkbGxzLmhdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtoZWFwLmhdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtuZWV4ZS5oXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbcHJvdG90eXBlcy5oXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSAKCUVyaWMgWW91bmdkYWxlCgkqIFtzZWdtZW0uaF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW3RrSW50LmhdIE9yaWdpbmFsIGJ5IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQoJKiBbd2luZG93cy5oXSBPcmlnaW5hbCBieSBQZXRlciBNYWNEb25hbGQsIHVwZGF0ZXMgYnkgCglBbGV4YW5kcmUgSnVsbGlhcmQgYW5kIEJvYiBBbXN0YWR0CgkqIFt3aW5lLmhdIE9yaWdpbmFsIGJ5IEVyaWMgWW91bmdkYWxlCgkqIFtrZXJuZWwuc3BlY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgCglBbGV4YW5kcmUgSnVsbGlhcmQKCSogW2dkaS5zcGVjXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSAKCUFsZXhhbmRyZSBKdWxsaWFyZAoJKiBbc2hlbGwuc3BlY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW3VuaXhsaWIuc3BlY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW3VzZXIuc3BlY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgQWxleGFuZHJlIEp1bGxpYXJkCgkqIFt3aW44N2VtLnNwZWNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtXaW5kb3dzLnRjbF0gT3JpZ2luYWwgYnkgUGV0ZXIgTWFjRG9uYWxkLCB1cGRhdGVzIGJ5IAoJQWxleGFuZHJlIEp1bGxpYXJkCgkqIFtidWlsZC1zcGVjLnR4dF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2lmMTYzMi5TXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSBFcmljIFlvdW5nZGFsZQo=