U3VuIEZlYiAyNSAwNTo0ODo1MSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBidW1wZWQgdG8gMi4zLjIKCSogZG9jL3htbC5odG1sOiB1cGRhdGVkIGZvciByZWxlYXNlCgpTYXQgRmViIDI0IDE0OjA3OjUyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmb3VuZCBhIG1lbWxlYWsgYW5kIGZpeGVkIGEgbmFzdHkgYnVnCgpTYXQgRmViIDI0IDAzOjM1OjQ4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxsaW50LltjMV0gOiBhZGRlZCByZXR1cm4gY29kZSBlcnJvcnMgZm9yIHhtbGxpbnQKCSogeHBhdGguYzogc3BlY2lmaWMgZGVidWcgZHVtcCBmdW5jdGlvbiBmb3IgcmVzdWx0IHZhbHVlIHRyZWVzCgpUaHUgRmViIDIyIDA3OjUyOjI3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaW5hbGx5IGltcGxlbWVudGVkIHhtbFhQYXRoQ29tcGFyZU5vZGVTZXRzCgkqIHRlc3QvWFBhdGgvZXhwci9mbG9hdHMgcmVzdWx0cy9YUGF0aC9leHByL2Zsb2F0czogYWRkZWQgCgkgIGEgdGVzdCBmb3IgZmxvYXQgZXhwcmVzc2lvbnMKClR1ZSBGZWIgMjAgMTg6NTc6NTQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogZml4ZWQgeG1sTm9kZUdldENvbnRlbnQsIGl0IHdhcyBub3QgcmVjdXJzaW5nIG9uIGNoaWxkCgkqIHBhcnNlckludGVybmFscy5bY2hdOiB0cnlpbmcgdG8gc3BlZWQgdXAgcGFyc2luZwoJKiB4cGF0aC5jIDogc3BlZWRlZCB1cCBub2RlIHNldCBlcXVhbGl0eSBvcAoKTW9uIEZlYiAxOSAxOTowMTo1NyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0gdmFsaWQuYyBsaXN0LltjaF06IEdhcnkgUGVubmluZ3RvbiBwcm92aWRlZCBhCgkgIGJldHRlciBoYW5kbGluZyBvZiBJRC9JRFJFRiBhbmQgdGhlIGxpc3QgbW9kdWxlcyBhc3NvY2lhdGVkCgkqIGNvbmZpZ3VyZS5pbjogc21hbGwgQ0ZMQUdTIGNsZWFudXAKCk1vbiBGZWIgMTkgMTY6MTM6MjIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgaWNvbnYgZGV0ZWN0aW9uIG9uIEFJWCAoc3RyaWMpCgpNb24gRmViIDE5IDEwOjU5OjQxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCAiKiIgKHVuYmVsaWV2YWJsZSAhKSBhbmQgYSBjb3VwbGUgb2Ygd2FybmluZ3MKClN1biBGZWIgMTggMTc6NTI6MzcgTUVUIDIwMDEgQmpvcm4gUmVlc2UgPGJyZWVzZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgoJKiB4cGF0aC5jOiBmaXhlZCB3aGl0ZXNwYWNlIGhhbmRsaW5nIGluIHhtbFhQYXRoU3RyaW5nRXZhbE51bWJlciwKCSAgYW5kIG9wdGltaXplZCB4bWxYUGF0aE5vZGVTZXRTb3J0CgpTYXQgRmViIDE3IDE0OjE4OjQyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBidWcgZml4IHdoZW4gY29udGV4dCBzaXplIGlzIDAKCSogcGFyc2VyLmM6IEkgbGlrZSBOb3JtJ3MgRHRkIGJlY2F1c2UgdGhleSBzdGlsbCBtYW5hZ2UgdG8gYnJlYWsKCSAgdGhlIHBhcnNlciBvY2Nhc2lvbmFsbHkKCkZyaSBGZWIgMTYgMTQ6MjA6MzUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHhtbFhQYXRoRXF1YWxOb2RlU2V0RmxvYXQgdGhlIGFyZyBpcyByZWFsbHkgYSBkb3VibGUgbm93CgpGcmkgRmViIDE2IDAxOjEwOjA2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLltjaF0gcGFyc2VyLmMgeHBhdGguYzogZml4ZWQgdGhlIHByb2JsZW0gb2YgYWRkcmVzc2luZwoJICBhdHRyaWJ1dGVzIHdpdGhpbiB0aGUgWE1MLTEuMCBuYW1lc3BhY2UKClRodSBGZWIgMTUgMTY6NTM6MjAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoSW50ZXJuYWxzLmg6IGV4cG9ydGVkIGEgZmV3IGF4aXMgZnVuY3Rpb25zCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZCB0aGUgZG9jCgpUaHUgRmViIDE1IDE1OjU3OjE0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGFwcGxpZWQgcGF0Y2ggZnJvbSBEYW5pZWwgdmFuIEJhbGVuIGZvciBPcGVuQlNECgkgIGFuZCBidW1wZWQgdmVyc2lvbiB0byAyLjMuMQoJKiBIVE1MdHJlZS5jIHJlc3VsdC9IVE1ML2RvYzMuaHRtIHJlc3VsdC9IVE1ML3dpcmVkLmh0bWw6IHRoZQoJICBhdHRlbXB0IHRvIGZpbmQgYXV0b2Nsb3Npbmcgd2FzIHNpbXBseSBicm9rZW4sIHJlbW92ZWQgaXQsCgkgIHVwZGF0ZWQgdGhlIGV4YW1wbGVzLCB0aGlzIGlzIGJldHRlcgoKV2VkIEZlYiAxNCAxMTozNTozOSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaGFzaC5bY2hdOiBhZGRlZCBQYW9sbyBDYXNhcmluaSBwYXRjaCB0byBwcm92aWRlIERlbGV0ZSBmcm9tCgkgIGhhc2ggZnVuY3Rpb25uYWxpdGllcy4KCSogZG9jL2h0bWwvKiA6IHJlYnVpbGQgdGhlIGRvYwoKVHVlIEZlYiAxMyAxODowMTo0OCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYyByZXN1bHQvWFBhdGgvdGVzdHMvY2hhcHRlcnNwcmVmb2w6IGJ1Z2ZpeGVzIG9uIG9yZGVyIGFuZAoJICBvbiBwcmVkaWNhdGUKCSogSFRNTHBhcnNlci5bY2hdIEhUTUx0cmVlLmMgcmVzdWx0L0hUTUwvZG9jMy5odG0uZXJyCgkgIHJlc3VsdC9IVE1ML2RvYzMuaHRtLnNheCByZXN1bHQvSFRNTC93aXJlZC5odG1sOiBzb21ldGltZXMgb25lCgkgIHJlYWxseSB3YW50IHRvIGhhdmUgdGFncyBjbG9zZWQgb24gb3V0cHV0IGV2ZW4gaWYgd2UgYWNjZXB0CgkgIHVuY2xvc2VkIG9uZXMgb24gaW5wdXQKCk1vbiBGZWIgMTIgMTg6MzM6MjAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IG91Y2ggZG9uJ3QgZnJlZSBOVUxMLCByYXJlIGNhc2UgZml4ZWQKCSogdHJlZS5jOiBkb24ndCBjb2FsZXNjZSB0ZXh0IG5vZGVzIGlmIHRoZXkgZG9uJ3QgaGF2ZSB0aGUKCSAgc2FtZSBiZWhhdmlvdXIgd3J0IGVzY2FwaW5nIG9uIG91dHB1dAoKU3VuIEZlYiAxMSAyMToxNTo0MSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogc21hbGwgZml4dXAKCSogU0FYLmM6IGRvbid0IHdhcm4gb24gZW1wdHkgbmFtZXNwYWNlcy4KClRodSBGZWIgIDggMTE6Mjg6NTggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFJFQURNRTogYSBiaXQgb2YgY2xlYW51cAoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyBmb3IgMi4zLjAgcmVsZWFzZQoKVGh1IEZlYiAgOCAxMDozNzowMCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaGFzaC5bY2hdOiBhZGRlZCBhIGZpcnN0IHZlcnNpb24gb2YgeG1sSGFzaFNpemUoKQoJKiB2YWxpZC5jOiBhbm90aGVyIGJ1ZyBmaXggZnJvbSBHYXJ5IFBlbm5pbmd0b24KCldlZCBGZWIgIDcgMTk6MjI6MzcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IGNvdXBsZSBvZiBidWcgZml4ZXMgcG9pbnRlZCBieSBHYXJ5IFBlbm5pbmd0b24KCSogSFRNTHRyZWUuYzogI2lmIDAgY2xlYW51cAoKVHVlIEZlYiAgNiAxNDowMjo1NiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogc3RhcnRlZCBwcm9maWxpbmcgWFNMVCwgYWRkZWQgeG1sWFBhdGhOb2RlU2V0QWRkVW5pcXVlKCkKCSAgd2hpY2ggcmVtb3ZlcyBhIHRpbWUgY29uc3VtaW5nIGNoZWNrIG9mIHhtbFhQYXRoTm9kZVNldEFkZCgpCgkgIGFuZCB1c2UgaXQgaW4gcGxhY2VzIHdoZXJlIHdlIGFyZSBzdXJlIHRvIG5vdCBicmVhayB1bmljaXR5CgpNb24gRmViICA1IDE4OjUxOjM2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBidWcgZml4ZXMgZm91bmQgZnJvbSBYU0xUCgkqIHRyZWUuYzogcHJlc2VydmUgbm9kZS0+bmFtZSBzcGVjaWFsIHZhbHVlcyB3aGVuIGNvcHlpbmcgbm9kZXMuCgkqIHBhcnNlckludGVybmFscy5bY2hdIHBhcnNlci5bY2hdIFNBWC5jIDogYWRkZWQgYSBtb2RlIHdoZXJlCgkgIGV4dGVybmFsIHN1YnNldCBhcmUgZmV0Y2hlZCB3aGVuIGF2YWlsYWJsZSBidXQgd2l0aG91dCBmdWxsCgkgIHZhbGlkYXRpb24uIEFkZGVkIHhtbExvYWRFeHREdGREZWZhdWx0VmFsdWUsIG5lZWQgYSBmdW5jdGlvbi4KCSogSFRNTHRyZWUuYzogYWRkIHN1cHBvcnQgZm9yIHhtbFN0cmluZ1RleHROb2VuYyBmb3IgWFNMdCBIVE1MCgkgIG91dHB1dCB3aXRoIGVuY29kaW5nIGRpc2FibGVkLgoKU2F0IEZlYiAgMyAwOTo1MDoyOSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1saU8uYzogSGFycnkgQmx1bmRlbGwgcG9pbnRlZCBvdXQgdGhhdCB4bWxDaGVja0ZpbGVuYW1lCgkgIHhtbENoZWNrRmlsZW5hbWUgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSB4bWxGaWxlT3BlblcKCSAgYW5kIHhtbEd6ZmlsZU9wZW5XCgpGcmkgRmViICAyIDE4OjA0OjM1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB1cmkuYzogcmV3cml0ZSBvZiB4bWxOb3JtYWxpemVVUklQYXRoIGZyb20gUGF1bCBELiBTbWl0aAoJKiB0ZXN0L1VSSS9zbWl0aC51cmkgcmVzdWx0L1VSSS9zbWl0aC51cmkgTWFrZWZpbGUuYW06CgkgIGFkZGVkIHRoZSBuZXcgdGVzdHMgZm9yIFVSSSBub3JtYWxpemF0aW9uCgkqIHRlc3RVUkkuYzogZml4ZWQgc3Rvb3BpZCBidWdzCgkqIHJlc3VsdC9WQy9PbmVJRDMgcmVzdWx0L1ZDL1VuaXF1ZUVsZW1lbnRUeXBlRGVjbGFyYXRpb246CgkgIHRoZSBVUkkgaW4gdGhlIGVycm9yIG1lc3NhZ2VzIGFyZSBub3cgcHJvcGVybHkgbm9ybWFsaXplZAoKRnJpIEZlYiAgMiAwOToxODo1MyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdXJpLmM6IGFwcGxpZWQgTWFyYyBTYW5mYWNvbidzIHBhdGNoIGZvciB4bWxOb3JtYWxpemVVUklQYXRoCgpUaHUgRmViICAxIDA1OjI4OjU1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCBhIG51bWJlciBvZiBwcm9ibGVtcyBpbiBYUEFUSF9YU0xUX1RSRUUgcHJvY2Vzc2luZwoKV2VkIEphbiAzMSAyMTo0NTozNyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgbW9kIG9wZXJhdG9yCgpXZWQgSmFuIDMxIDE2OjUwOjQyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZml4ZWQgeG1sU3RyY2F0IGRvYwoJKiB0cmVlLmM6IDIgZml4ZXMgZm9ybSBBbmRlcnMgQ2FybHNvbiBmb3IgY29weWluZyBub2RlcyBhbmQKCSAgdHJlZXMuCgpXZWQgSmFuIDMxIDE0OjE5OjE2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jIHJlc3VsdC9YUGF0aC90ZXN0cy9jaGFwdGVyc2Jhc2UKCSAgcmVzdWx0L1hQYXRoL3Rlc3RzL3NpbXBsZWJhc2U6IGZpeGVkIFhQYXRoIG5vZGUoKSAKCSogdHJlZS5jOiBzbWFsbCBmaXggaW4geG1sTmV3TnMoKQoJKiBNYWtlZmlsZS5hbTogcmVtb3ZlZCBleHRyYW5lb3VzIHhtbDJDb25mLnNoIHJ1bGUKClN1biBKYW4gMjggMDg6Mzc6MDMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiBsaWJ4bWwuc3BlYy5pbiBleGFtcGxlL01ha2VmaWxlLmFtOgoJICBDaGFuZ2VkIHRoZSBsaWJyYXJ5IG5hbWUsIGluIG9yZGVyIHRvIGdldCBsaWJ4bWwtZGV2ZWwgYW5kCgkgIGxpYnhtbDItZGV2ZWwgdG8gY29leGlzdCBvbiBhIHNpbmdsZSBzeXN0ZW0KCSogeG1sLWNvbmZpZy4xIHhtbC1jb25maWcuaW4geG1sQ29uZi5zaC5pbjogcmVuYW1lZAoJKiB4bWwyLWNvbmZpZy4xIHhtbDItY29uZmlnLmluIHhtbDJDb25mLnNoLmluOiBuZXcgZmlsZXMKClNhdCBKYW4gMjcgMTk6NTg6MjIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiBsaWJ4bWwtMi4wLnBjLmluOiBzdGFydGVkIHdvcmtpbmcgb24gZ2V0dGluZwoJICBsaWJ4bWwyLWRldmVsIGluc3RhbGxhYmxlIGluIC8vIGFzIGxpYnhtbC1kZXZlbC4KClNhdCBKYW4gMjcgMTg6NDk6MDIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy9NYWtlZmlsZS5hbTogZml4ZWQgbWFrZSByZWJ1aWxkIGluIGRvYwoJKiBkb2MvaHRtbC8qLmh0bWw6IHJlYnVpbHQgdGhlIGRvY3MKCkZyaSBKYW4gMjYgMTA6MzA6NTggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogcGF0Y2ggZnJvbSBCam9ybiBSZWVzZSBvbiB4bWxCdWZmZXJDQ2F0CgpUaHUgSmFuIDI1IDE5OjIyOjI1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSBkb2MvTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IHBhaW5mdWwgd29yayB0byBnZXQKCSAgdGhlIEhUTUwgZG9jIHRvIGdvIGludG8gdGhlIC1kZXZlbCBSUE0gLi4uCgkqIGFjbG9jYWwubTQgY29uZmlnLmguaW46IHNvbWUgdXBkYXRlcyBkdWUgdG8gYXV0byogbWFnaWMKClRodSBKYW4gMjUgMTk6MTE6NDkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmg6IGFkZGVkIGEgaG9vayBpbiB0aGUgY29udGV4dCBzdHJ1Y3R1cmUgYWxsb3dpbmcgdG8KCSAgbGluayB0byBleHRyYSBzdXBwb3J0LCBuZWVkZWQgZm9yIFhTTFQKClRodSBKYW4gMjUgMTM6MzQ6MTEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLltjaF0geHBvaW50ZXIuYzogYWRkZWQgeG1sWFBhdGhDbXBOb2RlcywgY2hhbmdlZAoJICB4bWxYUHRyQ21wUG9pbnRzIHRvIHVzZSBpdC4KCSogcHJvcGFnYXRlZCB0aGUgZm9sbG93aW5nIHBhdGNoIGZyb20gQWxlamFuZHJvIEZvcmVybwoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmggeG1sSU8uYzogYXBwbGllZCBmdXJ0aGVyIHN1Z2dlc3Rpb25zCgkgIGZyb20gSWdvciBabGF0a292aWMgPGlnb3J6QGRpYWx1cC5uYWNhbWFyLmRlPiBhbmQgY2xlYW51cAoJKiBleGFtcGxlL2dqb2JyZWFkLmM6IGZpeGVkIHdhcm5pbmdzLCBub3cgdGhhdCBpdCBidWlsZHMKCldlZCBKYW4gMjQgMjA6Mjc6MjggQ09UIDIwMDEgQWxlamFuZHJvIEZvcmVybyA8YmFjaHVlQGJhY2h1ZS5jb20+CgogICAgICAgICogeG1sSU8uYyAoeG1sRmlsZU9wZW4sIHhtbEZpbGVPcGVuVyk6IFJlbW92ZWQgdW5uZWNlc2FyeSBjaGVja3MuCgogICAgICAgICogeG1sSU8uYyAoeG1sQ2hlY2tGaWxlbmFtZSk6IEZ1bmN0aW9uIGFkZGVkIHRvIGtub3cgd2hldGhlciBhIGdpdmVuCiAgICAgICAgICBmaWxlbmFtZSBwb2ludHMgdG8gYSB2YWxpZCBmaWxlIChub3QgYSBkaXJlY3RvcnkpLgogICAgICAgICogeG1sSU8uYyAoeG1sRmlsZU9wZW4sIHhtbEZpbGVPcGVuVywgeG1sR3pmaWxlT3BlbiwgeG1sR3pmaWxlT3BlblcpOgogICAgICAgICAgQWRkZWQgY2FsbHMgdG8geG1sQ2hlY2tGaWxlbmFtZURpci4KCiAgICAgICAgKiB4bWxJTy5jICh4bWxHemZpbGVPcGVuLCB4bWxHemZpbGVPcGVuVywgeG1sRmRPcGVuLCB4bWxGZE9wZW5XKTogUGFzcwogICAgICAgICAgYHBhdGgnIChyYXRoZXIgdGhhbiBgZmlsZW5hbWUnKSBhcyB0aGUgcGFyYW1ldGVyIHRvIGd6b3BlbiBhbmQgb3Blbi4KClR1ZSBKYW4gMjMgMTY6MjY6MzAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtOiBmaXhlZCBhIHByb2JsZW0gd2l0aCBFWFRSQV9ESVNUCgpNb24gSmFuIDIyIDIzOjQyOjE3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSBleGFtcGxlL01ha2VmaWxlLmFtOiBmaW5hbGx5IGZvdW5kIHRoZSB0cmljawoJICB0byBidWlsZCB0aGUgZXhhbXBsZSwgaS5lLiBhZGQgIi4iIGluIFNVQkRJUlMgYmVmb3JlIGV4YW1wbGUKCSAgaW4gdGhlIGxpc3QgPGdyaW4vPgoKTW9uIEphbiAyMiAxNjozMDozNyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL3htbC5odG1sOiB1cGRhdGVkIHdpdGggYW4gWFNMVCBzZWN0aW9uLCByZW1vdmVkIHBvaW50ZXIgdG8KCSAgVzNDIENWUyBiYXNlLgoKTW9uIEphbiAyMiAxMTo0MzoyMSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogd2hlbiBjb3B5aW5nIGEgWFNMVCB0cmVlIG9iamVjdCB0ZWggdHJlZSBuZWVkIHRvIGJlIGNvcGllZAoJICB0b28sIGFuZCBkZWFsbG9jYXRpb24gbmVlZCB0byBvY2N1ciB0aGUgc2FtZSB3YXkuCgpNb24gSmFuIDIyIDEwOjM1OjQwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aEludGVybmFscy5oIHhwYXRoLltjaF0gZGVidWdYTUwuYzogYWRkZWQgdGhlIFhQQVRIX1hTTFRfVFJFRQoJICB0eXBlIGNvcnJlcG9uZGluZyB0byBhbiBYU0xUIHJlc3VsdCB0cmVlIGZyYWdtZW50LiBTaGFyZSBtb3N0CgkgIG9mIHRoZSBkYXRhIGZvcm1hdCB3aXRoIG5vZGUgc2V0LCBhcyB3ZWxsIGFzIG9wZXJhdG9ycy4KCSogSFRNTHRyZWUuYzogYWRkZWQgYSBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGRvY3R5cGUgb3V0cHV0CgkgIHdoZSB0aGlzIG9uZSBpcyBub3QgcHJlc2VudCBpbml0aWFsbHkuCgkqIHRyZWUuYzogbWFrZSBzdXJlIHRhaHQgdGhlIHBhcmVudCBhbmQgZG9jIHBvaW50ZXJzIGFyZSBwcm9wZXJseQoJICBzZXQgd2hlbiBjb3B5aW5nIGF0dHJpYnV0ZXMgKGxpc3RzKS4KClN1biBKYW4gMjEgMTA6NDc6MzggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGh0bWxUcmVlLltjaF0geG1sSU8uaDogZXhwb3J0ZWQgaHRtbERvY0NvbnRlbnREdW1wT3V0cHV0CgpGcmkgSmFuIDE5IDE4OjE1OjUwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBzZWVtcyBJIGZpbmFsbHkga2lsbGVkIHRoYXQgdWdseSBwYXRoIGV2YWx1YXRpb24KCSAgY29udGV4dCBidWcgKHRhZ2dlZCA5OTk5IGluIGNhc2UgaXMgaXMgd3JvbmcpCgpGcmkgSmFuIDE5IDA2OjMwOjM4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5bY2hdIHhwYXRoSW50ZXJuYWxzLmg6IGFkZGVkIHhtbFhQYXRoUmVnaXN0ZXJWYXJpYWJsZUxvb2t1cCgpCgkgIGZvciBYU0xUCgpUaHUgSmFuIDE4IDE2OjE5OjQ3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxJTy5jOiBHYXJ5IFBlbm5pbmd0b24gPEdhcnkuUGVubmluZ3RvbkB1ay5zdW4uY29tPiBmaXgKCSAgZm9yIHhtbEd6ZmlsZU9wZW4oKSBidWcKClRodSBKYW4gMTggMTM6MTE6NTAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHJlbW92ZWQgYW4gZXJyb3IgZm91bmQgYnkgWFNMVCB1c2FnZQoJKiB0cmVlLmMgcGFyc2VySW50ZXJuYWxzLmg6IHVzZSBhIHByZWRlZmluZWQgc3RhdGljIHN0cmluZwoJICBmb3IgdGV4dCBhbmQgY29tbWVudCBub2RlcywgYXZvaWQgZnJlZWluZyB0aGVtIGluIHhtbEZyZWVOb2RlLAoJICBleHBvcnRlZCB0aGUgc3RyaW5nIG5hbWUgaW4gcGFyc2VySW50ZXJuYWxzLmggYW5kIGFkZGVkCgkgIGFub3RoZXIgdmFsdWUgdG8gZGlzYWJsZSBlbmNvZGluZyBhdCBvdXRwdXQgKGZvciBYU0xUKSwKCSAgZ2FpbiBtZW1vcnksIHRpbWUuCgpXZWQgSmFuIDE3IDA5OjE1OjE2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB3aW4zMi9SRUFETUUuTVNEZXYgd2luMzIvbGlieG1sMi9saWJ4bWwyX2EuZHNwCgkgIHdpbjMyL2xpYnhtbDIvbGlieG1sMl9zby5kc3A6IG5ldyBtYWtlZmlsZXMgYW5kIHVwZGF0ZQoJICBwcm92aWRlZCBieSBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KClR1ZSBKYW4gMTYgMTg6MjQ6NDYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYyA6IHhtbFNhdmVGaWxlLCB4bWxTYXZlRmlsZUVuYywgYXBwbGllZCBwYXRjaCBmcm9tIAoJICBHYXJ5IFBlbm5pbmd0b24KCk1vbiBKYW4gMTUgMjA6MjQ6MTggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIHRoZSBjb21hcHJpc2lvbiBvZiB2YWx1ZXMgYW5kIG5vZGVsaXN0cywKCSAgbmVlZCB0byBjb21wYXJlIG5vZGVsaXN0IHN0aWxsIC4uLgoJKiBkZWJ1Z1hNTC5jOiBhdm9pZGVkIGEgcG9zc2libGUgY29yZSBkdW1wCgkqIEhUTUxwYXJzZXIuYzogY2xlYW51cAoJKiBuYW5vaHR0cC5jOiBjb250cmlidXRlZCBmaXguCgkqIHRyZWUuYzogZml4ZXMgaW4gcHJvcGVydGllcyBoYW5kbGluZyBhZGRlZCB4bWxTZXROc1Byb3AKCSAgbmVlZGVkIGJ5IGxpYnhzbHQKCSogeHBhdGhJbnRlcm5hbHMuaDogZXhwb3J0ZWQgeG1sWFBhdGhCb29sZWFuRnVuY3Rpb24sIGFkZGVkIGEgCgkgIGNvbW1lbnQKCSogVE9ETzogdXBkYXRlZAoKU2F0IEphbiAgNiAyMjowNTowOSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmM6IGFwcGxpZWQgQmpvcm4gUmVlc2Ugb3B0aW1pemF0aW9uCgkgIHBhdGNoCgpTYXQgSmFuICA2IDE5OjEzOjI3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbTogYXBwbGllZCBwYXRjaCBmcm8gbWFrZSBjaGVjayBmcm9tIE1hcnRpbiBWaWRuZXIKClRodSBKYW4gIDQgMTk6MDc6NDkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuMi4xMQoJKiBkb2MvaHRtbC8qOiByZWJ1aWxkIHRoZSBIVE1MIGZpbGVzCgkqIGRvYy94bWwuaHRtbCA6IHVwZGF0ZWQKClRodSBKYW4gIDQgMTQ6MDk6NTggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogZml4ZWQgYSBzdHVwaWQgYnVnCgkqIHZhbGlkLmM6IGFwcGxpZWQgIlBhdWwgRC4gU21pdGgiIDxwYXVzbWl0aEBub3J0ZWxuZXR3b3Jrcy5jb20+CgkgIHBhdGNoZXMgcmVsYXRlZCB0byB2YWxpZGF0aW9uIG9mIGFuIFhJbmNsdWRlIHByb2Nlc3NpbmcgcmVzdWx0CgkqIFRPRE86IHVwZGF0ZWQKClRodSBKYW4gIDQgMTE6NDY6NDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGVuY29kaW5nLmMgeG1sSU8uYzogRml4aW5nIHRoZSBwcm9ibGVtIHJlcG9ydGVkIGJ5IE1hcmMgU2FuZmFjb24KCSAgb24gbGFyZ2UgZmlsZXMKCldlZCBKYW4gIDMgMjE6NTE6MTMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbElPLmM6IGZpeGVkIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlTWVtIGRvYwoKV2VkIEphbiAgMyAxODo1NjowMCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jOiBodG1sQ2hlY2tQYXJhZ3JhcGggdG8gY2hlY2sgaHRtbE9taXR0ZWREZWZhdWx0VmFsdWUsCgkgIHJlcG9ydGVkIGJ5IEpvbmFzIEJvcmdzdHL2bQoJKiBuYW5vaHR0cC5jOiBBcHBsaWVkIEJqb3JuIFJlZXNlJyBJUFY2IGZpcnN0IHBhdGNoCgpXZWQgSmFuICAzIDE2OjE5OjM5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0ZXN0WFBhdGguYyB4cGF0aC5jOiBmaXhpbmcgdGhlIFhQYXRoIHVuaW9uIGV4cHJlc3Npb25zIHByb2JsZW0KCSAgcmVwb3J0ZWQgYnkgIE1hcnRpbiBWaWRuZXIgPG1hcnRpbkBhcnRheC5rYXJsaW4ubWZmLmN1bmkuY3o+CgpXZWQgSmFuICAzIDE0OjIyOjMzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxsaW50LmM6IE1hZGUgaXMgc28gaWYgdGhlIGZpbGUgbmFtZSBpcyAiLSIgaXMgd2lsbCByZWFkIGZvcm0KCSAgc3RhbmRhcmQgaW5wdXQuIFN2ZW4gSGVpbmlja2UgIDxzdmVuQHplbi5vcmc+CgkqIHRyZWUuYzogZml4ZWQgYSBwcm9ibGVtIHdoZW4gZ3Jvd2luZyBidWZmZXIKCSogdHJlZS5oOiBmaXhlZCB0aGUgY29tbWVudCBvZiB0aGUgbm9kZSB0eXBlcyBmb2xsb3dpbmcgYW5kZXJzY2EKCSAgY29tbWVudAoJKiBUT0RPOiB1cGRhdGVkCgpXZWQgRGVjIDI3IDEyOjM1OjQ5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuW2NoXTogYWRkZWQgYSB3YXkgdG8gYXZvaWQgYWRkaW5nIGF1dG9tYXRpY2FsbHkKCSAgb21pdHRlZCB0YWdzLiBodG1sSGFuZGxlT21pdHRlZEVsZW0oKSBhbGxvd3MgdG8gY2hhbmdlIHRoZQoJICBkZWZhdWx0IGhhbmRsaW5nLgoJKiB0cmVlLltjaF0geG1sbGludC5jOiBhZGRlZCB4bWxEb2NEdW1wRm9ybWF0TWVtb3J5KCkgYW5kIAoJICB4bWxEb2NEdW1wRm9ybWF0TWVtb3J5RW5jKCksIHVzZXMgbWVtb3J5IGZ1bmN0aW9ucyBmb3Igb3V0cHV0CgkgIG9mIHhtbGxpbnQgdG9vIHdoZW4gdXNpbmcgLS1tZW1vcnkgZmxhZywgYWRkZWQgYSBtZW1vcnkgdGVzdAoJICBzdWl0ZSBhdCB0aGUgTWFrZWZpbGUgbGV2ZWwuCgkqIHhwYXRoSW50ZXJuYWxzLmggeHBhdGguW2NoXSB4cG9pbnRlci5jOiBmaXhlZCBwcm9ibGVtcwoJICB3aXRoIG5hbWVzcGFjZSB1c2Ugd2hlbiBlbmNvdW50ZXJpbmcgUU5hbWVzIGluIFhQYXRoIGV2YWxhdGlvbiwKCSAgYWRkZWQgeG1sbnMoKSBzY2hlbWUgaW4gWFBvaW50ZXIuCgkqIG5hbm9mdHAuYyA6IGluY29ycG9yYXRlZCBhIGZpeAoJKiBwYXJzZXIuYyB4bWxJTy5jOiBmaXhlZCBwcm9ibGVtcyByYWlzZWQgd2l0aCBlbmNvZGluZyB3aGVuIHVzaW5nCgkgIHRoZSBtZW1vcnkgSS9PCgkqIHBhcnNlckludGVybmFscy5jOiBjbG9zZWQgYnVnIDI1OTM0IHJlcG9ydGVkIGJ5IAoJICB0b3JzdGVuLmxhbmRzY2hvZmZAaW5ub21pbmF0ZS5kZQoJKiBUT0RPOiB1cGRhdGVkCgpTYXQgTm92IDI1IDExOjQ2OjI3IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MvaHRtbC8qIGRvYy94bWwuaHRtbDogbWFkZSBhIDIuMi45IHJlbGVhc2UKCSAgb24gYSBub24tdXBkYXRlZCB0cmVlIDotKCwgbWFkZSBhIDIuMi4xMCByZWxlYXNlIHRvIGNvcnJlY3QgdGhlCgkgIHNpdHVhdGlvbgoKU2F0IE5vdiAyNSAxMDo0MTozNyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vaHR0cC5jIHBhcnNlci5bY2hdIHRyZWUuW2NoXSB4bWxJTy5bY2hdIHhtbGxpbnQuYyB4cGF0aC5jCgkgIHBhcnNlckludGVybmFscy5oIHZtcy9idWlsZF9saWJ4bWwuY29tIHZtcy9jb25maWcudm1zIE1ha2VmaWxlLmFtOgoJICBpbnRlZ3JhdGVkIGEgc2V0IG9mIE9wZW5WTVMgY2hhbmdlcyBmcm9tIEhvd2FyZCBUYXlsb3IKCSAgPEhvd2FyZC5UYXlsb3JAcGFjb2FzdC5jb20+CgpTYXQgTm92IDI1IDAxOjIxOjAxIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXSB4bWxJTy5jOiBhZGRlZCB4bWxEb2NEdW1wTWVtb3J5RW5jKCkgZnJvbSBKb2huIEtyb2xsCgkqIGVycm9yLmM6IGFwcGxpZWQgZml4IHN1Z2dlc3RlZCBieSAiTGVvIERhdmlkc29uIiA8bGVvQG94LmNvbXBzb2MubmV0PgoKU2F0IE5vdiAyNSAwMDoyNDo0OSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IHNvbWUgZml4ZXMgb24gYXV0by1vcGVuIG9mIGh0bWwvaGVhZC9ib2R5CgkqIGVuY29kaW5nLmM6IGZpeGVkIGEgY29tcGlsYXRpb24gZXJyb3Igb24gc29tZSBnY2MgZW52CgkqIHhwYXRoLmMgeHBvaW50ZXIuW2NoXSB4cGF0aEludGVybmFscy5oOiBpbXByb3ZlZCB0aGUKCSAgWFBvaW50ZXIgaW1wbGVtZW50YXRpb24KCSogdGVzdC9YUGF0aC94cHRyL3N0cnBvaW50IHRlc3QvWFBhdGgveHB0ci9zdHJyYW5nZTM6IGFkZGVkCgkgIHJlbGF0ZWQgWFBvaW50ZXIgdGVzdHMgYW5kIGFzc29jaWF0ZWQgcmVzdWx0cwoKRnJpIE5vdiAyNCAxNDowMTo0NCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sZHRkLmh0bWwgZG9jL3htbC5odG1sOiBmb2xsb3dpbmcgYSBzaG9ydCBzdGVwIGJ5IHN0ZXAKCSAgZ3VpZGFuY2Ugb24gSVJDIHRvIGhlbHAgbWFjaWVqIHdpdGggRFREcyBJIHN0YXJ0ZWQgYSBzbWFsbAoJICBwYWdlIG9uIHRoZSBzdWJqZWN0LgoKRnJpIE5vdiAxNyAxNzoyODowNiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGhhbmRsaW5nIG9mIGJyb2tlbiBjaGFycmVmcwoJKiB4bWxtZW1vcnkuaCBsaWJ4bWwyLmRzcCBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IHJlcG9ydGluZyBXaW5kb3dzCgkgIHBhdGNoZXMKCk1vbiBOb3YgMTMgMTk6MTc6MjAgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sIGRvYy9odG1sLyogOiByZWJ1aWx0IHRoZSBkb2NzIGFmdGVyIGFkZGluZwoJICB4aW5jbHVkZSBhbmQgdXBkYXRlZCBwYWdlIGZvciAyLjIuNyBhbmQgMi4yLjgKCSogY29uZmlndXJlLmluOiByZWxlYXNpbmcgMi4yLjgKCk1vbiBOb3YgMTMgMTI6Mzk6MzggQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLltjaF0gcGFyc2VySW50ZXJuYWxzLmM6IGFwcGxpZWQgdGhlIGNvbmRpdGlvbmFsCgkgIHNlY3Rpb24gcHJvY2Vzc2luZyBmaXggZnJvbSBKb25hdGhhbiBQIFNwcmluZ2VyCgkgIDxqb25hdGhhbi5zcHJpbmdlcjJAZ3RlLm5ldD4KCSogeG1sdmVyc2lvbi5oLmluIHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kc3AgOiBVcGRhdGVkIE1TCgkgIHByb2plY3QgZmlsZSwgZml4ZWQgaWNvbnYgZGVmYXVsdCBub24gc3VwcG9ydAoJKiB4cGF0aC5jOiBmaXhlZCB0aGUgcHJvYmxlbSBvZiBldmFsdWF0aW5nIHJlbGF0aXZlIGV4cHJlc3Npb25zCgkgIHdoZW4gYSBub2RlIGNvbnRleHQgaXMgcHJvdmlkZWQuCgpTdW4gTm92IDEyIDE2OjMxOjE5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYzogZml4ZWQgZ2NjIDIuOTUgbmV3IHdhcm5pbmdzCgkqIFNBWC5jOiBmaXhlZCBhIHN0dXBpZCBidWcKCSogdHJlZS5jOiBmaXhlZCBhIGZvcm1hdHRpbmcgcHJvYmxlbSB3aGVuIHJvdW5kLXRyaXBwaW5nCgkgIGZyb20vdG8gbWVtb3J5CgkqIHhpbmNsdWRlLmM6IGNoYXNlZCBtZW1sZWFrLCBmaXhlZCBhIGJhc2UgcHJvYmxlbQoJKiB4cG9pbnRlci5jOiBhZGRlZCB4bWxYUHRyQnVpbGRSYW5nZU5vZGVMaXN0KCksIGZpbmlzaGVkID8gCgkgIHhtbFhQdHJCdWlsZE5vZGVMaXN0KCkKCSogVE9ETzogdXBkYXRlZAoJKiBNYWtlZmlsZS5hbSB0ZXN0L1hJbmNsdWRlL2RvY3MgdGVzdC9YSW5jbHVkZS9lbnRzIHJlc3VsdC9YSW5jbHVkZToKCSAgYWRkaW5nIGEgZmlyc3Qgc21hbGwgc2V0IG9mIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIFhJbmNsdWRlCgpUdWUgTm92ICA3IDE1OjExOjM0IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9odHRwLltjaF06IGFwcGxpZWQgV2F5bmUgRGF2aXNvbiBwYXRjaGVzIHRvIGFjY2VzcwoJICB0aGUgV1dXLUF1dGhvcml6YXRpb24gaGVhZGVyLgoJKiBwYXJzZXIuYzogQ2xvc2VkIEJ1ZyMzMDg0NzogUHJvYmxlbXMgd2hlbiBzd2l0Y2hpbmcgZW5jb2RpbmcKCSAgaW4gc2hvcnQgZmlsZXMgYnkgYXBwbHlpbmcgU2ltb24gQmVyZydzIHBhdGNoLgoJKiB2YWxpZC5jOiBmaXhlZCBhIHZhbGlkYXRpb24gcHJvYmxlbQoJKiBoYXNoLmMgcGFyc2VyLmggcGFyc2VySW50ZXJuYWxzLmggdGVzdEhUTUwuYyB0ZXN0U0FYLmMgdHJlZS5oCgkgIHhtbGVycm9yLmggeG1sbWVtb3J5LmggeG1sdmVyc2lvbi5oLmluOiBhcHBsaWVkIGEgRExMIHBhdGNoIGZyb20KCSAgV2F5bmUgRGF2aXNvbgoJKiB4cG9pbnRlci5bY2hdOiBhZGRlZCBmaXJzdCB2ZXJzaW9uIG9mIHhtbFhQdHJCdWlsZE5vZGVMaXN0KCkKCSAgbmVlZCB0byBiZSBleHRlbmRlZCB0byBub24gZnVsbCBub2RlcyBzZWxlY3Rpb25zLgoJKiB4aW5jbHVkZS5jOiBzdGFydHMgdG8gd29yayBkZWNlbnRseQoKTW9uIE5vdiAgNiAxNzoyMjo0NiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF0geGluY2x1ZGUuW2NoXSB4bWxsaW50LmMgY29uZmlndXJlLmluIHZhbGlkLmMKCSAgZGVidWdYTUwuYyB4bWx2ZXJzaW9uLmguaW46IFN0YXJ0ZWQgYWRkaW5nIFhJbmNsdWRlIHN1cHBvcnQsCgkgIHRoaXMgaXMgYSBuZXcgeG1sbGludCBvcHRpb24KCSogdHJlZS5jIHhwYXRoLmM6IGFwcGxpZWQgVE9NIHBhdGNoZXMgZm9yIFhQYXRoCgkqIHhwb2ludGVyLmM6IGZpeGVkIGEgY291cGxlIG9mIGVycm9ycy4KCSogdXJpLmM6IGFkZGVkIGFuIGVzY2FwaW5nIGZ1bmN0aW9uIG5lZWRlZCBmb3IgeGluY2x1ZGUKCSogdGVzdFhQYXRoLmMgaGFzaC5jIEhUTUx0cmVlLmM6IG1pbm9yIGNsZWFudXBzIHJhaXNlZCBieQoJICBuZXcgd2FybmluZyBmcm9tIFJINzAgZ2NjJ3MgdmVyc2lvbgoKVHVlIE9jdCAzMSAxNDoxNDoxMyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGxvb3Agb24gaW52YWxpZCBjaGFyIGluIHNjcmlwdHMKCSogcGFyc2VyLmM6IHVwZGF0ZSB0byBkZXNjcmlwdGlvbiBvZiB4bWxJT1BhcnNlRFREKCkKCSogbGlieG1sLm00IHhtbHZlcnNpb24uaC5pbjogY2hhbmdlcyBjb250cmlidXRlZCBieQoJICBNaWNoYWVsIFNjaG1laW5nIDxtLnNjaG1laW5nQGludGVybmV0LWZhY3RvcnkuZGU+CgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIGZvciAyLjIuNwoJKiBNYWtlZmlsZS5hbTogdHJ5aW5nIHRvIGF2b2lkICBjb25maWcuaCBhbmQgYWNjb25maWcuaAoJICBiZWluZyBpbmNsdWRlZCBpbiB0aGUgZGlzdHJpYgoJKiBjb25maWd1cmUuaW46IHJlbGVhc2VkIDIuMi43CgpNb24gT2N0IDMwIDE3OjA4OjEwIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXSBkZWJ1Z1hNTC5jIHBhcnNlckludGVybmFscy5jIHhwYXRoLmM6IERlcHJlY2F0ZWQgUGkncwoJICBsaWtlIG5hbWVzcGFjZXMgZm9yIGdvb2QuIFVuaWZpZWQgeG1sTnMgYW5kIHhtbE5vZGUgc29tZXdoYXQuCgpNb24gT2N0IDMwIDE2OjI2OjQ5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdOiBhZGRlZCB4bWxJT1BhcnNlRFREKCkKCSogeHBvaW50ZXIuYzogYWRkZWQgc3VwcG9ydCBmb3IgdGhlIDIgZXh0cmEgcGFyYW1ldGVycyBvZgoJICBzdHJpbmctcmFuZ2UsIGZpeGVkIGEgc3Rvb3BpZCBlcnJvciB3aGVuICcwJyB3YXMgcHJlc2VudAoJICBpbiBYUG9pbnRlciBleHByZXNzaW9ucwoJKiB0ZXN0L1hQYXRoL3hwdHIvc3RycmFuZ2UyIHJlc3VsdC9YUGF0aC94cHRyL3N0cnJhbmdlMjogYWRkZWQKCSAgdGVzdHN1aXRlIGZvciB0aGUgYWJvdmUKCk1vbiBPY3QgMzAgMTA6MjY6NDMgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbGlieG1sLnNwZWMuaW46IGltcHJvdmVkIHBhY2thZ2UgZGVzY3JpcHRpb25zCgpTdW4gT2N0IDI5IDE5OjAzOjExIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmMgeHBhdGhJbnRlcm5hbHMuaDogYXBwbGllZCBhIGxhcmdlIGNsZWFuaW5nIHBhdGNoCgkgIGZyb20gVE9NIDxwdGl0dG9tQGZyZWUuZnI+LCBpdCBhbHNvIGFkZCBuYW1lc3BhY2Ugc3VwcG9ydAoJICBmb3IgZnVuY3Rpb24gYW5kIHZhcmlhYmxlcyByZWdpc3RyYXRpb24uCgpTdW4gT2N0IDI5IDE4OjUxOjQ2IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHVyaS5jOiBXYXluZSBEYXZpc29uJ3MgcGF0Y2ggZml4aW5nIHhtbEJ1aWxkVVJJKCkKCSogTWFrZWZpbGUubWluZ3c6IFdheW5lIERhdmlzb24ncyB1cGRhdGUgYWRkaW5nIGhhc2guYwoKU3VuIE9jdCAyOSAxODozODoxMiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jOiBmaXhlZCB0aGUgcm9vdCBldmFsdWF0aW9uIHByb2JsZW1zCgkqIEhUTUxwYXJzZXIuYyByZXN1bHQvSFRNTC9kb2MzLmh0bTogZml4ZWQgdGhlIHByb2JsZW0gb2Ygbm9uCgkgIGlnbm9yYWJsZSBzcGFjZXMgd2l0aCA8Yj4gPGJvbGQ+IDxlbT4KCSogdHJlZS5jOiBmaXhlZCBhIGxvb3AgaW4geG1sU2VhcmNoTnNCeUhyZWYoKQoKRnJpIE9jdCAyNyAxODo1NzozMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguYzogYXBwbGllZCBhbm90aGVyIFhQYXRoIHBhdGNoIGZyb20gVE9NIAoJKiB4cGF0aC5jIGluY2x1ZGUvbWFrZWZpbGUuYW06IGFwcGxpZWQgYW5vdGhlciBwYXRjaCBmcm9tIAoJICBjaGluYUB0aGV3cml0dGVud29yZC5jb20gKGNsZWFudXAgb24gSVJJWCkuCgpGcmkgT2N0IDI3IDEzOjQ1OjI4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWwtY29uZmlnLjE6IHJlY2VpdmVkIGEgZml4ZWQgdmVyc2lvbiBmcm9tIEZyZWRyaWsgSGFsbGVuYmVyZwoJICA8aGFsbG9uQGx5c2F0b3IubGl1LnNlPgoKVGh1IE9jdCAyNiAxNjowNToyNSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguYyB0ZXh0WFBhdGguYyB4cGF0aEludGVybmFscy5oOiBhcHBsaWVkIFRPTSA8cHRpdHRvbUBmcmVlLmZyPgoJICBjbGVhbnVwIHBhdGNoIGZvciBYUGF0aAoKV2VkIE9jdCAyNSAyMTozMToxMCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGF0Y2hlZCB0byByZWRpcnJlY3QgYWxsICJvdXQgb2YgY29udGV4dCIgZXJyb3IgbWVzc2FnZXMgdG8KCSAgYSByZWNvbmZpZ3VyYWJsZSByb3V0aW5lLiBUaGUgY2hhbmdlcyBhcmU6CgkqIHhtbGVycm9yLmggOiBhZGRlZCB0aGUgZXhwb3J0IG9mIGFuIGVycm9yIGNvbnRleHQgdHlwZSAodm9pZCAqKQoJICBhbiBlcnJvciBoYW5kbGVyIHR5cGUgeG1sR2VuZXJpY0Vycm9yRnVuYyB0aGVyZSBpcyBhbiBpbnRlcmZhY2UKCSAgeG1sU2V0R2VuZXJpY0Vycm9yRnVuYyh2b2lkICpjdHgsIHhtbEdlbmVyaWNFcnJvckZ1bmMgaGFuZGxlcik7CgkgIHRvIHJlc2V0IHRoZSBlcnJvciBoYW5kbGluZyByb3V0aW5lIGFuZCBpdHMgYXJndW1lbnQKCSAgKGJ5IGRlZmF1bHQgaXQncyBlcXVpdmFsZW50IHRvIHJlc3BlY3RpdmVseSBmcHJpbnRmIGFuZCBzdGRlcnIuCiAgICAgICAgKiBhbGwgdGhlIGMgZmlsZXM6IGFsbCB3aWxkIGFjY2Vzc2VzIHRvIHN0ZGVyciBvciBzdGRvdXQgd2l0aGluCgkgIHRoZSBsaWJyYXJ5IGhhdmUgYmVlbiByZXBsYWNlZCB0byBjYWxscyB0byB0aGUgaGFuZGxlci4KCldlZCBPY3QgMjUgMTU6Mjc6MTkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzZSAyLjIuNgoJKiB4cGF0aC5bY2hdIHhwb2ludGVyLmMgeHBhdGhJbnRlcm5hbHMuaDogYWRkZWQgeHBhdGhJbnRlcm5hbHMuaAoJICBleHBvcnRpbmcgdGhlIGlubmVyIGZ1bmN0aW9ucyBvZiB4cGF0aCBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvYwoKV2VkIE9jdCAyNSAxMjo0ODo1NSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuYyA6IGFwcGxpZWQgV2F5bmUgSFRUUCBjbGVhbnVwIHBhdGNoCgkqIHRyZWUuW2NoXTogYXBwbGllZCBUT00gPHB0aXR0b21AZnJlZS5mcj4gZm9yIHhtbE5vZGVTZXRCYXNlKCkKCSAgYW5kIHhtbE5vZGVTZXRTcGFjZVByZXNlcnZlKCkKCldlZCBPY3QgMjUgMTI6MTE6MDMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmM6IGNsb3NpbmcgYnVnICMyOTI2MAoKVHVlIE9jdCAyNCAxODo0OTozNCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogaGFzaC5bY2hdIGRlYnVnWE1MLmM6IGV4cGFuZGVkL2VuaGFuY2VkIHRoZSBBUEksIGFkZGVkCgkgIG11bHRpa2V5IHR1cGxlcywgbWFkZSBoYXNoIHN0cnVjdHVyZSBvcGFxdWUKCSogdmFsaWQuW2NoXTogbW92ZWQgZWxlbWVudHMsIGF0dHJpYnV0ZXMsIG5vdGF0aW9ucyBkZWNhbGFyYXRpb25zCgkgIGFzIHdlbGwgYXMgSUQgYW5kIHJlZnMgdG8gaGFzaCB0YWJsZXMuCgkqIGVudGl0aWVzLmM6IGhhc2ggY2xlYW51cAoJKiB4bWxtZW1vcnkuYzogZml4ZWQgYSBkdW1wIHByb2JsZW0gaW4gZGVidWcgbW9kZQoJKiBpbmNsdWRlL01ha2VmaWxlLmFtOiBwcm9ibGVtIHBhc3NpbmcgaW4gREVTVERJUj0gdmFsdWVzIHBhdGNoCgkgIGZyb20gTWFyYyBDaHJpc3RlbnNlbiA8bWFyY0BjYWxkZXJhc3lzdGVtcy5jb20+CgkqIG5hbm9odHRwLmM6IHJlbW92ZWQgZGVidWdnaW5nIHJlbWFpbnMKCSogSFRNTHBhcnNlci5jOiB0aGUgYm9ndXMgdGFnIHNob3VsZCBiZSBpZ25vcmVkIChXYXluZSkKCSogSFRNTHBhcnNlci5jIHBhcnNlci5jOiBmaXhpbmcgYSBudW1iZXIgb2YgcHJvYmxlbXMgd2l0aCB0aGUKCSAgbWFjcm9zIGluIHRoZSAqcGFyc2VyLmMgZmlsZXMgKFdheW5lKS4KCSogSFRNTHBhcnNlci5jOiBjbG9zZSB0aGUgcHJldmlvdXMgb3B0aW9uIHdoZW4gb3BlbmluZyBhIG5ldyBvbmUKCSAgKE1hcmMgU2FuZmFjb24pLgoJKiByZXN1bHQvSFRNTC8qOiB1cGRhdGVkIHRoZSBIVE1MIHJlc3VsdHMgYWNjb3JkaW5nbHkKClN1biBPY3QgMjIgMTg6Mzk6MTkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGVudGl0aWVzLltjaF0geHBhdGguW2NoXSBoYXNoLltjaF0gZGVidWdYTUwuYyB0cmVlLmg6IGFkZGVkL2hhY2tlZAoJICBoYXNoIHRhYmxlcyBmcm9tIEJqb3JuIFJlZXNlIDxicmVlc2VAbWFpbDEuc3RvZmFuZXQuZGs+LiBTd2l0Y2hlZAoJICBYUGF0aCBmdW5jdGlvbnMgYW5kIFhNTCBlbnRpdGllcyB0YWJsZSB0byB0aGVtLiBNb3JlIHRvIGNvbWUuLi4KCSogeG1sSU8uYzogZml4ZWQgbGlieG1sIGNsb3NpbmcgRklMRXMgaXQgZGlkbid0IG9wZW4uCgpTdW4gT2N0IDIyIDEzOjU5OjUwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IGNvYWxlc2NlIGFkamFjZW50IHRleHQgbm9kZXMKCSogdmFsaWQuYzogaGFuZGxpbmcgb2YgYmxhbmsgbm9kZXMgaW4gRFRkIHZhbGlkYXRpb24gKHJhaXNlZAoJICBieSBwcm9ibGVtcyB3aXRoIGEgcG9zdGVyaW9yaSB2YWxpZGF0aW9uKS4KCSogbmFub2h0dHAuYzogY2hhbmdpbmcgYmVoYXZpb3VyIG9uIEhUVFAgd3JpdGUgc3R1ZmYuCgkqIEhUTUx0cmVlLmM6IGZvcmNlZCBib2R5IGFuZCBodG1sIHRvIGJlIGV4cGxpY2l0ZWx5IGNsb3NlZC4KCSogeHBhdGguaDogZXhwb3J0ZWQgbW9yZSBYUGF0aCBmdW5jdGlvbnMuCgpTdW4gT2N0IDE1IDIyOjI4OjMyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgogICAgICAgICogUmVsZWFzZSBvZiAyLjIuNQoJKiB4cG9pbnRlci5jOiByYW5nZSgpIHJhbmdlLWluc2lkZSBhbmQgb3RoZXIgaGVscGVyIGZ1bmN0aW9ucwoJKiBwYXJzZXJJbnRlcm5hbHMuYzogZml4ZWQgcGVyZiBwcm9ibGVtIHJhaXNlZCBieSByb2xmQHBvaW50c21hbi5kZQoKU3VuIE9jdCAxNSAxNjoyMToyNyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogU0FYLmM6IEhUTUwgYXR0cmlidXRlcyBuZWVkIG5vcm1hbGl6YXRpb24gdG9vIChCam9ybiBSZWVzZSkKCSogSFRNTHBhcnNlci5bY2hdOiBhZGRkZWQgaHRtbElzU2NyaXB0QXR0cmlidXRlKCkKClN1biBPY3QgMTUgMTM6MTg6MzYgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy8qOiByZWJ1aWx0IGRvY3MgcHJlcGFyaW5nIGZvciAyLjIuNSByZWxlYXNlLCBhZGRlZCBVUkkKCSAgYW5kIFhQb2ludGVyIG1vZHVsZXMKClN1biBPY3QgMTUgMTI6MTM6MzAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFNBWC5oOiBjbG9zZWQgIzI1MTA3CgpTdW4gT2N0IDE1IDEyOjA2OjE2IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0ZXN0U0FYLmM6IGZpeGVkIHByb2JsZW0gd2l0aCBjZGF0YSByZXBvcnRpbmcKCSogU0FYcmVzdWx0LyogOiB1cGRhdGVkCgpTdW4gT2N0IDE1IDEyOjAwOjI0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYyB0ZXN0L3dhcC54bWwgcmVzdWx0L25vZW50L3dhcC54bWwgcmVzdWx0L3dhcC54bWw6CgkgIENsb3NlZCBidWcgIzI3NDk5LCBhZGRlZCB0byByZWdyZXNzaW9uIHRlc3RzCgkqIFRPRE86IHVwZGF0ZWQKClN1biBPY3QgMTUgMDE6MzQ6MzcgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5bY2hdIFNBWC5jIHRlc3RIVE1MLmMgdHJlZS5jOiBmaXhlZCBIVE1MCgkgIHN1cHBvcnQgZm9yIFNDUklQVCBhbmQgU1RZTEUgd2l0aCBoZWxwIGZyb20gQmpvcm4gUmVlc2UKCSogdGVzdC9IVE1MLyogcmVzdWx0L0hUTUwvKjogYWRkZWQgc2ltcGxlIHRlc3RjYXNlIGFuZCB1cGRhdGVkCgkgIHRoZSBleGlzdGluZyBvbmVzLgoJICAKRnJpIE9jdCAxMyAxODoyNDozMSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguYyB4cG9pbnRlci5jOiBYUG9pbnRlciByZW9yZGVyIG9mIHJhbmdlcyBzdGFydC9lbmQgYW5kCgkgIHN0cmluZy1yYW5nZSBmb3IgZW1wdHkgc3RyaW5ncwoJKiB0ZXN0L1hQYXRoL2RvY3Mvc3RyIHRlc3QvWFBhdGgveHB0ci9jaGFwdGVyc3JhbmdlCgkgIHRlc3QvWFBhdGgveHB0ci9zdHJyYW5nZTogYXVnbWVudGVkIHRoZSBYUG9pbnRlciB0ZXN0c3VpdGUKCkZyaSBPY3QgMTMgMTI6MjE6NDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCBkb2MveG1sbWVtLmh0bWw6IGFkZGVkIGEgbW9kdWxlIGRlc2NyaWJpbmcgbWVtb3J5CgkgIGludGVyZmFjZXMgYW5kIHVzZSwgdXBkYXRlZCB0aGUgbWFpbiBwYWdlLgoKRnJpIE9jdCAxMyAwMToyMzo0OCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmMgeG1sSU8uYzogV2F5bmUgRGF2aXNvbiBXaW4zMiBwYXRjaAoJICBuYW5vZnRwIGNvZGUgd29yayBvbiBXaW5kb3dzIHRvbyBub3cKCkZyaSBPY3QgMTMgMDA6NTQ6MzcgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRlc3RYUGF0aC5jIHhwYXRoLltjaF06IG1vdmVkIHNvbWUgZGVidWcgZnVuY3Rpb25zIHRvIHhwYXRoIGNvcmUKCSogeHBvaW50ZXIuYzogaW1wbGVtZW50ZWQgc3RyaW5nLXJhbmdlKCkgYXQgbGVhc3QgYSBnb29kIGZpcnN0IHZlcnNpb24KCSogdGVzdC9YUGF0aC9kb2NzL3N0ciB0ZXN0L1hQYXRoL3hwdHIvc3RycmFuZ2UKCSAgcmVzdWx0L1hQYXRoL3hwdHIvc3RycmFuZ2U6IHRoZSBzdHJpbmctcmFuZ2UoKSB0ZXN0cwoKVGh1IE9jdCAxMiAxMDowMjo1OSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTWFrZWZpbGUuYW0gaW5jbHVkZS9NYWtlZmlsZS5hbSBpbmNsdWRlL3dpbjMyY29uZmlnLmgKCSAgd2luMzIvTWFrZWZpbGUubWluZ3c6IGZpeGVkIHByb2JsZW1zIHJlcG9ydGVkIGJ5IFdheW5lIERhdmlzb24KCSAgYW5kIG1ha2UgZGlzdGNoZWNrCgpUaHUgT2N0IDEyIDAxOjQ0OjA4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vaHR0cC5jOiBhZGRlZCB4bWxOYW5vSFRUUFRpbWVvdXQoaW50IGRlbGF5KSwgcmVtb3ZlZCBhIGJ1ZwoJICB4bWxOYW5vSFRUUE1ldGhvZCBvbiBpbnB1dCBNaW1lVHlwZSBUb255IExhbSA8VG9ueS5MYW1AZW5nLnN1bi5jb20+CgkqIHhwb2ludGVyLmM6IHNsaWdodCBleHRlbnNpb24gb2YgeG1sWFB0ckxvY2F0aW9uU2V0TWVyZ2UKClRodSBPY3QgMTIgMDE6Mzc6NTMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZy5oLmluIGNvbmZpZ3VyZS5pbiBuYW5vZnRwLmMgbmFub2h0dHAuYyB4bWx2ZXJzaW9uLmguaW4gOgoJICBwYXRjaCBmb3Igc29ja2xlbl90IGRldGVjdGlvbiBieQoJICBBbGJlcnQgQ2hpbi1BLVlvdW5nIDxjaGluYUB0aGV3cml0dGVud29yZC5jb20+CgpXZWQgT2N0IDExIDE3OjUzOjU3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmMgdmFsaWQuYyB4bWxsaW50LmM6IEZpeGVkIGEgZmV3IHBvc3R2YWxpZGF0aW9uIGJ1Z3MKCSAgYW5kIGFkZGVkIGEgLS1kdGR2YWxpZCBvcHRpb24gdG8geG1sbGludCB1c2VkIHRvIHRlc3QgaXQKCldlZCBPY3QgMTEgMTU6MDE6MjkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbC1jb25maWcuMSBNYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogYWRkaW5nIGEgbWFuIHBhZ2UgZm9yCgkgIHhtbC1jb25maWcgYnkgRnJlZHJpayBIYWxsZW5iZXJnIDxoYWxsb25AbHlzYXRvci5saXUuc2U+CgpXZWQgT2N0IDExIDEyOjQxOjMwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5bY2hdIHhwb2ludGVyLltjaF06IHdvcmtlZCBvbiBYUGF0aCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlCgkgIGhhbmRsaW5ncyAocmVnaXN0cmF0aW9uLCBsb29rdXAsIGNsZWFudXApCgpXZWQgT2N0IDExIDAxOjQ2OjQ0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW0gaW5jbHVkZS9tYWtlZmlsZS5hbTogYWRkaW5nIFhQb2ludGVyCgkgIGFuZCBYUHRydGVzdHMgdGFyZ2V0CgkqIHhwb2ludGVyLltjaF0gOiBuZXcgZmlsZXMgZm9yIFhQb2ludGVyIHN1cHBvcnQKCSogdGVzdC9YUGF0aC94cHRyIHJlc3VsdC9YUGF0aC94cHRyOiBhZGRlZCBYUG9pbnRlciB0ZXN0c3VpdGUgYW5kCgkgIG1vcmUgWFBhdGggdGVzdHMKCldlZCBPY3QgMTEgMDE6MjM6MjUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQsIHZlcnkgYnJva2VuLCBtYWtlIGRpc3RjaGVjayB3b3JrcyBhZ2FpbgoKV2VkIE9jdCAxMSAwMjo1MzoxMCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTW9yZSB3b3JrIHRvd2FyZCAyLjIuNSwgaW50ZWdyYXRlZCBhIG51bWJlciBvZiBwYXRjaGVzCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbSB3aW4zMmNvbmZpZy5oLmluOiB0cnlpbmcgdG8gY2xlYW51cAoJICBtYWtlIGRpc3RjaGVjayAuLi4uIGh1aCAuLi4KCSogaW5jbHVkZS9NYWtlZmlsZS5hbSBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IG5ldyBkaXJlY3RvcnkKCSAgZm9yIGluY2x1ZGVzCgkqIHdpbjMyL01ha2VmaWxlLm1pbmd3IHdpbjMyL1JFQURNRS5NU0RldiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZHNwCgkgIHVwZGF0ZWQgdGVoIG1ha2VmaWxlcyBhbmQgaW5zdHJ1Y3Rpb25zIGZvciBXSU4zMgoJKiB4cGF0aC5jOiBzbWFsbCBmaXhlcwoJKiB0ZXN0L1hQYXRoLyByZXN1bHRzL1hQYXRoOiB1cGRhdGVkIHRoZSB0ZXN0Y2FzZXMgYW5kIHJlc3VsdHMKCSogSFRNTHBhcnNlci5jIG5hbm9odHRwLmMgdGVzdFhQYXRoLmM6IGluY29ycG9yYXRlZCBwcm92aWRlZCBvcgoJICBzdWdnZXN0ZWQgcGF0Y2hlcwoJKiB2YWxpZC5jOiBmaXhlZCBhbiBJRCBidWcKCk1vbiBPY3QgIDkgMTQ6Mjg6NTYgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG1vdmVkIHhtbC1lcnJvci5oIHRvIHhtbGVycm9yLmg6IHNlZW1zIHRoaXMgYWxsb3dlZCB0byBieXBhc3MKCSAgdGhlIGF1dG9tYWtlIGJ1ZyB3aGVyZSB3cm9uZyBkZXBlbmRhbmNpZXMgd2VyZSBnZW5lcmF0ZWQuCgkqIHhwYXRoLltjaF06IHdvcmtlZCBvbiBYUG9pbnRlcgoKRnJpIE9jdCAgNiAxMjo1ODowNCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluIE1ha2VmaWxlLmFtOiAyLjIuNSwgc2hpcCB0aGUgaW5jbHVkZSBpbiBhbgoJICBpbmNsdWRlL2xpYnhtbCBzdWJkaXJlY3RvcnksIHVzZSBzeW1saW5rcyB3aGVuIHVzaW5nIENWUwoJKiB0ZXN0U0FYLmM6IGZpeGVkIHNtYWxsIGJ1ZwoJKiB0ZXN0WFBhdGguYzogY2hhbmdlZCB0aGUgd2F5IHRlc3RmaWxlcyBhcmUgcGFyc2VkCgkqIGRlYnVnWE1MLmM6IHNhbWUga2luZCBvZiBjbGVhbnVwIHdoZW4gcGFyc2luZyBhbiBhcmd1bWVudCBleHByZXNzaW9uCgkgIFhQYXRoL1hQb2ludGVycyBjYW4gaGF2ZSBibGFua3MgZW1iZWRkZWQKCSogeHBhdGguW2NoXTogbW9yZSBjbGVhbnVwLCByZW9yZ3MgZm9yIFhQb2ludGVyIHdvcmsKCSogcGFyc2VySW50ZXJuYWxzLmMgcGFyc2VyLmMgSFRNTHBhcnNlci5jOiBmaXhlZCB3cm9uZyBpbmNsdWRlCgkqIHdpbjMyL1JFQURNRS5NU0RldiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZHNwOiBXaW5kb3dzIHN0dWZmCgpUaHUgT2N0ICA1IDE4OjEzOjE1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkZWJ1Z1hNTC5jIHRlc3RYUGF0aC5jIHhwYXRoLltjaF06IGdvdCBwaXNzZWQgYnkgc29tZSBuYXN0eW5lc3MKCSAgaW4gdGhlIFhQYXRoIGVuZ2luZSwgcmV3cm90ZSBsYXJnZSBwYXJ0cyBvZiBpdCwgbm93IGl0J3MgZmFyCgkgIGNsZWFuZXIgYW5kIGluIHN5bmMgd2l0aCB0aGUgUkVDIG5vdCBhbiBvbGQgV0QuIEZpeGVkIGEgcGFyc2luZwoJICBwcm9ibGVtIGluIHRoZSBpbnRlcmFjdGl2ZSBYTUwgc2hlbGwgZm91bmQgd2hlbiB0ZXN0aW5nIFhQYXRoLgoKV2VkIE9jdCAgNCAxNToyNTo1MyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZGVidWdYTUwuYyB0ZXN0WFBhdGguYyB4cGF0aC5bY2hdOiBNb3JlIHdvcmsgb24gWFBhdGgvWHBvaW50ZXIsCgkgIGluY29ycG9yYXRlZCAiKFRPTSkiIDxwdGl0dG9tQGZyZWUuZnI+IHBhdGNoZXMgcmVidWlsdCB0aGUgWFBhdGgKCSAgZXhhbXBsZXMgd2l0aCB0aGUgZXh0cmEgdGVzdAoKV2VkIE9jdCAgNCAxNDozOTowMSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMgeG1sSU8uYyB4bWxJTy5oOiBmaXhlZCBidWcgMjY2NTAsIGFuZCBpbXByb3ZlZAoJICB0aGUgZ2xvYmFsIGluaXQgZnVuY3Rpb24uCgpUdWUgT2N0ICAzIDExOjI4OjUyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IERvb2hoaCwgYXR0cmlidXRlIG5hbWUgcGFyc2luZyB3YXMgc3RpbGwgY2FzZQoJICBzZW5zaXRpdmUgISBGaXhlZCB0aGlzIC4uLgoJKiByZXN1bHQvSFRNTC8qIDogdXBkYXRlZCB0aGUgdGVzdHMgcmVzdWx0cyBhY2NvcmRpbmdseQoKTW9uIE9jdCAgMiAyMzo0NzozMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguW2NoXSBkZWJ1Z1hNTC5jIHRlc3RYUGF0aC5jOiBmaXhlZCB0aGUgWFBhdGggZXZhbHVhdGlvbgoJICBlbmdpbmUsIHNob3VsZCBiZSBmYXIgbW9yZSBzdGFibGUsIGluY29ycG9yYXRlZCBhIG5ldyB2ZXJzaW9uIG9mCgkgIHByZWNlZGluZy9mb2xsb3dpbmcgYXhpcywgbmVlZCB0ZXN0aW5nCiAgICAgICAgKiB1cmkuYzogZml4ZWQgZmlsZTovLy9jOi9hL2IvYyBwcm9ibGVtCgkqIHRlc3QvWFBhdGgvdGVzdHMvaWRzaW1wbGU6IGF1Z21lbnRlZCB0aGUgWFBhdGggdGVzdHMKClN1biBPY3QgIDEgMjI6MzM6MDAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy8qIHJlYnVpbGRpbmcgZG9jcyBmb3IgMi4yLjQgcmVsZWFzZQoKU3VuIE9jdCAgMSAyMjoxNjozMyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiByZWxlYXNpbmcgMi4yLjQKCSogcGFyc2VyLltjaF06IGFkZGVkIHhtbFN0ckVxdWFsKCkKCSogSFRNTHBhcnNlci5jIEhUTUx0cmVlLmMgU0FYLmMgZGVidWdYTUwuYyBlbnRpdGllcy5jIHBhcnNlci5jCgkgIHRyZWUuYyB2YWxpZC5jIHhsaW5rLmMgeHBhdGguYzogY29udmVydGVkIGFsbCAheG1sU3RyY21wIHRvCgkgIHVzZSB4bWxTdHJFcXVhbCBpbnN0ZWFkCgkqIFRPRE86IHVwZGF0ZWQKCSogYWRkZWQgYW4gWFBhdGggdGVzdAoKU3VuIE9jdCAgMSAyMDoxOTozOSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBodG1sU3RhcnRDbG9zZUluZGV4aW5pdGlhbGl6ZWQgaW5pdAoJKiBlbnRpdGllcy5oOiBleHBvcnRlZCB4bWxJbml0aWFsaXplUHJlZGVmaW5lZEVudGl0aWVzCgkqIHBhcnNlci5bY2hdIDogYWRkZWQgeG1sSW5pdFBhcnNlcigpCgkqIHBhcnNlckludGVybmFscy5oIDogaGFkIHRvIGV4cG9ydCBodG1sSW5pdEF1dG9DbG9zZSgpCgpTdW4gT2N0ICAxIDE2OjI4OjIyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5bY2hdIDogZml4ZWQgc29tZSBzZXJpb3VzIFhQYXRoIFByZWRpY2F0ZSBldmFsdWF0aW9uCgkgIHByb2JsZW1zCgkqIE1ha2VmaWxlLmFtIDogYWRkZWQgWFBhdGggcmVncmVzc2lvbiB0ZXN0cyB0byBub3JtYWwgdGVzdHMKCSogdXJpLmM6IGZpeGVkIGEgcHJvYmxlbSB3aXRoIGxvY2FsIHBhdGhzLCBjbGVhbnVwCgkqIHBhcnNlci5jOiBmaXhlZCBhIHByb2JsZW0gd2l0aCBsYXJnZSBDRGF0YSBzZWN0aW9ucwoKU2F0IFNlcCAzMCAxNjozNTo1NCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluIHhtbC1jb25maWcuaW46IHBhdGNoIGZyb20gIkJlbiBUYXlsb3IiCgkgIDxzb2w3eDg2QGhvdG1haWwuY29tPiBmb3Igc29sYXJpcyBzaGFyZWQgbGlicyBsb29rdXAKCjIwMDAtMDktMzAgIE1hcnRpbiBCYXVsaWcgIDxiYXVsaWdAc3VzZS5kZT4KCgkqIGxpYnhtbC0yLjAucGMuaW46IFByb3ZpZGUgcGtnLWNvbmZpZyBzY3JpcHQuCgoJKiBjb25maWd1cmUuaW46IENyZWF0ZSB0aGUgbGlieG1sLTIuMC5wYyBzY3JpcHQgZnJvbSB0aGUKCWxpYnhtbC0yLjAucGMuaW4gdGVtcGxhdGVzLgoJKiBNYWtlZmlsZS5hbSAocGtnY29uZmlnX0RBVEEpOiBJbnN0YWxsIHRoZSBsaWJ4bWwtMi4wLnBjCglzY3JpcHQgaW4gYCQobGliZGlyKS9wa2djb25maWcnLgoKTW9uIFNlcCAyNSAxNjoyMzo0MSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIHBhcnNlci5jIHRyZWUuYyB0cmVlLmg6IEF2b2lkaW5nIGEgZmV3IHdhcm5pbmcKCSAgd2hlbiBjb21waWxpbmcgd2l0aCBNU0MKClN1biBTZXAgMjQgMjA6MzI6NTIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmM6IHBhdGNoIGZvciBub3JtYWxpemUtc3RyaW5nKCkgc3Vic3RyaW5nLWJlZm9yZSgpLAoJICBzdWJzdHJpbmctYWZ0ZXIoKSBhbmQgdHJhbnNsYXRlKCkgZnVuY3Rpb25zIGZyb20gQmpvcm4gUmVlc2UKCSAgPGJyZWVzZUBtYWlsMS5zdG9mYW5ldC5kaz4KCSogbGlieG1sLm00IE1ha2VmaWxlLmFtOiBhZGRlZCBsaWJ4bWwubTQgZnJvbSBEZWJpYW4gPwoJICBGcmVkcmlrIEhhbGxlbmJlcmcgPGhhbGxvbkBseXNhdG9yLmxpdS5zZT4KCSogVE9ETzogdXBkYXRlZAoKU3VuIFNlcCAyNCAxMDowMDo0OSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sdmVyc2lvbi5oLmluIG5hbm9mdHAuYyBuYW5vaHR0cC5jOiB0cmF5aW5nIHRvIHdvcmsgb3V0IHRoZQoJICBwcm9ibGVtIG9mIHNvY2tsZW5fdCBiZWluZyB1bmRlZmluZWQgb24gYSBudW1iZXIgb2YgcGxhdGZvcm1zCgkqIGRlYnVnWE1MLmM6IGZpeGVkIGEgY29tcGlsYXRpb24gcHJvYmxlbSB3aGVuIHdpdGhvdXQgc25wcmludGYKClNhdCBTZXAgMjMgMTI6MTk6NDUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyB1cmkuYzogQW5vdGhlciBwYXRjaCBmcm9tIFdheW5lIERhdmlzb24sIGNvcnJlY3RpbmcKCSAgYW4gVVJJIGJ1ZyBhbmQgYSBmaXggZm9yIHRoZSBjb250cm9sLWNoYXJhY3Rlci1pbmR1Y2VkIGluZmluaXRlIGxvb3AKCSogbmFub2h0dHAuYzogcHJldmVudGl2ZSBmaXggZm9yIGNvbXBpbGluZyBvbiBXSU4zMgoKRnJpIFNlcCAyMiAxODowNjowOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1saW50LmM6IGNsb3NpbmcgYnVnICMyNTAwMAoKRnJpIFNlcCAyMiAxNDoxNzo1MyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sSU8uaCB0cmVlLmg6IG1hZGUgeG1sTm9kZUR1bXAoKSBhbmQgeG1sTm9kZUR1bXBPdXRwdXQoKSBwdWJsaWMKCSogcGFyc2VyLltjaF0gbmFub2h0dHAuYyBIVE1MdHJlZS5jIEhUTUxwYXJzZXIuYyB0cmVlLmM6IGFwcGxpZWQgYW5kCgkgIG1vZGlmaWVkIHNsaWdodGx5IFdheW5lIERhdmlzb24gcGF0Y2ggYWRkaW5nIHhtbFN0cmNhc2VjbXAgYW5kCgkgIHJlbGF0ZWQgZnVuY3Rpb24sIGZpeGluZyB4bWxTdHJuY21wKCksIGFuZCBhc3NvY2lhdGVkIGNsZWFudXAKCSogcmVzdWx0L0hUTUwvZW50aXRpZXMuaHRtbC5zYXg6IHVwZGF0aW5nIHJlc3VsdAoKVHVlIFNlcCAxOSAxNDoyMDoxMCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdXJpLmM6IGFwcGxpZWQgcGF0Y2ggZm9yIFVSSSBlc2NhcGluZyBmcm9tIFdheW5lIERhdmlzb24KCSAgPHdheW5lZEBibG9yZi5uZXQ+CgkqIHRyZWUuYyBwYXJzZXJJbnRlcm5hbHMuYyBIVE1McGFyc2VyLmM6IG1lbXNldCBjaGVja3MgcGF0Y2hlcwoJICBmcm9tIERlbmlzIEJhcmJpZXIgPGJhcmJpZXJAaW1hY3MucG9seXRlY2huaXF1ZS5mcj4KCSogSFRNTHBhcnNlci5jOiBVVEY4IGNoYXJhY3RlcnMgaW4gSFRNTCB0YWctYXR0cmlidXRlIHZhbHVlcwoJICBwYXRjaCBmcm9tIFdheW5lIERhdmlzb24KClN1biBTZXAgMTcgMTg6Mzc6MDMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCA6IHVwZGF0ZWQgd2l0aCBuZXcgcmVsZWFzZXMsIGFkZGluZyAiaG93IHRvIGhlbHAiCgpTdW4gU2VwIDE3IDE3OjU4OjM3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBTQVguYyBkZWJ1Z1hNTC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRyZWUuYyB2YWxpZC5jIHhwYXRoLmM6CgkgIHJlbW92ZWQgYSBmZXcgd2FybmluZ3MgaW4gcGVkYW50aWMgbW9kZSAuLi4KCSogcGFyc2VySW50ZXJuYWxzLmMgcGFyc2VyLmM6IG1vdmVkIGVuY29kaW5nIHN3aXRjaGluZyBmdW5jdGlvbgoJICB0byBwYXJzZXJJbnRlcm5hbHMuYwoJKiBjb25maWd1cmUuaW4sIGRvYy9NYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogcmVsZWFzZWQgMi4yLjMKClNhdCBTZXAgMTYgMjA6MTI6NDEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyBwYXJzZXIuYzogc2V0IGN0eHQtPmVyck5vIGJlZm9yZSBjYWxsaW5nIHRoZQoJICBlcnJvciBvciB3YXJuaW5nIGhhbmRsZXJzCgpXZWQgU2VwIDEzIDIyOjAzOjE4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYyBwYXJzZXJJbnRlcm5hbHMuaCBwYXJzZXIuYyBNYWtlZmlsZS5hbToKCSAgY3JlYXRlZCBhIG5ldyBtb2R1bGUgcGFyc2VySW50ZXJuYWxzLmMsIG1vdmVkIG1vc3Qgb2YgdGhlCgkgIGNvZGUgc2hhcmVkIGJ5IHRoZSB2YXJpb3VzIHBhcnNlcnMgdGhlcmUsIGFzIHdlbGwgYXMKCSAgZGVwcmVjYXRlZCAgY29kZSBmcm9tIHBhcnNlci5jLiBNb3JlIGNsZWFudXAgb2YgcGFyc2VyLmMKCSogdXJpLmM6IGZpeGVkIGEgcHJvYmxlbSB3aGVuIFVSSSBpcyBOVUxMCgkqIHZhbGlkLmM6IHNwZWVkdXAgd2hlbiBsb29raW5nIGZvciBhbiBhdHRyaWJ1dGUgZGVjbGFyYXRpb24KClN1biBTZXAgMTAgMTc6NTM6NDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHVyaS5jIHRyZWUuYyBTQVguYyBwYXJzZXIuYyBlbnRpdGllcy5jIGRlYnVnWE1MLmM6IGZpbmlzaGVkCgkgIHRoZSBjbGVhbnVwIG9mIHRoZSBjb21wdXRhdGlvbiBvZiBVUkkgcmVmZXJlbmNlcyB3aGVuIHNlZWtpbmcKCSAgZXh0ZXJuYWwgZW50aXRpZXMuIFRoZSBVUkkgcmVmZXJlbmNlIHN0cmluZyBhbmQgdGhlIHJlc3VsdGluZwoJICBVUkkgYXJlIGJvdGggc3RvcmVkIG5vdy4KCSogcGFyc2VyLmMgSFRNTHBhcnNlci5jIHZhbGlkLmMgbmFub2Z0cC5jIG5hbm9odHRwLmMgeHBhdGguYzoKCSAgbGFyZ2UgcyhuKXByaW50ZiBjaGVja3MgYW5kIGNsZWFudXAgZnJvbSBEZW5pcyBCYXJiaWVyCgkgIDxiYXJiaWVyQGltYWNzLnBvbHl0ZWNobmlxdWUuZnI+CgkqIHhtbHZlcnNpb24uaC5pbiB0cmVlLmg6IGNvdXBsZSBvZiBTR01MIGRlY2xhcmF0aW9ucyBmb3IgYQoJICBwb3NzaWJsZSBkb2Nib29rIG1vZHVsZS4KCSogcmVzdWx0L1ZDLyA6IGEgY291cGxlIG9mIHRlc3Qgb3V0cHV0IGNoYW5nZWQgZHVlIHRvIHRoZSBjaGFuZ2UKCSAgb2YgdGhlIGVudGl0aWVzIFVSSQoKU3VuIFNlcCAxMCAxNTo1OTo1OCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmg6IGFkZGVkIGEgX3ByaXZhdGUgZmllbGQgZm9yIGxpbmtpbmcgdXNlcidzIGRhdGEKClN1biBTZXAgMTAgMTU6MTQ6NDMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5oOiBkZW1hY3JvaWZpZWQgbW9zdCBvZiB0aGUgSVNfWFhYCgkgIHRoZSBnYWluIGluIHNpemUgaXMgc2lnbmlmaWNhbnQgc28gLi4uCgpGcmkgU2VwICA4IDIwOjQ4OjI5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbnRpdGllcy5jOiBjYXNlcyB3aGVyZSBsb29raW5nIHVwIGVudGl0aWVzIHdpdGggZG9jPT1OVUxMCgkgIGNvdmVyZWQKClR1ZSBTZXAgIDUgMTI6NDE6MTUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHVyaS5jOiBhcHBsaWVkIFdheW5lIERhdmlzb24gcGF0Y2gKCSogTWFrZWZpbGUuaW4gdGVzdC9VUkkvdXJpLmRhdGEgcmVzdWx0L1VSSS91cmkuZGF0YTogdXBkYXRlZCBVUkkgdGVzdHMKCk1vbiBTZXAgIDQgMTM6MDE6NDUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHVyaS5jIHRlc3RVcmkuYzogYXBwbGllZCBXYXluZSBEYXZpc29uIHBhdGNoZXMKCSogdGVzdC9VUkkvdXJpLmRhdGEgcmVzdWx0L1VSSS91cmkuZGF0YTogZmlyc3Qgc2V0IG9mIHRlc3RzL3Jlc3VsdHMKCSogTWFrZWZpbGUuaW46IGFkZGVkIFVSSXRlc3QgYW5kIGluY2x1ZGVkIHRoZW5pbiAibWFrZSB0ZXN0cyIKClN1biBTZXAgIDMgMTk6MTk6MjkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbHZlcnNpb24uaC5pbjogY2xvc2VkIGJ1ZyAyMjk0MQoKVGh1IEF1ZyAzMSAxNjo1NTo1NSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbGlvLmh0bWw6IGFkZGVkIGRvYyBhbmQgZXhhbXBsZSBmb3IgZW50aXR5IGxvYWRlcgoJICByZWRlZmluaXRpb24uCgpUaHUgQXVnIDMxIDE0OjU5OjI4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1saW8uaHRtbCBkb2MveG1sLmh0bWw6IGFkZGVkIGEgZG9jIG9uIHRoZSBJL08gbWVjaGFuaXNtCgkgIHVzZWQgYnkgbGlieG1sCgpUdWUgQXVnIDI5IDIwOjIyOjUzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogRml4ZWQgYnVnIG9uIGludmFsaWQgb250ZW50IGNoYXJhY3RlcnMgYW5kIHdoZW4gdXNpbmcKCSAgcHVzaC4KCSogeG1sbGludC5jOiBmaXhlZCB4bWxsaW50IGVuZGxpbmcgb2YgZXJyb3JzIGluIHB1c2ggbW9kZQoKVHVlIEF1ZyAyOSAxMToyNDo0OCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIHRlc3RIVE1MLmM6IGFwcGxpZWQgdHdvIG5ldyBwYXRjaGVzIGZyb20KCSAgV2F5bmUgRGF2aXNvbiA8d2F5bmVkQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCSogcmVzdWx0L0hUTUwvKi5zYXg6IHJlZ2VuZXJhdGVkIEhUTUwgU0FYIG91dHB1dAoJKiBwYXJzZXIuYzogbW9yZSBjbGVhbnVwLgoKTW9uIEF1ZyAyOCAxMTo1ODoxMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5bY2hdIHRlc3RIVE1MLmM6IGFwcGxpZWQgdGhlIHNlY29uZCBzZXQgb2YKCSAgcGF0Y2hlcyBmcm9tIFdheW5lIERhdmlzb24gPHdheW5lZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LAoJICBhZGRpbmcgaHRtbEVuY29kZUVudGl0aWVzKCkKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBhbiBpZ25vcmFibGUgd2hpdGUgc3BhY2UgZGV0ZWN0aW9uIGJ1ZwoJICBvY2N1cmluZyB3aGVuIHBhcnNpbmcgd2l0aCBTQVggb25seQoJKiByZXN1bHQvSFRNTC8qLnNheDogdXBkYXRlZCBzaW5jZSB0aGUgb3V0cHV0IGlzIG5vdyBIVE1MCgkgIGVuY29kZWQuLi4KCk1vbiBBdWcgMjggMDA6Mzg6MzEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuW2NoXTogYXBwbGllZCBzb21lIG9mIFdheW5lIERhdmlzb24KCSAgPHdheW5lZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IHBhdGNoZXMKClN1biBBdWcgMjcgMjI6MTQ6MDEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFNBWC5jIHRyZWUuYyBkZWJ1Z1hNTC5jOiBmaXhlZCBib2d1cyBiZWhhdmlvdXIgd2hlbiBhbgoJICB1bmRlY2xhcmVkIG5hbWVzcGFjZSBwcmVmaXggd2FzIHVzZWQsIGFkZGVkIGEgd2FybmluZy4KCSAgQ2xlYW5lZCB1cCBzdXBwb3J0IHcuci50LiBlbnRpdGllcywgc3BpbGxpbmcgb3V0IGEgd2FybmluZwoJICBhbmQgYmVpbmcgcGVkYW50aWMgb24gbG9va3Vwcy4KCSogdGVzdC93YXJuaW5nL2VudDkgOiBhZGRlZCB0ZXN0Y2FzZSBmb3IgcHJldmlvdXMgZXhhbXBsZS4KCSogVE9ETzogdXBkYXRlZAoJKiBwYXJzZXJJbnRlcm5hbHMuaCBwYXJzZXIuYzogY2hhbmdlZCB0aGUgd2F5IG5hbWVzIGFyZSBwYXJzZWQKCSAgbm93IGFsbG93IGluZmluaXRlIHNpemUgYW5kIGRlY3JlYXNlIHBlbmFsdHkgZm9yIG5vcm1hbCB1c2UKCSogcGFyc2VyLmM6IFN0YXJ0ZWQgYSBiaWcgY2xlYW51cC9jaGVjayBvZiB0aGUgcGFyc2VyIGNvZGUsCgkgIGZpeGVkIHNvbWUgb2YgdGhlIG1vc3QgdG9ydHVvdXMgZW50aXR5IGNvZGUsIHNwb3R0ZWQgY29kZQoJICB1bnVzZWQgYW55bW9yZQoJKiB0ZXN0Lyo6IGFkZGVkIHRlc3RzIGZvciB2ZXJ5IGxvbmcgbmFtZXMgYW5kIHJlbGF0ZWQgbmFzdHkKCSAgdGhpbmdzLgoKU2F0IEF1ZyAyNiAyMzozMTowNCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL2VuY29kaW5nLmh0bWw6IGFkZGVkIGVuY29kaW5nIGFsaWFzZXMgZG9jCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlcwoJKiBlbmNvZGluZy5bY2hdOiBhZGRlZCBFbmNvZGluZ0FsaWFzZXMgZnVuY3Rpb25zCgkqIGVudGl0aWVzLltjaF0gdmFsaWQuW2NoXSBkZWJ1Z1hNTC5jOiByZW1vdmVkIHR3byBzZXJpb3VzCgkgIGJvdHRsZW5lY2sgYWZmZWN0aW5nIGxhcmdlIERURHMgbGlrZSBEb2Nib29rCgkqIHBhcnNlci5bY2hdIHhtbGxpbnQuYzogYWRkZWQgYSBwZWRhbnRpYyBvcHRpb24sIHdpbGwgYmUKCSAgdXNlZnVsCgkqIFNBWC5jOiByZWRlZmluaXRpb24gb2YgZW50aXRpZXMgaXMgcmVwb3J0ZWQgaW4gcGVkYW50aWMgbW9kZQoJKiB0ZXN0SFRNTC5jOiB1bmluaXRpYWxpemVkIHdhcm5pbmcgZnJvbSBnY2MKCSogdXJpLmM6IGZpeGVkIGEgY291cGxlIG9mIGJ1Z3MKCSogVE9ETzogYWRkZWQgaXNzdWUgcmFpc2VkIGJ5IE1pY2hhZWwKCldlZCBBdWcgMjMgMDE6NTA6NTEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy9lbmNvZGluZy5odG1sOiBwcm9wYWdhdGVkIE1hcnRpbiBEdWVyc3Qgc3VnZ2VzdGlvbnMKCldlZCBBdWcgMjMgMDA6MjM6NDEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBGaXhlZCBCdWcjMjE1NTI6IGxpYnhtbCBmYWlscyB0byBkZWNvZGUgJmFtcDsKCSogdXJpLmMgdGVzdFVyaS5jIHBhdGNoZXMsIGJ5IE1hcmMgU2FuZmFjb24gKDEgbGVmdCkKCSogcGFyc2VyLmMgSFRNTHBhcnNlci5jOiBIVE1ML2VuY29kaW5nIHB1c2ggcHJvYmxlbXMgcmVwb3J0ZWRpCgkgIGJ5IFdheW5lIERhdmlzb24KClN1biBBdWcgMjAgMTc6MDM6MzggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jOiBzbWFsbCBjbGVhbnVwCgkqIFRPRE86IHVwZGF0ZWQKClNhdCBBdWcgMTkgMjI6NTc6MDIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFkZGVkIGFuIG9sZCBWQyB0ZXN0Y2FzZSBhbmQgdXBkYXRlZCB0aXRsZS54bWwgZW50aXR5CgpTYXQgQXVnIDE5IDIxOjAyOjA4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgU0FYLmMgdHJlZS5jIEhUTUx0cmVlLmggcmVzdWx0L0hUTUwvKjogd29yawoJICBkb25lIG9uIGF1dG8tb3BlbmluZyBvZiA8cD4gdGFncyBhbmQgY2xlYW51cCBvZiBTQVggb3V0cHV0CgpTYXQgQXVnIDE5IDE4OjQ1OjQwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBsaWJ4bWwuNCAgeG1sbGludC4xIE1ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluOiBhZGRlZCBtYW4gcGFnZXMKClNhdCBBdWcgMTkgMTg6Mzg6NTMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCBsaWJ4bWwuKiBzdHJ1Y3R1cmUuKjogdXBkYXRlZCB0aGUgZG9jIGEgYml0CgpUaHUgQXVnIDE3IDE1OjUwOjAwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0ZXN0U0FYLmMgdGVzdEhUTUwuYyByZXN1bHQvSFRNTC86IGNsZWFudXAgb2YgdGhlIG91dHB1dAoJICBvZiBTQVggdGVzdHMKCk1vbiBBdWcgMTQgMTM6NTY6MzMgRURUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogUGF0Y2ggZnJvbSBBbGJlcnQgQ2hpbi1BLVlvdW5nIDxjaGluYUB0aGV3cml0dGVud29yZC5jb20+OgoJKiB4bWxsaW50LmM6IHdvcmthcm91bmQgYSBNQVBfRkFJTEVkIGRlZmluaXRpb24gYnVnIGluIERVLTQuMAoKTW9uIEF1ZyAxNCAxMToxMDoyMCBFRFQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBQYXRjaCBmcm9tIERhdmUgWWVhcmtlIDx5ZWFya2VAZW5nLmJ1ZmZhbG8uZWR1PjoKCSogdGVzdEhUTUwuYzogZml4IGNvcmUgZHVtcCBvbiBTb2xhcmlzIDIueCBzeXN0ZW1zCgkqIEhUTUxwYXJzZXIuYzogZml4IHNlZ2ZhdWx0IGlmIGN0eHQtPnNheC0+Y2hhcmFjdGVycygpIGlzIE5VTEwKCSogcmVzdWx0L0hUTUwvKi5zYXg6IHByZXZpb3VzIGJ1ZyBmaXggbGVhZCB0byBuZXcgcmVzdWx0cwoKTW9uIEF1ZyAxNCAxMDoyNjowOSBFRFQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBQYXRjaCBmcm9tIEFsYmVydCBDaGluLUEtWW91bmcgPGNoaW5hQHRoZXdyaXR0ZW53b3JkLmNvbT46CgkqIGNvbmZpZ3VyZS5pbjogYWRkZWQgLS13aXRoLXJlYWRsaW5lPURJUiB0byBhY2NlcHQgYWx0ZXJuYXRlCgkgIHBhdGggZm9yIHJlYWRsaW5lIGluY2x1ZGUvbGlicmFyeQoJKiBjb25maWd1cmUuaW46IGFkZGVkIEFNX0NfUFJPVE9UWVBFUyB0byBhZGQgLUFhIC1EX0hQVVhfU09VUkNFCgkgIGZvciBBTlNJIHVuZGVyIEhQLVVYCgkqIGNvbmZpZy5pbjogUmVtb3ZlZCBATElCU0AgZnJvbSB4bWwtY29uZmlnIGJlY2F1c2UgQFhNTF9MSUJTQAoJICBpbmNsdWRlcyBATElCU0AKClNhdCBBdWcgMTIgMjM6MTk6NDIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy8qIDogcmVidWlsdCB0aGUgZG9jcwoJKiBnZXR0aW5nIHJlYWR5IGZvciAyLjIuMiByZWxlYXNlCgpTYXQgQXVnIDEyIDE2OjQyOjM3IEVEVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdOiBhZGRlZCB4bWxHZXRGZWF0dXJlc0xpc3QoKSB4bWxHZXRGZWF0dXJlKCkKCSAgYW5kIHhtbEFkZEZlYXR1cmUoKQoJKiB0cmVlLltjaF06IGFkZGVkIHhtbEFkZENoaWxkTGlzdCgpCgkqIHhtbGxpbnQuYzogTUFQX0ZBSUxFRCBtYWNybyB0ZXN0CgkqIHBhcnNlci5oOiBhZGRlZCB4bWxQYXJzZUN0eHRFeHRlcm5hbEVudGl0eSgpCgkqIHZhbGlkLmM6IGFwcGxpZWQgYnVnIGZpeGVzIHJlbW92ZWQgd2FybmluZwoJKiB0cmVlLmM6IGFkZGVkIENEQVRBIGJsb2NrIHRvIGVsZW1lbnRzIGNvbnRlbnQKCSogdGVzdFNBWC5jOiBjbGVhbnVwIG9mIG91dHB1dAoJKiB0ZXN0SFRNTC5jOiBhZGRlZCBTQVggdGVzdGluZwoJKiBlbmNvZGluZy5jOiBiZXR0ZXIgZXJyb3IgcmVjb3ZlcnkKCSogU0FYLmMsIHBhcnNlci5jOiBmaXhlZCBvbmUgb2YgdGhlIGV4dGVybmFsIGVudGl0eSBwcm9jZXNzaW5nCgkgIG9mIHRoZSBPQVNpcyB0ZXN0c3VpdGUKCSogTWFrZWZpbGUuYW06IGFkZGVkIEhUTUwgU0FYIHJlZ3Jlc3Npb24gdGVzdHMKCSogY29uZmlndXJlLmluOiBidW1wZWQgdG8gMi4yLjIKCSogdGVzdC9IVE1MLyByZXN1bHQvSFRNTDogYWRkZWQgYSBmZXcgb2YgSFRNTCB0ZXN0cywgYW5kIGFkZGVkIHRoZQoJICBTQVggcmVzdWx0cwoKRnJpIEF1ZyAgNCAxMToyMTo1MCBQRFQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IHBhdGNoIGZvciBIUCBjb21waWxlcgoKMjAwMC0wOC0wNCAgU3ZlbiBIZWluaWNrZSAgPHN2ZW5AemVuLm9yZz4KCgkqIHhtbGxpbnQuYzogV2FzIGNvcmVkdW1waW5nIHNvbWV0aW1lcyB3aGVuIHRoZSBmaWxlIGdpdmVuIGRpZG4ndAoJZXhpc3QuCgpTYXQgSnVsIDIyIDA1OjU5OjA1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYyB4bWxJTy5bY2hdOiBmaXhlZCB0aGUgcHJvYmxlbSBvZiBlbmNvZGluZyBzdXBwb3J0CgoJICB3aGVuIHVzaW5nIGluIG1lbW9yeSBwYXJzaW5nLiBOZWVkIHNvbWUgY2xlYW51cC4KCSogeG1sbGludC5jIGNvbmZpZ3VyZS5pbjogYWRkZWQgYSAtLW1lbW9yeSBmbGFnIHRvIHRlc3QgbWVtb3J5CgkgIHBhcnNpbmcKCQpGcmkgSnVsIDIxIDE3OjA5OjU3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vaHR0cC5jOiBmaXhlZCBzb2NrbGVuX3QgcmVwbGFjZW1lbnQgdG8gdW5zaWduZWQgaW50CgkqIHBhcnNlci5jOiBmaXhlZCBhIHNwYWNlIGhhbmRkbGluZyBtaXNzaW5nIGF0IHRoZSBlbmQgb2YKCSAgcHJvZHVjdGlvbiAyOCBET0NUWVBFLgoJKiB4bWxtZW1vcnkuYzogZml4ZWQgYSBzdHVwaWQgYnVnIG9uIHRoZSByb3V0aW5lIHRvIG92ZXJyaWRlCgkgIGFsbG9jYXRpb24gZnVuY3Rpb25zCgkqIFRPRE86IHVwZGF0ZWQKCkZyaSBKdWwgMTQgMTc6MDE6MTQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy8gcmVnZW5lcmF0ZWQgdGhlIGRvY3MKCkZyaSBKdWwgMTQgMTY6MTI6MjAgTUVTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy9lbmNvZGluZy5odG1sIGRvYy94bWwuaHRtbDogYWRkZWQgSTE4TiBkb2MKCSogZW5jb2RpbmcuW2NoXSBIVE1MdHJlZS5bY2hdIHBhcnNlci5jIEhUTUxwYXJzZXIuYzogSTE4TiBlbmNvZGluZwoJICBpbXByb3ZlbWVudHMsIGJvdGggcGFyc2VyIGFuZCBmaWx0ZXJzLCBhZGRlZCBBU0NJSSAmIEhUTUwsCgkgIGZpeGVkIHRoZSBJU08tTGF0aW4tMSBvbmUKCSogeG1sbGludC5jIHRlc3RIVE1MLmM6IGFkZGVkL21hZGUgdmlzaWJsZSAtLWVuY29kZQoJKiBkZWJ1Z1hNTC5jIDogY2xlYW51cAoJKiBtb3N0IC5jIGZpbGVzOiBhcHBsaWVkIHBhdGNoZXMgZHVlIHRvIHdhcm5pbmcgb24gV2luZG93cyBhbmQKCSAgd2hlbiB1c2luZyBTdW4gUHJvIGNjIGNvbXBpbGVyCgkqIHhwYXRoLmMgOiBjbGVhbnVwIG1lbWxlYWtzCgkqIG5hbm9mdHAuYyA6IGFkZGVkIGEgVEVTVElORyBwcmVwcm9jZXNzb3IgZmxhZyBmb3Igc3RhbmRhbG9uZwoJICBjb21waWxlIHNvIHRoYXQgcGVvcGxlIGNhbiByZXBvcnQgYnVncyBtb3JlIGVhc2lsbHkKCSogbmFub2h0dHAuYyA6IGRpdGNoZWQgc29ja2xlbl90IHdoaWNoIHdhcyBhIHBvcnRhYmlsaXR5IG1lc3MKCSAgYW5kIHJlcGxhY2VkIGl0IHdpdGggdW5zaWduZWQgaW50LgoJKiB0cmVlLltjaF06IGFkZGVkIHhtbEhhc1Byb3AoKQoJKiBUT0RPOiB1cGRhdGVkCgkqIHRlc3QvIDogYWRkZWQgbW9yZSB0ZXN0IGZvciBlbnRpdGllcywgTlMsIGVuY29kaW5nLCBIVE1MLCB3YXAKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgZm9yIDIuMi4wIHJlbGVhc2UKCk1vbiBKdWwgMTAgMTY6MTc6MTggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYzogZml4ZWQgdGhlIHdheSB0aGUgY29udHJvbCBjb25uZWN0aW9uIGlzIGhhbmRsZWQKCSogbGlieG1sLnNwZWMuaW46IGZpeGVkIHRoZSBkZXBlbmRhbmNpZXMgYW5kIGNsZWFudXAKCk1vbiBKdWwgIDMgMTQ6Mzc6MDcgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbDogY2hhbmdlZCB0aGUgeG1sc29mdC5vcmcgc3RydWN0dXJlLCB1cGRhdGVkIHRoZQoJICBleGFtcGxlcyB3LnIudC4gcm9vdCBhbmQgY2hpbGRzCgpTdW4gSnVsICAyIDIwOjUxOjQzIE1FU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBsaWJ4bWwuc3BlYy5pbjogZml4ZWQgYnVnICM3NDE5LCBkZXBlbmRhbmNpZXMgZm91bGVkIGZvciBsaWJ4bWwtZGV2ZWwKClN1biBKdWwgIDIgMDk6NTI6NDUgTUVTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogV29yayBvbiBjaGFyYWN0ZXIgZW5jb2Rpbmcgc3VwcG9ydCBmb3IgdGhlIEhUTUwgcGFyc2VyCgkqIEhUTUxwYXJzZXIuYzogRml4ZWQgc29tZSBhdXRvb3Blbi9hdXRvY2xvc2UgcHJvYnMgZm9yIHRoZSBIVE1MIHBhcnNlcgoJKiBlbmNvZGluZy5jOiBGaXhlZCBhIHBvdGVudGlhbCBtZW1sZWFrIGluIHRoZSBlbmNvZGluZyBzdHVmZgoKU2F0IEp1bCAgMSAxMzo0NDoyMiBNRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL0ZBUS5odG1sIGRvYy9NYWtlZmlsZS5hbSA6IGFkZGVkIGEgRkFRCgpGcmkgSnVuIDMwIDIwOjI5OjA4IE1FU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYyBTQVguYyB2YWxpZC5jIHRyZWUuaCA6IG1vcmUgY2xlYW51cAoJICBvZiB0aGUgSFRNTCBwYXJzZXIgdG8gZm9yY2UgaXQgdG8gbm90IGJ5cGFzcyBTQVgKCkZyaSBKdW4gMzAgMTE6MTk6NTkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHdpbjMyY29uZmlnLmguaW46IHVwZGF0ZWQKCSogeG1sdmVyc2lvbi5oLmluOiBjcmFwIGZvcmdvdCB0byB1cGRhdGUgdGhpcywgdGhpcyBtZWFuIDIuMS4wCgkgIGxhY2tzIGljb252IHN1cHBvcnQgOi0oIG5lZWQgdG8gcmVsZWFzZSAyLjEuMQoJKiBjb25maWd1cmUuaW46IHJlbGVhc2UgMi4xLjEKCSogSFRNTHBhcnNlcjogZml4ZWQgYnVnICMxNDc4NAoJKiB4cGF0aC5jIEhUTUxwYXJzZXIuYyBlbmNvZGluZy5jIHBhcnNlci5jOiBmaXggd2FybmluZyByYWlzZWQKCSAgYnkgV2luZG93cyBjb21waWxlcgoJKiBIVE1McGFyc2VyLmMgU0FYLmMgSFRNTHRyZWUuaCB0cmVlLmg6IGNyZWF0ZSBIVE1MIGRvY3VtZW50IGluCgkgIHRoZSBTQVggc3RhcnREb2N1bWVudCgpIGNhbGxiYWNrLgoJKiBUT0RPOiB1cGRhdGVkCgpUaHUgSnVuIDI5IDEyOjA2OjQ4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhZGRlZCB4bWxTdG9wUGFyc2VyKCkKCldlZCBKdW4gMjggMjM6MTA6MjYgTUVTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogMi4xLjAgcHJlcmVsZWFzZQoJKiBMYXJnZSByZXN5bmMgYmV0d2VlbiBXM0MgYW5kIEdub21lIHRyZWUKCSogbmFub2Z0cCwgbmFub2h0dHAuYzogZml4ZWQgc3RhbGxlZCBjb25uZWN0aW9ucyBwcm9icwoJKiBIVE1MdHJlZS5jIFNBWC5jIDogc3VwcG9ydCBmb3IgYXR0cmlidXRlIHdpdGhvdXQgdmFsdWVzIGluCgkgIEhUTUwgZm9yIGFuZGVyc2NhCgkqIHZhbGlkLmM6IEZpeGVkIG1vc3QgdmFsaWRhdGlvbiArIG5hbWVzcGFjZSBwcm9ibGVtcwoJKiBIVE1McGFyc2VyLmM6IHN0YXJ0IGRvY3VtZW50IGNhbGxiYWNrIGZvciBhbmRlcnNjYQoJKiBkZWJ1Z1hNTC5jIHhwYXRoLmM6IGxvdHMgb2YgWFBhdGggZml4dXBzIGZyb20gUGljZGFyIFRlY2hub2xvZ3kKCSogcGFyc2VyLmgsIFNBWC5jOiBzZXJpb3VzIHNwZWVkIGltcHJvdmVtZW50IGZvciBsYXJnZQoJICBDREFUQSBibG9ja3MKCSogZW5jb2RpbmcuW2NoXSB4bWxJTy5bY2hdOiBJbXByb3ZlZCBzZXJpb3VzbHkgc2F2aW5nIHRvCgkgIGRpZmZlcmVudCBlbmNvZGluZwoJKiBleGFtcGxlL01ha2VmaWxlLmFtIGV4YW1wbGUvZ2pvYnJlYWQuYyB0cmVlLmg6IHdvcmsgb24gCgkgIGxpYnhtbDEgbGlieG1sMiBjb252ZXJnZW5jZS4KCSogY29uZmlnLmguaW4gcGFyc2VyLmMgeG1sbGludC5jOiBhZGRlZCB4bWxDaGVja1ZlcnNpb24oKQoJICBhbmQgdGhlIExJQlhNTF9URVNUX1ZFUlNJT04gbWFjcm8KCkZyaSBKdW4gMjMgMjI6MjY6MDcgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbDogdmFyaW91cyBwYXRjaGVzIGFuZCBpbXByb3ZlbWVudHMgdHlwbyBmaXhlZCBieQoJICBGZWxpeCBOYXR0ZXIKCSogZG9jL2xpYnhtbC1kb2MuZWw6IEVtYWNzIG1vZHVsZSB0byBsb29rdXAgdGhlIGxpYnhtbCBkb2N1bWVudGF0aW9uCgkgIGZyb20gRmVsaXggTmF0dGVyIDxmbmF0dGVyQGdteC5uZXQ+CgpTYXQgTWF5ICA2IDEwOjA5OjQ1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvdXBncmFkZS5odG1sOiB1cGRhdGVkIHdpdGggaW5zdHJ1Y3Rpb25zIGZvciBzdXBwb3J0IG9mIGJvdGgKCSAgbGlieG1sLTEueCBhbmQgbGlieG1sLTIueAoJKiBkb2MvZ2pvYnJlYWQuYyA6IGFwcGxpZWQgVG9kZCBEdWtlcyA8dGR1a2VzQGlibW90by5jb20+IHBhdGNoCgkgIGZvciAyLnggc3VwcG9ydCBhbmQgYWxzbyBmaXhlZCBpbmNsdWRlcwoKCldlZCBNYXkgIDMgMTQ6MjE6MjUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGVuY29kaW5nLltjaF0sIHhtbElPLltjaF0sIHBhcnNlci5jLCBjb25maWd1cmUuaW4gOiByZXZhbXBlZAoJICB0aGUgZW5jb2Rpbmcgc3VwcG9ydCwgYWRkZWQgaWNvbnYgc3VwcG9ydCwgc28gbm93IGxpYnhtbCBpZgoJICBjb21waWxlZCB3aXRoIGljb252IGF1dG9tYXRpY2FsbHkgc3VwcG9ydCBqYXBhbmVzZSBlbmNvZGluZ3MKCSAgYW1vbmcgb3RoZXJzLiBXb3JrIGJhc2VkIG9uIGluaXRpYWwgcGF0Y2ggZnJvbSBZdWFuLUNoZW4gQ2hlbmcKCSAgSSBtYXkgaGF2ZSBicm9rZW4gYmluYXJ5IGNvbXBhdCBpbiB0aGUgZW5jb2RpbmcgaGFuZGxlcgoJICByZWdpc3RyYXRpb24gc2NoZW1lLCBidXQgdGhhdCB3YXMgc28gdXR0ZXJseSBicm9rZW4gSSBkb24ndAoJICBleHBlY3QgYW55Ym9keSB0byBoYXZlIHVzZWQgdGhpcyBmZWF0dXJlIHVudGlsIG5vdy4KCSogcGFyc2VySW50ZXJuYWxzLmg6IGZpeHVwIG9uIHRoZSBDSEFSIHJhbmdlIG1hY3JvCgkqIHhtbC1lcnJvci5oLCBwYXJzZXIuYzogY2F0Y2ggVVJML1VSSSBlcnJvcnMgdXNpbmcgdGhlIHVyaS5jCgkgIGNvZGUuCgkqIHRyZWUuW2NoXTogYWRkZWQgeG1sQnVmZmVyR3JvdygpLCB3YXMgbmVlZGVkIGZvciBpY29udgoJKiB1cmkuYzogYWRkZWQgeG1sUGFyc2VVUkkoKSBJIGNhbid0IGJlbGlldmUgSSBmb3Jnb3QgdG8KCSAgaW1wbGVtZW50IHRoaXMgb25lIGluIDIuMCAhISEKCSogU0FYLmM6IG1vdmVkIGRvYy0+ZW5jb2RpbmcgdXBkYXRlIGluIHRoZSBlbmREb2N1bWVudCgpIGNhbGwuCgkqIFRPRE86IHVwZGF0ZWQuCgpNb24gQXByIDI0IDEzOjMwOjEzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmg6IHJlbW92ZWQgZXh0cmFuZW91cyB4bWxSZW1vdmVQcm9wIGRlZmluaXRpb24KCSogVE9ETzogYWRkZWQgaXRlbSBhYm91dCAtLWRpc2FibGUtY29yYmEgY29uZmlndXJlIHN3aXRjaAoJKiB0cmVlLmMgcGFyc2VyLmM6IGZpeGVkIHByb2JsZW1zIGZvciB4bWxDb3B5RG9jIGFuZCBwb3N0dmFsaWRhdGlvbgoJKiBuYW5vZnRwLmM6IGZpeGVkIGluY2x1ZGUgcHJvYmxlbXMgZ2l2aW5nIHRyb3VibGVzIG9uIEFJWCBhbmQgCgkgIHNsb3dsYXJpcwoJKiB4bWxJTy5bY2hdIHZhbGlkLmggdHJlZS5bY2hdIHhsaW5rLmMgeG1sbWVtb3J5LmMgdXJpLmMgCgkgIHBhcnNlci5jIG5hbm9mdHAuYyBuYW5vaHR0cC5jIFNBWC5jIHRlc3RTQVguYyA6CgkgIGNvbW1lbnQgYW5kIGhlYWRlcnMgY2hhbmdlcyB0byBsb3dlciBndGstZG9jIG51bWJlciBvZiB3YXJuaW5ncwoJKiBkb2MvaHRtbC8qOiByZWJ1aWx0IGRvY3MKClN1biBBcHIgMTYgMTE6MjM6MjkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhBQ0tJTkc6IGRvY3VtZW50ZWQgdGhlIHRhZyBmb3IgMS54IGFuZCBpbnN0cnVjdGlvbnMKCldlZCBBcHIgMTIgMTU6NDc6MjIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbElPLltjaF0gcGFyc2VyLltjaF06IE1vcmUgaW50ZXJmYWNlcyBmb3IgbmV3IEkvTyBmdW5jdGlvbnMKCSAgeG1sTmV3SU9JbnB1dFN0cmVhbSwgeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVJTywKCSAgeG1sQ3JlYXRlSU9QYXJzZXJDdHh0CgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5oOiBzcGVlZHVwIG9mIElTX0NIQVIgbGlrZSBtYWNyb3MsCgkgIHNpZ25pZmljYW50IG92ZXJhbGwgaW1wcm92ZW1lbnQKCSogeG1sbGludC5jOiBhZGRlZCBJL08gdGVzdCB0byB4bWxsaW50CgkqIHRlc3RTQVguYzogYWRkZWQgYSBzcGVlZCB0ZXN0CgkqIGRvYy8qIDogdXBkYXRlZC9yZWdlbmVyYXRlZAoKU2F0IEFwciAgOCAxNDo1NDo1NCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguYyB1cmkuaCBwYXJzZXJJbnRlcm5hbHMuaDogY29zbWV0aWMgY2hhbmdlcyBmcm9tCgkgICJUaW11ciBJLiBCYWtleWV2IiA8dGltdXJAYmF0LnJ1PiwgaW5jbHVkaW5nIG1ha2luZyAKCSAgeG1sQ3JlYXRlVVJJKCkgcHVibGljCgpGcmkgQXByICA3IDE4OjM1OjAyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxJTy5bY2hdIHBhcnNlci5jOiBjbGVhbmUgdXAgdGhlIHhtbFBhcnNlcklucHV0QnVmZmVyIG1lc3MKCSAgYW5kIHRoZSBjb2RlIGF0IHRoZSBzYW1lIHRpbWUuIEFkZGVkIGEgY2xlYW4gbWVjaGFuaXNtIGZvcgoJICBvdmVybG9hZCBvciBhZGRlZCBpbnB1dCBtZXRob2RzOiB4bWxSZWdpc3RlcklucHV0Q2FsbGJhY2tzKCkKCSogdHJlZS5jOiBmaXhlZCB4bWxQcmV2U2libGluZyBhbmQgeG1sTmV4dFNpYmxpbmcgcGVyIAoJICBDaHJpc3RvcGhlIExlIEdhbCAoQ2hyaXN0b3BoZS5MZS1HYWxAaW1hZy5mcikgaW5wdXQKCSogVE9ETzogdXBkYXRlZAoJKiBkb2MvKiA6IHVwZGF0ZWQvcmVnZW5lcmF0ZWQKCSogZG9jL01ha2VmaWxlLmFtOiB0d2Vha3MgdG8gYXZvaWQgcHJvYmxlbSB3aXRoIGxpYnhtbCBsaW5rIGluIHRoZQoJICBzb3VyY2UgZGlyCgpXZWQgQXByICA1IDIxOjExOjM1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0ZXN0VVJJLmM6IHlldCBhbm90aGVyIGZvcmdvdHRlbiBjb21taXQsIEkgc2hvdWxkIGdldCBzb21lIHNsZWVwICEKCldlZCBBcHIgIDUgMjA6MzY6NDYgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbGxpbnQuYzogZm9yZ290IHRvIGNvbW1pdCB0aGlzIHRvbyA/CgpXZWQgQXByICA1IDE2OjIyOjQ0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWx2ZXJzaW9uLmguaW4gOiBmb3Jnb3QgdG8gY29tbWl0IHRoaXMgcHJldmlvdXNseQoKTW9uIEFwciAgMyAyMTo0NzoxMCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgbGlieG1sLTIuMC4wIHZlcnNpb24gbG9va3MgT2sgc28gZmFyCgkqIFJFQURNRSBUT0RPOiB1cGRhdGVkIGZvciByZWxlYXNlCgkqIHVyaS5jIHVyaS5oOiBhZGRlZCBhdXRob3JpdHkgcGFyc2luZy9zYXZpbmcKCSogdXJpLmMgdGVzdFVSSS5jIE1ha2VmaWxlLmFtOiBtb3ZlZCB0aGUgdGVzdGluZyBjb2RlIHRvIHRlc3RVUkkuYwoJKiB4bWx2ZXJzaW9uLmguaW4gY29uZmlndXJlLmluIG5hbm9mdHAuW2NoXSBuYW5vaHR0cC5bY2hdIGVuY29kaW5nLmgKCSAgZGVidWdYTUwuW2NoXSB4cGF0aC5bY2hdIHhtbElPLmMgdGVzdGVyLmMgdGVzdFhQYXRoLmMgdGVzdEhUTUwuYwoJICB0cmVlLmMgSFRNTHRyZWUuYyBIVE1McGFyc2VyLmMgdHJlZS5jIHRyZWUuaCBwYXJzZXIuYwoJICBNYWtlZmlsZS5hbSA6IGFkZGVkIGNvbXBpbGUtdGltZSBjdXN0b21pemF0aW9uIG9mIGxpYnhtbAoJICAtLXdpdGgtZnRwIC0td2l0aC1odHRwIC0td2l0aC1odG1sIC0td2l0aC14cGF0aCAtLXdpdGgtZGVidWcKCSAgLS13aXRoLW1lbS1kZWJ1ZwoJKiAqLltjaF0gYXV0b2NvbmYuc2ggOiBtb3ZlZCB0byBhbiBhYnNvbHV0ZSBhZHJlc3Npbmcgb2YgaW5jbHVkZXMgOiAKCSAgI2luY2x1ZGUgPGxpYnhtbC94eHguaD4gSSBob3BlIGl0IHdvbid0IGJyZWFrIHRvbyBtdWNoIHN0dWZmCgkgIGFuZCB3aWxsIGJlIG1hbmFnZWFibGUgaW4gdGhlIGZ1dHVyZS4uLgoJKiB4bWxsaW50LmMgTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW4gOiByZW5hbWVkIHRlc3Rlci5jIHRvIHhtbGxpbnQuYwoJICBhbmQgYWRkZWQgeG1sbGludCB0byB0aGUgaW5zdGFsbGVkIHByb2dyYW1zCgkqIHVyaS5oOiBhZGRlZCB4bWxGcmVlVVJJKCkKCSAgCkZyaSBNYXIgMjQgMTQ6MzU6MjEgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdXJpLmMgdXJpLmg6IGZpbmlzaGVkIHRoZSBlc2NhcGluZyBoYW5kbGluZywgdGhlIGJhc2Ugc3VwcG9ydAoJICBhbmQgdGhlIFVSSSBwYXRoIG5vcm1hbGl6YXRpb24uIExvb2tzIGdvb2QganVzdCBsYWNrcyB0aGUKCSAgYXV0aG9yaXR5IGNvbnRlbnQgcGFyc2luZyBjb2RlLgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgaW5zdHJ1Y3Rpb25zIHRvIGdlbmVyYXRlIHRlc3RVUkkKCSogVE9ETzogdXBkYXRlZAoJKiBkb2MveG1sLmh0bWwsIGRvYy9zbWFsbGZvb3Rvbmx5LmdpZiBkb2MvdzNjLnBuZzogdXBkYXRlZCwKCSAgYWRkZWQgbGlua3MgYW5kIGljb25zIGZvciBXM0MgYW5kIEdub21lCgpNb24gTWFyIDIwIDE0OjA1OjI2IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbG1lbW9yeS5bY2hdIDogc2VlbXMgSSBmb3Jnb3QgdG8gYWN0dWFsbHkgdXBkYXRlIHRoZSBmaWxlcyBpbgoJICB0aGUgbGFzdCBjb21taXQgOi0pCgkqIGRvYy94bWwuaHRtbCBkb2MvaHRtbC8qIDogdXBkYXRlZCBhbmQgdXBsb2FkZWQgdGhlIGRvY3MKCk1vbiBNYXIgMjAgMTI6MzM6NTEgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdGVzdC92YWxpZC9kdGRzL3hodG1sKjogcmVtb3ZlZCBSQ1MgaW5mb3MgKHBhaW4gd2l0aCBDVlMpCgkqIFRPRE86IHVwZGF0ZWQKCSogeG1sbWVtb3J5LltjaF0gOiBhZGRlZCB4bWxNZW1TZXR1cCgpIGFuZCB4bWxNZW1HZXQoKSB0byBvdmVycmlkZQoJICBsaWJ4bWwgZGVmYXVsdCBhbGxvY2F0aW9uIGZ1bmN0aW9uIHdpdGggYW5vdGhlciBzZXQgKGxpa2UgZ21hbGxvYy8KCSAgZ2ZyZWUpLgoJKiBNYWtlZmlsZS5hbSwgdXJpLmMsIHVyaS5oOiBhZGRlZCBhIHNldCBvZiBmdW5jdGlvbnMgdG8gZG8KCSAgZXhhY3QgKGxpdHRlcmFseSBjb3BpZWQgZnJvbSB0aGUgUkZDIDIzOTYgcHJvZHVjdGlvbnMpIHBhcnNpbmcKCSAgYW5kIGhhbmRsaW5nIG9mIFVSSS4gV2lsbCBiZSBuZWVkZWQgZm9yIFhMaW5rLCBvbmUgWE1MIFdGQywgCgkgIFhNTCBCYXNlIGFuZCByZXVzZWQgaW4gdGhlIG5hbm9bZnRwL2h0dHBdIG1vZHVsZXMuIFN0aWxsIHdvcmsKCSAgdG8gYmUgZG9uZS4KClR1ZSBNYXIgMTQgMjA6NTI6MzUgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluLCBsaWJ4bWwuc3BlYy5pbiA6IGxpYnhtbDIKCSogZG9jLyogOiB1cGRhdGVkIHRoZSBkb2MgcGFnZSwgcmVidWlsdCB0aGUgZG9jcwoKVHVlIE1hciAxNCAxOToxMToyOSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhbGw6IHRhZ2dlZCBMSUJfWE1MXzFfWAoJKiAqLmMgKi5oIDogdXBkYXRlZCBmcm9tIFczQyBDVlMgdHJlZQoJKiBjb25maWd1cmUuaW4gOiAyLjAuMC1iZXRhCgkqIGxpYnhtbC5zcGVjLmluIDogbGlieG1sMiBwYWNrYWdlIG5hbQoJKiByZXN1bHQvKiA6IG5ldyB2ZXJzaW9uIG9mIHRoZSB0ZXN0cyBvdXRwdXQKCk1vbiBNYXIgIDYgMDk6MzQ6NTIgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sLCBkb2MvdXBkYXRlLmh0bWw6IHVwZGF0ZWQgZG9jcywgMS44LjcKClNhdCBNYXIgIDQgMTY6MTQ6NDIgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jLyogOiByZWJ1aWx0IHRoZSBkb2NzCgkqIHBhcnNlci5jOiBmaW5hbCBwYXRjaCBvbiAjNjc2NgoJKiB2YWxpZC5jOiBzbWFsbCBwYXRjaCBvbiB2YWxpZGl0eSBjaGVja3MuCgpTYXQgTWFyICA0IDEyOjM4OjQxIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy91cGdyYWRlLmh0bWw6IGluc3RydWN0aW9uIG9uIGhvdyB0byB1cGdyYWRlIGZyb20gMS54IHRvIDIueAoJICBhZGRlZAoJKiBwYXJzZXIuYzogYWRkaW5nIHhtbEtlZXBCbGFua3NEZWZhdWx0KCkgYXMgYSB3YXkgdG8gbWFuYWdlCgkgIGNvbXBhdGliaWxpdHkgdy5yLnQuIFhNTCBzcGVjIGFuZCBleGlzdGluZyBjb2RlLgoKVGh1IE1hciAgMiAwNDo0NToxNSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogc2VlbXMgYSBiZXR0ZXIgc29sdXRpb24gdG8gPGE+ICAgPC9hPiBleGlzdHMsCgkgIHdpbGwgdHJ5IGl0IGZvciBhIHdoaWxlCgpUaHUgTWFyICAyIDAyOjI2OjEzIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiB0cmllZCB0byByZW1vdmUgdGhlIDxhPiAgIDwvYT4gZ2VuZXJhdGluZyA8YS8+CgkgIHRoaXMgaXMgaGFyZC4gTGVmdCBhIGZsYWcgZm9yIHRoYXQgcHVycG9zZS4gRml4ZWQgYnVnICM2NzY2CgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyZWQgMS44Ljcgbm90IHJlbGVhc2VkLCBkdWUgdG8gcHJldmlvdXMKCSAgcHJvYmxlbQoKVGh1IE1hciAgMiAwMzowMzo1MCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgOiBhcHBsaWVkIHNlY29uZCBwYXRjaCBmcm9tIFBhdWwgRHVCb2lzCgpUdWUgRmViIDI5IDIzOjU1OjEzIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCA6IGFwcGxpZWQgcGF0Y2ggZnJvbSBQYXVsIER1Qm9pcwoKVGh1IEZlYiAgMyAxNjozNjozOSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYyBIVE1McGFyc2VyLmM6IGRvIGEgYml0IG9mIGJ1ZmZlcml6YXRpb24gaW4gcHVzaCBtb2RlLgoKVGh1IEZlYiAgMyAxNTo1OTozNyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYyB0cmVlLmMgSFRNTHRyZWUuW2NoXSBkZWJ1Z1hNTC5jIHhwYXRoLmM6IEZpeGVkCgkgIGNvbXBpbGF0aW9uIHdhcm5pbmdzIG9uIHZhcmlvdXMgcGxhdGZvcm1zLgoJKiBwYXJzZXIuYzogRml4ZWQgIzUyODEgdmFsaWRpdHkgZXJyb3IgY2FsbGJhY2tzIGFyZSBub3cgZGVzYWN0aXZlZAoJICBieSBkZWZhdWx0IGlmIG5vdCB2YWxpZGF0aW5nLgoKVGh1IEZlYiAgMyAxMzo0NjoxNCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmMsIHdpbjMyY29uZmlnLmguaW46IHBhdGNoZXMgdG8gY29tcGlsZSBvbiBXSU4zMgoKV2VkIEZlYiAgMiAyMjo1MToxNiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmM6IHNucHJpbnRmL3NwcmludGYgcGF0Y2ggY291cnRlc3kgR2VvcmdlIEthdHNpcmVsb3MKCSAgPGdrYXRzaUBjcy50b3JvbnRvLmVkdT4KCk1vbiBKYW4gMzEgMTg6NTg6MjEgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmM6IEZpeGVkICcjJyBhbmQgJz8nIHN0cmlwcGluZyB3aGVuCgkgIHByb2Nlc3NpbmcgVVJMcwoKTW9uIEphbiAzMSAxNDoyNTo1NyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLltjaF06IGNsZWFudXAsIGJ1ZyBmaXhlcywgaW50ZWdyYXRpb24gaW4gcnBtZmluZCwgYWRkZWQKCSAgeG1sTmFub0ZUUFVwZGF0ZVVSTCBmb3IgcGVyc2lzdGVudCBjb250cm9sIGNvbm5lY3Rpb25zLgoJKiBjb25maWd1cmUuaW46IDEuOC42CgpUaHUgSmFuIDI3IDE3OjUyOjI5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9odHRwLltjaF0sIG5hbm9mdHAuW2NoXTogY2xlYW51cCwgYWRkZWQgcHJveHkgc3VwcG9ydAoJKiB0cmVlLltjaF0gOiBhZGRlZCB4bWxTYXZlTm9FbXB0eVRhZ3MKCjIwMDAtMDEtMjkgIEphbWVzIEhlbnN0cmlkZ2UgPGphbWVzQGRhYS5jb20uYXU+CgoJKiBuYW5vZnRwLmM6IGluY2x1ZGUgPG5ldGluZXQvaW4uaD4gZm9yIElQUFJPVE9fVENQLgoKCSogTWFrZWZpbGUuYW06IGFkZGVkIG5hbm9mdHAuW2NoXSB0byB0aGUgYnVpbGQuCgpXZWQgSmFuIDI2IDE4OjE0OjU1IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuW2NoXTogY2xlYW51cCwgY29tbWVudHMsIEFQSQoJKiBkZWJ1Z1hNTC5jIDogZml4ZWQgYSBidWcgaW4gdGhlIGNhdCBjb21tYW5kCgkqIGRvYy8qOiByZWdlbmVyYXRlZCB0aGUgZG9jcwoKV2VkIEphbiAyNiAxNjo1Mjo1MCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLltjaF0gcGFyc2VyLmMgeG1sSU8uW2NoXTogYWRkZWQgYSBOYW5vIEZUUCBpbXBsZW1lbnRhdGlvbgoJKiBkZWJ1Z1hNTC5jIDogZml4ZWQgYSBidWcgaW4gdGhlIGNhdCBjb21tYW5kCgkqIHZhbGlkLmM6IGZpeGluZyBzb21lIHNtYWxsIHByb2JzCgkqIGxpYnhtbC5zcGVjLmluOiBnZXQgcmlkIG9mIHRoZSBTTkFQIHN1ZmZpeAoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQgdGhlIHN0YXR1cwoKTW9uIEphbiAyNCAxNDozMTowOSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWwtY29uZmlnLmluOiB4bWwtY29uZmlnIC0tdmVyc2lvbiB0byBqdXN0IHJldHVybiB0aGUKCSAgdmVyc2lvbiBudW1iZXIKCSogeHBhdGguYzogc29tZSBjbGVhbnVwIHcuci50LiBheGlzIHdoZW4gdGhlIGN1cnJlbnQgbm9kZSBpcwoJICBhbiBhdHRyaWJ1dGUuCgkqIFRPRE86IHVwZGF0ZWQKClR1ZSBKYW4gMTggMTg6NDY6MDYgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJlZCBmb3IgbGlieG1sLTEuOC41CgkqIGRvYy8qIHJlY29tcGlsZWQgdGhlIGRvY3VtZW50YXRpb24KCjIwMDAtMDEtMTcgIEpvZHkgR29sZGJlcmcgPGpnb2xkYmVyZ0Bob21lLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiA6IFdBUk5JTkcgYXV0b2NvbmYgc3VidGxldHkgYWxlcnQgOgoJICBVc2UgQUNfQ0hFQ0tfSEVBREVSUyByYXRoZXIgdGhhbiBBQ19DSEVDS19IRUFERVIKCSAgd2hlbiBsb29raW5nIGZvciB6bGliLmggc28gdGhhdCBIQVZFX1pMSUJfSCBpcyBkZWZpbmVkLgoJKiBjb25maWcuaC5pbiA6IEhhdmUgYSAjdW5kZWYgZm9yIEhBVkVfWkxJQl9IIHNvIHRoYXQgaXQgd2lsbAoJICBnZXQgZGVmaW5lZCBieSBBQ19DSEVDS19IRUFERVJTLgoKTW9uIEphbiAxNyAxNzowNDoxMiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IGZpeGVkIGEgaGlkZW91cyBidWcgaW4geG1sR2V0UHJvcCgpIHRoYW5rcyB0bwoJICBSdW5lLkRqdXJodXVzQGZhc3Qubm8KClNhdCBKYW4gMTUgMTU6MDk6MDYgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogVE9ETzogdXBkYXRlZAoJKiB0cmVlLmMsIHBhcnNlci5jOiBtYWRlIHN1cmUgdGhhdCBvbmx5IG1lbW9yeSBhbGxvYyBwcm9ibGVtcwoJICBhbmQgaW50ZXJuYWwgcGFyc2VyIGVycm9ycyBhcmUgYWxsb3dlZCB0byB3cml0ZSB0byBzdGRvdXQgb3IKCSAgc3RkZXJyLgoKVGh1IEphbiAxMyAxMTo0OToxMSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmMgOiByZXN0b3JlZCB4bWxOZXdHbG9iYWxOcyBzaW5jZSB0aGlzIHNlZW1zIHVzZWQgYnkKCSAgYSBsb3Qgb2YgZXhpc3RpbmcgY29kZSA6LSgsIGZpeGVkIGEgYnVnIGluIHhtbE5ld05zCgkqIG5hbm9odHRwLmM6IGZpeGVkIGEgcHJvYmxlbSB3aXRoIElOQ0xVREVfV0lOU09DSwoJKiBIVE1McGFyc2VyLmMsIHBhcnNlci5jLCBlbnRpdGllcy5jLCB2YWxpZC5jIDogcmVtb3ZlZCBhbGwgY2FsbHMKCSAgdG8gZXhpdCgpIGZyb20gdGhlIGxpYnJhcnkgY29kZS4KCSogeHBhdGguYywgcGFyc2VyLmM6IHJlbW92ZWQgYnVncyBvciB1bnVzZWQgY29kZSBkZXRlY3RlZCBieSAKCSAgV2luZG93cyBjb21waWxlcnMKCSogcGFyc2VyLmM6IHN0YXJ0ZWQgYWRkaW5nIGludGVyZmFjZXMgZm9yIHBhcnNpbmcgd2VsbCBiYWxhbmNlZAoJICBYTUwgZnJhZ21lbnRzCgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzaW5nIDEuOC40CgkqIGRvYy8qIDogcmVidWlsdCB0aGUgZG9jcwoKU3VuIEphbiAgOSAyMzowMzoyMCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF0gOiBhZGRlZCB4bWxOZXdEb2NGcmFnbWVudCgpIGZvciBET00KCSogdGVzdEhUTUwuYzogdW5pbml0aWFsaXplZCB2YXJpYWJsZS4KCldlZCBKYW4gIDUgMTc6Mjk6MTcgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jLyogOiByZWJ1aWxkIHRoZSBkb2NzCgpXZWQgSmFuICA1IDE3OjA4OjQzIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFjY29uZmlnLmg6IHJlYWRsaW5lIGFuZCBoaXN0b3J5IHBhdGNoCgkqIHZhbGlkLltjaF06IGFkZGVkIHhtbFJlbW92ZUlEKCkgYW5kIHhtbFJlbW92ZVJlZigpCgkqIHRyZWUuYzogYWRkZWQgY2hlY2sgYW5kIGhhbmRsaW5nIHdoZW4gcG9zc2libHkgcmVtb3ZpbmcgYW4gSUQKCSogdHJlZS5jLCBIVE1McGFyc2VyLmgsIEhUTUx0cmVlLmg6IGZpeGVkIGVudGl0aWVzIHBhcnNpbmcKCSAgICAgYW5kIHNhdmluZy4KCSogdGVzdC9IVE1ML2VudGl0aWVzLmh0bWwgcmVzdWx0L0hUTUwvZW50aXRpZXMuaHRtbCogOiB0ZXN0IGZvcgoJICAgICB2YXJpb3VzIGVudGl0aWVzIHJlZmVyZW5jZSBjYXNlcwoJKiByZXN1bHQvSFRNTC8qIDogYXMgYSByZXN1bHQgb3V0cHV0IG9mIHNvbWUgdGVzdGNhc2UgaGF2ZQoJICAgICBjaGFuZ2VkCgkqIEhUTUxwYXJzZXIuYywgcGFyc2VyLmM6IGZpeGVkIGEgYnVnIGluIHRoZSBwdXNoIG1vZGUgdHJpZ2dlcmVkCgkgICAgIGJ5IHByZXZpb3VzIGV4YW1wbGUuIGFkZGVkIHhtbFBhcnNlVHJ5T3JGaW5pc2goKS4KCSogeHBhdGguaCB0cmVlLmggcGFyc2VyLmggdmFsaWQuaCB4bWxJTy5oIHhsaW5rLmggZW5jb2RpbmcuaAoJICBlbnRpdGllcy5oIGRlYnVnWE1MLmggSFRNTHBhcnNlci5oOiBjaGFuZ2VkIHRoZSB3YXkgc3RydWN0IGFyZSAKCSAgZGVjbGFyZWQgdG8gYWxsb3cgZ3RrLWRvYyB0byBleHBvc2UgdGhvc2UKCSogcGFyc2VyLmM6IGNsb3NlZCBidWcgIzQ5NjAgIAoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW46IEFwcGxpZWQgcGF0Y2ggZnJvbSAKCSAgQWxiZXJ0IENoaW4tQS1Zb3VuZyA8Y2hpbmFAdGhld3JpdHRlbndvcmQuY29tPiBmb3IgYmV0dGVyIHpsaWIKCSAgYW5kIG1hdGgvc29ja2V0IGxpYnMgZGV0ZWN0aW9uCgpNb24gSmFuICAzIDE4OjI5OjQzIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgTWFrZWZpbGUuYW06IGxpbmsgdGVzdGVyIGFnYWluc3QgcmVhZGxpbmUKCSogZG9jL3htbC5odG1sIGRvYy8qLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3VtZW50YXRpb24gcGFnZXMKCk1vbiBKYW4gIDMgMTE6NTg6MDUgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdOiBhZGRlZCB4bWxSZW1vdmVQcm9wCgkqIHdpbjMyY29uZmlnLmguaW4gbmFub2h0dHAuYzogYXZvaWQgaW5jbHVkaW5nIHRoZSBXaW5kb3dzCgkgICAgc29ja2V0IHN0dWZmIGluIGV2ZXJ5IEMgZmlsZXMKCSogcGFyc2VyLmM6IHJlbW92ZWQgYW4gaW5kZXRlcm1pbmF0aW9uIHhtTERlY2wvUEkoeG1sLi4uKSBpbgoJICAgIHRoZSBYbUwgcGFyc2VyKHMpCgkqIHRlc3QvbnM0IHJlc3VsdC9uczQgZXRjLi4uOiBhZGRlZCB0ZXN0IGNhc2UgZm9yIHByZXZpb3VzIHByb2IgICAgCgkqIHRyZWUuYzogeG1sTmV3TnMgd2Fzbid0IGNoZWNraW5nIGZvciBkb3VibGUgZGVmaW5pdGlvbgoJKiBNYWtlZmlsZS5pbjogZml4ZWQgYSBwcm9ibGVtIHdpdGggZGlzdC1ob29rIGR1cGxpY2F0ZXMKCSogcGFyc2VyLltoY10sIHhtbElPLmM6IGZpeGVkIHRoZSBsb2FkaW5nIG9mIGV4dGVybmFsIGVudGl0aWVzCgkgICAgQVBJcywgbm93IHhtbExvYWRFeHRlcm5hbEVudGl0eSgpIGlzIHVzZWQgZXZlcnl3aGVyZSBhbmQKCSAgICBzZXR0aW5nIHVwIGFuIGFwcCBzcGVjaWZpYyBmcm9udC1lbmQgdXNpbmcgdGhlIAoJKiBTQVguYyBwYXJzZXIuYzogc29tZSBmaXhlcywgbm93IHRoZSB4aHRtbCBzcGVjIHZhbGlkYXRlcwoJICAgIHdpdGggdGhlIHhodG1sIERURC4KCSogZXJyb3IuYzogZml4ZWQgY3Jhc2hlcyBpbiBjYXNlIG9mIG5vIGlucHV0IHN0cmVhbSAgICAKCSogdGVzdC92YWxpZC9bZHRkcy9dL3hodG1sKiA6IGFkZGVkIHRoZSB4aHRtbCBzcGVjIGFuZCBkdGRzCgkgICAgdG8gdGhlIHZhbGlkYXRpb24gdGVzdHMgYW5kIHJlc3VsdHMKCldlZCBEZWMgMjkgMTU6Mjk6NTIgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5bY2hdIHRlc3RIVE1MLmM6IGFkZGVkIHB1c2ggbW9kZSBmb3IgdGhlIEhUTUwgcGFyc2VyCgkgIHRvbyBodG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoKSBhbmQgaHRtbFBhcnNlQ2h1bmsoKQoJKiBwYXJzZXIuYzogYSBiaXQgb2YgY2xlYW51cC4KCSogU0FYLmMsIEhUTUxwYXJzZXIuYzogc29tZSBhdHRyaWJ1dGVzIG1heSBub3QgaGF2ZSB2YWx1ZXMgKGNvbnRyYXJ5CgkgIHRvIFhNTCkgcmVtb3ZlZCB0aGUgbGFzdCBtZW0gbGVhayBrbm93bgoJKiBIVE1MdHJlZS5jOiBvdXRwdXQgbWVzc2FnZSBjbGVhbnVwCgkqIHhtbG1lbW9yeS5jOiBkaXNwbGF5IGNvbnRlbnQgaW5mbyBhYm91dCBtZW1vcnkgYmxvY2tzCgkqIHJlc3VsdC9IVE1ML3dpcmVkLiogOiBtaXNzaW5nIGF0dCB2YWx1ZSB3YXJuaW5nIGNoYW5nZQoKVHVlIERlYyAyOCAxNzo0Mjo0MSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvKiA6IHJlYnVpbHQgdGhlIGRvY3VtZW50YXRpb24KClR1ZSBEZWMgMjggMTg6NDQ6MjIgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLltjaF0gcGFyc2VySW50ZXJuYWxzLmg6IFB1c2ggcGFyc2VyIGZvciBYTUwsCgkgICAgIHNlZW1zIHRvIHdvcmsgZmluZSBub3cKCSogdGVzdGVyLmMgZGVidWdYTUwuW2NoXTogQWRkZWQgYW4gWE1MIHNoZWxsIGRlYnVnIGZhY2lsaXR5IGFuZAoJICAgICAtLXB1c2ggZm9yIHB1c2ggdGVzdGluZwoJKiB4cGF0aC5bY2hdIDogY2xlYW5lZCB1cCBmb3IgU2hlbGwgdXNhZ2UsIGFkZGVkIG1pc3NpbmcgQVBJcwoJKiB0ZXN0U0FYLmM6IGFkZGVkIC0tcHVzaAoJKiBIVE1MdHJlZS5bY2hdIHRyZWUuW2NoXTogbmV3IGZ1bmN0aW9ucyBmb3IgZHVtcGluZyBwYXJ0cyBvZiB0aGUKCSAgICAgc3VidHJlZQoJKiB4bWxJTy5bY2hdIDogZW5yaWNoZWQgQVBJICsgZml4ZXMgZm9yIHB1c2ggbW9kZSAgICAgCgkqIGVudGl0aWVzLltjaF06IGFkZGVkIHRoZSBlbnRpdHkgY29udGVudCBsZW5ndGggdG8gdGhlIHN0cnVjdC4KCSogeG1sbWVtb3J5LltjaF06IG5ldyBBUEkgdG8gc2hvdyB0aGUgbGFzdCBlbnRyaWVzIGZvciB0aGUgc2hlbGwKCSogdmFsaWQuYzogYWRkZWQgcmVxdWlyZWQgYXR0cmlidXRlIHRlc3RpbmcKCSogU0FYLmM6IHRoZSBjZGF0YSBjYWxsYmFjayBub3cgbWVyZ2UgY29udGlndW91cyBmcmFnbWVudHMKCSogSFRNTHBhcnNlci5jOiBjbGVhbnVwIG9mIHNvbWUgbWFjcm9zCgpXZWQgRGVjIDIyIDEyOjIwOjUzIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBmaXggZm9yIFBJcyBuYW1lIHN0YXJ0aW5nIHdpdGggeG1sCgkqIHRyZWUuYzogZml4ZWQgYSBwb3RlbnRpYWwgcHJvYmxlbSB3aXRoIHx8IGFuZCAmJiBvcHMKCSogKi5jLCBjb25maWd1cmUuaW4gd2luMzJjb25maWcuaC5pbiA6IGdlbmVyYXRlIHdpbjMyY29uZmlnLmggZm9yCgkgIHRob3NlIG9uIHRoZSBPdGhlciBTaWRlICEKClR1ZSBEZWMgMjEgMTc6MjI6MTcgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgc3R1cGlkID0gdnMuID09IGJ1ZyA6LSgKCSogZG9jL2dub21lLXhtbC5zZ21sOiBzL2dsYWRlL3htbC8KClR1ZSBEZWMgMjEgMTQ6Mjk6MzQgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluLCBkb2MveG1sLmh0bWwgOiBidWcgZml4IHJlbGVhc2UgMS44LjIKCSogZGVidWdYTUwuaCBuYW5vaHR0cC5oIHhtbC1lcnJvci5oIHhtbG1lbW9yeS5oIHhwYXRoLmggOiAKCSAgSG9wZWZ1bGx5IHRoZSBlbmQgb2YgdGhhdCBzaWxseSBDKysgaW5jbHVkZSBwcm9ibGVtCgkqIHRyZWUuW2NoXTogQWRkZWQgYSBmZXcgZnVuY3Rpb25zOiB4bWxSZXBsYWNlTm9kZSwgeG1sQWRkUHJldlNpYmxpbmcsCgkgICAgICB4bWxBZGROZXh0U2libGluZywgeG1sTm9kZVNldE5hbWUgYW5kIHhtbERvY1NldFJvb3RFbGVtZW50CgkqIEhUTUxwYXJzZXIuYyBIVE1McGFyc2VyLmggSFRNTHRyZWUuYzogV2hlbiBzYXZpbmcgSFRNTCB0cnkgdG8gYXZvaWQgCgkgICAgICB0cm91YmxlcyB3aXRoIGF1dG9jbG9zZWQgZWxlbWVudHMgd2hlbiB0aGUgc3RyZWUgc2hhcGUgZG9lc24ndAoJICAgICAgZm9sbG93IHRoZSBEdEQgc3BlY3MuIEFkZGVkIGh0bWxJc0F1dG9DbG9zZWQoKSBhbmQKCSAgICAgIGh0bWxBdXRvQ2xvc2VUYWcoKQoJKiByZXN1bHQvSFRNTC8qLmh0bSo6IFVwZGF0ZWQgdGhlIEhUTUwgZXhhbXBsZXMgcmVncmVzc2lvbiB0ZXN0cyBvdXRwdXQKCSogU0FYLmMgdHJlZS5jOiBmaXhlZCBidWcgb24gZGVmYXVsdGluZyBuYW1lc3BhY2VzIG9uIGF0dHJpYnV0ZXMKCSogZGVidWdYTUwuYzogZml4ZWQgYSBidWcgb24gcHJpbnRpbmcgZGVmYXVsdCBuYW1lc3BhY2VzLgoJKiBIVE1MdHJlZS5jOiBmaXhlZCBhIHByb2JsZW0gd2hlbiBvdXRwdXRpbmcgWE1MIHBhcnNlZCBkb2NzIGFzIEhUTUwKCk1vbiBEZWMgMjAgMTY6MjA6NTUgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcmVzdWx0L0hUTUwvKi5odG1bbF0gOiB1cGRhdGVkIHRoZSBIVE1MIHJlZ3Jlc3Npb24gdGVzdHMgYWNjb3JkaW5nCgkgIHRvIHRoZSBuZXcgb3V0cHV0CgkqIHhwYXRoLmggeG1sLWVycm9yLmggdmFsaWQuaCB0cmVlLmggcGFyc2VyLmggZW50aXRpZXMuaCBTQVguaAoJICBIVE1MdHJlZS5oIHRyZWUuYyBlbnRpdGllcy5jOiBoZWFkZXJzIHR3ZWFraW5ncyB0byBhdm9pZCBhIG5hc3R5CgkgIHByb2JsZW0gZHVlIHRvIGludGVybWl4IG9mIGV4dGVybiAiQyIgeyAuLi4gfSBkZWNsYXJhdGlvbnMgZm9yIEMrKwoJICBhbmQgcmVjdXJzaXZlIGluY2x1ZGVzIGluIHRoZSBoZWFkZXJzCgoxOTk5LTEyLTIwICBDaHJpcyBMYWhleSAgPGNsYWhleUB1bWljaC5lZHU+CgoJKiBIVE1MdHJlZS5jOiBNYWRlIGl0IHNvIHRoYXQgaHRtbCBub2RlcyB3aXRoIGEgc2luZ2xlIGNoaWxkIGRvCglub3QgaW5zZXJ0IGEgY2FycmlhZ2UgcmV0dXJuIGJlZm9yZSBvciBhZnRlciB0aGUgY2hpbGQgbm9kZS4KClNhdCBEZWMgMTggMTY6MDc6MDMgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluLCBkb2MveG1sLmh0bWwgOiBidWcgZml4IHJlbGVhc2UgMS44LjEKCSogcGFyc2VyLmM6IGZpeGVkIGJ1ZyAjNDM0NAoJKiB4cGF0aC5oIHhtbC1lcnJvci5oIHhsaW5rLmggbmFub2h0dHAuaCBkZWJ1Z1hNTC5oIFNBWC5oIEhUTUxwYXJzZXIuaAoJICBhZGRlZCB0aGUgZ2x1ZSB0byBhdm9pZCBDKysgcHJvYmxlbXMKCSogZG9jLyogOiByZWdlbmVyYXRlZCB0aGUgZG9jdW1lbnRhdGlvbgoKVGh1IERlYyAxNiAxNjoxOToyOSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IGZpeGVkIGEgYnVnIGludHJvZHVjZWQgaW4gMS44LjAgYW5kIGJyZWFraW5nIGRlZmF1bHQKCSAgbmFtZXNwYWNlIHJlY29nbml0aW9uLCBhbmQgRGlhIGFzIGEgcmVzdWwgOi0oCgkqIGVuY29kaW5nLmM6IGNsb3NlZCBidWcgIzM5NTAKCldlZCBEZWMgMTUgMTk6MjI6MjMgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdmFsaWQuYzogZGVidWdnaW5nIGEgcG9zdGVyaW9yaSB2YWxpZGF0aW9uLCBleGNlcHQgVVJJIGV4cGFuc2lvbgoJICBzdHVmZiB0aGlzIHNob3VsZCBiZSBmaXhlZCBub3cKCSogcGFyc2VySW50ZXJuYWxzLmg6IGZpeGVkIGEgYnVnIGluIElTX0JBU0VDSEFSIHJlcG9ydGVkIGJ5CgkgIENhcmwgTnlnYXJkIDxjbnlnYXJkQGJlbGxhdGxhbnRpYy5uZXQ+CgkqIHRlc3Rlci5jOiBhZGRlZCAtLXBvc3R2YWxpZCwgY2xlYW5pbmcgb2YgdGhlIGNvZGUKCSogdHJlZS5bY2hdOiBhZGRlZCB4bWxEb2NHZXRSb290RWxlbWVudCgpCgkgIApUdWUgRGVjIDE0IDIwOjMwOjM0IFBTVCAxOTk5IFJhbWlybyBFc3RydWdvIDxyYW1pcm9AZWF6ZWwuY29tPgoKCSogU0FYLmgsIHRyZWUuaCA6IGNoYW5nZWQgJ25hbWVzcGFjZScgdG8gJ25hbWVTcGFjZScgdG8gd29ya2Fyb3VuZAoJYysrIGxvc2FnZS4KClN1biBEZWMgMTIgMTM6MDg6MTUgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluLCBkb2MveG1sLmh0bWwgOiBidW1wZWQgdG8gMS44LjAKCSogeGxpbmsuW2NoXSwgTWFrZWZpbGUuYW0gOiBhZGRlZCBmcmFtZXdvcmsgZm9yIGxpbmsgZGV0ZWN0aW9uCgkqIHBhcnNlci5oOiBhZGRlZCBuYkNoYXJzIHRvIHBhcnNlciBjb250ZXh0LCBuZWVkZWQgZm9yIGNsZWFudXAuCgkqIHhtbG1lbW9yeS5jOiByZW1vdmVkIGEgbmFzdHkgYnVnIHdoZW4gb3V0IG9mIG1lbQoJKiB2YWxpZC5bY2hdOiBhZGRpbmcgbmFtZXNwYWNlIHN1cHBvcnQgZm9yIGF0dHJpYnV0ZSBkZWNsCgkqIHRlc3Rlci5jOiBhZGRlZCAtLWRlYnVnZW50IG9wdGlvbgoJKiBkZWJ1Z1hNTC5bY2hdOiBhZGRlZCB4bWxEZWJ1Z0R1bXBFbnRpdGllcygpCgkqIHBhcnNlci5jOiBjbGVhbnVwLCBhdm9pZGluZyB1c2Ugb2YgQ1VSX1BUUiBsaWtlIHBsYWd1ZSwgdXNpbmcKCSAgYnVmZmVycyBpbnN0ZWFkLCB0aGlzIHdhcyByZWFsbHkgbmVlZGVkLCB2YWxpZGF0aW9uIHdhcyBicmVha2luZwoJICBpbiBzdHJhbmdlIHdheXMgZHVlIHRvIHRoYXQuIEFkZGVkIHhtbFBhcnNlU3RyaW5nUEVSZWZlcmVuY2UoKQoJICBhbmQgb3RoZXIgcGFyc2luZyBmcm9tIHN0cmluZ3MgZnVuY3Rpb25zLiBFbnRpdGllcyBwcm9jZXNzaW5nCgkgIG1vZGlmaWVkIGFnYWluLCBidXQgUEVSZWYgYXJlIHN0aWxsIG5vdCBoYW5kbGVkIGNvcnJlY2x5IGJ1dAoJICB1bmxlc3MgeW91J3JlIEV2ZSBNYWxsZXIgeW91IHdvbid0IG5vdGljZSA6LSkKCSogSFRNTHBhcnNlci5jOiBsYXJnZSBjaGFuZ2VzIHRvd2FyZCByZWxpYWJpbGl0eSwgYW5kIHN3aXRjaGVkIHRvCgkgIGxvd2VyY2FzZSBpbnRlcm5hbCB0YWdzLCBYSFRNTCBpcyBsb3dlcmNhc2UsIHNvIGl0IHdpbGwgaGVscAoJICB0aGF0IG91dHB1dCBpcyBjbG9zZXIgdG8gbmV4dCB2ZXJzaW9uLgoJKiBkb2MvKiA6IHJlZ2VuZXJhdGVkIHRoZSBkb2N1bWVudGF0aW9uLCBpdCBpcyBub3cgaG9zdGVkIGF0CgkgIGh0dHA6Ly94bWxzb2Z0Lm9yZy8gKHNhbWUgYml0cyBJIGp1c3QgYm91Z2h0IHRoZSBkb21haW4gOi0pCgkKCQpGcmkgRGVjICAzIDEzOjQ2OjMyIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFNBWC5oLCBTQVguYywgbWFrZWZpbGUuYW06IGFkZGVkIFNBWC5oIG1vc3RseSB1c2VmdWwgZm9yIHRoZQoJICAgICAgICAgZG9jIGdlbmVyYXRpb24KCSogcGFyc2VyLmM6IGZpeGVkIGJ1Z3MgIzM5MDggYW5kICMzOTM3IGFuZCBhIG1lbW9yeSBsZWFrCgkgICAgICAgICBpbiB0aGUgU0FYIEFQSQoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jIG1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgYXBwZWFycyBpbiB0aGUKCSAgICAgICAgIEhUTUwgZmlsZXMKCldlZCBEZWMgIDEgMTA6Mjc6NDcgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdIEhUTUx0cmVlLmMsIGRlYnVnWE1MLmMsIGNvbmZpZ3VyZS5pbiwgeG1sLWNvbmZpZy5pbjoKCSAgICAgYWRkZWQgdGhlIHBhdGNoIGZyb20gQ2FybCBOeWdhcmQgPGNueWdhcmRAYmVsbGF0bGFudGljLm5ldD4KCSAgICAgd2hpY2ggYWxsb3cgaW1wcmVzc2l2ZSBzcGVlZCBpbXByb3ZlbWVudCBvbiBkYXRhc2V0IHdpdGgKCSAgICAgbGFyZ2UgdGV4dCBwaWVjZXMsIGJ1dCBhdCB0aGUgY29zdCBvZiBicm9rZW4gYmluYXJ5CgkgICAgIGNvbXBhdGliaWxpdHkgYW5kIHNsaWdodGx5IGJpZ2dlciBtZW1vcnkgdXNhZ2UuCgkgICAgIENvbmZpZ3VyZSB3aXRoIC0td2l0aC1idWZmZXJzIHRvIGFjdGl2YXRlIHRoZW0sIHRoZXkKCSAgICAgYXJlIHByb3RlY3RlZCB3aXRoIFhNTF9VU0VfQlVGRkVSX0NPTlRFTlQgZGVmaW5lLgoJKiBlbnRpdGllcy5bY2hdLCBwYXJzZXIuYzogYWRkZWQgeG1sQ2xlYW51cFByZWRlZmluZWRFbnRpdGllcygpLAoJICAgICBnb2FsIGlzIDAgbWVtb3J5IGxlZnQgYWxsb2NhdGVkIG9uY2UgcGFyc2VyIGlzIG5vIG1vcmUgdXNlZAoJKiB0ZXN0REFWLmMsIHRlc3RIVE1MLmMsIHRlc3RTQVguYywgdGVzdFhQYXRoLmM6IG1ha2Ugc3VyZSB3ZQoJICAgICBjYWxsIHhtbENsZWFudXBQYXJzZXIoKSBhbmQgeG1sTWVtb3J5RHVtcCgpCgpXZWQgTm92IDI0IDE5OjAwOjA2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXSB4bWxJTy5bY2hdIHBhcnNlci5jIHZhbGlkLmM6IGNvZGUgY2xlYW51cCB3aXRoIC1wZWRhbnRpYwoJKiBwYXJzZXIuW2NoXSBlbmNvZGluZy5bY2hdOiBhZGRlZCBtZW1vcnkgY2xlYW51cCByb3V0aW5lcwoJKiBwYXJzZXIuYzogY2xvc2luZyBidWcgIzM3ODgKCSogZG9jLyo6IHJlYnVpbHQgdGhlIGRvYwoKVHVlIE5vdiAyMyAxMToyMzo1NSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF06IGNsb3NpbmcgYnVnIDM3NDgsIGFkZGVkIHhtbE5ld0RvY1Jhd05vZGUoKSwgCgkgICAgICAgICAgICAgeG1sTmV3VGV4dENoaWxkKCkgYW5kIHhtbFNldENvbXByZXNzTW9kZSgpIGJlaGF2aW91ci4KCSogdGVzdGVyLmM6IGFkZGVkIC0tY29tcHJlc3Mgb3B0aW9uCgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2N1bWVudGF0aW9uCgpGcmkgTm92IDE5IDE4OjQxOjI4IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogYnVnZml4aW5nLCB0aGUgZGFtbiB0aGluZyBNVVNUIG5vdCBjcmFzaCBldmVuCgkgICAgICAgICAgICAgICAgaWYgZ2l2ZW4gL3Byb2Mva2NvcmUgYXMgaW5wdXQgIQoJKiBkb2MveG1sLmh0bWwgZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3VtZW50YXRpb24KClRodSBOb3YgMTggMTQ6NTc6MTggQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IEZpeGVkIHNvbWUgd3JvbmdseSBzcGFjZSBjb2xsYXBzaW5nIGNvZGUgZHVlIHRvCgkgICAgICAgICAgICBhIG1pc3JlYWRpbmcgb2YgdGhlIHNwZWMuCgkqIHJlc3VsdC8qOiBmaXhlZCB0aGUgb3V0cHV0IGFjY29yZGluZ2x5CSAgICAKCldlZCBOb3YgMTcgMTg6Mjg6MDYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW5jb2RpbmcuYzogYnVnIGZpeCBhbmQgdHlwb3MKCSogeG1sSU8uW2NoXSBwYXJzZXIuYzogZmlyc3QgYml0cyB0b3dhcmQgcmVhbCBwcm9ncmVzc2l2ZSBwYXJzaW5nCgkqIHBhcnNlci5jOiBhZGRlZCBhdHRyaWJ1dGUgbm9ybWFsaXphdGlvbiBjbG9zaW5nIGJ1ZyAjMzU5NwoJKiB0ZXN0L2F0dCogcmVzdWx0L2F0dCogU0FYcmVzdWx0L2F0dCo6IHRlc3RjYXNlIGZvciBhdHRyaWJ1dGUKCSAgICBub3JtYWxpemF0aW9uCgpNb24gTm92IDE1IDE4OjUwOjU2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogY2xvc2luZyBidWcgIzMxNjMgYnkgYWRkaW5nIGV4dHJhIGZsYWdzIGZvciB0aGUKCSAgICAgICAgICAgICAgICBjYyBjb21waWxlciBvbiBIUC1VWAoKRnJpIE5vdiAxMiAxNzo0MToyMCBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB2YWxpZC5bY2hdIDogcmVtb3ZlZCBhIHR5cG8gYW5kIGFuIGVudW1lcmF0ZWQgdHlwZSBidWcgaW4gdGhlCgkgICAgICAgICAgICAgICB4bWxBZGRFbGVtZW50RGVjbCgpIGZ1bmN0aW9uCgkqIHRyZWUuYyA6IEkgY2hhbmdlZCB4bWxTZXRQcm9wKCkgYW5kIHhtbE5ld1Byb3AoKSB0byBkbyB0aGUKCSAgICBjYWxsIHRvIHhtbEVuY29kZUVudGl0aWVzUmVlbnRyYW50KCkgc28gdGhhdCB0aGUgZnVuY3Rpb25zIAoJICAgIE5ldywgU2V0IGFuZCBHZXQgYXJlIGF0IHRoZSBzYW1lIGxldmVsLgoJKiBwYXJzZXIuYyBIVE1McGFyc2VyLmM6IGV4dHJhIG1lbW9yeSBhbGxvY2F0aW9uIGJ1ZyBmb3IKCSAgICBhdHRyaWJ1dGVzIGRldGVjdGVkIGJ5IHNvbWVvbmUgdXNpbmcgbGlieG1sIGluIGVtYmVkZGVkIHN5c3RlbXMgOi0pCgpUaHUgT2N0IDI4IDE3OjQ5OjI2IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxtZW1vcnkuaDogdHVybmVkIG9mZiBtZW0gZGVidWcgOi1cCgpNb24gT2N0IDI1IDEyOjEzOjI1IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogY2xvc2VkIGJ1ZyAjMjc4NCBhIG9uZSBsaW5lIGZpeCwgYnV0IHdvcnRoIHB1c2hpbmcKCSAgICAgICAgICAgIGEgbmV3IHJlbGVhc2Ugb3V0CiAgICAgICAgKiBIVE1McGFyc2VyLmM6IGZpeGVkIGF1dG8tY2xvc2UgYnVncyBvbiBsaXN0IGl0ZW1zLCB6ZXJvaW5nCgkgICAgICAgICAgICBzb21lIHN0cnVjdHVyZXMsIGNvbW1lbnRzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlCgkJICAgIG1haW4gZWxlbWVudCwgYW5kIG90aGVyIG5hc3R5bmVzcwoJKiBIVE1MdHJlZS5jIHRyZWUuYzogYWNjb21vZGF0ZSB0aGUgZXh0ZW5kZWQgSFRNTCBzdXBwb3J0ZWQJICAgIAoJKiBjb25maWd1cmUuaW46IHB1c2hpbmcgMS43LjQKCSogdGVzdC9lbnQ4IGFuZCByZWxhdGVkIG91dHB1dHMgOiBhZGRlZCBhIG5ldyB0ZXN0IGZvciBidWcgIzI3ODQKCSogdGVzdC9IVE1ML3dpcmVkLmh0bWwgYW5kIHJlbGF0ZWQgb3V0cHV0OiBhIG5hc3R5IEhUTUwgZXhhbXBsZQoJKiBNYWtlZmlsZS5hbTogaW1wcm92ZWQgdGhlIHRlc3Qgc2NyaXB0cwoJKiBkb2NzLyogOiByZXJhbiB0aGUgZG9jdW1lbnRhdGlvbiBleHRyYWN0b3IsIHVwZGF0ZWQgeG1sLmh0bWwKClRodSBPY3QgMTQgMTA6Mjk6NTYgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYywgSFRNTHRyZWUuYywgdHJlZS5oOiBjb21wbGV0ZWx5IHJldmFtcGVkIHRoZQoJICAgICBIVE1McGFyc2VyIGFuZCBkZWJ1Z2dlZCB0aGUgSFRNTCByZWxhdGVkIGNvZGUuIEhUTUwgZG9jdW1lbnRzCgkgICAgIG5vdyBoYXZlIHRoZWlyIG93biB0eXBlCgkqIGVudGl0aWVzLmM6IGRvIG5vdCBkdW1wICZhcG9zOyBmb3IgSFRNTCBvdXRwdXQKCSogeG1sbWVtb3J5LmM6IGltcHJvdmVtZW50LCBicmVha3BvaW50IG1lY2hhbmlzbQoJKiB0ZXN0SFRNTC5jOiBhZGRlZCAtLXNheCAtLXJlcGVhdCAuLi4KCSogTWFrZWZpbGUuYW06IGltcHJvdmVkIHRoZSBIVE1MIHRlc3RzCgkqIHZhbGlkLltjaF06IGFkZGVkIHhtbFZhbGlkR2V0VmFsaWRFbGVtZW50cyBhbmQKCSAgICAgICAgICAgICAgeG1sVmFsaWRHZXRQb3RlbnRpYWxDaGlsZHJlbgoJKiB0ZXN0ZXIuYzogYWRkZWQgLS1pbnNlcnQgdG8gdGVzdCB0aGUgMiBuZXcgZnVuY3Rpb25zCgkqIHRlc3QvLyogcmVzdWx0Ly8qIFNBWHJlc3VsdC8vKiA6IHJlZ3Jlc3Npb24gdGVzdCBjbGVhbnVwCgkgICAgICAgICAgICAgICBhbmQgZXh0ZW5zaW9uLgoJKiBkb2MvaHRtbCA6IGFkZGVkIGRvYyBmb3IgbmV3IG1vZHVsZXMgZ25vbWUteG1sLXhtbG1lbW9yeS5odG1sIGFuZAoJICAgICAgICAgICAgIGdub21lLXhtbC1uYW5vaHR0cC5odG1sCgpNb24gT2N0IDExIDE0OjMxOjU4IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIHByb2JsZW1zIHdpdGggc29tZSBhdXRvY2xvc2UgdGFncwoJKiB0cmVlLmM6IGZpeGVkIFhNTCBvdXRwdXQgcHJvYmxlbXMuIAoJKiByZXN1bHQvKiBTQVhyZXN1bHQvKjogdXBkYXRlIG9mIHRoZSB0ZXN0cyBvdXRwdXQKClNhdCBPY3QgIDkgMTE6MDI6NTcgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtOiBBcnR1cm8gcGF0Y2ggZm9yIHhtbENvbmYuc2ggdmVyc2lvbiBpbmZvCgkqIHBhcnNlci5jOiBUaW0gSm9zbGluZyBwYXRjaCBmb3Igc2luZ2xlIHF1b3RlZCBpdGVtcwoJKiB0ZXN0ZXIuYzogVGltIEpvc2xpbmcgcGF0Y2ggZm9yIHRlc3RlciBvcHRpb25zIHVzYWdlCgkqIHRyZWUuaDogaW5kZW50IGNsZWFudXAKCkZyaSBPY3QgIDggMTY6MzU6MzcgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyBwYXJzZXIuaCA6IEZpeGVkIHByb2JsZW1zIHdpdGggSFRNTCBwYXJzaW5nCgkgICAgcmVwb3J0ZWQgYnkgS3Jpc3RpYW4gSG9nc2JlcmcgS3Jpc3RlbnNlbiA8aG9nc2JlcmdAZGFpbWkuYXUuZGs+CgpGcmkgT2N0ICA4IDExOjM3OjExIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmMgOiBSYXBoIHBhdGNoIGZvciBpbml0aWFsaXphdGlvbiBvZiBDT1JCQSBmaWVsZHMKCSogcGFyc2VyLmMsIHhwYXRoLmMsIC4uLjogbW9kaWZpY2F0aW9uIG9mIGRvYyBjb21tZW50cwoJKiB4cGF0aC5jIDogYWxsb3cgc3BhY2VzIGluIHhwYXRoIGV4cHJlc3Npb25zCgpNb24gU2VwIDI3IDEwOjE2OjQzIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxtZW1vcnkuaDogdHVybmluZyBvZmYgbWVtb3J5IGRlYnVnIDotKAoKU3VuIFNlcCAyNiAxMzoxNjo1NCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLltjaF0gOiBhZGRlZCB4bWxTQVhVc2VyUGFyc2VGaWxlKCkgYW5kIHhtbFNBWFVzZXJQYXJzZU1lbW9yeSgpCgkgICAgICAgICAgICAgICAgYmV0dGVyIFNBWCBpbnRlcmZhY2VzLgoJKiB0ZXN0U0FYLmM6IHVzZXMgdGhlIG5ldyBTQVggcm91dGluZSwgYXZvaWQgZmV0Y2hpbmcgYW55IHJlbW90ZQoJICAgICAgICAgICAgIGVudGl0eS4KCSogY29uZmlndXJlLmluOiAxLjcuMgoKRnJpIFNlcCAyNCAxNjowMTowMSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbGlieG1sLnNwZWMuaW46IGZpeGVkIHRoZSBVUkwKCSogZG9jL3htbC5odG1sOiBpbXByb3ZlZCB0aGUgZG9jdW1lbnRhdGlvbiBmcm9udC1lbmQKCkZyaSBTZXAgMjQgMDE6MDY6MzYgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9odHRwLmM6IGNvbmRpdGlvbm5lZCByZWZlcmVuY2VzIHRvIHNucHJpbnRmIHdpdGggSEFWRV9TTlBSSU5URgoKRnJpIFNlcCAyNCAwMDoxNTo1OCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbGlieG1sLnNwZWMuaW46IGZpeGVkIHRoZSBhbHBoYSBjb21waWxlIHByb2JsZW0KCSogcGFyc2VyLltjaF06IGNoYW5nZWQgZXJybm8gdG8gZXJyTm8gaW4gdGhlIHBhcnNlciBjb250ZXh0IDotKAoJKiAqLltjaF06IGNoYW5nZWQgQ0hBUiB0byB4bWxDaGFyIHRvIGF2b2lkIHByb2JsZW0gb24gV0lOMzIKCSogZG9jL3htbC5odG1sOiBjaGFuZ2VkIENIQVIgdG8geG1sQ2hhcgoJKiBkb2MvaHRtbC8qOiByZWNvbXBpbGVkIHRoZSBkb2N1bWVudGF0aW9uCgkqIGNvbmZpZ3VyZS5pbjogMS43LjEKCldlZCBTZXAgMjIgMTE6NDA6MzEgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5oOiBtb2RpZmllZCB0aGUgcGFyc2VyIGNvbnRleHQgc3RydWN0IHRvIHJlZ2FpbiAxLjQuMAoJICAgICAgICAgICAgYmluYXJ5IGNvbXBhdGliaWxpdHkKCSogcGFyc2VyLmMsIHhtbC1lcnJvci5oOiBhZGRlZCBlcnJubyBvdCB0ZWggY29udGV4dCBhbmQgZGVmaW5lZAoJICAgICAgICAgICAgYSBzZXQgb2YgZXJyb3JzIHZhbHVlcyB3aXRoIHVwZGF0ZSBvZiBlcnJubwoJKiBuYW5vaHR0cC5bY2hdOiBtaW5pbWFsaXN0IEhUVFAgZnJvbnQtZW5kIGZvciBmZXRjaGluZyByZW1vdGUKCSAgICAgICAgICAgIERURHMgYW5kIGVudGl0aWVzCgkqICouaCwgKi5jOiBjb21wbGV0ZSBjbGVhbnVwIG9mIHRoZSB1c2Ugb2YgY29uZmlnLmggYW5kIGluY2x1ZGUKCSAgICAgICAgICAgIHByb3RlY3Rpb24gZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHNldHVwLgoJKiBvdmVyYWxsbCBkZWJ1Z2dpbmcsIG1haW50ZW5hbmNlIGFuZCBidWctZml4aW5nIG9uIGFsbCBtb2R1bGVzCgkqIHVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24KCSogcmVhZHkgZm9yIDEuNy4wCgpXZWQgU2VwICA4IDIyOjQ2OjE0IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgOiBjbGVhbnVwCgkqIFNBWC5jIHZhbGlkLmMgdmFsaWQuaDogYWRkZWQgSUQvSURSRUYgY2hlY2tpbmcKCSogdHJlZS5jIHRyZWUuaDogZXh0ZW5kZWQgZG9jIHN0cnVjdHVyZSBmb3IgcmVmcwoJKiBjb25maWd1cmUuaW46IDEuNi4yCgkqIHBhcnNlci5jOiBwYXRjaGVkIGJ1ZyBpbiBTQVggdXNlciBhcmcgY2FsbAoJKiBwYXJzZXJJbnRlcm5hbHMuaDogcGF0Y2hlZCBtaXNzaW5nIGNsb3NlIGluIEMrKyB3cmFwcGluZwoJKiB0ZXN0WFBhdGguYyB4cGF0aC5jIHhwYXRoLmg6IHByZXBhcmVkIGZvciBleHRlbnNpYmlsaXR5LAoJICBlc3BlY2lhbGx5IHVwY29taW5nIFhQb2ludGVyIGltcGxlbWVudGF0aW9uLgoJKiBkb2MveG1sLmh0bWw6IGF1Z21lbnRlZCwgdHlwbwoKU2F0IFNlcCAgNCAyMjo0ODowNSBDRVNUIDE5OTkgVGltdXIgQmFrZXlldiA8bWNAYmF0LnJ1PgoKCSogZG9jL01ha2VmaWxlLmFtOiByZXBsYWNlZCAiaW5zdGFsbCAtZCAiIHdpdGggIm1raW5zdGFsbGRpcnMiIC0KCW5vdCBhbGwgaW52b2NhdGlvbnMgb2YgaW5zdGFsbCB1bmRlcnN0YW5kIC1kLgoKU2F0IFNlcCAgNCAyMjoyMDowNyBDRVNUIDE5OTkgVGltdXIgQmFrZXlldiA8bWNAYmF0LnJ1PgoKCSogTWFrZWZpbGUuYW06IHByZXBlbmQgYWxsIHRoZSB0ZXN0KiBjYWxscyB3aXRoICQodG9wX2J1aWxkZGlyKSAtCgl0byBtYWtlICdjaGVjaycgd29ya3MsIHdoZW4gYnVpbGRkaXIgIT0gc3JjZGlyLgoKU2F0IFNlcCAgNCAyMDoyNTo0NiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sIDogdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbgoKRnJpIFNlcCAgMyAwMDowMTowOCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sbWVtb3J5LltjaF0gTWFrZWZpbGUuYW0gIDphZGRlZCBhIG1lbW9yeSB3cmFwcGVyIHRvIGNoYXNlCgkgICAgICBub3QgZGVhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrcwoJKiAqLmMgOiByZXBsYWNlcyBhbGwgY2FsbHMgdG8gbWFsbG9jKCkgZnJlZSgpIGFuZCByZWFsbG9jKCkgdG8KCSAgICAgIHRoZSB3cmFwcGVyIGZ1bmN0aW9ucy9tYWNyb3MKCSogdHJlZS5jIDogcmVtb3ZlZCBtZW1vcnkgbGVha3MgZHVlcyB0byBjYWxsaW5nIHhtbEZyZWVOb2RlKCkKCSAgICAgIGluc3RlYWQgb2YgeG1sRnJlZU5vZGVMaXN0KCkKCldlZCBTZXAgIDEgMTQ6MTU6MDkgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogY29ycmVjdGVkIGEgc3R1cGlkIGJ1ZyBsZWFkaW5nIHRvIGNvcmUgZHVtcCBhdAoJICAgICAgICAgICAgICAgIHRyZWUgZGVhbGxvY2F0aW9uLiBSZW1vdmVkIHdhcm5pbmdzIGluZGljYXRlZCBieQoJCQlTdGVwaGFuZS5Db252ZXJzeUBscmkuZnIKCSogZW50aXRpZXMuYzogRml4ZXMgWWV0IEFub3RoZXIgU3R1cGlkIEJ1ZywgZW50aXRpZXMgd2VyZSBub3QKCSAgICAgICAgICAgICAgbG9va2VkIGZvciBpbiB0aGUgZXh0ZXJuYWwgc3Vic2V0CgpNb24gQXVnIDMwIDEzOjIyOjI2IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYyB2YWxpZC5bY2hdIHhwYXRoLmM6IHBhdGNoZWQgY29tcGlsYXRpb24gd2FybmluZ3MgcmVwb3J0ZWQKCSAgb24gU0dJIGJ5IFN0ZXBoYW5lLkNvbnZlcnN5QGxyaS5mcgoKU3VuIEF1ZyAyOSAyMjoyNzoyOSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWxsIC5oIDogY2hhbmdlZCB0aGUgcHJvdG90eXBlIGRlY2xhcmF0aW9uIGluZGVudCBhcyBpbiBndGsKCSogbW9zdCAuYyA6IHdvcmtpbmcgb24gcmVkdWNpbmcgdGhlIFRPRE9zIGluIHRoZSBjb2RlCgkqIG1vc3QgLmMgOiBjbGVhbnVwIHRob3VnaCAtcGVkYW50aWMgYW5kIEluc3VyZSsrCgkqIGltcHJvdmVtZW50cyBvbiB2YWxpZGF0aW9uIElEIGNoZWNraW5ncy4KCSogdHJlZS5bY2hdIFNBWC5jOiBhZGRlZCBzdXBwb3J0IGZvciBuYW1lc3BhY2Ugb24gYXR0cmlidXRlcyAjMjAyMgoJKiB4bWwtY29uZmlnLmluOiBjbG9zZWQgIzE4MTAKCk1vbiBBdWcgMTYgMDM6Mjc6MzggQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuaCwgdmFsaWQuYywgdmFsaWQuaDogbW9yZSB3b3JrIG9uIHZhbGlkaXR5LCBJRHMKCSogeHBhdGguYzogYWRkZWQvZml4ZWQgY29tcGFyaWRvbiBhbmQgZXF1bGl0eSwgYWRkZWQgYSBuZXcgaXNpbmYKCSAgZGVmaW5pdGlvbiBmb3IgQUlYCgpTdW4gQXVnIDE1IDIxOjE1OjE3IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBNYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogY29ycmVjdGVkIG1pc3NpbmcgeG1sQ29uZi5zaCBpbgoJICB0aGUgZGlzdHJpYnV0aW9uIGR1ZSB0byBhIGN1dCduIHBhc3RlIGVycm9yIGF0IGxhc3QgY29tbWl0CgpUdWUgQXVnIDEwIDIwOjI4OjA5IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IHVwZ3JhZGVkIHRvIHZlcnNpb24gMS40LjAKCSogdmFsaWQuW2NoXSwgU0FYLmMsIHBhcnNlci5bY2hdIHBhcnNlckludGVybmFscy5oIC4uLgoJICBCaWcgdXBkYXRlLCBhZGRlZCBhIGxhcmdlIHBhcnQgb2YgdGhlIHZhbGlkYXRpb24gcHJvY2VzcywKCSAgaXQgc2hvdWxkIGJlIHVzYWJsZSwgYnV0IHNvbWUgcGFydHMgYXJlIG1pc3NpbmcKCSogeHBhdGguYzogaW1wcm92ZWQgdGhlIGltcGxlbWVudGF0aW9uIHcuci50LiByb290LgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgbW9yZSB0ZXN0cwoJKiB0ZXN0IGFuZCByZXN1bHQgdHJlZXM6IGFkZGVkIGEgbG90IG9mIHRlc3RzCgkqIGxpYnhtbC5zcGVjLmluOiBleHBvcnQgbGlieG1sLnNvLjAgYW5kIGxpYnhtbC5zby4xCgpUdWUgQXVnIDEwIDExOjMzOjQxIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBBZGRlZCBhbiBIQUNLSU5HIGZpbGUKClR1ZSBKdWwgMjcgMjE6NDM6MDAgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCiAgICAgICAgKiB4cGF0aC5bY2hdIDogaW1wcm92ZW1lbnRzIGFuZCBkZWJ1ZyBvZiB0aGUgWFBhdGggaW1wbGVtZW50YXRpb24KICAgICAgICAqIHBhcnNlci5jLCBIVE1McGFyc2VyLmMgOiBtb2RpZmllZCB0aGUgcGFyc2VycyB0byBiZSBwcm9ncmVzc2l2ZQoJKiB0cmVlLltjaF0gOiBleHRlbmRlZCB0aGUgQnVmZmVyIHByb21pdGl2ZXMKCSogeG1sSU8uW2NoXSA6IGFkZGVkIGJhc2ljIEkvTyByb3V0aW5lcyBwcm92aWRpbmcgcHJvZ3Jlc3NpdmUKCSAgcGFyc2luZyBhbmQgcmVhZHkgZm9yIEkxOE4gY29udmVyc2lvbiBwbHVnaW5zCgkqIFNBWHJlc3VsdC8qIDogdGhlIFNBWCBjYWxsYmFjayBzZXF1ZW5jZSBtYXliZSBzbGlnaHRseSBkaWZmZXJlbnQKCSAgbm93CgkqIHRlc3QqLmMgOiBpbXByb3ZlZC91cGRhdGVkIHRoZSB0ZXN0cyBwcm9ncmFtcwoJKiBkb2MvKiA6IHJlY29tcGlsZWQgdGhlIGRvY3MuCgoxOTk5LTA3LTI2ICBNaWNoYWVsIE1lZWtzICA8bWljaGFlbEBlZGVucHJvamVjdC5vcmc+CgoJKiB0cmVlLmg6IEFkZCBjb25zdCB0byAnY29udGVudCcgaW4geG1sTmV3RG9jTm9kZSwgeG1sTmV3Q2hpbGQKCgkqIHRyZWUuYzogRGl0dG8uCgpUaHUgSnVsIDE1IDE2OjE3OjE2IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IHVwZ3JhZGVkIHRvIHZlcnNpb24gMS40LjAKCSogeHBhdGguYywgeHBhdGguaCwgdGVzdFhQYXRoLmMsIG1ha2VmaWxlLmFtOiBhZGRlZCBjb2RlIGZvciB0aGUgWFBhdGgKCSAgZHJhZnQgZnJvbSBXM0MuIFdpbGwgYmUgdXNlZCBieSBYUG9pbnRlciwgWGxpbmssIFhTTCwgYW5kIHBvc3NpYmx5CgkgIFhNTCBxdWVyeSBsYW5ndWFnZSwgc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoIGZvciBtb3JlIGRldGFpbHMuCgkqIHBhcnNlci5jLCBwYXJzZXIuaDogYWRkZWQgQ0hBUiogcmVsYXRlZCBzdHJpbmcgZnVuY3Rpb25zIGZvciBYUGF0aAoJKiBIVE1McGFyc2VyLltjaF0sIEhUTUx0cmVlLmM6IGEgYml0IG9mIGNsZWFudXAgb24gZW50aXRpZXMuCgkqIGRvYy9nbm9tZS14bWwuc2dtbCwgZG9jL2h0bWwvKiA6IGFkZGVkIFhQYXRoIGFuZCBIVE1MIGRvY3VtZW50YXRpb24sCgkgIHJlYnVpbGQgdGhlIGRvY3MuCgkqIE1ha2VmaWxlLmFtLCB0ZXN0L1hQYXRoLyosIHJlc3VsdC9YUGF0aC8qOiBhZGRlZCBhbiBYUGF0aHRlc3RzIHRhcmdldAoJICBhbmQgcmVncmVzc2lvbiB0ZXN0aW5nIGNhcGFiaWxpdGllcyBmb3IgWFBhdGguCgpNb24gSnVsIDEyIDEyOjM2OjM5IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgSFRNTHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gSm9obiBFbGxzb24gPGVsbHNvbkBsdWNlbnQuY29tPgoJICBjbG9zaW5nIGJ1ZyAjMTY0NgoKTW9uIEp1bCAxMiAxMTowNDo0NCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTWFrZWZpbGUuYW0sIGV4YW1wbGUvTWFrZWZpbGUuYW06IGNsb3NlZCBidWcgIzE2ODMKClN1biBKdWwgMTEgMTg6MTY6MzQgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGV4YW1wbGUvTWFrZWZpbGUuYW0sIGNvbmZpZ3VyZS5pbjogYWRkZWQgdGhlIG1ha2VmaWxlIGZvciB0aGUKCSAgZ2pvYnJlYWQgZXhhbXBsZQoKU2F0IEp1bCAxMCAxNDoxOToxMSBDRVNUIDE5OTkgVG9tYXN6IEuzb2N6a28gIDxrbG9jemVrQHBsZC5vcmcucGw+CgogICAgICAgICogZG9jL01ha2VmaWxlLmFtOgogICAgICAgIC0gZml4IHdoaWNoIGFsbG93ICJtYWtlIGluc3RhbGwgREVTVERJUj08L2luc3RhbGwvcHJlZml4PiIuCgpGcmkgSnVsICA5IDEyOjEwOjI0IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgcGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBKb2huIEVsbHNvbiA8ZWxsc29uQGx1Y2VudC5jb20+CgkgIHdoaWNoIGZpeGVkIGEgcHJvYmxlbSBvbiB0aGUgZmlsZSByZWFkaW5nLWNvZGUuCgpXZWQgSnVsICA3IDA5OjI4OjQzIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLltjaF0sIEhUTUx0cmVlLltjaF06IG1vcmUgd29yayBmb3IgSFRNTCBwYXJzaW5nIGFuZAoJICBvdXRwdXQuCiAgICAgICAgKiBNYWtlZmlsZS5hbSwgdGVzdC9IVE1MLyosIHJlc3VsdC9IVE1MLyo6IGFkZGVkIEhUTUx0ZXN0cyB0YXJnZXRlc3RIVE1MdAoKV2VkIEp1bCAgNyAwMDoyNTo0MiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmggOiBPb3BzIHJlbW92ZWQgdGhlIGJpbmFyeSBjb21wYXRpYmlsaXR5IHByb2JsZW0KCSogSFRNTHBhcnNlci5bY2hdLCBIVE1MdHJlZS5oIDogTW9yZSB3b3JrIG9uIHRoZSBIVE1MIHBhcnNlL2R1bXAKCSogcGFyc2VyLmMsIEhUTUxwYXJzZXIuYzogYXBwbGllZCBwYXRjaGVzIGZvciByZWFkaW5nIGZyb20gc3RkaW4KCk1vbiBKdWwgIDUgMTg6NDU6MzEgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBlbnRpdGllcy5jLCB2YWxpZC5jOiBjbGVhbnVwIGJ1ZyAjMTU5MQoJKiBjb25maWd1cmUuaW46IGNsZWFudXAgYnVnICMxNTkyCgkqIEhUTUxwYXJzZXIuW2NoXSwgdGVzdEhUTUwuYzogc3RhcnRlZCBhZGRpbmcgYW4gSFRNTCBwYXJzZXIgdXNpbmcKCSAgdGhlIHNhbWUgdHJlZSBiYWNrLWVuZC4gSGVuY2UgZ2RvbWUgd2lsbCBiZSBhdmFpbGFibGUgZm9yIGl0LgoJKiBkb2MvTWFrZWZpbGUuYW06IGNsb3NlIGJ1ZyAjNjE3CgpTYXQgSnVuIDI2IDIzOjM2OjM4IEVEVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBhbGxvY3RhdGUgYSBwZXIgcGFyc2VyIGNvbnRleHQgU0FYIGludGVyZmFjZSBibG9jawoKVHVlIEp1biAyMiAyMzo0NjozMiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcmVsZWFzZWQgMS4zLjAgd2l0aCB4bWxFbmNvZGVFbnRpdGllcyByZXN0b3Jpbmcgb2xkIGJlaGF2aW91cgoJICBhbmQgeG1sRW5jb2RlRW50aXRpZXNSZWVudHJhbnQgd2l0aCB0aGUgY29ycmVjdCBvbmUgOi1cCgpNb24gSnVuIDIxIDE0OjA3OjUzIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb21taXQgb2YgbXkgaW50ZXJuYWwgWE1MIGJhc2UgY2hhbmdlcywgcXVpdGUgYSBsb3Qgb2YKCSAgY2hhbmdlcywgY2xlYW51cHMsIGJldHRlciBlbnRpdGllcyBzdXBwb3J0LCBmcmFtZXdvcmsgZm9yCgkgIG5ldyBJL08gYW5kIGNoYXJzZXQgZGV0ZWN0aW9uIGFuZCBoYW5kbGluZwoJKiBGaXhlZCB0aGUgY29uZmlndXJlL01ha2VmaWxlIHN0dWZmIHRvIGdlbmVyYXRlIHNoYXJlZCBsaWJzCgkgIHdpdGggdGhlIHByb3BlciB2ZXJzaW9uIGluZm8sIHNvIHdlIGp1bXBlZCBvbiByZXYgZnJvbQoJICAwLjAuMCB0byAxLjIuMCAhIFRoZSBiaW5hcnkgaW50ZXJmYWNlcyBoYXZlIGJlZW4gYnJva2VuLAoJICB4bWxFbmNvZGVFbnRpdGllcygpIHJlc3VsdCBuZWVkIHRvIGJlIGZyZWVkIG5vdywgYW5kIGEgc3RyaW5nCgkgIHhtbFBhcnNlclZlcnNpb24gcHJvdmlkZSB0aGUgY3VycmVudCBsaWJyYXJ5IHZlcnNpb24uCgpUdWUgSnVuIDE1IDE0OjI0OjE5IDE5OTkgIFJhcGggTGV2aWVuICA8cmFwaEBhY20ub3JnPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgYnVmZmVyIG92ZXJydW4gZm9yIHdoZW4geW91IGhhdmUgYSB2ZXJ5IGxvbmcKCWF0dHJpYnV0ZSB3aXRoIG5vIGVudGl0aWVzIGluIGl0LgoKTW9uIEp1biAxNCAwMDoxNzo1MCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWRkZWQgZXhhbXBsZSBkaXJlY3RvcnkKCSogYWRkZWQgZXhhbXBsZS9nam9icy54bWwgZ2pvYnJlYWQuYywgc3RpbGwgbmVlZCBhIE1ha2VmaWxlLmluCgpXZWQgSnVuICAyIDE5OjQwOjU4IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBSZWxlYXNlIG9mIGxpYnhtbC0xLjEsIG5lYXJseSBldmVyeXRoaW5nIGhhcyBiZWVuIHRvdWNoZWQgZm9yCgkgIHRoaXMuCgkqIEFkZGVkIG1vcmUgcmVncmVzc2lvbiB0ZXN0cwoJKiBVcGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uCgpTYXQgTWF5IDI5IDEzOjM0OjQyIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF06IHVuaWZpZWQgdGhlIFhNTF9OT19DT1JCQSBkZWZpbmVzLgoJKiBwYXJzZXIuYyBlbmNvZGluZy5bY2hdOiBzdGFydGVkIHBsdWdnaW5nIGluIGNoYXIgZW5jb2RpbmcgZGV0ZWN0aW9uCgpGcmkgTWF5IDI4IDIyOjU4OjQyIEVEVCAxOTk5IE1hbmlzaCBWYWNoaGFyYWphbmkgPG12YWNoaGFyQHZnZXIucnV0Z2Vycy5lZHU+CgoJKiB0cmVlLmM6ICh4bWxTYXZlRmlsZSkgLSByZW1vdmVkIGRvdWJsZSBjYWxsIG9mIHhtbENvbnRlbnREdW1wLiAgCgkgIEFsc28gZnJlZWQgYWxsb2NhdGVkIGJ1ZmZlci4KCldlZCBBcHIgMjEgMjI6MDc6MzUgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCSogcGFyc2VyLltjaF0gdHJlZS5bY2hdIGVudGl0aWVzLltjaF0gdmFsaWQuW2NoXSA6IHJlbW92ZWQgdGhlIG1haW4KCSAgcmVlbnRyYW5jeSBwcm9ibGVtIGF0IHByaW50aW5nLiBPbmUgaXMgbGVmdCBpbiBlbnRpdGllcy5jLCB0bwoJICByZW1vdmUgQVNBUAoJKiB0ZXN0U0FYLmMgOiBhZGRlZCBhIHRlc3QgZXhhbXBsZSBzaG93aW5nIHRoZSB1c2Ugb2YgdGhlIFNBWCAKCSAgaW50ZXJmYWNlIGlmIG9uZSBkb2Vzbid0IHdhbnQgdG8gYnVpbGQgdGhlIERPTSB0cmVlLgoJKiBodG1sL2dub21lLXhtbC0qLmh0bWwgaHRtbC9pbmRleC5zZ21sOiByZWdlbmVyYXRlZCB0aGUgZG9jdW1lbnRhdGlvbgoKTW9uIEFwciAgNSAxNDoxNDo0MCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLltjaF0gdHJlZS5bY2hdIFNBWC5jLCBwYXJzZXJJbnRlcm5hbHMuaCB2YWxpZC5bY2hdOgoJICBsYXJnZSByZXZhbXBpbmcgb2YgdGhlIHBhcnNlciB0byB1c2UgU0FYIGNhbGxiYWNrcwoJICBodHRwOi8vd3d3Lm1lZ2dpbnNvbi5jb20vU0FYLyAob3IgYXQgbGVhc3QgYSBDIGxpa2UgaW50ZXJmYWNlCgkgIGEgbGEgRXhwYXQpLiBJdCdzIG5vdyBwb3NzaWJsZSB0byBzZXQgdXAgeW91ciBvd24gY2FsbGJhY2tzCgkgIGFuZCB0aGUgcGFyc2VyIHdpbGwgbm90IGJ1aWxkIGEgRE9NIHRyZWUuCgkqIHRlc3QvKiByZXN1bHQvKjogdXBkYXRlZCB0aGUgdGVzdCBzdWl0ZSwgSSBmaW5hbGx5IHJlbW92ZWQKCSAgdGhlIG9sZCBOYW1lc3BhY2UgZHJhZnQgc3VwcG9ydCAoUEkgYmFzZWQpLgoKRnJpIEFwciAgMiAxNzo1NzozMiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTWFrZWZpbGUuYW06IGFkZGVkIHRlc3QgcmVzdWx0IHRvIEVYVFJBX0RJU1QgZm9yIG1ha2UgdGVzdHMKCldlZCBNYXIgMjQgMjE6Mzc6MDIgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIHBhcnNlckludGVybmFscy5oOiBtb3ZlZCB0aGUgY2hhcnMgbWFjcm8gZGVmaW5pdGlvbnMKCSAgdG8gcGFyc2VySW50ZXJuYWxzLmgKCSogcGFyc2VyLmMsIGVycm9yLmM6IGFwcGxpZWQgcGF0Y2hlcyBmcm9tICJLbnV0IMVrZXNzb24iCgkgIDxrYUBzMi5jaGFsbWVycy5zZT4gZm9yIGNsZWFuIGNvbXBpbGF0aW9uIHVuZGVyIE1TVkMgNiA6LW8KClR1ZSBNYXIgMjMgMTE6MTA6MTUgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sLWNvbmZpZy5pbiA6IGFwcGxpZWQgcGF0Y2ggdG8gbWFrZSAtLXZlcnNpb24gd29yawoKMTk5OS0wMy0wNSAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KCgkqIE1ha2VmaWxlLmFtIChjaGVjay1sb2NhbCk6IEFsaWFzIGZvciBgdGVzdHMnIHRhcmdldC4gIFRoaXMgd2lsbAoJY2F1c2UgYG1ha2UgY2hlY2snIHRvIGRvIHRoZSByaWdodCB0aGluZy4KCSh0ZXN0cyk6IERvbid0IHJ1biB0ZXN0cyBpbiBzcmNkaXIuICBBbHNvLCByZXBsYWNlZCBjYWxscyB0bwoJYmFzZW5hbWUgd2l0aCBhIGBzZWQnICJlcXVpdmFsZW50Ii4KCkZyaSBNYXIgIDUgMDc6MjM6NTMgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogUmVuYW1lZCBlcnJvci5oIHRvIHhtbC1lcnJvci5oLCBjb3JyZWN0ZWQgTWFrZWZpbGUuYW0gdG8gbGlzdAoJICBpdCBpbiB0aGUgaGVhZGVyIGFuZCBub3QgdGhlIHNvdXJjZXMsIHVwZGF0ZWQgdGhlIGRvYy4KCSAgVGhhbmtzIHRvIFRpbSBNb29uZXkgPG1vb25leUBkb2diZXJ0LmNjLm5kc3Uubm9kYWsuZWR1PiBmb3IKCSAgcG9pbnRpbmcgdGhpcyBvdXQuCgpNb24gTWFyICAxIDEzOjI3OjE3IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBwYXJzZXIuaCwgcGFyc2VySW50ZXJuYWxzLmg6IG1lbW9yeSBsZWFrIGh1bnRpbmcsCgkgIGV4cG9ydGVkIHRoZSBpbnB1dFN0cmVhbSByb3V0aW5lcy4KCSogZG9jL2h0bWwvKiA6IHVwZGF0ZWQgYWNjb3JkaW5nbHkKClN1biBGZWIgMjggMjI6NTE6MzMgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIHBhcnNlci5oLCBwYXJzZXJJbnRlcm5hbHMuaDogYWRkZWQgYSBmZXcgZXh0cmEKCSAgaW50ZXJuYWwgY2FsbHMgdG8gYWxsb2NhdGUgYW5kIGZyZWUgcGFyc2VyIGNvbnRleHRzIC4uLgoJKiBkb2MvaHRtbC8qIDogdXBkYXRlZCBhY2NvcmRpbmdseQoKVGh1IEZlYiAyNSAxMTo1MjoyNCBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4sIE1ha2VmaWxlLmFtLCBkb2MvbWFrZWZpbGUuYW0gOiBHZW5lcmFsIGNoYW5nZXMgZm9yCgkgIDEuMC4wIHJlbGVhc2UgYW5kIGluY2x1ZGluZyB0aGUgZ2VuZXJhdGVkIEhUTUwgZG9jdW1lbnRhdGlvbi4KClRodSBGZWIgMjUgMDk6NDQ6NTIgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbWFrZWZpbGUuYW0gOiBhZGRlZCBwYXJzZXJJbnRlcm5hbHMuaCwgb29wcy4KCk1vbiBGZWIgMjIgMTE6MjQ6NTYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VySW50ZXJuYWxzLmg6IGFkZGVkIHRoaXMgaGVhZGVyIGdpdmluZyBhY2Nlc3MgdG8gdGhlIHBhcnNlcgoJICBpbnRlcm5hbCBmdW5jdGlvbnMuCgkqIGRvYy9NYWtlZmlsZS5hbSA6IGFkZGVkIGEgcmVidWlsZCB0YXJnZXQgd2hpY2ggcmVidWlsZHMgdGhlIGZ1bGwKCSAgc2V0IG9mIGRvY3VtZW50YXRpb25zCgkqIHBhcnNlci5bY2hdIHRyZWUuW2NoXSB2YWxpZC5bY2hdOiBzZXJpb3VzIHVwZGF0ZXMgdy5yLnQuIHBhcnNpbmcKCSAgdGhlIGludGVybmFsIHN1YnNldC4gCgkqICouYyAqLmg6IG1vZGlmaWNhdGlvbnMgbmVlZGVkIHRvIGdlbmVyYXRlIHRoZSBkb2N1bWVudGF0aW9uIHVzaW5nCgkgIGd0ay1kb2MsIGNsZWFudXAgb2YgZnVuY3Rpb25zIGJsb2NrcywgcmVvcmdhbmlzYXRpb24gb2Ygc3RydWN0CgkgIGRlY2xhcmF0aW9ucy4KClR1ZSBGZWIgMTYgMTc6Mjc6MjkgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTWFrZWZpbGUuYW0sIHNwZWMsIGRvYy9NYWtlZmlsZS5hbSA6IHVwZ3JhZGluZyB0byAwLjk5LjgsIGZpeGluZwoJICB0aGUgdGFyIGFuZCBzcGVjIGZpbGUgdG8gaW5jbHVkZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2MuCgoxOTk5LTAyLTEzICBOdW5vIEZlcnJlaXJhICA8bm1yZkBybmwuaXN0LnV0bC5wdD4KCgkqIGRvYy8uY3ZzaWdub3JlOiBBZGRlZCB0aGlzIGZpbGUuCgpNb24gRmViICA4IDE5OjI3OjU2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYzogZml4ZWQgeG1sR2V0UHJvcCB0byByZXR1cm4gIiIgd2hlbiB0aGUgYXR0cmlidXRlCgkgIGV4aXN0cywgZXZlbiBpZiB0aGUgbm9kZS1saXN0IGlzIE5VTEwuCgpNb24gRmViICA4IDE2OjEwOjE1IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYzogcGF0Y2hlZCBhbiBlcnJvciBvdXRwdXR0aW5nIGVtcHR5IGF0dHJpYnV0ZSB2YWx1ZXMuCgkqIE1ha2VmaWxlLmFtIGFuZCBkb2MvbWFrZWZpbGUuYW06IGhhdmUgYmVlbiB1cGRhdGVkIGR1cmluZyB0aGUKCSAgd2Vlay1lbmQuIFNvcnJ5IGZvciBhbiBlbXB0eSBDVlMgbG9nLCBJIGdvdCBhIHNoZWxsIHByb2JsZW0uCgpNb24gRmViICAxIDEyOjEwOjEzIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuaDogY2xlYW5lZCB1cCB1c2luZyBlbnVtcyBpbnN0ZWFkIG9mIGRlZmluZXMKCSogcGFyc2VyLmMsIHZhbGlkLltjaF06IG1vcmUgd29yayBvbiBwYXJzaW5nL291dHB1dCBvZiBlbGVtZW50CgkgIGRlY2xhcmF0aW9ucwoKU3VuIEphbiAzMSAyMjowNjo0OCBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB2YWxpZC5bY2hdLCB0cmVlLmMsIHBhcnNlci5jIDogbW9yZSB3b3JrIHRvd2FyZCBmdWxsIHBhcnNpbmcKCSAgb2YgWE1MIERURHMuCgkqIFJFQURNRTogYWRkZWQgaW5mb3JtYXRpb25zIGFib3V0IG1haWxpbmctbGlzdCBhbmQgb24tbGluZQoJICBkb2N1bWVudGF0aW9uCgoxOTk5LTAxLTI3ICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogY29uZmlndXJlLmluIChYTUxfSU5DTFVERURJUik6IFVzZSAtSSBub3QgLUwgZm9yIGluY2x1ZGVzLgoKU3VuIEphbiAxNyAyMDowNjozNiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgdHJlZS5bY2hdIDogbW9yZSB3b3JrIHRvd2FyZCBjb25mb3JtYW5jZSB0ZXN0aW5nLAoJICBhZGRlZCBhIGxhc3QgZWxlbWVudCB0byBhY2NlbGVyYXRlIHBhcnNpbmcgb2YgdmVyeSBmbGF0IHN0cnVjdHVyZXMKCSAgc3RhcnRlZCB3b3JraW5nIG9uIGludGVybmFsIHN1YnNldCBFbGVtZW50IGNvbnRlbnQgZGVjbGFyYXRpb24uCgkqIHZhbGlkLltjaF0gOiBmaXJzdCBjdXQgYXQgYWRkaW5nIGNvZGUgdG93YXJkIHZhbGlkYXRpb24uCgkqIHByZXZpb3VzIGNoYW5nZXMgaGFkIGFsc28gc21hbGwgaW1wYWN0IG9uIG1vc3QgZmlsZXMsIGVzcGVjaWFsbHkKCSAgdGhlIGNvbmZvcm1hbmNlIHRlc3RpbmcgdXNpbmcgSmFtZXMgQ2xhcmsgdGVzdCBzdWl0ZS4KClN1biBKYW4gMTcgMTQ6NDU6MDYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdGVzdC8qIDogdXBkYXRlZCB0aGUgZXhhbXBsZXMsIG1vc3Qgb2YgdGhlbSB3ZXJlIG5vdCB3ZWxsCgkgICAgICAgICAgIGZvcm1lZCAoaHVtbSksIGFuZCBhZGRlZCByZGYyLgoJKiByZXN1bHQvKiA6IHJlc3VsdGluZyBjaGFuZ2VzIGluIHRoZSBvdXRwdXQuCgpTdW4gRGVjICA2IDEzOjA2OjU4IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYzogY2hhbmdlZCB0aGUgYmVoYXZpb3VyIG9mIHhtbEdldFByb3Agb24gTlVMTCB2YWx1ZXMuCgpTYXQgRGVjICA1IDEyOjI1OjA5IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYzogcGF0Y2hlZCBhIGJ1ZyBpbiB0aGUgZ2VuZXJhdGlvbiBvZiBlbXB0eSBhdHRyaWJ1dGVzCgpGcmkgTm92IDI3IDAxOjM2OjU0IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGVudGl0aWVzLltjaF0sIHRyZWUuW2NoXSwgdGVzdGVyLmM6IGFkZGVkIGNvcHkgaW50ZXJmYWNlcwoJICBmb3Igbm9kZS90cmVlcy9kb2N1bWVudHMvLi4uIEJpZ2dlc3QgcHJvYmxlbSBpcyBuYW1lc3BhY2UKCSAgc3VwcG9ydCB3aGVuIGNvcHlpbmcgc3VidHJlZXMuCgpTdW4gTm92IDE1IDE5OjU5OjQ3IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBlbnRpdGllcy5jOiBpbXByb3ZlIGVudGl0aWVzIGFuZCBjaGFyIHJlZiBlbmNvZGluZywKCSAgYW5kIGNsZWFudXBzIG9mIGVycm9yIG1lc3NhZ2VzLgoKRnJpIE5vdiAxMyAxMzowMzoxMCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgZW50aXRpZXMuYzogc2ltcGxlIGJ1ZyBodW50aW5nIGRvbmUgZHVyaW5nIHJwbTJodG1sIGFuZAoJICBycG1maW5kIGludGVncmF0aW9uLgoKU3VuIE5vdiAgOCAxMzoxMTowNyBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXTogQWRkZWQgaW50ZXJmYWNlcyBhbGxvd2luZyB0byBzcGVjaWZ5IGEgU0FYCgkgIGhhbmRsZXIgYmVmb3JlIHBhcnNpbmcuCgpTdW4gTm92ICA4IDA5OjM5OjE3IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiByZWRpcnJlY3QgYWxsIGVycm9ycyByZXBvcnRpbmcgdGhyb3VnaCB0aGUgU0FYCgkgIGVycm9yIGZ1bmN0aW9uCgpXZWQgTm92ICA0IDE0OjIxOjU0IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGVudGl0aWVzLmM6IHJhdGhlciB1c2UgSEFWRV9TTlBSSU5URiBhbmQgbm90IGRlcGVuZCBvbiBnbGliCgkqIGxpYnRvb2wsIHRsbWFpbiAuLi46IHVwZGF0ZSBvZiB0aGUgbGlidG9vbCBmaWxlcwoKMTk5OC0xMS0wNCAgTWlndWVsIGRlIEljYXphICA8bWlndWVsQG51Y2xlY3UudW5hbS5teD4KCgkqIGVudGl0aWVzLmM6IFVzZSBnX3NucHJpbnRmIGluc3RlZGEgb2Ygc25wcmludGYuCgpTdW4gTm92ICAxIDE0OjMxOjA2IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGVudGl0aWVzLmMsIHBhcnNlci5jOiBkZWJ1ZyBhbmQgY2xlYW51cCBvZiBDaGFyUmVmIGhhbmRsaW5nL3NhdmluZy4KCSAgYWRkZWQgZW50NSB0ZXN0IGZvciB0aGlzIHB1cnBvc2UuCgkqIHBhcnNlci5jLCBwYXJzZXIuaDogZm9ybWF0dGluZywgY29tbWVudHMgYW5kIFVURi04IHBsYW5uaW5nLgoKRnJpIE9jdCAzMCAwMTozNjo1MiBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogZml4ZWQ/IGEgc3RyYW5nZSBlcnJvciBkdWUgdG8gY29tcHJlc3Npb24gb24gYSBHV1AKCSAgZG9jdW1lbnQuCgpUaHUgT2N0IDI5IDAwOjQ4OjQ1IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXTogYnVnIGZpeGluZwoJKiBlbnRpdGllcy5bY2hdOiBkZWZpbmVkIGEgc3BlY2lmaWMgdHlwZSBmb3IgcHJlZGVmaW5lZCBlbnRpdGllcwoJKiBkb2MveG1sLmh0bWw6IG1vcmUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgbGlicmFyeSwgaG93IHRvIHVzZSBpdCwKCSAgb3ZlcnZpZXcgb2YgdGhlIGludGVyZmFjZXMuCgpXZWQgT2N0IDI4IDE3OjU2OjM1IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXTogbW9yZSBjbGVhbnVwIG9uIHRoZSBBUEksIG1hZGUgdGhlIHRyZWUgbW9yIGNvbmZvcm1hbnQuCgpUdWUgT2N0IDI3IDE3OjU0OjAwIEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYzogY29ycmVjdGVkIGEgc21hbGwgYnVnCgkqIGRvYy94bWwuaHRtbDogY29udGludWluZyB3cml0aW5nIGRvY3VtZW50YXRpb24uCgpUdWUgT2N0IDI3IDE3OjU0OjAwIEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRlYnVnWE1MLmggZGVidWdYTUwuYzogYWRkZWQgZGVidWdnaW5nIHV0aWxpdGllcy4KCSogdGVzdGVyLmM6IGFkZGVkIC0tZGVidWcgc3dpdGNoLgoJKiB0cmVlLmM6IHBhdGNoZWQgYW4gaW5jb3JyZWN0IG5vZGUtPnR5cGUgYXNzaWdubWVudC4KCSogcGFyc2VyLmM6IGZvcm1hdHRpbmcsIGVuc3VyZSB0aGF0IG5vZGUtPmRvYyAhPSBOVUxMIGluIGF0dHJpYnV0ZXMKClR1ZSBPY3QgMjcgMDE6MTU6MzkgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKICAgICAgICAqIHBhcnNlci5bY2hdIFNBWC5jIHRyZWUuW2NoXTogbGFyZ2UgYW1vdW50IG9mIGNoYW5nZXMgdG8gaW1wcm92ZQogICAgICAgICAgZW50aXR5IHN1cHBvcnQgYW5kIHByb3ZpZGUgYW4gaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gY2xvc2UgdG8KICAgICAgICAgIERPTSBvbmUgKGVudGl0eSByZWYgbm9kZXMsIGFuZCBhdHRyaWJ1dGUgdmFsdWUgYXMgdHJlZSkuIEkgdHJpZWQKICAgICAgICAgIHRvIHByZXNlcnZlIHRoZSBpbnRlcmZhY2UgYnV0IHRoaXMgd2lsbCBzdXJlbHkgYnJlYWsgc29tZSBhcHBzCiAgICAgICAgICAoSSBoYXZlIHRvIGNoYW5nZSBycG0yaHRtbC9ycG1maW5kIGZvciBleGFtcGxlKS4gSSBoYWQgdG8gY2hhbmdlCgkgIHR3byBpbnRlcmZhY2VzLCBhbmQgdGhlIGdlbmVyYXRlZCB0cmVlIGlzIHNvbWV3aGF0IGRpZmZlcmVudC4KCSogZG9jLyogOiBzdGFydGVkIGRvY3VtZW50aW5nIHRoZSBYTUwgbGlicmFyeSwgdGhlIHRyZWUgYW5kCgkgIERPTS9Db3JiYS4gVGhpcyBpcyBhIGZpcnN0IHN0ZXAuCgpTYXQgT2N0IDI0IDE0OjIzOjUxIEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBTZXQgdXAgdGhlIGZvbmN0aW9ucyBjb21tZW50IGJsb2NrLCBib3JpbmcgYnV0IHVzZWZ1bC4KCSogcGFyc2VyLmgsIFNBWC5jLCBwYXJzZXIuYzogbm93IGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZCB0aHJvdWdoCgkgIHRoZSBTQVggaW50ZXJmYWNlLiBUaGUgcHJvYmxlbSBpcyB0aGF0IG15IFNBWCBpbnRlcmZhY2UgZGl2ZXJnZWQKCSAgcXVpdGUgYSBiaXQgZnJvbSB0aGUgb3JpZ2luYWwgb25lLCB3ZWxsIHRoaXMgaXMgbm90IGFuIG9mZmljaWFsCgkgIHNwZWMsIGFuZCB0cmFuc2xhdGluZyBpdCBmcm9tIEphdmEgdG8gQyBpcyBoYWlyeSBhbnl3YXkuLi4KClR1ZSBPY3QgMjAgMDI6MTE6MjEgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogU0FYLmMsIGVudGl0aWVzLmMsIHRyZWUuYywgZW5jb2RpbmcuYywgZXJyb3IuYzogU2V0IHVwIHRoZQoJICBmb25jdGlvbnMgY29tbWVudCBibG9jaywgYm9yaW5nIGJ1dCB1c2VmdWwuCgpTdW4gT2N0IDE4IDIwOjQwOjU4IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGVuY29kaW5nLltjaF0sIE1ha2VmaWxlLmFtOiBBZGRlZCB0aGUgVVRGLTgsIFVURi0xNiBhbmQgSVNPIExhdGluIDEKCSAgY29udmVyc2lvbiByb3V0aW5lcy4gSG93ZXZlciB0aGV5IGFyZSBub3QgeWV0IHVzZWQgdG8gY29udmVydCB0aGUKCSAgaW5wdXRzLiBUaGUgY29yZSB3aWxsIHJ1biB3aXRoIFVURi04LgoKU3VuIE9jdCAxOCAxNTowODoxOSBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmMgOiBtYWtlIHN1cmUgdGhhdCB0aGUgdHlwZSBpZCBpcyBwcm9wZXJseSBzZXQtdXAgd2hlbgoJICBhIG5ldyBvYmplY3QgaXMgYWxsb2NhdGVkLCBuZWVkZWQgZm9yIERPTS4KClNhdCBPY3QgMTcgMDI6NDM6MjEgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5oLCB0cmVlLmM6IE9rLCB0aGUgbWFpbiBvYmplY3RzIGluIHRoZSB0cmVlIHdpbGwgYmUgbmF0aXZlCgkgIGNvcmJhIG9iamVjdHMsIGl0IGNvc3RzIDggYnl0ZXMgcGVyIE5vZGUsIEF0dHJpYnV0ZSBhbmQgRG9jdW1lbnQKCSAgYnV0IGl0IHNpbXBsaWZpZXMgdGhlIENvcmJhIGludGVncmF0aW9uIGEgbG90IChubyBleHRyYSBpbnRlcmZhY2UKCSAgb2JqZWN0cyB0byBhbGxvY2F0ZS9mcmVlKS4KClR1ZSBPY3QgMTMgMjE6NDY6NTcgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5oLCB0cmVlLmMsIHBhcnNlci5jOiBhZGRlZCBwcmV2IGFuZCBkb2MgcG9pbnRlcnMgdG8gTm9kZSwKCSAgYW5kIGNoYW5nZWQgTk9ERXMgY29udGFudHMgZm9yIGNvbmZvcm1pdHkgd2l0aCBET00gTGV2ZWwgMQoKV2VkIE9jdCAgNyAyMzo0Mjo0NiBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhZGRlZCBob29rcyB0byBrZWVwIHRyYWNrIG9mIHNlcnZhbnRzIHdoZW4gY3JlYXRpbmcgb2JqZWN0cwoJICB4bWxEb2MgYW5kIHhtbE5vZGUgKGZvciBDb3JiYSBleHBvcnQpLgoKU3VuIE9jdCAgNCAwMzoxODowOSBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhZGRlZCB4bWwtY29uZmlnIHNjcmlwdC4KClRodSBPY3QgIDEgMTY6MjI6MzcgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKICAgICAgICAqIGF1dG9nZW4uc2ggOiBhcHBsaWVkIHBhdGNoIGZyb20gRnJlZGVyaWMgRGV2ZXJuYXkgPGRldmVybmF5QGlzdGFyLmZyPgoJICB0byBhdXRvdXBkYXRlIGxpYnRvb2wgYW5kIGF1dG9tYWtlIGNvbmYgZmlsZXMuCgoxOTk4LTA5LTMwICBNaWd1ZWwgZGUgSWNhemEgIDxtaWd1ZWxAbnVjbGVjdS51bmFtLm14PgoKCSogTWFrZWZpbGUuYW06IFVzZSAnPycgdG8gc2VwYXJhdGUgdGhlIHNlZAoJY29tbWFuZHMgYXMgJywnIGlzIHVzZWQgd2hlbiBwZW9wbGUgcGFzcyAtV2wsc29tZXRoaW5nLgoKClRodSBTZXAgMjQgMTU6MTM6MjkgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jLCB0cmVlLmg6IGFkZGVkIGEgcGVyLWRvY3VtZW50IGNvbXByZXNzaW9uIGludGVyZmFjZS4KClR1ZSBTZXAgMjIgMjA6NDc6MzggRURUIDE5OTgKCgkqIHRyZWUuYywgdHJlZS5oOiBhZGRlZCBzYXZpbmcgd2l0aCBjb21wcmVzc2lvbiBhbmQgYWRkZWQgaW50ZXJmYWNlcwoJICB0byBjb250cm9sIHRoZSBjb21wcmVzc2lvbiBsZXZlbCAoeG1sR2V0Q29tcHJlc3NNb2RlLAoJICB4bWxTZXRDb21wcmVzc01vZGUpIGFuZCBhIG5ldyBzYXZlIHRvIGZpbGVuYW1lIGZ1bmN0aW9uICh4bWxTYXZlRmlsZSkuCgpNb24gU2VwIDIxIDIwOjExOjEzIEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBjb3JyZWN0ZWQgYSBsb29wIGZvciBmaWxlcyBvZiBzaXplIDAKCjE5OTgtMDgtMjAgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBlcnJvci5oOiBOZXcgZmlsZS4gIENvbnRhaW5zIHByb3RvdHllcyBmcm9tIGBlcnJvci5jJy4KClRodSBBdWcgMTMgMTk6MDI6MzQgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuYW0gKHhtbGluY2Rpcik6IE5ldyBtYWNyby4KCSh4bWxpbmNfSEVBREVSUyk6IFJlbmFtZWQgZnJvbSBpbmNsdWRlX0hFQURFUlMuCgpUaHUgQXVnIDEzIDAwOjQwOjE0IEVEVCAxOTk4ICBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhcHBsaWVkIHNtYWxsIHBhdGNoIG9uIG51bWVyaWMgZW50aXRpZXMgZnJvbQoJICBDaHJpc3RvcGhlciBCbGl6emFyZCA8YmxpenphcmRAYXBwbGllZHRoZW9yeS5jb20+CgpXZWQgQXVnIDEyIDIzOjEyOjU4IEVEVCAxOTk4ICBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBOZXcgcmVsZWFzZSAwLjIsIHJlbW92ZWQgdGhlIG9sZCB4bWxfKiBmaWxlcyBzbyB0aGF0IGl0J3MKCSAgICBjb2hlcmVudCB3aXRoIHRoZSBvdGhlciBDVlMgYmFzZSAoVzNDKSwgZmFyIGJldHRlciBjb25mb3JtYW5jZQoJICAgIHRvIHN0YW5kYXJkLCBuZXcgbmFtZXNwYWNlcywgZGVjZW50IGVudGl0aWVzIHN1cHBvcnQsIGJlZ2lubmluZwoJICAgIG9mIGEgU0FYLWxpa2UgaW50ZXJmYWNlLiBOZWFybHkgbm90aGluZyBsZWZ0IGludGFjdCwgZXZlbiB0aGUKCSAgICB0ZXN0IGV4YW1wbGVzIC4uLgoKMTk5OC0wNy0zMCAgQ2hyaXN0b3BoZXIgQmxpenphcmQgIDxibGl6emFyZEBhcHBsaWVkdGhlb3J5LmNvbT4KCgkqIC5jdnNpZ25vcmU6IEFkZCAuZGVwcyBkaXIKClN1biBKdWwgMjYgMTc6Mjk6NTIgRURUIDE5OTggIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbF90cmVlOiBjaGFuZ2VkIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzY2hlbWUgZm9yIG5hbWUgaW4geG1sTmV3Tm9kZQoKU3VuIEp1bCAyNiAwMDoxNzo1MSBFRFQgMTk5OCAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKICAgICAgICAqIGNvbmZpZ3VyZS5pbjogYWRkZWQgdGVzdCBmb3IgQ1BQCgkqIEFVVEhPUlMsIENoYW5nZWxvZzogdGhlIG9yaWdpbmFsIG9uZXMgZGlkbid0IGdldCBjb21taXRlZCBidXQgdGhlCgkgICAgZ2xpYiBvbmVzIGluc3RlYWQsIGZpeGVkLgoJKiBNYWtlZmlsZS5hbTogY29ycmVjdGVkIGFuIGVycm9yIGluIGxpYnJhcnkgbmFtaW5nCgpGcmkgSnVsIDI0IDE2OjQ3OjE0IDE5OTggIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGludGVncmF0ZWQgY29kZSBkZXZlbG9wcGVkIGF0IFczQwoJKiBjaGFuZ2VkIHRoZSBvcmlnaW5hbCBDb3B5cmlnaHQKCSogbWlncmF0ZWQgdG8gYXV0b21ha2UKCSogcHJlZml4ZWQgdGhlIGZpbGVuYW1lcyBieSB4bWxfIHRvIGF2b2lkIGZpbGVuYW1lIGNsYXNoZXMKCg==