RnJpIEp1bCAgOCAyMzozNTowMCBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBBZGRlZCBjLXByb3BzLWNvcnJlY3QgY29uc3RyYWludCB0byBjaGVjawoJICBmb3IgZXF1YWwgY2FyZGluYWxpdHkgb2Yga2V5cmVmL2tleS4KCSogaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogQWRkZWQgYW4gZXJyb3IgY29kZS4KCkZyaSBKdWwgIDggMjE6NTY6MDQgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHBhdHRlcm4uYzogRml4ZWQgZXZhbHVhdGlvbiBvZiBhdHRyaWJ1dGVzLiBBY3R1YWxseSBvbmx5CgkgIGF0dHJpYnV0ZSBhdCB0aGUgZmlyc3QgbGV2ZWwgd2VyZSBldmFsdWF0ZWQgKGUuZy4gIkBhdHRyIik7CgkgIGV4cHJlc3Npb24gbGlrZSAiZm9vL0BhdHRyIiBhbHdheXMgZmFpbGVkLgoKRnJpIEp1bCAgOCAyMDowNDoyOSBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiB0aW55IGZpeCBpbiB4bWxTY2hlbWFWYWxpZGF0ZVN0cmVhbSgpIGlmIGEKCSAgdXNlci1wcm92aWRlZCBTQVggaGFuZGxlciBpcyBnaXZlbi4KCkZyaSBKdWwgIDggMTk6MjU6MjYgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXggc29tZSBwb3RlbnRpYWwgbGVha3MgaW4gZXJyb3IgY2FzZXMuCgkqIHhtbGxpbnQuYzogYWRkZWQgLS1zYXgsIHRvIGFsbG93IHRlc3Rpbmcgb2YgLS1zY2hlbWFzIC0tc2F4IGFuZAoJICB2YXJpb3VzIG90aGVyIGNvbWJpbmF0aW9ucy4KCSogeG1sc2NoZW1hcy5jOiBmaXggYSBjb3VwbGUgb2YgdGlueSBwcm9ibGVtcyBpbgoJICB4bWxTY2hlbWFWYWxpZGF0ZVN0cmVhbSgpCgpGcmkgSnVsICA4IDE4OjM0OjIyIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgkKCSogeG1sc2NoZW1hcy5jOiBDaGFuZ2VkIHhtbFNjaGVtYVZhbGlkYXRlRmlsZSgpIHRvIHVzZQoJICB4bWxTY2hlbWFWYWxpZGF0ZVN0cmVhbSgpIGludGVybmFsbHkuCgpGcmkgSnVsICA4IDE3OjAyOjE0IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0L3JlbGF4bmcvZG9jYm9va18wLnhtbDogYWRkZWQgdGhlIG1pc3NpbmcgZW50aXR5IHRvIHRoZQoJICBkb2N1bWVudCBpbnRlcm5hbCBzdWJzZXQgdG8gYXZvaWQgZXJyb3JzIGlmIHRoZSBEb2NCb29rIGNhdGFsb2dzCgkgIGFyZSBub3QgdGhlcmUKCSogeG1sc2NoZW1hcy5jOiBmaXJzdCBjdXQgYXQgaW1wbGVtZW50aW5nIHhtbFNjaGVtYVZhbGlkYXRlU3RyZWFtKCkKCSAgdW50ZXN0ZWQgeWV0CgpXZWQgSnVsICA2IDE1OjQ1OjQ4IFBEVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcGFyc2VyLmM6IGZpeGVkIHByb2JsZW0gd2l0aCBmcmVlIG9uIGR1cGwgYXR0cmlidXRlIGluCgkgIGR0ZCAoYnVnMzA5NjM3KS4KCSogdGVzdC9lcnJvcnMvYXR0cjMueG1sLCByZXN1bHQvZXJyb3JzL2F0dHIzLio6IGFkZGVkCgkgIHJlZ3Jlc3Npb24gdGVzdCBmb3IgdGhpcwoKV2VkIEp1bCAgNiAxMzoxMTozNSBQRFQgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHdpbjMyL01ha2VmaWxlLm1zdmM6IHRyeSBhZ2FpbiB0byBmaXggZmlsZSBmb3JtYXQgZm9yIFdpbmRvd3MKCldlZCBKdWwgIDYgMTI6MjA6MTMgUERUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiByZW1vdmVkIHNwdXJpb3VzIF5NCgkqIHJ1bnRlc3QuYzogYWRkZWQgY2hlY2sgZm9yIG9wdGlvbiBPX0JJTkFSWQoJKiB0ZXN0L3NjaGVtYXMvYnVnMzA5MzM4KiwgcmVzdWx0L3NjaGVtYXMvYnVnMzA5MzM4KjogY2hhbmdlZAoJICBzdGlja3kgdGFnIHRvICdiaW5hcnknCgpXZWQgSnVsICA2IDEwOjM4OjAyIFBEVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZGVidWdYTUwuYzogZXhjbHVkZWQgY29udGVudCBzdHJpbmcgY2hlY2sgZm9yIFhNTF9FTEVNRU5UX0RFQ0wKCSAgaW4geG1sQ3R4dEdlbmVyaWNOb2RlQ2hlY2sKCSogcnVudGVzdC5jOiBjaGFuZ2VkICJvcGVuIiBjYWxscyB0byBpbmNsdWRlIE9fQklOQVJZIGZvciBXaW5kb3dzCgpXZWQgSnVsICA2IDE3OjE0OjAzIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4aW5nIGJ1ZyAjMTY2Nzc3IChhbmQgIzE2OTgzOCksIGl0IHdhcyBhbiBoZXVyaXN0aWMKCSAgaW4gYXJlQmxhbmtzIHdoaWNoIGZhaWxlZC4KCSogcmVzdWx0L3dpbmJsYW5rcy54bWwqIHJlc3VsdC9ub2VudC93aW5ibGFua3MueG1sIHRlc3Qvd2luYmxhbmtzLnhtbDoKCSAgYWRkZWQgdGhlIGlucHV0IGZpbGUgdG8gdGhlIHJlZ3Jlc3Npb24gdGVzdHMKCldlZCBKdWwgIDYgMTM6NDA6MjIgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBGaXhlZCBidWcgIzMwOTMzOCwgcmVwb3J0ZWQgYnkgS3Vwcml5YW5vdgoJICBBbm90b2xpai4KCSogdGVzdC9zY2hlbWFzL2J1ZzMwOTMzOCogcmVzdWx0L3NjaGVtYXMvYnVnMzA5MzM4KjoKCSAgQWRkZWQgYSByZWdyZXNzaW9uIHRlc3QgZm9yIHRoZSBhYm92ZSBidWcuCgpUdWUgSnVsICA1IDE2OjAzOjA1IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogZmlyc3Qgc3RlcHMgdG93YXJkIGEgdGVzdHN1aXRlIGRpc3QKCSogU0FYMi5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGZpeGVkIGJ1ZyAjMzA3ODcwCgpUdWUgSnVsICA1IDEyOjM4OjM2IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiBydW5zdWl0ZS5jIHJ1bnRlc3QuYzogVGlueSBwb3J0YWJpbGl0eSBhZGp1c3RtZW50IGZvciB3aW4uCgkqIHdpbjMyL01ha2VmaWxlLio6IEFkZGVkIHJ1bnRlc3QuZXhlIGFuZCBydW5zdWl0ZS5leGUgdG8KCSAgYmUgY3JlYXRlZC4KCk1vbiBKdWwgIDQgMTc6NDQ6MjYgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJ1bnN1aXRlLmM6IGZpcnN0IHN0YiBhdCB1bmltcGxlbW50ZWQgZGV0ZWN0aW9uCgkqIHJ1bnRlc3QuYzogZml4aW5nIFdpbmRvd3MgY29kZQoKTW9uIEp1bCAgNCAxNzoxOTozMSBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcnVuc3VpdGUuYzogZml4IG9uIHNjaGVtYXMgZXJyb3IKCSogcnVudGVzdC5jOiBwb3J0YWJpbGl0eSBnbG9iKCkgb24gV2luZG93cwoKTW9uIEp1bCAgNCAxNjoyMzo1NCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcnVuc3VpdGUuYyBydW50ZXN0LmM6IGNsZWFudXBzLCBsb2dmaWxlIGFuZCBwb3J0YWJpbGl0eQoJKiB4bWxsaW50LmM6IGZpeGVkIGEgbWVtb3J5IGxlYWsKCk1vbiBKdWwgIDQgMTM6MTE6MTIgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIGJ1ZyBmYWlsaW5nIHRvIGRldGVjdCBVVEYtOCB2aW9sYXRpb25zIGluCgkgIENEYXRhIGluIHB1c2ggbW9kZS4KCSogcmVzdWx0L2Vycm9ycy9jZGF0YS54bWwqIHRlc3QvZXJyb3JzL2NkYXRhLnhtbDogYWRkZWQgdGhlIHRlc3QKCSAgdG8gdGhlIHJlZ3Jlc3Npb25zCgpNb24gSnVsICA0IDExOjI2OjU3IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBhZGRlZCBlbmhhbmNlbWVudCBmb3IgIzMwOTA1NyBpbiB4bWxsaW50IHNoZWxsCgpNb24gSnVsICA0IDAwOjU4OjQ0IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBKYW1lcyBCdXJzYSBmaXhpbmcgYW4gaHRtbCBwYXJzaW5nCgkgIGJ1ZyBpbiBwdXNoIG1vZGUKCSogcmVzdWx0L0hUTUwvcmVwZWF0Lmh0bWwqIHRlc3QvSFRNTC9yZXBlYXQuaHRtbDogYWRkZWQgdGhlIHRlc3QgdG8gdGhlCgkgIHJlZ3Jlc3Npb24gc3VpdGUKClN1biBKdWwgIDMgMjM6NDI6MzEgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3RhcGkuYyB0cmVlLmM6IGZpeGluZyBhIGxlYWsgZGV0ZWN0ZWQgYnkgdGVzdGFwaSBpbiAKCSAgeG1sRE9NV3JhcEFkb3B0Tm9kZSwgYW5kIGZpeGluZyBhbm90aGVyIHNpZGUgZWZmZWN0IGluIHRlc3RhcGkKCSAgc2VlbXMgdG8gcGFzcyB0ZXN0cyBmaW5lIG5vdy4KCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggcGFyc2VyLmM6IHhtbFN0b3BQYXJzZXIoKSBpcyBubyBtb3JlIGxpbWl0ZWQKCSAgdG8gcHVzaCBtb2RlCgkqIGVycm9yLmM6IHJlbW92ZSBhIHdhcm5pbmcKCSogcnVudGVzdC5jIHhtbGxpbnQuYzogYXZvaWQgY29tcGlsYXRpb24gZXJyb3JzIGlmIG9ubHkgc29tZSBwYXJ0cwoJICBvZiB0aGUgbGlicmFyeSBhcmUgY29tcGlsZWQgaW4uCgpNb24gSnVsICA0IDAwOjM5OjM1IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogZml4IGEgcHJvYmxlbSB3aXRoIHByZXZpb3VzIHBhdGNoIHRvCgkgIHRlc3RhcGkuYwoKU3VuIEp1bCAgMyAyMjo1OToyOCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcnVuc3VpdGUuYyBydW50ZXN0LmMgdHJlZS5jOiBmaXhpbmcgY29tcGlsYXRpb25zIHdoZW4KCSAgZGlzYWJsaW5nIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IGF0IGNvbmZpZ3VyZSB0aW1lLgoKU3VuIEp1bCAgMyAxODoxNzo1OCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IGZpeCBidWcgcmFpc2VkIGJ5IHphbWV6IG9uIElSQwoJKiB0ZXN0YXBpLmM6IHJlZ2VuZXJhdGVkLCBzZWVtcyB0byBwb3AtdXAgbGVha3MgaW4gbmV3IHRyZWUgZnVuY3Rpb25zCgkqIHRyZWUuYzogYWRkZWQgY29tbWVudHMgbWlzc2luZy4KCSogZG9jLyo6IHJlZ2VuZXJhdGVkCgpTdW4gSnVsICAzIDE4OjA2OjU1IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0YXBpLmMgcnVuc3VpdGUuYyBydW50ZXN0LmM6IGZpeGluZyAjMzA3ODIzIGFuZCBhIGNvdXBsZSBvZgoJICBhc3NvcnRlZCBidWdzCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWw6IGZpeGVkIAoJICBjb25kaXRpb25hbHMgaW4gZ2VuZXJhdG9yIHRvbwoJKiBkb2MvYXBpYnVpbGQucHkgZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvKiBlbGZnY2NoYWNrLmg6IHNvbWUKCSAgY2xlYW51cHMgdG9vIGFuZCByZWJ1aWx0CgpTdW4gSnVsICAzIDE2OjQyOjAwIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBmaXhlZCBidWcgIzMwNzUwMyBtaXNwbGFjZWQgI2lmZGVmCgpTdW4gSnVsICAzIDE2OjM0OjQ3IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBydW5zdWl0ZS5jOiBleHBhbmRlZCB0ZXN0CgkqIHhtbHJlZ2V4cC5jOiBmb3VuZCBhbmQgZml4ZWQgdGhlIGxlYWsgZXhwb3NlZCBieSBNaWNyb3NvZnQgcmVndGVzdHMKClNhdCBKdWwgIDIgMjM6Mzg6MjQgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJ1bnN1aXRlLmM6IGEgYml0IG9mIHByb2dyZXNzZXMgb24geHN0YwoKU2F0IEp1bCAgMiAwOTozMDoxMyBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcnVuc3VpdGUuYzogY29tcGxldGVkIHRoZSBzaW1wbGUgY2hlY2tzIGZvciBSZWxheC1ORyBzdWl0ZXMKCSAgYmFjayB0byB0aGUgc2FtZSAxMSBlcnJvcnMgYXMgaW4gdGhlIFB5dGhvbiBydW5zLgoKVGh1IEp1biAzMCAxNTowMTo1MiBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcnVudGVzdC5jOiBjb21wbGV0ZSwgY2hlY2tpbmcgb24gb3RoZXIgcGxhdGZvcm1zIGlzIG5lZWRlZAoJKiBSRUFETUU6IHVwZGF0ZWQgCgkqIGRlYnVnWE1MLmM6IGZpeCBhIGJ1ZyByYWlzZWQgYnkgYmlsbCBvbiBJUkMKCSogcmVsYXhuZy5jOiBmaXggYSBsZWFrIGluIHdlaXJkIGNpcmN1bXN0YW5jZXMKCSogcnVuc3VpdGUuYyBNYWtlZmlsZS5hbTogc3RhbmRhbG9uZSB0ZXN0IHRvb2wgYWdhaXNudAoJICB0aGUgcmVncmVzc2lvbiBzdWl0ZXMsIHdvcmsgaW4gcHJvZ3Jlc3MKClR1ZSBKdW4gMjggMDg6MzA6MjYgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJ1bnRlc3QuYzogYWRkaW5nIFVSSSB0ZXN0cwoKTW9uIEp1biAyNyAyMzo1NTo1NiBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcnVudGVzdC5jOiBhZGRpbmcgeG1sOmlkCgpNb24gSnVuIDI3IDIzOjI5OjM2IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBydW50ZXN0LmM6IGZpbmlzaGluZyBYUGF0aCwgYWRkaW5nIFhQb2ludGVyCgpNb24gSnVuIDI3IDE3OjM5OjI3IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBydW50ZXN0LmM6IGFkZGluZyBtb3JlIGNvdmVyYWdlLCBYSW5jbHVkZSBhbmQgc3RhcnRpbmcgWFBhdGgKCk1vbiBKdW4gMjcgMTc6MDI6MTQgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IEFkZGVkIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uCgkgIGZ1bmN0aW9ucyBmb3IgdGhlIERPTS13cmFwcGVyIGNvbnRleHQuCgpNb24gSnVuIDI3IDE1OjQxOjMwIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB0cmVlLmM6IENvbW1lbnRlZCB0aGUgbmV3IGZ1bmN0aW9ucyB0byBiZSBleHBlcmltZW50YWwuCgpNb24gSnVuIDI3IDE0OjQxOjE0IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlcnJvci5jIHZhbGlkLmM6IHdvcmtpbmcgc29tZSB3ZWlyZCBlcnJvciByZXBvcnRpbmcgcHJvYmxlbSBmb3IKCSAgRFREIHZhbGlkYXRpb24uCgkqIHJ1bnRlc3QuYzogYXVnbWVudGVkIHdpdGggRFREIHZhbGlkYXRpb24gdGVzdHMKCSogcmVzdWx0L1ZDL09uZUlEKjogc2xpZ2h0IGNoYW5nZSBpbiB2YWxpZGF0aW9uIG91dHB1dC4KCk1vbiBKdW4gMjcgMTM6NDQ6NDEgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJ1bnRlc3QuYzogYWRkZWQgbW9zdCBIVE1MIHRlc3RzCgpNb24gSnVuIDI3IDE0OjA2OjEwIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB0ZXN0L25hbWVzcGFjZXMvcmVjb25jaWxlL3Rlc3RzLnhtbAoJICB0ZXN0L25hbWVzcGFjZXMvcmVjb25jaWxlL3Rlc3RzLXRvLWMueHNsOiBBZGRlZCBpbml0aWFsIHRlc3RzCgkgIGZvciBzb21lIG5ldyBET00td3JhcHBlciBoZWxwaW5nIGZ1bmN0aW9ucy4KCk1vbiBKdW4gMjcgMTQ6MDE6MDYgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhzdGMveHN0Yy10by1weXRob24ueHNsOiBDbGVhbnVwLgoJKiB4c3RjL3N1bi10ZXN0LWRlZi54bWwgeHN0Yy9uaXN0LXRlc3QtZGVmLnhtbCB4c3RjL21zLXRlc3QtZGVmLnhtbDoKCSAgUmVtb3ZlZCwgdGhvc2UgYXJlIG5vdCBuZWVkZWQgYW55bW9yZSBkdWUgdG8gdGhlIG5ldyB0ZXN0IHN1aXRlLgoKTW9uIEp1biAyNyAxMTozOTo1MCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVzdWx0Lyouc2F4MiBNQWtlZmlsZS5hbTogYWRkZWQgU0FYdjIgcmVncmVzc2lvbiB0ZXN0cyBhcHBhcmVudGx5CgkgIG1pc3NpbmcuCgkqIHJ1bnRlc3QuYzogYWRkZWQgU0FYMS9TQVgyIGNoZWNrcy4KCk1vbiBKdW4gMjcgMTI6MjQ6NTQgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IEFkZGVkCgkgIHhtbERPTVdyYXBSZWNvbmNpbGVOYW1lc3BhY2VzKCksIHhtbERPTVdyYXBBZG9wdE5vZGUoKSBhbmQKCSAgeG1sRE9NV3JhcFJlbW92ZU5vZGUoKSB0byB0aGUgQVBJLiBUaGVzZSBhcmUgZnVuY3Rpb25zIGludGVuZGVkCgkgIHRvIGJlIHVzZWQgd2l0aCBET00td3JhcHBlcnMuCgpNb24gSnVuIDI3IDEwOjE0OjU3IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBydW50ZXN0LmM6IGNvbnRpbnVlIHRvIGluY3JlYXNlIHRoZSB0ZXN0cwoKTW9uIEp1biAyNyAwOToyMTo0OSBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcnVudGVzdC5jOiBjb250aW51ZSB0byBpbmNyZWFzZSB0aGUgdGVzdHMKCk1vbiBKdW4gMjcgMDE6MDE6MzIgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJ1bnRlc3QuYzogY29udGludWUgdG8gaW5jcmVhc2UgdGhlIHRlc3RzCgpTdW4gSnVuIDI2IDIwOjA4OjI0IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC92YWxpZC5oIHZhbGlkLmM6IGF2b2lkIG5hbWUgZ2xvYiBpbiBhZ3J1bWVudHMgYXMKCSAgaXQgbWF0Y2hlcyB0aGUgZ2xvYigpIHJvdXRpbmUuCgkqIHJ1bnRlc3QuYyBNYWtlZmlsZS5hbTogZmlyc3Qgc3RlcHMgdG93YXJkIGEgQyByZWdyZXNzaW9uIHRlc3QKCSAgZnJhbWV3b3JrLgoKU2F0IEp1biAyNSAwMTozNzoyMiBQRFQgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgYSBwcm9ibGVtIHdpdGggdGhlIGRldGVjdGlvbiBvZgoJICBzc19mYW1pbHkgZm9yIGlwVjYsIGFzIHJlcG9ydGVkIG9uIHRoZSBtYWlsaW5nIGxpc3QgYnkKCSAgRG91ZyBPcmxlYW5zLgoKVHVlIEp1biAyMSAxMDo0NDozNCBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogdGVzdC9zY2hlbWFzL2VtcHR5LXZhbHVlKiByZXN1bHQvc2NoZW1hcy9lbXB0eS12YWx1ZSo6CgkgIEFkZGVkIHJlZ3Jlc3Npb24gdGVzdHMgKGZyb20gRGh5YW5lc2gpLgoKVHVlIEp1biAyMSAxMDozNTo0MyBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBGaXhlZCBOVUxMIHZhbHVlcyB0byBiZSB2YWxpZGF0ZWQgYXMgZW1wdHkKCSAgc3RyaW5nIHZhbHVlcyAocmVwb3J0ZWQgYnkgRGh5YW5lc2ggdG8gdGhlIG1haWxpbmcgbGlzdCkuCgkgIEFkanVzdGVkIHRleHQgY29uY2F0ZW5hdGlvbiBvZiBtaXhlZCBjb250ZW50LgoKTW9uIEp1biAyMCAxODoxMTozMiBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIHZhbGlkLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBSb2IgUmljaGFyZHMgZm9yIHJlbW92YWwKCSAgb2YgSUQgKGFuZCB4bWw6aWQpCgkqIHhtbHJlYWRlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gSmFtZXMgV2VydCBpbXBsZW1lbnRpbmcgCgkgIHhtbFRleHRSZWFkZXJSZWFkSW5uZXJYbWwgYW5kIHhtbFRleHRSZWFkZXJSZWFkT3V0ZXJYbWwKClRodSBKdW4gMTYgMTQ6Mzg6MjIgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogRml4ZWQgU0FYMiB2YWxpZGF0aW9uOiBncm93IG9mIGludGVybmFsCgkgIG5hbWVzcGFjZSBsaXN0LCBhcHBlbmRpbmcgb2YgZWxlbWVudCBjaGFyYWN0ZXIgY29udGVudC4KCSogeHN0Yy94c3RjLnB5OiBBZGRlZCAiLS1zYXgiIG9wdGlvbiBmb3IgU0FYMiB2YWxpZGF0aW9uLgoKV2VkIEp1biAxNSAxNTozNDo1MiBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IEFkZGVkIG1pc3NpbmcgZnVuY3Rpb24gZGVzY3JpcHRpb25zLgoKV2VkIEp1biAxNSAxNToyNjoxNCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBpZiBzYXgxIGlzIHVzZWQgYW5kIGlucHV0IGlzIGEgZmlsZSB1c2UgdGhlIG9sZAoJICBBUEkgeG1sUGFyc2VGaWxlKCkKCSogeG1sc2NoZW1hcy5jOiBjbGVhbnVwcwoJKiBkb2MvKiB0ZXN0YXBpLmMgZWxmZ2NjaGFjay5oOiByZWJ1aWx0IHRvIGFkZCBweXRob24gYmluZGluZ3MKCSAgZm9yIHRoZSBuZXcgZnVuY3Rpb25zIGluIFNjaGVtYXMuCgpXZWQgSnVuIDE1IDE0OjUwOjQ4IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hcy5oOiBBZGRlZAoJICB4bWxTY2hlbWFWYWxpZGF0ZUZpbGUoKSB0byB0aGUgcHVibGljIEFQSS4gVGhpcyB3aWxsIHVzZQoJICBTQVgyLWRyaXZlbiB2YWxpZGF0aW9uLgoKV2VkIEp1biAxNSAxMToxMTozOCBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogcmVzdWx0L3NjaGVtYXMvYnVnMzA2ODA2XzFfMCByZXN1bHQvc2NoZW1hcy9idWczMDY4MDZfMV8wLmVycjoKCSAgQWRkZWQgc2NoZW1hIHRlc3QgcmVzdWx0cyAoVG9tIEJyb3dkZXIsIGJ1ZyAjMzA2ODA2KS4KCldlZCBKdW4gMTUgMTE6MDg6MzQgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHRlc3Qvc2NoZW1hcy9idWczMDY4MDZfMS54c2QgdGVzdC9zY2hlbWFzL2J1ZzMwNjgwNl8wLnhtbDoKCSAgQWRkZWQgc2NoZW1hIHRlc3RzIHN1Ym1pdHRlZCBieSBUb20gQnJvd2RlciAoYnVnICMzMDY4MDYpLgoKVHVlIEp1biAxNCAxNTowMzoyMiBQRFQgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHBhdHRlcm4uYzogYWRqdXN0ZWQgbGFzdCBjaGFuZ2UgdG8geG1sQ29tcGlsZVBhdGhQYXR0ZXJuLAoJICBmaXhlZCBvbmUgY29tcGlsYXRpb24gd2FybmluZwoKVHVlIEp1biAxNCAyMToxOToxNiBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogcGF0dGVybi5jOiBTb21lIGNoYW5nZXMvZml4ZXMgdG8gdGhlIHN0cmVhbWluZyBldmFsdWF0aW9uLgoJKiB4bWxzY2hlbWFzLmM6IEEgYml0IG9mIHN1cHBvcnQgZm9yIHBhcnNpbmcgdGhlIHNjaGVtYSBmb3IKCSAgc2NoZW1hLiBGaXhlZCBhdHRyaWJ1dGUgZGVyaXZhdGlvbiB3aGVuIHRoZSB1c2UgaXMKCSAgInByb2hpYml0ZWQiIGFuZCB3YXMgIm9wdGlvbmFsIi4gRml4ZWQgYW4gYXR0cmlidXRlIGNvbnN0cnVjdGlvbgoJICBidWcsIGEgbGVmdC1vdmVyIGZyb20gdGhlIHRpbWUsIHdoZXJlIDxjb21wbGV4Q29udGVudD4sCgkgIDxleHRlbnNpb24+LCBldGMuIHdoZXJlIGNyZWF0ZWQgYXMgc3RydWN0cy4KClR1ZSBKdW4gMTQgMTI6MzU6MTIgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC0yLjAucGMuaW46IHJlbW92ZWQgYSByZWR1bmRhbnQgaW5jbHVkZSBwYXRoCgpNb24gSnVuIDEzIDE0OjU4OjMzIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4c3RjL01ha2VmaWxlLmFtOiBTb21lIG1vcmUgYWRqdXN0bWVudHMuCgpNb24gSnVuIDEzIDE0OjM1OjU5IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4c3RjL01ha2VmaWxlLmFtOiBDaGFuZ2VkIHRlc3QgZXh0cmFjdGlvbiBwcm9jZXNzLCBzaW5jZSBzb21lCgkgIGJveGVzIGRvbid0IGtub3cgYWJvdXQgInRhciAtLXN0cmlwLXBhdGgiLgoKTW9uIEp1biAxMyAxMzozOTo0MyBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBmaXhlZCBhIGJ1ZyBleHBvc2VkIGJ5IFJvYiBSaWNoYXJkcyBpbiB0aGUgbWFpbGluZy1saXN0CgkqIHJlc3VsdC8vY29tcGFyZTAqIHRlc3QvL2NvbXBhcmUwKjogYWRkZWQgdGhlIHJlZ3Jlc3Npb24gdGVzdCBpbgoJICB0aGUgc3VpdGUgYXMgdGhpcyB3ZW50IHVubm90aWNlZCAhCgpXZWQgSnVuICA5IDExOjA3OjQyIFBEVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcGF0dGVybi5jLCB4cGF0aC5jLCBpbmNsdWRlL2xpYnhtbC9wYXR0ZXJuLmg6IEZ1cnRoZXIKCSAgZW5oYW5jZW1lbnQgZm9yIFhQYXRoIHN0cmVhbWluZywgY29uc29saWRhdGVkIHdpdGgKCSAgc2NoZW1hcyB1c2FnZSBvZiBwYXR0ZXJuLmMuICBBZGRlZCBhIG5ldyBlbnVtCgkgIHhtbFBhdHRlcm5GbGFncy4KCSogZG9jLyosIHRlc3RhcGkuYywgZWxmZ2NjaGFjay5oOiB1cGRhdGVkIHRvIHJlZmxlY3QgbmV3CgkgIGVudW0uCgkqIHRlc3QvWFBhdGgvdGVzdHMvbWl4ZWRwYXQsIHRlc3QvWFBhdGgvZG9jcy9taXhlZCwKCSAgcmVzdWx0L1hQYXRoL21peGVkcGF0OiBhZGRlZCByZWdyZXNzaW9uIHRlc3QgZm9yIHByb2JsZW1zCgkgIHJlcG9ydGVkIGluIGJ1ZzMwNjM0OAoKVGh1IEp1biAgOSAxNjo1MTozMSBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IENoYW5nZWQgbm9uLXByZWZpeGVkIFFOYW1lcyB0byBiZSBib3VuZCB0byBhCgkgIGRlZmF1bHQgbmFtZXNwYWNlIGlmIGV4aXN0ZW50LgoKVGh1IEp1biAgOSAxNToxMTozOCBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IEZpeGVkIGEgYnVnIHdoaWNoIEkgaW52ZW50ZWQ6IGhleEJpbmFyeSdzIHN0cmluZwoJICB2YWx1ZXMgd2VyZSBub3QgZHVwbGljYXRlZCBjb3JyZW50bHkgd2hlbiBjcmVhdGluZyBhIGNvbXB1dGVkIHZhbHVlCgkgIGluIHhtbFNjaGVtYVZhbEF0b21pY1R5cGUuCgpUaHUgSnVuICA5IDEzOjIwOjU3IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmMgcmVzdWx0L3NjaGVtYXMvaW5jbHVkZTFfMF8wLmVycjoKCSAgRml4ZWQgYW4gYXR0cmlidXRlIGZpeGVkL2RlZmF1bHQgdmFsdWUgY29uc3RyYWludCBlcnJvci4KClRodSBKdW4gIDkgMTI6NTE6MjMgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHJlc3VsdC9zY2hlbWFzLyo6IEFkYXB0ZWQgcmVncmVzc2lvbiB0ZXN0IHJlc3VsdHMuCgpUaHUgSnVuICA5IDEyOjIyOjQ1IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oCgkgIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXN0eXBlcy5oOiBDaGFuZ2VkIHRoZSB2YWxpZGF0aW9uIHByb2Nlc3MKCSAgdG8gYmUgYWJsZSB0byB3b3JrIGluIHN0cmVhbWluZyBtb2RlLiBTb21lIGRhdGF0eXBlIGZpeGVzLAoJICBlc3BlY2lhbGx5IGZvciBsaXN0IGFuZCB1bmlvbiB0eXBlcy4gRHVlIHRvIHRoZSBjaGFuZ2VzIHRoZQoJICBlcnJvciByZXBvcnQgb3V0cHV0IGhhcyBjaGFuZ2VkIGluIG1vc3QgY2FzZXMuIEluaXRpYWwgbWlncmF0aW9uIHRvCgkgIGZ1bmN0aW9ucyB1c2FibGUgYnkgYm90aCwgdGhlIHBhcnNlciBhbmQgdGhlIHZhbGlkYXRvci4gVGhpcyBzaG91bGQKCSAgZWFzZSBhIHlldC10by1jb21lIFhTIGNvbnN0cnVjdGlvbiBBUEkgaW4gdGhlIGxvbmcgdGVybSBhcyB3ZWxsLgoKVGh1IEp1biAgOSAxMDoxNjoxMSBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBNYWxjb2xtIFJvd2UgdG8gYXZvaWQgbmFtZXNwYWNlCgkgIHRyb3VibGVzIG9uIHJvbGxiYWNrIHBhcnNpbmcgb2YgZWxlbWVudHMgc3RhcnQgIzMwNDc2MQoJKiB0ZXN0L25zY2xlYW4ueG1sIHJlc3VsdC9ub2VudC9uc2NsZWFuLnhtbCByZXN1bHQvbnNjbGVhbi54bWwqOgoJICBhZGRlZCBpdCB0byB0aGUgcmVncmVzc2lvbiB0ZXN0cy4KClRodSBKdW4gIDkgMDA6MzM6NTAgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGFwcGxpZWQgcGF0Y2ggZnJvbSBSb2IgUmljaGFyZHMKCSAgZm9yIHhtbDpzcGFjZSBhbmQgeG1sOmxhbmcgaGFuZGxpbmcgd2l0aCBTQVgyIGFwaS4KCldlZCBKdW4gIDggMTk6NDE6MzggQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYzogYXBwbGllZCBwYXRjaCBmcm9tIE1vcnRlbiBXZWxpbmRlciwgY2xvc2luZyBidWcgIzMwNjkwMQoJICBvbiBjb21waWxpbmcgc3Vic2V0cyBvZiB0aGUgbGlicmFyeQoKV2VkIEp1biAgOCAxOToxMTo0MiBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeHN0Yy9NYWtlZmlsZS5hbSB4c3RjLnB5IHhzdGMtdG8tcHl0aG9uLnhzbDogQWRhcHRlZCB0aGUKCSAgWFMgdGVzdHMgdG8gdXNlIHRoZSBuZXcgcmVsZWFzZSBvZiB0ZXN0cyBhbmQgdGVzdC1kZWZpbml0aW9ucy4KCjIwMDUtMDYtMDcgIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBjMTRuLmM6IGZpeCByZW5kZXJpbmcgb2YgYXR0cmlidXRlcyB3aGVuIHBhcmVudCBub2RlCglpcyBub3QgaW4gdGhlIG5vZGUgc2V0CgoyMDA1LTA2LTA2ICBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogYzE0bi5jOiBmaXhlZCB4bWwgYXR0cmlidXRlcyBwcm9jZXNzaW5nIGJ1ZyBpbiBleGMgYzE0bgoJKiB4bWxsaW50LmM6IGFkZGVkIC0tZXhjLWMxNG4gY29tbWFuZCBsaW5lIG9wdGlvbgoKTW9uIEp1biAgNiAwNjo0MzozMyBQRFQgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmMsIHBhdHRlcm4uYzogRW5oYW5jZWQgeG1sWFBhdGhSdW5TdHJlYW1FdmFsLCBmaXhlZAoJICBoYW5kbGluZyBvZiBkZXB0aC9sZXZlbCBmb3IgY2FzZXMgbGlrZSB1bmlvbiBvcGVyYXRvcgoJICAoYnVnICMzMDYzNDggcmVwb3J0ZWQgYnkgQm9iIFN0YXl0b24pLiAgQWxzbyBlbmhhbmNlZAoJICBzZXZlcmFsIGNvbW1lbnRzIHRocm91Z2hvdXQgcGF0dGVybi5jLgoJKiBkb2MvYXBpYnVpbGQucHk6IGZpeGVkIHByb2JsZW0gaW4gaGFuZGxpbmcgb2YKCSAgJ3NpZ25lZCcgZGVjbGFyYXRpb24uICBSZWJ1aWx0IHRoZSBkb2NzLgoJICAKVHVlIE1heSAzMSAyMDozNToyNyBQRFQgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhpbmNsdWRlLmM6IEVuaGFuY2VkIGhhbmRsaW5nIG9mIHhtbDpiYXNlIGZvciBpbmNsdWRlZAoJICBlbGVtZW50cywgZml4aW5nIGJ1Z3MgMTY5MjA5IGFuZCAzMDIzNTMuCgpXZWQgTWF5IDI1IDE4OjU5OjUzIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEZpeGVkIGZhY2V0IGVycm9ycyB0byBiZSBjaGFubmVsbGVkIGJhY2sgZm9yCgkgIHVuaW9uIHR5cGUgbWVtYmVyczsgZmFjZXQtdmFsaWRhdGlvbiB3aWxsIHN0b3Agbm93IG9uIHRoZQoJICBmaXJzdCBlcnJvci4gUmVwb3J0ZWQgYnkgR1VZIEZhYnJpY2UgdG8gdGhlIG1haWxpbmctbGlzdC4KCSogeG1sc2NoZW1hc3R5cGVzLmM6IENoYW5nZWQgdG8gaWdub3JlIGxlbmdoLXJlbGF0ZWQgZmFjZXQKCSAgdmFsaWRhdGlvbiBmb3IgUU5hbWVzIGFuZCBOT1RBVElPTnMgYXMgcHJvcG9zZWQgYnkgdGhlCgkgIHNjaGVtYSBwZW9wbGUuCgkqIHRlc3Qvc2NoZW1hcy91bmlvbjIqIHJlc3VsdC9zY2hlbWFzL3VuaW9uMio6IEFkZGVkCgkgIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIHVuaW9uIHR5cGVzIChieSBHVVkgRmFicmljZSkuCgpGcmkgTWF5IDIwIDIwOjQ4OjA4IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzYXZlLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBNYXJrIFZha29jIGZpeGluZyBzYXZpbmcgb2YKCSAgQ0RBVEEgd2l0aCBOVUxMIGNvbnRlbnQuCgpUaHUgTWF5IDEyIDE1OjE0OjI2IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogQ2hhbmdlZCB0aGUgVkFMSURfVFpPIG1hY3JvIHRvIHJlc3RyaWN0CgkgIHRoZSB0aW1lem9uZSB0byAtODQwIHRvIDg0MC4KClRodSBNYXkgMTIgMTU6MDU6MTEgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBBcHBsaWVkIHBhdGNoIGZyb20gU3RldmUgTmFpcm4gKGJ1ZyAjMzAzNjcwKQoJICBmb3IgInNpZ25lZCBpbnQiIG9mIHRoZSBkYXRlLXRpbWUgdGltZXpvbmUgZmllbGQuIFNpbGVuY2VkCgkgIGEgd2FybmluZy4KCldlZCBNYXkgMTEgMjA6MDQ6MDkgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbGllZCBwYXRjaCBmb3IgcmVwbGFjZU5vZGUgZnJvbSBCcmVudCBIZW5kcmlja3MKClR1ZSBNYXkgMTAgMTc6Mjc6NTIgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4ZWQgYnVnICMzMDM2ODIgb2YgYSBsZWFrIHJlcG9ydGVkIGJ5IE1hbGNvbG0gUm93ZQoKVHVlIE1heSAxMCAxMTo1MDoxNiBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdGFwaS5jOiBhcHBsaWVkIHBhdGNoIGZyb20gU3RldmUgTmFpcm4gdG9mIGZpeCB0aGUgY29tcGlsYXRpb24KCSAgcHJvYmxlbSBleHBvc2VkIGluIGJ1ZyAjMzAzNjQwCgpUdWUgTWF5IDEwIDExOjExOjI2IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB0ZXN0L3NjaGVtYXMvYnVnMzAzNTY2XzEqIHJlc3VsdC9zY2hlbWFzL2J1ZzMwMzU2Nl8xXzEqOgoJICBBZGRlZCByZWdyZXNzaW9uIGEgdGVzdCBwcm92aWRlZCBieSBIZWlrbyBPYmVyZGllayAoYnVnICMzMDM1NjYpLgoKTW9uIE1heSAgOSAxNzo1Njo1OCBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogcGF0dGVybi5jOiBDaGFuZ2VkIHRoZSBYUGF0aCAiLiIgdG8gcmVzb2x2ZSBvbmx5IG9uIHRoZSBmaXJzdAoJICBsZXZlbCBmb3IgWE1MIFNjaGVtYSBJRENzIChidWcgIzMwMzU2NiByZXBvcnRlZCBieSBIZWlrbyBPYmVyZGllaykuCgkgIFRoaXMgc2hvdWxkIG5vdCBhZmZlY3QgcGF0dGVybi1saWtlIHJlc29sdXRpb24gb24gZXZlcnkgbGV2ZWwuCgpTdW4gTWF5ICA4IDEzOjM1OjM5IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxtZW1vcnkuYzogZml4ZWQgIzE2OTYzMCBzZWdmYXVsdCBpbiB4bWxNZW1EaXNwbGF5CgpGcmkgTWF5ICA2IDEzOjQwOjAzIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vZnRwLmM6IGZpeGluZyBidWcgIzMwMzA2OCBpbmNyZWFzaW5nIHRoZSBuYW5vZnRwIGJ1ZmZlci4KCSogZG9jL2FwaWJ1aWxkLnB5OiBmaXhlZCBfX2F0dHJpYnV0ZSgpIHBhcnNpbmcgcHJvYmxlbQoJKiBkb2MvKiB0ZXN0YXBpLmM6IHJlZ2VuZXJhdGVkIHRoZSBkZXNjcmlwdGlvbnMgYW5kIGRvY3MuCgpXZWQgTWF5ICA0IDExOjE2OjAwIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gdGhyZWFkcy5jOiBvbiBsaW51eC9nY2MgdXNlIHdlYWsgZGVmaW5pdGlvbnMKCSAgdG8gYXZvaWQgbGlua2luZyB3aXRoIHB0aHJlYWQgbGlicmFyeSBvbiBub24tdGhyZWFkZWQgZW52aXJvbm1lbnRzLgoJKiB4cGF0aC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gTWFyayBWYWtvYyB3LnIudC4gYSBidWdneSBuYW1lc3BhY2UKCSAgbGlzdCBhbGxvY2F0aW9uLgoKRnJpIEFwciAyOSAxMToyNzozNyBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogcGFyc2VyLmM6IEZpeGVkIGEgdGVzdCBmb3IgZHVwbGljYXRlIGF0dHJpYnV0ZXM6IE5vbi1wcmVmaXhlZAoJICBhdHRyaWJ1dGVzIHdlcmUgdHJlYXRlZCBhcyBiZWluZyBib3VuZCB0byB0aGUgZGVmYXVsdCBuYW1lc3BhY2UuCgpUdWUgQXByIDE5IDE3OjUxOjMyIENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogRml4ZWQgZGF0ZS10aW1lIHJlbGF0ZWQgdmFsaWRhdGlvbgoJICAocmVwb3J0ZWQgYnkgRGF2aWQgQ3Jvc3NsZXksIGJ1ZyAjMzAwNTc2KS4KClR1ZSBBcHIgMTkgMTY6NTU6NDAgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYyB4bWxyZWdleHAuYzogUmVtb3ZlZCA1IHVubmVjZXNzYXJ5CgkgIGRlcmVmZXJlbmNlcyAocmVwb3J0ZWQgYnkgQW5kcml5LCBidWcgIzMwMTA3NCkuCgpUdWUgQXByIDE5IDIyOjMzOjE4IEhLVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogQWRkZWQgc29tZSBjb2RlIHRvIGF2b2lkIGludGVnZXIgb3ZlcmZsb3cgZm9yCgkgIGNlaWwsIGZsb29yIGFuZCByb3VuZCBmdW5jdGlvbnMgKGJ1ZyAzMDExNjIpCgpUdWUgQXByIDE5IDEzOjIxOjU0IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IFJlbW92ZWQgd29ya2Fyb3VuZCBmb3IgYnVnICMxNzIyMTUsIHNpbmNlIGl0CgkgIGRvZXMgbW9yZSBoYXJtIGluIHNvbWUgc2NlbmFyaW9zLiBBZGRlZCBzb21lIG9mIHRoZQoJICAiUGFydGljbGUgUmVzdHJpY3Rpb24gT0siIGNvbnN0cmFpbnRzIC0gbm90IHlldCBlbmFibGVkLgkgIAoKTW9uIEFwciAxOCAxMzowMjo1NSBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogcmVzdWx0L3NjaGVtYXMvY2hhbmdlbG9nMDkzKjogQWRkZWQgdGVzdCByZXN1bHRzLgoKTW9uIEFwciAxOCAxMjo0MjoxNCBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBBZGRlZCBvdXRwdXQgb2YgY2Fub25pY2FsIHZhbHVlcyBpbgoJICBpZGVudGl0eS1jb25zdHJhaW50IGVycm9yIG1lc3NhZ2VzLgoJKiB4bWxzY2hlbWFzdHlwZXMuYyBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzdHlwZXMuaDoKCSAgQWRkZWQgeG1sU2NoZW1hR2V0Q2Fub25WYWx1ZVdodHNwKCkgdG8gdGhlIEFQSS4KCSAgRnVydGhlciBlbmhhbmNlbWVudCBvZiB0aGUgY2Fub25pY2FsIHZhbHVlCgkgIGNvbnZlcnNpb24uCgkqIHRlc3Qvc2NoZW1hcy9jaGFuZ2Vsb2cwOTNfMC4qOiBBZGRlZCB0ZXN0IHdpdGggYW4gWFNECgkgIHN1Ym1pdHRlZCBieSBSYW5keSBKLiBSYXkuCgpGcmkgQXByIDE1IDA5OjMzOjIxIEhLVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdmFsaWQuYzogQXBwbGllZCBEYW5pZWwncyBmaXggZm9yIG1lbW9yeSBsZWFrIGluIGR0ZAoJICBwcmVmaXggKGJ1ZyAzMDA1NTApLgoJKiB4cGF0aC5jOiBtaW5vciBjaGFuZ2UgdG8gY29tbWVudCBvbmx5CgpUaHUgQXByIDE0IDIwOjUyOjQxIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxtZW1vcnkuYzogYWRkZWQgdGhlIGNhbGwgdG8gdGhlIGJyZWFrcG9pbnQgcm91dGluZQoJICB3aGVuIGEgbW9uaXRvcmVkIGJsb2NrIGlzIHJlYWxsb2NhdGVkIG9yIGZyZWVkCgpXZWQgQXByIDEzIDA1OjU1OjUxIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vaHR0cC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQXJvbiBTdGFuc3ZpayBmb3IgYnVnICMxNzI1MjUKCSAgYWJvdXQgSFRUUCBxdWVyeSBzdHJpbmcgcGFyYW1ldGVyIGJlaW5nIGxvc3QKClR1ZSBBcHIgMTIgMDQ6MDM6MzIgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5OiBhcHBsaWVkIHBhdGNoIGZyb20gQnJlbnQgSGVuZHJpY2tzCgkgIGFkZGluZyBuYW1lc3BhY2UgcmVtb3ZhbCBhdCB0aGUgcHl0aG9uIGxldmVsICMzMDAyMDkKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9uc2RlbC5weTogYWRkZWQgdGhlIHJlZ3Jlc3Npb24KCSAgdGVzdAoKU3VuIEFwciAxMCAwOTowMzoyMiBIS1QgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IGZpeGVkIHNldmVyYWwgcGxhY2VzIHdoZXJlIG1lbW9yeSBjbGVhbnVwIHdhcyBub3QKCSAgcHJvcGVybHkgZG9uZSBhZnRlciBhbiBlcnJvciB3YXMgZGV0ZWN0ZWQgKHByb2JsZW0gd2FzCgkgIHJlcG9ydGVkIG9uIHRoZSBtYWlsaW5nIGxpc3QgYnkgUGF3ZWwgUGFsdWNoYSkKCkZyaSBBcHIgIDggMjE6NTg6MDQgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogQWRkZWQgc3Vic3RpdHV0aW9uIGdyb3VwIGNvbnN0cmFpbnRzOyBjaGFuZ2VkCgkgIHRoZSBidWlsZCBvZiB0aGUgcHJlLWNvbXB1dGVkIHN1YnN0aXR1dGlvbiBncm91cHMuIENoYW5uZWxlZAoJICBlcnJvcnMgZHVyaW5nIHhzaSBhc3NlbWJsaW5nIG9mIHNjaGVtYXMgdG8gdGhlIHZhbGlkYXRpb24KCSAgY29udGV4dC4gRml4ZWQgYSBiaWcgbWVtb3J5IGxlYWssIHdoaWNoIG9jY3VyZWQgd2hlbiB1c2luZwoJICBJRENzOiB0aGUgcHJlY29tcHV0ZWQgdmFsdWUgb2YgYXR0cmlidXRlcyB3YXMgbm90IGZyZWVkIGlmCgkgIHRoZSBhdHRyaWJ1dGUgZGlkIG5vdCByZXNvbHZlIHRvIGFuIElEQyBmaWVsZCAoZGlzY292ZXJlZAoJICB3aXRoIHRoZSBoZWxwIG9mIFJhbmR5IEouIFJheSdzIHNjaGVtYSwgcG9zdGVkIHRvIHRoZQoJICB4bWxzY2hlbWEtZGV2IG1hbGluZyBsaXN0KS4KCkZyaSBBcHIgIDggMTM6MjI6MDEgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogQWRkZWQgIlBhcnRpY2xlIGNvcnJlY3QgMiIgdG8gcGFyc2luZyBvZiBtb2RlbCBncm91cHMuCgkgIEFkZGVkIGhhbmRsaW5nIHN1YnN0aXR1dGlvbiBncm91cHMgaW5zaWRlIDxjaG9pY2U+IGFuZCA8c2VxdWVuY2U+OwoJICBmb3IgPGFsbD4gdGhpcyBpcyBub3Qgc3VwcG9ydGVkIHlldC4gQ2hhbmdlZCBjaXJjdWxhciBjaGVja3MgZm9yCgkgIG1vZGVsIGdyb3VwcyBkZWZpbml0aW9ucy4gIm1lbWJlclR5cGVzIiBhcmUgcHJvY2Vzc2VkIGF0IGRpZmZlcmVudAoJICBsZXZlbHMgbm93OiBjb21wb25lbnQgcmVzb2x1dGlvbiBmaXJzdCwgY29uc3RydWN0aW9uIGxhdGVyOyB0aGlzCgkgIGdvZXMgaGFuZCBpbiBoYW5kIHdpdGggYSBnbG9iYWwgY2hhbmdlIHRvIGhhbmRsZSBjb21wb25lbnQKCSAgcmVzb2x1dGlvbiBpbiBhIGRpc3RpbmN0IHBoYXNlLiBGaXhlZCBpbnZhbGlkIGRlZmF1bHQgdmFsdWVzIGZvcgoJICBlbGVtZW50cyB0byBtYXJrIHRoZSBzY2hlbWEgYXMgaW52YWxpZDsgdGhpcyBqdXN0IHJlc3VsdGVkIGluIGFuCgkgIGVycm9yIHJlcG9ydCBwcmV2aW91c2x5LCBidXQgdGhlIHNjaGVtYSB3YXMgaGFuZGxlZCBhcyB2YWxpZC4KCSAgU2VwYXJhdGVkIHRoZSBhc3NpZ25tZW50IG9mIHRoZSBtb2RlbCBncm91cHMgdG8gcmVmZXJlbmNpbmcKCSAgbW9kZWwgZ3JvdXAgZGVmaW5pdGlvbiByZWZlcmVuY2VzIChpLmUuIHBhcnRpY2xlcyk7IHRoaXMgd2FzCgkgIG5lZWRlZCB0byBwZXJmb3JtIHRoZSBjaXJjdWxhcml0eSBjaGVjayBmb3IgbW9kZWwgZ3JvdXAgZGVmaW5pdGlvbnMuCgkgIEFkZGVkICJFbGVtZW50IERlY2xhcmF0aW9uIFByb3BlcnRpZXMgQ29ycmVjdCAoZS1wcm9wcy1jb3JyZWN0KSIKCSAgY29uc3RyYWludHMuIFNlcGFyYXRlZCBjb21wb25lbnQgcmVzb2x1dGlvbiBmb3Igc2ltcGxlL2NvbXBsZXgKCSAgdHlwZXMuCgkqIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaDogQWRkZWQgYSBmbGFnIGZvciBzdWJzdGl0dXRpb24KCSAgZ3JvdXAgaGVhZHMuCSAgCgpXZWQgQXByICA2IDIzOjE0OjAzIENFU1QgMjAwNSBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvTWFrZWZpbGUuKjogbWFrZSBpbnN0YWxsIGNsZWFudXAKCldlZCBBcHIgIDYgMjI6NDI6MjMgQ0VTVCAyMDA1IElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS5taW5ndzogZml4ZWQgbWluZ3cgY29tcGlsYXRpb24KCSogdGVzdE1vZHVsZS5jOiByZW1vdmVkIG1pbmd3IHdhcm5pbmdzCgpXZWQgQXByICA2IDIxOjU5OjExIENFU1QgMjAwNSBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogLmN2c2lnbm9yZTogYWRkZWQgRWNsaXBzZSBwcm9qZWN0IGZpbGVzIHRvIGlnbm9yZSBsaXN0CgpXZWQgQXByICA2IDE2OjA4OjEwIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXhlZCB0aGUgYnVnIGluIGxhbmcoKSBhcyByYWlzZWQgYnkgRWxsaW90dGUgUnVzdHkgSGFyb2xkCgkqIHJlc3VsdC9YUGF0aC90ZXN0cy9sYW5nc2ltcGxlIHRlc3QvWFBhdGgvdGVzdHMvbGFuZ3NpbXBsZQoJICB0ZXN0L1hQYXRoL2RvY3MvbGFuZzogYWRkZWQgYSByZWdyZXNzaW9uIHRlc3QKClR1ZSBBcHIgIDUgMjM6NDg6MzUgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9mdHAuYzogYXBwbGllZCBmaXggZnJvbSBSb2IgUmljaGFyZHMgdG8gY29tcGlsZSBvbiBXaW5kb3dzLgoKVHVlIEFwciAgNSAxNzowMjo1OCBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBBZGRlZCAiVHlwZSBEZXJpdmF0aW9uIE9LIChDb21wbGV4KSIgY29uc3RyYWludHMKCSAgYW5kIGFuY2hvcmVkIHRoZW0gaW4gdGhlICJFbGVtZW50IExvY2FsbHkgVmFsaWQgKEVsZW1lbnQpIgoJICBjb25zdHJhaW50cy4gVGhpcyByZXN0cmljdHMgdGhlIHR5cGUgc3Vic3RpdHV0aW9uIHZpYSAieHNpOnR5cGUiLgoKVHVlIEFwciAgNSAxMzoxMDowNiBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBwYXRjaCBmcm9tIE1hdHRoZXcgQnVyZ2VzcyB0byBpbXByb3ZlIHNvbWUgc2NoZW1hcwoJICBmYWNldHMgdmFsaWRhdGlvbiBtZXNzYWdlcy4KClNhdCBBcHIgIDIgMTI6NDg6NDEgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy8qIGNvbmZpZ3VyZS5pbiBORVdTOiBwcmVwYXJpbmcgcmVsZWFzZSAyLjYuMTksIHVwZGF0ZWQgZG9jcyBhbmQKCSAgcmVidWlsZGluZy4KClNhdCBBcHIgIDIgMTM6Mjc6MzIgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhzdGMvTWFrZWZpbGUuYW06IGludGVncmF0ZWQgZml4dXAtdGVzdHMucHkKCkZyaSBBcHIgIDEgMTk6MTQ6MTggQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBmaXhlZCBhIGxhY2sgb2YgY29tbWVudCBhbmQgbWlzc2luZyB0ZXN0IGZvcgoJICBhIHBvaW50ZXIgaW4gdGhlIEFQSS4KCkZyaSBBcHIgIDEgMTc6NTQ6MjIgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhzdGMvZml4dXAtdGVzdHMucHk6IEEgdGlueSBzY3JpcHQgdG8gZml4dXAgc29tZSBvZiB0aGUgc2NoZW1hCgkgIGZpbGVzIHVzZWQgZm9yIHRoZSB0ZXN0cy4KCkZyaSBBcHIgIDEgMTc6MzM6NTAgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmgKCSAgcmVzdWx0L3NjaGVtYXMvc3JjLWVsZW1lbnQyLSouZXJyIHJlc3VsdC9zY2hlbWFzL2VsZW1lbnQtKi5lcnI6CgkgIENvbW1pdHRpbmcgYWdhaW4sIHNpbmNlIHRoZSBDVlMgc2VydmVyIGFib3J0ZWQuCgpGcmkgQXByICAxIDE1OjI5OjI3IENFU1QgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogQ29ycmVjdGVkICdsZW5ndGgnIGZhY2V0IHZhbGlkYXRpb24gZm9yCgkgIFFOYW1lcyBhbmQgbm90YXRpb25zLiBDb3JyZWN0ZWQgeG1sU2NoZW1hR2V0Q2Fub25WYWx1ZTogc29tZQoJICBkYXRhIHR5cGVzIGRpZCBub3QgcmV0dXJuIGEgdmFsdWUgaWYgYWxyZWFkeSBpbiBub3JtYWxpemVkCgkgIGZvcm0uCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmg6CgkgIEVsaW1pbmF0ZWQgY3JlYXRpb24gb2Ygc3RydWN0cyBmb3IgPHJlc3RyaWN0aW9uPiwgPGV4dGVuc2lvbj4sCgkgIDxzaW1wbGVDb250ZW50PiwgPGNvbXBsZXhDb250ZW50PiwgPGxpc3Q+IGFuZCA8dW5pb24+OiB0aGUKCSAgaW5mb3JtYXRpb24gaXMgbm93IHNldCBkaXJlY3RseSBvbiB0aGUgY29ycmVzcG9uZGluZyBzaW1wbGUvCgkgIGNvbXBsZXggdHlwZS4gQWRkZWQgc29tZSBtb3JlIGNvbXBsZXggdHlwZSBjb25zdHJhaW50cy4KCSAgQWRkZWQgZmFjZXQgZGVyaXZhdGlvbiBjb25zdHJhaW50cy4gSW50cm9kdWNlZCAicGFydGljbGUiCgkgIGNvbXBvbmVudHMsIHdoaWNoIHNlZW0gdG8gYmUgcmVhbGx5IG5lZWRlZCBpZiBhcHBseWluZwoJICBjb25zdHJhaW50cy4gQ29ycmVjdGVkL2NoYW5nZSBzb21lIG9mIHRoZSBwYXJzaW5nIGZ1bmN0aW9ucy4KCSAgVGhpcyBpcyBhbGwgYSBiaXQgc2NhcnksIHNpbmNlIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIHRoZSBjb2RlLgoJKiByZXN1bHQvc2NoZW1hcy9zcmMtZWxlbWVudDItKi5lcnIgcmVzdWx0L3NjaGVtYXMvZWxlbWVudC0qLmVycjoKCSAgQWRhcHRlZCByZWdyZXNzaW9uIHRlc3QgcmVzdWx0cy4KCkZyaSBBcHIgIDEgMTY6MDc6NTkgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9hcGlidWlsZC5weSBkb2MvZWxmZ2NjaGFjay54c2w6IHJldmFtcGVkIHRoZSBlbGZnY2NoYWNrLmggCgkgIGZvcm1hdCB0byBjb3BlIHdpdGggZ2NjNCBjaGFuZ2Ugb2YgYWxpYXNpbmcgYWxsb3dlZCBzY29wZXMsIGhhZAoJICB0byBhZGQgZXh0cmEgaW5mb3JtYXRpb25zIHRvIGRvYy9saWJ4bWwyLWFwaS54bWwgdG8gc2VwYXJhdGUKCSAgdGhlIGhlYWRlciBmcm9tIHRoZSBjIG1vZHVsZSBzb3VyY2UuCgkqICouYzogdXBkYXRlZCBhbGwgYyBsaWJyYXJ5IGZpbGVzIHRvIGFkZCBhICNkZWZpbmUgYm90dG9tX3h4eAoJICBhbmQgcmVpbXBvcnQgZWxmZ2NjaGFjay5oIHRoZXJlYWZ0ZXIsIGFuZCBhIGJpdCBvZiBjbGVhbnVwcy4KCSogZG9jLy8qIHRlc3RhcGkuYzogcmVnZW5lcmF0ZWQgd2hlbiByZWJ1aWxkaW5nIHRoZSBBUEkKClRodSBNYXIgMzEgMTc6MjA6MzIgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNhdmUuYzogZml4ZWQgYnVnIHJlcG9ydGVkIGJ5IFBldHIgUGFqYXMsIGluIHRoZSBhYnNlbmNlIG9mCgkgIGVuY29kaW5nIFVURi04IHNob3VsZCByZWFsbHkgYmUgYXNzdW1lZC4gVGhpcyBtYXkgYnJlYWsgaWYgCgkgIHRoZSBIVFRQIGhlYWRlcnMgaW5kaWNhdGVzIGZvciBleGFtcGxlIElTTy04ODU5LTEgc2luY2UgdGhpcwoJICB0aGVuIGJlY29tZXMgYSB3ZWxsIGZvcm1lZG5lc3MgZXJyb3IuCgpUaHUgTWFyIDMxIDE2OjU3OjE4IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogZml4ZWQgIzE3MjI2MCByZWR1bmRhbnQgYXNzaWdubWVudC4KCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IGZpeGVkIHhtbFNBWFBhcnNlRG9jKCkgYW5kIAoJICB4bWxQYXJzZURvYygpIHNpZ25hdHVyZXMgIzE3MjI1Ny4KClRodSBNYXIgMzEgMTY6MTE6MTAgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXggcG90ZW50aWFsIGNyYXNoIGlmIGN0eHQtPnNheC0+aWdub3JhYmxlV2hpdGVzcGFjZQoJICBpcyBOVUxMIGFzIHJlcG9ydGVkIGJ5IGJ1ZyAjMTcyMjU1CgpUaHUgTWFyIDMxIDE1OjM2OjUyIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGZpeGVkIGEgcHJvYmxlbSBpbiBSZWxheC1ORyB2YWxpZGF0aW9uICMxNTk5NjgKCSogdGVzdC9yZWxheG5nL2xpc3QuKiByZXN1bHQvcmVsYXhuZy9saXN0Xyo6IGFkZGVkIHRoZSB0ZXN0CgkgIHRvIHRoZSByZWdyZXNzaW9uIHN1aXRlCgpUaHUgTWFyIDMxIDEzOjA2OjAyIENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmM6IGZpeGVkIGJ1ZyAjMTY4NTA0CgpUaHUgTWFyIDMxIDEyOjIyOjU0IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWcuaC5pbiBjb25maWd1cmUuaW4gbmFub2Z0cC5jIG5hbm9odHRwLmMgeG1sbGludC5jCgkgIG1hY29zL3NyYy9jb25maWctbWFjLmg6IHVzZSBYTUxfU09DS0xFTl9UIGluc3RlYWQgb2YgU09DS0xFTl9UCgkgIHNpbmNlIGFwcGFyZW50bHkgSUJNIGNhbid0IGF2b2lkIGJyZWFraW5nIGNvbW1vbiBkZWZpbmVzICMxNjY5MjIKClRodSBNYXIgMzEgMTA6NDE6NDUgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmM6IGZpeCB1bml0aW5pYWxpemVkIHZhcmlhYmxlIGluIG5vdCBmcmVxdWVudGx5IHVzZWQKCSAgY29kZSBidWcgIzE3MjE4MgoKVGh1IE1hciAzMSAwMDo0NToxOCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLnB5OiBhbm90aGVyIHBhdGNoIGZyb20gQnJlbnQKCSAgSGVuZHJpY2tzIHRvIGFkZCBuZXcgaGFuZGxlcnMgd2l0aCB0aGUgdmFyaW91cyB2YWxpZGl0eSBjb250ZXh0cwoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3ZhbGlkRFRELnB5CgkgIHB5dGhvbi90ZXN0cy92YWxpZFJORy5weSBweXRob24vdGVzdHMvdmFsaWRTY2hlbWFzLnB5OiBhbHNvIAoJICBhZGRlZCB0aGUgcmVncmVzc2lvbiB0ZXN0cyBoZSBwcm92aWRlZAoKV2VkIE1hciAzMCAwOTozOToyNyBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBCcmVudAoJICBIZW5kcmlja3MgdG8gYXZvaWQgbGVhayBpbiBweXRob24gYmluZGluZ3Mgd2hlbiB1c2luZyBzY2hlbWFzCgkgIGVycm9yIGhhbmRsZXJzLgoKVHVlIE1hciAyOSAyMjoyOToyOCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogZml4aW5nIGJ1ZyAxNjgxOTYsIDxhIG5hbWU9IiI+IG11c3QgYmUgVVJJIGVzY2FwZWQgdG9vCgpTdW4gTWFyIDI3IDEzOjI0OjI0IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGNsZWFudXAgb2YgdGhlIFByb3AgcmVsYXRlZCBmdW5jdGlvbnMgYW5kIHhtbE5ld05vZGVFYXROYW1lCgkgIGJ5IFJvYiBSaWNoYXJkcwoKVGh1IE1hciAyNCAxOTowMToyMiBQU1QgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGdlbnRlc3QucHksIHRlc3RhcGkuYzogZml4ZWQgcHJvYmxlbSB3aXRoICdtaW5pbWFsIGxpYnJhcnknCgkgIGNvbXBpbGF0aW9uIChMSUJYTUxfUEFUVEVSTl9FTkFCTEVEIG5vdCBwcm9wZXJseSBjaGVja2VkKSByZXBvcnRlZAoJICBieSBHcmVnIE1vcmdhbgoKVGh1IE1hciAyNCAxMjowMTozMCBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEZpeGVkIGNhbGwgdG8gYSBmYWNldCBlcnJvciByZXBvcnQ6IHRoZSB0eXBlIG9mCgkgIHRoZSBlcnJvciB3YXMgd3JvbmcsIHJlc3VsdGluZyBpbiBhIHNlZ2ZhdWx0IChidWcgIzE3MTIyMCwgcmVwb3J0ZWQKCSAgYnkgR1VZIEZhYnJpY2UpLgoKTW9uIE1hciAyMSAyMjo1ODozNyBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IFJlbW92ZWQgYSBzdHVwaWQgYnVnIGluIHhtbFNjaGVtYVZhbGlkYXRlQXR0cmlidXRlcywKCSAgZmFpbGluZyB0byBidWlsZCBhIGxpbmtlZCBsaXN0IGNvcnJlY3RseSAoYnVnICMxNjk4OTgsIHJlcG9ydGVkCgkgIGJ5IGJpbmcgc29uZywgaG1tLi4uKS4KCk1vbiBNYXIgMjEgMjE6MDk6MDcgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBGaXhlZCBhIHNlZ2ZhdWx0LCB3aGljaCBvY2N1cmVkIGR1cmluZyBidWJibGluZwoJICBvZiBJREMgbm9kZXMgKGJ1ZyAjMTcwNzc5IGFuZCAjMTcwNzc4LCByZXBvcnRlZCBieSBHVVkgRmFicmljZSk6CgkgIGEgdmFyaWFibGUgd2FzIG1pc3NlZCB0byBiZSByZXNldCBpbiBhIGxvb3AuIERlYWN0aXZhdGVkIGJ1YmJsaW5nLAoJICBpZiBub3QgcmVmZXJlbmNlZCBieSBhIGtleXJlZi4KClN1biBNYXIgMjAgMTE6MTM6MDIgUFNUIDIwMDUgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCQoJKiBjMTRuLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogc3BlY2lhbCBjYXNlICJEQVY6IiBuYW1lc3BhY2UKCWluIGMxNG4gcmVsYXRpdmUgbmFtZXNwYWNlcyBjaGVjayBhbmQgYWRkIHN0cnVjdHVyZWQgZXJyb3IgbWVzc2FnZXMKCXRvIGMxNG4gY29kZQoKVGh1IE1hciAxNyAxMjo1NToyMyBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IFJlbW92ZWQgaW5oZXJpdGFuY2Ugb2YgIm1peGVkIiBjb250ZW50IHR5cGUgZm9yCgkgIHNob3J0LWhhbmQgcmVzdHJpY3Rpb25zIG9mICJhbnlUeXBlIiAocmVwb3J0ZWQgYnkgR3V5IEZhYnJpY2UKCSAgdG8gdGhlIG1haWxpbmcgbGlzdCkuIEFkZGVkIHRoZSBuYW1lc3BhY2UgY29udmVyc2lvbiAoY2hhbWVsZW9uCgkgIGluY2x1ZGVzKSBmb3IgdGhlIGJhc2UgdHlwZSByZWZlcmVuY2Ugb2YgPHJlc3RyaWN0aW9uPiBhbmQKCSAgPGV4dGVuc2lvbj4uCgkqIHRlc3Qvc2NoZW1hcy9idWcxNTI0NzBfMS54c2Q6IEFkYXB0ZWQgZHVlIHRvIHRoZSBhYm92ZSBjaGFuZ2UKCSAgb2YgIm1peGVkIiBpbmhlcml0YW5jZS4KClRodSBNYXIgMTcgMTE6MDM6NTkgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBmaXhlZCBhID0gLT4gPT0gZXJyb3IgcG9pbnRlZCBieSBHVVkgRmFicmljZQoKV2VkIE1hciAxNiAyMjo1Mzo1MyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IG1vcmUgZGVidWcgbWVzc2FnZXMgZnJvbSBNYXR0aGV3IEJ1cmdlc3MKCSogeG1sc2NoZW1hc3R5cGVzLmM6IHhtbFNjaGVtYVZhbGlkYXRlTGVuZ3RoRmFjZXQgQVBJIG1pc3NpbmcgY2hlY2suCgpXZWQgTWFyIDE2IDE3OjM3OjA0IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBBYWFhbm5uZCBwdXR0aW5nIGJhY2sgdGhlIHByZXZpb3VzIGNoYW5nZXMgZG9uZQoJICBieSBEYW5pZWwsIHdoaWNoIEkgb3Zlcndyb3RlIHdpdGggdGhlIHByZXZpb3VzIGNvbW1pdC4KCldlZCBNYXIgMTYgMTc6MjA6MjUgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXN0eXBlcy5oOgoJICBIb3BlZnVsbHkgZmluaXNoZWQgdmFsaWRhdGlvbiBhZ2FpbnN0IGZhY2V0cyB0byB1c2UgdGhlIG5vcm1hbGl6ZWQKCSAgdmFsdWUgb2YgYm90aCwgdGhlIGZhY2V0cyBhbmQgaW5zdGFuY2UgdmFsdWVzLiBBZGRlZCAKCSAgeG1sU2NoZW1hVmFsaWRhdGVMZW5ndGhGYWNldFdodHNwKCksIHhtbFNjaGVtYVZhbGlkYXRlRmFjZXRXaHRzcCgpCgkgIGFuZCB4bWxTY2hlbWFHZXRWYWxUeXBlKCkgdG8gdGhlIHNjaGVtYSBBUEkuCgpXZWQgTWFyIDE2IDEzOjU1OjMxIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluOiBkbyBub3QgcGFja2FnZSAubGEgZmlsZXMKCSogeG1sbGludC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gR2VycnkgTXVycGh5IGZvciB4bWxsaW50IHJldHVybiBjb2RlCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBmaXhlZCBhIGNvdXBsZSBvZiBtaXNzaW5nIHRlc3RzIG9mIHBhcmFtZXRlcnMKCSAgYXQgcHVibGljIEFQSSBlbnRyeSBwb2ludHMuCgpUdWUgTWFyIDE1IDIzOjMxOjE0IEhLVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGEgY291cGxlIG9mIG1vcmUgY2hhbmdlcyB0byB2YXJpb3VzCgkgIGRlY2ltYWwtaGFuZGxpbmcgcm91dGluZXMuICBGaXhlcyBweXRob24gc29tZSBwcm9ibGVtcwoJICB0dXJuZWQgdXAgYnkgdGhlIHB5dGhvbiB0ZXN0cy4KCSogTWFrZWZpbGUuYW06IGNoYW5nZSBTY2hlbWFzUHl0aG9uVGVzdHMgbWVzc2FnZSB0byB3YXJuCgkgIHRoYXQgdGhlcmUgYXJlIDEwICdleHBlY3RlZCcgZXJyb3JzIChyYXRoZXIgdGhhbiA2KSBzaW5jZQoJICB3ZSBub3cgcmVqZWN0IGEgJysnIHNpZ24gb24gYW4gdW5zaWduZWQuCgpUdWUgTWFyIDE1IDE1OjQzOjI3IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jIHhtbHNjaGVtYXN0eXBlcy5oOiBJbiBwcmVwYXJhdGlvbiB0byB1c2UKCSAgbm9ybWFsaXplZCB2YWx1ZXMgb2YgZmFjZXRzIGR1cmluZyB2YWxpZGF0aW9uOiBjaGFuZ2VkIHRoZQoJICBhcmd1bWVudHMgb2Ygc29tZSBzdHJpbmcgY29tcGFyaXNvbiBmdW5jdGlvbnM7IGFkZGVkIGEgc3RhdGljCgkgIHhtbFNjaGVtYVZhbGlkYXRlRmFjZXRJbnRlcm5hbCgpIHdpdGggbW9yZSBhcmd1bWVudHMgdG8gYmUKCSAgbW9yZSBmbGV4aWJsZS4gUHJlcGFyZWQgWE1MX1NDSEVNQV9GQUNFVF9FTlVNRVJBVElPTiB2YWxpZGF0aW9uCgkgIHRvIHVzZSB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbnMuIEZpeGVkIHNvbWUgYXNzaWdubWVudHMgaW4KCSAgeG1sU2NoZW1hVmFsQXRvbWljVHlwZSgpOiB0b3RhbCBkaWdpdCBjb3VudCwgbG8sIG1pLCBoaS4KClN1biBNYXIgMTMgMTk6MzI6MDMgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTkVXUyBjb25maWd1cmUuaW4gdGVzdGFwaS5jIGRvYy8qOiBwcmVwYXJpbmcgcmVsZWFzZSBvZiAyLjYuMTgKCSAgdXBkYXRlZCBkb2NzIGFuZCByZWJ1aWx0CgkqIGxpYnhtbC5zcGVjLmluOiByZWFjdGl2YXRlZCBnY2MgcHJvZmlsaW5nIGZvciBnY2MgPj0gNC4wLjAKClNhdCBNYXIgMTIgMTk6NTA6MjIgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogcmVtb3ZlZCBhIHN0YXRpYyBidWZmZXIgaW4geG1sQnl0ZUNvbnN1bWVkKCksCgkgIGFzIHBvaW50ZWQgYnkgQmVuIE1hdXJlciwgZml4ZXMgIzE3MDA4NgoJKiB4bWxzY2hlbWFzLmM6IHJlbW92ZSBhIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgcG9pbnRlciB3YXJuaW5nCgpGcmkgTWFyIDExIDIzOjUzOjEzIEhLVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGVuaGFuY2VkIHRoZSBwYXJzaW5nIG9mIFhNTF9TQ0hFTUFTX0RFQ0lNQUwKCSAgYW5kIG11Y2ggb2YgdGhlIHJvdXRpbmUgeG1sU2NoZW1hQ29tcGFyZURlY2ltYWxzLiAgVGhlCgkgIGNoYW5nZXMgd2VyZSBuZWNlc3NhcnkgdG8gZml4IGEgcHJvYmxlbSByZXBvcnRlZCBvbiB0aGUKCSAgbWFpbGluZyBsaXN0IGJ5IEpvaG4gSG9ja2FkYXkuCgpGcmkgTWFyIDExIDEzOjIyOjUyIENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogVGhlIHNjaGVtYSBwYXJzZXIgd2lsbCBzdG9wIGlmIGNvbXBvbmVudHMgY291bGQKCSAgbm90IGJlIHJlc29sdmVkLiBUaGlzIGlzIG5vdCBjb25mb3JtaW5nIHRvIHRoZSBzcGVjIGJ1dCBmb3Igbm93CgkgIHdpbGwgYXZvaWQgaW50ZXJuYWwgZXJyb3JzIGR1cmluZyB0eXBlIGZpeHVwIGFuZCBjb250ZW50IG1vZGVsCgkgIGNyZWF0aW9uLiBSZXN0cnVjdHVyZWQgaW5jbHVzaW9uL2ltcG9ydCBvZiBzY2hlbWF0YTogdGhpcyBhdm9pZHMKCSAgZHVwbGljYXRlLCBzZWxmIGFuZCBjaXJjdWxhciBpbmNsdXNpb24uIENoYW1lbGVvbiBpbmNsdWRlcyBhcmUKCSAgc3RpbGwgd29ya2Fyb3VuZGVkLiBBZGRlZCByZXN0cmljdGlvbiB0byBkaXNhbGxvdyByZWZlcmVuY2VzIHRvCgkgIG5vbi1pbXBvcnRlZCBuYW1lc3BhY2VzLiBDb3JyZWN0ZWQgcGFyc2luZyBvZiA8Z3JvdXA+LgoJKiByZXN1bHQvc2NoZW1hcy9idWcxNjc3NTRfMF8wKjogQWRkZWQgYSBtaXNzaW5nIHRlc3QgcmVzdWx0LgoKVGh1IE1hciAxMCAxNjowMjoxNyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MveG1sLmh0bWwgZG9jL2VuY29kaW5nLmh0bWw6IEVucmljaGVkIGVuY29kaW5nLmh0bWwgd2l0aCBtb3JlCgkgIGxpbmsgYW5kIGZvcmV3b3JkIHdhcm5pbmcgdG8gYXZvaWQgcHJvYmxlbSB3aXRoIGlnbm9yYW50CgkgIHByb2dyYW1tZXJzLCBjLmYgIzE2OTcyMQoKVGh1IE1hciAxMCAxNTowMTozNCBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3JlYWRlcm5leHQucHk6IGFkZGVkCgkgIGEgcmVncmVzc2lvbiB0ZXN0IGZyb20gUm9iIFJpY2hhcmRzIGZvciB0aGUgcHJldmlvdXMgYnVnCgpUaHUgTWFyIDEwIDEzOjIyOjM2IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBhcHBsaWVkIGZpeCBmb3IgeG1sVGV4dFJlYWRlck5leHQoKSBidWcgZnJvbQoJICBSb2IgUmljaGFyZHMKClRodSBNYXIgMTAgMTE6MzU6NTcgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbW9kdWxlLmM6IHNlY29uZCBwYXRjaCBmcm9tIFJpY2sgSm9uZXMsIHBvcnRhYmlsaXR5IGZpeCBmb3IKCSAgSFAtVVgKCSogZG9jL2V4YW1wbGVzL3hwYXRoMS5jIGRvYy9leGFtcGxlcy94cGF0aDIuYzogZmlyc3QgZml4IGZyb20gUmljayBKb25lcwoJICB0byBhdm9pZCB3YXJuaW5ncy4KClRodSBNYXIgMTAgMTA6MjA6MjMgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvaGFzaC5oIGxpYnhtbC5oIGxpYnhtbC5zcGVjLmluOiBzb21lIGdjYzQgcG9ydGFiaWxpdHkKCSAgcGF0Y2hlcywgaW5jbHVkaW5nIGEgc2VyaW91cyBhbGlhc2luZyBidWcgZXhwb3NlZCBpbiBzMzkwIAoJICB3aGVuIHRyeWluZyB0byBjb252ZXJ0IGRhdGEgcG9pbnRlciB0byBjb2RlIHBvaW50ZXIuCgpNb24gTWFyICA3IDE4OjM0OjAwIENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogVGlueSByZXN0cnVjdHVyaW5nIG9mIHRoZSB2YWxpZGF0aW9uIHN0YXJ0LXVwCgkgIGZ1bmN0aW9ucy4gQWRkZWQgY2xlYW51cCBvZiB0aGUgdmFsaWRhdGlvbiBjb250ZXh0IGF0IHRoZQoJICBlbmQgb2YgdmFsaWRhdGlvbi4gVGhpcyB0YWtlcyBjYXJlIG9mIHRoZSB2YWxpZGF0aW9uIGNvbnRleHQKCSAgYmVpbmcgcmV1c2VkLgoKTW9uIE1hciAgNyAxMjoxMjowMSBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogVGlueSBjaGFuZ2VzIGluIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9ucwoJICBJIGZvcmdvdCB0byBjb21taXQgbGFzdCB0aW1lLgoKRnJpIE1hciAgNCAyMjo1MTo0MiBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEFkZGVkIElEQyB2YWxpZGF0aW9uIG9mIGFueVNpbXBsZVR5cGUgYXR0cmlidXRlCgkgIHZhbHVlczsgYW55d2F5IHRoZSBJREMga2V5IGNvbXBhcmlzb24gaXMgcmVzdHJpY3RlZCB0bwoJICBhbnlTaW1wbGVUeXBlIDwtLT4gc3RyaW5nIGJhc2VkIHR5cGVzLiBGb3Igb3RoZXIgdHlwZXMgd2UKCSAgd291bGQgcG9zc2libHkgbmVlZCB0aGUgY2Fub25pY2FsIGxleGljYWwgcmVwcmVzZW50YXRpb24gb2YKCSAgdGhlbTsgdGhpcyBzb3VuZHMgbm90IHBlcmZvcm1hbnQsIHNpbmNlIHdlIHdvdWxkIG5lZWQgdG8KCSAgYnVpbGQgc3VjaCBhIHJlcHJlc2VudGF0aW9uIGVhY2ggdGltZSB3ZSB3YW50IHRvIGNvbXBhcmUgYWdhaW5zdAoJICBhbnlTaW1wbGVUeXBlLiBUT0RPOiB0aGluayBhYm91dCBidWZmZXJpbmcgdGhlIGNhbm9uaWNhbCB2YWx1ZXMKCSAgc29tZXdoZXJlLiBGaXhlZCBlcnJvciByZXBvcnRzIGZvciBkZWZhdWx0IGF0dHJpYnV0ZXMgdG8gd29yawoJICB3aXRob3V0IGEgbm9kZSBiZWluZyBzcGVjaWZpZWQuIFRoaXMgYWxsIGFuZCB0aGUgZW5hYmxpbmcgb2YgSURDCgkgIHZhbGlkYXRpb24gZml4ZXMgYnVnICMxNjUzNDYgKHJlcG9ydGVkIGJ5IEJlbm9pdCBHcj9nb2lyZSAtIGNvdWxkCgkgIG5vdCByZWFkIGhpcyBsYXN0IG5hbWUgY29ycmVjdGx5IGZyb20gYnVnemlsbGEpLgoKRnJpIE1hciAgNCAxODo1Nzo0NCBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEVuYWJsZWQgSURDIHBhcnNpbmcgYW5kIHZhbGlkYXRpb24uCgkqIHhtbHNjaGVtYXN0eXBlcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXN0eXBlcy5oOiAKCSAgQWRkZWQgeG1sU2NoZW1hQ29weVZhbHVlIHRvIHRoZSBBUEk7IHRoaXMgd2FzIGRvbmUgZHVlIHRvCgkgIHZhbGlkYXRpb24gb2YgZGVmYXVsdCBhdHRyaWJ1dGVzIGFnYWluc3QgSURDczogc2luY2UgSURDIGtleXMKCSAgY29uc3VtZSB0aGUgcHJlY29tcHV0ZWQgdmFsdWUsIG9uZSBuZWVkcyBhIGNvcHkuCgkqIHBhdHRlcm4uYzogRW5hYmxlZCBJREMgc3VwcG9ydDsgdGhpcyBpcyBjdXJyZW50bHkgZG9uZQoJICB2aWEgY2FsbGluZyB4bWxQYXR0ZXJuY29tcGlsZSB3aXRoIGEgZmxhZyBhcmcgb2YgMS4KCldlZCBNYXIgIDIgMTE6NDU6MTggQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gZG9jL2V4YW1wbGVzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbQoJICB4c3RjL01ha2VmaWxlLmFtOiB0cnkgdG8gZml4IGEgcHJvYmxlbSB3aXRoIHZhbGdyaW5kLgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0KCSAgcHl0aG9uL3Rlc3RzL3RzdG1lbS5weTogYXBwbGllZCBtZW1vcnkgbGVhayBmaXggZnJvbSBCcmVudCBIZW5kcmlja3MKCSAgYy5mLiBidWcgIzE2NTM0OQoKTW9uIEZlYiAyOCAxMToxODoyNCBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB0cmVlLmM6IENoYW5nZWQgeG1sU2VhcmNoTnNCeUhyZWYgdG8gY2FsbCB4bWxOc0luU2NvcGUgd2l0aAoJICB0aGUgcHJlZml4IGluc3RlYWQgb2YgdGhlIG5hbWVzcGFjZSBuYW1lLgoJKiB0ZXN0L3NjaGVtYXMvYW5ub3QtZXJyXzAueHNkIHRlc3Qvc2NoZW1hcy9lbGVtZW50LWVycl8wLnhzZDoKCSAgQWRhcHRlZCBpbnZhbGlkIHZhbHVlcyBvZiB0aGUgImlkIiBhdHRyaWJ1dGUsIHNpbmNlIHRoZXkgYXJlCgkgIHZhbGlkYXRlZCBub3cuCgpGcmkgRmViIDI1IDA4OjMxOjE2IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRocmVhZHMuYzogbmV3IHZlcnNpb24gd2l0aCBmaXhlcyBmcm9tIFJvYiBSaWNoYXJkcwoKVGh1IEZlYiAyNCAxNjozNzo1MSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0aHJlYWRzLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBSaWNoIFNhbHogZm9yIG11bHRpdGhyZWFkaW5nIG9uCgkgIFdpbmRvd3MuCgpXZWQgRmViIDIzIDE1OjA0OjQ2IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHdyaXRlci5jOiBhcHBsaWVkIGEgcGF0Y2ggZnJvbSBSb2IgUmljaGFyZHMgZml4aW5nIGEgY291cGxlCgkgIG9mIGJ1Z3MgaW4gdGhlIHdyaXRlcgoKTW9uIEZlYiAyMSAyMTo1MTowMyBIS1QgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHNhdmUuYzogZml4ZWQgcHJvYmxlbSB3aGVuIFhNTExJTlRfSU5ERU5UIHdhcyBlbXB0eSAoYnVnIDE2ODAzMykuCgkqIHhwYXRoLmM6IGZpeGVkIGNvbXBpbGF0aW9uIHdhcm5pbmcsIG5vIGNoYW5nZSB0byBsb2dpYy4KCSogeG1sc2NoZW1hc3R5cGVzLmM6IGZpeGVkIGNvbXBpbGF0aW9uIHdhcm5pbmcsIG5vIGNoYW5nZSB0byBsb2dpYy4KCk1vbiBGZWIgMjEgMTQ6NDg6MjcgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sd3JpdGVyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBSb2IgUmljaGFyZHMgdG8gZml4IGEgcHJvYmxlbSB3aXRoCgkgIHhtbFRleHRXcml0ZXJTdGFydEF0dHJpYnV0ZU5TCgpNb24gRmViIDIxIDExOjQxOjQxIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhdHRlcm4uYyB4cGF0aC5jOiBmaXhlZCByZW1haW5pbmcga25vd24gYnVncyBpbiB0aGUgWFBhdGggc3RyZWFtaW5nLAoJICBhbmQgc3dpdGNoZWQgWFBhdGggdG8gdXNlIGl0IGJ5IGRlZmF1bHQgd2hlbiBwb3NzaWJsZQoKU2F0IEZlYiAxOSAxOToyNToxNCBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogYSBiaXQgb2YgY2xlYW51cAoJKiBlbGZnY2NoYWNrLmggdGVzdGFwaS5jIGRvYy8qOiByZWJ1aWx0IHRoZSBBUEkgdGhlIHRlc3RzIGFuZAoJICB0aGUgZG9jdW1lbnRhdGlvbiBhcyBhIHJlc3VsdC4KCkZyaSBGZWIgMTggMjA6MzQ6MDMgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmg6IGFwcGxpZWQgcGF0Y2ggZnJvbQoJICBBcm9uIFN0YW5zdmlrIHRvIGFkZCB4bWxUZXh0UmVhZGVyQnl0ZUNvbnN1bWVkKCkKCSogdGVzdFJlYWRlci5jOiBhZGRlZCBhIHRlc3Qgb3B0aW9uCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBmaXggYSBsYWNrIG9mIHBvaW50ZXIgY2hlY2tpbmcgaW4gQVBJcwoKRnJpIEZlYiAxOCAxMjo0MToxMCBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB0ZXN0L3NjaGVtYXMvYnVnMTY3NzU0XzAqOiBBZGRlZCB0aGUgcmVncmVzc2lvbiB0ZXN0IG9mIEZyYW5zCgkgIEVuZ2xpY2ggZm9yIGJ1ZyAjMTY3NzU0LgoKRnJpIEZlYiAxOCAxMjozMTo0OSBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IFN0YXJ0ZWQgc3VwcG9ydCBmb3IgSURDIHJlc29sdXRpb24gdG8gZGVmYXVsdAoJICBhdHRyaWJ1dGVzLiBJZiBidWlsZGluZyB0aGUgY29udGVudCBtb2RlbCBmb3IgPGFsbD46IGVuc3VyZWQKCSAgdG8gcHV0IGVsZW1lbnQgZGVjbGFyYXRpb25zIGFuZCBub3QgdGhlIHBhcnRpY2xlcyBpbnRvIHRoZQoJICBjb250ZW50IG1vZGVsIGF1dG9tYXRvbiAodGhpcyB3YXMgYnVnICMxNjc3NTQsIHJlcG9ydGVkIGJ5CgkgIEZyYW5zIEVuZ2xpY2gpLgoKVGh1IEZlYiAxNyAyMjozMTo1OCBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiBwYXR0ZXJuLmMgcGF0dGVybi5oOiBTb21lIGV4cGVyaW1lbnRhbCBhZGRpdGlvbiBmb3IgcGFyc2luZwoJICBvZiBleHByZXNzaW9ucyBhbmQgc3RyZWFtYWJsZSB2YWxpZGF0aW9uLgoJICBBZGRlZCB4bWxTdHJlYW1QdXNoQXR0ciB0byB0aGUgQVBJLgoKVGh1IEZlYiAxNyAxOTo1NzozNSBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEFkZGVkIHZhbGlkYXRpb24gZm9yIHRoZSBhdHRyaWJ1dGUgImlkIiBpbiB0aGUKCSAgc2NoZW1hdGE7IGRvaW5nIHRoaXMgbmVlZGVkIGVycm9yIHJlcG9ydCBmaXhlcyBmb3Igbm90YXRpb25zLAoJICBmYWNldHMgYW5kIGdyb3VwLiBDaGFuZ2VkIE5PVEFUSU9OIHZhbGlkYXRpb24gdG8gd29yayB3aXRoIHRoZQoJICBkZWNsYXJlZCBOT1RBVElPTnMgaW4gdGhlIHNjaGVtYTsgdGhpcyBkb2VzIGhhdmUgbm8gaW1wYWN0IG9uCgkgIHRoZSB2YWxpZGF0aW9uIHZpYSB0aGUgcmVsYXhuZyBtb2R1bGUuCgkqIHhtbHNjaGVtYXN0eXBlcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXN0eXBlcy5oOgoJICBBZGRlZCB4bWxTY2hlbWFOZXdOT1RBVElPTlZhbHVlIHRvIHRoZSBBUEkgdG8gYmUgYWJsZSB0byBkbwoJICB0aGUgTk9UQVRJT04gdmFsaWRhdGlvbiBkZXNjcmliZWQgYWJvdmUuCgkqIHRlc3Qvc2NoZW1hcy9lbGVtZW50LWVycl8wLnhzZCB0ZXN0L3NjaGVtYXMvYW5ub3QtZXJyXzAueHNkOgoJICBGaXhlZCB0aGUgdmFsdWVzIG9mIHRoZSAiaWQiIGF0dHJpYnV0ZXMsIHdoaWNoIHdlcmUgbm90IHZhbGlkYXRlZAoJICBwcmV2aW91c2x5LiAgCgpUaHUgRmViIDE3IDEyOjAzOjQ2IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogRml4ZWQgY29tcGFyaXNvbiBmb3IgZGVmYXVsdC9maXhlZCBhdHRyaWJ1dGUKCSAgdmFsdWVzLCBpZiB0aGUgdHlwZSB3YXMgJ3hzZDpzdHJpbmcnLiBDaGFuZ2VkIHRoZSBjb21wYXJpc29uCgkgIGZvciBJRENzIHRvIHVzZSB0aGUgd2hpdGVzcGFjZSBhd2FyZSBjb21wYXJpc29uIGZ1bmN0aW9uLgoJKiB4bWxzY2hlbWFzdHlwZXMuYyBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzdHlwZXMuaDoKCSAgQWRkZWQgeG1sU2NoZW1hR2V0Q2Fub25WYWx1ZSwgeG1sU2NoZW1hTmV3U3RyaW5nVmFsdWUgYW5kCgkgIHhtbFNjaGVtYUNvbXBhcmVWYWx1ZXNXaHRzcCB0byB0aGUgQVBJLiBBZGRlZCBmdW5jdGlvbnMKCSAgdG8gY29tcGFyZSBzdHJpbmdzIHdpdGggd2hpdGVzcGFjZSBjb21iaW5hdGlvbnMgb2YgInByZXNlcnZlIiwKCSAgInJlcGxhY2UiIGFuZCAiY29sbGFwc2UiLgoKV2VkIEZlYiAxNiAxMzoyNDozNSBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEZ1cnRoZXIgd29yayBvbiBJRENzLCBlc3BlY2lhbGx5IGV2YWx1YXRpb24gZm9yCgkgIGF0dHJpYnV0ZSBub2Rlcy4KCldlZCBGZWIgMTYgMDE6MTk6MjcgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogZml4IHRoZSBjb21tZW50IHRvIGRlc2NyaWJlIHRoZSByZWFsIHJldHVybiB2YWx1ZXMKCSogcGF0dGVybi5jIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwvcGF0dGVybi5oOiBsb3Qgb2Ygd29yayBvbgoJICB0aGUgcGF0dGVybnMsIHBsdWdnaW4gaW4gdGhlIFhQYXRoIGRlZmF1bHQgZXZhbHVhdGlvbiwgYnV0CgkgIGRpc2FibGVkIHJpZ2h0IG5vdyBiZWNhdXNlIGl0J3Mgbm90IHlldCBnb29kIGVub3VnaCBmb3IgWFNMVC4KCSAgcGF0dGVybi5oIHN0cmVhbWluZyBBUEkgYXJlIGxpa2VseSB0byBiZSBjaGFuZ2VkIHRvIGhhbmRsZQoJICByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgcGF0aHMgaW4gdGhlIHNhbWUgZXhwcmVzc2lvbi4KClR1ZSBGZWIgMTUgMTU6MzM6MzIgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBBZGRlZCBJREMgZXZhbHVhdGlvbiBmb3IgYXR0cmlidXRlIG5vZGVzLgoJICBNYWRlICduaWwnZWQgZWxlbWVudHMgd29yay4gQWRkZWQgYSBzcGVjaWZpYyBlcnJvciBtZXNzYWdlCgkgIGZvciAnc3RyaWN0JyBhdHRyaWJ1dGUgd2lsZGNhcmRzLgoJKiBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBBZGRlZCBhbiBlcnJvciBjb2RlIGZvcgoJICB3aWxkY2FyZHMuCgkqIHJlc3VsdC9zY2hlbWFzL2FueUF0dHItcHJvY2Vzc0NvbnRlbnRzLWVycjFfMF8wLmVycjogQWRhcHRlZC4gIAoKU3VuIEZlYiAxMyAxNjoxNTowMyBIS1QgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCglUaGlzIGNoYW5nZSBzdGFydGVkIG91dCBhcyBhIHNpbXBsZSBkZXNpcmUgdG8gc3BlZWQgdXAgdGhlCglleGVjdXRpb24gdGltZSBvZiB0ZXN0YXBpLmMsIHdoaWNoIHdhcyBiZWluZyBkZWxheWVkIGJ5CgluYW1lc2VydmVyIHJlcXVlc3RzIGZvciBub24tZXhpc3RlbnQgVVJMJ3MuICBGcm9tIHRoZXJlIGl0CglqdXN0IHNvcnQgb2YgZ3JldywgYW5kIGdyZXcuLi4uCgkqIG5hbm9odHRwLmMsIG5hbm9mdHAuYzogY2hhbmdlZCB0aGUgcHJvY2Vzc2luZyBvZiBVUkwncwoJICB0byB1c2UgdGhlIHVyaS5jIHJvdXRpbmVzIGluc3RlYWQgb2YgY3VzdG9tIGNvZGUuCgkqIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGFkZGVkIGNvZGUgWE1MX0ZUUF9VUkxfU1lOVEFYCgkqIHVyaS5jOiBhZGRlZCBhY2NlcHRpbmcgaXBWNiBhZGRyZXNzZXMsIGluIGFjY29yZGFuY2Ugd2l0aAoJICBSRkMncyAyNzMyIGFuZCAyMzczIChUT0RPOiBhbGxvdyBpcFY0IHdpdGhpbiBpcFY2KQoJKiBnZW50ZXN0LnB5LCB0ZXN0YXBpLmM6IGZpeGVkIGEgZmV3IHByb2JsZW1zIHdpdGggdGhlCgkgIHRlc3Rpbmcgb2YgdGhlIG5hbm9mdHAgYW5kIG5hbm9odHRwIHJvdXRpbmVzLgoJKiBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmg6IG1pbm9yIGNoYW5nZSB0byBmaXggYQoJICB3YXJuaW5nIG9uIHRoZSBkb2NzIGdlbmVyYXRpb24KCSogcmVnZW5lcmF0ZWQgdGhlIGRvY3MKClNhdCBGZWIgMTIgMDk6MDc6MTEgSEtUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4aW5jbHVkZS5jOiBmaXhlZCB4bWxYSW5jbHVkZVBhcnNlRmlsZSB0byBwcmV2ZW50CgkgIG92ZXJ3cml0aW5nIFhNTF9DT01QTEVURV9BVFRSUyB3aGVuIHNldHRpbmcgcGN0eHQtPmxvYWRzdWJzZXQKCSAgKGJ1ZyAxNjYxOTkpCgkqIE1ha2VmaWxlLmFtLCBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0sIHhzdGMvTWFrZWZpbGUuYW06IGFkZGVkCgkgIGNvZGUgdG8gYWRkICQodG9wX2J1aWxkZGlyKS8ubGlicyB0byBMRF9MSUJSQVJZX1BBVEggd2hlbmV2ZXIKCSAgUFlUSE9OUEFUSCBpcyBzZXQsIHRvIGFzc3VyZSBuZXcgbGlieG1sMiByb3V0aW5lcyBhcmUgdXNlZC4KCkZyaSBGZWIgMTEgMjI6MjA6NDEgSEtUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBwYXJzZXIuYzogZml4ZWQgcHJvYmxlbSB3aGVuIG5vIGluaXRpYWwgImNodW5rIiB3YXMKCSAgZ2l2ZW4gdG8geG1sQ3JlYXRlUHVzaFBhcnNlciAoYnVnIDE2MjYxMykKCkZyaSBGZWIgMTEgMTg6Mzc6MjIgSEtUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkaWN0LmM6IGZpeGVkIGNvbXBpbGF0aW9uIHdhcm5pbmcKCSogcGFyc2VyLmM6IGNoYW5nZWQgeG1sV2FybmluZ01zZyBzbyBjdHh0LT5lcnJObyBpcyBub3Qgc2V0CgkqIHhtbGxpbnQuYzogY2hhbmdlZCB0byByZXR1cm4gbm9uLXplcm8gc3RhdHVzIGlmIGVycm9yCgkgIG9uIHhpbmNsdWRlIHByb2Nlc3NpbmcKCSogeG1sc2F2ZS5jOiBtaW5vciBkZWxldGlvbiBvZiBhIHJlZHVuZGFudCBjb25kaXRpb24gc3RhdGVtZW50CgkKV2VkIEZlYiAgOSAxNzo0Nzo0MCBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGxpZWQgcGF0Y2ggdG8geG1sU2V0TnNQcm9wIGZyb20gTWlrZSBIb21tZXkKClN1biBGZWIgIDYgMDA6MTc6NTcgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGF0dGVybi5jIHhtbGxpbnQuYzogZml4ZWQgaW1wbGVtZW50YXRpb24gZm9yIHwKCSogdGVzdC9wYXR0ZXJuL2NvbmouKiByZXN1bHQvcGF0dGVybi9jb25qOiBhZGRlZCBhIHNwZWNpZmljIHJlZ3Jlc3Npb24KCSAgdGVzdAoKU2F0IEZlYiAgNSAxODozNjo1NiBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXR0ZXJuLmM6IGZpcnN0IGltcGxlbWVudGF0aW9uIGZvciB8IHN1cHBvcnQKClNhdCBGZWIgIDUgMTQ6NTg6NDYgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGF0dGVybi5jOiBmaXhlZCB0aGUgbmFtZXNwYWNlcyBzdXBwb3J0CgkqIHRyZWUuYzogZml4ZWQgeG1sR2V0Tm9kZVBhdGggd2hlbiBuYW1lc3BhY2VzIGFyZSB1c2VkCgkqIHJlc3VsdC9wYXR0ZXJuL211bHRpcGxlIHJlc3VsdC9wYXR0ZXJuL25hbWVzcGFjZXMKCSAgdGVzdC9wYXR0ZXJuL211bHRpcGxlLiogdGVzdC9wYXR0ZXJuL25hbWVzcGFjZXMuKjogYWRkZWQKCSAgbW9yZSByZWdyZXNzaW9uIHRlc3RzCgpGcmkgRmViICA0IDE4OjI2OjQzIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogZml4ZWQgb25lIGludGVybmFsIGZ1bmN0aW9uCgkqIGRvYy9NYWtlZmlsZS5hbSBkb2Mvd2lraS54c2w6IGFwcGxpZWQgcGF0Y2ggZnJvbSBKb2VsIFJlZWQKCSogdGVzdGFwaS5jIGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL2xpYnhtbDItcmVmcy54bWw6IHJlZ2VuZXJhdGVkCgpGcmkgRmViICA0IDAwOjI1OjQzIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiB1c2UgdGhlIHdhbGtlciB0byB0ZXN0IHRoZSBwYXR0ZXJucyBpbnN0ZWFkIG9mCgkgIHRoZSBub3JtYWwgcmVhZGVyCgkqIHBhdHRlcm4uYyB4bWxsaW50LmM6IGJ1ZyBmaXhlcyBpbiB0aGUgdHJhaW4gaW5jbHVkaW5nIGZpeGluZyB0aGUKCSAgc3R1cGlkIGJ1aWxkIGJyZWFrLgoKVHVlIEZlYiAgMSAxODoxNTo1MiBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXR0ZXJuLmM6IG1vcmUgYnVnIGZpeGVzIGZvciB0aGUgWFBhdGggc3RyZWFtaW5nIGNvZGUuCgpNb24gSmFuIDMxIDE3OjU5OjI0IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogSW50ZWdyYXRlZCB0aGUgc3RyZWFtaW5nIHBhdHRlcm4gZnJvbSB0aGUKCSAgcGF0dGVybiBtb2R1bGUuIEZpeGVkIHNvbWUgSURDIGNvZGUgYnVncy4gQ2hhbmdlZAoJICBmYWxsYmFjayBmb3IgYXR0cmlidXRlIGRlY2xhcmF0aW9uIGFkZGl0aW9uIHRvIHdvcmsgbGlrZSBmb3IKCSAgZWxlbWVudCBkZWNsYXJhdGlvbnMuCQoKTW9uIEphbiAzMSAwMToyNzoyMiBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXR0ZXJuLmMgeG1sbGludC5jOiBidWdmaXhlcyBhcm91bmQgdGhlIHN0cmVhbWluZyBwYXR0ZXJucwoKU3VuIEphbiAzMCAyMzozNToxOSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gcmVzdWx0L3BhdHRlcm4vc2ltcGxlIAoJICB0ZXN0L3BhdHRlcm4vc2ltcGxlLio6IGFkZGVkIGZpcnN0IHRlc3QgZm9yIHRoZSBwYXR0ZXJucwoJKiBwYXR0ZXJuLmMgeG1sbGludC5jOiBhIGZldyBmaXhlcwoKU3VuIEphbiAzMCAxOToyNzoyMyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXR0ZXJuLmMgaW5jbHVkZS9saWJ4bWwvcGF0dGVybi5oIHhtbGxpbnQuYzogYWRkZWQgYSAKCSAgc3RyZWFtaW5nIHBhdHRlcm4gZGV0ZWN0b3IgZm9yIGEgc3Vic2V0IG9mIFhQYXRoLCBzaG91bGQKCSAgaGVscCBLYXNpbWllciBmb3IgaWRlbnRpdHkgY29uc3RyYWludHMKCSogcHl0aG9uL2dlbmVyYXRvci5weTogYXBwbGllZCBTdGVwaGFuZSBCaWRvdWwgcGF0Y2ggdG8gZmluZAoJICBwYXRocyB3aXRob3V0IGJyZWFraW5nLgoKRnJpIEphbiAyOCAxODo1Mzo0MCBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IGZpeGVkIGFuIHVudGVzdGVkIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIGEgJiB2cyAmJgoKRnJpIEphbiAyOCAxODozNzoxOCBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogaW1wbGVtZW50YXRpb24gb2YgeG1sVGV4dFJlYWRlclJlYWRTdHJpbmcgYnkKCSAgQmpvcm4gUmVlc2UKCkZyaSBKYW4gMjggMTY6NTE6NDcgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBDb3JyZWN0ZWQgYW4gYW1iaWdpb3VzIHN5bWJvbC1zcGFjZSBmb3IKCSAgbG9jYWwgYXR0cmlidXRlIGRlY2xhcmF0aW9ucy4gSUZERUZlZCBtb3JlIElEQyBjb2RlIHRvCgkgIHN1cnByZXNzIGNvbXBpbGVyIHdhcm5pbmdzLgoKRnJpIEphbiAyOCAwMDo1NzowNCBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBiYWtlZmlsZS9SZWFkbWUudHh0IGJha2VmaWxlL0Jha2VmaWxlcy5ia2dlbiBiYWtlZmlsZS9saWJ4bWwyLmJrbDoKCSAgZmlsZXMgZm9yIHRoZSBCYWtlZmlsZSBnZW5lcmF0b3IgZm9yIE1ha2VmaWxlcyBmcm9tIEZyYW5jZXNjbwoJICBNb250b3JzaQoJKiB3aW4zMi9jb25maWd1cmUuanM6IGZpeGVzIGZvciBXaW5kb3dzIGNvbXBpbGF0aW9uIHdpdGggbm9uLWRlZmF1bHQKCSAgZmxhZ3MgYnkgSm9lbCBSZWVkCgpUaHUgSmFuIDI3IDE4OjIzOjUwIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4ZWQgeG1sQ29weURvYyB0byBhbHNvIGNvcHkgdGhlIGRvYy0+VVJMIGFzIHBvaW50ZWQKCSAgYnkgTWFydGlqbiBGYWFzc2VuCgpUaHUgSmFuIDI3IDEzOjM5OjA0IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmg6CgkgIEFkZGVkIGFuIGluaXRpYWwgc2tlbGV0b24gZm9yIGluZGVudGl0eS1jb25zdHJhaW50cy4gVGhpcyBpcyBhbGwKCSAgZGVmaW5lZCBvdXQsIHNpbmNlIG5vdCBjb21wbGV0ZSwgcGx1cyBpdCBuZWVkcyBzdXBwb3J0IGZyb20gb3RoZXIKCSAgbW9kdWxlcy4KCSAgQWRkZWQgbWFjaGFuaXNtIHRvIHN0b3JlIGVsZW1lbnQgaW5mb3JtYXRpb24gZm9yIHRoZQoJICBhbmNlc3Rvci1vci1zZWxmIGF4aXM7IHRoaXMgaXMgbmVlZGVkIGZvciBpZGVudGl0eS1jb25zdHJhaW50cwoJICBhbmQgc2hvdWxkIGJlIGhlbHBmdWxsIGZvciBhIGZ1dHVyZSBzdHJlYW1hYmxlIHZhbGlkYXRpb24uCgkqIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IEFkZGVkIGFuIGVycm9yIGNvZGUgZm9yCgkgIGlkZW50aXR5LWNvbnN0cmFpbnRzLgoKV2VkIEphbiAyNiAwMTowMzozNyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogaGFkIHRvIGZpeCBnZW5lcmF0aW9uIGFuZCByZWJ1aWxkLgoJKiB2YWxpZC5jOiB0aGUgdGVzdGFwaSBmb3VuZCBhIGJ1ZyBpbiB0aGUgbGFzdCBjb2RlIG9mIGNvdXJzZSAhCgpXZWQgSmFuIDI2IDAwOjQzOjA1IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHRlc3RhcGkuYyBkb2MvTWFrZWZpbGUuYW06IGZpeGluZyB0aGUgd2F5IHRlc3RhcGkuYwoJICBpcyBnZW5lcmF0ZWQsIGZpeGVzIGJ1ZyAjMTYxMzg2CgkqIGRpY3QuYzogZml4IGEgY29tbWVudCB0eXBvCgkqIGVsZmdjY2hhY2suaCBkb2MvKjogcmVnZW5lcmF0ZWQKClR1ZSBKYW4gMjUgMjI6Mzk6MzMgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZvdW5kIGFuZCBmaXhlZCAyIHByb2JsZW1zIGluIHRoZSBpbnRlcm5hbCBzdWJzZXQgc2Nhbm5pbmcKCSAgY29kZSBhZmZlY3RpbmcgdGhlIHB1c2ggcGFyc2VyIChhbmQgdGhlIHJlYWRlciksIGZpeGVzICMxNjUxMjYKCSogdGVzdC9pbnRzdWJzZXQyLnhtbCByZXN1bHQvL2ludHN1YnNldDIueG1sKjogYWRkZWQgdGhlIHRlc3QgY2FzZQoJICB0byB0aGUgcmVncmVzc2lvbiB0ZXN0cy4KClR1ZSBKYW4gMjUgMDE6MjA6MTEgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdGRzby5jIHhtbHJlZ2V4cC5jOiB3YXJuaW5nIHBhdGNoZXMgZnJvbSBQZXRlciBCcmVpdGVubG9obmVyCgkqIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmggdmFsaWQuYyBwYXJzZXIuYzogc2VyaW91cyBEVEQgcGFyc2luZwoJICBzcGVlZHVwcywgc3RhcnQgdG8gZGVwcmVjYXRlIDMgRWxlbWVudERlZiByZWxhdGVkIGVudHJ5IHBvaW50CgkgIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBiZXR0ZXIgb25lcy4KCk1vbiBKYW4gMjQgMDA6NDc6NDEgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBtb3JlIGhhc2ggZGljdGlvbmFyeSBpbnRlcm5pbmcgY2hhbmdlcwoKU3VuIEphbiAyMyAyMzo1NDozOSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBoYXNoLmMgaW5jbHVkZS9saWJ4bWwvaGFzaC5oOiBhZGRlZCB4bWxIYXNoQ3JlYXRlRGljdCB3aGVyZQoJICB0aGUgaGFzaCByZXVzZXMgdGhlIGRpY3Rpb25uYXJ5IGZvciBpbnRlcm5hbCBzdHJpbmdzCgkqIGVudGl0aWVzLmMgdmFsaWQuYyBwYXJzZXIuYzogcmV1c2UgdGhhdCBuZXcgQVBJLCBsZWFkcyB0byBhIGRlY2VudAoJICBzcGVlZHVwIHdoZW4gcGFyc2luZyBmb3IgZXhhbXBsZSBEb2NCb29rIGRvY3VtZW50cy4KClN1biBKYW4gMjMgMjE6MTQ6MjAgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHNtYWxsIHNwZWVkdXAgaW4gc2tpcHBpbmcgYmxhbmtzIGNoYXJhY3RlcnMKCSogZW50aXRpZXMuYzogaW50ZXJuaW5nIHRoZSBlbnRpdGllcyBzdHJpbmdzIAoKU3VuIEphbiAyMyAxODozNTowMCBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYm9vc3RpbmcgY29tbW9uIGNvbW1uZW50IHBhcnNpbmcgY29kZSwgaXQgd2FzIHJlYWxseQoJICBzbG93LgoJKiB0ZXN0L2NvbW1lbnRbMy01XS54bWwgcmVzdWx0Ly9jb21tZW50WzMtNV0ueG1sKjogYWRkZWQgc3ByZWNpZmljCgkgIHJlZ3Jlc3Npb24gdGVzdHMKClN1biBKYW4gMjMgMDE6MDA6MDkgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHNtYWxsIG9wdGltaXphdGlvbiBiYWNrLgoKU2F0IEphbiAyMiAwMDo0MDozMSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkaWN0LmMgcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvZGljdC5oOiBhIHNpbmdsZSBsb2NrIHZlcnNpb24KCSAgbW9zdGx5IGF2b2lkIHRoZSBjb3N0IHBlbmFsdHkgb2YgdGhlIGxvY2sgaW4gY2FzZSBvZiBsb3cgCgkgIHBhcmFsbGVsaXNtLCBzbyBhcHBseWluZyB0aGF0IHZlcnNpb24gaW5zdGVhZC4KCkZyaSBKYW4gMjEgMTc6NTQ6MDYgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGljdC5jOiBwYXRjaCBmcm9tIEdhcnkgQ29hZHkgdG8gZml4IGEgcmFjZSBpbiBkaWN0IHJlZmVyZW5jZQoJICBjb3VudGluZyBpbiBtdWx0aXRocmVhZGVkIGFwcHMuCgpGcmkgSmFuIDIxIDE2OjA4OjIxIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBidWcgIzE2NDU1NiB3aGVyZSBub24tZmF0YWwgZXJyb3JzIHN0b3BwZWQKCSAgcHVzaCBwYXJzaW5nIGFuZCB4bWxyZWFkZXIuCgkqIE1ha2VmaWxlLmFtOiBmaXh1cAoJKiB0ZXN0L2Vycm9ycy93ZWJkYXYueG1sIHJlc3VsdC9lcnJvcnMvd2ViZGF2KjogYWRkaW5nIHJlZ3Jlc3Npb24KCSAgdGVzdCBmb3IgdGhpcyBwcm9ibGVtLgoKV2VkIEphbiAxOSAxNzoyNDozNCBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IENvcnJlY3RlZCB0YXJnZXROYW1lc3BhY2UgaW4KCSAgeG1sU2NoZW1hRWxlbWVudER1bXAuIENvc21ldGljIGNoYW5nZXMgdG8gdGhlIGR1bXAgb3V0cHV0LgkKClN1biBKYW4gMTYgMjE6MDA6NTMgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIE5FV1MgZG9jLyo6IHByZXBhcmluZyByZWxlYXNlIG9mIDIuNi4xNywKCSAgdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoKU3VuIEphbiAxNiAxOTo1ODozNiBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYmV0dGVyIGZpeCBmb3IgIzE1MTY5NCBub3Qga2lsbGluZyBjMTRuIHJlZ3Jlc3Npb24gdGVzdHMKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGZpeGluZyBidWcgIzE1NzY1MwoKU3VuIEphbiAxNiAxOTowMTowNiBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4aW5nIGJ1ZyAjMTUxNjk0LCBsaW5lIHNob3VsZCBhbHdheXMgYmUgc2V0IGluIHRoZQoJICBlbGVtZW50cy4KClN1biBKYW4gMTYgMDE6MDQ6MTggQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IHRyeWluZyB0byBmaXggYXQgbGVhc3QgdGhlIG1lc3NhZ2UgZnJvbQoJICBidWcgIzE1ODYyOAoJKiBpbmNsdWRlL2xpYnhtbC94bWxzYXZlLmggeG1sc2F2ZS5jOiBhZGRlZCBmaXJzdCB4bWxzYXZlIG9wdGlvbgoJICBmb3IgZm9ybWF0LCBjLmYuIGJ1ZyAjMTU5OTk3CgpTYXQgSmFuIDE1IDE4OjQ0OjMwIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwucHk6IG1ha2UgX19zdHJfXyBjYWxsIHNlcmlhbGl6ZSgpIG9uIG5vZGVzLCBjLmYuIAoJICBidWcgIzE1Nzg3MgoKU2F0IEphbiAxNSAxODoxODowNyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vZnRwLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBEYW4gTWNOaWNob2wgZm9yIGNvbXBpbGF0aW9uIG9uIEFJWAoKU2F0IEphbiAxNSAxMzozNToxOSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGZpeGVkIGJ1ZyAjMTU3NjMzIGluIHJlbGF4bmcgY2hvaWNlIG9wdGltaXphdGlvbgoJKiByZXN1bHQvcmVsYXhuZy9jaG9pY2UwKiB0ZXN0L3JlbGF4bmcvY2hvaWNlMCo6IGFkZGVkIHJlZ3Jlc3Npb24KCSAgdGVzdHMgYWJvdXQgaXQuCgkqIGRvYy8qOiByZWJ1aWx0CgkqIHRlc3Rkc28uYzogcmVtb3ZlZCBhIHdhcm5pbmcgZHVlIHRvIGEgbWlzc2luZyB2b2lkIGluIHNpZ25hdHVyZS4KClRodSBKYW4gMTMgMTc6NDI6NTUgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oIHhtbHNjaGVtYXMuYzogCgkgIEV4cG9zZWQgdGFyZ2V0TmFtZXNwYWNlIGZvciBzaW1wbGUvY29tcGxleCB0eXBlcywgbW9kZWwgZ3JvdXBzLAoJICBhdHRyaWJ1dGUgZ3JvdXBzIGFuZCBub3RhdGlvbnMgKHJlcG9ydGVkIGJ5IE1pY2hhZWwgSGV3YXJ0aCAKCSAgdG8gdGhlIG1haWxpbmcgbGlzdCkuIEFkZGVkIHRhcmdldE5hbWVzcGFjZSB0byB4bWxTY2hlbWFUeXBlLCAKCSAgeG1sU2NoZW1hQXR0cmlidXRlR3JvdXAgYW5kIHhtbFNjaGVtYU5vdGF0aW9uLgoJICBUaW55IGNvc21ldGljIGNoYW5nZSB0byB0aGUgY29udGVudCBtb2RlbCBlcnJvciByZXBvcnQgb3V0cHV0LgoJKiByZXN1bHQvL2FsbF8qLmVyciByZXN1bHQvL2FueTNfMF8wLmVyciByZXN1bHQvL2Nob2ljZV8qLmVyciAKCSAgcmVzdWx0Ly9saXN0MF8wXzEuZXJyIHJlc3VsdC8vbGlzdDBfMV8xLmVycjogQWRhcHRlZCBvdXRwdXQgCgkgIG9mIHJlZ3Jlc3Npb24gdGVzdHMuCgpUaHUgSmFuIDEzIDEzOjIwOjUxIENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogUHV0IHRoZSBmaXggb2YgRGFuaWVsIChmcm9tIFR1ZSBKYW4gMTEgMTQ6NDE6NDcgQ0VUKQoJICBiYWNrIGluLCBzaW5jZSBJIG1pc3NlZCB0byB1cGRhdGUgeG1sc2NoZW1hcy5jIGJlZm9yZSBkb2luZwoJICB0aGUgcHJldmlvdXMgY29tbWl0LgoJClRodSBKYW4gMTMgMTI6NTk6MjUgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBJbnRlZ3JhdGVkIHhtbFJlZ0V4ZWNFcnJJbmZvIGFuZCB4bWxSZWdFeGVjTmV4dFZhbHVlcwoJICBmcm9tIHhtbHJlZ2V4cC5jIHRvIHJlcG9ydCBleHBlY3RlZCBlbGVtZW50cyBvbiBjb250ZW50IG1vZGVsIGVycm9ycy4KCSogYWxsXyouZXJyIGFueTNfMF8wLmVyciBjaG9pY2VfKi5lcnIgbGlzdDBfMF8xLmVyciBsaXN0MF8xXzEuZXJyOgoJICBBZGFwdGVkIG91dHB1dCBvZiByZWdyZXNzaW9uIHRlc3RzLgoKVGh1IEphbiAxMyAxMjoyNDowOSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWcuaC5pbiBjb25maWd1cmUuaW4geG1sbW9kdWxlLmM6IHRyeWluZyB0byB3b3JrIGFyb3VuZAoJICB0aGUgY29tcGlsYXRpb24gcHJvYmxlbSBvbiBIUC1VWAoKV2VkIEphbiAxMiAyMjowMzozMyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXR0ZXJuLmM6IGZpeGVkIHRoZSBmaXhlZCBzaXplIGFycmF5IHN0cnVjdHVyZSBwcm9ibGVtIHJlcG9ydGVkIGJ5CgkgIFBhdHJpY2sgU3RyZXVsZQoKV2VkIEphbiAxMiAxNToxNTowMiBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbGZnY2NoYWNrLmggdGVzdGFwaS5jIGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jLyo6IHJlZ2VuZXJhdGVkCgkgIHRoZSBBUEkgZGVzY3JpcHRpb24sIHJlYnVpbHQsIGltcHJvdmVkIG5hdmlnYXRpb24gaW4gZG9jdW1lbnRhdGlvbgoJICBhIGJpdC4KCldlZCBKYW4gMTIgMTQ6MTc6MTQgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1scmVnZXhwLmggeG1scmVnZXhwLmM6IGV4dGVuZGVkIHhtbFJlZ0V4ZWNFcnJJbmZvKCkKCSAgYW5kIHhtbFJlZ0V4ZWNOZXh0VmFsdWVzKCkgdG8gcmV0dXJuIGVycm9yIHRyYW5zaXRpb24gc3RyaW5ncyB0b28sCgkgIGFuZCBzaW5rIHN0YXRlIGRldGVjdGlvbiBhbmQgaGFuZGxpbmcuCgpUdWUgSmFuIDExIDE0OjQxOjQ3IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogZml4ZWQgYnVnICMxNjM2NDEgd2hlbiB0aGUgdmFsdWUgcGFzc2VkIGZvcgoJICBhbiBhdG9taWMgbGlzdCB0eXBlIGlzIE5VTEwuCgpUdWUgSmFuIDExIDEwOjE0OjMzIEhLVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluOiBmaXhlZCBkZXBlbmRlbmN5IG9uIHB5dGhvbiAyLjMsCgkgIGFsc28gc21hbGwgaW1wcm92ZW1lbnQgZm9yIGN5Z3dpbiAoYnVnIDE2MzI3MykKClN1biBKYW4gIDkgMTg6NDY6MzIgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IFdpbGxpYW0gbm90aWNlZCBJIGZvcmdvdCB0byBhZGQgc3BlY2lhbAoJICBzdXBwb3J0IGZvciB4bWxtb2R1bGVzLmMgZGVmaW5lCgkqIHhtbHJlZ2V4cC5jIGluY2x1ZGUvbGlieG1sL3htbHJlZ2V4cC5oOiBhZGRlZCB0ZXJtaW5hbCB0bwoJICB4bWxSZWdFeGVjRXJySW5mbygpIEFQSSwgYWRkaW5nIG5ldyB4bWxSZWdFeGVjTmV4dFZhbHVlcygpCgkgIGVudHJ5IHBvaW50IGFuZCByZWZhY3RvcmVkIHRvIHVzZSBib3RoIGNvZGUuCgpNb24gSmFuIDEwIDAxOjAyOjQxIEhLVCAyMDA2IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jL3htbC5odG1sLCBkb2MvRkFRLmh0bWw6IGFkZGVkIGFuIEZBUSB1bmRlciBEZXZlbG9wZXIgZm9yCgkgIHNldHRpbmcgdXAgYSAicHJpdmF0ZSIgbGlicmFyeSAoYWZ0ZXIgc29tZSBsaXN0IHBvc3RzIGFib3V0CgkgIHBlb3BsZSBoYXZpbmcgdHJvdWJsZSBkb2luZyBpdCkKClNhdCBKYW4gIDggMjM6MDQ6MTAgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVnZXhwLmM6IGZpeGluZyBiZWhhdmlvdXIgZm9yIHhtbFJlZ0V4ZWNFcnJJbmZvIGluIGNhc2Ugb2YKCSAgcm9sbGJhY2sKCkZyaSBKYW4gIDcgMTQ6NTQ6NTEgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogVE9ETzogc21hbGwgdXBkYXRlCgkqIHhtbHJlZ2V4cC5jOiB0cnlpbmcgdG8gYWRkIGFuIEFQSSB0byBnZXQgdXNlZnVsIGVycm9yIGluZm9ybWF0aW9ucwoJICBiYWNrIGZyb20gYSBmYWlsaW5nIHJlZ2V4cCBjb250ZXh0LgoKVGh1IEphbiAgNiAxNzozNTo0MSBIS1QgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IGZpeGVkIHByb2JsZW0gd2l0aCB4bWxYUGF0aEVyciB3aGVuIGVycm9yIG51bWJlcgoJICBzdWJzY3JpcHQgd2FzIG91dCBvZiByYW5nZSAoYnVnIDE2MzA1NSkKClRodSBKYW4gIDYgMDk6NTc6MDMgSEtUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB1cmkuYzogZml4ZWQgcHJvYmxlbSB3aXRoIHhtbFVSSUVzY2FwZSB3aGVuIHF1ZXJ5IHBhcnQgd2FzCgkgIGVtcHR5IChhY3R1YWxseSBmaXhlZCB4bWxVUklFc2NhcGVTdHIgdG8gcmV0dXJuIGFuIGVtcHR5CgkgIHN0cmluZyByYXRoZXIgdGhhbiBOVUxMIGZvciBlbXB0eSBzdHJpbmcgaW5wdXQpIChidWcgMTYzMDc5KQoJICAKVHVlIEphbiAgNCAxNzowODo0NSBQU1QgMjAwNSBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogcGFyc2VyLmMsIHBhcnNlckludGVybmFsLmM6IGZpeGVkICJjb2wiIGNhbGN1bGF0aW9uIGZvciAKICAgICAgICAgIHN0cnVjdCBfeG1sUGFyc2VySW5wdXQgKGJhc2VkIG9uIHBhdGNoIGZyb20gUm9iIFJpY2hhcmRzKSAKCSogaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaCwgZXJyb3IuYzogcHJvcGFnYXRlZCBlcnJvciBjb2x1bW4KICAgICAgICAgIG51bWJlciBpbiB0aGUgeG1sRXJyb3Igc3RydWN0dXJlCgpUdWUgSmFuICA0IDIyOjQ3OjIyIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBuYW1lc3BhY2UgYnVnIGluIHB1c2ggbW9kZSByZXBvcnRlZCBieSAKCSAgUm9iIFJpY2hhcmRzCgkqIHRlc3QvbnM2IHJlc3VsdC8vbnM2KjogYWRkZWQgaXQgdG8gdGhlIHJlZ3Jlc3Npb24gdGVzdHMKCSogeG1sbW9kdWxlLmMgdGVzdE1vZHVsZS5jIGluY2x1ZGUvbGlieG1sL3htbG1vZHVsZS5oOgoJICBhZGRlZCBhbiBleHRyYSBvcHRpb24gYXJndW1lbnQgdG8gbW9kdWxlIG9wZW5pbmcgYW5kIGRlZmluZWQKCSAgYSBjb3VwbGUgb2YgZmxhZ3MgdG8gdGhlIEFQSS4KClR1ZSBKYW4gIDQgMjE6MTY6MDUgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbW9kdWxlLmMgaW5jbHVkZS9saWJ4bWwveG1sbW9kdWxlLmg6IGFwcGxpZWQgcGF0Y2ggZnJvbQoJICBCam9ybiBSZWVzZSwgcGx1cyBzb21lIGNsZWFudXBzCgkqIGVsZmdjY2hhY2suaCBkb2MvZWxmZ2NjaGFjay54c2w6IGZpeGVkIHRoZSBzdHlsZXNoZWV0IHRvIAoJICBhZGQgdGhlIG5ldyBoZWFkZXIKCSogZG9jLyogdGVzdGFwaS5jOiByZWdlbmVyYXRlZCB0aGUgQVBJCgpUdWUgSmFuICA0IDE4OjQ3OjE5IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogbWFraW5nIERTTyBzdXBwb3J0IGFuIG9wdGlvbgoJKiB4bWxtb2R1bGUuYyB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxtb2R1bGUuaDogY29kZQoJICBhbmQgZG9jdW1lbnRhdGlvbiBjbGVhbnVwcwoJKiBlbGZnY2NoYWNrLmggdGVzdGFwaS5jIGRvYy8qOiByZWdlbmVyYXRlZCB0aGUgZG9jcyBhbmQKCSAgY2hlY2tzIGZvciBuZXcgbW9kdWxlCgkqIHRlc3QvdmFsaWQvUkVDLXhtbC0xOTk4MDIxMC54bWw6IGZpeCBhIHNtYWxsIGNoYW5nZSBpbnRyb2R1Y2VkCgkgIHByZXZpb3VzbHkKClR1ZSBKYW4gIDQgMTY6MDc6NTIgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlnLmguaW4gY29uZmlndXJlLmluIGVycm9yLmMgbGlieG1sLTIuMC5wYy5pbgoJICB0ZXN0TW9kdWxlLmMgdGVzdGRzby5jIHhtbDItY29uZmlnLmluIHhtbGxpbnQuYyB4bWxtb2R1bGUuYwoJICBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbSBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oCgkgIGluY2x1ZGUvbGlieG1sL3htbG1vZHVsZS5oIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbiAKCSAgaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmguaW46IGFwcGxpZWQgRFNPIHN1cHBvcnQKCSAgcGF0Y2ggMiBmcm9tIEpvZWwgUmVlZAoKVHVlIEphbiAgNCAxNTozMDoxNSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGFwcGxpZWQgcGF0Y2ggZnJvbSBNYXJjaW4gS29uaWNraSBmb3IgQmVPUwoKTW9uIEphbiAgMyAxMzo1NzoyMSBQU1QgMjAwNSBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogcGFyc2VyLmM6IGFkZGVkIEdldExpbmVOdW1iZXIgYW5kIEdldENvbHVtbk51bWJlciBmdW5jdGlvbnMgZm9yIHhtbFJlYWRlcgoKU3VuIEphbiAgMiAxNzo1MToxOCBIS1QgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCglSZS1leGFtaW5lZCB0aGUgcHJvYmxlbXMgb2YgY29uZmlndXJpbmcgYSAibWluaW1hbCIgbGlicmFyeS4KCVN5bmNocm9uaXplZCB0aGUgaGVhZGVyIGZpbGVzIHdpdGggdGhlIGxpYnJhcnkgY29kZSBpbiBvcmRlcgoJdG8gYXNzdXJlIHRoYXQgYWxsIHRoZSB2YXJpb3VzIGNvbmRpdGlvbmFscyAoTElCWE1MX3h4eHhfRU5BQkxFRCkKCXdlcmUgdGhlIHNhbWUgaW4gYm90aC4gIE1vZGlmaWVkIHRoZSBBUEkgZGF0YWJhc2UgY29udGVudCB0byBtb3JlCglhY2N1cmF0ZWx5IHJlZmxlY3QgdGhlIGNvbmRpdGlvbmFscy4gIEVuaGFuY2VkIHRoZSBnZW5lcmF0aW9uCglvZiB0aGF0IGRhdGFiYXNlLiAgQWx0aG91Z2ggdGhlcmUgd2FzIG5vIHN1YnN0YW50aWFsIGNoYW5nZSB0bwoJYW55IG9mIHRoZSBsaWJyYXJ5IGNvZGUncyBsb2dpYywgYSBsYXJnZSBudW1iZXIgb2YgZmlsZXMgd2VyZQoJbW9kaWZpZWQgdG8gYWNoaWV2ZSB0aGUgYWJvdmUsIGFuZCB0aGUgY29uZmlndXJhdGlvbiBzY3JpcHQKCXdhcyBlbmhhbmNlZCB0byBkbyBzb21lIGF1dG9tYXRpYyBlbmFibGluZyBvZiBmZWF0dXJlcyAoZS5nLgoJLS13aXRoLXhpbmNsdWRlIGZvcmNlcyAtLXdpdGgteHBhdGgpLiAgQWRkaXRpb25hbGx5LCBhbGwgdGhlIGZvcm1hdAoJZXJyb3JzIGRpc2NvdmVyZWQgYnkgYXBpYnVpbGQucHkgd2VyZSBjb3JyZWN0ZWQuCgkqIGNvbmZpZ3VyZS5pbjogZW5oYW5jZWQgY3Jvc3MtY2hlY2tpbmcgb2Ygb3B0aW9ucwoJKiBkb2MvYXBpYnVpbGQucHksIGRvYy9lbGZnY2NoYWNrLnhzbCwgZG9jL2xpYnhtbDItcmVmcy54bWwsCgkgIGRvYy9saWJ4bWwyLWFwaS54bWwsIGdlbnRlc3QucHk6IGNoYW5nZWQgdGhlIHVzYWdlIG9mIHRoZQoJICA8Y29uZD4gZWxlbWVudCBpbiBtb2R1bGUgZGVzY3JpcHRpb25zCgkqIGVsZmdjY2hhY2suaCwgdGVzdGFwaS5jOiByZWdlbmVyYXRlZCB3aXRoIHByb3BlciBjb25kaXRpb25hbHMKCSogSFRNTHBhcnNlci5jLCBTQVguYywgZ2xvYmFscy5jLCB0cmVlLmMsIHhtbHNjaGVtYXMuYywgeHBhdGguYywKCSAgdGVzdFNBWC5jOiBjbGVhbmVkIHVwIGNvbmRpdGlvbmFscwoJKiBpbmNsdWRlL2xpYnhtbC9bU0FYLmgsIFNBWDIuaCwgZGVidWdYTUwuaCwgZW5jb2RpbmcuaCwgZW50aXRpZXMuaCwKCSAgaGFzaC5oLCBwYXJzZXIuaCwgcGFyc2VySW50ZXJuYWxzLmgsIHNjaGVtYXNJbnRlcm5hbHMuaCwgdHJlZS5oLAoJICB2YWxpZC5oLCB4bGluay5oLCB4bWxJTy5oLCB4bWxhdXRvbWF0YS5oLCB4bWxyZWFkZXIuaCwgeHBhdGguaF06CgkgIHN5bmNocm9uaXplZCB0aGUgY29uZGl0aW9uYWxzIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgbW9kdWxlIGNvZGUKCSogZG9jL2V4YW1wbGVzL3RyZWUyLmMsIGRvYy9leGFtcGxlcy94cGF0aDEuYywgZG9jL2V4YW1wbGVzL3hwYXRoMi5jOgoJICBhZGRlZCBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgcmVxdWlyZWQgZm9yIGNvbXBpbGF0aW9uCgkqIGRvYy8qLmh0bWwsIGRvYy9odG1sLyouaHRtbDogcmVidWlsdCB0aGUgZG9jcwoJClNhdCBEZWMgMjUgMTg6MTA6MDIgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogZml4ZWQgdG8gc2tpcCAoaWYgbmVjZXNzYXJ5KSB0aGUgQk9NIGZvcgoJICBlbmNvZGluZyAndXRmLTE2Jy4gIENvbXBsZXRlcyB0aGUgZml4IGZvciBidWcgIzE1MjI4Ni4KCSogdHJlZS5jLCBwYXJzZXIuYzogbWlub3Igd2FybmluZyBjbGVhbnVwLCBubyBjaGFuZ2UgdG8gbG9naWMKCQpGcmkgRGVjIDI0IDE2OjMxOjIyIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weTogYWRkZWQgbW9zdCByZXF1aXJlZCBlbnRpcmVzIHRvCgkgIGZvcmVpZ24gZW5jb2RpbmcgdGFibGUsIHBsdXMgc29tZSBhZGRpdGlvbmFsIGxvZ2ljIHRvCgkgIGFzc3VyZSBvbmx5IHRoZSAxc3QgcGFyYW0gdXNlcyB0aGUgJ3QjJyBmb3JtYXQuICBGaXhlcwoJICBidWcgIzE1MjI4NiwgYnV0IG1heSBzdGlsbCBoYXZlIHNvbWUgb3RoZXIgVVRGLTE2IHByb2JsZW1zLgoKVGh1IERlYyAyMyAyMzo0NDowOCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIE1ha2VmaWxlLmFtLCBnZW50ZXN0LnB5OiBlbmhhbmNlZCBmb3IgZW5hYmxpbmcgYnVpbGQgaW4KCSAgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LiAgQWRkZWQgKG9wdGlvbmFsKSBwYXJhbSB0byBnZW50ZXN0LnB5CgkgIHRvIHNwZWNpZnkgdGhlIHNvdXJjZSBkaXJlY3RvcnkgKGJ1ZyAjMTU1NDY4KQoJKiBkb2MvTWFrZWZpbGUuYW06IGNoYW5nZWQgZGVzdGluYXRpb24gb2YgTkVXUyBmcm9tICh0b3Bfc3JjZGlyKQoJICB0byAodG9wX2J1aWxkZGlyKSAoYnVnICMxNTU0NjgpCgkqIHB5dGhvbi9NYWtlZmlsZS5hbSwgcHl0aG9uL2dlbmVyYXRvci5weTogZW5oYW5jZWQgZm9yIGVuYWJsaW5nCgkgIGJ1aWxkIGluIGEgZGlmZmVyZW50IGRpcmVjdG9yeShidWcgIzE1NTQ2OCkuICBBZGRlZCAob3B0aW9uYWwpCgkgIHBhcmFtIHRvIGdlbmVyYXRvci5weSB0byBzcGVjaWZ5IHRoZSBzb3VyY2UgZGlyZWN0b3J5LiAgQWRkZWQKCSAgYSBuZXcgdGFibGUgb2YgZnVuY3Rpb25zIHdoaWNoIGhhdmUgcG9zc2libGUgImZvcmVpZ24iIGVuY29kaW5ncwoJICAoZS5nLiBVVEYxNiksIGFuZCBjb2RlIHRvIHVzZSBweXRob24gJ3QnIGZvcm1hdCBpbnN0ZWFkIG9mCgkgICd6JyBmb3JtYXQgKG1vc3RseSBzb2x2aW5nIGJ1ZyAjMTUyMjg2LCBidXQgc3RpbGwgbmVlZCB0bwoJICBwb3B1bGF0ZSB0aGUgdGFibGUpLgoJICAKVHVlIERlYyAyMSAwODoxMDo0NCBNU1QgMjAwNCBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3NpdGUueHNsLCBkb2MveG1sLmh0bWwsIHBsdXMgcmVidWlsdCBhbGwgdGhlIGh0bWwgcGFnZXMKCUNoYW5nZSByZWZlcmVuY2UgdG8gbmV3IHNpdGUgZm9yIFNvbGFyaXMgYmluYXJpZXMsIGZpeGluZyBidWcKCTE2MDU5OAoKCk1vbiBEZWMgMjAgMDg6MDI6NTcgUFNUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBwYXJzZXIuYzogcmVzZXQgaW5wdXQtPmJhc2Ugd2l0aGluIHhtbFN0b3BQYXJzZXIKCSogeG1sc3RyaW5nLmM6IHJlbW92ZWQgY2FsbCB0byB4bWxVVEY4U3RybGVuIGZyb20gd2l0aGluCgkgIHhtbFVURjhTdHJwb3MgKEJpbGwgTW9zZWxleSBwb2ludGVkIG91dCBpdCB3YXMgbm90CgkgIHVzZWZ1bCkKCkZyaSBEZWMgMTcgMTY6MDM6NDEgUFNUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB2YWxpZC5jOiBjaGFuZ2VkIHhtbEVyclZhbGlkV2FybmluZyB0byB1c2UgY3R4dC0+d2FybmluZwoJICBpbnN0ZWFkIG9mIGN0eHQtPmVycm9yIGZvciBpdHMgcmVwb3J0cyAoYnVnICMxNjA2NjIpCgpGcmkgRGVjIDE3IDE0OjUyOjE3IFBTVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weTogbW9kaWZpZWQgdG8gYWxsb3cgdGhlIG5zIGFuZCBuc0RlZnMKCSAgYWNjZXNzb3JzIHRvIHJldHVybiBOb25lIGluc3RlYWQgb2YgZXJyb3Igd2hlbiBubyBuYW1lc3BhY2UKCSAgaXMgcHJlc2VudCAoYnVnICMpCgpGcmkgRGVjIDE3IDExOjQwOjIxIFBTVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jL01ha2VmaWxlLmFtOiBjaGFuZ2VkIG1haW50YWluZXItY2xlYW4gZGVwZW5kZW5jeSB3aXRoCgkgIHN1Z2dlc3Rpb24gZnJvbSBDcmlzcGluIEZsb3dlcmRheSAoYnVnICMxNTc2MzQpCgkqIGRlYnVnWE1MLmM6IGZpeGVkIGNyYXNoIHdoZW4gQVRUUklCVVRFIG9yIERPQ1VNRU5UIG5vZGVzCgkgIHdlcmUgc3BlY2lmaWVkIHdpdGggZGVidWdEdW1wTm9kZSAoYnVnICMxNjA2MjEpCgpGcmkgRGVjIDEwIDExOjI0OjQxIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeGVkIElEIGRlYWxsb2NhdGlvbiBwcm9ibGVtIGJhc2VkIG9uIHBhdGNoIGZyb20KCSAgU3RldmUgU2hlcGFyZCBmaXhlcyBidWcgIzE2MDg5MwoJKiB4bWxtZW1vcnkuYzogaW1wcm92aW5nIGNvbW1lbnQuCgkqIHRlc3RhcGkuYzogbmV3IHRlc3QgZm9yIHhtbERpY3RFeGlzdHMoKSBpcyBnZW5lcmF0ZWQuCgpXZWQgRGVjICAxIDIyOjM1OjM3IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZGljdC5jLCB4cGF0aC5jLCBpbmNsdWRlL2xpYnhtbC9oYXNoLmg6IGZpeGVkIHVwIHNvbWUgZ2NjIHdhcm5pbmdzLAoJICBubyBjaGFuZ2UgdG8gbG9naWMuICBOZXcgbWFjcm8gWE1MX0NBU1RfRlBUUiB0byBjaXJjdW12ZW50IGdjYwoJICB3YXJuaW5ncyBvbiBmdW5jdGlvbiBwb2ludGVyIDwtPiBvYmplY3QgcG9pbnRlciAoYSBoYWNrKS4KCk1vbiBOb3YgMjkgMTQ6MDc6MTggQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4ZWQgYSBtZW1vcnkgbGVhayBvbiBlcnJvcnMgaW4gc29tZSBjaXJjdW1zdGFuY2VzICMxNTk4MTIKCkZyaSBOb3YgMjYgMjM6MjA6NDggSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxJTy5jOiBhZGRlZCBhIGNoZWNrIHdpdGhpbiB4bWxPdXRwdXRCdWZmZXJXcml0ZUVzY2FwZSB0byBwcmV2ZW50CgkgIGEgZGVhZCBsb29wIG9uIGJhZCBkYXRhIChidWcgMTU5NTUwKQoKRnJpIE5vdiAyNiAxMzowOTowNCBDRVQgMjAwNCBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEZpeGVkIHN0cmljdC9sYXggZWxlbWVudCB3aWxkY2FyZHM6IHRoZSBjaGlsZHJlbgoJICBvZiBlbGVtZW50cyBmb3Igd2hpY2ggYSBkZWNsYXJhdGlvbiBleGlzdGVkIHdlcmUgc3RpbGwgcHJvY2Vzc2VkCgkgIGJ5IHRoZSB3aWxkY2FyZCBtZWNoYW5pc20gKHJlcG9ydGVkIGJ5IHBoaWxpcHBlIHZlbnRyaWxsb24gdG8gdGhlCgkgIG1haWxpbmcgbGlzdCkuCgkgIENoYW5nZWQgdGhlIGltcG9ydCBhbmQgaW5jbHVkZSBtYWNoYW5pc20gdG8gc2hhcmUgZGljdGlvbmFyaWVzLgoKRnJpIE5vdiAyNiAxMTo0NDozNiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgcGFyc2VyLmM6IG1ha2Ugc3VyZSB4bWxDdHh0UmVhZEZpbGUgYW5kIGh0bWxDdHh0UmVhZEZpbGUKCSAgZ28gdGhyb3VnaCB0aGUgY2F0YWxvZyByZXNvbHV0aW9uLgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogZml4IGEgc2lkZSBlZmZlY3Qgd3JuaW5nIG9mIHRoZSBjaGFuZ2UKCldlZCBOb3YgMjQgMTM6NDE6NTIgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGljdC5jIGluY2x1ZGUvbGlieG1sL2RpY3QuaDogYWRkZWQgeG1sRGljdEV4aXN0cygpIHRvIHRoZSAKCSAgZGljdGlvbm5hcnkgaW50ZXJmYWNlLgoJKiB4bWxyZWFkZXIuYzogYXBwbHlpbmcgeG1sVGV4dFJlYWRlckhhc0F0dHJpYnV0ZXMgZml4IGZvciBuYW1lc3BhY2VzCgkgIGZyb20gUm9iIFJpY2hhcmRzCgpXZWQgTm92IDE3IDEzOjU0OjM3IENFVCAyMDA0IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogdGlueSBlbmhhbmNlbWVudCBmb3IgY29udGVudCBtb2RlbCBlcnJvciByZXBvcnRzCgkgICgjMTU3MTkwLCAjMTQzOTQ4KS4gUmVtb3ZlZCBhYmJyZXZpYXRpb25zOiBDVCwgU1QgYW5kIFdDIAoJICAoIzE1NzE5MCwgcmVwb3J0ZWQgYnkgRnJhbnMgIEVuZ2xpY2gpLgoJICBJbml0aWFsOiBubyByZXBvcnQgb2YgbG9jYWwgY29tcG9uZW50cy4KCSogcmVzdWx0L3NjaGVtYXMvYWxsKiByZXN1bHQvc2NoZW1hcy9hbnkzXzBfMC5lcnIKCSAgcmVzdWx0L3NjaGVtYXMvY2hvaWNlKgoJICByZXN1bHQvc2NoZW1hcy9jb3Mtc3QtcmVzdHJpY3RzLTEtMi1lcnJfMF8wLmVycgoJICByZXN1bHQvc2NoZW1hcy9kZXJpdmF0aW9uLW9rLWV4dGVuc2lvbi1lcnJfMF8wLmVycgoJICByZXN1bHQvc2NoZW1hcy9kZXJpdmF0aW9uLW9rLWV4dGVuc2lvbl8wXzAuZXJyCgkgIHJlc3VsdC9zY2hlbWFzL2Rlcml2YXRpb24tb2stcmVzdHJpY3Rpb24tMi0xLTFfMF8wLmVycgoJICByZXN1bHQvc2NoZW1hcy9kZXJpdmF0aW9uLW9rLXJlc3RyaWN0aW9uLTQtMS1lcnJfMF8wLmVyciAKCSAgcmVzdWx0L3NjaGVtYXMvZGV0ZXIwXzBfMC5lcnIgcmVzdWx0L3NjaGVtYXMvZXh0ZW5zaW9uMV8wXzIuZXJyCgkgIHJlc3VsdC9zY2hlbWFzL2ZhY2V0LXVuaW9uU1QtZXJyMV8wXzAuZXJyCgkgIHJlc3VsdC9zY2hlbWFzL2hleGJpbmFyeV8wXzEuZXJyCgkgIHJlc3VsdC9zY2hlbWFzL2xpc3QqIHJlc3VsdC9zY2hlbWFzL3Jlc3RyaWN0aW9uLWF0dHIxXzBfMC5lcnIKCSAgcmVzdWx0L3NjaGVtYXMvdmR2LWZpcnN0NF8wXzEuZXJyIHJlc3VsdC9zY2hlbWFzL3Zkdi1maXJzdDRfMF8yLmVycjoKCSAgQWRhcHRlZCBvdXRwdXQuCgpNb24gTm92IDE1IDEzOjA0OjI4IENFVCAyMDA0IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogTW92ZWQgZXhlY3V0aW9uIG9mIHhtbFNjaGVtYUNoZWNrRGVmYXVsdHMgdG8KCSAgeG1sU2NoZW1hVHlwZUZpeHVwOyB0aGlzIGVuc3VyZXMgZmFjZXRzIG9mIGluaGVyaXRlZCB0eXBlcyB0byBiZQoJICBjaGVja2VkIHByaW9yIHRvIGZhY2V0cyBvZiBkZXJpdmVkIHR5cGVzIC0gd2hpY2ggY2F1c2VkIGEgc2VnCgkgIGZhdWx0IG90aGVyd2lzZSAoYnVnICMxNTgyMTYsIHJlcG9ydGVkIGJ5IEZyYW5zIEVuZ2xpY2gpLgoKU3VuIE5vdiAxNCAyMjoyMzoxOCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGdlbnRlc3QucHksIHRlc3RhcGkuYzogZnVydGhlciBlbmhhbmNlbWVudCwgbm93IGFsbAoJICBjb21waWxhdGlvbiB3YXJuaW5ncyBoYXZlIGJlZW4gZml4ZWQuCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBhZGRlZCBOVUxMIGNoZWNrIGZvciBvbmUgZnVuY3Rpb24KCkZyaSBOb3YgMTIgMjM6NTg6MTQgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiB0cml2aWFsIGNoYW5nZSAoY2hhbmdlZCBDSEVDS19DT05URVhUIHRvIENIRUNLX0NUWFQKCSAgb24gYSBjb3VwbGUgb2YgbGluZXMpCgkqIGdlbnRlc3QucHksIHRlc3RhcGkuYzogZW5oYW5jZWQgdG8gcmVkdWNlIGNvbXBpbGF0aW9uIHdhcm5pbmdzCgpGcmkgTm92IDEyIDE2OjEyOjQ4IENFVCAyMDA0IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogVW4tY29tbWVudGVkIGEgVE9ETyBpbiB4bWxTY2hlbWFQYXJzZUVsZW1lbnQuCgpGcmkgTm92IDEyIDE0OjU1OjM2IENFVCAyMDA0IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogQ29ycmVjdCBzeW1ib2wgc3BhY2UgZm9yICdhbGwnIGFuZCAnY2hvaWNlJy4KCSogeG1sc2NoZW1hc3R5cGVzLmMgaW5jbHVkZS94bWxzY2hlbWFzdHlwZXMuaDogQWRkZWQgJ3JlcGxhY2UnIAoJICBub3JtYWxpemF0aW9uIGZvciAnbm9ybWFsaXplZFN0cmluZycuICAKCSAgQWRkZWQgeG1sU2NoZW1hV2hpdGVTcGFjZVJlcGxhY2UgdG8gdGhlIEFQSS4KClRodSBOb3YgMTEgMjE6NDM6MDIgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGZvcmdvdCBhICQoc3JjZGlyKQoJKiBlbmNvZGluZy5jOiBzdHVwaWQgZXJyb3Igd3JvbmcgbmFtZSAjMTU3OTc2CgpXZWQgTm92IDEwIDE1OjM1OjI1IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1MgY29uZmlndXJlLmluIGRvYy8qOiBwcmVwYXJpbmcgcmVsZWFzZSBvZiBsaWJ4bWwyLTIuNi4xNgoKV2VkIE5vdiAxMCAxMjo1NToxOCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sMmNsYXNzLnR4dAoJICBweXRob24vbGlieG1sX3dyYXAuaCBweXRob24vdHlwZXMuYzogQXBwbGllZCBwYXRjaCBmcm9tIEJyZW50CgkgIEhlbmRyaWNrcyBhZGRpbmcgc3VwcG9ydCBmb3IgbGF0ZSBEVEQgdmFsaWRhdGlvbi4KCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9kdGR2YWxpZC5weQoJICBweXRob24vdGVzdHMvdGVzdC5kdGQ6IGludGVncmF0ZWQgdGhlIHByb3ZpZGVkIHJlZ3Jlc3Npb24gdGVzdAoKVHVlIG5vdiAgOSAxOToyNDozMSBDRVQgMjAwNCBEb2RqaSBTZWtldGVsaSA8ZG9kamlAc2VrZXRlbGkub3JnPgoKCSogY29uZmlndXJlLmluOiBkZXRlY3Qgd2hlbiBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZQoJICBoYXMgdGhlIF9fc3NfZmFtaWx5IG1lbWJlciBpbnN0ZWFkIG9mIHNzX2ZhbWlseSBhbmQKCSAgYmVoYXZlIGFjY29yZGluZ2x5LiBXZSBub3cgY2FuIHVzZSBpcHY2IG9uIGFpeC4KClR1ZSBOb3YgIDkgMTc6MTU6NDYgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gZ2VudGVzdC5weSB0ZXN0YXBpLmM6IGludGVncmF0ZWQgaW4gIm1ha2UgdGVzdHMiCgkgIGFkZGVkIC1xIG9wdGlvbiwgYW5kIG1vcmUgY29uZGl0aW9uYWwgZmVhdHVyZXMgZml4ZXMKCSogY2F0YWxvZy5jIGRlYnVnWE1MLmMgcGFyc2VyLmMgdGVzdFRocmVhZHMuYyB4bWxsaW50LmMKCSAgeG1sc2NoZW1hc3R5cGVzLmMgeG1sd3JpdGVyLmNpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmgKCSAgaW5jbHVkZS9saWJ4bWwvZGVidWdYTUwuaDogdmFyaW91cyBjb21waWxhdGlvbiBhbmQgY29uZGl0aW9uYWwKCSAgY2xlYW51cHMuCgkqIGRvYy8qOiByZWdlbmVyYXRlZAoKVHVlIE5vdiAgOSAxNTo1OTo1MCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogYmV0dGVyIGhhbmRsaW5nIG9mIGNvbmRpdGlvbmFsIGZlYXR1cmVzCgkqIEhUTUxwYXJzZXIuYyBTQVgyLmMgcGFyc2VySW50ZXJuYWxzLmMgeG1sd3JpdGVyLmM6IG1vcmUgdGVzdGluZwoJICBvbiBwYXJzZXIgY29udGV4dHMgY2xvc2VkIGxlYWtzLCBlcnJvciBtZXNzYWdlcwoKVHVlIE5vdiAgOSAxMDoyMTozNyBHTVQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IGZpeGVkIHByb2JsZW0gY29uY2VybmluZyBYUGF0aCBjb250ZXh0IGNvcnJ1cHRpb24KCSAgZHVyaW5nIGZ1bmN0aW9uIGFyZ3VtZW50IGV2YWx1YXRpb24gKGJ1ZyAxNTc2NTIpCgkgIApNb24gTm92ICA4IDE4OjU0OjUyIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3RhcGkuYzogbW9yZSB0eXBlcy4KCSogcGFyc2VySW50ZXJuYWxzLmMgeHBhdGguYzogbW9yZSBmaXhlcwoKTW9uIE5vdiAgOCAxODoxNjo0MyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogYmV0dGVyIHBhcnNlciBvcHRpb25zIGNvdmVyYWdlCgkqIFNBWDIuYyB4cGF0aC5jOiBtb3JlIGNsZWFudXBzLgoKVHVlIE5vdiAgOSAwMTo1MDowOCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0YXBpLmM6IHRyeWluZyB0byBmaXggc29tZSBvcHRpb25hbCBzdXBwb3J0IGJyb2tlbm5lc3MKCk1vbiBOb3YgIDggMTc6MjU6MjcgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IG1vcmUgY292ZXJhZ2UKCSogZGVidWdYTUwuYyBwYXJzZXIuYyB4bWxyZWdleHAuYyB4cGF0aC5jOiBtb3JlIGZpeGVzCgpNb24gTm92ICA4IDE1OjAyOjM5IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBtb3JlIGNvdmVyYWdlCgkqIFNBWDIuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYzogbW9yZSBmaXhlcwoKTW9uIE5vdiAgOCAxMjo1NToxNiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyB0ZXN0YXBpLmMgeG1sSU8uYyB4bWxzdHJpbmcuYzogbW9yZSBmaXhlcy4KCk1vbiBOb3YgIDggMTE6MjQ6NTcgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IG1vcmUgdHlwZXMsIG1vcmUgY292ZXJhZ2UKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgcmVsYXhuZy5jIHZhbGlkLmMgeG1sSU8uYwoJICB4bWxzY2hlbWFzdHlwZXMuYzogbW9yZSBwcm9ibGVtcyBmaXhlZAoJICAKTW9uIE5vdiAgOCAxMDoyNDoyOCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGdlbnRlc3QucHk6IGZpeGVkIHRlc3QgZmlsZSBjb3JydXB0aW9uIHByb2JsZW0KClN1biBOb3YgIDcgMTM6MTg6MDUgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IGZpeGVkIHR5cG9zIGFuZCBhdm9pZCBDYXRhbG9ncyB2ZXJib3NpdHkKClNhdCBOb3YgIDYgMjM6MjU6MTYgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdGFwaS5jOiBhdWdtZW50ZWQgdGhlIG51bWJlciBvZiB0eXBlcwoKU2F0IE5vdiAgNiAyMDoyNDowNyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIHRyZWUuYyB4bWxyZWFkZXIuYyB4bWx3cml0ZXIuYzogYSBudW1iZXIgb2YgbmV3CgkgIGJ1ZyBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgoKU2F0IE5vdiAgNiAxNTo1MDoxMSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogYXVnbWVudGVkIHR5cGUgYXV0b2dlbmVyYXRpb24gZm9yIGVudW1zCgkqIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwveHBhdGguaDogcmVtb3ZlZCBkaXJlY3QgZXJyb3IgcmVwb3J0aW5nLgoKU2F0IE5vdiAgNiAxNDoyNzoxOCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiBmaXhlZCBhIHJlZ3Jlc3Npb24gaW4gaWNvbnYgc3VwcG9ydC4KCkZyaSBOb3YgIDUgMTg6MTk6MjMgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IGF1dG9nZW5lcmF0ZSBhIG1pbmltYWwgTlVMTCB2YWx1ZSBzZXF1ZW5jZQoJICBmb3IgdW5rbm93biBwb2ludGVyIHR5cGVzCgkqIEhUTUxwYXJzZXIuYyBTQVgyLmMgY2h2YWxpZC5jIGVuY29kaW5nLmMgZW50aXRpZXMuYyBwYXJzZXIuYwoJICBwYXJzZXJJbnRlcm5hbHMuYyByZWxheG5nLmMgdmFsaWQuYyB4bWxJTy5jIHhtbHJlYWRlci5jIAoJICB4bWxzYXZlLmMgeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jIHhtbHN0cmluZy5jIHhwYXRoLmMKCSAgeHBvaW50ZXIuYzogVGhpcyB1bmNvdmVyZWQgYW4gaW1wcmVzc2l2ZSBhbW91bnQgb2YgZW50cnkgcG9pbnRzCgkgIG5vdCBjaGVja2luZyBmb3IgTlVMTCBwb2ludGVycyB3aGVuIHRoZXkgb3VnaHQgdG8sIGNsb3NpbmcgYWxsCgkgIHRoZSBvcGVuIGdhcHMuCgpGcmkgTm92ICA1IDE2OjI2OjI4IFVUQyAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogY2F0YWxvZy5jOiBmaXhlZCBwcm9ibGVtIHdpdGggTlVMTCBlbnRyeSAoYnVnIDE1NzQwNykKCSogeHBhdGguYzogZml4ZWQgYSBjb3VwbGUgb2Ygd2FybmluZ3MgKG5vIGNoYW5nZSB0byBsb2dpYykKCkZyaSBOb3YgIDUgMTU6MzA6NDMgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IG1vcmUgY292ZXJhZ2UKCSogeG1sdW5pY29kZS5jOiBvbmUgZml4CgpGcmkgTm92ICA1IDIzOjE1OjUxIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVudGl0aWVzLmM6IGZpeGVkIGEgY29tcGlsYXRpb24gcHJvYmxlbSBvbiBhIHJlY2VudCBjaGFuZ2UKCkZyaSBOb3YgIDUgMTI6NTA6MDkgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IG1vcmUgY292ZXJhZ2UKCSogbmFub2Z0cC5jIHRyZWUuYzogbW9yZSBmaXhlcwoKRnJpIE5vdiAgNSAxMTowMjoyOCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogZml4ZWQgdGhlIHdheSB0aGUgZ2VuZXJhdG9yIHdvcmtzLAoJICBleHRlbmRlZCB0aGUgdGVzdGluZywgZXNwZWNpYWxseSB3aXRoIG1vcmUgcmVhbCB0cmVlcyBhbmQgbm9kZXMuCgkqIEhUTUx0cmVlLmMgdHJlZS5jIHZhbGlkLmMgeGluY2x1ZGUuYyB4bWxJTy5jIHhtbHNhdmUuYzogYSBidW5jaAoJICBvZiByZWFsIHByb2JsZW1zIGZvdW5kIGFuZCBmaXhlZC4KCSogZW50aXRpZXMuYzogZml4IGVycm9yIHJlcG9ydGluZyB0byBnbyB0aHJvdWdoIHRoZSBuZXcgaGFuZGxlcnMKClRodSBOb3YgIDQgMTg6NDQ6NTYgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGRvaGggLi4uIHN0dXBpZCBjaGFuZ2Uga2lsbGluZyB4bWxQYXJzZURvYygpCgpUaHUgTm92ICA0IDE4OjMyOjIyIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBjaGFuZ2luZyB0aGUgd2F5IHRoZSAuYyBpcyBnZW5lcmF0ZWQsCgkgIGV4dGVuZGluZyB0aGUgdGVzdHMgY292ZXJhZ2UKCSogaW5jbHVkZS9saWJ4bWwvbmFub2Z0cC5oIG5hbm9mdHAuYyBlbGZnY2NoYWNrLmggZG9jLyo6IGZpeGluZyBzb21lCgkgIGZ1bmN0aW9uIHNpZ25hdHVyZXMsIHJlZ2VuZXJhdGluZyBzdHVmZgoJKiBTQVgyLmMgcGFyc2VyLmMgeG1sSU8uYzogYW5vdGhlciBzZXQgb2YgYnVnIGZpeGVzIGFuZCBBUEkgaGFyZGVuaW5nCgpUaHUgTm92ICA0IDEzOjMyOjE5IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBleHRlbmRpbmcgdGhlIHRlc3RzIGNvdmVyYWdlCgpUaHUgTm92ICA0IDExOjUyOjI4IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBnZW50ZXN0LnB5IHdhcyBtaXNzaW5nIGZyb20gdGhlIEVYVFJBX0RJU1QKClRodSBOb3YgIDQgMTE6NDg6NDcgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IGV4dGVuZGluZyB0aGUgdGVzdHMgY292ZXJhZ2UKCSogSFRNTHRyZWUuYyB0cmVlLmMgeG1sc2F2ZS5jIHhwb2ludGVyLmM6IG1vcmUgZml4ZXMgYW5kIGNsZWFudXBzCgpUaHUgTm92ICA0IDAwOjI1OjM2IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBtb3JlIGZpeGVzIGFuZCBleHRlbmRpbmcgdGhlIHRlc3RzIGNvdmVyYWdlCgkqIG5hbm9mdHAuYyB4bWxJTy5jOiBtb3JlIGZpeGVzIGFuZCBoYXJkZW5pbmcKCQpXZWQgTm92ICAzIDIwOjE2OjI0IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBtb3JlIGZpeGVzIGFuZCBleHRlbmRpbmcgdGhlIHRlc3RzIGNvdmVyYWdlCgkqIHZhbGlkLmM6IGJ1bmNoIG9mIGNsZWFudXBzIGFuZCAyIGxlYWtzIHJlbW92ZWQgCgpXZWQgTm92ICAzIDE4OjA2OjQ0IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBtb3JlIGZpeGVzIGFuZCBleHRlbmRpbmcgdGhlIHRlc3RzIGNvdmVyYWdlCgkqIGxpc3QuYyB0cmVlLmM6IG1vcmUgZml4ZXMgYW5kIGhhcmRlbmluZwoKV2VkIE5vdiAgMyAxNToxOToyMiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogbW9yZSBmaXhlcyBhbmQgZXh0ZW5kaW5nIHRoZSB0ZXN0cyBjb3ZlcmFnZQoJKiByZWxheG5nLmMgaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oOiBhZGRpbmcgYSB0eXBlIGluaXQgaW50ZXJmYWNlCgkqIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmggcGFyc2VyLmMgeG1scmVhZGVyLmMgeG1sd3JpdGVyLmM6IG1vcmUKCSAgY2xlYW51cHMgYW5kIGJ1ZyBmaXhlcyByYWlzZWQgYnkgdGhlIHJlZ3Jlc3Npb24gdGVzdHMKCldlZCBOb3YgIDMgMTI6NDk6MzAgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IG1vcmUgZml4ZXMgYW5kIGV4dGVuZGluZyB0aGUgdGVzdHMgY292ZXJhZ2UKCSogeG1sd3JpdGVyLmMgbGlzdC5jOiBtb3JlIGhhcmRlaW5nIG9mIEFQSXMKCSogZG9jL2FwaWJ1aWxkLnB5OiBza2lwIHRlc3RhcGkuYyB3aGVuIHNjYW5uaW5nIHRoZSBDIGZpbGVzLgoKVHVlIE5vdiAgMiAyMzowOTowNiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogbW9yZSB0ZXN0aW5nIGFuZCBjb3ZlcmFnZQoJKiBlbGZnY2NoYWNrLmggeG1sc3RyaW5nLmMgaW5jbHVkZS9saWJ4bWwveG1sc3RyaW5nLmg6IG1vcmUgY2xlYW51cHMKCSogZG9jLyo6IHJlYnVpbHQKClR1ZSBOb3YgIDIgMTk6NDQ6MzIgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IG1vcmUgZGV2ZWxvcG1lbnRzIG9uIHRoZSBBUEkgdGVzdGluZwoJKiBIVE1McGFyc2VyLmMgdHJlZS5jOiBtb3JlIGNsZWFudXBzCgkqIGRvYy8qOiByZWJ1aWx0CgpUdWUgTm92ICAyIDE1OjQ5OjM0IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbG1lbW9yeS5jIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oOiBhZGRpbmcgeG1sTWVtQmxvY2tzKCkKCSogTWFrZWZpbGUuYW0gZ2VudGVzdC5weSB0ZXN0YXBpLmM6IHdvcmsgb24gZ2VuZXJhdG9yIG9mIGFuCgkgIGF1dG9tYXRpYyBBUEkgcmVncmVzc2lvbiB0ZXN0IHRvb2wuCgkqIFNBWDIuYyBuYW5vZnRwLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdHJlZS5jIHhtbElPLmMKCSAgeG1sc3RyaW5nLmM6IHZhcmlvdXMgQVBJIGhhcmRlaW5nIGNoYW5nZXMgYXMgYSByZXN1bHQgb2YgcnVubmluZwoJICB0ZWggZmlyc3Qgc2V0IG9mIGF1dG9tYXRpYyBBUEkgcmVncmVzc2lvbiB0ZXN0cy4KCSogdGVzdC9zbGFzaGRvdDE2LnhtbDogYXBwYXJlbnRseSBtaXNzaW5nIGZyb20gQ1ZTLCBjb21taXRlZCBpdAoKTW9uIE5vdiAgMSAxNTo1NDoxOCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXhlZCBhbiBVVEYtOCBwYXJzaW5nIGJ1ZyByZXBvcnRlZCBieSBNYXJrdXMgQmVydGhlYXUKCSAgb24gI2ZlZG9yYS1kZXZlbAoKU3VuIE9jdCAzMSAyMjowMzozOCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBidWcgcmVwb3J0ZWQgYnkgUGV0ciBQYWphcyBvbiB0aGUgbGlzdCBhbmQKCSAgYWZmZWN0aW5nIFhNTDo6TGlieG1sCgpTdW4gT2N0IDMxIDE2OjMzOjU0IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmMgZG9jL2V4YW1wbGVzL3Rlc3RXcml0ZXIuYzogRml4ZWQgYnVnICMxNTM5MzcsIG1ha2luZwoJICBzdXJlIHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlIHdyaXR0ZW4uCgkgIEhhZCB0byBmaXggb25lIG9mIHRoZSBleGFtcGxlcy4KCkZyaSBPY3QgMjkgMTQ6MTY6NTYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy94bWxsaW50LjEgZG9jL3htbGxpbnQueG1sOiBpbmRpY2F0ZSAtIG1lYW5zIHN0ZGluIGNsb3NpbmcgIzE1NjYyNgoKRnJpIE9jdCAyOSAxNDowMzozNiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jOiByZWdpc3RlciB4bWxTY2hlbWFTZXRWYWxpZEVycm9ycywgcGF0Y2ggZnJvbQoJICBCcmVudCBIZW5kcmlja3MgaW4gdGhlIG1haWxpbmctbGlzdAoJKiBpbmNsdWRlL2xpYnhtbC92YWxpZC5oIEhUTUxwYXJzZXIuYyBTQVgyLmMgdmFsaWQuYwoJICBwYXJzZXJJbnRlcm5hbHMuYzogZml4ICMxNTY2MjYgYW5kIG1vcmUgZ2VuZXJhbGx5IGhvdyB0byBmaW5kIG91dAoJICBpZiBhIHZhbGlkYXRpb24gY29udGVjdCBpcyBwYXJ0IG9mIGEgcGFyc2luZyBjb250ZXh0IG9yIG5vdC4gVGhpcwoJICBjYW4gcHJvYmFibHkgYmUgaW1wcm92ZWQgdG8gbWFrZSAxMDAlIHN1cmUgdGhhdCB2Y3R4dC0+dXNlckRhdGEKCSAgaXMgdGhlIHBhcnNlciBjb250ZXh0IHRvby4gSXQncyBhIGJpdCBoYWlyeSBiZWNhdXNlIHdlIGNhbid0IAoJICBjaGFuZ2UgdGhlIHhtbFZhbGlkQ3R4dCBzdHJ1Y3R1cmUgd2l0aG91dCBicmVha2luZyB0aGUgQUJJIHNpbmNlCgkgIHRoaXMgY2hhbmdlIHhtbFBhcnNlckN0eHQgaW5mb3JtYXRpb24gaW5kZXhlcy4KCldlZCBPY3QgMjcgMTk6MjY6MjAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIENoYW5nZUxvZyBORVdTIGNvbmZpZ3VyZS5pbiBkb2MvKjogcHJlcGFyaW5nIHJlbGVhc2UgMi42LjE1CgkqIGRlYnVnWE1MLmMgbmFub2Z0cC5jIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYzogY2xlYW51cHMKCldlZCBPY3QgMjcgMDk6MzE6MjQgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB1cmkuYzogZml4ZWQgYSBzdHVwaWQgbWlzdGFrZSBpbiB4bWxCdWlsZFJlbGF0aXZlVVJJCgkgIChidWcgMTU2NTI3KQoKV2VkIE9jdCAyNyAxMTo0NDozNSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmM6IHNlY29uZCBwYXJ0IG9mIHRoZSBzZWN1cml0eSBmaXggZm9yCgkgIHhtbE5hbm9GVFBDb25uZWN0KCkgYW5kIHhtbE5hbm9IVFRQQ29ubmVjdEhvc3QoKS4KClR1ZSBPY3QgMjYgMjM6NTc6MDIgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9mdHAuYzogYXBwbGllZCBmaXhlcyBmb3IgYSBjb3VwbGUgb2YgcG90ZW50aWFsIHNlY3VyaXR5IHByb2JsZW1zCgkqIHRyZWUuYyB2YWxpZC5jIHhtbGxpbnQuYzogbW9yZSBmaXhlcyBvbiB0aGUgc3RyaW5nIGludGVybmluZyBjaGVja3MKClR1ZSBPY3QgMjYgMTg6MDk6NTkgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogYWRkZWQgY2hlY2tpbmcgZm9yIG5hbWVzCgkgIHZhbHVlcyBhbmQgZGljdGlvbm5hcmllcyBnZW5lcmF0ZXMgYSB0b25zIG9mIGVycm9ycwoJKiBTQVgyLmNjYXRhbG9nLmMgcGFyc2VyLmMgcmVsYXhuZy5jIHRyZWUuYyB4aW5jbHVkZS5jIHhtbHdyaXRlci5jCgkgIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogZml4aW5nIHRoZSBlcnJvcnMgaW4gdGhlIHJlZ3Jlc3Npb24gdGVzdHMKCk1vbiBPY3QgMjUgMTY6MDQ6MjIgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBwYXJzZXIuYzogbW9kaWZpZWQgdGhlIGhhbmRsaW5nIG9mIF9wcml2YXRlIGZvciBlbnRpdHkKCSAgZXhwYW5zaW9uIChidWcgMTU1ODE2KQoKTW9uIE9jdCAyNSAxNzoxMTozNyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIHRoZSBsZWFrIHJlcG9ydGVkIGJ5IFZvbGtlciBSb3RoIG9uIHRoZSBsaXN0CgkqIHRlc3QvZW50MTAgcmVzdWx0Ly9lbnQxMCo6IGFkZGVkIGEgc3BlY2lmaWMgdGVzdCBmb3IgdGhlIHByb2JsZW0KClNhdCBPY3QgMjMgMTE6MDc6NDEgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB2YWxpZC5jOiB1bmxpbmtlZCB0aGUgaW50ZXJuYWwgc3Vic2V0IHdpdGhpbiB4bWxWYWxpZGF0ZUR0ZAoJICAoYnVnIDE0MTgyNykKCSogY29uZmlndXJlLmluOiBhZGRlZCAtV2FsbCB0byBkZXZlbG9wZXIncyBmbGFncwoJKiBkb2MvZXhhbXBsZXMvcmVhZGVyNC5yZXM6IGFkZGVkIHRvIENWUwoKRnJpIE9jdCAyMiAxNjozNjo1MCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBhZGRlZCBzdXBwb3J0IGZvciBIVE1MIFBJcyAjMTU2MDg3CgkqIHRlc3QvSFRNTC9weXRob24uaHRtbCByZXN1bHQvSFRNTC9weXRob24uaHRtbCo6IGFkZGVkIHNwZWNpZmljIHRlc3RzCgpGcmkgT2N0IDIyIDE1OjIwOjIzIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0aHJlYWRzLmM6IGZpeGVkIG5hc3R5IGJ1ZyAjMTU2MDg3CgpGcmkgT2N0IDIyIDIxOjA0OjIwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmM6IGZpeGVkIGEgcHJvYmxlbSBvY2N1cmluZyBvbmx5IGluIHg4Nl82NCB3aGVuCgkgIHZlcnkgbGFyZ2UgZXJyb3IgbWVzc2FnZXMgYXJlIHJhaXNlZCB0byB0aGUgUHl0aG9uIGhhbmRsZXJzLgoKVGh1IE9jdCAyMSAxODowMzoyMSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBmaXhlZCBhIG1lbW9yeSBidWcKCSogZG9jL2V4YW1wbGVzL3JlYWRlcjQuYyBkb2MvZXhhbXBsZXMvKjogYWRkZWQgdGVzdCBmcm9tIEdyYWhhbSBCZW5uZXR0CgkgIGFuZCByZWdlbmVyYXRlZCB0aGUgZGlyZWN0b3J5CgpUdWUgT2N0IDE5IDExOjA2OjM5IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaCB4bWxyZWFkZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tCgkgIEdyYWhhbSBCZW5uZXR0IGFkZGluZyA0IGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byB0aGUgcmVhZGVyIEFQSS4KCkZyaSBPY3QgMTUgMTE6MjI6NDggUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkZWJ1Z1hNTC5jOiBleGNsdWRlZCBhIGZldyBub2RlcyAod2l0aCBubyBjb250ZW50KSBmcm9tIHRoZQoJICBzdHJpbmcgY2hlY2sgcm91dGluZS4KCkZyaSBPY3QgMTUgMTA6NDg6MzAgRURUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBhZGRlZCBVVEYtOCBzdHJpbmcgY2hlY2tpbmcsCgkgIHJhaXNlIGEgcHJvYmxlbSwgbmVlZCBkZWJ1ZwoKV2VkIE9jdCAxMyAwMjoxNzozNiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBhcHBsaWVkIHBhdGNoIGZyb20gVGhvbWFzIEZpdHpzaW1tb25zIGZpeGluZwoJICAjMTU1MjQwIGJ1aWxkaW5nIG91dHNpZGUgdGhlIHNvdXJjZSB0cmVlLiBidXQgbWFrZSB0ZXN0cyBmYWlscy4KCk1vbiBPY3QgMTEgMTY6MjY6NTEgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogYWRkZWQgbmFtZXNwYWNlIGNoZWNraW5nCgpTYXQgT2N0ICA5IDIyOjM2OjIxIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBzb21lIGZyYW1ld29yayBwcmVwYXJhdGlvbiB0byBhZGQgbmFtZXNwYWNlIGNoZWNraW5ncwoKVGh1IE9jdCAgNyAxNToxMjo1OCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYyBpbmNsdWRlL2xpYnhtbC9kZWJ1Z1hNTC5oIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6CgkgIGFkZGluZyB0aGUgdHJlZSBkZWJ1ZyBtb2RlCgkqIHBhcnNlci5jIHJlbGF4bmcuYyB0cmVlLmMgeHBhdGguYzogZml4aW5nIHZhcmlvdXMgcHJvYmxlbXMgcmVwb3J0ZWQKCSAgYnkgdGhlIGRlYnVnIG1vZGUuCgkqIFNBWDIuYzogYW5vdGhlciB0cmVlIGZpeCBmcm9tIFJvYiBSaWNoYXJkcwoKV2VkIE9jdCAgNiAxMDo1MDowMyBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGNhdGFsb2cuYzogc21hbGwgY2hhbmdlIHRvIGxhc3QgZml4LCB0byBnZXQgeG1sOmJhc2UgcmlnaHQKCldlZCBPY3QgIDYgMDk6MzM6NTEgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBjYXRhbG9nLmM6IGFkZGVkIGNvZGUgdG8gaGFuZGxlIDxncm91cD4sIGluY2x1ZGluZyBkdW1waW5nCgkgIHRvIG91dHB1dCAoYnVnIDE1MTkyNCkuCgkqIHhtbGNhdGFsb2cuYywgeG1sc3RyaW5nLmMsIHBhcnNlci5jOiBtaW5vciBjb21waWxlciB3YXJuaW5nIAoJICBjbGVhbnVwIChubyBjaGFuZ2UgdG8gbG9naWMpCgkgIApNb24gT2N0ICA0IDE2OjA5OjA3IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gZGVidWdYTUwuYyBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4KCSAgaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmguaW46IHJldmFtcGVkIHRoZSBYTUwgZGVidWdnaW5nCgkgIG1vZHVsZSBhbmQgcHJlcGFyZSBmb3IgYSBuZXcgY2hlY2tpbmcgbW9kZQoKTW9uIE9jdCAgNCAxMzo1MzoyNCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBNYWxjb2xtIFRyZWRpbm5pY2sgZml4aW5nIGJ1ZyAjMTUyNDI2CgpNb24gT2N0ICA0IDEyOjI2OjI4IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vdGVzdHMvb3V0YnVmLnB5OiAKCSAgYXBwbGllZCBwYXRjaCBmcm9tIE1hbGNvbG0gVHJlZGlubmljayBmaXhpbmcgYnVnICMxNTQyOTQKCSAgcmVsYXRlZCB0byBzYXZpbmcgdG8gcHl0aG9uIGZpbGUgb2JqZWN0cy4KClNhdCBPY3QgIDIgMjE6MDg6NTEgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB0cmVlLmM6IGNoYW5nZWQgeG1sSGFzTnNQcm9wIHRvIHByb3Blcmx5IGhhbmRsZSBhIHJlcXVlc3QgZm9yCgkgIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSAoYnVnIDE1MzU1NykKClNhdCBPY3QgIDIgMTg6MTg6MjcgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBwYXJzZXIuYzogZml4ZWQgcHJvYmxlbSB3aXRoIGRpY3Rpb25hcnkgaGFuZGxpbmcgd2l0aGluCgkgIHhtbFBhcnNlSW5Ob2RlQ29udGV4dCAoYnVnIDE1MzE3NSkKClNhdCBPY3QgIDIgMTU6NDY6MzcgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBjaGVjay1yZWxheG5nLXRlc3Qtc3VpdGUucHksIGNoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZTIucHksCgkgIGNoZWNrLXhpbmNsdWRlLXRlc3Qtc3VpdGUucHksIGNoZWNrLXhtbC10ZXN0LXN1aXRlLnB5LAoJICBjaGVjay14c2RkYXRhLXRlc3Qtc3VpdGUucHksIGRvYy9leGFtcGxlcy9pbmRleC5weTogY2hhbmdlZAoJICBjaGFuZ2VkIHN5cy5wYXRoIHNldHRpbmcgZnJvbSAnYXBwZW5kJyB0byAnaW5zZXJ0JyAocGF0Y2gKCSAgc3VwcGxpZWQgYnkgTWFsY29sbSBUcmVkaW5uaWNrKSAoYnVnIDE1MzcxNikKClNhdCBPY3QgIDIgMTU6MDM6MTQgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaDogYWRkZWQgdHdvIG5ldyBtYWNyb3MKCSAgSVNfQVNDSUlfTEVUVEVSIGFuZCBJU19BU0NJSV9ESUdJVCB1c2VkIHdpdGggKGh0bWwpCgkgIHBhcnNpbmcgYW5kIHhwYXRoIGZvciB0ZXN0aW5nIGRhdGEgbm90IG5lY2Vzc2FyaWx5CgkgIHVuaWNvZGUuCgkqIEhUTUxwYXJzZXIuYywgeHBhdGguYzogY2hhbmdlZCB1c2Ugb2YgSVNfTEVUVEVSX0NIIGFuZAoJICBJU19ESUdJVF9DSCBtYWNyb3MgdG8gYXNjaWkgdmVyc2lvbnMgKGJ1ZyAxNTM5MzYpLgoJICAKRnJpIE9jdCAgMSAyMDozNzoyNSBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGVycm9yLmM6IGFkZGVkIHNvbWUgY29kaW5nIHRvIGF0dGVtcHQgdG8gZGlzcGxheSB3aGljaCBmaWxlCgkgIGNvbnRhaW5zIGFuIGVycm9yIHdoZW4gdXNpbmcgWEluY2x1ZGUgKGJ1ZyAxNTI2MjMpCgpUaHUgU2VwIDMwIDExOjE5OjE3IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHN0dXBpZCBjdXQnbiBwYXN0ZSBidWcgaW4geG1sbGludCBkZXRlY3Rpb24KCldlZCBTZXAgMjkgMTc6NDc6NTYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MvKjogcmVsZWFzaW5nIDIuNi4xNCwgcmVidWlsZGluZyB0aGUgZG9jcwoJICAKV2VkIFNlcCAyOSAxNTowMDoxMSBDRVNUIDIwMDQgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmggaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hcy5oCgkgIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaDogUGFyc2luZyBvZiA8Y29tcGxleENvbnRlbnQ+CgkgIC0gaGFuZGxlIGF0dHJpYnV0ZSAnbWl4ZWQnLCBjYXRjaCBpbGxlZ2FsIGF0dHJpYnV0ZXMuCgkgIFBhcnNpbmcgb2YgPGNvbXBsZXhUeXBlPiAtIGhhbmRsZSBhdHRyaWJ1dGVzICdhYnN0cmFjdCcsCgkgICdmaW5hbCcgYW5kICdibG9jaycsIGNhdGNoIGlsbGVnYWwgYXR0cmlidXRlcy4KCSAgVmFsaWRhdGlvbiBvZiBjb21wbGV4IHR5cGVzIC0gaGFuZGxlIGFic3RyYWN0IHR5cGVzLgoJICBBZGRlZCBoYW5kbGluZyBvZiBkZWZhdWx0L2ZpeGVkIGF0dHJpYnV0ZXMgYW5kIGVsZW1lbnQgdmFsdWVzLgoJICBQZXIgdmFsaWRhdGlvbiBvcHRpb24gYXR0cmlidXRlIG5vZGVzL3RleHQgbm9kZXMgYXJlIGNyZWF0ZWQKCSAgb24gdGhlIGluc3RhbmNlLgoJICBBZGRlZCB0aGUgY29ycmVzcG9uZGluZyBjb25zdHJhaW50cyBmb3IgZml4ZWQvZGVmYXVsdC4KCSAgQWRkZWQgeG1sU2NoZW1hU2V0VmFsaWRPcHRpb25zLCB4bWxTY2hlbWFHZXRWYWxpZE9wdGlvbnMKCSAgdG8gdGhlIGV4dGVybmFsIEFQSS4KCSAgRXh0ZW5kZWQgZWxlbWVudCBkZWNsYXJhdGlvbiBjb25zdHJhaW50cy4gIAoJICBHb3QgcmlkIG9mIHBlcnNldmVyYXRpdmUgY3JlYXRpb24gb2YgdGVtcG9yZXJ5IHZhbGlkYXRpb24vcGFyc2VyIAoJICBjb250ZXh0cy4KCSAgQWRkZWQgaGFuZGxpbmcgb2YgeHNpOnNjaGVtYUxvY2F0aW9uIGFuZAoJICB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbi4KCSAgRml4ZWQgeHNpOnR5cGUgY29tcG9uZW50IHJlc29sdXRpb24gaWYgdXNpbmcgbm9uLXByZWZpeGVkCgkgIFFOYW1lcy4KCSogeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3htbGF1dG9tYXRhLmg6CgkgIEVuYWJsZWQgbmFtZXNwYWNlIGF3YXJlbmVzcyBvZiB0aGUgY29udGVudCBtb2RlbCBpZiB1c2luZyB0aGUKCSAgbW9kZWwgZ3JvdXAgImFsbCIuCgkqIHRlc3Qvc2NoZW1hcy9idWcxNTI0NzBfMS54c2Q6IFJlbW92ZWQgYW4gImFic3RyYWN0IiBhdHRyaWJ1dGUsCgkgIHdoaWNoIGJyb2tlIHRoZSB0ZXN0LgoJKiB4c3RjL3hzdGMucHk6ICBXb3JrYXJvdW5kIHRvIGFjY29tb2RhdGUgY2FzZSBpbnNlbnNpdGl2ZQoJICB0ZXN0IGRlZmluaXRpb25zIGluIG1zLXRlc3QuZGVmLnhtbCAod2FzIG1pc3NpbmcgaW4gYSBwcmV2aW91cwoJICBjb21taXQpLgoKV2VkIFNlcCAyOSAxMTowMzoxMCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2Rydl9saWJ4bWwyLnB5OiBhbm90aGVyIHBhdGNoIGZyb20gTWFsY29sbSBUcmVkaW5uaWNrCgkgIGFkZGluZyBvcHRpb24gbm90IHRvIGxvYWQgZHRkIGZyb20gdGhlIGRydl9saWJ4bWwyLnB5IG1vZHVsZQoJICAjMTM0NjMzCgpUdWUgU2VwIDI4IDE0OjMwOjIyIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBhY2NvbmZpZy5oIGNvbmZpZy5oLmluIGNvbmZpZ3VyZS5pbiB4bWxJTy5jIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYwoJICB4bWxzY2hlbWFzdHlwZXMuYzogYW5vdGhlciBwYXRjaCBmcm9tIE1hbGNvbG0gVHJlZGlubmljayBmaXhpbmcKCSAgd2FybmluZyBnZW5lcmF0ZWQgYnkgdGhlIE5vbnN0b3AgS2VybmVsIE9wZW4gU3lzdGVtIFNlcnZpY2VzIAoJICBjb21waWxlciAjMTUxNzEwCgpUdWUgU2VwIDI4IDEzOjA3OjM3IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLnB5OiBhcHBsaWVkIHBhdGNoIGZyb20gTWFsY29sbSBUcmVkaW5uaWNrIGZpeGluZwoJICBweXRob24gZXhjZXB0aW9uIGhpZXJhcmNoeSAjMTM5ODI0CgpTdW4gU2VwIDI2IDE2OjQwOjI0IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIFRPRE86IGFwcGxpZWQgcGF0Y2ggZnJvbSBNYWxjb2xtIFRyZWRpbm5pY2sgZml4aW5nIGVycmF0YQoJICBFMjAgY29uY2VybmluZyBOTVRPS0VOUyBhbmQgY28uIHZhbGlkYXRpb24gIzE1MzcyMgoJKiByZXN1bHQvVkMvQXR0cmlidXRlTm10b2tlbnMgdGVzdC9WQy9BdHRyaWJ1dGVObXRva2VucwoJICB0ZXN0L1ZDTS9BdHRyaWJ1dGVObXRva2Vucy54bWw6IGFsc28gYWRkZWQgdGVzdHMgZnJvbSBNYWxjb2xtCgpTdW4gU2VwIDI2IDE2OjI0OjQ0IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4c3RjL3hzdGMucHk6IGFwcGxpZWQgcGF0Y2ggZnJvbSBNYWxjb2xtIFRyZWRpbm5pY2sgZml4aW5nIHNwYWNlL3RhYnMKCSAgIzE1MzcxMwoJKiB4cGF0aC5jOiBmaXhlZCBhIHJlYWxsb2MgcG90ZW50aWFsIHByb2JsZW0KCkZyaSBTZXAgMjQgMTY6MTQ6MTIgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBmaXhlZCBtYWtlIHZhbGdyaW5kIHhzdGMgCgpUaHUgU2VwIDIzIDE4OjIzOjQ2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogZml4aW5nIGFuIG91dCBvZiBib3VuZCBhZHJlc3NpbmcgaXNzdWUKClRodSBTZXAgMjMgMTU6MTQ6MTIgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyBwYXJzZXIuYyByZWxheG5nLmMgeG1sc2NoZW1hcy5jOiBtb3JlIG1lbW9yeSByZWxhdGVkCgkgIGNvZGUgY2xlYW51cHMuCgpUaHUgU2VwIDIzIDAxOjA0OjMwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBidW5jaCBvZiBlcnJvcnMgd2hlbiByZWFsbG9jIGZhaWxlZC4KCldlZCBTZXAgMjIgMjM6NTY6MDUgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRocmVhZHMuYyB1cmkuYzogY291cGxlIG9mIG1lbW9yeSBmaXhlcyBmcm9tIE1hcmsgVmFrb2MgcmVwb3J0ZWQKCSAgYnkgUHVyaWZ5IG9uIFdpbmRvd3MuCgpNb24gU2VwIDIwIDIyOjAxOjQ3IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFkZGVkIC0tdGltaW5nIC0tY29weSB0aW1pbmcgZm9yIHRoZSBjb3B5CgkqIHZtcy9idWlsZF9saWJ4bWwuY29tOiBhcHBsaWVkIHBhdGNoIGZyb20gQ3JhaWcgQmVycnkKCSAgdG8gYnVpbGQgd2l0aCByZWNlbnQgcmVsZWFzZXMKCkZyaSBTZXAgMTcgMjE6MjU6MzMgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBuYW5vaHR0cC5jLCBpbmNsdWRlL2xpYnhtbC9uYW5vaHR0cC5oOiBhZGRlZCB0aGUgcm91dGluZQoJICB4bWxOYW5vSFRUUENvbnRlbnRMZW5ndGggdG8gdGhlIGV4dGVybmFsIEFQSSAoYnVnMTUxOTY4KS4KCSogcGFyc2VyLmM6IGZpeGVkIHVubmVjZXNzYXJ5IGludGVybmFsIGVycm9yIG1lc3NhZ2UgKGJ1ZzE1MjA2MCk7CgkgIGFsc28gY2hhbmdlZCBjYWxsIHRvIHN0cm5jbXAgb3ZlciB0byB4bWxTdHJuY21wLgoJKiBlbmNvZGluZy5jOiBmaXhlZCBjb21waWxhdGlvbiB3YXJuaW5nIChidWcxNTIzMDcpLgoJKiB0cmVlLmM6IGZpeGVkIHNlZ2ZhdWx0IGluIHhtbENvcHlQcm9wTGlzdCAoYnVnMTUyMzY4KTsgZml4ZWQKCSAgYSBjb3VwbGUgb2YgY29tcGlsYXRpb24gd2FybmluZ3MuCgkqIEhUTUx0cmVlLmMsIGRlYnVnWE1MLmMsIHhtbG1lbW9yeS5jOiBmaXhlZCBhIGZldyBjb21waWxhdGlvbgoJICB3YXJuaW5nczsgbm8gY2hhbmdlIHRvIGxvZ2ljLgoKRnJpIFNlcCAxNyAxMDo0MDoyMyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHJlbW92ZWQgc29tZSBleHRlcm4gYmVmb3JlIGZ1bmN0aW9uIGNvZGUgcmVwb3J0ZWQgYnkKCSAgS2phcnRhbiBNYXJhYXMgb24gSVJDCgkqIGxlZ2FjeS5jOiBmaXhlZCBjb21waWxpbmcgd2hlbiBjb25maWd1cmluZyBvdXQgdGhlIEhUTUwgcGFyc2VyCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBhIGRlY2xhcmF0aW9uIGZvciBDVlNfRVhUUkFfRElTVAoJKiBIVE1McGFyc2VyLmM6IGJlZ2lubmluZyBvZiBhbiBhdHRlbXB0IGF0IGNsZWFuaW5nIHVwIHRoZSBjb25zdHJ1Y3Rpb24KCSAgb2YgdGhlIEhUTUwgcGFyc2VyIGRhdGEgc3RydWN0dXJlcywgY3VycmVudCBkYXRhIGdlbmVyYXRlIGEgaHVnZQoJICBhbW91bnQgb2YgRUxGIHJlbG9jYXRpb25zIGF0IGxvYWRpbmcgdGltZS4KCkZyaSBTZXAgMTcgMTA6MzY6MjMgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIENoYW5nZUxvZzogYXBwbGllZCBmaXggZnJvbSBTdGVwYW4gS2FzYWwgdG8gZml4IGR1cGxpY2F0aW9uCgkgIGluIHRoZSBjaGFuZ2UgbG9nIGFuZCBjbGVhbnVwIG9mIHNwYWNlL3RhYnMgaXNzdWVzLgoKVGh1IFNlcCAxNiAxMzoyNDoyNyBDRVNUIDIwMDQgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaCAKCSAgdGVzdC9zY2hlbWFzL2J1ZzE1MjQ3MF8xLiogcmVzdWx0L3NjaGVtYXMvYnVnMTUyNDcwXzFfMSo6IAoJICBTaW1waWZpZWQgYXR0cmlidXRlIHdpbGRjYXJkIGNyZWF0aW9uIGFuZCBhc3NpZ25tZW50IHRvIGdldCByaWQgCgkgIG9mIG1lbW9yeSBsZWFrcy4KCSAgUmVzdHJ1Y3R1cmVkIHRoZSB2YWxpZGF0aW9uIHByb2Nlc3MuCgkgIFJlc3RydWN0dXJlZCBhbmQgZXhwYW5kZWQgcGFyc2luZyBvZiA8YXR0cmlidXRlR3JvdXA+LgoJICBBZGRlZCBpbml0aWFsIGhhbmRpbmcgb2YgeHNpOnR5cGUuCgkgIEFkdmFuY2VkIGhhbmRsaW5nIG9mIHhzaTpuaWwgKHNob3VsZCB3b3JrIG5vdyBmb3Igc2ltcGxlIHR5cGVzKS4KCSAgQWRkZWQgY29uc3RydWN0aW9uIG9mIHNjaGVtYXRhIHVzaW5nIHhzaTpzY2hlbWFMb2NhdGlvbiBhbmQgCgkgIHhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uOyB0aGlzIGlzIG5vdCBlbmFibGVkLCBzaW5jZSAKCSAgbm8gY29ycmVzcG9uZGluZyBBUEkgZXhpc3RzIHlldC4KCSAgTW92ZWQgdGhlIGNvbnRlbnQgbW9kZWwgdG8gY29tcGxleCB0eXBlIGNvbXBvbmVudHMuCgkgIFJlc29sdXRpb24gb2YgdHlwZXMgZm9yIGF0dHJpYnV0ZXMgd2lsbCBsb29rIGZvciBzaW1wbGUgdHlwZXMKCSAgb25seSAoaW5jbC4gYWxsIHRoZSBidWlsdC1pbiBzaW1wbGUgdHlwZXMpLgoJICBFeHRlbmRlZCBwYXJzaW5nIG9mICdhbnlBdHRyaWJ1dGUnLgoJICBGaXhlZCBjb250ZW50LXR5cGUgdHlwZSBmb3IgY29tcGxleCB0eXBlcyBpZiBkZXJpdmVkIGZyb20gCgkgICdhbnlUeXBlJyB1c2luZyB0aGUgc2hvcnQtaGFuZCBmb3JtIChzZWUgYnVnICMgMTUyNDcwLAoJICBzdWJtaXR0ZWQgYnkgVGhpbG8gSmVyZW1pYXMpLgoJKiBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWF0eXBlcy5oOiBDbGVhbmVkIHVwIHNvbWUgY29tbWVudHMuCgkqIHhzdGMveHN0Yy5weTogV29ya2Fyb3VuZCB0byBhY2NvbW9kYXRlIGNhc2UgaW5zZW5zaXRpdmUKCSAgdGVzdCBkZWZpbml0aW9ucyBpbiBtcy10ZXN0LmRlZi54bWwuCgkqIHJlc3VsdC9zY2hlbWFzL2RldGVyMF8wXzAuZXJyIHJlc3VsdC9zY2hlbWFzL25zMF8wXzIuZXJyCgkgIHJlc3VsdC9zY2hlbWFzL25zMF8xXzIuZXJyOiBBZGFwdGVkLgoKU2F0IFNlcCAxMSAwOTowNDoyMiBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHdyaXRlci5jOiBjaGFuZ2VkIGNoYXIgYXJyYXkgaW5pdGlhbGlzYXRpb24gdG8gYXZvaWQgYQoJICBjb21wbGFpbnQgZnJvbSBzb21lIGNvbXBpbGVyKHMpIChidWcgMTUyMzA4KQoKVGh1IFNlcCAgOSAwNzoyMjoxMSBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGVuY29kaW5nLmM6IGFwcGxpZWQgZml4ZXMgZm9yIHRoZSBVVEY4VG9JU084ODU5eCB0cmFuc2NvZGluZwoJICByb3V0aW5lIHN1Z2dlc3RlZCBieSBNYXJrIEl0emNvdml0egoKV2VkIFNlcCAgOCAyMjo1MDoyNyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyB4bWxzYXZlLmM6IGZpeGVkIDIgcHJvYmxlbXMgcmFpc2VkIGJ5ICMxNTIxNDAsIG9uZQoJICB3aGljaCBpcyB0aGF0IG5vdGF0aW9uIG5vdCBpbiB0aGUgaW50ZXJuYWwgc3Vic2V0IHNob3VsZAoJICBub3QgYmUgc2F2ZWQsIGFuZCB0aGUgc2Vjb25kIG1vcmUgbmFzdHkgb24gYW4gZXJyb3Igc2F2aW5nCgkgIE5PVEFUSU9OcywgaWYgdGhlcmUgaXMgYSBwcm9vZiB0aGF0IG5vYm9keSB1c2VzIG5vdGF0aW9ucyAhCgpXZWQgU2VwICA4IDExOjA0OjI3IENFU1QgMjAwNCBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hcy5oOiBBZGRlZCB0aGUgZnVuY3Rpb24KCSAgeG1sU2NoZW1hVmFsaWRhdGVPbmVFbGVtZW50IHRvIHRoZSBYTUwgU2NoZW1hIHZhbGlkYXRpb24gQVBJLCAKCSAgYXMgcHJvcG9zZWQgYnkgSmVmZnJleSBGaW5rIC0gc2VlIGJ1ZyAjIDE1MjA3My4KClR1ZSBTZXAgIDcgMTE6MTA6MzYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MvTWFrZWZpbGUuYW0geHN0Yy9NYWtlZmlsZS5hbTogc29tZSBjbGVhbnVwCgkgIGNoZWNraW5nIGZvciB4bWxsaW50IGFuZCB4c2x0cHJvYyBpbiBjb25maWd1cmUuaW4sIGZpeGVkCgkgIG1ha2UgZGlzdCB3LnIudC4gdGhlIG5ldyB4c3RjIHN1YmRpci4KCSogZG9jLyo6IHJlYnVpbHQKCk1vbiBTZXAgIDYgMTY6NDI6NTkgQ0VTVCAyMDA0IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhzdGMveHN0Yy5weTogQ2hhbmdlZCB0byBmaW5hbGx5IHZhbGlkYXRlIGluc3RhbmNlIGRvY3VtZW50cy4KCk1vbiBTZXAgIDYgMTY6MDQ6MDEgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhzdGMvTWFrZWZpbGUuYW0gTWFrZWZpbGUuYW06IGludGVncmF0ZWQgdG8gIm1ha2UgdmFsZ3JpbmQiLAoJICBoZWF2eSAuLi4gd2VpZ2h0IDI1ME1CIG9mIFZNICEKCk1vbiBTZXAgIDYgMTQ6NTQ6MzkgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhzdGMvTWFrZWZpbGUuYW0geHN0Yy94c3RjLXRvLXB5dGhvbi54c2wgeHN0Yy94c3RjLnB5IE1ha2VmaWxlLmFtOgoJICBtb3JlIGNsZWFudXAgaW4gaW50ZWdyYXRpbmcgdGhlIHhzdGMgdGVzdHN1aXRlCgpNb24gU2VwICA2IDEzOjU2OjI4IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4geHN0Yy8uY3ZzaWdub3JlIHhzdGMvTWFrZWZpbGUuYW06CgkgIHN0YXJ0aW5nIHRvIGludGVncmF0ZSB0aGUgeHN0YyBzdWl0ZSBpbiB0aGUgbm9ybWFsIHJlZ3Jlc3Npb24KCSAgdGVzdHMKCk1vbiBTZXAgIDYgMTM6MTQ6MTEgQ0VTVCAyMDA0IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhzdGMvc3VuLXRlc3QtZGVmLnhtbDogVGhlICJ0c0RpciIgYXR0cmlidXRlIHdhcyBub3QKCSAgc2V0IGNvcnJlY3RseS4KCk1vbiBTZXAgIDYgMTE6NTI6NTAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXhpbmNsdWRlLXRlc3Qtc3VpdGUucHk6IHdoZW4gb3V0cHV0IGFuZCBleHBlY3RlZCBkbyBub3QgbWF0Y2gKCSAgZXhhY3RseSBydW4gZGlmZiB0byBwdXQgdGhlIGRpZmZlcmVuY2VzIGluIHRoZSBsb2cgYy5mLiAjMTQ4NjkxCgpNb24gU2VwICA2IDExOjE3OjM1IENFU1QgMjAwNCBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4c3RjL3hzdGMtdG8tcHl0aG9uLnhzbHQgeHN0Yy9tcy10ZXN0LWRlZi54bWwgeHN0Yy9uaXN0LXRlc3QtZGVmLnhtbAoJICB4c3RjL3N1bi10ZXN0LWRlZi54bWw6IEluaXRpYWwgcmVsZWFzZSBvZiBnZW5lcmF0aW9uIGZpbGVzIHRvIAoJICBjcmVhdGUgcHl0aG9uIHRlc3Qgc2NyaXB0cywgd2hpY2ggd2lsbCBydW4gdGhlIFczQyBYTUwgU2NoZW1hIFRlc3QKCSAgQ29sbGVjdGlvbi4gVGhlIG1zLXRlc3QtZGVmLnhtbCBhbmQgc3VuLXRlc3QtZGVmLnhtbCBmaWxlcwoJICB3ZXJlIGV4dHJhY3RlZCBmcm9tIHRoZSBvbmxpbmUgSFRNTCBYU1RDIHJlc3VsdHMgWzFdLCBzaW5jZSB0aGV5IGRpZAoJICBub3QgZXhpc3QgZm9yIHRoZSBTVU4gdGVzdHMsIGFuZCBvbmx5IHBhcnRpYWxseSBkaWQgZXhpc3QgZm9yIHRoZSAKCSAgTVMgdGVzdHMuIFRoZSBOSVNUIGRlZmluaXRpb24gZmlsZSB3YXMgY3JlYXRlZCBieSBjb25jYXRlbmF0aW9uCgkgIG9mIHRoZSBleGlzdGluZyBkZWZpbml0aW9uIGZpbGVzIGZvciBlYWNoIHNpbmdsZSBkYXRhdHlwZS4KCSAgVGhlIHN0eWxlc2hlZXQgInhzdGMtdG8tcHl0aG9uLnhzbHQiIHNob3VsZCBiZSBydW4gYWdhaW5zdCB0aGUKCSAgZGVmaW5pdGlvbiBmaWxlcyB0byBwcm9kdWNlIHRoZSBweXRob24gc2NyaXB0cy4KCSAgWzFdICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMjAwMS8wNS94bWxzY2hlbWEtdGVzdC1jb2xsZWN0aW9uLwoJICByZXN1bHRzLW1hc3Rlci5odG1sIgoKRnJpIFNlcCAgMyAyMDoyOTo1OSBDRVNUIDIwMDQgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBGaXhlZCBhIHNlZyBmYXVsdCBpbiB4bWxHZXRRTmFtZVByb3A6CgkgIGEgZm9ybWF0IGFyZ3VtZW50IHdhcyBtaXNzaW5nLgoJICBGaXhlZCB3cm9uZyBhc3NpZ25tZW50IG9mIHRoZSBvd25lciBvZiBhIHdpbGRjYXJkIGluCgkgIHhtbFNjaGVtYUJ1aWxkQXR0cmlidXRlVmFsaWRhdGlvbiAoaW4gdGhlIHNob3J0aGFuZGZvcm0gb2YKCSAgPGNvbXBsZXhUeXBlPjsgdGhpcyBjYXVzZWQgYSBzZWcgZmF1bHQsIGR1ZSB0byBhIGRvdWJsZS1mcmVlCgkgIG9mIHRoZSB3aWxkY2FyZC4KCSAgQWRkZWQgYSBjaGVjayBmb3IgY2lyY3VsYXIgYXR0cmlidXRlIGdyb3VwIHJlZmVyZW5jZXMuCgkgIEFkZGVkIGEgY2hlY2sgZm9yIGNpcmN1bGFyIG1vZGVsIGdyb3VwIGRlZmluaXRpb24gcmVmZXJlbmNlcy4KCSAgRml4ZWQgYSBkdWJsaWNhdGUgeG1sUGFyc2VyRXJyb3JzIGVudW0gdmFsdWUgLSBzZWUgYnVnICMxNTE3MzguCgpGcmkgU2VwICAzIDEwOjA4OjEzIFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW1tLmNvbS5oaz4KCgkqIHhtbHN0cmluZy5jOiBtb2RpZmllZCBjb21tZW50cyBvbiB4bWxHZXRVVEY4Q2hhciBpbgoJICByZXNwb25zZSB0byBidWcgMTUxNzYwIChubyBjaGFuZ2UgdG8gbG9naWMpCgpUdWUgQXVnIDMxIDA5OjQ2OjE4IFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sc3RyaW5nLmM6IGZpeGVkIGVycm9yIHJlcG9ydGVkIG9uIHRoZSBsaXN0IGNhdXNlZCBieQoJICBteSBsYXN0IGNoYW5nZQoKVHVlIEF1ZyAzMSAxNTo0MTo1MiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTkVXUyBjb25maWd1cmUuaW4gZG9jLyo6IHJlbGVhc2Ugb2YgbGlieG1sMi0yLjYuMTMKClR1ZSBBdWcgMzEgMTQ6MTQ6MzAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGZpeGluZyAjMTUxNDU2LCBhbiBlbmNvZGluZyBlcnJvciBjb3VsZCBnZW5lcmF0ZQoJICBhIHNlcmlhbGl6YXRpb24gbG9vcC4KClR1ZSBBdWcgMzEgMTE6MzQ6MDQgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBhbHNvIHByb2R1Y2UgYSB0YXIgYmFsbCB3aXRoIGp1c3QgdGhlIHNvdXJjZXMKCSogeG1sbGludC5jOiBhZGRlZCAtLXBhdGggb3B0aW9uIGFuZCAtLWxvYWQtdHJhY2Ugb3B0aW9ucyB0bwoJICB4bWxsaW50LCBSRkUgIzE0Nzc0MCBiYXNlZCBvbiB4c2x0cHJvYyB2ZXJzaW9ucwoJKiBkb2MveG1sbGludC4qIGRvYy8qOiB1cGRhdGVkIHRoZSBtYW4gcGFnZSBhbmQgcmVidWlsdAoKVHVlIEF1ZyAzMSAxMDozNzoyMyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6ICIiIGlzIGEgdmFsaWQgaGV4YmluYXJ5IHN0cmluZyBkaXhpdCB4bWxzY2hlbWEtZGV2CgkqIHJlc3VsdC9zY2hlbWFzL2hleGJpbmFyeV8wXzEuZXJyIHRlc3Qvc2NoZW1hcy9oZXhiaW5hcnlfMS54bWw6IAoJICB1cGRhdGUgdGhlIHRlc3QuCgkqIHRlc3QvbnM1IHJlc3VsdC8vbnM1KjogYWRkZWQgYSB0ZXN0IGZvciB0aGUgbmFtZXNwYWNlIGJ1ZyBmaXhlZAoJICBpbiBwcmV2aW91cyBjb21taXQuCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBhIG1lc3NhZ2UgaW4gdGhlIHJlZ3Jlc3Npb24gdGVzdHMKCk1vbiBBdWcgMzAgMjM6MzY6MjEgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBTQVgyLmM6IGZpeGVkIGJ1ZyBpbnRyb2R1Y2VkIGR1cmluZyBPT00gZml4dXAgY2F1c2luZyBwcm9ibGVtcwoJICB3aXRoIGRlZmF1bHQgbmFtZXNwYWNlIHdoZW4gYSBuYW1lZCBwcmVmaXggd2l0aCB0aGUgc2FtZSBocmVmCgkgIHdhcyBwcmVzZW50IChyZXBvcnRlZCBvbiB0aGUgbWFpbGluZyBsaXN0IGJ5IEthcmwgRWljaHdhbGRlci4KCSogeG1sc3RyaW5nLmM6IG1vZGlmaWVkIHhtbENoZWNrVVRGOCB3aXRoIHN1Z2dlc3RlZCBjb2RlIGZyb20KCSAgSnVsaXVzIE1pdHRlbnp3ZWkuCgkqIGRpY3QuYzogYWRkZWQgYSB0eXBlY2FzdCB0byB0cnkgdG8gYXZvaWQgcHJvYmxlbSByZXBvcnRlZCBieQoJICBQYXNjYWwgUm9kZXMuCgpNb24gQXVnIDMwIDEyOjQ1OjQ2IENFU1QgMjAwNCBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEZpeGVkIGEgYnVnIGluIHhtbFNjaGVtYXNDaGVja0ZhY2V0LCB3aGljaCBkaWQKCSAgbm90IGNyZWF0ZSBhIGNvbXB1dGVkIHZhbHVlIG9uIGEgZmFjZXQgYW5kIHRodXMgY3Jhc2hlZCBkdXJpbmcKCSAgdmFsaWRhdGlvbiBvZiBpbnN0YW5jZXMuCgkgIEV4cGFuZGVkIHZhbGlkaXR5IGNoZWNrcyBmb3IgbWluL21heE9jY3VycyBhdHRyaWJ1dGVzLgoJICBFeHBhbmRlZCB2YWxpZGl0eSBjaGVja3MgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlICJmb3JtIi4KCkZyaSBBdWcgMjcgMTg6MzI6MjQgUFNUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxzdHJpbmcuYzogZml4ZWQgYSBwcm9ibGVtIHdpdGggeG1sQ2hlY2tVVEY4IHJlcG9ydGVkIG9uIHRoZQoJICBtYWlsaW5nIGxpc3QgYnkgSnVsaXVzIE1pdHRlbnp3ZWkKCkZyaSBBdWcgMjcgMDA6MTM6MzkgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluOiBhZGRlZCBCdWlsZFJlcXVpcmVzOiAgemxpYi1kZXZlbCwgZml4ZXMKCSAgUmVkIEhhdCBidWcgIzEyNDk0MgoKVGh1IEF1ZyAyNiAxMjoyNzoyMyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHJlbW92ZSBhIHdhcm5pbmcgb24gU29sYXJpcwoJKiB4bWxzY2hlbWFzdHlwZS5jOiBmaXggYSBjcmFzaGluZyBidWcgIzE1MTExMQoKV2VkIEF1ZyAyNSAyMjoyMDoxOCBDRVNUIDIwMDQgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogdGVzdC9zY2hlbWFzL2ltcG9ydC1iYWQtMV8wLmltcDogQWRkZWQgbWlzc2luZyB0ZXN0IGZpbGUuCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaDoKCSAgU3Vic3RpdHV0ZWQgdGhlIG9ic29sZXRlIHhtbFNjaGVtYVZhbGlkRXJyb3IocykgZm9yIHhtbFBhcnNlckVycm9ycwoJICAtIHNlZSAjMTUwODQwLiAKCSAgQ2hhbmdlZCB0aGUgaW1wb3J0IG9mIHNjaGVtYXMgdG8gYWxsb3cgZmFpbHVyZSBvZiBsb2NhdGlvbgoJICBvZiBhIHJlc291cmNlIHRvIGJlIGltcG9ydGVkLgoJKiByZXN1bHQvc2NoZW1hcy9hbGxfKiByZXN1bHQvc2NoZW1hcy9hbnkzXzBfMC5lcnIgCgkgIHJlc3VsdC9zY2hlbWFzL2Nob2ljZV8qIHJlc3VsdC9zY2hlbWFzL2ltcG9ydDFfMF8wLmVycgoJICByZXN1bHQvc2NoZW1hcy9saXN0MF8wXzEuZXJyIHJlc3VsdC9zY2hlbWFzL2xpc3QwXzFfMC5lcnIKCSAgcmVzdWx0L3NjaGVtYXMvbGlzdDBfMV8xLmVyciByZXN1bHQvc2NoZW1hcy9uczBfMF8yLmVycgoJICByZXN1bHQvc2NoZW1hcy9uczBfMV8yLmVycjogQWRhcHRlZCByZWdyZXNzaW9uIHRlc3QgcmVzdWx0cy4KClR1ZSBBdWcgMjQgMjA6NDk6MTUgTURUIDIwMDQgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC54bWwsIHhtbHR1dG9yaWFsLnBkZiwgKi5odG1sCglmaXggWHBhdGggbWVtb3J5IGxlYWsgKHRoYW5rcyB0byBzS2FCb3kgYW5kIFdpbGxpYW0gQnJhY2spCgpUdWUgQXVnIDI0IDIxOjEwOjU5IENFU1QgMjAwNCBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIHBhdGggcHJvYmxlbSBpbiBEVEQgbG9hZGluZyByZXBvcnRlZCBieSAKCSAgU2FtZWVyIEFiaGlua2FyCgpUdWUgQXVnIDI0IDE2OjQwOjUxIENFU1QgMjAwNCBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvY29uZmlndXJlLmpzOiBhZGRlZCBzdXBwb3J0IGZvciB2ZXJzaW9uIGV4dHJhCgkqIHdpbjMyL01ha2VmaWxlLio6IHVwZ3JhZGVkIHRvIHpsaWIgMS4yLjEKCk1vbiBBdWcgMjMgMTQ6MzM6NTQgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcmVtb3ZpbmcgLU8gLWcgZnJvbSBkZWZhdWx0IGdjYyBmbGFncyAjMTUwODI4CgpTdW4gQXVnIDIyIDE2OjI2OjQ2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gZG9jLyogTkVXUzogcHJlcGFyaW5nIDIuNi4xMiByZWxlYXNlLCB1cGRhdGVkIGFuZAoJICBhbmQgcmVidWlsdCB0aGUgZG9jcy4KClN1biBBdWcgMjIgMTY6MDc6MjAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYzogZml4IGEgcHJvYmxlbSBvbiBsYXN0IGNvbW1pdAoKU3VuIEF1ZyAyMiAxNToxNjo1MyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwveHBhdGguaCAKCSAgaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaCBweXRob24vbGlieG1sLmMgCgkgIHB5dGhvbi9saWJ4bWxfd3JhcC5oOiB0cnlpbmcgdG8gcmVtb3ZlIHNvbWUgd2FybmluZyB3aGVuIGNvbXBpbGluZwoJICBvbiBGZWRvcmEgQ29yZSAzIGFuZCA2NGJpdHMKClNhdCBBdWcgMjEgMDowMzU6MTAgQ0VUIDIwMDQgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBtb2RpZmllZCBwYXJzaW5nIG9mIDxsaXN0PiwgPHVuaW9uPiwgPHJlc3RyaWN0aW9uPiwKCSAgPHNlcXVlbmNlPiwgPGNob2ljZT4sIDxpbmNsdWRlPiwgPGltcG9ydD4uCgkgIEZpeGVkIHNjaGVtYSBkZWZhdWx0cyAoZWxlbWVudEZvcm1EZWZhdWx0LCBldGMuKSBmb3IgaW5jbHVkZWQKCSAgc2NoZW1hcy4KCSAgRml4ZWQgYSBidWcgd2hpY2ggcmVwb3J0ZWQgYXR0cmlidXRlcyBhcyBpbnZhbGlkIG9uCgkgIGVsZW1lbnRzIGRlY2xhcmF0aW9ucyB3aXRoIHRoZSBidWlsdC1pbiB0eXBlICdhbnlUeXBlJy4KCSAgQWRkZWQgImxheCIgdmFsaWRhdGlvbiBvZiB0aGUgY29udGVudCBvZiBlbGVtZW50cyBvZiB0eXBlCgkgICdhbnlUeXBlJy4KCSAgRml4ZWQ6IGVsZW1lbnQgZGVjbGFyYXRpb25zIHdpdGggdGhlIHNhbWUgbmFtZSB3ZXJlIHRyZWF0ZWQKCSAgYXMgZHVwbGljYXRlIGlmIGxvY2F0ZWQgaW4gdGhlIHN1YnRyZWUgb2YgPGNob2ljZT4gLT4gPHNlcXVlbmNlPi4KCSAgKFRoaXMgd2FzIGJ1ZyAxNTA2MjMsIHN1Ym1pdHRlZCBieSBSb2xhbmQgTGV6dW8pCgkgIEZpeGVkIGNsZWFudXAgb2YgZXJyb3IgY29kZXMgaW4geG1sU2NoZW1hVmFsaWRhdGVEb2MgYXMgcHJvcG9zZWQKCSAgYnkgSWdvciBLYXBpdGFua2VyLiAoVGhpcyB3YXMgYnVnIDE1MDY0Nywgc3VibWl0dGVkIGJ5IElnb3IKCSAgS2FwaXRhbmtlcikKCSogeG1sc2NoZW1hc3R5cGVzLmM6IENoYW5nZWQgdGhlIHR5cGUgb2YgYW55VHlwZSB0bwoJICBYTUxfU0NIRU1BU19BTllUWVBFLgoJKiBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBBZGRlZCBzY2hlbWEgcGFyc2VyIGVycm9ycy4KCSogcmVzdWx0L3NjaGVtYXMvYnVnMTQ1MjQ2XzBfMCoKCSAgcmVzdWx0L3NjaGVtYXMvZXh0ZW5zaW9uMV8wXzIuZXJyOiBDaGFuZ2VkIHRlc3QgcmVzdWx0cy4KCSogcmVzdWx0L3NjaGVtYXMvY3Qtc2Mtbm9iYXNlXzBfMCoKCSAgcmVzdWx0L3NjaGVtYXMvZmFjZXQtd2hpdGVTcGFjZV8wXzAqCgkgIHJlc3VsdC9zY2hlbWFzL2ltcG9ydDFfMF8wKiByZXN1bHQvc2NoZW1hcy9pbXBvcnQyXzBfMCoKCSAgcmVzdWx0L3NjaGVtYXMvaW5jbHVkZTJfMF8wKiByZXN1bHQvc2NoZW1hcy9pbmNsdWRlM18wXzAqCgkgIHJlc3VsdC9zY2hlbWFzL3Jlc3RyaWN0aW9uLWF0dHIxXzBfMCoKCSAgcmVzdWx0L3NjaGVtYXMvc2VxLWR1YmwtZWxlbTFfMF8wKgoJICByZXN1bHQvc2NoZW1hcy94c2QtbGlzdC1pdGVtVHlwZV8wXzAqOiBBZGRlZCBuZXcgcmVzdCByZXN1bHRzLgoJICB0ZXN0L3NjaGVtYXMvYnVnMTQ1MjQ2LnhzZC5pbXAgdGVzdC9zY2hlbWFzL2N0LXNjLW5vYmFzZV8wKgoJICB0ZXN0L3NjaGVtYXMvZmFjZXQtd2hpdGVTcGFjZV8wKiB0ZXN0L3NjaGVtYXMvaW1wb3J0MV8wKgoJICB0ZXN0L3NjaGVtYXMvaW1wb3J0Ml8wKiB0ZXN0L3NjaGVtYXMvaW5jbHVkZTJfMCoKCSAgdGVzdC9zY2hlbWFzL2luY2x1ZGUzXzAqIHRlc3Qvc2NoZW1hcy9yZXN0cmljdGlvbi1hdHRyMV8wKgoJICB0ZXN0L3NjaGVtYXMvc2VxLWR1YmwtZWxlbTFfMCogdGVzdC9zY2hlbWFzL3htbC54c2QKCSAgdGVzdC9zY2hlbWFzL3hzZC1saXN0LWl0ZW1UeXBlXzAqOiBBZGRlZCBuZXcgdGVzdHMgYW5kIG1pc3NpbmcKCSAgZmlsZXMuICAJICAgICAgCgpGcmkgQXVnIDIwIDE4OjUxOjM2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW46IGEgYml0IG9mIGNsZWFudXAgYW5kIGEgZXh0cmEgdmFyaWFibGUgZm9yCgkgIENWUyBkaXN0CgpUaHUgQXVnIDE5IDA3OjQ0OjA3IE1EVCAyMDA0IEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sbGludC54bWwsIHhtbGxpbnQuMSwgeG1sbGludC5odG1sOgoJRWRpdCBhbmQgcmVidWlsZCB0aGUgbWFuIHBhZ2VzIHdpdGggRGFuaWVsJ3MgQzE0IHVwZGF0ZQoKV2VkIEF1ZyAxOCAxOToxNToyNyBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHBhcnNlci5jOiBmaXhlZCBtaXNzaW5nIGxpbmUgbnVtYmVycyBvbiBlbnRpdHkgYXMgcmVwb3J0ZWQKCSAgb24gdGhlIGxpc3QgYnkgU3RldmUgQ2hlbmcKCldlZCBBdWcgMTggMTQ6MDQ6MzEgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBjb25maWd1cmUuaW4gZ2xvYmFscy5jIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbgoJICBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbjogYWRkZWQgc29tZSBjb2RlIHRvCgkgIGluY2x1ZGUgdGhlIENWUyBDaGFuZ2VMb2cgdmVyc2lvbiBpbiB0aGUgeG1sUGFyc2VyVmVyc2lvbgoJICBzdHJpbmcgKHByaW50ZWQgYnkgeG1sbGludCB3aXRoIC0tdmVyc2lvbikKCldlZCBBdWcgMTggMTE6MTQ6MDYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzLmggcHl0aG9uL2dlbmVyYXRvci5weQoJICBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmMKCSAgcHl0aG9uL3Rlc3RzL3NjaGVtYS5weSBweXRob24vdGVzdHMvTWFrZWZpbGUuYW06IEFwcGxpZWQgcGF0Y2gKCSAgZnJvbSBUb3JrZWwgTHluZyB0byBhZGQgU2NoZW1hcyBzdXBwb3J0IHRvIHRoZSBQeXRob24gYmluZGluZ3MKCSAgYW5kIGV4dGVuZCB0aGUgc2NoZW1hcyBlcnJvciBBUEksIHJlZ2lzdGVyZWQgYSBuZXcgdGVzdC4KCSogZG9jLyogZWxmZ2NjaGFjay5oOiByZWJ1aWx0IHRvIHJlZ2VuZXJhdGUgdGhlIGJpbmRpbmdzCgpNb24gQXVnIDE2IDE0OjM2OjI1IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBhZGRlZCBoZWxwIGZvciBuZXcgc2V0IHNoZWxsIGNvbW1hbmQKCSogeGluY2x1ZGUuYyB4bWxsaW50LmMgeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6CgkgIGFkZGVkIHBhcnNlciBvcHRpb24gdG8gbm90IGdlbmVyYXRlIFhJbmNsdWRlIHN0YXJ0L2VuZCBub2RlcywKCSAgYWRkZWQgYSBzcGVjaWZpYyBvcHRpb24gdG8geG1sbGludCB0byB0ZXN0IGl0IGZpeGVzICMxMzA3NjkKCSogTWFrZWZpbGUuYW06IHJlZ3Jlc3Npb24gdGVzdCB0aGUgbmV3IGZlYXR1cmUKCSogZG9jL3htbGxpbnQuMSBkb2MveG1sbGludC54bWw6IHVwZGF0ZWQgbWFuIHBhZ2UgdG8gZG9jdW1lbnQgb3B0aW9uLgoKTW9uIEF1ZyAxNiAwMjo0MjozMCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogc21hbGwgdHlwbyBwb2ludGVkIG91dCBieSBNaWtlIEhvbW1leQoJKiBkb2MveG1sbGludC54bWwsIHhtbGxpbnQuaHRtbCwgeG1sbGludC4xOiBzbGlnaHRseSBpbXByb3ZlZAoJICB0aGUgLS1jMTRuIGRlc2NyaXB0aW9uLCBjLmYuICMxNDQ2NzUgLgoJKiBuYW5vaHR0cC5jIG5hbm9mdHAuYzogYXBwbGllZCBhIGZpcnN0IHNpbXBsZSBwYXRjaCBmcm9tIAoJICBNaWtlIEhvbW1leSBmb3IgJG5vX3Byb3h5LCBjLmYuICMxMzM0NzAKCSogcGFyc2VySW50ZXJuYWxzLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogY2xlYW51cCB0byBhdm9pZCAnZXJyb3InIGlkZW50aWZpZXIgCgkgIGluIGluY2x1ZGVzICMxMzc0MTQKCSogcGFyc2VyLmMgU0FYMi5jIGRlYnVnWE1MLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6CgkgIGZpcnN0IHZlcnNpb24gb2YgdGhlIGlucGxlbWVudGF0aW9uIG9mIHBhcnNpbmcgd2l0aGluCgkgIHRoZSBjb250ZXh0IG9mIGEgbm9kZSBpbiB0aGUgdHJlZSAjMTQyMzU5LCBuZXcgZnVuY3Rpb24KCSAgeG1sUGFyc2VJbk5vZGVDb250ZXh0KCksIGFkZGVkIHN1cHBvcnQgYXQgdGhlIHhtbGxpbnQgLS1zaGVsbAoJICBsZXZlbCBhcyB0aGUgInNldCIgZnVuY3Rpb24KCSogdGVzdC9zY3JpcHRzL3NldCogcmVzdWx0L3NjcmlwdHMvKiBNYWtlZmlsZS5hbTogZXh0ZW5kZWQKCSAgdGhlIHNjcmlwdCBiYXNlZCByZWdyZXNzaW9uIHRlc3RzIHRvIGluc3RydW1lbnQgdGhlIG5ldyBmdW5jdGlvbi4KClNhdCBBdWcgMTQgMTg6NTM6MDggTURUIDIwMDQgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxsaW50LnhtbCwgeG1sbGludC5odG1sLCB4bWxsaW50LjE6CglhZGQgYzE0biB0byBtYW4gcGFnZSAobWFuLCBpdCdzIGhhcmQgdG8ga2VlcCB1cCB3aXRoCglEYW5pZWwhKQoKU2F0IEF1ZyAxNCAxODo0NTozOCBNRFQgMjAwNCBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGxpbnQueG1sLCB4bWxsaW50Lmh0bWwsIHhtbGxpbnQuMToKCWFkZCBwYXR0ZXJuLCB3YWxrZXIsIG1heG1lbSwgb3V0cHV0IGFuZCB4bWxvdXQgdG8gbWFuIHBhZ2UKCWZpeGVzICMxNDQ2NzUKClN1biBBdWcgMTUgMDA6NDE6MTIgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYWRkZWQgYSAtLWMxNG4gb3B0aW9uIHRvIGNhbm9uaWNhbGl6ZSB0aGUgb3V0cHV0CgkgIHNob3VsZCBjbG9zZSB0aGUgUkZFICMxNDMyMjYKClNhdCBBdWcgMTQgMjM6NTA6MTAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogRG9kamkgcG9pbnRlZCBvdXQgYSBidWcgaW4geG1sR2V0Tm9kZVBhdGgoKQoJKiB4bWxjYXRhbG9nLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBBbGJlcnQgQ2hpbiB0byBhZGQgYQoJICAtLW5vLXN1cGVyLXVwZGF0ZSBvcHRpb24gdG8geG1sY2F0YWxvZyBzZWUgIzE0NTQ2MQoJICBhbmQgYW5vdGhlciBwYXRjaCBhbHNvIGZyb20gQWxiZXJ0IENoaW4gdG8gbm90IGNyYXNoIAoJICBvbiAtc2dtbCAtLWRlbCB3aXRob3V0IGFyZ3Mgc2VlICMxNDU0NjIKCSogTWFrZWZpbGUuYW06IGFwcGxpZWQgYW5vdGhlciBwYXRjaCBmcm9tIEFsYmVydCBDaGluIHRvCgkgIGZpeCBhIHByb2JsZW0gd2l0aCBkaWZmIG9uIFNvbGFyaXMgIzE0NTUxMQoJKiB4bWxzdHJpbmcuYzogZml4IHhtbENoZWNrVVRGOCgpIGFjY29yZGluZyB0byB0aGUgc3VnZ2VzdGlvbgoJICBpbiBidWcgIzE0ODExNQoJKiBweXRob24vbGlieG1sLnB5OiBhcHBseSBmaXggZnJvbSBNYXJjLUFudG9pbmUgUGFyZW50IGFib3V0CgkgIHRoZSBlcnJvcnMgaW4gbGlieG1sKDIpLnB5IG9uIHRoZSBub2RlIHdyYXBwZXIgIzEzNTU0NwoKU2F0IEF1ZyAxNCAxMzoxODo1NyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGFkZGVkIGEgZHVtYiBydWxlIHRvIGFibGUgdG8gY29tcGlsZSB0c3QuYwoJICB3aGVuIHBlb3BsZSBzdWJtaXQgYSBzYW1wbGUgdGVzdCBwcm9ncmFtCgkqIHhtbHNjaGVtYXMuYzogYXBwbGllZCBzbWFsbCBwYXRjaCBmcm9tIEVyaWMgSGFzemxha2lld2ljegoJICB0byBkb2N1bWVudCB4bWxTY2hlbWFzU2V0VmFsaWRFcnJvcnMoKSBsaW1pdGF0aW9ucywgIzE0MTgyNwoJKiBlcnJvci5jOiBBZGQgaW5mb3JtYXRpb24gaW4gZ2VuZXJpYyBhbmQgc3RydWN0dXJlZCBlcnJvcgoJICBzZXR0ZXIgZnVuY3Rpb25zIHRoYXQgdGhpcyBuZWVkIHRvIGJlIGRvbmUgcGVyIHRocmVhZCAjMTQ0MzA4CgkqIHhtbHNhdmUuYzogZml4ZWQgYnVnIHdoaXRoIG1pc3NpbmcgTk9UQVRJT04ocykgc2VyaWFsaXphdGlvbgoJICBidWcgIzE0NDE2MgoJKiBkb2MveG1sbGludC54bWw6IHR5cG8gZml4ICMxNDQ4NDAKClR1ZSBBdWcgMTAgMDc6MTk6MzEgUERUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYwoJICBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzdHlwZXMuaDogYXBwbGllZCBTY2hlbWFzIHBhdGNoZXMKCSAgZnJvbSBLYXNpbWllciBCdWNoY2lrCgkqIHRlc3QvIHJlc3VsdC8gYnVnMTQxMzMzKiBhbm5vdC1lcnIqIGFueVsxLTRdKiBidWcxNDUyNDYqCgkgIGVsZW1lbnQtZXJyKiBlbGVtZW50LW1pbm1heC1lcnIqIGluY2x1ZGUxKiByZXN0cmljdC1DVC1hdHRyLXJlZio6CgkgIGxvdCBvZiBuZXcgdGVzdHMgZm9yIHRoaW5ncyBmaXhlZCBieSB0aGUgcGF0Y2gKCkZyaSBBdWcgIDYgMDk6MjI6MzQgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB2YWxpZC5jOiBmaXhlZCBteSBtaXMtaGFuZGxpbmcgb2YgRXh0ZXJuYWwgSUQgb24gbGFzdAoJICBjaGFuZ2UuCgpXZWQgQXVnICA0IDIzOjQwOjIxIFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdmFsaWQuYzogY2hhbmdlZCB0aGUgcGFyc2luZyBvZiBhIGRvY3VtZW50J3MgRFREIHRvIHVzZQoJICB0aGUgcHJvcGVyIGJhc2UgcGF0aCAoYnVnIDE0NDM2NikKCldlZCBBdWcgIDQgMTY6NTg6MDggQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZy5oLmluIGNvbmZpZ3VyZS5pbiBweXRob24vTWFrZWZpbGUuYW06CgkgIGFwcGxpZWQgYSBwYXRjaCBmcm9tIEdlcnJpdCBQLiBIYWFzZSB0byBnZXQgcHl0aG9uIGJpbmRpbmdzCgkgIG9uIEN5Z3dpbgoKVHVlIEF1ZyAgMyAxNTowODoyMiBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6IGVsYWJvcmF0ZWQgb24gZGVzY3JpcHRpb24gb2YKCSAgeG1sVmFsaWRpdHlXYXJuaW5nRnVuYyBhbmQgeG1sVmFsaWRpdHlFcnJvckZ1bmMgKGJ1ZwoJICAxNDQ3NjApCgkqIHhtbElPLmMsIHhtbHNjaGVtYXN0eXBlcy5jLCBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzaW50ZXJuYWxzLmg6CgkgIG1pbm9yIGZpeGVzIHRvIGNvbW1lbnRzIGZvciBkb2MgcmVidWlsZGluZyBlcnJvcnMuCgkqIGRvYy8qLmh0bWw6IHJlYnVpbHQgdGhlIGRvY3MKClR1ZSBBdWcgIDMgMjM6NTk6MjMgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9DaGFuZ2VMb2cueHNsIGRvYy9kb3dubG9hZHMuaHRtbCBkb2MveG1sLmh0bWwgZG9jLyo6CgkgIGZpeGVzIGRvY3VtZW50YXRpb24gZ2xpdGNoZXMgcmFpc2VkIGJ5IE9saXZlciBTdG9lbmViZXJnCgpUdWUgQXVnICAzIDA5OjQyOjMxIFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdHJlZS5jOiBmaXhlZCBwcm9ibGVtIHdpdGggbWVtb3J5IGxlYWsgb24gdGV4dCBub2RlcyBpbiBEVEQKCSAgKGJ1ZyAxNDg5NjUpIHdpdGggcGF0Y2ggcHJvdmlkZWQgYnkgRGFycmVsbCBLaW5kcmVkCgpUdWUgQXVnICAzIDA4OjE0OjQ0IFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBpbml0aWFsaXNhdGlvbiBwcm9ibGVtIGZvciBodG1sUmVhZE1lbW9yeQoJICAoYnVnIDE0OTA0MSkKClNhdCBKdWwgMzEgMTE6MDE6MzMgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MvYnVpbGREb2NCb29rQ2F0YWxvZzogZW5oYW5jZWQgcGVyIGJ1ZyAxMTk4NzYuICBGdXJ0aGVyCgkgIGluZm8gcG9zdGVkIHRvIHRoZSBtYWlsaW5nIGxpc3QuCgpTYXQgSnVsIDMxIDA5OjEyOjQ0IFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogU0FYMi5jLCBlbmNvZGluZy5jLCBlcnJvci5jLCBwYXJzZXIuYywgdHJlZS5jLCB1cmkuYywgeG1sSU8uYywKCSAgeG1scmVhZGVyLmMsIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogbWFueSBmdXJ0aGVyIGxpdHRsZSBjaGFuZ2VzCgkgIGZvciBPT00gcHJvYmxlbXMuICBOb3cgc2VlbXMgdG8gYmUgZ2V0dGluZyBjbG9zZXIgdG8gIm9rIi4KCSogdGVzdE9PTS5jOiBhZGRlZCBjb2RlIHRvIGludGVyY2VwdCBtb3JlIGVycm9ycywgZm91bmQgbW9yZQoJICBwcm9ibGVtcyB3aXRoIGxpYnJhcnkuIENoYW5nZWQgbWV0aG9kIG9mIGZsYWdnaW5nIC8gY291bnRpbmcKCSAgZXJyb3JzIGludGVyY2VwdGVkLgoKRnJpIEp1bCAzMCAxMzo1Nzo1NSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhcHBsaWVkIGEgY291cGxlIG9mIHBhdGNoIG9uZSBmcm9tIE9saXZlciBTdG9lbmViZXJnCgkgIGFuZCBhbm90aGVyIG9uZSBmcm9tIFJvYiBSaWNoYXJkcyBmaXhpbmcgIzE0ODQ0OAoKVGh1IEp1bCAyOSAxMzoyMDoyOCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiAxIGxpbmUgcGF0Y2gsIGFwcGFyZW50bHkgaHRtbE5ld0RvYygpIHdhcyBub3QKCSAgc2V0dGluZyBkb2MtPmNoYXJzZXQuCgpUaHUgSnVsIDI5IDAwOjA1OjU4IFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogU0FYMi5jLCB0cmVlLmMsIHVyaS5jLCB4bWxJTy5jLCB4bWxyZWFkZXIuYzogZnVydGhlcgoJICBmaXhlcyBmb3Igb3V0IG9mIG1lbW9yeSBjb25kaXRpb24sIG1vc3RseSBmcm9tIE9saXZpZXIKCSAgQW5kcmlldS4KCSogdGVzdE9PTS5jOiBzb21lIGZ1cnRoZXIgaW1wcm92ZW1lbnQgYnkgT2xpdmllciwgd2l0aAoJICBhIGZ1cnRoZXIgc21hbGwgZW5oYW5jZW1lbnQgZm9yIGVhc2llciBkZWJ1Z2dpbmcuCgpUdWUgSnVsIDI3IDAwOjM0OjA3IFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogU0FYMi5jLCBlcnJvci5jLCBwYXJzZXIuYywgdHJlZS5jLCB4bWxyZWFkZXIuYzoKCSAgaW1wbGVtZW50ZWQgcGF0Y2hlcyBzdXBwbGllZCBieSBPbGl2aWVyIEFuZHJpZXUgCgkgIChidWcgMTQ4NTg4KSwgcGx1cyBtYWRlIHNvbWUgZnVydGhlciBlbmhhbmNlbWVudHMsIHRvCgkgIGNvcnJlY3Qgc29tZSBwcm9ibGVtcyB3aXRoIG91dCBvZiBtZW1vcnkgY29uZGl0aW9ucy4KCSogdGVzdE9PTS5jOiBpbXByb3ZlZCB3aXRoIHBhdGNoZXMgZnJvbSBPbGl2aWVyIEFuZHJpZXUKCk1vbiBKdWwgMjYgMTE6MDM6MTggUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB0cmVlLmM6IHB1dCBpbiBwYXRjaCBmb3IgV2luZG93cyBidWZmZXIgcmUtYWxsb2NhdGlvbgoJICBzdWJtaXR0ZWQgYnkgU3RldmUgSGF5IChidWcgMTQ2Njk3KQoKU3VuIEp1bCAyNSAxNzoxODozOSBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhpbmNsdWRlLmM6IGFkZGVkIHNvbWUgY29kZSB0byBjaGVjaywgd2hlbiBhbiBpbmNsdWRlIGlzCgkgIGRvbmUsIHdoZXRoZXIgdGhlIHJlcXVlc3RlZCBVUkwgZ2V0cyBtYXBwZWQgdG8gc29tZSBvdGhlcgoJICBsb2NhdGlvbiAoZS5nLiB3aXRoIGEgY2F0YWxvZyBlbnRyeSkgYW5kLCBpZiBzbywgdGFrZSBjYXJlCgkgIG9mIHRoZSB4bWw6YmFzZSBwcm9wZXJseSAoYnVnIDE0Njk4OCkKClN1biBKdWwgMjUgMTQ6MDI6MjQgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBlcnJvci5jOiBmaXhlZCB0byBhc3N1cmUgdXNlciBkYXRhIHBhcmFtIGlzIHNldCBjb3JyZWN0bHkKCSAgd2hlbiB1c2VyIHN0cnVjdHVyZWQgZXJyb3IgaGFuZGxlciBpcyBjYWxsZWQgKGJ1ZyAxNDQ4MjMpCgpUaHUgSnVsIDIyIDEwOjE0OjQ4IFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1scmVhZGVyLmM6IGZpeGVkIHByb2JsZW0gd2l0aCByZWFkZXIgc3RhdGUgYWZ0ZXIKCSAgcHJvY2Vzc2luZyBhdHRyaWJ1dGVzIChidWcgMTQ3OTkzKQoKV2VkIEp1bCAyMSAxNzowNDoyNyBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGNvbmZpZ3VyZS5pbiwgTWFrZWZpbGUuYW06IHB1dCBpbiBhbiBhdXRvKiBjaGVjayBmb3IgdGhlCgkgIHBhdGggdG8gcGVybCAoaWYgaXQgZXhpc3RzKSwgYW5kIG1vZGlmaWVkIG1ha2UgVGltaW5ndGVzdHMKCSAgdG8gdXNlIHRoYXQgcGF0aCBpbnN0ZWFkIG9mIGp1c3QgZXhlY3V0aW5nIHRoZSBkYmdlbmF0dHIucGwKCSAgc2NyaXB0IChidWcgMTQ4MDU2KQoKRnJpIEp1bCAxNiAxODozNjozMyBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IGFkZGVkIGEgY2hlY2sgb24gdGhlIGFyZ3VtZW50IGZvciBzb21lCgkgIGNsYXNzZXMgKGUuZy4geG1sRG9jIGFuZCB4bWxOb2RlKSB0byBwcmV2ZW50IGEgc2VnZmF1bHQgKGFzCgkgIHJlcG9ydGVkIG9uIHRoZSBsaXN0KS4gIEZ1cnRoZXIgZW5oYW5jZW1lbnQgc2hvdWxkIGJlIGRvbmUKCSAgdG8gYXV0by1jcmVhdGUgdGhlIGFwcHJvcHJpYXRlIG9iamVjdC4KCSogcHl0aG9uL2xpYnhtbC5jOiBtaW5vciBmaXggZm9yIGEgd2FybmluZyBtZXNzYWdlOyBhZGRlZCBhCgkgIHJvdXRpbmUsIGN1cnJlbnRseSBub3QgdXNlZCwgdG8gcmVwb3J0IHRoZSBkZXNjcmlwdGlvbiBvZiBhCgkgIFB5Q09iamVjdC4KCSogcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IHJlZ2VuZXJhdGVkCgpGcmkgSnVsIDE2IDExOjAxOjQwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmMgdGVzdC9jYXRhbG9ncy93aGl0ZSogcmVzdWx0L2NhdGFsb2dzL3doaXRlKjoKCSAgYXBwbGllZCBwYXRjaGVzIGZyb20gUGV0ZXIgQnJlaXRlbmxvaG5lciB0byBmaXggaGFuZGxpbmcKCSAgb2Ygd2hpdGUgc3BhY2Ugbm9ybWFsaXphdGlvbiBpbiBwdWJsaWMgaWRzIGFuZCBhZGQgdGVzdHMKClR1ZSBKdWwgMTMgMTc6MjQ6MTMgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbG1lbW9yeS5jOiBhcHBsaWVkIGEgc21hbGwgZml4IGZyb20gU3RldmUgSGF5CgpUdWUgSnVsIDEzIDIzOjAyOjE5IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogQWRkZWQgY29kZSB0byBpbiBQUkVESUNBVEUvRklMVEVSIGhhbmRsaW5nIHRvIHJlc2V0CgkgIHRoZSB4cGF0aCBjb250ZXh0IGRvY3VtZW50IHBvaW50ZXIgKHBhcnQgb2YgZml4IHRvIGxpYnhzbHQKCSAgYnVnIDE0NzQ0NSkKClR1ZSBKdWwgMTMgMDA6MTQ6MDggSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBweXRob24vbGlieG1sLnB5OiByYW4gJ2V4cGFuZCcgb24gdGhlIGZpbGUgdG8gZ2V0IHJpZCBvZiBtaXh0dXJlCgkgIG9mIHRhYnMgYW5kIHNwYWNlcyAoYnVnIDE0NzQyNCkKClN1biBKdWwgMTEgMjI6Mzg6MjkgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBweXRob24vZHJ2X2xpYnhtbC5weTogYWRkZWQgYW4gZW5jb2RpbmcgInNwZWNpYWwgY29tbWVudCIgdG8gYXZvaWQKCSAgd2FybmluZyBtZXNzYWdlIGluIHB5dGhvbjIuMyAoYnVnIDE0Njg4OSkKCSogTWFrZWZpbGUuYW0sIHB5dGhvbi9NYWtlZmlsZS5hbSwgcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtOiBzbWFsbAoJICBjaGFuZ2UgdG8gbWFrZSAibWFrZSB0ZXN0cyIgYSBsaXR0bGUgcXVpZXRlciAoTUFLRUZMQUdTKz0tLXNpbGVudCkKCSogeHBhdGguYzogZW5oYW5jZWQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgY3VycmVudCBsaWJ4c2x0IGhhbmRsaW5nCgkgIG9mIHRtcFJWVC4gIEZpeGVzIGJ1ZyAxNDU1NDcuCgpGcmkgSnVsICA5IDE0OjAyOjU0IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuaCB1cmkuYzogZml4ZWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMgaW4gdGhlIG5ldwoJICBlbGZnY2NoYWNrLmggdHJpY2sgcG9pbnRlZCBieSBQZXRlciBCcmVpdGVubG9obmVyCgpXZWQgSnVsICA3IDAwOjQ1OjQ4IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbGZnY2NoYWNrLmggZG9jL2FwaWJ1aWxkLnB5IGRvYy9saWJ4bWwyLWFwaS54bWw6IGZpeGVkIGEgYnVnCgkgIHdoaWNoIHByZXZlbnRlZCBidWlsZGluZyB3aXRoIC0td2l0aC1taW5pbXVtCgpNb24gSnVsICA1IDE5OjQzOjUxIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gZG9jLyo6IHJlbGVhc2luZyAyLjYuMTEsIHVwZGF0ZWQgYW5kIHJlZ2VuZXJhdGVkIHRoZQoJICBkb2NzCgpNb24gSnVsICA1IDE4OjQzOjQ3IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogbWFrZSB0aGUgcHVzaCBpbnRlcmZhY2VzIHN5bmNocm9ub3VzCgkqIHB5dGhvbi90ZXN0cy9zeW5jLnB5OiBhZGRlZCBhIHNwZWNpZmljIHRlc3QKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIGRvYy9leGFtcGxlcy9NYWtlZmlsZS5hbQoJICBkb2MvZXhhbXBsZXMvaW5kZXgucHk6IGFkZGVkIHRoZSBuZXcgdGVzdCwgY2xlYW5pbmcgdXAgCgkgICJtYWtlIHRlc3RzIiBvdXRwdXQKCk1vbiBKdWwgIDUgMTU6MDk6MTcgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogYXBwbGllZCBwYXRjaCBmcm9tIEthc2ltaWVyIHRvIGZpeCBzb21lIFJlbGF4LU5HCgkgIGRhdGF0eXBlIGZhY2V0IHByb2JsZW0gd2l0aCByZWNlbnQgY2hhbmdlcy4KClNhdCBKdWwgIDMgMTE6MzE6MDIgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBweXRob24vbGlieG1sLmM6IENoYW5nZWQgdGhlIG51bWJlciBvZiBYUGF0aCBleHRlbnNpb24gZnVuY3Rpb25zCgkgIGFsbG93ZWQgdG8gYmUgdmFyaWFibGUtbGVuZ3RoIChwYXRjaCBzdXBwbGllZCBieSBNYXJjLUFudG9pbmUKCSAgUGFyZW50LCBidWcgMTQzODA1KS4gIEFkZGVkIGNvZGUgdG8gInVucmVnaXN0ZXIiIHRoZSBmdW5jdGlvbnMKCSAgd2hlbiB0aGUgcGFyc2VyIGNsZWFudXAgdGFrZXMgcGxhY2UuCgpGcmkgSnVsICAyIDE0OjIyOjE0IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxtZW1vcnkuYyBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWw6CgkgIHNvbWUgdXBkYXRlcyB3aXRoIG1lbW9yeSBkZWJ1Z2dpbmcgZmFjaWxpdGllcyB3aGlsZSBtZXNzaW5nCgkgIHdpdGggbGlieHNsdCBweXRob24gYmluZGluZ3MKClRodSBKdWwgIDEgMTQ6NTM6MzYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYyBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwucHkKCSAgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6CgkgIGFwcGxpZWQgcGF0Y2ggZnJvbSBTdOlwaGFuZSBCaWRvdWwgdG8gZml4IHNvbWUgUHl0aG9uIGJpbmRpbmdzCgkgIGluaXRpYWxpemF0aW9uLCB0aGVuIGhhZCB0byBjaGFuZ2UgdGhlIHBhcnNlckNsZWFudXAoKSAKCSAgdG8gaGFuZGxlIG1lbW9yeSByZWxlYXNlZCB0aGVyZS4KCSogeG1sbWVtb3J5LmM6IGFkZGVkIG1vcmUgZGVidWdnaW5nIGNvbW1lbnRzLgoKVGh1IEp1bCAgMSAxMzoxODowMiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IHNlZW1zIHRoZSByZWFkZXIgYnVmZmVyIGNvdWxkIGJlIHVzZWQgd2hpbGUgbm90CgkgIGFsbG9jYXRlZCwgZml4ZXMgYnVnICMxNDUyMTgKClRodSBKdWwgIDEgMTE6MzQ6MTAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IGRvIG5vdCBwcm92aWRlIGZ1bmN0aW9ucyB1c2VkIGFzIGRlc3RydWN0b3IKCSAgb2YgY2xhc3NlcyBhcyBwdWJsaWMgbWV0aG9kcyB0byBhdm9pZCBkb3VibGUtZnJlZSBwcm9ibGVtIGxpa2UKCSAgaW4gYnVnICMxNDUxODUKCldlZCBKdW4gMzAgMTk6NDU6MjMgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxzY2hlbWFzLmMsIHhtbHNjaGVtYXN0eXBlcy5jOiB3YXJuaW5nIG1lc3NhZ2UgY2xlYW51cC4KCSAgTm93IGNvbXBpbGVzIHdhcm5pbmctZnJlZSwgYWxsIHRlc3RzIHBhc3NlZC4KCSogU0FYMi5jOiBzbWFsbCBjaGFuZ2UgdG8gY29tbWVudHMgZm9yIGRvY3VtZW50YXRpb24uCgkgIE5vIGNoYW5nZSB0byBsb2dpYy4KClR1ZSBKdW4gMjkgMTU6MDA6MTMgUERUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBtb3JlIGZpeGVzIHdpdGggS2FzaW1pZXIsIGxvb2tzIGZhciBjbGVhbmVyIDotKQoKVHVlIEp1biAyOSAyMzowMDowNSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBLYXNpbWllciBCdWNoY2lrIGZpeGVkIHRoZSBtZW1vcnkgYWNjZXNzIGFuZAoJICBhbGxvY2F0aW9uIHByb2JsZW0KClR1ZSBKdW4gMjkgMTk6MDA6MzIgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oCgkgIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaCBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzdHlwZXMuaDoKCSAgYXBwbGllZCBTY2hlbWFzIHBhdGNoZXMgZnJvbSBLYXNpbWllciBCdWNoY2lrLCB0aGVyZSBpcyBzdGlsbAoJICBvbmUgb3BlbiBpc3N1ZSBhYm91dCByZWZlcmVuY2luZyBmcmVlZCBtZW1vcnkuCgkqIHRlc3Qvc2NoZW1hcy8qIHJlc3VsdC9zY2hlbWFzLyo6IHVwZGF0ZWQgd2l0aCBuZXcgdGVzdHMgZnJvbSAKCSAgS2FzaW1pZXIKClR1ZSBKdW4gMjkgMTQ6NTI6MTggQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBpbmNsdWRlL2xpYnhtbC94bWxJTy5oCgkgIGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL2xpYnhtbDItcmVmcy54bWw6IG1vdmVkIHNvbWUgZGVmaW5pdGlvbnMKCSAgdG8gZ2xvYmFscy5oIHRvIGF2b2lkIHNvbWUgdHJvdWJsZXMgcG9pbnRlZCBvdXQgYnkgUm9iIFJpY2hhcmRzCgpNb24gSnVuIDI4IDExOjI1OjMxIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwubTQ6IGFwcGxpZWQgY2hhbmdlcyBzdWdnZXN0ZWQgYnkgTWlrZSBIb21tZXksIHJlbW92ZQoJICBsaWJ4bWwxIHN1cHBvcnQgYW5kIHVzZSBDUFBGTEFHUyBpbnN0ZWFkIG9mIENGTEFHUwoKU3VuIEp1biAyNyAxNDoxNzoxNSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW46IGFub3RoZXIsIG1vcmUgJ2V4cGVyaW1lbnRhbCcgZmVhdHVyZSB0byAKCSAgZ2V0IGNvbXBpbGVyIG9wdGltaXphdGlvbiBiYXNlZCBvbiBnY2MgcnVudGltZSBwcm9maWxpbmcKClN1biBKdW4gMjcgMTQ6MDI6MzYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVsZmdjY2hhY2suaCBkb2MvZWxmZ2NjaGFjay54c2wgbGlieG1sLmg6IGhhY2sgYmFzZWQgb24gQXJqYW4gdmFuIGRlCgkgIFZlbiBzdWdnZXN0aW9uIHRvIHJlZHVjZSBFTEYgZm9vdHByaW50IGFuZCBnZW5lcmF0ZWQgY29kZS4gQmFzZWQgb24KCSAgYWxpYXNpbmcgb2YgbGlicmFyaWVzIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGRpcmVjdCBjYWxsIGluc3RlYWQgb2YKCSAgaW5kaXJlY3Qgb25lcwoJKiBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy9NYWtlZmlsZS5hbSBkb2MvYXBpYnVpbGQucHk6IGFkZGVkIGF1dG9tYXRpYwoJICBnZW5lcmF0aW9uIG9mIGVsZmdjY2hhY2suaCBiYXNlZCBvbiB0aGUgQVBJIGRlc2NyaXB0aW9uLCBleHRlbmRlZAoJICB0aGUgQVBJIGRlc2NyaXB0aW9uIHRvIHNob3cgdGhlIGNvbmRpdGlvbmFscyBjb25maWd1cmF0aW9uIGZsYWdzCgkgIHJlcXVpcmVkIGZvciBzeW1ib2xzLgoJKiBuYW5vaHR0cC5jIHBhcnNlci5jIHhtbHNhdmUuYyBpbmNsdWRlL2xpYnhtbC8qLmg6IGxvdCBvZiBjbGVhbnVwCgkqIGRvYy8qOiByZWdlbmVyYXRlZCB0aGUgZG9jcy4KClN1biBKdW4gMjcgMTA6MDI6MjggSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiByZWdyZXNzaW9ucy5weSwgcmVncmVzc2lvbnMueG1sOiBuZXcgZmlsZXMgZm9yIHJ1bm5pbmcKCSAgcmVncmVzc2lvbiB0ZXN0cyB1bmRlciBQeXRob24uICBOb3QgeWV0IGNvbXBsZXRlLCBidXQKCSAgc2hvdWxkIHByb3ZpZGUgZ29vZCB0ZXN0aW5nIHVuZGVyIGJvdGggTGludXggYW5kIFdpbmRvd3MuCgkqIHRlc3RIVE1MLmMsIHRlc3RTQVguYywgeG1sbGludC5jOiBjaGFuZ2VkIHRoZSAnZm9wZW4nIHVzZWQKCSAgZm9yIC0tcHVzaCB0ZXN0aW5nIHRvIGluY2x1ZGUgdGhlICdyYicgcGFyYW0gd2hlbiBjb21waWxlZAoJICB1bmRlciBXaW5kb3dzLgoKRnJpIEp1biAyNSAxMzozODo1NyBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHVyaS5jOiBmaXhlZCBhIHByb2JsZW0gd2hlbiBiYXNlIHBhdGggd2FzICIuL3h4eCIKCSogcmVzdWx0L1hJbmNsdWRlLyo6IDUgdGVzdCByZXN1bHRzIGNoYW5nZWQgYnkgYWJvdmUuCgkqIE1ha2VmaWxlLmFtOiBmaXhlZCBhIGNvdXBsZSBvZiBzcG90cyB3aGVyZSBhIG5ldwoJICByZXN1bHQgZmlsZSB1c2VkIGRpZmZlcmVudCBmbGFncyB0aGF0IHRoZSB0ZXN0aW5nIG9uZS4KClRodSBKdW4gMjQgMTY6Mjc6NDQgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB2YWxpZC5jOiBzdXBwcmVzc2VkIHdhcm5pbmdzIGZyb20gd2l0aGluIHhtbFZhbGlkR2V0VmFsaWRFbGVtZW50cwoJICAoYnVnIDE0NDY0NCkKCSogZG9jL2V4YW1wbGVzL3Rlc3RXcml0ZXIuYzogY29ycmVjdGVkIHR5cG8gaW4gY29tbWVudCBmb3IgSVNPLTg4NTktMQoJICAoYnVnIDE0NDI0NSkKClRodSBKdW4gMjQgMTA6MTc6MzEgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB2YWxpZC5jOiBpbXBsZW1lbnRlZCBidWdmaXggZnJvbSBNYXNzaW1vIE1vcmFyYSBmb3IgRFRECgkgIGR1bXBpbmcgcHJvYmxlbS4KCSogdGVzdC92YWxpZC90MTAueG1sLCByZXN1bHQvdmFsaWQvdDEwLio6IGFkZGVkIHJlZ3Jlc3Npb24KCSAgZm9yIGFib3ZlCgkqIGNvbmZpZ3VyZS5pbjogc21hbGwgY2hhbmdlIGZvciBteSBwcm9maWxlIHNldHRpbmdzCgpXZWQgSnVuIDIzIDIwOjE4OjE5IE1EVCAyMDA0IEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sY2F0YWxvZ19tYW4ueG1sLCB4bWxjYXRhbG9nLjEKCURvY3MgcGF0Y2ggZnJvbSBWaWxsZSBTa3l0dGEsIGJ1Z3ppbGxhICMxNDQ4NDEKClNhdCBKdW4gMTkgMTg6MzQ6MTEgTURUIDIwMDQgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxsaW50LnhtbCwgeG1sbGludC5odG1sLCB4bWxsaW50LjEKCXVwZGF0ZSBtYW4gcGFnZSB0byByZWZsZWN0IFdpbGxpYW0ncyBuZXdseSBkaXNjaXBsaW5lZCByZXR1cm4KCWNvZGUgbW9qbwoKVGh1IEp1biAxNyAwMDo1MTo1NSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2V4YW1wbGVzL2lvMi5jIGRvYy9leGFtcGxlcy9wYXJzZTQuYzogZml4aW5nIGEgY291cGxlIG9mCgkgIGNvbXBpbGF0aW9uIGVycm9ycyB3aGVuIGNvbmZpZ3VyZWQgd2l0aCAtLXdpdGgtbWluaW11bQoKV2VkIEp1biAxNiAxNjowNzoxMCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogYXBwbGllZCBwYXRjaCBmcm9tIFN0ZWZhbm8gRGViZW5lZGV0dGkgdG8gcmVnaXN0ZXIKCSAgbmFtZXNwYWNlcyBpbiB0aGUgZGVidWcgc2hlbGwKCk1vbiBKdW4gMTQgMjE6NTY6MzEgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBmaXggZnJvbSBTdGV2ZSBCYWxsIGFuZCB1cGRhdGUgb2YgdGhlIGNvbW1lbnQuCgkqIE1ha2VmaWxlLmFtIHJlc3VsdC9lcnJvcnMvKi5zdHI6IFdpbGxpYW0gcG9pbnRlZCBvdXQgdGhhdCAKCSAgdGhlIHN0cmVhbWluZyBlcnJvciBjaGVja2luZyBwYXJ0IHdhc24ndCBzdHJlYW1pbmcsIGZpeGluZwoKTW9uIEp1biAxNCAxNDoxMTo1MiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiBwYXRjaCBmcm9tIElnb3IgZm9yIHRoZSBkZWZhdWx0IGNhdGFsb2cgcGF0aCBvbiBXaW5kb3dzCgpTYXQgSnVuIDEyIDA5OjAzOjU3IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogY29uZmlndXJlLmluOiBhcHBhcmVudGx5IHdhc24ndCB1cGRhdGVkIGxhc3QgdGltZQoKVGh1IEp1biAxMCAyMDo1Nzo0OCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGNvbmZpZ3VyZS5pbiwgeG1sbWVtb3J5LmMsIGdsb2JhbHMuYzogZml4ZWQgcHJvYmxlbSB3aGVuCgkgIGNvbmZpZ3VyaW5nIHVzaW5nIC0td2l0aC10aHJlYWQtYWxsb2MKCldlZCBKdW4gIDkgMTY6MzE6MjQgQ0VTVCAyMDA0IElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9jb25maWd1cmUuanMgd2luMzIvTWFrZWZpbGUuKiBtaW5vciBjaGFuZ2VzIGZvciB0aGUgbmV3CgkgIGxheW91dCBvZiB0aGUgV2luZG93cyBiaW5hcnkgcGFja2FnZQoKVHVlIEp1biAgOCAxOTo1MDoyNSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGFwcGxpZWQgYW5vdGhlciBwYXRjaAoJICBmcm9tIEthc2ltaWVyIEJ1Y2hjaWsgZm9yIFNjaGVtYSBDb21wb25lbnQgQ29uc3RyYWludHMKCSogdGVzdC9zY2hlbWFzLyogcmVzdWx0L3NjaGVtYXMvKjogYWRkZWQgdGhlIHJlZ3Jlc3Npb24gdGVzdHMKClR1ZSBKdW4gIDggMjE6Mjc6MDMgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxsaW50LmM6IGZpeGVkIG1pc3NpbmcgZXJyb3IgcmV0dXJuIGNvZGUgZm9yIHNjaGVtYQoJICB2YWxpZGF0aW9uIChidWcgMTQzODgwKSwgYWxzbyBjaGFuZ2VkIG92ZXIgdG8gYW4gZW51bSBmb3IKCSAgZGVmaW5pbmcgdGhlIGVycm9yIHJldHVybiBjb2RlcyBmb3IgYWxsIGNvbmRpdGlvbnMuCgpUdWUgSnVuICA4IDE0OjAxOjE0IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogZml4ZWQgYSBzZXJpb3VzCgkgIHByb2JsZW0gd2hlbiBzdWJzdGl0dWluZyBlbnRpdGllcyB1c2luZyB0aGUgUmVhZGVyLCB0aGUgZW50aXRpZXMKCSAgY29udGVudCBtaWdodCBiZSBmcmVlZCBhbmQgaWYgcmVyZWZlcmVuY2VkIHdvdWxkIGNyYXNoCgkqIE1ha2VmaWxlLmFtIHRlc3QvKiByZXN1bHQvKjogYWRkZWQgYSBuZXcgdGVzdCBjYXNlIGFuZCBhIG5ldwoJICB0ZXN0IG9wZXJhdGlvbiBmb3IgdGhlIHJlYWRlciB3aXRoIHN1YnN0aXR1dGlvbiBvZiBlbnRpdGllcy4KClR1ZSBKdW4gIDggMTI6MTQ6MTYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYyB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOgoJICBhcHBsaWVkIHBhdGNoIGZyb20gUm9iIFJpY2hhcmRzIGZvciB0aGUgcGVyIHRocmVhZCBJL08gbWFwcGluZ3MKClR1ZSBKdW4gIDggMDk6NTg6MzEgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4aW5jbHVkZS5jOiBzb21lIGZ1cnRoZXIgZW5oYW5jZW1lbnQgdG8gdGFrZSBjYXJlIG9mCgkgIHhtbDpiYXNlIGZvciBYUG9pbnRlciBlbGVtZW50cyAoYnVnIDE0Mzg4NikuICBBbHNvIGZpeGVkCgkgIGEgcHJvYmxlbSB3aGVuIHhtbDpiYXNlIHdhcyBhbHJlYWR5IHNwZWNpZmllZCBvbiBhbgoJICBYSW5jbHVkZSdkIGVsZW1lbnQuCgpNb24gSnVuICA3IDIyOjE0OjU4IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcmVsYXhuZy5jOiBmaXhlZCBhIHByb2JsZW0gd2l0aCBpbnRlcm5hbCBjbGVhbnVwIG9mIDxESVY+IGVsZW1lbnQKCSAgKGJ1ZyAxNDM3MzgpLgoKTW9uIEp1biAgNyAxNjo1Nzo0MyBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHVyaS5jLCBpbmNsdWRlL2xpYnhtbC91cmkuaDogYWRkZWQgYSBuZXcgcm91dGluZQoJICB4bWxCdWlsZFJlbGF0aXZlVVJJIG5lZWRlZCBmb3IgZW5oYW5jZW1lbnQgb2YgeGluY2x1ZGUuYwoJKiB4aW5jbHVkZS5jOiBjaGFuZ2VkIGhhbmRsaW5nIG9mIHhtbDpiYXNlIChidWcgMTM1ODY0KQoJKiByZXN1bHQvWEluY2x1ZGUvKjogcmVzdWx0cyBvZiA1IHRlc3RzIGNoYW5nZWQgYXMgYSByZXN1bHQKCSAgb2YgdGhlIGFib3ZlIGNoYW5nZQoKRnJpIEp1biAgNCAxMToyNzozNyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdC9zY2hlbWFzLyogcmVzdWx0L3NjaGVtYXMvKjogYWRkZWQgYSBidW5jaCBvZiB0ZXN0cyBmcm9tCgkgIEthc2ltaWVyIEJ1Y2hjaWsgcG9zdGVkIG9uIE1heSAxMQoKVGh1IEp1biAgMyAxNzo1ODoyNSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBuZXcgcGF0Y2ggZnJvbSAgS2FzaW1pZXIgQnVjaGNpayBmb3IgcHJvY2Vzc0NvbnRlbnRzCgkgIG9mIHdpbGRjYXJkcyBhdHRyaWJ1dGUgaGFuZGxpbmcKCSogdGVzdC9zY2hlbWFzL2FueUF0dHItKiByZXN1bHQvc2NoZW1hcy9hbnlBdHRyLSo6IGFkZGVkIHNwZWNpZmljCgkgIHJlZ3Jlc3Npb24gdGVzdHMKClRodSBKdW4gIDMgMTM6MjA6MzYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIGJ1ZyB3aGVyZSBpbnZhbGlkIGNoYXJyZWZzIG1heSBub3QgYmUgZGV0ZWN0ZWQKCSAgc29tZXRpbWVzIGFzIHBvaW50ZWQgYnkgTW9ydXMgV2FsdGVyLgoJKiB0ZXN0L2Vycm9ycy9jaGFycmVmMS54bSByZXN1bHQvZXJyb3JzL2NoYXJyZWYxLnhtbCo6IGFkZGVkIHRoZQoJICB0ZXN0IGluIHRoZSByZWdyZXNzaW9uIHN1aXRlLgoKVGh1IEp1biAgMyAxODozODoyNyBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHNjaGVtYXMuYzogc21hbGwgY2hhbmdlIHRvIHhtbFNjaGVtYVZhbGlkYXRlQXR0cmlidXRlcywKCSAgYWxzbyBjb3JyZWN0ZWQgdHlwbyBvbiBlcnJvciBjb2RlIGVudW0uCgkqIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGNvcnJlY3RlZCB0eXBvIG9uIHNjaGVtYSBlcnJvcgoJICBjb2RlIGVudW0KClRodSBKdW4gIDMgMTA6MTI6MzggSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxzY2hlbWFzLmM6IG1pbm9yIGNvc21ldGljIGNoYW5nZXMsIG5vIGNoYW5nZSB0byBsb2dpYy4KCSogcmVzdWx0L3NjaGVtYXMvYXR0cnVzZV8wX1sxMl0uZXJyOiByZWdlbmVyYXRlZAoJKiBnbG9iYWxzLmM6IGFkZGVkIGEgbmV3bGluZSBhdCBlbmQgdG8gbWFrZSBnY2MgaGFwcHkKCldlZCBKdW4gIDIgMjE6MTY6MjYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmggCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGFwcGxpZWQgYSBwYXRjaCBmcm9tIEthc2ltaWVyIEJ1Y2hjaWsKCSAgaW1wbGVtZW50aW5nIGF0dHJpYnV0ZSB1c2VzIGFuZCB3aWxkY2FyZHMuCgkqIHRlc3Qvc2NoZW1hcy8qIHJlc3VsdC9zY2hlbWFzLyo6IGFkZGVkL2ZpeGVkIGEgYnVuY2ggb2YgdGVzdHMKCldlZCBKdW4gIDIgMTg6MTU6NTEgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYyB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaDogYXBwbGllZCBwYXRjaCBmcm9tIAoJICBSb2IgUmljaGFyZHMgZm9yIGN1c3RvbSBJL08gQnVmZmVyQ3JlYXRlRmlsZW5hbmUgZml4ZXMgYnVnCgkgICMxNDMzNjYKCldlZCBKdW4gMDIgMTY6MjU6MzIgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBmaXhlZCBwcm9ibGVtIHdpdGggcHJlZGljYXRlIGV2YWx1YXRpb24gb24gYW4KCSAgZW1wdHkgbm9kZXNldCAoYnVnIDE0MzQwOSkKCldlZCBKdW4gMDIgMTE6MjY6NDEgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB0ZXN0U0FYLmM6IGZpeGVkIHByb2JsZW0gd2l0aCBhdHRyaWJ1dGUgbGlzdGluZyAoYnVnIDE0MjY3NCkKCSAgYW5kIGFkZGVkIG1hY3JvIExJQlhNTF9URVNUX1ZFUlNJT04gdG8gYXNzdXJlIHhtbEluaXRQYXJzZXIKCSAgZ2V0cyBjYWxsZWQgKGJ1ZyAxNDI2ODYpCgpTYXQgTWF5IDI5IDIxOjM1OjUyIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0L3NjaGVtYXMvZGF0ZV8wLnhtbCB4bWxzY2hlbWFzdHlwZXMuYzogYXBwbGllZCBhIHBhdGNoIGZyb20KCSAgQ2hhcmxlcyBCb3plbWFuIGZpeGluZyBhIHNpZGUgZWZmZWN0IGluIGRhdGUgaGFuZGxpbmcKClRodSBNYXkgMjcgMTk6NDc6NDggTURUIDIwMDQgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC54bWwgZml4IGxhY2sgb2YgY2FzdCBpbiBYcGF0aCBleGFtcGxlCgkqIGRvYy90dXRvcmlhbC8qLmh0bWwsIHhtbHR1dG9yaWFsLnBkZiByZWJ1aWxkIGh0bWwsIHBkZgoKMjAwNC0wNS0yNSAgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIGMxNG4uYzogZml4ZWQgYzE0biBidWcgd2l0aCBzZXJpYWxpemluZyBhdHRyaWJ1dGUgbmFtZXNwYWNlcwoKTW9uIE1heSAyNCAwODoyMjo0OCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IGZpeGVkIHRvIGFsbG93ICcrJyBpbiBleHBvbmVudCBvZiBudW1iZXIKCSAgKGJ1ZyAxNDMwMDUpCgkqIFNBWDIuYzogZml4ZWQgdHlwbyBpbiBsYXN0IGNvbW1pdAoKU2F0IE1heSAyMiAwOTowODoyNCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIFNBWDIuYzogc2tpcHBlZCBjYWxsIHRvIHhtbFZhbGlkYXRlTkNOYW1lIHdoZW4gY29tcGlsaW5nCgkgIC0td2l0aC1taW5pbXVtIChidWcgMTQyOTE3KQoKVHVlIE1heSAxOCAwNjo0ODowMCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiByZXZlcnRlZCB0aGUgYnJva2VuIGNoYW5nZS4KCk1vbiBNYXkgMTcgMjM6MDc6MTUgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1MgZG9jLyo6IHVwZGF0ZWQgdGhlIGRvY3MgZm9yIDIuNi4xMAoKTW9uIE1heSAxNyAwNTo1MjowMyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIDogcmVsZWFzaW5nIDIuNi4xMAoKU3VuIE1heSAxNiAyMzoxMjozNSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhdm9pZCByZXR1cm5pbmcgZGVmYXVsdCBuYW1lc3BhY2Ugd2hlbiBzZWFyY2hpbmcKCSAgZnJvbSBhbiBhdHRyaWJ1dGUKCSogZW50aXRpZXMuYyB4bWx3cml0ZXIuYzogcmV2ZXJzZSB4bWxFbmNvZGVTcGVjaWFsQ2hhcnMoKSBiZWhhdmlvdXIKCSAgYmFjayB0byBlc2NhcGluZyAiIHNpbmNlIHRoZSBub3JtYWwgc2VyaWFsaXphdGlvbiByb3V0aW5lcyBkbyBub3QKCSAgdXNlIGl0IGFueW1vcmUsIHNob3VsZCBjbG9zZSBidWcgIzEzNDQ3NyAuIFRyaWVkIHRvIG1ha2UgCgkgIHRoZSB3cml0ZXIgYXZvaWQgaXQgdG9vIGJ1dCBpdCBkaWRuJ3Qgd29yay4KClN1biBNYXkgMTYgMDE6MDc6MTYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9DaGFuZ2VMb2cuYXdrIGRvYy9DaGFuZ2VMb2cueHNsOiBmaXhlZCBlc2NhcGluZwoJICBoYW5kbGluZyBhbmQgYWRkZWQgZGlyZWN0IGxpbmtzIHRvIGJ1Z3ppbGxhIHJlcG9ydCBmb3IKCSAgYnVnIG51bWJlcnMuCgpTdW4gTWF5IDE2IDExOjExOjEzIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZXJyb3IuYzogbW9kaWZpZWQgdG8gYXNzdXJlIHByb3BlciB1c2VyIGRhdGEgaXMgc2VudCB0bwoJICBzdHJ1Y3R1cmVkIGVycm9yIHJvdXRpbmUgKGJ1ZyAxNDI1OTgpCgpTdW4gTWF5IDE2IDAzOjE4OjUyIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IGEgY291cGxlIG9mIGxhcmdlIHN0YXRpYyB2YXJpYWJsZSB3aGljaCBzaG91bGQgcmVhbGx5CgkgIG5vdCBiZSBkZWNsYXJlZCBhcyBzdWNoIGNsdXR0ZXJlZCB0aGUgLmJzcyBzZWN0aW9uLgoKU3VuIE1heSAxNiAwMzowNjozMSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL0NoYW5nZUxvZy5hd2s6IGZpeGVkIGEgY291cGxlIG9mIHByb2JsZW1zIHdoZW4gcGFyc2luZwoJICBsaWJ4c2x0IENoYW5nZUxvZwoKU2F0IE1heSAxNSAyMDoxNDoyMSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL0NoYW5nZUxvZy5hd2sgZG9jL0NoYW5nZUxvZy54c2w6IGZpcnN0IHN0ZXBzIG9mIGEgZ29vZAoJICBDaGFuZ2VMb2cgcGFnZSBnZW5lcmF0aW9uLiBUaGUgYXdrIHNob3VkbCBlc2NhcGUgY2hhcmFjdGVycwoJICBub3Qgb2theSBpbiBYTUwgYW5kIHRoZSB4c2x0IHNob3VsZCBtYWtlIGxpbmtzIHRvIGZ1bmN0aW9ucwoJICBvciB2YXJpYWJsZXMgb3IgYnVnIHJlcG9ydGVkIGluIHRoZSBlbnRyaWVzLgoKU2F0IE1heSAxNSAxNDo1Nzo0MCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2F2ZS5jIGluY2x1ZGUvbGlieG1sL3htbHNhdmUuaDogc3RhcnQgYWRkaW5nIEFQSSBmb3IgCgkgIGVzY2FwaW5nIGN1c3RvbWl6YXRpb24uCgpTYXQgTWF5IDE1IDEyOjM4OjE3IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzYXZlLmM6IG1vcmUgeG1sU2F2ZSBjbGVhbnVwLCBvcHRpbWl6YXRpb24gYW5kIHJlZmFjdG9yaW5nCgpGcmkgTWF5IDE0IDE3OjUxOjQ4IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jIHhtbHNhdmUuYzogdGhpcmQgcGFzcyBhdCB0aGUgZXNjYXBpbmcgcmVmYWN0b3JpbmcuCgpGcmkgTWF5IDE0IDEyOjM3OjI0IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcGFyc2VyLmM6IGVuaGFuY2VkIHRoZSBlbmhhbmNlbWVudCwgZml4ZWQgYW5vdGhlciBjb3VwbGUgb2YKCSAgc3BlY2lhbCBjYXNlcy4KCkZyaSBNYXkgMTQgMTE6NDg6MzMgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBwYXJzZXIuYzogc21hbGwgZW5oYW5jZW1lbnQgdG8gZHRkIGhhbmRsaW5nIG9mIChhPykrIChidWcgMTQyNDg3KQoKVGh1IE1heSAxMyAyMzoxOTowMCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYyB4bWxzYXZlLmMgaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogc2Vjb25kIHBhc3Mgb24gZXNjYXBpbmcKCSAgaGFuZGxpbmcsIHN0YXJ0IHRvIGxvb2tzIGJldHRlciwgbmVlZCB0byBiZSBjb21wbGV0ZWQgYW5kIGFkZGVkCgkgIGRpcmVjdGx5IGF0IHRoZSBzYXZpbmcgY29udGV4dCBsZXZlbC4KClRodSBNYXkgMTMgMTA6MzE6MjggQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmMgeG1sc2F2ZS5jIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IGZpcnN0IHBhc3MgYXQgcmVmYWN0b3JpbmcKCSAgdGhlIGVzY2FwZSBvbiBzYXZlIHJvdXRpbmVzIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VzIChsZXNzIG1hbGxvYykKCSAgYW5kIG1vcmUgZmxleGliaWxpdHkgdXNpbmcgdGhlIG5ldyBzYXZpbmcgY29udGV4dC4gUHJlbGltaW5hcnkKCSAgd29yaywgaW50ZXJmYWNlIHdpbGwgY2hhbmdlLgoKV2VkIE1heSAxMiAyMjozNDowMyBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHNjaGVtYXMuYzogYWRkZWQgY29kZSBpbiB4bWxTY2hlbWFCdWlsZEFDb250ZW50TW9kZWwgdG8gaGFuZGxlCgkgIGVsZW1lbnQgcmVmZXJlbmNlIHdpdGhpbiB0aGUgeHM6YWxsIGNvbnN0cnVjdCAoYnVnIDEzOTg5NykKCldlZCBNYXkgMTIgMTc6Mjc6MTggSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4aW5jbHVkZS5jOiBhIGxpdHRsZSBmdXJ0aGVyIGZpeGluZyBvZiBmYWxsYmFjayBwcm9jZXNzaW5nLCB0aGlzCgkgIHRpbWUgZm9yIGZhbGxiYWNrIHdpdGggY2hpbGRyZW4gKGJ1ZyAxMzk1MjApLgoKV2VkIE1heSAxMiAwODoyMTozMyBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHNjaGVtYXMuYzogYWRkZWQgY29kZSBpbiB4bWxTY2hlbWFCdWlsZENvbnRlbnRNb2RlbCB0bwoJICBhbGxvdyByZWYgaW4gZ3JvdXAgZGVmaW5pdGlvbiAoYnVnIDEzNDQxMSkuICBBbHNvIGZpeGVkCgkgIG1pc2MgY29tcGlsYXRpb24gd2FybmluZyBtZXNzYWdlcy4KCSogcmVzdWx0L3NjaGVtYS9ncm91cDBfMF8wLCByZXN1bHQvc2NoZW1hL2dyb3VwMF8wXzAuZXJyOgoJICByZWdlbmVyYXRlZCAobm93IG5vIGVycm9yIHJlcG9ydGVkKS4KClR1ZSBNYXkgMTEgMTE6NTU6NTkgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGZpeCB0byB0aGUgZml4IGZvciAjMTQxODY0IGZyb20gUGF1bCBFbHNldGggIAoJKiBIVE1McGFyc2VyLmMgcmVzdWx0L0hUTUwvZG9jMy5odG06IGFwcGx5IGZpeCBmcm9tIERhdmlkIEdhdHdvb2QgZm9yCgkgICMxNDExOTUgYWJvdXQgdGV4dCBiZXR3ZWVuIGNvbW1lbnRzLgoKVHVlIE1heSAxMSAyMzowNDo0NyBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHNjaGVtYXMuYywgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oLAoJICBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBBcHBsaWVkIHBhdGNoZXMgc3VwcGxpZWQgYnkKCSAgS2FzaW1pZXIgQnVjaGNpay4KCSogdGVzdC9zY2hlbWFzL3BvMV8wLnhtbCwgdGVzdC9zY2hlbWFzL3BvMV8wLnhzZDoKCSAgY2hhbmdlZCB0ZXN0IHRvIGFjY291bnQgZm9yIGFib3ZlIHBhdGNoLgoKVHVlIE1heSAxMSAwOTowNjo1MyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL3Rlc3RzL3RzdExhc3RFcnJvci5weTogYmV0dGVyIHBvcnRhYmlsaXR5IGZpeCBmb3IgZigqYXJncyksCgkgIHVzZSBhcHBseShmLCBhcmdzKSBhcyBTdGVwaGFuZSBCaWRvdWwgc3VnZ2VzdGVkCgpNb24gTWF5IDEwIDE1OjQ5OjIyIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1scmVnZXhwLmM6IGVuaGFuY2VkIHhtbFJlZ1N0YXRlQWRkVHJhbnMgdG8gY2hlY2sgaWYgdHJhbnNpdGlvbgoJICBpcyBhbHJlYWR5IHByZXNlbnQgYW5kLCBpZiBzbywgdG8gaWdub3JlIHRoZSByZXF1ZXN0IHRvIGFkZCBpdC4KCSAgVGhpcyBoYXMgYSB2ZXJ5IGRyYW1hdGljIGVmZmVjdCBvbiBtZW1vcnkgcmVxdWlyZW1lbnRzIGFzIHdlbGwKCSAgYXMgZWZmaWNpZW5jeS4gIEl0IGFsc28gZml4ZXMgYnVnIDE0MTc2Mi4KClN1biBNYXkgIDkgMjA6NDA6NTkgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvdHN0TGFzdEVycm9yLnB5OgoJICBhcHBsaWVkIHBhdGNoIGZyb20gRWQgRGF2aXMgdG8gYWxsb3cgIm1ha2UgdGVzdHMiIHRvIHdvcmsKCSAgd2l0aCBQeXRob24gMS41CgpTdW4gTWF5ICA5IDE5OjQ2OjEzIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzYXZlLmM6IGFwcGx5IGZpeCBmb3IgWEhUTUwxIGZvcm1hdGluZyBmcm9tIE5pY2sgV2VsbG5ob2ZlcgoJICBmaXhlcyBidWcgIzE0MTI2NgoJKiB0ZXN0L3hodG1sY29tcCByZXN1bHQvL3hodG1sY29tcCo6IGFkZGVkIHRoZSBzcGVjaWZpYyByZWdyZXNzaW9uCgkgIHRlc3QKClN1biBNYXkgIDkgMTQ6MDc6MjEgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBmaXggZm9yIGEgcGVkYW50aWMgbWFrZSBjaGVjayB3aXRob3V0IG1ha2UgYWxsIHJlcXVlc3QKClNhdCBNYXkgIDggMjI6NTY6MjIgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jIHhtbElPLmM6IGZpeGluZyBzb21lIHByb2JsZW1zIGluIFVSSSB1bmVzY2FwaW5nCgkgIGFuZCBvdXRwdXQgYnVmZmVyIG9wZW5pbmcsIHRoaXMgc2hvdWxkIGZpeCAjMTQxODY0CgpGcmkgTWF5ICA3IDIyOjMxOjU0IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6IGZpeGVzIHRoZSB1c2Ugb2YgJ2xpc3QnIGFzIGEgcGFyYW1ldGVyCgkqIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogYWRkZWQgeG1sUG9wSW5wdXRDYWxsYmFjayBmb3IKCSAgTWF0dCBTZXJnZWFudAoKVGh1IE1heSAgNiAyMToxNDozOCBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHJlZ2V4cC5jOiBlbmhhbmNlZCB0aGUgaGFuZGxpbmcgb2Ygc3ViZXhwcmVzc2lvbiByYW5nZXMKCSAgd2hpY2ggaGF2ZSBhIG1pbk9jY3VycyBvZiAwIChidWcgMTQwNDc4IGFnYWluKTsgY2xlYW5lZCB1cAoJICBjb21tZW50cyB0aHJvdWdob3V0IHRoZSBtb2R1bGUuCgpUdWUgTWF5ICA0IDAwOjUyOjE2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFkZGluZyBhIC0tbWF4bWVtIG9wdGlvbiB0byBjaGVjayBtZW1vcnkgdXNlZC4KClNhdCBNYXkgIDEgMDE6MDg6NDQgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYyB4bWxzYXZlLmMgcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmM6IEZpeGVkCgkgIGJ1ZyAjMTQxNTI5IGkuZS4gdmFyaW91cyBwcm9ibGVtcyB3aGVuIGJ1aWxkaW5nIHdpdGggLS13aXRob3V0LWh0bWwKCkZyaSBBcHIgMzAgMTg6MTI6MzEgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYyB4bWxyZWFkZXIuYzogZml4aW5nIGJ1ZyAjMTQxMzg0IHdoZXJlIHRoZSByZWFkZXIgZGlkbid0CgkgIGNhbGwgdGhlIGRlcmVnaXN0ZXJpbmcgZnVuY3Rpb25zLiBBbHNvIGFkZGVkIHRoZSBjaGVjayB0bwoJICB4bWxsaW50IC0tc3RyZWFtIC0tY2hrcmVnaXN0ZXIgLgoKRnJpIEFwciAzMCAwODo1Nzo0NyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvTWFrZWZpbGUubXN2YzogYXBwbGllZCBhIHNlY29uZCBwYXRjaCBmcm9tIE1hcmsgVmFrb2MgZm9yCgkgIHJlZ3Jlc3Npb24gdGVzdHMgb24gV2luZG93cwoKVGh1IEFwciAyOSAyMTo0NzoyMyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IG5ldmVyIGNvbW1pdCB3aXRob3V0IHJ1bm5pbmcgbWFrZSB0ZXN0cyBmaXJzdCAhCgpUaHUgQXByIDI5IDIwOjE1OjIwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogZml4IGEgbmFzdHkgcHJvYmxlbSB3aXRoIHJlYWRpbmcgb3ZlciB0aGUgZW5kCgkqIHhtbHNhdmUuYzogZml4IGEgcmVwb3J0ZWQgbWVtb3J5IGxlYWsgYXBwYXJlbnRseQoKVGh1IEFwciAyOSAxNzowNTowMCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvTWFrZWZpbGUubXN2YzogcGF0Y2ggZnJvbSBNYXJrIFZha29jIGZvciByZWdyZXNzaW9uIHRlc3RzCgkgIG9uIFdpbmRvd3MuCgkqIHhwYXRoLmM6IHRoZSBOYU4gcHJvYmxlbSBhbHNvIHNob3dzIHVwIG9uIEJvcmxhbmQKCk1vbiBBcHIgMjYgMjM6Mzc6MTIgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxyZWdleHAuYzogZW5oYW5jZWQgeG1sRkFSZWdFeGVjIHJhbmdlIGV2YWx1YXRpb24gZm9yIG1pbgoJICBvY2N1cnMgMCBwcm9ibGVtcyAtIGZpeGVzIGJ1ZyAxNDA0NzguCgpUaHUgQXByIDIyIDA5OjEyOjQ3IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBybmdwYXJzZXIuYzogdGlueSBwYXRoIGZpeGVzIHRoZSAieG1sQ29udmVydENSTkdGaWxlIiBmdW5jdGlvbiBuYW1lCgkgIGZyb20gS2FzaW1pZXIgQnVjaGNpawoJKiB4bWxzY2hlbWFzLmM6IHJlY3Vyc2l2ZSB4czpleHRlbnNpb24gZml4IGZyb20gdGFpaGVpIGdvaQoKV2VkIEFwciAyMSAwMDoxOToyOSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBzbWFsbCBidWZmZXIgcmVzaXppbmcgaW1wcm92ZW1lbnQgZnJvbSBNb3J0ZW4gV2VsaW5kZXIKCSAgY2xvc2VzICMxNDA2MjkKClR1ZSBBcHIgMjAgMjM6NDA6MTQgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGxhc3QgdmVyc2lvbiBvZiB0aGUgZml4IGZvciBNU0MgdmVyc2lvbiAxMjAwCgpUdWUgQXByIDIwIDE5OjQwOjM3IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzoga2lsbGluZyB0aGUgc3RybmNtcCB2cy4gbWVtY21wIGNvbnRyb3ZlcnN5IGFuZCAjMTQwNTkzCgpUdWUgQXByIDIwIDEzOjI3OjA2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9TQVgyLmg6IEthc2ltaWVyIEJ1Y2hjaWsgcG9pbnRlZCBvdXQgc29tZSAKCSAgaW5leGlzdGVudCBmdW5jdGlvbnMsIGNsZWFuZWQgdGhlbSBvdXQuCgpUdWUgQXByIDIwIDExOjQyOjUwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlcnJvci5jOiBKb2huc29uIENhbWVyb24gcG9pbnRlZCBvdXQgdGhhdAoJICBpbml0R2VuZXJpY0Vycm9yRGVmYXVsdEZ1bmMoKSB3YXMgcmVhbGx5IHdyb25nLgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogeG1sVGV4dFJlYWRlck1vZGUgZW51bQoJICBtdXN0IGJlIG1hZGUgcHVibGljLCBhZGRlZCBzb21lIG1pc3NpbmcgY29tbWVudHMgb24gdGhlIFhNTFJlYWRlcgoJICBoZWFkZXIuCgkqIGMxNG4uYzogQWxleHNleSBmaXhlZCBDMTROIGJ1ZyB3aXRoIHByb2Nlc3NpbmcgbmFtZXNwYWNlcwoJICBmcm9tIGF0dHJpYnV0ZXMKCk1vbiBBcHIgMTkgMjM6Mjc6NDYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgc3R1cGlkICgpIGVycm9yICsgTWFyayBuYW1lLgoKU3VuIEFwciAxOCAyMzo0NTo0NiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi42LjkgcmVsZWFzZQoJKiBkb2MvKiBOZXdzOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgpTdW4gQXByIDE4IDIyOjUxOjQzIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiByZWxheGVkIGlkKCkgdG8gbm90IGNoZWNrIHRhaHQgdGhlIG5hbWUocykgcGFzc2VkCgkgIGFyZSBhY3R1YWxseSBOQ05hbWUsIGRlY2lkZWQgdGhpcyBpbiBhZ3JlZW1lbnQgd2l0aCBBbGVrc2V5IFNhbmluCgkgIHNpbmNlIGV4aXN0aW5nIHNwZWNzIGxpa2UgVmlzYTNEIGJyb2tlIHRoYXQgY29uZm9ybWFuY2UgY2hlY2tpbmcKCSAgYW5kIG90aGVyIHRvb2xzIHNlZW1zIHRvIG5vdCBpbXBsZW1lbnQgaXQgc2lnaC4uLgoJKiBTQVgyLmM6IGNoZWNrIGF0dHJpYnV0ZSBkZWNscyBmb3IgeG1sOmlkIGFuZCB0aGUgdmFsdWUgaXMgYW4KCSAgTkNOYW1lLgoJKiB0ZXN0L3htbGlkL2lkX2VyciogcmVzdWx0L3htbGlkL2lkX2Vycio6IGFkZGVkIGVycm9yIHRlc3RpbmcKClN1biBBcHIgMTggMjE6NDY6MTcgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHdvcmsgYXJvdW5kIE1pY3Jvc29mdCBjb21waWxlciBOYU4gYnVnIHJhaXNlIHJlcG9ydGVkCgkgIGJ5IE1hcmsgVmFrb2MKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaCAKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogZml4ZWQgYSByZWN1c2l2ZSBleHRlbnRpb24gc2NoZW1hcwoJICBjb21waWxhdGlvbiBlcnJvciByYWlzZWQgYnkgdGFpaGVpIGdvaQoKU3VuIEFwciAxOCAxNjo1NzowMiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW46IGtlZXAgdGhlIENoYW5nZUxvZyBjb21wcmVzc2VkIAoJKiB4bWxyZWFkZXIuYzogZml4IGEgc2VnZmF1bHQgd2hlbiB1c2luZyBDbG9zZSgpCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcmVhZGVyOC5weTogdGVzdCBmb3IKCSAgdGhlIENsb3NlKCkgcmVhZGVyIEFQSS4KClNhdCBBcHIgMTcgMjI6NDI6MTMgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxzY2hlbWFzLmMsIHhtbHdyaXRlci5jLCBkb2MvZXhhbXBsZXMvcGFyc2U0LmMsCgkgIGRvYy9leGFtcGxlcy9pbzIuYzogbWlub3Igd2FybmluZyBjbGVhbnVwIChubyBjaGFuZ2UgdG8gbG9naWMpCgkqIHhpbmNsdWRlOiBmaXhlZCByZXR1cm4gdmFsdWUgZm9yIGludGVybmFsIGZ1bmN0aW9uCgkgIHhtbFhJbmNsdWRlTG9hZEZhbGxiYWNrIChub3cgYWx3YXlzIDAgb3IgLTEpCgpTYXQgQXByIDE3IDIxOjMyOjMyIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdmFsaWQuYzogc21hbGwgZW5oYW5jZW1lbnQgdG8gZml4IGJ1ZyAxMzk3OTEKCkZyaSBBcHIgMTYgMTg6NDQ6NDcgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogYXBwbGllZCBwYXRjaGVzIGZyb20gS2FzaW1pZXIgQnVjaGNpawoJICBmb3IgdGhlIGF0dHJpYnV0ZSB1c2Ugc3VwcG9ydAoJKiB0ZXN0L3NjaGVtYXMvYXR0cnVzZSogcmVzdWx0L3NjaGVtYXMvYXR0cnVzZSo6IGFkZGVkIHRoZQoJICB0ZXN0cyB0byB0aGUgcmVncmVzc2lvbiBzdWl0ZS4KCkZyaSBBcHIgMTYgMTg6MjI6MjUgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNhdmUuYzogbW92ZSB0aGUgVE9ETyBhcyBjb21tZW50cyBhcyB0aGUgZnVuY3Rpb24gd2hpbGUgbm90CgkgIGZpbmlzaGVkIGFyZSB1c2FibGUgYXMtaXMKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IHBhdGNoIGZyb20gS2FzaW1pZXIgQnVjaGNpawoJICBpbXBsZW1lbnRpbmcgdW5pb24KCSogdGVzdC9zY2hlbWFzL3VuaW9uXzBfMC54KiByZXN1bHQvc2NoZW1hcy91bmlvbl8wXzAqOiBhZGRlZCBleGFtcGxlCgkqIHB5dGhvbi9NYWtlZmlsZS5hbTogYXBwbGllZCBmaXggZnJvbSBNaWtlIEhvbW1leQoKRnJpIEFwciAxNiAyMzo1ODo0MiBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHBhcnNlci5jOiBmaXhlZCBwcm9ibGVtIHdpdGggZGV0ZWN0aW5nIGV4dGVybmFsIGR0ZAoJICBlbmNvZGluZyAoYnVnIDEzNTIyOSkuCgkqIE1ha2VmaWxlLmFtOiBtaW5vciBjaGFuZ2UgdG8gdGVzdCBsYWJlbAoKRnJpIEFwciAxNiAxNjowOTozMSBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhpbmNsdWRlLmM6IGZpeGVkIHByb2JsZW0gY2F1c2luZyBkdXBsaWNhdGUgZmFsbGJhY2sKCSAgZXhlY3V0aW9uIChidWcgMTM5NTIwKQoJKiB0ZXN0L1hJbmNsdWRlL2RvY3MvZmFsbGJhY2syLnhtbCByZXN1bHQvWEluY2x1ZGUvZmFsbGJhY2syLio6CgkgIGFkZGVkIHRlc3RjYXNlCgpGcmkgQXByICA5IDIzOjQ5OjM3IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVgyLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBhZGRpbmcgeG1sOmlkIGRyYWZ0IHN1cHBvcnQKCSogTWFrZWZpbGUuYW0gdGVzdC94bWxpZC9pZF90c3QqIHJlc3VsdC94bWxpZC9pZF90c3QqOiBhZGRpbmcKCSAgNCBmaXJzdCByZWdyZXNzaW9uIHRlc3RzCgpGcmkgQXByICA5IDExOjU2OjA4IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbjogZml4aW5nIFJlZCBIYXQgYnVnICMxMjA0ODIgLCBsaWJ4bWwyLXB5dGhvbgoJICBzaG91bGQgZGVwZW5kIG9uIHRoZSB2ZXJzaW9uIG9mIHB5dGhvbiB1c2VkIHRvIGNvbXBpbGUgaXQuCgpNb24gQXByICA1IDA5OjA3OjI0IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBKYW1lcyBCdXJzYSwgZnJhbWVzZXQgc2hvdWxkCgkgIGNsb3NlIGhlYWQuCgpGcmkgQXByICAyIDIyOjAyOjI0IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcmVsYXhuZy5jOiBmaXhlZCBwcm9ibGVtIGluIHhtbFJlbGF4TkdDb21wYXJlTmFtZUNsYXNzZXMKCSAgd2hpY2ggd2FzIGNhdXNpbmcgY2hlY2stcmVsYXhuZy10ZXN0LXN1aXRlLnB5IHRlc3QgMzUxIHRvIGZhaWwuCgpGcmkgQXByICAyIDE3OjAzOjQ4IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogbmFub2h0dHAuYzogaW1wbGVtZW50ZWQgZml4IGZvciBNJCBJSVMgcmVkaXJlY3QgcHJvdmlkZWQKCSAgYnkgSWFuIEh1bW1lbAoJKiByZWxheG5nLmM6IGZpeGVkIHByb2JsZW0gd2l0aCBub3RBbGxvd2VkIGNvbXBpbGF0aW9uCgkgIChidWcgMTM4NzkzKQoKVGh1IEFwciAgMSAyMjowNzo1MiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmM6IGZpeCBmb3IgeG1sVXJpRXNjYXBlIG9uICJodHRwOi8vdXNlckBzb21ld2hlcmUuY29tIgoJICBmcm9tIE1hcmsgVmFrb2MuCgoyMDA0LTA0LTAxICBKb2hhbiBEYWhsaW4gIDxqb2hhbkBnbm9tZS5vcmc+CgoJKiBweXRob24vLmN2c2lnbm9yZTogQWRkIGdlbmVyYXRlZCBmaWxlcywgdG8gbWFrZSBjdnMgc2lsZW50LgoKVGh1IEFwciAgMSAxMjo0MTozNiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBzbWFsbCBzaWduZWQtbmVzcyBwYXRjaCBmcm9tIFN0ZXZlIExpdHRsZQoKV2VkIE1hciAzMSAxNzo0NzoyOCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVnZXhwLmM6IHBhdGNoZWQgYSBidWcgaW4gcGFyc2luZyBwcm9kdWN0aW9uIDEgYW5kIDIgb2YKCSAgeG1sc2NoZW1hcyByZWdleHAgdGhhdCBXaWxsaWFtIHBvaW50ZWQgb3V0IHdoaWxlIHdvcmtpbmcgb24KCSAgIzEzNDEyMAoJKiB0ZXN0L3JlZ2V4cC9icmFuY2ggcmVzdWx0L3JlZ2V4cC9icmFuY2g6IGFkZGVkIGEgc3BlY2lmaWMKCSAgcmVncmVzc2lvbiB0ZXN0CgpXZWQgTWFyIDMxIDA5OjUwOjMyIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogTWFrZWZpbGUuYW06IGFkZGVkIFBZVEhPTlBBVEggdG8gcHl0aG9uIHRlc3RzIGZvciBTY2hlbWFzCgkgIGFuZCBSZWxheE5HCgkqIHRlc3QveHNkdGVzdC94c2R0ZXN0c3VpdGUueG1sOiBhZGRlZCB0ZXN0ZmlsZSBmb3IKCSAgU2NoZW1hc1B5dGhvblRlc3RzCgpNb24gTWFyIDI5IDE2OjU2OjQ5IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvZXhhbXBsZXMvZXhhbXBsZXMueHNsIGRvYy9leGFtcGxlcy9pbmRleC5odG1sOiBhZGRlZAoJICBpbmZvcm1hdGlvbiBhYm91dCBjb21waWxpbmcgb24gVW5peAoKTW9uIE1hciAyOSAxNDoxODoxMiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiBmaXhlcyB0aGUgY29tbWVudHMgZm9yIHhtbENhdGFsb2dEdW1wIGFuZCB4bWxEdW1wQUNhdGFsb2cKCSogZG9jLyo6IHJlYnVpbHQgdG8gdXBkYXRlCgpTdW4gTWFyIDI4IDE4OjExOjQxIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzYXZlLmM6IG9wdGltaXplIGluZGVudGF0aW9uIGJhc2VkIG9uIHRoZSBuZXcgY29udGV4dAoKU3VuIE1hciAyOCAxNDoxNzoxMCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2V4YW1wbGVzL3hwYXRoMi5jIGRvYy9leGFtcGxlcy94cGF0aDIucmVzOiBoYW5kbGUgYW5kIGV4cGxhaW4KCSAgYSB2ZXJ5IHRyaWNreSBwcm9ibGVtIHdoZW4gbW9kaWZ5aW5nIHRoZSB0cmVlIGJhc2VkIG9uIGFuIFhQYXRoCgkgIHJlc3VsdCBxdWVyeS4KClNhdCBNYXIgMjcgMDk6NTY6MTQgUFNUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiByZWxheG5nLmM6IGZpeGVkIHByb2JsZW0gd2l0aCBJU19DT01QSUxBQkxFIGZsYWcKCSAgKGJ1ZyAxMzAyMTYpCgpGcmkgTWFyIDI2IDE4OjI4OjMyIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gRGF2ZSBCZWNrZXR0IHRvIGNvcnJlY3QgbGluZSBudW1iZXIKCSAgZXJyb3JzIHdoZW4gdXNpbmcgcHVzaCB3aXRoIENEQVRBCgpGcmkgTWFyIDI2IDE0OjUzOjU4IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9leGFtcGxlcy94cGF0aDEuYzogYWRkZWQgYSB0ZXN0IHRlbXBsYXRlCgkqIGRvYy9leGFtcGxlcy94cGF0aDIuYyBkb2MvZXhhbXBsZXMveHBhdGgyLnJlcyBkb2MvZXhhbXBsZXMvKjoKCSAgYWRkZWQgYSBuZXcgZXhhbXBsZSwgYW5kIG1ha2UgdmFsZ3JpbmQgdGFyZ2V0IAoKRnJpIE1hciAyNiAxMTo0NzoyOSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYXBwbHkgZml4IGZvciAjMTM2NjkzCgpUaHUgTWFyIDI1IDIwOjIxOjAxIE1TVCAyMDA0IEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvZXhhbXBsZXMvaW8yLmMKCSogZG9jL2V4YW1wbGVzL2lvMi5yZXMKCWFkZCB4bWxEb2NEdW1wTWVtb3J5IGV4YW1wbGUgaW4gcmVzcG9uc2UgdG8gbWFpbGluZyBsaXN0IEZBUQoJKHJlYnVpbHQgeG1sIGFuZCBodG1sIGFsc28pCgpUaHUgTWFyIDI1IDEwOjMzOjA1IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmMgdGVzdFhQYXRoLmMgeG1sbGludC5jIHhtbHNjaGVtYXN0eXBlcy5jOiBhcHBsaWVkCgkgIHBhdGNoIGZyb20gTWFyayBWYWtvYyBhdm9pZGluZyB1c2luZyB4bWxQYXJzZSogb3B0aW9uIGFuZCB1c2UKCSAgeG1sUmVhZCogaW5zdGVhZAoJKiB3aW4zMi9NYWtlZmlsZS5iY2I6IHBhdGNoIHRvIEJvcmxhbmQgQysrIGJ1aWxkZXIgZnJvbSBFcmljIFp1cmNoZXIKCSAgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBzb21lIHBhdGhuYW1lcy4KClR1ZSBNYXIgMjMgMTI6MzU6MDggQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGRvYy8qIE5ld3M6IHByZXBhcmluZyAyLjYuOCByZWxlYXNlLCB1cGRhdGVkIGFuZCByZWJ1aWx0CgkgIHRoZSBkb2NzLgoJKiBNYWtlZmlsZS5hbTogdXNlIHZhbGdyaW5nIGZybyB0aGUgbmV3IFB5dGhvbiBiYXNlZCByZWdyZXNzaW9uIHRlc3RzCgpNb24gTWFyIDIyIDIwOjA3OjI3IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogcmVtb3ZlIGEgbWVtb3J5IGxlYWsgb24gc2NoZW1hcyB0eXBlIGZhY2V0cy4KCSogY2hlY2stcmVsYXhuZy10ZXN0LXN1aXRlLnB5IGNoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZTIucHkKCSAgY2hlY2steHNkZGF0YS10ZXN0LXN1aXRlLnB5OiByZWR1Y2UgdmVyYm9zaXR5CgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbTogaW5jb3Jwb3JhdGVkIHRoZSBQeXRob24gcmVncmVzc2lvbnMKCSAgdGVzdHMgZm9yIFJlbGF4LU5HIGFuZCBTY2hlbWFzIERhdGF0eXBlIHRvICJtYWtlIHRlc3RzIgoKTW9uIE1hciAyMiAxNjoxNjoxOCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWx3cml0ZXIuYyBpbmNsdWRlL2xpYnhtbC94bWx3cml0ZXIuaCBkb2MvKiA6IGFwcGxpZWQgcGF0Y2ggZnJvbQoJICBBbGZyZWQgTWlja2F1dHNjaCBmb3IgYmV0dGVyIERURCBzdXBwb3J0LgoJKiBTQVgyLmMgSFRNTHBhcnNlci5jIHBhcnNlci5jIHhpbmNsdWRlLmMgeG1sbGludC5jIHhtbHJlYWRlci5jCgkgIHhtbHNjaGVtYXMuYzogZml4ZWQgYnVnICMxMzc4NjcgaS5lLiBmaXhlZCBwcm9wZXJseSB0aGUgd2F5CgkgIHJlZmVyZW5jZSBjb3VudGluZyBpcyBoYW5kbGVkIGluIHRoZSBYTUwgcGFyc2VyIHdoaWNoIGhhZCB0aGUKCSAgc2lkZSBlZmZlY3Qgb2YgcmVtb3ZpbmcgYSBsb3Qgb2YgaGF6YXJkb3VzIGNydWZ0IGFkZGVkIHRvIHRyeQoJICB0byBmaXggdGhlIHByb2JsZW1zIGFzc29jaWF0ZWQgYXMgdGhleSBwb3BwZWQgdXAuCgkqIHhtbElPLmM6IEZJTEUgKiBjbG9zZSBmaXh1cCBmb3Igc3RkZXJyL3N0ZG91dAoKU3VuIE1hciAyMSAxOToxOTo0MSBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHJlbGF4bmcuYzogYWRkZWQgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIGFuIGVsZW1lbnQgaXMgbm90CgkgIGZvdW5kIHdpdGhpbiBhIDxjaG9pY2U+IChidWcgMTI2MDkzKQoKU2F0IE1hciAyMCAyMjoyNToxOCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHJlZ2V4cC5jOiBlbmhhbmNlZCB0aGUgbG9naWMgb2YgcGFyc2luZyBjaGFyIGdyb3VwcyB0bwoJICBiZXR0ZXIgaGFuZGxlIGluaXRpYWwgb3IgZW5kaW5nICctJyAoYnVnIDEzNTk3MikKClNhdCBNYXIgMjAgMTk6MjY6MDMgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiByZWxheG5nLmM6IGFkZGVkIGNoZWNrIGZvciBleHRlcm5hbCByZWZlcmVuY2UgaW4gCgkgIHhtbFJlbGF4TkdHZXRFbGVtZW50cyAoYnVnIDEzNzcxOCkKCSogdGVzdC9yZWxheG5nL3JuZ2J1Zy0wMDEuKiwgcmVzdWx0L3JlbGF4bmcvcm5nYnVnLTAwMSo6IGFkZGVkCgkgIHJlZ3Jlc3Npb24gdGVzdCBmb3IgYWJvdmUKCldlZCBNYXIgMTcgMTY6Mzc6MjIgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBuYW5vaHR0cC5jOiBhZGRlZCBhIGNsb3NlIGZvciB0aGUgbG9jYWwgZmlsZSBkZXNjcmlwdG9yCgkgIChidWcgMTM3NDc0KQoKTW9uIE1hciAxNSAxNTo0Njo1OSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzYXZlLmM6IHN3aXRjaGVkIHRoZSBvdXRwdXQgcm91dGluZXMgdG8gdXNlIHRoZSBuZXcgY29udGV4dC4KCk1vbiBNYXIgMTUgMTA6Mzc6MTggSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiByZWxheG5nLmM6IGVuaGFuY2VkIHRvIGlnbm9yZSBYTUxfWElOQ0xVREVfU1RBUlQgYW5kIFhNTF9YSU5DTFVERV9FTkQKCSAgbm9kZXMgKGJ1ZyAxMzcxNTMpCgpTdW4gTWFyIDE0IDEzOjE5OjIwIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBhcHBsaWVkIHBhdGNoIGZyb20gSm9obiBCZWxtb250ZSBmb3IgYW55VVJJLgoKV2VkIE1hciAxMCAxNzoyMjo0OCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4IGJ1ZyByZXBvcnRlZCBieSBIb2xnZXIgUmF1Y2gKCSogdGVzdC9hdHQ4IHJlc3VsdC9ub2VudC9hdHQ4IHJlc3VsdC9hdHQ4IHJlc3VsdC9hdHQ4LnJkcgoJICByZXN1bHQvYXR0OC5zYXg6IGFkZGVkIHRoZSB0ZXN0IHRvIHRoIHJlZ3Jlc3Npb24gc3VpdGUKCldlZCBNYXIgMTAgMTk6NDI6MjIgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2Mvc2VhcmNoLnBocDogTWlub3IgY2hhbmdlIGZvciBsYXRlciB2ZXJzb24gb2YgcGhwIHJlcXVpcmluZwoJICAkSFRUUF9HRVRfVkFSUy4KCldlZCBNYXIgMTAgMDA6MTI6MzEgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB0cmVlLmM6IENoYW5nZWQgdGhlIGZsYWcgdG8geG1sRG9jQ29weU5vZGUgKGFuZCBzaW1pbGFyIHJvdXRpbmVzKSwKCSAgcHJldmlvdXNseSB1c2VkIG9ubHkgZm9yIHJlY3Vyc2lvbiwgdG8gdXNlIGEgdmFsdWUgb2YgJzInIHRvCgkgIGluZGljYXRlIGNvcHkgcHJvcGVydGllcyAmIG5hbWVzcGFjZXMsIGJ1dCBub3QgY2hpbGRyZW4uCgkqIHhpbmNsdWRlLmM6IGNoYW5nZWQgdGhlIGhhbmRsaW5nIG9mIHJhbmdlcyB0byB1c2UgdGhlIGFib3ZlIG5ldwoJICBmYWNpbGl0eS4gIEZpeGVzIEJ1ZyAxMzQyNjguCgpUdWUgTWFyICA5IDE4OjQ4OjUxIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogd2luMzIvTWFrZWZpbGUuYmNiLCB3aW4zMi9NYWtlZmlsZS5taW5ndywgd2luMzIvTWFrZWZpbGUubXN2YzoKCSAgYWRkZWQgbmV3IG1vZHVsZSB4bWxzYXZlIHdpdGggcGF0Y2ggc3VwcGxpZWQgYnkgRXJpYyBadXJjaGVyCgkgIChzZWNvbmQgYXR0ZW1wdCAtIGRvbid0IGtub3cgd2hhdCBoYXBwZW5lZCB0byB0aGUgZmlyc3Qgb25lISkKClR1ZSBNYXIgIDkgMDk6NTk6MjUgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHk6IGFwcGxpZWQgcGF0Y2ggZnJvbSBBbnRob255IENhcnJpY28KCSAgcHJvdmlkaW5nIFB5dGhvbiBiaW5kaW5ncyBmb3IgdGhlIENhbm9uaWNhbGl6YXRpb24gQzE0TiBzdXBwb3J0LgoKTW9uIE1hciAgOCAxMToxMjoyMyBDRVQgMjAwNCBIYWdlbiBNb2ViaXVzIDxoYWdlbi5tb2ViaXVzQHN0YXJzY2hpZmZjaGVuLmRlPgoKCSogLmN2c2lnbm9yZSBhbmQgcHl0aG9uLy5jdnNpZ25vcmUgcGF0Y2hlZAoKTW9uIE1hciAgOCAyMjozMzoxNCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhpbmNsdWRlLmM6IGVuaGFuY2VkIHRvIGFzc3VyZSB0aGF0IGlmIHhwb2ludGVyIGlzIGNhbGxlZAoJICBmb3IgYSBkb2N1bWVudCwgdGhlIFhNTF9QQVJTRV9OT0VOVCBmbGFnIGlzIHNldCBiZWZvcmUgcGFyc2luZwoJICB0aGUgaW5jbHVkZWQgZG9jdW1lbnQgc28gdGhhdCBlbnRpdGllcyB3aWxsIGF1dG9tYXRpY2FsbHkgZ2V0CgkgIHRha2VuIGNhcmUgb2YuCgkqIHhwb2ludGVyLmM6IGNvcnJlY3RlZCBjb2RlIHNvIHRoYXQsIGlmIGFuIFhNTF9FTlRJVFlfUkVGIG5vZGUKCSAgaXMgZW5jb3VudGVyZWQsIGl0IHdpbGwgbG9nIGl0IGFuZCBub3QgY3Jhc2ggKGJ1ZyAxMzU3MTMpCgpTdW4gTWFyICA3IDE5OjAzOjQ4IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeGluY2x1ZGUuYzogbW9kaWZpZWQgdG8gbWFrZSBzdWItaW5jbHVkZXMgaW5oZXJpdCB0aGUKCSAgcGFyc2UgZmxhZ3MgZnJvbSB0aGUgcGFyZW50IGRvY3VtZW50IChidWcgMTMyNTk3KQoKRnJpIE1hciAgNSAwMToxMzoyMiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IFFOYW1lIGhhbmRsaW5nIGZpeGVzIGZvciB0aGUgWE1MIFNjaGVtYXMKCSAgc3VwcG9ydCBmcm9tIEFkYW0gRGlja21laXNzCgkqIHRlc3Qvc2NoZW1hcy9wbzFfMC54c2Q6IGFsc28gZml4IHRoZSBzY2hlbWFzCgkqIHRlc3Qvc2NoZW1hcy9uc1sxMl0qIHJlc3VsdC9zY2hlbWFzL25zWzEyXSo6IGFkZGVkIHRoZSBzcGVjaWZpYwoJICByZWdyZXNzaW9uIHRlc3RzCgpUaHUgTWFyICA0IDIzOjAzOjAyIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MvTWFrZWZpbGUuYW0gaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW06CgkgIHBhYWxpZWQgcGF0Y2ggZnJvbSBKdWxpbyBNLiBNZXJpbm8gVmlkYWwgZml4aW5nIGJ1ZyAjMTM0NzUxCgkgIHRvIGZpeCAtLXdpdGgtaHRtbC1kaXIgb3B0aW9uLgoJKiBkb2MvKjogcmVidWlsdCBmdWxseSB0aGUgZG9jcyAKCSogZG9jL2h0bWwvbGlieG1sLXhtbHNhdmUuaHRtbDogbmV3IGZpbGUgZnJvbSBuZXcgaGVhZGVyLgoKVGh1IE1hciAgNCAxNjo1Nzo1MCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jIHRlc3RIVE1MLmMgdHJlZS5jIGRvYy9leGFtcGxlcy8qLmMKCSAgaW5jbHVkZS9saWJ4bWwveG1sc2F2ZS5oOiBmaXhpbmcgY29tcGlsYXRpb24gYnVnIHdpdGggc29tZSBvcHRpb25zCgkgIGRpc2FibGVkIGFzIHdlbGwgYXMgLS13aXRoLW1pbmltdW0gc2hvdWxkIGZpeCAjMTM0Njk1CgpUaHUgTWFyICA0IDE1OjAwOjQ1IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGNhdGFsb2cuYzogYWxsb3cgZmFsbGJhY2sgdG8gVVJJIGxvb2t1cCB3aGVuIFNZU1RFTSBmYWlscywKCSAgc2hvdWxkIGNsb3NlICMxMzQwOTIKClRodSBNYXIgIDQgMTQ6Mzk6MzggQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gdHJlZS5jIHhtbHNhdmUuYyBpbmNsdWRlL2xpYnhtbC94bWxzYXZlLmg6IGNvbW1pdGluZwoJICB0aGUgbmV3IHhtbHNhdmUgbW9kdWxlIGJlZm9yZSB0aGUgYWN0dWFsbCBiaWcgY29kZSBjaGFuZ2UuCgpUaHUgTWFyICA0IDEyOjM4OjUzIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogYXBwbGllZCBwYXRjaCBmcm9tIEFkYW0gRGlja21laXNzIGZvciBtaXhlZCBjb250ZW50CgkqIHRlc3Qvc2NoZW1hcy9taXhlZCogcmVzdWx0L3NjaGVtYXMvbWl4ZWQqOiBhZGRlZCBoaXMgcmVncmVzc2lvbgoJICB0ZXN0cyB0b28uCgpNb24gTWFyICAxIDE1OjIyOjA2IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3RTQVguYzogZml4IGEgY29tcGlsYXRpb24gcHJvYmxlbSBhYm91dCBhIG1pc3NpbmcgdGltYiBpbmNsdWRlCgpTYXQgRmViIDI4IDIyOjM1OjMyIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdGVzdFNBWC5jOiBzbWFsbCBlbmhhbmNlbWVudCB0byBwcmV2ZW50IHRyeWluZyB0byBwcmludAoJICBzdHJpbmdzIHdpdGggbnVsbCBwb2ludGVycyAoY2F1c2VkICJtYWtlIHRlc3RzIiBlcnJvcnMgb24KCSAgSFAtVVgpCgpUaHUgRmViIDI2IDIwOjE5OjQwIE1TVCAyMDA0IEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sbGludC54bWwKCSogZG9jL3htbGxpbnQuMQoJKiBkb2MveG1sbGludC5odG1sCgkqIGRvYy94bWxjYXRhbG9nX21hbi54bWwKCSogZG9jL3htbGNhdGFsb2cuMQoJKiBkb2MveG1sY2F0YWxvZ19tYW4uaHRtbAoJYXBwbHlpbmcgcGF0Y2ggZnJvbSBNaWtlIEhvbW1leSB0byBjbGFyaWZ5IFhNTF9DQVRBTE9HX0ZJTEVTCgl1c2UKClRodSBGZWIgMjYgMjM6NDc6NDMgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IHBhdGNoIGZvciBjcm9zcy1jb21waWxhdGlvbiB0byBXaW5kb3dzIGZyb20KCSAgQ2hyaXN0b3BoZSBkZSBWSUVOTkUuCgpUaHUgRmViIDI2IDE4OjUyOjExIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jLyouaHRtbCwgZG9jL2h0bWwvKi5odG1sOiByZWdlbmVyYXRlZCBkb2NzIHVzaW5nIG9sZGVyCgkgIHZlcnNpb24gb2YgeHNsdHByb2MgcGVuZGluZyByZXNvbHV0aW9uIG9mIEFWVCBwcm9ibGVtCgpUaHUgRmViIDI2IDEwOjU2OjI5IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBhcHBsaWVkIHBhdGNoIGZyb20gQ2hhcmxlcyBCb3plbWFuIHRvIG5vdCB1c2UKCSAgdGhlIHN5c3RlbSB4bWxsaW50LgoKV2VkIEZlYiAyNSAxODowNzowNSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxleHBvcnRzLmg6IGFwcGxpZWQgcGF0Y2ggZnJvbSBSb2xhbmQgU2Nod2luZ2VsCgkgIGZvciBNaW5nVwoKV2VkIEZlYiAyNSAxMzo1NzoyNSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjYXRhbG9nLmMgY29uZmlndXJlLmluOiBhcHBsaWVkIGEgY2xlYW51cCBwYXRjaAoJICBmcm9tIFBldGVyIEJyZWl0ZW5sb2huZXIKCSogdHJlZS5jOiByZW1vdmVkIGEgZG9jIGJ1aWxkIHdhcm5pbmcgYnkgZml4aW5nIGEgcGFyYW0gY29tbWVudAoJKiBkb2MvKiA6IHJlYnVpbHQgdGhlIGRvY3MKCldlZCBGZWIgMjUgMTM6MzM6MDcgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyBIVE1McGFyc2VyLmM6IGF2b2lkIElEIGVycm9yIG1lc3NhZ2UgaWYgdXNpbmcKCSAgSFRNTF9QQVJTRV9OT0VSUk9SIHNob3VsZCBmaXggIzEzMDc2MgoKV2VkIEZlYiAyNSAxMjo1MDo1MyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jIHJlbGF4bmcuYyB2YWxpZC5jIHhpbmNsdWRlLmMgeG1sbGludC5jIHhtbHJlYWRlci5jOgoJICBmaXhpbmcgY29tcGlsYXRpb24gYW5kIGxpbmsgb3B0aW9uIHdoZW4gY29uZmlndXJpbmcgd2l0aAoJICAtLXdpdGhvdXQtdmFsaWQgc2hvdWxkIGZpeCAjMTM1MzA5CgpXZWQgRmViIDI1IDExOjM2OjA2IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogZml4ZWQgdGhlIG1haW4gaXNzdWVzIHJlcG9ydGVkIGJ5IFBldGVyIEJyZWl0ZW5sb2huZXIKCSogcGFyc2VyLmM6IGNsZWFudXAKCSogdmFsaWQuYzogc3BlZWR1cCBwYXRjaCBmcm9tIFBldHIgUGFqYXMKCldlZCBGZWIgMjUgMTY6MDc6MTQgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBmaXhlZCBhIG1lbW9yeSBsZWFrICh4bWxYUGF0aExhbmdGdW5jdGlvbikgcmVwb3J0ZWQKCSAgb24gdGhlIGxpc3QgYnkgTWlrZSBIb21tZXkKCk1vbiBGZWIgMjMgMTc6Mjg6MzQgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jLyogTkVXUyBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjYuNyByZWxlYXNlLCB1cGRhdGVkIGFuZAoJICByZWJ1aWx0IHRoZSBkb2N1bWVudGF0aW9uLgoKTW9uIEZlYiAyMyAxMTo1MjoxMiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vdGVzdHMvKi5weTogYXBwbGllZCBwYXRjaCBmcm9tIE1hbGNvbG0gVHJlZGlubmljawoJICB0byBhdm9pZCB0YWJzIGluIHB5dGhvbiBzb3VyY2VzLCBzaG91bGQgZml4ICMxMzUwOTUKClN1biBGZWIgMjIgMjM6MTY6MjMgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdFNBWC5jOiBhZGQgLS10aW1pbmcgb3B0aW9uCgkqIHJlbGF4bmcuYzogdXNlIHRoZSBwc3ZpIGZpZWxkIG9mIHRoZSBub2RlcyBpbnN0ZWFkIG9mIF9wcml2YXRlCgkgIHdoaWNoIG1heSBiZSB1c2VkIGZvciBvdGhlciBwdXJwb3Nlcy4KClNhdCBGZWIgMjEgMTY6NTc6NDggQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogc21hbGwgcGF0Y2ggdG8gdHJ5IHRvIGZpeCBhIHdhcm5pbmcgd2l0aCBTdW4gT25lIGNvbXBpbGVyCgpTYXQgRmViIDIxIDE2OjIyOjM1IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmM6IHNtYWxsIHBhdGNoIHJlbW92aW5nIGEgd2FybmluZyB3aXRoIE1TIGNvbXBpbGVyLgoKU2F0IEZlYiAyMSAxMzo1MjozMCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBhZGRlZCAicmVsYXhuZyIgb3B0aW9uIHRvIHRoZSBkZWJ1Z2dpbmcgc2hlbGwKCSogTWFrZWZpbGUuYW0gdGVzdC9lcnJvcnMvKiByZXN1bHQvZXJyb3JzLyo6IHNvbWUgcmVncmVzc2lvbiB0ZXN0cwoJICBmb3Igc29tZSBlcnJvciB0ZXN0cyBjYXNlcy4KCkZyaSBGZWIgMjAgMDk6NTY6NDcgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiB4bWxBdHRyU2VyaWFsaXplVHh0Q29udGVudCBkb24ndCBzZWdmYXVsdCBpZiBOVUxMCgkgIGlzIHBhc3NlZC4KCSogdGVzdC9hdHQ3IHJlc3VsdC8vYXR0Nyo6IGFkZGluZyBhbiBvbGQgcmVncmVzc2lvbiB0ZXN0CgkgIGxheWluZyBhcm91bmQgb24gbXkgbGFwdG9wCgpUaHUgRmViIDE5IDE3OjMzOjM2IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBmaXhlZCB4bWxsaW50IC0tbWVtb3J5IC0tc3RyZWFtIG1lbW9yeSBjb25zdW1wdGlvbgoJICBvbiBsYXJnZSBmaWxlIGJ5IHVzaW5nIHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlU3RhdGljKCkgd2l0aAoJICB0aGUgbW1hcCdlZCBmaWxlIAoKVGh1IEZlYiAxOSAxMzo1Njo1MyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHNvbWUgY2xhcmlmaWNhdGlvbiBpbiB4bWxEb2NEdW1wTWVtb3J5KCkgZG9jdW1lbnRhdGlvbgoJKiB4bWxsaW50LmM6IGZpeGVkIHhtbGxpbnQgLS1zdHJlYW0gLS10aW1pbmcgdG8gZ2V0IHRpbWluZ3MgYmFjawoKV2VkIEZlYiAxOCAxNToyMDo0MiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBwcm9ibGVtIGluIHB1c2ggbW9kZSB3aGVuIGF0dHJpYnV0ZSBjb250YWlucwoJICB1bmVzY2FwZWQgJz4nIGNoYXJhY3RlcnMsIGZpeGVzIGJ1ZyAjMTM0NTY2CgkqIHRlc3QvYXR0NiByZXN1bHQvL2F0dDYqOiBhZGRlZCB0aGUgdGVzdCB0byB0aGUgcmVncmVzc2lvbiBzdWl0ZQoKVHVlIEZlYiAxNyAxNzoyNjozMSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiByZW1vdmluZyBhIG5vbi1saW5lYXIgYmVoYXZpb3VyIGZyb20gSUQvSURSRUYgcmFpc2VkCgkgIGJ5IFBldHIgUGFqYXMuIENhbGwgeG1sTGlzdEFwcGVuZCBpbnN0ZWFkIG9mIHhtbExpc3RJbnNlcnQgaW4KCSAgeG1sQWRkUmVmCgpUdWUgRmViIDE3IDEzOjI3OjI3IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi90ZXN0cy9pbmRleGVzLnB5IHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IGluZGljYXRlZAoJICBlbmNvZGluZyBvZiB0aGUgdGVzdCBmaWxlLCBuZWVkZWQgZm9yIHB5dGhvbiAyLjMKClR1ZSBGZWIgMTcgMjE6MDg6MTEgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBmaXhlZCBwcm9ibGVtIHdpdGggbnVtYmVycyBoYXZpbmcgPiAxOQoJICBmcmFjdGlvbmFsIHBsYWNlcyAoYnVnIDEzMzkyMSkKClR1ZSBGZWIgMTcgMTI6NDc6MjAgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogYXBwbGllZCBvcHRpbWl6YXRpb24gcGF0Y2ggZnJvbSBQZXRyIFBhamFzCgpUdWUgRmViIDE3IDEyOjM5OjA4IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHdyaXRlci5jIGluY2x1ZGUvbGlieG1sL3htbHdyaXRlci5oOiBhcHBsaWVkIHVwZGF0ZQoJICBmcm9tIEFsZnJlZCBNaWNrYXV0c2NoIGFuZCB0aGUgYWRkZWQgcGF0Y2ggZnJvbSBMdWNhcyBCcmFzaWxpbm8KClN1biBGZWIgMTUgMTI6MDE6MzAgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYmVuY2htYXJrLnBuZyBpbmRleC5odG1sIHhtbC5odG1sOiB1cGRhdGluZyB0aGUgYmVuY2htYXJrCgkgIGdyYXBoIGFuZCB1c2luZyBhIFBORyBpbnN0ZWFkIG9mIGEgR0lGCgkqIHhtbHJlYWRlci5jOiB1cGRhdGVkIHRoZSBUT0RPCgpTYXQgRmViIDE0IDE4OjU1OjQwIE1TVCAyMDA0IEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvdHV0b3JpYWwveG1sdHV0b3JpYWwueG1sCgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC5wZGYKCSogZG9jL3R1dG9yaWFsLyouaHRtbAoJRml4IGJ1ZyBpbiBYUGF0aCBleGFtcGxlIGluIHRoZSB0dXRvcmlhbCwgdGhhbmtzIHRvIENhcmxvcywgd2hvc2UKCWxhc3QgbmFtZSBJIGRvbid0IGtub3csIGZvciBwb2ludGluZyB0aGlzIG91dAoKVGh1IEZlYiAxMiAxNjoyODoxMiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBORVdTIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIHJlbGVhc2Ugb2YgMi42LjYKCSogZG9jLyo6IHVwZGF0ZWQgdGhlIGRvY3MgYW5kIHJlYnVpbHQgdGhlbQoKVGh1IEZlYiAxMiAxMzo0MToxNiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYzogZml4aW5nIGJ1ZyAjMTMyOTMwIHdpdGggdGhlIHByb3ZpZGVkIHBhdGNoLCBhIGJpdAoJICBzdXNwaWNpb3VzIGFib3V0IGl0IGJ1dCB0aGlzIGlzIGZhaXJseSBjb250YWluZWQgYW5kIHJlZ3Jlc3Npb24KCSAgdGVzdHMgc3RpbGwgcGFzc2VzLgoJKiB0ZXN0L3NjaGVtYXMvYWxsMSogcmVzdWx0L3NjaGVtYXMvYWxsMSo6IGFkZGVkIHRoZSB0ZXN0IHRvCgkgIHRoZSByZWdyZXNzaW9uIHN1aXRlLgoKVGh1IEZlYiAxMiAxMjo1NDoyNiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYnVnICMxMzI1NzUgYWJvdXQgZmluZGluZyB0aGUgZW5kIG9mIHRoZQoJICBpbnRlcm5hbCBzdWJzZXQgaW4gcHVzaCBtb2RlLgoJKiB0ZXN0L2ludHN1YnNldC54bWwgcmVzdWx0L2ludHN1YnNldC54bWwqIHJlc3VsdC9ub2VudC9pbnRzdWJzZXQueG1sOgoJICBhZGRlZCB0aGUgdGVzdCB0byB0aGUgcmVncmVzc2lvbiBzdWl0ZQoKV2VkIEZlYiAxMSAxNDoxOTozMSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYyB4bWxJTy5jIGVuY29kaW5nLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogYWRkZWQgeG1sQnl0ZUNvbnN1bWVkKCkgaW50ZXJmYWNlCgkqIGRvYy8qOiB1cGRhdGVkIHRoZSBiZW5jaG1hcmsgcmVidWlsdCB0aGUgZG9jcwoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL2luZGV4ZXMucHk6IGFkZGVkIGEKCSAgc3BlY2lmaWMgcmVncmVzc2lvbiB0ZXN0IGZvciB4bWxCeXRlQ29uc3VtZWQoKQoJKiBpbmNsdWRlL2xpYnhtbC9lbmNvZGluZy5oIHJuZ3BhcnNlci5jIHRyZWUuYzogc21hbGwgY2xlYW51cHMKCldlZCBGZWIgMTEgMDg6MTM6NTggSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGsKCgkqIHRyZWUuYzogZml4ZWQgbWlzc2luZyBvdXRwdXQgb2YgaW50ZXJuYWwgRFREIHBhcmFtIGVudGl0aWVzIHdoZW4KCSAgbm90aGluZyBlbHNlIHByZXNlbnQgaW4gRFREIChidWcgMTM0MDUyKQoKVHVlIEZlYiAxMCAxOToyNDozOCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGVuY29kaW5nLmM6IGFwcGxpZWQgcGF0Y2ggc3VwcGxpZWQgYnkgQ2hyaXN0b3BoZSBEdWJhY2gKCSAgdG8gZml4IHByb2JsZW0gd2l0aCAtLXdpdGgtbWluaW11bSBjb25maWd1cmF0aW9uCgkgIChidWcgMTMzNzczKQoJKiBuYW5vZnRwLmM6IGZpeGVkIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgcHJvYmxlbSwKCSAgc2ltaWxhciB0byBmaXgganVzdCBhcHBsaWVkIHRvIG5hbm9odHRwLmMuCgpNb24gRmViICA5IDE4OjQwOjIxIENFVCAyMDA0IElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBuYW5vaHR0cC5jOiBmaXhlZCB0aGUgZml4IGZvciB0aGUgYnVmZmVyIG92ZXJmbG93LCB0aGFueAoJICBXaWxsaWFtIDotKQoKTW9uIEZlYiAgOSAyMjozNzoxNCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGFjaW5jbHVkZS5tNCwgY29uZmlndXJlLmluOiBmaXhlZCBwcm9ibGVtIGNvbmNlcm5pbmcKCSAgZGV0ZXJtaW5pbmcgU09DS0xFTl9UIGFzIHBvaW50ZWQgb3V0IGJ5IERhbmllbCBSaWNoYXJkIEcuCgkgIG9uIHRoZSBtYWlsaW5nIGxpc3QKCk1vbiBGZWIgIDkgMTU6MzE6MjQgQ0VUIDIwMDQgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIG5hbm9odHRwLmM6IGZpeGVkIGJ1ZmZlciBvdmVyZmxvdyByZXBvcnRlZCBieSBZdXVpY2hpIFRlcmFuaXNoaQoKTW9uIEZlYiAgOSAxMzo0NTo1OSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBzbWFsbCBwYXRjaCBmcm9tIFBoaWxpcCBMdWRsYW0gdG8gYXZvaWQgd2FybmluZ3MuCgpNb24gRmViICA5IDEzOjQxOjQ3IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmM6IGFwcGxpZWQgYSBzbWFsbCBwYXRjaCBmcm9tIEFsZnJlZCBNaWNrYXV0c2NoCgkgIHRvIGF2b2lkIGFuIG91dCBvZiBib3VuZCBlcnJvciBpbiBpc29sYXQxVG9VVEY4KCkKCk1vbiBGZWIgIDkgMTM6MzU6NTAgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogcmVtb3ZlIHRoZSB3YXJuaW5nIG9uIHRoZSAyMDAxIG5hbWVzcGFjZQoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB4cGF0aC5jOiByZW1vdmUgc29tZSB3YXJuaW5ncwoJICB3aGVuIGNvbXBpbGluZyB3aXRoIE1TVkM2CgkqIG5hbm9odHRwLmM6IGFwcGxpZWQgYSBwYXRjaCB3aGVuIHVzaW5nIF9XSU5TT0NLQVBJXwoKU3VuIEZlYiAgOCAxMjowOTo1NSBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhpbmNsdWRlLmM6IGFkZGVkIGEgc21hbGwgaGFjayB0byBmaXggaW50ZXJmZXJlbmNlIGJldHdlZW4KCSAgbXkgZml4ZXMgZm9yIGJ1Z3MgMTMyNTg1IGFuZCAxMzI1ODguCgkqIHB5dGhvbi9saWJ4bWwuYzogZml4ZWQgcHJvYmxlbSB3aXRoIHNlcmlhbGl6YXRpb24gb2YgbmFtZXNwYWNlCgkgIHJlcG9ydGVkIG9uIHRoZSBtYWlsaW5nIGxpc3QgYnkgQW50aG9ueSBDYXJyaWNvCgpTYXQgRmViICA3IDE2OjUzOjExIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeGluY2x1ZGUuYzogZml4ZWQgcHJvYmxlbSB3aXRoIGZ1bmN0aW9uIHhtbFhJbmNsdWRlQ29weVJhbmdlCgkgIChidWcgMTMzNjg2KS4KCkZyaSBGZWIgIDYgMjE6MDM6NDEgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWx3cml0ZXIuYzogZml4ZWQgcHJvYmxlbSB3aXRoIHJldHVybiB2YWx1ZSBvZgoJICB4bWxUZXh0V3JpdGVyV3JpdGVJbmRlbnQoKSAoYnVnIDEzMzI5NykKCkZyaSBGZWIgIDYgMTk6MDc6MDQgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4aW5jbHVkZS5jOiBjaGFuZ2VkIGNvZGluZyB0byBvdXRwdXQgZ29vZCBYSW5jbHVkZXMgd2hlbgoJICBvbmUgb3IgbW9yZSBiYWQgb25lcyBhcmUgcHJlc2VudCAoYnVnIDEzMjU4OCkKCkZyaSBGZWIgIDYgMTc6MzQ6MjEgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4aW5jbHVkZS5jOiBjb3JyZWN0ZWQgaGFuZGxpbmcgb2YgZW1wdHkgZmFsbGJhY2sgY29uZGl0aW9uCgkgIChidWcgMTMyNTg1KQoKRnJpIEZlYiAgNiAxNToyODozNiBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIEhUTUxwYXJzZXIuYzogYWRkZWQgaW5pdGlhbGlzYXRpb24gZm9yIGN0eHQtPnZjdHh0CgkgIGluIEhUTUxJbml0UGFyc2VyIChidWcgMTMzMTI3KQoJKiB2YWxpZC5jOiBtaW5vciBjb3NtZXRpYyBjaGFuZ2UgKHJlbW92ZWQgQVRUUklCVVRFX1VOVVNFRAoJICBmcm9tIHNldmVyYWwgZnVuY3Rpb24gcGFyYW1zKQoKVHVlIEZlYiAgMyAxNjo0ODo1NyBQU1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhpbmNsdWRlLmM6IGZpeGVkIHByb2JsZW0gcmVnYXJkaW5nIGZyZWVpbmcgb2YgZGljdGlvbmFyeQoJICB3aGVuIHRoZXJlIGFyZSBlcnJvcnMgd2l0aGluIGFuIFhJbmNsdWRlIGZpbGUgKGJ1ZyAxMzMxMDYpLgoJICBUaGFua3MgdG8gT2xlZyBQYXJhc2NoZW5rbyBmb3IgdGhlIGFzc2lzdGFuY2UuCgpUdWUgRmViICAzIDA5OjUzOjE4IFBTVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGZpeGVkIHZhbGlkYXRpb24gb2YgbWF4TGVuZ3RoIHdpdGggbm8KCSAgY29udGVudCB1c2luZyBwYXRjaCBzdWJtaXR0ZWQgYnkgRXJpYyBIYXN6bGFraWV3aWN6CgkgIChidWcgMTMzMjU5KQoKVHVlIEZlYiAgMyAwOToyMTowOSBDRVQgMjAwNCBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmggaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IGFkZGVkCgkgIGNhbGxpbmcgY29udmVudGlvbiB0byB0aGUgcHVibGljIGZ1bmN0aW9uIHByb3RvdHlwZXMgKHJlcCBieQoJICBDYW1lcm9uIEpvaG5zb24pCgkqIGluY2x1ZGUvbGlieG1sL3htbGV4cG9ydHMuaDogZml4ZWQgbWluZ3crbXN5cyBjb21waWxhdGlvbgoJICAocmVwIGJ5IE1pa2hhaWwgR3J1c2hpbnNraXkpCgpNb24gRmViICAyIDIwOjIyOjE4IFBTVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sd3JpdGVyLmM6IGVuaGFuY2VkIG91dHB1dCBpbmRlbnRpbmcgKGJ1ZyAxMzMyNjQpCgpNb24gRmViICAyIDE2OjEzOjMzIFBTVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1scmVhZGVyLmMsIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiBhcHBsaWVkIHBhdGNoIGZyb20KCSAgU3RldmUgQmFsbCB0byBwcm92aWRlIHN0cnVjdHVyZWQgZXJyb3IgcmVwb3J0cy4KClN1biBGZWIgIDEgMDE6NDg6MTQgUFNUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB0cmVlLmMsIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogbW92ZWQgc2VyaWFsaXphdGlvbiBvZgoJICBhdHRyaWJ1dGUgdGV4dCBkYXRhICh4bWxTZXJpYWxpemVDb250ZW50KSBpbnRvIGEgc2VwYXJhdGUKCSAgcm91dGluZSAoeG1sU2VyaWFsaXplVHh0Q29udGVudCkgc28gaXQgY2FuIGJlIHVzZWQgYnkgeG1sd3JpdGVyLmMKCSogeG1sd3JpdGVyLmM6IGNoYW5nZWQgaGFuZGxpbmcgb2YgYXR0cmlidXRlIHN0cmluZyB0byB1c2UgdGhlCgkgIHJvdXRpbmUgYWJvdmUgKGZpeGVkIGJ1ZyAxMzE1NDgpCgpTYXQgSmFuIDMxIDA4OjIyOjAyIE1TVCAyMDA0IEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQKCgkqIGRvYy9leGFtcGxlcy9yZWFkZXIxLmMsIHJlYWRlcjIuYywgcmVhZGVyMy5jCgkqIGRvYy9leGFtcGxlcy9leGFtcGxlcy54bWwKCSogZG9jL2V4YW1wbGVzLyouaHRtbAoJYWRkIG5vdGUgdGhhdCByZWFkZXIgZXhhbXBsZXMgbmVlZCBsaWJteGwyID4gMi42LCByZWJ1aWxkCglodG1sIC0gdGhpcyB0aW1lIGRvaW5nIGl0IGNvcnJlY3RseSA6LSkKCkZyaSBKYW4gMzAgMjA6NDU6MzYgTVNUIDIwMDQgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy9leGFtcGxlcy9leGFtcGxlcy54bWwKCSogZG9jL2V4YW1wbGVzLyouaHRtbAoJYWRkIG5vdGUgdGhhdCByZWFkZXIgZXhhbXBsZXMgbmVlZCBsaWJteGwyID4gMi42LCByZWJ1aWxkCglodG1sCgpUaHUgSmFuIDI5IDIzOjUxOjQ4IFBTVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogYWRkZWQgKHZvaWQgKikgdHlwZSBvdmVycmlkZSB0byBwcmV2ZW50CgkgIHdhcm5pbmcgb24gU29sYXJpcyAoQnVnIDEzMjY3MSkKCldlZCBKYW4gMjggMDc6MjA6MzcgTVNUIDIwMDQgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy9leGFtcGxlcy9NYWtlZmlsZS5hbQoJcGVyIEphbi4gMTUgZW1haWwgdG8gdGhlIGxpc3QgZnJvbSBvbGl2ZXJzdCwgdGhlIGluZGV4Lmh0bWwKCWZpbGUgZnJvbSB0aGlzIGRpcmVjdG9yeSB3YXNuJ3QgbWFraW5nIGl0IGludG8gdGhlIHRhcmJhbGwKCk1vbiBKYW4gMjYgMTg6MDE6MDAgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYWNpbmNsdWRlLm00OiBhcHBsaWVkIGZpeCBmcm9tIEFsZXhhbmRlciBXaW5zdG9uIGZvciBhIHByb2JsZW0KCSAgcmVsYXRlZCB0byBhdXRvbWFrZS0xLjggLCBjLmYuICMxMzI1MTMgYW5kICMxMjk4NjEKCk1vbiBKYW4gMjYgMTI6NTM6MTEgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2V4YW1wbGVzL2luZGV4LnB5OiBkb24ndCByZWx5IG9uIC4gYmVpbmcgb24gdGhlIHBhdGggZm9yCgkgIG1ha2UgdGVzdHMsIHNob3VsZCBrZWVwIE1yLiBDcm96YXQgcXVpZXQgdW50aWwgbmV4dCB0aW1lLi4uCgpTdW4gSmFuIDI1IDIxOjQ1OjAzIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBORVdTIGRvYy8qOiBwcmVwYXJpbmcgcmVsZWFzZSAyLjYuNSwgcmVidWlsdCB0aGUKCSAgZG9jcywgY2hlY2tlZCBybmdwYXJzZXIgc3R1ZmYgZG9lcyBub3QgZW5kIHVwIGluIHRoZSB0YXJiYWxsCgpTdW4gSmFuIDI1IDIwOjU5OjIwIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYzogYXBwbGllZCBwYXRjaCBmcm9tIEZyZWRlcmljIFBldGVycwoJICBmaXhpbmcgdGhlIHdyb25nIGFyZyBvcmRlciBpbiB4cGF0aCBjYWxsYmFjayBpbiBidWcgIzEzMDk4MAoKU3VuIEphbiAyNSAyMDo1MjowOSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBmaXhpbmcgIzEzMDQ1MyBYSW5jbHVkZSBlbGVtZW50IHdpdGggbm8gaHJlZiBhdHRyaWJ1dGUKCSogcmVsYXhuZy5jIHJuZ3BhcnNlci5jIGluY2x1ZGUvbGlieG1sMi9yZWxheG5nLmg6IGZ1bGx5IGludGVncmF0aW5nIAoJICB0aGUgY29tcGFjdCBzeW50YXggd2lsbCByZXF1aXJlIG1vcmUgd29yaywgcG9zdHBvbmVkIGZvciB0aGUKCSAgMi42LjUgcmVsZWFzZS4KClNhdCBKYW4gMjQgMDk6MzA6MjIgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oIHhtbHNjaGVtYXMuYzogYXBwbGllZCBwYXRjaCBmcm9tCgkgIFN0ZXZlIEJhbGwgdG8gYXZvaWQgYSBkb3VibGUtZnJlZS4KCkZyaSBKYW4gMjMgMTQ6MDM6MjEgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2V4YW1wbGVzLyo6IGFkZGVkIGlvMS5jIGFuIGV4YW1wbGUgb3ggeG1sSU8gdXNhZ2UgYW5kIGlvMS5yZXMKCSAgdGVzdCByZXN1bHQsIGZpeGVkIGEgYXdmdWwgbG90IG9mIG1lbW9yeSBsZWFrcyBzaG93aW5nIHVwIGluCgkgIHRlc3RXcml0ZXIuYywgY2hhbmdlZCB0aGUgZXhhbXBsZXMgYW5kIHRoZSBNYWtlZmlsZXMgdG8gdGVzdAoJICBtZW1vcnkgbGVha3MuCgkqIHhtbHdyaXRlci5jOiBmaXhlZCBhIG1lbW9yeSBsZWFrCgkqIE1ha2VmaWxlLmFtOiBydW4gdGhlIGRvYy9leGFtcGxlcyByZWdyZXNzaW9uIHRlc3RzIGFzIHBhcnQgb2YKCSAgbWFrZSB0ZXN0cwoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoLmg6IGFkZGVkIHhtbFhQYXRoQ3R4dENvbXBpbGUoKSB0bwoJICBjb21waWxlIGFuIFhQYXRoIGV4cHJlc3Npb24gd2l0aGluIGEgY29udGV4dCwgY3VycmVudGx5IHRoZSBnb2FsCgkgIGlzIHRvIGJlIGFibGUgdG8gcmV1c2UgdGhlIFhTTFQgc3R5bGVzaGVldCBkaWN0aW9ubmFyeSwgYnV0IHRoaXMKCSAgb3BlbnMgdGhlIGRvb3IgdG8gb3RoZXJzIHBvc3NpYmxlIG9wdGltaXphdGlvbnMuCgkqIGRpY3QuYyBpbmNsdWRlL2xpYnhtbC9kaWN0Lmg6IGFkZGVkIHhtbERpY3RDcmVhdGVTdWIoKSB3aGljaCBhbGxvd3MKCSAgdG8gYnVpbGQgYSBuZXcgZGljdGlvbm5hcnkgYmFzZWQgb24gYW5vdGhlciByZWFkLW9ubHkgZGljdGlvbm5hcnkuCgkgIFRoaXMgaXMgbmVlZGVkIGZvciBYU0xUIHRvIGtlZXAgdGhlIHN0eWxlc2hlZXQgZGljdGlvbm5hcnkgcmVhZC1vbmx5CgkgIHdoaWxlIGJlaW5nIGFibGUgdG8gcmV1c2UgdGhlIHN0cmluZ3MgZm9yIHRoZSB0cmFuc2Zvcm1hdGlvbgoJICBkaWN0aW9ubmFyeS4KCSogeGluY2x1ZGUuYzogZml4ZWQgYSBkaWN0aW9ubmFyIHJlZmVyZW5jZSBjb3VudGluZyBwcm9ibGVtIG9jY3VyaW5nCgkgIHdoZW4gZG9jdW1lbnQgcGFyc2luZyBmYWlsZWQuCgkqIHRlc3RTQVguYzogYWRkaW5nIG9wdGlvbiAtLXJlcGVhdCBmb3IgdGltaW5nIDEwMHRpbWVzIHRoZSBwYXJzaW5nCgkqIGRvYy8qIDogcmVidWlsdCBhbGwgdGhlIGRvY3MKClRodSBKYW4gMjIgMTQ6MTc6MDUgMjAwNCAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiB4bWxtZW1vcnkuYzogbWFrZSB4bWxSZWFsbG9jTG9jKCkgYWNjZXB0IE5VTEwgcG9pbnRlcgoKVGh1IEphbiAyMiAwODoyNjoyMCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogYXBwbGllZCBwYXRjaCBmcm9tIEpvaG4gQmVsbW9udGUgZm9yCgkgIG5vcm1hbGl6ZWRTdHJpbmcgZGF0YXR5cGUgc3VwcG9ydC4KClRodSBKYW4gMjIgMTA6NDM6MjIgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBmaXhlZCBwcm9ibGVtIHdpdGggdW5pb24gd2hlbiBsYXN0KCkgaXMgdXNlZAoJICBpbiBwcmVkaWNhdGUgKGJ1ZyAjMTMxOTcxKQoJKiB4cG9pbnRlci5jOiBtaW5vciBjaGFuZ2UgdG8gY29tbWVudCBmb3IgZG9jIGdlbmVyYXRpb24KCldlZCBKYW4gMjEgMTc6MDM6MTcgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIGJ1ZyAjMTMxNzQ1IHJhaXNlZCBieSBTaGF1biBNY0NhbmNlIHdpdGggdGhlCgkgIHN1Z2dlc3RlZCBwYXRjaAoKV2VkIEphbiAyMSAxMDo1OTo1NSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWx3cml0ZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIEFsZnJlZCBNaWNrYXV0c2NoIGZpeGluZyBhIG1lbW9yeQoJICBsZWFrIHJlcG9ydGVkIG9uIHRoZSBsaXN0LgoKVGh1IEphbiAxNSAwMDo0ODo0NiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi90ZXN0cy90c3RMYXN0RXJyb3IucHk6IGFwcGxpZWQKCSAgcGF0Y2ggZnJvbSBTdGVwaGFuZSBCaWRvdWwgdG8gYWRkIGVudW1zIHRvIHRoZSBQeXRob24gYmluZGluZ3MuCgpUdWUgSmFuIDEzIDIxOjUwOjA1IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3RIVE1MLmM6IGFub3RoZXIgc21hbGwgcGF0Y2ggZnJvbSBNYXJrIFZha29jCgpUdWUgSmFuIDEzIDIxOjM5OjU4IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyByZWxheG5nLmMgdGVzdFJlbGF4LmMgdGVzdFNjaGVtYXMuYzogYXBwbGllZAoJICBwYXRjaCBmcm9tIE1hcmsgVmFrb2MgdG8gbm90IHVzZSBTQVgxIHVubGVzcyBuZWNlc3NhcnkuCgpNb24gSmFuIDEyIDE3OjIyOjU3IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRpY3QuYyBwYXJzZXIuYyB4bWxzdHJpbmcuYzogc29tZSBwYXJzZXIgb3B0aW1pemF0aW9ucywKCSAgeG1sbGludCAtLW1lbW9yeSAtLXRpbWluZyAtLXJlcGVhdCAtLXN0cmVhbSAuL2RiMTAwMDAueG1sCgkgIHdlbnQgZG93biBmcm9tIDE2LjUgc2VjcyB0byAxNS41IHNlY3MuCgpUaHUgSmFuICA4IDE3OjU3OjUwIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogcmVtb3ZlZCBhIG1lbW9yeSBsZWFrIHJlbWFpbmluZyBmcm9tIHRoZSBzd2l0Y2gKCSAgdG8gYSBkaWN0aW9ubmFyeSBmb3Igc3RyaW5nIGFsbG9jYXRpb25zIGMuZi4gIzEzMDg5MQoKVGh1IEphbiAgOCAxNzo0ODo0NiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogZml4aW5nIHNvbWUgcHJvYmxlbSBpZiBjb25maWd1cmVkIC0td2l0aG91dC14aW5jbHVkZQoJICBjLmYuICMxMzA5MDIKClRodSBKYW4gIDggMTc6NDI6NDggQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBjaGFuZ2VkIEFDX09VVFBVVCgpIG1hY3JvIHRvIGF2b2lkIGEgY3lnd2luIHByb2JsZW0KCSAgYy5mLiAjMTMwODk2CgpUaHUgSmFuICA4IDAwOjM2OjAwIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLmJjYiB3aW4zMi9NYWtlZmlsZS5taW5ndyB3aW4zMi9NYWtlZmlsZS5tc3ZjOgoJICBhcHBseWluZyBwYXRjaCBmcm9tIE1hcmsgVmFrb2MgZm9yIFdpbmRvd3MKCSogZG9jL2NhdGFsb2cuaHRtbCBkb2MvZW5jb2RpbmcuaHRtbCBkb2MveG1sLmh0bWw6IGFwcGxpZWQgZG9jCgkgIGZpeGVzIGZyb20gU3ZlbiBaaW1tZXJtYW4KClR1ZSBKYW4gIDYgMjM6NTE6NDYgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmMKCSAgcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy90c3RMYXN0RXJyb3IucHk6IGFwcGxpZWQgCgkgIHBhdGNoIGZyb20gU3RlcGhhbmUgQmlkb3VsIGZvciBzdHJ1Y3R1cmVkIGVycm9yIGhhbmRsaW5nIGZyb20KCSAgcHl0aG9uLCBhbmQgdGhlIGFzc29jaWF0ZWQgdGVzdAoKVHVlIEphbiAgNiAyMzoxODoxMSBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgQnVnMTMwNTkzCgkqIHhtbHdyaXRlci5jOiBmaXhlZCBjb21waWxhdGlvbiB3YXJuaW5nCgpUdWUgSmFuICA2IDE1OjE1OjIzIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHN0cmluZy5oOiBmaXhlZCB0aGUgY29tbWVudCBpbiB0aGUgaGVhZGVyCgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2NzCgpUdWUgSmFuICA2IDE5OjQwOjA0IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZW5jb2RpbmcuYywgcGFyc2VyLmMsIHhtbHN0cmluZy5jLCBNYWtlZmlsZS5hbSwKCSAgaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0sIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuYywKCSAgaW5jbHVkZS9saWJ4bWwvY2h2YWxpZC5oLCBpbmNsdWRlL2xpYnhtbC9lbmNvZGluZy5oLAoJICBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCwgaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oLAoJICBpbmNsdWRlL2xpYnhtbC90cmVlLmgsIGluY2x1ZGUvbGlieG1sL3htbHdyaXRlci5oLAoJICBpbmNsdWRlL2xpYnhtbC94bWxzdHJpbmcuaDoKCSAgbW92ZWQgc3RyaW5nIGFuZCBVVEY4IHJvdXRpbmVzIG91dCBvZiBwYXJzZXIuYyBhbmQgZW5jb2RpbmcuYwoJICBpbnRvIGEgbmV3IG1vZHVsZSB4bWxzdHJpbmcuYyB3aXRoIGluY2x1ZGUgZmlsZQoJICBpbmNsdWRlL2xpYnhtbC94bWxzdHJpbmcuaCBtb3N0bHkgdXNpbmcgcGF0Y2hlcyBmcm9tIFJlaWQKCSAgU3BlbmNlci4gIFNpbmNlIHhtbENoYXIgbm93IGRlZmluZWQgaW4geG1sc3RyaW5nLmgsIHNldmVyYWwKCSAgaW5jbHVkZSBmaWxlcyBuZWVkZWQgdG8gaGF2ZSBhICNpbmNsdWRlIGFkZGVkIGZvciBzYWZldHkuCgkqIGRvYy9hcGlidWlsZC5weTogYWRkZWQgc29tZSBhZGRpdGlvbmFsIHNvcnRpbmcgZm9yIHZhcmlvdXMKCSAgcmVmZXJlbmNlcyBkaXNwbGF5ZWQgaW4gdGhlIEFQSXh4eC5odG1sIGZpbGVzLiAgUmVidWlsdCB0aGUKCSAgZG9jcywgYW5kIGFsc28gYWRkZWQgbmV3IGZpbGUgZm9yIHhtbHN0cmluZyBtb2R1bGUuCgkqIGNvbmZpZ3VyZS5pbjogc21hbGwgYWRkaXRpb24gdG8gaGVscCBteSB0ZXN0aW5nOyBubyBlZmZlY3Qgb24KCSAgbm9ybWFsIHVzYWdlLgoJKiBkb2Mvc2VhcmNoLnBocDogYWRkZWQgJF9HRVRbcXVlcnldIHNvIHRoYXQgcGVyc2lzdGVudCBnbG9iYWxzCgkgIGNhbiBiZSBkaXNhYmxlZCAoZm9yIHJlY2VudCB2ZXJzaW9ucyBvZiBQSFApCgpNb24gSmFuICA1IDIwOjQ3OjA3IE1TVCAyMDA0IEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvdHV0b3JpYWwvY3VzdG9tZm8ueHNsCgkqIGRvYy90dXRvcmlhbC9jdXN0b21odG1sLnhzbAoJdXBkYXRlIGN1c3RvbSB0dXRvcmlhbC1idWlsZGluZyBzdHlsZXNoZWV0cyBpbiBwcmVwYXJhdGlvbgoJZm9yIHR1dG9yaWFsIHVwZGF0ZQoKVHVlIEphbiAgNiAwMDoxMDozMyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBybmdwYXJzZXIuYzogY29tbWl0aW5nIHRoZSBjb21wYWN0IHJlbGF4IG5nIHBhcnNlci4gSXQncyBub3QKCSAgY29tcGxldGVseSBmaW5pc2hlZCwgaXQncyBub3QgaW50ZWdyYXRlZCBidXQgSSB3YW50IHRvIHNhdmUgdGhlCgkgIGN1cnJlbnQgc3RhdGUKCk1vbiBKYW4gIDUgMjI6MjI6NDggSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MvYXBpYnVpbGQucHksIGRvYy9BUEljb25zdHJ1Y3RvcnMuaHRtbCwgZG9jL2xpYnhtbDItcmVmcy54bWwsCgkgIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogZml4ZWQgYXBpYnVpbGQucHkncyBnZW5lcmF0aW9uIG9mCgkgICJjb25zdHJ1Y3RvcnMiIHRvIGJlIGluIGFscGhhYmV0aWNhbCBvcmRlciAoaW5zdGVhZCBvZiBwcmV2aW91cwoJICByYW5kb20gc2VxdWVuY2UpOyByZWdlbmVyYXRlZCByZXN1bHRpbmcgZmlsZXMuCgpNb24gSmFuICA1IDE0OjAzOjU5IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHdyaXRlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gTHVjYXMgQnJhc2lsaW5vIGZpeGluZyBhbiBpbmRlbnQKCSAgcHJvYmxlbS4KClN1biBKYW4gIDQgMTg6NTQ6MjkgTVNUIDIwMDQgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy9uZXdhcGkueHNsOiBjaGFuZ2UgYmFja2dyb3VuZCBjb2xvciBvZiBmdW5jdGlvbgoJZGVjbGFyYXRpb24gdG8gaW1wcm92ZSByZWFkYWJpbGl0eQoJKiBkb2MvKjogcmVidWlsZCBkb2NzIHdpdGggbmV3IHN0eWxlc2hlZXQKClN1biBKYW4gIDQgMjI6NDU6MTQgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JhcmNrQG1tbS5jb20uaGs+CgoJKiBwYXJzZXIuYywgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IGFkZGVkIGEgcm91dGluZQoJICB4bWxTdHJuY2F0TmV3IHRvIGNyZWF0ZSBhIG5ldyBzdHJpbmcgZnJvbSAyIGZyYWdzLgoJKiB0cmVlLmM6IGFkZGVkIGNvZGUgdG8gY2hlY2sgaWYgbm9kZSBjb250ZW50IGlzIGZyb20KCSAgZGljdGlvbmFyeSBiZWZvcmUgdHJ5aW5nIHRvIGNoYW5nZSBvciBjb25jYXRlbmF0ZS4KClN1biBKYW4gIDQgMDg6NTc6NTEgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxtZW1vcnkuYzogYXBwbGllZCBzdWdnZXN0aW9uIGZyb20gTWlsb3NsYXYgVHJtYWMgKHNlZQoJICBCdWcgMTMwNDE5KSBhbmQgZWxpbWluYXRlZCB4bWxJbml0TWVtb3J5RG9uZS4gIE1vcmUKCSAgaW1wcm92ZW1lbnQgbmVlZGVkLgoJKiB4bWwyLWNvbmZpZy5pbjogYWRkZWQgYW4gYWRkaXRpb25hbCBmbGFnICgtLWV4ZWMtcHJlZml4KSB0bwoJICBhbGxvdyBsaWJyYXJ5IGRpcmVjdG9yeSB0byBiZSBkaWZmZXJlbnQgZnJvbSBpbmNsdWRlIGRpcmVjdG9yeQoJICAoQnVnIDEyOTU1OCkuCgpGcmkgSmFuICAyIDIxOjIyOjE4IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVycm9yLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBTdOlwaGFuZSBCaWRvdWwgZm9yIHN0cnVjdHVyZWQgZXJyb3IKCSAgcmVwb3J0aW5nLgoKRnJpIEphbiAgMiAyMTowMzoxNyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWx3cml0ZXIuaCB4bWx3cml0ZXIuYzogYXBwbGllZCB0aGUgcGF0Y2ggZnJvbQoJICBMdWNhcyBCcmFzaWxpbm8gdG8gYWRkIGluZGVudGF0aW9uIHN1cHBvcnQgdG8geG1sV3JpdGVyCgpGcmkgSmFuICAyIDIyOjU4OjI5IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeGluY2x1ZGUuYzogZml4ZWQgcHJvYmxlbSB3aXRoICJyZWN1cnNpdmUiIGluY2x1ZGUgKGZhbGxiYWNrCgkgIGNvbnRhaW5zIGFub3RoZXIgaW5jbHVkZSAtIEJ1ZyAxMjk5NjkpCgpGcmkgSmFuICAyIDExOjQwOjA2IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWDIuYzogZm91bmQgYW5kIGZpeGVkIGEgYnVnIG1pc2FsbG9jYXRpbmcgc29tZSBub24KCSAgYmxhbmsgdGV4dCBub2RlIHN0cmluZ3MgZnJvbSB0aGUgZGljdGlvbm5hcnkuCgkqIHhtbG1lbW9yeS5jOiBmaXhlZCBhIHByb2JsZW0gd2l0aCB0aGUgbWVtb3J5IGRlYnVnIG11dGV4CgkgIHJlbGVhc2UuCgpXZWQgRGVjIDMxIDIyOjAyOjM3IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeGluY2x1ZGUuYzogZml4ZWQgcHJvYmxlbSBjYXVzZWQgYnkgd3JvbmcgZGljdGlvbmFyeQoJICByZWZlcmVuY2UgY291bnQsIHJlcG9ydGVkIG9uIHRoZSBsaXN0IGJ5IENocmlzdG9waGVyCgkgIEdyYXljZS4KCldlZCBEZWMgMzEgMTU6NTU6NTUgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5LCBweXRob24vbGlieG1sMmNsYXNzLnR4dDogZml4ZWQgcHJvYmxlbQoJICBwb2ludGVkIG91dCBieSBTdOlwaGFuZSBCaWRvdWwgb24gdGhlIGxpc3QuCgkqIHhpbmNsdWRlLmMsIHhwb2ludGVyLmMsIHhwYXRoLmMsIGluY2x1ZGUvbGlieG1sL3hwb2ludGVyLmg6CgkgIGNvbXBsZXRlZCBtb2RpZmljYXRpb25zIHJlcXVpcmVkIHRvIGZpeCBCdWcgMTI5OTY3IChhdCBsYXN0ISkuCgkgIE5vdyB3YWl0IHRvIHNlZSBob3cgbG9uZyBiZWZvcmUgZnVydGhlciB0cm91YmxlLi4uCgpUdWUgRGVjIDMwIDE2OjI2OjEzIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcGFyc2VyLmMsIHhtbG1lbW9yeS5jLCBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogRml4ZWQKCSAgbWVtb3J5IGxlYWsgcmVwb3J0ZWQgYnkgRGF2ZSBCZWNrZXR0CgkqIHhtbHNjaGVtYXMuYzogUmVtb3ZlZCBzcHVyaW91cyBjb21tZW50IHJlcG9ydGVkIG9uIHRoZSBtYWlsaW5nCgkgIGxpc3QKCSogeGluY2x1ZGUuYywgeHBhdGguYywgeHBvaW50ZXIuYywgbGlieG1sL2luY2x1ZGUveHBvaW50ZXIuaDoKCSAgRnVydGhlciB3b3JrIG9uIEJ1ZyAxMjk5NjcgY29uY2VybmluZyB4cG9pbnRlciByYW5nZSBoYW5kbGluZwoJICBhbmQgcmFuZ2UtdG8gZnVuY3Rpb247IG11Y2ggYmV0dGVyLCBidXQgc3RpbGwgbm90IGNvbXBsZXRlCgpNb24gRGVjIDI5IDE4OjA4OjA1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IHhtbFZhbGlkYXRlRWxlbWVudCBjb3VsZCBjcmFzaCBmb3IgZWxlbWVudCBob2xkaW5nIGEgCgkgIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBidXQgbm90IGluIGEgbmFtZXNwYWNlLiBPbGl2ZXIgRmlzY2hlciAKCSAgcHJvdmlkZWQgdGhlIGV4YW1wbGUuCgpNb24gRGVjIDI5IDExOjI5OjMxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogaXNzdWUgdmFsaWRhdGlvbiBzdGF0dXMgb24gc3RkZXJyLCBub3Qgc3Rkb3V0IGFzIHN1Z2dlc3RlZAoJICBieSBQYXdlbCBQYWx1Y2hhCgkqIHJlc3VsdC9yZWxheG5nLyo6IHRoaXMgY2hhbmdlIHNsaWdodGx5IGFsbCB0aGUgb3V0cHV0IGZyb20gUk5HIAoJICByZWdyZXNzaW9ucy4KCk1vbiBEZWMgMjggMTA6NDc6MzIgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxzY2hlbWFzLmM6IGVkaXRlZCBhIGNvdXBsZSBvZiBjb21tZW50cyBpbiBhY2NvcmRhbmNlIHdpdGgKCSAgcG9zdGluZyBvbiB0aGUgbWFpbGluZyBsaXN0IChubyBsb2dpYyBjaGFuZ2UpCgkqIHhwb2ludGVyLmM6IHdvcmtpbmcgb24gQnVnIDEyOTk2NywgYWRkZWQgY2hlY2sgZm9yIE5VTEwKCSAgbm9kZXNldCB0byBwcmV2ZW50IGNyYXNoLiAgRnVydGhlciB3b3JrIHJlcXVpcmVkLgoJKiB4cGF0aC5jOiB3b3JraW5nIG9uIEJ1ZyAxMjk5NjcsIGFkZGVkIGNvZGUgdG8gaGFuZGxlCgkgIFhQQVRIX0xPQ0FUSU9OU0VUIGluIFJBTkdFVE8gY29kZSwgYWxzbyBhZGRlZCBjb2RlIHRvCgkgIGhhbmRsZSBpdCBpbiB4bWxYUGF0aEV2YWx1YXRlUHJlZGljYXRlUmVzdWx0LiAgRnVydGhlcgoJICB3b3JrIHJlcXVpcmVkLgoKU2F0IERlYyAyNyAxMjozMjo1OCBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHNjaGVtYXMuYzogYWRkZWQgdGVzdHMgZm9yIHhzOmFsbCB0byBhc3N1cmUgbWluT2NjdXJzCgkgIGFuZCBtYXhPY2N1cnMgPD0gMSAoQnVnIDEzMDAyMCkKClNhdCBEZWMgMjcgMDk6NTM6MDYgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxyZWdleHAuYzogZml4ZWQgeG1sRkFQYXJzZUNoYXJSYW5nZSBmb3IgVW5pY29kZSByYW5nZXMKCSAgd2l0aCBwYXRjaCBmcm9tIENoYXJsZXMgQm96ZW1hbi4KCkZyaSBEZWMgMjYgMTQ6MDM6NDEgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxyZWdleHAuYzogZml4ZWQgcHJvYmxlbSBjYXVzaW5nIHNlZ2ZhdWx0IG9uIHZhbGlkYXRpb24gZXJyb3IKCSAgY29uZGl0aW9uIChyZXBvcnRlZCBvbiBtYWlsaW5nIGxpc3QpCgpUaHUgRGVjIDI1IDIxOjE2OjIyIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sc2NoZW1hcy5jOiBmaXhlZCBtaXNzaW5nIGRpY3Rpb25hcmllcyBmb3IgTWVtb3J5IGFuZCBEb2MKCSAgcGFyc2VyIGNvbnRleHRzIChwcm9ibGVtIHJlcG9ydGVkIG9uIG1haWxpbmcgbGlzdCkKCSogZG9jL2FwaWJ1aWxkLnB5OiBzbWFsbCBjaGFuZ2UgdG8gcHJldmVudCBkdXBsaWNhdGUgbGluZXMKCSAgb24gQVBJIGZ1bmN0aW9ucyBsaXN0LiAgSXQgd2lsbCB0YWtlIGVmZmVjdCB0aGUgbmV4dCB0aW1lCgkgIHRoZSBkb2NzIGFyZSByZWJ1aWx0LgoKV2VkIERlYyAyNCAxMjo1NDoyNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gTkVXUyBkb2MvKjogdXBkYXRlZCB0aGUgZG9jcyBhbmQgcHJlcGFyZWQgYSBuZXcKCSAgcmVsZWFzZSAyLjYuNAoKV2VkIERlYyAyNCAxMjowNzo1MiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsZWdhY3kuYzogcmVtb3ZlIGRlcHJlY2F0ZWQgd2FybmluZyBvbiBzdGFydEVsZW1lbnQoKQoKV2VkIERlYyAyNCAxMjowNDozNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jIHJlc3VsdC9YSW5jbHVkZS9ub2RlczIuKjogWEluY2x1ZGUgeHBvaW50ZXIgc3VwcG9ydAoJICB3YXMgYnJva2VuIHdpdGggdGhlIG5ldyBuYW1lc3BhY2UuIEZpeGVzICMxMjk5MzIKCldlZCBEZWMgMjQgMDA6Mjk6MzAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaDogdHlwZXMgbWlnaHQgYmUKCSAgcmVkZWZpbmVkIGluIGluY2x1ZGVzLCBxdWljayBmaXggdG8gYWxsb3cgdGhpcyBidXQgbGFja3MgdGhlIAoJICBlcXVhbGl0eSBvZiB0aGUgcmVkZWZpbml0aW9uIHRlc3QuCgpUdWUgRGVjIDIzIDE1OjE0OjM3IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdmFsaWQuYzogZml4ZWQgYnVnIGNvbmNlcm5pbmcgdmFsaWRhdGlvbiB1c2luZyBleHRlcm5hbAoJICBkdGQgb2YgZWxlbWVudCB3aXRoIG11dGlwbGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucwoJICAoQnVnIDEyOTgyMSkKClR1ZSBEZWMgMjMgMTE6NDE6NDIgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB0cmVlLmM6IGluaGliaXRlZCBwcm9kdWN0aW9uIG9mICIobnVsbCk6IiBpbiB4bWxHZXROb2RlUGF0aAoJICB3aGVuIG5vZGUgaGFzIGRlZmF1bHQgbmFtZXNwYWNlIChCdWcgMTI5NzEwKQoKVHVlIERlYyAyMyAwOToyOToxNCBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IHNtYWxsIGVuaGFuY2VtZW50IHRvIHhtbFhQYXRoQ21wTm9kZXMgdG8gYXNzdXJlCgkgIGRvY3VtZW50IG9yZGVyIGZvciBhdHRyaWJ1dGVzIGlzIHJldGFpbmVkIChCdWcgMTI5MzMxKQoKTW9uIERlYyAyMiAxOTowNjoxNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyB4bWxyZWFkZXIuYzogY2hhbmdlIHhtbFJlYWRGZCgpIHhtbEN0eHRSZWFkRmQoKQoJICB4bWxSZWFkZXJOZXdGZCgpIHhtbFJlYWRlckZvckZkKCksIGNoYW5nZSB0aG9zZSB0byBub3QgY2xvc2UKCSAgdGhlIGZpbGUgZGVzY3JpcHRvci4gVXBkYXRlZCB0aGUgY29tbWVudCwgc2hvdWxkIGNsb3NlICMxMjk2ODMKCk1vbiBEZWMgMjIgMDA6MzQ6MDkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogZml4ZWQgYSBzZXJpb3VzIHByb2JsZW0gaW4gWEluY2x1ZGUgIzEyOTAyMQoKU3VuIERlYyAyMSAxMzo1OTo1NCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYnVnICMxMjk0ODksIHByb3BhZ2F0aW9uIG9mIHBhcnNpbmcgZmxhZ3MgCgkgIGluIGVudGl0aWVzLgoJKiBwYXJzZXIuYyB4bWxyZWFkZXIuYzogaW1wcm92ZWQgdGhlIGNvbW1lbnRzIG9mIHBhcnNpbmcgb3B0aW9ucwoKU3VuIERlYyAyMSAxODoxNDowNCBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbSwgcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtLAoJICBkb2MvTWFrZWZpbGUuYW06IGFwcGxpZWQgZml4ZXMgdG8gYWxsb3cgYnVpbGQgZnJvbQoJICAnb3V0c2lkZScgZGlyZWN0b3J5IChCdWcgMTI5MTcyKQoKU2F0IERlYyAyMCAxNjo0MjowNyBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogdHJlZS5jIC0gYWRkIGV4cGxhbmF0aW9uIG9mIG5hbWVzcGFjZSBpbmhlcml0YW5jZSB3aGVuCglucyBpcyBOVUxMIHRvIHhtbE5ld0NoaWxkIGFuZCB4bWxOZXdUZXh0Q2hpbGQgQVBJIGRvYwoKU2F0IERlYyAyMCAxODoxNzoyOCBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6IHVuZGlkIGxhc3QgY2hhbmdlIChteQoJICBiYWQpLiAgUHV0IG5lY2Vzc2FyeSBmaXggaW4gbGlieHNsdC9saWJleHNsdCBpbnN0ZWFkLgoJKiBpbmNsdWRlL2xpYnhtbC9ET0NCcGFyc2VyLmg6IHB1dCB0ZXN0IGZvciBfX0dDQ19fIG9uCgkgIHdhcm5pbmcgZGlyZWN0aXZlIChCdWcgMTI5MTA1KQoKU2F0IERlYyAyMCAxMDo0ODozNyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6IGZpeGVkIHhtbFhQYXRoUmV0dXJuU3RyaW5nCgkgIHRvIGNhdGVyIGZvciBOVUxMIHBvaW50ZXIgKGJ1ZyAxMjk1NjEpCgkqIGdsb2JhbHMuYzogYWRkZWQgY29tbWVudCB0byBzdXBwcmVzcyBkb2N1bWVudGF0aW9uIHdhcm5pbmcKCSogZG9jL2FwaWJ1aWxkLnB5OiBmaXhlZCBwcm9ibGVtIHdoaWNoIGNhdXNlZCBsYXN0IEFQSWNodW5reHguaHRtbAoJICB0byBiZSBsb3N0LiAgUmVidWlsdCBkb2MvKiAoaW5jbHVkaW5nIGFkZGluZyBBUEljaHVuazI2Lmh0bWwpCgpGcmkgRGVjIDE5IDE4OjI0OjAyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiB0cnlpbmcgdG8gZml4ICMxMjk2OTIgeG1sVGV4dFJlYWRlckV4cGFuZCgpIHdoZW4KCSAgdXNpbmcgYW4geG1sUmVhZGVyV2Fsa2VyKCkKClRodSBEZWMgMTggMjA6MTA6MzQgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIHRyZWUuYzogZml4IG1pc2MuIHR5cG9zIGluIGRvYyBjb21tZW50cwoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGVsYWJvcmF0ZSBvbiBtYWNybyBkZWZpbmUgZG9jIGNvbW1lbnRzCgkqIGRvYy8qOiByZWJ1aWxkIGRvY3MKCldlZCBEZWMgMTcgMTY6MDc6MzMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2V4YW1wbGVzLyo6IGRvbid0IGNhbGwgdGhlIHJlc3VsdCBmaWxlcyAub3V0IGJ1dCAucmVzIGFzCgkgIHRoZSBNYWtlZmlsZXMgdGVuZCB0byB0cnkgZ2VuZXJhdGluZyBiaW5hcmllcyBmb3IgLm91dCB0YXJnZXRzLi4uCgpUdWUgRGVjIDE2IDIwOjUzOjU0IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvaHRtbC9saWJ4bWwtcGF0dGVybi5odG1sOiAtIGN2cyBhZGQgQVBJIGRvY3MgZm9yIG5ldwoJcGF0dGVybiBzdHVmZgoKVHVlIERlYyAxNiAyMDo0MDo0MCBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogdHJlZS5jCgkqIGRvYy8qOgoJRWxhYm9yYXRlIGluIGRvY3VtZW50YXRpb24gZGlzY3Vzc2lvbiBvZiB4bWxOZXdDaGlsZAoJYW5kIHhtbE5ld1RleHRDaGlsZC4gVGhhbmtzIHRvIFN0ZXZlIExlbnRpIGZvciBwb2ludGluZwoJb3V0IHRoZSB1c2VmdWxuZXNzIG9mIGEgbW9yZSBleHBsaWNpdCBleHBsYW5hdGlvbiBvZiB0aGUKCXJlc2VydmVkIGNoYXJhY3RlciBlc2NhcGluZyBpc3N1ZS4KCkZyaSBEZWMgMTIgMTU6NTU6MTUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sY2F0YWxvZy5jOiBhcHBsaWVkIHBhdGNoIGZyb20gU3RlZmFuIEtvc3QKClRodSBEZWMgMTEgMTU6MTU6MzEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2V4YW1wbGVzL3Rlc3RXcml0ZXIuYzogYXBwbGllZCBzbWFsbCBmaXggZnJvbSBMdWNhcyBCcmFzaWxpbm8KClRodSBEZWMgMTEgMTQ6NTU6MjIgQ0VUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLiogd2luMzIvY29uZmlndXJlLmpzOiBBZGRlZCBwYXR0ZXJuIHN1cHBvcnQKCldlZCBEZWMgMTAgMTQ6MTE6MjAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGRvYy8qIGxpYnhtbC5zcGVjLmluOiBwcmVwYXJpbmcgcmVsZWFzZSBvZgoJICBsaWJ4bWwyLTIuNi4zLCB1cGRhdGVkIGFuZCByZWdlbmVyYXRlZCB0aGUgZG9jcy4KCldlZCBEZWMgMTAgMTE6NDM6MzMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jIHBhdHRlcm4uYzogcmVtb3ZlZCBzb21lIGNvbXBpbGF0aW9uIHdhcm5pbmdzCgpXZWQgRGVjIDEwIDExOjE2OjI5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogZml4aW5nIGJ1ZyAjMTE5MjY0IHhtbGxpbnQgZmFpbGluZyB0byByZXBvcnQKCSAgc2VyaWFsaXphdGlvbiBlcnJvcnMgaW4gc29tZSBjYXNlcy4KClR1ZSBEZWMgIDkgMjM6NTA6MjMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW50aXRpZXMuYzogZml4ZWQgYW4gWE1MIGVudGl0ZXMgY29udGVudCBzZXJpYWxpemF0aW9uIAoJICBwb3RlbnRpYWxseSB0cmlnZ2VyZWQgYnkgWEluY2x1ZGUsIHNlZSAjMTI2ODE3CgpUdWUgRGVjICA5IDE2OjEyOjUwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHdyaXRlci5jOiBhcHBsaWVkIHRoZSBwYXRjaCB0byB4bWxUZXh0V3JpdGVyU3RhcnRQSSgpCgkgIHN1Z2dlc3RlZCBieSBEYW5pZWwgU2NodWxtYW4gaW4gIzEyODMxMwoKVHVlIERlYyAgOSAxNToxODozMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW06IGFub3RoZXIgcGF0Y2ggZnJvbSBLZW5uZXRoIEhhbGV5CgkgIGZvciBNaW5ndywgYy5mLiAjMTI4Nzg3CgpUdWUgRGVjICA5IDE1OjA3OjA5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbGV4cG9ydHMuaDogYXBwbGllZCBwYXRjaCBmcm9tIEtlbm5ldGggSGFsZXkKCSAgZm9yIGNvbXBpbGluZyBvbiBNaW5ndyBzZWUgIzEyODc4NgoKVHVlIERlYyAgOSAxNDo1Mjo1OSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IHNvbWUgZmxhZ3Mgd2VyZSBub3QgcGFzc2VkIGRvd24gY29ycmVjdGx5IGFzCgkgIHBhcnNpbmcgb3B0aW9ucy4gRml4ZXMgIzEyNjgwNgoKVHVlIERlYyAgOSAxMjoyOToyNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jIHhtbGxpbnQuYyB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94aW5jbHVkZS5oCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGF1Z21lbnRlZCB0aGUgWEluY2x1ZGUgQVBJCgkgIHRvIGJlIGFibGUgdG8gcGFzcyBYTUwgcGFyc2VyIGZsYWdzIGRvd24gdG8gdGhlIEluY2x1c2lvbgoJICBwcm9jZXNzLiBBbHNvIHJlc3luY2hyb25pemVkIHdpdGggdGhlIExhc3QgQ2FsbCBXM0MgV29ya2luZwoJICBEcmFmdCAxMCBOb3ZlbWJlciAyMDAzIGZvciB0aGUgeHBvaW50ZXIgYXR0cmlidXRlLgoJKiBNYWtlZmlsZS5hbSB0ZXN0L1hJbmNsdWRlL2RvY3Mvbm9kZXNbMjNdLnhtbCAKCSAgcmVzdWx0L1hJbmNsdWRlLyo6IGF1Z21lbnRlZCB0aGUgdGVzdHMgZm9yIHRoZSBuZXcgbmFtZXNwYWNlIGFuZAoJICB0ZXN0aW5nIHRoZSB4cG9pbnRlciBhdHRyaWJ1dGUsIGNoYW5nZWQgdGhlIHdheSBlcnJvciBtZXNzYWdlcwoJICBhcmUgdGVzdGVkCgkqIGRvYy8qOiByZWdlbmVyYXRlZCB0aGUgZG9jdW1lbnRhdGlvbgoKTW9uIERlYyAgOCAxODozODoyNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlcnJvci5jOiBmaWx0ZXIgd2FybmluZyBtZXNzYWdlcyBpZiB0aGUgZ2xvYmFsIHNldHRpbmcgYmxvY2tzIHRoZW0KCSogeGluY2x1ZGUuYyB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94aW5jbHVkZS5oCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IHVwZGF0ZWQgdGhlIGNoYW5nZSBvZiBuYW1lc3BhY2UgYXQKCSAgdGhlIFhJbmNsdWRlIGxldmVsLCByYWlzZSBhIHdhcm5pbmcgaWYgdGhlIG9sZCBvbmUgaXMgZm91bmQsCgkgIGFuZCBzb21lIGNsZWFudXAKCk1vbiBEZWMgIDggMTM6MDk6MzkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiB0ZW50YXRpdmUgZml4IGZvciAjMTI2MTE3IGNoYXJhY3RlciByZWZlcmVuY2UgaW4KCSAgYXR0cmlidXRlcyBvdXRwdXQgcHJvYmxlbSBpbiBzb21lIGNvcm5lcmNhc2UuCgpNb24gRGVjICA4IDExOjA4OjQ1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwucHk6IHRyaWVkIHRvIGZpeCB0aGUgcHJvYmxlbXMgcmVwb3J0ZWQgaW4gCgkgIGJ1ZyAjMTI2NzM1CgkqIHhwYXRoLmMgU0FYMi5jIGVycm9yLmMgcGFyc2VyLmMgdmFsaWQuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOgoJICBmaXhlZCBhZ2FpbiBzb21lIHByb2JsZW0gdHJ5aW5nIHRvIHVzZSB0aGUgc3RydWN0dXJlZCBlcnJvcgoJICBoYW5kbGVycywgYy5mLiBidWcgIzEyNjczNQoJKiByZXN1bHQvVkMvRWxlbWVudFZhbGlkOiB0aW55IGNoYW5nZSBkdWUgdG8gdGhlIGZpeAoKU3VuIERlYyAgNyAyMjoyNzozMSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlcnJvci5jOiBmaXhlZCBfX3htbFJhaXNlRXJyb3IgdG8gdXNlIHN0cnVjdHVyZWQgZXJyb3IgaGFuZGxlcnMKCSAgZGVmaW5lZCBieSB4bWxTZXRTdHJ1Y3R1cmVkRXJyb3JGdW5jKCksIGZpeGVzIGJ1ZyAjMTI2MjExCgpTdW4gRGVjICA3IDIwOjMwOjUzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhdHRlbXB0IHRvIGZpeCAjMTI2MjExIC4uLiAKCkZyaSBEZWMgIDUgMTc6MDc6MjkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGF0dGVybi5jIHhtbHJlYWRlci5jIHhtbGxpbnQuYyBpbmNsdWRlL2xpYnhtbC9wYXR0ZXJuLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmg6IGZpeGVkIHRoZSBwYXR0ZXJuIGludGVyZmFjZXMKCSAgYnV0IG5vdCB5ZXQgdGhlIHBhcnNlciB0byBoYW5kbGUgdGhlIG5hbWVzcGFjZXMuCgkqIGRvYy9leGFtcGxlcy9yZWFkZXIzLmMgZG9jLyo6IGZpeGVkIHRoZSBleGFtcGxlLCByZWJ1aWx0IHRoZSBkb2NzLgoKRnJpIERlYyAgNSAxNTo0OTo0NCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmMgeG1sd3JpdGVyLmMgZG9jL2FwaWJ1aWxkLnB5IGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCAKCSAgaW5jbHVkZS9saWJ4bWwvcGF0dGVybi5oIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxleHBvcnRzLmggaW5jbHVkZS9saWJ4bWwveG1sd3JpdGVyLmg6IGNsZWFudXAKCSAgdGhlIG1ha2UgcmVidWlsZCBpbiBkb2MsIHRoaXMgaW5jbHVkZSBuZXcgZGlyZWN0aXZlIHRvIHN0b3AKCSAgZG9jdW1lbnRhdGlvbiB3YXJuaW5ncwoJKiBkb2MvKiBkb2MvaHRtbC8qOiByZWJ1aWx0IHRoZSBkb2NzCgkqIHBhdHRlcm4uYyB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXR0ZXJuLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmg6IGFkZGluZyB4bWxUZXh0UmVhZGVyUHJlc2VydmVQYXR0ZXJuKCkKCSAgdG8gc2F2ZSBub2RlcyB3aGlsZSBzY2FubmluZyB0aGUgdHJlZSB3aXRoIHRoZSByZWFkZXIsIGNsZWFudXAKCSAgdGhlIHdheSBlbGVtZW50IHdlcmUgZnJlZWQsIGFuZCB4bWxUZXh0UmVhZGVyUHJlc2VydmUoKQoJICBpbXBsZW1lbnRhdGlvbiwgdGhlIEFQSSBtaWdodCBjaGFuZ2UgZm9yIG5hbWVzcGFjZSBiaW5kaW5nIHN1cHBvcnQKCSAgd2hlbiBjb21waWxpbmcgcGF0dGVybnMuCgkqIGRvYy9leGFtcGxlcy8qOiBhZGRlZCByZWFkZXIzLmMgZXhwb3NpbmcgdGhlIHhtbFRleHRSZWFkZXJQcmVzZXJ2ZSgpCgpUaHUgRGVjICA0IDE1OjEwOjU3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwucHk6IG9vcHMgZm9yZ290IHRvIG1vZGlmeS9jb21taXQgdGhlIG5ldyBjb2RlLgoKVGh1IERlYyAgNCAxMzoyOToxOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sX3dyYXAuaDoKCSAgY2xlYW51cCB0aGUgb3V0cHV0IGJ1ZmZlciBzdXBwb3J0IHRvIGF0IGxlYXN0IGdldCB0aGUgYmFzaWMKCSAgdG8gd29yawoJKiBweXRob24vdGVzdHMvb3V0YnVmLnB5IHB5dGhvbi90ZXN0cy9zZXJpYWxpemUucHk6IGZpeGVzIGFuZAoJICBjbGVhbnVwLgoJKiBpbmNsdWRlL2xpYnhtbC94bWx3cml0ZXIuaDogY2xlYW51cAoKV2VkIERlYyAgMyAyMTozODo1NiBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluCgkqIGRvYy8qOiBhZGQgV0lUSF9UUklPIGNvbW1lbnQgc28gaXQgc2hvd3MgdXAgaW4gdGhlIGRvY3MsIHJlYnVpbGQKCSAgZG9jcwoKV2VkIERlYyAgMyAxMzoxMDowOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWcuaC5pbiBjb25maWd1cmUuaW4geG1scmVnZXhwLmM6IGZpeCBidWcgIzEyODQwMSBhZmZlY3RpbmcKCSAgcmVnZXhwIHF1YW50aWZpZXJzCgpUdWUgRGVjICAyIDIzOjI5OjU2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhdHRlcm4uYyBpbmNsdWRlL2xpYnhtbC9wYXR0ZXJuLmg6IGFkZGluZyB0aGUgcGF0dGVybiBub2RlCgkgIHNlbGVjdGlvbiBjb2RlLiBJbmhlcmllZCBpbiBwYXJ0IGZyb20gbGlieHNsdCBidXQgc21hbGxlci4KCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjoKCSAgaW50ZWdyYXRlZCB0aGUgcGF0dGVybiBtb2R1bGUsIG1hZGUgaXQgYSBjb25maWd1cmUgdGltZSBvcHRpb24KCSogeG1sbGludC5jOiBhZGRlZCAtLXBhdHRlcm4gdG8gdGVzdCB3aGVuIGRvaW5nIC0tc3RyZWFtCgpUdWUgRGVjICAyIDExOjI1OjI1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBmaXhlZCBhIHByb2JsZW0gaW4geG1scmVhZGVyIHZhbGlkYXRpb24gd2hlbgoJICBzdHJlYW1pbmcgZXhwb3NlZCBieSByZWFkZXIyIGV4YW1wbGUuCgpNb24gRGVjICAxIDIwOjQwOjUxIE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sLmh0bWwKCSogZG9jL2RvY3MuaHRtbDoKCWFkZCByZWZlcmVuY2UgdG8gdGhlIENvZGUgRXhhbXBsZXMgcGFnZSB0byBkb2NzLmh0bWwgbGlzdAoJb2YgcmVzb3VyY2VzCgpNb24gRGVjICAxIDEyOjMwOjI4IENFVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS5iY2Igd2luMzIvY29uZmlndXJlLmpzOiBBcHBsaWVkIHRoZSBCQ0IgcGF0Y2gKCSAgZnJvbSBFcmljCgpTdW4gTm92IDMwIDIxOjMzOjM3IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBpbmNsdWRlL2xpYnhtbC94aW5jbHVkZS5oCgkqIGRvYy8qOiBBZGQgY29tbWVudHMgZm9yIG1hY3JvIGRlZmluaXRpb25zIGluIHhpbmNsdWRlLmggYW5kCglyZWJ1aWxkIHRoZSBkb2NzCgpTdW4gTm92IDMwIDIxOjA2OjI5IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvZG9jZGVzY3IuZG9jCglVcGRhdGluZyBXaWxsaWFtJ3MgZXhwbGFuYXRpb24gb2YgaG93IHRvIGJ1aWxkIGRvY3MsIAoJcmVmbGVjdGluZyBEYW5pZWwncyBuZXcgZG9jcyBidWlsZCBzeXN0ZW0KClNhdCBOb3YgMjkgMTg6Mzg6MjIgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxtZW1vcnkuYzogZW5oYW5jZWQgYnkgYWRkaW5nIG11dGV4IHRvIHByb3RlY3QgZ2xvYmFsCgkgIHN0cnVjdHVyZXMgaW4gYSBtdWx0aS10aHJlYWRpbmcgZW52aXJvbm1lbnQuICBUaGlzIGZpeGVkCgkgIHNvbWUgcmFuZG9tIGVycm9ycyBvbiB0aGUgVGhyZWFkcyByZWdyZXNzaW9uIHRlc3RzLgoKRnJpIE5vdiAyOCAyMTozOTo0OSBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbC5odG1sIGRvYy9weXRob24uaHRtbDogZml4IHRzdC5weSB0ZXh0LCB3aGljaCBkaWRuJ3QKCSAgaW1wb3J0IHN5cwoKRnJpIE5vdiAyOCAxNzoyODo0NyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGVuY29kaW5nLmMsIGluY2x1ZGUvbGlieG1sL2VuY29kaW5nLmg6IEVuaGFuY2VkIHRoZSBoYW5kbGluZyBvZgoJICBVVEYtMTYsIFVURi0xNkxFIGFuZCBVVEYtMTZCRSBlbmNvZGluZ3MuICBOb3cgVVRGLTE2IG91dHB1dCBpcwoJICBoYW5kbGVkIGludGVybmFsbHkgYnkgZGVmYXVsdCwgd2l0aCBwcm9wZXIgQk9NIGFuZCBVVEYtMTZMRQoJICBlbmNvZGluZy4gIE5hdGl2ZSBVVEYtMTZMRSBhbmQgVVRGLTE2QkUgZW5jb2Rpbmcgd2lsbCBub3QgZ2VuZXJhdGUKCSAgQk9NIG9uIG91dHB1dCwgYW5kIHdpbGwgYmUgYXV0b21hdGljYWxseSByZWNvZ25pemVkIG9uIGlucHV0LgoJKiB0ZXN0L3V0ZjE2bGVib20ueG1sLCB0ZXN0L3V0ZjE2YmVib20ueG1sLCByZXN1bHQvdXRmMTY/ZWJvbSo6CgkgIGFkZGVkIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIGFib3ZlLgoKVGh1IE5vdiAyNyAxOToyNToxMCBDRVQgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvTWFrZWZpbGUuKiB3aW4zMi9jb25maWd1cmUuanM6IE1vZGlmaWVkIHRvIGFsbG93IGNvZXhpc3RlbnQgCgkgIGJ1aWxkIHdpdGggYWxsIGNvbXBpbGVycy4gQWRkZWQgQy1SdW50aW1lIG9wdGlvbiBmb3IgTVNWQy4gSW5jbHVkZWQKCSAgeG1sV3JpdGVyLgoJKiB4bWx3cml0ZXIuYzogQWRkZWQgSU5fTElCWE1MIG1hY3JvCgpXZWQgTm92IDI2IDIxOjU0OjAxIENFVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS5iY2I6IGFwcGxpZWQgcGF0Y2ggZnJvbSBFcmljCgpXZWQgTm92IDI2IDIxOjMzOjE0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogc3RlZmFuIG9uIElSQyBwb2ludGVkIG91dCB0aGF0IFhNTF9HRVRfTElORQoJICBpcyBicm9rZW4gb24gMi42LngKClR1ZSBOb3YgMjUgMTg6Mzk6NDQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW50aXRpZXMuYzogZml4ZWQgIzEyNzg3NywgbmV2ZXIgb3V0cHV0ICZxdW90OyBpbiBlbGVtZW50IGNvbnRlbnQKCSogcmVzdWx0L2lzb2xhdDMgcmVzdWx0L3NsYXNoZG90MTYueG1sIHJlc3VsdC9ub2VudC9pc29sYXQzCgkgIHJlc3VsdC9ub2VudC9zbGFzaGRvdDE2LnhtbCByZXN1bHQvdmFsaWQvUkVDLXhtbC0xOTk4MDIxMC54bWwKCSAgcmVzdWx0L3ZhbGlkL2luZGV4LnhtbCByZXN1bHQvdmFsaWQveGxpbmsueG1sOiB0aGlzIGNoYW5nZXMgdGhlCgkgIG91dHB1dCBvZiBhIGZldyB0ZXN0cwoKVHVlIE5vdiAyNSAxNjozNjoyMSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaAoJICB0ZXN0U2NoZW1hcy5jIHhtbHNjaGVtYXMuYzogYWRkZWQgeHNkOmluY2x1ZGUgc3VwcG9ydCwgZml4ZWQKCSAgdGVzdFNjaGVtYXMgYmVoYXZpb3VyIHdoZW4gYSBzY2hlbWFzIGZhaWxlZCB0byBwYXJzZS4KCSogdGVzdC9zY2hlbWFzL3Zkdi0qIHJlc3VsdC9zY2hlbWFzL3Zkdi1maXJzdDVfMF8wKjogYWRkZWQgb25lCgkgIHRlc3QgZm9yIHhzZDppbmNsdWRlIGZyb20gRXJpYyBWYW4gZGVyIFZsaXN0CgpUdWUgTm92IDI1IDA4OjE4OjEyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBzd2FwcGVkIHRoZSBhdHRyaWJ1dGUgZGVmYXVsdGluZyBhbmQgYXR0cmlidXRlIGNoZWNraW5nCgkgIHBhcnRzIG9mIHBhcnNpbmcgYSBuZXcgZWxlbWVudCBzdGFydCwgZml4ZXMgYnVnICMxMjc3NzIKCSogcmVzdWx0L3ZhbGlkLzEyNzc3Mi4qIHRlc3QvdmFsaWQvMTI3NzcyLnhtbAoJICB0ZXN0L3ZhbGlkL2R0ZHMvMTI3NzcyLmR0ZDogYWRkZWQgdGhlIGV4YW1wbGUgaW4gdGhlIHJlZ3Jlc3Npb24gdGVzdHMKClR1ZSBOb3YgMjUgMDg6MDA6MTUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IG1vdmVkIHhtbENsZWFudXBUaHJlYWRzKCkgdG8gdGhlIGVuZCBvZiB4bWxDbGVhbnVwUGFyc2VyKCkKCSAgdG8gYXZvaWQgYnVnICMxMjc4NTEKCk1vbiBOb3YgMjQgMTU6MjY6MjEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVnZXhwLmM6IGZpeGluZyBzb21lIE5lZ2F0aXZlIENoYXJhY3RlciBHcm91cCBhbmQKCSAgQ2hhcmFjdGVyIENsYXNzIFN1YnRyYWN0aW9uIGhhbmRsaW5nLgoKTW9uIE5vdiAyNCAxNDowMTo1NyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmM6IG1vcmUgWE1MIFNjaGVtYXMgZml4ZXMgYmFzZWQKCSAgb24gRXJpYyB2YW4gZGVyIFZsaXN0IGV4YW1wbGVzCgkqIHJlc3VsdC9zY2hlbWFzL3Zkdi1maXJzdDQqIHRlc3Qvc2NoZW1hcy92ZHYtZmlyc3Q0KjoKCSAgYWRkZWQgcmVncmVzc2lvbiB0ZXN0cwoJKiBkb2MvZXhhbXBsZXMvTWFrZWZpbGUuYW0gZG9jL2V4YW1wbGVzL2luZGV4LnB5OiBkbyBub3QKCSAgcmVnZW5lcmF0ZSB0aGUgaW5kZXggb24gbWFrZSBhbGwgdGFyZ2V0LCBidXQgb25seSBvbgoJICBtYWtlIHJlYnVpbGQgdG8gYXZvaWQgdHJvdWJsZXMuCgpTYXQgTm92IDIyIDIxOjM1OjQyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oCgkgIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaDogbG90IG9mIGJ1ZyBmaXhlcywgY2xlYW51cCwKCSAgc3RhcnRpbmcgdG8gYWRkIHByb3BlciBuYW1lc3BhY2Ugc3VwcG9ydCB0b28uCgkqIHRlc3Qvc2NoZW1hcy8qIHJlc3VsdC9zY2hlbWFzLyo6IGFkZGVkIGEgbnVtYmVyIG9mIHRlc3RzCgkgIGZpeGVkIHRoZSByZXN1bHQgZnJvbSBzb21lIHJlZ3Jlc3Npb24gdGVzdHMgdG9vLgoKRnJpIE5vdiAyMSAyMDo1MDo1OSBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbC5odG1sLCBkb2NzLmh0bWw6IHJlbW92ZSByZWZlcmVuY2UgdG8gZ3RrLWRvYyBub3cgdGhhdAoJRGFuaWVsIGhhcyByZW1vdmVkIGl0LCBmaXggbGluayB0byBHZW9yZ2UncyBJQk0gYXJ0aWNsZSwgb3RoZXIKCW1pbm9yIGVkaXRzCgpGcmkgTm92IDIxIDAxOjI2OjAwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogYXBwbGllZCBwYXRjaCBmcm9tIFJvYmVydCBTdGVwYW5layB0byBzdGFydCAKCSAgaW1wb3J0IG9zIHNjaGVtYXMgc3VwcG9ydCwgY2xlYW5lZCB1cCBzdHVmZiBhbmQgdGhlIHBhdGNoLgoJKiB0ZXN0L3NjaGVtYXMvaW1wb3J0MF8wLiogcmVzdWx0L3NjaGVtYXMvaW1wb3J0MF8wXzAqOiBhZGRlZCB0ZXN0CgkgIHRvIHJlZ3Jlc3Npb24sIGZpeGVkIGEgZmV3IHJlZ3Jlc3Npb25zIHRvby4KClRodSBOb3YgMjAgMjI6NTg6MDAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBhcHBsaWVkIHR3byBwYXJzaW5nIGZpeGVzIGZyb20gSmFtZXMgQnVyc2EKClRodSBOb3YgMjAgMTk6MjA6NDYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2V4YW1wbGVzLyo6IGFkZGVkIHR3byB4bWxSZWFkZXIgZXhhbXBsZXMKCSogeG1scmVhZGVyLmM6IGNsZWFuZWQgdXAgc29tZSBidWdzIGluIHRoZSBwcm9jZXNzCgpUaHUgTm92IDIwIDEyOjU0OjMwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHdyaXRlci5jIGluY2x1ZGUvbGlieG1sL3htbHdyaXRlci5oOiBhcHBsaWVkIHBhdGNoIGZyb20KCSAgQWxmcmVkIE1pY2thdXRzY2gsIGJ1Z2ZpeGVzIGFuZCBjb21tZW50cwoJKiBkb2MvZXhhbXBsZXMvKjogYWRkZWQgaGlzIHRlc3QgYXMgdGhlIHhtbFdyaXRlciBleGFtcGxlCgkqIGRvYy9odG1sLyBkb2MvKi5odG1sOiB0aGlzIHJlc3VsdGVkIGluIHNvbWUgaW1wcm92ZW1lbnRzCgkqIGluY2x1ZGUvbGlieG1sL2hhc2guaDogZml4ZWQgYW4gaW5jbHVzaW9uIHByb2JsZW0gd2hlbgoJICA8bGlieG1sL2hhc2guaD4gd2Fzbid0IHByZWNlZWRlZCBieSA8eG1sL3BhcnNlci5oPgoKV2VkIE5vdiAxOSAxNzoxOTozNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBmaXggYW4gZXJyb3IgbWVzc2FnZQoJKiBkb2MvZXhhbXBsZXMvKjogYWRkZWQgdHJlZTIgZXhhbXBsZSBmcm9tIEx1Y2FzIEJyYXNpbGlubwoKV2VkIE5vdiAxOSAxNzo1MDo0NyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy9uZXdhcGkueHNsOiBpbXByb3ZlIHRoZSBzb3J0IHNlcXVlbmNlIGZvciBwYWdlIGNvbnRlbnQKCSogZG9jL2h0bWwvKi5odG1sOiByZWdlbmVyYXRlIHRoZSB3ZWIgcGFnZXMKCldlZCBOb3YgMTkgMDA6NDg6NTYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGRvIG5vdCBwYWNrYWdlIGN2cyB2ZXJzaW9uaW5nIHRlbXAgZmlsZXMuCgkqIGRvYy9hcGlidWlsZC5weSBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy9uZXdhcGkueHNsOiBtb3JlIGNsZWFudXAsCgkgIHNsaWdodGx5IGltcHJvdmVkIHRoZSBBUEkgeG1sIGZvcm1hdCwgZml4ZWQgYSBsb3Qgb2Ygc21hbGwKCSAgcmVuZGVyaW5nIHByb2JsZW1zCgkqIGRvYy9odG1sL2xpYnhtbCouaHRtbDogcmVidWlsdAoKVHVlIE5vdiAxOCAyMTo1MToxNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC8qLmggaW5jbHVkZS9saWJ4bWwvKi5oLmluOiBtb2RpZmllZCB0aGUgZmlsZQoJICBoZWFkZXIgdG8gYWRkIG1vcmUgaW5mb3JtYXRpb25zLCBwYWluZnVsLi4uCgkqIGdlbkNoUmFuZ2VzLnB5IGdlblVuaWNvZGUucHk6IHVwZGF0ZWQgdG8gZ2VuZXJhdGUgc2FpZCBjaGFuZ2VzCgkgIGluIGhlYWRlcnMKCSogZG9jL2FwaWJ1aWxkLnB5OiBleHRyYWN0IGhlYWRlcnMsIGFkZCB0aGVtIHRvIGxpYnhtbDItYXBpLnhtbAoJKiAqLmh0bWwgKi54c2wgKi54bWw6IHVwZGF0ZWQgdGhlIHN0eWxlc2hlZXRzIHRvIGZsYWcgZ2VwcmVjYXRlZAoJICBBUElzIG1vZHVsZXMuIFVwZGF0ZWQgdGhlIHN0eWxlc2hlZXRzLCBzb21lIGNsZWFudXBzLCByZWdlbmVyYXRlZAoJKiBkb2MvaHRtbC8qLmh0bWw6IHJlZ2VuZXJhdGVkIGFkZGVkIGJhY2sgYm9vazEgYW5kIGxpYnhtbC1saWIuaHRtbAoKVHVlIE5vdiAxOCAxNDo0MzoxNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvTWFrZWZpbGUuYW0gZG9jLyoueHNsIGRvYy8qLmh0bWwgZG9jL2FwaWJ1aWxkLnB5OiBjbGVhbmVkIHVwCgkgIHRoZSBidWlsZCBwcm9jZXNzIHRvIHJlbW92ZSBhbGwgcmVtYWlucyBmcm9tIHRoZSBvbGQgZ3RrLWRvYwoJICBpbmhlcml0ZWQsIGxpYnhtbDItcmVmcy54bWwgaXMgbm93IGdlbmVyYXRlZCBieSBhcGlidWlsZC5weSwgdGhlCgkgIHN0eWxlc2hlZXRzIGhhdmUgYmVlbiBpbXByb3ZlZCwgYW5kIHRoZSBBUEkqaHRtbCBub3cgZ2VuZXJhdGVkCgkgIGFyZSBYSFRNTDEgdmFsaWQgdG9vCgpUdWUgTm92IDE4IDE0OjI4OjMyIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPG1tbS5jb20uaGs+CgoJKiBnZW5DaFJhbmdlcy5weSwgY2h2YWxpZC5jLCBpbmNsdWRlL2xpYnhtbC9jaHZhbGlkLmg6IG1pbm9yCgkgIGVuaGFuY2VtZW50IHRvIHByZXZlbnQgY29tbWVudCB3aXRoIHVucmVmZXJlbmNlZCB2YXJpYWJsZS4KCSogdGhyZWFkcy5jIHhtbHJlYWRlci5jIHhtbHdyaXRlci5jOiBlZGl0ZWQgc29tZSBjb21tZW50cyB0bwoJICBpbXByb3ZlIGF1dG8tZ2VuZXJhdGlvbiBvZiBkb2N1bWVudGF0aW9uCgkqIGFwaWJ1aWxkLnB5OiBtaW5vciBjaGFuZ2UgdG8gYW4gZXJyb3IgbWVzc2FnZQoKTW9uIE5vdiAxNyAxNzo1NTo1MSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvYXBpYnVpbGQucHkgZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvbmV3YXBpLnhzbDogbW9yZSBjbGVhbnVwLAoJICBpbXByb3ZpbmcgbmF2aWdhdGlvbgoJKiBkb2MvaHRtbC8qLmh0bWw6IHVwZGF0ZWQgdGhlIHJlc3VsdAoKTW9uIE5vdiAxNyAxNDo1NDozOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvTWFrZWZpbGUuYW0gZG9jL2FwaWJ1aWxkLnB5IGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL25ld2FwaS54c2w6CgkgIGltcHJvdmVtZW50IG9mIHRoZSBzdHlsZXNoZWV0cywgZml4ZWQgYSBBUEkgZ2VuZXJhdGlvbiBwcm9ibGVtLAoJICBzd2l0Y2hlZCB0aGUgc3R5bGVzaGVldCBhbmQgTWFrZWZpbGUgdG8gYnVpbGQgdGhlIEhUTUwgb3V0cHV0LgoJKiBkb2MvaHRtbC8qLmh0bWw6IGNvbXBsZXRlIHVwZGF0ZSwgZGl0Y2hlZCBzb21lIG9sZCBmaWxlcywgbWlnaHQKCSAgaW50cm9kdWNlIHNvbWUgYnJlYWthZ2UuLi4KCk1vbiBOb3YgMTcgMTI6NTA6MjggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL25ld2FwaS54c2w6IGxvdCBvZiBpbXByb3ZlbWVudHMsIHRoaXMgc3RhcnRzIGxvb2tpbmcgZ29vZAoJICBlbm91Z2ggdG8gYmUgdXNhYmxlLgoKTW9uIE5vdiAxNyAwMDo1ODowOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvbmV3YXBpLnhzbDogc3R5bGVzaGVldCB0byBidWlsZCBIVE1MIHBhZ2VzIGZyb20gdGhlCgkgIEFQSSBYTUwgZGVzY3JpcHRpb24sIFdvcmsgaW4gUHJvZ3Jlc3MKClN1biBOb3YgMTYgMTY6MDM6MjQgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBmaXhlZCBidWcgMTI2OTc2IChzdHJpbmcgIT0gZW1wdHkgbm9kZXNldAoJICBzaG91bGQgYmUgZmFsc2UpCgpTdW4gTm92IDE2IDE0OjAwOjA4IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jL2h0bWwvKi5odG1sOiBGaW5hbGx5IC0gZm91bmQgdGhlIHByb2JsZW0gd2l0aCB0aGUKCSAgcGFnZSBnZW5lcmF0aW9uIChYTUxQVUJGVU4gbm90IHJlY29nbml6ZWQgYnkgZ3RrZG9jKS4KCSAgUmUtY3JlYXRlZCB0aGUgcGFnZXMgdXNpbmcgYSB0ZW1wb3JhcnkgdmVyc2lvbiBvZgoJICBpbmNsdWRlL2xpYnhtbC8qLmguCgkqIHRlc3RPT01saWIuYyxpbmNsdWRlL2xpYnhtbC9lbmNvZGluZy5oLAoJICBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmgsaW5jbHVkZS9saWJ4bWwvdmFsaWQuaCwKCSAgaW5jbHVkZS9saWJ4bWwveGxpbmsuaCxpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaCwKCSAgaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmguaW4sCgkgIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6IG1pbm9yIGVkaXQgb2YgY29tbWVudHMKCSAgdG8gaGVscCBhdXRvbWF0aWMgZG9jdW1lbnRhdGlvbiBnZW5lcmF0aW9uCgkqIGRvYy9kb2NkZXNjci5kb2M6IHNtYWxsIGVsYWJvcmF0aW9uCgkqIGRvYy9leGFtcGxlcy90ZXN0MS5jLGRvYy9leGFtcGxlcy9NYWtlZmlsZS5hbTogcmUtY29tbWl0CgkgIChtZXNzZWQgdXAgb24gbGFzdCB0cnkpCgkqIHhtbHJlYWRlci5jOiBtaW5vciBjaGFuZ2UgdG8gY2xlYXIgd2FybmluZy4KClNhdCBOb3YgMTUgMTk6MjA6MzIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogQ29weXJpZ2h0OiBmaXhlZCBzb21lIHdvcmRpbmcKCSogbGlieG1sLnNwZWMuaW46IG1ha2Ugc3VyZSBkb2MvZXhhbXBsZXMgaXMgcGFja2FnZWQKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oIHZhbGlkLmMgeG1scmVhZGVyLmM6IGZpeGVkIHRoZSByZWFsbHkKCSAgYW5ub3lpbmcgcHJvYmxlbSBhYm91dCB4bWxSZW1vdmVJRCBhbmQgeG1sUmVhZGVyIHN0cmVhbWluZy4KCSAgVGhpbmcgbG9va3MgZml4ZWQgbm93LCBoYWQgdG8gYWRkIGEgZG9jIHJlZmVyZW5jZSB0byB0aGUKCSAgeG1sSUQgc3RydWN0dXJlIHRob3VnaC4uLgoKU2F0IE5vdiAxNSAwOTo1MzozNiBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL2RvY2Rlc2NyLmRvYzogYWRkZWQgZGVzY3JpcHRpb24gb2YgbWFuIHBhZ2UgYnVpbGRpbmcKClNhdCBOb3YgMTUgMTk6MDg6MjIgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MvaHRtbC9saWJ4bWwtY2h2YWxpZC5odG1sLCBkb2MvaHRtbC9saWJ4bWwtZGljdC5odG1sLAoJICBkb2MvaHRtbC9saWJ4bWwtbGlzdC5odG1sLCBkb2MvaHRtbC9saWJ4bWwtdGVzdE9PTWxpYi5odG1sLAoJICBkb2MvaHRtbC9saWJ4bWwtd2luY2Vjb21wYXQsIGRvYy9odG1sL3dpbnNvY2tjb21wYXQuaHRtbCwKCSAgZG9jL2h0bWwvbGlieG1sLXhtbGV4cG9ydHMuaHRtbCwgZG9jL2h0bWwvbGlieG1sLXhtbHZlcnNpb24uaHRtbCwKCSAgZG9jL2h0bWwvbGlieG1sLXhtbHdpbjMydmVyc2lvbi5odG1sLCBkb2MvaHRtbC9saWJ4bWwteG1sd3JpdGVyLmh0bWw6CgkgIGFkZGVkIG1pc3NpbmcgcGFnZXMgZm9yIHRoZSB3ZWJzaXRlLgoKU2F0IE5vdiAxNSAxODoyMzo0OCBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy9NYWtlZmlsZS5hbSBkb2MvKi5odG1sIGRvYy9odG1sLyouaHRtbDogcmVidWlsdCB0aGUKCSAgZ2VuZXJhdGVkIHBhZ2VzIChhZ2FpbiksIG1hbnVhbGx5IHJlc3RvcmVkIGRvYy9odG1sL2luZGV4Lmh0bWwKCSAgYW5kIG1hbnVhbGx5IGVkaXRlZCBnZW5lcmF0ZWQgZmlsZSBkb2MvZ25vbWUteG1sLnhtbCB0byBwdXQKCSAgaW4gYXBwcm9wcmlhdGUgaGVhZGluZ3MuCgkqIGRvYy9kb2NkZXNjci5kb2M6IG5ldyBmaWxlIHRvIGRlc2NyaWJlIGRldGFpbHMgb2YgdGhlCgkgIGRvY3VtZW50IGdlbmVyYXRpb24gKGhlbHBzIG15IG1lbW9yeSBmb3IgdGhlIG5leHQgdGltZSkKCSogZ2VuQ2hSYW5nZXMucHksY2h2YWxpZC5jLGluY2x1ZGUvbGlieG1sL2NodmFsaWQuaDogbWlub3IKCSAgZW5oYW5jZW1lbnQgdG8gcGxlYXNlIHRoZSBhdXRvbWF0aWMgZG9jdW1lbnRhdGlvbiBnZW5lcmF0aW9uLgoKRnJpIE5vdiAxNCAyMzo0NzozMSBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGNhdGFsb2cuYyxyZWxheG5nLmMsdGVzdEF1dG9tYXRhLmMseHBvaW50ZXIuYyxnZW5DaFJhbmdlcy5weSwKCSAgY2h2YWxpZC5jLGluY2x1ZGUvbGlieG1sL2NodmFsaWQuaCxkb2MvZXhhbXBsZXMvdGVzdDEuYzoKCSAgbWlub3IgZXJyb3IgY2xlYW51cCBmb3IgZ2NjLTMuMy5bMTJdIGNvbXBpbGF0aW9uIHdhcm5pbmdzLgoKRnJpIE5vdiAxNCAxNTowODoxMyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHRyZWUuYzogbWlub3IgY2hhbmdlcyB0byBzb21lIGNvbW1lbnRzCgkqIGRvYy8qLmh0bWw6IHJlYnVpbHQgdGhlIGdlbmVyYXRlZCBIVE1MIHBhZ2VzIGZvciBjaGFuZ2VzCgkgIGZyb20gamZsZWNrIChidWcgMTI2OTQ1KQoKVGh1IE5vdiAxMyAxMjo0NDoxNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvZXhhbXBsZXMvKjogYWRkZWQgRG9kamkncyBleGFtcGxlLCBhZGRlZCBvdXRwdXQgaGFuZGxpbmcKClRodSBOb3YgMTMgMTE6MzU6MzUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2V4YW1wbGVzLyo6IGFkZGVkIEFsZWtzZXkgWFBhdGggZXhhbXBsZSwgZml4ZWQgYnVncwoJICBpbiB0aGUgaW5kZXhlcgoKV2VkIE5vdiAxMiAyMzo0ODoyNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvKjogaW50ZWdyYXRpbmcgdGhlIGV4YW1wbGVzIGluIHRoZSBuYXZpZ2F0aW9uIG1lbnVzCgkqIGRvYy9leGFtcGxlcy8qOiBhZGRlZCBtYWtlIHRlc3RzLCB1cGRhdGVkIHRoZSBuYXZpZ2F0aW9uLAoJICBhZGRlZCBhIG5ldyB0ZXN0LCBjbGVhbnVwcywgdXBkYXRlcy4KCldlZCBOb3YgMTIgMTc6NTA6MzYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jLyouaHRtbDogcmVidWlsdCB0aGUgZ2VuZXJhdGVkIEhUTUwgcGFnZXMKCSogZG9jL2V4YW1wbGVzLyo6IHVwZGF0ZWQgdGhlIHN0eWxlc2hlZXRzLCBhZGRlZCBhIHN5bm9wc2lzLAoJICBNYWtlZmlsZS5hbSBpcyBub3cgZ2VuZXJhdGVkIGJ5IGluZGV4LnB5CgpXZWQgTm92IDEyIDAxOjM4OjE2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9zaXRlLnhzbCBkb2MvZXhhbXBsZXMvTWFrZWZpbGUuYW0gZG9jL2V4YW1wbGVzL2luZGV4Lmh0bWw6CgkgIGFkZGVkIGF1dG9nZW5lcmF0aW9uIG9mIGEgd2ViIHBhZ2UgZm9yIHRoZSBleGFtcGxlcwoJKiBkb2MvZXhhbXBsZXMvZXhhbXBsZTEuYyBkb2MvZXhhbXBsZXMvLmN2c2lnbm9yZQoJICBkb2MvZXhhbXBsZXMvZXhhbXBsZXMueG1sIGRvYy9leGFtcGxlcy9pbmRleC5weTogdXBkYXRlZCB0aGUKCSAgaW5mb3JtYXRpb25zIGV4dHJhY3RlZCwgaW1wcm92ZWQgdGhlIGZvcm1hdCBhbmQgaW5kZXhpbmcuCgpUdWUgTm92IDExIDIyOjA4OjU5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXhpbmNsdWRlLXRlc3Qtc3VpdGUucHk6IGxlc3MgdmVyYm9zZSBvbiBkaWZmZXJlbmNlCgkqIGxpYnhtbC5zcGVjLmluOiBjbGVhbnVwCgkqIHBhcnNlci5jOiBmaXhlZCB4bWxDbGVhbnVwUGFyc2VyKCkgZG9jCgkqIGRvYy9NYWtlZmlsZS5hbSBkb2MvYXBpYnVpbGQucHkgZG9jL2xpYnhtbDItYXBpLnhtbAoJICBkb2MvZXhhbXBsZXMvTWFrZWZpbGUuYW0gZG9jL2V4YW1wbGVzL2V4YW1wbGUxLmMgCgkgIGRvYy9leGFtcGxlcy9leGFtcGxlcy54bWwgZG9jL2V4YW1wbGVzL2luZGV4LnB5CgkgIGRvYy9leGFtcGxlcy90ZXN0MS54bWw6IHdvcmsgb24gYWRkaW5nIEMgZXhhbXBsZXMgYW5kCgkgIGdlbmVyYXRpbmcgYXV0b21hdGVkIGluZm9ybWF0aW9uIGFib3V0IHRob3NlLiBleGFtcGxlcy54bWwKCSAgaXMgYXV0b2dlbmVyYXRlZCBkZXNjcmliaW5nIHRoZSBleGFtcGxlcy4KCSogZXhhbXBsZS9NYWtlZmlsZS5hbTogY2xlYW51cAoKTW9uIE5vdiAxMCAyMzo0NzowMyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGdlblVuaWNvZGUucHksIHhtbHVuaWNvZGUuYywgaW5jbHVkZS9saWJ4bWwveG1sdW5pY29kZS5oOgoJICBmaXhlZCBtaXNzaW5nICctJyBpbiBibG9jayBuYW1lcywgZW5oYW5jZWQgdGhlIGhhY2sgZm9yCgkgIEFCSSBhbGlhc2luZy4KClN1biBOb3YgIDkgMjA6Mjg6MjEgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBnZW5Vbmljb2RlLnB5LCB4bWx1bmljb2RlLmMsIGluY2x1ZGUvbGlieG1sL3htbHVuaWNvZGUuaCwKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IGVuaGFuY2VkIGZvciByYW5nZSBjaGVja2luZywKCSAgdXBkYXRlZCB0byBVbmljb2RlIHZlcnNpb24gNC4wLjEgKEFQSSBkb2NzIGFsc28gdXBkYXRlZCkKCSogcHl0aG9uL2dlbmVyYXRvci5weTogbWlub3IgY2hhbmdlIHRvIGZpeCBhIHdhcm5pbmcKCldlZCBOb3YgIDUgMjM6NDY6MzYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGFwcGx5IGZpeCBmcm9tIEthcmwgRWljaHdhbGRlciBmb3Igc2NyaXB0IHBhdGgKCldlZCBOb3YgIDUgMTA6NDk6MjAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvY29uZmlndXJlLmpzOiBhcHBsaWVkIHBhdGNoIGZyb20gTWFyayBWYWtvYyB0byBzaW1wbGlmeQoJICBoaXMgd29yayBmcm9tIENWUyBjaGVja291dHMuCgpUdWUgTm92ICA0IDIxOjE2OjQ3IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1scmVhZGVyLmh0bWw6IG1pbm9yIGNsZWFudXBzCgpUdWUgTm92ICA0IDE1OjUyOjI4IFBTVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOiBjaGFuZ2VkIG1hY3JvIEFUVFJJQlVURV9VTlVTRUQKCSAgZm9yIGdjYyBzbyB0aGF0LCBpZiB1bmRlZmluZWQsIGl0J3MgZGVmaW5lZCBhcwoJICBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQoKVHVlIE5vdiAgNCAxNToyODowNyBQU1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IHNtYWxsIGVuaGFuY2VtZW50IHRvIGFzc3VyZSBBVFRSSUJVVEVfVU5VU0VECgkgIGFwcGVhcnMgYWZ0ZXIgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgoJKiB2YWxpZC5jOiB0cml2aWFsIGNoYW5nZSB0byBlbGltaW5hdGUgYSB3YXJuaW5nIG1lc3NhZ2UKClR1ZSBOb3YgIDQgMTE6MjQ6MDQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIE5FV1MgZG9jLyo6IHByZXBhcmluZyByZWxlYXNlIDIuNi4yLCB1cGRhdGVkIGFuZAoJICByZWJ1aWx0IHRoZSBkb2NzCgpUdWUgTm92ICA0IDA5OjM4OjQ2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogY2hhbmdlIC0taHRtbCB0byBtYWtlIHN1cmUgd2UgdXNlIHRoZSBIVE1MIHNlcmlhbGl6YXRpb24KCSAgcnVsZSBieSBkZWZhdWx0IHdoZW4gSFRNTCBwYXJzZXIgaXMgdXNlZCwgYWRkIC0teG1sb3V0IHRvIGFsbG93IHRvCgkgIGZvcmNlIHRoZSBYTUwgc2VyaWFsaXplciBvbiBIVE1MLgoJKiBIVE1MdHJlZS5jOiB1Z2x5IHR3ZWFrIHRvIGZpeCB0aGUgb3V0cHV0IG9uIDxwPiBlbGVtZW50IGFuZCAKCSAgc29sdmUgIzEyNTA5MwoJKiByZXN1bHQvSFRNTC8qOiB0aGlzIGNoYW5nZXMgdGhlIG91dHB1dCBvZiBzb21lIHRlc3RzCgpNb24gTm92ICAzIDE3OjUxOjI4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IGZpeGVkIGJ1ZyAjMTI1ODEyLCBhYm91dCBYUG9pbnRlciBpbiBYSW5jbHVkZSAKCSAgZmFpbGluZyBidXQgbm90IHJldHVybmluZyBhbiBlcnJvci4KCk1vbiBOb3YgIDMgMTc6MTg6MjIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4ZWQgYnVnICMxMjU4MTEgcmVsYXRlZCB0byBEVEQgcG9zdCB2YWxpZGF0aW9uCgkgIHdoZXJlIHRoZSBEVEQgZG9lc24ndCBwZXJ0YWluIHRvIGEgZG9jdW1lbnQuCgpNb24gTm92ICAzIDE1OjI1OjU4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg6IGltcGxlbWVudGVkCgkgIHRoZSBYTUxfUEFSU0VfTk9ORVQgcGFyc2VyIG9wdGlvbi4KCSogeG1sbGludC5jOiBjb252ZXJ0ZWQgeG1sbGludC5jIHRvIHVzZSB0aGUgb3B0aW9uIGluc3RlYWQgb2YgCgkgIHJlbHlpbmcgb24gdGhlIGdsb2JhbCByZXNvbHZlciB2YXJpYWJsZS4KCk1vbiBOb3YgIDMgMTM6MjY6MzIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYyB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94aW5jbHVkZS5oOiBhZGRpbmcgWEluY2x1ZGUKCSAgc3VwcG9ydCB0byB0aGUgcmVhZGVyIGludGVyZmFjZS4gTG90IG9mIHRlc3Rpbmcgb2YgdGhlIHdhbGtlciwKCSAgdmFyaW91cyBidWcgZml4ZXMuCgkqIHhtbGxpbnQuYzogYWRkZWQgLS13YWxrZXIgYW5kIG1hZGUgc3VyZSAtLXhpbmNsdWRlIC0tc3RyZWFtIC0tZGVidWcKCSAgd29ya3MgYXMgZXhwZWN0ZWQKCSogTWFrZWZpbGUuYW0gcmVzdWx0L2R0ZDExLnJkciByZXN1bHQvZW50Ni5yZHIgdGVzdC9kdGQxMSB0ZXN0L2VudDYKCSAgcmVzdWx0L1hJbmNsdWRlLyoucmRyOiBhZGRlZCByZWdyZXNzaW9uIHRlc3RzIGZvciB0aGUgd2Fsa2VyIGFuZAoJICBYSW5jbHVkZSB4bWxSZWFkZXIgc3VwcG9ydCwgaGFkIHRvIHNsaWdodGx5IGNoYW5nZSBhIGNvdXBsZSBvZiB0ZXN0cwoJICBiZWNhdXNlIHRoZSB3YWxrZXIgY2FuJ3QgZGlzdGluZ3Vpc2ggPGZvby8+IGZyb20gPGZvbz48L2Zvbz4KClNhdCBOb3YgIDEgMTc6NDI6MjcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIG5hbm9odHRwLmMgdGhyZWFkcy5jOiBzZWNvbmQgQmVPUyBwYXRjaCBmcm9tIAoJICBNYXJjaW4gJ1NoYXJkJyBLb25pY2tpCgpGcmkgT2N0IDMxIDE1OjM1OjIwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhbHdheXMgZ2VuZXJhdGUgbGluZSBudW1iZXJzCgpGcmkgT2N0IDMxIDExOjUzOjQ2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBhbm90aGVyIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBpbiBmaXhpbmcgIzEyNTgyMwoKRnJpIE9jdCAzMSAxMTozMzoxOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmM6IHByZXZpb3VzIGZpeCBmb3IgIzEyNDA0NCB3YXMgYnJva2VuLCBjb3JyZWN0CgkgIGZpeCBwcm92aWRlZC4KCSogSFRNTHBhcnNlci5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHhtbElPLmM6IGZpeCB4bWxTdG9wUGFyc2VyKCkKCSAgYW5kIHRoZSBlcnJvciBoYW5kbGVycyB0byBhZGRyZXNzICMxMjU4NzcKClRodSBPY3QgMzAgMjM6MTA6NDYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHNpZGUgZWZmZWN0IG9mICMxMjMxMDUgcGF0Y2gsIG5hbWVzcGFjZSByZXNvbHV0aW9uCgkgIHdvdWxkIGZhaWwgd2hlbiBkZWZpbmVkIGluIGludGVybmFsIGVudGl0aWVzLCBmaXhlcyAjMTI1ODIzCgpUaHUgT2N0IDMwIDE0OjEwOjQyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYzogYmUgbW9yZSBkZWZlbnNpdmUgaW4gdGhlIHhtbFJlYWRlciBweXRob24gYmluZGluZ3MKCSAgZml4aW5nIGJ1ZyAjMTI0MDQ0CgpUaHUgT2N0IDMwIDExOjE0OjMxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IHRoZSBhLXBvc3RlcmlvcmkgRFREIHZhbGlkYXRpb24gY29kZSB3YXMgbm90IHZhbGlkYXRpbmcKCSAgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMsIHRoaXMgZml4ZXMgIzEyNDExMAoKV2VkIE9jdCAyOSAxNDoxMzowMyBQRFQgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbElPLmM6IGVuaGFuY2VkIHRvIGJ5cGFzcyBjb21wcmVzc2lvbiBkZXRlY3Rpb24gY29kZQoJICB3aGVuIGlucHV0IGZpbGUgaXMgc3RkaW4gKGJ1ZyAxMjU4MDEpCgpXZWQgT2N0IDI5IDE4OjIxOjAwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGZpeCBuZWVkZWQgd2hlbiBIVFRQIGlzIG5vdCBjb21waWxlZCBpbiBieSBNYXJrIFZha29jCgpXZWQgT2N0IDI5IDE4OjA1OjUzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IG1vcmUgZml4ZXMgYWJvdXQgdW5yZWdpc3RlcmluZyBvYmplY3RzCgkqIGluY2x1ZGUvbGlieG1sL3JlbGF4bmcuaDogYXBwbGllZCBwYXRjaCBmcm9tIE1hcmsgVmFrb2MKCSAgbWlzc2luZyBfY3BsdXNwbHVzIHByb2Nlc3NpbmcgY2xhdXNlCgpXZWQgT2N0IDI5IDA3OjQ5OjUyIDIwMDMgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggcGFyc2VyLmM6IGFkZGVkIHhtbFN0clZQcmludGYgZnVuY3Rpb24KCldlZCBPY3QgMjkgMTQ6Mzc6NDAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmMgdGVzdFRocmVhZHMuYyB0aHJlYWRzLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbQoJICBNYXJjaW4gJ1NoYXJkJyBLb25pY2tpIHRvIHByb3ZpZGUgQmVPUyB0aHJlYWQgc3VwcG9ydC4KCldlZCBPY3QgMjkgMTQ6MjA6MTQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaDogYXBwbGllZCBwYXRjaAoJICBmcm9tIFN0ZXZlIEJhbGwgdG8gbWFrZSBhIHNjaGVtYSBwYXJzZXIgZnJvbSBhIHByZXBhcnNlZCBkb2N1bWVudC4KCldlZCBPY3QgMjkgMTM6NTI6MjUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhcHBsaWVkIGEgY291cGxlIG9mIHBhdGNoZXMgZnJvbSBNYXJrIExpbGJhY2sgYWJvdXQgdGV4dAoJICBub2RlcyBjb2FsZXNjaW5nCgpXZWQgT2N0IDI5IDEyOjE2OjUyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGNoYW5nZSBzdWdnZXN0ZWQgYnkgQW50aG9ueSBDYXJyaWNvIHdoZW4gdW5yZWdpc3RlcmluZwoJICBhIG5hbWVzcGFjZSBwcmVmaXggdG8gYSBjb250ZXh0CgkqIGhhc2guYzogYmUgbW9yZSBjYXJlZnVsIGFib3V0IGNhbGxpbmcgY2FsbGJhY2tzIHdpdGggTlVMTCBwYXlsb2Fkcy4KCldlZCBPY3QgMjkgMDA6MDQ6MjYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIE5FV1MgZG9jLyo6IHByZXBhcmluZyByZWxlYXNlIDIuNi4xLCB1cGRhdGVkIGFuZAoJICByZWdlbmVyYXRlZCBkb2NzIGFuZCBBUElzCgkqIHBhcnNlci5jOiBjbGVhbnVwIGFuZCBsYXN0IGNoYW5nZSB0byBmaXggIzEyMzEwNQoKVHVlIE9jdCAyOCAyMzowMjoyOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IEZpeCAjMTI0OTA3IGJ5IHNpbXBseSBiYWNrcG9ydGluZyB0aGUgc2FtZQoJICBmaXggYXMgZm9yIHRoZSBYTUwgcGFyc2VyCgkqIHJlc3VsdC9IVE1ML2RvYzMuaHRtLmVycjogY2hhbmdlIHRvIElEIGRldGVjdGluZyBtb2RpZmllZCBvbmUKCSAgdGVzdCByZXN1bHQuCgpUdWUgT2N0IDI4IDIyOjI4OjUwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBpbmNsdWRlZCBhIG5ldyBmdW5jdGlvbgoJICB0byByZXVzZSBhIFB1c2ggcGFyc2VyIGNvbnRleHQsIGJhc2VkIG9uIEdyYWhhbSBCZW5uZXR0IG9yaWdpbmFsCgkgIGNvZGUKCSogdmFsaWQuYzogaW4gSFRNTCwgYSBuYW1lIGluIGFuIGlucHV0IGlzIG5vdCBhbiBJRAoJKiBUT0RPOiBidWcgbGlzdCB1cGRhdGUKClR1ZSBPY3QgMjggMTk6NTQ6MzcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogYXBwbGllZCBwYXRjaCBmcm9tIG5pY29AeHRyYWR5bmUuY29tIGZvciAjMTI1MDMwCgpUdWUgT2N0IDI4IDE2OjQyOjE2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBjbGVhbnVwCgkqIGVycm9yLmMgdmFsaWQuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBmaXhpbmcgYnVnICMxMjU2NTMKCSAgc29tZXRpbWVzIHRoZSBlcnJvciBoYW5kbGVycyBjYW4gZ2V0IGEgcGFyc2VyIGNvbnRleHQgb24gRFRECgkgIGVycm9ycywgYW5kIHNvbWV0aW1lIHRoZXkgZG9uJ3QuIFNvIGJlIHZlcnkgY2FyZWZ1bCB3aGVuIHRyeWluZwoJICB0byBncmFiIHRob3NlIGluZm9ybWF0aW9ucy4KClR1ZSBPY3QgMjggMTU6MjY6MTggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhcHBsaWVkIHBhdGNoIGZyb20gS2FzaW1pZXIgQnVjaGNpayB3aGljaCBmaXhlcyBhIAoJICBwcm9ibGVtIGluIHhtbFNlYXJjaE5zIGludHJvZHVjZWQgaW4gMi42LjAKClR1ZSBPY3QgMjggMTQ6NTc6MDMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkICMxMjMyNjMsIHRoZSBlbmNvZGluZyBpcyBtYW5kYXRvcnkgaW4gYSB0ZXh0ZGVjbC4KClR1ZSBPY3QgMjggMTM6NDg6NTIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXggYnVnICMxMjUwNDcgYWJvdXQgc2VyaWFsaXppbmcgd2hlbiBmaW5kaW5nIGEgCgkgIGRvY3VtZW50IGZyYWdtZW50IG5vZGUuCgpNb24gT2N0IDI3IDExOjExOjI5IEVTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3RTQVguYzogZml4IGJ1ZyAjMTI1NTkyIG5lZWQgYSBOVUxMIGNoZWNrCgkqIGluY2x1ZGUvbGlieG1sL2NodmFsaWQuaDogcmVuYW1lIGEgcGFyYW1ldGVyCgpNb24gT2N0IDI3IDA5OjQzOjQ4IEVTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gIzEyMzEwNSBhYm91dCBkZWZhdWx0ZWQgYXR0cmlidXRlcwoJICBmcm9tIGVsZW1lbnQgY29taW5nIGZyb20gYW4gZW50aXR5CgpNb24gT2N0IDI3IDIxOjEyOjI3IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sbGludC5jOiBmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgZnJvbSBJUklYIChidWcgMTI1MTgyKQoJKiBweXRob24vbGlieG1sLnB5OiByZW1vdmVkIHRhYnMsIHJlcGxhY2VkIHdpdGggc3BhY2VzCgkgIChidWcgMTI1NTcyKQoKTW9uIE9jdCAyNyAwNjoxNzozMCBFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuaCBwYXJzZXJJbnRlcm5hbHMuYyB4bWxJTy5jOiBtYWtlIHN1cmUgd2UgcmVwb3J0IGVycm9ycwoJICBpZiB4bWxOZXdJbnB1dEZyb21GaWxlKCkgZmFpbHMuCgkqIHhtbHJlYWRlci5jOiBhdm9pZCB1c2luZyBfcHJpdmF0ZSBmb3IgdGhlIG5vZGUgb3IgZG9jdW1lbnQKCSAgZWxlbWVudHMuCgpTYXQgT2N0IDI1IDE3OjMzOjU5IENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvY29uZmlndXJlLmpzOiBhZGRlZCBkZWNsYXJhdGlvbiBmb3IgdmVyTWljcm9TdWZmaXgKCkZyaSBPY3QgMjQgMjM6MDg6MTcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5tNDogYXBwbGllZCBwYXRjaCBmcm9tIFBhdHJpY2sgV2VsY2hlIHByb3ZpZGVkIGluCgkgIGJ1ZyAjMTI1NDMyICwgZnV0dXJlIHByb29maW5nIHRoZSAubTQgZmlsZS4KCSogcGFyc2VyLmM6IHJlc2V0dGluZyB0aGUgY29udGV4dCBzaG91bGQgYWxzbyByZXNldCB0aGUgZXJyb3IKCSogVE9ETzogcHJvYmxlbSBvZiBjb25mb3JtYW5jZSB3LnIudC4gRTIwIHdhcyByYWlzZWQgaW4gdGhlCgkgIFhNTCBDb3JlIHRlbGNvbmYgYW5kIGxpYnhtbDIgaXNuJ3QgY29uZm9ybWFudCB0aGVyZS4KCldlZCBPY3QgMjIgMTQ6MzM6MDUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHdyaXRlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQWxmcmVkIE1pY2thdXRzY2ggZml4aW5nICMxMjUxODAKCldlZCBPY3QgMjIgMTA6NTA6MzEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNodmFsaWQuYyBnZW5DaFJhbmdlcy5weTogU3RlcGhhbmUgQmlkb3VsIHBvaW50ZWQgb3V0IGFub3RoZXIKCSAgc21hbGwgZ2xpdGNoIG1pc3NpbmcgYSBjb25zdAoKV2VkIE9jdCAyMiAxMDo0MzoyMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2h2YWxpZC5jIGdlbkNoUmFuZ2VzLnB5OiBTdGVwaGFuZSBCaWRvdWwgcG9pbnRlZCBvdXQgdGhhdAoJICBpdCBkb2Vzbid0IGRlZmluZSBJTl9MSUJYTUwKClR1ZSBPY3QgMjEgMjE6MTQ6NTUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLm1pbmd3OiB0eXBvIHBvaW50ZWQgb3V0IGJ5IFN0ZXBoYW5lIEJpZG91bAoKVHVlIE9jdCAyMSAxMToyNjozNiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvTWFrZWZpbGUuYmNiIHdpbjMyL01ha2VmaWxlLm1pbmd3IHdpbjMyL01ha2VmaWxlLm1zdmMKCSAgd2luMzIvY29uZmlndXJlLmpzOiBzZXQgb2YgV2luMzIgcGF0Y2hlcyBmb3IgMi42LjAgYnkgSm9hY2hpbSBCYXVjaAoKVHVlIE9jdCAyMSAwMjowNzoyMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBsYXN0IG1pbnV0ZSBwYXRjaCBmcm9tIEVyaWMgWnVyY2hlciBtYWtpbmcgaXQgaW50byAyLjYuMAoKVHVlIE9jdCAyMSAwMjowMzowMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIE5FV1MgZG9jL2xpYnhtbDIueHNhOiBwcmVwYXJpbmcgbGlieG1sMi0yLjYuMAoJKiBkb2MvKjogdXBkYXRlZCBhbmQgcmVnZW5lcmF0ZWQgdGhlIGRvY3MgYW5kIEFQSQoKVHVlIE9jdCAyMSAwMTowMTo1NSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jIGVycm9yLmMgdHJlZS5jOiBtb3ZlZCB0aGUgbGluZSBudW1iZXIgdG8gdGhlaXIgcHJvcGVyCgkgIGZpZWxkIGluIGVsZW1lbnRzIG5vdy4KClR1ZSBPY3QgMjEgMDA6Mjg6MjAgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiB4bWx3cml0ZXIuYyBNYWtlZmlsZS5hbSBpbmNsdWRlL2xpYnhtbC94bWx3cml0ZXIuaAoJICBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbSBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46CgkgIGFkZGVkIHRoZSB4bWxXcml0ZXIgbW9kdWxlIGNvbnRyaWJ1dGVkIGJ5IEFsZnJlZCBNaWNrYXV0c2NoCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogYWRkZWQgcm9vbSBmb3IgbGluZSBhbmQgZXh0cmEgaW5mb3JtYXRpb24KCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlcjYucHk6IGJ1Z2ZpeGluZyBzb21lIHByb2JsZW0gc29tZQoJICBvZiB0aGVtIGludHJvZHVjZWQgaW4gU2VwdGVtYmVyCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYyBkb2MvbGlieG1sMi1hcGkueG1sOiByZWdlbmVyYXRlZCB0aGUgQVBJCgpNb24gT2N0IDIwIDE5OjAyOjUzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4geG1sZHdhbGsuYyB4bWxyZWFkZXIuYwoJICBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbSBpbmNsdWRlL2xpYnhtbC94bWxkd2Fsay5oCgkgIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjogcmVtb3ZpbmcgeG1sZHdhbGsgbW9kdWxlCgkgIHNpbmNlIGl0IGdvdCBtZXJnZWQgd2l0aCB0aGUgeG1scmVhZGVyLgoJKiBwYXJzZXIuYzogY2xlYW51cAoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmMgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgZG9jL2xpYnhtbDItYXBpLnhtbDoKCSAgcmVidWlsdCB0aGUgQVBJCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcmVhZGVyNy5weQoJICBweXRob24vdGVzdHMvd2Fsa2VyLnB5OiBhZGRpbmcgcmVncmVzc2lvbiB0ZXN0aW5nIGZvciB0aGUKCSAgbmV3IHhtbHJlYWRlciBBUElzLCBuZXcgQVBJcyBmb3IgcmVhZGVyIGNyZWF0aW9uLCBpbmNsdWRpbmcKCSAgbWFrZWluZyByZWFkZXIgIndhbGtlciIgb3BlcmF0aW5nIG9uIHByZXBhcnNlZCBkb2N1bWVudCB0cmVlcy4KClN1biBPY3QgMjAgMjI6Mzc6MDMgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBlbnRpdGllcy5jLCB2YWxpZC5jOiBmaXhlZCBwcm9ibGVtIHJlcG9ydGVkIG9uIHRoZSBtYWlsaW5nCgkgIGxpc3QgYnkgTWVsdnluIFNvcGFjdWEgLSB3cm9uZyBhcmd1bWVudCBvcmRlciBvbiBmdW5jdGlvbnMKCSAgY2FsbGVkIHRocm91Z2ggeG1sSGFzaFNjYW4uCgpTdW4gT2N0IDE5IDIzOjU3OjQ1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIHhtbElPLmM6IGZpeGVzIGZvciBjb21waWxpbmcgdXNpbmcgLS13aXRoLW1pbmltdW0KClN1biBPY3QgMTkgMjM6NDY6MDQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogY2xlYW51cCB4bWxOb2RlR2V0Q29udGVudCgpIHJldXNpbmcgeG1sTm9kZUJ1ZkdldENvbnRlbnQoKSwKCSAgdGVzdGVkIGl0IHRocm91Z2ggdGhlIHhzbHQgcmVncmVzc2lvbiBzdWl0ZS4KClN1biBPY3QgMTkgMjI6NDI6MTYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGFkZGluZyB4bWxOb2RlQnVmR2V0Q29udGVudCgpCgkgIGFsbG93aW5nIHRvIGdyYWIgdGhlIGNvbnRlbnQgd2l0aG91dCBmb3JjaW5nIGFsbG9jYXRpb25zLgoJKiBweXRob24vbGlieG1sMmNsYXNzLnR4dCBkb2MvbGlieG1sMi1hcGkueG1sOiByZWJ1aWx0IHRoZSBBUEkKCSogeHBhdGguYyB4bWxkd2Fsay5jOiByZW1vdmVkIGEgY291cGxlIG9mIGNvbW1lbnQgZXJyb3JzLgoKU3VuIE9jdCAxOSAxNjozOTozNiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBDaHJpcyBBbmRlcnNvbiB0byBjaGFuZ2UgYmFjawoJICBtZW1jbXAgd2l0aCBDTVB4KCkKClN1biBPY3QgMTkgMTY6MjQ6MTkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgdG8gbm90IHNlbmQgTlVMTCB0byAlcyBwcmludGluZwoJKiBweXRob24vdGVzdHMvZXJyb3IucHkgcmVzdWx0L0hUTUwvZG9jMy5odG0uZXJyCgkgIHJlc3VsdC9IVE1ML3Rlc3QzLmh0bWwuZXJyIHJlc3VsdC9IVE1ML3dpcmVkLmh0bWwuZXJyCgkgIHJlc3VsdC92YWxpZC90OC54bWwuZXJyIHJlc3VsdC92YWxpZC90OGEueG1sLmVycjogY2xlYW5pbmcKCSAgdXAgc29tZSBvZiB0aGUgcmVncmVzc2lvbiB0ZXN0cyBlcnJvcgoKU3VuIE9jdCAxOSAxNTozMTo0MyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvbmFub2h0dHAuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaCAKCSAgaW5jbHVkZS9saWJ4bWwveG1sSU8uaCBuYW5vaHR0cC5jIHBhcnNlckludGVybmFscy5jIHhtbElPLmM6CgkgIEZpeGVkIHRoZSBIVFRQPC0+cGFyc2VyIGludGVycmFjdGlvbiwgd2hpY2ggc2hvdWxkIGZpeCAyIGxvbmcKCSAgc3RhbmRpbmcgYnVncyAjMTA0NzkwIGFuZCAjMTI0MDU0ICwgdGhpcyBhbHNvIGZpeCB0aGUgZmFjdCB0aGF0CgkgIEhUVFAgZXJyb3IgY29kZSAoPiA0MDApIHNob3VsZCBub3QgZ2VuZXJhdGUgZGF0YSwgd2UgdXN1YWxseQoJICBkb24ndCB3YW50IHRvIHBhcnNlIHRoZSBIVE1MIGVycm9yIGluZm9ybWF0aW9uIGluc3RlYWQgb2YgdGhlCgkgIHJlc291cmNlIGxvb2tlZCBhdC4KClN1biBPY3QgMTkgMTk6MjA6NDggSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MvTWFrZWZpbGUuYW06IGVuaGFuY2VkIHRoZSBpbnN0YWxsYXRpb24gb2YgdHV0b3JpYWwgZmlsZXMKCSAgdG8gYXZvaWQgaW5zdGFsbGluZyBDVlMgc3ViZGlyZWN0b3JpZXMgKGJ1ZyAxMjI5NDMpCgpTdW4gT2N0IDE5IDE3OjMzOjI3IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sSU8uYzogZml4ZWQgc2VnZmF1bHQgd2hlbiBpbnB1dCBmaWxlIG5vdCBwcmVzZW50CgkqIHRyZWUuYzogY2hhbmdlZCBvdXRwdXQgZm9ybWF0dGluZyBvZiBYTUxfQ0RBVEFfU0VDVElPTgoJICAoYnVnIDEyMDkxNykKClN1biBPY3QgMTkgMDA6MTU6MzggSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaCBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYwoJICBTQVgyLmMgY2F0YWxvZy5jIGRlYnVnWE1MLmMgZW50aXRpZXMuYyBwYXJzZXIuYyByZWxheG5nLmMKCSAgdGVzdFNBWC5jIHRyZWUuYyB2YWxpZC5jIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYwoJICB4cGF0aC5jOiBDaGFuZ2VkIGFsbCAoPykgb2NjdXJlbmNlcyB3aGVyZSB2YWxpZGF0aW9uIG1hY3JvcwoJICAoSVNfeHh4KSBoYWQgc2luZ2xlLWJ5dGUgYXJndW1lbnRzIHRvIHVzZSBJU194eHhfQ0ggaW5zdGVhZAoJICAoZS5nLiBJU19CTEFOSyBjaGFuZ2VkIHRvIElTX0JMQU5LX0NIKS4gIFRoaXMgZ2V0cyByaWQgb2YKCSAgbWFueSB3YXJuaW5nIG1lc3NhZ2VzIG9uIGNlcnRhaW4gcGxhdGZvcm1zLCBhbmQgYWxzbyBoaWdoLQoJICBsaWdodHMgcGxhY2VzIGluIHRoZSBsaWJyYXJ5IHdoaWNoIG1heSBuZWVkIHRvIGJlIGVuaGFuY2VkCgkgIGZvciBwcm9wZXIgVVRGOCBoYW5kbGluZy4KClNhdCBPY3QgMTggMjA6MzQ6MTggSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBnZW5DaFJhbmdlcy5weSwgY2h2YWxpZC5jLCBpbmNsdWRlL2xpYnhtbC9jaHZhbGlkLmgsCgkgIGRvYy9hcGlidWlsZC5weTogZW5oYW5jZWQgdG8gaW5jbHVkZSBlbm91Z2ggY29tbWVudHMgdG8KCSAgbWFrZSB0aGUgYXBpIGRvYyBnZW5lcmF0aW9uIGhhcHB5LgoKU2F0IE9jdCAxOCAwNzoyODoyNSBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vaHR0cC5jIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwvbmFub2h0dHAuaDogc3RhcnRpbmcgd29yawoJICB0byBmaXggdGhlIEhUVFAvWE1MIHBhcnNlciBpbnRlZ3JhdGlvbi4KClNhdCBPY3QgMTggMTE6MDQ6MzIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiBhZGRlZCBuZXcgQVBJcwoJICBmb3IgY3JlYXRpbmcgcmVhZGVyIGZyb20gc291cmNlcyBvciByZXVzaW5nIGEgcmVhZGVyIHdpdGgKCSAgYSBuZXcgc291cmNlLCBsaWtlIHRoZSB4bWxSZWFkeHggYW5kIHhtbEN0eHRSZWFkeHh4CgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYyBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy9hcGlidWlsZC5weQoJICBkb2MvTWFrZWZpbGUuYW06IHJlZ2VuZXJhdGVkIHRoZSBBUElzCgkqIGRvYy94bWwuaHRtbDogYXBwbGllZCBhIHBhdGNoIGZyb20gU3RlZmFuIEtvc3QgZm9yIG5hbWVzYXBjZSBkb2NzCgpTYXQgT2N0IDE4IDEyOjQ2OjAyIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZ2VuQ2hSYW5nZXMucHksIGNodmFsaWQuYywgaW5jbHVkZS9saWJ4bWwvY2h2YWxpZC5oLAoJICBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaDogZW5oYW5jZWQgbWFjcm9zIHRvIGF2b2lkCgkgIGJyZWFraW5nIEFCSSBmcm9tIHByZXZpb3VzIHZlcnNpb25zLgoJKiBjYXRhbG9nLmMsIHBhcnNlci5jLCB0cmVlLmM6IG1vZGlmaWVkIHRvIHVzZSBJU18qIG1hY3JvcwoJICBkZWZpbmVkIGluIHBhcnNlckludGVybmFscy5oLiAgTWFrZXMgbWFpbnRlbmFuY2UgbXVjaCBlYXNpZXIuCgkqIHRlc3RIVE1MLmMsIHRlc3RTQVguYywgcHl0aG9uL2xpYnhtbC5jOiBtaW5vciBmaXhlcyB0byBhdm9pZAoJICBjb21waWxhdGlvbiB3YXJuaW5ncwoJKiBjb25maWd1cmF0aW9uLmluOiBmaXhlZCBwdXNoSFRNTCB0ZXN0IGVycm9yOyBlbmhhbmNlZCBmb3IKCSAgYmV0dGVyIGRldmVsIChtZSkgdGVzdGluZwoKRnJpIE9jdCAxNyAxNDozODo1NCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGVnYWN5LmM6IHJlbW92ZSB0aGUgd2FybmluZyBmb3Igc3RhcnREb2N1bWVudCgpLCBhcyBpdCBpcyB1c2VkIGJ5CgkgIGdsYWRlIChvciBnbGFkZS1weXRob24pCgkqIHBhcnNlci5jIHJlbGF4bmcuYyB4bWxzY2hlbWFzdHlwZXMuYzogZml4ZWQgYW4gYXNzb3J0ZWQgc2V0IG9mCgkgIGludmFsaWQgYWNjZXNzZXMgZm91bmQgYnkgcnVubmluZyBzb21lIFB5dGhvbiBiYXNlZCByZWdyZXNzaW9uCgkgIHRlc3RzIHVuZGVyIHZhbGdyaW5kLiBUaGVyZSBpcyBzdGlsbCBhIGZldyBsZWFrcyByZXBvcnRlZCBieSB0aGUKCSAgcmVsYXhuZyByZWdyZXNzaW9ucyB3aGljaCBuZWVkIHNvbWUgYXR0ZW50aW9uLgoJKiBkb2MvTWFrZWZpbGUuYW06IGZpeGVkIGEgbWFrZSBpbnN0YWxsIHByb2JsZW0gYy5mLiAjMTI0NTM5CgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oOiBhZGRpdGlvbiBvZiB4bWxQYXJzZXJNYXhEZXB0aAoJICBwYXRjaCBmcm9tIGNydXRjaGVyCgpXZWQgT2N0IDE1IDEyOjQ3OjMzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogTWFyYyBMaXlhbmFnZSBwb2ludGVkIG91dCB0aGF0IHhtbENsZWFudXBQYXJzZXIoKQoJICB3YXMgbWlzc2luZyB4bWxDbGVhbnVwSW5wdXRDYWxsYmFja3MgYW5kIHhtbENsZWFudXBPdXRwdXRDYWxsYmFja3MKCSAgY2FsbHMuCgpXZWQgT2N0IDE1IDEwOjE2OjQ3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2bXMvYnVpbGRfbGlieG1sLmNvbSB0cmlvbmFuLmM6IFZNUyBwYXRjaCBmcm9tIENyYWlnIEEuIEJlcnJ5CgpNb24gT2N0IDEzIDIxOjQ2OjI1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogc21hbGwgZml4IGZyb20gQmpvcm4gUmVlc2UKCk1vbiBPY3QgMTMgMTU6NTk6MjUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeCBhIGNhbGwgbWlzc2luZyBhcmd1bWVudHMKClN1biBPY3QgMTIgMTg6NDI6MTggSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBnZW5DaFJhbmdlcy5weSwgY2h2YWxpZC5jLCBpbmNsdWRlL2xpYnhtbC9jaHZhbGlkLmg6IGZpeGVkCgkgIGEgYnVnIGluIHRoZSByYW5nZSBzZWFyY2g7IGVuaGFuY2VkIHJhbmdlIGdlbmVyYXRpb24gKGlubGluZSBjb2RlCgkgIGlmIGEgc21hbGwgbnVtYmVyIG9mIGludGVydmFscyk7IGVuaGFuY2VkIHRoZSByZWFkYWJpbGl0eSBvZiB0aGUKCSAgb3V0cHV0IGZpbGVzLgoKU3VuIE9jdCAxMiAwMDo1MjoxNCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2h2YWxpZC5kZWYgY2h2YWxpZC5jIGluY2x1ZGUvbGlieG1sL2NodmFsaWQuaDogcmVidWlsdCAKCSAgY2h2YWxpZC5kZWYgZnJvbSBzY3JhdGNoIGJhc2VkIG9uIFhNTCAybmQgZWRpdGlvbiBSRUMKCSAgYW5kIHJlZ2VuZXJhdGVkIHRoZSBjb2RlLgoKU2F0IE9jdCAxMSAyMjo1NDoxMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steG1sLXRlc3Qtc3VpdGUucHk6IHJlbW92ZWQgc29tZSBhbm5veWluZyB3YXJuaW5ncwoJKiBjaHZhbGlkLmRlZiBjaHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvY2h2YWxpZC5oOiBmaXhlZCBhIGJ1ZwoJICBpbiB0aGUgUHViaWRDaGFycyBkZWZpbml0aW9uLCByZWdlbmVyYXRlZCwgdGhlcmUgaXMgc3RpbGwKCSAgYSBidWcgbGVmdCBzb21ld2hlcmUKCSogZ2VuQ2hSYW5nZXMucHk6IHNhdmUgdGhlIGhlYWRlciBkaXJlY3RseSBpbiBpbmNsdWRlL2xpYnhtbC8KCSogY29uZmlndXJlLmluOiBJIGdlbmVyYXRlZCBhIDIuNi4wYmV0YTYgZWFybGllciB0b2RheQoKU2F0IE9jdCAxMSAyMzozMjo0NyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGZpeGVkIHNtYWxsIGVycm9yIG9uIHByZXZpb3VzIGNvbW1pdCAoY2h2YWxpZC5oIGluCgkgIGJhc2UgZGlyIGluc3RlYWQgb2YgaW5jbHVkZSBkaXJlY3RvcnkpCgpTYXQgT2N0IDExIDIzOjExOjIyIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZ2VuQ2hSYW5nZS5weSwgY2h2YWxpZC5kZWYsIGNodmFsaWQuYywgaW5jbHVkZS9saWJ4bWwvY2h2YWxpZC5oOgoJICBuZXcgZmlsZXMgZm9yIGEgZGlmZmVyZW50IG1ldGhvZCBmb3IgZG9pbmcgcmFuZ2UgdmFsaWRhdGlvbgoJICBvZiBjaGFyYWN0ZXIgZGF0YS4KCSogTWFrZWZpbGUuYW0sIHBhcnNlckludGVybmFscy5jLCBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbSwKCSAgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg6IG1vZGlmaWVkIGZvciBuZXcgcmFuZ2UgbWV0aG9kLgoJKiBjYXRhbG9nLmM6IHNtYWxsIGVuaGFuY2UgZm9yIHdhcm5pbmcgbWVzc2FnZSAodXNpbmcgb25lCgkgIG9mIHRoZSBuZXcgcmFuZ2Ugcm91dGluZXMpCgpTYXQgT2N0IDExIDEzOjI0OjU3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6IGFkZGluZyBhbiBzZXJyb3IgZmllbGQgdG8KCSAgdGhlIHZhbGlkYXRpb24gY29udGV4dCBicmVha3MgdGhlIEFCSSBmb3IgdGhlIHhtbFBhcnNlckN0eHQKCSAgc3RydWN0dXJlIHNpbmNlIGl0J3MgZW1iZWRkZWQgYnkgY29udGVudCBhbmQgbm90IGJ5IHJlZmVyZW5jZQoKU2F0IE9jdCAxMSAxMjo0Njo0OSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwYXRjaCBmcm9tIE1pa2UgSG9tbWV5CgkqIHRocmVhZHMuYzogYXBwbGllZCBXaW5kb3dzIHBhdGNoIGZyb20gSmVzc2UgUGVsdG9uIGFuZCBTdGVwaGFuZQoJICBCaWRvdWwKCSogcGFyc2VyLmM6IGZpeCB0aGUgcG90ZW50aWFsbHkgbmFzdHkgYWNjZXNzIHRvIGN0eHQtPnNlcnJvcgoJICB3aXRob3V0IGNoZWNraW5nIGZpcnN0IHRoYXQgdGhlIFNBWCBibG9jayBpcyB2ZXJzaW9uIDIKCkZyaSBPY3QgMTAgMjE6MzQ6MDEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWDIuYzogZml4ZWQgYSBuYXN0eSBidWcgd2l0aCBpbnRlcm5pbmcgc29tZSB0ZXh0IHN0cmluZ3MKCSogY29uZmlndXJlLmluOiBwcmVwYXJlIGZvciBiZXRhNSBvZiAyLjYuMAoJKiBsaWJ4bWwuaCBuYW5vZnRwLmMgbmFub2h0dHAuYyB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6CgkgIGJldHRlciBlcnJvciBoYW5kbGluZyBmb3IgSS9PIGFuZCBjb252ZXJ0ZWQgRlRQIGFuZCBIVFRQCgkqIHBhcnNlci5jOiBmaXhlZCBhbm90aGVyIGJ1ZwoKRnJpIE9jdCAxMCAxNjo0NToyMCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jOiBmaXhlZCB1bmluaXRpYWxpemVkIG5ldyBmaWVsZC4KCSogcmVzdWx0L1ZDL09uZUlEMiByZXN1bHQvcmVsYXhuZy8qLmVycjogZml4ZWQgYSB0eXBvIHVwZGF0aW5nCgkgIGFsbCBtZXNzYWdlcwoKRnJpIE9jdCAxMCAxNjoxOToxNyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBtYWtlIHJvb20gaW4gRG9jLCBFbGVtZW50LCBBdHRyaWJ1dGVzCgkgIGZvciBQU1ZJIHR5cGUgaW5mb3JtYXRpb25zLgoKRnJpIE9jdCAxMCAxNjowODowMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIGMxNG4uYyBjYXRhbG9nLmMgZXJyb3IuYyBnbG9iYWxzLmMgcGFyc2VyLmMKCSAgcGFyc2VySW50ZXJuYWxzLmMgcmVsYXhuZy5jIHZhbGlkLmMgeGluY2x1ZGUuYyB4bWxJTy5jIHhtbHJlZ2V4cC5jCgkgIHhtbHNjaGVtYXMuYyB4cGF0aC5jIHhwb2ludGVyLmMgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oCgkgIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmggCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IFNldHRpbmcgdXAgdGhlIGZyYW1ld29yayBmb3Igc3RydWN0dXJlZAoJICBlcnJvciByZXBvcnRpbmcsIHRvdWNoZXMgYSBsb3Qgb2YgbW9kdWxlcywgYnV0IGxpdHRsZSBjb2RlIG5vdwoJICB0aGUgZXJyb3IgaGFuZGxpbmcgdHJhaWwgaGFzIGJlZW4gY2xlYW5lZCB1cC4KCkZyaSBPY3QgMTAgMTQ6Mjk6NDIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGMxNG4uYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBjb252ZXJ0ZWQgdGhlIEMxNE4gbW9kdWxlIHRvbwoKRnJpIE9jdCAxMCAxMzo0MDo1MSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogY2xlYW51cAoJKiB4cG9pbnRlci5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IG1pZ3JhdGVkIFhQb2ludGVyIG1vZHVsZQoJICB0byB0aGUgbmV3IGVycm9yIG1lY2hhbmlzbQoKRnJpIE9jdCAxMCAxMjo0OTo1MyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZXJyb3IuYyB4bWxzY2hlbWFzLmM6IGEgYml0IG9mIGNsZWFudXAKCSogcmVzdWx0L3NjaGVtYXMvKi5lcnI6IHVwZGF0ZWQgd2l0aCB0aGUgbmV3IHJlc3VsdCBzdHJpbmdzCgpGcmkgT2N0IDEwIDAzOjU4OjM5IFBEVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogZml4ZWQgYnVnIDEyNDA2MQoKRnJpIE9jdCAxMCAwMjo0NzoyMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGNsZWFudXAKCSogZW5jb2RpbmcuYzogZml4IGEgZnVubnkgdHlwbwoJKiBlcnJvci5jIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOgoJICBjb252ZXJ0ZWQgdGhlIFNjaGVtYXMgY29kZSB0byB0aGUgbmV3IGVycm9yIGhhbmRsaW5nLiBQSVRBLAoJICBzdGlsbCBuZWVkIHRvIGNoZWNrIG91dHB1dCBmcm9tIHJlZ3Jlc3Npb24gdGVzdHMuCgpUaHUgT2N0ICA5IDE1OjEzOjUzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGNvbnZlcnRlZCB0b28KCSogdHJlZS5jOiBzbWFsbCBjbGVhbnVwCgpUaHUgT2N0ICA5IDEzOjQ0OjU3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBjb21tZW50IGZpeAoJKiBjYXRhbG9nLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogbWlncmF0aW5nIHRoZSBjYXRhbG9nIGNvZGUKCSAgdG8gdGhlIG5ldyBpbmZyYXN0cnVjdHVyZQoKVGh1IE9jdCAgOSAwMDozNjowMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogZmluYWwgZXJyb3IgaGFuZGxpbmcgY2xlYW51cAoJKiB4aW5jbHVkZS5jIGVycm9yLmM6IGNvbnZlcnRlZCBYSW5jbHVkZSB0byB0aGUgbmV3IGVycm9yIGhhbmRsaW5nCgkqIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGFkZGVkIFhJbmNsdWRlIGVycm9ycwoKV2VkIE9jdCAgOCAyMzozMToyMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGJ1ZyBpbiBjb21wcmVzc2lvbiBzYXZpbmcgd2FzIGNyYXNoaW5nIGdhbGVvbgoJICByZXBvcnRlZCBieSB0ZXVmCgpXZWQgT2N0ICA4IDIxOjE4OjEyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlcnJvci5jIHRyZWUuYyB4bWxJTy5jIHhtbGxpbnQuYzogbW9yZSBjbGVhbnVwIHRocm91Z2ggdGhlCgkgIEkvTyBlcnJvciBwYXRoCgpXZWQgT2N0ICA4IDIwOjU3OjI3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBiZXR0ZXIgaGFuZGxpbmcgb2YgZXJyb3IgY2FzZXMKCldlZCBPY3QgIDggMTM6NTE6MTQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmMgeG1sbGludC5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGZpcnN0IHBhc3MgYXQKCSAgY2xlYW5pbmcgdXAgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIEkvTyBtb2R1bGUuCgpXZWQgT2N0ICA4IDEwOjUyOjA1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBlcnJvciBoYW5kbGluZwoJICBjbGVhbnVwIG9mIHRoZSBSZWdleHAgbW9kdWxlLgoKV2VkIE9jdCAgOCAwMTowOTowNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBjb252ZXJ0aW5nIHRoZSB0cmVlIG1vZHVsZSB0b28KCSogZXJyb3IuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBjcmVhdGVkIGEgc2ltcGxlciBpbnRlcm5hbAoJICBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb24uCgpUdWUgT2N0ICA3IDIzOjE5OjM5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlcnJvci5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmggaW5jbHVkZS9saWJ4bWwveHBhdGguaAoJICBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oIHhwYXRoLmM6IGNsZWFuaW5nIHVwIFhQYXRoCgkgIGVycm9yIHJlcG9ydGluZyB0aGF0IHRpbWUuIAoJKiB0aHJlYWRzLmM6IGFwcGxpZWQgdGhlIHR3byBwYXRjaGVzIGZvciBUTFMgdGhyZWFkcwoJICBvbiBXaW5kb3dzIGZyb20gSmVzc2UgUGVsdG9uCgkqIHBhcnNlci5jOiB0aW55IHNhZmV0eSBwYXRjaCBmb3IgeG1sU3RyUHJpbnRmKCkgbWFrZSBzdXJlIHRoZQoJICByZXR1cm4gaXMgYWx3YXlzIHplcm8gdGVybWluYXRlZC4gU2hvdWxkIGFsc28gaGVscCBkZXRlY3RpbmcKCSAgcGFzc2luZyB3cm9uZyBidWZmZXIgc2l6ZSBlYXNpbGx5LgoJKiByZXN1bHQvVkMvKiByZXN1bHQvdmFsaWQvcnNzLnhtbC5lcnIgcmVzdWx0L3ZhbGlkL3hsaW5rLnhtbC5lcnI6CgkgIHVwZGF0ZWQgdGhlIHJlc3VsdHMgdG8gZm9sbG93IHRoZSBlcnJvcnMgc3RyaW5nIGdlbmVyYXRlZCBieQoJICBsYXN0IGNvbW1pdC4KClR1ZSBPY3QgIDcgMTQ6MTY6NDUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBsYXN0IGNsZWFudXAgb2YgZXJyb3IKCSAgaGFuZGxpbmcgaW4gdGhlIFJlbGF4LU5HIG1vZHVsZS4KClR1ZSBPY3QgIDcgMTM6MzA6MzkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVycm9yLmMgcmVsYXhuZy5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IHN3aXRjaGVkIFJlbGF4LU5HCgkgIG1vZHVsZSB0byB0ZWggbmV3IGVycm9yIHJlcG9ydGluZy4gQmV0dGVyIGRlZmF1bHQgcmVwb3J0LCBhZGRzCgkgIHRoZSBlbGVtZW50IGFzc29jaWF0ZWQgaWYgZm91bmQsIGNvbnRleHQgYW5kIG5vZGUgYXJlIGluY2x1ZGVkCgkgIGluIHRoZSB4bWxFcnJvcgoJKiBweXRob24vdGVzdHMvcmVhZGVyMi5weTogdGhlIGVycm9yIG1lc3NhZ2VzIGNoYW5nZWQuCgkqIHJlc3VsdC9yZWxheG5nLyo6IGVycm9yIG1lc3NhZ2UgY2hhbmdlZCB0b28uCgpNb24gT2N0ICA2IDEwOjQ2OjM1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS5iY2Igd2luMzIvTWFrZWZpbGUubWluZ3cgd2luMzIvTWFrZWZpbGUubXN2YwoJICB3aW4zMi9jb25maWd1cmUuanM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBTdOlwaGFuZSBCaWRvdWwgdG8KCSAgZml4IHRoZSBjb21waWxhdGlvbiBvZiAyLjYuMCBjb2RlIG9uIFdpbjMyCgpNb24gT2N0ICA2IDEwOjE2OjMwIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14bWwtdGVzdC1zdWl0ZS5weTogZml4aW5nIHRoZSBzY3JpcHQKCSogcGFyc2VyLmM6IHJlcGxhY2Ugc2VxdWVuY2VzIG9mIFJBVyAmJiBOWFQoLikgPT0gJy4nIHdpdGgKCSAgbWVtY21wIGNhbGxzLCBzZWVtcyB0byBub3QgYnJlYWsgY29uZm9ybWFuY2UsIHNsaWdodGx5IGluZmxhdGUKCSAgdGhlIHNpemUgb2YgdGhlIGdjYyBnZW5lcmF0ZWQgY29kZSB0aG91Z2guCgpTdW4gT2N0ICA1IDIzOjMwOjQ4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYyBwYXJzZXIuYyB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oOgoJICBtb3JlIGNsZWFudXAgb2YgZXJyb3IgaGFuZGxpbmcgaW4gcGFyc2VySW50ZXJuYWxzLCBzaGFyaW5nIHRoZQoJICByb3V0aW5lIGZvciBtZW1vcnkgZXJyb3JzLgoKU3VuIE9jdCAgNSAxNTo0OToxNCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIE1ha2VmaWxlLmFtIGxlZ2FjeS5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IG1vcmUgY29kZSBjbGVhbnVwLCBlc3BlY2lhbGx5IGFyb3VuZAoJICBlcnJvciBtZXNzYWdlcywgdGhlIEhUTUwgcGFyc2VyIGhhcyBub3cgYmVlbiB1cGdyYWRlZCB0byB0aGUgbmV3CgkgIGhhbmRsaW5nLgoJKiByZXN1bHQvSFRNTC8qOiBhIGZldyBjaGFuZ2VzIGluIHRoZSByZXN1bHRpbmcgZXJyb3IgbWVzc2FnZXMKClNhdCBPY3QgIDQgMjM6MDY6NDEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IG1vcmUgZXJyb3Ivd2FybmluZwoJICBoYW5kbGluZyBjbGVhbnVwcywgdGhlIFhNTCBwYXJzZXIgbW9kdWxlIHNob3VsZCBiZSBva2F5IG5vdy4KClNhdCBPY3QgIDQgMDE6NTg6MjcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiB4bWxkd2Fsay5jIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtCgkgIGluY2x1ZGUvbGlieG1sL3htbGR3YWxrLmggaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOgoJICBpbnRlZ3JhdGVkIHRoZSB4bWxEb2NXYWxrZXIgQVBJIGdpdmVuIGJ5IEFsZnJlZCBNaWNrYXV0c2NoLAoJICBhbmQgcHJvdmlkaW5nIGFuIHhtbFJlYWRlciBsaWtlIEFQSSBidXQgd29ya2luZyBvbiBhIHhtbERvY1B0ci4KClNhdCBPY3QgIDQgMDA6MTg6MjkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBtb3JlIGNsZWFudXAgaW4gbWFrZSB0ZXN0cwoJKiBlcnJvci5jIHZhbGlkLmMgcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogbW9yZSB3b3JrCgkgIGluIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgZXJyb3IgcmVwb3J0aW5nIHN0cmF0ZWd5LgoJKiBweXRob24vdGVzdHMvcmVhZGVyMi5weSAgcmVzdWx0L1ZDLyogcmVzdWx0L3ZhbGlkLyo6CgkgIGZldyBjaGFuZ2VzIGluIHRoZSBzdHJpbmdzIGdlbmVyYXRlZCBieSB0aGUgdmFsaWRhdGlvbiBvdXRwdXQKCkZyaSBPY3QgIDMgMDA6MTk6MDIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBjaGFuZ2VkICdtYWtlIHRlc3RzJyB0byB1c2UgYSBjb25jaXNlIG91dHB1dCwKCSAgc2Nyb2xsaW5nIHRvIHNlZSB3aGVyZSB0aGluZyBicm9rZSB3YXNuJ3QgcGxlYXNhbnQKCSogY29uZmlndXJlLmluOiBzb21lIGJldGE0IHByZXBhcmF0aW9uLCBidXQgbm90IHJlYWR5IHlldAoJKiBlcnJvci5jIGdsb2JhbHMuYyBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDoKCSAgbmV3IGVycm9yIGhhbmRsaW5nIGNvZGUsIGxhc3QgZXJyb3IgaW5mb3JtYXRpb25zIGFyZSBzdG9yZWQKCSAgaW4gdGhlIHBhcnNpbmcgY29udGV4dCBvciBhIGdsb2JhbCB2YXJpYWJsZSwgbmV3IEFQSXMgdG8KCSAgaGFuZGxlIHRoZSB4bWxFcnJvclB0ciB0eXBlLgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB2YWxpZC5jIDogc3RhcnRlZCBtaWdyYXRpbmcgdG8gdGhlCgkgIG5ldyBlcnJvciBoYW5kbGluZyBjb2RlLCBpdCdzIGEgcm95YWwgcGFpbi4KCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg6CgkgIG1vdmVkIHRoZSBkZWZpbml0aW9uIG9mIHhtbE5ld1BhcnNlckN0eHQoKQoJKiBwYXJzZXIuYzogc21hbGwgcG90ZW50aWFsIGJ1ZmZlciBhY2Nlc3MgcHJvYmxlbSBpbiBwdXNoIGNvZGUKCSAgcHJvdmlkZWQgYnkgSnVzdGluIEZsZXRjaGVyCgkqIHJlc3VsdC8qLnNheCByZXN1bHQvVkMvUEVOZXN0aW5nKiByZXN1bHQvbmFtZXNwYWNlcy8qCgkgIHJlc3VsdC92YWxpZC8qLmVycjogc29tZSBlcnJvciBtZXNzYWdlcyB3ZXJlIHNsaWd0aGx5IGNoYW5nZWQuCgpUaHUgT2N0ICAyIDEzOjAxOjEzIDIwMDMgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggcGFyc2VyLmM6IGludHJvZHVjZWQgeG1sU3RyUHJpbnRmCglmdW5jdGlvbiAod3JhcHBlciBhcm91bmQgc25wcmludGYpCgpXZWQgT2N0ICAxIDIxOjEyOjA2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jOiBGaXggZXJyb3Igb24gb3V0cHV0IG9mIGhpZ2ggY29kZXBvaW50IGNoYXJyZWYgbGlrZQoJICAmI3gxMEZGRkY7ICwgcmVwb3J0ZWQgYnkgRXJpYyBIYW5jaHJvdwoKV2VkIE9jdCAgMSAxNDoyMDoxMCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogRE9DQnBhcnNlci5jIGluY2x1ZGUvbGlieG1sL0RPQ0JwYXJzZXIuaDogbGV0J3Mgc2VlIGhvdyBtdWNoCgkgIG9mIGEgcGFpbiBtdXJyYXljIGlzIHJlYWxseSBnb25uYSBiZS4KCldlZCBPY3QgIDEgMTE6MDM6NDAgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBBcHBsaWVkIGZpeCBmb3IgYnVnICMxMjM0ODEgcmVwb3J0ZWQgYnkgUGV0ZXIgRGVycgoKVHVlIFNlcCAzMCAxNTozNDozMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW50aXRpZXMuYyBsZWdhY3kuYyBwYXJzZXIuYzogbWFkZSB0aGUgcHJlZGVmaW5lZCBlbnRpdGllcwoJICBzdGF0aWMgcHJlZGVmaW5lZCBzdHJ1Y3R1cmVzIHRvIGF2b2lkIHRoZSB3b3JrLCBtZW1vcnkgYW5kCgkgIGhhemFyZHMgYXNzb2NpYXRlZCB0byBpbml0aWFsaXphdGlvbi9jbGVhbnVwLgoKVHVlIFNlcCAzMCAxNDozMDo0NyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiBsZWdhY3kuYyBwYXJzZXIuYwoJICBwYXJzZXJJbnRlcm5hbHMuYyB0ZXN0SFRNTC5jIHhtbGxpbnQuYyBpbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmgKCSAgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOiBhZGRlZCBhIG5ldyBjb25maWd1cmUKCSAgb3B0aW9uIC0td2l0aC1wdXNoLCBzb21lIGNsZWFudXBzLCBjaGFzZWQgY29kZSBzaXplIGFub21hbGllcy4KCSAgTm93IGEgbGlicmFyeSBjb25maWd1cmVkIC0td2l0aC1taW5pbXVtIGlzIGFyb3VuZCAxNTBLQiwKCSAgc291bmRzIGdvb2QgZW5vdWdoLgoKVHVlIFNlcCAzMCAxMjozMTowMCBBRVNUIDIwMDMgTWFsY29sbSBUcmVkaW5uaWNrIDxtYWxjb2xtQGNvbW1zZWN1cmUuY29tLmF1PgoKCSogbGlieG1sLTIuMC11bmluc3RhbGxlZC5wYy5pbjogTmV3IGZpbGUgZm9yIGJ1aWxkaW5nIGFnYWluc3QKCXVuaW5zdGFsbGVkIGxpYnhtbDIgYnVpbGRzLgoJKiBjb25maWd1cmUuaW4sIE1ha2VmaWxlLmFtOiBTdXBwb3J0IHRoZSAqLXVuaW5zdGFsbGVkLnBjIGZpbGUuCgkqIC5jdnNpZ25vcmU6IElnbm9yZSB0aGUgbmV3IGdlbmVyYXRlZCAqLnBjIGZpbGUuCgpUdWUgU2VwIDMwIDAyOjM4OjE2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBTQVguYyBTQVgyLmMgY29uZmlndXJlLmluIGdsb2JhbHMuYyBwYXJzZXIuYwoJICBwYXJzZXJJbnRlcm5hbHMuYyB0ZXN0UmVhZGVyLmMgdGVzdFNBWC5jIHhtbElPLmMgeG1sbGludC5jCgkgIHhtbHJlYWRlci5jIGV4YW1wbGUvZ2pvYnJlYWQuYyBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46CgkgIGFkZGVkIDIgbmV3IGNvbmZpZ3VyZSBvcHRpb246IC0td2l0aC1yZWFkZXIgLS13aXRoLXNheDEKCSAgdG8gYWxsb3cgcmVtb3ZpbmcgdGhlIHJlYWRlciBvciBub24teG1sUmVhZHh4eCgpIGludGVyZmFjZXMuCgpNb24gU2VwIDI5IDE5OjU4OjI2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gZW50aXRpZXMuYyB0cmVlLmMgdmFsaWQuYyB4bWxsaW50LmMKCSAgaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjoKCSAgQWRkaW5nIGEgY29uZmlndXJlIG9wdGlvbiB0byByZW1vdmUgdHJlZSBtYW5pcHVsYXRpb24KCSAgY29kZSB3aGljaCBpcyBub3Qgc3RyaWN0bHkgbmVlZGVkIGJ5IHRoZSBwYXJzZXIuCgpNb24gU2VwIDI5IDE1OjIzOjQxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYzogbGFzdCBmaW5pc2hpbmcgdG91Y2ggdG8gdGhlIEJlT1MKCSAgcGF0Y2ggZnJvbSBNYXJjaW4gJ1NoYXJkJyBLb25pY2tpCgpNb24gU2VwIDI5IDE1OjE1OjA4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIFNBWDIuYyBjMTRuLmMgY2F0YWxvZy5jIGNvbmZpZ3VyZS5pbiBkZWJ1Z1hNTC5jCgkgIGVuY29kaW5nLmMgZW50aXRpZXMuYyBuYW5vZnRwLmMgbmFub2h0dHAuYyBwYXJzZXIuYyByZWxheG5nLmMKCSAgdGVzdEF1dG9tYXRhLmMgdGVzdEMxNE4uYyB0ZXN0SFRNTC5jIHRlc3RSZWdleHAuYyB0ZXN0UmVsYXguYwoJICB0ZXN0U2NoZW1hcy5jIHRlc3RYUGF0aC5jIHRocmVhZHMuYyB0cmVlLmMgdmFsaWQuYyB4bWxJTy5jCgkgIHhtbGNhdGFsb2cuYyB4bWxsaW50LmMgeG1sbWVtb3J5LmMgeG1scmVhZGVyLmMgeG1sc2NoZW1hcy5jCgkgIGV4YW1wbGUvZ2pvYnJlYWQuYyBpbmNsdWRlL2xpYnhtbC9IVE1MdHJlZS5oIGluY2x1ZGUvbGlieG1sL2MxNG4uaAoJICBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmggaW5jbHVkZS9saWJ4bWwvZGVidWdYTUwuaAoJICBpbmNsdWRlL2xpYnhtbC9lbnRpdGllcy5oIGluY2x1ZGUvbGlieG1sL25hbm9odHRwLmgKCSAgaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oIGluY2x1ZGUvbGlieG1sL3RyZWUuaAoJICBpbmNsdWRlL2xpYnhtbC92YWxpZC5oIGluY2x1ZGUvbGlieG1sL3htbElPLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hcy5oIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbgoJICBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oIHB5dGhvbi9saWJ4bWwuYzoKCSAgT2theSB0aGlzIGlzIHNjYXJ5IGJ1dCBpdCBpcyBqdXN0IGFkZGluZyBhIGNvbmZpZ3VyZSBvcHRpb24KCSAgdG8gZGlzYWJsZSBvdXRwdXQsIHRoaXMgdG91Y2hlcyBtb3N0IG9mIHRoZSBmaWxlcy4KCk1vbiBTZXAgMjkgMTI6NTM6NTYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbG1lbW9yeS5jOiBiZXR0ZXIgZml4LCBhdm9pZHMgYnJlYWtpbmcgdGhlIHB5dGhvbiBiaW5kaW5ncwoKTW9uIFNlcCAyOSAxMToyMTozMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbWVtb3J5LmM6IGZpeCBhIGNvbXBpbGF0aW9uIHByb2JsZW0gd2hlbiBjb25maWd1cmluZwoJICB3aXRoIGRlYnVnIGJ1dCB3aXRob3V0IG1lbS1kZWJ1ZwoKU3VuIFNlcCAyOCAyMDo1MzoxNyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGNsZWFudXAsIGNyZWF0aW5nIGEgbmV3IGxlZ2FjeS5jIG1vZHVsZSwKCSAgbWFkZSBzdXJlIG1ha2UgdGVzdHMgcmFuIGluIHJlZHVjZWQgY29uZGl0aW9ucwoJKiBTQVguYyBTQVgyLmMgY29uZmlndXJlLmluIGVudGl0aWVzLmMgZ2xvYmFscy5jIHBhcnNlci5jCgkgIHBhcnNlckludGVybmFscy5jIHRyZWUuYyB2YWxpZC5jIHhsaW5rLmMgeG1sSU8uYyB4bWxjYXRhbG9nLmMKCSAgeG1sbWVtb3J5LmMgeHBhdGguYyB4bWxtZW1vcnkuYyBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46CgkgIGluY3JlYXNlZCB0aGUgbW9kdWxhcml6YXRpb24sIGFsbG93IHRvIGNvbmZpZ3VyZSBvdXQgCgkgIHZhbGlkYXRpb24gY29kZSBhbmQgbGVnYWN5IGNvZGUsIGFkZGVkIGEgY29uZmlndXJhdGlvbgoJICBvcHRpb24gLS13aXRoLW1pbmltdW0gY29tcGlsaW5nIG9ubHkgdGhlIG1hbmRhdG9yeSBjb2RlCgkgIHdoaWNoIHRoZW4gc2hyaW5rIHRvIDIwMEtCLgoKU3VuIFNlcCAyOCAwMjoxNTowNyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeCBhIGJ1ZyByYWlzZWQgYnkgdGhlIE1pcHMgY29tcGlsZXIuCgkqIGluY2x1ZGUvbGlieG1sL1NBWC5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBtb3ZlIHRoZSAKCSAgU0FYdjEgYmxvY2sgZGVmaW5pdGlvbnMgdG8gcGFyc2VyLmggZml4ZXMgYnVnICMxMjMzODAKCSogeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmg6IHJlaW5zdGFuY2lhdGUKCSAgdGhlIGF0dHJpYnV0ZSBhbmQgZWxlbWVudCBwb29sIGJvcmtlbiAyIGNvbW1pdHMgYWdvLgoJICBTdGFydCBwbGF5aW5nIHdpdGggYW4gZW50cnkgcG9pbnQgdG8gcHJlc2VydmUgYSBzdWJ0cmVlLgoJKiBlbnRpdGllcy5jOiByZW1vdmUgYSB3YXJuaW5nLgoKU2F0IFNlcCAyNyAxMjoxOTozOCBQRFQgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGVuY29kaW5nLmMsIHBhcnNlci5jLCByZWxheG5nLmM6IGZ1cnRoZXIgKGZpbmFsPykgbWlub3IKCSAgY2hhbmdlcyBmb3IgY29tcGlsYXRpb24gd2FybmluZ3MuIE5vIGNoYW5nZSB0byBsb2dpYy4KCkZyaSBTZXAgMjYgMTg6MDM6NDIgUERUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBwYXJzZXIuYzogZml4ZWQgc21hbGwgcHJvYmxlbSB3aXRoIG1pc3NpbmcgZW50aXRpZXMgKHRlc3QvZW50MikKClNhdCBTZXAgMjcgMDE6MjU6MzkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBXaWxsaWFtJ3MgY2hhbmdlIGFsbG93ZWQgdG8gc3BvdCBhIG5hc3R5IGJ1ZyBpbiB4bWxEb1JlYWQKCSAgaWYgdGhlIHJlc3VsdCBpcyBub3Qgd2VsbCBmb3JtZWQgdGhhdCBjdHh0LT5teURvYyBpcyBub3QgTlVMTAoJICBhbmQgdXNlcyB0aGUgY29udGV4dCBkaWN0aW9ubmFyeS4KCkZyaSBTZXAgMjYgMjE6MDk6MzQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBvdGhlciBwYXRjaGVzIGZyb20gV2lsbGlhbSBCcmFjayB0byBhdm9pZAoJICBjb21waWxhdGlvbiB3YXJuaW5ncyBvbiBBSVguCgpGcmkgU2VwIDI2IDExOjAzOjA4IFBEVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogSFRNTHBhcnNlci5jLCBlbnRpdGllcy5jLCB4bWxyZWFkZXIuYzogbWlub3IgY2hhbmdlIHRvCgkgIGF2b2lkIGNvbXBpbGF0aW9uIHdhcm5pbmdzIG9uIHNvbWUgKGUuZy4gQUlYKSBzeXN0ZW1zCgpGcmkgU2VwIDI2IDE2OjQ5OjI1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogZml4ZWQgYSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHByb2JsZW0KCSAgd2hlbiBmb3JtYXR0aW5nICJkZXByZWNhdGVkIFNBWHYxIGZ1bmN0aW9uIGlnbm9yYWJsZVdoaXRlc3BhY2UiCgkgIGNvdWxkIGJlIHJlcHJvZHVjZWQgYnkgeG1sbGludCAtLWZvcm1hdAoKRnJpIFNlcCAyNiAxNTo1MDo0NCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2xpYnhtbDItYXBpLnhtbDogcmVidWlsdCB0aGUgQVBJCgkqIHhtbGxpbnQuYyBkb2MveG1sbGludC4xIGRvYy94bWxsaW50LnhtbDogYWRkZWQgdGhlIG5ldyBvcHRpb25zCgkgIC0tbm9jZGF0YSBhbmQgLS1uc2NsZWFuIHRvIHJlbW92ZSBDREFUQSBzZWN0aW9uIGFuZCBzdXJwZXJmbHVvdXMKCSAgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucwoJKiBwYXJzZXIuYyBTQVgyLmM6IGltcGxlbWVudGF0aW9uIG9mIHRoZSAyIG5ldyBvcHRpb25zCgpGcmkgU2VwIDI2IDE0OjQxOjUzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgdGVzdEhUTUwuYyB4bWxsaW50LmMgaW5jbHVkZS9saWJ4bWwvSFRNTHBhcnNlci5oOgoJICBhZGRlZCB0aGUgc2FtZSBodG1sUmVhZCBBUElzIHRoYW4gdGhlaXIgWE1MIGNvdW50ZXJwYXJ0cwoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogbmV3IHBhcnNlciBvcHRpb25zLCBub3QgeWV0IGltcGxlbWVudGVkLAoJICBhZGRlZCBhbiBvcHRpb25zIGZpZWxkIHRvIHRoZSBjb250ZXh0LgoJKiB0cmVlLmM6IHBhdGNoIGZyb20gU2hhdW4gTWNDYW5jZSB0byBmaXggYnVnICMxMjMyMzggd2hlbiBdXT4KCSAgaXMgZm91bmQgd2l0aGluIGEgY2RhdGEgc2VjdGlvbi4KCSogcmVzdWx0L25vZW50L2NkYXRhMiByZXN1bHQvY2RhdGEyIHJlc3VsdC9jZGF0YTIucmRyCgkgIHJlc3VsdC9jZGF0YTIuc2F4IHRlc3QvY2RhdGEyOiBhZGQgb25lIG1vcmUgY2RhdGEgdGVzdAoKVGh1IFNlcCAyNSAyMzowMzoyMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgeG1sbGludC5jIGRvYy9saWJ4bWwyLWFwaS54bWwgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6CgkgIENoYW5nZWQgdGhlIG5ldyB4bWxSZWFkL3htbEN0eHRSZWFkIEFQSXMgdG8gaGF2ZSBhbiBleHRyYQoJICBiYXNlIFVSTCBwYXJhbWV0ZXIgd2hlbiBub3QgbG9hZGluZyBmcm9tIGEgZmlsZSBvciBVUkwuCgpUaHUgU2VwIDI1IDE2OjIzOjU4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyBhIGJldGEzIHNvbHZpbmcgdGhlIEFCSSBwcm9ibGVtcwoJKiBnbG9iYWxzLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdGVzdEhUTUwuYyBIVE1McGFyc2VyLmMgU0FYLmMKCSAgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGluY2x1ZGUvbGlieG1sL1NBWC5oOiBtYWtlIHN1cmUgdGhlCgkgIGdsb2JhbCB2YXJpYWJsZXMgZm9yIHRoZSBkZWZhdWx0IFNBWCBoYW5kbGVyIGFyZSBWMSBvbmVzIHRvCgkgIGF2b2lkIEFCSSBjb21wYXQgcHJvYmxlbXMuCgkqIHhtbHJlYWRlci5jOiBjbGVhbnVwIG9mIHVuZWVkZWQgY29kZQoJKiBoYXNoLmM6IGZpeCBhIGNvbW1lbnQKClRodSBTZXAgMjUgMTQ6MTY6NTEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWDIuYyBoYXNoLmMgcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwveG1sZXhwb3J0cy5oIAoJICBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaCBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46CgkgIGZpeGluZyBzb21lIGNvbW1lbnRzIHRvIGF2b2lkIHdhcm5pbmdzIGZyb20gYXBpYnVpbGQucHkKCldlZCBTZXAgMjQgMjM6NDI6MDggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogcGF0Y2ggZnJvbSBTdGVwaGFuZSBCaWRvdWwgZm9yIGNvbmZpZ3VyaW5nCgkgIHRoZSBiZXRhMiB2ZXJzaW9uICMxMjMxMDQKCldlZCBTZXAgMjQgMjM6MTc6NTkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBhZGRpbmcgcmVwZWF0ZWQgcGFyc2luZyBhbmQgdmFsaWRhdGluZyB0ZXN0cwoJKiBTQVgyLmMgcGFyc2VyLmMgdHJlZS5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBtYWtlIHRoZSBuZXcKCSAgRE9NIHRyZWUgYnVpbGRpbmcgaW50ZXJmYWNlcyB1c2UgdGhlIGRpY3Rpb25hcnkgZnJvbSB0aGUgCgkgIHBhcnNpbmcgY29udGV4dCB0byBidWlsZCB0aGUgZWxlbWVudCBhbmQgYXR0cmlidXRlcyBuYW1lcwoJICBhcyB3ZWxsIGFzIGZvcm1hdHRpbmcgc3BhY2VzIGFuZCBzaG9ydCB0ZXh0IG5vZGVzCgkqIGluY2x1ZGUvbGlieG1sL2RpY3QuaCBkaWN0LmM6IGFkZGVkIHNvbWUgcmVmZXJlbmNlIGNvdW50aW5nCgkgIGZvciB4bWxEaWN0UHRyIGJlY2F1c2UgdGhleSBjYW4gYmUgc2hhcmVkIGJ5IGRvY3VtZW50cyBhbmQKCSAgYSBwYXJzZXIgY29udGV4dC4KCSogeG1scmVhZGVyLmM6IGEgYml0IG9mIGNsZWFudXAsIHJlbW92ZSB0aGUgc3BlY2lmaWMgdHJlZSBmcmVlaW5nCgkgIGZ1bmN0aW9ucyBhbmQgdXNlIHRoZSBzdGFuZGFyZCBvbmVzIG5vdy4KCSogeG1sbGludC5jOiBhZGQgLS1ub2RpY3QKCSogcHl0aG9uL2xpYnhtbC5jOiBmaXggYSBzdHVwaWQgYnVnIHNvIHRoYXQgbnMoKSB3b3JrcyBvbiAKCSAgYXR0cmlidXRlIG5vZGVzLgoKVHVlIFNlcCAyMyAyMzowNzo0NSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IGFkZGluZyBhIG5ldyBzZXQgb2YKCSAgQVBJIGZvciBwYXJzaW5nIHhtbFJlYWREb2MoKSB4bWxSZWFkRmlsZSgpIC4uLiB4bWxSZWFkSU8oKQoJICBhbmQgeG1sQ3R4dFJlYWREb2MoKSAuLi4geG1sQ3R4dFJlYWRJTygpLiBUaGF0IHdpdGgKCSAgYSBjbGVhciBkZWZpbmUgb2YgeG1sUGFyc2VyT3B0aW9uLCB4bWxDdHh0VXNlT3B0aW9ucygpCgkgIHNob3VsZCBzaW1wbGlmeSBjdXN0b20gcGFyc2luZyB3aXRob3V0IGJlaW5nIHRlbXB0ZWQgdG8KCSAgdXNlIGdsb2JhbCB2YXJpYWJsZXMsIGFuZCB4bWxDdHh0UmVzZXQoKSBzaG91bGQgYWxsb3cgcmV1c2UKCSAgb2YgYSBjb250ZXh0IGZvciBtdWx0aXBsZSBwYXJzaW5nLgoJKiB4bWxsaW50LmM6IHN3aXRjaGVkIHRvIHVzZSB4bWxSZWFkWFhYLCBhbGxvdyBvcHRpb25zIHRvCgkgIGJlIHVzZWQgc2ltdWx0YW5lb3VzbHkgd2l0aCBsZXNzIHRyb3VibGVzLgoJKiB0cmVlLmM6IHNpbXBsZSB3YXJuaW5nIHJlbW92YWwKCSogZG9jL2FwaWJ1aWxkLnB5OiBzbWFsbCBmaXgKCSogZG9jL2xpYnhtbDItYXBpLnhtbCB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IHVwZGF0ZWQKClR1ZSBTZXAgMjMgMTE6MTU6MjMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiByZXZlcnQgeG1sQ3JlYXRlRG9jUGFyc2VyQ3R4dCgpIHNpbmNlIHRoaXMgYnJlYWsKCSAgdGhlIHBhcnNlRG9jKCkgcHl0aG9uIGJpbmRpbmdzCgpUdWUgU2VwIDIzIDExOjAwOjE4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogbWFrZSBzdXJlIHhtbERldGVjdFNBWDIoKSBpcyBjYWxsZWQgb25seSBhdCAKCSAgcGFyc2luZyB0aW1lIHRvIGF2b2lkIGJyZWFraW5nIGFwcHMgY2hhbmdpbmcgdGhlIFNBWAoJICBjYWxsYmFja3MgYWZ0ZXIgY29udGV4dCBhbGxvY2F0aW9uLCBjaGFuZ2UgeG1sQ3JlYXRlRG9jUGFyc2VyQ3R4dCgpCgkgIHRvIHVzZSBhbiBpbW11dGFibGUgYnVmZmVyIGluc3RlYWQgb2YgYSBjb3B5CgpUdWUgU2VwIDIzIDA5OjQwOjMzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBhcHBsaWVkIHBhdGNoIGZyb20gTWFya3VzIEtlaW0gZml4aW5nIGEgcHJvYmxlbQoJICB3aXRoIEkvTyBjYWxsYmFjayByZWdpc3RyYXRpb24uCgkqIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGZpeGVkICMxMjI5OTQgY29tbWVudCBudW1iZXJpbmcKCSAgZm9yIHhtbFBhcnNlckVycm9ycwoKTW9uIFNlcCAyMiAxMjoyMToxMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogdGhlIHVyaSBhcmcgdG8geG1sTm9kZVNldEJhc2UgaXMKCSAgcmVhbGx5IGEgY29uc3QgeG1sQ2hhcioKCSogeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmg6IGFkZGluIHRoZQoJICB4bWxUZXh0UmVhZGVyQ29uc3RTdHJpbmcoKSB0byBnZXQgYW4gaW50ZXJuZWQgc3RyaW5nIGZyb20KCSAgdGhlIHJlYWRlcgoKU3VuIFNlcCAyMCAxNzoyMjoyMCBQRFQgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGVycm9yLmM6IGZpeGVkIGEgd2FybmluZyBtZXNzYWdlICh0cml2aWFsKQoJKiBkb2Mvc2VhcmNoLnBocDogcmVtb3ZlZCBpbmNvcnJlY3Qgd2FybmluZyBtZXNzYWdlIHdoZW4gd29yZAoJICBzZWFyY2ggbm90IGZvdW5kIGluIGxhc3Qgb2YgbXVsdGlwbGUgdGFibGVzIChidWcgMTE5NTM1KQoKRnJpIFNlcCAxOSAxNDoyNjoyOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgYSAyLjYuMC1iZXRhMiByZWxlYXNlCgkqIHhtbElPLmM6IGF2b2lkIGEgd2FybmluZwoJKiB0cmVlLmM6IGF2b2lkIGR1cGxpY2F0ZSBjb2RlIGluIHhtbFJlcGxhY2VOb2RlIGFzIHBvaW50ZWQgb3V0CgkgIGJ5IENocmlzIFJ5bGFuZAoJKiBpbmNsdWRlL2xpYnhtbC9kaWN0Lmg6IGFkZCBhIFFOYW1lIGFjY2VzcyBsb29rdXAgdG8gdGhlCgkgIGRpY3Rpb25hcnkuCgkqIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiBhZGRpbmcgY29uc3QgYWNjZXNzCgkgIGJhc2VkIG9uIHRoZSBkaWN0aW9uYXJ5IGludGVyZmFjZSBmb3Igc3RyaW5nIHJlYWQgZnJvbSB0aGUKCSAgcmVhZGVyLCB0aGUgbm9kZSBjb250ZW50IGFjY2VzcyBpcyBzdGlsbCBUT0RPLCBpdCdzIHRvbyBkaWZmZXJlbnQKCkZyaSBTZXAgMTkgMDA6MDE6MDggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWDIuYzogZml4aW5nIG5hbWVzcGFjZSBEVEQgdmFsaWRhdGlvbnMKCSogcmVzdWx0L3ZhbGlkL25zMi54bWwgcmVzdWx0L3ZhbGlkL25zLnhtbDogdGhlIG91dHB1dCBvZiBkZWZhdWx0ZWQKCSAgbmFtZXNwYWNlcyBpcyBzbGlnaHRseSBkaWZmZXJlbnQgbm93LgoJKiBNYWtlZmlsZS5hbTogcmVwb3J0IHRoZSBtZW1vcnkgdXNlZCBpbiBUaW1pbmd0ZXN0cyAoYXMgd2VsbCBhcyB0aW1lKQoKVGh1IFNlcCAxOCAxNToyOTo0NiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGFkZCBzdHJlYW1pbmcgb24gbWVtb3J5IHJlZ3Jlc3Npb24gdGVzdHMsIGZvdW5kCgkgIGJhZCBidWdzIGluIHRoZSByZWFkZXIgaW50ZXJmYWNlCgkqIHhtbHJlYWRlci5jOiBmaXhpbmcgYnVncyB3LnIudC4gdmVyeSBsYXJnZSBuYW1lcywgYW5kIHNwZWNpYWwKCSAgY29uZGl0aW9uIGluIGVuZCBvZiBmaWxlLgoJKiB4bWxJTy5jIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmggaW5jbHVkZS9saWJ4bWwveG1sSU8uaDoKCSAgYWRkaW5nIGltbXV0YWJsZSBidWZmZXJzLCBhbmQgcGFyc2VyIGlucHV0IGJhc2VkIG9uIHRob3NlLAoJICBidXQgdGhpcyBzaG91bGQgbm90IGJlIHVzZWQgKHlldCkgZm9yIGdlbmVyYWwgcGFyc2luZwoJKiBwYXJzZXIuYzogYWRkZWQgYSBjb21tZW50IGFib3V0IHVzaW5nIGltbXV0YWJsZSBidWZmZXJzIGZvcgoJICBnZW5lcmFsIHBhcnNpbmcuCgkqIHJlc3VsdC9iaWduYW1lLnhtbC5yZHIgcmVzdWx0L2JpZ25hbWUyLnhtbC5yZHI6IGZpeGluZyB0aGUKCSAgb3V0cHV0IG9mIHRoZSByZWdyZXNzaW9uIHRlc3RzCgkqIHhtbGxpbnQuYzogdXNpbmcgdGhlIGltbXV0YWJsZSBidWZmZXJzIHdoZW4gc3RyZWFtaW5nIG9uCgkgIG1tYXBlZCBmaWxlICgtLXN0cmVhbSAtLW1lbW9yeSkKClRodSBTZXAgMTggMTI6MDQ6NTAgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRpY3QuYzogdGhlIGxhc3QgcGF0Y2ggYnJva2UgdW5pY2l0eSBvZiByZXR1cm5lZCBzdHJpbmdzLCByZW1vdmVkCgpUaHUgU2VwIDE4IDAwOjMxOjAyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogYWRkIGEgVGltaW5ndGVzdHMgdGFyZ2V0IHRvIGNoZWNrIGJhZCBiZWhhdmlvdXIKCSAgZnJvbSB0aGUgc3RyZWFtaW5nIGVuZ2luZQoJKiBkYmdlbi5wbCBkYmdlbmF0dHIucGw6IHBlcmwgc2NyaXB0IHRvIGdlbmVyYXRlIGJpZyBpbnN0YW5jZXMKCSogeG1scmVhZGVyLmM6IGZpeCBhIGJhZCBiZWhhdmlvdXIgb24gbGFyZ2UgYnVmZmVyIGlucHV0cwoKV2VkIFNlcCAxNyAyMzoyNTo0NyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGljdC5jIHhtbHJlYWRlci5jOiB0d28gc21hbGwgaW1wcm92ZW1lbnRzCgpXZWQgU2VwIDE3IDIyOjUzOjMyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogYXZvaWQgYSBsZWFrIHdpdGggcHJldmlvdXMgcGF0Y2gKCldlZCBTZXAgMTcgMjI6MDY6MTEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYzogdXNlIHN0ZGVyciBhbmQgbm90IHN0ZG91dCBmb3IgZGVmYXVsdCBlcnJvcnMKCSAgaW4gcHl0aG9uIGVudmlyb25tZW50IGJ1ZyAjMTIyNTUyCgpXZWQgU2VwIDE3IDIxOjMzOjU3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogc21hbGwgZml4IGZyb20gUm9iIFJpY2hhcmRzIGZvciBpbnB1dCBmaWxlbmFtZQoJKiB4bWxsaW50LmM6IGZpeGVzIGZvciAtLXJlcGVhdCBhbmQgLS1tZW1vcnkvLS1zdHJlYW0gZm9yIHNwZWVkIHRlc3RzCgkqIHhtbElPOiBhZGRpbmcgYSBndWFyZCBpbiBvbmUgZnVuY3Rpb24KCldlZCBTZXAgMTcgMTU6NTc6NDQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWDIuYyB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogbW9yZSBwZXJmb3JtYW5jZSBodW50aW5nCgkgIHJlZHVjaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlIGFuZCBhdm9pZGluZyBleHBlbnNpdmUgcm91dGluZXMKCldlZCBTZXAgMTcgMTI6MjM6NDEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWDIuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB4bWxyZWFkZXIuYzogc3RhcnRlZCBtZXNzaW5nCgkgIHNlcmlvdXNseSB3aXRoIHBlci1kb2N1bWVudCBkaWN0IGFuZCBlbGVtZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMKCSAgcmV1c2UgaW4gdGhlIHhtbFJlYWRlci4gVGhpcyBzZWVtcyB0byBsZWFkIHRvIGFuIGludGVyZXN0aW5nCgkgIHNwZWVkdXAgb2YgdGhlIHhtbFJlYWRlciBhbHJlYWR5LgoKV2VkIFNlcCAxNyAwMTowNzo1NiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGljdC5jIGluY2x1ZGUvbGlieG1sL2RpY3QuaDogZG8gc3RyaW5nIGFsbG9jYXRpb25zIGluIGxhcmdlCgkgIHBvb2xzLCBhbGxvd2luZyB0byBmaW5kIGlmIGEgc3RyaW5nIHBlcnRhaW4gdG8gYSBkaWN0IHF1aWNrbHkKCSogeG1sbGludC5jOiBmaXggLS1zdHJlYW0gLS1yZXBlYXQgLS10aW1pbmcKCSogTWFrZWZpbGUuYW06IHRoZSB0ZXN0VGhyZWFkcyBydW4gb3V0cHV0IHNob3VsZCBiZSBzZWVuLgoKTW9uIFNlcCAxNSAxNjo0NjoyOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBzdGFydGluZyB3b3JrIG9uIHJldXNpbmcgdGhlCgkgIHBhcnNlciBkaWN0aW9uYXJ5IGZvciB0aGUgZWxlbWVudCBhbmQgYXR0cmlidXRlIHRhZyBuYW1lcy4KCSAgQWRkIHBvb2xzIGZvciBFbGVtZW50IGFuZCBBdHRyaWJ1dGVzIGluIHRoZSBwYXJzZXIgY29udGV4dCwKCSAgd2hpY2ggc2hvdWxkIGhlbHAgc3BlZWRpbmcgdXAgdGhlIHJlYWRlci4KCSogTWFrZWZpbGUuYW0gcmVzdWx0LyoucmRyIDogYWRkaW5nIG5vbi1weXRob24gcmVhZGVyIHJlZ3Jlc3Npb24KCSAgdGVzdHMuCgpNb24gU2VwIDE1IDE0OjU0OjQyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVgyLmMgcGFyc2VyLmMgdmFsaWQuYzogc3RhcnRpbmcgdG8gY2xlYW51cCBzb21lIG9mIHRoZQoJICBwcm9ibGVtcyBleHBvc2VkIGJ5IHRoZSBXM0MvTklTVCByZWdyZXNzaW9uIHN1aXRlLgoJKiByZXN1bHQvZW50Ny5zYXggcmVzdWx0L3htbDIuc2F4OiBzbWFsbCBmaXhlcy4KCk1vbiBTZXAgMTUgMTE6NDY6NDcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBtb3JlIHBhcnNlciBlcnJvciBmYWN0b3JpbmcKClN1biBTZXAgMTQgMjE6NTM6MzkgUERUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBIVE1MdHJlZS5jOiBGaXhlZCBidWcgMTIxMzk0IC0gbWlzc2luZyBucyBvbiBhdHRyaWJ1dGVzCgpTdW4gU2VwIDE0IDIxOjQzOjMyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBmYWN0b3Jpbmcgb2YgbW9yZSAKCSAgZXJyb3IgaGFuZGxpbmcgY29kZSwgc2VyaW91cyBzaXplIHJlZHVjdGlvbiBhbmQgbW9yZSBsaXNpYmlsaXR5CgkgIG9mIHRoZSByZXN1bHRpbmcgY29kZS4KCSogcGFyc2VySW50ZXJuYWxzLmMgcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmgKCSAgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IGNoYW5naW5nIHRoZSB3YXkgVkM6UHJvcGVyIEdyb3VwL1BFIE5lc3RpbmcKCSAgY2hlY2tzIGFyZSBkb25lLCB1c2UgYSBjb3VudGVyIGZvciBlbnRpdGllcy4gRW50aXRpZXMgd2hlcmUgZnJlZWQgYW5kCgkgIHJlYWxsb2NhdGVkIGF0IHRoZSBzYW1lIGFkZHJlc3MgZmFpbGluZyB0aGUgY2hlY2suCgkqIHRyZWUuYzogYXZvaWQgYSB3YXJuaW5nCgkqIHJlc3VsdC92YWxpZC8qIHJlc3VsdC9WQy8qOiB0aGlzIHNsaWdodGx5IGNoYW5nZXMgc29tZSB2YWxpZGF0aW9uCgkgIGVycm9yIG1lc3NhZ2VzLgoKU3VuIFNlcCAxNCAxMTowMzoyNyBQRFQgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHZhbGlkLmM6IGZpeGVkIGJ1ZyAxMjE3NTkgLSBlYXJseSBkZWNsYXJhdGlvbiBvZgoJICBhdHRyaWJ1dGUtbGlzdCBpbiBleHRlcm5hbCBEVEQKClNhdCBTZXAgMTMgMTQ6NDI6MTEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IHN0YXJ0aW5nIGNsZWFuaW5nIHVwCgkgIGVycm9yIGhhbmRsaW5nLCBmYWN0b3JpemUgZXJyb3IgcHJvY2Vzc2luZwoJKiBkb2MveG1sbGludC5odG1sOiB1cGRhdGUgb2YgdGhlIHBhZ2UsIHJlbW92ZSAtLXNnbWwKClNhdCBTZXAgMTMgMDI6MTM6NTAgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIERPQ0JwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0ZXN0RG9jYm9vay5jCgkgIHhtbGxpbnQuYyBkb2MveG1sbGludC54bWwgZG9jL3htbGxpbnQuMTogcmVtb3ZpbmcgdGhlIAoJICBicm9rZW4gcHNldWRvIFNHTUwgRG9jQm9vayBwYXJzZXIgY29kZS4KCkZyaSBTZXAgMTIgMTc6MjQ6MTEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeCBhIHByb2JsZW0gd2l0aCBzdHJjcHkoKSBpbiB4bWxYUGF0aEZvcm1hdE51bWJlcigpCgkgIHZhbGdyaW5kIHBvaW50ZWQgb3V0IHRoZSBzdHJpbmdzIG92ZXJsYXBwZWQuIGNsZWFudXAgLgoKRnJpIFNlcCAxMiAxMTo0MzoxMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhcHBsaWVkIHNwZWVkdXAgdG8geG1sU2VhcmNoTnMoKSBhcyBzdWdnZXN0ZWQgYnkKCSAgTHVjYSBQYWRvdmFuaS4gQ2xlYW5lZCB1cCB4bWxTZWFyY2hOc0J5SHJlZigpIGluIHRoZSBwcm9jZXNzCgkgIGFwcGx5aW5nIHRoZSBzYW1lIHRyaWNrLgoKRnJpIFNlcCAxMiAwMTozNjoyMCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdHJlZS5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGFkZGluZyBuYW1lc3BhY2UgY2hlY2tpbmdzCgkgIHdoaWxlIG1ha2luZyBzdXJlIHRoZXkgc3RpbGwgcGFyc2UgYXMgd2VsbGZvcm1lZCBkb2N1bWVudHMuCgkgIEFkZCBhbiBuc1dlbGxGb3JtZWQgc3RhdHVzIHJlcG9ydCB0byB0aGUgY29udGV4dCwgYW5kIAoJICBwcm92aWRlIG5ldyBhcHByb3ByaWF0ZSBlcnJvciBjb2Rlcy4KCSogTWFrZWZpbGUuYW0gcmVzdWx0L25hbWVzcGFjZXMvKiB0ZXN0L25hbWVzcGFjZXMvKjogYWRkIAoJICBzcGVjaWZpYyByZWdyZXNzaW9uIHRlc3RpbmcgZm9yIHRoZSBuZXcgbmFtZXNwYWNlIHN1cHBvcnQKCSogdGVzdC9hdHQ1IHJlc3VsdC9ub2VudC9hdHQ1IHJlc3VsdC9hdHQ1IHJlc3VsdC9hdHQ1LnNheDoKCSAgYWRkIG1vcmUgY292ZXJhZ2UgZm9yIHRoZSBhdHRyaWJ1dGUgcGFyc2luZyBhbmQgbm9ybWFsaXphdGlvbgoJICBjb2RlLgoKRnJpIFNlcCAxMiAwMTozNDoxOSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGhyZWFkcy5jOiBiYWNrcG9ydCBvZiBhIHRocmVhZCBidWdmaXggZnJvbSAyXzVfWCBicmFuY2gKClRodSBTZXAgMTEgMTg6Mjk6MTggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIGJ1ZyBpbiBvbmUgY29ybmVyIGNhc2Ugb2YgYXR0cmlidXRlIHBhcnNpbmcuCgpUaHUgU2VwIDExIDE2OjIxOjUzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gZG9jLyogOiAyLjYuMGJldGExIGNoYW5nZXMKCSogU0FYMi5jIGhhc2guYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYzogRml4aW5nIGF0dHJpYnV0ZQoJICBub3JtYWxpemF0aW9uLCBtaWdodCBub3QgYmUgdG90YWxseSBmaXhlZCBidXQgdGhpcyBzaG91bGQgCgkgIG1ha2Ugc3VyZSBTQVggZXZlbnQgcHJvdmlkZSB0aGUgcmlnaHQgc3RyaW5ncyBmb3IgYXR0cmlidXRlcwoJICBleGNlcHQgZW50aXRpZXMgZm9yIHdoaWNoIGxpYnhtbDIgaXMgZGlmZmVyZW50IGJ5IGRlZmF1bHQKCSAgVGhpcyBzaG91bGQgZml4ICMxMDk1NjQKCSogcmVzdWx0L2F0dHJpYi54bWwuc2F4IHJlc3VsdC9lbnQzLnNheCByZXN1bHQvcDNwLnNheDogbWlub3IgY2hhbmdlcwoJICBpbiBhdHRyaWJ1dGUgY2FsbGJhY2sgdmFsdWVzCgkqIHJlc3VsdC9jMTRuL3dpdGgtY29tbWVudHMvZXhhbXBsZS00CgkgIHJlc3VsdC9jMTRuL3dpdGhvdXQtY29tbWVudHMvZXhhbXBsZS00OiB0aGlzIGFsc28gZml4ZXMgYSBzdWJ0bGUKCSAgYnVnIGluIHRoZSBjYW5vbmljYWxpemF0aW9uIHRlc3RzLgoKV2VkIFNlcCAxMCAxMjozODo0NCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCVRpbWUgdG8gY29tbWl0IDMgZGF5cyBvZiB3b3JrIHJld3JpdGluZyB0aGUgcGFyc2VyIGludGVybmFsLAoJZml4aW5nIGJ1Z3MgYW5kIG1pZ3JhdGluZyB0byBTQVgyIGludGVyZmFjZSBieSBkZWZhdWx0LiBUaGVyZQoJaXMgc29tZSB3b3JrIGxldGYgVE9ETywgbGlrZSBuYW1lc3BhY2UgdmFsaWRhdGlvbiBhbmQgYXR0cmlidXRlcwoJbm9ybWFsaXphdGlvbiAodGhpcyBicmVhayBDMTROIHJpZ2h0IG5vdykKCSogTWFrZWZpbGUuYW06IGZpeGVkIHRoZSB0ZXN0IHJ1bGVzCgkqIGluY2x1ZGUvbGlieG1sL1NBWDIuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaAoJICBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaCBTQVgyLmMgcGFyc2VyLmMKCSAgcGFyc2VySW50ZXJuYWxzLmM6IGNoYW5naW5nIHRoZSBwYXJzZXIsIG1pZ3JhdGluZyB0byBTQVgyLAoJICBhZGRpbmcgbmV3IGludGVyZmFjZSB0byBzd2l0Y2ggYmFjayB0byBTQVgxIG9yIGluaXRpYWxpemUgYQoJICBTQVggYmxvY2sgZm9yIHYxIG9yIHYyLiBNb3N0IG9mIHRoZSBuYW1lc3BhY2Ugd29yayBpcyBkb25lCgkgIGJlbG93IFNBWCwgYXMgd2VsbCBhcyBhdHRyaWJ1dGUgZGVmYXVsdGluZwoJKiBnbG9iYWxzLmM6IGNoYW5nZWQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGRlZmF1bHQgU0FYIGhhbmRsZXJzCgkqIGhhc2guYyB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvaGFzaC5oOiBhZGRlZCBRTmFtZSBzcGVjaWZpYyBoYW5kbGluZwoJKiB4bWxJTy5jOiBzbWFsbCBmaXgKCSogeG1sbGludC5jIHRlc3RTQVguYzogcHJvdmlkZSBhIC0tc2F4MSBzd2l0Y2ggdG8gdGVzdCB0aGUgb2xkCgkgIHZlcnNpb24gY29kZSBwYXRoCgkqIHJlc3VsdC9wM3AgcmVzdWx0L3AzcC5zYXggcmVzdWx0L25vZW50L3AzcCB0ZXN0L3AzcDogdGhlIG5ldyBjb2RlCgkgIHBvaW50ZWQgb3V0IGEgdHlwbyBpbiBhIHZlcnkgb2xkIHRlc3QgbmFtZXNwYWNlCgpTdW4gU2VwICA3IDE5OjU4OjMzIFBURCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sSU8uYyBpbmNsdWRlL2xpYnhtbC94bWxJTy5oIHBhcnNlci5jOiBJbXBsZW1lbnRlZCBkZXRlY3Rpb24KCSAgb2YgY29tcHJlc3NlZCBmaWxlcywgc2V0dGluZyBkb2MtPmNvbXByZXNzZWQgYXBwcm9wcmlhdGVseQoJICAoYnVnICMxMjA1MDMpLgoKU3VuIFNlcCAgNyAyMjo1MzowNiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHRyeSB0byBjb3BlIHdpdGggdGhlIGZhY3QgdGhhdCBhcHBzIG1heSBzdGlsbAoJICBoYXZlIGFsbG9jYXRlZCBzbWFsbGVyIFNBWCBjYWxsYmFrIGJsb2NrCgpTdW4gU2VwICA3IDExOjExOjQ1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkaWN0LmM6IGFsbG93IHRvIGdpdmUgLTEgZm9yIHVuZGVmaW5lZCBsZW5ndGggaW4gbG9va3VwcwoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0ZXN0U0FYLmM6CgkgIGZpcnN0IHJvdW5kIG9mIHdvcmsgb24gdGhlIG5ldyBTQVgyIGludGVyZmFjZXMsIHRoZSBBUEkKCSAgd2lsbCBjaGFuZ2UgYnV0IGNvbW1pdGluZyBiZWZvcmUgY2hhbmdpbmcgZm9yIGhpc3RvcmljYWwKCSAgcmVmZXJlbmNlLgoKU2F0IFNlcCAgNiAxMDo1NTowMSBQVEQgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIFNBWDIuYywgeG1sSU8uYzogZml4ZWQgYnVnICMxMjEyMTAgKGNhbGxiYWNrIHRvIHNheC0+ZXJyb3IsCgkgIHNheC0+d2FybmluZyB3aXRoIHdyb25nIHBhcmFtcykuCgpGcmkgU2VwICA1IDEwOjMzOjQyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmg6IHBhdGNoIGZyb20gU3TpcGhhbmUgQmlkb3VsIHRvIGV4cG9ydAoJICBnbG9iYWxzIGVudHJ5IHBvaW50cyB0byB0aGUgcHl0aG9uIGJpbmRpbmdzCgpXZWQgU2VwICAzIDE1OjI0OjQxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IHdoZW4gY3JlYXRpbmcgYSBET0NUWVBFIHVzZSAiaHRtbCIgbG93ZXJjYXNlCgkgIGJ5IGRlZmF1bHQgaW5zdGVhZCBvZiAiSFRNTCIKCSogcGFyc2VyLmMgeG1scmVhZGVyLmM6IG9wdGltaXphdGlvbiwgZ2FpbiBhIGZldyAlIHBhcnNpbmcgc3BlZWQgYnkKCSAgYXZvaWRpbmcgY2FsbHMgdG8gImFyZUJsYW5rcyIgd2hlbiBub3QgbmVlZGVkLgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IHNvbWUgc3RydWN0dXJlCgkgIGV4dGVuc2lvbnMgZm9yIGZ1dHVyZSB3b3JrIG9uIHVzaW5nIHBlci1kb2N1bWVudCBkaWN0aW9uYXJpZXMuCgpXZWQgU2VwICAzIDE1OjA4OjA2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSByZXN1bHRzLyouc2F4IFNBWFJlc3VsdC8qOiByZW1vdmluZyB0aGUgU0FYcmVzdWx0cwoJICB0cmVlLCBrZWVwaW5nIHJlc3VsdCBpbiB0aGUgc2FtZSB0cmVlLCBhZGRlZCBTQVh0ZXN0cyB0byB0aGUKCSAgZGVmYXVsdCAibWFrZSB0ZXN0cyIKClR1ZSBTZXAgIDIgMTU6NTk6MDQgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxleHBvcnRzLmg6IGRlZmluZWQgYWRkaXRpb25hbCBtYWNyb3Mgd2hpY2gKCSAgYWZmZWN0IGV4cG9ydHMgYW5kIGFkZGVkIG1pbmd3IHNlY3Rpb24KCk1vbiBTZXAgIDEgMTU6MTU6MTggUERUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MvaW5kZXgucHk6IGZpeGVkIHByb2JsZW0gcGFyc2luZyB4aHRtbCBkb2NzCgkqIGRvYy94bWxyZWFkZXIuaHRtbCxkb2MvZ3VpZGVsaW5lcy5odG1sOiBzbWFsbCBtb2RpZmljYXRpb24KCSAgdG8gYXZvaWQgcHJvYmxlbSBpbiBweXRob24gcGFyc2luZy4KCSogZG9jL3NlYXJjaC5waHA6IGZpeGVkIHVwcGVyIGNhc2UgZmlsZW5hbWUgcHJvYmxlbSBmb3IgWFNMVCBkb2NzCgpNb24gU2VwICAxIDIyOjU1OjA5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBwYXRjaCBmcm9tIE1hcmsgVmFrb2MgdGhhdCBhbGxvd3MgY29tcGlsaW5nIAoJICB3aXRoIFhJbmNsdWRlIGJ1dCB3aXRob3V0IFhQb2ludGVyIHN1cHBvcnQuCgpNb24gU2VwICAxIDIyOjMxOjM4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4geG1sMi1jb25maWcuaW46IEFwcGxpZWQgYSBwYXRjaCBmcm9tIEtldmluIFAuIEZsZW1pbmcKCSAgdG8gYWRkIC0tbGlidG9vbC1saWJzIG9wdGlvbiB0byB4bWwyLWNvbmZpZyBzY3JpcHQuCgpTdW4gQXVnIDMxIDIxOjUyOjEyIFBEVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jL1JFQURNRS5kb2NzLCBkb2MvTWFrZWZpbGUuYW06IG5ldyBmaWxlIGFkZGVkLAoJICBnaXZpbmcgc29tZSBkZXNjcmlwdGlvbiBvZiB0aGUgZG9jdW1lbnRhdGlvbiBnZW5lcmF0aW9uIHByb2Nlc3MKCSogZG9jL3NlYXJjaC5waHA6IGZpeGVkIHByb2JsZW0gd2l0aCB1cHBlciBjYXNlIG9uIGZpbGVuYW1lcwoKRnJpIEF1ZyAyOSAxMjoyNTowMSBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLmJjYjogdXBkYXRlcyBieSBFcmljIFp1cmNoZXIKClRodSBBdWcgMjggMjI6NTg6MzggUERUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MvYXBpYnVpbGQucHksIGRvYy9saWJ4bWwyLWFwaS54bWw6IGVuaGFuY2VkIGNvZGUKCSAgdG8gY29tcGVuc2F0ZSBmb3IgcG9sbHV0aW9uIGZyb20gSWdvcidzIGhlYWRlciB0YWludAoJICAocXVpY2sgYmVmb3JlIERhbmllbCBub3RpY2VzKQoKVGh1IEF1ZyAyOCAyMzowMTozNiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jOiBmaXhlZCBhIG5hbWVzcGFjZSBlcnJvciBvbiBhdHRyaWJ1dGUgcmVwb3J0aW5nIGJ1ZwoJICBwb2ludGVkIG91dCBieSBUb2JpYXMgUmVpZgoJKiB0ZXN0L3AzcCByZXN1bHQvcDNwIHJlc3VsdC9ub2VudC9wM3A6IHRoaXMgdGVzdCBjYXNlIHdhcyB3cm9uZwoJICB1c2luZyB4bWxzbiBpbnN0ZWFkIG9mIHhtbG5zLi4uCgpUaHUgQXVnIDI4IDE4OjI1OjA3IENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGluY2x1ZGUvbGlieG1sL3htbGV4cG9ydHMuaDogZml4ZWQKCSAgdHlwb3MgcmVwb3J0ZWQgYnkgTWFyayBWYWtvYwoKVGh1IEF1ZyAyOCAwODo1OTo1MSBNRFQgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCWFkZDoKCSogZG9jL3R1dG9yaWFsL2FwaS5odG1sCgkqIGRvYy90dXRvcmlhbC9hcjAxczA5Lmh0bWwKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGV4cGF0aC5jCgl1cGRhdGVkCgkqIGRvYy90dXRvcmlhbC8qLmh0bWwKCWZpeCBteSBiYWQgLSBmb3Jnb3QgdG8gY2hlY2sgaW4gbmV3IGZpbGVzIHdoZW4gSSBsYXN0Cgl1cGRhdGVkCgpUaHUgQXVnIDI4IDE0OjMxOjEzIENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvTWFrZWZpbGUuYmNiOiBuZXcgZmlsZSwgc3VwcG9ydCBmb3IgQm9ybGFuZCBDKysKCSogeG1sbGludC5jOiBmaXhlZCB0aW1lIGluY2x1c2lvbiBmb3IgdmFyaW91cyBjb21waWxlcnMKClRodSBBdWcgMjggMTI6MzI6NTkgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jOiBhZGRlZAoJICBmZXcgY2FzdHMgdG8gc2h1dCB0aGUgY29tcGlsZXIgd2FybmluZ3MKClRodSBBdWcgMjggMTI6MjM6NTEgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS4qIHdpbjMyL2NvbmZpZ3VyZS5qczogZml4ZWQgZm9yIG1pbmd3CgpUaHUgQXVnIDI4IDEwOjAxOjQ0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmMgdGhyZWFkcy5jOiBmaXhpbmcgYnVnICMxMjA4NzAgdHJ5IHRvIGF2b2lkIHByb2JsZW0KCSAgd2l0aCB1bmluaXRpYWxpemVkIG11dGV4ZXMKCldlZCBBdWcgMjcgMTY6MTI6NDEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZml4ZWQgYW4gZXJyb3IgcmVwb3J0aW5nIGJ1ZyBpbiBSZWxheC1ORyB3aGVuIHdlIGVuZAoJICB1cCB3aXRoIG11bHRpcGxlIHN0YXRlcywgc2VsZWN0IHRoZSAiYmVzdCIgb25lLiBGaXggIzEyMDY4MgoJKiByZXN1bHQvcmVsYXhuZy90dXRvcjExXzJfMy5lcnI6IHNtYWxsIGNoYW5nZSByZXN1bHRpbmcgCgpXZWQgQXVnIDI3IDExOjI1OjI1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogYXBwbGllZCBiYXNlNjQgc3VwcG9ydCBwYXRjaCBmcm9tIEFudGhvbnkgQ2FycmljbwoKV2VkIEF1ZyAyNyAxMDo1ODo1MSBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL1t0aHJlYWRzLXhwb2ludGVyXS5oOiByZWFsaWduZWQgcGFyYW1ldGVycwoJICBhZnRlciB0YWludAoKV2VkIEF1ZyAyNyAwOTo1OTo1NCBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbGV4cG9ydHMuaDogZml4ZWQgZGVmcyBmb3IgQm9ybGFuZCBjb21waWxlciwKCSAgYXMgcmVwb3J0ZWQgYnkgRXJpYyBadXJjaGVyCgpUdWUgQXVnIDI2IDE1OjU0OjA0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGZpeGVkIGJ1ZyAjMTIwMzg2IGFnYWluIGEgcHJvYmxlbSBpbnRyb2R1Y2VkIHdoZW4KCSAgdHJ5aW5nIHRvIHJldXNlIGF1dG9tYXRhIGZvciBjb250ZW50IHZhbGlkYXRpb24uIEZpeCBhIGJ1ZyByZXBvcnQKCSAgcHJvYmxlbSBvbiB6ZXJvT3JNb3JlCgkqIHJlc3VsdC9yZWxheG5nL3R1dG9yM183X2VycjogY2hhbmdlIHNsaWdodGx5IGVycm9yIHJlcG9ydGluZy4KCk1vbiBBdWcgMjUgMTM6MjQ6NTcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtOiBtYWtlIHN1cmUgdGhlIG5ldyBoZWFkZXIgd2lsbAoJICBiZSBpbmNsdWRlZCB3aGVuIGdlbmVyYXRpbmcgYSBuZXcgZGlzdHJpYnV0aW9uLgoKTW9uIEF1ZyAyNSAxMjozNzowNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBmaXhlZCBhIGNvdXBsZSBvZiBzdHVwaWQgYnVncyBpbiB0aGUgc3RhdGUgYWxsb2NhdGlvbgoJICByb3V0aW5lcyB3aGljaCBsZWQgdG8gYnVnICMxMjAwNDAgYW5kIHRoZSBvbmVzIHJlcG9ydGVkIGJ5CgkgIE1hcnRpam4gRmFhc3NlbgoKTW9uIEF1ZyAyNSAxMjozNzoyMyBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIGluY2x1ZGUvbGlieG1sL3JlbGF4bmcuaAoJICBpbmNsdWRlL2xpYnhtbC9TQVguaCBpbmNsdWRlL2xpYnhtbC9TQVgyLmg6IHJlYWxpZ25lZCB0aGUKCSAgcGFyYW1ldGVycyBhZnRlciB0YWludC4KCk1vbiBBdWcgMjUgMTE6MTY6MDEgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46IG1vdmVkIGV4cG9ydCBkZWZzIHRvIGEgc2VwYXJhdGUKCSAgZmlsZSBmb3IgY29uc2lzdGVuY3kuCgkqIGluY2x1ZGUvbGlieG1sL3htbGV4cG9ydHMuaDogbmV3IGZpbGUsIGNvbnRhaW5zIGV4cG9ydCBkZWZzLgoKTW9uIEF1ZyAyNSAxMTowMTo0OSBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sLyouaCBnZW5Vbmljb2RlLnB5OiBleHBvcnRhYmlsaXR5IHRhaW50CgkgIG9mIHRoZSBoZWFkZXJzLgoKVGh1IEF1ZyAyMSAxMjozNzo0NiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IG1ha2UgdGhlIGRlcHJlY2F0ZWQgaW50ZXJmYWNlcyBsb2cgYW4gZXJyb3IgbWVzc2FnZQoJICB0byBiZSBzdXJlIGl0IHdvbid0IGdldCB1c2VkLgoKVGh1IEF1ZyAyMSAwMDo1MDozMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gU0FYMi5jIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtIGluY2x1ZGUvbGlieG1sL1NBWDIuaDoKCSAgQWRkaW5nIG5ldyB2ZXJzaW9uIG9mIHRoZSBTQVggaW50ZXJmYWNlLCBpdCdzIG5vdCB0aGVyZSB5ZXQsCgkgIGN1cnJlbnRseSBqdXN0IHByZXBhcmluZyB0aGUgd29yawoJKiBnbG9iYWxzLmMgcGFyc2VyLmMgU0FYLmMgaW5jbHVkZS9saWJ4bWwvU0FYLmggCgkgIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogZG9pbmcgc29tZQoJICByZWZhY3RvcmluZyBvZiB0aGUgU0FYdjEgaW50ZXJmYWNlcywgb2Jzb2xldGluZyBhIGJ1bmNoIG9mIHRoZW0KCSAgd2hpbGUga2VlcGluZyBmdW5jdGlvbmFsaXRpZXMsIHByZXBhcmluZyBTQVgyIGludGVncmF0aW9uLgoJKiBkaWN0LmM6IHNtYWxsIGNsZWFudXAuCgpXZWQgQXVnIDIwIDAwOjIwOjAxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGVzIGEgc21hbGwgYnVnIGludHJvZHVjZWQgaW4gbGFzdCBjb21taXQgYW5kIGRldGVjdGVkCgkgIGJ5IHZhbGdyaW5kLgoKVHVlIEF1ZyAxOSAxNjo1NDoxOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGljdC5jIGhhc2guYzogb3B0aW1pemF0aW9uIHdoZW4gZnJlZWluZyBoYXNoIHRhYmxlcy4KCSogcGFyc2VyLmMgeG1sSU8uYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IHNvbWUgdHVuaW5nIG9mIGJ1ZmZlcgoJICBhbGxvY2F0aW9ucwoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDoga2VlcCBhCgkgIHNpbmdsZSBhbGxvY2F0ZWQgYmxvY2sgZm9yIGFsbCB0aGUgYXR0cmlidXRlcyBjYWxsYmFja3MsCgkgIGF2b2lkIHVzZWxlc3MgbWFsbG9jKCkvZnJlZSgpCgkqIHRyZWUuYzogZG8gbm90IHJlYWxsb2MoKSB3aGVuIGdyb3dpbmcgYSBidWZmZXIgaWYgdGhlIGJ1ZmZlcgoJICBhaW4ndCBmdWxsLCBtYWxsb2MvbWVtY3B5L2ZyZWUgYXZvaWQgY29weWluZyBtZW1vcnkuCgpNb24gQXVnIDE4IDE4OjM3OjAxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmMgZG9jL3htbGxpbnQueG1sIGRvYy94bWxsaW50LjE6IGFkZGVkIG9wdGlvbgoJICAtLWR0ZHZhbGlkZnBpIGZvciBUb2JpYXMgUmVpZgoKTW9uIEF1ZyAxOCAxNDowMzowMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGljdC5jIGluY2x1ZGUvbGlieG1sL2RpY3QuaCBNYWtlZmlsZS5hbSBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbToKCSAgbmV3IGRpY3Rpb25hcnkgbW9kdWxlIHRvIGtlZXAgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgdGhlIG5hbWVzIHVzZWQKCSAgYnkgdGhlIHBhcnNlcgoJKiBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHZhbGlkLmM6CgkgIHN3aXRjaGVkIGFsbCBwYXJzZXJzIHRvIHVzZSB0aGUgZGljdGlvbmFyeSBpbnRlcm5hbGx5CgkqIGluY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaAoJICBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaCBpbmNsdWRlL2xpYnhtbC92YWxpZC5oOgoJICBTb21lIG9mIHRoZSBpbnRlcmZhY2VzIGNoYW5nZWQgYXMgYSByZXN1bHQgdG8gcmVjZWl2ZSBvciByZXR1cm4KCSAgImNvbnN0IHhtbENoYXIgKiIgaW5zdGVhZCBvZiAieG1sQ2hhciAqIiwgdGhpcyBpcyBlaXRoZXIKCSAgaW5zaWduaWZpY2FudCBmcm9tIGFuIHVzZXIgcG9pbnQgb2YgdmlldyBvciB3aGVuIHRoZSByZXR1cm5pbmcKCSAgdmFsdWUgY2hhbmdlZCwgdGhvc2UgZnVuY3Rpb24gYXJlIHJlYWxseSBwYXJzZXIgaW50ZXJuYWwgbWV0aG9kcwoJICB0aGF0IG5vIHVzZXIgY29kZSBzaG91bGQgcmVhbGx5IGNoYW5nZQoJKiBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy9odG1sLyo6IHRoZSBBUEkgaW50ZXJmYWNlIGNoYW5nZWQgYW5kCgkgIHRoZSBkb2NzIHdlcmUgcmVnZW5lcmF0ZWQKClN1biBBdWcgMTcgMjM6MDU6MzggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIHRvIHhtbENsZWFudXBQYXJzZXIgZnJvbSBEYXZlIEJlY2tldHQKClNhdCBBdWcgMTYgMjI6NTM6NDIgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MvcGFyc2VkZWNsLnB5LCBkb2MvbGlieG1sMi1yZWZzLnhtbCwgZG9jL0FQSSouaHRtbDoKCSAgZml4ZWQgcGFydCAoMikgb2YgYnVnIDExOTUzNSAod3JvbmcgYWxwaGEgY2FzZSBvbiBmaWxlbmFtZXMpCgpTYXQgQXVnIDE2IDIwOjM1OjI4IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jL0FQSSouaHRtbCwgZG9jL2h0bWwvKjogcmVnZW5lcmF0ZWQgQVBJIGRvY3VtZW50YXRpb24KCSAgZm9yIHhtbHNvZnQub3JnIChwYXJ0IG9mIEJ1ZyAxMTk1MzUpCgpGcmkgQXVnIDE1IDE0OjU4OjM3IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZW5jb2RpbmcuYywgdGhyZWFkcy5jLCBpbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmgsCgkgIGRvYy9saWJ4bWwyLWFwaS54bWw6IE1pbm9yIGNoYW5nZXMgdG8gY29tbWVudHMsIGV0Yy4gZm9yCgkgIGltcHJvdmluZyBkb2N1bWVudGF0aW9uIGdlbmVyYXRpb24KCSogZG9jL01ha2VmaWxlLmFtOiBmdXJ0aGVyIGFkanVzdG1lbnQgdG8gYXV0by1nZW5lcmF0aW9uIG9mCgkgIHdpbjMyL2xpYnhtbDIuZGVmLnNyYwoKRnJpIEF1ZyAxNSAwMjoyNDoyMCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTmV3cyBjb25maWd1cmUuaW46IHByZXBhcmluZyBsaWJ4bWwyLTIuNS4xMCByZWxlYXNlCgkqIGRvYy8qIDogdXBkYXRlZCB0aGUgZG9jIGFuZCByZWJ1aWx0CgpGcmkgQXVnIDE1IDAxOjU1OjUzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4aW5nIHRoZSB4bWxTQVhQYXJzZURURCBidWcgIzExOTUzNiByYWlzZWQgYnkKCSAgTWFsY29sbSBUcmVkaW5uaWNrIHdpdGggdGhlIHBhdGNoIGhlIHN1Z2dlc3RlZC4KCkZyaSBBdWcgMTUgMDE6Mzc6MTAgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogYWxsb2NhdGlvbiBlcnJvciAjMTE5Nzg0IHJhaXNlZCBieSBPbGl2ZXIgU3RvZW5lYmVyZwoKRnJpIEF1ZyAxNSAwMDo0MTo1OCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmM6IGZpeGluZyBhbiB1c2Ugb2Ygc3RyY3B5KCkgd2hlcmUgYm90aCBzdHJpbmdzIG92ZXJsYXAKCSAgcG9pbnRlZCBvdXQgYnkgdmFsZ3JpbmQuCgpUaHUgQXVnIDE0IDE3OjEwOjM5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBET0NCcGFyc2VyLmMgZ2xvYmFscy5jIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oOiBnZXQgcmlkIG9mCgkgIHNvbWUgY29tcGlsYXRpb24gd2FybmluZ3MuCgkqIHhpbmNsdWRlLmM6IGZpeCB0aGUgcGVyZm9ybWFuY2UgcHJvYmxlbSByZXBvcnRlZCBieSBLZXZpbiBSdXNjb2UKCSAgcGx1cyBzb21lIGNsZWFudXAgYW5kIGJldHRlciBlcnJvciByZXBvcnRpbmcuCgpUaHUgQXVnIDE0IDE0OjEzOjQzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiBhcHBsaWVkIFVURi0xNiBlbmNvZGluZyBoYW5kbGluZyBwYXRjaCBwcm92aWRlZCBieQoJICBNYXJrIEl0emNvdml0egoJKiBlbmNvZGluZy5jIHBhcnNlci5jOiBtb3JlIGNsZWFudXAgYW5kIGZpeGVzIGZvciBVVEYtMTYgd2hlbiAKCSAgbm90IGhhdmluZyBpY29udiBzdXBwb3J0LgoKVGh1IEF1ZyAxNCAwMzoxOTowOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIGV4YW1wbGUvTWFrZWZpbGUuYW0gbGlieG1sLmggbmFub2Z0cC5jCgkgIG5hbm9odHRwLmMgeG1sbGludC5jOiBBcHBsaWVkIHBhdGNoIGZyb20gTWlraGFpbCBHcnVzaGluc2tpeSBmb3IKCSAgbWluZ3cgY29tcGlsZXIgb24gV2luZG93cy4KClRodSBBdWcgMTQgMDI6Mjg6MzYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCB0aGUgc2VyaW91cyBDUFUgdXNhZ2UgcHJvYmxlbSByZXBvcnRlZCBieQoJICBHcmFudCBHb29kYWxlCgkqIEhUTUxwYXJzZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIE9saXZlciBTdG9lbmViZXJnIGFib3V0IGEgZnJlZQoJICBtaXNzaW5nIGluIGh0bWxTQVhQYXJzZURvYwoKVHVlIEF1ZyAxMiAyMjo0ODoxMCBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy9NYWtlZmlsZS5hbTogUmVtb3ZlZCBkZXBlbmRlbmN5IGZyb20gbGlieG1sMi5kZWYuc3JjCgpUdWUgQXVnIDEyIDE4OjU1OjA4IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogYXV0b2dlbi5zaDogdG9vayBhd2F5IHRoZSByZXF1aXJlbWVudCBmb3IgYXV0b21ha2UtMS40LAoJICBjaGFuZ2VkIHRoZSBtZXNzYWdlcyBmb3IgZ2V0dGluZyBhdXRvKiB0b29scyB0byBjdXJyZW50CgkgIGdudSBwYWdlcy4KCSogY29uZmlndXJlLmluOiBhZGRlZCBjaGVjayBmb3IgTGludXggRGVjIGFscGhhIHJlcXVpcmluZwoJICAtaWVlZSBmbGFnLCBmaXhlZCB0ZXN0IGZvciBpcHY2CgkqIHRyaW9uYW4uYzogZml4ZWQgcHJvYmxlbSBmb3IgY29tcGlsaW5nIG9uIExpbnV4IERlYyBhbHBoYQoJICB1c2luZyBuYXRpdmUgY29tcGlsZXIKCSogZG9jL01ha2VmaWxlLmFtOiBpbXBsZW1lbnRlZCByZWdlbmVyYXRpb24gb2Ygd2luMzIvbGlieG1sMi5kZWYuc3JjCgkgIHdoZW5ldmVyIGxpYnhtbDItYXBpLnhtbCBpcyBjaGFuZ2VkLgoKTW9uIEF1ZyAxMSAxNzowMjoyMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGNsZWFuaW5nIHVwIGEgcHJvYmxlbSB3aGVuIHBhcnNpbmcgVVRGLTE2IGFuZCBsaWJpY29udgoJICBpcyBub3QgdXNlZC4KClN1biBBdWcgMTAgMDg6MTM6MjIgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IHJlbmVyYXRlZCB3aXRoIGZpeGVkIGxpYnhtbDItYXBpLnhtbAoKU3VuIEF1ZyAxMCAwMDoyMjo1NSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTmV3cyBjb25maWd1cmUuaW46IHByZXBhcmluZyBsaWJ4bWwyLTIuNS45IHJlbGVhc2UKCSogZG9jLyogOiB1cGRhdGVkIHRoZSBkb2MgYW5kIHJlYnVpbHQKClNhdCBBdWcgIDkgMjA6MDA6MTMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oIGRvYy9saWJ4bWwyLWFwaS54bWw6IGNoYW5naW5nIGFuIGVudW0KCSAgZGVmaW5pdGlvbiB0byBnZXQgYSBjb3JyZWN0IEFQSSBYTUwgZGVzY3JpcHRpb24uIFRoaXMgd2FzIGFwcGFyZW50bHkKCSAgYnJlYWtpbmcgV2luZG93cyBidWlsZC4KClNhdCBBdWcgIDkgMTM6NDE6MjEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgYSBuYXN0eSBidWcgIzExOTM4NywgYmFkIGhldXJpc3RpYyBmcm9tCgkgIHRoZSBwcm9ncmVzc2l2ZSBIVE1MIHBhcnNlciBmcm9udC1lbmQgb24gbGFyZ2UgY2hhcmFjdGVyIGRhdGEKCSAgaXNsYW5kIGxlYWRpbmcgdG8gYW4gZXJyb25lb3VzIGVuZCBvZiBkYXRhIGRldGVjdGlvbiBieSB0aGUKCSAgcGFyc2VyLiBTb21lIGNsZWFudXAgdG9vIHRvIGdldCBjbG9zZXIgZnJvbSB0aGUgWE1MIHByb2dyZXNzaXZlCgkgIHBhcnNlci4KClNhdCBBdWcgIDkgMDA6NDI6NDcgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB3aW4zMi9jb25maWd1cmUuanM6IEFkZGVkIGluIHN1cHBvcnQgZm9yIHRoZSBJU084ODU5WAoJICBtb2R1bGUgKHBhdGNoIHByb3ZpZGVkIGJ5IEplc3NlIFBlbHRvbikKCkZyaSBBdWcgIDggMTU6NTY6MzIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgdHJlZS5jIHRocmVhZHMuYzogaHVtIHRyeSB0byBhdm9pZCBzb21lIHRyb3VibGVzCgkgIHdoZW4gdGhlIGxpYnJhcnkgaXMgbm90IGluaXRpYWxpemVkIGFuZCBvbmUgdHJ5IHRvIHNhdmUsIHRoZSAKCSAgbG9ja3MgaW4gdGhyZWFkZWQgZW52IG1pZ2h0IG5vdCBiZWVuIGluaXRpYWxpemVkLCBwbGF5aW5nIHNhZmUKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGFwcGx5IHBhdGNoIGZvciBoZXhCaW5hcnkgZnJvbSBDaGFybGVzIEJvemVtYW4KCSogdGVzdC9zY2hlbWFzL2hleGJpbmFyeV8qIHJlc3VsdC9zY2hlbWFzL2hleGJpbmFyeV8qOiBhbHNvIGFkZGVkCgkgIGhpcyB0ZXN0cyB0byB0aGUgcmVncmVzc2lvbiBzdWl0ZS4KCkZyaSBBdWcgIDggMTg6NDc6MzggSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB3aW4zMi9kZWZnZW4ueHNsLCB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IEJ1ZyAxMTkzNDMKCSAgKHdpdGggYXBvbG9naWVzIHRvIElnb3IpIC0gRW5oYW5jZWQgaGFuZGxpbmcgb2YgZG9jYiBhbmQKCSAgbmFub2h0dHAuCgpUaHUgQXVnICA3IDIxOjEzOjIyIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZW5jb2RpbmcuYzogZnVydGhlciBzbWFsbCBjaGFuZ2VzIGZvciB3YXJuaW5ncyB3aGVuCgkgIGNvbmZpZ3VyZWQgd2l0aCAtLXdpdGgtaWNvbnY9bm8KCldlZCBBdWcgIDYgMTI6MzI6MTEgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBlcnJvci5jIHRyaW9uYW4uW2NoXSB0ZXN0VGhyZWFkcy5jIHB5dGhvbi9nZW5lcmF0b3IucHk6CgkgIGZ1cnRoZXIgc21hbGwgY2hhbmdlcyB0byBlbG1pbmF0ZSBtb3N0IG9mIHRoZSByZW1haW5pbmcKCSAgd2FybmluZ3MuCgpUdWUgQXVnICA1IDIzOjUxOjIxIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZXJyb3IuYyBIVE1McGFyc2VyLmMgdGVzdEMxNE4uYyB0ZXN0SFRNTC5jIHRlc3RVUkkuYwoJICB4bWxjYXRhbG9nLmMgeG1sbWVtb3J5LmMgeG1scmVhZGVyLmMgeG1sc2NoZW1hc3R5cGVzLmMKCSAgcHl0aG9uL2xpYnhtbC5jIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oOiBzbWFsbCBjaGFuZ2VzCgkgIHRvIHN5bnRheCB0byBnZXQgcmlkIG9mIGNvbXBpbGVyIHdhcm5pbmdzLiAgTm8gY2hhbmdlcwoJICB0byBsb2dpYy4KCk1vbiBBdWcgIDQgMjI6NDA6NTQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL2h0bWwvKjogcmVidWlsdCB0aGUgQVBJIGFuZCBkb2NzLgoKTW9uIEF1ZyAgNCAyMTo0MDozNCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlZCBhIHNtYWxsIHByb2JsZW0gaW4gdGhlIHBhdGNoIGZvciAjMTE4NzYzCgkqIHJlc3VsdC9IVE1ML2RvYzMuaHRtKjogdGhpcyByZXZlcnRzIGJhY2sgdG8gdGhlIHByZXZpb3VzIHJlc3VsdAoKU3VuIEF1ZyAgMyAyMTo0MTo0OSBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvRkFRLmh0bWwgZG9jL3htbC5odG1sOiBhcHBsaWVkIGRvYyBwYXRjaCB0byB4bWwuaHRtbAoJICBhbmQgcmVidWlsdCwgYXBwYXJlbnRseSBzb21lIEMrKyB3cmFwcGVycyBhcmUgbm90IGF2YWlsYWJsZSwKCSAgYy5mLiBidWcgIzExODk0MwoKU3VuIEF1ZyAgMyAyMTozMDozMSBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGluZyBIVE1MIGF0dHJpYnV0ZSBzZXJpYWxpemF0aW9uIGJ1ZyAjMTE4NzYzCgkgIGFwcGx5aW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgcGF0Y2ggZnJvbSBCYWNlawoJKiByZXN1bHQvSFRNTC9kb2MzLmh0bSo6IHRoaXMgbW9kaWZpZXMgdGhlIG91dHB1dCBmcm9tIG9uZSB0ZXN0CgpTdW4gQXVnICAzIDIxOjAyOjMwIEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGFkZGVkIGEgbmV3IEFQSSB0byBzcGxpdCBhCgkgIFFOYW1lIHdpdGhvdXQgZ2VuZXJhdGluZyBhbnkgbWVtb3J5IGFsbG9jYXRpb24KCSogdmFsaWQuYzogZml4ZWQgYW5vdGhlciBwcm9ibGVtIHdpdGggbmFtZXNwYWNlcyBvbiBlbGVtZW50CgkgIGluIG1peGVkIGNvbnRlbnQgY2FzZQoJKiBweXRob24vdGVzdHMvcmVhZGVyMi5weTogdXBkYXRlZCB0aGUgdGVzdGNhc2Ugd2l0aCAKCSAgQmpvcm4gUmVlc2UgZml4IHRvIHJlYWRlciBmb3IgdW5zaWduaWZpY2FudCB3aGl0ZSBzcGFjZQoJKiBwYXJzZXIuYyBIVE1McGFyc2VyLmM6IGNsZWFudXAuCgpTdW4gQXVnICAzIDIwOjU1OjQwIEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogdHJ5aW5nIHRvIGZpeCAjMTE4NzU0IG9mIHBvc3NpYmxlIHJlY3Vyc2lvbiBpbiB0aGUKCSAgY2F0YWxvZ3MuIE5vdCBmYW50YXN0aWNhbGx5IGhhcHB5IGFib3V0IHRoZSBjdXJyZW50IGZpeCBzaW5jZQoJICBpdCdzIGxpa2VseSB0byBicmVhayB1bmRlciB2ZXJ5IHRocmVhZCBpbnRlbnNpdmUgY29uY3VycmVudAoJICBhY2Nlc3MgdG8gdGhlIGNhdGFsb2cuIEJldHRlciBzb2x1dGlvbiBtaWdodCB0byBrZWVwIHRoZSBkZXB0aAoJICBhbiBleHRyYSBhcmd1bWVudCB0byB0aGUgcmVzb2x1dGlvbiBmdW5jdGlvbnMuCgpTdW4gQXVnICAzIDE4OjU2OjU0IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeGVkIGJ1ZyAjMTE4NzEyIGFib3V0IG1peGVkIGNvbnRlbnQsIGFuZCBuYW1lc3BhY2VkCgkgIGVsZW1lbnQgbmFtZXMuCgkqIHRlc3QvdmFsaWQvbWl4ZWRfbnMueG1sIHJlc3VsdC92YWxpZC9taXhlZF9ucyo6IGFkZGVkIGEgY2hlY2sKCSAgaW4gdGhlIHJlZ3Jlc3Npb24gdGVzdHMKCkZyaSBBdWcgMSAyMzo1NToyMyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCglDb25pbnVpbmcgd29yayBvbiBidWcgMTE4NTU5CgkqIERPQ0JwYXJzZXIuYzogcmVtb3ZlZCAyIHVuc2VkIHZhcnMKCSogeG1scmVnZXhwLmM6IGNoYW5nZWQgc29tZSBudW1lcmljIGNvbnN0IHRvIHRoZWlyIGVudW0gc3ltYm9scwoJKiB4bWxyZWFkZXIuYzogY2hhbmdlZCBvbmUgdmFyIGRlZmluZSBmcm9tIGludCB0byBlbnVtCgkgIChhIGxpdHRsZSBtb3JlIHRvIGJlIGRvbmUsIGF3YWl0aW5nIGNvLW9yZGluYXRpb24pCgkqIHJlbGF4bmcuYzogZGVsZXRlZCBvbmUgdW51c2VkIHZhcgoJKiB4bWxsaW50LmM6IGRlbGV0ZWQgc29tZSB1bnVzZWQgdmFycywgY2hhbmdlZCBvbmUgYXJnCgkgIHZhbCBmcm9tIGludCB0byBlbnVtCgkqIHRlc3RIVE1MLmMsIHRlc3REb2Nib29rLmM6IGNoYW5nZWQgc29tZSBhcmcgdmFscyB0byBlbnVtIGNvbnN0CgkqIHhtbElPLmM6IGZpeGVkIHR5cG8gZnJvbSBsYXN0IG5pZ2h0IChzbWFsbCB3YXJuaW5nIG1zZykKClRodSBKdWwgMzEgMjI6NDQ6MzMgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJV29ya2luZyBvbiBidWcgMTE4NTU5CgkqIGVycm9yLmM6IGRlbGV0ZWQgdW51c2VkIHZhcmlhYmxlCgkqIHBhcnNlckludGVybmFscy5jOiBkZWxldGVkIHVubmVlZGVkICdjb25zdCcgcXVhbGlmaWVyCgkqIHBhcnNlci5jOiBjaGFuZ2VkIHZhcmlhYmxlIHR5cGUgZm9yIGVudW0gdGVtcCBzdG9yYWdlCgkqIHhtbElPLmM6IGNoYW5nZWQgZGVidWdnaW5nIHZhciB0byBiZSBpbnNpZGUgI2lmZGVmCgkqIHZhbGlkLmM6IHJlbW92ZWQgdW51c2VkIHZhcmlhYmxlCgkqIEhUTUxwYXJzZXIuYzogcmVtb3ZlZCBzb21lIHVubmVlZGVkICdjb25zdCcgcXVhbGlmaWVycwoJKiB4cGF0aC5jOiBhZGRlZCBzb21lIHR5cGUgY2FzdHMsIHJlbW92ZWQgc29tZSB1bnVzZWQgdmFycwoJKiB4aW5jbHVkZS5jOiBhZGRlZCBvbmUgdHlwZSBjYXN0CgkqIG5hbm9odHRwLmM6IHJlcG9zaXRpb25lZCBzb21lICNpZmRlZiB0byBhdm9pZCB1bnVzZWQgdmFyCgkqIG5hbm9mdHAuYzogcmVtb3ZlZCB1bnVzZWQgdmFyCgpXZWQgSnVsIDMwIDE0OjU3OjU1IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogYXBwbGllZCBhIHBhdGNoIGZyb20gV2lsbGlhbSBCcmFjayBhYm91dAoJICB0aGUgcHJvYmxlbSBvZiBwYXJzaW5nIHZlcnkgbGFyZ2UgSFRNTCBpbnN0YW5jZSB3aXRoIGNvbW1lbnRzCgkgIGFzIHJhaXNlZCBieSBOaWNrIEtldwoKV2VkIEp1bCAzMCAxMjoyOTozOCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogYXBwbHlpbmcgY2xlYW51cAoJICBwYXRjaCBmcm9tIEJqb3JuIFJlZXNlIGZvciB4bWxUZXh0UmVhZGVyTm9kZVR5cGUoKSBhbmQgCgkgIHNpZ25pZmljYW50IHdoaXRlc3BhY2UuIFRoZXJlIGlzIGFuIGVudW0gZm9yIG5vZGUgdHlwZQoJICB2YWx1ZXMgbm93LgoKV2VkIEp1bCAzMCAxMTowODoyMSBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiBhcHBseWluZyBwYXRjaCBmcm9tIFBldGVyIEphY29iaSB0byBhZGRlZCAKCSAgSVNPLTg4NTkteCBlbmNvZGluZyBzdXBwb3J0IHdoZW4gaWNvbnYgaXMgbm90IGF2YWlsYWJsZQoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluCgkgIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluOiBhZGRlZCB0aGUgZ2x1ZSBuZWVkZWQKCSAgYXQgdGhlIGNvbmZpZ3VyZSBsZXZlbCBhbmQgbWFkZSBpdCB0aGUgZGVmYXVsdCBmb3IgV2luZG93cwoKVHVlIEp1bCAyOSAxNjo0Mzo0OCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sMmNsYXNzLnR4dDoKCSAgcGF0Y2ggZnJvbSBKb2FjaGltIEJhdWNoICsgY2xlYW51cCBmb3IgUmVsYXggTkcgZXJyb3IgY2FsbGJhY2tzCgkgIGluIHB5dGhvbgoKVHVlIEp1bCAyOSAxMjo0NjowOCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmM6IGFwcGxpZWQgUGV0ZXIgSmFjb2JpIGVuY29kaW5nCgkgIGNsZWFudXAgcGF0Y2gsIGFuZCBhbHNvIGF2b2lkZWQgYSBwb3NzaWJsZSBtZW1vcnkgbGVhawoKVHVlIEp1bCAyOSAwOToyODowOSBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiBmaXggdGhlIHByZXZpb3VzIGNvbW1pdAoKVHVlIEp1bCAyOSAxMjoyODoxNyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgcHJvYmxlbSB3aXRoIGNvbW1lbnRzIHJlcG9ydGVkIGJ5IE5pY2sgS2V3CgkqIGVuY29kaW5nLmM6IGFkZGVkIHJvdXRpbmVzIHhtbFVURjhTaXplIGFuZCB4bWxVVEY4Q2hhcmNtcCBmb3IKCSAgc29tZSBmdXR1cmUgY2xlYW51cCBvZiBVVEY4IGhhbmRsaW5nCgpNb24gSnVsIDI4IDE2OjM5OjE0IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGFwcGxpZWQgYSBjaGFuZ2Ugc3VnZ2VzdGVkIGJ5IFNlYW4gR3JpZmZpbiBpbiBidWcKCSAgIzExODQ5NCBhYm91dCBhIG1lbW9yeSBsZWFrIGluIEVYU0xUCgpTdW4gSnVsIDI3IDE0OjMwOjU2IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZml4ZWQgYSBSZWxheC1ORyBjb21waWxhdGlvbi9zdHJlYW1pbmcgYnVnIGludHJvZHVjZWQKCSAgd2hlbiBmaXhpbmcgdGhlIHByZXZpb3VzIFJlbGF4LU5HIGJ1Z3MKCSogcmVzdWx0L3JlbGF4bmcvKjogVGhpcyBzbGlnaHRseSBjaGFuZ2VzIHRoZSBvdXRwdXQgbWVzc2FnZXMgb2YKCSAgc29tZSByZWdyZXNzaW9uIHRlc3RzLgoJKiBjb25maWd1cmUuaW46IGFkZGVkIHN1cHBvcnQgb2YgLXdpdGgtZmV4Y2VwdGlvbnMgZm9yIG5lc3RlZCBDKysKCSAgc3VwcG9ydC4KClRodSBKdWwgMjQgMTU6NDY6MDIgTURUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC9hcGEuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXBiLmh0bWwKCSogZG9jL3R1dG9yaWFsL2FwYy5odG1sCgkqIGRvYy90dXRvcmlhbC9hcGQuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXBlLmh0bWwKCSogZG9jL3R1dG9yaWFsL2FwZi5odG1sCgkqIGRvYy90dXRvcmlhbC9hcGcuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXBoLmh0bWwKCSogZG9jL3R1dG9yaWFsL2FyMDFzMDIuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXIwMXMwMy5odG1sCgkqIGRvYy90dXRvcmlhbC9hcjAxczA0Lmh0bWwKCSogZG9jL3R1dG9yaWFsL2FyMDFzMDUuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXIwMXMwNi5odG1sCgkqIGRvYy90dXRvcmlhbC9hcjAxczA3Lmh0bWwKCSogZG9jL3R1dG9yaWFsL2FyMDFzMDguaHRtbAoJKiBkb2MvdHV0b3JpYWwvaW5kZXguaHRtbAoJKiBkb2MvdHV0b3JpYWwvaXgwMS5odG1sCgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC5wZGYKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnhtbAoJdXBkYXRlIHR1dG9yaWFsIHdpdGggWFBhdGggZXhhbXBsZQoKVGh1IEp1bCAyNCAxNzowNzowNiBJU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYyBwYXJzZXIuYzogZml4aW5nIGEgYnVnIGFib3V0IGEgc3BlY2lhbCBjYXNlIG9mIG5hbWVzcGFjZQoJICBoYW5kbGluZywgdGhpcyBjbG9zZXMgYnVnICMxMTY4NDEKCldlZCBKdWwgMjMgMjA6NTI6MzYgSVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIHJlc3VsdC9yZWxheG5nLyo6IGNoZWNrZWQgYW5kIGZpeGVkIHRoZSBjb21waWxhdGlvbgoJICBvZiBSTkcgc2NoZW1hcywgZml4ZXMgYSBjb3VwbGUgb2YgYnVncyAjMTE3MDk3IGFuZCAjMTE3MDAxIC4KCSAgVGhpcyBzbGlnaHRseSBjaGFuZ2VzIHRoZSBvdXRwdXQgbWVzc2FnZXMgb2Ygc29tZSByZWdyZXNzaW9uIHRlc3RzLgoKV2VkIEp1bCAyMyAxNToxNTowOCBJU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogZml4ZWQgYW4gb3V0IG9mIGJvdW5kIGVycm9yICMxMTgwNTIgLCB0aGUgZ29vZAoJICBwYXJ0IGlmIHRoYXQgYmFzZTY0IGNvZGUgd2FzIG5vdCBpbiB1c2UgeWV0IC4uLgoKVHVlIEp1bCAyMiAxOTo0MjoxNSBNRFQgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGxpbnQuaHRtbAoJaW5jbHVkZSBodG1sIHZlcnNpb24gb2YgdGhlIHhtbGxpbnQgbWFuIHBhZ2UsIHNvIGFuCgl1cC10by1kYXRlIHZlcnNpb24gaXMgdmlzaWJsZSBvbiB0aGUgV2ViCgpNb24gSnVsIDIxIDIxOjUzOjQzIElTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmMgaW5jbHVkZS9saWJ4bWwveGluY2x1ZGUuaDogYWRkZWQgYSBuZXcgQVBJCgkgIHhtbFhJbmNsdWRlUHJvY2Vzc1RyZWUoKSB0byBwcm9jZXNzIFhJbmNsdWRlIG9ubHkgb24gYSBzdWJ0cmVlCgkgIHRoaXMgc2hvdWxkIGZpeCBidWcgIzExNTM4NQoKRnJpIEp1bCAxOCAxNzoxMTo0MiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIGluY2x1ZGUvbGlieG1sL3JlbGF4bmcuaDogYWRkaW5nIEdldCBpbnRlcmZhY2UgZm9yCgkgIHRoZSBlcnJvciBjYWxsYmFjayBhbmQgcGFyYW1ldGVycyBvZiBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uCgkgIGNvbnRleHRzCgkqIHhtbHJlYWRlci5jOiBwYXRjaCB0byBmaXggYnVnICMxMTc3MDIgYWJvdXQgaW5jb21wbGV0ZSBSZWFkKCkKCSAgb24gdGV4dCBub2Rlcy4KCldlZCBKdWwgMTYgMjM6MTU6NTMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBwYXRjaCBmcm9tIERvZGppIFNla2V0ZWxpIGFib3V0IFVURjE2IEJPTQoJICB3aGVuIHVzaW5nIHRoZSBwdXNoIFhNTCBwYXJzZXIuCgkqIHJlc3VsdC91dGYxNmJvbS54bWwgcmVzdWx0L25vZW50L3V0ZjE2Ym9tLnhtbCB0ZXN0L3V0ZjE2Ym9tLnhtbDoKCSAgYWRkZWQgdGhlIHRlc3QgdG8gdGhlIHJlZ3Jlc3Npb24gc3VpdGUuCgpUdWUgSnVsIDE1IDIyOjAzOjEzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmM6IGFkZCB4bWxUaHJEZWZNdXRleCA9IE5VTEwgaW4geG1sQ2xlYW51cEdsb2JhbHMoKSAKCSAgYXMgc3VnZ2VzdGVkIGJ5IFJvYiBSaWNoYXJkcwoKVHVlIEp1bCAxNSAxNTozMDo1NSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogRE9DQnBhcnNlci5jIEhUTUxwYXJzZXIuYyBlbnRpdGllcy5jIHBhcnNlci5jIHJlbGF4bmcuYyAKCSAgeG1sc2NoZW1hcy5jIHhwYXRoLmM6IHJlbW92ZWQgc29tZSB3YXJuaW5ncyBieSBjYXN0aW5nIHhtbENoYXIKCSAgdG8gdW5zaWduZWQgaW50IGFuZCBhIGNvdXBsZSBvZiBvdGhlcnMuCgpGcmkgSnVsIDExIDE2OjQ0OjIyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogZml4ZXMgYSBzZWdmYXVsdCBvbiBlbXB0eSBoZXhCaW5hcnkgc3RyaW5ncwoKVGh1IEp1bCAxMCAxNjowMjo0NyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmM6IGNsZWFudXAgcGF0Y2hlcyBmcm9tIFBldGVyIEJyZWl0ZW5sb2huZXIKClR1ZSBKdWwgIDggMTY6MDI6MTkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYyB0aHJlYWRzLmM6IGZpeGVzIHNvbWUgcHJvYmxlbSB3aGVuIGZyZWVpbmcgdW5pdGl0aWFsaXplZAoJICBtdXRleGVzCgpUdWUgSnVsICA4IDE0OjE1OjA3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYzogdGhlIG1vZHVsZXMgc2hvdWxkIG5vdCBpbXBvcnQgPGNvbmZpZy5oPgoJICBkaXJlY3RseSwgc29tZSBjbGVhbnVwcwoJKiB4bWxzY2hlbWFzLmM6IFBldGVyIFNvYmlzY2ggZm91bmQgYSBuYXN0eSBidWcgaW4gdGhlIFNjaGVtYXMKCSAgdmFsaWRhdGlvbiBjb2RlLgoKTW9uIEp1bCAgNyAxODowMDo1MSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvY29uZmlndXJlLmpzOiBKZXNzZSBQZWx0b24gcG9pbnRlZCBvdXQgYSBwcm9ibGVtIGluIHRoZQoJICBqYXZhc2NyaXB0IGNvZGUuCgpNb24gSnVsICA3IDE2OjM5OjMxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBORVdTIGRvYy8qOiByZWdlbmVyYXRlZAoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYzogbWlnaHQgZml4IGluY2x1ZGVzIHByb2JsZW1zIHdpdGggdGhlCgkgIElwdjYgc3VwcG9ydCBvbiBzb2xhcmlzCgkqIHRyZWUuYzogcGF0Y2ggZnJvbSBNYXJrdXMgS2VpbSBhYm91dCB4bWxIYXNOc1Byb3AoKSBvbiBhdHRyaWJ1dGVzCgkgIGRlZmluZWQgYXMgI0lNUExJRUQKClN1biBKdWwgIDYgMjM6MDk6MTMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MvKjogcHJlcGFyaW5nIHJlbGVhc2UgMi41LjgKCSogbmFub2h0dHAuYzogY2hhbmdlZCBzb21lIHByZXByb2Nlc3NvciBibG9jawoJKiB4bWxzY2hlbWFzdHlwZXMuYzogYXBwbGllZCBwYXRjaCBmcm9tIENoYXJsZXMgQm96ZW1hbiBhZGRpbmcKCSAgaGV4QmluYXJ5IHNjaGVtYSBkYXRhdHlwZSBhbmQgYWRkaW5nIHN1cHBvcnQgZm9yIHRvdGFsRGlnaXRzIGFuZAoJICBmcmFjdGlvbkRpZ2l0cyBmYWNldHMuCgpTdW4gSnVsICA2IDE5OjU2OjE4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jIHhwYXRoLmM6IGZpeGVkIDIgYnVncyBwb2ludGVkIGluICMxMTY0NDgKClN1biBKdWwgIDYgMTk6MzQ6MTcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IGZpeGVkIGJ1ZyAjMTE2MDk1IHJlbW92aW5nIHRoZSBlcnJvciBtZXNzYWdlIHdoZW4KCSAgcmVhcHBseWluZyBYSW5jbHVkZSB0byBhIGRvY3VtZW50LgoKU2F0IEp1bCAgNSAyMjo0MDoyMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogYXBwbGllZCBzbWFsbCBjaGFuZ2VzIHRvIHBvcnRhYmlsaXR5IGxheWVyIGZvciAKCSAgY29tcGlsYXRpb24gb24gREpHUFAgTXMtRE9TIGNvbXBpbGVyLgoKU2F0IEp1bCAgNSAyMjozMDoyNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgSFRNTHBhcnNlci5jOiB1c2UgdGhlIGNoYXJhY3RlcigpIFNBWCBjYWxsYmFjawoJICBpZiB0aGUgY2RhdGFCbG9jayBhaW4ndCBkZWZpbmVkLgoJKiB4cGF0aC5jOiBmaXggYnVnICMxMTUzNDkgYWxsb3dpbmcgY29tcGlsYXRpb24gd2hlbiBjb25maWd1cmVkCgkgIHdpdGggLS13aXRob3V0LXhwYXRoIHNpbmNlIHRoZSBTY2hlbWFzIGNvZGUgbmVlZHMgTkFOIGFuZCBjby4KClNhdCBKdWwgNSAwMDo1MTozMCBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCglGaXhlZCBwcm9ibGVtIHdpdGggbXVsdGktdGhyZWFkaW5nLCBzaG93biBieSB0aGUgdGVzdCBwcm9ncmFtCgl0ZXN0VGhyZWFkcy4gIEFmdGVyIGZpeCwgcmFuIG11dGlwbGUgdGVzdHMgb24gdmFyaW91cyBzcGVlZAoJbWFjaGluZXMgKHNpbmdsZSBhbmQgZHVhbCBwcm9jZXNzb3IgWDg2KSwgd2hpY2ggYWxsIHNlZW0gb2theS4KCgkqIGNhdGFsb2cuYzogYWRkZWQgbWlzc2luZyB4bWxSTXV0ZXhVbmxvY2sgaW4geG1sTG9hZENhdGFsb2cKCgkqIHRocmVhZHMuYzogYWRkZWQgbWlzc2luZyBpbml0aWFsaXNhdGlvbiBmb3IgY29uZGl0aW9uIHZhcmlhYmxlCgkgIGluIHhtbE5ld1JNdXRleC4KClNhdCBKdW4gMjEgMTY6MTA6MjQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCglBcHBseWluZyBJUHY2IHBhdGNoIGZyb20gQXJjaGFuYSBTaGFoIDxhcmNoYW5hLnNoYWhAd2lwcm8uY29tPgoJY2xvc2luZyBidWcgIzExNDgzNwoKCSogY29uZmlndXJlLmluOiBBZGRlZCBjaGVja3MgZm9yIElQdjYgc3VwcG9ydCBhbmQgZ2V0YWRkcmluZm8oKS4KCgkqIGFjY29uZmlnLmg6IERlZmluZWQgSEFWRV9HRVRBRERSSU5GTyBhbmQgU1VQUE9SVF9JUDYuCgoJKiBjb25maWcuaC5pbjogRGVmaW5lZCBIQVZFX0dFVEFERFJJTkZPIGFuZCBTVVBQT1JUX0lQNi4KCgkqIG5hbm9mdHAuYzogU3RydWN0dXJlIHhtbE5hbm9GVFBDdHh0IGNvbnRhaW5zIGVpdGhlciBzb2NrYWRkcl9zdG9yYWdlCgkgIGZpZWxkIG9yIHNvY2thZGRyX2luIGZpZWxkLCBkZXBlbmRpbmcgdXBvbiB0aGUgYXZhaWxhYmlsaXR5IG9mIElQdjYKCSAgc3VwcG9ydC4KCSAgaGF2ZV9pcHY2KCk6IEFkZGVkIHRvIGNoZWNrIGZvciBydW4tdGltZSBJUHY2IHN1cHBvcnQuCgkgICh4bWxOYW5vRlRQU2NhblVSTCksICh4bWxOYW5vRlRQVXBkYXRlVVJMKSwgKHhtbE5hbm9GVFBTY2FuUHJveHkpOgoJICBNb2RpZmllZCB0byBwYXJzZSBhIFVSSSB3aXRoIElQdjYgYWRkcmVzcyBnaXZlbiBpbiBbXS4KCSAgKHhtbE5hbm9GVFBDb25uZWN0KTogQ2hhbmdlZCB0byB1c2UgZ2V0YWRkcmluZm8gZm9yIGFkZHJlc3MKCSAgcmVzb2x1dGlvbiwgaWYgaXQgaXMgYXZhaWxhYmxlIG9uIHRoZSBzeXN0ZW0sIGFzIGdldGhvc3RieW5hbWUKCSAgZG9lcyBub3QgcmV0dXJuIElQdjYgYWRkcmVzc2VzIG9uIHNvbWUgcGxhdGZvcm1zLgoJICAoeG1sTmFub0ZUUEdldENvbm5lY3Rpb24pOiBNb2RpZmllZCB0eXBlIG9mIGRhdGFBZGRyIHZhcmlhYmxlIHRvCgkgIHNvY2thZGRyX3N0b3JhZ2Ugb3Igc29ja2FkZHJfaW4gZGVwZW5kaW5nIHVwb24gdGhlIElQdjYgc3VwcG9ydC4KCSAgU2VuZGluZyBFUFNWLCBFUFJUIG9yIFBBU1YsIFBPUlQgZGVwZW5kaW5nIHVwb24gdGhlIHR5cGUgb2YgYWRkcmVzcwoJICB3ZSBhcmUgZGVhbGluZyB3aXRoLgoKCSogbmFub2h0dHAuYzogKGhhdmVfaXB2Nik6IEFkZGVkIHRvIGNoZWNrIGZvciBydW4tdGltZSBJUHY2IHN1cHBvcnQuCgkgICh4bWxOYW5vSFRUUFNjYW5VUkwpLCAoeG1sTmFub0hUVFBTY2FuUHJveHkpOiBNb2RpZmllZCB0byBwYXJzZQoJICBhIFVSSSB3aXRoIElQdjYgYWRkcmVzcyBnaXZlbiBpbiBbXS4KCSAgKHhtbE5hbm9IVFRQQ29ubmVjdEhvc3QpOiBNb2RpZmllZCB0byB1c2UgZ2V0YWRkcmluZm8gaWYgaXQgaXMKCSAgYXZhaWxhYmxlIG9uIHRoZSBzeXN0ZW0uIEFsc28gSVB2NiBhZGRyZXNzZXMgd2lsbCBiZSByZXNvbHZlZCBieQoJICBnZXRob3N0YnluYW1lIG9ubHkgaWYgSVB2NiBydW4tdGltZSBzdXBwb3J0IGlzIGF2YWlsYWJsZS4KCSAgKHhtbE5hbm9IVFRQQ29ubmVjdEF0dGVtcHQpOiBNb2RpZmllZCB0byBkZWFsIHdpdGggSVB2NiBhZGRyZXNzLgoKU2F0IEp1biAxNCAxODo0Njo1MSBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qcyBpbmNsdWRlL3dpbjMyY29uZmlnLmggCgkgIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjogQXBwbGllZCB0aGUgcGF0Y2ggZm9yIEJDQgoJICBieSBFcmljIFp1cmNoZXIuCgpGcmkgSnVuIDEzIDE0OjI3OjE5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvTWFrZWZpbGUuYW0gZG9jL2h0bWwvKjogcmV2ZXJ0ZWQgYmFjayBwYXRjaCBmb3IgIzExMzUyMSwKCSAgZHVlIHRvICMxMTUxMDQgYW5kIHdoaWxlIGZpeGluZyAjMTE1MTAxIC4gSFRNTCBVUkxzIG11c3Qgbm90CgkgIGJlIHZlcnNpb24gZGVwZW5kYW50LgoKRnJpIEp1biAxMyAxMjowMzozMCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW50aXRpZXMuYzogZG8gbm90IGdlbmVyYXRlICZxdW90OyBmb3IgIiBvdXRzaWRlIG9mIGF0dHJpYnV0ZXMKCSogcmVzdWx0Ly8qOiB0aGlzIGNoYW5nZXMgdGhlIG91dHB1dCBvZiBzb21lIHRlc3RzCgpNb24gSnVuICA5IDEyOjI4OjU4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyB4bWxJTy5jOiB0cnlpbmcgdG8gZml4ICMxMTQyNzcgYWJvdXQgd2hlbiBmaWxlCgkgIHJlbWFwcGluZyBhbmQgZXNjYXBpbmcgc2hvdWxkIHJlYWxseSBiZSBhdHRlbXB0ZWQuCgpNb24gSnVuICA5IDExOjA2OjA5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvKjogYXBwbGllZCBhIHBhdGNoIGZyb20gR21hbiBmb3IgYnVpbGRpbmcgZG9jcwoJKiB2YWxpZC5jIHhtbGxpbnQuYyBpbmNsdWRlL2xpYnhtbC92YWxpZC5oOiBhcHBsaWVkIGEgcGF0Y2ggZnJvbQoJICBHYXJ5IFBlbm5pbmd0b24gdG8gcHJvdmlkZSBhbiBhbGxvY2F0b3IgZm9yIHhtbFZhbGlkQ3R4dAoJKiB4bWxyZWFkZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIEphY2VrIEtvbmllY3pueSBmaXhpbmcgYnVnCgkgICMxMTM1ODAgYWJvdXQgZGF0YSBub3QgYmVpbmcgcGFzc2VkIGltbWVkaWF0ZWx5LgoKVGh1IEp1biAgNSAxMTozMTowMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhcHBsaWVkIGEgY291cGxlIG9mIHBhdGNoZXMgZnJvbSBNYXJrIEl0emNvdml0egoJICB0byBoYW5kbGUgc2F2aW5nIGJhY2sgIlVURi0xNiIgZG9jdW1lbnRzLgoKTW9uIEp1biAgMiAyMTo1NjoxNSBNVlQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmMgeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaDogY29tbWl0aW5nCgkgIHNvbWUgd29yayBkb25lIHdoaWxlIGluIHRoZSBNYWxkaXZlcyAoaGVuY2UgdGhlIHRpbWV6b25lIG9uIHRoZQoJICBsYXB0b3AgISkKCSogcmVzdWx0L3NjaGVtYXMvbGVuZ3RoMyogdGVzdC9zY2hlbWFzL2RldGVyMF8qCgkgIHRlc3Qvc2NoZW1hcy9ncm91cDBfKjogc29tZSB0ZXN0cyBhZGRlZCB0b28KCk1vbiBKdW4gIDIgMTU6MzQ6MTcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmM6IHNtYWxsIGZpeAoJKiB4bWxJTy5jOiBmaXhlZCBhbiBlcnJvciBtZXNzYWdlCgpUdWUgTWF5IDIwIDE0OjIxOjIzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogZml4aW5nIFJlZCBIYXQgYnVnICM5MTAxMyB3aGVyZSB4bWxsaW50IHdhcwoJICBhY2NlcHRpbmcgYW4gaW1wcm9wZXIgVVRGOCBzZXF1ZW5jZQoKU2F0IE1heSAxNyAxMjo1MzoxMSBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHRocmVhZHMuYzogYXBwbGllZCB0aGUgcGF0Y2ggZnJvbSBTdOlwaGFuZSBCaWRvdWwgZm9yIGdldHRpbmcKCSAgcmlkIG9mIGV4dHJhIHRocmVhZHMgaW4gYSBkeW5hbWljIGxpYnJhcnkuCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogdGhyZWFkcyBkZWZhdWx0IHRvICduYXRpdmUnIG5vdy4KCkZyaSBNYXkgMTYgMTM6MTc6NTIgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogZml4aW5nICBidWcgIzExMjkwNDogaHRtbCBvdXRwdXQgbWV0aG9kIGVzY2FwZWQKCSAgcGx1cyBzaWduIGNoYXJhY3RlciBpbiBVUkkgYXR0cmlidXRlLgoKVGh1IE1heSAxNSAxODowNjoxOCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBidWlsZF9nbG9iLnB5IGdsb2JhbC5kYXRhIGdsb2JhbHMuYyBwYXJzZXIuYwoJICBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmg6IHBhdGNoIGZyb20gU3TpcGhhbmUgQmlkb3VsIGZvciBzZXR0aW5nCgkgIHVwIHRocmVhZHMgZ2xvYmFsIGRlZmF1bHRzLgoJKiBkb2MvbGlieG1sMi1hcGkueG1sOiB0aGlzIGV4dGVuZHMgdGhlIEFQSSB3aXRoIG5ldyBmdW5jdGlvbnMKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWFkZXIyLnB5CgkgIHB5dGhvbi90ZXN0cy90aHJlYWQyLnB5OiBpbnRlZ3JhdGVkIHRoZSBhc3NvY2lhdGVkIHRlc3RjYXNlIGFuZAoJICBmaXhlZCB0aGUgZXJyb3Igc3RyaW5nIHVzZWQgaW4gcmVhZGVyMgoKV2VkIE1heSAxNCAxNDo1Njo0NiBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gbGlieG1sLnNwZWMuaW4gcHl0aG9uL01ha2VmaWxlLmFtOiB0cnlpbmcKCSAgdG8gY29uY2lsaWF0ZSAtLXdpdGgtcHl0aG9uPSByZXF1aXJlbWVudHMgYW5kIFJQTSBidWlsZHMsCgkgIGEgUElUQSByZWFsbHkuLi4KClR1ZSBNYXkgMTMgMTg6MzA6MzQgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBvb3BzIGxhc3QgY29tbWl0IGludHJvZHVjZWQgYSBtZW1vcnkgbGVhay4KClR1ZSBNYXkgMTMgMTg6MTA6MzggRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jIGRvYy94bWxsaW50LnhtbDogYWRkZWQgLS1ub25ldCBvcHRpb24KCSogZG9jL01ha2VmaWxlLmFtOiBmaXhpbmcgIzExMjgwMyBieSBhZGRpbmcgLS1ub25ldCB3aGVuIGNhbGxpbmcKCSAgeHNsdHByb2Mgb3IgeG1sbGludAoJKiBkb2MveG1sbGludC54bWwgZG9jL3htbGxpbnQuMTogYWxzbyBhZGRlZCAtLXNjaGVtYSBkb2MgYW5kCgkgIHJlYnVpbHQKCSogSFRNTHBhcnNlci5jOiBjbGVhbmVkIHVwIHRoZSBIVE1MIHBhcnNlciBjb250ZXh0IGJ1aWxkIHdoZW4gCgkgIHVzaW5nIGFuIFVSTAoKVHVlIE1heSAxMyAxNjozNTowNCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbjogYWRkZWQgYSBjb21tZW50IGFib3V0IGJ1ZyAjMTEyOTAyIAoKTW9uIE1heSAxMiAyMTo1ODowMCBFRFQgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIG1pbm9yIGNsZWFudXAgb2YgY29uZmlndXJlICctLWhlbHAnIGRpc3BsYXkKCSogZXJyb3IuYzogZW5oYW5jZWQgeG1sUGFyc2VyUHJpbnRGaWxlQ29udGV4dCB0byBmaXggYnVnICMxMDk5NDIKCk1vbiBNYXkgMTIgMTc6NTM6MzAgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBQSSBub2RlcyBpbiBleHRlcm5hbCBzdWJzZXQgd2VyZSBub3QgZnJlZWQgOi1cCgkgIGZpeGVzIGJ1ZyAjMTEyODQyCgpNb24gTWF5IDEyIDExOjIzOjI3IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYWRkZWQgLS1zY2hlbWEgb3B0aW9uIHRvIHJ1biBXWFMgc2NoZW1hIHZhbGlkYXRpb24KCSogeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaDoKCSAgdHJpZWQgdG8gaW1wcm92ZSBlcnJvciByZXBvcnRpbmcgaW4gdGhlIFNjaGVtYSBjb2RlLCBzb21lIGNsZWFudXAKCSAgdG9vLgoKU3VuIE1heSAxMSAxNjoxMzoyMCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IGZpeGVkIHNvbWUgcHJvYmxlbXMgaW4gdGhlIGhhbmRsaW5nIG9mIGVycm9ycywKCSAgYW5kIGF0dHJpYnV0ZXMgYWRkcmVzc2VkIGJ5IHJlZmVyZW5jZXMuCgkqIHRlc3Qvc2NoZW1hcy8qIHJlc3VsdC9zY2hlbWFzLyo6IGRyb3BwZWQgdGhlIHZlcmJvc2l0eSBsZXZlbAoJICBhbmQgYWRkZWQgYSBjb3VwbGUgb2YgbmV3IHRlc3RzCgpTYXQgTWF5IDEwIDE2OjAxOjIxIEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogU3TpcGhhbmUgQmlkb3VsIGZvdW5kIGFuIG9mZiBieSBvbmUgYWRkcmVzc2luZwoJICBlcnJvciBvbiB0aGUgZXJyb3IgaGFuZGxpbmcuCgpGcmkgTWF5ICA5IDE5OjA4OjIwIEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiB0cnlpbmcgdG8gZml4ICMxMTI2NzMKCkZyaSBNYXkgIDkgMTg6MTQ6MTYgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogRE9DQnBhcnNlci5jIGNhdGFsb2cuYyBwYXJzZXIuYyByZWxheG5nLmM6IHJlbW92ZWQgbXVsdGlwbGUKCSAgd2FybmluZywgdGhpcyBmaXhlZCBhIGJ1ZyBhbmQgc2hvdWxkIGNsb3NlICMxMTE1NzQKCkZyaSBNYXkgIDkgMTU6MzQ6MzIgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBmaXhpbmcgYnVnICMxMDQwODEgd2l0aCB4czphbGwgd2l0aCBhbiBlbGVtZW50CgkgIGhvbGRpbmcgbWluT2NjdXJzPSIwIgoJKiB0ZXN0L3NjaGVtYXMvYWxsXyogcmVzdWx0L3NjaGVtYXMvYWxsXyo6IGFkZGVkIHNvbWUgcmVncmVzc2lvbgoJICB0ZXN0cyBmb3IgdGhhdCBidWcKCSogeG1sbGludC5jIHhtbHJlYWRlci5jOiBwYXRjaGVzIGZyb20gSm9lcmcgU2NobWl0ei1MaW5uZXdlYmVyIGFuZAoJICBHYXJyeSBQZW5uaW5ndG9uIHRvIGNvbXBpbGUgd2l0aG91dCBzY2hlbWFzIHN1cHBvcnQuCgpUaHUgTWF5ICAxIDEwOjAyOjM1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGVkIGEgcHJvYmxlbSB3aXRoIHhtbFVubGlua05vZGUoKSBmb3IgRFREcy4KCldlZCBBcHIgMzAgMTQ6MTY6MDggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbDItY29uZmlnLmluOiB0cnkgdG8gZml4IFJlZCBoYXQgYnVnICM4OTk1NywgZG8gbm90CgkgIG91dHB1dCAtTC91c3IvbGliNjQKCSogeG1scmVhZGVyLmM6IGZpeGVkIGEgdHlwbyBpbiBhIGNvbW1lbnQKClR1ZSBBcHIgMjkgMDc6MzI6MDIgTURUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLmVudD4KCgkqIGRvYy90dXRvcmlhbC9hcGguaHRtbCwgaXgwMS5odG1sCglmb3Jnb3QgdG8gY3ZzIGFkZCB0aGUgbmV3IGZpbGVzLiBUaGFua3MgdG8gUm9sYW5kIHZhbiBMYWFyCglmb3IgcG9pbnRpbmcgdGhpcyBvdXQKClR1ZSBBcHIgMjkgMTQ6MzY6NDkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYyBkb2MvbGlieG1sMi1hcGkueG1sOiBmaXhpbmcgYSBmdW5jdGlvbiBjb21tZW50CgkqIGRvYy9NYWtlZmlsZS5hbSBkb2MvYXBpYnVpbGQucHkgZG9jL2dub21lLXhtbC5zZ21sOiBzd2l0Y2hpbmcKCSAgdG8gdGhlIFhNTC9YU0xUIGRvYyBnZW5lcmF0aW9uIGNsb3NpbmcgIzExMTc5OQoJKiBkb2MvaHRtbC8qOiBjb21wbGV0ZSB1cGRhdGUgb2YgdGhlIEhUTUwgcmVzdWx0cwoKTW9uIEFwciAyOCAxNDo1MTo0MSBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL2RlZmdlbi54c2w6IGZpeGVkIHRoZSBjb25kaXRpb25hbCBmb3IgdW5pY29kZSBtYXAsCgkgIHJlbW92ZWQgaGFyZGNvZGVkIHNjaGVtYSBlbnRyaWVzCgpNb24gQXByIDI4IDAyOjE5OjAwIENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvZGVmZ2VuLnhzbDogbmV3IGZpbGUsIHN0eWxlc2hlZXQgZm9yIGdlbmVyYXRpbmcgCgkgIHdpbjMyL2xpYnhtbDIuZGVmLnNyYyBmcm9tIGRvYy9saWJ4bWwyLWFwaS54bWwKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBpcyBhdXRvZ2VuZXJhdGVkIGZyb20gbm93IG9uLCBjaGFuZ2VzCgkgIHRvIHRoaXMgZmlsZSB3aWxsIG5vdCBhcHBlYXIgaGVyZSBhbnltb3JlCgpNb24gQXByIDI4IDAwOjEyOjExIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9jb25maWd1cmUuanMgcHl0aG9uL3NldHVwLnB5LmluOiBhcHBsaWVkIHBhdGNoCgkgIGZyb20gU3TpcGhhbmUgQmlkb3VsIGZvciB0aGUgUHl0aG9uIGJpbmRpbmdzIG9uIHRoZSBuZXcKCSAgcmVsZWFzZS4KClN1biBBcHIgMjcgMTc6NTY6MjEgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBpbmNsdWRlZCBsaWJ4bWwvdXJpLmggZm9yIHhtbENhbm9uaWNQYXRoCgkgIGRlY2xhcmF0aW9uCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogdGhyZWFkLWVuYWJsZWQgYnVpbGQgaXMgbm93IGRlZmF1bHQKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBhZGRlZCBtb3JlIGV4cG9ydHMKClN1biBBcHIgMjcgMDA6MjM6MDUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1MgZG9jLyoueHNsIGRvYy8qLmh0bWw6IHVwZGF0ZWQgdGhlIHdlYiBzaXRlIHNlcGFyYXRlZAoJICBkZXZlbG9wZXJzIGZyb20gY29tbW9uIHBhZ2VzLCBtYWRlIHRoZSB0cmFuc2l0aW9uIHRvIFhIVE1MMSwKCSAgYWRkZWQgdmFsaWRpdHkgY2hlY2tpbmcgdG8gdGhlIG1ha2VmaWxlIHJ1bGVzLgoKU2F0IEFwciAyNiAyMzoxNzo1MSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeCBmb3IgeG1sSU9QYXJzZURURCBzYW1lIGFzIHByZXZpb3VzIGFuZCByZXBvcnRlZAoJICBieSBQZXRyIFBhamFzCgpTYXQgQXByIDI2IDE1OjI2OjA0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYXBwbGllZCBmaXggdG8geG1sU0FYUGFyc2VEVEQgZnJvbSBNYWxjb2xtIFRyZWRpbm5pY2sKCSAgY2xvc2luZyAjMTExNjM4CgpTYXQgQXByIDI2IDE0OjAwOjU4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBmaXhlZCBhIHByb2JsZW0gaW4gdGhlIGdlbmVyYXRvciB3aGVyZQoJICB0aGUgd2F5IGZ1bmN0aW9ucyBhcmUgcmVtYXBwZWQgYXMgbWV0aG9kcyBvbiBjbGFzc2VzIHdhcwoJICBub3Qgc3ltZXRyaWMgYW5kIGRlcGVuZGFudCBvbiBweXRob24gaW50ZXJuYWwgaGFzaCBvcmRlciwKCSAgYXMgcmVwb3J0ZWQgYnkgU3TpcGhhbmUgQmlkb3VsCgpGcmkgQXByIDI1IDIxOjUyOjMzIE1EVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvdHV0b3JpYWw6Cgl4bWx0dXRvcmlhbC54bWwKCXhtbHR1dG9yaWFsLnBkZgoJKi5odG1sCglhZGQgYXBwZW5kaXggb24gZ2VuZXJhdGluZyBjb21waWxlciBmbGFncywgbW9yZSBpbmRleGluZwoKU2F0IEFwciAyNiAwMToxMDo0OCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJpb2RlZi5oIHZtcy9idWlsZF9saWJ4bWwuY29tOiBhcHBsaWVkIHBhdGNoIGZyb20gQ3JhaWcgQS4gQmVycnkKCSAgdG8gZ2V0IGxpYnhtbC0yLjUuNyB0byBjb21waWxlIG9uIE9wZW5WTVMKCkZyaSBBcHIgMjUgMTg6NDI6MzUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhpbmcgYW4geG1sUGFyc2VEVEQgYnVnIHJhaXNlZCBieSBQZXRyIFBhamFzCgpGcmkgQXByIDI1IDE1OjIwOjI5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvTWFrZWZpbGUuYW0gZG9jL3htbGNhdGFsb2cuMSBkb2MveG1sY2F0YWxvZ19tYW4ueG1sCgkgIGRvYy94bWxsaW50LjEgZG9jL3htbGxpbnQueG1sOiBhdXRvbWF0ZWQgdGhlIGdlbmVyYXRpb24gb2YgdGhlCgkgIG1hbiBwYWdlIGJhc2VkIG9uIHhzbHRwcm9jIGFuZCBhIHN0eWxlc2hlZXQgUEkgaW4gdGhlIFhNTC4KCkZyaSBBcHIgMjUgMTI6Mzc6MzMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy94bWxsaW50Lio6IHRyeWluZyB0byBmaXggIzExMDU0MSB3aGVyZSAmbmJzcDsgZ2VuZXJhdGVkCgkgIGNoYXJhY3RlciBwcmV2ZW50aW5nIHJlbmRlcmluZyBieSB0aGUgbWFuIGNvbW1hbmQuCgpGcmkgQXByIDI1IDAxOjA5OjIzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBORVdTIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIHJlbGVhc2UgMi41LjcKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKCSogZG9jL2FwaWJ1aWxkLnB5OiBmaXhlZCB0aGUgc2NyaXB0CgpUaHUgQXByIDI0IDE5OjExOjEyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBkb2MvYXBpYnVpbGQucHk6IG1ha2Ugc3VyZSB0aGUgT09NIGNvZGUgZG9uJ3QKCSAgZ2V0IGluIHRoZSB3YXkgb2YgdGhlIGJ1aWxkcwoJKiBkb2MvbGlieG1sMi1hcGkueG1sIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBhdXRvbWF0aWMgdXBkYXRlCgpUaHUgQXByIDI0IDE4OjAxOjQ2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSB0ZXN0T09NLmMgdGVzdE9PTWxpYi5bY2hdIDogaW50ZWdyYXRlZCB0aGUgT3V0IE9mCgkgIE1lbW9yeSB0ZXN0IGZyb20gSGF2b2MgUGVubmluZ3RvbiAjMTA5MzY4CgkqIFNBWC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRyZWUuYyB1cmkuYyB2YWxpZC5jCgkgIHhtbG1lbW9yeS5jIHhtbHJlYWRlci5jIHhtbHJlZ2V4cC5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaAoJICBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogYSBsb3Qgb2YgbWVtb3J5IGFsbG9jYXRpb24gY2xlYW51cHMKCSAgYmFzZWQgb24gdGhlIHJlc3VsdHMgb2YgdGhlIE9PTSB0ZXN0aW5nCgkqIGNoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZTIucHk6IHNlZW1zIEkgZm9yZ290IHRvIGNvbW1pdCB0aGUKCSAgc2NyaXB0LgoKV2VkIEFwciAyMyAxNzoxNjo0MSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IHRyaXZpYWwgZml4IGZvciAxMDk3NzQgcmVtb3ZpbmcgYSB3YXJuaW5nCgpXZWQgQXByIDIzIDE1OjQ5OjMyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBET0NCcGFyc2VyLmMgU0FYLmMgY2F0YWxvZy5jIGRlYnVnWE1MLmMgcGFyc2VyLmM6IHRyeSB0byBmaW5kCgkgIG1vcmUgcGxhY2VzIHdoZXJlIHhtbENhbm9uaWNQYXRoKCkgbXVzdCBiZSB1c2VkIHRvIGNvbnZlcnQKCSAgZmlsZW5hbWVzIHRvIFVSTHMsIHRyeWluZyB0byBmaXggIzExMTA4OAoKV2VkIEFwciAyMyAwOTozNToxMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHk6IGFwcGxpZWQgcGF0Y2ggZnJvbSAKCSAgQnJlbnQgTSBIZW5kcmlja3MgYWRkaW5nIGJpbmRpbmcgZm9yIHhtbENhdGFsb2dBZGRMb2NhbAoKVHVlIEFwciAyMiAxNToxODowMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiB0cmllZCB0byBmaXggIzk4ODc5IGFnYWluIGluIGEgbW9yZSBzb2xpZAoJICB3YXkuCgpUdWUgQXByIDIyIDEzOjU4OjQzIENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBhZGRlZCBtb3JlIGV4cG9ydHMgZnJvbSB0aGUgcmVsYXhuZyBhbmQKCSAgeG1scmVhZGVyIGNsYW4KClR1ZSBBcHIgMjIgMTA6MzU6MTMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jIHRlc3QvdmFsaWQvbnMqIHRlc3QvcmVzdWx0L25zKjogYXBwbGllZCB0aGUgcGF0Y2gKCSAgcHJvdmlkZWQgYnkgQnJlbnQgSGVuZHJpY2tzIGZpeGluZyAjMTA1OTkyIGFuZCBpbnRlZ3JhdGVkIHRoZQoJICBleGFtcGxlcyBpbiB0aGUgdGVzdHN1aXRlLgoKVHVlIEFwciAyMiAwMTowNjowOSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogVE9ETzogdXBkYXRlZCBhIGJpdAoJKiBjb25maWd1cmUuaW46IGZpeGVkIHRoZSBjb21tZW50LCB0aHJlYWRzIG5vdyBkZWZhdWx0IHRvIG9uCgkqIHBhcnNlckludGVybmFscy5jOiBmaXhlZCBhbiBlcnJvbmVvdXMgeG1sTWFsbG9jQXRvbWljKCkgY2FsbAoKTW9uIEFwciAyMSAyMzozMzozOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jIGxpYnhtbC5oIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRyZWUuYyB4bWxsaW50LmMKCSAgeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IGEgbG90IG9mIHBlcmZvcm1hbmNlIHdvcmsKCSAgZXNwZWNpYWxseSB0aGUgc3BlZWQgb2Ygc3RyZWFtaW5nIHRocm91Z2ggdGhlIHJlYWRlciBhbmQgcHVzaAoJICBpbnRlcmZhY2UuIFNvbWUgdGhyZWFkIHJlbGF0ZWQgb3B0aW1pemF0aW9ucy4gTmVhcmx5IGRvdWJsZWQgdGhlCgkgIHNwZWVkIG9mIHBhcnNpbmcgdGhyb3VnaCB0aGUgcmVhZGVyLgoKU3VuIEFwciAyMCAxMDozNjowNSBNRFQgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGxpbnQueG1sCgkqIGRvYy94bWxsaW50LjEKCXVwZGF0ZSBtYW4gcGFnZSB0byBleHBsYWluIHVzZSBvZiAtLXN0cmVhbQoKU2F0IEFwciAxOSAwMjowMzoyNCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogRE9DQnBhcnNlci5jIEhUTUxwYXJzZXIuYyBjMTRuLmMgY2F0YWxvZy5jIGVuY29kaW5nLmMgZ2xvYmFscy5jCgkgIG5hbm9odHRwLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgcmVsYXhuZy5jIHRyZWUuYyB1cmkuYwoJICB4bWxtZW1vcnkuYyB4bWxyZWFkZXIuYyB4bWxyZWdleHAuYyB4cGF0aC5jIHhwb2ludGVyLmMKCSAgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oOiBhZGRlZAoJICB4bWxNYWxsb2NBdG9taWMoKSB0byBiZSB1c2VkIHdoZW4gYWxsb2NhdGluZyBibG9ja3Mgd2hpY2gKCSAgZG8gbm90IGNvbnRhaW5zIHBvaW50ZXJzLCBhZGQgeG1sR2NNZW1TZXR1cCgpIGFuZCB4bWxHY01lbUdldCgpCgkgIHRvIGFsbG93IHJlZ2lzdGVyaW5nIHRoZSBmdWxsIHNldCBvZiBmdW5jdGlvbnMgbmVlZGVkIGJ5CgkgIGEgZ2FyYmFnZSBjb2xsZWN0aW5nIGFsbG9jYXRvciBsaWtlIGxpYmdjLCByZWYgIzEwOTk0NAoKRnJpIEFwciAxOCAxNjozNzo0MSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBzd2l0Y2hlZCB0byBoYXZlIHRocmVhZCBzdXBwb3J0IGVuYWJsZWQgYnkgZGVmYXVsdCwKCSAgZGlkbid0IGdvdCB0cm91YmxlcyB3aXRoIEFCSSBjb21wYXRpYmlsaXR5IG9uIExpbnV4LCBob3BlIGl0CgkgIHdvbid0IGJyZWFrIG9uIHN0cmFuZ2UgT1NlcywgaWYgeWVzLCByZXBvcnQgdGhlIHN5c3RlbSBJRAoJKiBkb2MvbGlieG1sMi1hcGkueG1sOiBqdXN0IHJlYnVpbHQgdGhlIEFQSQoKRnJpIEFwciAxOCAxNDozMToxNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggcGFyc2VyLmMgeG1sSU8uYyBET0NCcGFyc2VyLmM6IAoJICBhZGRlZCBzdXBwb3J0IGZvciBsYXJnZSBmaWxlLCB0ZXN0ZWQgd2l0aCBhIDMrR0IgaW5zdGFuY2UsCgkgIGFuZCBzb21lIGNsZWFudXAuCgkqIGNhdGFsb2cuYzogYWRkZWQgYSBUT0RPCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBzb21lICJtYWtlIHRlc3RzIiBjb21tZW50cwoKVGh1IEFwciAxNyAxNDo1MTo1NyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBzb21lIGNsZWFudXBzCgkqIGRvYy94bWxyZWFkZXIuaHRtbDogZXh0ZW5kZWQgdGhlIGRvY3VtZW50IHRvIGNvdmVyIFJlbGF4TkcgYW5kCgkgIHRyZWUgb3BlcmF0aW9ucwoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3JlYWRlcls0Nl0ucHk6IGFkZGVkIHNvbWUKCSAgeG1sUmVhZGVyIGV4YW1wbGUvcmVncmVzc2lvbiB0ZXN0cwoJKiByZXN1bHQvcmVsYXhuZy90dXRvciouZXJyOiB1cGRhdGVkIHRoZSBvdXRwdXQgb2YgYSBudW1iZXIgb2YgdGVzdHMKClRodSBBcHIgMTcgMTE6MzU6MzcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogdmFsZ3JpbmQgcG9pbnRlZCBvdXQgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBlcnJvci4KClRodSBBcHIgMTcgMTE6MDY6MjggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3JlbGF4bmcuaCByZWxheG5nLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmgKCSAgeG1scmVhZGVyLmM6IGF1Z25lbXRpbmcgdGhlIEFQSXMsIGNsZWFudXBzLgoJKiBwYXJzZXIuYzogY2xlYW51cCBidWcgIzExMTAwNQoJKiB4bWxJTy5jOiBhZGRlZCBzb21lIG1pc3NpbmcgY29tbWVudHMKCldlZCBBcHIgMTYgMTc6NDY6NTAgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyB4bWxsaW50LmM6IG1vcmUgd29yayBvbiBSZWxheE5HIHN0cmVhbWluZyB2YWxpZGF0aW9uCgkgIHRyeWluZyB0byBpbXByb3ZlIHRoZSBzdWJzZXQgY29tcGlsZWQsIGFuZCBtb3JlIHRlc3RpbmcuCgkqIGRvYy9kb3dubG9hZHMuaHRtbCBkb2MveG1sLmh0bWwgZG9jL3htbG1lbS5odG1sOiBzb21lIHVwZGF0ZXMgb24gdGhlCgkgIGRvY3VtZW50YXRpb24KCSogdGVzdC9yZWxheG5nL3R1dG9yMTFfMV8zLnhtbDogZml4ZXMgdGhlIERURCBwYXRoCgkqIHJlc3VsdC9yZWxheG5nLyouZXJyOiBmaXggc29tZSBvZiB0aGUgb3V0cHV0cwoKV2VkIEFwciAxNiAwMToyODoxNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIHhtbHJlYWRlci5jIHhtbGxpbnQuYyBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmg6IGltcGxlbWVudGVkIHN0cmVhbWluZyBvZgoJICBSZWxheE5HICh3aGVuIHBvc3NpYmxlKSBvbiB0b3Agb2YgdGhlIHhtbFJlYWRlciBpbnRlcmZhY2UsCgkgIHByb3ZpZGVkIGl0IGFzIHhtbGxpbnQgLS1zdHJlYW0gLS1yZWxheG5nIC5ybmcgLnhtbAoJICBUaGlzIHNlZW1zIHRvIG1vc3RseSB3b3JrLgoJKiBNYWtlZmlsZS5hbTogdXBkYXRlZCB0byB0ZXN0IFJlbGF4Tkcgc3RyZWFtaW5nCgpNb24gQXByIDE0IDE4OjA4OjMzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmMgaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oOiBpbnRlZ3JhdGVkIHRoZSByZWdleHAKCSAgYmFzZWQgdmFsaWRpdHkgY2hlY2tpbmcgb2YgZnJhZ21lbnRzIG9mIHRoZSBkb2N1bWVudCBmb3IKCSAgd2hpY2ggdGhlIFJORyBjYW4gYmUgY29tcGlsZWQgdG8gcmVnZXhwcy4gV29ya3Mgb24gYWxsIHJlZ3Jlc3Npb24KCSAgdGVzdHMsIG9ubHkgZml4IG5lZWRlZCBpcyByZWxhdGVkIHRvIGVycm9yIG1lc3NhZ2VzLgoKU3VuIEFwciAxMyAyMTo1MTowMCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIHhtbHJlZ2V4cC5jIGluY2x1ZGUvbGlieG1sL3htbGF1dG9tYXRhLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1scmVnZXhwLmg6IFN0YXJ0aW5nIHdvcmsgcHJlY29tcGlsaW5nCgkgIHBhcnRzIG9mIFJlbGF4Tkcgc2NoZW1hcy4gTm90IHBsdWdnZWQgb250byB2YWxpZGl0eSBjaGVja2luZwoJICB5ZXQsIGp1c3QgdGhlIHJlZ2V4cCBidWlsZGluZyBwYXJ0LiBOZWVkZWQgdG8gZXh0ZW5kIHNvbWUKCSAgb2YgdGhlIGF1dG9tYXRhIGFuZCByZWdleHAgQVBJcy4KCkZyaSBBcHIgMTEgMjE6MzY6MjEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYyB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogbWFrZSBzdXJlCgkgIHhtbGxpbnQgLS1zdHJlYW0gYW5kIHhtbGxpbnQgLS1zdHJlYW0gLS12YWxpZCByZXR1cm5zIGVycm9ycwoJICBjb2RlIGFwcHJvcHJpYXRlbHkKCkZyaSBBcHIgMTEgMTA6NTk6MjQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiBBZGRlZCB0aGUgRXhwYW5kKCkKCSAgYW5kIE5leHQoKSBvcGVyYXRpb24gdG8gd29yayBvbiBzdWJ0cmVlcyB3aXRoaW4gdGhlIHJlYWRlcgoJICBmcmFtZXdvcmsuCgkqIGRvYy9saWJ4bWwyLWFwaS54bWwgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IHJlc3VsdGluZyB1cGRhdGVzCgkqIHB5dGhvbi90ZXN0cy9yZWFkZXI1LnB5OiBhZGRlZCBhbiBleGFtcGxlIGZvciB0aG9zZSBuZXcKCSAgZnVuY3Rpb25zIG9mIHRoZSByZWFkZXIuCgpUaHUgQXByIDEwIDIzOjM4OjEzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jOiBwYXRjaCBmcm9tIFZhc2lseSBUY2hla2Fsa2luIHRvIGZpeCAjMTA5ODY1CgpUaHUgQXByIDEwIDE1OjMyOjQ0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogZml4aW5nIEhhc1ZhbHVlIGZvciBuYW1lc3BhY2UgYXMgcmFpc2VkIGJ5IAoJICBEZW55cyBEdWNoaWVyCgpXZWQgQXByICA5IDE0OjA3OjE4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvSFRNTHBhcnNlci5oOiAgZXhwb3J0ZWQKCSAgaHRtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQoKSBpdCB3YXMgc3RhdGljCgpXZWQgQXByICA5IDEzOjIxOjQ4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hcy5oOgoJICB1cGRhdGUgZnJvbSBDaGFybGVzIEJvemVtYW4gZm9yIGRhdGUgYW5kIGR1cmF0aW9uIHR5cGVzCgkqIHRlc3Qvc2NoZW1hcy9kYXRlXzAuKiB0ZXN0L3NjaGVtYXMvZHVyXzAuKgoJICByZXN1bHQvc2NoZW1hcy9kYXRlXzAuKiByZXN1bHQvc2NoZW1hcy9kdXJfMC4qOiB1cGRhdGVkIHRvbwoKTW9uIEFwciAgNyAxMjoxOToyNiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIHZhbGlkLmMgeHBhdGguYyBpbmNsdWRlL2xpYnhtbC90cmVlLmggaW5jbHVkZS9saWJ4bWwvdmFsaWQuaDoKCSAgZml4aW5nIGJ1ZyAjMTA3MTI5LCByZW1vdmluZyBleGNlc3NpdmUgYWxsb2NhdGlvbiBhbmQgY2FsbHMKCSAgdG8gKnByaW50ZiBpbiB0aGUgY29kZSB0byBidWlsZCBRTmFtZSBzdHJpbmdzLgoKU2F0IEFwciAgNSAxMTo0MTozNiBDRVNUIDIwMDMgSWdvZSBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogZml4ZWQgY29uZGl0aW9uYWwgZXhwb3J0cywgcmVwb3J0ZWQgYnkKCSAgTHVrZSBNdXJyYXkuCgpGcmkgQXByICA0IDE4OjA4OjAwIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBwb3NzaWJsZSBwcm9ibGVtIHdpdGggeG1sUmVjb3Zlck1lbW9yeSgpCgpUaHUgQXByICAzIDE3OjI0OjQ0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmlvLmMgdHJpby5oIHRyaW9kZWYuaCB0cmlvbmFuLmMgdHJpb25hbi5oIHRyaW9wLmggdHJpb3N0ci5jCgkgIHRyaW9zdHIuaDogQmpvcm4gc2VudCBhbiB1cGRhdGUgZm9yIHRoZSBUUklPIHBvcnRhYmlsaXR5IGxheWVyLgoKVHVlIEFwciAgMSAyMTo1NzoyNiBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogZXhwb3J0ZWQgbmV3IGZ1bmN0aW9ucwoKVHVlIEFwciAgMSAxMzowOTo0NiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIE5FV1M6IHByZXBhcmluZyByZWxlYXNlIDIuNS42CgkqIGRvYy8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgpUdWUgQXByICAxIDExOjUyOjE1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogZml4ZWQgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHBvaW50ZWQgYnkgdmFsZ3JpbmQKCSAgb24gQzE0TnRlc3RzCgpUdWUgQXByICAxIDAwOjEyOjI4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IG9uZSBtb3JlIGZpeHVwIG9mIGVycm9yIG1lc3NhZ2UgcmVwb3J0aW5nCgpNb24gTWFyIDMxIDE4OjM2OjMyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IG1vcmUgd29yayBvbiBidWcgIzEwOTIyNSwgYW5kIGZpeGVkIGFuIHVuaW5pdGlhbGl6ZWQKCSAgdmFyaWFibGUgcG9pbnRlZCBvdXQgYnkgdmFsZ3JpbmQKCk1vbiBNYXIgMzEgMTg6MDU6MjIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogdHJ5IHRvIHdvcmsgb24gYnVnICMxMDkyMjUgYW5kIHByb3ZpZGUgYmV0dGVyCgkgIGVycm9yIHJlcG9ydHMuCgkqIHJlc3VsdC9yZWxheG5nLyogOiB0aGlzIGNoYW5nZSB0aGUgb3V0cHV0IG9mIGEgbnVtYmVyIG9mIHRlc3RzCgkqIHhpbmNsdWRlLmM6IGZpeGluZyB0aGUgcGFyc2VkIGVudGl0eSByZWRlZmluaXRpb24gcHJvYmxlbQoJICByYWlzZWQgb24gdGhlIGxpc3QuCgkqIHRlc3Qvc2NoZW1hcy9kYXRlXzAueHNkOiB1cGRhdGVkIHRoZSBkYXRlIHRlc3QgYy5mLiBFMi0xMgoKTW9uIE1hciAzMSAxMzoxOTowNCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGZpeGVkIGRhdGUgY29tcGFyaXNvbiB0byBoYW5kbGUgdGhlIHR6bwoJICBUaGUgb25seSBmYWlsdXJlcyBsZWZ0IGFyZSBkaXNhZ3JlZW1lbnRzIG9uIE5vdGF0aW9ucyBhbmQKCSAgJysxJyBub3QgYmVpbmcgYWxsb3dlZCBmb3IgdWxvbmcsIHVpbnQsIHVzaG9ydCBhbmQgdWJ5dGUuCgpNb24gTWFyIDMxIDEyOjExOjQ3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogZml4ZWQgZ01vbnRoIHBhcnNpbmcgcm91dGluZSBhY2NvcmRpbmdseQoJICB0byB0aGUgWE1MIFNjaGVtYXMgZXJyYXRhCgkgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDUveG1sc2NoZW1hLWVycmF0YSNlMi0xMgoKU3VuIE1hciAzMCAyMzowNDoxOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIHhtbHNjaGVtYXN0eXBlcy5jOiBtb3JlIHdvcmsgb24gWE1MIFNjaGVtYXMgZGF0YXR5cGVzCgkgIGFuZCBmYWNldHMgc3VwcG9ydC4gQ3VycmVudGx5IG9ubHkgc2NoZW1hcyB3aXRoIGJpbkhleCBvcgoJICBiYXNlNjQgZG9uJ3QgY29tcGlsZS4gQSBmZXcgZXJyb3IgbGVmdCBpbiB0aGUgdGVzdCBzdWl0ZToKCSAgZm91bmQgMTAzNSB0ZXN0IGluc3RhbmNlczogOTE5IHN1Y2Nlc3MgMjMgZmFpbHVyZXMKCSAgbW9zdCBhcmUgZ2RhdGUgb3IgZ2RhdGV5ZWFyIGZhaWxpbmcgY2hlY2ssIGFuZCBhIGZldyBjYXNlcyB3aGVyZQoJICBKYW1lcyBjbGFyayB0ZXN0cyByZXN1bHRzIGFyZSBzdHJhbmdlLgoJKiB2YWxpZC5jOiBhbGxvdyB0byByZXVzZSB0aGUgTm90YXRpb24gY2hlY2tpbmcgcm91dGluZSB3aXRob3V0CgkgIGhhdmluZyBhIHZhbGlkYXRpb24gY29udGV4dC4KCSogU0FYLmM6IHJlbW92ZWQgYSAjaWYgMAoKU2F0IE1hciAyOSAxNzozNTowNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBmb3Jnb3QgdG8gYXBwbHkgb25lIGNoZWNrIGZyb20gIzEwNjkzMSBwYXRjaAoJKiB4bWxzY2hlbWFzdHlwZXMuYzogbW9yZSB3b3JrIG9uIFhNTCBTY2hlbWFzIGRhdGF0eXBlcwoKU2F0IE1hciAyOSAxMTo0OToyNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmMgaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oIHhtbHNjaGVtYXN0eXBlcy5jOiBtb3JlIHdvcmsKCSAgb24gY2xlYW5pbmcgdXAgWE1MIFNjaGVtYXMgZGF0YXR5cGVzIGJhc2VkIG9uIEphbWVzIENsYXJrIHRlc3RzCgkgIHRlc3QveHNkdGVzdC94c2R0ZXN0LnhtbAoKRnJpIE1hciAyOCAxNDoyNDowOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGltcGxlbWVudGVkIGNvbXBhcmlzb25zIGZvciBTY2hlbWFzIHZhbHVlcy4KCSogeG1sc2NoZW1hc3R5cGVzLmMgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hc3R5cGVzLmg6IGZpeGVkCgkgIHNvbWUgYnVncyBpbiBkdXJhdGlvbiBoYW5kbGluZywgY29tcGFyaXNvbnMgZm9yIGR1cmF0aW9ucwoJICBhbmQgZGVjaW1hbHMsIHJlbW92ZWQgYWxsIG1lbW9yeSBsZWFrcyBwb2ludGVkIG91dCBieSBKYW1lcwoJICB0ZXN0c3VpdGUuIEN1cnJlbnQgc3RhdHVzIGlzIG5vdwoJICBmb3VuZCAyMzggdGVzdCBzY2hlbWFzOiAxOTcgc3VjY2VzcyA0MSBmYWlsdXJlcwoJICBmb3VuZCAxMDM1IHRlc3QgaW5zdGFuY2VzOiA4MDMgc3VjY2VzcyAxMzAgZmFpbHVyZXMKCkZyaSBNYXIgMjggMDA6NDE6NTUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaDogZml4ZWQgYnVncyBhbmQgbWVtb3J5CgkgIGxlYWtzIGluIHRoZSBXM0MgWE1MIFNjaGVtYXMgY29kZQoJKiB4bWxzY2hlbWFzdHlwZXMuYzogaW1wbGVtZW50ZWQgbm9uUG9zaXRpdmVJbnRlZ2VyCgkqIHRlc3Qvc2NoZW1hcy9sZW5ndGgyXzAueHNkIHJlc3VsdC9zY2hlbWFzL2xlbmd0aDJfMF8wLmVycjoKCSAgZml4ZWQgdGhlIHRlc3QgYW5kIHJlc3VsdC4KClRodSBNYXIgMjcgMjI6MjM6MDcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIHRyZWUuYzogdHdvIHBhdGNoZXMgZnJvbSBKYW1lcyBCdXJzYSBvbiB0aGUgSFRNTAoJICBwYXJzZXIgYW5kIGEgdHlwbwoJKiB4bWxzY2hlbWFzdHlwZXMuYzogcmVpbmRlbnRpbmcsIGZpeGluZyBhIG1lbW9yeSBhY2Nlc3MKCSAgcHJvYmxlbSB3aXRoIGRhdGVzLgoKVGh1IE1hciAyNyAxNTo1MzozNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4aW5nICMxMDkyMjcgcHJvdmlkaW5nIG1vcmUgY29udGV4dCBpbiBjYXNlIG9mIAoJICBzdGFydC9lbmQgdGFnIG1pc21hdGNoCgkqIHB5dGhvbi90ZXN0cy9jdHh0ZXJyb3IucHkgcHl0aG9uL3Rlc3RzL3JlYWRlcmVyci5weTogdXBkYXRlIHRoZQoJICB0ZXN0cyBhY2NvcmRpbmdseQoKVGh1IE1hciAyNyAxNToyMjo0MSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBzaG91bGQgZml4ICMxMDkzMjcgZXJyb3JzIG9uIG1lbW9yeSBhY2Nlc3NlcwoKVGh1IE1hciAyNyAxNTowNjoxMyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jOiBGaXhlZCByZW9wZW5pbmcgb2YgIzc4NjYyIDxmb3JtIGFjdGlvbj0iLi4uIj4KCSAgaXMgYW4gVVJJIHJlZmVyZW5jZQoKV2VkIE1hciAyNiAyMjozODozOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXhlZCBidWcgIzEwOTE2MCBvbiBub24tQVNDSUkgSURzCgpXZWQgTWFyIDI2IDE3OjMwOjM3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBOb3JtIHN1Z2dlc3RlZCBhIG5pY2VyIGVycm9yIG1lc3NhZ2UgZm9yIHhtbDpzcGFjZSB2YWx1ZXMKCSAgZXJyb3JzCgpXZWQgTWFyIDI2IDAxOjM0OjE5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwveHBhdGguaDogZmlyc3QgcGFydCBvZiB0aGUgZml4IHRvCgkgIHBlcmZvcm1hbmNlIGJ1ZyAjMTA4OTA1LCBhZGRzIHhtbFhQYXRoT3JkZXJEb2NFbGVtcygpIHByb3ZpZGluZwoJICBkb2N1bWVudCBvcmRlciBmb3Igbm9kZXMuCgkqIHB5dGhvbi9saWJ4bWwuYzogUHl0aG9uIG1heSByZXF1aXJlIFRSSU8gYXMgQWxiZXJ0IENoaW4gcG9pbnRlZCBvdXQKClR1ZSBNYXIgMjUgMTY6MDc6MDAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IHJlbW92aW5nIGEgd2FybmluZyB3aXRoIFN1biBjb21waWxlcgoJICBidWcgIzEwOTE1NAoKVHVlIE1hciAyNSAwNzowMjo1NiBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGxpbnQueG1sCgkqIGRvYy94bWxsaW50LjEKCXVwZGF0ZSB4bWxsaW50IG1hbiBwYWdlIHdpdGggLS1yZWxheG5nIG9wdGlvbgoKVHVlIE1hciAyNSAxMjowNzowMyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vc2V0dXAucHkuaW4gOiB3YXMgbWlzc2luZyAiZHJ2X2xpYnhtbDIucHkiCgpNb24gTWFyIDI0IDE5OjM4OjA1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyB4cGF0aC5jOiBzb21lIGNoYW5nZXMgcmVsYXRlZCB0byB0aGUgbmV3IHdheSBvZiAKCSAgaGFuZGxpbmcgUmVzdWx0IFZhbHVlIFRyZWUsIGJlZm9yZSAyLjUuNQoKTW9uIE1hciAyNCAxNjozNjoyMyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gTkVXUzogcHJlcGFyaW5nIHJlbGVhc2UgMi41LjUKCSogZG9jLyogOiB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uIGFuZCByZWdlbmVyYXRlZCBpdC4KCk1vbiBNYXIgMjQgMTQ6NTY6MDEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4ZWQgc29tZSBwcm9ibGVtcyByZWxhdGVkIHRvICM3NTgxMyBhYm91dCBoYW5kbGluZwoJICBvZiBSZXN1bHQgVmFsdWUgVHJlZXMKClN1biBNYXIgMjMgMjI6NTc6MjAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmM6IGFwcGxpZWQgYSBzZXQgb2YgcGF0Y2hlcyBmcm9tIExvcmVuem8gVmlhbGkgY29ycmVjdGluZwoJICBVUkkgcGFyc2luZyBlcnJvcnMuCgpTdW4gTWFyIDIzIDIyOjAwOjE0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiB2YWxpZGl0eSBzdGF0dXMgd2FzIG5vdCBwYXNzZWQgYmFjayB3aGVuIHZhbGlkYXRpbmcgaW4KCSAgZW50aXRpZXMsIGJ1dCByYWlzZWQgYnkgT2xpdmVyIEZpc2NoZXIKClN1biBNYXIgMjMgMjE6MzA6NTAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogYXZvaWQgZXNjYXBpbmcgJywnIGluIFVSSXMKClN1biBNYXIgMjMgMTI6NTc6MDAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGluZyBidWcgIzEwODk3NiBnZXQgdGhlIElEL1JFRnMgdG8gcmVmZXJlbmNlIAoJICB0aGUgSUQgaW4gdGhlIGRvY3VtZW50IGNvbnRlbnQgYW5kIG5vdCBpbiB0aGUgZW50aXR5IGNvcHkKCSogU0FYLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IG1vcmUgY2hlY2tpbmcgb2YgdGhlIElEL1JFRgoJICBzdHVmZiwgYmV0dGVyIHNvbHV0aW9uIGZvciAjMTA3MjA4CgkqIHhtbHJlZ2V4cC5jOiByZW1vdmVkIGEgZGlyZWN0IHByaW50ZiwgZG9oaGgKCSogeG1scmVhZGVyLmM6IGZpeGVkIGEgYnVnIG9uIHN0cmVhbWluZyB2YWxpZGF0aW9uIG9mIGVtcHR5IAoJICBlbGVtZW50cyBpbiBlbnRpdGllcwoJKiByZXN1bHQvVkMvRWxlbWVudFZhbGlkOCB0ZXN0L1ZDTS92MjAueG1sIHJlc3VsdC92YWxpZC94aHRtbDEueGh0bWw6CgkgIGNsZWFudXAgb2YgdGhlIHZhbGlkYXRpb24gdGVzdHMKCSogdGVzdC92YWxpZC9pZCogdGVzdC92YWxpZC9kdGRzL2Rlc3Rmb28uZW50IHJlc3VsdC92YWxpZC9pZCo6CgkgIGFkZGVkIG1vcmUgSUQvSURSRUYgdGVzdHMgdG8gdGhlIHN1aXRlCgpTYXQgTWFyIDIyIDIzOjM4OjA4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBmaXhlZCAjMTA3MDQzIHJlbW92aW5nIDIgd2FybmluZ3Mgd2l0aCBTdW4gT25lCgkgIGNvbXBpbGVyLgoKU2F0IE1hciAyMiAxODo1MDo0NSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IHZhbGdyaW5kJ2VkIGFuZCBjbGVhbmVkIHVwIGEgY291cGxlIG9mIG1lbW9yeSBpc3N1ZXMuCgpTYXQgTWFyIDIyIDE2OjE1OjUwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBmaXggYnVnICMxMDcyMDggYXZvaWQgZmFsc2UgZHVwbGljYXRlcyB3aGVuIElEL1JFRnMgYXJlCgkgIGRlZmluZWQgaW4gZW50aXRpZXMgY29udGVudAoKU2F0IE1hciAyMiAxNTo1MzoyNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogRml4ZWQgdmFsaWRhdGlvbiBidWcgIzEwODg1OCBvbiBuYW1lc3BhY2UgbmFtZXMgdXNpbmcKCSAgZW50aXRpZXMgYW5kIHJlcG9ydGVkIGJ5IEJyZW50IEhlbmRyaWNrcwoJKiB4bWxsaW50LmM6IHJlcG9ydCB4bWxUZXh0UmVhZGVySGFzVmFsdWUoKSByZXN1bHQgaW4gLS1zdHJlYW0KCSAgLS1kZWJ1ZyBvdXRwdXQuCgpTYXQgTWFyIDIyIDEzOjMyOjM5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBmaXhlZCBidWcgIzEwODgwMSByZXBvcnRlZCBieSBNYWxjb2xtIFRyZWRpbm5pY2sKCSAgYWJvdXQgdGhlIERvY1R5cGUgbm9kZSBub3QgYmVpbmcgcmVwb3J0ZWQgc29tZXRpbWVzLgoJKiBweXRob24vdGVzdHMvcmVhZGVyLnB5OiBhZGRlZCB0byB0ZXN0IHRvIHRoZSByZWdyZXNzaW9uIGNoZWNrcwoKU2F0IE1hciAyMiAwMTo1Nzo0MCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogZml4ZWQgYnVnICMxMDg1NDYgb24gbG9uZyBDREFUQSAob3IgdGV4dCBub2RlcykKCSAgcmVwb3J0ZWQgYnkgRWRkIER1bWJpbGwKClNhdCBNYXIgMjMgMDE6MDA6MjQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jOiBwYXRjaCBmcm9tCgkgIGpvaGFuQGV2ZW5odWlzLm5sIGZvciAjMTA3OTM3IGZpeGluZyBzb21lIGxpbmUgY291bnRpbmcKCSAgcHJvYmxlbXMsIGFuZCBzb21lIG90aGVyIGNsZWFudXBzLgoJKiByZXN1bHQvSFRNTC86IHRoaXMgcmVzdWx0IGluIHNvbWUgbGluZSBudW1iZXIgY2hhbmdlcwoKRnJpIE1hciAyMSAyMjoxOToxNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW06IGZpeGVkIFJlZCBIYXQgYnVnICM4NjExOCB1c2UgbGlieG1sMi5zcGVjCgkgIGluc3RlYWQgb2YgbGlieG1sLnNwZWMKCSogcmVsYXhuZy5jOiBmaXhlZCBzb21lIG9mIHRoZSBlcnJvciByZXBvcnRpbmcgZXhjZXNzaXZlCgkgIHZlcmJvc2l0eQoJKiBjYXRhbG9nLmMgZGVidWdYTUwuYyB2YWxpZC5jIHhtbHJlYWRlci5jIHhtbHNjaGVtYXMuYyB4cGF0aC5jCgkgIHhtbHNjaGVtYXN0eXBlcy5jOiByZW1vdmVkIHNvbWUgd2FybmluZ3MgZnJvbSBnY2MKCSogZG9jL2xpYnhtbDItYXBpLnhtbDogcmVidWlsdAoKRnJpIE1hciAyMSAxNzoyNToyMyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGFub3RoZXIgb3B0aW1pemF0aW9uLCBmb3IgY2hvaWNlIHRoaXMgdGltZQoJKiByZXN1bHQvcmVsYXhuZy9zcGVjMSogcmVzdWx0L3JlbGF4bmcvdHV0b3IxMl8xKiAKCSAgcmVzdWx0L3JlbGF4bmcvdHV0b3IzXzc6IGNsZWFudXBzLgoKRnJpIE1hciAyMSAxMzo0MToyMyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGZpeGVkIHhtbFJlbGF4TkdOb2RlTWF0Y2hlc0xpc3QKCSogdGVzdC9yZWxheG5nL3Rlc3RzdWl0ZS54bWw6IGF1Z21lbnRlZCB0aGUgdGVzdCBzdWl0ZQoJKiByZXN1bHQvcmVsYXhuZy9zcGVjMSogcmVzdWx0L3JlbGF4bmcvdHV0b3IxMl8xKjogdGhpcyBmaXhlcwoJICBzb21lIHNjaGVtYXMgdmFsaWRhdGlvbiB0ZXN0cyBpbiB0aGUgcHJlc2VuY2Ugb2YgZm9yZWlnbiAKCSAgbmFtZXNwYWNlcy4KCkZyaSBNYXIgMjEgMDI6MjM6MzQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBhZGRlZCBhbm90aGVyIGludGVybGVhdmUgc3BlZWR1cC4KClRodSBNYXIgMjAgMTc6MjI6MDAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGFkZGVkIGludGVnZXIgYW5kIGZpeGVkIG9uZSBvZiB0aGUKCSAgSURSRUZTIHJlZ3Jlc3Npb24gdGVzdHMgcGJtCgkqIHJlc3VsdC9yZWxheG5nL2RvY2Jvb2tfMC5lcnI6IHVwZGF0ZWQKCldlZCBNYXIgMTkgMjE6NTg6NDcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyB4bWxzY2hlbWFzdHlwZXMuYzogYXR0ZW1wdCB0byBjb3BlIHdpdGggSUQvSURSRUYoUykKCSAgZGVjbGFyZWQgYm90aCBpbiB0aGUgRFREIGFuZCBpbiB0aGUgU2NoZW1hcyA8Z3Jpbi8+CgkqIHJlbGF4bmcuYzogbW9yZSBkZWJ1ZywgYWRkZWQgYSBiaWcgb3B0aW1pemF0aW9uIGZvciA8bWl4ZWQ+CgkqIHRlc3QvcmVsYXhuZy90ZXN0c3VpdGUueG1sOiBhdWdtZW50ZWQgdGhlIHRlc3RzdWl0ZQoJKiB0ZXN0L3JlbGF4bmcvIHJlc3VsdC9yZWxheG5nOiBhZGRlZCB0aGUgUmVsYXhORyBzcGVjIGFuZCBhIAoJICBEb2NCb29rIGV4YW1wbGUgdG8gdGhlIHJlZ3Jlc3Npb24gdGVzdHMKCldlZCBNYXIgMTkgMTE6MzQ6MTAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steHNkZGF0YS10ZXN0LXN1aXRlLnB5OiBjb3NtZXRpYyBjaGFuZ2UgZm9yIG91dHB1dAoJKiByZWxheG5nLmM6IHRyeSB0byBtaW5pbWl6ZSBjYWxscyB0byBtYWxsb2MvZnJlZSBmb3Igc3RhdGVzLgoKVHVlIE1hciAxOCAxNzo1MDozMSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHJlbW92ZWQgYSB3YXJuaW5nCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBtb3JlIGNsZWFudXAsIGFkZGVkIEVOVElUWSBhbmQgRU5USVRJRVMKCSAgc3VwcG9ydAoJKiBjaGVjay1yZWxheG5nLXRlc3Qtc3VpdGUucHkgY2hlY2steHNkZGF0YS10ZXN0LXN1aXRlLnB5OgoJICBjbGVhbnVwL2ltcHJvdmVtZW50cyBvZiB0aGUgcmVncmVzc2lvbiB0ZXN0cyBiYXRjaAoJKiB0ZXN0L3JlbGF4bmcvdGVzdHN1aXRlLnhtbDogYXVnbWVudGVkIGxpYnhtbDIgb3duIHRlc3RzdWl0ZQoKVHVlIE1hciAxOCAxMjozNjoyMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGZpeGVkIGVycm9yIG1zZyBjbGVhbnVwIGRlYWxsb2NhdGlvbgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogYWRkZWQgYSBmdW5jdGlvbiB0byBoYW5kbGUgbGlzdHMgb2YKCSAgYXRvbWljIHR5cGVzLCBhZGRlZCBzdXBwb3J0IGZvciBJRFJFRlMKClR1ZSBNYXIgMTggMDE6Mjg6MTUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIHZhbGlkLmMgeG1sc2NoZW1hc3R5cGVzLmM6IGFkZGVkIERhdGF0eXBlIElECgkgIGFuZCBJRFJFRiwgdXNhYmxlIGZyb20gUmVsYXhORyBub3cKCSogaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hc3R5cGVzLmg6IG5lZWQgdG8gYWRkIGEgbmV3IGludGVyZmFjZQoJICBiZWNhdXNlIHRoZSB2YWxpZGF0aW9uIG1vZGlmaWVzIHRoZSBpbmZvc2V0CgkqIHRlc3QvcmVsYXhuZy90ZXN0c3VpdGUueG1sOiBleHRlbmRlZCB0aGUgdGVzdHN1aXRlCgpNb24gTWFyIDE3IDE2OjM0OjA3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZml4ZWQgdGhlIGxhc3QgY29yZSBSZWxheE5HIGJ1ZyBrbm93biAjMTA3MDgzLAoJICBzaGVtYXMgZGF0YXR5cGUgSUQvSURSRUYgc3VwcG9ydCBzdGlsbCBtaXNzaW5nIHRob3VnaC4KCSogeG1scmVhZGVyLmM6IGZpeCBhIGNyYXNoaW5nIGJ1ZyB3aXRoIHByZWZpeCByYWlzZWQgYnkKCSAgTWVyaWpuIEJyb2VyZW4KCSogdGVzdC9yZWxheG5nL3Rlc3RzdWl0ZS54bWw6IGF1Z21lbnRlZCB0aGUgdGVzdHN1aXRlIHdpdGgKCSAgY29tcGxleCBpbmhlcml0YW5jZSB0ZXN0cwoKU3VuIE1hciAxNiAxODo0NTo1MCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IHN3aXRjaGVkIGJhY2sgdG8gdGhlIHByZXZpb3VzIFJlbGF4LU5HIGNvZGUgYmFzZSwKCSAgdGhlIGRlcml2YXRpb24gYWxnb3JpdGhtIG5lZWQgc2V2ZXJlIGNvbnN0cmFpbmluZyBjb2RlIHRvIGF2b2lkCgkgIGNvbWJpbmF0b3JpYWwgZXhwbG9zaW9uLiBGaXhlZCB0aGUgcHJvYmxlbSB3aXRoIFNlYmFzdGlhbiBSYWh0egoJICBURUkgYmFzZWQgZXhhbXBsZSBhbmQgb3RoZXIgYnVncwoJKiByZXN1bHQvcmVsYXhuZy8qZXJyOiB1cGRhdGVkIHRoZSByZXN1bHRzCgkqIHRlc3QvcmVsYXhuZy90ZXN0c3VpdGUueG1sOiBzdGFydGVkIGEgbmV3IHRlc3Qgc3VpdGUgCgpTYXQgTWFyIDE1IDIyOjI2OjQ2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmg6IEFmdGVyIGNvbWluZyB0byB0aGUgY29uY2x1c2lvbgoJICB0aGF0IHRoZSBvcmlnaW5hbCBSZWxheE5HIHZhbGlkYXRpb24gY29kZSB3YXMgdW4tZml4ZWFibGUsIGl0IGdvdAoJICByZXdyaXR0ZW4gdG8gdXNlIHRoZSBkZXJpdmF0aW9uIGFsZ29yaXRobSBmcm9tIEphbWVzIENsYXJrIGFuZAoJICByZWRlYnVnZ2VkIGl0IChuZWFybHkpIGZyb20gc2NyYXRjaDoKCSAgZm91bmQgMzczIHRlc3Qgc2NoZW1hczogMzcyIHN1Y2Nlc3MgMSBmYWlsdXJlcwoJICBmb3VuZCA1MjkgdGVzdCBpbnN0YW5jZXM6IDUyOSBzdWNjZXNzIDAgZmFpbHVyZXMKClR1ZSBNYXIgMTEgMTI6MDg6MjMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmMgcGFyc2VyLmM6IGZpeCBzb21lIHJlY3Vyc2lvbiBwcm9ibGVtcyBpbnRyb2R1Y2VkIGluIHRoZQoJICBsYXN0IHJlbGVhc2UuCgkqIHJlbGF4bmcuYzogbW9yZSBkZWJ1Z2dpbmcgb2YgdGhlIFJORyB2YWxpZGF0aW9uIGVuZ2luZSwgc3RpbGwKCSAgcHJvYmxlbXMgdGhvdWdoLgoKTW9uIE1hciAxMCAxNDoxMDo0NyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogc3RvcCBnZW5lcmF0aW5nIHdyb25nIHJlc3VsdCBmaWxlIHdpdGggKiBpbiBuYW1lCgkqIHJlbGF4bmcuYzogZml4aW5nIHRoZSBpbmNsdWRlIGJ1ZyByYWlzZWQgYnkgU2ViYXN0aWFuIFJhaHR6CgkqIHJlc3VsdC9yZWxheG5nL2RlbW8qIHRlc3QvcmVsYXhuZy9kZW1vOiBhZGRlZCB0aGUgdGVzdHMgZnJvbQoJICBTZWJhc3RpYW4gcmVwcm9kdWNpbmcgdGhlIHByb2JsZW0uCgpTdW4gTWFyICA5IDE4OjAyOjMxIE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sbGludC4xOiByZWdlbmVyYXRpbmcgbWFuIHBhZ2UgZnJvbSB4bWxsaW50LnhtbCB0byBwaWNrCgkgIHVwIEFsZWtzZXkncyBjaGFuZ2UKClN1biBNYXIgIDkgMTM6NTM6MTYgMjAwMyAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiB4bWxsaW50LmMgZG9jL3htbGxpbnQueG1sOiB1c2UgJFhNTExJTlRfSU5ERU5UIGVudmlyb25tZW50Cgl2YXJpYWJsZSB0byBjb250cm9sIHRoZSBpbmRlbnRhdGlvbiBmb3IgdGhlIHhtbGxpbnQgIi0tZm9ybWF0IiAKCW9wdGlvbgoKU2F0IE1hciAgOCAxNDoyNzo0MyBDRVQgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogZW5jb2RpbmcuYzogYXBwbGllZCBHZW5uYWR5J3MgcGF0Y2ggYWdhaW5zdCBidWZmZXIgb3ZlcnJ1bgoKRnJpIE1hciAgNyAxOToyOTo0MCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0L3hzZHRlc3QveHNkdGVzdC54bWwgdXJpLmM6IGFmdGVyIGFuZCBleGNoYW5nZSB3aXRoIEphbWVzCgkgIENsYXJrIGl0IGFwcGVhcmVkIEkgaGFkIGJ1ZyBpbiBVUkkgcGFyc2luZyBjb2RlIC4uLgoJKiByZWxheG5nLmMgaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oOiBjb21wbGV0ZWx5IHJldmFtcGVkIGVycm9yCgkgIHJlcG9ydGluZyB0byBub3QgbG9vc2UgbWVzc2FnZSBmcm9tIG9wdGlvbmFsIHBhcnRzLgoJKiB4bWxsaW50LmM6IGFkZGVkIHRpbWluZyBmb3IgUk5HIHZhbGlkYXRpb24gc3RlcHMKCSogcmVzdWx0L3JlbGF4bmcvKjogdXBkYXRlZCB0aGUgcmVzdWx0LCBhbGwgZXJyb3IgbWVzc2FnZXMgY2hhbmdlZAoKRnJpIE1hciAgNyAxNToxODozMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXggYnVnICMxMDc4MDQsIHRoZSBhbGdvcml0aG0gdXNlZCBmb3IgZG9jdW1lbnQgb3JkZXIKCSAgY29tcHV0YXRpb24gd2FzIGZhaWxpbmcgb24gYXR0cmlidXRlcy4KClRodSBNYXIgIDYgMjI6MzU6NTAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4IGJ1ZyAjMTA3NzY0ICwgcG9zc2liaWxpdHkgb2YgYnVmZmVyIG92ZXJmbG93CgkgIGluIHhtbFZhbGlkRGVidWcoKQoKV2VkIE1hciAgNSAxNzo0MTozNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vZnRwLmMgaW5jbHVkZS9saWJ4bWwvbmFub2Z0cC5oOiBhZGRpbmcgeG1sTmFub0ZUUERlbGUoKQoJICBmcm9tIFBoaWxpcHAgRHVua2VsCgpXZWQgTWFyICA1IDEwOjU3OjA5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlLmM6IG1hZGUgcG93dGVuIGFycmF5IHN0YXRpYyBpdCBzaG91bGQgbm90IGJlIGV4cG9ydGVkCgkqIEhUTUxwYXJzZXIuYzogZml4IGJ1ZyAjMTA3MzYxIGJ5IHJldXNpbmcgdGhlIGNvZGUgZnJvbSB0aGUgWE1MIAoJICBwYXJzZXIgZnVuY3Rpb24uCgkqIHRlc3RIVE1MLmM6IGdldCByaWQgb2YgdmFsZ3JpbmQgbWVzc2FnZXMgb24gdGhlIEhUTUwgU0FYIHRlc3RzCgpGcmkgRmViIDI4IDAwOjIzOjAwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4ZWQgYSBub2RlIGR1bXAgY3Jhc2ggb24gYXR0cmlidXRlcwoJKiB0ZXN0L3hzZHRlc3QveHNkdGVzdC54bWwgdGVzdC94c2R0ZXN0L3hzZHRlc3QueHNsOiBmaXhlZAoJICBhbiBVUkkgdGVzdCBidWcgYW5kIGdldCBiZXR0ZXIgb3V0cHV0LgoKVGh1IEZlYiAyNyAyMjoyODo0MCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14c2RkYXRhLXRlc3Qtc3VpdGUucHk6IGdpdmUgbW9yZSBpbmZvcwoJKiByZWxheG5nLmM6IGZpeCBhIGJ1ZyByZXBvcnRlZCBieSBTZWJhc3RpYW4gUmFodHogYW5kCgkgIFJFRi0+REVGIGluIGF0dHJpYnV0ZSB2YWx1ZXMuCgpUaHUgRmViIDI3IDIxOjA5OjMyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXhzZGRhdGEtdGVzdC1zdWl0ZS5weSB0ZXN0L3hzZHRlc3QveHNkdGVzdC54bWwKCSAgdGVzdC94c2R0ZXN0L3hzZHRlc3QueHNsOiBpbXBvcnQgb2YgdGhlIFhTRCBEYXRhdHlwZQoJICByZWdyZXNzaW9uIHRlc3RzIGZyb20gSmFtZXMgQ2xhcmsuCgpUaHUgRmViIDI3IDE4OjQwOjA0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMKCSAgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hc3R5cGVzLmg6IGFkZGVkIHBhcmFtIHN1cHBvcnQgZm9yIHJlbGF4bmcKCSAgdHlwZSBjaGVja2luZywgc3RhcnRlZCB0byBpbmNyZW1lbnQgdGhlIHBvb2wgb2Ygc2ltcGxlIHR5cGVzCgkgIHJlZ2lzdGVyZWQsIHN0aWxsIG11Y2ggd29yayB0byBiZSBkb25lIG9uIHNpbXBsZSB0eXBlcyBhbmQKCSAgZmFjZXRzIGNoZWNraW5ncy4KCldlZCBGZWIgMjYgMTY6NDU6MzkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW50aXRpZXMuYzogZml4ZXMgYWdhaW4gb25lIG9mIHRoZSBwcm9ibGVtIHJhaXNlZCBieQoJICBKYW1lcyBDbGFyayBpbiAjMTA2Nzg4CgpXZWQgRmViIDI2IDE1OjQ2OjQ4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogRml4ZWQgYSBjb3VwbGUgb2YgcHJvYmxlbSByYWlzZWQgYnkgSmFtZXMgQ2xhcmsKCSAgaW4gYnVnICMxMDcwODMsIHRoZSBzdXBwb3J0IGZvciBJRC9JRFJFRi9JRFJFRlMgYXQgdGhlIFdYUwoJICBkYXRhdHlwZSBsZXZlbCBzdGlsbCBub3QgZml4ZWQgdGhvdWdoLgoKTW9uIEZlYiAyNCAyMTowOToxOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyByZWxlYXNlIDIuNS40CgkqIGRvYy8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgkqIHJlbGF4bmcuYzogcmVtb3ZlZCB3YXJuaW5ncwoJKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIHRoZSByZXN1bHRzCgpNb24gRmViIDI0IDIwOjUzOjE3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeGVzIGEgRFREIHJlZ2V4cCBnZW5lcmF0aW9uIHByb2JsZW0uCgpNb24gRmViIDI0IDIwOjEyOjU3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlcyBidWcgIzEwNTk5OCBhYm91dCBmYWxzZSBkZXRlY3Rpb24gb2YKCSAgYXR0cmlidXRlIGNvbnN1bXB0aW9uIGxvb3AuCgpNb24gRmViIDI0IDE5OjE0OjU3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IEZpeGVzIGJ1ZyAjMTA2OTMxIGluIFhJbmNsdWRlIGVudGl0aWVzIG1lcmdpbmcuCgpNb24gRmViIDI0IDE4OjUwOjM1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBmaXhlZCBidWcgIzEwNTk5MgoKTW9uIEZlYiAyNCAxODoxNDoxNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbFNldFByb3AgYW5kIGFsLiB3aGVuIHRoZSBub2RlIHBhc3NlZCBpcyBub3QgYW4KCSAgZWxlbWVudC4KCSogcmVsYXhuZy5jOiBmaXhlZCBidWdzIDcuMyAodGhvdWdoIG5vdCBjb21wbGV0ZSkgYW5kIG1lbW9yeSBsZWFrcwoJICBmb3VuZCAzNzMgdGVzdCBzY2hlbWFzOiAzNjkgc3VjY2VzcyA0IGZhaWx1cmVzCgkgIGZvdW5kIDUyOSB0ZXN0IGluc3RhbmNlczogNTI1IHN1Y2Nlc3MgNCBmYWlsdXJlcwoJKiBjaGVjay1yZWxheG5nLXRlc3Qtc3VpdGUucHk6IGFkZGVkIG1lbW9yeSBkZWJ1ZyByZXBvcnRpbmcKCk1vbiBGZWIgMjQgMTI6NDE6NTQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmMgcGFyc2VyLmM6IHNvbWUgd2FybmluZyByZW1vdmFsIG9uIElnb3IncyBwYXRjaAoJKiB0cmVlLmM6IHNlZW1zIEkgbWVzc2VkIHVwIHdpdGggIzEwNjc4OCBmaXgKCSogcHl0aG9uL2xpYnhtbC5jOiBmaXhlZCBzb21lIGJhc2UgcHJvYmxlbXMgd2hlbiBQeXRob24gcHJvdmlkZXMKCSAgdGhlIHJlc29sdmVyLgoJKiByZWxheG5nLmM6IGZpeGVkIHRoZSBpbnRlcmxlYXZlIGFsZ29yaXRobSAKCSAgZm91bmQgMzczIHRlc3Qgc2NoZW1hczogMzY0IHN1Y2Nlc3MgOSBmYWlsdXJlcwoJICBmb3VuZCA1MjkgdGVzdCBpbnN0YW5jZXM6IDUyNSBzdWNjZXNzIDQgZmFpbHVyZXMKCSAgdGhlIHJlc3VsdGluZyBmYWlsdXJlcyBhcmUgYnVnIGluIHRoZSBhbGdvcml0aG0gZnJvbSA3LjMgYW5kCgkgIGxhY2sgb2Ygc3VwcG9ydCBmb3IgcGFyYW1zCgpTdW4gRmViIDIzIDE0OjQ5OjM5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhbm90aGVyIGZpeCBmb3Igbm9kZWluZm8gaW4gZW50aXRpZXMgcHJvYmxlbQoJKiB0cmVlLmMgZW50aXRpZXMuYzogZml4ZWQgYnVnICMxMDY3ODggZnJvbSBKYW1lcyBDbGFyawoJICBzb21lIHNwYWNlcyBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQgYXMgY2hhcmFjdGVyIHJlZmVyZW5jZXMuCgpTYXQgRmViIDIyIDE4OjI4OjE2IENFVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBwYXJzZXIuYyB1cmkuYzogZml4ZWQgdGhlIGJ1ZyBJIGludHJvZHVjZWQgaW4gdGhlIHBhdGgKCSAgaGFuZGxpbmcsIHJlcG9ydGVkIGJ5IFNlYmFzdGlhbiBCZXJnbWFubgoKU2F0IEZlYiAyMiAwMDoxOTo0OCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4aW5nIHNvbWUgbm9kZWluZm8gaW4gZW50aXRpZXMgcHJvYmxlbSByYWlzZWQKCSAgYnkgR2xlbm4gVy4gQmFjaAoJKiByZWxheG5nLmM6IGltcGxlbWVudGVkIHRoZSBmaXJzdCBzZWN0aW9uIDcuMyBjaGVjawoJKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIHRoZSByZXN1bHRzCgpGcmkgRmViIDIxIDE4OjEyOjE5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZml4ZWQgc29tZSBwcm9ibGVtcyBpbiB0aGUgcHJldmlvdXMgY29tbWl0CgkgIGFuZCBmaW5pc2hlZCBpbXBsZW1lbnRpbmcgNC4xNiBydWxlcyBjaGVja2luZwoJICBmb3VuZCAzNzMgdGVzdCBzY2hlbWFzOiAzNTMgc3VjY2VzcyAyMCBmYWlsdXJlcwoJICBmb3VuZCA1MjkgdGVzdCBpbnN0YW5jZXM6IDUxOSBzdWNjZXNzIDYgZmFpbHVyZXMKCSogcmVzdWx0L3JlbGF4bmcvKjogdXBkYXRlZCB0aGUgcmVzdWx0cwoKRnJpIEZlYiAyMSAxNjozNzozOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGltcGxlbWVudGVkIGNoZWNrcyBmcm9tIHNlY3Rpb24gNy4yCgpUaHUgRmViIDIwIDE2OjAwOjMxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogaW1wbGVtZW50ZWQgdGhlIGNoZWNrcyBmcm9tIHNlY3Rpb24gNy4xLCBmaXhlZAoJICBzb21lIG9mIHRoZSA0LjIwIGFuZCA0LjIxIHByb2JsZW1zLgoJICBmb3VuZCAzNzMgdGVzdCBzY2hlbWFzOiAzMzggc3VjY2VzcyAzNSBmYWlsdXJlcwoJICBmb3VuZCA1MjkgdGVzdCBpbnN0YW5jZXM6IDUxOSBzdWNjZXNzIDYgZmFpbHVyZXMKCSogcmVzdWx0L3JlbGF4bmcvKjogdXBkYXRlZCB0aGUgcmVzdWx0cwoKVGh1IEZlYiAyMCAwMTowOToyNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGltcGxlbWVudGVkIHRoZSA0LjIwIGFuZCA0LjIxIHNpbXBsaWZpY2F0aW9uIHJ1bGVzLgoJKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIHRoZSByZXN1bHRzCgpXZWQgRmViIDE5IDE4OjMwOjMwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogbW9yZSBidWdmaXhlcwoJKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIHRoZSByZXN1bHRzCgpXZWQgRmViIDE5IDE1OjM5OjU2IENFVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBET0NCcGFyc2VyLmM6IG9ic29sZXRlZCB4bWxOb3JtYWxpemVXaW5kb3dzUGF0aAoJKiBIVE1McGFyc2VyLmM6IG9ic29sZXRlZCB4bWxOb3JtYWxpemVXaW5kb3dzUGF0aAoJKiBTQVguYzogZW5zdXJlZCB4bWxEb2MuVVJMIGlzIGFsd2F5cyBjYW5vbmljCgkqIHBhcnNlci5jOiBvYnNvbGV0ZWQgeG1sTm9ybWFsaXplV2luZG93c1BhdGgKCSogdXJpLmMgaW5jbHVkZS9saWJ4bWwvdXJpLmg6IGludHJvZHVjZWQgeG1sQ2Fub25pY1BhdGgKCSogeG1sSU8uYyBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOiBvYnNvbGV0ZWQgeG1sTm9ybWFsaXplV2luZG93c1BhdGgKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBhZGRlZCBmZXcgZXhwb3J0cwoKV2VkIEZlYiAxOSAxNDoyNjo1MSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW46IHBhdGNoZWQgdG8gaGF2ZSBzaGFyZWQgbGlicmFyaWVzCgkgIGZvciBQeXRob24gcmVncmVzc2lvbiB0ZXN0cyBhbmQgc3RhdGljIGJpbmFyaWVzIGZvciBnZGIgZGVidWcKCSAgaW4gbXkgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQKCSogcmVsYXhuZy5jOiBtb3JlIGJ1Z2ZpeGVzIAoJICBmb3VuZCAzNzMgdGVzdCBzY2hlbWFzOiAyOTYgc3VjY2VzcyA3NyBmYWlsdXJlcwoJICBmb3VuZCA1MjkgdGVzdCBpbnN0YW5jZXM6IDUxNiBzdWNjZXNzIDggZmFpbHVyZXMKCSogcmVzdWx0L3JlbGF4bmcvKjogdXBkYXRlZCB0aGUgcmVzdWx0cwoKV2VkIEZlYiAxOSAwMToxNzo0OCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGd1ZXNzIHdoYXQgISBSZWxheC1ORyBidWdmaXhpbmcsIHdoYXQgYSBzdXJwcml6ZS4uLgoKVHVlIEZlYiAxOCAyMjowOTo1MCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogZmxvYXQvZG91YmxlIGNoZWNrIGJ1Z2ZpeAoJKiB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBleHBvcnRlZCBhIGZ1bmN0aW9uIGZvciBOTVRPS0VOCgkgIHZhbGlkYXRpb24KCSogeG1scmVhZGVyLmM6IGFkZCBhIFRPRE8gZm9yIEpvZHkKCSogcmVsYXhuZy5jOiBidWdmaXggYnVnZml4IGJ1Z2ZpeAoJICBmb3VuZCAzNzMgdGVzdCBzY2hlbWFzOiAzMDAgc3VjY2VzcyA3MyBmYWlsdXJlcwoJICBmb3VuZCA1MjkgdGVzdCBpbnN0YW5jZXM6IDUwNyBzdWNjZXNzIDEwIGZhaWx1cmVzCgkqIHJlc3VsdC9yZWxheG5nLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMKClR1ZSBGZWIgMTggMDA6MzM6MTcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIGNoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZS5weTogbW9yZSBSZWxheE5HIGJ1ZyBodW50aW5nCgpNb24gRmViIDE3IDE4OjIzOjMyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyBjaGVjay1yZWxheG5nLXRlc3Qtc3VpdGUucHk6IG1vcmUgd29yayBvbiB0aGUKCSAgUmVsYXhORyBpbXBsZW1lbnRhdGlvbiBjb25mb3JtYW5jZSB0ZXN0aW5nLgoJICBmb3VuZCAzNzMgdGVzdCBzY2hlbWFzOiAyODQgc3VjY2VzcyA4OSBmYWlsdXJlcwoJICBmb3VuZCA1MjkgdGVzdCBpbnN0YW5jZXM6IDQ0OCBzdWNjZXNzIDQ3IGZhaWx1cmVzCgkqIHJlc3VsdC9yZWxheG5nLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMKClN1biBGZWIgMTYgMTY6NDg6MzggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogQ2hhbmdlTG9nIHRyZWUuYyBkb2MvbGlieG1sLWRvYy5lbCBkb2MvbGlieG1sMi1hcGkueG1sOiBhcHBsaWVkCgkgIGEgcGF0Y2ggZnJvbSBLamFydGFuIE1hcmFhcyB0byBmaXggc29tZSB0eXBvcwoKU3VuIEZlYiAxNiAxNjo0MDo1MiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IG1vcmUgYnVnLWh1bnRpbmcKCSogdGVzdFJlbGF4LmMgaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oOiBhZGRlZCAtLXRyZWUgdG8gZHVtcCB0aGUKCSAgaW50ZXJtZWRpYXRlIHJuZyB0cmVlCgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IHBhdGNoIGZyb20gU3RlcGhhbmUgQmlkb3VsIHRvIGZpeCB0aGUgZ2VuZXJhdG9yCgkgIG9uIHB5dGhvbiA8IDIuMgoKRnJpIEZlYiAxNCAxNzo0OToyNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay1yZWxheG5nLXRlc3Qtc3VpdGUucHkgcmVsYXhuZy5jOiBtb3JlIHRlc3Rpbmcgb24gdGhlCgkgIFJlbGF4LU5HIGZyb250LCBjbGVhbmluZyB1cCB0aGUgcmVncmVzc2lvbiB0ZXN0cyBmYWlsdXJlcwoJICBjdXJyZW50IHN0YXRlIGFuZCBJIGZvcmdvdCBzdXBwb3J0IGZvciAibWl4ZWQiOgoJICBmb3VuZCAzNzMgdGVzdCBzY2hlbWFzOiAyODAgc3VjY2VzcyA5MyBmYWlsdXJlcwoJICBmb3VuZCA1MjkgdGVzdCBpbnN0YW5jZXM6IDQwMSBzdWNjZXNzIDY4IGZhaWx1cmVzCgkqIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmggeG1sc2NoZW1hc3R5cGVzLmM6IGZpbmlzaGVkIGFuZAoJICBtb3ZlZCB0aGUgTmFtZSwgTkNOYW1lIGFuZCBRTmFtZSB2YWxpZGF0aW9uIHJvdXRpbmUgaW4gdHJlZS5jCgkqIHVyaS5jOiBmaXhlZCBoYW5kbGluZyBvZiBVUkkgZW5kaW5nIHVwIHdpdGggIywgaS5lLiBoYXZpbmcKCSAgYW4gZW1wdHkgZnJhZ21lbnQgSUQuCgkqIHJlc3VsdC9yZWxheG5nLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMKClRodSBGZWIgMTMgMTY6NDk6MjQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steGluY2x1ZGUtdGVzdC1zdWl0ZS5weTogaW1wcm92ZWQgdGhlIHNjcmlwdCBhY2NvcmRpbmdseQoJICB0byB0aGUgWEluY2x1ZGUgcmVncmVzc2lvbiB0ZXN0cyB1cGRhdGVzCgkqIHhwb2ludGVyLmM6IEltcGxlbWVudGVkIFhQb2ludGVyIGVsZW1lbnQoKSBTY2hlbWUgVzNDIFBSIG9mIDEzCgkgIE5vdmVtYmVyIDIwMDIKCSogcmVzdWx0L1hQYXRoL3hwdHIvY2hhcHRlcnNjaGlsZHNlcSByZXN1bHQvWFBhdGgveHB0ci92aWRjaGlsZHNlcQoJICB0ZXN0L1hQYXRoL3hwdHIvY2hhcHRlcnNjaGlsZHNlcSB0ZXN0L1hQYXRoL3hwdHIvdmlkY2hpbGRzZXE6CgkgIGF1Z21lbnRlZCB0aGUgWHBvaW50ZXIgdGVzdHN1aXRlIGZvciB0aGUgZWxlbWVudCgpIHNjaGVtZQoKVGh1IEZlYiAxMyAxMjowMDozMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGFkZGVkIFRPRE8gZm9yIHRoZSBEVEQgY29tcGF0aWJpbGl0eSBzcGVjCgkqIHhpbmNsdWRlLmM6IG1vcmUgYnVnIGZpeGVzIGRyaXZlbiBieSB0aGUgdGVzdHN1aXRlIAoKVHVlIEZlYiAxMSAxOTowMTowMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14aW5jbHVkZS10ZXN0LXN1aXRlLnB5IHhpbmNsdWRlLmM6IFdvcmsgb24gdGhlIFczQy9OSVNUCgkgIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIFhJbmNsdWRlLCBpbXByb3ZlZCB0aGUgc2NyaXB0LCBpbXByb3ZpbmcKCSAgWEluY2x1ZGUgZXJyb3IgcmVwb3J0aW5nIG1lY2hhbmlzbQoKTW9uIEZlYiAxMCAxNzoxOToxNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBORVdTIGRvYy8qIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIHJlbGVhc2UgMi41LjMKCk1vbiBGZWIgMTAgMTc6MTE6MjIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiB0cnlpbmcgdG8gZml4ICMxMDQ5MzQgYWJvdXQgc29tZSBYSFRNTDEgc2VyaWFsaXphdGlvbgoJICBpc3N1ZXMuCgpNb24gRmViIDEwIDE2OjQxOjEzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmMgeG1sSU8uYzogZml4aW5nIGJ1ZyAjMTA0NjQ2IGFib3V0IGljb252IGJhc2VkCgkgIGVuY29kaW5nIGNvbnZlcnNpb24gd2hlbiB0aGUgaW5wdXQgYnVmZmVyIHN0b3BzIGluIHRoZQoJICBtaWRkbGUgb2YgYSBtdWx0aWJ5dGUgY2hhcgoKTW9uIEZlYiAxMCAxNToyNDo0NyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0L3JlbGF4bmcvT0FTSVMvc3BlY3Rlc3QueG1sOiBPQVNJUyBSZWxheE5HIHRlc3RzdWl0ZQoJKiBjaGVjay1yZWxheG5nLXRlc3Qtc3VpdGUucHk6IHB5dGhvbiBzY3JpcHQgdG8gcnVuIHJlZ3Jlc3Npb24KCSAgYWdhaW5zdCBPQVNJUyBSZWxheE5HIHRlc3RzdWl0ZQoJKiByZWxheG5nLmM6IHNvbWUgY2xlYW51cCB0d2Vha3MKCSogSFRNTHBhcnNlci5jIGdsb2JhbHMuYzogY2xlYW51cHMgaW4gY29tbWVudHMKCSogZG9jL2xpYnhtbDItYXBpLnhtbDogdXBkYXRlZCB0aGUgQVBJCgkqIHJlc3VsdC9yZWxheG5nLyo6IGVycm9ycyBtb3ZlZCBmaWxlcywgc28gbGFyZ2UgZGlmZnMgYnV0CgkgIG5vIGNoYW5nZXMgYXQgdGhlIHNlbWFudGljIGxldmVsLgoKTW9uIEZlYiAxMCAwMTowMDozMSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGluZyAjMTA1Njc4IHByb2JsZW0gd2hlbiBkdW1waW5nIGEgbmFtZXNwYWNlIG5vZGUuCgpNb24gRmViIDEwIDAwOjMwOjAxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGVkIGRvYyBjb21tZW50IHByb2JsZW1zCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmM6IGFkZGluZwoJICBSZWxheE5HIHdyYXBwZXJzCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcmVsYXhuZy5weTogYWRkZWQgYSBzcGVjaWZpYwoJICB0ZXN0IG9mIHRob3NlIGVhcmx5IFB5dGhvbiBSZWxheE5HIGJpbmRpbmdzCgpTdW4gRmViICA5IDE1OjE4OjQzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluOiBmaXhlcyBhIGxpYnRvb2wgcHJvYmxlbSBvbiBBTUQgNjRiaXRzIGJ1aWxkcwoJKiByZWxheG5nLmM6IGZvdW5kIHRoZSB2YWxpZGF0aW9uIHByb2JsZW0gSSBoYWQgd2l0aCBpbnRlcmxlYXZlCgkgIHdoZW4gbm90IGNvdmVyaW5nIGFsbCByZW1haW5pbmcgc2libGluZ3MKCSogTWFrZWZpbGUuYW0gdGVzdC5yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkIHRoZQoJICB0ZXN0c3VpdGUgYW5kIGNoZWNrIHRoZSBSTkcgc2NoZW1hcyBhZ2FpbnN0IHRoZSBSTkcgc2NoZW1hcwoJICBnaXZlbiBpbiBhcHBlbmRpeCBBCgpTYXQgRmViICA4IDE4OjU1OjQzIENFVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiB1cGRhdGVzIGZvciBSZWxheE5HCgkqIHdpbjMyL01ha2VmaWxlLm1pbmd3OiB1cGRhdGVzIGZvciBSZWxheE5HCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYWRkZWQgUmVsYXhORyBleHBvcnRzCgpGcmkgRmViICA3IDE0OjAwOjUzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IGFwcGxpZWQgYW5vdGhlciBidWcgZml4IGZyb20gU2VhbiBDaGl0dGVuZGVuCgpGcmkgRmViICA3IDEzOjM0OjA4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiB4bWxsaW50LmM6IEkgZi4uLmVkIHVwIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24KCSAgb2Ygc2NoZW1hcyBhbmQgLS1yZWxheG5nIG9wdGlvbiBkaXNwbGF5IGluIHhtbGxpbnQsIHBvaW50ZWQgYnkKCSAgTW9ydXMgV2FsdGVyLgoJKiB4bGluay5jOiBTZWFuIENoaXR0ZW5kZW4gcG9pbnRlZCBhIGNvdXBsZSBvZiBlcnJvcnMgaW4gdGhlIFhMaW5rCgkgIGRldGVjdGlvbiBtb2R1bGUsIGZpeGVzIGJ1ZyAjMTA1Mzc0LgoKRnJpIEZlYiAgNyAwMTo0MzozOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogYWRkZWQgdGhlIGJvb2xlYW4gYmFzZSB0eXBlLgoKVGh1IEZlYiAgNiAxMDoyMzo1MiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogc3RhcnRlZCBpbXBsZW1lbnRpbmcgc29tZSBvZiB0aGUgbWlzc2luZwoJICBkZWZhdWx0IHNpbXBsZSB0eXBlcwoJKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIHRoZSByZXN1bHRzCgpXZWQgRmViICA1IDE1OjI4OjA0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1MgZG9jLyo6IHVwZGF0ZWQgdGhlIGRvY3MsIHJlYWR5IGZvciAyLjUuMiByZWxlYXNlCgpXZWQgRmViICA1IDE0OjE1OjU5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyB0cmVlLmMgeG1sSU8uYzogY29tbWVudHMgY2xlYW51cHMKCSogTWFrZWZpbGUuYW06IHVzZSB4bWxsaW50IGZvciBkb2luZyB0aGUgUmVsYXhORyB0ZXN0cwoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjUuMiBtYWRlIHNjaGVtYXMgc3VwcG9ydCBkZWZhdWx0IHRvCgkgIG9uIGluc3RlYWQgb2Ygb2ZmCgkqIHJlbGF4bmcuYzogcmVtb3ZlZCB0aGUgdmVyYm9zaXR5CgkqIHhtbGxpbnQuYzogYWRkZWQgLS1yZWxheG5nIG9wdGlvbgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWxfd3JhcC5oOiBwcmVwYXJlZCB0aGUgaW50ZWdyYXRpb24KCSAgb2YgdGhlIG5ldyBSZWxheE5HIG1vZHVsZSBhbmQgc2NoZW1hcwoJKiByZXN1bHQvcmVsYXhuZy8qOiBsZXNzIHZlcmJvc2Ugb3V0cHV0CgpXZWQgRmViICA1IDEyOjAwOjM2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGRvIG5vdCBydW4gY29udGVudCBtb2RlbCB2YWxpZGF0aW9uIGlmIHRoZQoJICBjb250ZW50IGlzIG5vdCBkZXRlcm1pbmlzdAoKV2VkIEZlYiAgNSAxMTo0Mzo1OCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogYWRkZWQgdGhlIHJlZGVmaW5pdGlvbiBvZiBuYW1lc3BhY2VkIGF0dHJpYnV0ZQoJICBjaGVjayB0aGF0IHdhcyBtaXNzaW5nIGFzIEZhYnJpY2UgRGVzcukgcG9pbnRlZCBvdXQuCgpXZWQgRmViICA1IDExOjA5OjI5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmg6IGFwcGxpZWQgSFRNTAoJICBpbXByb3ZlbWVudHMgZnJvbSBOaWNrIEtldywgYWxsb3dpbmcgdG8gZG8gbW9yZSBjaGVja2luZwoJICB0byBIVE1MIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzLgoKVHVlIEZlYiAgNCAyMzo0NzowNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBmaXhpbmcgYnVnICMxMDUxMzcgYWJvdXQgZW50aXRpZXMgZGVjbGFyYXRpb24KCSAgbmVlZGluZyB0byBiZSBjb3BpZWQgdG8gdGhlIGluY2x1ZGluZyBkb2N1bWVudC4KClR1ZSBGZWIgIDQgMjA6MjY6MjIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiBmaXhlZCBidWcgIzEwNDgxNyB3aXRoIGRlbGVnYXRlVVJJCgkqIHhwYXRoLmM6IGZpeGluZyBidWdzICMxMDQxMjMgYW5kICMxMDQxMjUKClR1ZSBGZWIgIDQgMTc6MTI6NTYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHZhbGlkLmMgeG1scmVhZGVyLmMgcHl0aG9uL2xpYnhtbF93cmFwLmggCgkgIHB5dGhvbi90eXBlcy5jOiBmaXhpbmcgIzEwNDA5NiB0byBjb21waWxlIHdpdGhvdXQgcmVnZXhwcwoKVHVlIEZlYiAgNCAxNjozMTo1NSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXhpbmcgYnVnICMxMDM5NjkgZm9yZ290IHRvIGFkZCBhbiBlcHNpbG9uIHRyYW5zaXRpb24KCSAgd2hlbiBidWlsZGluZyB0aGUgYXV0b21hdGEgZm9yIGVsZW0qCgpUdWUgRmViICA0IDE2OjIxOjA3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIEFybmUgZGUgQnJ1aWpuIGZpeGluZyAKCSAgYnVnICMxMDM4MjcKClR1ZSBGZWIgIDQgMTY6MTc6MDkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiB1cGRhdGluZyBhIGNvbW1lbnQsIGZpeGluZyAjMTAzNzc2CgpUdWUgRmViICA0IDE2OjA1OjUzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhpbmcgYnVnIDEwNTA0OSBmb3IgdmFsaWRpdHkgY2hlY2tpbmcgb2YgY29udGVudAoJICB3aXRoaW4gcmVjdXJzaXZlIGVudGl0aWVzLgoKVHVlIEZlYiAgNCAxNTo0MDo1NCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IHRyeSB0byBmaXggIyAxMDUwNDkKCSogcmVsYXhuZy5jIHhtbHNjaGVtYXN0eXBlcy5jOiBhIGNvdXBsZSBvZiBjaGFuZ2VzIGFuZCBleHRlbnNpb25zCgkqIHRyZWUuYzogdXBkYXRlZCBhIGZ1bmN0aW9uIGNvbW1lbnQKClR1ZSBGZWIgIDQgMDA6MjA6NTggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZzogbW9yZSB3b3JrIG9uIGdyYW1tYXJzIGFuZCByZWZzL2RlZnMKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlCgkgIHJlZ3Jlc3Npb24gdGVzdHMKCk1vbiBGZWIgIDMgMTQ6MTY6NTkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZzogbW9yZSB3b3JrIG9uIG5hbWUgY2xhc3NlcywgZXhjZXB0IHN1cHBvcnQKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlCgkgIHJlZ3Jlc3Npb24gdGVzdHMKCk1vbiBGZWIgIDMgMTE6NTY6MDUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZzogbW9yZSB3b3JrIG9uIG5hbWUgY2xhc3NlcywgdGhlICJ2YWxpZGF0ZSBhbGwiIHNjaGVtYXMKCSAgc2VlbXMgdG8gd29yayBub3cuCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZC91cGRhdGVkIHRoZQoJICByZWdyZXNzaW9uIHRlc3RzCgpNb24gRmViICAzIDA5OjUwOjI2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYzogcmVtb3ZlZCBhbiB1bnByb3RlZHRlZCBkZWJ1ZyBtZXNzYWdlIEFsZWtzaSBTdWhvbmVuCgkqIHBhcnNlci5jOiBwdXQgYSBndWFyZCBhZ2FpbnN0IGluZmluaXRlIGRvY3VtZW50IGRlcHRoLCBiYXNpY2FsbHkKCSAgdHJ5aW5nIHRvIGF2b2lkIGFub3RoZXIga2luZCBvZiBEb1MgYXR0YWNrLgoJKiByZWxheG5nLmM6IHNvbWUgY29kZSB3LnIudC4gbmFtZUNsYXNzZXMKClN1biBGZWIgIDIgMTc6MDE6NDMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogY2hlY2sgYWxsIHRoZSBuYW1lc3BhY2Ugc3VwcG9ydAoJICB3YXMgYWN0dWFsbHkgY29ycmVjdCBiYXNlZCBvbiB0dXRvcmlhbCBzZWN0aW9uIDEwLgoKU3VuIEZlYiAgMiAxNTozMzozOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nOiBpbmNsdWRlIHNlZW1zIHRvIHdvcmsgb2theSBub3cKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlCgkgIHJlZ3Jlc3Npb24gdGVzdHMKClNhdCBGZWIgIDEgMTk6NDQ6NTggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBhIGJpdCBvZiB3b3JrIGRvbmUgaW4gdGhlIHRyYWluIGJhY2suCgkqIHRlc3QvcmVsYXhuZy8qOiBhZGRlZCBvbmUgb2YgdGhlIGluY2x1ZGUgdGVzdHMKClRodSBKYW4gMzAgMTQ6MDY6NTUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZzogbW9yZSB3b3JrIGRvbmUgaW4gdGhlIHRyYWluCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZC91cGRhdGVkIHRoZQoJICByZWdyZXNzaW9uIHRlc3RzCgpXZWQgSmFuIDI5IDIzOjQ0OjU4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZGVidWdnaW5nIG9mIGV4dGVybmFsUmVmCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZC91cGRhdGVkIHRoZQoJICByZWdyZXNzaW9uIHRlc3RzCgpXZWQgSmFuIDI5IDIyOjA2OjA0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogbW9yZSB3b3JrIG9uIFJlbGF4LU5HLCBpbXBsZW1lbnRpbmcgZXh0ZXJuYWxSZWYKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlIAoJICByZWdyZXNzaW9uIHRlc3RzCgkqIE1ha2VmaWxlLmFtOiBjbGVhbnVwIHRvIFJlbGF4dGVzdHMgdGFyZ2V0CgpXZWQgSmFuIDI5IDAwOjA4OjM4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogbW9yZSB3b3JrIG9uIFJlbGF4LU5HLCBpbXBsZW1lbnRpbmcgaW50ZXJsZWF2ZQoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBhdWdtZW50ZWQvdXBkYXRlZCB0aGUgCgkgIHJlZ3Jlc3Npb24gdGVzdHMKClR1ZSBKYW4gMjggMjE6NTY6NDkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBtb3JlIHdvcmsgb24gUmVsYXgtTkcsIGltcGxlbWVudGluZyBpbnRlcmxlYXZlCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZC91cGRhdGVkIHRoZSAKCSAgcmVncmVzc2lvbiB0ZXN0cwoKTW9uIEphbiAyNyAwNzozNToyOSBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3R1dG9yaWFsL2N1c3RvbWZvLnhzbAoJKiBkb2MvdHV0b3JpYWwvY3VzdG9taHRtbC54c2wKCWFkZGluZyBzdHlsZXNoZWV0IGN1c3RvbWl6YXRpb25zIHVzZWQgdG8gZ2VuZXJhdGUgZm8KCWZvciBwZGYgYW5kIGh0bWwKCk1vbiBKYW4gMjcgMTM6Mjk6NDMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBtb3JlIHdvcmsgb24gUmVsYXgtTkcKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlIAoJICByZWdyZXNzaW9uIHRlc3RzCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBhZGRlZCBhIG51bWJlciBvZiBiYXNlIHR5cGUgZGVmaW5pdGlvbiBidXQgbm90CgkgIHRoZSBhc3NvY2lhdGVkIGNoZWNrcywgdGhvc2UgYXJlIHN0aWxsIFRPRE9zCgpTdW4gSmFuIDI2IDE3OjM3OjA2IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJaW4gZG9jcy90dXRvcmlhbDoKCSogYXBhLmh0bWwKCSogYXBiLmh0bWwKCSogYXBjLmh0bWwKCSogYXBkLmh0bWwKCSogYXBlLmh0bWwKCSogYXBmLmh0bWwKCSogYXBnLmh0bWwKCSogYXIwMXMwMi5odG1sCgkqIGFyMDFzMDMuaHRtbAoJKiBhcjAxczA0Lmh0bWwKCSogYXIwMXMwNS5odG1sCgkqIGFyMDFzMDYuaHRtbAoJKiBhcjAxczA3Lmh0bWwKCSogYXIwMXMwOC5odG1sCgkqIGluZGV4Lmh0bWwKCSogeG1sdHV0b3JpYWwucGRmCgkqIHhtbHR1dG9yaWFsLnhtbAoJYWRkIGluZGV4IHRvIHR1dG9yaWFsCgpTdW4gSmFuIDI2IDE3OjAyOjI5IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sY2F0YWxvZy4xCgkqIGRvYy94bWxjYXRhbG9nX21hbi5odG1sCgkqIGRvYy94bWxjYXRhbG9nX21hbi54bWwKCWJlbGF0ZWRseSBmaXhpbmcgYnVnICM5MzYyMiAoYWRkcyByZXdyaXRlVVJJIHR5cGUgdG8KCSItLWFkZCIgb3B0aW9uIGluIHhtbGNhdGFsb2cgbWFuIHBhZ2UKClN1biBKYW4gMjYgMjA6NDc6MjYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sY2F0YWxvZy5jIHhtbGxpbnQuYzogYXBwbGllZCBwYXRjaCBmb3IgTmV0QlNEIGJ5CgkgIEp1bGlvIE1lcmlubywgY2xvc2luZyAjMTA0NDc1CgpTdW4gSmFuIDI2IDIwOjM4OjQzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogbW9yZSB3b3JrIG9uIFJlbGF4LU5HCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZC91cGRhdGVkIHRoZSAKCSAgcmVncmVzc2lvbiB0ZXN0cwoKU3VuIEphbiAyNiAwMTo0OTo1OCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IG1vcmUgd29yayBvbiBSZWxheC1ORwoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBhdWdtZW50ZWQvdXBkYXRlZCB0aGUgCgkgIHJlZ3Jlc3Npb24gdGVzdHMKClNhdCBKYW4gMjUgMTg6NTk6NTQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogUkVBRE1FOiB1cGRhdGVkIHRoZSBwb2xpY3kgb24gcHJpdmF0ZSBtYWlsIGFuc3dlcnMKCSogcmVsYXhuZy5jOiBtb3JlIHdvcmsgb24gUmVsYXgtTkcKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlIAoJICByZWdyZXNzaW9uIHRlc3RzCgpGcmkgSmFuIDI0IDE1OjEyOjQ0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVycm9yLmMgcGFyc2VyLmMgdHJlZS5jOiBhcHBsaWVkIGEgZG9jdW1lbnRhdGlvbiBwYXRjaCBmcm9tCgkgIFN0ZWZhbiBLb3N0CgpGcmkgSmFuIDI0IDAyOjAwOjUwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogbW9yZSB3b3JrIG9uIFJlbGF4LU5HCgkqIGRvYy8qOiByZWdlbmVyYXRlZCB0aGUgZG9jcwoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIGFuZCBhdWdtZW50ZWQgdGhlCgkgIFJlbGF4LU5HIHJlZ3Jlc3Npb24gdGVzdHMgYW5kIHJlc3VsdHMKClRodSBKYW4gMjMgMTk6MjY6MjAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIHJlbGF4bmcuYyBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmg6CgkgIEZpcnN0IGNvbW1pdCBvZiB0aGUgbmV3IFJlbGF4LU5HIHZhbGlkYXRpb24gY29kZSwgbm90IGdlbmVyYWxseQoJICB1c2VmdWwgeWV0LgoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBjdXJyZW50IHN0YXRlIG9mIHRoZSByZWdyZXNzaW9uCgkgIHRlc3RzCgpUaHUgSmFuIDIzIDE5OjIyOjU0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogbWluaW1pemVkIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBHZXRDb250ZW50CgkgIGFuZCBhIGJpdCBvZiBjbGVhbnVwLgoKVGh1IEphbiAyMyAxNzo0MTozNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBzZWVtcyB0aGVyZSBpcyBubyBnb29kIHJlYXNvbnMgdG8KCSAgbm90IGdlbmVyYXRlIGJpbmRpbmdzIGZvciBYUG9pbnRlcgoKVHVlIEphbiAyMSAxMzoxOTozNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBkb2MvYXBpYnVpbGQucHk6IGFwcGxpZWQgYSBuZXcgcGF0Y2ggZnJvbQoJICBTdOlwaGFuZSBCaWRvdWwgZm9yIGNsZWFudXBzCgkqIGRvYy9saWJ4bWwyLWFwaS54bWw6IHJlYnVpbHQgdGhlIEFQSSBkZXNjcmlwdGlvbiB3aXRoCgkgIG5ldyBlbnRyeSBwb2ludHMKCk1vbiBKYW4gMjAgMjM6MjU6MDAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgcHl0aG9uL2Rydl9saWJ4bWwyLnB5IHB5dGhvbi9nZW5lcmF0b3IucHkKCSAgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHkgcHl0aG9uL2xpYnhtbF93cmFwLmgKCSAgcHl0aG9uL3R5cGVzLmM6IHBhdGNoIGZyb20gU3TpcGhhbmUgQmlkb3VsIGZvciBiZXR0ZXIgcGVyCgkgIGNvbnRleHQgZXJyb3IgbWVzc2FnZSBBUElzCgkqIHB5dGhvbi90ZXN0cy9jdHh0ZXJyb3IucHkgcHl0aG9uL3Rlc3RzL3JlYWRlcmVyci5weToKCSAgdXBkYXRlIG9mIHRoZSB0ZXN0cwoKU3VuIEphbiAxOSAxNzowOToyOCBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL2d1aWRlbGluZXMuaHRtbAoJZ3JhbW1hciBhbmQgc3BlbGxpbmcgY2xlYW51cAoKRnJpIEphbiAxNyAwMDozMTozMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaCBweXRob24vZ2VuZXJhdG9yLnB5CgkgIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5IHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYXBwbGllZAoJICBhIHBhdGNoIGZyb20gU3TpcGhhbmUgQmlkb3VsIHRvIGFsbG93IHBlciBYTUx0ZXh0UmVhZGVyIGVycm9yCgkgIGFuZCB3YXJuaW5nIGhhbmRsaW5nCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcmVhZGVyZXJyLnB5OiBhZGRpbmcgdGhlCgkgIHNwZWNpZmljIHJlZ3Jlc3Npb24gdGVzdAoKVHVlIEphbiAxNCAxNzowMDowOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBBbGV4ZXkgRWZpbW92IHBvaW50ZWQgb3V0IHRoYXQgY29uY2F0KCdhJywgJ2InLCApCgkgIHNob3VsZCByYWlzZSBhIHN5bnRheCBlcnJvcgoKVHVlIEphbiAxNCAxNTozOToxNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmM6IGNsZWFudXAgcGF0Y2ggZnJvbSBTdOlwaGFuZSBCaWRvdWwKClR1ZSBKYW4gMTQgMTQ6NDE6MTggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogZml4aW5nIGJ1ZyAjMTAzMTAwIHdpdGggYSBkdW1teSBVVEY4VG9VVEY4IGNvcHkKClR1ZSBKYW4gMTQgMTI6NDA6MjkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weQoJICBweXRob24vbGlieG1sX3dyYXAuaCBweXRob24vdHlwZXMuYzogYXBwbGllZCBhbmQgZml4ZWQgYSBwYXRjaAoJICBmcm9tIFN06XBoYW5lIEJpZG91bCB0byBwcm92aWRlIHBlciBwYXJzZXIgZXJyb3IgaGFuZGxlcnMgYXQgdGhlCgkgIFB5dGhvbiBsZXZlbC4KCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9jdHh0ZXJyb3IucHk6IGFkZGVkIGEKCSAgcmVncmVzc2lvbiB0ZXN0IGZvciBpdC4KClR1ZSBKYW4gMTQgMDE6MTU6MDQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IGZpeGVkIHRoZSBzdHJlYW1pbmcgcHJvcGVydHkgb2YgdGhlIHJlYWRlciwKCSAgaXQgd2FzIGdlbmVyYXRpbmcgdHJlZSBmYXN0ZXIgdGhhbiBjb25zdW1pbmcgaXQuIFBvaW50ZWQgb3V0CgkgIGJ5IE5hdGUgTXllcnMKCSogdHJlZS5jOiBmaXhlZCBhIGJ1ZyBpbiB4bWxTYXZlRm9ybWF0RmlsZUVuYyBpZiBwYXNzZWQgYSBOVUxMIGRvYwoKU3VuIEphbiAxMiAyMjoxODowMiBDRVQgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYWRkZWQgbW9yZSB4bWxyZWFkZXIgYW5kIG90aGVyIGV4cG9ydHMKCkZyaSBKYW4gMTAgMTg6MDQ6MzIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4IHRvIHRoZSBYUGF0aCBpbXBsZW1lbnRhdGlvbiBmb3IgcGFyZW50IGFuZAoJICBhbmNlc3RvcnMgYXhpcyB3aGVuIG9wZXJhdGluZyBvbiBhIFJlc3VsdCBWYWx1ZSBUcmVlLgoJICBGaXhlcyBidWcgIzEwMDI3MQoKRnJpIEphbiAxMCAxNzowNzowMSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYyB4bWxJTy5jOiBwYXRjaCBmcm9tIFN0ZWZhbm8gWmFjY2hpcm9saQoJICB0byBmaXggc29tZSBVUkkvZmlsZSBlc2NhcGluZyBwcm9ibGVtcwoKRnJpIEphbiAxMCAxNjoyMDozNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBmaXhlZCBhIGJ1ZyByYWlzZWQgYnkgUmF5bW9uZCBXaWtlciwgCgkgIGRvY1NldFJvb3RFbGVtZW50KCkgc2hvdWxkIG5vdCByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlCgkgIHJldHVybiBpcyBOb25lCgpGcmkgSmFuIDEwIDE0OjEzOjAzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sOgoJICBmaXhlZCBidWcgIzEwMjE4MSBieSBhcHBseWluZyB0aGUgc3VnZ2VzdGVkIGNoYW5nZSBhbmQgZml4aW5nCgkgIHRoZSBnZW5lcmF0aW9uL3JlZ2lzdHJhdGlvbiBwcm9ibGVtLgoKRnJpIEphbiAxMCAxMzo0Nzo1NSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGJ1ZyAjMTAyOTYwIGJ5IHJldXNpbmcgdGhlIFhNTCBuYW1lIHBhcnNpbmcKCSAgcm91dGluZXMuCgpGcmkgSmFuIDEwIDAwOjE2OjQ5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBvbmUgbW9yZSBJc0VtcHR5RWxlbWVudCBjcmF6eW5lc3MsIHRoYXQgdGltZSBpbgoJICBleHRlcm5hbCBwYXJzZWQgZW50aXRpZXMgaWYgc3Vic3RpdHV0aW9uIGlzIGFza2VkLgoJKiBweXRob24vdGVzdHMvcmVhZGVyMy5weTogYWRkZWQgYSBzcGVjaWZpYyB0ZXN0LgoKVGh1IEphbiAgOSAyMjozNTozMSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZHJ2X2xpYnhtbDIucHk6IHVwZGF0ZSBmcm9tIFN06XBoYW5lIEJpZG91bDogcHl0aG9uIDIuMQoJICBzdXBwb3J0IGFuZCBpbXByb3ZlZCBlcnJvciBoYW5kbGVyIHJlZ2lzdHJhdGlvbgoKVGh1IEphbiAgOSAxNDoxNjozOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIHRyZWUuYzogZml4ZXMgIzEwMjkyMCBhYm91dCBuYW1lc3BhY2UgaGFuZGxpbmcgaW4KCSAgSFRNTCBvdXRwdXQgYW5kIHNlY3Rpb24gMTYuMiAiSFRNTCBPdXRwdXQgTWV0aG9kIiBvZiBYU0xULTEuMAoJKiBSRUFETUU6IGZpeGVkIGEgbGluawoKV2VkIEphbiAgOCAxODozMjoyNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gZG9jLyogTkVXUzogcHJlcGFyaW5nIDIuNS4xIHJlbGVhc2UKCSogU0FYLmMgcGFyc2VyLmM6IGZpeGluZyBYbWxUZXh0UmVhZGVyIGJ1ZwoKV2VkIEphbiAgOCAwMDoxMzowMSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogZnVjaywgSSBpbnRyb2R1Y2VkIGEgbWVtb3J5IGxlYWsgb24gZXh0ZXJuYWwgcGFyc2VkCgkgIGVudGl0aWVzIGluIDIuNS4wIDotKAoKVHVlIEphbiAgNyAxMjoxMjo0NSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFub3RoZXIgZml4IG5lZWRlZCBhcyBwb2ludGVkIGJ5IENocmlzdG9waGUgTWVybGV0CgkgIGZvciAtLXN0cmVhbSAtLWRlYnVnIGlmIGNvbXBpbGVkIHdpdGhvdXQgZGVidWcgc3VwcG9ydC4KCk1vbiBKYW4gIDYgMjA6NTM6MDggTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxsaW50LnhtbAoJKiBkb2MveG1sbGludC4xOgoJdXBkYXRlIG1hbiBwYWdlIHdpdGggLS1zdHJlYW0gYW5kIC0tY2hrcmVnaXN0ZXIKClR1ZSBKYW4gIDcgMDE6MTc6MjYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jOiBmaXhlZCAtLXdpdGgtdGhyZWFkcyBjb21waWxlCgkqIHhtbGxpbnQuYzogZml4ZWQgLS13aXRob3V0LWRlYnVnIGNvbXBpbGUKCSogaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oOiBjbGVhbnVwCgkqIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaDogYWRkIGEgbWlzc2luZyBpbmNsdWRlCgpNb24gSmFuICA2IDE0OjA2OjA3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBORVdTOiBwcmVwYXJpbmcgMi41LjAgcmVsZWFzZQoJKiBTQVguYzogb25seSB3YXJuIGluIHBlZGFudGljIG1vZGUgYWJvdXQgbmFtZXNwYWNlIG5hbWUgCgkgIGJyb2tlbmVzcwoJKiBnbG9iYWxzLmM6IGZpeCBhIGRvYyBnZW5lcmF0aW9uIHByb2JsZW0KCSogdXJpLmM6IGZpeCAjMTAxNTIwCgkqIGRvYy8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2MgZm9yIHRoZSByZWxlYXNlLCBpbmNsdWR1ZGluZwoJICBzdHlsZXNoZWV0IHVwZGF0ZQoJKiBweXRob24vTWFrZWZpbGUuYW06IGZpeCBhIGZpbGVuYW1lIGJ1ZwoKTW9uIEphbiAgNiAxMjowNToxMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvdHV0b3JpYWwvKiA6IGZpeGVkICMxMDE4OTQgaWYgZG9jID09IE5VTEwgeG1sRnJlZURvYyAKCSAgc2hvdWxkIG5vdCBiZSBjYWxsZWQuCgpNb24gSmFuICA2IDExOjU5OjA5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC0yLjAucGMuaW46IGFwcGxpZWQgdGhlIHBhdGNoIHRvIGZpeCAjMTAxODk0CgpTdW4gSmFuICA1IDIzOjM1OjQ3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyA6IGFwcGxpZWQgcGF0Y2ggZnJvbSBMdWthcyBTY2hyb2VkZXIgZm9yIHJlZ2lzdGVyIGNhbGxiYWNrcwoJKiB2YWxpZC5jOiBtb2RpZmllZCBwYXRjaCBmcm9tIEx1a2FzIFNjaHJvZWRlciB0byB0ZXN0CgkgIHJlZ2lzdGVyIGNhbGxiYWNrcyB3aXRoIC0tY2hrcmVnaXN0ZXIKClN1biBKYW4gIDUgMDI6MjM6MjAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IHNlcmlvdXNseSBjaGFuZ2VkIHRoZSB3YXkgZGF0YSBhcmUgcHVzaGVkIHRvCgkgIHRoZSB1bmRlcmx5aW5nIHBhcnNlciwgZ28gYnkgYmxvY2sgb2YgNTEyIGJ5dGVzIGluc3RlYWQgb2YKCSAgdHJ5bmcgdG8gZGV0ZWN0IHRhZyBib3VuZGFyaWVzIGF0IHRoYXQgbGV2ZWwuIENoYW5nZWQgdGhlCgkgIHdheSBlbXB0eSBlbGVtZW50IGFyZSBkZXRlY3RlZCBhbmQgdGFnZ2VkLgoJKiBweXRob24vdGVzdHMvcmVhZGVyLnB5IHB5dGhvbi90ZXN0cy9yZWFkZXIyLnB5CgkgIHB5dGhvbi90ZXN0cy9yZWFkZXIzLnB5OiBzbWFsbCBjaGFuZ2VzIG1vc3RseSBkdWUgdG8gY29udGV4dAoJICByZXBvcnRpbmcgYmVpbmcgZGlmZmVyZW50IGFuZCBEVEQgbm9kZSBiZWluZyByZXBvcnRlZC4gU29tZQoJICBlcnJvcnMgcHJldmlvdXNseSB1bmRldGVjdGVkIGFyZSBub3cgY2F1Z2h0IGFuZCBmaXhlZC4KCSogZG9jL3htbHJlYWRlci5odG1sOiBmbGFnZ2VkIGxhc3Qgc2VjdGlvbiBhcyBUT0RPCgpTYXQgSmFuICA0IDIwOjQwOjI4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwucHk6IGludGVncmF0ZWQgdGhlIFB5dGhvbiAyLjIgb3B0aW1pemF0aW9ucwoJICBmcm9tIEhhbm51IEtyb3NpbmcsIHdoaWxlIG1haW50YWluaW5nIGNvbXBhdGliaWxpdHkgd2l0aCAKCSAgMS41IGFuZCAyLjEKClNhdCBKYW4gIDQgMTc6MzM6MTcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhIGJpdCBvZiBjbGVhbnVwCgkqIHhtbHJlYWRlci5jOiBzbWFsbCBmaXgKCSogZG9jL3htbHJlYWRlci5odG1sOiBtb3JlIHdvcmsgb24gdGhlIFhtbFRleHRSZWFkZXIgdHV0b3JpYWwKCSogcHl0aG9uL2xpYnhtbC5weTogYSBmZXcgZml4ZXMgcG9pbnRlZCBvdXQgYnkgSGFubnUgS3Jvc2luZwoKU2F0IEphbiAgNCAxMzo0NjoxNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vc2V0dXAucHkuaW46IHBhdGNoIGZyb20gU3TpcGhhbmUgQmlkb3VsIHRvIGluY2x1ZGUKCSAgZHJ2X2xpYnhtbDIucHkgaW4gc2V0dXAucHkKClNhdCBKYW4gIDQgMDE6NDM6MDYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL3htbHJlYWRlci5odG1sOiBzdGFydGluZyBkb2N1bWVudGluZyB0aGUgbmV3IFhtbFRleHRSZWFkZXIKCSAgaW50ZXJmYWNlLgoKRnJpIEphbiAgMyAxNzoxODozMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFkZGVkIHRoZSAtLXN0cmVhbSBmbGFnIHRvIHVzZSB0aGUgVGV4dFJlYWRlciBBUEkKCSogeG1scmVhZGVyLmM6IHNtYWxsIHBlcmZvcm1hbmNlIHR3ZWFrCgpGcmkgSmFuICAzIDEzOjUwOjU1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIHB5dGhvbi90ZXN0cy9yZWFkZXIycHk6IG9rYXkgdGhlIERURCB2YWxpZGF0aW9uCgkgIGNvZGUgb24gdG9wIG9mIHRoZSBYTUxUZXh0UGFyc2VyIEFQSSBzaG91bGQgYmUgc29saWQgbm93LgoKRnJpIEphbiAgMyAwMjoxNzoxOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyMnB5OiBGaXhpbmcgc29tZSBtb3JlIG1lc3MKCSAgd2l0aCB2YWxpZGF0aW9uIGFuZCByZWN1cnNpdmUgZW50aXRpZXMgd2hpbGUgdXNpbmcgdGhlCgkgIHJlYWRlciBpbnRlcmZhY2UsIGl0J3MgZ2V0dGluZyBhIGJpdCBtZXNzeS4uLgoKVGh1IEphbiAgMiAxNToxNToyNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyLnB5OiBhbm90aGVyIGNvdXBsZSBvZiBwcm9ibGVtCgkgIHJlbGF0ZWQgdG8gSXNFbXB0eUVsZW1lbnQgcmVwb3J0ZWQgYnkgU3TpcGhhbmUgQmlkb3VsIG5lZWRlZCAKCSAgc29tZSBmaXhlcy4KClRodSBKYW4gIDIgMTM6NTc6MDcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW4gcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi9kcnZfbGlieG1sMi5weToKCSAgaW50ZWdyYXRlZCBkcnZfbGlieG1sMi5weSBQeXRob24geG1sLnNheCBkcml2ZXIgZnJvbSBTdOlwaGFuZSBCaWRvdWwKCSAgYmFzZWQgb24gdGhlIHB5dGhvbiBYbWxUZXh0UmVhZGVyIGludGVyZmFjZS4KCldlZCBKYW4gIDEgMjI6MDU6NDAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBiYWNraW5nIG91dCBvbmUgY2hhbmdlIGluIHRoZSBsYXN0IHBhdGNoIHdoaWNoIGJyb2tlIHRoZQoJICByZWdyZXNzaW9uIHRlc3RzCgpXZWQgSmFuICAxIDIxOjU3OjI4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbC5kYXRhIGdsb2JhbHMuYyB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oOiBhcHBsaWVkCgkgIGFuIG9sZCBwYXRjaCBmcm9tIEx1a2FzIFNjaHJvZWRlciB0byB0cmFjayBub2RlIGNyZWF0aW9uIGFuZAoJICBkZXN0cnVjdGlvbi4gUHJvYmFibHkgbWlzc2luZyBhIGxvdCBvZiByZWZlcmVuY2VzIGF0IHRoZSBtb21lbnQKCSAgYW5kIG5vdCB1c2FibGUgcmVsaWFibHkuCgpXZWQgSmFuICAxIDIwOjEyOjA3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1MgZG9jL01ha2VmaWxlLmFtIGRvYy9uZXdzLnhzbDogZ2VuZXJhdGUgdGhlIE5FV1MgZmlsZQoJICBmcm9tIGRvYy9uZXdzLmh0bWwgYW5kIGEgc3R5bGVzaGVldAoKV2VkIEphbiAgMSAxNjowOTo1NyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyLnB5OiBmaXhlZCBhbm90aGVyIGNvdXBsZSBvZgoJICB4bWxyZWFkZXIgYnVncyByZXBvcnRlZCBieSBTdOlwaGFuZSBCaWRvdWwgYW5kIGFkZGVkIHRlc3RzLgoKV2VkIEphbiAgMSAxNTo0Mjo1NCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyMi5weTogZml4ZWQgYW5vdGhlciB2YWxpZGl0eQoJICBjaGVja2luZyBpbiBleHRlcm5hbCBwYXJzZWQgZW50aXRpZXMgcmFpc2VkIGJ5IFN06XBoYW5lIEJpZG91bAoJICBhbmQgYWRkZWQgYSBzcGVjaWZpYyByZWdyZXNzaW9uIHRlc3QuCgkqIHB5dGhvbi90ZXN0cy9yZWFkZXIzLnB5OiBjbGVhbnVwCgpUdWUgRGVjIDMxIDE1OjQ0OjAyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIHB5dGhvbi90ZXN0cy9yZWFkZXIyLnB5OiBmaXhlZCBhIHByb2JsZW0gd2l0aAoJICB2YWxpZGF0aW9uIHdpdGhpbiBlbnRpdGllcyBwb2ludGVkIGJ5IFN06XBoYW5lIEJpZG91bCwgYXVnbWVudGVkCgkgIHRoZSB0ZXN0cyB0byBjYXRjaCB0aG9zZS4KClR1ZSBEZWMgMzEgMTI6MTU6MzcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weTogbW9kaWZpZWQgdGhlIGdlbmVyYXRvciB0byBhbGxvdyBrZWVwaW5nCgkgIGNsYXNzIHJlZmVyZW5jZXMgd2hlbiBjcmVhdGluZyBuZXcgY2xhc3NlcywgbmVlZGVkIHRvIGZpeCBhIGJ1ZwoJICBwb2ludGVkIGJ5IFN06XBoYW5lIEJpZG91bCB3aGVyZSB0aGUgaW5wdXQgYnVmZmVyIG9mIHRoZQoJICB4bWxUZXh0UmVhZGVyIGluc3RhbmNlIGdldHMgZGVzdHJveWVkIGlmIHRoZSBweXRob24gd3JhcHBlciBmb3IKCSAgdGhlIGlucHV0IGlzIG5vdCByZWZlcmVuY2VkIGFueW1vcmUuCgpNb24gRGVjIDMwIDE5OjM5OjM2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IGZpeGVkIGFub3RoZXIgcGFpciBvZiBwcm9ibGVtCgkgIHBvaW50ZWQgYnkgU3TpcGhhbmUgQmlkb3VsOiBkZXB0aCBzdGFydCBhdCAwIGFuZCBhIHBhcnNlIHByb2JsZW0uCgpNb24gRGVjIDMwIDEzOjM2OjUwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IGZpeGVkIGFub3RoZXIgcHJvYmxlbQoJICBwb2ludGVkIGJ5IFN06XBoYW5lIEJpZG91bAoKTW9uIERlYyAzMCAxMjozOTo1NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyLnB5OiBmaXhlZCBhIGxpbWl0IGNhc2UgcHJvYmxlbQoJICB3aXRoICI8YS8+IgoKTW9uIERlYyAzMCAxMTo1Mzo0NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogd2FybiBvbiB4bWxuczpwcmVmaXg9ImZvbyIKCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlci5weTogZml4ZWQgYSBjb3VwbGUgb2YgcHJvYmxlbQoJICBmb3IgbmFtZXNwYWNlIGF0dHJpYnV0ZXMgaGFuZGxpbmcuCgpNb24gRGVjIDMwIDAwOjU5OjA3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVudGl0aWVzLmMgcGFyc2VyLmMgdHJlZS5jIGluY2x1ZGUvbGlieG1sL2VudGl0aWVzLmg6IEZpeGVkCgkgIGEgcmVhbGx5IG5hc3R5IHByb2JsZW0gcmFpc2VkIGJ5IGEgRG9jQm9vayBYU0xUIHRyYW5zZm9ybQoJICBwcm92aWRlZCBieSBTZWJhc3RpYW4gQmVyZ21hbm4KClN1biBEZWMgMjkgMTI6MTM6MTggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlci5weTogZml4ZWQgYSBidWcgcG9pbnRlZCBvdXQKCSAgYnkgU3TpcGhhbmUgQmlkb3VsIGFuZCBpbnRlZ3JhdGVkIGl0IGludG8gdGhlIHRlc3RzCgpTYXQgRGVjIDI4IDIzOjQ5OjEyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oIGRvYy9saWJ4bWwyLWFwaS54bWw6CgkgIGV4dGVuZGVkIHRoZSBYbWxUZXh0UmVhZGVyIEFQSSBhIGJpdCwgYWRkZGluZyBhY2Nlc3NvcnMgZm9yCgkgIHRoZSBjdXJyZW50IGRvYyBhbmQgbm9kZSwgYW5kIGFuIGVudGl0eSBzdWJzdGl0dXRpb24gbW9kZSBmb3IKCSAgdGhlIHBhcnNlci4KCSogcHl0aG9uL2xpYnhtbC5weSBweXRob24vbGlieG1sMmNsYXNzLnR4dDogcmVsYXRlZCB1cGRhdGVzCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcmVhZGVyLnB5IAoJICBweXRob24vdGVzdHMvcmVhZGVyMi5weSBweXRob24vdGVzdHMvcmVhZGVyMy5weTogdXBkYXRlZCBhIGJpdAoJICB0aGUgb2xkIHRlc3RzIGFuZCBhZGRlZCBhIG5ldyBvbmUgdG8gdGVzdCB0aGUgZW50aXRpZXMgaGFuZGxpbmcKClNhdCBEZWMgMjggMjI6MTE6NTcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sMmNsYXNzLnR4dCAKCSAgcHl0aG9uL3Rlc3RzL3JlYWRlci5weSBweXRob24vdGVzdHMvcmVhZGVyMi5weTogY2hhbmdlZCB0aGUKCSAgZ2VuZXJhdG9yIHRvIHByb3ZpZGUgY2FzaW5nIGZvciB0aGUgWG1sVGV4dFJlYWRlciBzaW1pbGFyIHRvCgkgIEMjIHNvIHRoYXQgZXhhbXBsZXMgYW5kIGRvY3VtZW50YXRpb24gYXJlIG1vcmUgZGlyZWN0bHkgdHJhbnNwb3NhYmxlLgoJICBGaXhlZCB0aGUgY291cGxlIG9mIHRlc3RzIGluIHRoZSBzdWl0ZS4KClNhdCBEZWMgMjggMTU6NTU6MzIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2d1aWRlbGluZXMuaHRtbDogYWRkZWQgYSBkb2N1bWVudCBvbiBndWlsZGVsaW5lIGZvcgoJICBwdWJsaXNoaW5nIGFuZCBkZXBsb3lpbmcgWE1MCgpGcmkgRGVjIDI3IDIwOjM1OjE1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmMgeG1scmVhZGVyLmM6IGZpbmFsIHRvdWNoIHJ1bm5pbmcgRFREIHZhbGlkYXRpb24KCSAgb24gdGhlIFhtbFRleHRSZWFkZXIKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWFkZXIyLnB5OiBhZGRlZCBhCgkgIHNwZWNpZmljIHJ1biBiYXNlZCBvbiB0aGUgZXhhbXBsZXMgZnJvbSB0ZXN0L3ZhbGlkLyoueG1sCgpGcmkgRGVjIDI3IDE1OjE3OjIwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwucHk6IGFkZGVkIGEgZmV3IHByZWRlZmluZWQgeG1sVGV4dFJlYWRlciBwYXJzZXIKCSAgY29uZmlndXJhdGlvbiB2YWx1ZXMuCgpGcmkgRGVjIDI3IDEyOjU3OjIyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWxfd3JhcC5oOiB0cnlpbmcgdG8gZml4ICMxMDIwMzcKCkZyaSBEZWMgMjcgMTI6MTg6MTQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGZpeGluZyBidWcgIzk1Mjk2LCB3aGVuIHRoZSBwcmVkZWZpbmVkIGVudGl0aWVzCgkgIGFyZSByZWRlZmluZWQgaW4gdGhlIERURCB0aGUgZGVmYXVsdCBvbmUgbXVzdCBiZSB1c2VkCgkgIGluc3RlYWQgYW55d2F5LgoKV2VkIERlYyAyNSAxOToyMjowNiBNU1QgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGxpbnQueG1sCgkqIGRvYy94bWxsaW50LjEKCUFkZCBkaXNjdXNzaW9uIG9mIFhNTF9ERUJVR19DQVRBTE9HIHRvIHhtbGxpbnQgbWFuCglwYWdlIC0gYnVnICMxMDA5MDcKCk1vbiBEZWMgMjMgMTY6NTQ6MjIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IEZpeGVkIHRoZSBlbXB0eSBub2RlIGRldGVjdGlvbiB0byBhdm9pZCByZXBvcnRpbmcKCSAgYW4gaW5leGlzdGFudCBjbG9zZSB0YWcuCgpNb24gRGVjIDIzIDE1OjQyOjI0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYyBweXRob24vc2V0dXAucHkuaW46IHBhdGNoIGZyb20gU3TpcGhhbmUgQmlkb3VsCgkgIGZvciBQeXRob24gMi4xCgpTdW4gRGVjIDIyIDExOjI0OjA2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3RDMTROLmMgdm1zL2NvbmZpZy52bXM6IGFwcGxpZWQgQ3JhaWcgQS4gQmVycnkgcGF0Y2hlcyBmb3IgVk1TCgpGcmkgRGVjIDIwIDExOjI3OjQ5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9saWJ4bWwyLWFwaS54bWwgcHl0aG9uL3Rlc3RzL3JlYWRlci5weTogb25lIHJlYWxseSBuZWVkCgkgIHRvIHByb3ZpZGUgdGhlIGJhc2UgVVJJIGluZm9ybWF0aW9uIHdoZW4gY3JlYXRpbmcgYSByZWFkZXIgcGFyc2VyCgkgIGZyb20gYW4gaW5wdXQgc3RyZWFtLiBVcGRhdGVkIHRoZSBBUEkgYW5kIHRoZSBleGFtcGxlIHVzaW5nIGl0LgoKRnJpIERlYyAyMCAwMToxMTozMCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0UmVhZGVyLmMgeG1scmVhZGVyLmMgdmFsaWQuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmgKCSAgaW5jbHVkZS9saWJ4bWwvdmFsaWQuaCBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogd29ya2luZyBvbgoJICBEVEQgdmFsaWRhdGlvbiBvbiB0b3Agb2YgeG1sIHJlYWRlciBpbnRlcmZhY2VzLiBBbGxvd3MgdG8KCSAgdmFsaWRhdGUgYXJiaXRyYXJ5IGxhcmdlIGluc3RhbmNlcy4gVGhpcyByZXF1aXJlZCBzb21lIGV4dGVuc2lvbnMKCSAgdG8gdGhlIHZhbGlkIG1vZHVsZSBpbnRlcmZhY2UgYW5kIGF1Z21lbnRpbmcgdGhlIHNpemUgb2YgeG1sSUQKCSAgYW5kIHhtbFJlZiBzdHJ1Y3RzIGEgYml0LgoJKiB1cmkuYyB4bWxyZWdleHAuYzogc2ltcGxlIGNsZWFudXAuCgpXZWQgRGVjIDE4IDE1OjUxOjIyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oIGRvYy9saWJ4bWwyLWFwaS54bWw6IG1vcmUKCSAgd29yayBvbiB0aGUgeG1sIHJlYWRlciBpbnRlcmZhY2VzLgoJKiBBVVRIT1JTIE1BSU5UQUlORVJTIGRvYy8qIHdpbjMyLyo6IHVwZGF0ZWQgSWdvcidzIG1haWwgYW5kIHRoZQoJICBXZWIgcGFnZSBmb3IgdGhlIFdpbmRvd3MgYmluYXJpZXMuCgpUdWUgRGVjIDE3IDE5OjMxOjA3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGFwcGxpZWQgYSBwYXRjaCBmb3IgVk1TIGZvbGxvd2luZyB0aGUgcmVwb3J0IGJ5CgkgIE5pZ2VsIEhhbGwKClR1ZSBEZWMgMTcgMTE6Mjk6NDEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHRoZSBwYXJzZVN0YXJ0VGFnIGJ1ZyBmaXggd2Fzbid0IGNvbXBsZXRlLgoKTW9uIERlYyAxNiAyMzowMDowNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogVnlhY2hlc2xhdiBQaW5keXVyYSBtYW5hZ2VkIHRvIHRyaWdnZXIgYSBidWcgaW4KCSAgcGFyc2VTdGFydFRhZywgZml4aW5nIGl0LgoJKiB0ZXN0L2F0dDQgcmVzdWx0L2F0dDQgcmVzdWx0L25vZW50L2F0dDQ6IGFkZGluZyB0aGUgdGVzdAoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaCBkb2MvbGlieG1sMi1hcGkueG1sOiBhZGRlZAoJICBtb3JlIG1ldGhvZHMgdG8gWG1sVGV4dFJlYWRlci4KCk1vbiBEZWMgMTYgMTk6MzE6MTYgQ0VUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGFkZGVkIG1vcmUgeG1sIHJlYWRlciBleHBvcnRzCgkqIHdpbjMyL01ha2VmaWxlLm1zdmMgd2luMzIvTWFrZWZpbGUubWluZ3c6IGFkZGVkIHhtbCByZWFkZXIgaW50ZXJmYWNlCgkgIHRvIHRoZSBidWlsZAoKTW9uIERlYyAxNiAwNjozNjo1NCBNU1QgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnhtbAoJcGx1cyBnZW5lcmF0ZWQgaHRtbCBhbmQgcGRmCglVcGRhdGluZyB0dXRvcmlhbCBhZ2FpbiBiYXNlZCBvbiBmdXJ0aGVyIGNvbW1lbnRzIGZyb20gTmlyYWoKCVRvbGlhIG9uIHRoZSBsYXN0IGl0ZXJhdGlvbgoKU3VuIERlYyAxNSAyMToyNzozMCBNU1QgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnhtbAoJKiBkb2MvdHV0b3JpYWwvaW5jbHVkZWtleXdvcmQuYwoJKiBkb2MvdHV0b3JpYWwvaW5jbHVkZWdldGF0dHJpYnV0ZS5jCglwbHVzIGdlbmVyYXRlZCBodG1sIGFuZCBwZGYKCUFkZGluZyBmaXggZnJvbSBOaXJhaiBUb2xpYSB0byB0dXRvcmlhbCB0byBwcm9wZXJseSBmcmVlIG1lbW9yeS4KCk1vbiBEZWMgMTYgMDA6MzQ6MjUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmggZG9jL2xpYnhtbDItYXBpLnhtbDogYWRkZWQKCSAgbW9yZSBtZXRob2RzIG9mIFhtbFRleHRSZWFkZXIuCgkqIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IHRoaXMgaW5jcmVhc2VkIHRoZQoJICBtZXRob2RzIGluIHRoZSBibmRpbmdzLCBhdWdtZW50ZWQgdGhlIHRlc3QgdG8gY2hlY2sgdGhvc2UgbmV3CgkgIGZ1bmN0aW9ucy4KClNhdCBEZWMgMTQgMjM6NTc6MzkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgZG9jL2xpYnhtbDItYXBpLnhtbDogYWRkZWQgdGhlIGNsb3NlIGFuZCBnZXRhdHRyaWJ1dGUKCSAgbWV0aG9kcyBvZiBYbWxUZXh0UmVhZGVyLgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi90eXBlcy5jIAoJICBweXRob24vbGlieG1sMmNsYXNzLnR4dDogYWRkZWQgdGhlIHJlYWRlciB0byB0aGUgUHl0aG9uIGJpbmRpbmdzCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcmVhZGVyLnB5OiBhZGRlZCBhIHNwZWNpZmljCgkgIHRlc3QgZm9yIHRoZSBQeXRob24gYmluZGluZ3Mgb2YgdGhlIFJlYWRlciBBUElzCgkqIHBhcnNlci5jOiBzbWFsbCBjbGVhbnVwLgoKRnJpIERlYyAxMyAxMTozOTo0NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBmYWxsYmFjayB3YXMgb25seSBjb3B5aW5nIHRoZSBmaXJzdCBjaGlsZCBub3QgdGhlCgkgIGZ1bGwgY2hpbGQgbGlzdCBvZiB0aGUgZmFsbGJhY2sgZWxlbWVudCwgY2xvc2VzICM4OTY4NCBhcyByZW9wZW5lZAoJICBieSBCZXJuZCBLdWVtbWVybGVuCgpUaHUgRGVjIDEyIDEzOjM0OjU5IENFVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBleHBvcnRlZCBodG1sTm9kZUR1bXBPdXRwdXQKClRodSBEZWMgMTIgMTA6NTk6MTEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgcmVsZWFzZSBvZiAyLjQuMzAKCSogZG9jL2FwaWJ1aWxkLnB5IGRvYy9saWJ4bWwyLWFwaS54bWw6IGZpeHVwcyB0byB0aGUgYXBpIGJ1aWxkZXIsCgkgIGdpdmVzIGVudW0gdmFsdWVzLCBmaXggZnVuY3R5cGUgcmV0dXJuIHR5cGUsIHB1dCBiYWNrIGZpZWxkcyBpbgoJICBzdHJ1Y3RzIAoJKiBkb2MvKjogdXBkYXRlZCB0aGUgZG9jcyByZWJ1aWx0CgpUaHUgRGVjIDEyIDAxOjA5OjM0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgaW5jbHVkZS9saWJ4bWwvSFRNTHRyZWUuaDogcGF0Y2ggZnJvbSBNYXJrIFZha29jCgkgIGFib3V0IGh0bWxOb2RlRHVtcE91dHB1dCBsb2NhdGlvbi4KCSogeHBhdGguYzogcmVtb3ZlZCBhbiB1bmRlZmluZWQgZnVuY3Rpb24gc2lnbmF0dXJlCgkqIGRvYy9hcGlidWlsZC5weSBkb2MvbGlieG1sMi1hcGkueG1sOiB0aGUgc2NyaXB0IHdhcyBleHBvcnRpbmcKCSAgdG9vIG1hbnkgc3ltYm9scyBpbiB0aGUgQVBJIGJyZWFraW5nIHRoZSBweXRob24gYmluZGluZ3MuCgkgIFVwZGF0ZWQgd2l0aCB0aGUgbGlieHNsdC9saWJleHNsdCBjaGFuZ2VzLgoKV2VkIERlYyAxMSAyMDoyNjoxNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyByZWxlYXNlIG9mIDIuNC4yOQoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jcyBhbmQgQVBJCgkqIHhtbHJlYWRlci5jOiBhIGZldyBtb3JlIGZpeGVzIGZvciB0aGUgWG1sVGV4dFJlYWRlciBBUEkKCldlZCBEZWMgMTEgMTg6MDE6MTUgQ0VUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IGFwcGxpZWQgbWluZ3cgcGF0Y2ggZnJvbSBNYWdudXMgSGVub2NoCgpXZWQgRGVjIDExIDE2OjU4OjQ4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYyBkb2MvbGlieG1sMi1hcGkueG1sOiBhIGJpdCBtb3JlIGNsZWFudXAKCldlZCBEZWMgMTEgMTQ6NTQ6NDcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2FwaWJ1aWxkLnB5IGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL01ha2VmaWxlLmFtOiBuZXcgQVBJCgkgIGJ1aWxkaW5nIFB5dGhvbiBzY3JpcHQsIGRvZXMgdGhlIEMgcGFyc2luZyBkaXJlY3RseSwgZ2VuZXJhdGVzCgkgIGEgYmV0dGVyIEFQSSBkZXNjcmlwdGlvbiBpbmNsdWRpbmcgc3RydWN0dXJlIGZpZWRzIGRlZnMgYW5kCgkgIGVudW1zLiBTdGlsbCBhIGNvdXBsZSBvZiBidWdzLCBidXQgZ29vZCBlbm91Z2ggZm9yIHRoZSBweXRob24KCSAgd3JhcHBlcnMgbm93LgoJKiBET0NCcGFyc2VyLmMgU0FYLmMgbmFub2h0dHAuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmMKCSAgdmFsaWQuYyB4bWxJTy5jIHhtbG1lbW9yeS5jIHhtbHJlYWRlci5jIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYwoJICBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBtb3JlCgkgIGNsZWFudXAgYmFzZWQgb24gdGhlIHB5dGhvbiBhbmFseXNpcyBzY3JpcHQgcmVwb3J0cy4KCSogbGlieG1sLnNwZWMuaW46IG1ha2Ugc3VyZSB0aGUgQVBJIFhNTCBkZXNjcmlwdGlvbiBpcyBwYXJ0IG9mIHRoZQoJICBkZXZlbCBwYWNrYWdlLgoKVHVlIERlYyAxMCAxNjoxNjozNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jIGMxNG4uYyBkZWJ1Z1hNTC5jIGVuY29kaW5nLmMgaGFzaC5jCgkgIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRlc3RDMTROLmMKCSAgdGVzdERvY2Jvb2suYyB0aHJlYWRzLmMgdHJlZS5jIHZhbGlkLmMgeG1sSU8uYyB4bWxsaW50LmMgeG1sbWVtb3J5LmMKCSAgeG1scmVhZGVyLmMgeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jIHhwYXRoLmM6CgkgIGNvZGUgY2xlYW51cCwgZXNwZWNpYWxseSB0aGUgZnVuY3Rpb24gY29tbWVudHMuCgkqIHRyZWUuYzogZml4ZWQgYSBzbWFsbCBidWcgd2hlbiBmcmVlaW5nIG5vZGVzIHdoaWNoIGFyZSBYSW5jbHVkZSBvbmVzLgoKTW9uIERlYyAgOSAxNTowODoxNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbQoJICBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogIEFkZGluZyBhIG5ldyBzZXQgb2YgQVBJcyBiYXNlZCBvbgoJICB0aGUgQyMgVGV4dFhtbFJlYWRlciBBUEkgYnV0IGNvbnZlcnRlZCB0byBDLiBBbGxvdyB0byBwYXJzZQoJICBpbiBjb25zdGFudCBtZW1vcnkgdXNhZ2UsIGZhciBzaW1wbGVyIHRvIHByb2dyYW0gYW5kIGV4cGxhaW4KCSAgdGhhbiB0aGUgU0FYIGxpa2UgQVBJcywgdW5maW5pc2hlZCBidXQgd29ya2luZy4KCSogdGVzdFJlYWRlci5jOiB0ZXN0IHByb2dyYW0KClN1biBEZWMgIDggMTg6MzY6MDEgQ0VUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGFwcGxpZWQgWUFMRFNQIGZyb20gTWFyayBWYWtvYwoKV2VkIERlYyAgNCAxNjowODo0OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IENoaXAgdHVybmVyIGluZGljYXRlZCB0aGF0IFhIVE1MMSBzZXJpYWxpemF0aW9uCgkgIHJ1bGUgZm9yIHN0eWxlIGFjdHVhbGx5IGJyZWFrIG9uIGJvdGggSUUgYW5kIE1vemlsbGEsIAoJICB0cnkgdG8gYXZvaWQgdGhlIHJ1bGUgaWYgZXNjYXBpbmcgYWluJ3QgbmVjZXNzYXJ5CgpXZWQgRGVjICA0IDEyOjQzOjI4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbmh0dHAuYzogaGFuZGxlIEhUVFAgVVJMIGVzY2FwaW5nLCBwcm9ibGVtIHJlcG9ydGVkIGJ5CgkgIEdsZW4gTmFrYW11cmEgYW5kIFN0ZWZhbm8gWmFjY2hpcm9saQoKU2F0IE5vdiAzMCAxMjoxOToxNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jIHBhcnNlci5jIHZhbGlkLmMgeHBhdGguYzogY29kZSBjbGVhbnVwCgpUaHUgTm92IDI4IDEyOjUzOjIyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jOiBKb2hhbm4gUmljaGFyZCBwb2ludGVkIG91dCBzb21lIFhQb2ludGVyIHByb2JsZW1zIGZvcgoJICBVUk4gYmFzZWQgVVJJIHJlZmVyZW5jZXMgaW4gWEluY2x1ZGUuIE1vZGlmaWVkIHRoZSBVUkkgcGFyc2luZwoJICBhbmQgc2F2aW5nIHJvdXRpbmVzIHRvIGFsbG93IGNvcnJlY3QgcGFyc2luZyBhbmQgc2F2aW5nIG9mIAoJICBYUG9pbnRlcnMsIGVzcGVjaWFsbHkgd2hlbiBhdHRhY2hlZCB0byAib3BhcXVlIiBzY2hlbWUgYWNjb3JkaW5nbHkKCSAgdG8gUkZDIDIzOTYKCldlZCBOb3YgMjcgMjA6MzY6MDggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9IVE1MdHJlZS5oOiBhcHBsaWVkIHRoZSBzYW1lIGtpbmQKCSAgb2YgcmVmYWN0b3JpbmcgdG8gdGhlIEhUTUwgc2F2aW5nIGNvZGUuCgkqIGRvYy9saWJ4bWwyLSoueG1sIGRvYy9BUEkqLmh0bWw6IHNsaWdodCBBUEkgY2hhbmdlcyBnb3QgcmVmbGVjdGVkCgkgIGluIHRoZSBkb2MuCgpXZWQgTm92IDI3IDEyOjQwOjE2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IHJlZmFjdG9yZWQgdGhlIFhNTCBkdW1wIG9mIGEgbm9kZQoJICB0byBhIGJ1ZmZlciBBUEkgdG8gcmV1c2UgdGhlIGdlbmVyaWMgZHVtcCB0byBhbiBPdXRwdXRJTyBsYXllciwKCSAgdGhpcyByZWR1Y2VzIGNvZGUsIGZpeGVzIHhtbE5vZGVEdW1wKCkgZm9yIFhIVE1MLCBhbHNvIG1hZGUKCSAgeG1sTm9kZUR1bXAoKSBub3cgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZSB3cml0dGVuLgoKV2VkIE5vdiAyNyAwOTowMDowMCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vc2V0dXAucHkuaW46IGFub3RoZXIgcGF0Y2ggZnJvbSBTdOlwaGFuZSBCaWRvdWwgZm9yIAoJICBQeXRob24gYmluZGluZ3Mgb24gV2luZG93cwoJKiBkb2MvcGFyc2VkZWNsLnB5OiBzbWFsbCBjbGVhbnVwCgpNb24gTm92IDI1IDE3OjI4OjUzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluIGNvbmZpZ3VyZS5pbjogYWRkIGEgbGluZSBpbiAlY2hhbmdlbG9nIGZvciByZWxlYXNlcwoKTW9uIE5vdiAyNSAxNDoxODoyNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogcGF0Y2ggZnJvbSBNYXJjdXMgQ2xhcmtlIGZpeGluZyBhIHByb2JsZW0gaW4gZW50aXRpZXMKCSAgcGFyc2luZyB0aGF0IHdhcyBkZXRlY3RlZCBpbiBLRGUgZG9jdW1lbnRhdGlvbnMgZW52aXJvbm1lbnQuCgpNb24gTm92IDI0IDE0OjEzOjIxIENFVCAyMDAyIEVSREkgR2VyZ28gPGNhY3R1c0BjYWN0dXMucnVsZXoub3JnPgoKCSogcHl0aG9uL2xpYnhtbC5jIChsaWJ4bWxfcHJldik6IFJldHVybiB0aGUgcHJldmlvdXMgYXMgb3Bwb3NlZCB0bwoJdGhlIG5leHQgbm9kZSAoSSBndWVzcyB0aGlzIGlzIHRoZSByZXN1bHQgb2Ygc29tZSBjdXQgJiBwYXN0ZSBwcm9ncmFtbWluZzopCgpTYXQgTm92IDIzIDE3OjIyOjIyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9NYWtlZmlsZS5hbTogSmFuIFJhZmFqIHBvaW50ZWQgYSBidWcgaW4gdGhlIE1ha2VmaWxlLgoKU2F0IE5vdiAyMyAxMjoyMToyNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vc2V0dXAucHkuaW46IHRyeWluZwoJICB0byBmaXggdGhlIFB5dGhvbiBiaW5kaW5ncyBidWlsZCBvbiBXaW5kb3dzIChTdOlwaGFuZSBCaWRvdWwpCgpGcmkgTm92IDIyIDIyOjQxOjM0IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogYWRkZWQgb3B0aW9uIGZvciBweXRob24gYmluZGluZ3MKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBhZGRlZCBtb3JlIGV4cG9ydHMKCkZyaSBOb3YgMjIgMTg6NTA6MzQgQ0VUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9NYWtlZmlsZS5taW5ndzogZml4ZWQgdW5yZXNvbHZlZCBzeW1ib2xzIHdoZW4gbGlua2luZyB3aXRoCgkgIHB0aHJlYWRzCgkqIHdpbjMyL3dpbmNlLyo6IGFwcGxpZWQgdXBkYXRlcyB0byBXaW5kb3dzIENFIHBvcnQgZnJvbSBKYXZpZXIKCkZyaSBOb3YgMjIgMTU6NTE6MjIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjI4CgkqIGxpYnhtbC5zcGVjLmluIGRvYy9NYWtlZmlsZS5hbTogc29tZSBjbGVhbnVwCgkqIGRvYy8qOiB1cGRhdGVkIHRoZSBuZXdzIGFuZCByZWdlbmVyYXRlZC4KCkZyaSBOb3YgMjIgMTQ6MTU6MTQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBmaW5hbCB0b3VjaCBhdCBjbG9zaW5nICM4NzIzNSA8L3A+IGVuZCB0YWdzCgkgIG5lZWQgdG8gYmUgZ2VuZXJhdGVkLgoJKiByZXN1bHQvSFRNTC9jZl8xMjguaHRtbCByZXN1bHQvSFRNTC90ZXN0Mi5odG1sIHJlc3VsdC9IVE1ML3Rlc3QzLmh0bWw6CgkgIHRoaXMgY2hhbmdlIHNsaWdodGx5IHRoZSBvdXRwdXQgb2YgYSBmZXcgdGVzdHMKCSogZG9jLyo6IHJlZ2VuZXJhdGVkCgpGcmkgTm92IDIyIDEzOjI2OjE5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBmaXhpbmcgYnVnICM5OTE5MCB3aGVuIFVURjggZG9jdW1lbnQgYXJlCgkgIHBhcnNlZCB1c2luZyB0aGUgcHJvZ3Jlc3NpdmUgcGFyc2VyIGFuZCB0aGUgZW5kIG9mIHRoZSBjaHVuawoJICBpcyBpbiB0aGUgbWlkZGxlIG9mIGFuIFVURjggbXVsdGlieXRlIGNoYXJhY3Rlci4KCkZyaSBOb3YgMjIgMTM6MTM6MDAgSEtUIDIwMDIgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB0aHJlYWRzLmM6IGZpeGVkIGluaXRpYWxpemF0aW9uIHByb2JsZW0gaW4geG1sTmV3R2xvYmFsU3RhdGUKCSAgd2hpY2ggd2FzIGNhdXNpbmcgY3Jhc2guCgkqIGdsb2JhbHMuYzogcmVtb3ZlZCBkdXBsaWNhdGUgY2FsbCB0byBpbml0eG1sRGVmYXVsdFNBWEhhbmRsZXIKCSAgaW4geG1sSW5pdGlhbGl6ZUdsb2JhbFN0YXRlLgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogY2xlYW5lZCB1cCBjdHh0LT5zYXggaW5pdGlhbGlzYXRpb24uCgpUaHUgTm92IDIxIDE1OjA1OjQ1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IG1vZGlmaWVkIHRoZSBleGlzdGluZyBBUElzCgkgIHRvIGhhbmRsZSBYSFRNTDEgc2VyaWFsaXphdGlvbiBydWxlcyBhdXRvbWF0aWNhbGx5LCBhbHNvIGFkZAoJICB4bWxJc1hIVE1MKCkgdG8gbGlieG1sMiBBUEkuIFNvbWUgdHdlYWtpbmcgdG8gbWFrZSBzdXJlCgkgIGxpYnhzbHQgc2VyaWFsaXphdGlvbiB1c2VzIGl0IHdoZW4gbmVlZGVkIHdpdGhvdXQgY2hhbmdpbmcKCSAgdGhlIGxpYnJhcnkgQVBJLgoJKiB0ZXN0L3hodG1sMSByZXN1bHQvbm9lbnQveGh0bWwxIHJlc3VsdC92YWxpZC94aHRtbDEueGh0bWwKCSAgcmVzdWx0L3hodG1sMTogYWRkZWQgYSBuZXcgdGVzdCBzcGVjaWZpY2FsbHkgZm9yIHhodG1sMSBvdXRwdXQKCSAgYW5kIHVwZGF0ZWQgdGhlIHJlc3VsdCBvZiBvbmUgWEhUTUwxIHRlc3QKCldlZCBOb3YgMjAgMTQ6MjQ6NTYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYyBwYXJzZXJJbnRlcm5hbHMuYyBlbmNvZGluZy5jOiBmaXhlZCAjOTkwODIKCSAgZm9yIHhpOmluY2x1ZGUgZW5jb2Rpbmc9Ii4uLiIgc3VwcG9ydCBvbiB0ZXh0IGluY2x1ZGVzLgoJKiByZXN1bHQvWEluY2x1ZGUvdHN0ZW5jb2RpbmcueG1sIHRlc3QvWEluY2x1ZGUvZG9jcy90c3RlbmNvZGluZy54bWwKCSAgdGVzdC9YSW5jbHVkZS9lbnRzL2lzb2xhdGluLnR4dCA6IGFkZGVkIGEgc3BlY2lmaWMgcmVncmVzc2lvbiB0ZXN0CgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IGZpeGVkIHRoZSBnZW5lcmF0b3IKCSAgdGhlIG5ldyBzZXQgb2YgY29tbWVudHMgZ2VuZXJhdGVkIGZvciBkb2MvbGlieG1sMi1hcGkueG1sIHdlcmUKCSAgYnJlYWtpbmcgdGhlIHB5dGhvbiBnZW5lcmF0aW9uLgoKVHVlIE5vdiAxOSAyMzoyNTo0NyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvTWFrZWZpbGUuYW06IHJlcGFpciBzb21lIHByb2JsZW0gaWYgZ3RrLWRvYyBmYWlsIG9yIHN1Y2gKCSogY29uZmlndXJlLmluOiBwYXRjaCBmb3IgU29sYXJpcyBvbiBuZXcgYXV0b2NvbmYgY2xvc2VzICM5ODg4MCAKCSogZG9jL3BhcnNlZGVjbC5weTogcmVwYWlyIHRoZSBmcmlnZ2luZyBBUEkgYnVpbGRpbmcgc2NyaXB0LAoJICBkaWQgSSBzYXkgdGhhdCBweXRob24geG1sbGliIHN1Y2tzID8KCSogZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvbGlieG1sMi1yZWZzLnhtbDogcmVnZW5lcmF0ZWQsIHJlb3JkZXJpbmcKCSAgYW5kIHNvbWUgY29tbWVudCBhcmUgbm8gbW9yZSB0cnVuY2F0ZWQuCgpUdWUgTm92IDE5IDA5OjA5OjA0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBNYXJ0aW4gU3RvaWxvdiBwb2ludGVkIG91dCBhIHBvdGVudGlhbCBsZWFrIGluCgkgIHhtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQKCk1vbiBOb3YgMTggMTY6MDU6NTEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBidWcgIzk4ODc5IGEgY29ybmVyIGNhc2Ugd2hlbiAwIGlzCgkgIGluY2x1ZGVkIGluIEhUTUwgZG9jdW1lbnRzIGFuZCB1c2luZyB0aGUgcHVzaCBwYXJzZXIuCgpNb24gTm92IDE4IDAwOjExOjI0IENFVCAyMDAyIEVSREkgR2VyZ28gPGNhY3R1c0BjYWN0dXMucnVsZXoub3JnPgoKCSogY29uZmlndXJlLmluIChQWVRIT05fU0lURV9QQUNLQUdFUyk6IElmIC0td2l0aC1weXRob24gaXMKCSAgc3BlY2lmaWVkLCBsb29rIGZvciB0aGUgUHl0aG9uIGludGVycHJldGVyIG5vdCBqdXN0IGluIHRoZQoJICBzcGVjaWZpZWQgcm9vdCBidXQgYWxzbyBpbiB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLiBGaXhlcyAjOTg4MjUKClN1biBOb3YgMTcgMjM6MzY6MDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jOiBmaXhpbmcgYnVnICM5ODc5MiAsIG5vZGUgbWF5IGhhdmUgbm8gZG9jCgkgIGFuZCBkZXJlZmVyZW5jaW5nIHdpdGhvdXQgY2hlY2tpbmcgYWluJ3QgZ29vZCAuLi4KClN1biBOb3YgMTcgMTA6MjU6NDMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgcmVsZWFzZSAyLjQuMjcKCSogZG9jLyogOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgkqIGRvYy9NYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogdHJ5IHRvIG1ha2Ugc3VyZSB0aGUgdHV0b3JpYWwKCSAgYW5kIGFsbCB0aGUgZG9jcyBhcmUgYWN0dWFsbHkgcGFja2FnZWQgYW5kIGluIHRoZSBmaW5hbCBSUE1zCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiByZXN0b3JlCgkgIHhtbGxpbnQgLS1yZWNvdmVyIGZlYXR1cmUuCgpTYXQgTm92IDE2IDE2OjMwOjI1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIHhwYXRoLmM6IGZpeGluZyAjOTY5MjUgd2ljaCB3YXMgYWxzbyBkZXBlbmRlbnQgb24gdGhlCgkgIHByb2Nlc3Npbmcgb2YgcGFyc2VkIGVudGl0aWVzLCBhbmQgWFBhdGggY29tcHV0YXRpb24gb24gc3VzdGl0dWVkCgkgIGVudGl0aWVzLgoJKiB0ZXN0WFBhdGguYzogbWFrZSBzdXJlIGVudGl0aWVzIGFyZSBzdWJzdGl0dWVkLgoKRnJpIE5vdiAxNSAxNjoyMjo1NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgIzk2NTk0LCB3aGljaCB3YXMgdG90YWxseSBkZXBlbmRlbnQgb24gdGhlIAoJICBwcm9jZXNzaW5nIG9mIGludGVybmFsIHBhcnNlZCBlbnRpdGllcywgd2hpY2ggaGFkIHRvIGJlIGNoYW5nZWQuCgpGcmkgTm92IDE1IDEyOjE2OjA3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvTWFrZWZpbGUuYW06CgkgIHRyeWluZyB0byBmaXggYnVnICM5ODUxNyBhYm91dCBidWlsZGluZyBvdXRzaWRlIHRoZSBzb3VyY2UgdHJlZQoJKiBkb2MveG1sLmh0bWwgZG9jL0ZBUS5odG1sOiBmaXhlZCB0aGUgbGluayB0byBsaWJpY29udiAjOTQ1ODUKClRodSBOb3YgMTQgMTg6NDE6NTUgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBjbGVhbnVwCgkqIHdpbjMyL01ha2VmaWxlLm1pbmd3OiBpbnRlZ3JhdGVkIG1pbmd3IGluIEpTY3JpcHQgY29uZmlndXJlCgkqIHdpbjMyL01ha2VmaWxlLm1zdmM6IG1vZGlmaWVkIHRvIGFsbG93IG1pbmd3IGNvZXhpc3RlbmNlCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogaW50ZWdyYXRlZCBtaW5ndwoJKiB3aW4zMi9SZWFkbWUudHh0OiBjbGVhbnVwCgpUdWUgTm92IDEyIDIyOjA2OjQ1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogc3RyZW5ndGhlbiB0aGUgZ3VhcmQgaW4gdGhlIFBvcCBtYWNyb3MsCgkgIGxpa2UgaW4gdGhlIFhNTCBwYXJzZXIsIGNsb3NlcyBidWcgIzk3MzE1CgpUdWUgTm92IDEyIDIxOjU2OjM5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBmaXhlZCBidWcgIzk4MzM4ICwgZmF0YWxFcnJvciBTQVgKCSAgY2FsbGJhY2sgaXMgbmV2ZXIgdXNlZC4KClR1ZSBOb3YgMTIgMTM6MzI6NTAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IGZpeGVkIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgU0FYIHN0cnVjdHVyZQoJICB3aGljaCB3YXMgYnJlYWtpbmcgeHNsdHByb2MKCSogeHBhdGguYzogcGF0Y2ggZnJvbSBQZXRyIFBhamFzIGZvciBDREFUQSBub2RlcwoJKiB0cmVlLmM6IHBhdGNoIGZyb20gUGV0ciBQYWphcyBpbXByb3ZpbmcgeG1sR2V0Tm9kZVBhdGgoKQoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogcGF0Y2ggZnJvbSBQZXRlciBKb25lcwoJICByZW1vdmluZyBhIGxlYWsgaW4geG1sU0FYUGFyc2VNZW1vcnkoKSBhbmQgYWRkaW5nIHRoZQoJICBmdW5jdGlvbiB4bWxTQVhQYXJzZU1lbW9yeVdpdGhEYXRhKCkKCk1vbiBOb3YgMTEgMjA6NDc6MDMgTVNUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCglhZGRpbmcgcGRmIG9mIHR1dG9yaWFsLCBjaGFuZ2luZyB3ZWIgcGFnZSB0byBsaW5rIHRvIGl0CgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC5wZGYKCSogZG9jL3htbC5odG1sCgkqIGRvYy9kb2NzLmh0bWwKClN1biBOb3YgMTAgMjA6NDg6NTcgTVNUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC9hcjAxczA4Lmh0bWwKCWFkZGluZyBmaWxlIHdoYXQgSSBmb3Jnb3QgZm9yIHR1dG9yaWFsCgpTdW4gTm92IDEwIDIwOjMzOjEzIE1TVCAyMDAyIEpvaG4gRmxlY2sgIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCUFkZGluZyBlbmNvZGluZyBkaXNjdXNzaW9uIHRvIHR1dG9yaWFsCglBZGRlZDoKCSogZG9jL3R1dG9yaWFsL2ltYWdlcy8qLnBuZzogRG9jQm9vayBhZG1vbml0aW9uIGltYWdlIGZpbGVzCgkqIGRvYy90dXRvcmlhbC9hcGYuaHRtbCwgYXBnLmh0bWw6IG5ldyBnZW5lcmF0ZWQgaHRtbAoJKiBkb2MvdHV0b3JpYWwvaW5jbHVkZWNvbnZlcnQuYzogY29udmVyc2lvbiBjb2RlIGVudGl0eSBmaWxlCgljaGFuZ2VkOgoJKiBkb2MvdHV0b3JpYWwveG1sdHV0b3JpYWwueG1sOiBEb2NCb29rIG9yaWdpbmFsCgkqIGRvYy90dXRvcmlhbC8qLmh0bWw6IGdlbmVyYXRlZCBodG1sCgpGcmkgTm92ICA4IDE3OjU5OjMyIENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIGluY2x1ZGUvbGlieG1sLyouaDogcmV0aXJlZCB4bWx3aW4zMnZlcnNpb24uaAoJKiBkb2MvTWFrZWZpbGUuYW06IHJldGlyZWQgeG1sd2luMzJ2ZXJzaW9uLmgKCSogd2luMzIvY29uZmlndXJlLmpzOiByZXRpcmVkIHhtbHdpbjMydmVyc2lvbi5oCgpGcmkgTm92ICA4IDE2OjU1OjQ3IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogZXhwb3J0ZWQgYWRkaXRpb25hbCBzeW1ib2xzCgkqIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oOiBleHBvcnRlZCB0aGUgcmVzdCBvZiB0aGUgeG1sTWVtKiAKCSAgc2lzdGVyaG9vZAoKRnJpIE5vdiAgOCAxNjowODoxMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmM6IGZpeGVkIGEgdHlwbyBwb2ludGVkIG91dCBieSBJZ29yCgkqIHhwYXRoLmM6IHRyeSB0byBzcGVlZCB1cCBub2RlIGNvbXBhcmUgdXNpbmcgbGluZSBudW1iZXJzCgkgIGlmIGF2YWlsYWJsZS4KClRodSBOb3YgIDcgMTU6MTY6MDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBtYWtlIHhtbEZyZWVOb2RlKCkgaGFuZGxlIGF0dHJpYnV0ZXMgY29ycmVjdGx5LgoKV2VkIE5vdiAgNiAyMzo1MToxMSBDRVQgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIGNhdGFsb2cuYzogY29tcGxldGVkIHRoZSAjOTY5NjMgZml4LCBhcyByZXBvcnRlZCBieSBLYXJsCgkgIEVpY2h3YWxkZXIKCldlZCBOb3YgIDYgMTY6NDg6NDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBvaW50ZXIuYzogdHJpZWQgdG8gZml4IGJ1ZyAjOTc4NTIgcmVwb3J0ZWQgYnkgTmljb2xhcyBOb2Zma2UKClN1biBOb3YgIDMgMTA6NDM6NDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IHN3aXRjaGVkIHRoZSBvcmRlciBvZiBhIGNvdXBsZSBvZiBpbmNsdWRlcwoJICB0byBmaXggYnVncyAjOTcxMDAKClRodSBPY3QgMzEgMTc6MTE6NDYgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogY2F0YWxvZy5jOiBmaXhlZCBidWcgIzk2OTYzLCByZXZlcnRlZCB0byB0aGUgb2xkIGJlaGF2aW91ciBvZgoJICB4bWxMb2FkQ2F0YWxvZ3MgdGhhdCB1c2VkIHRvIHNlcGFyYXRlIGRpcmVjdG9yaWVzIHdpdGggYSAnOicuCgpUaHUgT2N0IDMxIDE2OjU1OjIxIENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHRocmVhZHMuYzogaW1wcm92ZW1lbnRzIHRvIHRoZSBXaW5kb3dzLXNpZGUgb2YgdGhyZWFkIGhhbmRsaW5nCgkqIHRlc3RUaHJlYWRzLmM6IGNvbmRpdGlvbmFsbHkgZXhjbHVkZWQgdW5pc3RkLmgKCSogdGVzdFRocmFkc1dpbjMyLmM6IGJyb2tlIG92ZXJsb25nIGxpbmVzCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogYWRhcHRlZCB0aHJlYWQtcmVsYXRlZCBtYWNyb3MgdG8gdGhlIG5ldwoJICBzY2hlbWUgYW5kIGZvciBwdGhyZWFkcyBvbiBXaW5kb3dzCgkqIHdpbjMyL01ha2VmaWxlLm1zdmM6IGludHJvZHVjZWQgYSBtb3JlIGZsZXhpYmxlIHRocmVhZCBidWlsZCwgCgkgIGFkZGVkIHRlc3RUaHJlYWRzW1dpbjMyXS5jIHRvIHRoZSBidWlsZAoJKiB3aW4zMi9jb25maWd1cmUuanM6IGludHJvZHVjZWQgYSBtb3JlIGZsZXhpYmxlIHRocmVhZCBjb25maWcKCjIwMDItMTAtMzEgIEpvaG4gRmxlY2sgIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbC5odG1sIChhbmQsIGJ5IGltcGxpY2F0aW9uLCBGQVEuaHRtbCkKCWFkZGVkIFVURi04IGNvbnZlcnNhaW9uIEZBUSBmcm9tIE1hcmN1cyBMYWJpYiBJc2thbmRlcgoKVHVlIE9jdCAyOSAxODozMjozMyBDRVQgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogcmVtb3ZlZCB4bWx3aW4zMnZlcnNpb24uaAoJKiBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbTogcmVtb3ZlZCB4bWx3aW4zMnZlcnNpb24uaAoKTW9uIE9jdCAyOCAxNDowMToyOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBCcmlhbiBTdGFmZm9yZCB0byBmaXggYSBidWcKCSAgaW4geG1sUmVjb25jaWxpYXRlTnMoKQoKTW9uIE9jdCAyOCAxMzo1MTo1NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBDaHJpc3RpYW4gR2xhaG4gdG8gYWxsb3cKCSAgeG1sTmV3Q2hpbGQoKSBvbiBkb2N1bWVudCBmcmFnbWVudCBub2RlcwoKU2F0IE9jdCAyNiAxNToyNzowMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IENocmlzdGlhbiBHbGFobiBmb3VuZCBhIHByb2JsZW0gd2l0aCBhIHJlY2VudAoJICBwYXRjaCB0byB4bWxQYXJzZUJhbGFuY2VkQ2h1bmtNZW1vcnlSZWNvdmVyKCkKCSogeG1sc2NoZW1hcy5jOiBDaGFybGVzIEJvemVtYW4gZml4ZWQgc29tZSBTY2hlbWFzIHZhbGlkYXRpb24KCSAgcHJvYmxlbXMKCSogcmVzdWx0L3NjaGVtYXMvZWxlbSogcmVzdWx0L3NjaGVtYXMvc2VxKiB0ZXN0L3NjaGVtYXMuZWxlbSoKCSAgdGVzdC9zY2hlbWFzL3NlcSo6IGFkZGVkIHRoZSB0ZXN0IGNhc2VzIGZyb20gQ2hhcmxlcwoKV2VkIE9jdCAyMyAxNjo0MjoyOSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlnLmguaW4gbGlieG1sLnNwZWMuaW4gZG9jL01ha2VmaWxlLmFtOgoJICBzZXJpb3VzIGNsZWFudXAgb2YgdGhlIHNwZWMgZmlsZSBhbmQgYXNzb2NpYXRlZCBjaGFuZ2VzCgkgIGluIHRoZSBNYWtlZmlsZXMuCgkqIHZhbGlkLmM6IHRyeSB0byByZW1vdmUgc29tZSB3YXJuaW5ncyBvbiB4ODZfNjQKCldlZCBPY3QgMjMgMTA6NTM6NDIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvTWFrZWZpbGUuYW06IGFkZGVkIHdpbnNvY2tjb21wYXQuaCB0byBFWFRSQV9ESVNUIHRvCgkgIGZpeCBidWcgIzk2NTg2CgpUdWUgT2N0IDIyIDIxOjEzOjA2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IE1pa2hhaWwgU29ncmluZSBwb2ludGVkIG91dCBhIGJ1ZyBpbiBIVE1MCgkgIHBhcnNpbmcsIGFwcGxpZWQgaGlzIHBhdGNoCgkqIHJlc3VsdC9IVE1ML2F0dHJlbnRzLmh0bWwgcmVzdWx0L0hUTUwvYXR0cmVudHMuaHRtbC5lcnIKCSAgcmVzdWx0L0hUTUwvYXR0cmVudHMuaHRtbC5zYXggdGVzdC9IVE1ML2F0dHJlbnRzLmh0bWw6CgkgIGFkZGVkIHRoZSB0ZXN0IGFuZCByZXN1bHQgY2FzZSBwcm92aWRlZCBieSBNaWtoYWlsIFNvZ3JpbmUKClR1ZSBPY3QgMjIgMTk6MzM6MjAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZtcy9idWlsZF9saWJ4bWwuY29tIHZtcy9jb25maWcudm1zIHZtcy9yZWFkbWUudm1zCgkgIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oCgkgIGluY2x1ZGUvbGlieG1sL3RyZWUuaCBpbmNsdWRlL2xpYnhtbC94bWxJTy5oCgkgIEhUTUxwYXJzZXIuYyBjYXRhbG9nLmMgZGVidWdYTUwuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYwoJICB0cmVlLmMgdHJpb2RlZi5oIHRyaW9uYW4uYyB1cmkuYyB4bWxJTy5jIHhwYXRoLmM6CgkgIEFwcGxpZWQgdGhlIFZNUyB1cGRhdGUgcGF0Y2ggZnJvbSBDcmFpZyBBLiBCZXJyeQoJKiBkb2MvKi5odG1sOiB1cGRhdGUKClR1ZSBPY3QgMjIgMTY6Mjc6MzEgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2VuY29kaW5nLmggZW5jb2RpbmcuYzogbWFkZSB4bWxHZXRVVEY4Q2hhciBwdWJsaWMKClR1ZSBPY3QgMjIgMTY6MjU6MTggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IGFkZGluZyBhIGdyZXAgY29tbWFuZCB0byAtLXNoZWxsIGluIHhtbGxpbnQKCSAgZm9yIFQuVi4gUmFtYW4KClR1ZSBPY3QgMjIgMTY6MjM6NTcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGNhdGFsb2cuYzogdHJpZWQgdG8gZml4IHNvbWUgb2YgdGhlIHByb2JsZW0gd2l0aCAtLXNnbWwKCk1vbiBPY3QgMjEgMDk6NTc6MTAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiB0cmllZCB0byBmaXggYnVnICM5MTUwMCB3aGVyZSBkb2MtPmNoaWxkcmVuIG1heQoJICBiZSBvdmVycmlkZW4gYnkgYSBjYWxsIHRvIHhtbFBhcnNlQmFsYW5jZWRDaHVua01lbW9yeSgpCgpNb24gT2N0IDIxIDA5OjA0OjMyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IHRyaWVkIHRvIGZpeCBidWcgIzkwOTQ1IHcuci50LiBwYXJzaW5nIG9mIHN5c3RlbQoJICBpZGVudGlmaWVycyBpbiBTR01MIGNhdGFsb2dzIGNvbnRhaW5pbmcgJyYnCgpTdW4gT2N0IDIwIDIzOjMxOjQ3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vdHlwZXMuYzogZml4ZWQgYnVncyB3aGVuIHBhc3NpbmcgcmVzdWx0IHZhbHVlIHRyZWUKCSAgdG8gUHl0aG9uIGZ1bmN0aW9ucy4KCkZyaSBPY3QgMTggMTM6MTg6NTMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIHRoZSByZWxlYXNlIG9mIDIuNC4yNgoJKiBkb2MvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jdW1lbnRhdGlvbgoKV2VkIE9jdCAxNiAyMDowMTo0NiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgWE1MIE5hbWVzcGFjZSBjb21wbGlhbmNlIGJ1ZyByZXBvcnRlZCBieQoJICBBbGV4YW5kZXIgR3JpbWFsb3Zza3kKCldlZCBPY3QgMTYgMTc6MTg6NDIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmM6IGZpeGVkIHNlcmlhbGl6YXRpb24gb2Ygc2NyaXB0IGFuZCBzdHlsZSB3aGVuCgkgIHRoZXkgYXJlIG5vdCBsb3dlcmNhc2UgKGkuZS4gYWRkZWQgdXNpbmcgdGhlIEFQSSB0byB0aGUgdHJlZSkuCgpXZWQgT2N0IDE2IDE2OjMxOjA1IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBtYWtlIHhtbFZhbGlkYXRlRG9jdW1lbnQgZW1pdCBhIHdhcm5pbmcgbXNnIGlmIHRoZXJlCgkgIGlzIG5vIERURCwgcG9pbnRlZCBieSBDaHJpc3RpYW4gR2xhaG4KCldlZCBPY3QgMTYgMTY6MDU6MzggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYzogZml4ZWQgdGhlIHZhbGlkYXRpb24gb2Ygc2VxdWVuY2VzCgkgIGNvbnRlbnQgbW9kZWwgd2hlbiBzb21lIG9mIHRoZSBibG9ja3MgaGF2ZSBtaW4gb3IgbWF4LCBhbmQgYSBjb3VwbGUKCSAgb2YgYnVncyBmb3VuZCBpbiB0aGUgcHJvY2Vzcy4KCSogcmVzdWx0L3NjaGVtYXMvbGlzdDAqIHRlc3Qvc2NoZW1hcy9saXN0MCo6IGFkZGVkIHNvbWUgc3BlY2lmaWMKCSAgcmVncmVzc2lvbiB0ZXN0cwoKVHVlIE9jdCAxNSAxMjo0MTowMSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogUkVBRE1FOiB1cGRhdGVkIHRoZSBjb250YWN0IGluZm9ybWF0aW9ucwoKVHVlIE9jdCAxNSAxMDozNTo1NyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IHVzZSB0ZXN0IC1mIGluc3RlYWQgb2YgdGVzdCAtZSBzaW5jZSBTb2xhcmlzIC9iaW4vc2gKCSAgbWlzc2VzIGl0LCByZXBvcnRlZCBieSBQZXRlciBCcmF5LgoKTW9uIE9jdCAxNCAxNzozNzozMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBpbnZlc3RpZ2F0aW5nIHhtbE5vZGVHZXRDb250ZW50KCkgb24gbmFtZXNwYWNlIG5vZGVzCgkgIGFuZCByZW1vdmVkIGEgZmV3IHdhcm5pbmdzCgpNb24gT2N0IDE0IDEzOjEyOjU1IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogQ2hyaXN0aWFuIEdsYWhuIGZvdW5kIGEgc21hbGwgYnVnIGluIHRoZSBwdXNoIHBhcnNlci4KCSogeG1sSU8uYyBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOiBjbGVhbmVkIHVwIGFuZCBtYWRlIHhtbENoZWNrRmlsZW5hbWUKCSAgcHVibGljCgpXZWQgT2N0ICA5IDIzOjExOjAyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hcy5oOiBhZGRlZAoJICB4bWxTY2hlbWFOZXdNZW1QYXJzZXJDdHh0IHRvIHBhcnNlIGEgc2NoZW1hcyBmcm9tIGEgbWVtb3J5IGFyZWEKCSogdGVzdFNjaGVtYXMuYzogYWRkZWQgLS1tZW1vcnkgdG8gdGVzdCB0aGUgbmV3IGludGVyZmFjZQoKV2VkIE9jdCAgOSAxNjoyMjo1NCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2luZGV4LnB5IGRvYy9zZWFyY2gucGhwOiBpbnRlZ3JhdGVkIHRoZSBYU0xUIGluZGV4aW5nLAoJICBhIGZldyBmaXhlZCBpbiB0aGUgaW5kZXhlciwgYWRkZWQgYSBzY29wZSBzZWxlY3Rpb24gYXQgdGhlCgkgIHNlYXJjaCBsZXZlbC4KCldlZCBPY3QgIDkgMTI6MTg6MzcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IEpvZSBNYXJjdXMgQ2xhcmtlIHJlcG9ydGVkIGEgc2VnZmF1bHQgb24gRkJzZCAKCSAgdGhpcyB3YXMgZHVlIHRvIHVuaW5pdGlhbGl6ZWQgcGFydHMgb2YgdGhlIHZhbGlkYXRpb24gY29udGV4dAoKVHVlIE9jdCAgOCAyMzoyNDoyMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogYXBwbGllZCBwYXRjaCBmcm9tIE1hcmsgVmFrb2MgZXhjZXB0IHRoZSBBUEkKCSAgY2hhbmdlLCBwcmVzZXJ2ZWQgaXQuCgkqIGRvYy8qOiB1cGRhdGVkIHRoZSBkb2NzIHRvIHBvaW50IHRvIHRoZSBzZWFyY2ggZW5naW5lIGZvcgoJICBpbmZvcm1hdGlvbiBsb29rdXAgb3IgYmVmb3JlIGJ1Zy9oZWxwIHJlcG9ydHMuCgpUdWUgT2N0ICA4IDE4OjUzOjMxIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvaW5kZXgucHkgZG9jL3NlYXJjaC5waHA6IGFkZGVkIG1haWxpbmctbGlzdCBhcmNoaXZlcwoJICBpbmRleGluZyBhbmQgbG9va3VwCgpUdWUgT2N0ICA4IDEwOjI1OjA3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHBhdGNoIGZyb20gTWFyayBWYWtvYyB0byBmaXggeG1sTm9kZUdldFBhdGgoKQoKTW9uIE9jdCAgNyAxMzoxMjowMyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2luZGV4LnB5OiBpbXByb3ZlZCBIVE1MIGluZGV4aW5nCgkqIGRvYy9zZWFyY2gucGhwOiBtYWtlIHRoZSBxdWVyaWVzIGFsc28gbG9va3VwIHRoZSBIVE1MIGJhc2VkIGluZGV4ZXMKClN1biBPY3QgIDYgMjM6NTA6MjkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9pbmRleC5weTogYWRkZWQgSFRNTCBwYWdlIGluZGV4aW5nIAoKRnJpIE9jdCAgNCAxNTozMzo1NSBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB4bWxJTy5jOiBleHRlbmRlZCBXaW5kb3dzIHBhdGggbm9ybWFsaXNhdGlvbiB0byBmaXggdGhlIGJhc2UKCSAgcHJvYmxlbSBpbiBsaWJ4c2x0LgoJKiBjYXRhbG9nLmM6IGZpeGVkIGxpc3QgaGFuZGxpbmcgaW4gWE1MX0NBVEFMT0dfRklMRVMKCkZyaSBPY3QgIDQgMTM6NDM6MDIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IHR5cG8vYnVnIGZvdW5kIGJ5IENocmlzdGlhbiBHbGFobgoKU3VuIFNlcCAyOSAxOTo0NDoxMCBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB4bWxJTy5jOiBhcHBsaWVkIFdpbmRvd3MgQ0UgcGF0Y2ggZnJvbSBKYXZpZXIuCgkqIHdpbjMyL3dpbmNlOiBuZXcgZGlyZWN0b3J5LCBjb250YWlucyBzdXBwb3J0IGZvciB0aGUgUG9ja2V0UEMKCSAgd2l0aCBXaW5kb3dzIENFIGZyb20gSmF2aWVyLgoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IHJlb3JnYW5pc2VkLCByZW1vdmVkIGR1cGxpY2F0ZSAKCSAgZGVmaW5pdGlvbnMgYW5kIGFwcGxpZWQgV2luQ0UgcGF0Y2ggZnJvbSBKYXZpZXIuCgkqIGluY2x1ZGUvd3NvY2tjb21wYXQuaDogbmV3IGZpbGUsIG5vdyBjb250YWlucyBXaW5Tb2NrCgkgIGNvbXBhdGliaWxpdHkgbWFjcm9zLgoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBpbnRyb2R1Y2VkIGRvdWJsZS1ydW4gY29tcGlsYXRpb24uCgpUaHUgU2VwIDI2IDE5OjQ4OjA2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHByZXBhcmluZyByZWxlYXNlCgkgIG9mIDIuNC4yNQoJKiBkb2MvKjogdXBkYXRlZCBhbmQgcmVnZW5lcmF0ZWQgdGVoIGRvY3MgYW5kIHdlYiBwYWdlcy4KClRodSBTZXAgMjYgMTc6MzM6NDYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jIHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvdmFsaWQuaDogZml4ZWQgYnVnICM5MjUxOCB2YWxpZGF0aW9uCgkgIGVycm9yIHdlcmUgbm90IGNvdmVyaW5nIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMuCgkqIHJlc3VsdC92YWxpZC9kaWEueG1sIHRlc3QvdmFsaWQvZGlhLnhtbDogdGhlIHRlc3Qgd2Fzbid0IHZhbGlkLAoJICBpdCB3YXMgbWlzc2luZyB0aGUgYXR0cmlidXRlIGRlY2xhcmF0aW9uIGZvciB0aGUgbmFtZXNwYWNlCgkqIHJlc3VsdC9WQy9OUzM6IHRoZSBmaXggbm93IHJlcG9ydCBicmVha2FnZXMgaW4gdGhhdCB0ZXN0CgpUaHUgU2VwIDI2IDE0OjM5OjA3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jOiBmaXhpbmcgYnVnICM5NDI0MSBvbiBIVE1MIGJvb2xlYW4gYXR0cmlidXRlcwoKVGh1IFNlcCAyNiAxNDoyNTozMyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jLyo6IGFkZGVkIHRoZSAzIG5ldyBtb2R1bGVzIHhtbHJlZ2V4cCB4bWxhdXRvbWF0YSBhbmQgeG1sdW5pY29kZQoJICBhbmQgcmVnZW5lcmF0ZWQgdGhlIGRvY3MgYW5kIHdlYiBzaXRlCgpUaHUgU2VwIDI2IDExOjQ1OjQyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYyB4cGF0aC5jOiBtYWtlIHN1cmUKCSAgQVRUUklCVVRFX1VOVVNFRCBpcyBhbHdheXMgcHV0IGFmdGVyIHRoZSBhdHRyaWJ1dGUgZGVjbGFyYXRpb24sCgkgIG5vdCBiZWZvcmUKClRodSBTZXAgMjYgMTE6MzM6MjggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IGZpeGVkIGEgc3R1cGlkIGVycm9yCgkgIGJyZWFraW5nIHRoZSBweXRob24gQVBJCgpUaHUgU2VwIDI2IDAwOjMxOjQ2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmlvLmMgdHJpby5oIHRyaW9kZWYuaCB0cmlvbmFuLmMgdHJpb25hbi5oIHRyaW9wLmgKCSAgdHJpb3N0ci5jIHRyaW9zdHIuaDogYXBwbGllZCBhIHRyaW8gdXBkYXRlIHBhdGNoIGZyb20gCgkgIEJqb3JuIFJlZXNlIHdoaWNoIHNob3VsZCB3b3JrIHdpdGggTWluR1cKClRodSBTZXAgMjYgMDA6MjE6MTggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogaW1wcm92aW5nIHNvbWUgZG9jdW1lbnRhdGlvbiBjb21tZW50cwoJKiB4bWxyZWdleHAuYzogZm91bmQgYW5kIGZpeGVkIGEgbWVtIGxlYWsgd2l0aCBweXRob24gcmVncmVzc2lvbiB0ZXN0cwoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jIGFuZCB0aGUgQVBJIFhNTCBmaWxlIGluY2x1ZGluZyB0aGUgCgkgIHhtbHJlZ2V4cC5oIHhtbGF1dG9tYXRhLmggYW5kIHhtbHVuaWNvZGUuaCBoZWFkZXJzCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgcHl0aG9uL2xpYnhtbF93cmFwLmgKCSAgcHl0aG9uL3R5cGVzLmM6IGFkZGVkIGFjY2VzcyB0byB0aGUgWE1MIFNjaGVtYXMgcmVnZXhwcyBmcm9tCgkgIHB5dGhvbgoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3JlZ2V4cC5weTogYWRkZWQgYSAKCSAgc2ltcGxlIHJlZ2V4cCBiaW5kaW5ncyB0ZXN0CgpUdWUgU2VwIDI0IDA4OjEwOjQ4IE1EVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sLmh0bWw6CgkgIGZpeGluZyBmdHAgbGlua3MgLSB0aGFua3MgdG8gVml0YWx5IE9zdGFuaW4KClR1ZSBTZXAgMjQgMTY6MDg6MTcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jOiBmaXhlZCB0aGUgZGF0YSBjYWxsYmFjayBvbiB0cmFuc2l0aW9uIGZ1bmN0aW9uYWxpdHkKCSAgd2hpY2ggd2FzIGJyb2tlbiB3aGVuIHVzaW5nIHRoZSBjb21wYWN0IGZvcm0KCSogcmVzdWx0L3NjaGVtYXMvKjogdXBkYXRlZCB0aGUgcmVzdWx0cywgbGVzcyB2ZXJib3NlLCBhbGwgdGVzdHMKCSAgcGFzcyBsaWtlIGJlZm9yZQoJKiBET0NCcGFyc2VyLmMgdGVzdEF1dG9tYXRhLmMgdGVzdEMxNE4uYyB0ZXN0U2NoZW1hcy5jIHRlc3RUaHJlYWRzLmMKCSAgdGVzdFhQYXRoLmMgdmFsaWQuYyB4aW5jbHVkZS5jIHhtbGxpbnQuYyB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmMKCSAgeG1sc2NoZW1hc3R5cGVzLmMgeHBhdGguYyBweXRob24vbGlieG1sLmM6IHJlbW92ZWQgYSBidW5jaCBvZgoJICBhbm5veWluZyB3YXJuaW5ncwoJKiB4cGF0aC5jOiB0cnkgdG8gcHJvdmlkZSBiZXR0ZXIgZXJyb3IgcmVwb3J0IHdoZW4gcG9zc2libGUKClNhdCBTZXAgMjEgMTQ6NTY6MzcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBmaXhlZCBhIGJyZWFrYWdlIHJhaXNlZCBieSBKYWNvYgoKRnJpIFNlcCAyMCAyMDowODoxOCBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IGFkZGVkIEhBVkVfRVJSTk9fSCBkZWZpbml0aW9uIGZvciBwYXJ0cwoJICB3aGljaCBkb24ndCB1c2Ugc29ja2V0cwoKRnJpIFNlcCAyMCAxODo0MDo1MCBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBhcHBsaWVkIHpsaWIgcGF0Y2ggZnJvbSBEYW5pZWwgR2VocmlnZXIKCSogd2luMzIvY29uZmlndXJlLmpzOiBhcHBsaWVkIHpsaWIgcGF0Y2ggZnJvbSBEYW5pZWwgR2VocmlnZXIKCkZyaSBTZXAgMjAgMTU6NDA6MTQgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvY29uZmlndXJlLmpzOiBhcHBsaWVkIHRoZSBwYXRjaCBmcm9tIE1hcmsgVmFrb2MgZm9yIAoJICByZWdleHAgc3VwcG9ydAoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGFwcGxpZWQgdGhlIHBhdGNoIGZyb20gTWFyayBWYWtvYwoJICBmb3IgcmVnZXhwIHN1cHBvcnQKCkZyaSBTZXAgMjAgMTU6MzU6MzMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBhcyBwb2ludGVkIGJ5IElnb3IgRmxvYXQgYW5kIERvdWJsZQoJICBwYXJzaW5nIGFpbid0IGZpbmlzaGVkIHlldAoKRnJpIFNlcCAyMCAxNDowMDoxNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluOiB0cnlpbmcgdG8gZml4ICM4ODQxMiBieSBieXBhc3NpbmcKCSAgYWxsIHRoZSBweXRob24gc3ViZGlyIGlmIHB5dGhvbiBhaW4ndCBkZXRlY3RlZAoKVGh1IFNlcCAxOSAyMTo0Njo1MyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjoKCSAgbWFkZSBjb25maWd1cmluZyB3aXRoIHJlZ2V4cHMvYXV0b21hdGEvdW5pY29kZSB0aGUgZGVmYXVsdAoJICBidXQgd2l0aG91dCBzY2hlbWFzIEFUTQoJKiB0ZXN0UmVnZXhwLmMgdmFsaWQuYyB4bWxyZWdleHAuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWdleHAuaDoKCSAgZml4ZWQgdGhlIHJlZ2V4cCBiYXNlZCBEVEQgdmFsaWRhdGlvbiBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5CgkgIHByb2JsZW0gYnkgc3dpdGNoaW5nIHRvIGEgY29tcGFjdCBmb3JtIGZvciBkZXRlcm1pbmlzdCByZWdleHBzCgkgIGFuZCBkZXRlY3RpbmcgdGhlIGRldGVybWluaXNtIHByb3BlcnR5IGluIHRoZSBwcm9jZXNzLiBTZWVtcwoJICBhcyBmYXN0IGFzIHRoZSBvbGQgRFREIHZhbGlkYXRpb24gc3BlY2lmaWMgZW5naW5lIDotKSBkZXNwaXRlCgkgIHRoZSByZWdleHAgYnVpbHQgYW5kIGNvbXBhY3Rpb24gcHJvY2Vzcy4KCldlZCBTZXAgMTggMTg6Mjc6MjYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGRldGVybWluaXNtIGlzIGRlYnVnZ2VkLCBuZXcgRFREIGNoZWNraW5nIGNvZGUgbm93IHdvcmtzCgkgIGJ1dCB4bWxGQUNvbXB1dGVzRGV0ZXJtaW5pc20gdGFrZXMgZmFyIHRvbyBtdWNoIENQVSBhbmQgdGhlIHdob2xlCgkgIHNldCB1c3VlcyB0b28gbXVjaCBtZW1vcnkgdG8gYmUgcmVhbGx5IHVzYWJsZSBhcy1pcwoKV2VkIFNlcCAxOCAwMDo1NDozMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlZCBhbm90aGVyIHN0dXBpZCBidWcgaW4geG1sR2V0Tm9kZVBhdGgoKQoJKiB4bWxsaW50LmM6IC0tdmVyc2lvbiBub3cgcmVwb3J0IHRoZSBvcHRpb25zIGNvbXBpbGVkIGluCgpUdWUgU2VwIDE3IDIzOjQ4OjA3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IHNtYWxsIGNsZWFudXAKCSogdmFsaWQuYyB4bWxyZWdleHAuYzogc3dpdGNoZWQgRFREIHZhbGlkYXRpb24gdG8gdXNlIG9ubHkgcmVnZXhwCgkgIHdoZW4gY29uZmlndXJlZCB3aXRoIHRoZW0uIEEgYml0IG9mIGRlYnVnZ2luZyBhcm91bmQgdGhlIGRldGVybWluaXNtCgkgIGNoZWNrcyBpcyBzdGlsbCBuZWVkZWQKClR1ZSBTZXAgMTcgMjE6MjI6MjUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWxfd3JhcC5oOiBzdHVwaWQgYnVnIGZvdW5kIGJ5IG1hdHRhbUBuZXRjb3Vycmllci5jb20KClR1ZSBTZXAgMTcgMTk6NTg6MjYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IHNtYWxsIHBvcnRhYmlsaXR5IGdsaXRjaCBmaXhlZC4KCk1vbiBTZXAgMTcgMTI6Mzg6MDggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBpbmNvbXBsZXRlIHN0ZXBzIGZvciByZWFsL2RvdWJsZSBzdXBwb3J0CgkqIHRlc3RBdXRvbWF0YS5jIGluY2x1ZGUvbGlieG1sL3htbGF1dG9tYXRhLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1scmVnZXhwLmg6IGF2b2lkaW5nIGEgY29tcGlsYXRpb24gcHJvYmxlbQoJKiB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6IHN0YXJ0aW5nIHRoZSB3b3JrIHRvd2FyZCB1c2luZwoJICB0aGUgcmVnZXhwcyBmb3IgYWN0dWFsIERURCB2YWxpZGF0aW9uCgpGcmkgU2VwIDEzIDE2OjQ2OjE0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBoYXNoLmM6IGNvc21ldGljIGNsZWFudXAKCSogdmFsaWQuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmggaW5jbHVkZS9saWJ4bWwvdmFsaWQuaDogc3RhcnRlZCAKCSAgaW50ZWdyYXRpbmcgYSBEVEQgdmFsaWRhdGlvbiBsYXllciBiYXNlZCBvbiB0aGUgcmVnZXhwcwoKVGh1IFNlcCAxMiAxODowMToyOSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jOiBmaXhlZCBhIGJ1ZyByZXBvcnRlZCBieSBKZWZmIEdvZmYsCgkgIHRoZSBkZXRlcm1pbmlzbSB3YXMgdGVzdGVkIGJlZm9yZSBlbGltaW5hdGluZyB0aGUgZXBzaWxvbgoJICB0cmFuc2l0aW9ucyA6LSgKClRodSBTZXAgMTIgMTY6NTc6NDUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHkKCSAgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQKCSAgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmM6IHVwZGF0ZWQgdGhlIHB5dGhvbgoJICBiaW5kaW5ncywgYWRkZWQgY29kZSBmb3IgZWFzaWVyIEZpbGUgSS9PLCBhbmQgdGhlIGFiaWxpdHkgdG8KCSAgZGVmaW5lIGEgcmVzb2x2ZXIgZnJvbSBQeXRob24gZml4aW5nIGJ1ZyAjOTE2MzUKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9pbmJ1Zi5weQoJICBweXRob24vdGVzdHMvb3V0YnVmLnB5IHB5dGhvbi90ZXN0cy9wdXNoU0FYaHRtbC5weQoJICBweXRob24vdGVzdHMvcmVzb2x2ZXIucHkgcHl0aG9uL3Rlc3RzL3NlcmlhbGl6ZS5weTogdXBkYXRlZAoJICBhbmQgYXVnbWVudGVkIHRoZSBzZXQgb2YgUHl0aG9uIHRlc3RzLgoKVHVlIFNlcCAxMCAyMTowNToyOCBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9jb25maWd1cmUuanM6IGFkZGVkIG1vcmUgcmVhZG1lIGluZm8gZm9yIHRoZSBiaW5hcnkKCSAgcGFja2FnZS4KClR1ZSBTZXAgMTAgMTQ6MTU6MTggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGZpeGVkIGEgc3R1cGlkIG91dCBvZiBib3VuZCBhcnJheSBlcnJvcgoKVHVlIFNlcCAxMCAxMzowOToxNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sSU8uaCB4bWxJTy5jIHBhcnNlci5jIEhUTUxwYXJzZXIuYyBET0NCcGFyc2VyLmM6CgkgIG1lc3NpbmcgYXJvdW5kIHdpdGggc3VwcG9ydCBmb3IgV2luZG93cyBwYXRoLCBjbGVhbnVwcywKCSAgdHJ5aW5nIHRvIGlkZW50aWZ5IGFuZCBmaXggdGhlIHZhcmlvdXMgY29kZSBwYXRoIHRvIHRoZQoJICBmaWxlbmFtZSBhY2Nlc3MuIEFkZGVkIHhtbE5vcm1hbGl6ZVdpbmRvd3NQYXRoKCkKClRodSBTZXAgIDUgMTY6MTk6MTggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVycm9yLmMgdmFsaWQuYzogd29ya2luZyBvbiBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIG9mIHZhbGlkaXR5CgkgIGVycm9ycywgZXNwZWNpYWxseSBwcm92aWRpbmcgYW4gYWNjdXJhdGUgY29udGV4dC4KCSogcmVzdWx0L3ZhbGlkL3hsaW5rLnhtbC5lcnIgcmVzdWx0L3ZhbGlkL3Jzcy54bWwuZXJyOiBiZXR0ZXIKCSAgZXJyb3IgcmVwb3J0cyBpbiB0aG9zZSBjYXNlcy4KClRodSBTZXAgIDUgMTM6Mjk6NDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgYzE0bi5jIGVudGl0aWVzLmMgbGlzdC5jCgkgIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHhtbElPLmM6IGdldCByaWQgb2YgYWxsIHRoZSAKCSAgcGVycm9yKCkgY2FsbHMgbWFkZSBpbiB0aGUgbGlicmFyeSBleGVjdXRpb24gcGF0aHMuIFRoaXMKCSAgc2hvdWxkIGZpeCBib3RoICM5MjA1OSBhbmQgIzkyMzg1CgpUaHUgU2VwICA1IDEzOjEzOjE3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IG1lbW9yeSBsZWFrIHJlcG9ydGluZyB3YXMgYnJva2VuIGFmdGVyIGEgY2hhbmdlCgkgIG9mIHRoZSBwcmVwcm9jZXNzb3Igc3ltYm9sIHVzZWQgdG8gYWN0aXZhdGUgaXQuCgpUaHUgU2VwICA1IDEzOjEwOjU3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHRyeSB0byBtYWtlIHRoZSBjb3B5IGZ1bmN0aW9uIHdvcmsgZm9yIG5vZGUgb2YKCSAgdHlwZSBYTUxfRE9DVU1FTlRfRlJBR19OT0RFLCB0aGV5IGFyZSBvbmx5IGNyZWF0ZWQgYnkgdGhlCgkgIERPTSBsYXllcnMgdGhvdWdoLCBub3QgbGlieG1sMiBpdHNlbGYuCgpUaHUgU2VwICA1IDEyOjU3OjM4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiB0cnkgdG8gcHJvdmlkZSBmaWxlIGFuZCBsaW5lIGluZm9ybWF0aW9ucywgbm90IGFsbAoJICBtZXNzYWdlcyBhcmUgY292ZXJlZCwgYnV0IGl0J3MgYSAoZ29vZCkgc3RhcnQKClRodSBTZXAgIDUgMTI6NDk6MzUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IHJlaW1wbGVtZW50ZWQgYSBsYXJnZSBwYXJ0IG9mIHRoZSBYSW5jbHVkZQoJICBwcm9jZXNzb3IsIHRyeWluZyB0byBtaW5pbWl6ZSByZXNvdXJjZXMgdXNlZCwgSmFtZXMgSGVuc3RyaWRnZQoJICBwcm92aWRlZCBhIGh1Z2UgdGVzdCBjYXNlIHdoaWNoIHdhcyBleGhpYml0aW5nIHNldmVyZSBtZW1vcnkKCSAgY29uc3VtcHRpb24gcHJvYmxlbXMuCgpUaHUgU2VwICA1IDEwOjA3OjEzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW06IGFwcGxpZWQgcGF0Y2ggZnJvbSBDaHJpc3RvcGhlIE1lcmxldCB0bwoJICByZWVzdGFibGlzaCBERVNURElSCgpXZWQgU2VwICA0IDE0OjEzOjM0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbjogZml4ZXMgbGliYXJ5IHBhdGggZm9yIHg4Nl82NCBBTUQKClR1ZSBTZXAgIDMgMjE6MTQ6MTkgTURUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC9pbmNsdWRla2V5d29yZC5jCgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC54bWw6CgkocGx1cyByZXN1bHRpbmcgZ2VuZXJhdGVkIGh0bWwgZmlsZXMpCglmaXhpbmcgb25lIHNwb3QgSSBtaXNzZWQgaW4gdGhlIHR1dG9yaWFsIHdoZXJlIEkgaGFkbid0IGZyZWVkCgltZW1vcnkgcHJvcGVybHkKClNhdCBBdWcgMzEgMTk6MzE6MTcgTURUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC9pbmNsdWRlYWRkYXR0cmlidXRlLmMKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVhZGRrZXl3b3JkLmMKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVnZXRhdHRyaWJ1dGUuYwoJKiBkb2MvdHV0b3JpYWwvaW5jbHVkZWtleXdvcmQuYwoJKiBkb2MvdHV0b3JpYWwveG1sdHV0b3JpYWwueG1sCgkqIGRvYy90dXRvcmlhbC8qLmh0bWw6Cgl1cGRhdGUgdHV0b3JpYWwgdG8gcHJvcGVybHkgZnJlZSBtZW1vcnkgKHRoYW5rcyB0byBDaHJpc3RvcGhlcgoJUi4gSGFycmlzIGZvciBwb2ludGluZyBvdXQgdGhhdCB0aGlzIG5lZWRzIHRvIGJlIGRvbmUpCgkqIGRvYy90dXRvcmlhbC9pbWFnZXMvY2FsbG91dHMvKi5wbmc6CglhZGRlZCBpbWFnZSBmaWxlcyBzbyB0aGUgY2FsbG91dHMgYXJlIGdyYXBoaWNhbCwgbWFraW5nIGl0CgllYXNpZXIgdG8gcmVhZCAoIHVzZSAiLS1wYXJhbSBjYWxsb3V0LmdyYXBoaWNzIDEiIHRvIGdlbmVyYXRlCglodG1sIHdpdGggZ3JhcGhpY2FsIGNhbGxvdXRzKQoKV2VkIEF1ZyAyOCAxMzo0NDo1NCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL0xpYnhtbDItTG9nby0xODB4MTY4LmdpZiBkb2MvTGlieG1sMi1Mb2dvLTkweDM0LmdpZjoKCSAgbmljZSBsb2dvcyBnZW5lcmF0ZWQgYnkgTWFyYyBMaXlhbmFnZQoJKiBkb2Mvc2l0ZS54c2wgKi5odG1sOiBjaGFuZ2VkIHRoZSBzdHlsZXNoZWV0IHRvIHNob3cgdGhlIG5ldwoJICBsb2dvIGFuZCByZWdlbmVyYXRlZCB0aGUgcGFnZXMKClN1biBBdWcgMjUgMTY6Mzg6MDUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGhhbmRsZSBXaW5kb3dzIHNlcGVjaWZpYyBmaWxlOi8vbG9jYWxob3N0LyBzZW1hbnRpYyAuLi4KClRodSBBdWcgMjIgMjI6MDM6MTkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHBvc3NpYmxlIG1lbSBsZWFrIHBhdGNoIGZyb20gSmFzb24gQWRhbXMKClRodSBBdWcgMjIgMTc6Mjc6MzAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGludGVncmF0ZWQgeGY6ZXNjYXBlLXVyaSgpIGZyb20gV2VzbGV5IFRlcnBzdHJhCgkgIGluIHRoZSBYUXVlcnkgbmFtZXNwYWNlCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC4yNAoJKiBkb2MvKi5odG1sOiB1cGRhdGVkIHRoZSB3ZWIgcGFnZXMKClRodSBBdWcgMjIgMTY6MTk6NDIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IGNsb3NpbmcgYnVnICM4NTI1OCBieSBnZW5lcmF0aW5nIGNvbmRpdGlvbmFsCgkgIGNvbXBpbGUgY2hlY2sgdG8gYXZvaWQgbGlua2luZyB0byByb3V0aW5lcyBub3QgY29uZmlndXJlZCBpbi4KCjIwMDItMDgtMjIgIEhhdm9jIFBlbm5pbmd0b24gIDxocEBwb2JveC5jb20+CgoJKiBhdXRvZ2VuLnNoOiB1cGRhdGUgZXJyb3IgbWVzc2FnZSBmb3IgbWlzc2luZyBhdXRvbWFrZQoKVGh1IEF1ZyAyMiAxMTo0NTo1MCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiB0eXBvIGluIHRhcmdldCBuYW1lIHJlc3VsdGVkIGluIGxpYnhtbDIucHkKCSAgdG8gbm90IGJlIHJlYnVpbHQuIGZpeGVkIERFU1RESVIgc2ltaWxhcnkgdG8gdGhlIGxpYnhzbHQgb25lLgoKVGh1IEF1ZyAyMiAwOToxNTowMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvd2luMzIvTWFrZWZpbGUubWluZ3c6IHVwZGF0ZWQgd2l0aCB2ZXJzaW9uIGZyb20gCgkgIEVsaXphYmV0aCBCYXJoYW0gYXQgaHR0cDovL3NvZ2d5dHJvdXNlcnMubmV0L3JlcG9zaXRvcnkvCgpUdWUgQXVnIDIwIDE2OjQwOjQ4IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL01ha2VmaWxlLm1zdmM6IGFkZGVkIHRoZSBwcmVmaXggbG9jYXRpb24gdG8gdGhlIGluY2x1ZGUKCWFuZCBsaWIgc2VhcmNoIHBhdGguCgoyMDAyLTA4LTE4ICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcG9ib3guY29tPgoKCSogYXV0b2dlbi5zaDogaGFyZGNvZGUgYWNsb2NhbC0xLjQvYXV0b21ha2UtMS40IHNvIHRoYXQgdXNlcnMgd2l0aAoJYm90aCBhdXRvbWFrZSAxLjYgYW5kIDEuNCBpbnN0YWxsZWQgZ2V0IHRoZSByaWdodCBhdXRvbWFrZS4gTWVhbnMKCWNvbXBpbGF0aW9uIGZyb20gQ1ZTIHdpbGwgbm93IHJlcXVpcmUgdGhlIGxhdGVzdCBhdXRvbWFrZSAxLjQKCXJlbGVhc2UsIG9yIG1hbnVhbGx5IGNyZWF0aW5nIHN5bWxpbmtzIGNhbGxlZCAiYXV0b21ha2UtMS40IiBhbmQKCSJhY2xvY2FsLTEuNCIKCldlZCBBdWcgMTQgMTg6NTQ6MTkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBweXRob24vTWFrZWZpbGUuYW06IG1vcmUgQU1EIDY0IGluZHVjZWQgY2hhbmdlcyBmcm9tCgkgIEZyZWRlcmljIENyb3phdAoKV2VkIEF1ZyAxNCAxNjo0Mzo1MyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogb29wcyBJIHdhcyBtaXNzaW5nIHRoZSB4bWw6YmFzZSBmaXh1cCB0b28KCSogcmVzdWx0L1hJbmNsdWRlLyoueG1sOiB0aGlzIGFkZHMgeG1sOmJhc2UgYXR0cmlidXRlcyB0byBtb3N0CgkgIHJlc3VsdHMgb2YgdGhlIHRlc3RzCgpXZWQgQXVnIDE0IDE2OjA1OjM3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBxdWljayBidXQgYXBwYXJlbnRseSB3b3JraW5nIGltcGxlbWVudGF0aW9uIG9mCgkgIHhpOmZhbGxiYWNrLCBzaG91bGQgY2xvc2UgYnVnICM4OTY4NAoJKiBNYWtlZmlsZS5hbSB0ZXN0L1hJbmNsdWRlL2RvY3MvZmFsbGJhY2sueG1sIAoJICByZXN1bHQvWEluY2x1ZGUvZmFsbGJhY2sueG1sOiBhZGRlZCBhIGJhc2ljIHRlc3QgZm9yIGZhbGxiYWNrLAoJICBhbmQgcnVuIHdpdGggLS1ub3dhcm5pbmcgdG8gYXZvaWQgYSBzcHVyaW91cyB3YXJuaW5nCgkqIGNvbmZpZ3VyZS5pbjogYXBwbGllZCBwYXRjaCBmcm9tIEZyZWRlcmljIENyb3phdCBmb3IgcHl0aG9uCgkgIGJpbmRpbmdzIG9uIEFNRCA2NGJpdHMgbWFjaGluZXMuCgpXZWQgQXVnIDE0IDEwOjQ3OjQ2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogeG1sU0FYVXNlclBhcnNlTWVtb3J5KCkgcmVhbGx5IG91Z2h0IHRvIGZhaWwgaWYKCSAgdGhlIGNhbGxlciBkb24ndCBwYXNzIGEgU0FYIGNhbGxiYWNrIGJsb2NrLgoKV2VkIEF1ZyAxNCAxMDoyOTowMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhcHBsaWVkIHRoZSBzYW1lIGZpeCBmb3IgdGhlIFhNTC0xLjAgbmFtZXNwYWNlIHRvCgkgIHhtbFNlYXJjaE5zQnlIcmVmKCkgYXMgd2FzIGRvbmUgZm9yIHhtbFNlYXJjaE5zKCkKCk1vbiBBdWcgMTIgMTY6NTI6MDggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC4zOiBzbWFsbCBjbGVhbnVwIG9mIHRoZSBtYW4gcGFnZQoJKiBIVE1MdHJlZS5jOiBmaXhlZCBhIHBvdGVudGlhbCBwcm9ibGVtIHJhaXNlZCBieSBQZXRyIFZhbmRyb3ZlYwoJICB3aGVuIHNlcmlhbGl6aW5nIEhSRUYgYXR0cmlidXRlcyBnZW5lcmF0ZWQgYnkgWFNMVC4KCk1vbiBBdWcgMTIgMTU6MjQ6MDUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgaW5jbHVkZS9saWJ4bWwvSFRNTHRyZWUuaDogaW50ZWdyYXRlZCBhIGNsZWFuZWQgdXAKCSAgdmVyc2lvbiBvZiBNYXJjIExpeWFuYWdlJyBwYXRjaCBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzIGluIEhUTUwKCSAgb3V0cHV0CgpNb24gQXVnIDEyIDE0OjExOjU5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vdGVzdHMvc2VyaWFsaXplLnB5OiBmaXhlZCB0aGUgdGVzdCByZXN1bHRzLCBpbmRlbnRpbmcKCSAgYmVoYXZpb3VyIGNoYW5nZWQgc2xpZ2h0bHkKClRodSBBdWcgIDggMTE6MDA6MjYgMjAwMiAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYWRkZWQKCW5ldyBjMTRuIGZ1bmN0aW9uIHRvIFdpbmRvd3MgZGVmIGZpbGVzCgpGcmkgQXVnICAyIDE2OjQ2OjQ2IDIwMDIgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogYzE0bi5jOiBmaXhlZCBhIG1lbW9yeSBsZWFrIGluIGMxNG4gY29kZQoKU2F0IEF1ZyAgMyAwMDoxNTowNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IGFkZGluZyBhIG5ldyBBUEkgZm9yIENocmlzdGlhbgoJICBHbGFobjogeG1sUGFyc2VCYWxhbmNlZENodW5rTWVtb3J5UmVjb3ZlcgoJKiB2YWxpZC5jOiBwYXRjaCBmcm9tIFJpY2sgSm9uZXMgZm9yIHNvbWUgZ3JhbW1hciBjbGVhbnVwIGluCgkgIHZhbGlkYXRpb24gbWVzc2FnZXMKCSogcmVzdWx0L1ZDLyogcmVzdWx0L3ZhbGlkLyo6IHRoaXMgc2xpZ2h0bHkgY2hhbmdlIHNvbWUgb2YgdGhlCgkgIHJlZ3Jlc3Npb24gdGVzdHMgb3V0cHV0cwoKVGh1IEF1ZyAgMSAxNDo1MDoyOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiB0cnlpbmcgdG8gZml4IGEgcHJvYmxlbSBpbiBuYW1lc3BhY2VkIGF0dHJpYnV0ZSBoYW5kbGluZwoJICByYWlzZWQgYnkgQ2hyaXN0aWFuIEdsYWhuCgpUaHUgQXVnICAxIDEyOjE3OjMwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jIGluY2x1ZGUvbGlieG1sL2VuY29kaW5nLmg6IE9wZW5pbmcgdGhlIGludGVyZmFjZQoJICB4bWxOZXdDaGFyRW5jb2RpbmdIYW5kbGVyIGFzIHJlcXVlc3RlZCBpbiAjODk0MTUKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vc2V0dXAucHkuaW46IGFwcGxpZWQgY2xlYW51cAoJICBwYXRjaGVzIGZyb20gTWFyYy1BbmRyZSBMZW1idXJnCgkqIHRyZWUuYzogZml4aW5nIGJ1ZyAjODkzMzIgb24gYSBzcGVjaWZpYyBjYXNlIG9mIGxvb3NpbmcgCgkgIHRoZSBYTUwtMS4wIG5hbWVzcGFjZSBvbiB4bWw6eHh4IGF0dHJpYnV0ZXMKCldlZCBKdWwgMzEgMjM6Mjc6NDIgMjAwMiAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBjMTRuLmMgaW5jbHVkZS9saWJ4bWwvYzE0bi5oOiBmaXhlZCBvbmUgbW9yZSBjMTRuICsgbmFtZXNwYWNlcwoJY29ybmVyIGNhc2UgZnJvbSBuZXcgTWVybGluJ3MgdGVzdCBzdWl0ZSBhbmQgYWRkZWQgYSBjYWxsYmFjawoJdGhhdCB3aWxsIGJlIHVzZWQgdG8gaW1wcm92ZSB4bWxzZWMgcGVyZm9ybWFuY2UKCk1vbiBKdWwgMjkgMTg6MjI6MDAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmM6IHRyeWluZyB0byBmaXggdGhlIDxzdHlsZT4gZXNjYXBpbmcgcHJvYmxlbSBpbgoJICBIVE1MIHNlcmlhbGl6YXRpb24gYnVnICM4OTM0MgoKVGh1IEp1bCAyNSAwMTozMzo0NyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL3htbC5odG1sIGRvYy8qLmh0bWw6IGFwcGxpZWQgc3ludGF4IHBhdGNoIGZyb20gUmljayBKb25lcwoJICBhbmQgcmVidWlsdCB0aGUgd2ViIHNpdGUuCgpNb24gSnVsIDIyIDExOjA0OjQ4IFBEVCAyMDAyICBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBhZGRlZCBfcHJpdmF0ZSBtZW1iZXIgdG8geG1sTnMgc3RydWN0CgpTdW4gSnVsIDIxIDE3OjQ4OjQ3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGluZyBidWcgIzg0ODc2IGJhc2VkIG9uIHRoZSB4bWwgd29ya2luZwoJICBjb2RlLgoKU3VuIEp1bCAyMSAxOToxNTowMCBIS1QgMjAwMiBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbTogZW5oYW5jZWQgdG8gZml4IGJ1ZyA3MjAxMiAoZXJyb3JzCgkgIHdoZW4gdXNpbmcgJy1qWCcgbWFrZSBwYXJhbWV0ZXIpCgpGcmkgSnVsIDE5IDE2OjM1OjAwIEhLVCAyMDAyIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogc21hbGwgYWRkaXRpb25hbCBlbmhhbmNlbWVudCBmb3IgYm9vbGVhbnMKCSAgY29tcGFyZWQgdG8gbm9kZXNldHMKCldlZCBKdWwgMTcgMTk6NDg6MTQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmM6IGNoYW5nZWQgdGhlIG9yZGVyIG9mIHRoZSBlbmNvZGluZyBkZWNsYXJhdGlvbgoJICBhdHRyaWJ1dGVzIGluIHRoZSBtZXRhIHRhZ3MgZHVlIHRvIGEgYnVnIGluIElFL01hYwoKRnJpIEp1bCAxMiAwODo0NTowMCBIS1QgMjAwMiBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IGVuaGFuY2VkIGhhbmRsaW5nIG9mIGJvb2xlYW5zIChlc3BlY2lhbGx5ICc9JwoJICBhbmQgJyE9JyBmb3Igbm9kZXNldHMpIC0gZml4ZXMgYnVnIDg1MjU2LiAgQWRkZWQgbmV3CgkgIHJvdXRpbmUgeG1sWFBhdGhOb3RFcXVhbFZhbHVlcyBmb3IgbW9yZSBwcm9wZXIgaGFuZGxpbmcKCSAgb2YgJyE9JyB3aGVuIG5vZGVzZXRzIGFyZSBpbnZvbHZlZC4KClRodSBKdWwgMTEgMjE6NDU6NTIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9NYWtlZmlsZS5hbTogZml4aW5nIFJlZCBIYXQgYnVnICM2ODYxNCBieSBhZGRpbmcgdGhlCgkgIGRvYy94bWxjYXRhbG9nX21hbi54bWwgdG8gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24KCldlZCBKdWwgMTAgMjE6MjY6MTMgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvTWFrZWZpbGUubXN2YzogQWRkZWQgYSBjb3B5ICoucGRiIHRvIGluc3RhbGwsIGZldyBoYXZlCgkgIGFza2VkIGZvciB0aGlzLgoKU2F0IEp1bCAgNiAyMTo1NTo1OSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjIzCgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2NzCgpTYXQgSnVsICA2IDIxOjExOjIwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4aW5nIGJ1ZyAjODQxNjkgYnkgZml4aW5nIHRoZQoJICBjb21tZW50IG9mIHhtbENyZWF0ZVB1c2hQYXJzZXJDdHh0IHRvIGRlc2NyaWJlIHRoZSAKCSAgZW5jb2RpbmcgZGV0ZWN0aW9uIHBhcmFtZXRlcnMgYmV0dGVyLgoKU2F0IEp1bCAgNiAxOTo0NDo1NiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4aW5nIGJ1ZyAjNzkzMzEgaW4gb25lIHBhdGggdGhlIGxvb2t1cCBmb3IKCSAgSUQgYXR0cmlidXRlcyBvbiBhIG5hbWVzcGFjZWQgbm9kZSB3YXNuJ3QgaGFuZGxlZCBjb3JyZWN0bHkgOi1cCgpGcmkgSnVsICA1IDIwOjA3OjQzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IHRyeWluZyB0byBmaXggODcyMzUgYWJvdXQgZGlzY2FyZGVkIHdoaXRlCgkgIHNwYWNlcyBpbiB0aGUgSFRNTCBwYXJzZXIuCgkqIHJlc3VsdC9IVE1MLyo6IHRoaXMgY2hhbmdlcyB0aGUgb3V0cHV0IG9mIGEgbnVtYmVyIG9mIEhUTUwKCSAgcmVncmVzc2lvbiB0ZXN0cwoKTW9uIEp1bCAgMSAyMzoyMzo0MSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogYXBwbGllZCBwYXRjaCBmcm9tIFJpY2hhcmQgSmlua3MgZm9yIHRoZSBuYW1lc3BhY2UKCSAgYXhpcyArIGZpeGVkIGEgbWVtb3J5IGVycm9yLgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYzogYXBwbGllZCBwYXRjaGVzIGZyb20gUGV0ZXIgSmFjb2JpCgkgIHJlbW92aW5nIGN0eHQtPnRva2VuIGZvciBnb29kLgoJKiB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmM6IGZpeGVkIGEgZmV3IG1lbW9yeSBsZWFrcwoJICBwb3BwZWQgb3V0IGJ5IHRoZSByZWdyZXNzaW9uIHRlc3RzLgoJKiBNYWtlZmlsZS5hbTogcGF0Y2ggZm9yIHRocmVhZHMgbWFrZWZpbGUgZnJvbSBHYXJ5IFBlbm5pbmd0b24KCkZyaSBKdW4gMjggMTk6Mzg6MDAgSEtUIDIwMDIgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBlbmhhbmNlZCBiZWhhdmlvdXIgb2YgcG9zaXRpb24oKSBhZnRlciB1c2FnZSBvZgoJICBleHByZXNzaW9ucyBpbnZvbHZpbmcgcHJlY2VkaW5nLXNpYmxpbmcgKGV0IGFsKS4KClR1ZSBKdW4gMTggMDk6NTg6NDggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGhhc2guYzogYXBwbGllZCBhIHBhdGNoIGZyb20gUGV0ZXIgSmFjb2JpIHRvIHNvbHZlIGEgcHJvYmxlbQoJICB3aGVuIGNvbXBpbGluZyB3aXRoIHRoZSBXYXRjb20gQyBvbiBXaW4zMiAKCSogcmVzdWx0L3NjaGVtYXMvKi5lcnI6IHRoZSBjaGFuZ2Ugb2YgaGFzaGluZyBhbGdvIGdlbmVyYXRlZAoJICBwZXJtdXRhdGlvbnMgaW4gdGhlIG91dHB1dAoKTW9uIEp1biAxNyAxOTowMjo0OSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaGFzaC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gU2FuZGVyIFZlc2lrIGltcHJvdmluZyB0aGUgcXVhbGl0eSBvZgoJICB0aGUgaGFzaCBmdW5jdGlvbi4KCjIwMDItMDYtMTQgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogRE9DQnBhcnNlci5jIEhUTUxwYXJzZXIuYyBkZWJ1Z1hNTC5jIGVuY29kaW5nLmMKCW5hbm9mdHAuYyBuYW5vaHR0cC5jIHBhcnNlci5jIHRyZWUuYyB1cmkuYyB4bWxJTy5jCgl4bWxsaW50LmMgeHBhdGguYzogcmVwbGFjZWQgc3ByaW50ZigpIHdpdGggc25wcmludGYoKQoJdG8gcHJldmVudCBwb3NzaWJsZSBidWZmZXIgb3ZlcmZsb3cgKHRoZSBidWcgd2FzIHBvaW50ZWQKCW91dCBieSBBbmp1IFByZW1hY2hhbmRyYW4pIAoKVGh1IEp1biAxMyAxNzozMDoyNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHJlbW92ZWQgYW4gdW5pbml0aWFsaXplZCBkYXRhIGVycm9yIHBvcHBlZCBieSB2YWxncmluZAoJICBvbiBQRSByZWZlcmVuY2VzCgpXZWQgSnVuIDEyIDIxOjM4OjQ2IE1EVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sLmh0bWwKCWFkZGluZyB0dXRvcmlhbCByZWZlcmVuY2UgdG8gdGhlIHdlYiBwYWdlCgpXZWQgSnVuIDEyIDIxOjI2OjA4IE1EVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvdHV0b3JpYWwveG1sdHV0b3JpYWwueG1sCgkqIGRvYy90dXRvcmlhbC9hcjAxczA3Lmh0bWwKCSogZG9jL3R1dG9yaWFsL2FwZS5odG1sCgkqIGRvYy90dXRvcmlhbC9pbmNsdWRlZ2V0YXR0cmlidXRlLmMKCWFkZGluZyBzZWN0aW9uIHRvIHR1dG9yaWFsIGFib3V0IHJldHJpZXZpbmcgYW4gYXR0cmlidXRlCgl2YWx1ZQoKVHVlIEp1biAxMSAxMjowNzowNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGFwcGxpZWQgYSBjb3VwbGUgb2YgcGF0Y2hlcyBmcm9tIFBldGVyIEphY29iaSB0byBzdGFydAoJICB0byBnZXQgcmlkIG9mIGN0eHQtPnRva2VuLCB3aXRoIGEgcG9zc2libGUgc2lnbmlmaWNhbnQgc3BlZWQKCSAgaW1wcm92ZW1lbnQgdG8gYmUgZ2FpbmVkIG9uY2UgZG9uZS4gQmV0dGVyIGNvbXBsaWFuY2Ugd2l0aCBQRQoJICByZWZlcmVuY2VzIGNvbnN0cnVjdHMgaW4gRFREcyB0b28uCgkqIHRlc3QvdmFsaWQvdFswLTldKiByZXN1bHQvdmFsaWQvdFswLTldKjogYWRkZWQgYSBzZXQgb2YgdGVzdHMKCSAgZnJvbSBQZXRlciB0b28KClR1ZSBKdW4gMTEgMDk6MjU6MTIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBCYWJhayBWYWhlZGlwb3VyLUt1bnplIHJlcG9ydGVkIHRoYXQgb3BlblRhZyBpbiAKCSAgeG1sUGFyc2VFbGVtZW50IHdhcyBsaWtlbHkgdG8gaGF2ZSBiZWVuIGRlYWxsb2NhdGVkIGF0IHRoZQoJICB0aW1lIG9mIHRoZSByZXBvcnQsIHBvc3NpYmx5IGxlYWRpbmcgdG8gc2VnZmF1bHQuIEp1c3QgcmVwb3J0CgkgIHRoZSB0YWcgbmFtZSBub3cuCgpNb24gSnVuIDEwIDE4OjAwOjAyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBwYXRjaCBmcm9tIFJpY2hhcmQgSmlua3MgZm9yIFhQYXRoIHN1YnN0cmluZygpIGZ1bmN0aW9uCgkqIHJlc3VsdC9YUGF0aC9leHByL3N0cmluZ3MgdGVzdC9YUGF0aC9leHByL3N0cmluZ3M6IG5ldyBzZXQgb2YgdGVzdHMKCjIwMDItMDYtMDYgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogeG1sSU8uYzogcGF0Y2ggZnJvbSBSYWNoZWwgSGVzdGlsb3cgdG8gZml4IGJ1ZyAjODQzNDAKCldlZCBKdW4gIDUgMTk6MTQ6NDkgTURUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqZG9jL0ZBUS5odG1sCglmaXhpbmcgdHlwb3MgaW4gRkFRLCB0aGFua3MgdG8gUm9iZXJ0IEZ1bm5lbGwgZm9yIHRoZQoJZWRpdGluZyBoZWxwCgpXZWQgSnVuICA1IDE0OjUwOjI0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBORVdTOiBnb3QgY29tcGxhaW50cyBmcm9tIHJwbWxpbnQgdGhhdCBpdCB3YXMgZW1wdHkKClR1ZSBKdW4gIDQgMDk6MDk6MTggTURUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGFkZGVkIGRvYy90dXRvcmlhbCwgaW5jbHVkaW5nOgoJYXBhLmh0bWwKCWFwYi5odG1sCglhcGMuaHRtbAoJYXBkLmh0bWwKCWFyMDFzMDIuaHRtbAoJYXIwMXMwMy5odG1sCglhcjAxczA0Lmh0bWwKCWFyMDFzMDUuaHRtbAoJYXIwMXMwNi5odG1sCglpbmNsdWRlYWRkYXR0cmlidXRlLmMKCWluY2x1ZGVhZGRrZXl3b3JkLmMKCWluY2x1ZGVrZXl3b3JkLmMKCWluY2x1ZGVzdG9yeS54bWwKCWluZGV4Lmh0bWwKCXhtbHR1dG9yaWFsLnhtbAoJbGlieG1sIHR1dG9yaWFsLCBpbmNsdWRpbmcgZ2VuZXJhdGVkIGh0bWwKCk1vbiBKdW4gIDMgMjE6MjE6MjYgMjAwMiAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiByZXN1bHQvYzE0bi9leGMtd2l0aG91dC1jb21tZW50cy9tZXJsaW4tYzE0bi10d28tKgoJICByZXN1bHQvYzE0bi93aXRob3V0LWNvbW1lbnRzL21lcmxpbi1jMTRuLXR3by0qCgkgIHRlc3QvYzE0bi9leGMtd2l0aG91dC1jb21tZW50cy9tZXJsaW4tYzE0bi10d28tKgoJICB0ZXN0L2MxNG4vd2l0aG91dC1jb21tZW50cy9tZXJsaW4tYzE0bi10d28tKgoJICB0ZXN0QzE0Ti5jIE1ha2VmaWxlLmFtOiBhZGRlZCBtZXJsaW4tYzE0bi10d28udGFyLmd6IHRlc3RzIGZvciAKCWMxNG4vZXhjLWMxNG4gYW5kIHNsaWdodGx5IG1vZGlmaWVkIHRlc3Qgc2NyaXB0IHRvIGhhbmRsZQoJdGhlc2UgdGVzdCBjYXNlcwoJKiBjMTRuLmM6IGZpeGVkIGJ1Z3MgZm9yIGNvbXBsaWNhdGVkIG5vZGVzIHNldCAobmFtZXNwYWNlCgl3aXRob3V0IG5vZGUgYW5kIG90aGVycyBmcm9tIG1lcmxpbi1jMTRuLXR3by50YXIuZ3opCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmggd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYwoJd2luMzIvbGlieG1sMi5kZWYuc3JjOiAib3BlbmVkIiB4bWxYUGF0aE5vZGVTZXRGcmVlTnMoKSBmdW5jdGlvbgoJZm9yIHhtbHNlYyBwZXJmb3JtYW5jZSBwYXRjaAoJKiB4cGF0aC5jOiBmaXhlZCBzZWxmOjpub2RlKCkgZm9yIG5hbWVzcGFjZXMgYW5kIGF0dHJpYnV0ZXMKCk1vbiBKdW4gMDMgMDA6MDQ6MjEgMjAwMiBDaGVtYSBDZWxvcmlvIDxjaGVtYUB4aW1pYW4uY29tPgoKCSogdHJlZS5oOiBhZGRlZCB4bWxEb2NGb3JtYXREdW1wIHdoaWNoIGlzIGp1c3QgYXMgeG1sRG9jRHVtcAoJICBidXQgd2l0aCB0aGUgZm9ybWF0IHBhcmFtZXRlcgoJKiB0cmVlLmM6IG1hZGUgeG1sRG9jRHVtcCBhIHdyYXBwZXIgYXJyb3VuZCB4bWxEb2NGb3JtYXREdW1wCgpGcmkgTWF5IDMxIDEyOjE2OjQ4IDIwMDIgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogTWFrZWZpbGUuYW06IHVwZGF0ZWQgYzE0biB0ZXN0cyBzdWl0ZQoJKiBjMTRuLmM6IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGZvciBwcmV2aW91cyBjMTRuIHBhdGNoCgpGcmkgTWF5IDMxIDExOjQ3OjEyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYW5vdGhlciBwZXJvZm9ybWFuY2UgcGF0Y2ggZnJvbSBQZXRlciBKYWNvYmksIHRoYXQKCSAgdGltZSBvbiBwYXJzaW5nIGF0dHJpYnV0ZSB2YWx1ZXMuCgpUaHUgTWF5IDMwIDIzOjM0OjI3IDIwMDIgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogTWFrZWZpbGUuYW0gcmVzdWx0L2MxNG4vKiB0ZXN0L2MxNG4vKjogQzE0TiB0ZXN0cyBpbnRlZ3JhdGVkCglpbnRvIExpYlhNTDIgdGVzdCBzdWl0ZQoKVGh1IE1heSAzMCAyMToyMzowNiAyMDAyICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIGMxNG4uYzogcHJvcGFnYXRpbmcgeHBhdGggYW5jZXNzdG9ycyBub2RlIGZpeCB0byBjMTRuCglwbHVzIHNtYWxsIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IHRvIHJlZHVjZSBudW1iZXIgb2YKCW1hbGxvY3MKCSogeHBhdGguYzogZml4ZWQgYW5jZXN0b3JzIGF4aXMgcHJvY2Vzc2luZyBmb3IgbmFtZXNwYWNlIG5vZGVzCgpXZWQgTWF5IDI5IDEwOjIxOjM5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYyBwYXJzZXIuYyB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBwZXJmb3JtYW5jZSBwYXRjaCBmcm9tCgkgIFBldGVyIEphY29iaQoKTW9uIE1heSAyNyAyMzoxODozMyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjIyCgpNb24gTWF5IDI3IDE2OjQ0OjA0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgd2luMzIvbGlieG1sMi5kZWYuc3JjIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmMKCSAgaW5jbHVkZS9saWJ4bWwvSFRNTHBhcnNlci5oOiBmaXhpbmcgIzc5MzM0IG1ha2luZyBodG1sUGFyc2VEb2N1bWVudAoJICBhIHB1YmxpYyBlbnRyeSBwb2ludC4KCSogZG9jLyo6IHJlYnVpbHQgdGhlIEFQSSBhbmQgZG9jcwoKTW9uIE1heSAyNyAxNDoxNjoyOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzIHRvIGZpeCBhIHByb2JsZW0gaW50cm9kdWNlZAoJICBpbiB0aGUgcHJldmlvdXMgcGF0Y2ggYW5kIHBvaW50ZWQgYnkgTm9ybQoKRnJpIE1heSAyNCAxMzoxMDoyMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW46IGZpeGluZyBidWcgIzgxMTEyCgpGcmkgTWF5IDI0IDEzOjAzOjI0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYzogZml4aW5nIGJ1ZyAjODI4NDgKCkZyaSBNYXkgMjQgMDk6NTQ6NDkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlc3VsdC9jYXRhbG9ncy9teWNhdGFsb2cuZnVsbDogQWxla3NleSdzIGNvbW1pdCBjaGFuZ2VkIHRoZQoJICBvdXRwdXQgb2Ygb25lIGNhdGFsb2cgdGVzdAoKRnJpIDI0IE1heSAyMDAyIDEyOjE3OjQ1IEFNIFBEVCBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogZ2xvYmFsLmRhdGEgZ2xvYmFscy5jIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggCgl3aW4zMi9saWJ4bWwyLmRlZi5zcmMgd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYzogY2hhbmdlZAoJZGVmYXVsdCB2YWx1ZSBmb3IgZ2xvYmFsIHBhcmFtZXRlciB4bWxJbmRlbnRUcmVlT3V0cHV0IHRvIDEgYW5kCglpbnRyb2R1Y2VkIG5ldyBnbG9iYWwgcGFyYW1ldGVyIHhtbFRyZWVJbmRlbnRTdHJpbmcgKHRoZSBzdHJpbmcKCXVzZWQgdG8gZG8gb25lLWxldmVsIGluZGVudCkgd2l0aCBkZWZhdWx0IHZhbHVlICIgICIgKGFzIGl0IHdhcwoJaW4gdHJlZS5jKQoKVGh1IE1heSAyMyAxMzo1NTo1NyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IE1lcmlqbiBCcm9lcmVuIHBvaW50ZWQgb3V0IGEgcHJvYmxlbSB3aGVuIGNvbXBpbGluZwoJICB3aXRoIHRyaW8gYW5kIHNjaGVtYXMuCgpXZWQgTWF5IDIyIDExOjU3OjQ5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBwYXRjaCBmcm9tIFJpY2hhcmQgSmlua3MgdG8gZml4IHRoZSBwcm9ibGVtIHJhaXNlZCBpbgoJICBodHRwOi8vbWFpbC5nbm9tZS5vcmcvYXJjaGl2ZXMveG1sLzIwMDItQXByaWwvbXNnMDAyNDYuaHRtCgpXZWQgTWF5IDIyIDA4OjM4OjE5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IGEgYml0IG9mIHdvcmsgb24gaW1wb3J0LgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogQ2hhcmxlcyBCb3plbWFuIHByb3ZpZGVkIGEgY29tcGFyZSBmdW5jdGlvbgoJICBmb3IgZGF0ZS90aW1lIHR5cGVzIHNvIG1pbi9tYXggZmFjZXQgcmVzdHJpY3Rpb25zIHNob3VsZCB3b3JrLAoJICBpbmRldGVybWluYXRlIGNvbXBhcmlzb25zIHJldHVybiBhbiBlcnJvciBpbnN0ZWFkIG9mIGVxdWFsLgoJKiB0ZXN0L3NjaGVtYXMvZGF0ZV8wKiByZXN1bHQvc2NoZW1hcy9kYXRlXzBfMDogc3BlY2lmaWMgdGVzdAoJICBmcm9tIENoYXJsZXMgQm96ZW1hbiB0b28KClNhdCBNYXkgMTggMDk6NTQ6MTIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC4zIGRvYy9idWlsZERvY0Jvb2tDYXRhbG9nOiBhcHBseSBhIGNvdXBsZSBvZiBwYXRjaGVzCgkgIGZyb20gQ2hyaXN0aWFuIENvcm5lbHNzZW4gZml4aW5nIHRoZSBtYW4gcGFnZXMgYW5kIHRoZSBDYXRhbG9nCgkgIGJ1aWxkaW5nIHNjcmlwdC4KCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaDogbm90aGluZyBuZXcgeWV0CgkgIG5leHQgc3RlcCBpcyA8eHM6aW1wb3J0PiBJIG5vdyBoYXZlIGEgcmVhc29uYWJsZSB1bmRlcnN0YW5kaW5nCgkgIG9mIGhvdyBpdCB3b3Jrcy4KClRodSBNYXkgMTYgMTA6NDM6MjYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGFwcGxpZWQgYSBzbWFsbCBidWZmZXIgcGVyZm9ybWFuY2UgcGF0Y2ggZnJvbSBHYXJ5IFBlbm5pbmd0b24KCldlZCBNYXkgMTUgMDA6MjU6MzQgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBleHBvcnRlZCB4bWxYUGF0aE5vZGVTZXRBZGROcygpCgpUdWUgTWF5IDE0IDEzOjAwOjQ4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXhpbmcgYW4gWFBhdGggZnVuY3Rpb24gZXZhbHV0YXRpb24gYnVnIHBvaW50ZWQgb3V0CgkgIGJ5IEFsZXhleSBFZmltb3Ygd2hlcmUgdGhlIGNvbnRleHQgd2FzIGxvc3Qgd2hlbiBldmFsdWF0aW5nCgkgIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMKCk1vbiAxMyBNYXkgMjAwMiAxMTozNzozOSBQTSBQRFQgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDogbWFrZWQgeG1sWFBhdGhOb2RlU2V0QWRkTnMoKSAKCSAgZnVuY3Rpb24gcHVibGljIGZvciBYTUxTZWMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucwoKTW9uIE1heSAxMyAxMjozMjoyMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sMmNsYXNzLnR4dCA6IGZpeGVkIGEgcHJvYmxlbQoJICB3aXRoIHRoZSBIVE1MIHBhcnNlciBwb2ludGVkIGJ5IEdhcnkgQmVuc29uCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcHVzaFNBWGh0bWwucHk6IHNkZGluZyB0aGUKCSAgZXhhbXBsZQoKVGh1IDA5IE1heSAyMDAyIDExOjE5OjAwIEFNIFBEVCBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoJKiBwYXJzZXIuYzogZml4ZWQgYnVnICM4MTE1OSAobWVtb3J5IGdyb3d0aCBpbiBTQVgpCgpUdWUgMDcgTWF5IDIwMDIgMDk6MjA6MjEgQU0gUERUIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgkqIHhwYXRoLmM6IGZpeGVkIGJ1ZyAjNzg4NTggKHRoZSByZWFsIGZpeCkKClNhdCAwNCBNYXkgMjAwMiAxMTo1NjozMSBQTSBQRFQgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCSogeHBhdGguYzogZml4ZWQgYnVnICM3ODg1OCAocXVpY2sgYW5kIGR1cnR5IGZpeCB0byBoaWRlIHRoZSBwcm9ibGVtKQoKU3VuIE1heSAgNSAwODo1NzowOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBtb2RpZmllZCB4bWxOb2RlU2V0QmFzZSB0byBhbGxvdyBjaGFuZ2luZyB0aGUKCSAgYmFzZSBvZiBhIGRvY3VtZW50LgoKRnJpIE1heSAgMyAwOToyMDo0MSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IHBhdGNoIENoYXJsZXMgQm96ZW1hbiBmb3IgdmFsaWRhdGlvbiBvZgoJICBhbGwgdGhlIGRhdGUsIHRpbWUsIGFuZCBkdXJhdGlvbiB0eXBlcwoJKiB0ZXN0L3NjaGVtYXMvZHVyXzAqIHJlc3VsdC9zY2hlbWFzL2R1cl8wKjogYXNzb2NpYXRlZCB0ZXN0cwoJKiBjb25maWd1cmUuaW46IGZpeGVkIGFuIGVycm9yIHBvaW50ZWQgYnkgYW4gdXNlcgoJKiB4bWwyLWNvbmZpZy5pbjogZml4ZWQgYW4gZXJyb3IgcG9pbnRlZCBieSBhbiB1c2VyCgpXZWQgMDEgTWF5IDIwMDIgMTE6Mjk6MjcgQU0gUERUIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxJTy5oIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmMKCXdpbjMyL2xpYnhtbDIuZGVmLnNyYyB4bWxJTy5jOiBleHBvcnRlZCBkZWZhdWx0CgknZmlsZTonLCAnaHR0cDonIGFuZCAnZnRwOicgcHJvdG9jb2xzIGlucHV0IGhhbmRsZXJzIAoJYW5kIG1ha2VkIHByb3RvY29scyBjb21wYXJpc3NvbiBjYXNlIGluc2Vuc2l0aXZlCgpUdWUgQXByIDMwIDE2OjI5OjA1IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IE5ldmVuIEhhcyBkZXRlY3RlZCBhIHR5cG8KClR1ZSBBcHIgMzAgMDg6NDg6MTEgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEFVVEhPUlMgSEFDS0lORzogYWRkZWQgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCSAgYXMgb25lIG9mIHRoZSBwZXJzb25zIGFsbG93ZWQgdG8gY29tbWl0IGRpcmVjdGx5IHRvIHRoZQoJICBtb2R1bGUuCgpNb24gQXByIDI5IDE3OjQ4OjI2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHByZXBhcmluZyAyLjQuMjEKCSogdmFsaWQuYzogcmFpc2VkIGEgdG9vIGxvdyBsaW1pdAoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jcyAKCldlZCBBcHIgMjQgMTM6NDE6MDMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3QvWFBhdGgvZXhwci9mbG9hdHMgdGVzdC9YUGF0aC9leHByL2Z1bmN0aW9ucwoJICByZXN1bHQvWFBhdGgvZXhwci9mbG9hdHMgcmVzdWx0L1hQYXRoL2V4cHIvZnVuY3Rpb25zCgkgIHhwYXRoLmM6IGFub3RoZXIgWFBhdGggY29uZm9ybWFuY2UgcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzCgpUdWUgQXByIDIzIDE5OjUwOjQwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IGZpeGVkIHZhbGlkYXRpb24gb2YgYXR0cmlidXRlIGdyb3Vwcy4KCSogdGVzdC9zY2hlbWFzIHJlc3VsdC9zY2hlbWFzOiBhZGRlZCBhbiBleGFtcGxlIGZyb20gdGhlIHByaW1lcgoKVHVlIEFwciAyMyAwOToxMTozNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0geG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jOiBtb3JlIHdvcmsgb24gU2NoZW1hcwoJKiB0ZXN0L3NjaGVtYXMgcmVzdWx0L3NjaGVtYXM6IHVwZGF0ZWQgdGhlIHRlc3QgbGlzdAoKTW9uIEFwciAyMiAxNzo1OToxNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogVE9ETzogdXBkYXRlZCBhIGJpdAoJKiBwYXJzZXIuYzogbWFkZSBhIGNvbW1lbnQgbW9yZSBzcGVjaWZpYwoJKiB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmM6IG1vcmUgd29yayBvbiB0aGUKCSAgU2NoZW1hcyBjb25mb3JtYW5jZS4KCSogdGVzdC9zY2hlbWFzIHJlc3VsdC9zY2hlbWFzOiB1cGRhdGVkIHRoZSB0ZXN0IGxpc3QKClNhdCBBcHIgMjAgMTk6MzY6MzkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC94bWxhdXRvbWF0YS5oOgoJICBpbXBsZW1lbnRpbmcgeHM6YWxsIHdpdGggbWluT2NjdXJzID0gMAoJKiB0ZXMvc2NoZW1hcy8qIHJlc3VsdC9zY2hlbWFzLyo6IGFkZGVkIG1vcmUgdGVzdHMgY292ZXJpbmcKCSAgeHM6YWxsCgpTYXQgQXByIDIwIDA5OjIyOjUwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYzogZmlyc3QgaW1wbGVtZW50YXRpb24gb2YgdGhlIGFsbCBwYXJ0aWNsZSwgdGhpcwoJICBtYXkgbmVlZCB0byBiZSByZXZpc2l0ZWQgZm9yIGNhc2Ugd2hlcmUgbm90IGFsbCB0cmFuc2l0aW9ucwoJICBtdXN0IGJlIGNyb3NzZWQuCgpGcmkgQXByIDE5IDE4OjI2OjA0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFub3RoZXIgZW50aXR5IHByb2Nlc3NpbmcgdXBkYXRlIGZyb20gTWFya3VzIEhlbmtlCgpGcmkgQXByIDE5IDE3OjE0OjI0IENFU1QgMjAwMiBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIHRyaW9uYW4uYzogZml4ZWQgY3Jhc2ggb24gT1NGLzEKCkZyaSBBcHIgMTkgMDk6MDA6NTYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogbW9yZSBTY2hlbWFzIHdvcmsKCSogdGVzdC9zY2hlbWFzLyogcmVzdWx0L3NjaGVtYXMvKjogYWRkZWQgbW9yZSB0ZXN0cyBjb21pbmcKCSAgZnJvbSB0aGUgc3BlYy4KClRodSBBcHIgMTggMjM6MDA6MDIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGMxNG4uYzogcGF0Y2ggZnJvbSBBbGVrc2V5IFNhbmluIHJlZmxlY3RpbmcgYSBjaGFuZ2UgaW4gdGhlCgkgIEV4Y0MxNE4gc3BlY2lmaWNhdGlvbgoKVGh1IEFwciAxOCAxODozODozMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBwYXRjaCBmcm9tIE1hcmt1cyBIZW5rZSwgZml4IGZvciByZWN1cnNpdmUgZW50aXRpZXMuCgpUaHUgQXByIDE4IDE3OjQ5OjI0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXggYSBwcm9ibGVtIHdpdGggc3RyaW5nKCkgb24gYSBkb2N1bWVudCBub2RlLgoKVGh1IEFwciAxOCAxNjo0MDo0MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0geG1sc2NoZW1hcy5jOiBtb3JlIFNjaGVtYXMgd29yawoJKiB0ZXN0L3NjaGVtYXMvKiByZXN1bHQvc2NoZW1hcy8qOiBhZGRlZCBtb3JlIHRlc3RzIGNvbWluZwoJICBmcm9tIHRoZSBzcGVjLgoKVGh1IEFwciAxOCAxMzo1Mjo1MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogZml4ZWQgJiBzZXJpYWxpemF0aW9uIGJ1ZyBpbnRyb2R1Y2VkIGluIDIuNC4yMAoJKiByZXN1bHQvSFRNTC8qOiB0aGlzIGNoYW5nZXMgYSBmZXcgdGhpbmdzIGluIHRoZSByZXN1bHRzCgpXZWQgQXByIDE3IDIwOjM0OjM3IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogZWxpbWluYXRlZCAnZGVjbGFyYXRpb24gZGlmZmVyZW50IHRoYW4KCSBwcm90b3R5cGUnIHdhcm5pbmcKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiAicmVzb2x2ZWQiIGNvbmZsaWN0cyB3aXRoIGVycm5vLmgKCldlZCBBcHIgMTcgMTg6MjY6MDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC94bWxhdXRvbWF0YS5oOiBtb3JlIHdvcmsKCSAgb24gdGhlIGF1dG9tYXRhIGludGVyZmFjZXMgYW5kIGRlYnVnIG9mIGNvdW50ZWQgY2hvaWNlcwoJKiB0ZXN0L3NjaGVtYXMvKiByZXN1bHQvc2NoZW1hcy8qOiBhZGRlZCBhIG51bWJlciBvZiB0ZXN0cwoKV2VkIEFwciAxNyAxMTowMzowMyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaDoKCSAgYSBiaXQgb2Ygd29yayBvbiBTY2hlbWFzCgkqIHRlc3RTY2hlbWFzLmM6IHRyeSB0byBtYWtlIGl0IG1vcmUgdXNlZnVsCgkqIHRlc3Qvc2NoZW1hcy8qIHJlc3VsdC9zY2hlbWFzLyogTWFrZWZpbGUuYW06IGNoYW5nZWQgdGhlCgkgIFNjaGVtYXMgcmVncmVzc2lvbiB0ZXN0IHByb2NlZHVyZSwgc3RhcnRlZCBhZGRpbmcgYSBmZXcgc2FtcGxlcwoKVHVlIEFwciAxNiAxOTo1MjowMSBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGl6bGF0a292aWNAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBpbmNsdWRlL2xpYnhtbC9lbmNvZGluZy5oOiBQYXRjaCBmb3IgdGhlIEJvcmxhbmQgQysrIGJ1aWxkZXIKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBQYXRjaCBmb3IgdGhlIEJvcmxhbmQgQysrIGJ1aWxkZXIKCSogdGhyZWFkcy5jOiBQYXRjaCBmb3IgdGhlIEJvcmxhbmQgQysrIGJ1aWxkZXIKCSogd2luMzIvYmNiNTogTmV3IGRpcmVjdG9yeSBmb3IgdGhlIEJvcmxhbmQgQysrIGJ1aWxkZXIKCSBwcm9qZWN0IGZpbGVzICAgICAgIAoKVHVlIEFwciAxNiAxOTo0Njo1NSBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGl6bGF0a292aWNAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBVcGRhdGUgZm9yIFhNTCBTY2hlbWEgc3VwcG9ydAoJKiB3aW4zMi9jb25maWd1cmUuanM6IFVwZGF0ZSBmb3IgWE1MIFNjaGVtYSBzdXBwb3J0CgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogVXBkYXRlIGZvciBYTUwgU2NoZW1hIHN1cHBvcnQKClR1ZSBBcHIgMTYgMTc6NDY6NDMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIFRPRE9fU0NIRU1BUyBjb25maWd1cmUuaW4gZ2VuVW5pY29kZS5weSB0ZXN0QXV0b21hdGEuYwoJIHRlc3RSZWdleHAuYyB0ZXN0U2NoZW1hcy5jIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYwoJIHhtbHVuaWNvZGUuYyBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbQoJIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaCBpbmNsdWRlL2xpYnhtbC94bWxhdXRvbWF0YS5oCgkgaW5jbHVkZS9saWJ4bWwveG1scmVnZXhwLmggaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hcy5oCgkgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hc3R5cGVzLmggaW5jbHVkZS9saWJ4bWwveG1sdW5pY29kZS5oCgkgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluIDogbWVyZ2VkIHRoZSBjdXJyZW50IHN0YXRlIG9mCgkgWE1MIFNjaGVtYXMgaW1wbGVtZW50YXRpb24sIGl0IGlzIG5vdCBjb25maWd1cmVkIGluIGJ5IGRlZmF1bHQsCgkgYSBzcGVjaWZpYyAtLXNjaGVtYXMgY29uZmlndXJlIG9wdGlvbiBoYXMgYmVlbiBhZGRlZC4KCSogdGVzdC9hdXRvbWF0YSB0ZXN0L3JlZ2V4cCB0ZXN0L3NjaGVtYXMgTWFrZWZpbGUuYW0KCSAgcmVzdWx0L2F1dG9tYXRhIHJlc3VsdC9yZWdleHAgcmVzdWx0L3NjaGVtYXM6CgkgIG1lcmdlZCBhdXRvbWF0YS9yZWdleHAvc2NoZW1hcyByZWdyZXNzaW9uIHRlc3RzCgpUdWUgQXByIDE2IDA5OjQ4OjQ0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBHYXJ5IGZvdW5kIGEgY29tcGlsZSB0aW1lIHByb2JsZW0sIGZpeGVzICM3ODgyMwoKTW9uIEFwciAxNSAxOToxMTozNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiByZWxlYXNlIG9mIDIuNC4yMAoJKiBkb2MvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoKTW9uIEFwciAxNSAxNDo1NTo1MyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBwYXRjaCBmcm9tIENyaXN0aWFuIEdhZnRvbiB0byBidWlsZCBvbgoJICBSZWQgSGF0IDYuMiwgc2hvdWxkIGFsc28gZml4ICM3NTc3OQoKTW9uIEFwciAxNSAxMjoxNDo0OSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZmlyc3QgcGFydCBvZiBmaXhpbmcgIzc4NzI5CgpTdW4gQXByIDE0IDIzOjQ0OjU4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIHVyaS5jOiBmaXhpbmcgYnVnICM3ODY2MiBpLmUuIGFkZCBwcm9wZXIKCSAgZXNjYXBpbmcgb2YgVVJJIHdoZW4gc2F2aW5nIEhUTUwgZmlsZXMuCgkqIHJlc3VsdC9IVE1MLyo6IHRoaXMgaW1wYWN0ZWQgc29tZSB0ZXN0cwoKU3VuIEFwciAxNCAxNDo1NToxNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiB0cnlpbmcgdG8gZml4ICM3NzQ0MQoKRnJpIEFwciAxMiAyMzowMjoxNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogSGFsbHNraSBjb21wbGFpbmVkIGl0IGNvdWxkIG5vdCBiZQoJICBpbmNsdWRlZCBieSBpdHNlbGYuCgpUaHUgQXByIDExIDEwOjIzOjM2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGFwcGxpZWQgYW4gSUVFRSBmbGFnIHBhdGNoIGZvciBPU0YvMSAjNzc4MjUKCldlZCBBcHIgMTAgMjM6MzE6MzQgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvY29uZmlndXJlLmpzOiBwYXRjaCBmcm9tIE5pbG8gZm9yIHRoZSBjMTRuIG9wdGlvbgoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBmaXhlZCBsaWJ4bWwyLmRlZiBnZW5lcmF0aW9uIHdpdGggdGhyZWFkcwoKV2VkIEFwciAxMCAyMToyNDoxNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbjogU2lsdmFuIE1pbmdoZXR0aQoJICBwb2ludGVkIGVycm9uZW91cyB1c2Ugb2YgTElCWE1MX1RIUkVBRFNfRU5BQkxFRCBpbnN0ZWFkIG9mCgkgICBMSUJYTUxfVEhSRUFEX0VOQUJMRUQKCldlZCBBcHIgMTAgMTg6MTI6NTIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGFub3RoZXIgcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzIGZvciBzdWJzdHJpbmcgY29uZm9ybWFuY2UKCSogdGVzdC9YUGF0aC9leHByL2Zsb2F0cyB0ZXN0L1hQYXRoL2V4cHIvc3RyaW5ncwoJICByZXN1bHQvWFBhdGgvZXhwci9mbG9hdHMgcmVzdWx0L1hQYXRoL2V4cHIvc3RyaW5nczogdXBkYXRlIG9mIHRoZQoJICB0ZXN0IHN1aXRlIHRvIGNoZWNrIHRob3NlLgoKV2VkIEFwciAxMCAxMzoyOTo0OSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogcGF0Y2ggZnJvbSBSaWNoYXJkIEppbmtzIGZvciAueCBmbG9hdCBwYXJzaW5nLgoKVHVlIEFwciAgOSAxODowOTozMSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHBhdGNoIGZyb20gTWFya3VzIEhlbmtlIHdoZW4gYW4gZW5jb2RpbmcgYWluJ3QgcmVjb2duaXplZAoKVHVlIEFwciAgOSAxNTo0NzoxNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLm00OiBnb3QgYSByZXBvcnQgdGhhdCAjaW5jbHVkZSA8c3RyaW5nLmg+IHdhcyBuZWVkZWQKClR1ZSBBcHIgIDkgMTE6NTE6MjUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYXBwbGllZCBhIGZpeCBmcm9tIEFudGhvbnkgSm9uZXMgZm9yIC1vIC8tLW91dHB1dAoKVHVlIEFwciAgMiAyMDoyNzoxMSBNU1QgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL2V4YW1wbGUuaHRtbDogZml4aW5nIHR5cG8KCk1vbiBBcHIgIDEgMTA6MDI6NTcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgYnVnIGluIHRoZSBub2Rlc2V0IHRvIGJvb2xlYW4gY29tcGFyaXNvbiBjb2RlCgkgIHBvaW50ZWQgb3V0IGJ5IE1lbHZ5biBTb3BhY3VhLgoKRnJpIE1hciAyOSAyMzo0MTo1MyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwubTQ6IEZy6WTpcmljIENyb3phdCBnYXZlIGEgcGF0Y2ggcmVsYXRlZCB0byB0aGUgY2hhbmdlCgkgIG9mIEluY2x1ZGUgcGF0aHMgYnJlYWtpbmcgdGhlIGxpYnhtbC5tNAoKRnJpIE1hciAyOSAxODoyNTo1NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBGaXggYnVnICM3NjkyNyBmb3Jnb3QgdG8gc2F2ZSBzb21lIGNvbnRleHQKCSAgd2hlbiBldmFsdWF0aW5nIGJpbmFyeSBleHByZXNzaW9ucwoKVGh1IE1hciAyOCAxOToyMjo0OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkIGNvbmZpZ3VyZSBmb3IgTVBFL2lYIGZyb20gTWFya3VzIEhlbmtlCgkqIHhtbG1lbW9yeS5jOiBmaXhlZCBpbml0aWFsaXphdGlvbiBwcm9ibGVtcwoJKiB4cGF0aC5jOiBhbm90aGVyIHNldCBvZiBwYXRjaGVzIGZyb20gUmljaGFyZCBKaW5rcyB0aGlzCgkgIGZpeGVzICJtYWtlIFhQYXRodGVzdHMiIG9uIGxpbnV4CgpXZWQgTWFyIDI3IDE3OjA5OjQzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyaW9uYW4uYyB0cmlvbmFuLmggeHBhdGguYzogbW9yZSBwYXRjaGVzIGZyb20gUmljaGFyZCBKaW5rcwoJKiB0ZXN0L1hQYXRoL2V4cHIvY29tcGFyZSB0ZXN0L1hQYXRoL2V4cHIvZXF1YWxpdHkKCSAgdGVzdC9YUGF0aC9leHByL2Zsb2F0cyB0ZXN0L1hQYXRoL2V4cHIvZnVuY3Rpb25zCgkgIHRlc3QvWFBhdGgvZXhwci9zdHJpbmdzIHJlc3VsdC9YUGF0aC9leHByL2NvbXBhcmUKCSAgcmVzdWx0L1hQYXRoL2V4cHIvZXF1YWxpdHkgcmVzdWx0L1hQYXRoL2V4cHIvZmxvYXRzCgkgIHJlc3VsdC9YUGF0aC9leHByL2Z1bmN0aW9ucyByZXN1bHQvWFBhdGgvZXhwci9zdHJpbmdzOiBVcGRhdGVkCgkgIHRlc3RzIHRob3VnaCB0aGV5IHNob3cgYSBkaXZlcmdlbmNlIG9uIExpbnV4CgpXZWQgTWFyIDI3IDEwOjA2OjUzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmMgdHJpb25hbi5jOiBwcmV2aW91cyBjb21taXQgYWxzbyBpbmNsdWRlZCBwYXRjaGVzCgkgIGZyb20gUmljaGFyZCBKaW5rcyBvbiBzb21lIElFRUUgc3VwcG9ydCBjb3JuZXIgY2FzZQoKV2VkIE1hciAyNyAxMDowMzoxMSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBBVVRIT1JTIEhBQ0tJTkc6IEFkZGVkIElnb3IgWmxhdGtvdmljIGFzIG9mZmljaWFsIG1haW50YWluZXIKCSogcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbTogQWxiZXJ0IENoaW4gcG9pbnRlZAoJICB0aGF0ICQoZGF0YWRpcikgc2hvdWxkIGJlIHVzZWQgZm9yIGRvY3MKClR1ZSBNYXIgMjYgMTM6NDM6MTYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogVGhvbWFzIFN0ZWluYm9ybiBwb2ludGVkIG91dCAjNzY0MDQgdGhhdCBsaWJ4bWwyCgkgIGNvdWxkIGxlYWsgZmlsZWRlc2NyaXB0b3JzCgpUdWUgTWFyIDI2IDA4OjU1OjUzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBuYW5vaHR0cC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQWxsYW4gQ2xhcmsgZm9yCgkgIFVuaXhXYXJlL09wZW5TZXJ2ZXIKCk1vbiBNYXIgMjUgMTc6NDU6NDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjE5CgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2NzCgpNb24gTWFyIDI1IDE3OjM0OjA2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9odHRwLmM6IGZpeGluZyAjNzYwNDMsIGdvdCBmZWQgdXAgd2l0aCBub24tcG9ydGFiaWxpdHkKCSAgb2YgdGhhdCBwaWVjZSBvZiBjb2RlLgoKTW9uIE1hciAyNSAxMzowODoyMSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIFNBWC5jOiBOZXZlciBjb21taXQgd2l0aG91dCBydW5uaW5nICJtYWtlIHRlc3RzIiA6LSgKCSAgZml4IGEgY291cGxlIG9mIHN0dXBpZGl0aWVzIGluIHRoZSBwcmV2aW91cyBjb21taXQKCSogcmVzdWx0Lyo6IGEgZmV3IGNoYW5nZXMgaW4gc29tZSBhdHRyaWJ1dGUgb3JkZXIgcmVzdWx0IG9mIHByZXZpb3VzCgkgIGNvbW1pdC4KCk1vbiBNYXIgMjUgMTE6NDY6MDUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyBTQVguYzogZml4ZWQgYnVnICM3NjE2OCwgYXR0cmlidXRlIHJlZGVjbGFyZWQgaW4KCSAgdGhlIGludGVybmFsIHN1YnNldCBzaG91bGQgbm90IHJhaXNlIGR1cGxpY2F0ZSBJRCBlcnJvcnMsCgkgIGFsc28gdGhlcmUgd2FzIGEgc21hbGwgYnVnIGluIGNvbmp1bmN0aW9uIHRvIG5hbWVzcGFjZQoJICBkZWNsYXJhdGlvbnMgZGVmYXVsdGVkIGFuZCB4bWw6eHh4IGF0dHJpYnV0ZXMgRFREIGRlZmluaXRpb25zLgoKRnJpIE1hciAyMiAxNToxMzo0OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBSaWNoYXJkIEppbmtzIGFsc28gcmFpc2VkIHNvbWUgcm91bmRpbmcgcHJvYmxlbXMKCSAgdGhpcyB0cmllcyB0byBmaXggdGhlbQoKRnJpIE1hciAyMiAxMzoyMjowOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBSaWNoYXJkIEppbmtzIHNwb3R0ZWQgYW4gaW5jb2hlcmVudCBtZW1vcnkgYWxsb2NhdGlvbgoJICBiZWhhdmlvdXIgaW4geG1sWFBhdGhDYXN0VG9TdHJpbmcoKQoKVGh1IE1hciAyMSAxNDoyNToyOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiBmaXhlZCBhIGJ1ZyBpbiB0aGUgSVNPLUxhdGluIDEgdG8gVVRGOCBlbmNvZGVyCgkgIHJhaXNlZCBieSBNb3J1cyBXYWx0ZXIKClRodSBNYXIgMjEgMTQ6MDc6MTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sY2F0YWxvZy5jIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjogYXBwbGllZCAyIGZpeHVwcwoJICBmcm9tIElnb3IKClRodSBNYXIgMjEgMTM6MzA6MDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4aW5nICM3NTYxOSwgcmVsYXRlZCB0byBhIHByb2JsZW0gd2hlbiB0cnlpbmcKCSAgdG8gZXZhbHVhdGUgY29uZGl0aW9uIHdoZW4gdGhlIGN1cnJlbnQgbm9kZSBzZXQgcmVzdWx0aW5nCgkgIGZyb20gdGhhdCBzdWItc3RlcCBldmFsdWF0aW9uIGlzIGVtcHR5LiBBbHNvIGZpeGVzIDIgcG90ZW50aWFsCgkgIHByb2JsZW0gd2l0aCBwcmV2aW91cy1zaWJsaW5nIGFuZCBuZXh0LXNpYmxpbmdzIGF4aXMuCgpUaHUgTWFyIDIxIDA5OjAzOjU5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGMxNG4uYzogcGF0Y2ggZnJvbSBNYXJrIFZha29jIHRvIGJ1aWxkIEMxNE4gaWYgRG9jQm9vayBhbmQKCSAgSFRNTCBzdXBwb3J0IGlzIG5vdCBjb25maWd1cmVkIGluLgoKV2VkIE1hciAyMCAyMjo0Mjo0MiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgZXJyb3IuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmMgeG1sSU8uYwoJICBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGRvaGggSSByZWFsbHkgZGlkbid0IGludGVuZGVkIHRvIGNvbW1pdAoJICB0aGlzIHRlc3QgdmVyc2lvbiA6LSgKCldlZCBNYXIgMjAgMjA6MjA6NTcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdFNBWC5jOiBJIHdhbnRlZCB0byBzZWUgdGhlIHJlYWwgc3BlZWQgYXQgdGhlIFNBWCBpbnRlcmZhY2UKCSAgYWZ0ZXIgYSBsaXR0bGUgdG9vIG1hbnkgWGltaWFuZXIgc3RhcnRlZCBjb21wbGFpbmluZyBhYm91dCB0aGUKCSAgcGFyc2VyIHNwZWVkLgoJICBhZGRlZCBhIC0tcXVpZXQgb3B0aW9uOgoJICBwYXBoaW86fi9YTUwgLT4gbHMgLWwgZGIxMDAwMDAueG1sIAoJICAtcnctcnctci0tICAgIDEgdmVpbGxhcmQgd3d3ICAgICAgMjAxODIwNDAgTWFyIDIwIDEwOjMwIGRiMTAwMDAwLnhtbAoJICBwYXBoaW86fi9YTUwgLT4gdGltZSAuL3Rlc3RTQVggLS1xdWlldCBkYjEwMDAwMC54bWwgCgkgIDMyMDAwMDYgY2FsbGJhY2tzIGdlbmVyYXRlZAoJICByZWFsCTBtMS4yNzBzCgkgIFdoaWNoIG1lYW5zIDE2TUJ5dGVzL3MgYW5kIDNNY2FsbGJhY2svcwoKVHVlIE1hciAxOSAxOTozMzo1NyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiB2YWxncmluZCBzcG90dGVkIGFub3RoZXIgZXJyb3IgdGhhdCB0aW1lIHdoZW4gcnVubmluZwoJICBvbiBsaWJ4c2x0IHJlZ3Jlc3Npb24gdGVzdHMKClR1ZSBNYXIgMTkgMTU6MjQ6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGFkZGluZyAibWFrZSB2YWxncmluZCIgcnVubmluZyB0aGUgZnVsbCByZWdyZXNzaW9uCgkgIHRlc3RzIChleGNlcHQgcHl0aG9uIG9uZXMpIHVuZGVyIFZhbGdyaW5kICh1c2luZyB2YWxncmluZCAtcQoJICB3aGljaCB3YXMga2luZGx5IGFkZGVkIGJ5IHRoZSBhdXRob3IpLgoJKiB2YWxpZC5jOiBzdHVwaWQgYnVnIHBpbnBvaW50ZWQgYnkgVmFsZ3JpbmQsIHRoZSByZWdyZXNzaW9uIHRlc3RzCgkgIHBhc3NlcyBjbGVhbmx5IG5vdyBleGNlcHQgYW4gb2JjdXJlIGZsb2F0aW5nIHBvaW50IGluaXRpYWxpemF0aW9uCgkgIHJhaXNlZCBpbiBsb2cxMCgpIGluIG9uZSBYUGF0aCByZWdyZXNzaW9uIHRlc3QgPz8/CgkqIHRyZWUuYzogZWRpdGVkIHNvbWUgY29tbWVudHMgdG8gY2xvc2UgIzc1MjQ0CgpUdWUgTWFyIDE5IDEyOjE1OjIwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHByZXR0eSBpbnNhbmUgdGhpbmcsIHRoZSB4bWxYUGF0aEZvcm1hdE51bWJlcigpCgkgIHdhcyBub3Qgc2VyaWFsaXppbmcgMSBhcyAiMSIgaWYgTENfQUxMPXN2X1NFIDotKCBhbmQgaW4gdGhlCgkgIGNvbnRleHQgb2YgU2Nyb2xsS2VlcGVyLCBtYWRlIHN1cmUgdGhhdCBpZiB0aGUgbnVtYmVyIGlzCgkgIGFuIGludGVnZXIsIHRoZSBzZXJpYWxpemF0aW9uIGZvbGxvd3MgdGhlIGRlc2NyaXB0aW9uIGF0CgkgIGh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoI3NlY3Rpb24tU3RyaW5nLUZ1bmN0aW9ucwoKTW9uIE1hciAxOCAxOToxODoxMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuMTgKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIHdlYiBzaXRlCgkqICouYyBsaWJ4bWwuaDogaW1wbGVtZW50IHRoZSBuZXcgSU5fTElCWE1MIHNjaGVtZSBkaXNjdXNzZWQgd2l0aAoJICB0aGUgV2luZG93cyBhbmQgQ3lnd2luIG1haW50YWluZXJzLgoJKiBwYXJzZXIuYzogaHVtbSwgY2hhbmdlZCB0aGUgd2F5IHRoZSBTQVggcGFyc2VyIHdvcmsgd2hlbgoJICB4bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0KDEpIGlzIHNldCwgaXQgd2lsbCB0aGVuIAoJICBkbyB0aGUgZW50aXR5IHJlZ2lzdHJhdGlvbiBhbmQgbG9hZGluZyBieSBpdHNlbGYgaW4gY2FzZSB0aGUKCSAgdXNlciBwcm92aWRlZCBTQVggZ2V0RW50aXR5KCkgcmV0dXJucyBOVUxMLgoJKiB0ZXN0U0FYLmM6IGFkZGVkIC0tbm9lbnQgdG8gdGVzdCB0aGUgYmVoYXZpb3VyLgoKTW9uIE1hciAxOCAxMjo0NDoyMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogV2lsZnJpZWQgVGVpa2VuIHByb3ZpZGVkIGEgaGFja2lzaCBidXQgd29ya2luZwoJICB3YXkgdG8gZ2V0IGNvbnRleHQgcmVwb3J0ZWQgYmFjayBvbiBlbnRpdGllcyB3aGVuIHBhcnNpbmcKCSAgd2l0aCBTQVggYW5kIHdpdGhvdXQgYnJlYWtpbmcgdGhlIERPTSBidWlsZC4KClN1biBNYXIgMTcgMTE6MzE6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYzE0bi5jOiBhcHBsaWVkIGEgbmV3IHBhdGNoIGZyb20gQWxla3NleSBTYW5pbgoJKiBkb2Mvc2l0ZS54c2wgZG9jL3htbC5odG1sIGRvYy8qLmh0bWw6IHVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24KCSAgdG8gcmVmZXJlbmNlIEFsZWtzZXkgaW1wbGVtZW50YXRpb24gb2YgWE1MIGRpZ2l0YWwgU2lnbmF0dXJlcwoKU2F0IE1hciAxNiAyMzowMTo0MiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBzbWFsbCBmaXggdG8gYXZvaWQgcG90ZW50aWFsIHByb2JsZW0gZHVlIHRvCgkgIG9yZGVyaW5nIG9mIGZyZWVpbmcgZGF0YQoJKiBweXRob24vTWFrZWZpbGUuYW06IHBlb3BsZSB3ZXJlIGNvbXBsYWluaW5nIGFib3V0IAoJICB0aGUgZ2VuZXJhdGVkIGZpbGUgaW4gcHl0aG9uIGRpciBub3QgYmVpbmcgYnVpbHQKCkZyaSBNYXIgMTUgMjM6MjE6NDAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW4gcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbQoJICBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vdHlwZXMuYzogQ2xlYW51cAoJICBvZiB0aGUgcHl0aG9uIE1ha2VmaWxlcyBiYXNlZCBvbiBKYWNvYiBhbmQgSmFtZXMgZmVlZGJhY2ssCgkgIGZpeGVkIHRoZSBzcGVjIGZpbGUgYWNjb3JkaW5nbHksIGZpeGVkIHRoZSBudW1iZXIgb2Ygd2FybmluZwoJICB0aGF0IHBhc3NpbmcgbXkgcGVkYW50aWMgQ0ZMQUdTIHdhcyBnZW5lcmF0aW5nLiBDb25jbHVzaW9uCgkgIGlzIHRoYXQgUHl0aG9uIGluY2x1ZGVzIGFyZSByZWFsIGNyYXAuCgpGcmkgTWFyIDE1IDE5OjQxOjI1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZSxpbjogaXQgd2FzIHJlcG9ydGVkIHF1aXRlIGEgZmV3IHRpbWVzIHRoYXQKCSAgeG1sMi1jb25maWcgLS1jZmxhZ3Mgc2hvdWxkIG5vdCBvdXRwdXQKCSAgLUkkaW5jbHVkZXByZWZpeC9saWJ4bWwyL2xpYnhtbCBiZWNhdXNlIGxpYnhtbDIgaGVhZGVyIG5hbWVzCgkgIGNsYXNoZXMgd2l0aCBleGlzdGluZyBuYW1lcyBsaWtlIGxpc3QuaCBmcm9tIEMrKyBzdGwuCgkgIEluY2x1ZGVzIHNob3VsZCBiZSAjaW5jbHVkZTxsaWJ4bWwveHh4Lmg+IHNvIC4uLgoKRnJpIE1hciAxNSAxMDo0MTo1MCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjMTRuLmM6IGFub3RoZXIgcGF0Y2ggZnJvbSBBbGVrc2V5IFNhbmluCgpGcmkgTWFyIDE1IDA4OjU1OjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGMxNG4uYzogYXBwbGllZCBwYXRjaCBmcm9tIEFsZWtzZXkgU2FuaW4gZml4aW5nIGEgcHJvYmxlbSBpbiB0aGUKCSAgY2Fub25pY2FsaXphdGlvbiBhbGdvcml0aG0KCSogZG9jL3htbC5odG1sIGRvYy9pbmRleC5odG1sOiBhZGRlZCB0aGUgQzE0TiByZWZlcmVuY2VzIG9uIHRoZSAKCSAgaW5kZXggcGFnZS4KCjIwMDItMDMtMTMgIGphY29iIGJlcmttYW4gIDxqYWNvYkB4aW1pYW4uY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiByZW1vdmUgTERBREQgYW5kIENGTEFHUyBhcyB0aGlzIGlzIGJyb2tlbgoJdXNhZ2UsIHJlZHVuZGFudCwgYW5kIGdjYyBzcGVjaWZpYwoKV2VkIE1hciAxMyAxMTowMDo1OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBzcGVlZHVwIHNvbWUgbm9kZSBzZWxlY3Rpb24gb3BlcmF0aW9ucywgdGhpcyBjYW4KCSAgaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdCBvbiBEb2NCb29rIE5vcm0ncyBzdHlsZXNoZWV0cwoJKiBuYW5vaHR0cC5jOiBzb21lb25lIHJlcG9ydGVkIHRoYXQgU09DS0xFTl9UIG1heSBub3QgYmUgZGVmaW5lZAoJICBtYWtlIHN1cmUgaXQncyBhbHdheXMgdGhlIGNhc2UKCSogZGVidWdYTUwuYzogZGlzdGluZ3Vpc2ggQ0RBVEEgYW5kIGNvbW1lbnRzIGluIGxzIG9wZXJhdGlvbnMKClR1ZSBNYXIgMTIgMTk6NDU6MjQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvKi5oOiBIZWlrbyBXLiBSdXBwIGZpeGVkIGEgbG90IG9mIGNvbW1lbnRzCgkgIHRvIGdlbmVyYXRlIGJldHRlciBBUEkgZGVzY3JpcHRpb25zIGV0Yy4uLgoKTW9uIE1hciAxMSAxMDoxMDozMCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjMTRuLmM6IEZpeGluZyAjNzQxODYsIG1hZGUgc3VyZSBhbGwgYm9vbGVhbiBleHByZXNzaW9ucwoJICBnZXQgZnVsbHkgcGFyZW50aGVzaXplZCwgcmFuIGluZGVudCBvbiB0aGUgb3V0cHV0CgkqIGNvbmZpZ3VyZS5pbiBIVE1MdHJlZS5jIFNBWC5jIGMxNG4uYyBkZWJ1Z1hNTC5jIHRyZWUuYyB4cG9pbnRlci5jCgkgIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogYWxzbyAjNzQxODYgcmVsYXRlZCwgcmVtb3ZlZCB0aGUKCSAgLS13aXRoLWJ1ZmZlcnMgb3B0aW9uLCBhbmQgYWxsIHRoZSBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWwKCSAgc2VjdGlvbnMgdGhhdCB3ZXJlIHJlc3VsdGluZyBmcm9tIGl0LgoKU3VuIE1hciAxMCAxNzo0Nzo1OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gRG9kamkgU2VrZXRlbGkgZml4aW5nIGFuCgkgIHVuaW5pdGFpbGl6ZWQgdmFyaWFibGUgaW4geG1sVmFsaWRHZXRWYWxpZEVsZW1lbnRzKCkKClNhdCBNYXIgIDkgMTU6MTA6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYzE0bi5jOiBmaXhlZCBhIGZldyBjb21tZW50cwoJKiBkb2MvKi5odG1sIGRvYy8qLyouaHRtbDogcmVnZW5lcmF0ZWQgdGhlIGRvY3MgYW5kIGFkZGVkCgkgIHRoZSBDMTROIEFQSQoJKiBkb2MvYXBpLnhzbCBkb2MvZ25vbWUteG1sLnNnbWw6IGZpeHVwcyBhbmQgYWRkZWQgSURzCgpTYXQgTWFyICA5IDExOjE2OjExIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXhtbC10ZXN0LXN1aXRlLnB5OiBmaXggdG8gYWRhcHQgdmFyYWlhdGlvbnMgaW4gdGhlCgkgIGJpbmRpbmdzCgkqIGNvbmZpZ3VyZS5pbiBweXRob24vc2V0dXAucHkgcHl0aG9uL3NldHVwLnB5LmluOiBmaXhlZCB0bwoJICBoYXZlIHRoZSB2ZXJzaW9uIG9mIHRoZSBweXRob24gc2NyaXB0cyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQKCkZyaSBNYXIgIDggMTY6NDU6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlZCBhIGJ1ZyBuZXdseSBpbnRyb2R1Y2VkIGFuZCBwb2ludGVkIGJ5IFV3ZSBGZWNobmVyCgkgIGluIHhtbENvcHlQcm9wKCkKCkZyaSBNYXIgIDggMTU6NDk6MTAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjE3IHJlbGVhc2UKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKCSogeHBhdGguYzogZml4ZWQgYSBjb21tZW50CgkqIHB5dGhvbi9saWJ4bWwuYzogZml4ZWQgYSBwb3NzaWJsZSByZWVudHJhbmN5IHByb2JsZW0KClRodSBNYXIgIDcgMjM6MTk6MjggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvYXR0cmlicy5weToKCSAgZml4ZWQgeG1sSGFzTnNQcm9wKCkgYnVncyBmb3IgZGVmYXVsdGVkIGZyb20gRFREIGF0dHJpYnMsCgkgIGFkZGVkIGEgc3BlY2lmaWMgcmVncmVzc2lvbiB0ZXN0CgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IHhtbEhhc05zUHJvcCgpIGFuZCB4bWxIYXNQcm9wKCkgc2hhbGwKCSAgbm90IHJhaXNlIGV4Y2VwdGlvbnMgd2hlbiBmYWlsaW5nIHRvIGZpbmQgdGhlIGF0dHJpYnV0ZS4KClRodSBNYXIgIDcgMTY6MTE6MzUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHhtbGxpbnQuYzogb3dlbiBwb2ludGVkIG91dCBhIHByb2JsZW0gd2l0aCB0aGUKCSAgZnRtZSBmaXgsIGdldHRpbWVvZmRheSgpIHdhcyBub3QgZGV0ZWN0ZWQgYnkgY29uZmlndXJlIGFuZAoJICB0aGUgZnRpbWUgaGVhZGVyIHdhc24ndCBpbmNsdWRlZCwgZG9oaGgKClRodSBNYXIgIDcgMTI6MTk6MzYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHhtbGxpbnQuYzogdHJ5aW5nIHRvIGZpeCAjNzE0NTcgZm9yIHRpbWluZwoJICBwcmVjaXNpb24gd2hlbiBnZXR0aW1lb2ZkYXkoKSBpcyBub3QgYXZhaWxibGUgYnV0IGZ0aW1lKCkgaXMKClRodSBNYXIgIDcgMTE6MjQ6MDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW4gZG9jL01ha2VmaWxlLmFtOiBGaXhlZCAjNzM0MDggbWlzc2luZyBpbWFnZXMKCSAgYXJlIG5vdyBjb3BpZWQgb24gaW5zdGFsbCBhbmQgcGFydCBvZiB0aGUgLWRldmVsIFJQTQoKVGh1IE1hciAgNyAwOTozNDoxNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiB0cnlpbmcgdG8gYXZvaWQgYnVnICM3MjE1MCB3aGljaCB3YXMgYXBwYXJlbnRseQoJICBjYXVzZWQgYnkgYSBnY2MgYnVnIChvciBhIHByb2Nlc3NvciBwcm9ibGVtKSBhcyBkZXRhaWxlZAoJICBhdCBodHRwOi8vdmVpbGxhcmQuY29tL2djYy5idWcKClRodSBNYXIgIDcgMDE6MDI6MzcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvY3V0bnBhc3RlLnB5OgoJICBmaXhlZCB4bWxSZWNvbmNpbGlhdGVOcygpLCBhZGRlZCBhIFB5dGhvbiB0ZXN0L2V4YW1wbGUgZm9yCgkgIGludGVyLWRvY3VtZW50IGN1dCduIHBhc3RlCgkqIHB5dGhvbi9saWJ4bWwucHk6IGZpeGVkIG5vZGUuZG9jIG9uIGRvY3VtZW50IG5vZGVzIGFuZCBhZGRlZAoJICB4cGF0aEV2YWwoKSBvbnRvIG5vZGUgb2JqZWN0cwoKV2VkIE1hciAgNiAyMjozODowMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jOiBmaXhlZCBzb21lIGh0bWxTZXRNZXRhRW5jb2RpbmcoKSBwcm9ibGVtcwoJKiBweXRob24vbGlieG1sLmMgcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9zZXJpYWxpemUucHk6CgkgIGZpeHVwIGFuZCBpbnRlZ3JhdGVkIHRlc3RzIGZvciB0aGUgc2VyaWFsaXphdGlvbiBzdHVmZgoKV2VkIE1hciAgNiAxOTo0MDo1NyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBsaWJ4bWwuMyBsaWJ4bWwuNCBsaWJ4bWwuc3BlYy5pbjogRml4ZWQgYnVnICM3MjU3MAoJICBtb3ZlZCB0aGUgbGlieG1sIG1hbiBwYWdlIHRvIHNlY3Rpb24gMwoKV2VkIE1hciAgNiAxODozNDowNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeCBidWcgIzcyNDkwCgkqIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5OiBhZGRlZCBtZXRob2RzIHNlcmlhbGl6ZSgpCgkgIGFuZCBzYXZlVG8oKSB0byBhbGwgbm9kZSBlbGVtZW50cy4KClR1ZSBNYXIgIDUgMjE6Mjc6MDMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogY2xvc2VkICM3MzQzMCwgZG9uJ3QgcmVhZCBmcm9tIGFuIGlucHV0IHNvdXJjZQoJICB3aGljaCBpbmRpY2F0ZWQgYW4gZW5kLW9mLWZpbGUgb3IgYW4gZXJyb3IuCgpUdWUgTWFyICA1IDE2OjMzOjQyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBtYWtlIHN1cmUgU0FYIGVuZERvY3VtZW50IGlzIGFsd2F5cyBjYWxsZWQgYXMKCSAgdGhpcyBjb3VsZCByZXN1bHQgaW4gYSBQeXRob24gbWVtb3J5IGxlYWsgb3RoZXJ3aXNlIChpdCdzCgkgIHVzZWQgdG8gZGVjcmVtZW50IHJlZi1jb3VudGluZykKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weQoJICBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbCBweXRob24vbGlieG1sMmNsYXNzLnR4dAoJICBweXRob24vdGVzdHMvZXJyb3IucHkgcHl0aG9uL3Rlc3RzL3hwYXRoLnB5OiBpbXBsZW1lbnRlZAoJICB0aGUgc3VnZ2VzdGlvbnMgbWFkZSBieSBHYXJ5IEJlbnNvbiBhbmQgZXh0ZW5kZWQgdGhlIHRlc3RzCgkgIHRvIG1hdGNoIGl0LgoKVHVlIE1hciAgNSAxMDozNToyNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBhcHBsaWVkIHBhdGNoIGZpeGluZyAjNzM0NTAKCk1vbiBNYXIgIDQgMTc6NTk6MjkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4aW5nICM2MTI5MCAibmFtZXNwYWNlIG5vZGVzIGhhdmUgbm8gcGFyZW50IgoJICBsb25nIHN0YW5kaW5nIGRpdmVyZ2VuY2UgZnJvbSB0aGUgWFBhdGggUkVDLiBOb2RlU2V0cwoJICBzaW1wbHkgaG9sZCBhIGNvcHkgb2YgbmFtZXNwYWNlIG5vZGVzIGFuZCB0aG9zZSBub2RlIC0+bmV4dAoJICBwb2ludHMgdG8gdGhlIHBhcmVudCAod2hpY2ggbWF5IG5vdCBiZSB0aGUgbm9kZSBjYXJyeWluZyB0aGUKCSAgZGVmaW5pdGlvbikuCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoLmg6IGZsYWdnZWQgYnV0IGRpZG4ndCBhZGRlZCBhIHBvc3NpYmxlCgkgIHNwZWVkdXAKCSogRE9DQnBhcnNlci5jIEhUTUxwYXJzZXIuYzogcmVtb3ZlZCBzb21lIHdhcm5pbmdzIGZyb20gcHVzaAoJICBwYXJzZXIgZHVlIHRvIG5ldyBzdGF0ZSBiZWluZyBhZGRlZC4KCSogdHJlZS5jOiBuZXcgZml4IGZyb20gQm9yaXMgRXJkbWFubgoJKiBjb25maWd1cmUuaW4gYzE0bi5jIGluY2x1ZGUvbGlieG1sL2MxNG4uaCB0ZXN0QzE0Ti5jOiBhZGRlZAoJICB0aGUgWE1MIENhbm9uYWxpemF0aW9uIHN1cHBvcnQgZnJvbSBBbGVrc2V5IFNhbmluCgpTdW4gTWFyICAzIDE1OjEyOjQyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogcGF0Y2ggZnJvbSBCb3JpcyBFcmRtYW5uIGZpeGluZyBzb21lIG5hbWVzcGFjZSBvZGl0aWVzCgkgIHdpdGggeG1sQ29weU5vZGUoKQoKU2F0IE1hciAgMiAxMDozMzowNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBmaXggYnVnICM3MjcwNiB3aGVuIGxvYWRpbmcgYSBOVUxMIGVudGl0eQoKRnJpIE1hciAgMSAxNzoxNDo0MiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogRml4ZWQgIzcyMzQ2LCBhYm91dCBoYW5kbGluZyBvZiB4bWxuczpmb289IiIsIHRoaXMgY291bGQKCSAgYWN0dWFsbHkgY2hhbmdlIGluIGEgZnV0dXJlIFhNTCBOYW1lc3BhY2UgcmV2aXNpb24uCgpGcmkgTWFyICAxIDE3OjEyOjE1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi90eXBlcy5jIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMveHBhdGhyZXQucHk6CgkgIGFkZGVkIHRoZSBwb3NzaWJpbGl0eSBvZiByZXR1cm5pbmcgbm9kZXNldHMgZnJvbSBYUGF0aCBleHRlbnNpb24KCSAgZnVuY3Rpb25zIHdyaXR0ZW4gaW4gUHl0aG9uCgpGcmkgTWFyICAxIDEzOjU2OjEyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi8qOiBjb21taXRpbmcgc29tZSBQeXRob24gYmluZGluZ3Mgd29yayBkb25lIHdoaWxlIHRyYXZlbGxpbmcKCkZyaSBNYXIgIDEgMTA6MTE6MTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBjbG9zZSAjNzI2NjMgYW5kICM3MjY1OCwgZG9uJ3QgbWVtZHVtcCB1bmxlc3MgY29tcGlsZWQKCSAgZXhwbGljaXRlbHkgd2l0aCBtZW1vcnkgZGVidWdnaW5nIHN3aXRjaGVkIG9uCgpTYXQgRmViIDIzIDExOjA4OjA5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi90eXBlcy5jOgoJICBBZGRlZCB3cmFwcGVyIGZvciB0aGUgeG1sVVJJUHRyIHR5cGUsIHByb3ZpZGVkIGFjY2Vzc29ycywgZml4ZWQKCSAgdGhlIGFjY2Vzc29yIGdlbmVyYXRvciBmb3Igc3RyaW5ncwoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3RzdFVSSS5weTogYWRkZWQgYSBzcGVjaWZpYwoJICByZWdyZXNzaW9uIHRlc3QuCgpGcmkgRmViIDIyIDIzOjQ0OjU3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9SRUFETUUgcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL3NldHVwLnB5OgoJICBhZGRlZCB0aGUgJ3VzdWFsJyBzZXR1cC5weSB0byBhbGxvdyBidWlsZGluZyBhIGxpYnhtbDItcHl0aG9uCgkgIG1vZHVsZSBiYXNlZCBvbiB0aGUgc2FtZSBjb2RlLiBUaGUgaW5pdGlhbGl6YXRpb24gaXMgaG93ZXZlcgoJICBkaWZmZXJlbnQgdGhlIDIgLnNvIGZpbGVzIGZvIGxpYnhtbDIgYW5kIGxpYnhzbHQgYXJlIGlkZW50aWNhbCBhbmQKCSAgdGhleSBlbnRyeSBwb2ludCBpbml0aWFsaXplIGJvdGggbGlicmFyaWVzLiB0aGlzIGlzIGRvbmUgdG8gYXZvaWQKCSAgc29tZSBwb3NzaWJsZSBuYXN0eSBwcm9ibGVtIHNpbmNlIHRoZSBQeXRob24gZG9uJ3QgbWVyZ2UgdGhlIG1hcHMKCSAgb2YgYWxsIHNoYXJlZCBtb2R1bGVzLgoKV2VkIEZlYiAyMCAyMzoxNjowOCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBwdXNoL2VuY29kaW5nIGJ1ZyByZXBvcnRlZCBieSBNaWNoYWVsCgkgIG9uIGxpYnJzdmcKCldlZCBGZWIgMjAgMTk6NTQ6MDUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg6IGZpeGVzIGEgbWlzcGxhY2VkICNlbmRpZgoKV2VkIEZlYiAyMCAxNzo0Nzo1NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyB2YWxpZC5jOiBmb3VuZCBhbmQgZml4ZWQgYSBjb3VwbGUgb2YgYWxsb2NhdGlvbiBidWdzCgpXZWQgRmViIDIwIDE1OjM2OjAzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy94bWwuaHRtbCBkb2MvcHl0aG9uLmh0bWwgZG9jLyo6IGFkZGVkIGEgUHl0aG9uIGFuZCBiaW5kaW5nCgkgIHBhZ2UgZGVzY3JpYmluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgUHl0aG9uIGJpbmRpbmdzIGFuZCAKCSAgZ2l2aW5nIHBvaW50ZXJzIHRvIHRoZSBvdGhlciBsYW5ndWFnZXMgd3JhcHBlcnMuCgpXZWQgRmViIDIwIDExOjE2OjE1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcHJlcGFyaW5nIDIuNC4xNgoJKiBkb2MvKiBweXRob24vbGlieG1sMmNsYXNzLnR4dDogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcywKCSAgcmVidWlsdCB0aGUgQVBJIGFuZCB3ZWIgc2l0ZQoJKiB4cGF0aC5jOiBmaXhlZCAjNzE5NzggcG9ydGFiaWxpdHkgYnVncwoKVHVlIEZlYiAxOSAyMjo0OTozNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogb29wcyBicm9rZSBhdXRvbWF0aWMgZGVmYXVsdGluZyBvZiBuYW1lc3BhY2VzIGF0dHJpYnV0ZXMuCgpUdWUgRmViIDE5IDIyOjAxOjM1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIHBhcnNlci5jOiBoYWQgdG8gY2hhbmdlCgkgIDIgaW50ZXJuYWwgcGFyc2luZyBBUEkgd2hlbiBwcm9jZXNzaW5nIGRvY3VtZW50IGNvbnRlbnQKCSAgdG8gY2hlY2sgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgZWxlbWVudCBjb250ZW50IGFyZSBkZWZpbmVkCgkgIGluIHRoZSBzYW1lIGVudGl0eQoJKiB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6IGF0dHJpYnV0ZSBub3JtYWxpemF0aW9uIGNhbgoJICBnZW5lcmF0ZSBhIHZhbGlkaXR5IGVycm9yIGFkZGVkIHhtbFZhbGlkQ3R4dE5vcm1hbGl6ZUF0dHJpYnV0ZVZhbHVlKCkKCSAgd2l0aCB0aGUgY29udGV4dCB0byByZXBvcnQgaXQuCgkqIFNBWC5jOiBmaXhlZCB0aGUgbGFzdCBrbm93biBidWdzLCBjcmF6eSB2YWxpZGF0aW9uIGNvbnN0cmFpbnRzCgkgIHdoZW4gYSBkb2N1bWVudCBpcyBzdGFuZGFsb25lIHNlZW1zIGNvcnJlY3RseSBoYW5kbGVkLiBUaGVyZQoJICBpcyBhIGNvdXBsZSBvZiBvcGVuIGlzc3VlcyBsZWZ0IHdoaWNoIG5lZWQgY29uc2lkZXJhdGlvbiBlc3BlY2lhbGx5CgkgIFBFOTMgb24gZXh0ZXJuYWwgdW5wYXJzZWQgZW50aXRpZXMgYW5kIHN0YW5kYWxvbmUgc3RhdHVzLiAKCSAgUmFuIDE4MTkgdGVzdHM6IDE4MTcgc3VjZWVkZWQsIDIgZmFpbGVkIGFuZCAwIGdlbmVyYXRlZCBhbiBlcnJvciBpbiA4LjI2IHMuCgkgIFRoZSAyIHRlc3RzIGxlZnQgZmFpbGluZyBhcmUgYWN0dWFsbHkgaW4gZXJyb3IuIENsZWFudXAgZG9uZS4KClR1ZSBGZWIgMTkgMTU6MTc6MDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogaW1wbGVtZW50ZWQgRTU5IHNwYWNlcyBpbiBDREFUQSBkb2VzIG5vdCBtYXRjaCB0aGUKCSAgbm9udGVybWluYWwgUwoKVHVlIEZlYiAxOSAxNDo0NDo1MyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYyBwYXJzZXIuYyB2YWxpZC5jOiBtb3JlIHZhbGlkYXRpb24gdGVzdCBmaXh1cHMKCSogY2hlY2steG1sLXRlc3Qtc3VpdGUucHk6IGFkZGVkIGR1cmF0aW9uIGluZm8gZm9yIHRoZSB0ZXN0cwoKTW9uIEZlYiAxOCAyMzoyNTowOCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyB2YWxpZC5jOiBhIGNvdXBsZSBvZiBlcnJvcnMgd2VyZSByZXBvcnRlZCBidXQgbm90CgkgIHNhdmVkIGJhY2sgYXMgc3VjaCBpbiB0aGUgcGFyc2luZyBjb250ZXh0LiBEb3duIHRvIDElIGZhaWx1cmUgcmF0ZQoJICBSYW4gMTgxOSB0ZXN0czogMTgwMSBzdWNlZWRlZCwgMTggZmFpbGVkIGFuZCAwIGdlbmVyYXRlZCBhbiBlcnJvcgoKTW9uIEZlYiAxOCAyMDoxNjoxNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJbnRlcm5hbGQuYzogaXNFeHRlbmRlciB3YXMgbWlzc2luZyBhIGNoYXIgCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiAlIGFyZSBhY2NlcHRhYmxlIGluIHRoZQoJICBpbnRlcm5hbCBzdWJzZXQgaWYgd2l0aGluIGEgUFVCTElDIElECgpNb24gRmViIDE4IDE5OjI3OjMyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jIHBhcnNlckludGVybmFscy5jIHZhbGlkLmM6IG1vcmUgd29yayBvbiB0aGUgY29uZm9ybWFuY2UKCSAgc3VpdGUuIFRvb2sgdGhlIHN0ZXAgdG8gZmluYWxseSBibG9jayBkb2N1bWVudHMgd2l0aCBlbmNvZGluZwoJICBlcnJvcnMuIEl0J3MgYSBmYXRhbCBlcnJvciBwZXIgdGhlIHNwZWMsIHBlb3BsZSBzaG91bGQgaGF2ZSBmaXhlZAoJICB0aGVpciBkb2N1bWVudHMgYnkgbm93LgoKTW9uIEZlYiAxOCAxNTozMDoxNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14bWwtdGVzdC1zdWl0ZS5weTogZml4ZWQgdGhlIHRlc3Qgc2NyaXB0IGFmdGVyIHNvbWUgZGlzY3Vzc2lvbgoJICBvbiB0aGUgc2VtYW50aWMgb2YgVFlQRT0iZXJyb3IiCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCB0aGUgc2NyaXB0IHRvIHRoZSBkaXN0cmliCgpNb24gRmViIDE4IDEyOjE3OjQxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jIGVudGl0aWVzLmM6IGZpeGVkIGEgY291cGxlIG9mIGNvbmZvcm1hbmNlcyBpc3N1ZXMgZGVlcAoJICBpbnRvIHRoZSB2YWxpZGF0aW9uIGNvZGUgKHN0YW5kYWxvbmUgYW5kIHVuZGVjbGFyZWQgTm90YXRpb25zKQoKTW9uIEZlYiAxOCAwMDoxNzoyNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgIzcxNzQxIHN1cGlkIHR5cG8gYW4gYSBidWcgYWJvdXQgZW5jb2RpbmcgcGFyc2luZwoJICBzdGF5ZWQgdGhlcmUgZm9yIHllYXJzICEKCk1vbiBGZWIgMTggMDA6MDY6NDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyBTQVguYzogZml4ZWQgIzcxNzQwIE5vdGF0aW9uRGVjbCB3aXRoIGEgcmVxdWlyZWQgZmllbGQKCSAgbWlzc2luZwoKU3VuIEZlYiAxNyAyMzo0NTo0MCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14bWwtdGVzdC1zdWl0ZS5weTogaW1wcm92ZWQgdGhlIGJlaGF2aW91ciBhIGJpdCBhcwoJICB3ZWxsIGFzIHRoZSBsb2dzCgkqIHBhcnNlci5jIHZhbGlkLmMgU0FYLmM6IGZpeGVkIGEgZmV3IG1vcmUgYnVncyAKCSAgIlJhbiAxODE5IHRlc3RzOiAxNzc4IHN1Y2VlZGVkLCA0MSBmYWlsZWQsIGFuZCAwIGdlbmVyYXRlZCBhbiBlcnJvciIKClN1biBGZWIgMTcgMjA6NDE6MzcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steG1sLXRlc3Qtc3VpdGUucHk6IHB5dGhvbiBzY3JpcHQgdG8gcnVuIHJlZ3Jlc3Npb24gdGVzdHMKCSAgYWdhaW5zdCB0aGUgWE1MIFRlc3Qgc3VpdGUgb2YgVzNDL09BU2lzCgkqIFNBWC5jOiBmaXhlZCBhIHZhbGlkYXRpb24gYnVnCgkqIHBhcnNlci5jOiBmaXhlZCAzIGVycm9ycyBwb2ludGVkIGJ5IHRoZSB0ZXN0IHN1aXRlCgkqIGRvYy9idWlsZERvY0Jvb2tDYXRhbG9nOiBmaXhlZCBhIHR5cG8gcG9pbnRlZCBieSBkcmFrZQoJKiBweXRob24vTWFrZWZpbGUuYW06IGZpeGVkIGEgZGVwZW5kZW5keQoKRnJpIEZlYiAxNSAyMTo0NzoxMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxtZW1vcnkuYzogYXZvaWQgYSB3YXJuaW5nIGJ1ZyAjNzE1OTQKCldlZCBGZWIgMTMgMjI6MTM6MzMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbWVtb3J5LmM6IEplc3NlIFBlcnJ5IHByb3ZpZGVkIGEgcGF0Y2ggdG8gcmVtb3ZlIGEgZmV3CgkgIHdhcm5pbmcgb24gYWxwaGEvVHJ1NjQKCldlZCBGZWIgMTMgMTQ6MzA6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZW50aXRpZXMuaDogZml4aW5nIGEgY29tbWVudAoJKiB2YWxpZC5jOiBmaXhpbmcgc29tZSB0cm91YmxlcyB3aXRoIHZhbGlkaXR5IGNoZWNrIG9uIG5hbWVzcGFjZXMKCSogcmVzdWx0L1ZDL05TMyB0ZXN0L1ZDL05TMzogYWRkZWQgYSBzcGVjaWZpYyByZWdyZXNzaW9uIHRlc3QKCldlZCBGZWIgMTMgMTQ6MDU6MjQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBGaXhpbmcgIzcxMzQyIHNlcmlhbGl6aW5nICdcbicgaW4gYXR0cmlidXRlIHZhbHVlcwoJKiByZXN1bHQvbm9lbnQvYXR0MyByZXN1bHQvYXR0MyB0ZXN0L2F0dDM6IGFkZGVkIGEgc3BlY2lmaWMKCSAgdGVzdC4KClR1ZSBGZWIgMTIgMTQ6NDU6MzIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jOiBjb3VwbGUgb2YgYnVnIGZpeGVzCgpNb24gRmViIDExIDE5OjQxOjI5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi8qLnB5OiByZW1vdmVkIHRhYnMgYW5kIHVzZWQgc3BhY2VzLgoKTW9uIEZlYiAxMSAxOToyNTo0NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHByZXBhcmluZyAyLjQuMTUKCSogZG9jL25ld3MuaHRtbCBkb2MveG1sLmh0bWwgZG9jL3htbGlvLmh0bWw6IHJlYnVpbHQgc29tZSBkb2NzCgpNb24gRmViIDExIDE0OjUzOjI0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy94bWxjYXRhbG9nX21hbi54bWw6IHRyeWluZyB0byBjbG9zZSBSZWQgSGF0IGJ1ZyAjNTg3MDcKCSAgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01ODcwNwoKTW9uIEZlYiAxMSAwOTo1MzowMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9lbmNvZGluZy5oIGluY2x1ZGUvbGlieG1sL2VudGl0aWVzLmgKCSAgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oCgkgIGluY2x1ZGUvbGlieG1sL3RocmVhZHMuaCBpbmNsdWRlL2xpYnhtbC90cmVlLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IHRyeWluZyB0byBmaXggdGhlIGluY2x1ZGUgbWVzcwoKTW9uIEZlYiAxMSAwODo1MzozMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogcmV2ZXJ0ZWQgcGFydCBvZiB0aGUgcHJldmlvdXMKCSAgYXR0ZW1wdCB0byBwcm92aWRlICM2OTY1NSwgdGhpcyB3YXMgYnJlYWtpbmcgdGhlIGJ1aWxkLgoKU3VuIEZlYiAxMCAxNDoxMzozNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIE1ha2VmaWxlLmFtIGJ1aWxkX2dsb2IucHkgY29uZmlndXJlLmluIGRlYnVnWE1MLmMKCSAgZ2xvYmFscy5jIHBhcnNlci5jIHRocmVhZHMuYyB0cmVlLmMgdmFsaWQuYyB4bWxtZW1vcnkuYwoJICB4cGF0aC5jIHhwb2ludGVyLmMgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oCgkgIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIGluY2x1ZGUvbGlieG1sL3RyZWUuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaCBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOgoJICBUZW50YXRpdmVseSBmaXhlZCAjNjk2NTUgLCBtYWtlIGNvbXBpbGluZyB3aXRoIC1XcmVkdW5kYW50LWRlY2xzCgkgIGNsZWFuLgoJKiBweXRob24vbGlieG1sLmM6IGZpeGVkIGEgd2FybmluZy4KClN1biBGZWIgMTAgMTI6MDI6NTkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIHZhbGlkLmMgeGluY2x1ZGUuYzogZml4ICM2ODg4MiwgY2xlYW51cCB0aGUgWEluY2x1ZGUKCSAgY29weWluZyBvZiBub2RlLCBtZXJnZSBiYWNrIElEcyBpbiB0aGUgdGFyZ2V0IGRvY3VtZW50LgoJKiByZXN1bHQvWEluY2x1ZGUvZG9jaWRzLnhtbCB0ZXN0L1hJbmNsdWRlL2RvY3MvZG9jaWRzLnhtbAoJICB0ZXN0L1hJbmNsdWRlL2VudHMvaWRzLnhtbDogdGVzdCBjYXNlCgkqIHJlc3VsdC9WQy9FbGVtZW50VmFsaWQ0OiBvdXRwdXQgY2hhbmdlZCBkdWUgdG8gYSB0eXBvIGZpeAoKU2F0IEZlYiAgOSAyMzoxNTowNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW06IHNlZW1zIHNvbWUgdmVyc2lvbiBvZiBhdXRvbWFrZSBkaWRuJ3QKCSAgZ2VuZXJhdGUgdGhlIGRlcGVuZGVuY2llcyByaWdodCBhcyBKYWNvYiBmb3VuZCBvdXQuIEFkZAoJICBhbiBleHRyYSBkZXBlbmRlbmN5IHJ1bGUuCgpTYXQgRmViICA5IDE4OjU5OjIzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jIHZhbGlkLmM6IEp1c3RpbiBGbGV0Y2hlciBmb3VuZCBzb21lIHBhcnRzCgkgIG9mIHRoZSBjb2RlIG5lZWRpbmcgY2xlYW51cAoJKiBsaWJ4bWwuc3BlYy5pbiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL2dlbmVyYXRvci5weQoJICBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weTogRml4ZWQgdGhlIHB5dGhvbiBNYWtlZmlsZXMKCSAgY29ycmVjdGVkIGEgYnVnIHNob3dpbmcgdXAgb24gaWE2NCwgY2hhbmdlZCB0aGUgbmFtZSBvZiB0aGUKCSAgcHl0aG9uIGludGVybmFsIG1vZHVsZSB0b28KCkZyaSBGZWIgIDggMTU6MTk6MjggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGFwcGxpZWQgcGF0Y2ggZnJvbSBBbmRyaXMgUGF2ZW5pcyBmb3IgYmluYXJ5CgkgIG5hbWUgc3VmZml4ZXMKCkZyaSBGZWIgIDggMTQ6NDM6MTcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jIHdpbjMyL3dpbjMyY29uZmlnLmg6IGZpeGluZyAjNjg3NDgKCkZyaSBGZWIgIDggMTQ6Mzc6MDUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4aW5nICM3MDE2NgoKRnJpIEZlYiAgOCAxNDozMToyNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXhpbmcgIzcwMDc3CgpGcmkgRmViICA4IDE0OjI0OjAyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIENvcHlyaWdodCBNYWtlZmlsZS5hbSBSRUFETUUgY29uZmlndXJlLmluIGxpYnhtbC5zcGVjLmluOgoJICBDaGFuZ2VkIHRvIHRoZSBNSVQgTGljZW5jZQoJKiBkb2MvRkFRLmh0bWwgZG9jL2NhdGFsb2cuaHRtbCBkb2MvaW50cm8uaHRtbCBkb2MveG1sLmh0bWwKCSAgZG9jL3htbGlvLmh0bWw6IHVwZGF0ZWQgdGhlIGRvYyBhY2NvcmRpbmdseQoJKiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaCBjb25maWd1cmUuaW46IHByZXBhcmluZwoJICAyLjQuMTQgcmVsZWFzZQoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbAoJICBweXRob24vbGlieG1sMmNsYXNzLnR4dCBweXRob24vbGlieG1sX3dyYXAuaCBweXRob24vdHlwZXMuYzoKCSAgZml4ZWQgdGhlIGNvbnN0IHhtbENoYXIgKiB3cmFwcGVyIGFuZCBnZW5lcmF0b3IsIFhQYXRoIGV4dGVuc2lvbgoJICBmdW5jdGlvbnMgbm93IHVzZSB0aGUgY29udGV4dCBhcyBmaXJzdCBhcmd1bWVudAoJKiBweXRob24vdGVzdHMvdHN0eHBhdGgucHkgcHl0aG9uL3Rlc3RzL3hwYXRoLnB5CgkgIHB5dGhvbi90ZXN0cy94cGF0aGV4dC5weTogVXBkYXRlZCB0aGUgdGVzdHMgYWNjb3JkaW5nbHkKCSogdHJlZS5jOiBmaXhlZCBidWcgIzcwMDY3CgpUaHUgRmViICA3IDE3OjMzOjU4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBjbGVhbnVwCgkqIGRlYnVnWE1MLmM6IGFsd2F5cyB1c2Ugc3Rkb3V0IGlmIG91dHB1dCBpcyBOVUxMCgkqIHhtbElPLmM6IGRvbid0IGNsb3NlIGZpbGVkZXNjcmlwdG9ycyBwYXNzZWQgdG8gb3V0cHV0QnVmZmVycwoJKiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sMmNsYXNzLnR4dAoJICBweXRob24vbGlieG1sX3dyYXAuaCBweXRob24vdHlwZXMuYzogYXVnbWVudGVkIHRoZSBudW1iZXIgb2YgYmluZGluZ3MKCSAgaGFuZGxpbmcgRklMRSAqIGFuZCBYUGF0aCBjb250ZXh0cwoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW06IGF2b2lkIGEgc3R1cGlkIHByb2JsZW0gZHVlIHRvIHRoZQoJICB1c2Ugb2YgVEVTVC4KCldlZCBGZWIgIDYgMjM6Mzc6MDcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBmaXhlZCBzdHVwaWQgYnVnICM3MDczOCBmb3VuZCBieSBhbGZvbnMgaG9vZ2Vydm9yc3QKCldlZCBGZWIgIDYgMTc6MDQ6NTEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL1RPRE8gcHl0aG9uL2xpYnhtbC5jOiBjbGVhbnVwIHRoZSBleHRlbnNpb24gZnVuY3Rpb24gbG9va3VwCgkqIHhtbG1lbW9yeS5jIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oOiBhbHdheXMgY29tcGlsZSB0aGUgbGlzdAoKVHVlIEZlYiAgNSAxNzozMzozMCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gcHl0aG9uL01ha2VmaWxlLmFtOiBkbyBub3QgaW5zdGFsbCBvdXRzaWRlCgkgIG9mIHByZWZpeAoKTW9uIEZlYiAgNCAxNTowNTo1NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vVE9ETyBweXRob24vbGlieG1sLmM6IHN0YXJ0ZWQgYWRkaW5nIFNBWCBpbnRlcmZhY2VzCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcHVzaFNBWC5weTogYWRkZWQgYSBiYXNpYwoJICBTQVggdGVzdAoKTW9uIEZlYiAgNCAwMToxMjo0MiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGhhcmRlbmVkIHRoZSBhZGRDaGlsZCBmdW5jdGlvbgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbAoJICBweXRob24vbGlieG1sMmNsYXNzLnR4dCBweXRob24vbGlieG1sX3dyYXAuaCBweXRob24vVE9ETzoKCSAgYWRkZWQgYWNjZXNzb3JzIG5lZWRlZCBmb3IgeG1sTm9kZSwgYSBiaXQgbW9yZSB0ZXN0aW5nIGFuZAoJICBleHRlbnNpb24gb2YgaW50ZXJmYWNlcwoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL2J1aWxkLnB5OiBhZGRlZCBhIHRlc3QKCSAgYnVpbGQgZnJvbSBzY3JhdGNoL3NhdmUvbG9hZC9jaGVjawoKU3VuIEZlYiAgMyAyMToxMDozOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogY2hhbmdlIGEgc21hbGwgYml0IGluIHRoZSB3YXkgdmFsaWRpZHkKCSAgZXJyb3IgbWVzc2FnZXMgZ2V0IGluaXRpYWxpemVkCgkqIHB5dGhvbi9UT0RPIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbAoJICBweXRob24vbGlieG1sMmNsYXNzLnR4dCBweXRob24vbGlieG1sX3dyYXAuaCBweXRob24vdHlwZXMuYzoKCSAgYWRkZWQgc29tZSBtZW1vcnkgZGVidWdnaW5nIHRvIHRyYWNrIGxlYWtzIGF0IHRoZSBsaWJ4bWwyIGxldmVsCgkqIHB5dGhvbi90ZXN0cy8qLnB5OiBjaGFuZ2VkIGFsbCB0ZXN0cyB0byBjaGVjayBmb3IgbGVha3MsCgkgIHRoZXJlIGlzIGp1c3Qgb25lIGxlZnQgaW4gWFBhdGggZXh0ZW5zaW9uIHJlZ2lzdHJhdGlvbnMuCgpTdW4gRmViICAzIDE3OjUwOjQ2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9UT0RPIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IG1vcmUgYWNjZXNzb3IgY2xhc3NlcyBmb3IgdGhlIHBhcnNlcgoJICBjb250ZXh0LCBhbGxvdyB0byBzd2l0Y2ggb24gYW5kIGNoZWNrIHZhbGlkaXR5CgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvZXJyb3IucHkKCSAgcHl0aG9uL3Rlc3RzL2ludmFsaWQueG1sIHB5dGhvbi90ZXN0cy92YWxpZC54bWwKCSAgcHl0aG9uL3Rlc3RzL3ZhbGlkYXRlLnB5OiBhdHRkZWQgbW9yZSB0ZXN0IGFuZCBhbmQgYWRkZWQgZXJyb3IucHkKCSAgd2hpY2ggSSBmb3Jnb3QgdG8gY29tbWl0IGluIHRoZSBsYXN0IHN0ZXAKClN1biBGZWIgIDMgMTY6MDM6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi90eXBlcy5jOiBjbGVhbnVwCgkqIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5IHB5dGhvbi9saWJ4bWxfd3JhcC5oCgkgIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwgCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBhZGRlZCBjbGFzcyBmb3IgcGFyc2VyIGNvbnRleHQsIGFkZGVkCgkgIGZpcnN0IGN1dCBmb3IgcHVzaCBtb2RlIHN1cHBvcnQuIEFkZGVkIGEgZnJhbWV3b3JrIHRvIGdlbmVyYXRlCgkgIGFjY2Vzc29ycyBmdW5jdGlvbnMuCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcHVzaC5weTogYWRkZWQgYSBwdXNoCgkgIHRlc3QKClN1biBGZWIgIDMgMDA6MTc6MjYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi9UT0RPIHB5dGhvbi9saWJ4bWwucHk6IGZpeGVkIGEgc21hbGwKCSAgYnVnIGEgYml0IG9mIGNsZWFudXAuCgpTYXQgRmViICAyIDIyOjQ3OjEwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IGFkZGluZyBlcnJvciByZWRpcmVjdGlvbnMgYW5kIHByZWZvcm1hdAoJICB0byBhIHB5dGhvbiBoYW5kbGVyCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvKi5weTogY2xlYW51cCBtYWRlIGFsbAoJICB0ZXN0cyBzZWxmIGNoZWNraW5nCgpTYXQgRmViICAyIDEzOjE4OjU0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5OiBmaXhlZCBhIHN0dXBpZCBidWcgd2hlbiByZW5hbWluZwoJICBhIGZ1bmN0aW9uCgpTYXQgRmViICAyIDExOjI1OjUxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vVE9ETyBweXRob24vZ2VuZXJhdG9yLnB5CgkgIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbAoJICBweXRob24vbGlieG1sMmNsYXNzLnR4dDogUHJvZ3Jlc3NpbmcgdGhyb3VnaCB0aGUgVE9ET3MsIGNsYXNzCgkgIGRlc2NyaXB0aW9uIG91dHB1dCwgZXh0cmEgWE1MIEFQSSwgUlBNIG5vdyBidWlsZHMgdGhlIHdyYXBwZXJzCgkgIGZvciBhbGwgcHl0aG9uIGluc3RhbGxlZCB2ZXJzaW9ucwoKU2F0IEZlYiAgMiAxMDoxMzo1MiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gbGlieG1sLnNwZWMuaW4gcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi9UT0RPCgkgIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IGFkZGVkIG1vcmUgaW5mb3JtYXRpb25zCgkgIGluIHRoZSBsaWJ4bWwyLXB5dGhvbiBwYWNrYWdlIGluY2x1ZGluZyBkb2NzLiBTbGlnaHRseSBjaGFuZ2VkCgkgIHRoZSBjbGFzcyBoaWVyYXJjaHkKCSogcHl0aG9uL3Rlc3RzLyo6IGFkZGVkIGJhc2ljIHJlZ3Jlc3Npb24gdGVzdHMgaW5mcmFzdHJ1Y3R1cmUgdG9vCgpGcmkgRmViICAxIDIzOjExOjU4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBsaWJ4bWwuc3BlYy5pbiBleGFtcGxlL01ha2VmaWxlLmFtIHB5dGhvbi9NYWtlZmlsZS5hbToKCSAgYWRkZWQgbGlieG1sMi1weXRob24gYXMgcGFydCBvZiB0aGUgcGFja2FnZXMgaW5zdGFsbGVkCgpGcmkgRmViICAxIDE4OjQ4OjE5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYwoJICBweXRob24vbGlieG1sLnB5OiBtb3JlIHdvcmssIG5vdyBhYmxlIHRvIGV4dGVuZCB0aGUKCSAgWFBhdGggaW50ZXJwcmV0ZXIgd2l0aCBmdW5jdGlvbnMgd3JpdHRlbiBpbiBweXRob24uCgpGcmkgRmViICAxIDEwOjI4OjUxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbTogSmFjb2Igc2VudCBhIHBhdGNoIHRvIGFsbG93IGJ1aWxkaW5nIGZyb20KCSAgdGFyZmlsZS4KCkZyaSBGZWIgIDEgMDA6NDA6NDggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi9saWJ4bWwuYyBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW06CgkgIGluc2VydGVkIHRoZSBweXRob24gd3JhcHBlcnMgYnVpbGQsIEkgaG9wZSB0aGlzIHdvbid0IGJlIHRvbwoJICB1bnBvcnRhYmxlCgpUaHUgSmFuIDMxIDIxOjI3OjM3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IG1pbm9yIG9wdGltaXphdGlvbgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5CgkgIHB5dGhvbi9saWJ4bWxfd3JhcC5oOiBtb3JlIHdvcmsgb24gdGhlIHB5dGhvbiBiaW5kaW5ncywKCSAgdGhleSBub3cgc3VwcG9ydCBYUGF0aCBhbmQgdGhlcmUgaXMgbm8gZXZpZGVudCBsZWFrCgpUaHUgSmFuIDMxIDAwOjQ4OjA2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHk6CgkgIG1vcmUgd29yayBvbiB0aGUgcHl0aG9uIGJpbmRpbmdzIGdlbmVyYXRvci4KCldlZCBKYW4gMzAgMjE6NTE6MjYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbF93cmFwLmg6CgkgIG1vcmUgd29yayBvbiB0aGUgcHl0aG9uIGJpbmRpbmdzLgoKV2VkIEphbiAzMCAxNzozNTozMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5CgkgIHB5dGhvbi9saWJ4bWxfd3JhcC5oOiBjb21taXRlZCBlYXJseSB2ZXJzaW9uIG9mIGEgcHl0aG9uIGJpbmRpbmcKCSAgZm9yIHByaXZhdGUgdXNlIG9ubHkgQVRNCgpTYXQgSmFuIDI2IDIyOjQxOjEzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVudGl0aWVzLmMgdHJlZS5jIGluY2x1ZGUvbGlieG1sL2VudGl0aWVzLmg6IGFwcGxpZWQgcGF0Y2gKCSAgZnJvbSBBbnRob255IEpvbmVzIHRvIGltcGxlbWVudCBjb3B5IG9mIERURCBzdWJ0cmVlIHRvby4gSGFkCgkgIGp1c3QgdG8ga2VlcCAyIGZ1bmN0aW9uIHByaXZhdGUgd2hpY2ggcmVhbGx5IG91Z2h0IHRvIGJlY29tZQoJICBwdWJsaWMgb25lcy4KCkZyaSBKYW4gMjUgMTU6MTQ6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhZGRlZCBwb2ludGVycyB0byB0aGUgd2ViIHBhZ2VzIGluIHRoZSB1c2FnZSgpCgpUaHUgSmFuIDI0IDE3OjA0OjA0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogbW9yZSBmaXhlcyBmcm9tIFBldHIgS296ZWxrYSBmb3IgYXR0cmlidXRlIGhhbmRsaW5nCgkgIGluIHRoZSB0cmVlIEFQSSB0byBhbGlnbiB0aGUgc2VtYW50aWMgd2l0aCBET00uCgpUaHUgSmFuIDI0IDE2OjAwOjUzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmMgdHJlZS5jIGVudGl0aWVzLmM6IGFub3RoZXIgc2V0IG9mIHBhdGNoZXMgZnJvbQoJICBBbnRob255IEpvbmVzIGZvciBjb3B5IG9wZXJhdGlvbnMgY2xlYW51cCBhbmQgcm9idXN0bmVzcwoKV2VkIEphbiAyMyAxODo1Mzo1NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvQVBJY2h1bmsqLmh0bWwgZG9jL3BhcnNlZGVjbC5weSBkb2MvYXBpLnhzbDogZ2VuZXJhdGVkCgkgIGFuIGFscGhhYmV0aWMgaW5kZXggYmFzZWQgb24gY29tbWVudHMgY29udGVudAoJKiBkb2MvKjogcmVidWlsdCB0aGUgd2ViIHNpdGUgd2l0aCB0aGUgbmV3IHJlZmVyZW5jZXMKCldlZCBKYW4gMjMgMTU6MTQ6MjIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmg6IEdyZWcgU2phYXJkZW1hIHN1Z2dlc3RlZCB0byB1c2UgYW4KCSAgZXBvbmVudGlhbCBidWZmZXIgZ3JvdGggcG9saWN5IGluIHhtbFBhcnNlckFkZE5vZGVJbmZvKCkKCldlZCBKYW4gMjMgMTM6MzI6NDAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2FwaS54c2wgZG9jL0FQSWNvbnN0cnVjdG9ycy5odG1sIGRvYy9BUElmaWxlcy5odG1sCgkgIGRvYy9BUElmdW5jdGlvbnMuaHRtbCBkb2MvQVBJc3ltYm9scy5odG1sIGRvYy9saWJ4bWwyLXJlZnMueG1sCgkgIGRvYy9wYXJzZWRlY2wucHkgZG9jL01ha2VmaWxlLmFtOiB1cGRhdGVkIHRoZSBweXRob24gZXh0cmFjdG9yCgkgIHRvIGdlbmVyYXRlIGNyb3NzLXJlZmVyZW5jZXMsIGFuZCBhZGRlZC91cGRhdGVkIHRoZSBzdHlsZXNoZWV0cwoJICB0byBnZW5lcmF0ZSBhbmQgbGluayBBUEkgaW5kZXhlcy4gVGhlIGdlbmVyaWMga2V5d29yZCBpbmRleAoJICBpcyBub3QgZG9uZSB5ZXQuCgkqIGRvYy8qLmh0bWw6IHJlZ2VuZXJhdGVkIGFsbCB0aGUgdXN1YWwgZG9jcyB0b28KClR1ZSBKYW4gMjIgMjM6MTE6MjYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogYWRkZWQgYW4geHBhdGggZnVuY3Rpb24gdG8gdGhlIHNoZWxsIGZvciBULiBWLiBSYW1hbgoKVHVlIEphbiAyMiAyMjo0MjoyMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBwYXRjaCBmcm9tIEFudGhvbnkgSm9uZXMgdG8gY2F0Y2ggTlVMTCBub2RlcyBpbgoJICBkZWJ1ZyByb3V0aW5lcy4KClR1ZSBKYW4gMjIgMjI6Mzg6NDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhcHBseSBhbiBwYXRjaCBmcm9tIFBldHIgS296ZWxrYSBmb3IgdW5saW5rIGFuZCByZXBsYWNlIAoJICBzdXBwb3J0IG9mIGF0dHJpYnV0ZSBub2RlcwoKVHVlIEphbiAyMiAxOToxMjowNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy9wYXJzZWRlY2wucHk6IEJ1aWxkIGEgbmV3IHZlcnNpb24KCSAgaG9wZWZ1bGx5IG5lYXIgY29tcGxldGUgYW5kIGZ1bGx5IGRvY3VtZW50ZWQgb2YgdGhlIEFQSSBpbiBYTUwKCSogSFRNTHRyZWUuYyBTQVguYyBkZWJ1Z1hNTC5jIGVycm9yLmMgZ2xvYmFscy5jIHBhcnNlci5jIHRyZWUuYwoJIHhtbElPLmMgeG1sbWVtb3J5LmMgaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oIGluY2x1ZGUvbGlieG1sL2hhc2guaAoJIGluY2x1ZGUvbGlieG1sL2xpc3QuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBpbmNsdWRlL2xpYnhtbC90cmVlLmgKCSBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaCBpbmNsdWRlL2xpYnhtbC92YWxpZC5oaQoJIGluY2x1ZGUvbGlieG1sL3htbElPLmggaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaGkKCSBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaCBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW5pCgkgaW5jbHVkZS9saWJ4bWwveHBhdGguaCBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOgoJICBDbGVhbmVkIHVwIHRoZSBkb2MgY29tbWVudHMgYSBsb3QgaW4gdGhlIHByb2Nlc3MsIHRoZSBpbnRlcmZhY2UKCSAgY292ZXJhZ2UgaXMgbm93IDEwMCUKClR1ZSBKYW4gMjIgMDA6MTI6NTggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvcGFyc2VkZWNsLnB5OiBpbXByb3ZlZCB0aGUgc2NyaXB0IHRvCgkgIGV4dHJhY3RzIGNvbW1lbnRzIGZyb20gdGhlIGd0ay1kb2MgRG9jQm9vayBvdXRwdXQgKGEgYml0CgkgIGNvbnZvbHV0ZWQgYnV0IHNlZW1zIHRvIHdvcmspLgoKTW9uIEphbiAyMSAxODoyOToxOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBkb2MvTWFrZWZpbGUuYW0gZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvcGFyc2VkZWNsLnB5OgoJICBhZGRlZCBhbiBYTUwgZGVzY3JpcHRpb24gb2YgdGhlIEFQSSwgbW92ZWQgdGhlIHNjcmlwdCBnZW5lcmF0aW5nCgkgIGl0IGhlcmUuIEFkZGVkIGEgIm1ha2UgYXBpIiB0YXJnZXQKCk1vbiBKYW4gMjEgMTQ6MzQ6MzcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBBZGFtIExvdW5kcyBwb2ludGVkIG91dCBhIGJ1ZyBpbiB4bWxTZWFyY2hOcygpCgpNb24gSmFuIDIxIDA5OjU1OjIxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDogdGhlIGNoYW5nZSBtYWRlIHRvCgkgIHhtbFhQYXRoRnVuY0xvb2t1cEZ1bmMgd2FzIGluY29tcGF0aWJsZSByb2xsIGl0IGJhY2sKClN1biBKYW4gMjAgMjM6MDM6NDEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGNsZWFudXAgcGF0Y2ggZnJvbSBBbnRob255IEpvbmVzCgkqIGRvYy9NYWtlZmlsZS5hbTogZml4IHRoZSBoZWFkZXJzIHRvIGF2b2lkIGluIG1ha2Ugc2NhbgoJKiBwYXJzZXJJbnRlcm5hbHMuYyB4cGF0aC5jIGluY2x1ZGUvbGlieG1sLyouaDogY2xlYW51cCBvZiB0aGUKCSAgaW5jbHVkZXMsICogdnMgUHRyIGFuZCBnZW5lcmFsIGNsZWFudXAKCSogcGFyc2VkZWNsLnB5OiBmaXJzdCB2ZXJzaW9uIG9mIGEgc2NyaXB0IHRvIGV4dHJhY3QgdGhlCgkgIG1vZHVsZSBpbnRlcmZhY2VzLCB0aGUgZ29hbCB3aWxsIGJlIHRvIHByb3ZpZGUgLmRlY2wgb3IgWE1MCgkgIHNwZWNpZmljYXRpb24gb2YgdGhlIGludGVyZmFjZXMgdG8gYnVpbGQgd3JhcHBlcnMuCgpTdW4gSmFuIDIwIDEzOjM4OjIyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy94bWxjYXRhbG9nX21hbi54bWwgeG1sY2F0YWxvZy5jOiBGaXhlZCBidWcgIzY4ODMwLCB4bWxjYXRhbG9nCgkgIG5vdyBwcm92aWRlcyByZXR1cm4gY29kZXMgaW4gY2FzZSBvZiBlcnJvcnMKClNhdCBKYW4gMTkgMTY6MzY6MjEgQ0VUIDIwMDIgQmpvcm4gUmVlc2UgPGJyZWVzZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgoJKiB0cmlvLmggdHJpby5jIHRyaW9kZWYuaCB0cmlvcC5oIHRyaW9uYW4uaCB0cmlvbmFuLmMgTWFrZWZpbGUuYW06CgkgIFVwZ3JhZGVkIHRvIHRyaW8gYmFzZWxpbmUgMS42CgkqIHN0cmlvLmggc3RyaW8uYzogUmVwbGFjZWQgYnkgdHJpb3N0ci5oIGFuZCB0cmlvc3RyLmMKCkZyaSBKYW4gMTggMTc6MjI6NTAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jIHhtbElPLmMgeG1sY2F0YWxvZy5jOiByZW1vdmVkIHRoZSBsYXN0IG9jY3VyZW5jZXMKCSAgb2Ygc3RyZHVwIHVzYWdlIGluIHRoZSBjb2RlCgpGcmkgSmFuIDE4IDEyOjQ3OjE1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIGVycm9yLmM6IEtlaXRoIElzZGFsZSBjb21wbGFpbmVkIHJpZ2h0bHkgdGhhdCAKCSAgeG1sSW5pdFBhcnNlcigpIGRpZCBub3QgcHJlc2VydmUgdmFsdWUgc2V0IGJ5IHhtbFNldEdlbmVyaWNFcnJvckZ1bmMKClRodSBKYW4gMTcgMDk6NDQ6NDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlZCB0aGUgZnVueHRpb24gdG8gc2V0IHRoZSB4bWw6IGF0dHJpYnV0ZXMKCSogZGVidWdYTUwuYzogYWRkZWQgInNldGJhc2UiIHRvIHRlc3QgaXQuCgpXZWQgSmFuIDE2IDE2OjM2OjA4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogdXBkYXRlIHhtbE5vZGVTZXRDb250ZW50KCkgYW5kIHhtbE5vZGVTZXRDb250ZW50TGVuKCkKCSAgdG8gYWxsb3cgdXBkYXRpbmcgYW4gYXR0cmlidXRlIGNvbnRlbnQKClR1ZSBKYW4gMTUgMTg6MDk6MjMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLmg6IHRyeSB0byBhdm9pZCBwcm9ibGVtcyB3aGVuIGNvbXBpbGluZyBvbiBXaW5kb3dzCgpNb24gSmFuIDE0IDE4OjU2OjI1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGhhc2guYzogcGF0Y2ggZnJvbSBBbnRob255IEpvbmVzIGZvciBoYXNoLmMgYWxsb2NhdGlvbiBzaXplCgkqIE1ha2VmaWxlLmFtOiB0cnlpbmcgdG8gd29yayBhcm91bmQgWWV0IEFub3RoZXIgTGlidG9vbCBNYWRuZXNzCgkgIGFuZCBidWlsZCB0aGUgMi40LjEzIHJlbGVhc2UgZmluYWxseSAuLi4KCk1vbiBKYW4gMTQgMTg6Mjc6MTkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiB1cGRhdGVkIHRvIDIuNC4xMwoJKiBkb2MvKiA6IHVwZGF0ZSBvZiB0aGUgZG9jdW1lbnRhdGlvbgoKTW9uIEphbiAxNCAxNzo1Mzo0MSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jIHRyZWUuYzogc29tZSBjbGVhbnVwIGFmdGVyIGFuIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0CgkgIGF0IGZpeGluZyAjNjEyOTAgOi0oCgpTdW4gSmFuIDEzIDIxOjMwOjU0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4ZWQgeG1sU2F2ZUZvcm1hdEZpbGVFbmMoKSB3aGVuIGVuY29kaW5nID09IE5VTEwKCSAgRml4ZXMgYnVnICM2NzIyOQoKU3VuIEphbiAxMyAxNzoxNDowNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHRyeWluZyB0byBhdm9pZCB0cm91YmxlcyB3aGVuIGEgc3VidHJlZSBpcyBjb3BpZWQKCSAgYW5kIGNvYWxlc2NlZCBpbiBwYXJ0IHdpdGggdGhlIHRhcmdldCB0cmVlLiBTaG91bGQgZml4IAoJICBidWcgIzY3NDA3CgpTdW4gSmFuIDEzIDE2OjM3OjE1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeGVkIHZhbGlkYXRpb24gb2YgYXR0cmlidXRlcyBjb250ZW50IG9mIHR5cGUKCSAgTkFNRSBOQU1FUyBOTVRPS0VOIGFuZCBOTVRPS0VOUyB0byBhY2NlcHQgaW50ZXJuYXRpb25hbGl6ZWQKCSAgdmFsdWVzLCB2ZXJ5IG9sZCBidWcuIEZpeGVzICM2NzY3MQoKU3VuIEphbiAxMyAxNTowNzo0OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaCB0cmVlLmM6IGludGVncmF0ZWQKCSAgYSBjb3VwbGUgb2YgZml4ZXMgYW5kIGEgbmV3IEFQSSBmdW5jdGlvbiB4bWxTZXRFbnRpdHlSZWZlcmVuY2VGdW5jKCkKCSAgZnJvbSBLZWl0aCBJc2RhbGUgYW5kIGRlZGljYXRlZCB0byB4c2xkYmcgdGhlIFhTTFQgZGVidWdnZXIuCgpTdW4gSmFuIDEzIDE0OjIzOjIxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRocmVhZHMuYzogYXBwbGllZCBTZXJndWVpIE5hcm9qbnlpJ3MgcGF0Y2ggdG8gYWRkIG5hdGl2ZQoJICB0aHJlYWQgc3VwcG9ydCBvbiB0aGUgV2luMzIgcGxhdGZvcm0KCSogdGVzdFRocmVhZHNXaW4zMi5jIE1ha2VmaWxlLmFtOiBhZGRlZCB0aGUgdGVzdCBwcm9ncmFtIGFsc28KCSAgZnJvbSBTZXJndWVpLCBXaW4zMiBzcGVjaWZpYwoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmggaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmguaW46CgkgIGFkZGVkIHBhdGNoIGZyb20gSWdvciBmb3IgdGhlIFdpbmRvd3MgdGhyZWFkIHNwZWNpZmljIGRlZmluZXMuCgpXZWQgSmFuICA5IDEyOjUwOjM5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVudGl0aWVzLmM6IEFudGhvbnkgSm9uZXMgcG9pbnRlZCBhIGJ1ZyBpbiB4bWxDb3B5RW50aXR5KCkKClR1ZSBKYW4gIDggMTQ6MjM6MjIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jLyouaHRtbCBkb2Mvc2l0ZS54c2wgZG9jL01ha2VmaWxlOiByZW5hbWVkIFhNTC5odG1sCgkgIG91dHB1dCBwYWdlIGludG8gWE1MaW5mby5odG1sLiBDbG9zZSBidWcgIzY2OTUxIGFuZAoJICByYWlzZWQgYnkgUm9iZXJ0IENvbGxpbnMgdG9vLgoKVHVlIEphbiAgOCAxNDoxMzoxOCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiBQYXVsIEtlb2doIHBvaW50ZWQgb3V0IGEgcG9zc2liaWxpdHkgb2Ygc2VnZmF1bHQKCSAgb24gcmVwZXRlZCB4bWxBZGRFbmNvZGluZ0FsaWFzKCkgLyB4bWxDbGVhbnVwRW5jb2RpbmdBbGlhcygpLgoJICBDbG9zZXMgYnVnICMgNjgyMzgKClR1ZSBKYW4gIDggMTI6NDg6MjcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jLyouaHRtbDogdXBkYXRlZCB0aGUgR2RvbWUyIGxpbmtzCgpUdWUgSmFuICA4IDExOjMyOjMwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5oOiBBcHBsaWVkIGZvbGxvd2luZyBwYXRjaGVzIGZyb20gUm9iZXJ0IENvbGxpbnMKCSAgYW5kIG1ha2Ugc3VyZSBJTl9MSUJYTUwgaXMgZGVmaW5lZCB3aGVuIGNvbXBpbGluZyBpdAoJLS0tLS0tLQoJKiBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4gKExJQlhNTF9ETExfSU1QT1JUKTogVXNlIG9uIEN5Z3dpbgoJICBhcyB3ZWxsIGFzIFZpc3VhbCBDLgoJKiBwYXJzZXIuYyAoWE1MX0RJUl9TRVApOiBEb24ndCB1c2UgJ1xcJyBmb3IgQ3lnd2luLgoJKiBwYXJzZXJJbnRlcm5hbHMuYyAoWE1MX0RJUl9TRVApOiBEb24ndCB1c2UgJ1xcJyBmb3IgQ3lnd2luLgoJKiBzdHJpby5jIChQTEFURk9STV9VTklYKTogRGVmaW5lIGZvciBDeWd3aW4uCgkqIHRyaW9kZWYuaCAoVFJJT19QTEFURk9STV9VTklYKTogRGVmaW5lIGZvciBDeWd3aW4uCgkqIHhtbElPLmMgKHhtbEZpbGVPcGVuKTogVXNlIHVuaXggYmVoYXZpb3VyIGZvciBDeWd3aW4uCgkgIFVzZSBiaW5hcnkgbW9kZSBvcGVucyBmb3IgQ3lnd2luICh4bWxGaWxlT3BlblcgeG1sUGFyc2VyR2V0RGlyZWN0b3J5CgkgIHhtbFN5c0lERXhpc3RzIHhtbE5vTmV0RXhpc3RzKS4KCSogeG1sbGludC5jOiBEb24ndCBpbmNsdWRlIHdpbnNvY2syLmggZm9yIEN5Z3dpbi4KCk1vbiBKYW4gIDcgMTc6NTI6NDggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IEppcmthIEtvc2VrIHBvaW50ZXIgb3V0IGEgYnVnIGluIHhtbFBhcnNlVGV4dERlY2woKQoJICB3aGVuIHRoZSB2ZXJzaW9uIGluZm8gaXMgbm90IHByZXNlbnQuCgpNb24gSmFuICA3IDAwOjAzOjU4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogQW50aG9ueSBKb25lcyAgcG9pbnRlZCBvdXQgYSBwcm9ibGVtIGluCgkgIHhtbFN0cmluZ0dldE5vZGVMaXN0KCkgYW5kIHByb3ZpZGVkIGEgZml4IGZvciBpdAoKU3VuIEphbiAgNiAxMzo0NTo0OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogcGF0Y2ggZnJvbSBGcmFuayBKIEZyYW5rbGluIHRvIHJlbW92ZSBhIGJ1ZyBpbgoJICB4bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dCgpIHdoZW4gdGhlIGluaXRpYWwgYnVmZmVyIHBhc3NlZAoJICBpcyBsYXJnZS4KClNhdCBKYW4gIDUgMTk6MjQ6MjMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvKjogYmlnIGNsZWFudXAgb2YgdGhlIFdpbmRvd3MvTVNWQyBwcm9qZWN0IGZpbGVzCgkgIGZyb20gSWdvciBabGF0a292aWMKCldlZCBKYW4gIDIgMTQ6MTE6MzUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL01ha2VmaWxlLmFtOiBzaG91bGQgZml4ICM2NzY3NCBhbmQgYXZvaWQgdHJvdWJsZXMgaWYgCgkgIHhzbHRwcm9jIGlzIG5vdCBhdmFpbGFibGUgb3IgZmFpbHMgaW4gdGhlIHByZWZpeCBwcm92aWRlZAoKVHVlIEphbiAgMSAxNzo0ODo1NiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxtZW1vcnkuYzogb25lIG1vcmUgZG9jIHBhdGNoIGZyb20gQ2hhcmxpZSBCb3plbWFuLgoKTW9uIERlYyAzMSAxNzozNTo0MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBET0NCcGFyc2VyLmMgcGFyc2VyLmMgdmFsaWQuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6CgkgIEZpeGVkIGEgZmV3IG90aGVyIHByb2JsZW1zIHJhaXNlZCBieSBDaGFybGllIEJvemVtYW4uCgkqIHJlc3VsdC9WQy9FbGVtZW50VmFsaWRbNS03XTogZml4ZWQgdGhlIG91dHB1dAoKTW9uIERlYyAzMSAxNzoxMzozNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiAqLmMgaW5jbHVkZS9saWJ4bWwvKi5oIGRvYy9odG1sLyo6IGFwcGxpZWQgNDIgZG9jdW1lbnRhdGlvbgoJICBwYXRjaGVzIGZyb20gQ2hhcmxpZSBCb3plbWFuLiBSZWdlbmVyYXRlZCB0aGUgSFRNTCBkb2NzLgoKVGh1IERlYyAyMCAxNDo1OTo1MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9kZWJ1Z1hNTC5oIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmM6IGZpeGVzCgkgIGZvciBXaW5kb3dzIGZyb20gSWdvcgoKVHVlIERlYyAxOCAxMjoxMzozMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFwcGxpZWQgSnVzdGluIEZsZXRjaGVyIHBhdGNoIGZvciAtLW91dHB1dCBvciAtbwoKVHVlIERlYyAxOCAwODo1MjozMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZGVmLnNyYzogY2xvc2UgIzY3MDE5CgpUdWUgRGVjIDE4IDA4OjA4OjUxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYXBwbGllZCBKdXN0aW4gRmxldGNoZXIgZ2VuZXJpYyB0aW1pbmcgcGF0Y2gKCSAgc2ltaWxhciB0byB0aGUgb25lIGFscmVhZHkgYXBwbGllZCB0byB4c2x0cHJvYy4KCk1vbiBEZWMgMTcgMTY6Mjk6MDggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oIHRyZWUuYzogYXBwbGllZCBkb2N1bWVudGF0aW9uIHBhdGNoZXMKCSAgZnJvbSBDaGFybGllIEJvemVtYW4KClRodSBEZWMgMTMgMjE6MjQ6MTYgTVNUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqZG9jL3htbGxpbnQueG1sLCB4bWxsaW50LjEgLSBkb2N1bWVudCAtLWRyb3BkdGQKClRodSBEZWMgMTMgMjM6MTk6NTAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4IHRoZSB4bWxTdHJkdXAoKSB1c2VkIGluIHRoZSBwcmV2aW91cyBwYXRjaC4KCSogdmFsaWQuYzogYWRkZWQgLS1kcm9wZHRkCgkqIHRyZWUuYzogZml4ZWQgeG1sVW5saW5rTm9kZSBzbyBpdCBhbHNvIHJlbW92ZXMgdGhlIHJlZmVyZW5jZXMKCSAgZnJvbSB0aGUgZG9jdW1lbnQgaWYgdGhlIG5vZGUgaXMgYSBEVEQKClRodSBEZWMgMTMgMTU6NTQ6MzUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyB2YWxpZC5jOiBjbGVhbnVwIHNvbWUgc3RhdGljIGRlY2xhcmF0aW9ucwoKVGh1IERlYyAxMyAxNToyMzowNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IHJlbW92ZWQgYW5vdGhlciBzdHJkdXAoKQoJKiBkb2MvRkFROiByZW1vdmVkIHRoZSBIUC9VWCBlbnRyeQoKVGh1IERlYyAxMyAwOTo0NDo1OCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXggYnVnICM2NjgxNiB3aGVuIHZhbGlkYXRpbmcuCgkqIHhtbGxpbnQuYzogZG9uJ3QgdXNlIHN5cy90aW1lLmggaWYgY29uZmlndXJlIGRpZCBub3QgZm91bmQgaXQKCk1vbiBEZWMgMTAgMjE6Mzk6NTUgTVNUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvY3MveG1sbGludC4xLCB4bWxsaW50LnhtbCwgeG1sY2F0YWxvZy4xLCB4bWxjYXRhbG9nX21hbi5odG1sLAoJeG1sY2F0YWxvZ19tYW4ueG1sCgpNb24gRGVjIDEwIDIyOjA2OjE2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oOiBIaWV0YW5pZW1pIEphcmtrbyBwb2ludGVkIG91dCB0aGF0CgkgIHhtbEluaXRNZW1vcnkoKSB3YXMgZGVjbGFyZWQgdHdpY2UKClN1biBEZWMgIDkgMTQ6NTk6MjMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jOiBkbyBub3QgcmVmZXJlbmNlIHN0cmR1cCgpICEKCSogY29uZmlndXJlLmluIGxpYnhtbC0yLjAucGMuaW46IHRyeWluZyB0byBmaXggdGhlIGxpYnMKCSAgb2YgdGhlIHZhcmlvdXMgY29uZmlnIGV4dHJhY3Rpb24gbW9kdWxlcwoKRnJpIERlYyAgNyAxNToyMTozMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gOiBwcmVwYXJpbmcgMi40LjEyCgkqIGRvYy8qIDogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoKRnJpIERlYyAgNyAxMjozMjowMCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYzogY2xvc2VkIGJ1ZyAjNjYxNTkKCSogdGVzdFVSSS5jOiBhZGRlZCAtLWVzY2FwZSBvcHRpb24KCSogY29uZmlndXJlLmluOiBzb21lIGNsZWFudXAgZm9yIHhtbDItY29uZmlnIC0tY2ZsYWdzCgpUaHUgRGVjICA2IDE1OjMxOjMwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYyB0ZXN0VGhyZWFkcy5jOiByZW1vdmVkIHNvbWUgbWlzcGxhY2VkIGluY2x1ZGVzCgkgIG9mIHhtbHZlcnNpb24uaAoKVGh1IERlYyAgNiAwOTowNjowOCBFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0aHJlYWRzLmM6IHBhdGNoIGZyb20gR2FyeSBQZW5uaW5ndG9uIGZpeGluZyBhIHBvc3NpYmxlCgkgIHByb2JsZW0gYXQgaW5pdGlhbGl6YXRpb24gdGltZS4KCldlZCBEZWMgIDUgMTM6MDE6MzcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGxpYnhtbC5oIHBhcnNlci5jIHRlc3RUaHJlYWRzLmMgbWFjb3MvOiBpbnRlZ3JhdGVkCgkgIEVyaWMgTGF2aWduZSBjb250cmlidXRpb24gdG8gYnVpbGQgbGlieG1sMiBvbiBNYWNPUyB1c2luZwoJICBDb2RlV2Fycmlvci4KClR1ZSBEZWMgIDQgMTQ6MTM6NDQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhcHBsaWVkIEdlZXJ0IEtsb29zdGVybWFuJ3MgcGF0Y2ggdG8gZml4CgkgIC0tcmVwZWF0IC0tdGltaW5nIG91dHB1dAoKVGh1IE5vdiAyOSAxNzoxMDoyMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogUm9iaW4gQmVyam9uIDxyb2JpbkBrbm93c2NhcGUuY29tPiBmb3VuZCBhIGNhc2UKCSAgd2hlcmUgbm9uLXdlbGxmb3JtZWQgWE1MIGRlY2xhcmFjdGlvbnMgd2VyZSBub3QgZGV0ZWN0ZWQuCgpXZWQgTm92IDI4IDE1OjQxOjQwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwb2ludGVyLmM6IGZpeGVkIGEgY29tcGlsYXRpb24gYnVnIHBvaW50ZWQgYnkgRGFubnkgSmFtc2h5CgpXZWQgTm92IDI4IDEwOjA5OjUxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGFzIHJvYmVydCBwb2ludGVkIGFnYWluLCB4bWxJbnB1dENhbGxiYWNrSW5pdGlhbGl6ZWQKCSAgZ2V0cyByZXNldCBieSB4bWxDbGVhbnVwSW5wdXRDYWxsYmFja3MoKSBhbmQgdGhpcyBtYWtlcyB0aGUKCSAgZnVuY3Rpb24gdXNlbGVzcy4gU2FtZSBmb3Igb3V0cHV0LgoKVHVlIE5vdiAyNyAxNzoyMjozNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiByb2JlcnQgcG9pbnRlZCBvdXQgYSBsb29wIGVycm9yIGluIGNhbGxiYWNrIGNsZWFudXBzCgpNb24gTm92IDI2IDE2OjU2OjAwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYyBkZWJ1Z1hNTC5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaCBpbmNsdWRlL2xpYnhtbC9kZWJ1Z1hNTC5oOgoJICBtb3ZlZCB4bWxHZXRMaW5lTm8oKSBhbmQgeG1sR2V0Tm9kZVBhdGgoKSBpbnRvIHRoZSBtYWluIHRyZWUgbW9kdWxlLAoJICB0aGV5IGFyZSBub3QgcmVhbGx5IHRpZWQgdG8gZGVidWdnaW5nCgpNb24gTm92IDI2IDExOjMxOjM2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcHJlcGFyaW5nIDIuNC4xMQoJKiB4bWxsaW50LmM6IGJldHRlciAtLWNhdGFsb2dzIGRlc2NyaXB0aW9uCgpTdW4gTm92IDI1IDExOjM0OjI0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4ZWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMgaW4geG1sU2V0UHJvcCgpCgpUaHUgTm92IDIyIDE5OjE5OjEwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmMgdHJlZS5jIHhtbElPLmMgeG1sbWVtb3J5LmM6IHNvbWUgY2xlYW51cHMgd2hlbiBjaGFzaW5nCgkgIHVuYXBwcm9wcmlhdGUgc3Rkb3V0IG91dHB1dC4KClRodSBOb3YgMjIgMTM6NTg6MTQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBGaXhlZCBhIGNvdXBsZSBvZiBtYWNybyBlcnJvcnMgcG9pbnRlZCBvdXQKCSAgYnkgRGVuaXMgQmV1cml2ZSwgY2xvc2VzICM2NTExMQoKVHVlIE5vdiAyMCAxMDozNDowMSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBpbiBjYXNlIG9mIGNvbnRlbnQgbW9kZWwgdmFsaWRpdHkgZXJyb3IsIGRvbid0CgkgIHByaW50IGl0IGlmIHZhbGlkaXR5IHdhcm5pbmdzIHdlcmUgbm90IHJlcXVlc3RlZC4KClR1ZSBOb3YgMjAgMDk6MzA6MDIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2Z0cC5jOiBhcHBsaWVkIGEgY291cGxlIG9mIHBhdGNoZXMgZnJvbSBCcmlhbiBEIFJpcGxleS4KCSogcGFyc2VySW50ZXJuYWxzLmM6IHJlbW92ZWQgdGhlIGxhc3QgZXhpdCgpIGNhbGwuIFByaW50IGFuCgkgIHVubWFza2FibGUgZXJyb3Igb24gc3RkZXJyIGluc3RlYWQgKGxpYnJhcnkgbWlzbWF0Y2ggZGV0ZWN0aW9uKQoKU2F0IE5vdiAxNyAxNzoxNjo1MSBNU1QgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGxpbnQueG1sLCBkb2MveG1sbGludC4xIC0gdXBkYXRlIHhtbGxpbnQgbWFuIHBhZ2Ugd2l0aAoJc2hlbGwgaW5zdHJ1Y3Rpb25zIGZyb20gSGVpa28gUnVwcAoKVGh1IE5vdiAxNSAxNDo1Mzo0MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IHVzZSB0aGUgVVJMIG5vdGF0aW9uIGZpbGU6Ly8gZm9yIGRlZmF1bHQgY2F0YWxvZyBwYXRocwoKV2VkIE5vdiAxNCAxNjowMzowMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGJldHRlciBjb21tZW50cyBmb3IgX3ByaXZhdGUgZmllbGRzCgkqIHRyZWUuYzogcmVtb3ZlZCBhIHByb2JsZW0gd2hlbiBjb3B5aW5nIGFuIGVudGl0eSByZWZlcmVuY2UuCgpUdWUgTm92IDEzIDE2OjIzOjA0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZtcy8qOiB1cGRhdGVkIGluc3RydWN0aW9ucyBhbmQgZGlmZnMgZnJvbSBKb2huIEEgRm90aGVyaW5naGFtCgpNb24gTm92IDEyIDIzOjQzOjIyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGF2b2lkIGFuIGluY2x1ZGUgcHJvYmxlbSBpZgoJICAjaW5jbHVkZSA8bGlieG1sL3htbGVycm9yLmg+IGhhcHBlbnMgZmlyc3QgaW4gY29kZQoJICBzZWVtcyB0byBiZSB0aGUgY2FzZSBpbiBLREUgbGlicwoKTW9uIE5vdiAxMiAyMjozMjo0MSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9kc3AvKiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbjogdXBkYXRlCgkgIGZyb20gSWdvciBmb3IgV2luZG93cwoKTW9uIE5vdiAxMiAxMDoxOTo0MSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogR2FyeSBQZW5uaW5ndG9uIHBvaW50ZWQgb3V0IGEgbWlzc2luZyBwcmVmaXgKClNhdCBOb3YgMTAgMTI6NTU6NDIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiBwcmVwYXJpbmcgMi40LjEwCgkqIGRvYy8qOiB1cGdyYWRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoKU2F0IE5vdiAxMCAxMjozMzozOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGZpeCBjb21tZW50IGluIHNjcmlwdHMgZWxlbWVudCBwYXJzaW5nLgoJKiByZXN1bHQvSFRNTC9kb2MzKjogdXBkYXRlZCB0aGUgcmVzdWx0cy4KClNhdCBOb3YgMTAgMTE6MTg6MTggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmM6IGFub3RoZXIgVVJJIGJ1ZyBmaXggIzYzMzM2LCB1c2luZyBKb2VsIFlvdW5nIHBhdGNoLgoKU2F0IE5vdiAxMCAxMTowNzoyNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jIGluY2x1ZGUvbGlieG1sL2RlYnVnWE1MLmg6IGFkZCB4bWxHZXROb2RlUGF0aCgpCgkgIGEgY2xlYW5lZCB1cCB2ZXJzaW9uIG9mIHRoZSBQd2Qgc2hlbGwgc3RyaW5nIGdlbmVyYXRpb24uCgpGcmkgTm92ICA5IDAwOjM0OjEzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiB0cnlpbmcgdG8gZml4IG5hbWVzcGFjZXMgKwoJICB2YWxpZGF0aW9uIHByb2JsZW1zIGZvciBnb29kLCBjbG9zaW5nICM2MzYxOSBpbiB0aGUgcHJvY2VzcwoJKiByZXN1bHQvdmFsaWQvZGlhLnhtbCB0ZXN0L3ZhbGlkL2RpYS54bWw6IHRoZSBEaWEgdGVzdCB3YXMKCSAgd3JvbmcgaW4gdGhpcyByZXNwZWN0LCBmaXhlZCBpdC4KClRodSBOb3YgIDggMTg6MzE6NDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBNb3J1cyBXYWx0ZXIgcGF0Y2ggdG8gYWxsb3cgLS1mb3JtYXQgYW5kIC0tZW5jb2RlCgpUaHUgTm92ICA4IDE0OjUyOjE4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IFN0ZWZhbiBLb3N0IHByb3ZpZGVkIGFuIGhlbHAgY29tbWFuZCBmb3IgdGhlIHNoZWxsCgpXZWQgTm92ICA3IDE0OjMyOjU1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IEhlaWtvIFJ1cHAgcG9pbnRlZCB0aGF0IHRoZSBzaGVsbCB3b3VsZCBjcmFzaAoJICBvbiBlbXB0eSBub2Rlc2V0cyByZXR1cm5zLgoKV2VkIE5vdiAgNyAxMzo1MjozNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogV2VpcWkgR2FvIHBvaW50ZWQgb3V0IHRoYXQgeG1sY2F0YWxvZwoJICBtaWdoIG5lZWQgdGhlIGhpc3RvcnkgbGlicmFyaWVzCgpUdWUgTm92ICA2IDIzOjQ5OjA5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyB0ZXN0L0hUTUwvbHQuaHRtbCByZXN1bHQvSFRNTC9sdC5odG1sKjoKCSAgaGFuZGxlIHRoZSBjYXNlIG9mIDwgaW4gcXVvdGVkIGF0dHJpYnV0ZXMsIEJhc3RpYW4gS2xlaW5laWRhbQoKVHVlIE5vdiAgNiAxNjoyMTozMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHJlbGVhc2luZyAyLjQuOQoJICBmaXhpbmcgY2F0YWxvZyBicmVha2FnZXMKCSogTWFrZWZpbGUuYW0gY2F0YWxvZy5jIHJlc3VsdC9jYXRhbG9ncy9jYXRhbCAKCSAgcmVzdWx0L2NhdGFsb2dzL215Y2F0YWxvZy4qIHRlc3QvY2F0YWxvZ3MvY2F0YWwqOgoJICBmaXhlZCBtb3JlIHByb2JsZW1zIGluIGNhdGFsb2cgc3VwcG9ydCwgYWRkZWQgbW9yZSByZWdyZXNzaW9uIHRlc3RzCgkgIGZvciBib3RoIFhNTCBhbmQgU0dNTCBjYXRhbG9nIGhhbmRsaW5nCgpNb24gTm92ICA1IDIwOjI2OjQxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IGFwcGxpZWQgYW4gaW1wcm92ZW1lbnQgdG8geG1sR2V0TGluZU5vKCkgZnJvbQoJICBLZWl0aCBJc2RhbGUKCk1vbiBOb3YgIDUgMTU6MjA6MTYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiBkb2hoaGggWE1MIGNhdGFsb2cgYWRkIGFuZCByZW1vdmUgb3BzIHdlcmUgYnJva2VuIHRvby4KCSAgU2lkZSBlZmZlY3Qgb2YgdGhlIHByb2dyZXNzaXZlIGNhdGFsb2cgbG9hZGluZwoKTW9uIE5vdiAgNSAxMjo0MDo1NCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogY29uZmV4ZWNkaXIgYW5kIGNvbmZleGVjX0RBVEEgd2VyZSBkZWZpbmVkIHR3aWNlCgkgIHBvaW50ZWQgb3V0IGJ5IEthcmwgRWljaHdhbGRlcgoKU3VuIE5vdiAgNCAyMzoxODozNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxjYXRhbG9nLmM6IGF2b2lkIHVubGluaygpIGFuZCB1c2UgcmVtb3ZlKCkgaW5zdGVhZC4KClN1biBOb3YgIDQgMjM6MTI6MzggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW46IGNsZWFudXAKCSogaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHVwZGF0ZWQgd2l0aCAyLjQuOAoKU3VuIE5vdiAgNCAyMToxNzoyNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jIGdsb2JhbC5kYXRhIGdsb2JhbHMuYyB0ZXN0VGhyZWFkcy5jOiBmaXggYnVnICM2Mzc1MgoJICBvZiBjb21waWxpbmcgbGlieG1sIHdpdGggYSBub24gc3RhbmRhcmQgc2V0IG9mIG9wdGlvbnMKClN1biBOb3YgIDQgMTM6MTE6NDEgTVNUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldAoKCSogZG9jL3htbGxpbnQueG1sLCB4bWxsaW50LjEgLSB1cGRhdGluZyB4bWxsaW50IG1hbiBwYWdlIHRvCglkb2N1bWVudCAtLXNnbWwgb3B0aW9uLCBmaXhpbmcgZ25vbWUgYnVnemlsbGEgIzYzMzgyCgpTdW4gTm92ICA0IDIwOjU2OjUzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaCBjYXRhbG9nLmM6IEZpeGVkIFNHTUwgY2F0YWxvZ3MKCSAgYnJlYWthZ2Ugb2YgMi40LjcsIGFkZGVkIGEgY291cGxlIG9mIHJlYWxseSBuZWVkZWQgQVBJcwoJICBsaWtlIHhtbENhdGFsb2dJc0VtcHR5KCkgYW5kIHhtbE5ld0NhdGFsb2coKQoJKiB4bWxjYXRhbG9nLmM6IHVwZGF0ZWQgLS1zZ21sIC0tbm9vdXQgdG8gYmUgYSBzdWl0YWJsZSByZXBsYWNlbWVudAoJICBmb3IgaW5zdGFsbC1jYXRhbG9nCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC44CgpUaHUgTm92ICAxIDE1OjI5OjMxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgdHJlZS5jIGluY2x1ZGUvbGlieG1sL0hUTUx0cmVlLmgKCSAgaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IG1vcmUgaW5jbHVkZQoJICBjbGVhbnVwcywgZXhwb3J0IGNsZWFubHkgb25lIGh0bWwgb3V0cHV0ICsgZm9ybWF0IGZ1bmN0aW9uLgoKVGh1IE5vdiAgMSAxNDoxMjoxMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogcmVtb3ZlZCBpbml0R2VuZXJpY0Vycm9yRGVmYXVsdEZ1bmMgY2FsbCBmcm9tCgkgIHhtbEluaXRQYXJzZXIoKSBzaW5jZSBpdCBjb3VsZCBkZXN0cm95IHByZXZpb3VzIGNhbGxzIHRvCgkgIHhzbHRTZXRHZW5lcmljRXJyb3JGdW5jKCkgZWZmZWN0cwoKVGh1IE5vdiAgMSAwOTozNzoxMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jIGluY2x1ZGUvbGlieG1sL2RlYnVnWE1MLmg6IGJvb2wgY2FuIGJlIGEgcmVzZXJ2ZWQKCSAga2V5d29yZC4KCldlZCBPY3QgMzEgMTg6NTA6MDggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGNsZWFudXAKCSogdGhyZWFkcy5jOiBjbGVhbnVwIHRvbwoJKiB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IGFkZGVkIHhtbE5vTmV0RXh0ZXJuYWxFbnRpdHlMb2FkZXIoKQoJICBmcm9tIHhzbHRwcm9jCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogdHJ5aW5nIHRvIGJyZWFrIGEKCSAgZGVwZW5kZW5jeSBsb29wLgoKVHVlIE9jdCAzMCAxODozODo1MyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IEp1c3RpbiBGbGV0Y2hlciBwb2ludGVkIG91dCB0aGF0IHhtbFBhcnNlWE1MQ2F0YWxvZwoJICB3YXMgbm90IHVzZWQgYW55bW9yZSAhCgpUdWUgT2N0IDMwIDEzOjMzOjEzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC43CgkqIE1ha2VmaWxlLmFtIGRvYy9NYWtlZmlsZS5hbTogc3dpdGNoZWQgdG8gdGhlIGxhdGVzdCB4bWxsaW50CgkgIG1hbnVhbCBwYWdlIGZyb20gSm9obgoJKiBkb2MvKjogdXBkYXRlZCB0aGUgZG9jIGFuZCByZWJ1aWx0IHRoZSBnZW5lcmF0ZWQgcGFnZXMKClR1ZSBPY3QgMzAgMTE6MzE6MTkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogY2xvc2luZyBidWcgIzYyNzExLCB0aGUgbGlicmFyeSBzaG91bGQgbmV2ZXIKCSAgY2xvc2Ugc3RkaW4gb3Igc3Rkb3V0LgoKVHVlIE9jdCAzMCAxMDo0NjoxMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYzogc2Vjb25kIHBhc3MgYXQgZml4aW5nICM2MzMzNiwgdXNpbmcgSm9lbCBZb3VuZwoJICBmaW5hbCBwYXRjaC4gbG9va3Mgb2theS4KClR1ZSBPY3QgMzAgMDA6NTY6MDUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmMgaW5jbHVkZS9saWJ4bWwvdXJpLmg6IHRyeWluZyB0byBjbGVhciAjNjMzMzYKCSAgYWxsb3dpbmcgdGhlIGVzY2FwaW5nIHJvdXRpbmUgdG8gcGFyc2UgdW5jb25mb3JtYW50CgkgIFVSSS1SZWZlcmVuY2VzLgoKTW9uIE9jdCAyOSAxOTowOTo0NiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2bXMvcmVhZG1lLnZtcyB2bXMvYnVpbGRfbGlieG1sLmNvbSBuYW5vZnRwLmMgCgkgIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjogYSBmZXcgVk1TIHVwZGF0ZXMgZnJvbQoJICBKb2huIEEgRm90aGVyaW5naGFtCgkqIGluY2x1ZGUvbGlieG1sL3htbElPLmggeG1sSU8uYzogYWRkZWQgeG1sQ2xlYW51cElucHV0Q2FsbGJhY2tzKCkKCSAgYW5kIHhtbENsZWFudXBPdXRwdXRDYWxsYmFja3MoKSBmb3IgdGhlIFBlcmwgYmluZGluZyBwZW9wbGUuCgpNb24gT2N0IDI5IDEyOjQ0OjE3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIGdsb2JhbHMuYyBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jIGVycm9yLmM6CgkgIGFwcGx5IGZpeGVzIHRvIGNsb3NlICM2MzI3MSBhbmQgYXZvaWQgc2VnZmF1bHRzIHdoZW4KCSAgdGhlIGVycm9yIHJvdXRpbmUgZ2V0cyBjYWxsYmVkIGJlZm9yZSB4bWxJbml0UGFyc2VyKCkKCSAgZ2V0IGNhbGxlZC4KCSogbmFub2Z0cC5jIGVycm9yLmM6IEFwcGxpZWQgcGF0Y2hlcyBmcm9tIEp1c3RpbiBGbGV0Y2hlcgoJICBjb3JyZWN0aW5nIHNvbWUgeG1sR2VuZXJpY0Vycm9yIG1pc3VzZXMuCgpTYXQgT2N0IDI3IDE0OjA0OjQ1IE1EVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKmRvYy94bWxsaW50LnhtbCwgZG9jL3htbGxpbnQuMQoJTmV3IGFuZCBpbXByb3ZlZCBtYW4gcGFnZSBmb3IgeG1sbGludCAtIC54bWwgaXMgdGhlIG9yaWdpbmFsLCAuMQoJaXMgdGhlIGdlbmVyYXRlZCBtYW4gcGFnZQoKV2VkIE9jdCAyNCAxNDozNDoyNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL3NpdGUueHNsIGRvYy8qLmh0bWwgZG9jL01ha2VmaWxlLmFtOiBub3cgYXV0b2dlbmVyYXRlCgkgIHRoZSB3ZWIgc2l0ZSBmcm9tIHRoZSBtYWluIEhUTUwgZG9jdW1lbnQuCgpUdWUgT2N0IDIzIDE0OjMyOjA0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYW4gZXJyb25lb3VzIHZhbGlkYXRpb24gYnVnIHdoZW4gUEUgcmVmcwoJICBvY2N1cnMgaW4gZXh0ZXJuYWwgcGFyc2VkIGVudGl0aWVzIHJlZmVyZW5jZWQgZnJvbSB0aGUKCSAgaW50ZXJuYWxzIHN1YnNldAoJKiB0ZXN0L3ZhbGlkL2luZGV4LnhtbCB0ZXN0L3ZhbGlkL2R0ZHMvbml0Zi0yLTUuZHRkCgkgIHRlc3QvdmFsaWQvZHRkcy9OZXdzTUx2MS4wLmR0ZCByZXN1bHQvdmFsaWQvaW5kZXgueG1sKjoKCSAgYWRkZWQgdGhlIGFzc29jaWF0ZWQgdGVzdGNhc2UsIGl0J3MgYSBuaWNlIG9uZS4KCSogSFRNTHBhcnNlci5jOiBnZW5lcmF0ZSB0aGUgRFREIG5vZGUgYXMgSFRNTCBzdGlsbCAuLi4KCSogSFRNTHRyZWUuYzogZml4ZWQgZXJyb3JzIGluIFNldC9HZXRNZXRhRW5jb2RpbmcgCgpNb24gT2N0IDIyIDE0OjIwOjE3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGEgYnVnIGluIGh0bWxOZXdEb2MoKQoKTW9uIE9jdCAyMiAxMTozMjozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdC90aHJlYWRzLyo6IGFkZGVkIGVudGl0aWVzIHRlc3RpbmcgdG8gdGhlIFRocmVhZCB0ZXN0CgkqIHRlc3RUaHJlYWRzLmM6IG1ha2UgdGhlIHRlc3QgcmVhc29uYWJsZQoJKiBET0NCcGFyc2VyLmM6IGZpeCB0aGUgRFREIHB1YmxpYyBhbmQgc3lzdGVtIElECgkqIHhtbGxpbnQuYzogYWRkZWQgLS1zZ21sIGZvciBTR01MIERvY0Jvb2sgaW1wb3J0aW5nCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBEb2NidGVzdHMgdGFyZ2V0CgpGcmkgT2N0IDE5IDExOjQ3OjEzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vZnRwLmM6IHVzZSBvbmx5ICJhbm9ueW1vdXNAIiBzdHJpbmcgZm9yIGFub255bW91cyBwYXNzd2RzCgkqIHRlc3RUaHJlYWRzLmM6IHJlbW92ZWQgYm9ndXMgaW5jbHVkZQoKVGh1IE9jdCAxOCAxNjo1NjoyMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgdmFsaWQuYyByZXN1bHQvdmFsaWQvcnNzLnhtbCByZXN1bHQvdmFsaWQvcnNzLnhtbC5lcnI6CgkgIGZpeGVkIGEgdmVyeSBzZXJpb3VzIChsb29waW5nKSB2YWxpZGF0aW9uIGJ1ZwoKV2VkIE9jdCAxNyAxMTo1NjoyNSBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggaW5jbHVkZS9saWJ4bWwvdGhyZWFkcy5oIHRocmVhZHMuYwoJICB0ZXN0VGhyZWFkcy5jOiBmYXIgbW9yZSB0ZXN0aW5nLCBjbGVhbmluZyB1cCBidWdzCgkqICouYyA6IG1ha2Ugc3VyZSBnbG9iYWxzLmggaXMgYWx3YXlzIGluY2x1ZGVkLgoKV2VkIE9jdCAxNyAxNzo0MTo0MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiB0cnkgdG8gZ2V0IHJpZCBvZiBwYXJzZXIgbG9vcHMgZm9yIGdvb2QuCgpXZWQgT2N0IDE3IDEzOjI5OjAyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkIHNvbWUgYnVncyBpbiBDRkxBR1MgcGFzc2luZy4KCSogdGVzdC90aHJlYWRzIE1ha2VmaWxlLmFtIHRlc3RUaHJlYWRzLmM6IGFkZGVkIGEgc3BlY2lmaWMKCSAgdGhyZWFkZWQgdGVzdCBjYXNlIChyZWFsbHkgbmFzdHksIGd1YXJhbnRlZWQpLgoKVHVlIE9jdCAxNiAyMzowMTo0OSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiBzZXJpb3VzIGNsZWFudXAgb24gdGhlIG1hbmFnZW1lbnQgb2YgdGhlCgkgIFhNTCBjYXRhbG9nIHRyZWUsIG1vcmUgdGVzdHMgZG9uZSwgZXNwZWNpYWxseSB3aXRoCgkgIHRoZSBjYXRhbG9nIFBJLgoKVHVlIE9jdCAxNiAwODo0Mzo0MyBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IGF2b2lkIGEgcHJvYmxlbSBpbiBjYXRhbG9nIGNsZWFudXAgb24gU01QIGlmCgkgIGNhdGFsb2dzIHdlcmUgbm90IGluaXRpYWxpemVkLgoKVHVlIE9jdCAxNiAxNDozMzoxOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jIHhwYXRoLmM6IHRyeWluZyB0byBjbGVhbnVwIHRoZSBub3QgdGhyZWFkIHNhZmUKCSAgcGFydHMgb2YgdGhlIGxpYnJhcnkuCgpNb24gT2N0IDE1IDE0OjMwOjExIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggY29uZmlndXJlLmluIGdsb2JhbC5kYXRhOiBtYWtlCgkgIHRoZSBhbGxvY2F0aW9uIGJlIHBlci10aHJlYWQgYSBjb25maWd1cmUgb3B0aW9uCgkqIGVuY29kaW5nLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IGZpeGVkIGNvbXBpbGF0aW9uCgkgIGVycm9ycwoKTW9uIE9jdCAxNSAxMjo0NTowMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IE5vcm0gcmVwb3J0ZWQgdGhhdCBhIGZldyBsaW5lcwoJICBhZGRlZCB3ZXJlIGJyZWFraW5nIGxpYnhzbHQgY29tcGlsZSwgcmVtb3ZlZCB0aGVtIGZvciBub3cKClN1biBPY3QgMTQgMDU6NTU6MDEgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdGhyZWFkcy5jOiBkZWJ1Z2dlZCBhbmQgZml4ZWQKCSAgaW5pdGlhbGl6YXRpb24gcHJvYmxlbXMgd2hpY2ggd2VyZSBnaXZpbmcgdHJvdWJsZXMgb24gU01QCgkgIGJveGVzLgoKU2F0IE9jdCAxMyAxNjoxNzoxMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW06IG1pc3NpbmcgZ2xvYmFscy5oCgpTYXQgT2N0IDEzIDE0OjE1OjAwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmM6IGFkZGVkIGEgY291cGxlIG9mIHN0YW5kYXJkIGluY2x1ZGVzLgoKU2F0IE9jdCAxMyAxMTowODoyMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvU0FYLmggaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oCgkgIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIGluY2x1ZGUvbGlieG1sL3RyZWUuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oIEhUTUxwYXJzZXIuYyBTQVguYyBlcnJvci5jIGdsb2JhbHMuYwoJICBuYW5vZnRwLmMgbmFub2h0dHAuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0ZXN0RG9jYm9vay5jCgkgIHRlc3RIVE1MLmMgdGVzdFNBWC5jIHRyZWUuYyB1cmkuYyB4bGluay5jIHhtbG1lbW9yeS5jOgoJICBBcHBsaWVkIHRoZSBsYXN0IHBhdGNoZXMgZnJvbSBHYXJ5LCBjbGVhbnVwLCBhY3RpdmF0ZWQgdGhyZWFkaW5nCgkgIGFsbCB1c2VyIGFjY2Vzc2libGUgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgbm93IGhhbmRsZWQgaW4gZ2xvYmFscy5bY2hdCgkgIFN0aWxsIGEgYml0IHJvdWdodCBidXQgbWFrZSB0ZXN0cyBwYXNzZXMgd2l0aCBlaXRoZXIgCgkgIC0td2l0aC10aHJlYWRzIGRlZmluZWQgYXQgY29uZmlndXJlIHRpbWUgb3Igbm90LgoJKiBNYWtlZmlsZS5hbSBleGFtcGxlL01ha2VmaWxlLmFtOiBhZGRlZCBnbG9iYWxzLltjaF0gYW5kIHRocmVhZHMKCSAgbGlua2luZyBvcHRpb25zCgpGcmkgT2N0IDEyIDE5OjI1OjU1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbQoJICBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggZ2xvYmFscy5jICBpbmNsdWRlL2xpYnhtbC90aHJlYWRzLmgKCSAgdGhyZWFkcy5jIGJ1aWxkX2dsb2IucHkgZ2xvYmFsLmRhdGEgeG1sY2F0YWxvZy5jIGFjY29uZmlnLmgKCSAgY29uZmlndXJlLmluOiBzdGFydGVkIGludGVncmF0aW5nIHRoZSBjb3JlIG9mIHRoZSB0aHJlYWQgc3VwcG9ydAoJICBub3QgYWN0aXZhdGVkIHlldCBidXQgaGFsZiBpbnRlZ3JhdGVkLiBUaGUgY29kZSBzaG91bGQgc3RpbGwKCSAgY29tcGlsZSBhbmQgd29yayBhbnl3YXkuCgpGcmkgT2N0IDEyIDAwOjUzOjAzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIGNhdGFsb2cuYyBkZWJ1Z1hNTC5jIGVudGl0aWVzLmMgbmFub2Z0cC5jCgkgIHBhcnNlci5jIHZhbGlkLmMgeG1sbWVtb3J5LmMgeHBhdGguYyB4cG9pbnRlci5jOiBzdGFydGVkCgkgIGludGVncmF0aW5nIHRoZSBub24tY29udHJvdmVyc2lhbCBwYXJ0cyBvZiBHYXJ5IFBlbm5pbmd0b24KCSAgbXVsdGl0aHJlYWQgcGF0Y2hlcwoJKiBjYXRhbG9nLmM6IGNvcnJlY3RlZCBhIHNtYWxsIGJ1ZyBpbnRyb2R1Y2VkCgpUaHUgT2N0IDExIDIwOjU4OjE1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmMgaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oOiB2ZXJ5IHNlcmlvdXMgY2xlYW51cCwKCSAgaXNvbGF0aW5nIHVucG9ydGFibGUgY29kZSBhbmQgYXMgbXVjaCBhcyBwb3NzaWJsZSB0aGUgYWNjZXNzZXMKCSAgdG8gdGhlIGdsb2JhbCBzaGFyZWQgY2F0YWxvZy4gTWF5IG5lZWQgbW9yZSB0ZXN0aW5nICEKClRodSBPY3QgMTEgMTE6MTA6MzEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2RlYnVnWE1MLmggZGVidWdYTUwuYyB0cmVlLmM6IGludGVncmF0aW5nCgkgIEtlaXRoIElzZGFsZSBwYXRjaGVzIGZvciB0aGUgWFNMVCBkZWJ1Z2dlciBpbnRlcmZhY2VzLiBTb21lCgkgIGNsZWFudXAKClRodSBPY3QgMTEgMDg6NDQ6MDEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLm1pbmd3OiB1cGRhdGUgZnJvbSBUb2JpYXMgUGV0ZXJzIGZvciAyLjQuNQoJKiBET0NCcGFyc2VyLmM6IGdlbmVyYXRlIGxpbmUgbnViZXJzIGluIGVsZW1lbnRzCgpXZWQgT2N0IDEwIDExOjM1OjQ1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuNiByZWxlYXNlCgkqIGRvYy94bWwuaHRtbCBkb2MvaHRtbC8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgkqIGluY2x1ZGUvbGlieG1sLyouaCAqLmM6IGZpeGVkIGEgbnVtYmVyIG9mIHRlaC90aGUgd2lkaHQvd2lkdGggdHlwb3MKCk1vbiBPY3QgIDggMjA6Mzg6MjcgTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxjYXRhbG9nX21hbi54bWwsIHhtbGNhdGFsb2cuMSwgeG1sY2F0YWxvZ19tYW4uaHRtbAoJYWRkaW5nIGRvY3VtZW50YXRpb24gZm9yIERWJ3Mgc3VwZXJjYXRhbG9nIHN1cHBvcnQKCk1vbiBPY3QgIDggMTc6MDA6MTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaCBjYXRhbG9nLmMgeG1sY2F0YWxvZy5jOiBhZGRpbmcgU0dNTAoJICBzdXBlciBjYXRhbG9nIHN1cHBvcnQgYWRkaW5nIG9uZSBBUEkgYW5kIG9uZSBmbGFnIC0tc2dtbCB0bwoJICB4bWxjYXRhbG9nCgpTdW4gT2N0ICA3IDE2OjQzOjU3IE1EVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sY2F0YWxvZ19tYW4ueG1sLCB4bWxjYXRhbG9nLjEKCU9uZSBtb3JlIGNyYWNrIGF0CglodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU0MzkyIAoKU3VuIE9jdCAgNyAxODo0NzowMiBDRVNUIDIwMDEgVGhvbWFzIEJyb3llciA8dGJyb3llckBsdGd0Lm5ldD4KCgkqIHhwYXRoLmM6IGltcGxlbWVudGVkIHhtbFhQYXRoT2JqZWN0Q29weSBmb3IgZXh0ZXJuYWwgb2JqZWN0cwoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOiBhZGRlZCB4bWxYUGF0aFN0YWNrSXNFeHRlcm5hbAoKU2F0IE9jdCAgNiAxNjoyNTo1MiBNRFQgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSpkb2MveG1sY2F0YWxvZ19tYW4ueG1sLCB4bWxjYXRhbG9nX21hbi5odG1sLCB4bWxjYXRhbG9nLjEKCWZpbmlzaGluZyB1cCBmaXggdG8KCWh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTQzOTIsIG1ha2luZwoJdGhlIHhtbGNhdGFsb2cgbWFuIHBhZ2UgZGlzcGxheSBtb3JlIGVsZWdhbnRseQoKU2F0IE9jdCAgNiAxNToyNzoxMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBjbG9zaW5nIGJ1ZyAjNjE4MzIKCSogSFRNTHBhcnNlci5jOiByZW1vdmVkIGEgd2FybmluZwoKU2F0IE9jdCAgNiAxNTowNzoxNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4aW5nICM2MTY3MyBwYXJ0IEksIGRvIG5vdCBsb29zZSBkb2MgaW5mb3JtYXRpb24KCSAgd2hlbiBjb3B5aW5nIHJlc3VsdCB2YWx1ZSB0cmVlcy4KClNhdCBPY3QgIDYgMTE6NTg6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHRyeWluZyB0byBoYXJkZW4gdGhlIFhQYXRoIGludGVycHJldGVyCgpGcmkgT2N0ICA1IDIwOjM3OjUxIE1EVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sY2F0YWxvZy4xIHVwZGF0ZWQgdXNpbmcgYSBuZXcgc3R5bGVzaGVldCB0byBhZGRyZXNzLCBpbgoJcGFydCwgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NDM5MgoKRnJpIE9jdCAgNSAyMzozNTowMCBIS1QgMjAwMSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIEhUTUxwYXJzZXI6IHJlcGFpcmVkIGFub3RoZXIgbG9vcCBwcm9ibGVtCgpGcmkgT2N0ICA1IDExOjE2OjIxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYzogYXBwbGllZCBmaXggZnJvbSBNYXRoaWFzIEhhc3NlbG1hbm4gYWJvdXQgYSBidWcgaW4gVVJJCgkgIHBhcnNpbmcuCgkqIHhwYXRoLmM6IGZpeCBidWcgIzYxMjkxIHRoZSBkZWZhdWx0IFhNTCBuYW1lc3BhY2Ugbm9kZSBpcwoJICBtaXNzaW5nIGZyb20gdGhlIG5hbWVzcGFjZSBheGlzLgoJKiB0cmVlLmM6IHJlZnVzZSB0byBjcmVhdGUgbmFtZXNwYWNlcyBub2RlcyB3aXRoIHByZWZpeCAieG1sIgoKVGh1IE9jdCAgNCAxNjo0Nzo0NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IG91Y2ggYSBub24tZGVmaW5lZCBuYW1lc3BhY2UgY291bGQgbGVhZCB0byBhIGNyYXNoLAoJICBmaXhlZCAjNjEyMTUKClRodSBPY3QgIDQgMTY6MjQ6MjYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBjbG9zZWQgYnVnICM2MTA1NAoKV2VkIE9jdCAgMyAxNToxOTowNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW06IGNsb3NpbmcgIzYwNzA4CgpUdWUgT2N0ICAyIDE1OjUyOjA1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIHBhcnNlci5jOgoJICBhZGRpbmcgeG1sU0FYUGFyc2VGaWxlV2l0aERhdGEgZm9sbG93aW5nIE1hcmNvIFN0aXBlayBzdWdnZXN0aW9uCgpUdWUgT2N0ICAyIDExOjI3OjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBjbG9zZSBidWcgIzYxNTUwIHdoZW4geG1sOiB3YXNuJ3QgY29uc2lkZXJlZCBhIG5hbWVzcGFjZQoKVHVlIE9jdCAgMiAxMToxODozMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYzogSWdvciBabGF0a292aWMgcGF0Y2hlcwoJKiBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jIHBhcnNlci5jOiBmaXhlZCB0eXBvcwoKTW9uIE9jdCAgMSAwOTozNDo1MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiBKdXN0aW4gRmxldGNoZXIgcHJvdmlkZWQgY2xlYXVwIGNvZGUgaW4gY2FzZQoJICBIQVZFX1NUQVQgaXMgbm90IGRlZmluZWQKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBJZ29yIFpsYXRrb3ZpYyBzdWdnZXN0ZWQgdG8gaGF2ZQoJICBIQVZFX1NUQVQgZGVmaW5lZCB0aGVyZQoKU2F0IFNlcCAyOSAwMDoxNTowMCBIS1QgMjAwMSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGNhdGFsb2cuYyAtIGZpeGVkIHR5cGluZyBlcnJvciByZXBvcnRlZCBieSBNLiBCYXJyb3MKClN1biBTZXAgMjMgMjE6MDI6MzkgTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIHhtbGxpbnQuYyAtIGZpeGluZyB0eXBvCgpTYXQgU2VwIDIyIDEwOjAwOjAwIEhLVCAyMDAxIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogSFRNTHBhcnNlci5jOiBzbWFsbCBlbmhhbmNlbWVudCB0byBwcmV2ZW50IGxvb3Agb24KCSAgdW5yZWNvZ25pemFibGUgZGF0YQoKRnJpIFNlcCAyMSAxMTo0NTo1MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IGFwcGx5aW5nIHBhdGNoIGZyb20gYnVnICM2MDc1NyB0aGlzCgkgIHNob3VsZCBjbG9zZSBpdAoKVGh1IFNlcCAyMCAxNTo1NDoyOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jIHhtbGNhdGFsb2cuYzogcmVtb3ZlZCBhIGNvdXBsZSBvZiB3YXJuaW5nCgkqIHhwYXRoLmM6IHRyeSB0byBzb2x2ZSB0aGUgbGlua2luZyBwcm9ibGVtIG9uIHBsYXRmb3JtcwoJICBuZWVkaW5nIHRyaW8gdG8gY29tcGlsZQoKV2VkIFNlcCAxOSAxMDowMTozNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IGJhY2tpbmcgdXAgbm9uLWRvY3VtZW50ZWQgY2hhbmdlcwoJICBjb21taXRlZCB3aXRob3V0IHJldmlldyBvciBhcHJvdmFsIGJ5IEplbnMgRmlua2UgPGplbnNAZ25vbWUub3JnPgoJKiBIQUNLSU5HOiBtYWRlIDEwMCUgY2xlYXIgdGhhdCBubyBjb21taXQgc2hvdWxkIGJlIGRvbmUgZGlyZWN0bHkKCk1vbiBTZXAgMTcgMTg6NTI6MzcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogSm9lIE9ydG9uIHByb3ZpZGVkIGEgcGF0Y2ggZml4aW5nIGEgcHJvYmxlbQoJICB3aGVuIGljb252IGlzIHNwZWNpZmllZCB0byBiZSBpbiBhIG5vbi1zdGFuZGFyZCBkaXJlY3RvcnkKCSAgYnV0IHdhc24ndCBleHBvcnRlZCBpbiB4bWwyLWNvbmZpZyAtLWNmbGFncwoKRnJpIFNlcCAxNCAxOTozMjo0MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBsZXQncyBzaGlwIDIuNC41IGJlZm9yZSBnZXR0aW5nIHRvbyBtdWNoCgkgIHRyb3VibGVzIHdpdGggMi40LjQgZXJyb3JzLgoKRnJpIFNlcCAxNCAxMjoyNjo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYyBlbnRpdGllcy5jOiBkbyBub3Qgb3V0cHV0IGhleGFkZWNpbWFsIGNoYXJyZWZzCgkgIHdoZW4gc2VyaWFsaXppbmcgSFRNTCBzaW5jZSBzb21lIHZlcnNpb24gb2YgTmV0c2NhcGUgY2FuJ3QKCSAgZ3JvayBpdCwgZ2VuZXJhdGUgZGVjaW1hbCBvbmVzLgoJKiByZXN1bHQvSFRNTC9kb2MzLmh0bTogb3V0cHV0IGNoYW5nZWQgZHVlIHRvIHByZXZpb3VzIHRlc3QKCSogcGFyc2VySW50ZXJuYWxzLmM6IHJlcGFpciB4bWxLZWVwQmxhbmtzRGVmYXVsdCgpIGJyb2tlbiBpbiAyLjQuNAoKVGh1IFNlcCAxMyAxMzozNDoyNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLTIuMC5wYy5pbjogZG9oaCBnZW5lcmF0ZWQgdGhlIHdyb25nIGluY2x1ZGUgcGF0aCA6LSgKCSogZG9jL01ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluOiByZS1kb2hoIGZvcmdvdCB0aGUgbmV3IG1hbnBhZ2UgOi0oCgpXZWQgU2VwIDEyIDIyOjE0OjU1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CglSZWxlYXNlZCAyLjQuNAoKCSogY29uZmlnLmguaW4gY29uZmlndXJlLmluIGxpYnhtbC5zcGVjLmluIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtCgkgIGxpYnhtbC0yLjAucGMuaW46IG1vdmVkIGluY2x1ZGVzIHRvIGluY2x1ZGVkaXIvbGlieG1sMi9saWJ4bWwsCgkgIHVwZGF0ZWQgdGhlIGNvbmZpZ3VyYXRpb24gc2NyaXB0cyBzeXN0ZW1zIGFjY29yZGluZ2x5CgpXZWQgU2VwIDEyIDIwOjQ5OjMyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyBmb3IgMi40LjQKCSogZG9jL3htbC5odG1sIGRvYy9odG1sLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKCldlZCBTZXAgMTIgMTY6NTg6MTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmM6IHRyaWVkIHRvIGluY29ycG9yYXRlIGNvbW1lbnRzCgkgIGZyb20gYnVnICM1OTIyMAoKVHVlIFNlcCAxMSAxMToyNTozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgcmVzdWx0L25vZW50L3dtbC54bWw6IGZpeGVkIGJ1ZyAjNTk5ODEgcmVsYXRlZAoJICB0byBoYW5kbGluZyBvZiAnJicgaW4gYXR0cmlidXRlcyB3aGVuIGVudGl0aWVzIGFyZSBzdWJzdGl0dWVkCgpNb24gU2VwIDEwIDIyOjE0OjQyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuaCBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4KCSAgaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmggaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmguaW46CgkgIFRyaWVkIHRvIGNsb3NlIGJ1ZyAjNjAxMzEKCk1vbiBTZXAgMTAgMjA6NDY6MDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBmaXhlZCBhIGJ1ZyBpbiB0aGUgSFRNTCBwYXJzZXIgaW50cm9kdWNlZCBTZXAgIDkKCk1vbiBTZXAgMTAgMjA6MTM6MDkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBmaXhpbmcgYnVnICM1OTk0NiBvbiB4bWxucz0iIgoKTW9uIFNlcCAxMCAxNjozOTo0MiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaCBTQVguYzogZml4aW5nIGJ1ZyA1OTczMiwgc2ltcGxlCgkgIGJ1dCBhbGxvY2F0ZXMgYSBuZXcgZXJyb3IgY29kZS4KClN1biBTZXAgIDkgMTA6MzM6MTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogSm9obiBGbGVjayBmaXhlZCB0eXBvcyBpbiB0aGUgb3B0aW9ucyBvdXRwdXQKCSogcGFyc2VyLmMgU0FYLmM6IGZpeCBpZ25vcmFibGUgd2hpdGUgc3BhY2UgU0FYIHNlbGVjdGlvbgoKU2F0IFNlcCAgOCAxMTo0Mzo1MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW50aXRpZXMuYzogU3RldmUgVW5kZXJ3b29kIGZvdW5kIHRoZSBwb3NzaWJpbGl0eSBvZiBhbgoJICBpbmluaXRlIGxvb3AgaW4gY2FzZSBvZiBlcnJvci4KCkZyaSBTZXAgIDcgMTE6MzU6MDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBOZWVkICQoSUNPTlZfTElCUykgaW4gbGlieG1sMl9sYV9MSUJBREQKCldlZCBTZXAgIDUgMTc6NDc6NDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiB3YXJuIGlmIHZlcnNpb24gaXMgbm90IDEuMCBidXQgaXQncyBub3QKCSAgc3RyaWN0bHkgc3BlYWtpbmcgYW4gZXJyb3IgYWZ0ZXIgYW5hbHl6aW5nIHRoZSBzcGVjCgpNb24gU2VwICAzIDEwOjA3OjAzIE1EVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKmRvYy9jYXRhbG9nLmh0bWwgLSBhZGQgbGluayB0byB0aGUgaHRtbCB2ZXJzaW9uIG9mIHRoZQoJbWFuIHBhZ2UsIG90aGVyIGxpbmd1aXN0aWMgY2xlYW51cHMKCk1vbiBTZXAgIDMgMDk6MTA6MDggTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxjYXRhbG9nX21hbi54bWwsIHhtbGNhdGFsb2dfbWFuLmh0bWwsIHhtbGNhdGFsb2cuMQoJYWRkaW5nIGRvY3VtZW50YXRpb24gZm9yIHhtbGNhdGFsb2cuIE5vdGU6IHhtbGNhdGFsb2cuMSwgdGhlIG1hbgoJZmlsZSwgaGFzIG5vdCB5ZXQgYmVlbiBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuCgpTYXQgU2VwICAxIDE4OjE3OjQ3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IHJlbW92ZWQgYSBkdXBsaWNhdGUgYWZmZWN0YXRpb24gSnVzdGluIEZsZXRjaGVyCgpGcmkgQXVnIDMxIDIyOjAyOjEwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IEFybWluIFNhbmRlciBwb2ludGVkIGEgcG9zc2libGUgdGV4dCBjb2FsZXNjaW5nIAoJICBwcm9ibGVtLCBjb21wbGV0ZWQgaGlzIHBhdGNoLgoKRnJpIEF1ZyAzMSAxODozMDoyOCBDRVNUIDIwMDEgQmpvcm4gUmVlc2UgPGJyZWVzZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgoJKiB0cmlvbmFuLmM6IEZpeGVkIGNvbnN0IGFuZCB2b2xhdGlsZSByZS1kZWZpbml0aW9uIHByb2JsZW0KCkZyaSBBdWcgMzEgMTY6NTE6MjggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC40IHBhcnNlci5jOiBkb2MgdXBkYXRlcyBmcm9tIEhlaWtvIFJ1cHAKCSogcGFyc2VySW50ZXJuYWxzLmM6IDIgc2FuaXR5IGNoZWNrcyBmcm9tIEhlaWtvIFJ1cHAKClR1ZSBBdWcgMjggMjI6Mzg6NDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbGllZCBwYXRjaCBmcm9tIEFybWluIFNhbmRlciB0byBtYWtlIHNvbWUgcG9pbnRlcnMKCSAgY29uc3QgaW4geG1sQ29weU5vZGUoKQoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGFkZGVkIGZpeCB0byB0aGUgaGVhZGVyCgpNb24gQXVnIDI3IDE2OjI0OjQ3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBodW0sIHJlc3RyaWN0IHRoZSBpbnRlZ2VyIHVzYWdlIGdjYyBidWcgd29ya2Fyb3VuZAoJICB0byBvbmx5IGdjYyBjb21waWxlcnMgc28gdGhhdCBvdGhlciBhcmNoaXRlY3R1cmUgZG9uJ3QgZ2V0CgkgIHBlbmFsaXplZCBieSB0aGlzIGxpbWl0YXRpb24uCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoLmg6IHNtYWxsIHR5cG8gZml4IGZyb20gSGVpa28gVy4gUnVwcAoKU3VuIEF1ZyAyNiAyMDo0NTowNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4ZWQgYSBXaW5kb3dzIGNvbXBpbGVyIHdhcm5pbmcgKENocmlzIFBvYmxldGUpCgkqIHhwYXRoLmM6IGZpeCBmb3IgbW9kIHdoZW4gZGl2aWRlbmQgaXMgMCAoQ2hyaXMgUG9ibGV0ZSkKClNhdCBBdWcgMjUgMTU6MzA6MTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaCBjYXRhbG9nLmMgeG1sY2F0YWxvZy5jOiBhZGRlZCBhIAoJICAtLWNvbnZlcnQgb3B0aW9uIHRvIHhtbGNhdGFsb2cgdG8gY29udmVydCBTR01MIG9uZXMgdG8KCSAgdGhlIFhNTCBzeW50YXguCgkqIHhtbGxpbnQuYzogc21hbGwgY2xlYW51cCBmb3IgJFNHTUxfQ0FUQUxPR19GSUxFUyBzdXBwb3J0LgoKCTIuNC4zIGdvdCByZWxlYXNlZCBhdCB0aGF0IHBvaW50ClRodSBBdWcgMjMgMjM6MTY6MzIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYyB4bWxJTy5jOiBzdGFydGVkIHNvbWUgc2VyaW91cyB0ZXN0aW5nIGFuZCBmaXhlZAoJICBhIGZldyBidWcgYW5kIG9wdG1pemF0aW9uIG5lZWRzLgoKVGh1IEF1ZyAyMyAxNzoyNjo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOgoJICBwcmVwYXJpbmcgZm9yIGEgMi40LjMgcmVsZWFzZSBldmVuIGlmIGl0IG1heSBub3QgYmUgcmVhZHkgeWV0CgkqIGNhdGFsb2cuYyBwYXJzZXIuYyB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaDogcmVkaXJlY3RlZAoJICBhbGwgZmlsZSBwYXJzaW5nIGxvb2t1cCB0byBnbyB0aHJvdWdoIHRoZSBlbnRpdHkgcmVzb2x2ZXIsIGFkZAoJICB0byBhZGQgYW4gQVBJIHRvIGJ5cGFzcyBpdCAobmVlZGVkIHRvIGxvYWQgY2F0YWxvZ3MgdGhlbXNlbHZlcyksCgkgIHNvbWUgY2xlYW51cCBvbiB0aGUgY2F0YWxvZyBjb2RlIHRvby4KCSogbmFub2Z0cC5jOiBzbWFsbCBjbGVhbnVwCgkqIGRvYy9jYXRhbG9nLmh0bWw6IHNtYWxsIHVwZGF0ZQoKVGh1IEF1ZyAyMyAxMjoyMjoyNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiBmaXhlZCBidWdpICM1OTQwNiBpbiBTR01MIGNhdGFsb2cgcGFyc2luZyByZXBvcnRlZCBieQoJICBKdW4gS3VyaXlhbWEKClRodSBBdWcgMjMgMDI6NTE6MjkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9jYXRhbG9nLmh0bWw6IGZpbmlzaGVkIHRoZSBjYXRhbG9nIGRvY3VtZW50YXRpb24KClRodSBBdWcgMjMgMDE6Mzg6NDIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9jYXRhbG9nLmh0bWwgZG9jL3htbC5odG1sOiBhZGRlZCBkb2N1bWVudGF0aW9uIGFib3V0CgkgIENhdGFsb2cgc3VwcG9ydCwgbWlzc2VzIGFuIEFQSSBkZXNjcmlwdGlvbiAKCSogZG9jL2h0bWwvKjogcmVleHRyYWN0ZWQgdGhlIEFQSSBwYWdlcwoKV2VkIEF1ZyAyMiAxODoyNzo0NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oIGNhdGFsb2cuYyB4bWxJTy5jIEhUTUxwYXJzZXIuYzoKCSAgQWRkZWQgdGhlIHBhcnQgYWJvdXQgc2VjdGlvbiA3LjIgb24gVVJJIHJlc29sdXRpb24sCgkgIGZpeGVkIGEgc2lkZSBlZmZlY3QgaW4gdGhlIEhUTUwgcGFyc2VyLCBsb29rIGNvbXBsZXRlCgkgIGFuZCByZWFkeSB0byByb2NrIGV4Y2VwdCB0aGUgVVJJL1N5c3RlbUlEIHBhcnQhCgpXZWQgQXVnIDIyIDE2OjI3OjAzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaCBjYXRhbG9nLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMKCSAgeG1sSU8uYzogYWRkZWQgc3VwcG9ydCBhbmQgQVBJcyBuZWVkZWQgZm9yIHRoZSBjYXRhbG9nIFBJCgkqIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IGNsZWFudXAKCldlZCBBdWcgMjIgMDI6MDM6MzEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYyBwYXJzZXIuYyB4bWxJTy5jIHhtbGNhdGFsb2cuYyB4bWxsaW50LmMgCgkgIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaDogc3RhcnRzIHRvIGxvb2sgb2theSwgcmVhbGx5CgkgIHBsdWdnZWQgdGhlIG5ldyBmcmFtZXdvcmssIGNsZWFuZWQgYSBsb3Qgb2Ygc3R1ZmYsCgkgIGFkZGVkIHNvbWUgQVBJcywgZXhjZXB0IHRoZSBQSSdzIHN1cHBvcnQgbWlzc2luZyB0aGlzCgkgIHNob3VsZCBiZSBtb3N0bHkgY29tcGxldGUKCSogcmVzdWx0L2NhdGFsb2dzLyogdGVzdC9jYXRhbG9ncy8qOiBhZGRlZCBuZXcgdGVzdCwgZW5yaWNoZWQKCSAgdGhlIGV4aXN0aW5nIG9uZSB3aXRoIFVSTiBJRCB0ZXN0cwoKVHVlIEF1ZyAyMSAxNDo1NjoxOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiBmaXhlZCBuZXh0Q2F0YWxvZwoJKiByZXN1bHQvY2F0YWxvZ3MvZG9jYm9vayB0ZXN0L2NhdGFsb2dzLyo6IHN0YXJ0ZWQgYWRkaW5nCgkgIGEgc21hbGwgcmVncmVzc2lvbiB0ZXN0CgpUdWUgQXVnIDIxIDEyOjUyOjM4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjYXRhbG9nLmMgeG1sY2F0YWxvZy5jIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaDoKCSAgbW9yZSB3b3JrIG9uIHRoZSBYTUwgY2F0YWxvZyBzdXBwb3J0LgoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogc21hbGwgY2xlYW51cCBzZWVtcyB1c2luZwoJICBsaXN0IGFzIGEgcHVibGljIHBhcmFtZXRlciBuYW1lIGNhbiBnaXZlIHBvcnRhYmlsaXR5IHRyb3VibGVzCgkqIHRyaW9uYW4uYyB0cmlvbmFuLmggeHBhdGguYyBpbmNsdWRlL2xpYnhtbC90cmlvbmFuLmgKCSAgaW5jbHVkZS9saWJ4bWwveHBhdGguaCBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbTogcmVtb3ZlZAoJICB0cmlvbmFuIGZyb20gdGhlIGxpYnhtbCBBUEksIGFkZGVkIHhtbFhQYXRoSXNJbmYgYW5kIHhtbFhQYXRoSXNOYU4KCSAgd3JhcHBlcnMKClR1ZSBBdWcgMjEgMTE6MTg6NDUgQ0VTVCAyMDAxIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogTWFrZWZpbGUuYW0gdHJpby5jIHRyaW9kZWYuaCB0cmlvbmFuLmMgeHBhdGguYwoJICBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbSBpbmNsdWRlL2xpYnhtbC90cmlvbmFuLmg6CgkgIFJlLXdvcmtlZCBOb3QtQS1OdW1iZXIgYW5kIEluZmluaXR5IHN1cHBvcnQuCgkqIHhtbGNhdGFsb2cuYzogYWRkZWQgcmVhZGxpbmUgaW5jbHVkZSBmaWxlcwoKTW9uIEF1ZyAyMCAwMjowNDoxMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0geG1sY2F0YWxvZy5jIGxpYnhtbC5zcGVjLmluOiByZW5hbWluZyAKCSAgdGVzdENhdGFsb2cgYXMgeG1sY2F0YWxvZywgbWFraW5nIGl0IGFuIGluc3RhbGxlZCBhcHAKCSAgYWRkaW5nIGEgc2hlbGwsIGFuZCBwcmVwYXJpbmcgaXQgdG8gYmUgYSAvZXRjL3htbC9jYXRhbG9nCgkgIG1hbmFnZW1lbnQgdG9vbCwgdGhvdWdoIG5vdCByZWFkeSB5ZXQKCSogY2F0YWxvZy5jIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaDogYWRkaW5nIHN1cHBvcnQgZm9yCgkgIFhNTCBDYXRhbG9ncyBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5LwoJICBub3QgZmluaXNoZWQsIHRoZXJlIGlzIHNvbWUgaW50ZXJlc3RpbmcgdHJhZGVvZmZzIGFuZCBhCgkgIGZldyBvcGVuIHF1ZXN0aW9ucyBsZWZ0LgoKU3VuIEF1ZyAxOSAxNDo1OTo1NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBmaXhlZCBhIGxpbmUgZm9ybWF0dGluZyBwcm9ibGVtCgpGcmkgQXVnIDE3IDExOjM1OjMxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogcmVtb3ZlZCBhIGNvdXBsZSBvZiB1bnVzZWQgdmFyaWFibGUgKEFsYmVydCBDaGluKQoKRnJpIEF1ZyAxNyAwMToyNToyMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIEhUTUx0cmVlLmMgaW5jbHVkZS9saWJ4bWwvSFRNTHBhcnNlci5oOgoJICB0cnlpbmcgdG8gZml4IHNvbWUgdHJvdWJsZXMgdy5yLnQuIGZ1bmN0aW9uIHJldHVybmluZwoJICBjb25zdCB4eHhQdHIuCgpUaHUgQXVnIDE2IDIxOjMzOjIwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjOiBhbm90aGVyIHNldCBvZiBzeW1ib2xzIGNvbmRpdGlvbmFsbHkKCSAgZGVmaW5lZAoKVGh1IEF1ZyAxNiAyMTozMToxNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBvaW50ZXIuYzogcmVtb3ZlZCB1bnVzZWQgdmFyCgpUaHUgQXVnIDE2IDE4OjI2OjQwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0WFBhdGguYzogYW5vdGhlciBzbWFsbCBjbGVhbnVwIGNsb3NpbmcgYnVnICM1OTExMAoKVGh1IEF1ZyAxNiAxNzo1OToxOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYzogc21hbGwgY2xlYW51cCBjbG9zaW5nIGJ1ZwoJICAjNTkxMDgKCldlZCBBdWcgMTUgMjI6NDY6MDEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGV4YW1wbGUvZ2pvYnJlYWQuYzogYWRkIHhtbENsZWFudXBQYXJzZXIoKSBiZWZvcmUgbGVhdmluZwoKV2VkIEF1ZyAxNSAxNDo1NzowOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlnLmguaW4gY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOgoJICByZWxlYXNlZCAyLjQuMgoKV2VkIEF1ZyAxNSAxMzo1NjoyMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvdmFsaWQuaCBkZWJ1Z1hNTC5jIHZhbGlkLmM6IGRlcHJlY2F0ZQoJICB0aGUgbm9uLWJvdW5kY2hlY2tpbmcgU3ByaW50ZiBmdW5jdGlvbnMsIGFkZCBTbnByaW50ZgoJICB0aGlzIHNob3VsZCBjbG9zZSBidWcgIzU3OTg0CgpXZWQgQXVnIDE1IDEwOjQ2OjA3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiB4bWxPdXRwdXRCdWZmZXJDcmVhdGVGaWxlbmFtZSgpIGRpZG4ndCB1bmVzY2FwZWQKCSAgVVJJcyBiZWZvcmUgZG9pbmcgdGhlIGxvb2t1cHMgKHBvaW50ZWQgYnkgTWFyayBWYWtvYykKClR1ZSBBdWcgMTQgMTg6Mzc6MjMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHNlcmlvdXMgY2hhbmdlcyBvbiBSZXN1bHQgVmFsdWUgVHJlZXMgYW5kIE5vZGVTZXRzCgkgIHcuci50LiBkZWFsbG9jYXRpb24gYW5kIGNvbGxlY3Qgb3BlcmF0aW9ucy4gUHJvYmFibHkgbm90CgkgIDEwMCUgY2xlYW4gKG1lcmdlIG9mIGFsbG9jYXRlZCB0cmVlcyBzbWVsbHMgbGlrZSBhIHByb2JsZW0pLgoJICBTZWVtcyBzdWZmaWNpZW50IHRvIGNsb3NlICM1ODk0MwoKVHVlIEF1ZyAxNCAxNjoxMjowMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhZGRpbmcgYSAtLWZvcm1hdCBvcHRpb24KClR1ZSBBdWcgMTQgMTQ6MTY6MjQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGNvdW50KCkgd2FzIGJyb2tlbiBvbiBSZXN1bHQgVmFsdWUgVHJlZQoJKiB4bWxJTy5jOiBmaXhlZCBmaWxlOi8vLyBhY2Nlc3NlcyBvbiBfV0lOMzIKCk1vbiBBdWcgMTMgMTM6MjI6NTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5tNDogcy9MSUJYTUxfVkVSU0lPTl9OVU1CRVIvTElCWE1MX1ZFUlNJT04vIHNlZW1zIHRoZQoJICBtYWNybyB3YXMgcmVuYW1lZCwgdGhpcyBzaG91bGQgY2xvc2UgYnVnICM1ODY4MwoKTW9uIEF1ZyAxMyAxMjozMzo0MCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IHNtYWxsIGZpeCBmaXhpbmcgYnVnICM1ODUzOSByZXBvcnRlZCBieSBjb29sbywgaW4KCSAgZW50aXR5IHN1YnN0aXR1dGlvbiBtb2RlIHRleHQgYXQgdGhlIGVuZCBvZiB0aGUgZW50aXR5IG1pZ2h0CgkgIGJlIGFkZGVkIGR1ZSB0byB0ZXh0IGNvYWxlc2NpbmcuCgkqIG5hbm9mdHAuYyBwYXJzZXIuYzogc21hbGwgY2xlYW51cAoKV2VkIEF1ZyAgOCAyMjo1NzowNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSEFDS0lORzogYWRkZWQgSm9obiBGbGVjayByaWdodCB0byBjb21taXQgaW4gdGhlIGRvYyBzdWJkaXIKClR1ZSBBdWcgIDcgMDM6MDU6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jIHRlc3RYUGF0aC5jIHZhbGlkLmMgeG1sbGludC5jIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6CgkgIGFsbG93IHRvIGluaGVyaXQgYXR0cmlidXRlcyBmcm9tIHRoZSBEVEQgZGlyZWN0bHkgaW4gdGhlCgkgIHRyZWUsIHRoaXMgaXMgbmVlZGVkIGZvciBYUGF0aCBhbmQgY2FuIGJlIGEgdXNlZnVsIGZlYXR1cmUuCgkgIEluaGVyaXRlZCBuYW1lc3BhY2VzIGFyZSBhbHdheXMgcHJvdmlkZWQgYXQgdGhlIHRyZWUgbGV2ZWwgbm93CgkqIHRlc3QvZGVmYXR0ciogcmVzdWx0L2RlZmF0dHIqIHJlc3VsdC9ub2VudC9kZWZhdHRyKjogYWRkZWQgYSBjb3VwbGUKCSAgb2YgdGVzdHMgZm9yIHRoaXMgZmVhdHVyZSAoWFNMVCBiZWluZyB0aGUgcHJpbWUgdXNlcikuCgpGcmkgQXVnICAzIDE0OjAyOjIwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBET0NCcGFyc2VyLmMgTWFrZWZpbGUuYW0gbmFub2h0dHAuYyBwYXJzZXIuYyB0ZXN0SFRNTC5jCgkgIHRlc3RTQVguYyB4bWxJTy5jIHhtbGxpbnQuYyBpbmNsdWRlL3dpbjMyY29uZmlnLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oCgkgIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluIHdpbjMyL1JFQURNRS5NU0RldgoJICB3aW4zMi9kc3AvKjogYXBwbGllZCBXaW4zMiBGYWNlbGlmdCBOby4yIHBhdGNoZXMgZnJvbSAKCSAgSWdvciBabGF0a292aWMgZm9yIFdpbmRvd3MvTVNDCgpXZWQgQXVnICAxIDIzOjIxOjA2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogdW5wYXJzZWRFbnRpdHlEZWNsKCkgdGhlIFVSSSBjb21wdXRhdGlvbiBvZiB0aGUKCSAgZW50aXR5IHdhc24ndCBkb25lIGJyZWFraW5nIFhTTFQgdW5wYXJzZWQtZW50aXR5LXVyaSgpCgpXZWQgQXVnICAxIDE3OjQ0OjU3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXhlZCBhIGJ1ZyB3aGVuIHdhbGtpbmcgdGhlIGRlc2NlbmRhbnRzIGFuZAoJICB0aGUgY3VycmVudCBub2RlIGhhcyBubyBjaGlsZHJlbgoJKiBkZWJ1Z1hNTC5jOiBzaG93IHVwIHdoZW4gYSB0ZXh0IG5vZGUgaXMgc3VwcG9zZWQgdG8gbm90IGJlIGVzY2FwZWQKCldlZCBBdWcgIDEgMDE6MzM6MzUgQ0VTVCAyMDAxIFRob21hcyBCcm95ZXIgPHRicm95ZXJAbHRndC5uZXQ+CgoJKiB4cGF0aC5jOiBmaXhlZCBhIGJ1ZyBpbiB4bWxYUGF0aE5vZGVUcmFpbGluZ1NvcnRlZCAoZm9yIG5vdyBpdAoJICB3b3JrZWQgbGlrZSB0aGUgc2V0OmxlYWRpbmcoKSBmdW5jdGlvbikKCSogaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDogYWRkZWQgeG1sWFBhdGhOb2RlU2V0Q29udGFpbnMKClR1ZSBKdWwgMzEgMTg6MjQ6MzQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBuYW5vaHR0cC5jOiBwcm90ZWN0ZWQgYW4gdXNlIG9mIEVBR0FJTiwgQnJpYW4gU3RhZmZvcmQKClR1ZSBKdWwgMzEgMTc6NDg6NDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOiBhcHBseSBjaGFuZ2UgdG8gY2xvc2UgIzU4MTQxIAoJKiB3aW4zMi9saWJ4bWwyLyo6IHVwZGF0ZSBvZiB0aGUgTVNDIHByb2plY3RzIGZyb20gSWdvciAgWmxhdGtvdmljCgpUdWUgSnVsIDMxIDE3OjA5OjMxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IHdoZW4gdGhlIGludGVybmFsIHN1YnNldCB1c2VzIGEgUEUsIHRoZW4gdGhlCgkgIGluY2x1ZGVkIGVudGl0eSBjYW4gdXNlIGNvbmRpdGlvbmFsIHNlY3Rpb25zLgoKTW9uIEp1bCAzMCAxMjo1ODozOSBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94cGF0aC5oOiBmaXhlZCBhIHNlcmlvdXMgbWVtb3J5IHByb2JsZW4KCSAgd2hlbiB3YWxraW5nIHRoZSBuYW1lc3BhY2UgYXhpcyBzaG93aW5nIHVwIGluCgkgIGxpYnhzdC90ZXN0cy9nZW5lcmFsL2J1Zy0xMgoJKiB4bWxtZW1vcnkuYzogYWRkZWQgdGhlIHBvc3NpYmlsaXR5IHRvIHRyYWNlIGEgZ2l2ZW4gYmxvY2sKCSAgZGVmaW5lZCBieSBpdHMgYWRkcmVzcwoKU3VuIEp1bCAyOSAwNzoxODo1MyBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGRvbid0IG92ZXJyaWRlIGV4aXN0aW5nIGVuY29kaW5nIHNwZWNpZmllZCBiZWZvcmUKCSAgc3RhcnRpbmcgeG1sUGFyc2VEb2N1bWVudCgpCgpTYXQgSnVsIDI4IDEzOjMzOjEwIEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcmVpbnNlcnRlZCwgbmVlZGVkIGZvcgoJICBXaW5kb3dzIHVzZXJzIG9mIENWUwoKMjAwMS0wNy0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBiZW50c3Bvb24uY29tPgoKCSogZW5jb2RpbmcuYzogKHhtbEljb252V3JhcHBlcik6IEFkZCBjYXN0IHRvIGZpeCB3YXJuaW5nLgoJKiB0ZXN0Q2F0YWxvZy5jOiBBZGQgaW5jbHVkZSBvZiA8bGlieG1sL3BhcnNlci5oPi4KCjIwMDEtMDctMjcgIERhcmluIEFkbGVyICA8ZGFyaW5AYmVudHNwb29uLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sLy5jdnNpZ25vcmU6CgkqIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOgoJUmVtb3ZlIHRoaXMgZmlsZSBmcm9tIENWUyBiZWNhdXNlIGl0J3MgZ2VuZXJhdGVkLgoKRnJpIEp1bCAyNyAxMDowMzo1NiBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IGFwcGxpZWQgY29uc3QgcGF0Y2hlcyBmcm9tCgkgIFRvbSBNb29nICM1ODAwMgoKVGh1IEp1bCAyNiAxODo1NTo1MiBDRVNUIDIwMDEgVGhvbWFzIEJyb3llciA8dGJyb3llckBsdGd0Lm5ldD4KCgkqIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwveHBhdGh7LEludGVybmFsc30uaDogYWRkZWQgYSBmdW5jdGlvbgoJICBsb29rdXAgZnJhbWV3b3JrCgpGcmkgSnVsIDI3IDAxOjUwOjIwIEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbENvcHlOb2RlKCkgZm9yIGRvY3VtZW50cwoKVGh1IEp1bCAyNiAxMjo0MDozNSBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVkIGJ1Z3MgIzU4MDczIHJlcG9ydGVkIGJ5IEdyZWcgU2h0aWxtYW4KClRodSBKdWwgMjYgMTE6Mzg6MzcgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBmaXhlcyBidWcgIzU3NjUyIHJlcG9ydGVkIGJ5IE1vcnVzIFdhbHRlcgoKVGh1IEp1bCAyNiAxMDoyNDozNCBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogbmFub2h0dHAuYzogSm9obiBLcm9sbCBwcm92aWRlZCBhIHNtYWxsIGZpeCB0byB4bWxOYW5vSFRUUFNhdmUKClRodSBKdWwgMjYgMDc6MTY6MDQgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jOiBmaXhlZCB0aGUgeG1sTGluZU51bWJlcnNEZWZhdWx0KCkKCSAgZXJyb3JzLCBsZXNzb24gZG9uJ3QgYWRkIG5ldyBmdW5jdGlvbnMgYXQgMWFtIGJlZm9yZSBhIHJlbGVhc2UKCSogeHBhdGguYzogaW50ZWdyYXRlZCBmaXggZnJvbSBCam9ybiB0byBhdm9pZCBkaXZpZGUgYnkgemVybwoJICBmcm9tIFhQYXRoIGluaXRpYWxpemF0aW9uIHdoZW4gcG9zc2libGUuCgpUdWUgSnVsIDI0IDE1OjM5OjExIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcmVzdWx0L3NjcmlwdHMvYmFzZSo6IHJlbW92aW5nIGhpc3RvcnkvcmVhZGxpbmUgY2hhbmdlZAoJICB0aGlzIHNsaWdodGx5CgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIFNBWC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jCgkgIHhtbGxpbnQuYzogbWFrZSBlbGVtZW50IGNvbnRlbnQgbGluZSBudW1iZXIgZ2VuZXJhdGlvbgoJICBvcHRpb25uYWwgdG8gYXZvaWQgYnJlYWtpbmcgb2xkIGFwcHMgYWRkZWQgaW50ZXJmYWNlIHRvIHN3aXRjaAoKVHVlIEp1bCAyNCAxNTowNjo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogZ2V0IHJpZCBvZiB0aGUgcmVhZGxpbmUgYW5kIGxpYmhpc3RvcnkKCSAgZGVwZW5kZW5jaWVzIGJ5IGRlZmF1bHQsIHJlbGVhc2UgMi40LjEgd2l0aCBJQTY0IGZpeAoJKiBuYW5vaHR0cC5jIHRyZWUuYyB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL25hbm9odHRwLmgKCSAgaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IGluY29ycG9yYXRlZAoJICBKb2huIEtyb2xsIGZpeGVzIHRvIGFsbG93IHNhdmluZyB0byBIVFRQIHZpYSBQVVQgKG9yCgkgIFBPU1Qgb2YgbmVlZGVkKS4KCSogZG9jL2h0bWwvKi5odG1sOiByZWdlbmVyYXRlZCB0aGUgZG9jcwoKU3VuIEp1bCAyMiAwNTo1NjoxNiBDRVNUIDIwMDEgVGhvbWFzIEJyb3llciA8dGJyb3llckBsdGd0Lm5ldD4KCgkqIGhhc2guYyBpbmNsdWRlL2xpYnhtbC9oYXNoLmg6IGFkZGVkIHhtbEhhc2hTY2FubmVyRnVsbCwKCSAgeG1sSGFzaFNjYW5GdWxsIGFuZCB4bWxIYXNoU2Nhbm5GdWxsMyB0byBnZXQgcGFzc2VkIHRoZQoJICB0aHJlZSBrZXlzIGFzIGFyZ3VtZW50cyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KClRodSBKdWwgMTkgMTU6Mjk6MjYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW06IHJlbW92ZWQgbGlieG1sIHNvZnRsaW5rIGZvciBnb29kCgkqIGluY2x1ZGUvbGlieG1sLyouaCAqLmMgZG9jL01ha2VmaWxlLmFtOiBjbGVhbnVwIHRvIGdldAoJICAxMDAlIGNvdmVyYWdlIGJ5IGd0ay1kb2MKClR1ZSBKdWwgMTcgMTc6MzY6NDYgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbG1lbW9yeS5jIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oOiBkZWJ1Z2dpbmcgb24gSUE2NCwKCSAgZml4ZWQgc2VyaW91cyB0cm91YmxlcyBkdWUgdG8gc2l6ZV90IHZzLiBpbnQgbWlzbWF0Y2gKClR1ZSBKdWwgMTcgMTY6MDQ6MzYgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFNBWC5jIHhtbElPLmM6IGNsZWFuZWQgdXAgc29tZSB3YXJuaW5nIG9uIHRoZSBBbHBoYQoKTW9uIEp1bCAxNiAwNjozMjo0NCBDRVNUIDIwMDEgVGhvbWFzIEJyb3llciA8dGJyb3llckBsdGd0Lm5ldD4KCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoeyxJbnRlcm5hbHN9LmggeHBhdGguYzogYWRkZWQgYSBtb3JlCgkgIGNvbnZlbmllbnQgZXh0ZW5zaW9uIEFQSSBmb3IgdmFsdWUgYW5kIGNvbnRleHQgbWFuYWdpbmcKCSAgTm93IGhhbmRsZXMgZXh0ZXJuYWwgb2JqZWN0cyB0aHJvdWdoIHhtbFhQYXRoUG9wRXh0ZXJuYWwsCgkgIHhtbFhQYXRoV3JhcEV4dGVybmFsIGFuZCB4bWxYUGF0aFJldHVybkV4dGVybmFsLgoJICBBZGRlZCBmdW5jdGlvbnMgZm9yIHNldHMgb3BlcmF0aW9ucyAoaW50ZXJzZWN0aW9uLCBldGMuKQoKTW9uIEp1bCAxNiAyMDowNToyNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIGluY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaAoJICB4bWxJTy5jIHRyZWUuYyBwYXJzZXJJbnRlcm5hbHMuYyBlbnRpdGllcy5jIGVuY29kaW5nLmMKCSAgSFRNTHBhcnNlci5jOiBjbGVhbnVwIG9mIGdsb2JhbCB2YXJpYWJsZXMsIG1hcmtpbmcgc29tZQoJICBjb25zdCBvciBwcml2YXRlLgoKTW9uIEp1bCAxNiAwMDoxNzoxNSBDRVNUIDIwMDEgVGhvbWFzIEJyb3llciA8dGJyb3llckBsdGd0Lm5ldD4KCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoLmg6IGV4cG9ydGVkIHhtbFhQYXRoe05BTixQSU5GLE5JTkZ9CgkgIGZpeGVkIHhtbFhQYXRoTm9kZVNldEl0ZW0gd2hlbiBwYXNzaW5nIGluZGV4PTAKClN1biBKdWwgMTUgMTc6NTg6NDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbjogYWRkZWQgeG1sQ2hlY2tWZXJzaW9uKCkKClNhdCBKdWwgMTQgMTk6MzE6MjEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxsaW50LmM6IGZpeGVkIGNvbXBpbGF0aW9uIHVuZGVyIEN5Z3dpbiAjNTc1MDMKCSogVE9ETzogdXBkYXRlCgoyMDAxLTA3LTEzICBQZXRlciBXaWxsaWFtcyAgPHBldGVyd0B4aW1pYW4uY29tPgoKCSogY29uZmlnLmguaW46IGFkZCAjdW5kZWYgSEFWRV9ETEZDTl9ICgoJKiBleGFtcGxlL01ha2VmaWxlLmFtIChJTkNMVURFUyk6IENvbXBpbGUgZml4IHdoZW4gc3JjZGlyICE9CglidWlsZGRpci4KCkZyaSBKdWwgMTMgMTE6MDk6NTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZGVmLnNyYzogYWRkZWQgYSBjb3VwbGUgb2YgZXhwb3J0ZWQgZW50cmllcwoJICByYWlzZWQgYnkgIzU3MzQ4IGFuZCAjNTczODEKClRodSBKdWwgMTIgMjE6MjA6MTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jIEhUTUx0cmVlLmMgU0FYLmMgZGVidWdYTUwuYyBwYXJzZXIuYwoJICB0cmVlLmMgeHBvaW50ZXIuYzogc3RvcmUgdGhlIGxpbmUgbnVtYmRlciBpbiBlbGVtZW50LT5jb250ZW50LAoJICBtYXkgYnJlYWsgc29tZSBzb2Z0d2FyZSwgbmVlZCBhIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtCgoyMDAxLTA3LTEwICBEYXJpbiBBZGxlciAgPGRhcmluQGJlbnRzcG9vbi5jb20+CgoJKiAuY3ZzaWdub3JlOgoJKiBleGFtcGxlLy5jdnNpZ25vcmU6CgkqIGluY2x1ZGUvLmN2c2lnbm9yZToKCSogaW5jbHVkZS9saWJ4bWwvLmN2c2lnbm9yZToKCVZhcmlvdXMgdGhpbmdzIHRoYXQgYXJlIGdlbmVyYXRlZCBhbmQgc2hvdWxkIGJlIGlnbm9yZWQuCgpUdWUgSnVsIDEwIDE3OjQ3OjA5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiByZWxlYXNlIG9mIDIuNC4wCgkqIGRvYy94bWwuaHRtbCBkb2MvaHRtbC8qOiAgdXBkYXRlZCB0aGUgZG9jcwoKTW9uIEp1bCAgOSAyMjowNjo1MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IGZpeGVkICJJbnRlcm5hbDogTUlYRUQgc3RydWN0IGJhZCIgd2hlbiAjQ0RBVEEgZWxlbWVudHMKCSAgdmFsaWRhdGlvbiBvY2N1cmVkIG9uIGNvbnRlbnQgd2l0aCBlbGVtZW50IGNoaWxkCgpNb24gSnVsICA5IDE3OjU5OjA4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBmaXhlZCBYTUwgQmFzZSBjb21wdXRhdGlvbiB3aGljaCB3YXMgYnJva2VuCgkqIGRlYnVnWE1MLmM6IGFkZGVkIGEgYmFzZSBmdW5jdGlvbiB0byB0aGUgc2hlbGwKCSogTWFrZWZpbGUuYW0gcmVzdWx0L3NjcmlwdHMvKiB0ZXN0L3NjcmlwdHMvKjogYWRkZWQgc2NyaXB0cwoJICBiYXNlZCByZWdyZXNzaW9uIHRlc3RzLCBhbmQgYWRkaW5nIDIgWE1MIEJhc2UgdGVzdHMKCk1vbiBKdWwgIDkgMTI6MzE6MDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IHNldCBwcm9wZXJ0aWVzIGRvYyBhbmQgY2FsbCB4bWxTZXRMaXN0RG9jIGZvciBwcm9wZXJ0aWVzCgkgIGNvbnRlbnQgd2hlbiBncmFmdGluZyB0aGVtIGluIGEgZGlmZmVyZW50IHRyZWUuCgkqIGFjbG9jYWwubTQ6IHJlbW92ZSBmcm9tIENWUwoKU3VuIEp1bCAgOCAyMzowOTowNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kZWYuc3JjOiBhZGRlZCBzb21lIG1pc3NpbmcgZW50cnkgcG9pbnQKCSAgZm9yIFhQYXRoIChNYXJrIFZha29jKQoKU3VuIEp1bCAgOCAyMDozNDozNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbElPLmM6IGZpeGVkIGFuIG9sZCBidWcgcmFpc2VkIGJ5IEJlcm5oYXJkIFp3aXNjaCwgdGhlIEkvTwoJICBsYXllciBzaG91bGQgVVJJLVVuZXNjYXBlIGJlZm9yZSB0cnlpbmcgdG8gb3BlbiByZXNvdXJjZXMuCgpTdW4gSnVsICA4IDE2OjI2OjAwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4IHRoZSBuYW1lKCkgYnVnIGZvciBlbGVtZW50cyBpbiB0aGUgZGVmYXVsdCAKCSAgbmFtZXNwYWNlIHJlcG9ydGVkIGJ5IENoYXJsaWUgQm96ZW1hbgoKU3VuIEp1bCAgOCAxNToxMTowNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFNBWC5jIHBhcnNlci5jIHRlc3RYUGF0aC5jIHhwYXRoLmM6IHRyeWluZyB0byBmaXggIzU2OTQ4LCB0aGlzCgkgIGxlZCB0byBhbiBYUGF0aCBmaXgsIGltcHJvdmVtZW50cyBvZiBTQVggaW5pdGlhbGl6YXRpb24sIGFuZAoJICBhbiBhZGRlZCBvcHRpb24gLS1ub2NkYXRhIHRvIHRlc3RYUGF0aAoKU2F0IEp1bCAgNyAyMTowOTo1NSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy9saWJ4bWwtZG9jLmVsOiBGZWxpeCBOYXR0ZXIgcHJvdmlkZWQgYW5ldyB2ZXJzaW9uIHdvcmtpbmcKCSAgd2l0aCBYRW1hY3MgdG9vCgpTYXQgSnVsICA3IDAyOjE2OjAwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9saWJ4bWwveHBhdGguaDogc21hbGwgY2xlYW51cAoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZQoKRnJpIEp1bCAgNiAwMTo0MDoyMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDoKCSAgcmVsZWFzZWQgMi4zLjE0CgpGcmkgSnVsICA2IDAwOjQ3OjQxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL2h0bWwvKjogcmVidWlsdCB0aGUgZG9jcyBmb3IgdGhlIHJlbGVhc2UKCSogZG9jL3htbC5odG1sOiBhZGRlZCAyLjMuMTQgcmVsZWFzZS4KClRodSBKdWwgIDUgMjI6MDE6MzEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBhIGJ1ZyByZXBvcnRlZCBieSBTdGVwaGFuIEt1bG93IGVtcHR5IG5vZGVzZXRzCgkgIHdlcmUgbm90IGVxdWFsIHRvIGVtcHR5IHN0cmluZ3MKClRodSBKdWwgIDUgMDA6NTI6MjUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBTQVguYzogZml4ZWQgYSBVUkktUmVmZXJlbmNlIGNvbXB1dGF0aW9uIHByb2JsZW0gd2hlbiB2YWxpZGF0aW5nCgkqIHhtbElPLmM6IHNtYWxsIGNsZWFudXAKClRodSBKdWwgIDUgMDA6MDQ6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogaW1wcm92ZWQgdGhlIGRlc2NyaXB0aW9uIG9mIGEgY291cGxlIG9mIGludGVyZmFjZXMKCSAgdXBvbiBMYXJyeSBTdGFtcGVyIHN1Z2dlc3Rpb24KCldlZCBKdWwgIDQgMjE6NDI6MjQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBTQVguYyBlbnRpdGllcy5jIHBhcnNlci5jOiBjaGFuZ2VkIGNvbXBsZXRlbHkgdGhlIHdheSBlbnRpdGllcwoJICBhcmUgaGFuZGxlZCB3aGVuIHJ1bm5pbmcgdGhlIHBhcnNlciBpbiBlbnRpdHkgc3Vic3RpdHV0aW9uIG1vZGUuCgkgIFRoaXMgZml4ZXMgYSBidWcgcmVwb3J0ZWQgYnkgU3RlcGhhbiBLdWxvdyBhbmQgbmVhcmx5IGRpdmlkZXMKCSAgYnkgMyB0aGUgYW1vdW50IG9mIG1lbW9yeSByZXF1aXJlZCBieSBsaWJ4c2x0IHRvIGxvYWQgYW5kIHByb2Nlc3MKCSAgRG9jQm9vayBUREcuCgpXZWQgSnVsICA0IDE4OjAyOjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jOiBmaXhpbmcgYSB0b28gZWFybHkgcm9vdCBjbG9zaW5nIHByb2JsZW0gcmFpc2VkCgkgIGJ5dCBQcmFzaGFudGggTmFpZHUKCldlZCBKdWwgIDQgMDE6NDI6MDEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCBhIG1pc3NpbmcgY29weSBpbiB4bWxYUGF0aFZhcmlhYmxlTG9va3VwTlMoKSAKCSAgcmFpc2VkIGJ5IE1hcmsgVmFrb2MuCgpUdWUgSnVsICAzIDE4OjM1OjQ4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZXhhbXBsZS9NYWtlZmlsZS5hbTogZml4ZWQgdGhlIGluY2x1ZGUgcGF0aCB0byBhZGQgc3JjZGlyL2luY2x1ZGUKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluOiBmaXggZnJvbSBBbGJlcnQgQ2hpbiBmb3IgaWNvbnYgZGV0ZWN0aW9uCgkgIGFuZCBzb21lIGNsZWFudXAKClR1ZSBKdWwgIDMgMTA6MTI6MDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoLmggaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDoKCSAgbG90IG9mIG9wdGltaXphdGlvbiB3b3JrLCByZXN1bHRzIGluIHNpZ25pZmljYW50IGltcHJvdmVtZW50cwoJICB3aGVuIGhhbmRsaW5nIHJlYWxseSBjb21wbGV4IFhQYXRoIHF1ZXJpZXMuIEFkZCBhIHNtYWxsIG9wdGltaXplcgoJICBmb3IgdW5pb25zLCBpbXByb3ZlIFtuXSBhbmQgW2xhc3QoKV0sIGF2b2lkIHNvbWUgY29zdGx5IG9wcy4KCkZyaSBKdW4gMjkgMjM6MjY6NTQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBwYXJzZXIuYzogeG1sU3Ryc3RyIGFyZ3MgYXJlIGJvdGggY29uc3QKCSogeHBhdGguYzogc21hbGwgY2xlYW51cAoJKiB4bWxHZXROc0xpc3Q6IHJlZm9ybWF0ZWQsIGZpeGVkIHByb2JsZW1zIGlmIHVzZWQgb24gRW50aXRpZXMKClRodSBKdW4gMjggMTg6MTk6NDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MveG1sLmh0bWw6IGFkZGVkIDEuOC4xNCBhbmQgMi4zLjEzIHJlbGVhc2VzCgpUaHUgSnVuIDI4IDE4OjE2OjI4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiByZWxlYXNlZCAyLjMuMTMKCSogTWFrZWZpbGUuYW0gZXhhbXBsZS9NYWtlZmlsZS5hbTogd29ya2Fyb3VuZCBhdXRvbWFrZSBnZW5lcmF0aW5nCgkgIGVycm9uZW91cyBkZXBzCgpUaHUgSnVuIDI4IDE1OjA4OjIyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBidWcgIzU2ODAxIFlvbiBEZXJlayBwcm92aWRlZCBhIHBhdGNoCgkgIHRvIHRoZSB3aW5kb3dzIGNvbmZpZyBmaWxlLgoKVGh1IEp1biAyOCAxNDo1MTo0NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwb2ludGVyLmMgaW5jbHVkZS93aW4zMmNvbmZpZy5oIHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kZWYuc3JjCgkgIGxpYnhtbC5oIDogWW9uIERlcmVrIHByb3ZpZGVkIGEgc2V0IG9mIGNoYW5nZXMgdG8gY29tcGlsZSBmcm9tCgkgIENWUyBvbiBXaW5kb3dzL01TQwoKVGh1IEp1biAyOCAxNDoxMToyOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBmaXhlZCBVVEY4IEJPTSBzdXBwb3J0IGluIHB1c2ggbW9kZQoJKiB0ZXN0L3V0Zjhib20ueG1sIHJlc3VsdC91dGY4Ym9tLnhtbCByZXN1bHQvbm9lbnQvdXRmOGJvbS54bWw6CgkgIGFkZGVkIGEgc3BlY2lmaWMgdGVzdGNhc2UKCldlZCBKdW4gMjcgMTg6MzM6MTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgLS1wdXNoIHJlZ3Jlc3Npb24gdGVzdHMKCSogcGFyc2VySW50ZXJuYWxzLmM6IHRoZSBYTUwgcGFyc2VyIHNlZ2ZhdWx0ZWQgaW4gLS1wdXNoIG1vZGUKCldlZCBKdW4gMjcgMTM6MDk6NTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IG1vdmVkIHRoZSBzeW1saW5rcyBkZXRlY3Rpb24gd2l0aGluIGEgQ1ZTCgkgIGNoZWNrLCB0aGlzIGlzIG5vdCBwb3J0YWJsZSBhbmQgd2lsbCBiZSByZW1vdmVkIHNvb24uCgkqIHhwYXRoLmM6IHNtYWxsIGNsZWFudXAvc3BlZWR1cAoKVHVlIEp1biAyNiAxODowNToyNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MveG1sLmh0bWwgaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6CgkgIHJlbGVhc2Ugb2YgMi4zLjEyCgkqIHBhcnNlci5jOiBtYWtlIGFuIGVycm9yIG1lc3NhZ2UgaWYgdW5rbm93IGVudGl0aWVzIGluIGFsbCBjYXNlcwoKVHVlIEp1biAyNiAwOTo0NjoyOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHVyaS5jOiBmaXhlZCAyIHVyaSBub3JtYWxpemF0aW9uIGJ1Z3Mgb24gJy8vJyByZWR1Y3Rpb24KCk1vbiBKdW4gMjUgMTg6MDY6MjMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbTogTGFzemxvIFBldGVyIHBvaW50ZWQgb3V0IHRoYXQKCSAgaW5jbHVkZXMgd2VyZSBpbnN0YWxsZWQgaW4gdGhlIHdyb25nIGRpcgoKTW9uIEp1biAyNSAxNzowNzozNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy9odG1sLnhtbDogd2FybiBhZ2FpbnN0IHNlbmRpbmcgY29kZSB0byBleGhpYml0IGJ1Z3MuCgpTdW4gSnVuIDI0IDIzOjMxOjU2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogcGF0Y2ggdG8geG1sWFBhdGhGb3JtYXROdW1iZXIgZm9yIHRoZSBvcHRpbWl6ZXIgb24KCSAgVHJ1NjQgZnJvbSBUaG9tYXMgTGVpdG5lcgoKU3VuIEp1biAyNCAxNDowNTo1NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEFVVEhPUlM6IGFkZGVkIFdpbGxpYW0gYW5kIEJqb3JuCgkqIGluY2x1ZGUvbGlieG1sLyouaCAqLmMgUkVBRE1FIGRvYy8qLmh0bWwgZXRjLjogY2hhbmdlZCBvbGQgZW1haWwgdG8KCSAgZGFuaWVsQHZlaWxsYXJkLmNvbSBob3BlZnVsbHkgSSB3b24ndCBoYXZlIHRvIGRvIHRoaXMgYWdhaW4KCSogZG9jL01ha2VmaWxlLmFtIGRvYy9odG1sLyouaHRtbDogY2xlYW51cCBtYWtlZmlsZSwgY2hlY2tlZCB0aGF0CgkgIGRvY3MgY2FuIGJlIHJlYnVpbHQgY2xlYW5seSBub3cKCSogaW5jbHVkZS9saWJ4bWwveG1sKnZlcnNpb24uaCo6IHJlbW92ZWQgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oCgkgIGZyb20gQ1ZzIGl0J3MgZ2VuZXJhdGVkLCBhZGRlZCBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaAoJICBhbHNvIGdlbmVyYXRlZCBidXQgd2hpY2ggc2hvdWxkIGNoYW5nZSBmYXIgbGVzcyBmcmVxdWVudGx5LgoJKiBjYXRhbG9nLmMgbmFub2Z0cC5jOiBtYWRlIHN1cmUgdG8gaW5jbHVkZSBsaWJ4bWwuaCBub3QKCSAgbGlieG1sL3htbHZlcnNpb24uaCBkaXJlY3RseQoJKiBpbmNsdWRlL2xpYnhtbC8qLmg6IGluY2x1ZGUgeG1sd2luMzJ2ZXJzaW9uLmggaW5zdGVhZCBvZiB4bWx2ZXJzaW9uLmgKCSAgd2hlbiBjb21waWxpbmcgb24gV0lOMzIgYW5kIE1TQwoKU2F0IEp1biAyMyAyMzo1NDoxMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvTWFrZWZpbGUuYW0gaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0gY29uZmlndXJlLmluOgoJICBmaXhlZCBtYWtlIGRpc3RjaGVjayBhbmQgcmVidWlsZGluZyB0aGUgcnBtcwoKU2F0IEp1biAyMyAyMDo1MDo1MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogc2hvdWxkIGZpbmlzaCB0aGUgbWlncmF0aW9uIG9mIGV4cG9ydGVkIGluY2x1ZGVzCgkgIGludG8gYSByZWFsIGluY2x1ZGUvbGlieG1sIGluIENWUywgYXQgbGVhc3QgZm9yIENWUyB1c2Vycy4KCSogcmVtb3ZlZCB0aGUgZXhwb3J0ZWQgaGVhZGVycywgYWRkZWQgaW4gaW5jbHVkZS9saWJ4bWwgKGFzIHdlbGwKCSAgYXMgeG1sdmVyc2lvbi5oLmluKS4KClNhdCBKdW4gMjMgMjA6Mzc6MTkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkIHRoZSB3YXkgdG8gZGV0ZWN0IHN5bWxpbmsKClNhdCBKdW4gMjMgMjA6MzA6MTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IHVwZGF0ZWQsIGluY2x1ZGUvbGlieG1sIGlzIG5vdyBhIHJlYWwgQ1ZTIGRpcgoKU2F0IEp1biAyMyAxOTozNjozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy9saWJ4bWwtZG9jLmVsOiBhIG5ldyB2ZXJzaW9uIG9mIGxpYnhtbC1kb2MuZWwuIFRoaXMgbmV3CgkgIHZlcnNpb24gd29ya3Mgd2l0aCBib3RoIGxpYnhtbDEgYW5kIGxpYnhtbDIgKGl0IGF1dG9kZXRlY3RzCgkgIHRoZSBwcmVmaXggb2YgdGhlIGh0bWwtZmlsZXMpIGZyb20gRmVsaXggTmF0dGVyLgoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQgZG9jIGFjY29yZGluZ2x5CgpTYXQgSnVuIDIzIDE4OjMwOjI4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgdGhlIGJ1ZyBnZW5lcmF0aW5nIGEgdGVtcGxhdGUgbG9vcCBpbiBsaWJ4c2x0CgkgIHdoZW4gdXNpbmcgZG9jYm9vay14c2wtMS40LCAqIHNob3VsZCBmaWx0ZXIgb3V0IGRvY3VtZW50IG5vZGVzCgkqIEhBQ0tJTkc6IGFkZGVkIFdpbGxpYW0KCSogVE9ETzogdXBkYXRlZAoKRnJpIEp1biAyMiAxODowMjozNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy9GQVEuaHRtbDogYWRkZWQgYSB3YXJuaW5nIGFib3V0IGdjYy0zLjAKCSogZG9jL3htbC5odG1sOiBhZGRlZCByZWZlcmVuY2UgdG8gZ2RvbWUyIGFuZCByZW1vdmVkIGEgY29uZnVzaW5nCgkgIHNlbnRlbmNlCgpGcmkgSnVuIDIyIDE3OjAyOjE2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sdmVyc2lvbi5oOiBva2F5IHRoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZSwgYnV0IFdpbmRvd3MKCSAgdXNlcnMgbmVlZCBpdCBhbmQgdGhleSBjYW4ndCBnZW5lcmF0ZSBpdCwgYW5kIEkgd2FudCBDVlMKCSAgV2luZG93cyB1c2VycyAuLi4KCSogd2luMzIvbGlieG1sMi9saWJ4bWwyX3NvLmRzcDogV2luZG93cyBwcm9qZWN0IGZpbGUgZm9yIAoJICB0aGUgc2hhcmVkIGxpYiB2ZXJzaW9uIG9mIGxpYnhtbDIKCSogd2luMzIvbGlieG1sMi9saWJ4bWwyLmRlZi5zcmM6IGJ1ZyAjNTY1Mjcgc2V0IG9mIGV4cG9ydGVkCgkgIHJlc291cmNlcyBuZWVkZWQgZm9yIGxpYnhzbHQveHNsdHByb2MgYnkgWW9uIERlcmVrCgpGcmkgSnVuIDIyIDE2OjM5OjM2IENFU1QgMjAwMSBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIHRyaW8uYzogTVNWQyBmaXggKHByb3ZpZGVkIGJ5IElnb3IgWmxhdGtvdmljKQoKRnJpIEp1biAyMiAxMjo0MjoxNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogYW5vdGhlciBzbWFsbCBmaXggZm9yIEFUVFJJQlVURV9VTlVTRUQKCkZyaSBKdW4gMjIgMTI6NDI6MTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IFlvbiBEZXJlayBwcm92aWRlZCBhIGZpcnN0IGZpeAoJICB0byBiZSBhYmxlIHRvIGNvbXBpbGUgbGlieHNsdC94c2x0cHJvYyBvbiBXaW5kb3dzCgpGcmkgSnVuIDIyIDAwOjA0OjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogYXR0ZW1wdCB0byB3b3JrIGFyb3VuZCB3aGF0IHNlZW1lZCBhIGdjYyBvcHRpbWl6ZXIKCSAgYnVnIHdoZW4gaGFuZGxpbmcgZmxvYXRzIG9uIGkzODYgaHR0cDovL3ZlaWxsYXJkLmNvbS9nY2MuYnVnCgkqIHRyZWUuYyBlbnRpdGllcy5jIGVuY29kaW5nLmM6IGRvaW5nIHNvbWUgY2xlYW51cHMgd2hpbGUKCSAgY2hhc2luZyBpdAoKVGh1IEp1biAyMSAxMzoxMzozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtOiBjbGVhbnVwIHdoZW4gLS13aXRob3V0LWRlYnVnIGlzIHNwZWNpZmllZAoJKiB4aW5jbHVkZS5jIHhwYXRoLmMgeHBhdGhJbnRlcm5hbHMuaCB4cG9pbnRlci5jOiBjbGVhbnVwCgkgIHcuci50LiAtLXdpdGhvdXQtZGVidWcgYW5kIG90aGVyIGluY2x1ZGUgcG9pbnRzCgkqIGNhdGFsb2cuaCB0ZXN0Q2F0YWxvZy5jOiBhIGJpdCBvZiBjbGVhbnVwIGFuZCBwcmVwYXJlIGZvciBYTUwKCSAgQ2F0YWxvZ3MKCSogY29uZmlndXJlLmluIGVudGl0aWVzLmggdHJlZS5oIEhUTUxwYXJzZXIuYzogcmVtb3ZlZAoJICAtLXdpdGhvdXQtY29yYmEsIG1hZGUgdGhlIF9wcml2YXRlIGZpZWxkIG1hbmRhdG9yeQoKV2VkIEp1biAyMCAxOTozNzoyNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIGVuY29kaW5nLmM6IFNpbmNlIE5vdGVwYWQgb24gV2luMmsKCSAgb3V0cHV0cyBhIEJPTSBpbiBVVEY4LCBhbiBlcnJhdGEgaGFzIGJlZW4gaXNzdWVkIHRvIGF2b2lkIHRoZQoJICBwcm9ibGVtLCB0aGF0IHdhcyB0aGUgbW9zdCByZWFzb25hYmxlIHNvbHV0aW9uLi4uIEFkZCBzdXBwb3J0CgkgIGZvciBhIGxlYWRpbmcgVVRGOCBCT00gaW4gZW50aXRpZXMuCgpXZWQgSnVuIDIwIDE1OjM4OjU5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogZml4ZWQgYSBidWcgZm91bmQgd2hlbiBwb3N0IHZhbGlkYXRpbmcgYW4gZW50aXR5IHJlZgoJKiB4bWxsaW50LmM6IGFkZGVkIC0tbG9hZGR0ZCBhbmQgc2xpZ2x5IGNoYW5nZWQgLS1wb3N0dmFsaWQgdG8KCSAgYWN0aXZhdGUgaXQgdG9vCgpUdWUgSnVuIDE5IDIwOjAzOjQwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jIHhpbmNsdWRlLmMgeHBvaW50ZXIuYzogYnVnICM1NjQwMiBleHBvc2VkIGEgbnVtYmVyIG9mCgkgIHdlYWtuZXNzIGluIHRoZSBub2RlIGNvcHkgdGhlIFhQb2ludGVyIGFuZCB0aGUgWEluY2x1ZGUKCSAgaW1wbGVtZW50YXRpb25zLiBTZXJpb3VzIGNsZWFudXAuCgpUdWUgSnVuIDE5IDE0OjUwOjE4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IEtqYXJ0YW4gTWFyYWFzIHByb3ZpZGVkIGEgc21hbGwgcGF0Y2ggdG8KCSAgYWRkIHhtbDItY29uZmlnLmluIHRvIEVYVFJBX0RJU1QKClR1ZSBKdW4gMTkgMTM6MDQ6MTAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jIHRyZWUuYyBwYXJzZXJJbnRlcm5hbHMuYyBwYXJzZXIuYzogU3RlcGhhbiBLdWxvdwoJICBwcm92aWRlZCBhbm90aGVyIGZhaWxpbmcgY2FzZSBmb3VuZCBpbiBLREUsIHRoZSB3YXkgdGhlCgkgIGN0eHQtPnZjdHh0Lm5vZGVUYWIgd2FzIGFsbG9jYXRlZCBhbmQgZnJlZWQgY2hhbmdlZCBvdmVyCgkgIHRpbWUgYnV0IGl0IHdhc24ndCBjb21wbGV0ZWx5IGNsZWFuZWQgdXAuIFRoaXMgc2hvdWxkIGZpeCBpdC4KClN1biBKdW4gMTcgMTk6NTY6MzMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogU3RlcGhhbiBLdWxvdyBhbHNvIHJhaXNlZCB0aGUgZmFjdCB0aGF0IGxpbmUgbnVtYmVyCgkgIGNvdWxkIGdldCBtaXNjb3VudGVkIG1ha2luZyBkZWJ1ZyBoYXJkZXIsIGZpeGVkIHRoZSBwcm9ibGVtCgkgIGluIHhtbFBhcnNlQ2hhckRhdGEoKQoKU3VuIEp1biAxNyAxOToxNzoyNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IFN0ZXBoYW4gS3Vsb3cgcG9pbnRlZCBvdXQgYSBwcm9ibGVtIHdoZW4gdmFsaWRhdGluZwoJICBhbmQgdXNpbmcgYW4gZW1wdHkgZW50aXR5LCBmb3Jnb3QgYSAnYnJlYWsnIGluIGEgY2FzZS4KClN1biBKdW4gMTcgMTY6NDc6NDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbEhhc05zUHJvcCgpIGFjY29yZGluZ2x5IHRvIGJ1ZyAjNTU2ODMKCSogZG9jL3htbC5odG1sOiB1cGRhdGVkIHdpdGggMi4zLjExCgpTdW4gSnVuIDE3IDEyOjI0OjExIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogVE9ETzogdXBkYXRlZCBhZGRpbmcgY2xlYW51cCBvZiBnZW5lcmF0ZWQgZG9jCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyZWQgdG8gcmVsZWFzZSAyLjMuMTEKCSogeG1sbGludC5jOiBhZGRlZCAtLXZlcnNpb24gZm9yIGJ1ZyByZXBvcnRpbmcKCSogZG9jL2h0bWwvKi5odG1sOiByZWJ1aWx0IHRoZSBkb2MKClNhdCBKdW4gMTYgMjM6MjM6MzMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXJzdCBwYXJ0IG9mIHRoZSB3b3JrIG9uIHNlbGVjdGluZyBuYW1lc3BhY2UgdG8KCSAgZml4IGJ1ZyAjNTYxMTUgCgpTYXQgSnVuIDE2IDAwOjIwOjQ2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0gZXhhbXBsZS9NYWtlZmlsZS5hbTogTGFzemxvIFBFVEVSIHByb3ZpZGVkIGEgZml4CgkgIHdoZW4gdXNpbmcgLWxpY29udgoJKiBUT0RPOiB1cGRhdGVkCgpGcmkgSnVuIDE1IDA3OjA4OjU3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuW2NoXTogbW9yZSB3b3JrIG9uIHRoZSBIVE1MIHNlcmlhbGl6YXRpb24gcm91dG5lcywKCSAgY2xlYW51cCwgZW5jb2Rpbmcgc3VwcG9ydC4KClRodSBKdW4gMTQgMTA6MzE6MTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBUaG9tYXMgQnJveWVyIHN1Z2dlc3RlZCBhIGJldHRlciBwYXRjaCBmb3IgdGhlIC8gYXJnCgpUaHUgSnVuIDE0IDAxOjAxOjMwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogYnVnIGRldGVjdGVkIGJ5IEFua2ggd2hlbiAvIGlzIHVzZWQgYXMgYSBmdW5jdGlvbiBhcmcKCldlZCBKdW4gMTMgMjM6MDg6NDYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLltjaF0gSFRNTHRyZWUuYzogc3RvcmVkIHRoZSBpbmxpbmUvYmxvY2sgcHJvcGVydHkKCSAgb2YgZWxlbWVudCBhbmQgdXNlIGl0IHRvIGF2b2lkIG91dHB1dHRpbmcgZm9ybWF0dGluZyBzcGFjZXMgYXQKCSAgdGhlIHdyb25nIHBsYWNlLiBJbXBsZW1lbnRlZCB0aGUgZm9ybWF0IHBhcmFtZXRlciBmb3IgSFRNTCBzYXZlLgoJKiByZXN1bHQvSFRNTC9kb2MyLmh0bSByZXN1bHQvSFRNTC9kb2MzLmh0bSByZXN1bHQvSFRNTC9mcDQwLmh0bQoJICByZXN1bHQvSFRNTC9zY3JpcHQuaHRtbCByZXN1bHQvSFRNTC90ZXN0Mi5odG1sIHJlc3VsdC9IVE1ML3Rlc3QzLmh0bWwKCSAgcmVzdWx0L0hUTUwvd2lyZWQuaHRtbDogb2YgY291cnNlIHRoaXMgaW1wYWN0IHRoZSByZXN1bHQgb2YgYQoJICBudW1iZXIgb2YgSFRNTCB0ZXN0cwoKVGh1IEp1biAxNCAwOTo0OTowOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLltjaF06IHN0YXJ0ZWQgYXVnbWVudGluZyB0aGUgSFRNTCBzYXZlIEFQSSB3aXRoCgkgIGVuY29kaW5nIGFuZCBmb3JtYXR0aW5nIHBhcmFtZXRlcnMKCldlZCBKdW4gMTMgMDk6NDQ6MTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5oOiBjbGVhbnVwIGFuZCBzdGFydGVkIGV2YWx1YXRpbmcgdGhlIHdvcmsgbmVlZGVkIG9uCgkgIHJldmFtcGluZyB0aGUgSFRNTCBvdXRwdXQgY29kZQoKTW9uIEp1biAxMSAxOToyOTo0MCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIERPQ0JwYXJzZXIuYzogaGFuZGxpbmcgb2YgUElzIGFuZCA8P3NnbWwtZGVjbGFyYXRpb24gaW4gZW50aXRpZXMuCgpUdWUgSnVuIDEyIDA4OjQ2OjI4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogZml4ZWQgYnVnICM1NjA0OSwgZm9yZ290IG9uZSBjaGVjayBpbiB0aGUKCSAgdmFsaWRhdGlvbiByb3V0aW5lCgpUdWUgSnVuIDEyIDA4OjA5OjQ2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5bY2hdOiBncnJyIC4uLiBuYW1lc3BhY2UgaXMgYSBDKysgcmVzZXJ2ZWQga2V5d29yZAoKVHVlIEp1biAxMiAwNjoyOTozOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGxpYnhtbC5oOiBmaXhlZCBhbiBlcnJvciBpbiBsYXN0IGNvbW1pdAoJKiBkb2MvRkFRLmh0bWw6IGFkZGVkIGFuIGVudHJ5IGZvciBjb21waWxhdGlvbiBmcm9tIENWUwoKTW9uIEp1biAxMSAxMDowNzoyOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbHZlcnNpb24uaC5pbiBsaWJ4bWwuaDogQ3lnd2luIHBhdGNoZXMKCSogdHJlZS5jOiB4bWxGcmVlTm9kZUxpc3QgcGF0Y2ggc2ltaWxhciB0byB4bWxGcmVlTm9kZSBvbmUKCSogdHJlZS5oOiBjbGVhbnVwCgpTYXQgSnVuICA5IDE5OjE2OjAwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBwYXRjaGVkIHhtbEZyZWVOb2RlKCkgdG8gYXZvaWQgZnJlZWluZygpIGEgc3RhdGljCgkgIG1lbW9yeSBibG9jayBpbiBhIHN0cmFuZ2UgY2FzZSB3aGVyZSBsaWJ4bWwgaXMgbGlua2VkIHR3aWNlCgkgIGluIHRoZSBiaW5hcnkuCgpTYXQgSnVuICA5IDE4OjM5OjAzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogKGE/ICwgYj8gLCBjPyAsIC4uLiAsIHo/KSB3YXMgc3RvcmluZy9yZXN0YXVyaW5nCgkgIHN0YXRlIGZhciB0b28gb2Z0ZW4sIHNpbXBsZSBmaXggdXNlZCB0byBhdm9pZCBpdC4KClNhdCBKdW4gIDkgMTY6MTA6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4aW5jbHVkZS5jOiBSYXBoYWVsIEhlcnR6b2cgaGFkIGEgdHJvdWJsZSB3aXRoIERURCBub2RlcwoJICBiZWluZyBwcm9jZXNzZWQsIGFwcGxpZWQgaGlzIHBhdGNoCgkqIHRyZWUuYzogZml4ZWQgYSBidWcgcmFpc2VkIGluIHhtbFN0YXRpY0NvcHlOb2RlTGlzdCgpCgpTYXQgSnVuICA5IDE1OjUwOjExIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmMgdXJpLmMgaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBJZ29yICBabGF0a292aWMKCSAgcHJvdmlkZWQgZml4ZXMgdG8gY29tcGlsZSBvbiBNU0NDIGFnYWluCgkqIHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kZWYuc3JjIHdpbjMyL2xpYnhtbDIvbGlieG1sMiouZHNwOiBoZQoJICBhbHNvIHByb3ZpZGVkIGFuIHVwZGF0ZSBmb3IgdGhlIHByb2plY3QgZmlsZXMuCgpUaHUgSnVuICA3IDIxOjUyOjEwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBhcHBsaWVkIFN0ZXZlIFRpbm5leSBwYXRjaCB0byB4bWxOZXdOc1Byb3AgdG8gZml4CgkgIGJ1ZyAjNTU4MTAKClRodSBKdW4gIDcgMjE6Mjk6MzkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbEdldE5zUHJvcCgpIHRvIGNsb3NlIGJ1ZyAjNTU2ODMKCSAgTm90ZSB0aGlzIHJlcXVpcmVzIGxpYnhzbHQgdG8gdXNlIGl0J3Mgb3duIGZ1bmN0aW9uIGluc3RlYWQuCgpUaHUgSnVuICA3IDE4OjA2OjM0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuYzogd2hlbiBpbiBhIHByZSBlbGVtZW50IG5vIGZvcm1hdHRpbmcgc3BhY2Ugc2hvdWxkCgkgIGJlIGFkZGVkLgoJKiB0ZXN0L0hUTUwvcHJlLmh0bWwgcmVzdWx0L0hUTUwvcHJlLmh0bWwqOiBhZGRlZCBhIHJlZ3Jlc3Npb24gdGVzdAoKVGh1IEp1biAgNyAxNzoyOTozOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogYWRkZWQgdGVzdHMgZm9yIHNpZ25hbCgpIGFuZCBzaWduYWwuaAoKRnJpIEp1biAgOCAxMDoxNzoxNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHJvYmVydCBwb2ludGVkIG91dCB4bWxYUGF0aE5JTkYgd2FzIG5vdCBpbml0aWFsaXplZAoKRnJpIEp1biAgOCAxMDowMTo0NSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy9saWJ4bWwtZG9jLmVsOiBGZWxpeCBOYXR0ZXIgcHJvdmlkZWQgYSBuZXcgdmVyc2lvbiBmb3IKCSAgbGlieG1sMgoKRnJpIEp1biAgOCAwNzoyMDo0NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLmM6IHdoZW4gaW4gYSBwcmUgZWxlbWVudCBubyBmb3JtYXR0aW5nIHNwYWNlIHNob3VsZAoJICBiZSBhZGRlZC4KCldlZCBKdW4gIDYgMTg6MDc6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGFkZCAtbWllZWUgdG8gQ0ZMQUdTIHdoZW4gY29tcGlsaW5nIG9uIExpbnV4L2FscGhhCgpUaHUgSnVuICA3IDA2OjQ0OjAxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogRE9DQnBhcnNlci5jOiBpbXBsZW1lbnRlZCB0aGUgPD9zZ21sLWRlY2xhcmF0aW9uIGVuY29kaW5nPSJ4eHgiPz4KCSAgaGFjawoJKiB0cmVlLltjaF06IGFkZGVkIHhtbEhhc05zUHJvcCBhcyBzdWdnZXN0ZWQgaW4gYnVnIHJlcG9ydCAjNTU2NTMgCgkqIHVyaS5jOiBmaXhlZCBhIHdhcm5pbmcKClR1ZSBKdW4gIDUgMjI6NTQ6MjEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5jOiB0cnlpbmcgdG8gY2xvc2UgYnVnICM1NTc3MiBlc2NhcGluZyBpbiBzY3JpcHQKCSAgZWxlbWVudHMKCSogZG9jL3htbC5odG1sOiBzdWdnZXN0IHRvIHNlbmQgbWFpbCB0byB0aGUgbGlzdAoKVHVlIEp1biAgNSAxOToxMTowMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGVycm9yLmM6IGF0dGVtcHQgdG8gZml4IHRoZSB4bWxHZXRWYXJTdHIgYnJlYWthZ2Ugb25jZSBhbmQgZm9yCgkgIGdvb2QuIFVzZSBhIG1hY3JvIGFuZCBiYXNlZCBvbiB0aGUgc29sdXRpb24gcHJvdmlkZWQgaW4gCgkgIHZzbnByaW50ZiBtYW51YWwgcGFnZSBmcm9tIEdOVS4KClR1ZSBKdW4gIDUgMTQ6NDY6MTAgQ0VTVCAyMDAxIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogZXJyb3IuYzogV29ya2Fyb3VuZCBmb3Igbm9uLXByZXNlcnZpbmcgdmFyaWFkaWMgbGlzdC4KCSogdHJpby5jIHRyaW8uaCB0cmlvcC5oIHN0cmlvLmMgc3RyaW8uaDogVXBncmFkZWQgdG8gdHJpbyBiYXNlbGluZSAxLjQKClNhdCBKdW4gIDIgMDY6MTI6MzMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+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+CgoJKiBTQVguYyBwYXJzZXIuYyB4cGF0aC5jOiBnZW5lcmF0aW5nIElEcyB3aGVuIG5vdCB2YWxpZGF0aW5nCgkgIGZyb20gYW4gZXh0ZXJuYWwgcGFyc2VkIGVudGl0eSB3YXMgcG9pc29uaW5nIHRoZSBJRCBoYXMgdGFibGUKCSAgd2l0aCByZW1vdmVkIHZhbHVlcy4gVGhpcyB3YXMga2lsbGluZyBYU0xUIG9uIHRoZSBLREUgaGVscAoJICBicm93c2VyLgoKV2VkIEFwciAxOCAxNzowOToxNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGVudGl0aWVzLmg6IGFuZHJld0B1Z2gubmV0LmF1IGRldGVjdGVkIGEgZG91YmxlIGRlY2xhcmF0aW9uCgpXZWQgQXByIDE4IDE1OjA2OjMwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZGVidWdYTUwuYyBoYXNoLmMgdHJlZS5oIHZhbGlkLmMgOiBzb21lIGNoYW5nZXMgcmVsYXRlZCB0bwoJICB0aGUgdmFsaWRhdGlvbiBzdXBvcnQgdG8gaW1wcm92ZSBzcGVlZCB3aXRoIERvY0Jvb2sKCSogcmVzdWx0L1ZDL09uZUlEMiByZXN1bHQvVkMvT25lSUQzIDogdGhpcyBzbGlnaHRseSBjaGFuZ2VzCgkgIHRoZSB3YXkgdmFsaWRhdGlvbiBlcnJvcnMgZ2V0IHJlcG9ydGVkCgpXZWQgQXByIDE4IDExOjQyOjQ3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jIEhUTUx0cmVlLmM6IGFwcGxpZWQgcGFydCBvZiB0aGUgcGF0Y2hlcyBwcm92aWRlZAoJICBieSBQIEMgQ2hvdyBhbmQgV2lsbGlhbSBNLiBCcmFjayBmb3IgWFNMVCBIVE1MIG91dHB1dAoKTW9uIEFwciAxNiAxOTo0NDozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbHZlcnNpb24uaC5pbiB3aW4zMmNvbmZpZy5oIHdpbjMyL2xpYnhtbDIvKjogYXBwbGllZCAKCSAgSWdvciBabGF0a292aWMgcGF0Y2hlcyBmb3IgTVNDIGNvbXBpbGF0aW9uIGFuZCBhZGRlZCBoaXMKCSAgdXBkYXRlcwoKVHVlIEFwciAxNyAxMDowODoxOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIHhtbFhQYXRoTm9kZUNvbGxlY3RBbmRUZXN0KCkgdG8gZG8gcHJvcGVyCgkgIHByZWZpeCBsb29rdXAuCgkqIHBhcnNlckludGVybmFscy5jOiBmaXhlZCB0aGUgYnVnIHJlcG9ydGVkIGJ5IE1vcnVzIFdhbHRlcgoJICBkdWUgdG8gYW4gb2ZmIGJ5IG9uZSB0eXBvIGluIHhtbFN0cmluZ0N1cnJlbnRDaGFyKCkKClRodSBBcHIgMTIgMTc6NDE6MDkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmMgcmVzdWx0L0hUTUwvKjogcmV2YW1wZWQgdGhlIHdheSB0aGUgSFRNTAoJICBwYXJzZXIgaGFuZGxlcyBlbmQgb2YgdGFncyBvciBlbmQgb2YgaW5wdXQKClRodSBBcHIgMTIgMTA6NTA6MzQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLltjaF0gOiBhZGRlZCB4bWxEb2NDb3B5Tm9kZSBmb3IgZ2RvbWUyIHN1cHBvcnQKCldlZCBBcHIgMTEgMTY6Mzc6NTAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmg6IGluY2x1ZGUgeG1sbWVtb3J5LmggdGhpcyBzZWVtcyB0byBoYXZvaWQgYSBuYXN0eSBnbGliYwoJICBidWcgd2hlcmUgdGhlIGxpbmt0aW1lIHZlcmlvbnMgb2YgZnJlZSgpIHdvbid0IHdvcmsgLi4uCgpXZWQgQXByIDExIDE0OjIxOjMxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlnLmguaW4gY29uZmlndXJlLmluIHhtbHZlcnNpb24uaC5pbjogYWRkZWQgYW5zaWRlY2wuaCB0ZXN0CgpXZWQgQXByIDExIDEzOjUwOjQyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL3htbC5odG1sOiBhZGRlZCAyLjMuNiByZWxlYXNlCgpXZWQgQXByIDExIDEzOjI2OjM0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBmaXhlZCB4bWxTdHJpbmdHZXROb2RlTGlzdCgpIHRvIGhhbmRsZSBjaGFycmVmcwoJKiByZXN1bHQvd21sLnhtbDogcmVzdWx0ZWQgaW4gYSBzbWFsbCBvdXRwdXQgY2hhbmdlCgpXZWQgQXByIDExIDA5OjQ3OjU1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiB4bWxOZXdEb2Mgd2FzIG1pc3NpbmcgdGhlIGNoYXJzZXQgaW5pdGlhbGl6YXRpb24KCSogeG1sbGludC5jOiBhZGRlZCAtLWF1dG8gdG8gYXV0b2dlbmVyYXRlIGEgZG9jLCBhbGxvdyB0bwoJICByZXByb2R1Y2UgdGhlIHByb2JsZW0gZml4ZWQgb24geG1sTmV3RG9jCgpUdWUgQXByIDEwIDE4OjEzOjEwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogdHJ5aW5nIHRvIGdldCA1Mjk3OSBzb2x2ZWQKCSogdHJlZS5jIHJlc3VsdC8gcmVzdWx0L25vZW50LzogdHJ5aW5nIHRvIGdldCA1MjcxMiBzb2x2ZWQsIHRoaXMKCSAgYWxzbyBtYWRlIG1lIGNsZWFuIHVwIHRoZSBmYWN0IHRoYXQgWE1MIG91dHB1dCBpbiBnZW5lcmFsIHNob3VsZAoJICBub3QgYWRkIGZvcm1hdGluZyBibGFua3MgYnkgZGVmYXVsdCwgdGhpcyBjaGFuZ2VkIHRoZSBvdXRwdXQgb2YKCSAgYSBmZXcgdGVzdHMKClR1ZSBBcHIgMTAgMTY6MzA6MjAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBCaWxsIEJyYWNrIHBvaW50ZXIgYW4gZXJyb3IgaW4gZGV0ZWN0aW5nIGEgbnVsbCBub2Rlc2V0CgpTdW4gQXByICA4IDE1OjA3OjE2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBmaW5hbGx5IHJlbGVhc2VkIDIuMy42CgpTdW4gQXByICA4IDExOjM5OjIxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogY2hlY2tpbmcgZm9yIG51bGwgcG9pbnRlciBnZW5lcmF0ZWQgYnkgbmV3IGNvZGUKCkZyaSBBcHIgIDYgMTI6NTM6MDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCBhIFtdIGV2YWx1YXRpb24gcHJvYmxlbSByZXBvcnRlZAoJKiB0ZXN0L1hQYXRoL3Rlc3RzL3NpbXBsZWFkZHI6IGV4dGVuZGVkIHRlc3QKCSogcmVzdWx0L1hQYXRoL3NpbXBsZWFkZHI6IHVwZGF0ZWQgcmVzdWx0CgpXZWQgQXByICA0IDAyOjA3OjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sbGludC5jOiBEYW4gVGltaXMgcmVwb3J0ZWQgYSBwb3J0YWJpbGl0eSBwcm9ibGVtCgkgIG9uIE1hY3Mgd2l0aG91dCBtbWFwLCBmaXhlZCBpdC4KClR1ZSBBcHIgIDMgMjA6MjA6NTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0ZXN0WFBhdGguYyA6IGFkZGVkIGEgLS10cmVlIG9wdGlvbiBhbGxvd2luZyB0byBkaXNwbGF5IHRoZQoJICB0cmVlIGR1bXAgb2YgdGhlIFhQYXRoIGV4cHJlc3Npb24KCk1vbiBBcHIgIDIgMTc6MTM6NTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCBhIG1lbWxlYWsgd2hlbiBjb21wYXJpbmcgbm9kZXNldHMKCSogSFRNTHRyZWUuYzogZG9uJ3QgaW52ZW50IHRoZSBIVE1MIGRvY3R5cGUgaWYgbm90IGF2YWlsYWJsZSAoWFNMVCkKCSogdHJlZS5jOiBhZGRlZCBhIFRPRE8KClR1ZSBNYXIgMjcgMTQ6MzI6MDYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW0gY29uZmlnLmguaW4geG1sdmVyc2lvbi5oLmluOiBkZXRlY3QgaWYKCSAgd2UgbmVlZCBzdHJpbmcgZnVuY3Rpb25zCgkqIHRyaW8uW2NoXSBzdHJpby5bY2hdOiBlbWJlZGRlZCB0aGUgVHJpby0wLjIzIHN0cmluZyBmdW5jdGlvbnMKCSAgdG8gYmUgYWJsZSB0byB1c2UgdGhlbSB3aGVyZSBuZWVkZWQuIEFwcGxpZWQgc29tZSBjaGFuZ2VzCgkgIHRvIHJlZHVjZSBuYW1lIGxpbmtpbmcgcG9sbHV0aW9uIGFuZCBjb21waWxlIGluIG9ubHkgd2hhdCdzCgkgIG5lZWRlZC4KCSogSFRNTHRyZWUuYyBkZWJ1Z1hNTC5jIGVudGl0aWVzLmMgZXJyb3IuYyBuYW5vZnRwLmMgdmFsaWQuYwoJICB4bGluay5jIHhtbHZlcnNpb24uaC5pbiB4cGF0aC5jOiBnb3QgcmlkIG9mIHRoZSAjaWZkZWYgCgkgIGZvciB0aGUgc3RyaW5nIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMKCSogeG1sbWVtb3J5LltjaF06IHJlbW92ZWQgREVCVUdfTUVNT1JZX0ZSRUVEIGFuZCBhZGRlZCBpdCBhdXRvbWF0aWNhbGx5CgkgIHRvIHRoZSBmcmVlKCkgZnVuY3Rpb24gb2YgeG1sbWVtb3J5LmMKCSogZW50aXRpZXMuYyBIVE1MdHJlZS5jIHBhcnNlckludGVybmFscy5jIHRyZWUuYyB1cmkuYyB2YWxpZC5jCgkgIHhpbmNsdWRlLmMgeG1sSU8uYyB4cGF0aC5jIHhwb2ludGVyLmM6IHJlbW92ZWQgdGhlIE1FTV9DTEVBTlVQCgkgIHVzYWdlLgoKVHVlIE1hciAyNyAwMjozMDoyMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGVycm9yLmM6IGFwcGxpZWQgdGhlIGNvbnRleHQgb3V0cHV0IHBhdGNoIG9mIHRoZSBlcnJvcgoJICBoYW5kbGluZyBzdWJtaXR0ZWQgYnkgQ2h1Y2sgR3JpZmZpdGgKCSogZXJyb3IvVkMvKjogdGhpcyBzbGlnaHRseSBjaGFuZ2Ugc29tZSBlcnJvciBsb2dzCgpUdWUgTWFyIDI3IDAwOjUxOjI3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVkIGxpbmUgbnVtYmVyIHJlcG9ydGluZyBvbiBlcnJvcgoKTW9uIE1hciAyNiAyMzoyMTo0MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBTdWxsaXZhbiBhbmQgRGFyaW4gZm91bmQgYSBwYXJzZXIgYnVnLAoJICBhcHBsaWVkIHRoZSBwYXRjaC4KCk1vbiBNYXIgMjYgMTg6MjQ6NTIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYyBTQVguYyBkZWJ1Z1hNTC5jIGVycm9yLmMgcGFyc2VySW50ZXJuYWxzLmMKCSAgdGVzdEhUTUwuYyB0ZXN0U0FYLmMgdHJlZS5jIHZhbGlkLmMgeG1sSU8uYyB4bWxtZW1vcnkuYwoJICB4bWx2ZXJzaW9uLmguaW4geHBvaW50ZXIuYzogb2YgY291cnNlIHRoZSB3YXkgSSBkZWZpbmVkCgkgIFVOVVNFRCBicmVha3Mgb24gb2xkIGdjYyB2ZXJzaW9uLiBUcnkgdG8gYmUgc21hcnQgYW5kCgkgIGFsc28gZGVmaW5lIGl0IGRpcmVjdGx5IGluIHhtbHZlcnNpb24uaAoJKiBjb25maWd1cmUuaW46IHJlbW92ZWQgLWFuc2kgZmxhZyBmcm9tIHRoZSBwZWRhbnRpYyBzZXQKClNhdCBNYXIgMjQgMTc6NDU6MzYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCUh1Z2UgY2xlYW51cCwgSSBzd2l0Y2hlZCB0byBjb21waWxlIHdpdGgKCS1XYWxsIC1nIC1PIC1hbnNpIC1wZWRhbnRpYyAtVyAtV3VudXNlZCAtV2ltcGxpY2l0CgktV3JldHVybi10eXBlIC1Xc3dpdGNoIC1XY29tbWVudCAtV3RyaWdyYXBocyAtV2Zvcm1hdAoJLVdjaGFyLXN1YnNjcmlwdHMgLVd1bmluaXRpYWxpemVkIC1XcGFyZW50aGVzZXMgLVdzaGFkb3cKCS1XcG9pbnRlci1hcml0aCAtV2Nhc3QtYWxpZ24gLVd3cml0ZS1zdHJpbmdzIC1XYWdncmVnYXRlLXJldHVybgoJLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25lc3RlZC1leHRlcm5zIC1XaW5saW5lCgkqIEhUTUxwYXJzZXIuW2NoXSBIVE1MdHJlZS5jIFNBWC5jIGRlYnVnWE1MLmMgZW5jb2RpbmcuW2NoXQoJICBlbmNvZGluZy5oIGVudGl0aWVzLmMgZXJyb3IuYyBsaXN0LltjaF0gbmFub2Z0cC5jCgkgIG5hbm9odHRwLmMgcGFyc2VyLltjaF0gcGFyc2VySW50ZXJuYWxzLltjaF0gdGVzdEhUTUwuYwoJICB0ZXN0U0FYLmMgdGVzdFVSSS5jIHRlc3RYUGF0aC5jIHRyZWUuW2NoXSB1cmkuYwoJICB2YWxpZC5bY2hdIHhpbmNsdWRlLmMgeG1sSU8uW2NoXSB4bWxsaW50LmMgeG1sbWVtb3J5LmMKCSAgeHBhdGguYyB4cGF0aEludGVybmFscy5oIHhwb2ludGVyLltjaF0gZXhhbXBsZS9nam9icmVhZC5jOgoJICBDbGVhbnVwLCBzdGF0aWNmaWVkIGEgbnVtYmVyIG9mIG5vbi1leHBvcnRlZCBmdW5jdGlvbnMsCgkgIGRldGVjdGVkIGFuZCBjbGVhbmVkIHVwIGEgZG96ZW4gb2YgcHJvYmxlbSBmb3VuZCB0aGlzIHdheSwKCSAgYXZvaWRlZCBhIGxvdCBvZiBwdWJsaWMgZnVuY3Rpb24gbmFtZS90eXBlZGVmL3N5c3RlbSBuYW1lcyBjbGFzaGVzCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZAoJKiBjb25maWd1cmUuaW46IHN3aXRjaGVkIHByaXZhdGUgZmxhZ3MgdG8gdGhlIHJlYWxseSBwZWRhbnRpYyBvbmVzLgoKVGh1IE1hciAyMiAyMjo0NDoxNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiAyLjMuNQoJKiBkb2MvaHRtbC8qOiByZWJ1aWx0IHRoZSBkb2NzCgpUaHUgTWFyIDIyIDE1OjM2OjQ1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+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+CgoJKiB4bWxJTy5jICh4bWxGaWxlT3BlbiwgeG1sRmlsZU9wZW5XKTogUmVtb3ZlZCB1bm5lY2VzYXJ5IGNoZWNrcy4KCgkqIHhtbElPLmMgKHhtbENoZWNrRmlsZW5hbWUpOiBGdW5jdGlvbiBhZGRlZCB0byBrbm93IHdoZXRoZXIgYSBnaXZlbgoJICBmaWxlbmFtZSBwb2ludHMgdG8gYSB2YWxpZCBmaWxlIChub3QgYSBkaXJlY3RvcnkpLgoJKiB4bWxJTy5jICh4bWxGaWxlT3BlbiwgeG1sRmlsZU9wZW5XLCB4bWxHemZpbGVPcGVuLCB4bWxHemZpbGVPcGVuVyk6CgkgIEFkZGVkIGNhbGxzIHRvIHhtbENoZWNrRmlsZW5hbWVEaXIuCgoJKiB4bWxJTy5jICh4bWxHemZpbGVPcGVuLCB4bWxHemZpbGVPcGVuVywgeG1sRmRPcGVuLCB4bWxGZE9wZW5XKTogUGFzcwoJICBgcGF0aCcgKHJhdGhlciB0aGFuIGBmaWxlbmFtZScpIGFzIHRoZSBwYXJhbWV0ZXIgdG8gZ3pvcGVuIGFuZCBvcGVuLgoKVHVlIEphbiAyMyAxNjoyNjozMCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IGZpeGVkIGEgcHJvYmxlbSB3aXRoIEVYVFJBX0RJU1QKCk1vbiBKYW4gMjIgMjM6NDI6MTcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtIGV4YW1wbGUvTWFrZWZpbGUuYW06IGZpbmFsbHkgZm91bmQgdGhlIHRyaWNrCgkgIHRvIGJ1aWxkIHRoZSBleGFtcGxlLCBpLmUuIGFkZCAiLiIgaW4gU1VCRElSUyBiZWZvcmUgZXhhbXBsZQoJICBpbiB0aGUgbGlzdCA8Z3Jpbi8+CgpNb24gSmFuIDIyIDE2OjMwOjM3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQgd2l0aCBhbiBYU0xUIHNlY3Rpb24sIHJlbW92ZWQgcG9pbnRlciB0bwoJICBXM0MgQ1ZTIGJhc2UuCgpNb24gSmFuIDIyIDExOjQzOjIxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiB3aGVuIGNvcHlpbmcgYSBYU0xUIHRyZWUgb2JqZWN0IHRlaCB0cmVlIG5lZWQgdG8gYmUgY29waWVkCgkgIHRvbywgYW5kIGRlYWxsb2NhdGlvbiBuZWVkIHRvIG9jY3VyIHRoZSBzYW1lIHdheS4KCk1vbiBKYW4gMjIgMTA6MzU6NDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoSW50ZXJuYWxzLmggeHBhdGguW2NoXSBkZWJ1Z1hNTC5jOiBhZGRlZCB0aGUgWFBBVEhfWFNMVF9UUkVFCgkgIHR5cGUgY29ycmVwb25kaW5nIHRvIGFuIFhTTFQgcmVzdWx0IHRyZWUgZnJhZ21lbnQuIFNoYXJlIG1vc3QKCSAgb2YgdGhlIGRhdGEgZm9ybWF0IHdpdGggbm9kZSBzZXQsIGFzIHdlbGwgYXMgb3BlcmF0b3JzLgoJKiBIVE1MdHJlZS5jOiBhZGRlZCBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgZG9jdHlwZSBvdXRwdXQKCSAgd2hlIHRoaXMgb25lIGlzIG5vdCBwcmVzZW50IGluaXRpYWxseS4KCSogdHJlZS5jOiBtYWtlIHN1cmUgdGFodCB0aGUgcGFyZW50IGFuZCBkb2MgcG9pbnRlcnMgYXJlIHByb3Blcmx5CgkgIHNldCB3aGVuIGNvcHlpbmcgYXR0cmlidXRlcyAobGlzdHMpLgoKU3VuIEphbiAyMSAxMDo0NzozOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaHRtbFRyZWUuW2NoXSB4bWxJTy5oOiBleHBvcnRlZCBodG1sRG9jQ29udGVudER1bXBPdXRwdXQKCkZyaSBKYW4gMTkgMTg6MTU6NTAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHNlZW1zIEkgZmluYWxseSBraWxsZWQgdGhhdCB1Z2x5IHBhdGggZXZhbHVhdGlvbgoJICBjb250ZXh0IGJ1ZyAodGFnZ2VkIDk5OTkgaW4gY2FzZSBpcyBpcyB3cm9uZykKCkZyaSBKYW4gMTkgMDY6MzA6MzggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLltjaF0geHBhdGhJbnRlcm5hbHMuaDogYWRkZWQgeG1sWFBhdGhSZWdpc3RlclZhcmlhYmxlTG9va3VwKCkKCSAgZm9yIFhTTFQKClRodSBKYW4gMTggMTY6MTk6NDcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbElPLmM6IEdhcnkgUGVubmluZ3RvbiA8R2FyeS5QZW5uaW5ndG9uQHVrLnN1bi5jb20+IGZpeAoJICBmb3IgeG1sR3pmaWxlT3BlbigpIGJ1ZwoKVGh1IEphbiAxOCAxMzoxMTo1MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogcmVtb3ZlZCBhbiBlcnJvciBmb3VuZCBieSBYU0xUIHVzYWdlCgkqIHRyZWUuYyBwYXJzZXJJbnRlcm5hbHMuaDogdXNlIGEgcHJlZGVmaW5lZCBzdGF0aWMgc3RyaW5nCgkgIGZvciB0ZXh0IGFuZCBjb21tZW50IG5vZGVzLCBhdm9pZCBmcmVlaW5nIHRoZW0gaW4geG1sRnJlZU5vZGUsCgkgIGV4cG9ydGVkIHRoZSBzdHJpbmcgbmFtZSBpbiBwYXJzZXJJbnRlcm5hbHMuaCBhbmQgYWRkZWQKCSAgYW5vdGhlciB2YWx1ZSB0byBkaXNhYmxlIGVuY29kaW5nIGF0IG91dHB1dCAoZm9yIFhTTFQpLAoJICBnYWluIG1lbW9yeSwgdGltZS4KCldlZCBKYW4gMTcgMDk6MTU6MTYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHdpbjMyL1JFQURNRS5NU0RldiB3aW4zMi9saWJ4bWwyL2xpYnhtbDJfYS5kc3AKCSAgd2luMzIvbGlieG1sMi9saWJ4bWwyX3NvLmRzcDogbmV3IG1ha2VmaWxlcyBhbmQgdXBkYXRlCgkgIHByb3ZpZGVkIGJ5IElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKVHVlIEphbiAxNiAxODoyNDo0NiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jIDogeG1sU2F2ZUZpbGUsIHhtbFNhdmVGaWxlRW5jLCBhcHBsaWVkIHBhdGNoIGZyb20gCgkgIEdhcnkgUGVubmluZ3RvbgoKTW9uIEphbiAxNSAyMDoyNDoxOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgdGhlIGNvbWFwcmlzaW9uIG9mIHZhbHVlcyBhbmQgbm9kZWxpc3RzLAoJICBuZWVkIHRvIGNvbXBhcmUgbm9kZWxpc3Qgc3RpbGwgLi4uCgkqIGRlYnVnWE1MLmM6IGF2b2lkZWQgYSBwb3NzaWJsZSBjb3JlIGR1bXAKCSogSFRNTHBhcnNlci5jOiBjbGVhbnVwCgkqIG5hbm9odHRwLmM6IGNvbnRyaWJ1dGVkIGZpeC4KCSogdHJlZS5jOiBmaXhlcyBpbiBwcm9wZXJ0aWVzIGhhbmRsaW5nIGFkZGVkIHhtbFNldE5zUHJvcAoJICBuZWVkZWQgYnkgbGlieHNsdAoJKiB4cGF0aEludGVybmFscy5oOiBleHBvcnRlZCB4bWxYUGF0aEJvb2xlYW5GdW5jdGlvbiwgYWRkZWQgYSAKCSAgY29tbWVudAoJKiBUT0RPOiB1cGRhdGVkCgpTYXQgSmFuICA2IDIyOjA1OjA5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYzogYXBwbGllZCBCam9ybiBSZWVzZSBvcHRpbWl6YXRpb24KCSAgcGF0Y2gKClNhdCBKYW4gIDYgMTk6MTM6MjcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtOiBhcHBsaWVkIHBhdGNoIGZybyBtYWtlIGNoZWNrIGZyb20gTWFydGluIFZpZG5lcgoKVGh1IEphbiAgNCAxOTowNzo0OSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi4yLjExCgkqIGRvYy9odG1sLyo6IHJlYnVpbGQgdGhlIEhUTUwgZmlsZXMKCSogZG9jL3htbC5odG1sIDogdXBkYXRlZAoKVGh1IEphbiAgNCAxNDowOTo1OCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBmaXhlZCBhIHN0dXBpZCBidWcKCSogdmFsaWQuYzogYXBwbGllZCAiUGF1bCBELiBTbWl0aCIgPHBhdXNtaXRoQG5vcnRlbG5ldHdvcmtzLmNvbT4KCSAgcGF0Y2hlcyByZWxhdGVkIHRvIHZhbGlkYXRpb24gb2YgYW4gWEluY2x1ZGUgcHJvY2Vzc2luZyByZXN1bHQKCSogVE9ETzogdXBkYXRlZAoKVGh1IEphbiAgNCAxMTo0Njo0MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZW5jb2RpbmcuYyB4bWxJTy5jOiBGaXhpbmcgdGhlIHByb2JsZW0gcmVwb3J0ZWQgYnkgTWFyYyBTYW5mYWNvbgoJICBvbiBsYXJnZSBmaWxlcwoKV2VkIEphbiAgMyAyMTo1MToxMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sSU8uYzogZml4ZWQgeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVNZW0gZG9jCgpXZWQgSmFuICAzIDE4OjU2OjAwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmM6IGh0bWxDaGVja1BhcmFncmFwaCB0byBjaGVjayBodG1sT21pdHRlZERlZmF1bHRWYWx1ZSwKCSAgcmVwb3J0ZWQgYnkgSm9uYXMgQm9yZ3N0cvZtCgkqIG5hbm9odHRwLmM6IEFwcGxpZWQgQmpvcm4gUmVlc2UnIElQVjYgZmlyc3QgcGF0Y2gKCldlZCBKYW4gIDMgMTY6MTk6MzkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRlc3RYUGF0aC5jIHhwYXRoLmM6IGZpeGluZyB0aGUgWFBhdGggdW5pb24gZXhwcmVzc2lvbnMgcHJvYmxlbQoJICByZXBvcnRlZCBieSAgTWFydGluIFZpZG5lciA8bWFydGluQGFydGF4Lmthcmxpbi5tZmYuY3VuaS5jej4KCldlZCBKYW4gIDMgMTQ6MjI6MzMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbGxpbnQuYzogTWFkZSBpcyBzbyBpZiB0aGUgZmlsZSBuYW1lIGlzICItIiBpcyB3aWxsIHJlYWQgZm9ybQoJICBzdGFuZGFyZCBpbnB1dC4gU3ZlbiBIZWluaWNrZSAgPHN2ZW5AemVuLm9yZz4KCSogdHJlZS5jOiBmaXhlZCBhIHByb2JsZW0gd2hlbiBncm93aW5nIGJ1ZmZlcgoJKiB0cmVlLmg6IGZpeGVkIHRoZSBjb21tZW50IG9mIHRoZSBub2RlIHR5cGVzIGZvbGxvd2luZyBhbmRlcnNjYQoJICBjb21tZW50CgkqIFRPRE86IHVwZGF0ZWQKCldlZCBEZWMgMjcgMTI6MzU6NDkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5bY2hdOiBhZGRlZCBhIHdheSB0byBhdm9pZCBhZGRpbmcgYXV0b21hdGljYWxseQoJICBvbWl0dGVkIHRhZ3MuIGh0bWxIYW5kbGVPbWl0dGVkRWxlbSgpIGFsbG93cyB0byBjaGFuZ2UgdGhlCgkgIGRlZmF1bHQgaGFuZGxpbmcuCgkqIHRyZWUuW2NoXSB4bWxsaW50LmM6IGFkZGVkIHhtbERvY0R1bXBGb3JtYXRNZW1vcnkoKSBhbmQgCgkgIHhtbERvY0R1bXBGb3JtYXRNZW1vcnlFbmMoKSwgdXNlcyBtZW1vcnkgZnVuY3Rpb25zIGZvciBvdXRwdXQKCSAgb2YgeG1sbGludCB0b28gd2hlbiB1c2luZyAtLW1lbW9yeSBmbGFnLCBhZGRlZCBhIG1lbW9yeSB0ZXN0CgkgIHN1aXRlIGF0IHRoZSBNYWtlZmlsZSBsZXZlbC4KCSogeHBhdGhJbnRlcm5hbHMuaCB4cGF0aC5bY2hdIHhwb2ludGVyLmM6IGZpeGVkIHByb2JsZW1zCgkgIHdpdGggbmFtZXNwYWNlIHVzZSB3aGVuIGVuY291bnRlcmluZyBRTmFtZXMgaW4gWFBhdGggZXZhbGF0aW9uLAoJICBhZGRlZCB4bWxucygpIHNjaGVtZSBpbiBYUG9pbnRlci4KCSogbmFub2Z0cC5jIDogaW5jb3Jwb3JhdGVkIGEgZml4CgkqIHBhcnNlci5jIHhtbElPLmM6IGZpeGVkIHByb2JsZW1zIHJhaXNlZCB3aXRoIGVuY29kaW5nIHdoZW4gdXNpbmcKCSAgdGhlIG1lbW9yeSBJL08KCSogcGFyc2VySW50ZXJuYWxzLmM6IGNsb3NlZCBidWcgMjU5MzQgcmVwb3J0ZWQgYnkgCgkgIHRvcnN0ZW4ubGFuZHNjaG9mZkBpbm5vbWluYXRlLmRlCgkqIFRPRE86IHVwZGF0ZWQKClNhdCBOb3YgMjUgMTE6NDY6MjcgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluIGRvYy9odG1sLyogZG9jL3htbC5odG1sOiBtYWRlIGEgMi4yLjkgcmVsZWFzZQoJICBvbiBhIG5vbi11cGRhdGVkIHRyZWUgOi0oLCBtYWRlIGEgMi4yLjEwIHJlbGVhc2UgdG8gY29ycmVjdCB0aGUKCSAgc2l0dWF0aW9uCgpTYXQgTm92IDI1IDEwOjQxOjM3IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9odHRwLmMgcGFyc2VyLltjaF0gdHJlZS5bY2hdIHhtbElPLltjaF0geG1sbGludC5jIHhwYXRoLmMKCSAgcGFyc2VySW50ZXJuYWxzLmggdm1zL2J1aWxkX2xpYnhtbC5jb20gdm1zL2NvbmZpZy52bXMgTWFrZWZpbGUuYW06CgkgIGludGVncmF0ZWQgYSBzZXQgb2YgT3BlblZNUyBjaGFuZ2VzIGZyb20gSG93YXJkIFRheWxvcgoJICA8SG93YXJkLlRheWxvckBwYWNvYXN0LmNvbT4KClNhdCBOb3YgMjUgMDE6MjE6MDEgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdIHhtbElPLmM6IGFkZGVkIHhtbERvY0R1bXBNZW1vcnlFbmMoKSBmcm9tIEpvaG4gS3JvbGwKCSogZXJyb3IuYzogYXBwbGllZCBmaXggc3VnZ2VzdGVkIGJ5ICJMZW8gRGF2aWRzb24iIDxsZW9Ab3guY29tcHNvYy5uZXQ+CgpTYXQgTm92IDI1IDAwOjI0OjQ5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogc29tZSBmaXhlcyBvbiBhdXRvLW9wZW4gb2YgaHRtbC9oZWFkL2JvZHkKCSogZW5jb2RpbmcuYzogZml4ZWQgYSBjb21waWxhdGlvbiBlcnJvciBvbiBzb21lIGdjYyBlbnYKCSogeHBhdGguYyB4cG9pbnRlci5bY2hdIHhwYXRoSW50ZXJuYWxzLmg6IGltcHJvdmVkIHRoZQoJICBYUG9pbnRlciBpbXBsZW1lbnRhdGlvbgoJKiB0ZXN0L1hQYXRoL3hwdHIvc3RycG9pbnQgdGVzdC9YUGF0aC94cHRyL3N0cnJhbmdlMzogYWRkZWQKCSAgcmVsYXRlZCBYUG9pbnRlciB0ZXN0cyBhbmQgYXNzb2NpYXRlZCByZXN1bHRzCgpGcmkgTm92IDI0IDE0OjAxOjQ0IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWxkdGQuaHRtbCBkb2MveG1sLmh0bWw6IGZvbGxvd2luZyBhIHNob3J0IHN0ZXAgYnkgc3RlcAoJICBndWlkYW5jZSBvbiBJUkMgdG8gaGVscCBtYWNpZWogd2l0aCBEVERzIEkgc3RhcnRlZCBhIHNtYWxsCgkgIHBhZ2Ugb24gdGhlIHN1YmplY3QuCgpGcmkgTm92IDE3IDE3OjI4OjA2IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgaGFuZGxpbmcgb2YgYnJva2VuIGNoYXJyZWZzCgkqIHhtbG1lbW9yeS5oIGxpYnhtbDIuZHNwIGluY2x1ZGUvd2luMzJjb25maWcuaDogcmVwb3J0aW5nIFdpbmRvd3MKCSAgcGF0Y2hlcwoKTW9uIE5vdiAxMyAxOToxNzoyMCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgZG9jL2h0bWwvKiA6IHJlYnVpbHQgdGhlIGRvY3MgYWZ0ZXIgYWRkaW5nCgkgIHhpbmNsdWRlIGFuZCB1cGRhdGVkIHBhZ2UgZm9yIDIuMi43IGFuZCAyLjIuOAoJKiBjb25maWd1cmUuaW46IHJlbGVhc2luZyAyLjIuOAoKTW9uIE5vdiAxMyAxMjozOTozOCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXSBwYXJzZXJJbnRlcm5hbHMuYzogYXBwbGllZCB0aGUgY29uZGl0aW9uYWwKCSAgc2VjdGlvbiBwcm9jZXNzaW5nIGZpeCBmcm9tIEpvbmF0aGFuIFAgU3ByaW5nZXIKCSAgPGpvbmF0aGFuLnNwcmluZ2VyMkBndGUubmV0PgoJKiB4bWx2ZXJzaW9uLmguaW4gd2luMzIvbGlieG1sMi9saWJ4bWwyLmRzcCA6IFVwZGF0ZWQgTVMKCSAgcHJvamVjdCBmaWxlLCBmaXhlZCBpY29udiBkZWZhdWx0IG5vbiBzdXBwb3J0CgkqIHhwYXRoLmM6IGZpeGVkIHRoZSBwcm9ibGVtIG9mIGV2YWx1YXRpbmcgcmVsYXRpdmUgZXhwcmVzc2lvbnMKCSAgd2hlbiBhIG5vZGUgY29udGV4dCBpcyBwcm92aWRlZC4KClN1biBOb3YgMTIgMTY6MzE6MTkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jOiBmaXhlZCBnY2MgMi45NSBuZXcgd2FybmluZ3MKCSogU0FYLmM6IGZpeGVkIGEgc3R1cGlkIGJ1ZwoJKiB0cmVlLmM6IGZpeGVkIGEgZm9ybWF0dGluZyBwcm9ibGVtIHdoZW4gcm91bmQtdHJpcHBpbmcKCSAgZnJvbS90byBtZW1vcnkKCSogeGluY2x1ZGUuYzogY2hhc2VkIG1lbWxlYWssIGZpeGVkIGEgYmFzZSBwcm9ibGVtCgkqIHhwb2ludGVyLmM6IGFkZGVkIHhtbFhQdHJCdWlsZFJhbmdlTm9kZUxpc3QoKSwgZmluaXNoZWQgPyAKCSAgeG1sWFB0ckJ1aWxkTm9kZUxpc3QoKQoJKiBUT0RPOiB1cGRhdGVkCgkqIE1ha2VmaWxlLmFtIHRlc3QvWEluY2x1ZGUvZG9jcyB0ZXN0L1hJbmNsdWRlL2VudHMgcmVzdWx0L1hJbmNsdWRlOgoJICBhZGRpbmcgYSBmaXJzdCBzbWFsbCBzZXQgb2YgcmVncmVzc2lvbiB0ZXN0cyBmb3IgWEluY2x1ZGUKClR1ZSBOb3YgIDcgMTU6MTE6MzQgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuW2NoXTogYXBwbGllZCBXYXluZSBEYXZpc29uIHBhdGNoZXMgdG8gYWNjZXNzCgkgIHRoZSBXV1ctQXV0aG9yaXphdGlvbiBoZWFkZXIuCgkqIHBhcnNlci5jOiBDbG9zZWQgQnVnIzMwODQ3OiBQcm9ibGVtcyB3aGVuIHN3aXRjaGluZyBlbmNvZGluZwoJICBpbiBzaG9ydCBmaWxlcyBieSBhcHBseWluZyBTaW1vbiBCZXJnJ3MgcGF0Y2guCgkqIHZhbGlkLmM6IGZpeGVkIGEgdmFsaWRhdGlvbiBwcm9ibGVtCgkqIGhhc2guYyBwYXJzZXIuaCBwYXJzZXJJbnRlcm5hbHMuaCB0ZXN0SFRNTC5jIHRlc3RTQVguYyB0cmVlLmgKCSAgeG1sZXJyb3IuaCB4bWxtZW1vcnkuaCB4bWx2ZXJzaW9uLmguaW46IGFwcGxpZWQgYSBETEwgcGF0Y2ggZnJvbQoJICBXYXluZSBEYXZpc29uCgkqIHhwb2ludGVyLltjaF06IGFkZGVkIGZpcnN0IHZlcnNpb24gb2YgeG1sWFB0ckJ1aWxkTm9kZUxpc3QoKQoJICBuZWVkIHRvIGJlIGV4dGVuZGVkIHRvIG5vbiBmdWxsIG5vZGVzIHNlbGVjdGlvbnMuCgkqIHhpbmNsdWRlLmM6IHN0YXJ0cyB0byB3b3JrIGRlY2VudGx5CgpNb24gTm92ICA2IDE3OjIyOjQ2IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXSB4aW5jbHVkZS5bY2hdIHhtbGxpbnQuYyBjb25maWd1cmUuaW4gdmFsaWQuYwoJICBkZWJ1Z1hNTC5jIHhtbHZlcnNpb24uaC5pbjogU3RhcnRlZCBhZGRpbmcgWEluY2x1ZGUgc3VwcG9ydCwKCSAgdGhpcyBpcyBhIG5ldyB4bWxsaW50IG9wdGlvbgoJKiB0cmVlLmMgeHBhdGguYzogYXBwbGllZCBUT00gcGF0Y2hlcyBmb3IgWFBhdGgKCSogeHBvaW50ZXIuYzogZml4ZWQgYSBjb3VwbGUgb2YgZXJyb3JzLgoJKiB1cmkuYzogYWRkZWQgYW4gZXNjYXBpbmcgZnVuY3Rpb24gbmVlZGVkIGZvciB4aW5jbHVkZQoJKiB0ZXN0WFBhdGguYyBoYXNoLmMgSFRNTHRyZWUuYzogbWlub3IgY2xlYW51cHMgcmFpc2VkIGJ5CgkgIG5ldyB3YXJuaW5nIGZyb20gUkg3MCBnY2MncyB2ZXJzaW9uCgpUdWUgT2N0IDMxIDE0OjE0OjEzIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgbG9vcCBvbiBpbnZhbGlkIGNoYXIgaW4gc2NyaXB0cwoJKiBwYXJzZXIuYzogdXBkYXRlIHRvIGRlc2NyaXB0aW9uIG9mIHhtbElPUGFyc2VEVEQoKQoJKiBsaWJ4bWwubTQgeG1sdmVyc2lvbi5oLmluOiBjaGFuZ2VzIGNvbnRyaWJ1dGVkIGJ5CgkgIE1pY2hhZWwgU2NobWVpbmcgPG0uc2NobWVpbmdAaW50ZXJuZXQtZmFjdG9yeS5kZT4KCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgZm9yIDIuMi43CgkqIE1ha2VmaWxlLmFtOiB0cnlpbmcgdG8gYXZvaWQgIGNvbmZpZy5oIGFuZCBhY2NvbmZpZy5oCgkgIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBkaXN0cmliCgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzZWQgMi4yLjcKCk1vbiBPY3QgMzAgMTc6MDg6MTAgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdIGRlYnVnWE1MLmMgcGFyc2VySW50ZXJuYWxzLmMgeHBhdGguYzogRGVwcmVjYXRlZCBQaSdzCgkgIGxpa2UgbmFtZXNwYWNlcyBmb3IgZ29vZC4gVW5pZmllZCB4bWxOcyBhbmQgeG1sTm9kZSBzb21ld2hhdC4KCk1vbiBPY3QgMzAgMTY6MjY6NDkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLltjaF06IGFkZGVkIHhtbElPUGFyc2VEVEQoKQoJKiB4cG9pbnRlci5jOiBhZGRlZCBzdXBwb3J0IGZvciB0aGUgMiBleHRyYSBwYXJhbWV0ZXJzIG9mCgkgIHN0cmluZy1yYW5nZSwgZml4ZWQgYSBzdG9vcGlkIGVycm9yIHdoZW4gJzAnIHdhcyBwcmVzZW50CgkgIGluIFhQb2ludGVyIGV4cHJlc3Npb25zCgkqIHRlc3QvWFBhdGgveHB0ci9zdHJyYW5nZTIgcmVzdWx0L1hQYXRoL3hwdHIvc3RycmFuZ2UyOiBhZGRlZAoJICB0ZXN0c3VpdGUgZm9yIHRoZSBhYm92ZQoKTW9uIE9jdCAzMCAxMDoyNjo0MyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBsaWJ4bWwuc3BlYy5pbjogaW1wcm92ZWQgcGFja2FnZSBkZXNjcmlwdGlvbnMKClN1biBPY3QgMjkgMTk6MDM6MTEgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguYyB4cGF0aEludGVybmFscy5oOiBhcHBsaWVkIGEgbGFyZ2UgY2xlYW5pbmcgcGF0Y2gKCSAgZnJvbSBUT00gPHB0aXR0b21AZnJlZS5mcj4sIGl0IGFsc28gYWRkIG5hbWVzcGFjZSBzdXBwb3J0CgkgIGZvciBmdW5jdGlvbiBhbmQgdmFyaWFibGVzIHJlZ2lzdHJhdGlvbi4KClN1biBPY3QgMjkgMTg6NTE6NDYgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdXJpLmM6IFdheW5lIERhdmlzb24ncyBwYXRjaCBmaXhpbmcgeG1sQnVpbGRVUkkoKQoJKiBNYWtlZmlsZS5taW5ndzogV2F5bmUgRGF2aXNvbidzIHVwZGF0ZSBhZGRpbmcgaGFzaC5jCgpTdW4gT2N0IDI5IDE4OjM4OjEyIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmM6IGZpeGVkIHRoZSByb290IGV2YWx1YXRpb24gcHJvYmxlbXMKCSogSFRNTHBhcnNlci5jIHJlc3VsdC9IVE1ML2RvYzMuaHRtOiBmaXhlZCB0aGUgcHJvYmxlbSBvZiBub24KCSAgaWdub3JhYmxlIHNwYWNlcyB3aXRoIDxiPiA8Ym9sZD4gPGVtPgoJKiB0cmVlLmM6IGZpeGVkIGEgbG9vcCBpbiB4bWxTZWFyY2hOc0J5SHJlZigpCgpGcmkgT2N0IDI3IDE4OjU3OjMyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jOiBhcHBsaWVkIGFub3RoZXIgWFBhdGggcGF0Y2ggZnJvbSBUT00gCgkqIHhwYXRoLmMgaW5jbHVkZS9tYWtlZmlsZS5hbTogYXBwbGllZCBhbm90aGVyIHBhdGNoIGZyb20gCgkgIGNoaW5hQHRoZXdyaXR0ZW53b3JkLmNvbSAoY2xlYW51cCBvbiBJUklYKS4KCkZyaSBPY3QgMjcgMTM6NDU6MjggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbC1jb25maWcuMTogcmVjZWl2ZWQgYSBmaXhlZCB2ZXJzaW9uIGZyb20gRnJlZHJpayBIYWxsZW5iZXJnCgkgIDxoYWxsb25AbHlzYXRvci5saXUuc2U+CgpUaHUgT2N0IDI2IDE2OjA1OjI1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jIHRleHRYUGF0aC5jIHhwYXRoSW50ZXJuYWxzLmg6IGFwcGxpZWQgVE9NIDxwdGl0dG9tQGZyZWUuZnI+CgkgIGNsZWFudXAgcGF0Y2ggZm9yIFhQYXRoCgpXZWQgT2N0IDI1IDIxOjMxOjEwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXRjaGVkIHRvIHJlZGlycmVjdCBhbGwgIm91dCBvZiBjb250ZXh0IiBlcnJvciBtZXNzYWdlcyB0bwoJICBhIHJlY29uZmlndXJhYmxlIHJvdXRpbmUuIFRoZSBjaGFuZ2VzIGFyZToKCSogeG1sZXJyb3IuaCA6IGFkZGVkIHRoZSBleHBvcnQgb2YgYW4gZXJyb3IgY29udGV4dCB0eXBlICh2b2lkICopCgkgIGFuIGVycm9yIGhhbmRsZXIgdHlwZSB4bWxHZW5lcmljRXJyb3JGdW5jIHRoZXJlIGlzIGFuIGludGVyZmFjZQoJICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKHZvaWQgKmN0eCwgeG1sR2VuZXJpY0Vycm9yRnVuYyBoYW5kbGVyKTsKCSAgdG8gcmVzZXQgdGhlIGVycm9yIGhhbmRsaW5nIHJvdXRpbmUgYW5kIGl0cyBhcmd1bWVudAoJICAoYnkgZGVmYXVsdCBpdCdzIGVxdWl2YWxlbnQgdG8gcmVzcGVjdGl2ZWx5IGZwcmludGYgYW5kIHN0ZGVyci4KCSogYWxsIHRoZSBjIGZpbGVzOiBhbGwgd2lsZCBhY2Nlc3NlcyB0byBzdGRlcnIgb3Igc3Rkb3V0IHdpdGhpbgoJICB0aGUgbGlicmFyeSBoYXZlIGJlZW4gcmVwbGFjZWQgdG8gY2FsbHMgdG8gdGhlIGhhbmRsZXIuCgpXZWQgT2N0IDI1IDE1OjI3OjE5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IHJlbGVhc2UgMi4yLjYKCSogeHBhdGguW2NoXSB4cG9pbnRlci5jIHhwYXRoSW50ZXJuYWxzLmg6IGFkZGVkIHhwYXRoSW50ZXJuYWxzLmgKCSAgZXhwb3J0aW5nIHRoZSBpbm5lciBmdW5jdGlvbnMgb2YgeHBhdGggZm9yIGV4dGVuc2lvbiBtb2R1bGVzCgkqIGRvYy8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2MKCldlZCBPY3QgMjUgMTI6NDg6NTUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9odHRwLmMgOiBhcHBsaWVkIFdheW5lIEhUVFAgY2xlYW51cCBwYXRjaAoJKiB0cmVlLltjaF06IGFwcGxpZWQgVE9NIDxwdGl0dG9tQGZyZWUuZnI+IGZvciB4bWxOb2RlU2V0QmFzZSgpCgkgIGFuZCB4bWxOb2RlU2V0U3BhY2VQcmVzZXJ2ZSgpCgpXZWQgT2N0IDI1IDEyOjExOjAzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jOiBjbG9zaW5nIGJ1ZyAjMjkyNjAKClR1ZSBPY3QgMjQgMTg6NDk6MzQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGhhc2guW2NoXSBkZWJ1Z1hNTC5jOiBleHBhbmRlZC9lbmhhbmNlZCB0aGUgQVBJLCBhZGRlZAoJICBtdWx0aWtleSB0dXBsZXMsIG1hZGUgaGFzaCBzdHJ1Y3R1cmUgb3BhcXVlCgkqIHZhbGlkLltjaF06IG1vdmVkIGVsZW1lbnRzLCBhdHRyaWJ1dGVzLCBub3RhdGlvbnMgZGVjYWxhcmF0aW9ucwoJICBhcyB3ZWxsIGFzIElEIGFuZCByZWZzIHRvIGhhc2ggdGFibGVzLgoJKiBlbnRpdGllcy5jOiBoYXNoIGNsZWFudXAKCSogeG1sbWVtb3J5LmM6IGZpeGVkIGEgZHVtcCBwcm9ibGVtIGluIGRlYnVnIG1vZGUKCSogaW5jbHVkZS9NYWtlZmlsZS5hbTogcHJvYmxlbSBwYXNzaW5nIGluIERFU1RESVI9IHZhbHVlcyBwYXRjaAoJICBmcm9tIE1hcmMgQ2hyaXN0ZW5zZW4gPG1hcmNAY2FsZGVyYXN5c3RlbXMuY29tPgoJKiBuYW5vaHR0cC5jOiByZW1vdmVkIGRlYnVnZ2luZyByZW1haW5zCgkqIEhUTUxwYXJzZXIuYzogdGhlIGJvZ3VzIHRhZyBzaG91bGQgYmUgaWdub3JlZCAoV2F5bmUpCgkqIEhUTUxwYXJzZXIuYyBwYXJzZXIuYzogZml4aW5nIGEgbnVtYmVyIG9mIHByb2JsZW1zIHdpdGggdGhlCgkgIG1hY3JvcyBpbiB0aGUgKnBhcnNlci5jIGZpbGVzIChXYXluZSkuCgkqIEhUTUxwYXJzZXIuYzogY2xvc2UgdGhlIHByZXZpb3VzIG9wdGlvbiB3aGVuIG9wZW5pbmcgYSBuZXcgb25lCgkgIChNYXJjIFNhbmZhY29uKS4KCSogcmVzdWx0L0hUTUwvKjogdXBkYXRlZCB0aGUgSFRNTCByZXN1bHRzIGFjY29yZGluZ2x5CgpTdW4gT2N0IDIyIDE4OjM5OjE5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbnRpdGllcy5bY2hdIHhwYXRoLltjaF0gaGFzaC5bY2hdIGRlYnVnWE1MLmMgdHJlZS5oOiBhZGRlZC9oYWNrZWQKCSAgaGFzaCB0YWJsZXMgZnJvbSBCam9ybiBSZWVzZSA8YnJlZXNlQG1haWwxLnN0b2ZhbmV0LmRrPi4gU3dpdGNoZWQKCSAgWFBhdGggZnVuY3Rpb25zIGFuZCBYTUwgZW50aXRpZXMgdGFibGUgdG8gdGhlbS4gTW9yZSB0byBjb21lLi4uCgkqIHhtbElPLmM6IGZpeGVkIGxpYnhtbCBjbG9zaW5nIEZJTEVzIGl0IGRpZG4ndCBvcGVuLgoKU3VuIE9jdCAyMiAxMzo1OTo1MCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBjb2FsZXNjZSBhZGphY2VudCB0ZXh0IG5vZGVzCgkqIHZhbGlkLmM6IGhhbmRsaW5nIG9mIGJsYW5rIG5vZGVzIGluIERUZCB2YWxpZGF0aW9uIChyYWlzZWQKCSAgYnkgcHJvYmxlbXMgd2l0aCBhIHBvc3RlcmlvcmkgdmFsaWRhdGlvbikuCgkqIG5hbm9odHRwLmM6IGNoYW5naW5nIGJlaGF2aW91ciBvbiBIVFRQIHdyaXRlIHN0dWZmLgoJKiBIVE1MdHJlZS5jOiBmb3JjZWQgYm9keSBhbmQgaHRtbCB0byBiZSBleHBsaWNpdGVseSBjbG9zZWQuCgkqIHhwYXRoLmg6IGV4cG9ydGVkIG1vcmUgWFBhdGggZnVuY3Rpb25zLgoKU3VuIE9jdCAxNSAyMjoyODozMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogUmVsZWFzZSBvZiAyLjIuNQoJKiB4cG9pbnRlci5jOiByYW5nZSgpIHJhbmdlLWluc2lkZSBhbmQgb3RoZXIgaGVscGVyIGZ1bmN0aW9ucwoJKiBwYXJzZXJJbnRlcm5hbHMuYzogZml4ZWQgcGVyZiBwcm9ibGVtIHJhaXNlZCBieSByb2xmQHBvaW50c21hbi5kZQoKU3VuIE9jdCAxNSAxNjoyMToyNyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogU0FYLmM6IEhUTUwgYXR0cmlidXRlcyBuZWVkIG5vcm1hbGl6YXRpb24gdG9vIChCam9ybiBSZWVzZSkKCSogSFRNTHBhcnNlci5bY2hdOiBhZGRkZWQgaHRtbElzU2NyaXB0QXR0cmlidXRlKCkKClN1biBPY3QgMTUgMTM6MTg6MzYgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy8qOiByZWJ1aWx0IGRvY3MgcHJlcGFyaW5nIGZvciAyLjIuNSByZWxlYXNlLCBhZGRlZCBVUkkKCSAgYW5kIFhQb2ludGVyIG1vZHVsZXMKClN1biBPY3QgMTUgMTI6MTM6MzAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFNBWC5oOiBjbG9zZWQgIzI1MTA3CgpTdW4gT2N0IDE1IDEyOjA2OjE2IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0ZXN0U0FYLmM6IGZpeGVkIHByb2JsZW0gd2l0aCBjZGF0YSByZXBvcnRpbmcKCSogU0FYcmVzdWx0LyogOiB1cGRhdGVkCgpTdW4gT2N0IDE1IDEyOjAwOjI0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYyB0ZXN0L3dhcC54bWwgcmVzdWx0L25vZW50L3dhcC54bWwgcmVzdWx0L3dhcC54bWw6CgkgIENsb3NlZCBidWcgIzI3NDk5LCBhZGRlZCB0byByZWdyZXNzaW9uIHRlc3RzCgkqIFRPRE86IHVwZGF0ZWQKClN1biBPY3QgMTUgMDE6MzQ6MzcgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5bY2hdIFNBWC5jIHRlc3RIVE1MLmMgdHJlZS5jOiBmaXhlZCBIVE1MCgkgIHN1cHBvcnQgZm9yIFNDUklQVCBhbmQgU1RZTEUgd2l0aCBoZWxwIGZyb20gQmpvcm4gUmVlc2UKCSogdGVzdC9IVE1MLyogcmVzdWx0L0hUTUwvKjogYWRkZWQgc2ltcGxlIHRlc3RjYXNlIGFuZCB1cGRhdGVkCgkgIHRoZSBleGlzdGluZyBvbmVzLgoKRnJpIE9jdCAxMyAxODoyNDozMSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguYyB4cG9pbnRlci5jOiBYUG9pbnRlciByZW9yZGVyIG9mIHJhbmdlcyBzdGFydC9lbmQgYW5kCgkgIHN0cmluZy1yYW5nZSBmb3IgZW1wdHkgc3RyaW5ncwoJKiB0ZXN0L1hQYXRoL2RvY3Mvc3RyIHRlc3QvWFBhdGgveHB0ci9jaGFwdGVyc3JhbmdlCgkgIHRlc3QvWFBhdGgveHB0ci9zdHJyYW5nZTogYXVnbWVudGVkIHRoZSBYUG9pbnRlciB0ZXN0c3VpdGUKCkZyaSBPY3QgMTMgMTI6MjE6NDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCBkb2MveG1sbWVtLmh0bWw6IGFkZGVkIGEgbW9kdWxlIGRlc2NyaWJpbmcgbWVtb3J5CgkgIGludGVyZmFjZXMgYW5kIHVzZSwgdXBkYXRlZCB0aGUgbWFpbiBwYWdlLgoKRnJpIE9jdCAxMyAwMToyMzo0OCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmMgeG1sSU8uYzogV2F5bmUgRGF2aXNvbiBXaW4zMiBwYXRjaAoJICBuYW5vZnRwIGNvZGUgd29yayBvbiBXaW5kb3dzIHRvbyBub3cKCkZyaSBPY3QgMTMgMDA6NTQ6MzcgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRlc3RYUGF0aC5jIHhwYXRoLltjaF06IG1vdmVkIHNvbWUgZGVidWcgZnVuY3Rpb25zIHRvIHhwYXRoIGNvcmUKCSogeHBvaW50ZXIuYzogaW1wbGVtZW50ZWQgc3RyaW5nLXJhbmdlKCkgYXQgbGVhc3QgYSBnb29kIGZpcnN0IHZlcnNpb24KCSogdGVzdC9YUGF0aC9kb2NzL3N0ciB0ZXN0L1hQYXRoL3hwdHIvc3RycmFuZ2UKCSAgcmVzdWx0L1hQYXRoL3hwdHIvc3RycmFuZ2U6IHRoZSBzdHJpbmctcmFuZ2UoKSB0ZXN0cwoKVGh1IE9jdCAxMiAxMDowMjo1OSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTWFrZWZpbGUuYW0gaW5jbHVkZS9NYWtlZmlsZS5hbSBpbmNsdWRlL3dpbjMyY29uZmlnLmgKCSAgd2luMzIvTWFrZWZpbGUubWluZ3c6IGZpeGVkIHByb2JsZW1zIHJlcG9ydGVkIGJ5IFdheW5lIERhdmlzb24KCSAgYW5kIG1ha2UgZGlzdGNoZWNrCgpUaHUgT2N0IDEyIDAxOjQ0OjA4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vaHR0cC5jOiBhZGRlZCB4bWxOYW5vSFRUUFRpbWVvdXQoaW50IGRlbGF5KSwgcmVtb3ZlZCBhIGJ1ZwoJICB4bWxOYW5vSFRUUE1ldGhvZCBvbiBpbnB1dCBNaW1lVHlwZSBUb255IExhbSA8VG9ueS5MYW1AZW5nLnN1bi5jb20+CgkqIHhwb2ludGVyLmM6IHNsaWdodCBleHRlbnNpb24gb2YgeG1sWFB0ckxvY2F0aW9uU2V0TWVyZ2UKClRodSBPY3QgMTIgMDE6Mzc6NTMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZy5oLmluIGNvbmZpZ3VyZS5pbiBuYW5vZnRwLmMgbmFub2h0dHAuYyB4bWx2ZXJzaW9uLmguaW4gOgoJICBwYXRjaCBmb3Igc29ja2xlbl90IGRldGVjdGlvbiBieQoJICBBbGJlcnQgQ2hpbi1BLVlvdW5nIDxjaGluYUB0aGV3cml0dGVud29yZC5jb20+CgpXZWQgT2N0IDExIDE3OjUzOjU3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmMgdmFsaWQuYyB4bWxsaW50LmM6IEZpeGVkIGEgZmV3IHBvc3R2YWxpZGF0aW9uIGJ1Z3MKCSAgYW5kIGFkZGVkIGEgLS1kdGR2YWxpZCBvcHRpb24gdG8geG1sbGludCB1c2VkIHRvIHRlc3QgaXQKCldlZCBPY3QgMTEgMTU6MDE6MjkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbC1jb25maWcuMSBNYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogYWRkaW5nIGEgbWFuIHBhZ2UgZm9yCgkgIHhtbC1jb25maWcgYnkgRnJlZHJpayBIYWxsZW5iZXJnIDxoYWxsb25AbHlzYXRvci5saXUuc2U+CgpXZWQgT2N0IDExIDEyOjQxOjMwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5bY2hdIHhwb2ludGVyLltjaF06IHdvcmtlZCBvbiBYUGF0aCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlCgkgIGhhbmRsaW5ncyAocmVnaXN0cmF0aW9uLCBsb29rdXAsIGNsZWFudXApCgpXZWQgT2N0IDExIDAxOjQ2OjQ0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW0gaW5jbHVkZS9tYWtlZmlsZS5hbTogYWRkaW5nIFhQb2ludGVyCgkgIGFuZCBYUHRydGVzdHMgdGFyZ2V0CgkqIHhwb2ludGVyLltjaF0gOiBuZXcgZmlsZXMgZm9yIFhQb2ludGVyIHN1cHBvcnQKCSogdGVzdC9YUGF0aC94cHRyIHJlc3VsdC9YUGF0aC94cHRyOiBhZGRlZCBYUG9pbnRlciB0ZXN0c3VpdGUgYW5kCgkgIG1vcmUgWFBhdGggdGVzdHMKCldlZCBPY3QgMTEgMDE6MjM6MjUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQsIHZlcnkgYnJva2VuLCBtYWtlIGRpc3RjaGVjayB3b3JrcyBhZ2FpbgoKV2VkIE9jdCAxMSAwMjo1MzoxMCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTW9yZSB3b3JrIHRvd2FyZCAyLjIuNSwgaW50ZWdyYXRlZCBhIG51bWJlciBvZiBwYXRjaGVzCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbSB3aW4zMmNvbmZpZy5oLmluOiB0cnlpbmcgdG8gY2xlYW51cAoJICBtYWtlIGRpc3RjaGVjayAuLi4uIGh1aCAuLi4KCSogaW5jbHVkZS9NYWtlZmlsZS5hbSBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IG5ldyBkaXJlY3RvcnkKCSAgZm9yIGluY2x1ZGVzCgkqIHdpbjMyL01ha2VmaWxlLm1pbmd3IHdpbjMyL1JFQURNRS5NU0RldiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZHNwCgkgIHVwZGF0ZWQgdGVoIG1ha2VmaWxlcyBhbmQgaW5zdHJ1Y3Rpb25zIGZvciBXSU4zMgoJKiB4cGF0aC5jOiBzbWFsbCBmaXhlcwoJKiB0ZXN0L1hQYXRoLyByZXN1bHRzL1hQYXRoOiB1cGRhdGVkIHRoZSB0ZXN0Y2FzZXMgYW5kIHJlc3VsdHMKCSogSFRNTHBhcnNlci5jIG5hbm9odHRwLmMgdGVzdFhQYXRoLmM6IGluY29ycG9yYXRlZCBwcm92aWRlZCBvcgoJICBzdWdnZXN0ZWQgcGF0Y2hlcwoJKiB2YWxpZC5jOiBmaXhlZCBhbiBJRCBidWcKCk1vbiBPY3QgIDkgMTQ6Mjg6NTYgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG1vdmVkIHhtbC1lcnJvci5oIHRvIHhtbGVycm9yLmg6IHNlZW1zIHRoaXMgYWxsb3dlZCB0byBieXBhc3MKCSAgdGhlIGF1dG9tYWtlIGJ1ZyB3aGVyZSB3cm9uZyBkZXBlbmRlbmNpZXMgd2VyZSBnZW5lcmF0ZWQuCgkqIHhwYXRoLltjaF06IHdvcmtlZCBvbiBYUG9pbnRlcgoKRnJpIE9jdCAgNiAxMjo1ODowNCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluIE1ha2VmaWxlLmFtOiAyLjIuNSwgc2hpcCB0aGUgaW5jbHVkZSBpbiBhbgoJICBpbmNsdWRlL2xpYnhtbCBzdWJkaXJlY3RvcnksIHVzZSBzeW1saW5rcyB3aGVuIHVzaW5nIENWUwoJKiB0ZXN0U0FYLmM6IGZpeGVkIHNtYWxsIGJ1ZwoJKiB0ZXN0WFBhdGguYzogY2hhbmdlZCB0aGUgd2F5IHRlc3RmaWxlcyBhcmUgcGFyc2VkCgkqIGRlYnVnWE1MLmM6IHNhbWUga2luZCBvZiBjbGVhbnVwIHdoZW4gcGFyc2luZyBhbiBhcmd1bWVudCBleHByZXNzaW9uCgkgIFhQYXRoL1hQb2ludGVycyBjYW4gaGF2ZSBibGFua3MgZW1iZWRkZWQKCSogeHBhdGguW2NoXTogbW9yZSBjbGVhbnVwLCByZW9yZ3MgZm9yIFhQb2ludGVyIHdvcmsKCSogcGFyc2VySW50ZXJuYWxzLmMgcGFyc2VyLmMgSFRNTHBhcnNlci5jOiBmaXhlZCB3cm9uZyBpbmNsdWRlCgkqIHdpbjMyL1JFQURNRS5NU0RldiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZHNwOiBXaW5kb3dzIHN0dWZmCgpUaHUgT2N0ICA1IDE4OjEzOjE1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkZWJ1Z1hNTC5jIHRlc3RYUGF0aC5jIHhwYXRoLltjaF06IGdvdCBwaXNzZWQgYnkgc29tZSBuYXN0eW5lc3MKCSAgaW4gdGhlIFhQYXRoIGVuZ2luZSwgcmV3cm90ZSBsYXJnZSBwYXJ0cyBvZiBpdCwgbm93IGl0J3MgZmFyCgkgIGNsZWFuZXIgYW5kIGluIHN5bmMgd2l0aCB0aGUgUkVDIG5vdCBhbiBvbGQgV0QuIEZpeGVkIGEgcGFyc2luZwoJICBwcm9ibGVtIGluIHRoZSBpbnRlcmFjdGl2ZSBYTUwgc2hlbGwgZm91bmQgd2hlbiB0ZXN0aW5nIFhQYXRoLgoKV2VkIE9jdCAgNCAxNToyNTo1MyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZGVidWdYTUwuYyB0ZXN0WFBhdGguYyB4cGF0aC5bY2hdOiBNb3JlIHdvcmsgb24gWFBhdGgvWHBvaW50ZXIsCgkgIGluY29ycG9yYXRlZCAiKFRPTSkiIDxwdGl0dG9tQGZyZWUuZnI+IHBhdGNoZXMgcmVidWlsdCB0aGUgWFBhdGgKCSAgZXhhbXBsZXMgd2l0aCB0aGUgZXh0cmEgdGVzdAoKV2VkIE9jdCAgNCAxNDozOTowMSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMgeG1sSU8uYyB4bWxJTy5oOiBmaXhlZCBidWcgMjY2NTAsIGFuZCBpbXByb3ZlZAoJICB0aGUgZ2xvYmFsIGluaXQgZnVuY3Rpb24uCgpUdWUgT2N0ICAzIDExOjI4OjUyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IERvb2hoaCwgYXR0cmlidXRlIG5hbWUgcGFyc2luZyB3YXMgc3RpbGwgY2FzZQoJICBzZW5zaXRpdmUgISBGaXhlZCB0aGlzIC4uLgoJKiByZXN1bHQvSFRNTC8qIDogdXBkYXRlZCB0aGUgdGVzdHMgcmVzdWx0cyBhY2NvcmRpbmdseQoKTW9uIE9jdCAgMiAyMzo0NzozMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguW2NoXSBkZWJ1Z1hNTC5jIHRlc3RYUGF0aC5jOiBmaXhlZCB0aGUgWFBhdGggZXZhbHVhdGlvbgoJICBlbmdpbmUsIHNob3VsZCBiZSBmYXIgbW9yZSBzdGFibGUsIGluY29ycG9yYXRlZCBhIG5ldyB2ZXJzaW9uIG9mCgkgIHByZWNlZGluZy9mb2xsb3dpbmcgYXhpcywgbmVlZCB0ZXN0aW5nCgkqIHVyaS5jOiBmaXhlZCBmaWxlOi8vL2M6L2EvYi9jIHByb2JsZW0KCSogdGVzdC9YUGF0aC90ZXN0cy9pZHNpbXBsZTogYXVnbWVudGVkIHRoZSBYUGF0aCB0ZXN0cwoKU3VuIE9jdCAgMSAyMjozMzowMCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jLyogcmVidWlsZGluZyBkb2NzIGZvciAyLjIuNCByZWxlYXNlCgpTdW4gT2N0ICAxIDIyOjE2OjMzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IHJlbGVhc2luZyAyLjIuNAoJKiBwYXJzZXIuW2NoXTogYWRkZWQgeG1sU3RyRXF1YWwoKQoJKiBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYyBTQVguYyBkZWJ1Z1hNTC5jIGVudGl0aWVzLmMgcGFyc2VyLmMKCSAgdHJlZS5jIHZhbGlkLmMgeGxpbmsuYyB4cGF0aC5jOiBjb252ZXJ0ZWQgYWxsICF4bWxTdHJjbXAgdG8KCSAgdXNlIHhtbFN0ckVxdWFsIGluc3RlYWQKCSogVE9ETzogdXBkYXRlZAoJKiBhZGRlZCBhbiBYUGF0aCB0ZXN0CgpTdW4gT2N0ICAxIDIwOjE5OjM5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGh0bWxTdGFydENsb3NlSW5kZXhpbml0aWFsaXplZCBpbml0CgkqIGVudGl0aWVzLmg6IGV4cG9ydGVkIHhtbEluaXRpYWxpemVQcmVkZWZpbmVkRW50aXRpZXMKCSogcGFyc2VyLltjaF0gOiBhZGRlZCB4bWxJbml0UGFyc2VyKCkKCSogcGFyc2VySW50ZXJuYWxzLmggOiBoYWQgdG8gZXhwb3J0IGh0bWxJbml0QXV0b0Nsb3NlKCkKClN1biBPY3QgIDEgMTY6Mjg6MjIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLltjaF0gOiBmaXhlZCBzb21lIHNlcmlvdXMgWFBhdGggUHJlZGljYXRlIGV2YWx1YXRpb24KCSAgcHJvYmxlbXMKCSogTWFrZWZpbGUuYW0gOiBhZGRlZCBYUGF0aCByZWdyZXNzaW9uIHRlc3RzIHRvIG5vcm1hbCB0ZXN0cwoJKiB1cmkuYzogZml4ZWQgYSBwcm9ibGVtIHdpdGggbG9jYWwgcGF0aHMsIGNsZWFudXAKCSogcGFyc2VyLmM6IGZpeGVkIGEgcHJvYmxlbSB3aXRoIGxhcmdlIENEYXRhIHNlY3Rpb25zCgpTYXQgU2VwIDMwIDE2OjM1OjU0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4geG1sLWNvbmZpZy5pbjogcGF0Y2ggZnJvbSAiQmVuIFRheWxvciIKCSAgPHNvbDd4ODZAaG90bWFpbC5jb20+IGZvciBzb2xhcmlzIHNoYXJlZCBsaWJzIGxvb2t1cAoKMjAwMC0wOS0zMCAgTWFydGluIEJhdWxpZyAgPGJhdWxpZ0BzdXNlLmRlPgoKCSogbGlieG1sLTIuMC5wYy5pbjogUHJvdmlkZSBwa2ctY29uZmlnIHNjcmlwdC4KCgkqIGNvbmZpZ3VyZS5pbjogQ3JlYXRlIHRoZSBsaWJ4bWwtMi4wLnBjIHNjcmlwdCBmcm9tIHRoZQoJbGlieG1sLTIuMC5wYy5pbiB0ZW1wbGF0ZXMuCgkqIE1ha2VmaWxlLmFtIChwa2djb25maWdfREFUQSk6IEluc3RhbGwgdGhlIGxpYnhtbC0yLjAucGMKCXNjcmlwdCBpbiBgJChsaWJkaXIpL3BrZ2NvbmZpZycuCgpNb24gU2VwIDI1IDE2OjIzOjQxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgcGFyc2VyLmMgdHJlZS5jIHRyZWUuaDogQXZvaWRpbmcgYSBmZXcgd2FybmluZwoJICB3aGVuIGNvbXBpbGluZyB3aXRoIE1TQwoKU3VuIFNlcCAyNCAyMDozMjo1MiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguYzogcGF0Y2ggZm9yIG5vcm1hbGl6ZS1zdHJpbmcoKSBzdWJzdHJpbmctYmVmb3JlKCksCgkgIHN1YnN0cmluZy1hZnRlcigpIGFuZCB0cmFuc2xhdGUoKSBmdW5jdGlvbnMgZnJvbSBCam9ybiBSZWVzZQoJICA8YnJlZXNlQG1haWwxLnN0b2ZhbmV0LmRrPgoJKiBsaWJ4bWwubTQgTWFrZWZpbGUuYW06IGFkZGVkIGxpYnhtbC5tNCBmcm9tIERlYmlhbiA/CgkgIEZyZWRyaWsgSGFsbGVuYmVyZyA8aGFsbG9uQGx5c2F0b3IubGl1LnNlPgoJKiBUT0RPOiB1cGRhdGVkCgpTdW4gU2VwIDI0IDEwOjAwOjQ5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWx2ZXJzaW9uLmguaW4gbmFub2Z0cC5jIG5hbm9odHRwLmM6IHRyYXlpbmcgdG8gd29yayBvdXQgdGhlCgkgIHByb2JsZW0gb2Ygc29ja2xlbl90IGJlaW5nIHVuZGVmaW5lZCBvbiBhIG51bWJlciBvZiBwbGF0Zm9ybXMKCSogZGVidWdYTUwuYzogZml4ZWQgYSBjb21waWxhdGlvbiBwcm9ibGVtIHdoZW4gd2l0aG91dCBzbnByaW50ZgoKU2F0IFNlcCAyMyAxMjoxOTo0NSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIHVyaS5jOiBBbm90aGVyIHBhdGNoIGZyb20gV2F5bmUgRGF2aXNvbiwgY29ycmVjdGluZwoJICBhbiBVUkkgYnVnIGFuZCBhIGZpeCBmb3IgdGhlIGNvbnRyb2wtY2hhcmFjdGVyLWluZHVjZWQgaW5maW5pdGUgbG9vcAoJKiBuYW5vaHR0cC5jOiBwcmV2ZW50aXZlIGZpeCBmb3IgY29tcGlsaW5nIG9uIFdJTjMyCgpGcmkgU2VwIDIyIDE4OjA2OjA4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxpbnQuYzogY2xvc2luZyBidWcgIzI1MDAwCgpGcmkgU2VwIDIyIDE0OjE3OjUzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxJTy5oIHRyZWUuaDogbWFkZSB4bWxOb2RlRHVtcCgpIGFuZCB4bWxOb2RlRHVtcE91dHB1dCgpIHB1YmxpYwoJKiBwYXJzZXIuW2NoXSBuYW5vaHR0cC5jIEhUTUx0cmVlLmMgSFRNTHBhcnNlci5jIHRyZWUuYzogYXBwbGllZCBhbmQKCSAgbW9kaWZpZWQgc2xpZ2h0bHkgV2F5bmUgRGF2aXNvbiBwYXRjaCBhZGRpbmcgeG1sU3RyY2FzZWNtcCBhbmQKCSAgcmVsYXRlZCBmdW5jdGlvbiwgZml4aW5nIHhtbFN0cm5jbXAoKSwgYW5kIGFzc29jaWF0ZWQgY2xlYW51cAoJKiByZXN1bHQvSFRNTC9lbnRpdGllcy5odG1sLnNheDogdXBkYXRpbmcgcmVzdWx0CgpUdWUgU2VwIDE5IDE0OjIwOjEwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYzogYXBwbGllZCBwYXRjaCBmb3IgVVJJIGVzY2FwaW5nIGZyb20gV2F5bmUgRGF2aXNvbgoJICA8d2F5bmVkQGJsb3JmLm5ldD4KCSogdHJlZS5jIHBhcnNlckludGVybmFscy5jIEhUTUxwYXJzZXIuYzogbWVtc2V0IGNoZWNrcyBwYXRjaGVzCgkgIGZyb20gRGVuaXMgQmFyYmllciA8YmFyYmllckBpbWFjcy5wb2x5dGVjaG5pcXVlLmZyPgoJKiBIVE1McGFyc2VyLmM6IFVURjggY2hhcmFjdGVycyBpbiBIVE1MIHRhZy1hdHRyaWJ1dGUgdmFsdWVzCgkgIHBhdGNoIGZyb20gV2F5bmUgRGF2aXNvbgoKU3VuIFNlcCAxNyAxODozNzowMyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sIDogdXBkYXRlZCB3aXRoIG5ldyByZWxlYXNlcywgYWRkaW5nICJob3cgdG8gaGVscCIKClN1biBTZXAgMTcgMTc6NTg6MzcgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFNBWC5jIGRlYnVnWE1MLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdHJlZS5jIHZhbGlkLmMgeHBhdGguYzoKCSAgcmVtb3ZlZCBhIGZldyB3YXJuaW5ncyBpbiBwZWRhbnRpYyBtb2RlIC4uLgoJKiBwYXJzZXJJbnRlcm5hbHMuYyBwYXJzZXIuYzogbW92ZWQgZW5jb2Rpbmcgc3dpdGNoaW5nIGZ1bmN0aW9uCgkgIHRvIHBhcnNlckludGVybmFscy5jCgkqIGNvbmZpZ3VyZS5pbiwgZG9jL01ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluOiByZWxlYXNlZCAyLjIuMwoKU2F0IFNlcCAxNiAyMDoxMjo0MSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIHBhcnNlci5jOiBzZXQgY3R4dC0+ZXJyTm8gYmVmb3JlIGNhbGxpbmcgdGhlCgkgIGVycm9yIG9yIHdhcm5pbmcgaGFuZGxlcnMKCldlZCBTZXAgMTMgMjI6MDM6MTggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlckludGVybmFscy5jIHBhcnNlckludGVybmFscy5oIHBhcnNlci5jIE1ha2VmaWxlLmFtOgoJICBjcmVhdGVkIGEgbmV3IG1vZHVsZSBwYXJzZXJJbnRlcm5hbHMuYywgbW92ZWQgbW9zdCBvZiB0aGUKCSAgY29kZSBzaGFyZWQgYnkgdGhlIHZhcmlvdXMgcGFyc2VycyB0aGVyZSwgYXMgd2VsbCBhcwoJICBkZXByZWNhdGVkICBjb2RlIGZyb20gcGFyc2VyLmMuIE1vcmUgY2xlYW51cCBvZiBwYXJzZXIuYwoJKiB1cmkuYzogZml4ZWQgYSBwcm9ibGVtIHdoZW4gVVJJIGlzIE5VTEwKCSogdmFsaWQuYzogc3BlZWR1cCB3aGVuIGxvb2tpbmcgZm9yIGFuIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbgoKU3VuIFNlcCAxMCAxNzo1Mzo0OCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdXJpLmMgdHJlZS5jIFNBWC5jIHBhcnNlci5jIGVudGl0aWVzLmMgZGVidWdYTUwuYzogZmluaXNoZWQKCSAgdGhlIGNsZWFudXAgb2YgdGhlIGNvbXB1dGF0aW9uIG9mIFVSSSByZWZlcmVuY2VzIHdoZW4gc2Vla2luZwoJICBleHRlcm5hbCBlbnRpdGllcy4gVGhlIFVSSSByZWZlcmVuY2Ugc3RyaW5nIGFuZCB0aGUgcmVzdWx0aW5nCgkgIFVSSSBhcmUgYm90aCBzdG9yZWQgbm93LgoJKiBwYXJzZXIuYyBIVE1McGFyc2VyLmMgdmFsaWQuYyBuYW5vZnRwLmMgbmFub2h0dHAuYyB4cGF0aC5jOgoJICBsYXJnZSBzKG4pcHJpbnRmIGNoZWNrcyBhbmQgY2xlYW51cCBmcm9tIERlbmlzIEJhcmJpZXIKCSAgPGJhcmJpZXJAaW1hY3MucG9seXRlY2huaXF1ZS5mcj4KCSogeG1sdmVyc2lvbi5oLmluIHRyZWUuaDogY291cGxlIG9mIFNHTUwgZGVjbGFyYXRpb25zIGZvciBhCgkgIHBvc3NpYmxlIGRvY2Jvb2sgbW9kdWxlLgoJKiByZXN1bHQvVkMvIDogYSBjb3VwbGUgb2YgdGVzdCBvdXRwdXQgY2hhbmdlZCBkdWUgdG8gdGhlIGNoYW5nZQoJICBvZiB0aGUgZW50aXRpZXMgVVJJCgpTdW4gU2VwIDEwIDE1OjU5OjU4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuaDogYWRkZWQgYSBfcHJpdmF0ZSBmaWVsZCBmb3IgbGlua2luZyB1c2VyJ3MgZGF0YQoKU3VuIFNlcCAxMCAxNToxNDo0MyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmg6IGRlbWFjcm9pZmllZCBtb3N0IG9mIHRoZSBJU19YWFgKCSAgdGhlIGdhaW4gaW4gc2l6ZSBpcyBzaWduaWZpY2FudCBzbyAuLi4KCkZyaSBTZXAgIDggMjA6NDg6MjkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGVudGl0aWVzLmM6IGNhc2VzIHdoZXJlIGxvb2tpbmcgdXAgZW50aXRpZXMgd2l0aCBkb2M9PU5VTEwKCSAgY292ZXJlZAoKVHVlIFNlcCAgNSAxMjo0MToxNSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdXJpLmM6IGFwcGxpZWQgV2F5bmUgRGF2aXNvbiBwYXRjaAoJKiBNYWtlZmlsZS5pbiB0ZXN0L1VSSS91cmkuZGF0YSByZXN1bHQvVVJJL3VyaS5kYXRhOiB1cGRhdGVkIFVSSSB0ZXN0cwoKTW9uIFNlcCAgNCAxMzowMTo0NSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdXJpLmMgdGVzdFVyaS5jOiBhcHBsaWVkIFdheW5lIERhdmlzb24gcGF0Y2hlcwoJKiB0ZXN0L1VSSS91cmkuZGF0YSByZXN1bHQvVVJJL3VyaS5kYXRhOiBmaXJzdCBzZXQgb2YgdGVzdHMvcmVzdWx0cwoJKiBNYWtlZmlsZS5pbjogYWRkZWQgVVJJdGVzdCBhbmQgaW5jbHVkZWQgdGhlbmluICJtYWtlIHRlc3RzIgoKU3VuIFNlcCAgMyAxOToxOToyOSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sdmVyc2lvbi5oLmluOiBjbG9zZWQgYnVnIDIyOTQxCgpUaHUgQXVnIDMxIDE2OjU1OjU1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1saW8uaHRtbDogYWRkZWQgZG9jIGFuZCBleGFtcGxlIGZvciBlbnRpdHkgbG9hZGVyCgkgIHJlZGVmaW5pdGlvbi4KClRodSBBdWcgMzEgMTQ6NTk6MjggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWxpby5odG1sIGRvYy94bWwuaHRtbDogYWRkZWQgYSBkb2Mgb24gdGhlIEkvTyBtZWNoYW5pc20KCSAgdXNlZCBieSBsaWJ4bWwKClR1ZSBBdWcgMjkgMjA6MjI6NTMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBGaXhlZCBidWcgb24gaW52YWxpZCBvbnRlbnQgY2hhcmFjdGVycyBhbmQgd2hlbiB1c2luZwoJICBwdXNoLgoJKiB4bWxsaW50LmM6IGZpeGVkIHhtbGxpbnQgZW5kbGluZyBvZiBlcnJvcnMgaW4gcHVzaCBtb2RlCgpUdWUgQXVnIDI5IDExOjI0OjQ4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgdGVzdEhUTUwuYzogYXBwbGllZCB0d28gbmV3IHBhdGNoZXMgZnJvbQoJICBXYXluZSBEYXZpc29uIDx3YXluZWRAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoJKiByZXN1bHQvSFRNTC8qLnNheDogcmVnZW5lcmF0ZWQgSFRNTCBTQVggb3V0cHV0CgkqIHBhcnNlci5jOiBtb3JlIGNsZWFudXAuCgpNb24gQXVnIDI4IDExOjU4OjEyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLltjaF0gdGVzdEhUTUwuYzogYXBwbGllZCB0aGUgc2Vjb25kIHNldCBvZgoJICBwYXRjaGVzIGZyb20gV2F5bmUgRGF2aXNvbiA8d2F5bmVkQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4sCgkgIGFkZGluZyBodG1sRW5jb2RlRW50aXRpZXMoKQoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGFuIGlnbm9yYWJsZSB3aGl0ZSBzcGFjZSBkZXRlY3Rpb24gYnVnCgkgIG9jY3VyaW5nIHdoZW4gcGFyc2luZyB3aXRoIFNBWCBvbmx5CgkqIHJlc3VsdC9IVE1MLyouc2F4OiB1cGRhdGVkIHNpbmNlIHRoZSBvdXRwdXQgaXMgbm93IEhUTUwKCSAgZW5jb2RlZC4uLgoKTW9uIEF1ZyAyOCAwMDozODozMSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5bY2hdOiBhcHBsaWVkIHNvbWUgb2YgV2F5bmUgRGF2aXNvbgoJICA8d2F5bmVkQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gcGF0Y2hlcwoKU3VuIEF1ZyAyNyAyMjoxNDowMSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogU0FYLmMgdHJlZS5jIGRlYnVnWE1MLmM6IGZpeGVkIGJvZ3VzIGJlaGF2aW91ciB3aGVuIGFuCgkgIHVuZGVjbGFyZWQgbmFtZXNwYWNlIHByZWZpeCB3YXMgdXNlZCwgYWRkZWQgYSB3YXJuaW5nLgoJICBDbGVhbmVkIHVwIHN1cHBvcnQgdy5yLnQuIGVudGl0aWVzLCBzcGlsbGluZyBvdXQgYSB3YXJuaW5nCgkgIGFuZCBiZWluZyBwZWRhbnRpYyBvbiBsb29rdXBzLgoJKiB0ZXN0L3dhcm5pbmcvZW50OSA6IGFkZGVkIHRlc3RjYXNlIGZvciBwcmV2aW91cyBleGFtcGxlLgoJKiBUT0RPOiB1cGRhdGVkCgkqIHBhcnNlckludGVybmFscy5oIHBhcnNlci5jOiBjaGFuZ2VkIHRoZSB3YXkgbmFtZXMgYXJlIHBhcnNlZAoJICBub3cgYWxsb3cgaW5maW5pdGUgc2l6ZSBhbmQgZGVjcmVhc2UgcGVuYWx0eSBmb3Igbm9ybWFsIHVzZQoJKiBwYXJzZXIuYzogU3RhcnRlZCBhIGJpZyBjbGVhbnVwL2NoZWNrIG9mIHRoZSBwYXJzZXIgY29kZSwKCSAgZml4ZWQgc29tZSBvZiB0aGUgbW9zdCB0b3J0dW91cyBlbnRpdHkgY29kZSwgc3BvdHRlZCBjb2RlCgkgIHVudXNlZCBhbnltb3JlCgkqIHRlc3QvKjogYWRkZWQgdGVzdHMgZm9yIHZlcnkgbG9uZyBuYW1lcyBhbmQgcmVsYXRlZCBuYXN0eQoJICB0aGluZ3MuCgpTYXQgQXVnIDI2IDIzOjMxOjA0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvZW5jb2RpbmcuaHRtbDogYWRkZWQgZW5jb2RpbmcgYWxpYXNlcyBkb2MKCSogZG9jL3htbC5odG1sOiB1cGRhdGVzCgkqIGVuY29kaW5nLltjaF06IGFkZGVkIEVuY29kaW5nQWxpYXNlcyBmdW5jdGlvbnMKCSogZW50aXRpZXMuW2NoXSB2YWxpZC5bY2hdIGRlYnVnWE1MLmM6IHJlbW92ZWQgdHdvIHNlcmlvdXMKCSAgYm90dGxlbmVjayBhZmZlY3RpbmcgbGFyZ2UgRFREcyBsaWtlIERvY2Jvb2sKCSogcGFyc2VyLltjaF0geG1sbGludC5jOiBhZGRlZCBhIHBlZGFudGljIG9wdGlvbiwgd2lsbCBiZQoJICB1c2VmdWwKCSogU0FYLmM6IHJlZGVmaW5pdGlvbiBvZiBlbnRpdGllcyBpcyByZXBvcnRlZCBpbiBwZWRhbnRpYyBtb2RlCgkqIHRlc3RIVE1MLmM6IHVuaW5pdGlhbGl6ZWQgd2FybmluZyBmcm9tIGdjYwoJKiB1cmkuYzogZml4ZWQgYSBjb3VwbGUgb2YgYnVncwoJKiBUT0RPOiBhZGRlZCBpc3N1ZSByYWlzZWQgYnkgTWljaGFlbAoKV2VkIEF1ZyAyMyAwMTo1MDo1MSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL2VuY29kaW5nLmh0bWw6IHByb3BhZ2F0ZWQgTWFydGluIER1ZXJzdCBzdWdnZXN0aW9ucwoKV2VkIEF1ZyAyMyAwMDoyMzo0MSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IEZpeGVkIEJ1ZyMyMTU1MjogbGlieG1sIGZhaWxzIHRvIGRlY29kZSAmYW1wOwoJKiB1cmkuYyB0ZXN0VXJpLmMgcGF0Y2hlcywgYnkgTWFyYyBTYW5mYWNvbiAoMSBsZWZ0KQoJKiBwYXJzZXIuYyBIVE1McGFyc2VyLmM6IEhUTUwvZW5jb2RpbmcgcHVzaCBwcm9ibGVtcyByZXBvcnRlZGkKCSAgYnkgV2F5bmUgRGF2aXNvbgoKU3VuIEF1ZyAyMCAxNzowMzozOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmM6IHNtYWxsIGNsZWFudXAKCSogVE9ETzogdXBkYXRlZAoKU2F0IEF1ZyAxOSAyMjo1NzowMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWRkZWQgYW4gb2xkIFZDIHRlc3RjYXNlIGFuZCB1cGRhdGVkIHRpdGxlLnhtbCBlbnRpdHkKClNhdCBBdWcgMTkgMjE6MDI6MDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyBTQVguYyB0cmVlLmMgSFRNTHRyZWUuaCByZXN1bHQvSFRNTC8qOiB3b3JrCgkgIGRvbmUgb24gYXV0by1vcGVuaW5nIG9mIDxwPiB0YWdzIGFuZCBjbGVhbnVwIG9mIFNBWCBvdXRwdXQKClNhdCBBdWcgMTkgMTg6NDU6NDAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGxpYnhtbC40ICB4bWxsaW50LjEgTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IGFkZGVkIG1hbiBwYWdlcwoKU2F0IEF1ZyAxOSAxODozODo1MyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sIGxpYnhtbC4qIHN0cnVjdHVyZS4qOiB1cGRhdGVkIHRoZSBkb2MgYSBiaXQKClRodSBBdWcgMTcgMTU6NTA6MDAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRlc3RTQVguYyB0ZXN0SFRNTC5jIHJlc3VsdC9IVE1MLzogY2xlYW51cCBvZiB0aGUgb3V0cHV0CgkgIG9mIFNBWCB0ZXN0cwoKTW9uIEF1ZyAxNCAxMzo1NjozMyBFRFQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBQYXRjaCBmcm9tIEFsYmVydCBDaGluLUEtWW91bmcgPGNoaW5hQHRoZXdyaXR0ZW53b3JkLmNvbT46CgkqIHhtbGxpbnQuYzogd29ya2Fyb3VuZCBhIE1BUF9GQUlMRWQgZGVmaW5pdGlvbiBidWcgaW4gRFUtNC4wCgpNb24gQXVnIDE0IDExOjEwOjIwIEVEVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFBhdGNoIGZyb20gRGF2ZSBZZWFya2UgPHllYXJrZUBlbmcuYnVmZmFsby5lZHU+OgoJKiB0ZXN0SFRNTC5jOiBmaXggY29yZSBkdW1wIG9uIFNvbGFyaXMgMi54IHN5c3RlbXMKCSogSFRNTHBhcnNlci5jOiBmaXggc2VnZmF1bHQgaWYgY3R4dC0+c2F4LT5jaGFyYWN0ZXJzKCkgaXMgTlVMTAoJKiByZXN1bHQvSFRNTC8qLnNheDogcHJldmlvdXMgYnVnIGZpeCBsZWFkIHRvIG5ldyByZXN1bHRzCgpNb24gQXVnIDE0IDEwOjI2OjA5IEVEVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFBhdGNoIGZyb20gQWxiZXJ0IENoaW4tQS1Zb3VuZyA8Y2hpbmFAdGhld3JpdHRlbndvcmQuY29tPjoKCSogY29uZmlndXJlLmluOiBhZGRlZCAtLXdpdGgtcmVhZGxpbmU9RElSIHRvIGFjY2VwdCBhbHRlcm5hdGUKCSAgcGF0aCBmb3IgcmVhZGxpbmUgaW5jbHVkZS9saWJyYXJ5CgkqIGNvbmZpZ3VyZS5pbjogYWRkZWQgQU1fQ19QUk9UT1RZUEVTIHRvIGFkZCAtQWEgLURfSFBVWF9TT1VSQ0UKCSAgZm9yIEFOU0kgdW5kZXIgSFAtVVgKCSogY29uZmlnLmluOiBSZW1vdmVkIEBMSUJTQCBmcm9tIHhtbC1jb25maWcgYmVjYXVzZSBAWE1MX0xJQlNACgkgIGluY2x1ZGVzIEBMSUJTQAoKU2F0IEF1ZyAxMiAyMzoxOTo0MiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jLyogOiByZWJ1aWx0IHRoZSBkb2NzCgkqIGdldHRpbmcgcmVhZHkgZm9yIDIuMi4yIHJlbGVhc2UKClNhdCBBdWcgMTIgMTY6NDI6MzcgRURUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLltjaF06IGFkZGVkIHhtbEdldEZlYXR1cmVzTGlzdCgpIHhtbEdldEZlYXR1cmUoKQoJICBhbmQgeG1sQWRkRmVhdHVyZSgpCgkqIHRyZWUuW2NoXTogYWRkZWQgeG1sQWRkQ2hpbGRMaXN0KCkKCSogeG1sbGludC5jOiBNQVBfRkFJTEVEIG1hY3JvIHRlc3QKCSogcGFyc2VyLmg6IGFkZGVkIHhtbFBhcnNlQ3R4dEV4dGVybmFsRW50aXR5KCkKCSogdmFsaWQuYzogYXBwbGllZCBidWcgZml4ZXMgcmVtb3ZlZCB3YXJuaW5nCgkqIHRyZWUuYzogYWRkZWQgQ0RBVEEgYmxvY2sgdG8gZWxlbWVudHMgY29udGVudAoJKiB0ZXN0U0FYLmM6IGNsZWFudXAgb2Ygb3V0cHV0CgkqIHRlc3RIVE1MLmM6IGFkZGVkIFNBWCB0ZXN0aW5nCgkqIGVuY29kaW5nLmM6IGJldHRlciBlcnJvciByZWNvdmVyeQoJKiBTQVguYywgcGFyc2VyLmM6IGZpeGVkIG9uZSBvZiB0aGUgZXh0ZXJuYWwgZW50aXR5IHByb2Nlc3NpbmcKCSAgb2YgdGhlIE9BU2lzIHRlc3RzdWl0ZQoJKiBNYWtlZmlsZS5hbTogYWRkZWQgSFRNTCBTQVggcmVncmVzc2lvbiB0ZXN0cwoJKiBjb25maWd1cmUuaW46IGJ1bXBlZCB0byAyLjIuMgoJKiB0ZXN0L0hUTUwvIHJlc3VsdC9IVE1MOiBhZGRlZCBhIGZldyBvZiBIVE1MIHRlc3RzLCBhbmQgYWRkZWQgdGhlCgkgIFNBWCByZXN1bHRzCgpGcmkgQXVnICA0IDExOjIxOjUwIFBEVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogcGF0Y2ggZm9yIEhQIGNvbXBpbGVyCgoyMDAwLTA4LTA0ICBTdmVuIEhlaW5pY2tlICA8c3ZlbkB6ZW4ub3JnPgoKCSogeG1sbGludC5jOiBXYXMgY29yZWR1bXBpbmcgc29tZXRpbWVzIHdoZW4gdGhlIGZpbGUgZ2l2ZW4gZGlkbid0CglleGlzdC4KClNhdCBKdWwgMjIgMDU6NTk6MDUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jIHhtbElPLltjaF06IGZpeGVkIHRoZSBwcm9ibGVtIG9mIGVuY29kaW5nIHN1cHBvcnQKCgkgIHdoZW4gdXNpbmcgaW4gbWVtb3J5IHBhcnNpbmcuIE5lZWQgc29tZSBjbGVhbnVwLgoJKiB4bWxsaW50LmMgY29uZmlndXJlLmluOiBhZGRlZCBhIC0tbWVtb3J5IGZsYWcgdG8gdGVzdCBtZW1vcnkKCSAgcGFyc2luZwoKRnJpIEp1bCAyMSAxNzowOTo1NyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuYzogZml4ZWQgc29ja2xlbl90IHJlcGxhY2VtZW50IHRvIHVuc2lnbmVkIGludAoJKiBwYXJzZXIuYzogZml4ZWQgYSBzcGFjZSBoYW5kZGxpbmcgbWlzc2luZyBhdCB0aGUgZW5kIG9mCgkgIHByb2R1Y3Rpb24gMjggRE9DVFlQRS4KCSogeG1sbWVtb3J5LmM6IGZpeGVkIGEgc3R1cGlkIGJ1ZyBvbiB0aGUgcm91dGluZSB0byBvdmVycmlkZQoJICBhbGxvY2F0aW9uIGZ1bmN0aW9ucwoJKiBUT0RPOiB1cGRhdGVkCgpGcmkgSnVsIDE0IDE3OjAxOjE0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvIHJlZ2VuZXJhdGVkIHRoZSBkb2NzCgpGcmkgSnVsIDE0IDE2OjEyOjIwIE1FU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvZW5jb2RpbmcuaHRtbCBkb2MveG1sLmh0bWw6IGFkZGVkIEkxOE4gZG9jCgkqIGVuY29kaW5nLltjaF0gSFRNTHRyZWUuW2NoXSBwYXJzZXIuYyBIVE1McGFyc2VyLmM6IEkxOE4gZW5jb2RpbmcKCSAgaW1wcm92ZW1lbnRzLCBib3RoIHBhcnNlciBhbmQgZmlsdGVycywgYWRkZWQgQVNDSUkgJiBIVE1MLAoJICBmaXhlZCB0aGUgSVNPLUxhdGluLTEgb25lCgkqIHhtbGxpbnQuYyB0ZXN0SFRNTC5jOiBhZGRlZC9tYWRlIHZpc2libGUgLS1lbmNvZGUKCSogZGVidWdYTUwuYyA6IGNsZWFudXAKCSogbW9zdCAuYyBmaWxlczogYXBwbGllZCBwYXRjaGVzIGR1ZSB0byB3YXJuaW5nIG9uIFdpbmRvd3MgYW5kCgkgIHdoZW4gdXNpbmcgU3VuIFBybyBjYyBjb21waWxlcgoJKiB4cGF0aC5jIDogY2xlYW51cCBtZW1sZWFrcwoJKiBuYW5vZnRwLmMgOiBhZGRlZCBhIFRFU1RJTkcgcHJlcHJvY2Vzc29yIGZsYWcgZm9yIHN0YW5kYWxvbmcKCSAgY29tcGlsZSBzbyB0aGF0IHBlb3BsZSBjYW4gcmVwb3J0IGJ1Z3MgbW9yZSBlYXNpbGx5CgkqIG5hbm9odHRwLmMgOiBkaXRjaGVkIHNvY2tsZW5fdCB3aGljaCB3YXMgYSBwb3J0YWJpbGl0eSBtZXNzCgkgIGFuZCByZXBsYWNlZCBpdCB3aXRoIHVuc2lnbmVkIGludC4KCSogdHJlZS5bY2hdOiBhZGRlZCB4bWxIYXNQcm9wKCkKCSogVE9ETzogdXBkYXRlZAoJKiB0ZXN0LyA6IGFkZGVkIG1vcmUgdGVzdCBmb3IgZW50aXRpZXMsIE5TLCBlbmNvZGluZywgSFRNTCwgd2FwCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIGZvciAyLjIuMCByZWxlYXNlCgpNb24gSnVsIDEwIDE2OjE3OjE4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmM6IGZpeGVkIHRoZSB3YXkgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiBpcyBoYW5kbGVkCgkqIGxpYnhtbC5zcGVjLmluOiBmaXhlZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjbGVhbnVwCgpNb24gSnVsICAzIDE0OjM3OjA3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWw6IGNoYW5nZWQgdGhlIHhtbHNvZnQub3JnIHN0cnVjdHVyZSwgdXBkYXRlZCB0aGUKCSAgZXhhbXBsZXMgdy5yLnQuIHJvb3QgYW5kIGNoaWxkcwoKU3VuIEp1bCAgMiAyMDo1MTo0MyBNRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbGlieG1sLnNwZWMuaW46IGZpeGVkIGJ1ZyAjNzQxOSwgZGVwZW5kZW5jaWVzIGZvdWxlZCBmb3IgbGlieG1sLWRldmVsCgpTdW4gSnVsICAyIDA5OjUyOjQ1IE1FU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IFdvcmsgb24gY2hhcmFjdGVyIGVuY29kaW5nIHN1cHBvcnQgZm9yIHRoZSBIVE1MIHBhcnNlcgoJKiBIVE1McGFyc2VyLmM6IEZpeGVkIHNvbWUgYXV0b29wZW4vYXV0b2Nsb3NlIHByb2JzIGZvciB0aGUgSFRNTCBwYXJzZXIKCSogZW5jb2RpbmcuYzogRml4ZWQgYSBwb3RlbnRpYWwgbWVtbGVhayBpbiB0aGUgZW5jb2Rpbmcgc3R1ZmYKClNhdCBKdWwgIDEgMTM6NDQ6MjIgTUVTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy9GQVEuaHRtbCBkb2MvTWFrZWZpbGUuYW0gOiBhZGRlZCBhIEZBUQoKRnJpIEp1biAzMCAyMDoyOTowOCBNRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIEhUTUx0cmVlLmMgU0FYLmMgdmFsaWQuYyB0cmVlLmggOiBtb3JlIGNsZWFudXAKCSAgb2YgdGhlIEhUTUwgcGFyc2VyIHRvIGZvcmNlIGl0IHRvIG5vdCBieXBhc3MgU0FYCgpGcmkgSnVuIDMwIDExOjE5OjU5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB3aW4zMmNvbmZpZy5oLmluOiB1cGRhdGVkCgkqIHhtbHZlcnNpb24uaC5pbjogY3JhcCBmb3Jnb3QgdG8gdXBkYXRlIHRoaXMsIHRoaXMgbWVhbiAyLjEuMAoJICBsYWNrcyBpY29udiBzdXBwb3J0IDotKCBuZWVkIHRvIHJlbGVhc2UgMi4xLjEKCSogY29uZmlndXJlLmluOiByZWxlYXNlIDIuMS4xCgkqIEhUTUxwYXJzZXI6IGZpeGVkIGJ1ZyAjMTQ3ODQKCSogeHBhdGguYyBIVE1McGFyc2VyLmMgZW5jb2RpbmcuYyBwYXJzZXIuYzogZml4IHdhcm5pbmcgcmFpc2VkCgkgIGJ5IFdpbmRvd3MgY29tcGlsZXIKCSogSFRNTHBhcnNlci5jIFNBWC5jIEhUTUx0cmVlLmggdHJlZS5oOiBjcmVhdGUgSFRNTCBkb2N1bWVudCBpbgoJICB0aGUgU0FYIHN0YXJ0RG9jdW1lbnQoKSBjYWxsYmFjay4KCSogVE9ETzogdXBkYXRlZAoKVGh1IEp1biAyOSAxMjowNjo0OCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWRkZWQgeG1sU3RvcFBhcnNlcigpCgpXZWQgSnVuIDI4IDIzOjEwOjI2IE1FU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IDIuMS4wIHByZXJlbGVhc2UKCSogTGFyZ2UgcmVzeW5jIGJldHdlZW4gVzNDIGFuZCBHbm9tZSB0cmVlCgkqIG5hbm9mdHAsIG5hbm9odHRwLmM6IGZpeGVkIHN0YWxsZWQgY29ubmVjdGlvbnMgcHJvYnMKCSogSFRNTHRyZWUuYyBTQVguYyA6IHN1cHBvcnQgZm9yIGF0dHJpYnV0ZSB3aXRob3V0IHZhbHVlcyBpbgoJICBIVE1MIGZvciBhbmRlcnNjYQoJKiB2YWxpZC5jOiBGaXhlZCBtb3N0IHZhbGlkYXRpb24gKyBuYW1lc3BhY2UgcHJvYmxlbXMKCSogSFRNTHBhcnNlci5jOiBzdGFydCBkb2N1bWVudCBjYWxsYmFjayBmb3IgYW5kZXJzY2EKCSogZGVidWdYTUwuYyB4cGF0aC5jOiBsb3RzIG9mIFhQYXRoIGZpeHVwcyBmcm9tIFBpY2RhciBUZWNobm9sb2d5CgkqIHBhcnNlci5oLCBTQVguYzogc2VyaW91cyBzcGVlZCBpbXByb3ZlbWVudCBmb3IgbGFyZ2UKCSAgQ0RBVEEgYmxvY2tzCgkqIGVuY29kaW5nLltjaF0geG1sSU8uW2NoXTogSW1wcm92ZWQgc2VyaW91c2x5IHNhdmluZyB0bwoJICBkaWZmZXJlbnQgZW5jb2RpbmcKCSogZXhhbXBsZS9NYWtlZmlsZS5hbSBleGFtcGxlL2dqb2JyZWFkLmMgdHJlZS5oOiB3b3JrIG9uIAoJICBsaWJ4bWwxIGxpYnhtbDIgY29udmVyZ2VuY2UuCgkqIGNvbmZpZy5oLmluIHBhcnNlci5jIHhtbGxpbnQuYzogYWRkZWQgeG1sQ2hlY2tWZXJzaW9uKCkKCSAgYW5kIHRoZSBMSUJYTUxfVEVTVF9WRVJTSU9OIG1hY3JvCgpGcmkgSnVuIDIzIDIyOjI2OjA3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWw6IHZhcmlvdXMgcGF0Y2hlcyBhbmQgaW1wcm92ZW1lbnRzIHR5cG8gZml4ZWQgYnkKCSAgRmVsaXggTmF0dGVyCgkqIGRvYy9saWJ4bWwtZG9jLmVsOiBFbWFjcyBtb2R1bGUgdG8gbG9va3VwIHRoZSBsaWJ4bWwgZG9jdW1lbnRhdGlvbgoJICBmcm9tIEZlbGl4IE5hdHRlciA8Zm5hdHRlckBnbXgubmV0PgoKU2F0IE1heSAgNiAxMDowOTo0NSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3VwZ3JhZGUuaHRtbDogdXBkYXRlZCB3aXRoIGluc3RydWN0aW9ucyBmb3Igc3VwcG9ydCBvZiBib3RoCgkgIGxpYnhtbC0xLnggYW5kIGxpYnhtbC0yLngKCSogZG9jL2dqb2JyZWFkLmMgOiBhcHBsaWVkIFRvZGQgRHVrZXMgPHRkdWtlc0BpYm1vdG8uY29tPiBwYXRjaAoJICBmb3IgMi54IHN1cHBvcnQgYW5kIGFsc28gZml4ZWQgaW5jbHVkZXMKCldlZCBNYXkgIDMgMTQ6MjE6MjUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGVuY29kaW5nLltjaF0sIHhtbElPLltjaF0sIHBhcnNlci5jLCBjb25maWd1cmUuaW4gOiByZXZhbXBlZAoJICB0aGUgZW5jb2Rpbmcgc3VwcG9ydCwgYWRkZWQgaWNvbnYgc3VwcG9ydCwgc28gbm93IGxpYnhtbCBpZgoJICBjb21waWxlZCB3aXRoIGljb252IGF1dG9tYXRpY2FsbHkgc3VwcG9ydCBqYXBhbmVzZSBlbmNvZGluZ3MKCSAgYW1vbmcgb3RoZXJzLiBXb3JrIGJhc2VkIG9uIGluaXRpYWwgcGF0Y2ggZnJvbSBZdWFuLUNoZW4gQ2hlbmcKCSAgSSBtYXkgaGF2ZSBicm9rZW4gYmluYXJ5IGNvbXBhdCBpbiB0aGUgZW5jb2RpbmcgaGFuZGxlcgoJICByZWdpc3RyYXRpb24gc2NoZW1lLCBidXQgdGhhdCB3YXMgc28gdXR0ZXJseSBicm9rZW4gSSBkb24ndAoJICBleHBlY3QgYW55Ym9keSB0byBoYXZlIHVzZWQgdGhpcyBmZWF0dXJlIHVudGlsIG5vdy4KCSogcGFyc2VySW50ZXJuYWxzLmg6IGZpeHVwIG9uIHRoZSBDSEFSIHJhbmdlIG1hY3JvCgkqIHhtbC1lcnJvci5oLCBwYXJzZXIuYzogY2F0Y2ggVVJML1VSSSBlcnJvcnMgdXNpbmcgdGhlIHVyaS5jCgkgIGNvZGUuCgkqIHRyZWUuW2NoXTogYWRkZWQgeG1sQnVmZmVyR3JvdygpLCB3YXMgbmVlZGVkIGZvciBpY29udgoJKiB1cmkuYzogYWRkZWQgeG1sUGFyc2VVUkkoKSBJIGNhbid0IGJlbGlldmUgSSBmb3Jnb3QgdG8KCSAgaW1wbGVtZW50IHRoaXMgb25lIGluIDIuMCAhISEKCSogU0FYLmM6IG1vdmVkIGRvYy0+ZW5jb2RpbmcgdXBkYXRlIGluIHRoZSBlbmREb2N1bWVudCgpIGNhbGwuCgkqIFRPRE86IHVwZGF0ZWQuCgpNb24gQXByIDI0IDEzOjMwOjEzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmg6IHJlbW92ZWQgZXh0cmFuZW91cyB4bWxSZW1vdmVQcm9wIGRlZmluaXRpb24KCSogVE9ETzogYWRkZWQgaXRlbSBhYm91dCAtLWRpc2FibGUtY29yYmEgY29uZmlndXJlIHN3aXRjaAoJKiB0cmVlLmMgcGFyc2VyLmM6IGZpeGVkIHByb2JsZW1zIGZvciB4bWxDb3B5RG9jIGFuZCBwb3N0dmFsaWRhdGlvbgoJKiBuYW5vZnRwLmM6IGZpeGVkIGluY2x1ZGUgcHJvYmxlbXMgZ2l2aW5nIHRyb3VibGVzIG9uIEFJWCBhbmQgCgkgIHNsb3dsYXJpcwoJKiB4bWxJTy5bY2hdIHZhbGlkLmggdHJlZS5bY2hdIHhsaW5rLmMgeG1sbWVtb3J5LmMgdXJpLmMgCgkgIHBhcnNlci5jIG5hbm9mdHAuYyBuYW5vaHR0cC5jIFNBWC5jIHRlc3RTQVguYyA6CgkgIGNvbW1lbnQgYW5kIGhlYWRlcnMgY2hhbmdlcyB0byBsb3dlciBndGstZG9jIG51bWJlciBvZiB3YXJuaW5ncwoJKiBkb2MvaHRtbC8qOiByZWJ1aWx0IGRvY3MKClN1biBBcHIgMTYgMTE6MjM6MjkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhBQ0tJTkc6IGRvY3VtZW50ZWQgdGhlIHRhZyBmb3IgMS54IGFuZCBpbnN0cnVjdGlvbnMKCldlZCBBcHIgMTIgMTU6NDc6MjIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbElPLltjaF0gcGFyc2VyLltjaF06IE1vcmUgaW50ZXJmYWNlcyBmb3IgbmV3IEkvTyBmdW5jdGlvbnMKCSAgeG1sTmV3SU9JbnB1dFN0cmVhbSwgeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVJTywKCSAgeG1sQ3JlYXRlSU9QYXJzZXJDdHh0CgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5oOiBzcGVlZHVwIG9mIElTX0NIQVIgbGlrZSBtYWNyb3MsCgkgIHNpZ25pZmljYW50IG92ZXJhbGwgaW1wcm92ZW1lbnQKCSogeG1sbGludC5jOiBhZGRlZCBJL08gdGVzdCB0byB4bWxsaW50CgkqIHRlc3RTQVguYzogYWRkZWQgYSBzcGVlZCB0ZXN0CgkqIGRvYy8qIDogdXBkYXRlZC9yZWdlbmVyYXRlZAoKU2F0IEFwciAgOCAxNDo1NDo1NCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguYyB1cmkuaCBwYXJzZXJJbnRlcm5hbHMuaDogY29zbWV0aWMgY2hhbmdlcyBmcm9tCgkgICJUaW11ciBJLiBCYWtleWV2IiA8dGltdXJAYmF0LnJ1PiwgaW5jbHVkaW5nIG1ha2luZyAKCSAgeG1sQ3JlYXRlVVJJKCkgcHVibGljCgpGcmkgQXByICA3IDE4OjM1OjAyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxJTy5bY2hdIHBhcnNlci5jOiBjbGVhbmUgdXAgdGhlIHhtbFBhcnNlcklucHV0QnVmZmVyIG1lc3MKCSAgYW5kIHRoZSBjb2RlIGF0IHRoZSBzYW1lIHRpbWUuIEFkZGVkIGEgY2xlYW4gbWVjaGFuaXNtIGZvcgoJICBvdmVybG9hZCBvciBhZGRlZCBpbnB1dCBtZXRob2RzOiB4bWxSZWdpc3RlcklucHV0Q2FsbGJhY2tzKCkKCSogdHJlZS5jOiBmaXhlZCB4bWxQcmV2U2libGluZyBhbmQgeG1sTmV4dFNpYmxpbmcgcGVyIAoJICBDaHJpc3RvcGhlIExlIEdhbCAoQ2hyaXN0b3BoZS5MZS1HYWxAaW1hZy5mcikgaW5wdXQKCSogVE9ETzogdXBkYXRlZAoJKiBkb2MvKiA6IHVwZGF0ZWQvcmVnZW5lcmF0ZWQKCSogZG9jL01ha2VmaWxlLmFtOiB0d2Vha3MgdG8gYXZvaWQgcHJvYmxlbSB3aXRoIGxpYnhtbCBsaW5rIGluIHRoZQoJICBzb3VyY2UgZGlyCgpXZWQgQXByICA1IDIxOjExOjM1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0ZXN0VVJJLmM6IHlldCBhbm90aGVyIGZvcmdvdHRlbiBjb21taXQsIEkgc2hvdWxkIGdldCBzb21lIHNsZWVwICEKCldlZCBBcHIgIDUgMjA6MzY6NDYgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbGxpbnQuYzogZm9yZ290IHRvIGNvbW1pdCB0aGlzIHRvbyA/CgpXZWQgQXByICA1IDE2OjIyOjQ0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWx2ZXJzaW9uLmguaW4gOiBmb3Jnb3QgdG8gY29tbWl0IHRoaXMgcHJldmlvdXNseQoKTW9uIEFwciAgMyAyMTo0NzoxMCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgbGlieG1sLTIuMC4wIHZlcnNpb24gbG9va3MgT2sgc28gZmFyCgkqIFJFQURNRSBUT0RPOiB1cGRhdGVkIGZvciByZWxlYXNlCgkqIHVyaS5jIHVyaS5oOiBhZGRlZCBhdXRob3JpdHkgcGFyc2luZy9zYXZpbmcKCSogdXJpLmMgdGVzdFVSSS5jIE1ha2VmaWxlLmFtOiBtb3ZlZCB0aGUgdGVzdGluZyBjb2RlIHRvIHRlc3RVUkkuYwoJKiB4bWx2ZXJzaW9uLmguaW4gY29uZmlndXJlLmluIG5hbm9mdHAuW2NoXSBuYW5vaHR0cC5bY2hdIGVuY29kaW5nLmgKCSAgZGVidWdYTUwuW2NoXSB4cGF0aC5bY2hdIHhtbElPLmMgdGVzdGVyLmMgdGVzdFhQYXRoLmMgdGVzdEhUTUwuYwoJICB0cmVlLmMgSFRNTHRyZWUuYyBIVE1McGFyc2VyLmMgdHJlZS5jIHRyZWUuaCBwYXJzZXIuYwoJICBNYWtlZmlsZS5hbSA6IGFkZGVkIGNvbXBpbGUtdGltZSBjdXN0b21pemF0aW9uIG9mIGxpYnhtbAoJICAtLXdpdGgtZnRwIC0td2l0aC1odHRwIC0td2l0aC1odG1sIC0td2l0aC14cGF0aCAtLXdpdGgtZGVidWcKCSAgLS13aXRoLW1lbS1kZWJ1ZwoJKiAqLltjaF0gYXV0b2NvbmYuc2ggOiBtb3ZlZCB0byBhbiBhYnNvbHV0ZSBhZHJlc3Npbmcgb2YgaW5jbHVkZXMgOiAKCSAgI2luY2x1ZGUgPGxpYnhtbC94eHguaD4gSSBob3BlIGl0IHdvbid0IGJyZWFrIHRvbyBtdWNoIHN0dWZmCgkgIGFuZCB3aWxsIGJlIG1hbmFnZWFibGUgaW4gdGhlIGZ1dHVyZS4uLgoJKiB4bWxsaW50LmMgTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW4gOiByZW5hbWVkIHRlc3Rlci5jIHRvIHhtbGxpbnQuYwoJICBhbmQgYWRkZWQgeG1sbGludCB0byB0aGUgaW5zdGFsbGVkIHByb2dyYW1zCgkqIHVyaS5oOiBhZGRlZCB4bWxGcmVlVVJJKCkKCkZyaSBNYXIgMjQgMTQ6MzU6MjEgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdXJpLmMgdXJpLmg6IGZpbmlzaGVkIHRoZSBlc2NhcGluZyBoYW5kbGluZywgdGhlIGJhc2Ugc3VwcG9ydAoJICBhbmQgdGhlIFVSSSBwYXRoIG5vcm1hbGl6YXRpb24uIExvb2tzIGdvb2QganVzdCBsYWNrcyB0aGUKCSAgYXV0aG9yaXR5IGNvbnRlbnQgcGFyc2luZyBjb2RlLgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgaW5zdHJ1Y3Rpb25zIHRvIGdlbmVyYXRlIHRlc3RVUkkKCSogVE9ETzogdXBkYXRlZAoJKiBkb2MveG1sLmh0bWwsIGRvYy9zbWFsbGZvb3Rvbmx5LmdpZiBkb2MvdzNjLnBuZzogdXBkYXRlZCwKCSAgYWRkZWQgbGlua3MgYW5kIGljb25zIGZvciBXM0MgYW5kIEdub21lCgpNb24gTWFyIDIwIDE0OjA1OjI2IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbG1lbW9yeS5bY2hdIDogc2VlbXMgSSBmb3Jnb3QgdG8gYWN0dWFsbHkgdXBkYXRlIHRoZSBmaWxlcyBpbgoJICB0aGUgbGFzdCBjb21taXQgOi0pCgkqIGRvYy94bWwuaHRtbCBkb2MvaHRtbC8qIDogdXBkYXRlZCBhbmQgdXBsb2FkZWQgdGhlIGRvY3MKCk1vbiBNYXIgMjAgMTI6MzM6NTEgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdGVzdC92YWxpZC9kdGRzL3hodG1sKjogcmVtb3ZlZCBSQ1MgaW5mb3MgKHBhaW4gd2l0aCBDVlMpCgkqIFRPRE86IHVwZGF0ZWQKCSogeG1sbWVtb3J5LltjaF0gOiBhZGRlZCB4bWxNZW1TZXR1cCgpIGFuZCB4bWxNZW1HZXQoKSB0byBvdmVycmlkZQoJICBsaWJ4bWwgZGVmYXVsdCBhbGxvY2F0aW9uIGZ1bmN0aW9uIHdpdGggYW5vdGhlciBzZXQgKGxpa2UgZ21hbGxvYy8KCSAgZ2ZyZWUpLgoJKiBNYWtlZmlsZS5hbSwgdXJpLmMsIHVyaS5oOiBhZGRlZCBhIHNldCBvZiBmdW5jdGlvbnMgdG8gZG8KCSAgZXhhY3QgKGxpdHRlcmFseSBjb3BpZWQgZnJvbSB0aGUgUkZDIDIzOTYgcHJvZHVjdGlvbnMpIHBhcnNpbmcKCSAgYW5kIGhhbmRsaW5nIG9mIFVSSS4gV2lsbCBiZSBuZWVkZWQgZm9yIFhMaW5rLCBvbmUgWE1MIFdGQywgCgkgIFhNTCBCYXNlIGFuZCByZXVzZWQgaW4gdGhlIG5hbm9bZnRwL2h0dHBdIG1vZHVsZXMuIFN0aWxsIHdvcmsKCSAgdG8gYmUgZG9uZS4KClR1ZSBNYXIgMTQgMjA6NTI6MzUgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluLCBsaWJ4bWwuc3BlYy5pbiA6IGxpYnhtbDIKCSogZG9jLyogOiB1cGRhdGVkIHRoZSBkb2MgcGFnZSwgcmVidWlsdCB0aGUgZG9jcwoKVHVlIE1hciAxNCAxOToxMToyOSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhbGw6IHRhZ2dlZCBMSUJfWE1MXzFfWAoJKiAqLmMgKi5oIDogdXBkYXRlZCBmcm9tIFczQyBDVlMgdHJlZQoJKiBjb25maWd1cmUuaW4gOiAyLjAuMC1iZXRhCgkqIGxpYnhtbC5zcGVjLmluIDogbGlieG1sMiBwYWNrYWdlIG5hbQoJKiByZXN1bHQvKiA6IG5ldyB2ZXJzaW9uIG9mIHRoZSB0ZXN0cyBvdXRwdXQKCk1vbiBNYXIgIDYgMDk6MzQ6NTIgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sLCBkb2MvdXBkYXRlLmh0bWw6IHVwZGF0ZWQgZG9jcywgMS44LjcKClNhdCBNYXIgIDQgMTY6MTQ6NDIgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jLyogOiByZWJ1aWx0IHRoZSBkb2NzCgkqIHBhcnNlci5jOiBmaW5hbCBwYXRjaCBvbiAjNjc2NgoJKiB2YWxpZC5jOiBzbWFsbCBwYXRjaCBvbiB2YWxpZGl0eSBjaGVja3MuCgpTYXQgTWFyICA0IDEyOjM4OjQxIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy91cGdyYWRlLmh0bWw6IGluc3RydWN0aW9uIG9uIGhvdyB0byB1cGdyYWRlIGZyb20gMS54IHRvIDIueAoJICBhZGRlZAoJKiBwYXJzZXIuYzogYWRkaW5nIHhtbEtlZXBCbGFua3NEZWZhdWx0KCkgYXMgYSB3YXkgdG8gbWFuYWdlCgkgIGNvbXBhdGliaWxpdHkgdy5yLnQuIFhNTCBzcGVjIGFuZCBleGlzdGluZyBjb2RlLgoKVGh1IE1hciAgMiAwNDo0NToxNSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogc2VlbXMgYSBiZXR0ZXIgc29sdXRpb24gdG8gPGE+ICAgPC9hPiBleGlzdHMsCgkgIHdpbGwgdHJ5IGl0IGZvciBhIHdoaWxlCgpUaHUgTWFyICAyIDAyOjI2OjEzIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiB0cmllZCB0byByZW1vdmUgdGhlIDxhPiAgIDwvYT4gZ2VuZXJhdGluZyA8YS8+CgkgIHRoaXMgaXMgaGFyZC4gTGVmdCBhIGZsYWcgZm9yIHRoYXQgcHVycG9zZS4gRml4ZWQgYnVnICM2NzY2CgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyZWQgMS44Ljcgbm90IHJlbGVhc2VkLCBkdWUgdG8gcHJldmlvdXMKCSAgcHJvYmxlbQoKVGh1IE1hciAgMiAwMzowMzo1MCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgOiBhcHBsaWVkIHNlY29uZCBwYXRjaCBmcm9tIFBhdWwgRHVCb2lzCgpUdWUgRmViIDI5IDIzOjU1OjEzIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCA6IGFwcGxpZWQgcGF0Y2ggZnJvbSBQYXVsIER1Qm9pcwoKVGh1IEZlYiAgMyAxNjozNjozOSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYyBIVE1McGFyc2VyLmM6IGRvIGEgYml0IG9mIGJ1ZmZlcml6YXRpb24gaW4gcHVzaCBtb2RlLgoKVGh1IEZlYiAgMyAxNTo1OTozNyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYyB0cmVlLmMgSFRNTHRyZWUuW2NoXSBkZWJ1Z1hNTC5jIHhwYXRoLmM6IEZpeGVkCgkgIGNvbXBpbGF0aW9uIHdhcm5pbmdzIG9uIHZhcmlvdXMgcGxhdGZvcm1zLgoJKiBwYXJzZXIuYzogRml4ZWQgIzUyODEgdmFsaWRpdHkgZXJyb3IgY2FsbGJhY2tzIGFyZSBub3cgZGVzYWN0aXZlZAoJICBieSBkZWZhdWx0IGlmIG5vdCB2YWxpZGF0aW5nLgoKVGh1IEZlYiAgMyAxMzo0NjoxNCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmMsIHdpbjMyY29uZmlnLmguaW46IHBhdGNoZXMgdG8gY29tcGlsZSBvbiBXSU4zMgoKV2VkIEZlYiAgMiAyMjo1MToxNiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmM6IHNucHJpbnRmL3NwcmludGYgcGF0Y2ggY291cnRlc3kgR2VvcmdlIEthdHNpcmVsb3MKCSAgPGdrYXRzaUBjcy50b3JvbnRvLmVkdT4KCk1vbiBKYW4gMzEgMTg6NTg6MjEgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5jIG5hbm9odHRwLmM6IEZpeGVkICcjJyBhbmQgJz8nIHN0cmlwcGluZyB3aGVuCgkgIHByb2Nlc3NpbmcgVVJMcwoKTW9uIEphbiAzMSAxNDoyNTo1NyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLltjaF06IGNsZWFudXAsIGJ1ZyBmaXhlcywgaW50ZWdyYXRpb24gaW4gcnBtZmluZCwgYWRkZWQKCSAgeG1sTmFub0ZUUFVwZGF0ZVVSTCBmb3IgcGVyc2lzdGVudCBjb250cm9sIGNvbm5lY3Rpb25zLgoJKiBjb25maWd1cmUuaW46IDEuOC42CgpUaHUgSmFuIDI3IDE3OjUyOjI5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9odHRwLltjaF0sIG5hbm9mdHAuW2NoXTogY2xlYW51cCwgYWRkZWQgcHJveHkgc3VwcG9ydAoJKiB0cmVlLltjaF0gOiBhZGRlZCB4bWxTYXZlTm9FbXB0eVRhZ3MKCjIwMDAtMDEtMjkgIEphbWVzIEhlbnN0cmlkZ2UgPGphbWVzQGRhYS5jb20uYXU+CgoJKiBuYW5vZnRwLmM6IGluY2x1ZGUgPG5ldGluZXQvaW4uaD4gZm9yIElQUFJPVE9fVENQLgoKCSogTWFrZWZpbGUuYW06IGFkZGVkIG5hbm9mdHAuW2NoXSB0byB0aGUgYnVpbGQuCgpXZWQgSmFuIDI2IDE4OjE0OjU1IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuW2NoXTogY2xlYW51cCwgY29tbWVudHMsIEFQSQoJKiBkZWJ1Z1hNTC5jIDogZml4ZWQgYSBidWcgaW4gdGhlIGNhdCBjb21tYW5kCgkqIGRvYy8qOiByZWdlbmVyYXRlZCB0aGUgZG9jcwoKV2VkIEphbiAyNiAxNjo1Mjo1MCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLltjaF0gcGFyc2VyLmMgeG1sSU8uW2NoXTogYWRkZWQgYSBOYW5vIEZUUCBpbXBsZW1lbnRhdGlvbgoJKiBkZWJ1Z1hNTC5jIDogZml4ZWQgYSBidWcgaW4gdGhlIGNhdCBjb21tYW5kCgkqIHZhbGlkLmM6IGZpeGluZyBzb21lIHNtYWxsIHByb2JzCgkqIGxpYnhtbC5zcGVjLmluOiBnZXQgcmlkIG9mIHRoZSBTTkFQIHN1ZmZpeAoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQgdGhlIHN0YXR1cwoKTW9uIEphbiAyNCAxNDozMTowOSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWwtY29uZmlnLmluOiB4bWwtY29uZmlnIC0tdmVyc2lvbiB0byBqdXN0IHJldHVybiB0aGUKCSAgdmVyc2lvbiBudW1iZXIKCSogeHBhdGguYzogc29tZSBjbGVhbnVwIHcuci50LiBheGlzIHdoZW4gdGhlIGN1cnJlbnQgbm9kZSBpcwoJICBhbiBhdHRyaWJ1dGUuCgkqIFRPRE86IHVwZGF0ZWQKClR1ZSBKYW4gMTggMTg6NDY6MDYgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJlZCBmb3IgbGlieG1sLTEuOC41CgkqIGRvYy8qIHJlY29tcGlsZWQgdGhlIGRvY3VtZW50YXRpb24KCjIwMDAtMDEtMTcgIEpvZHkgR29sZGJlcmcgPGpnb2xkYmVyZ0Bob21lLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiA6IFdBUk5JTkcgYXV0b2NvbmYgc3VidGxldHkgYWxlcnQgOgoJICBVc2UgQUNfQ0hFQ0tfSEVBREVSUyByYXRoZXIgdGhhbiBBQ19DSEVDS19IRUFERVIKCSAgd2hlbiBsb29raW5nIGZvciB6bGliLmggc28gdGhhdCBIQVZFX1pMSUJfSCBpcyBkZWZpbmVkLgoJKiBjb25maWcuaC5pbiA6IEhhdmUgYSAjdW5kZWYgZm9yIEhBVkVfWkxJQl9IIHNvIHRoYXQgaXQgd2lsbAoJICBnZXQgZGVmaW5lZCBieSBBQ19DSEVDS19IRUFERVJTLgoKTW9uIEphbiAxNyAxNzowNDoxMiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IGZpeGVkIGEgaGlkZW91cyBidWcgaW4geG1sR2V0UHJvcCgpIHRoYW5rcyB0bwoJICBSdW5lLkRqdXJodXVzQGZhc3Qubm8KClNhdCBKYW4gMTUgMTU6MDk6MDYgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogVE9ETzogdXBkYXRlZAoJKiB0cmVlLmMsIHBhcnNlci5jOiBtYWRlIHN1cmUgdGhhdCBvbmx5IG1lbW9yeSBhbGxvYyBwcm9ibGVtcwoJICBhbmQgaW50ZXJuYWwgcGFyc2VyIGVycm9ycyBhcmUgYWxsb3dlZCB0byB3cml0ZSB0byBzdGRvdXQgb3IKCSAgc3RkZXJyLgoKVGh1IEphbiAxMyAxMTo0OToxMSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmMgOiByZXN0b3JlZCB4bWxOZXdHbG9iYWxOcyBzaW5jZSB0aGlzIHNlZW1zIHVzZWQgYnkKCSAgYSBsb3Qgb2YgZXhpc3RpbmcgY29kZSA6LSgsIGZpeGVkIGEgYnVnIGluIHhtbE5ld05zCgkqIG5hbm9odHRwLmM6IGZpeGVkIGEgcHJvYmxlbSB3aXRoIElOQ0xVREVfV0lOU09DSwoJKiBIVE1McGFyc2VyLmMsIHBhcnNlci5jLCBlbnRpdGllcy5jLCB2YWxpZC5jIDogcmVtb3ZlZCBhbGwgY2FsbHMKCSAgdG8gZXhpdCgpIGZyb20gdGhlIGxpYnJhcnkgY29kZS4KCSogeHBhdGguYywgcGFyc2VyLmM6IHJlbW92ZWQgYnVncyBvciB1bnVzZWQgY29kZSBkZXRlY3RlZCBieSAKCSAgV2luZG93cyBjb21waWxlcnMKCSogcGFyc2VyLmM6IHN0YXJ0ZWQgYWRkaW5nIGludGVyZmFjZXMgZm9yIHBhcnNpbmcgd2VsbCBiYWxhbmNlZAoJICBYTUwgZnJhZ21lbnRzCgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzaW5nIDEuOC40CgkqIGRvYy8qIDogcmVidWlsdCB0aGUgZG9jcwoKU3VuIEphbiAgOSAyMzowMzoyMCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF0gOiBhZGRlZCB4bWxOZXdEb2NGcmFnbWVudCgpIGZvciBET00KCSogdGVzdEhUTUwuYzogdW5pbml0aWFsaXplZCB2YXJpYWJsZS4KCldlZCBKYW4gIDUgMTc6Mjk6MTcgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jLyogOiByZWJ1aWxkIHRoZSBkb2NzCgpXZWQgSmFuICA1IDE3OjA4OjQzIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFjY29uZmlnLmg6IHJlYWRsaW5lIGFuZCBoaXN0b3J5IHBhdGNoCgkqIHZhbGlkLltjaF06IGFkZGVkIHhtbFJlbW92ZUlEKCkgYW5kIHhtbFJlbW92ZVJlZigpCgkqIHRyZWUuYzogYWRkZWQgY2hlY2sgYW5kIGhhbmRsaW5nIHdoZW4gcG9zc2libHkgcmVtb3ZpbmcgYW4gSUQKCSogdHJlZS5jLCBIVE1McGFyc2VyLmgsIEhUTUx0cmVlLmg6IGZpeGVkIGVudGl0aWVzIHBhcnNpbmcKCSAgICAgYW5kIHNhdmluZy4KCSogdGVzdC9IVE1ML2VudGl0aWVzLmh0bWwgcmVzdWx0L0hUTUwvZW50aXRpZXMuaHRtbCogOiB0ZXN0IGZvcgoJICAgICB2YXJpb3VzIGVudGl0aWVzIHJlZmVyZW5jZSBjYXNlcwoJKiByZXN1bHQvSFRNTC8qIDogYXMgYSByZXN1bHQgb3V0cHV0IG9mIHNvbWUgdGVzdGNhc2UgaGF2ZQoJICAgICBjaGFuZ2VkCgkqIEhUTUxwYXJzZXIuYywgcGFyc2VyLmM6IGZpeGVkIGEgYnVnIGluIHRoZSBwdXNoIG1vZGUgdHJpZ2dlcmVkCgkgICAgIGJ5IHByZXZpb3VzIGV4YW1wbGUuIGFkZGVkIHhtbFBhcnNlVHJ5T3JGaW5pc2goKS4KCSogeHBhdGguaCB0cmVlLmggcGFyc2VyLmggdmFsaWQuaCB4bWxJTy5oIHhsaW5rLmggZW5jb2RpbmcuaAoJICBlbnRpdGllcy5oIGRlYnVnWE1MLmggSFRNTHBhcnNlci5oOiBjaGFuZ2VkIHRoZSB3YXkgc3RydWN0IGFyZSAKCSAgZGVjbGFyZWQgdG8gYWxsb3cgZ3RrLWRvYyB0byBleHBvc2UgdGhvc2UKCSogcGFyc2VyLmM6IGNsb3NlZCBidWcgIzQ5NjAgIAoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW46IEFwcGxpZWQgcGF0Y2ggZnJvbSAKCSAgQWxiZXJ0IENoaW4tQS1Zb3VuZyA8Y2hpbmFAdGhld3JpdHRlbndvcmQuY29tPiBmb3IgYmV0dGVyIHpsaWIKCSAgYW5kIG1hdGgvc29ja2V0IGxpYnMgZGV0ZWN0aW9uCgpNb24gSmFuICAzIDE4OjI5OjQzIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgTWFrZWZpbGUuYW06IGxpbmsgdGVzdGVyIGFnYWluc3QgcmVhZGxpbmUKCSogZG9jL3htbC5odG1sIGRvYy8qLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3VtZW50YXRpb24gcGFnZXMKCk1vbiBKYW4gIDMgMTE6NTg6MDUgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdOiBhZGRlZCB4bWxSZW1vdmVQcm9wCgkqIHdpbjMyY29uZmlnLmguaW4gbmFub2h0dHAuYzogYXZvaWQgaW5jbHVkaW5nIHRoZSBXaW5kb3dzCgkgICAgc29ja2V0IHN0dWZmIGluIGV2ZXJ5IEMgZmlsZXMKCSogcGFyc2VyLmM6IHJlbW92ZWQgYW4gaW5kZXRlcm1pbmF0aW9uIHhtTERlY2wvUEkoeG1sLi4uKSBpbgoJICAgIHRoZSBYbUwgcGFyc2VyKHMpCgkqIHRlc3QvbnM0IHJlc3VsdC9uczQgZXRjLi4uOiBhZGRlZCB0ZXN0IGNhc2UgZm9yIHByZXZpb3VzIHByb2IgICAgCgkqIHRyZWUuYzogeG1sTmV3TnMgd2Fzbid0IGNoZWNraW5nIGZvciBkb3VibGUgZGVmaW5pdGlvbgoJKiBNYWtlZmlsZS5pbjogZml4ZWQgYSBwcm9ibGVtIHdpdGggZGlzdC1ob29rIGR1cGxpY2F0ZXMKCSogcGFyc2VyLltoY10sIHhtbElPLmM6IGZpeGVkIHRoZSBsb2FkaW5nIG9mIGV4dGVybmFsIGVudGl0aWVzCgkgICAgQVBJcywgbm93IHhtbExvYWRFeHRlcm5hbEVudGl0eSgpIGlzIHVzZWQgZXZlcnl3aGVyZSBhbmQKCSAgICBzZXR0aW5nIHVwIGFuIGFwcCBzcGVjaWZpYyBmcm9udC1lbmQgdXNpbmcgdGhlIAoJKiBTQVguYyBwYXJzZXIuYzogc29tZSBmaXhlcywgbm93IHRoZSB4aHRtbCBzcGVjIHZhbGlkYXRlcwoJICAgIHdpdGggdGhlIHhodG1sIERURC4KCSogZXJyb3IuYzogZml4ZWQgY3Jhc2hlcyBpbiBjYXNlIG9mIG5vIGlucHV0IHN0cmVhbSAgICAKCSogdGVzdC92YWxpZC9bZHRkcy9dL3hodG1sKiA6IGFkZGVkIHRoZSB4aHRtbCBzcGVjIGFuZCBkdGRzCgkgICAgdG8gdGhlIHZhbGlkYXRpb24gdGVzdHMgYW5kIHJlc3VsdHMKCldlZCBEZWMgMjkgMTU6Mjk6NTIgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5bY2hdIHRlc3RIVE1MLmM6IGFkZGVkIHB1c2ggbW9kZSBmb3IgdGhlIEhUTUwgcGFyc2VyCgkgIHRvbyBodG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoKSBhbmQgaHRtbFBhcnNlQ2h1bmsoKQoJKiBwYXJzZXIuYzogYSBiaXQgb2YgY2xlYW51cC4KCSogU0FYLmMsIEhUTUxwYXJzZXIuYzogc29tZSBhdHRyaWJ1dGVzIG1heSBub3QgaGF2ZSB2YWx1ZXMgKGNvbnRyYXJ5CgkgIHRvIFhNTCkgcmVtb3ZlZCB0aGUgbGFzdCBtZW0gbGVhayBrbm93bgoJKiBIVE1MdHJlZS5jOiBvdXRwdXQgbWVzc2FnZSBjbGVhbnVwCgkqIHhtbG1lbW9yeS5jOiBkaXNwbGF5IGNvbnRlbnQgaW5mbyBhYm91dCBtZW1vcnkgYmxvY2tzCgkqIHJlc3VsdC9IVE1ML3dpcmVkLiogOiBtaXNzaW5nIGF0dCB2YWx1ZSB3YXJuaW5nIGNoYW5nZQoKVHVlIERlYyAyOCAxNzo0Mjo0MSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvKiA6IHJlYnVpbHQgdGhlIGRvY3VtZW50YXRpb24KClR1ZSBEZWMgMjggMTg6NDQ6MjIgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLltjaF0gcGFyc2VySW50ZXJuYWxzLmg6IFB1c2ggcGFyc2VyIGZvciBYTUwsCgkgICAgIHNlZW1zIHRvIHdvcmsgZmluZSBub3cKCSogdGVzdGVyLmMgZGVidWdYTUwuW2NoXTogQWRkZWQgYW4gWE1MIHNoZWxsIGRlYnVnIGZhY2lsaXR5IGFuZAoJICAgICAtLXB1c2ggZm9yIHB1c2ggdGVzdGluZwoJKiB4cGF0aC5bY2hdIDogY2xlYW5lZCB1cCBmb3IgU2hlbGwgdXNhZ2UsIGFkZGVkIG1pc3NpbmcgQVBJcwoJKiB0ZXN0U0FYLmM6IGFkZGVkIC0tcHVzaAoJKiBIVE1MdHJlZS5bY2hdIHRyZWUuW2NoXTogbmV3IGZ1bmN0aW9ucyBmb3IgZHVtcGluZyBwYXJ0cyBvZiB0aGUKCSAgICAgc3VidHJlZQoJKiB4bWxJTy5bY2hdIDogZW5yaWNoZWQgQVBJICsgZml4ZXMgZm9yIHB1c2ggbW9kZSAgICAgCgkqIGVudGl0aWVzLltjaF06IGFkZGVkIHRoZSBlbnRpdHkgY29udGVudCBsZW5ndGggdG8gdGhlIHN0cnVjdC4KCSogeG1sbWVtb3J5LltjaF06IG5ldyBBUEkgdG8gc2hvdyB0aGUgbGFzdCBlbnRyaWVzIGZvciB0aGUgc2hlbGwKCSogdmFsaWQuYzogYWRkZWQgcmVxdWlyZWQgYXR0cmlidXRlIHRlc3RpbmcKCSogU0FYLmM6IHRoZSBjZGF0YSBjYWxsYmFjayBub3cgbWVyZ2UgY29udGlndW91cyBmcmFnbWVudHMKCSogSFRNTHBhcnNlci5jOiBjbGVhbnVwIG9mIHNvbWUgbWFjcm9zCgpXZWQgRGVjIDIyIDEyOjIwOjUzIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBmaXggZm9yIFBJcyBuYW1lIHN0YXJ0aW5nIHdpdGggeG1sCgkqIHRyZWUuYzogZml4ZWQgYSBwb3RlbnRpYWwgcHJvYmxlbSB3aXRoIHx8IGFuZCAmJiBvcHMKCSogKi5jLCBjb25maWd1cmUuaW4gd2luMzJjb25maWcuaC5pbiA6IGdlbmVyYXRlIHdpbjMyY29uZmlnLmggZm9yCgkgIHRob3NlIG9uIHRoZSBPdGhlciBTaWRlICEKClR1ZSBEZWMgMjEgMTc6MjI6MTcgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgc3R1cGlkID0gdnMuID09IGJ1ZyA6LSgKCSogZG9jL2dub21lLXhtbC5zZ21sOiBzL2dsYWRlL3htbC8KClR1ZSBEZWMgMjEgMTQ6Mjk6MzQgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluLCBkb2MveG1sLmh0bWwgOiBidWcgZml4IHJlbGVhc2UgMS44LjIKCSogZGVidWdYTUwuaCBuYW5vaHR0cC5oIHhtbC1lcnJvci5oIHhtbG1lbW9yeS5oIHhwYXRoLmggOiAKCSAgSG9wZWZ1bGx5IHRoZSBlbmQgb2YgdGhhdCBzaWxseSBDKysgaW5jbHVkZSBwcm9ibGVtCgkqIHRyZWUuW2NoXTogQWRkZWQgYSBmZXcgZnVuY3Rpb25zOiB4bWxSZXBsYWNlTm9kZSwgeG1sQWRkUHJldlNpYmxpbmcsCgkgICAgICB4bWxBZGROZXh0U2libGluZywgeG1sTm9kZVNldE5hbWUgYW5kIHhtbERvY1NldFJvb3RFbGVtZW50CgkqIEhUTUxwYXJzZXIuYyBIVE1McGFyc2VyLmggSFRNTHRyZWUuYzogV2hlbiBzYXZpbmcgSFRNTCB0cnkgdG8gYXZvaWQgCgkgICAgICB0cm91YmxlcyB3aXRoIGF1dG9jbG9zZWQgZWxlbWVudHMgd2hlbiB0aGUgc3RyZWUgc2hhcGUgZG9lc24ndAoJICAgICAgZm9sbG93IHRoZSBEdEQgc3BlY3MuIEFkZGVkIGh0bWxJc0F1dG9DbG9zZWQoKSBhbmQKCSAgICAgIGh0bWxBdXRvQ2xvc2VUYWcoKQoJKiByZXN1bHQvSFRNTC8qLmh0bSo6IFVwZGF0ZWQgdGhlIEhUTUwgZXhhbXBsZXMgcmVncmVzc2lvbiB0ZXN0cyBvdXRwdXQKCSogU0FYLmMgdHJlZS5jOiBmaXhlZCBidWcgb24gZGVmYXVsdGluZyBuYW1lc3BhY2VzIG9uIGF0dHJpYnV0ZXMKCSogZGVidWdYTUwuYzogZml4ZWQgYSBidWcgb24gcHJpbnRpbmcgZGVmYXVsdCBuYW1lc3BhY2VzLgoJKiBIVE1MdHJlZS5jOiBmaXhlZCBhIHByb2JsZW0gd2hlbiBvdXRwdXRpbmcgWE1MIHBhcnNlZCBkb2NzIGFzIEhUTUwKCk1vbiBEZWMgMjAgMTY6MjA6NTUgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcmVzdWx0L0hUTUwvKi5odG1bbF0gOiB1cGRhdGVkIHRoZSBIVE1MIHJlZ3Jlc3Npb24gdGVzdHMgYWNjb3JkaW5nCgkgIHRvIHRoZSBuZXcgb3V0cHV0CgkqIHhwYXRoLmggeG1sLWVycm9yLmggdmFsaWQuaCB0cmVlLmggcGFyc2VyLmggZW50aXRpZXMuaCBTQVguaAoJICBIVE1MdHJlZS5oIHRyZWUuYyBlbnRpdGllcy5jOiBoZWFkZXJzIHR3ZWFraW5ncyB0byBhdm9pZCBhIG5hc3R5CgkgIHByb2JsZW0gZHVlIHRvIGludGVybWl4IG9mIGV4dGVybiAiQyIgeyAuLi4gfSBkZWNsYXJhdGlvbnMgZm9yIEMrKwoJICBhbmQgcmVjdXJzaXZlIGluY2x1ZGVzIGluIHRoZSBoZWFkZXJzCgoxOTk5LTEyLTIwICBDaHJpcyBMYWhleSAgPGNsYWhleUB1bWljaC5lZHU+CgoJKiBIVE1MdHJlZS5jOiBNYWRlIGl0IHNvIHRoYXQgaHRtbCBub2RlcyB3aXRoIGEgc2luZ2xlIGNoaWxkIGRvCglub3QgaW5zZXJ0IGEgY2FycmlhZ2UgcmV0dXJuIGJlZm9yZSBvciBhZnRlciB0aGUgY2hpbGQgbm9kZS4KClNhdCBEZWMgMTggMTY6MDc6MDMgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluLCBkb2MveG1sLmh0bWwgOiBidWcgZml4IHJlbGVhc2UgMS44LjEKCSogcGFyc2VyLmM6IGZpeGVkIGJ1ZyAjNDM0NAoJKiB4cGF0aC5oIHhtbC1lcnJvci5oIHhsaW5rLmggbmFub2h0dHAuaCBkZWJ1Z1hNTC5oIFNBWC5oIEhUTUxwYXJzZXIuaAoJICBhZGRlZCB0aGUgZ2x1ZSB0byBhdm9pZCBDKysgcHJvYmxlbXMKCSogZG9jLyogOiByZWdlbmVyYXRlZCB0aGUgZG9jdW1lbnRhdGlvbgoKVGh1IERlYyAxNiAxNjoxOToyOSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IGZpeGVkIGEgYnVnIGludHJvZHVjZWQgaW4gMS44LjAgYW5kIGJyZWFraW5nIGRlZmF1bHQKCSAgbmFtZXNwYWNlIHJlY29nbml0aW9uLCBhbmQgRGlhIGFzIGEgcmVzdWwgOi0oCgkqIGVuY29kaW5nLmM6IGNsb3NlZCBidWcgIzM5NTAKCldlZCBEZWMgMTUgMTk6MjI6MjMgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdmFsaWQuYzogZGVidWdnaW5nIGEgcG9zdGVyaW9yaSB2YWxpZGF0aW9uLCBleGNlcHQgVVJJIGV4cGFuc2lvbgoJICBzdHVmZiB0aGlzIHNob3VsZCBiZSBmaXhlZCBub3cKCSogcGFyc2VySW50ZXJuYWxzLmg6IGZpeGVkIGEgYnVnIGluIElTX0JBU0VDSEFSIHJlcG9ydGVkIGJ5CgkgIENhcmwgTnlnYXJkIDxjbnlnYXJkQGJlbGxhdGxhbnRpYy5uZXQ+CgkqIHRlc3Rlci5jOiBhZGRlZCAtLXBvc3R2YWxpZCwgY2xlYW5pbmcgb2YgdGhlIGNvZGUKCSogdHJlZS5bY2hdOiBhZGRlZCB4bWxEb2NHZXRSb290RWxlbWVudCgpCgpUdWUgRGVjIDE0IDIwOjMwOjM0IFBTVCAxOTk5IFJhbWlybyBFc3RydWdvIDxyYW1pcm9AZWF6ZWwuY29tPgoKCSogU0FYLmgsIHRyZWUuaCA6IGNoYW5nZWQgJ25hbWVzcGFjZScgdG8gJ25hbWVTcGFjZScgdG8gd29ya2Fyb3VuZAoJYysrIGxvc2FnZS4KClN1biBEZWMgMTIgMTM6MDg6MTUgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluLCBkb2MveG1sLmh0bWwgOiBidW1wZWQgdG8gMS44LjAKCSogeGxpbmsuW2NoXSwgTWFrZWZpbGUuYW0gOiBhZGRlZCBmcmFtZXdvcmsgZm9yIGxpbmsgZGV0ZWN0aW9uCgkqIHBhcnNlci5oOiBhZGRlZCBuYkNoYXJzIHRvIHBhcnNlciBjb250ZXh0LCBuZWVkZWQgZm9yIGNsZWFudXAuCgkqIHhtbG1lbW9yeS5jOiByZW1vdmVkIGEgbmFzdHkgYnVnIHdoZW4gb3V0IG9mIG1lbQoJKiB2YWxpZC5bY2hdOiBhZGRpbmcgbmFtZXNwYWNlIHN1cHBvcnQgZm9yIGF0dHJpYnV0ZSBkZWNsCgkqIHRlc3Rlci5jOiBhZGRlZCAtLWRlYnVnZW50IG9wdGlvbgoJKiBkZWJ1Z1hNTC5bY2hdOiBhZGRlZCB4bWxEZWJ1Z0R1bXBFbnRpdGllcygpCgkqIHBhcnNlci5jOiBjbGVhbnVwLCBhdm9pZGluZyB1c2Ugb2YgQ1VSX1BUUiBsaWtlIHBsYWd1ZSwgdXNpbmcKCSAgYnVmZmVycyBpbnN0ZWFkLCB0aGlzIHdhcyByZWFsbHkgbmVlZGVkLCB2YWxpZGF0aW9uIHdhcyBicmVha2luZwoJICBpbiBzdHJhbmdlIHdheXMgZHVlIHRvIHRoYXQuIEFkZGVkIHhtbFBhcnNlU3RyaW5nUEVSZWZlcmVuY2UoKQoJICBhbmQgb3RoZXIgcGFyc2luZyBmcm9tIHN0cmluZ3MgZnVuY3Rpb25zLiBFbnRpdGllcyBwcm9jZXNzaW5nCgkgIG1vZGlmaWVkIGFnYWluLCBidXQgUEVSZWYgYXJlIHN0aWxsIG5vdCBoYW5kbGVkIGNvcnJlY2x5IGJ1dAoJICB1bmxlc3MgeW91J3JlIEV2ZSBNYWxsZXIgeW91IHdvbid0IG5vdGljZSA6LSkKCSogSFRNTHBhcnNlci5jOiBsYXJnZSBjaGFuZ2VzIHRvd2FyZCByZWxpYWJpbGl0eSwgYW5kIHN3aXRjaGVkIHRvCgkgIGxvd2VyY2FzZSBpbnRlcm5hbCB0YWdzLCBYSFRNTCBpcyBsb3dlcmNhc2UsIHNvIGl0IHdpbGwgaGVscAoJICB0aGF0IG91dHB1dCBpcyBjbG9zZXIgdG8gbmV4dCB2ZXJzaW9uLgoJKiBkb2MvKiA6IHJlZ2VuZXJhdGVkIHRoZSBkb2N1bWVudGF0aW9uLCBpdCBpcyBub3cgaG9zdGVkIGF0CgkgIGh0dHA6Ly94bWxzb2Z0Lm9yZy8gKHNhbWUgYml0cyBJIGp1c3QgYm91Z2h0IHRoZSBkb21haW4gOi0pCgpGcmkgRGVjICAzIDEzOjQ2OjMyIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFNBWC5oLCBTQVguYywgbWFrZWZpbGUuYW06IGFkZGVkIFNBWC5oIG1vc3RseSB1c2VmdWwgZm9yIHRoZQoJICAgICAgICAgZG9jIGdlbmVyYXRpb24KCSogcGFyc2VyLmM6IGZpeGVkIGJ1Z3MgIzM5MDggYW5kICMzOTM3IGFuZCBhIG1lbW9yeSBsZWFrCgkgICAgICAgICBpbiB0aGUgU0FYIEFQSQoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jIG1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgYXBwZWFycyBpbiB0aGUKCSAgICAgICAgIEhUTUwgZmlsZXMKCldlZCBEZWMgIDEgMTA6Mjc6NDcgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdIEhUTUx0cmVlLmMsIGRlYnVnWE1MLmMsIGNvbmZpZ3VyZS5pbiwgeG1sLWNvbmZpZy5pbjoKCSAgICAgYWRkZWQgdGhlIHBhdGNoIGZyb20gQ2FybCBOeWdhcmQgPGNueWdhcmRAYmVsbGF0bGFudGljLm5ldD4KCSAgICAgd2hpY2ggYWxsb3cgaW1wcmVzc2l2ZSBzcGVlZCBpbXByb3ZlbWVudCBvbiBkYXRhc2V0IHdpdGgKCSAgICAgbGFyZ2UgdGV4dCBwaWVjZXMsIGJ1dCBhdCB0aGUgY29zdCBvZiBicm9rZW4gYmluYXJ5CgkgICAgIGNvbXBhdGliaWxpdHkgYW5kIHNsaWdodGx5IGJpZ2dlciBtZW1vcnkgdXNhZ2UuCgkgICAgIENvbmZpZ3VyZSB3aXRoIC0td2l0aC1idWZmZXJzIHRvIGFjdGl2YXRlIHRoZW0sIHRoZXkKCSAgICAgYXJlIHByb3RlY3RlZCB3aXRoIFhNTF9VU0VfQlVGRkVSX0NPTlRFTlQgZGVmaW5lLgoJKiBlbnRpdGllcy5bY2hdLCBwYXJzZXIuYzogYWRkZWQgeG1sQ2xlYW51cFByZWRlZmluZWRFbnRpdGllcygpLAoJICAgICBnb2FsIGlzIDAgbWVtb3J5IGxlZnQgYWxsb2NhdGVkIG9uY2UgcGFyc2VyIGlzIG5vIG1vcmUgdXNlZAoJKiB0ZXN0REFWLmMsIHRlc3RIVE1MLmMsIHRlc3RTQVguYywgdGVzdFhQYXRoLmM6IG1ha2Ugc3VyZSB3ZQoJICAgICBjYWxsIHhtbENsZWFudXBQYXJzZXIoKSBhbmQgeG1sTWVtb3J5RHVtcCgpCgpXZWQgTm92IDI0IDE5OjAwOjA2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXSB4bWxJTy5bY2hdIHBhcnNlci5jIHZhbGlkLmM6IGNvZGUgY2xlYW51cCB3aXRoIC1wZWRhbnRpYwoJKiBwYXJzZXIuW2NoXSBlbmNvZGluZy5bY2hdOiBhZGRlZCBtZW1vcnkgY2xlYW51cCByb3V0aW5lcwoJKiBwYXJzZXIuYzogY2xvc2luZyBidWcgIzM3ODgKCSogZG9jLyo6IHJlYnVpbHQgdGhlIGRvYwoKVHVlIE5vdiAyMyAxMToyMzo1NSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF06IGNsb3NpbmcgYnVnIDM3NDgsIGFkZGVkIHhtbE5ld0RvY1Jhd05vZGUoKSwgCgkgICAgICAgICAgICAgeG1sTmV3VGV4dENoaWxkKCkgYW5kIHhtbFNldENvbXByZXNzTW9kZSgpIGJlaGF2aW91ci4KCSogdGVzdGVyLmM6IGFkZGVkIC0tY29tcHJlc3Mgb3B0aW9uCgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2N1bWVudGF0aW9uCgpGcmkgTm92IDE5IDE4OjQxOjI4IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogYnVnZml4aW5nLCB0aGUgZGFtbiB0aGluZyBNVVNUIG5vdCBjcmFzaCBldmVuCgkgICAgICAgICAgICAgICAgaWYgZ2l2ZW4gL3Byb2Mva2NvcmUgYXMgaW5wdXQgIQoJKiBkb2MveG1sLmh0bWwgZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3VtZW50YXRpb24KClRodSBOb3YgMTggMTQ6NTc6MTggQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IEZpeGVkIHNvbWUgd3JvbmdseSBzcGFjZSBjb2xsYXBzaW5nIGNvZGUgZHVlIHRvCgkgICAgICAgICAgICBhIG1pc3JlYWRpbmcgb2YgdGhlIHNwZWMuCgkqIHJlc3VsdC8qOiBmaXhlZCB0aGUgb3V0cHV0IGFjY29yZGluZ2x5CSAgICAKCldlZCBOb3YgMTcgMTg6Mjg6MDYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW5jb2RpbmcuYzogYnVnIGZpeCBhbmQgdHlwb3MKCSogeG1sSU8uW2NoXSBwYXJzZXIuYzogZmlyc3QgYml0cyB0b3dhcmQgcmVhbCBwcm9ncmVzc2l2ZSBwYXJzaW5nCgkqIHBhcnNlci5jOiBhZGRlZCBhdHRyaWJ1dGUgbm9ybWFsaXphdGlvbiBjbG9zaW5nIGJ1ZyAjMzU5NwoJKiB0ZXN0L2F0dCogcmVzdWx0L2F0dCogU0FYcmVzdWx0L2F0dCo6IHRlc3RjYXNlIGZvciBhdHRyaWJ1dGUKCSAgICBub3JtYWxpemF0aW9uCgpNb24gTm92IDE1IDE4OjUwOjU2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogY2xvc2luZyBidWcgIzMxNjMgYnkgYWRkaW5nIGV4dHJhIGZsYWdzIGZvciB0aGUKCSAgICAgICAgICAgICAgICBjYyBjb21waWxlciBvbiBIUC1VWAoKRnJpIE5vdiAxMiAxNzo0MToyMCBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB2YWxpZC5bY2hdIDogcmVtb3ZlZCBhIHR5cG8gYW5kIGFuIGVudW1lcmF0ZWQgdHlwZSBidWcgaW4gdGhlCgkgICAgICAgICAgICAgICB4bWxBZGRFbGVtZW50RGVjbCgpIGZ1bmN0aW9uCgkqIHRyZWUuYyA6IEkgY2hhbmdlZCB4bWxTZXRQcm9wKCkgYW5kIHhtbE5ld1Byb3AoKSB0byBkbyB0aGUKCSAgICBjYWxsIHRvIHhtbEVuY29kZUVudGl0aWVzUmVlbnRyYW50KCkgc28gdGhhdCB0aGUgZnVuY3Rpb25zIAoJICAgIE5ldywgU2V0IGFuZCBHZXQgYXJlIGF0IHRoZSBzYW1lIGxldmVsLgoJKiBwYXJzZXIuYyBIVE1McGFyc2VyLmM6IGV4dHJhIG1lbW9yeSBhbGxvY2F0aW9uIGJ1ZyBmb3IKCSAgICBhdHRyaWJ1dGVzIGRldGVjdGVkIGJ5IHNvbWVvbmUgdXNpbmcgbGlieG1sIGluIGVtYmVkZGVkIHN5c3RlbXMgOi0pCgpUaHUgT2N0IDI4IDE3OjQ5OjI2IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxtZW1vcnkuaDogdHVybmVkIG9mZiBtZW0gZGVidWcgOi1cCgpNb24gT2N0IDI1IDEyOjEzOjI1IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogY2xvc2VkIGJ1ZyAjMjc4NCBhIG9uZSBsaW5lIGZpeCwgYnV0IHdvcnRoIHB1c2hpbmcKCSAgICAgICAgICAgIGEgbmV3IHJlbGVhc2Ugb3V0CgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgYXV0by1jbG9zZSBidWdzIG9uIGxpc3QgaXRlbXMsIHplcm9pbmcKCSAgICAgICAgICAgIHNvbWUgc3RydWN0dXJlcywgY29tbWVudHMgYmVmb3JlIGFuZCBhZnRlciB0aGUKCQkgICAgbWFpbiBlbGVtZW50LCBhbmQgb3RoZXIgbmFzdHluZXNzCgkqIEhUTUx0cmVlLmMgdHJlZS5jOiBhY2NvbW9kYXRlIHRoZSBleHRlbmRlZCBIVE1MIHN1cHBvcnRlZAkgICAgCgkqIGNvbmZpZ3VyZS5pbjogcHVzaGluZyAxLjcuNAoJKiB0ZXN0L2VudDggYW5kIHJlbGF0ZWQgb3V0cHV0cyA6IGFkZGVkIGEgbmV3IHRlc3QgZm9yIGJ1ZyAjMjc4NAoJKiB0ZXN0L0hUTUwvd2lyZWQuaHRtbCBhbmQgcmVsYXRlZCBvdXRwdXQ6IGEgbmFzdHkgSFRNTCBleGFtcGxlCgkqIE1ha2VmaWxlLmFtOiBpbXByb3ZlZCB0aGUgdGVzdCBzY3JpcHRzCgkqIGRvY3MvKiA6IHJlcmFuIHRoZSBkb2N1bWVudGF0aW9uIGV4dHJhY3RvciwgdXBkYXRlZCB4bWwuaHRtbAoKVGh1IE9jdCAxNCAxMDoyOTo1NiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jLCBIVE1MdHJlZS5jLCB0cmVlLmg6IGNvbXBsZXRlbHkgcmV2YW1wZWQgdGhlCgkgICAgIEhUTUxwYXJzZXIgYW5kIGRlYnVnZ2VkIHRoZSBIVE1MIHJlbGF0ZWQgY29kZS4gSFRNTCBkb2N1bWVudHMKCSAgICAgbm93IGhhdmUgdGhlaXIgb3duIHR5cGUKCSogZW50aXRpZXMuYzogZG8gbm90IGR1bXAgJmFwb3M7IGZvciBIVE1MIG91dHB1dAoJKiB4bWxtZW1vcnkuYzogaW1wcm92ZW1lbnQsIGJyZWFrcG9pbnQgbWVjaGFuaXNtCgkqIHRlc3RIVE1MLmM6IGFkZGVkIC0tc2F4IC0tcmVwZWF0IC4uLgoJKiBNYWtlZmlsZS5hbTogaW1wcm92ZWQgdGhlIEhUTUwgdGVzdHMKCSogdmFsaWQuW2NoXTogYWRkZWQgeG1sVmFsaWRHZXRWYWxpZEVsZW1lbnRzIGFuZAoJICAgICAgICAgICAgICB4bWxWYWxpZEdldFBvdGVudGlhbENoaWxkcmVuCgkqIHRlc3Rlci5jOiBhZGRlZCAtLWluc2VydCB0byB0ZXN0IHRoZSAyIG5ldyBmdW5jdGlvbnMKCSogdGVzdC8vKiByZXN1bHQvLyogU0FYcmVzdWx0Ly8qIDogcmVncmVzc2lvbiB0ZXN0IGNsZWFudXAKCSAgICAgICAgICAgICAgIGFuZCBleHRlbnNpb24uCgkqIGRvYy9odG1sIDogYWRkZWQgZG9jIGZvciBuZXcgbW9kdWxlcyBnbm9tZS14bWwteG1sbWVtb3J5Lmh0bWwgYW5kCgkgICAgICAgICAgICAgZ25vbWUteG1sLW5hbm9odHRwLmh0bWwKCk1vbiBPY3QgMTEgMTQ6MzE6NTggQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgcHJvYmxlbXMgd2l0aCBzb21lIGF1dG9jbG9zZSB0YWdzCgkqIHRyZWUuYzogZml4ZWQgWE1MIG91dHB1dCBwcm9ibGVtcy4gCgkqIHJlc3VsdC8qIFNBWHJlc3VsdC8qOiB1cGRhdGUgb2YgdGhlIHRlc3RzIG91dHB1dAoKU2F0IE9jdCAgOSAxMTowMjo1NyBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTWFrZWZpbGUuYW06IEFydHVybyBwYXRjaCBmb3IgeG1sQ29uZi5zaCB2ZXJzaW9uIGluZm8KCSogcGFyc2VyLmM6IFRpbSBKb3NsaW5nIHBhdGNoIGZvciBzaW5nbGUgcXVvdGVkIGl0ZW1zCgkqIHRlc3Rlci5jOiBUaW0gSm9zbGluZyBwYXRjaCBmb3IgdGVzdGVyIG9wdGlvbnMgdXNhZ2UKCSogdHJlZS5oOiBpbmRlbnQgY2xlYW51cAoKRnJpIE9jdCAgOCAxNjozNTozNyBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIHBhcnNlci5oIDogRml4ZWQgcHJvYmxlbXMgd2l0aCBIVE1MIHBhcnNpbmcKCSAgICByZXBvcnRlZCBieSBLcmlzdGlhbiBIb2dzYmVyZyBLcmlzdGVuc2VuIDxob2dzYmVyZ0BkYWltaS5hdS5kaz4KCkZyaSBPY3QgIDggMTE6Mzc6MTEgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYyA6IFJhcGggcGF0Y2ggZm9yIGluaXRpYWxpemF0aW9uIG9mIENPUkJBIGZpZWxkcwoJKiBwYXJzZXIuYywgeHBhdGguYywgLi4uOiBtb2RpZmljYXRpb24gb2YgZG9jIGNvbW1lbnRzCgkqIHhwYXRoLmMgOiBhbGxvdyBzcGFjZXMgaW4geHBhdGggZXhwcmVzc2lvbnMKCk1vbiBTZXAgMjcgMTA6MTY6NDMgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbG1lbW9yeS5oOiB0dXJuaW5nIG9mZiBtZW1vcnkgZGVidWcgOi0oCgpTdW4gU2VwIDI2IDEzOjE2OjU0IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXSA6IGFkZGVkIHhtbFNBWFVzZXJQYXJzZUZpbGUoKSBhbmQgeG1sU0FYVXNlclBhcnNlTWVtb3J5KCkKCSAgICAgICAgICAgICAgICBiZXR0ZXIgU0FYIGludGVyZmFjZXMuCgkqIHRlc3RTQVguYzogdXNlcyB0aGUgbmV3IFNBWCByb3V0aW5lLCBhdm9pZCBmZXRjaGluZyBhbnkgcmVtb3RlCgkgICAgICAgICAgICAgZW50aXR5LgoJKiBjb25maWd1cmUuaW46IDEuNy4yCgpGcmkgU2VwIDI0IDE2OjAxOjAxIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBsaWJ4bWwuc3BlYy5pbjogZml4ZWQgdGhlIFVSTAoJKiBkb2MveG1sLmh0bWw6IGltcHJvdmVkIHRoZSBkb2N1bWVudGF0aW9uIGZyb250LWVuZAoKRnJpIFNlcCAyNCAwMTowNjozNiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuYzogY29uZGl0aW9ubmVkIHJlZmVyZW5jZXMgdG8gc25wcmludGYgd2l0aCBIQVZFX1NOUFJJTlRGCgpGcmkgU2VwIDI0IDAwOjE1OjU4IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBsaWJ4bWwuc3BlYy5pbjogZml4ZWQgdGhlIGFscGhhIGNvbXBpbGUgcHJvYmxlbQoJKiBwYXJzZXIuW2NoXTogY2hhbmdlZCBlcnJubyB0byBlcnJObyBpbiB0aGUgcGFyc2VyIGNvbnRleHQgOi0oCgkqICouW2NoXTogY2hhbmdlZCBDSEFSIHRvIHhtbENoYXIgdG8gYXZvaWQgcHJvYmxlbSBvbiBXSU4zMgoJKiBkb2MveG1sLmh0bWw6IGNoYW5nZWQgQ0hBUiB0byB4bWxDaGFyCgkqIGRvYy9odG1sLyo6IHJlY29tcGlsZWQgdGhlIGRvY3VtZW50YXRpb24KCSogY29uZmlndXJlLmluOiAxLjcuMQoKV2VkIFNlcCAyMiAxMTo0MDozMSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmg6IG1vZGlmaWVkIHRoZSBwYXJzZXIgY29udGV4dCBzdHJ1Y3QgdG8gcmVnYWluIDEuNC4wCgkgICAgICAgICAgICBiaW5hcnkgY29tcGF0aWJpbGl0eQoJKiBwYXJzZXIuYywgeG1sLWVycm9yLmg6IGFkZGVkIGVycm5vIG90IHRlaCBjb250ZXh0IGFuZCBkZWZpbmVkCgkgICAgICAgICAgICBhIHNldCBvZiBlcnJvcnMgdmFsdWVzIHdpdGggdXBkYXRlIG9mIGVycm5vCgkqIG5hbm9odHRwLltjaF06IG1pbmltYWxpc3QgSFRUUCBmcm9udC1lbmQgZm9yIGZldGNoaW5nIHJlbW90ZQoJICAgICAgICAgICAgRFREcyBhbmQgZW50aXRpZXMKCSogKi5oLCAqLmM6IGNvbXBsZXRlIGNsZWFudXAgb2YgdGhlIHVzZSBvZiBjb25maWcuaCBhbmQgaW5jbHVkZQoJICAgICAgICAgICAgcHJvdGVjdGlvbiBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgc2V0dXAuCgkqIG92ZXJhbGxsIGRlYnVnZ2luZywgbWFpbnRlbmFuY2UgYW5kIGJ1Zy1maXhpbmcgb24gYWxsIG1vZHVsZXMKCSogdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbgoJKiByZWFkeSBmb3IgMS43LjAKCldlZCBTZXAgIDggMjI6NDY6MTQgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyA6IGNsZWFudXAKCSogU0FYLmMgdmFsaWQuYyB2YWxpZC5oOiBhZGRlZCBJRC9JRFJFRiBjaGVja2luZwoJKiB0cmVlLmMgdHJlZS5oOiBleHRlbmRlZCBkb2Mgc3RydWN0dXJlIGZvciByZWZzCgkqIGNvbmZpZ3VyZS5pbjogMS42LjIKCSogcGFyc2VyLmM6IHBhdGNoZWQgYnVnIGluIFNBWCB1c2VyIGFyZyBjYWxsCgkqIHBhcnNlckludGVybmFscy5oOiBwYXRjaGVkIG1pc3NpbmcgY2xvc2UgaW4gQysrIHdyYXBwaW5nCgkqIHRlc3RYUGF0aC5jIHhwYXRoLmMgeHBhdGguaDogcHJlcGFyZWQgZm9yIGV4dGVuc2liaWxpdHksCgkgIGVzcGVjaWFsbHkgdXBjb21pbmcgWFBvaW50ZXIgaW1wbGVtZW50YXRpb24uCgkqIGRvYy94bWwuaHRtbDogYXVnbWVudGVkLCB0eXBvCgpTYXQgU2VwICA0IDIyOjQ4OjA1IENFU1QgMTk5OSBUaW11ciBCYWtleWV2IDxtY0BiYXQucnU+CgoJKiBkb2MvTWFrZWZpbGUuYW06IHJlcGxhY2VkICJpbnN0YWxsIC1kICIgd2l0aCAibWtpbnN0YWxsZGlycyIgLQoJbm90IGFsbCBpbnZvY2F0aW9ucyBvZiBpbnN0YWxsIHVuZGVyc3RhbmQgLWQuCgpTYXQgU2VwICA0IDIyOjIwOjA3IENFU1QgMTk5OSBUaW11ciBCYWtleWV2IDxtY0BiYXQucnU+CgoJKiBNYWtlZmlsZS5hbTogcHJlcGVuZCBhbGwgdGhlIHRlc3QqIGNhbGxzIHdpdGggJCh0b3BfYnVpbGRkaXIpIC0KCXRvIG1ha2UgJ2NoZWNrJyB3b3Jrcywgd2hlbiBidWlsZGRpciAhPSBzcmNkaXIuCgpTYXQgU2VwICA0IDIwOjI1OjQ2IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgOiB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uCgpGcmkgU2VwICAzIDAwOjAxOjA4IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxtZW1vcnkuW2NoXSBNYWtlZmlsZS5hbSAgOmFkZGVkIGEgbWVtb3J5IHdyYXBwZXIgdG8gY2hhc2UKCSAgICAgIG5vdCBkZWFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzCgkqICouYyA6IHJlcGxhY2VzIGFsbCBjYWxscyB0byBtYWxsb2MoKSBmcmVlKCkgYW5kIHJlYWxsb2MoKSB0bwoJICAgICAgdGhlIHdyYXBwZXIgZnVuY3Rpb25zL21hY3JvcwoJKiB0cmVlLmMgOiByZW1vdmVkIG1lbW9yeSBsZWFrcyBkdWVzIHRvIGNhbGxpbmcgeG1sRnJlZU5vZGUoKQoJICAgICAgaW5zdGVhZCBvZiB4bWxGcmVlTm9kZUxpc3QoKQoKV2VkIFNlcCAgMSAxNDoxNTowOSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBjb3JyZWN0ZWQgYSBzdHVwaWQgYnVnIGxlYWRpbmcgdG8gY29yZSBkdW1wIGF0CgkgICAgICAgICAgICAgICAgdHJlZSBkZWFsbG9jYXRpb24uIFJlbW92ZWQgd2FybmluZ3MgaW5kaWNhdGVkIGJ5CgkJCVN0ZXBoYW5lLkNvbnZlcnN5QGxyaS5mcgoJKiBlbnRpdGllcy5jOiBGaXhlcyBZZXQgQW5vdGhlciBTdHVwaWQgQnVnLCBlbnRpdGllcyB3ZXJlIG5vdAoJICAgICAgICAgICAgICBsb29rZWQgZm9yIGluIHRoZSBleHRlcm5hbCBzdWJzZXQKCk1vbiBBdWcgMzAgMTM6MjI6MjYgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jIHZhbGlkLltjaF0geHBhdGguYzogcGF0Y2hlZCBjb21waWxhdGlvbiB3YXJuaW5ncyByZXBvcnRlZAoJICBvbiBTR0kgYnkgU3RlcGhhbmUuQ29udmVyc3lAbHJpLmZyCgpTdW4gQXVnIDI5IDIyOjI3OjI5IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhbGwgLmggOiBjaGFuZ2VkIHRoZSBwcm90b3R5cGUgZGVjbGFyYXRpb24gaW5kZW50IGFzIGluIGd0awoJKiBtb3N0IC5jIDogd29ya2luZyBvbiByZWR1Y2luZyB0aGUgVE9ET3MgaW4gdGhlIGNvZGUKCSogbW9zdCAuYyA6IGNsZWFudXAgdGhvdWdoIC1wZWRhbnRpYyBhbmQgSW5zdXJlKysKCSogaW1wcm92ZW1lbnRzIG9uIHZhbGlkYXRpb24gSUQgY2hlY2tpbmdzLgoJKiB0cmVlLltjaF0gU0FYLmM6IGFkZGVkIHN1cHBvcnQgZm9yIG5hbWVzcGFjZSBvbiBhdHRyaWJ1dGVzICMyMDIyCgkqIHhtbC1jb25maWcuaW46IGNsb3NlZCAjMTgxMAoKTW9uIEF1ZyAxNiAwMzoyNzozOCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5oLCB2YWxpZC5jLCB2YWxpZC5oOiBtb3JlIHdvcmsgb24gdmFsaWRpdHksIElEcwoJKiB4cGF0aC5jOiBhZGRlZC9maXhlZCBjb21wYXJpZG9uIGFuZCBlcXVsaXR5LCBhZGRlZCBhIG5ldyBpc2luZgoJICBkZWZpbml0aW9uIGZvciBBSVgKClN1biBBdWcgMTUgMjE6MTU6MTcgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE1ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluOiBjb3JyZWN0ZWQgbWlzc2luZyB4bWxDb25mLnNoIGluCgkgIHRoZSBkaXN0cmlidXRpb24gZHVlIHRvIGEgY3V0J24gcGFzdGUgZXJyb3IgYXQgbGFzdCBjb21taXQKClR1ZSBBdWcgMTAgMjA6Mjg6MDkgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogdXBncmFkZWQgdG8gdmVyc2lvbiAxLjQuMAoJKiB2YWxpZC5bY2hdLCBTQVguYywgcGFyc2VyLltjaF0gcGFyc2VySW50ZXJuYWxzLmggLi4uCgkgIEJpZyB1cGRhdGUsIGFkZGVkIGEgbGFyZ2UgcGFydCBvZiB0aGUgdmFsaWRhdGlvbiBwcm9jZXNzLAoJICBpdCBzaG91bGQgYmUgdXNhYmxlLCBidXQgc29tZSBwYXJ0cyBhcmUgbWlzc2luZwoJKiB4cGF0aC5jOiBpbXByb3ZlZCB0aGUgaW1wbGVtZW50YXRpb24gdy5yLnQuIHJvb3QuCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBtb3JlIHRlc3RzCgkqIHRlc3QgYW5kIHJlc3VsdCB0cmVlczogYWRkZWQgYSBsb3Qgb2YgdGVzdHMKCSogbGlieG1sLnNwZWMuaW46IGV4cG9ydCBsaWJ4bWwuc28uMCBhbmQgbGlieG1sLnNvLjEKClR1ZSBBdWcgMTAgMTE6MzM6NDEgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEFkZGVkIGFuIEhBQ0tJTkcgZmlsZQoKVHVlIEp1bCAyNyAyMTo0MzowMCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguW2NoXSA6IGltcHJvdmVtZW50cyBhbmQgZGVidWcgb2YgdGhlIFhQYXRoIGltcGxlbWVudGF0aW9uCgkqIHBhcnNlci5jLCBIVE1McGFyc2VyLmMgOiBtb2RpZmllZCB0aGUgcGFyc2VycyB0byBiZSBwcm9ncmVzc2l2ZQoJKiB0cmVlLltjaF0gOiBleHRlbmRlZCB0aGUgQnVmZmVyIHByb21pdGl2ZXMKCSogeG1sSU8uW2NoXSA6IGFkZGVkIGJhc2ljIEkvTyByb3V0aW5lcyBwcm92aWRpbmcgcHJvZ3Jlc3NpdmUKCSAgcGFyc2luZyBhbmQgcmVhZHkgZm9yIEkxOE4gY29udmVyc2lvbiBwbHVnaW5zCgkqIFNBWHJlc3VsdC8qIDogdGhlIFNBWCBjYWxsYmFjayBzZXF1ZW5jZSBtYXliZSBzbGlnaHRseSBkaWZmZXJlbnQKCSAgbm93CgkqIHRlc3QqLmMgOiBpbXByb3ZlZC91cGRhdGVkIHRoZSB0ZXN0cyBwcm9ncmFtcwoJKiBkb2MvKiA6IHJlY29tcGlsZWQgdGhlIGRvY3MuCgoxOTk5LTA3LTI2ICBNaWNoYWVsIE1lZWtzICA8bWljaGFlbEBlZGVucHJvamVjdC5vcmc+CgoJKiB0cmVlLmg6IEFkZCBjb25zdCB0byAnY29udGVudCcgaW4geG1sTmV3RG9jTm9kZSwgeG1sTmV3Q2hpbGQKCgkqIHRyZWUuYzogRGl0dG8uCgpUaHUgSnVsIDE1IDE2OjE3OjE2IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IHVwZ3JhZGVkIHRvIHZlcnNpb24gMS40LjAKCSogeHBhdGguYywgeHBhdGguaCwgdGVzdFhQYXRoLmMsIG1ha2VmaWxlLmFtOiBhZGRlZCBjb2RlIGZvciB0aGUgWFBhdGgKCSAgZHJhZnQgZnJvbSBXM0MuIFdpbGwgYmUgdXNlZCBieSBYUG9pbnRlciwgWGxpbmssIFhTTCwgYW5kIHBvc3NpYmx5CgkgIFhNTCBxdWVyeSBsYW5ndWFnZSwgc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoIGZvciBtb3JlIGRldGFpbHMuCgkqIHBhcnNlci5jLCBwYXJzZXIuaDogYWRkZWQgQ0hBUiogcmVsYXRlZCBzdHJpbmcgZnVuY3Rpb25zIGZvciBYUGF0aAoJKiBIVE1McGFyc2VyLltjaF0sIEhUTUx0cmVlLmM6IGEgYml0IG9mIGNsZWFudXAgb24gZW50aXRpZXMuCgkqIGRvYy9nbm9tZS14bWwuc2dtbCwgZG9jL2h0bWwvKiA6IGFkZGVkIFhQYXRoIGFuZCBIVE1MIGRvY3VtZW50YXRpb24sCgkgIHJlYnVpbGQgdGhlIGRvY3MuCgkqIE1ha2VmaWxlLmFtLCB0ZXN0L1hQYXRoLyosIHJlc3VsdC9YUGF0aC8qOiBhZGRlZCBhbiBYUGF0aHRlc3RzIHRhcmdldAoJICBhbmQgcmVncmVzc2lvbiB0ZXN0aW5nIGNhcGFiaWxpdGllcyBmb3IgWFBhdGguCgpNb24gSnVsIDEyIDEyOjM2OjM5IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgSFRNTHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gSm9obiBFbGxzb24gPGVsbHNvbkBsdWNlbnQuY29tPgoJICBjbG9zaW5nIGJ1ZyAjMTY0NgoKTW9uIEp1bCAxMiAxMTowNDo0NCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTWFrZWZpbGUuYW0sIGV4YW1wbGUvTWFrZWZpbGUuYW06IGNsb3NlZCBidWcgIzE2ODMKClN1biBKdWwgMTEgMTg6MTY6MzQgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGV4YW1wbGUvTWFrZWZpbGUuYW0sIGNvbmZpZ3VyZS5pbjogYWRkZWQgdGhlIG1ha2VmaWxlIGZvciB0aGUKCSAgZ2pvYnJlYWQgZXhhbXBsZQoKU2F0IEp1bCAxMCAxNDoxOToxMSBDRVNUIDE5OTkgVG9tYXN6IEuzb2N6a28gIDxrbG9jemVrQHBsZC5vcmcucGw+CgoJKiBkb2MvTWFrZWZpbGUuYW06CgktIGZpeCB3aGljaCBhbGxvdyAibWFrZSBpbnN0YWxsIERFU1RESVI9PC9pbnN0YWxsL3ByZWZpeD4iLgoKRnJpIEp1bCAgOSAxMjoxMDoyNCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gSm9obiBFbGxzb24gPGVsbHNvbkBsdWNlbnQuY29tPgoJICB3aGljaCBmaXhlZCBhIHByb2JsZW0gb24gdGhlIGZpbGUgcmVhZGluZy1jb2RlLgoKV2VkIEp1bCAgNyAwOToyODo0MyBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5bY2hdLCBIVE1MdHJlZS5bY2hdOiBtb3JlIHdvcmsgZm9yIEhUTUwgcGFyc2luZyBhbmQKCSAgb3V0cHV0LgoJKiBNYWtlZmlsZS5hbSwgdGVzdC9IVE1MLyosIHJlc3VsdC9IVE1MLyo6IGFkZGVkIEhUTUx0ZXN0cyB0YXJnZXRlc3RIVE1MdAoKV2VkIEp1bCAgNyAwMDoyNTo0MiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmggOiBPb3BzIHJlbW92ZWQgdGhlIGJpbmFyeSBjb21wYXRpYmlsaXR5IHByb2JsZW0KCSogSFRNTHBhcnNlci5bY2hdLCBIVE1MdHJlZS5oIDogTW9yZSB3b3JrIG9uIHRoZSBIVE1MIHBhcnNlL2R1bXAKCSogcGFyc2VyLmMsIEhUTUxwYXJzZXIuYzogYXBwbGllZCBwYXRjaGVzIGZvciByZWFkaW5nIGZyb20gc3RkaW4KCk1vbiBKdWwgIDUgMTg6NDU6MzEgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBlbnRpdGllcy5jLCB2YWxpZC5jOiBjbGVhbnVwIGJ1ZyAjMTU5MQoJKiBjb25maWd1cmUuaW46IGNsZWFudXAgYnVnICMxNTkyCgkqIEhUTUxwYXJzZXIuW2NoXSwgdGVzdEhUTUwuYzogc3RhcnRlZCBhZGRpbmcgYW4gSFRNTCBwYXJzZXIgdXNpbmcKCSAgdGhlIHNhbWUgdHJlZSBiYWNrLWVuZC4gSGVuY2UgZ2RvbWUgd2lsbCBiZSBhdmFpbGFibGUgZm9yIGl0LgoJKiBkb2MvTWFrZWZpbGUuYW06IGNsb3NlIGJ1ZyAjNjE3CgpTYXQgSnVuIDI2IDIzOjM2OjM4IEVEVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBhbGxvY3RhdGUgYSBwZXIgcGFyc2VyIGNvbnRleHQgU0FYIGludGVyZmFjZSBibG9jawoKVHVlIEp1biAyMiAyMzo0NjozMiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcmVsZWFzZWQgMS4zLjAgd2l0aCB4bWxFbmNvZGVFbnRpdGllcyByZXN0b3Jpbmcgb2xkIGJlaGF2aW91cgoJICBhbmQgeG1sRW5jb2RlRW50aXRpZXNSZWVudHJhbnQgd2l0aCB0aGUgY29ycmVjdCBvbmUgOi1cCgpNb24gSnVuIDIxIDE0OjA3OjUzIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb21taXQgb2YgbXkgaW50ZXJuYWwgWE1MIGJhc2UgY2hhbmdlcywgcXVpdGUgYSBsb3Qgb2YKCSAgY2hhbmdlcywgY2xlYW51cHMsIGJldHRlciBlbnRpdGllcyBzdXBwb3J0LCBmcmFtZXdvcmsgZm9yCgkgIG5ldyBJL08gYW5kIGNoYXJzZXQgZGV0ZWN0aW9uIGFuZCBoYW5kbGluZwoJKiBGaXhlZCB0aGUgY29uZmlndXJlL01ha2VmaWxlIHN0dWZmIHRvIGdlbmVyYXRlIHNoYXJlZCBsaWJzCgkgIHdpdGggdGhlIHByb3BlciB2ZXJzaW9uIGluZm8sIHNvIHdlIGp1bXBlZCBvbiByZXYgZnJvbQoJICAwLjAuMCB0byAxLjIuMCAhIFRoZSBiaW5hcnkgaW50ZXJmYWNlcyBoYXZlIGJlZW4gYnJva2VuLAoJICB4bWxFbmNvZGVFbnRpdGllcygpIHJlc3VsdCBuZWVkIHRvIGJlIGZyZWVkIG5vdywgYW5kIGEgc3RyaW5nCgkgIHhtbFBhcnNlclZlcnNpb24gcHJvdmlkZSB0aGUgY3VycmVudCBsaWJyYXJ5IHZlcnNpb24uCgpUdWUgSnVuIDE1IDE0OjI0OjE5IDE5OTkgIFJhcGggTGV2aWVuICA8cmFwaEBhY20ub3JnPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgYnVmZmVyIG92ZXJydW4gZm9yIHdoZW4geW91IGhhdmUgYSB2ZXJ5IGxvbmcKCWF0dHJpYnV0ZSB3aXRoIG5vIGVudGl0aWVzIGluIGl0LgoKTW9uIEp1biAxNCAwMDoxNzo1MCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWRkZWQgZXhhbXBsZSBkaXJlY3RvcnkKCSogYWRkZWQgZXhhbXBsZS9nam9icy54bWwgZ2pvYnJlYWQuYywgc3RpbGwgbmVlZCBhIE1ha2VmaWxlLmluCgpXZWQgSnVuICAyIDE5OjQwOjU4IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBSZWxlYXNlIG9mIGxpYnhtbC0xLjEsIG5lYXJseSBldmVyeXRoaW5nIGhhcyBiZWVuIHRvdWNoZWQgZm9yCgkgIHRoaXMuCgkqIEFkZGVkIG1vcmUgcmVncmVzc2lvbiB0ZXN0cwoJKiBVcGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uCgpTYXQgTWF5IDI5IDEzOjM0OjQyIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF06IHVuaWZpZWQgdGhlIFhNTF9OT19DT1JCQSBkZWZpbmVzLgoJKiBwYXJzZXIuYyBlbmNvZGluZy5bY2hdOiBzdGFydGVkIHBsdWdnaW5nIGluIGNoYXIgZW5jb2RpbmcgZGV0ZWN0aW9uCgpGcmkgTWF5IDI4IDIyOjU4OjQyIEVEVCAxOTk5IE1hbmlzaCBWYWNoaGFyYWphbmkgPG12YWNoaGFyQHZnZXIucnV0Z2Vycy5lZHU+CgoJKiB0cmVlLmM6ICh4bWxTYXZlRmlsZSkgLSByZW1vdmVkIGRvdWJsZSBjYWxsIG9mIHhtbENvbnRlbnREdW1wLiAgCgkgIEFsc28gZnJlZWQgYWxsb2NhdGVkIGJ1ZmZlci4KCldlZCBBcHIgMjEgMjI6MDc6MzUgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCSogcGFyc2VyLltjaF0gdHJlZS5bY2hdIGVudGl0aWVzLltjaF0gdmFsaWQuW2NoXSA6IHJlbW92ZWQgdGhlIG1haW4KCSAgcmVlbnRyYW5jeSBwcm9ibGVtIGF0IHByaW50aW5nLiBPbmUgaXMgbGVmdCBpbiBlbnRpdGllcy5jLCB0bwoJICByZW1vdmUgQVNBUAoJKiB0ZXN0U0FYLmMgOiBhZGRlZCBhIHRlc3QgZXhhbXBsZSBzaG93aW5nIHRoZSB1c2Ugb2YgdGhlIFNBWCAKCSAgaW50ZXJmYWNlIGlmIG9uZSBkb2Vzbid0IHdhbnQgdG8gYnVpbGQgdGhlIERPTSB0cmVlLgoJKiBodG1sL2dub21lLXhtbC0qLmh0bWwgaHRtbC9pbmRleC5zZ21sOiByZWdlbmVyYXRlZCB0aGUgZG9jdW1lbnRhdGlvbgoKTW9uIEFwciAgNSAxNDoxNDo0MCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLltjaF0gdHJlZS5bY2hdIFNBWC5jLCBwYXJzZXJJbnRlcm5hbHMuaCB2YWxpZC5bY2hdOgoJICBsYXJnZSByZXZhbXBpbmcgb2YgdGhlIHBhcnNlciB0byB1c2UgU0FYIGNhbGxiYWNrcwoJICBodHRwOi8vd3d3Lm1lZ2dpbnNvbi5jb20vU0FYLyAob3IgYXQgbGVhc3QgYSBDIGxpa2UgaW50ZXJmYWNlCgkgIGEgbGEgRXhwYXQpLiBJdCdzIG5vdyBwb3NzaWJsZSB0byBzZXQgdXAgeW91ciBvd24gY2FsbGJhY2tzCgkgIGFuZCB0aGUgcGFyc2VyIHdpbGwgbm90IGJ1aWxkIGEgRE9NIHRyZWUuCgkqIHRlc3QvKiByZXN1bHQvKjogdXBkYXRlZCB0aGUgdGVzdCBzdWl0ZSwgSSBmaW5hbGx5IHJlbW92ZWQKCSAgdGhlIG9sZCBOYW1lc3BhY2UgZHJhZnQgc3VwcG9ydCAoUEkgYmFzZWQpLgoKRnJpIEFwciAgMiAxNzo1NzozMiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTWFrZWZpbGUuYW06IGFkZGVkIHRlc3QgcmVzdWx0IHRvIEVYVFJBX0RJU1QgZm9yIG1ha2UgdGVzdHMKCldlZCBNYXIgMjQgMjE6Mzc6MDIgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIHBhcnNlckludGVybmFscy5oOiBtb3ZlZCB0aGUgY2hhcnMgbWFjcm8gZGVmaW5pdGlvbnMKCSAgdG8gcGFyc2VySW50ZXJuYWxzLmgKCSogcGFyc2VyLmMsIGVycm9yLmM6IGFwcGxpZWQgcGF0Y2hlcyBmcm9tICJLbnV0IMVrZXNzb24iCgkgIDxrYUBzMi5jaGFsbWVycy5zZT4gZm9yIGNsZWFuIGNvbXBpbGF0aW9uIHVuZGVyIE1TVkMgNiA6LW8KClR1ZSBNYXIgMjMgMTE6MTA6MTUgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sLWNvbmZpZy5pbiA6IGFwcGxpZWQgcGF0Y2ggdG8gbWFrZSAtLXZlcnNpb24gd29yawoKMTk5OS0wMy0wNSAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KCgkqIE1ha2VmaWxlLmFtIChjaGVjay1sb2NhbCk6IEFsaWFzIGZvciBgdGVzdHMnIHRhcmdldC4gIFRoaXMgd2lsbAoJY2F1c2UgYG1ha2UgY2hlY2snIHRvIGRvIHRoZSByaWdodCB0aGluZy4KCSh0ZXN0cyk6IERvbid0IHJ1biB0ZXN0cyBpbiBzcmNkaXIuICBBbHNvLCByZXBsYWNlZCBjYWxscyB0bwoJYmFzZW5hbWUgd2l0aCBhIGBzZWQnICJlcXVpdmFsZW50Ii4KCkZyaSBNYXIgIDUgMDc6MjM6NTMgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogUmVuYW1lZCBlcnJvci5oIHRvIHhtbC1lcnJvci5oLCBjb3JyZWN0ZWQgTWFrZWZpbGUuYW0gdG8gbGlzdAoJICBpdCBpbiB0aGUgaGVhZGVyIGFuZCBub3QgdGhlIHNvdXJjZXMsIHVwZGF0ZWQgdGhlIGRvYy4KCSAgVGhhbmtzIHRvIFRpbSBNb29uZXkgPG1vb25leUBkb2diZXJ0LmNjLm5kc3Uubm9kYWsuZWR1PiBmb3IKCSAgcG9pbnRpbmcgdGhpcyBvdXQuCgpNb24gTWFyICAxIDEzOjI3OjE3IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBwYXJzZXIuaCwgcGFyc2VySW50ZXJuYWxzLmg6IG1lbW9yeSBsZWFrIGh1bnRpbmcsCgkgIGV4cG9ydGVkIHRoZSBpbnB1dFN0cmVhbSByb3V0aW5lcy4KCSogZG9jL2h0bWwvKiA6IHVwZGF0ZWQgYWNjb3JkaW5nbHkKClN1biBGZWIgMjggMjI6NTE6MzMgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIHBhcnNlci5oLCBwYXJzZXJJbnRlcm5hbHMuaDogYWRkZWQgYSBmZXcgZXh0cmEKCSAgaW50ZXJuYWwgY2FsbHMgdG8gYWxsb2NhdGUgYW5kIGZyZWUgcGFyc2VyIGNvbnRleHRzIC4uLgoJKiBkb2MvaHRtbC8qIDogdXBkYXRlZCBhY2NvcmRpbmdseQoKVGh1IEZlYiAyNSAxMTo1MjoyNCBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4sIE1ha2VmaWxlLmFtLCBkb2MvbWFrZWZpbGUuYW0gOiBHZW5lcmFsIGNoYW5nZXMgZm9yCgkgIDEuMC4wIHJlbGVhc2UgYW5kIGluY2x1ZGluZyB0aGUgZ2VuZXJhdGVkIEhUTUwgZG9jdW1lbnRhdGlvbi4KClRodSBGZWIgMjUgMDk6NDQ6NTIgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbWFrZWZpbGUuYW0gOiBhZGRlZCBwYXJzZXJJbnRlcm5hbHMuaCwgb29wcy4KCk1vbiBGZWIgMjIgMTE6MjQ6NTYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VySW50ZXJuYWxzLmg6IGFkZGVkIHRoaXMgaGVhZGVyIGdpdmluZyBhY2Nlc3MgdG8gdGhlIHBhcnNlcgoJICBpbnRlcm5hbCBmdW5jdGlvbnMuCgkqIGRvYy9NYWtlZmlsZS5hbSA6IGFkZGVkIGEgcmVidWlsZCB0YXJnZXQgd2hpY2ggcmVidWlsZHMgdGhlIGZ1bGwKCSAgc2V0IG9mIGRvY3VtZW50YXRpb25zCgkqIHBhcnNlci5bY2hdIHRyZWUuW2NoXSB2YWxpZC5bY2hdOiBzZXJpb3VzIHVwZGF0ZXMgdy5yLnQuIHBhcnNpbmcKCSAgdGhlIGludGVybmFsIHN1YnNldC4gCgkqICouYyAqLmg6IG1vZGlmaWNhdGlvbnMgbmVlZGVkIHRvIGdlbmVyYXRlIHRoZSBkb2N1bWVudGF0aW9uIHVzaW5nCgkgIGd0ay1kb2MsIGNsZWFudXAgb2YgZnVuY3Rpb25zIGJsb2NrcywgcmVvcmdhbmlzYXRpb24gb2Ygc3RydWN0CgkgIGRlY2xhcmF0aW9ucy4KClR1ZSBGZWIgMTYgMTc6Mjc6MjkgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTWFrZWZpbGUuYW0sIHNwZWMsIGRvYy9NYWtlZmlsZS5hbSA6IHVwZ3JhZGluZyB0byAwLjk5LjgsIGZpeGluZwoJICB0aGUgdGFyIGFuZCBzcGVjIGZpbGUgdG8gaW5jbHVkZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2MuCgoxOTk5LTAyLTEzICBOdW5vIEZlcnJlaXJhICA8bm1yZkBybmwuaXN0LnV0bC5wdD4KCgkqIGRvYy8uY3ZzaWdub3JlOiBBZGRlZCB0aGlzIGZpbGUuCgpNb24gRmViICA4IDE5OjI3OjU2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYzogZml4ZWQgeG1sR2V0UHJvcCB0byByZXR1cm4gIiIgd2hlbiB0aGUgYXR0cmlidXRlCgkgIGV4aXN0cywgZXZlbiBpZiB0aGUgbm9kZS1saXN0IGlzIE5VTEwuCgpNb24gRmViICA4IDE2OjEwOjE1IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYzogcGF0Y2hlZCBhbiBlcnJvciBvdXRwdXR0aW5nIGVtcHR5IGF0dHJpYnV0ZSB2YWx1ZXMuCgkqIE1ha2VmaWxlLmFtIGFuZCBkb2MvbWFrZWZpbGUuYW06IGhhdmUgYmVlbiB1cGRhdGVkIGR1cmluZyB0aGUKCSAgd2Vlay1lbmQuIFNvcnJ5IGZvciBhbiBlbXB0eSBDVlMgbG9nLCBJIGdvdCBhIHNoZWxsIHByb2JsZW0uCgpNb24gRmViICAxIDEyOjEwOjEzIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuaDogY2xlYW5lZCB1cCB1c2luZyBlbnVtcyBpbnN0ZWFkIG9mIGRlZmluZXMKCSogcGFyc2VyLmMsIHZhbGlkLltjaF06IG1vcmUgd29yayBvbiBwYXJzaW5nL291dHB1dCBvZiBlbGVtZW50CgkgIGRlY2xhcmF0aW9ucwoKU3VuIEphbiAzMSAyMjowNjo0OCBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB2YWxpZC5bY2hdLCB0cmVlLmMsIHBhcnNlci5jIDogbW9yZSB3b3JrIHRvd2FyZCBmdWxsIHBhcnNpbmcKCSAgb2YgWE1MIERURHMuCgkqIFJFQURNRTogYWRkZWQgaW5mb3JtYXRpb25zIGFib3V0IG1haWxpbmctbGlzdCBhbmQgb24tbGluZQoJICBkb2N1bWVudGF0aW9uCgoxOTk5LTAxLTI3ICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogY29uZmlndXJlLmluIChYTUxfSU5DTFVERURJUik6IFVzZSAtSSBub3QgLUwgZm9yIGluY2x1ZGVzLgoKU3VuIEphbiAxNyAyMDowNjozNiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgdHJlZS5bY2hdIDogbW9yZSB3b3JrIHRvd2FyZCBjb25mb3JtYW5jZSB0ZXN0aW5nLAoJICBhZGRlZCBhIGxhc3QgZWxlbWVudCB0byBhY2NlbGVyYXRlIHBhcnNpbmcgb2YgdmVyeSBmbGF0IHN0cnVjdHVyZXMKCSAgc3RhcnRlZCB3b3JraW5nIG9uIGludGVybmFsIHN1YnNldCBFbGVtZW50IGNvbnRlbnQgZGVjbGFyYXRpb24uCgkqIHZhbGlkLltjaF0gOiBmaXJzdCBjdXQgYXQgYWRkaW5nIGNvZGUgdG93YXJkIHZhbGlkYXRpb24uCgkqIHByZXZpb3VzIGNoYW5nZXMgaGFkIGFsc28gc21hbGwgaW1wYWN0IG9uIG1vc3QgZmlsZXMsIGVzcGVjaWFsbHkKCSAgdGhlIGNvbmZvcm1hbmNlIHRlc3RpbmcgdXNpbmcgSmFtZXMgQ2xhcmsgdGVzdCBzdWl0ZS4KClN1biBKYW4gMTcgMTQ6NDU6MDYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdGVzdC8qIDogdXBkYXRlZCB0aGUgZXhhbXBsZXMsIG1vc3Qgb2YgdGhlbSB3ZXJlIG5vdCB3ZWxsCgkgICAgICAgICAgIGZvcm1lZCAoaHVtbSksIGFuZCBhZGRlZCByZGYyLgoJKiByZXN1bHQvKiA6IHJlc3VsdGluZyBjaGFuZ2VzIGluIHRoZSBvdXRwdXQuCgpTdW4gRGVjICA2IDEzOjA2OjU4IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYzogY2hhbmdlZCB0aGUgYmVoYXZpb3VyIG9mIHhtbEdldFByb3Agb24gTlVMTCB2YWx1ZXMuCgpTYXQgRGVjICA1IDEyOjI1OjA5IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYzogcGF0Y2hlZCBhIGJ1ZyBpbiB0aGUgZ2VuZXJhdGlvbiBvZiBlbXB0eSBhdHRyaWJ1dGVzCgpGcmkgTm92IDI3IDAxOjM2OjU0IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGVudGl0aWVzLltjaF0sIHRyZWUuW2NoXSwgdGVzdGVyLmM6IGFkZGVkIGNvcHkgaW50ZXJmYWNlcwoJICBmb3Igbm9kZS90cmVlcy9kb2N1bWVudHMvLi4uIEJpZ2dlc3QgcHJvYmxlbSBpcyBuYW1lc3BhY2UKCSAgc3VwcG9ydCB3aGVuIGNvcHlpbmcgc3VidHJlZXMuCgpTdW4gTm92IDE1IDE5OjU5OjQ3IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBlbnRpdGllcy5jOiBpbXByb3ZlIGVudGl0aWVzIGFuZCBjaGFyIHJlZiBlbmNvZGluZywKCSAgYW5kIGNsZWFudXBzIG9mIGVycm9yIG1lc3NhZ2VzLgoKRnJpIE5vdiAxMyAxMzowMzoxMCBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgZW50aXRpZXMuYzogc2ltcGxlIGJ1ZyBodW50aW5nIGRvbmUgZHVyaW5nIHJwbTJodG1sIGFuZAoJICBycG1maW5kIGludGVncmF0aW9uLgoKU3VuIE5vdiAgOCAxMzoxMTowNyBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXTogQWRkZWQgaW50ZXJmYWNlcyBhbGxvd2luZyB0byBzcGVjaWZ5IGEgU0FYCgkgIGhhbmRsZXIgYmVmb3JlIHBhcnNpbmcuCgpTdW4gTm92ICA4IDA5OjM5OjE3IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiByZWRpcnJlY3QgYWxsIGVycm9ycyByZXBvcnRpbmcgdGhyb3VnaCB0aGUgU0FYCgkgIGVycm9yIGZ1bmN0aW9uCgpXZWQgTm92ICA0IDE0OjIxOjU0IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGVudGl0aWVzLmM6IHJhdGhlciB1c2UgSEFWRV9TTlBSSU5URiBhbmQgbm90IGRlcGVuZCBvbiBnbGliCgkqIGxpYnRvb2wsIHRsbWFpbiAuLi46IHVwZGF0ZSBvZiB0aGUgbGlidG9vbCBmaWxlcwoKMTk5OC0xMS0wNCAgTWlndWVsIGRlIEljYXphICA8bWlndWVsQG51Y2xlY3UudW5hbS5teD4KCgkqIGVudGl0aWVzLmM6IFVzZSBnX3NucHJpbnRmIGluc3RlZGEgb2Ygc25wcmludGYuCgpTdW4gTm92ICAxIDE0OjMxOjA2IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGVudGl0aWVzLmMsIHBhcnNlci5jOiBkZWJ1ZyBhbmQgY2xlYW51cCBvZiBDaGFyUmVmIGhhbmRsaW5nL3NhdmluZy4KCSAgYWRkZWQgZW50NSB0ZXN0IGZvciB0aGlzIHB1cnBvc2UuCgkqIHBhcnNlci5jLCBwYXJzZXIuaDogZm9ybWF0dGluZywgY29tbWVudHMgYW5kIFVURi04IHBsYW5uaW5nLgoKRnJpIE9jdCAzMCAwMTozNjo1MiBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogZml4ZWQ/IGEgc3RyYW5nZSBlcnJvciBkdWUgdG8gY29tcHJlc3Npb24gb24gYSBHV1AKCSAgZG9jdW1lbnQuCgpUaHUgT2N0IDI5IDAwOjQ4OjQ1IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXTogYnVnIGZpeGluZwoJKiBlbnRpdGllcy5bY2hdOiBkZWZpbmVkIGEgc3BlY2lmaWMgdHlwZSBmb3IgcHJlZGVmaW5lZCBlbnRpdGllcwoJKiBkb2MveG1sLmh0bWw6IG1vcmUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgbGlicmFyeSwgaG93IHRvIHVzZSBpdCwKCSAgb3ZlcnZpZXcgb2YgdGhlIGludGVyZmFjZXMuCgpXZWQgT2N0IDI4IDE3OjU2OjM1IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXTogbW9yZSBjbGVhbnVwIG9uIHRoZSBBUEksIG1hZGUgdGhlIHRyZWUgbW9yIGNvbmZvcm1hbnQuCgpUdWUgT2N0IDI3IDE3OjU0OjAwIEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYzogY29ycmVjdGVkIGEgc21hbGwgYnVnCgkqIGRvYy94bWwuaHRtbDogY29udGludWluZyB3cml0aW5nIGRvY3VtZW50YXRpb24uCgpUdWUgT2N0IDI3IDE3OjU0OjAwIEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRlYnVnWE1MLmggZGVidWdYTUwuYzogYWRkZWQgZGVidWdnaW5nIHV0aWxpdGllcy4KCSogdGVzdGVyLmM6IGFkZGVkIC0tZGVidWcgc3dpdGNoLgoJKiB0cmVlLmM6IHBhdGNoZWQgYW4gaW5jb3JyZWN0IG5vZGUtPnR5cGUgYXNzaWdubWVudC4KCSogcGFyc2VyLmM6IGZvcm1hdHRpbmcsIGVuc3VyZSB0aGF0IG5vZGUtPmRvYyAhPSBOVUxMIGluIGF0dHJpYnV0ZXMKClR1ZSBPY3QgMjcgMDE6MTU6MzkgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLltjaF0gU0FYLmMgdHJlZS5bY2hdOiBsYXJnZSBhbW91bnQgb2YgY2hhbmdlcyB0byBpbXByb3ZlCgkgIGVudGl0eSBzdXBwb3J0IGFuZCBwcm92aWRlIGFuIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGNsb3NlIHRvCgkgIERPTSBvbmUgKGVudGl0eSByZWYgbm9kZXMsIGFuZCBhdHRyaWJ1dGUgdmFsdWUgYXMgdHJlZSkuIEkgdHJpZWQKCSAgdG8gcHJlc2VydmUgdGhlIGludGVyZmFjZSBidXQgdGhpcyB3aWxsIHN1cmVseSBicmVhayBzb21lIGFwcHMKCSAgKEkgaGF2ZSB0byBjaGFuZ2UgcnBtMmh0bWwvcnBtZmluZCBmb3IgZXhhbXBsZSkuIEkgaGFkIHRvIGNoYW5nZQoJICB0d28gaW50ZXJmYWNlcywgYW5kIHRoZSBnZW5lcmF0ZWQgdHJlZSBpcyBzb21ld2hhdCBkaWZmZXJlbnQuCgkqIGRvYy8qIDogc3RhcnRlZCBkb2N1bWVudGluZyB0aGUgWE1MIGxpYnJhcnksIHRoZSB0cmVlIGFuZAoJICBET00vQ29yYmEuIFRoaXMgaXMgYSBmaXJzdCBzdGVwLgoKU2F0IE9jdCAyNCAxNDoyMzo1MSBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogU2V0IHVwIHRoZSBmb25jdGlvbnMgY29tbWVudCBibG9jaywgYm9yaW5nIGJ1dCB1c2VmdWwuCgkqIHBhcnNlci5oLCBTQVguYywgcGFyc2VyLmM6IG5vdyBhdHRyaWJ1dGVzIGFyZSBwcm9jZXNzZWQgdGhyb3VnaAoJICB0aGUgU0FYIGludGVyZmFjZS4gVGhlIHByb2JsZW0gaXMgdGhhdCBteSBTQVggaW50ZXJmYWNlIGRpdmVyZ2VkCgkgIHF1aXRlIGEgYml0IGZyb20gdGhlIG9yaWdpbmFsIG9uZSwgd2VsbCB0aGlzIGlzIG5vdCBhbiBvZmZpY2lhbAoJICBzcGVjLCBhbmQgdHJhbnNsYXRpbmcgaXQgZnJvbSBKYXZhIHRvIEMgaXMgaGFpcnkgYW55d2F5Li4uCgpUdWUgT2N0IDIwIDAyOjExOjIxIEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFNBWC5jLCBlbnRpdGllcy5jLCB0cmVlLmMsIGVuY29kaW5nLmMsIGVycm9yLmM6IFNldCB1cCB0aGUKCSAgZm9uY3Rpb25zIGNvbW1lbnQgYmxvY2ssIGJvcmluZyBidXQgdXNlZnVsLgoKU3VuIE9jdCAxOCAyMDo0MDo1OCBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbmNvZGluZy5bY2hdLCBNYWtlZmlsZS5hbTogQWRkZWQgdGhlIFVURi04LCBVVEYtMTYgYW5kIElTTyBMYXRpbiAxCgkgIGNvbnZlcnNpb24gcm91dGluZXMuIEhvd2V2ZXIgdGhleSBhcmUgbm90IHlldCB1c2VkIHRvIGNvbnZlcnQgdGhlCgkgIGlucHV0cy4gVGhlIGNvcmUgd2lsbCBydW4gd2l0aCBVVEYtOC4KClN1biBPY3QgMTggMTU6MDg6MTkgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jIDogbWFrZSBzdXJlIHRoYXQgdGhlIHR5cGUgaWQgaXMgcHJvcGVybHkgc2V0LXVwIHdoZW4KCSAgYSBuZXcgb2JqZWN0IGlzIGFsbG9jYXRlZCwgbmVlZGVkIGZvciBET00uCgpTYXQgT2N0IDE3IDAyOjQzOjIxIEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuaCwgdHJlZS5jOiBPaywgdGhlIG1haW4gb2JqZWN0cyBpbiB0aGUgdHJlZSB3aWxsIGJlIG5hdGl2ZQoJICBjb3JiYSBvYmplY3RzLCBpdCBjb3N0cyA4IGJ5dGVzIHBlciBOb2RlLCBBdHRyaWJ1dGUgYW5kIERvY3VtZW50CgkgIGJ1dCBpdCBzaW1wbGlmaWVzIHRoZSBDb3JiYSBpbnRlZ3JhdGlvbiBhIGxvdCAobm8gZXh0cmEgaW50ZXJmYWNlCgkgIG9iamVjdHMgdG8gYWxsb2NhdGUvZnJlZSkuCgpUdWUgT2N0IDEzIDIxOjQ2OjU3IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuaCwgdHJlZS5jLCBwYXJzZXIuYzogYWRkZWQgcHJldiBhbmQgZG9jIHBvaW50ZXJzIHRvIE5vZGUsCgkgIGFuZCBjaGFuZ2VkIE5PREVzIGNvbnRhbnRzIGZvciBjb25mb3JtaXR5IHdpdGggRE9NIExldmVsIDEKCldlZCBPY3QgIDcgMjM6NDI6NDYgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWRkZWQgaG9va3MgdG8ga2VlcCB0cmFjayBvZiBzZXJ2YW50cyB3aGVuIGNyZWF0aW5nIG9iamVjdHMKCSAgeG1sRG9jIGFuZCB4bWxOb2RlIChmb3IgQ29yYmEgZXhwb3J0KS4KClN1biBPY3QgIDQgMDM6MTg6MDkgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWRkZWQgeG1sLWNvbmZpZyBzY3JpcHQuCgpUaHUgT2N0ICAxIDE2OjIyOjM3IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGF1dG9nZW4uc2ggOiBhcHBsaWVkIHBhdGNoIGZyb20gRnJlZGVyaWMgRGV2ZXJuYXkgPGRldmVybmF5QGlzdGFyLmZyPgoJICB0byBhdXRvdXBkYXRlIGxpYnRvb2wgYW5kIGF1dG9tYWtlIGNvbmYgZmlsZXMuCgoxOTk4LTA5LTMwICBNaWd1ZWwgZGUgSWNhemEgIDxtaWd1ZWxAbnVjbGVjdS51bmFtLm14PgoKCSogTWFrZWZpbGUuYW06IFVzZSAnPycgdG8gc2VwYXJhdGUgdGhlIHNlZAoJY29tbWFuZHMgYXMgJywnIGlzIHVzZWQgd2hlbiBwZW9wbGUgcGFzcyAtV2wsc29tZXRoaW5nLgoKVGh1IFNlcCAyNCAxNToxMzoyOSBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmMsIHRyZWUuaDogYWRkZWQgYSBwZXItZG9jdW1lbnQgY29tcHJlc3Npb24gaW50ZXJmYWNlLgoKVHVlIFNlcCAyMiAyMDo0NzozOCBFRFQgMTk5OAoKCSogdHJlZS5jLCB0cmVlLmg6IGFkZGVkIHNhdmluZyB3aXRoIGNvbXByZXNzaW9uIGFuZCBhZGRlZCBpbnRlcmZhY2VzCgkgIHRvIGNvbnRyb2wgdGhlIGNvbXByZXNzaW9uIGxldmVsICh4bWxHZXRDb21wcmVzc01vZGUsCgkgIHhtbFNldENvbXByZXNzTW9kZSkgYW5kIGEgbmV3IHNhdmUgdG8gZmlsZW5hbWUgZnVuY3Rpb24gKHhtbFNhdmVGaWxlKS4KCk1vbiBTZXAgMjEgMjA6MTE6MTMgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IGNvcnJlY3RlZCBhIGxvb3AgZm9yIGZpbGVzIG9mIHNpemUgMAoKMTk5OC0wOC0yMCAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KCgkqIGVycm9yLmg6IE5ldyBmaWxlLiAgQ29udGFpbnMgcHJvdG90eWVzIGZyb20gYGVycm9yLmMnLgoKVGh1IEF1ZyAxMyAxOTowMjozNCAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5hbSAoeG1saW5jZGlyKTogTmV3IG1hY3JvLgoJKHhtbGluY19IRUFERVJTKTogUmVuYW1lZCBmcm9tIGluY2x1ZGVfSEVBREVSUy4KClRodSBBdWcgMTMgMDA6NDA6MTQgRURUIDE5OTggIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFwcGxpZWQgc21hbGwgcGF0Y2ggb24gbnVtZXJpYyBlbnRpdGllcyBmcm9tCgkgIENocmlzdG9waGVyIEJsaXp6YXJkIDxibGl6emFyZEBhcHBsaWVkdGhlb3J5LmNvbT4KCldlZCBBdWcgMTIgMjM6MTI6NTggRURUIDE5OTggIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIE5ldyByZWxlYXNlIDAuMiwgcmVtb3ZlZCB0aGUgb2xkIHhtbF8qIGZpbGVzIHNvIHRoYXQgaXQncwoJICAgIGNvaGVyZW50IHdpdGggdGhlIG90aGVyIENWUyBiYXNlIChXM0MpLCBmYXIgYmV0dGVyIGNvbmZvcm1hbmNlCgkgICAgdG8gc3RhbmRhcmQsIG5ldyBuYW1lc3BhY2VzLCBkZWNlbnQgZW50aXRpZXMgc3VwcG9ydCwgYmVnaW5uaW5nCgkgICAgb2YgYSBTQVgtbGlrZSBpbnRlcmZhY2UuIE5lYXJseSBub3RoaW5nIGxlZnQgaW50YWN0LCBldmVuIHRoZQoJICAgIHRlc3QgZXhhbXBsZXMgLi4uCgoxOTk4LTA3LTMwICBDaHJpc3RvcGhlciBCbGl6emFyZCAgPGJsaXp6YXJkQGFwcGxpZWR0aGVvcnkuY29tPgoKCSogLmN2c2lnbm9yZTogQWRkIC5kZXBzIGRpcgoKU3VuIEp1bCAyNiAxNzoyOTo1MiBFRFQgMTk5OCAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sX3RyZWU6IGNoYW5nZWQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHNjaGVtZSBmb3IgbmFtZSBpbiB4bWxOZXdOb2RlCgpTdW4gSnVsIDI2IDAwOjE3OjUxIEVEVCAxOTk4ICBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IGFkZGVkIHRlc3QgZm9yIENQUAoJKiBBVVRIT1JTLCBDaGFuZ2Vsb2c6IHRoZSBvcmlnaW5hbCBvbmVzIGRpZG4ndCBnZXQgY29tbWl0ZWQgYnV0IHRoZQoJICAgIGdsaWIgb25lcyBpbnN0ZWFkLCBmaXhlZC4KCSogTWFrZWZpbGUuYW06IGNvcnJlY3RlZCBhbiBlcnJvciBpbiBsaWJyYXJ5IG5hbWluZwoKRnJpIEp1bCAyNCAxNjo0NzoxNCAxOTk4ICBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBpbnRlZ3JhdGVkIGNvZGUgZGV2ZWxvcHBlZCBhdCBXM0MKCSogY2hhbmdlZCB0aGUgb3JpZ2luYWwgQ29weXJpZ2h0CgkqIG1pZ3JhdGVkIHRvIGF1dG9tYWtlCgkqIHByZWZpeGVkIHRoZSBmaWxlbmFtZXMgYnkgeG1sXyB0byBhdm9pZCBmaWxlbmFtZSBjbGFzaGVzCgo=