bGliYXBhY2hlLW1vZC1kdGNsICgwLjExLjgtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogTWFrZSBzdXJlIHRvIGNoZWNrIHRoZSBjb3JyZWN0IHZhcmlhYmxlIG5hbWVzIHdpdGggJ2xpc3QnIGFuZAogICAgJ2V4aXN0cy4gYXMgd2VsbC4KCiAtLSBEYXZpZCBOLiBXZWx0b24gPGRhdmlkd0BkZWJpYW4ub3JnPiAgRnJpLCAgMyBNYXkgMjAwMiAxNjowNDo1MSArMDIwMAoKbGliYXBhY2hlLW1vZC1kdGNsICgwLjExLjctMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogbW9kX2R0Y2wuYyAoZXhlY3V0ZV9hbmRfY2hlY2spOiBNYWtlIHN1cmUgdG8gb3V0cHV0IHJlc3VsdHMgb2YKICAgIEVycm9yU2NyaXB0LgoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGRlYmlhbi5vcmc+ICBUaHUsIDE4IEFwciAyMDAyIDE1OjAxOjMwICswMjAwCgpsaWJhcGFjaGUtbW9kLWR0Y2wgKDAuMTEuNi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCBwcm9ibGVtIHdpdGggJ3ZhcicgY29tbWFuZC4gIFZhcmlhYmxlcyB3aXRoIHNpbWlsYXIgbmFtZXMKICAgIHNvbWV0aW1lcyBhcmUgY29uZnVzZWQuCgogLS0gRGF2aWQgTi4gV2VsdG9uIDxkYXZpZHdAZGViaWFuLm9yZz4gIFdlZCwgMTMgTWFyIDIwMDIgMTY6NTc6MTQgKzAxMDAKCmxpYmFwYWNoZS1tb2QtZHRjbCAoMC4xMS41LTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIEZpeGVkIHBvc3RpbnN0IGFuZCBwb3N0cm0sIHRoYW5rcyB0byBK4W5vcyBIb2zhbnlpIDxjc2FuaUBsbWUubGludXguaHU+LgoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGRlYmlhbi5vcmc+ICBNb24sIDE5IE5vdiAyMDAxIDEyOjQyOjA2ICswMTAwCgpsaWJhcGFjaGUtbW9kLWR0Y2wgKDAuMTEuNS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBDaGVjayByZXR1cm4gdmFsdWUgZm9yIEFwYWNoZVJlcXVlc3RfX19wYXJzZS4KCiAtLSBEYXZpZCBOLiBXZWx0b24gPGRhdmlkd0BkZWJpYW4ub3JnPiAgU2F0LCAgMyBOb3YgMjAwMSAxNzozODowOCArMDEwMAoKbGliYXBhY2hlLW1vZC1kdGNsICgwLjExLjQtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRml4ZWQgYnVnIGluIFBhcnNlIGNvbW1hbmQuCgogICogQWRkZWQgRGViaWFuIFNTTCBjb25maWcgc3R1ZmYgZnJvbSBK4W5vcyBIb2zhbnlpIChjbG9zZXM6ICMxMTUzMzMpCgogLS0gRGF2aWQgTi4gV2VsdG9uIDxkYXZpZHdAZGViaWFuLm9yZz4gIE1vbiwgMTUgT2N0IDIwMDEgMjA6NDM6NDAgKzAyMDAKCmxpYmFwYWNoZS1tb2QtZHRjbCAoMC4xMS4zLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIEkxOG4gdXBkYXRlcy4KCiAgKiBGaXhlZCBidWlsZCBzY3JpcHRzLiAoY2xvc2VzOiAjMTExNDg4KQoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGRlYmlhbi5vcmc+ICBUdWUsICA5IE9jdCAyMDAxIDE3OjIyOjM3ICswMjAwCgpsaWJhcGFjaGUtbW9kLWR0Y2wgKDAuMTEuMi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBNaW5vciB1cGRhdGVzLgogICogRml4ZXMgYnVpbGQgdmFyaWFibGVzOiAoY2xvc2VzOiAjMTAyMjAwKQoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGRlYmlhbi5vcmc+ICBUaHUsIDMwIEF1ZyAyMDAxIDExOjA4OjE3ICswMjAwCgpsaWJhcGFjaGUtbW9kLWR0Y2wgKDAuMTEuMS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCBWQVJTIHZhcmlhYmxlLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCgogICogRml4ZWQgYnVpbGQgdmFyaWFibGVzOiAoY2xvc2VzOiAjMTAyMjA4KQoKIC0tCgotLSBEYXZpZCBOLiBXZWx0b24gPGRhdmlkd0BkZWJpYW4ub3JnPiAgRnJpLCAyNyBKdWwgMjAwMSAxMzo1MjoxMCArMDIwMAoKbGliYXBhY2hlLW1vZC1kdGNsICgwLjExLjAtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogTmV3IHZhcmlhYmxlIGNvbW1hbmQgJ3ZhcicuCgogLS0gRGF2aWQgTi4gV2VsdG9uIDxkYXZpZHdAZGViaWFuLm9yZz4gIFNhdCwgIDIgSnVuIDIwMDEgMTk6MTg6MzAgKzAyMDAKCmxpYmFwYWNoZS1tb2QtZHRjbCAoMC4xMC4xLTApIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIEZpeGVkIGZpbGUgdXBsb2FkIGJ1Zy4KCiAgKiBBZGRlZCBFcnJvclNjcmlwdCBkaXJlY3RpdmUuCgogICogVXBkYXRlIGRvY3MuCgogLS0gRGF2aWQgTi4gV2VsdG9uIDxkYXZpZHdAZGViaWFuLm9yZz4gIFR1ZSwgIDEgTWF5IDIwMDEgMTg6MTc6MDggKzAyMDAKCmxpYmFwYWNoZS1tb2QtZHRjbCAoMC45LjMtMykgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogVXBncmFkZWQgYXByZXEqIHN0dWZmIHRvIGRlYWwgd2l0aCBmaWxlIHVwbG9hZHMgZGlyZWN0bHkgdG8gYXBhY2hlCiAgICB2YXJpYWJsZS4KCiAgKiBVUExPQUQgdmFyaWFibGVzIGNhbiBub3cgYmUgbGlzdHMuCgogICogU3dpdGNoZWQgc3ludGF4IHRvIDw/ID8+LgoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGRlYmlhbi5vcmc+ICBUdWUsIDIwIE1hciAyMDAxIDIwOjE3OjI5ICswMTAwCgpsaWJhcGFjaGUtbW9kLWR0Y2wgKDAuOS4zLTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIEFkZGVkIGJ1aWxkIGRlcGVuZHMuCgogICogQ2xvc2VzICM4NTc4Ny4KCiAgKiBDbG9zZXMgIzg3MjUxLgoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGRlYmlhbi5vcmc+ICBNb24sIDI2IEZlYiAyMDAxIDE0OjAxOjM0ICswMTAwCgpsaWJhcGFjaGUtbW9kLWR0Y2wgKDAuOS4zLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIE5ldyB2ZXJzaW9uLgoKICAqIENsZWFuZWQgdXAgRGViaWFuIGJ1aWxkIHN0dWZmLCAoRml4ZXMgIzY2NDAyKS4KCiAtLSBEYXZpZCBOLiBXZWx0b24gPGRhdmlkd0Bwcm9zYS5pdD4gIEZyaSwgMTYgRmViIDIwMDEgMTQ6MTE6NTUgKzAxMDAKCmxpYmFwYWNoZS1tb2QtZHRjbCAoMC45LjAtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogTmV3IHZlcnNpb24uCgogICogU3RhcnRlZCB1c2luZyBhcHJlcSBjb2RlIGZvciBmaWxlIHVwbG9hZHMgYW5kIG90aGVyIHN0dWZmLgoKICAqIERvY3VtZW50YXRpb24gY2hhbmdlcy4KCiAtLSBEYXZpZCBOLiBXZWx0b24gPGRhdmlkd0BkZWJpYW4ub3JnPiAgTW9uLCAxMiBGZWIgMjAwMSAxOTo1Mjo1OSArMDEwMAoKbGliYXBhY2hlLW1vZC1kdGNsICgwLjguMTItMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogVmFyaW91cyBjb29raWUgZml4ZXMuCgogICogTmV3IGJ1aWxkIHN5c3RlbS4KCiAtLSBEYXZpZCBOLiBXZWx0b24gPGRhdmlkd0Bwcm9zYS5pdD4gIFN1biwgIDUgTm92IDIwMDAgMjM6NDg6MTEgKzAxMDAKCmxpYmFwYWNoZS1tb2QtZHRjbCAoMC44LjgtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogQ29kZSB0byBkZWFsIHdpdGggYmVmb3JlL2FmdGVyIHNjcmlwdHMuCgogICogUmV3cml0ZSBvZiBBcGFjaGUgZGlyZWN0aXZlcy4KCiAtLSBEYXZpZCBOLiBXZWx0b24gPGRhdmlkd0BsaW51eGNhcmUuY29tPiAgVHVlLCAyNiBTZXAgMjAwMCAxNzo1OTo1NyArMDIwMAoKbGliYXBhY2hlLW1vZC1kdGNsICgwLjguMS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBQdXQgc29tZSBjb2RlIGluIGFzIGEgd29ya2Fyb3VuZCBmb3Igc3lzdGVtcyB3aXRoIFRjbCBjb21waWxlZCBhZ2FpbnN0CiAgICB0aHJlYWRzLgoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGVmbi5vcmc+ICBUaHUsIDIyIEp1biAyMDAwIDAxOjQyOjI2ICswMjAwCgpsaWJhcGFjaGUtbW9kLWR0Y2wgKDAuOC4wLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIEFkZGVkIGluZm9ybWF0aW9uIGFib3V0IGJ1aWxkaW5nIG9uIEhQVVguCiAgKiBBZGRlZCBzdXBwb3J0IGZvciAudGNsIGZpbGVzLgogICogRml4ZWQgYnVnIGluIEhHZXRWYXJzIHdoaWNoIG1hbmlmZXN0cyBpdHNlbGYgb25seSB3aGVuIGNvbnRlbnQKICAgIG5lZ290aWF0aW9uIGlzIHVzZWQuCiAgKiBVcGRhdGVkIGRvY3VtZW50YXRpb24uCgogLS0gRGF2aWQgTi4gV2VsdG9uIDxkYXZpZHdAZWZuLm9yZz4gIFR1ZSwgMTYgTWF5IDIwMDAgMTk6MDA6MDUgKzAyMDAKCmxpYmFwYWNoZS1tb2QtZHRjbCAoMC43LjUtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogQ2hhbmdlZCBocHV0cyB0byB1c2UgIiIgaW5zdGVhZCBvZiB7fSwgc28gdGhhdCB7IGFuZCB9IG1heSBiZSBlc2NhcGVkCiAgICB3aXRoIGJhY2tzbGFzaGVzLgoKICAqIENoYW5nZWQgb3V0cHV0IGZvcm1hdCBmb3IgZXJyb3JzLgoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGVmbi5vcmc+ICBXZWQsIDE5IEFwciAyMDAwIDE3OjQ5OjQ3ICswMjAwCgpsaWJhcGFjaGUtbW9kLWR0Y2wgKDAuNy4zLTIpIGZyb3plbiB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBSZW1vdmVkICJjb2RlMmh0bWwiIHRhcmdldCBmcm9tIGJ1aWxkIHRhcmdldC4KICAqIEZpeGVzICM1ODQzMS4KCiAtLSBEYXZpZCBOLiBXZWx0b24gPGRhdmlkd0BlZm4ub3JnPiAgRnJpLCAgMyBNYXIgMjAwMCAxMzoxMToyMyArMDEwMAoKbGliYXBhY2hlLW1vZC1kdGNsICgwLjcuMy0xKSBmcm96ZW4gdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRml4ZXMgR0VUIGFyZ3VtZW50IHBhcnNpbmcgYnVnLgogICogQ2hhbmdlZCBhcmd1bWVudCBwYXJzaW5nIHRvIGNyZWF0ZSBvbmUgbGlzdCBhbmQgYXZvaWQgc3VibGlzdHMuCgogLS0gRGF2aWQgTi4gV2VsdG9uIDxkYXZpZHdAZWZuLm9yZz4gIFNhdCwgMjIgSmFuIDIwMDAgMjA6NDY6MzQgLTA4MDAKCmxpYmFwYWNoZS1tb2QtZHRjbCAoMC43LjAtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogTWFkZSBocHV0cywgaW5jbHVkZSwgYW5kIGJ1ZmZlcl9hZGQgY29tbWFuZHMgc2FmZSBmb3IgYmluYXJ5IGFuZAogICAgc3BhcnNlIGRhdGEuCgogICogTm93IGFibGUgdG8gb3V0cHV0IGRpZmZlcmVudCBtaW1lIHR5cGVzLgoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGVmbi5vcmc+ICBTYXQsIDE4IERlYyAxOTk5IDE4OjUwOjI5IC0wODAwCgpsaWJhcGFjaGUtbW9kLWR0Y2wgKDAuNy4wLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIE1ham9yIG92ZXJoYXVsIG9mIGhlYWRlciBhbmQgYnVmZmVyaW5nIHN5c3RlbS4KICAqIFNldmVyYWwgbmV3IGNvbW1hbmRzLgoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGVmbi5vcmc+ICBTdW4sICA1IERlYyAxOTk5IDIxOjI0OjIzIC0wODAwCgpsaWJhcGFjaGUtbW9kLWR0Y2wgKDAuNi40LTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIEZpeGVkIExpbnRpYW4gcHJvYmxlbXM6CiAgKiBTZXQgYW5kIHJlbW92ZSBsaW5rcyBiZXR3ZWVuIC91c3IvZG9jIGFuZCAvdXNyL3NoYXJlL2RvYy4KICAqIEFkZGVkIGRoX2luc3RhbGxjaGFuZ2Vsb2dzLgoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGVmbi5vcmc+ICBTdW4sIDE0IE5vdiAxOTk5IDE1OjE1OjUxIC0wODAwCgpsaWJhcGFjaGUtbW9kLWR0Y2wgKDAuNi40LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIFBhdGNoIGZyb20gSmFuIE5panRtYW4gdG8gY29tcGlsZSBtb2RfZHRjbCB1bmRlciB3aW5kb3dzIGFuZCBlbGltaW5hdGUKICAgIHN0cmluZ3MuaC4gIEluY2x1ZGVkIHdpbmRvd3MvIGRpcmVjdG9yeSBpbiBzb3VyY2VzLgoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGVmbi5vcmc+ICBTYXQsICA2IE5vdiAxOTk5IDA5OjU0OjM0IC0wODAwCgpsaWJhcGFjaGUtbW9kLWR0Y2wgKDAuNi4zLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIEZpeGVkIHNtYWxsIGJ1ZyBpbiB2YXJpYWJsZSBkZWNvZGluZyAoUGF0cmljayBEaWFtb25kKS4KCiAtLSBEYXZpZCBOLiBXZWx0b24gPGRhdmlkd0BlZm4ub3JnPiAgTW9uLCAxOCBPY3QgMTk5OSAwNzoyNzo0OSAtMDcwMAoKbGliYXBhY2hlLW1vZC1kdGNsICgwLjYuMi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBBZGRlZCBQYXRyaWNrIERpYW1vbmQncyBmaXggZm9yIHJlbW5hbnQgbmFtZXNwYWNlcy4KICAqIFNpbXBsaWZpZWQgaGFuZGxpbmcgb2YgbGlzdCBDR0kgdmFyaWFibGVzICh0aGFua3MgdG8gQW5kcmV3IE4uIE5lZmVka2luKQoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGVmbi5vcmc+ICBGcmksIDEzIEF1ZyAxOTk5IDIxOjIzOjUyIC0wNzAwCgpsaWJhcGFjaGUtbW9kLWR0Y2wgKDAuNi4xLTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIE5vdywgImV4YW1wbGVzLnR0bWw/YT0xJmE9MiZhPTMiIGNyZWF0ZXMgYSBUY2wgbGlzdCwgaW5zdGVhZCBvZgogICBvdmVyd3JpdGluZyAnYScgd2l0aCB0aGUgbGFzdCB2YWx1ZS4KCiAtLSBEYXZpZCBOLiBXZWx0b24gPGRhdmlkd0BlZm4ub3JnPiAgVHVlLCAgMyBBdWcgMTk5OSAyMzo0OTo0NCAtMDcwMAoKbGliYXBhY2hlLW1vZC1kdGNsICgwLjYuMC0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBDcmVhdGVkIFBhcnNlIFRjbCBjb21tYW5kLCB0byBlbmFibGUgcGFyc2luZyBvZiB0dG1sIGZpbGVzIGZyb20KICAgd2l0aGluIHNjcmlwdHMuCgogICogQ2hhbmdlZCB0byBBcGFjaGUgYWxsb2MgY29tbWFuZHMgaW4gcGFyc2VhcmdzLgoKICAqIEZpeGVkIGJ1ZyBpbiBHRVQgdmFyaWFibGUgaGFuZGxpbmcgKGh0dHA6Ly9zb21lc2l0ZS9mb28udHRtbD9mb28KICAgbm93IHdvcmtzKS4KCiAgKiBBZGRlZCBjaGlsZF9pbml0IGFuZCBjaGlsZF9leGl0IGhhbmRsZXJzIGFuZCBkaXJlY3RpdmVzLgoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGVmbi5vcmc+ICBUaHUsIDI5IEp1bCAxOTk5IDIwOjU0OjIzIC0wNzAwCgpsaWJhcGFjaGUtbW9kLWR0Y2wgKDAuNS40LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIEZpeGVkIGJ1ZyBpbiBQT1NUIGNvZGUuCgogLS0gRGF2aWQgTi4gV2VsdG9uIDxkYXZpZHdAZWZuLm9yZz4gIE1vbiwgMTQgSnVuIDE5OTkgMjI6Mzk6MDggLTA3MDAKCmxpYmFwYWNoZS1tb2QtZHRjbCAoMC41LjMtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogRml4ZWQgcHJvYmxlbSB3aXRoIFBPU1QgZGF0YS4KICAqIEludGVncmF0ZWQgUGF0cmljayBEaWFtb25kJ3MgbmV3IEhHZXRWYXJzLmMuCgogLS0gRGF2aWQgTi4gV2VsdG9uIDxkYXZpZHdAZWZuLm9yZz4gIFR1ZSwgIDggSnVuIDE5OTkgMjM6NTU6NDAgLTA3MDAKCmxpYmFwYWNoZS1tb2QtZHRjbCAoMC41LjItMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogU21hbGwgZml4IGZyb20gUGFvbG8gQnJ1dHRpIC0gY2hhbmdlICdjJyB0byBjaGFyIGluIHBhcnNlci4KCiAtLSBEYXZpZCBOLiBXZWx0b24gPGRhdmlkd0BlZm4ub3JnPiAgV2VkLCAyMSBBcHIgMTk5OSAyMDoxMjo0NCAtMDcwMAoKbGliYXBhY2hlLW1vZC1kdGNsICgwLjUuMS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBjYWNoZVNpemUgZGVmYXVsdHMgdG8gYXBfbWF4X3JlcXVlc3RzX3Blcl9jaGlsZCAvIDIuCgogLS0gRGF2aWQgTi4gV2VsdG9uIDxkYXZpZHdAZWZuLm9yZz4gIFR1ZSwgMjAgQXByIDE5OTkgMTI6Mjc6MTggLTA3MDAKCmxpYmFwYWNoZS1tb2QtZHRjbCAoMC41LjAtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogQWRkZWQgInRlc3RkdGNsIiwgZm9yIHN0YXRpYyB0ZXN0aW5nIG9mIHR0bWwgcGFnZXMuCiAgKiBBZGRlZCBuZXcgVGNsIGNvbW1hbmQgImR0Y2xfaW5mbyIsIHdoaWNoIHByaW50cyBzb21lIGluZm8gYWJvdXQgdGhlCiAgaW50ZXJuYWwgc3RhdGUuCiAgKiBBZGRlZCAiRHRjbF9DYWNoZVNpemUiIGdsb2JhbCBjb25maWd1cmF0aW9uLgogICogQ2hhbmdlZCAiR2xvYmFsU2NyaXB0IiB0byAiRHRjbF9HbG9iYWxTY3JpcHQiLgogICogQWRkZWQgUGFvbG8gQnJ1dHRpJ3MgY2hhbmdlcywgd2hpY2ggaW5jbHVkZToKICAqIE1vcmUgY29tcGxldGUgdXNlIG9mIFRjbCBvYmplY3RzLgogICogQ2FjaGluZyBzeXN0ZW0uICBUaGlzIGRvZXMgbm90IGNhY2hlIHRoZSByZXN1bHRzIG9mIHRoZSBzY3JpcHRzLCBqdXN0CiAgdGhlIFRjbCBvYmplY3RzIHJlc3VsdGluZyBmcm9tIHJlYWRpbmcgdGhlIGZpbGVzIGluIGFuZCBwYXJzaW5nIHRoZW0uCiAgKiBVc2Ugb2YgYXBfIGNvbW1hbmRzIHRvIG1hbmFnZSBtZW1vcnkuCiAgKiBUaGUgSW5jbHVkZSBjb21tYW5kIGlzIGltcGxlbWVudGVkIHdpdGggVGNsXyBmaWxlIGludGVyZmFjZSwgd2hpY2gKICBpbXByb3ZlcyBib3RoIHBvcnRhYmlsaXR5IGFuIGVycm9yIG1lc3NhZ2luZy4KICAqIEFsbCAid3JvbmcgYXJncyIgYXJlIGltcGxlbWVudGVkIHdpdGggdGhlIHN0YW5kYXJkIFRjbF9Xcm9uZ051bUFyZ3MgY2FsbC4KICAqIFRoYW5rcyBQYW9sbyEKCiAtLSBEYXZpZCBOLiBXZWx0b24gPGRhdmlkd0BlZm4ub3JnPiAgU3VuLCAxNCBNYXIgMTk5OSAxNDo0NzowMyAtMDgwMAoKbGliYXBhY2hlLW1vZC1kdGNsICgwLjQuNi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBBZGRlZCAnc2V0Y29va2llJyBjb21tYW5kLgogICogRHJhbWF0aWMgaW1wcm92ZW1lbnRzIHRvIGR0Y2wtbW9kZS5lbCwgYWxsb3dpbmcgeW91IHRvIGF1dG9tYXRpY2FsbHkKICBzd2l0Y2ggYmV0d2VlbiBUQ0wgYW5kIEhUTUwgbW9kZXMhCiAgKiBJbml0aWF0ZWQgc3dpdGNoIHRvIFRjbCAnb2JqZWN0cycuCiAgKiBCZWdpbmluZ3Mgb2YgYSB1c2VyIG1hbnVhbCBpbiB1c2UuaHRtbC4KCiAtLSBEYXZpZCBOLiBXZWx0b24gPGRhdmlkd0BlZm4ub3JnPiAgU3VuLCAxNCBNYXIgMTk5OSAxNDo0NzowMyAtMDgwMAoKbGliYXBhY2hlLW1vZC1kdGNsICgwLjQuNS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBDaGFuZ2VkICdjZ2kudGNsJyB0byAnZHRjbC50Y2wnLCBhbmQgYWRkZWQgUm9sZiBBZGUncyBpbXByb3ZlbWVudHMuCiAgKiBBZGRlZCBkb2N1bWVudGF0aW9uIHBhZ2UgZm9yIGR0Y2wudGNsLgogICogVXBkYXRlZCBkb2N1bWVudGF0aW9uLgoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGVmbi5vcmc+ICBXZWQsIDI0IEZlYiAxOTk5IDIzOjMzOjIwIC0wODAwCgpsaWJhcGFjaGUtbW9kLWR0Y2wgKDAuNC40LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIEZpeGVkIG1pbm9yIGJ1Z3MgaW4gUE9TVCBjb2RlLgogICogQWRkZWQgZHRjbC1tb2RlLmVsLgogICogRG9jdW1lbnRhdGlvbiBjaGFuZ2VzOiB1cGRhdGVzLCBhbmQgZXhwbGFuYXRpb24gb2YgaG93IHRvIGNvbXBpbGUKICAgIG1vZF9kdGNsIGFzIGEgc3RhdGljIG1vZHVsZS4KICAqIEFkZGVkICdDb25maWd1cmUnIGhlbHAgdG8gbW9kX2R0Y2wuYwogICogQWRkZWQgUm9sZiBBZGUncyBwcmVsaW1pbmFyeSBjZ2kudGNsLiAgUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzCiAgICAqYWxwaGEqIHNvZnR3YXJlLgoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGVmbi5vcmc+ICBTYXQsIDIwIEZlYiAxOTk5IDEyOjUxOjUxIC0wODAwCgpsaWJhcGFjaGUtbW9kLWR0Y2wgKDAuNC4zLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIEZpeGVkIHBvaW50ZXIgYnVnIGluIHB0Y2hhciBhbmQgcHRzdHIuCgogLS0gRGF2aWQgTi4gV2VsdG9uIDxkYXZpZHdAZWZuLm9yZz4gIFdlZCwgIDMgRmViIDE5OTkgMjE6MDA6MDIgLTA4MDAKCmxpYmFwYWNoZS1tb2QtZHRjbCAoMC40LjItMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogQ2hhbmdlcyBpbiBkb2N1bWVudGF0aW9uLCBhZGRlZCBzZXZlcmFsIGZpbGVzLCBpbmNsdWRpbmcgJ0lOU1RBTEwnLAogICAgYmVuY2htYXJrLmh0bWwsIGFuZCBzZXZlcmFsIG90aGVycy4KICAqIEZpeGVkIGhhbmRsaW5nIG9mIDxEaXJlY3Rvcnk+IE9wdGlvbnMsIHNvIG5vIGNoYW5nZXMgYXJlIG5lZWRlZCBpbiB0aGUKICAgIGNvbmZpZyBmaWxlcy4KCiAtLSBEYXZpZCBOLiBXZWx0b24gPGRhdmlkd0BlZm4ub3JnPiAgU2F0LCAzMCBKYW4gMTk5OSAxMzo1NToxNCAtMDgwMAoKbGliYXBhY2hlLW1vZC1kdGNsICgwLjQuMS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCBtaW5vciBidWdzIGluIG5hbWVzcGFjZSBjcmVhdGlvbi4KCiAtLSBEYXZpZCBOLiBXZWx0b24gPGRhdmlkd0BlZm4ub3JnPiAgTW9uLCAxMSBKYW4gMTk5OSAyMjozNToyMCAtMDgwMAoKbGliYXBhY2hlLW1vZC1kdGNsICgwLjQtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogQWRkZWQgJy1lcnJvcicgdG8gaHB1dHMgZm9yIHRjbCBlcnJvciByZXBvcnRpbmcuCiAgKiBEaXNwZW5zZWQgd2l0aCBuZXcgaW50ZXJwcmV0ZXIgcGVyIHJlcXVlc3QgaW4gZmF2b3Igb2YgYSBuZXcgbmFtZXNwYWNlCiAgYXQgZWFjaCByZXF1ZXN0LCBhbmQgYSBnbG9iYWwgaW50ZXJwcmV0ZXIuCiAgKiBBZGRlZCBjb25maWcgb3B0aW9uIGZvciBnbG9iYWwgc3RhcnR1cCBzY3JpcHQuCgogLS0gRGF2aWQgTi4gV2VsdG9uIDxkYXZpZHdAZWZuLm9yZz4gIFNhdCwgMTIgRGVjIDE5OTggMTY6MDU6MjAgLTA4MDAKCmxpYmFwYWNoZS1tb2QtZHRjbCAoMC4zLTEpIGZyb3plbiB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBBZGRlZCAnaW5jbHVkZScgZnVuY3Rpb24uCiAgKiBDbGVhbmVkIHVwIGNvbW1lbnRzLCBkb2N1bWVudGF0aW9uLgogICogQWRkZWQgcGF0Y2ggYnkgKHJvbGZAcG9pbnRzbWFuLmRlKSwgd2hpY2ggZWxpbWluYXRlcyBuZWVkIGZvciBnbG9iYWxfcmVxdWVzdF9yZWMsIGFuZCBpbnN0ZWFkIG1ha2VzIHVzZSBvZiBDbGllbnREYXRhLgogICogQWRkZWQgcHJlbGltaW5hcnkgUE9TVCBmdW5jdGlvbmFsaXR5LCBjb3BpZWQsIGFuZCBtb2RpZmllZCwgZnJvbSBtb2RfY2dpLgogICogQ29tcGlsZWQgdW5kZXIgQXBhY2hlIDEuMy4zLgoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGVmbi5vcmc+ICBNb24sIDIzIE5vdiAxOTk4IDIyOjU0OjAzIC0wODAwCgpsaWJhcGFjaGUtbW9kLWR0Y2wgKDAuMi0zKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBGaXhlZCBhIGZldyBidWdzIGFmZmVjdGluZyBwb3J0YWJpbGl0eS4KCiAtLSBEYXZpZCBOLiBXZWx0b24gPGRhdmlkd0BlZm4ub3JnPiAgV2VkLCAxNCBPY3QgMTk5OCAyMzowNTo0MCAtMDcwMAoKbGliYXBhY2hlLW1vZC1kdGNsICgwLjItMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogUmVjb21waWxlZCBmb3IgQXBhY2hlIDEuMy4yLgoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGVmbi5vcmc+ICBTdW4sIDExIE9jdCAxOTk4IDAwOjE1OjMzIC0wNzAwCgpsaWJhcGFjaGUtbW9kLWR0Y2wgKDAuMi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKCiAgKiBBZGRlZCBkZXNjcmlwdGlvbiB0byBjb250cm9sIGZpbGUuCiAgKiBVcGRhdGVkIGZvciBBcGFjaGUgMS4zLjEuCgogLS0gRGF2aWQgTi4gV2VsdG9uIDxkYXZpZHdAZWZuLm9yZz4gIEZyaSwgIDQgU2VwIDE5OTggMTY6MTg6MDAgLTA3MDAKCmxpYmFwYWNoZS1tb2QtZHRjbCAoMC4xLTMpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwoKICAqIEFkZGVkIGEgZmV3IHRoaW5ncyB0byB0aGUgZG9jcy4KCiAtLSBEYXZpZCBOLiBXZWx0b24gPGRhdmlkd0BlZm4ub3JnPiAgRnJpLCAyNCBKdWwgMTk5OCAxMDozNToyMCAtMDcwMAoKbGliYXBhY2hlLW1vZC1kdGNsICgwLjEtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogVHdlYWtlZCBwb3N0aW5zdCBmaWxlLCBjaGFuZ2VkIGR0Y2wudHRtbCB0byAuaHRtbC4KCiAtLSBEYXZpZCBOLiBXZWx0b24gPGRhdmlkd0BlZm4ub3JnPiAgU2F0LCAxOCBKdWwgMTk5OCAxMToxNDo0OCAtMDcwMAoKbGliYXBhY2hlLW1vZC1kdGNsICgwLjEtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CgogICogSW5pdGlhbCBSZWxlYXNlLgoKIC0tIERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGVmbi5vcmc+ICBGcmksIDEwIEp1bCAxOTk4IDIwOjAxOjM1IC0wNzAwCgoK