ICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIENvbW1vbnMgTGFuZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLjkKICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcwoKCklOVFJPRFVDVElPTjoKClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAzLjkgdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucyBMYW5nLgpDb21tb25zIExhbmcgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGFueSAKSmF2YSBlbnZpcm9ubWVudC4KCkxhbmcgMy45IGFuZCBvbndhcmRzIG5vdyB0YXJnZXRzIEphdmEgOC4wLCBtYWtpbmcgdXNlIG9mIGZlYXR1cmVzIHRoYXQgYXJyaXZlZCB3aXRoIEphdmEgOC4wLgoKRm9yIHRoZSBhZHZpY2Ugb24gdXBncmFkaW5nIGZyb20gMi54IHRvIDMueCwgc2VlIHRoZSBmb2xsb3dpbmcgcGFnZTogCgogICAgaHR0cDovL2NvbW1vbnMuYXBhY2hlLm9yZy9sYW5nL2FydGljbGUzXzAuaHRtbAoKQXBhY2hlIENvbW1vbnMgTGFuZywgYSBwYWNrYWdlIG9mIEphdmEgdXRpbGl0eSBjbGFzc2VzIGZvciB0aGUKY2xhc3NlcyB0aGF0IGFyZSBpbiBqYXZhLmxhbmcncyBoaWVyYXJjaHksIG9yIGFyZSBjb25zaWRlcmVkIHRvIGJlIHNvCnN0YW5kYXJkIGFzIHRvIGp1c3RpZnkgZXhpc3RlbmNlIGluIGphdmEubGFuZy4KCk5ldyBmZWF0dXJlcyBhbmQgYnVnIGZpeGVzLiBSZXF1aXJlcyBKYXZhIDgsIHN1cHBvcnRzIEphdmEgOSwgMTAsIDExCgpDaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBpbmNsdWRlOgoKTmV3IGZlYXR1cmVzOgpvIExBTkctMTQ0MjogSmF2YWRvYyBwb2ludGluZyB0byBDb21tb25zIFJORy4KbyAgICAgICAgICAgIEFkZGluZyB0aGUgRnVuY3Rpb25zIGNsYXNzLgpvIExBTkctMTQxMTogQWRkIGlzRW1wdHkgbWV0aG9kIHRvIE9iamVjdFV0aWxzIFRoYW5rcyB0byBBbGV4YW5kZXIgVHN2ZXRrb3YuCm8gTEFORy0xNDIyOiBBZGQgbnVsbC1zYWZlIFN0cmluZ1V0aWxzLnZhbHVlT2YoY2hhcltdKSB0byBkZWxlZ2F0ZSB0byBTdHJpbmcudmFsdWVPZihjaGFyW10pCm8gTEFORy0xNDI3OiBBZGQgQVBJIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TeXN0ZW1VdGlscy5pc0phdmFWZXJzaW9uQXRNb3N0KEphdmFWZXJzaW9uKQoKCkNoYW5nZXM6Cm8gTEFORy0xNDE2OiBBZGQgbW9yZSBTeXN0ZW1VdGlscy5JU19KQVZBX1hYIHZhcmlhbnRzLgpvIExBTkctMTQxNjogVXBkYXRlIHRvIEpVbml0IDUKbyBMQU5HLTE0MTc6IEFkZCBARnVuY3Rpb25hbEludGVyZmFjZSB0byBUaHJlYWRQcmVkaWNhdGUgYW5kIFRocmVhZEdyb3VwUHJlZGljYXRlCm8gTEFORy0xNDE1OiBVcGRhdGUgSmF2YSBMYW5ndWFnZSByZXF1aXJlbWVudCB0byAxLjgKbyBMQU5HLTE0MzY6IENvbnNvbGlkYXRlIHRoZSBTdHJpbmdVdGlscyBlcXVhbHMgYW5kIGVxdWFsc0lnbm9yZUNhc2UgSmF2YWRvYyBhbmQgaW1wbGVtZW50YXRpb24KbyAgICAgICAgICAgIChkb2MpIEZpeCBqYXZhZG9jIGZvciAnc3RhcnRJbmRleCcgcGFyYW1ldGVyIG9mIFN0cmluZ1V0aWxzLmpvaW4oKSBtZXRob2RzLiBHaXRIdWIgUFIgIzQxMi4gVGhhbmtzIHRvIEFuZHJlaSBUcm9pZSBhZnQ5MC4KCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cDovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1sYW5nL2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBMYW5nLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQXBhY2hlIENvbW1vbnMgTGFuZyB3ZWJzaXRlOgoKaHR0cDovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1sYW5nLwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIExhbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMy44LjEKICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcwoKCklOVFJPRFVDVElPTjoKClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAzLjguMSB2ZXJzaW9uIG9mIEFwYWNoZSBDb21tb25zIExhbmcuCkNvbW1vbnMgTGFuZyBpcyBhIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgcmV1c2FibGUgY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYW55CkphdmEgZW52aXJvbm1lbnQuCgpMYW5nIDMuMCBhbmQgb253YXJkcyBub3cgdGFyZ2V0cyBKYXZhIDcuMCwgbWFraW5nIHVzZSBvZiBmZWF0dXJlcyB0aGF0IGFycml2ZWQgd2l0aCBKYXZhIDcuMC4KCkZvciB0aGUgYWR2aWNlIG9uIHVwZ3JhZGluZyBmcm9tIDIueCB0byAzLngsIHNlZSB0aGUgZm9sbG93aW5nIHBhZ2U6CgogICAgaHR0cDovL2NvbW1vbnMuYXBhY2hlLm9yZy9sYW5nL2FydGljbGUzXzAuaHRtbAoKQXBhY2hlIENvbW1vbnMgTGFuZywgYSBwYWNrYWdlIG9mIEphdmEgdXRpbGl0eSBjbGFzc2VzIGZvciB0aGUKY2xhc3NlcyB0aGF0IGFyZSBpbiBqYXZhLmxhbmcncyBoaWVyYXJjaHksIG9yIGFyZSBjb25zaWRlcmVkIHRvIGJlIHNvCnN0YW5kYXJkIGFzIHRvIGp1c3RpZnkgZXhpc3RlbmNlIGluIGphdmEubGFuZy4KClRoaXMgcmVsZWFzZSBpcyBhIGJ1Z2ZpeCBmb3IgUmVzdG9yaW5nIEJ1bmRsZS1TeW1ib2xpY05hbWUgaW4gdGhlIE1BTklGRVNULm1mIGZpbGUuCgpDaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBpbmNsdWRlOgoKCkZpeGVkIEJ1Z3M6Cm8gTEFORy0xNDE5OiBSZXN0b3JlIEJ1bmRsZVN5bWJvbGljTmFtZSBmb3IgT1NHaQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIExhbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMy44CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMKCgpJTlRST0RVQ1RJT046CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMy44IHZlcnNpb24gb2YgQXBhY2hlIENvbW1vbnMgTGFuZy4KQ29tbW9ucyBMYW5nIGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIG9mIHVzZSBpbiBhbnkKSmF2YSBlbnZpcm9ubWVudC4KCkxhbmcgMy4wIGFuZCBvbndhcmRzIG5vdyB0YXJnZXRzIEphdmEgNy4wLCBtYWtpbmcgdXNlIG9mIGZlYXR1cmVzIHRoYXQgYXJyaXZlZCB3aXRoIEphdmEgNy4wLgoKRm9yIHRoZSBhZHZpY2Ugb24gdXBncmFkaW5nIGZyb20gMi54IHRvIDMueCwgc2VlIHRoZSBmb2xsb3dpbmcgcGFnZToKCiAgICBodHRwOi8vY29tbW9ucy5hcGFjaGUub3JnL2xhbmcvYXJ0aWNsZTNfMC5odG1sCgpBcGFjaGUgQ29tbW9ucyBMYW5nLCBhIHBhY2thZ2Ugb2YgSmF2YSB1dGlsaXR5IGNsYXNzZXMgZm9yIHRoZQpjbGFzc2VzIHRoYXQgYXJlIGluIGphdmEubGFuZydzIGhpZXJhcmNoeSwgb3IgYXJlIGNvbnNpZGVyZWQgdG8gYmUgc28Kc3RhbmRhcmQgYXMgdG8ganVzdGlmeSBleGlzdGVuY2UgaW4gamF2YS5sYW5nLgoKTmV3IGZlYXR1cmVzIGFuZCBidWcgZml4ZXMuIFJlcXVpcmVzIEphdmEgNywgc3VwcG9ydHMgSmF2YSA4LCA5LCAxMC4KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXM6Cm8gTEFORy0xMzUyOiBFbnVtVXRpbHMuZ2V0RW51bUlnbm9yZUNhc2UgYW5kIGlzVmFsaWRFbnVtSWdub3JlQ2FzZSBtZXRob2RzIGFkZGVkIFRoYW5rcyB0byBSdXNsYW4gU2liZ2F0dWxsaW4uCm8gTEFORy0xMzcyOiBBZGQgVG9TdHJpbmdTdW1tYXJ5IGFubm90YXRpb24gVGhhbmtzIHRvIFPpcmdpbyBPemFraS4KbyBMQU5HLTEzNTY6IEFkZCBieXBhc3Mgb3B0aW9uIGZvciBjbGFzc2VzIHRvIHJlY3Vyc2l2ZSBhbmQgcmVmbGVjdGl2ZSBFcXVhbHNCdWlsZGVyIFRoYW5rcyB0byBZYXRob3MgVUcuCm8gTEFORy0xMzkxOiBJbXByb3ZlIEphdmFkb2MgZm9yIFN0cmluZ1V0aWxzLmlzQW55RW1wdHkobnVsbCkgVGhhbmtzIHRvIFNhdXJvIE1hdHVsbGksIE9sZWcgQ2h1YmFyeW92LgpvIExBTkctMTM5MzogQWRkIEFQSSBTeXN0ZW1VdGlscy5TdHJpbmcgZ2V0RW52aXJvbm1lbnRWYXJpYWJsZShmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgU3RyaW5nIGRlZmF1bHRWYWx1ZSkgVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTEzOTQ6IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TeXN0ZW1VdGlscyBzaG91bGQgbm90IHdyaXRlIHRvIFN5c3RlbS5lcnIuIFRoYW5rcyB0byBTZWJiLCBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xMjM4OiBBZGQgUmVnZXhVdGlscyBjbGFzcyBpbnN0ZWFkIG9mIG92ZXJsb2FkaW5nIG1ldGhvZHMgaW4gU3RyaW5nVXRpbHMgdGhhdCB0YWtlIGEgcmVnZXggdG8gdGFrZSBwcmVjb21waWxlZCBQYXR0ZXJuLiBUaGFua3MgdG8gQ2hyaXN0b3BoZXIgQ29yZGVpcm8sIEdhcnkgR3JlZ29yeSwgQnJ1bm8gUC4gS2lub3NoaXRhLCBPbGVnIENodWJhcnlvdi4KbyBMQU5HLTEzOTA6IFN0cmluZ1V0aWxzLmpvaW4oKSB3aXRoIHN1cHBvcnQgZm9yIExpc3Q8Pz4gd2l0aCBjb25maWd1cmFibGUgc3RhcnQvZW5kIGluZGljZXMuIFRoYW5rcyB0byBKb2NoZW4gU2NoYWxhbmRhLgpvIExBTkctMTM5MjogTWV0aG9kcyBmb3IgZ2V0dGluZyBmaXJzdCBub24gZW1wdHkgb3Igbm9uIGJsYW5rIHZhbHVlIFRoYW5rcyB0byBKZWZmIE5lbHNvbi4KbyBMQU5HLTE0MDg6IFJvdW5kaW5nIHV0aWxpdGllcyBmb3IgY29udmVydGluZyB0byBCaWdEZWNpbWFsCgpGaXhlZCBCdWdzOgpvIExBTkctMTM4MDogRmFzdERhdGVQYXJzZXIgdG9vIHN0cmljdCBvbiBhYmJyZXZpYXRlZCBzaG9ydCBtb250aCBzeW1ib2xzIFRoYW5rcyB0byBNYXJrdXMgSmVsc21hLgpvIExBTkctMTM5NjogSnNvblRvU3RyaW5nU3R5bGUgZG9lcyBub3QgZXNjYXBlIHN0cmluZyBuYW1lcwpvIExBTkctMTM5NTogSnNvblRvU3RyaW5nU3R5bGUgZG9lcyBub3QgZXNjYXBlIGRvdWJsZSBxdW90ZSBpbiBhIHN0cmluZyB2YWx1ZSBUaGFua3MgdG8gSmltIEdhbi4KbyBMQU5HLTEzODQ6IE5ldyBKYXZhIHZlcnNpb24gKCIxMSIpIG11c3QgYmUgaGFuZGxlZCBUaGFua3MgdG8gSWFuIFlvdW5nLgpvIExBTkctMTM2NDogRXhjZXB0aW9uVXRpbHMjZ2V0Um9vdENhdXNlKFRocm93YWJsZSB0KSBzaG91bGQgcmV0dXJuIHQgaWYgbm8gbG93ZXIgbGV2ZWwgY2F1c2UgZXhpc3RzIFRoYW5rcyB0byBaaGVuZyBYaWUuCm8gTEFORy0xMDYwOiBOdW1iZXJVdGlscy5pc051bWJlciBhc3N1bWVzIG51bWJlciBzdGFydGluZyB3aXRoIFplcm8gVGhhbmtzIHRvIFBpb3RyIEtvc21hbGEuCm8gTEFORy0xMzc1OiBkZWZhdWx0U3RyaW5nKGZpbmFsIFN0cmluZyBzdHIpIGluIFN0cmluZ1V0aWxzIHRvIHJldXNlIGRlZmF1bHRTdHJpbmcoZmluYWwgU3RyaW5nIHN0ciwgZmluYWwgU3RyaW5nIGRlZmF1bHRTdHIpIFRoYW5rcyB0byBKZXJyeSBaaGFvLgpvIExBTkctMTM3NDogUGFyc2luZyBKc29uIEFycmF5IGZhaWxlZCBUaGFua3MgdG8gSmFzd2FudGggQmFsYS4KbyBMQU5HLTEzNzE6IEZpeCBUeXBlVXRpbHMjcGFyYW1ldGVyaXplIHRvIHdvcmsgY29ycmVjdGx5IHdpdGggbmFycm93ZXItdHlwZWQgYXJyYXkgVGhhbmtzIHRvIERtaXRyeSBPdmNoaW5uaWtvdi4KbyBMQU5HLTEzNzA6IEZpeCBFdmVudENvdW50Q2lyY3VpdEJyZWFrZXIgaW5jcmVtZW50IGJhdGNoIFRoYW5rcyB0byBBbmRyZSBEaWViLgpvIExBTkctMTM4NTogTnVtYmVyVXRpbHMuY3JlYXRlTnVtYmVyKCkgdGhyb3dzIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaW5zdGVhZCBvZiBOdW1iZXJGb3JtYXRFeGNlcHRpb24gVGhhbmtzIHRvIFJvaGFuIFBhZGh5ZS4KbyBMQU5HLTEzOTc6IFdvcmRVdGlscy53cmFwIHRocm93cyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIHdoZW4gd3JhcExlbmd0aCBpcyBJbnRlZ2VyLk1BWF9WQUxVRS4gVGhhbmtzIHRvIFRha2Fub2J1IEFzYW51bWEuCm8gTEFORy0xNDAxOiBUeXBvIGluIEphdmFEb2MgZm9yIGxhc3RJbmRleE9mIFRoYW5rcyB0byBSb21hbiBHb2x5c2hldiwgQWxleCBNYW1lZG92LgoKQ2hhbmdlczoKbyBMQU5HLTEzNjc6IE9iamVjdFV0aWxzLmlkZW50aXR5VG9TdHJpbmcoT2JqZWN0KSBhbmQgZnJpZW5kcyBzaG91bGQgYWxsb2NhdGUgYnVpbGRlcnMgYW5kIGJ1ZmZlcnMgd2l0aCBhIHNpemUgVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTE0MDU6IFJlbW92ZSBjaGVja3MgZm9yIGphdmEgdmVyc2lvbnMgYmVsb3cgdGhlIG1pbmltdW0gc3VwcG9ydGVkIG9uZSBUaGFua3MgdG8gTGFycyBHcmVmZXIuCm8gTEFORy0xNDAyOiBOdWxsL2luZGV4IHNhZmUgZ2V0IG1ldGhvZHMgZm9yIEFycmF5VXRpbHMgVGhhbmtzIHRvIE1hcmsgRGFjZWsuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIENvbW1vbnMgTGFuZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcwoKCklOVFJPRFVDVElPTjoKClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAzLjcgdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucyBMYW5nLgpDb21tb25zIExhbmcgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGFueQpKYXZhIGVudmlyb25tZW50LgoKTGFuZyAzLjAgYW5kIG9ud2FyZHMgbm93IHRhcmdldHMgSmF2YSA1LjAsIG1ha2luZyB1c2Ugb2YgZmVhdHVyZXMgdGhhdCBhcnJpdmVkIHdpdGggSmF2YSA1LjAgc3VjaCBhcyBnZW5lcmljcywKdmFyaWFibGUgYXJndW1lbnRzLCBhdXRvYm94aW5nLCBjb25jdXJyZW5jeSBhbmQgZm9ybWF0dGVkIG91dHB1dC4KCkZvciB0aGUgYWR2aWNlIG9uIHVwZ3JhZGluZyBmcm9tIDIueCB0byAzLngsIHNlZSB0aGUgZm9sbG93aW5nIHBhZ2U6CgogICAgaHR0cDovL2NvbW1vbnMuYXBhY2hlLm9yZy9sYW5nL2FydGljbGUzXzAuaHRtbAoKQXBhY2hlIENvbW1vbnMgTGFuZywgYSBwYWNrYWdlIG9mIEphdmEgdXRpbGl0eSBjbGFzc2VzIGZvciB0aGUKY2xhc3NlcyB0aGF0IGFyZSBpbiBqYXZhLmxhbmcncyBoaWVyYXJjaHksIG9yIGFyZSBjb25zaWRlcmVkIHRvIGJlIHNvCnN0YW5kYXJkIGFzIHRvIGp1c3RpZnkgZXhpc3RlbmNlIGluIGphdmEubGFuZy4KCk5ldyBmZWF0dXJlcyBhbmQgYnVnIGZpeGVzLiBSZXF1aXJlcyBKYXZhIDcsIHN1cHBvcnRzIEphdmEgOCwgOSwgMTAuCgpDaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBpbmNsdWRlOgoKTmV3IGZlYXR1cmVzOgpvIExBTkctMTM1NTogVGltZVpvbmUuZ2V0VGltZVpvbmUoKSBpbiBGYXN0RGF0ZVBhcnNlciBjYXVzZXMgcmVzb3VyY2UgY29udGVudGlvbiAoUFIgIzI5Ni4pIFRoYW5rcyB0byBDaGFzIEhvbnRvbi4KbyBMQU5HLTEzNjA6IEFkZCBtZXRob2RzIHRvIE9iamVjdFV0aWxzIHRvIGdldCB2YXJpb3VzIGZvcm1zIG9mIGNsYXNzIG5hbWVzIGluIGEgbnVsbC1zYWZlIG1hbm5lciBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoKRml4ZWQgQnVnczoKbyBMQU5HLTEzNjI6IEZpeCB0ZXN0cyBEYXRlVXRpbHNUZXN0IGZvciBKYXZhIDkgd2l0aCBlbl9HQiBsb2NhbGUgVGhhbmtzIHRvIFN0ZXBoZW4gQ29sZWJvdXJuZS4KbyBMQU5HLTEzNjU6IEZpeCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpbiBpc0phdmFWZXJzaW9uQXRMZWFzdCBvbiBKYXZhIDEwLCBhZGQgU3lzdGVtVXRpbHMuSVNfSkFWQV8xMCwgYWRkIEphdmFWZXJzaW9uLkpBVkFfMTAgVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTEzNDg6IFN0YWNrT3ZlcmZsb3dFcnJvciBvbiBUeXBlVXRpbHMudG9TdHJpbmcoLi4uKSBmb3IgYSBnZW5lcmljIHJldHVybiB0eXBlIG9mIEVudW0udmFsdWVPZiBUaGFua3MgdG8gbWJ1c3NvLgpvIExBTkctMTM1MDogQ29uc3RydWN0b3JVdGlscy5pbnZva2VDb25zdHJ1Y3RvcihDbGFzcywgT2JqZWN0Li4uKSByZWdyZXNzaW9uIFRoYW5rcyB0byBCcmV0dCBLYWlsLgpvIExBTkctMTM0OTogRXF1YWxzQnVpbGRlciNpc1JlZ2lzdGVyZWQ6IHN3YXBwZWRQYWlyIGNvbnN0cnVjdGlvbiBidWcgVGhhbmtzIHRvIE5hbWFuIE5pZ2FtLgpvIExBTkctMTM1Nzogb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnRpbWUuRmFzdERhdGVQYXJzZXIgc2hvdWxkIHVzZSB0b1VwcGVyQ2FzZShMb2NhbGUpIFRoYW5rcyB0byBCcnVjZUt1aUxpdS4KCkNoYW5nZXM6Cm8gTEFORy0xMzU4OiBJbXByb3ZlIFN0cmluZ1V0aWxzI3JlcGxhY2UgdGhyb3VnaHB1dCBUaGFua3MgdG8gU3RlcGhhbmUgTGFuZGVsbGUuCm8gTEFORy0xMzQ2OiBSZW1vdmUgZGVwcmVjYXRpb24gZnJvbSBSYW5kb21TdHJpbmdVdGlscwpvIExBTkctMTM2MTogRXhjZXB0aW9uVXRpbHMuZ2V0VGhyb3dhYmxlTGlzdCgpIGlzIHVzaW5nIGRlcHJlY2F0ZWQgRXhjZXB0aW9uVXRpbHMuZ2V0Q2F1c2UoKSBUaGFua3MgdG8gQW5hLgoKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBMYW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMuNgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgoKSU5UUk9EVUNUSU9OOgoKVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhlIDMuNiB2ZXJzaW9uIG9mCkFwYWNoZSBDb21tb25zIExhbmcgYXMgd2VsbCBhcyBhIGhpc3RvcnkgYWxsIGNoYW5nZXMgaW4gdGhlIENvbW1vbnMgTGFuZyAzLngKcmVsZWFzZSBsaW5lLiBDb21tb25zIExhbmcgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlCmNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGFueSBKYXZhIGVudmlyb25tZW50LiBDb21tb25zIExhbmcgMy42IGF0CmxlYXN0IHJlcXVpcmVzIEphdmEgNy4wLiBOb3RlIHRoYXQgdGhpcyBoYXMgY2hhbmdlZCBmcm9tIENvbW1vbnMgTGFuZyAzLjUsIHdoaWNoCm9ubHkgcmVxdWlyZWQgSmF2YSAxLjYuCgpGb3IgdGhlIGFkdmljZSBvbiB1cGdyYWRpbmcgZnJvbSAyLnggdG8gMy54LCBzZWUgdGhlIGZvbGxvd2luZyBwYWdlOgoKICAgIGh0dHA6Ly9jb21tb25zLmFwYWNoZS5vcmcvbGFuZy9hcnRpY2xlM18wLmh0bWwKCkhJR0hMSUdIVFMKPT09PT09PT09PQoKU29tZSBvZiB0aGUgaGlnaGxpZ2h0cyBpbiB0aGlzIHJlbGVhc2UgaW5jbHVkZToKCm8gVGhlIGNsYXNzIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5jb25jdXJyZW50Lk1lbW9pemVyIGlzIGFuIGltcGxlbWVudGF0aW9uCiAgICBvZiB0aGUgTWVtb2l6ZXIgcGF0dGVybiBhcyBzaG93biBpbgogICAgR29ldHosIEJyaWFuIGV0IGFsLiAoMjAwNikgLSBKYXZhIENvbmN1cnJlbmN5IGluIFByYWN0aWNlLCBwLiAxMDguCm8gVGhlIGNsYXNzIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5BcmNoVXRpbHMgaGFzIGJlZW4gYWRkZWQuIEFyY2hVdGlscyBpcwogICAgYSB1dGlsaXR5IGNsYXNzIGZvciB0aGUgIm9zLmFyY2giIHN5c3RlbSBwcm9wZXJ0eS4KCkRFUFJFQ0FUSU9OUwo9PT09PT09PT09PT0KClRoZSBBcGFjaGUgQ29tbW9ucyBDb21tdW5pdHkgaGFzIHJlY2VudGx5IHNldCB1cCB0aGUgQ29tbW9ucyBUZXh0IGNvbXBvbmVudAphcyBhIGhvbWUgZm9yIGFsZ29yaXRobXMgd29ya2luZyBvbiBzdHJpbmdzLiBGb3IgdGhpcyByZWFzb24gbW9zdCBvZiB0aGUgc3RyaW5nCmZvY3VzZWQgZnVuY3Rpb25hbGl0eSBpbiBDb21tb25zIExhbmcgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgbW92ZWQgdG8KQ29tbW9ucyBUZXh0LiBUaGlzIGluY2x1ZGVzOgoKbyBBbGwgY2xhc3NlcyBpbiB0aGUgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnRleHQgYW5kIHRoZQogICAgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnRleHQudHJhbnNsYXRlIHBhY2thZ2VzCm8gb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN0cmluZ0VzY2FwZVV0aWxzCm8gb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlJhbmRvbVN0cmluZ1V0aWxzCm8gVGhlIG1ldGhvZHMgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN0cmluZ1V0aWxzLmdldEphcm9XaW5rbGVyRGlzdGFuY2UgYW5kCiAgICBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3RyaW5nVXRpbHMuZ2V0TGV2ZW5zaHRlaW5EaXN0YW5jZQoKRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBDb21tb25zIFRleHQgd2Vic2l0ZToKCiAgICBodHRwOi8vY29tbW9ucy5hcGFjaGUub3JnL3RleHQKClRoZSBjbGFzcyBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuQ2hhckVuY29kaW5nIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YKamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzLgoKVGhlIGZvbGxvd2luZyBtZXRob2RzIGhhdmUgYmVlbiBkZXByZWNhdGVkIGluCm9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5BcnJheVV0aWxzIGluIGZhdm9yIG9mIHRoZSBjb3JyZXNwb25kaW5nIGluc2VydAptZXRob2RzLiBOb3RlIHRoYXQgdGhlIGhhbmRsaW5nIGZvciBudWxsIGlucHV0cyBkaWZmZXJzIGJldHdlZW4gYWRkIGFuZCBpbnNlcnQuCgpvIGFkZChib29sZWFuW10sIGludCwgYm9vbGVhbikgLT4gaW5zZXJ0KGludCwgYm9vbGVhbltdLCBib29sZWFuLi4uKQpvIGFkZChieXRlW10sIGludCwgYm9vbGVhbikgICAgLT4gaW5zZXJ0KGludCwgYnl0ZVtdLCBieXRlLi4uKQpvIGFkZChjaGFyW10sIGludCwgYm9vbGVhbikgICAgLT4gaW5zZXJ0KGludCwgY2hhcltdLCBjaGFyLi4uKQpvIGFkZChkb3VibGVbXSwgaW50LCBib29sZWFuKSAgLT4gaW5zZXJ0KGludCwgZG91YmxlW10sIGRvdWJsZS4uLikKbyBhZGQoZmxvYXRbXSwgaW50LCBib29sZWFuKSAgIC0+IGluc2VydChpbnQsIGZsb2F0W10sIGZsb2F0Li4uKQpvIGFkZChpbnRbXSwgaW50LCBib29sZWFuKSAgICAgLT4gaW5zZXJ0KGludCwgaW50W10sIGludC4uLikKbyBhZGQobG9uZ1tdLCBpbnQsIGJvb2xlYW4pICAgIC0+IGluc2VydChpbnQsIGxvbmdbXSwgbG9uZy4uLikKbyBhZGQoc2hvcnRbXSwgaW50LCBib29sZWFuKSAgIC0+IGluc2VydChpbnQsIHNob3J0W10sIHNob3J0Li4uKQpvIGFkZChUW10sIGludCwgYm9vbGVhbikgICAgICAgLT4gaW5zZXJ0KGludCwgVFtdLCBULi4uKQoKCkNPTVBBVElCSUxJVFkgV0lUSCBKQVZBIDkKPT09PT09PT09PT09PT09PT09CgpUaGUgTUFOSUZFU1QuTUYgbm93IGNvbnRhaW5zIGFuIGFkZGl0aW9uYWwgZW50cnk6CgogIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmFwYWNoZS5jb21tb25zLmxhbmczCgpUaGlzIHNob3VsZCBtYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSBDb21tb25zIExhbmcgMy42IGFzIGEgbW9kdWxlIGluIHRoZSBKYXZhIDkKbW9kdWxlIHN5c3RlbS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBjb3JyZXNwb25kaW5nIGlzc3VlIGFuZCB0aGUKcmVmZXJlbmNlZCBtYWlsaW5nIGxpc3QgZGlzY3Vzc2lvbnM6CgogICAgaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9MQU5HLTEzMzgKClRoZSBidWlsZCBwcm9ibGVtcyBwcmVzZW50IGluIHRoZSAzLjUgcmVsZWFzZSBoYXZlIGJlZW4gcmVzb2x2ZWQuIEJ1aWxkaW5nCkNvbW1vbnMgTGFuZyAzLjYgc2hvdWxkIHdvcmsgb3V0IG9mIHRoZSBib3ggd2l0aCB0aGUgbGF0ZXN0IEphdmEgOSBFQSBidWlsZC4KUGxlYXNlIHJlcG9ydCBhbnkgSmF2YSA5IHJlbGF0ZWQgaXNzdWVzIGF0OgoKICAgIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvTEFORwoKTkVXIEZFQVRVUkVTCj09PT09PT09PT09PQoKbyBMQU5HLTEzMzY6IEFkZCBOVUwgQnl0ZSBUbyBDaGFyVXRpbHMuIFRoYW5rcyB0byBCZWx1Z2EgQmVoci4KbyBMQU5HLTEzMDQ6IEFkZCBtZXRob2QgaW4gU3RyaW5nVXRpbHMgdG8gZGV0ZXJtaW5lIGlmIHN0cmluZyBjb250YWlucyBib3RoCiAgICAgICAgICAgICBtaXhlZCBjYXNlZCBjaGFyYWN0ZXJzLiBUaGFua3MgdG8gQW5keSBLbGltY3phay4KbyBMQU5HLTEzMjU6IEluY3JlYXNlIHRlc3QgY292ZXJhZ2Ugb2YgVG9TdHJpbmdCdWlsZGVyIGNsYXNzIHRvIDEwMCUuCiAgICAgICAgICAgICBUaGFua3MgdG8gQXJzaGFkIEJhc2hhLgpvIExBTkctMTMwNzogQWRkIGEgbWV0aG9kIGluIFN0cmluZ1V0aWxzIHRvIGV4dHJhY3Qgb25seSBkaWdpdHMgb3V0IG9mIGlucHV0CiAgICAgICAgICAgICBzdHJpbmcuIFRoYW5rcyB0byBBcnNoYWQgQmFzaGEuCm8gTEFORy0xMjU2OiBBZGQgSk1IIG1hdmVuIGRlcGVuZGVuY2llcy4gVGhhbmtzIHRvIEMwcldpbi4KbyBMQU5HLTExNjc6IEFkZCBudWxsIGZpbHRlciB0byBSZWZsZWN0aW9uVG9TdHJpbmdCdWlsZGVyLgogICAgICAgICAgICAgVGhhbmtzIHRvIE1hcmsgRGFjZWsuCm8gTEFORy0xMjk5OiBBZGQgbWV0aG9kIGZvciBjb252ZXJ0aW5nIHN0cmluZyB0byBhbiBhcnJheSBvZiBjb2RlIHBvaW50cy4KbyBMQU5HLTY2MDogIEFkZCBtZXRob2RzIHRvIGluc2VydCBhcnJheXMgaW50byBhcnJheXMgYXQgYW4gaW5kZXguCm8gTEFORy0xMDM0OiBBZGQgc3VwcG9ydCBmb3IgcmVjdXJzaXZlIGNvbXBhcmlzb24gdG8KICAgICAgICAgICAgIEVxdWFsc0J1aWxkZXIjcmVmbGVjdGlvbkVxdWFscy4gVGhhbmtzIHRvIFlhdGhvcyBVRy4KbyBMQU5HLTEwNjc6IEFkZCBhIHJlZmxlY3Rpb24tYmFzZWQgdmFyaWFudCBvZiBEaWZmQnVpbGRlci4KbyBMQU5HLTc0MDogIEltcGxlbWVudGF0aW9uIG9mIGEgTWVtb21pemVyLiBUaGFua3MgdG8gSmFtZXMgU2F3bGUuCm8gTEFORy0xMjU4OiBBZGQgQXJyYXlVdGlscyN0b1N0cmluZ0FycmF5IG1ldGhvZC4KICAgICAgICAgICAgIFRoYW5rcyB0byBJRywgR3J6ZWdvcnogUm8/bmllY2tpLgpvIExBTkctMTE2MDogU3RyaW5nVXRpbHMjYWJicmV2aWF0ZSBzaG91bGQgc3VwcG9ydCAnY3VzdG9tIGVsbGlwc2VzJyBwYXJhbWV0ZXIuCm8gTEFORy0xMjkzOiBBZGQgU3RyaW5nVXRpbHMjaXNBbGxFbXB0eSBhbmQgI2lzQWxsQmxhbmsgbWV0aG9kcy4KICAgICAgICAgICAgIFRoYW5rcyB0byBQaWVycmUgVGVtcGxpZXIsIE1hcnRpbiBUYXJqYW55aS4KbyBMQU5HLTEzMTM6IEFkZCBBcmNoVXRpbHMgLSBBbiB1dGlsaXR5IGNsYXNzIGZvciB0aGUgIm9zLmFyY2giIHN5c3RlbSBwcm9wZXJ0eS4KICAgICAgICAgICAgIFRoYW5rcyB0byBUb21zY2hpLgpvIExBTkctMTI3MjogQWRkIHNodWZmbGUgbWV0aG9kcyB0byBBcnJheVV0aWxzLgpvIExBTkctMTMxNzogQWRkIE1ldGhvZFV0aWxzI2ZpbmRBbm5vdGF0aW9uIGFuZCBleHRlbmQKICAgICAgICAgICAgIE1ldGhvZFV0aWxzI2dldE1ldGhvZHNXaXRoQW5ub3RhdGlvbiBmb3Igbm9uLXB1YmxpYywgc3VwZXItY2xhc3MKICAgICAgICAgICAgIGFuZCBpbnRlcmZhY2UgbWV0aG9kcy4gVGhhbmtzIHRvIFlhc3NlciBaYW1hbmkuCm8gTEFORy0xMzMxOiBBZGQgSW1tdXRhYmxlUGFpci5udWxsUGFpcigpLgpvIExBTkctMTMzMjogQWRkIEltbXV0YWJsZVRyaXBsZS5udWxsVHJpcGxlKCkuCgpGSVhFRCBCVUdTCj09PT09PT09PT0KCm8gTEFORy0xMzM3OiBGaXggdGVzdCBmYWlsdXJlcyBpbiBJQk0gSkRLIDggZm9yIFRvU3RyaW5nQnVpbGRlclRlc3QuCm8gTEFORy0xMzE5OiBNdWx0aWxpbmVSZWN1cnNpdmVUb1N0cmluZ1N0eWxlIFN0YWNrT3ZlcmZsb3dFcnJvciB3aGVuIG9iamVjdCBpcwogICAgICAgICAgICAgYW4gYXJyYXkuCm8gTEFORy0xMzIwOiBMb2NhbGVVdGlscyN0b0xvY2FsZSBkb2VzIG5vdCBzdXBwb3J0IGxhbmd1YWdlIGZvbGxvd2VkIGJ5IFVOIE0uNDkKICAgICAgICAgICAgIG51bWVyaWMtMyBhcmVhIGNvZGUgZm9sbG93ZWQgYnkgdmFyaWFudC4KbyBMQU5HLTEzMDA6IENsYXJpZnkgb3IgaW1wcm92ZSBiZWhhdmlvdXIgb2YgaW50LWJhc2VkIGluZGV4T2YgbWV0aG9kcyBpbgogICAgICAgICAgICAgU3RyaW5nVXRpbHMuIFRoYW5rcyB0byBNYXJrIERhY2VrLgpvIExBTkctMTI4NjogUmFuZG9tU3RyaW5nVXRpbHMgcmFuZG9tIG1ldGhvZCBjYW4gb3ZlcmZsb3cgYW5kIHJldHVybiBjaGFyYWN0ZXJzCiAgICAgICAgICAgICBvdXRzaWRlIG9mIHNwZWNpZmllZCByYW5nZS4KbyBMQU5HLTEyOTI6IFdvcmRVdGlscy53cmFwIHRocm93cyBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uLgpvIExBTkctMTI4NzogUmFuZG9tU3RyaW5nVXRpbHMjcmFuZG9tIGNhbiBlbnRlciBpbmZpbml0ZSBsb29wIGlmIGVuZCBwYXJhbWV0ZXIKICAgICAgICAgICAgIGlzIHRvIHNtYWxsLiBUaGFua3MgdG8gSXZhbiBNb3Jvem92LgpvIExBTkctMTI4NTogTnVsbFBvaW50ZXJFeGNlcHRpb24gaW4gRmFzdERhdGVQYXJzZXIkVGltZVpvbmVTdHJhdGVneS4KICAgICAgICAgICAgIFRoYW5rcyB0byBGcmFuY2VzY28gQ2hpY2NoaXJpY2PyLgpvIExBTkctMTI4MTogSmF2YWRvYyBvZiBTdHJpbmdVdGlscy5vcmRpbmFsSW5kZXhPZiBpcyBjb250cmFkaWN0b3J5LgogICAgICAgICAgICAgVGhhbmtzIHRvIEFuZHJlYXMgTHVuZGJsYWQuCm8gTEFORy0xMTg4OiBTdHJpbmdVdGlscyNqb2luKFQuLi4pOiB3YXJuaW5nOiBbdW5jaGVja2VkXSBQb3NzaWJsZSBoZWFwCiAgICAgICAgICAgICBwb2xsdXRpb24gZnJvbSBwYXJhbWV0ZXJpemVkIHZhcmFyZyB0eXBlIFQuCm8gTEFORy0xMTQ0OiBNdWx0aXBsZSBjYWxscyBvZgogICAgICAgICAgICAgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLmNvbmN1cnJlbnQuTGF6eUluaXRpYWxpemVyLmluaXRpYWxpemUoKQogICAgICAgICAgICAgYXJlIHBvc3NpYmxlLiBUaGFua3MgdG8gV2FsZGVtYXIgTWFpZXIsIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTEyNzY6IFN0ckJ1aWxkZXIjcmVwbGFjZUFsbCBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24uCiAgICAgICAgICAgICBUaGFua3MgdG8gQW5keSBLbGltY3phay4KbyBMQU5HLTEyNzg6IEJvb2xlYW5VdGlscyBqYXZhZG9jIGlzc3Vlcy4gVGhhbmtzIHRvIER1a2UgWWluLgpvIExBTkctMTA3MDogQXJyYXlVdGlscyNhZGQgY29uZnVzaW5nIGV4YW1wbGUgaW4gamF2YWRvYy4KICAgICAgICAgICAgIFRoYW5rcyB0byBQYXVsIFBvZ29ueXNoZXYuCm8gTEFORy0xMjcxOiBTdHJpbmdVdGlscyNpc0FueUVtcHR5IGFuZCAjaXNBbnlCbGFuayBzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBhbgogICAgICAgICAgICAgZW1wdHkgYXJyYXkuIFRoYW5rcyB0byBQaWVycmUgVGVtcGxpZXIuCm8gTEFORy0xMTU1OiBBZGQgU3RyaW5nVXRpbHMjdW53cmFwLiBUaGFua3MgdG8gU2FpZiBBc2lmLCBUaGlhZ28gQW5kcmFkZS4KbyBMQU5HLTEzMTE6IFR5cGVVdGlscy50b1N0cmluZygpIGRvZXNuJ3QgaGFuZGxlIHByaW1pdGl2ZSBhbmQgT2JqZWN0IGFycmF5cwogICAgICAgICAgICAgY29ycmVjdGx5LiBUaGFua3MgdG8gQWFyb24gRGlndWxsYS4KbyBMQU5HLTEzMTI6IExvY2FsZVV0aWxzI3RvTG9jYWxlIGRvZXMgbm90IHN1cHBvcnQgbGFuZ3VhZ2UgZm9sbG93ZWQgYnkgVU4gTS40OQogICAgICAgICAgICAgbnVtZXJpYy0zIGFyZWEgY29kZS4KbyBMQU5HLTEyNjU6IEJ1aWxkIGZhaWx1cmVzIHdoZW4gYnVpbGRpbmcgd2l0aCBKYXZhIDkgRUEuCm8gTEFORy0xMzE0OiBqYXZhZG9jIGNyZWF0aW9uIGJyb2tlbiB3aXRoIEphdmEgOC4gVGhhbmtzIHRvIEFsbG9uIE11cmllbmlrLgpvIExBTkctMTMxMDogTWV0aG9kVXRpbHMuaW52b2tlTWV0aG9kIHRocm93cyBBcnJheVN0b3JlRXhjZXB0aW9uIGlmIHVzaW5nCiAgICAgICAgICAgICB2YXJhcmdzIGFyZ3VtZW50cyBhbmQgc21hbGxlciB0eXBlcyB0aGFuIHRoZSBtZXRob2QgZGVmaW5lcy4KICAgICAgICAgICAgIFRoYW5rcyB0byBEb24gSmViYS4KCkNIQU5HRVMKPT09PT09PQoKbyBMQU5HLTEzMzg6IEFkZCBBdXRvbWF0aWMtTW9kdWxlLU5hbWUgTUFOSUZFU1QgZW50cnkgZm9yIEphdmEgOQogICAgICAgICAgICAgY29tcGF0aWJpbGl0eS4KbyBMQU5HLTEzMzQ6IERlcHJlY2F0ZSBDaGFyRW5jb2RpbmcgaW4gZmF2b3VyIG9mCiAgICAgICAgICAgICBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHMuCm8gTEFORy0xMTEwOiBJbXBsZW1lbnQgSGFzaFNldHZCaXRTZXRUZXN0IHVzaW5nIEpNSC4KICAgICAgICAgICAgIFRoYW5rcyB0byBCcnVubyBQLiBLaW5vc2hpdGEuCm8gTEFORy0xMjkwOiBJbmNyZWFzZSB0ZXN0IGNvdmVyYWdlIG9mIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5BcnJheVV0aWxzLgogICAgICAgICAgICAgVGhhbmtzIHRvIEFuZHJpaSBBYnJhbW92LgpvIExBTkctMTI3NDogU3RyU3Vic3RpdHV0b3Igc2hvdWxkIHN0YXRlIGl0cyB0aHJlYWQgc2FmZXR5LgpvIExBTkctMTI3NzogU3RyaW5nVXRpbHMjZ2V0TGV2ZW5zaHRlaW5EaXN0YW5jZSByZWR1Y2UgbWVtb3J5IGNvbnN1bXB0aW9uLgogICAgICAgICAgICAgVGhhbmtzIHRvIHl1ZmN1eS4KbyBMQU5HLTEyNzk6IFVwZGF0ZSBKYXZhIHJlcXVpcmVtZW50IGZyb20gSmF2YSA2IHRvIDcuCm8gTEFORy0xMTQzOiBTdHJpbmdVdGlscyBzaG91bGQgdXNlIHRvWHh4eENhc2UoaW50KSByYXRoZXIgdGhhbgogICAgICAgICAgICAgdG9YeHh4Q2FzZShjaGFyKS4gVGhhbmtzIHRvIHNlYmIuCm8gTEFORy0xMjk3OiBBZGQgU3lzdGVtVXRpbHMuZ2V0SG9zdE5hbWUoKSBBUEkuCm8gTEFORy0xMzAxOiBNb3ZpbmcgYXBhY2hlLXJhdC1wbHVnaW4gY29uZmlndXJhdGlvbiBpbnRvIHBsdWdpbk1hbmFnZW1lbnQuCiAgICAgICAgICAgICBUaGFua3MgdG8gS2FybCBIZWlueiBNYXJiYWlzZS4KbyBMQU5HLTEzMTY6IERlcHJlY2F0ZSBjbGFzc2VzL21ldGhvZHMgbW92ZWQgdG8gY29tbW9ucy10ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMy41CgoKSElHSExJR0hUUwo9PT09PT09PT09CgpTb21lIG9mIHRoZSBoaWdobGlnaHRzIGluIHRoaXMgcmVsZWFzZSBpbmNsdWRlOgoKbyBBZGRlZCBKYXZhIDkgZGV0ZWN0aW9uIHRvIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TeXN0ZW1VdGlscy4KbyBTdXBwb3J0IGZvciBzaGlmdGluZyBhbmQgc3dhcHBpbmcgZWxlbWVudHMgaW4KICAgIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5BcnJheVV0aWxzLgpvIE5ldyBtZXRob2RzIGZvciBnZW5lcmF0aW5nIHJhbmRvbSBzdHJpbmdzIGZyb20gZGlmZmVyZW50IGNoYXJhY3RlciBjbGFzc2VzCiAgICBpbmNsdWRpbmcgYWxwaGFiZXRpYywgYWxwaGEtbnVtZXJpYyBhbmQgQVNDSUkgYWRkZWQgdG8KICAgIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5SYW5kb21TdHJpbmdVdGlscy4KbyBOdW1lcm91cyBleHRlbnNpb25zIHRvIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdVdGlscyBpbmNsdWRpbmcKICAgIG51bGwgc2FmZSBjb21wYXJlIHZhcmlhbnRzLCBtb3JlIHJlbW92ZSBhbmQgcmVwbGFjZSB2YXJpYW50cywgcm90YXRpb24gYW5kCiAgICB0cnVuY2F0aW9uLgpvIEFkZGVkIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5UaHJlYWRVdGlscyAtIGEgdXRpbGl0eSBjbGFzcyB0byB3b3JrIHdpdGgKICAgIGluc3RhbmNlcyBvZiBqYXZhLmxhbmcuVGhyZWFkIGFuZCBqYXZhLmxhbmcuVGhyZWFkR3JvdXAuCm8gQWRkZWQgYW5ub3RhdGlvbnMgQEVxdWFsc0V4Y2x1ZGUsIEBIYXNoQ29kZUV4Y2x1ZGUgYW5kIEBUb1N0cmluZ0VjbHVkZSB0bwogICAgbWFyayBmaWVsZHMgd2hpY2ggc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlIHJlZmxlY3RpdmUgYnVpbGRlcnMgaW4gdGhlCiAgICBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuYnVpbGRlciBwYWNrYWdlLgpvIFN1cHBvcnQgZm9yIHZhcmlvdXMgbW9kaWZ5IGFuZCByZXRyaWV2ZSB2YWx1ZSB1c2UgY2FzZXMgYWRkZWQgdG8gdGhlIGNsYXNzZXMKICAgIGluIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5tdXRhYmxlLgoKQ09NUEFUSUJJTElUWQo9PT09PT09PT09PT09CgpBcGFjaGUgQ29tbW9ucyBMYW5nIDMuNSBpcyBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIHRoZSAzLjQgcmVsZWFzZS4gVXNlcnMKc2hvdWxkIG5vdCBleHBlcmllbmNlIGFueSBwcm9ibGVtcyB3aGVuIHVwZ3JhZGluZyBmcm9tIDMuNCB0byAzLjUuCgpUaGVyZSBoYXMgYmVlbiBhbiBhZGRpdGlvbiB0byB0aGUgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnRpbWUuRGF0ZVByaW50ZXIKaW50ZXJmYWNlOgoKbyBBZGRlZCBtZXRob2QgJ3B1YmxpYyBib29sZWFuIHBhcnNlKGphdmEubGFuZy5TdHJpbmcsIGphdmEudGV4dC5QYXJzZVBvc2l0aW9uLAogICAgamF2YS51dGlsLkNhbGVuZGFyKScKbyBBZGRlZCBtZXRob2QgJ3B1YmxpYyBqYXZhLmxhbmcuQXBwZW5kYWJsZSBmb3JtYXQobG9uZywgamF2YS5sYW5nLkFwcGVuZGFibGUpJwpvIEFkZGVkIG1ldGhvZCAncHVibGljIGphdmEubGFuZy5BcHBlbmRhYmxlIGZvcm1hdChqYXZhLnV0aWwuRGF0ZSwKICAgIGphdmEubGFuZy5BcHBlbmRhYmxlKScKbyBBZGRlZCBtZXRob2QgJ3B1YmxpYyBqYXZhLmxhbmcuQXBwZW5kYWJsZSBmb3JtYXQoamF2YS51dGlsLkNhbGVuZGFyLAogICAgamF2YS5sYW5nLkFwcGVuZGFibGUpJwoKRm9yIHRoaXMgcmVhc29uIDMuNSBpcyBub3Qgc3RyaWN0bHkgc291cmNlIGNvbXBhdGlibGUgdG8gMy40LiBTaW5jZSB0aGUKRGF0ZVByaW50ZXIgaW50ZXJmYWNlIGlzIG5vdCBtZWFudCB0byBiZSBpbXBsZW1lbnRlZCBieSBjbGllbnRzLCB0aGlzCmNoYW5nZSBpdCBub3QgY29uc2lkZXJlZCB0byBjYXVzZSBhbnkgcHJvYmxlbXMuCgpKQVZBIDkgU1VQUE9SVAo9PT09PT09PT09PT09PQoKSmF2YSA5IGludHJvZHVjZXMgYSBuZXcgdmVyc2lvbi1zdHJpbmcgc2NoZW1lLiBEZXRhaWxzIG9mIHRoaXMgbmV3IHNjaGVtZSBhcmUKZG9jdW1lbnRlZCBpbiBKRVAtMjIzIChodHRwOi8vb3Blbmpkay5qYXZhLm5ldC9qZXBzLzIyMykuIEluIG9yZGVyIHRvIHN1cHBvcnQKSkVQLTIyMyB0d28gY2xhc3NlcyBoYWQgdG8gYmUgY2hhbmdlZDoKCm8gb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLkphdmFWZXJzaW9uCiAgICBkZXByZWNhdGVkIGVudW0gY29uc3RhbnQgSkFWQV8xXzkKICAgIGludHJvZHVjZWQgZW51bSBjb25zdGFudCBKQVZBXzkKCm8gb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN5c3RlbVV0aWxzCiAgICBkZXByZWNhdGVkIGNvbnN0YW50IElTX0pBVkFfMV85CiAgICBpbnRyb2R1Y2VkIGNvbnN0YW50IElTX0pBVkFfOQoKRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIExBTkctMTE5NwooaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9MQU5HLTExOTcpLiBBbGwgb3RoZXIgQVBJcyBhcmUgZXhwZWN0ZWQKdG8gd29yayB3aXRoIEphdmEgOS4KCkJVSUxESU5HIE9OIEpBVkEgOQo9PT09PT09PT09PT09PT09PT0KCkphdmEgOCBpbnRyb2R1Y2VkIHRoZSBVbmljb2RlIENvbnNvcnRpdW0ncyBDb21tb24gTG9jYWxlIERhdGEgUmVwb3NpdG9yeSBhcwphbHRlcm5hdGl2ZSBzb3VyY2UgZm9yIGxvY2FsZSBkYXRhLiBKYXZhIDkgd2lsbCB1c2UgdGhlIENMRFIgcHJvdmlkZXIgYXMKZGVmYXVsdCBwcm92aWRlciBmb3IgbG9jYWxlIGRhdGEgKHNlZSBodHRwOi8vb3Blbmpkay5qYXZhLm5ldC9qZXBzLzI1MikuIFRoaXMKY2F1c2VzIGFuIG51bWJlciBvZiBsb2NhbGUtc2Vuc2l0aXZlIHRlc3QgaW4gQ29tbW9ucyBMYW5nIHRvIGZhaWwuIEluIG9yZGVyCnRvIGJ1aWxkIENvbW1vbnMgTGFuZyAzLjUgb24gSmF2YSA5LCB0aGUgbG9jYWxlIHByb3ZpZGVyIGhhcyB0byBiZSBzZXQgdG8KJ0pSRSc6CgogICAgbXZuIC1EamF2YS5sb2NhbGUucHJvdmlkZXJzPUpSRSBjbGVhbiBpbnN0YWxsCgpXZSBhcmUgY3VycmVudGx5IGludmVzdGlnYXRpbmcgd2F5cyB0byBzdXBwb3J0IGJ1aWxkaW5nIG9uIEphdmEgOSB3aXRob3V0CmZ1cnRoZXIgY29uZmlndXJhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOgpodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0xBTkctMTI2NQoKCk5FVyBGRUFUVVJFUwo9PT09PT09PT09PT09PQoKbyBMQU5HLTEyNzU6IEFkZGVkIGEgdHJ5QWNxdWlyZSgpIG1ldGhvZCB0byBUaW1lZFNlbWFwaG9yZS4KbyBMQU5HLTEyNTU6IEFkZCBEYXRlVXRpbHMudG9DYWxlbmRhcihEYXRlLCBUaW1lWm9uZSkuIFRoYW5rcyB0byBLYWl5dWFuIFdhbmcuCm8gTEFORy0xMDIzOiBBZGQgV29yZFV0aWxzLndyYXAgb3ZlcmxvYWQgd2l0aCBjdXN0b21pemFibGUgYnJlYWthYmxlIGNoYXJhY3Rlci4KICAgICAgICAgICAgIFRoYW5rcyB0byBNYXJrbyBCZWtodGEuCm8gTEFORy03ODc6ICBBZGQgbWV0aG9kIHJlbW92ZUlnbm9yZUNhc2UoU3RyaW5nLCBTdHJpbmcpIHRvIFN0cmluZ1V0aWxzLiBUaGFua3MKICAgICAgICAgICAgIHRvIEdva3VsIE5hbnRoYWt1bWFyIEMuCm8gTEFORy0xMjI0OiBFeHRlbmQgUmFuZG9tU3RyaW5nVXRpbHMgd2l0aCBtZXRob2RzIHRoYXQgZ2VuZXJhdGUgc3RyaW5ncwogICAgICAgICAgICAgYmV0d2VlbiBhIG1pbiBhbmQgbWF4IGxlbmd0aC4gVGhhbmtzIHRvIENhbGViIEN1c2hpbmcuCm8gTEFORy0xMjU3OiBBZGQgQVBJcyBTdHJpbmdVdGlscy53cmFwSWZNaXNzaW5nKFN0cmluZywgY2hhcnxTdHJpbmcpLiBUaGFua3MgdG8KICAgICAgICAgICAgIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTEyNTM6IEFkZCBSYW5kb21VdGlscyNuZXh0Qm9vbGVhbigpIG1ldGhvZC4gVGhhbmtzIHRvIGFkaWxlay4KbyBMQU5HLTEwODU6IEFkZCBhIGNpcmN1aXQgYnJlYWtlciBpbXBsZW1lbnRhdGlvbi4gVGhhbmtzIHRvIE9saXZlciBIZWdlciBhbmQKICAgICAgICAgICAgIEJydW5vIFAuIEtpbm9zaGl0YS4KbyBMQU5HLTEwMTM6IEFkZCBTdHJpbmdVdGlscy50cnVuY2F0ZSgpLiBUaGFua3MgdG8gVGhpYWdvIEFuZHJhZGUuCm8gTEFORy0xMTk1OiBFbmhhbmNlIE1ldGhvZFV0aWxzIHRvIGFsbG93IGludm9jYXRpb24gb2YgcHJpdmF0ZSBtZXRob2RzLiBUaGFua3MKICAgICAgICAgICAgIHRvIERlcmVrIEMuIEFzaG1vcmUuCm8gTEFORy0xMTg5OiBBZGQgZ2V0QW5kSW5jcmVtZW50L2dldEFuZERlY3JlbWVudC9nZXRBbmRBZGQvaW5jcmVtZW50QW5kR2V0LwogICAgICAgICAgICAgZGVjcmVtZW50QW5kR2V0L2FkZEFuZEdldCBpbiBNdXRhYmxlKiBjbGFzc2VzLiBUaGFua3MgdG8KICAgICAgICAgICAgIEhhaXlhbmcgTGkgYW5kIE1hdHRoZXcgQmFydGVuc2NobGFnLgpvIExBTkctMTIyNTogQWRkIFJhbmRvbVN0cmluZ1V0aWxzI3JhbmRvbUdyYXBoIGFuZCAjcmFuZG9tUHJpbnQgd2hpY2ggbWF0Y2gKICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgcmVndWxhciBleHByZXNzaW9uIGNsYXNzLiBUaGFua3MgdG8gQ2FsZWIgQ3VzaGluZy4KbyBMQU5HLTEyMjM6IEFkZCBTdG9wV2F0Y2gjZ2V0VGltZShUaW1lVW5pdCkuIFRoYW5rcyB0byBOaWNrIE1hbmxleS4KbyBMQU5HLTc4MTogIEFkZCBtZXRob2RzIHRvIE9iamVjdFV0aWxzIGNsYXNzIHRvIGNoZWNrIGZvciBudWxsIGVsZW1lbnRzIGluIHRoZQogICAgICAgICAgICAgYXJyYXkuIFRoYW5rcyB0byBLcnp5c3p0b2YgV29sbnkuCm8gTEFORy0xMjI4OiBQcmVmZXIgVGhyb3dhYmxlLmdldENhdXNlKCkgaW4gRXhjZXB0aW9uVXRpbHMuZ2V0Q2F1c2UoKS4KICAgICAgICAgICAgIFRoYW5rcyB0byBCcmFkIEhlc3MuCm8gTEFORy0xMjMzOiBEaWZmQnVpbGRlciBhZGQgbWV0aG9kIHRvIGFsbG93IGFwcGVuZGluZyBmcm9tIGEgRGlmZlJlc3VsdC4KICAgICAgICAgICAgIFRoYW5rcyB0byBOaWNrIE1hbmxleS4KbyBMQU5HLTExNjg6IEFkZCBTeXN0ZW1VdGlscy5JU19PU19XSU5ET1dTXzEwIHByb3BlcnR5LgogICAgICAgICAgICAgVGhhbmtzIHRvIFBhc2NhbCBTY2h1bWFjaGVyLgpvIExBTkctMTExNTogQWRkIHN1cHBvcnQgZm9yIHZhcmFyZ3MgaW4gQ29uc3RydWN0b3JVdGlscywgTWVtYmVyVXRpbHMsIGFuZAogICAgICAgICAgICAgTWV0aG9kVXRpbHMuIFRoYW5rcyB0byBKaW0gTGxveWQgYW5kIEpvZSBGZXJuZXIuCm8gTEFORy0xMTM0OiBBZGQgbWV0aG9kcyB0byBjaGVjayBudW1iZXJzIGFnYWluc3QgTmFOIGFuZCBpbmlmaW5pdGUgdG8KICAgICAgICAgICAgIFZhbGlkYXRlLiBUaGFua3MgdG8gQWxhbiBTbWl0aGVlLgpvIExBTkctMTIyMDogQWRkIHRlc3RzIGZvciBtaXNzZWQgYnJhbmNoZXMgaW4gRGF0ZVV0aWxzLgogICAgICAgICAgICAgVGhhbmtzIHRvIENhc2V5IFNjYXJib3JvdWdoLgpvIExBTkctMTE0Njogei9PUyBpZGVudGlmaWNhdGlvbiBpbiBTeXN0ZW1VdGlscy4KICAgICAgICAgICAgIFRoYW5rcyB0byBHYWJvciBMaXB0YWsuCm8gTEFORy0xMTkyOiBGYXN0RGF0ZUZvcm1hdCBzdXBwb3J0IG9mIHRoZSB3ZWVrLXllYXIgY29tcG9uZW50ICh1cHBlcmNhc2UgJ1knKS4KICAgICAgICAgICAgIFRoYW5rcyB0byBEb21pbmlrIFN0YWRsZXIuCm8gTEFORy0xMTY5OiBBZGQgU3RyaW5nVXRpbHMgbWV0aG9kcyB0byBjb21wYXJlIGEgc3RyaW5nIHRvIG11bHRpcGxlIHN0cmluZ3MuCiAgICAgICAgICAgICBUaGFua3MgdG8gUmFmYWwgR2xvd2luc2tpLCBSb2JlcnQgUGFyciBhbmQgQXJtYW4gU2hhcmlmLgpvIExBTkctMTE4NTogQWRkIHJlbW92ZSBieSByZWd1bGFyIGV4cHJlc3Npb24gbWV0aG9kcyBpbiBTdHJpbmdVdGlscy4KbyBMQU5HLTExMzk6IEFkZCByZXBsYWNlIGJ5IHJlZ3VsYXIgZXhwcmVzc2lvbiBtZXRob2RzIGluIFN0cmluZ1V0aWxzLgpvIExBTkctMTE3MTogQWRkIGNvbXBhcmUgbWV0aG9kcyBpbiBTdHJpbmdVdGlscy4KbyBMQU5HLTExNzQ6IEFkZCBzdWdhciB0byBSYW5kb21VdGlscy4gVGhhbmtzIHRvIFB1bmtyYXR6MzEyLgpvIExBTkctMTE1NDogRmFzdERhdGVGb3JtYXQgQVBJcyB0aGF0IHVzZSBhIFN0cmluZ0J1aWxkZXIuIFRoYW5rcyB0bwogICAgICAgICAgICAgR2FyeSBHcmVnb3J5LgpvIExBTkctMTE0OTogQWJpbGl0eSB0byB0aHJvdyBjaGVja2VkIGV4Y2VwdGlvbnMgd2l0aG91dCBkZWNsYXJpbmcgdGhlbS4gVGhhbmtzCiAgICAgICAgICAgICB0byBHcmVnb3J5IFphay4KbyBMQU5HLTExNTM6IEltcGxlbWVudCBQYXJzZVBvc2l0aW9uIGFwaSBmb3IgRmFzdERhdGVQYXJzZXIuCm8gTEFORy0xMTM3OiBBZGQgY2hlY2sgZm9yIGR1cGxpY2F0ZSBldmVudCBsaXN0ZW5lciBpbiBFdmVudExpc3RlbmVyU3VwcG9ydC4KICAgICAgICAgICAgIFRoYW5rcyB0byBNYXR0aGV3IEFndWlycmUuCm8gTEFORy0xMTM1OiBBZGQgbWV0aG9kIGNvbnRhaW5zQWxsV29yZHMgdG8gV29yZFV0aWxzLiBUaGFua3MgdG8KICAgICAgICAgICAgIEVkdWFyZG8gTWFydGlucy4KbyBMQU5HLTExMzI6IFJlZmxlY3Rpb25Ub1N0cmluZ0J1aWxkZXIgZG9lc24ndCB0aHJvdyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KICAgICAgICAgICAgIHdoZW4gdGhlIGNvbnN0cnVjdG9yJ3Mgb2JqZWN0IHBhcmFtIGlzIG51bGwuIFRoYW5rcyB0byBKYWNrIFRhbi4KbyBMQU5HLTcwMTogIFN0cmluZ1V0aWxzIGpvaW4gd2l0aCB2YXIgYXJncy4gVGhhbmtzIHRvIEphbWVzIFNhd2xlLgpvIExBTkctMTEwNTogQWRkIFRocmVhZFV0aWxzIC0gQSB1dGlsaXR5IGNsYXNzIHdoaWNoIHByb3ZpZGVzIGhlbHBlciBtZXRob2RzCiAgICAgICAgICAgICByZWxhdGVkIHRvIGphdmEubGFuZy5UaHJlYWQgIElzc3VlOiBMQU5HLTExMDUuIFRoYW5rcyB0bwogICAgICAgICAgICAgSGVuZHJpayBTYWx5LgpvIExBTkctMTAzMTogQWRkIGFubm90YXRpb25zIHRvIGV4Y2x1ZGUgZmllbGRzIGZyb20gUmVmbGVjdGlvbkVxdWFsc0J1aWxkZXIsCiAgICAgICAgICAgICBSZWZsZWN0aW9uVG9TdHJpbmdCdWlsZGVyIGFuZCBSZWZsZWN0aW9uSGFzaENvZGVCdWlsZGVyLiBUaGFua3MKICAgICAgICAgICAgIHRvIEZlbGlwZSBBZG9ybm8uCm8gTEFORy0xMTI3OiBVc2UgSlVuaXQgcnVsZXMgdG8gc2V0IGFuZCByZXNldCB0aGUgZGVmYXVsdCBMb2NhbGUgYW5kIFRpbWVab25lLgpvIExBTkctMTExOTogQWRkIHJvdGF0ZShzdHJpbmcsIGludCkgbWV0aG9kIHRvIFN0cmluZ1V0aWxzLiBUaGFua3MgdG8KICAgICAgICAgICAgIExvaWMgR3VpYmVydC4KbyBMQU5HLTEwOTk6IEFkZCBzd2FwIGFuZCBzaGlmdCBvcGVyYXRpb25zIGZvciBhcnJheXMgdG8gQXJyYXlVdGlscy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBBZHJpYW4gQmVyLgpvIExBTkctMTA1MDogQ2hhbmdlIG51bGxUb0VtcHR5IG1ldGhvZHMgdG8gZ2VuZXJpY3MuIFRoYW5rcyB0byBKYW1lcyBTYXdsZS4KbyBMQU5HLTEwNzQ6IEFkZCBhIG1ldGhvZCB0byBBcnJheVV0aWxzIGZvciByZW1vdmluZyBhbGwgb2NjdXJyZW5jZXMgb2YgYSBnaXZlbgogICAgICAgICAgICAgZWxlbWVudCAgSXNzdWU6IExBTkctMTA3NC4gVGhhbmtzIHRvIEhhaXlhbmcgTGkuCgpGSVhFRCBCVUdTCj09PT09PT09PT09PQoKbyBMQU5HLTEyNjE6IEFycmF5VXRpbHMuY29udGFpbnMgcmV0dXJucyBmYWxzZSBmb3IgaW5zdGFuY2VzIG9mIHN1YnR5cGVzLgpvIExBTkctMTI1MjogUmVuYW1lIE51bWJlclV0aWxzLmlzTnVtYmVyLCBpc0NyZWF0YWJsZSB0byBiZXR0ZXIgcmVmbGVjdAogICAgICAgICAgICAgY3JlYXRlTnVtYmVyLiBBbHNvLCBhY2NvbW1vZGF0ZWQgZm9yICIrIiBzeW1ib2wgYXMgcHJlZml4IGluCiAgICAgICAgICAgICBpc0NyZWF0YWJsZSBhbmQgaXNOdW1iZXIuIFRoYW5rcyB0byBSb2IgVG9tcGtpbnMuCm8gTEFORy0xMjMwOiBSZW1vdmUgdW5uZWNlc3Nhcnkgc3luY2hyb25pemF0aW9uIGZyb20gcmVnaXN0cnkgbG9va3VwIGluCiAgICAgICAgICAgICBFcXVhbHNCdWlsZGVyIGFuZCBIYXNoQ29kZUJ1aWxkZXIuIFRoYW5rcyB0byBQaGlsaXBwZSBNYXJzY2hhbGwuCm8gTEFORy0xMjE0OiBIYW5kbGUgInZvaWQiIGluIENsYXNzVXRpbHMuZ2V0Q2xhc3MoKS4gVGhhbmtzIHRvIEhlbnJ5IFR1bmcuCm8gTEFORy0xMjUwOiBTZXJpYWxpemF0aW9uVXRpbHMjZGVzZXJpYWxpemUgaGFzIHVubmVjZXNzYXJ5IGNvZGUgYW5kIGEgY29tbWVudAogICAgICAgICAgICAgZm9yIHRoYXQuIFRoYW5rcyB0byBHbGVhc2UgV2FuZy4KbyBMQU5HLTExOTA6IFR5cGVVdGlscy5pc0Fzc2lnbmFibGUgdGhyb3dzIE51bGxQb2ludGVyRXhjZXB0aW9uIHdoZW4gZnJvbVR5cGUKICAgICAgICAgICAgIGhhcyB0eXBlIHZhcmlhYmxlcyBhbmQgdG9UeXBlIGdlbmVyaWMgc3VwZXJjbGFzcyBzcGVjaWZpZXMgdHlwZQogICAgICAgICAgICAgdmFyaWFibGUuIFRoYW5rcyB0byBQYXNjYWwgU2NodW1hY2hlci4KbyBMQU5HLTEyMjY6IFN0cmluZ1V0aWxzI25vcm1hbGl6ZVNwYWNlIGRvZXMgbm90IHRyaW0gdGhlIHN0cmluZyBhbnltb3JlLgogICAgICAgICAgICAgVGhhbmtzIHRvIFBhc2NhbCBTY2h1bWFjaGVyLgpvIExBTkctMTI1MTogU2VyaWFsaXphdGlvblV0aWxzLkNsYXNzTG9hZGVyQXdhcmVPYmplY3RJbnB1dFN0cmVhbSBzaG91bGQgdXNlCiAgICAgICAgICAgICBzdGF0aWMgaW5pdGlhbGl6ZXIgdG8gaW5pdGlhbGl6ZSBwcmltaXRpdmVUeXBlcyBtYXAuIFRoYW5rcyB0bwogICAgICAgICAgICAgVGFrdXlhIFVlc2hpbi4KbyBMQU5HLTEyNDg6IEZhc3REYXRlUHJpbnRlciBNZW1vcnkgYWxsb2NhdGlvbiByZWdyZXNzaW9uLiBUaGFua3MgdG8KICAgICAgICAgICAgIEJlbm9pdCBXaWFydC4KbyBMQU5HLTEwMTg6IEZpeCBwcmVjaXNpb24gbG9zcyBvbiBOdW1iZXJVdGlscy5jcmVhdGVOdW1iZXIoU3RyaW5nKS4gVGhhbmtzIHRvCiAgICAgICAgICAgICBOaWNrIE1hbmxleS4KbyBMQU5HLTExOTk6IEZpeCBpbXBsZW1lbnRhdGlvbiBvZiBTdHJpbmdVdGlscy5nZXRKYXJvV2lua2xlckRpc3RhbmNlKCkuIFRoYW5rcwogICAgICAgICAgICAgdG8gTS4gU3RlaWdlci4KbyBMQU5HLTEyNDQ6IEZpeCBkZWFkIGxpbmtzIGluIFN0cmluZ1V0aWxzLmdldExldmVuc2h0ZWluRGlzdGFuY2UoKSBqYXZhZG9jLgogICAgICAgICAgICAgVGhhbmtzIHRvIGpqYmFua2VydC4KbyBMQU5HLTEyNDI6ICJcdTIyODQiOiI/IiBtYXBwaW5nIG1pc3NpbmcgZnJvbQogICAgICAgICAgICAgRW50aXR5QXJyYXlzI0hUTUw0MF9FWFRFTkRFRF9FU0NBUEUuIFRoYW5rcyB0byBOZWFsIFN0ZXdhcnQuCm8gTEFORy05MDE6ICBTdHJpbmdVdGlscyNzdGFydHNXaXRoQW55L2VuZHNXaXRoQW55IGlzIGNhc2Ugc2Vuc2l0aXZlIC0KICAgICAgICAgICAgIGRvY3VtZW50ZWQgYXMgY2FzZSBpbnNlbnNpdGl2ZS4gVGhhbmtzIHRvIE1hdHRoZXcgQmFydGVuc2NobGFnLgpvIExBTkctMTIzMjogRGlmZkJ1aWxkZXI6IEFkZCBudWxsIGNoZWNrIG9uIGZpZWxkTmFtZSB3aGVuIGFwcGVuZGluZyBPYmplY3Qgb3IKICAgICAgICAgICAgIE9iamVjdFtdLiBUaGFua3MgdG8gTmljayBNYW5sZXkuCm8gTEFORy0xMTc4OiBBcnJheVV0aWxzLnJlbW92ZUFsbChPYmplY3QgYXJyYXksIGludC4uLiBpbmRpY2VzKSBzaG91bGQgZG8gdGhlCiAgICAgICAgICAgICBjbG9uZSwgbm90IGl0cyBjYWxsZXJzLiBUaGFua3MgdG8gSGVucmkgWWFuZGVsbC4KbyBMQU5HLTExMjA6IFN0cmluZ1V0aWxzLnN0cmlwQWNjZW50cyBzaG91bGQgcmVtb3ZlIGFjY2VudHMgZnJvbSAiPyIgYW5kICI/Ii4KICAgICAgICAgICAgIFRoYW5rcyB0byBrYWNoaW5nODguCm8gTEFORy0xMjA1OiBOdW1iZXJVdGlscy5jcmVhdGVOdW1iZXIoKSBiZWhhdmVzIGluY29uc2lzdGVudGx5IHdpdGgKICAgICAgICAgICAgIE51bWJlclV0aWxzLmlzTnVtYmVyKCkuIFRoYW5rcyB0byBwYnJvc2UuCm8gTEFORy0xMjIyOiBGaXggZm9yIGluY29ycmVjdCBjb21tZW50IG9uIFN0cmluZ1V0aWxzLmNvbnRhaW5zSWdub3JlQ2FzZQogICAgICAgICAgICAgbWV0aG9kLiBUaGFua3MgdG8gQWRhbSBKLgpvIExBTkctMTIyMTogRml4IHR5cG8gb24gYXBwZW5kSWZNaXNzaW5nIGphdmFkb2MuIFRoYW5rcyB0byBQaWVycmUgVGVtcGxpZXIuCm8gTEFORy0xMjAyOiBwYXJzZURhdGVTdHJpY3RseSBkb2VzJ3QgcGFzcyBzcGVjaWZpZWQgbG9jYWxlLiBUaGFua3MgdG8KICAgICAgICAgICAgIE1hcmt1cyBKZWxzbWEuCm8gTEFORy0xMjE5OiBGYXN0RGF0ZUZvcm1hdCBkb2Vzbid0IHJlc3BlY3Qgc3VtbWVyIGRheWxpZ2h0IGluIHNvbWUgbG9jYWxpemVkCiAgICAgICAgICAgICBzdHJpbmdzLiBUaGFua3MgdG8gSmFyZWsuCm8gTEFORy0xMTc1OiBSZW1vdmUgQW50LWJhc2VkIGJ1aWxkLgpvIExBTkctMTE5NDogTGltaXQgbWF4IGhlYXAgbWVtb3J5IGZvciBjb25zaXN0ZW50IFRyYXZpcyBDSSBidWlsZC4KbyBMQU5HLTExODY6IEZpeCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpbiBGYXN0RGF0ZVBhcnNlciRUaW1lWm9uZVN0cmF0ZWd5LgogICAgICAgICAgICAgVGhhbmtzIHRvIE5pY2tNYW5sZXkuCm8gTEFORy0xMTkzOiBvcmRpbmFsSW5kZXhPZigiYWJjIiwgImFiIiwgMSkgZ2l2ZXMgaW5jb3JyZWN0IGFuc3dlciBvZiAtMQogICAgICAgICAgICAgKGNvcnJlY3QgYW5zd2VyIHNob3VsZCBiZSAwKTsgcmV2ZXJ0IGZpeCBmb3IgTEFORy0xMDc3LiBUaGFua3MgdG8KICAgICAgICAgICAgIFFpbiBMaS4KbyBMQU5HLTEwMDI6IFNldmVyYWwgcHJlZGVmaW5lZCBJU08gRmFzdERhdGVGb3JtYXRzIGluIERhdGVGb3JtYXRVdGlscyBhcmUKICAgICAgICAgICAgIGluY29ycmVjdC4gVGhhbmtzIHRvIE1pY2hhZWwgT3NpcG92LgpvIExBTkctMTE1MjogU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBvciBmaWVsZCBvdmVyLXdyaXRlIGZvciBsYXJnZSB5ZWFyCiAgICAgICAgICAgICBmaWVsZHMgaW4gRmFzdERhdGVQYXJzZXIuIFRoYW5rcyB0byBQYXMgRmlsaXAuCm8gTEFORy0xMTQxOiBTdHJMb29rdXAuc3lzdGVtUHJvcGVydGllc0xvb2t1cCgpIG5vIGxvbmdlciByZWFjdHMgb24gY2hhbmdlcyBvbgogICAgICAgICAgICAgc3lzdGVtIHByb3BlcnRpZXMuCm8gTEFORy0xMTQ3OiBFbnVtVXRpbHMgKkJpdFZlY3RvciBpc3N1ZSB3aXRoIG1vcmUgdGhhbiAzMiB2YWx1ZXMgRW51bS4gVGhhbmtzCiAgICAgICAgICAgICB0byBMb2ljIEd1aWJlcnQuCm8gTEFORy0xMDU5OiBDYXBpdGFsaXplIGphdmFkb2MgaXMgaW5jb3JyZWN0LiBUaGFua3MgdG8gQ29saW4gQ2FzZXkuCm8gTEFORy0xMTIyOiBJbmNvbnNpc3RlbnQgYmVoYXZpb3Igb2Ygc3dhcCBmb3IgbWFsZm9ybWVkIGlucHV0cy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBBZHJpYW4gQmVyLgpvIExBTkctMTEzMDogRml4IGNyaXRpY2FsIGlzc3VlcyByZXBvcnRlZCBieSBTb25hclF1YmUuCm8gTEFORy0xMTMxOiBTdHJCdWlsZGVyLmVxdWFscyhTdHJCdWlsZGVyKSBkb2Vzbid0IGNoZWNrIGZvciBudWxsIGlucHV0cy4KbyBMQU5HLTExMjg6IEpzb25Ub1N0cmluZ1N0eWxlIGRvZXNuJ3QgaGFuZGxlIGNoYXJzIGFuZCBvYmplY3RzIGNvcnJlY3RseS4KICAgICAgICAgICAgIFRoYW5rcyB0byBKYWNrIFRhbi4KbyBMQU5HLTExMjY6IERhdGVGb3JtYXRVdGlsc1Rlc3QudGVzdFNNVFAgZGVwZW5kcyBvbiB0aGUgZGVmYXVsdCBMb2NhbGUuCm8gTEFORy0xMTIzOiBVbml0IHRlc3QgRmFzdERhdGVQcmludGVyVGltZVpvbmVzVGVzdCBuZWVkcyBhIHRpbWV6b25lIHNldC4KICAgICAgICAgICAgIFRoYW5rcyB0byBDaHJpc3RpYW4gUC4gTW9tb24uCm8gTEFORy05MTY6ICBEYXRlRm9ybWF0VXRpbHMuZm9ybWF0IGRvZXMgbm90IGNvcnJlY3RseSBjaGFuZ2UgQ2FsZW5kYXIKICAgICAgICAgICAgIFRpbWVab25lIGluIGNlcnRhaW4gc2l0dWF0aW9ucy4gVGhhbmtzIHRvIENocmlzdGlhbiBQLiBNb21vbi4KbyBMQU5HLTExMTY6IERhdGVVdGlsc1Rlc3QudGVzdExhbmc1MzAgZmFpbHMgZm9yIHNvbWUgdGltZXpvbmVzLiBUaGFua3MgdG8KICAgICAgICAgICAgIEFhcm9uIFNoZWxkb24uCm8gTEFORy0xMTE0OiBUeXBlVXRpbHMuUGFyYW1ldGVyaXplZFR5cGUjZXF1YWxzIGRvZXNuJ3Qgd29yayB3aXRoIHdpbGRjYXJkCiAgICAgICAgICAgICB0eXBlcy4gVGhhbmtzIHRvIEFuZHkgQ29hdGVzLgpvIExBTkctMTExODogU3RyaW5nVXRpbHMucmVwZWF0KCd6JywgLTEpIHRocm93cyBOZWdhdGl2ZUFycmF5U2l6ZUV4Y2VwdGlvbi4KICAgICAgICAgICAgIFRoYW5rcyB0byBMb2ljIEd1aWJlcnQuCm8gTEFORy0xMTExOiBGaXggRmluZEJ1Z3Mgd2FybmluZ3MgaW4gRHVyYXRpb25Gb3JtYXRVdGlscy4KbyBMQU5HLTExNjI6IFN0cmluZ1V0aWxzI2VxdWFscyBmYWlscyB3aXRoIEluZGV4IE9PQkUgb24gbm9uLVN0cmluZ3Mgd2l0aAogICAgICAgICAgICAgaWRlbnRpY2FsIGxlYWRpbmcgcHJlZml4Li4KbyBMQU5HLTExNjM6IFRoZXJlIGFyZSBubyB0ZXN0cyBmb3IgQ2hhclNlcXVlbmNlVXRpbHMucmVnaW9uTWF0Y2hlcy4KbyBMQU5HLTEyMDA6IEZpeCBKYXZhZG9jIG9mIFN0cmluZ1V0aWxzLm9yZGluYWxJbmRleE9mLiBUaGFua3MgdG8gQmFya1poYW5nLgpvIExBTkctMTE5MTogSW5jb3JyZWN0IEphdmFkb2MKICAgICAgICAgICAgIFN0cmluZ1V0aWxzLmNvbnRhaW5zQW55KENoYXJTZXF1ZW5jZSwgQ2hhclNlcXVlbmNlLi4uKS4gVGhhbmtzIHRvCiAgICAgICAgICAgICBxZWQsIEJyZW50IFdvcmRlbiBhbmQgR2FyeSBHcmVnb3J5LgoKQ0hBTkdFUwo9PT09PT09PT0KbyBMQU5HLTExOTc6IFByZXBhcmUgSmF2YSA5IGRldGVjdGlvbi4KbyBMQU5HLTEyNjI6IENvbXBhcmVUb0J1aWxkZXIuYXBwZW5kKE9iamVjdCwgT2JqZWN0LCBDb21wYXJhdG9yKSBtZXRob2QgaXMgdG9vCiAgICAgICAgICAgICBiaWcgdG8gYmUgaW5saW5lZC4gVGhhbmtzIHRvIFJ1c2xhbiBDaGVyZW1pbi4KbyBMQU5HLTEyNTk6IEphdmFkb2MgZm9yIEFycmF5VXRpbHMuaXNOb3RFbXB0eSgpIGlzIHNsaWdodGx5IG1pc2xlYWRpbmcuIFRoYW5rcwogICAgICAgICAgICAgdG8gRG9taW5payBTdGFkbGVyLgpvIExBTkctMTI0NzogRmFzdERhdGVQcmludGVyIGdlbmVyYXRlcyBleHRyYSBEYXRlIG9iamVjdHMuIFRoYW5rcyB0bwogICAgICAgICAgICAgQmVub2l0IFdpYXJ0LgpvIExBTkctMTIyOTogSGFzaENvZGVCdWlsZGVyLmFwcGVuZChPYmplY3QsT2JqZWN0KSBpcyB0b28gYmlnIHRvIGJlIGlubGluZWQsCiAgICAgICAgICAgICB3aGljaCBwcmV2ZW50cyB3aG9sZSBidWlsZGVyIHRvIGJlIHNjYWxhcml6ZWQuIFRoYW5rcyB0bwogICAgICAgICAgICAgUnVzbGFuIENoZXJlbWluLgpvIExBTkctMTI0MzogU2ltcGxpZnkgQXJyYXlVdGlscyByZW1vdmVFbGVtZW50cyBieSB1c2luZyBuZXcgZGVjcmVtZW50QW5kR2V0KCkKICAgICAgICAgICAgIG1ldGhvZC4KbyBMQU5HLTEyNDA6IE9wdGltaXplIEJpdEZpZWxkIGNvbnN0cnVjdG9yIGltcGxlbWVudGF0aW9uLiBUaGFua3MgdG8gemhhbmhiLgpvIExBTkctMTIwNjogSW1wcm92ZSBDaGFyU2V0VXRpbHMuc3F1ZWV6ZSgpIHBlcmZvcm1hbmNlLiBUaGFua3MgdG8KICAgICAgICAgICAgIE1vaGFtbWVkIEFsZmFsbGFqLgpvIExBTkctMTE3NjogSW1wcm92ZSBBcnJheVV0aWxzIHJlbW92ZUVsZW1lbnRzIHRpbWUgY29tcGxleGl0eSB0byBPKG4pLiBUaGFua3MKICAgICAgICAgICAgIHRvIEplZmZlcnkgWXVhbi4KbyBMQU5HLTEyMzQ6IGdldExldmVuc2h0ZWluRGlzdGFuY2Ugd2l0aCBhIHRocmVzaG9sZDogb3B0aW1pemUgaW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIGlmIHRoZSBzdHJpbmdzIGxlbmd0aHMgZGlmZmVyIG1vcmUgdGhhbiB0aGUgdGhyZXNob2xkLiBUaGFua3MgdG8KICAgICAgICAgICAgIEpvbmF0YW4gSvZuc3Nvbi4KbyBMQU5HLTExNTE6IFBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBmb3IgTnVtYmVyVXRpbHMuaXNQYXJzYWJsZS4gVGhhbmtzIHRvCiAgICAgICAgICAgICBKdWFuIFBhYmxvIFNhbnRvcyBSb2Ry7Wd1ZXouCm8gTEFORy0xMjE4OiBFcXVhbHNCdWlsZGVyLmFwcGVuZChPYmplY3QsT2JqZWN0KSBpcyB0b28gYmlnIHRvIGJlIGlubGluZWQsCiAgICAgICAgICAgICB3aGljaCBwcmV2ZW50cyB3aG9sZSBidWlsZGVyIHRvIGJlIHNjYWxhcml6ZWQuIFRoYW5rcyB0bwogICAgICAgICAgICAgUnVzbGFuIENoZXJlbWluLgpvIExBTkctMTIxMDogU3RyaW5nVXRpbHMjc3RhcnRzV2l0aEFueSBoYXMgZXJyb3IgaW4gSmF2YWRvYy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBNYXR0aGlhcyBOaWVob2ZmLgpvIExBTkctMTIwODogU3RyU3Vic3RpdHV0b3IgY2FuIHByZXNlcnZlIGVzY2FwZXMuIFRoYW5rcyB0byBTYW11ZWwgS2FycC4KbyBMQU5HLTExODI6IENsYXJpZnkgSmF2YWRvYyBvZiBTdHJpbmdVdGlscy5jb250YWluc0FueSgpLiBUaGFua3MgdG8KICAgICAgICAgICAgIExhcnJ5IFdlc3QgYW5kIFBhc2NhbCBTY2h1bWFjaGVyLgpvIExBTkctMTE4MzogTWFraW5nIHJlcGxhY2VQYXR0ZXJuL3JlbW92ZVBhdHRlcm4gbWV0aG9kcyBudWxsIHNhZmUgaW4KICAgICAgICAgICAgIFN0cmluZ1V0aWxzLgpvIExBTkctMTA1NzogUmVwbGFjZSBTdHJpbmdCdWlsZGVyIHdpdGggU3RyaW5nIGNvbmNhdGVuYXRpb24gZm9yIGJldHRlcgogICAgICAgICAgICAgb3B0aW1pemF0aW9uLiBUaGFua3MgdG8gT3ThdmlvIFNhbnRhbmEuCm8gTEFORy0xMDc1OiBEZXByZWNhdGUgU3lzdGVtVXRpbHMuRklMRV9TRVBBUkFUT1IgYW5kCiAgICAgICAgICAgICBTeXN0ZW1VdGlscy5QQVRIX1NFUEFSQVRPUi4KbyBMQU5HLTk3OTogIFR5cGVVdGlscy5wYXJhbWV0ZXJpemVXaXRoT3duZXIgLSB3cm9uZyBmb3JtYXQgZGVzY3JpcHRvciBmb3IKICAgICAgICAgICAgICJpbnZhbGlkIG51bWJlciBvZiB0eXBlIHBhcmFtZXRlcnMiLiBUaGFua3MgdG8gQnJ1bm8gUC4gS2lub3NoaXRhLgpvIExBTkctMTExMjogTXVsdGlsaW5lUmVjdXJzaXZlVG9TdHJpbmdTdHlsZSBsYXJnZWx5IHVudXNhYmxlIGR1ZSB0byBiZWluZwogICAgICAgICAgICAgcGFja2FnZS1wcml2YXRlLgpvIExBTkctMTA1ODogU3RyaW5nVXRpbHMudW5jYXBpdGFsaXplIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LiBUaGFua3MgdG8KICAgICAgICAgICAgIExlbyBXYW5nLgpvIExBTkctMTA2OTogQ2hhclNldC5nZXRJbnN0YW5jZSBkb2N1bWVudGF0aW9uIGRvZXMgbm90IGNsZWFybHkgZXhwbGFpbiBob3cKICAgICAgICAgICAgIHRvIGluY2x1ZGUgbmVnYXRpb24gY2hhcmFjdGVyIGluIHNldC4gVGhhbmtzIHRvIEFybm8gTm9vcmRvdmVyLgpvIExBTkctMTEwNzogRml4IHBhcnNpbmcgZWRnZSBjYXNlcyBpbiBGYXN0RGF0ZVBhcnNlci4KbyBMQU5HLTEyNzM6IEFkZGVkIG5ldyBwcm9wZXJ0eSBJU19PU19NQUNfT1NYX0VMX0NBUElUQU4gaW4gU3lzdGVtVXRpbHMuIFRoYW5rcwogICAgICAgICAgICAgdG8gSmFrZSBXYW5nLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMy40CgoKQ09NUEFUSUJJTElUWQo9PT09PT09PT09PT09CgpDb21tb25zIExhbmcgMy40IGlzIGZ1bGx5IGJpbmFyeSBjb21wYXRpYmxlIHRvIHRoZSBsYXN0IHJlbGVhc2UgYW5kIGNhbgp0aGVyZWZvcmUgYmUgdXNlZCBhcyBhIGRyb3AgaW4gcmVwbGFjZW1lbnQgZm9yIDMuMy4yLiBOb3RlIHRoYXQgdGhlIHZhbHVlIG9mCm9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy50aW1lLkR1cmF0aW9uRm9ybWF0VXRpbHMuSVNPX0VYVEVOREVEX0ZPUk1BVF9QQVRURVJOCmhhcyBjaGFuZ2VkLCB3aGljaCBtYXkgYWZmZWN0IGNsaWVudHMgdXNpbmcgdGhlIGNvbnN0YW50LiBGdXJ0aGVybW9yZSB0aGUKY29uc3RhbnQgaXMgdXNlZCBpbnRlcm5hbGx5IGluCm8gRHVyYXRpb25Gb3JtYXRVdGlscy5mb3JtYXREdXJhdGlvbklTTyhsb25nKQpvIER1cmF0aW9uRm9ybWF0VXRpbHMuZm9ybWF0UGVyaW9kSVNPKGxvbmcsIGxvbmcpCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9MQU5HLTEwMDAuCgpORVcgRkVBVFVSRVMKPT09PT09PT09PT09PT0KCm8gTEFORy04MjE6ICBTdXBwb3J0IE9TIFggdmVyc2lvbnMgaW4gU3lzdGVtVXRpbHMuIFRoYW5rcyB0byBUaW1vIEtvY2tlcnQuCm8gTEFORy0xMTAzOiBBZGQgU3lzdGVtVXRpbHMuSVNfSkFWQV8xXzkKbyBMQU5HLTEwOTM6IEFkZCBDbGFzc1V0aWxzLmdldEFiYnJldmlhdGVkTmFtZSgpLiBUaGFua3MgdG8gRmFiaWFuIExhbmdlLgpvIExBTkctMTA4MjogQWRkIG9wdGlvbiB0byBkaXNhYmxlIHRoZSAib2JqZWN0c1RyaXZpYWxseUVxdWFsIiB0ZXN0IGluCiAgICAgICAgICAgICBEaWZmQnVpbGRlci4gVGhhbmtzIHRvIEpvbmF0aGFuIEJha2VyLgpvIExBTkctMTAxNTogQWRkIEpzb25Ub1N0cmluZ1N0eWxlIGltcGxlbWVudGF0aW9uIHRvIFRvU3RyaW5nU3R5bGUuIFRoYW5rcyB0bwogICAgICAgICAgICAgVGhpYWdvIEFuZHJhZGUuCm8gTEFORy0xMDgwOiBBZGQgTm9DbGFzc05hbWVUb1N0cmluZ1N0eWxlIGltcGxlbWVudGF0aW9uIG9mIFRvU3RyaW5nU3R5bGUuCiAgICAgICAgICAgICBUaGFua3MgdG8gSW5ub2tlbnR5IFNodXZhbG92LgpvIExBTkctODgzOiAgQWRkIFN0cmluZ1V0aWxzLmNvbnRhaW5zQW55KENoYXJTZXF1ZW5jZSwgQ2hhclNlcXVlbmNlLi4uKSBtZXRob2QuCiAgICAgICAgICAgICBUaGFua3MgdG8gRGFuaWVsIFN0ZXdhcnQuCm8gTEFORy0xMDUyOiBNdWx0aWxpbmUgcmVjdXJzaXZlIHRvIHN0cmluZyBzdHlsZS4gVGhhbmtzIHRvIEphbiBNYXTocm5lLgpvIExBTkctNTM2OiAgQWRkIGlzU29ydGVkKCkgdG8gQXJyYXlVdGlscy4gVGhhbmtzIHRvIEphbWVzIFNhd2xlLgpvIExBTkctMTAzMzogQWRkIFN0cmluZ1V0aWxzLmNvdW50TWF0Y2hlcyhDaGFyU2VxdWVuY2UsIGNoYXIpCm8gTEFORy0xMDIxOiBQcm92aWRlIG1ldGhvZHMgdG8gcmV0cmlldmUgYWxsIGZpZWxkcy9tZXRob2RzIGFubm90YXRlZCB3aXRoIGEKICAgICAgICAgICAgIHNwZWNpZmljIHR5cGUuIFRoYW5rcyB0byBBbGV4YW5kZXIgTfxsbGVyLgpvIExBTkctMTAxNjogTnVtYmVyVXRpbHMjaXNQYXJzYWJsZSBtZXRob2QocykuIFRoYW5rcyB0bwogICAgICAgICAgICAgSnVhbiBQYWJsbyBTYW50b3MgUm9kcu1ndWV6LgpvIExBTkctOTk5OiAgQWRkIGZ1enp5IFN0cmluZyBtYXRjaGluZyBsb2dpYyB0byBTdHJpbmdVdGlscy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBCZW4gUmlwa2Vucy4KbyBMQU5HLTk5NDogIEFkZCB6ZXJvIGNvcHkgcmVhZCBtZXRob2QgdG8gU3RyQnVpbGRlci4gVGhhbmtzIHRvCiAgICAgICAgICAgICBNaWtoYWlsIE1henVyc2t5LgpvIExBTkctOTkzOiAgQWRkIHplcm8gY29weSB3cml0ZSBtZXRob2QgdG8gU3RyQnVpbGRlci4gVGhhbmtzIHRvCiAgICAgICAgICAgICBNaWtoYWlsIE1henVyc2t5LgpvIExBTkctMTA0NDogQWRkIG1ldGhvZCBNZXRob2RVdGlscy5pbnZva2VFeGFjdE1ldGhvZChPYmplY3QsIFN0cmluZykKbyBMQU5HLTEwNDU6IEFkZCBtZXRob2QgTWV0aG9kVXRpbHMuaW52b2tlTWV0aG9kKE9iamVjdCwgU3RyaW5nKQoKRklYRUQgQlVHUwo9PT09PT09PT09PT0KCm8gTEFORy03OTQ6ICBTeXN0ZW1VdGlscy5JU19PU19XSU5ET1dTXzIwMDgsIFZJU1RBIGFyZSBpbmNvcnJlY3QuIFRoYW5rcyB0bwogICAgICAgICAgICAgVGltbyBLb2NrZXJ0LgpvIExBTkctMTEwNDogUGFyc2UgdGVzdCBmYWlscyBmb3IgVGltZVpvbmUgQW1lcmljYS9TYW9fUGF1bG8KbyBMQU5HLTk0ODogIEV4Y2VwdGlvbiB3aGlsZSB1c2luZyBFeHRlbmRlZE1lc3NhZ2VGb3JtYXQgYW5kIGVzY2FwaW5nIGJyYWNlcy4KICAgICAgICAgICAgIFRoYW5rcyB0byBBbmRyZXkgS2hvYm55YS4KbyBMQU5HLTEwOTI6IFdyb25nIGZvcm1hdGluZyBvZiB0aW1lIHpvbmVzIHdpdGggZGF5bGlnaHQgc2F2aW5nIHRpbWUgaW4KICAgICAgICAgICAgIEZhc3REYXRlUHJpbnRlcgpvIExBTkctMTA5MDogRmFzdERhdGVQYXJzZXIgZG9lcyBub3Qgc2V0IGVycm9yIGluZGljYXRpb24gaW4gUGFyc2VQb3NpdGlvbgpvIExBTkctMTA4OTogRmFzdERhdGVQYXJzZXIgZG9lcyBub3QgaGFuZGxlIGV4Y2VzcyBob3VycyBhcyBwZXIKICAgICAgICAgICAgIFNpbXBsZURhdGVGb3JtYXQKbyBMQU5HLTEwNjE6IEZhc3REYXRlUGFyc2VyIGVycm9yIC0gdGltZXpvbmVzIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gVGhhbmtzIHRvCiAgICAgICAgICAgICBkbWVuZXNlcy4KbyBMQU5HLTEwODc6IE51bWJlclV0aWxzI2NyZWF0ZU51bWJlcigpIHJldHVybnMgcG9zaXRpdmUgQmlnRGVjaW1hbCB3aGVuCiAgICAgICAgICAgICBuZWdhdGl2ZSBGbG9hdCBpcyBleHBlY3RlZC4gVGhhbmtzIHRvIFJlbmF0IFpoaWxraWJhZXYuCm8gTEFORy0xMDgxOiBEaWZmQnVpbGRlci5hcHBlbmQoU3RyaW5nLCBPYmplY3QgbGVmdCwgT2JqZWN0IHJpZ2h0KSBkb2VzIG5vdCBkbwogICAgICAgICAgICAgYSBsZWZ0LmVxdWFscyhyaWdodCkgY2hlY2suIFRoYW5rcyB0byBKb25hdGhhbiBCYWtlci4KbyBMQU5HLTEwNTU6IFN0clN1YnN0aXR1dG9yLnJlcGxhY2VTeXN0ZW1Qcm9wZXJ0aWVzIGRvZXMgbm90IHdvcmsgY29uc2lzdGVudGx5LgogICAgICAgICAgICAgVGhhbmtzIHRvIEpvbmF0aGFuIEJha2VyLgpvIExBTkctMTA4MzogQWRkIChUKSBjYXN0cyB0byBnZXQgdW5pdCB0ZXN0cyB0byBwYXNzIGluIG9sZCBKREsuIFRoYW5rcyB0bwogICAgICAgICAgICAgSm9uYXRoYW4gQmFrZXIuCm8gTEFORy0xMDczOiBSZWFkIHdyb25nIGNvbXBvbmVudCB0eXBlIG9mIGFycmF5IGluIGFkZCBpbiBBcnJheVV0aWxzLgogICAgICAgICAgICAgVGhhbmtzIHRvIGhhaXlhbmcgbGkuCm8gTEFORy0xMDc3OiBTdHJpbmdVdGlscy5vcmRpbmFsSW5kZXhPZigiYWFhYWFhIiwgImFhIiwgMikgIT0gMyBpbiBTdHJpbmdVdGlscy4KICAgICAgICAgICAgIFRoYW5rcyB0byBoYWl5YW5nIGxpLgpvIExBTkctMTA3MjogRHVwbGljYXRlZCAiMHgiIGNoZWNrIGluIGNyZWF0ZUJpZ0ludGVnZXIgaW4gTnVtYmVyVXRpbHMuIFRoYW5rcwogICAgICAgICAgICAgdG8gaGFpeWFuZyBsaS4KbyBMQU5HLTEwNjQ6IFN0cmluZ1V0aWxzLmFiYnJldmlhdGUgZGVzY3JpcHRpb24gZG9lc24ndCBhZ3JlZSB3aXRoIHRoZQogICAgICAgICAgICAgZXhhbXBsZXMuIFRoYW5rcyB0byBCLkouIEhlcmJpc29uLgpvIExBTkctMTA0MTogRml4IE1ldGhvZFV0aWxzVGVzdCBzbyBpdCBkb2VzIG5vdCBkZXBlbmQgb24gSkRLIG1ldGhvZCBvcmRlcmluZy4KICAgICAgICAgICAgIFRoYW5rcyB0byBBbGV4YW5kcmUgQmFydGVsLgpvIExBTkctMTAwMDogUGFyc2VFeGNlcHRpb24gd2hlbiB0cnlpbmcgdG8gcGFyc2UgVVRDIGRhdGVzIHdpdGggWiBhcyB6b25lCiAgICAgICAgICAgICBkZXNpZ25hdG9yIHVzaW5nIERhdGVGb3JtYXRVdGlscy5JU09fREFURVRJTUVfVElNRV9aT05FX0ZPUk1BVApvIExBTkctMTAzNTogSmF2YWRvYyBmb3IgRXF1YWxzQnVpbGRlci5yZWZsZWN0aW9uRXF1YWxzKCkgaXMgdW5jbGVhcgpvIExBTkctMTAwMTogSVNPIDg2MDEgbWlzc3BlbGxlZCB0aHJvdWdob3V0IHRoZSBKYXZhZG9jcy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBNaWNoYWVsIE9zaXBvdi4KbyBMQU5HLTEwODg6IEZhc3REYXRlUGFyc2VyIHNob3VsZCBiZSBjYXNlIGluc2Vuc2l0aXZlCm8gTEFORy05OTU6ICBGaXggYnVnIHdpdGggc3RyaXBwaW5nIHNwYWNlcyBvbiBsYXN0IGxpbmUgaW4gV29yZFV0aWxzLndyYXAoKS4KICAgICAgICAgICAgIFRoYW5rcyB0byBBbmRyZXkgS2hvYm55YS4KCkNIQU5HRVMKPT09PT09PT09CgpvIExBTkctMTEwMjogTWFrZSBsb2dpYyBmb3IgY29tcGFyaW5nIE9TIHZlcnNpb25zIGluIFN5c3RlbVV0aWxzIHNtYXJ0ZXIKbyBMQU5HLTEwOTE6IFNodXRkb3duIHRocmVhZCBwb29scyBpbiB0ZXN0IGNhc2VzLiBUaGFua3MgdG8gRmFiaWFuIExhbmdlLgpvIExBTkctMTEwMTogRmFzdERhdGVQYXJzZXIgYW5kIEZhc3REYXRlUHJpbnRlciBzdXBwb3J0ICdYJyBmb3JtYXQKbyBMQU5HLTExMDA6IEF2b2lkIG1lbW9yeSBhbGxvY2F0aW9uIHdoZW4gdXNpbmcgZGF0ZSBmb3JtYXRpbmcgdG8gU3RyaW5nQnVmZmVyLgogICAgICAgICAgICAgVGhhbmtzIHRvIG1icmFjaGVyLgpvIExBTkctOTM1OiAgUG9zc2libGUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb24gc3RyaW5nIGVzY2FwZSBmdW5jdGlvbnMuCiAgICAgICAgICAgICBUaGFua3MgdG8gRmFiaWFuIExhbmdlLCBUaG9tYXMgTmVpZGhhcnQuCm8gTEFORy0xMDk4OiBBdm9pZCBTdHJpbmcgYWxsb2NhdGlvbiBpbiBTdHJCdWlsZGVyLmFwcGVuZChDaGFyU2VxdWVuY2UpLiBUaGFua3MKICAgICAgICAgICAgIHRvIE1pa2hhaWwgTWF6dXJza2l5LCBGYWJpYW4gTGFuZ2UuCm8gTEFORy0xMDk4OiBVcGRhdGUgbWF2ZW4tY2hlY2tzdHlsZS1wbHVnaW4gdG8gMi4xNC4gVGhhbmtzIHRvIE1pY2hhPyBLb3JkYXMuCm8gTEFORy0xMDk3OiBVcGRhdGUgb3JnLmVhc3ltb2NrOmVhc3ltb2NrIHRvIDMuMy4xLiBUaGFua3MgdG8gTWljaGE/IEtvcmRhcy4KbyBMQU5HLTEwOTY6IFVwZGF0ZSBtYXZlbi1wbWQtcGx1Z2luIHRvIDMuNC4gVGhhbmtzIHRvIE1pY2hhPyBLb3JkYXMuCm8gTEFORy0xMDk1OiBVcGRhdGUgbWF2ZW4tYW50cnVuLXBsdWdpbiB0byAxLjguIFRoYW5rcyB0byBNaWNoYT8gS29yZGFzLgpvIExBTkctODc3OiAgUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIGZvciBTdHJpbmdFc2NhcGVVdGlscy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBGYWJpYW4gTGFuZ2UuCm8gTEFORy0xMDcxOiBGaXggd3JvbmcgZXhhbXBsZXMgaW4gSmF2YWRvYyBvZgogICAgICAgICAgICAgU3RyaW5nVXRpbHMucmVwbGFjZUVhY2hSZXBlYXRlZGx5KC4uLiksCiAgICAgICAgICAgICBTdHJpbmdVdGlscy5yZXBsYWNlRWFjaCguLi4pIFRoYW5rcyB0byBBcm5vIE5vb3Jkb3Zlci4KbyBMQU5HLTgyNzogIENvbXBhcmVUb0J1aWxkZXIncyBkb2MgZG9lc24ndCBzcGVjaWZ5IHByZWNlZGVuY2Ugb2YgZmllbGRzIGl0CiAgICAgICAgICAgICB1c2VzIGluIHBlcmZvcm1pbmcgY29tcGFyaXNvbnMKbyBMQU5HLTEwMjA6IEltcHJvdmUgcGVyZm9ybWFuY2Ugb2Ygbm9ybWFsaXplIHNwYWNlLiBUaGFua3MgdG8gTGlib3IgT25kcnVzZWsuCm8gTEFORy0xMDI3OiBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3lzdGVtVXRpbHMjaXNKYXZhVmVyc2lvbkF0TGVhc3Qgc2hvdWxkCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZSBieSBkZWZhdWx0Cm8gTEFORy0xMDI2OiBCcmluZyBzdGF0aWMgbWV0aG9kIHJlZmVyZW5jZXMgaW4gU3RyaW5nVXRpbHMgdG8gY29uc2lzdGVudCBzdHlsZS4KICAgICAgICAgICAgIFRoYW5rcyB0byBBbGV4IFl1cnNoYS4KbyBMQU5HLTEwMTc6IFVzZSBub24tQVNDSUkgZGlnaXRzIGluIEphdmFkb2MgZXhhbXBsZXMgZm9yCiAgICAgICAgICAgICBTdHJpbmdVdGlscy5pc051bWVyaWMuIFRoYW5rcyB0byBDaHJpc3RvcGggU2NobmVlZ2Fucy4KbyBMQU5HLTEwMDg6IENoYW5nZSBtaW4vbWF4IG1ldGhvZHMgaW4gTnVtYmVyVXRpbHMvSUVFRTc1NHJVdGlscyBmcm9tIGFycmF5CiAgICAgICAgICAgICBpbnB1dCBwYXJhbWV0ZXJzIHRvIHZhcmFyZ3MuIFRoYW5rcyB0byBUaGlhZ28gQW5kcmFkZS4KbyBMQU5HLTEwMDY6IEFkZCB3cmFwICh3aXRoIFN0cmluZyBvciBjaGFyKSB0byBTdHJpbmdVdGlscy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBUaGlhZ28gQW5kcmFkZS4KbyBMQU5HLTEwMDU6IEV4dGVuZCBEdXJhdGlvbkZvcm1hdFV0aWxzI2Zvcm1hdER1cmF0aW9uSVNPIGRlZmF1bHQgcGF0dGVybiB0bwogICAgICAgICAgICAgbWF0Y2ggI2Zvcm1hdER1cmF0aW9uSE1TLiBUaGFua3MgdG8gTWljaGFlbCBPc2lwb3YuCm8gTEFORy0xMDA3OiBGaXhpbmcgTnVtYmVyVXRpbHMgSkFWQURvYyBjb21tZW50cyBmb3IgbWF4IG1ldGhvZHMuIFRoYW5rcyB0bwogICAgICAgICAgICAgVGhpYWdvIEFuZHJhZGUuCm8gTEFORy03MzE6ICBCZXR0ZXIgSmF2YWRvYyBmb3IgQml0RmllbGQgY2xhc3MKbyBMQU5HLTEwMDQ6IER1cmF0aW9uRm9ybWF0VXRpbHMjZm9ybWF0RHVyYXRpb25ITVMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QKICAgICAgICAgICAgIGNvcnJlc3BvbmQgdG8gSmF2YWRvYyBhbmQgdmljZSB2ZXJzYS4gVGhhbmtzIHRvIE1pY2hhZWwgT3NpcG92LgpvIExBTkctMTAwMzogRHVyYXRpb25Gb3JtYXRVdGlscyBhcmUgbm90IGFibGUgdG8gaGFuZGxlIG5lZ2F0aXZlCiAgICAgICAgICAgICBkdXJhdGlvbnMvcGVyaW9kcwpvIExBTkctOTk4OiAgSmF2YWRvYyBpcyBub3QgY2xlYXIgb24gcHJlZmVycmVkIHBhdHRlcm4gdG8gaW5zdGFudGlhdGUKICAgICAgICAgICAgIEZhc3REYXRlUGFyc2VyIC8gRmFzdERhdGVQcmludGVyCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAzLjMuMgoKTkVXIEZFQVRVUkVTCj09PT09PT09PT09PT09CgpvIExBTkctOTg5OiAgQWRkIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TeXN0ZW1VdGlscy5JU19KQVZBXzFfOAoKRklYRUQgQlVHUwo9PT09PT09PT09PT0KCm8gTEFORy05OTI6ICBOdW1iZXJVdGlscyNpc051bWJlcigpIHJldHVybnMgZmFsc2UgZm9yICIwLjAiLCAiMC40NzkwIiwgZXQgYWwKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzIGZvciB2ZXJzaW9uIDMuMy4xCgpGSVhFRCBCVUdTCj09PT09PT09PT09PQoKbyBMQU5HLTk4NzogIERhdGVVdGlscy5nZXRGcmFnbWVudEluRGF5cyhEYXRlLCBDYWxlbmRhci5NT05USCkgcmV0dXJucyB3cm9uZwogICAgICAgICAgICAgZGF5cwpvIExBTkctOTgzOiAgRHVyYXRpb25Gb3JtYXRVdGlscyBkb2VzIG5vdCBkZXNjcmliZSBmb3JtYXQgc3RyaW5nIGZ1bGx5Cm8gTEFORy05ODE6ICBEdXJhdGlvbkZvcm1hdFV0aWxzI2xleHggZG9lcyBub3QgZGV0ZWN0IHVubWF0Y2hlZCBxdW90ZSBjaGFyCm8gTEFORy05ODQ6ICBEdXJhdGlvbkZvcm1hdFV0aWxzIGRvZXMgbm90IGhhbmRsZSBsYXJnZSBkdXJhdGlvbnMgY29ycmVjdGx5Cm8gTEFORy05ODI6ICBEdXJhdGlvbkZvcm1hdFV0aWxzLmZvcm1hdER1cmF0aW9uKDYxOTk5LCAicy5TU1NTIikgLSBtcyBmaWVsZAogICAgICAgICAgICAgc2l6ZSBzaG91bGQgYmUgNCBkaWdpdHMKbyBMQU5HLTk3ODogIEZhaWxpbmcgdGVzdHMgd2l0aCBKYXZhIDggYjEyOAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMy4zCgpORVcgRkVBVFVSRVMKPT09PT09PT09PT09PT0KCm8gTEFORy05NTU6ICBBZGQgbWV0aG9kcyBmb3IgcmVtb3ZpbmcgYWxsIGludmFsaWQgY2hhcmFjdGVycyBhY2NvcmRpbmcgdG8KICAgICAgICAgICAgIFhNTCAxLjAgYW5kIFhNTCAxLjEgaW4gYW4gaW5wdXQgc3RyaW5nIHRvIFN0cmluZ0VzY2FwZVV0aWxzLgogICAgICAgICAgICAgVGhhbmtzIHRvIEFkYW0gSG9vcGVyLgpvIExBTkctOTcwOiAgQWRkIEFQSXMgTXV0YWJsZUJvb2xlYW4gc2V0VHJ1ZSgpIGFuZCBzZXRGYWxzZSgpCm8gTEFORy05NjI6ICBBZGQgU2VyaWFsaXphdGlvblV0aWxzLnJvdW5kdHJpcChUIGV4dGVuZHMgU2VyaWFsaXphYmxlKSB0bwogICAgICAgICAgICAgc2VyaWFsaXplIHRoZW4gZGVzZXJpYWxpemUKbyBMQU5HLTYzNzogIFRoZXJlIHNob3VsZCBiZSBhIERpZmZlcmVuY2VCdWlsZGVyIHdpdGggYQogICAgICAgICAgICAgUmVmbGVjdGlvbkRpZmZlcmVuY2VCdWlsZGVyIGltcGxlbWVudGF0aW9uCm8gTEFORy05NDQ6ICBBZGQgdGhlIEphcm8tV2lua2xlciBzdHJpbmcgZGlzdGFuY2UgYWxnb3JpdGhtIHRvIFN0cmluZ1V0aWxzLgogICAgICAgICAgICAgVGhhbmtzIHRvIFJla2hhIEpvc2hpLgpvIExBTkctNDE3OiAgTmV3IGNsYXNzIENsYXNzUGF0aFV0aWxzIHdpdGggbWV0aG9kcyBmb3IgdHVybmluZyBGUU4gaW50bwogICAgICAgICAgICAgcmVzb3VyY2UgcGF0aApvIExBTkctODM0OiAgVmFsaWRhdGU6IGFkZCBpbmNsdXNpdmVCZXR3ZWVuIGFuZCBleGNsdXNpdmVCZXR3ZWVuIG92ZXJsb2FkcwogICAgICAgICAgICAgZm9yIHByaW1pdGl2ZSB0eXBlcwpvIExBTkctOTAwOiAgTmV3IFJhbmRvbVV0aWxzIGNsYXNzLiBUaGFua3MgdG8gRHVuY2FuIEpvbmVzLgpvIExBTkctOTY2OiAgQWRkIElCTSBPUy80MDAgZGV0ZWN0aW9uCgpGSVhFRCBCVUdTCj09PT09PT09PT09PQoKbyBMQU5HLTYyMTogIFJlZmxlY3Rpb25Ub1N0cmluZ0J1aWxkZXIudG9TdHJpbmcgZG9lcyBub3QgZGVidWcgM3JkIHBhcnR5IG9iamVjdAogICAgICAgICAgICAgZmllbGRzIHdpdGhpbiAzcmQgcGFydHkgb2JqZWN0LiBUaGFua3MgdG8gUGhpbGlwIEhvZGdlcywKICAgICAgICAgICAgIFRob21hcyBOZWlkaGFydC4KbyBMQU5HLTk3NzogIE51bWVyaWNFbnRpdHlFc2NhcGVyIGluY29ycmVjdGx5IGVuY29kZXMgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzLgogICAgICAgICAgICAgVGhhbmtzIHRvIENocmlzIEthcmNoZXIuCm8gTEFORy05NzM6ICBNYWtlIHNvbWUgcHJpdmF0ZSBmaWVsZHMgZmluYWwKbyBMQU5HLTk3MTogIE51bWJlclV0aWxzI2lzTnVtYmVyKFN0cmluZykgZmFpbHMgdG8gcmVqZWN0IGludmFsaWQgT2N0YWwgbnVtYmVycwpvIExBTkctOTcyOiAgTnVtYmVyVXRpbHMjaXNOdW1iZXIgZG9lcyBub3QgYWxsb3cgZm9yIGhleCAwWEFCQ0QKbyBMQU5HLTk2OTogIFN0cmluZ1V0aWxzLnRvRW5jb2RlZFN0cmluZyhieXRlW10sIENoYXJzZXQpIG5lZWRsZXNzbHkgdGhyb3dzCiAgICAgICAgICAgICBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLiBUaGFua3MgdG8gTWF0dCBCaXNob3AuCm8gTEFORy05NDY6ICBDb25zdGFudEluaXRpYWxpemVyVGVzdCBmYWlscyB3aGVuIGJ1aWxkaW5nIHdpdGggSUJNIEpESyA3Cm8gTEFORy05NTQ6ICB1bmNhdWdodCBQYXR0ZXJuU3ludGF4RXhjZXB0aW9uIGluIEZhc3REYXRlRm9ybWF0IG9uIEFuZHJvaWQuCiAgICAgICAgICAgICBUaGFua3MgdG8gTWljaGFlbCBLZXBwbGVyLgpvIExBTkctOTM2OiAgU3RyaW5nVXRpbHMuZ2V0TGV2ZW5zaHRlaW5EaXN0YW5jZSB3aXRoIHRvbyBiaWcgb2YgYSB0aHJlc2hvbGQKICAgICAgICAgICAgIHJldHVybnMgd3JvbmcgcmVzdWx0LiBUaGFua3MgdG8gWWFuaXYgS3VuZGEsIEVsaSBMaW5kc2V5LgpvIExBTkctOTQzOiAgVGVzdCBEdXJhdGlvbkZvcm1hdFV0aWxzVGVzdC50ZXN0RWRnZUR1cmF0aW9uIGZhaWxzIGluCiAgICAgICAgICAgICBKREsgMS42LCAxLjcgYW5kIDEuOCwgQlJTVCB0aW1lIHpvbmUKbyBMQU5HLTYxMzogIENvbnN0cnVjdG9yVXRpbHMuZ2V0QWNjZXNzaWJsZUNvbnN0cnVjdG9yKCkgRG9lcyBOb3QgQ2hlY2sgdGhlCiAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5IG9mIEVuY2xvc2luZyBDbGFzc2VzCm8gTEFORy05NTE6ICBGcmFnbWVudHMgYXJlIHdyb25nIGJ5IDEgZGF5IHdoZW4gdXNpbmcgZnJhZ21lbnQgWUVBUiBvciBNT05USC4KICAgICAgICAgICAgIFRoYW5rcyB0byBTZWJhc3RpYW4gR/Z0ei4KbyBMQU5HLTk1MDogIEZhc3REYXRlUGFyc2VyIGRvZXMgbm90IGhhbmRsZSB0d28gZGlnaXQgeWVhciBwYXJzaW5nIGxpa2UKICAgICAgICAgICAgIFNpbXBsZURhdGVGb3JtYXQKbyBMQU5HLTk0OTogIEZhc3REYXRlUGFyc2VyVGVzdC50ZXN0UGFyc2VzIGRvZXMgbm90IHRlc3QgRmFzdERhdGVQYXJzZXIKbyBMQU5HLTkxNTogIFdyb25nIGxvY2FsZSBoYW5kbGluZyBpbiBMb2NhbGVVdGlscy50b0xvY2FsZSgpLgogICAgICAgICAgICAgVGhhbmtzIHRvIFNlcmdpbyBGZXJu4W5kZXouCgpDSEFOR0VTCj09PT09PT09PQoKbyBMQU5HLTk2MTogIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5yZWZsZWN0LkZpZWxkVXRpbHMucmVtb3ZlRmluYWxNb2RpZmllcihGaWVsZCkKICAgICAgICAgICAgIGRvZXMgbm90IGNsZWFuIHVwIGFmdGVyIGl0c2VsZgpvIExBTkctOTU4OiAgRmFzdERhdGVQYXJzZXIgamF2YWRvYyBpbmNvcnJlY3RseSBzdGF0ZXMgdGhhdCBTaW1wbGVEYXRlRm9ybWF0CiAgICAgICAgICAgICBpcyB1c2VkIGludGVybmFsbHkKbyBMQU5HLTk1NjogIEltcHJvdmUgSmF2YWRvYyBvZiBXb3JkVXRpbHMud3JhcCBtZXRob2RzCm8gTEFORy05Mzk6ICBNb3ZlIERvY3VtZW50YXRpb24gZnJvbSB1c2VyIGd1aWRlIHRvIHBhY2thZ2UtaW5mbyBmaWxlcwpvIExBTkctOTUzOiAgQ29udmVydCBwYWNrYWdlLmh0bWwgZmlsZXMgdG8gcGFja2FnZS1pbmZvLmphdmEgZmlsZXMKbyBMQU5HLTk0MDogIEZpeCBkZXByZWNhdGlvbiB3YXJuaW5ncwpvIExBTkctODE5OiAgRW51bVV0aWxzLmdlbmVyYXRlQml0VmVjdG9yIG5lZWRzIGEgIj8gZXh0ZW5kcyIKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzIGZvciB2ZXJzaW9uIDMuMi4xCgpCVUcgRklYRVMKPT09PT09PT09PT0KCm8gTEFORy05Mzc6ICBGaXggbWlzc2luZyBIYW1jcmVzdCBkZXBlbmRlbmN5IGluIEFudCBCdWlsZApvIExBTkctOTQxOiAgVGVzdCBmYWlsdXJlIGluIExvY2FsZVV0aWxzVGVzdCB3aGVuIGJ1aWxkaW5nIHdpdGggSkRLIDgKbyBMQU5HLTk0MjogIFRlc3QgZmFpbHVyZSBpbiBGYXN0RGF0ZVBhcnNlclRlc3QgYW5kIEZhc3REYXRlRm9ybWF0X1BhcnNlclRlc3QKICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgd2l0aCBKREs4LiBUaGFua3MgdG8gQnJ1bm8gUC4gS2lub3NoaXRhLAogICAgICAgICAgICAgSGVucmkgWWFuZGVsbC4KbyBMQU5HLTkzODogIEJ1aWxkIGZhaWxzIHdpdGggdGVzdCBmYWlsdXJlcyB3aGVuIGJ1aWxkaW5nIHdpdGggSkRLIDgKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzIGZvciB2ZXJzaW9uIDMuMgoKQ09NUEFUSUJJTElUWSBXSVRIIDMuMQo9PT09PT09PT09PT09PT09PT09PT09PT0KClRoaXMgcmVsZWFzZSBpbnRyb2R1Y2VzIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgY2hhbmdlcyBpbgpvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMudGltZS5GYXN0RGF0ZUZvcm1hdDoKbyBNZXRob2QgJ3Byb3RlY3RlZCBqYXZhLnV0aWwuTGlzdCBwYXJzZVBhdHRlcm4oKScgaGFzIGJlZW4gcmVtb3ZlZApvIE1ldGhvZCAncHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgcGFyc2VUb2tlbihqYXZhLmxhbmcuU3RyaW5nLCBpbnRbXSknIGhhcwogIGJlZW4gcmVtb3ZlZApvIE1ldGhvZCAncHJvdGVjdGVkIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy50aW1lLkZhc3REYXRlRm9ybWF0JE51bWJlclJ1bGUKICBzZWxlY3ROdW1iZXJSdWxlKGludCwgaW50KScgaGFzIGJlZW4gcmVtb3ZlZAoKVGhlc2UgY2hhbmdlcyB3ZXJlIHRoZSByZXN1bHQgb2YgW0xBTkctNDYyXS4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoaXMgY2hhbmdlCndpbGwgbm90IGJyZWFrIGNsaWVudHMgYXMgQ2hhcmxlcyBIb250b24gcG9pbnRlZCBvdXQgb24gMjUvSmFuLzEyOgoiCiAxLiBNZXRob2RzICJGYXN0RGF0ZUZvcm1hdCROdW1iZXJSdWxlIHNlbGVjdE51bWJlclJ1bGUoaW50LCBpbnQpIiBhbmQKICAgICJMaXN0PFJ1bGU+IHBhcnNlUGF0dGVybigpIiBjb3VsZG4ndCBoYXZlIGJlZW4gb3ZlcnJpZGRlbiBiZWNhdXNlCiAgICBOdW1iZXJSdWxlIGFuZCBSdWxlIHdlcmUgcHJpdmF0ZSB0byBGYXN0RGF0ZUZvcm1hdC4KIDIuIER1ZSB0byB0aGUgZmFjdG9yeSBwYXR0ZXJuIHVzZWQsIGl0J3MgdW5saWtlbHkgb3RoZXIgdHdvIG1ldGhvZHMgd291bGQgaGF2ZQogICAgYmVlbiBvdmVycmlkZGVuLgogMy4gVGhlIGZvdXIgbWV0aG9kcyBhcmUgaGlnaGx5IGltcGxlbWVudGF0aW9uIHNwZWNpZmljLiBJIGNvbnNpZGVyIGl0IGEKICAgIG1pc3Rha2UgdGhhdCB0aGUgbWV0aG9kcyB3ZXJlIGV4cG9zZWQuCiIKRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvTEFORy00NjIuCgpORVcgRkVBVFVSRVMKPT09PT09PT09PT09PT0KCm8gTEFORy05MzQ6ICBBZGQgcmVtb3ZlRmluYWxNb2RpZmllciB0byBGaWVsZFV0aWxzCm8gTEFORy04NjM6ICBNZXRob2QgcmV0dXJucyBudW1iZXIgb2YgaW5oZXJpdGFuY2UgaG9wcyBiZXR3ZWVuIHBhcmVudCBhbmQKICAgICAgICAgICAgIHN1YmNsYXNzLiBUaGFua3MgdG8gRGFuZWVsIFMuIFlhaXRza292LgpvIExBTkctNzc0OiAgQWRkZWQgaXNTdGFydGVkLCBpc1N1c3BlbmRlZCBhbmQgaXNTdG9wcGVkIHRvIFN0b3BXYXRjaC4KICAgICAgICAgICAgIFRoYW5rcyB0byBFcmhhbiBCYWdkZW1pci4KbyBMQU5HLTg0ODogIEFkZGVkIFN0cmluZ1V0aWxzLmlzQmxhbmsvaXNFbXB0eSBDaGFyU2VxdWVuY2UuLi4gbWV0aG9kcy4KICAgICAgICAgICAgIFRoYW5rcyB0byBBbGV4YW5kZXIgTXV0aG1hbm4uCm8gTEFORy05MjY6ICBBZGRlZCBBcnJheVV0aWxzLnJldmVyc2UoYXJyYXksIGZyb20sIHRvKSBtZXRob2RzLgpvIExBTkctNzk1OiAgU3RyaW5nVXRpbHMudG9TdHJpbmcoYnl0ZVtdLCBTdHJpbmcpIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGEgbmV3CiAgICAgICAgICAgICBTdHJpbmdVdGlscy50b1N0cmluZyhieXRlW10sIENoYXJTZXQpLiBUaGFua3MgdG8gQWFyb24gRGlndWxsYS4KbyBMQU5HLTg5MzogIFN0clN1YnN0aXR1dG9yIG5vdyBzdXBwb3J0cyBkZWZhdWx0IHZhbHVlcyBmb3IgdmFyaWFibGVzLgogICAgICAgICAgICAgVGhhbmtzIHRvIFdvb25zYW4gS28uCm8gTEFORy05MTM6ICBBZGRpbmcgLmdpdGlnbm9yZSB0byBjb21tb25zLWxhbmcuIFRoYW5rcyB0byBBbGxvbiBNdXJlaW5pay4KbyBMQU5HLTgzNzogIEFkZCBPYmplY3RVdGlscy50b0lkZW50aXR5U3RyaW5nIG1ldGhvZHMgdGhhdCBzdXBwb3J0CiAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyLCBTdHJCdWlsZGVyLCBhbmQgQXBwZW5kYWJsZS4KbyBMQU5HLTg4NjogIEFkZGVkIENoYXJTZXRVdGlscy5jb250YWluc0FueShTdHJpbmcsIFN0cmluZykuCm8gTEFORy03OTc6ICBBZGRlZCBlc2NhcGUvdW5lc2NhcGVKc29uIHRvIFN0cmluZ0VzY2FwZVV0aWxzLgpvIExBTkctODc1OiAgQWRkZWQgYXBwZW5kSWZNaXNzaW5nIGFuZCBwcmVwZW5kSWZNaXNzaW5nIG1ldGhvZHMgdG8gU3RyaW5nVXRpbHMuCm8gTEFORy04NzA6ICBBZGQgU3RyaW5nVXRpbHMuTEYgYW5kIFN0cmluZ1V0aWxzLkNSIHZhbHVlcy4KbyBMQU5HLTg3MzogIEFkZCBGaWVsZFV0aWxzIGdldEFsbEZpZWxkcygpIHRvIHJldHVybiBhbGwgdGhlIGZpZWxkcyBkZWZpbmVkIGluCiAgICAgICAgICAgICB0aGUgZ2l2ZW4gY2xhc3MgYW5kIHN1cGVyIGNsYXNzZXMuCm8gTEFORy04MzU6ICBTdHJCdWlsZGVyIHNob3VsZCBzdXBwb3J0IFN0cmluZ0J1aWxkZXIgYXMgYW4gaW5wdXQgcGFyYW1ldGVyLgpvIExBTkctODU3OiAgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpbiBDaGFyU2VxdWVuY2VUcmFuc2xhdG9yLgpvIExBTkctODU2OiAgQ29kZSByZWZhY3RvcmluZyBpbiBOdW1iZXJVdGlscy4KbyBMQU5HLTg1NTogIE51bWJlclV0aWxzI2NyZWF0ZUJpZ0ludGVnZXIgZG9lcyBub3QgYWxsb3cgZm9yIGhleCBhbmQgb2N0YWwKICAgICAgICAgICAgIG51bWJlcnMuCm8gTEFORy04NTQ6ICBOdW1iZXJVdGlscyNjcmVhdGVOdW1iZXIgLSBkb2VzIG5vdCBhbGxvdyBmb3IgaGV4IG51bWJlcnMgdG8gYmUKICAgICAgICAgICAgIGxhcmdlciB0aGFuIExvbmcuCm8gTEFORy04NTM6ICBTdHJpbmdVdGlscyBqb2luIEFQSXMgZm9yIHByaW1pdGl2ZXMuCm8gTEFORy04NDE6ICBBZGQgU3RyaW5nVXRpbHMgQVBJIHRvIGNhbGwgU3RyaW5nLnJlcGxhY2VBbGwgaW4gRE9UQUxMIGEuay5hLgogICAgICAgICAgICAgc2luZ2xlLWxpbmUgbW9kZS4KbyBMQU5HLTgyNTogIENyZWF0ZSBTdHJCdWlsZGVyIEFQSXMgc2ltaWxhciB0bwogICAgICAgICAgICAgU3RyaW5nLmZvcm1hdChTdHJpbmcsIE9iamVjdC4uLikuCm8gTEFORy02NzU6ICBBZGQgVHJpcGxlIGNsYXNzICh0ZXJuYXJ5IHZlcnNpb24gb2YgUGFpcikuCm8gTEFORy00NjI6ICBGYXN0RGF0ZUZvcm1hdCBzdXBwb3J0cyBwYXJzZSBtZXRob2RzLgoKQlVHIEZJWEVTCj09PT09PT09PT09CgpvIExBTkctOTMyOiAgU3BlbGxpbmcgZml4ZXMuIFRoYW5rcyB0byBWaWxsZSBTa3l0dOQuCm8gTEFORy05Mjk6ICBPY3RhbFVuZXNjYXBlciB0cmllZCB0byBwYXJzZSBhbGwgb2YgXDI3OS4KbyBMQU5HLTkyODogIE9jdGFsVW5lc2NhcGVyIGhhZCBidWdzIHdoZW4gcGFyc2luZyBvY3RhbHMgc3RhcnRpbmcgd2l0aCBhIHplcm8uCm8gTEFORy05MDU6ICBFcXVhbHNCdWlsZGVyIHJldHVybmVkIHRydWUgd2hlbiBjb21wYXJpbmcgYXJyYXlzLCBldmVuIHdoZW4gdGhlCiAgICAgICAgICAgICBlbGVtZW50cyBhcmUgZGlmZmVyZW50LgpvIExBTkctOTE3OiAgRml4ZWQgZXhjZXB0aW9uIHdoZW4gY29tYmluaW5nIGN1c3RvbSBhbmQgY2hvaWNlIGZvcm1hdCBpbgogICAgICAgICAgICAgRXh0ZW5kZWRNZXNzYWdlRm9ybWF0LiBUaGFua3MgdG8gQXJuZSBCdXJtZWlzdGVyLgpvIExBTkctOTAyOiAgUmFuZG9tU3RyaW5nVXRpbHMucmFuZG9tIGphdmFkb2Mgd2FzIGluY29ycmVjdGx5IHByb21pc2luZyBsZXR0ZXJzCiAgICAgICAgICAgICBhbmQgbnVtYmVycyB3b3VsZCwgYXMgb3Bwb3NlZCB0byBtYXksIGFwcGVhciAgSXNzdWU6LiBUaGFua3MgdG8KICAgICAgICAgICAgIEFuZHJ6ZWogV2lubmlja2kuCm8gTEFORy05MjE6ICBCb29sZWFuVXRpbHMueG9yKGJvb2xlYW4uLi4pIHByb2R1Y2VzIHdyb25nIHJlc3VsdHMuCm8gTEFORy04OTY6ICBCb29sZWFuVXRpbHMudG9Cb29sZWFuKFN0cmluZyBzdHIpIGphdmFkb2MgaXMgbm90IHVwZGF0ZWQuIFRoYW5rcwogICAgICAgICAgICAgdG8gTWFyayBCcnlhbiBZdS4KbyBMQU5HLTg3OTogIExvY2FsZVV0aWxzIHRlc3QgZmFpbHMgd2l0aCBuZXcgTG9jYWxlICJqYV9KUF9KUF8jdS1jYS1qYXBhbmVzZSIKICAgICAgICAgICAgIG9mIEpESzcuCm8gTEFORy04MzY6ICBTdHJTdWJzdGl0dXRvciBkb2VzIG5vdCBzdXBwb3J0IFN0cmluZ0J1aWxkZXIgb3IgQ2hhclNlcXVlbmNlLgogICAgICAgICAgICAgVGhhbmtzIHRvIEFybmF1ZCBCcnVuZXQuCm8gTEFORy02OTM6ICBNZXRob2QgY3JlYXRlTnVtYmVyIGZyb20gTnVtYmVyVXRpbHMgZG9lc24ndCB3b3JrIGZvciBmbG9hdGluZwogICAgICAgICAgICAgcG9pbnQgbnVtYmVycyBvdGhlciB0aGFuIEZsb2F0ICBJc3N1ZTogTEFORy02OTMuIFRoYW5rcyB0bwogICAgICAgICAgICAgQ2FsdmluIEVjaG9scy4KbyBMQU5HLTg4NzogIEZhc3REYXRlRm9ybWF0IGRvZXMgbm90IHVzZSB0aGUgbG9jYWxlIHNwZWNpZmljIGNhY2hlIGNvcnJlY3RseS4KbyBMQU5HLTc1NDogIENsYXNzVXRpbHMuZ2V0U2hvcnROYW1lKFN0cmluZykgd2lsbCBub3cgb25seSBkbyBhIHJldmVyc2UgbG9va3VwCiAgICAgICAgICAgICBmb3IgYXJyYXkgdHlwZXMuCm8gTEFORy04ODE6ICBOdW1iZXJVdGlscy5jcmVhdGVOdW1iZXIoKSBKYXZhZG9jIHNheXMgaXQgZG9lcyBub3Qgd29yayBmb3Igb2N0YWwKICAgICAgICAgICAgIG51bWJlcnMuCm8gTEFORy04NjU6ICBMb2NhbGVVdGlscy50b0xvY2FsZSBkb2VzIG5vdCBwYXJzZSBzdHJpbmdzIHN0YXJ0aW5nIHdpdGggYW4KICAgICAgICAgICAgIHVuZGVyc2NvcmUuCm8gTEFORy04NTg6ICBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVKYXZhKCkgYW5kIGVzY2FwZUVjbWFTY3JpcHQoKSBkbyBub3QKICAgICAgICAgICAgIG91dHB1dCB0aGUgZXNjYXBlZCBzdXJyb2dhdGUgcGFpcnMgdGhhdCBhcmUgSmF2YSBwYXJzYWJsZS4KbyBMQU5HLTg0OTogIEZhc3REYXRlRm9ybWF0IGFuZCBGYXN0RGF0ZVByaW50ZXIgZ2VuZXJhdGVzIERhdGUgb2JqZWN0cwogICAgICAgICAgICAgd2FzdGVmdWxseS4KbyBMQU5HLTg0NTogIFNwZWxsaW5nIGZpeGVzLgpvIExBTkctODQ0OiAgRml4IGV4YW1wbGVzIGNvbnRhaW5lZCBpbiBqYXZhZG9jIG9mIFN0cmluZ1V0aWxzLmNlbnRlciBtZXRob2RzLgpvIExBTkctODMyOiAgRmFzdERhdGVQYXJzZXIgZG9lcyBub3QgaGFuZGxlIHVudGVybWluYXRlZCBxdW90ZXMgY29ycmVjdGx5LgpvIExBTkctODMxOiAgRmFzdERhdGVQYXJzZXIgZG9lcyBub3QgaGFuZGxlIHdoaXRlLXNwYWNlIHByb3Blcmx5LgpvIExBTkctODMwOiAgRmFzdERhdGVQYXJzZXIgY291bGQgdXNlIFxRIFxFIHRvIHF1b3RlIHJlZ2V4ZXMuCm8gTEFORy04Mjg6ICBGYXN0RGF0ZVBhcnNlciBkb2VzIG5vdCBoYW5kbGUgbm9uLUdyZWdvcmlhbiBjYWxlbmRhcnMgcHJvcGVybHkuCm8gTEFORy04MjY6ICBGYXN0RGF0ZVBhcnNlciBkb2VzIG5vdCBoYW5kbGUgbm9uLUFTQ0lJIGRpZ2l0cyBjb3JyZWN0bHkuCm8gTEFORy04MjI6ICBOdW1iZXJVdGlscyNjcmVhdGVOdW1iZXIgLSBiYWQgYmVoYXZpb3VyIGZvciBsZWFkaW5nICItLSIuCm8gTEFORy04MTg6ICBGYXN0RGF0ZUZvcm1hdCdzICJ6IiBwYXR0ZXJuIGRvZXMgbm90IHJlc3BlY3QgdGltZXpvbmUgb2YgQ2FsZW5kYXIKICAgICAgICAgICAgIGluc3RhbmNlcyBwYXNzZWQgdG8gZm9ybWF0KCkuCm8gTEFORy04MTc6ICBBZGQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN5c3RlbVV0aWxzLklTX09TX1dJTkRPV1NfOC4KbyBMQU5HLTgxMzogIFN0cmluZ1V0aWxzLmVxdWFsc0lnbm9yZUNhc2UgZG9lc24ndCBjaGVjayBzdHJpbmcgcmVmZXJlbmNlCiAgICAgICAgICAgICBlcXVhbGl0eS4KbyBMQU5HLTgxMDogIFN0cmluZ1V0aWxzLmpvaW4oKSBlbmRJbmRleCwgYnVnZ2VkIGZvciBsb29wLgpvIExBTkctODA3OiAgUmFuZG9tU3RyaW5nVXRpbHMgdGhyb3dzIGNvbmZ1c2luZyBJQUUgd2hlbiBlbmQgPD0gc3RhcnQuCm8gTEFORy04MDU6ICBSYW5kb21TdHJpbmdVdGlscy5yYW5kb20oY291bnQsIDAsIDAsIGZhbHNlLCBmYWxzZSwgdW5pdmVyc2UsCiAgICAgICAgICAgICByYW5kb20pIGFsd2F5cyB0aHJvd3MgamF2YS5sYW5nLkFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi4KbyBMQU5HLTgwMjogIExvY2FsZVV0aWxzIC0gdW5uZWNlc3NhcnkgcmVjdXJzaXZlIGNhbGwgaW4gU3luY0F2b2lkIGNsYXNzLgpvIExBTkctODAwOiAgSmF2YWRvYyBidWcgaW4gRGF0ZVV0aWxzI2NlaWxpbmcgZm9yIENhbGVuZGFyIGFuZCBPYmplY3QgdmVyc2lvbnMuCm8gTEFORy03ODg6ICBTZXJpYWxpemF0aW9uVXRpbHMgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gd2hlbiBjbG9uaW5nCiAgICAgICAgICAgICBwcmltaXRpdmUgY2xhc3Nlcy4KbyBMQU5HLTc4NjogIFN0cmluZ1V0aWxzIGVxdWFscygpIHJlbGllcyBvbiB1bmRlZmluZWQgYmVoYXZpb3IuCm8gTEFORy03ODM6ICBEb2N1bWVudGF0aW9uIGJ1ZzogU3RyaW5nVXRpbHMuc3BsaXQuCm8gTEFORy03Nzc6ICBqYXIgY29udGFpbnMgdmVsb2NpdHkgdGVtcGxhdGUgb2YgcmVsZWFzZSBub3Rlcy4KbyBMQU5HLTc3NjogIFR5cGVVdGlsc1Rlc3QgY29udGFpbnMgaW5jb3JyZWN0IHR5cGUgYXNzaWduYWJpbGl0eSBhc3NlcnRpb24uCm8gTEFORy03NzU6ICBUeXBlVXRpbHMuZ2V0VHlwZUFyZ3VtZW50cygpIG1pc3NlcyB0eXBlIGFyZ3VtZW50cyBmb3IKICAgICAgICAgICAgIHBhcnRpYWxseS1hc3NpZ25lZCBjbGFzc2VzLgpvIExBTkctNzczOiAgSW1tdXRhYmxlUGFpciBkb2MgY29udGFpbnMgbm9uc2Vuc2UgdGV4dC4KbyBMQU5HLTc3MjogIENsYXNzVXRpbHMuUEFDS0FHRV9TRVBBUkFUT1IgSmF2YWRvYyBjb250YWlucyBnYXJiYWdlIHRleHQuCm8gTEFORy03NjU6ICBFdmVudExpc3RlbmVyU3VwcG9ydC5Qcm94eUludm9jYXRpb25IYW5kbGVyIG5vIGxvbmdlciBkZWZpbmVzCiAgICAgICAgICAgICBzZXJpYWxWZXJzaW9uVUlELgpvIExBTkctNzY0OiAgU3RyQnVpbGRlciBpcyBub3cgc2VyaWFsaXphYmxlLgpvIExBTkctNzYxOiAgRml4IEphdmFkb2MgQW50IHdhcm5pbmdzLgpvIExBTkctNzQ3OiAgTnVtYmVyVXRpbHMgZG9lcyBub3QgaGFuZGxlIExvbmcgSGV4IG51bWJlcnMuCm8gTEFORy03NDM6ICBKYXZhZG9jIGJ1ZyBpbiBzdGF0aWMgaW5uZXIgY2xhc3MgRGF0ZUl0ZXJhdG9yLgoKQ0hBTkdFUwo9PT09PT09PT0KCm8gTEFORy05MzE6ICBNaXNsZWFkaW5nIEphdmFkb2MgY29tbWVudCBpbiBTdHJCdWlsZGVyUmVhZGVyIGNsYXNzLiBUaGFua3MKICAgICAgICAgICAgIHRvIENocmlzdG9waCBTY2huZWVnYW5zLgpvIExBTkctOTEwOiAgU3RyaW5nVXRpbHMubm9ybWFsaXplU3BhY2Ugbm93IGhhbmRsZXMgbm9uLWJyZWFraW5nIHNwYWNlcwogICAgICAgICAgICAgKFVuaWNvZGUgMDBBMCkuIFRoYW5rcyB0byBUaW11ciBZYXJvc2guCm8gTEFORy04MDQ6ICBSZWR1bmRhbnQgY2hlY2sgZm9yIHplcm8gaW4gSGFzaENvZGVCdWlsZGVyIGN0b3IuIFRoYW5rcyB0bwogICAgICAgICAgICAgQWxsb24gTXVyZWluaWsuCm8gTEFORy04ODQ6ICBTaW1wbGlmeSBGYXN0RGF0ZUZvcm1hdDsgZWxpbWluYXRlIGJveGluZy4KbyBMQU5HLTg4MjogIExvb2t1cFRyYW5zbGF0b3Igbm93IHdvcmtzIHdpdGggaW1wbGVtZW50YXRpb25zIG9mIENoYXJTZXF1ZW5jZQogICAgICAgICAgICAgb3RoZXIgdGhhbiBTdHJpbmcuCm8gTEFORy04NDY6ICBQcm92aWRlIENoYXJTZXF1ZW5jZVV0aWxzLnJlZ2lvbk1hdGNoZXMgd2l0aCBhIHByb3BlciBncmVlbgogICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gaW5zdGVhZCBvZiBpbmVmZmljaWVudGx5IGNvbnZlcnRpbmcgdG8gU3RyaW5ncy4KbyBMQU5HLTgzOTogIEFycmF5VXRpbHMgcmVtb3ZlRWxlbWVudHMgbWV0aG9kcyB1c2UgdW5uZWNlc3NhcnkgSGFzaFNldC4KbyBMQU5HLTgzODogIEFycmF5VXRpbHMgcmVtb3ZlRWxlbWVudHMgbWV0aG9kcyBjbG9uZSB0ZW1wb3JhcnkgaW5kZXggYXJyYXlzCiAgICAgICAgICAgICB1bm5lY2Vzc2FyaWx5LgpvIExBTkctNzk5OiAgRGF0ZVV0aWxzI3BhcnNlRGF0ZSB1c2VzIGRlZmF1bHQgbG9jYWxlOyBhZGQgTG9jYWxlIHN1cHBvcnQuCm8gTEFORy03OTg6ICBVc2UgZ2VuZXJpY3MgaW4gU2VyaWFsaXphdGlvblV0aWxzLgoKQ0hBTkdFUyBXSVRIT1VUIFRJQ0tFVAo9PT09PT09PT09PT09PT09PT09PT09PT0KCm8gRml4ZWQgVVJMcyBpbiBqYXZhZG9jIHRvIHBvaW50IHRvIG5ldyBvcmFjbGUuY29tIHBhZ2VzCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAzLjEKCk5FVyBGRUFUVVJFUwo9PT09PT09PT09PT09PQoKbyBMQU5HLTgwMTogIEFkZCBDb252ZXJzaW9uIHV0aWxpdHkgdG8gY29udmVydCBiZXR3ZWVuIGRhdGEgdHlwZXMgb24gYnl0ZSBsZXZlbApvIExBTkctNzYwOiAgQWRkIEFQSSBTdHJpbmdVdGlscy50b1N0cmluZyhieXRlW10gaW50cHV0LCBTdHJpbmcgY2hhcnNldE5hbWUpCm8gTEFORy03NTY6ICBBZGQgQVBJcyBDbGFzc1V0aWxzLmlzUHJpbWl0aXZlV3JhcHBlcihDbGFzczw/PikgYW5kCiAgICAgICAgICAgICBpc1ByaW1pdGl2ZU9yV3JhcHBlcihDbGFzczw/PikKbyBMQU5HLTY5NTogIFN5c3RlbVV0aWxzLklTX09TX1VOSVggZG9lc24ndCByZWNvZ25pemUgRnJlZUJTRCBhcyBhIFVuaXggc3lzdGVtCgpCVUcgRklYRVMKPT09PT09PT09PT0KCm8gTEFORy03NDk6ICBJbmNvcnJlY3QgQnVuZGxlLVN5bWJvbGljTmFtZSBpbiBNYW5pZmVzdApvIExBTkctNzQ2OiAgTnVtYmVyVXRpbHMgZG9lcyBub3QgaGFuZGxlIHVwcGVyLWNhc2UgaGV4OiAwWCBhbmQgLTBYCm8gTEFORy03NDQ6ICBTdHJpbmdVdGlscyB0aHJvd3MgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sRXhjZXB0aW9uIG9uIEdvb2dsZQogICAgICAgICAgICAgQXBwIEVuZ2luZQpvIExBTkctNzQxOiAgQW50IGJ1aWxkIGhhcyB3cm9uZyBjb21wb25lbnQubmFtZQpvIExBTkctNjk4OiAgRG9jdW1lbnQgdGhhdCB0aGUgTXV0YWJsZSBudW1iZXJzIGRvbid0IHdvcmsgYXMgZXhwZWN0ZWQgd2l0aAogICAgICAgICAgICAgU3RyaW5nLmZvcm1hdAoKQ0hBTkdFUwo9PT09PT09PT0KCm8gTEFORy03NTg6ICBBZGQgYW4gZXhhbXBsZSB3aXRoIHdoaXRlc3BhY2UgaW4gU3RyaW5nVXRpbHMuZGVmYXVsdElmRW1wdHkKbyBMQU5HLTc1MjogIEZpeCBjcmVhdGVMb25nKCkgc28gaXQgYmVoYXZlcyBsaWtlIGNyZWF0ZUludGVnZXIoKQpvIExBTkctNzUxOiAgSW5jbHVkZSB0aGUgYWN0dWFsIHR5cGUgaW4gdGhlIFZhbGlkYXRlLmlzSW5zdGFuY2UgYW5kCiAgICAgICAgICAgICBpc0Fzc2lnbmFibGVGcm9tIGV4Y2VwdGlvbiBtZXNzYWdlcwpvIExBTkctNzQ4OiAgRGVwcmVjYXRpbmcgY2hvbXAoU3RyaW5nLCBTdHJpbmcpCm8gTEFORy03MzY6ICBDaGFyVXRpbHMgc3RhdGljIGZpbmFsIGFycmF5IENIQVJfU1RSSU5HIGlzIG5vdCBuZWVkZWQgdG8gY29tcHV0ZQogICAgICAgICAgICAgQ0hBUl9TVFJJTkdfQVJSQVkKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzIGZvciB2ZXJzaW9uIDMuMAoKQURESVRJT05TCj09PT09PT09PT09CgpvIExBTkctMjc2OiAgTXV0YWJsZUJpZ0RlY2ltYWwgYW5kIE11dGFibGVCaWdJbnRlZ2VyLgpvIExBTkctMjg1OiAgV2lzaCA6IG1ldGhvZCB1bmFjY2VudC4KbyBMQU5HLTM1ODogIE9iamVjdFV0aWxzLmNvYWxlc2NlLgpvIExBTkctMzg2OiAgTGVmdE9mL1JpZ2h0T2ZOdW1iZXIgaW4gUmFuZ2UgY29udmVuaWVuY2UgbWV0aG9kcyBuZWNlc3NhcnkuCm8gTEFORy00MzU6ICBBZGQgQ2xhc3NVdGlscy5pc0Fzc2lnbmFibGUoKSB2YXJpYW50cyB3aXRoIGF1dG9ib3hpbmcuCm8gTEFORy00NDQ6ICBTdHJpbmdVdGlscy5lbXB0eVRvTnVsbC4KbyBMQU5HLTQ4MjogIEVuaGFuY2UgU3RyU3Vic3RpdHV0b3IgdG8gc3VwcG9ydCBuZXN0ZWQgJHt2YXItJHtzdWJ2cn19IGV4cGFuc2lvbgpvIExBTkctNDgyOiAgU3RyU3Vic3RpdHV0b3Igbm93IHN1cHBvcnRzIHN1YnN0aXR1dGlvbiBpbiB2YXJpYWJsZSBuYW1lcy4KbyBMQU5HLTQ5NjogIEEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTGF6eSBpbml0aWFsaXphdGlvbiBwYXR0ZXJuLgpvIExBTkctNDk3OiAgQWRkaXRpb24gb2YgQ29udGV4dGVkRXhjZXB0aW9uIGFuZCBDb250ZXh0ZWRSdW50aW1lRXhjZXB0aW9uLgpvIExBTkctNDk4OiAgQWRkIFN0cmluZ0VzY2FwZVV0aWxzLmVzY2FwZVRleHQoKSBtZXRob2RzLgpvIExBTkctNDk5OiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBoYW5kbGluZyBvZiBFeGVjdXRpb25FeGNlcHRpb25zLgpvIExBTkctNTAxOiAgQWRkIHN1cHBvcnQgZm9yIGJhY2tncm91bmQgaW5pdGlhbGl6YXRpb24uCm8gTEFORy01Mjk6ICBBZGQgYSBjb25jdXJyZW50IHBhY2thZ2UuCm8gTEFORy01MzM6ICBWYWxpZGF0ZTogc3VwcG9ydCBmb3IgdmFsaWRhdGluZyBibGFuayBzdHJpbmdzLgpvIExBTkctNTM3OiAgQWRkIEFycmF5VXRpbHMudG9BcnJheSB0byBjcmVhdGUgZ2VuZXJpYyBhcnJheXMuCm8gTEFORy01NDU6ICBBZGQgYWJpbGl0eSB0byBjcmVhdGUgYSBGdXR1cmUgZm9yIGEgY29uc3RhbnQuCm8gTEFORy01NDY6ICBBZGQgbWV0aG9kcyB0byBWYWxpZGF0ZSB0byBjaGVjayB3aGV0aGVyIHRoZSBpbmRleCBpcyB2YWxpZCBmb3IKICAgICAgICAgICAgIHRoZSBhcnJheS9saXN0L3N0cmluZy4KbyBMQU5HLTU1MzogIEFkZCBUeXBlVXRpbHMgY2xhc3MgdG8gcHJvdmlkZSB1dGlsaXR5IGNvZGUgZm9yIHdvcmtpbmcgd2l0aCBnZW5lcmljCiAgICAgICAgICAgICB0eXBlcy4KbyBMQU5HLTU1OTogIEFkZGVkIGlzQXNzaWduYWJsZUZyb20gYW5kIGlzSW5zdGFuY2VPZiB2YWxpZGF0aW9uIG1ldGhvZHMuCm8gTEFORy01NTk6ICBBZGRlZCB2YWxpZFN0YXRlIHZhbGlkYXRpb24gbWV0aG9kLgpvIExBTkctNTYwOiAgTmV3IFRpbWVkU2VtYXBob3JlIGNsYXNzLgpvIExBTkctNTgyOiAgUHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVGhyZWFkRmFjdG9yeSBpbnRlcmZhY2UuCm8gTEFORy01ODg6ICBDcmVhdGUgYSBiYXNpYyBQYWlyPEwsIFI+IGNsYXNzLgpvIExBTkctNTk0OiAgRGF0ZVV0aWxzIGVxdWFsICYgY29tcGFyZSBmdW5jdGlvbnMgdXAgdG8gbW9zdCBzaWduaWZpY2FudCBmaWVsZC4KbyBMQU5HLTYwMTogIEFkZCBCdWlsZGVyIEludGVyZmFjZSAvIFVwZGF0ZSBCdWlsZGVycyB0byBJbXBsZW1lbnQgSXQuCm8gTEFORy02MDk6ICBTdXBwb3J0IGxhenkgaW5pdGlhbGl6YXRpb24gdXNpbmcgYXRvbWljIHZhcmlhYmxlcwpvIExBTkctNjEwOiAgRXh0ZW5kIGV4Y2VwdGlvbiBoYW5kbGluZyBpbiBDb25jdXJyZW50VXRpbHMgdG8gcnVudGltZSBleGNlcHRpb25zLgpvIExBTkctNjE0OiAgU3RyaW5nVXRpbHMuZW5kc1dpdGhBbnkgbWV0aG9kCm8gTEFORy02NDA6ICBBZGQgbm9ybWFsaXplU3BhY2UgdG8gU3RyaW5nVXRpbHMKbyBMQU5HLTY0NDogIFByb3ZpZGUgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgbmV3IGNvbmN1cnJlbnQgcGFja2FnZQpvIExBTkctNjQ5OiAgQm9vbGVhblV0aWxzLnRvQm9vbGVhbk9iamVjdCB0byBzdXBwb3J0IHNpbmdsZSBjaGFyYWN0ZXIgaW5wdXQKbyBMQU5HLTY1MTogIEFkZCBBbm5vdGF0aW9uVXRpbHMKbyBMQU5HLTY1MzogIFByb3ZpZGUgYSB2ZXJ5IGJhc2ljIENvbmN1cnJlbnRJbml0aWFsaXplciBpbXBsZW1lbnRhdGlvbgpvIExBTkctNjU1OiAgQWRkIFN0cmluZ1V0aWxzLmRlZmF1bHRJZkJsYW5rKCkKbyBMQU5HLTY2NzogIEFkZCBhIE51bGwtc2FmZSBjb21wYXJlKCkgbWV0aG9kIHRvIE9iamVjdFV0aWxzCm8gTEFORy02NzY6ICBEb2N1bWVudGVkIHBvdGVudGlhbCBOUEUgaWYgYXV0by1ib3hpbmcgb2NjdXJzIGZvciBzb21lIEJvb2xlYW5VdGlscwogICAgICAgICAgICAgbWV0aG9kcwpvIExBTkctNjc4OiAgQWRkIHN1cHBvcnQgZm9yIENvbmN1cnJlbnRNYXAucHV0SWZBYnNlbnQoKQpvIExBTkctNjkyOiAgQWRkIGhhc2hDb2RlTXVsdGkgdmFyYXJncyBtZXRob2QKbyBMQU5HLTY5NzogIEFkZCBGb3JtYXR0YWJsZVV0aWxzIGNsYXNzCm8gTEFORy02ODQ6ICBMZXZlbnNodGVpbiBEaXN0YW5jZSBXaXRoaW4gYSBHaXZlbiBUaHJlc2hvbGQKClJFTU9WQUxTCj09PT09PT09PT0KCm8gTEFORy00Mzg6ICBSZW1vdmUgQGRlcHJlY2F0ZWRzLgpvIExBTkctNDkyOiAgUmVtb3ZlIGNvZGUgaGFuZGxlZCBub3cgYnkgdGhlIEpESy4KbyBMQU5HLTQ5MzogIFJlbW92ZSBjb2RlIHRoYXQgZG9lcyBub3QgaG9sZCBlbm91Z2ggdmFsdWUgdG8gcmVtYWluLgpvIExBTkctNTkwOiAgUmVtb3ZlIEpESyAxLjIvMS4zIGJ1ZyBoYW5kbGluZyBpbgogICAgICAgICAgICAgU3RyaW5nVXRpbHMuaW5kZXhPZihTdHJpbmcsIFN0cmluZywgaW50KS4KbyBMQU5HLTY3MzogIFdvcmRVdGlscy5hYmJyZXZpYXRlKCkgcmVtb3ZlZApvIExBTkctNjkxOiAgUmVtb3ZlZCBEYXRlVXRpbHMuVVRDX1RJTUVfWk9ORQoKSU1QUk9WRU1FTlRTCj09PT09PT09PT09PT09CgpvIExBTkctMjkwOiAgRW51bVV0aWxzIGZvciBKREsgNS4wLgpvIExBTkctMzM2OiAgRmluYWxseSBzdGFydCB1c2luZyBnZW5lcmljcy4KbyBMQU5HLTM1NTogIFN0ckJ1aWxkZXIgc2hvdWxkIGltcGxlbWVudCBDaGFyU2VxdWVuY2UgYW5kIEFwcGVuZGFibGUuCm8gTEFORy0zOTY6ICBJbnZlc3RpZ2F0ZSBmb3IgdmFyYXJnIHVzYWdlcy4KbyBMQU5HLTQyNDogIEltcHJvdmUgSmF2YWRvYyBmb3IgU3RyaW5nVXRpbHMgY2xhc3MuCm8gTEFORy00NTg6ICBSZWZhY3RvciBWYWxpZGF0ZS5qYXZhIHRvIGVsaW1pbmF0ZSBjb2RlIHJlZHVuZGFuY3kuCm8gTEFORy00Nzk6ICBEb2N1bWVudCB3aGVyZSBpbiBTVk4gdHJ1bmsgaXMuCm8gTEFORy01MDQ6ICBicmluZyBBcnJheVV0aWxzLmlzRW1wdHkgdG8gdGhlIGdlbmVyaWNzIHdvcmxkLgpvIExBTkctNTA1OiAgUmV3cml0ZSBTdHJpbmdFc2NhcGVVdGlscy4KbyBMQU5HLTUwNzogIFN0cmluZ0VzY2FwZVV0aWxzLnVuZXNjYXBlSmF2YSBzaG91bGQgc3VwcG9ydCBcdSsgbm90YXRpb24uCm8gTEFORy01MTA6ICBDb252ZXJ0IFN0cmluZ1V0aWxzIEFQSSB0byB0YWtlIENoYXJTZXF1ZW5jZS4KbyBMQU5HLTUxMzogIEJldHRlciBFbnVtVXRpbHMuCm8gTEFORy01Mjg6ICBNdXRhYmxlIGNsYXNzZXMgc2hvdWxkIGltcGxlbWVudCBhbiBhcHByb3ByaWF0ZWx5IHR5cGVkIE11dGFibGUKICAgICAgICAgICAgIGludGVyZmFjZS4KbyBMQU5HLTUzOTogIENvbXBpbGUgY29tbW9ucy5sYW5nIGZvciBDREMgMS4xL0ZvdW5kYXRpb24gMS4xLgpvIExBTkctNTQwOiAgTWFrZSBOdW1lcmljRW50aXR5RXNjYXBlciBpbW11dGFibGUuCm8gTEFORy01NDE6ICBSZXBsYWNlIFN0cmluZ0J1ZmZlciB3aXRoIFN0cmluZ0J1aWxkZXIuCm8gTEFORy01NDg6ICBVc2UgSXRlcmFibGUgb24gQVBJIGluc3RlYWQgb2YgQ29sbGVjdGlvbi4KbyBMQU5HLTU1MTogIFJlcGxhY2UgUmFuZ2UgY2xhc3NlcyB3aXRoIGdlbmVyaWMgdmVyc2lvbi4KbyBMQU5HLTU2MjogIENoYW5nZSBNYXZlbiBncm91cElkLgpvIExBTkctNTYzOiAgQ2hhbmdlIEphdmEgcGFja2FnZSBuYW1lLgpvIExBTkctNTcwOiAgRG8gdGhlIHRlc3QgY2FzZXMgcmVhbGx5IHN0aWxsIHJlcXVpcmUgbWFpbigpIGFuZCBzdWl0ZSgpIG1ldGhvZHM/Cm8gTEFORy01Nzk6ICBBZGQgbmV3IFZhbGlkYXRlIG1ldGhvZHMuCm8gTEFORy01OTk6ICBDbGFzc1V0aWxzLmdldENsYXNzKCk6IEFsbG93IERvdHMgYXMgSW5uZXIgQ2xhc3MgU2VwYXJhdG9ycy4KbyBMQU5HLTYwNTogIERlZmF1bHRFeGNlcHRpb25Db250ZXh0IG92ZXJ3cml0ZXMgdmFsdWVzIGluIHJlY3Vyc2l2ZSBzaXR1YXRpb25zLgpvIExBTkctNjY4OiAgQ2hhbmdlIE9iamVjdFV0aWxzIG1pbigpICYgbWF4KCkgZnVuY3Rpb25zIHRvIHVzZSB2YXJhcmdzIHJhdGhlcgogICAgICAgICAgICAgdGhhbiBqdXN0IHR3byBwYXJhbWV0ZXJzCm8gTEFORy02ODE6ICBQdXNoIGRvd24gV29yZFV0aWxzIHRvICJ0ZXh0IiBzdWItcGFja2FnZS4KbyBMQU5HLTcxMTogIEFkZCBpbmNsdWRlYW50cnVudGltZT1mYWxzZSB0byBqYXZhYyB0YXJnZXRzIHRvIHF1ZWxsIHdhcm5pbmdzIGluCiAgICAgICAgICAgICBhbnQgMS44LjEgYW5kIGJldHRlciAoYW5kIG1vZGVzdCBwZXJmb3JtYW5jZSBnYWluKS4KbyBMQU5HLTcxMzogIEluY3JlYXNlIHRlc3QgY292ZXJhZ2Ugb2YgRmllbGRVdGlscyByZWFkIG1ldGhvZHMgYW5kIHR3ZWFrCiAgICAgICAgICAgICBqYXZhZG9jLgpvIExBTkctNzE4OiAgYnVpbGQueG1sIEphdmEgMS41KyB1cGRhdGVzLgoKQlVHIEZJWEVTCj09PT09PT09PT09CgpvIExBTkctMTE6ICAgRGVwZW5kIG9uIEpESyAxLjUrLgpvIExBTkctMzAyOiAgU3RyQnVpbGRlciBkb2VzIG5vdCBpbXBsZW1lbnQgY2xvbmUoKS4KbyBMQU5HLTMzOTogIFN0cmluZ0VzY2FwZVV0aWxzLmVzY2FwZUh0bWwoKSBlc2NhcGVzIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGxpa2UKICAgICAgICAgICAgIENoaW5lc2UsIEphcGFuZXNlLCBldGMuCm8gTEFORy0zNjk6ICBFeGNlcHRpb25VdGlscyBub3QgdGhyZWFkLXNhZmUuCm8gTEFORy00MTg6ICBKYXZhZG9jIGluY29ycmVjdCBmb3IgU3RyaW5nVXRpbHMuZW5kc1dpdGhJZ25vcmVDYXNlLgpvIExBTkctNDI4OiAgU3RyaW5nVXRpbHMuaXNBbHBoYSwgaXNBbHBoYW51bWVyaWMgYW5kIGlzTnVtZXJpYyBub3cgcmV0dXJuIGZhbHNlCiAgICAgICAgICAgICBmb3IgIiIKbyBMQU5HLTQzOTogIFN0cmluZ0VzY2FwZVV0aWxzLmVzY2FwZUhUTUwoKSBkb2VzIG5vdCBlc2NhcGUgY2hhcnMgKDB4MDAtMHgyMCkuCm8gTEFORy00NDg6ICBMb3dlciBBc2NpaSBDaGFyYWN0ZXJzIGRvbid0IGdldCBlbmNvZGVkIGJ5IEVudGl0aWVzLmphdmEuCm8gTEFORy00Njg6ICBKREsgMS41IGJ1aWxkL3J1bnRpbWUgZmFpbHVyZSBvbiBMQU5HLTM5MyAoRXF1YWxzQnVpbGRlcikuCm8gTEFORy00NzQ6ICBGaXhlcyBmb3IgdGhyZWFkIHNhZmV0eS4KbyBMQU5HLTQ3ODogIFN0b3BXYXRjaCBkb2VzIG5vdCByZXNpc3QgdG8gc3lzdGVtIHRpbWUgY2hhbmdlcy4KbyBMQU5HLTQ4MDogIFN0cmluZ0VzY2FwZVV0aWxzLmVzY2FwZUh0bWwgaW5jb3JyZWN0bHkgY29udmVydHMgdW5pY29kZQogICAgICAgICAgICAgY2hhcmFjdGVycyBhYm92ZSBVKzAwRkZGRiBpbnRvIDIgY2hhcmFjdGVycy4KbyBMQU5HLTQ4MTogIFBvc3NpYmxlIHJhY2UtY29uZGl0aW9ucyBpbiBoYXNoQ29kZSBvZiB0aGUgcmFuZ2UgY2xhc3Nlcy4KbyBMQU5HLTU2NDogIEltcHJvdmUgU3RyTG9va3VwIEFQSSBkb2N1bWVudGF0aW9uLgpvIExBTkctNTY4OiAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpIGlzIHVzZWQgdG9vIGdlbmVyYWxseS4KbyBMQU5HLTU3MTogIEFycmF5VXRpbHMuYWRkKFRbOiAgYXJyYXksIFQgZWxlbWVudCkgY2FuIGNyZWF0ZSB1bmV4cGVjdGVkCiAgICAgICAgICAgICBDbGFzc0Nhc3RFeGNlcHRpb24uCm8gTEFORy01ODU6ICBleGNlcHRpb24uRGVmYXVsdEV4Y2VwdGlvbkNvbnRleHQuZ2V0Rm9ybWF0dGVkRXhjZXB0aW9uTWVzc2FnZQogICAgICAgICAgICAgY2F0Y2hlcyBUaHJvd2FibGUuCm8gTEFORy01OTY6ICBTdHJTdWJzdGl0dXRvciBzaG91bGQgYWxzbyBoYW5kbGUgdGhlIGRlZmF1bHQgcHJvcGVydGllcyBvZiBhCiAgICAgICAgICAgICBqYXZhLnV0aWwuUHJvcGVydGllcyBjbGFzcwpvIExBTkctNjAwOiAgSmF2YWRvYyBpcyBpbmNvcnJlY3QgZm9yIHB1YmxpYyBzdGF0aWMgaW50CiAgICAgICAgICAgICBsYXN0SW5kZXhPZihTdHJpbmcgc3RyLCBTdHJpbmcgc2VhcmNoU3RyKS4KbyBMQU5HLTYwMjogIENvbnRleHRlZFJ1bnRpbWVFeGNlcHRpb24gbm8gbG9uZ2VyIGFuICd1bmNoZWNrZWQnIGV4Y2VwdGlvbi4KbyBMQU5HLTYwNjogIEVxdWFsc0J1aWxkZXIgY2F1c2VzIFN0YWNrT3ZlcmZsb3dFeGNlcHRpb24uCm8gTEFORy02MDg6ICBTb21lIFN0cmluZ1V0aWxzIG1ldGhvZHMgc2hvdWxkIHRha2UgYW4gaW50IGNoYXJhY3RlciBpbnN0ZWFkIG9mCiAgICAgICAgICAgICBjaGFyIHRvIHVzZSBTdHJpbmcgQVBJIGZlYXR1cmVzLgpvIExBTkctNjE3OiAgU3RyaW5nRXNjYXBlVXRpbHMuZXNjYXBlWE1MKCkgY2FuJ3QgcHJvY2VzcyBVVEYtMTYgc3VwcGxlbWVudGFyeQogICAgICAgICAgICAgY2hhcmFjdGVycwpvIExBTkctNjI0OiAgU3lzdGVtVXRpbHMuZ2V0SmF2YVZlcnNpb25Bc0Zsb2F0IHRocm93cwogICAgICAgICAgICAgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBvbiBBbmRyb2lkIHJ1bnRpbWUvRGFsdmlrIFZNCm8gTEFORy02Mjk6ICBDaGFyc2V0IG1heSBub3QgYmUgdGhyZWFkc2FmZSwgYmVjYXVzZSB0aGUgSGFzaFNldCBpcyBub3Qgc3luY2guCm8gTEFORy02Mzg6ICBOdW1iZXJVdGlscyBjcmVhdGVOdW1iZXIgdGhyb3dzIGEgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbgogICAgICAgICAgICAgd2hlbiBhcmd1bWVudCBjb250YWluaW5nICJlIiBhbmQgIkUiIGlzIHBhc3NlZCBpbgpvIExBTkctNjQzOiAgSmF2YWRvYyBTdHJpbmdVdGlscy5sZWZ0KCkgY2xhaW1zIHRvIHRocm93IG9uIG5lZ2F0aXZlIGxlbiwgYnV0CiAgICAgICAgICAgICBkb2Vzbid0Cm8gTEFORy02NDU6ICBGYXN0RGF0ZUZvcm1hdC5mb3JtYXQoKSBvdXRwdXRzIGluY29ycmVjdCB3ZWVrIG9mIHllYXIgYmVjYXVzZQogICAgICAgICAgICAgbG9jYWxlIGlzbid0IHJlc3BlY3RlZApvIExBTkctNjQ2OiAgU3RyaW5nRXNjYXBlVXRpbHMudW5lc2NhcGVKYXZhIGRvZXNuJ3QgaGFuZGxlIG9jdGFsIGVzY2FwZXMgYW5kCiAgICAgICAgICAgICBVbmljb2RlIHdpdGggZXh0cmEgdQpvIExBTkctNjU2OiAgRXhhbXBsZSBTdHJpbmdVdGlscy5pbmRleE9mQW55QnV0KCJ6emFieXljZHh4IiwgJycpID0gMCBpbmNvcnJlY3QKbyBMQU5HLTY1ODogIFNvbWUgRW50aXR5cyBsaWtlICZPdW1sOyBhcmUgbm90IG1hdGNoZWQgcHJvcGVybHkgYWdhaW5zdCBpdHMKICAgICAgICAgICAgIElTTzg4NTktMSByZXByZXNlbnRhdGlvbgpvIExBTkctNjU5OiAgRW50aXR5QXJyYXlzIHR5cG86IHsiXHUyMTIyIiwgIiZtaW51czsifSwgLy8gbWludXMgc2lnbiwgVSsyMjEyCiAgICAgICAgICAgICBJU090ZWNoCm8gTEFORy02NjogICBTdHJpbmdFc2NhcGVyLmVzY2FwZVhtbCgpIGVzY2FwZXMgY2hhcmFjdGVycyA+IDB4N2YuCm8gTEFORy02NjI6ICBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMubWF0aC5GcmFjdGlvbiBkb2VzIG5vdCByZWR1Y2UKICAgICAgICAgICAgIChJbnRlZ2VyLk1JTl9WQUxVRSwgMl5rKQpvIExBTkctNjYzOiAgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLm1hdGguRnJhY3Rpb24gZG9lcyBub3QgYWx3YXlzIHN1Y2NlZWQgaW4KICAgICAgICAgICAgIG11bHRpcGx5QnkgYW5kIGRpdmlkZUJ5Cm8gTEFORy02NjQ6ICBOdW1iZXJVdGlscy5pc051bWJlcihTdHJpbmcpIGlzIG5vdCByaWdodCB3aGVuIHRoZSBTdHJpbmcgaXMKICAgICAgICAgICAgICIxLjFMIgpvIExBTkctNjcyOiAgRG9jIGJ1ZyBpbiBEYXRlVXRpbHMjY2VpbGluZwpvIExBTkctNjc3OiAgRGF0ZVV0aWxzLmlzU2FtZUxvY2FsVGltZSBjb21wYXJlcyB1c2luZyAxMiBob3VyIGNsb2NrIGFuZCBub3QKICAgICAgICAgICAgIDI0IGhvdXIKbyBMQU5HLTY4NTogIEVxdWFsc0J1aWxkZXIgc3luY2hyb25pemVzIG9uIEhhc2hDb2RlQnVpbGRlci4KbyBMQU5HLTcwMzogIFN0cmluZ1V0aWxzLmpvaW4gdGhyb3dzIE5QRSB3aGVuIHRvU3RyaW5nIHJldHVybnMgbnVsbCBmb3Igb25lIG9mCiAgICAgICAgICAgICBvYmplY3RzIGluIGNvbGxlY3Rpb24KbyBMQU5HLTcxMDogIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gd2hlbiBjYWxsaW5nIHVuZXNjYXBlSHRtbDQoIiYjMDMiKQpvIExBTkctNzE0OiAgU3RyaW5nVXRpbHMgZG9jL2NvbW1lbnQgc3BlbGxpbmcgZml4ZXMuCm8gTEFORy03MTU6ICBDaGFyU2V0VXRpbHMuc3F1ZWV6ZSgpIHNwZWVkdXAuCm8gTEFORy03MTY6ICBzd2FwQ2FzZSBhbmQgKmNhcGl0YWxpemUgc3BlZWR1cHMuCgoKSGlzdG9yaWNhbCBsaXN0IG9mIGNoYW5nZXM6IGh0dHA6Ly9jb21tb25zLmFwYWNoZS5vcmcvbGFuZy9jaGFuZ2VzLXJlcG9ydC5odG1sCgpGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gQ29tbW9ucyBMYW5nLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0bwpzdWJtaXQgYnVnIHJlcG9ydHMsIHBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZQpBcGFjaGUgQ29tbW9ucyBMYW5nIHdlYnNpdGU6CgpodHRwOi8vY29tbW9ucy5hcGFjaGUub3JnL2xhbmcvCgpIYXZlIGZ1biEKLUFwYWNoZSBDb21tb25zIExhbmcgdGVhbQoK