ICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIENvbW1vbnMgTGFuZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLjkKICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcwoKCklOVFJPRFVDVElPTjoKClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAzLjkgdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucyBMYW5nLgpDb21tb25zIExhbmcgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGFueSAKSmF2YSBlbnZpcm9ubWVudC4KCkxhbmcgMy45IGFuZCBvbndhcmRzIG5vdyB0YXJnZXRzIEphdmEgOCwgbWFraW5nIHVzZSBvZiBmZWF0dXJlcyB0aGF0IGFycml2ZWQgd2l0aCBKYXZhIDguCgpGb3IgdGhlIGFkdmljZSBvbiB1cGdyYWRpbmcgZnJvbSAyLnggdG8gMy54LCBzZWUgdGhlIGZvbGxvd2luZyBwYWdlOiAKCiAgICBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9sYW5nL2FydGljbGUzXzAuaHRtbAoKQXBhY2hlIENvbW1vbnMgTGFuZywgYSBwYWNrYWdlIG9mIEphdmEgdXRpbGl0eSBjbGFzc2VzIGZvciB0aGUKY2xhc3NlcyB0aGF0IGFyZSBpbiBqYXZhLmxhbmcncyBoaWVyYXJjaHksIG9yIGFyZSBjb25zaWRlcmVkIHRvIGJlIHNvCnN0YW5kYXJkIGFzIHRvIGp1c3RpZnkgZXhpc3RlbmNlIGluIGphdmEubGFuZy4KCk5ldyBmZWF0dXJlcyBhbmQgYnVnIGZpeGVzLiBSZXF1aXJlcyBKYXZhIDgsIHN1cHBvcnRzIEphdmEgOSwgMTAsIDExCgpDaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBpbmNsdWRlOgoKTmV3IGZlYXR1cmVzOgpvIExBTkctMTQ0MjogSmF2YWRvYyBwb2ludGluZyB0byBDb21tb25zIFJORy4KbyAgICAgICAgICAgIEFkZGluZyB0aGUgRnVuY3Rpb25zIGNsYXNzLgpvIExBTkctMTQxMTogQWRkIGlzRW1wdHkgbWV0aG9kIHRvIE9iamVjdFV0aWxzIFRoYW5rcyB0byBBbGV4YW5kZXIgVHN2ZXRrb3YuCm8gTEFORy0xNDIyOiBBZGQgbnVsbC1zYWZlIFN0cmluZ1V0aWxzLnZhbHVlT2YoY2hhcltdKSB0byBkZWxlZ2F0ZSB0byBTdHJpbmcudmFsdWVPZihjaGFyW10pCm8gTEFORy0xNDI3OiBBZGQgQVBJIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TeXN0ZW1VdGlscy5pc0phdmFWZXJzaW9uQXRNb3N0KEphdmFWZXJzaW9uKQoKCkNoYW5nZXM6Cm8gTEFORy0xNDE2OiBBZGQgbW9yZSBTeXN0ZW1VdGlscy5JU19KQVZBX1hYIHZhcmlhbnRzLgpvIExBTkctMTQxNjogVXBkYXRlIHRvIEpVbml0IDUKbyBMQU5HLTE0MTc6IEFkZCBARnVuY3Rpb25hbEludGVyZmFjZSB0byBUaHJlYWRQcmVkaWNhdGUgYW5kIFRocmVhZEdyb3VwUHJlZGljYXRlCm8gTEFORy0xNDE1OiBVcGRhdGUgSmF2YSBMYW5ndWFnZSByZXF1aXJlbWVudCB0byAxLjgKbyBMQU5HLTE0MzY6IENvbnNvbGlkYXRlIHRoZSBTdHJpbmdVdGlscyBlcXVhbHMgYW5kIGVxdWFsc0lnbm9yZUNhc2UgSmF2YWRvYyBhbmQgaW1wbGVtZW50YXRpb24KbyAgICAgICAgICAgIChkb2MpIEZpeCBqYXZhZG9jIGZvciAnc3RhcnRJbmRleCcgcGFyYW1ldGVyIG9mIFN0cmluZ1V0aWxzLmpvaW4oKSBtZXRob2RzLiBHaXRIdWIgUFIgIzQxMi4gVGhhbmtzIHRvIEFuZHJlaSBUcm9pZSBhZnQ5MC4KCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtbGFuZy9jaGFuZ2VzLXJlcG9ydC5odG1sCgpGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gQXBhY2hlIENvbW1vbnMgTGFuZywgaW5jbHVkaW5nIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3VibWl0IGJ1ZyByZXBvcnRzLApwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIHNlZSB0aGUgQXBhY2hlIEFwYWNoZSBDb21tb25zIExhbmcgd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWxhbmcvCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIENvbW1vbnMgTGFuZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLjguMQogICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgoKSU5UUk9EVUNUSU9OOgoKVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhlIDMuOC4xIHZlcnNpb24gb2YgQXBhY2hlIENvbW1vbnMgTGFuZy4KQ29tbW9ucyBMYW5nIGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIG9mIHVzZSBpbiBhbnkKSmF2YSBlbnZpcm9ubWVudC4KCkxhbmcgMy4wIGFuZCBvbndhcmRzIG5vdyB0YXJnZXRzIEphdmEgNy4wLCBtYWtpbmcgdXNlIG9mIGZlYXR1cmVzIHRoYXQgYXJyaXZlZCB3aXRoIEphdmEgNy4wLgoKRm9yIHRoZSBhZHZpY2Ugb24gdXBncmFkaW5nIGZyb20gMi54IHRvIDMueCwgc2VlIHRoZSBmb2xsb3dpbmcgcGFnZToKCiAgICBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9sYW5nL2FydGljbGUzXzAuaHRtbAoKQXBhY2hlIENvbW1vbnMgTGFuZywgYSBwYWNrYWdlIG9mIEphdmEgdXRpbGl0eSBjbGFzc2VzIGZvciB0aGUKY2xhc3NlcyB0aGF0IGFyZSBpbiBqYXZhLmxhbmcncyBoaWVyYXJjaHksIG9yIGFyZSBjb25zaWRlcmVkIHRvIGJlIHNvCnN0YW5kYXJkIGFzIHRvIGp1c3RpZnkgZXhpc3RlbmNlIGluIGphdmEubGFuZy4KClRoaXMgcmVsZWFzZSBpcyBhIGJ1Z2ZpeCBmb3IgUmVzdG9yaW5nIEJ1bmRsZS1TeW1ib2xpY05hbWUgaW4gdGhlIE1BTklGRVNULm1mIGZpbGUuCgpDaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBpbmNsdWRlOgoKCkZpeGVkIEJ1Z3M6Cm8gTEFORy0xNDE5OiBSZXN0b3JlIEJ1bmRsZVN5bWJvbGljTmFtZSBmb3IgT1NHaQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIExhbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMy44CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMKCgpJTlRST0RVQ1RJT046CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMy44IHZlcnNpb24gb2YgQXBhY2hlIENvbW1vbnMgTGFuZy4KQ29tbW9ucyBMYW5nIGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIG9mIHVzZSBpbiBhbnkKSmF2YSBlbnZpcm9ubWVudC4KCkxhbmcgMy4wIGFuZCBvbndhcmRzIG5vdyB0YXJnZXRzIEphdmEgNy4wLCBtYWtpbmcgdXNlIG9mIGZlYXR1cmVzIHRoYXQgYXJyaXZlZCB3aXRoIEphdmEgNy4wLgoKRm9yIHRoZSBhZHZpY2Ugb24gdXBncmFkaW5nIGZyb20gMi54IHRvIDMueCwgc2VlIHRoZSBmb2xsb3dpbmcgcGFnZToKCiAgICBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9sYW5nL2FydGljbGUzXzAuaHRtbAoKQXBhY2hlIENvbW1vbnMgTGFuZywgYSBwYWNrYWdlIG9mIEphdmEgdXRpbGl0eSBjbGFzc2VzIGZvciB0aGUKY2xhc3NlcyB0aGF0IGFyZSBpbiBqYXZhLmxhbmcncyBoaWVyYXJjaHksIG9yIGFyZSBjb25zaWRlcmVkIHRvIGJlIHNvCnN0YW5kYXJkIGFzIHRvIGp1c3RpZnkgZXhpc3RlbmNlIGluIGphdmEubGFuZy4KCk5ldyBmZWF0dXJlcyBhbmQgYnVnIGZpeGVzLiBSZXF1aXJlcyBKYXZhIDcsIHN1cHBvcnRzIEphdmEgOCwgOSwgMTAuCgpDaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBpbmNsdWRlOgoKTmV3IGZlYXR1cmVzOgpvIExBTkctMTM1MjogRW51bVV0aWxzLmdldEVudW1JZ25vcmVDYXNlIGFuZCBpc1ZhbGlkRW51bUlnbm9yZUNhc2UgbWV0aG9kcyBhZGRlZCBUaGFua3MgdG8gUnVzbGFuIFNpYmdhdHVsbGluLgpvIExBTkctMTM3MjogQWRkIFRvU3RyaW5nU3VtbWFyeSBhbm5vdGF0aW9uIFRoYW5rcyB0byBT6XJnaW8gT3pha2kuCm8gTEFORy0xMzU2OiBBZGQgYnlwYXNzIG9wdGlvbiBmb3IgY2xhc3NlcyB0byByZWN1cnNpdmUgYW5kIHJlZmxlY3RpdmUgRXF1YWxzQnVpbGRlciBUaGFua3MgdG8gWWF0aG9zIFVHLgpvIExBTkctMTM5MTogSW1wcm92ZSBKYXZhZG9jIGZvciBTdHJpbmdVdGlscy5pc0FueUVtcHR5KG51bGwpIFRoYW5rcyB0byBTYXVybyBNYXR1bGxpLCBPbGVnIENodWJhcnlvdi4KbyBMQU5HLTEzOTM6IEFkZCBBUEkgU3lzdGVtVXRpbHMuU3RyaW5nIGdldEVudmlyb25tZW50VmFyaWFibGUoZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIFN0cmluZyBkZWZhdWx0VmFsdWUpIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xMzk0OiBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3lzdGVtVXRpbHMgc2hvdWxkIG5vdCB3cml0ZSB0byBTeXN0ZW0uZXJyLiBUaGFua3MgdG8gU2ViYiwgR2FyeSBHcmVnb3J5LgpvIExBTkctMTIzODogQWRkIFJlZ2V4VXRpbHMgY2xhc3MgaW5zdGVhZCBvZiBvdmVybG9hZGluZyBtZXRob2RzIGluIFN0cmluZ1V0aWxzIHRoYXQgdGFrZSBhIHJlZ2V4IHRvIHRha2UgcHJlY29tcGlsZWQgUGF0dGVybi4gVGhhbmtzIHRvIENocmlzdG9waGVyIENvcmRlaXJvLCBHYXJ5IEdyZWdvcnksIEJydW5vIFAuIEtpbm9zaGl0YSwgT2xlZyBDaHViYXJ5b3YuCm8gTEFORy0xMzkwOiBTdHJpbmdVdGlscy5qb2luKCkgd2l0aCBzdXBwb3J0IGZvciBMaXN0PD8+IHdpdGggY29uZmlndXJhYmxlIHN0YXJ0L2VuZCBpbmRpY2VzLiBUaGFua3MgdG8gSm9jaGVuIFNjaGFsYW5kYS4KbyBMQU5HLTEzOTI6IE1ldGhvZHMgZm9yIGdldHRpbmcgZmlyc3Qgbm9uIGVtcHR5IG9yIG5vbiBibGFuayB2YWx1ZSBUaGFua3MgdG8gSmVmZiBOZWxzb24uCm8gTEFORy0xNDA4OiBSb3VuZGluZyB1dGlsaXRpZXMgZm9yIGNvbnZlcnRpbmcgdG8gQmlnRGVjaW1hbAoKRml4ZWQgQnVnczoKbyBMQU5HLTEzODA6IEZhc3REYXRlUGFyc2VyIHRvbyBzdHJpY3Qgb24gYWJicmV2aWF0ZWQgc2hvcnQgbW9udGggc3ltYm9scyBUaGFua3MgdG8gTWFya3VzIEplbHNtYS4KbyBMQU5HLTEzOTY6IEpzb25Ub1N0cmluZ1N0eWxlIGRvZXMgbm90IGVzY2FwZSBzdHJpbmcgbmFtZXMKbyBMQU5HLTEzOTU6IEpzb25Ub1N0cmluZ1N0eWxlIGRvZXMgbm90IGVzY2FwZSBkb3VibGUgcXVvdGUgaW4gYSBzdHJpbmcgdmFsdWUgVGhhbmtzIHRvIEppbSBHYW4uCm8gTEFORy0xMzg0OiBOZXcgSmF2YSB2ZXJzaW9uICgiMTEiKSBtdXN0IGJlIGhhbmRsZWQgVGhhbmtzIHRvIElhbiBZb3VuZy4KbyBMQU5HLTEzNjQ6IEV4Y2VwdGlvblV0aWxzI2dldFJvb3RDYXVzZShUaHJvd2FibGUgdCkgc2hvdWxkIHJldHVybiB0IGlmIG5vIGxvd2VyIGxldmVsIGNhdXNlIGV4aXN0cyBUaGFua3MgdG8gWmhlbmcgWGllLgpvIExBTkctMTA2MDogTnVtYmVyVXRpbHMuaXNOdW1iZXIgYXNzdW1lcyBudW1iZXIgc3RhcnRpbmcgd2l0aCBaZXJvIFRoYW5rcyB0byBQaW90ciBLb3NtYWxhLgpvIExBTkctMTM3NTogZGVmYXVsdFN0cmluZyhmaW5hbCBTdHJpbmcgc3RyKSBpbiBTdHJpbmdVdGlscyB0byByZXVzZSBkZWZhdWx0U3RyaW5nKGZpbmFsIFN0cmluZyBzdHIsIGZpbmFsIFN0cmluZyBkZWZhdWx0U3RyKSBUaGFua3MgdG8gSmVycnkgWmhhby4KbyBMQU5HLTEzNzQ6IFBhcnNpbmcgSnNvbiBBcnJheSBmYWlsZWQgVGhhbmtzIHRvIEphc3dhbnRoIEJhbGEuCm8gTEFORy0xMzcxOiBGaXggVHlwZVV0aWxzI3BhcmFtZXRlcml6ZSB0byB3b3JrIGNvcnJlY3RseSB3aXRoIG5hcnJvd2VyLXR5cGVkIGFycmF5IFRoYW5rcyB0byBEbWl0cnkgT3ZjaGlubmlrb3YuCm8gTEFORy0xMzcwOiBGaXggRXZlbnRDb3VudENpcmN1aXRCcmVha2VyIGluY3JlbWVudCBiYXRjaCBUaGFua3MgdG8gQW5kcmUgRGllYi4KbyBMQU5HLTEzODU6IE51bWJlclV0aWxzLmNyZWF0ZU51bWJlcigpIHRocm93cyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGluc3RlYWQgb2YgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIFRoYW5rcyB0byBSb2hhbiBQYWRoeWUuCm8gTEFORy0xMzk3OiBXb3JkVXRpbHMud3JhcCB0aHJvd3MgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiB3aGVuIHdyYXBMZW5ndGggaXMgSW50ZWdlci5NQVhfVkFMVUUuIFRoYW5rcyB0byBUYWthbm9idSBBc2FudW1hLgpvIExBTkctMTQwMTogVHlwbyBpbiBKYXZhRG9jIGZvciBsYXN0SW5kZXhPZiBUaGFua3MgdG8gUm9tYW4gR29seXNoZXYsIEFsZXggTWFtZWRvdi4KCkNoYW5nZXM6Cm8gTEFORy0xMzY3OiBPYmplY3RVdGlscy5pZGVudGl0eVRvU3RyaW5nKE9iamVjdCkgYW5kIGZyaWVuZHMgc2hvdWxkIGFsbG9jYXRlIGJ1aWxkZXJzIGFuZCBidWZmZXJzIHdpdGggYSBzaXplIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xNDA1OiBSZW1vdmUgY2hlY2tzIGZvciBqYXZhIHZlcnNpb25zIGJlbG93IHRoZSBtaW5pbXVtIHN1cHBvcnRlZCBvbmUgVGhhbmtzIHRvIExhcnMgR3JlZmVyLgpvIExBTkctMTQwMjogTnVsbC9pbmRleCBzYWZlIGdldCBtZXRob2RzIGZvciBBcnJheVV0aWxzIFRoYW5rcyB0byBNYXJrIERhY2VrLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIExhbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMy43CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMKCgpJTlRST0RVQ1RJT046CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMy43IHZlcnNpb24gb2YgQXBhY2hlIENvbW1vbnMgTGFuZy4KQ29tbW9ucyBMYW5nIGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIG9mIHVzZSBpbiBhbnkKSmF2YSBlbnZpcm9ubWVudC4KCkxhbmcgMy4wIGFuZCBvbndhcmRzIG5vdyB0YXJnZXRzIEphdmEgNS4wLCBtYWtpbmcgdXNlIG9mIGZlYXR1cmVzIHRoYXQgYXJyaXZlZCB3aXRoIEphdmEgNS4wIHN1Y2ggYXMgZ2VuZXJpY3MsCnZhcmlhYmxlIGFyZ3VtZW50cywgYXV0b2JveGluZywgY29uY3VycmVuY3kgYW5kIGZvcm1hdHRlZCBvdXRwdXQuCgpGb3IgdGhlIGFkdmljZSBvbiB1cGdyYWRpbmcgZnJvbSAyLnggdG8gMy54LCBzZWUgdGhlIGZvbGxvd2luZyBwYWdlOgoKICAgIGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL2xhbmcvYXJ0aWNsZTNfMC5odG1sCgpBcGFjaGUgQ29tbW9ucyBMYW5nLCBhIHBhY2thZ2Ugb2YgSmF2YSB1dGlsaXR5IGNsYXNzZXMgZm9yIHRoZQpjbGFzc2VzIHRoYXQgYXJlIGluIGphdmEubGFuZydzIGhpZXJhcmNoeSwgb3IgYXJlIGNvbnNpZGVyZWQgdG8gYmUgc28Kc3RhbmRhcmQgYXMgdG8ganVzdGlmeSBleGlzdGVuY2UgaW4gamF2YS5sYW5nLgoKTmV3IGZlYXR1cmVzIGFuZCBidWcgZml4ZXMuIFJlcXVpcmVzIEphdmEgNywgc3VwcG9ydHMgSmF2YSA4LCA5LCAxMC4KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXM6Cm8gTEFORy0xMzU1OiBUaW1lWm9uZS5nZXRUaW1lWm9uZSgpIGluIEZhc3REYXRlUGFyc2VyIGNhdXNlcyByZXNvdXJjZSBjb250ZW50aW9uIChQUiAjMjk2LikgVGhhbmtzIHRvIENoYXMgSG9udG9uLgpvIExBTkctMTM2MDogQWRkIG1ldGhvZHMgdG8gT2JqZWN0VXRpbHMgdG8gZ2V0IHZhcmlvdXMgZm9ybXMgb2YgY2xhc3MgbmFtZXMgaW4gYSBudWxsLXNhZmUgbWFubmVyIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCgpGaXhlZCBCdWdzOgpvIExBTkctMTM2MjogRml4IHRlc3RzIERhdGVVdGlsc1Rlc3QgZm9yIEphdmEgOSB3aXRoIGVuX0dCIGxvY2FsZSBUaGFua3MgdG8gU3RlcGhlbiBDb2xlYm91cm5lLgpvIExBTkctMTM2NTogRml4IE51bGxQb2ludGVyRXhjZXB0aW9uIGluIGlzSmF2YVZlcnNpb25BdExlYXN0IG9uIEphdmEgMTAsIGFkZCBTeXN0ZW1VdGlscy5JU19KQVZBXzEwLCBhZGQgSmF2YVZlcnNpb24uSkFWQV8xMCBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTM0ODogU3RhY2tPdmVyZmxvd0Vycm9yIG9uIFR5cGVVdGlscy50b1N0cmluZyguLi4pIGZvciBhIGdlbmVyaWMgcmV0dXJuIHR5cGUgb2YgRW51bS52YWx1ZU9mIFRoYW5rcyB0byBtYnVzc28uCm8gTEFORy0xMzUwOiBDb25zdHJ1Y3RvclV0aWxzLmludm9rZUNvbnN0cnVjdG9yKENsYXNzLCBPYmplY3QuLi4pIHJlZ3Jlc3Npb24gVGhhbmtzIHRvIEJyZXR0IEthaWwuCm8gTEFORy0xMzQ5OiBFcXVhbHNCdWlsZGVyI2lzUmVnaXN0ZXJlZDogc3dhcHBlZFBhaXIgY29uc3RydWN0aW9uIGJ1ZyBUaGFua3MgdG8gTmFtYW4gTmlnYW0uCm8gTEFORy0xMzU3OiBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMudGltZS5GYXN0RGF0ZVBhcnNlciBzaG91bGQgdXNlIHRvVXBwZXJDYXNlKExvY2FsZSkgVGhhbmtzIHRvIEJydWNlS3VpTGl1LgoKQ2hhbmdlczoKbyBMQU5HLTEzNTg6IEltcHJvdmUgU3RyaW5nVXRpbHMjcmVwbGFjZSB0aHJvdWdocHV0IFRoYW5rcyB0byBTdGVwaGFuZSBMYW5kZWxsZS4KbyBMQU5HLTEzNDY6IFJlbW92ZSBkZXByZWNhdGlvbiBmcm9tIFJhbmRvbVN0cmluZ1V0aWxzCm8gTEFORy0xMzYxOiBFeGNlcHRpb25VdGlscy5nZXRUaHJvd2FibGVMaXN0KCkgaXMgdXNpbmcgZGVwcmVjYXRlZCBFeGNlcHRpb25VdGlscy5nZXRDYXVzZSgpIFRoYW5rcyB0byBBbmEuCgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIExhbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMy42CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMKCgpJTlRST0RVQ1RJT046CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMy42IHZlcnNpb24gb2YKQXBhY2hlIENvbW1vbnMgTGFuZyBhcyB3ZWxsIGFzIGEgaGlzdG9yeSBhbGwgY2hhbmdlcyBpbiB0aGUgQ29tbW9ucyBMYW5nIDMueApyZWxlYXNlIGxpbmUuIENvbW1vbnMgTGFuZyBpcyBhIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgcmV1c2FibGUKY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYW55IEphdmEgZW52aXJvbm1lbnQuIENvbW1vbnMgTGFuZyAzLjYgYXQKbGVhc3QgcmVxdWlyZXMgSmF2YSA3LjAuIE5vdGUgdGhhdCB0aGlzIGhhcyBjaGFuZ2VkIGZyb20gQ29tbW9ucyBMYW5nIDMuNSwgd2hpY2gKb25seSByZXF1aXJlZCBKYXZhIDEuNi4KCkZvciB0aGUgYWR2aWNlIG9uIHVwZ3JhZGluZyBmcm9tIDIueCB0byAzLngsIHNlZSB0aGUgZm9sbG93aW5nIHBhZ2U6CgogICAgaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvbGFuZy9hcnRpY2xlM18wLmh0bWwKCkhJR0hMSUdIVFMKPT09PT09PT09PQoKU29tZSBvZiB0aGUgaGlnaGxpZ2h0cyBpbiB0aGlzIHJlbGVhc2UgaW5jbHVkZToKCm8gVGhlIGNsYXNzIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5jb25jdXJyZW50Lk1lbW9pemVyIGlzIGFuIGltcGxlbWVudGF0aW9uCiAgICBvZiB0aGUgTWVtb2l6ZXIgcGF0dGVybiBhcyBzaG93biBpbgogICAgR29ldHosIEJyaWFuIGV0IGFsLiAoMjAwNikgLSBKYXZhIENvbmN1cnJlbmN5IGluIFByYWN0aWNlLCBwLiAxMDguCm8gVGhlIGNsYXNzIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5BcmNoVXRpbHMgaGFzIGJlZW4gYWRkZWQuIEFyY2hVdGlscyBpcwogICAgYSB1dGlsaXR5IGNsYXNzIGZvciB0aGUgIm9zLmFyY2giIHN5c3RlbSBwcm9wZXJ0eS4KCkRFUFJFQ0FUSU9OUwo9PT09PT09PT09PT0KClRoZSBBcGFjaGUgQ29tbW9ucyBDb21tdW5pdHkgaGFzIHJlY2VudGx5IHNldCB1cCB0aGUgQ29tbW9ucyBUZXh0IGNvbXBvbmVudAphcyBhIGhvbWUgZm9yIGFsZ29yaXRobXMgd29ya2luZyBvbiBzdHJpbmdzLiBGb3IgdGhpcyByZWFzb24gbW9zdCBvZiB0aGUgc3RyaW5nCmZvY3VzZWQgZnVuY3Rpb25hbGl0eSBpbiBDb21tb25zIExhbmcgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgbW92ZWQgdG8KQ29tbW9ucyBUZXh0LiBUaGlzIGluY2x1ZGVzOgoKbyBBbGwgY2xhc3NlcyBpbiB0aGUgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnRleHQgYW5kIHRoZQogICAgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnRleHQudHJhbnNsYXRlIHBhY2thZ2VzCm8gb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN0cmluZ0VzY2FwZVV0aWxzCm8gb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlJhbmRvbVN0cmluZ1V0aWxzCm8gVGhlIG1ldGhvZHMgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN0cmluZ1V0aWxzLmdldEphcm9XaW5rbGVyRGlzdGFuY2UgYW5kCiAgICBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3RyaW5nVXRpbHMuZ2V0TGV2ZW5zaHRlaW5EaXN0YW5jZQoKRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBDb21tb25zIFRleHQgd2Vic2l0ZToKCiAgICBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy90ZXh0CgpUaGUgY2xhc3Mgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLkNoYXJFbmNvZGluZyBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mCmphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0cy4KClRoZSBmb2xsb3dpbmcgbWV0aG9kcyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBpbgpvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuQXJyYXlVdGlscyBpbiBmYXZvciBvZiB0aGUgY29ycmVzcG9uZGluZyBpbnNlcnQKbWV0aG9kcy4gTm90ZSB0aGF0IHRoZSBoYW5kbGluZyBmb3IgbnVsbCBpbnB1dHMgZGlmZmVycyBiZXR3ZWVuIGFkZCBhbmQgaW5zZXJ0LgoKbyBhZGQoYm9vbGVhbltdLCBpbnQsIGJvb2xlYW4pIC0+IGluc2VydChpbnQsIGJvb2xlYW5bXSwgYm9vbGVhbi4uLikKbyBhZGQoYnl0ZVtdLCBpbnQsIGJvb2xlYW4pICAgIC0+IGluc2VydChpbnQsIGJ5dGVbXSwgYnl0ZS4uLikKbyBhZGQoY2hhcltdLCBpbnQsIGJvb2xlYW4pICAgIC0+IGluc2VydChpbnQsIGNoYXJbXSwgY2hhci4uLikKbyBhZGQoZG91YmxlW10sIGludCwgYm9vbGVhbikgIC0+IGluc2VydChpbnQsIGRvdWJsZVtdLCBkb3VibGUuLi4pCm8gYWRkKGZsb2F0W10sIGludCwgYm9vbGVhbikgICAtPiBpbnNlcnQoaW50LCBmbG9hdFtdLCBmbG9hdC4uLikKbyBhZGQoaW50W10sIGludCwgYm9vbGVhbikgICAgIC0+IGluc2VydChpbnQsIGludFtdLCBpbnQuLi4pCm8gYWRkKGxvbmdbXSwgaW50LCBib29sZWFuKSAgICAtPiBpbnNlcnQoaW50LCBsb25nW10sIGxvbmcuLi4pCm8gYWRkKHNob3J0W10sIGludCwgYm9vbGVhbikgICAtPiBpbnNlcnQoaW50LCBzaG9ydFtdLCBzaG9ydC4uLikKbyBhZGQoVFtdLCBpbnQsIGJvb2xlYW4pICAgICAgIC0+IGluc2VydChpbnQsIFRbXSwgVC4uLikKCgpDT01QQVRJQklMSVRZIFdJVEggSkFWQSA5Cj09PT09PT09PT09PT09PT09PQoKVGhlIE1BTklGRVNULk1GIG5vdyBjb250YWlucyBhbiBhZGRpdGlvbmFsIGVudHJ5OgoKICBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMwoKVGhpcyBzaG91bGQgbWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgQ29tbW9ucyBMYW5nIDMuNiBhcyBhIG1vZHVsZSBpbiB0aGUgSmF2YSA5Cm1vZHVsZSBzeXN0ZW0uIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgY29ycmVzcG9uZGluZyBpc3N1ZSBhbmQgdGhlCnJlZmVyZW5jZWQgbWFpbGluZyBsaXN0IGRpc2N1c3Npb25zOgoKICAgIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvTEFORy0xMzM4CgpUaGUgYnVpbGQgcHJvYmxlbXMgcHJlc2VudCBpbiB0aGUgMy41IHJlbGVhc2UgaGF2ZSBiZWVuIHJlc29sdmVkLiBCdWlsZGluZwpDb21tb25zIExhbmcgMy42IHNob3VsZCB3b3JrIG91dCBvZiB0aGUgYm94IHdpdGggdGhlIGxhdGVzdCBKYXZhIDkgRUEgYnVpbGQuClBsZWFzZSByZXBvcnQgYW55IEphdmEgOSByZWxhdGVkIGlzc3VlcyBhdDoKCiAgICBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0xBTkcKCk5FVyBGRUFUVVJFUwo9PT09PT09PT09PT0KCm8gTEFORy0xMzM2OiBBZGQgTlVMIEJ5dGUgVG8gQ2hhclV0aWxzLiBUaGFua3MgdG8gQmVsdWdhIEJlaHIuCm8gTEFORy0xMzA0OiBBZGQgbWV0aG9kIGluIFN0cmluZ1V0aWxzIHRvIGRldGVybWluZSBpZiBzdHJpbmcgY29udGFpbnMgYm90aAogICAgICAgICAgICAgbWl4ZWQgY2FzZWQgY2hhcmFjdGVycy4gVGhhbmtzIHRvIEFuZHkgS2xpbWN6YWsuCm8gTEFORy0xMzI1OiBJbmNyZWFzZSB0ZXN0IGNvdmVyYWdlIG9mIFRvU3RyaW5nQnVpbGRlciBjbGFzcyB0byAxMDAlLgogICAgICAgICAgICAgVGhhbmtzIHRvIEFyc2hhZCBCYXNoYS4KbyBMQU5HLTEzMDc6IEFkZCBhIG1ldGhvZCBpbiBTdHJpbmdVdGlscyB0byBleHRyYWN0IG9ubHkgZGlnaXRzIG91dCBvZiBpbnB1dAogICAgICAgICAgICAgc3RyaW5nLiBUaGFua3MgdG8gQXJzaGFkIEJhc2hhLgpvIExBTkctMTI1NjogQWRkIEpNSCBtYXZlbiBkZXBlbmRlbmNpZXMuIFRoYW5rcyB0byBDMHJXaW4uCm8gTEFORy0xMTY3OiBBZGQgbnVsbCBmaWx0ZXIgdG8gUmVmbGVjdGlvblRvU3RyaW5nQnVpbGRlci4KICAgICAgICAgICAgIFRoYW5rcyB0byBNYXJrIERhY2VrLgpvIExBTkctMTI5OTogQWRkIG1ldGhvZCBmb3IgY29udmVydGluZyBzdHJpbmcgdG8gYW4gYXJyYXkgb2YgY29kZSBwb2ludHMuCm8gTEFORy02NjA6ICBBZGQgbWV0aG9kcyB0byBpbnNlcnQgYXJyYXlzIGludG8gYXJyYXlzIGF0IGFuIGluZGV4LgpvIExBTkctMTAzNDogQWRkIHN1cHBvcnQgZm9yIHJlY3Vyc2l2ZSBjb21wYXJpc29uIHRvCiAgICAgICAgICAgICBFcXVhbHNCdWlsZGVyI3JlZmxlY3Rpb25FcXVhbHMuIFRoYW5rcyB0byBZYXRob3MgVUcuCm8gTEFORy0xMDY3OiBBZGQgYSByZWZsZWN0aW9uLWJhc2VkIHZhcmlhbnQgb2YgRGlmZkJ1aWxkZXIuCm8gTEFORy03NDA6ICBJbXBsZW1lbnRhdGlvbiBvZiBhIE1lbW9taXplci4gVGhhbmtzIHRvIEphbWVzIFNhd2xlLgpvIExBTkctMTI1ODogQWRkIEFycmF5VXRpbHMjdG9TdHJpbmdBcnJheSBtZXRob2QuCiAgICAgICAgICAgICBUaGFua3MgdG8gSUcsIEdyemVnb3J6IFJvP25pZWNraS4KbyBMQU5HLTExNjA6IFN0cmluZ1V0aWxzI2FiYnJldmlhdGUgc2hvdWxkIHN1cHBvcnQgJ2N1c3RvbSBlbGxpcHNlcycgcGFyYW1ldGVyLgpvIExBTkctMTI5MzogQWRkIFN0cmluZ1V0aWxzI2lzQWxsRW1wdHkgYW5kICNpc0FsbEJsYW5rIG1ldGhvZHMuCiAgICAgICAgICAgICBUaGFua3MgdG8gUGllcnJlIFRlbXBsaWVyLCBNYXJ0aW4gVGFyamFueWkuCm8gTEFORy0xMzEzOiBBZGQgQXJjaFV0aWxzIC0gQW4gdXRpbGl0eSBjbGFzcyBmb3IgdGhlICJvcy5hcmNoIiBzeXN0ZW0gcHJvcGVydHkuCiAgICAgICAgICAgICBUaGFua3MgdG8gVG9tc2NoaS4KbyBMQU5HLTEyNzI6IEFkZCBzaHVmZmxlIG1ldGhvZHMgdG8gQXJyYXlVdGlscy4KbyBMQU5HLTEzMTc6IEFkZCBNZXRob2RVdGlscyNmaW5kQW5ub3RhdGlvbiBhbmQgZXh0ZW5kCiAgICAgICAgICAgICBNZXRob2RVdGlscyNnZXRNZXRob2RzV2l0aEFubm90YXRpb24gZm9yIG5vbi1wdWJsaWMsIHN1cGVyLWNsYXNzCiAgICAgICAgICAgICBhbmQgaW50ZXJmYWNlIG1ldGhvZHMuIFRoYW5rcyB0byBZYXNzZXIgWmFtYW5pLgpvIExBTkctMTMzMTogQWRkIEltbXV0YWJsZVBhaXIubnVsbFBhaXIoKS4KbyBMQU5HLTEzMzI6IEFkZCBJbW11dGFibGVUcmlwbGUubnVsbFRyaXBsZSgpLgoKRklYRUQgQlVHUwo9PT09PT09PT09CgpvIExBTkctMTMzNzogRml4IHRlc3QgZmFpbHVyZXMgaW4gSUJNIEpESyA4IGZvciBUb1N0cmluZ0J1aWxkZXJUZXN0LgpvIExBTkctMTMxOTogTXVsdGlsaW5lUmVjdXJzaXZlVG9TdHJpbmdTdHlsZSBTdGFja092ZXJmbG93RXJyb3Igd2hlbiBvYmplY3QgaXMKICAgICAgICAgICAgIGFuIGFycmF5LgpvIExBTkctMTMyMDogTG9jYWxlVXRpbHMjdG9Mb2NhbGUgZG9lcyBub3Qgc3VwcG9ydCBsYW5ndWFnZSBmb2xsb3dlZCBieSBVTiBNLjQ5CiAgICAgICAgICAgICBudW1lcmljLTMgYXJlYSBjb2RlIGZvbGxvd2VkIGJ5IHZhcmlhbnQuCm8gTEFORy0xMzAwOiBDbGFyaWZ5IG9yIGltcHJvdmUgYmVoYXZpb3VyIG9mIGludC1iYXNlZCBpbmRleE9mIG1ldGhvZHMgaW4KICAgICAgICAgICAgIFN0cmluZ1V0aWxzLiBUaGFua3MgdG8gTWFyayBEYWNlay4KbyBMQU5HLTEyODY6IFJhbmRvbVN0cmluZ1V0aWxzIHJhbmRvbSBtZXRob2QgY2FuIG92ZXJmbG93IGFuZCByZXR1cm4gY2hhcmFjdGVycwogICAgICAgICAgICAgb3V0c2lkZSBvZiBzcGVjaWZpZWQgcmFuZ2UuCm8gTEFORy0xMjkyOiBXb3JkVXRpbHMud3JhcCB0aHJvd3MgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi4KbyBMQU5HLTEyODc6IFJhbmRvbVN0cmluZ1V0aWxzI3JhbmRvbSBjYW4gZW50ZXIgaW5maW5pdGUgbG9vcCBpZiBlbmQgcGFyYW1ldGVyCiAgICAgICAgICAgICBpcyB0byBzbWFsbC4gVGhhbmtzIHRvIEl2YW4gTW9yb3pvdi4KbyBMQU5HLTEyODU6IE51bGxQb2ludGVyRXhjZXB0aW9uIGluIEZhc3REYXRlUGFyc2VyJFRpbWVab25lU3RyYXRlZ3kuCiAgICAgICAgICAgICBUaGFua3MgdG8gRnJhbmNlc2NvIENoaWNjaGlyaWNj8i4KbyBMQU5HLTEyODE6IEphdmFkb2Mgb2YgU3RyaW5nVXRpbHMub3JkaW5hbEluZGV4T2YgaXMgY29udHJhZGljdG9yeS4KICAgICAgICAgICAgIFRoYW5rcyB0byBBbmRyZWFzIEx1bmRibGFkLgpvIExBTkctMTE4ODogU3RyaW5nVXRpbHMjam9pbihULi4uKTogd2FybmluZzogW3VuY2hlY2tlZF0gUG9zc2libGUgaGVhcAogICAgICAgICAgICAgcG9sbHV0aW9uIGZyb20gcGFyYW1ldGVyaXplZCB2YXJhcmcgdHlwZSBULgpvIExBTkctMTE0NDogTXVsdGlwbGUgY2FsbHMgb2YKICAgICAgICAgICAgIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5jb25jdXJyZW50LkxhenlJbml0aWFsaXplci5pbml0aWFsaXplKCkKICAgICAgICAgICAgIGFyZSBwb3NzaWJsZS4gVGhhbmtzIHRvIFdhbGRlbWFyIE1haWVyLCBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xMjc2OiBTdHJCdWlsZGVyI3JlcGxhY2VBbGwgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uLgogICAgICAgICAgICAgVGhhbmtzIHRvIEFuZHkgS2xpbWN6YWsuCm8gTEFORy0xMjc4OiBCb29sZWFuVXRpbHMgamF2YWRvYyBpc3N1ZXMuIFRoYW5rcyB0byBEdWtlIFlpbi4KbyBMQU5HLTEwNzA6IEFycmF5VXRpbHMjYWRkIGNvbmZ1c2luZyBleGFtcGxlIGluIGphdmFkb2MuCiAgICAgICAgICAgICBUaGFua3MgdG8gUGF1bCBQb2dvbnlzaGV2LgpvIExBTkctMTI3MTogU3RyaW5nVXRpbHMjaXNBbnlFbXB0eSBhbmQgI2lzQW55Qmxhbmsgc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgYW4KICAgICAgICAgICAgIGVtcHR5IGFycmF5LiBUaGFua3MgdG8gUGllcnJlIFRlbXBsaWVyLgpvIExBTkctMTE1NTogQWRkIFN0cmluZ1V0aWxzI3Vud3JhcC4gVGhhbmtzIHRvIFNhaWYgQXNpZiwgVGhpYWdvIEFuZHJhZGUuCm8gTEFORy0xMzExOiBUeXBlVXRpbHMudG9TdHJpbmcoKSBkb2Vzbid0IGhhbmRsZSBwcmltaXRpdmUgYW5kIE9iamVjdCBhcnJheXMKICAgICAgICAgICAgIGNvcnJlY3RseS4gVGhhbmtzIHRvIEFhcm9uIERpZ3VsbGEuCm8gTEFORy0xMzEyOiBMb2NhbGVVdGlscyN0b0xvY2FsZSBkb2VzIG5vdCBzdXBwb3J0IGxhbmd1YWdlIGZvbGxvd2VkIGJ5IFVOIE0uNDkKICAgICAgICAgICAgIG51bWVyaWMtMyBhcmVhIGNvZGUuCm8gTEFORy0xMjY1OiBCdWlsZCBmYWlsdXJlcyB3aGVuIGJ1aWxkaW5nIHdpdGggSmF2YSA5IEVBLgpvIExBTkctMTMxNDogamF2YWRvYyBjcmVhdGlvbiBicm9rZW4gd2l0aCBKYXZhIDguIFRoYW5rcyB0byBBbGxvbiBNdXJpZW5pay4KbyBMQU5HLTEzMTA6IE1ldGhvZFV0aWxzLmludm9rZU1ldGhvZCB0aHJvd3MgQXJyYXlTdG9yZUV4Y2VwdGlvbiBpZiB1c2luZwogICAgICAgICAgICAgdmFyYXJncyBhcmd1bWVudHMgYW5kIHNtYWxsZXIgdHlwZXMgdGhhbiB0aGUgbWV0aG9kIGRlZmluZXMuCiAgICAgICAgICAgICBUaGFua3MgdG8gRG9uIEplYmEuCgpDSEFOR0VTCj09PT09PT0KCm8gTEFORy0xMzM4OiBBZGQgQXV0b21hdGljLU1vZHVsZS1OYW1lIE1BTklGRVNUIGVudHJ5IGZvciBKYXZhIDkKICAgICAgICAgICAgIGNvbXBhdGliaWxpdHkuCm8gTEFORy0xMzM0OiBEZXByZWNhdGUgQ2hhckVuY29kaW5nIGluIGZhdm91ciBvZgogICAgICAgICAgICAgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzLgpvIExBTkctMTExMDogSW1wbGVtZW50IEhhc2hTZXR2Qml0U2V0VGVzdCB1c2luZyBKTUguCiAgICAgICAgICAgICBUaGFua3MgdG8gQnJ1bm8gUC4gS2lub3NoaXRhLgpvIExBTkctMTI5MDogSW5jcmVhc2UgdGVzdCBjb3ZlcmFnZSBvZiBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuQXJyYXlVdGlscy4KICAgICAgICAgICAgIFRoYW5rcyB0byBBbmRyaWkgQWJyYW1vdi4KbyBMQU5HLTEyNzQ6IFN0clN1YnN0aXR1dG9yIHNob3VsZCBzdGF0ZSBpdHMgdGhyZWFkIHNhZmV0eS4KbyBMQU5HLTEyNzc6IFN0cmluZ1V0aWxzI2dldExldmVuc2h0ZWluRGlzdGFuY2UgcmVkdWNlIG1lbW9yeSBjb25zdW1wdGlvbi4KICAgICAgICAgICAgIFRoYW5rcyB0byB5dWZjdXkuCm8gTEFORy0xMjc5OiBVcGRhdGUgSmF2YSByZXF1aXJlbWVudCBmcm9tIEphdmEgNiB0byA3LgpvIExBTkctMTE0MzogU3RyaW5nVXRpbHMgc2hvdWxkIHVzZSB0b1h4eHhDYXNlKGludCkgcmF0aGVyIHRoYW4KICAgICAgICAgICAgIHRvWHh4eENhc2UoY2hhcikuIFRoYW5rcyB0byBzZWJiLgpvIExBTkctMTI5NzogQWRkIFN5c3RlbVV0aWxzLmdldEhvc3ROYW1lKCkgQVBJLgpvIExBTkctMTMwMTogTW92aW5nIGFwYWNoZS1yYXQtcGx1Z2luIGNvbmZpZ3VyYXRpb24gaW50byBwbHVnaW5NYW5hZ2VtZW50LgogICAgICAgICAgICAgVGhhbmtzIHRvIEthcmwgSGVpbnogTWFyYmFpc2UuCm8gTEFORy0xMzE2OiBEZXByZWNhdGUgY2xhc3Nlcy9tZXRob2RzIG1vdmVkIHRvIGNvbW1vbnMtdGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzIGZvciB2ZXJzaW9uIDMuNQoKCkhJR0hMSUdIVFMKPT09PT09PT09PQoKU29tZSBvZiB0aGUgaGlnaGxpZ2h0cyBpbiB0aGlzIHJlbGVhc2UgaW5jbHVkZToKCm8gQWRkZWQgSmF2YSA5IGRldGVjdGlvbiB0byBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3lzdGVtVXRpbHMuCm8gU3VwcG9ydCBmb3Igc2hpZnRpbmcgYW5kIHN3YXBwaW5nIGVsZW1lbnRzIGluCiAgICBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuQXJyYXlVdGlscy4KbyBOZXcgbWV0aG9kcyBmb3IgZ2VuZXJhdGluZyByYW5kb20gc3RyaW5ncyBmcm9tIGRpZmZlcmVudCBjaGFyYWN0ZXIgY2xhc3NlcwogICAgaW5jbHVkaW5nIGFscGhhYmV0aWMsIGFscGhhLW51bWVyaWMgYW5kIEFTQ0lJIGFkZGVkIHRvCiAgICBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuUmFuZG9tU3RyaW5nVXRpbHMuCm8gTnVtZXJvdXMgZXh0ZW5zaW9ucyB0byBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3RyaW5nVXRpbHMgaW5jbHVkaW5nCiAgICBudWxsIHNhZmUgY29tcGFyZSB2YXJpYW50cywgbW9yZSByZW1vdmUgYW5kIHJlcGxhY2UgdmFyaWFudHMsIHJvdGF0aW9uIGFuZAogICAgdHJ1bmNhdGlvbi4KbyBBZGRlZCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuVGhyZWFkVXRpbHMgLSBhIHV0aWxpdHkgY2xhc3MgdG8gd29yayB3aXRoCiAgICBpbnN0YW5jZXMgb2YgamF2YS5sYW5nLlRocmVhZCBhbmQgamF2YS5sYW5nLlRocmVhZEdyb3VwLgpvIEFkZGVkIGFubm90YXRpb25zIEBFcXVhbHNFeGNsdWRlLCBASGFzaENvZGVFeGNsdWRlIGFuZCBAVG9TdHJpbmdFY2x1ZGUgdG8KICAgIG1hcmsgZmllbGRzIHdoaWNoIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSByZWZsZWN0aXZlIGJ1aWxkZXJzIGluIHRoZQogICAgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLmJ1aWxkZXIgcGFja2FnZS4KbyBTdXBwb3J0IGZvciB2YXJpb3VzIG1vZGlmeSBhbmQgcmV0cmlldmUgdmFsdWUgdXNlIGNhc2VzIGFkZGVkIHRvIHRoZSBjbGFzc2VzCiAgICBpbiBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMubXV0YWJsZS4KCkNPTVBBVElCSUxJVFkKPT09PT09PT09PT09PQoKQXBhY2hlIENvbW1vbnMgTGFuZyAzLjUgaXMgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCB0aGUgMy40IHJlbGVhc2UuIFVzZXJzCnNob3VsZCBub3QgZXhwZXJpZW5jZSBhbnkgcHJvYmxlbXMgd2hlbiB1cGdyYWRpbmcgZnJvbSAzLjQgdG8gMy41LgoKVGhlcmUgaGFzIGJlZW4gYW4gYWRkaXRpb24gdG8gdGhlIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy50aW1lLkRhdGVQcmludGVyCmludGVyZmFjZToKCm8gQWRkZWQgbWV0aG9kICdwdWJsaWMgYm9vbGVhbiBwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLnRleHQuUGFyc2VQb3NpdGlvbiwKICAgIGphdmEudXRpbC5DYWxlbmRhciknCm8gQWRkZWQgbWV0aG9kICdwdWJsaWMgamF2YS5sYW5nLkFwcGVuZGFibGUgZm9ybWF0KGxvbmcsIGphdmEubGFuZy5BcHBlbmRhYmxlKScKbyBBZGRlZCBtZXRob2QgJ3B1YmxpYyBqYXZhLmxhbmcuQXBwZW5kYWJsZSBmb3JtYXQoamF2YS51dGlsLkRhdGUsCiAgICBqYXZhLmxhbmcuQXBwZW5kYWJsZSknCm8gQWRkZWQgbWV0aG9kICdwdWJsaWMgamF2YS5sYW5nLkFwcGVuZGFibGUgZm9ybWF0KGphdmEudXRpbC5DYWxlbmRhciwKICAgIGphdmEubGFuZy5BcHBlbmRhYmxlKScKCkZvciB0aGlzIHJlYXNvbiAzLjUgaXMgbm90IHN0cmljdGx5IHNvdXJjZSBjb21wYXRpYmxlIHRvIDMuNC4gU2luY2UgdGhlCkRhdGVQcmludGVyIGludGVyZmFjZSBpcyBub3QgbWVhbnQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgY2xpZW50cywgdGhpcwpjaGFuZ2UgaXQgbm90IGNvbnNpZGVyZWQgdG8gY2F1c2UgYW55IHByb2JsZW1zLgoKSkFWQSA5IFNVUFBPUlQKPT09PT09PT09PT09PT0KCkphdmEgOSBpbnRyb2R1Y2VzIGEgbmV3IHZlcnNpb24tc3RyaW5nIHNjaGVtZS4gRGV0YWlscyBvZiB0aGlzIG5ldyBzY2hlbWUgYXJlCmRvY3VtZW50ZWQgaW4gSkVQLTIyMyAoaHR0cDovL29wZW5qZGsuamF2YS5uZXQvamVwcy8yMjMpLiBJbiBvcmRlciB0byBzdXBwb3J0CkpFUC0yMjMgdHdvIGNsYXNzZXMgaGFkIHRvIGJlIGNoYW5nZWQ6CgpvIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5KYXZhVmVyc2lvbgogICAgZGVwcmVjYXRlZCBlbnVtIGNvbnN0YW50IEpBVkFfMV85CiAgICBpbnRyb2R1Y2VkIGVudW0gY29uc3RhbnQgSkFWQV85CgpvIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TeXN0ZW1VdGlscwogICAgZGVwcmVjYXRlZCBjb25zdGFudCBJU19KQVZBXzFfOQogICAgaW50cm9kdWNlZCBjb25zdGFudCBJU19KQVZBXzkKCkZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBMQU5HLTExOTcKKGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvTEFORy0xMTk3KS4gQWxsIG90aGVyIEFQSXMgYXJlIGV4cGVjdGVkCnRvIHdvcmsgd2l0aCBKYXZhIDkuCgpCVUlMRElORyBPTiBKQVZBIDkKPT09PT09PT09PT09PT09PT09CgpKYXZhIDggaW50cm9kdWNlZCB0aGUgVW5pY29kZSBDb25zb3J0aXVtJ3MgQ29tbW9uIExvY2FsZSBEYXRhIFJlcG9zaXRvcnkgYXMKYWx0ZXJuYXRpdmUgc291cmNlIGZvciBsb2NhbGUgZGF0YS4gSmF2YSA5IHdpbGwgdXNlIHRoZSBDTERSIHByb3ZpZGVyIGFzCmRlZmF1bHQgcHJvdmlkZXIgZm9yIGxvY2FsZSBkYXRhIChzZWUgaHR0cDovL29wZW5qZGsuamF2YS5uZXQvamVwcy8yNTIpLiBUaGlzCmNhdXNlcyBhbiBudW1iZXIgb2YgbG9jYWxlLXNlbnNpdGl2ZSB0ZXN0IGluIENvbW1vbnMgTGFuZyB0byBmYWlsLiBJbiBvcmRlcgp0byBidWlsZCBDb21tb25zIExhbmcgMy41IG9uIEphdmEgOSwgdGhlIGxvY2FsZSBwcm92aWRlciBoYXMgdG8gYmUgc2V0IHRvCidKUkUnOgoKICAgIG12biAtRGphdmEubG9jYWxlLnByb3ZpZGVycz1KUkUgY2xlYW4gaW5zdGFsbAoKV2UgYXJlIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nIHdheXMgdG8gc3VwcG9ydCBidWlsZGluZyBvbiBKYXZhIDkgd2l0aG91dApmdXJ0aGVyIGNvbmZpZ3VyYXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZToKaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9MQU5HLTEyNjUKCgpORVcgRkVBVFVSRVMKPT09PT09PT09PT09PT0KCm8gTEFORy0xMjc1OiBBZGRlZCBhIHRyeUFjcXVpcmUoKSBtZXRob2QgdG8gVGltZWRTZW1hcGhvcmUuCm8gTEFORy0xMjU1OiBBZGQgRGF0ZVV0aWxzLnRvQ2FsZW5kYXIoRGF0ZSwgVGltZVpvbmUpLiBUaGFua3MgdG8gS2FpeXVhbiBXYW5nLgpvIExBTkctMTAyMzogQWRkIFdvcmRVdGlscy53cmFwIG92ZXJsb2FkIHdpdGggY3VzdG9taXphYmxlIGJyZWFrYWJsZSBjaGFyYWN0ZXIuCiAgICAgICAgICAgICBUaGFua3MgdG8gTWFya28gQmVraHRhLgpvIExBTkctNzg3OiAgQWRkIG1ldGhvZCByZW1vdmVJZ25vcmVDYXNlKFN0cmluZywgU3RyaW5nKSB0byBTdHJpbmdVdGlscy4gVGhhbmtzCiAgICAgICAgICAgICB0byBHb2t1bCBOYW50aGFrdW1hciBDLgpvIExBTkctMTIyNDogRXh0ZW5kIFJhbmRvbVN0cmluZ1V0aWxzIHdpdGggbWV0aG9kcyB0aGF0IGdlbmVyYXRlIHN0cmluZ3MKICAgICAgICAgICAgIGJldHdlZW4gYSBtaW4gYW5kIG1heCBsZW5ndGguIFRoYW5rcyB0byBDYWxlYiBDdXNoaW5nLgpvIExBTkctMTI1NzogQWRkIEFQSXMgU3RyaW5nVXRpbHMud3JhcElmTWlzc2luZyhTdHJpbmcsIGNoYXJ8U3RyaW5nKS4gVGhhbmtzIHRvCiAgICAgICAgICAgICBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xMjUzOiBBZGQgUmFuZG9tVXRpbHMjbmV4dEJvb2xlYW4oKSBtZXRob2QuIFRoYW5rcyB0byBhZGlsZWsuCm8gTEFORy0xMDg1OiBBZGQgYSBjaXJjdWl0IGJyZWFrZXIgaW1wbGVtZW50YXRpb24uIFRoYW5rcyB0byBPbGl2ZXIgSGVnZXIgYW5kCiAgICAgICAgICAgICBCcnVubyBQLiBLaW5vc2hpdGEuCm8gTEFORy0xMDEzOiBBZGQgU3RyaW5nVXRpbHMudHJ1bmNhdGUoKS4gVGhhbmtzIHRvIFRoaWFnbyBBbmRyYWRlLgpvIExBTkctMTE5NTogRW5oYW5jZSBNZXRob2RVdGlscyB0byBhbGxvdyBpbnZvY2F0aW9uIG9mIHByaXZhdGUgbWV0aG9kcy4gVGhhbmtzCiAgICAgICAgICAgICB0byBEZXJlayBDLiBBc2htb3JlLgpvIExBTkctMTE4OTogQWRkIGdldEFuZEluY3JlbWVudC9nZXRBbmREZWNyZW1lbnQvZ2V0QW5kQWRkL2luY3JlbWVudEFuZEdldC8KICAgICAgICAgICAgIGRlY3JlbWVudEFuZEdldC9hZGRBbmRHZXQgaW4gTXV0YWJsZSogY2xhc3Nlcy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBIYWl5YW5nIExpIGFuZCBNYXR0aGV3IEJhcnRlbnNjaGxhZy4KbyBMQU5HLTEyMjU6IEFkZCBSYW5kb21TdHJpbmdVdGlscyNyYW5kb21HcmFwaCBhbmQgI3JhbmRvbVByaW50IHdoaWNoIG1hdGNoCiAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiBjbGFzcy4gVGhhbmtzIHRvIENhbGViIEN1c2hpbmcuCm8gTEFORy0xMjIzOiBBZGQgU3RvcFdhdGNoI2dldFRpbWUoVGltZVVuaXQpLiBUaGFua3MgdG8gTmljayBNYW5sZXkuCm8gTEFORy03ODE6ICBBZGQgbWV0aG9kcyB0byBPYmplY3RVdGlscyBjbGFzcyB0byBjaGVjayBmb3IgbnVsbCBlbGVtZW50cyBpbiB0aGUKICAgICAgICAgICAgIGFycmF5LiBUaGFua3MgdG8gS3J6eXN6dG9mIFdvbG55LgpvIExBTkctMTIyODogUHJlZmVyIFRocm93YWJsZS5nZXRDYXVzZSgpIGluIEV4Y2VwdGlvblV0aWxzLmdldENhdXNlKCkuCiAgICAgICAgICAgICBUaGFua3MgdG8gQnJhZCBIZXNzLgpvIExBTkctMTIzMzogRGlmZkJ1aWxkZXIgYWRkIG1ldGhvZCB0byBhbGxvdyBhcHBlbmRpbmcgZnJvbSBhIERpZmZSZXN1bHQuCiAgICAgICAgICAgICBUaGFua3MgdG8gTmljayBNYW5sZXkuCm8gTEFORy0xMTY4OiBBZGQgU3lzdGVtVXRpbHMuSVNfT1NfV0lORE9XU18xMCBwcm9wZXJ0eS4KICAgICAgICAgICAgIFRoYW5rcyB0byBQYXNjYWwgU2NodW1hY2hlci4KbyBMQU5HLTExMTU6IEFkZCBzdXBwb3J0IGZvciB2YXJhcmdzIGluIENvbnN0cnVjdG9yVXRpbHMsIE1lbWJlclV0aWxzLCBhbmQKICAgICAgICAgICAgIE1ldGhvZFV0aWxzLiBUaGFua3MgdG8gSmltIExsb3lkIGFuZCBKb2UgRmVybmVyLgpvIExBTkctMTEzNDogQWRkIG1ldGhvZHMgdG8gY2hlY2sgbnVtYmVycyBhZ2FpbnN0IE5hTiBhbmQgaW5pZmluaXRlIHRvCiAgICAgICAgICAgICBWYWxpZGF0ZS4gVGhhbmtzIHRvIEFsYW4gU21pdGhlZS4KbyBMQU5HLTEyMjA6IEFkZCB0ZXN0cyBmb3IgbWlzc2VkIGJyYW5jaGVzIGluIERhdGVVdGlscy4KICAgICAgICAgICAgIFRoYW5rcyB0byBDYXNleSBTY2FyYm9yb3VnaC4KbyBMQU5HLTExNDY6IHovT1MgaWRlbnRpZmljYXRpb24gaW4gU3lzdGVtVXRpbHMuCiAgICAgICAgICAgICBUaGFua3MgdG8gR2Fib3IgTGlwdGFrLgpvIExBTkctMTE5MjogRmFzdERhdGVGb3JtYXQgc3VwcG9ydCBvZiB0aGUgd2Vlay15ZWFyIGNvbXBvbmVudCAodXBwZXJjYXNlICdZJykuCiAgICAgICAgICAgICBUaGFua3MgdG8gRG9taW5payBTdGFkbGVyLgpvIExBTkctMTE2OTogQWRkIFN0cmluZ1V0aWxzIG1ldGhvZHMgdG8gY29tcGFyZSBhIHN0cmluZyB0byBtdWx0aXBsZSBzdHJpbmdzLgogICAgICAgICAgICAgVGhhbmtzIHRvIFJhZmFsIEdsb3dpbnNraSwgUm9iZXJ0IFBhcnIgYW5kIEFybWFuIFNoYXJpZi4KbyBMQU5HLTExODU6IEFkZCByZW1vdmUgYnkgcmVndWxhciBleHByZXNzaW9uIG1ldGhvZHMgaW4gU3RyaW5nVXRpbHMuCm8gTEFORy0xMTM5OiBBZGQgcmVwbGFjZSBieSByZWd1bGFyIGV4cHJlc3Npb24gbWV0aG9kcyBpbiBTdHJpbmdVdGlscy4KbyBMQU5HLTExNzE6IEFkZCBjb21wYXJlIG1ldGhvZHMgaW4gU3RyaW5nVXRpbHMuCm8gTEFORy0xMTc0OiBBZGQgc3VnYXIgdG8gUmFuZG9tVXRpbHMuIFRoYW5rcyB0byBQdW5rcmF0ejMxMi4KbyBMQU5HLTExNTQ6IEZhc3REYXRlRm9ybWF0IEFQSXMgdGhhdCB1c2UgYSBTdHJpbmdCdWlsZGVyLiBUaGFua3MgdG8KICAgICAgICAgICAgIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTExNDk6IEFiaWxpdHkgdG8gdGhyb3cgY2hlY2tlZCBleGNlcHRpb25zIHdpdGhvdXQgZGVjbGFyaW5nIHRoZW0uIFRoYW5rcwogICAgICAgICAgICAgdG8gR3JlZ29yeSBaYWsuCm8gTEFORy0xMTUzOiBJbXBsZW1lbnQgUGFyc2VQb3NpdGlvbiBhcGkgZm9yIEZhc3REYXRlUGFyc2VyLgpvIExBTkctMTEzNzogQWRkIGNoZWNrIGZvciBkdXBsaWNhdGUgZXZlbnQgbGlzdGVuZXIgaW4gRXZlbnRMaXN0ZW5lclN1cHBvcnQuCiAgICAgICAgICAgICBUaGFua3MgdG8gTWF0dGhldyBBZ3VpcnJlLgpvIExBTkctMTEzNTogQWRkIG1ldGhvZCBjb250YWluc0FsbFdvcmRzIHRvIFdvcmRVdGlscy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBFZHVhcmRvIE1hcnRpbnMuCm8gTEFORy0xMTMyOiBSZWZsZWN0aW9uVG9TdHJpbmdCdWlsZGVyIGRvZXNuJ3QgdGhyb3cgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgICAgICAgICB3aGVuIHRoZSBjb25zdHJ1Y3RvcidzIG9iamVjdCBwYXJhbSBpcyBudWxsLiBUaGFua3MgdG8gSmFjayBUYW4uCm8gTEFORy03MDE6ICBTdHJpbmdVdGlscyBqb2luIHdpdGggdmFyIGFyZ3MuIFRoYW5rcyB0byBKYW1lcyBTYXdsZS4KbyBMQU5HLTExMDU6IEFkZCBUaHJlYWRVdGlscyAtIEEgdXRpbGl0eSBjbGFzcyB3aGljaCBwcm92aWRlcyBoZWxwZXIgbWV0aG9kcwogICAgICAgICAgICAgcmVsYXRlZCB0byBqYXZhLmxhbmcuVGhyZWFkICBJc3N1ZTogTEFORy0xMTA1LiBUaGFua3MgdG8KICAgICAgICAgICAgIEhlbmRyaWsgU2FseS4KbyBMQU5HLTEwMzE6IEFkZCBhbm5vdGF0aW9ucyB0byBleGNsdWRlIGZpZWxkcyBmcm9tIFJlZmxlY3Rpb25FcXVhbHNCdWlsZGVyLAogICAgICAgICAgICAgUmVmbGVjdGlvblRvU3RyaW5nQnVpbGRlciBhbmQgUmVmbGVjdGlvbkhhc2hDb2RlQnVpbGRlci4gVGhhbmtzCiAgICAgICAgICAgICB0byBGZWxpcGUgQWRvcm5vLgpvIExBTkctMTEyNzogVXNlIEpVbml0IHJ1bGVzIHRvIHNldCBhbmQgcmVzZXQgdGhlIGRlZmF1bHQgTG9jYWxlIGFuZCBUaW1lWm9uZS4KbyBMQU5HLTExMTk6IEFkZCByb3RhdGUoc3RyaW5nLCBpbnQpIG1ldGhvZCB0byBTdHJpbmdVdGlscy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBMb2ljIEd1aWJlcnQuCm8gTEFORy0xMDk5OiBBZGQgc3dhcCBhbmQgc2hpZnQgb3BlcmF0aW9ucyBmb3IgYXJyYXlzIHRvIEFycmF5VXRpbHMuIFRoYW5rcyB0bwogICAgICAgICAgICAgQWRyaWFuIEJlci4KbyBMQU5HLTEwNTA6IENoYW5nZSBudWxsVG9FbXB0eSBtZXRob2RzIHRvIGdlbmVyaWNzLiBUaGFua3MgdG8gSmFtZXMgU2F3bGUuCm8gTEFORy0xMDc0OiBBZGQgYSBtZXRob2QgdG8gQXJyYXlVdGlscyBmb3IgcmVtb3ZpbmcgYWxsIG9jY3VycmVuY2VzIG9mIGEgZ2l2ZW4KICAgICAgICAgICAgIGVsZW1lbnQgIElzc3VlOiBMQU5HLTEwNzQuIFRoYW5rcyB0byBIYWl5YW5nIExpLgoKRklYRUQgQlVHUwo9PT09PT09PT09PT0KCm8gTEFORy0xMjYxOiBBcnJheVV0aWxzLmNvbnRhaW5zIHJldHVybnMgZmFsc2UgZm9yIGluc3RhbmNlcyBvZiBzdWJ0eXBlcy4KbyBMQU5HLTEyNTI6IFJlbmFtZSBOdW1iZXJVdGlscy5pc051bWJlciwgaXNDcmVhdGFibGUgdG8gYmV0dGVyIHJlZmxlY3QKICAgICAgICAgICAgIGNyZWF0ZU51bWJlci4gQWxzbywgYWNjb21tb2RhdGVkIGZvciAiKyIgc3ltYm9sIGFzIHByZWZpeCBpbgogICAgICAgICAgICAgaXNDcmVhdGFibGUgYW5kIGlzTnVtYmVyLiBUaGFua3MgdG8gUm9iIFRvbXBraW5zLgpvIExBTkctMTIzMDogUmVtb3ZlIHVubmVjZXNzYXJ5IHN5bmNocm9uaXphdGlvbiBmcm9tIHJlZ2lzdHJ5IGxvb2t1cCBpbgogICAgICAgICAgICAgRXF1YWxzQnVpbGRlciBhbmQgSGFzaENvZGVCdWlsZGVyLiBUaGFua3MgdG8gUGhpbGlwcGUgTWFyc2NoYWxsLgpvIExBTkctMTIxNDogSGFuZGxlICJ2b2lkIiBpbiBDbGFzc1V0aWxzLmdldENsYXNzKCkuIFRoYW5rcyB0byBIZW5yeSBUdW5nLgpvIExBTkctMTI1MDogU2VyaWFsaXphdGlvblV0aWxzI2Rlc2VyaWFsaXplIGhhcyB1bm5lY2Vzc2FyeSBjb2RlIGFuZCBhIGNvbW1lbnQKICAgICAgICAgICAgIGZvciB0aGF0LiBUaGFua3MgdG8gR2xlYXNlIFdhbmcuCm8gTEFORy0xMTkwOiBUeXBlVXRpbHMuaXNBc3NpZ25hYmxlIHRocm93cyBOdWxsUG9pbnRlckV4Y2VwdGlvbiB3aGVuIGZyb21UeXBlCiAgICAgICAgICAgICBoYXMgdHlwZSB2YXJpYWJsZXMgYW5kIHRvVHlwZSBnZW5lcmljIHN1cGVyY2xhc3Mgc3BlY2lmaWVzIHR5cGUKICAgICAgICAgICAgIHZhcmlhYmxlLiBUaGFua3MgdG8gUGFzY2FsIFNjaHVtYWNoZXIuCm8gTEFORy0xMjI2OiBTdHJpbmdVdGlscyNub3JtYWxpemVTcGFjZSBkb2VzIG5vdCB0cmltIHRoZSBzdHJpbmcgYW55bW9yZS4KICAgICAgICAgICAgIFRoYW5rcyB0byBQYXNjYWwgU2NodW1hY2hlci4KbyBMQU5HLTEyNTE6IFNlcmlhbGl6YXRpb25VdGlscy5DbGFzc0xvYWRlckF3YXJlT2JqZWN0SW5wdXRTdHJlYW0gc2hvdWxkIHVzZQogICAgICAgICAgICAgc3RhdGljIGluaXRpYWxpemVyIHRvIGluaXRpYWxpemUgcHJpbWl0aXZlVHlwZXMgbWFwLiBUaGFua3MgdG8KICAgICAgICAgICAgIFRha3V5YSBVZXNoaW4uCm8gTEFORy0xMjQ4OiBGYXN0RGF0ZVByaW50ZXIgTWVtb3J5IGFsbG9jYXRpb24gcmVncmVzc2lvbi4gVGhhbmtzIHRvCiAgICAgICAgICAgICBCZW5vaXQgV2lhcnQuCm8gTEFORy0xMDE4OiBGaXggcHJlY2lzaW9uIGxvc3Mgb24gTnVtYmVyVXRpbHMuY3JlYXRlTnVtYmVyKFN0cmluZykuIFRoYW5rcyB0bwogICAgICAgICAgICAgTmljayBNYW5sZXkuCm8gTEFORy0xMTk5OiBGaXggaW1wbGVtZW50YXRpb24gb2YgU3RyaW5nVXRpbHMuZ2V0SmFyb1dpbmtsZXJEaXN0YW5jZSgpLiBUaGFua3MKICAgICAgICAgICAgIHRvIE0uIFN0ZWlnZXIuCm8gTEFORy0xMjQ0OiBGaXggZGVhZCBsaW5rcyBpbiBTdHJpbmdVdGlscy5nZXRMZXZlbnNodGVpbkRpc3RhbmNlKCkgamF2YWRvYy4KICAgICAgICAgICAgIFRoYW5rcyB0byBqamJhbmtlcnQuCm8gTEFORy0xMjQyOiAiXHUyMjg0IjoiPyIgbWFwcGluZyBtaXNzaW5nIGZyb20KICAgICAgICAgICAgIEVudGl0eUFycmF5cyNIVE1MNDBfRVhURU5ERURfRVNDQVBFLiBUaGFua3MgdG8gTmVhbCBTdGV3YXJ0LgpvIExBTkctOTAxOiAgU3RyaW5nVXRpbHMjc3RhcnRzV2l0aEFueS9lbmRzV2l0aEFueSBpcyBjYXNlIHNlbnNpdGl2ZSAtCiAgICAgICAgICAgICBkb2N1bWVudGVkIGFzIGNhc2UgaW5zZW5zaXRpdmUuIFRoYW5rcyB0byBNYXR0aGV3IEJhcnRlbnNjaGxhZy4KbyBMQU5HLTEyMzI6IERpZmZCdWlsZGVyOiBBZGQgbnVsbCBjaGVjayBvbiBmaWVsZE5hbWUgd2hlbiBhcHBlbmRpbmcgT2JqZWN0IG9yCiAgICAgICAgICAgICBPYmplY3RbXS4gVGhhbmtzIHRvIE5pY2sgTWFubGV5LgpvIExBTkctMTE3ODogQXJyYXlVdGlscy5yZW1vdmVBbGwoT2JqZWN0IGFycmF5LCBpbnQuLi4gaW5kaWNlcykgc2hvdWxkIGRvIHRoZQogICAgICAgICAgICAgY2xvbmUsIG5vdCBpdHMgY2FsbGVycy4gVGhhbmtzIHRvIEhlbnJpIFlhbmRlbGwuCm8gTEFORy0xMTIwOiBTdHJpbmdVdGlscy5zdHJpcEFjY2VudHMgc2hvdWxkIHJlbW92ZSBhY2NlbnRzIGZyb20gIj8iIGFuZCAiPyIuCiAgICAgICAgICAgICBUaGFua3MgdG8ga2FjaGluZzg4LgpvIExBTkctMTIwNTogTnVtYmVyVXRpbHMuY3JlYXRlTnVtYmVyKCkgYmVoYXZlcyBpbmNvbnNpc3RlbnRseSB3aXRoCiAgICAgICAgICAgICBOdW1iZXJVdGlscy5pc051bWJlcigpLiBUaGFua3MgdG8gcGJyb3NlLgpvIExBTkctMTIyMjogRml4IGZvciBpbmNvcnJlY3QgY29tbWVudCBvbiBTdHJpbmdVdGlscy5jb250YWluc0lnbm9yZUNhc2UKICAgICAgICAgICAgIG1ldGhvZC4gVGhhbmtzIHRvIEFkYW0gSi4KbyBMQU5HLTEyMjE6IEZpeCB0eXBvIG9uIGFwcGVuZElmTWlzc2luZyBqYXZhZG9jLiBUaGFua3MgdG8gUGllcnJlIFRlbXBsaWVyLgpvIExBTkctMTIwMjogcGFyc2VEYXRlU3RyaWN0bHkgZG9lcyd0IHBhc3Mgc3BlY2lmaWVkIGxvY2FsZS4gVGhhbmtzIHRvCiAgICAgICAgICAgICBNYXJrdXMgSmVsc21hLgpvIExBTkctMTIxOTogRmFzdERhdGVGb3JtYXQgZG9lc24ndCByZXNwZWN0IHN1bW1lciBkYXlsaWdodCBpbiBzb21lIGxvY2FsaXplZAogICAgICAgICAgICAgc3RyaW5ncy4gVGhhbmtzIHRvIEphcmVrLgpvIExBTkctMTE3NTogUmVtb3ZlIEFudC1iYXNlZCBidWlsZC4KbyBMQU5HLTExOTQ6IExpbWl0IG1heCBoZWFwIG1lbW9yeSBmb3IgY29uc2lzdGVudCBUcmF2aXMgQ0kgYnVpbGQuCm8gTEFORy0xMTg2OiBGaXggTnVsbFBvaW50ZXJFeGNlcHRpb24gaW4gRmFzdERhdGVQYXJzZXIkVGltZVpvbmVTdHJhdGVneS4KICAgICAgICAgICAgIFRoYW5rcyB0byBOaWNrTWFubGV5LgpvIExBTkctMTE5Mzogb3JkaW5hbEluZGV4T2YoImFiYyIsICJhYiIsIDEpIGdpdmVzIGluY29ycmVjdCBhbnN3ZXIgb2YgLTEKICAgICAgICAgICAgIChjb3JyZWN0IGFuc3dlciBzaG91bGQgYmUgMCk7IHJldmVydCBmaXggZm9yIExBTkctMTA3Ny4gVGhhbmtzIHRvCiAgICAgICAgICAgICBRaW4gTGkuCm8gTEFORy0xMDAyOiBTZXZlcmFsIHByZWRlZmluZWQgSVNPIEZhc3REYXRlRm9ybWF0cyBpbiBEYXRlRm9ybWF0VXRpbHMgYXJlCiAgICAgICAgICAgICBpbmNvcnJlY3QuIFRoYW5rcyB0byBNaWNoYWVsIE9zaXBvdi4KbyBMQU5HLTExNTI6IFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gb3IgZmllbGQgb3Zlci13cml0ZSBmb3IgbGFyZ2UgeWVhcgogICAgICAgICAgICAgZmllbGRzIGluIEZhc3REYXRlUGFyc2VyLiBUaGFua3MgdG8gUGFzIEZpbGlwLgpvIExBTkctMTE0MTogU3RyTG9va3VwLnN5c3RlbVByb3BlcnRpZXNMb29rdXAoKSBubyBsb25nZXIgcmVhY3RzIG9uIGNoYW5nZXMgb24KICAgICAgICAgICAgIHN5c3RlbSBwcm9wZXJ0aWVzLgpvIExBTkctMTE0NzogRW51bVV0aWxzICpCaXRWZWN0b3IgaXNzdWUgd2l0aCBtb3JlIHRoYW4gMzIgdmFsdWVzIEVudW0uIFRoYW5rcwogICAgICAgICAgICAgdG8gTG9pYyBHdWliZXJ0LgpvIExBTkctMTA1OTogQ2FwaXRhbGl6ZSBqYXZhZG9jIGlzIGluY29ycmVjdC4gVGhhbmtzIHRvIENvbGluIENhc2V5LgpvIExBTkctMTEyMjogSW5jb25zaXN0ZW50IGJlaGF2aW9yIG9mIHN3YXAgZm9yIG1hbGZvcm1lZCBpbnB1dHMuIFRoYW5rcyB0bwogICAgICAgICAgICAgQWRyaWFuIEJlci4KbyBMQU5HLTExMzA6IEZpeCBjcml0aWNhbCBpc3N1ZXMgcmVwb3J0ZWQgYnkgU29uYXJRdWJlLgpvIExBTkctMTEzMTogU3RyQnVpbGRlci5lcXVhbHMoU3RyQnVpbGRlcikgZG9lc24ndCBjaGVjayBmb3IgbnVsbCBpbnB1dHMuCm8gTEFORy0xMTI4OiBKc29uVG9TdHJpbmdTdHlsZSBkb2Vzbid0IGhhbmRsZSBjaGFycyBhbmQgb2JqZWN0cyBjb3JyZWN0bHkuCiAgICAgICAgICAgICBUaGFua3MgdG8gSmFjayBUYW4uCm8gTEFORy0xMTI2OiBEYXRlRm9ybWF0VXRpbHNUZXN0LnRlc3RTTVRQIGRlcGVuZHMgb24gdGhlIGRlZmF1bHQgTG9jYWxlLgpvIExBTkctMTEyMzogVW5pdCB0ZXN0IEZhc3REYXRlUHJpbnRlclRpbWVab25lc1Rlc3QgbmVlZHMgYSB0aW1lem9uZSBzZXQuCiAgICAgICAgICAgICBUaGFua3MgdG8gQ2hyaXN0aWFuIFAuIE1vbW9uLgpvIExBTkctOTE2OiAgRGF0ZUZvcm1hdFV0aWxzLmZvcm1hdCBkb2VzIG5vdCBjb3JyZWN0bHkgY2hhbmdlIENhbGVuZGFyCiAgICAgICAgICAgICBUaW1lWm9uZSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMuIFRoYW5rcyB0byBDaHJpc3RpYW4gUC4gTW9tb24uCm8gTEFORy0xMTE2OiBEYXRlVXRpbHNUZXN0LnRlc3RMYW5nNTMwIGZhaWxzIGZvciBzb21lIHRpbWV6b25lcy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBBYXJvbiBTaGVsZG9uLgpvIExBTkctMTExNDogVHlwZVV0aWxzLlBhcmFtZXRlcml6ZWRUeXBlI2VxdWFscyBkb2Vzbid0IHdvcmsgd2l0aCB3aWxkY2FyZAogICAgICAgICAgICAgdHlwZXMuIFRoYW5rcyB0byBBbmR5IENvYXRlcy4KbyBMQU5HLTExMTg6IFN0cmluZ1V0aWxzLnJlcGVhdCgneicsIC0xKSB0aHJvd3MgTmVnYXRpdmVBcnJheVNpemVFeGNlcHRpb24uCiAgICAgICAgICAgICBUaGFua3MgdG8gTG9pYyBHdWliZXJ0LgpvIExBTkctMTExMTogRml4IEZpbmRCdWdzIHdhcm5pbmdzIGluIER1cmF0aW9uRm9ybWF0VXRpbHMuCm8gTEFORy0xMTYyOiBTdHJpbmdVdGlscyNlcXVhbHMgZmFpbHMgd2l0aCBJbmRleCBPT0JFIG9uIG5vbi1TdHJpbmdzIHdpdGgKICAgICAgICAgICAgIGlkZW50aWNhbCBsZWFkaW5nIHByZWZpeC4uCm8gTEFORy0xMTYzOiBUaGVyZSBhcmUgbm8gdGVzdHMgZm9yIENoYXJTZXF1ZW5jZVV0aWxzLnJlZ2lvbk1hdGNoZXMuCm8gTEFORy0xMjAwOiBGaXggSmF2YWRvYyBvZiBTdHJpbmdVdGlscy5vcmRpbmFsSW5kZXhPZi4gVGhhbmtzIHRvIEJhcmtaaGFuZy4KbyBMQU5HLTExOTE6IEluY29ycmVjdCBKYXZhZG9jCiAgICAgICAgICAgICBTdHJpbmdVdGlscy5jb250YWluc0FueShDaGFyU2VxdWVuY2UsIENoYXJTZXF1ZW5jZS4uLikuIFRoYW5rcyB0bwogICAgICAgICAgICAgcWVkLCBCcmVudCBXb3JkZW4gYW5kIEdhcnkgR3JlZ29yeS4KCkNIQU5HRVMKPT09PT09PT09Cm8gTEFORy0xMTk3OiBQcmVwYXJlIEphdmEgOSBkZXRlY3Rpb24uCm8gTEFORy0xMjYyOiBDb21wYXJlVG9CdWlsZGVyLmFwcGVuZChPYmplY3QsIE9iamVjdCwgQ29tcGFyYXRvcikgbWV0aG9kIGlzIHRvbwogICAgICAgICAgICAgYmlnIHRvIGJlIGlubGluZWQuIFRoYW5rcyB0byBSdXNsYW4gQ2hlcmVtaW4uCm8gTEFORy0xMjU5OiBKYXZhZG9jIGZvciBBcnJheVV0aWxzLmlzTm90RW1wdHkoKSBpcyBzbGlnaHRseSBtaXNsZWFkaW5nLiBUaGFua3MKICAgICAgICAgICAgIHRvIERvbWluaWsgU3RhZGxlci4KbyBMQU5HLTEyNDc6IEZhc3REYXRlUHJpbnRlciBnZW5lcmF0ZXMgZXh0cmEgRGF0ZSBvYmplY3RzLiBUaGFua3MgdG8KICAgICAgICAgICAgIEJlbm9pdCBXaWFydC4KbyBMQU5HLTEyMjk6IEhhc2hDb2RlQnVpbGRlci5hcHBlbmQoT2JqZWN0LE9iamVjdCkgaXMgdG9vIGJpZyB0byBiZSBpbmxpbmVkLAogICAgICAgICAgICAgd2hpY2ggcHJldmVudHMgd2hvbGUgYnVpbGRlciB0byBiZSBzY2FsYXJpemVkLiBUaGFua3MgdG8KICAgICAgICAgICAgIFJ1c2xhbiBDaGVyZW1pbi4KbyBMQU5HLTEyNDM6IFNpbXBsaWZ5IEFycmF5VXRpbHMgcmVtb3ZlRWxlbWVudHMgYnkgdXNpbmcgbmV3IGRlY3JlbWVudEFuZEdldCgpCiAgICAgICAgICAgICBtZXRob2QuCm8gTEFORy0xMjQwOiBPcHRpbWl6ZSBCaXRGaWVsZCBjb25zdHJ1Y3RvciBpbXBsZW1lbnRhdGlvbi4gVGhhbmtzIHRvIHpoYW5oYi4KbyBMQU5HLTEyMDY6IEltcHJvdmUgQ2hhclNldFV0aWxzLnNxdWVlemUoKSBwZXJmb3JtYW5jZS4gVGhhbmtzIHRvCiAgICAgICAgICAgICBNb2hhbW1lZCBBbGZhbGxhai4KbyBMQU5HLTExNzY6IEltcHJvdmUgQXJyYXlVdGlscyByZW1vdmVFbGVtZW50cyB0aW1lIGNvbXBsZXhpdHkgdG8gTyhuKS4gVGhhbmtzCiAgICAgICAgICAgICB0byBKZWZmZXJ5IFl1YW4uCm8gTEFORy0xMjM0OiBnZXRMZXZlbnNodGVpbkRpc3RhbmNlIHdpdGggYSB0aHJlc2hvbGQ6IG9wdGltaXplIGltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBpZiB0aGUgc3RyaW5ncyBsZW5ndGhzIGRpZmZlciBtb3JlIHRoYW4gdGhlIHRocmVzaG9sZC4gVGhhbmtzIHRvCiAgICAgICAgICAgICBKb25hdGFuIEr2bnNzb24uCm8gTEFORy0xMTUxOiBQZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgZm9yIE51bWJlclV0aWxzLmlzUGFyc2FibGUuIFRoYW5rcyB0bwogICAgICAgICAgICAgSnVhbiBQYWJsbyBTYW50b3MgUm9kcu1ndWV6LgpvIExBTkctMTIxODogRXF1YWxzQnVpbGRlci5hcHBlbmQoT2JqZWN0LE9iamVjdCkgaXMgdG9vIGJpZyB0byBiZSBpbmxpbmVkLAogICAgICAgICAgICAgd2hpY2ggcHJldmVudHMgd2hvbGUgYnVpbGRlciB0byBiZSBzY2FsYXJpemVkLiBUaGFua3MgdG8KICAgICAgICAgICAgIFJ1c2xhbiBDaGVyZW1pbi4KbyBMQU5HLTEyMTA6IFN0cmluZ1V0aWxzI3N0YXJ0c1dpdGhBbnkgaGFzIGVycm9yIGluIEphdmFkb2MuIFRoYW5rcyB0bwogICAgICAgICAgICAgTWF0dGhpYXMgTmllaG9mZi4KbyBMQU5HLTEyMDg6IFN0clN1YnN0aXR1dG9yIGNhbiBwcmVzZXJ2ZSBlc2NhcGVzLiBUaGFua3MgdG8gU2FtdWVsIEthcnAuCm8gTEFORy0xMTgyOiBDbGFyaWZ5IEphdmFkb2Mgb2YgU3RyaW5nVXRpbHMuY29udGFpbnNBbnkoKS4gVGhhbmtzIHRvCiAgICAgICAgICAgICBMYXJyeSBXZXN0IGFuZCBQYXNjYWwgU2NodW1hY2hlci4KbyBMQU5HLTExODM6IE1ha2luZyByZXBsYWNlUGF0dGVybi9yZW1vdmVQYXR0ZXJuIG1ldGhvZHMgbnVsbCBzYWZlIGluCiAgICAgICAgICAgICBTdHJpbmdVdGlscy4KbyBMQU5HLTEwNTc6IFJlcGxhY2UgU3RyaW5nQnVpbGRlciB3aXRoIFN0cmluZyBjb25jYXRlbmF0aW9uIGZvciBiZXR0ZXIKICAgICAgICAgICAgIG9wdGltaXphdGlvbi4gVGhhbmtzIHRvIE904XZpbyBTYW50YW5hLgpvIExBTkctMTA3NTogRGVwcmVjYXRlIFN5c3RlbVV0aWxzLkZJTEVfU0VQQVJBVE9SIGFuZAogICAgICAgICAgICAgU3lzdGVtVXRpbHMuUEFUSF9TRVBBUkFUT1IuCm8gTEFORy05Nzk6ICBUeXBlVXRpbHMucGFyYW1ldGVyaXplV2l0aE93bmVyIC0gd3JvbmcgZm9ybWF0IGRlc2NyaXB0b3IgZm9yCiAgICAgICAgICAgICAiaW52YWxpZCBudW1iZXIgb2YgdHlwZSBwYXJhbWV0ZXJzIi4gVGhhbmtzIHRvIEJydW5vIFAuIEtpbm9zaGl0YS4KbyBMQU5HLTExMTI6IE11bHRpbGluZVJlY3Vyc2l2ZVRvU3RyaW5nU3R5bGUgbGFyZ2VseSB1bnVzYWJsZSBkdWUgdG8gYmVpbmcKICAgICAgICAgICAgIHBhY2thZ2UtcHJpdmF0ZS4KbyBMQU5HLTEwNTg6IFN0cmluZ1V0aWxzLnVuY2FwaXRhbGl6ZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4gVGhhbmtzIHRvCiAgICAgICAgICAgICBMZW8gV2FuZy4KbyBMQU5HLTEwNjk6IENoYXJTZXQuZ2V0SW5zdGFuY2UgZG9jdW1lbnRhdGlvbiBkb2VzIG5vdCBjbGVhcmx5IGV4cGxhaW4gaG93CiAgICAgICAgICAgICB0byBpbmNsdWRlIG5lZ2F0aW9uIGNoYXJhY3RlciBpbiBzZXQuIFRoYW5rcyB0byBBcm5vIE5vb3Jkb3Zlci4KbyBMQU5HLTExMDc6IEZpeCBwYXJzaW5nIGVkZ2UgY2FzZXMgaW4gRmFzdERhdGVQYXJzZXIuCm8gTEFORy0xMjczOiBBZGRlZCBuZXcgcHJvcGVydHkgSVNfT1NfTUFDX09TWF9FTF9DQVBJVEFOIGluIFN5c3RlbVV0aWxzLiBUaGFua3MKICAgICAgICAgICAgIHRvIEpha2UgV2FuZy4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzIGZvciB2ZXJzaW9uIDMuNAoKCkNPTVBBVElCSUxJVFkKPT09PT09PT09PT09PQoKQ29tbW9ucyBMYW5nIDMuNCBpcyBmdWxseSBiaW5hcnkgY29tcGF0aWJsZSB0byB0aGUgbGFzdCByZWxlYXNlIGFuZCBjYW4KdGhlcmVmb3JlIGJlIHVzZWQgYXMgYSBkcm9wIGluIHJlcGxhY2VtZW50IGZvciAzLjMuMi4gTm90ZSB0aGF0IHRoZSB2YWx1ZSBvZgpvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMudGltZS5EdXJhdGlvbkZvcm1hdFV0aWxzLklTT19FWFRFTkRFRF9GT1JNQVRfUEFUVEVSTgpoYXMgY2hhbmdlZCwgd2hpY2ggbWF5IGFmZmVjdCBjbGllbnRzIHVzaW5nIHRoZSBjb25zdGFudC4gRnVydGhlcm1vcmUgdGhlCmNvbnN0YW50IGlzIHVzZWQgaW50ZXJuYWxseSBpbgpvIER1cmF0aW9uRm9ybWF0VXRpbHMuZm9ybWF0RHVyYXRpb25JU08obG9uZykKbyBEdXJhdGlvbkZvcm1hdFV0aWxzLmZvcm1hdFBlcmlvZElTTyhsb25nLCBsb25nKQoKRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvTEFORy0xMDAwLgoKTkVXIEZFQVRVUkVTCj09PT09PT09PT09PT09CgpvIExBTkctODIxOiAgU3VwcG9ydCBPUyBYIHZlcnNpb25zIGluIFN5c3RlbVV0aWxzLiBUaGFua3MgdG8gVGltbyBLb2NrZXJ0LgpvIExBTkctMTEwMzogQWRkIFN5c3RlbVV0aWxzLklTX0pBVkFfMV85Cm8gTEFORy0xMDkzOiBBZGQgQ2xhc3NVdGlscy5nZXRBYmJyZXZpYXRlZE5hbWUoKS4gVGhhbmtzIHRvIEZhYmlhbiBMYW5nZS4KbyBMQU5HLTEwODI6IEFkZCBvcHRpb24gdG8gZGlzYWJsZSB0aGUgIm9iamVjdHNUcml2aWFsbHlFcXVhbCIgdGVzdCBpbgogICAgICAgICAgICAgRGlmZkJ1aWxkZXIuIFRoYW5rcyB0byBKb25hdGhhbiBCYWtlci4KbyBMQU5HLTEwMTU6IEFkZCBKc29uVG9TdHJpbmdTdHlsZSBpbXBsZW1lbnRhdGlvbiB0byBUb1N0cmluZ1N0eWxlLiBUaGFua3MgdG8KICAgICAgICAgICAgIFRoaWFnbyBBbmRyYWRlLgpvIExBTkctMTA4MDogQWRkIE5vQ2xhc3NOYW1lVG9TdHJpbmdTdHlsZSBpbXBsZW1lbnRhdGlvbiBvZiBUb1N0cmluZ1N0eWxlLgogICAgICAgICAgICAgVGhhbmtzIHRvIElubm9rZW50eSBTaHV2YWxvdi4KbyBMQU5HLTg4MzogIEFkZCBTdHJpbmdVdGlscy5jb250YWluc0FueShDaGFyU2VxdWVuY2UsIENoYXJTZXF1ZW5jZS4uLikgbWV0aG9kLgogICAgICAgICAgICAgVGhhbmtzIHRvIERhbmllbCBTdGV3YXJ0LgpvIExBTkctMTA1MjogTXVsdGlsaW5lIHJlY3Vyc2l2ZSB0byBzdHJpbmcgc3R5bGUuIFRoYW5rcyB0byBKYW4gTWF06HJuZS4KbyBMQU5HLTUzNjogIEFkZCBpc1NvcnRlZCgpIHRvIEFycmF5VXRpbHMuIFRoYW5rcyB0byBKYW1lcyBTYXdsZS4KbyBMQU5HLTEwMzM6IEFkZCBTdHJpbmdVdGlscy5jb3VudE1hdGNoZXMoQ2hhclNlcXVlbmNlLCBjaGFyKQpvIExBTkctMTAyMTogUHJvdmlkZSBtZXRob2RzIHRvIHJldHJpZXZlIGFsbCBmaWVsZHMvbWV0aG9kcyBhbm5vdGF0ZWQgd2l0aCBhCiAgICAgICAgICAgICBzcGVjaWZpYyB0eXBlLiBUaGFua3MgdG8gQWxleGFuZGVyIE38bGxlci4KbyBMQU5HLTEwMTY6IE51bWJlclV0aWxzI2lzUGFyc2FibGUgbWV0aG9kKHMpLiBUaGFua3MgdG8KICAgICAgICAgICAgIEp1YW4gUGFibG8gU2FudG9zIFJvZHLtZ3Vlei4KbyBMQU5HLTk5OTogIEFkZCBmdXp6eSBTdHJpbmcgbWF0Y2hpbmcgbG9naWMgdG8gU3RyaW5nVXRpbHMuIFRoYW5rcyB0bwogICAgICAgICAgICAgQmVuIFJpcGtlbnMuCm8gTEFORy05OTQ6ICBBZGQgemVybyBjb3B5IHJlYWQgbWV0aG9kIHRvIFN0ckJ1aWxkZXIuIFRoYW5rcyB0bwogICAgICAgICAgICAgTWlraGFpbCBNYXp1cnNreS4KbyBMQU5HLTk5MzogIEFkZCB6ZXJvIGNvcHkgd3JpdGUgbWV0aG9kIHRvIFN0ckJ1aWxkZXIuIFRoYW5rcyB0bwogICAgICAgICAgICAgTWlraGFpbCBNYXp1cnNreS4KbyBMQU5HLTEwNDQ6IEFkZCBtZXRob2QgTWV0aG9kVXRpbHMuaW52b2tlRXhhY3RNZXRob2QoT2JqZWN0LCBTdHJpbmcpCm8gTEFORy0xMDQ1OiBBZGQgbWV0aG9kIE1ldGhvZFV0aWxzLmludm9rZU1ldGhvZChPYmplY3QsIFN0cmluZykKCkZJWEVEIEJVR1MKPT09PT09PT09PT09CgpvIExBTkctNzk0OiAgU3lzdGVtVXRpbHMuSVNfT1NfV0lORE9XU18yMDA4LCBWSVNUQSBhcmUgaW5jb3JyZWN0LiBUaGFua3MgdG8KICAgICAgICAgICAgIFRpbW8gS29ja2VydC4KbyBMQU5HLTExMDQ6IFBhcnNlIHRlc3QgZmFpbHMgZm9yIFRpbWVab25lIEFtZXJpY2EvU2FvX1BhdWxvCm8gTEFORy05NDg6ICBFeGNlcHRpb24gd2hpbGUgdXNpbmcgRXh0ZW5kZWRNZXNzYWdlRm9ybWF0IGFuZCBlc2NhcGluZyBicmFjZXMuCiAgICAgICAgICAgICBUaGFua3MgdG8gQW5kcmV5IEtob2JueWEuCm8gTEFORy0xMDkyOiBXcm9uZyBmb3JtYXRpbmcgb2YgdGltZSB6b25lcyB3aXRoIGRheWxpZ2h0IHNhdmluZyB0aW1lIGluCiAgICAgICAgICAgICBGYXN0RGF0ZVByaW50ZXIKbyBMQU5HLTEwOTA6IEZhc3REYXRlUGFyc2VyIGRvZXMgbm90IHNldCBlcnJvciBpbmRpY2F0aW9uIGluIFBhcnNlUG9zaXRpb24KbyBMQU5HLTEwODk6IEZhc3REYXRlUGFyc2VyIGRvZXMgbm90IGhhbmRsZSBleGNlc3MgaG91cnMgYXMgcGVyCiAgICAgICAgICAgICBTaW1wbGVEYXRlRm9ybWF0Cm8gTEFORy0xMDYxOiBGYXN0RGF0ZVBhcnNlciBlcnJvciAtIHRpbWV6b25lcyBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIFRoYW5rcyB0bwogICAgICAgICAgICAgZG1lbmVzZXMuCm8gTEFORy0xMDg3OiBOdW1iZXJVdGlscyNjcmVhdGVOdW1iZXIoKSByZXR1cm5zIHBvc2l0aXZlIEJpZ0RlY2ltYWwgd2hlbgogICAgICAgICAgICAgbmVnYXRpdmUgRmxvYXQgaXMgZXhwZWN0ZWQuIFRoYW5rcyB0byBSZW5hdCBaaGlsa2liYWV2LgpvIExBTkctMTA4MTogRGlmZkJ1aWxkZXIuYXBwZW5kKFN0cmluZywgT2JqZWN0IGxlZnQsIE9iamVjdCByaWdodCkgZG9lcyBub3QgZG8KICAgICAgICAgICAgIGEgbGVmdC5lcXVhbHMocmlnaHQpIGNoZWNrLiBUaGFua3MgdG8gSm9uYXRoYW4gQmFrZXIuCm8gTEFORy0xMDU1OiBTdHJTdWJzdGl0dXRvci5yZXBsYWNlU3lzdGVtUHJvcGVydGllcyBkb2VzIG5vdCB3b3JrIGNvbnNpc3RlbnRseS4KICAgICAgICAgICAgIFRoYW5rcyB0byBKb25hdGhhbiBCYWtlci4KbyBMQU5HLTEwODM6IEFkZCAoVCkgY2FzdHMgdG8gZ2V0IHVuaXQgdGVzdHMgdG8gcGFzcyBpbiBvbGQgSkRLLiBUaGFua3MgdG8KICAgICAgICAgICAgIEpvbmF0aGFuIEJha2VyLgpvIExBTkctMTA3MzogUmVhZCB3cm9uZyBjb21wb25lbnQgdHlwZSBvZiBhcnJheSBpbiBhZGQgaW4gQXJyYXlVdGlscy4KICAgICAgICAgICAgIFRoYW5rcyB0byBoYWl5YW5nIGxpLgpvIExBTkctMTA3NzogU3RyaW5nVXRpbHMub3JkaW5hbEluZGV4T2YoImFhYWFhYSIsICJhYSIsIDIpICE9IDMgaW4gU3RyaW5nVXRpbHMuCiAgICAgICAgICAgICBUaGFua3MgdG8gaGFpeWFuZyBsaS4KbyBMQU5HLTEwNzI6IER1cGxpY2F0ZWQgIjB4IiBjaGVjayBpbiBjcmVhdGVCaWdJbnRlZ2VyIGluIE51bWJlclV0aWxzLiBUaGFua3MKICAgICAgICAgICAgIHRvIGhhaXlhbmcgbGkuCm8gTEFORy0xMDY0OiBTdHJpbmdVdGlscy5hYmJyZXZpYXRlIGRlc2NyaXB0aW9uIGRvZXNuJ3QgYWdyZWUgd2l0aCB0aGUKICAgICAgICAgICAgIGV4YW1wbGVzLiBUaGFua3MgdG8gQi5KLiBIZXJiaXNvbi4KbyBMQU5HLTEwNDE6IEZpeCBNZXRob2RVdGlsc1Rlc3Qgc28gaXQgZG9lcyBub3QgZGVwZW5kIG9uIEpESyBtZXRob2Qgb3JkZXJpbmcuCiAgICAgICAgICAgICBUaGFua3MgdG8gQWxleGFuZHJlIEJhcnRlbC4KbyBMQU5HLTEwMDA6IFBhcnNlRXhjZXB0aW9uIHdoZW4gdHJ5aW5nIHRvIHBhcnNlIFVUQyBkYXRlcyB3aXRoIFogYXMgem9uZQogICAgICAgICAgICAgZGVzaWduYXRvciB1c2luZyBEYXRlRm9ybWF0VXRpbHMuSVNPX0RBVEVUSU1FX1RJTUVfWk9ORV9GT1JNQVQKbyBMQU5HLTEwMzU6IEphdmFkb2MgZm9yIEVxdWFsc0J1aWxkZXIucmVmbGVjdGlvbkVxdWFscygpIGlzIHVuY2xlYXIKbyBMQU5HLTEwMDE6IElTTyA4NjAxIG1pc3NwZWxsZWQgdGhyb3VnaG91dCB0aGUgSmF2YWRvY3MuIFRoYW5rcyB0bwogICAgICAgICAgICAgTWljaGFlbCBPc2lwb3YuCm8gTEFORy0xMDg4OiBGYXN0RGF0ZVBhcnNlciBzaG91bGQgYmUgY2FzZSBpbnNlbnNpdGl2ZQpvIExBTkctOTk1OiAgRml4IGJ1ZyB3aXRoIHN0cmlwcGluZyBzcGFjZXMgb24gbGFzdCBsaW5lIGluIFdvcmRVdGlscy53cmFwKCkuCiAgICAgICAgICAgICBUaGFua3MgdG8gQW5kcmV5IEtob2JueWEuCgpDSEFOR0VTCj09PT09PT09PQoKbyBMQU5HLTExMDI6IE1ha2UgbG9naWMgZm9yIGNvbXBhcmluZyBPUyB2ZXJzaW9ucyBpbiBTeXN0ZW1VdGlscyBzbWFydGVyCm8gTEFORy0xMDkxOiBTaHV0ZG93biB0aHJlYWQgcG9vbHMgaW4gdGVzdCBjYXNlcy4gVGhhbmtzIHRvIEZhYmlhbiBMYW5nZS4KbyBMQU5HLTExMDE6IEZhc3REYXRlUGFyc2VyIGFuZCBGYXN0RGF0ZVByaW50ZXIgc3VwcG9ydCAnWCcgZm9ybWF0Cm8gTEFORy0xMTAwOiBBdm9pZCBtZW1vcnkgYWxsb2NhdGlvbiB3aGVuIHVzaW5nIGRhdGUgZm9ybWF0aW5nIHRvIFN0cmluZ0J1ZmZlci4KICAgICAgICAgICAgIFRoYW5rcyB0byBtYnJhY2hlci4KbyBMQU5HLTkzNTogIFBvc3NpYmxlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG9uIHN0cmluZyBlc2NhcGUgZnVuY3Rpb25zLgogICAgICAgICAgICAgVGhhbmtzIHRvIEZhYmlhbiBMYW5nZSwgVGhvbWFzIE5laWRoYXJ0LgpvIExBTkctMTA5ODogQXZvaWQgU3RyaW5nIGFsbG9jYXRpb24gaW4gU3RyQnVpbGRlci5hcHBlbmQoQ2hhclNlcXVlbmNlKS4gVGhhbmtzCiAgICAgICAgICAgICB0byBNaWtoYWlsIE1henVyc2tpeSwgRmFiaWFuIExhbmdlLgpvIExBTkctMTA5ODogVXBkYXRlIG1hdmVuLWNoZWNrc3R5bGUtcGx1Z2luIHRvIDIuMTQuIFRoYW5rcyB0byBNaWNoYT8gS29yZGFzLgpvIExBTkctMTA5NzogVXBkYXRlIG9yZy5lYXN5bW9jazplYXN5bW9jayB0byAzLjMuMS4gVGhhbmtzIHRvIE1pY2hhPyBLb3JkYXMuCm8gTEFORy0xMDk2OiBVcGRhdGUgbWF2ZW4tcG1kLXBsdWdpbiB0byAzLjQuIFRoYW5rcyB0byBNaWNoYT8gS29yZGFzLgpvIExBTkctMTA5NTogVXBkYXRlIG1hdmVuLWFudHJ1bi1wbHVnaW4gdG8gMS44LiBUaGFua3MgdG8gTWljaGE/IEtvcmRhcy4KbyBMQU5HLTg3NzogIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBmb3IgU3RyaW5nRXNjYXBlVXRpbHMuIFRoYW5rcyB0bwogICAgICAgICAgICAgRmFiaWFuIExhbmdlLgpvIExBTkctMTA3MTogRml4IHdyb25nIGV4YW1wbGVzIGluIEphdmFkb2Mgb2YKICAgICAgICAgICAgIFN0cmluZ1V0aWxzLnJlcGxhY2VFYWNoUmVwZWF0ZWRseSguLi4pLAogICAgICAgICAgICAgU3RyaW5nVXRpbHMucmVwbGFjZUVhY2goLi4uKSBUaGFua3MgdG8gQXJubyBOb29yZG92ZXIuCm8gTEFORy04Mjc6ICBDb21wYXJlVG9CdWlsZGVyJ3MgZG9jIGRvZXNuJ3Qgc3BlY2lmeSBwcmVjZWRlbmNlIG9mIGZpZWxkcyBpdAogICAgICAgICAgICAgdXNlcyBpbiBwZXJmb3JtaW5nIGNvbXBhcmlzb25zCm8gTEFORy0xMDIwOiBJbXByb3ZlIHBlcmZvcm1hbmNlIG9mIG5vcm1hbGl6ZSBzcGFjZS4gVGhhbmtzIHRvIExpYm9yIE9uZHJ1c2VrLgpvIExBTkctMTAyNzogb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN5c3RlbVV0aWxzI2lzSmF2YVZlcnNpb25BdExlYXN0IHNob3VsZAogICAgICAgICAgICAgcmV0dXJuIHRydWUgYnkgZGVmYXVsdApvIExBTkctMTAyNjogQnJpbmcgc3RhdGljIG1ldGhvZCByZWZlcmVuY2VzIGluIFN0cmluZ1V0aWxzIHRvIGNvbnNpc3RlbnQgc3R5bGUuCiAgICAgICAgICAgICBUaGFua3MgdG8gQWxleCBZdXJzaGEuCm8gTEFORy0xMDE3OiBVc2Ugbm9uLUFTQ0lJIGRpZ2l0cyBpbiBKYXZhZG9jIGV4YW1wbGVzIGZvcgogICAgICAgICAgICAgU3RyaW5nVXRpbHMuaXNOdW1lcmljLiBUaGFua3MgdG8gQ2hyaXN0b3BoIFNjaG5lZWdhbnMuCm8gTEFORy0xMDA4OiBDaGFuZ2UgbWluL21heCBtZXRob2RzIGluIE51bWJlclV0aWxzL0lFRUU3NTRyVXRpbHMgZnJvbSBhcnJheQogICAgICAgICAgICAgaW5wdXQgcGFyYW1ldGVycyB0byB2YXJhcmdzLiBUaGFua3MgdG8gVGhpYWdvIEFuZHJhZGUuCm8gTEFORy0xMDA2OiBBZGQgd3JhcCAod2l0aCBTdHJpbmcgb3IgY2hhcikgdG8gU3RyaW5nVXRpbHMuIFRoYW5rcyB0bwogICAgICAgICAgICAgVGhpYWdvIEFuZHJhZGUuCm8gTEFORy0xMDA1OiBFeHRlbmQgRHVyYXRpb25Gb3JtYXRVdGlscyNmb3JtYXREdXJhdGlvbklTTyBkZWZhdWx0IHBhdHRlcm4gdG8KICAgICAgICAgICAgIG1hdGNoICNmb3JtYXREdXJhdGlvbkhNUy4gVGhhbmtzIHRvIE1pY2hhZWwgT3NpcG92LgpvIExBTkctMTAwNzogRml4aW5nIE51bWJlclV0aWxzIEpBVkFEb2MgY29tbWVudHMgZm9yIG1heCBtZXRob2RzLiBUaGFua3MgdG8KICAgICAgICAgICAgIFRoaWFnbyBBbmRyYWRlLgpvIExBTkctNzMxOiAgQmV0dGVyIEphdmFkb2MgZm9yIEJpdEZpZWxkIGNsYXNzCm8gTEFORy0xMDA0OiBEdXJhdGlvbkZvcm1hdFV0aWxzI2Zvcm1hdER1cmF0aW9uSE1TIGltcGxlbWVudGF0aW9uIGRvZXMgbm90CiAgICAgICAgICAgICBjb3JyZXNwb25kIHRvIEphdmFkb2MgYW5kIHZpY2UgdmVyc2EuIFRoYW5rcyB0byBNaWNoYWVsIE9zaXBvdi4KbyBMQU5HLTEwMDM6IER1cmF0aW9uRm9ybWF0VXRpbHMgYXJlIG5vdCBhYmxlIHRvIGhhbmRsZSBuZWdhdGl2ZQogICAgICAgICAgICAgZHVyYXRpb25zL3BlcmlvZHMKbyBMQU5HLTk5ODogIEphdmFkb2MgaXMgbm90IGNsZWFyIG9uIHByZWZlcnJlZCBwYXR0ZXJuIHRvIGluc3RhbnRpYXRlCiAgICAgICAgICAgICBGYXN0RGF0ZVBhcnNlciAvIEZhc3REYXRlUHJpbnRlcgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMy4zLjIKCk5FVyBGRUFUVVJFUwo9PT09PT09PT09PT09PQoKbyBMQU5HLTk4OTogIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3lzdGVtVXRpbHMuSVNfSkFWQV8xXzgKCkZJWEVEIEJVR1MKPT09PT09PT09PT09CgpvIExBTkctOTkyOiAgTnVtYmVyVXRpbHMjaXNOdW1iZXIoKSByZXR1cm5zIGZhbHNlIGZvciAiMC4wIiwgIjAuNDc5MCIsIGV0IGFsCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAzLjMuMQoKRklYRUQgQlVHUwo9PT09PT09PT09PT0KCm8gTEFORy05ODc6ICBEYXRlVXRpbHMuZ2V0RnJhZ21lbnRJbkRheXMoRGF0ZSwgQ2FsZW5kYXIuTU9OVEgpIHJldHVybnMgd3JvbmcKICAgICAgICAgICAgIGRheXMKbyBMQU5HLTk4MzogIER1cmF0aW9uRm9ybWF0VXRpbHMgZG9lcyBub3QgZGVzY3JpYmUgZm9ybWF0IHN0cmluZyBmdWxseQpvIExBTkctOTgxOiAgRHVyYXRpb25Gb3JtYXRVdGlscyNsZXh4IGRvZXMgbm90IGRldGVjdCB1bm1hdGNoZWQgcXVvdGUgY2hhcgpvIExBTkctOTg0OiAgRHVyYXRpb25Gb3JtYXRVdGlscyBkb2VzIG5vdCBoYW5kbGUgbGFyZ2UgZHVyYXRpb25zIGNvcnJlY3RseQpvIExBTkctOTgyOiAgRHVyYXRpb25Gb3JtYXRVdGlscy5mb3JtYXREdXJhdGlvbig2MTk5OSwgInMuU1NTUyIpIC0gbXMgZmllbGQKICAgICAgICAgICAgIHNpemUgc2hvdWxkIGJlIDQgZGlnaXRzCm8gTEFORy05Nzg6ICBGYWlsaW5nIHRlc3RzIHdpdGggSmF2YSA4IGIxMjgKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzIGZvciB2ZXJzaW9uIDMuMwoKTkVXIEZFQVRVUkVTCj09PT09PT09PT09PT09CgpvIExBTkctOTU1OiAgQWRkIG1ldGhvZHMgZm9yIHJlbW92aW5nIGFsbCBpbnZhbGlkIGNoYXJhY3RlcnMgYWNjb3JkaW5nIHRvCiAgICAgICAgICAgICBYTUwgMS4wIGFuZCBYTUwgMS4xIGluIGFuIGlucHV0IHN0cmluZyB0byBTdHJpbmdFc2NhcGVVdGlscy4KICAgICAgICAgICAgIFRoYW5rcyB0byBBZGFtIEhvb3Blci4KbyBMQU5HLTk3MDogIEFkZCBBUElzIE11dGFibGVCb29sZWFuIHNldFRydWUoKSBhbmQgc2V0RmFsc2UoKQpvIExBTkctOTYyOiAgQWRkIFNlcmlhbGl6YXRpb25VdGlscy5yb3VuZHRyaXAoVCBleHRlbmRzIFNlcmlhbGl6YWJsZSkgdG8KICAgICAgICAgICAgIHNlcmlhbGl6ZSB0aGVuIGRlc2VyaWFsaXplCm8gTEFORy02Mzc6ICBUaGVyZSBzaG91bGQgYmUgYSBEaWZmZXJlbmNlQnVpbGRlciB3aXRoIGEKICAgICAgICAgICAgIFJlZmxlY3Rpb25EaWZmZXJlbmNlQnVpbGRlciBpbXBsZW1lbnRhdGlvbgpvIExBTkctOTQ0OiAgQWRkIHRoZSBKYXJvLVdpbmtsZXIgc3RyaW5nIGRpc3RhbmNlIGFsZ29yaXRobSB0byBTdHJpbmdVdGlscy4KICAgICAgICAgICAgIFRoYW5rcyB0byBSZWtoYSBKb3NoaS4KbyBMQU5HLTQxNzogIE5ldyBjbGFzcyBDbGFzc1BhdGhVdGlscyB3aXRoIG1ldGhvZHMgZm9yIHR1cm5pbmcgRlFOIGludG8KICAgICAgICAgICAgIHJlc291cmNlIHBhdGgKbyBMQU5HLTgzNDogIFZhbGlkYXRlOiBhZGQgaW5jbHVzaXZlQmV0d2VlbiBhbmQgZXhjbHVzaXZlQmV0d2VlbiBvdmVybG9hZHMKICAgICAgICAgICAgIGZvciBwcmltaXRpdmUgdHlwZXMKbyBMQU5HLTkwMDogIE5ldyBSYW5kb21VdGlscyBjbGFzcy4gVGhhbmtzIHRvIER1bmNhbiBKb25lcy4KbyBMQU5HLTk2NjogIEFkZCBJQk0gT1MvNDAwIGRldGVjdGlvbgoKRklYRUQgQlVHUwo9PT09PT09PT09PT0KCm8gTEFORy02MjE6ICBSZWZsZWN0aW9uVG9TdHJpbmdCdWlsZGVyLnRvU3RyaW5nIGRvZXMgbm90IGRlYnVnIDNyZCBwYXJ0eSBvYmplY3QKICAgICAgICAgICAgIGZpZWxkcyB3aXRoaW4gM3JkIHBhcnR5IG9iamVjdC4gVGhhbmtzIHRvIFBoaWxpcCBIb2RnZXMsCiAgICAgICAgICAgICBUaG9tYXMgTmVpZGhhcnQuCm8gTEFORy05Nzc6ICBOdW1lcmljRW50aXR5RXNjYXBlciBpbmNvcnJlY3RseSBlbmNvZGVzIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycy4KICAgICAgICAgICAgIFRoYW5rcyB0byBDaHJpcyBLYXJjaGVyLgpvIExBTkctOTczOiAgTWFrZSBzb21lIHByaXZhdGUgZmllbGRzIGZpbmFsCm8gTEFORy05NzE6ICBOdW1iZXJVdGlscyNpc051bWJlcihTdHJpbmcpIGZhaWxzIHRvIHJlamVjdCBpbnZhbGlkIE9jdGFsIG51bWJlcnMKbyBMQU5HLTk3MjogIE51bWJlclV0aWxzI2lzTnVtYmVyIGRvZXMgbm90IGFsbG93IGZvciBoZXggMFhBQkNECm8gTEFORy05Njk6ICBTdHJpbmdVdGlscy50b0VuY29kZWRTdHJpbmcoYnl0ZVtdLCBDaGFyc2V0KSBuZWVkbGVzc2x5IHRocm93cwogICAgICAgICAgICAgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbi4gVGhhbmtzIHRvIE1hdHQgQmlzaG9wLgpvIExBTkctOTQ2OiAgQ29uc3RhbnRJbml0aWFsaXplclRlc3QgZmFpbHMgd2hlbiBidWlsZGluZyB3aXRoIElCTSBKREsgNwpvIExBTkctOTU0OiAgdW5jYXVnaHQgUGF0dGVyblN5bnRheEV4Y2VwdGlvbiBpbiBGYXN0RGF0ZUZvcm1hdCBvbiBBbmRyb2lkLgogICAgICAgICAgICAgVGhhbmtzIHRvIE1pY2hhZWwgS2VwcGxlci4KbyBMQU5HLTkzNjogIFN0cmluZ1V0aWxzLmdldExldmVuc2h0ZWluRGlzdGFuY2Ugd2l0aCB0b28gYmlnIG9mIGEgdGhyZXNob2xkCiAgICAgICAgICAgICByZXR1cm5zIHdyb25nIHJlc3VsdC4gVGhhbmtzIHRvIFlhbml2IEt1bmRhLCBFbGkgTGluZHNleS4KbyBMQU5HLTk0MzogIFRlc3QgRHVyYXRpb25Gb3JtYXRVdGlsc1Rlc3QudGVzdEVkZ2VEdXJhdGlvbiBmYWlscyBpbgogICAgICAgICAgICAgSkRLIDEuNiwgMS43IGFuZCAxLjgsIEJSU1QgdGltZSB6b25lCm8gTEFORy02MTM6ICBDb25zdHJ1Y3RvclV0aWxzLmdldEFjY2Vzc2libGVDb25zdHJ1Y3RvcigpIERvZXMgTm90IENoZWNrIHRoZQogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eSBvZiBFbmNsb3NpbmcgQ2xhc3NlcwpvIExBTkctOTUxOiAgRnJhZ21lbnRzIGFyZSB3cm9uZyBieSAxIGRheSB3aGVuIHVzaW5nIGZyYWdtZW50IFlFQVIgb3IgTU9OVEguCiAgICAgICAgICAgICBUaGFua3MgdG8gU2ViYXN0aWFuIEf2dHouCm8gTEFORy05NTA6ICBGYXN0RGF0ZVBhcnNlciBkb2VzIG5vdCBoYW5kbGUgdHdvIGRpZ2l0IHllYXIgcGFyc2luZyBsaWtlCiAgICAgICAgICAgICBTaW1wbGVEYXRlRm9ybWF0Cm8gTEFORy05NDk6ICBGYXN0RGF0ZVBhcnNlclRlc3QudGVzdFBhcnNlcyBkb2VzIG5vdCB0ZXN0IEZhc3REYXRlUGFyc2VyCm8gTEFORy05MTU6ICBXcm9uZyBsb2NhbGUgaGFuZGxpbmcgaW4gTG9jYWxlVXRpbHMudG9Mb2NhbGUoKS4KICAgICAgICAgICAgIFRoYW5rcyB0byBTZXJnaW8gRmVybuFuZGV6LgoKQ0hBTkdFUwo9PT09PT09PT0KCm8gTEFORy05NjE6ICBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMucmVmbGVjdC5GaWVsZFV0aWxzLnJlbW92ZUZpbmFsTW9kaWZpZXIoRmllbGQpCiAgICAgICAgICAgICBkb2VzIG5vdCBjbGVhbiB1cCBhZnRlciBpdHNlbGYKbyBMQU5HLTk1ODogIEZhc3REYXRlUGFyc2VyIGphdmFkb2MgaW5jb3JyZWN0bHkgc3RhdGVzIHRoYXQgU2ltcGxlRGF0ZUZvcm1hdAogICAgICAgICAgICAgaXMgdXNlZCBpbnRlcm5hbGx5Cm8gTEFORy05NTY6ICBJbXByb3ZlIEphdmFkb2Mgb2YgV29yZFV0aWxzLndyYXAgbWV0aG9kcwpvIExBTkctOTM5OiAgTW92ZSBEb2N1bWVudGF0aW9uIGZyb20gdXNlciBndWlkZSB0byBwYWNrYWdlLWluZm8gZmlsZXMKbyBMQU5HLTk1MzogIENvbnZlcnQgcGFja2FnZS5odG1sIGZpbGVzIHRvIHBhY2thZ2UtaW5mby5qYXZhIGZpbGVzCm8gTEFORy05NDA6ICBGaXggZGVwcmVjYXRpb24gd2FybmluZ3MKbyBMQU5HLTgxOTogIEVudW1VdGlscy5nZW5lcmF0ZUJpdFZlY3RvciBuZWVkcyBhICI/IGV4dGVuZHMiCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAzLjIuMQoKQlVHIEZJWEVTCj09PT09PT09PT09CgpvIExBTkctOTM3OiAgRml4IG1pc3NpbmcgSGFtY3Jlc3QgZGVwZW5kZW5jeSBpbiBBbnQgQnVpbGQKbyBMQU5HLTk0MTogIFRlc3QgZmFpbHVyZSBpbiBMb2NhbGVVdGlsc1Rlc3Qgd2hlbiBidWlsZGluZyB3aXRoIEpESyA4Cm8gTEFORy05NDI6ICBUZXN0IGZhaWx1cmUgaW4gRmFzdERhdGVQYXJzZXJUZXN0IGFuZCBGYXN0RGF0ZUZvcm1hdF9QYXJzZXJUZXN0CiAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIHdpdGggSkRLOC4gVGhhbmtzIHRvIEJydW5vIFAuIEtpbm9zaGl0YSwKICAgICAgICAgICAgIEhlbnJpIFlhbmRlbGwuCm8gTEFORy05Mzg6ICBCdWlsZCBmYWlscyB3aXRoIHRlc3QgZmFpbHVyZXMgd2hlbiBidWlsZGluZyB3aXRoIEpESyA4Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAzLjIKCkNPTVBBVElCSUxJVFkgV0lUSCAzLjEKPT09PT09PT09PT09PT09PT09PT09PT09CgpUaGlzIHJlbGVhc2UgaW50cm9kdWNlcyBiYWNrd2FyZHMgaW5jb21wYXRpYmxlIGNoYW5nZXMgaW4Kb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnRpbWUuRmFzdERhdGVGb3JtYXQ6Cm8gTWV0aG9kICdwcm90ZWN0ZWQgamF2YS51dGlsLkxpc3QgcGFyc2VQYXR0ZXJuKCknIGhhcyBiZWVuIHJlbW92ZWQKbyBNZXRob2QgJ3Byb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIHBhcnNlVG9rZW4oamF2YS5sYW5nLlN0cmluZywgaW50W10pJyBoYXMKICBiZWVuIHJlbW92ZWQKbyBNZXRob2QgJ3Byb3RlY3RlZCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMudGltZS5GYXN0RGF0ZUZvcm1hdCROdW1iZXJSdWxlCiAgc2VsZWN0TnVtYmVyUnVsZShpbnQsIGludCknIGhhcyBiZWVuIHJlbW92ZWQKClRoZXNlIGNoYW5nZXMgd2VyZSB0aGUgcmVzdWx0IG9mIFtMQU5HLTQ2Ml0uIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGlzIGNoYW5nZQp3aWxsIG5vdCBicmVhayBjbGllbnRzIGFzIENoYXJsZXMgSG9udG9uIHBvaW50ZWQgb3V0IG9uIDI1L0phbi8xMjoKIgogMS4gTWV0aG9kcyAiRmFzdERhdGVGb3JtYXQkTnVtYmVyUnVsZSBzZWxlY3ROdW1iZXJSdWxlKGludCwgaW50KSIgYW5kCiAgICAiTGlzdDxSdWxlPiBwYXJzZVBhdHRlcm4oKSIgY291bGRuJ3QgaGF2ZSBiZWVuIG92ZXJyaWRkZW4gYmVjYXVzZQogICAgTnVtYmVyUnVsZSBhbmQgUnVsZSB3ZXJlIHByaXZhdGUgdG8gRmFzdERhdGVGb3JtYXQuCiAyLiBEdWUgdG8gdGhlIGZhY3RvcnkgcGF0dGVybiB1c2VkLCBpdCdzIHVubGlrZWx5IG90aGVyIHR3byBtZXRob2RzIHdvdWxkIGhhdmUKICAgIGJlZW4gb3ZlcnJpZGRlbi4KIDMuIFRoZSBmb3VyIG1ldGhvZHMgYXJlIGhpZ2hseSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYy4gSSBjb25zaWRlciBpdCBhCiAgICBtaXN0YWtlIHRoYXQgdGhlIG1ldGhvZHMgd2VyZSBleHBvc2VkLgoiCkZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0xBTkctNDYyLgoKTkVXIEZFQVRVUkVTCj09PT09PT09PT09PT09CgpvIExBTkctOTM0OiAgQWRkIHJlbW92ZUZpbmFsTW9kaWZpZXIgdG8gRmllbGRVdGlscwpvIExBTkctODYzOiAgTWV0aG9kIHJldHVybnMgbnVtYmVyIG9mIGluaGVyaXRhbmNlIGhvcHMgYmV0d2VlbiBwYXJlbnQgYW5kCiAgICAgICAgICAgICBzdWJjbGFzcy4gVGhhbmtzIHRvIERhbmVlbCBTLiBZYWl0c2tvdi4KbyBMQU5HLTc3NDogIEFkZGVkIGlzU3RhcnRlZCwgaXNTdXNwZW5kZWQgYW5kIGlzU3RvcHBlZCB0byBTdG9wV2F0Y2guCiAgICAgICAgICAgICBUaGFua3MgdG8gRXJoYW4gQmFnZGVtaXIuCm8gTEFORy04NDg6ICBBZGRlZCBTdHJpbmdVdGlscy5pc0JsYW5rL2lzRW1wdHkgQ2hhclNlcXVlbmNlLi4uIG1ldGhvZHMuCiAgICAgICAgICAgICBUaGFua3MgdG8gQWxleGFuZGVyIE11dGhtYW5uLgpvIExBTkctOTI2OiAgQWRkZWQgQXJyYXlVdGlscy5yZXZlcnNlKGFycmF5LCBmcm9tLCB0bykgbWV0aG9kcy4KbyBMQU5HLTc5NTogIFN0cmluZ1V0aWxzLnRvU3RyaW5nKGJ5dGVbXSwgU3RyaW5nKSBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBhIG5ldwogICAgICAgICAgICAgU3RyaW5nVXRpbHMudG9TdHJpbmcoYnl0ZVtdLCBDaGFyU2V0KS4gVGhhbmtzIHRvIEFhcm9uIERpZ3VsbGEuCm8gTEFORy04OTM6ICBTdHJTdWJzdGl0dXRvciBub3cgc3VwcG9ydHMgZGVmYXVsdCB2YWx1ZXMgZm9yIHZhcmlhYmxlcy4KICAgICAgICAgICAgIFRoYW5rcyB0byBXb29uc2FuIEtvLgpvIExBTkctOTEzOiAgQWRkaW5nIC5naXRpZ25vcmUgdG8gY29tbW9ucy1sYW5nLiBUaGFua3MgdG8gQWxsb24gTXVyZWluaWsuCm8gTEFORy04Mzc6ICBBZGQgT2JqZWN0VXRpbHMudG9JZGVudGl0eVN0cmluZyBtZXRob2RzIHRoYXQgc3VwcG9ydAogICAgICAgICAgICAgU3RyaW5nQnVpbGRlciwgU3RyQnVpbGRlciwgYW5kIEFwcGVuZGFibGUuCm8gTEFORy04ODY6ICBBZGRlZCBDaGFyU2V0VXRpbHMuY29udGFpbnNBbnkoU3RyaW5nLCBTdHJpbmcpLgpvIExBTkctNzk3OiAgQWRkZWQgZXNjYXBlL3VuZXNjYXBlSnNvbiB0byBTdHJpbmdFc2NhcGVVdGlscy4KbyBMQU5HLTg3NTogIEFkZGVkIGFwcGVuZElmTWlzc2luZyBhbmQgcHJlcGVuZElmTWlzc2luZyBtZXRob2RzIHRvIFN0cmluZ1V0aWxzLgpvIExBTkctODcwOiAgQWRkIFN0cmluZ1V0aWxzLkxGIGFuZCBTdHJpbmdVdGlscy5DUiB2YWx1ZXMuCm8gTEFORy04NzM6ICBBZGQgRmllbGRVdGlscyBnZXRBbGxGaWVsZHMoKSB0byByZXR1cm4gYWxsIHRoZSBmaWVsZHMgZGVmaW5lZCBpbgogICAgICAgICAgICAgdGhlIGdpdmVuIGNsYXNzIGFuZCBzdXBlciBjbGFzc2VzLgpvIExBTkctODM1OiAgU3RyQnVpbGRlciBzaG91bGQgc3VwcG9ydCBTdHJpbmdCdWlsZGVyIGFzIGFuIGlucHV0IHBhcmFtZXRlci4KbyBMQU5HLTg1NzogIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaW4gQ2hhclNlcXVlbmNlVHJhbnNsYXRvci4KbyBMQU5HLTg1NjogIENvZGUgcmVmYWN0b3JpbmcgaW4gTnVtYmVyVXRpbHMuCm8gTEFORy04NTU6ICBOdW1iZXJVdGlscyNjcmVhdGVCaWdJbnRlZ2VyIGRvZXMgbm90IGFsbG93IGZvciBoZXggYW5kIG9jdGFsCiAgICAgICAgICAgICBudW1iZXJzLgpvIExBTkctODU0OiAgTnVtYmVyVXRpbHMjY3JlYXRlTnVtYmVyIC0gZG9lcyBub3QgYWxsb3cgZm9yIGhleCBudW1iZXJzIHRvIGJlCiAgICAgICAgICAgICBsYXJnZXIgdGhhbiBMb25nLgpvIExBTkctODUzOiAgU3RyaW5nVXRpbHMgam9pbiBBUElzIGZvciBwcmltaXRpdmVzLgpvIExBTkctODQxOiAgQWRkIFN0cmluZ1V0aWxzIEFQSSB0byBjYWxsIFN0cmluZy5yZXBsYWNlQWxsIGluIERPVEFMTCBhLmsuYS4KICAgICAgICAgICAgIHNpbmdsZS1saW5lIG1vZGUuCm8gTEFORy04MjU6ICBDcmVhdGUgU3RyQnVpbGRlciBBUElzIHNpbWlsYXIgdG8KICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoU3RyaW5nLCBPYmplY3QuLi4pLgpvIExBTkctNjc1OiAgQWRkIFRyaXBsZSBjbGFzcyAodGVybmFyeSB2ZXJzaW9uIG9mIFBhaXIpLgpvIExBTkctNDYyOiAgRmFzdERhdGVGb3JtYXQgc3VwcG9ydHMgcGFyc2UgbWV0aG9kcy4KCkJVRyBGSVhFUwo9PT09PT09PT09PQoKbyBMQU5HLTkzMjogIFNwZWxsaW5nIGZpeGVzLiBUaGFua3MgdG8gVmlsbGUgU2t5dHTkLgpvIExBTkctOTI5OiAgT2N0YWxVbmVzY2FwZXIgdHJpZWQgdG8gcGFyc2UgYWxsIG9mIFwyNzkuCm8gTEFORy05Mjg6ICBPY3RhbFVuZXNjYXBlciBoYWQgYnVncyB3aGVuIHBhcnNpbmcgb2N0YWxzIHN0YXJ0aW5nIHdpdGggYSB6ZXJvLgpvIExBTkctOTA1OiAgRXF1YWxzQnVpbGRlciByZXR1cm5lZCB0cnVlIHdoZW4gY29tcGFyaW5nIGFycmF5cywgZXZlbiB3aGVuIHRoZQogICAgICAgICAgICAgZWxlbWVudHMgYXJlIGRpZmZlcmVudC4KbyBMQU5HLTkxNzogIEZpeGVkIGV4Y2VwdGlvbiB3aGVuIGNvbWJpbmluZyBjdXN0b20gYW5kIGNob2ljZSBmb3JtYXQgaW4KICAgICAgICAgICAgIEV4dGVuZGVkTWVzc2FnZUZvcm1hdC4gVGhhbmtzIHRvIEFybmUgQnVybWVpc3Rlci4KbyBMQU5HLTkwMjogIFJhbmRvbVN0cmluZ1V0aWxzLnJhbmRvbSBqYXZhZG9jIHdhcyBpbmNvcnJlY3RseSBwcm9taXNpbmcgbGV0dGVycwogICAgICAgICAgICAgYW5kIG51bWJlcnMgd291bGQsIGFzIG9wcG9zZWQgdG8gbWF5LCBhcHBlYXIgIElzc3VlOi4gVGhhbmtzIHRvCiAgICAgICAgICAgICBBbmRyemVqIFdpbm5pY2tpLgpvIExBTkctOTIxOiAgQm9vbGVhblV0aWxzLnhvcihib29sZWFuLi4uKSBwcm9kdWNlcyB3cm9uZyByZXN1bHRzLgpvIExBTkctODk2OiAgQm9vbGVhblV0aWxzLnRvQm9vbGVhbihTdHJpbmcgc3RyKSBqYXZhZG9jIGlzIG5vdCB1cGRhdGVkLiBUaGFua3MKICAgICAgICAgICAgIHRvIE1hcmsgQnJ5YW4gWXUuCm8gTEFORy04Nzk6ICBMb2NhbGVVdGlscyB0ZXN0IGZhaWxzIHdpdGggbmV3IExvY2FsZSAiamFfSlBfSlBfI3UtY2EtamFwYW5lc2UiCiAgICAgICAgICAgICBvZiBKREs3LgpvIExBTkctODM2OiAgU3RyU3Vic3RpdHV0b3IgZG9lcyBub3Qgc3VwcG9ydCBTdHJpbmdCdWlsZGVyIG9yIENoYXJTZXF1ZW5jZS4KICAgICAgICAgICAgIFRoYW5rcyB0byBBcm5hdWQgQnJ1bmV0LgpvIExBTkctNjkzOiAgTWV0aG9kIGNyZWF0ZU51bWJlciBmcm9tIE51bWJlclV0aWxzIGRvZXNuJ3Qgd29yayBmb3IgZmxvYXRpbmcKICAgICAgICAgICAgIHBvaW50IG51bWJlcnMgb3RoZXIgdGhhbiBGbG9hdCAgSXNzdWU6IExBTkctNjkzLiBUaGFua3MgdG8KICAgICAgICAgICAgIENhbHZpbiBFY2hvbHMuCm8gTEFORy04ODc6ICBGYXN0RGF0ZUZvcm1hdCBkb2VzIG5vdCB1c2UgdGhlIGxvY2FsZSBzcGVjaWZpYyBjYWNoZSBjb3JyZWN0bHkuCm8gTEFORy03NTQ6ICBDbGFzc1V0aWxzLmdldFNob3J0TmFtZShTdHJpbmcpIHdpbGwgbm93IG9ubHkgZG8gYSByZXZlcnNlIGxvb2t1cAogICAgICAgICAgICAgZm9yIGFycmF5IHR5cGVzLgpvIExBTkctODgxOiAgTnVtYmVyVXRpbHMuY3JlYXRlTnVtYmVyKCkgSmF2YWRvYyBzYXlzIGl0IGRvZXMgbm90IHdvcmsgZm9yIG9jdGFsCiAgICAgICAgICAgICBudW1iZXJzLgpvIExBTkctODY1OiAgTG9jYWxlVXRpbHMudG9Mb2NhbGUgZG9lcyBub3QgcGFyc2Ugc3RyaW5ncyBzdGFydGluZyB3aXRoIGFuCiAgICAgICAgICAgICB1bmRlcnNjb3JlLgpvIExBTkctODU4OiAgU3RyaW5nRXNjYXBlVXRpbHMuZXNjYXBlSmF2YSgpIGFuZCBlc2NhcGVFY21hU2NyaXB0KCkgZG8gbm90CiAgICAgICAgICAgICBvdXRwdXQgdGhlIGVzY2FwZWQgc3Vycm9nYXRlIHBhaXJzIHRoYXQgYXJlIEphdmEgcGFyc2FibGUuCm8gTEFORy04NDk6ICBGYXN0RGF0ZUZvcm1hdCBhbmQgRmFzdERhdGVQcmludGVyIGdlbmVyYXRlcyBEYXRlIG9iamVjdHMKICAgICAgICAgICAgIHdhc3RlZnVsbHkuCm8gTEFORy04NDU6ICBTcGVsbGluZyBmaXhlcy4KbyBMQU5HLTg0NDogIEZpeCBleGFtcGxlcyBjb250YWluZWQgaW4gamF2YWRvYyBvZiBTdHJpbmdVdGlscy5jZW50ZXIgbWV0aG9kcy4KbyBMQU5HLTgzMjogIEZhc3REYXRlUGFyc2VyIGRvZXMgbm90IGhhbmRsZSB1bnRlcm1pbmF0ZWQgcXVvdGVzIGNvcnJlY3RseS4KbyBMQU5HLTgzMTogIEZhc3REYXRlUGFyc2VyIGRvZXMgbm90IGhhbmRsZSB3aGl0ZS1zcGFjZSBwcm9wZXJseS4KbyBMQU5HLTgzMDogIEZhc3REYXRlUGFyc2VyIGNvdWxkIHVzZSBcUSBcRSB0byBxdW90ZSByZWdleGVzLgpvIExBTkctODI4OiAgRmFzdERhdGVQYXJzZXIgZG9lcyBub3QgaGFuZGxlIG5vbi1HcmVnb3JpYW4gY2FsZW5kYXJzIHByb3Blcmx5LgpvIExBTkctODI2OiAgRmFzdERhdGVQYXJzZXIgZG9lcyBub3QgaGFuZGxlIG5vbi1BU0NJSSBkaWdpdHMgY29ycmVjdGx5LgpvIExBTkctODIyOiAgTnVtYmVyVXRpbHMjY3JlYXRlTnVtYmVyIC0gYmFkIGJlaGF2aW91ciBmb3IgbGVhZGluZyAiLS0iLgpvIExBTkctODE4OiAgRmFzdERhdGVGb3JtYXQncyAieiIgcGF0dGVybiBkb2VzIG5vdCByZXNwZWN0IHRpbWV6b25lIG9mIENhbGVuZGFyCiAgICAgICAgICAgICBpbnN0YW5jZXMgcGFzc2VkIHRvIGZvcm1hdCgpLgpvIExBTkctODE3OiAgQWRkIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TeXN0ZW1VdGlscy5JU19PU19XSU5ET1dTXzguCm8gTEFORy04MTM6ICBTdHJpbmdVdGlscy5lcXVhbHNJZ25vcmVDYXNlIGRvZXNuJ3QgY2hlY2sgc3RyaW5nIHJlZmVyZW5jZQogICAgICAgICAgICAgZXF1YWxpdHkuCm8gTEFORy04MTA6ICBTdHJpbmdVdGlscy5qb2luKCkgZW5kSW5kZXgsIGJ1Z2dlZCBmb3IgbG9vcC4KbyBMQU5HLTgwNzogIFJhbmRvbVN0cmluZ1V0aWxzIHRocm93cyBjb25mdXNpbmcgSUFFIHdoZW4gZW5kIDw9IHN0YXJ0LgpvIExBTkctODA1OiAgUmFuZG9tU3RyaW5nVXRpbHMucmFuZG9tKGNvdW50LCAwLCAwLCBmYWxzZSwgZmFsc2UsIHVuaXZlcnNlLAogICAgICAgICAgICAgcmFuZG9tKSBhbHdheXMgdGhyb3dzIGphdmEubGFuZy5BcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24uCm8gTEFORy04MDI6ICBMb2NhbGVVdGlscyAtIHVubmVjZXNzYXJ5IHJlY3Vyc2l2ZSBjYWxsIGluIFN5bmNBdm9pZCBjbGFzcy4KbyBMQU5HLTgwMDogIEphdmFkb2MgYnVnIGluIERhdGVVdGlscyNjZWlsaW5nIGZvciBDYWxlbmRhciBhbmQgT2JqZWN0IHZlcnNpb25zLgpvIExBTkctNzg4OiAgU2VyaWFsaXphdGlvblV0aWxzIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHdoZW4gY2xvbmluZwogICAgICAgICAgICAgcHJpbWl0aXZlIGNsYXNzZXMuCm8gTEFORy03ODY6ICBTdHJpbmdVdGlscyBlcXVhbHMoKSByZWxpZXMgb24gdW5kZWZpbmVkIGJlaGF2aW9yLgpvIExBTkctNzgzOiAgRG9jdW1lbnRhdGlvbiBidWc6IFN0cmluZ1V0aWxzLnNwbGl0LgpvIExBTkctNzc3OiAgamFyIGNvbnRhaW5zIHZlbG9jaXR5IHRlbXBsYXRlIG9mIHJlbGVhc2Ugbm90ZXMuCm8gTEFORy03NzY6ICBUeXBlVXRpbHNUZXN0IGNvbnRhaW5zIGluY29ycmVjdCB0eXBlIGFzc2lnbmFiaWxpdHkgYXNzZXJ0aW9uLgpvIExBTkctNzc1OiAgVHlwZVV0aWxzLmdldFR5cGVBcmd1bWVudHMoKSBtaXNzZXMgdHlwZSBhcmd1bWVudHMgZm9yCiAgICAgICAgICAgICBwYXJ0aWFsbHktYXNzaWduZWQgY2xhc3Nlcy4KbyBMQU5HLTc3MzogIEltbXV0YWJsZVBhaXIgZG9jIGNvbnRhaW5zIG5vbnNlbnNlIHRleHQuCm8gTEFORy03NzI6ICBDbGFzc1V0aWxzLlBBQ0tBR0VfU0VQQVJBVE9SIEphdmFkb2MgY29udGFpbnMgZ2FyYmFnZSB0ZXh0LgpvIExBTkctNzY1OiAgRXZlbnRMaXN0ZW5lclN1cHBvcnQuUHJveHlJbnZvY2F0aW9uSGFuZGxlciBubyBsb25nZXIgZGVmaW5lcwogICAgICAgICAgICAgc2VyaWFsVmVyc2lvblVJRC4KbyBMQU5HLTc2NDogIFN0ckJ1aWxkZXIgaXMgbm93IHNlcmlhbGl6YWJsZS4KbyBMQU5HLTc2MTogIEZpeCBKYXZhZG9jIEFudCB3YXJuaW5ncy4KbyBMQU5HLTc0NzogIE51bWJlclV0aWxzIGRvZXMgbm90IGhhbmRsZSBMb25nIEhleCBudW1iZXJzLgpvIExBTkctNzQzOiAgSmF2YWRvYyBidWcgaW4gc3RhdGljIGlubmVyIGNsYXNzIERhdGVJdGVyYXRvci4KCkNIQU5HRVMKPT09PT09PT09CgpvIExBTkctOTMxOiAgTWlzbGVhZGluZyBKYXZhZG9jIGNvbW1lbnQgaW4gU3RyQnVpbGRlclJlYWRlciBjbGFzcy4gVGhhbmtzCiAgICAgICAgICAgICB0byBDaHJpc3RvcGggU2NobmVlZ2Fucy4KbyBMQU5HLTkxMDogIFN0cmluZ1V0aWxzLm5vcm1hbGl6ZVNwYWNlIG5vdyBoYW5kbGVzIG5vbi1icmVha2luZyBzcGFjZXMKICAgICAgICAgICAgIChVbmljb2RlIDAwQTApLiBUaGFua3MgdG8gVGltdXIgWWFyb3NoLgpvIExBTkctODA0OiAgUmVkdW5kYW50IGNoZWNrIGZvciB6ZXJvIGluIEhhc2hDb2RlQnVpbGRlciBjdG9yLiBUaGFua3MgdG8KICAgICAgICAgICAgIEFsbG9uIE11cmVpbmlrLgpvIExBTkctODg0OiAgU2ltcGxpZnkgRmFzdERhdGVGb3JtYXQ7IGVsaW1pbmF0ZSBib3hpbmcuCm8gTEFORy04ODI6ICBMb29rdXBUcmFuc2xhdG9yIG5vdyB3b3JrcyB3aXRoIGltcGxlbWVudGF0aW9ucyBvZiBDaGFyU2VxdWVuY2UKICAgICAgICAgICAgIG90aGVyIHRoYW4gU3RyaW5nLgpvIExBTkctODQ2OiAgUHJvdmlkZSBDaGFyU2VxdWVuY2VVdGlscy5yZWdpb25NYXRjaGVzIHdpdGggYSBwcm9wZXIgZ3JlZW4KICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIGluc3RlYWQgb2YgaW5lZmZpY2llbnRseSBjb252ZXJ0aW5nIHRvIFN0cmluZ3MuCm8gTEFORy04Mzk6ICBBcnJheVV0aWxzIHJlbW92ZUVsZW1lbnRzIG1ldGhvZHMgdXNlIHVubmVjZXNzYXJ5IEhhc2hTZXQuCm8gTEFORy04Mzg6ICBBcnJheVV0aWxzIHJlbW92ZUVsZW1lbnRzIG1ldGhvZHMgY2xvbmUgdGVtcG9yYXJ5IGluZGV4IGFycmF5cwogICAgICAgICAgICAgdW5uZWNlc3NhcmlseS4KbyBMQU5HLTc5OTogIERhdGVVdGlscyNwYXJzZURhdGUgdXNlcyBkZWZhdWx0IGxvY2FsZTsgYWRkIExvY2FsZSBzdXBwb3J0LgpvIExBTkctNzk4OiAgVXNlIGdlbmVyaWNzIGluIFNlcmlhbGl6YXRpb25VdGlscy4KCkNIQU5HRVMgV0lUSE9VVCBUSUNLRVQKPT09PT09PT09PT09PT09PT09PT09PT09CgpvIEZpeGVkIFVSTHMgaW4gamF2YWRvYyB0byBwb2ludCB0byBuZXcgb3JhY2xlLmNvbSBwYWdlcwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMy4xCgpORVcgRkVBVFVSRVMKPT09PT09PT09PT09PT0KCm8gTEFORy04MDE6ICBBZGQgQ29udmVyc2lvbiB1dGlsaXR5IHRvIGNvbnZlcnQgYmV0d2VlbiBkYXRhIHR5cGVzIG9uIGJ5dGUgbGV2ZWwKbyBMQU5HLTc2MDogIEFkZCBBUEkgU3RyaW5nVXRpbHMudG9TdHJpbmcoYnl0ZVtdIGludHB1dCwgU3RyaW5nIGNoYXJzZXROYW1lKQpvIExBTkctNzU2OiAgQWRkIEFQSXMgQ2xhc3NVdGlscy5pc1ByaW1pdGl2ZVdyYXBwZXIoQ2xhc3M8Pz4pIGFuZAogICAgICAgICAgICAgaXNQcmltaXRpdmVPcldyYXBwZXIoQ2xhc3M8Pz4pCm8gTEFORy02OTU6ICBTeXN0ZW1VdGlscy5JU19PU19VTklYIGRvZXNuJ3QgcmVjb2duaXplIEZyZWVCU0QgYXMgYSBVbml4IHN5c3RlbQoKQlVHIEZJWEVTCj09PT09PT09PT09CgpvIExBTkctNzQ5OiAgSW5jb3JyZWN0IEJ1bmRsZS1TeW1ib2xpY05hbWUgaW4gTWFuaWZlc3QKbyBMQU5HLTc0NjogIE51bWJlclV0aWxzIGRvZXMgbm90IGhhbmRsZSB1cHBlci1jYXNlIGhleDogMFggYW5kIC0wWApvIExBTkctNzQ0OiAgU3RyaW5nVXRpbHMgdGhyb3dzIGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbEV4Y2VwdGlvbiBvbiBHb29nbGUKICAgICAgICAgICAgIEFwcCBFbmdpbmUKbyBMQU5HLTc0MTogIEFudCBidWlsZCBoYXMgd3JvbmcgY29tcG9uZW50Lm5hbWUKbyBMQU5HLTY5ODogIERvY3VtZW50IHRoYXQgdGhlIE11dGFibGUgbnVtYmVycyBkb24ndCB3b3JrIGFzIGV4cGVjdGVkIHdpdGgKICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQKCkNIQU5HRVMKPT09PT09PT09CgpvIExBTkctNzU4OiAgQWRkIGFuIGV4YW1wbGUgd2l0aCB3aGl0ZXNwYWNlIGluIFN0cmluZ1V0aWxzLmRlZmF1bHRJZkVtcHR5Cm8gTEFORy03NTI6ICBGaXggY3JlYXRlTG9uZygpIHNvIGl0IGJlaGF2ZXMgbGlrZSBjcmVhdGVJbnRlZ2VyKCkKbyBMQU5HLTc1MTogIEluY2x1ZGUgdGhlIGFjdHVhbCB0eXBlIGluIHRoZSBWYWxpZGF0ZS5pc0luc3RhbmNlIGFuZAogICAgICAgICAgICAgaXNBc3NpZ25hYmxlRnJvbSBleGNlcHRpb24gbWVzc2FnZXMKbyBMQU5HLTc0ODogIERlcHJlY2F0aW5nIGNob21wKFN0cmluZywgU3RyaW5nKQpvIExBTkctNzM2OiAgQ2hhclV0aWxzIHN0YXRpYyBmaW5hbCBhcnJheSBDSEFSX1NUUklORyBpcyBub3QgbmVlZGVkIHRvIGNvbXB1dGUKICAgICAgICAgICAgIENIQVJfU1RSSU5HX0FSUkFZCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAzLjAKCkFERElUSU9OUwo9PT09PT09PT09PQoKbyBMQU5HLTI3NjogIE11dGFibGVCaWdEZWNpbWFsIGFuZCBNdXRhYmxlQmlnSW50ZWdlci4KbyBMQU5HLTI4NTogIFdpc2ggOiBtZXRob2QgdW5hY2NlbnQuCm8gTEFORy0zNTg6ICBPYmplY3RVdGlscy5jb2FsZXNjZS4KbyBMQU5HLTM4NjogIExlZnRPZi9SaWdodE9mTnVtYmVyIGluIFJhbmdlIGNvbnZlbmllbmNlIG1ldGhvZHMgbmVjZXNzYXJ5LgpvIExBTkctNDM1OiAgQWRkIENsYXNzVXRpbHMuaXNBc3NpZ25hYmxlKCkgdmFyaWFudHMgd2l0aCBhdXRvYm94aW5nLgpvIExBTkctNDQ0OiAgU3RyaW5nVXRpbHMuZW1wdHlUb051bGwuCm8gTEFORy00ODI6ICBFbmhhbmNlIFN0clN1YnN0aXR1dG9yIHRvIHN1cHBvcnQgbmVzdGVkICR7dmFyLSR7c3VidnJ9fSBleHBhbnNpb24KbyBMQU5HLTQ4MjogIFN0clN1YnN0aXR1dG9yIG5vdyBzdXBwb3J0cyBzdWJzdGl0dXRpb24gaW4gdmFyaWFibGUgbmFtZXMuCm8gTEFORy00OTY6ICBBIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIExhenkgaW5pdGlhbGl6YXRpb24gcGF0dGVybi4KbyBMQU5HLTQ5NzogIEFkZGl0aW9uIG9mIENvbnRleHRlZEV4Y2VwdGlvbiBhbmQgQ29udGV4dGVkUnVudGltZUV4Y2VwdGlvbi4KbyBMQU5HLTQ5ODogIEFkZCBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVUZXh0KCkgbWV0aG9kcy4KbyBMQU5HLTQ5OTogIEFkZCBzdXBwb3J0IGZvciB0aGUgaGFuZGxpbmcgb2YgRXhlY3V0aW9uRXhjZXB0aW9ucy4KbyBMQU5HLTUwMTogIEFkZCBzdXBwb3J0IGZvciBiYWNrZ3JvdW5kIGluaXRpYWxpemF0aW9uLgpvIExBTkctNTI5OiAgQWRkIGEgY29uY3VycmVudCBwYWNrYWdlLgpvIExBTkctNTMzOiAgVmFsaWRhdGU6IHN1cHBvcnQgZm9yIHZhbGlkYXRpbmcgYmxhbmsgc3RyaW5ncy4KbyBMQU5HLTUzNzogIEFkZCBBcnJheVV0aWxzLnRvQXJyYXkgdG8gY3JlYXRlIGdlbmVyaWMgYXJyYXlzLgpvIExBTkctNTQ1OiAgQWRkIGFiaWxpdHkgdG8gY3JlYXRlIGEgRnV0dXJlIGZvciBhIGNvbnN0YW50LgpvIExBTkctNTQ2OiAgQWRkIG1ldGhvZHMgdG8gVmFsaWRhdGUgdG8gY2hlY2sgd2hldGhlciB0aGUgaW5kZXggaXMgdmFsaWQgZm9yCiAgICAgICAgICAgICB0aGUgYXJyYXkvbGlzdC9zdHJpbmcuCm8gTEFORy01NTM6ICBBZGQgVHlwZVV0aWxzIGNsYXNzIHRvIHByb3ZpZGUgdXRpbGl0eSBjb2RlIGZvciB3b3JraW5nIHdpdGggZ2VuZXJpYwogICAgICAgICAgICAgdHlwZXMuCm8gTEFORy01NTk6ICBBZGRlZCBpc0Fzc2lnbmFibGVGcm9tIGFuZCBpc0luc3RhbmNlT2YgdmFsaWRhdGlvbiBtZXRob2RzLgpvIExBTkctNTU5OiAgQWRkZWQgdmFsaWRTdGF0ZSB2YWxpZGF0aW9uIG1ldGhvZC4KbyBMQU5HLTU2MDogIE5ldyBUaW1lZFNlbWFwaG9yZSBjbGFzcy4KbyBMQU5HLTU4MjogIFByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRocmVhZEZhY3RvcnkgaW50ZXJmYWNlLgpvIExBTkctNTg4OiAgQ3JlYXRlIGEgYmFzaWMgUGFpcjxMLCBSPiBjbGFzcy4KbyBMQU5HLTU5NDogIERhdGVVdGlscyBlcXVhbCAmIGNvbXBhcmUgZnVuY3Rpb25zIHVwIHRvIG1vc3Qgc2lnbmlmaWNhbnQgZmllbGQuCm8gTEFORy02MDE6ICBBZGQgQnVpbGRlciBJbnRlcmZhY2UgLyBVcGRhdGUgQnVpbGRlcnMgdG8gSW1wbGVtZW50IEl0LgpvIExBTkctNjA5OiAgU3VwcG9ydCBsYXp5IGluaXRpYWxpemF0aW9uIHVzaW5nIGF0b21pYyB2YXJpYWJsZXMKbyBMQU5HLTYxMDogIEV4dGVuZCBleGNlcHRpb24gaGFuZGxpbmcgaW4gQ29uY3VycmVudFV0aWxzIHRvIHJ1bnRpbWUgZXhjZXB0aW9ucy4KbyBMQU5HLTYxNDogIFN0cmluZ1V0aWxzLmVuZHNXaXRoQW55IG1ldGhvZApvIExBTkctNjQwOiAgQWRkIG5vcm1hbGl6ZVNwYWNlIHRvIFN0cmluZ1V0aWxzCm8gTEFORy02NDQ6ICBQcm92aWRlIGRvY3VtZW50YXRpb24gYWJvdXQgdGhlIG5ldyBjb25jdXJyZW50IHBhY2thZ2UKbyBMQU5HLTY0OTogIEJvb2xlYW5VdGlscy50b0Jvb2xlYW5PYmplY3QgdG8gc3VwcG9ydCBzaW5nbGUgY2hhcmFjdGVyIGlucHV0Cm8gTEFORy02NTE6ICBBZGQgQW5ub3RhdGlvblV0aWxzCm8gTEFORy02NTM6ICBQcm92aWRlIGEgdmVyeSBiYXNpYyBDb25jdXJyZW50SW5pdGlhbGl6ZXIgaW1wbGVtZW50YXRpb24KbyBMQU5HLTY1NTogIEFkZCBTdHJpbmdVdGlscy5kZWZhdWx0SWZCbGFuaygpCm8gTEFORy02Njc6ICBBZGQgYSBOdWxsLXNhZmUgY29tcGFyZSgpIG1ldGhvZCB0byBPYmplY3RVdGlscwpvIExBTkctNjc2OiAgRG9jdW1lbnRlZCBwb3RlbnRpYWwgTlBFIGlmIGF1dG8tYm94aW5nIG9jY3VycyBmb3Igc29tZSBCb29sZWFuVXRpbHMKICAgICAgICAgICAgIG1ldGhvZHMKbyBMQU5HLTY3ODogIEFkZCBzdXBwb3J0IGZvciBDb25jdXJyZW50TWFwLnB1dElmQWJzZW50KCkKbyBMQU5HLTY5MjogIEFkZCBoYXNoQ29kZU11bHRpIHZhcmFyZ3MgbWV0aG9kCm8gTEFORy02OTc6ICBBZGQgRm9ybWF0dGFibGVVdGlscyBjbGFzcwpvIExBTkctNjg0OiAgTGV2ZW5zaHRlaW4gRGlzdGFuY2UgV2l0aGluIGEgR2l2ZW4gVGhyZXNob2xkCgpSRU1PVkFMUwo9PT09PT09PT09CgpvIExBTkctNDM4OiAgUmVtb3ZlIEBkZXByZWNhdGVkcy4KbyBMQU5HLTQ5MjogIFJlbW92ZSBjb2RlIGhhbmRsZWQgbm93IGJ5IHRoZSBKREsuCm8gTEFORy00OTM6ICBSZW1vdmUgY29kZSB0aGF0IGRvZXMgbm90IGhvbGQgZW5vdWdoIHZhbHVlIHRvIHJlbWFpbi4KbyBMQU5HLTU5MDogIFJlbW92ZSBKREsgMS4yLzEuMyBidWcgaGFuZGxpbmcgaW4KICAgICAgICAgICAgIFN0cmluZ1V0aWxzLmluZGV4T2YoU3RyaW5nLCBTdHJpbmcsIGludCkuCm8gTEFORy02NzM6ICBXb3JkVXRpbHMuYWJicmV2aWF0ZSgpIHJlbW92ZWQKbyBMQU5HLTY5MTogIFJlbW92ZWQgRGF0ZVV0aWxzLlVUQ19USU1FX1pPTkUKCklNUFJPVkVNRU5UUwo9PT09PT09PT09PT09PQoKbyBMQU5HLTI5MDogIEVudW1VdGlscyBmb3IgSkRLIDUuMC4KbyBMQU5HLTMzNjogIEZpbmFsbHkgc3RhcnQgdXNpbmcgZ2VuZXJpY3MuCm8gTEFORy0zNTU6ICBTdHJCdWlsZGVyIHNob3VsZCBpbXBsZW1lbnQgQ2hhclNlcXVlbmNlIGFuZCBBcHBlbmRhYmxlLgpvIExBTkctMzk2OiAgSW52ZXN0aWdhdGUgZm9yIHZhcmFyZyB1c2FnZXMuCm8gTEFORy00MjQ6ICBJbXByb3ZlIEphdmFkb2MgZm9yIFN0cmluZ1V0aWxzIGNsYXNzLgpvIExBTkctNDU4OiAgUmVmYWN0b3IgVmFsaWRhdGUuamF2YSB0byBlbGltaW5hdGUgY29kZSByZWR1bmRhbmN5LgpvIExBTkctNDc5OiAgRG9jdW1lbnQgd2hlcmUgaW4gU1ZOIHRydW5rIGlzLgpvIExBTkctNTA0OiAgYnJpbmcgQXJyYXlVdGlscy5pc0VtcHR5IHRvIHRoZSBnZW5lcmljcyB3b3JsZC4KbyBMQU5HLTUwNTogIFJld3JpdGUgU3RyaW5nRXNjYXBlVXRpbHMuCm8gTEFORy01MDc6ICBTdHJpbmdFc2NhcGVVdGlscy51bmVzY2FwZUphdmEgc2hvdWxkIHN1cHBvcnQgXHUrIG5vdGF0aW9uLgpvIExBTkctNTEwOiAgQ29udmVydCBTdHJpbmdVdGlscyBBUEkgdG8gdGFrZSBDaGFyU2VxdWVuY2UuCm8gTEFORy01MTM6ICBCZXR0ZXIgRW51bVV0aWxzLgpvIExBTkctNTI4OiAgTXV0YWJsZSBjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgYW4gYXBwcm9wcmlhdGVseSB0eXBlZCBNdXRhYmxlCiAgICAgICAgICAgICBpbnRlcmZhY2UuCm8gTEFORy01Mzk6ICBDb21waWxlIGNvbW1vbnMubGFuZyBmb3IgQ0RDIDEuMS9Gb3VuZGF0aW9uIDEuMS4KbyBMQU5HLTU0MDogIE1ha2UgTnVtZXJpY0VudGl0eUVzY2FwZXIgaW1tdXRhYmxlLgpvIExBTkctNTQxOiAgUmVwbGFjZSBTdHJpbmdCdWZmZXIgd2l0aCBTdHJpbmdCdWlsZGVyLgpvIExBTkctNTQ4OiAgVXNlIEl0ZXJhYmxlIG9uIEFQSSBpbnN0ZWFkIG9mIENvbGxlY3Rpb24uCm8gTEFORy01NTE6ICBSZXBsYWNlIFJhbmdlIGNsYXNzZXMgd2l0aCBnZW5lcmljIHZlcnNpb24uCm8gTEFORy01NjI6ICBDaGFuZ2UgTWF2ZW4gZ3JvdXBJZC4KbyBMQU5HLTU2MzogIENoYW5nZSBKYXZhIHBhY2thZ2UgbmFtZS4KbyBMQU5HLTU3MDogIERvIHRoZSB0ZXN0IGNhc2VzIHJlYWxseSBzdGlsbCByZXF1aXJlIG1haW4oKSBhbmQgc3VpdGUoKSBtZXRob2RzPwpvIExBTkctNTc5OiAgQWRkIG5ldyBWYWxpZGF0ZSBtZXRob2RzLgpvIExBTkctNTk5OiAgQ2xhc3NVdGlscy5nZXRDbGFzcygpOiBBbGxvdyBEb3RzIGFzIElubmVyIENsYXNzIFNlcGFyYXRvcnMuCm8gTEFORy02MDU6ICBEZWZhdWx0RXhjZXB0aW9uQ29udGV4dCBvdmVyd3JpdGVzIHZhbHVlcyBpbiByZWN1cnNpdmUgc2l0dWF0aW9ucy4KbyBMQU5HLTY2ODogIENoYW5nZSBPYmplY3RVdGlscyBtaW4oKSAmIG1heCgpIGZ1bmN0aW9ucyB0byB1c2UgdmFyYXJncyByYXRoZXIKICAgICAgICAgICAgIHRoYW4ganVzdCB0d28gcGFyYW1ldGVycwpvIExBTkctNjgxOiAgUHVzaCBkb3duIFdvcmRVdGlscyB0byAidGV4dCIgc3ViLXBhY2thZ2UuCm8gTEFORy03MTE6ICBBZGQgaW5jbHVkZWFudHJ1bnRpbWU9ZmFsc2UgdG8gamF2YWMgdGFyZ2V0cyB0byBxdWVsbCB3YXJuaW5ncyBpbgogICAgICAgICAgICAgYW50IDEuOC4xIGFuZCBiZXR0ZXIgKGFuZCBtb2Rlc3QgcGVyZm9ybWFuY2UgZ2FpbikuCm8gTEFORy03MTM6ICBJbmNyZWFzZSB0ZXN0IGNvdmVyYWdlIG9mIEZpZWxkVXRpbHMgcmVhZCBtZXRob2RzIGFuZCB0d2VhawogICAgICAgICAgICAgamF2YWRvYy4KbyBMQU5HLTcxODogIGJ1aWxkLnhtbCBKYXZhIDEuNSsgdXBkYXRlcy4KCkJVRyBGSVhFUwo9PT09PT09PT09PQoKbyBMQU5HLTExOiAgIERlcGVuZCBvbiBKREsgMS41Ky4KbyBMQU5HLTMwMjogIFN0ckJ1aWxkZXIgZG9lcyBub3QgaW1wbGVtZW50IGNsb25lKCkuCm8gTEFORy0zMzk6ICBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVIdG1sKCkgZXNjYXBlcyBtdWx0aWJ5dGUgY2hhcmFjdGVycyBsaWtlCiAgICAgICAgICAgICBDaGluZXNlLCBKYXBhbmVzZSwgZXRjLgpvIExBTkctMzY5OiAgRXhjZXB0aW9uVXRpbHMgbm90IHRocmVhZC1zYWZlLgpvIExBTkctNDE4OiAgSmF2YWRvYyBpbmNvcnJlY3QgZm9yIFN0cmluZ1V0aWxzLmVuZHNXaXRoSWdub3JlQ2FzZS4KbyBMQU5HLTQyODogIFN0cmluZ1V0aWxzLmlzQWxwaGEsIGlzQWxwaGFudW1lcmljIGFuZCBpc051bWVyaWMgbm93IHJldHVybiBmYWxzZQogICAgICAgICAgICAgZm9yICIiCm8gTEFORy00Mzk6ICBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVIVE1MKCkgZG9lcyBub3QgZXNjYXBlIGNoYXJzICgweDAwLTB4MjApLgpvIExBTkctNDQ4OiAgTG93ZXIgQXNjaWkgQ2hhcmFjdGVycyBkb24ndCBnZXQgZW5jb2RlZCBieSBFbnRpdGllcy5qYXZhLgpvIExBTkctNDY4OiAgSkRLIDEuNSBidWlsZC9ydW50aW1lIGZhaWx1cmUgb24gTEFORy0zOTMgKEVxdWFsc0J1aWxkZXIpLgpvIExBTkctNDc0OiAgRml4ZXMgZm9yIHRocmVhZCBzYWZldHkuCm8gTEFORy00Nzg6ICBTdG9wV2F0Y2ggZG9lcyBub3QgcmVzaXN0IHRvIHN5c3RlbSB0aW1lIGNoYW5nZXMuCm8gTEFORy00ODA6ICBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVIdG1sIGluY29ycmVjdGx5IGNvbnZlcnRzIHVuaWNvZGUKICAgICAgICAgICAgIGNoYXJhY3RlcnMgYWJvdmUgVSswMEZGRkYgaW50byAyIGNoYXJhY3RlcnMuCm8gTEFORy00ODE6ICBQb3NzaWJsZSByYWNlLWNvbmRpdGlvbnMgaW4gaGFzaENvZGUgb2YgdGhlIHJhbmdlIGNsYXNzZXMuCm8gTEFORy01NjQ6ICBJbXByb3ZlIFN0ckxvb2t1cCBBUEkgZG9jdW1lbnRhdGlvbi4KbyBMQU5HLTU2ODogIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKSBpcyB1c2VkIHRvbyBnZW5lcmFsbHkuCm8gTEFORy01NzE6ICBBcnJheVV0aWxzLmFkZChUWzogIGFycmF5LCBUIGVsZW1lbnQpIGNhbiBjcmVhdGUgdW5leHBlY3RlZAogICAgICAgICAgICAgQ2xhc3NDYXN0RXhjZXB0aW9uLgpvIExBTkctNTg1OiAgZXhjZXB0aW9uLkRlZmF1bHRFeGNlcHRpb25Db250ZXh0LmdldEZvcm1hdHRlZEV4Y2VwdGlvbk1lc3NhZ2UKICAgICAgICAgICAgIGNhdGNoZXMgVGhyb3dhYmxlLgpvIExBTkctNTk2OiAgU3RyU3Vic3RpdHV0b3Igc2hvdWxkIGFsc28gaGFuZGxlIHRoZSBkZWZhdWx0IHByb3BlcnRpZXMgb2YgYQogICAgICAgICAgICAgamF2YS51dGlsLlByb3BlcnRpZXMgY2xhc3MKbyBMQU5HLTYwMDogIEphdmFkb2MgaXMgaW5jb3JyZWN0IGZvciBwdWJsaWMgc3RhdGljIGludAogICAgICAgICAgICAgbGFzdEluZGV4T2YoU3RyaW5nIHN0ciwgU3RyaW5nIHNlYXJjaFN0cikuCm8gTEFORy02MDI6ICBDb250ZXh0ZWRSdW50aW1lRXhjZXB0aW9uIG5vIGxvbmdlciBhbiAndW5jaGVja2VkJyBleGNlcHRpb24uCm8gTEFORy02MDY6ICBFcXVhbHNCdWlsZGVyIGNhdXNlcyBTdGFja092ZXJmbG93RXhjZXB0aW9uLgpvIExBTkctNjA4OiAgU29tZSBTdHJpbmdVdGlscyBtZXRob2RzIHNob3VsZCB0YWtlIGFuIGludCBjaGFyYWN0ZXIgaW5zdGVhZCBvZgogICAgICAgICAgICAgY2hhciB0byB1c2UgU3RyaW5nIEFQSSBmZWF0dXJlcy4KbyBMQU5HLTYxNzogIFN0cmluZ0VzY2FwZVV0aWxzLmVzY2FwZVhNTCgpIGNhbid0IHByb2Nlc3MgVVRGLTE2IHN1cHBsZW1lbnRhcnkKICAgICAgICAgICAgIGNoYXJhY3RlcnMKbyBMQU5HLTYyNDogIFN5c3RlbVV0aWxzLmdldEphdmFWZXJzaW9uQXNGbG9hdCB0aHJvd3MKICAgICAgICAgICAgIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gb24gQW5kcm9pZCBydW50aW1lL0RhbHZpayBWTQpvIExBTkctNjI5OiAgQ2hhcnNldCBtYXkgbm90IGJlIHRocmVhZHNhZmUsIGJlY2F1c2UgdGhlIEhhc2hTZXQgaXMgbm90IHN5bmNoLgpvIExBTkctNjM4OiAgTnVtYmVyVXRpbHMgY3JlYXRlTnVtYmVyIHRocm93cyBhIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24KICAgICAgICAgICAgIHdoZW4gYXJndW1lbnQgY29udGFpbmluZyAiZSIgYW5kICJFIiBpcyBwYXNzZWQgaW4KbyBMQU5HLTY0MzogIEphdmFkb2MgU3RyaW5nVXRpbHMubGVmdCgpIGNsYWltcyB0byB0aHJvdyBvbiBuZWdhdGl2ZSBsZW4sIGJ1dAogICAgICAgICAgICAgZG9lc24ndApvIExBTkctNjQ1OiAgRmFzdERhdGVGb3JtYXQuZm9ybWF0KCkgb3V0cHV0cyBpbmNvcnJlY3Qgd2VlayBvZiB5ZWFyIGJlY2F1c2UKICAgICAgICAgICAgIGxvY2FsZSBpc24ndCByZXNwZWN0ZWQKbyBMQU5HLTY0NjogIFN0cmluZ0VzY2FwZVV0aWxzLnVuZXNjYXBlSmF2YSBkb2Vzbid0IGhhbmRsZSBvY3RhbCBlc2NhcGVzIGFuZAogICAgICAgICAgICAgVW5pY29kZSB3aXRoIGV4dHJhIHUKbyBMQU5HLTY1NjogIEV4YW1wbGUgU3RyaW5nVXRpbHMuaW5kZXhPZkFueUJ1dCgienphYnl5Y2R4eCIsICcnKSA9IDAgaW5jb3JyZWN0Cm8gTEFORy02NTg6ICBTb21lIEVudGl0eXMgbGlrZSAmT3VtbDsgYXJlIG5vdCBtYXRjaGVkIHByb3Blcmx5IGFnYWluc3QgaXRzCiAgICAgICAgICAgICBJU084ODU5LTEgcmVwcmVzZW50YXRpb24KbyBMQU5HLTY1OTogIEVudGl0eUFycmF5cyB0eXBvOiB7Ilx1MjEyMiIsICImbWludXM7In0sIC8vIG1pbnVzIHNpZ24sIFUrMjIxMgogICAgICAgICAgICAgSVNPdGVjaApvIExBTkctNjY6ICAgU3RyaW5nRXNjYXBlci5lc2NhcGVYbWwoKSBlc2NhcGVzIGNoYXJhY3RlcnMgPiAweDdmLgpvIExBTkctNjYyOiAgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLm1hdGguRnJhY3Rpb24gZG9lcyBub3QgcmVkdWNlCiAgICAgICAgICAgICAoSW50ZWdlci5NSU5fVkFMVUUsIDJeaykKbyBMQU5HLTY2MzogIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5tYXRoLkZyYWN0aW9uIGRvZXMgbm90IGFsd2F5cyBzdWNjZWVkIGluCiAgICAgICAgICAgICBtdWx0aXBseUJ5IGFuZCBkaXZpZGVCeQpvIExBTkctNjY0OiAgTnVtYmVyVXRpbHMuaXNOdW1iZXIoU3RyaW5nKSBpcyBub3QgcmlnaHQgd2hlbiB0aGUgU3RyaW5nIGlzCiAgICAgICAgICAgICAiMS4xTCIKbyBMQU5HLTY3MjogIERvYyBidWcgaW4gRGF0ZVV0aWxzI2NlaWxpbmcKbyBMQU5HLTY3NzogIERhdGVVdGlscy5pc1NhbWVMb2NhbFRpbWUgY29tcGFyZXMgdXNpbmcgMTIgaG91ciBjbG9jayBhbmQgbm90CiAgICAgICAgICAgICAyNCBob3VyCm8gTEFORy02ODU6ICBFcXVhbHNCdWlsZGVyIHN5bmNocm9uaXplcyBvbiBIYXNoQ29kZUJ1aWxkZXIuCm8gTEFORy03MDM6ICBTdHJpbmdVdGlscy5qb2luIHRocm93cyBOUEUgd2hlbiB0b1N0cmluZyByZXR1cm5zIG51bGwgZm9yIG9uZSBvZgogICAgICAgICAgICAgb2JqZWN0cyBpbiBjb2xsZWN0aW9uCm8gTEFORy03MTA6ICBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIHdoZW4gY2FsbGluZyB1bmVzY2FwZUh0bWw0KCImIzAzIikKbyBMQU5HLTcxNDogIFN0cmluZ1V0aWxzIGRvYy9jb21tZW50IHNwZWxsaW5nIGZpeGVzLgpvIExBTkctNzE1OiAgQ2hhclNldFV0aWxzLnNxdWVlemUoKSBzcGVlZHVwLgpvIExBTkctNzE2OiAgc3dhcENhc2UgYW5kICpjYXBpdGFsaXplIHNwZWVkdXBzLgoKCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9sYW5nL2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBDb21tb25zIExhbmcsIGluY2x1ZGluZyBpbnN0cnVjdGlvbnMgb24gaG93IHRvCnN1Ym1pdCBidWcgcmVwb3J0cywgcGF0Y2hlcywgb3Igc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LCBzZWUgdGhlCkFwYWNoZSBDb21tb25zIExhbmcgd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL2xhbmcvCgpIYXZlIGZ1biEKLUFwYWNoZSBDb21tb25zIExhbmcgdGVhbQoK