V2VkIEF1ZyAxNSAxMzo1NjoyMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvdmFsaWQuaCBkZWJ1Z1hNTC5jIHZhbGlkLmM6IGRlcHJlY2F0ZQoJICB0aGUgbm9uLWJvdW5kY2hlY2tpbmcgU3ByaW50ZiBmdW5jdGlvbnMsIGFkZCBTbnByaW50ZgoJICB0aGlzIHNob3VsZCBjbG9zZSBidWcgIzU3OTg0CgpXZWQgQXVnIDE1IDEwOjQ2OjA3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiB4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZSgpIGRpZG4ndCB1bmVzY2FwZWQKCSAgVVJJcyBiZWZvcmUgZG9pbmcgdGhlIGxvb2t1cHMgKHBvaW50ZWQgYnkgTWFyayBWYWtvYykKClR1ZSBBdWcgMTQgMTg6Mzc6MjMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHNlcmlvdXMgY2hhbmdlcyBvbiBSZXN1bHQgVmFsdWUgVHJlZXMgYW5kIE5vZGVTZXRzCgkgIHcuci50LiBkZWFsbG9jYXRpb24gYW5kIGNvbGxlY3Qgb3BlcmF0aW9ucy4gUHJvYmFibHkgbm90CgkgIDEwMCUgY2xlYW4gKG1lcmdlIG9mIGFsbG9jYXRlZCB0cmVlcyBzbWVsbHMgbGlrZSBhIHByb2JsZW0pLgoJICBTZWVtcyBzdWZmaWNpZW50IHRvIGNsb3NlICM1ODk0MwoKVHVlIEF1ZyAxNCAxNjoxMjowMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhZGRpbmcgYSAtLWZvcm1hdCBvcHRpb24KClR1ZSBBdWcgMTQgMTQ6MTY6MjQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGNvdW50KCkgd2FzIGJyb2tlbiBvbiBSZXN1bHQgVmFsdWUgVHJlZQoJKiB4bWxJTy5jOiBmaXhlZCBmaWxlOi8vLyBhY2Nlc3NlcyBvbiBfV0lOMzIKCk1vbiBBdWcgMTMgMTM6MjI6NTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5tNDogcy9MSUJYTUxfVkVSU0lPTl9OVU1CRVIvTElCWE1MX1ZFUlNJT04vIHNlZW1zIHRoZQoJICBtYWNybyB3YXMgcmVuYW1lZCwgdGhpcyBzaG91bGQgY2xvc2UgYnVnICM1ODY4MwoKTW9uIEF1ZyAxMyAxMjozMzo0MCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IHNtYWxsIGZpeCBmaXhpbmcgYnVnICM1ODUzOSByZXBvcnRlZCBieSBjb29sbywgaW4KCSAgZW50aXR5IHN1YnN0aXR1dGlvbiBtb2RlIHRleHQgYXQgdGhlIGVuZCBvZiB0aGUgZW50aXR5IG1pZ2h0CgkgIGJlIGFkZGVkIGR1ZSB0byB0ZXh0IGNvYWxlc2NpbmcuCgkqIG5hbm9mdHAuYyBwYXJzZXIuYzogc21hbGwgY2xlYW51cAoKV2VkIEF1ZyAgOCAyMjo1NzowNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKICAgICAgICAqIEhBQ0tJTkc6IGFkZGVkIEpvaG4gRmxlY2sgcmlnaHQgdG8gY29tbWl0IGluIHRoZSBkb2Mgc3ViZGlyCgpUdWUgQXVnICA3IDAzOjA1OjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYyB0ZXN0WFBhdGguYyB2YWxpZC5jIHhtbGxpbnQuYyBpbmNsdWRlL2xpYnhtbC92YWxpZC5oOgoJICBhbGxvdyB0byBpbmhlcml0IGF0dHJpYnV0ZXMgZnJvbSB0aGUgRFREIGRpcmVjdGx5IGluIHRoZQoJICB0cmVlLCB0aGlzIGlzIG5lZWRlZCBmb3IgWFBhdGggYW5kIGNhbiBiZSBhIHVzZWZ1bCBmZWF0dXJlLgoJICBJbmhlcml0ZWQgbmFtZXNwYWNlcyBhcmUgYWx3YXlzIHByb3ZpZGVkIGF0IHRoZSB0cmVlIGxldmVsIG5vdwoJKiB0ZXN0L2RlZmF0dHIqIHJlc3VsdC9kZWZhdHRyKiByZXN1bHQvbm9lbnQvZGVmYXR0cio6IGFkZGVkIGEgY291cGxlCgkgIG9mIHRlc3RzIGZvciB0aGlzIGZlYXR1cmUgKFhTTFQgYmVpbmcgdGhlIHByaW1lIHVzZXIpLgoKRnJpIEF1ZyAgMyAxNDowMjoyMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogRE9DQnBhcnNlci5jIE1ha2VmaWxlLmFtIG5hbm9odHRwLmMgcGFyc2VyLmMgdGVzdEhUTUwuYwoJICB0ZXN0U0FYLmMgeG1sSU8uYyB4bWxsaW50LmMgaW5jbHVkZS93aW4zMmNvbmZpZy5oCgkgIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaAoJICBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbiB3aW4zMi9SRUFETUUuTVNEZXYKCSAgd2luMzIvZHNwLyo6IGFwcGxpZWQgV2luMzIgRmFjZWxpZnQgTm8uMiBwYXRjaGVzIGZyb20gCgkgIElnb3IgWmxhdGtvdmljIGZvciBXaW5kb3dzL01TQwoKV2VkIEF1ZyAgMSAyMzoyMTowNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IHVucGFyc2VkRW50aXR5RGVjbCgpIHRoZSBVUkkgY29tcHV0YXRpb24gb2YgdGhlCgkgIGVudGl0eSB3YXNuJ3QgZG9uZSBicmVha2luZyBYU0xUIHVucGFyc2VkLWVudGl0eS11cmkoKQoKV2VkIEF1ZyAgMSAxNzo0NDo1NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4ZWQgYSBidWcgd2hlbiB3YWxraW5nIHRoZSBkZXNjZW5kYW50cyBhbmQKCSAgdGhlIGN1cnJlbnQgbm9kZSBoYXMgbm8gY2hpbGRyZW4KCSogZGVidWdYTUwuYzogc2hvdyB1cCB3aGVuIGEgdGV4dCBub2RlIGlzIHN1cHBvc2VkIHRvIG5vdCBiZSBlc2NhcGVkCgpXZWQgQXVnICAxIDAxOjMzOjM1IENFU1QgMjAwMSBUaG9tYXMgQnJveWVyIDx0YnJveWVyQGx0Z3QubmV0PgoKCSogeHBhdGguYzogZml4ZWQgYSBidWcgaW4geG1sWFBhdGhOb2RlVHJhaWxpbmdTb3J0ZWQgKGZvciBub3cgaXQKCSAgd29ya2VkIGxpa2UgdGhlIHNldDpsZWFkaW5nKCkgZnVuY3Rpb24pCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6IGFkZGVkIHhtbFhQYXRoTm9kZVNldENvbnRhaW5zCgpUdWUgSnVsIDMxIDE4OjI0OjM0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogbmFub2h0dHAuYzogcHJvdGVjdGVkIGFuIHVzZSBvZiBFQUdBSU4sIEJyaWFuIFN0YWZmb3JkCgpUdWUgSnVsIDMxIDE3OjQ4OjQ0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogYXBwbHkgY2hhbmdlIHRvIGNsb3NlICM1ODE0MSAKCSogd2luMzIvbGlieG1sMi8qOiB1cGRhdGUgb2YgdGhlIE1TQyBwcm9qZWN0cyBmcm9tIElnb3IgIFpsYXRrb3ZpYwoKVHVlIEp1bCAzMSAxNzowOTozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiB3aGVuIHRoZSBpbnRlcm5hbCBzdWJzZXQgdXNlcyBhIFBFLCB0aGVuIHRoZQoJICBpbmNsdWRlZCBlbnRpdHkgY2FuIHVzZSBjb25kaXRpb25hbCBzZWN0aW9ucy4KCk1vbiBKdWwgMzAgMTI6NTg6MzkgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwveHBhdGguaDogZml4ZWQgYSBzZXJpb3VzIG1lbW9yeSBwcm9ibGVuCgkgIHdoZW4gd2Fsa2luZyB0aGUgbmFtZXNwYWNlIGF4aXMgc2hvd2luZyB1cCBpbgoJICBsaWJ4c3QvdGVzdHMvZ2VuZXJhbC9idWctMTIKCSogeG1sbWVtb3J5LmM6IGFkZGVkIHRoZSBwb3NzaWJpbGl0eSB0byB0cmFjZSBhIGdpdmVuIGJsb2NrCgkgIGRlZmluZWQgYnkgaXRzIGFkZHJlc3MKClN1biBKdWwgMjkgMDc6MTg6NTMgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBkb24ndCBvdmVycmlkZSBleGlzdGluZyBlbmNvZGluZyBzcGVjaWZpZWQgYmVmb3JlCgkgIHN0YXJ0aW5nIHhtbFBhcnNlRG9jdW1lbnQoKQoKU2F0IEp1bCAyOCAxMzozMzoxMCBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHJlaW5zZXJ0ZWQsIG5lZWRlZCBmb3IKCSAgV2luZG93cyB1c2VycyBvZiBDVlMKCjIwMDEtMDctMjcgIERhcmluIEFkbGVyICA8ZGFyaW5AYmVudHNwb29uLmNvbT4KCgkqIGVuY29kaW5nLmM6ICh4bWxJY29udldyYXBwZXIpOiBBZGQgY2FzdCB0byBmaXggd2FybmluZy4KCSogdGVzdENhdGFsb2cuYzogQWRkIGluY2x1ZGUgb2YgPGxpYnhtbC9wYXJzZXIuaD4uCgoyMDAxLTA3LTI3ICBEYXJpbiBBZGxlciAgPGRhcmluQGJlbnRzcG9vbi5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC8uY3ZzaWdub3JlOgoJKiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDoKCVJlbW92ZSB0aGlzIGZpbGUgZnJvbSBDVlMgYmVjYXVzZSBpdCdzIGdlbmVyYXRlZC4KCkZyaSBKdWwgMjcgMTA6MDM6NTYgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBhcHBsaWVkIGNvbnN0IHBhdGNoZXMgZnJvbQoJICBUb20gTW9vZyAjNTgwMDIKClRodSBKdWwgMjYgMTg6NTU6NTIgQ0VTVCAyMDAxIFRob21hcyBCcm95ZXIgPHRicm95ZXJAbHRndC5uZXQ+CgoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoeyxJbnRlcm5hbHN9Lmg6IGFkZGVkIGEgZnVuY3Rpb24KCSAgbG9va3VwIGZyYW1ld29yawoKRnJpIEp1bCAyNyAwMTo1MDoyMCBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBmaXhlZCB4bWxDb3B5Tm9kZSgpIGZvciBkb2N1bWVudHMKClRodSBKdWwgMjYgMTI6NDA6MzUgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBmaXhlZCBidWdzICM1ODA3MyByZXBvcnRlZCBieSBHcmVnIFNodGlsbWFuCgpUaHUgSnVsIDI2IDExOjM4OjM3IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZml4ZXMgYnVnICM1NzY1MiByZXBvcnRlZCBieSBNb3J1cyBXYWx0ZXIKClRodSBKdWwgMjYgMTA6MjQ6MzQgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIG5hbm9odHRwLmM6IEpvaG4gS3JvbGwgcHJvdmlkZWQgYSBzbWFsbCBmaXggdG8geG1sTmFub0hUVFBTYXZlCgpUaHUgSnVsIDI2IDA3OjE2OjA0IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYzogZml4ZWQgdGhlIHhtbExpbmVOdW1iZXJzRGVmYXVsdCgpCgkgIGVycm9ycywgbGVzc29uIGRvbid0IGFkZCBuZXcgZnVuY3Rpb25zIGF0IDFhbSBiZWZvcmUgYSByZWxlYXNlCgkqIHhwYXRoLmM6IGludGVncmF0ZWQgZml4IGZyb20gQmpvcm4gdG8gYXZvaWQgZGl2aWRlIGJ5IHplcm8KCSAgZnJvbSBYUGF0aCBpbml0aWFsaXphdGlvbiB3aGVuIHBvc3NpYmxlLgoKVHVlIEp1bCAyNCAxNTozOToxMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHJlc3VsdC9zY3JpcHRzL2Jhc2UqOiByZW1vdmluZyBoaXN0b3J5L3JlYWRsaW5lIGNoYW5nZWQKCSAgdGhpcyBzbGlnaHRseQoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBTQVguYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYwoJICB4bWxsaW50LmM6IG1ha2UgZWxlbWVudCBjb250ZW50IGxpbmUgbnVtYmVyIGdlbmVyYXRpb24KCSAgb3B0aW9ubmFsIHRvIGF2b2lkIGJyZWFraW5nIG9sZCBhcHBzIGFkZGVkIGludGVyZmFjZSB0byBzd2l0Y2gKClR1ZSBKdWwgMjQgMTU6MDY6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGdldCByaWQgb2YgdGhlIHJlYWRsaW5lIGFuZCBsaWJoaXN0b3J5CgkgIGRlcGVuZGFuY2llcyBieSBkZWZhdWx0LCByZWxlYXNlIDIuNC4xIHdpdGggSUE2NCBmaXgKCSogbmFub2h0dHAuYyB0cmVlLmMgeG1sSU8uYyBpbmNsdWRlL2xpYnhtbC9uYW5vaHR0cC5oCgkgIGluY2x1ZGUvbGlieG1sL3RyZWUuaCBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOiBpbmNvcnBvcmF0ZWQKCSAgSm9obiBLcm9sbCBmaXhlcyB0byBhbGxvdyBzYXZpbmcgdG8gSFRUUCB2aWEgUFVUIChvcgoJICBQT1NUIG9mIG5lZWRlZCkuCgkqIGRvYy9odG1sLyouaHRtbDogcmVnZW5lcmF0ZWQgdGhlIGRvY3MKClN1biBKdWwgMjIgMDU6NTY6MTYgQ0VTVCAyMDAxIFRob21hcyBCcm95ZXIgPHRicm95ZXJAbHRndC5uZXQ+CgoJKiBoYXNoLmMgaW5jbHVkZS9saWJ4bWwvaGFzaC5oOiBhZGRlZCB4bWxIYXNoU2Nhbm5lckZ1bGwsCgkgIHhtbEhhc2hTY2FuRnVsbCBhbmQgeG1sSGFzaFNjYW5uRnVsbDMgdG8gZ2V0IHBhc3NlZCB0aGUKCSAgdGhyZWUga2V5cyBhcyBhcmd1bWVudHMgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCgpUaHUgSnVsIDE5IDE1OjI5OjI2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluIE1ha2VmaWxlLmFtOiByZW1vdmVkIGxpYnhtbCBzb2Z0bGluayBmb3IgZ29vZAoJKiBpbmNsdWRlL2xpYnhtbC8qLmggKi5jIGRvYy9NYWtlZmlsZS5hbTogY2xlYW51cCB0byBnZXQKCSAgMTAwJSBjb3ZlcmFnZSBieSBndGstZG9jCgpUdWUgSnVsIDE3IDE3OjM2OjQ2IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxtZW1vcnkuYyBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogZGVidWdnaW5nIG9uIElBNjQsCgkgIGZpeGVkIHNlcmlvdXMgdHJvdWJsZXMgZHVlIHRvIHNpemVfdCB2cy4gaW50IG1pc21hdGNoCgpUdWUgSnVsIDE3IDE2OjA0OjM2IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBTQVguYyB4bWxJTy5jOiBjbGVhbmVkIHVwIHNvbWUgd2FybmluZyBvbiB0aGUgQWxwaGEKCk1vbiBKdWwgMTYgMDY6MzI6NDQgQ0VTVCAyMDAxIFRob21hcyBCcm95ZXIgPHRicm95ZXJAbHRndC5uZXQ+CgoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aHssSW50ZXJuYWxzfS5oIHhwYXRoLmM6IGFkZGVkIGEgbW9yZQoJICBjb252ZW5pZW50IGV4dGVuc2lvbiBBUEkgZm9yIHZhbHVlIGFuZCBjb250ZXh0IG1hbmFnaW5nCgkgIE5vdyBoYW5kbGVzIGV4dGVybmFsIG9iamVjdHMgdGhyb3VnaCB4bWxYUGF0aFBvcEV4dGVybmFsLAoJICB4bWxYUGF0aFdyYXBFeHRlcm5hbCBhbmQgeG1sWFBhdGhSZXR1cm5FeHRlcm5hbC4KCSAgQWRkZWQgZnVuY3Rpb25zIGZvciBzZXRzIG9wZXJhdGlvbnMgKGludGVyc2VjdGlvbiwgZXRjLikKCk1vbiBKdWwgMTYgMjA6MDU6MjcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaCBpbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmgKCSAgeG1sSU8uYyB0cmVlLmMgcGFyc2VySW50ZXJuYWxzLmMgZW50aXRpZXMuYyBlbmNvZGluZy5jCgkgIEhUTUxwYXJzZXIuYzogY2xlYW51cCBvZiBnbG9iYWwgdmFyaWFibGVzLCBtYXJraW5nIHNvbWUKCSAgY29uc3Qgb3IgcHJpdmF0ZS4KCk1vbiBKdWwgMTYgMDA6MTc6MTUgQ0VTVCAyMDAxIFRob21hcyBCcm95ZXIgPHRicm95ZXJAbHRndC5uZXQ+CgoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aC5oOiBleHBvcnRlZCB4bWxYUGF0aHtOQU4sUElORixOSU5GfQoJICBmaXhlZCB4bWxYUGF0aE5vZGVTZXRJdGVtIHdoZW4gcGFzc2luZyBpbmRleD0wCgpTdW4gSnVsIDE1IDE3OjU4OjQ0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmguaW46IGFkZGVkIHhtbENoZWNrVmVyc2lvbigpCgpTYXQgSnVsIDE0IDE5OjMxOjIxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sbGludC5jOiBmaXhlZCBjb21waWxhdGlvbiB1bmRlciBDeWd3aW4gIzU3NTAzCgkqIFRPRE86IHVwZGF0ZQoKMjAwMS0wNy0xMyAgUGV0ZXIgV2lsbGlhbXMgIDxwZXRlcndAeGltaWFuLmNvbT4KCgkqIGNvbmZpZy5oLmluOiBhZGQgI3VuZGVmIEhBVkVfRExGQ05fSAoKCSogZXhhbXBsZS9NYWtlZmlsZS5hbSAoSU5DTFVERVMpOiBDb21waWxlIGZpeCB3aGVuIHNyY2RpciAhPQoJYnVpbGRkaXIuCgpGcmkgSnVsIDEzIDExOjA5OjU2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogd2luMzIvbGlieG1sMi9saWJ4bWwyLmRlZi5zcmM6IGFkZGVkIGEgY291cGxlIG9mIGV4cG9ydGVkIGVudHJpZXMKCSAgcmFpc2VkIGJ5ICM1NzM0OCBhbmQgIzU3MzgxCgpUaHUgSnVsIDEyIDIxOjIwOjE3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogRE9DQnBhcnNlci5jIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jIFNBWC5jIGRlYnVnWE1MLmMgcGFyc2VyLmMKCSAgdHJlZS5jIHhwb2ludGVyLmM6IHN0b3JlIHRoZSBsaW5lIG51bWJkZXIgaW4gZWxlbWVudC0+Y29udGVudCwKCSAgbWF5IGJyZWFrIHNvbWUgc29mdHdhcmUsIG5lZWQgYSBjb25maWd1cmF0aW9uIG1lY2hhbmlzbQoKMjAwMS0wNy0xMCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBiZW50c3Bvb24uY29tPgoKCSogLmN2c2lnbm9yZToKCSogZXhhbXBsZS8uY3ZzaWdub3JlOgoJKiBpbmNsdWRlLy5jdnNpZ25vcmU6CgkqIGluY2x1ZGUvbGlieG1sLy5jdnNpZ25vcmU6CglWYXJpb3VzIHRoaW5ncyB0aGF0IGFyZSBnZW5lcmF0ZWQgYW5kIHNob3VsZCBiZSBpZ25vcmVkLgoKVHVlIEp1bCAxMCAxNzo0NzowOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcmVsZWFzZSBvZiAyLjQuMAoJKiBkb2MveG1sLmh0bWwgZG9jL2h0bWwvKjogIHVwZGF0ZWQgdGhlIGRvY3MKCk1vbiBKdWwgIDkgMjI6MDY6NTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBmaXhlZCAiSW50ZXJuYWw6IE1JWEVEIHN0cnVjdCBiYWQiIHdoZW4gI0NEQVRBIGVsZW1lbnRzCgkgIHZhbGlkYXRpb24gb2NjdXJlZCBvbiBjb250ZW50IHdpdGggZWxlbWVudCBjaGlsZAoKTW9uIEp1bCAgOSAxNzo1OTowOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogZml4ZWQgWE1MIEJhc2UgY29tcHV0YXRpb24gd2hpY2ggd2FzIGJyb2tlbgoJKiBkZWJ1Z1hNTC5jOiBhZGRlZCBhIGJhc2UgZnVuY3Rpb24gdG8gdGhlIHNoZWxsCgkqIE1ha2VmaWxlLmFtIHJlc3VsdC9zY3JpcHRzLyogdGVzdC9zY3JpcHRzLyo6IGFkZGVkIHNjcmlwdHMKCSAgYmFzZWQgcmVncmVzc2lvbiB0ZXN0cywgYW5kIGFkZGluZyAyIFhNTCBCYXNlIHRlc3RzCgpNb24gSnVsICA5IDEyOjMxOjA1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBzZXQgcHJvcGVydGllcyBkb2MgYW5kIGNhbGwgeG1sU2V0TGlzdERvYyBmb3IgcHJvcGVydGllcwoJICBjb250ZW50IHdoZW4gZ3JhZnRpbmcgdGhlbSBpbiBhIGRpZmZlcmVudCB0cmVlLgoJKiBhY2xvY2FsLm00OiByZW1vdmUgZnJvbSBDVlMKClN1biBKdWwgIDggMjM6MDk6MDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZGVmLnNyYzogYWRkZWQgc29tZSBtaXNzaW5nIGVudHJ5IHBvaW50CgkgIGZvciBYUGF0aCAoTWFyayBWYWtvYykKClN1biBKdWwgIDggMjA6MzQ6MzUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxJTy5jOiBmaXhlZCBhbiBvbGQgYnVnIHJhaXNlZCBieSBCZXJuaGFyZCBad2lzY2gsIHRoZSBJL08KCSAgbGF5ZXIgc2hvdWxkIFVSSS1VbmVzY2FwZSBiZWZvcmUgdHJ5aW5nIHRvIG9wZW4gcmVzb3VyY2VzLgoKU3VuIEp1bCAgOCAxNjoyNjowMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeCB0aGUgbmFtZSgpIGJ1ZyBmb3IgZWxlbWVudHMgaW4gdGhlIGRlZmF1bHQgCgkgIG5hbWVzcGFjZSByZXBvcnRlZCBieSBDaGFybGllIEJvemVtYW4KClN1biBKdWwgIDggMTU6MTE6MDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBTQVguYyBwYXJzZXIuYyB0ZXN0WFBhdGguYyB4cGF0aC5jOiB0cnlpbmcgdG8gZml4ICM1Njk0OCwgdGhpcwoJICBsZWQgdG8gYW4gWFBhdGggZml4LCBpbXByb3ZlbWVudHMgb2YgU0FYIGluaXRpYWxpemF0aW9uLCBhbmQKCSAgYW4gYWRkZWQgb3B0aW9uIC0tbm9jZGF0YSB0byB0ZXN0WFBhdGgKClNhdCBKdWwgIDcgMjE6MDk6NTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvbGlieG1sLWRvYy5lbDogRmVsaXggTmF0dGVyIHByb3ZpZGVkIGFuZXcgdmVyc2lvbiB3b3JraW5nCgkgIHdpdGggWEVtYWNzIHRvbwoKU2F0IEp1bCAgNyAwMjoxNjowMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoLmg6IHNtYWxsIGNsZWFudXAKCSogZG9jL3htbC5odG1sOiB1cGRhdGUKCkZyaSBKdWwgIDYgMDE6NDA6MjMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6CgkgIHJlbGVhc2VkIDIuMy4xNAoKRnJpIEp1bCAgNiAwMDo0Nzo0MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy9odG1sLyo6IHJlYnVpbHQgdGhlIGRvY3MgZm9yIHRoZSByZWxlYXNlCgkqIGRvYy94bWwuaHRtbDogYWRkZWQgMi4zLjE0IHJlbGVhc2UuCgpUaHUgSnVsICA1IDIyOjAxOjMxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogYSBidWcgcmVwb3J0ZWQgYnkgU3RlcGhhbiBLdWxvdyBlbXB0eSBub2Rlc2V0cwoJICB3ZXJlIG5vdCBlcXVhbCB0byBlbXB0eSBzdHJpbmdzCgpUaHUgSnVsICA1IDAwOjUyOjI1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogU0FYLmM6IGZpeGVkIGEgVVJJLVJlZmVyZW5jZSBjb21wdXRhdGlvbiBwcm9ibGVtIHdoZW4gdmFsaWRhdGluZwoJKiB4bWxJTy5jOiBzbWFsbCBjbGVhbnVwCgpUaHUgSnVsICA1IDAwOjA0OjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGltcHJvdmVkIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGNvdXBsZSBvZiBpbnRlcmZhY2VzCgkgIHVwb24gTGFycnkgU3RhbXBlciBzdWdnZXN0aW9uCgpXZWQgSnVsICA0IDIxOjQyOjI0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogU0FYLmMgZW50aXRpZXMuYyBwYXJzZXIuYzogY2hhbmdlZCBjb21wbGV0ZWx5IHRoZSB3YXkgZW50aXRpZXMKCSAgYXJlIGhhbmRsZWQgd2hlbiBydW5uaW5nIHRoZSBwYXJzZXIgaW4gZW50aXR5IHN1YnN0aXR1dGlvbiBtb2RlLgoJICBUaGlzIGZpeGVzIGEgYnVnIHJlcG9ydGVkIGJ5IFN0ZXBoYW4gS3Vsb3cgYW5kIG5lYXJseSBkaXZpZGVzCgkgIGJ5IDMgdGhlIGFtb3VudCBvZiBtZW1vcnkgcmVxdWlyZWQgYnkgbGlieHNsdCB0byBsb2FkIGFuZCBwcm9jZXNzCgkgIERvY0Jvb2sgVERHLgoKV2VkIEp1bCAgNCAxODowMjo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYzogZml4aW5nIGEgdG9vIGVhcmx5IHJvb3QgY2xvc2luZyBwcm9ibGVtIHJhaXNlZAoJICBieXQgUHJhc2hhbnRoIE5haWR1CgpXZWQgSnVsICA0IDAxOjQyOjAxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgYSBtaXNzaW5nIGNvcHkgaW4geG1sWFBhdGhWYXJpYWJsZUxvb2t1cE5TKCkgCgkgIHJhaXNlZCBieSBNYXJrIFZha29jLgoKVHVlIEp1bCAgMyAxODozNTo0OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGV4YW1wbGUvTWFrZWZpbGUuYW06IGZpeGVkIHRoZSBpbmNsdWRlIHBhdGggdG8gYWRkIHNyY2Rpci9pbmNsdWRlCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbjogZml4IGZyb20gQWxiZXJ0IENoaW4gZm9yIGljb252IGRldGVjdGlvbgoJICBhbmQgc29tZSBjbGVhbnVwCgpUdWUgSnVsICAzIDEwOjEyOjAzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94cGF0aC5oIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6CgkgIGxvdCBvZiBvcHRpbWl6YXRpb24gd29yaywgcmVzdWx0cyBpbiBzaWduaWZpY2FudCBpbXByb3ZlbWVudHMKCSAgd2hlbiBoYW5kbGluZyByZWFsbHkgY29tcGxleCBYUGF0aCBxdWVyaWVzLiBBZGQgYSBzbWFsbCBvcHRpbWl6ZXIKCSAgZm9yIHVuaW9ucywgaW1wcm92ZSBbbl0gYW5kIFtsYXN0KCldLCBhdm9pZCBzb21lIGNvc3RseSBvcHMuCgpGcmkgSnVuIDI5IDIzOjI2OjU0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggcGFyc2VyLmM6IHhtbFN0cnN0ciBhcmdzIGFyZSBib3RoIGNvbnN0CgkqIHhwYXRoLmM6IHNtYWxsIGNsZWFudXAKCSogeG1sR2V0TnNMaXN0OiByZWZvcm1hdGVkLCBmaXhlZCBwcm9ibGVtcyBpZiB1c2VkIG9uIEVudGl0aWVzCgpUaHUgSnVuIDI4IDE4OjE5OjQ0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL3htbC5odG1sOiBhZGRlZCAxLjguMTQgYW5kIDIuMy4xMyByZWxlYXNlcwoKVGh1IEp1biAyOCAxODoxNjoyOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcmVsZWFzZWQgMi4zLjEzCgkqIE1ha2VmaWxlLmFtIGV4YW1wbGUvTWFrZWZpbGUuYW06IHdvcmthcm91bmQgYXV0b21ha2UgZ2VuZXJhdGluZwoJICBlcnJvbmVvdXMgZGVwcwoKVGh1IEp1biAyOCAxNTowODoyMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogYnVnICM1NjgwMSBZb24gRGVyZWsgcHJvdmlkZWQgYSBwYXRjaAoJICB0byB0aGUgd2luZG93cyBjb25maWcgZmlsZS4KClRodSBKdW4gMjggMTQ6NTE6NDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cG9pbnRlci5jIGluY2x1ZGUvd2luMzJjb25maWcuaCB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZGVmLnNyYwoJICBsaWJ4bWwuaCA6IFlvbiBEZXJlayBwcm92aWRlZCBhIHNldCBvZiBjaGFuZ2VzIHRvIGNvbXBpbGUgZnJvbQoJICBDVlMgb24gV2luZG93cy9NU0MKClRodSBKdW4gMjggMTQ6MTE6MjggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZml4ZWQgVVRGOCBCT00gc3VwcG9ydCBpbiBwdXNoIG1vZGUKCSogdGVzdC91dGY4Ym9tLnhtbCByZXN1bHQvdXRmOGJvbS54bWwgcmVzdWx0L25vZW50L3V0Zjhib20ueG1sOgoJICBhZGRlZCBhIHNwZWNpZmljIHRlc3RjYXNlCgpXZWQgSnVuIDI3IDE4OjMzOjEzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IGFkZGVkIC0tcHVzaCByZWdyZXNzaW9uIHRlc3RzCgkqIHBhcnNlckludGVybmFscy5jOiB0aGUgWE1MIHBhcnNlciBzZWdmYXVsdGVkIGluIC0tcHVzaCBtb2RlCgpXZWQgSnVuIDI3IDEzOjA5OjUxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBtb3ZlZCB0aGUgc3ltbGlua3MgZGV0ZWN0aW9uIHdpdGhpbiBhIENWUwoJICBjaGVjaywgdGhpcyBpcyBub3QgcG9ydGFibGUgYW5kIHdpbGwgYmUgcmVtb3ZlZCBzb29uLgoJKiB4cGF0aC5jOiBzbWFsbCBjbGVhbnVwL3NwZWVkdXAKClR1ZSBKdW4gMjYgMTg6MDU6MjYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW4gZG9jL3htbC5odG1sIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOgoJICByZWxlYXNlIG9mIDIuMy4xMgoJKiBwYXJzZXIuYzogbWFrZSBhbiBlcnJvciBtZXNzYWdlIGlmIHVua25vdyBlbnRpdGllcyBpbiBhbGwgY2FzZXMKClR1ZSBKdW4gMjYgMDk6NDY6MjkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB1cmkuYzogZml4ZWQgMiB1cmkgbm9ybWFsaXphdGlvbiBidWdzIG9uICcvLycgcmVkdWN0aW9uCgpNb24gSnVuIDI1IDE4OjA2OjIzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW06IExhc3psbyBQZXRlciBwb2ludGVkIG91dCB0aGF0CgkgIGluY2x1ZGVzIHdlcmUgaW5zdGFsbGVkIGluIHRoZSB3cm9uZyBkaXIKCk1vbiBKdW4gMjUgMTc6MDc6MzcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvaHRtbC54bWw6IHdhcm4gYWdhaW5zdCBzZW5kaW5nIGNvZGUgdG8gZXhoaWJpdCBidWdzLgoKU3VuIEp1biAyNCAyMzozMTo1NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHBhdGNoIHRvIHhtbFhQYXRoRm9ybWF0TnVtYmVyIGZvciB0aGUgb3B0aW1pemVyIG9uCgkgIFRydTY0IGZyb20gVGhvbWFzIExlaXRuZXIKClN1biBKdW4gMjQgMTQ6MDU6NTQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBBVVRIT1JTOiBhZGRlZCBXaWxsaWFtIGFuZCBCam9ybgoJKiBpbmNsdWRlL2xpYnhtbC8qLmggKi5jIFJFQURNRSBkb2MvKi5odG1sIGV0Yy46IGNoYW5nZWQgb2xkIGVtYWlsIHRvCgkgIGRhbmllbEB2ZWlsbGFyZC5jb20gaG9wZWZ1bGx5IEkgd29uJ3QgaGF2ZSB0byBkbyB0aGlzIGFnYWluCgkqIGRvYy9NYWtlZmlsZS5hbSBkb2MvaHRtbC8qLmh0bWw6IGNsZWFudXAgbWFrZWZpbGUsIGNoZWNrZWQgdGhhdAoJICBkb2NzIGNhbiBiZSByZWJ1aWx0IGNsZWFubHkgbm93CgkqIGluY2x1ZGUvbGlieG1sL3htbCp2ZXJzaW9uLmgqOiByZW1vdmVkIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaAoJICBmcm9tIENWcyBpdCdzIGdlbmVyYXRlZCwgYWRkZWQgaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmgKCSAgYWxzbyBnZW5lcmF0ZWQgYnV0IHdoaWNoIHNob3VsZCBjaGFuZ2UgZmFyIGxlc3MgZnJlcXVlbnRseS4KCSogY2F0YWxvZy5jIG5hbm9mdHAuYzogbWFkZSBzdXJlIHRvIGluY2x1ZGUgbGlieG1sLmggbm90CgkgIGxpYnhtbC94bWx2ZXJzaW9uLmggZGlyZWN0bHkKCSogaW5jbHVkZS9saWJ4bWwvKi5oOiBpbmNsdWRlIHhtbHdpbjMydmVyc2lvbi5oIGluc3RlYWQgb2YgeG1sdmVyc2lvbi5oCgkgIHdoZW4gY29tcGlsaW5nIG9uIFdJTjMyIGFuZCBNU0MKClNhdCBKdW4gMjMgMjM6NTQ6MTIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL01ha2VmaWxlLmFtIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbjoKCSAgZml4ZWQgbWFrZSBkaXN0Y2hlY2sgYW5kIHJlYnVpbGRpbmcgdGhlIHJwbXMKClNhdCBKdW4gMjMgMjA6NTA6NTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IHNob3VsZCBmaW5pc2ggdGhlIG1pZ3JhdGlvbiBvZiBleHBvcnRlZCBpbmNsdWRlcwoJICBpbnRvIGEgcmVhbCBpbmNsdWRlL2xpYnhtbCBpbiBDVlMsIGF0IGxlYXN0IGZvciBDVlMgdXNlcnMuCgkqIHJlbW92ZWQgdGhlIGV4cG9ydGVkIGhlYWRlcnMsIGFkZGVkIGluIGluY2x1ZGUvbGlieG1sIChhcyB3ZWxsCgkgIGFzIHhtbHZlcnNpb24uaC5pbikuCgpTYXQgSnVuIDIzIDIwOjM3OjE5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBmaXhlZCB0aGUgd2F5IHRvIGRldGVjdCBzeW1saW5rCgpTYXQgSnVuIDIzIDIwOjMwOjExIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiB1cGRhdGVkLCBpbmNsdWRlL2xpYnhtbCBpcyBub3cgYSByZWFsIENWUyBkaXIKClNhdCBKdW4gMjMgMTk6MzY6MzEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvbGlieG1sLWRvYy5lbDogYSBuZXcgdmVyc2lvbiBvZiBsaWJ4bWwtZG9jLmVsLiBUaGlzIG5ldwoJICB2ZXJzaW9uIHdvcmtzIHdpdGggYm90aCBsaWJ4bWwxIGFuZCBsaWJ4bWwyIChpdCBhdXRvZGV0ZWN0cwoJICB0aGUgcHJlZml4IG9mIHRoZSBodG1sLWZpbGVzKSBmcm9tIEZlbGl4IE5hdHRlci4KCSogZG9jL3htbC5odG1sOiB1cGRhdGVkIGRvYyBhY2NvcmRpbmdseQoKU2F0IEp1biAyMyAxODozMDoyOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIHRoZSBidWcgZ2VuZXJhdGluZyBhIHRlbXBsYXRlIGxvb3AgaW4gbGlieHNsdAoJICB3aGVuIHVzaW5nIGRvY2Jvb2steHNsLTEuNCwgKiBzaG91bGQgZmlsdGVyIG91dCBkb2N1bWVudCBub2RlcwoJKiBIQUNLSU5HOiBhZGRlZCBXaWxsaWFtCgkqIFRPRE86IHVwZGF0ZWQKCkZyaSBKdW4gMjIgMTg6MDI6MzcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvRkFRLmh0bWw6IGFkZGVkIGEgd2FybmluZyBhYm91dCBnY2MtMy4wCgkqIGRvYy94bWwuaHRtbDogYWRkZWQgcmVmZXJlbmNlIHRvIGdkb21lMiBhbmQgcmVtb3ZlZCBhIGNvbmZ1c2luZwoJICBzZW50ZW5jZQoKRnJpIEp1biAyMiAxNzowMjoxNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbHZlcnNpb24uaDogb2theSB0aGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGUsIGJ1dCBXaW5kb3dzCgkgIHVzZXJzIG5lZWQgaXQgYW5kIHRoZXkgY2FuJ3QgZ2VuZXJhdGUgaXQsIGFuZCBJIHdhbnQgQ1ZTCgkgIFdpbmRvd3MgdXNlcnMgLi4uCgkqIHdpbjMyL2xpYnhtbDIvbGlieG1sMl9zby5kc3A6IFdpbmRvd3MgcHJvamVjdCBmaWxlIGZvciAKCSAgdGhlIHNoYXJlZCBsaWIgdmVyc2lvbiBvZiBsaWJ4bWwyCgkqIHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kZWYuc3JjOiBidWcgIzU2NTI3IHNldCBvZiBleHBvcnRlZAoJICByZXNvdXJjZXMgbmVlZGVkIGZvciBsaWJ4c2x0L3hzbHRwcm9jIGJ5IFlvbiBEZXJlawoKRnJpIEp1biAyMiAxNjozOTozNiBDRVNUIDIwMDEgQmpvcm4gUmVlc2UgPGJyZWVzZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgoJKiB0cmlvLmM6IE1TVkMgZml4IChwcm92aWRlZCBieSBJZ29yIFpsYXRrb3ZpYykKCQpGcmkgSnVuIDIyIDEyOjQyOjE2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBhbm90aGVyIHNtYWxsIGZpeCBmb3IgQVRUUklCVVRFX1VOVVNFRAoKRnJpIEp1biAyMiAxMjo0MjoxNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogWW9uIERlcmVrIHByb3ZpZGVkIGEgZmlyc3QgZml4CgkgIHRvIGJlIGFibGUgdG8gY29tcGlsZSBsaWJ4c2x0L3hzbHRwcm9jIG9uIFdpbmRvd3MKCkZyaSBKdW4gMjIgMDA6MDQ6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBhdHRlbXB0IHRvIHdvcmsgYXJvdW5kIHdoYXQgc2VlbWVkIGEgZ2NjIG9wdGltaXplcgoJICBidWcgd2hlbiBoYW5kbGluZyBmbG9hdHMgb24gaTM4NiBodHRwOi8vdmVpbGxhcmQuY29tL2djYy5idWcKCSogdHJlZS5jIGVudGl0aWVzLmMgZW5jb2RpbmcuYzogZG9pbmcgc29tZSBjbGVhbnVwcyB3aGlsZQoJICBjaGFzaW5nIGl0CgpUaHUgSnVuIDIxIDEzOjEzOjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IGNsZWFudXAgd2hlbiAtLXdpdGhvdXQtZGVidWcgaXMgc3BlY2lmaWVkCgkqIHhpbmNsdWRlLmMgeHBhdGguYyB4cGF0aEludGVybmFscy5oIHhwb2ludGVyLmM6IGNsZWFudXAKCSAgdy5yLnQuIC0td2l0aG91dC1kZWJ1ZyBhbmQgb3RoZXIgaW5jbHVkZSBwb2ludHMKCSogY2F0YWxvZy5oIHRlc3RDYXRhbG9nLmM6IGEgYml0IG9mIGNsZWFudXAgYW5kIHByZXBhcmUgZm9yIFhNTAoJICBDYXRhbG9ncwoJKiBjb25maWd1cmUuaW4gZW50aXRpZXMuaCB0cmVlLmggSFRNTHBhcnNlci5jOiByZW1vdmVkCgkgIC0td2l0aG91dC1jb3JiYSwgbWFkZSB0aGUgX3ByaXZhdGUgZmllbGQgbWFuZGF0b3J5CgpXZWQgSnVuIDIwIDE5OjM3OjI1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgZW5jb2RpbmcuYzogU2luY2UgTm90ZXBhZCBvbiBXaW4yawoJICBvdXRwdXRzIGEgQk9NIGluIFVURjgsIGFuIGVycmF0YSBoYXMgYmVlbiBpc3N1ZWQgdG8gYXZvaWQgdGhlCgkgIHByb2JsZW0sIHRoYXQgd2FzIHRoZSBtb3N0IHJlYXNvbmFibGUgc29sdXRpb24uLi4gQWRkIHN1cHBvcnQKCSAgZm9yIGEgbGVhZGluZyBVVEY4IEJPTSBpbiBlbnRpdGllcy4KCldlZCBKdW4gMjAgMTU6Mzg6NTkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBmaXhlZCBhIGJ1ZyBmb3VuZCB3aGVuIHBvc3QgdmFsaWRhdGluZyBhbiBlbnRpdHkgcmVmCgkqIHhtbGxpbnQuYzogYWRkZWQgLS1sb2FkZHRkIGFuZCBzbGlnbHkgY2hhbmdlZCAtLXBvc3R2YWxpZCB0bwoJICBhY3RpdmF0ZSBpdCB0b28KClR1ZSBKdW4gMTkgMjA6MDM6NDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmMgeGluY2x1ZGUuYyB4cG9pbnRlci5jOiBidWcgIzU2NDAyIGV4cG9zZWQgYSBudW1iZXIgb2YKCSAgd2Vha25lc3MgaW4gdGhlIG5vZGUgY29weSB0aGUgWFBvaW50ZXIgYW5kIHRoZSBYSW5jbHVkZQoJICBpbXBsZW1lbnRhdGlvbnMuIFNlcmlvdXMgY2xlYW51cC4KClR1ZSBKdW4gMTkgMTQ6NTA6MTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbTogS2phcnRhbiBNYXJhYXMgcHJvdmlkZWQgYSBzbWFsbCBwYXRjaCB0bwoJICBhZGQgeG1sMi1jb25maWcuaW4gdG8gRVhUUkFfRElTVAoKVHVlIEp1biAxOSAxMzowNDoxMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmMgdHJlZS5jIHBhcnNlckludGVybmFscy5jIHBhcnNlci5jOiBTdGVwaGFuIEt1bG93CgkgIHByb3ZpZGVkIGFub3RoZXIgZmFpbGluZyBjYXNlIGZvdW5kIGluIEtERSwgdGhlIHdheSB0aGUKCSAgY3R4dC0+dmN0eHQubm9kZVRhYiB3YXMgYWxsb2NhdGVkIGFuZCBmcmVlZCBjaGFuZ2VkIG92ZXIKCSAgdGltZSBidXQgaXQgd2Fzbid0IGNvbXBsZXRlbHkgY2xlYW5lZCB1cC4gVGhpcyBzaG91bGQgZml4IGl0LgoKU3VuIEp1biAxNyAxOTo1NjozMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBTdGVwaGFuIEt1bG93IGFsc28gcmFpc2VkIHRoZSBmYWN0IHRoYXQgbGluZSBudW1iZXIKCSAgY291bGQgZ2V0IG1pc2NvdW50ZWQgbWFraW5nIGRlYnVnIGhhcmRlciwgZml4ZWQgdGhlIHByb2JsZW0KCSAgaW4geG1sUGFyc2VDaGFyRGF0YSgpCgpTdW4gSnVuIDE3IDE5OjE3OjI2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogU3RlcGhhbiBLdWxvdyBwb2ludGVkIG91dCBhIHByb2JsZW0gd2hlbiB2YWxpZGF0aW5nCgkgIGFuZCB1c2luZyBhbiBlbXB0eSBlbnRpdHksIGZvcmdvdCBhICdicmVhaycgaW4gYSBjYXNlLgoKU3VuIEp1biAxNyAxNjo0Nzo0MCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogZml4ZWQgeG1sSGFzTnNQcm9wKCkgYWNjb3JkaW5nbHkgdG8gYnVnICM1NTY4MwoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQgd2l0aCAyLjMuMTEKClN1biBKdW4gMTcgMTI6MjQ6MTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBUT0RPOiB1cGRhdGVkIGFkZGluZyBjbGVhbnVwIG9mIGdlbmVyYXRlZCBkb2MKCSogY29uZmlndXJlLmluOiBwcmVwYXJlZCB0byByZWxlYXNlIDIuMy4xMQoJKiB4bWxsaW50LmM6IGFkZGVkIC0tdmVyc2lvbiBmb3IgYnVnIHJlcG9ydGluZwoJKiBkb2MvaHRtbC8qLmh0bWw6IHJlYnVpbHQgdGhlIGRvYwoKU2F0IEp1biAxNiAyMzoyMzozMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpcnN0IHBhcnQgb2YgdGhlIHdvcmsgb24gc2VsZWN0aW5nIG5hbWVzcGFjZSB0bwoJICBmaXggYnVnICM1NjExNSAKClNhdCBKdW4gMTYgMDA6MjA6NDYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSBleGFtcGxlL01ha2VmaWxlLmFtOiBMYXN6bG8gUEVURVIgcHJvdmlkZWQgYSBmaXgKCSAgd2hlbiB1c2luZyAtbGljb252CgkqIFRPRE86IHVwZGF0ZWQKCkZyaSBKdW4gMTUgMDc6MDg6NTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5bY2hdOiBtb3JlIHdvcmsgb24gdGhlIEhUTUwgc2VyaWFsaXphdGlvbiByb3V0bmVzLAoJICBjbGVhbnVwLCBlbmNvZGluZyBzdXBwb3J0LgoKVGh1IEp1biAxNCAxMDozMToxNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IFRob21hcyBCcm95ZXIgc3VnZ2VzdGVkIGEgYmV0dGVyIHBhdGNoIGZvciB0aGUgLyBhcmcKClRodSBKdW4gMTQgMDE6MDE6MzAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBidWcgZGV0ZWN0ZWQgYnkgQW5raCB3aGVuIC8gaXMgdXNlZCBhcyBhIGZ1bmN0aW9uIGFyZwoKV2VkIEp1biAxMyAyMzowODo0NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuW2NoXSBIVE1MdHJlZS5jOiBzdG9yZWQgdGhlIGlubGluZS9ibG9jayBwcm9wZXJ0eQoJICBvZiBlbGVtZW50IGFuZCB1c2UgaXQgdG8gYXZvaWQgb3V0cHV0dGluZyBmb3JtYXR0aW5nIHNwYWNlcyBhdAoJICB0aGUgd3JvbmcgcGxhY2UuIEltcGxlbWVudGVkIHRoZSBmb3JtYXQgcGFyYW1ldGVyIGZvciBIVE1MIHNhdmUuCgkqIHJlc3VsdC9IVE1ML2RvYzIuaHRtIHJlc3VsdC9IVE1ML2RvYzMuaHRtIHJlc3VsdC9IVE1ML2ZwNDAuaHRtCgkgIHJlc3VsdC9IVE1ML3NjcmlwdC5odG1sIHJlc3VsdC9IVE1ML3Rlc3QyLmh0bWwgcmVzdWx0L0hUTUwvdGVzdDMuaHRtbAoJICByZXN1bHQvSFRNTC93aXJlZC5odG1sOiBvZiBjb3Vyc2UgdGhpcyBpbXBhY3QgdGhlIHJlc3VsdCBvZiBhCgkgIG51bWJlciBvZiBIVE1MIHRlc3RzCgpUaHUgSnVuIDE0IDA5OjQ5OjA5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuW2NoXTogc3RhcnRlZCBhdWdtZW50aW5nIHRoZSBIVE1MIHNhdmUgQVBJIHdpdGgKCSAgZW5jb2RpbmcgYW5kIGZvcm1hdHRpbmcgcGFyYW1ldGVycwoKV2VkIEp1biAxMyAwOTo0NDoxNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLmg6IGNsZWFudXAgYW5kIHN0YXJ0ZWQgZXZhbHVhdGluZyB0aGUgd29yayBuZWVkZWQgb24KCSAgcmV2YW1waW5nIHRoZSBIVE1MIG91dHB1dCBjb2RlCgpNb24gSnVuIDExIDE5OjI5OjQwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogRE9DQnBhcnNlci5jOiBoYW5kbGluZyBvZiBQSXMgYW5kIDw/c2dtbC1kZWNsYXJhdGlvbiBpbiBlbnRpdGllcy4KClR1ZSBKdW4gMTIgMDg6NDY6MjggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBmaXhlZCBidWcgIzU2MDQ5LCBmb3Jnb3Qgb25lIGNoZWNrIGluIHRoZQoJICB2YWxpZGF0aW9uIHJvdXRpbmUKClR1ZSBKdW4gMTIgMDg6MDk6NDYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLltjaF06IGdycnIgLi4uIG5hbWVzcGFjZSBpcyBhIEMrKyByZXNlcnZlZCBrZXl3b3JkCgpUdWUgSnVuIDEyIDA2OjI5OjM5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogbGlieG1sLmg6IGZpeGVkIGFuIGVycm9yIGluIGxhc3QgY29tbWl0CgkqIGRvYy9GQVEuaHRtbDogYWRkZWQgYW4gZW50cnkgZm9yIGNvbXBpbGF0aW9uIGZyb20gQ1ZTCgpNb24gSnVuIDExIDEwOjA3OjI5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sdmVyc2lvbi5oLmluIGxpYnhtbC5oOiBDeWd3aW4gcGF0Y2hlcwoJKiB0cmVlLmM6IHhtbEZyZWVOb2RlTGlzdCBwYXRjaCBzaW1pbGFyIHRvIHhtbEZyZWVOb2RlIG9uZQoJKiB0cmVlLmg6IGNsZWFudXAKClNhdCBKdW4gIDkgMTk6MTY6MDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IHBhdGNoZWQgeG1sRnJlZU5vZGUoKSB0byBhdm9pZCBmcmVlaW5nKCkgYSBzdGF0aWMKCSAgbWVtb3J5IGJsb2NrIGluIGEgc3RyYW5nZSBjYXNlIHdoZXJlIGxpYnhtbCBpcyBsaW5rZWQgdHdpY2UKCSAgaW4gdGhlIGJpbmFyeS4KClNhdCBKdW4gIDkgMTg6Mzk6MDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiAoYT8gLCBiPyAsIGM/ICwgLi4uICwgej8pIHdhcyBzdG9yaW5nL3Jlc3RhdXJpbmcKCSAgc3RhdGUgZmFyIHRvbyBvZnRlbiwgc2ltcGxlIGZpeCB1c2VkIHRvIGF2b2lkIGl0LgoKU2F0IEp1biAgOSAxNjoxMDozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhpbmNsdWRlLmM6IFJhcGhhZWwgSGVydHpvZyBoYWQgYSB0cm91YmxlIHdpdGggRFREIG5vZGVzCgkgIGJlaW5nIHByb2Nlc3NlZCwgYXBwbGllZCBoaXMgcGF0Y2gKCSogdHJlZS5jOiBmaXhlZCBhIGJ1ZyByYWlzZWQgaW4geG1sU3RhdGljQ29weU5vZGVMaXN0KCkKClNhdCBKdW4gIDkgMTU6NTA6MTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYyB1cmkuYyBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IElnb3IgIFpsYXRrb3ZpYwoJICBwcm92aWRlZCBmaXhlcyB0byBjb21waWxlIG9uIE1TQ0MgYWdhaW4KCSogd2luMzIvbGlieG1sMi9saWJ4bWwyLmRlZi5zcmMgd2luMzIvbGlieG1sMi9saWJ4bWwyKi5kc3A6IGhlCgkgIGFsc28gcHJvdmlkZWQgYW4gdXBkYXRlIGZvciB0aGUgcHJvamVjdCBmaWxlcy4KClRodSBKdW4gIDcgMjE6NTI6MTAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGFwcGxpZWQgU3RldmUgVGlubmV5IHBhdGNoIHRvIHhtbE5ld05zUHJvcCB0byBmaXgKCSAgYnVnICM1NTgxMAoKVGh1IEp1biAgNyAyMToyOTozOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogZml4ZWQgeG1sR2V0TnNQcm9wKCkgdG8gY2xvc2UgYnVnICM1NTY4MwoJICBOb3RlIHRoaXMgcmVxdWlyZXMgbGlieHNsdCB0byB1c2UgaXQncyBvd24gZnVuY3Rpb24gaW5zdGVhZC4KClRodSBKdW4gIDcgMTg6MDY6MzQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5jOiB3aGVuIGluIGEgcHJlIGVsZW1lbnQgbm8gZm9ybWF0dGluZyBzcGFjZSBzaG91bGQKCSAgYmUgYWRkZWQuCgkqIHRlc3QvSFRNTC9wcmUuaHRtbCByZXN1bHQvSFRNTC9wcmUuaHRtbCo6IGFkZGVkIGEgcmVncmVzc2lvbiB0ZXN0CgpUaHUgSnVuICA3IDE3OjI5OjM4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBhZGRlZCB0ZXN0cyBmb3Igc2lnbmFsKCkgYW5kIHNpZ25hbC5oCgpGcmkgSnVuICA4IDEwOjE3OjE1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogcm9iZXJ0IHBvaW50ZWQgb3V0IHhtbFhQYXRoTklORiB3YXMgbm90IGluaXRpYWxpemVkCgpGcmkgSnVuICA4IDEwOjAxOjQ1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL2xpYnhtbC1kb2MuZWw6IEZlbGl4IE5hdHRlciBwcm92aWRlZCBhIG5ldyB2ZXJzaW9uIGZvcgoJICBsaWJ4bWwyCgpGcmkgSnVuICA4IDA3OjIwOjQ2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuYzogd2hlbiBpbiBhIHByZSBlbGVtZW50IG5vIGZvcm1hdHRpbmcgc3BhY2Ugc2hvdWxkCgkgIGJlIGFkZGVkLgoKV2VkIEp1biAgNiAxODowNzozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogYWRkIC1taWVlZSB0byBDRkxBR1Mgd2hlbiBjb21waWxpbmcgb24gTGludXgvYWxwaGEKClRodSBKdW4gIDcgMDY6NDQ6MDEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBET0NCcGFyc2VyLmM6IGltcGxlbWVudGVkIHRoZSA8P3NnbWwtZGVjbGFyYXRpb24gZW5jb2Rpbmc9Inh4eCI/PgoJICBoYWNrCgkqIHRyZWUuW2NoXTogYWRkZWQgeG1sSGFzTnNQcm9wIGFzIHN1Z2dlc3RlZCBpbiBidWcgcmVwb3J0ICM1NTY1MyAKCSogdXJpLmM6IGZpeGVkIGEgd2FybmluZwoKVHVlIEp1biAgNSAyMjo1NDoyMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLmM6IHRyeWluZyB0byBjbG9zZSBidWcgIzU1NzcyIGVzY2FwaW5nIGluIHNjcmlwdAoJICBlbGVtZW50cwoJKiBkb2MveG1sLmh0bWw6IHN1Z2dlc3QgdG8gc2VuZCBtYWlsIHRvIHRoZSBsaXN0CgpUdWUgSnVuICA1IDE5OjExOjAyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZXJyb3IuYzogYXR0ZW1wdCB0byBmaXggdGhlIHhtbEdldFZhclN0ciBicmVha2FnZSBvbmNlIGFuZCBmb3IKCSAgZ29vZC4gVXNlIGEgbWFjcm8gYW5kIGJhc2VkIG9uIHRoZSBzb2x1dGlvbiBwcm92aWRlZCBpbiAKCSAgdnNucHJpbnRmIG1hbnVhbCBwYWdlIGZyb20gR05VLgoKVHVlIEp1biAgNSAxNDo0NjoxMCBDRVNUIDIwMDEgQmpvcm4gUmVlc2UgPGJyZWVzZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgoJKiBlcnJvci5jOiBXb3JrYXJvdW5kIGZvciBub24tcHJlc2VydmluZyB2YXJpYWRpYyBsaXN0LgoJKiB0cmlvLmMgdHJpby5oIHRyaW9wLmggc3RyaW8uYyBzdHJpby5oOiBVcGdyYWRlZCB0byB0cmlvIGJhc2VsaW5lIDEuNAoJClNhdCBKdW4gIDIgMDY6MTI6MzMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MveG1sLmh0bWw6IGFkZGVkIDIuMy4xMCByZWxlYXNlCgpGcmkgSnVuICAxIDExOjI3OjExIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiByZWxlYXNpbmcgMi4zLjEwCgpUaHUgTWF5IDMxIDIwOjQyOjM5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sSU8uYzogR2FyeSBQZW5uaW5ndG9uIHNwb3R0ZWQgYSBmZXcgdHJvdWJsZXMgd2l0aCBmaWxlOi8vLwoKVGh1IE1heSAzMSAyMDoxODo1OSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGVuY29kaW5nLmM6IFJvYmVydCBDb2xsaW5zIHByb3ZpZGVkIGEgcGF0Y2ggdG8gYWRkIHRoZQoJICAiVVMtQVNDSUkiIGVuY29kaW5nIGFsaWFzCgpXZWQgTWF5IDMwIDIxOjEyOjQ1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYyBlbmNvZGluZy5bY2hdOiBXaWxsaWFtIE0uIEJyYWNrIHByb3ZpZGVkIGEgc2V0IG9mIFVURjgKCSAgc3RyaW5nIG9yaWVudGVkIGZ1bmN0aW9ucyBhbmQgc3RhcnRlZCBjbGVhbmluZyB0aGUgcmVsYXRlZCBhcmVhcwoJICBpbiB4cGF0aC5jIHdoaWNoIG5lZWRlZCBmaXhpbmcgaW4gdGhpcyByZXNwZWN0CgpXZWQgTWF5IDMwIDIwOjMwOjQ3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuYzogYXBwbGllZCBwYXRjaCBmcm9tIEphcm9zbGF3IEtvbGFrb3dza2kgdG8gY2xvc2UgYnVnCgkgICM1NTM4MAoJKiB0cmVlLmM6IHBhdGNoIHRvIHhtbE5vZGVHZXRDb250ZW50KCkgdG8gZ2V0IENEQVRBIHNlY3Rpb24gY29udGVudAoKTW9uIE1heSAyOCAxMjo1NjoyOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFRPRE86IHVwZGF0ZWQKCSogbmFub2h0dHAuW2NoXSA6IHN0YXJ0ZWQgYWRkaW5nIEFQSXMgdG8gZ2V0IHRoZSByZWRpcmVjdGVkIFVSTAoJICB3aGVuIHRoaXMgb2NjdXJzIChuZWVkZWQgZm9yIGZ1cnRoZXIgYmFzZSBjb21wdXRhdGlvbgoJKiB0cmVlLmg6IGNsZWFudXAKCSogZW5jb2RpbmcuYzogY2xlYW51cAoJKiBTQVguYzogbWlub3IgY2hhbmdlIGFyb3VuZCBjdHh0LT5sb2Fkc3Vic2V0CgpGcmkgTWF5IDI1IDA5OjM2OjI2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0gaW5jbHVkZS9NYWtlZmlsZS5hbTogc21hbGwgY2hhbmdlIHRvIGhhdmUKCSAgaW5jbHVkZS9saWJ4bWwgcmVidWlsdCBpZiB3b3JraW5nIGZyb20gQ1ZTLgoJKiB1cmkuYzogYXBwbGllZCBhbm90aGVyIHBhdGNoIGZyb20gQ2FybCBEb3VnbGFzIGZvciBVUkkgZXNjYXBpbmcsCgkgIHRoaXMgc2hvdWxkIGNsb3NlIGJ1ZyAjNTE4NzYKCldlZCBNYXkgMjMgMTU6NDA6MjcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4aW5jbHVkZS5jOiBmaXhlZCBYSW5jbHVkZSByZWN1cnNpdmUgYmVoYXZpb3VyIGJ1ZyAjNTQ2NzgKCSogcmVzdWx0L1hJbmNsdWRlL3JlY3Vyc2l2ZS54bWwgdGVzdC9YSW5jbHVkZS9kb2NzL3JlY3Vyc2l2ZS54bWwKCSAgdGVzdC9YSW5jbHVkZS9lbnRzL2luYy50eHQgdGVzdC9YSW5jbHVkZS9lbnRzL3N1Yi1pbmMuZW50OgoJICBhZGRlZCBzcGVjaWZpYyByZWdyZXNzaW9uIHRlc3QKCSogcGFyc2VyLmg6IHByZXBhcmluZyBmb3IgdGhlIFhTTFQgbW9kZSB3aGVyZSBEVEQgaW5oZXJpdGVkCgkgIGF0dHJpYnV0ZXMgYXJlIGFkZGVkIHRvIHRoZSB0cmVlLgoKV2VkIE1heSAyMyAxMzo1OToxOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhpbmNsdWRlLltjaF06IFVwZGF0ZWQgdGhlIG5hbWVzcGFjZSBmb3IgdGhlIExhc3QgQ2FsbCB2ZXJzaW9uCgkqIHJlc3VsdC9YSW5jbHVkZS9pbmNsdWRlIHRlc3QvWEluY2x1ZGUvaW5jbHVkZTogdXBkYXRlZCB0aGUKCSAgdGVzdHN1aXRlIGFjY29yZGluZ2x5CgpXZWQgTWF5IDIzIDEyOjI3OjQ0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdXJpLltjaF06IGFwcGxpZWQgYSBwYXRjaCBmcm9tIENhcmwgRG91Z2xhcyBmb3IgVVJJIGVzY2FwaW5nLAoJICByZWxhdGVkIHRvIGJ1ZyAjNTE4NzYKClR1ZSBNYXkgMjIgMTg6NDY6NTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIGEgZ3Jvc3MgbWlzdGFrZSBpbiBiYXNlIGNvbXB1dGF0aW9uLCB4bWw6YmFzZSBpcwoJICBub3QgY29tcGxldGVseSBjb3JyZWN0IHlldCAobmVlZCBjYXNjYWRlKS4KCSogeHBhdGguW2NoXTogYWRkZWQgdGhlIGZldyB0aGluZ3MgbmVlZGVkIHRvIGZpbmQgYSBmdW5jdGlvbiBuYW1lCgkgIGFuZCBVUkkgZnJvbSB0aGUgWFBhdGggY29udGV4dCB3aGVuIGl0IGlzIGNhbGxlZC4KClR1ZSBNYXkgMjIgMTc6MDA6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjYXRhbG9nLltjaF06IGZpeGVzIGFuZCBhZGQgeG1sTG9hZENhdGFsb2dzKCkKCSogRE9DQnBhcnNlci5jOiBzbWFsbCBjbGVhbnVwCgkqIHhtbGxpbnQuYzogYWRkZWQgYSAtLWNhdGFsb2dzIG9wdGlvbiB0byBsb2FkIGNhdGFsb2dzIGZyb20KCSAgJFNHTUxfQ0FUQUxPR19GSUxFUwoJKiB0cmVlLmM6IGNsZWFudXAKCSogY29uZmlndXJlLmluOiBpY29udiBsaWJyYXJ5IGZpeHVwLCBJQ09OVl9MSUJTIAoKTW9uIE1heSAyMSAxNjowNToyMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNhdGFsb2cuYzogaGFuZGxpbmcgb2YgQ0FUQUxPRyBlbnRyaWVzLiBkZXRlY3Rpb24gb2YgcmVjdXJzaW9uLAoJICBhbmQgYSBmZXcgYnVnZml4ZXMKCSogeHBhdGguYzogZml4aW5nIGJ1ZyAjNTQ5NTEgUU5BTUUgd2l0aCBubyBwcmVmaXggc2hvdWxkIG5vdCBtYXRjaAoJICBhZ2FpbnN0IHRoZSBkZWZhdWx0IG5hbWVzcGFjZQoKTW9uIE1heSAyMSAxMDoxNDowNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IEpvZSBPcnRvbiByZXBvcnRlZCBhIGJ1ZyBmb3VuZCB3aXRoIElSSXggY29tcGlsZXIuCgpTdW4gTWF5IDIwIDE1OjE1OjQ2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVkIHByb3BhZ2F0aW9uIGNvbnRleHQgaW5mbyB3aGVuIHBhcnNpbmcgYW4KCSAgZXh0ZXJuYWwgZW50aXR5LgoJKiBkb2MvaHRtbC8qLmh0bWw6IHJlZ2VuZXJhdGVkIGEgY291cGxlIG9mIGRvY3MKClNhdCBNYXkgMTkgMTc6MTE6MTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZSB3aXRoIDIuMy45IGluZm9ybWF0aW9ucwoKU2F0IE1heSAxOSAxNjo1MDo0NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLmggZGVidWdYTUwuaCBwYXJzZXJJbnRlcm5hbHMuaCB0cmVlLmggdmFsaWQuYwoJICB4bWx2ZXJzaW9uLmguaW4geHBhdGhJbnRlcm5hbHMuaCB4cGF0aC5oOiBzb21lIGNsZWFudXAgZm9yIGd0ay1kb2MKCSogZG9jL2h0bWwvKiA6IHJlYnVpbHQgdGhlIGRvY3MKCSogdmFsaWQuYzogc21hbGwgcGF0Y2ggd2hpY2ggbWF5IGltcHJvdmUgc29tZSBjYXNlIHdoZW4KCSAgdmFsaWRhdGluZy4KClNhdCBNYXkgMTkgMTU6MjA6MDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmM6IENsb3NlZCBidWcgIzU0ODkxCgkqIHJlc3VsdC9IVE1ML2NmXzEyOC5odG1sKiB0ZXN0L0hUTUwvY2ZfMTI4Lmh0bWw6IGFkZGVkIHRoZSB0ZXN0CgkgIHRvIHRoZSBzdWl0ZQoKVGh1IE1heSAxNyAxNDoxNTowNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGVuY29kaW5nLmggaGFzaC5jIG5hbm9mdHAuaCBwYXJzZXIuaCB0cmVlLmggdXJpLmggeGxpbmsuaCB4cG9pbnRlci5jOgoJICBhcHBsaWVkIGEgZG9jdW1lbnRhdGlvbiBwYXRjaCBmcm9tIExvdFIgYW5kIGZpbGxlZCBpbiBhIGZldyBtaXNzaW5nCgkgIGRlc2NyaXB0aW9ucwoKV2VkIE1heSAxNiAyMzowMjo0MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmMgdHJlZS5jIHBhcnNlci5jOiBzcGVlZCBvcHRpbWl6YXRpb25zIGF0IHRoZSBwYXJzZXIgbGV2ZWwKCSAgZG9jdW1lbnQgdHJlZSBmcmVlaW5nIGFuZCB4cGF0aCBldmFsdWF0aW9uCgpXZWQgTWF5IDE2IDEyOjU1OjQ4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmMgcGFyc2VyLmggcGFyc2VySW50ZXJuYWxzLmg6IGZpeGVkIGEgY291cGxlIG9mCgkgIGludGVyZmFjZXMgZm9yIGhhbmRsaW5nIG1lbW9yeSBidWZmZXIgaW5wdXQgdG8gY29uc3QgY2hhciAqCgkgIHVwb24gc3VnZ2VzdGlvbiBvZiBKYW1lc0guCgpUdWUgTWF5IDE1IDE3OjIyOjI3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBMb1RSIHNlbnQgYSBwYXRjaCBmaXhpbmcgdGhlIHByZXZpb3VzIGNvbW1pdCAKClR1ZSBNYXkgMTUgMTQ6NDA6MDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IHRyeWluZyB0byBkZWFsIGFnYWluIHdpdGggdGhlIHN0b29waWQgLVIgbGlua2luZwoJICBmbGFnIG9mIFNvbGFyaXMKClR1ZSBNYXkgMTUgMTI6NDk6NTAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5oOiB0d28gbm9kZXNldCBhY2Nlc3MgbWFjcm9zIGZyb20gVGhvbWFzIEJyb3llcgoKVHVlIE1heSAxNSAxMTo0MjozOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmMgeHBhdGguaCB4cGF0aEludGVybmFscy5oOiBhcHBseSBhbiBYUGF0aCBBUEkgY2xlYW51cAoJICBwYXRjaCBmcm9tIFRob21hcyBCcm95ZXIKClR1ZSBNYXkgMTUgMTA6NTI6MTkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jIHRlc3QvVkNNL3YyWzM0XS54bWw6IEZpeGVkIGJ1ZyAjNTQ2MzEgYWRkZWQgc3BlY2lmaWMgdGVzdAoJICBjYXNlCgkqIElOU1RBTEw6IHdhcyBlbXB0eSBhZGRlZCBzdHVmZiBmcm9tIHRoZSBGQVEKCkZyaSBNYXkgMTEgMTk6Mzc6MzAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLltjaF06IGZpeGluZyBidWcgIzU0NDQ2LCBieSBjbGVhbmluZyBzb21lIGJ1Z3MgaW4gdGhlCgkgIGF0dHJpYnV0ZXMgaGFuZGxpbmcgYW5kICM1NDQzMyBieSBhZGRpbmcgeG1sVW5zZXRQcm9wKCkKCSAgYW5kIHhtbFVuc2V0TnNQcm9wKCkKCkZyaSBNYXkgMTEgMTY6MDc6MTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmM6IFBhdGNoIGZyb20gSm9uYXMgQm9yZ3N0cvZtCgkoaHRtbEdldEVuZFByaW9yaXR5KTogTmV3IGZ1bmN0aW9uLCByZXR1cm5zIAoJdGhlIHByaW9yaXR5IG9mIGEgY2VydGFpbiBlbGVtZW50LgoJKGh0bWxBdXRvQ2xvc2VPbkNsb3NlKTogT25seSBjbG9zZSBpbmxpbmUgZWxlbWVudHMgaWYgdGhleSAKCWFsbCBoYXZlIGxvd2VyIG9yIGVxdWFsIHByaW9yaXR5LgoJKiByZXN1bHQvSFRNTDogdGhpcyBvZiBjb3Vyc2UgY2hhbmdlZCBhIG51bWJlciBvZiB0ZXN0cyByZXN1bHRzLgoKVGh1IE1heSAxMCAxNzozMDoyMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbElPLmMgY2F0YWxvZy5jOiBwbHVnZ2VkIGluIHRoZSBkZWZhdWx0IGNhdGFsb2cgcmVzb2x1dGlvbgoJKiBkb2MvZ25vbWUteG1sLnNnbWw6IGxpbmtlZCBpbiB0aGUgRG9jYm9vayBwYXJzZXIgYW5kIGNhdGFsb2cKCSAgZG9jdW1lbnRhdGlvbnMKCSogZG9jL2h0bWwvbGlieG1sLSouaHRtbDogcmVidWlsZCBhZGRlZCB0aGUgbWlzc2luZyBvbmVzIHRvIENWUwoKVGh1IE1heSAxMCAxNjoxNDozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtIHhtbHZlcnNpb24uaC5pbiBjb25maWd1cmUuaW4gaW5jbHVkZS9NYWtlZmlsZS5hbToKCSAgaW50ZWdyYXRpbmcgY2F0YWxvZ3MKCSogY2F0YWxvZy5bY2hdIHRlc3RDYXRhbG9nLmM6IGFkZGluZyBhIHNtYWxsIGNhdGFsbyBBUEkKCSAgKG9ubHkgU0dNTCBjYXRhbG9nIHN1cHBvcnQpLgoJKiBwYXJzZXIuYzogcmVzdGF1cmVkIHhtbEtlZXBCbGFua3NEZWZhdWx0KDApIEFQSQoKV2VkIE1heSAgOSAxMjo1MDoxNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogemJAYmlzcC5jb20gcmVwb3J0ZWQgYW4gZXJyb3IgaW4geG1sTm9kZUdldExhbmcoKQoKVHVlIE1heSAgOCAxMjozMTo0MCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBhZGRlZCB4bWxQYXJzZUV4dGVybmFsRW50aXR5UHJpdmF0ZSgpIHRvIGFsbG93CgkgIHByb3BhZ2F0aW9uIG9mIGN0eHQtPl9wcml2YXRlIHdoZW4gcGFyc2luZyBleHRlcm5hbCBlbnRpdGllcwoKVHVlIE1heSAgOCAxMDoyNjoyMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLmM6IGZpeGVkIHRoZSBidWcgcmVwb3J0ZWQgYnkgQmpvcm4gaW4gaHRtbE5vZGVEdW1wCgpUdWUgTWF5ICA4IDA5OjMwOjEyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBmaXhlZCBhIHNtYWxsIHBvcnRhYmlsaXR5IHByb2JsZW0gd2l0aCBBTV9DT05ESVRJT05BTAoKTW9uIE1heSAgNyAyMjo0NDo0NSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IHdhcm4gd2hlbiBpbmRldGVybWluaXN0IGNvbnRlbnQgbW9kZWwgaXMgZGV0ZWN0ZWQKCSogcmVzdWx0L1ZDL0VsZW1lbnRWYWxpZDg6IHRoaXMgYWRkcyBhIG1lc3NhZ2UKCSogTWFrZWZpbGUuYW06IGFkZCAtLW5vdmFsaWQgZm9yIFZDTSB0ZXN0cwoJKiBwYXJzZXJJbnRlcm5hbHMuYzogYWRkZWQgYSBjYWxsIHRvIEluaXQgbWVtb3J5IAoKRnJpIE1heSAgNCAxOTo1MToxNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgaHRtbE5ld0RvYyBTWVNURU0gYW5kIFBVQkxJQyBJRCBpbnZlcnNpb24KCSAgd2hlbiBib3RoIHBhcmFtZXRlcnMgYXJlIE5VTEwuCgpGcmkgTWF5ICA0IDE3OjE5OjM5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogYXBwbGllZCBzbWFsbCBwYXRjaCBmcm9tIEdhcnkgUGVubmluZ3RvbiwgcmVpbmRlbnRlZAoJICBzb21lIHBhcnQgb2YgdGhlIGNvZGUuCgpUaHUgTWF5ICAzIDEzOjEwOjQzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluIGRvYy94bWwuaHRtbCBkb2MvaHRtbC8qOiBwcmVwYXJpbmcgZm9yIDIuMy44CgkgIHJlbGVhc2UsIHVwZGF0ZWQgYW5kIHJlZ2VuZXJhdGVkIHRoZSBkb2NzCgpUaHUgTWF5ICAzIDEyOjQ3OjQ2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYyByZXN1bHQvWFBhdGgvZXhwci9mbG9hdHMgOiBjbGFyaWZpZWQgYW5kIGNsZWFudXAKCSAgcHJpbnRpbmcgb2YgYWJub3JtYWwgZmxvYXRzIGluIHRlc3RzLgoKVGh1IE1heSAgMyAxMDoyNToxOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYzogdHJ5aW5nIHRvIGZpeCB0aGUgcHJvYmxlbSByZXBvcnRlZCBieSBKb25hcyBCb3Jnc3Ry9m0KCSogcmVzdWx0cy9IVE1MLyA6IGEgZmV3IGNoYW5nZXMgaW4gdGhlIG91dHB1dCBvZiB0aGUgSFRNTCB0ZXN0cyBhcwoJICBhIHJlc3VsdC4KCSogY29uZmlndXJlLmluOiB0eWluZyB0byBmaXggLWxpY29udiB3aGVyZSBuZWVkZWQKCldlZCBNYXkgIDIgMTk6MTA6MjYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbTogZml4ZWQgYSBzdHVwaWQgZXJyb3IKCldlZCBNYXkgIDIgMTg6Mzk6MzkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW06IG1ha2UgdGhlIGluY2x1c2lvbiBvZiB0aGUgdHJpbwoJICBtb2R1bGVzIGluIHRoZSBsaWJyYXJ5IGNvbmRpdGlvbmFsCgpXZWQgTWF5ICAyIDE0OjM5OjU3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogRE9DQnBhcnNlci5jOiBwYXRjaGUgZnJvbSAgTOFzemzzIEtvduFjcywgZml4ZWQgZW50aXRpZXMgcmVmcwoJICBpbiBhdHRyaWJ1dGVzIGhhbmRsaW5nCgpXZWQgTWF5ICAyIDEyOjU2OjA0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sSU8uYzogQmpvcm4gUmVlc2UgcHJvdmlkZWQgYSBmaXggZm9yIGEgcHJvYmxlbSBvbiBidWZmZXIKCSBmbHVzaGluZwoKTW9uIEFwciAzMCAyMjoyOTozNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeCBvZiBhbiBYU0xUIG5hbWVzcGFjZSBidWcgcmVwb3J0ZWQgb24gdGhlIGxpc3QKCSAgZ2VuZXJhbC9idWctOC0KCk1vbiBBcHIgMzAgMTk6NDI6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBzdHJpby5oIHRyaW8uYzogRGFuIE1jTmljaG9sIHN1Z2dlc3RlZCBhIGNvdXBsZSBvZiBzbWFsbAoJICBmaXhlcyBmb3IgQUlYIDQuMy4zIHVzaW5nIFZpc3VhbCBBZ2UgNS4wLjIgY29tcGlsZXIKCk1vbiBBcHIgMzAgMTM6NDQ6NDggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmMgcGFyc2VyLmMgZW5jb2RpbmcuYzogc3BlbnQgYSBiaXQgbW9yZSB0aW1lIGxvb2tpbmcKCSAgYXQgdGhlIHBhcnNpbmcgc3BlZWQgYW5kIERPTSBoYW5kbGluZy4gQWRkZWQgYSBmZXcgbW9yZQoJICBzcGVlZHVwcy4KClN1biBBcHIgMjkgMjE6NTM6NDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogc21hbGwgYnV0IGVmZmVjdGl2ZSBwYXJzaW5nIHNwZWVkIGltcHJvdmVtZW50CgpTdW4gQXByIDI5IDE5OjAyOjEzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBkZWZhdWx0IG9uIHRoZSBEb2NCb29rIHBhcnNlciBpbmNsdXNpb24gKGZvciBHbm9tZSkKCSogRE9DQnBhcnNlci5oOiBmaXhlZCBhIGhlYWRlciByZWZlcmVuY2UKClNhdCBBcHIgMjggMTk6MDA6MzkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW4geHBhdGguYzogYXBwbGllZCBCam9ybiBwYXRjaGVzIGZvciBGUEUgb24gdGhlCgkgIGFscGhhCgpTYXQgQXByIDI4IDE4OjU0OjI4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5bY2hdIHhtbElPLmg6IGFwcGxpZWQgcGF0Y2ggZnJvbSBKb2UgTWNBbGVybmV5IHRvIGFkZAoJICB4bWxTYXZlRm9ybWF0RmlsZVRvKCkKClNhdCBBcHIgMjggMTY6MzM6MDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBzaW1wbGUgYW5kIGVmZmljaWVudCBvcHRpbWl6YXRpb24sIFhQYXRoIGZ1bmN0aW9ucwoJICBhd2F5cyBiaW5kIHRvIHRoZSBzYW1lIGNvZGUsIGNhY2hlIHRoaXMKCSogVE9ETzogdXBkYXRlZCAoYnkgc2F5aW5nIHNvbWUgaXMgb2Jzb2xldGUpCgpTYXQgQXByIDI4IDE0OjIzOjMwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogbW9yZSBjbGVhbnVwIHdvcmsgb24gWFBhdGggbmFtZSBwYXJzaW5nIHJvdXRpbmVzCgpGcmkgQXByIDI3IDE5OjA2OjEzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VySW50ZXJuYWxzLmMgeHBhdGguW2NoXTogc29tZSBVVEY4IGNsZWFudXAgb24KCSAgeG1sWFBhdGhQYXJzZU5hbWUKCSogeHBhdGguYzogSWdvciBabGF0a292aWMgc3VnZ2VzdGVkIGEgY2hhbmdlIGZvciBOQU4gYW5kIE1TQwoJKiBkZWJ1Z1hNTC5jOiBhdm9pZCBjb21waWxhdGlvbiBwcm9ibGVtcyBpZiBjb21waWxpbmcgd2l0aG91dAoJICBIVE1MIHN1cHBvcnQsIElnb3IgWmxhdGtvdmljCgkqIHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kZWYuc3JjOiBiZWluZyBhYmxlIHRvIGNvbXBpbGUgd2l0aG91dAoJICBYUGF0aCBvbiBXaW5kb3dzCgpUaHUgQXByIDI2IDIyOjUzOjAzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogbGlieG1sLm00OiB5ZXQgYW5vdGhlciBwYXRjaCBmcm9tIFRvc2hpbyBLdXJhdG9taQoKVGh1IEFwciAyNiAyMToyNzo0MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGxpYnhtbC5tNCBsaWJ4bWwyLXNwZWMuaW46IG5ldyBwYXRjaGVzIGZyb20gVG9zaGlvIEt1cmF0b21pCgpUaHUgQXByIDI2IDIwOjUzOjQ4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5bY2hdOiBhZGRlZCB4bWxTYXZlRm9ybWF0RmlsZSBpbnRlcmZhY2UgZm9yIHNhdmluZwoJICBhbmQgaW5kZW50aW5nIGEgZmlsZS4KClRodSBBcHIgMjYgMTY6MzU6NTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCBidWcgIzUzNjg5IHJlbGF0ZWQgdG8gcHJvY2Vzc2luZy1pbnN0cnVjdGlvbigpCgpUaHUgQXByIDI2IDEyOjU3OjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogRE9DQnBhcnNlci5jOiBwYXRjaGUgZnJvbSAgTOFzemzzIEtvduFjcwoKVGh1IEFwciAyNiAxMTozMTo1NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBhcHBsaWVkIGZpeGVzIGZyb20gQ2hyaXN0aWFuIEdsYWhuIGJ1ZyByZXBvcnQgIzUzMzkxCgpUaHUgQXByIDI2IDExOjE0OjU2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZXJyb3IuYzogSmVhbiBGcmFu529pcyBMZWNvbXRlIHByb3ZpZGVkIGEgY29tcGxldGUgZGVzY3JpcHRpb24KCSAgYW5kIGEgZml4IHRvIGJ1ZyAjNTM1MzcKClRodSBBcHIgMjYgMDk6NDI6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBsaWJ4bWwubTQ6IGFkZGVkIEFNX1BBVEhfWE1MMiBwcm92aWRlZCBieSBUb3NoaW8gS3VyYXRvbWkKCldlZCBBcHIgMjUgMjE6MDU6MzEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBET0NCcGFyc2VyLmMgU0FYLmM6IGEgYml0IG1vcmUgd29yayBvbiBlbnRpdGllcyBwcm9jZXNzaW5nLgoJICBTdGlsbCBOZWVkIHRvIGNsZWFudXAgWE1MIG91dHB1dCBhbmQgcmVmZXJlbmNlcyBpbiBhdHRyaWJ1dGVzCgpXZWQgQXByIDI1IDE3OjUyOjI3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogRE9DQnBhcnNlci5jIGluY2x1ZGUvTWFrZWZpbGUuYW06IHR3byBwYXRjaGVzIGZyb20gIEzhc3ps8yBLb3bhY3MKCldlZCBBcHIgMjUgMTQ6NTY6MjYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IHRyeWluZyB0byBmaXggIzUzNTc0LCBub3QgY29tcGxldGVseSBjb21wbGV0ZSwKCSAgSSB3b3VsZCBsaWtlIHhtbGxpbnQgLS1jb3B5IC0tZGVidWcgdGVzdC9lbnQxIGFuZAoJICB4bWxsaW50IC0tZGVidWcgdGVzdC9lbnQxIHRvIHNob3cgdGhlIHNhbWUgcmVzdWx0LgoJKiB4cGF0aC5jOiBmaXggYSBidWcgd2hlbiB0cnlpbmcgdG8gc29ydCBuYW1lc3BhY2Ugbm9kZXMKCldlZCBBcHIgMjUgMTI6Mjg6NTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5jOiByZWFsIGZpeCBmb3IgICM1MzQwMgoKVHVlIEFwciAyNCAxNzozNjozNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLmMgSFRNTHRyZWUuaCA6IGNsb3NpbmcgIzUzNDAyIGkuZS4gb3V0cHV0IG9mCgkgIFBJcyB3aGVuIHVzaW5nIHhzbDpvdXRwdXQKCSogdmFsaWQuYzogY2xvc2luZyAjNTM1Mzcgc29tZSBjYXNlIGdlbmVyYXRlIHNlZ2ZhdWx0cyBpZiB0aGVyZQoJICBpcyB2YWxpZGl0eSBlcnJvcnMKClR1ZSBBcHIgMjQgMTU6MTk6NTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBTQVguYyB0ZXN0RG9jYm9vay5jIERPQ0JwYXJzZXIuYzogbW9yZSB3b3JrIG9uIHRoZSBzdXBwb3J0CgkgIG9mIGV4dGVybmFsIHBhcnNlZCBlbnRpdGllcywgYWRkZWQgLS1ub2VudCB0byB0ZXN0RG9jYm9vawoJKiB2YWxpZC5jOiBHYXJyeSBQZW5uaW5ndG9uIGZvdW5kIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUKCSAgYWNjZXNzIGluIHhtbFZhbGlkYXRlRWxlbWVudENvbnRlbnQoKQoKVHVlIEFwciAyNCAxNDo0MToyNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYyA6IEhUTUwgcGFyc2luZyBzdGlsbCBzdWNrcyAuLi4gdHJ5aW5nIHRvIGRlYWwKCSAgd2l0aCBtYWRuZXNzCgkqIHJlc3VsdC9IVE1MLyA6IHRoaXMgbW9kaWZpZWQgdGhlIHJlc3VsdCBvZiB0aGUgcmVncmVzc2lvbiB0ZXN0cwoJICBhIGxvdC4KClR1ZSBBcHIgMjQgMTQ6MTA6MzggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBlbnRpdGllcy5jOiB4bWxFbmNvZGVFbnRpdGllc1JlZW50cmFudCBmaXhlZCBhIGZldyBhY2Nlc3NlcwoJICB0byBkb2Mgd2hlcmUgaXQgd2Fzbid0IGNoZWNrZWQgYWdhaW5zdCBOVUxMIHJlcG9ydGVkIGJ5CgkgIEplbnMgTGFhcwoKVHVlIEFwciAyNCAxMzoyMTozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYzogSm9uYXMgQm9yZ3N0cvZtIHBhdGNoLCB0aGUgPHRkPiwgYW5kIDx0aD4gZWxlbWVudHMKCSAgbm93IG1lYW5zIHRoZSBlbmQgb2YgYW55IG9wZW4gPHNwYW4+LDxmb250Piw8YT4sPGI+LDxpPiw8dT4uCgpNb24gQXByIDIzIDE1OjQwOjA0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogRE9DQnBhcnNlci5jIERPQ0JwYXJzZXIuaCB0ZXN0RG9jYm9vay5jIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbQoJICB4bWx2ZXJzaW9uLmguaW46IHN0YXJ0ZWQgKHJlKWludGVncmF0aW5nIHRoZSBEb2NCb29rIFNHTUwgcGFyc2VyLgoJKiBTQVguW2NoXTogY2xlYW51cCBhbmQgdXBkYXRlcyBmb3IgRG9jQm9vawoJKiBkZWJ1Z1hNTC5jIHBhcnNlci5oIHRyZWUuW2NoXSB2YWxpZC5jIHhwYXRoLmM6IHNtYWxsIG1hY3JvIG9yCgkgIGV4IFNHTUwgaWRlbnRpZmllciBjaGFuZ2VzCgkqIHZhbGlkLmM6IHJlbW92ZWQgYSBzdGF0aWMgdW51c2VkIGZ1bmN0aW9uLgoKTW9uIEFwciAyMyAxMTowNTo1NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLmM6IGFwcGxpZWQgY2hhbmdlIGZvciBQYXVsIFNwb25hZ2wgb24gc2NyaXB0IHNhdmluZwoJKiBNYWtlZmlsZS5hbTogdGhlIHdhcm5pbmcgYWJvdXQgZW50aXR5IHRpdGxlLnhtbCBhcmUgbm9ybWFsLgoKU3VuIEFwciAyMiAyMjowOTozNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzZSBvZiAyLjMuNwoJKiBNYWtlZmlsZS5hbTogZml4aW5nIG1ha2UgZGlzdGNoZWNrCgpTdW4gQXByIDIyIDIxOjI5OjUyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL2h0bWwvKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQgYW5kIHJlZ2VuZXJhdGVkIHRoZSBkb2NzCgpTdW4gQXByIDIyIDIxOjExOjQ1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgdGhlIFhQb2ludGVyIHByb2JsZW0gaW50cm9kdWNlZCBpbiAyLjMuNgoKU3VuIEFwciAyMiAxNDoxMTo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogZml4ZWQgIzUzMzg4IHdpdGggdGhlIHByb3ZpZGVkIHBhdGNoCgpTdW4gQXByIDIyIDEyOjM0OjQxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogQmpvcm4gZGV0ZWN0ZWQgYW4gaW52YWxpZCBtZW1vcnkgYWNjZXNzLiBGaXhlZAoJICB2c3RhdGVWUHVzaCgpCgpTdW4gQXByIDIyIDEwOjQ5OjIzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgeG1sWFBhdGhDb21waWxlIHRvIGRldGVjdGVkIHVucHJvcGVybHkgZW5kZWQgZXhwcgoKU2F0IEFwciAyMSAxODoyNzo1MSBDRVNUIDIwMDEgQmpvcm4gUmVlc2UgPGJyZWVzZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgoJKiBsaWJ4bWwuaDogbmV3IGhlYWRlciB1c2VkIG9ubHkgZm9yIHRoZSBjb21waWxhdGlvbiBvZiBsaWJ4bWwKCSogSFRNTHBhcnNlci5jIEhUTUx0cmVlLmMgU0FYLmMgZGVidWdYTUwuYyBlbmNvZGluZy5jIGVudGl0aWVzLmMKCSAgZXJyb3IuYyBoYXNoLmMgbGlzdC5jIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHBhcnNlci5jCgkgIHBhcnNlckludGVybmFscy5jIHRlc3RIVE1MLmMgdGVzdFNBWC5jIHRlc3RVUkkuYyB0ZXN0WFBhdGguYwoJICB0cmVlLmMgdXJpLmMgdmFsaWQuYyB4aW5jbHVkZS5jIHhsaW5rLmMgeG1sSU8uYyB4bWxsaW50LmMKCSAgeG1sbWVtb3J5LmMgeHBhdGguYyB4cG9pbnRlci5jOiBsaWJ4bWwuaCBpbnRlZ3JhdGlvbgoJKiB0cmlvLltjaF0gdHJpb3AuaCBzdHJpby5bY2hdOiB1cGdyYWRlZCB0byB0aGUgbGF0ZXN0IHRyaW8KCSAgYmFzZWxpbmUgKHZlcnNpb24gMS4yIHBsdXMgYSBzaW5nbGUgcGF0Y2gpLgoJKiB4cGF0aC5jIHJlc3VsdC9YUGF0aC9leHByL2Zsb2F0cyB0ZXN0L1hQYXRoL2V4cHIvZmxvYXRzOiBwYXJzZXMKCSAgc2NpZW50aWZpYyBub3RhdGlvbiBmb3IgbnVtYmVycy4gVGVzdHMgYWRkZWQuCgkqIHhwYXRoLmM6IGZvcm1hdHRpbmcgb2YgbnVtYmVycyBjaGFuZ2VkIHRvIHVzZSBzcHJpbnRmCgkgIChjb250cmlidXRpb24gZnJvbSBXaWxsaWFtIEJyYWNrKQoKU2F0IEFwciAyMSAxNjoxMjo1OSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IGNsZWFudXAsIG1vcmUgdXNlZnVsIGRlYnVnZ2luZwoJKiBwYXJzZXJJbnRlcm5hbHMuYzogY2xlYW51cCB2Y3R4dC5ub2RlVGFiIChkZSlhbGxvY2F0aW9uCgkqIHhtbElPLmM6IGVudGl0eSBsb2FkaW5nIGlzIHByaW50ZWQgYXMgYW4gZXJyb3Igd2hlbiB2YWxpZGF0aW5nCgpTYXQgQXByIDIxIDEyOjI1OjQ5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogZml4ZWQgdG8gdmFsaWRhdGUgd2l0aGluIGVudGl0aWVzCgkqIHRlc3QvVkNNL3YyMi54bWw6IGFkZGVkIGEgc3BlY2lmaWMgdGVzdGNhc2UKCkZyaSBBcHIgMjAgMTc6NDU6NDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBmb3Jnb3QgYW4gZXBzaWxvbiB0cmFuc2l0aW9uIGluIGZvciAoKSsKCSogdGVzdC9WQ00vdjIxLnhtbCA6IGFkZGVkIGEgc3BlY2lmaWMgdGVzdCBjYXNlCgpGcmkgQXByIDIwIDE1OjQ2OjA0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogcmVtb3ZlZCBhIHN0YXRlIGV4cGxvc2lvbiBleGhpYml0ZWQgYnkgUlNTCgkqIHRlc3QvdmFsaWQvcnNzLnhtbCByZXN1bHQvdmFsaWQvcnNzLnhtbCo6IGFkZGVkIHRoZSB0ZXN0Y2FzZQoJICBmcm9tIGJ1ZyAjNTE4NzIKCkZyaSBBcHIgMjAgMTQ6NTI6NDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5bY2hdIHRyZWUuaDogd29ya2VkICpoYXJkKiB0byBnZXQgbm9uLWRldGVybWluaXN0IGNvbnRlbnQKCSAgdmFsaWRhdGlvbiB3aXRob3V0IHVzaW5nIGFuIHVnbHkgTkZBIC0+IERGQSBhbGdvIGluIHRoZSBzb3VyY2UuCgkgIE1hZGUgYSBzcGVjaWZpYyBhbGdvcml0aG0gZWFzaWVyIHRvIG1haW50YWluLCB1c2luZyBhIHNpbmdsZQoJICBzdGFjayBhbmQgd2l0aG91dCByZWN1cnNpb24uCgkqIE1ha2VmaWxlLmFtIHRlc3QvVkNNLyoueG1sOiBhZGRlZCBtb3JlIHRlc3RzIHRvICJtYWtlIFZhbGlkdGVzdHMiCgkqIGhhc2guYzogbWFkZSB0aGUgZ3Jvd2luZyByb3V0aW5lIHN0YXRpYwoJKiB0cmVlLmggcGFyc2VyLmM6IGFkZGVkIHRoZSBwYXJlbnQgaW5mb3JtYXRpb24gdG8gYW4KCSAgeG1sRWxlbWVudENvbnRlbnQgbm9kZS4KCldlZCBBcHIgMTggMjM6MzM6MTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBTQVguYyBwYXJzZXIuYyB4cGF0aC5jOiBnZW5lcmF0aW5nIElEcyB3aGVuIG5vdCB2YWxpZGF0aW5nCgkgIGZyb20gYW4gZXh0ZXJuYWwgcGFyc2VkIGVudGl0eSB3YXMgcG9pc29uaW5nIHRoZSBJRCBoYXMgdGFibGUKCSAgd2l0aCByZW1vdmVkIHZhbHVlcy4gVGhpcyB3YXMga2lsbGluZyBYU0xUIG9uIHRoZSBLREUgaGVscAoJICBicm93c2VyLgoKV2VkIEFwciAxOCAxNzowOToxNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGVudGl0aWVzLmg6IGFuZHJld0B1Z2gubmV0LmF1IGRldGVjdGVkIGEgZG91YmxlIGRlY2xhcmF0aW9uCgpXZWQgQXByIDE4IDE1OjA2OjMwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZGVidWdYTUwuYyBoYXNoLmMgdHJlZS5oIHZhbGlkLmMgOiBzb21lIGNoYW5nZXMgcmVsYXRlZCB0bwoJICB0aGUgdmFsaWRhdGlvbiBzdXBvcnQgdG8gaW1wcm92ZSBzcGVlZCB3aXRoIERvY0Jvb2sKCSogcmVzdWx0L1ZDL09uZUlEMiByZXN1bHQvVkMvT25lSUQzIDogdGhpcyBzbGlnaHRseSBjaGFuZ2VzCgkgIHRoZSB3YXkgdmFsaWRhdGlvbiBlcnJvcnMgZ2V0IHJlcG9ydGVkCgpXZWQgQXByIDE4IDExOjQyOjQ3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jIEhUTUx0cmVlLmM6IGFwcGxpZWQgcGFydCBvZiB0aGUgcGF0Y2hlcyBwcm92aWRlZAoJICBieSBQIEMgQ2hvdyBhbmQgV2lsbGlhbSBNLiBCcmFjayBmb3IgWFNMVCBIVE1MIG91dHB1dAoKTW9uIEFwciAxNiAxOTo0NDozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbHZlcnNpb24uaC5pbiB3aW4zMmNvbmZpZy5oIHdpbjMyL2xpYnhtbDIvKjogYXBwbGllZCAKCSAgSWdvciBabGF0a292aWMgcGF0Y2hlcyBmb3IgTVNDIGNvbXBpbGF0aW9uIGFuZCBhZGRlZCBoaXMKCSAgdXBkYXRlcwoKVHVlIEFwciAxNyAxMDowODoxOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIHhtbFhQYXRoTm9kZUNvbGxlY3RBbmRUZXN0KCkgdG8gZG8gcHJvcGVyCgkgIHByZWZpeCBsb29rdXAuCgkqIHBhcnNlckludGVybmFscy5jOiBmaXhlZCB0aGUgYnVnIHJlcG9ydGVkIGJ5IE1vcnVzIFdhbHRlcgoJICBkdWUgdG8gYW4gb2ZmIGJ5IG9uZSB0eXBvIGluIHhtbFN0cmluZ0N1cnJlbnRDaGFyKCkKCQpUaHUgQXByIDEyIDE3OjQxOjA5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jIHJlc3VsdC9IVE1MLyo6IHJldmFtcGVkIHRoZSB3YXkgdGhlIEhUTUwKCSAgcGFyc2VyIGhhbmRsZXMgZW5kIG9mIHRhZ3Mgb3IgZW5kIG9mIGlucHV0CgpUaHUgQXByIDEyIDEwOjUwOjM0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5bY2hdIDogYWRkZWQgeG1sRG9jQ29weU5vZGUgZm9yIGdkb21lMiBzdXBwb3J0CgpXZWQgQXByIDExIDE2OjM3OjUwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5oOiBpbmNsdWRlIHhtbG1lbW9yeS5oIHRoaXMgc2VlbXMgdG8gaGF2b2lkIGEgbmFzdHkgZ2xpYmMKCSAgYnVnIHdoZXJlIHRoZSBsaW5rdGltZSB2ZXJpb25zIG9mIGZyZWUoKSB3b24ndCB3b3JrIC4uLgoKV2VkIEFwciAxMSAxNDoyMTozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZy5oLmluIGNvbmZpZ3VyZS5pbiB4bWx2ZXJzaW9uLmguaW46IGFkZGVkIGFuc2lkZWNsLmggdGVzdAoKV2VkIEFwciAxMSAxMzo1MDo0MiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy94bWwuaHRtbDogYWRkZWQgMi4zLjYgcmVsZWFzZQoKV2VkIEFwciAxMSAxMzoyNjozNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogZml4ZWQgeG1sU3RyaW5nR2V0Tm9kZUxpc3QoKSB0byBoYW5kbGUgY2hhcnJlZnMKCSogcmVzdWx0L3dtbC54bWw6IHJlc3VsdGVkIGluIGEgc21hbGwgb3V0cHV0IGNoYW5nZQoKV2VkIEFwciAxMSAwOTo0Nzo1NSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogeG1sTmV3RG9jIHdhcyBtaXNzaW5nIHRoZSBjaGFyc2V0IGluaXRpYWxpemF0aW9uCgkqIHhtbGxpbnQuYzogYWRkZWQgLS1hdXRvIHRvIGF1dG9nZW5lcmF0ZSBhIGRvYywgYWxsb3cgdG8KCSAgcmVwcm9kdWNlIHRoZSBwcm9ibGVtIGZpeGVkIG9uIHhtbE5ld0RvYwoKVHVlIEFwciAxMCAxODoxMzoxMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHRyeWluZyB0byBnZXQgNTI5Nzkgc29sdmVkCgkqIHRyZWUuYyByZXN1bHQvIHJlc3VsdC9ub2VudC86IHRyeWluZyB0byBnZXQgNTI3MTIgc29sdmVkLCB0aGlzCgkgIGFsc28gbWFkZSBtZSBjbGVhbiB1cCB0aGUgZmFjdCB0aGF0IFhNTCBvdXRwdXQgaW4gZ2VuZXJhbCBzaG91bGQKCSAgbm90IGFkZCBmb3JtYXRpbmcgYmxhbmtzIGJ5IGRlZmF1bHQsIHRoaXMgY2hhbmdlZCB0aGUgb3V0cHV0IG9mCgkgIGEgZmV3IHRlc3RzCgpUdWUgQXByIDEwIDE2OjMwOjIwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogQmlsbCBCcmFjayBwb2ludGVyIGFuIGVycm9yIGluIGRldGVjdGluZyBhIG51bGwgbm9kZXNldAoKU3VuIEFwciAgOCAxNTowNzoxNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogZmluYWxseSByZWxlYXNlZCAyLjMuNgoKU3VuIEFwciAgOCAxMTozOToyMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGNoZWNraW5nIGZvciBudWxsIHBvaW50ZXIgZ2VuZXJhdGVkIGJ5IG5ldyBjb2RlCgpGcmkgQXByICA2IDEyOjUzOjA1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgYSBbXSBldmFsdWF0aW9uIHByb2JsZW0gcmVwb3J0ZWQKCSogdGVzdC9YUGF0aC90ZXN0cy9zaW1wbGVhZGRyOiBleHRlbmRlZCB0ZXN0CgkqIHJlc3VsdC9YUGF0aC9zaW1wbGVhZGRyOiB1cGRhdGVkIHJlc3VsdAoKV2VkIEFwciAgNCAwMjowNzo1MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbGxpbnQuYzogRGFuIFRpbWlzIHJlcG9ydGVkIGEgcG9ydGFiaWxpdHkgcHJvYmxlbQoJICBvbiBNYWNzIHdpdGhvdXQgbW1hcCwgZml4ZWQgaXQuCgpUdWUgQXByICAzIDIwOjIwOjUxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdGVzdFhQYXRoLmMgOiBhZGRlZCBhIC0tdHJlZSBvcHRpb24gYWxsb3dpbmcgdG8gZGlzcGxheSB0aGUKCSAgdHJlZSBkdW1wIG9mIHRoZSBYUGF0aCBleHByZXNzaW9uCgpNb24gQXByICAyIDE3OjEzOjUxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgYSBtZW1sZWFrIHdoZW4gY29tcGFyaW5nIG5vZGVzZXRzCgkqIEhUTUx0cmVlLmM6IGRvbid0IGludmVudCB0aGUgSFRNTCBkb2N0eXBlIGlmIG5vdCBhdmFpbGFibGUgKFhTTFQpCgkqIHRyZWUuYzogYWRkZWQgYSBUT0RPCgpUdWUgTWFyIDI3IDE0OjMyOjA2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluIE1ha2VmaWxlLmFtIGNvbmZpZy5oLmluIHhtbHZlcnNpb24uaC5pbjogZGV0ZWN0IGlmCgkgIHdlIG5lZWQgc3RyaW5nIGZ1bmN0aW9ucwoJKiB0cmlvLltjaF0gc3RyaW8uW2NoXTogZW1iZWRkZWQgdGhlIFRyaW8tMC4yMyBzdHJpbmcgZnVuY3Rpb25zCgkgIHRvIGJlIGFibGUgdG8gdXNlIHRoZW0gd2hlcmUgbmVlZGVkLiBBcHBsaWVkIHNvbWUgY2hhbmdlcwoJICB0byByZWR1Y2UgbmFtZSBsaW5raW5nIHBvbGx1dGlvbiBhbmQgY29tcGlsZSBpbiBvbmx5IHdoYXQncwoJICBuZWVkZWQuCgkqIEhUTUx0cmVlLmMgZGVidWdYTUwuYyBlbnRpdGllcy5jIGVycm9yLmMgbmFub2Z0cC5jIHZhbGlkLmMKCSAgeGxpbmsuYyB4bWx2ZXJzaW9uLmguaW4geHBhdGguYzogZ290IHJpZCBvZiB0aGUgI2lmZGVmIAoJICBmb3IgdGhlIHN0cmluZyBtYW5pcHVsYXRpb24gZnVuY3Rpb25zCgkqIHhtbG1lbW9yeS5bY2hdOiByZW1vdmVkIERFQlVHX01FTU9SWV9GUkVFRCBhbmQgYWRkZWQgaXQgYXV0b21hdGljYWxseQoJICB0byB0aGUgZnJlZSgpIGZ1bmN0aW9uIG9mIHhtbG1lbW9yeS5jCgkqIGVudGl0aWVzLmMgSFRNTHRyZWUuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmMgdXJpLmMgdmFsaWQuYwoJICB4aW5jbHVkZS5jIHhtbElPLmMgeHBhdGguYyB4cG9pbnRlci5jOiByZW1vdmVkIHRoZSBNRU1fQ0xFQU5VUAoJICB1c2FnZS4KCgpUdWUgTWFyIDI3IDAyOjMwOjIzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZXJyb3IuYzogYXBwbGllZCB0aGUgY29udGV4dCBvdXRwdXQgcGF0Y2ggb2YgdGhlIGVycm9yCgkgIGhhbmRsaW5nIHN1Ym1pdHRlZCBieSBDaHVjayBHcmlmZml0aAoJKiBlcnJvci9WQy8qOiB0aGlzIHNsaWdodGx5IGNoYW5nZSBzb21lIGVycm9yIGxvZ3MKClR1ZSBNYXIgMjcgMDA6NTE6MjcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZml4ZWQgbGluZSBudW1iZXIgcmVwb3J0aW5nIG9uIGVycm9yCgpNb24gTWFyIDI2IDIzOjIxOjQxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IFN1bGxpdmFuIGFuZCBEYXJpbiBmb3VuZCBhIHBhcnNlciBidWcsCgkgIGFwcGxpZWQgdGhlIHBhdGNoLgoKTW9uIE1hciAyNiAxODoyNDo1MiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jIFNBWC5jIGRlYnVnWE1MLmMgZXJyb3IuYyBwYXJzZXJJbnRlcm5hbHMuYwoJICB0ZXN0SFRNTC5jIHRlc3RTQVguYyB0cmVlLmMgdmFsaWQuYyB4bWxJTy5jIHhtbG1lbW9yeS5jCgkgIHhtbHZlcnNpb24uaC5pbiB4cG9pbnRlci5jOiBvZiBjb3Vyc2UgdGhlIHdheSBJIGRlZmluZWQKCSAgVU5VU0VEIGJyZWFrcyBvbiBvbGQgZ2NjIHZlcnNpb24uIFRyeSB0byBiZSBzbWFydCBhbmQKCSAgYWxzbyBkZWZpbmUgaXQgZGlyZWN0bHkgaW4geG1sdmVyc2lvbi5oCgkqIGNvbmZpZ3VyZS5pbjogcmVtb3ZlZCAtYW5zaSBmbGFnIGZyb20gdGhlIHBlZGFudGljIHNldAoKU2F0IE1hciAyNCAxNzo0NTozNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgogICAgICAgIEh1Z2UgY2xlYW51cCwgSSBzd2l0Y2hlZCB0byBjb21waWxlIHdpdGgKCS1XYWxsIC1nIC1PIC1hbnNpIC1wZWRhbnRpYyAtVyAtV3VudXNlZCAtV2ltcGxpY2l0CgktV3JldHVybi10eXBlIC1Xc3dpdGNoIC1XY29tbWVudCAtV3RyaWdyYXBocyAtV2Zvcm1hdAoJLVdjaGFyLXN1YnNjcmlwdHMgLVd1bmluaXRpYWxpemVkIC1XcGFyZW50aGVzZXMgLVdzaGFkb3cKCS1XcG9pbnRlci1hcml0aCAtV2Nhc3QtYWxpZ24gLVd3cml0ZS1zdHJpbmdzIC1XYWdncmVnYXRlLXJldHVybgoJLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25lc3RlZC1leHRlcm5zIC1XaW5saW5lCgkqIEhUTUxwYXJzZXIuW2NoXSBIVE1MdHJlZS5jIFNBWC5jIGRlYnVnWE1MLmMgZW5jb2RpbmcuW2NoXQoJICBlbmNvZGluZy5oIGVudGl0aWVzLmMgZXJyb3IuYyBsaXN0LltjaF0gbmFub2Z0cC5jCgkgIG5hbm9odHRwLmMgcGFyc2VyLltjaF0gcGFyc2VySW50ZXJuYWxzLltjaF0gdGVzdEhUTUwuYwoJICB0ZXN0U0FYLmMgdGVzdFVSSS5jIHRlc3RYUGF0aC5jIHRyZWUuW2NoXSB1cmkuYwoJICB2YWxpZC5bY2hdIHhpbmNsdWRlLmMgeG1sSU8uW2NoXSB4bWxsaW50LmMgeG1sbWVtb3J5LmMKCSAgeHBhdGguYyB4cGF0aEludGVybmFscy5oIHhwb2ludGVyLltjaF0gZXhhbXBsZS9nam9icmVhZC5jOgoJICBDbGVhbnVwLCBzdGF0aWNmaWVkIGEgbnVtYmVyIG9mIG5vbi1leHBvcnRlZCBmdW5jdGlvbnMsCgkgIGRldGVjdGVkIGFuZCBjbGVhbmVkIHVwIGEgZG96ZW4gb2YgcHJvYmxlbSBmb3VuZCB0aGlzIHdheSwKCSAgYXZvaWRlZCBhIGxvdCBvZiBwdWJsaWMgZnVuY3Rpb24gbmFtZS90eXBlZGVmL3N5c3RlbSBuYW1lcyBjbGFzaGVzCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZAoJKiBjb25maWd1cmUuaW46IHN3aXRjaGVkIHByaXZhdGUgZmxhZ3MgdG8gdGhlIHJlYWxseSBwZWRhbnRpYyBvbmVzLgoKVGh1IE1hciAyMiAyMjo0NDoxNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiAyLjMuNQoJKiBkb2MvaHRtbC8qOiByZWJ1aWx0IHRoZSBkb2NzCgpUaHUgTWFyIDIyIDE1OjM2OjQ1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSByZXBvcnRlZCBidWcgaW4gTk9UQVRJT04gcGFyc2luZwoJKiB1cmkuYzogYWNjZXB0ZWQgYnV0IG5vdCBmaXhlZCBidWcgNTE4NzYsIGFkZGVkIFRPRE8gCgkqIE1ha2VmaWxlLmFtOiBmaXhlZCBidWcgNTE4NzYKClRodSBNYXIgMjIgMTM6NDE6MjIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZy5oLmluIGNvbmZpZ3VyZS5pbiBlcnJvci5jOiBmaXggYSBjb21waWxhdGlvbiBwcm9ibGVtCgkgIG9uIHBsYXRmb3JtcyB3aXRob3V0IHZzbnByaW50ZiAoeG1sQHRoZXdyaXR0ZW53b3JkLmNvbSkKCldlZCBNYXIgMjEgMTk6MDQ6MzQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIGZ1bmN0aW9uIG5hbWUgaGVhZGVyIHR5cG8KCSogU0FYLmM6IG5vdGF0aW9ucyBjYW4gYWxzbyBvY2N1ciBpbiBleHRlcm5hbCBzdWJzZXQuCgpUdWUgTWFyIDIwIDE0OjIxOjI4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBlcnJvci5jOiByZW1vdmVkIGEgQysrIGxpa2UgY29tbWVudAoKVHVlIE1hciAyMCAxMjoyMjozNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGluZyBidWcgNTIyOTkgc3RyYW5nZSBjb25kaXRpb24gbGVhZGluZwoJICB0byBhIHBhcnNlciBjcmFzaCBkdWUgdG8gYSBidWZmZXIgb3ZlcmZsb3cKCSogcmVzdWx0L25vZW50L2F0dHJpYi54bWwgcmVzdWx0L2F0dHJpYi54bWwgdGVzdC9hdHRyaWIueG1sOgoJICBhZGRlZCB0aGUgc3BlY2lmaWMgdGVzdCBjYXNlCgpNb24gTWFyIDE5IDE2OjUwOjUyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5bY2hdOiBzdGlsbCBhIGxvdCBvZiBjbGVhbnVwIGJhc2VkIG9uIFhTTFQsIGFkZGVkCgkgIHhtbFhQYXRoQ29udmVydHtTdHJpbmcsTnVtYmVyLEJvb2xlYW59IHRvIGJlIGFibGUgdG8gbWFrZQoJICB0eXBlIGNhc3RzIHdpdGhvdXQgYSBjb250ZXh0IHN0YWNrLCBmaXhlZCBzb21lIGltcGxlbWVudGF0aW9uCgkgIHByb2JsZW1zIHJlbGF0ZWQgdG8gdGhlIGFic2VuY2Ugb2YgY29udGV4dCBhdCBwYXJzZS10aW1lLAoJICBhZGRlZCB4bWxYUGF0aEV2YWxQcmVkaWNhdGUoKSBhbmQgeG1sWFBhdGhGcmVlQ29tcEV4cHIoKQoJICBpbiB0aGUgcHVibGljIEFQSSB0b28KCSogeHBvaW50ZXIuYyB4cGF0aEludGVybmFscy5oOiB3ZSBuZWVkIHRvIGtub3cgYXQgcGFyc2UgdGltZQoJICB3aGV0aGVyIHdlIGFyZSBjb21waWxpbmcgYW4gWFBvaW50ZXIKCk1vbiBNYXIgMTkgMTE6NTQ6MzEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLltjaF0geHBvaW50ZXIuYzogcmVzdGF1cmVkIHRoZSBCaW5hcnkgYW5kIEFQSSBjb21wYXRpYmlsaXR5CgkgIGNsZWFuZWQgdXAgdGhlIHBhcnNlciBpbnRlcm5hbHMsIHJlZmFjdG9yZWQgWFBhdGggY29kZSwgYWRkZWQKCSAgbmV3IGNvbXBpbGF0aW9uIGJhc2VkIEFQSXMgYW5kIGNsZWFubHkgc2VwYXJhdGVkIHB1YmxpYyBhbmQKCSAgcHJpdmF0ZSBBUElzLgoKTW9uIE1hciAxOSAwMDo1OToyNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguaDogdGhlIGNvbXAgZmllbGQgbXVzdCBiZSBhZGRlZCBhdCB0aGUgZW5kIHRvIGF2b2lkCgkgIGtpbGxpbmcgYmluYXJ5IGNvbXBhdC4KCk1vbiBNYXIgMTkgMDA6MTE6MTggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtOiBkZXRlY3QgWFBhdGggbWVtbGVha3MgaW4gcmVncmVzb24gdGVzdHMKCSogZXJyb3IuYzogZml4ZWQgYW5kIGVycm9yIHcuci50LiBlcnJvciByZXBvcnRpbmcgc3RpbGwgdXNpbmcKCSAgc3RkZXJyCgkqIGhhc2guYzogYWRkZWQgbmV3IGxpbmUgYXQgZW5kIG9mIGZpbGUKCSogdHJlZS5oOiBtaW5vciBjbGVhbnVwCgkqIHhwYXRoLltjaF0geHBvaW50ZXIuW2NoXTogTWFqb3IgY2hhbmdlcyAhIFNlcGFyYXRlZCBYUGF0aAoJICBleHByZXNzaW9uIHBhcnNpbmcgZnJvbSBldmFsdWF0aW9uLCByZXN1bHRlZCBpbiBhIG51bWJlciBvZgoJICBjaGFuZ2VzIGludGVybmFsbHksIGFuZCBpbiBYUG9pbnRlci4gTGlrZWx5IHRvIGJyZWFrIHN0dWZmCgkgIHVzaW5nIHhwYXRoSW50ZXJuYWxzLmggYnV0IHNob3VsZCByZW1haW4gYmluYXJ5IGNvbXBhdGlibGUsCgkgIG5ldyBpbnRlcmZhY2VzIHdpbGwgYmUgYWRkZWQuCgpXZWQgTWFyIDE0IDIwOjM0OjAyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkIGEgY291cGxlIG9mIHByb2JsZW1zIHJlcG9ydGVkIGJ5IAoJICBva2lkZGxlQHlhaG9vLmNvLnVrIGFuZCBhbGxhbmNAY2hpY2tlbmFuZHBvcm4uY29tIHdoZW4gY29tcGlsaW5nCgkgIHdpdGhvdXQgZ2NjIG9uIG5vbiBsaW51eCBwbGF0Zm9ybXMuCgpXZWQgTWFyIDE0IDIwOjEzOjU0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvTWFrZWZpbGUuYW0gY29uZmlndXJlLmluOiB5ZWFya2VAZW5nLmJ1ZmZhbG8uZWR1IHN1Z2dlc3RlZAoJICBhIGZpeCBmb3IgLS13aXRoLWh0bWwtZGlyPSBjb25maWd1cmUgc3VwcG9ydC4gSSBob3BlIGl0IHdvbid0CgkgIGJyZWFrIHJwbSBnZW5lcmF0aW9uCgpXZWQgTWFyIDE0IDE3OjI4OjQ5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxJTy5jOiBvbmUgZnVuY3Rpb24gY29tbWVudCBjbGVhbnVwLgoKV2VkIE1hciAxNCAxNDo1NTo0NiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogU0FYLmM6IGV4dGVybmFsIHN1YnNldCBub3RhdGlvbnMgd2VyZSBpbXByb3Blcmx5IHJlZ2lzdGVyZWQKCSAgaW4gdGhlIGludGVybmFsIHN1YnNldC4KClR1ZSBNYXIgMTMgMTA6Mjg6NDkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFJFQURNRS5jdnMtY29tbWl0czogYWRkZWQsIHBvaW50aW5nIHRvIEhBQ0tJTkcKCSogSEFDS0lORzogdXBkYXRlZAoKTW9uIE1hciAxMiAyMjowOTo0MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGFuZCBNYXR0IFNlcmdlYW50IGZvdW5kIG9uZSBpbiB0aGUgWE1MIHB1c2gKCSAgcGFyc2VyIChlcnJvbmVvdXMgY2hlY2sgSSBmb3Jnb3QgdG8gcmVtb3ZlIHdoZW4gSSBmaXhlZCB0aGUKCSAgbWFpbiBwYXJzZXIpLgoKTW9uIE1hciAxMiAxOToxOTowNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogcHRpdHRvbSBmb3VuZCBhIHNtYWxsIGJ1ZyBpbiBVbmFyeUV4cHIKClNhdCBNYXIgMTAgMTM6MDk6NTMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogYnVtcGVkIHRvIDIuMy40CgkqIGVycm9yLmM6IGZpeGVkIGJ1ZyAjNTE4NjAKCSogdHJlZS5jOiBmaXhlZCBidWcgIzUxODYxCgkqIHZhbGlkLmM6IGNsZWFudXAsIG1vcmUgZGVidWcsIGZhaWxlZCB0byBmaXggb25lIGJ1ZyBjcmFwIC4uLgoJKiB0cmVlLltjaF0gOiBhZGRlZCB4bWxEZWZhdWx0QnVmZmVyU2l6ZQoJKiBuYW5vZnRwLmM6IHR5cG8gaW4gZnVuY3Rpb24gbmFtZSBoZWFkZXIgYmxvY2sKCSogZG9jL3htbC5odG1sIDogdXBkYXRlZCwgYWRkZWQgbGluayB0byBYTUw6OkxpYlhTTFQKCSogZG9jL2h0bWwvKiA6IHJlYnVpbHQgdGhlIGRvY3MKCldlZCBNYXIgIDcgMjA6NDM6NDcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jIFNBWC5jOiB0aGUgbmV3IGNvbnRlbnQgcGFyc2luZyBjb2RlIHJhaXNlZCBhbgoJICB1Z2x5IGJ1ZyBpbiB0aGUgY2hhcmFjdGVycygpIFNBWCBjYWxsYmFjay4gRm91bmQgaXQKCSAganVzdCBiZWNhdXNlIG9mIHN0cmFuZ2VuZXNzIGluIFhTTFQgWE1MIFJlYyBvdXB0dXQgOi0oCgpXZWQgTWFyICA3IDE2OjUwOjIyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbTogTWFydGluIEJhdWxpZyBzdWdnZXN0ZWQgdG8gYWRkIC1sbQoJKiB0cmVlLmM6IGZvdW5kIGFub3RoZXIgYnVnIGluIHhtbE5vZGVHZXRDb250ZW50KCkKClR1ZSBNYXIgIDYgMDk6MjE6MzAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IEJqb3JuIGZvdW5kIHRoZSBlcnJvciByZWxhdGVkIHRvIHN0cmljdG5lc3Mgb2YgY29tcGFyaXNvbi4KCk1vbiBNYXIgIDUgMjE6NDc6MzEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiB0cnlpbmcgdG8gZml4IHRoZSBEdGQgcGFyc2luZyBwcm9ibGVtIHJlcG9ydGVkCgkgIGJ5IEdhcnksIHNpZGUgZWZmZWN0IG9mIGxhc3Qgd2VlayBzcGVlZCBvcHRpbWl6YXRpb25zLgoKU2F0IE1hciAgMyAxOTo0NTo1OSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sMkNvbmYuc2guaW46IGZpeGVzIHBvaW50ZWQgb3V0IGJ5IEZyZWRyaWsgSGFsbGVuYmVyZwoJKiBwYXJzZXJJbnRlcm5hbHMuYzogcmVtb3ZlZCB1bm5lZWRlZCB0ZXN0IHJhaXNlZCBieSBTdHJpYwoKU2F0IE1hciAgMyAxMzowNDozNyBDRVQgMjAwMSBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIHhwYXRoLmM6IEZpeGVkIHhtbFhQYXRoTm9kZUNvbGxlY3RBbmRUZXN0IChwcm9ibGVtIHJlcG9ydGVkCgkgIGFuZCBmaXhlZCBieSBXaWxsaWFtIEJyYWNrKS4gQWRkZWQgeG1sWFBhdGhGb3JtYXROdW1iZXIuCgkgIENoYW5nZWQgdGhlIHNvcnRpbmcgc2xpZ2h0bHkuCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbSBleGFtcGxlL01ha2VmaWxlLmFtOiBBZGRlZCAtbG0uCgkgIFBsZWFzZSBub3RlIHRoYXQgYXBwbGljYXRpb25zIGxpbmtpbmcgd2l0aCBsaWJ4bWwyLCBtdXN0CgkgIGFsc28gbGlrZSB3aXRoIHRoZSBtYXRoIGxpYnJhcnkgZnJvbSBub3cgb24uCgpTYXQgTWFyICAzIDA3OjM4OjU4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGxvb3AgcmVwb3J0ZWQgYnkgTWFyYyBTYW5mYWNvbgoKU2F0IE1hciAgMyAwMjoxMDoyNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IG9uZSBtdXN0IHJlcG9ydCBzcGFjZXMgZXZlbiBpZiB0aGUgRHRkIGVsZW1lbnQKCSAgY29udGVudCBwcm92ZXMgdGhhdCB0aGlzIGlzIG5vdCBwYXJ0IG9mIHRoZSBlbGVtZW50IGNvbnRlbnQuCgkqIHJlc3VsdC92YWxpZC8qLnhtbDogdGhpcyBjaGFuZ2VkIHRoZSBvdXB0dSBzbGlnaHRseQoKVGh1IE1hciAgMSAxNzo1MzozOSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBidW1wZWQgdG8gMi4zLjMKCSogZG9jL3htbC5odG1sOiB1cGRhdGVkCgpXZWQgRmViIDI4IDAwOjQzOjU4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IG1pbm9yIGRvYyBmaXgKCSogeHBhdGguYzogZGVhbGxvY2F0aW9uIGlzc3VlcyB3aGVuIGEgcmVzdWx0IHRyZWUgaGFzIGJlZW4KCSAgY29udmVydGVkIHRvIGEgbm9kZS1zZXQKCk1vbiBGZWIgMjYgMjI6MDk6NDUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy94bWwuaHRtbDogb29wcyBjb3JyZWN0ZWQgZGF0ZXMgcy8yMDAwLzIwMDEKCk1vbiBGZWIgMjYgMTI6NDg6MzUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IG5ldyBwYXRjaCBmcm9tIEdhcnkgUGVubmluZ3RvbgoKTW9uIEZlYiAyNiAwOTozMDoyMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL3htbC5odG1sOiBhcHBsaWVkIHBhdGNoIGZyb20gQW5raAoKTW9uIEZlYiAyNiAwMzozNDo0MyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeGluY2x1ZGUuYzogZml4ZWQgYSBwcm9ibGVtIGJ1aWxkaW5nIG9uIE1hYwoKU3VuIEZlYiAyNSAyMTo1MjozMCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IG1vcmUgd29yayBvbiBpbmNyZWFzaW5nIHBhcnNpbmcgZmVyZm9ybWFuY2VzCgpTdW4gRmViIDI1IDE4OjAzOjQyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxtZW1vcnkuaCBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYyBlbnRpdGllcy5jIHBhcnNlci5jCgkgIHhwYXRoLmMgeHBvaW50ZXIuYyB0cmVlLmMgdXJpLmMgdmFsaWQuYyB4aW5jbHVkZS5jIHhtbElPLmM6CgkgIGF2b2lkaW5nIG1lbWNweSBpbiBwcm9kdWN0aW9uIGJ1aWxkcyBNRU1fQ0xFQU5VUCBtYWNybyB1c2UKCSogcGFyc2VyLltjaF0gcGFyc2VySW50ZXJuYWxzLmM6IG9wdGltaXphdGlvbnMgb2YgdGhlIHRpZ2h0ZXN0CgkgIGludGVybmFsIGxvb3BzIGluc2lkZSB0aGUgcGFyc2VyLiBCZXR0ZXIgY2hlY2tpbmcgb2YgSS9PCgkgIGZsdXNoaW5nL2xvYWRpbmcgY29uZGl0aW9ucwoJKiB4bWxsaW50LmMgOiBhZGRlZCAtLXRpbWluZwoKU3VuIEZlYiAyNSAwNTo0ODo1MSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBidW1wZWQgdG8gMi4zLjIKCSogZG9jL3htbC5odG1sOiB1cGRhdGVkIGZvciByZWxlYXNlCgpTYXQgRmViIDI0IDE0OjA3OjUyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+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==