LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gSmFuICAzIDE3OjAwOjIwIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBncmFwaGljcy9kM2RleGVjdXRlYnVmZmVyLmMsIGdyYXBoaWNzL2QzZGxpZ2h0LmMsIGdyYXBoaWNzL2QzZG1hdGVyaWFsLmMsIGdyYXBoaWNzL2QzZHRleHR1cmUuYywgZ3JhcGhpY3MvZDNkdmlld3BvcnQuYywgZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9hY2NvbmZpZy5oLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL2QzZC5oLCBpbmNsdWRlL3dpbmVfZ2wuaCwgbXVsdGltZWRpYS9kc291bmQuYywgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRvY3VtZW50YXRpb24vc3RhdHVzL2RpcmVjdDNELCBkb2N1bWVudGF0aW9uL3N0YXR1cy9kaXJlY3RkcmF3LCBncmFwaGljcy9NYWtlZmlsZS5pbiwgZ3JhcGhpY3MvZDNkX3ByaXZhdGUuaCwgZ3JhcGhpY3MvZDNkY29tbW9uLmMsIGdyYXBoaWNzL2QzZGRldmljZXMuYzoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSBiZWdpbm5pbmcgb2YgaW1wbGVtZW50YXRpb24gb2YgRGlyZWN0M0QyIChEWCA1LjApIGFuZCBhc3NvY2lhdGVkIGNsYXNzZXMKCS0gc29tZSBiYXNpYyBjb2RlIGZvciBEaXJlY3QzRCBhbmQgRGlyZWN0M0RFeGVjdXRlQnVmZmVyIChEWCAzLjApCgktIGFkZGVkIHN0cmV0Y2hpbmcgdG8gQmx0IGZ1bmN0aW9uCgoJKiBtaXNjL3ZlcnNpb24uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglUcnkgdG8gYXV0b2RldGVjdCBOVDQuCgoJKiB3aW4zMi9jb25zb2xlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJMCBtZWFucyBzdWNjZXNzLCBhbGwgZWxzZSBmYWlsdXJlIGZvciBXYWl0Rm9yU2luZ2xlT2JqZWN0LgoKCSogbXNkb3MvaW50MTAuYzogSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglEbyBub3QgYWR2YW5jZSB0aGUgY3Vyc29yIGluIGNlcnRhaW4gcm91dGluZXMuIFRoaXMgY2xlYW5lZCB1cCB0aGUKCWltcGxlbWVudGF0aW9uIHF1aXRlIGEgYml0LgoKCSogbG9hZGVyL21haW4uYzogSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglTZXQgY29uc29sZSB2aWRlbyBtb2RlIHdoZW4gbG9hZGluZyBET1MgYXBwLiAoRXZlbnR1YWxseSwgSSB3YW50IHRvCgltaW1pYyBXaW5kb3dzIDl4J3MgYmVoYXZpb3IgYnkgc2V0dGluZyB0aGUgdmlkZW8gbW9kZSBvbmx5IHdoZW4gbm9uCglJTlQgMjEgY2FsbHMgYXJlIHVzZWQgdG8gYWxsb3cgZm9yIGFyYml0cmFyeS1zaXplZCBjb25zb2xlcykuCgoJKiBjb25zb2xlL2ludGVyZmFjZS5jLCBjb25zb2xlL3h0ZXJtLmM6CglKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCVh0ZXJtIGRyaXZlciBjYW4gbm93IHJlc2l6ZSB0aGUgdGVybWluYWwgd2hlbiBhIG1vZGUgY2hhbmdlIGlzCglkZXRlY3RlZC4KCgkqIGNvbnNvbGUvZ2VuZXJpYy5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUxvbmcgc3RhbmRpbmcgc2Nyb2xsIGJ1ZyBmaXhlZCEKCgkqIGNvbnNvbGUvbmN1cnNlcy5jLCBpbmNsdWRlL2FjY29uZmlnLmgsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvY29uc29sZS5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJUmV3cml0ZSBvZiBjb25maWd1cmF0aW9uIHN5c3RlbSB0byBzdXBwb3J0ICJyZWd1bGFyIiBjdXJzZXMgYXMgd2VsbCBhcwoJZWxpbWluYXRpbmcgdGhlIC0td2l0aC1uY3Vyc2VzIG9wdGlvbi4gTm93LCBuY3Vyc2VzIHN1cHBvcnQgd2lsbCBiZQoJYnVpbHQgaW4gaWYgYSBjb21wYXRpYmxlIGxpYnJhcnkgaXMgZGV0ZWN0ZWQuCgoJKiBpbmNsdWRlL3dpbnR5cGVzLmgsIHdpbmRvd3MvZGVmZGxnLmM6CglORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCUZpeCB0aGUgcmV0dXJuIHR5cGUgb2YgRExHUFJPQyB0eXBlIGFuZCBtYXNrIG91dCB0aGUgdW5zZXQgaGlnaHdvcmQgb2YKCXRoZSByZXR1cm4gd2hlbiBhIDE2IGJpdCBkaWFsb2cgcHJvYyBpcyBjYWxsZWQuCgoJKiBpbmNsdWRlL2ludGVyZmFjZXMuaDogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUFkZCBpbnRlcmZhY2UgSUQncyBmb3IgdXBjb21pbmcgSVR5cGVMaWIgaW1wbGVtZW50YXRpb24uCgoJKiBmaWxlcy9kb3NfZnMuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglCdWdmaXggZm9yIHRyYWlsaW5nIHNsYXNoZXMsIHJlcGV0aXRpb24gb2YgJy8nIG9yICdcJyBhbmQKCVNldExhc3RFcnJvcigpIGluIEdldEZ1bGxQYXRobmFtZS4KCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGxscy9NYWtlZmlsZS5pbiwgZGxscy9hZHZhcGkzMi8uY3ZzaWdub3JlLCBkbGxzL2FkdmFwaTMyL01ha2VmaWxlLmluLCBkbGxzL2FkdmFwaTMyL2FkdmFwaS5jLCBkbGxzL2FkdmFwaTMyL2V2ZW50bG9nLmMsIGRsbHMvYWR2YXBpMzIvc2VjdXJpdHkuYywgZGxscy9hZHZhcGkzMi9zZXJ2aWNlLmMsIHJlbGF5MzIvYWR2YXBpMzIuc3BlYywgd2luMzIvQXR0aWMvYWR2YXBpLmMsIHdpbjMyL0F0dGljL3NlY3VyaXR5LmMsIHdpbjMyL01ha2VmaWxlLmluLCB3aW4zMi9pbml0LmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1vdmVkIEFEVkFQSTMyIGZpbGVzIHRvIGRsbHMvYWR2YXBpMzIuCglBZGRlZCBzdHVicyBmb3IgZXZlbnRsb2cgZnVuY3Rpb25zLgoKCSogcmVsYXkzMi9zaGVsbDMyLnNwZWMsIGRsbHMvc2hlbGwzMi9zaGVsbGxpbmsuYywgZGxscy9zaGVsbDMyL3NoZWxsb2xlLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hlbGxwYXRoLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGluY2x1ZGUvc2hsb2JqLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBzdHVicyBOVFNIQ2hhbmdlTm90aWZ5UmVnaXN0ZXIsIE5UU0hDaGFuZ2VOb3RpZnlEZXJlZ2lzdGVyLgoJQ2xlYW51cCwgc29tZSBtb3JlIGZ1bmN0aW9ucyBVTklDT0RFIHJlYWR5LgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTSENsb25lU3BlY2lhbElETGlzdCBpbXBsZW1lbnRlZC4KCVNIR2V0RGF0YUZyb21JRExpc3RBIGNvcnJlY3RlZC4KCgkqIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU2hlbGxfR2V0Q2FjaGVkSW1hZ2VJbmRleDMyW0F8V10gaW1wbGVtZW50ZWQuCgoJKiBtc2Rvcy9pbnQyMS5jLCBtc2Rvcy9pbnQyNS5jLCBtc2Rvcy9pbnQyNi5jLCBmaWxlcy9kcml2ZS5jLCBpbmNsdWRlL2RyaXZlLmg6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglJbXBsZW1lbnRlZCByYXcgZGV2aWNlIGFjY2VzcyBjYWxscyBmb3IgaW9jdGxHZW5lcmljQmxrRGV2UmVxKCkKCWFuZCB0aGVyZWZvcmUgbW92ZWQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiBpbnQyWzU2XS5jIGludG8gZmlsZXMvZHJpdmUuYy4KCgkqIG1zZG9zL2lvcG9ydHMuYzogQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJQWRkZWQgYXV0b21hdGljIENNT1MgUkFNIGNoZWNrc3VtIGNhbGN1bGF0aW9uLgoKCSogZGxscy93aW5hc3BpL3dpbmFzcGkxNi5jLCBkbGxzL3duYXNwaTMyL3dpbmFzcGkzMi5jLCBkb2N1bWVudGF0aW9uL2FzcGksIHJlbGF5MzIvd25hc3BpMzIuc3BlYzoKCUFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCVNlbmRBU1BJMzJDb21tYW5kMzIgaGFzIHRvIGJlIF9fY2RlY2wuCglVcGRhdGVkIGRvY3VtZW50YXRpb24vYXNwaSBhbmQgcmV2ZXJ0ZWQgYW4gRVJSIGJhY2sgdG8gV0FSTi4KCgkqIGRvY3VtZW50YXRpb24vYnVncmVwb3J0czogSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJT2YgY291cnNlIHdlIHdhbnQgdGhlIGxhc3QgMTAwIGxpbmVzLCBub3QgdGhlIGZpcnN0IDEwMCBsaW5lcy4KCVVzZSAndGFpbCcgaW5zdGVhZCBvZiAnaGVhZCcuIEFsc28gZml4IHRleHQgYWxpZ25tZW50IGZyb20KCXByZXZpb3VzIHBhdGNoLgoKCSogbXVsdGltZWRpYS9qb3lzdGljay5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVJlYWRpbmcgam95c3RpY2sgNSB3aGVuIHdlIG9ubHkgc3VwcG9ydCA0IHNob3VsZCBmYWlsIGluc3RlYWQgb2YKCWhhbmcuCgoJKiBtdWx0aW1lZGlhL21jaWNkYS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVBsYXlpbmcgYSBub24tZXhpc3RlbnQgQ0Qgc2hvdWxkIGZhaWwgaW5zdGVhZCBvZiBjcmFzaC4KCgkqIE1ha2UucnVsZXMuaW4sIE1ha2VmaWxlLmluOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNoZWNrIGZvciBuZWNlc3NhcnkgY29uZmlndXJlIHJlcnVucyBmb3IgTWFrZWZpbGUgYW5kIE1ha2UucnVsZXMKCWdlbmVyYXRpb24uCgoJKiBtaXNjZW11L2luc3RyLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRW11bGF0ZXMgaW5zL291dHMgY29ycmVjdGx5IGZvciBET1MgcHJvZ3JhbXMuCgoJKiBvbGUvc3RvcmFnZS5jLCBzY2hlZHVsZXIvcHJvY2Vzcy5jLCBzZXJ2ZXIvY2hhbmdlLmMsIHNlcnZlci9jb25zb2xlLmMsIHNlcnZlci9ldmVudC5jLCBzZXJ2ZXIvZmlsZS5jLCBzZXJ2ZXIvbWFwcGluZy5jLCBzZXJ2ZXIvbXV0ZXguYywgc2VydmVyL29iamVjdC5jLCBzZXJ2ZXIvcGlwZS5jLCBzZXJ2ZXIvcHJvY2Vzcy5jLCBzZXJ2ZXIvcmVxdWVzdC5jLCBzZXJ2ZXIvc2VtYXBob3JlLmMsIHNlcnZlci90aHJlYWQuYywgc2VydmVyL3RyYWNlLmMsIHdpbjMyL2RldmljZS5jLCB3aW4zMi9maWxlLmMsIGZpbGVzL2Rvc19mcy5jLCBmaWxlcy9maWxlLmMsIGluY2x1ZGUvZGV2aWNlLmgsIGluY2x1ZGUvZmlsZS5oLCBpbmNsdWRlL3NlcnZlci5oLCBpbmNsdWRlL3NlcnZlci9vYmplY3QuaCwgaW5jbHVkZS9zZXJ2ZXIvcmVxdWVzdC5oLCBsb2FkZXIvbmUvbW9kdWxlLmMsIGxvYWRlci9wZV9pbWFnZS5jLCBtaXNjL2NydGRsbC5jLCBtc2Rvcy9pbnQyMS5jLCBtc2Rvcy92eGQuYzoKCUltcGxlbWVudGVkIGZpbGUgc2hhcmluZyBjaGVja3MgaW4gdGhlIHNlcnZlci4KCUFkZGVkIHNldCBmaWxlIHRpbWUgc2VydmVyIHJlcXVlc3QuCglPdmVyYWxsIGNsZWFuIHVwIG9mIHRoZSBmaWxlIGhhbmRsaW5nIChET1MgZGV2aWNlIGhhbmRsaW5nIGlzIG5vdwoJYnJva2VuLCBzaG91bGQgYmUgcmVkb25lKS4KClNhdCBKYW4gIDIgMDg6MjI6MzQgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG1lbW9yeS92aXJ0dWFsLmM6CglGaXhlZCBidWcgaW4gQ3JlYXRlRmlsZU1hcHBpbmcgd2hlbiBuYW1lIGlzIG5vdCBOVUxMLgoKCSogc2VydmVyL3JlcXVlc3QuYzogRml4ZWQgQ0hFQ0tfU1RSSU5HIGRpc3BsYXkuCgpGcmkgSmFuICAxIDE5OjUxOjI1IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpZjE2MzIva2VybmVsLnNwZWMsIG1lbW9yeS9sb2NhbC5jOgoJUmljaGFyZCBBIExvdWdoIDxyYWxvdWdoLmNlZEBkbmV0LmNvLnVrPgoJUHV0IHJldHVybiB2YWx1ZSBvZiBMb2NhbEFsbG9jIGluIENYIHRvby4KCgkqIGluY2x1ZGUvcHNkcnYuaDogRGltaXRyaWUgTy4gUGF1biA8ZGltaUBjcy50b3JvbnRvLmVkdT4KCVByb3RlY3QgYWdhaW5zdCBtdWx0aXBsZSBpbmNsdWRlcy4KCgkqIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYzogVXNlIHByb3BlciBzeXN0ZW0gZGlyZWN0b3J5LgoKCSogc2NoZWR1bGVyL3Byb2Nlc3MuYzogR290IHJpZCBvZiBDTElFTlRfR2V0UHJvY2Vzc0luZm8uCgoJKiB3aW5kb3dzL2NsYXNzLmMsIHdpbmRvd3MvZGNlLmMsIHdpbmRvd3MvZGVmZGxnLmMsIHdpbmRvd3MvZGVmd25kLmMsIHdpbmRvd3MvZHJpdmVyLmMsIHdpbmRvd3MvbXNnYm94LmMsIHdpbmRvd3MvcGFpbnRpbmcuYywgd2luZG93cy91c2VyLmMsIHdpbmRvd3Mvd2luaGVscC5jLCBpbmNsdWRlL3dpbmUvd2ludXNlcjE2LmgsIGluY2x1ZGUvd2lucmVnLmgsIGluY2x1ZGUvd2ludXNlci5oLCBsb2FkZXIvbW9kdWxlLmMsIG1pc2MvY29tbS5jLCBtaXNjL3NoZWxsLmMsIG1pc2Mvc3Bvb2xlci5jLCBtaXNjL3NweS5jLCBtaXNjL3dpbnNvY2suYywgbXVsdGltZWRpYS9hdWRpby5jLCBtdWx0aW1lZGlhL21jaWFuaW0uYywgbXVsdGltZWRpYS9tY2ljZGEuYywgbXVsdGltZWRpYS9tY2ltaWRpLmMsIG11bHRpbWVkaWEvbWNpd2F2ZS5jLCBtdWx0aW1lZGlhL21pZGkuYywgbXVsdGltZWRpYS9tbXN5c3RlbS5jLCBvYmplY3RzL2NsaXBwaW5nLmMsIG9sZS9vbGVvYmouYywgY29udHJvbHMvYnV0dG9uLmMsIGNvbnRyb2xzL2Rlc2t0b3AuYywgY29udHJvbHMvaWNvbnRpdGxlLmMsIGNvbnRyb2xzL3N0YXRpYy5jLCBkZWJ1Z2dlci9kYmcueSwgZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGdyYXBoaWNzL3BzZHJ2L2VzY2FwZS5jLCBpZjE2MzIvdGh1bmsuYywgaW5jbHVkZS9jYWxsYmFjay5oLCBpbmNsdWRlL2Rpc3BsYXkuaCwgaW5jbHVkZS9pbWFnZWxpc3QuaCwgaW5jbHVkZS9vbGUuaCwgaW5jbHVkZS9xdWV1ZS5oLCBpbmNsdWRlL3NoZWxsLmgsIGluY2x1ZGUvc3RvcmFnZS5oLCBpbmNsdWRlL3N0cnVjdDMyLmgsIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbmRvd3MuaDoKCU1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdGVjaHVuaXgudGVjaG5pb24uYWMuaWw+CglNb3ZlcyBtb3JlIHN0dWZmIGZyb20gd2luZG93cy5oLgoJLSBpbmNsdWRlL3dpbnVzZXIuaCAtIGludGVyZmFjZSByZWxldmFudCB0byB1c2VyMzIuc3BlYwoJLSBpbmNsdWRlL3dpbmUvd2ludXNlcjE2LmggLSB0aGUgb2xkIDE2IGJpdCBpbnRlcmZhY2UgKGludGVybmFsIHVzZSkKCS0gaW5jbHVkZS93aW5iYXNlLmggLSBzb21lIG1pbm9yIHVwZGF0ZXMgdG8ga2VlcCB0aGluZ3MgY29oZXJlbnQuCgktIExvdCBvZiBvdGhlciBmaWxlcyBtYWRlIHRvIGluY2x1ZGUgd2luZS93aW51c2VyMTYuaCwgd2hpY2ggaXMgbm8KCSAgbG9uZ2VyIGluY2x1ZGVkIGZyb20gd2luZG93cy5oCgoJKiBzY2hlZHVsZXIvaGFuZGxlLmM6IEZpeGVkIENsb3NlSGFuZGxlKCkgb24gZ2xvYmFsIGhhbmRsZXMuCgoJKiBSRUFETUUsIGRvY3VtZW50YXRpb24vYnVncmVwb3J0cywgZG9jdW1lbnRhdGlvbi93aW45NWxvb2ssIGRvY3VtZW50YXRpb24vd2luZS5tYW46CglKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglBZGQgc29tZSBpbmZvcm1hdGlvbiB0byB0aGUgbWFuIHBhZ2UgYW5kIFJFQURNRSBmaWxlLgoJTWFrZSBkb2N1bWVudGF0aW9uL3dpbjk1bG9vayBzYXkgW1R3ZWFrLkxheW91dF0gaW5zdGVhZCBvZgoJW1R3ZWFrcy5MYXlvdXRdLgoJRml4IGluY29ycmVjdCBjb21tYW5kIGdpdmVuIGluIGRvY3VtZW50YXRpb24vYnVncmVwb3J0cy4KCVN0YW5kYXJkIGVycm9yIHdhcyBub3QgYmVpbmcgcmVkaXJlY3RlZCwgc28gbW9zdCBvZiB0aGUKCW91dHB1dCB3YXMgbG9zdC4KCgkqIG9iamVjdHMvYml0bWFwLmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJRGVscGhpIDIuMCBuZWVkcyB0byBhbGxvY2F0ZSBhIGJpdG1hcCBiaWdnZXIgdGhhbiA0MDk2IGJpdHMgd2lkZS4KCgkqIG1pc2MvcHJpbnRkcnYuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglJbml0aWFsaXplIGxwZHdOZWVkZWQuCgoJKiBpZjE2MzIvc25vb3AuYzoKCU1hcmN1cyBNZWlzc25lciA8TWFyY3VzLk1laXNzbmVyQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW5jbHVkZSBzdHVmZiBldmVuIGlmIG5vdCBvbiBfX2kzODZfXyBmb3IgZGVidWcgZGVmaW5lcy4KCgkqIG9sZS92YXJpYW50LmM6CglNYXJjdXMgTWVpc3NuZXIgPE1hcmN1cy5NZWlzc25lckBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFub3RoZXIgLy8gY29tbWVudCBmaXhlZC4KCgkqIHNlcnZlci9maWxlLmM6CglNYXJjdXMgTWVpc3NuZXIgPE1hcmN1cy5NZWlzc25lckBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU5lZWQgPGVycm5vLmg+IGZvciBlcnJubyBkZWNsLiBvbiBTb2xhcmlzLgoKCSogaW5jbHVkZS93aW5nZGkuaCwgaW5jbHVkZS94MTFmb250LmgsIG9iamVjdHMvZm9udC5jOgoJRG91Z2xhcyBSaWRnd2F5IDxyaWRnd2F5QHdpbmVocS5jb20+CglJbXBsZW1lbnQgVHJhbnNsYXRlQ2hhcnNldEluZm8sIGNoYW5nZSBjaGFyc2V0IHR5cGUgdG8gQllURS4KCgkqIGNvbnRyb2xzL2NvbWJvLmMsIGNvbnRyb2xzL2xpc3Rib3guYywgaW5jbHVkZS9jb21iby5oOgoJQWxleCBLb3JvYmthIDxrb3JvYmthQGdhbGF4eS5hbXMuc3VueXNiLmVkdT4KCUJldHRlciBDQl9TRVRDVVJTRUwgbWVzc2FnZSBoYW5kbGluZy4KCgkqIGluY2x1ZGUvcXVldWUuaCwgaW5jbHVkZS90aHJlYWQuaCwgc2NoZWR1bGVyL3N5bmNocm8uYywgc2NoZWR1bGVyL3RocmVhZC5jLCB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9xdWV1ZS5jOgoJTW92ZWQgTXNnV2FpdEZvck11bHRpcGxlT2JqZWN0IGltcGxlbWVudGF0aW9uIHRvIFVTRVIgcm91dGluZXMsIHVzaW5nCglhIG5vcm1hbCBXaW4zMiBldmVudC4KCgkqIHRvb2xzL21ha2VfcmVxdWVzdHM6IFNlbmQgZGVidWdnaW5nIG91dHB1dCB0byBzdGRlcnIuCgoJKiBmaWxlcy9jaGFuZ2UuYywgZmlsZXMvZG9zX2ZzLmMsIGZpbGVzL2ZpbGUuYywgaW5jbHVkZS9maWxlLmgsIHNjaGVkdWxlci9jbGllbnQuYywgc2NoZWR1bGVyL2V2ZW50LmMsIHNjaGVkdWxlci9rMzJvYmouYywgc2NoZWR1bGVyL211dGV4LmMsIHNjaGVkdWxlci9waXBlLmMsIHNjaGVkdWxlci9zZW1hcGhvcmUuYywgd2luMzIvY29uc29sZS5jOgoJQ2xlYW5lZCB1cCBhbmQgcmVtb3ZlZCBzb21lIG5vIGxvbmdlciB1c2VkIGNvZGUuCgoJKiBtZW1vcnkvdmlydHVhbC5jOiBVc2Ugc2VydmVyIGZpbGUgbWFwcGluZyBvYmplY3RzLgoKCSogaW5jbHVkZS9zZXJ2ZXIvb2JqZWN0LmgsIGluY2x1ZGUvc2VydmVyL3JlcXVlc3QuaCwgaW5jbHVkZS9zZXJ2ZXIvdGhyZWFkLmgsIHNlcnZlci9NYWtlZmlsZS5pbiwgc2VydmVyL2NvbnNvbGUuYywgc2VydmVyL2ZpbGUuYywgc2VydmVyL21haW4uYywgc2VydmVyL21hcHBpbmcuYywgc2VydmVyL29iamVjdC5jLCBzZXJ2ZXIvcGlwZS5jLCBzZXJ2ZXIvcmVxdWVzdC5jLCBzZXJ2ZXIvdGhyZWFkLmMsIHNlcnZlci90cmFjZS5jLCBpbmNsdWRlL3NlcnZlci5oOgoJQWRkZWQgc2VydmVyLXNpZGUgZmlsZSBtYXBwaW5nIG9iamVjdCBzdXBwb3J0LgoKCSogbWlzYy9jcnRkbGwuYzoKCUhhY2tlZCBzdGRpbyBmdW5jdGlvbnMgdG8gdXNlIFdpbjMyIGZpbGUgaGFuZGxlcy4gU3RpbGwgbmVlZHMgYSBwcm9wZXIKCXN0ZGlvIGVtdWxhdGlvbi4KCgkqIGxvYWRlci9uZS9tb2R1bGUuYywgbG9hZGVyL25lL3Jlc291cmNlLmMsIGxvYWRlci9uZS9zZWdtZW50LmM6CglVc2UgV2luMzIgZmlsZSBoYW5kbGVzIGluc3RlYWQgb2YgVW5peCBvbmVzLgoKCSogaW5jbHVkZS9tb2R1bGUuaCwgaW5jbHVkZS9wZV9pbWFnZS5oLCBpbmNsdWRlL3Byb2Nlc3MuaCwgbG9hZGVyL2Rvcy9tb2R1bGUuYywgbG9hZGVyL21vZHVsZS5jLCBsb2FkZXIvcGVfaW1hZ2UuYywgc2NoZWR1bGVyL3Byb2Nlc3MuYywgaW5jbHVkZS9kb3NleGUuaDoKCVRha2UgaW50byBhY2NvdW50IGhhbmRsZSBpbmhlcml0YW5jZSBmbGFnLgoKVGh1IERlYyAzMSAxNTo1NToxOSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZGVidWdnZXIvZGJfZGlzYXNtLmM6CglDaGFuZ2VkIGRiX3Rhc2tfcHJpbnRzeW0gdG8gYWx3YXlzIHByaW50IGEgZnVsbCBhZGRyZXNzLCBubyBtYXR0ZXIKCXdoYXQgdGhlIG9wZXJhbmQgc2l6ZSBpcy4KCgkqIHNjaGVkdWxlci9jcml0c2VjdGlvbi5jOiBSZS1pbXBsZW1lbnRlZCB1c2luZyBhIHJlYWwgc2VtYXBob3JlLgoKCSogd2luZG93cy9xdWV1ZS5jLCBmaWxlcy9jaGFuZ2UuYywgZmlsZXMvZmlsZS5jLCBpbmNsdWRlL2szMm9iai5oLCBpbmNsdWRlL3Byb2Nlc3MuaCwgaW5jbHVkZS90aHJlYWQuaCwgbG9hZGVyL3NpZ25hbC5jLCBtZW1vcnkvdmlydHVhbC5jLCBtaXNjL3Rvb2xoZWxwLmMsIHNjaGVkdWxlci9jbGllbnQuYywgc2NoZWR1bGVyL2V2ZW50LmMsIHNjaGVkdWxlci9oYW5kbGUuYywgc2NoZWR1bGVyL2szMm9iai5jLCBzY2hlZHVsZXIvbXV0ZXguYywgc2NoZWR1bGVyL3BpcGUuYywgc2NoZWR1bGVyL3Byb2Nlc3MuYywgc2NoZWR1bGVyL3NlbWFwaG9yZS5jLCBzY2hlZHVsZXIvc3luY2hyby5jLCBzY2hlZHVsZXIvdGhyZWFkLmMsIHdpbjMyL2NvbnNvbGUuYywgd2luMzIvZGV2aWNlLmM6CglSZW1vdmVkIGNsaWVudC1zaWRlIHdhaXQgZnVuY3Rpb25zOyBhbGwgd2FpdGluZyBpcyBub3cgZG9uZSB0aHJvdWdoCgl0aGUgc2VydmVyLgoKCSogc2VydmVyL01ha2VmaWxlLmluLCBzZXJ2ZXIvY2hhbmdlLmMsIHNlcnZlci9wcm9jZXNzLmMsIHNlcnZlci9yZXF1ZXN0LmMsIHNlcnZlci90cmFjZS5jLCBpbmNsdWRlL3NlcnZlci5oLCBpbmNsdWRlL3NlcnZlci9vYmplY3QuaCwgaW5jbHVkZS9zZXJ2ZXIvcmVxdWVzdC5oOgoJQWRkZWQgY2hhbmdlIG5vdGlmaWNhdGlvbnMuCglBZGRlZCBnbG9iYWwgaGFuZGxlIHN1cHBvcnQuCgpXZWQgRGVjIDMwIDEyOjExOjUyIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL3RocmVhZC5oLCBzY2hlZHVsZXIvc3luY2hyby5jOgoJQ2hhbmdlZCBzZXJ2ZXIgd2FpdCBsb2dpYyBhIGJpdC4KCgkqIHdpbjMyL2NvbnNvbGUuYzoKCUhhY2tzIHRvIHN1cHBvcnQgc2VydmVyLXNpZGUgY29uc29sZS4gU2hvdWxkIGJlIHJlZG9uZSBwcm9wZXJseQoJc29tZSBkYXkuCgoJKiBmaWxlcy9kb3NfZnMuYywgZmlsZXMvZmlsZS5jLCBpbmNsdWRlL2ZpbGUuaCwgd2luMzIvZmlsZS5jLCB3aW4zMi9uZXdmbnMuYzoKCVJlaW1wbGVtZW50ZWQgUmVhZC9Xcml0ZUZpbGUgdG8gdXNlIHNlcnZlciBmaWxlIGRlc2NyaXB0b3JzLgoJUmVtb3ZlZCBmaWxlIHBvc2l0aW9uIGhhY2sgYXMgaXQgaXMgd3JvbmcgZm9yIFdpbjMyIChzaG91bGQgYmUgcmVkb25lCglmb3IgV2luMTYgb25seSkuCgoJKiBzY2hlZHVsZXIvTWFrZWZpbGUuaW4sIHNjaGVkdWxlci9rMzJvYmouYywgc2NoZWR1bGVyL3BpcGUuYzoKCUFkZGVkIGFub255bW91cyBwaXBlIHN1cHBvcnQKCgkqIGluY2x1ZGUvc2VydmVyLmgsIGluY2x1ZGUvc2VydmVyL29iamVjdC5oLCBpbmNsdWRlL3NlcnZlci9yZXF1ZXN0LmgsIHNlcnZlci9NYWtlZmlsZS5pbiwgc2VydmVyL2NvbnNvbGUuYywgc2VydmVyL2V2ZW50LmMsIHNlcnZlci9maWxlLmMsIHNlcnZlci9tdXRleC5jLCBzZXJ2ZXIvb2JqZWN0LmMsIHNlcnZlci9waXBlLmMsIHNlcnZlci9wcm9jZXNzLmMsIHNlcnZlci9yZXF1ZXN0LmMsIHNlcnZlci9zZW1hcGhvcmUuYywgc2VydmVyL3RocmVhZC5jLCBzZXJ2ZXIvdHJhY2UuYzoKCUFkZGVkIHNldmVyYWwgZmlsZSBzZXJ2ZXIgcmVxdWVzdHMKCUFkZGVkIHNlcnZlci1zaWRlIHBpcGVzIGFuZCBjb25zb2xlcwoKU3VuIERlYyAyNyAxNToyODo1NSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbWlzYy9jcnRkbGwuYywgbXNkb3MvaW50MjEuYywgc2NoZWR1bGVyL2NsaWVudC5jLCBzY2hlZHVsZXIvazMyb2JqLmMsIHNlcnZlci9NYWtlZmlsZS5pbiwgc2VydmVyL2V2ZW50LmMsIHNlcnZlci9maWxlLmMsIHNlcnZlci9tdXRleC5jLCBzZXJ2ZXIvcHJvY2Vzcy5jLCBzZXJ2ZXIvcmVxdWVzdC5jLCBzZXJ2ZXIvc2VtYXBob3JlLmMsIHNlcnZlci90cmFjZS5jLCB0b29scy9tYWtlX3JlcXVlc3RzLCBmaWxlcy9kb3NfZnMuYywgZmlsZXMvZmlsZS5jLCBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmgsIGluY2x1ZGUvZmlsZS5oLCBpbmNsdWRlL3NlcnZlci5oLCBpbmNsdWRlL3NlcnZlci9vYmplY3QuaCwgaW5jbHVkZS9zZXJ2ZXIvcmVxdWVzdC5oLCBsb2FkZXIvbWFpbi5jLCBtZW1vcnkvdmlydHVhbC5jOgoJQWRkZWQgYmVnaW5uaW5ncyBvZiBzZXJ2ZXItc2lkZSBmaWxlIGhhbmRsaW5nLgoJQWRkZWQgLWRlYnVnbXNnICtzZXJ2ZXIgc3VwcG9ydC4KCUJldHRlciBzZXJ2ZXIgcmVxdWVzdCBkdW1waW5nIGZvciB2YXJhcmdzIHJlcXVlc3RzLgoKCSogd2luZG93cy94MTFkcnYvd25kLmM6CglGaXhlZCBTZXRGb2N1cyB0aGF0IHdhcyBicm9rZW4gd2hlbiBtb3ZlZCB0byB4MTFkcnYuCgoJKiBpbmNsdWRlL3NlcnZlci9vYmplY3QuaCwgaW5jbHVkZS9zZXJ2ZXIvdGhyZWFkLmgsIHNjaGVkdWxlci9jbGllbnQuYywgc2VydmVyL01ha2VmaWxlLmluLCBzZXJ2ZXIvZXZlbnQuYywgc2VydmVyL21haW4uYywgc2VydmVyL211dGV4LmMsIHNlcnZlci9wcm9jZXNzLmMsIHNlcnZlci9zZWxlY3QuYywgc2VydmVyL3NlbWFwaG9yZS5jLCBzZXJ2ZXIvc29ja2V0LmMsIHNlcnZlci90aHJlYWQuYzoKCUFkZGVkIGFkZF9xdWV1ZS9yZW1vdmVfcXVldWUgdG8gc2VydmVyIG9iamVjdCBvcGVyYXRpb25zLgoJTW92ZWQgc2VsZWN0KCkgbG9vcCBmdW5jdGlvbnMgdG8gc2VsZWN0LmMuCgpTYXQgRGVjIDI2IDE5OjQ3OjAwIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBwcm9ncmFtcy9yZWd0ZXN0L3JlZ3Rlc3QuYzoKCVJlbmFtZWQgRVJSIG1hY3JvIHRvIGF2b2lkIGNvbmZ1c2luZyB0aGUgbWFrZV9kZWJ1ZyBzY3JpcHQuCgoJKiBvbGUvc3RvcmFnZS5jLCBvbGUvdHlwZWxpYi5jLCBpbmNsdWRlL2QzZC5oLCBpbmNsdWRlL21tc3lzdGVtLmgsIGluY2x1ZGUvb2xlYXV0by5oLCBpbmNsdWRlL3N0b3JhZ2UuaCwgaW5jbHVkZS93aW52ZXJzaW9uLmgsIG9sZS9jb21wb2JqLmMsIG9sZS9vbGUyLmMsIG9sZS9vbGUybmxzLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVkIHRvbnMgb2YgaW5jb21wbGV0ZSBwcm90b3R5cGVzLCBhc3NpZ25tZW50J3Mgb2YgcG9pbnRlciB3aXRoCglkaWZmZXJlbnQgc2lnbmVkbmVzcywgc3VwZXJmbG91cyAnLCcgYW5kICc7JyBpbiBzdHJ1Y3R1cmVzLCB3cm9uZwoJcmV0dXJuLXR5cGVzLCBsb3NlIG9mIGRpZ2l0cyBhbmQgc29tZSBzbWFsbCBnbGl0Y2hlcy4KCgkqIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jLCBpbmNsdWRlL3gxMWZvbnQuaDoKCUFsZXggS29yb2JrYSA8a29yb2JrYUBnYWxheHkuYW1zLnN1bnlzYi5lZHU+CglDbGVhbmVkIHVwIGZvbnQgZW5jb2RpbmcgaGFuZGxpbmcuIEFkZGVkICdJZ25vcmUjJyBvcHRpb24gdG8gdGhlCglbZm9udHNdIHNlY3Rpb24uIEFsc28sIGZpbGUgd2l0aCBjYWNoZWQgbWV0cmljcyBub3cgaGFzIHRoZSB2YWx1ZSBvZgoJJERJU1BMQVkgYXBwZW5kZWQgdG8gdGhlIGZpbGVuYW1lLgoKCSogcHJvZ3JhbXMvY2xvY2svbGFuZ3VhZ2UuYywgcHJvZ3JhbXMvY2xvY2svbWFpbi5jLCBwcm9ncmFtcy9ub3RlcGFkL2RpYWxvZy5jLCBwcm9ncmFtcy9ub3RlcGFkL2xhbmd1YWdlLmMsIHByb2dyYW1zL25vdGVwYWQvbWFpbi5jLCByYy9zeXN0ZXN0LmMsIHdpbmRvd3MvbXVsdGltb24uYywgd2luZG93cy9ub25jbGllbnQuYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYywgZmlsZXMvcHJvZmlsZS5jLCBncmFwaGljcy9wYXRoLmMsIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9kM2QuaCwgaW5jbHVkZS9kcGxheS5oLCBpbmNsdWRlL2Rzb3VuZC5oLCBpbmNsdWRlL29sZS5oLCBpbmNsdWRlL29sZW9iai5oLCBpbmNsdWRlL3NobG9iai5oLCBpbmNsdWRlL3Zmdy5oLCBpbmNsdWRlL3dpbmVycm9yLmgsIGluY2x1ZGUvd2luaW9jdGwuaCwgbWlzYy9tYWluLmMsIG11bHRpbWVkaWEvYXVkaW8uYywgbXVsdGltZWRpYS9kc291bmQuYywgb2xlL29sZTIuYywgZGVidWdnZXIvc3RhYnMuYywgZGxscy9jb21jdGwzMi9hbmltYXRlLmMsIGRsbHMvY29tY3RsMzIvaGVhZGVyLmMsIGRsbHMvY29tY3RsMzIvaG90a2V5LmMsIGRsbHMvY29tY3RsMzIvbGlzdHZpZXcuYywgZGxscy9jb21jdGwzMi9wYWdlci5jLCBkbGxzL2NvbWN0bDMyL3JlYmFyLmMsIGRsbHMvY29tY3RsMzIvdG9vbGJhci5jLCBkbGxzL2NvbWN0bDMyL3Rvb2x0aXBzLmMsIGRsbHMvY29tY3RsMzIvdHJhY2tiYXIuYywgZGxscy9jb21jdGwzMi90cmVldmlldy5jLCBkbGxzL3NoZWxsMzIvY29udG1lbnUuYywgZGxscy9zaGVsbDMyL2VudW1pZGxpc3QuYywgZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNoYW5nZWQgLy8gY29tbWVudHMgdG8gLyogKi8gc28gV0lORSBjb21waWxlcyB3aXRoIG5vbi1nY2MgY29tcGlsZXJzCglhZ2Fpbi4KCgkqIHdpbmRvd3MvdHR5ZHJ2L2NsaXBib2FyZC5jLCB3aW5kb3dzL3R0eWRydi9ldmVudC5jLCB3aW5kb3dzL3R0eWRydi9pbml0LmMsIHdpbmRvd3MveDExZHJ2L2NsaXBib2FyZC5jLCB3aW5kb3dzL3gxMWRydi9ldmVudC5jLCB3aW5kb3dzL3gxMWRydi9pbml0LmMsIHdpbmRvd3MveDExZHJ2L21vdXNlLmMsIHdpbmRvd3MveDExZHJ2L3duZC5jLCBkZWJ1Z2dlci9kYmcueSwgZ3JhcGhpY3MvZGRyYXcuYywgZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jLCBncmFwaGljcy94MTFkcnYvYnJ1c2guYywgZ3JhcGhpY3MveDExZHJ2L2NsaXBwaW5nLmMsIGdyYXBoaWNzL3gxMWRydi9pbml0LmMsIGluY2x1ZGUvY2xpcGJvYXJkLmgsIGluY2x1ZGUvZGRyYXcuaCwgaW5jbHVkZS9kaXNwbGF5LmgsIGluY2x1ZGUvdHR5ZHJ2LmgsIGluY2x1ZGUvd2luLmgsIGluY2x1ZGUveDExZHJ2LmgsIG9iamVjdHMvcGFsZXR0ZS5jLCB3aW5kb3dzL2RjZS5jLCB3aW5kb3dzL2RpbnB1dC5jLCB3aW5kb3dzL2Rpc3BsYXkuYywgd2luZG93cy9pbnB1dC5jLCB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9zY3JvbGwuYywgd2luZG93cy93aW4uYywgd2luZG93cy93aW5wb3MuYzoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJTW92ZWQgbW9yZSB0aGluZ3MgdG8gdGhlIFgxMSBkcml2ZXIuCgoJKiBpbmNsdWRlL3dpbmdkaS5oLCBvYmplY3RzL2JydXNoLmM6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAbXVsdGltYW5pYS5jb20+CglGaXhlZCB0aGUgcHJvdG90eXBlIG9mIENyZWF0ZURJQlBhdHRlcm5CcnVzaFB0CgoJKiBpbmNsdWRlL3dpbmRvd3MuaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QG11bHRpbWFuaWEuY29tPgoJUmVtb3ZlZCB0aGUgQ05feHh4IG1hY3JvcyBzaW5jZSB0aGV5IGFyZSBub3QgdXNlZCwgZG8gbm90IGNvcnJlc3BvbmQgdG8KCWFueSBXaW5kb3dzIGRlZmluZSBhbmQgY29uZmxpY3Qgd2l0aCBNRkMgZGVmaW5lcy4KCXdpbmRvd3MuaCBtdXN0IHByb3ZpZGUgYWxsIHRoZSBkZWZpbml0aW9ucyBjb250YWluZWQgaW4gd2luYmFzZS5oCglTb21lIFh4eDMyIGZ1bmN0aW9ucyBkaWQgbm90IGhhdmUgdGhlIGFzc29jaWF0ZWQgWHh4IG1hY3JvLgoKCSogaW5jbHVkZS93aW50eXBlcy5oOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAbXVsdGltYW5pYS5jb20+CglBZGRlZCBhIHR5cGVkZWYgZm9yIF9faW50NjQgd2hpY2ggaXMgYSBidWlsdGluIFZpc3VhbCBDKysgdHlwZQoJQWRkZWQgYSB0eXBlZGVmIGZvciBQVUlOVAoKCSogaW5jbHVkZS9vYmpiYXNlLmg6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBtdWx0aW1hbmlhLmNvbT4KCVJFRklJRCB3YXMgbm90IGRlZmluZWQuCgoJKiBjb25maWd1cmUuaW4sIGluY2x1ZGUvYWNjb25maWcuaCwgaW5jbHVkZS9jb25maWcuaC5pbiwgaW5jbHVkZS93aW5zb2NrLmgsIG1pc2Mvd2luc29jay5jLCBjb25maWd1cmU6CglQYXZlbCBSb3NraW4gPHBhdmVsX3Jvc2tpbkBnZW9jaXRpZXMuY29tPgoJY29uZmlndXJlIGZpcnN0IGNoZWNrcyB3aGV0aGVyIGl0IGlzIHBvc3NpYmxlIHRvIGNvbXBpbGUgSVBYIGNvZGUgd2l0aAoJR2xpYmMgaGVhZGVycy4gSWYgaXQgZmFpbHMsIG5leHQgY2hlY2sgZGV0ZXJtaW5lcyB3aGV0aGVyIGRpcmVjdCBpbmNsdXNpb24KCW9mIDxsaW51eC9pcHguaD4gd29ya3MuCgoJKiBpbmNsdWRlL3RjaGFyLmg6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBtdWx0aW1hbmlhLmNvbT4KCVByb3ZpZGVzIHRoZSBtYXBwaW5ncy4gTUJDUyBhbmQgVW5pY29kZSBmdW5jdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRlZC4KCVN0YW5kYXJkIChTQkNTKSBmdW5jdGlvbnMgbWF5IGV4aXN0IG9yIG5vdCwgd2l0aCB0aGUgc2FtZSBvciBhIGRpZmZlcmVudAoJc2VtYW50aWNzLgoKCSogZGxscy9jb21jdGwzMi9pcGFkZHJlc3MuYywgaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL2lwYWRkcmVzcy5oOgoJQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCUlQYWRkcmVzcyBjb21tb24gY29udHJvbCBpbXBsZW1lbnRhdGlvbi4gRmlyc3QgdHJ5OyBuZWVkcyBtb3JlIHdvcmsgdG8KCXJlbW92ZSBib3JpbmcgYnVncy4KCkZyaSBEZWMgMjUgMDg6NTU6MTUgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGRsbHMvc2hlbGwzMi9jb250bWVudS5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBpbmNsdWRlL29sZW9iai5oLCBpbmNsdWRlL3NobG9iai5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCB0aGUgVEVYVCByZWRlZmluZWQgd2FybmluZ3MuCgoJKiBtc2Rvcy9pbnQxMC5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUhvb2sgaW50byB0aGUgKHN0dWJiZWQpIHJlc2l6ZSBjb2RlIGluIG1zZG9zIGludDEwLgoKCSogY29uc29sZS9pbnRlcmZhY2UuYywgaW5jbHVkZS9jb25zb2xlLmgsIGluY2x1ZGUvb3B0aW9ucy5oLCBsb2FkZXIvbWFpbi5jLCBtaXNjL21haW4uYzoKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJQWRkIHN1cHBvcnQgZm9yIHNlbGVjdGlvbiBvZiBjb25zb2xlIG1vZGUgZHJpdmVycyB0byB1c2UgdXNpbmcgdGhlCgktY29uc29sZSBvcHRpb24uIEN1cnJlbnRseSAidHR5IiwgIm5jdXJzZXMiLCBhbmQgInh0ZXJtIiBhcmUKCXN1cHBvcnRlZC4KCUFkZCBzdHVicyBmb3IgcmVzaXppbmcgdGhlIHNjcmVlbiBvbiBtb2RlIGNoYW5nZXMuCgoJKiBpbmNsdWRlL2RkZW1sLmgsIG1pc2MvZGRlbWwuYywgcmVsYXkzMi91c2VyMzIuc3BlYzoKCUplYW4tQ2xhdWRlIENvdGUgPGplYW4tY2xhdWRlQG1hY2FkYW1pYW4uY29tPgoJUGFydGlhbCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGZvbGxvd2luZyBEREUgQVBJczoKCURkZUNtcFN0cmluZ0hhbmRsZXMsIERkZUNyZWF0ZVN0cmluZ0hhbmRsZSwgRGRlRnJlZVN0cmluZ0hhbmRsZSwKCURkZVF1ZXJ5U3RyaW5nLCBEZGVVbmluaXRpYWxpemUuCgpUaHUgRGVjIDI0IDE2OjU5OjE3IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBvbGUvTWFrZWZpbGUuaW4sIG9sZS9wYXJzZWR0LmMsIG9sZS9wYXJzZWR0LmgsIG9sZS92YXJpYW50LmM6CglKZWFuLUNsYXVkZSBDb3RlIDxqZWFuLWNsYXVkZUBtYWNhZGFtaWFuLmNvbT4KCUFkZGVkIFZhckRhdGVGcm9tU3RyIEFQSS4KCgkqIGRsbHMvY29tY3RsMzIvdHJhY2tiYXIuYywgaW5jbHVkZS90cmFja2Jhci5oOgoJQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCS0gVG9vbHRpcCBzdXBwb3J0CgktIFZlcnRpY2FsIHRyYWNrYmFycyBzdXBwb3J0ZWQgbm93CgktIFRCU19CT1RIIHN1cHBvcnQgKGdvZXMgYWxvbmcgd2l0aCBwYXJ0aWFsIGNsZWFudXAgb2YgZHJhd2luZyBjb2RlKQoJLSBVc2UgQ09NQ1RMMzIgaGVhcCBpbnN0ZWFkIG9mIHN5c3RlbSBoZWFwCgoJKiBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2RkcmF3Lmg6CglQZXRlciBIdW5uaXNldHQgPGh1bm5pc2VAbm9ydGVsbmV0d29ya3MuY29tPgoJQWRkZWQgYWxsIGNsaXBwZXImM2Qgc3R1YnMuCglTdGFydGluZyBDb2xvcktleSBzdXBwb3J0LgoJRml4ZWQgdHJhY2Ugc3RhdGVtZW50IGluIERpcmVjdERyYXdDcmVhdGUgYXMgZm9ybWF0dGluZyB3YXNuJ3QgY29ycmVjdC4KCUNoYW5nZWQgInJldHVybiAwOyIgdG8gInJldHVybiBERF9PSyIgb3IgInJldHVybiBTX09LIiBhcyBhcHByb3ByaWF0ZS4KCUFkZGVkIFN1cmZhY2VFbnVtIGR3RmxhZ3MuCgoJKiBpbmNsdWRlL2RwbGF5LmgsIG11bHRpbWVkaWEvZHBsYXkuYzoKCVBldGVyIEh1bm5pc2V0dCA8aHVubmlzZUBub3J0ZWxuZXR3b3Jrcy5jb20+CglBZGRlZCBtYWNyb3MgdG8gaGVhZGVyIGZpbGUgZm9yIGVhc2llciBmdW5jdGlvbiBjYWxsaW5nLgoJQ2hhbmdlZCBpbXBsZW1lbnRhdGlvbiBhIGxpdHRsZSBiaXQuCglBZGRlZCBzdHVicyBmb3IgZHBsYXkzLiBTdGlsbCBuZWVkIHRvIGJyZWFrIGludG8gQSBhbmQgVyB2ZXJzaW9ucy4KCgkqIHdpbjMyL2ZpbGUuYzogUGV0ZXIgSHVubmlzZXR0IDxodW5uaXNlQG5vcnRlbG5ldHdvcmtzLmNvbT4KCUNyZWF0ZUZpbGUzMkEgd2FzIG9ubHkgYWxsb3dpbmcgY29uc29sZSBvcGVucyBvbiBDT05JTiQvT1VUJC4gVGhpcwoJaGFzIGJlZW4gY2hhbmdlZCB0byBoYXZlIGEgY2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJlLgoKCSogY29udHJvbHMvbGlzdGJveC5jOiBHZXJhcmQgUGF0ZWwgPGcucGF0ZWxAd2FuYWRvby5mcj4KCURvbid0IHNlbmQgT0RBX0VOVElSRSBmb3IgZW1wdHkgbGlzdGJveGVzIChMSVNUQk9YX1BhaW50KS4KCgkqIGluY2x1ZGUvd2luYmFzZS5oLCByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHdpbjMyL2tlcm5lbDMyLmM6CglKZWFuLUNsYXVkZSBDb3RlIDxqZWFuLWNsYXVkZUBtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGVkIHRoZSBHZXRCaW5hcnlUeXBlIEFQSSBmdW5jdGlvbi4KCgkqIGxvYWRlci9kb3MvZG9zbW9kLmMsIGxvYWRlci9kb3MvZG9zbW9kLmgsIGxvYWRlci9kb3MvZG9zdm0uYywgbG9hZGVyL2Rvcy9tb2R1bGUuYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQWRkZWQgc29tZSBuZXcgZG9zbW9kIGNvbW11bmljYXRpb24gcG9zc2liaWxpdGllcywgaW5jbHVkaW5nCglhY3RpdmF0aW5nIGEgZG9zbW9kLXNwZWNpZmljIHNldGl0aW1lcigpLCBhbmQgdGhlIGNhcHR1cmUgb2Ygc29tZQoJY29tbW9uIHNpZ25hbHMsIHdoaWNoIGlzIHJldHVybmVkIHRvIFdpbmUgKHByZXZpb3VzbHkgYSBTSUdJTEwKCXdvdWxkIGp1c3QgY2F1c2UgYSAiZG9zbW9kIHN5bmMgbG9zdCIgd2l0aG91dCBleHBsYW5hdGlvbiwgbm93IGl0CglpbnZva2VzIHRoZSBXaW5lIGRlYnVnZ2VyKS4gSW52b2tlcyBpbnQgMDggdXBvbiByZWNlaXB0IG9mIGRvc21vZAoJU0lHQUxSTSwgdGh1cyBzaW11bGF0aW5nIHRoZSBET1MgdGltZXIuIE1hZGUgRE9TIGludGVycnVwdCBjYWxscwoJYmUgcmVwb3J0ZWQgYnkgLWRlYnVnbXNnICtyZWxheSBpbnN0ZWFkIG9mIC1kZWJ1Z21zZyAraW50LiBBbmQKCWZpeGVkIG5vbi1pMzg2IGNvbXBpbGF0aW9uIG9mIGRvc21vZC4gKEFueXRoaW5nIGVsc2U/ISkKCgkqIGxvYWRlci9tYWluLmMsIHdpbmRvd3Mvd2luLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCURlc2t0b3Agd2luZG93IHF1ZXVlIGhhbmRsaW5nIGFkYXB0ZWQuCgoJKiB3aW5kb3dzL2NsaXBib2FyZC5jLCB3aW5kb3dzL2hvb2suYywgd2luZG93cy90aW1lci5jLCB3aW5kb3dzL3dpbnBvcy5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglRdWV1ZSBoYW5kbGluZyBhZGFwdGVkIHRvIG5ldyBxdWV1ZSByb3V0aW5lcy4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL3F1ZXVlLmMsIGlmMTYzMi91c2VyLnNwZWMsIGluY2x1ZGUvcXVldWUuaCwgaW5jbHVkZS90YXNrLmg6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIHN0dWIgZm9yIEluaXRUaHJlYWRJbnB1dC4KCVVzZSBHZXRUaHJlYWRRdWV1ZS9HZXRGYXN0UXVldWUgaW5zdGVhZCBvZiBHZXRUYXNrUXVldWUuCgoJKiBsb2FkZXIvdGFzay5jLCBtaXNjZW11L21haW4uYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJVXNlIENhbGxvdXQgdGFibGUgaW5zdGVhZCBvZiBkaXJlY3QgR2V0UHJvY0FkZHJlc3MuCglVc2VyWWllbGQgbW92ZWQgdG8gVVNFUi4KCgkqIGluY2x1ZGUvY2FsbGJhY2suaCwgbWlzYy9jYWxsYmFjay5jLCBpZjE2MzIvdGh1bmsuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQ2FsbG91dCB0YWJsZSAoZm9yIEtFUk5FTC0+VVNFUiBjYWxscykgYWRkZWQuCglDYWxsYmFja3MtPkNhbGxQb3N0QXBwTWVzc2FnZVByb2MgcmVtb3ZlZC4KCgkqIG1pc2MvY2FsbGJhY2suYywgd2luZG93cy94MTFkcnYvZXZlbnQuYywgaW5jbHVkZS9jYWxsYmFjay5oLCBpbmNsdWRlL3F1ZXVlLmgsIGluY2x1ZGUvdGFzay5oLCBsb2FkZXIvdGFzay5jLCBpZjE2MzIvdGh1bmsuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSGFuZGxlIG5vbi1oYXJkd2FyZSBYIGV2ZW50cyBjb3JyZWN0bHkgd2l0aCBuYXRpdmUgVVNFUgoJKHJlbW92ZWQgcmVmZXJlbmNlIHRvIE1FU1NBR0VRVUVVRSBmcm9tIEtFUk5FTCBjb2RlKS4KCUhhbmRsZSBFeHBvc2UgZXZlbnRzIHdpdGggbmF0aXZlIFVTRVIuCgoJKiBtaXNjL2NydGRsbC5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQmV0dGVyIF91bHRvYSgpLgoKCSogd2luMzIvdGltZS5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJRml4IHNtYWxsIHByb2JsZW0gaW4gR2V0VGltZVpvbmVJbmZvcm1hdGlvbigpLgoKCSogd2luZG93cy94MTFkcnYva2V5Ym9hcmQuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUxvd2VzdCBzY2FuIGNvZGUgc2VlbXMgdG8gYmUgMSwgbm90IHplcm8uCgoJKiBncmFwaGljcy9kZHJhdy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVN0dWJzIGZvciBJRGlyZWN0M0QoMik6OkNyZWF0ZUxpZ2h0IGFuZCBDcmVhdGVEZXZpY2UgdG8gYXZvaWQgY3Jhc2hlcy4KCgkqIGRsbHMvbnRkbGwvcnRsLmMsIHJlbGF5MzIvbnRkbGwuc3BlYywgZGxscy9udGRsbC9udC5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3R1YnMuCgoJKiBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVzIGNyYXNoIHdoZW4gcnVubmluZyB3aXRob3V0IGV4dGVybmFsIHNoZWxsMzIuZGxsLgoKCSogd2luZG93cy93aW5wcm9jLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTW9yZSBtZXNzYWdlcyBbTEJfKixFTV8qXSB0cmFuc2xhdGVkIDMyQSBmcm9tL3RvIDMyVy4KCgkqIHJlbGF5MzIvdXNlcjMyLnNwZWM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRGVzdCBidWZmZXIgd2FzIHByaW50ZWQgb3V0IGFzIHN0ci4KCgkqIG1pc2MvdmVyLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJR2V0dGluZyBzdHJpbmdzIHdpdGggVmVyUXVlcnlWYWx1ZTMyVyB3YXMgYnJva2VuLiBDb21wbGV0ZQoJcmVjb25zdHJ1Y3Rpb24gb2YgdGhlIGZ1bmN0aW9uLgoKCSogbWlzYy90b29saGVscC5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeCBudW1iZXIgYW5kIHR5cGUgb2YgYXJncyBpbiBkZWJ1Z2dpbmcgc3RhdGVtZW50cy4KCgkqIG9sZS9zdG9yYWdlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQG11ZC5kZT4KCUlTdG9yYWdlMzIgdnRhYmxlIHdhcyBtaXNzaW5nIDMgc3R1YiBlbnRyaWVzLgoKRnJpIERlYyAxOCAxNzozODozOSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS93aW5nZGkuaCwgb2JqZWN0cy9mb250LmMsIHJlbGF5MzIvZ2RpMzIuc3BlYzoKCURvdWdsYXMgUmlkZ3dheSA8cmlkZ3dheUB3aW5laHEuY29tPgoJRG9jdW1lbnRhdGlvbiBmb3IgVHJhbnNsYXRlQ2hhcnNldEluZm8uCgoJKiBkbGxzL3duYXNwaTMyL3dpbmFzcGkzMi5jLCBpZjE2MzIvd3Byb2NzLnNwZWMsIGRsbHMvd2luYXNwaS93aW5hc3BpMTYuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCU1ha2UgdGhlIERPU0FTUEkgcGFydCB1c2UgdGhlIGV4Y2VsbGVudCBEUE1JIFJNQ0IgaW1wbGVtZW50YXRpb24gZG9uZQoJYnkgT3ZlIEthYXZlbiwgd2hpY2ggbWFrZXMgdGhlIGNvZGUgX211Y2hfIGNsZWFuZXIuCgoJKiBNYWtlLnJ1bGVzLmluLCBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW46CglUb2RkIFZpZXJsaW5nIDx0dkBwb2JveC5jb20+CglVc2UgLWx3aW5lIGZvciBsaW5raW5nLgoKCSogd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3MvcXVldWUuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBhbHdheXMgY2xlYXIgUVNfLi4uIGZyb20gKmJvdGgqIGNoYW5nZUJpdHMgYW5kIHdhaXRCaXRzLgoJQnVnZml4OiBxdWV1ZS0+aFNlbmRpbmdUYXNrIGlzICpxdWV1ZSogaGFuZGxlLCBub3QgdGFzayBoYW5kbGUuCgoJKiBpZjE2MzIvc3RvcmFnZS5zcGVjLCBpbmNsdWRlL2ludGVyZmFjZXMuaCwgaW5jbHVkZS9vYmpiYXNlLmgsIGluY2x1ZGUvc3RvcmFnZS5oLCBvbGUvaWZzLmMsIG9sZS9zdG9yYWdlLmM6CglGcmFu529pcyBHb3VnZXQgPGdvdWdldEBtZXRhaW50ZWdyYXRpb24ubmV0PgoJRmlyc3Qgc3RlcCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGNhbGwgQ09NIGludGVyZmFjZXMgZnJvbSBDKysgY29kZSBpbgoJV2luZWxpYi4KCgkqIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYywgaW5jbHVkZS90cmVldmlldy5oOgoJQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCVByZWxpbWluYXJ5IHRvb2x0aXAgc3VwcG9ydC4KCVdNX1NFVEZPTlQvR0VURk9OVCBhZGRlZC4KCVNvbWUgYnVnIGZpeGVzLgoJVXNlIENPTUNUTDMyIGhlYXAgaW5zdGVhZCBvZiBzeXN0ZW0gaGVhcC4KCgkqIGdyYXBoaWNzL3BhaW50aW5nLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJSW1wbGVtZW50ZWQgUG9seWxpbmVUby4KCgkqIHJlbGF5MzIvbnRkbGwuc3BlYzogQWRyaWFuIEhhcnZleSA8YWRyaWFuQHNlbGVjdC5jb20uYXU+CglUaGUgWncuLi4gRnVuY3Rpb25zIGluIG50ZGxsLmRsbCBhcmUganVzdCBhbHRlcm5hdGUgZW50cnkKCXBvaW50cyBmb3IgdGhlIHNhbWUgZnVuY3Rpb25zIGFzIHRoZSBOdC4uLiBmdW5jdGlvbiBvZiB0aGUKCXNhbWUgbmFtZXMuICBDaGFuZ2VkIG50ZGxsLnNwZWMgdG8gbWF0Y2ggdGhpcy4KCgkqIGluY2x1ZGUvbW9kdWxlLmgsIGluY2x1ZGUvcGVfaW1hZ2UuaCwgbG9hZGVyL21vZHVsZS5jLCBsb2FkZXIvcGVfaW1hZ2UuYywgcmVsYXkzMi9idWlsdGluMzIuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJUmVvcmdhbml6ZWQgUEUgbW9kdWxlIGxvYWRpbmcgdG8gcHJlcGFyZSBmb3IgZWxmLWRsbCBsb2FkZXIuCglXSU5FX01PRFJFRiBjcmVhdGlvbiBtb3ZlZCB0byBvbmUgY2VudHJhbCBsb2NhdGlvbi4KCUJ1Z2ZpeDogY29ycmVjdGx5IHNlbGVjdCBuYXRpdmUvYnVpbHQtaW4gdmVyc2lvbiBpZiAuRExMCglleHRlbnNpb24gaXMgbWlzc2luZyBpbiBMb2FkTGlicmFyeSBjYWxsLgoKCSogbXVsdGltZWRpYS9tbXN5c3RlbS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUNoYW5nZWQgZXJyb3IgdmFsdWVzIE1DSV9JTlRFUk5BTCB0byB0aGVpciBjb3JyZWN0IHZhbHVlcy4KCgkqIG11bHRpbWVkaWEvbWNpd2F2ZS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVJlbW92ZWQgd2FybmluZy4KCgkqIG11bHRpbWVkaWEvbWNpc3RyaW5nLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJTm8gbG9uZ2VyIHNlbmRpbmcgZGlyZWN0bHkgbWVzc2FnZXMgdG8gRHJpdmVyUHJvYyBidXQgcmF0aGVyIGdvIHRocm91Z2gKCU1DSSBsYXllciAocmVxdWlyZWQgZm9yIG9wZW4vY2xvc2UpLgoKCSogbXVsdGltZWRpYS9tY2ljZGEuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglSZW1vdmVkIGluY29ycmVjdCBwYXRjaCBmb3IgTUNJX09QRU4gYW5jIE1DSV9DTE9TRSBwYXJhbWV0ZXJzICh0aGFua3MgdG8gUm9iZXJ0IFJpZ2dzCglmb3IgcG9pbnRpbmcgb3V0IHRoZSBidWcsIHNlZSB0aGUgZml4IGluIG1jaXN0cmluZy5jKQoJRml4ZWQgTUNJIHNlZWtpbmcgb24gQ0QgYXVkaW8uCgoJKiBpbmNsdWRlL3dpbmVycm9yLmg6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YnMgZm9yIFdhaXROYW1lZFBpcGVbQXxXXS4KCgkqIGRsbHMvc2hlbGwzMi9jbGFzc2VzLmMsIGRsbHMvc2hlbGwzMi9kYXRhb2JqZWN0LmMsIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGluY2x1ZGUvc2hlbGwuaCwgcmVsYXkzMi9zaGVsbDMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNtYWxsIGZpeGVzLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN0dWIgQ29udHJvbF9GaWxsQ2FjaGVfUnVuRExMLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTSEdldEZpbGVJbmZvMzJBOiBnZXQgU0hHRklfU1lTSUNPTklOREVYIGltcGxlbWVudGVkLgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglJTEFwcGVuZCBzZWVtcyB0byB3b3JrIG5vdy4KCgkqIHJlbGF5MzIva2VybmVsMzIuc3BlYywgd2luMzIva2VybmVsMzIuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YnMgZm9yIFdhaXROYW1lZFBpcGVbQXxXXS4KClR1ZSBEZWMgMTUgMTg6MDQ6NTggMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGZpbGVzL2RpcmVjdG9yeS5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeCBHZXRUZW1wUGF0aDMyIGlmIGNvdW50PTAuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9jb25maWcuaC5pbiwgaW5jbHVkZS9tdWx0aW1lZGlhLmgsIG11bHRpbWVkaWEvYXVkaW8uYywgbXVsdGltZWRpYS9kc291bmQuYywgbXVsdGltZWRpYS9pbml0LmMsIG11bHRpbWVkaWEvbWNpY2RhLmMsIG11bHRpbWVkaWEvbWNpbWlkaS5jLCBtdWx0aW1lZGlhL21pZGkuYywgbXVsdGltZWRpYS9taXhlci5jLCBtdWx0aW1lZGlhL21tYXV4LmM6CglUb2RkIFZpZXJsaW5nIDx0dkBwb2JveC5jb20+CgktIGFkZCAtbG9zc2F1ZGlvIGlmIG5lZWRlZCwgYW5kIGEgY2hlY2sgZm9yIDxzb3VuZGNhcmQuaD4sIHRvIGNvbmZpZ3VyZS5pbgoJICAocnVuIGF1dG9jb25mIGFmdGVyIHRoaXMpLiAgTm90ZSB0aGF0IHRoZSBjaGVjayBoYXMgYmVlbiBhbHRlcmVkIHRvIGJyZWFrCgkgIG91dCBvZiB0aGUgQUNfQ0hFQ0tfSEVBREVSUyBhZnRlciB0aGUgZmlyc3QgbWF0Y2ggLSB0aGlzIGlzIHNvCgkgIDxzeXMvc291bmRjYXJkLmg+LCBpZiBmb3VuZCBvbiBOZXRCU0QgKGEgYHJlYWwnIE9TUyksIHdpbGwgbm90IGNvbmZsaWN0CgkgIHdpdGggdGhlIGVtdWxhdGVkIG9zc2F1ZGlvLgoJLSBjaGVjayBmb3IgPHNvdW5kY2FyZC5oPiBhbG9uZyB3aXRoIHRoZSBvdGhlciB0d28gaW4gYSBtdXR1YWxseS1leGNsdXNpdmUKCSAgbWFubmVyIGluIHRoZSB2YXJpb3VzICouYyBmaWxlcyB0aGF0IG5lZWQgaXQ7IGNoYW5nZSBpbmNsdWRlIG9mCgkgICJtbXN5c3RlbS5oIiB0byAibXVsdGltZWRpYS5oIiBzbyB0aGlzIGxvZ2ljIGlzIGFsbCBpbiBvbmUgcGxhY2UKCS0gY2hhbmdlIG1jaWNkYS5jIHRvIGFsbG93IGZvciBDRCBhdWRpbyBtYW5pcHVsYXRpb24gb24gTmV0QlNELiAgVGhpcwoJICBpbmNsdWRlczoKCSAgKiBjaGFuZ2luZyBpb2N0bCgpIGNhbGxzIHRvIGJlIE5PTi1TUExJVCB3aXRoIGV4YWN0bHkgMyBhcmdzOyBvbiBOZXRCU0QKCSAgICBvc3NhdWRpbywgaW9jdGwoKSBpcyAjZGVmaW5lZCB0byBiZSBfb3NzX2lvY3RsIGJ5IDxzb3VuZGNhcmQuaD4sIGFuZAoJICAgIG5laXRoZXIgc3BsaXR0aW5nIHdpdGggIy1kaXJlY3RpdmVzIG5vciBhIHR3by1hcmcgaW9jdGwgd29yazsKCSAgKiBjaGFuZ2luZyB0aGUgI2lmIGxvZ2ljIHRvIGFsbG93IGJvdGggRnJlZUJTRCBhbmQgTmV0QlNEIHRvIHNoYXJlIHRoZQoJICAgIGFwcHJvcHJpYXRlIGNvZGUgYmxvY2tzCgktIGJsb2NrIG91dCBNSURJIGNvZGUgZm9yIE5ldEJTRCAoaW5pdC5jKSBhbmQvb3IgbWlzc2luZyBTTkRDVExfTUlESV9JTkZPCgkgIChtaWRpLmMsIG1jaW1pZGkuYykuICBOZXRCU0QncyBPU1MgZW11bGF0aW9uIGRvZXMgbm90ICh5ZXQpIHN1cHBvcnQgTUlESS4KCVRoYW5rcyBnbyB0byBteWNyb2Z0QG5ldGJzZC5vcmcgZm9yIHRoZSA5OSUgYnVsayBvZiB0aGlzIHdvcmsuCgoJKiB0c3gxMS9YMTFfY2FsbHMsIHRzeDExL3RzX3h1dGlsLmMsIHdpbmRvd3MveDExZHJ2L3duZC5jLCBpbmNsdWRlL3RzX3h1dGlsLmg6CglEaXJrIFRoaWVyYmFjaCA8dGhpZXJiYWNoQG1hdGhlbWF0aWsudHUtZGFybXN0YWR0LmRlPgoJU2V0IHRoZSBjbGFzcyBoaW50cyBmb3IgbWFuYWdlZCB3aW5kb3dzLgoKCSogZmlsZXMvZG9zX2ZzLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQnVnZml4OiBHZXRGdWxsUGF0aE5hbWUgc2V0cyBscEZpbGVQYXJ0IG9ubHkgd2hlbiB0aGUgbGFzdCBlbGVtZW50Cglkb2VzIG5vdCBlbmQgd2l0aCAnXCcuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy93aW4uYywgaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL2NvbW1kbGcuaCwgaW5jbHVkZS9kZGVtbC5oLCBpbmNsdWRlL21vdXNlLmgsIGluY2x1ZGUvc2hsb2JqLmgsIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW5lcnJvci5oLCBpbmNsdWRlL3dpbmdkaS5oLCBpbmNsdWRlL3dpbnR5cGVzLmgsIG1pc2MvZGRlbWwuYywgb2JqZWN0cy9iaXRtYXAuYywgb2JqZWN0cy9icnVzaC5jLCBvYmplY3RzL2RjLmMsIG9iamVjdHMvZm9udC5jLCBvYmplY3RzL2dkaW9iai5jLCByZWxheTMyL2dkaTMyLnNwZWMsIHJlbGF5MzIvdXNlcjMyLnNwZWMsIGNvbnRyb2xzL21lbnUuYywgZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBncmFwaGljcy9iaXRibHQuYywgZ3JhcGhpY3MvZXNjYXBlLmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuYywgZ3JhcGhpY3MvcGFpbnRpbmcuYywgZ3JhcGhpY3MvcGF0aC5jLCBpZjE2MzIvdXNlci5zcGVjOgoJUGF1bCBRdWlubiA8cGF1bHFAQ09SRUwuQ0E+CglMb3RzIG9mIG5ldyBkZWZpbmVzIGFuZCBzdHVicy4KCgkqIE1ha2UucnVsZXMuaW4sIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKCVRvZGQgVmllcmxpbmcgPHR2QHBvYm94LmNvbT4KCVRoZXNlIHBhdGNoZXMgYWRkIHN1cHBvcnQgZm9yIC0tZW5hYmxlLWRsbCBvbiBOZXRCU0QsIGFuZCBtYXkgZXZlbiBkbyBzbyBmb3IKCUZyZWVCU0QgYS5vdXQuICBOb3csIE5ldEJTRCBjYW4gdXNlIGxpYndpbmUgYXMgYSBzaGFyZWQgb2JqZWN0LiAgVGhhbmtzIHRvCglteWNyb2Z0QG5ldGJzZC5vcmcgZm9yIGRvaW5nIHRoaXMgd29yayEKCgkqIHRvb2xzL3dyYy93cml0ZXJlcy5jOiBUb2RkIFZpZXJsaW5nIDx0dkBwb2JveC5jb20+CglHbG9iYWwgY29uc3RydWN0b3JzIHVzaW5nIGAuc2VjdGlvbiAuY3RvcnMnIGFyZSBib2d1cyBmb3IgTmV0QlNEJ3MKCWFzc2VtYmxlci4gVXNlIHRoZSBhcHByb3ByaWF0ZSBgLnN0YWJzJyB3aGVuIG9uIE5ldEJTRC4KCgkqIG9sZS92YXJpYW50LmM6IFRvZGQgVmllcmxpbmcgPHR2QHBvYm94LmNvbT4KCVVuZGVmaW5lZCBDSEFSX01BWCBhbmQgQ0hBUl9NSU4gKCNkZWZpbmVkIGJ5IE5ldEJTRCdzIHN5c3RlbSBoZWFkZXJzKS4KCUZpeGVkIHNvbWUgY29uc3RhbnRzIHRoYXQgYXJlIHRvbyBiaWcgZm9yIGEgcGxhaW4gYGludCcuCgoJKiBvbGUvdmFyaWFudC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNoZWNrIGZvciBNQVhGTE9BVCBpZiBGTFRfTUFYIGlzbid0IHRoZXJlLgoKCSogZ3JhcGhpY3MvcHNkcnYvTWFrZWZpbGUuaW46IFRvZGQgVmllcmxpbmcgPHR2QHBvYm94LmNvbT4KCWdyYXBoaWNzL3BzZHJ2IGZvcmdldHMgdG8gcHVsbCBpbiBARExMRkxBR1NALCBhbmQgc28gaXMgY29tcGlsZWQgbm9uLVBJQyBpZgoJdXNpbmcgLS1lbmFibGUtZGxsLgoKCSogaW5jbHVkZS93aW5nZGkuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBpbmNsdWRlL3dpbnVzZXIuaCwgaW5jbHVkZS93aW5kb3dzLmg6CglWZWtzbGVyIE1pY2hhZWwgPG12ZWtzbGVyQHRlY2h1bml4LnRlY2huaW9uLmFjLmlsPgoJTW92ZSBkZWNsYXJhdGlvbnMgZnJvbSB3aW5kb3dzLmggdG8gd2luZ2RpLmggYW5kIHdpbnVzZXIuaC4KCk1vbiBEZWMgMTQgMTg6MTU6MTEgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbjMyL2NvbnNvbGUuYywgZmlsZXMvTWFrZWZpbGUuaW4sIGZpbGVzL2FzeW5jLmMsIGZpbGVzL2ZpbGUuYywgaW5jbHVkZS9hc3luYy5oLCBpbmNsdWRlL2ZpbGUuaCwgbG9hZGVyL3NpZ25hbC5jLCBtaXNjL3dpbnNvY2tfZG5zLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU1hZGUgYXN5bmMgSU8gKFNJR0lPKSBzdHVmZiBmcm9tIFdJTlNPQ0sgZ2VuZXJpYyB1c2VhYmxlLgoJQWRkZWQgYXN5bmMgSU8gc3VwcG9ydCB0byBGSUxFIGFuZCBDT05TT0xFIG9iamVjdHMuCgoJKiBtaXNjL3dpbnNvY2suYzogU3RlcGhlbiBMYW5nYXNlayA8dm9ybG9uQGRvZGRzLm5ldD4KCVByZXZlbnQgc2VnZmF1bHQgaW4gc2V0c29ja29wdCB3aGVuIG9wdG5hbWUgaXMgU09fTElOR0VSIGFuZCBvcHR2YWwgaXMKCW51bGwuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIHJlbGF5MzIvc2hlbGwzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTb21lIGNsZWFudXAuCgoJKiBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNITWFwUElETFRvU3lzdGVtSW1hZ2VMaXN0SW5kZXggdHJ5J3MgdG8gZGV0ZXJtaW5lIGFuZCBsb2FkIHRoZSBleGFjdAoJaWNvbiBmb3IgZmlsZXMgKGJ5IHR5cGUpIG5vdy4KCgkqIGRsbHMvc2hlbGwzMi9jbGFzc2VzLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IEhDUl9HZXREZWZhdWx0SWNvbiAoaW50ZXJuYWwpLgoKCSogaW5jbHVkZS9kb3NleGUuaCwgbG9hZGVyL2Rvcy9kb3N2bS5jLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBtc2Rvcy9kb3NtZW0uYywgbXNkb3MvZHBtaS5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglNb3ZlZCBEUE1JIHdyYXBwZXIgYWxsb2NhdGlvbiBjb2RlIHRvIGRvc21lbS5jIHRvIFJFQUxMWSBtYWtlIHRoZQoJUk1jYWxsIHNob3J0Y3V0cyBpbmRlcGVuZGVudCBvZiBkb3Ntb2QuIFNTIGhhZCBiZWVuIGxlZnQgb3V0IG9mCgl0aGUgUkVBTE1PREVDQUxMIGNvcHkgcm91dGluZXMgZm9yIHNvbWUgcmVhc29uLCBmaXhlZCBub3cuIEFsc28KCWNsZWFuZWQgdXAgYSBmZXcgY29tcGlsZXIgd2FybmluZ3MuCgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYzogSWFuIFBpbGNoZXIgPHBpbGNoZXJAY29uY2VudHJpYy5uZXQ+CglBZGRlZCBhYmlsaXR5IHRvIHNwZWNpZnkgWCBmb250cyB1c2VkIGZvciBIZWx2IGFuZCBUbXMgUm1uIHR5cGVmYWNlcwoJd2l0aCBEZWZhdWx0U2VyaWYgYW5kIERlZmF1bHRTYW5zU2VyaWYgSU5JIGtleXMuCgoJKiB0b29scy93cmMvcGFyc2VyLnksIHRvb2xzL3dyYy93cmMuaCwgdG9vbHMvd3JjL3dyaXRlcmVzLmMsIHRvb2xzL3dyYy9DSEFOR0VTOgoJQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCS0gQWRkZWQgYSBnbG9iYWwgbGFiZWwgZm9yIGVsZi1kbGwgbGlua2luZyBhbmQgYSBsb25nIHdpdGggdGhlIHJlc291cmNlCgkgIHNpemUgYW5kIGEgbG9uZyB3aXRoIHRoZSBkaXJlY3Rvcnkgc2l6ZS4KCS0gS2lsbGVkIGFuIGFubm95aW5nIHdhcm5pbmcgc2luY2UgdmVyc2lvbiAxLjAuMCBpbiBwYXJzZXIueSBhYm91dCBhCgkgIHZhciBiZWluZyB1c2VkIGJlZm9yZSBpbml0LgoKCSogaW5jbHVkZS9zaGxvYmouaCwgZGxscy9zaGVsbDMyL3NoZWxsbGluay5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvbGUuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQWRkcyB0aGUgSVBlcnNpc3RGaWxlIEludGVyZmFjZSB0byBJU2hlbGxMaW5rW1ddIGFuZCBnYXZlIGJvdGggb3duCglJQ2xhc3NGYWN0b3J5cy4KCgkqIHdpbjMyL2NvbnNvbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CgkoUmVhZENvbnNvbGUzMkEpOiBzbWFsbCBhbmQgc3R1cGlkIGJ1ZyBmaXhlZAoJKFdyaXRlQ29uc29sZU91dHB1dCk6IGJ1ZyBmaXhlZCAoYXR0cmlidXRlcyBtYXkgY2hhbmdlIHdpdGhpbiBsaW5lcykKCWFuZCBlbmhhbmNlZCBzcGVlZHdpc2UgYnkgdXNpbmcgYnVmZmVyaW5nLgoJKENPTlNPTEVfc3RyaW5nXzJfSVIpOiBlbmhhbmNlZCwgbm93IGdldHMgc2NhbmNvZGVzIGFuZCB2aXJ0dWFsa2V5Y29kZXMKCgkqIG1pc2MvY3J0ZGxsLmMsIHJlbGF5MzIvY3J0ZGxsLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCV91bHRvYSBpbXBsZW1lbnRlZC4KCgkqIGNvbnRyb2xzL3N0YXRpYy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNtYWxsIGhhY2sgdG8gZ2V0IHJpZCBvZiBhbm5veWluZyBlcnI6cmVzb3VyY2U6IG1lc3NhZ2UgZm9yCglNZXNzYWdlQm94ZXMuCgoJKiByZWxheTMyL2Rzb3VuZC5zcGVjOiBJYW4gU2NobWlkdCA8aXJzbWFuQGlhZy5uZXQ+CglGaXggb2ZmLWJ5LTEgZXJyb3IgaW4gRGlyZWN0U291bmQgb3JkaW5hbHMuIFRoYW5rcyB0byBSb2JlcnQgUmlnZ3MgZm9yCgl0aGUgcG9pbnRlci4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IFN0ZXBoZW4gQ3Jvd2xleSA8Y3Jvd0BkZWJpYW4ub3JnPgoJU2F2ZSB0aGUgb3JpZ2luYWwgdmlkZW8gbW9kZSBiZWZvcmUgZ29pbmcgZnVsbHNjcmVlbiBhbmQgcmVzdG9yZSBpdAoJd2hlbiB0aGUgbGFzdCBEaXJlY3REcmF3X1JlbGVhc2UgaXMgY2FsbGVkLiBBbHNvIGZpeCBhIHByb2JsZW0gd2hlcmUKCXRoZSB2aWV3cG9ydCB3YXNuJ3Qgc2V0IHRvIDAsMC4KCgkqIGNvbnNvbGUveHRlcm0uYzogSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglNYWRlIG1vcmUgY3Jvc3MtcGxhdGZvcm0gYnkgY2hhbmdpbmcgLT5fZmlsZW5vIHRvIGZpbGVubygpLgoKCSogd2luZG93cy93aW4uYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglGaXggdGhlIFotb3JkZXIgb2YgbWF4aW1pemVkL21pbmltaXplZCBjaGlsZCB3aW5kb3dzLgoKCSogZ3JhcGhpY3MveDExZHJ2L3hmb250LmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVhMRkRzIHNob3VsZCBiZSB3ZWxsLWZvcm1lZCAoMTQgaHlwaGVucykgdG8gbWF0Y2ggc2NhbGFibGUgZm9udHMuCglTdG9wIHNsYW50IGZpZWxkIGJlY29taW5nIHdpbGRjYXJkZWQgdG9vIGVhcmx5LgoKCSogd2luZG93cy9mb2N1cy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCShGT0NVU19Td2l0Y2hGb2N1cykgY2hlY2sgZm9yIHBGb2N1c1RvID09IE5VTEwgaW5zdGVhZCBvZiBoRm9jdXNUbz09MC4KCgkqIG9sZS9vbGUybmxzLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJSGFjayBPTEVfR2V0Rm9ybWF0KiB0byByZXR1cm4gc29tZXRoaW5nIGlmIGRhdGVsZW4gPSAwLgoJUmVtb3ZlIHVubmVjZXNzYXJ5IFdJTkFQSSdzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGcmkgRGVjIDExIDE1OjA0OjExIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL3Byb2Nlc3MuaCwgaW5jbHVkZS90bGhlbHAzMi5oLCBpbmNsdWRlL3Rvb2xoZWxwLmgsIG1pc2MvdG9vbGhlbHAuYywgc2NoZWR1bGVyL2szMm9iai5jLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJUGF0cmljayBTcGlubGVyIDxzcGlubGVyLnBhdHJpY2tAbWF5by5lZHU+CglJbXBsZW1lbnRlZCBDcmVhdGVUb29saGVscDMyU25hcHNob3QsIGluY2x1ZGluZyB0d28gb2YgdGhlIHJvdXRpbmVzCgl1c2luZyBzbmFwc2hvdHMsIFByb2Nlc3MzMkZpcnN0IGFuZCBQcm9jZXNzMzJOZXh0LgoKCSogcmVsYXkzMi9vbGVhdXQzMi5zcGVjLCBpbmNsdWRlL21hcGlkZWZzLmgsIGluY2x1ZGUvb2xlYXV0by5oLCBpbmNsdWRlL3dpbjE2ZHJ2LmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgb2xlL2NvbXBvYmouYywgb2xlL3ZhcmlhbnQuYzoKCUp1c3RpbiBCcmFkZm9yZCA8anVzdGluQHVrYW5zLmVkdT4KCU1vc3Qgb2YgdGhlIGN1cnJlbmN5IHZhcmlhbnQgY29udmVyc2lvbiBmdW5jdGlvbnMgaW1wbGVtZW50ZWQuCglNaW5vciBidWdmaXhlcyBhbmQgaGVhZGVyIHRpZHlpbmcuCgoJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRsbHMvcmFzYXBpMzIvTWFrZWZpbGUuaW4sIGRsbHMvcmFzYXBpMzIvcmFzYXBpLmMsIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgaW5jbHVkZS9yYXMuaCwgaW5jbHVkZS93aW50eXBlcy5oLCByZWxheTMyL3Jhc2FwaTMyLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIFJhc0VudW1Db25uZWN0aW9ucyBzdHViLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hlbGxwYXRoLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUJ1Z2ZpeCBpbiBQYXRoQ29tYmluZTMyW0F8V10uCglWaWV3IG1lbnUgaW4gZXhwbG9yZXIgYW5kIG9uIHJpZ2h0IG1vdXNlIGJ1dHRvbiBpcyB3b3JraW5nIG5vdy4KCgkqIGRsbHMvc2hlbGwzMi9waWRsLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSW1wbGVtZW50ZWQgIElMR2V0RGlzcGxheU5hbWUuCgoJKiBkbGxzL3NoZWxsMzIvY2xhc3Nlcy5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3RhcnRlZCBpbXBsZW1lbnRhdGlvbiBvZiBTaGVsbEV4ZWN1dGVFeDMyQS4KCVNtYWxsIGNoYW5nZXMuCgoJKiBkbGxzL3NoZWxsMzIvLmN2c2lnbm9yZSwgZGxscy9zaGVsbDMyL01ha2VmaWxlLmluLCBkbGxzL3NoZWxsMzIvc2hyZXMucmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1vdmVkIG1lbnUgcmVzb3VyY2VzIHRvIHJjLWZpbGUuCgoJKiBpbmNsdWRlL3BlX2ltYWdlLmgsIG9sZS9vbGUybmxzLmMsIHdpbjMyL2ZpbGUuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJVHdvIGRlYnVnIG1lc3NhZ2VzIGNsYXJpZmllZCwgb25lIHVzZWxlc3MgcHJvdG90eXBlIHJlbW92ZWQuCgoJKiBpbmNsdWRlL29sZWF1dG8uaCwgb2xlL3ZhcmlhbnQuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJMjk0IG1pc3NpbmcgV0lOQVBJIGFkZGVkLgoKCSogdG9vbHMvdGVzdHJ1bjogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglLaWxsIHN3YXBwZWQgb3V0ICh3aW5lKSBwcm9jZXNzZXMgdG9vIGFuZCB0cnVuY2F0ZSBkaWZmIGFmdGVyIHNvbWUgeHh4CglsaW5lcy4KCgkqIG9sZS9vbGUybmxzLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRml4ZWQgU2V0TGFzdEVycm9yIHdpdGggd3JvbmcgdmFsdWUuCgoJKiBtaXNjL3ByaW50ZHJ2LmMsIG9iamVjdHMvZW5obWV0YWZpbGUuYywgZ3JhcGhpY3MvcGFpbnRpbmcuYywgaW5jbHVkZS93aW5kb3dzLmg6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUltcGxlbWVudCBBYm9ydERvYzE2LCBtb3ZlIEFib3J0RG9jMzIgYW5kIFN0YXJ0RG9jMzJXIHRvCgltaXNjL3ByaW50ZHJ2LmMgYW5kIGZpeCBhIGZldyBjb21waWxlIHdhcm5pbmdzLgoKCSogd2luMzIvb3JkaW5hbHMuYywgd2luZG93cy9kcml2ZXIuYywgd2luZG93cy9tc2dib3guYywgd2luZG93cy9tdWx0aW1vbi5jLCB3aW5kb3dzL3VzZXIuYywgZGxscy9jb21jdGwzMi9hbmltYXRlLmMsIGRsbHMvY29tY3RsMzIvY29tYm9leC5jLCBkbGxzL250ZGxsL250LmMsIGlmMTYzMi90eXBlbGliLnNwZWMsIGluY2x1ZGUvZmlsZS5oLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBtc2Rvcy9pbnQyMS5jLCBvbGUvb2xlMm5scy5jLCBvbGUvdHlwZWxpYi5jOgoJQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJRml4ZWQgYSBidW5jaCBvZiBjb21waWxlciB3YXJuaW5ncy4KCgkqIGZpbGVzL2ZpbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBXaW4zMiBzeW5jaHJvIHRvIEZJTEVzICh1c2VmdWwgb25seSBmb3IgdGVybWluYWwgaGFuZGxlcykuCgpUaHUgRGVjIDEwIDE2OjA0OjUxIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2RjLmMsIG9iamVjdHMvZW5obWV0YWZpbGUuYywgb2JqZWN0cy9mb250LmMsIG9iamVjdHMvbWV0YWZpbGUuYywgcmVsYXkzMi9jb21jdGwzMi5zcGVjLCByZWxheTMyL2dkaTMyLnNwZWMsIHJlbGF5MzIva2VybmVsMzIuc3BlYywgcmVsYXkzMi9tcHIuc3BlYywgcmVsYXkzMi9zaGVsbDMyLnNwZWMsIHJlbGF5MzIvdGFwaTMyLnNwZWMsIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHJlbGF5MzIvd2luc3Bvb2wuc3BlYywgd2luMzIvY29uc29sZS5jLCB3aW4zMi9rZXJuZWwzMi5jLCB3aW4zMi90aW1lLmMsIHdpbmRvd3MvaW5wdXQuYywgd2luZG93cy9tZXNzYWdlLmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuYywgaWYxNjMyL2RkZW1sLnNwZWMsIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9kZGVtbC5oLCBpbmNsdWRlL3NobG9iai5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBtZW1vcnkvc3RyaW5nLmMsIG1pc2MvZGRlbWwuYywgbWlzYy9uZXR3b3JrLmMsIG1pc2MvcHJpbnRkcnYuYywgbWlzYy90YXBpMzIuYywgY29udHJvbHMvZWRpdC5jLCBkbGxzL2NvbWN0bDMyL01ha2VmaWxlLmluLCBkbGxzL2NvbWN0bDMyL2NvbWN0bDMydW5kb2MuYywgZGxscy9jb21jdGwzMi9wcm9wc2hlZXQuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBmaWxlcy9maWxlLmMsIGdyYXBoaWNzL3BhaW50aW5nLmM6CglGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglTeWx2YWluIFN0LUdlcm1haW4gPHN5bHZhaW5AbWFjYWRhbWlhbi5jb20+CglUaHV5IE5ndXllbiA8dGh1eUBtYWNhZGFtaWFuLmNvbT4KCUxvdHMgb2YgbmV3IHN0dWJzLgoKCSogbXNkb3MvdnhkLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJTGV0IHRoZSBTeXN0ZW1fVGltZV9TZWxlY3RvciBjbG9jayB0aWNrLgoKCSogbG9hZGVyL2Rvcy9tb2R1bGUuYywgbWlzY2VtdS9pbnN0ci5jLCBtc2Rvcy9kb3NtZW0uYywgZ3JhcGhpY3MvZGlzcGRpYi5jLCBncmFwaGljcy92Z2EuYywgaW5jbHVkZS9taXNjZW11LmgsIGluY2x1ZGUvdmdhLmg6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkYXB0ZWQgdG8gQ3JlYXRlU3lzdGVtVGltZXIgaW50ZXJmYWNlIGNoYW5nZS4KCgkqIGlmMTYzMi9zeXN0ZW0uc3BlYywgaWYxNjMyL3RodW5rLmMsIGluY2x1ZGUvY2FsbGJhY2suaCwgaW5jbHVkZS93aW5kb3dzLmgsIG1pc2MvY2FsbGJhY2suYywgbWlzYy9zeXN0ZW0uYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQ2xlYW5lZCB1cCBDcmVhdGVTeXN0ZW1UaW1lciBpbnRlcmZhY2UgZm9yIHVzZSB3aXRoIDMyLWJpdCBjYWxsYmFja3MuCgkoTk9URTogMTYtYml0IGNhbGxiYWNrcyBzdGlsbCBkb24ndCB3b3JrISkKCgkqIHdpbmRvd3MvbWRpLmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJLSBIYW5kbGUgV01fTURJUkVTVE9SRSBieSBjYWxsaW5nIFdNX1NZU0NPTU1BTkQgZm9yCgl0aGUgY2hpbGQgd2luZG93IHNvIHRoYXQgdGhlIHN5c3RlbSBtZW51IGlzIHNldCBjb3JyZWN0bHkuCgktIEluIE1ESUNhc2NhZGUgYW5kIE1ESVRpbGUgdXNlIFdNX01ESVJFU1RPUkUgbWVzc2FnZQoJdG8gcmVzdG9yZSBtYXhpbWl6ZWQgd2luZG93IHNvIHRoYXQgc3lzdGVtIG1lbnUgaXMKCWhhbmRsZWQgY29ycmVjdGx5LgoKCSogaW5jbHVkZS9vbGVhdXRvLmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgb2xlL01ha2VmaWxlLmluLCBvbGUvdHlwZWxpYi5jLCBvbGUvdmFyaWFudC5jLCByZWxheTMyL29sZWF1dDMyLnNwZWM6CglKZWFuLUNsYXVkZSBDb3RlIDxqZWFuLWNsYXVkZUBtYWNhZGFtaWFuLmNvbT4KCUFkZGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBWQVJJQU5UIEFQSXMuCgoJKiBmaWxlcy9kcml2ZS5jOiBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlZCBEUklWRV9HZXRGcmVlU3BhY2UgdG8gaGFuZGxlIHNwYWNlID4gNCBHQnl0ZS4KCgkqIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYzogQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCWhhbmRsZSBUVklGX1RFWFQgYnkgVFJFRVZJRVdfU2V0SXRlbSBhY2NvcmRpbmcgdG8gTVMgZG9jdW1lbnRhdGlvbi4KCWJldHRlciBoYW5kbGluZyBvZiBMUFNUUl9URVhUQ0FMTEJBQ0szMkEKCVRSRUVWSUVXX0dldE5leHR8UHJldkxpc3RJdGVtIGRpZG4ndCBkZXNjZW5kIGludG8gdmlzaWJsZSBjaGlsZCBpdGVtcy4KCgkqIGxvYWRlci9wZV9pbWFnZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVdhcm4gaWYgdHdvIC5leGVzIGNvbmZsaWN0IHdpdGggZWFjaCBvdGhlciBhbmQgdGhlIHNlY29uZCBkb2VzIG5vdAoJaGF2ZSByZWxvY2F0aW9uIHJlY29yZHMuCgoJKiBtaXNjL2NvbW1kbGcuYzogVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRml4ZWQgR2V0RmlsZVRpdGxlMzJBIG5vdCBmaWxsaW5nIHVwIGxwVGl0bGUgaWYgbHBGaWxlIGRpZG4ndAoJY29udGFpbiAnLycsJ1xcJyBvciAnOicuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBTdGVwaGVuIENyb3dsZXkgPGNyb3dAZGViaWFuLm9yZz4KCUZpeGVkIGEgcG90ZW50aWFsIGNyYXNoIGlmIGEgdXNhYmxlIHZpZGVvIG1vZGUgaXMgbm90IGRldGVjdGVkLgoKCSogdG9vbHMvbWFrZV9hdXRob3JzOiBTY3JpcHQgdG8gZ2VuZXJhdGUgYXV0aG9ycyBmaWxlcwoKCSogaW5jbHVkZS9kaW5wdXQuaCwgd2luZG93cy9kaW5wdXQuYzogUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCVN0dWJzIGZvciBJRGlyZWN0SW5wdXRFZmZlY3QgYW5kIElEaXJlY3RJbnB1dERldmljZTJBIG1ldGhvZHMsCglhcyB3ZWxsIGFzIEFkZFJlZigpLCBHZXRDYXBhYmlsaXRlcygpLCBFbnVtT2JqZWN0cygpLAoJR2V0UHJvcGVydHkoKSwgR2V0T2JqZWN0SW5mbygpLCBHZXREZXZpY2VJbmZvKCksIEluaXRpYWxpemUoKSwKCWFuZCBSdW5Db250cm9sUGFuZWwoKSBmb3IgSURpcmVjdElucHV0RGV2aWNlLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCVNldCB3aW5kb3cgZm9jdXMgaW4gIF9jb21tb25fSURpcmVjdERyYXdfU2V0RGlzcGxheU1vZGUoKS4KCgkqIG11bHRpbWVkaWEvbWNpY2RhLmM6IFJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglBY2NlcHQgTUNJX09QRU4gYW5kIE1DSV9DTE9TRSBtZXNzYWdlcyBpbiBNQ0lDREFVRElPX0RyaXZlclByb2MzMigpLgoKCSogaW5jbHVkZS93aW4uaCwgd2luZG93cy93aW4uYywgd2luZG93cy94MTFkcnYvZXZlbnQuYywgd2luZG93cy94MTFkcnYvd25kLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVJlbW92ZWQgZGVmZXJyZWQgRXhwb3NlIGV2ZW50cyBoYW5kbGluZy4KCgkqIHdpbmRvd3MvZGNlLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJRG9uJ3QgY2xpcCBWaXNSZ24gYWdhaW5zdCBYIGRlc2t0b3AuCgoJKiBsb2FkZXIvbW9kdWxlLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJTG9hZE1vZHVsZTMyL1dpbkV4ZWMzMiBzaG91bGQgcmV0dXJuIDE2LWJpdCBoSW5zdGFuY2UvaFRhc2suCgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJU2FuaXR5IGNoZWNrIG9uIGZvbnQgc2l6ZS4KCgkqIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglNaXNzaW5nIHBhcmVudGhlc2VzIGFkZGVkLgoKV2VkIERlYyAgOSAxNjozNzowNSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbG9hZGVyL3Rhc2suYywgcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCB3aW4zMi9jb25zb2xlLmMsIGluY2x1ZGUvd2luY29uLmg6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUVuaGFuY2VkIFdpbjMyIENvbnNvbGUgKFhURVJNKQoJLSBpbnB1dGhhbmRsaW5nIGVuaGFuY2VkIChrZXlzIGFuZCBtb3VzZWNsaWNrcykKCS0gd2luMzIgc3luY2hyb25pemF0aW9uIChwYXJ0aWFsKQoJLSBsb3RzIG9mIGVuaGFuY2VtZW50cyB0byBkcmF3aW5nIGZ1bmN0aW9ucwoJLSBzaW1wbGUvY29tcGxleCBjb25zb2xlIChzaW1wbGUtc3RkaW4vc3Rkb3V0IC0+IGNvbXBsZXgteHRlcm0pLgoKCSogY29uc29sZS9NYWtlZmlsZS5pbiwgY29uc29sZS9nZW5lcmljLmMsIGNvbnNvbGUvaW50ZXJmYWNlLmMsIGNvbnNvbGUvbmN1cnNlcy5jLCBjb25zb2xlL3R0eS5jLCBjb25zb2xlL3h0ZXJtLmMsIGluY2x1ZGUvY29uc29sZS5oOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglBZGQgYSBkcml2ZXIgdG8gb3BlbiB1cCBhIG5ldyB4dGVybSB3aW5kb3cgd2hlbmV2ZXIgY29uc29sZSBvdXRwdXQgaXMKCW5lZWRlZC4gRGVyaXZlZCBmcm9tIGNvbnNvbGUvd2luMzIuYyBidXQgd2UgYXJlIG5vdCB5ZXQgcmVhZHkgdG8gbWVyZ2UKCXRoZSBjb2RlIGNvbXBsZXRlbHkuCgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYywgaW5jbHVkZS93aW5kb3dzLmgsIHRvb2xzL2ZudDJiZGYuYzoKCVBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgoJSW1wcm92ZWQgdGhlIGhhbmRsaW5nIG9mIGZvbnQgZW5jb2RpbmdzLgoKCSogbXNkb3MvZHBtaS5jLCBpbmNsdWRlL21pc2NlbXUuaDogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglJbXBsZW1lbnRlZCBEUE1JIFJNQ0JzIHVzaW5nIHRoZSBET1Mgc3Vic3lzdGVtLCBhbmQgYSBmZXcgb3RoZXIKCWltcHJvdmVtZW50cy4gQWxzbywgc29tZSBzcGVjaWFsLWNhc2VkIHNob3J0Y3V0IHBhdGhzIHdpbGwgYWxsb3cgc29tZQoJY29tbW9uIHJlYWwtbW9kZSBjYWxsL1JNQ0IgY29tYmluYXRpb25zIHRvIHdvcmsgZXZlbiB3aXRob3V0IGNhbGxpbmcgdGhlCglET1Mgc3Vic3lzdGVtLCB0aHVzIGxldHRpbmcgQVBJcyBsaWtlIERPU0FTUEkgd29yayB3aXRob3V0IGFueSBkaXJ0eSBoYWNrcwoJZXZlbiBvbiBwbGF0Zm9ybXMgdGhhdCBjYW5ub3QgdXNlIGRvc21vZC4KCgkqIG11bHRpbWVkaWEvdGltZS5jLCBvbGUvY29tcG9iai5jLCBmaWxlcy9jaGFuZ2UuYywgbG9hZGVyL21vZHVsZS5jLCBtaXNjL2x6ZXhwYW5kLmMsIG1pc2MvbWFpbi5jLCBjb250cm9scy9tZW51LmMsIGNvbnRyb2xzL3Njcm9sbC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTb21lIHVubmVjZXNzYXJ5ICNpbmNsdWRlIGFuZCBtZXNzYWdlcyByZW1vdmVkLgoKCSogb2xlL29sZTJubHMuYzogVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJU29tZSBzbWFsbCBjb3JyZWN0aW9ucyB0byBFbnVtU3lzdGVtTG9jYWxlczMyQVcKClR1ZSBEZWMgIDggMTU6MDY6MzkgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHRvb2xzL21ha2VfWDExd3JhcHBlcnMsIHRzeDExL3RzX3hmODZ2bW9kZS5jLCBncmFwaGljcy9kZHJhdy5jOgoJVHJpZWQgYW5vdGhlciBrbHVkZ2UgZm9yIHRoZSBYbWQuaCBwcm9ibGVtLgoKCSogdHN4MTEvTWFrZWZpbGUuaW4sIHRzeDExL1gxMV9jYWxscywgdHN4MTEvdHNfeGY4NnZtb2RlLmMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2FjY29uZmlnLmgsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvdHNfeGY4NnZtb2RlLmgsIHRvb2xzL21ha2VfWDExd3JhcHBlcnM6CglTdGVwaGVuIENyb3dsZXkgPGNyb3dAZGViaWFuLm9yZz4KCUFkZGVkIGZ1bGxzY3JlZW4gREdBIHN1cHBvcnQuCgoJKiBtaXNjL21haW4uYzogUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuYWxwaGFuZXQuY2g+CglGaXhlZCBkdW1teSBlbnRyaWVzIGluIE1BSU5fUGFyc2VMYW5ndWFnZU9wdGlvbigpLgoKCSogaW5jbHVkZS9tbXN5c3RlbS5oLCBtdWx0aW1lZGlhL21jaWNkYS5jOgoJQnJpYW4gR2Vyc3QgPGJnZXJzdEBxdWFyay52cHBsdXMuY29tPgoJUHJvcGVybHkgaW1wbGVtZW50IE1DSV9DREFfU1RBVFVTX1RZUEVfVFJBQ0suCglGaXggYW4gb2ZmLWJ5LW9uZSBidWcgd2l0aCBNQ0lfU1RBVFVTX0xFTkdUSC4KCgkqIHdpbmRvd3MveDExZHJ2L2V2ZW50LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU3VwZXJmbG91cyBXSU5BUEkgcmVtb3ZlZC4KCgkqIGxvYWRlci9wZV9pbWFnZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVdhcm4gYWJvdXQgaW52YWxpZCBlbnRyeXBvaW50cyAoY3JlYXRlZCBieSB2aXJ1c2VzKSB3aGljaCByZXN1bHQgaW4KCVdpbmUgY3Jhc2hlcy4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQ3JlYXRlIFgxMSBwYWxldHRlIG9uIERpcmVjdERyYXdTdXJmYWNlOjpTZXRQYWxldHRlLCBub3QgYmVmb3JlICh3ZQoJbWlnaHQgbm90IGhhdmUgYW4gWDExIHdpbmRvdyB5ZXQpLgoKCSogbG9hZGVyL21haW4uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglNb3ZlIFRXRUFLX0luaXQgZnJvbSBVU0VSIHRvIEdESUluaXQuCgoJKiBncmFwaGljcy9wYWludGluZy5jLCBpZjE2MzIvZ2RpLnNwZWMsIGluY2x1ZGUvd2luZG93cy5oLCBtaXNjL3ByaW50ZHJ2LmMsIG1pc2Mvc3Bvb2xlci5jLCByZWxheTMyL2dkaTMyLnNwZWM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeCBmb3IgU2V0QWJvcnRQcm9jMTYsIHN0dWIgZm9yIFNldEFib3J0UHJvYzMyIGFuZCB0aWR5IHVwIHNvbWUgb3RoZXIKCXByaW50aW5nIGZ1bmN0aW9ucy4KCgkqIHdpbmRvd3MvZm9jdXMuYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglGaXggaW5jbHVkZXMuCgoJKiBncmFwaGljcy94MTFkcnYvdGV4dC5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglGaXggWDExRFJWX0V4dFRleHRPdXQgZm9yIHJvdGF0ZWQgdGV4dCBpZiBlaXRoZXIgb2YgbHBEeCwgYnJlYWtFeHRyYQoJb3IgY2hhckV4dHJhIGFyZSBub24temVyby4KCgkqIGluY2x1ZGUvQXR0aWMvZ3JhcGhpY3MuaCwgbWlzYy9zaGVsbC5jLCB3aW5kb3dzL0F0dGljL2dyYXBoaWNzLmMsIHdpbmRvd3MvTWFrZWZpbGUuaW4sIHdpbmRvd3Mvbm9uY2xpZW50LmMsIHdpbmRvd3Mvc2Nyb2xsLmMsIGNvbnRyb2xzL2J1dHRvbi5jLCBjb250cm9scy9jb21iby5jLCBjb250cm9scy9kZXNrdG9wLmMsIGNvbnRyb2xzL2ljb250aXRsZS5jLCBjb250cm9scy9tZW51LmMsIGNvbnRyb2xzL3Njcm9sbC5jLCBkbGxzL2NvbWN0bDMyL3VwZG93bi5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBncmFwaGljcy9tZXRhZmlsZWRydi9ncmFwaGljcy5jLCBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJUmVwbGFjZSBHUkFQSF8gZnVuY3Rpb25zIHdpdGggV2luIFNESyBlcXVpdmFsZW50cy4KCk1vbiBEZWMgIDcgMTY6MjM6NDIgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGZpbGVzL2Rvc19mcy5jOiBBbGV4YW5kZXIgTGFyc3NvbiA8YWxsYUBseXNhdG9yLmxpdS5zZT4KCVJldmVydGVkIHByZXZpb3VzIHBhdGNoLgoKCSogaW5jbHVkZS9kb3NleGUuaDogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglEb24ndCBkZWZpbmUgTVpfU1VQUE9SVEVEIG9uIG5vbi1pMzg2IHBsYXRmb3Jtcy4KCgkqIGxvYWRlci9kb3MvbW9kdWxlLmMsIG1zZG9zL2RwbWkuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglGaXhlZCBEUE1JX0NhbGxSTVByb2MgKEkgdGhpbmspLgoKCSogbWlzYy9uZXR3b3JrLmMsIHJlbGF5MzIvbXByLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVN0dWIgZm9yIE5QU0dldFByb3ZpZGVySGFuZGxlQS4KCgkqIHdpbmRvd3MveDExZHJ2L2tleWJvYXJkLmM6IEJyaWFuIEdlcnN0IDxiZ2Vyc3RAcXVhcmsudnBwbHVzLmNvbT4KCVRoZSBzY2FuY29kZSBXaW5kb3dzIHNlbmQgZm9yIGV4dGVuZGVkIGtleXMgaXMgdGhlIHNjYW5jb2RlIG9mIHRoZQoJdW5leHRlbmRlZCBlcXVpdmFsZW50IG9mIHRoZSBrZXksIHBsdXMgdGhlIGV4dGVuZGVkIGZsYWcuCgoJKiBkbGxzL3dpbmFzcGkvd2luYXNwaTE2LmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlZCBhIHJlYWwgbW9kZSBwcm9ibGVtLgoKCSogbG9hZGVyL25lL21vZHVsZS5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJTkVfTU9EVUxFLnN0YWNrX3NpemUgd2FzIHNldCB0byBhIHJpZGljdWxvdXNseSBzbWFsbCB2YWx1ZSBvZiA1LgoJV2luZG93cyBzZXRzIDB4MTQwMCBpbiBzdWNoIGNhc2VzIGZvciBwcm9ncmFtcy4KCgkqIGNvbnRyb2xzL3N0YXRpYy5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVdlIGRvbid0IHlldCB3YW50IHRoZSBzdGF0aWMgY29udHJvbCB0byBjYWxsIERlc3Ryb3lJY29uLgoKCSogd2luZG93cy9jbGFzcy5jOiBORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCUFkZGVkIGNhc2UgZm9yIEdDV19BVE9NIGludCBHZXRDbGFzc0xvbmczMkEuCgoJKiBtaXNjL25ldHdvcmsuYywgcmVsYXkzMi9tcHIuc3BlYzogR2FlbCBkZSBDaGFsZW5kYXIgPGdhZWxAbGltc2kuZnI+CglTdHViIGZvciBXTmV0T3BlbkVudW0zMlcuCgoJKiBtdWx0aW1lZGlhL2Rzb3VuZC5jLCByZWxheTMyL2Rzb3VuZC5zcGVjOgoJUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCU1vcmUgZ2VuZXJhbCBjb2RlIGNsZWFudXAgZm9yIHJlYWRhYmlsaXR5LgoJQSBmZXcgbW9yZSBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBjaGVja3MuCglSZXR1cm4gRFNfT0sgcmF0aGVyIHRoYW4gMCBpbiBhIG51bWJlciBvZiBmdW5jdGlvbnMuCglGaXhlZCBwcmltYXJ5IGJ1ZmZlciByZWYgY291bnQgYnVnIGluIENyZWF0ZVNvdW5kQnVmZmVyKCkuCglIYW5kbGUgMS0zIGJ5dGUgc291bmQgZnJhZ21lbnRzIHRoYXQgd291bGQgY2F1c2UgYnVmZmVyIG92ZXJydW5zLgoJQ2xlYXIgcHJpbWFyeSBidWZmZXIgd2l0aCBhIG5ldXRyYWwgdmFsdWUgaW5zdGVhZCBvZiBhbHdheXMgMAoJKGJlY2F1c2UgMTI4IGlzIG5ldXRyYWwgZm9yIDgtYml0IHNvdW5kKS4KCUZpeCBidWcgd2l0aCBtaXhpbmcgOC1iaXQgc291bmQgaW50byB0aGUgcHJpbWFyeSBidWZmZXIuCglCcm9rZSBvdXQgdGhlIG1haW4gYmxvY2sgaW4gRFNPVU5EX3RocmVhZCgpIHRvIGFub3RoZXIgZnVuY3Rpb24gZm9yCglyZWFkYWJpbGl0eS4KCUhhbmRsZSAibm8gYXVkaW8iIGFuZCAiYXVkaW8gYnVzeSIgY2FzZXMgcHJvcGVybHkgd2hlbiBpbml0aWFsaXppbmcKCWRzb3VuZC4gUmVuYW1lIERsbENhblVubG9hZE5vdygpIHRvIERTT1VORF9EbGxDYW5VbmxvYWROb3coKS4KCgkqIGRlYnVnZ2VyL2hhc2guYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglNYWRlIHZhcmlhYmxlcyBvcHRpbWl6ZWQgaW50byByZWdpc3RlcnMgYWNjZXNzaWJsZS4KCgkqIHJlbGF5MzIvdXNlcjMyLnNwZWM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglUaGUgc3BlYyBkZWZpbml0aW9uIGZvciBNb25pdG9yRnJvbVdpbmRvdyB3YXMgd3JvbmcuCgoJKiBtc2Rvcy9pbnQyMS5jOiBTdGVmYW4gTGVpY2h0ZXIgPHNsZUBjYW1saW5lLmNvbT4KCUZpbGUgaGFuZGxlIGJ1ZyBmaXguCgoJKiBkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9sczogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIHBhcmFncmFwaCBhYm91dCBkaWZmZXJlbnQgZGxsIHZlcnNpb25zIGFuZCBzdHJ1Y3R1cmUgc2l6ZXMuCgoJKiBpbmNsdWRlL2NvbW1jdHJsLmg6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBtaXNzaW5nIFRPT0xJTkZPIHN0cnVjdHVyZS4KCgkqIG11bHRpbWVkaWEvbW1zeXN0ZW0uYzogQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJRml4ZWQgYSBoZWFwIGJ1Zy4KCgkqIGxvYWRlci90YXNrLmMsIG1lbW9yeS9sb2NhbC5jLCBtZW1vcnkvc2VsZWN0b3IuYywgbWlzYy9jYWxsYmFjay5jLCBtc2Rvcy9kcG1pLmMsIG1zZG9zL2ludDQxLmMsIG1zZG9zL3Z4ZC5jLCBpZjE2MzIva2VybmVsLnNwZWMsIGlmMTYzMi90aHVuay5jLCBpbmNsdWRlL2NhbGxiYWNrLmgsIGluY2x1ZGUvbGR0LmgsIGluY2x1ZGUvd2luZG93cy5oOgoJQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJLSBTZXZlcmFsIGtlcm5lbC5zcGVjIHJldHVybiB0eXBlIG1pc21hdGNoIGZpeGVzCgktIFtHU11ldFNlbGVjdG9yQmFzZSBXaW4zMnMgb2Zmc2V0IHN1cHBvcnQgYnkgVWxyaWNoIFdlaWdhbmQgKHRoYW5rcyB2Lm0uICEhKQoJLSBNb3ZlIEFwcFRvV2luZS9XaW5lVG9BcHAgbWFjcm9zIGFzIFczMlNfQVBQMldJTkUgZXRjLiB0byBsZHQuaAoJLSBMb2NhbE5vdGlmeSgpIGJhc2ljIHN1cHBvcnQKCS0gRml4ZXMgZm9yIGxvY2FsIGhlYXAgaGFuZGxpbmcgd2l0aCBoZWFwIGhhbmRsZXMgY3JlYXRlZCBieSBWaXJ0dWFsKigpCgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiAtbWljcm9zb2Z0LXN5bWJvbCBlbmNvZGluZyB3YXMgbm90IHJlY29nbml6ZWQuCgoJKiB3aW5kb3dzL3dpbi5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogV0lOX1Jlc2V0UXVldWVXaW5kb3dzIHdvdWxkIHNraXAgc29tZSB3aW5kb3dzLgoKCSogdG9vbHMvYnVpbGQuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBbGxvdyByZWN1cnNpdmVseSByZWVudGVyaW5nIENBTEwzMl9MYXJnZVN0YWNrLgoKCSogaW5jbHVkZS90dHlkcnYuaCwgd2luZG93cy90dHlkcnYvLmN2c2lnbm9yZSwgd2luZG93cy90dHlkcnYvTWFrZWZpbGUuaW4sIHdpbmRvd3MvdHR5ZHJ2L2NsaXBib2FyZC5jLCB3aW5kb3dzL3R0eWRydi9ldmVudC5jLCB3aW5kb3dzL3R0eWRydi9pbml0LmMsIHdpbmRvd3MvdHR5ZHJ2L2tleWJvYXJkLmMsIHdpbmRvd3MvdHR5ZHJ2L21vdXNlLmMsIHdpbmRvd3MvdHR5ZHJ2L3duZC5jLCBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW46CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCUFkZGVkIHRoZSBuZXcgVFRZIGRyaXZlci4KCgkqIGluY2x1ZGUvY2xpcGJvYXJkLmgsIGluY2x1ZGUva2V5Ym9hcmQuaCwgaW5jbHVkZS9tZXNzYWdlLmgsIGluY2x1ZGUvd2luLmgsIGluY2x1ZGUveDExZHJ2LmgsIHdpbmRvd3MvY2xpcGJvYXJkLmMsIHdpbmRvd3MvZGVmd25kLmMsIHdpbmRvd3MvZGlucHV0LmMsIHdpbmRvd3MvZGlzcGxheS5jLCB3aW5kb3dzL2V2ZW50LmMsIHdpbmRvd3MvZm9jdXMuYywgd2luZG93cy9rZXlib2FyZC5jLCB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9ub25jbGllbnQuYywgd2luZG93cy93aW4uYywgd2luZG93cy93aW5wb3MuYywgd2luZG93cy94MTFkcnYvTWFrZWZpbGUuaW4sIHdpbmRvd3MveDExZHJ2L2NsaXBib2FyZC5jLCB3aW5kb3dzL3gxMWRydi9ldmVudC5jLCB3aW5kb3dzL3gxMWRydi9pbml0LmMsIHdpbmRvd3MveDExZHJ2L2tleWJvYXJkLmMsIHdpbmRvd3MveDExZHJ2L21vdXNlLmMsIHdpbmRvd3MveDExZHJ2L3duZC5jOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglNb3ZlZCBtb3JlIGNvZGUgdG8gdGhlIFgxMSBkcml2ZXIuCgpUaHUgRGVjICAzIDE2OjI5OjU2IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtc2Rvcy9pbnQxMC5jLCBtc2Rvcy9pbnQxNi5jLCBtc2Rvcy9pbnQyMS5jLCBtc2Rvcy9pbnQyOS5jOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglDYWxsIHRoZSBuZXcgY29uc29sZSBkcml2ZXIgZm9yIHNvbWUgcm91dGluZXMuIFRoaXMgaXMgbm90IGNvbXBsZXRlbHkKCWRvbmUgeWV0IGFuZCBtb3JlIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgoKV2VkIERlYyAgMiAxOTo1ODowOSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogY29uZmlndXJlLmluLCBjb25zb2xlLy5jdnNpZ25vcmUsIGNvbnNvbGUvTWFrZWZpbGUuaW4sIGNvbnNvbGUvZ2VuZXJpYy5jLCBjb25zb2xlL2ludGVyZmFjZS5jLCBjb25zb2xlL25jdXJzZXMuYywgY29uc29sZS90dHkuYywgaW5jbHVkZS9hY2NvbmZpZy5oLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL2NvbnNvbGUuaCwgaW5jbHVkZS93aW5udC5oLCBsb2FkZXIvbWFpbi5jLCBtaXNjL21haW4uYywgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZToKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJQWRkZWQgY29uc29sZSBzdXBwb3J0LgoKCSogZ3JhcGhpY3MveDExZHJ2L29lbWJpdG1hcC5jLCBpbmNsdWRlL2JpdG1hcC5oLCBpbmNsdWRlL2dkaS5oLCBpbmNsdWRlL3gxMWRydi5oLCBsb2FkZXIvbWFpbi5jLCBvYmplY3RzL0F0dGljL29lbWJpdG1hcC5jLCBvYmplY3RzL01ha2VmaWxlLmluLCBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2N1cnNvcmljb24uYywgZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jLCBncmFwaGljcy9wc2Rydi9pbml0LmMsIGdyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuYywgZ3JhcGhpY3Mvd2luMTZkcnYvcGVuLmMsIGdyYXBoaWNzL3gxMWRydi9NYWtlZmlsZS5pbiwgZ3JhcGhpY3MveDExZHJ2L2luaXQuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJTW92ZSBPRU0gcmVzb3VyY2VzIHRvIHRoZSB4MTFkcnYuCgoJKiBmaWxlcy9kb3NfZnMuYzogQWxleGFuZGVyIExhcnNzb24gPGFsbGFAbHlzYXRvci5saXUuc2U+CglPcGVuaW5nIGEgZmlsZSBpbiBhIGRpcmVjdG9yeSB3aGljaCBkb2Vzbid0IGV4aXN0IHJldHVybnMKCUVSUk9SX0ZJTEVfTk9UX0ZPVU5EIGluc3RlYWQgb2YgRVJST1JfUEFUSF9OT1RfRk9VTkQuCgoJKiBtZW1vcnkvYXRvbS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUhhbmRsZSBhdG9tcyAiIyBub24gbnVtYmVyIiAob3JhY2xlIGNsaWVudCkuCgpUdWUgRGVjICAxIDE2OjIzOjE5IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpZjE2MzIva2VybmVsLnNwZWMsIG1pc2MvZXJyb3IuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJUmVuYW1lZCBLRVJORUwuMzI3IHRvIEhhbmRsZVBhcmFtRXJyb3IgKGFzIGluICdVbmRvYy4gV2luZG93cycpLgoJRml4ZWQgd3Jvbmcgb3JkaW5hbHMvcHJvdG90eXBlIGZvciBNYXBQcm9jZXNzSGFuZGxlL0dldE1vZHVsZUZpbGVOYW1lMzIuCglBZGRlZCBuYW1lcyBmb3Igc29tZSB1bmRvY3VtZW50ZWQgZXhwb3J0cy4KCgkqIG1lbW9yeS9nbG9iYWwuYywgaWYxNjMyL3RodW5rLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIEdsb2JhbENoYW5nZUxvY2tDb3VudCAoS0VSTkVMLjM2NSkuCgoJKiBpZjE2MzIvdG9vbGhlbHAuc3BlYywgaW5jbHVkZS90b29saGVscC5oLCBtZW1vcnkvaGVhcC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBMb2NhbDMySW5mbywgc3R1YnMgZm9yIExvY2FsMzJGaXJzdC9OZXh0IChLRVJORUwuNDQ0LTQ0NikuCgoJKiBpZjE2MzIvZ2RpLnNwZWMsIG9iamVjdHMvZ2Rpb2JqLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIEdkaUZyZWVSZXNvdXJjZXMgKEdESS42MDkpLgoKCSogaW5jbHVkZS9kc291bmQuaCwgbXVsdGltZWRpYS9kc291bmQuYzoKCVJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglGaXhlZCA4LWJpdCBXQVYgZm9ybWF0IGhhbmRsaW5nIChpdCBpcyB1bnNpZ25lZCBkYXRhKS4KCUZpeGVkIG9mZi1ieS1vbmUgY2hlY2tzIGZvciBidWZmZXIgd3JhcC4KCUluY3JlbWVudCByZWYgY291bnQgZm9yIHByaW1hcnkgYnVmZmVyIGluIENyZWF0ZVNvdW5kQnVmZmVyKCkuCglBZGRlZCBEU0JQTl9PRkZTRVRTVE9QIHN1cHBvcnQgdG8gcG9zaXRpb24gbm90aWZpY2F0aW9uIGNvZGUuCglMb3RzIG9mIG1pbm9yIHBhcmFtZXRlciB2YWxpZGF0aW9uIGNoZWNrcy4KCVN0dWJzIGZvcjogSURpcmVjdFNvdW5kX2luaXRpYWxpemUoKSwgSURpcmVjdFNvdW5kX0NvbXBhY3QoKSwKCWFuZCBJRGlyZWN0U291bmRfR2V0U3BlYWtlckNvbmZpZygpLgoJRml4ZWQgZnJlcSBzaGlmdGluZyB3aXRoIDE2LWJpdCBkYXRhIHByb2JsZW0sIGZpeGVkIDhiaXQ8LT4xNmJpdAoJY29udmVyc2lvbi4KCUxvdHMgb2YgdGhyZWFkIGxvY2tpbmcgZm9yIERpcmVjdFNvdW5kIGJ1ZmZlcnMuCglEZWFsbG9jIHByaW1hcnkgYnVmZmVyIHdoZW4gZHNvdW5kIGlzIGRlYWxsb2NhdGVkLgoKCSogaW5jbHVkZS93aW50eXBlcy5oOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQWRkZWQgdGhlIFRFWFQoKSBhbmQgTUFLRUxSRVNVTFQoKSBkZWZpbml0aW9ucy4KCgkqIHdpbmRvd3MvcXVldWUuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTbWFsbCBjaGFuZ2UuCgoJKiBNYWtlZmlsZS5pbjogSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJUmV2ZXJ0IG1pc2d1aWRlZCBjaGFuZ2UgdG8gaW5zdGFsbF9saWIgdGhhdCBicm9rZSAtZGlzYWJsZS1saWIKCWNvbmZpZ3VyZSBvcHRpb24uCgoJKiBtaXNjL21haW4uYywgaW5jbHVkZS93aW5kb3dzLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBwYXJhbWV0ZXIgU1BJX0dFVERSQUdGVUxMV0lORE9XLgoJT25lIG1pc3NpbmcgYnJlYWsgaW4gU1BJX0dFVERSQUdGVUxMV0lORE9XLgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYywgcmVsYXkzMi9zaGVsbDMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBmdW5jdGlvbnMgSUxHbG9iYWxDbG9uZS9JTEdsb2JhbEZyZWUuCgoJKiBkb2N1bWVudGF0aW9uL3ByaW50aW5nOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglBZGQgYSBub3RlIGFib3V0IFdpblByaW50ZXJzLgoKCSogcmVsYXkzMi9udGRsbC5zcGVjLCByZWxheTMyL29sZTMyLnNwZWMsIHJlbGF5MzIvdXNlcjMyLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIHNvbWUgc3R1YnMsIHNvbWUgcHRyLT5zdHIgY29udmVyc2lvbnMuCgoJKiBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2RkcmF3LmgsIHJlbGF5MzIvZGRyYXcuc3BlYzoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSBhZGRlZCBkZWZpbml0aW9uIG9mIERpcmVjdERyYXdDcmVhdGVDbGlwcGVyLgoJLSBtb3JlIHZlcnNhdGlsZSBzdXBwb3J0IG9mIHN1cmZhY2VzIC8gYmV0dGVyIHN1cmZhY2UgZGVzY3JpcHRpb24gc3VwcG9ydC4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NoZWxscGF0aC5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBpbmNsdWRlL3NoZWxsLmgsIHJlbGF5MzIvc2hlbGwzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCB3cm9uZyBwYXJhbWV0ZXIgY291bnQgZm9yIFNIQ2hhbmdlTm90aWZ5RGVyZWdpc3RlciwgIFNIRnJlZVVudXNlZExpYnJhcmllcy4KCU5ldyBmdW5jdGlvbnMgUGFyc2VGaWVsZCwgR2V0L1NldEluc3RhbmNlRXhwbG9yZXIoKSwgUGF0aElzVU5DLCBQYXRoSXNSZWxhdGl2ZS4KCVN0dWJzIFNIV2FpdEZvckZpbGVUb09wZW4sIFBhdGhGaW5kT25QYXRoLgoKCSogcmVsYXkzMi91c2VyMzIuc3BlYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTbWFsbCBjaGFuZ2VzIHRvIHByaW50IHRoZSBzdHJpbmdzIGluIHRoZSByZWxheS10cmFjZS4KCgkqIHdpbmRvd3MvY2xhc3MuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglUaGUgY2xhc3MgbmFtZSBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBnZXRwdHIuCgoJKiBtdWx0aW1lZGlhL21jaW1pZGkuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCBtZW1vcnkvc3RhdHVzIHJlY292ZXJ5IHdoZW4gZXJyb3Igb2NjdXJlZCBpbiBNSURJX21jaU9wZW4uCglGaXhlZCBzdXBwb3J0IGZvciBSTUlEIGZpbGVzIGluIE1JRElfbWNpT3Blbi4KCUZpeGVkIGJ1ZyBmb3IgcGxheWluZyBNSURJIGZpbGVzIHdpdGggdGVtcG8gY2hhbmdlcy4gU291bmQgb3V0cHV0IGlzCglub3cgY29ycmVjdCwgYnV0IGxlbmd0aCBvZiB0cmFja3MgKGFuZCB0aGVyZWZvcmUgb2Ygd2hvbGUgZmlsZSkgaXMgbm90Cgljb3JyZWN0LgoJQ2hhbmdlZCBlcnJvciB2YWx1ZXMgKElOVEVSTkFMID0+IElOVkFMSURfRklMRSkgd2hlbiBmaWxlIGNhbm5vdCBiZSByZWFkLgoKCSogbXVsdGltZWRpYS9tY2l3YXZlLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRml4ZWQgbWVtb3J5L3N0YXR1cyByZWNvdmVyeSB3aGVuIGVycm9yIG9jY3VyZWQgaW4gV0FWRV9tY2lPcGVuLgoJQ2hhbmdlZCBlcnJvciB2YWx1ZXMgKElOVEVSTkFMID0+IElOVkFMSURfRklMRSkgd2hlbiBmaWxlIGNhbm5vdAoJYmUgcmVhZC4KCgkqIG11bHRpbWVkaWEvbXN2aWRlby5jLCByZWxheTMyL21zdmZ3MzIuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YnMgZm9yIE1DSVduZENyZWF0ZVtBfFddLgoKCSogbWlzYy92ZXIuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglWZXJRdWVyeVZhbHVlLCBidWdmaXg6IHdlIGNhbnQgY29udmVydCBiaW5hcnkgZGF0YSB3aXRoCglIRUFQX3N0cmR1cFd0b0EgKFxWYXJGaWxlSW5mb1xUcmFuc2xhdGlvbikuCgpNb24gTm92IDMwIDE3OjQxOjE3IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiByZWxheTMyL2FkdmFwaTMyLnNwZWMsIHdpbjMyL2FkdmFwaS5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTdHVicyBmb3IgRW51bVNlcnZpY2VTdGF0dXMzMiwgc21hbGwgY2hhbmdlcy4KCgkqIG9iamVjdHMvY3Vyc29yaWNvbi5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUxvYWQgbm93IHRoZSBmaXJzdCBpY29uIGZyb20gdGhlICouYW5pIGZpbGUgaW5zdGVhZCBvZiBjcmFzaGluZy4KCgkqIG1pc2NlbXUvbWFpbi5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeCB3YXJuaW5ncyBpbiBtaXNjZW11L21haW4uYy4KCgkqIGluY2x1ZGUvd2luZG93cy5oOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJLSBhZGRlZCBzb21lIGRlZmluZXMgYXJvdW5kIHRoZSBDb21tUG9ydCAoUFVSR0VfWFhYIGFuZCBNU19YWFhfT04pCgktIGFkZGVkIHRoZSBETEdURU1QTEFURSBhbmQgRExHSVRFTVRFTVBMQVRFIHN0cnVjdHVyZXMKCS0gYWRkZWQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZm9yIFN0YXJ0UGFnZSxFbmRQYWdlLEdldENvbW1NYXNrLAoJCUdldENvbW1Nb2RlbVN0YXR1cyBhbmQgUHVyZ0NvbW0sV2FpdENvbW1FdmVudC4KCgkqIHdpbmRvd3MvZGVmd25kLmM6IFBhdWwgUXVpbm4gPFBhdWxRQGNvcmVsLmNvbT4KCUZpeGVkIGFjdGl2YXRpb24vRm9jdXMgbWVzc2FnZSBvcmRlciBwcm9ibGVtIHdoZW4gY3JlYXRpbmcgYSBuZXcgSFdORC4KCgkqIHdpbmRvd3Mvd2lucG9zLmMsIGlmMTYzMi91c2VyLnNwZWMsIGluY2x1ZGUvd2luZG93cy5oLCByZWxheTMyL3VzZXIzMi5zcGVjOgoJUGF1bCBRdWlubiA8UGF1bFFAY29yZWwuY29tPgoJSW1wbGVtZW50YXRpb24gb2YgQ2hpbGRXaW5kb3dGcm9tUG9pbnRFeCBmdW5jdGlvbnMuCgoJKiBtaXNjL3JlZ2lzdHJ5LmM6IEdhdnJpZWwgU3RhdGUgPGdhdnJpZWxzQGNvcmVsLmNvbT4KCUZpeGVkIHJlZ2lzdHJ5IHF1ZXJ5IGVycm9yIHZhbHVlOiBub3cgcmV0dXJucyBFUlJPUl9GSUxFX05PVF9GT1VORC4KCgkqIG9iamVjdHMvYml0bWFwLmMsIG9iamVjdHMvY3Vyc29yaWNvbi5jLCBvYmplY3RzL2RpYi5jLCBvYmplY3RzL3BhbGV0dGUuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJR2V0U3lzdGVtUGFsZXR0ZUVudHJpZXMgcmV0dXJucyBwYWxldHRlIHNpemUgaWYgZW50cmllcz09TlVMTC4KCVVzZSB0aGlzIGluc3RlYWQgb2YgQ09MT1JfR2V0U3lzdGVtUGFsZXR0ZVNpemUuCgoJKiByZWxheTMyL2Rzb3VuZC5zcGVjLCBtdWx0aW1lZGlhL2Rzb3VuZC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglJbXBsZW1lbnRlZCBjbGFzcyBmYWN0b3J5IGZvciBkc291bmQuCgoJKiByZWxheTMyL2tlcm5lbDMyLnNwZWMsIG1pc2MvY29tbS5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJLSBmaXhlZCBhIG1pbmltYWwgZXJyb3IgaW4gR2V0Q29tbU1hc2sgZGVmaW5pdGlvbi4KCS0gYWRkcyBzdHVicyBmb3IgR2V0Q29tbU1vZGVtU3RhdHVzIGFuZCBXYWl0Q29tbUV2ZW50LgoKCSogaW5jbHVkZS94bWFsbG9jLmgsIGxpYnJhcnkvd2luZXN0dWIuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUZpeGVzIGZvciBDKysgV2luZWxpYiBjb21waWxhdGlvbi4KCgkqIG9sZS9jb21wb2JqLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQnVnZml4OiBzZWNvbmQgUmVnT3BlbktleSBzaG91bGQgdXNlIENMU0lEa2V5IGluc3RlYWQgb2YgSEtFWV9DTEFTU0VTX1JPT1QuCgpGcmkgTm92IDI3IDE2OjA2OjA4IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBCVUdTLCBkb2N1bWVudGF0aW9uL2J1Z3JlcG9ydHMsIGRvY3VtZW50YXRpb24vZGVidWdnaW5nLCBkb2N1bWVudGF0aW9uL25vLXdpbmRvd3MsIGRvY3VtZW50YXRpb24vd2luZS5tYW46CglKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglEb2N1bWVudGF0aW9uIHVwZGF0ZXMuCgoJKiBNYWtlZmlsZS5pbjogSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJRml4ZWQgJ21ha2UgaW5zdGFsbCcgdG8gcmVhbGx5IGNoZWNrIGZvciBsaWJ3aW5lLmEgYmVmb3JlIGluc3RhbGxpbmcKCWl0LgoKCSogZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9vcHRpb25zLmgsIG1pc2MvbWFpbi5jOgoJU3RlcGhlbiBDcm93bGV5IDxjcm93QGRlYmlhbi5vcmc+CglBZGRlZCBhIG5ldyBjbWRsaW5lIHN3aXRjaCB0byBkaXNhYmxlIFhGODYgREdBIEV4dGVuc2lvbnMsIC1ub2RnYS4KCgkqIGZpbGVzL2RyaXZlLmM6IEFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUltcHJvdmVkIEdldERpc2tGcmVlU3BhY2UzMkEoKS4KClRodSBOb3YgMjYgMTY6MzI6MDAgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbmRvd3Mvd2luLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJUmVtb3ZlIGluY2x1ZGVkIGNvbG9yLmguCgoJKiBsb2FkZXIvcGVfaW1hZ2UuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglSZW1vdmUgdW5uZWNlc3NhcnkgY2hlY2sgZm9yIGVudHJ5cG9pbnQgYWRkcmVzcyAodGVzdCBiaW5hcnkgd2FzCglpbmZlY3RlZCBieSBhIHZpcnVzIHdoaWNoIHVzZXMgaW52YWxpZCBQRSBsb2FkaW5nIHN0dWZmKS4KCgkqIGdyYXBoaWNzL3BhaW50aW5nLmMsIHJlbGF5MzIvZ2RpMzIuc3BlYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFkZGVkIHN0dWJzIGZvciBTdGFydHBhZ2UgYW5kIEVuZFBhZ2UuCgoJKiBpZjE2MzIvdGh1bmsuYywgb2JqZWN0cy9kYy5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglSZW1vdmVkIHNvbWUgdW5uZWNlc3NhcnkgRklYTUUgb3V0cHV0cy4KCgkqIGlmMTYzMi9rZXJuZWwuc3BlYywgbG9hZGVyL3Rhc2suYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgS0VSTkVMLjYwMiBhbmQgc3R1YiBmb3IgS0VSTkVMLjQ5MC4KCgkqIG9sZS9vbGUybmxzLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBEbyAqbm90KiB6ZXJvIG91dCBvdXRwdXQgYnVmZmVyIGluIEdldE51bWJlckZvcm1hdDMyW0FXXS4KCldlZCBOb3YgMjUgMTg6MTU6NTMgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG9sZS9ubHMvZ3JjLm5scywgb2xlL25scy9za3kubmxzLCBvbGUvbmxzL3RoYS5ubHMsIG9sZS9ubHMvdHJrLm5scywgb2xlL29sZTJubHMuYzoKCVBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgoJU21hbGwgZml4ZXMuCgoJKiBsb2FkZXIvbmUvcmVzb3VyY2UuYywgaW5jbHVkZS9tb2R1bGUuaCwgbG9hZGVyL3Jlc291cmNlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU1vdmVkIC4uLlJlc291cmNlMTYgcm91dGluZXMgdG8gbG9hZGVyL3Jlc291cmNlLmMuCglJbXBsZW1lbnRlZCBhY2Nlc3NpbmcgUEUtZmlsZSByZXNvdXJjZXMgd2l0aCAxNi1iaXQgcmVzb3VyY2Ugcm91dGluZXMuCgoJKiBpZjE2MzIva2VybmVsLnNwZWMsIGxvYWRlci9uZS9NYWtlZmlsZS5pbiwgbG9hZGVyL25lL2NvbnZlcnQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50YXRpb24gb2YgUEUtPk5FIHJlc291cmNlIGNvbnZlcnNpb24gcm91dGluZXMgKEtFUk5FTC42MTUtNjE4KS4KCgkqIGluY2x1ZGUvb2xlYXV0by5oLCBvbGUvb2xlMmRpc3AuYywgcmVsYXkzMi9vbGVhdXQzMi5zcGVjOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgMyBtZXRob2RzOiBTeXNBbGxvY1N0cmluZ0xlbigpLCBTeXNSZUFsbG9jU3RyaW5nTGVuKCkKCWFuZCBTeXNTdHJpbmdMZW4oKS4gRW5zdXJlIHRoYXQgdGhlIEJTVFIgb2JqZWN0cyB3ZXJlIGFsbG9jYXRlZAoJYWNjb3JkaW5nIHRvIHRoZSBXaW5kb3dzIGRvY3VtZW50YXRpb24uCgoJKiBkbGxzL3NoZWxsMzIvTWFrZWZpbGUuaW4sIGRsbHMvc2hlbGwzMi9waWRsLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGVsbHBhdGguYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYywgaW5jbHVkZS9zaGVsbC5oLCByZWxheTMyL3NoZWxsMzIuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTW92ZWQgZXhpc3RpbmcgcGF0aCAtIGZ1bmN0aW9ucyB0byBzaGVsbHBhdGNoLmMuCglOZXc6IFBhdGhSZW1vdmVCbGFua3MzMkF8VywgIFBhdGhNYXRjaFNwZWMzMkF8VywKCVBhdGhTZXREbGdJdGVtUGF0aDMyQXxXLgoKCSogZGxscy9zaGVsbDMyL2ZvbGRlcnMuYywgZGxscy9zaGVsbDMyL3NoZWxsbGluay5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvbGUuYywgaW5jbHVkZS9zaGxvYmouaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTW92ZWQgZXhpc3RpbmcgSVNoZWxsTGluayBjbGFzcy4gTmV3IHN0dWJzIGZvciBJU2hlbGxMaW5rVy4KCgkqIGluY2x1ZGUvYml0bWFwLmgsIGluY2x1ZGUvY29sb3IuaCwgaW5jbHVkZS9nZGkuaCwgaW5jbHVkZS94MTFkcnYuaCwgaW5jbHVkZS94MTFmb250LmgsIG1pc2MvbWFpbi5jLCBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2NvbG9yLmMsIG9iamVjdHMvZGMuYywgb2JqZWN0cy9nZGlvYmouYywgd2luZG93cy9BdHRpYy9ncmFwaGljcy5jLCB3aW5kb3dzL2RjZS5jLCB3aW5kb3dzL2Rpc3BsYXkuYywgd2luZG93cy9ldmVudC5jLCB3aW5kb3dzL2lucHV0LmMsIHdpbmRvd3MvbW91c2UuYywgd2luZG93cy9zY3JvbGwuYywgd2luZG93cy9zeXNtZXRyaWNzLmMsIHdpbmRvd3MvdXNlci5jLCBncmFwaGljcy9kZHJhdy5jLCBncmFwaGljcy9wYWludGluZy5jLCBncmFwaGljcy93aW5nLmMsIGdyYXBoaWNzL3gxMWRydi9iaXRibHQuYywgZ3JhcGhpY3MveDExZHJ2L2JpdG1hcC5jLCBncmFwaGljcy94MTFkcnYvYnJ1c2guYywgZ3JhcGhpY3MveDExZHJ2L2NsaXBwaW5nLmMsIGdyYXBoaWNzL3gxMWRydi9kaWIuYywgZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL3gxMWRydi9pbml0LmMsIGdyYXBoaWNzL3gxMWRydi9wZW4uYywgZ3JhcGhpY3MveDExZHJ2L3RleHQuYywgZ3JhcGhpY3MveDExZHJ2L3hmb250LmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVJlbW92ZSBYX0RDX0lORk8gZnJvbSBEQyBhbmQgbWFrZSBpdCBiZWhhdmUgbGlrZSBhbnkgb3RoZXIgUERFVklDRS4KCgkqIGluY2x1ZGUvbWlzY2VtdS5oLCBtc2Rvcy9kcG1pLmMsIG1zZG9zL2ludDIxLmMsIG1zZG9zL2ludDI1LmMsIG1zZG9zL2ludDI2LmMsIG1zZG9zL2ludDJmLmMsIG1zZG9zL3htcy5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDaGFuZ2VkIENUWF9TRUdfT0ZGX1RPX0xJTiB0byBhbGxvdyBsaW5lYXIgYWRkcmVzc2VzIGluIDMyLWJpdAoJcmVnaXN0ZXJzICh1c2VkIGJ5IERldmljZUlvQ29udHJvbCkuIEFkYXB0ZWQgYWxsIHVzZXJzLgoKCSogaW5jbHVkZS93aW5pb2N0bC5oLCB3aW4zMi9kZXZpY2UuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgKG1vc3QpIFZXaW4zMi5WeEQgRGV2aWNlSW9Db250cm9sIHJvdXRpbmVzLgoKVHVlIE5vdiAyNCAyMDo0NzoxNyAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS90aHJlYWQuaCwgc2NoZWR1bGVyL3RocmVhZC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IFNldCB0aGUgVEVCRl9XSU4zMiBmbGFnIGluIHRlYi5mbGFncyBmb3IgMzItYml0IHRocmVhZHMuCgoJKiBsb2FkZXIvdGFzay5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogQ2FsbCBJbml0VGhyZWFkSW5wdXQgaW4gR2V0RmFzdFF1ZXVlIHdpdGggY29ycmVjdCBwYXJhbWV0ZXIKCWZvciAzMi1iaXQgcXVldWVzLgoKCSogd2luMzIva2VybmVsMzIuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IFtRRl1UX1RodW5rIHNob3VsZCBjbGVhciBISVdPUkQoRUFYKSBvbiByZXR1cm4uCglCdWdmaXg6IGhhY2sgZm9yIHN0dXBpZCBVU0VSMzIgQ2FsbGJhY2tHbHVlTFMgcm91dGluZSBpbiBDb21tb24zMlRoa0xTLgoKCSogaWYxNjMyL3RodW5rLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBCYWQganVtcCBnZW5lcmF0ZWQgaW4gVEhVTktfQWxsb2NMU1RodW5rbGV0LgoJQnVnZml4OiBGb3Jnb3QgdG8gY29udmVydCBzZWdwdHIgaW4gQWxsb2NMU1RodW5rbGV0Q2FsbGJhY2tFeC4KCgkqIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jOiBFcmljIFdhcm5rZSA8ZXJpY0Bzbm93bW9vbi5jb20+CglEb24ndCBtYXRjaCBhZ2FpbnN0IFN5bWJvbCBvciBOaWwgZm9udHMuCgoJKiBtZW1vcnkvZ2xvYmFsLmM6IFN0ZXBoZW4gQ3Jvd2xleSA8Y3Jvd0BkZWJpYW4ub3JnPgoJUmV0dXJuIHRoZSAiYnVmZmVycyIgYW5kICJjYWNoZWQiIG1lbW9yeSBhcyBmcmVlIHNpbmNlIGl0IGlzCglkZWFsbG9jYXRlZCB3aGVuIGEgcHJvZ3JhbSBuZWVkcyBpdCBhbnl3YXkuCgoJKiB3aW5kb3dzL2RpYWxvZy5jLCBpbmNsdWRlL3dpbmRvd3MuaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQnVnZml4OiBTZXREbGdJdGVtVGV4dDMyIHJldHVybnMgQk9PTCBub3Qgdm9pZC4KCgkqIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHdpbmRvd3MvdXNlci5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3R1YnMgR2V0VXNlck9iamVjdEluZm9ybWF0aW9uQXxXLgoKCSogcmVsYXkzMi9yZWxheTM4Ni5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJlbW92ZWQgbGVmdCBvdmVyICdzaG93JyBhbmQgdXNlbGVzcyBkZWFkYmVlZiBjaGVja2luZyB3aGljaCBkb2Vzbid0Cgl3b3JrLgoKCSogbG9hZGVyL3BlX2ltYWdlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRqdXN0IGJyb2tlbiBlbnRyeXBvaW50IGFkZHJlc3Nlcy4gKHdpbjk4IG5vdGVwYWQuZXhlKQoKCSogZG9jdW1lbnRhdGlvbi9zdGF0dXMvbXVsdGltZWRpYTogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglVcGRhdGVkIGFjY29yZGluZyB0byBkZXZlbG9wbWVudC4KCgkqIGlmMTYzMi9tbXN5c3RlbS5zcGVjLCByZWxheTMyL3dpbm1tLnNwZWM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVNvbWUgbmV3IHN0dWJzIChtaWRpU3RyZWFtWFhYIGZ1bmN0aW9ucywgc29tZSBtY2kgZnVuY3Rpb25zLCBhbmQKCXNvbWUgbW1pbyBmdW5jdGlvbnMpLgoKCSogbXVsdGltZWRpYS9taWRpLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJTW92ZWQgTUNJIHBhcnQgdG8gbWNpbWlkaS5jIDsgYWRkZWQgRHJpdmVyUHJvYy4KCgkqIG11bHRpbWVkaWEvYXVkaW8uYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglNb3ZlZCBNQ0kgcGFydCB0byBtY2l3YXZlLmMgOyBhZGRlZCBzb21lIGVycm9yIGNoZWNraW5nIDsgYWRkZWQKCURyaXZlclByb2MKCgkqIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgbXVsdGltZWRpYS9NYWtlZmlsZS5pbjoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgbWNpbWlkaSBhbmQgbWNpd2F2ZS4KCgkqIG11bHRpbWVkaWEvbWNpbWlkaS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUZpeGVkIGJ1ZyBpbiBNQ0lfSU5GTyBjb21tYW5kIDsgZml4ZWQgcGF1c2UvcmVzdW1lIGNvbW1hbmRzIDsgZml4ZWQKCXNlZWsgY29tbWFuZC4KCgkqIG11bHRpbWVkaWEvbWNpd2F2ZS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVN0YXJ0aW5nIHdyaXRpbmcgTUNJIHBhcnQgOyBmaXhlZCBidWcgaW4gTUNJX0lORk8gY29tbWFuZC4KCgkqIG11bHRpbWVkaWEvbW1pby5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUFkZGVkIHNvbWUgbWlzc2luZyBzdHVicyBpbiAzMiBiaXQgcGFydC4KCgkqIG11bHRpbWVkaWEvbWNpc3RyaW5nLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJTWFkZSB1c2Ugb2YgbmV3IDE2LzMyIE1DSSBtZXNzYWdlIGhhbmRsaW5nIGluIG1tc3lzdGVtLmMuCgoJKiBpbmNsdWRlL21tc3lzdGVtLmgsIGluY2x1ZGUvbXVsdGltZWRpYS5oOgoJRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglBZGRlZCBzb21lIG5ldyBmdW5jdGlvbnMvc3RydWN0dXJlcyBkZWZpbml0aW9ucy4oSSBjb3VsZG4ndCBnZXQgYWxsCgl0aGUgbWFuaWZlc3QgY29uc3RhbnRzIHZhbHVlcyB0aGF0IE1TIHdhcyByZWZlcnJpbmcgdG8gaW4gaXRzIHNwZWNzLi4uCglpZiBzb21lb25lIGhhcyB0aGVtLi4uKQoKCSogbXVsdGltZWRpYS9tY2lhbmltLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgc29tZSBlcnJvciBjaGVja2luZyA7IG1hZGUgdXNlIG9mIG5ldyAxNi8zMiBNQ0kgbWVzc2FnZSBoYW5kbGluZwoJaW4gbW1zeXN0ZW0uYyA7IGZpeGVkIGJ1ZyBpbiBNQ0lfSU5GTyBjb21tYW5kLgoKCSogbXVsdGltZWRpYS9tY2ljZGEuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglBZGRlZCBzb21lIGVycm9yIGNoZWNraW5nIDsgbWFkZSB1c2Ugb2YgbmV3IDE2LzMyIE1DSSBtZXNzYWdlCgloYW5kbGluZyBpbiBtbXN5c3RlbS5jLgoJQWRkZWQgV2luOTUgY29tbWFuZCB0byBoYW5kbGUgY2Qtcm9tIHdpdGggYm90aCBkYXRhIGFuZCBhdWRpbyA7IGZpeGVkCglidWcgaW4gTUNJX0lORk8gY29tbWFuZCA7IHNoYWRvd2luZyBNQ0kgc3RhdHVzIGZvciBkZXZpY2VzIHRoYXQgY2FuJ3QKCWdldCBjdXJyZW50IHN0YXR1cyA7IGZpeGVkIHN0YXR1cyBub3QgYmVpbmcgdXBkYXRlZCBvbiBjZCBjaGFuZ2UuCgoJKiBtdWx0aW1lZGlhL21tc3lzdGVtLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRmFjdG9yaXplZCAxNi8zMiBiaXQgTUNJIGZ1bmN0aW9uIGJ5IHVzaW5nICBtZXNzYWdlIG1hcHBpbmcgZnJvbSAxNgoJdG8gMzIgYml0cyA7IGFkZGVkIHNvbWUgbmV3IHByb3RvdHlwZXMgbWNpU2VuZENvbW1hbmQsIG1jaVNlbmRTdHJpbmcsCgltY2koU2V0L0dldClZaWVsZFByb2MgOyBzdGFydGVkIHdyaXRpbmcgbWlkaVN0cmVhbVhYWCBmdW5jdGlvbnMgLSBub3QKCXlldCB3b3JraW5nLiBGaXhlZCBzb21lIGlzc3VlcyByZWdhcmRpbmcgYXN5bmNocm9ub3VzIE1DSSBjb21tYW5kcyA7CglmaXhlZCBNQ0lfU1lTSU5GTyBjb21tYW5kLgoKCSogcmVzb3VyY2VzL3N5c3Jlc19Gci5yYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCBzb21lIHF1aXJrcy4KClN1biBOb3YgMjIgMTg6Mjk6NTAgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGRsbHMvc2hlbGwzMi9jb250bWVudS5jLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jLCBkbGxzL3NoZWxsMzIvZm9sZGVycy5jLCBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmMsIGRsbHMvc2hlbGwzMi9waWRsLmgsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgZGxscy9zaGVsbDMyL3NobHZpZXcuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTWFueSBmaXhlcy4KCgkqIGRsbHMvc2hlbGwzMi9waWRsLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IGZ1bmN0aW9uOiBfSUxHZXRFeHRlbnNpb24uCgoJKiBkbGxzL3NoZWxsMzIvTWFrZWZpbGUuaW4sIGRsbHMvc2hlbGwzMi9jbGFzc2VzLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBmaWxlLiBIS0VZX0NMQVNTRVNfUk9PVCBoYW5kbGluZy4KCgkqIGRvY3VtZW50YXRpb24vY29tbW9uX2NvbnRyb2xzOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJVXBkYXRlZC4KCgkqIGRsbHMvY29tY3RsMzIvaGVhZGVyLmMsIGRsbHMvY29tY3RsMzIvc3RhdHVzLmMsIGRsbHMvY29tY3RsMzIvdG9vbGJhci5jLCBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvaGVhZGVyLmgsIGluY2x1ZGUvbGlzdHZpZXcuaCwgaW5jbHVkZS9vbGUyLmgsIGluY2x1ZGUvcmViYXIuaCwgaW5jbHVkZS9zdGF0dXMuaCwgaW5jbHVkZS90b29sYmFyLmgsIGluY2x1ZGUvdG9vbHRpcHMuaDoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBVbmljb2RlIHN1cHBvcnQgKGF0IGxlYXN0IHBhcnRpYWxseSkuCgoJKiBvbGUvTWFrZWZpbGUuaW4sIG9sZS9jb21wb2JqLmMsIG9sZS9vbGVvYmouYywgaW5jbHVkZS9vbGVvYmouaCwgaW5jbHVkZS9zaGxvYmouaDoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBJT2xlQWR2aXNlSG9sZXIgaW50ZXJmYWNlIChzdGlsbCBhIGR1bW15KSBhbmQgZml4ZWQKCUNyZWF0ZU9sZUFkdmlzZUhvbGRlcigpLgoKCSogZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBkbGxzL2NvbWN0bDMyL3Rvb2x0aXBzLmM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgZ2xvYmFsIHN1YmNsYXNzaW5nIGF0b20sIHVzZWQgYnkgdG9vbHRpcHMgYW5kIHVwZG93biAobm90IHlldCkuCgoJKiBkbGxzL2NvbWN0bDMyL3JlYmFyLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglJbXByb3ZlZCBsYXlvdXQgY29kZS4KCgkqIGRsbHMvY29tY3RsMzIvaW1hZ2VsaXN0LmMsIHJlbGF5MzIvY29tY3RsMzIuc3BlYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBJbWFnZUxpc3RfTG9hZEltYWdlKCkuCgoJKiBkbGxzL2NvbWN0bDMyL2NvbWJvZXguYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIENNRU1fU0VUSVRFTTMyQSBhbmQgbWVzc2FnZSBmb3J3YXJkaW5nIHRvIGNvbWJvYm94LgoKCSogb2xlL21vbmlrZXIuYywgcmVsYXkzMi9vbGUzMi5zcGVjOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIHN0dWIgZm9yIENyZWF0ZUl0ZW1Nb25pa2VyKCkuCgoJKiBkbGxzL2NvbWN0bDMyL2NvbWN0bDMydW5kb2MuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIHNvbWUgdW5kb2N1bWVudGVkIGZ1bmN0aW9uIG5hbWVzIGFuZCBpbXBsZW1lbnRlZCBEUEFfTWVyZ2UKCXBhcnRpYWxseS4KCgkqIGNvbnRyb2xzL2J1dHRvbi5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRW5hYmxlZCBkb3VibGUgY2xpY2sgZm9yIGJ1dHRvbnMuCgoJKiBpbmNsdWRlL3dpbmRvd3MuaDogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIGNvbW1hbmQgYW5kIHJldHVybiBjb25zdGFudHMgdXNlZCBieSBXTV9OT1RJRllGT1JNQVQuCgoJKiBvYmplY3RzL2JydXNoLmMsIG9iamVjdHMvZGMuYywgb2JqZWN0cy9nZGlvYmouYywgb2JqZWN0cy9wZW4uYywgd2luZG93cy9BdHRpYy9ncmFwaGljcy5jLCBncmFwaGljcy9wYWludGluZy5jLCBncmFwaGljcy94MTFkcnYvYml0Ymx0LmMsIGdyYXBoaWNzL3gxMWRydi9kaWIuYywgZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL3gxMWRydi90ZXh0LmMsIGluY2x1ZGUvZGMuaCwgaW5jbHVkZS94MTFkcnYuaDoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJTW92ZWQgRENfU2V0dXBHQyBmdW5jdGlvbnMgdG8gZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMuCgoJKiBpbmNsdWRlL29wdGlvbnMuaCwgbWlzYy9tYWluLmMsIG9sZS9vbGUybmxzLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNtYWxsIGZpeGVzIHRvIGdldCB0aGUgZGVmYXVsdCBsYW5ndWFnZSB0byBhIHNlbnNpYmxlIHZhbHVlLgoJVGhhbmtzIHRvIFBhYmxvLgoKCSogQU5OT1VOQ0UsIERFVkVMT1BFUlMtSElOVFMsIFJFQURNRSwgZG9jdW1lbnRhdGlvbi9SRUFETUUuZG9jdW1lbnRhdGlvbiwgZG9jdW1lbnRhdGlvbi9ob3ctdG8tcG9ydCwgZG9jdW1lbnRhdGlvbi93aW5lLm1hbiwgZG9jdW1lbnRhdGlvbi93aW5lLnRleGluZm86CglEb3VnbGFzIFJpZGd3YXkgPHJpZGd3YXlAd2luZWhxLmNvbT4KCU1pc2NlbGxhbmVvdXMgc21hbGwgZml4ZXMuCgoJKiBncmFwaGljcy93aW4xNmRydi9wcnRkcnYuYywgaWYxNjMyL2dkaS5zcGVjLCBpbmNsdWRlL3dpbmRvd3MuaCwgb2JqZWN0cy9tZXRhZmlsZS5jLCBvYmplY3RzL3JlZ2lvbi5jLCByZWxheTMyL2dkaTMyLnNwZWM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglBZGRlZCBXaW4xNiBpbXBsZW1lbnRhdGlvbiBmb3IgR2V0UmVnaW9uRGF0YSgpLgoKCSogb2xlL3R5cGVsaWIuYzogQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJRW5oYW5jZWQgT0FCdWlsZFZlcnNpb24oKSB0byByZXR1cm4gZGlmZmVyZW50IHZlcnNpb24gdmFsdWVzIGZvcgoJZGlmZmVyZW50IHdpbnZlcnMuCgoJKiBtc2Rvcy9pbnQyMS5jOiBBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglBZGRlZCBJTlQyMV9QYXJzZUZpbGVOYW1lSW50b0ZDQigpIGFuZCBzb21lIG90aGVyIHRoaW5ncyB0byBnZXQKCUNPTU1BTkQuQ09NIHdvcmtpbmcuCgoJKiByZWxheTMyL2tlcm5lbDMyLnNwZWM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQWRkZWQgbWlzc2luZyBlbnRyeSBmb3IgR2V0TnVtYmVyRm9ybWF0Vy4KCgkqIG9iamVjdHMvcGFsZXR0ZS5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUNoZWNraW5nIGZvciBOVUxMLXBvaW50ZXIuCgoJKiBvbGUvbmxzL2ZyYS5ubHMsIG9sZS9ubHMvZnJiLm5scywgb2xlL25scy9mcmMubmxzLCBvbGUvbmxzL2ZybC5ubHM6CglSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgoJQmV0dGVyIE9MRSBzdXBwb3J0IGluIEZyZW5jaCBsYW5ndWFnZXMuCgoJKiBsb2FkZXIvbW9kdWxlLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSW1wbGVtZW50YXRpb24gb2YgQ3JlYXRlUHJvY2VzczMyVy4KCgkqIHdpbmRvd3MvZXZlbnQuYzogRGF2aWQgTHV5ZXIgPGx1eWVyQHVjcy51d2EuZWR1LmF1PgoJUXVldWluZyBvZiBkZWZlcnJlZCBFeHBvc2UgZXZlbnRzLgoKCSogY29udHJvbHMvbGlzdGJveC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUxCX0dFVFRFWFQ6IEhhbmRsZSBwYXNzZWQgTlVMTCBidWZmZXIuCgoJKiBjb250cm9scy9jb21iby5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNCX0dFVFRFWFQ6IFVzZSBscEJ1ZmZlciBpbnN0ZWFkIG9mIGxwVGV4dCBmb3IgTEJfR0VUVEVYVDMyLCBoYW5kbGUgMAoJYnl0ZSBOVUxMIGJ1ZmZlci4KCgkqIG9sZS9ubHMvZnJzLm5scywgb2xlL25scy9za3kubmxzLCBvbGUvb2xlMm5scy5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglUdXJuIG1lZ2EgZG91YmxlIHN3aXRjaCBpbnRvIHN0YXRpYyB0YWJsZSAocmVkdWNlcyBjb21waWxlIHRpbWUpLgoKCSogQVVUSE9SUywgaW5jbHVkZS9hdXRob3JzLmg6IEFkZGVkIFJvYmVydCBSaWdncy4KCgkqIGluY2x1ZGUvZDNkLmg6IFJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglpbmNsdWRlIGRkcmF3LmgsIHF1ZXN0aW9uYWJsZSBmaXggZm9yIHF1ZXN0aW9uYWJsZSBzdHJ1Y3QvdW5pb24KCWNvbnN0cnVjdCBpbiBNUydzIEQzRFZFQ1RPUiBkZWZpbml0aW9uLgoKCSogaW5jbHVkZS9kc291bmQuaDogUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCU1vcmUgZmxhZ3MgKERpcmVjdFggNS4yKSwgRGlyZWN0U291bmQzRExpc3RlbmVyIGFuZAoJRGlyZWN0U291bmQzREJ1ZmZlciBzdHJ1Y3R1cmVzLCBpbmNsdWRlIHNvbWUgcmVxdWlyZWQgZmlsZXMKCSh3aW5kb3dzLmgsIGNvbXBvYmouaCwgYW5kIGQzZC5oKS4KCgkqIG11bHRpbWVkaWEvZHNvdW5kLmM6IFJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglEaXJlY3RTb3VuZDNETGlzdGVuZXIgYW5kIERpcmVjdFNvdW5kM0RCdWZmZXIgc3R1YnMsIG5ldyBtaXhlciBjb2RlLAoJcHJpbWFyeSBidWZmZXIgaXMgaW1wbGVtZW50ZWQgY2xvc2VyIHRvIHdoYXQgdGhlIFNESyBkb2NzIHNwZWNpZnksCglvdGhlciBTREsgZG9jdW1lbnRlZCBiZWhhdmlvdXIgZW5mb3JjZWQuIENvbXBsZXRlZCB0aGUgZGV2Y2FwcyBsaXN0LgoKCSogbWlzYy9jcnRkbGwuYywgcmVsYXkzMi9jcnRkbGwuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IHN0dWJzIHN0cmRhdGUsIHN0cnRpbWUuCgoJKiBtZW1vcnkvc2VsZWN0b3IuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiB0eXBvIGluIFNVbk1hcExTX0lQX0VCUF84IGxlYWQgdG8gc3RhY2sgY29ycnVwdGlvbi4KCgkqIG1pc2MvY29tbS5jOiBDbGlmZiBXcmlnaHQgPGNsaWZmQHNuaXBlNDQ0Lm9yZz4KCUZpeGVkIGEgbWFzayBzZXQsIGFuZCBvdGhlciBwYXJpdHkgc2V0dGluZyBidWdzIGZvciBzZXJpYWwgcG9ydHMuCgoJKiBpbmNsdWRlL3NpZ19jb250ZXh0Lmg6IFZhc3VkZXYgTXVsY2hhbmRhbmkgPHZhc3VAdGVpbC5zb2Z0Lm5ldD4KCUFkZGVkIEJTREkgc2lnY29udGV4dCBkZWZpbml0aW9ucy4KCgkqIHdpbmRvd3MvY2xhc3MuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUZpeGVkIHR5cG8uCgoJKiByZWxheTMyL3JlbGF5Mzg2LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUmVtb3ZlIG5vdyB1c2VsZXNzIFJFTEFZX1Nob3dEZWJ1Z21zZ3NSZWxheSBjaGVjay4KCgkqIGxvYWRlci9wZV9pbWFnZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURvIG5vdCByZWxvY2F0ZSB0aGUgcG9pbnRlcnMgaW4gdGhlIElNQUdFX1RIUkVBRF9MT0NBTF9TVE9SQUdFCglkaXJlY3RvcnksIGZvciB0aGV5IHNlZW0gdG8gYmUgcmVsb2NhdGVkIGJ5IHRoZSBzdGFuZGFyZCByZWxvY2F0aW5nCgltZWNoYW5pc20uIChFeHBsaWNpdGx5IGNoZWNrZWQgb25lIHByb2dyYW0gdXNpbmcgaXQpCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgaW5jbHVkZS9zaGVsbC5oOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglQYXRoQWRkQmFja3NobGFzaCwgUGF0aFJlbW92ZUJhY2tzbGFzaDogYXJndW1lbnQgaXMgbm90IGNvbnN0YW50LgoKCSogd2luZG93cy93aW4uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDaGVjayB3bmRQdHIgZm9yIE5VTEwuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUJsdEZhc3Q6IEhvbm9yIGxQaXRjaCwgTG9jay9VbmxvY2sgc3VyZmFjZXMgKHhsaWIgbmVlZHMgdW5sb2NrIHRvIGRyYXcpLgoKCSogbWlzYy9zcG9vbGVyLmMsIG1pc2MvTWFrZWZpbGUuaW4sIG1pc2NlbXUvbWFpbi5jLCBNYWtlZmlsZS5pbiwgZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jLCBsb2FkZXIvbWFpbi5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglUYWtlcyBwcmludCBzcG9vbGVyIGZ1bmN0aW9ucyBvdXQgb2Ygd2luMTZkcnYuCglBbGxvd3MgdGhlIFBvc3RTY3JpcHQgZHJpdmVyIHRvIGdvIGludG8gbGlid2luZS4KCgkqIGlmMTYzMi9nZGkuc3BlYywgb2JqZWN0cy9icnVzaC5jLCBvYmplY3RzL3BhbGV0dGUuYzoKCUlhbiBTY2htaWR0IDxpcnNtYW5AaWFnLm5ldD4KCUFkZGVkIHN0dWJzIGZvciB0d28gdW5kb2N1bWVudGVkIEdESSByb3V0aW5lcywgU2V0TWFnaWNDb2xvcnMgYW5kCglTZXRTb2xpZEJydXNoLiBUaGlzIGFsbG93cyBXaW45OCBuYXRpdmUgVVNFUiB0byBzdGFydCB1cC4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IFN0ZXBoZW4gQ3Jvd2xleSA8Y3Jvd0BkZWJpYW4ub3JnPgoJRml4ZWQgdGhlIERHQSBkZXRlY3Rpb24gY29kZSBpbiBkZHJhdy4gWW91IGRvbid0IG5lZWQgcm9vdCBhY2Nlc3MsCgloYXZpbmcgcit3IGFjY2VzcyB0byAvZGV2L21lbSBpcyBlbm91Z2guCgoJKiBkb2N1bWVudGF0aW9uL3N0YXR1cy9kaXJlY3RkcmF3LCBncmFwaGljcy9kZHJhdy5jLCBncmFwaGljcy93aW5nLmMsIGluY2x1ZGUvZGRyYXcuaDoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRGlyZWN0RHJhdyBzdGF0dXMgdXBkYXRlZC4KCVVzZSBjb29wZXJhdGl2ZSB3aW5kb3cgZm9yIGRyYXdpbmcgaW4geGxpYiBpbXBsZW1lbnRhdGlvbiBpZiBwb3NzaWJsZS4KCVNsaWdodGx5IHJlc3RydWN0dXJlZCBJRGlyZWN0RHJhd1N1cmZhY2U6OkJsdCBzbyBpdCBkb2Vzbid0IGNyYXNoLgoKCSogd2luZG93cy9rZXlib2FyZC5jOiBEYXZpZCBGYXVyZSA8RGF2aWQuRmF1cmVAaW5zYS1seW9uLmZyPgoJTWljcm8gcGF0Y2ggZm9yIEFsdEdyIGtleSBvbiBnZXJtYW4ga2V5Ym9hcmRzLgoKCSogZmlsZXMvZG9zX2ZzLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRml4ZXMgZXJyb3IgaGFuZGxpbmcgKFNldExhc3RFcnJvcigpIGFuZCByZXR1cm4gdmFsdWUpLgoKCSogb2JqZWN0cy90ZXh0LmMsIGluY2x1ZGUvd2luZG93cy5oOiBHYWVsIGRlIENoYWxlbmRhciA8Z2FlbEBsaW1zaS5mcj4KCVBhcnRpYWxseSBjb21wbGV0ZSBHZXRUZXh0Q2hhcnNldEluZm8gYW5kIGNvcnJlY3RzIHJldHVybiB2YWx1ZXMgZm9yCgl0aGlzIGZhbWlseSBvZiBmdW5jdGlvbnMuCgpTdW4gTm92IDE1IDE4OjEyOjEyIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBvbGUvY29tcG9iai5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUJ1ZyBmaXguCgoJKiBvYmplY3RzL2RpYi5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRml4ZWQgcmV0cmlldmFsIG9mIGludmFsaWQgcGFsZXR0ZSBkYXRhIGluIEdldERJQml0cygpLgoKCSogd2luZG93cy93aW5wb3MuYzogSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEB6ZWFsYW5kLm12LmNvbT4KCUFsbG93IFNXUF9ISURFV0lORE9XIHRvIGJlIGNhbGxlZCBvbiB3aW5kb3dzIHRoYXQgYXJlIGFscmVhZHkgaGlkZGVuCgl3aXRob3V0IHVubWFwcGluZyB0aGVtIGFnYWluLgoKCSogd2luZG93cy9zY3JvbGwuYzogUGltIEJvbGxlbiA8cGltQGdpbWxpLmlhZWh2Lm5sPgoJRml4ZWQgc2Nyb2xsIGJ1ZyBpbiBTY3JvbGxXaW5kb3dFeDMyIHdoaWNoIGNhdXNlZCBnYXJiYWdlIG9uIHNjcmVlbgoJb3V0c2lkZSBkZXNrdG9wIHdpbmRvdyB3aXRoIGd0d2luLmV4ZSAoRHV0Y2ggYmFua2luZyBwcm9ncmFtKS4KCgkqIGxvYWRlci9tYWluLmMsIG1lbW9yeS9hdG9tLmMsIG1pc2MvZGRlbWwuYywgd2luZG93cy9jbGFzcy5jLCB3aW5kb3dzL21lc3NhZ2UuYywgaW5jbHVkZS9BdHRpYy9hdG9tLmgsIGluY2x1ZGUvZ2xvYmFsLmg6CglTbWFsbCBhdG9tIGZpeGVzLgoKCSogb2JqZWN0cy9kaWIuYzogRGlyayBUaGllcmJhY2ggPHRoaWVyYmFjaEBtYXRoZW1hdGlrLnR1LWRhcm1zdGFkdC5kZT4KCUZpeGVkIGJ1ZyBpbiBTdHJldGNoRElCaXRzMzIgKHdyb25nIG9yaWdpbikuCgoJKiB3aW5kb3dzL3dpbnByb2MuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTbWFsbCBmaXhlcy4KCgkqIGluY2x1ZGUvZGRyYXcuaCwgaW5jbHVkZS90c194c2htLmgsIHRvb2xzL21ha2VfWDExd3JhcHBlcnMsIHRzeDExL1gxMV9jYWxscywgdHN4MTEvdHNfeHNobS5jLCBncmFwaGljcy9kZHJhdy5jOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglTb21lIGNvcnJlY3Rpb25zIHRvIHRoZSBoYW5kbGluZyBvZiBvZmYtc2NyZWVuIGJ1ZmZlcnMuCglDb3JyZWN0aW9uIHRvIHRoZSBFbnVtRGlzcGxheU1vZGVzIGZ1bmN0aW9uLgoJQWRkZWQgWFNobSBzdXBwb3J0IHRvIFhsaWIgZHJpdmVyLgoJT3BlbiBhIERpcmVjdFggd2luZG93IGV2ZW4gd2hlbiB1c2luZyB0aGUgREdBIGRyaXZlci4KCgkqIGluY2x1ZGUvc2hlbGwuaCwgaW5jbHVkZS9zaGxvYmouaCwgbWlzYy9zaGVsbC5jLCByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL01ha2VmaWxlLmluLCBkbGxzL3NoZWxsMzIvY29udG1lbnUuYywgZGxscy9zaGVsbDMyL2RhdGFvYmplY3QuYywgZGxscy9zaGVsbDMyL2ZvbGRlcnMuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglDbGVhbnVwLCBzbWFsbCBmaXhlcywgYSBmZXcgbmV3IHN0dWJzLgoKCSogZGxscy9zaGVsbDMyL3NobHZpZXcuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglIYW5kbGluZyBmb3IgbGlzdHZpZXdzdHlsZXMsIHZpZXcgbW9kZSBidXR0b25zIGluIGZpbGVkaWFsb2dzCgllbmFibGVkIGFuZCBoYW5kbGVkLgoJTmV3IGxpc3R2aWV3IGNvbHVtbnMgU2l6ZSwgVHlwZSwgTW9kaWZpZWQgZm9yIHJlcG9ydHZpZXcKCWNyZWF0ZWQgYW5kIGhhbmRsZWQuCgoJKiBkbGxzL3NoZWxsMzIvaWZfbWFjcm9zLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBmaWxlLCB3cmFwcGVyIGZvciBJU2hlbGxCcm93c2VyIGNsYXNzLgoKCSogZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgZmlsZSwgc29tZSBoZWxwZXIgZnVuY3Rpb25zIGZvciBpY29uIGNhY2hlLgoJSW1wbGVtZW50ZWQgRXh0cmFjdEljb25FeDsgbW92ZWQgU0hNYXBQSURMVG9TeXN0ZW1JbWFnZUxpc3RJbmRleCwKCVNoZWxsX0dldEltYWdlTGlzdCBpbiB0aGlzIGZpbGUuCgoJKiBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvcGlkbC5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglJbXBsZW1lbnRlZDogSUxJc0VxYWwsIElMRmluZENoaWxkLCBfSUxHZXRGaWxlRGF0ZSwgX0lMR2V0RmlsZVNpemUuCgoJKiBsb2FkZXIvbW9kdWxlLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTG9hZExpYnJhcnlFeDogc2hvdyBhIHdhcm5pbmcgd2hlbiBjYWxsZWQgd2l0aCB1bmltcGxlbWVudGVkIHBhcm0uCgoJKiBtaXNjZW11L2luc3RyLmM6IENsZWFuZWQgdXAgYSBiaXQuCgoJKiBtZW1vcnkvc2VsZWN0b3IuYywgbWlzY2VtdS9pbnN0ci5jLCB0b29scy9idWlsZC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDbGVhbiBpbnZhbGlkIHNlbGVjdG9ycyBvbiB0aGUgcG9wICV4cyBmcm9tIHRoZSBTVEFDS0ZSQU1FIGl0c2VsZgoJaW5zdGVhZCBvZiB1c2luZyBsaW5rZWQgbGlzdCBoYWNrLgoKCSogTWFrZWZpbGUuaW46IFJlbW92ZWQgZ2V0cyBtZXNzYWdlLgoKCSogb2xlL25scy90aGEubmxzOiBEYXZpZCBMdXllciA8bHV5ZXJAdWNzLnV3YS5lZHUuYXU+CglBZGRlZCBUaGFpIG5scy1yZXNvdXJjZXMuCgoJKiBvbGUvbmxzL1JFQURNRSwgb2xlL25scy9jemUubmxzLCBvbGUvbmxzL2VzZS5ubHMsIG9sZS9ubHMvZXNnLm5scywgb2xlL25scy9lc3QubmxzLCBvbGUvbmxzL2V1cS5ubHMsIG9sZS9ubHMvZm9zLm5scywgb2xlL25scy9ocnYubmxzLCBvbGUvbmxzL2h1bi5ubHMsIG9sZS9ubHMvaXNsLm5scywgb2xlL25scy9ub3IubmxzLCBvbGUvbmxzL3Bsay5ubHMsIG9sZS9ubHMvcHRnLm5scywgb2xlL25scy9yb20ubmxzLCBvbGUvbmxzL3Nsdi5ubHMsIG9sZS9ubHMvc3ZlLm5scywgb2xlL29sZTJubHMuYywgaW5jbHVkZS93aW5ubHMuaDoKCVBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgoJRGlzcGxheSB0aGUgbGFuZ3VhZ2UgaWQgZm9yICJYWFggbm90IHN1cHBvcnRlZCBmb3IgeW91ciBsYW5ndWFnZSIKCW1lc3NhZ2VzLgoJQWRkZWQgYWxsIGxhbmd1YWdlcyBhbmQgc3VibGFuZ3VhZ2VzIGZvciBsYW5ndWFnZXMgc3VwcG9ydGVkIGluCglyZXNvdXJjZXMvc3lzcmVzX1h4LgoKCSogb2xlL29sZTIuYywgcmVsYXkzMi9vbGUzMi5zcGVjOiBHYXZyaWVsIFN0YXRlIDxnYXZyaWVsc0Bjb3JlbC5jb20+CglBZGQgc3R1YnMgZm9yIEdldFJ1bm5pbmdPYmplY3RUYWJsZTMyIGFuZCBPbGVSZWdHZXRVc2VyVHlwZS4KCgkqIG9sZS9tb25pa2VyLmM6IEdhdnJpZWwgU3RhdGUgPGdhdnJpZWxzQGNvcmVsLmNvbT4KCUVuc3VyZSB0aGF0IENyZWF0ZUZpbGVNb25pa2VyIGZ1bmN0aW9ucyBkb24ndCByZXR1cm4gYSBib2d1cyBtb25pa2VyCglvYmplY3Qgb24gZmFpbHVyZS4KCgkqIGluY2x1ZGUvY2xhc3MuaCwgd2luZG93cy9jbGFzcy5jOiBHYXZyaWVsIFN0YXRlIDxnYXZyaWVsc0Bjb3JlbC5jb20+CglBZGRlZCBjb2RlIHRvIG1hbmFnZSBBc2NpaSBhbmQgV2lkZUNoYXIgY2xhc3MgbmFtZXMsIGFuZCB0byByZXR1cm4gdGhlCgluYW1lcyBpbiB0aGUgR2V0Q2xhc3NJbmZvIGZ1bmN0aW9ucy4KCgkqIGluY2x1ZGUvd2luc29jay5oOiBDb25zdGFudGluZSBTYXB1bnR6YWtpcyA8Y3NhcHVudHpAc3RhbmZvcmQuZWR1PgoJRml4IHRvIExpbnV4IElQWCBzbyBjb21waWxlcyBvbiBub24tbGludXggcGxhdGZvcm1zLgoKCSogbWlzYy9tYWluLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJT3duIFgxMSBlcnJvcmhhbmRsZXIgdG8gbG9jYXRlIFgxMSBlcnJvcnMuIFVzZWZ1bCBvbmx5IHdpdGggLXN5bmMuCgpTYXQgTm92IDE0IDE4OjU5OjMwIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL2NvbG9yLmgsIGluY2x1ZGUvaW1hZ2VobHAuaCwgaW5jbHVkZS9wYWxldHRlLmgsIG1lbW9yeS9nbG9iYWwuYywgbWlzYy9yZWdpc3RyeS5jLCB3aW5kb3dzL2RlZnduZC5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCB3YXJuaW5ncywgc29tZSBvbmx5IHZpc2libGUgd2l0aCAtV3N0cmljdC1wcm90b3R5cGVzIG9yIC1wZWRhbnRpYy4KCgkqIGluY2x1ZGUvY3Vyc29yaWNvbi5oLCBpbmNsdWRlL2Rpc3BsYXkuaCwgaW5jbHVkZS9tZXNzYWdlLmgsIG9iamVjdHMvY3Vyc29yaWNvbi5jLCB3aW5kb3dzL2Rpc3BsYXkuYywgd2luZG93cy9tb3VzZS5jLCB3aW5kb3dzL3gxMWRydi9pbml0LmMsIGlmMTYzMi9kaXNwbGF5LnNwZWM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU1vdmVkIFgxMSBtb3VzZSBjdXJzb3IgaGFuZGxpbmcgdG8gdGhlIERJU1BMQVkgZHJpdmVyLgoKCSogaWYxNjMyL3RodW5rLmMsIGluY2x1ZGUvY2FsbGJhY2suaCwgbG9hZGVyL21haW4uYywgbG9hZGVyL3Rhc2suYywgbWlzYy9jYWxsYmFjay5jLCBtaXNjZW11L21haW4uYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJU29tZSBmaXhlcyB0byBXaW5lIHN0YXJ0dXAvdGVybWluYXRpb24gc2VxdWVuY2Ugd2l0aCBuYXRpdmUgVVNFUi4KCURvIG5vdCBjYWxsIGJ1aWx0LWluIFVTRVIgc2lnbmFsIGhhbmRsZXIgd2hlbiB1c2luZyBuYXRpdmUgVVNFUi4KCgkqIGRlYnVnZ2VyL2JyZWFrLmMsIGluY2x1ZGUvZGVidWdnZXIuaCwgaW5jbHVkZS90YXNrLmg6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogLWRlYnVnIGRpZG4ndCB3b3JrIGFueW1vcmUgYWZ0ZXIgdGhlIGxhc3Qgc3RhcnR1cCBzZXF1ZW5jZSBwYXRjaC4KCgkqIG9sZS9jb21wb2JqLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBsaXN0IGluc2VydGlvbiBidWcgaW4gQ29Mb2FkTGlicmFyeSgpLgoKCSogaWYxNjMyL3dwcm9jcy5zcGVjLCBtc2Rvcy9NYWtlZmlsZS5pbiwgbXNkb3MvaW50MmYuYywgbXNkb3MvaW50NDEuYywgbXNkb3MvdnhkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkZGVkIHN0dWJzIGZvciBzZXZlcmFsIFZ4RHMgLyBpbnRlcnJ1cHRzLgoKCSogaWYxNjMyL3RodW5rLmMsIGluY2x1ZGUvY2FsbGJhY2suaCwgbWlzYy9jYWxsYmFjay5jLCBncmFwaGljcy93aW4xNmRydi9pbml0LmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVNob3VsZCBnZXQgd2luMTZkcnYgQWJvcnRQcm9jIHdvcmtpbmcuIEhvcGVmdWxseS4KCgkqIHdpbmRvd3MvaW5wdXQuYywgd2luZG93cy9rZXlib2FyZC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglNb3ZlZCBHZXRLZXlib2FyZExheW91dE5hbWUxNiB0byB3aW5kb3dzL2lucHV0LmMuCgoJKiBpbmNsdWRlL2ltYWdlaGxwLmgsIGluY2x1ZGUvd2lubnQuaCwgaW5jbHVkZS93aW50eXBlcy5oOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglNb3ZlZCBzb21lIGRlY2xhcmF0aW9ucyBmcm9tIGltYWdlaGxwLmggdG8gY29tbW9uIGluY2x1ZGUgZmlsZXMuCgoJKiByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHdpbjMyL3RocmVhZC5jOgoJUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUFkZGVkIGltcGxlbWVudGF0aW9ucyBmb3IgSW50ZXJsb2NrZWRFeGNoYW5nZUFkZCgpIGFuZAoJSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoKS4KCgkqIHdpbjMyL2NvbnNvbGUuYywgb2JqZWN0cy9kaWIuYywgb2JqZWN0cy9lbmhtZXRhZmlsZS5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglGaXhlcyBhIGZldyBvZiB0aGUgbWFueSBjb21waWxlciB3YXJuaW5ncy4KCgkqIG1pc2NlbXUvaW5zdHIuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglFbXVsYXRlICJtb3YgY3I0LGVheCIgKHRvbWJyYWlkZXIgMyBkZW1vKS4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRG8gbm90IGVudW1lcmF0ZSBEM0QgZGV2aWNlcyB3ZSBjYW4ndCBoYW5kbGUgYW55d2F5LgoJUmV0dXJuIGJpdG1hc2tzIGZvciBoaS90cnVlY29sb3IgZGVwdGhzIGluIEVudW1EaXNwbGF5TW9kZXMuCgoJKiBpZjE2MzIvc25vb3AuYywgaW5jbHVkZS9zbm9vcC5oLCByZWxheTMyL2J1aWx0aW4zMi5jLCByZWxheTMyL3Nub29wLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNwZWVkIHVwIHJlbGF5MzIsIHNub29wMTYgYW5kIHNub29wMzIgaW5jbHVkZS9leGNsdWRlcyBieSBkb2luZyB0aGVtCglqdXN0IG9uY2UgYXQgY3JlYXRpb24gdGltZS4KCgkqIHJlbGF5MzIvb2xlMzIuc3BlYywgb2xlL2NvbXBvYmouYywgb2xlL29sZTIuYzoKCVBhdmVsIFJvc2tpbiA8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+CglBZGRlZCBzdHVicyBmb3IgQ29SZXZva2VDbGFzc09iamVjdCBhbmQgT2xlU2V0Q2xpcGJvYXJkLgoKCSogd2luZG93cy93aW4uYzogUGVyIMVuZ3N0cvZtIDxwYW5nQG1pbmQubnU+CglFbnVtVGFza1dpbmRvd3MxNjogQmFzaW5nIHRoZSBzZWxlY3Rpb24gb24gYSB3aW5kb3cncyB0YXNrIGlzIG5vdCBvbmx5Cgltb3JlIHN0cmFpZ2h0Zm9yd2FyZCB0aGFuIGNvbXBhcmluZyBtZXNzYWdlIHF1ZXVlcywgaXQgYWxzbyB3b3JrcwoJYmV0dGVyIGZvciBXaW4zMiBhcHBsaWNhdGlvbnMuCgoJKiBtZW1vcnkvbG9jYWwuYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglDaGFuZ2VkIHNvbWUgb2YgdGhlIG1lc3NhZ2UgY2xhc3Nlcy4KCgkqIHdpbmRvd3Mva2V5Ym9hcmQuYzogRGF2aWQgRmF1cmUgPERhdmlkLkZhdXJlQGluc2EtbHlvbi5mcj4KCVNwZWNpYWwgY2FzZSBoYW5kbGluZyBvZiA6IFNoaWZ0ICsgYXJyb3csIHNoaWZ0ICsgaG9tZSwgLi4uCglYIHJldHVybnMgYSBjaGFyIGZvciBpdCwgYnV0IFdpbmRvd3MgZG9lc24ndC4gSWdub3JlIFggY2hhci4KCUFsc28gYWRkZWQgc29tZSBkb2N1bWVudGF0aW9uLgoKCSogaW5jbHVkZS93aW5zb2NrLmgsIG1pc2Mvd2luc29jay5jOgoJU3RlcGhlbiBMYW5nYXNlayA8dm9ybG9uQGRvZGRzLm5ldD4KCUJ1Z2ZpeGVzIGZvciBJUFggY29kZSBhbmQgcHJlbGltaW5hcnkgZ3JvdW5kd29yayBmb3Igb3RoZXIgYWRkcmVzcwoJZmFtaWx5IHN1cHBvcnQuCgoJKiBvbGUvY29tcG9iai5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCShDb0dldENsYXNzT2JqZWN0KSBvbmUgbWlzc2luZyBDQUxMQkFDSywgZXh0cmVtZWx5IHNpbXBsaWZpZWQgY2xzaWQKCWxvb2t1cCAoUmVnaXN0cnkgaXMgY2FzZSBpbnNlbnNpdGl2ZSkuCgoJKiByZWxheTMyL250ZGxsLnNwZWMsIHdpbjMyL2FkdmFwaS5jLCBkbGxzL250ZGxsL3J0bC5jLCByZWxheTMyL2FkdmFwaTMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN0dWJzOiBTZXRTZXJ2aWNlU3RhdHVzLCBSZWdpc3RlclNlcnZpY2VDdHJsSGFuZGxlckEvVywKCVN0YXJ0U2VydmljZUN0cmxEaXNwYXRjaGVyMzJBL1csIFJ0bFN5c3RlbVRpbWVUb0xvY2FsVGltZSwKCVJ0bFRpbWVUb1RpbWVGaWVsZHMuCgoJKiBpbmNsdWRlL3dpbmRvd3MuaCwgb2xlL29sZTJubHMuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YiBmb3IgR2V0TnVtYmVyRm9ybWF0MzJXLgoKCSogbWlzYy9jcnRkbGwuYzogRGF2aWQgQS4gQ3V0aGJlcnQgPGRhY3V0QGVjZS5jbXUuZWR1PgoJZ2V0cygpIGZpeGVzLgoKCSogb2xlL25scy9ydXMubmxzOiBBbGV4YW5kZXIgVi4gTHVreWFub3YgPGxhdkBsb25nLnlhci5ydT4KCUZpeCBTQ09VTlRSWSwgU05BVElWRUNUUllOQU1FLCBTQUJCUkVWREFZTkFNRTM7IGNoYW5nZSBzb21lIFNNT05USE5BTUUqCgl0byBiZSBpbiBub21pbmF0aXZlIGNhc2UuCgoJKiB3aW5kb3dzL3F1ZXVlLmM6IFBlciDFbmdzdHL2bSA8cGFuZ0BtaW5kLm51PgoJRml4ZWQgU2V0TWVzc2FnZVF1ZXVlMzIgdG8gcmV0dXJuIEZBTFNFLCBub3QgVFJVRSwgd2hlbiBjYWxsZWQgd2l0aAoJYW4gaW52YWxpZCBzaXplIHBhcmFtZXRlci4KCgkqIG11bHRpbWVkaWEvZHNvdW5kLmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQWRkZWQgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBvZiBHZXRDYXBzLCBjaGFuZ2VkIFBsYXkgYW5kIFN0b3AgaGFuZGxpbmcKCW9mIHBvc2l0aW9ucyBpbmRleGVzLCBzdXBwcmVzc2VkIHdhcm5pbmdzLgoKCSogbWVtb3J5L2xvY2FsLmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQ29ycmVjdGVkIGJ1ZyBpbiBUUkFDRSBmdW5jdGlvbi4KCgkqIEFVVEhPUlMsIGdyYXBoaWNzL2RkcmF3LmMsIGluY2x1ZGUvYXV0aG9ycy5oLCBpbmNsdWRlL2RkcmF3Lmg6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUNvcnJlY3RlZCBidWcgaW4gRGlyZWN0RHJhd1N1cmZhY2UgY3JlYXRpb24gYW5kIGhhbmRsaW5nIGZvciBkcml2ZXIKCWJhc2VkIHVwb24gWGxpbGIuCgoJKiB3aW5kb3dzL2RpbnB1dC5jOiBMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCVdpbmUga2V5Ym9hcmQgYW5kIG1vdXNlIGhhdmUgbm93IHRoZWlyIG93biBVSURzLgoKCSogb2JqZWN0cy9icnVzaC5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeCBhbGxvY2F0aW9uIHNpemUgaW4gQ3JlYXRlRElCUGF0dGVybkJydXNoKi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE5vdiAgOCAxNjo0NDo0MSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luZG93cy9kaWFsb2cuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglGaXhlZCBrZXlzdHJva2UgYWNjZWxlcmF0b3JzIGluIGRpYWxvZ3Mgd2hpY2ggaGF2ZSBjb250cm9scyBjb250YWluaW5nCglvdGhlciBjb250cm9scyBhcyBjaGlsZCB3aW5kb3dzLgoKCSogaW5jbHVkZS93aW5wcm9jLmgsIG1pc2MvY29tbWRsZy5jLCB3aW5kb3dzL2hvb2suYywgd2luZG93cy93aW5wcm9jLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVzOiBMQl8vQ0JfL0VNXyBtZXNzYWdlcyBmb3IgZ2V0dGluZy9zZXR0aW5nIHRleHQgYW5kIGEgYnVnIGluCgkxNi0+MzIgYml0IGNvbnZlcnNpb24uCgoJKiBvYmplY3RzL2RpYi5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVByZXZlbnQgQ3JlYXRlRElCU2VjdGlvbiBmcm9tIHNlZyBmYXVsdGluZyB3aGVuIG9uZSBkaW1lbnNpb24gb2YKCXNlY3Rpb24gaXMgMC4KCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL3dpbnNvY2suaCwgbWlzYy93aW5zb2NrLmM6CglTdGVwaGVuIExhbmdhc2VrIDx2b3Jsb25AZG9kZHMubmV0PgoJU3VwcG9ydCBmb3IgSVBYIG5ldHdvcmtpbmcgdmlhIHdpbnNvY2sgdW5kZXIgTGludXguCgoJKiByZWxheTMyL2dkaTMyLnNwZWMsIGdyYXBoaWNzL3BhaW50aW5nLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCBhIHN0dWIgZm9yIFN0YXJ0RG9jQSBhbmQgRW5kRG9jLgoKCSogcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCBzY2hlZHVsZXIvcHJvY2Vzcy5jLCB3aW4zMi9jb25zb2xlLmM6CglKYW1lcyBTdXRoZXJsYW5kIDxKYW1lc1N1dGhlcmxhbmRAZ214LmRlPgoJTW9yZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2V0Q3RybEhhbmRsZXIoKSBmdW5jdGlvbiAoYW5kIHRoZQoJcmVsYXRlZCBjb25zb2xlIGZ1bmN0aW9ucykuCgoJKiBvYmplY3RzL2JydXNoLmMsIHJlbGF5MzIvZ2RpMzIuc3BlYzogSmVmZiBKb2hhbm4gPGpqb2hhbm5Aa2l2YS5uZXQ+CglBZGRlZCBDcmVhdGVESUJQYXR0ZXJuQnJ1c2hQdCAoR0RJMzIuMzUpIHdpdGggbWlub3IgZG9jdW1lbnRhdGlvbgoJdXBkYXRlcy4KCgkqIGdyYXBoaWNzL3ZnYS5jLCBpbmNsdWRlL3ZnYS5oLCBtc2Rvcy9pb3BvcnRzLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVNpbXVsYXRlIHRoZSBWR0EgdmVydGljYWwgcmVmcmVzaC4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQWRkZWQgc3VwcG9ydCBvZiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHJlY3RhbmdsZXMgaW4gQmxpdCBmdW5jdGlvbi4KCgkqIGluY2x1ZGUvZGlucHV0LmgsIHdpbmRvd3MvZGlucHV0LmM6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUFkZGVkIGRldmljZSB0eXBlIGNvbnN0YW50cyBhbmQgdXNlZCB0aGVtIGluIGRldmljZSBlbnVtZXJhdGlvbgoJZnVuY3Rpb24uCgoJKiBtaXNjL3JlZ2lzdHJ5LmM6IFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFQSSBkb2N1bWVudGF0aW9uIHNheXMgdGhhdCBSZWdFbnVtS2V5RXgsIFJlZ0VudW1WYWx1ZSBhbmQKCVJlZ1F1ZXJ5SW5mb0tleSB0YWtlcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVycyBhcyBjaGFyYWN0ZXJzLgoKCSogb2xlL2NvbXBvYmouYzogQWRkZWQgbWlzc2luZyAjaW5jbHVkZSAiY29uZmlnLmgiCgoJKiBBVVRIT1JTLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9hdXRob3JzLmgsIGluY2x1ZGUvY29uZmlnLmguaW4sIG9sZS9jb21wb2JqLmM6CglKdXN0aW4gQnJhZGZvcmQgPGp1c3RpbkB1a2Fucy5lZHU+CglSZXBsYWNlcyBDb0NyZWF0ZUd1aWQgc3R1YiB3aXRoIGFuIGltcGxlbWVudGF0aW9uIG9mIERDRSdzIFVVSUQKCXNwZWNpZmljYXRpb24uIEFsc28gcmVtb3ZlcyBzb21lIHVubmVjZXNzYXJ5IGNvZGUgZnJvbSBTdHJpbmdGcm9tQ0xTSUQuCgoJKiBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbnR5cGVzLmg6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCBhbiBleHRlcm4gIkMiIHNhZmVndWFyZC4KCgkqIGluY2x1ZGUvY29tbWRsZy5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgd2luZG93cy9pbnB1dC5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJLSBhZGRzIEdldEV4aXRDb2RlUHJvY2VzcwoJLSBjb3JyZWN0cyB0aGUgcmV0dXJuLXR5cGUgb2YgR2V0S2V5U3RhdGUKCS0gY29ycmVjdHMgdGhlIHdpbmVsaWIgZGVmaW5pdGlvbiBvZiBJc0RpYWxvZ01lc3NhZ2UKCS0gYWRkcyB3aW5lbGliIGRlZmluaXRpb25zIGZvciBQcmludERsZwoKCSogb2JqZWN0cy9jbGlwcGluZy5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJRXh0U2VsZWN0Q2xpcFJnbiBmaXg6IFJHTl9ESUZGIGRpZCBub3Qgd29yay4KCgkqIG9iamVjdHMvY3Vyc29yaWNvbi5jLCB3aW5kb3dzL2V2ZW50LmMsIHdpbmRvd3MvbWVzc2FnZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGFwdGVkIHRvIG5ldyBpbnB1dCBldmVudCBoYW5kbGluZy4KCgkqIGlmMTYzMi90aHVuay5jLCBpZjE2MzIvdXNlci5zcGVjLCBpbmNsdWRlL2lucHV0LmgsIGluY2x1ZGUvd2luZG93cy5oLCByZWxheTMyL3VzZXIzMi5zcGVjLCB3aW5kb3dzL01ha2VmaWxlLmluLCB3aW5kb3dzL2lucHV0LmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVVTRVItc2lkZSBwYXJ0IG9mIGlucHV0IGV2ZW50IGhhbmRsaW5nOiBjb250YWlucyBpbXBsZW1lbnRhdGlvbiBvZgoJa2V5YmRfZXZlbnQgYW5kIG1vdXNlX2V2ZW50LCBhbmQgVVNFUi1yZWxhdGVkIGNvZGUgcmVtb3ZlZCBmcm9tCgl3aW5kb3dzL2V2ZW50LmMgYW5kIHdpbmRvd3Mva2V5Ym9hcmQuYy4KCgkqIHdpbmRvd3MvZGlzcGxheS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglTdHVicyBmb3IgRElTUExBWS5EUlYgcmVtb3ZlZCBmcm9tIGtleWJvYXJkLmMuCgoJKiBpZjE2MzIvbW91c2Uuc3BlYywgaW5jbHVkZS9tb3VzZS5oLCB3aW5kb3dzL21vdXNlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGF0aW9uIG9mIE1PVVNFLkRSViAoY29udGFpbnMgc29tZSBjb2RlIHRha2VuIGZyb20KCXdpbmRvd3MvZXZlbnQuYykuCgoJKiBpZjE2MzIva2V5Ym9hcmQuc3BlYywgaW5jbHVkZS9rZXlib2FyZC5oLCB3aW5kb3dzL2tleWJvYXJkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGF0aW9uIG9mIEtFWUJPQVJELkRSViAoY29kZSBtb3N0bHkgdGFrZW4gZnJvbSBwcmV2aW91cwoJd2luZG93cy9rZXlib2FyZC5jKS4KCgkqIGxvYWRlci9tYWluLmMsIGxvYWRlci90YXNrLmMsIG1pc2NlbXUvbWFpbi5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IHJlYWxseSAqZG8qIHN3aXRjaCB0byB0aGUgaW5pdGlhbCB0YXNrJ3Mgc3RhY2suCglDYWxsTGFyZ2VTdGFjayBtZWNoYW5pc20gcmUtZW5hYmxlZC4KCgkqIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaDoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglOZXcgRmlsZXMuIEFkZGVkICdkYXRlIGFuZCB0aW1lIHBpY2tlcicgYW5kICdtb250aCBjYWxlbmRhcicgY29udHJvbAoJZHVtbWllcy4gVGhleSBhcmUgdXNlZCBieSBPdXRsb29rIEV4cHJlc3MuCgoJKiBvbGUvb2xlMi5jLCByZWxheTMyL29sZTMyLnNwZWM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgc3R1YiBmb3IgQ3JlYXRlQmluZEN0eCgpIGFuZCBhZGRlZCBtaXNzaW5nIENvR2V0Q2xhc3NPYmplY3QoKQoJdG8gKi5zcGVjIGZpbGUuIE1ha2VzIEludGVybmV0IEV4cGxvcmVyIDQuMDEgaGFwcHkgOy0pCgoJKiBkbGxzL2NvbWN0bDMyL3BhZ2VyLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglMaXR0bGUgaW1wcm92ZW1lbnQuCgoJKiBkbGxzL2NvbWN0bDMyL2xpc3R2aWV3LmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBwcmVsaW1pbmFyeSBoaXQgdGVzdGluZy4gTWFrZXMgcmVnZWRpdC5leGUgaGFwcHkgOy0pCgoJKiBkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9scywgZGxscy9jb21jdGwzMi9pbWFnZWxpc3QuYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglJbXByb3ZlZCBkb2N1bWVudGF0aW9uIGFuZCBmaXhlZCB0eXBvcy4KCgkqIGRsbHMvY29tY3RsMzIvY29tbWN0cmwuYywgcmVsYXkzMi9jb21jdGwzMi5zcGVjOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIERyYXdTdGF0dXNUZXh0MzJBVygpIGFuZCBDcmVhdGVTdGF0dXNXaW5kb3czMkFXKCkuCgoJKiBkbGxzL2NvbWN0bDMyL3JlYmFyLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglJbXByb3ZlZCBkaXNwbGF5IGFuZCBsYXlvdXQgY29kZS4KCgkqIGRsbHMvY29tY3RsMzIvTWFrZWZpbGUuaW4sIGRsbHMvY29tY3RsMzIvZGF0ZXRpbWUuYywgZGxscy9jb21jdGwzMi9tb250aGNhbC5jLCBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvZGF0ZXRpbWUuaCwgaW5jbHVkZS9tb250aGNhbC5oOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCU5ldyBGaWxlcy4gQWRkZWQgJ2RhdGUgYW5kIHRpbWUgcGlja2VyJyBhbmQgJ21vbnRoIGNhbGVuZGFyJyBjb250cm9sCglkdW1taWVzLiBUaGV5IGFyZSB1c2VkIGJ5IE91dGxvb2sgRXhwcmVzcy4KClNhdCBOb3YgIDcgMTI6NTY6MzIgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG9iamVjdHMvZW5obWV0YWZpbGUuYywgcmVsYXkzMi9nZGkzMi5zcGVjLCBpbmNsdWRlL3dpbmRvd3MuaDoKCUNoYXJsZXMgU3VwcmluIDxjc3VwcmluQGx5bnguZGFjLm5ldS5lZHU+CglBZGRlZCBzdHVicyBmb3IgU2V0V2luTWV0YUZpbGVCaXRzIGFuZCBHZXRFbmhNZXRhRmlsZVBhbGV0dGVFbnRyaWVzLgoKCSogZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVN0b3AgWDExRFJWX1JvdW5kUmVjdCBjYWxsaW5nIFhEcmF3QXJjIHdpdGggLXZlIHdpZHRoL2hlaWdodCBwYXJhbXMKCXdoaWNoIGl0IGRpZCBpZiBlaXRoZXIgZWxsaXBzZSBkaW1lbnNpb24gd2FzIHplcm8uCgoJKiBncmFwaGljcy9wYWludGluZy5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCU9wdGltaXplIFJvdW5kUmVjdDMyIHRvIGNhbGwgUmVjdGFuZ2xlMzIgaWYgZWl0aGVyIGVsbGlwc2UgZGltZW5zaW9uCglpcyB6ZXJvLgoKCSogcmVsYXkzMi9tcHIuc3BlYywgbWlzYy9uZXR3b3JrLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCBzdHViIFdOZXRFbnVtQ2FjaGVkUGFzc3dvcmRzLgoKCSogbXNkb3MvaW50MjEuYywgbXNkb3MvaW50MjUuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCU1hZGUgdGhpcyBmaWxlIERPU01PRCBmcmllbmRseS4KCgkqIGxvYWRlci9uZS9zZWdtZW50LmMsIGxvYWRlci9wZV9pbWFnZS5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJVW5pZmllZCAiTm8gaW1wbGVtZW50YXRpb24gZm9yLi4uIiB3YXJuaW5ncy4KCgkqIHdpbjMyL2RldmljZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCW1vbm9kZWJnLnZ4ZCB1c2VkIGJ5IHNvbWUgT3JpZ2luIHByb2dyYW1zIGltcGxlbWVudGVkLgoKCSogb2JqZWN0cy9iaXRtYXAuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUZhaWwgaWYgbGVzcyB0aGVuIG9uZSBlbnRpcmUgbGluZSByZXF1ZXN0ZWQgaW4gR2V0Qml0bWFwQml0czMyLgoKCSogd2luZG93cy93aW5wcm9jLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglBZGRlZCBXTV9HRVRETEdDT0RFIGhhbmRsaW5nIGluIChVbilNYXBNc2czMkF0bzE2LgoKCSogaWYxNjMyL2NvbXBvYmouc3BlYywgaW5jbHVkZS9vbGUuaCwgb2xlL2NvbXBvYmouYywgcmVsYXkzMi9vbGUzMi5zcGVjOgoJSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEB6ZWFsYW5kLm12LmNvbT4KCUltcGxlbWVudGF0aW9uIG9mIENvTG9hZExpYnJhcnksIENvRnJlZUFsbExpYnJhcmllcywKCUNvRnJlZVVudXNlZExpYnJhcmllcywgQ29GcmVlTGlicmFyeS4KCUZpeGVkIG1pc3NwZWxsaW5nIG9mIENvVW5pbml0aWFsaXplLgoKCSogcHJvZ3JhbXMvY2xvY2svQ2hhbmdlTG9nLCBwcm9ncmFtcy9jbG9jay9tYWluLmM6CglSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgoJRml4ZXMgZm9yIG90aGVyIGxhbmd1YWdlcy4KCkZyaSBOb3YgIDYgMTc6MzY6MTMgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG1pc2MvcmVnaXN0cnkuYzogSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEB6ZWFsYW5kLm12LmNvbT4KCUZpeCB3aWRlIGNoYXJhY3RlciBmdW5jdGlvbnMgdG8gcmV0dXJuIGNoYXJhY3RlciBjb3VudCBpbiBjaGFyYWN0ZXIKCXF1YW50aXRpZXMgbm90IGJ5dGUgcXVhbnRpdGllcy4gIE1ha2UgUmVnUXVlcnlJbmZvS2V5IGFuZAoJUmVnUXVlcnlJbmZvS2V5IGJlaGF2ZSBjb3JyZWN0bHkgaW4gd2luOTUgbW9kZS4KCgkqIGluY2x1ZGUvZGlucHV0LmgsIHdpbmRvd3MvZGlucHV0LmM6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUNoYW5nZWQgbW91c2UgYnV0dG9uIG1hcHBpbmcgYW5kIGNoZWNrIHNpemUgb2YgcmV0dXJuIGJ1ZmZlci4KCgkqIG9iamVjdHMvY2xpcHBpbmcuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUV4dFNlbGVjdENsaXBSZ24oKSB3aXRoIFJHTl9DT1BZIGNvcGllcyB0aGUgd3JvbmcgcmVnaW9uLgoKCSogZmlsZXMvZmlsZS5jOiBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlZCBhbiBlcnJvciBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgRklMRV9TaGFyZURlbnkuCgoJKiBzY2hlZHVsZXIvaGFuZGxlLmMsIGlmMTYzMi90aHVuay5jLCBpbmNsdWRlL2RlYnVndG9vbHMuaCwgaW5jbHVkZS9zaWdfY29udGV4dC5oLCBtdWx0aW1lZGlhL21tc3lzdGVtLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNvbGFyaXMgcmVkZWZpbmVzIEVSUiBhbmQgQ1MsIGZpeGVkIG9jY3VyYW5jZXMuCglTb2xhcmlzIGhhcyBUUkFQTk8gaW4gaXRzIHNpZ2NvbnRleHQsIGFkZGVkIHRvIHNpZ19jb250ZXh0LmgKCgkqIGluY2x1ZGUvbW1zeXN0ZW0uaCwgbXVsdGltZWRpYS9tbWlvLmMsIHJlbGF5MzIvd2lubW0uc3BlYywgaWYxNjMyL21tc3lzdGVtLnNwZWM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCU1hZGUgbW1pb1NldEJ1ZmZlciBjYWxsYWJsZSBmcm9tIDE2IGFuZCAzMiBiaXQgY29kZS4KCgkqIGNvbnRyb2xzL21lbnUuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCB3cm9uZyBhcmcgdHlwZS4KCgkqIG9iamVjdHMvZGliLmMsIG9iamVjdHMvZ2Rpb2JqLmMsIGdyYXBoaWNzL3gxMWRydi9NYWtlZmlsZS5pbiwgZ3JhcGhpY3MveDExZHJ2L2RpYi5jLCBncmFwaGljcy94MTFkcnYvaW5pdC5jLCBpbmNsdWRlL3gxMWRydi5oOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglNb3ZlZCBYMTEgRElCIHN0dWZmIHRvIHgxMWRydi4KCgkqIHdpbjMyL2NvZGVfcGFnZS5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJVGhlIEFQSSBmb3IgV2lkZUNoYXJUb011bHRpQnl0ZSBzYXlzIHRoYXQgdGhlIHNyYy1zdHJpbmcgaGFzIG9ubHkgdG8gYmUKCXRyZWF0ZWQgYXMgTlVMTC10ZXJtaW5hdGVkIGlmIHNyY2xlbiBpcyAtMS4KCgkqIGluY2x1ZGUvd2luLmgsIHdpbmRvd3MvZXZlbnQuYywgd2luZG93cy93aW4uYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJTWFkZSBzdXJlIENvbmZpZ3VyZU5vdGlmeSBpcyBwcm9jZXNzZWQgYmVmb3JlIEV4cG9zZSwgZGVmZXJyaW5nIHRoZQoJRXhwb3NlIGV2ZW50IGlmIG5lY2Vzc2FyeSwgdGh1cyB3b3JraW5nIGFyb3VuZCBhIFdNIGZsYXcgd2l0aCB2aXJ0dWFsCglkZXNrdG9wIHNjcm9sbGluZyBpbiAtbWFuYWdlZCBtb2RlLgoKCSogcmVzb3VyY2VzL3N5c3Jlc19Gci5yYzogRXJpYyBQb3VlY2ggPGVyaWMucG91ZWNoQGxlbWVsLmZyPgoJVHJhbnNsYXRlZCBpbiBGcmVuY2ggKG5vdCBzbyBnb29kIGFueWhvdykgbWVzc2FnZSBmb3IgdGhlIG1hcmsgb24KCXN5c3RlbSBtZW51LgoKCSogbWlzYy9tYWluLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQ2hhbmdlZCB0aGUgZGVmYXVsdCBmcm9tIDAgdG8gMHg0MDkgKGVuZy11cykuCgoJKiB3aW5kb3dzL21kaS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVR3byBtaXNzaW5nIFdJTkFQSXMuCgoJKiBpbmNsdWRlL2ludGVyZmFjZXMuaDogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCBvbmUgd3JvbmcgcGFyYW1ldGVyLgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW46IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRml4ZWQgLS1kaXNhYmxlLWxpYi4KClRodSBOb3YgIDUgMTA6MzM6MTggMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvY29tbWN0cmwuaDogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglDb25zdGFudHMgZm9yIGNvbnRyb2xzIGluIGNvbW1vbiBkaWFsb2dzLgoKV2VkIE5vdiAgNCAxODowODozMyAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbWlzYy9jcnRkbGwuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCBzb21lIGNvbXBpbGVyIHdhcm5pbmdzLgoKU3VuIE5vdiAgMSAxOToyNzoyNCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3Mvbm9uY2xpZW50LmMsIHdpbmRvd3MvcGFpbnRpbmcuYywgd2luZG93cy93aW5oZWxwLmMsIHdpbmRvd3Mvd2lucG9zLmMsIG1pc2MvY29tbWRsZy5jLCBtaXNjL3NoZWxsLmMsIG1pc2Mvd2luc29jay5jLCBtaXNjZW11L2luc3RyLmMsIG11bHRpbWVkaWEvYXVkaW8uYywgbXVsdGltZWRpYS9qb3lzdGljay5jLCBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2NsaXBwaW5nLmMsIG9iamVjdHMvY29sb3IuYywgb2JqZWN0cy9jdXJzb3JpY29uLmMsIG9iamVjdHMvZGliLmMsIHRvb2xzL3dyYy9kdW1wcmVzLmMsIHRvb2xzL3dyYy9wYXJzZXIubCwgd2luZG93cy9jbGlwYm9hcmQuYywgd2luZG93cy9tZGkuYywgZmlsZXMvZmlsZS5jLCBncmFwaGljcy94MTFkcnYveGZvbnQuYywgbWVtb3J5L2hlYXAuYzoKCUplc3BlciBTa292IDxqc2tvdkBjeWdudXMuY28udWs+CgllZ2NzICdhbWJpZ3VvdXMgZWxzZScgd2FybmluZ3MgZml4ZXMuCgoJKiBpbmNsdWRlL3Rvb2xoZWxwLmgsIGluY2x1ZGUvd2luZG93cy5oLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglHZXQgcmlkIG9mIHRoZSByZWRlZmluaXRpb24gb2YgTUFYX1BBVEggYW5kIG1vdmUgUFJPQ0VTU0VOVFJZMzIKCWRlZmluaXRpb24gdG8gdG9vbGhlbHAuaC4KCgkqIHdpbmRvd3Mvd2luLmMsIGluY2x1ZGUvcGVfaW1hZ2UuaCwgbGlicmFyeS93aW5lc3R1Yi5jLCBsb2FkZXIvZWxmLmMsIGxvYWRlci9tb2R1bGUuYywgbG9hZGVyL3Jlc291cmNlLmMsIG1pc2MvY2FsbGJhY2suYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJUnVuIFdpbmVsaWIgYXBwbGljYXRpb25zIGFzIDMyLWJpdCBwcm9jZXNzZXMgaW4gdGhlIGluaXRpYWwgdGFzay4KCVNpbXBsaWZpZWQvcmVtb3ZlZCBzZXZlcmFsIHNwZWNpYWwgJ2lmIChfX3dpbmVsaWIpJyBjYXNlcyBpbgoJV2luZSBtYWluIGNvZGUgb2Jzb2xldGVkIGJ5IHRoYXQgY2hhbmdlLgoKCSogd2luZG93cy9ldmVudC5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUNhbGwgbW91c2UgZHJpdmVyIGNhbGxiYWNrIGFsc28gaWYgd2luZG93cyBhcmUgbm90IHJlZ2lzdGVyZWQgd2l0aCBYCgkoaWYgdXNpbmcgbmF0aXZlIFVTRVIuRVhFKS4KCgkqIG1lbW9yeS9hdG9tLmMsIGluY2x1ZGUvYXRvbS5oOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGFwdGVkIHRvIHNlcGFyYXRpb24gYmV0d2VlbiBLRVJORUwgYW5kIFVTRVIuCgoJKiBpZjE2MzIvYnVpbHRpbi5jLCBpbmNsdWRlL21haW4uaCwgbG9hZGVyL21haW4uYywgbG9hZGVyL3Rhc2suYywgbWlzY2VtdS9tYWluLmMsIHJlbGF5MzIvZ2RpMzIuc3BlYywgcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCByZWxheTMyL3VzZXIzMi5zcGVjLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBuZXcgV2luZSBzdGFydHVwIHNlcXVlbmNlLCBzZXBhcmF0aW5nIHN0YXJ0dXAgaW50bwoJS0VSTkVML1VTRVIvR0RJIHJlbGF0ZWQgcGFydHMsIGFsbG93aW5nIG5hdGl2ZSByZXBsYWNlbWVudC4KCUltcGxlbWVudGVkIGluaXRpYWwgJ2tlcm5lbCcgdGFzay4KCgkqIGluY2x1ZGUvb2xlLmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgb2xlL2NvbXBvYmouYzoKCUpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAemVhbGFuZC5tdi5jb20+CglJbXBsZW1lbnRhdGlvbiBvZiBJbnByb2NTZXJ2ZXIzMiBDb0dldENsYXNzT2JqZWN0LgoKCSogaW5jbHVkZS9iaXRtYXAuaCwgb2JqZWN0cy9iaXRtYXAuYywgb2JqZWN0cy9jdXJzb3JpY29uLmMsIG9iamVjdHMvb2VtYml0bWFwLmMsIGdyYXBoaWNzL3gxMWRydi9iaXRtYXAuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJTW9yZSBiaXRtYXAgZml4ZXMuCgoJKiB3aW5kb3dzL3dpbnByb2MuYzogRml4ZWQgY3Jhc2hlcyB3aXRoIFdNX0dFVERMR0NPREUgdHJhbnNsYXRpb24uCgoJKiBwcm9ncmFtcy93aW5oZWxwL01ha2VmaWxlLmluLCBwcm9ncmFtcy93aW52ZXIvTWFrZWZpbGUuaW4sIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3MveDExZHJ2Ly5jdnNpZ25vcmUsIHdpbmRvd3MveDExZHJ2L01ha2VmaWxlLmluLCB3aW5kb3dzL3gxMWRydi9pbml0LmMsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvd2luLmgsIGxpYnRlc3QvTWFrZWZpbGUuaW4sIHByb2dyYW1zL2Nsb2NrL01ha2VmaWxlLmluLCBwcm9ncmFtcy9jb250cm9sL01ha2VmaWxlLmluLCBwcm9ncmFtcy9ub3RlcGFkL01ha2VmaWxlLmluLCBwcm9ncmFtcy9wcm9nbWFuL01ha2VmaWxlLmluLCBwcm9ncmFtcy9yZWd0ZXN0L01ha2VmaWxlLmluLCBwcm9ncmFtcy92aWV3L01ha2VmaWxlLmluLCBNYWtlLnJ1bGVzLmluLCBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvYWNjb25maWcuaDoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJU3RhcnRlZCBtb3Zpbmcgc29tZSBYMTEgd2luZG93IG1hbmFnZW1lbnQgY29kZSB0byB3aW5kb3dzL3gxMWRydi4KCgkqIGlmMTYzMi91c2VyLnNwZWMsIHdpbmRvd3MvZGlhbG9nLmMsIHdpbmRvd3Mvd2lucHJvYy5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglGaXhlZCBJc0RpYWxvZ01lc3NhZ2UxNi4KCgkqIE1ha2VmaWxlLmluOiBEb3VnbGFzIFJpZGd3YXkgPHJpZGd3YXlAd2luZWhxLmNvbT4KCVRlbGwgcGVvcGxlIHRvIGlnbm9yZSB0aGUgJ2dldHMnIHdhcm5pbmcuIFNvbWUgd2lsbCBsaXN0ZW4uCgoJKiBncmFwaGljcy94MTFkcnYvYml0bWFwLmMsIHdpbmRvd3MvZ3JhcGhpY3MuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJQSBjb3VwbGUgb2Ygc21hbGwgZml4ZXMgdG8gbXkgYml0bWFwIHBhdGNoLgoKCSogcmVzb3VyY2VzL1RPRE8sIHJlc291cmNlcy9zeXNyZXNfRGUucmMsIHJlc291cmNlcy9zeXNyZXNfRW4ucmMsIHdpbmRvd3Mvbm9uY2xpZW50LmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBbGxvdyB0aGUgdXNlciB0byBwdXQgYSBtYXJrIGluIHRoZSBkZWJ1ZyBsb2cgYnkgYWRkaW5nIGEgaXRlbSBpbiB0aGUKCVNZU01FTlUuIFRoZSBtZXNzYWdlcyBuZWVkcyBpbXBsZW1lbnRhdGlvbiBpbiBhbGwgb3RoZXIgbGFuZ3VhZ2VzIHRoYW4KCUVuZ2xpc2ggYW5kIEdlcm1hbi4KCgkqIGZpbGVzL2ZpbGUuYzogVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJR2l2ZSB0ZW1wZmlsZSBhIGRpZmZlcmVudCBuYW1lIGV2ZW4gaWYgdGhleSBhcmUgY3JlYXRlZCBpbiB0aGUgc2FtZQoJc2Vjb25kLiBSZW1vdmVkIHNvbWUgZml4bWVzIGZyb20gdGhlIFNoYXJlRGVueSBzdHVmZi4KCgkqIGluY2x1ZGUvbWRpLmgsIGluY2x1ZGUvd2luZG93cy5oLCByZWxheTMyL3VzZXIzMi5zcGVjLCB3aW5kb3dzL21kaS5jLCB3aW5kb3dzL3dpbi5jOgoJUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUNyZWF0ZVdpbmRvd0V4MzJbQVddIG5vdyBjcmVhdGVzIGFuIE1ESSBjaGlscyB3aGVuIHRoZSBXTV9FWF9NRElDSElMRAoJZXh0ZW5kZWQgc3R5bGUgaXMgc3BlY2lmaWVkLiBBbHNvIGltcGxlbWVudGVkIENyZWF0ZU1ESVdpbmRvdzMyQSgpCgljYWxsIC0gc2luZ2xlIHRocmVhZCBvbmx5IC0uCgoJKiBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRXJyZWQgaW4gdGhlIGJpdCBtYWNyb3MgaW4gdHJlZXZpZXcuYy4gU2hpZnRjb3VudHMgd2VyZSB3cm9uZy4KCgkqIGxvYWRlci9wZV9pbWFnZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURldGVjdGlvbiBvZiB0aGUgZW5kIG9mIGltcG9ydHMgd2l0aCBDaGFyYWN0ZXJpc3RpY3MgMCBmYWlsIGZvciBCb3JsYW5kCglwcm9ncmFtcyAod2hpY2ggc2VlbSB0byBoYXZlIGFsd2F5cyBjaGFyYWN0ZXJpc3RpY3MgMCkuIENoYW5nZWQgdG8gYWxnb3JpdGhtCgl0byBzb21ldGhpbmcgYSBiaXQgbW9yZSBpbnRlbGxpZ2VudC4KCgkqIG9sZS9jb21wb2JqLmMsIHJlbGF5MzIvb2xlMzIuc3BlYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglBZGRlZCBDb0ZyZWVMaWJyYXJ5IHN0dWIuCgoJKiBSRUFETUU6IFVwZGF0ZWQgRkFRIGxvY2F0aW9uLgoKCSogZ3JhcGhpY3MvZXNjYXBlLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJSW1wbGVtZW50IFNFR1BUUiBjb252ZXJzaW9uIGZvciBTVEFSVERPQyBpbiBFc2NhcGUzMigpLgoKCSogb2JqZWN0cy9kYy5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogU2V0RENTdGF0ZSBkaWQgbm90IHJlc2V0IGNsaXBwaW5nIHJlZ2lvbiB0byBlbXB0eS4KCgkqIHdpbjMyL2luaXQuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCBzbWFsbCBvZmYgYnkgb25lIGVycm9yIGluIEdldENvbXB1dGVyTmFtZTMyVywgYWx3YXlzIGtpbGxlZCB0aGUKCWxhc3QgY2hhcmFjdGVyIG9mIGEgaG9zdG5hbWUuCgoJKiBvYmplY3RzL2RpYi5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURvbid0IEhlYXBGcmVlKCkgY29sb3JtYXAgaWYgd2UgZGlkbid0IGFsbG9jYXRlIG9uZS4KCgkqIHdpbjMyL2FkdmFwaS5jLCB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy91c2VyLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBpbmNsdWRlL3dpbnR5cGVzLmgsIG1pc2MvY3J0ZGxsLmMsIG1pc2MvcHJpbnRkcnYuYywgcmVsYXkzMi9hZHZhcGkzMi5zcGVjLCByZWxheTMyL2NydGRsbC5zcGVjLCByZWxheTMyL21wci5zcGVjLCByZWxheTMyL3NoZWxsMzIuc3BlYywgcmVsYXkzMi91c2VyMzIuc3BlYywgcmVsYXkzMi93aW5zcG9vbC5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBzdHVicyBmb3IgdXNlcjMyLGFkdmFwaTMyIGZ1bmN0aW9ucy4KCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGxscy9NYWtlZmlsZS5pbiwgZGxscy9udGRsbC8qLCBpbmNsdWRlL250ZGxsLmgsIG1pc2MvQXR0aWMvbnRkbGwuYywgbWlzYy9NYWtlZmlsZS5pbiwgcmVsYXkzMi9udGRsbC5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglNb3JlIE50KiBhbmQgUnRsKiBmdW5jdGlvbiBzdHVicywgbW92ZWQgbnRkbGwuYyB0byBkbGxzL250ZGxsLy4KCgkqIG1lbW9yeS9sb2NhbC5jLCBtZW1vcnkvaGVhcC5jOiBBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglDaGFuZ2VkIG1hbnkgV0FSTigpcyByZWxhdGVkIHRvIGludGVybmFsIFdpbmUgbWVtb3J5IGZhaWx1cmVzIHRvCglFUlIoKXMuCgoJKiBpZjE2MzIva2VybmVsLnNwZWMsIHNjaGVkdWxlci9wcm9jZXNzLmM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglBZGRlZCAuc3BlYyBlbnRyeSBmb3IgS0VSTkVMLlJlZ2lzdGVyU2VydmljZVByb2Nlc3MuCgoJKiBpZjE2MzIvZGlzcGxheS5zcGVjLCB3aW5kb3dzL2tleWJvYXJkLmM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglBZGRlZCBzdHViIGZvciBDaGVja0N1cnNvcigpLgoKCSogaW5jbHVkZS9kaWFsb2cuaCwgd2luZG93cy9kZWZkbGcuYzogVGltIE5ld3NvbWUgPG51aXNhbmNlQGNtdS5lZHU+CglGaXggZm9yIG5vbi1tb2RhbCBkaWFsb2cgY2xvc2luZy4KCgkqIHdpbmRvd3MvZGlucHV0LmM6IERhdmlkIEZhdXJlICA8ZmF1cmVAa2RlLm9yZz4KCVJld3JvdGUgdGhlIHR3byByb3V0aW5lcyB1c2luZyB0aGUgdmtleS0+c2NhbmNvZGUgYXJyYXkgdG8gdXNlCglrZXljMnZrZXkgZm9yIGVhY2gga2V5Y29kZSwgaW5zdGVhZC4gTm90IHRlc3RlZC4KCVJlbW92ZWQgdW51c2VkIElEaXJlY3RJbnB1dERldmljZUFfR2V0RGV2aWNlU3RhdGUuCglGaXhlZCB3YXJuaW5nIGluIFRSQUNFKCkgY2FsbC4KCgkqIHdpbmRvd3Mva2V5Ym9hcmQuYzogRGF2aWQgRmF1cmUgPGZhdXJlQGtkZS5vcmc+CglEZWxldGVkIHRoZSB2a2V5LT5zYW5jb2RlIGFycmF5LCBiZWNhdXNlIFFXRVJUWSBzcGVjaWZpYy4KCUJhY2sgdG8gdXNpbmcgdGhlIFgga2V5Y29kZSBpbnN0ZWFkIGFzIHRoZSBzY2FuY29kZS4gVGVzdGVkLgoKCSogZ3JhcGhpY3MvcHNkcnYvaW5pdC5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglQcmludCBhIG1lc3NhZ2UgaWYgdGhlIFBvc3RTY3JpcHQgZHJpdmVyIGNhbid0IGZpbmQgYSBQUEQgZmlsZS4KCgkqIG1zZG9zL2ludDEwLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQWRkZWQgVkdBIDI1Ni1jb2xvciBtb2RlIDB4MTMgdXNpbmcgdGhlIERpc3BsYXlEaWIgVkdBIGVtdWxhdGlvbi4KCShET1MgYXBwcy9nYW1lcyB1c2luZyB0aGlzIG1vZGUgY29tZXMgdXAgbm93LCBhbHRob3VnaCB5b3UgY2FuJ3QKCXJlYWxseSBkbyBhbnl0aGluZyB3aXRoIHRoZW0gKHlldD8pLikKCgkqIG1zZG9zL2RwbWkuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglVc2UgbWFjcm8gVjg2X0ZMQUcuCgoJKiBtc2Rvcy9kb3NtZW0uYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglTZXQgZGVmYXVsdCB2aWRlbyBtb2RlIHRvIDMgKDgweDI1IGNvbG9yKS4KCgkqIGxvYWRlci9kb3MvZG9zbW9kLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJSWdub3JlcyBhIGNvdXBsZSBvZiBzaWduYWxzLgoKCSogZ3JhcGhpY3MvTWFrZWZpbGUuaW4sIGdyYXBoaWNzL2Rpc3BkaWIuYywgZ3JhcGhpY3MvdmdhLmMsIGluY2x1ZGUvdmdhLmgsIG1zZG9zL2lvcG9ydHMuYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJTW92ZWQgVkdBLWVtdWxhdGluZyBEaXJlY3RYIGNvZGUgZnJvbSBkaXNwZGliLmMgdG8gYSBzZXBhcmF0ZQoJZmlsZS4gTWFkZSBpdCB1c2UgYSBzeXN0ZW0gdGltZXIgYW5kIHRyYXAgSS9PIGFjY2Vzc2VzIHRvIHRoZSBWR0EKCURBQyByZWdpc3RlcnMgdG8gYWNjb21tb2RhdGUgRGlzcGxheURpYi11c2luZyBwcm9ncmFtcyB0aGF0IHRyeSB0bwoJYWNjZXNzIHRoZSBWR0EgaGFyZHdhcmUgZGlyZWN0bHkuCgoJKiBtaXNjZW11L2luc3RyLmMsIGlmMTYzMi9zaWduYWwuYywgaW5jbHVkZS9kb3NleGUuaCwgbG9hZGVyL2Rvcy9kb3N2bS5jLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBtaXNjL3N5c3RlbS5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglJbmRpcmVjdGlvbiBmb3IgSU5TVFJfRW11bGF0ZUluc3RydWN0aW9uIGZvciB1c2UgYnkgRE9TIGNvZGUuCglBZGRlZCBzdXBwb3J0IGZvciBhIDU1SHogc3lzdGVtIHRpbWVyLCBsZXR0aW5nIERPUyBhcHBzIGNhbGlicmF0ZQoJdGhlaXIgZGVsYXkgbG9vcHMgYW5kIHN1Y2guIENhbGxzIElOU1RSX0VtdWxhdGVJbnN0cnVjdGlvbiBmb3IKCWluc3RydWN0aW9uIGVtdWxhdGlvbiAocHJpbmNpcGFsbHkgSS9PIHBvcnQgYWNjZXNzKS4gQWRkZWQgbWFjcm8KCVY4Nl9GTEFHLgoKU2F0IE9jdCAzMSAxMjoyMDo1NiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luZG93cy9kaW5wdXQuYywgbXVsdGltZWRpYS9kc291bmQuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU21hbGwgZml4ZXMuCgoJKiBtZW1vcnkvdmlydHVhbC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJlbW92ZWQgdGhlIEZJWE1FKCkgYW5kIG1vdmVkIFNldExhc3RFcnJvcigwKSB0byB0aGUgZW5kIChzbyB0aGF0CglHZXRUZW1wRmlsZU5hbWUgZXQuYWwuIGNhbid0IG92ZXJ3cml0ZSBpdCkuCgoJKiBtaXNjL0F0dGljL250ZGxsLmMsIHJlbGF5MzIvbnRkbGwuc3BlYywgcmVsYXkzMi9yZWxheTM4Ni5jLCByZWxheTMyL3VzZXIzMi5zcGVjLCB3aW5kb3dzL3VzZXIuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTG90cyBvZiBzdHVicyB0byBnZXQgd2lubG9nb24uZXhlIGZyb20gbnQzLjUxIGFuZCBvdGhlciBOVDMuNTEgYXBwbGV0cwoJYSBiaXQgZnVydGhlci4KCgkqIHdpbmRvd3MvbWRpLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglNREljaGlsZCBjcmVhdGVkIHdoZW4gdGhlIE1ESSBjbGllbnQgaGFzIHRoZSBNRElTX0FMTENISUxEU1RZTEVTCglzdHlsZSwgc2hvdWxkIG5vdCBiZSBzaG93biBhdCBjcmVhdGlvbiBub3IgYWN0aXZhdGVkIHVubGVzcyB0aGUKCVdTX1ZJU0lCTEUgZmxhZyBpcyBzZXQuCgoJKiBsb2FkZXIvcGVfaW1hZ2UuYzogU3RlcGhlbiBMYW5nYXNlayA8dm9ybG9uQGRvZGRzLm5ldD4KCUJ1Z2ZpeCBmb3IgZml4dXBfaW1wb3J0czogRW5hYmxlIGNoZWNraW5nIGZvciB0ZXJtaW5hdGluZyBpbXBvcnQKCXN0cnVjdCB3aXRoIENoYXJhY3RlcmlzdGljcyBiaXRmaWVsZCBzZXQgdG8gMC4KCgkqIHdpbmRvd3Mvd2luLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglEZWxheSBsaW5raW5nIG5ld2x5IGNyZWF0ZWQgd2luZG93IGluIGxpbmtlZCBsaXN0IHVudGlsIGFmdGVyIHRoZQoJV01fTkNDUkVBVEUgbWVzc2FnZS4KCgkqIGZpbGVzL2ZpbGUuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCVNtYWxsIGJ1ZyBpbiBGSUxFX0luVXNlIGRvZXMgbm90IGRvIGEgcmVsZWFzZSBvbiBldmVyeSBhY3F1aXJlZCBmaWxlCglwb2ludGVyLgoKCSogY29udHJvbHMvc3RhdGljLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJbHBzek5hbWUgb2YgTlVMTCBpcyBoYW5kbGVkIChyZW1vdmVzIHNvbWUgd2FybmluZ3MpLgoKCSogdG9vbHMvdGVzdHJ1bjogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglOb3cgYWxsb3dzIHNwZWNpZmljYXRpb24gb2YgYSBzdGFydCBkaXJlY3Rvcnkgb24gdGhlIGNtZGxpbmUuCgoJKiBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJR2V0cyByaWQgb2YgdGhlIGFyY2gtZGVwZW5kZW50IGJpdCBvcGVyYXRpb25zICh0ZXN0ZWQgb24gTGludXggYW5kCglTb2xhcmlzL3g4NikuCgpXZWQgT2N0IDI4IDE0OjU4OjAyIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW5kb3dzL3dpbi5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUEgZGVzdCBidWZmZXIgd2FzIHByaW50ZWQgb3V0IGFzIHN0cmluZy4KCgkqIGluY2x1ZGUvc2hsb2JqLmg6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQ29ycmVjdGVkIDIgd3JvbmcgZGVmaW5pdGlvbnMuCgoJKiBpbmNsdWRlL3dpbmRvd3MuaCwgcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJUGF0cmljayBTcGlubGVyIDxzcGlubGVyLnBhdHJpY2tAbWF5by5lZHU+CglBZGRlZCBzdHVicyBmb3IgUHJvY2VzczMyRmlyc3QvUHJvY2VzczMyTmV4dC4KCgkqIGluY2x1ZGUveDExZHJ2LmgsIG9iamVjdHMvY2xpcHBpbmcuYywgb2JqZWN0cy9kYy5jLCBvYmplY3RzL2RjdmFsdWVzLmMsIG9iamVjdHMvcGFsZXR0ZS5jLCBvYmplY3RzL3JlZ2lvbi5jLCBncmFwaGljcy9lc2NhcGUuYywgZ3JhcGhpY3MvbWV0YWZpbGVkcnYvZ3JhcGhpY3MuYywgZ3JhcGhpY3MvcGFpbnRpbmcuYywgZ3JhcGhpY3MvcGF0aC5jLCBncmFwaGljcy9wc2Rydi9ncmFwaGljcy5jLCBncmFwaGljcy93aW4xNmRydi9ncmFwaGljcy5jLCBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYywgaW5jbHVkZS9kZWJ1Z2dlci5oLCBpbmNsdWRlL2dkaS5oLCBpbmNsdWRlL21ldGFmaWxlZHJ2LmgsIGluY2x1ZGUvcHNkcnYuaCwgaW5jbHVkZS93aW4xNmRydi5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBkZWJ1Z2dlci9kYmcueSwgZGVidWdnZXIvbXNjLmMsIGRlYnVnZ2VyL3N0YWJzLmMsIGRlYnVnZ2VyL3R5cGVzLmM6CglGcmFu529pcyBHb3VnZXQgPGdvdWdldEBtZXRhaW50ZWdyYXRpb24ubmV0PgoJRml4ZWQgc29tZSBMUFBPSU5UL0xQU0laRSBtaXNtYXRjaGVzIGFuZCBzb21lIG1pc3NpbmcgImNvbnN0IiBpbiB0aGUKCWhlYWRlcnMgcHJvdG90eXBlcy4KCgkqIGdyYXBoaWNzL3BzZHJ2L2luaXQuYywgZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jLCBncmFwaGljcy94MTFkcnYvYml0bWFwLmMsIGdyYXBoaWNzL3gxMWRydi9icnVzaC5jLCBncmFwaGljcy94MTFkcnYvaW5pdC5jLCBncmFwaGljcy94MTFkcnYvb2JqZWN0cy5jLCBpbmNsdWRlL2JpdG1hcC5oLCBpbmNsdWRlL2dkaS5oLCBpbmNsdWRlL3gxMWRydi5oLCBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2JydXNoLmMsIG9iamVjdHMvZGliLmMsIG9iamVjdHMvb2VtYml0bWFwLmMsIHdpbmRvd3MvZ3JhcGhpY3MuYywgZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglBZGRlZCBwQml0bWFwQml0cyBhbmQgcENyZWF0ZUJpdG1hcCB0byB0aGUgR0RJIGZ1bmN0aW9uIHRhYmxlIGFuZAoJbW92ZWQgdGhlIFgxMSBkZXBlbmRlbnQgc3R1ZmYgb3V0IG9mIG9iamVjdHMvYml0bWFwLmMgaW50byB4MTFkcnYuCgoJKiByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL3NoZWxsb2xlLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBpbmNsdWRlL3NoZWxsLmgsIGRsbHMvc2hlbGwzMi9waWRsLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBTSEdldFNpbXBsZUlETGlzdEZyb21QYXRoMzJBVy4KCVVuaWNvZGUtc2FmZTogUGF0aEZpbmRGaWxlbmFtZTMyQVcuCgoJKiBpbmNsdWRlL3NobG9iai5oOiBKdXN0aW4gQnJhZGZvcmQgPGp1c3RpbkBidXNib3kuc3BlZC51a2Fucy5lZHU+CglJRXh0cmFjdEljb24gaGFkIGFuIGV4dHJhIGMgaW4gYSBzdHJ1Y3QgZGVmaW5pdGlvbi4KCgkqIHJlbGF5MzIvZHBsYXkuc3BlYzoKCUpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAemVhbGFuZC5tdi5zcGFtbGVzcy5jb20+CglBZGRlZCBlbnRyeSBmb3IgRGlyZWN0UGxheUVudW1lcmF0ZS4KCgkqIG9sZS9ubHMvc2t5Lm5scywgb2xlL29sZTJubHMuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQWRkZWQgU2xvdmFrIG5scy1yZXNvdXJjZXMuCgoJKiBvYmplY3RzL3JlZ2lvbi5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeGVkIGRpZmZlcmVuY2VzIGJldHdlZW4gU2V0UmVjdFJnbjE2IGFuZCBTZXRSZWN0UmduMzIuIEFsc28gYSBidWcgZml4IGZvcgoJQ3JlYXRlUm91bmRSZWN0UmduLgoKVHVlIE9jdCAyNyAxNTo0MTo1NCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luZG93cy91c2VyLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRW51bURpc3BsYXlNb2RlcyogcmV0dXJucyBhIHN0YXRpYyBsaXN0IG9mIG1vZGVzIHdpdGggYWxsIGRlcHRocwoJKGhlbHBzIGhleGVuMmRlbW8pLCBDaGFuZ2VEaXNwbGF5U2V0dGluZ3MgcmV0dXJucyB0cnVlIGFsbCB0aGUgdGltZS4KCgkqIGluY2x1ZGUvd2ludHlwZXMuaCwgbXVsdGltZWRpYS9tbXN5c3RlbS5jLCByZWxheTMyL3dpbm1tLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVN0dWIgZm9yIG1pZGlPcGVuU3RyZWFtIChoZWxwcyBoZXhlbjJkZW1vKS4KCgkqIG9sZS9ubHMvZW5jLm5scywgb2xlL25scy9mcmMubmxzLCByZXNvdXJjZXMvc3lzcmVzX0ZyLnJjOgoJUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KCVNtYWxsIHBhdGNoIGZvciBiZXR0ZXIgRnJlbmNoIHN1cHBvcnQuCgoJKiBsb2FkZXIvZWxmLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBtZW1vcnkgb3ZlcndyaXRlIGJ1Zy4KCk1vbiBPY3QgMjYgMTE6MDQ6MTMgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGNvbnRyb2xzL2VkaXQuYywgd2luZG93cy9jbGlwYm9hcmQuYzogUGFzY2FsIEN1b3EgPHBjdW9xQGVucy1seW9uLmZyPgoJMzItYml0IGNsaXBib2FyZCBzdXBwb3J0LgoKCSogd2luZG93cy9xdWV1ZS5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeCBmb3IgUVVFVUVfU2lnbmFsOiBBbHdheXMgdXNlIFBvc3RFdmVudCBpZiBubyB0aHJlYWQgaXMgd2FpdGluZwoJb24gdGhlIHF1ZXVlLgoKCSogd2luZG93cy9tZGkuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglGaXhlZCBhIG1pbm9yIHByb2JsZW0gd2l0aCB0aGUgbWVudXMgZm9yIG1kaSBjaGlsZCB3aW5kb3dzLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglSZW1vdmVkIG5vIGxvbmdlciBuZWNlc3NhcnkgY29tbWVudGVkIG91dCBjb2RlLCBkZXN0cm95IG9sZCB3aW5kb3cKCXdoZW4gU2V0RGlzcGxheU1vZGUgaXMgY2FsbGVkIGFnYWluLCBFbnVtRGlzcGxheU1vZGVzIG5vdyByZXR1cm5zCglhbGwgcG9zc2libGUgbW9kZXMgKHVzaW5nIGEgc3RhdGljIGxpc3QpLgoKCSogbWVtb3J5L3ZpcnR1YWwuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBbm9uIHNoYXJlZCBtYXBwaW5nIGZpeGVkIGZvciBmaWxlIHNoYXJpbmcuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBPY3QgMjUgMTA6MzI6MjMgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG9sZS9vbGUybmxzLmMsIGluY2x1ZGUvd2lubmxzLmg6IEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoJRml4ZXMgZm9yIExBTkdfTkVVVFJBTC4KCgkqIGluY2x1ZGUvdGFzay5oOgoJQWRkZWQgc29tZSBwYWRkaW5nIHRvIHRoZSBQREIgZm9yIGlsbC1iZWhhdmluZyBhcHBzIChwcm9ibGVtIHJlcG9ydGVkCglieSBBbmRyZWFzIE1vaHIpLgoKCSogZG9jdW1lbnRhdGlvbi9pb3BvcnQtdHJhY2UtaGludHMsIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgbWlzY2VtdS9pbnN0ci5jOgoJSm9uYXRoYW4gQnV6emFyZCA8amFiQGhleC5wcmVzdGVsLmNvLnVrPgoJQWRkZWQgYSBuZXcgZGVidWdnaW5nIGNoYW5uZWwgaW8gdG8gYWxsb3cgcmVhZC93cml0ZXMgb24gYSBwb3J0IHRvIGJlCglsb2dnZWQgdG8gYSBmaWxlLgoKCSogd2luZG93cy9rZXlib2FyZC5jOiBEYXZpZCBGYXVyZSA8RGF2aWQuRmF1cmVAaW5zYS1seW9uLmZyPgoJUmVwbGFjZWQgMHgwMCB3aXRoIDB4MDEgaW4gdGhlIHZrZXktPnNhbmNvZGUgYXJyYXksIHNvIHRoYXQgbm8ga2V5IGlzCglpZ25vcmVkLiAweDAwIGlzIHVzZWQgZm9yIGdlbmVyYXRlZCBrZXkgZXZlbnRzIG9ubHkuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9xdWV1ZS5jOgoJRG91Z2xhcyBSaWRnd2F5IDxyaWRnd2F5QHdpbmVocS5jb20+CglBUEkgRG9jdW1lbnRhdGlvbiBmb3IgU2VuZE1lc3NhZ2UsIEdldFRpY2tDb3VudCwgUG9zdFF1aXRNZXNzYWdlLAoJR2V0TWVzc2FnZVBvcywgR2V0TWVzc2FnZVRpbWUuCgoJKiBtZW1vcnkvdmlydHVhbC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURlbGV0ZSB0aGUgZmlsZW5hbWUgZm9yIHRoZSBtYXBwaW5nIGluc3RhbnRseS4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCByZWxheTMyL3NoZWxsMzIuc3BlYzoKCU1pY2hhZWwgUG9vbGUgPHBvb2xlQGdyYXZpdG9uLnJlcy5jbXUuZWR1PgoJU3R1YiBmb3IgU0hTaW1wbGVJRExpc3RGcm9tUGF0aC4KCgkqIGxvYWRlci90YXNrLmM6IEZpeGVkIGJ1ZyBpbiBTd2l0Y2hTdGFja1RvLgoKU2F0IE9jdCAyNCAxMzowNjoxNiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogY29udHJvbHMvc2Nyb2xsLmM6IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJQ2hlY2sgaWYgc2Nyb2xsYmFyIGFuZCBwYXJlbnQgYXJlIHZpc2libGUgYmVmb3JlIHJlZHJhdy4KCgkqIGlmMTYzMi9zaGVsbC5zcGVjLCBpbmNsdWRlL3NoZWxsLmgsIG1pc2Mvc2hlbGwuYywgcHJvZ3JhbXMvbm90ZXBhZC9tYWluLmMsIHJlbGF5MzIvc2hlbGwzMi5zcGVjOgoJS2FpIE1vcmljaCA8a2FpLm1vcmljaEBkYXJtc3RhZHQubmV0c3VyZi5kZT4KCUFkZGVkIERyYWcqMzIgZnVuY3Rpb25zLgoKCSogd2luZG93cy9ldmVudC5jOiBLYWkgTW9yaWNoIDxrYWkubW9yaWNoQGRhcm1zdGFkdC5uZXRzdXJmLmRlPgoJQWRkZWQgRHJhZyZEcm9wIGZyb20gS0RFIGFwcCB0byAxNi8zMiBiaXQgV2luZG96ZSBhcHAuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYzogS2FpIE1vcmljaCA8a2FpLm1vcmljaEBkYXJtc3RhZHQubmV0c3VyZi5kZT4KCUFkZGVkIEZJWE1FIG1lc3NhZ2UgaW4gUG9zdE1lc3NhZ2UzMnggaWYgcGFyYW1ldGVycyBhcmUgdHJ1bmNhdGVkCgl3aGVuIGNhbGxpbmcgUG9zdE1lc3NhZ2UxNi4KCgkqIGluY2x1ZGUvcHJvY2Vzcy5oLCBzY2hlZHVsZXIvZXZlbnQuYywgc2NoZWR1bGVyL2hhbmRsZS5jLCBzY2hlZHVsZXIvcHJvY2Vzcy5jLCBzY2hlZHVsZXIvdGhyZWFkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkZGVkIHN1cHBvcnQgZm9yIGdsb2JhbCBoYW5kbGVzLCBpbXBsZW1lbnRlZCBDb252ZXJ0VG9HbG9iYWxIYW5kbGUuCglBbGxvY2F0ZSBzdGFydHVwIGRhdGEgYW5kIDE2LWJpdCBzdGFjayBmb3IgaW5pdGlhbCBwcm9jZXNzLgoKCSogZG9jdW1lbnRhdGlvbi93aW5lLnRleGluZm86IExlaWdoIFdlZGRpbmcgPGx3ZWRkaW5nQGNvcnBsaW5rLmNvbS5hdT4KCVNtYWxsIGZpeC4KCgkqIHByb2dyYW1zL3Byb2dtYW4vLmN2c2lnbm9yZSwgcHJvZ3JhbXMvcHJvZ21hbi9Fcy5yYywgcHJvZ3JhbXMvcHJvZ21hbi9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvd2luaGVscC8uY3ZzaWdub3JlLCBwcm9ncmFtcy93aW5oZWxwL0VzLnJjLCBwcm9ncmFtcy93aW5oZWxwL01ha2VmaWxlLmluLCBwcm9ncmFtcy9jbG9jay8uY3ZzaWdub3JlLCBwcm9ncmFtcy9jbG9jay9Fcy5yYywgcHJvZ3JhbXMvY2xvY2svTWFrZWZpbGUuaW4sIHByb2dyYW1zL25vdGVwYWQvLmN2c2lnbm9yZSwgcHJvZ3JhbXMvbm90ZXBhZC9Fcy5yYywgcHJvZ3JhbXMvbm90ZXBhZC9NYWtlZmlsZS5pbjoKCVBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgoJQWRkZWQgU3BhbmlzaCByZXNvdXJjZXMuCgoJKiBvbGUvbmxzL2V1cS5ubHMsIHJlc291cmNlcy9zeXNyZXNfRXMucmM6CglQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KCVNtYWxsIGNvcnJlY3Rpb25zLgoKCSogcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglMb2FkTGlicmFyeUV4VyBzcGVjIGFkZGVkIChmdW5jdGlvbiB3YXMgdGhlcmUpLgoJU2V0UHJvY2Vzc1ByaW9yaXR5Qm9vc3Qgc3R1YiBhZGRlZC4KCgkqIG1zZG9zL2RwbWkuYzogUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglDb21waWxlIGZpeCBmb3IgU29sYXJpcy4KCgkqIGlmMTYzMi8uY3ZzaWdub3JlLCBpZjE2MzIvTWFrZWZpbGUuaW4sIGlmMTYzMi9idWlsdGluLmMsIGlmMTYzMi9kaXNwZGliLnNwZWMsIGluY2x1ZGUvZGlzcGRpYi5oLCBncmFwaGljcy9NYWtlZmlsZS5pbiwgZ3JhcGhpY3MvZGlzcGRpYi5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglJbXBsZW1lbnRlZCBEaXNwbGF5RGliLgoKCSogY29udHJvbHMvc3RhdGljLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJSGFjayB0byBzdXBwb3J0IGludGVnZXIgaWRzIGluIGFsbCBzdGF0aWMgY29udHJvbHMuCgoJKiBpbmNsdWRlL2RpbnB1dC5oLCB3aW5kb3dzL2RpbnB1dC5jOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglCZWdpbm5pbmcgb2YgbW91c2Ugc3VwcG9ydCBpbiBEaXJlY3RJbnB1dCAob25seSAic3RhbmRhcmQiIG1vdXNlCgljb25maWd1cmF0aW9uIHN1cHBvcnRlZCBmb3Igbm93KS4KCgkqIGluY2x1ZGUvKi5oLCBkbGxzL2NvbWN0bDMyLyouYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCB4eHhfVW5yZWdpc3RlcigpIGZ1bmN0aW9ucyB0byBhbGwgY29tbW9uIGNvbnRyb2xzLgoKCSogZGxscy9jb21jdGwzMi9jb21jdGwzMnVuZG9jLmMsIGRsbHMvY29tY3RsMzIvcGFnZXIuYywgZGxscy9jb21jdGwzMi90b29sYmFyLmMsIGRvY3VtZW50YXRpb24vY29tbW9uX2NvbnRyb2xzLCByZWxheTMyL2NvbWN0bDMyLnNwZWM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJU29tZSBtaW5vciBpbXByb3ZlbWVudHMgYW5kIGZpeGVzLgoKCSogZGxscy9jb21jdGwzMi9yZWJhci5jLCBpbmNsdWRlL3JlYmFyLmg6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJSW1wcm92ZWQgdGhlIHJlYmFyIGNvbnRyb2wuCgoJKiBkbGxzL2NvbWN0bDMyL3Rvb2x0aXBzLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBzdXBwb3J0IGZvciB0cmFuc3BhcmVudCBhbmQgdHJhY2tpbmcgdG9vbHRpcHMuCgoJKiBjb250cm9scy9tZW51LmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBhIHBvcHVwIG1lbnUgc2VsZWN0aW9uIGJ1Zy4KCgkqIHdpbmRvd3Mvbm9uY2xpZW50LmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBEcmF3Q2FwdGlvbjE2KCkgYW5kIERyYXdDYXB0aW9uVGVtcDE2KCkuCgoJKiB3aW5kb3dzL2tleWJvYXJkLmM6IERhdmlkIEZhdXJlIDxEYXZpZC5GYXVyZUBpbnNhLWx5b24uZnI+CglGaXhlZCB3YXJuaW5nLgoKCSogZ3JhcGhpY3MvcHNkcnYvTWFrZWZpbGUuaW4sIGdyYXBoaWNzL3BzZHJ2L2JpdG1hcC5jLCBncmFwaGljcy9wc2Rydi9icnVzaC5jLCBncmFwaGljcy9wc2Rydi9mb250LmMsIGdyYXBoaWNzL3BzZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL3BzZHJ2L2luaXQuYywgZ3JhcGhpY3MvcHNkcnYvcHMuYywgaW5jbHVkZS9nZGkuaCwgaW5jbHVkZS9wc2Rydi5oLCBvYmplY3RzL2RpYi5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglBZGRzIEFyYywgQ2hvcmQsIEdldENoYXJXaWR0aCwgUGllLCBQb2x5UG9seWdvbiwgUG9seVBvbHlsaW5lLCBSb3VuZFJlY3QsCglTZXRQaXhlbCwgaGF0Y2hlZCBicnVzaGVzIGFuZCBhIHN0dWIgZm9yIFN0cmV0Y2hESUJpdHMgdG8gdGhlIFBvc3RTY3JpcHQKCWRyaXZlci4KCgkqIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgaW5jbHVkZS9taXNjZW11LmgsIG1zZG9zL01ha2VmaWxlLmluLCBtc2Rvcy9pbnRlcnJ1cHRzLmM6CglKb3NlcGggUHJhbmV2aWNoIDxrbmlnaHRAYmFsdGltb3JlLnd3YXZlcy5jb20+CglBZGRlZCBzdXBwb3J0IGZvciBpbnQxNyBhbmQgaW50MTkuCgoJKiBtc2Rvcy9pbnQxOS5jOiBDYXJsIHZhbiBTY2hhaWsgPGNhcmxAZHJlYW1jb2F0LmNoZS51Y3QuYWMuemE+CglTdHVicyBmb3IgZG9zIG1vZGUgcmVib290IGludGVycnVwdC4KCgkqIG1zZG9zL2ludDE3LmM6IENhcmwgdmFuIFNjaGFpayA8Y2FybEBkcmVhbWNvYXQuY2hlLnVjdC5hYy56YT4KCVNvbWUgcHJpbnRlciBzdHVicyBmb3IgRE9TIGFkZGVkLgoKCSogbXNkb3MvaW50MTMuYzogSm9zZXBoIFByYW5ldmljaCA8a25pZ2h0QGJhbHRpbW9yZS53d2F2ZXMuY29tPgoJTW9yZSBzdHVicyBhZGRlZC4gVGhlc2UgY2hhbmdlcyBhcmUgb25seSBwYXJ0aWFsbHkgbWluZSwgSSBqdXN0IG1hZGUKCXRoZW0gY29tcGlsZS4KCgkqIG1zZG9zL2ludDEwLmM6IEpvc2VwaCBQcmFuZXZpY2ggPGtuaWdodEBiYWx0aW1vcmUud3dhdmVzLmNvbT4KCUFkZGVkIHNvbWUgdHJhY2VzIGFuZCBjbGVhbmVkIHVwIGEgY291cGxlIG9mIHRoaW5ncy4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGxmb2xkZXIuYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYywgaW5jbHVkZS9zaGVsbC5oLCBpbmNsdWRlL3NobG9iai5oLCBtZW1vcnkvc3RyaW5nLmMsIG9sZS9vbGUybmxzLmMsIHJlbGF5MzIvc2hlbGwzMi5zcGVjLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jLCBkbGxzL3NoZWxsMzIvZW51bWlkbGlzdC5jLCBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUNoYW5nZWQgc29tZSBzdHJpbmctc2hlbGwzMiBmdW5jdGlvbnMgdG8gMzJBVywgcGFyYW1ldGVyIGFyZQoJb3MgZGVwZW5kaW5nIDMyQSBvciAzMlcgKC13aW52ZXIgbnQzNTEgb3IgbnQ0MCksIHNvbWUgbmV3IGZ1bmN0aW9ucy4KCVNvbWUgZml4ZXMgaW4gb2xlMm5scy4KCU5ldyBPTEUyTkxTX0NoZWNrTG9jYWxlKCkgdG8gaGFuZGxlIExvY2FsZV9Vc2VyX0RlZmF1bHQgYW5kCglMb2NhbGVfU3lzdGVtX0RlZmF1bHQuCglTaGVsbDMyIG5vdyBkeW5hbWljbHkgbGlua3MgdG8gRFBBXyooKSwgY29tZGxnMzIgd29ya3MgYWdhaW4KCShjb21jdGwzMiBoZWFwIGFsbG9jIHBhdGNoIGJyb2tlIGl0KS4KCgkqIGluY2x1ZGUvd2ludmVyc2lvbi5oLCBtaXNjL3ZlcnNpb24uYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQWRkZWQgVkVSU0lPTl9Jc09zVW5pY29kZSgpLgoKCSogc2NoZWR1bGVyL2hhbmRsZS5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJTW9yZSBvZmYtYnktb25lIGVycm9ycyBmaXhlZC4KCgkqIGluY2x1ZGUvZmlsZS5oLCBtaXNjL2NydGRsbC5jLCBtc2Rvcy92eGQuYywgd2luMzIvZmlsZS5jLCBmaWxlcy9maWxlLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaWxlIHNoYXJpbmcgZml4ZXMuCgpGcmkgT2N0IDIzIDE3OjI2OjQ0IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtaXNjL2NvbW1kbGcuYzogTmljayBIb2xsb3dheSA8YWxmaWVAYWxmaWUuZGVtb24uY28udWs+CglCdWcgZml4LgoKCSogbG9hZGVyL2Rvcy9tb2R1bGUuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglGaXhlZCBET1MgZW52aXJvbm1lbnQgcGFzc2luZy4KCgkqIG1pc2MvbWFpbi5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN5c21ldHJpY3MzMlcgZm9yIFNQSV9HRVRJQ09OVElUTEVMT0dGT05UIHJldHVybnMgY29ycmVjdCBmb250bmFtZS4KCgkqIGluY2x1ZGUvZm9udC5oLCBvYmplY3RzL2ZvbnQuYywgb2JqZWN0cy9nZGlvYmouYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IEZPTlRfR2V0T2JqZWN0MzJXKCksIEdldE9iamVjdDMyVygpLgoKCSogcmVsYXkzMi91c2VyMzIuc3BlYywgd2luMzIvb3JkaW5hbHMuYywgd2luZG93cy91c2VyLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBzdHViIFJlZ2lzdGVyVGFza0xpc3QuCglOZXcgZnVuY3Rpb24gRW51bURpc3BsYXlTZXR0aW5nczMyVygpLgoKCSogbWlzYy9udGRsbC5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1vcmUgcGFyYW1ldGVyIGNoZWNraW5nIGluIFJsdENvcHlTaWQuCgoJKiB3aW5kb3dzL3dpbnByb2MuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglNb3JlIG1lc3NhZ2UgbWFwcGluZyAzMkE8LS0+MzJXIGZvciBFTV8sIENCXywgTEJfIGZvciBVbmljb2RlLgoKCSogcmVsYXkzMi8uY3ZzaWdub3JlLCByZWxheTMyL01ha2VmaWxlLmluLCByZWxheTMyL2F2aWZpbDMyLnNwZWMsIHJlbGF5MzIvYnVpbHRpbjMyLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkIG5ldyBkbGwgYXZpZmlsMzIuZGxsLgoKCSogbG9hZGVyL2Rvcy9kb3N2bS5jLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBtc2Rvcy9kcG1pLmMsIGluY2x1ZGUvZG9zZXhlLmg6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUZpcnN0IHNob3QgYXQgRFBNSSByZWFsbW9kZSBjYWxscy4KCgkqIGxvYWRlci9tb2R1bGUuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJRml4ZWQgc2V2ZXJhbCBidWdzIHdpdGggRExMIGluaXRpYWxpemF0aW9uLgoKVGh1IE9jdCAyMiAxNzowMjoyNSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogc2NoZWR1bGVyL3N5c2xldmVsLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgb3JkaW5hbCBmb3IgdHdvIHN5c2xldmVsIGZ1bmN0aW9ucy4KCgkqIG11bHRpbWVkaWEvbWlkaS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFub3RoZXIgbWlzc2luZyBXSU5BUEkuCgoJKiBpbmNsdWRlL21tc3lzdGVtLmg6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU21hbGwgY29ycmVjdGlvbnMgaW4gbW1pbyBkZWNsYXJhdGlvbnMuCgoJKiBsb2FkZXIvcGVfaW1hZ2UuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglUYWtlIHZpcnR1YWwgc2l6ZXMgaW4gYWNjb3VudCBmb3IgdGhlIHRvdGFsIHZtYSBzaXplLgoKCSogb2xlL25scy9yb20ubmxzOiBEaW1pdHJpZSBPLiBQYXVuIDxkaW1pQGNzLnRvcm9udG8uZWR1PgoJQWRkIHNvbWUgbW9yZSBOTFMgZGVmaW5pdGlvbnMgZm9yIHRoZSBSb21hbmlhbiBsYW5ndWFnZS4KCgkqIG11bHRpbWVkaWEvZHNvdW5kLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU29tZSBwcm9ncmFtcyAocXVha2UyIGV0IGFsKSBkbyBjaGVjayBmb3IgRFNDQVBTX0VNVUxEUklWRVIgYW5kIHN0b3AKCXRvIHdvcmsuICdBZGp1c3QnIGNhcHMgZmxhZ3MgYWNjb3JkaW5nbHkuCgoJKiBvbGUvY29tcG9iai5jLCByZWxheTMyL29sZTMyLnNwZWM6CglQZXRlIFJhdHpsYWZmIDxwcmF0emxhZmZAY2ZhLmhhcnZhcmQuZWR1PgoJU3R1YiBmb3IgQ29DcmVhdGVHdWlkKCkuCgoJKiBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmMsIG11bHRpbWVkaWEvbWNpY2RhLmM6CglCcmlhbiBMaXR6aW5nZXIgPGJyaWFuQGxpdHppbmdlci5jb20+CglGaXhlcyBmb3IgRnJlZUJTRC4KCgkqIGxpYnRlc3QvLmN2c2lnbm9yZSwgbGlidGVzdC9NYWtlZmlsZS5pbjoKCVBldHRlciBSZWluaG9sZHRzZW4gPHBlcmVAbWluZXJ2YS5jYy51aXQubm8+CglNYWtlIHN1cmUgaGVsbG8zcmVzLmggaXMgZ2VuZXJhdGVkIGV2ZW4gaWYgJ21ha2UgZGVwZW5kJyBuZXZlciBoYXMKCWJlZW4gcnVuLgoKCSogd2luZG93cy9ub25jbGllbnQuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglGaXhlZCBtb3ZpbmcgYW5kIHNpemluZyBvZiBjaGlsZCB3aW5kb3dzLgoKCSogaW5jbHVkZS90c194bGliLmgsIHRvb2xzL21ha2VfWDExd3JhcHBlcnMsIHRzeDExL1gxMV9jYWxscywgdHN4MTEvdHNfeGxpYi5jLCB3aW5kb3dzL2tleWJvYXJkLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVhRdWVyeUtleW1hcCAtPiBUU1hRdWVyeUtleW1hcCAoZml4ZXMgdGhlIFhJTyBlcnJvcnMgcmVwb3J0ZWQpLgoKV2VkIE9jdCAyMSAxNzoyMDo0OCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS9kb3NleGUuaCwgbG9hZGVyL2Rvcy9kb3N2bS5jLCBtaXNjZW11L21haW4uYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQWRkZWQgaW5kaXJlY3Rpb24gZm9yIGN0eF9kZWJ1ZyB0byB0aGUgRE9TIGxvYWRlciwgc28gV2luZWxpYiB3b3JrcwoJYWdhaW4uCgoJKiBtZW1vcnkvdmlydHVhbC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVN1cHBvcnQgYW5vbiBzaGFyZWQgbWFwcGluZ3MgdXNpbmcgdGVtcG9yYXJ5IGZpbGVzICh3b250IGJlIGRlbGV0ZWQKCXlldCkuCgoJKiBtaXNjL21haW4uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglXYXMgZnJlZWluZyB0aGUgaW5jb3JyZWN0IHBvaW50ZXJzIC0+IGNyYXNoIGluIG1hbGxvY3MvZnJlZXMuCgoJKiBmaWxlcy9kb3NfZnMuYywgcmVsYXkzMi9rZXJuZWwzMi5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglEZWZpbmVEb3NEZXZpY2Ugc3R1YiBhZGRlZC4KCgkqIG1pc2NlbXUvbWFpbi5jLCB3aW5lLmluaTogQ2hhZCBQb3dlbGwgKHB4cHhAdXNhLm5ldCkKCUFkZGVkIGEgZGVmYXVsdCBwcm9ncmFtIG9wdGlvbiBpbiB3aW5lLmNvbmYgaW4gc2VjdGlvbiBbcHJvZ3JhbXNdIGtleQoJRGVmYXVsdC4KCgkqIGluY2x1ZGUvd2ludHlwZXMuaDogRGF2aWQgQ3V0aGJlcnQgPGRhY3V0QGVjZS5jbXUuZWR1PgoJQmV0dGVyIGZpeCBmb3IgdGhpc19pc19hX3N5bnRheF9lcnJvci4KCgkqIG9sZS9ubHMvKi5ubHM6CglQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KCUFkZGVkIHRoZSBlbnRyaWVzIGZvciBMT0NBTEVfU0lTTzYzOUxBTkdOQU1FIGFuZAoJTE9DQUxFX1NJU08zMTY2Q1RSWU5BTUUuCgoJKiBkb2N1bWVudGF0aW9uL3dpbmUubWFuOiBKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglVcGRhdGVkIG1hbnBhZ2UuCgoJKiByZWxheTMyL21zYWNtMzIuc3BlYzogUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglGaXhlZCB3cm9uZyBvcmRpbmFscy4KCgkqIG9iamVjdHMvcmVnaW9uLmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJRml4ZWQgYSBidWcgaW4gUmVjdEluUmVnaW9uLgoKVHVlIE9jdCAyMCAxNToyNjoyNiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbXNkb3MvaW50ZXJydXB0cy5jOiBORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCVJlbW92ZWQgYW4gaW5jb3JyZWN0IGVycm9yIG1lc3NhZ2UuCgoJKiBmaWxlcy9kcml2ZS5jOiBQZXR0ZXIgUmVpbmhvbGR0c2VuIDxwZXJlQG1pbmVydmEuY2MudWl0Lm5vPgoJTWFrZSBzdXJlIHRoZSBhY2Nlc3MgZnVuY3Rpb25zIGFyZSBhbHdheXMgdXNlZCB0byBnZXQgbGFiZWwgYW5kIHNlcmlhbAoJbnVtYmVyLgoKTW9uIE9jdCAxOSAwODo0ODoyNCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogb2xlL29sZTJubHMuYzogRXJpYyBQb3VlY2ggPGVyaWMucG91ZWNoQGhvbC5mcj4KCUZpeGVkIGJ1ZyBvbiBwbGF0Zm9ybXMgd2VyZSBidWZmZXJzIHJldHVybmVkIGJ5IGdldGVudigpIHNoYWxsIG5vdCBiZQoJZnJlZSgpJ2VkLiBBZGRlZCBGcmVuY2ggKGRlZmF1bHQpIGluIGxvY2FsZSBoYW5kbGluZy4KCgkqIGluY2x1ZGUvd2ludHlwZXMuaDogRGF2ZSBDdXRoYmVydCA8ZGFjdXRAZWNlLmNtdS5lZHU+CglDaGFuZ2VkICJ0aGlzIGlzIGEgc3ludGF4IGVycm9yIiB0byAidGhpc19pc19hX3N5bnRheF9lcnJvciIgdG8gbWFrZSBhCgljb21waWxlLXRpbWUgZXJyb3IgbWVzc2FnZSBtYWtlIG1vcmUgc2Vuc2UuCgoJKiBzY2hlZHVsZXIvaGFuZGxlLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlZCBvZmYgYnkgb25lIGVycm9yIGluIEhBTkRMRV9HZXRPYmpQdHIuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBPY3QgMTggMTQ6NDg6MzEgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGZpbGVzL2ZpbGUuYzogVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJVHJ5IHRvIGltcGxlbWVudCB0aGUgT0ZfU0hBUkVfWFhYIG9wdGlvbnMuCglNb3ZlIHRoZSBtb2RlIHRyYW5zbGF0aW9ucyB0byBmdW5jdGlvbnMuCgoJKiBpbmNsdWRlL21haW4uaCwgb2xlL2NvbXBvYmouYywgb2xlL2lmcy5jLCBvbGUvb2xlMmRpc3AuYywgb2xlL29sZTJubHMuYywgb2xlL29sZXN2ci5jLCBvbGUvc3RvcmFnZS5jOgoJTWF0dGhldyBCZWNrZXIgPG1iZWNrZXJAZ2xhc3NjaXR5Lm5ldD4KCURvY3VtZW50YXRpb24gdXBkYXRlcy4KCgkqIG9sZS9jb21wb2JqLmMsIHJlbGF5MzIvb2xlMzIuc3BlYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFkZGVkIHN0dWIgZm9yIENvU2V0U3RhdGUzMi4KCgkqIG1pc2NlbXUvbWFpbi5jOiBDaGFkIFBvd2VsbCA8cHhweEB1c2EubmV0PgoJQWRkZWQgYWJpbGl0eSB0byByZWFkIGEgc3RhcnR1cCBwcm9ncmFtIGZyb20gd2luZS5pbmkgZmlsZS4KCVB1dCBpdCBpbiBzZWN0aW9uIFtwcm9ncmFtc10ga2V5IFN0YXJ0dXAuCgoJKiBpbmNsdWRlL3RyYWNrYmFyLmgsIGluY2x1ZGUvdHJlZXZpZXcuaCwgZGxscy9jb21jdGwzMi90cmFja2Jhci5jLCBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmM6CglBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgoJRnVydGhlciBpbXByb3ZlbWVudHMuCgoJKiBpbmNsdWRlL2N1cnNvcmljb24uaCwgb2JqZWN0cy9jdXJzb3JpY29uLmM6CglUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KCUltcGxlbWVudGVkIExvYWRDdXJzb3JGcm9tRmlsZSwgZml4ZWQgRHJhd0ljb25FeCB0byBzdXBwb3J0IG9mZnNjcmVlbgoJZHJhd2luZywgZml4ZWQgQ1VSU09SSUNPTl9DcmVhdGVGcm9tUmVzb3VyY2UgdG8gc3VwcG9ydCBMUl8gc2VtYW50aWNzLgoKCSogaW5jbHVkZS9iaXRtYXAuaCwgb2JqZWN0cy9iaXRtYXAuYzoKCVR1cmNoYW5vdiBTZXJnZXkgPHR1cmNoYW5vdkB1c2EubmV0PgoJRml4ZWQgTG9hZEltYWdlIHRvIHN1cHBvcnQgYWxtb3N0IGFsbCBMUl8gZmxhZ3MuCgoJKiBvYmplY3RzL2RpYi5jOiBUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KCUZpeGVkIGJ1ZyBpbiBESUJfU2V0SW1hZ2VCaXRzX1JMRTggKGJlY2F1c2UgJ2NvbG9yJyB2YXIgd2FzIFdPUkQsIGFsbAoJQ09MT1JFRnMgaGFkIHJlZCBwYXJ0IHplcm9lZCkgdGhhdCBtYWRlIHBsZW50eSBvZiBjeWFuIGNvbG9ycywgbWlub3IKCWJ1ZyBmaXhlcywgY2hhbmdlcyB0byBzdXBwb3J0IExSXyBmbGFncy4KCgkqIGluY2x1ZGUvZ2xvYmFsLmgsIG1lbW9yeS92aXJ0dWFsLmM6CglUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KCUFkZGVkIFZJUlRVQUxfTWFwRmlsZVcgdG8gbWFwIGZpbGUgdG8gbWVtb3J5IGluIG9uZSBmdW5jdGlvbiBjYWxsLgoKCSogaW5jbHVkZS9kZHJhdy5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW50eXBlcy5oLCB3aW5kb3dzL211bHRpbW9uLmM6CglUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KCU1vdmVkIE11bHRpbW9uaXRvciBBUEkgZGVjbGFyYXRpb25zIHRvIHdpbmRvd3MuaC4KCgkqIGlmMTYzMi91c2VyLnNwZWMsIGluY2x1ZGUvZHJpdmVyLmgsIG11bHRpbWVkaWEvYXVkaW8uYywgbXVsdGltZWRpYS9tY2lhbmltLmMsIG11bHRpbWVkaWEvbWNpY2RhLmMsIG11bHRpbWVkaWEvbWlkaS5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIHJlbGF5MzIvd2lubW0uc3BlYywgd2luZG93cy9kcml2ZXIuYzoKCVR1cmNoYW5vdiBTZXJnZXkgPHR1cmNoYW5vdkB1c2EubmV0PgoJSW1wbGVtZW50ZWQgRGVmRHJpdmVyUHJvYzMyIGZyb20gd2lubW0uZGxsLgoKCSogY29udHJvbHMvc2Nyb2xsLmMsIGluY2x1ZGUvc2Nyb2xsLmgsIHdpbmRvd3MvbWRpLmMsIHdpbmRvd3Mvbm9uY2xpZW50LmM6CglBbGV4IEtvcm9ia2EgPGtvcm9ia2FAYW1zLnN1bnlzYi5lZHU+CglHb3QgcmlkIG9mIGZsaWNrZXJpbmcgc2Nyb2xsYmFyIGFycm93cy4gTURJIHNjcm9sbGluZyBzcGVlZGVkIHVwIGEKCWJpdC4KCgkqIGluY2x1ZGUvd2lubmxzLmgsIG9sZS9ubHMvZGV1Lm5scywgb2xlL29sZTJubHMuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJR2V0TG9jYWxlSW5mbzMyQSBjYW4gaGFuZGxlIGxlbj0wIG5vdywgc2V0cyBMYXN0RXJyb3IgYW5kIHRvdWNoZXMKCWJ1ZmZlciBvbmx5IHdoZW4gbmVjZXNzYXJ5LgoJVXBkYXRlZCBkZXUubmxzIGFuZCBzb21lIExDVFlQRVMgaW4gd2lubmxzLmguCgoJKiBpZjE2MzIvcmVsYXkuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUNhbGxQcm9jW0V4XTMyVyBjYWxsZWQgd2l0aCBscFByb2NBZGRyZXNzPT1OVUxMIHNob3VsZCByZXR1cm4gemVybyBhbmQKCW5vdCBjcmFzaC4KClNhdCBPY3QgMTcgMTM6MDc6NDggMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGRsbHMvY29tY3RsMzIvY29tbWN0cmwuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglSZWR1Y2VkIGh1Z2UgKDFHQikgaGVhcCBjcmVhdGlvbiB0aGF0IGNhdXNlZCBTdGFyY3JhZnQgdG8gZmFpbC4KCgkqIGluY2x1ZGUvZG9zZXhlLmgsIGluY2x1ZGUvbW9kdWxlLmgsIGxvYWRlci9kb3MvZG9zdm0uYywgbXVsdGltZWRpYS9kcGxheS5jLCB3aW5kb3dzL2RpYWxvZy5jOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglDb21waWxlIGZpeCBmb3IgU29sYXJpcy4KCgkqIG11bHRpbWVkaWEvbWlkaS5jOiBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCUNvbXBpbGUgZml4IGZvciBub24gT1NTIHN5c3RlbXMuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCUNvbXBpbGUgZml4IGZvciBub24gWEY4Ni1ER0Egc3lzdGVtcy4KCgkqIGxpYnRlc3QvTWFrZWZpbGUuaW4sIGxpYnRlc3Qvdm9saW5mby5jOgoJUGV0dGVyIFJlaW5ob2xkdHNlbiA8cGVyZUB0ZC5vcmcudWl0Lm5vPgoJTmV3IGZpbGUgdG8gdGVzdCBEUklWRV9HZXRMYWJlbC4KCgkqIG11bHRpbWVkaWEvbWNpY2RhLmM6IFBldGVyIEh1bm5pc2V0dCA8aHVubmlzZUBub3J0ZWwuY2E+CglTbWFsbCwgc3Vib3B0aW1hbCwgZml4IGZvciAzMiBiaXQgY2RhdWRpbyBvcGVuIHJvdXRpbmVzLiBOZWVkcyBwcm9wZXIKCTMyYml0IGNkYXVkaW8gYml0IHN1cHBvcnQgYmVmb3JlIGl0IGNhbiBiZSByZW1vdmVkLi4uCgoJKiBncmFwaGljcy9kZHJhdy5jOiBQZXRlciBIdW5uaXNldHQgPGh1bm5pc2VAbm9ydGVsLmNhPgoJQWRkZWQgYSBidW5jaCBvZiBzdHVicyBmb3IgZGRyYXcgc3VmYWNlIHJvdXRpbmVzLiBBbGwgc3R1YnMgZm9yCglzdXJmYWNlIHByZXNlbnQgbm93LgoJQ29tbWVudGVkIG91dCBtZXNzYWdlIHB1bXAgY2FsbHMuIEkgZG9uJ3Qgc2VlIGEgcmVhc29uIGZvciB0aGVtIGJlaW5nCgl0aGVyZS4gRXZlcnl0aGluZyB3b3JrcyBmaW5lIHdpdGggLWRlc2t0b3AgYW5kIC1tYW5hZ2VkIHN0aWxsIGhhcwoJcHJvYmxlbXMuIERpc2FncmVlbWVudHM/CgoJKiBvbGUvb2xlMm5scy5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVkIEdldExvY2FsZUluZm8zMkEgZm9yIG90aGVyIGxhbmd1YWdlcyB0aGFuIGVuX3VrLgoJTWFkZSBpdCByZWNvZ25pc2UgTE9DQUxFX1NZU1RFTV9ERUZBVUxULCBMT0NBTEVfU1lTVEVNX0RFRkFVTFQgYW5kCglsYXN0IGJ1dCBub3QgbGVhc3QgdGhlIGZpcnN0IGFyZ3VtZW50IGxjaWQgd2hlcmUgaXMgYWxsIGFib3V0Li4uCgoJKiBpbmNsdWRlL3N5c2xldmVsLmgsIG1pc2MvcmVnaXN0cnkuYywgbXVsdGltZWRpYS9kcGxheS5jLCBtdWx0aW1lZGlhL2Rzb3VuZC5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIG11bHRpbWVkaWEvdGltZS5jLCB3aW5kb3dzL2NhcmV0LmMsIGRsbHMvbXNhY20zMi9idWlsdGluLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeGVkIHNvbWUgbW9yZSBtaXNzaW5nIFdJTkFQSXMgKGhvcGVmdWxseSBjb3JyZWN0KS4KCgkqIG9sZS9vbGUybmxzLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgdGhlID0gLT4gPT0gYnVnLgoKCSogbXNkb3MvaW50MmYuYzogSm9zZXBoIFByYW5ldmljaCA8a25pZ2h0QGJhbHRpbW9yZS53d2F2ZXMuY29tPgoJU2hlbGwgcGFyYW1ldGVycyAoY29uZmlnLnN5cykgYW5kIEFOU0kgc3VwcG9ydCBzdHVicy4KCgkqIG1zZG9zL01ha2VmaWxlLmluOiBKb3NlcGggUHJhbmV2aWNoIDxrbmlnaHRAYmFsdGltb3JlLnd3YXZlcy5jb20+CglBZGRlZCBpbnQxNi5jIGFuZCBpbnQyOS5jLgoKCSogaW5jbHVkZS9taXNjZW11LmgsIG1zZG9zL2ludGVycnVwdHMuYzoKCUpvc2VwaCBQcmFuZXZpY2ggPGtuaWdodEBiYWx0aW1vcmUud3dhdmVzLmNvbT4KCU1vcmUgaW50ZXJydXB0cyB0aGF0IGNhbiBiZSBkb25lIGZyb20gRE9TIG1vZGUuCgoJKiBtc2Rvcy9pbnQyOS5jOiBKb3NlcGggUHJhbmV2aWNoIDxrbmlnaHRAYmFsdGltb3JlLnd3YXZlcy5jb20+CglBZGRlZCBpbnQyOSAoRmFzdCBXcml0ZSB0byBTY3JlZW4pIHN1cHBvcnQuCgoJKiBtc2Rvcy9pbnQxNi5jLCBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmg6CglKb3NlcGggUHJhbmV2aWNoIDxrbmlnaHRAYmFsdGltb3JlLnd3YXZlcy5jb20+CglBZGRlZCBpbnQxNiAoS2V5Ym9hcmQpIHN1cHBvcnQsIG1vc3RseSBzdHVicy4KCkZyaSBPY3QgMTYgMTU6NDA6MjEgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHJlbGF5MzIvc2hlbGwzMi5zcGVjLCBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGluY2x1ZGUvc2hsb2JqLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1hbnkgYnVnZml4ZXMsIG5ldyBzdHVicyBTSEdldFJlYWxJREwsIFNIUmVnUXVlcnlWYWx1ZTMyVywKCVNIUmVnUXVlcnlWYWx1ZUV4MzJXLCBTdHJSZXRUb1N0ck4sIFN0ckNoclcsIFNIQWxsb2NTaGFyZWQsCglTSExvY2tTaGFyZWQsIFNIVW5sb2NrU2hhcmVkLCBTSEZyZWVTaGFyZWQsIFNldEFwcFN0YXJ0aW5nQ3Vyc29yMzIsCglTSExvYWRPTEUzMiwgU2hlbGxfTWVyZ2VNZW51czMyLCBQYXRoR2V0RHJpdmVOdW1iZXIzMiwgRHJpdmVUeXBlMzIsCglTSEFib3J0SW52b2tlQ29tbWFuZCwgU0hPdXRPZk1lbW9yeU1lc3NhZ2VCb3gsIFNIRmx1c2hDbGlwYm9hcmQuCgoJKiBtaXNjL250ZGxsLmMsIHJlbGF5MzIvbnRkbGwuc3BlYzoKCURpZXRtYXIgS2xpbmcgPGRpZXRtYXIua2xpbmdAdXNhLm5ldD4KCUFkZGVkIHVuZG9jdW1lbnRlZCBmdW5jdGlvbiBSdGxPcGVuQ3VycmVudFVzZXIuCgoJKiBvYmplY3RzL2N1cnNvcmljb24uYywgbWlzYy9zaGVsbC5jLCBtaXNjL3Zlci5jLCBtaXNjL3ZlcnNpb24uYywgbG9hZGVyL2VsZi5jLCBsb2FkZXIvbW9kdWxlLmMsIGxvYWRlci9wZV9pbWFnZS5jLCBsb2FkZXIvcGVfcmVzb3VyY2UuYywgaW5jbHVkZS9uZWV4ZS5oLCBpbmNsdWRlL3BlX2ltYWdlLmgsIGluY2x1ZGUvcGVleGUuaCwgZGVidWdnZXIvZGJnbWFpbi5jLCBkZWJ1Z2dlci9tc2MuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVJlbmFtZWQgYWxsIExQSU1BR0VfKiB0eXBlcyB0byBQSU1BR0VfKi4KClRodSBPY3QgMTUgMTM6MDM6MTAgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbmRvd3Mvd2lucG9zLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglGaXhlZCBhbiBlcnJvciB3aGVuIGFuIG93bmVkIHdpbmRvdyBhY3RpdmF0ZXMgaXRzIG93bmVyIGR1cmluZwoJY3JlYXRpb24uCgoJKiB3aW5kb3dzL2RlZmRsZy5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJQ2xvc2luZyBhIGRpYWxvZyB1c2luZyB0aGUgbWVudSBiYXIgKCJ4IiBvciAiLSIgYnV0dG9uIG9yIHdpbmRvd3MKCW1lbnUpIG11c3QgZ2VuZXJhdGUgYSBXTV9DT01NQU5EK0lEQ0FOQ0VMIG1lc3NhZ2UsIHVubGlrZSBjbG9zaW5nCglub3JtYWwgd2luZG93cyB3aGVuIERlc3Ryb3lXaW5kb3coKSBpcyBjYWxsZWQuCgoJKiBkbGxzL3NoZWxsMzIvcGlkbC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGRlZCBtaXNzaW5nIFdJTkFQSXMuCgoJKiB3aW5kb3dzL3dpbnBvcy5jLCB3aW4zMi9vcmRpbmFscy5jLCByZWxheTMyL3VzZXIzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3R1YnMgUHJpdmF0ZUV4dHJhY3RJY29uRXhbQVddLCBQcml2YXRlRXh0cmFjdEljb25zVywKCVJlZ2lzdGVyU2hlbGxIb29rV2luZG93LCBEZXJlZ2lzdGVyU2hlbGxIb29rV2luZG93LCBHZXRQcm9nbWFuV2luZG93LAoJR2V0VGFza21hbldpbmRvdywgU2V0UHJvZ21hbldpbmRvdywgU2V0U2hlbGxXaW5kb3dFeCwKCVNldFRhc2ttYW5XaW5kb3cuCgoJKiByZWxheTMyL250ZGxsLnNwZWMsIG1pc2MvbnRkbGwuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IHN0dWJzIE50UXVlcnlJbmZvcm1hdGlvblRocmVhZCwgTnRRdWVyeUluZm9ybWF0aW9uVG9rZW4sCglSdGxBbGxvY2F0ZUFuZEluaXRpYWxpemVTaWQsIFJ0bEVxdWFsU2lkLCBSdGxGcmVlU2lkLgoKCSogbXVsdGltZWRpYS9tbXN5c3RlbS5jOiBUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KCUZpeGVkIFBsYXlTb3VuZCB0byBzdGFydCBpdHMgdGhyZWFkIHRoZSByaWdodCB3YXkuCgpXZWQgT2N0IDE0IDE4OjQwOjM1IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBjb250cm9scy9jb21iby5jLCBjb250cm9scy9saXN0Ym94LmM6CglBbGV4IEtvcm9ia2EgPGtvcm9ia2FAYW1zLnN1bnlzYi5lZHU+CglDQl9TRVRDVVJTRUwgYW5kIHNvbWUgb3RoZXIgZml4ZXMuCgoJKiB3aW5kb3dzL3F1ZXVlLmM6IEFsZXggS29yb2JrYSA8a29yb2JrYUBhbXMuc3VueXNiLmVkdT4KCUJldHRlciBRVUVVRV9GbHVzaE1lc3NhZ2VzKCkuCgoJKiByZWxheTMyL2dkaTMyLnNwZWMsIG9iamVjdHMvZm9udC5jLCBpbmNsdWRlL3dpbmRvd3MuaCwgaWYxNjMyL2dkaS5zcGVjOgoJTW9zaGUgVmFpbmVyIDxtb3NoZXZAZWFzeWJhc2UuY29tPgoJUGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBHZXRPdXRsaW5lVGV4dE1ldHJpY3MzMkEuCglBZGRlZCBzdHJ1Y3R1cmVzIGZvciBPVVRMSU5FVEVYVE1FVFJJQ1MuCgoJKiBvYmplY3RzL2RjLmMsIGluY2x1ZGUvZ2RpLmgsIGdyYXBoaWNzL3gxMWRydi9iaXRibHQuYywgZ3JhcGhpY3MveDExZHJ2L2JpdG1hcC5jLCBncmFwaGljcy94MTFkcnYvaW5pdC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglEbyBub3QgY2xpcCBzb3VyY2UgcmVjdGFuZ2xlIGV2ZW4gYnkgdmlzaWJsZSByZWdpb24gZm9yIGJpdGJsdHMuCglBZGRlZCBmaWVsZCAndG90YWxFeHRlbnQnIHRvIFdJTl9EQ19JTkZPLgoKCSogbXNkb3MvdnhkLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRkZWQgc3R1YiBmb3IgVk1NIFBNIEFQSSBBSD0wMjZbZGVdIChuZXZlciBzYXkgJ3NhZmUgbW9kZScpLgoKCSogbWVtb3J5L2hlYXAuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IExvY2FsMzJGcmVlIGNhdXNlZCBmcmVlIGhhbmRsZXMgbGlzdCBjb3JydXB0aW9uLgoKCSogaW5jbHVkZS9kZWJ1Z3Rvb2xzLmg6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgLS1kaXNhYmxlLWRlYnVnIGNvbmZpZyBvcHRpb24uCgpUdWUgT2N0IDEzIDEyOjUwOjA0IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CglQZXR0ZXIgUmVpbmhvbGR0c2VuIDxwZXJlQHRkLm9yZy51aXQubm8+CglBZGRlZCBzdHVicyBTSFJlZ0Nsb3NlS2V5KCksIFNIUmVnT3BlbktleVtBV10oKSwgU0hSZWdRdWVyeVZhbHVlRXhBKCkKCWFuZCBGaWxlSWNvbkluaXQoKSBuZWVkZWQgYnkgV2luOTUgZXhwbG9yZXIuCgpNb24gT2N0IDEyIDA3OjI1OjU0IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW5kb3dzL2RpYWxvZy5jLCBjb250cm9scy9idXR0b24uYywgY29udHJvbHMvbWVudS5jOgoJTm9ybWFuIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJSW1wcm92aW5nIGtleWJvYXJkIGhhbmRsaW5nLCBpbmNsdWRpbmcgYWNjZWxlcmF0b3Iga2V5cyBpbiBkaWFsb2cKCWJveGVzLiBBbHNvIGZpeGVzIGVudGVyIGtleSBpbiBBZ2VudDMyIGVkaXQgYm94LgoKU3VuIE9jdCAxMSAxOTozNzoyMyAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbWlzYy9jb21tZGxnLmM6IEVyaWMgUG91ZWNoICA8ZXJpYy5wb3VlY2hAbGVtZWwuZnI+CglBZGRlZCBzdXBwb3J0IGluIGZpbGUgZGlhbG9nIGJveGVzIGhhbmRsaW5nIGZvciBmaWx0ZXJzIGxpa2UKCSIqLnR4dDsqLmJhdCIuCgoJKiB3aW4zMi9rZXJuZWwzMi5jLCBzY2hlZHVsZXIvdGhyZWFkLmMsIGxvYWRlci9tb2R1bGUuYywgbG9hZGVyL3BlX2ltYWdlLmMsIGxvYWRlci90YXNrLmMsIGluY2x1ZGUvbW9kdWxlLmgsIGluY2x1ZGUvcGVfaW1hZ2UuaDoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgbmV3IFBFIERMTCBpbml0YWxpemF0aW9uIGNvZGUsIHRyeWluZyB0byBjYWxsIHRoZQoJRGxsRW50cnlQb2ludCByb3V0aW5lcyBhbHdheXMgaW4gY29ycmVjdCBvcmRlciA6LSkKCUJ5cGFzcyBzbm9vcGluZyB3aGVuIGdldHRpbmcgZGF0YSBidWZmZXIgYWRkcmVzc2VzICh0aHVuayBidWZmZXJzLAoJX19HUCBoYW5kbGVycykgYW5kIGZvciAzMi1iaXQgcm91dGluZXMgZGlyZWN0bHkgY2FsbGVkIGZyb20gMTYtYml0CgkoZHVlIHRvIHN0YWNrIGFkZHJlc3Mgc2l6ZSBwcm9ibGVtcykuCgoJKiB3aW4zMi9vcmRpbmFscy5jLCByZWxheTMyL2tlcm5lbDMyLnNwZWMsIGxvYWRlci9uZS9tb2R1bGUuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgQ29tbW9uVW5pbXBTdHViLCBNYXBISW5zdChMU3xTTClfUE4sIFczMlNfQmFja1RvMzIuCglTdHViIGZvciBIb3VzZUNsZWFuTG9naWNhbGx5RGVhZEhhbmRsZXMsIGZpeGVkIGszMnd2c3ByaW50ZkEuCgoJKiB0b29scy9idWlsZC5jLCBpZjE2MzIva2VybmVsLnNwZWMsIGlmMTYzMi9yZWxheS5jLCBpZjE2MzIvdGh1bmsuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgKHBhcnRpYWxseSkgdGhlIEtFUk5FTCBUaHVua2xldCBBUEkgYW5kIENhbGxiYWNrIENsaWVudAoJQVBJIChLRVJORUwuNTYwLTU2OCw2MDQtNjEyLDYxOS02MjIpLgoJQWRkZWQgc3R1YnMgZm9yIEsyMjgsIEsyMzcsIEtFUk5FTC4zNjUsIEtFUk5FTC40NDcuCgoJKiBvYmplY3RzL2JpdG1hcC5jLCBpZjE2MzIvZ2RpLnNwZWM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVN0dWJzIGZvciBDcmVhdGVVc2VyKERpc2NhcmRhYmxlKUJpdG1hcDE2LgoKCSogbWVtb3J5L2hlYXAuYywgaW5jbHVkZS93aW5udC5oOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBIRUFQX1dJTkVfQ09ERTE2U0VHIFNFR1BUUiBoZWFwcyB3aXRoIDE2LWJpdCBjb2RlIHNlZ21lbnRzLgoKCSogbWVtb3J5L2dsb2JhbC5jLCBpbmNsdWRlL3dpbmRvd3MuaDoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJR2xvYmFsRml4MTYgaXMgc3VwcG9zZWQgdG8gcmV0dXJuIHNlbGVjdG9yIHRvIHRoZSBtZW1vcnkgYXJlYS4KCgkqIG1zZG9zL3Z4ZC5jLCBpZjE2MzIvTWFrZWZpbGUuaW4sIGlmMTYzMi9idWlsdGluLmMsIGlmMTYzMi9jb21tLnNwZWMsIGlmMTYzMi93cHJvY3Muc3BlYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJU3R1YnMgZm9yIENPTU0uRFJWLCBSRUJPT1QuVlhELCBWREQuVlhELgoKCSogc2NoZWR1bGVyL3Byb2Nlc3MuYywgc2NoZWR1bGVyL3N5c2xldmVsLmMsIGluY2x1ZGUvc2lnX2NvbnRleHQuaCwgaW5jbHVkZS9zeXNsZXZlbC5oOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglVc2UgZW1lcmdlbmN5IFRFQiBzZWxlY3RvciB0byBhdm9pZCBkZWJ1Z2dlciBjcmFzaGVzIHdoZW4gc3RlcHBpbmcKCXRocm91Z2ggcmVsYXkgc3R1YnMgKG9yIHdoZW4gRlMgaXMgaW52YWxpZCBvdGhlcndpc2UpLgoKCSogd2luZG93cy9ldmVudC5jLCB3aW5kb3dzL2tleWJvYXJkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU1PVVNFLkRSViByb3V0aW5lcyBtb3ZlZCB0byBldmVudC5jLiBDYWxsIG1vdXNlIGV2ZW50IHByb2NlZHVyZS4KCgkqIHdpbmRvd3MvZGNlLmMsIHdpbmRvd3MvcGFpbnRpbmcuYywgd2luZG93cy9zY3JvbGwuYywgb2JqZWN0cy9jbGlwcGluZy5jLCBvYmplY3RzL2RjLmMsIG9iamVjdHMvZGN2YWx1ZXMuYywgaW5jbHVkZS9kYy5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaWYxNjMyL2dkaS5zcGVjLCBncmFwaGljcy94MTFkcnYvYml0Ymx0LmMsIGdyYXBoaWNzL3gxMWRydi9jbGlwcGluZy5jLCBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYywgZ3JhcGhpY3MveDExZHJ2L3RleHQuYywgZ3JhcGhpY3MvcGF0aC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDaGFuZ2VkIERDIG1lbWJlcnMgdy5oVmlzUmduLCB3LmhDbGlwUmduLCBhbWQgdy5oR0NDbGlwUmduIHRvCgljb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgZGV2aWNlLCBub3QgdGhlIERDIG9yaWdpbi4gVGhpcyBpcwoJbmVjZXNzYXJ5IHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgR2V0Q2xpcFJnbjE2IGFuZCBJbnF1aXJlVmlzUmduLgoJU2VsZWN0VmlzUmduIGFsc28gZXhwZWN0cyByZWdpb24gaW4gZGV2aWNlLXJlbGF0aXZlIGNvb3JkaW5hdGVzLgoJQWRhcHRlZCB0aGUgcmVzdCBvZiBXaW5lIHRvIHRoaXMgY29vcmRpbmF0ZSBjaGFuZ2UuCglJbXBsZW1lbnRlZCBFeHRTZWxlY3RDbGlwUmduLgoKCSogdG9vbHMvd2luYXBpLWNoZWNrLCBzY2hlZHVsZXIvc3lzbGV2ZWwuYywgZmlsZXMvZG9zX2ZzLmM6CglBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCVNtYWxsIGZpeC4KCgkqIGxvYWRlci9uZS9zZWdtZW50LmMsIGluY2x1ZGUvbW9kdWxlLmgsIGluY2x1ZGUvbmVleGUuaCwgaWYxNjMyL2tlcm5lbC5zcGVjOgoJQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CglZZXQgYW5vdGhlciBzbWFsbCBzZWxmLWxvYWRlciBmaXguCgoJKiBmaWxlcy9kcml2ZS5jOiBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCUZpeGVkIHNldmVyZSBidWc6IFNldEN1cnJlbnREaXJlY3RvcnkzMkEgZGlkbid0IHNldCBwVGFzay0+Y3VyZGlyCgljb3JyZWN0bHkgZHVlIHRvIGN1cnJlbnQgZHJpdmUgYmVpbmcgc2V0IHRvbyBsYXRlLgoKCSogTWFrZS5ydWxlcy5pbjogUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglVc2UgJChBUykgaW5zdGVhZCBvZiAkKENDKSB0byBjb21waWxlIC5zIGZpbGVzLgoKCSogcmVsYXkzMi8uY3ZzaWdub3JlLCByZWxheTMyL01ha2VmaWxlLmluLCByZWxheTMyL2J1aWx0aW4zMi5jLCBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmgsIGluY2x1ZGUvbW1yZWcuaCwgaWYxNjMyLy5jdnNpZ25vcmUsIGlmMTYzMi9NYWtlZmlsZS5pbiwgaWYxNjMyL2J1aWx0aW4uYywgZGxscy9NYWtlZmlsZS5pbiwgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglTdGFydGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBNU0FDTS5ETEwsIE1TQUNNMzIuRExMIGFuZCBJTUFHRUhMUC5ETEwuCgoJKiBpbmNsdWRlL2ltYWdlaGxwLmgsIHJlbGF5MzIvaW1hZ2VobHAuc3BlYywgZGxscy9pbWFnZWhscC8uY3ZzaWdub3JlLCBkbGxzL2ltYWdlaGxwL01ha2VmaWxlLmluLCBkbGxzL2ltYWdlaGxwL2FjY2Vzcy5jLCBkbGxzL2ltYWdlaGxwL2RlYnVnLmMsIGRsbHMvaW1hZ2VobHAvaW1hZ2VobHBfbWFpbi5jLCBkbGxzL2ltYWdlaGxwL2ludGVncml0eS5jLCBkbGxzL2ltYWdlaGxwL2ludGVybmFsLmMsIGRsbHMvaW1hZ2VobHAvbW9kaWZ5LmMsIGRsbHMvaW1hZ2VobHAvc3ltYm9sLmM6CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCVN0YXJ0ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIElNQUdFSExQLkRMTC4KCgkqIGluY2x1ZGUvbXNhY20uaCwgaW5jbHVkZS9tc2FjbWRydi5oLCByZWxheTMyL21zYWNtMzIuc3BlYywgaWYxNjMyL21zYWNtLnNwZWMsIGRsbHMvbXNhY20zMi8uY3ZzaWdub3JlLCBkbGxzL21zYWNtMzIvTWFrZWZpbGUuaW4sIGRsbHMvbXNhY20zMi9idWlsdGluLmMsIGRsbHMvbXNhY20zMi9kcml2ZXIuYywgZGxscy9tc2FjbTMyL2ZpbHRlci5jLCBkbGxzL21zYWNtMzIvZm9ybWF0LmMsIGRsbHMvbXNhY20zMi9pbnRlcm5hbC5jLCBkbGxzL21zYWNtMzIvbXNhY20zMl9tYWluLmMsIGRsbHMvbXNhY20zMi9zdHJlYW0uYywgZGxscy9tc2FjbS8uY3ZzaWdub3JlLCBkbGxzL21zYWNtL01ha2VmaWxlLmluLCBkbGxzL21zYWNtL21zYWNtX21haW4uYzoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJU3RhcnRlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgTVNBQ00uRExMIGFuZCBNU0FDTTMyLkRMTC4KCgkqIHdpbjMyL2RldmljZS5jOiBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCVJlbW92ZWQgdGhpbmdzIHRoYXQgd2VyZSBlYXJsaWVyIGFkZGVkIGJ5IG1pc3Rha2UuCgoJKiByZWxheTMyL3dpbm1tLnNwZWM6IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJVGhlIGltcGxlbWVudGF0aW9uIG9mIG1taW9Xcml0ZSBpcyBub3cgY2FsbGVkIGluc3RlYWQgb2YgdGhlIHN0dWIuCgoJKiBpbmNsdWRlL3NoZWxsLmgsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglCdWdmaXhlcywgc2hlbGx2aWV3IHVzZXMgRFBBJ3Mgbm93LCBJU2hlbGxWaWV3X0dldEl0ZW1PYmplY3QgaW1wbGVtZW50ZWQuCgoJKiByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3R1YnM6IFNIR2V0RmlsZUluZm8zMlcsIFJlYWRDYWJpbmV0U3RhdGUsIFdyaXRlQ2FiaW5ldFN0YXRlLCBJc1VzZXJBZG1pbi4KCUltcGxlbWVudGVkOiBTSEdldFBhdGhGcm9tSURMaXN0MzJXLgoJQ2hhbmdlZCBQYXRoQ29tYmluZS4KCgkqIGluY2x1ZGUvc2hsb2JqLmg6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IHN0cnVjdHVyZXMgRFZBU1BFQ1QsIFRZTUVELCBJRExMaXN0LgoJU2hlbGwgc3BlY2lmaWMgY2xpcGJvYXJkIGZvcm1hdHMuCgoJKiByZWxheTMyL3dpbnNwb29sLnNwZWMsIG1pc2MvcHJpbnRkcnYuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YiBFbnVtUHJpbnRlcnNXLgoKCSogZGxscy9zaGVsbDMyL2RhdGFvYmplY3QuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSW1wbGVtZW50ZWQgZmlyc3QgZnVuY3Rpb25zLgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3BpZGwuaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IGNsYXNzIElETExpc3QgIkl0ZW0gSUQgTGlzdCBMaXN0IiAoaW50ZXJuYWwpLgoKCSogbWlzYy92ZXIuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTbWFsbCBjaGFuZ2VzICh1c2VzIEhJV09SRC9MT1dPUkQpLgoKCSogd2luZG93cy9kaWFsb2cuYywgcmVsYXkzMi91c2VyMzIuc3BlYzoKCVNhdCBPY3QgMTAgMTI6MDA6MDAgMTk5OCAgSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTdHViIENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW1Bb3JXLgoKCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0PgoJRG9uJ3QgaW5zdGFsbCBvYmplY3QgZmlsZXMgd2hlbiAtLWRpc2FibGUtbGliIGlzIHNlbGVjdGVkLgoKCSogZGVidWdnZXIvaGFzaC5jLCBkZWJ1Z2dlci9tc2MuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdD4KCURvbid0IHByaW50IG5hbWUgZm9yIDMyIGJpdCBsaWIgbXVsdGlwbGUgdGltZXMuCglDbGVhbiB1cCBwcmludGluZyBpbiBERUJVR19Qcm9jZXNzRGVmZXJyZWREZWJ1Zy4KCgkqIG1lbW9yeS9oZWFwLmMsIGRsbHMvY29tY3RsMzIvdGFiLmMsIGNvbnRyb2xzL2NvbWJvLmM6CglEYXZpZCBMdXllciA8bHV5ZXJAdWNzLnV3YS5lZHUuYXU+CglTbWFsbCBmaXhlcy4KCgkqIGZpbGVzL2RyaXZlLmM6IFBldHRlciBSZWluaG9sZHRzZW4gPHBlcmVAdGQub3JnLnVpdC5ubz4KCUJ1Z2ZpeDogQ2hhbmdlZCBHZXREcml2ZVR5cGUzMkEoTlVMTCkgdG8gdXNlIGN3ZCdzIHJvb3QuCgoJKiBvbGUvdHlwZWxpYi5jLCBvbGUvY29tcG9iai5jLCBvbGUvaWZzLmMsIG9sZS9tb25pa2VyLmMsIG9sZS9vbGUyLmMsIG9sZS9vbGUyZGlzcC5jLCBvbGUvb2xlMm5scy5jLCBvbGUvb2xlY2xpLmMsIG9sZS9vbGVzdnIuYywgb2xlL3N0b3JhZ2UuYywgbWlzYy9udGRsbC5jLCBtaXNjL3JlZ2lzdHJ5LmM6CglNYXR0aGV3IEJlY2tlciA8bWJlY2tlckBnbGFzc2NpdHkubmV0PgoJRG9jdW1lbnRhdGlvbiBjb3JyZWN0aW9ucy9zdGFuZGFyZGl6YXRpb25zLgoKCSogbXVsdGltZWRpYS9hdWRpby5jLCBtdWx0aW1lZGlhL2luaXQuYywgbXVsdGltZWRpYS9tY2lhbmltLmMsIG11bHRpbWVkaWEvbWNpY2RhLmMsIG11bHRpbWVkaWEvbWNpc3RyaW5nLmMsIG11bHRpbWVkaWEvbWlkaS5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIGluY2x1ZGUvbW1zeXN0ZW0uaCwgaW5jbHVkZS9tdWx0aW1lZGlhLmg6CglFcmljIFBvdWVjaCAgPGVyaWMucG91ZWNoQGxlbWVsLmZyPgoJU3RhcnRlZCBjb2RpbmcgMzIgYml0IE1DSSBoYW5kbGluZy4KCUFkZGVkIE9wZW4vQ2xvc2UgdG8gbG93LWxldmVsIE1DSSBkcml2ZXJzIChhdWRpbywgbWlkaSwgYW5pbSwgY2RhKS4KCVdyb3RlIE1DSSBNSURJIHN1cHBvcnQuCgoJKiBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCVlldCBhbm90aGVyIGltcHJvdmVtZW50IHRvIHRoZSBiZXppZXIgY29kZS4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJR2V0VGlja0NvdW50cygpIGhhcyBhIGdyYW51bGFyaXR5IGluIHdpbmRvd3Mgb2YgMjUgbXNlYydzLgoJR2lyb3RlbCdzIHNlcmlhbCBjb21tdW5pY2F0aW9uIGFwcGVhcnMgdG8gZGVwZW5kIG9uIGl0LCBzbyBJIGd1ZXNzCglpdCdzIGEgZmVhdHVyZS4uLgoKCSogbWlzYy9jb21tLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglVcGRhdGUgdGhlIG1vZGVtbiBzdGF0dXMgYml0IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIFJMU0QgbGluZSBpcwoJYWN0aXZlIGluIGV2ZXJ5IGNhbGwgdG8gR2V0Q29tbUVycm9yKCkuIFRoaXMgaXMgbm90IHRoZSBwcm9wZXIgcGxhY2UsCglidXQgc2luY2Ugd2luZSBkb2Vzbid0IGRvIGFueSBldmVudC1zdHVmZi4uLgoJRml4ZWQgc29tZSBUUkFDRSBjYWxsJ3MgZmFjZWQgd2l0aCBub24gemVybyB0ZXJtaW5hdGVkIHN0cmluZ3MuCglSZXN0b3JlIHRoZSB0ZXJtaW5hbCBzdGF0ZSBhdCBDbG9zZUNvbW10IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYXQKCU9wZW5Db21tKCksIHNvIHRoZSBtb2RlbSB3aWxsIGdvIG9mZi1ob29rLgoKCSogbG9hZGVyL21vZHVsZS5jOiBBbGV4YW5kZXIgTGFyc3NvbiAgPGFsbGFAbHlzYXRvci5saXUuc2U+CglHZXRNb2R1bGVGaWxlTmFtZTMyQSgpIHJldHVybnMgbG9uZyBmaWxlbmFtZSBpZiBhcHAgc2V0cyBvc3ZlcnNpb24gPj0KCTQuMC4gQWxzbyBtb3ZlZCB0aGUgbG9uZyBmaWxlbmFtZSBoYWNrZXJ5IHRvIEdldExvbmdQYXRoTmFtZTMyQSgpIHNvCglpdCBjYW4gYmUgdXNlZCBieSB3aW4zMiBwcm9ncmFtcy4KCgkqIGZpbGVzL2Rvc19mcy5jOiBBbGV4YW5kZXIgTGFyc3NvbiA8YWxsYUBseXNhdG9yLmxpdS5zZT4KCUdldExvbmdQYXRoTmFtZTMyQSgpIHJldHVybnMgZG9zIGZvcm1hdCBsb25nIGZpbGVuYW1lIGluc3RlYWQgb2YgdW5peAoJZm9ybWF0LgoKCSogZGxscy9jb21jdGwzMi9saXN0dmlldy5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJU21hbGwgZml4ZXMuCgoJKiByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgU0hGbHVzaENsaXBib2FyZC4KCgkqIHJlbGF5MzIvY29tY3RsMzIuc3BlYywgaW5jbHVkZS9jb21tY3RybC5oLCBkbGxzL2NvbWN0bDMyL2NvbWN0bDMydW5kb2MuYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBzb21lIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnMuCglDaGFuZ2VkIGFsZ29yaXRobSBpbiBEUEFfUXVpY2tTb3J0KCkuCglGaXhlZCBoZWFwIGNyZWF0aW9uL2Rlc3RydWN0aW9uIGFuZCBjb250cm9sIFt1bl1yZWdpc3RyYXRpb24gaW4KCUNvbUN0bDMyTGliTWFpbigpLgoKCSogZGxscy9jb21jdGwzMi9oZWFkZXIuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIGEgYnVnLgoKCSogaW5jbHVkZS90b29sdGlwcy5oLCBkbGxzL2NvbWN0bDMyL3Rvb2x0aXBzLmM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgdHJhY2tpbmcgc3VwcG9ydCBhbmQgZml4ZWQgbG9hZGluZyBvZiByZXNvdXJjZSBzdHJpbmdzLgoJQWRkZWQgdW5yZWdpc3RlciBjb2RlLgoKCSogaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oLCBpbmNsdWRlL2lwYWRkcmVzcy5oLCBpbmNsdWRlL25hdGl2ZWZvbnQuaCwgZGxscy9jb21jdGwzMi9NYWtlZmlsZS5pbiwgZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBkbGxzL2NvbWN0bDMyL2lwYWRkcmVzcy5jLCBkbGxzL2NvbWN0bDMyL25hdGl2ZWZvbnQuYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBJUEFkZHJlc3MgYW5kIE5hdGl2ZUZvbnQgY29udHJvbHMuCgoJKiBpbmNsdWRlL2ltYWdlbGlzdC5oLCBkbGxzL2NvbWN0bDMyL2ltYWdlbGlzdC5jOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCVNvbWUgbWlub3IgaW1wcm92ZW1lbnRzLgoKCSogaW5jbHVkZS90b29sYmFyLmgsIGRsbHMvY29tY3RsMzIvdG9vbGJhci5jOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUltcHJvdmVkIGRyYXdpbmcgYW5kIHBsYWNlbWVudCBjb2RlLiBFeHBsb3JlciBzdHlsZSBjb21tb24gZGlhbG9ncyBhcmUKCWxvb2tpbmcgZ29vZCBub3cuCgoJKiBvYmplY3RzL2N1cnNvcmljb24uYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIGJ1ZyBpbiBEcmF3SWNvbkV4MzIoKS4KCgkqIG1pc2MvbWFpbi5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJSW1wcm92ZWQgR2V0U3lzdGVtSW5mb3JtYXRpb24zMltBL1ddLgoKCSogd2luZG93cy9ub25jbGllbnQuYywgcmVsYXkzMi91c2VyMzIuc3BlYywgaW5jbHVkZS93aW5kb3dzLmgsIGlmMTYzMi91c2VyLnNwZWM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgRHJhd0NhcHRpb25bMTYvMzJdIGFuZCBEcmF3Q2FwdGlvblRlbXBbMTYvMzJBLzMyV10uCglGaXhlZCBoYW5kbGluZyBvZiBXU19FWF9UT09MV0lORE9XLgoKCSogZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglVcGRhdGVkLgoKCSogd2luZG93cy9ldmVudC5jLCB3aW5kb3dzL2tleWJvYXJkLmMsIGluY2x1ZGUva2V5Ym9hcmQuaDoKCURhdmlkIEZhdXJlIDxmYXVyZUBrZGUub3JnPgoJQWRkZWQgS0VZQk9BUkRfVXBkYXRlU3RhdGUsIHRvIHJlYWQgdGhlIG1vZGlmaWVycyB3aGVuIHRoZSB3aW5lIGFwcCBpcwoJYWN0aXZhdGVkLiBVc2VzIHRoZSBuZXcgS0VZQk9BUkRfVXBkYXRlT25lU3RhdGUuCglGaXhlZCBhIHByb2JsZW0gd2l0aCBtZW51IGFjY2VsZXJhdG9ycyAoQWx0LWxldHRlciBnZW5lcmF0ZXMgYSBkb3duCglhcnJvdyBldmVudCB3aGljaCBiZWVwcyBpZiBub3QgZmlsdGVyZWQpLgoJU3BlZWRlZCB1cCBUb0FzY2lpMTYvMzIoKSBhIGxpdHRsZSBiaXQuCgoJKiBkZWJ1Z2dlci9icmVhay5jLCBkZWJ1Z2dlci9kYl9kaXNhc20uYywgZGVidWdnZXIvZGJnLnksIGRlYnVnZ2VyL2V4cHIuYywgZGVidWdnZXIvc291cmNlLmMsIGRlYnVnZ2VyL3R5cGVzLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCU1hZGUgV2luZSdzIGRlYnVnZ2VyIHdvcmsgc2F0aXNmYWN0b3JpbHkgd2l0aCBET1MgYXBwcy4KCVBlcmhhcHMgZGVyZWZlcmVuY2luZyB3b3JrIGJldHRlciBmb3IgV2luMTYgYXBwcyB0b28gbm93LCBidXQKCWl0IGFwcGVhcnMgdGhlIGRlYnVnZ2VyIGNvcmUgd2Fzbid0IGRlc2lnbmVkIGZvciBzZWdtZW50YXRpb24uCgoJKiBtc2Rvcy9kcG1pLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJU2ltdWxhdGVzIERQTUkgbWVtb3J5IG1hcCBieSBjb252ZXJ0aW5nIGxvd2VyLU1CIHNlZ21lbnQgYmFzZQoJYWRkcmVzc2VzIGFzIG5lY2Vzc2FyeS4gSW1wbGVtZW50ZWQgYWxsb2NhdGluZy9mcmVlaW5nIERPUyBtZW1vcnkKCWJsb2Nrcy4gQWRkZWQgWE1TIGhvb2suIChEUE1JIHJlbWFpbnMgZGlzYWJsZWQgYnkgZGVmYXVsdCB1bnRpbAoJc29tZW9uZSBpbXBsZW1lbnRzIHRoZSByYXcgbW9kZSBzd2l0Y2ggZW50cnkgcG9pbnRzIHBrdW56aXAgbmVlZHMuKQoKCSogbXNkb3MvaW50MjEuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglJIHRoaW5rIGl0J3MgdGltZSB0byByZXRoaW5rIHRoZSBIRklMRTE2X1RPX0hGSUxFMzIgc3RyYXRlZ3ksCgljYW4ndCBrZWVwIHdvcmtpbmcgYXJvdW5kIGZsYXdzIGluIGl0IGxpa2UgdGhpcyAobm93IHN0ZGlvCgl3YXMgZ2V0dGluZyBjbG9zZWQgd2hlbiBwcm9ncmFtcyBjbG9zZSBoYW5kbGVzID49NSkKCgkqIG1zZG9zL3htcy5jLCBtc2Rvcy9NYWtlZmlsZS5pbiwgbXNkb3MvaW50MmYuYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJSW1wbGVtZW50ZWQgYmFzaWMgWE1TIGZ1bmN0aW9ucy4gd2NiLmV4ZSAoV2luMTYgZGlzYXNzZW1ibGVyKSBub3cKCXNlZW1zIHRvIHdvcmsgZmluZSB1bmRlciBXaW5lLgoKCSogbG9hZGVyL2Rvcy9kb3N2bS5jLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBpbmNsdWRlL2Rvc2V4ZS5oLCBpbmNsdWRlL21pc2NlbXUuaDoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJTW92ZWQgc29tZSBzeXN0ZW0gZGVwZW5kZW5jaWVzIHRvIGxvYWRlci9kb3MvZG9zdm0uYy4gSW1wbGVtZW50ZWQKCWVudmlyb25tZW50YWwgYXJndlswXSBwYXNzaW5nIHRvIERPUyBhcHBzLiBBZGRlZCBYTVMgaG9va3MuCgoJKiBkZWJ1Z2dlci9zdGFicy5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkIGEgbWVtc2V0KCkgdG8gcHJldmVudCBhIGRlYnVnZ2VyIHNlZ2ZhdWx0IGNhdXNlZCBieQoJdW5pbml0aWFsaXplZCBwb2ludGVycyBpbiB0aGUgc3RhYnMgbG9va3VwIHRhYmxlcy4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQSBmZXcgZml4ZXMuCgoJKiByZWxheTMyL250ZGxsLnNwZWM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgUnRsQWxsb2NhdGVBbmRJbml0aWFsaXplU2lkIGVudHJ5LgoKCSogbG9hZGVyL01ha2VmaWxlLmluLCBsb2FkZXIvZWxmLmMsIGxvYWRlci9tb2R1bGUuYywgbG9hZGVyL3BlX2ltYWdlLmMsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvbW9kdWxlLmgsIGluY2x1ZGUvcGVfaW1hZ2UuaCwgaW5jbHVkZS9wZWV4ZS5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJR2VuZXJpYyBkeW5hbWljIGRsbCBsb2FkZXIgdXNpbmcgZGwqKCkgQVBJLgoJSW5jbHVkZXM6IHN0ZGNhbGwtPmNkZWNsIG1hcHBpbmcgYWJpbGl0eSwgc25vb3BpbmcuCgkoVGVzdGVkIG9ubHkgd2l0aCBnbGlkZTJ4LmRsbCAtPiBsaWJnbGlkZTJ4LnNvKQoKCSogbXVsdGltZWRpYS9pbml0LmMsIG11bHRpbWVkaWEvdGltZS5jLCBpbmNsdWRlL21tc3lzdGVtLmgsIGluY2x1ZGUvbXVsdGltZWRpYS5oOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCB3aW4zMiBlbmhhbmNlZCBmdW5jdGlvbmFsaXR5IHRvIHRpbWVyIGNhbGxiYWNrcy4KCgkqIHdpbjMyL2NvbnNvbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBiYWQgaGFja3Mgc28gV3JpdGVDb25zb2xlT3V0cHV0IHdvcmtzIG9uIHZ0MTAwIGFuZCBQZWVrTWVzc2FnZQoJZG9lcyBhdCBsZWFzdCBhIGJpdCBvZiBrZXlib2FyZCBpbnB1dC4KCgkqIHJlbGF5MzIvc25vb3AuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTaG91bGQgZGlzcGxheSBhZ2Fpbi4KClNhdCBPY3QgMTAgMTU6NTI6NDYgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbmRvd3MvZGlhbG9nLmM6IERhdmUgUGlja2xlcyA8ZGF2ZXBAbnVnYXRlLmRlbW9uLmNvLnVrPgoJSW1wbGVtZW50ZWQgRFNfQ0VOVEVSIGRpYWxvZyBzdHlsZS4KCgkqIG1pc2MvbWFpbi5jOiBQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KCUFkZGVkIGZ1bmN0aW9uIHRvIGJ1aWxkIHRoZSBXaW5kb3dzIG51bWVyaWMgbGFuZ3VhZ2UgSUQgZnJvbSBsYW5ndWFnZSwKCWNvZGUsIGNoYXJzZXQgYW5kIGRpYWxlY3Qgc3RyaW5ncywgbGlrZSB1c2VkIGJ5IFVuaXggTEFORyB2YXJpYWJsZS4KCgkqIG9sZS9vbGUybmxzLmMsIG9sZS9ubHMvUkVBRE1FLCBpbmNsdWRlL3dpbm5scy5oLCBvbGUvbmxzLyoubmxzOgoJUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuYWxwaGFuZXQuY2g+CglNb3JlIE5MUyBkYXRhLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogUGV0ZXIgU2NobGFpbGUgPHVkYnpAcnoudW5pLWthcmxzcnVoZS5kZT4KCUZpeGVkIGEgbG90IG9mIGJ1Z3MgaW4gZGRyYXcuYyB0byBtYWtlIHhsaWIgc3VwcG9ydCB3b3JrLgoJUnVucyBzdWNjZXNzZnVsbHkgVFIyRGVtbyBhbmQgSmF6eiBKYWNrcmFiYml0IElJIERlbW8hCgoJKiBvYmplY3RzL2dkaW9iai5jOiBDbGlmZiBXcmlnaHQgPGNsaWZmQHNuaXBlNDQ0Lm9yZz4KCUFkZGVkIERDIG9iamVjdCB0eXBlIHRvIHRoZSBsaXN0IG9mIHZhbGlkIG9iamVjdHMgdGhhdCBjYW4gYmUgZGVsZXRlZAoJYnkgRGVsZXRlT2JqZWN0MzIuCgpTdW4gT2N0ICA0IDE4OjIwOjI5IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBDaGFuZ2VMb2c6CglTdGFydGluZyBuZXcgZm9ybWF0IGNoYW5nZWxvZyAob2xkZXIgY2hhbmdlcyBtb3ZlZCB0bwoJZG9jdW1lbnRhdGlvbi9DaGFuZ2VMb2cuT0xEKS4K