RnJpIE1hciAgOCAxMDo1ODoyOCAyMDAyICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqID09PT09PT09IFJlbGVhc2VkIDIuMC4wID09PT09PT09CgpGcmkgTWFyICA4IDEwOjIwOjQ2IDIwMDIgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogTkVXUzogRmluYWwgdXBkYXRlcyBmb3IgMi4wLjAKCgkqIGdsaWIvZ3N0cmZ1bmNzLmM6IENvbnZlcnQgdGhlIHJlc3VsdHMgb2Ygc3RyZXJyb3IoKQoJYW5kIHN0cnNpZ25hbCgpIHRvIFVURi04LgoKCSogZ2xpYi9nY29udmVydC5jIGdsaWIvZ2Rpci5jIGdsaWIvZ2lvY2hhbm5lbC5jIGdsaWIvZ2lvdW5peC5jCglnbGliL2dpb3dpbjMyLmM6IFVzZSBnX3N0cmVycm9yKCksIG5vdCBzdHJlcnJvcigpLgoKRnJpIE1hciAgOCAwMDoxNToyOSAyMDAyICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIFJFQURNRS5pbjogVXBkYXRlcy4KCgkqIFJFQURNRS5pbjogQWRkIHdhcm5pbmdzIGFib3V0IGN1cnJlbnQgZW5jb2RpbmcgcHJvYmxlbXMgd2l0aCAucG8KCWZpbGVzIGFuZCBlcnJvciBsb2dnaW5nIGZ1bmN0aW9ucy4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KCkuCgoJKiBnbGliL2d1dGlscy5jIChfZ2xpYl9nZXR0ZXh0KTogQ2FsbCAKCWJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0LCBpZiBwcmVzZW50LgoKCSogSU5TVEFMTC5pbjogU29tZSB1cGRhdGVzLgoKCSogQVVUSE9SUzogVXBkYXRlcy4KCgkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogUmVtb3ZlIFRPRE8ueG1sIGZyb20gRVhUUkFfRElTVC4KCgkqIGRvY3MvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBSZW1vdmUgQ2hhbmdlcy0yLjAudHh0Cglmcm9tIEVYVFJBX0RJU1QuCgoyMDAyLTAzLTA2ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogY29uZmlndXJlLmluOiBGaXhlZCByZWNvZ25pdGlvbiBvZiBkY2UuIERvIG5vdCB1c2UgLWxjX3Igb24KCU9wZW5CU0QgYW5kIEZyZWVCU0QuIEluc3RlYWQgdXNlIC1wdGhyZWFkLiBNb3ZlIHNjaGVkdWxpbmcKCXBhcmFtZXRlciBjaGVjayB0byBhZnRlciB0aGUgY2FzZS4uZXNhYyBibG9jayBmb3IgZmluZGluZyB0aGUKCXJpZ2h0IHRocmVhZCBsaWJzLiAoIzczNjg2KQoKVHVlIE1hciAgNSAxOTo0MTowMiAyMDAyICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIEdUSystMi4wLjAgcmMxCgoyMDAyLTAzLTA1ICBNYXR0aGlhcyBDbGFzZW4gIDxtYWNsYXNAZ214LmRlPgoKCSogZ2xpYi9nbWFpbi5jIChnX3NvdXJjZV9zZXRfcHJpb3JpdHkpOiBGaW5pc2ggZG9jcy4gIAoJKCM2NzA2NCkKClR1ZSBNYXIgIDUgMDA6Mzg6NTQgMjAwMiAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbGliL2d1dGlscy5jIChnX2dldF9hbnlfaW5pdCk6IFdoZXJlIHdlIGhhdmUKCWdldHB3dWlkW19yXSwgdXNlIHRoYXQgaW4gcHJlZmVyZW5jZSB0byAkSE9NRSwgYW5kCglvbmx5IGNoZWNrICRIT01FIGFzIGEgZmFsbGJhY2sgaWYgZ2V0cHd1aWQgZmFpbHMuCgkoIzIzMTEpCgpTdW4gTWFyICAzIDIxOjA5OjI0IDIwMDIgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmluOiBEZWZhdWx0IHRvIC0tZGlzYWJsZS1ndGstZG9jLCB0byBhdm9pZAoJSmFkZSBzZXR1cCBoYXNzbGVzLgoKCSogYXV0b2dlbi5zaDogQWRkIC0tZW5hYmxlLWd0ay1kb2MuCgoJKiBjb25maWd1cmUuaW46IERlZmF1bHQgdG8gLS1kaXNhYmxlLXN0YXRpYyB0byBnbwoJYWxvbmcgd2l0aCBQYW5nbywgR1RLKyB3aGVyZSB3ZSBuZWVkIHRvIGRvIHRoYXQgZm9yCgliaW4tY29tcGF0IHJlYXNvbnMuCgoJKiBNYWtlZmlsZS5hbTogQWRkIGEgc2xpZ2h0bHkgbW9kaWZpZWQgZGlzdGNoZWNrIHJ1bGUKCXRoYXQgcGFzc2VzIC0tZW5hYmxlLWd0ay1kb2MgdG8gdGhlIGNvbmZpZ3VyZSBpbnNpZGUuCgkoU28gdGhhdCAnbWFrZSBkaXN0JyBzdWNjZWVkcyBpbnNpZGUuKQoKCSogY29uZmlndXJlLmluICoucGMuaW4gKiovTWFrZWZpbGUuYW0gbTRtYWNyb3MvZ2xpYi0yLjAubTQKCXRlc3RzL21ha2VmaWxlLm1pbmd3LmluOiBTd2l0Y2ggZXZlcnl0aGluZyBvdmVyIHRvCglnbGliLTIuMC4KClN1biBNYXIgIDMgMDI6MzA6MDUgMjAwMiAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ2xpYi9nc2Nhbm5lci5oIChfR1NjYW5uZXJDb25maWcpOiBhZGRlZCBwYWRkaW5nLgoKCSogZ2xpYi9naG9vay5oIChzdHJ1Y3QgX0dIb29rKTogYWRkIHR3byBwYWRkaW5nIHBvaW50ZXJzLgoKVGh1IEZlYiAyOCAxMToxMzo0OSAyMDAyICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ3NoZWxsLmMgKGdfc2hlbGxfdW5xdW90ZSk6IEZpeCBtZW1vcnkgbGVhay4KCSgjNzI5OTAsIFBhb2xvIE1hZ2dpKQoKMjAwMi0wMi0yOCAgU3ZlbiBOZXVtYW5uICA8c3ZlbkBnaW1wLm9yZz4KCgkqIG00bWFjcm9zL2dsaWItMi4wLm00OiBuaWNlciBvdXRwdXQgb2YgY29uZmlndXJlIC0taGVscC4KCjIwMDItMDItMjcgIERhbmllbCBFbHN0bmVyICA8ZGFuaWVsLmVsc3RuZXJAZ214Lm5ldD4KCgkqIGdsaWIvZ2RhdGUuYyAoZ19kYXRlX3N0cmZ0aW1lKTogUmVtb3ZlIHRoZSBzaG9ydGN1dAoJZm9yIFVURi04IGxvY2FsZXMgdG8gZW5zdXJlIGNvbnNpc3RlbnQgYmVoYXZpb3VyLiAgRml4CgloYW5kbGluZyBvZiB0aGUgc3RyZnRpbWUgcmV0dXJuIHZhbHVlLCBhbmQgYXZvaWQgbG9vcGluZwoJaWYgc3RyZnRpbWUgaXMgYnVnZ3kgYW5kIGNvbnN0YW50bHkgcmV0dXJucyAwLiAgQWx3YXlzCglyZXR1cm4gMCBpZiB0aGUgb3V0cHV0IGJ1ZmZlciB3YXMgdG8gc21hbGwuICgjNzI1NDQpCgpUdWUgRmViIDI2IDIxOjQ0OjAxIDIwMDIgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogY29uZmlnLnN0YXR1cyBjb25maWcuZ3Vlc3M6IFJlbW92ZSB0aGVzZSBmaWxlcwoJZnJvbSBDVlMgc28gd2UgbW9yZS1vci1sZXNzIGN1cnJlbnQgdmVyc2lvbnMgZnJvbQoJYXV0b21ha2UgLS1hZGQtbWlzc2luZy4gKFJlcG9ydGVkIGJ5IEZpbmxheSBEb2JiaWUsCgkjNjAzNDIpCgoyMDAyLTAyLTI2ICBNYXR0aGlhcyBDbGFzZW4gIDxtYWNsYXNAZ214LmRlPgoKCSogZG9jcy9kZWJ1Z2dpbmcudHh0LCBnb2JqZWN0L2dsaWItZ2VubWFyc2hhbC5jLAoJZ29iamVjdC9nbGliLWdlbm1hcnNoYWwuMSwgZ29iamVjdC9NYWtlZmlsZS5hbSwgZ29iamVjdC9ndHlwZS5jOgoJUmVtb3ZlIHJlZmVyZW5jZXMgdG8gZ3J1bnRpbWUuIFRoaXMgaW5jbHVkZXMgcmVuYW1pbmcgdGhlIHRlc3QKCXByb2dyYW0gdGVzdGdydW50aW1lIHRvIHRlc3Rnb2JqZWN0IGFuZCB0aGUgZGVidWcgZW52dmFyCglHUlVOVElNRV9ERUJVRyB0byBHT0JKRUNUX0RFQlVHLiAgKCM1MDg3NykKClR1ZSBGZWIgMjYgMTQ6NTY6MzEgMjAwMiAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbGliLTIuMC5wYy5pbjogUmVvcmRlciBASU5UTF9MSUJTQCBhbmQgQElDT05WX0xJQlNAIGluIGNhc2UKCS1saW50bCBkZXBlbmRzIG9uIC1saWNvbi4gKE1pcm9zbGF3IERvYnJ6YW5za2ktTmV1bWFubiAjNzI3MDgpCgpNb24gRmViIDI1IDIzOjAxOjUzIDIwMDIgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmluIGFjY29uZmlnLmggY29uZmlnLmgud2luMzIuaW4KCWdsaWIvZ2NvbnZlcnQuYzogQ2hlY2sgZm9yIGljb252XyogaW4gLWxpY29udgoJYXMgd2VsbCBhcyBsaWJpY29udl8qIGluIC1saWNvbnYgc2luY2UgQUlYIHNoaXBzCgl0aGUgc3lzdGVtIGljb252IGluIGEgc2VwYXJhdGUgbGlicmFyeS4KCVBhdGNoIGZyb20gTWlyb3NsYXcgRG9icnphbnNraS1OZXVtYW5uICgjNzI1NjkpCQoKTW9uIEZlYiAyNSAyMjo0NjoyOSAyMDAyICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ2RlYnVnLmg6IEZpeCB0cmFpbGluZyAsIGluIGVudW1lcmF0aW9uCglNaXJvc2xhdyBEb2JyemFuc2tpLU5ldW1hbm4gKCM3MjU3NCkKCQpNb24gRmViIDI1IDIxOjU4OjAxIDIwMDIgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi9ndW5pcHJvcC5jIChnX3VuaWNoYXJfdG91cHBlci9sb3dlcik6IEFjY291bnQKCWZvciBzb21lIGNoYXJhY3RlcnMgaGF2aW5nIG5vdyB1cHBlcmNhc2UvbG93ZXJjYXNlCgllcXVpdmFsZW50cyBpbiBjb2RlLCBkb2NzLiAoIzY1NDE2KQoKTW9uIEZlYiAyNSAxNjozMTowOSAyMDAyICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ3NoZWxsLmMgKHRva2VuaXplX2NvbW1hbmRfbGluZSk6IEZpeCBxdW90aW5nCglvZiBcJyBzZXF1ZW5jZSAoIzcyNTQ4LCBDaHJpc3RpYW4gUm9zZSkKCjIwMDItMDItMjQgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogUkVBRE1FLndpbjMyOiBFZGl0cy4KCgkqIGNvbmZpZy5oLndpbjMyLmluOiBBZGQgKGFzIHVuZGVmaW5lZCkgSEFWRV9VTlNFVEVOViwKCV9GSUxFX09GRlNFVF9CSVRTIGFuZCBfTEFSR0VfRklMRVMsIGp1c3QgZm9yIGNvbXBsZXRlbmVzcy4KCgkqIGdsaWJjb25maWcuaC53aW4zMi5pbjogQWRkIHRoZSBnY2MtMi45NS54IHVuZGVmIG9mCglHX0hBVkVfSVNPX1ZBUkFSR1MuCgpTYXQgRmViIDIzIDIxOjM2OjUxIDIwMDIgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmluOiAxLjMuMTUsIGJpbmFyeSwgaW50ZXJmYWNlIGFnZSAwLgoKCSogTkVXUzogVXBkYXRlZC4KClNhdCBGZWIgMjMgMTQ6NTQ6MTMgMjAwMiAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbGliL2dpb2NoYW5uZWwuaCAoc3RydWN0IF9HSU9DaGFubmVsKTogQWRkIGEgbGl0dGxlIGJpdAoJb2YgcGFkZGluZy4KCQoJKiBnbGliL2dtYWluLmggKHN0cnVjdCBfR1NvdXJjZSk6IEFkZCBhIGxpdHRsZSBiaXQgb2YgcGFkZGluZy4KCjIwMDItMDItMjEgIE1hdHRoaWFzIENsYXNlbiAgPG1hY2xhc0BnbXguZGU+CgoJKiBnbGliL2dkZWJ1Zy5oOiBOZXcgaGVhZGVyIGNvbnRhaW5pbmcgR1RLX0RFQlVHLXN0eWxlIGRlYnVnZ2luZwoJc3VwcG9ydCBmb3IgR0xpYi4gQ3VycmVudGx5IG9ubHkgdGhlIGZhdGFsX3dhcm5pbmdzIGRlYnVnIG9wdGlvbiBleGlzdHMuIAoKCSogZ2xpYi9nbWVzc2FnZXMuYyAoZ19sb2dfbXNnX3ByZWZpeF9pbml0KTogTmV3IG9uZS1zaG90IGZ1bmN0aW9uCglmb3IgcGFyc2luZyBHX01FU1NBR0VTX1BSRUZJWEVELgoJKF9nX2RlYnVnX2luaXQpOiBOZXcgb25lLXNob3QgZnVuY3Rpb24gZm9yIHBhcnNpbmcgR19ERUJVRy4KCShnX2xvZ193cml0ZV9wcmVmaXgpOiBVc2UgZ19sb2dfbXNnX3ByZWZpeF9pbml0KCkuCgkoZ19tZXNzYWdlc19pbml0KTogVXNlIGdfbG9nX21zZ19wcmVmaXhfaW5pdCgpIGFuZCBfZ19kZWJ1Z19pbml0KCkuCgoJKiBnbGliL01ha2VmaWxlLmFtIChsaWJnbGliXzFfM19sYV9TT1VSQ0VTKTogQWRkIGdkZWJ1Zy5oLgoKV2VkIEZlYiAyMCAyMjozNTo0MiAyMDAyICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCglGaXhlcyBmcm9tIE1pcm9zbGF3IERvYnJ6YW5za2ktTmV1bWFubiAoIzcxOTYzKQoKCSogZ2xpYi9naW91bml4LmMgKGdfaW9fY2hhbm5lbF9uZXdfZmlsZSk6IEZpeCB0cmFpbGluZyBjb21tYQoJaW4gZW51bS4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIHVuc2V0ZW52LgoKCSogdGVzdC91cmktdGVzdC5jOiBGYWxsIGJhY2sgdG8gdHJ5aW5nIHB1dGVudihWQVJOQU1FKSBpZgoJdW5zZXRlbnYgaXNuJ3QgcHJlc2VudC4KCjIwMDItMDItMjAgIERhbmllbCBFbHN0bmVyICA8ZGFuaWVsLmVsc3RuZXJAZ214Lm5ldD4KCgkqIGdsaWIvZ3N0cmluZy5bY2hdIChnX3N0cmluZ19lcmFzZSk6IFVzZSBnc3NpemUgaW5zdGVhZCBvZgoJZ3NpemUgYXMgdHlwZSBvZiB0aGUgcG9zIGFuZCBsZW4gYXJndW1lbnRzLiAoIzcxOTY0KQoKMjAwMi0wMi0yMCAgU2ltb3MgWGVuaXRlbGxpcyAgPHNpbW9zQGhlbGx1Zy5ncj4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgZWwgdG8gQUxMX0xJTkdVQVMgKEdyZWVrIGxhbmd1YWdlKS4KCjIwMDItMDItMTkgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ2xpYi9nc3Bhd24td2luMzIuYzogSW5jbHVkZSA8Y29uZmlnLmg+IGZpcnN0IGhlcmUsIHRvby4gVXNlCglnX2lvX2NoYW5uZWxfcmVhZF9jaGFycygpIGluc3RlYWQgb2YgKGRlcHJlY2F0ZWQpCglnX2lvX2NoYW5uZWxfcmVhZCgpLiBTZXQgZW5jb2RpbmcgdG8gTlVMTCBmb3IgdGhlIGNoYW5uZWxzIHVzZWQKCWZvciB0aGUgcGlwZXMgZnJvbSB0aGUgY2hpbGQuCgoJKiBnbGliL2dpb3dpbjMyLmMgKGJ1ZmZlcl9yZWFkKTogRG8gcmV0dXJuIEdfSU9fU1RBVFVTX0VPRiB3aGVuCglFT0YgaGFzIGJlZW4gcmVhY2hlZC4gT3RoZXJ3aXNlLCB3aXRoIHRoZSBhYm92ZSBjaGFuZ2UgdG8KCWdzcGF3bi13aW4zMi5jLCBzcGF3bi10ZXN0IGhhbmdzLgoKTW9uIEZlYiAxOCAyMDoxODoyMyAyMDAyICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvbGliY2hhcnNldC9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IFJlbW92ZQoJY2hhcnNldC5hbGlhcyBmcm9tIEVYVFJBX0RJU1Q7IHdlIGRvbid0IHdhbnQgdGhlCgljaGFyc2V0LmFsaWFzIGZyb20gdGhlIG1ha2UgZGlzdGNoZWNrIG1hY2hpbmUKCW9uIHRoZSB0YXJnZXQgc3lzdGVtIS4gKCM3MDk3NCwgcmVwb3J0ZWQgYnkKCVJ5YW4gTG92ZXR0KQoKTW9uIEZlYiAxOCAxMjo0MDozNiAyMDAyICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogVHVybiBvZmYgSVNPIHZhcmFyZ3Mgc3VwcG9ydCBmb3IgZ2NjLTIuOTUKCXNpbmNlIGl0IGNhdXNlcyBwcm9ibGVtcyB3aXRoIEFOU0kgYW5kIHdlIHdlIGhhdmUgR05VQwoJdmFyYXJncy4gKCM3MDAyNCwgcmVwb3J0ZWQgYnkgTW9ydGVuIFdlbGluZGVyLCBmaXggZnJvbQoJSmFtZXMgSGVuc3RyaWRnZSkKClN1biBGZWIgMTcgMTE6Mzc6MDYgMjAwMiAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiAxLjMuMTQKCgkqIGdsaWIvZ2xpYmludGwuaDogRXJyb3Igb3V0IG9mIGNvbmZpZy5oIHdhc24ndCBpbmNsdWRlZAoJcmF0aGVyIHRoYW4gaW5jbHVkaW5nIGl0LCBzaW5jZSBjb25maWcuaCBtdXN0IGJlIHRoZSAKCWZpcnN0IHRoaW5nIGluY2x1ZGVkLgoKCSogZ2xpYi9nY29udmVydC5jIGdsaWIvZ21hcmt1cC5jIGdsaWIvZ3NoZWxsLmMgZ2xpYi9nc3Bhd24uYwoJZ2xpYi9ndW5pYnJlYWsuYyBnbGliL2d1bmlkZWNvbXAuYyBnbGliL2d1bmlwcm9wLmM6IAoJSW5jbHVkZSBjb25maWcuaCBhcyB0aGUgZmlyc3QgdGhpbmcuICgjNzE3MDQsIE1vcnRlbgoJV2VsaW5kZXIpCgpGcmkgRmViIDE1IDExOjQxOjQyIDIwMDIgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmluOiAxLjMuMTQsIGJpbmFyeSBhZ2UgMCwgaW50ZXJmYWNlIGFnZSAwLgoKRnJpIEZlYiAxNSAxMDo0MTo1MSAyMDAyICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIE5FV1M6IFVwZGF0ZWQuCgoJKiBjb25maWd1cmUuaW46IFJlcXVpcmUgYXV0b2NvbmYtMi41MiwgcnVuIEFDX1NZU19MQVJHRUZJTEUuCgkoIzcxNDEwLCBTdmVuIE5ldW1hbm4pCgoJKiBnbGliL2dpb3VuaXguYyBnbGliL2dpb3dpbjMyLmMgZ2xpYi9naW9jaGFubmVsLltjaF06CglDaGFuZ2Ugb2Zmc2V0IHR5cGUgZm9yIGdfaW9fY2hhbm5lbF9zZWVrW19wb3NpdGlvbl0gdG8KCWdpbnQ2NC4KCjIwMDItMDItMTUgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiB0ZXN0cy90aHJlYWQtdGVzdC5jOiBEbyBub3QgYXNzdW1lLCB0aGF0IGFmdGVyCglnX3VzbGVlcChHX1VTRUNfUEVSX1NFQykgdGhlIG5ld2x5IHN0YXJ0ZWQgdGhyZWFkIGJlZ2FuCglydW5uaW5nLiBTcG90dGVkIGJ5IE1pcm9zbGF3IERvYnJ6YW5za2ktTmV1bWFubgoJPG1uZUBtb3NhaWMtYWcuY29tPi4gTWFrZSB0aGUgdGVzdF9nX3N0YXRpY19yd19sb2NrX3RocmVhZCB0aHJlYWRzCgl3YWl0IGEgcmFuZG9tIHRpbWUuIE1ha2UgdGhlIHRlc3RfZ19zdGF0aWNfcndfbG9jayB0ZXN0IHJ1biA1CglzZWNvbmRzLCBub3QgMS4KCjIwMDItMDItMTQgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ2xpYi9nbWVzc2FnZXMuYyAoZ19sb2d2KTogVXNlIHRoZSAjaWYgYnJhbmNoIHdpdGgKCUdfQlJFQUtQT0lOVCgpIGFsc28gb24gV2luMzIuIFJlbW92ZSB0aGUgc2VwYXJhdGUgX19hc20gaW50IDMgZm9yCglNU1ZDLCBHX0JSRUFLUE9JTlQoKSBkb2VzIGV4YWN0bHkgdGhhdC4KCjIwMDItMDItMTQgIEphbWVzIEhlbnN0cmlkZ2UgIDxqYW1lc0BkYWEuY29tLmF1PgoKCSogbTRtYWNyb3MvZ2xpYi1nZXR0ZXh0Lm00OiBhZGQgdGhpcmQgYXJndW1lbnQgdG8gdGhlIEFDX0RFRklORQoJY2FsbHMsIHNvIHVzZXJzIG9mIHRoZSBtYWNybyBkb24ndCBuZWVkIHRvIGFkZCBlbnRyaWVzIHRvCglhY2NvbmZpZy5oIGluIHRoZWlyIHBhY2thZ2UuCgoyMDAyLTAyLTEzICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ21haW4uYyAoZ19tYWluX2NvbnRleHRfY2hlY2spOiBuZXZlciBkaXNwYXRjaCBzb3VyY2VzIG9mCgltaXhlZCBwcmlvcml0eSwgYmVjYXVzZSB3aGlsZSBpdGVyYXRpbmcgb3ZlciB0aGUgZGlzcGF0Y2ggYXJyYXkgYQoJbmV3IHNvdXJjZSB3aXRoIG1vcmUgcHJpb3JpdHkgbWF5IGJlIGFkZGVkLCB3aGlsZSBhIHNvdXJjZSB3aXRoCglsZXNzIHByaW9yaXR5IHJlbWFpbnMgaW4gdGhlIGRpc3BhdGNoIGFycmF5CgoyMDAyLTAyLTExICBEYXJpbiBBZGxlciAgPGRhcmluQGJlbnRzcG9vbi5jb20+CgoJKiBnbGliL2dtZXNzYWdlcy5oOiBVc2UgImlmIChleHByKSB7IH0gZWxzZSIgYXMgSSBtZWFudCB0byBpbiB0aGUKCWZpcnN0IHBsYWNlLiBUaGUgb3RoZXIgZm9ybSBjYW4gdHJpZ2dlciB3YXJuaW5ncyBpbiBzb21lIGNvbXBpbGVycwoJdGhhdCBzdXNwZWN0IGEgIjsiIGFmdGVyICJpZiAoZXhwcikiIGlzIGFuIGVycm9yLgoKMjAwMi0wMi0xMSAgTWFuaXNoIFNpbmdoICA8eW9zaEBnaW1wLm9yZz4KCgkqIGdsaWIvZ21lc3NhZ2VzLmg6IG5lZWQgc3RhdGVtZW50IHRlcm1pbmF0b3JzIGZvciB0aGUgaWYgY2xhdXNlcyBmb3IKCXRoZSBwcmVjZWRpbmcgY2hhbmdlLgoKMjAwMi0wMi0xMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBiZW50c3Bvb24uY29tPgoKCSogZ2xpYi9nbWVzc2FnZXMuaDogVXNlICJpZiAoZXhwcikgZWxzZSIgcmF0aGVyIHRoYW4KCSJpZiAoIShleHByKSkiIHNvIHRoZSBwYXJlbnRoZXNlcyBkb24ndCBkaXNhYmxlIHRoZSBnY2MKCXdhcm5pbmdzIGFib3V0ID0gdnMuID09LgoKMjAwMi0wMi0xMSAgamFjb2IgYmVya21hbiAgPGphY29iQHhpbWlhbi5jb20+CgoJKiBnbGliL2dtYXJrdXAuaCAoZ19tYXJrdXBfZXJyb3JfcXVhcmspOiBtYXRjaCB0aGUgc2lnbmF0dXJlIGluCgl0aGUgaW1wbGVtZW50YXRpb24KCjIwMDItMDItMTAgIEhhbnMgQnJldWVyICA8aGFuc0BicmV1ZXIub3JnPgoKCSogZ2xpYi9nZmlsZXV0aWxzLmMgOiBubyBzeW0gbGlua3Mgb24gd2luMzIsIG5vIGxzdGF0IGluIG1zdmNydAoKCSogdGVzdHMvbWFrZWZpbGUubXNjLmluIDogYWRkZWQgdXJpLXRlc3QKCjIwMDItMDItMDkgIERhcmluIEFkbGVyICA8ZGFyaW5AYmVudHNwb29uLmNvbT4KCgkqIGdsaWIvZ21hcmt1cC5jOiAoeG1sX2lzc3BhY2UpOiBOZXcuCgkoc2tpcF9zcGFjZXMpOiBnX3VuaWNoYXJfaXNzcGFjZSAtPiB4bWxfaXNzcGFjZQoJKiBnbGliL2dzdHJmdW5jcy5jOiAoZ19hc2NpaV9zdHJ0b2QpOiBpc3NwYWNlIC0+IGdfYXNjaWlfaXNzcGFjZQoJaXN4ZGlnaXQgLT4gZ19hc2NpaV9pc3hkaWdpdCwgaXNkaWdpdCAtPiBnX2FzY2lpX2lzZGlnaXQKCjIwMDItMDItMDkgIE1hdHRoaWFzIENsYXNlbiAgPG1hdHRoaWFzQGxvY2FsPgoKCSogdGVzdHMvbWFya3Vwcy92YWxpZC00LmdtYXJrdXA6IFRlc3QgYXR0cmlidXRlIHZhbHVlIGRlbGltaXRlcnMuCgoJKiBnbGliL2dtYXJrdXAuYyAoZ19tYXJrdXBfcGFyc2VfY29udGV4dF9wYXJzZSk6IFN1cHBvcnQgCgknIGFuZCAiIGFzIGF0dHJpYnV0ZSB2YWx1ZSBkZWxpbWl0ZXJzLiAgKCM3MDY3NykKCjIwMDItMDItMDkgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBjb25maWd1cmUuaW46IE1ha2UgLS1kaXNhYmxlLXRocmVhZHMgd29yayBhZ2Fpbi4gKCM3MTAzNCkKCkZyaSBGZWIgIDggMjM6NTI6MjcgMjAwMiAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnb2JqZWN0L2d2YWx1ZXRyYW5zZm9ybS5jOiBSZWdpc3RlciB0cmFuc2Zvcm1hdGlvbnMgZm9yCglnaW50NjQsIGd1aW50NjQuICgjNzA3ODAsIHBhdGNoIGZyb20gQW5keSBXaW5nbykKCgkqIGNvbmZpZ3VyZS5pbjogSGFuZGxlIG1pc3NpbmcgR19HSU5UNjRfRk9STUFULCAKCUdfR1VJTlQ2NF9GT1JNQVQgLi4uIGhhcmRlciB0byByZXF1aXJlIEdOVSBsaWJjIHRoYW4gR0NDLgoKCSogTkVXUzogU29tZSBjbGVhbnVwcyB0aGF0IEkgaGFkIHNldHRpbmcgYXJvdW5kLgoKMjAwMi0wMi0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBiZW50c3Bvb24uY29tPgoKCSogZ2xpYi9nY29udmVydC5oOiBNYWtlIGhvc3RuYW1lIHBhcmFtZXRlciBjb25zdCBjaGFyICouCgkqIGdsaWIvZ2NvbnZlcnQuYzogKGdfdW5lc2NhcGVfdXJpX3N0cmluZyk6IEFkZGVkIGEgbmV3CgkiQVNDSUkgbXVzdCBub3QgYmUgZXNjYXBlZCIgZmVhdHVyZSwgYW5kIHNvbWUgbWlzc2luZyBlcnJvcgoJY2hlY2tpbmcuCgkoaXNfZXNjYWxwaGFudW0pOiBOZXcuCgkoaXNfZXNjYWxwaGEpOiBOZXcuCgkoaG9zdG5hbWVfdmFsaWRhdGUpOiBOZXcuCgkoZ19maWxlbmFtZV9mcm9tX3VyaSk6IERvbid0IGFsbG93IGhvc3RuYW1lcyB0byBpbmNsdWRlCgllc2NhcGVkIEFTQ0lJLCB2YWxpZGF0ZSBob3N0bmFtZXMgd2l0aCB0aGUgbmV3Cglob3N0bmFtZV92YWxpZGF0ZS4KCShnX2ZpbGVuYW1lX3RvX3VyaSk6IFZhbGlkYXRlIGhvc3RuYW1lcyB3aXRoIHRoZSBuZXcKCWhvc3RuYW1lX3ZhbGlkYXRlLgoKCSogdGVzdHMvdXJpLXRlc3QuYzogVXBkYXRlZCB0ZXN0cyB0byByZWZsZWN0IHRoZSBob3N0bmFtZQoJdmFsaWRhdGlvbiBjaGFuZ2VzIGFib3ZlLgoKCSogZ2xpYi9nZGF0ZS5jOiAoZ19kYXRlX2ZpbGxfcGFyc2VfdG9rZW5zKTogUmVtb3ZlIHRoZQoJPGN0eXBlLmg+IGluY2x1ZGUgYW5kIGRvIGlzZGlnaXQgLT4gZ19hc2NpaV9pc2RpZ2l0LgoKRnJpIEZlYiAgOCAxMjozMjoxNCAyMDAyICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIHRlc3RzL2hhc2gtdGVzdC5jIChzZWNvbmRfaGFzaF90ZXN0KTogRml4IGFjY2VzcyB0bwoJZnJlZWQgbWVtb3J5IGluIHRlc3QgY2FzZSAoTWlyb3NsYXcgRG9icnphbnNraS1OZXVtYW5uKS4KCVJlLWVuYWJsZSBhbmQgZGVidWcgc29tZSBjb21tZW50ZWQgb3V0IGNvZGUuCgoyMDAyLTAyLTA4ICBNaWNoYWVsIE5hdHRlcmVyICA8bWl0Y2hAZ2ltcC5vcmc+CgoJKiBnbGliL2dkaXIuYzogZ19kaXJfb3BlbjogYWRkZWQgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoKSB0byBwcmV2ZW50Cgl1cyBmcm9tIGNhbGxpbmcgb3BlbmRpcihOVUxMKSAod2hpY2ggc2ltcGx5IGNyYXNoZXMpLgoKMjAwMi0wMi0wOCAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdsaWIvZ2ZpbGV1dGlscy5jIChnX2ZpbGVfdGVzdCk6IEV4dGVuZGVkIGRvY3VtZW50YXRpb24uCgoyMDAyLTAyLTA3ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ2xpYi9nZmlsZXV0aWxzLmMgKGdfZmlsZV90ZXN0KTogRG8gbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rcwoJZm9yIEdfRklMRV9URVNUX1NZTUxJTksuIEFsc28gZml4ZWQgdGhlIGNvcnJlY3QgIk9SIi1iZWhhdmlvdXIgZm9yCglHX0ZJTEVfVEVTVF9JU19FWEVDVVRBQkxFIGFuZCBHX0ZJTEVfVEVTVF9FWElTVFMuICgjNjAwNDgpCgoyMDAyLTAyLTA3ICBDaGFuZ3dvbyBSeXUgIDxjd3J5dUBkZWJpYW4ub3JnPgoKCSogY29uZmlndXJlLmluIChBTExfTElOR1VBUyk6IEFkZGVkICJrbyIuCgpXZWQgRmViICA2IDE0OjQ0OjE4IDIwMDIgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi9nbWFpbi5jIChnX21haW5fY29udGV4dF9wcmVwYXJlKTogSGFuZGxlIAoJTlVMTCBlbnRyaWVzIChhbHJlYWR5IGRpc3BhdGNoZWQpIGluIHBlbmRpbmdfZGlzcGF0Y2hlcyBhcnJheSAKCShwb2ludGVkIG91dCBieSBNYW5pc2ggU2luZ2gpCgpUdWUgRmViICA1IDE3OjEzOjAyIDIwMDIgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi9nbWFpbi5jIChnX21haW5fY29udGV4dF9wcmVwYXJlKTogVW5yZWYgcGVuZGluZwoJZGlzcGF0Y2hlcyB3aGVuIGRpc2NhcmRpbmcgdGhlbS4KCjIwMDItMDItMDQgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnbGliL2d0aHJlYWQuYyAoZ190aHJlYWRfY3JlYXRlX2Z1bGwpOiBEZWxheSBhbGxvY2F0aW9uIHVudGlsCglhZnRlciBhbGwgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKCkuCgoJKiBnbGliL2d0aHJlYWQuaDogTWFrZSBkZXB0aCBtZW1iZXIgZ3VpbnQgZm9yIGNvc21ldGljIHJlYXNvbnMuCgoJKiBnbGliL2d0aHJlYWQuYzogKGdfc3RhdGljX3JlY19tdXRleF91bmxvY2tfZnVsbCk6IGRlcHRoIHNob3VsZAoJYmUgdW5zaWduZWQuIEFsbCB0aGF0IHNwb3R0ZWQgYnkgSvZyZ2VuIFZpa3NlbGwKCTxqb3JnZW4udmlrc2VsbEB0ZWxpYS5jb20+CgoyMDAyLTAyLTAyICBNYW5pc2ggU2luZ2ggIDx5b3NoQGdpbXAub3JnPgoKCSogZ2xpYi9nbWFpbi5jCgkqIGdsaWIvZ3RyZWUuYzogcmVtb3ZlIHJlZmVyZW5jZXMgdG8gZGVwcmVjYXRlZCBmdW5jdGlvbnMgaW4gZG9jcwoJYW5kIHdhcm5pbmcgbWVzc2FnZS4KCjIwMDItMDEtMzEgIGphY29iIGJlcmttYW4gIDxqYWNvYkB4aW1pYW4uY29tPgoKCSogZ2xpYi1nZXR0ZXh0aXplLmluOgoJKiBtNG1hY3Jvcy9nbGliLWdldHRleHQubTQgKEFNX0dMSUJfR05VX0dFVFRFWFQpOiByZW1vdmUKCXJlZmVyZW5jZXMgdG8gcG8ydGJsCgoyMDAyLTAxLTI5ICBNYXR0aGlhcyBDbGFzZW4gIDxtYXR0aGlhc2NAcG9ldC5kZT4KCgkqIGdsaWIvZ21hcmt1cC5jIChnX21hcmt1cF9wYXJzZV9jb250ZXh0X3BhcnNlKTogQ2hhbmdlIHRoZQoJb3JkZXIgaW4gd2hpY2ggc29tZSBlcnJvciBjb25kaXRpb25zIGFyZSBjaGVja2VkIHRvIGltcHJvdmUKCWVycm9yIG1lc3NhZ2VzLiAoIzY5NjQ2KQoKVHVlIEphbiAyOSAxNTowNDozMSAyMDAyICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIDEuMy4xMwoKCSogdGVzdHMvc2hlbGwtdGVzdC5jOiBXb3JrYXJvdW5kIGZvciBNU1ZDIGJ1Z3MuCSgjNjEwNjQpCgpUdWUgSmFuIDI5IDE0OjA2OjIyIDIwMDIgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogTkVXUzogVXBkYXRlIHRvIGluY2x1ZGUgbGFzdCBjaGFuZ2UuIAoKMjAwMi0wMS0yMSAgSmVmZnJleSBTdGVkZmFzdCAgPGZlampAeGltaWFuLmNvbT4KCgkqIGdsaWIvZ2NvbnZlcnQuYyAob3Blbl9jb252ZXJ0ZXIpOiBSZXdyaXR0ZW4gdG8gY2FjaGUgaWNvbnYKCWNvbnZlcnNpb24gZGVzY3JpcHRvcnMuIE9uIGF0IGxlYXN0IHNvbWUgVW5peCBzeXN0ZW1zIGxpa2UKCVNvbGFyaXMsIGljb252X29wZW4oKSBtdXN0IGRsb3BlbiB0aGUgbmVjZXNzYXJ5IGNoYXJzZXQgbW9kdWxlcyBpbgoJb3JkZXIgdG8gc2V0dXAgdGhlIGRlc2NyaXB0b3IuIFRoaXMgY2FuIHRha2UgYSBtYWpvciB0b2xsIG9uCglwZXJmb3JtYWNlIGlmIHlvdSBhcmUgY29uc3RhbnRseSBvcGVuaW5nIGFuZCBjbG9zaW5nIGNvbnZlcnNpb24KCWRlc2NyaXB0b3JzIGZvciB0aGUgc2FtZSBjaGFyc2V0IGNvbnZlcnNpb25zIG92ZXIgYW5kIG92ZXIuCgkoZ19jb252ZXJ0X3dpdGhfZmFsbGJhY2spOiBVc2UgY2xvc2VfY29udmVydGVyKCkgcmF0aGVyIHRoYW4KCWdfaWNvbnZfY2xvc2UoKSBzaW5jZSBvcGVuX2NvbnZlcnRlcigpIG5vdyBjYWNoZXMgaWNvbnYKCWRlc2NyaXB0b3JzLgoKVHVlIEphbiAyOSAxMToxODo0NCAyMDAyICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIE5FV1M6IFVwZGF0ZWQuCgoJKiBjb25maWd1cmUuaW46IE1pY3JvID09IDEzLCBiaW5hcnkgYWdlLCBpbnRlcmZhY2UgYWdlIDAuCglbIGJpbmFyeSBicmVha2FnZSB3YXMgcmV0dXJuIHR5cGUgb2YgZ19zaWduYWxfY29ubmVjdF9vYmplY3QoKSwKCXByb2JhYmx5IGNvdWxkIGhhdmUgdXNlZCBiaW5hcnkgYWdlID09IDAsIGJ1dCBhIGxpdHRsZSBzYWZlciBub3QgdG8uXQoKCSogY29uZmlndXJlLmluOiBSZW1vdmUgY29uZmlndXJlIHdhcm5pbmcuCgoyMDAyLTAxLTI4ICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcG9ib3guY29tPgoKCSogZ2xpYi9nbWFya3VwLmMgKGFkZF9hdHRyaWJ1dGUpOiBOVUxMLXRlcm1pbmF0ZQoJY29udGV4dC0+YXR0cl92YWx1ZXMgc28gZ19zdHJmcmVldigpIGlzIHNhZmUuIAoJV291bGQgcHJldmlvdXNseSBjcmFzaCBpZiBwYXJzaW5nIHdhcyBlbmRlZCBwcmlvciAKCXRvIGVuZGluZyB0aGUgc3RhcnQgdGFnLgoJKGdfbWFya3VwX3BhcnNlX2NvbnRleHRfcGFyc2UpOiBhZGQgYSBjb3VwbGUgYXNzZXJ0aW9ucwoKMjAwMi0wMS0yOCAgSGF2b2MgUGVubmluZ3RvbiAgPGhwQHJlZGhhdC5jb20+CgoJKiBnbGliL2dtYWNyb3MuaDogZ2V0IHJpZCBvZiB3YXJuaW5nIGhlcmUKCk1vbiBKYW4gMjggMTc6NTY6MTAgMjAwMiAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbGliL2dtYWNyb3MuaDogT25seSB1c2UgX19GVU5DVElPTl9fLCBfX1BSRVRUWV9GVU5DVElPTl9fIGZvcgoJR19HTlVDX0ZVTkNUSU9OLCBHX0dOVUNfUFJFVFRZX0ZVTkNUSU9OLCBHX1NUUkxPQyB3aGVuIF9fR05VQ19fIDwKCTMsIHNpbmNlIGluIDMuMC4zIHRoZSBzZW1hbnRpY3Mgb2YgdGhlc2UgZnVuY3Rpb25zIHdlcmUgY2hhbmdlZCBpbgoJYW4gaW5jb21wYXRpYmxlIHdheS4gKCM2OTA5NykKCjIwMDItMDEtMjggIFJvbiBTdGVpbmtlICA8cnN0ZWlua2VAdy1saW5rLm5ldD4KCgkqIGdsaWIvZ2lvY2hhbm5lbC5jOiBTb21lIGRvY3VtZW50YXRpb24gZml4ZXMvZWxhYm9yYXRpb25zCglJIHJlYWxseSBzaG91bGQgaGF2ZSBnb3R0ZW4gaW4gYSBsb25nIHRpbWUgYWdvCgoyMDAyLTAxLTI0ICBTdmVuIE5ldW1hbm4gIDxzdmVuQGdpbXAub3JnPgoKCSogZ2xpYi9ndXRmOC5jIChnX3V0ZjhfdG9fdXRmMTYpOiByZW1vdmVkIGFuIGVtcHR5IGxpbmUgaW4gdGhlCglpbmxpbmUgZG9jdW1lbnRhdGlvbiB0aGF0IGNvbmZ1c2VkIGd0ay1kb2MuCgoyMDAyLTAxLTIzICBMYXN6bG8gUGV0ZXIgIDxsYWNhQGlyZWxhbmQuc3VuLmNvbT4KCgkqIGdsaWIvZ21lc3NhZ2VzLmMgKGdfcHJpbnRmX3N0cmluZ191cHBlcl9ib3VuZCk6IHJldHVybiAxIG1vcmUKCWZvciB0aGUgdHJhaWxpbmcgJ1wwJyB3aGVuIHVzaW5nIHZzbnByaW50Zi4gKCM2OTQ3NCkKCjIwMDItMDEtMjMgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ2xpYi9nY29udmVydC5jOiAoc3RyZHVwX2xlbik6IE5vdCB1c2VkIG9uIFdpbmRvd3MsIGRvbid0IGV2ZW4KCWNvbXBpbGUgaXQgdGhlbi4KCgkoYWNjZXB0YWJsZSk6IEltcHJvdmUgY29tbWVudHMgZm9yIHRoZSBfYWNjZXB0YWJsZV8gdGFibGU6IHB1dAoJZWFjaCBBU0NJSSBjaGFyIGFib3ZlIHRoZSBoZXggbnVtYmVyIGZvciBpdC4KCgkoZ19lc2NhcGVfZmlsZV91cmkpOiBPbiBXaW5kb3dzLCB0dXJuIGJhY2tzbGFzaGVzIGluIHRoZSBmaWxlIG5hbWUKCWludG8gcGxhaW4gKCJmb3J3YXJkIikgc2xhc2hlcy4KCgkoZ19maWxlbmFtZV9mcm9tX3VyaSk6IE9uIFdpbmRvd3MsIGRvbid0IHJldHVybiB0aGUgaG9zdG5hbWUKCSJsb2NhbGhvc3QiLCBiZWNhdXNlIHdlIGNhbiBub3QgYmUgMTAwJSBzdXJlIGl0IHdpbGwgYmUgcmVjb2duaXplZAoJaW4gYWxsIGNhc2VzIGFueXdheSwgc28gc2ltcGxlciB0byB0dXJuIGl0IGludG8gYSBudWxsCglob3N0bmFtZS4gCgoJQ2hhbmdlIHNsYXNoZXMgaW4gdGhlIGZpbGVuYW1lIGludG8gYmFja3NsYXNoZXMsIGFzIHRoYXQgaXMgdGhlCgltb3JlIGNhbm9uaWNhbCBzZXBhcmF0b3IuCgoJUmVjb2duaXplIGRyaXZlIGxldHRlcnMgKGVpdGhlciBmb2xsb3dlZCBieSBhIGNvbG9uIG9yIGEgdmVydGljYWwKCWJhciwgYXMgdXNlZCBieSBzb21lIGJyb3dzZXJzKSwgYW5kIGlmIHRoZSBmaWxlbmFtZSBwYXJ0IHN0YXJ0cwoJd2l0aCBhIHN1Y2gsIGRvbid0IGluY2x1ZGUgYW55IChiYWNrKXNsYXNoLgoKCURvbid0IGRyb3AgYW55IGV4dHJhIGxlYWRpbmcgc2xhc2ggaW4gdGhlIGZpbGVuYW1lIG9uIFVuaXguCgoJKGdfZmlsZW5hbWVfdG9fdXJpKTogT24gV2luZG93cywgaWYgdGhlIGhvc3RuYW1lIGlzICJsb2NhbGhvc3QiLAoJZG9uJ3QgdXNlIGl0LCBmb3IgY29uc2lzdGVuY3kgd2l0aCBnX2ZpbGVuYW1lX2Zyb21fdXJpKCkuCgkKCSogdGVzdHMvdXJpLXRlc3QuYzogQ2hhbmdlIGFjY29yZGluZ2x5LCBzbyB0aGF0IGFsbCB0ZXN0cyBwYXNzIG9uCglXaW5kb3dzLiBVbml4LCB0b28sIEkgaG9wZSwgdGhvdWdoIEkgY291bGRuJ3QgY2hlY2sgdGhhdCBub3cuCgoJKG1haW4pOiBVbnNldCB0aGUgR19CUk9LRU5fRklMRU5BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlIG9uIFVuaXgsCglhcyBzb21lIHRlc3RzIHJlcXVpcmUgdGhhdCBmaWxlbmFtZXMgYXJlIGluIFVURi04LiBJcyB1bnNldGVudigpCglwb3J0YWJsZT8KCglUaGVzZSBjaGFuZ2VzIHNob3VsZCBmaXggYnVncyAjNTkzODcsICM1OTY1MiwgIzU5NjU3IGFuZCAjNTk2NTguCgkKMjAwMi0wMS0yMiAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogR2V0IHRoZSByaWdodCBtdWx0aXRocmVhZCBvcHRpb24gZm9yIEdDQyAzLjAgYW5kCglsYXRlciBvbiBBSVguICgjNjc1ODMpCgoyMDAyLTAxLTIxICBKZWZmcmV5IFN0ZWRmYXN0ICA8ZmVqakB4aW1pYW4uY29tPgoKCSogZ2xpYi9nY29udmVydC5jIChnX2NvbnZlcnRfd2l0aF9mYWxsYmFjayk6IElmIGdfY29udmVydCBmYWlscywKCXNldCBieXRlc193cml0dGVuIHRvIDAgYW5kIGNsb3NlIHRoZSBpY29udiBkZXNjcmlwdG9yIHRoYXQgd2FzCglvcGVuZWQgYSBmZXcgbGluZXMgYWJvdmUuIE9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4sIGNhbGN1bGF0ZQoJYnl0ZXNfd3JpdHRlbiB0byBiZSBvdXRwIC0gZGVzdCBpbnN0ZWFkIG9mIG91dHAgLSBzdHIuCgoyMDAyLTAxLTE2ICBTdmVuIE5ldW1hbm4gIDxzdmVuQGdpbXAub3JnPgoKCSogYWNpbmNsdWRlLm00CgkqIG00bWFjcm9zL2dsaWItZ2V0dGV4dC5tNDogcmVtb3ZlZCB0aGUgLS1kaXNhYmxlLW5scyBvcHRpb24uIFlvdQoJY2FuJ3QgZGlzYWJsZSBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydCBzaW5jZSB3ZSByZWx5IG9uIGl0LgoKCSogY29uZmlndXJlLmluOiBuaWNlciAtLWhlbHAgb3V0cHV0LgoKVHVlIEphbiAgOCAxMTozMzoyOCAyMDAyICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGRvY3MvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgdGV4dCBmaWxlcyB0byBFWFRSQV9ESVNULgoJKCM2ODIzOSwgTWF0dGhpYXMgQ2xhc2VuKQoKMjAwMi0wMS0wNyAgWmJpZ25pZXcgQ2h5bGEgIDxjeWJhQGdub21lLnBsPgoKCSogY29uZmlndXJlLmluIChBTExfTElOR1VBUyk6IEFkZGVkIHBsLgoKMjAwMi0wMS0wNSAgSGFucyBCcmV1ZXIgIDxoYW5zQGJyZXVlci5vcmc+CgoJKiBnbGliY29uZmlnLmgud2luMzIuaW4gCgkgIG1zdmNfcmVjb21tZW5kZWRfcHJhZ21hcy5oIChuZXcgZmlsZSkgOiBtb3ZlZCB3YXJuaW5nIHRvCgllcnJvciBwcmFnbWFzIHRvIHRoZWlyIG93biBmaWxlIHRvIG5vdCBmb3JjZSAnZ29vZCBwcmFjdGljZScKCXByb2dyYW1taW5nIGluIGRvd25zdHJlYW0gbGlicyBhbmQgYXBwcy4gSW5zdGVhZCB0aGUgbmV3IGhlYWRlcgoJd2lsbCBiZSB1c2VkIGJ5IC1GSW1zdmNfcmVjb21tZW5kZWRfcHJhZ21hcy5oIGluIGdub21lL2N2cwoJbWFrZWZpbGUubXNjCgkqICovbWFrZWZpbGUubXNjLmluIDogdXNlIC1GSW1zdmNfcmVjb21tZW5kZWRfcHJhZ21hcy5oCgoJKiBtYWtlZmlsZS5hbSA6IGFkZCBtc3ZjX3JlY29tbWVuZGVkX3ByYWdtYXMuaCB0byBFWFRSQV9ESVNUCgoyMDAxLTEyLTMxICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdsaWIvZ3V0aWxzLmMgKGdfZ2V0X2FueV9pbml0KTogKFdpbjMyKSBVc2UgbG9uZ2VyIGJ1ZmZlciBmb3IKCXVzZXIgbmFtZS4KClNhdCBEZWMgMjkgMTU6MDc6MjEgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbGliL2dzcGF3bi5jIChzY3JpcHRfZXhlY3V0ZSk6IENvcHkgdHJhaWxpbmcgTlVMTAoJaW50byBuZXcgQVJHViBhcnJheS4gKCM2NzY3MykKCjIwMDEtMTItMjggIFN2ZW4gTmV1bWFubiAgPHN2ZW5AZ2ltcC5vcmc+CgoJKiBnbGliL2dtZXNzYWdlcy5jOiBvbmx5IGluY2x1ZGUgcHJpbnRmX3N0cmluZ191cHBlcl9ib3VuZCgpIGlmCglIQVZFX0M5OV9WU05QUklOVEYgaXMgbm90IGRlZmluZWQuCgoyMDAxLTEyLTI3ICBEdWFydGUgTG9yZXRvIDxoYXBweWd1eV9wdEBob3RtYWlsLmNvbT4KCiAgICAgICAgKiBjb25maWd1cmUuaW46IEFkZGVkIHBvcnR1Z3Vlc2UgdG8gQUxMX0xJTkdVQVMKClNhdCBEZWMgMjIgMTI6MDg6NTYgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuaW46IDEuMy4xMiwgYmluYXJ5LCBpbnRlcmZhY2UgYWdlIDAuCgoJKiBORVdTOiBVcGRhdGVkLgoKMjAwMS0xMi0yMSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBjb25maWcuaC53aW4zMi5pbjogQWRkICh1bmRlZmluZWQpIEhBVkVfQzk5X1ZTTlBSSU5URi4KCgkqIGdsaWJjb25maWcuaC53aW4zMi5pbjogQWRkIGRlZmluaXRpb24gb2YgR19IQVZFX0dST1dJTkdfU1RBQ0suCgoJKiB0ZXN0cy9NYWtlZmlsZS5hbTogUmVuYW1lIHRoZSBwcm9nc19MREFERCwgdGhyZWFkX0xEQUREIGFuZAoJbW9kdWxlX0xEQUREIE1ha2UgbWFjcm9zIHRvIHByb2dzX2xkYWRkLCB0aHJlYWRfbGRhZGQgYW5kCgltb2R1bGVfbGRhZGQuIE5ld2VyIGF1dG9tYWtlcyByZXNlcnZlIG1hY3JvcyBuYW1lZCAqX0xEQUREIGZvcgoJdGhlIHVzZSBhcyBMREFERHMgZm9yIHRhcmdldHMgaXQga25vd3MuCgoJKiBnbGliL2dpb3dpbjMyLmM6IChzdHJ1Y3QgX0dJT1dpbjMyV2F0Y2gpOiAnY2FsbGJhY2snIHdhc24ndCB1c2VkCgloZXJlLCBlaXRoZXIuCgoyMDAxLTEyLTIxICBNYXR0aGlhcyBDbGFzZW4gIDxtYXR0aGlhc2NAcG9ldC5kZT4KCgkqIGdsaWIvZ2ZpbGV1dGlscy5jIChnX2ZpbGVfZ2V0X2NvbnRlbnRzKTogUmVtb3ZlIEZJWE1FLiAoIzY3MDYzKQoKMjAwMS0xMi0xOSAgTWFyayBNY0xvdWdobGluICA8bWFya0Bza3luZXQuaWU+CgoJKiBnbGliL2dzY2FubmVyLmM6IChnX3NjYW5uZXJfdW5leHBfdG9rZW4pOiBmaXggc2VnZmF1bHRzLgoKMjAwMS0xMi0yMCAgTWljaGFlbCBNZWVrcyAgPG1pY2hhZWxAeGltaWFuLmNvbT4KCgkqIGdsaWIvZ2lvdW5peC5jIChzdHJ1Y3QgX0dJT1VuaXhXYXRjaCk6IGtpbGwgJ2NhbGxiYWNrJwoKV2VkIERlYyAxOSAyMzowOTowNyAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ2NvbnZlcnQuYyAoZ19pY29udl9vcGVuKTogU0dNTCBkb2MgZml4LgoKVHVlIERlYyAxOCAyMToxMToxMCAyMDAxICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBjb25maWd1cmUuaW46IGFkZCBjb25maWd1cmUgY2hlY2sgdG8gZGV0ZXJtaW5lIEdfSEFWRV9HUk9XSU5HX1NUQUNLLgoKMjAwMS0xMi0xNiAgSGF2b2MgUGVubmluZ3RvbiAgPGhwQHBvYm94LmNvbT4KCgkqIGdsaWIvZ2ZpbGV1dGlscy5jIChnZXRfY29udGVudHNfcmVnZmlsZSk6IHVzZSBnX3RyeV9tYWxsb2MgYW5kCglyZXR1cm4gZXJyb3Igb24gbm90LWVub3VnaC1tZW1vcnkKCShnZXRfY29udGVudHNfc3RkaW8pOiBkaXR0bwoKMjAwMS0xMi0xNyAgTWF0dGhpYXMgQ2xhc2VuICA8bWF0dGhpYXNjQHBvZXQuZGU+CgoJKiBnbGliL2dzcGF3bi5jLCBnbGliL2dzcGF3bi13aW4zMi5jOiBVc2UgPGVudmFyPiwgbm90IDxlbnZ2YXI+LgoKMjAwMS0xMi0xNSAgTWF0dGhpYXMgQ2xhc2VuICA8bWF0dGhpYXNjQHBvZXQuZGU+CgoJKiBnbGliL2dzaGVsbC5jLCBnbGliL2dzcGF3bi5jLCBnbGliL2dzcGF3bi13aW4zMi5jLCBnbGliL2dlcnJvci5jLAoJZ2xpYi9nZmlsZXV0aWxzLmMsIGdsaWIvZ2hhc2guYywgZ2xpYi9nbWFpbi5jLCBnbGliL2dhc3luY3F1ZXVlLmMsCglnbGliL2d0cmVlLmM6IE1pbm9yIG1hcmt1cCBmaXhlcy4KCjIwMDEtMTItMTQgIEhhdm9jIFBlbm5pbmd0b24gIDxocEBwb2JveC5jb20+CgoJKiBnbGliL2dzaGVsbC5jIChnX3NoZWxsX3BhcnNlX2FyZ3YpOiBub3RlIG9uIGhvdyB0byBmcmVlIHJldHVybmVkCgl2ZWN0b3IKCjIwMDEtMTItMDggIEhhdm9jIFBlbm5pbmd0b24gIDxocEBwb2JveC5jb20+CgoJKiBnbGliL2dzcGF3bi5jIChmb3JrX2V4ZWNfd2l0aF9waXBlcyk6IGluY2x1ZGUgYXJndlswXSBpbiBlcnJvcgoJbWVzc2FnZSBhYm91dCBmYWlsdXJlIHRvIGV4ZWMKCjIwMDEtMTItMTMgIE1hdHRoaWFzIENsYXNlbiAgPG1hdHRoaWFzY0Bwb2V0LmRlPgoKCSogZ2xpYi9nY29udmVydC5jLCBnbGliL2dpb2NoYW5uZWwuYywgZ2xpYi9nbWFpbi5jLAoJZ2xpYi9nd2luMzIuYzogUmV2ZXJ0IG1pc3Rha2VuIGNoYW5nZTogaXQgaXMgVU5JWCwgbm90IFVuaXguCgpUaHUgRGVjIDEzIDA1OjM3OjUxIDIwMDEgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdsaWIvZ2JzZWFyY2hhcnJheS5baGNdOiBBUEkgcmV2YW1wIHRvIHNob3J0ZW4gR1ZhbHVlQXJyYXkKCXN0cnVjdHVyZS4KCjIwMDEtMTItMTIgIE1hdHRoaWFzIENsYXNlbiAgPG1hdHRoaWFzY0Bwb2V0LmRlPgoKCVRoaXMgZml4ZXMgIzYwNTQzOgoKCSogZ2xpYi9ndXRpbHMuYyAoZ19zbnByaW50ZiwgZ192c25wcmludGYpOiBTd2l0Y2ggdG8gQzk5LVt2XXNucHJpbnRmKCkuCgoJKiB0ZXN0cy9zdHJmdW5jLXRlc3QuYzogQWRkIHNvbWUgdGVzdHMgZm9yIGdfc25wcmludGYoKS4KCjIwMDEtMTItMTIgIE1hdHRoaWFzIENsYXNlbiAgPG1hdHRoaWFzY0Bwb2V0LmRlPgoKCSogZ2xpYi9nY29udmVydC5jLCBnbGliL2dyYW5kLmMsIGdsaWIvZ2hhc2guYywKCWdsaWIvZ3RocmVhZHBvb2wuYywgZ2xpYi9ndHJlZS5jOiBEb2N1bWVudGF0aW9uIGZpeGVzLgoKTW9uIERlYyAxMCAxNDowODozOSAyMDAxICBIaWRlVG9zaGkgVGFqaW1hICA8aGlkZXRvc2hpLnRhamltYUBzdW4uY29tPgoKCSogZ2xpYi9saWJjaGFyc2V0L2NvbmZpZy5jaGFyc2V0IChvcyk6CglhZGQgSVNPODg1OS0zIGZvciBTb2xhcmlzLiAoIzY2MTc0KQoJCjIwMDEtMTItMTAgIFN2ZW4gTmV1bWFubiAgPHN2ZW5AZ2ltcC5vcmc+CgoJKiBnb2JqZWN0L2d2YWx1ZS5jIChnX3ZhbHVlX3JlZ2lzdGVyX3RyYW5zZm9ybV9mdW5jKTogcGVyZm9ybSBhbiBleGFjdAoJbWF0Y2ggb24gdGhlIHR3byB0eXBlcyBpbnN0ZWFkIG9mIHVzaW5nIHRyYW5zZm9ybV9mdW5jX2xvb2t1cCgpLgoKMjAwMS0xMi0wOSAgQ2hyaXN0b3BoZXIgQmxpenphcmQgIDxibGl6emFyZEByZWRoYXQuY29tPgoKCSogZ2xpYi9nbWVzc2FnZXMuaDogQWRkIHByYWdtYSB0aGF0IHdpbGwgcHJldmVudCB3YXJuaW5ncyB3aGVuIHlvdQoJYXJlIG5vdCB1c2luZyAtc3RkPTk5IGFuZCBuZXdlciBnY2MgY29tcGlsZXJzLiAgUGF0Y2ggZnJvbSBSZWQKCUhhdCdzIGd0aysgMS4yIHJwbS4KCjIwMDEtMTItMDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYmVudHNwb29uLmNvbT4KCgkqIGdsaWIvZ21hY3Jvcy5oOiBEbyB0aGUgc2FtZSBmb3IgInB1cmUiLgoKMjAwMS0xMi0wNiAgTWF0dGhpYXMgQ2xhc2VuICA8bWF0dGhpYXNjQHBvZXQuZGU+CgoJVGhlIGZvbGxvd2luZyBwYXRjaCBjb3JyZWN0cyBzb21lIGZ1bmN0aW9uIGF0dHJpYnV0ZXMuICgjNjE3ODApCgoJKiBnbGliL2doYXNoLmggKGdfaW50X2VxdWFsLCBnX2ludF9oYXNoKTogVGhlc2UgYXJlIG5vdCBjb25zdC4KCgkqIGdsaWIvZ2xpYmludGwuaCAoX2dsaWJfZ2V0dGV4dCk6IEFkZCBHX0dOVUNfRk9STUFUKDEpLgoKCSogZ2xpYi9nbWFjcm9zLmg6IFVzZSByZXNlcnZlZCBzeW1ib2xzIGluIGZ1bmN0aW9uIGF0dHJpYnV0ZSBtYWNyb3MuCgoyMDAxLTEyLTA2ICBNYXR0aGlhcyBDbGFzZW4gIDxtYXR0aGlhc2NAcG9ldC5kZT4KCglUaGUgZm9sbG93aW5nIHBhdGNoIGF2b2lkcyBtYW51YWwgcHJpbnRmKCktZm9ybWF0IHBhcnNpbmcgCglpZiBhIEM5OS1jb25mb3JtaW5nIHZzbnByaW50ZigpIGlzIGF2YWlsYWJsZS4gKCM1NTEwNikKCgkqIGFjaW5jbHVkZS5tNCAoQUNfRlVOQ19WU05QUklOVEZfQzk5KTogTmV3IG1hY3JvIHRvIHRlc3QgZm9yIGEKCUM5OSBjb25mb3JtaW5nIHZzbnByaW50Zi4KCgkqIGNvbmZpZ3VyZS5pbjogVXNlIEFDX0ZVTkNfVlNOUFJJTlRGX0M5OS4gCgoJKiBnbGliL2dtZXNzYWdlcy5jIChnX3ByaW50Zl9zdHJpbmdfdXBwZXJfYm91bmQpOiBVc2UgQzk5IHZzbnByaW50ZigpLgoJCjIwMDEtMTItMDUgIFN2ZW4gTmV1bWFubiAgPHN2ZW5AZ2ltcC5vcmc+CgoJKiBnbGliL2d0cmVlLmMgKGdfdHJlZV9mb3JlYWNoKTogbWVudGlvbiB0aGUgZmFjdCB0aGF0IHRoZSB0cmVlIGlzCgl0cmF2ZXJzZWQgaW4gc29ydGVkIG9yZGVyLgoKMjAwMS0xMi0wMyAgTWFuaXNoIFNpbmdoICA8eW9zaEBnaW1wLm9yZz4KCgkqIHRlc3RzL21vZHVsZS10ZXN0LmM6IGdfbW9kdWxlX3N5bWJvbCB0YWtlcyBhIGdwb2ludGVyICosIG5vdCBqdXN0CglhIGdwb2ludGVyCgoJKiB0ZXN0cy9saWJtb2R1bGV0ZXN0cGx1Z2luX2EuYzogaGVyZSB0b28KCjIwMDEtMTEtMjkgIEhhdm9jIFBlbm5pbmd0b24gIDxocEByZWRoYXQuY29tPgoKCSogZ2xpYi9ndHJlZS5jIChnX3RyZWVfZm9yZWFjaCk6CgkqIGdsaWIvZ2hhc2guYyAoZ19oYXNoX3RhYmxlX2ZvcmVhY2gpOiAKCglBZGQgbm90ZXMgYWJvdXQgaG93IHlvdSBzaG91bGRuJ3QgbW9kaWZ5IHRoZXNlIGRhdGEgc3RydWN0dXJlcyBhcwoJeW91IGl0ZXJhdGUgb3ZlciB0aGVtLgoJClRodSBOb3YgMjkgMTE6MTY6MDMgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBIQUNLSU5HOiBVcGRhdGUgKCM2NTcyMSwgRGF2ZSBOZWFyeSkKCjIwMDEtMTEtMjggIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnbGliL2dkYXRlLmM6IEZpeGVkIHdyb25nIG9yZGVyIGluIGNvbnZlcnNpb24uCgpXZWQgTm92IDI4IDE4OjM0OjIyIDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi9nbWFpbi5bY2hdOiBSZW5hbWUgKHByaXZhdGUpIEdTb3VyY2UuaWQgYW5kIAoJaWQgcGFyYW1ldGVyIHRvIGdfbWFpbl9jb250ZXh0X2ZpbmRfc291cmNlX2J5X2lkKCkKCXRvIGF2b2lkIHByb2JsZW1zIHdpdGggT2JqZWN0aXZlIEMgd2hlcmUgJ2lkJyBpcyAKCWEga2V5d29yZC4gKCM2NTYxNikKCjIwMDEtMTEtMjggIERhbmllbCBFbHN0bmVyICA8ZGFuaWVsLmVsc3RuZXJAZ214Lm5ldD4KCgkqIGdsaWIvZ3V0ZjguYyAodXRmOF9za2lwX2RhdGEpOiBJbiBvcmRlciB0byBhdm9pZCBpbmZpbml0ZSBsb29wcwoJb24gaW52YWxpZCBVVEYtOCBzdHJpbmdzLCBjaGFuZ2UgdGhlIHNraXAgY291bnQgZm9yIDB4ZmUgYW5kIDB4ZmYKCWZyb20gMCB0byAxLgoKMjAwMS0xMS0yOCAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogQWx3YXlzIGNhbGwgR0xJQl9TSVpFT0YoLi4uLCBzeXN0ZW1fdGhyZWFkKS4gRml4ZXMKCSM2NTYyNC4KCjIwMDEtMTEtMjggIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ2xpYmNvbmZpZy5oLndpbjMyLmluOiBBZGQgR0xJQl9TSVpFT0ZfU0laRV9UIGhlcmUsIHRvby4KCjIwMDEtMTEtMjcgIERhbiBXaW5zaGlwICA8ZGFud0B4aW1pYW4uY29tPgoKCSogY29uZmlndXJlLmluIChHX01PRFVMRV9MREZMQUdTKTogU2V0IHRoaXMgZnJvbSBsaWJ0b29sIHJhdGhlcgoJdGhhbiBoYXJkY29kaW5nIHZhbHVlcyBmb3IgY2VydGFpbiBwbGF0Zm9ybXMuCgoJKiBnbGliL2xpYmNoYXJzZXQvY29uZmlnLmNoYXJzZXQ6IEFkZCBhIHJ1bGUgZm9yIE5ldEJTRC4KCgkqIGdsaWIvbGliY2hhcnNldC9sb2NhbGNoYXJzZXQuYyAoX2dfbG9jYWxlX2dldF9jaGFyc2V0X2FsaWFzZXMpOgoJSWYgTElCQ0hBUlNFVF9BTElBU19ESVIgaXMgc2V0LCBsb29rIGZvciBjaGFyc2V0LmFsaWFzZXMgdGhlcmUuCgoJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoVEVTVFNfRU5WSVJPTk1FTlQpOiBzZXQgTElCQ0hBUlNFVF9BTElBU19ESVIKCXNvIHdlIGRvbid0IGRlcGVuZCBvbiBjaGFyc2V0LmFsaWFzZXMgaGF2aW5nIGJlZW4gaW5zdGFsbGVkCgoyMDAxLTExLTI2ICBNYXR0aGlhcyBDbGFzZW4gIDxtYXR0aGlhc2NAcG9ldC5kZT4KCQoJKiBnbGliL2dub2RlLmMgKGdfbm9kZV90cmF2ZXJzZSk6IEltcGxlbWVudCBHX0xFVkVMX09SREVSIGNvcnJlY3RseS4KCgkqIHRlc3RzL25vZGUtdGVzdC5jOiBBZGQgYSB0ZXN0Y2FzZSBmb3IgR19MRVZFTF9PUkRFUiBpbXBsZW1lbnRhdGlvbi4KCgkqIGdsaWIvZ3RyZWUuaDogTWFyayBnX3RyZWVfdHJhdmVyc2UoKSBhcyBkZXByZWNhdGVkLiAoIzY1MzQzKQoJCgkqIGdsaWIvZ3RyZWUuYyAoZ190cmVlX3RyYXZlcnNlKTogRXhwbGFpbiB0aGUgZGVwcmVjYXRpb24gaW4gCglzb21lIGRldGFpbC4KCk1vbiBOb3YgMjYgMDk6NDI6MjQgMjAwMSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogY29uZmlndXJlLmluOiBwcm92aWRlIEdMSUJfU0laRU9GX1NJWkVfVC4KCjIwMDEtMTEtMjYgIEplc3VzIEJyYXZvIEFsdmFyZXogIDxqYmFAcG9ib3guY29tPgoKCSogY29uZmlndXJlLmluOiBBZGRlZCBnbCAoR2FsaWNpYW4pIHRvIEFMTF9MSU5HVUFTCgoyMDAxLTExLTIzICBIYW5zIEJyZXVlciAgPGhhbnNAYnJldWVyLm9yZz4KCgkqIGdsaWIvbWFrZWZpbGUubXNjLmluIDogYWRkZWQgLVptNDAwIHRvIERFUENGTEFHUyB0byBhdm9pZCA6CglndW5pZGVjb21wLmgoNTg0NikgOiBmYXRhbCBlcnJvciBDMTA3NjogY29tcGlsZXIgbGltaXQgOiAKCWludGVybmFsIGhlYXAgbGltaXQgcmVhY2hlZDsgdXNlIC9abSB0byBzcGVjaWZ5IGEgaGlnaGVyIGxpbWl0CgoJKiBnbGliY29uZmlnLmgud2luMzIuaW4gOiBhZGRlZCByZWNvbW1lbmRlZCBwcmFnbWEgbGlzdCBmb3IKCW1zdmMgYWdhaW4uIFRoZXkgYXJlIGFuIGludmFsdWFibGUgaGVscCBvZiBsZXR0aW5nIHRoZQoJY29tcGlsZXIgY2F0Y2ggYnVncy4KClRodSBOb3YgMjIgMTM6NTY6NTUgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBWZXJzaW9uIDEuMy4xMQoKVGh1IE5vdiAyMiAxMzoxNDoxOCAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoR0xJQl9NSUNST19WRVJTSU9OKTogVmVyc2lvbiAxMSwgCglpbnRlcmZhY2UsIGJpbmFyeSBhZ2UgMC4KCgkqIE5FV1M6IFVwZGF0ZWQuCgogCSogdGVzdHMvTWFrZWZpbGUuYW0gKGxpYm1vZHVsZXRlc3RwbHVnaW5fW2FiXV9sYV9MREZMQUdTKTogCiAJQWRkIGR1bW15IC1ycGF0aCBhcmd1bWVudC4gT24gc29tZSAoYnV0IG5vdCBhbGwpIHBsYXRmb3JtcywKIAlsaWJ0b29sIHdpbGwgb25seSBidWlsZCBhIGNvbnZlbmllbmNlIGxpYnJhcnkgd2l0aG91dCB0aGlzLgogCSgjNjM0ODYsIERhbiBXaW5zaGlwKQogCgkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIFJFQURNRS5pbiwgSU5TVEFMTC5pbiAtIAoJYXV0b2NvbmYtMi41eCBjaGVja3MgZm9yICdtYWtlIGRpc3QnIGluIHRoZSB0YXJiYWxsCgl3aGVuIHlvdSBtYWtlIGRpc3RjaGVjay4KCgkqIGdsaWIvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBEaXN0cmlidXRlIAoJbWFrZWZpbGUubXNjL21pbmd3LmluLCBnbGliLnJjLmluLgoKCSogdGVzdHMvcGF0dGVybnRlc3QuYzogSW5jbHVkZSBzdHJpbmcuaC4KCgkqIGdsaWIvZ3BhdHRlcm4uYyAoZ191dGY4X3JldmVyc2UpOiBkb2MgcGFyc2luZyBmaXguCgpUaHUgTm92IDIyIDAyOjUwOjE4IDIwMDEgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIE5FV1M6IG1lcmdlZCB3aXRoIGdvYmplY3QvTkVXUy4KCjIwMDEtMTEtMjEgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ2xpYi9tYWtlZmlsZS5taW5ndy5pbiAoREVGSU5FUyk6IFNldCBHX0xPR19ET01BSU4gYXMgaW4KCU1ha2VmaWxlLmFtLgoKVHVlIE5vdiAyMCAyMDo1NDoyNSAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ3VuaWRlY29tcC5bY2hdIGdsaWIvZ2VuLXVuaWNvZGUtdGFibGVzLnBsOiBQYXRjaAoJZnJvbSBBbmRyZXcgVGF5bG9yIHRvIG9wdGltaXplIHRoZSBkZWNvbXBvc2l0aW9uIHRhYmxlCgl0byBlbGltaW5hdGUgcmVsb2NhdGlvbnMgYW5kIHNhdmUgc3BhY2UuICgjNjQ5ODIpCgoyMDAxLTExLTE4ICBIYW5zIEJyZXVlciAgPGhhbnNAYnJldWVyLm9yZz4KCgkqIGdsaWIvZ2xpYi5kZWYgOiAKCSogZ2xpYi9tYWtlZmlsZS5tc2MuaW4gOiByZW1vdmUgZ19sb2dfZG9tYWluX2dsaWIgdXNhZ2UvZXhwb3J0CgoJKiB0ZXN0cy9tYWtlZmlsZS5tc2MuaW4gOiBhZGQgaW9jaGFubmVsLXRlc3QKClNhdCBOb3YgMTcgMTc6MjE6NTcgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbGliL01ha2VmaWxlLmFtIGdsaWIvKi5jIGdsaWIvZ21lc3NhZ2VzLmg6IEdldAoJcmlkIG9mIGdfbG9nX2RvbWFpbl9nbGliIHZhcmlhYmxlIGluIGZhdm9yIG9mIGp1c3QKCXVzaW5nIGEgc3RyaW5nIGNvbnN0YW50LgoKU2F0IE5vdiAxNyAxNDoxMDozNSAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ2JzZWFyY2hhcnJheS5oOiBJbmNsdWRlIGd0eXBlcy5oIG5vdCBnb2JqZWN0L2d0eXBlLmgKCgkqIGdsaWIvZ2xpYi1vYmplY3QuaCBnb2JqZWN0LyouaDogUHJldmVudCBoZWFkZXJzIGZyb20KCWJlaW5nIGluY2x1ZGVkIGRpcmVjdGx5IGV4Y2VwdCB3aGVuIGNvbXBpbGluZyBHT2JqZWN0LgoKCSogZ29iamVjdC9ndmFsdWVjb2xsZWN0b3IuaDogSW5jbHVkZSBnbGliLW9iamVjdC5oIHNvIHRoYXQKCXRoaXMgZmlsZSBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHksIHNpbmNlIHdlIGRvbid0CglpbmNsdWRlIGl0IF9mcm9tXyBnbGliLW9iamVjdC5oLgoKCSogZ29iamVjdC9ndHlwZS5jOiBSZW1vdmUgc3RydWN0IF9HVmFsdWUgaGFjayBzaW5jZSB3ZSAKCW5vdyBpbmNsdWRlIGdsaWIvZ3ZhbHVlY29sbGVjdG9yLmggd2hpY2ggc2ltcGx5IHB1bGxzIGluCglnbGliLW9iamVjdC5oLgoKMjAwMS0xMS0xNSAgTWF0dGhpYXMgQ2xhc2VuICA8bWF0dGhpYXNjQHBvZXQuZGU+CgoJKiBnbGliL2dpb2NoYW5uZWwuYzogRG9jdW1lbnRhdGlvbiBmaXhlcy4KIAoyMDAxLTExLTE1ICBUYWtheXVraSBLVVNBTk8gIDxBRTVULUtTTkBhc2FoaS1uZXQub3IuanA+CgoJKiBjb25maWd1cmUuaW46IEFkZGVkICJqYSIgdG8gQUxMX0xJTkdVQVMuCgoyMDAxLTExLTE1ICBNaWNoYWVsIE1lZWtzICA8bWljaGFlbEB4aW1pYW4uY29tPgoKCSogZ2xpYi9naW91bml4LmMgKGdfaW9fY2hhbm5lbF91bml4X25ldyk6IHNldCB0aGUgZmQKCWJlZm9yZSB1c2luZyBpdC4KCjIwMDEtMTEtMTUgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogdGVzdHMvbWFrZWZpbGUue21pbmd3LG1zY30uaW4gKFRFU1RTKTogQWRkIGJhY2sgbWFpbmxvb3AtdGVzdAoJaGVyZSwgdG9vLgoKCSogdGVzdHMvTWFrZWZpbGUuYW06IFJlbW92ZSBsZWZ0b3ZlciBjb21tZW50IHRoYXQgY2xhaW1lZAoJbWFpbmxvb3AtdGVzdCBpcyByZW1vdmVkLgoKMjAwMS0xMS0xNCAgTWF0dGhpYXMgQ2xhc2VuICA8bWF0dGhpYXNjQHBvZXQuZGU+CgoJKiBnbGliL2dwYXR0ZXJuLmM6IGFkZCBVVEYtOCBzdXBwb3J0LgoKCSogdGVzdHMvcGF0dGVybnRlc3QuYzogYWRkIFVURi04IGFuZCBlcXVhbGl0eSB0ZXN0cy4KCldlZCBOb3YgMTQgMDc6MzQ6MjQgMjAwMSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ2xpYi9nYWxsb2NhLmggKGdfbmV3YSk6IHByb3ZpZGUgZ19uZXdhKGN0eXBlLCBjb3VudCkgb24gdG9wIG9mCglnX2FsbG9jYSgpIGxpa2Ugd2UgcHJvdmlkZSBnX25ldygpIG9uIHRvcCBvZiBnX21hbGxvYygpLgoKVHVlIE5vdiAxMyAyMToyNTozNSAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIve2dlbi11bmljb2RlLXRhYmxlcy5wbCxndW5pYnJlYWsuYyxndW5pYnJlYWsuaCwKCWd1bmljaGFydGFibGVzLmgsIGd1bmljb21wLmgsIGd1bmlkZWNvbXAuW2NoXSwgCglndW5pcHJvcC5jfTogUGF0Y2ggZnJvbSBBbmRyZXcgVGF5bG9yIHRvIGltcHJvdmUKCXRhYmxlcyBhbmQgcmVkdWNlIHJlbG9jYXRpb25zIGJ5IHVzaW5nIGluZGljZXMgCglyYXRoZXIgdGhhbiBwb2ludGVycy4gKCM2NDQzMykKCQoJKiB0ZXN0cy91bmljb2RlLW5vcm1hbGl6ZS5jIChtYWluKTogRml4IGZvciBjaGFuZ2VzCgl0byBnX3N0cnNwbGl0KCkuCgoyMDAxLTExLTEyICBEYXJpbiBBZGxlciAgPGRhcmluQGJlbnRzcG9vbi5jb20+CgoJKiBnbGliL2dzdHJmdW5jcy5jOiAoZ19zdHJzcGxpdCk6IEZpeCBtYXhfdG9rZW5zID09IDEgY2FzZSB0bwoJbWF0Y2ggZG9jdW1lbnRhdGlvbi4KCSogdGVzdHMvc3RyZnVuYy10ZXN0LmM6IChtYWluKTogQWRkIHRlc3RzLgoKCSogdGVzdHMvLmN2c2lnbm9yZTogUmVjZW50bHktYWRkZWQgdGVzdC4KCk1vbiBOb3YgMTIgMDM6MDE6MjggMjAwMSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ2xpYi9nc2Nhbm5lci5jIChnX3NjYW5uZXJfZW9mKTogR19UT0tFTl9FUlJPUiBpcyBhbHNvIGFuIGVuZAoJb2Ygc3RyZWFtIGNvbmRpdGlvbi4KCjIwMDEtMTEtMTAgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ2xpYi16aXAuaW4gKERFVlpJUCk6IEFsc28gc2hhcmUvZ2xpYi0yLjAuCgoyMDAxLTExLTA5ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdsaWIvZ3dpbjMyLmMgKGdfd2luMzJfZ2V0bG9jYWxlKTogQWRkIGEgY291cGxlIG9mIGxhbmd1YWdlcwoJdGhhdCBoYXZlIExBTkdfKiBjb2RlcyBpbiBuZXdlc3QgaGVhZGVycywganVzdCBmb3IgY29tcGxldGVuZXNzLgoKMjAwMS0xMS0wOCAgV2FuZyBKaWFuICA8bGFya0BsaW51eC5uZXQuY24+CgoJKiBjb25maWd1cmUuaW4oQUxMX0xJTkdVQVMpOiBBZGRlZCB6aF9DTiBmb3IgU2ltcGxpZmllZCBDaGluZXNlLgoKMjAwMS0xMS0wOCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbGliL2d3aW4zMi5jOiBEb24ndCBkZWZpbmUgTEFOR19BWkVSSSBldGMgaW4gY2FzZSB0aG9zZSBhcmVuJ3QKCWRlZmluZWQgaW4gdGhlIGhlYWRlcnMgKE1TVkMgNS4wKS4KCShnX3dpbjMyX2dldGxvY2FsZSk6IEluc3RlYWQsIHN1cnJvdW5kIHVzZXMgb2YgdGhvc2Ugd2l0aAoJI2lmZGVmLiBUaG9zZSBNU1ZDIDUuMCB1c2VycyB0aGF0IHdhbnQgdG8gYnVpbGQgYSBHTGliIHRoYXQKCXJlY29nbml6ZXMgdGhvc2UgbGFuZ3VhZ2VzIHNob3VsZCBkb3dubG9hZCB0aGUgUGxhdGZvcm0gU0RLIGFuZAoJdXNlIHRoZSBoZWFkZXJzIGZyb20gaXQuCgoyMDAxLTExLTA3ICBQZXRlciBXaWxsaWFtcyAgPHBldGVyd0B4aW1pYW4uY29tPgoKCSogZ2xpYi9nZGlyLmMgKGdfZGlyX3JlYWRfbmFtZSk6IFJldHVybiBOVUxMIHdoZW4gZG9uZSByZWFkaW5nLgoKMjAwMS0xMS0wNiAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbGliL01ha2VmaWxlLmFtIChnc3Bhd25fd2luMzJfaGVscGVyX0xERkxBR1MpOiBVc2UgLW13aW5kb3dzLgoKMjAwMS0xMS0wNSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBSRUFETUUud2luMzI6IE1pbm9yIGVkaXRzLgoKCSogZ2xpYi16aXAuaW46IEJ1aWxkIHNlcGFyYXRlIHJ1bnRpbWUgYW5kIGRldmVsb3BlciBwYWNrYWdlcy4KCgkqIGdsaWIvbGliY2hhcnNldC9jb25maWcuY2hhcnNldCAob3MpOiBEb24ndCBuZWVkIHRvIG1hdGNoIG1pbmd3CglhZnRlciBhbGwsIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUgaXNuJ3QgZXZlbiB1c2VkIG9uIFdpbjMyLi4uIChzZWUKCWxvY2FsY2hhcnNldC5jKS4KCgkqIGdsaWIvbWFrZWZpbGUubWluZ3cuaW46IEFkZCBnZGlyLgoKCSogZ2xpYi9nbGliLmRlZjogQWRkIGdfZGlyXyogZW50cnkgcG9pbnRzLgoKU3VuIE5vdiAgNCAyMDo0NToyMSAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoQ0ZMQUdTKTogQWRkIGNoZWNrIGZvciBkaXJlbnQuaAoKCSogZ2xpYi9nbGliLmggZ2xpYi9NYWtlZmlsZS5hbTogQWRkIGdkaXIuCgoJKiBnbGliL2dkaXIuYyAoZ19kaXJfY2xvc2UpOiBDb3VwbGUgb2Ygc21hbGwgdHdlYWtzCglub3cgdGhhdCBpdCBpcyBhY3R1YWxseSBjb21waWxpbmcuLi4KClN1biBOb3YgIDQgMjA6Mjk6MzEgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbGliL2dkaXIuW2NoXTogSW5kZW50YXRpb24gZml4ZXMsIHNvbWUgcmV3cml0aW5nIG9mIGRvY3MgdG8KCWNvbmZvcm0gdG8gZ3RrLWRvYyBzdGFuZGFyZC4KCgkqIGdsaWIvZ2Rpci5bY2hdIChnX2Rpcl9jbG9zZSk6IFJlbW92ZSB0aGUgYm9vbGVhbiAKCXJldHVybiB2YWx1ZS4gV2hhdCB3b3VsZCB5b3UgZG8gaWYgY2xvc2luZyBmYWlsZWQ/CglXaGF0IHdvdWxkIHRoZSB1c2VyIGRvIGlmIHlvdSBwcmludGVkIGEgd2FybmluZwoJbWVzc2FnZSAiY2xvc2luZyBkaXJlY3RvcnkgJXMgZmFpbGVkIj8KCjIwMDEtMTEtMDQgIEhhbnMgQnJldWVyICA8aGFuc0BicmV1ZXIub3JnPgoKCSogZ2xpYi9nZGlyLltoY10gOiAobmV3IGZpbGVzKSBzaW1wbGlmaWVkIHdyYXBwZXIgYXJvdW5kIGRpcmVudCAKCWZ1bmN0aW9ucyB0byBpbXByb3ZlIHBvcnRhYmlsaXR5IG9mIGRvd25zdHJlYW0gbGlicy9hcHBzCgkqIGdsaWIvbWFrZWZpbGUubXNjLmluIDogdXNlIHRoZW0KCSogZ2xpYi9nbGliLmRlZiA6IGV4cG9ydCB0aGVtCgkqIGNvbmZpZy5oLndpbjMyLmluIDogbmVlZGluZyBIQVZFX0RJUkVOVF9IIGRlZmluZWQKCjIwMDEtMTEtMDQgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogdGVzdHMvTWFrZWZpbGUuYW06IE9uIFdpbjMyLCBjcmVhdGUgc2VwYXJhdGUgLmV4cCBmaWxlIGZvcgoJbW9kdWxlLXRlc3QubyBhbmQgbGluayB3aXRoIHRoYXQuIE90aGVyd2lzZSB0aGUgR05VIGxpbmtlciBkb2Vzbid0CglleHBvcnQgdGhlIGdfY2xhc2hfZnVuYy4KCjIwMDEtMTEtMDMgIEhhbnMgQnJldWVyICA8aGFuc0BicmV1ZXIub3JnPgoKCSogZ2xpYi9naW93aW4zMi5jIDogc3RhdGljIGNvcnJlY3RuZXNzCgoJKiBnbGliL2d3aW4zMi5jIDogc29tZSBtb3JlICNpZiBkZWZpbmVkIChTVUJMQU5HXyogLi4uCgkoZ193aW4zMl9nZXRfcGFja2FnZV9pbnN0YWxsYXRpb25fc3ViZGlyZWN0b3J5KSB1c2UgZ19idWlsZF9maWxlbmFtZQoJaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdHMgbG9naWMKCgkqIGdsaWIvZ2xpYi5kZWYgOiByZW1vdmVkIGR1cGxpY2F0ZXMsIGFkZGVkIG1pc2luZywgcmVtb3ZlZAoJY29tcGF0IGNydWZ0CgpGcmkgTm92ICAyIDE5OjU0OjE2IDIwMDEgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdsaWIvZ2JhY2t0cmFjZS5oIChHX0JSRUFLUE9JTlQpOiByZW1vdmUgcHVibGljIHNpZ25hbC5oIGluY2x1ZGUuCgpUaHUgTm92ICAxIDIxOjQ4OjQzIDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogdGVzdHMvbWFpbmxvb3AtdGVzdC5jIChyZWN1cnNlcl9pZGxlKTogUmVjdXJzZQoJd2l0aCBtYXlfYmxvY2sgPSBGQUxTRSwgc28gd2UgZG9uJ3QgZ2V0IGludG8KCXRoZSBwYXRob2xvZ3kgd2hlcmUgdGhlIHJlY3Vyc2VyX2lkbGUgcmVjdXJzZXMKCWZvciAxMCBpdGVyYXRpb25zLCBhbmQgdGhlIG9ubHkgdGhpbmcgdGhhdCBpcwoJcnVubmluZyBpcyB0aGUgcmVjdXJzZXIgaWRsZSwgd2hpY2ggYWRkcwoJYW5vdGhlciByZWN1cnNpb24gZm9yIGVhY2ggb2YgdGhvc2UgMTAgaXRlcmF0aW9ucwoJYW5kLi4uLgoKCSogdGVzdHMvbWFpbmxvb3AtdGVzdC5jIChjcmVhdGVfY3Jhd2xlcik6IEZpeCByYWNlCgljb25kaXRpb24gd2hlcmUgYSBjcmF3bGVyIHNvdXJjZSBjb3VsZCBiZSBkZXN0cm95ZWQKCWJlZm9yZSBpdCB3YXMgYWRkZWQgdG8gdGhlIGNyYXdsZXIgYXJyYXkuCgoJKiB0ZXN0L01ha2VmaWxlLmFtOiBBZGQgbWFpbmxvb3AtdGVzdCBiYWNrLgoJCjIwMDEtMTEtMDEgIE1hcml1cyBBbmRyZWlhbmEgIDxtYW5kcmVpYW5hQHlhaG9vLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgcm8gKFJvbWFuaWFuKSB0byBBTExfTElOR1VBUwoKMjAwMS0xMC0zMSAgSGF2b2MgUGVubmluZ3RvbiAgPGhwQHJlZGhhdC5jb20+CgoJKiBnbGliL2dtYWluLmMgKGdfbWFpbl9sb29wX3J1bik6IGZpeCB0byB0aGUgbG9ja2luZyBzbyB3ZSBkb24ndAoJaGFuZwoKMjAwMS0xMC0zMSAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogTWFrZSAtLXdpdGgtdGhyZWFkcz1ub25lIG1lYW4sIHRoYXQgd2Ugd2FudCB0aHJlYWQKCXN1cHBvcnQsIGJ1dCBubyBkZWZhdWx0IHRocmVhZCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBhbHNvIHdhcyB0aGUKCW9yaWdpbmFsIGludGVudGlvbiwgYnV0IGRpc2FwZWFyZWQgYXJvdW5kIDE5OTguLi4gU28gaXQgZG9lc24ndAoJc2VlbSB0byBiZSB0aGUgbW9zdCByZXF1ZXN0ZWQgZmVhdHVyZSwgYnV0IHdlIHdlbnQgZmFyIHRvIG1ha2UgaXQKCXBvc3NpYmxlIGluIHRoZSBjb2RlLCBzbyBJIHJlc3VycmVjdGVkIHRoaXMgZmVhdHVyZS4KCgkqIElOU1RBTEwuaW46IERlc2NyaWJlIHRoZSAtLWVuYWJsZS1nYy1mcmllbmRseSwgLS1kaXNhYmxlLXRocmVhZHMKCWFuZCAtLXdpdGgtdGhyZWFkcyBvcHRpb25zIG9mIGNvbmZpZ3VyZS4KCgkqIGdsaWIvZ21haW4uYyAoZ19tYWluX2NvbnRleHRfYWNxdWlyZSwgZ19tYWluX2NvbnRleHRfcmVsZWFzZSwKCWdfbWFpbl9jb250ZXh0X3dhaXQpOiBVc2UgdGhlIHJpZ2h0IGNvbmRpdGlvbmFsIChHX1RIUkVBRFNfRU5BQkxFRAoJaW5zdGVhZCBvZiBHX1RIUkVBRF9FTkFCTEVEKS4gQWxzbyByZW1vdmUgd3JvbmcKCXJldHVybi1zdGF0ZW1lbnQuIFVuZm9ydHVuYXRlbHkgbWFpbmxvb3AtdGVzdCBzdGlsbCBkb2VzIGZhaWwuIE1hbnkKCXRoYW5rcyB0byBBbmRyZWEgRmF6ZWthcyA8ZmF6ZWtAbHVkZW5zLmVsdGUuaHU+IGZvciBzcG90dGluZwoJdGhpcy4gKCM2MzQ1NSkKCjIwMDEtMTAtMzEgIE1hdHRoaWFzIENsYXNlbiAgPG1hdHRoaWFzY0Bwb2V0LmRlPgoKCSogZ29iamVjdC9nc291cmNlY2xvc3VyZS5jIChnX3NvdXJjZV9zZXRfY2xvc3VyZSk6IEZpeCBkb2N1bWVudGF0aW9uLgoKMjAwMS0xMC0zMCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbGliLXppcC5pbjogTmV3IGZpbGUsIHVzZWQgdG8gYnVpbGQgZGlzdHJpYnV0aW9uIHBhY2thZ2VzIGZvcgoJV2luZG93cy4KCgkqIGNvbmZpZ3VyZS5pbjogRXhwYW5kIGl0LgoKCSogTWFrZWZpbGUuYW06IERpc3RyaWJ1dGUgaXQuCgoJKiBjb25maWcuaC53aW4zMi5pbjogVXBkYXRlIHRvIG1hdGNoIGN1cnJlbnRseSBwcm9kdWNlZCBjb25maWcuaAoKMjAwMS0xMC0yOSAgRGFuaWVsIEVnZ2VyICA8ZGVnZ2VyQGZobS5lZHU+CgoJKiBnbGliL2diYWNrdHJhY2UuaDogRml4IG5vbi1JbnRlbC8tQWxwaGEgdmVyc2lvbiBvZiB0aGUgCglHX0JSRUFLUE9JTlQgbWFjcm8gdG8gaW5jbHVkZSA8c2lnbmFsLmg+IGFuZCB1c2UgU0lHVFJBUC4KCgkqIGdsaWIvZ21lc3NhZ2VzLmM6IENvbmRpdGlvbmFsaXNlIGRlZmluaXRpb24gb2YgYXJnczIKCWRlcGVuZGluZyBvbiB0aGUgZGVmaW5pdGlvbiBvZiBIQVZFX1ZTTlBSSU5URiB0byBhdm9pZCAKCWNvbXBpbGVyIHdhcm5pbmcuCgoJKiBnb2JqZWN0L3Rlc3RncnVudGltZS5jCgkqIHRlc3RzL3BhdHRlcm50ZXN0LmM6IEluY2x1ZGUgPHN0cmluZy5oPiB0byBhdm9pZCB3YXJuaW5ncy4KCk1vbiBPY3QgMjkgMTE6Mjk6MzcgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBtNG1hY3Jvcy9nbGliLTIuMC5tNDogRG9uJ3QgdHJ5IHRvIHVzZSBQS0dfQ09ORklHCgl3aGVuIHdlIGRpZG4ndCBmaW5kIGl0LiAoIzYyOTQ0LCBFcmljIExlbWluZ3MpCgoJKiBtNG1hY3Jvcy9nbGliLTIuMC5tNDogRml4IHByb2JsZW0gd2l0aCBzcGFjZXMgYXJvdW5kID0KCXNpZ24gaW4gYXNzaWdubWVudC4gKCM2MzIwOSwgQXJrYWRpdXN6IE1pc2tpZXdpY3opCgpNb24gT2N0IDI5IDEwOjU5OjM2IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3IgcGF0aCB0byBQZXJsLCBhZGQgZ29iamVjdC9nbGliLW1rZW51bXMgCgl0byBBQ19PVVRQVVQuICgjNjMwOTMsIERhbiBXaW5zaGlwKQoKTW9uIE9jdCAyOSAxMDo1NToxMiAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvbGliY2hhcnNldC9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IERpc3QKCXJlZi1hZGQuc2luLCByZWYtZGVsLnNpbi4gKCM2MzA5MiwgRGFuIFdpbnNoaXApCgoyMDAxLTEwLTI5ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ2xpYi9nbWFpbi5jIChnX21haW5fbG9vcF9xdWl0KTogQ29uZGl0aW9uYWxpemUgdGhyZWFkIHJlbGF0ZWQKCWNhbGxzLiAoIzYzMDkxKQoKMjAwMS0xMC0yOCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbGliL2dsaWIuZGVmOiBBZGQgbWlzc2luZyBnX3BhdHRlcm5fbWF0Y2hfc2ltcGxlIGFuZAoJZ19wYXR0ZXJuX3NwZWNfZXF1YWwuCgoJKiBnbGliL2d3aW4zMi5jIChnX3dpbjMyX2dldF9wYWNrYWdlX2luc3RhbGxhdGlvbl9zdWJkaXJlY3RvcnkpOgoJU2V0IHNlcGFyYXRvciBjb3JyZWN0bHkuCgoJKiBnbGliL2xpYmNoYXJzZXQvY29uZmlnLmNoYXJzZXQgKG9zKTogTWF0Y2ggYWxzbyBtaW5ndyouCgoJKiB0ZXN0cy90ZXN0Z2xpYi5jIChtYWluKTogKFdpYm4zMik6IFByaW50IHRoZSBsaWIvbG9jYWxlCglzdWJkaXJlY3RvcnksIGFzIHRoYXQgaXMgd2hhdCBhY3R1YWxseSBnZXRzIHVzZWQuCgpXZWQgT2N0IDI0IDExOjEwOjU0IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmluOiBWZXJzaW9uIDEuMy4xMCwgaW50ZXJmYWNlIGFnZSwgYmluYXJ5IGFnZSA9IDAuCgoJKiBORVdTOiBVcGRhdGVzCgoyMDAxLTEwLTI2ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgZGVmYXVsdCB0byB3aW4zMiB0aHJlYWQgaW1wbGVtZW50YXRpb24gb24KCUN5Z3dpbi4gVGhlIGd0aHJlYWQtd2luMzIgaW1wbGVtZW50YXRpb24gcmVhbGx5IGlzIGZvciBXaW4zMiB3aXRoCglNUyBydW50aW1lIG9ubHkuIExldCBjb25maWd1cmUgZmluZCBwdGhyZWFkcyB3aGVuIGNvbmZpZ3VyaW5nIGZvcgoJQ3lnd2luLgoKCSogUkVBRE1FLndpbjMyOiBVcGRhdGVzLgoKCSogZ2xpYi9nbGliLmRlZjogVXBkYXRlLgoKCSogdGVzdHMvbWFrZWZpbGUubWluZ3cuaW4KCSogdGVzdHMvbWFrZWZpbGUubXNjLmluOiBSZW1vdmUgbWFpbmxvb3AtdGVzdCBoZXJlLCB0b28uICBBZGQgLi4vKgoJdG8gUEFUSCBiZWZvcmUgcnVubmluZyB0ZXN0cyB0byBmaW5kIERMTHMuIFNlcGFyYXRlIHRoZQoJaW50ZXJhY3RpdmUgdGVzdHMsIGRvbid0IHJ1biB0aGVtIGluIHRoZSBjaGVjayB0YXJnZXQuCgoJKiAqL21ha2VmaWxlLm1zYy5pbjogSW5jbHVkZSBtYWtlLm1zYyBmcm9tIEdMaWIncyBidWlsZCBkaXJlY3RvcnkuCgpUaHUgT2N0IDI1IDEyOjAxOjQxIDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogdGVzdHMvTWFrZWZpbGUuYW06IFRlbXBvcmFyaWx5IHJlbW92ZSBtYWlubG9vcC10ZXN0LCBzaW5jZSBpdAoJcHJldmVudHMgZGlzdGNoZWNrLgoKMjAwMS0xMC0yNCAgQWxleCBMYXJzc29uICA8YWxleGxAcmVkaGF0LmNvbT4KCgkqIGRvY3MvcmVmZXJlbmNlL2dsaWIvZ2xpYi1zZWN0aW9ucy50eHQ6CglBZGQgZ19zdHJ0b2QgJiBjby4KCgkqIGRvY3MvcmVmZXJlbmNlL2dsaWIvdG1wbC9zdHJpbmdfdXRpbHMuc2dtbDoKCUFkZCBkb2NzIGZvciBHX0FTQ0lJX0RUT1NUUl9CVUZfU0laRS4KCgkqIGdsaWIvZ3N0cmZ1bmNzLltjaF06CglBZGRlZCBnX2FzY2lpX3N0cnRvZCwgZ19hc2NpaV9kdG9zdHIgYW5kIGdfYXNjaWlfZm9ybWF0ZC4KCgkqIHRlc3RzL01ha2VmaWxlLmFtOgoJKiB0ZXN0cy9zdHJ0b2QtdGVzdC5jOgoJQWRkIHRlc3RzIGZvciBnX2FzY2lpX3N0cnRvZCAmIGNvLgoKMjAwMS0xMC0yMyAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBjb25maWcuaC53aW4zMi5pbjogVHlwbzogR0xJQl9NSUNST19WRVJTSU9OIGFuZAoJR0xJQl9NSU5PUl9WRVJTSU9OIHdlcmUgc3dhcHBlZC4KCgkqIGdsaWIvZ3V0aWxzLmg6IFJlbW92ZSBHX0hBUkRDT0RFRF9QQVRIX1dSQVBQRVIsIE93ZW4gZGlkbid0IGxpa2UKIAlpdC4KCQoJKiBnbGliL2d1dGlscy5jOiBJbnN0ZWFkLCBleHBhbmQgaXQgb24gV2luMzIgYXMKIAlfZ2xpYl9nZXRfbG9jYWxlX2RpcigpLCBhbmQgI2RlZmluZSBHTElCX0xPQ0FMRV9ESVIgYXMgYSBjYWxsIHRvCiAJaXQuCgoyMDAxLTEwLTIzICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGNvbmZpZy5oLndpbjMyLmluOiBUeXBvLgoKCSogZ2xpYmNvbmZpZy5oLndpbjMyLmluOiBNaW5vciB1cGRhdGUgdG8gY29ycmVzcG9uZCB0byB3aGF0Cgljb25maWd1cmUgbm93IGdlbmVyYXRlcy4KCgkqIGdsaWIvTWFrZWZpbGUuYW06IChXaW4zMik6IElmIHdlIGhhdmUgYnVpbHQgdGhlIE1TVkMgaW1wb3J0CglsaWJyYXJ5LCBpbnN0YWxsIGl0LiBJbnN0YWxsIHRoZSBnY2MgaW1wb3J0IGxpYnJhcnkuIEFsc28gc3VwcG9ydAoJdW5pbnN0YWxsLgoKCSogZ2xpYi9ndXRpbHMuaDogQWRkIG1hY3JvcyBHX1dJTjMyX0RMTE1BSU5fRk9SX0RMTF9OQU1FIGFuZAoJR19IQVJEQ09ERURfUEFUSF9XUkFQUEVSLiBUaGVzZSBhcmUgdXNlZCB0byBhdm9pZCBoYXJkY29kaW5nIHBhdGgKCW5hbWVzIGludG8gV2luZG93cyBETExzLgoKCSogZ2xpYi9ndXRpbHMuYzogVXNlIHRoZW0gZm9yIEdMSUJfTE9DQUxFX0RJUi4KCgkqIGdsaWIvZ3dpbjMyLmMgKGdldF9wYWNrYWdlX2RpcmVjdG9yeV9mcm9tX21vZHVsZSk6IFBsdWcgYSBzbWFsbAoJbWVtb3J5IGxlYWsuIE1pbm9yIGNvZGUgcmVvcmRlcmluZy4KCShnX3dpbjMyX2dldF9wYWNrYWdlX2luc3RhbGxhdGlvbl9zdWJkaXJlY3RvcnkpOiAgQWxsb3cgZW1wdHkgc3ViZGlyLgoKMjAwMS0xMC0xOSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBjb25maWd1cmUuaW46IEZpeCB0ZXN0IGZvciBsaWIuZXhlLiBDYW4ndCBzZXQgbXNfbGlicmFyaWFuCgliZWZvcmUgY2FsbGluZyBBQ19DSEVDS19QUk9HLCBhcyBpdCBkb2Vzbid0IGFjdHVhbGx5IGNoZWNrCglhbnl0aGluZyBpZiB0aGUgcmVzdWx0IHZhcmlhYmxlIGhhcyBiZWVuIHByZXNldC4uLgoKMjAwMS0xMC0xOSAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdsaWIvZ3V0aWxzLmMgKGdfc2V0X3ByZ25hbWUsIGdfZ2V0X3ByZ25hbWUpOiBVc2UgYW5vdGhlciBMT0NLCglmb3IgZ19wcmduYW1lIHRvIGF2b2lkIGRlYWRsb2NraW5nLiAoIzYyNjA2KQoKMjAwMS0xMC0xOSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBjb25maWd1cmUuaW46IENoZWNrIGFsc28gYWNfY3Zfc2l6ZW9mX19faW50NjQgd2hlbiByZXF1aXJpbmcgYQoJNjQtYml0IHR5cGUuCgoyMDAxLTEwLTE3ICBIaWRlVG9zaGkgVGFqaW1hICA8aGlkZXRvc2hpLnRhamltYUBzdW4uY29tPgoKCSogZ2xpYi9nY29udmVydC5jIChnX2ljb252X29wZW4pOgoJRml4IGEgdHlwbzogdG9fY29kZXNldCA9PiBmcm9tX2NvZGVzZXQuCgkoIzU4MTk1LCAjNTUxNTIpCgpGcmkgT2N0IDEyIDE4OjI0OjAyIDIwMDEgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdsaWIvZ3BhdHRlcm4uW2hjXTogbWFrZSBzdHJ1Y3QgX0dQYXR0ZXJuU3BlYyBhbmQgR01hdGNoVHlwZQoJcHJpdmF0ZS4KCShnX3BhdHRlcm5fZXF1YWwpOiBuZXcgZnVuY3Rpb24gdG8gcmV0dXJuIGVxdWFsaXR5IG9mIHR3byBwYXR0ZXJucwoJKHJlcXVpcmVkIGJlY2F1c2UgR1BhdHRlcm5TcGVjIGlzIHByaXZhdGUgbm93KS4KCShnX3BhdHRlcm5fc3BlY19uZXcpOiBmaXggYnVnIHdyZyB3aWxkY2FyZCBjb3VudGluZyB3aGljaCBwcm9kdWNlZAoJaW5jb3JyZWN0IHBhdHRlcm4gc3BlY3MgKGRpc2NvdmVyZWQgYnkgTWF0dGhpYXMgQ2xhc2VuKS4KCW9wdGltaXplZCBjb2RlIHNvIHdlIGp1c3Qga2VlcCBvbmUgY29tcGlsZWQgcGF0dGVybiBzdHJpbmcgbm93LgoJY29ycmVjdGx5IGNhbm9uaWNhbGl6ZSBwYXR0ZXJucy4gcmVkdWNlIHN0cmluZyB3YWxrcywgb3B0aW1pemUKCWRlY2lzaW9uIGFib3V0IE1BVENIX0FMTCB2cy4gTUFUQ0hfQUxMX1RBSUwuCgkoZ19wYXR0ZXJuX21hdGNoX3N0cmluZyk6IGNhbGwganVzdCBnX3BhdHRlcm5fbWF0Y2goKSB3aXRoIE5VTEwKCXJldmVyc2VkIHN0cmluZy4KCShnX3BhdHRlcm5fbWF0Y2gpOiBhbGxvdyBOVUxMIHJldmVyc2VkIHN0cmluZ3Mgbm93LCByZXZlcnNlX2R1cAoJc3RyaW5ncyBvbiBkZW1hbmQuCgoJKiB0ZXN0cy9wYXR0ZXJudGVzdC5jICh0ZXN0X2NvbXBpbGF0aW9uKTogYWRkZWQgYW4gZXh0ZW5kZWQgdGVzdGNhc2UKCWZvciBwYXR0ZXJuIG1hdGNoaW5nIGZyb20gTWF0dGhpYXMgQ2xhc2VuIDxtYXR0aGlhc2NAcG9ldC5kZT4uCgoyMDAxLTEwLTExICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogY29uZmlndXJlLmluIChhY19jdl9zaXplb2ZfbG9uZ19sb25nKTogQXZvaWQgJz09JyBhbmQgJy1hJyBpbgoJJ3Rlc3Qncy4KCldlZCBPY3QgMTAgMjA6MDc6MzYgMjAwMSAgSm9zaHVhIE4gUHJpdGlraW4gIDx2aXNobnVAcG9ib3guY29tPgoKCSogZ2xpYi9nbWVzc2FnZXMuYyBnbGliL2d0eXBlcy5oOiBSZW1vdmUgR19IQVZFX0dJTlQ2NAoJY29uZGl0aW9uYWxpemF0aW9uLgoKV2VkIE9jdCAxMCAxNzozNDoxNSAyMDAxICBKb3NodWEgTiBQcml0aWtpbiAgPHZpc2hudUBwb2JveC5jb20+CgoJKiBjb25maWd1cmUuaW46IFVuLWNvbmRpdGlvbmFsaXplIGFuZCByZXF1aXJlIGEgNjQtYml0IGludGVnZXIKCXR5cGUuCgoyMDAxLTEwLTA0ICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogY29uZmlndXJlLmluOiBBdm9pZCAndGVzdCAtYScuCgoyMDAxLTEwLTA1ICBNYXR0aGlhcyBDbGFzZW4gIDxtYXR0aGlhc2NAcG9ldC5kZT4KCgkqIGdsaWIvZ3dpbjMyLmM6IERvY3VtZW50YXRpb24gdXBkYXRlLgoKMjAwMS0xMC0wNCAgSGF2b2MgUGVubmluZ3RvbiAgPGhwQHJlZGhhdC5jb20+CgoJKiBnbGliL2xpYmNoYXJzZXQvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBhZGQgY29uZmlnLmNoYXJzZXQKCjIwMDEtMTAtMDMgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ2xpYi9ndXRpbHMuYyAoV2luMzIpIChEbGxNYWluKTogTmV3IGZ1bmN0aW9uIChETEwgZW50cnkgcG9pbnQpCgl0byB0dWNrIGF3YXkgYWN0dWFsIERMTCBuYW1lLgoJKEdMSUJfTE9DQUxFX0RJUikgVXNlIGFjdHVhbCBETEwgbmFtZSwgaW5zdGVhZCBvZiBhc3N1bWluZyBvbmUKCW5hbWluZyBjb252ZW50aW9uIGZvciBETExzLgoKCSogZ2xpYi9nbGliLmRlZjogZ19zdHJpbmdfYXBwZW5kX3ByaW50Zi4KCjIwMDEtMTAtMDIgIE1hdHRoaWFzIENsYXNlbiAgPG1hdHRoaWFzY0Bwb2V0LmRlPgoKCSogZ2xpYi9nc3RyZnVuY3MuYywgZ2xpYi9naW9jaGFubmVsLmM6IGRvY3VtZW50YXRpb24gdXBkYXRlLgoKCSogZ2xpYi9ncXVldWUuYzogYWRkIGRvY3VtZW50YXRpb24uCgoyMDAxLTEwLTAyICBTdmVuIE5ldW1hbm4gIDxzdmVuQGdpbXAub3JnPgoKCSogZ2xpYi9nc3RyaW5nLmggKGdfc3RyaW5nX3NwcmludGZhKTogbGV0IHRoZSBjb21wYXRpYmlsaXR5IGRlZmluaXRpb24KCXBvaW50IHRvIHRoZSBuZXcgbmFtZSBnX3N0cmluZ19hcHBlbmRfcHJpbnRmKCkuCgoyMDAxLTEwLTAxICBBbGV4IExhcnNzb24gIDxhbGV4bEByZWRoYXQuY29tPgoKCSogZ2xpYi9nY29udmVydC5bY2hdOgoJQ29udmVydCBHX0NPTlZFUlRfRVJST1JfTk9UX0FCU09MVVRFX0ZJTEVfVVJJIGFuZAoJR19DT05WRVJUX0VSUk9SX0lOVkFMSURfVVJJIHRvIEdfQ09OVkVSVF9FUlJPUl9CQURfVVJJLgoKCSogdGVzdHMvdXJpLXRlc3QuYzoKCVVwZGF0ZSB0ZXN0cwoKTW9uIE9jdCAgMSAxNjowMToyNCAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ3N0cmluZy5bY2hdIGdsaWIvZ3JlbC5jOiBSZW5hbWUgZ19zdHJpbmdfcHJpbnRmYSgpCgl0byBnX3N0cmluZ19hcHBlbmRfcHJpbnRmKCkuICgjNjEwNDEsIEhhdm9jIFBlbm5pbmd0b24uKQoKMjAwMS0xMC0wMSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbGliL2d3aW4zMi5jOiBEb2N1bWVudGF0aW9uIGNsZWFudXBzLiAoIzYxNDg3KQoKMjAwMS0xMC0wMSAgTWF0dGhpYXMgQ2xhc2VuICA8bWF0dGhpYXNjQHBvZXQuZGU+CgoJKiBnbGliL2dzY2FubmVyLmggKEdTY2FubmVyTXNnRnVuYyk6IG1ha2UgdGhpcmQgYXJndW1lbnQKCWEgZ2Jvb2xlYW4uCgkoZ19zY2FubmVyX2FkZF9zeW1ib2wsIGdfc2Nhbm5lcl9yZW1vdmVfc3ltYm9sLCAKCWdfc2Nhbm5lcl9mb3JlYWNoX3N5bWJvbCk6IG1hcmsgdGhlc2UgCglHX0RJU0FCTEVfREVQUkVDQVRFRC4gKCM2MTQ2OSkKCgkqIGdsaWIvZ3NjYW5uZXIuYyAoZ19zY2FubmVyX21zZ19oYW5kbGVyKTogbWFrZSB0aGlyZCAKCWFyZ3VtZW50IGdib29sZWFuLiAoIzYxNDY4KQoKMjAwMS0xMC0wMSAgU3ZlbiBOZXVtYW5uICA8c3ZlbkBnaW1wLm9yZz4KCgkqIGdsaWIvZ2NvbnZlcnQuYwoJKiBnbGliL2dzcGF3bi13aW4zMi5jCgkqIGdsaWIvZ3NwYXduLmM6IHNvbWUgbWlub3IgZG9jdW1lbnRhdGlvbiBmaXhlcy4KCjIwMDEtMDktMjkgIEFsZXhhbmRlciBMYXJzc29uICA8YWxsYUBseXNhdG9yLmxpdS5zZT4KCgkqIGNvbmZpZ3VyZS5pbjoKCUFkZCBidWlsZC93aW4zMi9kaXJlbnQvTWFrZWZpbGUgdG8gdGhlIGxpc3Qgb2YgbWFrZWZpbGVzCgoyMDAxLTA5LTMwICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdsaWIvZ3dpbjMyLmMKCSogZ2xpYi9nd2luMzIuaAoJKiBnbGliL2dsaWIuZGVmOiBSZW1vdmUgb3duIGltcGxlbWVudGF0aW9uIG9mIGRpcmVudAoJZnVuY3Rpb25zLiBJbnN0ZWFkLCBnY2MgKG1pbmd3KSB1c2VycyBzaG91bGQgZ28gYWhlYWQgYW5kIHVzZSB0aGUKCTxkaXJlbnQuaD4gaW5jbHVkZWQgd2l0aCB0aGUgbWluZ3cgZ2NjLCBhbmQgdGhlIGRpcmVudCBmdW5jdGlvbnMKCWluY2x1ZGVkIGluIGxpYm1pbmd3MzIsIHdoaWxlIE1TVkMgdXNlcnMgY2FuIHVzZSB0aGUgc2FtZSAocHVibGljCglkb21haW4pIGNvZGUsIGV4dHJhY3RlZCBmcm9tIG1pbmd3LXJ1bnRpbWUgc291cmNlcyBhbmQgcGxhY2VkIGluCglidWlsZC93aW4zMi9kaXJlbnQuW2NoXS4KCgkqIGdsaWIvZ3dpbjMyLmMgKGdldF9wYWNrYWdlX2RpcmVjdG9yeV9mcm9tX21vZHVsZSwKCWdfd2luMzJfZ2V0X3BhY2thZ2VfaW5zdGFsbGF0aW9uX2RpcmVjdG9yeSk6IFVzZSBzdGF0aWMgbG9jayB0bwoJcHJvdGVjdCBzdGF0aWMgaGFzaCB0YWJsZS4KClNhdCBTZXAgMjkgMDI6MzM6MTQgMjAwMSAgR2VvcmdlIExlYmwgPGppcmthQDV6LmNvbT4KCgkqIHRlc3RzL3Rlc3RnbGliLmMgKG1haW4pOiBjYXN0IHRoZSBzdHJpbmcgc2l6ZSB0byBndWxvbmcgYW5kIHVzZSAlbHUKCSAgZm9yIHByaW50aW5nIHRvIGF2b2lkIDY0Yml0IGlzc3VlcwoKCSogZ2xpYi9nc3RyZnVuY3MuW2NoXSAoZ19hc2NpaV9zdHJuY2FzZWNtcCk6IENoYW5nZSB0aGUgJ24nIGFyZ3VtZW50IAoJICB0byBnc2l6ZSBpbnN0ZWFkIGd1aW50LgoKRnJpIFNlcCAyOCAxOTo0MTozMiAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvbGliY2hhcnNldC8qIGNvbmZpZ3VyZS5pbjogRml4IG1hY3JvcyBmcm9tIGxpYmNoYXJzZXQKCXRvIHdvcmsgd2l0aCBhdXRvY29uZi0yLjV4LiAoRnJvbSBMYXN6bG8gUGV0ZXIuKQoKMjAwMS0wOS0yNyAgTWF0dGhpYXMgQ2xhc2VuICA8bWF0dGhpYXNjQHBvZXQuZGU+CgoJKiBnbGliL2dzdHJpbmcuYzogRml4IGlubGluZSBkb2NzIGZvciBnX3N0cmluZ19wcmVwZW5kX3VuaWNoYXIuCgoyMDAxLTA5LTI5ICBBYmVsIENoZXVuZyAgPG1hZGRvZ0BsaW51eC5vcmcuaGs+CgoJKiBjb25maWd1cmUuaW46IEFkZCBxdW90ZXMgYXJvdW5kIHRlc3QgdmFsdWVzLiBUaGlzIGZpeGVzIGEgbWlub3IKCSAgYW5ub3lpbmcgd2FybmluZyBpZiBwbGF0Zm9ybSBpcyBub3Qgd2luMzIuCgoyMDAxLTA5LTI3ICBNYW5pc2ggU2luZ2ggIDx5b3NoQGdpbXAub3JnPgoKCSogZ2xpYi9ncmFuZC5jIChnX3JhbmRfbmV3KTogZml4IHR5cG8gKCNpZi0+I2lmZGVmKSBzbyBpdCBjb21waWxlcwoJYWdhaW4uCgoyMDAxLTA5LTI0ICBCcnVubyBIYWlibGUgIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+CgoJKiBnbGliL2d3aW4zMi5jIChnX3dpbjMyX2dldGxvY2FsZSk6IFdoZW4gdGhlIHN1YmxhbmdpZCBpcwoJU1VCTEFOR19ERUZBVUxULCByZXR1cm4gdGhlIGxvY2FsZSBvZiB0aGUgbGFuZ3VhZ2UncyBtYWluIGNvdW50cnksCglub3QgYSBjb3VudHJ5LW5ldXRyYWwgbG9jYWxlLiBFLmcuICJlbl9VUyIgaW5zdGVhZCBvZiAiZW4iLiBBZGQKCWhhbmRsaW5nIG9mIExBTkdfU09SQklBTi4gRml4IHR5cG8gZm9yIFNVQkxBTkdfQ0hJTkVTRV9TSU1QTElGSUVECgkoQ2hpbmEgPT0gQ04sIENIID09IFN3aXR6ZXJsYW5kKS4gSWdub3JlIGVtcHR5IGVudmlyb25tZW50Cgl2YXJpYWJsZSB2YWx1ZXMuCgoyMDAxLTA5LTI4ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdsaWIvbWFrZWZpbGUue21pbmd3LG1zY30uaW46IEFkZCBsb2NhbGNoYXJzZXQuby4gSnVzdCBjb3B5IHRoZQoJc291cmNlIGZpbGUgZnJvbSBsaWJjaGFyc2V0IGFuZCBjb21waWxlIGluIHRoaXMgZGlyZWN0b3J5LgoKCSogZ2xpYi9naW9jaGFubmVsLmM6IE1hcmsgcmVzdCBvZiBnX3NldF9lcnJvciBzdHJpbmdzIGZvcgoJdHJhbnNsYXRpb24sIHRvby4KCgkqIGdsaWIvZ2lvd2luMzIuYzogQWRkIHNvbWUgZGVidWdnaW5nIG91dHB1dCBmdW5jdGlvbnMsIGNhbGwgdGhlbQoJd2hlbiBkZWJ1Z2dpbmcuCgkoY3JlYXRlX2V2ZW50cywgZ19pb193aW4zMl9tc2dfd3JpdGUpOiBGcmVlIG1lc3NhZ2UgZmV0Y2hlZCB3aXRoCglnX3dpbjMyX2Vycm9yX21lc3NhZ2UgKCkuCgkoZ19pb193aW4zMl9jaGVjayk6IEluZGVudGF0aW9uIGZpeGVzLgoJKGdfaW9fd2luMzJfZmRfcmVhZCxnX2lvX3dpbjMyX3NvY2tfcmVhZCk6IERvbid0IGFsd2F5cyByZXR1cm4KCUdfSU9fU1RBVFVTX05PUk1BTC4gRG8gcmV0dXJuIEdfSU9fU1RBVFVTX0VPRiBpZiB3ZSBnb3QgMCBieXRlcywKCWxpa2Ugb24gVW5peC4gVGhpcyBoZWxwcyBtYWtpbmcgdGhlIHRlc3QgcHJvZ3JhbXMgcnVuCglzdWNjZXNzZnVsbHkuCgoJKiBnbGliL2dtYWluLmMgKGdfcG9sbCk6IFJldHVybiB0aGUgY29kZSBpZmRlZmZlZCBvdXQgd2l0aAoJVEVTVF9XSVRIT1VUX1RISVMuIENhbid0IHJlbWVtYmVyIHdoeSBpdCB3YXMgaWZkZWZmZWQgb3V0LiBUaGluZ3MKCXNlZW0gdG8gd29yayBhcyBwcmV2aW91c2x5IHdpdGggdGhlIGNvZGUgaW4gcGxhY2UuIEVzcGVjaWFsbHkKCXNwYXduLXRlc3QgZGlkbid0IHdvcmsgd2l0aCB0aGUgY29kZSBpZmRlZmZlZCBvdXQgKEJ1ZyM2MTA2NykuCgoJKiBnbGliL2dyYW5kLmMgKGdfcmFuZF9uZXcpOiBEb24ndCB0cnkgdG8gdXNlIC9kZXYvdXJhbmRvbSB1bmxlc3MKCW9uIFVuaXguCgoJKiBnbGliL2dzcGF3bi13aW4zMi1oZWxwZXIuYyAoV2luTWFpbik6IFJlbW92ZSBTbGVlcCgxMDAwMCkKCWFjY2lkZW50YWxseSBsZWZ0IGluLgoKVGh1IFNlcCAyNyAxNDoyNjo1NyAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ3N0cmZ1bmNzLmMgKGdfYXNjaWlfc3RydXAvZG93bik6IFVzZSBnc3NpemUgdG8KCW1hdGNoIHRoZSBoZWFkZXIuIChSZXBvcnRlZCBieSBFbGxpb3QgTGVlLikKCldlZCBTZXAgMjYgMjI6MzQ6MTIgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJRml4ZXMgZm9yICM1ODE5NSwgYmFzZWQgb24gc29tZSBpZGVhcyBmcm9tIEhpZGV0b3NoIFRhamltYS4KCgkqIGFjbGliY2hhcnNldC5tNCBnbGliL2xpYmNoYXJzZXQ6IEFkZCBCcnVubyBIYWlibGUncwoJcG9ydGFibGUtY3VycmVudCBjaGFyc2V0IGRldGVjdGlvbiBjb2RlIGZyb20gbGliaWNvbnYuCgoJKiBnbGliL2d1dGY4LmMgKGdfdXRmOF9nZXRfY2hhcnNldF9pbnRlcm5hbCk6IFJld3JpdGUKCXRvIHVzZSBfZ19sb2NhbGVfY2hhcnNldCgpLgoKCSogZ2xpYi9ndXRmOC5jIChfZ19jaGFyc2V0X2dldF9hbGlhc2VzKTogUHJpdmF0ZSBmdW5jdGlvbnMKCXRvIGdldCBhbGlhc2VzIGZyb20gbGliY2hhcnNldCBmb3IgYSBwYXJ0aWN1bGFyIGNhbm9uaWNhbAoJbmFtZS4KCgkqIGdsaWIvZ2NvbnZlcnQuYzogSWYgbG9hZGluZyBhIGNoYXJzZXQgZmFpbHMsIHRyeSAKCWFsaWFzZXMgdG8gbG9vayBmb3IgZmFsbGJhY2tzLgoJCjIwMDEtMDktMjYgIE1hdHRoaWFzIENsYXNlbiAgPG1hdHRoaWFzY0Bwb2V0LmRlPgoKCSogZ21lbS5jIChnX21lbV9pc19zeXN0ZW1fbWFsbG9jKTogUmV0dXJuICF2dGFibGVfc2V0LgoKMjAwMS0wOS0yNiAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBjb25maWd1cmUuaW46IFJldHJhY3QgbXkgY2hhbmdlIGVhcmxpZXIgdG9kYXkuIERvbid0IHByZXNldAoJYXV0b2NvbmYgdmFyaWFibGVzIGluIGEgdHJ5IHRvIG1hdGNoIGJvdGggbWluZ3cgYW5kIE1TVkMuIEluc3RlYWQsCgloZSB3aG8gcGFja2FnZXMgYSBwcmVidWlsdCBHTGliIGRldmVsb3BlciBkaXN0cmlidXRpb24gZm9yIFdpbjMyCglydW5zIGNvbmZpZ3VyZSB0d2ljZTogb25jZSBmb3IgbWluZ3csIG9uY2UgZm9yIE1TVkMsIGFuZCB0aGVuIHVzZXMKCWRpZmYgLUQgb24gdGhlIGdsaWJjb25maWcuaCBmaWxlcyB0byBnZW5lcmF0ZSBhIHN1aXRhYmx5IGlmZGVmZmVkCglnbGliY29uZmlnLmggZm9yIGRpc3RyaWJ1dGlvbiB0aGF0IHN1aXRzIGJvdGggY29tcGlsZXJzLiAoRGl0dG8KCWZvciBjb25maWcuaCwgYWx0aG91Z2ggdGhhdCBmaWxlIHdvdWxkbid0IGJlIGRpc3RyaWJ1dGVkIGluIGEKCWRldmVsb3BlciBwYWNrYWdlLCBidXQgaW4gYSBzb3VyY2UgcGFja2FnZSBmb3IgV2luMzIgdXNlcnMgd2hvCgl3YW50IHRvIGJ1aWxkIEdMaWIgYnV0IGNhbid0IHVzZSBjb25maWd1cmUuKQoKCSogZ2xpYmNvbmZpZy5oLndpbjMyLmluCgkqIGNvbmZpZy5oLndpbjMyLmluOiBHZW5lcmF0ZWQgYnkgdXNpbmcgZGlmZiAtRCBhcyBkZXNjcmliZWQgYWJvdmUuCgoJKiB0ZXN0cy9tYWtlZmlsZS5taW5ndy5pbiAoLmMuZXhlKTogQ29ycmVjdCBuYW1lIG9mIGd0aHJlYWQgKGltcG9ydCkKCWxpYnJhcnkuCgpXZWQgU2VwIDI2IDE1OjMzOjM3IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogTWFrZWZpbGUuYW0gcG8vTWFrZWZpbGUuaW4uaW46IEZpeCBkaXN0Y2xlYW4gdG8gCglyZW1vdmUgc29tZSBleHRyYSBmaWxlcy4gIzYwOTkzLCBCZW4gR2VydHpmaWVsZAoKV2VkIFNlcCAyNiAxNDozNzo1MiAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ2VuLXVuaWNvZGUtdGFibGVzLnBsIGdsaWIvZ3VuaXByb3AuYyAKCSAgZ2xpYi97Z3VuaWJyZWFrLGd1bmljaGFydGFibGVzLGd1bmlkZWNvbXB9Lmg6CglQYXRjaCBmcm9tIEFuZHJldyBUYXlsb3IgdG8gbWFrZSBtdWNoIG9mIHRoZSB1bmljb2RlCgl0YWJsZSBkYXRhIGNvbnN0IHNvIHRoYXQgaXQgY2FuIGJlIG1hZGUgcmVhZC1vbmx5CglhbmQgc2hhcmVkLgoKV2VkIFNlcCAyNiAxMjo0MTowNSAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ3N0cmZ1bmNzLmMgKGdfc3RyZHVwX3ZwcmludGYpOiBDb3B5IGlmIAoJIWdfbWVtX2lzX3N5c3RlbV9tYWxsb2MsIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KCShGb3VuZCBieSBKYW1lcyBBbnRpbGwuKQoKV2VkIFNlcCAyNiAxMTowMDozMSAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ3N0cmZ1bmNzLmMgKGdfc3RybmZpbGwpOiBVc2UgbWVtc2V0OyBtaWdodCBiZSAKCWZhc3RlciBpZiBzb21lb25lIHVzZWQgdGhpcyBmb3IgYSBiaWlpZyBzdHJpbmcuCgkoU3VnZ2VzdGlvbiBmcm9tIEpha3ViIEplbGluZWspCgoyMDAxLTA5LTI2ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGNvbmZpZ3VyZS5pbjogKFdpbjMyOikgTW92ZSB0aGUgV2luMzIgY2hlY2sgY2xvc2VyIHRvIHRoZSBzdGFydCwKCWFmdGVyIHRoZSBCZU9TIGNoZWNrcy4gUHJlc2V0IHNvbWUgYXV0b2NvbmYgdmFyaWFibGVzIHNvIHRoYXQKCWNvbmZpZ3VyZSB3b24ndCBmaW5kIHRob3NlIGZldyBoZWFkZXJzIGFuZCBmdW5jdGlvbnMgdGhhdCBnY2MKCShtaW5ndykgcHJldGVuZHMgdG8gaW1wbGVtZW50IChldmVuIGlmIHRoZSBhY3R1YWwgQyBsaWJyYXJ5Cglkb2Vzbid0KSwgYnV0IE1TVkMgZG9lc24ndC4gVGhpcyBiZWNhdXNlIEkgd2FudCB0aGUgc2FtZSBjb25maWcuaAoJYW5kIGdsaWJjb25maWcuaCB0byBiZSB1c2FibGUgYm90aCBmcm9tIGdjYyBhbmQgTVNWQyAoYXMgdGhleSB1c2UKCXRoZSBzYW1lIEMgbGlicmFyeSkuIFNvbWUgb3RoZXIgbWlub3IgaGFja2VyeSBmb3IgdGhpcyBwdXJwb3NlLgoKCSogZ2xpYmNvbmZpZy5oLndpbjMyLmluCgkqIGNvbmZpZy5oLndpbjMyLmluOiBVc2UgdmVyc2lvbnMgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZSAoYW5kCgloYW5kLWVkaXRlZCBzbGlnaHRseSkuCgoyMDAxLTA5LTI1ICBEYXJpbiBBZGxlciAgPGRhcmluQGJlbnRzcG9vbi5jb20+CgoJKiBnbGliL2d0cmVlLmg6IFVzZSBnYm9vbGVhbiBmb3IgcmV0dXJuIHZhbHVlIG9mIEdUcmF2ZXJzZUZ1bmMuCgpUdWUgU2VwIDI1IDExOjM0OjIyIDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmluOiBWZXJzaW9uIDEuMy45IChiaW5hcnksIGludGVyZmFjZSA9PSAwKQoKCSogZ2xpYi9nc3RyZnVuY3MuYyAoZ19hc2NpaV9zdHJkb3duKTogQ2hhbmdlIGdfYXNjaWlfc3RydXAvc3RyZG93bgoJdG8gdGFrZSBhICdsZW4nIGFyZ3VtZW50IHRvIG1hdGNoIGdfdXRmOF9zdHJ1cC9zdHJkb3duLiBUaGlzCglob3BlZnVsbHkgd2lsbCBhbHNvIG1ha2UgaXQgbW9yZSBvYnZpb3VzIHRoYXQgdGhleSBkdXBsaWNhdGUKCXRoZSBzdHJpbmcgcmF0aGVyIHRoYW4gYWN0aW5nIGxpa2UgZ19zdHJ1cC9zdHJkb3duLgoJKFN1Z2dlc3Rpb24gZnJvbSBNYXR0aGlhcyBDbGFzZW4sICM1OTU1MCkKCjIwMDEtMDktMjUgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogY29uZmlndXJlLmluOiBNb3JlIFdpbjMyIGF1dG9tYWtlIG1hY3Jvcy4gRm9yIC5kZWYgZmlsZXM6CglHTElCX0RFRiwgR01PRFVMRV9ERUYsIEdPQkpFQ1RfREVGIGFuZCBHVEhSRUFEX0RFRi4gRm9yIC5leHAKCWZpbGVzOiBURVNUR01PRFVMRV9FWFAgKGZvciBwcm9ncmFtcyB0aGF0IG5lZWQgdG8gZXhwb3J0IHN5bWJvbHMsCglqdXN0IHRlc3RnbW9kdWxlIGhlcmUpLiBBIG5ldyBjb25kaXRpb25hbCwgTVNfTElCX0FWQUlMQUJMRSB0bwoJdGVzdCB3aGV0aGVyIHRoZSBNaWNyb3NvZnQgbGlicmFyaWFuICgiYXIiKSBpcyBhdmFpbGFibGUgdG8gYnVpbGQKCU1TIGltcG9ydCBsaWJyYXJpZXMuCiAKCSogZ2xpYi9NYWtlZmlsZS5hbQoJKiBnbW9kdWxlL01ha2VmaWxlLmFtOiBVc2UgYWJvdmUuIE5ldyBydWxlIHRvIGJ1aWxkIE1TIGltcG9ydAoJbGlicmFyeS4KCgkqIGdsaWIvbWFrZWZpbGUubXNjLmluCgkqIHRlc3RzL21ha2VmaWxlLm1zYy5pbgoJKiB0ZXN0cy9tYWtlZmlsZS5taW5ndy5pbjogVXNlIHNhbWUgRExMIGFuZCBpbXBvcnQgbGlicmFyeSBuYW1lcyBhcwoJbGlidG9vbC4KCjIwMDEtMDktMjQgIE1hdHRoaWFzIENsYXNlbiAgPG1hdHRoaWFzY0Bwb2V0LmRlPgoKCSogZ2xpYi9ndXRmOC5jLCBnbGliL2d1bmlicmVhay5jLCBnbGliL2d1bmljb2xsYXRlLmMsCglnbGliL2d1bmlkZWNvbXAuYywgZ2xpYi9ndW5pcHJvcC5jOiBJbmxpbmUgZG9jIGNvbnNpc3RlbmN5IGZpeGVzLgoKMjAwMS0wOS0yNCAgU3RhbmlzbGF2IFZpc25vdnNreSAgPHZpc25vdnNreUBuZW55YS5tcy5tZmYuY3VuaS5jej4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgInNrIiB0byBBTExfTElOR1VBUy4KCjIwMDEtMDktMjIgIEhhbnMgQnJldWVyICA8aGFuc0BicmV1ZXIub3JnPgoKCSogZ2xpYi9naW93aW4zMi5jIDogc2ltcGx5IHNldHRpbmcgaXNfcmVhZGFibGUgYW5kIGlzX3dyaXRlYWJsZQoJdG8gVFJVRSBkb2VzIG1ha2UgR2ltcCBwbHVnLWlucyB3b3JrIGFnYWluLiBTdGlsbCBubyBBUEkga25vd24KCXRvIHJlcXVlc3QgdGhpcyBpbmZvIG9uIFdpbjMyIChzZWUgIzU3NjkwKQoKMjAwMS0wOS0yMSAgSGFucyBCcmV1ZXIgIDxoYW5zQGJyZXVlci5vcmc+CgoJKiBtYWtlZmlsZS5tc2MgOiBhZGRlZCBydWxlIGZvciBnbGliY29uZmlnLmgKCgkqIGdsaWIvZ2lvd2luMzIuYyAoZ19pb19jaGFubmVsX25ld19maWxlKSA6IGFsd2F5cyBvcGVuCglpbiBiaW5hcnkgbW9kZSAoZml4IGZvciAjNTc2OTUpCgoJKiBnbGliL2dsaWIuZGVmIDogdXBkYXRlZCBleHRlcm5hbHMKCgkqIGdsaWIvZ3dpbjMyLmMgOiByZS1hZGRlZCBMQU5HXyogYW5kIFNVQkxBTkdfKiBkZWZpbml0aW9ucywKCXdoaWNoIGFyZSBtaXNzaW5nIGZyb20gdGhlIG1zdmMgNS4wIHdpbjMyIHNkawoKCSogZ2xpYi9tYWtlZmlsZS5tc2MuaW4gOiBhZGRlZCBnYnNlYXJjaGFycnkKClRodSBTZXAgMjAgMjA6MzM6NDUgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBSZW5hbWUgZ19tZW1fdnRhYmxlX2lzX3NldCgpIHRvIGdfbWVtX2lzX3N5c3RlbV9tYWxsb2MoKS4KCjIwMDEtMDktMjAgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ2xpYi9ndXRpbHMuYyAoZ19wYXRoX2lzX2Fic29sdXRlKTogKFdpbjMyOikgQWNjZXB0IGFsc28gZm9yd2FyZAoJc2xhc2hlcy4gKEJ1dCBzdGlsbCBkb24ndCBhY2NlcHQgdGhlbSBpbiB0aGUgb3RoZXIgZnVuY3Rpb25zCgloZXJlLiBUaGlzIGlzIGEgdGhvcm55IGlzc3VlLiBXaW5kb3dzIGluIGZhY3QgZG9lcyB0cmVhdCAvIGxpa2UgXAoJb24gaW5wdXQgKGF0IGxlYXN0IGFzIGxvY2FsIGRpcmVjdG9yeSBzZXBhcmF0b3JzLCBkdW5ubyBhYm91dAoJc2VydmVyL3NoYXJlIHNlcGFyYXRvcnMpLiBCdXQgR0xpYiBvbmx5IGhhcyB0aGUgb25lCglHX0RJUl9TRVBBUkFUT1IgdmFsdWUsIHRoYXQgYXBwcyBzaG91bGQgc2NhbiBmb3IsIGFuZCB1c2Ugd2hlbgoJYnVpbGRpbmcgcGF0aG5hbWVzLiBUbyBwcm9wZXJseSBmaXggdGhpcyB3b3VsZCByZXF1aXJlIHRvdGFsbHkKCWFic3RyYWN0aW5nIHBhdGhuYW1lcywgYW5kIGRvbid0IGhhdmluZyBhbnkgcGF0aCBuYW1lIHNjYW5uaW5nIGFuZAoJYnVpbGRpbmcgaW4gYXBwbGljYXRpb25zIGF0IGFsbC4gRmF0IGNoYW5jZS4pCgkoR0xJQl9MT0NBTEVfRElSKTogUmVkZWZpbmUgb25seSBvbiAicHVyZSIgV2luMzIsIG5vdCBDeWd3aW4uIFVzZQoJc3ViZGlyZWN0b3J5ICJzaGFyZVxsb2NhbGUiLCBhcyBvbiBVbml4LgoKCSogZ2xpYi9nd2luMzIuYzogRG9uJ3QgbmVlZCB0byBkZWZpbmUgdGhvc2UgbGFuZ2lhZ2UgYW5kCglzdWJsYW5ndWFnZSBjb25zdGFudHMgaGVyZSwgY3VycmVudCBtaW5ndyAodzMyYXBpKSBoZWFkZXJzIGhhdmUKCXRoZW0uCgoJKiBnbGliL2dsaWIuZGVmOiBBZGQgYSBmZXcgbWlzc2luZyBlbnRyeSBwb2ludHMuCgoJKiB0ZXN0cy90ZXN0Z2xpYi5jIChtYWluKTogVXNlIHNhbWUgbmFtZSBmb3IgRExMIGFzIGxpYnRvb2wgZG9lcy4KCVVzZSBHX0RJUl9TRVBBUkFUT1IgaW4gZ19wYXRoX2dldF9iYXNlbmFtZSB0ZXN0cy4KCldlZCBTZXAgMTkgMTY6MzU6MjIgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbGliL2dtYWluLmMgKGdfbWFpbl9jb250ZXh0X2ZpbmRfc291cmNlX2J5W19mdW5jc11fdXNlcl9kYXRhKTogCglGaXggaGFuZGxpbmcgb2YgdXNlciBkYXRhIHdoZW4gbG9jYXRpbmcgc291cmNlcy4gCgkoIzYwNDE0LCBLYXRzdWhpcm8gT2t1bm8pCgpXZWQgU2VwIDE5IDE0OjE3OjMxIDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCVBhdGNoIGZyb20gTWF0dGhpYXMgQ2xhc2VuICgjNTk4MDYpCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciB2YXNwcmludGYoKS4KCgkqIGdsaWIvZ21lbS5bY2hdOiBBZGQgZ19tZW1fdnRhYmxlX2lzX3NldCgpIHRvIGJlIHVzZWQKCWZvciBlZmZpY2llbmN5IGhhY2tzIHRvIGF2b2lkIGV4dHJhIGNvcGllcyB3aGVuIG5vdAoJbmVlZGVkLgoKCSogZ2xpYi9nc3RyZnVuY3MuYzogVXNlIHZhc3ByaW50ZigpIHRvIGltcGxlbWVudAoJZ19zdHJkdXBfcHJpbnRmKCkgd2hlbiBhdmFpbGFibGUuCgoJKiBnbGliL2dtZXNzYWdlcy5jIChnX2xvZ3YpOiBBdm9pZCB1c2luZyAKCXByaW50Zl9zdHJpbmdfdXBwZXJfYm91bmQoKSB3aGVuIHdlIGhhdmUgaGF2ZSB2c25wcmludGYuCgoJKiBnbGliL2dtZXNzYWdlcy5jIChwcmludGZfc3RyaW5nX3VwcGVyX2JvdW5kKTogRG9uJ3QKCXNlZ2ZhdWx0IHdoZW4gd2FybmluZyBhYm91dCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCgpXemVkIFNlcCAxOSAxNDowNToyNyAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIve2djYWNoZS5jLGdtZW0uYyxncmVsLmMsZ3N0cmluZy5jLGd0aW1lci5jLGd0cmVlfToKCVBhdGNoIGZyb20gRGFyaW4gQWRsZXIgdG8gcmVtb3ZlIEdSZWFsKiBzdHJ1Y3R1cmVzIGluCglmYXZvciBvZiBzaW1wbGUgb3BhcXVlIHR5cGVkZWZzIGluIGNhc2VzIHdoZXJlIHRoZXJlCgl3ZXJlIG5vIG5vbi1wcml2YXRlIG1lbWJlcnMuICgjNTk2OTMpCgpXZWQgU2VwIDE5IDEzOjAzOjM4IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi9naW9jaGFubmVsLmMgKGdfaW9fY2hhbm5lbF9yZWFkL3dyaXRlX2NoYXJzKTogSGFuZGxlIE5VTAoJYnl0ZXNfd3JpdHRlbiwgYnl0ZXNfcmVhZC4gKFN1Z2dlc3RlZCBieSBKb3NodWEgTiBQcml0aWtpbiwgIzU5NTUwKQoKV2VkIFNlcCAxOSAxMjo0OToxMSAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ3V0aWxzLmMgKGdfZ2V0X2FueV9pbml0KTogSGFuZGxlIGZhaWx1cmUgb2YKCXN5c2NvbmYgYW5kIHBpY2sgYSBmaXhlZCBzaXplIGJ1ZmZlci4gKEhhcHBlbnMgb24gQ3lnd2luCgkjNjAyNDIpCgpXZWQgU2VwIDE5IDExOjIzOjQxIDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmluOiBFcnJvciBvdXQgaWYgZ2V0dGV4dCBzdXBwb3J0IGlzIG5vdCBmb3VuZC4gKCM1OTM4NikKCjIwMDEtMDktMTkgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnbGliL2d0aHJlYWQuaCAoR1RocmVhZEZ1bmN0aW9ucyk6IEFkZCB0aHJlYWRfZXF1YWwgZnVuY3Rpb24gdG8KCWFsbG93IGZvciBwbGF0Zm9ybSBkZWZpbmVkIGZ1bmN0aW9uIHRvIGNvbXBhcmUgdHdvIHRocmVhZHMuCgoJKiBnbGliL2d0aHJlYWQuYzogVXNlIGdfdGhyZWFkX2Z1bmN0aW9uc19mb3JfZ2xpYl91c2UudGhyZWFkX2VxdWFsCgl3aGVuIG5vbi1OVUxMIGluc3RlYWQgb2YgPT0uCgkKV2VkIFNlcCAxOSAxMDo0NDoyNSAyMDAxICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBSZWxlYXNlZCAxLjMuOC4KClR1ZSBTZXAgMTggMjI6NTc6MzMgMjAwMSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogY29uZmlndXJlLmluIChHTElCX01JQ1JPX1ZFUlNJT04pOiB1cCB2ZXJzaW9uIG51bWJlciB0byAxLjMuOCwKCWludGVyZmFjZSBhZ2UgMCwgYmluYXJ5IGFnZSAwLgoKCSogTkVXUzogdXBkYXRlcy4KClR1ZSBTZXAgMTggMTg6MjM6MDIgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJRml4ZXMgZm9yIGNvbXBpbGF0aW9uIG9uIFNvbGFyaXMgKCM1OTAyNiwgRnJhbmsgQmVsZXcpCgoJKiBnbGliL2dxc29ydC5jIChnX3Fzb3J0X3dpdGhfZGF0YSk6IFVzZSBnX2FsbG9jYSgpLgoKCSogZ2xpYi9naW9jaGFubmVsLmMgKGdfaW9fY2hhbm5lbF9yZWFkX3RvX2VuZCk6IEZpeCB1c2UKCW9mIHRlcm5hcnkgb24gbGVmdC1oYW5kLXNpZGUuCgoJKiBjb25maWd1cmUuaW46IEhhbmRsZSB0aGUgYWNfY3Zfd29ya2luZ19hbGxvY2FfaCB2YXJpYWJsZQoJc2V0IGJ5IGF1dG9jb25mLTIuNXguCgpUdWUgU2VwIDExIDE4OjUwOjQ0IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogbTRtYWNyb3MvZ2xpYi1nZXR0ZXh0Lm00IGFjaW5jbHVkZS5tNDogUmVtb3ZlIGNvbW1lbnRlZAoJb3V0IHNlY3Rpb25zIGZvciBjbGFyaXR5LgoKVHVlIFNlcCAxOCAxODoxOTozMyAyMDAxICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiB0ZXN0cy90ZXN0Z2xpYi5jOiBhZGQgc2ltcGxlIHRlc3QgZm9yIGdfcGF0aF9nZXRfYmFzZW5hbWUoKS4KCgkqIGdsaWIvZ2ZpbGV1dGlscy5jIChnX2ZpbGVfb3Blbl90bXApOiAKCSogZ2xpYi9nc3RyZnVuY3MuYyAoZ19zdHJlcnJvcik6IHNjcmF0Y2ggZXJyb25lb3VzIHVzYWdlcwoJb2YgImlsbGVnYWwiLgoKMjAwMS0wOS0xOCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbGliL2dtYWluLmMKCSogZ2xpYi9naW93aW4zMi5jOiBNYXJrIHRoZSBfZnVuY3MgdGFibGVzIGZvciBleHBvcnQuCgoJKiBnbGliL2dsaWIuZGVmOiBBZGQgaGVyZSwgdG9vLgoKCSogZ2xpYi9nd2luMzIuYyAoZ2V0X3BhY2thZ2VfZGlyZWN0b3J5X2Zyb21fbW9kdWxlKTogTm8gcmVhc29uIHRvCgljaGVjayBmb3IgdGhlIG1vZHVsZSBiZWluZyBpbiBhIGJpbiBvciBsaWIgZGlyZWN0b3J5IG9ubHkgd2hlbgoJbW9kdWxlX25hbWUgaXMgbm9uLU5VTEwuCgoJKiBnbGliL2d3aW4zMi5jIChnX3dpbjMyX2dldF9wYWNrYWdlX2luc3RhbGxhdGlvbl9kaXJlY3RvcnkpOgoJQ2hlY2sgZmlyc3QgaW4gSEtFWV9DVVJSRU5UX1VTRVIsIHRoZW4gaW4gSEtFWV9MT0NBTF9NQUNISU5FLgoKMjAwMS0wOS0xNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBiZW50c3Bvb24uY29tPgoKCSogdGVzdHMvc3RyZnVuYy10ZXN0LmM6IChtYWluKTogQ2hhbmdlIHNvIHRoYXQgaXQgd29ya3MKCW9uIHBsYXRmb3JtcyB3aGVyZSBpc2FscGhhIGlzIGEgbWFjcm8gb25seSwgd2l0aG91dCB0aGUKCWNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gdGhhdCB0aGUgQyBzdGFuZGFyZCByZXF1aXJlcy4KCUFsc28gZWxpbWluYXRlIHRoZSBtdWx0aXBsZSBsaXN0cyBvZiBjdHlwZSBmdW5jdGlvbnMuCgoJKiB0ZXN0cy8uY3ZzaWdub3JlOiBJZ25vcmUgdGhlIG5ldyB0ZXN0LgoKMjAwMS0wOS0xNyAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBjb25maWd1cmUuaW46IEFkZCB2YXJpYWJsZSBmb3IgTFRfQ1VSUkVOVCBtaW51cyBMVF9BR0UgKHRoZQoJc3VmZml4IHVzZWQgYnkgbGlidG9vbCBvbiBXaW4zMiBmb3IgRExMcykuIFNldCB2YXJpYWJsZXMgZm9yIHRoZQoJY29tcGlsZWQgcmVzb3VyY2UgZmlsZXMgb24gV2luZG93cy4gSGFuZGxlIHRoZSBuYXRpdmUgV2luMzIKCXRocmVhZHMgZ21vZHVsZS4KCgkqIGdsaWIvTWFrZWZpbGUuYW0KCSogZ21vZHVsZS9NYWtlZmlsZS5hbQoJKiBnb2JqZWN0L01ha2VmaWxlLmFtOiAoV2luMzIpIEFkZCBoYWNrcyB0byBsaW5rIGluIHRoZSBvYmplY3QKCWZpbGUgcHJvZHVjZWQgZnJvbSB0aGUgcmVzb3VyY2UgZmlsZS4gVXNlIHRoZSBsdC1jb21waWxlLXJlc291cmNlCglzY3JpcHQgZnJvbSB0aGUgYnVpbGQgbW9kdWxlLiBUaGUgbm9uLWhhY2sgd2F5IHdvdWxkIGJlIHRvIHRlYWNoCglsaWJ0b29sLCBhdXRvY29uZiBhbmQgYXV0b21ha2UgYWJvdXQgLnJjIGZpbGVzICh3aGljaCBhcmUgYSBraW5kCglvZiBzb3VyY2UgY29kZSwgYWZ0ZXIgYWxsLCB0aGF0IGdldHMgY29tcGlsZWQgdG8gb2JqZWN0CglmaWxlcykuIEJ1dCB0aGVuIHRoZXJlIHdvdWxkIGJlIHByb2JsZW1zIHdpdGggdGhvc2Ugd2hvIGRvbid0IGhhdmUKCWJsZWVkaW5nIGVkZ2UgYXV0byogYW5kIGxpYnRvb2wuCgoJKiBnbGliL2dsaWIuZGVmCgkqIGdvYmplY3QvZ29iamVjdC5kZWY6IFVwZGF0ZXMuCgoJKiBnbGliL2dsaWIucmMuaW4KCSogZ21vZHVsZS9nbW9kdWxlLnJjLmluCgkqIGdvYmplY3QvZ29iamVjdC5yYy5pbgoJKiBndGhyZWFkL2d0aHJlYWQucmMuaW46IFVwZGF0ZSBJbnRlcm5hbE5hbWUgYW5kIE9yaWdpbmFsRmlsZW5hbWUgdG8KCW1hdGNoIGxpYnRvb2wncyBuYW1pbmcgY29udmVudGlvbiBmb3IgRExMcy4KCgkqIGdsaWIvZ3V0aWxzLmM6IERpdHRvIHdoZW4gY29uc3RydWN0aW5nIHRoZSBETEwgbmFtZSBpbiB0aGUKCWRlZmluaXRpb24gZm9yIEdMSUJfTE9DQUxFX0RJUi4KCgkqIGdsaWIvbWFrZWZpbGUubWluZ3cuaW4KCSogZ21vZHVsZS9tYWtlZmlsZS5taW5ndy5pbgoJKiBnb2JqZWN0L21ha2VmaWxlLm1pbmd3LmluCgkqIGd0aHJlYWQvbWFrZWZpbGUubWluZ3cuaW46IFVwZGF0ZSBpbXBvcnQgbGlicmFyeSBuYW1lcy4KCQpGcmkgU2VwIDE0IDIwOjM0OjI3IDIwMDEgIE1hdHRoaWFzIENsYXNlbiAgPG1hdHRoaWFzY0Bwb2V0LmRlPgoKCSogZ2xpYi9nY29udmVydC5jIChnX2ZpbGVuYW1lX2Zyb21fdXJpKTogUmVwbGFjZSBgaXMgY29udGFpbnMnCglieSBgY29udGFpbnMnIGluIHR3byBlcnJvciBtZXNzYWdlcy4gKCM2MDM5NSkKCjIwMDEtMDktMTAgIFJvbiBTdGVpbmtlICA8cnN0ZWlua2VAdy1saW5rLm5ldD4KCgkqIGdsaWIvZ2lvY2hhbm5lbC5oIGdsaWIvZ2lvY2hhbm5lbC5jOiBBZGRlZCBhIGxlbmd0aCBhcmd1bWVudAoJdG8gZ19pb19jaGFubmVsX1tzZXQsZ2V0XV9saW5lX3Rlcm0oKSwgYWxsb3dpbmcgZW1iZWRlZCBudWxscwoJYW5kIGJpbmFyeSBzYWZlIGxpbmUgdGVybWluYXRpb24gc3RyaW5ncwoKCSogZ2xpYi9naW9jaGFubmVsLmM6IEdvdCByaWQgb2YgYSBjb21waWxlIHdhcm5pbmcgaW4KCWdfaW9fY2hhbm5lbF93cml0ZV9jaGFycygpCgpNb24gU2VwIDEwIDE3OjEzOjM2IDIwMDEgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdsaWIvZ21lc3NhZ2VzLmg6IGdvdCByaWQgb2YgZ19zZXRfZXJyb3JfaGFuZGxlcigpLAoJZ19zZXRfd2FybmluZ19oYW5kbGVyKCksIGdfc2V0X21lc3NhZ2VfaGFuZGxlcigpLgoKTW9uIFNlcCAxMCAxMTo0Mjo1OCAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ3V0ZjguYyBnbGliL2dzdHJpbmcuYyBnbGliL2dmaWxldXRpbHMuYyBnbGliL2dtYWluLmM6IAoJRG9jIGZpeGVzLgoKU2F0IFNlcCAgOCAxNzoxNDo1MSAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ2ZpbGV1dGlscy5bY2hdOiBBZGQgZ19idWlsZF9wYXRoKCksIAoJZ19idWlsZF9maWxlbmFtZSgpLCB0byBjcmVhdGUgc2VwYXJhdGVkIHBhdGhzLCAKCXN1cHByZXNzaW5nIGR1cGxpY2F0ZSBzZXBhcmF0b3JzLCBmcm9tIHZhcmFyZ3MKCWxpc3RzLgoKCSogdGVzdHMvc3RyZnVuYy10ZXN0LmM6IEFkZCB0ZXN0cyBmb3IgZ19idWlsZF9wYXRoKCksCglnX2J1aWxkX2ZpbGVuYW1lKCkuCgpTYXQgU2VwICA4IDE0OjExOjUzIDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi9NYWtlZmlsZS5hbSAobGliZ2xpYl8xXzNfbGFfU09VUkNFUyk6IEFkZAoJZ2JzZWFyY2hhcnJheS5bY2hdLgoKCSogZ2xpYi9nbGliLW9iamVjdC5oOiBSZW1vdmUgaW5jbHVkZSBvZiBnYnNlYXJjaGFycmF5LiAKCk1vbiBTZXAgIDMgMjM6Mjk6NTEgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBWZXJzaW9uIDEuMy43CgoJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IERpc3RyaWJ1dGUgcG8vcG8ydGJsLnNlZC5pbgoKCSogTWFrZWZpbGUuYW06IFJlbW92ZSByZWZlcmVuY2VzIHRvIGdsaWIucmNbLmluXQoKCSogTkVXUzogVmFyaW91cyBhZGRpdGlvbnMuCgoyMDAxLTA5LTA0ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIFJFQURNRS53aW4zMjogVXBkYXRlLiBEb24ndCBtZW50aW9uIHB0aHJlYWRzLgoKCSogYnVpbGQtZGxsOiBSZW1vdmUsIG1vdmVkIHRvIHRoZSBidWlsZCBtb2R1bGUuCgoJKiBnbGliY29uZmlnLmgud2luMzIuaW46IERvbid0IG1lbnRpb24gcHRocmVkcyBoZXJlLCBlaXRoZXIuCgoJKiBnbGliL2dzdHJmdW5jcy5jOiBNYXJrIHRoZSBjb3JyZWN0IHZhcmlhYmxlIGZvciBleHBvcnQgZnJvbSBETEwuCgoJKiBnbGliL2dpb3dpbjMyLmMgKGdfaW9fd2luMzJfbXNnX2NyZWF0ZV93YXRjaCk6IE93ZW4gZm9yZ290IHRvCglyZW5hbWUgdGhlIHdpbjMyX3dhdGNoX2Z1bmNzIHZhcmlhYmxlIGhlcmUsIHRvby4KCgkqICovbWFrZWZpbGUubWluZ3cuaW46IERvbid0IHVzZSB2ZXJzaW9uIG51bWJlciBpbiBpbXBvcnQgbGlicmFyeQoJbmFtZS4gVXNlIHdob2xlIHZlcnNpb24gbnVtYmVyIGluIERMTCBuYW1lLiBVc2UgYnVpbGQtZGxsIGZyb20gdGhlCglidWlsZCBtb2R1bGUuCgpUdWUgU2VwICA0IDAxOjUwOjI0IDIwMDEgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIE5FV1M6IHVwZGF0ZXMgZm9yIDEuMy43IHJlbGVhc2UuCgpNb24gQXVnIDI3IDE0OjU2OjEyIDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi9nbWFpbi5oOiBBZGQgY2xvc3VyZV9tYXJzaGFsL2Nsb3N1cmVfY2FsbGJhY2sKCWZpZWxkcyB0byBHU291cmNlRnVuY3MgZm9yIHVzZSBieSBnX3NvdXJjZV9zZXRfY2xvc3VyZSgpLgoKCSogZ2xpYi9nbWFpbi5jIGdsaWIvZ2lvdW5peC5jIGdsaWIvZ2lvd2luMzIuYyAKCSAgZ2xpYi9nbWFpbi5oOiBFeHBvcnQgdGhlIFNvdXJjZUZ1bmNzIHZ0YWJsZXMgc28gR09iamVjdAoJY2FuIHVzZSB0aGVtIHRvIGZpZ3VyZSBvdXQgY2xvc3VyZSBjYWxsYmFja3MvbWFyc2hhbGxlcnMKCWZvciB0aGUgZGVmYXVsdCBzb3VyY2UgdHlwZXMuCgpTdW4gU2VwICAyIDEzOjA1OjUzIDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi9nc3RyZnVuY3MuYyAoZ19zdHJjaG9tcCk6IFJlcGxhY2Ugc29tZSB1c2VzCglvZiBpc3NwYWNlKCkgd2l0aCBnX2FzY2lpX2lzc3BhY2UoKS4KCgkqIGdsaWIvZ3V0ZjguYyBnbGliL2d1bmljb2RlLmggZ2xpYi9nc3RyZnVuY3MuW2NoXTogQWRkCglleHRyYSBpbmRpcmVjdGlvbnMgdG8gZ191dGY4X3NraXAgYW5kIGdfYXNjaWlfdGFibGUgdG8KCWF2b2lkIGdyZWF0IHdob3BwaW5nIGNvcHkgcmVsb2NzLgoKU3VuIFNlcCAgMiAxMToxMDo0MiAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ2VuLXVuaWNvZGUtdGFibGVzLnBsIGdsaWIvZ3VuaWNvbXAuaAoJZ2xpYi9ndW5pY2hhcnRhYmxlcy5oIGdsaWIvZ2lvdW5peC5jOiBGaXggc29tZSB2YXJpYWJsZXMgdGhhdCAKCXNob3VsZCBoYXZlIGJlZW4gc3RhdGljLgoKMjAwMS0wOC0zMCAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdsaWIvZ3RocmVhZC5oLCBnbGliL2d0aHJlYWQuYzogQWRkICd3YW50X3RvX3JlYWQnIHRvCglHU3RhdGljUldMb2NrIHRvIGF2b2lkIGNhbGxpbmcgZ19jb25kX2Jyb2FkY2FzdCwgd2hlbiBubyBvbmUgaXMKCXdhaXRpbmcuCgoJKiBnbGliL2dtYWluLmMgKGdfbWFpbl9jb250ZXh0X2FkZF9wb2xsX3VubG9ja2VkKTogRG9uJ3QgZnJlZQoJY2FjaGVkX3BvbGxfYXJyYXksIHdoZW4gYWRkaW5nIG5ldyBwb2xsJ3MuIFRoaXMgaXMgdGFrZW4gY2FyZSBmb3IKCWluIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGUuCgoyMDAxLTA4LTMwICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCglBZnRlciBiZWluZyBhd2F5IGZvciBhYm91dCBmaXZlIG1vbnRocywgSSdtIGJhY2sgd29ya2luZyBvbgoJdGhpcy4uLiAgRm9yIG5vdywgc3RpbGwgdXNpbmcgc2FtZSBidWlsZCBzZXR1cCBmb3IgV2luMzIuIFByb2JhYmx5Cgl3aWxsIGNoYW5nZSB0byBub3QgaW5jbHVkaW5nIHZlcnNpb24gbnVtYmVycyBpbiB0aGUgaW1wb3J0IGxpYnJhcnkKCW5hbWVzLCB0aG91Z2guIChCdXQgdGhlIERMTCBuYW1lcyB3b3VsZCBzdGlsbCBpbmNsdWRlIHRoZW0sCglwb3NzaWJseSBldmVuIGFsc28gdGhlIG1pY3JvIHZlcnNpb24gbnVtYmVyLikgVGhhdCB3b3VsZCBiZSBtb3JlCglVbml4LWxpa2UuIEFsc28sIHdpbGwgaGF2ZSB0byBjaGVjayBvdXQgbmV3ZXN0IG1pbmd3IHRvb2wgdmVyc2lvbnMKCXRvIHNlZSBpZiB0aGUgYnVpbGQtZGxsIHNjcmlwdCBub3cgY2FuIGJlIHJldGlyZWQuCgkKCSogbWFrZWZpbGUubWluZ3cKCSogbWFrZWZpbGUubXNjOiBOZXcgZmlsZXMsIG5vIG5lZWQgdG8gZ2VuZXJhdGUgZnJvbSAuaW4gYXMKCXRoZXkgZG9uJ3QgY29udGFpbiByZWZlcmVuY2VzIHRvIGF1dG9tYWtlIHZhcmlhYmxlcy4KCQoJKiBtYWtlZmlsZS5taW5ndy5pbgoJKiBtYWtlZmlsZS5tc2MuaW46IFJlbW92ZWQuCgkKCSogZ2xpYi5yYy5pbjogUmVtb3ZlCgkqIGdsaWIvZ2xpYi5yYy5pbjogTW92ZWQgaGVyZS4KCQoJKiBNYWtlZmlsZS5hbQoJKiBnbGliL01ha2VmaWxlLmFtOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCgoJKiBnbGliL2dsaWIuZGVmOiBGaXggdHlwbywgYWRkIG5ldyBlbnRyaWVzLgoKCSogZ2xpYi9nc3Bhd24td2luMzItaGVscGVyLmM6IE1vcmUgZGVidWdnaW5nLiBEb2Vzbid0IHdvcmsKCWN1cnJlbnRseSAob3IgdGhlbiBpdCBuZXZlciBoYXMgb24gV2luMmssIHdoaWNoIEkgbm93IHVzZT8pCgoJKiBnbGliL2dzdHJmdW5jcy5jCgkqIGdsaWIvZ3N0cmZ1bmNzLmg6IE1hcmsgZ19hc2NpaV90YWJsZSBmb3IgZXhwb3J0L2ltcG9ydCBvbiBXaW4zMi4KCgkqICovbWFrZWZpbGUubWluZ3cuaW46IFJlZmxlY3QgbmV3IGxvY2F0aW9uIG9mIGdsaWIgbGlicmFyeS4KCQoyMDAxLTA4LTMwICBNaWNoYWVsIE5hdHRlcmVyICA8bWl0Y2hAZ2ltcC5vcmc+CgoJKiBnbGliL2dpb2NoYW5uZWwuaDogKHN0cnVjdCBHSU9DaGFubmVsKTogImdib29sZWFuIGZvbyA6IDEiCglyZXN1bHRzIGluIFRSVUUgYmVpbmcgLTEgb25jZSBhc3NpZ25lZCwgdXNlICJndWludCBmb28gOiAxIgoJaW5zdGVhZC4KCjIwMDEtMDgtMjcgIERhcmluIEFkbGVyICA8ZGFyaW5AYmVudHNwb29uLmNvbT4KCgkqIGdsaWIvZ2NvbnZlcnQuaDoKCSogZ2xpYi9nY29udmVydC5jOiAoZ19maWxlbmFtZV9mcm9tX3VyaSk6CglVcGRhdGVkIG5hbWUgb2YgZXJyb3IgZnJvbSBHX0NPTlZFUlRfRVJST1JfTk9UX0xPQ0FMX0ZJTEUgdG8KCUdfQ09OVkVSVF9FUlJPUl9OT1RfQUJTT0xVVEVfRklMRV9VUkkuCgkKCSogdGVzdHMvLmN2c2lnbm9yZToKCSogdGVzdHMvdXJpLXRlc3QuYzoKCUFkZGVkIGEgbG90IG1vcmUgdGVzdCBmb3IgdGhlIG5ldyBVUkkgZnVuY3Rpb25zLCBpbmNsdWRpbmcgYQoJbnVtYmVyIHRoYXQgc2VlbSB0byBpbmRpY2F0ZSBzb21lIG1pbm9yIGJ1Z3MuCgoyMDAxLTA4LTI2ICBBbGV4IExhcnNzb24gIDxhbGV4bEByZWRoYXQuY29tPgoKCSogZ2xpYi9nY29udmVydC5bY2hdIChnX2ZpbGVuYW1lX2Zyb21fdXJpLAoJZ19maWxlbmFtZV90b191cmkpOiBOZXcgZnVuY3Rpb25zIHRvIGNvbnZlcnQKCWJldHdlZW4gbG9jYWwgcGFodG5hbWVzIGFuZCBmaWxlOiB1cmlzLgoKCSogdGVzdHMvTWFrZWZpbGUuYW06CgkqIHRlc3RzL3VyaS10ZXN0LmM6CglUZXN0cyBmb3IgdGhlIG5ldyBmdW5jdGlvbnMuCgoyMDAxLTA4LTI1ICBBbGV4YW5kZXIgTGFyc3NvbiAgPGFsbGFAbHlzYXRvci5saXUuc2U+CgoJKiBnbGliL2dzdHJmdW5jcy5bY2hdOgoJKiBkb2NzL3JlZmVyZW5jZS9nbGliL2dsaWItb3ZlcnJpZGVzLnR4dDoKCSogZG9jcy9yZWZlcmVuY2UvZ2xpYi9nbGliLXNlY3Rpb25zLnR4dDoKCSogZG9jcy9yZWZlcmVuY2UvZ2xpYi90bXBsL3N0cmluZ191dGlscy5zZ21sOgoJSW1wbGVtZW50IGFuZCBkb2N1bWVudCBnX2FzY2lpX2lzeHh4LgoKCSogdGVzdHMvc3RyZnVuYy10ZXN0LmM6CglBZGQgdGVzdHMgZm9yIGdfYXNjaWlfaXN4eHgKCQoJKiBnbGliL2d1bmlwcm9wLmMgKGdfdW5pY2hhcl9pc3B1bmN0KToKCWluY2x1ZGUgc3ltYm9scywgbm90IGp1c3QgcHVuY3R1YXRpb24uCgkoZ191bmljaGFyX2lzc3BhY2UpOiBWZXJ0aWNhbCB0YWIgaXMgbm90Cgljb25zaWRlcmVkIHdoaXRlc3BhY2UuCgkKCSogdGVzdHMvc2hlbGwtdGVzdC5jOgoJT3V0cHV0IGVycm9ycyBvbiBzdGRlcnIKCjIwMDEtMDgtMjQgIEFsZXhhbmRlciBMYXJzc29uICA8YWxsYUBseXNhdG9yLmxpdS5zZT4KCgkqIGdsaWIvZ2NvbnZlcnQuW2NoXSAoZ19jb252ZXJ0X3dpdGhfaWNvbnYpOgoJTmV3IGZ1bmN0aW9uLCBkb2luZyB0aGUgc2FtZSBhcyBnX2NvbnZlcnQgYnV0IHRha2luZwoJYSBHSUNvbnYgYXJndW1lbnQuIFRoZSBvbGQgZ19jb252ZXJ0IGlzIGp1c3QKCWEgY2FsbCB0byB0aGlzIHdpdGggYSBuZXdseSBvcGVuZWQgR0lDb252LgoKMjAwMS0wOC0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBiZW50c3Bvb24uY29tPgoKCSogdGVzdHMvc2hlbGwtdGVzdC5jOiAoY2hlY2tfc3RyaW5nX3Jlc3VsdCk6IEZpeCBiYWQgaW5kZW50aW5nLgoJSSBmaWd1cmVkIEkgc2hvdWxkIGZpeCB0aGlzIHNpbmNlIEkganVzdCBwb2ludGVkIEFsZXggaGVyZSB0bwoJbG9vayBhdCB0aGlzIGFzIGFuIGV4YW1wbGUuCgoyMDAxLTA4LTI0ICBSb24gU3RlaW5rZSAgPHJzdGVpbmtlQHctbGluay5uZXQ+CgoJKiBnbGliL2dpb2NoYW5uZWwuYzogTWF0dGhpYXMgQ2xhc2VuJ3MgZml4IGZvcgoJdGhlIGJ1ZmZlciBjb3JydXB0aW9uIGJ1ZyBieSBzZXR0aW5nIG91dGJ1ZiBfYWZ0ZXJfCgl0aGUgY2FsbCB0byBnX3N0cmluZ19zZXRfc2l6ZSgpCgoJKiBnbGliL2dpb2NoYW5uZWwuYzoga2VwdCB0aGUgYnVmZmVycyBmcm9tIHBlcnBldHVhbGx5Cglncm93aW5nIGJ5IHN1YnRyYWN0aW5nIDEgZnJvbSBhbGxvY2F0ZWRfbGVuIGluIHRoZSBjYWxjdWxhdGlvbgoJb2YgYXZhaWxhYmxlIHNwYWNlIHRvIGFjY291bnQgZm9yIHRoZSBudWxsIGF0IHRoZSBlbmQgb2YgdGhlCglidWZmZXIKCgkqIGdsaWIvZ2lvY2hhbm5lbC5jOiBmaXhlZCBnX2lvX2NoYW5uZWxfd3JpdGVfY2hhcnMoKQoJdG8gbm90IHdyaXRlIG1vcmUgdGhhbiBzcGFjZV9pbl9idWYgYnl0ZXMgZm9yIHRoZSBVVEYtOCBjYXNlCgpGcmkgQXVnIDI0IDExOjE1OjQ2IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi9nc3RyZnVuY3MuYyBkb2NzL0NoYW5nZXMtMi4wLnR4dDogUGF0Y2ggZnJvbSBEYXJpbgoJQWRsZXIgdG8gcmVzdG9yZSBHbGliLTEuMiBoYW5kbGluZyBvZiBlbXB0eSBzdHJpbmdzLAoJYW5kIHRvIGZpeCBvZmYtYnktb25lIHdpdGggQG1heF90b2tlbnMuICgjNTc2NjMpLgoJRG9jIGltcHJvdmVtZW50cy4KCgkqIHRlc3RzL3N0cmZ1bmMtdGVzdC5jOiBDaGFuZ2UgdGVzdHMgdG8gY29ycmVzcG9uZCB0bwoJbmV3IGJlaGF2aW9yIG9mIGdfc3Ryc3BsaXQoKS4KClRodSBBdWcgMjMgMTE6MDk6NTggMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbGliL2doYXNoLmMgKGdfaGFzaF90YWJsZV9mb3JlYWNoX3JlbW92ZV9vcl9zdGVhbCk6IAoJUGF0Y2ggZnJvbSBKb3NoIFByaXRpa2luIHRvIGZpeCByZXZlcnNlZCBrZXkgYW5kIHZhbHVlIGRlc3Ryb3kgCglmdW5jdGlvbnMuICgjNTk0MzMpCgoJKiBnbGliL2dpb2NoYW5uZWwuaCAoc3RydWN0IF9HSU9DaGFubmVsKTogTWFyayBzdHJ1Y3R1cmUKCS8qPCBwcml2YXRlID4qLwoKVGh1IEF1ZyAyMyAxNjoxNDoxNyAyMDAxICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbGliL2dtYWNyb3MuaCAoR19HTlVDX05PX0lOU1RSVU1FTlQpOiBuZXcgbWFjcm8uCgoyMDAxLTA4LTIxICBBYmVsIENoZXVuZyAgPG1hZGRvZ0BsaW51eC5vcmcuaGs+CgoJKiBjb25maWd1cmUuaW46IEFkZGVkICJ6aF9UVyIgdG8gQUxMX0xJTkdVQVMuCgoyMDAxLTA4LTIwICBTdmVuIE5ldW1hbm4gIDxzdmVuQGdpbXAub3JnPgoKCSogTWFrZWZpbGUuYW06IGFkZGVkIHBvIHRvIFNVQkRJUlMKClN1biBBdWcgMTkgMjE6MzI6MzkgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbGliL2doYXNoLmM6IEVsaW1pbmF0ZSB1c2Ugb2YgZmxvYXRpbmcgcG9pbnQgd2hlbiAKCWRldGVybWluaW5nIGlmIHRoZSBoYXNoIHRhYmxlIG5lZWRzIHRvIGJlIHJlc2l6ZWQsCglhbmQgYWxzbyBmYWN0b3Igb3V0IHRoZSB0ZXN0IGZyb20gZ19oYXNoX3RhYmxlX3Jlc2l6ZSgpCgl0byBzYXZlIGZ1bmN0aW9uIGNhbGxzIGZvciB0aGUgY29tbW9uIGNhc2UuCgkoIzU5MTI0KQoKCSogZ2xpYi9nbWFpbi5jIChnX21haW5fY29udGV4dF9xdWVyeSk6IERvY3VtZW50IHRoZQoJcmV0dXJuIHZhbHVlLgoKMjAwMS0wOC0xOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBiZW50c3Bvb24uY29tPgoKCSogZ2xpYi9nc2hlbGwuYzogKGdfc2hlbGxfcXVvdGUpOiBBZGRlZCBtaXNzaW5nIFwgY2hhcmFjdGVyLgoKCSogdGVzdHMvc2hlbGwtdGVzdC5jOiAoY2hlY2tfc3RyaW5nX3Jlc3VsdCksICh0ZXN0X3NoZWxsX3VucXVvdGUpLAoJKG1haW4pOiBBZGRlZCB0ZXN0cyBmb3IgZ19zaGVsbF9xdW90ZSBhbmQgZ19zaGVsbF91bnF1b3RlLgoKMjAwMS0wOC0xOSAgRmF0aWggRGVtaXIgPGthYmFsYWtAZ3RyYW5zbGF0b3Iub3JnPgoKCSogY29uZmlndXJlLmluOiBBZGRlZCAidGEiIHRvIHRoZSBsYW5ndWFnZXMgbGlzdC4KCjIwMDEtMDgtMTkgIEhhdm9jIFBlbm5pbmd0b24gIDxocEBwb2JveC5jb20+CgoJKiBnbGliL2dzaGVsbC5jIChnX3NoZWxsX3VucXVvdGUpOiBhZGQgY29tbWVudCBhYm91dCBzaGVsbCBxdW90aW5nCglydWxlcyB0byB0aGUgZG9jcy4KCjIwMDEtMDgtMTYgIFJvbiBTdGVpbmtlICA8cnN0ZWlua2VAdy1saW5rLm5ldD4KCgkqIGdsaWIvZ2lvdW5peC5jOiBmaXhlZCBhbiBlcnJvciBpbiBzZXR0aW5nIGNsb3NlX29uX3VucmVmCglpbiBnX2lvX2NoYW5uZWxfbmV3X2ZpbGUgKCkKCjIwMDEtMDgtMTYgIFJvbiBTdGVpbmtlICA8cnN0ZWlua2VAdy1saW5rLm5ldD4KCgkqIGdsaWIvZ2lvY2hhbm5lbC5jIGdsaWIvZ2xpYi5kZWYgZ2xpYi9naW9jaGFubmVsLmg6IEFkZGVkCgluZXcgZnVuY3Rpb25zIGdfaW9fY2hhbm5lbF9bc2V0LGdldF1fY2xvc2Vfb25fdW5yZWYgKCkKCgkqIGdsaWIvZ2lvY2hhbm5lbC5jOiBnbGliL2dpb2NoYW5uZWwuaDogRG9jdW1lbnRhdGlvbiBmaXhlcwoKCSogZ2xpYi9naW9jaGFubmVsLmM6IEZpeGVkIGdfaW9fY2hhbm5lbF93cml0ZV9jaGFycyAoKQoJc28gdGhhdCBieXRlc193cml0dGVuIGlzIGFsd2F5cyBzZXQgdG8gYW4gYXBwcm9wcmlhdGUKCXZhbHVlIHdoZW4gaXQgcmV0dXJucwoKCSogZ2xpYi9naW91bml4LmM6IGNoYW5nZWQgZ19pb19jaGFubmVsX2dldF9mbGFncyAoKSB0bwoJc2V0IHRoZSBpc19yZWFkYWJsZSBhbmQgaXNfd3JpdGVhYmxlIGZsYWdzIGNhY2hlZAoJYnkgdGhlIGNoYW5uZWwKCldlZCBBdWcgMTUgMTE6MDk6NTYgMjAwMSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogTWFrZWZpbGUuYW06IGxldCB0aGUgZ2VuZXJhdGVkIC5wYyBmaWxlcyBkZXBlbmQgb24gY29uZmlnLnN0YXR1cywKCXNvIHRoZXkgZ2V0IGNvcnJlY3RseSByZW1hZGUuCgpTdW4gQXVnIDEyIDIxOjA1OjEzIDIwMDEgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdsaWIvZ21lc3NhZ2VzLmg6IGZpeCBnX3JldHVybl9pZl9mYWlsLCBnX2Fzc2VydCBhbmQgZnJpZW5kcyB0bwoJaGF2ZSBhIGJvZHkgZm9yIEdfRElTQUJMRV9DSEVDS1MgYW5kIEdfRElTQUJMRV9BU1NFUlQuCglmaXhlcyAjNTg4NzMuCgoyMDAxLTA4LTEyICBSb24gU3RlaW5rZSAgPHJzdGVpbmtlQHctbGluay5uZXQ+CgoJKiBnbGliL2dpb2NoYW5uZWwuYzogc2FmZXIgaGFuZGxpbmcgb2YgZXJybm8sIGZpeGVkCglhIGJ1ZyBpbiBhbiBhc3NlcnQKClN1biBBdWcgMTIgMTA6MDk6MDAgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiB0ZXN0cy9pb2NoYW5uZWwtdGVzdC5jIChtYWluKTogRmluZCB0ZXN0IGNhc2UgZm9yCglzcmNkaXIgIT0gYnVpbGRkaXIsIG1pc2NlbGxhbmVvdXMgY2xlYW51cHMuCgoJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IERpc3RyaWJ1dGUgY2FzZWZvbGQudHh0LAoJY2FzZW1hcC50eHQgaW9jaGFubmVsLXRlc3QtaW5maWxlLgoKCSogZ2xpYi0yLjAtdW5pbnN0YWxsZWQucGMuaW46IEZpeCBmb3IgbW92ZSBvZiBnbGliIGZpbGVzCglpbnRvIHN1YmRpci4gKFBvaW50ZWQgb3V0IGJ5IFN0ZXZlIEJha2VyKQoKU2F0IEF1ZyAgNCAwMTowNDowOCAyMDAxICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbGliL2dzY2FubmVyLmMgKGdfc2Nhbm5lcl91bmV4cF90b2tlbik6IGZpeCBJTlQgYW5kIEZMT0FUIHdhcm5pbmdzCglmb3IgaW52YWxpZCB0b2tlbiB2YWx1ZXMuCgoyMDAxLTA4LTEwICBSb24gU3RlaW5rZSAgPHJzdGVpbmtlQHctbGluay5uZXQ+CgoJKiBnbGliL2dpb2NoYW5uZWwuYzogRml4ZWQgYSAic2Vuc2Ugb2YgY29tcGFyaXNvbiIgYnVnLAoJYWRkZWQgYW4gYXNzZXJ0IHRvIGNoZWNrIHdoZW4gZ19pb19jaGFubmVsc19yZWFkX2NoYXJzICgpCglpcyBsb29waW5nIGVuZGxlc3NseSBkdWUgdG8gZW5jb2RlZF9yZWFkX2J1ZiBiZWluZyBjb3JydXB0ZWQuCgoyMDAxLTA4LTA2ICBTdmVuIE5ldW1hbm4gIDxzdmVuQGdpbXAub3JnPgoKCSogZ2xpYi9ndXRpbHMuW2NoXTogYWRkZWQgbmV3IGZ1bmN0aW9uIGdfbnVsbGlmeV9wb2ludGVyKCkuCgkKMjAwMS0wOC0wNSAgUm9uIFN0ZWlua2UgIDxyc3RlaW5rZUB3LWxpbmsubmV0PgoKCSogZ2xpYi9naW9jaGFubmVsLmMgZ2xpYi9naW9jaGFubmVsLmMgZ2xpYi9nbGliLmRlZgoJZG9jcy9yZWZlcmVuY2UvZ2xpYi9nbGliLXNlY3Rpb25zLnR4dDogQWRkZWQgbmV3IGZ1bmN0aW9ucwoJZ19pb19jaGFubmVsX1tyZWFkLHdyaXRlXV91bmljaGFyICgpCgoJKiBnbGliL2dpb2NoYW5uZWwuaDogRmluYWxseSByZW1lbWJlcmVkIHRvIHJlbW92ZSB0aGUKCW9sZCBlcnJvciBtZXNzYWdlIEdfSU9fQ0hBTk5FTF9FUlJPUl9QQ0hBUl9GTFVTSAoKCSogZ2xpYi9naW9jaGFubmVsLmM6IFNvbWUgZml4ZXMgdG8gZ19pb19jaGFubmVsX2ZpbGxfYnVmZmVyICgpCglhbmQgZ19pb19jaGFubmVsX3dyaXRlX2NoYXJzICgpCgoyMDAxLTA4LTA1ICBSb24gU3RlaW5rZSAgPHJzdGVpbmtlQHctbGluay5uZXQ+CgoJKiBnbGliL2dpb2NoYW5uZWwuYzogUmVwbGFjZWQgdGhlIGxvY2FsIHVzZV9idWYgdmFyaWFibGUgd2l0aCBhIG1hY3JvCglpbiBtb3N0IHBsYWNlcy4gVGhpcyBhbGxvd3MgdXMgdG8gY2hlY2sgc29tZSB0aGluZ3Mgd2l0aG91dCB3b3JyeWluZwoJd2hldGhlciB3ZSBoYXZlIGFsbG9jYXRlZCB0aGUgcmVhZCBidWZmZXJzIHlldCwgYW5kIGFsbG93cyB1cyB0byBhbGxvY2F0ZQoJdGhlIGJ1ZmZlcnMgbGF0ZXIgaW4gc29tZSBjYXNlcy4KCgkqIGdsaWIvZ2lvY2hhbm5lbC5jOiBJbnRyb2R1Y2VkIGEgTUFYX0NIQVJfU0laRSBtYWNybywgd2hpY2ggaXMKCXN1cHBvc2VkIHRvIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbGVuZ3RoIGluIGJ5dGVzCglvZiB0aGUgbG9uZ2VzdCBjaGFyYWN0ZXIgaW4gYW55IGVuY29kaW5nLiBUaGlzIGlzIG5lY2Vzc2FyeQoJdG8gZ2V0IHRoZSBtaW5pbXVtIGJ1ZmZlciBzaXplIGZvciBzdWNjZXNzZnVsIHdyaXRpbmcuCgoJKiBnbGliL2dpb2NoYW5uZWwuYzogRml4ZWQgZ19pb19jaGFubmVsX3NldF9lbmNvZGluZyAoKSBzbwoJdGhhdCBpdCBqdXN0IHByaW50cyBhIHdhcm5pbmcgaWYgcGFydGlhbF93cml0ZV9idWYgaXNuJ3QKCWVtcHR5IGluc3RlYWQgb2YgZmFpbGluZy4KCgkqIGdsaWIvZ2lvY2hhbm5lbC5jOiBGaXhlZCBzZXZlcmFsIGZ1bmN0aW9ucyBzbyB0aGV5IGNhbiBhY2NlcHQKCU5VTEwgcGFyYW1ldGVycyBmb3IgcG9pbnRlcnMgdG8gcmV0dXJuIHZhbHVlcy4KCgkqIGdsaWIvZ2lvY2hhbm5lbC5jOiBBbHRlcmVkIHRoZSBlcnJvciBoYW5kbGluZyBmb3IKCWdfaW9fY2hhbm5lbF9yZWFkX2NoYXJzICgpIHRvIG9ubHkgcmV0dXJuIGFuIGVycm9yIGlmCglpdCBkb2Vzbid0IGhhdmUgYW55IGJ1ZmZlcmVkIGRhdGEuCgoJKiBnbGliL2dpb2NoYW5uZWwuYzogUmV3cm90ZSBnX2lvX2NoYW5uZWxfd3JpdGVfY2hhcnMgKCkKCXRvIGZpeCB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlbW92ZSBkdXBsaWNhdGUgc2VjdGlvbnMKCW9mIGNvZGUuCgoJKiBnbGliL2dpb3VuaXguYzogRml4ZWQgZ19pb19jaGFubmVsX25ld19maWxlICgpIHRvCgljYWxsIGZzdGF0ICgpIHRvIHNldCB0aGUgaXNfc2Vla2FibGUgZmxhZywgaW4gY2FzZSBzb21lb25lCgl1c2VzIGl0IG9uIGEgRklGTy4KClN1biBBdWcgIDUgMDg6MjU6MzAgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbGliL2dtYWNyb3MuaDogSW5jbHVkZSBzdGRkZWYuaCBzbyB0aGF0IHdlIHVzZQoJdGhlIHN5c3RlbSdzIGRlZmluaXRpb24gb2YgTlVMTC4gKCM1NDczMCkKCjIwMDEtMDgtMDQgIEFsZXhhbmRlciBMYXJzc29uICAgPGFsZXhsQHJlZGhhdC5jb20+CiAgICAgICAgCgkqIHdpbjMyLWZpeHVwLnBsOiAKCUhhY2t5IHNjcmlwdCB0byBmaXggdXAgeW91ciAubXNjLmluIGZpbGVzIG9uIHdpbmRvd3MuIAoJRHVubm8gaWYgdGhpcyBpcyBhIGdvb2Qgc29sdXRpb24geWV0LgoJCgkqIGJ1aWxkL3dpbjMyL21vZHVsZS5kZWZzOgoJQmFjayBkb3duIGxpYmljb252IHZlcnNpb24gdG8gMS4zLCBzaW5jZSB0aGF0IGlzIHdoYXQgdG9yIGRpc3RyaWJ1dGVzLgoJCgkqIGdsaWIvZ2xpYi5kZWY6CglVcGRhdGUKCgkqIGdvYmplY3QvbWFrZWZpbGUubXNjLmluOgoJYnVpbGQgZ29iamVjdC1xdWVyeS5leGUgYW5kIGdtYXJzaGFsLnN0cmluZ3MsIGFkZCBsaWJpY29udiBkZXBlbmRlbmN5IHRvIGxpbmtsaW5lcy4KCgkqIGdvYmplY3QvbWFyc2hhbC1nZW5zdHJpbmdzLnBsOgoJTmV3IGZpbGUuIHBlcmwgc2NyaXB0IHRvIGdlbmVyYXRlIGdtYXJzaGFsLnN0cmluZ3MuCgkKMjAwMS0wOC0wMyAgUm9uIFN0ZWlua2UgIDxyc3RlaW5rZUB3LWxpbmsubmV0PgoKCSogZ2xpYi9naW9jaGFubmVsLmM6IEZpeGVkIGdfaW9fY2hhbm5lbF9zZWVrX3Bvc2l0aW9uKCkKCXNvIHRoYXQgR19TRUVLX0NVUiBjYW4gYmUgdXNlZCB3aXRoIFVURi04IGVuY29kaW5nCgoJKiBnbGliL2dpb2NoYW5uZWwuYzogQ2hhbmdlZCB0ZXN0IHRvIGRlY2lkZSB3aGV0aGVyCgl1c2VfYnVmIGlzIGVuY29kZWRfcmVhZF9idWYgb3IgcmVhZF9idWYgZnJvbQoJImlmIChjaGFubmVsLT5kb19lbmNvZGUpIiB0byAiaWYgKGNoYW5uZWwtPmVuY29kaW5nKSIgdG8KCWZpeCBidWcgNTg0NzIKCgkqIHRlc3RzL2lvY2hhbm5lbC10ZXN0LmM6IEZpeGVkIHNvIGl0IGRvZXNuJ3Qgb3V0cHV0Cglkb3VibGUgbmV3bGluZXMKCiAgICAgICAgKiBnbGliL2dpb2NoYW5uZWwuYzogRml4ZWQgZ19pb19jaGFubmVsX2ZpbGxfYnVmZmVyKCkKCXNvIHRoYXQgZW5jb2RlZF9yZWFkX2J1ZiBpcyBjcmVhdGVkIGZvciBVVEYtOCBlbmNvZGluZwoKMjAwMS0wOC0wMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBiZW50c3Bvb24uY29tPgoKCSogdGVzdHMvc3RyZnVuYy10ZXN0LmM6IChzdHJ2X2NoZWNrKSwgKG1haW4pOgoJSW1wcm92ZSBzdHJmdW5jIHRlc3QgdG8gdGVzdCB0aGUgc3BsaXQgZnVuY3Rpb24gaW4gYSB3YXkgdGhhdAoJZGVtb25zdHJhdGVzIGl0cyBpZGlvc3luY3Jhc2llcy4KCSogdGVzdHMvLmN2c2lnbm9yZToKCjIwMDEtMDgtMDMgIFN2ZW4gTmV1bWFubiAgPHN2ZW5AZ2ltcC5vcmc+CgoJKiBjb25maWd1cmUuaW46IGJlYXV0aWZpZWQgY29uZmlndXJlIGhlbHAgb3V0cHV0LgoJCgkqIGdsaWIvZ3RyZWUuYzogY2hhbmdlZCBoZWxwIGZvciBnX3RyZWVfaW5zZXJ0KCk7IGl0IHdhcyBtaXNsZWFkaW5nLgoKRnJpIEF1ZyAgMyAxMDoyMDoxMCAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ3VuaXByb3AuYyAoZ191bmljaGFyX3hkaWdpdF92YWx1ZSk6IEZpeCBjb21wdXRhdGlvbgoJKEZpeCBmcm9tIENlc2FyIFJpbmNvbikKCjIwMDEtMDgtMDEgIENocmlzdG9waGVyIEphbWVzIExhaGV5ICA8Y2xhaGV5QHhpbWlhbi5jb20+CgoJKiBnbGliL2d1dGY4LmMgKGdfdXRmOF9maW5kX3ByZXZfY2hhcik6IE1hZGUgZ191dGY4X2ZpbmRfcHJldl9jaGFyCglhYmxlIHRvIHJldHVybiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgc3RyaW5nLgoKMjAwMS0wNy0zMSAgUm9uIFN0ZWlua2UgIDxyc3RlaW5rZUB3LWxpbmsubmV0PgoKCSogZ2xpYi9naW9jaGFubmVsLmg6IENvbW1pdHRlZCB0aGlzIGZpbGUsIHdoaWNoIGlzIHdoZXJlCgl0aGUgY2hhbmdlcyBpbiBteSBwcmV2aW91cyBjaGFuZ2Vsb2cgZW50cnkgaGFwcGVuZWQsCglub3QgZ2lvY2hhbm5lbC5jCgoyMDAxLTA3LTMxICBTdmVuIE5ldW1hbm4gIDxzdmVuQGdpbXAub3JnPgoKCSogZ2xpYi9nbWVtLmM6IGRlY2xhcmUgZ2Jvb2xlYW4gdnRhYmxlX3NldCBzdGF0aWMuCgoyMDAxLTA3LTMwICBSb24gU3RlaW5rZSAgPHJzdGVpbmtlQHctbGluay5uZXQ+CgoJKiBnbGliL2dpb2NoYW5uZWwuYyBkb2NzL3JlZmVyZW5jZS9nbGliL2dsaWItc2VjdGlvbnMudHh0Cgl0ZXN0cy9pb2NoYW5uZWwtdGVzdC5jOiByZW1vdmVkIEdfSU9fQ0hBTk5FTF8qX0xJTkVfVEVSTSBtYWNyb3MKCgkqIGdsaWIvZ2lvY2hhbm5lbC5jIHB1dCAvKjxwdWJsaWM+Ki8gYW5kIC8qPHByaXZhdGU+Ki8gdGFncyBpbgoJdGhlIEdJT0NoYW5uZWwgc3RydWN0dXJlCgoKMjAwMS0wNy0zMCAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogI3VuZGVmIGlubGluZSBiZWZvcmUgdGVzdGluZyB3aGV0aGVyIGl0IHdvcmtzIHRvCglhdm9pZCBmYWxzZSBwb3NpdGl2ZXMuIFBhdGNoIGZyb20gR2FycnkgUi4gT3Nnb29kCgk8Z3Jvc2dvb2RAcmNuLmNvbT4uIEZpeGVzIGJ1ZyAjNTgyNzIuCgoJKiBnbW9kdWxlL2dtb2R1bGUuYyAocGFyc2VfbGlidG9vbF9hcmNoaXZlKTogYnVpbGQgdGhlIGxpYnJhcnkKCW5hbWUgb3Vyc2VsZnMgLi4uIHNvIHdlIGNhbiBsb2FkIHRoZSBsaWJyYXJ5IHNwZWNpZmllZCBhbmQgbm90CgltYW5nbGUgYW55IG5hbWUgbm90IGJlZ2dpbmluZyBpbiAnbGliJy4gUGF0Y2ggZnJvbSBNaWNoYWVsIE1lZWtzCgk8bWljaGFlbEB4aW1pYW4uY29tPi4gRml4ZXMgYnVnICM1ODIyNi4KCjIwMDEtMDctMjkgIFJvbiBTdGVpbmtlICA8cnN0ZWlua2VAdy1saW5rLm5ldD4KCgkqIGdsaWIvZ2lvY2hhbm5lbC5jOiBNYXR0aGlhcyBDbGFzc2VuJ3MgcGF0Y2ggdG8gZ2l2ZQoJZ19pb19jaGFubmVsX2ZsdXNoKCkgdGhlIGNvcnJlY3Qgc2Vuc2Ugd2hlbiB0ZXN0aW5nCgl3aGV0aGVyIHRoZSBidWZmZXIgaXMgZW1wdHkKCSogZ2xpYi9naW91bml4LmM6IE1hdHRoaWFzIENsYXNzZW4ncyBwYXRjaCB0byBzZXQKCXRoZSBtb2RlIG9mIGEgZmlsZSBjcmVhdGVkIHdpdGggZ19pb19jaGFubmVsX25ld19maWxlKCkKClN1biBKdWwgMjkgMTY6MDg6MTcgMjAwMSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ2xpYi9nc2Nhbm5lci5baGNdOiByZW1vdmVkIGRlcHJlY2F0ZWQgZ19zY2FubmVyX3N0YXRfbW9kZSgpLgoKCSogZ2xpYi9nc2Nhbm5lci5jIChnX3NjYW5uZXJfbXNnX2hhbmRsZXIpOiBieSBkZWZhdWx0LCBwcmludCBzY2FubmVyCgllcnJvcnMgYW5kIHdhcm5pbmdzIHRvIHN0ZGVyci4KCjIwMDEtMDctMjcgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnbGliL2d0eXBlcy5oOiBVc2UgR19HTlVDX0VYVEVOU0lPTiBpbnN0ZWFkIG9mCglfX2V4dGVuc2lvbl9fLiBQYXRjaCBmcm9tIFBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+LgoKMjAwMS0wNy0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBiZW50c3Bvb24uY29tPgoKCSogY29uZmlndXJlLmluOgoJKiBtNG1hY3Jvcy9nbGliLTIuMC5tNDoKCVVwZGF0ZSBsb2NhdGlvbiBvZiBwa2djb25maWcgZnJvbSBzb3VyY2Vmb3JnZS5uZXQgdG8gbmV3Cglsb2NhdGlvbiBhdCBmcmVlZGVza29wLm9yZy4KCjIwMDEtMDctMjYgIE1pY2hhZWwgTmF0dGVyZXIgIDxtaXRjaEBjb252ZXJnZW5jZS5kZT4KCgkqIGdvYmplY3QvZ2xpYi1nZW5tYXJzaGFsLmM6IGFkZGVkIGEgInJlbGVhc2VfY2hlY2siIHRvIHRoZQoJT3V0QXJndW1lbnQgc3RydWN0dXJlLCB3aGljaCwgaWYgcHJlc2VudCwgZ2V0cyBpbnRlZ3JhdGVkIGluIHRoZQoJbWFyc2hhbGxlciBjb2RlIGFuZCBwcm90ZWN0cyB1cyBmcm9tIHN0dWZmIGxpa2UKCWdfb2JqZWN0X3VucmVmKE5VTEwpIG9uIG1hcnNoYWxsZXIgcmV0dXJuIHZhbHVlcy4KCjIwMDEtMDctMjMgIFBhZHJhaWcgTydCcmlhaW4gIDxQYWRyYWlnLk9icmlhaW5Ac3VuLmNvbT4KCgkqIGdvYmplY3QvZ29iamVjdG5vdGlmeXF1ZXVlLmM6IGZpeCB1bmNvbmRpdGlvbmFsIGNoZWNrIG9mCglmaXJzdCBHUGFyYW1TcGVjIGluIGdfb2JqZWN0X25vdGlmeV9xdWV1ZV90aGF3KCk7IHByZXZlbnQKCXByb3BlcnR5IG5vdGlmaWNhdGlvbiBiZWluZyBsb3N0CgoyMDAxLTA3LTIzICBSb24gU3RlaW5rZSAgPHJzdGVpbmtlQHctbGluay5uZXQ+CgoJKiBnbGliL2dpb2NoYW5uZWwuYzogZml4ZWQgZ19pb19jaGFubmVsX3NlZWtfcG9zaXRpb24oKSBzbyB0aGF0CglHX1NFRUtfQ1VSIHdvcmtzIGZvciBVVEYtOCBjaGFubmVsIGVuY29kaW5nLCBhbmQgdW5hbGxvY2F0ZWQKCWNvbnZlcnRlcnMgYXJlIG5vdCBmbHVzaGVkIGFmdGVyIHRoZSBzZWVrOyBmaXhlZAoJZ19pb19jaGFubmVsX2dldF9idWZmZXJfY29uZGl0aW9uKCkgc28gdGhhdCBHX0lPX0lOIGlzIG9ubHkKCXNldCBpZiB0aGUgcmVhZCBidWZmZXIgY29udGFpbnMgYXQgbGVhc3Qgb25lIGZ1bGwgY2hhcmFjdGVyCgoyMDAxLTA3LTIzICBTdmVuIE5ldW1hbm4gIDxzdmVuQGdpbXAub3JnPgoKCSogTWFrZWZpbGUuYW06IHJlbW92ZWQgZ2xpYi5kZWYgZnJvbSBFWFRSQV9ESVNUIC4uLgoJKiBnbGliL01ha2VmaWxlLmFtOiAuLi4gYW5kIGFkZGVkIGl0IGhlcmUuCgoyMDAxLTA3LTIyICBIYW5zIEJyZXVlciAgPGhhbnNAYnJldWVyLm9yZz4KCgkqIGdsaWIvZ2lvY2hhbm5lbC5jIChnX2lvX2NoYW5uZWxfZ2V0X2J1ZmZlcl9jb25kaXRpb24pIDogbWFrZQoJdGhlIGNvZGUgYWN0dWFsbHkgaGF2ZSBhbiBlZmZlY3QgKFVzZSB8PSB0byBzZXQgYml0cykuIE5vdAoJYWJzb2x1dGVseSBzdXJlIGlmIGlzIHRoZSByaWdodCBvbmUuCgoJKiBnbGliL2dpb3dpbjMyLmMgKGdfaW9fd2luMzJfPGNoZWNrfHByZXBhcmU+KSA6IGRvbid0IG1vZGlmeQoJd2F0Y2gtPmNvbmRpdGlvbiBidXQgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGJlaGF2aW91ci4KCU5vdyBnaW8tdGVzdCBhcyB3ZWxsIGFzIFRoZSBHaW1wIHdvcmsgYWdhaW4gLi4uCgkKMjAwMS0wNy0yMSAgSGFucyBCcmV1ZXIgIDxoYW5zQGJyZXVlci5vcmc+CgoJKiBnbGliL2dpb3dpbjMyLmMgKGdfaW9fY2hhbm5lbF9uZXdfZmlsZSkgOiBzZXQgdGhlCgljb3JyZXNwb25kaW5nIHAoZXJtaXNzaW9uKW1vZGUgb2YgdGhlIGZpbGUgd2hlbiBjcmVhdGluZywKCW90aGVyd2lzZSBhIHdyb25seSBmaWxlIGNvdWxkbid0IGJlIG92ZXJ3cml0dGVuIChhdCBsZWFzdAoJbm90IG9uIFdpbjl4KS4KCjIwMDEtMDctMjEgIEhhbnMgQnJldWVyICA8aGFuc0BicmV1ZXIub3JnPgoKCSogZ2xpYi9naW93aW4zMi5jIDogaW50aWFsIGltcGxlbWVudGF0aW9uIG9mIG5ldyBBUEkgZnVuY3Rpb25zLgoJTm90IHN1cmUgaWYgaXQgYmVoYXZlcyBhcyBpbnRlbmRlZCAuLi4KCgkqIGdsaWIuZGVmIDogcmVtb3ZlZCwgZ2xpYi9nbGliLmRlZiBpcyB0aGUgZmlsZSB1c2VkIHNpbmNlIG1vdmVkCgkqIGdsaWIvZ2xpYi5kZWYgOiB1cGRhdGVkCgoJKiB0ZXN0cy9tYWtlZmlsZS5tc2MgOiBhZGRlZCBpb2NoYW5uZWwtdGVzdAoKRnJpIEp1bCAyMCAxOToxOToxMCAoVVRDKSAyMDAxICBSb24gU3RlaW5rZSAgPHJzdGVpbmtlQHctbGluay5uZXQ+CgoJKiBnbGliL2dpb2NoYW5uZWwuYzogQVBJIGNoYW5nZXMsIGZpeGVzIHRvCgllcnJvciBoYW5kbGluZywgc29tZSBpbnRlcm5hbCByZXN0cnVjdHVyaW5nCgkqIGdsaWIvZ2lvY2hhbm5lbC5oOiBBUEkgY2hhbmdlcywgZG9jdW1lbnRhdGlvbiBmb3IKCWVsZW1lbnRzIGluIEdJT0NoYW5uZWwgc3RydWN0dXJlCgkqIGdsaWIvZ2lvdW5peC5jOiBNYXRjaGVkIEFQSSBjaGFuZ2VzLCBpbXBsZW1lbnRlZAoJYmFja2VuZCB0byBzZXQgaXNfcmVhZGFibGUsIGlzX3dyaXRlYWJsZSwgaXNfc2Vla2FibGUKCWZsYWdzLCBhZGRlZCBhIHRlc3QgdG8gY2F0Y2ggbGFyZ2UgdmFsdWVzIG9mIGNvdW50Cglmb3Igd2hpY2ggdGhlIGJlaGF2aW9yIG9mIHdyaXRlKCkgaXMgdW5kZWZpbmVkCgkqIGdsaWIvZ2lvd2luMzIuYzogQ2hhbmdlZCB0byBtYXRjaCBuZXcgcHJvdG90eXBlcyBmb3IKCWlvX2Nsb3NlKCkgYW5kIGlvX3NlZWsoKSwgcmVtb3ZlZCByZWZlcmVuY2VzIHRvCglHX0lPX1NUQVRVU19JTlRSLCBzZXQgaXNfc2Vla2FibGUgZmxhZyBpbiBjaGFubmVsCgljcmVhdGlvbiBmdW5jdGlvbnMKCSogZ2xpYi5kZWY6IFJlbmFtZWQgZ19jaGFubmVsX2Vycm9yX3F1YXJrKCkgYW5kCglnX2NoYW5uZWxfZXJyb3JfZnJvbV9lcnJubygpIHRvIGdfaW9fY2hhbm5lbF9lcnJvcl9xdWFyaygpIGFuZAoJZ19pb19jaGFubmVsX2Vycm9yX2Zyb21fZXJybm8oKTsgYWRkZWQgbmV3IGZ1bmN0aW9ucwoJZ19pb19jaGFubmVsX2dldF9idWZmZXJlZCgpIGFuZCBnX2lvX2NoYW5uZWxfc2V0X2J1ZmZlcmVkKCkKCSogZG9jcy9yZWZlcmVuY2UvZ2xpYi9nbGliLXNlY3Rpb25zLnR4dDogTW9kaWZpZWQgaW9jaGFubmVsCglzZWN0aW9uIHRvIHJlZmxlY3QgbmV3IGZ1bmN0aW9ucyBhbmQgQVBJIGNoYW5nZXMKCSogdGVzdHMvaW9jaGFubmVsLXRlc3QuYzogRml4ZWQgdG8gd29yayB3aXRoIEFQSSBjaGFuZ2VzCgkqIHRlc3RzL2lvY2hhbm5lbC10ZXN0LWluZmlsZTogTmV3IGZpbGU7IGlucHV0IGZpbGUKCWZvciBpb2NoYW5uZWwtdGVzdAoJKiB0ZXN0cy91bmljb2RlLWNvbGxhdGUuYyB0ZXN0cy91bmljb2RlLW5vcm1hbGl6ZS5jOgoJQ2hhbmdlZCBHX0lPX0ZJTEVfTU9ERV9SRUFEIHRvICJyIiB0byBtYXRjaCBBUEkgY2hhbmdlCgpGcmkgSnVsIDIwIDE5OjE2OjI0IChVVEMpIDIwMDEgIFJvbiBTdGVpbmtlICA8cnN0ZWlua2VAdy1saW5rLm5ldD4KCgkqIGdvYmplY3QvZ2xpYi1nZW5tYXJzaGFsLmM6IG1vZGlmaWVkIHRvIGNyZWF0ZSBoZWFkZXIgZmlsZXMKCXVzaW5nIEdfW0JFR0lOLEVORF1fREVDTFMgaW5zdGVhZCBvZiAjaWZkZWYgX19jcGx1c3BsdXMgLi4uCgpGcmkgSnVsIDIwIDE0OjExOjI5IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi9ndXRmOC5jIGdsaWIvZ3VuaWRlY29tcC5jOiBzL3NpemVfdC9nc2l6ZS8gdG8gbWF0Y2gKCXByb3RvdHlwZXMuCgpUaHUgSnVsIDE5IDE2OjA1OjIxIDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi9nY29tcGxldGlvbi5jIChnX2NvbXBsZXRpb25fY29tcGxldGUpOiBGaXggbWVtb3J5CglsZWFrIGFuZCBkdWJpb3VzIGxpc3QgbWFuaXB1bGF0aW9uLiAoRm91bmQgYnkgCglSb24gS29lcm5lciwgIzUzNDA4KQoKCSogZ2xpYi9nZmlsZXV0aWxzLmMgKGdldF9jb250ZW50c19zdGRpbyk6IENhbGwgZmNsb3NlKCkKCW9uIEZJTEUgKiBvbiBlcnJvci4gKCM1NzA1NykKCjIwMDEtMDctMjAgIEhhbnMgQnJldWVyICA8aGFuc0BicmV1ZXIub3JnPgoKCSogZ2xpYi9nbGliL2dpb3dpbjMyLmMgOiBtYWtlIGl0IGNvbXBpbGUgYWdhaW4KCgkqIGdsaWIvZ2xpYi5kZWYgOiB1cGRhdGVkIGV4cG9ydHMKCgkqIGdsaWIvbWFrZWZpbGUubXNjLmluIDoKCSogZ2xpYi9tYWtlZmlsZS5taW5ndy5pbiA6IAoJKiB0ZXN0cy9tYWtlZmlsZS5tc2MuaW4gOiByZWZsZWN0IGdsaWIgbW92ZQoKCSogdGVzdHMvbWFpbmxvb3AtdGVzdC5jIDogI2luY2x1ZGUgPGlvLmg+IGZvciBfcGlwZSgpCgoJKiB0ZXN0cy9naW8tdGVzdC5jIDogY2FzdHMgZm9yIHN0cmljdCBjb21waWxlciBzZXR0aW5ncwoKCSogbWFrZWZpbGUubXNjLmluIDogbmV3IG1hc3RlciBtYWtlZmlsZSByZWZsZWN0aW5nIHRoZSBnbGliCgltb3ZlLiBUaGUgJy5pbicgaXNuJ3QgcmVhbGx5IG5lZWRlZCBhbnltb3JlLCBiZWNhdXNlIHRoZXJlCglpcyBubyB2ZXJzaW9uIG51bWJlciBpbiBpdAoKMjAwMS0wNy0xOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBiZW50c3Bvb24uY29tPgoKCSogZ2xpYi9nc3RyZnVuY3MuYzogKGdfYXNjaWlfc3RyZG93biksIChnX2FzY2lpX3N0cnVwKTogQWRkCgltaXNzaW5nIGNvbnN0LgoJKGdfc3Ryc3BsaXQpOiBBZGQgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgZm9yIGNhc2Ugb2YgZW1wdHkKCWRlbGltaXRlciwgd2hpY2ggY2FuIHJlc3VsdCBpbiBhbiBpbmZpbml0ZSBsb29wIG90aGVyd2lzZS4KCSogZ2xpYi9nc3RyZnVuY3MuaDogQWRkIG1pc3NpbmcgY29uc3QuCgkqIHRlc3RzLy5jdnNpZ25vcmU6IElnbm9yZSBhIGdlbmVyYXRlZCBmaWxlLgoJCgkqIHRlc3RzL2FycmF5LXRlc3QuYzoKCSogdGVzdHMvZGlybmFtZS10ZXN0LmM6CgkqIHRlc3RzL2hhc2gtdGVzdC5jOgoJKiB0ZXN0cy9saXN0LXRlc3QuYzoKCSogdGVzdHMvbm9kZS10ZXN0LmM6CgkqIHRlc3RzL3JlbGF0aW9uLXRlc3QuYzoKCSogdGVzdHMvc2hlbGwtdGVzdC5jOgoJKiB0ZXN0cy9zbGlzdC10ZXN0LmM6CgkqIHRlc3RzL3NwYXduLXRlc3QuYzoKCSogdGVzdHMvc3RyZnVuYy10ZXN0LmM6CgkqIHRlc3RzL3N0cmluZy10ZXN0LmM6CgkqIHRlc3RzL3Rlc3RnbGliLmM6CgkqIHRlc3RzL3RyZWUtdGVzdC5jOgoJKiB0ZXN0cy90eXBlLXRlc3QuYzoKCUFkZCBhbiAjdW5kZWYgR19ESVNBQkxFX0FTU0VSVCBzbyBhbGwgdGVzdHMgd2lsbCBhc3NlcnQgZXZlbiBpZgoJYXNzZXJ0cyBhcmUgZGlzYWJsZWQgaW5zaWRlIGdsaWIgaXRzZWxmLgoKRnJpIEp1bCAxMyAxOToyMDowNiAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ3N0cmluZy5jIChnX3N0cmluZ19pbnNlcnQvYXBwZW5kL3ByZXBlbmRfdW5pY2hhcik6CglBZGQgZnVuY3Rpb25zIHRvIGluc2VydCBhIHVuaWNoYXIgYXMgVVRGLTgsIHNpbmNlIHRoaXMKCWlzIHJlYXNvbmFibHkgY29tbW9uLgoKCSogZ2xpYi9ndXRmOC5jIGdsaWIvZ3VuaWNvZGUuaCAoZ191dGY4X2dldF9jaGFyX3ZhbGlkYXRlZCk6CglOZXcgZnVuY3Rpb24gZXhwb3NpbmcgaXRlcmF0aW5nIHRocm91Z2ggcG9zc2libHkgaW52YWxpZC9pbmNvbXBsZXRlCglVVEYtOCB0byB1bmljb2RlIHRvIHRoZSBvdXRzaWRlIHdvcmxkLgoKCSogZ2xpYi9ndXRmOC5jIChnX3V0ZjhfZ2V0X2NoYXJfZXh0ZW5kZWQpOiBGaXggbWF4X2xlbiBhcmd1bWVudAoJdG8gYmUgZ3NzaXplLCBub3QgZ3NpemUuCgoyMDAxLTA3LTE3ICBLamFydGFuIE1hcmFhcyAgPGttYXJhYXNAZ25vbWUub3JnPgoKCSogY29uZmlndXJlLmluOiBBZGRlZCAibm4iIHRvIEFMTF9MSU5HVUFTLgoJCjIwMDEtMDctMTcgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnbGliL2dtYWluLmM6IEFkZCBzb21lIGFzc2VydGlvbnMuIFNpbXBsaWZ5IGFuZCBmaXgKCWdfbWFpbl9jb250ZXh0X3JlbGVhc2UoKS4gRml4IHNvbWUgbG9ja2luZyBidWdzIGluCglnX21haW5fbG9vcF9ydW4oKS4KCjIwMDEtMDctMTIgIE1hcmsgTXVybmFuZSAgPE1hcmsuTXVybmFuZUBzdW4uY29tPgoKCSogZ2xpYi9nbWVzc2FnZXMuYzogQ2hhbmdlZCBwcm90b3R5cGUgb2YgcHJpbnRmX3N0cmluZ191cHBlcl9ib3VuZAoJdG8gcmV0dXJuIGdzaXplLiAgTm93IG1hdGNoZXMgdGhlIGFjdHVhbCBmdW5jdGlvbiBib2R5LgoKCSogZ2xpYi9nc3RyZnVuY3MuYyAoZ19zdHJyc3RyX2xlbik6IENoYW5nZWQgdHlwZSBvZiBwYXJhbWV0ZXIgIzIgCglmcm9tIGdpbnQgdG8gZ3NzaXplLiAgTm93IG1hdGNoZXMgdGhlIHByb3RvdHlwZSBpbiBnc3RyZnVuY3MuaC4KCQoyMDAxLTA3LTExICBEYXJpbiBBZGxlciAgPGRhcmluQGJlbnRzcG9vbi5jb20+CgoJKiAuY3ZzaWdub3JlOiBBZGQgc29tZSBnZW5lcmF0ZWQgZmlsZXMuCgoJKiBnbGliL2dtYWluLmM6IChnX21haW5fY29udGV4dF9pdGVyYXRlKTogQ29tbWVudCBvdXQgY3J1ZnQKCWFmdGVyICNlbmRpZiB0byBhdm9pZCBnY2Mgd2FybmluZy4KCSogZ21vZHVsZS9nbW9kdWxlLmM6IChnX21vZHVsZV9zZXRfZXJyb3JfdW5kdXBlZCk6IFJlbW92ZQoJY29uc3QgZnJvbSB0eXBlIHRvIGF2b2lkIGdjYyB3YXJuaW5nLgoJKiBnb2JqZWN0L2dzaWduYWwuYzogKGdfc2lnbmFsX2VtaXR2KTogaWZkZWYgdmFyaWFibGUgdXNlZAoJb25seSBpZiBHX0VOQUJMRV9ERUJVRyB0byBhdm9pZCBnY2Mgd2FybmluZy4KCSogZ29iamVjdC9ndHlwZS5jOiAodHlwZV9pZmFjZV92dGFibGVfaW5pdF9XbSksCgkodHlwZV9pZmFjZV92dGFibGVfZmluYWxpemVfV20pOiBpZmRlZiBjYWxsIG5lZWRlZCBvbmx5CglpZiAhR19ESVNBQkxFX0FTU0VSVCB0byBhdm9pZCBnY2Mgd2FybmluZy4KCSogdGVzdHMvdGVzdGdsaWIuYzogKG1haW4pOiBpZmRlZiBjYWxsIG5lZWRlZCBvbmx5IGlmCgkhR19ESVNBQkxFX0FTU0VSVCB0byBhdm9pZCBnY2Mgd2FybmluZy4gTWF5YmUgbGF0ZXIgd2UKCXNob3VsZCBtYWtlIHRoZSB0ZXN0IHRvICN1bmRlZiBHX0RJU0FCTEVfQVNTRVJULgoJKiB0ZXN0cy91bmljb2RlLWNvbGxhdGUuYzogQWRkIGluY2x1ZGUgb2YgPHN0cmluZy5oPiB0bwoJYXZvaWQgZ2NjIHdhcm5pbmcuCgpXZWQgSnVsIDExIDExOjEzOjUwIDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi9NYWtlZmlsZS5hbSAobGliZ2xpYl8xXzNfbGFfU09VUkNFUyk6IEFkZCBndW5pY29tcC5oCgkoUmVwb3J0ZWQgYnkgU3ZlbiBOZXVtYW5uKS4KCgkqIGdsaWIvZ3VuaXByb3AuYyAoZ191dGY4X3N0ci91cGRvd24pIGdsaWIvZ3VuaWNvbGxhdGUuYwoJKGdfdXRmOF9jb2xsYXRlX2tleSk6IEZpeCBzaGFkb3dpbmcgcHJvYmxlbXMgcmVwb3J0ZWQgYnkKCW1hbnkgKEQuIEFkbGVyLCBTLiBOZXVtYW5uLCBNLiBNdXJtYW5lLCBMLiBQZXRlcikKCkZyaSBKdWwgIDYgMDA6MDI6NDEgMjAwMSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ2xpYi9nbWVzc2FnZXMuYyAocHJpbnRmX3N0cmluZ191cHBlcl9ib3VuZCk6IGZpeCBuZWdhdGl2ZSBleHBvbmVudAoJaGFuZGxpbmcgKG51bWJlcnM8MCkuCgkKCSogZ2xpYi9ndXRpbHMuaCAoZ19iaXRfc3RvcmFnZSk6IHRha2UgYSBndWxvbmcgYXMgYXJndW1lbnQuCglzYW1lIGZvciBnX2JpdF9udGhfbHNmKCkgYW5kIGdfYml0X250aF9tc2YoKSBhcyBtYXNrLgoKMjAwMS0wNy0wOCAgTWFydGluIEJhdWxpZyAgPGJhdWxpZ0BzdXNlLmRlPgoKCSogdGVzdHMvdW5pY29kZS1ub3JtYWxpemUuYywgdGVzdHMvdW5pY29kZS1jb2xsYXRlLmM6CglSZWZsZWN0IGxhdGVzdCBnX2lvX2NoYW5uZWxfbmV3X2ZpbGUoKSBBUEkgY2hhbmdlcywgdXNlCglHX0lPX0ZJTEVfTU9ERV9SRUFEIGluc3RlYWQgb2YgInIiLgoKRnJpIEp1bCAgNiAyMjozNDozMiAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ3VuaWNvZGUuaCBnbGliL2d1bmlkZWNvbXAuYyBnbGliL2d1bmlwcm9wLmMgCgkgIGdsaWIvZ3VuaWNvbGxhdGUuYzogQWRkIGxlbmd0aCBhcmd1bWVudHMgdG8KCWdfdXRmOF97c3RydXAsc3RyZG93bixjYXNlZm9sZCxjb2xsYXRlX2tleX0uCgoJKiBnbGliL2dkYXRlLmM6IEZpeCBmb3IgYWJvdmUuCgoyMDAxLTA3LTA2ICBQYWJsbyBTYXJhdHhhZ2EgPHBhYmxvQG1hbmRyYWtlc29mdC5jb20+CgoJKiBjb25maWd1cmUuaW46IGFkZGVkIEJhc3F1ZSAoZXUpIHRvIEFMTF9MSU5HVUFTCgpNb24gSnVsICAyIDE5OjQ4OjUyICAyMDAxIEFuZHJldyBMYW5vaXggPGFsYW5vaXhAdW1pY2guZWR1PgoKCSpnaW93aW4zMi5jOiBnX3NvdXJjZV9yZW1vdmUoKWluZyBhbiBzb2NrZXQgaW9jaGFubmVsIGNsb3NlcwoJdGhlIHNvY2tldCB3aGVuIGl0IHNob3VsZCBub3QuIFBhdGNoIGJ5IFBldGVyIFplbGV6bnkgCgk8emVkQGxpbnV4LmNvbT4KCgkqZ2lvd2luMzIuYzogRml4IGEgZmV3IHR5cG9zCgkKTW9uIEp1bCAgMiAxNjowMzoyMSAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIvZ2lvY2hhbm5lbC5jIChnX2lvX2NoYW5uZWxfZ2V0X2J1ZmZlcl9jb25kaXRpb24pOiBGaXguCgoJKiBnbGliL2dpdW5peC5jOiBGaXggcHJlcGFyZS9jaGVjay9kaXNwYXRjaCBmb3Igd2F0Y2hlcy4KCgkqIHRlc3RzL3VuaWNvZGUtbm9ybWFsaXplLmM6ICNpbmNsdWRlIDxzdHJpbmcuaD4KClNhdCBKdW4gMzAgMjM6MTQ6MzIgMjAwMSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ2xpYi9nbGlzdC5baGNdOiBhZGRlZCBnX2xpc3RfaW5zZXJ0X2JlZm9yZSgpLgoKCSogZ2xpYi9nc2xpc3QuYyAoZ19zbGlzdF9pbnNlcnRfYmVmb3JlKTogcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiwKCXByb3RvdHlwZSB3YXMgYWxyZWFkeSBwcmVzZW50Li4uCgpTdW4gSnVsICAxIDIwOjE2OjI1IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi9ndW5pcHJvcC5jIChnX3VuaWNoYXJfdG90aXRsZSk6IFVzZSBHX05fRUxFTUVOVFMKCXJhdGhlciB0aGFuIGEgY3VzdG9tIG1hY3JvLgoKCSogZ2xpYi9nZW4tdW5pY29kZS10YWJsZXMucGw6IEFkYXB0IHRvIGNoYW5nZXMgaW4gdGFibGUKCWZvcm1hdHMgZm9yIFVuaWNvZGUgMy4xCgoJKiBnbGliL2d1bmljb2RlLmggZ2xpYi9ndW5pcHJvcC5jIGdsaWIvZ3VuaWNoYXJ0YWJsZXMuaAoJICBnbGliL2dlbi11bmljb2RlLXRhYmxlcy5wbDogQWRkIGNhc2UgY29udmVyc2lvbiBmdW5jdGlvbnMKICAgICAgICBnX3V0ZjhfY2FzZWZvbGQsIGdfdXRmOF9zdHJ1cCwgZ191dGY4X3N0cmRvd24uCgoJKiB0ZXN0cy91bmljb2RlLWNhc2Vjb252LmMgdGVzdHMvZ2VuLWNhc2Vmb2xkLXR4dC5wbAoJICB0ZXN0cy9nZW4tY2FzZW1hcC10eHQucGwgdGVzdHMvY2FzZWZvbGQudHh0IAoJICB0ZXN0cy9jYXNlbWFwLnR4dDogVGVzdCBjYXNlcyBmb3IgY2FzZSBjb252ZXJzaW9uLgoKCSogZ2xpYi9ndW5pY29kZS5oIGdsaWIvZ3VuaWRlY29tcC5bY2hdIGdsaWIvZ3VuaWNvbXAuaAoJICBnbGliL2dlbi11bmljb2RlLXRhYmxlcy5wbDogQWRkIGZ1bmN0aW9uIHRvIGRvIFVuaWNvZGUKICAgICAgICBub3JtYWxpemF0aW9uIGdfdXRmOF9ub3JtYWxpemUoKS4KCgkqIHRlc3RzL3VuaWNvZGUtbm9ybWFsaXplLmM6IFRlc3QgcHJvZ3JhbSBmb3IgY2FzZSBjb252ZXJzaW9uLgoKCSogZ2xpYi9ndW5pY29kZS5oIGdsaWIvZ3VuaWNvbGxhdGUuYzogQWRkIGNvbGxhdGlvbiBmdW5jdGlvbnMKCWdfdXRmOF9jb2xsYXRlLCBnX3V0ZjhfY29sbGF0ZV9rZXkuCgoJKiB0ZXN0L3VuaWNvZGUtY29sbGF0ZS5jOiBUZXN0IHByb2dyYW0gZm9yIGNvbGxhdGlvbi4KCgkqIGdsaWIvZ2RhdGUuYyAoZ19kYXRlX2ZpbGxfcGFyc2VfdG9rZW5zKTogRml4IHVuaW5pdGlhbGl6ZWQKCXZhcmlhYmxlLgoKCSogZ2xpYi9nZGF0ZS5jIChnX2RhdGVfc3RyZnRpbWUpIGRvY3MvQ2hhbmdlcy0yLjAudHh0OgoJTWFrZSB3b3JrIHdpdGggVVRGLTggZXZlbiBpZiB0aGUgbG9jYWxlIGlzbid0IFVURi04IGJhc2VkLgoJU3RpbGwgc29tZXdoYXQgb2YgYnJva2VuLCBpZiB0aGUgZm9ybWF0IHN0cmluZyBjb250YWlucyAKCWNoYXJhY3RlcnMgbm90IHJlcHJlc2VudGFibGUgaW4gdGhlIGN1cnJlbnQgbG9jYWxlLCB3aWxsIHdhcm4KCWFuZCBub3Qgd29yay4KCQoJKiBnbGliL2dkYXRlLmM6IFVzZSBVVEYtOCBub3JtYWxpemF0aW9uIGFuZCBjYXNlZm9sZGluZy4KClNhdCBKdW4gMzAgMTY6MDM6MTYgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbGliL2dpb3dpbjMyLmMgZ2xpYi9naW91bml4LmMgZ2xpYi9nbWFpbi5bY2hdOgoJUmVuYW1lIEdTb3VyY2VGdW5jczo6ZGVzdHJveSB0byBHU291cmNlRnVuY3M6OmZpbmFsaXplLgoJKCM1Njg1OCkKClNhdCBKdW4gMzAgMTU6NDk6MTAgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbGliL2dtYWluLltjaF06IChNb3N0bHkgcGF0Y2ggZnJvbSBTZWJhc3RpYW4gV2lsaGVtaSkKCU1ha2Ugc29tZSBjaGFuZ2VzIHRvIHRoZSB3YXkgdGhhdCBHTWFpbkNvbnRleHQgd29ya3M6CgoJIC0gYSBHTWFpbkNvbnRleHQgaXMgbm8gbG9uZ2VyIGFzc29jaWF0ZWQgd2l0aCBhIHNpbmdsZQoJICAgdGhyZWFkLCBidXQgYW55IHRocmVhZCBjYW4gYWNxdWlyZSBvd25lcnNoaXAgCgkgICBvZiB0aHJlYWQgYW5kIGl0ZXJhdGUuCgoJIC0gVGhlcmUgaXMgYSBmYWNpbGl0eSBnX21haW5fY29udGV4dF93YWl0KCkgZm9yCgkgICBub24tb3duZXItdGhyZWFkcyB0byB3YWl0IGVpdGhlciBmb3Igb3duZXJzaGlwCgkgICBvciBmb3IgYSBjb25kaXRpb24gdG8gYmUgYnJvYWRjYXN0LgoKCSAtIEZvciBlZmZpY2llbmN5LCBHTWFpbkxvb3AganVzdCBwaWdneWJhY2tzIG9mCgkgICBvZiB0aGUgbG9vcHMgbXV0ZXggLyBjb25kaXRpb24gaW5zdGVhZCBvZgoJICAgaGF2aW5nIGEgc2VwYXJhdGUgbXV0ZXgvY29uZGl0aW9uIGZvciBlYWNoCgkgICBHTWFpbkxvb3AuCgoJKiBnbGliL2d0aHJlYWQuW2NoXTogUmVtb3ZlIGhhY2tzIHRvIHN0b3JlIHRoZSB0aHJlYWQncwoJR01haW5Db250ZXh0IGluIHRoZSBHVGhyZWFkIHN0cnVjdHVyZXMsIHNpbmNlIHdlCglubyBsb25nZXIgaGF2ZSB0aGUgR01haW5Db250ZXh0IDw9PiBHVGhyZWFkIGNvcnJlc3BvbmRlbmNlLgoJCiAgICAgICAgKiBnbGliL2dtYWluLltjaF06IE1ha2UgZ19tYWluX2NvbnRleHRfd2FrZXVwKCkgcHVibGljCglzbyBzb21lb25lIGNvdWxkIGNvbXBsZXRlbHkgZHVwbGljYXRlIEdNYWluTG9vcCAKCXdpdGggdGhlIHB1YmxpYyBBUEkuCgoJKiB0ZXN0cy9tYWlubG9vcC10ZXN0OiBGaXggdXAgdG8gdGhlIG5ldyBBUEkuIERlY2lkZWRseQoJZG9lc24ndCB3b3JrIGF0IHRoZSBtb21lbnQsIGJ1dCB0aGF0IG1heSBiZSB0aGUgSU8KCWNoYW5uZWwgY2hhbmdlcywgb3IgcHJlZXhpc3RpbmcgbG9ja2luZyBwcm9ibGVtcy4KClNhdCBKdW4gMzAgMTM6MTg6MjggMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbGliL2dzdHJmdW5jcy5jIGdsaWIvZ3N0cmluZy5oOiBUcnkgY29tcGlsaW5nCgliZWZvcmUgY29tbWl0dGluZywgd2h5IGRvbid0IHlvdT8gU2ltcGxlIGZpeGVzCglmb3IgbXkgc3R1cGlkIHR5cG9zLiAKClNhdCBKdW4gMzAgMTI6NDk6MjYgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgogICAgICAgIFBhdGNoIGZyb20gRGFyaW4gQWRsZXIgKCM1NDE2NikKCQoJKiBnbGliL2dzdHJmdW5jcy5bY2hdOiBBZGQgYXNjaWktb25seSwgbG9jYWxlLWluc2Vuc2l0aXZlCglnX2FzY2lpX3RvW2xvd2VyL3VwcGVyXSwgZ19hc2NpaV9zdHJbZG93bi91cF0sCglnX2FzY2lpX2lzW3VwcGVyL2xvd2VyXSBhbmQgZGVwcmVjYXRlIHRoZSBsb2NhbGUtYWZmZWN0ZWQKCXZlcnNpb25zIHdoaWNoIGJyZWFrIGZvciBVVEYtOCwgZXRjLiBNYWtlCglnX2FzY2lpX3N0cnVwL3N0cmRvd24gZHVwbGljYXRpbmcsCglub3QgaW4tcGxhY2UgZm9yIGNvbnNpc3RlbmN5IHdpdGggVVRGLTggZnVuY3Rpb25zLgoKCSogZ2xpYi9nc3RyaW5nLltjaF06IEFkZCBhc2NpaS1vbmx5LCBsb2NhbGUtaW5zZW5zaXRpdmUKCWdfc3RyaW5nX2FzY2lpX1tkb3duL3VwXSwgYW5kIGRlcHJlY2F0ZSB0aGUgbG9jYWxlLWFmZmVjdGVkCgl2ZXJzaW9ucyB3aGljaCBicmVhayBmb3IgVVRGLTgsIGV0Yy4KCgkqIGdsaWIvZ3V0aWxzLmMgZ2xpYi9nd2luMzIuYyB0ZXN0L3Rlc3RnbGliLmM6IFVzZQoJdGhlIGdfYXNjaWlfKiBmdW5jdGlvbnMgd2hlcmUgYXBwcm9wcmlhdGUuCgpGcmkgSnVuIDI5IDEzOjM2OjM5IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi9nc3RyaW5nLltjaF0gKGdfc3RyaW5nX3NldF9zaXplKTogQWRkIGZ1bmN0aW9uIHRvIAoJYWxsb3cgc2V0dGluZyB0aGUgbGVuZ3RoIG9mIGEgc3RyaW5nIGdyZWF0ZXIgdGhhbiB0aGUgCgljdXJyZW50IGxlbmd0aCAoZm9yIGJ1ZmZlcmluZyB1c2FnZSkKCgkqIGdsaWIvZ3N0cmluZy5bY2hdOiBFeHBvc2Ugc3RyaW5nLT5hbGxvY2F0ZWRfbGVuLCBzaW5jZQoJdGhhdCBpcwl1c2VmdWwgd2hlbiB1c2luZyBHU3RyaW5nIHNpbXBseSBhcyBhIGJ1ZmZlci4gCgkoUmVuYW1lZCBmcm9tIHN0cmluZy0+YWxsb2MpCgoJKiBnbGliL2dpb2NoYW5uZWwuW2NoXSBnbGliL2dpb3VuaXguYyBnbGliL2dpb3dpbjMyLmM6CglNYWpvciBwYXRjaCBmcm9tIEhpZGV0b3NoaSBUYWppbWEgYW5kIFJvbiBTdGVpbmtlCglyZXdvcmtpbmcgR0lPQ2hhbm5lbCB0byBoYXZlOgoKCSAtIEJ1ZmZlcmluZwoJIC0gU2FuZSBhbmQgdXNlZnVsIGVycm9yIHJlcG9ydGluZwoJIC0gU3RyZWFtaW5nIGVuY29kaW5nIGNvbnZlcnNpb24gd2l0aCBpY29udgoJIC0gQ29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIHJlYWQgYnkgbGluZXMgb3IgCgkgICBhbiBlbnRpcmUgZmlsZS4KCglBbHNvIGZpeCByZW1haW5pbmcgNjQgYml0IGNsZWFubGluZXNzIGlzc3Vlcy4KCgkqIHRlc3RzL2lvY2hhbm5lbC10ZXN0LmMgdGVzdHMvTWFrZWZpbGUuYW06IFRlc3QgY2FzZQoJZm9yIElPIGNoYW5uZWwgc3RyZWFtaW5nIGNvbnZlcnNpb24uIFN0aWxsIG5lZWRzIAoJc29tZSBmaXhpbmcgdXAuCgpUaHUgSnVuIDI4IDE2OjU3OjQ0IDIwMDEgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiAoR0xJQl9NSUNST19WRVJTSU9OKTogdXAgdmVyc2lvbiBudW1iZXIgdG8gMS4zLjcsCglpbnRlcmZhY2UgYWdlIDAsIGJpbmFyeSBhZ2UgMC4KCjIwMDEtMDYtMjcgIEtqYXJ0YW4gTWFyYWFzICA8a21hcmFhc0Bnbm9tZS5vcmc+CgoJKiBnbGliL2dtYXJrdXAuYzogRml4IGEgdHlwby4KCQoyMDAxLTA2LTI3ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogTWFrZWZpbGUuYW0sIGNvbmZpZ3VyZS5pbjogUmVtb3ZlZCBnbGliLWNvbmZpZy0yLjAsIGFzIHdlIGhhdmUKCXBrZy1jb25maWcgbm93LgoKCSogZ2xpYi9NYWtlZmlsZS5hbTogQWRkZWQgLUkkKHRvcF9zcmNkaXIpIGZvciBidWlsZGRpciAhPSBzcmNkaXIuCgoJKiBNYWtlZmlsZS5hbTogUmVtb3ZlZCBnZW4tdW5pY29kZS10YWJsZXMucGwgZnJvbSBFWFRSQV9ESVNULgoKVHVlIEp1biAyNiAxMTo0Mzo0NiAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbSAqLltjaF0gZ2xpYi8qLltjaF0gZ2xpYi9NYWtlZmlsZS5hbToKCU1vdmUgZ2xpYiBsaWJyYXJ5IGludG8gYSBzdWJkaXJlY3RvcnksIG1ha2UgYWxsIEdMaWIgaW5jbHVkZQoJZmlsZXMgaW5jbHVkZSBhcyA8Z2xpYi9nbGlzdC5oPgoKCSogdGVzdHMvdGVzdGdsaWIuYyB0ZXN0cy90ZXN0Z2RhdGUuYyB0ZXN0cy90ZXN0Z2RhdGVwYXJzZXIuYwoJICB0ZXN0cy90aW1lbG9vcC5jIHRlc3RzL3RpbWVsb29wLWJhc2ljLmM6IE1vdmUgYWxsIHRlc3RzIGludG8KCXRoZSB0ZXN0cy8gc3ViZGlyZWN0b3J5LgoKU2F0IEp1biAyMyAxNzozNDozOCAyMDAxICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbWVzc2FnZXMuYyAoZ19sb2d2KTogdXNlIEdfQlJFQUtQT0lOVCgpIGluc3RlYWQgb2YgcmFpc2UoNSkuCgpXZWQgSnVuIDIwIDEyOjAwOjU0IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKICAgICAgICBDaGFuZ2VzIGZvciA2NC1iaXQgY2xlYW5saW5lc3MsIGxvb3NlbHkgYmFzZWQgb24gcGF0Y2ggCglmcm9tIE1hcmsgTXVybmFuZS4KCQoJKiBnY29udmVydC5jIChnX2NvbnZlcnQvZ19jb252ZXJ0X3dpdGhfZmFsbGJhY2spOiBSZW1vdmUKCXdvcmthcm91bmRzIGZvciBzaW5jZS1maXhlZCBHTlUgbGliYyBidWdzLiBNaW5vcgoJZG9jIGZpeC4KCgkqIGdjb252ZXJ0LltjaF06IENoYW5nZSBnaW50IHRvIGdzaXplL2dzc2l6ZSBhcwoJYXBwcm9wcmlhdGUuCgoJKiBnY29udmVydC5jIChnX2xvY2FsZS9maWxlbmFtZV90by9mcm9tX3V0ZjgpOiBGaXggaW5jb3JyZWN0Cgljb21wdXRhdGlvbiBvZiBieXRlc19yZWFkIC8gYnl0ZXNfd3JpdHRlbi4KCgkqIGdmaWxldXRpbHMuW2NoXSAoZ19maWxlX2dldF9jb250ZW50cyk6IE1ha2UgbGVuZ3RoCglvdXQgcGFyYW1ldGVyICdnc2l6ZSAqbGVuJy4KCgkqIGdob29rLmMgKGdfaG9va19jb21wYXJlX2lkcyk6IERvbid0IGNvbXBhcmUgYQoJYW5kIGIgYXMgJ2EgLSBiJy4KCgkqIGdtYWNyb3MuaCAoR1NJWkVfVE9fUE9JTlRFUik6IEFkZCBHUE9JTlRFUl9UT19TSVpFLAoJR1NJWkVfVE9fUE9JTlRFUi4KCgkqIGdtYWluLmMgKGdfdGltZW91dF9wcmVwYXJlKTogUmV3cml0ZSB0byBhdm9pZAoJb3ZlcmZsb3dzLiAoRml4ZXMgYnVnIHdoZW4gc3lzdGVtIGNsb2NrIHNrZXdzCgliYWNrd2FyZHMgbW9yZSB0aGFuIDI0IGRheXMuKQoKCSogZ21hcmt1cC5bY2hdOiBNYWtlIGxlbmd0aHMgcGFzc2VkIHRvIGNhbGxiYWNrcwoJZ3NpemUsIGxlbmd0aCBmb3IgZ19tYXJrdXBfcGFyc2UtY29udGV4dF9wYXJzZSgpLAoJZ19tYXJrdXBfZXNjYXBlX3RleHQoKSBnc3NpemUuCgoJKiBnbWVzc2FnZXMuW2NoXSAoZ19wcmludGZfc3RyaW5nX3VwcGVyX2JvdW5kKTogQ2hhbmdlCglyZXR1cm4gdmFsdWUgdG8gZ3NpemUuCgoJKiBnbWVzc2FnZXMuYyAocHJpbnRmX3N0cmluZ191cHBlcl9ib3VuZCk6IFJlbW92ZQoJYSByaWRpY3Vsb3VzIHVzZSBvZiAnaW5saW5lJyBvbiBhIDMwMCBsaW5lIGZ1bmN0aW9uLgoKCSogZ3N0cmluZy5bY2hdOiBSZXByZXNlbnQgc2l6ZSBvZiBzdHJpbmcgYXMgYSBnc2l6ZSwKCW5vdCBnaW50LiBNYWtlIHBhcmFtZXRlcnMgdG8gZnVuY3Rpb25zIHRha2UgZ3NpemUsCglvciBnc3NpemUgd2hlcmUgLTEgaXMgYWxsb3dlZC4KCgkqIGdzdHJpbmcuYyAoZ19zdHJpbmdfZXJhc2UpOiBNYWtlCglnX3N0cmluZ19lcmFzZSAoc3RyaW5nLCBwb3MsIC0xKSBhIHN5bm9ueW0gZm9yCglnX3N0cmluZ190cnVuY2F0ZSBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBHKgoJQVBJcy4KCgkqIGdzdHJmdW5jcy5bY2hdOiBNYWtlIGFsbCBmdW5jdGlvbnMgdGFraW5nIGEgc3RyaW5nCglsZW5ndGgsIHRha2UgYSBnc2l6ZSwgb3IgZ3NzaXplIGlmIC0xIGlzIGFsbG93ZWQuCgkoZ19zdHJzdHJfbGVuLCBnX3N0cnJzdHJfbGVuKS4gQWxzbyBmaXggc29tZSBib3VuZGFyeQoJY29uZGl0aW9ucyBpbiBnX3N0cltyXXN0cltfbGVuXS4KCgkqIGd1dGY4LmMgdGVzdHMvdW5pY29kZS1lbmNvZGluZy5jOiBNYWtlIHBhcmFtZXRlcnMgdGhhdCAKCWFyZSBieXRlIGxlbmd0aHMgZ3NpemUsIGdzc2l6ZSBhcyBhcHByb3ByaWF0ZS4gTWFrZSAKCWNoYXJhY3RlciBvZmZzZXRzLCBvdGhlciBjb3VudHMsIGdsb25nLgoKCSogZ2FzeW5jcXVldWUuYyBnY29tcGxldGlvbi5jCiAgICAgICAgICB0aW1lbG9vcC5jIHRpbWVsb29wLWJhc2ljLmMgZ3V0aWxzLmMgZ3NwYXduLmMuCglTbWFsbCA2NCBiaXQgY2xlYW5saW5lc3MgZml4dXBzLgoKCSogZ2xpc3QuYyAoZ19saXN0X3NvcnQyLCBnX2xpc3Rfc29ydF9yZWFsKTogRml4IGZ1bmN0aW9ucwoJdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHN0YXRpYy4KCgkqIGdkYXRlLmMgKGdfZGF0ZV9maWxsX3BhcnNlX3Rva2Vucyk6IEZpeCBleHRyYQoJZGVjbGFyYXRpb24gdGhhdCB3YXMgc2hhZG93aW5nIGFub3RoZXIuCgoJKiB0ZXN0cy9tb2R1bGUtdGVzdC5jOiBJbmNsdWRlIHN0cmluZy5oCgpNb24gSnVuIDE4IDE1OjQzOjI5IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ3V0ZjguYyAoZ19nZXRfY2hhcnNldCk6IE1ha2UgYXJndW1lbnQKCUdfQ09OU1RfUkVUVVJOIGNoYXIgKiouCgoyMDAxLTA2LTIyICBBbmRyZXcgTGFub2l4IDxhbGFub2l4QHVtaWNoLmVkdT4KCQoJKmdpb3dpbjMyLmM6IERlYnVnIGFuZCBwYXJ0aWFsIHJld3JpdGUgb2YgYXN5bmMgc29ja2V0IGNvZGUKCW9uIHdpbmRvd3MsIHdoaWNoIGZpeGVzIG1ham9yIE1UIGlzc3Vlcy4gU29tZSB0ZXN0IGNvZGUga2luZGx5IAoJcHJvdmlkZWQgYnkgd3JvYmVydHMxQGhvbWUuY29tLgoJClRodSBKdW4gMTQgMTQ6MDk6NDYgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnc3RyZnVuY3MuYyAoZ19zdHJjb25jYXQpOiBGaXggYSB1c2Ugb2Ygc3RyY2F0IHRoYXQKCXdhc24ndCByZXBsYWNlZCB3aXRoIGdfc3RwY3B5IGluIHRoZSBvcmlnaW5hbCAKCXN0cGNweS1mb3ItZWZmaWNpZW5jeSBwYXRjaC4KCjIwMDEtMDYtMTEgIEhhdm9jIFBlbm5pbmd0b24gIDxocEByZWRoYXQuY29tPgoKCSogTkVXUzogdXBkYXRlZAoKCSogY29uZmlndXJlLmluIChHTElCX01JQ1JPX1ZFUlNJT04pOiBpbmNyZW1lbnQgdmVyc2lvbiB0byAxLjMuNgoKMjAwMS0wNi0wOCAgQWxleCBMYXJzc29uICA8YWxleGxAcmVkaGF0LmNvbT4KCgkqIGdzdHJmdW5jcy5bY2hdOgoJQWRkZWQgbmV3IGZ1bmN0aW9ucyBnX3N0cnN0cl9sZW4sIGdfc3RycnN0ciBhbmQgZ19zdHJyc3RyX2xlbgoJCgkqIHRlc3RzL3N0cmZ1bmMtdGVzdC5jOgoJQWRkIHNvbWUgdGVzdHMgZm9yIHRoZSBuZXcgZnVuY3Rpb25zLgoJCgkqIGd1bmljb2RlLmg6CgkqIGd1dGY4LmM6CglBZGQgbGVuZ3RoIGFyZ3VtZW50IHRvIGdfdXRmOF9zdHJjaHIgYW5kIGdfdXRmOF9zdHJyY2hyLgoJCjIwMDEtMDYtMDggIEhhdm9jIFBlbm5pbmd0b24gIDxocEByZWRoYXQuY29tPgoKCSogZ3NwYXduLmM6IHN1cHBvcnQgR19TUEFXTl9GSUxFX0FORF9BUkdWX1pFUk8gc3BlY2lmeWluZyB0aGF0IAoJdGhlIHZlY3RvciBwYXNzZWQgaW4gdG8gZ19zcGF3bl8qIGNvbnRhaW5zIGEgZmlsZW5hbWUgdG8gCglleGVjdXRlIGluIGFyZ3ZbMF0gdGhlbiB0aGUgYWN0dWFsIGFyZ3YgYmVnaW5zIGF0IGFyZ3YgKyAxLgoJS2luZCBvZiBhIGxhbWUgaGFjaywgYnV0IHRoaXMgaXNuJ3Qgc29tZXRoaW5nIHlvdSBjb21tb25seSB3YW50Cgl0byBkbywgYW5kIGF2b2lkcyBhZGRpbmcgbW9yZSBmdW5jdGlvbiBhcmd1bWVudHMuCgoyMDAxLTA2LTA4ICBQYWJsbyBTYXJhdHhhZ2EgPHBhYmxvQG1hbmRyYWtlc29mdC5jb20+CgoJKiBjb25maWd1cmUuaW46IEFkZGVkIEF6ZXJpIChheikgdG8gQUxMX0xJTkdVQVMKCjIwMDEtMDYtMDggIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBkb2NzL01ha2VmaWxlLmFtLCBjb25maWd1cmUuaW46IFJlbW92ZSBkb2NzL2dsaWItY29uZmlnLjEuaW4uCgoJKiBndGhyZWFkLTIuMC11bmluc3RhbGxlZC5wYy5pbiAoQ2ZsYWdzKTogQWRkIEBHX1RIUkVBRF9DRkxBR1NALgoKMjAwMS0wNi0wNyAgSGF2b2MgUGVubmluZ3RvbiAgPGhwQHJlZGhhdC5jb20+CgoJKiBtNG1hY3Jvcy9nbGliLTIuMC5tNDogc3Vic3QgR0xJQl9HRU5NQVJTSEFMLCBHT0JKRUNUX1FVRVJZLCAKCUdMSUJfTUtFTlVNUyB2YXJpYWJsZXMKCgkqIGdtb2R1bGUtMi4wLnBjLmluOiBhZGQgZ21vZHVsZV9zdXBwb3J0ZWQgdmFyaWFibGUKCgkqIGdsaWItMi4wLnBjLmluOiBhZGQgZ2xpYl9nZW5tYXJzaGFsLCBnb2JqZWN0X3F1ZXJ5LAoJZ2xpYl9ta2VudW1zIHZhcmlhYmxlcwkKCgkqIGNvbmZpZ3VyZS5pbjogcHV0IEdfTU9EVUxFX1NVUFBPUlRFRCB2YWx1ZSBpbnRvIAoJLnBjIGZpbGVzCgoJKiBhdXRvZ2VuLnNoOiBzdXBwb3J0IEFVVE9HRU5fU1VCRElSX01PREUKCgkqIE1ha2VmaWxlLmFtOiBhZGQgLXVuaW5zdGFsbGVkLnBjLmluIHRvIEVYVFJBX0RJU1QKCjIwMDEtMDYtMDcgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBjb25maWd1cmUuaW46IExvb2sgZm9yIG5hbm9zbGVlcCBmdW5jdGlvbi4gCgoJKiBndGltZXIuYzogVXNlIG5hbm9zbGVlcCBmb3IgZ191c2xlZXAsIHdoZW4gZm91bmQuCgoJKiBndGltZXIuYywgZ3RpbWVyLmg6IEFkZCBnX3RpbWVfdmFsX2FkZCBmdW5jdGlvbi4gQ2xvc2VzICM1NDI3MS4KCgkqIGdhc3luY3F1ZXVlLmM6IERvY3VtZW50YXRpb24gdXBkYXRlcy4KCgkqIGd0aHJlYWRwb29sLmM6IFVzZSBnX3RpbWVfdmFsX2FkZCBub3cgdGhhdCB3ZSBoYXZlIGl0LgoKMjAwMS0wNi0wMSAgSm9uIFRyb3dicmlkZ2UgIDx0cm93QGdudS5vcmc+CgogICAgICAgKiBnZGF0ZS5jIChnX2RhdGVfdXBkYXRlX2p1bGlhbik6IENoYW5nZWQgdG8gdGFrZSBhIGNvbnN0CiAgICAgICBhcmd1bWVudCwgYW5kIHRoZW4gdG8gY2FzdCBvdXQgY29uc3QuCiAgICAgICAoZ19kYXRlX3VwZGF0ZV9kbXkpOiBDaGFuZ2VkIHRvIHRha2UgYSBjb25zdCBhcmd1bWVudCwgYW5kIHRoZW4KICAgICAgIGNhc3Qgb3V0IGNvbnN0LgogICAgICAgKGdfZGF0ZV9nZXRfd2Vla2RheSk6IENoYW5nZWQgYXJndW1lbnQgdG8gYmUgY29uc3QuCiAgICAgICAoZ19kYXRlX2dldF9tb250aCk6IENoYW5nZWQgYXJndW1lbnQgdG8gYmUgY29uc3QuCiAgICAgICAoZ19kYXRlX2dldF95ZWFyKTogQ2hhbmdlZCBhcmd1bWVudCB0byBiZSBjb25zdC4KICAgICAgIChnX2RhdGVfZ2V0X2RheSk6IENoYW5nZWQgYXJndW1lbnQgdG8gYmUgY29uc3QuCiAgICAgICAoZ19kYXRlX2dldF9qdWxpYW4pOiBDaGFuZ2VkIGFyZ3VtZW50IHRvIGJlIGNvbnN0LgogICAgICAgKGdfZGF0ZV9nZXRfZGF5X29mX3llYXIpOiBDaGFuZ2VkIGFyZ3VtZW50IHRvIGJlIGNvbnN0LgogICAgICAgKGdfZGF0ZV9nZXRfbW9uZGF5X3dlZWtfb2ZfeWVhcik6IENoYW5nZWQgYXJndW1lbnQgdG8gYmUgY29uc3QuCiAgICAgICAoZ19kYXRlX2dldF9zdW5kYXlfd2Vla19vZl95ZWFyKTogQ2hhbmdlZCBhcmd1bWVudCB0byBiZSBjb25zdC4KICAgICAgIChnX2RhdGVfY29tcGFyZSk6IENoYW5nZWQgYXJndW1lbnRzIHRvIGJlIGNvbnN0LgogICAgICAgKGdfZGF0ZV90b19zdHJ1Y3RfdG0pOiBDaGFuZ2VkIEdEYXRlIGFyZ3VtZW50IHRvIGJlIGNvbnN0LgogICAgICAgKGdfZGF0ZV9zdHJmdGltZSk6IENoYW5nZWQgR0RhdGUgYXJndW1lbnQgdG8gYmUgY29uc3QuCiAgICAgICAoZ19kYXRlX2NsYW1wKTogQWRkZWQuICBUaGUgZXF1aXZhbGVudCBvZiB0aGUgQ0xBTVAgbWFjcm8gZm9yCiAgICAgICBHRGF0ZXMuCiAgICAgICAoZ19kYXRlX29yZGVyKTogQWRkZWQuICBFbnN1cmUgdGhhdCB0aGUgZmlyc3QgR0RhdGUgYXJndW1lbnQKICAgICAgIHByZWNlZWRzIHRoZSBzZWNvbmQsIHN3YXBwaW5nIHRoZW0gaWYgbmVjZXNzYXJ5LgogICAgICAgKGdfZGF0ZV9kYXlzX2JldHdlZW4pOiBBZGRlZC4gIENvbXB1dGVzIHRoZSAoc2lnbmVkKSBudW1iZXIgb2YgZGF5cwogICAgICAgYmV0d2VlbiB0d28gZGF0ZXMuCgpNb24gSnVuICA0IDE2OjAyOjU3IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ3N0cmZ1bmNzLmMgKGdfc3RydXAvc3RyZG93bik6IHRvIG1hdGNoIGdfc3RyY2FzZWNtcCwKCWNoZWNrIGlmIGl0IGlzIGxvd2VyL3VwcGVyIGJlZm9yZSBjb252ZXJ0aW5nIHRvIHVwcGVyL2xvd2VyCglbIG5vdCByZXF1aXJlZCBieSBJU08uLi4gXSAoIzU1NjgyLCBKb24gVHJvd2JyaWRnZSkKCk1vbiBKdW4gIDQgMTU6NTk6MTUgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBndW5pY29kZS5oOiBNYWtlIGEgYml0IG1vcmUgc3RhbmRhbG9uZSBieSBhZGRpbmcgaW5jbHVkZQoJb2YgZ2Vycm9yLmguICM1NDU0My4KCQoJKiBndW5pY29kZS5oOiBDaGFuZ2Ugc2l6ZV90IHRvIGdfc2l6ZS4gKFVnaCkKCjIwMDEtMDUtMzEgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBncmFuZC5oIChnX3JhbmRvbV9ib29sZWFuLCBnX3JhbmRfYm9vbGVhbik6IEZpeCB0byBzdHVwaWQgYnVnIGluCglnX3JhbmRvbV9ib29sZWFuLCBhbHNvIGJvdGggZnVuY3Rpb25zIG5vdyByZXR1cm4gMSBvciAwIGluc3RlYWQgb2YKCTE8PDE1IG9yIDAuCgoJKiB0ZXN0cy9yYW5kLXRlc3QuYzogRXh0ZW5kZWQgdGVzdGNhc2VzLgoKCSogY29uZmlndXJlLmluOiBSZW1vdmUgR19IQVZFX0lTT19DWFhfVkFSQVJHUyBhbmQKCUdfSEFWRV9JU09fQ19WQVJBUkdTIGFuZCBkZWZpbmUgR19IQVZFX0lTT19WQVJBUkdTIGRpcmVjdGx5CglndWFyZGVkIGJ5ICNpZihuKWRlZiBfX2NwbHVzcGx1cy4KCjIwMDEtMDUtMzAgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBndGhyZWFkLTIuMC5wYy5pbjogQWRkIEBHX1RIUkVBRF9DRkxBR1NAIHRvIENmbGFncy4KClR1ZSBNYXkgMjkgMTg6MTc6MTEgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBhdXRvZ2VuLnNoIChoYXZlX2xpYnRvb2wpOiBGaXggR05VIHNlZGlzbQoKMjAwMS0wNS0yOSAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIHRlc3RzL01ha2VmaWxlLmFtLCB0ZXN0cy9xc29ydC10ZXN0LmM6IEFkZCB0ZXN0IGNhc2UgZm9yIHRoZQoJZ19xc29ydF93aXRoX2RhdGEgZnVuYy4gSXQgd29ya3MuIFRoaXMgZml4ZXMgYnVnICM1MjYwNS4KCgkqIHRlc3RzL01ha2VmaWxlLmFtLCB0ZXN0cy9jeHgtdGVzdC5DOiBOb3cgdGhhdCB3ZSBjaGVjayBmb3IgYSBDKysKCWNvbXBpbGVyIGluIGNvbmZpZ3VyZS5pbiBhbnl3YXksIEkgYWRkZWQgYSB0ZXN0LCB0aGF0IHRoZSBHTGliCgloZWFkZXJzIGNhbiBiZSBpbmNsdWVkIGludG8gYSBDKysgcHJvZ3JhbS4gVGhpcyBmaXhlcyBidWcgIzUyNjA1LgoKCSogY29uZmlndXJlLmluOiBEb24ndCBiYWlsIG91dCwgaWYgbm8gQysrIGNvbXBpbGVyIGlzCglmb3VuZC4gRGVmaW5lIEdfSEFWRV9JU09fVkFSQVJHUyBvbmx5IGlmIGFwcHJvcHJpYXRlLgoKCSogZ21lc3NhZ2VzLmg6IFRodXMgd2UgY2FuIHJldmVydCB0aGUgcHJldmlvdXMgcGF0Y2guCgoyMDAxLTA1LTI5ICBKYW1lcyBIZW5zdHJpZGdlICA8amFtZXNAZGFhLmNvbS5hdT4KCgkqIGdtZXNzYWdlcy5oOiAiI2lmZGVmIEdfSEFWRV9JU09fVkFSQVJHUyIgd2lsbCBhbHdheXMgc3VjY2VlZAoJZXZlbiB3aGVuIHdlIGRvbid0IGhhdmUgSVNPIHZhcmFyZyBzdXBwb3J0LiAgQ2hhbmdlZCB0bwoJIiNpZiBHX0hBVkVfSVNPX1ZBUkFSR1MiLgoKTW9uIE1heSAyOCAxMTo0MDozNCAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIF9fVkFSQVJHU19fIHNlcGFyYXRlbHkgZm9yIEMgYW5kIEMrKy4KCjIwMDEtMDUtMjggIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBjb25maWd1cmUuaW46IEZpeCB0eXBvLgoKU3VuIE1heSAyNyAwNTowOToxOCAyMDAxICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbWFpbi5jIChnX21haW5fY29udGV4dF9wcmVwYXJlKTogdW5sb2NrIGNvbnRleHQgd2hlbiBiYWlsaW5nCglvdXQgd2l0aCBhIHdhcm5pbmcuCgkoZ19tYWluX2NvbnRleHRfY2hlY2spOiBzYW1lIGhlcmUuCgoJKiBnbWFpbi5jIChnX21haW5fY29udGV4dF9jaGVjayk6IGJlZm9yZSByZXR1cm5pbmcgZHVlIHRvCgljaGFuZ2VkIHBvbGxmZHMsIHVubG9jayBjb250ZXh0LgoJClRodSBNYXkgMjQgMjE6MjQ6MTYgQ0VTVCAyMDAxIFBhb2xvIE1vbGFybyA8bHVwdXNAeGltaWFuLmNvbT4KCgkqIGdtYXJrdXAuYzogYmFjayBvdXQgY2hhbmdlIGJ5IG1pdGNoQGNvbnZlcmdlbmNlLmRlIGFuZCBhcHBseSBwYXRjaCBpbgoJYnVnIGlkICM1MjA2NyB0aGF0IGZpeGVzIHRoZSBzYW1lIHByb2JsZW0gaW4gYSBtb3JlIGNvbXBsZXRlIG1hbm5lci4KCVRoaXMgZml4ZXMgYWxzbyBhIHNlZ2ZhdWx0IGZvciBhIG1hbGZvcm1lZCBYTUwgZmlsZSBhbmQgYWRkcyBhIG5ldwoJdGVzdCBjYXNlLgoKMjAwMS0wNS0yNCAgSGFucyBCcmV1ZXIgIDxoYW5zQGJyZXVlci5vcmc+CgoJKiBncmVsLmMgOiByZWZsZWN0IHJlbmFtaW5nIG9mIGdfc3RyaW5nX3NwcmludGZhIHRvIGdfc3RyaW5nX3ByaW50ZmEKCgkqIG1ha2VmaWxlLm1zYy5pbiA6IGNyZWF0ZSBhbiBhZGRpdGlvbmFsIHN0YXRpYyBsaWIgdG8gYmUgdXNlZCBmcm9tCgkoYXQgbGVhc3QpIGdsaWItZ2VubWFyc2hhbAoKMjAwMS0wNS0yMyAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdhcnJheS5jIChnX2FycmF5X3JlbW92ZV9pbmRleF9mYXN0KTogVGlueSBzcGVlZCBpbXByb3ZlbWVudAoJc3VnZ2VzdGVkIGJ5IG5vb25AdXNlcnMuc291cmNlZm9yZ2UubmV0LgoKMjAwMS0wNS0yMiAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGNvbmZpZy5oLndpbjMyLmluOiBSZW1vdmVkIFBPU0lYXyouIERlZmluZWQgR19USFJFQURfU09VUkNFIHRvCgkiZ3RocmVhZC13aW4zMi5jIi4KCgkqIGdsaWJjb25maWcuaC53aW4zMi5pbjogRGVmaW5lIEdfSEFWRV9JU09fVkFSQVJHUyBmb3IgZ2NjLCBkb24ndAoJa25vdyBhYm91dCBNU0MuIERlZmluZSBHX1RIUkVBRFNfSU1QTF9XSU4zMiBpbnN0ZWFkIG9mCglHX1RIUkVBRFNfSU1QTF9QT1NJWCBhbmQgZGVmaW5lIHRoZSByaWdodCBzdGF0aWMgbXV0ZXggbWFjcm9zIGFuZAoJdHlwZXMuCgoJKiBnbGliLmRlZjogZ190aHJlYWRfY3JlYXRlIHJlbmFtZWQgdG8gZ190aHJlYWRfY3JlYXRlX2Z1bGwuCgoJKiBndGhyZWFkLmM6IG1lbWNweSBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIFdlIGNhbiBzaW1wbHkgdXNlCglzdHJ1Y3QgYXNzaWdubWVudC4KCgkqIGdtZXNzYWdlcy5jOiBGaXggY29tcGlsYXRpb24gZXJyb3Igb24gd2luMzIuIEFkZGVkCglHRmlsZURlc2NyaXB0b3IsIHdpY2ggaXMgZ2ludCBvbiBVbml4IGFuZCBGSUxFKiBvbiB3aW4zMi4KCjIwMDEtMDUtMjEgIEFuZHJldyBMYW5vaXggPGFsYW5vaXhAdW1pY2guZWR1PgoKCSpnaW93aW4zMi5jOiBHX0lPX1dJTjMyX1dJTkRPV1NfTUVTU0FHRVMgY2hhbm5lbHMKCW5vdCBoYW5kbGVkIGNvcnJlY3RseSBpbiBnX2lvX3dpbjMyX2NoZWNrKCkKClN1biBNYXkgMjAgMTA6NDc6NDcgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuaW46IEZpeCBzb21lIHByb2JsZW1zIGluIHdyaXRpbmcgb3V0IHZhcmFyZ3MKCXRlc3RzIGluIGNvbmZpZ3VyZS5pbgoKRnJpIE1heSAxOCAxMDo1MjoyMyAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBnbWVzc2FnZXMuaDogVXNlIGNvbXBpbGUgY2hlY2tzIGZvciBJU08gQzk5IGFuZCBHTlUKCWV4dGVuc2lvbiB2YXJhcmdzIG1hY3JvcyBzeW50YXggYW5kIHN0b3JlIHJlc3VsdCBpbiBnbGliY29uZmlnLmgKCShHX0hBVkVfSVNPX1ZBUkFSR1MsIEdfSEFWRV9HTlVDX1ZBUkFSR1MpIHJhdGhlciB0aGFuIHJlbHlpbmcKCW9uIGNoZWNraW5nIHByZWRlZmluZWQgbWFjcm9zLgoKMjAwMS0wNS0xOCAgTWljaGFlbCBOYXR0ZXJlciAgPG1pdGNoQGNvbnZlcmdlbmNlLmRlPgoKCSogZ21hcmt1cC5jOiBkb24ndCBnX3N0cmR1cCgpL2dfZnJlZSgpIGFsbCBwYXJzZWQgYXR0cmlidXRlcyBhbmQKCXRoZWlyIHZhbHVlcyB0d2ljZSBidXQgc2ltcGx5IGNvcHkgdGhlIHN0cmluZyBwb2ludGVycyBmcm9tIHRoZQoJR01hcmt1cEF0dHJpYnV0ZSBzdHJ1Y3QgdG8gdGhlIHN0cmluZyBhcnJheXMgYmVmb3JlIHBhc3NpbmcgdGhlbQoJdG8gc3RhcnRfZWxlbWVudCgpLgoKMjAwMS0wNS0xOCAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGd0aHJlYWQuYywgZ3RocmVhZC5oOiBSZW5hbWVkIGdfdGhyZWFkX2NyZWF0ZSB0bwoJZ190aHJlYWRfY3JlYXRlX2Z1bGwgYW5kIGFkZGVkIG1hY3JvIGdfdGhyZWFkX2NyZWF0ZSwgd2hpY2ggb21pdHMKCSdzdGFja19zaXplJywgJ2JvdW5kJyBhbmQgJ3ByaW9yaXR5JyBwYXJhbWV0ZXJzLiBBbHNvIHJlbW92ZWQKCSdib3VuZCcgZnJvbSBHVGhyZWFkIHN0cnVjdC4KCgkqIGd0aHJlYWRwb29sLmgsIGd0aHJlYWRwb29sLmM6IEFkYXB0ZWQgR1RocmVhZFBvb2wgdG8gdGhlIGFib3ZlCgljaGFuZ2VzLiBHVGhyZWFkUG9vbCBsb3N0IHRoZSAncHJpb3JpdHknIGFuZCAnYm91bmQnCgltZW1iZXJzLiBnX3RocmVhZF9wb29sX25ldyB0aGUgJ3N0YWNrX3NpemUnLCAnYm91bmQnIGFuZAoJJ3ByaW9yaXR5JyBwYXJhbWV0ZXJzLgoKCSogdGVzdHMvbWFpbmxvb3AtdGVzdC5jLCB0ZXN0cy90aHJlYWQtdGVzdC5jLAoJdGVzdHMvdGhyZWFkcG9vbC10ZXN0LmM6IEFkYXB0ZWQgdG8gdGhlIGFib3ZlIGNoYW5nZXMuCgoJKiBnbWVtLmMgKGdfbWVtX3Byb2ZpbGUpOiBGaXhlZCBtdXRleCBkZWFkbG9jay4KCjIwMDEtMDUtMTcgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBtYWtlZmlsZS5taW5ndy5pbjogQWRkIGdwYXR0ZXJuLm8gdG8gb2JqZWN0cy4KCgkqIGdsaWIuZGVmOiBFeHBvcnQgZ190aHJlYWRfZXhpdCBhcyB3ZWxsLgoKCSogTWFrZWZpbGUuYW06IEZpeCBCVUlMVF9FWFRSQV9ESVNUIGV4cG9ydGluZy4KClN1biBNYXkgMTMgMTA6MzE6MTcgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbGliL01ha2VmaWxlLmFtIGdvYmplY3QvTWFrZWZpbGUuYW0gZ21vZHVsZS9NYWtlZmlsZS5hbToKCUFkZCBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcy4KCgkqIGFjaW5jbHVkZS5tNDogUmVtb3ZlIGxpYnRvb2wgbWFjcm9zLgoKCSogYXV0b2dlbi5zaDogUmVxdWlyZSBsaWJ0b29sLTEuNCwgYXV0b21ha2UtMS40cDEuCgoyMDAxLTA1LTE1ICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfT1VUUFVUKTogbTRtYWNyb3MvTWFrZWZpbGUKCgkqIG00bWFjcm9zL01ha2VmaWxlLmFtLCBtNG1hY3Jvcy9nbGliLTIuMC5tNCwKCW00bWFjcm9zL2dsaWItZ2V0dGV4dC5tNDoKCW00IGZpbGVzIG1vdmVkIGhlcmUgb24gc2VydmVyLCBNYWtlZmlsZS5hbSBhZGRlZAoJIAoJVGhpcyBpcyBzbyB5b3UgY2FuIGFjbG9jYWwgLUkgbTRtYWNyb3Mgd2hpbGUgYXZvaWRpbmcgYWNpbmNsdWRlLm00CgoJKiBNYWtlZmlsZS5hbTogYWRkIG00bWFjcm9zIHN1YmRpciwgcmVtb3ZlIHJlZmVyZW5jZXMgdG8gZ2xpYi0yLjAubTQKCjIwMDEtMDUtMTQgIEhhdm9jIFBlbm5pbmd0b24gIDxocEByZWRoYXQuY29tPgoKCSogZ3V0ZjguYyAoZ191dGY4X2dldF9jaGFyKTogZml4IGRvY3M7IHRoZXkgc2FpZCB3ZSB2YWxpZGF0ZWQgCgl0aGUgVVRGLTgsIGJ1dCB3ZSBjYW4ndCBwb3NzaWJseSBkZXRlY3QgcGFydGlhbCBjaGFycyBzaW5jZQoJdGhlcmUncyBubyBsZW5ndGggYXJnIGhlcmUsIHNvIHRyeWluZyB0byB1c2UgdGhpcyBmdW5jdGlvbiAKCW9uIGludmFsaWQgVVRGLTggaXMgYSBiYWQgaWRlYS4KClRodSBNYXkgMTAgMjM6MjE6MzAgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbWVzc2FnZXMuYyAoZ19sb2dfd3JpdGVfcHJlZml4KTogQXZvaWQgdXNpbmcgc3RkaW8KCXRvIGJlIGFzIHJvYnVzdCBhcyBwb3NzaWJsZSBpbiBvdXQtb2YtbWVtb3J5LgoKCSogZ21lc3NhZ2VzLmMgKGdfbG9nX2RlZmF1bHRfaGFuZGxlcik6IFJlbW92ZSBzb21lIGRlYWQKCWNvZGUuCgoJKiBndXRpbHMuYyAoZ19wYXJzZV9kZWJ1Z19zdHJpbmcpOiBGaXggdG8gYXZvaWQgbWFsbG9jcy4KCkZyaSBNYXkgMTEgMTg6MjU6MjMgMjAwMSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ2RhdGFzZXQuYzoKCShnX2RhdGFzZXRfZm9yZWFjaCk6CgkoZ19kYXRhbGlzdF9mb3JlYWNoKTogbWFrZSB0aGVzZSBzYWZlIGFnYWluc3QgcmVtb3ZhbCBvZiB0aGUKCWN1cnJlbnQgZWxlbWVudC4KCjIwMDEtMDUtMTAgIEhhdm9jIFBlbm5pbmd0b24gIDxocEBwb2JveC5jb20+CgoJKiBnbWVzc2FnZXMuYyAoZ19sb2dfd3JpdGVfcHJlZml4KTogY2hhbmdlIGVudiB2YXJpYWJsZSB0bwoJR19NRVNTQUdFU19QUkVGSVhFRCwgc3VnZ2VzdGVkIGJ5IFRpbQoKVGh1IE1heSAxMCAxNToxOTowMSAyMDAxICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnc2Nhbm5lci5jIChnX3NjYW5uZXJfa2V5X2hhc2gpOiB1c2UgZ19zdHJfaGFzaCgpIGFsZ29yaXRobQoJdG8gZ2VuZXJhdGUgaGFzaGVzLgoKCSogZ21lbS5jIChzdGFuZGFyZF9jYWxsb2MpOiBmcmVlKCkgZG9lc24ndCByZXR1cm4gYSB2YWx1ZQoJKE1hcmsgTXVybmFuZSkuCgoyMDAxLTA0LTI2ICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogR2V0IHJpZCBvZiAtLWVuYWJsZS1tc2ctcHJlZml4CgoJKiBnbWVzc2FnZXMuYzogbWFrZSB3aGV0aGVyIHRvIHByZWZpeCB0aGUgbWVzc2FnZXMgd2l0aAoJYXBwbmFtZS9waWQgYSBydW50aW1lIHNldHRpbmcsIG5vdCBhIGNvbXBpbGUtdGltZSBzZXR0aW5nLiAgQ2hhbmdlCglkZWZhdWx0IHRvIGluY2x1ZGUgcHJlZml4IGZvciBkZWJ1Zy93YXJuaW5nL2Vycm9yIHR5cGUgbWVzc2FnZXMuCgoyMDAxLTA1LTA5ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ3RocmVhZC5jLCBndGhyZWFkLmg6IFJlbmFtZWQgJ3ZhbHVlJyBhbmQgJ2FyZycgdG8gJ2RhdGEnIGFuZAoJJ3RocmVhZF9mdW5jJyB0byAnZnVuYycgdG8gbWFrZSBpdCBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdAoJb2YgR0xpYi4KCgkqIGd0aHJlYWRwb29sLmMsIGd0aHJlYWRwb29sLmg6IE1vdmVkICdzdGFja19zaXplJyBmcm9tIHRoZSBwdWJsaWMKCW1lbWJlcnMgb2YgR1RocmVhZFBvb2wgdG8gdGhlIHByaXZhdGUgb25lcy4gUmVuYW1lZCAndGhyZWFkX2Z1bmMnCgl0byAnZnVuYycgYXMgYWJvdmUuIE1vdmVkIHVwICd1c2VyX2RhdGEnIGluIGdfdGhlYWRfcG9vbF9uZXcKCWFyZ3VtZW50IGxpc3QgYW5kIGluIEdUaHJlYWRQb29sIHN0cnVjdC4KCQpUdWUgTWF5ICA4IDE1OjMzOjMxIDIwMDEgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdjb21wbGV0aW9uLmg6IHJlbW92ZWQgI2luY2x1ZGUgPHVuaXN0ZC5oPiBzbmVha2VkIGluIGJ5Cglzb3B3aXRoIGluIG5vdmVtYmVyLgoKMjAwMS0wNS0wOCAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdtYWluLmMsIGd0aHJlYWQuYywgZ3RocmVhZC5oOiBNb3ZlZCBmdW5jIGFuZCBhcmcgbWVtYmVycyBmcm9tCglHUmVhbFRocmVhZCB0byBHVGhyZWFkLCBzdWNoIHRoYXQgdGhleSBjYW4gYmUgYWNjZXNzZWQgYnkgdGhlCgl1c2VyLgoKCSogZ3RocmVhZC5jLCBndGhyZWFkLmg6IER1ZSB0byBwb3B1bGFyIGRlbWFuZCAoVGltIGJlaW5nIHRoZQoJcG9wdWx1cyBoZXJlIDstKSB0aHJlYWRzIG5vdyBoYXZlIGEgJ3JldHVybiB2YWx1ZScsIHdoaWNoIGlzCglyZXR1cm5lZCBieSBnX3RocmVhZF9qb2luIGFuZCBpcyBlaXRoZXIgdGhlIHJldHVybiBvZiB0aGUgdG9wbW9zdAoJdGhyZWFkIGZ1bmN0aW9uIG9yIHRoZSB2YWx1ZSBnaXZlbiB0byBnX3RocmVhZF9leGl0LgoJCgkqIGd0aHJlYWRwb29sLmMsIHRlc3RzL21haW5sb29wLXRlc3QuYywgdGVzdHMvdGhyZWFkLXRlc3QuYzoKCUFkYXB0ZWQgdG8gdGhlIGFib3ZlIGNoYW5nZS4KCjIwMDEtMDEtMDYgIEhhbnMgQnJldWVyICA8aGFuc0BicmV1ZXIub3JnPgoKCSogZ2xpYi5kZWYgOiBkb24ndCB0cnkgdG8gZXhwb3J0IGdfc3RyY3B5LCBpdCBpcyBnX3N0cGNweTsKCXVwZGF0ZWQgYW5kIGFkZGVkIHNvbWUgdHdlYWtpbmcgZm9yIGZ1bmN0aW9ucyB3aGljaCBnb3QgCglyZW5hbWVkIHJlY2VudGx5LCB0byBhdm9pZCB0aGUgdXBkYXRlIGhhc3NsZSBpZiBpdCBjYW4gCglzaW1wbHkgYmUgZG9uZSBjb21wYXRpYmxlLiBTaG91bGQgdmFuaXNoIGlmIHRoZXJlIGlzIGEgCglzdGFibGUgdmVyc2lvbiBmb3Igd2luMzIuCgpGcmkgTWF5ICA0IDExOjQ5OjE4IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogUmVsZWFzZWQgMS4zLjUKCgkqIE5FV1M6IFVwZGF0ZWQKCgkqIGNvbmZpZ3VyZS5pbiAoR0xJQl9NSUNST19WRVJTSU9OKTogVXAgdmVyc2lvbiB0byAxLjMuNSwKCWludGVyZmFjZS9iaW5hcnkgYWdlIDAuCgoyMDAxLTA1LTA0ICBTdmVuIE5ldW1hbm4gIDxzdmVuQGNvbnZlcmdlbmNlLmRlPgoKCSogZ2hhc2guYzogZml4ZWQgYSB0eXBvIGluIGEgY29tbWVudC4KCgkqIGd0cmVlLltjaF06IGFkZGVkIG5ldyBmdW5jdGlvbnMgZ190cmVlX25ld19mdWxsKCksIGdfdHJlZV9yZXBsYWNlKCksIAoJZ190cmVlX3N0ZWFsKCkgYW5kIGdfdHJlZV9mb3JlYWNoKCkgdG8gYWRhcHQgR1RyZWUgdG8gdGhlIEdIYXNoVGFibGUKCUFQSS4gTW92ZWQgY29tbWVudHMgaW50byB0aGUgQyBmaWxlLgoKCSogZG9jcy9yZWZlcmVuY2UvZ2xpYi9nbGliLXNlY3Rpb25zLnR4dAoJKiBkb2NzL3JlZmVyZW5jZS9nbGliL3RtcGwvZ2xpYi11bnVzZWQuc2dtbAoJKiBkb2NzL3JlZmVyZW5jZS9nbGliL3RtcGwvaGFzaF90YWJsZXMuc2dtbAoJKiBkb2NzL3JlZmVyZW5jZS9nbGliL3RtcGwvbGlua2VkX2xpc3RzX2RvdWJsZS5zZ21sCgkqIGRvY3MvcmVmZXJlbmNlL2dsaWIvdG1wbC9saW5rZWRfbGlzdHNfc2luZ2xlLnNnbWwKCSogZG9jcy9yZWZlcmVuY2UvZ2xpYi90bXBsL21hY3Jvc19taXNjLnNnbWwKCSogZG9jcy9yZWZlcmVuY2UvZ2xpYi90bXBsL3RyZWVzLWJpbmFyeS5zZ21sOiB1cGRhdGVkIGRvY3VtZW50YXRpb24KCQpUaHUgTWF5ICAzIDA2OjM4OjI4IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ1tzXWxpc3QuYyAoZ19bc11saXN0X2ZvcmVhY2gpIGRvY3MvQ2hhbmdlcy0yLjAudHh0OiBNYWtlCglmb3JlYWNoKCkgc2FmZSBhZ2FpbnN0IHJlbW92YWwgb2YgdGhlIF9jdXJyZW50XyBlbGVtZW50LiBXaGlsZQoJdGhpcyBjb3VsZCBicmVhayBzb21lIGNvZGUsIHRoZSBuZXcgYmVoYXZpb3IgaXMgY29uc2lzdGVudCB3aXRoCgl0aGUgcmVzdCBvZiBHTGliL0dUSysgYW5kIHByb2JhYmx5IGlzIHdoYXQgcGVvcGxlIGV4cGVjdCBpbiBtb3N0CgljYXNlcy4gKFN1Z2dlc3RlZCBieSBQYXVsIEt1eWtlbmRhbGwsICM1MDA3MSkKCldlZCBNYXkgIDIgMTE6MTA6MjIgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBndXRmOC5jIChnX3V0ZjhfdG9fdWNzNF9mYXN0KTogRml4IHJlYWQgcGFzdCBlbmQgb2YgdGhlIHN0cmluZy4KCSgjNTA0MDQsIGZpeCBmcm9tIEpvbmFzIEJvcmdzdHLDtm0pCgkKU3VuIEFwciAyOSAwMDozNzozNCAyMDAxICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnaG9vay5baGNdOiBtYWRlIGhvb2sgaWRzIGEgZ3Vsb25nLgoKMjAwMS0wNC0yMCAgRGFuIFdpbnNoaXAgIDxkYW53QHhpbWlhbi5jb20+CgoJKiBjb25maWd1cmUuaW46IEFkZCBhIGNoZWNrIGZvciB0aGUgRGFyd2luIGR5bmFtaWMgbGlua2VyLiBVc2UKCUFDX1RSWV9MSU5LIHdoZW4gY2hlY2tpbmcgZm9yICJub25wb3NpeCBnZXRwd3VpZF9yIiBzbyBpdCBub3RpY2VzCgkibm8gZ2V0cHd1aWRfciIgY29ycmVjdGx5LgoKCSogdGVzdGdsaWIuYyAobWFpbik6IE1ha2UgdGVtcGxhdGVbXSBiaWdnZXIgdG8gcHJldmVudCBhbiBvdmVycnVuLgoJUmVtb3ZlIGFuIHVudXNlZCB2YXJpYWJsZS4gSW5pdGlhbGl6ZSBlcnJvciB0byBOVUxMLgoKCSogdGVzdHMvZ2lvLXRlc3QuYyAobWFpbik6IEFkZCBhIGNhc3QgdG8gcHJldmVudCBhIHdhcm5pbmcgd2hlbgoJc2l6ZV90IGlzIGEgbG9uZy4KCgkqIHRlc3RzL3R5cGUtdGVzdC5jIChtYWluKTogQWRkIGFuICNpZmRlZiB0byBwcmV2ZW50IGEgd2FybmluZwoJd2hlbiBHX0hBVkVfR0lOVDY0IGlzIGRlZmluZWQgYW5kIEdfR0lOVDY0X0ZPUk1BVCBpc24ndC4KCjIwMDEtMDQtMTkgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnaGFzaC5jLCBnaGFzaC5oOiBSZW1vdmUgZGVmaW5pdGlvbiBvZiBnX2hhc2hfdGFibGVfZnJlZXplIGFuZAoJZ19oYXNoX3RhYmxlX3RoYXcuIEluc3RlYWQgYWRkZWQgR19ESVNBQkxFX0RFUFJFQ0FURUQtZ3VhcmRlZAoJbWFjcm9zIHRvIGdoYXNoLmggdG8gZ28gYWxvbmcgdGhlIGxpbmVzIG9mIHRoZSBzdGFuZGFyZC4KCgkqIGdzY2FubmVyLmMsIGdzY2FubmVyLmg6IERpdG8gZm9yIGdfc2Nhbm5lcl9mcmVlemVfc3ltYm9sX3RhYmxlCglhbmQgZ19zY2FubmVyX3RoYXdfc3ltYm9sX3RhYmxlLgoKCSogZ3V0aWxzLmMsIGd1dGlscy5oOiBEaXRvIGZvciBnX2Rpcm5hbWUuIGdfYmFzZW5hbWUgaXMgc3RpbGwKCWRlZmluZWQgaW4gZ3V0aWxzLmMsIGJ1dCBkZWNsYXJlZCBpbmcgZ3V0aWxzLmggb25seQoJR19ESVNBQkxFX0RFUFJFQ0FURUQtZ3VhcmRlZC4KCQoJKiBjb25maWd1cmUuaW46IFJlbW92ZWQgYmFzaGlzbSBpbiB0ZXN0IGZvciB0aGUgcGtnLWNvbmZpZwoJdmVyc2lvbi4KCgkqIGNvbmZpZ3VyZS5pbjogUmV3cm90ZSB0ZXN0IGZvciBtdWx0aXRocmVhZCBmbGFnLiBOb3cgdXNlcwoJbG9jYWx0aW1lX3IsIHdoaWNoIGhvcGVmdWxseSBoYXMgYSBjb25zaXN0ZW50IHByb3RvdHlwZSBhY3Jvc3MKCWRpZmZlcmVudCBwbGF0Zm9ybXMuIEFsc28gaXQgdXNlcyBhIGNsZXZlciBkb3VibGUgRUdSRVAgdHJpY2sKCWluc3RlYWQgb2YgY29tcGlsaW5nLCB3aGljaCBjb3VsZCBnaXZlIGZhbHNlIHBvc2l0aXZlcy4gVGhhbmtzIHRvCglEYW4gV2luc2hpcCA8ZGFud0B4aW1pYW4uY29tPiBmb3IgdGhlIGhpbnQuCgpXZWQgQXByIDE4IDE3OjM1OjM4IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ3V0aWxzLmMgKF9nbGliX2dldHRleHQpOiBBZGQgbWlzc2luZyBzdGF0aWMgcG9pbnRlZAoJb3V0IGJ5IE1pY2hhZWwgTWVla3MuCgpXZWQgQXByIDE4IDA5OjM3OjA3IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogTUFJTlRBSU5FUlM6IFJlbW92ZWQuIEtlZXBpbmcgUkVBRE1FLCBSRUFETUUuY3ZzLWNvbW1pdHMKCUhBQ0tJTkcsIGFuZCBBVVRIT1JTIHVwIHRvIGRhdGUgaXMgcGxlbnR5IHdpdGhvdXQgZXh0cmEKCXJhbmRvbSBmaWxlcyB0aGF0IHNvbWVvbmUgdGhvdWdodCBhIG1vZHVsZSBzaG91bGQgaGF2ZS4KCShBY3R1YWxseSwgSSBiZWxpZXZlIHRoaXMgd2FzIHVzZWQgZm9yIGRlYmJ1Z3MgaW4gdGhlIHBhc3QuKQoKVHVlIEFwciAxNyAxMTo0NzowNyAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIFJlbGVhc2VkIDEuMy40CgoJKiBORVdTOiBVcGRhdGVkCgpUdWUgQXByIDE3IDEwOjQzOjM2IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ3N0cmZ1bmNzLmM6IERlZmluZSBfR05VX1NPVVJDRSBmb3Igc3RwY3B5CgoJKiB0ZXN0cy9tYWlubG9vcC10ZXN0LmMgKG1haW4pOiBXYWl0IGZvciBhbGwgdGhyZWFkcwoJdG8gc3RhcnQgYmVmb3JlIGJlZ2lubmluZyB0ZXN0cy4KCjIwMDEtMDQtMTcgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBndGhyZWFkcG9vbC5jIChnX3RocmVhZF9wb29sX3RocmVhZF9wcm94eSk6IFVudGlsIG5vdyBldmVyeQoJdGhyZWFkIHBvb2wgYWx3YXlzIGhhZCBhdCBsZWFzdCBvbmUgdHJlYWQgd2FpdGluZyB0byBhdm9pZAoJc3dpdGNoaW5nIG92ZXJoZWFkIGluIGNhc2UgYSBuZXcgdGFzayB3b3VsZCBiZSBhZGRlZCBzb29uIGFmdGVyCglvbmUgZmluaXNoZWQuIFRoaXMgaG93ZXZlciBtZWFucyBhIGJpZyB3YXN0ZSBvZiB0aHJlYWRzLCBpZiBtYW55Cgltb3N0bHkgaW5hY3RpdmUgdGhyZWFkIHBvb2xzIGFyZSBpbnZvbHZlZC4gTm93IHN1Y2ggYSB3YWl0aW5nCgl0aHJlYWQgd2lsbCBvbmx5IHdhaXQgZm9yIGhhbGYgYSBzZWNvbmQgKFRoaXMgdmFsdWUgaXMgb2YgY291cnNlCgl2ZXJ5IHJhbmRvbWx5IHBpY2tlZCkgYW5kIGdvIHRvIHRoZSBnbG9iYWwgdGhyZWFkcG9vbCBhZnRlcndhcmRzLgoKTW9uIEFwciAxNiAxMjowNDo1MiAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIHdhcm5pbmdzIGFib3V0IGNvbmZsaWN0cyB3aXRoIHRoZQoJc3RhYmxlIHZlcnNpb24uCgoJKiBnbGliLTIuMC5tNDogRml4IHNvbWUgb2YgdGhlIGVycm9yIHRleHQgdG8gYmUgaGFsZndheQoJdXAgdG8gZGF0ZS4KCgkqIFJFQURNRS5pbiBJTlNUQUxMLmluOiBBZGQgdGhlc2UgdG8gZ2VuZXJhdGUgUkVBRE1FLCBJTlNUQUwKCShhcyBpbiB0aGUgc3RhYmxlIGJyYW5jaCkuIFVwZGF0ZS4KCgkqIEhBQ0tJTkc6IFVwZGF0ZS4KCjIwMDEtMDQtMTYgIEhhdm9jIFBlbm5pbmd0b24gIDxocEByZWRoYXQuY29tPgoKCSogZ3Fzb3J0LmM6IGRvY3MKCgkqIGdmaWxldXRpbHMuYzogZG9jcwoKCSogZ3dpbjMyLmM6IGRvY3MgZml4ZXMKCgkqIGdjb252ZXJ0LmM6IGRvY3MKCgkqIGd1bmlwcm9wLmM6IGRvY3MKCgkqIGd1dGY4LmM6IGRvY3MKCjIwMDEtMDQtMTYgIEhhdm9jIFBlbm5pbmd0b24gIDxocEByZWRoYXQuY29tPgoKCSogZ2xpYi0yLjAubTQ6IHB1dCBBQ19QQVRIX1BST0cocGtnLWNvbmZpZykgYmVmb3JlICJDaGVja2luZyBmb3IKCWdsaWIiIHNvIHRoZSBvdXRwdXQgbG9va3MgcmlnaHQJCgoyMDAxLTAzLTIzICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcmVkaGF0LmNvbT4KCgkqIGd1dGlscy5jIChnX3BhcnNlX2RlYnVnX3N0cmluZyk6IG1ha2UgR0RlYnVnS2V5cyBhcmd1bWVudCAKCWNvbnN0CgoyMDAxLTA0LTE0ICBIYW5zIEJyZXVlciAgPGhhbnNAYnJldWVyLm9yZz4KCgkqIGdsaWIuZGVmIDogCgkqIG1ha2VmaWxlLm1zYy5pbiA6IHVwZGF0ZWQKCgkqIGdwYXR0ZXJuLmMgOiBpbmNsdWRlICJndXRpbHMuaCIgdG8gcmVzb2x2ZSB0aGUgaW5saW5lIGhhc3NsZQoKMjAwMS0wNC0xMSAgQWxleGFuZGVyIExhcnNzb24gIDxhbGV4bEByZWRoYXQuY29tPgoKCSogZ2xpYi0yLjAubTQ6IFBhc3MgcGtnLWNvbmZpZyBvcHRpb25zCgliZWZvcmUgdGhlIG90aGVyIGFyZ3Mgc28gaXQgd29ya3MgZXZlbiBpZgoJUE9TSVhMWV9DT1JSRUNUIGlzIHNldC4KCk1vbiBBcHIgIDkgMTg6NTc6NDQgMjAwMSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogY29uZmlndXJlLmluOiBpbmNyZW1lbnQgdmVyc2lvbiB0byAxLjMuNCAoYmluYXJ5IDAsIGludGVyZmFjZSAwKS4KCjIwMDEtMDQtMDUgIENocmlzdGlhbiBSb3NlICA8bWVudGhvc0BtZW50aG9zLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgc3YgdG8gQUxMX0xJTkdVQVMuCgpXZWQgQXByICA0IDA5OjE4OjU1IDIwMDEgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIFJlbGVhc2VkIEdMaWItMS4zLjMuCgpUdWUgQXByICAzIDIwOjIyOjU5IDIwMDEgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIE5FV1M6IHVwZGF0ZXMuCgoJKiBORVdTLnByZS0xLTM6IHRha2Ugb3ZlciBvbGQgbmV3cy4KClR1ZSBBcHIgIDMgMTI6Mzg6MTYgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbGliLWNvbmZpZy0yLjAuaW46IEV4aXQgd2l0aCBhbiBlcnJvciBtZXNzYWdlIHRoYXQgeW91CglzaG91bGQgdXNlIHBrZy1jb25maWcgaW5zdGVhZC4KCgkqIGNvbmZpZ3VyZS5pbiAoUEFDS0FHRSk6IFJlcXVpcmUgcGtnLWNvbmZpZy4KCgkqIHRlc3RzL01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIHV0ZjgudHh0LgoKCSogY29uZmlndXJlLmluIChHTElCX01JQ1JPX1ZFUlNJT04pOiBVcCBNSUNSTyB0byAzLAoJbGVhdmUgaW50ZXJmYWNlL2JpbmFyeSBhdCAwLgoKVHVlIEFwciAgMyAxMzo0NjoyMiAyMDAxICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbGlzdC5baGNdOiBhZGRlZCBnX2xpc3RfbnRoX3ByZXYoKSB3aGljaCB3YWxrcyAtPnByZXYgaW5zdGVhZAoJb2YgLT5uZXh0LgoKCSogZ3BhdHRlcm4uW2hjXTogYWRkZWQgc2hlbGwtc3R5bGUgcGF0dGVybiBtYXRjaGluZyBjb2RlIGZyb20gYmVhc3QsCglkZXJpdmVkIGZyb20gdGhlIGd0a19wYXR0ZXJuXyooKSBjb2RlLCBidXQgd2l0aCBhIGNvdXBsZSBvZiBidWcgZml4ZXMKCWFuZCBhIG51bWJlciBvZiBvcHRpbWl6YXRpb25zLgoKMjAwMS0wNC0wMyAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGd0aHJlYWRwb29sLmM6IEFkZGVkIGRvY3VtZW50YXRpb24uCgoJKiBndGhyZWFkcG9vbC5jOiBUaGUgZ2xvYmFsIHRocmVhZCBwb29sIG5vdyBhbHNvIGlzIHNlcGVyYXRlZCBmb3IKCWJvdW5kIGFuZCB1bmJvdW5kIHRocmVhZHMuIE9ubHkgdGhyZWFkcyB3aXRoIHN0YW5kYXJkIHN0YWNrIHNpemUKCWdvIHRvIHRoZSBnbG9iYWwgcG9vbC4gZ190aHJlYWRfcG9vbF9uZXcgbm93IHByb3RlY3RzIHRoZSBnbG9iYWwKCXNldHVwIG9mIGluZm9ybV9tdXRleCBldGMuIHdpdGggYSBsb2NrLiBGaXhlZCBzb21lIHR5cG9zLiBVbmxvY2sKCXRoZSBxdWV1ZSBhZnRlciBnX3RocmVhZF9wb29sX3dha2V1cF9hbmRfc3RvcF9hbGwgaW4gdGhlIHByb3h5LgoKMjAwMS0wNC0wMiAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdtYWluLmM6IFVzZSB0aGUgbmV3IEdSZWFsVGhyZWFkIG1lbWJlciAiY29udGV4dCIgaW5zdGVhZCBvZiBhCglHU3RhdGljUHJpdmF0ZSB0byBzdG9yZSB0aGUgdGhyZWFkIHNwZWNpZmljIG1haW4gbG9vcCBjb250ZXh0LgoKCSogZ3RocmVhZC5jOiBBZGRlZCAiY29udGV4dCIgbWVtYmVyIHRvIEdSZWFsVGhyZWFkIGFuZCB1cGRhdGVkCglnX3RocmVhZF9jcmVhdGUsIGdfdGhyZWFkX3NlbGYgYW5kIGdfdGhyZWFkX2NsZWFudXAgYWNjb3JkaW5nbHkuCgkKCSogZ3RocmVhZC5jLCBndGhyZWFkLmg6IFJlbW92ZWQgdGhlIGZ1bmN0aW9ucwoJZ19zdGF0aWNfcHJpdmF0ZV8oZ2V0fHNldClfZm9yX3RocmVhZCBhbmQgYWRhcHRlZAoJZ19zdGF0aWNfcHJpdmF0ZV8oZ2V0fHNldCkgYW5kIGdfc3RhdGljX3ByaXZhdGVfZnJlZQoJYWNjb3JkaW5nbHkuIFRoaXMgZml4ZXMgQnVnICM1MTQzNS4KCQoyMDAxLTAzLTMwICBTdmVuIE5ldW1hbm4gIDxzdmVuQGdpbXAub3JnPgoKCSogZ2hhc2guW2NoXQoJKiBkb2NzL3JlZmVyZW5jZS9nbGliL3RtcGwvaGFzaF90YWJsZXMuc2dtbDogYWRkZWQgbmV3IGZ1bmN0aW9ucwoJZ19oYXNoX3RhYmxlX25ld19mdWxsLCBnX2hhc2hfdGFibGVfcmVwbGFjZSwgZ19oYXNoX3RhYmxlX3N0ZWFsIGFuZAoJZ19oYXNoX3RhYmxlX2ZvcmVhY2hfc3RlYWwuIE1vdmVkIG1vc3QgZG9jcyBvdXQgb2YgdGhlIHRlbXBsYXRlCglmaWxlIGludG8gdGhlIEMgZmlsZS4gUGxlYXNlIHByb29mcmVhZCB0aGUgbmV3IGRvY3VtZW50YXRpb24uCgoyMDAxLTAzLTI5ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdsaWIuZGVmOiBVcGRhdGVzLgoJKiB0ZXN0cy9tYWtlZmlsZS5taW5ndy5pbgoJKiB0ZXN0cy9tYWtlZmlsZS5tc2MuaW46IEFkZCBtb2R1bGUtdGVzdCBydWxlcy4KCk1vbiBNYXIgMjYgMTQ6MTQ6NTMgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBNYWtlZmlsZS5hbSAoSU5DTFVERVMpOiAtREdfRElTQUJMRV9ERVBSRUNBVEVECgoJKiBnbWFpbi5oIHRpbWVsb29wLmM6IFN1cnJvdW5kIHRoZSBjcnVmdGllc3Qgc3R1ZmYgd2l0aAoJI2lmbmRlZiBHX0RJU0FCTEVfREVQUkVDQVRFRC4KCgkqIGdjb21wYXQuaCBnZGF0ZS5oOiBNb3ZlIGNvbXBhdCBkZWZpbmVzIGJhY2sgdG8gCglnZGF0ZS5oLCBzdXJyb3VuZCB3aXRoICNpZm5kZWYgR19ESVNBQkxFX0RFUFJFQ0FURUQuIAoJUmVtb3ZlIGdjb21wYXQuaC4KCk1vbiBNYXIgMjYgMTM6MzQ6NTAgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJWyBQYXRjaCBmcm9tIERpbmRpblggIDxEYXZpZC5PZGluQGJpZ2Zvb3QuY29tPiwgYWRkZWQgZG9jcyBdCiAKCSogZ3N0cmZ1bmNzLmMsIGdzdHJmdW5jcy5oOiBBZGQgZ19zdHBjcHkgKCkgZm9yIHBsYXRmb3JtIHRoYXQKCWRvbid0IGhhdmUgc3RwY3B5ICgpLgoJKiBnc3RyZnVuY3MuYyAoZ19zdHJqb2luLCBnX3N0cmpvaW52LCBnX3N0cmNvbmNhdCk6IAoJdXNlIGdfc3RwY3B5ICgpIHNvIHRoZXNlIGZ1bmN0aW9ucyBydW4gbXVjaCBmYXN0ZXIuCgkqIGNvbmZpZy5oLndpbjMyLmluLCBnbGliLmRlZjogYWRkIHJlZmVyZW5jZSB0byBnX3N0cGNweSAoKQoJKiBjb25maWd1cmUuaW46IEFkZCBhIHRlc3QgZm9yIHRoZSBzdHBjcHkgKCkgZnVuY3Rpb24uCiAKMjAwMS0wMy0yMCAgSGF2b2MgUGVubmluZ3RvbiAgPGhwQHJlZGhhdC5jb20+CgoJKiBndXRmOC5jIChnX3V0Zjhfc3RybGVuKTogcmV3cml0ZSwgYmFzZWQgb24gYnVnICM1MjMyOCBmcm9tCglBbmRlcnMKCjIwMDEtMDMtMTkgIEhhdm9jIFBlbm5pbmd0b24gIDxocEByZWRoYXQuY29tPgoKCSogZ3V0ZjguYyAoZ191bmljaGFyX3ZhbGlkYXRlKTogYWRkZWQgdGhpcyBmdW5jdGlvbgoKMjAwMS0wMy0xOCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnc3Bhd24td2luMzIuYyAoU0VUVVBfREVCVUcpOiBBZGQgYnJhY2VzIHRvIHNpbGVuY2UgZ2NjIC1XYWxsLgoKCSogZ3NwYXduLXdpbjMyLWhlbHBlci5jICh3cml0ZV9ub19lcnJvcik6IFJlbW92ZSB1bnVzZWQgZnVuY3Rpb24uCgoJKiB0ZXN0cy9tYWtlZmlsZS5taW5ndy5pbiAobW9kdWxlLXRlc3QuZXhlKTogQWRkIHJ1bGVzIGZvcgoJYnVpbGRpbmcgbW9kdWxlLXRlc3QuCgpXZWQgTWFyIDE0IDE4OjQ2OjU0IDIwMDEgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdzY2FubmVyLltoY106IHJlbW92ZWQgYXJjaGFpYyBncG9pbnRlciBkZXJpdmVkX2RhdGE7IHJlbGljdCBhbmQKCWFkZGVkIGEgR0RhdGEgbWVtYmVyIGluc3RlYWQuCgkKCSogZ2xpc3QuW2hjXTogYWRkZWQgZ19saXN0X3JlbW92ZV9hbGwoKS4KCgkqIGdzbGlzdC5baGNdOiBhZGRlZCBnX3NsaXN0X3JlbW92ZV9hbGwoKS4KClNhdCBNYXIgMTcgMTk6NTQ6NTEgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiB0aW1lbG9vcC5jOiBSZW9yZGVyIGhlYWRlcnMgdG8gbWFrZSBGcmVlQlNEIGhhcHB5LiAKCjIwMDEtMDMtMTMgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCUZyb20gRWR3YXJkIE0uIExlZSAgPHRhaWxiZXJ0QHlhaG9vLmNvbT46CgoJKiBnZGF0ZS5jIChnX2RhdGVfc2V0X3BhcnNlKTogYWRkIHN1cHBvcnQgZm9yIGRhdGVzIHRoYXQgaW4gdGhlCglmb3JtICJXZWQgTWFyIDE0IDIwMDEiLiBSdW5uaW5nIHRlc3RnZGF0ZSBvbiBjeWd3aW4gcmVxdWlyZXMgdGhpcy4KCkZyaSBNYXIgIDkgMTg6MDE6NDMgMjAwMSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ3NjYW5uZXIuW2hjXTogbWFkZSBjb25maWcgYXJnIHRvIGdfc2Nhbm5lcl9uZXcoKSBjb25zdC4KCjIwMDEtMDMtMTIgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogdGVzdHMvTWFrZWZpbGUuYW0gKGxpYm1vZHVsZXRlc3RwbHVnaW5fYl9sYV9MSUJBREQsCglsaWJtb2R1bGV0ZXN0cGx1Z2luX2JfbGFfTElCQUREKTogTGluayB3aXRoIHRoZSBsaWJnbW9kdWxlIGxhIG9ubHkKCW9uIFdpbjMyLgoKMjAwMS0wMy0xMCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbGliY29uZmlnLmgud2luMzIuaW46IERlZmluZSBHX1BMQVRGT1JNX1dJTjMyIGhlcmUsIHRvby4KCgkqIHRlc3RzL01ha2VmaWxlLmFtOiBVc2UgdGhlIF9MSUJBREQgZGVwZW5kZW5jeSBvbiBsaWJnbGliIG9ubHkgb24KCVdpbjMyLgoKMjAwMS0wMy0wOSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBSRUFETUUud2luMzI6IFVwZGF0ZSB3aXRoIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgY29uZmlndXJlCglhbmQgbGlidG9vbC4KCjIwMDEtMDMtMDkgIEhhbnMgQnJldWVyICA8aGFuc0BicmV1ZXIub3JnPgoKCSogZ29iamVjdC9nb2JqZWN0LmRlZiA6IHVwZGF0ZWQKCjIwMDEtMDMtMDggIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ2xpYi5kZWYKCSogZ29iamVjdC9nb2JqZWN0LmRlZgoJKiBnb2JqZWN0L21ha2VmaWxlLm1pbmd3LmluOiBVcGRhdGUuCgoyMDAxLTAzLTA4ICBTdmVuIE5ldW1hbm4gIDxzdmVuQGdpbXAub3JnPgoKCSogZ3RyZWUuW2NoXTogCgkqIGRvY3MvcmVmZXJlbmNlL2dsaWIvdG1wbC90cmVlcy1iaW5hcnkuc2dtbDogYWRkZWQgbmV3IGZ1bmN0aW9uIAoJZ190cmVlX2xvb2t1cF9leHRlbmRlZCgpLgoKVGh1IE1hciAgOCAxNjoyMzozNCAyMDAxICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnaG9vay5baGNdOiBkZXN0cnVjdGlvbiBjbGVhbnVwLiB0aGVyZSdzIG9uZQoJLT5maW5hbGl6ZV9ob29rIG1lbWJlciBpbiB0aGUgaG9va2xpc3Qgbm93IHRoYXQgZ2V0cwoJY2FsbGVkIHdoZW4gYSBob29rIHNob3VsZCBiZSBkZXN0cm95ZWQsIHRoYXQncyBpdC4KCXRoYXQgZnVuY3Rpb24gaXMgZ3VhcnJhbnRlZWQgdG8gYmUgY2FsbGVkIG9ubHkgd2hlbgoJYWxsIHJlZl9jb3VudHMgdG8gdGhlIGhvb2sgdmFuaXNoZWQsIHRodXMgYWxzbyB3aGVuCgl0aGUgaG9vayBpcyBub3QgaW4gY2FsbC4KCjIwMDEtMDMtMDggIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBjb25maWd1cmUuaW4gKEZMQUdfRE9FU19OT1RfV09SSyk6IEZpeCB0eXBvIGFuZCB0aHVzIGJ1ZyAjNTE4NjIuCgpXZWQgTWFyICA3IDA5OjMyOjA2IDIwMDEgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdsaWItb2JqZWN0Lmg6IGFkZCBndmFsdWVhcnJheS5oLgoKCSogZ3N0cmluZy5baGNdOiBmaXh1cCBuYW1pbmcgb2YgZ19zdHJpbmdfc3ByaW50Ki4KCQoJKiBndHlwZXMuaDogZml4ZWQgR0NvbXBhcmVEYXRhRnVuYyBuYW1pbmcuCgoyMDAxLTAzLTA3ICBDaHJpc3RpYW4gTWV5ZXIgIDxjaHJpc2ltZUBnbm9tZS5vcmc+CgoJKiBjb25maWd1cmUuaW46IEFkZGVkIGRlIChHZXJtYW4pIHRvIEFMTF9MSU5HVUFTLgoKMjAwMS0wMy0wMiAgQ2hyaXN0b3BoZSBNZXJsZXQgIDxyZWRmb3hAZWlrb25leC5vcmc+CgoJKiBjb25maWd1cmUuaW46IEFkZGVkIGZyIChGcmVuY2gpIHRvIEFMTF9MSU5HVUFTLgoKMjAwMS0wMy0wMSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBndXRpbHMuYyAoZ19wYXRoX2lzX2Fic29sdXRlKTogKFdpbjMyKSBSZW1vdmUgdGVzdCBmb3IgaW5pdGlhbAoJZG91YmxlIGJhY2tzbGFzaCAoVU5DIHBhdGgpLCB0aGlzIHdpbGwgb2YgY291cnNlIGJlIG1hdGNoZWQgYnkgdGhlCgl0ZXN0IGZvciBhbiBpbml0aWFsIEdfRElSX1NFUEFSQVRPUiByaWdodCB1cCBmcm9udC4gU2lsbHkgbWUuCgkoZ19maW5kX3Byb2dyYW1faW5fcGF0aCk6IEltcGxlbWVudCBvbiBXaW4zMi4gQXBwZW5kIHRoZQoJZXhlY3V0YWJsZSBmaWxlIG5hbWUgc3VmZml4ZXMgZnJvbSBQQVRIRVhUIGluIHR1cm4gd2hpbGUgbG9va2luZwoJZm9yIHRoZSBwcm9ncmFtLgoJKGdfZmluZF9wcm9ncmFtX2luX3BhdGgpOiBJZiB0aGUgcHJvZ3JhbSB3ZSBhcmUgbG9va2luZyBmb3IgaXMgYQoJcmVsYXRpdmUgcGF0aCBpbiBhIHN1YmRpcmVjdG9yeSwgZG9uJ3QgZG8gYW55IHBhdGggc2VhcmNoLgoJKGdfZ2V0X2FueV9pbml0KTogKFdpbjMyKSBBbHNvIGxvb2sgZm9yIHRoZSBVU0VSUFJPRklMRSBlbnYgdmFyCglpbmRpY2F0aW5nIHRoZSBob21lIGRpcmVjdG9yeSBlcXVpdmFsZW50LgoJKGdfZmluZF9wcm9ncmFtX2luX3BhdGgpOiAoV2luMzIpOiBVc2UgTUFYUEFUSExFTiwgbm90IFBBVEhfTUFYCgl3aGljaCBpc24ndCBkZWZpbmVkIHdpdGggTVNWQy4KCgkqIHRlc3RnbGliLmMgKG1haW4pOiBUZXN0IGdfZmluZF9wcm9ncmFtX2luX3BhdGgoKSBvbiBXaW4zMiBieQoJbG9va2luZyBmb3IgbW9yZS5jb20gYW5kIHJlZ2VkaXQuCgoJKiBnbGliLmRlZjogQWRkIGdfZmluZF9wcm9ncmFtX2luX3BhdGguCgoyMDAxLTAyLTI2ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ3RocmVhZHBvb2wuYyAoZ190aHJlYWRfcG9vbF90aHJlYWRfcHJveHkpOiBNYWtlCgltYXhfdW51c2VkX3RocmVhZHMgd29yayBmb3IgLTEgYXMgd2VsbC4KCjIwMDEtMDItMjMgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBndGhyZWFkLmggKHN0cnVjdCBfR1RocmVhZCk6IENoYW5nZSB0aGUgb3JkZXIgdG8gbWF0Y2ggdGhlIG9yZGVyCglpbiBnX3RocmVhZF9jcmVhdGUoKS4KCgkqIGd0aHJlYWQuYyAoZ19zdGF0aWNfcmVjX211dGV4X2xvY2tfZnVsbCk6IEFsc28gZG8gdGhlIHJpZ2h0Cgl0aGluZyAoYmVoYXZlIGxpa2UgJ2RlcHRoJyBjYWxscyB0byBnX3N0YXRpY19yZWNfbXV0ZXhfbG9jaykgZm9yIGEKCW11dGV4LCB0aGF0IGlzIGFscmVhZHkgbG9ja2VkLgoKVGh1IEZlYiAyMiAxMDozMTozNiAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdtYWluLmMgKGdfc291cmNlX3JlbW92ZV9wb2xsKTogQWRkIG1pc3NpbmcgaW1wbGVtZW50YXRpb24KCW9mIGdfc291cmNlX3JlbW92ZV9wb2xsLiAoUG9pbnRlZCBvdXQgYnkgU3RlZmFuIFdlc3RlcmZlbGQpCgoyMDAxLTAyLTIxICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGd1dGlscy5jIChnX2ZpbmRfcHJvZ3JhbV9pbl9wYXRoKTogSW1wbGVtZW50IG9uIFdpbjMyLgoKCUN5Z3dpbiBzdXBwb3J0IGNvbnRyaWJ1dGVkIGJ5IFN0ZWZhbiBPbmRyZWppY2thCgk8b25kcmVqQGlkYXRhLnNrPi4gSG9wZWZ1bGx5IEkgZ290IGl0IGFsbCBpbiB3aGlsZSBzaW11bHRhbmVvdXNseQoJYWRkaW5nIHN1cHBvcnQgZm9yIGF1dG8qL2xpYnRvb2wgZm9yIG1pbmd3LgoKCSogTWFrZWZpbGUuYW06IENoYW5nZXMgZm9yIGF1dG8qIHN1cHBvcnQgb24gQ3lnd2luIGFuZCBXaW4zMi4gRG8KCXN0aWxsIGRpc3RyaWJ1dGUgdGhlIGhhbmQtd3JpdHRlbiBtYWtlZmlsZXMgYW5kICoud2luMzIuaW4gZmlsZXMsCgl0aG91Z2guIFVzZSBHSU8sIEdTUEFXTiBhbmQgUExBVEZPUk1ERVAgbWFjcm9zIHNldCBieSBjb25maWd1cmUuCglVc2UgLW5vLXVuZGVmaW5lZC4gUGFzcyAtZXhwb3J0LXN5bWJvbHMgZ2xpYi5kZWYgdG8gbGlidG9vbC4KCQoJKiBjb25maWd1cmUuaW46IERlZmluZSBHX1BMQVRGT1JNX1dJTjMyIG9uIGJvdGggcHVyZSBXaW4zMiAobWluZ3cpCglhbmQgQ3lnd2luLiBBZGQgQUNfQ1lHV0lOLCBBQ19FWEVFWFQgYW5kIEFDX0xJQlRPT0xfV0lOMzJfRExMCgljYWxscyBmb3IgQ3lnd2luIGFuZCBtaW5ndyBzdXBwb3J0LiAgQ2hlY2sgZm9yICVJNjR1IGd1aW50NjQKCWZvcm1hdCAoaW4gTVMgQyBsaWJyYXJ5KS4gU2V0IEdfTU9EVUxFX0lNUEwgb24gbWluZ3cgYW5kCglDeWd3aW4uIFVzZSBhY19vYmplY3QgYW5kIGFjX2V4ZWV4dC4gIFNldCBHSU8sIEdTUEFXTiwgUExBVEZPUk1ERVAKCWFuZCBHX0xJQlNfRVhUUkEuIENvbXBpbGUgdGltZWxvb3Agb25seSBvbiBVbml4LiBEZWZpbmUgT1NfV0lOMzIKCWF1dG9tYWtlIGNvbmRpdGlvbmFsIG9uIFdpbjMyLgoJCgkqIGdsaWIuaDogSW5jbHVkZSBnd2luMzIuaCBhbHNvIG9uIEN5Z3dpbi4KCgkqIGdmaWxldXRpbHMuYyAoZ2V0X2NvbnRlbnRzX3Bvc2l4KTogVXNlIE9fQklOQVJZIChkZWZpbmVkIGFzIDAgb24KCVVuaXgpIGZvciBDeWd3aW4ncyBzYWtlLgoKCSogZ3RpbWVyLmMgKEdFVFRJTUUpOiBSZWR1Y2UgI2lmZGVmcywgdXNlIGEgbWFjcm8gR0VUVElNRSgpLgoKCSogZ2NvbnZlcnQuYwoJKiBndGhyZWFkLmMKCSogZ3V0ZjguYwoJKiBndXRpbHMuYzogRm9yIGNvZGUgbmVlZGVkIGJvdGggb24gQ3lnd2luIGFuZCBuYXRpdmUgV2luMzIsCgl0ZXN0IGZvciBHX1BMQVRGT1JNX1dJTjMyLgoKCSogZ21hcmt1cC5oOiBVc2UgR19CRUdJTl9ERUNMUyBhbmQgR19FTkRfREVDTFMuCgkKCSogZ3R5cGVzLmg6IFJlZmluZSBHTElCX1ZBUiBkZWZpbml0aW9uLiBBbHNvIGNoZWNrIGZvciBETExfRVhQT1JUCglpbiBjYXNlIGNvbXBpbGluZyBhIHN0YXRpYyBsaWJyYXJ5IG9uIFdpbjMyIG9yIEN5Z3dpbi4KCgkqIGd3aW4zMi5jOiBObyA8ZGlyZWN0Lmg+IG9uIEN5Z3dpbi4gTm8gbmVlZCBmb3IgZnRydW5jYXRlKCkgb3IKCWRpcmVudCBlbXVsYXRpb24gb24gQ3lnd2luLgoJKGdldF9wYWNrYWdlX2RpcmVjdG9yeV9mcm9tX21vZHVsZSkgQ29udmVydCByZXR1cm4gdmFsdWUgZnJvbQoJR2V0TW9kdWxlRmlsZU5hbWUoKSB0byBQT1NJWCBwYXRoIG9uIEN5Z3dpbi4KCgkqIHRlc3RzL01ha2VmaWxlLmFtIChwcm9nc19MREFERCk6IExpbmsgd2l0aCBsaWJnbGliLCBsaWJndGhyZWFkCglhbmQgbGliZ21vZHVsZSBhcyBhcHByb3ByaWF0ZS4gVXNlIC1uby11bmRlZmluZWQuCgoJKiBnYmFja3RyYWNlLmM6IE1vdmUgI2lmZGVmcyBhcm91bmQgYSBiaXQgb24gV2luMzIuCgoyMDAxLTAyLTIxICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdzaGVsbC5jICh1bnF1b3RlX3N0cmluZ19pbnBsYWNlKTogTWFrZSBzdGF0aWMuCgoJKiBndGhyZWFkLmg6IEluY2x1ZGUgZ3R5cGVzLmggdG8gYmUgc3VyZSB0byBnZXQgR0xJQl9WQVIKCWRlZmluaXRpb24sIHJlbW92ZSBkZWZpbml0aW9uIGZyb20gaGVyZS4KCgkqIGd1bmljb2RlLmg6IFJlbW92ZSBkdXBsaWNhdGUgR0xJQl9WQVIgZGVmaW5pdGlvbiBmcm9tIGhlcmUsIHRvby4KCgkqIGd1dGlscy5jOiAoV2luMzIpIFVzZSBVU0VSUFJPRklMRSBhcyBob21lIGRpciBpZiBwcmVzZW50LiBPbgoJV2luMmssIEhPTUVEUklWRSBhbmQgSE9NRVBBVEggYXJlbid0IHJlbGlhYmxlLgoJCgkqIE1ha2VmaWxlLmFtIChJTkNMVURFUyk6IEFkZCAtREdMSUJfQ09NUElMQVRJT04uCgoJKiBtYWtlZmlsZS5taW5ndy5pbjogUmVtb3ZlIGluc3RhbGwgdGFyZ2V0LCBXaW5kb3dzIGlzbid0IFVuaXguCgkoREVGSU5FUyk6IEFkZCAtRERMTF9FWFBPUlQuCgoJKiB0ZXN0Z2RhdGUuYwoJKiB0ZXN0Z2RhdGVwYXJzZXIuYwoJKiB0ZXN0Z2xpYi5jOiBVbmRlZmluZSBHTElCX0NPTVBJTEFUSU9OLgoKCSogdGVzdGdsaWIuYzogTWFrZSBzb21lIHZhcnMgc3RhdGljLiBBZGQgQ3lnd2luIHBhdGggdGVzdHMuCgoJKiBnbGliLmRlZjogVXBkYXRlcy4KCgkqIC5jdnNpZ25vcmUKCSogKi8uY3ZzaWdub3JlOiBJZ25vcmUgYWxzbyAub2JqLCAuZGxsLCAubGliIGFuZCAuZXhlIGZpbGVzLgoKMjAwMS0wMi0xOSAgSGFucyBCcmV1ZXIgPGhhbnNAYnJldWVyLm9yZz4KCgkqIGdsaWIvZ2xpYi5kZWYsIGdvYmplY3QvZ29iamVjdC5kZWYgOiBhZGRlZCBuaXNzaW5nIHN5bWJvbHMKCgkqIGdvYmplY3QvbWFrZWZpbGUubXNjIDogdXBkYXRlZAoKCSogZ2xpYi9nbWVzc2FnZXMuYyA6IGNhbGwgdGhlICJkZWJ1ZyBpbnRlcnJ1cHQiIGJlZm9yZSBleGl0aW5nIHRoZQoJcHJvZ3JhbSwgaWYgYnVpbGQgd2l0aCBtc3ZjIGFzIGRlYnVnIHZlcnNpb24uIFdoaWNoIGdpdmVzIHRoZSBvcHBvcnR1bml0eQoJdG8gc2VlIHRoZSBjYWxsc3RhY2ssIGV0Yy4KCgkqIGdsaWIvZ3RocmVhZC5jIDogdGhyZWFkLT5waWQgaXMgb25seSBkZWZpbmVkICNpZmRlZgoJR19USFJFQURfVVNFX1BJRF9TVVJST0dBVEUKCk1vbiBGZWIgMTkgMDc6MzI6MzggMjAwMSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ2xpYi1jb25maWctMi4wLmluIChsaWJfZ2xpYik6IG15IG5hbWUgaXMgZ2xpYi1jb25maWctMi4wIQoJZG9uJ3QgZXhpdCB3aXRoIGVycm9yY29kZSE9MCBmb3IgLS1oZWxwIG9yIC1oLgoJCgkqIE1ha2VmaWxlLmFtOgoJKiBjb25maWd1cmUuaW46IGJ1aWxkIGdsaWItY29uZmlnLTIuMC4KCjIwMDEtMDItMTcgIEhhdm9jIFBlbm5pbmd0b24gIDxocEBwb2JveC5jb20+CgoJKiBndGhyZWFkLmM6IGluY2x1ZGUgc3RyaW5nLmgKCiAgICAgICAgQXBwbGllZCBwYXRjaCBmcm9tIFNvZXJlbiBTYW5kbWFubjoKCQoJKiB0ZXN0Z2xpYi5jOiBjb25zdCBmaXhlcwoKCSogZ3dpbjMyLmg6IGZvcm1hdCBjbGVhbnVwcwoKCSogZ3V0aWxzLmMgKGdfYXRleGl0KTogY29uc3RpZnkgYSB2YXJpYWJsZQoJKGdfZmluZF9wcm9ncmFtX2luX3BhdGgpOiBjb25zdGlmaWNhdGlvbgoJKGdfYmFzZW5hbWUpOiBHX0NPTlNUX1JFVFVSTgoJKGdfcGF0aF9za2lwX3Jvb3QpOiBHX0NPTlNUX1JFVFVSTgoJKGdfZ2V0ZW52KTogR19DT05TVF9SRVRVUk4KCShnX2dldF91c2VyX25hbWUpOiBHX0NPTlNUX1JFVFVSTgoJKGdfZ2V0X3JlYWxfbmFtZSk6IEdfQ09OU1RfUkVUVVJOCgkoZ19nZXRfaG9tZV9kaXIpOiBHX0NPTlNUX1JFVFVSTgoJKGdfZ2V0X3RtcF9kaXIpOiBHX0NPTlNUX1JFVFVSTgoJKGdfZ2V0X3ByZ25hbWUpOiBHX0NPTlNUX1JFVFVSTgoJKF9nbGliX2dldHRleHQpOiBHX0NPTlNUX1JFVFVSTgoKCSogZ3VuaWNvZGUuaDogZm9ybWF0dGluZyBjbGVhbnVwcwoKCSogZ3N0cmZ1bmNzLmMgKGdfc3RyZXJyb3IpOiBHX0NPTlNUX1JFVFVSTgoJKGdfc3Ryc2lnbmFsKTogR19DT05TVF9SRVRVUk4KCgkqIGdzcGF3bi5jIChnX2V4ZWN1dGUpOiBjb25zdCBvbiB2YXJpYWJsZXMKCgkqIGdtZXNzYWdlcy5jIChwcmludGZfc3RyaW5nX3VwcGVyX2JvdW5kKTogZml4IGNvbnN0IG9uIGEgdmFyaWFibGUKCgkqIGdtZW0uYyAoZ19tZW1fY2h1bmtfbmV3KTogbWFrZSB0aGUgIm5hbWUiIGFyZyBjb25zdAoJKHN0cnVjdCBfR1JlYWxNZW1DaHVuayk6IG1ha2UgdGhlICJuYW1lIiBmaWVsZCBjb25zdAoKCSogZ2ZpbGV1dGlscy5jIChnX2ZpbGVfb3Blbl90bXApOiBzdG9yZSBjb25zdCByZXR1cm4gaW4gYSBjb25zdAoJZ2NoYXIqIHZhcmlhYmxlCgoJKiBnZGF0YXNldC5jIChnX3F1YXJrX3RvX3N0cmluZyk6IEdfQ09OU1RfUkVUVVJOCgpTYXQgRmViIDE3IDA3OjI2OjMzIDIwMDEgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiAoR19NT0RVTEVfSEFWRV9ETEVSUk9SKTogYWRkIGNoZWNrIGZvciBicm9rZW4gUlRMRF9HTE9CQUwKCShvbiBPU0YxIFY1LjApLgoKMjAwMS0wMi0xNSAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGFjY29uZmlnLmgsIGNvbmZpZ3VyZS5pbjogUmV2ZXJ0ZWQgdGhlIGNoYW5nZXMgbmVjZXNzYXJ5IHRvCgllbmxhcmdlIHRoZSBzeXN0ZW0gdGhyZWFkIGZvciBHX1RIUkVBRF9VU0VfUElEX1NVUlJPR0FURS4KCgkqIGd0aHJlYWQuYzogTm93IGltcGxlbWVudCBHX1RIUkVBRF9VU0VfUElEX1NVUlJPR0FURSBpbiBndGhyZWFkLmMKCWluc3RlYWQgb2YgZ3RocmVhZC9ndGhyZWFkLXBvc2l4LmMuIFdoaWxlIHRoZSBsYXR0ZXIgaGFzIHRoZQoJYWR2YW50YWdlLCB0aGF0IGl0IGlzIGNvbmNlcHR1YWxseSBjbGVhbmVyLCBpdCBtYWtlcwoJZ190aHJlYWRfc2VsZl9wb3NpeF9pbXBsIF92ZXJ5XyBzbG93IGFuZCB0aGF0IGh1cnRzCglHU3RhdGljUmVjTXV0ZXggYW5kIG90aGVyIHRoaW5ncy4gU28gdGhlIG5ldyB2ZXJzaW9uIGlzIGxlc3MKCWNsZWFuLCBidXQgZmFzdGVyLgoKMjAwMS0wMi0wOSAgSGF2b2MgUGVubmluZ3RvbiAgPGhwQHJlZGhhdC5jb20+CgoJKiBnY29udmVydC5jIChnX2NvbnZlcnQpOiBkb24ndCBvdmVyd3JpdGUgZXJyb3JzCgoJKiBnZXJyb3IuYyAoZ19zZXRfZXJyb3IpOiBpbXByb3ZlIHdhcm5pbmcgbWVzc2FnZSBpZiBhbiBlcnJvciBpcwoJb3ZlcndyaXR0ZW4JCgkoZ19wcm9wYWdhdGVfZXJyb3IpOiBkaXR0bwoKMjAwMS0wMi0xMyAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGd0aHJlYWQuYywgZ3RocmVhZC5oOiBBZGRlZCBmdW5jdGlvbnMgZ19zdGF0aWNfcmVjX211dGV4X2luaXQsCglnX3N0YXRpY19yZWNfbXV0ZXhfZnJlZSwgZ19zdGF0aWNfcHJpdmF0ZV9pbml0LAoJZ19zdGF0aWNfcHJpdmF0ZV9mcmVlLCBnX3N0YXRpY19yd19sb2NrX2luaXQgdG8gYWxsb3cgdGhlIHVzYWdlIG9mCglhbGwgdGhvc2UgdHlwZXMgZHluYW1pY2FsbHkuIChnX3N0YXRpY19yd19sb2NrX2ZyZWUgYWxyZWFkeQoJZXhpc3RlZCkuIEFkaXRpb25hbGx5IGZyZWVkIHN0YXRpY19wcml2YXRlIGluZGVjZXMgYXJlIHJldXNlZAoJbm93LiBVbnRpbGwgbm93IHRoZSBhcnJheSB3b3VsZCBqdXN0IGdyb3cgaWYgeW91IHdvdWxkIHVzZSBtb3JlCglhbmQgbW9yZSBzdGF0aWNfcHJpdmF0ZS4gVGhhdCByZXF1aXJlZCBhZGRpbmcgYSBzbGlzdCBvZiBhbGwKCXJ1bm5pbmcgdGhyZWFkcywgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgYmUgb2YgZ29vZCB1c2UgbGF0ZXIuIEl0CglpcyBub3QgZXhwb3J0ZWQgaG93ZXZlci4gUmVuYW1lZCBhIExPQ0sgYW5kIHNtYWxsIGluZGVudGF0aW9uCglmaXhlcy4KCgkqIHRlc3RzL3RocmVhZC10ZXN0LmM6IFRlc3QgdGhlIG5ldyBzdGF0aWNfcHJpdmF0ZSBpbmRleCBmcmVpbmcKCWFuZCByZXVzaW5nIGZlYXR1cmUuCgkKTW9uIEZlYiAxMiAxNTowMTowOSAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoZ3RrX2RvY19taW5fdmVyc2lvbik6IEFkZCBjaGVjayBmb3IgZ3RrLWRvYyB2ZXJzaW9uLgoKMjAwMS0wMi0xMCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBndHlwZXMuaAoJKiBndXRpbHMuaDogTW92ZSBHTElCX1ZBUiBkZWZpbml0aW9uIGZyb20gZ3V0aWxzLmggdG8gZ3R5cGVzLmgKCgkqIGdsaWIuZGVmCgkqIGdtZW0uaDogTWFyayBnbGliX21lbV9wcm9maWxlcl90YWJsZSBmb3IgZXhwb3J0LgoKCSogZ3dpbjMyLmMgKGdldF9wYWNrYWdlX2RpcmVjdG9yeV9mcm9tX21vZHVsZSk6IERvbid0IHN0b3JlCglhZGRyZXNzIG9mIGxvY2FsIHZhcmlhYmxlIGluIGhhc2h0YWJsZS4KCjIwMDEtMDItMDggIEZhdGloIERlbWlyCTxrYWJhbGFrQGthYmFsYWsubmV0PgoKCSogY29uZmlndXJlLmluOiBBZGRlZCAidHIiIHRvIEFMTF9MSU5HVUFTLgoKMjAwMS0wMi0wNCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnd2luMzIuYyAoZ193aW4zMl9nZXRsb2NhbGUpOiBVc2UgIm5uIiBmb3IgTnlub3JzaywgYXMgbm4ucG8KCWZpbGVzIGFyZSBhcHBlYXJpbmcgbm93LiBJZiB0aGUgc3VibGFuZ3VhZ2Ugc3RhcnRzIHdpdGggJ0AnLCBkb24ndAoJdXNlIGEgJ18nIHNlcGFyYXRvci4gU291dGggQWZyaWNhIGlzICdaQScsIG5vdCAnU0EnLgoKU3VuIEZlYiAgNCAwNzozODozMiAyMDAxICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBkb2NzL2RlYnVnZ2luZy50eHQ6IHMvZ2xpYl90cmFwXy9nX3RyYXBfLy4gYWRkIGNvbW1lbnRzIG9uCglnX3RyYXBfaW5zdGFuY2Vfc2lnbmFscywgZ190cmFjZV9pbnN0YW5jZV9zaWduYWxzIGFuZAoJR1JVTlRJTUVfREVCVUcuCgoJKiBnbWVtLmM6IHMvZ2xpYl90cmFwXy9nX3RyYXBfLy4KCQoyMDAxLTAyLTA0ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIHRlc3RzL01ha2VmaWxlLmFtICh0aHJlYWRfTERBREQpOiBDaGFuZ2Ugb3JkZXIgb2YgbGlicywKCXB1dCBwcm9nc19MREFERCBsYXN0LiBOZWVkZWQgZm9yIGN5Z3dpbiwgc2F5cyBqYmRvbGxAa2VwcmkucmUua3IuCgoyMDAxLTAyLTAyICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdpb2NoYW5uZWwuaAoJKiBnaW93aW4zMi5jCgkqIGdtYWluLmM6IFN0eWxpc3RpYyBjbGVhbnVwcy4gVXNlIEdfU1RSTE9DIGluIGdfd2FybmluZygpIGNhbGxzLgoKCSogZ2xpYi5kZWY6IEFkZCBtaXNzaW5nIGZ1bmN0aW9ucy4KCjIwMDEtMDItMDEgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBndGhyZWFkLmMsIGd0aHJlYWQuaDogQWRkZWQgZ19zdGF0aWNfbXV0ZXhfaW5pdCB0byBhbGxvdwoJaW5pdGlhbGl6YXRpb24gb2YgYSBHU3RhdGljTXV0ZXgsIHRoYXQgY2FuIG5vdCBiZSBpbml0aWFsaXplZCB3aXRoCglHX1NUQVRJQ19NVVRFWF9JTklULCBmb3IgZXhhbXBsZSBpbiBhbGxvY2F0ZWQgc3RydWN0dXJlcy4KCldlZCBKYW4gMzEgMTM6NDY6NTggMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBhY2luY2x1ZGUubTQgZ2xpYi1nZXR0ZXh0Lm00OiBGaXggcHJvYmxlbSB3aXRoIC0tZGlzYWJsZS1ubHMuCgoyMDAxLTAxLTMxICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdsaWJjb25maWcuaC53aW4zMi5pbjogQ29ycmVzcG9uZGluZyBjaGFuZ2UgYXMgYmVsb3cgdG8KCUdTdGF0aWNNdXRleC4KCjIwMDEtMDEtMzAgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBndGhyZWFkLmMsIGd0aHJlYWQuaDogQWRkZWQgZ19zdGF0aWNfbXV0ZXhfZnJlZSB0byBhbGxvdyB1c2luZwoJR1N0YXRpY011dGV4ZXMgd2l0aCBsaW1pdGVkIGxpZmV0aW1lIHdpdGhvdXQgbGVha2luZy4KCQoJKiBjb25maWd1cmUuaW46IEdTdGF0aWNNdXRleCBkb2Vzbid0IGhhdmUgdG8gcHJvdmlkZSBleHRyYSBzcGFjZQoJZm9yIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgR19FUlJPUkNIRUNLX01VVEVYRVMsIGFzIHRoZW4gdGhlCglub24tZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiAocnVudGltZV9tdXRleCkgaXMgdXNlZCBhbnl3YXkuCgoJKiBndGhyZWFkLmggKGdfY29uZF93YWl0KTogQWRkZWQgZGVidWcgaW5mb3JtYXRpb24gZm9yCglnX211dGV4X2ZyZWUgY2FsbHMsIGlmIEdfRVJST1JDSEVDS19NVVRFWEVTIGlzIGRlZmluZWQuCgoyMDAxLTAxLTI5ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdsaWJjb25maWcuaC53aW4zMi5pbjogVXNlIHRoZSBzYW1lIEdNdXRleCBzdHJ1Y3R1cmUgYXMgdGhlCgljb25maWd1cmUtZ2VuZXJhdGVkIGdsaWJjb25maWcuaCBkb2VzLgoKCSogZ3N0cmZ1bmNzLmMgKGdfc3Ryc2lnbmFsKTogRGVjbGFyZSBzdHJzaWduYWwoKSBvbiBDeWd3aW4sIHRvbywKCXNheXMgamJkb2xsQGtlcHJpLnJlLmtyLgoKMjAwMS0wMS0yOSAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGd0aHJlYWQuYzogQnJvYWRjYXN0IHRoZSBjb25kaXRpb24sIGlmIHRoZXJlIGFyZSB3YWl0aW5nCglyZWFkZXJzLCBhcyBhbGwgbWlnaHQgcmVhZCBhdCB0aGUgc2FtZSB0aW1lLiBPbmx5IHNpZ25hbCB0aGUKCXdyaXRlciB0aHJlYWQsIGlmIHRoZXJlIGFyZSBubyBtb3JlIHJlYWRlcnMuCgoyMDAxLTAxLTI1ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIG1ha2VmaWxlLm1pbmd3LmluCgkqICovbWFrZWZpbGUubWluZ3cuaW46IFByb3RlY3QgdGhlIHJ1bGUgdG8gcmVidWlsZCBtYWtlZmlsZS5taW5ndwoJaWYgbWFrZWZpbGUubWluZ3cuaW4gaGFzIGNoYW5nZWQgd2l0aCBhIGNoZWNrIGlmIHNhaWQgLmluIGZpbGUKCWV4aXN0cy4gKFRoaXMgcnVsZSBpcyBtYWlubHkgYSBjb252ZW5pZW5jZSBmb3IgeW91cnMgdHJ1bHkuKQoKCSogZ2lvd2luMzIuYzogU29ja2V0IHN1cHBvcnQgcmV3cml0dGVuLiBJdCB3YXMgdXR0ZXJseSBicm9rZW4sIGFuZAoJdW50ZXN0ZWQgaW4gZmFjdC4gV2Ugc3RpbGwgZG8gdXNlIGEgdGhyZWFkIGZvciBlYWNoIHNvY2tldCBiZWluZwoJd2F0Y2hlZCwgYnV0IGluc3RlYWQgb2YgYmxvY2tpbmcgaW4gcmVjdigpICh3aGljaCBvZiBjb3Vyc2Ugd2FzCglwbGFpbiBzdHVwaWQgZm9yIHNvY2tldHMgYmVpbmcgbGlzdGVuKCllZCBvbiBpbiBhIHNlcnZlci10eXBlCglhcHBsaWNhdGlvbiksIHdlIGJsb2NrIGluIHNlbGVjdCgpLiBUaGUgcmVhZCBtZXRob2QgZm9yIHNvY2tldHMKCWNhbGxzIHJlY3YoKS4gSXQgaXMgbm93IHBvc3NpYmxlIGZvciB0aGUgYXBwbGljYXRpb24gdG8gY2FsbAoJYWNjZXB0KCksIHJlY3YoKSBvciBzZW5kKCkgaW4gdGhlIGNhbGxiYWNrLCBqdXN0IGxpa2Ugb24KCVVuaXguIFRlc3RlZCB3aXRoIGNvZGUga2luZGx5IHByb3ZpZGVkIGJ5IEFuZHJldyBMYW5vaXguCgoJUmVuYW1lIGdfaW9fY2hhbm5lbF93aW4zMl9uZXdfc3RyZWFtX3NvY2tldCgpIHRvCglnX2lvX2NoYW5uZWxfd2luMzJfbmV3X3NvY2tldCgpIGFzIGl0IGlzbid0IHJlc3RyaWN0ZWQgdG8gc3RyZWFtCglzb2NrZXRzLgoJCgkqIGdtYWluLmMgKGdfcG9sbCk6IFJlbGF0ZWQgY2hhbmdlcyBpbiB0aGUgV2luMzIgdmVyc2lvbiBvZgoJZ19wb2xsKCkuIFdoZW4gcG9sbGluZyBmb3IgbWVzc2FnZXMsIGFsd2F5cyBkbyBhIFBlZWtNZXNzYWdlKCkKCWZpcnN0LiBXZSB1c2VkIHRvIG1pc3MgbWVzc2FnZXMgaWYgc2V2ZXJhbCB3ZXJlIHBvc3RlZCBiZXR3ZWVuCgljYWxscyB0byBnX3BvbGwoKS4KCgkqIGdpb2NoYW5uZWwuaDogSW1wcm92ZSBXaW4zMi1yZWxhdGVkIGNvbW1lbnRzLgoKCSogZ3V0ZjguYzogKFdpbjMyKSBJbmNsdWRlIDxzdGRpby5oPiBmb3Igc3ByaW50Zi4KCgkqIHRlc3RzL2dpby10ZXN0LmM6IChXaW4zMikgQWRkIHRlc3RzIGZvciBwb2xsaW5nIGZvciBXaW5kb3dzCgltZXNzYWdlcy4KCgkqIHRlc3RzL21ha2VmaWxlLm1pbmd3LmluOiBSZW1vdmUgc3VwZXJmbHVvdXMgY29tcGlsYXRpb24gY29tbWFuZAoJbGluZS4KCjIwMDEtMDEtMjMgIEFsZXggTGFyc3NvbiAgPGFsZXhsQHJlZGhhdC5jb20+CgoJKiBnbWFpbi5jIChnX3NvdXJjZV9jYWxsYmFja191bnJlZik6IEZyZWUgdGhlIGNhbGxiYWNrCgkoZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKTogSW5pdGlhbGl6ZSB0aGUgY2FsbGJhY2sgcmVmY291bnQKCjIwMDEtMDEtMjAgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ3V0aWxzLmMgKGdfZ2V0X2NvZGVzZXQpOiAoV2luMzIpIEV2ZW4gaWYgZ19nZXRfY29kZXNldCgpIGlzCgljdXJyZW50bHkgY29tbWVudGVkIG91dCBmcm9tIGd1dGlscy5oLCBmaXggaXQgdG8gcmV0dXJuIHRoZSBzYW1lCglDUCVkIHZhbHVlIGFzIGdfZ2V0X2NoYXJzZXQoKS4KCjIwMDEtMDEtMTkgIEtqYXJ0YW4gTWFyYWFzICA8a21hcmFhc0Bnbm9tZS5vcmc+CgoJKiBnY29udmVydC5jOiBGaXggdHlwby4KCSogZ2ZpbGV1dGlscy5jOiBTYW1lIGhlcmUuCgkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgbm8gdG8gQUxMX0xJTkdVQVMKCQoyMDAxLTAxLTE3ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGd3aW4zMi5jIChnX3dpbjMyX2dldGxvY2FsZSwgZ193aW4zMl9lcnJvcl9tZXNzYWdlKTogQWRkIGRvYwoJY29tbWVudHMuCgkoZ193aW4zMl9nZXRfcGFja2FnZV9pbnN0YWxsYXRpb25fZGlyZWN0b3J5KTogQWRkIG9uZSBwYXJhbWV0ZXIsCgl0aGUgbmFtZSBvZiBhIERMTCBpbiB0aGUgcGFja2FnZS4gQWRkIHBvc3NpYmlsaXR5IHRvIHVzZSB0aGF0IHRvCglkZWR1Y2UgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgaWYgbm90IGVudGVyZWQgaW50byB0aGUKCVJlZ2lzdHJ5LiBNYWtlIHRoZSByZXR1cm4gdmFsdWUgZHluYW1pY2FsbHkgYWxsb2NhdGVkLgoJKGdfd2luMzJfZ2V0X3BhY2thZ2VfaW5zdGFsbGF0aW9uX3N1YmRpcmVjdG9yeSk6IE5ldyBjb252ZW5pZW5jZQoJZnVuY3Rpb24uCgoJKiBndXRpbHMuYyAoR0xJQl9MT0NBTEVfRElSKQoJKiBnd2luMzIuaDogQWRhcHQgYWNjb3JkaW5nbHkuCgoJKiB0ZXN0Z2xpYi5jIChtYWluKTogQWRhcHQgdGVzdHMgYWNjb3JkaW5nbHkuCgpUdWUgSmFuIDE2IDIzOjIwOjM4IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ3V0aWxzLmMgZ2xpYmludGwuaDogT3B0aW1pemUgZm9yIHNpemUgcmF0aGVyIHRoYW4gc3BlZWQgYnkKCW1ha2luZyBfKCkgYWx3YXlzIGNhbGwgX2dsaWJfZ2V0dGV4dCgpIGluc3RlYWQgb2YgY29uZGl0aW9uYWxseQoJY2FsbGluZyBnZXR0ZXh0KCkgb3IgX2dsaWJfZ2V0dGV4dF9pbml0LiBnbGliIG9ubHkgdXNlcyB0cmFuc2xhdGVkCglzdHJpbmdzIGluIHNsb3cgZXJyb3IgaGFuZGxpbmcgY29kZSBhbnl3YXlzLgoKCSogZ2xpYmludGwuaDogZydpZnkgdHlwZXMuCgoJKiBNYWtlZmlsZS5hbTogaW5jbHVkZSBnbGliaW50bC5oIGluIF9TT1VSQ0VTCgoyMDAxLTAxLTE3ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGNvbmZpZy5oLndpbjMyLmluOiBEZWZpbmUgRU5BQkxFX05MUyBhbmQgR0VUVEVYVF9QQUNLQUdFLgoKCSogbWFrZWZpbGUubWluZ3cuaW4KCSogbWFrZWZpbGUubXNjLmluOiBVc2UgdGhlIEdOVSBpbnRsIGxpYnJhcnkuCgoJKiBnd2luMzIuYyAoZ193aW4zMl9nZXRfcGFja2FnZV9pbnN0YWxsYXRpb25fZGlyZWN0b3J5KTogTmV3CglmdW5jdGlvbi4gVG8gYmUgdXNlZCBieSB2YXJpb3VzIEdMaWItdXNpbmcgcGFja2FnZXMgdG8gZ2V0IHRoZWlyCglpbnN0YWxsYXRpb24gZGlyZWN0b3J5LCB3aGljaCBzaG91bGQgYmUgc3RvcmVkIGluIHRoZSBSZWdpc3RyeSBieQoJc29tZSBpbnN0YWxsZXIuCgoJKiBnd2luMzIuaDogRGVjbGFyZSBpdC4KCgkqIHRlc3RnbGliLmMgKG1haW4pOiBUZXN0IGl0LgoKCSogZ3V0aWxzLmM6IE9uIFdpbjMyLCBkZWZpbmUgR0xJQl9MT0NBTEVfRElSIHVzaW5nCglnX3dpbjMyX2dldF9wYWNrYWdlX2luc3RhbGxhdGlvbl9kaXJlY3RvcnkoKS4KCgkqIGdsaWIuZGVmOiBVcGRhdGUuCgpNb24gSmFuIDE1IDIxOjM5OjA2IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi0yLjAucGMuaW4gKExpYnMpIGdsaWItY29uZmlnLTIuMC5pbjogQWRkIEBJTlRMTElCU0AuCgpNb24gSmFuIDE1IDIxOjEyOjQ5IDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKICAgICAgICAqIGNvbmZpZ3VyZS5pbiBhY2NvbmZpZy5oIGdsaWJpbnRsLmggZ3V0aWxzLmMKCXBvL3tNYWtlZmlsZS5pbi5pbixQT1RGSUxFUy5pbixwbzJ0YmwuaW59OiBBZGQgZ2V0dGV4dAoJc3VwcG9ydC4KCgkqIGdsaWItZ2V0dGV4dC5tNCBhY2luY2x1ZGUubTQ6IENsZWFuIHVwIHRoZSBHVEsrIGdldHRleHQgbWFjcm9zCglzb21lIG1vcmUgYW5kIHB1dCB0aGVtIGluIHRoaXMgZmlsZSwgdGhvdWdoIHRoZXkgYWxzbyBuZWVkCgl0byBiZSBpbmNsdWRlZCBpbiBhY2luY2x1ZGUubTQgZHVlIHRvIHRoZSBicm9rZW5lc3Mgb2YKCWFjbG9jYWwuCgoJKiBnc3Bhd24uYyBnc3Bhd24td2luMzIuYyBndXRmOC5jIGdjb252ZXJ0LmMgZ2ZpbGV1dGlscy5jCglnc2hlbGwuYzogUmVtb3ZlIGR1bW15IF8oKSAjZGVmaW5lcywgaW5jbHVkZSBnbGliaW50bC5tNC4KCjIwMDEtMDEtMDkgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ2lvd2luMzIuYzogUmV3b3JrIHRoZSBjaGFuZ2VzIG5lZWRlZCB0byBwYXNzIG1haW5sb29wLXRlc3QuIE5vdwoJd2UgZG9uJ3QgbmVlZCB0byBjYWxsIFRlcm1pbmF0ZVRocmVhZCgpIGFmdGVyIGFsbCwgd2hpY2ggaXMgYQoJcmVsaWVmLCBhcyB0aGUgZG9jcyBoYXZlIGEgQklHIFJFRCBXQVJOSU5HIFNJR04gYWJvdXQgdXNpbmcgdGhhdAoJQVBJLiBJbnN0ZWFkLCB3aGVuIGNsb3NpbmcgYSBmZCBjaGFubmVsIHRoYXQgaGFzIGEgcmVhZGVyIHRocmVhZAoJcnVubmluZywganVzdCBtYXJrIGl0IGFzIG5vbi1ydW5uaW5nIGFuZCBhZGRpdGlvbmFsbHkgbWFyayB0aGUgZmQKCWFzIHJpcGUgZm9yIGNsb3NpbmcuIFdoZW4gdGhlIHJlYWRlciB0aHJlYWQgaG9wZWZ1bGx5IGV2ZW50dWFsbHkKCWdldHMgc29tZXRoaW5nIChhbmQgRU9GIG9yIHNvbWUgYWN0dWFsIGRhdGEpLCBpdCB3aWxsIG5vdGUgdGhhdCBpdAoJc2hvdWxkbid0IGJlIHJ1bm5pbmcsIGJyZWFrIG91dCBvZiB0aGUgbG9vcCwgYW5kIGNsb3NlIHRoZSBmZC4KCglUaGUgc29ja2V0IGNoYW5uZWwgY2xvc2luZyBjb2RlIHNob3VsZCBwcm9iYWJseSBiZSBjaGFuZ2VkCglzaW1pbGFyaWx5LCBidXQgdGhhdCB3aWxsIGhhdmUgdG8gd2FpdCB1bnRpbCBJIGhhdmUgYSB0ZXN0IGNhc2UuCgkKCShnX3BpcGVfcmVhZGFibGVfbXNnLCBnX2lvX2NoYW5uZWxfd2luMzJfbmV3X3BpcGUsCglnX2lvX2NoYW5uZWxfd2luMzJfbmV3X3BpcGVfd2l0aF93YWtldXBzLAoJZ19pb19jaGFubmVsX3dpbjMyX3BpcGVfcmVxdWVzdF93YWtldXBzLAoJZ19pb19jaGFubmVsX3dpbjMyX3BpcGVfcmVhZGFibGUpOiBSZW1vdmUgdGhlc2UsIGhhdmUgYmVlbgoJb2Jzb2xldGUgZm9yIHNvbWUgdGltZS4KCQoJKiBndXRpbHMuYyAoZ19iYXNlbmFtZSwgZ19kaXJuYW1lKTogRG9uJ3Qgd2FybiBhYm91dCBkZXByZWNhdGlvbgoJb24gV2luMzIuIENvZGUgd3JpdHRlbiBmb3IgR0xpYiAxLjIgZG9lc24ndCBoYXZlIG11Y2ggY2hvaWNlIGJ1dAoJdG8gdXNlIEdMaWIgPj0gMS4zIG9uIFdpbjMyLgoKCSogZ2xpYi5kZWY6IFVwZGF0ZS4KCjIwMDEtMDEtMDkgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnbWVtLmM6IE1hZGUgZ19wcm9maWxlX211dGV4IGEgR011dGV4KiBpbnN0ZWFkIG9mCglHX0xPQ0tfREVGSU5FX1NUQVRJQyB0byBhdm9pZCBkZWFkbG9jayBmb3IgdGhyZWFkIGltcGxlbWVudGF0aW9ucwoJd2l0aG91dCBuYXRpdmUgc3RhdGljIG11dGV4ZXMuIENvbnRydWN0IGdfcHJvZmlsZV9tdXRleCBpbgoJZ19tZW1faW5pdCgpLgoKMjAwMS0wMS0wNiAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnY29udmVydC5jIChnX2xvY2FsZV90b191dGY4LCBnX2xvY2FsZV9mcm9tX3V0ZjgpOiBHZXQgbGVuIHVzaW5nCglzdHJsZW4oKSBpZiBhcmcgaXMgbmVnYXRpdmUgaW4gdGhlIFdpbjMyIGNvZGUsIHRvby4KCgkqIGdpb3dpbjMyLmM6IENoYW5nZXMgbmVjZXNzYXJ5IHRvIGJlIGFibGUgdG8gcnVuCgltYWlubG9vcC10ZXN0LiBXZSBjYW4ndCBjbG9zZSB0aGUgZmQgdGhhdCBvdXIgKGludGVybmFsKSByZWFkZXIKCXRocmVhZCBpcyBzaXR0aW5nIGRvaW5nIGEgYmxvY2tpbmcgcmVhZCgpIGZyb20uIFdlIG11c3QgdGVybWluYXRlCgl0aGUgdGhyZWFkIGZpcnN0LiBLZWVwIHRyYWNrIG9mIHRocmVhZCBoYW5kbGUsIGFuZCBjbG9zZSBpdCB3aGVuCgl0aHJlYWQgaXMgZHlpbmcuIFN0YXJ0IHJlYWRlciB0aHJlYWQgd2l0aCB0aGUgbG93ZXItbGV2ZWwKCUNyZWF0ZVRocmVhZCgpIGluc3RlYWQgb2YgX2JlZ2ludGhyZWFkZXgoKSBmcm9tIHRoZSBDIHJ1bnRpbWUsIGluCglvcmRlciB0byBiZSBhYmxlIHRvIHVzZSBUZXJtaW5hdGVUaHJlYWQoKS4gSG9wZWZ1bHkgdGhpcyBpc24ndAoJaGFybWZ1bC4KCgkqIGdsaWIuZGVmOiBVcGRhdGUuCgoJKiB0ZXN0cy9tYWtlZmlsZS57bWluZ3csbXNjfS5pbiAoVEVTVFMpOiBBZGQgbWFpbmxvb3AtdGVzdCBhbmQKCXVuaWNvZGUtZW5jb2RpbmcuCgoJKiB0ZXN0cy9tYWlubG9vcC10ZXN0LmM6IFBvcnRhYmlsaXR5OiA8dW5pc3RkLmg+LCBuZWVkIDxmY250bC5oPgoJb24gV2luMzIuCgoJKiB0ZXN0cy91bmljb2RlLWVuY29kaW5nLmMgKHByb2Nlc3MpOiBBZGQgbWlzc2luZyAibGluZSIgYXJndW1lbnQKCXRvIGZhaWwoKS4gT24gV2luMzIsIGNvbnZlcnQgVVRGLTE2TEUsIGFzIGxpYmljb252J2MgaXZvbmYgYWx3YXlzCgljb252ZXJ0cyB0byBVVEYtMTZCRSBpZiB3ZSBhc2sgZm9yIHVuc3BlY2lmaWMgVVRGLTE2LgoJKG1haW4pIEhhbmRsZSBhbHNvICdccicuCgpGcmkgSmFuICA1IDExOjI1OjQyIDIwMDEgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmluIChQQUNLQUdFKTogbW92ZSAkZW5hYmxlX2RlYnVnIGRvd24gYmVsb3cKCWNoZWNrcyBmb3IgR0NDIHRvIGF2b2lkIHNldHRpbmcgQ0ZMQUdTIHByZW1hdHVyZWx5LAoJY2hhbmdlIGNoZWNrcyB0byBhdm9pZCBhZGRpbmcgLWcgdHdpY2UuCgoJKiBndXRmOC5jIChnX3VjczRfdG9fdXRmOCk6IFN1cHBvcnQgbGVuIDwgMCB0byBtZWFuCgkwIHRlcm1pbmF0aW9uLgoKCSogZ3V0ZjguYyAoZ191dGY4X3RvX3VjczQpOiBUZXJtaW5hdGUgcmVzdWx0IHdpdGggMC4KCgkqIHRlc3RzL21haW5sb29wLXRlc3QuYyAobWFpbik6IEZpeCB1c2VzIG9mIAoJZ19tYWluX2xvb3BfZGVzdHJveSgpLgoKCSogdGVzdHMvdW5pY29kZS1lbmNvZGluZy5jIHRlc3RzL01ha2VmaWxlLmFtIHRlc3RzL3V0ZjgudHh0OgoJVGVzdHMgZm9yIHVuaWNvZGUtY29udmVyc2lvbiBjb2RlLgoKCSogZ2NvbnZlcnQuYyAoZ19jb252ZXJ0LCBnX2NvbnZlcnRfd2l0aF9mYWxsYmFjayk6IHdvcmsgYXJvdW5kCglhIGNvdXBsZSBvZiBHTlUgbGliYyBidWdzLgoKCSogZ2NvbnZlcnQuW2NoXSAoZ197bG9jYWxlLGZpbGVuYW1lfV97dG8sZnJvbX1fdXRmOCk6IFN0YW5kYXJkaXplCglhcmd1bWVudHMgdG8gbWF0Y2ggZ19jb252ZXJ0KCkuIERvY3VtZW50LgoKCSogZ3VuaWNvZGUuW2NoXTogCgkgIC0gSW1wbGVtZW50IGNvbnZlcnNpb24gZnVuY3Rpb25zIHRvIGFuZCBmcm9tIFVURi0xNgoJICAtIFN0YW5kYXJkaXplIHVuaWNvZGUgY29udmVyc2lvbiBmdW5jdGlvbnMgb24gcHJvdG90eXBlIGxpa2UKCSAgICBnX2NvbnZlcnQuCgkgIC0gQWRkIGEgbG90IG9mIGVycm9yIGNoZWNraW5nIHRvIHVuaWNvZGUgY29udmVyc2lvbiBmdW5jdGlvbnMuCgoJKiBndW5pY29kZS5bY2hdIChnX3V0ZjhfdG9fdWNzNF9mYXN0KTogQWRkIGZhc3QsIG5vbi1jaGVja2luZwoJdmFyaWFudCBvZiBnX3V0ZjhfdG9fdWNzNC4KCgkqIGd1dGY4LmMgKGdfdXRmOF92YWxpZGF0ZSk6IAoJIC0gYWRkIGdfcmV0dXJuX2lmX2ZhaWwgKHN0ciAhPSBOVUxMKS4KCSAtIGFkZCBjaGVja3MgZm9yIG92ZXJsb25nIHN0cmluZ3MsIG5vbi12YWxpZCBVbmljb2RlIGNoYXJhY3RlcnMgKD49IDExMDAwMCkKCSAgIGFuZCBzaW5nbGUgc3Vycm9nYXRlcy4KCjIwMDEtMDEtMDUgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogdGVzdGdsaWIuYyAobWFpbik6IEFkZCB0ZXN0IGZvciBnX3BhdGhfc2tpcF9yb290KCkuCgoJKiBnZmlsZXV0aWxzLmMgKGdfZmlsZV9vcGVuX3RtcCk6IChXaW4zMjopIExvb2sgYWxzbyBmb3IgKGlsbGVnYWwpCglmb3J3YXJkIHNsYXNoZXMgaW4gdGhlIHRlbXBsYXRlLgoKCSogZ3V0aWxzLmMgKGdfcGF0aF9za2lwX3Jvb3QpOiBPbiBXaW4zMiwgc2tpcCB0aGUgXFxzZXJ2ZXJcc2hhcmUKCXBhcnQgb2YgVU5DIHBhdGhzLiBPbiBhbGwgcGxhdGZvcm1zLCBza2lwIHNldmVyYWwgaW5pdGlhbAoJc2xhc2hlcy4gQWRkIGEgZmV3IGNvbW1lbnRzLgoJKGdfZ2V0X2FueV9pbml0KTogT24gV2luMzIsIGluIGNhc2UgSE9NRSBpcyBVbml4LXN0eWxlIHdpdGgKCShmb3J3YXJkKSBzbGFzaGVzIChzb21lIG90aGVyIGFwcGxpY2F0aW9ucyBhcHBhcmVudGx5IHNldCBpdCB1cAoJdGhpcyB3YXksIGNvbnZlcnQgdG8gYmFja3NsYXNoZWQgZm9ybS4KCgkqIGNvbmZpZ3VyZS5pbiAoZ2xpYl9vcyk6IFJlbW92ZSBzdHJheSAndicuIEFkZCBjYXNlIGZvciBtaW5ndywKCWFsdGhvdWdoIHVzaW5nIGNvbmZpZ3VyZSBmb3IgbWluZ3cgc3VyZWx5IGRvZXNuJ3Qgd29yayB5ZXQuCgoJKiBnbGliLmRlZjogVXBkYXRlLgoKMjAwMS0wMS0wMiAgSGF2b2MgUGVubmluZ3RvbiAgPGhwQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuaW46IHJlbW92ZSBnbGliLWNvbmZpZy0yLjAKCgkqIE1ha2VmaWxlLmFtOiByZW1vdmUgZ2xpYi1jb25maWctMi4wCgoyMDAxLTAxLTAzICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcG9ib3guY29tPgoKCSogdGVzdHMvTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogLUkkKHRvcF9zcmNkaXIpL2dtb2R1bGUsIAoJZml4IGZyb20gTWljaGFlbCBNZWVrcwoKCSogTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogRElTQUJMRSB3YXMgc3BlbGxlZCB3cm9uZwoKV2VkIEphbiAgMyAxNDoxMDo0OSAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdtYWluLltjaF06IFN3aXRjaCBHTWFpbkxvb3AgdG8gYmUgcmVmL3VucmVmLCB1c2UgdG8KCW1ha2UgZHJvcHBpbmcgcmVmZXJlbmNlIHRvIHJ1bm5pbmcgbG9vcCBzYWZlLgoKV2VkIERlYyAxMyAyMDo0MTo0OSAyMDAwICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdtYWluLmMgKGdfc291cmNlX3VucmVmX2ludGVybmFsKTogVW5yZWYgY2FsbGJhY2stPmNiX2RhdGEKCWlmIGl0IHdhcyBzdGlsbCBzZXQgd2hlbiB0aGUgc291cmNlIGlzIGZyZWVkLiAoVXN1YWxseSwgdGhpcwoJd2lsbCBiZSBkb25lIGJ5IGdfc291cmNlX2Rlc3Ryb3kuKQoKMjAwMS0wMS0wMiAgRGFuIFdpbnNoaXAgIDxkYW53QGhlbGl4Y29kZS5jb20+CgoJKiBnYXJyYXkuaCAoZ19hcnJheV9hcHBlbmRfdmFsLCBnX2FycmF5X3ByZXBlbmRfdmFsLAoJZ19hcnJheV9pbnNlcnRfdmFsKTogVXNlIHBhcmVudGhlc2VzIGFyb3VuZCBhbiBhcmd1bWVudCB0byBtYWtlCgl0aGVzZSBjYXVzZSBhbiBlcnJvciBpZiB5b3UgcGFzcyBhIG5vbi1sdmFsdWUgZm9yIHRoZSB2YWx1ZSwKCXJhdGhlciB0aGFuIHNpbGVudGx5IGRvaW5nIHRoZSB3cm9uZyB0aGluZy4KCjIwMDAtMTItMjkgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ2xpYmNvbmZpZy5oLndpbjMyLmluOiBBZGQgR0xJQl9TSVpFT0ZfVk9JRF9QIGFuZCBHTElCX1NJWkVPRl9MT05HLgoKCSogZ2xpYi5kZWY6IFVwZGF0ZS4KCgkqIHsuLCp9L21ha2VmaWxlLnttaW5ndyxtc2N9LmluOiBBZGQgLURHX0VOQUJMRV9ERUJVRy4KCQpGcmkgRGVjIDI5IDE0OjUzOjE4IDIwMDAgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogd2UgY2FuJ3QgZ3JvdyBfY3ZfIHZhcmlhYmxlcyBieSB1c2luZyBhIGJhY2t0aWNrZWQKCWV4cHIgdGhhdCByZWZlcnMgYmFjayB0byB0aGUgdmFyaWFibGUgKGdsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQgZm9yCglHX1RIUkVBRF9VU0VfUElEX1NVUlJPR0FURSksIHRoYXQnZCBrZWVwIHRoZSB2YXJpYWJsZSBncm93aW5nIGV2ZXJ5IHRpbWUKCWl0J3MgZXZhbHVhdGVkLiBxdWFudHVtIHN0YXRlcywgYW55b25lPykKClRodSBEZWMgMjggMTA6MjE6NDYgMjAwMCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21lbS5baGNdOiBnb3QgcmlkIG9mIG91dGRhdGVkIGRtYWxsb2Mgc3VwcG9ydC4gcHJvdmlkZSBnX3RyeV9tYWxsb2MoKQoJYW5kIGdfdHJ5X3JlYWxsb2MoKSB3aGljaCBfbWF5XyBmYWlsIGFuZCByZXR1cm4gTlVMTC4KCW51a2VkIGdfbWVtX2NoZWNrKCksIHByb3ZpZGVkIEdNZW1WVGFibGUgZm9yIG1lbW9yeSBmdW5jdGlvbgoJdmlydHVhbGl6YXRpb24sIGFsdGVyYWJsZSBhdCBwcm9ncmFtIHN0YXJ0dXAgd2l0aCBnX21lbV9zZXRfdnRhYmxlKCkuCglwcm92aWRlZCBnbGliX21lbV9wcm9maWxlcl90YWJsZSBhbmQgZ19tZW1fcHJvZmlsZSgpIHRvIHN1cHBvcnQgbGltaXRlZAoJcHJvZmlsaW5nIGluZm9ybWF0aW9uIG91dCBvZiB0aGUgYm94ICh1c2VzIG1wcm90ZWN0KCkgZm9yIGZyZWUoKWVkIGFyZWFzCglvbiBsaW51eCkuCglwcm92aWRlIGdsb2JhbGx5IHZpc2libGUgR19NRU1fQUxJR04uCglidW5jaGEgY2xlYW51cHMuCgoJKiBkb2NzL21hY3Jvcy50eHQ6IGZpbGUgdG8gZ2V0IGEgY2x1ZSBhYm91dCB0aGUgdmFyaW91cyBjb25maWd1cmF0aW9uCgltYWNyb3MuCgoJKiBkb2NzL2RlYnVnZ2luZy50eHQ6IGV4cGxhaW4gZGVidWdnaW5nIHRyYXBzLgoKCSogY29uZmlndXJlLmluOiBnb3QgcmlkIG9mIC0tZW5hYmxlLW1lbS1jaGVjayBhbmQgLS1lbmFibGUtbWVtLXByb2ZpbGUsCglkZWZpbmUgR0xJQl9TSVpFT0ZfVk9JRF9QIGFuZCBHTElCX1NJWkVPRl9MT05HLiBjaGVjayBtYWxsb2MgcHJvdG90eXBlcwoJYW5kIGRlZmluZSBTQU5FX01BTExPQ19QUk9UT1MgaXMgd2UgY2FuIHVzZSB0aGVtLgoJPGJveSwgaXMgdGhpcyBmaWxlIGEgbWVzcz4KCgkqIGd1dGlscy5jLCBnc2Nhbm5lci5jOiBmaXggdXAgY29tcGF0aWJpbGl0eSB3YXJuaW5ncywgdXNlIGdfbWVzc2FnZSgpLgoKMjAwMC0xMi0yNyAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBSRUFETUUud2luMzI6IFVwZGF0ZS4KCjIwMDAtMTItMjUgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ21lc3NhZ2VzLmM6IChXaW4zMikgVXNlIGEgTWVzc2FnZUJveCBmb3IgZmF0YWwKCW1lc3NhZ2VzLiBDb2xsZWN0IGVyb3IgbWVzc2FnZSBpbnRvIGEgYnVmZmVyLCBhbmQgZGlzcGxheSB0aGF0LgoKCSogZ2xpYi5kZWY6IFVwZGF0ZS4KCgkqIGdsaWJjb25maWcuaC53aW4zMi5pbjogVXBkYXRlLiBSZW1vdmUgdW51c2VkIHdjaGFyIGFuZCB3Y3R5cGUKCW1hY3JvcywgYWRkIEdfTU9EVUxFX1NVRkZJWC4KCjIwMDAtMTItMjQgIEFsaSBBYmRpbiAgPGFsaWFiZGluQGF1Y2VneXB0LmVkdT4KCgkqIE1ha2VmaWxlLmFtLCBnY29tcGF0LmgsIGdsaWIuaDogTmV3IGdjb21wYXQuaCBoZWFkZXIgZmlsZQogCSAgYXMgcmVjb21tZW5kZWQgYnkgSGF2b2MuCgoJKiBnZGF0ZS5jLCBnZGF0ZS5oLCB0ZXN0Z2RhdGUuYywKCSAgZG9jcy9yZWZlcmVuY2UvZ2xpYi9nbGliLXNlY3Rpb25zLnR4dCwKCSAgZG9jcy9yZWZlcmVuY2UvZ2xpYi90bXBsL2RhdGUuc2dtbCwgdGVzdHMvZGF0ZS10ZXN0LmM6IFJlbmFtZSBzb21lCgkgIG9mIHRoZSBnZGF0ZSBmdW5jdGlvbnMgdG8gdXNlIHRoZSAnX2dldCcgaW4gdGhlaXIgbmFtZS4gUGF0Y2gKCSAgcmV2aWV3ZWQgYnkgSGF2b2MuCgkJCjIwMDAtMTItMjIgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBjb25maWd1cmUuaW46IERldGVybWluZSB0aGUgc3VmZml4IG9mIHRoZSBzaGFyZWQgbGlicmFycmllcyBmb3IKCXRoaXMgc3lzdGVtLiBUaGlzIGlzIGRvbmUgYW5hbG9nb3VzIHRvCglsdGNvbmZpZy5zaC4gR19NT0RVTEVfU1VGRklYIGluIGdsaWJjb25maWcuaCBpcyBzZXQgdG8gZWl0aGVyCgkic2wiLCAiZGxsIiwgb3IgKG1vc3Qgb2Z0ZW4pICJzbyIuCgoJKiB0ZXN0cy9NYWtlZmlsZS5hbSwgdGVzdHMvbW9kdWxlLXRlc3QuYywKCXRlc3RzL2xpYm1vZHVsZXRlc3RwbHVnaW5fYS5jLCB0ZXN0cy9saWJtb2R1bGV0ZXN0cGx1Z2luX2IuYzoKCUFkZGVkIG5ldyB0ZXN0Y2FzZSBmb3IgZ21vZHVsZS4gVGhpcyBpcyBtb3N0bHkgY29waWVkIGZyb20KCWdtb2R1bGUvdGVzdGdtb2R1bGUuYywgYnV0IHVubGlrZSB0aGF0IGlzIGlzIHF1aWV0LiAoV2h5IEJUVyBhcmUKCXNvbWUgdGVzdHMgdGhhdCB2ZXJib3NlLCBub3QgdG8gc2F5IGxvcXVhY2lvdXMuLi4pCgoyMDAwLTEyLTE5ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ3JhbmQuYzogVXBkYXRlZCBHX1JBTkRfRE9VQkxFX1RSQU5TRk9STSB0byBiZSBtb3JlCglhY2N1cmF0ZS4gUmVkaWQgZ19yYW5kX2RvdWJsZSgpIHN1Y2ggdGhhdCBpdCByZXR1cm5zIDUyIGJpdHMgYWZ0ZXIKCXRoZSBwb2ludCBpbnN0ZWFkIG9mIDMyIGFzIGJlZm9yZS4gVGhhdCBPVE9IIHJlcXVpcmVzIGNhbGxpbmcKCWdfcmFuZF9pbnQoKSB0d2ljZS4gT3ZlcmhhdWxlZCBnX3JhbmRfaW50X3JhbmdlKCksIHdoaWNoIGlzIGVhc2llcgoJbm93IHRoYW5rcyB0byB0aGUgbmV3IHByZWNpc2lvbiBvZiBnX3JhbmRfZG91YmxlKCkuIFRoYW5rcyB0bwoJU3ZlcnJlIEpvaGFuc2VuIDxzakBpZmkudWlvLm5vPiBmb3IgdGhlIGhpbnQuCgoJKiBncmFuZC5oOiBBZGRlZCBnX3JhbmRfYm9vbGVhbigpIGFuZCBnX3JhbmRvbV9ib29sZWFuKCkKCW1hY3Jvcy4gV2hpbGUgdGhleSBjb3VsZCBiZSBvbWl0dGVkIGR1ZSB0byBleHRyZW1lIHNpbXBsaWNpdHksCgl0aGV5IG1ha2UgaW50ZW50aW9uIGNsZWFyZXIgaW4gY29kZSBhbmQgYXJlIHRoZXJlZm9yZSBnb29kIHRvIGhhdmUuCgoJKiBncmFuZC5jLCBncmFuZC5oOiBSZW5hbWVkIGFsbCAnbWluJyBhbmQgJ21heCcgcGFyYW1ldGVycyB0bycKCWJlZ2luJyBhbmQgJ2VuZCcgcmVzcC4gdG8gYXZvaWQgbWFraW5nIHBlb3BsZSB0aGluaywgdGhhdCAnbWF4JyBpcwoJaW5jbHVkZWQgaW4gdGhlIGludGVydmFsLiAnZW5kJyBub3cgaXNuJ3QsIHdoZXJlYXMgJ2JlZ2luJwoJaXMuIFRoYXQncyBzaW1pbGFyIHRvIHRoZSB1c2UgaW4gdGhlIFNUTC4KCgkqIGdzbGlzdC5jLCBnbGlzdC5jOiBPaywgSSdtIGEgbW9yb24uIFdoZW4gSSBvcmlnaW5hbGx5CglpbXBsZW1lbnRlZCBFTkFCTEVfR0NfRlJJRU5ETFksIEkgZm9yZ290IHRvIGluY2x1ZGUgY29uZmlnLmggaW50bwoJdGhlIGFmZmVjdGVkIGZpbGVzLiBOb3cgdGhhdCBBbGV4IGRpZCB0aGF0IGZvciB0aG9zZSB0d28sCglpbmV2aXRhYmxlIHR5cG9zIHN1cmZhY2VkLCB3aGljaCBhcmUgbm93IGZpeGVkLgoJCgkqIGdhcnJheS5jLCBnaGFzaC5jLCBncXVldWUuYywgZ3RyZWUuYzogSW5jbHVkZSBjb25maWcuaCBhcyB3ZWxsLAoJYXMgRU5BQkxFX0dDX0ZSSUVORExZIHNob3VsZCBiZSBrbm93bi4KCjIwMDAtMTItMTkgIEFsZXhhbmRlciBMYXJzc29uICA8YWxleGxAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjoKCUFkZGVkIC0tZGlzYWJsZS1tZW0tcG9vbHMgb3B0aW9uLgoKCSogZ2xpc3QuYzoKCSogZ3NsaXN0LmM6CgkqIGdub2RlLmM6CgkqIGdtZW0uYzoKCURpc2FibGUgZnJlZSBsaXN0IGFuZCBtZW1vcnkgY2h1bmtzIGlmIERJU0FCTEVfTUVNX1BPT0xTIGlzIGRlZmluZWQuCgoyMDAwLTEyLTE3ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGd1dGY4LmMgKGdfdXRmOF9nZXRfY2hhcnNldF9pbnRlcm5hbCk6IChXaW4zMikgVXNlIEdldEFDUCB0byBnZXQKCXRoZSBjdXJyZW50IEFOU0kgY29kZXBhZ2UuCgoJKiBndW5pY29kZS5oOiBBZGQgY29tbWVudCB0aGF0IHRoZSBzdGF0aWMgc3RyaW5nIGdfZ2V0X2NoYXJzZXQKCXNldHMgdGhlIHBhcmFtZXRlciB0byBwb2ludCB0byBzaG91bGQgYmUgY29waWVkIGluIGNhc2UgdGhlCgljaGFyc2V0IG1pZ2h0IGJlIGNoYW5nZWQgbGF0ZXIgaW4gdGhlIHByb2dyYW0uCgoyMDAwLTEyLTE0ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIG1ha2VmaWxlLnttaW5ndyxtc2N9LmluOiBObyBuZWVkIHRvIC1ER1NQQVdOX0hFTFBFUiB3aGVuCgljb21waWxpbmcgZ3NwYXduLXdpbjMyLWhlbHBlciBhbnkgbG9uZ2VyLgoKCSogZ2lvd2luMzIuYyAoZ19pb193aW4zMl9kaXNwYXRjaCk6IFdhcm4gaWYgbm8gY2FsbGJhY2suIENhbGwKCWNhbGxiYWNrIGNvcnJlY3RseS4KCShnX2lvX3dpbjMyX2NyZWF0ZV93YXRjaCk6IEZpeCB0eXBvLgoJKGdfaW9fd2luMzJfZmRfY3JlYXRlX3dhdGNoKTogRGl0dG8uCgkoZ19pb19jaGFubmVsX3VuaXhfbmV3KTogSWYgaXQgaXMgYSBmaWxlIGRlc2NyaXB0b3IgKGkuZS4sIGEgVW5peAoJZmQgbG9va2FsaWtlIHByb3ZpZGVkIGJ5IHRoZSBDIGxpYnJhcnkpLCBjYWxsCglnX2lvX2NoYW5uZWxfd2luMzJfbmV3X2ZkKCkuIElmIGl0IGlzIGEgc29ja2V0IChmcm9tIFdpblNvY2spLAoJY2FsbCBnX2lvX2NhaG5uZWxfd2luMzJfbmV3X3N0cmVhbV9zb2NrZXQoKS4gSG9wZWZ1bGx5IHNvY2tldHMgYW5kCglmZHMgZG9uJ3Qgb3ZlcmxhcC4gVE9ETzogSW1wbGVtZW50IGFsc28gZGF0YWdyYW0gc29ja2V0cy4KCShnX2lvX2NoYW5uZWxfd2luMzJfcG9sbCk6IENhbGwgZ19tYWluX2NvbnRleHRfZ2V0X3BvbGxfZnVuYygpLgoKCSogZ2NvbXBsZXRpb24uaDogSW5jbHVkZSA8dW5pc3RkLmg+IG9ubHkgb24gVW5peC4gSXMgdGhpcwoJaW5jbHVzaW9uIHJlYWxseSBuZWVkZWQgaGVyZT8gT1RPSCwgZG8gaW5jbHVkZSA8c3RkZGVmLmg+LCBmb3IKCXNpemVfdC4KCgkqIGdtZXNzYWdlcy5jOiAoV2luMzIpIERvbid0IGRlZmluZSBhIGZ1bmN0aW9uIGNhbGxlZCAid3JpdGUiIHRoYXQKCW1pZ2h0IGNsYXNoIHdpdGggdGhlIHByb3RvdHlwZSBmcm9tIDxpby5oPiwgdXNlIGEgI2RlZmluZS4KCgkqIGdsaWIuZGVmOiBVcGRhdGUuCgoJKiBnbWFpbi5jIChnX3NvdXJjZV9hZGRfcG9sbCk6IERvbid0IHJldHVybiBhIHZhbHVlIGZyb20gdm9pZAoJZnVuY3Rpb24uCgkoZ19tYWluX2NvbnRleHRfZ2V0X3BvbGxfZnVuYyk6IENvbXBpbGUgYWxzbyBmb3Igbm9uLVdpbjMyLCBhcwoJcHJlc3VtYWJseSB3YXMgaW50ZW5kZWQuIFRoZSByZXN1bHQgdmFyIGlzIGEgR1BvbGxGdW5jLCBub3QgYQoJR1BvbGxGdW5jKi4gUmV0dXJuIHRoZSByZXN1bHQhCgoyMDAwLTEyLTEzICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcmVkaGF0LmNvbT4KCgkqIGdjb252ZXJ0LmMgKG9wZW5fY29udmVydGVyKTogbWFrZSBzdGF0aWMKCgkqIGd1dGY4LmMgKGdfdXRmOF92YWxpZGF0ZSk6IFNpbXBsaWZ5IGxvZ2ljIGEgYml0LCBtYXliZSAKCXNwZWVkaW5nIGl0IHVwIC0gbm93IHdlIGp1c3QgcmV0dXJuIEZBTFNFIGlmIHdlIGhhZCB0byBiYWlsIG91dAoJZm9yIGFueSByZWFzb24gYmVmb3JlIGdldHRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBhcyBkZWZpbmVkIAoJYnkgYSBudWwgYnl0ZSBpZiBsZW4gd2FzIC0xLCBkZWZpbmVkIGJ5IHRoZSBsZW4gb3RoZXJ3aXNlLiBUaGlzIAoJYWxzbyBmaXhlcyBhIGJ1ZyB3aGVyZSBudWwgYnl0ZXMgd2VyZSBub3QgdHJlYXRlZCBhcyBpbnZhbGlkIAoJd2hlbiB0aGUgbGVuZ3RoIHdhcyBzcGVjaWZpZWQuCgoyMDAwLTEyLTEyICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcG9ib3guY29tPgoKCSogZ21haW4uYyAoZ19tYWluX2NvbnRleHRfZGVzdHJveSk6IGRvbid0IHRyeSB0byB1c2UgdGhyZWFkIHN0dWZmCgl1bmxlc3MgR19USFJFQURTX0VOQUJMRUQKCShnX21haW5fY29udGV4dF9xdWVyeSk6IGRpdHRvCgkoZ19tYWluX2NvbnRleHRfY2hlY2spOiBkaXR0bwoJKGdfbWFpbl9sb29wX3F1aXQpOiBkaXR0bwoKVHVlIERlYyAxMiAxODo1ODoyMiAyMDAwICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnaGFzaC5jIChnX2hhc2hfdGFibGVfcmVtb3ZlKTogcmV0dXJuIHdoZXRoZXIgYSB2YWx1ZQoJZ290IHJlbW92ZWQuCgpUdWUgRGVjIDEyIDE1OjE4OjEwIDIwMDAgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ21haW4uW2NoXTogUmV2ZXJ0IHVuYXV0aG9yaXplZCBjaGFuZ2VzLgoKMjAwMC0xMi0xMiAgRWxsaW90IExlZSAgPHNvcHdpdGhAcmVkaGF0LmNvbT4KCgkqIGdtYWluLmMsIGdtYWluLmggKGdfbWFpbl9jb250ZXh0X25ldywgZ19tYWluX2NvbnRleHRfZGVzdHJveSk6CglHTWFpbkNvbnRleHQgdXNlZnVsIGluIGltcGxlbWVudGluZyBzb21lIGFkZGl0aW9uYWwgc3R5bGVzIG9mCgltYWluIGxvb3AgdXNhZ2UuICBUbyBkbyB0aGlzLCBob3dldmVyLCBKb2UgSGFja2VyIG5lZWRzIHRvIGJlIGFibGUKCXRvIGNyZWF0ZS9kZXN0cm95IEdNYWluQ29udGV4dCdzIGF0IHdpbGwuIFRoaXMgaXMganVzdCBhbiBleHBvcnQKCW9mIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHksIHJhdGhlciB0aGFuIGFueSBuZXcgZnVuY3Rpb25hbGl0eS4KCglUaGV5IGFyZSBsaXN0ZWQgaW4gdGhlICJMb3cgbGV2ZWwgZnVuY3Rpb25zIGZvciBpbXBsZW1lbnRpbmcgY3VzdG9tCgltYWluIGxvb3BzIiBzZWN0aW9uIG9mIHRoZSBoZWFkZXIgZmlsZSwgdG8gYXZvaWQgY29uZnVzaW5nIHBlb3BsZS4KClN1biBEZWMgMTAgMTA6NDc6MTEgMjAwMCAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbWFpbi5jIChnX3NvdXJjZV9kZXN0cm95X2ludGVybmFsKTogUmVtb3ZlIHBvbGxmZHMKCWZyb20gdGhlIGNvbnRleHQgaGVyZSwgbm90IHdoZW4gYWN0dWFsbHkgZnJlZWluZyB0aGUKCXNvdXJjZS4KCgkqIGdtYWluLmMgKGdfc291cmNlX3VucmVmX2ludGVybmFsKTogRnJlZSBzb3VyY2UgbGlzdAoJYW5kIHNvdXJjZSwgY2FsbCBzb3VyY2UtPnNvdXJjZV9mdW5jcy0+ZGVzdHJveSgpLgoKCSogZ2lvY2hhbm5lbC5jOiBVbnJlZmVyZW5jZSBpb19jaGFubmVsIHByb3Blcmx5LgoKVGh1IERlYyAgNyAxNToyMjozMCAyMDAwICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIHRlc3RzL21haW5sb29wLXRlc3QuYyAocmVjdXJzZXJfc3RhcnQpOiBBZGQgYSBidW5jaAoJb2YgdW5yZWZzLgoKCSogZ21haW4uYyAoZ19zb3VyY2VfYXR0YWNoKTogUmVmZXJlbmNlIHRoZSBzb3VyY2UKCXdoZW4gYWRkaW5nIChwb2ludGVkIG91dCBieSBFbGxpb3QpCgoyMDAwLTEyLTA4ICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogYWNnbGliLm00IChHTElCX0FDX0RJVkVSVF9CRUZPUkVfSEVMUCk6IAoJUmVuYW1lIGZyb20gR0xJQl9ESVZFUlRfQkVGT1JFX0hFTFAuICAKCVVwZGF0ZSB0byB0cmFjayBhdXRvY29uZiAyLjQ5Yi4KCSogY29uZmlndXJlLmluOiBSZWZsZWN0IGFib3ZlIGNoYW5nZS4KCShBQ19FR1JFUF9IRUFERVIpOiBSZW5hbWUgZnJvbSByZWFsbHkgb2JzZWxldGUgQUNfSEVBREVSX0VHUkVQLgoJKGRlYnVnX2RlZmF1bHQpOiBSZXBsYWNlICJpZiB0ZXN0IGBleHByIC4uLmAiIHdpdGggImNhc2UiLiAKCgkqIHRlc3RzL01ha2VmaWxlLmFtIChURVNUUyk6IFJlYXJyYW5nZSBpbnRvIG90aGVyIHZhcmlhYmxlcywgYW5kCglpbmNsdWRlIHJ1bi1tYXJrdXAtdGVzdHMuc2guCgkoVEVTVFNfRU5WSVJPTk1FTlQpOiBOZXcuICBQYXNzICRzcmNkaXIgdG8gdGVzdHMuCgkobm9pbnN0X1BST0dSQU1TKTogUmVuYW1lIHRvIC4uLgoJKGNoZWNrX1BST0dSQU1TKTogLi4uIHRoaXMuICAnYXV0b21ha2UnIGVuc3VyZXMgdGhhdCB0aGVzZSBhcmUKCWJ1aWx0IGJlZm9yZSBydW5uaW5nIHRoZSB0ZXN0cy4KCSogdGVzdHMvcnVuLW1hcmt1cC10ZXN0cy5zaDogU3VwcG9ydCAkc3JjZGlyICE9ICRidWlsZGRpci4KCjIwMDAtMTItMDggIEhhdm9jIFBlbm5pbmd0b24gIDxocEBwb2JveC5jb20+CgoJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoVEVTVFMpOiBtb3ZlIG1hcmt1cC10ZXN0IHRvIG5vaW5zdF9QUk9HUkFNUzsKCWl0IGlzbid0IGEgcHJvcGVyIHRlc3QsIHRoZSBwcm9wZXIgdGVzdCB3b3VsZCBiZSAKCXJ1bi1tYXJrdXAtdGVzdHMuc2gsIGJ1dCB0aGF0IGNhbid0IGdvIGluIHRlc3RzLCBzbyB3ZSBuZWVkIAoJYSBtYW51YWwgbWFrZSBjaGVjayBydWxlLiBEaWRuJ3QgZG8gdGhhdCB5ZXQuCgoyMDAwLTEyLTA3ICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogZ21haW4uaDogRG9uJ3QgcHV0IGFueXRoaW5nIGFmdGVyIGFuICNlbmRpZi4KCSogZ21haW4uYzogTGlrZXdpc2UuCgoyMDAwLTEyLTA2ICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcG9ib3guY29tPgoKCSogdGVzdHMvc3RyZnVuYy10ZXN0LmMgKG1haW4pOiBhZGQgZ19zdHJkdXB2IHRlc3QKCgkqIGdzdHJmdW5jcy5jIChnX3N0cmR1cHYpOiBBZGQgYSBmdW5jdGlvbiB0byBjb3B5IAoJYW4gYXJyYXkgb2Ygc3RyaW5ncwoKVHVlIERlYyAgNSAxMjoyMzowNCAyMDAwICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCiAgICAgICAgKiBnbWFpbi5baGNdOiBNYWpvciBjaGFuZ2UgaW4gQVBJIGZvciBjcmVhdGluZyBzb3VyY2VzCgl0byBoYW5kbGUgbXVsdGlwbGUgbWFpbiBsb29wcyAoR01haW5Db250ZXh0ICopLiAKCglHU291cmNlcyBhcmUgbm93IGV4cG9zZWQgYXMgR1NvdXJjZSAqIGFuZCBpbXBsZW1lbnRlZAoJd2l0aCBzdHJ1Y3R1cmUgZGVyaXZhdGlvbi4KCgkqIGdpb2NoYW5uZWwuW2NoXTogQ2hhbmdlZCB2dGFibGUgZm9yIEdJT0NoYW5uZWwgdG8gY29ycmVzcG9uZAoJdG8gdGhlIG5ldyBtYWlubG9vcCBBUEksIGFkZCBnX2lvX2NoYW5uZWxfY3JlYXRlX3dhdGNoKCkuCgkgCgkqIGd0eXBlcy5oOiBNb3ZlIEdUaW1lVmFsIGhlcmUuCgoJKiBndGhyZWFkLmg6IFJlbW92ZSBnbWFpbi5oIGluY2x1ZGUgdG8gYXZvaWQgY2lyY3VsYXJpdHkuCgkKICAgICAgICAqIGdpb3VuaXguYzogVXBkYXRlIGZvciBuZXcgR01haW4gQVBJLgoJIAoJKiBnaW93aW4zMi5jOiBVcGRhdGUgZm9yIG5ldyBHTWFpbiBBUEkuIChObyBjaGVjayBmb3IKCXByb3BlciBjb21waWxhdGlvbiBvciB3b3JraW5nLikKCgkqIHRpbWVsb29wLmMgdGltZWxvb3AtYmFzaWMuYzogQSBiZW5jaG1hcmtpbmcgcHJvZ3JhbSBmb3IKCXRoZSBtYWluIGxvb3AgY29tcGFyaW5nIHRoZSBtYWluIGxvb3AgYWdhaW5zdCBhIAoJaGFuZC13cml0dGVuICh0aW1lbG9vcC1iYXNpYy5jKSB2YXJpYW50LiAKCgkqIHRlc3RzL21haW5sb29wLXRlc3QuYzogTmV3IHRvcnR1cmUgdGVzdCBvZiBtYWlubG9vcC4KCQoJKiBkb2NzL0NoYW5nZXMtMi4wLnR4dDogU3RhcnRlZC4gQWRkZWQgdGV4dCBhYm91dAoJY2hhbmdlcyB0byBHTWFpbi4KCgkqIGdtYWluLmMgKGdfbWFpbl9hZGRfcG9sbF91bmxvY2tlZCk6IEluaXRpYWwgZmQtPnJldmVudHMKCXRvIHplcm8uICgjODQ4MiwgQmVuamFtaW4gS2FobikKCjIwMDAtMTItMDEgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogey4sKn0vbWFrZWZpbGUubXNjLmluOiBJbmNsdWRlIG1ha2UubXNjIGZyb20gR0xpYidzIGJ1aWxkIHN1YmRpci4KCgkqIG1ha2VmaWxlLnttaW5ndyxtc2N9LmluIChnbGliX09CSkVDVFMpOiBBZGQgZ3VuaWJyZWFrLgoKCSogZ2xpYi5kZWY6IFVwZGF0ZSBjb3JyZXNwb25kaW5nbHkuCgoyMDAwLTExLTIxICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcG9ib3guY29tPgoKCSogZ21hY3Jvcy5oOiBQcm92aWRlIEdfQ09OU1RfUkVUVVJOIHdoaWNoIGlzICdjb25zdCcgYnkgZGVmYXVsdCwKCWFuZCBub3RoaW5nIHdoZW4gR19ESVNBQkxFX0NPTlNUX1JFVFVSTlMgaXMgZGVmaW5lZC4KCjIwMDAtMTEtMjkgIEhhdm9jIFBlbm5pbmd0b24gIDxocEByZWRoYXQuY29tPgoKCSogZ3VuaWRlY29tcC5jIChDT01CSU5JTkdfQ0xBU1MpOiAKCXMvVU5JQ09ERV9MQVNUX0NIQVIvR19VTklDT0RFX0xBU1RfQ0hBUi8KCgkqIGd1bmljaGFydGFibGVzLmg6IFVwZGF0ZSBmb3IgZGF0YSBpbiBVbmljb2RlIDMuMC4xCgoJKiBndW5pZGVjb21wLmg6IERpdHRvCgkKCSogZ3VuaWNvZGUuaCAoR1VuaWNvZGVCcmVha1R5cGUpOiBFbnVtIGZvciBsaW5lIGJyZWFrIHByb3BlcnRpZXMKCShnX3VuaWNoYXJfYnJlYWtfdHlwZSk6IEdldCB0aGUgYnJlYWsgcHJvcGVydHkgZm9yIGEgY2hhcgoJCgkqIGd1bmlicmVhay5oOiBBdXRvZ2VuZXJhdGVkIGxpbmUgYnJlYWsgcHJvcGVydHkgdGFibGVzCgoJKiBndW5pYnJlYWsuYyAoZ191bmljaGFyX2JyZWFrX3R5cGUpOiBhZGRlZCAKCQoJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IGRpc3QgZ2VuLXVuaWNvZGUtdGFibGVzLnBsCgoJKiBNYWtlZmlsZS5hbSAobGliZ2xpYl8xXzNfbGFfU09VUkNFUyk6IEFkZCBndW5pYnJlYWsuaCwgZ3VuaWJyZWFrLmMKCQoJKiBnZW4tdW5pY29kZS10YWJsZXMucGw6IEluY2x1ZGUgdGhlIHNjcmlwdCB0byB1cGRhdGUgdGhlIHVuaWNvZGUKCWNoYXIgdGFibGVzCgoyMDAwLTExLTI4ICBFbGxpb3QgTGVlICA8c29wd2l0aEByZWRoYXQuY29tPgoKCSogZ21hcmt1cC5jOiBGaXggd2FybmluZ3MuCgoJKiBndW5pcHJvcC5jLCBndW5pZGVjb21wLmM6IE1ha2Ugd2FybmluZ3MgZ28gYXdheSBieSB1c2luZwoJR1BPSU5URVJfVE9fSU5UKCkgaW5zdGVhZCBvZiAoaW50KS4KCgkqIGdjb21wbGV0aW9uLltjaF06IEFkZCBnX2NvbXBsZXRpb25fc2V0X2NvbXBhcmUoKSwKCXRvIGFsbG93IChmb3IgZXhhbXBsZSkgdXNpbmcgY2FzZS1pbnNlbnNpdGl2ZSBjb21wbGV0aW9uLgoKMjAwMC0xMS0yOCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJUGF0Y2hlcyBieSBIYW5zIEJyZXVlcjoKCQoJKiBnc3Bhd24td2luMzIuYzogTW92ZSB0aGUgY29kZSBmb3IgZ3NwYXduLXdpbjMyLWhlbHBlciB0byBpdHMgb3duCglmaWxlLgoKCSogbWFrZWZpbGUue21pbmd3LG1zY30uaW46IENoYW5nZSBhY2NvcmRpbmdseS4KCgkqIGdzcGF3bi13aW4zMi1oZWxwZXIuYzogTmV3IGZpbGUuCgoJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBpdC4KCgkqIGdtYXJrdXAuYyAoZmluZF9jdXJyZW50X3RleHRfZW5kKTogRml4IGFzc2VydGlvbiBub3QgdG8gY2hlY2sgYW4KCXVuaW5pdGlhbGlzZWQgdmFyaWFibGUuCgoyMDAwLTExLTI4ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ3RocmVhZC5jOiBTZXQgdGhlIHRocmVhZCBkYXRhIGJlZm9yZSBsb2NraW5nIHRoZSBtdXRleCwgYmVjYXVzZQoJdGhlIGxvY2tpbmcgY2FsbCBtaWdodCB1c2UgZ190aHJlYWRfc2VsZiAoKS4KCgkqIGd0aHJlYWQuaDogRG8gb25seSBzaG93IHRoZSBsb2NhdGlvbiBvZiB0aGUgbG9ja2luZy91bmxvY2tpbmcKCWZvciAtREdfRVJST1JDSEVDS19NVVRFWEVTIGFuZCBub3QgdGhlIG5hbWUgb2YgdGhlIG11dGV4LiBBZGQgdGhlCgllcnJvcmNoZWNrIGNhcGFiaWxpdHkgZm9yIGdfY29uZF93YWl0IGFuZCBnX2NvbmRfdGltZWRfd2FpdCBhcwoJd2VsbC4JCgoyMDAwLTExLTI3ICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcmVkaGF0LmNvbT4KCgkqIGd0aHJlYWQuaDogQWRkIHZvaWQgaW4gZW1wdHkgZnVuY3Rpb24gYXJnIGxpc3QKCjIwMDAtMTEtMjIgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogbWFrZWZpbGUue21pbmd3LG1zY30uaW46IEFkZCBncXNvcnQuCgoJKiBnbGliLmRlZjogVXBkYXRlLgoKMjAwMC0xMS0yMSAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkIGEgc3Vycm9nYXRlIGZvciB0aHJlYWQgcHJpb3JpdGllcyB1c2luZyBQSUQKCW5pY2VuZXNzIGZvciBzeXN0ZW1zIHdpdGggbm8gdGhyZWFkIHByaW9yaXRpZXMgYW5kIGRpZmZlcmVudCBQSURzCglmb3IgdGhyZWFkcyBvZiB0aGUgc2FtZSBwcm9jZXNzIChtb3N0IG5vdGFibHk6IExpbnV4KS4gRGVmaW5lCglHX1RIUkVBRF9VU0VfUElEX1NVUlJPR0FURSBpbiB0aGF0IGNhc2UsIGFzIHVzZWQgYnkKCWd0aHJlYWQtcG9zaXguYy4gQWxzbyBtYWtlIHRoZSBzeXN0ZW0gdGhyZWFkIGJpZ2dlciBieQoJc2l6ZW9mIChsb25nKSB0byBjb250YWluIHRoZSB0aHJlYWQncyBQSUQuCgoJKiBnZmlsZXV0aWxzLmM6IEluY2x1ZGUgc3RkbGliLmggZm9yIG1rc3RlbXAgcHJvdG90eXBlLgoKCSogZ3RocmVhZC5jOiBBZGQgcHJpb3JpdHkgcmFuZ2UgY2hlY2tzIHRvIHRoZSBhZmZlY3RlZCBmdW5jdGlvbnMuCgoJKiBndGhyZWFkcG9vbC5jOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgoKTW9uIE5vdiAyMCAxODo1NToxNyAyMDAwICBKb25hdGhhbiBCbGFuZGZvcmQgIDxqcmJAcmVkaGF0LmNvbT4KCgkqIGd0cmVlLltoY106IFBhdGNoIGZyb20gRGF2aWQgQmVuc29uIDxkYXZlYkBpZGVhbGFiLmNvbT4gdG8gYWRkCgl1c2VyX2RhdGEgc3VwcG9ydCB0byBndHJlZSBmdW5jdGlvbnMuCgpNb24gTm92IDEzIDE4OjM1OjUyIDIwMDAgIEpvbmF0aGFuIEJsYW5kZm9yZCAgPGpyYkByZWRoYXQuY29tPgoKCSogZ3R5cGVzLmggKEdDb21wYXJlRnVuY0RhdGEpOiBuZXcgZnVuYyB0eXBlIHRvIGxldCB5b3UgdXNlIHVzZXIKCWRhdGEgd2hlbiBjb21wYXJpbmcgbm9kZXMuCgoJKiBnc2xpc3QuYyAoZ19saXN0X3NvcnRfd2l0aF9kYXRhKTogbmV3IGZ1bmN0aW9uIHRvIHNvcnQgd2l0aAoJdXNlcl9kYXRhLiAKCgkqIGdsaXN0LmMgKGdfbGlzdF9zb3J0X3dpdGhfZGF0YSk6IG5ldyBmdW5jdGlvbiB0byBzb3J0IHdpdGgKCXVzZXJfZGF0YS4gCgoJKiBnYXJyYXkuW2NoXTogQWRkZWQgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIHNvcnQgYXJyYXlzLgoKMjAwMC0xMS0xNiAgSGF2b2MgUGVubmluZ3RvbiAgPGhwQHJlZGhhdC5jb20+CgoJKiBndW5pcHJvcC5jIChnX3VuaWNoYXJfaXNzcGFjZSk6IFVzZSBhIHN3aXRjaCBoZXJlLCBtYXliZSBoZWxwcyAKCXRoZSBjb21waWxlciBvcHRpbWl6ZSB0aGluZ3MuIEFsc28sICcgJyBpcyBhIFNQQUNFX1NFUEFSQVRPUiwKCXNvIGRvbid0IHNwZWNpYWwgY2FzZSBpdC4KCjIwMDAtMTEtMTcgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ2xpYi5kZWY6IEFkZCBnX3RyYXNoX3N0YWNrIGVudHJ5IHBvaW50cy4KCkZyaSBOb3YgMTcgMTU6NDM6MDAgMjAwMCAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgogICAgICAgICogUmVsZWFzZWQgMS4zLjIKCQoJKiBORVdTOiBVcGRhdGUuCgoJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoZGlzdC1ob29rKTogQWRkIGNvZGUgdG8gZGlzdHJpYnV0ZQoJbWFya3VwIHRlc3QgZmlsZXMuCgoyMDAwLTExLTE1ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3IgdGhlIHNjaGVkLmggaGVhZGVyIGFuZCBpbmNsdWRlIGl0IG9uCglndGhyZWFkL2d0aHJlYWQtcG9zaXguYyBpZiBhdmFpbGFibGUuCgoJKiBjb25maWd1cmUuaW46IEFkZCAtRF9QT1NJWDRfRFJBRlRfU09VUkNFIHRvCglHVEhSRUFEX0NPTVBJTEVfSU1QTF9ERUZJTkVTLiBBbHNvIGFkZCAtRF9QT1NJWDRBX0RSQUZUMTBfU09VUkNFCgl0byBHX1RIUkVBRF9DRkxBR1MuIFJlYWxseSBkZXBsb3kgR1RIUkVBRF9DT01QSUxFX0lNUExfREVGSU5FUywKCXdoZW4gc2VhcmNoaW5nIGZvciB0aHJlYWQgbGlicy4gTG9vayBmb3Igc2NoZWRfKiBmdW5jdGlvbnMgaW4KCS1scnRlIGFzIHdlbGwuIEFsbCBvZiB0aGF0IGlzIG5lY2Vzc2FyeSBvbiBERy9VWC4KCgkqIGNvbmZpZ3VyZS5pbjogVXNlIEFDX1RSWV9DT01QSUxFIGluc3RlYWQgb2YgQUNfRUdSRVBfSEVBREVSUyBpbgoJdmFyaW91cyBwbGFjZXMgdG8gbWFrZSBpdCB3b3JrIG1vcmUgcmVsaWFibGUsIHRvIG1ha2UgaXQgYWNjZXB0CgltYWNyb3MgaW5zdGVhZCBvZiBmdW5jdGlvbnMgZXRjLgoKCSogY29uZmlndXJlLmluOiBSZXBsYWNlIHNvbWUgTlVMTCdzIGZvciBjaGVja3Mgd2l0aCAwIHRvIG1ha2UgaXQKCXdvcmsgd2l0aG91dCBzdGRpby5oIGV2ZXJ5d2hlcmUuCgoJKiBjb25maWd1cmUuaW4sIGd1dGlscy5jOiBjaGFuZ2VkIHRoZSB0ZXN0IGZvciBnZXRwd3VpZF9yIHRvIGZpcnN0Cgl0ZXN0IGZvciBhIHBvc2l4IHZlcnNpb24gYW5kIHRoZW4gZm9yIGEgbm9uLXBvc2l4IHZlcnNpb24uIE5vIGNvZGUKCWNoYW5nZSBpbiBndXRpbHMuYy4gQWdhaW4gdGhpcyBjaGFuZ2UgZGVhbHMgYmV0dGVyIHdpdGggZ2V0cHd1aWRfcgoJYmVpbmcgYSBtYWNybyBhbmQgbm90IGEgZnVuY3Rpb24uIE1vc3Qgb2YgdGhlIGFib3ZlIHdpdGgga2luZCBoZWxwCglmcm9tIFRldGh5cyA8dGV0QGlzZW5nYXJkLmV1cm9wZS5kZy5jb20+LiBUaGlzIGZpeGVzIEJ1ZyAjMTM0MDMuCgkKMjAwMC0xMS0xNCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnd2luMzIuaDogTWFrZSAjZW5kaWYgY29tbWVudCBtYXRjaCAjaWZkZWYuCgpNb24gTm92IDEzIDE0OjAwOjIwIDIwMDAgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmluOiBVcCB2ZXJzaW9uIHRvIDEuMy4yCgoJKiBnY29udmVydC5oIChlbnVtIEdDb252ZXJ0RXJyb3IpOiBSZW1vdmUgdHJhaWxpbmcgLAoKCSogZ2ZpbGV1dGlscy5jIChnX2ZpbGVfb3Blbl90bXApOiBGaXggY29tbWVudCB0byAKCXByb3Blcmx5IGRlc2NyaWJlIHJldHVybiB2YWx1ZS4KCjIwMDAtMTEtMTMgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogY29uZmlnLmgud2luMzIuaW46IEFkZCBVU0VfTElCSUNPTlYuCgoJKiBnY29udmVydC5jOiBDaGVjayBHX09TX1dJTjMyIG9ubHkgYWZ0ZXIgaW5jbHVkaW5nIGdsaWIuaC4gCgoJKiBnbGliLmRlZjogVXBkYXRlLgoKMjAwMC0xMS0xMyAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGd0aHJlYWQuYyAoZ19zdGF0aWNfcmVjX211dGV4XyopOiBNYWRlIHJlY3Vyc2l2ZSBtdXRleGVzIGFsc28KCXdvcmsgd2hlbiB0aGUgdGhyZWFkIHN5c3RlbSBpcyBub3QgKHlldCkgaW5pdGlhbGl6ZWQuCgpTdW4gTm92IDEyIDE4OjM0OjMyIDIwMDAgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2NvbnZlcnQuW2NoXTogQ3JlYXRlIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBpY29udigpCglzbyB0aGF0IHdlIGNhbiB0cmFuc3BhcmVudGx5IHVzZSB0aGUgbmF0aXZlIGljb252LCAKCWxpYmljb252LCBvciAoaW4gdGhlIGZ1dHVyZSkgYSBtaW5pLWljb252IGluY2x1ZGVkCgl3aXRoIGdsaWIuCgoJKiBnbGliLWNvbmZpZy0yLjAuaW4gZ2xpYi0yLjAucGMuaW46IEluY2x1ZGUgQElDT05WX0xJQlNACgoJKiBJTlNUQUxMOiBBZGRlZCBub3RlIGFib3V0IGxpYmljb252LgoKCSogY29uZmlndXJlLmluOiBBZGQgY2hlY2tzIGZvciBsaWJpY29udiBmcm9tIHBhbmdvLiBJZgoJRUlMU0VRIGlzIG5vdCBkZWZpbmVkIGluIGVycm5vLmggYWRkIGRlZmluZSBmb3IgaXQgaW50bwoJZ2xpYmNvbmZpZy5oIHNvIGdfaWNvbnYgY2FuIHVzZSBpdC4gKE5vdGUsIHJlY29tcGlsaW5nCglmcm9tIGEgc3lzdGVtIHdpdGhvdXQgRUlMU0VRIHRvIGEgc3lzdGVtIHdpdGggRUlMU0VRCgl3aWxsIGJyZWFrIGJpbmFyeSBjb21wYXRpYmlsaXR5KQoKMjAwMC0xMS0xMiAgUm9iZXJ0IEJyYWR5ICA8cm9iZXJ0QHN1c2UuY28udWs+CgoJKiBnc3RyZnVuY3MuYywgZ3N0cmZ1bmNzLmg6IFJlbW92ZSBnX2ZpbGVuYW1lX3t0byxmcm9tfV91dGY4CgoJKiBnY29udmVydC5jLCBnY29udmVydC5oOiBBZGQgZ19maWxlbmFtZV97dG8sZnJvbX1fdXRmOCBhbmQKCWdfbG9jYWxlX3t0by5mcm9tfV91dGY4LiAgVGhlIGxvY2FsZV8gdmFyaWFudCBob25vdXJzIAoJbmxfbGFuZ2luZm8oQ09ERVNFVCksIHRoZSBmaWxlbmFtZV8gdmFyaWFudCB1c2VzIFVURi04IHVubGVzcwoJYXNrZWQgb3RoZXJ3aXNlLgoKCShnX2NvbnZlcnQpOiBBZGQgR19DT05WRVJUX0VSUk9SX1BBUlRJQUxfSU5QVVQgZXJyb3IsIGlmIGJ5dGVzcmVhZAoJIT0gbGVuZ3RoIGFuZCBubyBieXRlc3JlYWQgcG9pbnRlciBwYXNzZWQuCgpTdW4gTm92IDEyIDE1OjI5OjUzIDIwMDAgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2ZpbGV1dGlscy5bY2hdOiB0ZW1wbGF0ZSBpcyBhIHJlc2VydmVkIHdvcmQgaW4KCUMrKyBzL3RlbXBsYXRlL3RtcGwvLiAKCjIwMDAtMTEtMTEgIEhhdm9jIFBlbm5pbmd0b24gIDxocEBwb2JveC5jb20+CgoJKiBnbWFya3VwLmMgKGdfbWFya3VwX3BhcnNlX2NvbnRleHRfcGFyc2UpOiBIYW5kbGUgYSBsb25nIHN0cmVhbQoJb2YgYnl0ZXMgY29udGFpbmluZyBubyBVVEYtOCBjaGFyYWN0ZXIgc3RhcnRzCgoyMDAwLTExLTExICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdsaWIuZGVmOiBBZGQgbWlzc2luZyBlbnRyeSBwb2ludHMuCgoJKiBnZmlsZXV0aWxzLmMgKGdfbWtzdGVtcCk6IEltcHJvdmUgY2hhbmNlIHRvIGdlbmVyYXRlIHVuaXF1ZQoJbmFtZXMgd2l0aCBsZXNzIGVmZm9ydCBhIGJpdC4KCgkqIGdmaWxldXRpbHMuaDogQWRkIGdfZmlsZV9vcGVuX3RtcCgpIGRlY2xhcmF0aW9uLgoKCSogdGVzdGdsaWIuYzogSW5jbHVkZSA8aW8uaD4gb24gV2luMzIuCgoJKiBtYWtlZmlsZS5taW5ndy5pbjogQ29ycmVjdCB0aGUgd2F5IHRvIGludm9rZSBzdWItbWFrZXMuCgpTdW4gTm92ICA1IDEzOjIwOjU0IDIwMDAgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi1vYmplY3QuaDogQWRkIGd0eXBlbW9kdWxlLmgKCjIwMDAtMTEtMTEgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ2ZpbGV1dGlscy5jIChnX2ZpbGVfb3Blbl90bXApOiBOZXcgZnVuY3Rpb24sIHN1Z2dlc3RlZCBieSBIYXZvYwoJZWFybGllciB0aGlzIG1vbnRoLgoJKGdfbWtzdGVtcCk6IFVzZSBvbmx5IG9uZSBjYXNlIGZvciBsZXR0ZXJzIGluIHRlbXAgZmlsZSBuYW1lLCBhcwoJdGhpcyB3aWxsIGJlIHVzZWQgb24gc3lzdGVtcyB3aXRoIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW1zLgoKCSogdGVzdGdsaWIuYyAobWFpbik6IFRlc3QgZ19ta3N0ZW1wKCkgYW5kIGdfZmlsZV9vcGVuX3RtcCgpLgoKMjAwMC0xMS0wOSAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGd0aHJlYWRwb29sLmM6IERvbid0IHRha2Ugb3RoZXIgdGhyZWFkcyB3aXRoIG90aGVyIHByaW9yaXRpZXMKCWludG8gYWNjb3VudCBhcyBjaGFuZ2luZyB0aGUgcHJpb3JpdHkgaXMgaGlnaGx5Cgl1bnBvcnRhYmxlLiAoQWN0dWFsbHkgdXNpbmcgaXQgYXQgYWxsIGFscmVhZHkgaXMgdW5wb3J0YWJsZSwgYnV0CglldmVuIHNvbWV0aW1lcyB3aGVyZSB0aGF0IHdvcmtzLCBjaGFuZ2luZyBwcmlvcml0eSBpcyBub3QKCXBvc3NpYmxlKS4KCjIwMDAtMTEtMDUgIEhhdm9jIFBlbm5pbmd0b24gIDxocEBwb2JveC5jb20+CgoJKiBnbWFya3VwLmg6IHJlbmFtZSBHX01BUktVUF9GT08gdG8KCUdfTUFSS1VQX0RPX05PVF9VU0VfVEhJU19VTlNVUFBPUlRFRF9GTEFHCgoJKiBnbWFya3VwLmM6IGRvbid0IHN0YXJ0IGRvYyBjb21tZW50cyB3aXRoICJSZXR1cm5zIgoJCjIwMDAtMTEtMDUgIEhhdm9jIFBlbm5pbmd0b24gIDxocEBwb2JveC5jb20+CgoJKiBnbWFya3VwLmM6IGlubGluZSBkb2NzCgkodW5lc2NhcGVfdGV4dCk6IHByb3Blcmx5IGNoZWNrIHN0cnRvdWwgZm9yIGZhaWx1cmUuCgkKCSogZ2Vycm9yLmMgKGdfcHJvcGFnYXRlX2Vycm9yKTogRnJlZSB0aGUgc3JjIGVycm9yIGlmIHRoZSBkZXN0Cglsb2NhdGlvbiBpcyBOVUxMIC0gSSdtIHByZXR0eSBzdXJlIHRoYXQncyB3aGF0IHRoaXMgZnVuY3Rpb24gd2FzIAoJc3VwcG9zZWQgdG8gZG8uCgoyMDAwLTExLTA1ICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcG9ib3guY29tPgoKCSogZ3V0aWxzLmMgKGdfZmluZF9wcm9ncmFtX2luX3BhdGgpOiBjbGVhbnVwIGRvY3MsIHN5bmMgcGFyYW0gCgluYW1lcyB0byB0aG9zZSBpbiB0aGUgaGVhZGVyCgoJKiBnZmlsZXV0aWxzLmMgKGdfbWtzdGVtcCk6IGNsZWFuIHVwIGRvY3MKCgkqIGdzaGVsbC5oOiBzeW5jIHBhcmFtIG5hbWVzIHdpdGggcGFyYW0gbmFtZXMgaW4gLmMgZmlsZQoKCSogZ2ZpbGV1dGlscy5oIChlbnVtIEdGaWxlVGVzdCk6IHJlbW92ZSB0cmFpbGluZyBjb21tYSBmcm9tIGxhc3QKCW1lbWJlciwgY29uZnVzZXMgZ3RrLWRvYwoKCSogZ21hcmt1cC5oOiBzL0dNYXJrdXBFcnJvclR5cGUvR01hcmt1cEVycm9yL2c7IHRvIGZvbGxvdwoJY29udmVudGlvbgoKMjAwMC0xMS0wMiAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdhc3luY3F1ZXVlLmM6IEFkZGVkIGRvY3VtZW50YXRpb24gZm9yIGFzeW5jcm9ub3VzIHF1ZXVlcy4KCgkqIGdzcGF3bi5jOiBJbmNsdWRlIHN5cy9zZWxlY3QuaCAoc29tZSBwbGF0Zm9ybXMgbmVlZCBpdCBmb3IKCXNlbGVjdCkuIAoKCSogZ3NwYXduLmM6IENoYW5nZWQgdW5wb3J0YWJsZSBfX0ZVTkNUSU9OX18gdG8gdGhlIHZlcmJhdGltCglmdW5jdGlvbiBuYW1lLgoKMjAwMC0xMC0zMSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBndXRpbHMuYwoJKiBndXRpbHMuaAoJKiBnZmlsZXV0aWxzLmMKCSogZ2ZpbGV1dGlscy5oOiBBY3R1YWxseSwgZ19ta3N0ZW1wKCkgaXMgYmV0dGVyIHN1aXRlZCBpbiBnZmlsZXV0aWxzLgoKMjAwMC0xMC0zMCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBta3N0ZW1wLgoKCSogZ3V0aWxzLmMgKGdfbWtzdGVtcCk6IE5ldyBmdW5jdGlvbi4gSWYgSEFWRV9NS1NURU1QLCBqdXN0IGNhbGwKCWl0LCBvdGhlcndpc2UgdXNlIGNvZGUgbGlmdGVkIGZyb20gZ2xpYmMuCgoJKiBndXRpbHMuaDogRGVjbGFyZSBpdC4KCgkqIGdsaWIuZGVmOiBIZXJlLCB0b28uIFBsdXMgdHdvIG1pc3NpbmcgZnVuY3Rpb25zLgoKMjAwMC0xMC0zMCAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdjYWNoZS5oLCBnY2FjaGUuYywgZ2hhc2guaCwgZ2hhc2guYywgZ3JlbC5jLCBncmVsLmgsIGd0eXBlcy5oOgoJSW50cm9kdWNlZCBuZXcgZnVuY3Rpb24gdHlwZSBHRXF1YWxGdW5jIHRvIHJldHVybiBUUlVFIGZvciBlcXVhbAoJcGFyYW1zLiBUaGlzIGlzIG5vdyB1c2VkIGluc3RlYWQgb2YgR0NvbXBhcmVGdW5jICh3aGljaCBzaG91bGQKCXdvcmsgYWtpbiB0byBzdHJjbXApIGhlcmUuIFRoaXMga2luZCBvZiBmaXhlcyBCdWcgIzE0NDEyLiBOb3RlCgl0aGF0IHRlY2huaWNhbGx5IEdDb21wYXJlRnVuYyBhbmQgR0VxdWFsRnVuYyBhcmUgc3RpbGwgdGhlIHNhbWUKCXR5cGVzLCBhcyBnaW50ID09IGdib29sZWFuLgoKCSogZ2hhc2guaCwgZ3V0aWxzLmM6IGdfaW50X2VxdWFsIGFuZCBnX2RpcmVjdF9lcXVhbCBub3cgcmV0dXJuCglnYm9vbGVhbiB0byBiZSByZWFsbHkgYmVjb21lIEdFcXVhbEZ1bmMuCgoJKiBnc2Nhbm5lci5jLCB0ZXN0Z2xpYi5jLCB0ZXN0cy9oYXNoLXRlc3QuYzogU29tZSB0aW55IGNoYW5nZXMgdG8KCWZvbGxvdyB0aGUgYWJvdmUgY2hhbmdlLgoKMjAwMC0xMC0yNyAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBtYWtlZmlsZS57bWluZ3csbXNjfS5pbiAoZ2xpYl9PQkpFQ1RTKTogQWRkIGdtYXJrdXAuCgoJKiBnbGliLmRlZjogQWRkIG1pc3NpbmcgZnVuY3Rpb25zLgoKCSogdGVzdHMvbWFrZWZpbGUue21pbmd3LG1zY30uaW4gKFRFU1RTKTogQWRkIG1hcmt1cC10ZXN0LgoKMjAwMC0xMC0yNCAgSGF2b2MgUGVubmluZ3RvbiAgPGhwQHBvYm94LmNvbT4KCgkqIGdtYXJrdXAuaCwgZ21hcmt1cC5jOiBOZXcgbW9kdWxlIHRvIHBhcnNlIGEgc2ltcGxlCgltYXJrdXAgbGFuZ3VhZ2UKCQoJKiBNYWtlZmlsZS5hbTogYWRkIGdtYXJrdXAuaCwgZ21hcmt1cC5jCgoJKiB0ZXN0cy9NYWtlZmlsZS5hbTogYWRkIG1hcmt1cC10ZXN0CgoJKiBnc3RyaW5nLmggKGdfc3RyaW5nX25ld19sZW4pOiBuZXcgZnVuY3Rpb24gdG8gY3JlYXRlIGEgc3RyaW5nCgl3aXRoIGEgbGVuZ3RoCgkoZ19zdHJpbmdfbmV3KTogYXZvaWQgYSBncmF0dWl0b3VzIHJlYWxsb2MKCjIwMDAtMTAtMjYgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogbWFrZWZpbGUue21pbmd3LG1zY30uaW46IENvc21ldGljcy4KCjIwMDAtMTAtMjYgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnc3RyZnVuY3MuYyAoZ19zdHJzcGxpdCk6IFdoZW4gdGhlIHN0cmluZyBpcyBlbmRlZCBieSBhCglkZWxpbWl0ZXIsIHJldHVybiBhbiBleHRyYSBlbXB0eSBzdHJpbmcganVzdCBsaWtlIGZvciBhIGRlbGltaXRlcgoJYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcuIFRoaXMgbWFrZXMgdGhlIGZ1bmN0aW9uIGJlaGF2ZSBtb3JlCgljb25zaXN0ZW50IGFuZCBhbHNvIGZpeGVzIEJ1ZyAjMTUwMjYuCgpUdWUgT2N0IDI0IDIyOjA5OjE0IDIwMDAgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdsaWItb2JqZWN0Lmg6IGFkZGVkIG5ld2x5IGFkZGVkIGdvYmplY3QvIGhlYWRlcnMuCgoJKiBnbWVzYWdlLmM6IHByaW50IGdfbWVzc2FnZSgpIG91dHB1dCB0byBzdGRlcnIgaW5zdGVhZCBvZiBzdGRvdXQuCgoyMDAwLTEwLTIzICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogY29uZmlndXJlLmluOiBVc2Ugb25lID0gaW5zdGVhZCBvZiB0d28sIHdoaWNoIGlzIHBsYWlubHkgd3JvbmcuCgoyMDAwLTEwLTE5ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIG1ha2VmaWxlLm1zYy5pbjogUGFzcyAtREdTUEFXTl9IRUxQRVIgd2hlbiBidWlsZGluZyBpdC4gTGluawoJd2l0aCB1c2VyMzIubGliLgoKCSogZ3NwYXduLXdpbjMyLmMKCSogZ2ZpbGV1dGlscy5jOiBNYWtlIHRoZW0gY29tcGlsZSB3aXRoIHBpY2t5IE1TVkMuCgoJKiBnd2luMzIuaDogTmV3IGZpbGUuIE1vdmUgV2luMzItb25seSBzdHVmZiB0aGF0IGlzbid0IHJlbGF0ZWQgdG8KCUdJT0NoYW5uZWxzIGhlcmUgZnJvbSBnaW9jaGFubmVsLmguCgoJKiBNYWtlZmlsZS5hbTogQWRkIGl0IGhlcmUuCgoJKiBnaW9jaGFubmVsLmg6IE1vdmUgc3R1ZmYgdG8gZ3dpbjMyLmguCgoJKiBnbGliLmg6IE9uIFdpbjMyLCBpbmNsdWRlIGd3aW4zMi5oLgoKTW9uIFNlcCAxMSAxMDowMzoyNCAyMDAwICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIuaCBjb252ZXJ0LmMgKGdfY29udmVydF93aXRoX2ZhbGxiYWNrKTogQ2hhbmdlCglFUlJPUl9PVEhFUiB0byBFUlJPUl9GQUlMRUQsIGFkZCBzb21lIGR1bW15IG1hcmtpbmcgd2l0aCBfKCkuCgoJKiBkb2NzL3JlZmVyZW5jZS9nbGliL2dsaWItc2VjdGlvbnMudHh0Cglkb2NzL3JlZmVyZW5jZS9nbGliL2dsaWItZG9jcy5zZ21sIFVwZGF0ZSBmb3IgZ19jb252ZXJ0LAoJZ191bmljb2RlX3ZhbGlkYXRlLgoKMjAwMC0xMC0xNiAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbGliY29uZmlnLmgud2luMzIuaW46IFJlbW92ZSBhbGxvY2Egc3R1ZmYgZnJvbSBoZXJlLiBnYWxsb2NhLmgKCXRha2VzIGNhcmUgb2YgaXQsIGNvcnJlY3RseS4KCgkqIGdpb3dpbjMyLmMgKHJlYWRlcl90aHJlYWQpOiBTb21lIG1vcmUgZGVidWdnaW5nIG91dHB1dC4KCShnX2lvX2NoYW5uZWxfd2luMzJfcG9sbCk6IFJlbW92ZSB1bnVzZWQgdmFycy4KCgkqIGdmaWxldXRpbHMuYzogQ2hhbmdlcyBmb3IgV2luMzIsIHdpdGggbm8gdW5pc3RkLmggYW5kIG5vCglTX0lTTE5LKCkuCgoJKiBnc3Bhd24td2luMzIuYzogSW1wbGVtZW50YXRpb24gb2YgdGhlIGdfc3B3YW5fKiBmdW5jdGlvbnMgZm9yCglXaW4zMi4gRHVlIHRvIHRoZSBnZW5lcmFsIG5vbi1Vbml4bmVzcyBvZiBXaW4zMiwgbXVjaCBvZiB0aGUKCWZ1bmN0aW9uYWxpdHkgdGhhdCBpcyByZWxhdGl2ZWx5IGNsZWFuIHRvIGltcGxlbWVudCBvbiBVbml4LCBpcwoJaGFyZCB0byBkbyBvbiBXaW4zMi4gV2UgbXVzdCB1c2UgYSBzZXBhcmF0ZSBoZWxwZXIgcHJvZ3JhbSB0bwoJY2hhbmdlIGRpcmVjdG9yeSwgY2xvc2UgZXh0cmEgZmlsZSBkZXNjcmlwdG9ycywgcmVkaXJlY3QgdGhlIHN0ZAoJb25lcywgYXMgbmVlZGVkLCBhbmQgb25seSB0aGVuIHN0YXJ0IHRoZSBjaGlsZCBwcm9jZXNzLiBObyBjaGlsZAoJcHJvY2VzcyBwaWQgY2FuIGJlIHJldHVybmVkLCB1bmZvcnR1bmF0ZWx5LiBPciBpZiB3ZSB1c2VkCglDcmVhdGVQcm9jZXNzIGRpcmVjdGx5LCBpdCBwcm9iYWJseSBjb3VsZC4gKE5vdyB3ZSB1c2UgdGhlIHNwYXdudioKCWZ1bmN0aW9ucyBmcm9tIG1zdmNydC4pCgoJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBnc3Bhd24td2luMzIuYwoKCSogZ2xpYi5kZWY6IEFkZCBuZXcgZW50cnkgcG9pbnRzLgoKCSogZ2xpYi5kZWYKCSogZ2lvd2luMzIuYzogUmVtb3ZlIGdfaW9fY2hhbm5lbF93aW4zMl93YWl0X2Zvcl9jb25kaXRpb24oKSwKCWdfaW9fY2hhbm5lbF93aW4zMl9wb2xsKCkgc3Vic3VtZXMgaXQuCgoJKiBnYmFja3RyYWNlLmg6IEdfQlJFQUtQT0lOVCBmb3IgTVNWQyAob24gdGhlIGl4ODYpLgoKCSogZ3dpbjMyLmMgKGdfd2luMzJfZ2V0bG9jYWxlKTogVXNlICJzcCIgZm9yCglMQU5HX0NST0FUSUFOK1NVQkxBTkdfU0VSQklBTl9MQVRJTi4KCgkqIG1ha2VmaWxlLnttaW5ndyxtc2N9LmluIChnbGliX09CSkVDVFMpOiBBZGQgbmV3IGZpbGVzLgoJQWRkIGdzcGF3bi13aW4zMi1oZWxwZXIuZXhlIHJ1bGUuCgoJKiB0ZXN0cy9tYWtlZmlsZS57bWluZ3csbXNjfS5pbiAoVEVTVFMpOiBBZGQgc2hlbGwtdGVzdCBhbmQKCXNwYXduLXRlc3QuCgoJKiB0ZXN0cy9zcGF3bi10ZXN0LmM6IChydW5fdGVzdHMpOiBPbiBXaW4zMiwgZG9uJ3QgdHJ5IHRvIHJ1bgoJL2Jpbi9zaCwgYnV0IGlwY29uZmlnIChubyBzcGVjaWFsIHNpZ25pZmljYW5jZSBpbiBjaG9vc2luZyB0aGF0LAoJanVzdCBhIHByb2dyYW0gdGhhdCBvdXRwdXRzIHNvbWV0aGluZyB0byBzdGRvdXQpLgoKMjAwMC0xMC0xNSAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KCglSZW1vdmUgbmVlZCBmb3IgYWNjb25maWcuaCwgYW5kIG1pc2MuIGNsZWFudXBzLgoJKiBhY2dsaWIubTQgKEdMSUJfU0laRU9GKTogQWRkICdhdXRvaGVhZGVyJyBjb21tZW50IHRvCglBQ19ERUZJTkVfVU5RVU9URUQuCgkoR0xJQl9CWVRFX0NPTlRFTlRTKTogTGlrZXdpc2UuCgoJKiBjb25maWd1cmUuaW46IEFkZCAnYXV0b2hlYWRlcicgY29tbWVudHMgdG8gYWxsIEFDX0RFRklORSguLi4pCglhbmQgQUNfREVGSU5FX1VOUVVPVEVEKC4uLikgbGluZXMuCglSZXBsYWNlIEFDX01TR19DSEVDS0lORy9BQ19DQUNIRV9WQUwgd2l0aCBBQ19DQUNIRV9DSEVDSy4KCShBTV9QUk9HX0xJQlRPT0wpOiBNb3ZlIGFmdGVyIEFDX1BST0dfQ0MuCgkKCSogYWNjb25maWcuaDogRW1wdHkgb3V0LgoKCSogTWFrZWZpbGUuYW0gKEJVSUxUX0VYVFJBX0RJU1QpOiBOZXcgdmFyaWFibGUuICBMaXN0ICdkaXN0J2FibGUKCWZpbGVzIHRoYXQgYXJlIGNyZWF0ZWQgaW4gdGhlIGJ1aWxkZGlyLgoJKGRpc3QtaG9vayk6IEhhbmRsZSB0aG9zZSBmaWxlcy4KCShsaWJnbGliXzFfM19sYV9TT1VSQ0VTKTogUmVtb3ZlIEBBTExPQ0FALiAgQEFMTE9DQUAgc2hvdWxkIG9ubHkKCWJlIHVzZWQgaW4gYW4gX0xEQUREIG9yIF9MSUJBREQsIHNpbmNlIGl0IGV4cGFuZHMgKGlmIG5lY2Vzc2FyeSkKCXRvICdhbGxvY2EubycuCgoJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoQlVJTFRfRVhUUkFfRElTVCk6IE5ldyB2YXJpYWJsZS4KCShkaXN0LWhvb2spOiBIYW5kbGUgJChCVUlMVF9FWFRSQV9ESVNUKS4KCQoyMDAwLTEwLTEzICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ3JhbmQuYzogQWRkZWQgaW5saW5lIGRvY3VtZW50YXRpb24uIAoKCSogZ3R5cGVzLmgsIGdub2RlLmgsIGd1dGlscy5oOiBSZWFkZGVkIEdGcmVlRnVuYywKCWdfbm9kZV9pbnNlcnRfYWZ0ZXIgYW5kIGdfZmluZF9wcm9ncmFtX2luX3BhdGggcmVzcC4sIHdoaWNoCglteXN0ZXJpb3VzbHkgZGlzYXBwZWFyZWQgZHVyaW5nIHRoZSBnbGliLmggZGlzc2VjdGlvbi4KCjIwMDAtMTAtMTIgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnbGliY29uZmlnLmgud2luMzIuaW46IEFkYXB0ZWQgYWNjb3JkaW5nbHkgdG8gaGVhZGVyIHNlcGFyYXRpb24KCWFuZCBHTElCX0hBVkVfQUxMT0NBX0ggcmVuYW1pbmcuCgoJKiBNYWtlZmlsZS5hbTogQWRkZWQgdGhlIG5ldyBoZWFkZXJzIHRvIGdsaWJpbmNsdWRlX0hFQURFUlMuCgoJKiBnbGliLmg6IEZvcmdvdCB0byBpbmNsdWRlIGdlcnJvci5oLgoKCSogZ2xpYi5oLCBnYWxsb2NhLmgsIGdhcnJheS5oLCBnYXN5bmNxdWV1ZS5oLCBnYmFja3RyYWNlLmgsCglnY2FjaGUuaCwgZ2NvbXBsZXRpb24uaCwgZ2NvbnZlcnQuaCwgZ2RhdGFzZXQuaCwgZ2RhdGUuaCwgZ2hhc2guaCwKCWdob29rLmgsIGdpb2NoYW5uZWwuaCwgZ2xpc3QuaCAsIGdtYWNyb3MuaCwgZ21haW4uaCwgZ21lbS5oLAoJZ21lc3NhZ2VzLmgsIGdub2RlLmgsIGdwcmltZXMuaCwgZ3F1YXJrLmgsIGdxdWV1ZS5oLCBncmFuZC5oLAoJZ3JlbC5oLCBnc2Nhbm5lci5oLCBnc2xpc3QuaCwgZ3N0cmZ1bmNzLmgsIGdzdHJpbmcuaCwgZ3RocmVhZC5oLAoJZ3RocmVhZHBvb2wuaCwgZ3RpbWVyLmgsIGd0cmVlLmgsIGd0eXBlcy5oLCBndXRpbHMuaDogU3BsaXQgZ2xpYi5oCglpbnRvIG1hbnkgaGVhZGVyIGZpbGVzIG1vc3RseSBhY2NvcmRpbmcgdG8gdGhlIHJlc3AuICouYy1maWxlcy4KCQoJKiBnbWFjcm9zLmg6IEFkZGVkIEdfQkVHSU5fREVDTFMgYW5kIEdfRU5EX0RFQ0xTIHRvIG1lYW46ICdpbiBjYXNlCglvZiBDKys6IGV4dGVybiAiQyIgeyAuLi4gfScgYW5hbG9nb3VzIHRvIGdsaWJjIF9fQkVHSU5fREVDTFMgYW5kCglfX0VORF9ERUNMUy4KCgkqIGNvbmZpZ3VyZS5pbiwgZ2Vycm9yLmgsIGdmaWxldXRpbHMuaCwgZ3NoZWxsLmgsIGdzcGF3bi5oLAoJZ3VuaWNvZGUuaCwgOiBDaGFuZ2VkIGd1YXJkLW1hY3JvIG5hbWVzIHRvIHNvbWV0aGluZyBtb3JlCgljb25zaXN0ZW50LgoKCSogY29uZmlndXJlLmluLCAqLmg6IFVzZSBHX0JFR0lOX0RFQ0xTIGFuZCBHX0VORF9ERUNMUy4KCgkqIGNvbmZpZ3VyZS5pbjogRGVmaW5lZCBHTElCX0hBVkVfQUxMT0NBX0ggaW5zdGVhZCBvZiBpbmNsdWRpbmcKCWFsbG9jYS5oIGluIGdsaWJjb25maWcuaCwgR0xJQl9IQVZFX0FMTE9DQV9IIGlzIHVzZWQgaW4gZ2xpYi5oLgoKCSogY29uZmlndXJlLmluOiBSZW1vdmVkIGNydWZ0IGZyb20gb2xkIHRocmVhZGluZyBjb2RlLgoKMjAwMC0xMC0wOSAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KCglXb3JrIHdpdGggYmV0YSBhdXRvY29uZiAyLjUwLgoJKiBjb25maWd1cmUuaW4gKEdMSUJfTUFKT1JfVkVSU0lPTik6IFVzZSBHTElCX0RJVkVSVF9CRUZPUkVfSEVMUAoJaW5zdGVhZCBvZiBBQ19ESVZFUlRfUFVTSCgpLEFDX0RJVkVSVF9QT1AuCgkoQUNfQ0hFQ0tfSEVBREVSUyk6IFJlbW92ZSByZWR1bmRhbnQgQUNfREVGSU5FKEhBVkVfLi4uKS4KCShSRUFMTE9DXzBfV09SS1MpOiBNb3ZlIEFDX0RFRklORSBvdXRzaWRlIEFDX0NBQ0hFX1ZBTC4KCShkbG9wZW4pOiBRdW90ZSBuZXN0ZWQgQUNfQ0hFQ0tfLi4uIGNhbGxzLgoKCSogYWNnbGliLm00IChHTElCX1RSX1NILCBHTElCX1RSX0NQUCk6IFV0aWxpdHkgbWFjcm9zIGNvcGllZCBmcm9tCgliZXRhIGF1dG9jb25mIDIuNTAuCgkoR0xJQl9ESVZFUlRfQkVGT1JFX0hFTFApOiBOZXcgbWFjcm8gdGhhdCB3b3JrcyBib3RoIHdpdGggYXV0b2NvbmYKCTIuMTMgYW5kIGJldGEgYXV0b2NvbmYgMi41MC4KCShHTElCX1NJWkVPRiwgR0xJQl9CWVRFQ09OVEVOVFMpOiBVc2UgR0xJQl9UUl8qLgoKCSogTWFrZWZpbGUuYW0gKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpOiBVc2UgdGhpcyB0byBzcGVjaWZ5Cgl0aGF0ICdjb25maWd1cmUnIGRlcGVuZHMgb24gYWNnbGliLm00LgoKMjAwMC0xMC0wOSAgSGF2b2MgUGVubmluZ3RvbiAgPGhwQHJlZGhhdC5jb20+CgoJKiBNYWtlZmlsZS5hbSwgdGVzdHMvTWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMuCgoJKiB0ZXN0cy9zcGF3bi10ZXN0LmMsIHRlc3RzL3NoZWxsLXRlc3QuYzogbmV3IHRlc3RzIGZvcgoJdGhlIHNoZWxsL3NwYXduIHN0dWZmCgoJKiBndXRpbHMuYyAoZ19maW5kX3Byb2dyYW1faW5fcGF0aCk6IGNvbnZlcnQgYSByZWxhdGl2ZQoJcHJvZ3JhbSBuYW1lIGludG8gYW4gYWJzb2x1dGUgcGF0aG5hbWUgdG8gYW4gZXhpc3RpbmcgCglleGVjdXRhYmxlCgoJKiBnc3Bhd24uaCwgZ3NwYXduLmM6IE5ldyBmb3JrL2V4ZWMgQVBJCgoJKiBnc2hlbGwuaCwgZ3NoZWxsLmM6IFNoZWxsLXJlbGF0ZWQgdXRpbGl0aWVzLCBhdCB0aGUgbW9tZW50CglzaW1wbHkgcm91dGluZXMgdG8gcGFyc2UgYXJndiBhbmQgcXVvdGUvdW5xdW90ZSBzdHJpbmdzCgoJKiBndW5pcHJvcC5jIChnX3VuaWNoYXJfaXNzcGFjZSk6IFJldHVybiBUUlVFIGZvciB0aGUgCglBU0NJSSBzcGFjZSBjaGFyYWN0ZXJzIGlzc3BhY2UoKSByZXR1cm5zIFRSVUUgZm9yLgoKCSogZ2ZpbGV1dGlscy5jIChnX2ZpbGVfZ2V0X2NvbnRlbnRzKTogQ29udmVuaWVuY2UgZnVuY3Rpb24gCgl0byBzbHVycCBlbnRpcmUgZmlsZSBpbnRvIGEgc3RyaW5nIGFuZCByZXR1cm4gaXQuIFBhcnRpYWxseQoJd3JpdHRlbiBieSBKb2VsIEJlY2tlci4KCShnX2ZpbGVfdGVzdCk6IGZpbGUgdGVzdCBmdW5jdGlvbgoKMjAwMC0xMC0wNiAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBtYWtlZmlsZS5tc2MuaW46IFJldmFtcCB0byBiZSBsaWtlIG1ha2VmaWxlLm1pbmd3LmluLCBtYWtlCgl0aGUgTVNWQyBidWlsZCBhY3R1YWxseSB3b3JrIGFnYWluLgoKCSogZ21vZHVsZS9tYWtlZmlsZS5tc2MuaW4KCSogZ29iamVjdC9tYWtlZmlsZS5tc2MuaW4KCSogZ3RocmVhZC9tYWtlZmlsZS5tc2MuaW46IE5ldyBmaWxlcywgbGlrZSB0aGVpciBtaW5ndyBjb3VudGVycGFydHMuCgoJKiBnbW9kdWxlL01ha2VmaWxlLmFtCgkqIGdvYmplY3QvTWFrZWZpbGUuYW0KCSogZ3RocmVhZC9NYWtlZmlsZS5hbTogTWFrZSBhbmQgZGlzdHJpYnV0ZSB0aGVtLgoKCSogKi9tYWtlZmlsZS5taW5ndy5pbjogQWxsb3cgb3ZlcnJpZGUgb2YgR0xpYiB2ZXJzaW9uIG51bWJlciBmcm9tCgl0aGUgYnVpbGQvd2luMzIvbW9kdWxlLmRlZnMgZmlsZS4KCgkqIGdsaWIuZGVmOiBBZGQgbmV3IGVudHJ5IHBvaW50LgoKCSogdGVzdHMvZ2lvLXRlc3QuYyAobWFpbik6IEZpeCB0aGUgV2luMzItb25seSBjb2RlIHRvIHVzZSBjdXJyZW50CglBUEksIGdfaW9fY2hhbm5lbF93aW4zMl9tYWtlX3BvbGxmZCgpIGFuZCBnX2lvX2NoYW5uZWxfd2luMzJfcG9sbCgpLgoKCUZpeGVzIGZyb20gSGFucyBCcmV1ZXI6CgoJKiBnbGliLmggKHN0cnVjdCBESVIpOiBLZWVwIHRoZSBsYXN0IHJlYWRkaXIgcmVzdWx0IGNhY2hlZCBpbnNpZGUKCXRoZSBESVIgc3RydWN0LCB0byBlbmFibGUgc2V2ZXJhbCBESVJzIGJlaW5nIG9wZW4gc2ltdWx0YW5lb3VzbHkuCgoJKiBnd2luMzIuYyAoZ193aW4zMl9yZWFkZGlyKTogVXNlIHRoZSBhYm92ZSBpbnN0ZWFkIG9mIHN0YXRpYy4KCgkqIGdpb3dpbjMyLmMgKGdfaW9fY2hhbm5lbF93aW4zMl9tYWtlX3BvbGxmZCk6IEluc2VydCBjYXN0IHRvIGtlZXAKCU1TVkMgaGFwcHkuCgoyMDAwLTEwLTA1ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ2xpYi5oOiBDaGFuZ2VkIGFsbG9jYSBzdHVmZiBhIGJpdDogd2hlbiB3ZSBoYXZlIGEgd29ya2luZwoJYWxsb2NhLmgsIHdlJ3JlIG5vdCBtZXNzaW5nIHdpdGggYWxsb2NhIGFueSBmdXJ0aGVyLiBTaG91bGQgZml4IGEKCWJ1ZyByZXBvcnRlZCBieSBCZXJuZCBEZW1pYW4gPHdlZ2FAY3NjLWRkLmRlPi4KCjIwMDAtMDktMjkgIEpvbmF0aGFuIEJsYW5kZm9yZCAgPGpyYkByZWRoYXQuY29tPgoKCSogZ25vZGUuYyAoZ19ub2RlX2luc2VydF9hZnRlcik6IEFkZGVkIGZ1bmN0aW9uIHRvIGtlZXAgc3ltbWV0cnkKCXdpdGggZ19ub2RlX2luc2VydF9iZWZvcmUuIAoKMjAwMC0wOS0yOSAgTWFydGluIEJhdWxpZyAgPGJhdWxpZ0BzdXNlLmRlPgoKCVNldmVyYWwgbWlub3IgQU5TSSBDIGZpeGVzLgoKCUFkZGVkIG1pc3NpbmcgY2FzdHM6CgkqIGdkYXRlLmMgKGdfZGF0ZV9maWxsX3BhcnNlX3Rva2Vucyk6IGBzID0gKGd1Y2hhciAqKSBzdHInLgoJKiBnbWFpbi5jIChnX2lkbGVfZGlzcGF0Y2gpOiBgZnVuYyA9IChHU291cmNlRnVuYykgc291cmNlX2RhdGEnLgoJKGdfaWRsZV9hZGRfZnVsbCk6IGAoZ3BvaW50ZXIpIGZ1bmN0aW9uJyBpbiBjYWxsIHRvIGdfc291cmNlX2FkZCgpLgoJKiBnc3RyZnVuY3MuYyAoZ19zdHJkb3duKTogYHMgPSAoZ3VjaGFyICopIHN0cmluZycgYW5kCglgcmV0dXJuIChnY2hhciAqKSBzdHJpbmcnLgoJKGdfc3RydXApOiBMaWtld2lzZS4KCShnX3N0cmNodWcpOiBgc3RhcnQgPSAoZ3VjaGFyKikgc3RyaW5nJyBpbiAxc3QgZm9yKCkgYXJndW1lbnQ7Cglgc3RybGVuICgoZ2NoYXIgKikgc3RhcnQpJyBpbiBjYWxsIHRvIGdfbWVtbW92ZSgpLgoJKiBnc3RyaW5nLmMgKGdfc3RyaW5nX2Rvd24pOiBgcyA9IChndWNoYXIgKikgc3RyaW5nLT5zdHInLgoJKGdfc3RyaW5nX3VwKTogTGlrZXdpc2UuCgkqIGd0aHJlYWRwb29sLmMgKHN0b3BfdGhpc190aHJlYWRfbWFya2VyKToKCWAoZ3BvaW50ZXIpICZnX3RocmVhZF9wb29sX25ldycuCgkqIGd1bmlkZWNvbXAuaCAoZGVjb21wX3RhYmxlW10pOiBDYXN0IGFsbCB0aGUgc3RyaW5ncyB0bwoJYHVuc2lnbmVkIGNoYXIgKicuCgoJUHV0IHRleHQgZm9sbG93aW5nICNlbmRpZiBpbnRvIGNvbW1lbnRzOgoJKiBnbWFpbi5jOiBoZXJlLgoKMjAwMC0wOS0yOSAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGNvbmZpZ3VyZS5pbiwgZ2xpYi5oOiBBZGRlZCBlcnJvcmNoZWNrIG11dGV4ZXMuIFRoZXNlIGFyZQoJYWN0aXZhdGVkIHRocm91Z2ggdGhlIHByZXByb2Nlc3NvciBzeW1ib2wKCUdfRVJST1JDSEVDS19NVVRFWEVTLiBOZWVkIHRvIGFkZCBhbiBleHRyYSB3b3JkIHRvIFN0YXRpY011dGV4IGluCglvcmRlciB0byBhY2hpZXZlIHRoaXMuIGdfKHN0YXRpY18pbXV0ZXhfKiBmdW5jdGlvbnMgaW5zdHJ1bWVudCB0aGUKCW11dGV4IG9wZXJhdGlvbnMgd2l0aCBtdXRleCBuYW1lIGFuZCBsb2NhdGlvbiwgd2hlbiBjb21waWxlZCB3aXRoCgktREdfRVJST1JDSEVDS19NVVRFWEVTLiBnX3RocmVhZF9pbml0IGFjdGl2YXRlcyB0aGUgZXJyb3JjaGVjawoJbXV0ZXhlcywgd2hlbiBjb21waWxlZCB3aXRoIC1ER19FUlJPUkNIRUNLX01VVEVYRVMuCgoyMDAwLTA5LTI4ICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcG9ib3guY29tPgoKCSogZ2xpYi5oIChHVGhyZWFkUHJpb3JpdHkpOiBmaXggaW5kZW50YXRpb24KCShHQ29udmVydEVycm9yKTogZ2VuZXJpYyBlcnJvciBpcyBjb252ZW50aW9uYWxseSBjYWxsZWQKCV9GQUlMRUQgcmF0aGVyIHRoYW4gX09USEVSLCBhdCBsZWFzdCBhdCB0aGUgbW9tZW50LCAKCWFjY29yZGluZyB0byBHRXJyb3IgZG9jcyBpbiBkb2NzL3JlZmVyZW5jZS4KCgkqIGdjb252ZXJ0LmM6IHMvX09USEVSL19GQUlMRUQvCgoyMDAwLTA5LTI4ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogY29uZmlndXJlLmluOiBBZGp1c3RlZCB0aGUgdGVzdCBmb3IgYW4gdW5pbXBsZW1lbnRlZAoJIGdldHB3dWlkX3IuIEluZm8gZnJvbSBNaWNoYWVsIFBydWV0dC4gVGhpcyBpcyBqdXN0IGEgZm9yd2FyZAoJIG1lcmdlIGZyb20gZ2xpYi0xLTIuCgoJKiBjb25maWd1cmUuaW46IE1vdmVkIGRldGVybWluYXRpb24gb2YgR19USFJFQURfRkxBR1MgYmVmb3JlCglHX1RIUkVBRF9MSUJTLiBDaGVjayBmb3IgVW5peFdhcmUgc3lzdGVtcyBhbmQgc2V0IHRoZSByaWdodCBjZmxhZ3MKCWFuZCBsaWJzIHRoZXJlIChpdCBuZWVkcyAtS3RocmVhZCBmb3IgdGhlIG5hdGl2ZSBjb21waWxlciBhbmQKCS1wdGhyZWFkIGZvciBnY2MpLiBUaGFua3MgdG8gQm95ZCBMeW5uIEdlcmJlciA8Z2VyYmVyYkB6ZW5lei5jb20+Cglmb3IgdGhlIGluZm8uCgoJKiBjb25maWd1cmUuaW46IEZhaWwgaW1tZWRpYXRlbHksIHdoZW4gbm8gdGhyZWFkIGxpYnJhcnkgaXMgZm91bmQsCglpbnN0ZWFkIG9mIGNvbnRpbnVpbmcgc2VhcmNoaW5nIGZvciBydCBsaWJzIGV0Yy4gQ2hhbmdlZCBhbG1vc3QKCWFsbCBvY2N1cmFuY2VzIG9mICRlbmFibGVfdGhyZWFkcyB0byAkaGF2ZV90aHJlYWRzLCBhcyB0aGF0J3MsCgl3aGF0IHdlIHdhbnQuCgoJKiB0ZXN0cy90aHJlYWRwb29sLXRlc3QuYzogRGVmaW5lIHZhcnMgaW5zaWRlIHRoZSBndWFyZCB0byBhdm9pZAoJd2FybmluZ3MuCgoJKiBjb25maWd1cmUuaW4sIHRlc3RzL3R5cGUtdGVzdC5jOiBTb21lIHBsYXRmb3JtcyBzdXBwb3J0IDY0IGJpdAoJJ2xvbmcgbG9uZycsIGJ1dCB5b3UgY2FuIG5vdCBwcmludGYgb3Igc2NhbmYgdGhlbS4gSW4gdGhhdCBjYXNlLAoJZG9uJ3QgZGVmaW5lIEdfR3tVSU5UfElOVH02NF9GT1JNQVQuIENoYW5nZWQgdGhlIHR5cGUtdGVzdCBwcm9ncmFtCgl0byByZWZsZWN0IHRoYXQuCgoJKiBndXRpbHMuYyAoZ19nZXRfY3VycmVudF9kaXIpOiBtYXhfbGVuIGNhbid0IGJlIGluaXRpYWxpemVkCglzdGF0aWNhbGx5IGFzIGl0IG1pZ2h0IGNhbGwgYSBmdW5jdGlvbi4gU28gZG8gaXQgYXQgZmlyc3QgY2FsbC4KClR1ZSBTZXAgMjYgMjAwMCBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+CgoJKiBnbGliLmg6IEFkZCBHX0dOVUNfUFVSRSBtYWNybyAoYnV0IGRvbid0IHVzZSBpdCBhbnl3aGVyZSkuCgpNb24gU2VwIDI1IDIwMDAgRWxsaW90IExlZSA8c29wd2l0aEByZWRoYXQuY29tPgoKCSogZ2FycmF5LmMsIGdsaWIuaCwgZ21lbS5jOiBBZGQgYSBmZXcgbWlzc2luZyBHX0dOVUNfQ09OU1Qncy4KCjIwMDAtMDktMjEgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogbWFrZWZpbGUubWluZ3cuaW46IEFkZCBnY29udmVydC5vLiBVc2UgbGliaWNvbnYuCgoJKiBjb25maWcuaC53aW4zMi5pbjogRGVmaW5lIEhBVkVfR0VUQ1dELgoKCSogZ2xpYi5kZWY6IEFkZCBuZXcgZW50cnkgcG9pbnRzLgoKMjAwMC0wOS0yMSAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogVGhlIGxhc3QgcmVsZWFzZWQgYXV0b21ha2UgKDEuNCkgc3RpbGwgcmVxdWlyZXMKCUFNX1BST0dfTElCVE9PTCBpbnN0ZWFkIG9mIEFDX1BST0dfTElCVE9PTCwgc28gdXNlIHRoYXQgZm9yIHRoZQoJdGltZSBiZWluZy4KCjIwMDAtMDktMTkgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBhY2NvbmZpZy5oLCBjb25maWd1cmUuaW4sIGd1dGlscy5jOiBUZXN0IGZvciB0aGUgZXhpc3RlbmNlIG9mCglnZXRjd2QsIGFuZCB1c2UgaXQgb25seSB3aGVuIGZvdW5kLgoKCSogZ2xpYi5oOiBPbmx5IHVzZSB0aGUgZ2NjLXZhcmlhYmxlLW1hY3JvLWFyZ3VtZW50LWV4dGVuc2lvbiBmb3IKCWdjYyA+PSAyLjQuIEJvdGggcGF0Y2hlcyBmcm9tIEpvbmFzIE9iZXJnIDxqb25hc0BnbnUub3JnPi4KCk1vbiBTZXAgMTggMTA6NTg6MjEgMjAwMCAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBndXRmOC5jOiBJbXBsZW1lbnQgZ191Y3M0X3RvX3V0Zjggd2hpY2ggd2FzIGluCgl0aGUgaGVhZGVyIGZpbGUgYnV0IG5vdCBpbXBsZW1lbnRlZC4KClN1biBTZXAgMTcgMjAwMCBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+CgoJKiBnbGliLmggY29uZmlndXJlLmluOiBEZWZpbmUgZ19hbGxvY2EoKSBhcyBhbgoJYWxsb2NhLXRoYXQtd29ya3MtYW55d2hlcmUuCgoJKiBnY29udmVydC5jOiBGaXggd2FybmluZ3Mgd2hpY2ggY291bGQgaGF2ZSBjYXVzZWQgcHJvYmxlbXMgb24KCTY0LWJpdCBwbGF0Zm9ybXMuCgpTdW4gU2VwIDEwIDEyOjM3OjQwIDIwMDAgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi5oIGdjb252ZXJ0LmMgKGdfY29udmVydCk6IEhhdm9jIFBlbm5pbmd0b24ncyBpbXBsZW1lbnRhdGlvbiAKCW9mIGNvbnZlbmllbnQgY2hhcmFjdGVyIHNldCBjb252ZXJzaW9uIHVzaW5nIGljb252LCB3aXRoCgl0aGUgYWRkaXRpb24gb2YgR0Vycm9yLiBXZSBwcm9iYWJseSBuZWVkIGEgZmFsbGJhY2sgdGhhdAoJanVzdCBkb2VzIGNvbnZlcnNpb25zIGJldHdlZW4sIHNheSBVVEYtOCwxNiwzMiBhbmQgSVNPLTg4NTktMQoJZm9yIHRhcmdldHMgd2l0aG91dCBpY29udiBhdCBhbGwuCgoJQWxzbyBhZGQgZ19jb252ZXJ0X3dpdGhfZmFsbGJhY2soKSB0byB0YWtlIGNhcmUgb2YgY29udmVyc2lvbnMgCgl3aGVyZSB3ZSBhY2NlcHQgc29tZSBsb3NzIGdvaW5nIHRvIHRoZSB0YXJnZXQgZW5jb2RpbmcuCgoyMDAwLTA5LTEwICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcmVkaGF0LmNvbT4KCgkqIGd1dGY4LmMgKGdfdXRmOF92YWxpZGF0ZSk6IEFkZCB0aGlzIGZ1bmN0aW9uLgoKU2F0IFNlcCAgOSAxODo1MDo0MiAyMDAwICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdzdHJmdW5jcy5jIChnX3N0cmVzY2FwZSk6IEFkZCBhIG1pc3NpbmcgZ19yZXR1cm5faWZfZmFpbCgpLgoKTW9uIEF1ZyAyMSAwMzo1Nzo0NiAyMDAwICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbGliLmggKEdfQlJFQUtQT0lOVCk6IGZvciBub24taTM4NiBhbmQgbm9uLWFscGhhLCBvciBub24gZ2NjLAoJaW1wbGVtZW50IEJSRUFLUE9JTlQoKSBhcyByYWlzZSAoNSAvKiBTSUdUUkFQICovKTsKCgkqIGdsaWIuaDogcHJvdmlkZSB1c2VyLWRlZmluYWJsZSBzd2l0Y2ggR19JTVBMRU1FTlRfSU5MSU5FUywKCXRvIHR1cm4gb24gY29tcGlsYXRpb24gb2YgaW5saW5lIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyBwcm92aWRlZAoJaW4gaGVhZGVyIGZpbGVzIHdpdGggZXh0ZXJuIGxpbmthZ2UuCgl3cmFwIGlubGluZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgaW50byBpZmRlZiBfX0dfVVRJTFNfQ19fLCBzbyB3ZQoJcmVhbGx5IG9ubHkgY29tcGlsZSB0aGVtIGZvciBndXRpbHMuYyBhbmQgbm90IGFsc28gaW50byBhcmJpdHJhcnkgdXNlcgoJY29kZSB0aGF0IHdhbnRzIHRvIG1ha2UgdXNlIG9mIEdfSU1QTEVNRU5UX0lOTElORVMuCglhZGp1c3RlZCBjb21tZW50IGFwcm9wcmlhdGVseS4KCgkqIGd1dGlscy5jOiB0byB0dXJuIG9uIGNvbXBpbGF0aW9uIG9mIGlubGluZSBmdW5jdGlvbnMsIHByb3ZpZGUKCSNkZWZpbmUgR19JTVBMRU1FTlRfSU5MSU5FUyAxIGFuZCAjZGVmaW5lIF9fR19VVElMU19DX18uCgoyMDAwLTA5LTA2ICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcmVkaGF0LmNvbT4KCgkqIGdlcnJvci5jOiBkb2NzCgoJKiBkb2NzL3JlZmVyZW5jZS9nbGliL3RtcGwvZXJyb3JfcmVwb3J0aW5nLnNnbWw6IGRvY3MKCldlZCBTZXAgIDYgMTA6Mjg6MzQgMjAwMCAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBndW5pcHJvcC5jIGd1bmljb2RlLmggZ3V0ZjguYzogU29tZSBpbmxpbmUgZG9jcyBmaXhlcy4KCjIwMDAtMDktMDYgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnbGliLmgsIGd0aW1lci5jLCB0ZXN0cy90aHJlYWQtdGVzdC5jOgoJcy9HX01JQ1JPU0VDL0dfVVNFQ19QRVJfU0VDLwoKCSogZ2xpYi5oOiBSZW1vdmVkIEdfR3tVfXtTSE9SVHxJTlR8TE9OR31fRk9STUFUIGZyb20gZ2xpYi5oLCBhcwoJdGhleSBhcmUgcmVhbGx5IHN1cGVyZmx1b3VzLgoKVHVlIFNlcCAgNSAyMDoxNjoyNyAyMDAwICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBkb2NzL01ha2VmaWxlLmFtOiBBZGQgZ3RrLWRvYyBjaGVja3MKCWZvciBuZXdseSBhZGRlZCBkb2NzL3JlZmVyZW5jZS8gc3ViZGlyLgoKMjAwMC0wOS0wNSAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGd0aHJlYWQuYyAoZ190aHJlYWRfZXJyb3JfcXVhcmspOiBEb24ndCB1c2UgYSBHX0xPQ0ssIGFzIGl0Cglpc24ndCBuZWNlc3NhcnkuCgoyMDAwLTA5LTAxICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ3N0cmluZy5jIChnX3N0cmluZ19mcmVlKTogVXNlIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIGluc3RlYWQgb2YKCWdfcmV0dXJuX2lmX2ZhaWwsIGFzIHRoZSBmdW5jdGlvbiBub3cgaXMgc3VwcG9zZWQgdG8gcmV0dXJuCglzb21ldGhpbmcuCgoJKiBnZXJyb3IuYywgZ2Vycm9yLmggKGdfcHJvcGFndGVfZXJyb3IpOiBBZGRlZCBmdW5jdGlvbgoJZ19wcm9wYWd0ZV9lcnJvciB0byBoYW5kIG92ZXIgbG9jYWwgZXJyb3JzIHRvIHRoZSBjYWxsaW5nCglmdW5jdGlvbi4KCgkqIGdsaWIuaDogSW5jbHVkZSBnZXJyb3IuaCBiZWZvcmUgaXQgaXMgdXNlZCBmb3Igc29tZSBnX3RocmVhZF8qCglmdW5jdGlvbnMuCgoJKiBndGhyZWFkLmMsIGd0aHJlYWRwb29sLmMsIGdsaWIuaDogRW5hYmxlIGVycm9yIHJlcG9ydGluZyBmb3IKCXRocmVhZCBjcmVhdGlvbiwgbmFtZWx5IGZvciBnX3RocmVhZF9jcmVhdGUsIGdfdGhyZWFkX3Bvb2xfbmV3LAoJZ190aHJlYWRfcG9vbF9wdXNoIGFuZCBnX3RocmVhZF9wb29sX3NldF9tYXhfdGhyZWFkcy4KCgkqIHRlc3RzL3RocmVhZC10ZXN0LmMsIHRlc3RzL3RocmVhZHBvb2wtdGVzdC5jOiBBZGFwdGVkCglhY2NvcmRpbmdseS4KCjIwMDAtMDgtMzEgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ2xpYi5oCgkqIGdsaWIuZGVmCgkqIGdpb3dpbjMyLmMgKGdfaW9fY2hhbm5lbF93aW4zMl9tYWtlX3BvbGxmZCk6IE5ldyBmdW5jdGlvbiwgdG8KCW1ha2UgYSBHUG9sbEZEIGZyb20gYSBHSU9DaGFubmVsLiBDcmVhdGVzIHRoZSBldmVudHMgYW5kIHN0YXJ0cwoJdGhlIHJlYWRlciB0aHJlYWQgaWYgbmVjZXNzYXJ5LgoKCSogZ2xpYi5oCgkqIGdpb3dpbjMyLmMgKGdfaW9fY2hhbm5lbF93aW4zMl9wb2xsKTogTm8gdXNlIGZvciBzZXBhcmF0ZQoJY29uZGl0aW9uIHBhcmFtZXRlci4KCgkqIGdtYWluLmMgKGdfZ2V0X2N1cnJlbnRfdGltZSk6IChXaW4zMik6IFNpbXBsaWZ5LCB1c2UKCUdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCkuCgoyMDAwLTA4LTI3ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdpb3dpbjMyLmMgKGdfaW9fY2hhbm5lbF93aW4zMl9wb2xsKTogTmV3IGZ1bmN0aW9uLCBvdGhlcndpc2UKCWxpa2UgZ19pb19jaGFubmVsX3dpbjMyX3dhaXRfZm9yX2NvbmRpdGlvbigpLCBidXQgYWNjZXB0IHNldmVyYWwKCUdQb2xsRkRzLgoJKGdfaW9fY2hhbm5lbF93aW4zMl93YWl0X2Zvcl9jb25kaXRpb24pOiBDYWxsCglnX2lvX2NoYW5uZWxfd2luMzJfcG9sbCgpLgoKCSogZ2xpYi5oOiBEZWNsYXJlIGdfaW9fY2hhbm5lbF93aW4zMl9wb2xsKCkuCgoJKiBnd2luMzIuYyAoZ193aW4zMl9lcnJvcl9tZXNzYWdlKTogRG9uJ3QgYmVsaWV2ZSByZXR1cm4gdmFsdWUKCWZyb20gRm9ybWF0TWVzc2FnZS4KCjIwMDAtMDgtMjUgRWxsaW90IExlZSA8c29wd2l0aEByZWRoYXQuY29tPgoKCSogZ2xpYi5oLCBndW5pY29kZS5oLCBnbW9kdWxlL2dtb2R1bGUuaDoKCU1hcmsgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgR19HTlVDX0NPTlNUICh0byBhbGxvdyBvcHRpbWl6YXRpb24pCgliZWNhdXNlIHRoZWlyIHJlc3VsdHMgYXJlIGEgZnVuY3Rpb24gb2Ygb25seSB0aGVpciBwYXJhbWV0ZXJzOiAKCWdfaW50X2hhc2gsIGdfaW50X2VxdWFsLCBnX2RpcmVjdF9oYXNoLCBnX2RpcmVjdF9lcXVhbCwKCWdfcXVhcmtfdG9fc3RyaW5nLCBnX2RhdGVfaXNfbGVhcF95ZWFyLCBnX2RhdGVfZGF5c19pbl9tb250aCwKCWdfZGF0ZV9tb25kYXlfd2Vla3NfaW5feWVhciwgZ19kYXRlX3N1bmRheV93ZWVrc19pbl95ZWFyLAoJZ19zcGFjZWRfcHJpbWVzX2Nsb3Nlc3QsIGdfdW5pY2hhcl9pcyosIGdfdW5pY2hhcl90byosCglnX3VuaWNoYXJfKmRpZ2l0X3ZhbHVlLCBnX3VuaWNoYXJfdHlwZQoKMjAwMC0wOC0yMSBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+CgoJKiBnb2JqZWN0L01ha2VmaWxlLmFtLCBnb2JqZWN0L2dvYmplY3QtcXVlcnkuYywKCWdvYmplY3QvZ3BhcmFtc3BlY3MuYzogRml4IGluY2x1c2lvbiBvZiBjb25maWcuaAoKTW9uIEF1ZyAyMSAxNDo0NjoyMyAyMDAwICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIHRlc3RzL2dpby10ZXN0LmM6IEZpeCBhIGNvdXBsZSBvZiB0cml2aWFsIGJ1Z3MgdGhhdAoJd2VyZSBjYXVzaW5nIHdhcm5pbmdzLgoKTW9uIEF1ZyAyMSAxNDozOTozNiAyMDAwICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIuaDogVXNlIEM5OSB2YXJhcmdzIG1hY3JvcyB3aGVyZSBwb3NzaWJsZSAKCShjaGVjayBfX1NURENfVkVSU0lPTl9fKSwgb3RoZXJ3aXNlLCBvbiBnY2MsIHVzZSBhbiBhbHRlcm5hdGUgCglmb3JtIG9mIGdjYyB2YXJhcmdzIHdoaWNoIGlzIG1vcmUgbGlrZWx5Cgl0byBiZSBzdXBwb3J0ZWQgZ29pbmcgZm9yd2FyZC4gKEJhc2VkIG9uIHNvbWUgY29kZQoJZnJvbSBSYWphIEhhcmluYXRoKQoKMjAwMC0wOC0xNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBlYXplbC5jb20+CgoJKiBnbGliLmg6CgkqIGdhcnJheS5jOiAoZ19hcnJheV9mcmVlKSwgKGdfcHRyX2FycmF5X2ZyZWUpLAoJKGdfYnl0ZV9hcnJheV9mcmVlKTogUmV0dXJuIHRoZSBkYXRhIGxlZnQgYmVoaW5kLgoJKiBnc3RyaW5nLmM6IChnX3N0cmluZ19mcmVlKTogUmV0dXJuIHRoZSBkYXRhIGxlZnQgYmVoaW5kLgoKCUNoYW5nZWQgdGhlIGZyZWUgY2FsbHMgdGhhdCBsZWF2ZSBkYXRhIGJlaGluZCBzbyB0aGV5CglyZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBsZWZ0LWJlaGluZCBkYXRhLCBOVUxMIGlmIHRvbGQgbm90Cgl0byBsZWF2ZSBhbnl0aGluZyBiZWhpbmQuIFRoaXMgbWFrZXMgdGhlc2UgY2FsbHMgZWFzaWVyCgl0byB1c2UgY29ycmVjdGx5LCB3aXRob3V0IGFueSBpbmNvbXBhdGlibGUgQVBJIGNoYW5nZSBmb3IKCWNhbGxlcnMgdGhhdCBkb24ndCBrbm93IGFib3V0IHRoZSByZXR1cm4gdmFsdWUuIE9mIGNvdXJzZSwKCWl0IHdvdWxkIGJlIGV2ZW4gY2xlYXJlciBpZiB0aGUgZnJlZSBjYWxscyB3ZXJlbid0IGR1YWwtcHVycG9zZQoJaW4gdGhlIGZpcnN0IHBsYWNlLgoKMjAwMC0wOC0xMiAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnaW93aW4zMi5jOiBTb21lIGluZGVudGF0aW9uIGFuZCBzcGFjaW5nIGZpeGVzLiBBZGQgc29tZSBtb3JlCglsb2dnaW5nLgoJKGdfaW9fd2luMzJfYWRkX3dhdGNoKTogTmV3IGZ1bmN0aW9uLCB3aXRoIGNvbW1vbiBjb2RlIGZyb20KCWdfaW9fd2luMzJfZmRfYWRkX3dhdGNoIGFuZCBnX2lvX3dpbjMyX3NvY2tfYWRkX3dhdGNoLiBEb24ndCBzdGFydAoJbW9yZSB0aGFuIG9uZSByZWFkZXIgdGhyZWFkIGZvciBhIEdJT0NoYW5uZWwuIFdlIHNob3VsZCBvYnZpb3VzbHkKCWhhdmUganVzdCBvbmUgcmVhZGVyIHRocmVhZCByZWFkaW5nIGEgZmlsZSBkZXNjcmlwdG9yIG9yIHNvY2tldC4KCjIwMDAtMDgtMTAgIEhhdm9jIFBlbm5pbmd0b24gIDxocEByZWRoYXQuY29tPgoKCSogZ3RocmVhZC0yLjAucGMuaW4gKENmbGFncyk6IGRvbid0IGR1cGxpY2F0ZSBnbGliIENmbGFncwoKCSogZ21vZHVsZS0yLjAucGMuaW4gKENmbGFncyk6IGRvbid0IGR1cGxpY2F0ZSBnbGliIENmbGFncwoKCSogZ29iamVjdC0yLjAucGMuaW4gKENmbGFncyk6IGRvbid0IGR1cGxpY2F0ZSBDZmxhZ3MgZnJvbSBnbGliCglpdHNlbGYKCjIwMDAtMDgtMTAgIEhhdm9jIFBlbm5pbmd0b24gIDxocEByZWRoYXQuY29tPgoKCSogZ2xpYi0yLjAucGMuaW4gKENmbGFncyk6IExvb2sgaW4gZ2xpYi0yLjAvaW5jbHVkZSBmb3IKCWdsaWJjb25maWcuaAoKMjAwMC0wOC0wNyAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiB0ZXN0cy9naW8tdGVzdC5jIChzaHV0ZG93bl9zb3VyY2UpOiBOZXcgZnVuY3Rpb24sIHRoYXQgY2FsbHMKCWdfc291cmNlX3JlbW92ZSgpLiBDaGVjayByZXR1cm4gdmFsdWUgb2YgZ19zb3VyY2VfcmVtb3ZlKCksIGFuZAoJZGVjcmVtZW50IHJ1bm5pbmcgc3VicHJvY2VzcyBjb3VudGVyIG9ubHkgaWYgZ19zb3VyY2VfcmVtb3ZlKCkKCWFjdHVhbGx5IGRpZCByZW1vdmUgdGhlIHNvdXJjZS4KCgkocmVjdl9tZXNzYWdlKTogQ2FsbCBzaHV0ZG93bl9zb3VyY2UoKSBvbiBFT0YgY29uZGl0aW9uLiBSZXR1cm4KCUZBTFNFIG9uIEdfSU9fSFVQIGFuZCBHX0lPX0VSUiBjb25kaXRpb24uIEZpeCBwcmludGYgZm9ybWF0IHR5cG8uCgpTdW4gQXVnICA2IDIwOjA2OjAyIDIwMDAgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdtZXNzYWdlcy5jIChnX2xvZ19kb21haW5fY2hlY2tfZnJlZSk6IGtlZXAgKmxhc3QgdXBkYXRlZCB3aGlsZQoJcnVubmluZyB0aHJvdWdoIHRoZSBkb21haW4gbGlzdCwgc28gd2UgZG9uJ3Qgc2NyZXcgdXAgdGhlIHJlbW92YWwsCglwYXRjaCBwcm92aWRlZCBieSBHYWR5IEtvem1hIDxnYWR5a296bWFAaG90bWFpbC5jb20+LgoKU3VuIEF1ZyAgNiAyMDowMzo0MSAyMDAwICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbWVzc2FnZXMuYyAoZ19sb2dfcmVtb3ZlX2hhbmRsZXIpOiBrZWVwICpsYXN0IHVwZGF0ZWQgd2hpbGUgcnVubmluZwoJdGhyb3VnaCB0aGUgaGFuZGxlciBsaXN0LCBzbyB3ZSBkb24ndCBzY3JldyB1cCB0aGUgcmVtb3ZhbC4KClN1biBKdWwgMzAgMTY6NTQ6MTMgMjAwMCAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBndW5pY29kZS5oOiBGaXggc3RyYXkgY2hhcmFjdGVyCgoJKiBndXRmOC5jIChnX3VuaWNoYXJfdG9fdXRmOCk6IEFsbG93IG91dGJ1ZiB0byBiZSBOVUxMLCBpbgoJd2hpY2ggY2FzZSB3ZSBqdXN0IGNvbXB1dGUgdGhlIGxlbmd0aC4KCjIwMDAtMDctMzEgIEhhdm9jIFBlbm5pbmd0b24gIDxocEByZWRoYXQuY29tPgoKCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBmb3Jnb3QgdG8gYWRkIC5wYy5pbiB0byBFWFRSQV9ESVNUCgoyMDAwLTA3LTMxICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcmVkaGF0LmNvbT4KCgkqIGdsaWItMi4wLnBjLmluLCBnb2JqZWN0LTIuMC5wYy5pbiwgZ21vZHVsZS0yLjAucGMuaW4sCglnb2JqZWN0LTIuMC5wYy5pbjogcGtnLWNvbmZpZyBkYXRhIGZpbGVzCSAKCgkqIE1ha2VmaWxlLmFtOiBJbnN0YWxsL2Rpc3QgdGhlIC5wYyBmaWxlcwoKCSogY29uZmlndXJlLmluOiBPdXRwdXQgdGhlIC5wYyBmaWxlcwoKMjAwMC0wNy0zMSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnaW93aW4zMi5jIChidWZmZXJfcmVhZCk6IFRoZSBjb2RlIGRpZG4ndCBjb21waWxlIChtdXN0CgloYXZlIGJlZW4gc2xlZXB5IHdoZW4gY29tbWl0dGluZykuICJyZXR1cm4iIGluc3RlYWQgb2YgImJyZWFrIgoKCShnX2lvX3dpbjMyX2ZkX2FkZF93YXRjaCk6IENhbm5vdCBjaGVjayBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzCglyZWFkYWJsZSBieSBjYWxsaW5nIFJlYWRGaWxlIHRvIHJlYWQgemVybyBieXRlcy4gUmVhZEZpbGUgYmxvY2tzCglvbiBOVCBldmVuIGlmIHRyeWluZyB0byByZWFkIG5vdGhpbmcgYXQgYWxsLiBTbywgZG9uJ3QgY2hlY2sgaWYKCWZpbGUgZGVzY3JpcHRvciBpcyByZWFkYWJsZTsgYXNzdW1lIHRoaXMgZnVuY3Rpb24gaXNuJ3QgY2FsbGVkCglvdGhlcndpc2UuCgpTdW4gSnVsIDMwIDEwOjQ0OjE2IDIwMDAgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdtYWluLmMgKGdfZ2V0X2N1cnJlbnRfdGltZSk6IGZpeCB0b3IncyByZWNlbnQgY2hhbmdlcyB3aGljaAoJZ290IHJpZCBvZiBhIHJlcXVpcmVkIHZhcmlhYmxlIGluIHRoZSBub24td2luZG93cyBwYXRoLgoKMjAwMC0wNy0zMCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJRmluYWxseSwgYSBuZXcgYW5kIGltcHJvdmVkIElPIENoYW5uZWwgYW5kIGNvbmRpdGlvbiB3YXRjaAoJaW1wbGVtZW50YXRpb24gZm9yIFdpbjMyLiBCYXNlZCBvbiBjb2RlIHByb3ZpZGVkIGJ5IENyYWlnIFNldGVyYS4KCglXaGVuIHdhdGNoaW5nIGZpbGUgZGVzY3JpcHRvcnMsIGZvciB3aGljaCB0aGVyZSBpcyBubyBzZWxlY3QoKQoJbGlrZSBmdW5jdGlvbmFsaXR5IG9uIFdpbjMyIHRoYXQgd291bGQgd29yayBvbiBhbGwgV2luMzIgcGxhdGZvcm1zCglmb3IgYWxsIHR5cGVzIG9mIGZpbGUgZGVzY3JpcHRvcnMgKGluY2x1ZGluZyBhbm9ueW1vdXMgcGlwZXMpLCB3ZQoJc3RhcnQgYSBuZXcgdGhyZWFkIHRoYXQgYmxvY2tzIHdoaWxlIHRyeWluZyB0byByZWFkIGZyb20gdGhlIGZpbGUKCWRlc2NyaXB0b3IuIFdoZW4gdGhlIHJlYWQgcmV0dXJucywgYSBXaW4zMiBFdmVudCBpcyBzaWduYWxsZWQgdGhhdAoJdGhlIHBvbGxpbmcgcm91dGluZSBldmVudHVhbGx5IG5vdGljZXMuIE1lYW53aGlsZSwgdGhlIGRhdGEgYmVpbmcKCXJlYWQgaXMgc3RvcmVkIGluIGEgY2lyY3VsYXIgYnVmZmVyLCBmcm9tIHdoZXJlIHRoZSBJTyBjaGFubmVsJ3MKCXJlYWQoKSBtZXRob2QgcGlja3MgaXQgdXAuCgoJSWYgdGhlIGJ1ZmZlciBmaWxscyB1cCB0aGUgcmVhZGluZyB0aHJlYWQgaGFzIHRvIHdhaXQgZm9yIHNwYWNlCgliZWNvbWluZyBhdmFpbGFibGUuIEZvciB0aGlzIGFub3RoZXIgV2luMzIgRXZlbnQgaXMgdXNlZC4gVGhlIElPCglDaGFubmVsJ3MgcmVhZCgpIG1ldGhvZCBzaWduYWxzIHRoaXMgd2hlbiBpdCBoYXMgcmVhZCBzb21lIGRhdGEKCW91dCBvZiB0aGUgYnVmZmVyLgoKCVRoZSBzZXBhcmF0ZSByZWFkZXIgdGhyZWFkKHMpLCBhbmQgdGhlIGNpcmN1bGFyIGJ1ZmZlcihzKSB3aXRoCglhc3NvY2lhdGVkIGV2ZW50cyBtZWFuIGxvdHMgb2YgcG9zc2liaWxpdGllcyBmb3IgZnVuIHBhcmFsbGVsaXNtCgllcnJvcnMuIEJ1dCBpdCBzZWVtcyB0byB3b3JrIE9LLCBpLmUuIEdJTVAgcnVucy4KCgkqIGdtYWluLmM6IFNtYWxsIGNoYW5nZXMgdG8gdGhlIFdpbjMyIHBvbGxpbmcgZnVuY3Rpb24uCgkoZ19tYWluX3dpbjMyX2dldF9wb2xsX2Z1bmMpOiBOZXcgZnVuY3Rpb24uIFBlcmhhcHMgaXQgd291bGQgYmUgYQoJZ29vZCBpZGVhIHRvIHByb3ZpZGUgdGhpcyBvbiBhbGwgcGxhdGZvcm1zLgoKCSogZ2lvd2luMzIuYzogVGhlIGJ1bGsgb2YgdGhlIG5ldyBpbXBsZW1lbnRhdGlvbi4KCShnX2lvX2NoYW5uZWxfd2luMzJfd2FpdF9mb3JfY29uZGl0aW9uKTogTmV3IGZ1bmN0aW9uLiBUbyBiZSB1c2VkCgl3aGVyZSBvbiBVbml4IG9uZSBkb2VzIGEgc2VsZWN0KCkgb24gdGhlIGNoYW5uZWwncyBmZCwgbGlrZQoJbGliZ2ltcCdzIGdpbXBfZXh0ZW5zaW9uX3Byb2Nlc3MoKS4gQ291bGQgYmUgcHJvdmlkZWQgb24gYWxsCglwbGF0Zm9ybXMuCgoJKiBnbGliLmg6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIGZvciBJTyBDaGFubmVscyBvbiBXaW4zMi4gUmVtb3ZlCgl0aGUgZGVjbGFyYXRpb25zIGZvciB0aGUgYXMgb2Ygbm93IG9ic29sZXRlIG9sZCBmdW5jdGlvbnMgcmVsYXRlZAoJdG8gSU8gQ2hhbm5lbHMgZm9yIHBpcGVzIHdpdGggIndha2V1cCIgbWVzc2FnZXMuCgoJKiBnbGliLmRlZjogU29tZSBuZXcgZnVuY3Rpb25zLgoKCSogdGVzdHMvZ2lvLXRlc3QuYzogTmV3IGZpbGUsIHRvIHRlc3QgR0lPQ2hhbm5lbCBhbmQgbWFpbiBsb29wLgoKCSogdGVzdHMvTWFrZWZpbGUuYW0KCSogdGVzdHMvbWFrZWZpbGUubWluZ3cuaW46IEFkZCBpdC4KCgkoTGF0ZXIgdGhlIHNhbWUgbmlnaHQ6KQoKCSogZ2lvd2luMzIuYzogQ29tcGlsZSBpbiB0aGUgZGVidWdnaW5nIGNvZGUgYWxsIHRoZSB0aW1lLCBidXQgb25seQoJb3V0cHV0IGRlYnVnIG1lc3NhZ2VzIGlmIHRvbGQgc28uIEFkZCAodW5hZHZlcnRpc2VkKSBmdW5jdGlvbiB0bwoJdHVybiBvbi9vZmYgZGVidWcgbWVzc2FnZXMgZm9yIGEgY2hhbm5lbC4KCgkoYnVmZmVyX3JlYWQpOiBEb24ndCBsb29wLiBJdCBpcyBleHBlY3RlZCBiZWhhdmlvdXIgdG8gcmV0dXJuIGEKCXNob3J0IHJlYWQgb2NjYXNpb25hbGx5LCBmb3IgaW5zdGFuY2Ugd2hlbiByZWFkaW5nIGZyb20KCXBpcGVzLiBJdCdzIHRoZSBjYWxsaW5nIGNvZGUgdGhhdCBzaG91bGQgbG9vcCBpZiBpdCAqa25vd3MqIGhvdwoJbXVjaCB0aGUgd3JpdGVyIGhhcyB3cml0dGVuLgoKCSogdGVzdHMvZ2lvLXRlc3QuYzogQ29ycmVjdCB0aGUgcHJvZ3JhbSdzIG5hbWUgaW4gdGhlIG91dHB1dC4KCShyZWN2X21lc3NhZ2UpOiBMb29wIGNhbGxpbmcgZ19pb19jaGFubmVsX3JlYWQoKSAoaW4gYSBuZXcKCWZ1bmN0aW9uIHJlYWRfYWxsKCkpIHVudGlsIHdlIGhhdmUgYWxsIHRoZSBieXRlcyB3ZSB3YW50ICh0aGF0IHdlCglrbm93IHRoZSB3cml0ZXIgaGFzIHdyaXR0ZW4vd2lsbCB3cml0ZSkuCgpUaHUgSnVsIDI3IDA1OjE1OjExIDIwMDAgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdzdHJmdW5jcy5jIChnX3N0cmxjcHksIGdfc3RybGNhdCk6IGNvbXBsZXRlZCB0b3IncyBmaXgKCXRvIGNvdmVyIGJvdGggI2lmZGVmIGJyYW5jaGVzLgoKMjAwMC0wNy0yNiAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnc3RyZnVuY3MuYyAoZ19zdHJsY3B5LCBnX3N0cmxjYXQpOiBSZXR1cm4gMCBvbiBlcnJvciwgbm90IE5VTEwuCgoJKiBnbGliLmRlZjogQWRkIGdfc3RybGNweSwgZ19zdHJsY2F0LgoKCSogZ2xpYmNvbmZpZy5oLndpbjMyLmluOiBBZGQgZ3NpemUgYW5kIGdzc2l6ZS4KCldlZCBKdWwgMjYgMTI6NTk6MzEgMjAwMCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogKi5baGNdOiBhcHBsaWVkIHBhdGNoIGZyb20gQW5kcmVhcyBQZXJzZW5pdXMgPG5kYXBAc3dpcG5ldC5zZT4gdGhhdAoJdXBkYXRlcyB0aGUgbGljZW5zZSBoZWFkZXJzIHRvIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCglhcyB3ZWxsIGFzIHVwZGF0aW5nIHRoZSBjb3B5cmlnaHQgeWVhciB0byAyMDAwLgoKV2VkIEp1bCAyNiAwNTo0Nzo0OCAyMDAwICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBjb25maWd1cmUuaW46CgkqIHRlc3RnbGliLmM6CgkqIGdzdHJmdW5jcy5jOgoJKiBnbGliLmg6IGFkZGVkIGdfc3RybGNhdCgpIGFuZCBnX3N0cmxjcHkoKSB3cmFwcGVycywgc3VwcGxpZWQgYnkKCURhdmlkIFdoZWVsZXIgPGR3aGVlbGVyQGlkYS5vcmc+OgoKCSogZ2xpYi5oLCBnc3RyZnVuY3MuYzogYWRkZWQgZ19zdHJsY3B5IGFuZCBnX3N0cmxjYXQgdG8gc3VwcG9ydAoJICBzYWZlIG1hbmlwdWxhdGlvbiBvZiBmaXhlZC1sZW5ndGggc3RyaW5nIGJ1ZmZlcnMuCgkgIFRoZXNlIGZ1bmN0aW9ucyB3ZXJlIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5IFRvZGQgTWlsbGVyIHRvIHNpbXBsaWZ5CgkgIGRldmVsb3BtZW50IG9mIHNlY3VyaXR5LXJlbGF0ZWQgcHJvZ3JhbXMsIGFuZAoJICBhcmUgYXZhaWxhYmxlIG9uIG1hbnkgKGJ1dCBub3QgYWxsKSBVbml4LWxpa2Ugc3lzdGVtcywKCSAgaW5jbHVkaW5nIE9wZW5CU0QsIEZyZWVCU0QsIGFuZCBTb2xhcmlzLiAgU2VlCgkgIGZ0cDovL2Z0cC5vcGVuYnNkLm9yZy9wdWIvT3BlbkJTRC9zcmMvbGliL2xpYmMvc3RyaW5nL3N0cmxjcHkuMwoJICBhbmQgaHR0cDovL3d3dy5vcGVuYnNkLm9yZy9zZWN1cml0eS5odG1sLgoJICBJZiB0aGVyZSdzIGEgc3RybGNweS9zdHJsY2F0IG9uIHRoZSBzeXN0ZW0sIGl0J3MgY2FsbGVkLCBvdGhlcndpc2UKCSAgYW4gaW1wbGVtZW50YXRpb24gaXMgcHJvdmlkZWQuCgoJKiB0ZXN0Z2xpYi5jOiBBZGRlZCB0ZXN0cyBmb3IgZ19zdHJsY3B5LCBnX3N0cmxjYXQuCgpXZWQgSnVsIDI2IDA1OjAzOjI0IDIwMDAgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGFjZ2xpYi5tNCAoR0xJQl9TSVpFT0YpOiBpbmNsdWRlIDxzdGRsaWIuaD4gYW5kIDxzdGRkZWYuaD4gaWYKCVNURENfSEVBREVSUyBpcyBkZWZpbmVkLgoKCSogZ2xpYi5oOgoJKiBnbGliY29uZmlnLmg6IGRlZmluZSBnc2l6ZSBhbmQgZ3NzaXplIGluIHRlcm1zIG9mIEdMSUJfU0laRU9GX1NJWkVfVAoKCSogZ2xpYi5oIChnX3JldHVybl9pZl9yZWFjaGVkKTogYXBwbGllZCBkYXJpbidzIGZpeCBmb3IgY29weSduCglwYXN0ZSBlcnJvciBpbiB0aGUgbWFjcm8gaW1wbGVtZW50YXRpb24uCgpXZWQgSnVsIDI2IDAwOjQ2OjAzIDIwMDAgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdsaWIuaDogYXBwbGllZCBwYXRjaCBmcm9tIERhcmluIEFkbGVyIDxkYXJpbkBlYXplbC5jb20+IHdoaWNoCglzdXBwbGllcyBnX3JldHVybl9pZl9yZWFjaGVkKCksIGdfcmV0dXJuX3ZhbF9pZl9yZWFjaGVkKCkgYW5kCglnX2NyaXRpY2FsKCkuCgoyMDAwLTA3LTIyICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGJ1aWxkLWRsbDogRml4IHJlc291cmNlIGhhbmRsaW5nLCB0aGUgcmVzb3VyY2UgZmlsZSBnb3QgbGVmdCBvdXQKCWZyb20gdGhlIERMTCBhZnRlciBhbGwuLi4gUmVtb3ZlIHRoZSBXSU4zMkFQSUhFQURFUlMsIG5vdCBuZWVkZWQKCXdpdGggY3VycmVudCB3aW5kcmVzLgoKCSogZ2xpYi5kZWY6IEFkZCBuZXcgZnVuY3Rpb25zLgoKMjAwMC0wNy0yMCAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGd1dGlscy5jLCBnbGliLmg6IE1hcmsgdGhlIGZ1bmN0aW9ucyBnX2Jhc2VuYW1lIGFuZCBnX2Rpcm5hbWUKCWRlcHJlY2F0ZWQuIFRoZXkgd2lsbCBpc3N1ZSBhbiB3YXJuaW5nIG9uY2UsIHdoZW4gY29tcGlsZWQgd2l0aAoJR19FTkFCTEVfREVCVUcsIGJ1dCBjb250aW51ZSB0byB3b3JrIGFzIGJlZm9yZS4gSW5zdGVhZCB0aGUKCWZ1bmN0aW9ucyBnX3BhdGhfZ2V0X2Jhc2VuYW1lIGFuZCBnX3BhdGhfZ2V0X2Rpcm5hbWUgc2hvdWxkIGJlCgl1c2VkLCB3aGljaCBCT1RIIHJldHVybiBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5LCB0aGF0IGhhcyB0byBmcmVlZAoJYnkgZ19mcmVlLiBUaGUgbmV3IGdfcGF0aF9nZXRfYmFzZW5hbWUgbm93IHN0cmlwcyB0cmFpbGluZyBzbGFzaGVzCglmcm9tIHRoZSBwYXRoLiBUaGlzIGZpeGVzICM1MDk3LiBGb3IgZGlzY3Vzc2lvbiBzZWUKCWh0dHA6Ly9tYWlsLmdub21lLm9yZy9waXBlcm1haWwvZ3RrLWRldmVsLWxpc3QvMjAwMC1BcHJpbC8wMDMxMzkuaHRtbAoKCSogZ3dpbjMyLmMsIHRlc3RnbGliLmMsIHRlc3RzL2Rpcm5hbWUtdGVzdC5jOiBVc2UgdGhlIG5ldwoJZnVuY3Rpb25zIGluc3RlYWQgb2YgdGhlIG9sZCBvbmVzLgoKCSogZ2hhc2guYywgZ3NjYW5uZXIuYywgZ2xpYi5oOiBNYXJrIHRoZSBmdW5jdGlvbnMKCWdfaGFzaF90YWJsZV9mcmVlemUsIGdfaGFzaF90YWJsZV90aGF3IGFuZCB0aHVzCglnX3NjYW5uZXJfZnJlZXplX3N5bWJvbF90YWJsZSBhbmQgZ19zY2FubmVyX3RoYXdfc3ltYm9sX3RhYmxlCglkZXByZWNhdGVkLiBUaGV5IHdpbGwgaXNzdWUgYW4gd2FybmluZyBvbmNlLCB3aGVuIGNvbXBpbGVkIHdpdGgKCUdfRU5BQkxFX0RFQlVHLiBUaGlzIGZpeGVzIEJ1ZyAjMzg4My4gRm9yIGRpc2N1c3Npb24gc2VlCglodHRwOi8vbWFpbC5nbm9tZS5vcmcvcGlwZXJtYWlsL2d0ay1kZXZlbC1saXN0LzIwMDAtQXByaWwvMDAzMTM5Lmh0bWwKCjIwMDAtMDctMTkgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBjb25maWd1cmUuaW4sIGdsaWIuaDogZ2xpYmNvbmZpZy5oIGFuZCBnbGliLmggbm93IGluY2x1ZGUgZmlsZXMKCW91dHNpZGUgb2YgdGhlIGV4dGVybiAiQyIgYmxvY2suIE1ha2VzIHNvbWUgQysrIGNvbXBpbGVyCgloYXBweS4gUmVwb3J0ZWQgYnkgRGVuaXMgVmFrYXRvdiA8dmFrYXRvdkBwZW9ueS5ubG0ubmloLmdvdj4uCgpTYXQgSnVsIDE1IDIzOjQ5OjAzIDIwMDAgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi9nbGliLnRleGk6IFJlbW92ZSBpbmNvbXBsZXRlIHN0YXJ0IG9mIGluZm8gZmlsZSAtCglyZWFsIGRvY3MgYXJlIGluIFJEUC4JCgpTYXQgSnVsIDE1IDIyOjQ0OjIyIDIwMDAgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmluOiBBZGQgYnVpbGQvTWFrZWZpbGUgYW5kIAoJYnVpbGQvd2luMzIvTWFrZWZpbGUgdG8gQUNfT1VUUFVUKCkgc28gdGhpbmdzIGJ1aWxkCglhZ2Fpbi4KClNhdCBKdWwgMTUgMDk6MTE6NDYgMjAwMCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ3N0cmZ1bmNzLmMgKGdfc3RybmNhc2VjbXApOiBmaXhlZCBhbiBvZmYgYnkgMCBlcnJvciAoeWVhaCwKCXRoZSBmdW5jdGlvbiB3ZW50IG9mZiB3aGVuIHRoZSB3aGlsZSAobi0tKSBsb29wIGZhaWxlZCBkdWUgdG8KCW49PTAgOyksIHJlcG9ydGVkIGJ5IEplYW4tTG91aXMgSEFNRUwgPGpsaGFtZWxAY2x1Yi1pbnRlcm5ldC5mcj4uCgoyMDAwLTA3LTE1ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogSW5jbHVkZSB0aGUgImJ1aWxkIiBtb2R1bGUgaW4gR0xpYiwgdG9vLAoJdG8gbWFrZSBpdCBtb3JlIHNlbGYtY29udGFpbmVkLiBJZiB5b3VyIENWUyBjbGllbnQgZG9lc24ndAoJYXV0b21hdGljYWxseSBnZXQgaXQsIGRvIGEgY3ZzIGdldCBidWlsZCBpbiBnbGliLgoKCSogKi9tYWtlZmlsZS5taW5ndy5pbjogSW5jbHVkZSBtYWtlLm1pbmd3IGZyb20gYnVpbGQgaW4gdGhlIGdsaWIKCXNvdXJjZSBkaXJlY3RvcnkuCgpGcmkgSnVsIDE0IDE2OjI2OjM1IDIwMDAgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogUmVsZWFzZSAxLjMuMQoKRnJpIEp1bCAxNCAxMjoyMjo0OSAyMDAwICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbSBnbGliLWNvbmZpZy5tNCBnbGliLm00OiBNb3ZlCglnbGliLWNvbmZpZyB0byBnbGliLWNvbmZpZy0yLjAgbW92ZSBnbGliLm00IHRvCglnbGliLTIuMC5tNAoKCSogTWFrZWZpbGUuYW0gZ29iamVjdC9NYWtlZmlsZS5hbSBnbW9kdWxlL01ha2VmaWxlLmFtCglndGhyZWFkL01ha2VmaWxlLmFtIHRlc3RzL01ha2VmaWxlLmFtOiBDaGFuZ2UgCglsaWJyYXJ5IG5hbWVzIHRvIGxpYmdsaWItMS4zLmxhLCBldGMsIHNvIHRoYXQgd2UKCWNhbiBkaXN0aW5ndWlzaCBnbGliLTEuMiBhbmQgZ2xpYi0yLjAgb24gdGhlIGxpbmtsaW5lLgoKCSogTWFrZWZpbGUuYW0gZ29iamVjdC9NYWtlZmlsZS5hbSBnbW9kdWxlL01ha2VmaWxlLmFtOgoJTW92ZSBpbmNsdWRlIGZpbGVzIGludG8gL3Vzci9pbmNsdWRlL2dsaWItMi4wLgoKVGh1IEp1bCAgNiAxODo1NDo0OSAyMDAwICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGRvY3MvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBSZW1vdmUgaW5mbyBmaWxlcwoJZnJvbSB0aGUgYnVpbGQuCgoyMDAwLTA3LTE0ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdsaWIuZGVmOiBBZGQgZ19lcnJvciBmdW5jdGlvbnMuCgoJKiBtYWtlZmlsZS5taW5ndy5pbjogQWRkIGdiYWNrdHJhY2Uuby4KCgkqIGdiYWNrdHJhY2UuYzogTm8gbmVlZCB0byBpbmNsdWRlIDxwcm9jZXNzLmg+LgoKMjAwMC0wNy0xMiAgSGF2b2MgUGVubmluZ3RvbiAgPGhwQHJlZGhhdC5jb20+CgoJKiBnbGliLmg6ICNpbmNsdWRlIDxnZXJyb3IuaD4KCgkqIE1ha2VmaWxlLmFtIChpbmNsdWRlX0hFQURFUlMpOiBBZGQgZ2Vycm9yLmgKCShsaWJnbGliX2xhX1NPVVJDRVMpOiBBZGQgZ2JhY2t0cmFjZS5jCgoJKiBnYmFja3RyYWNlLmM6IE1vdmUgZ19vbl9lcnJvcl9xdWVyeSgpIGluIGhlcmUgKG1vdmVkIG9uIHRoZSAKCXNlcnZlciwgc28gaGlzdG9yeSBpcyBwcmVzZXJ2ZWQpCgoJKiBnZXJyb3IuaDogR0Vycm9yIGludGVyZmFjZQoKCSogZ2Vycm9yLmM6IEdFcnJvciBpbXBsZW1lbnRhdGlvbiByZXBsYWNlcyBzdHVmZiB0aGF0J3Mgbm93IGluIAoJZ2JhY2t0cmFjZS5jCgpTdW4gSnVsICA5IDIxOjIwOjQ1IDIwMDAgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ3VuaWNvZGUuaDogSW5jbHVkZSBzdGRkZWYuaCBpbnN0ZWFkIG9mIHN0ZGxpYi5oCgoyMDAwLTA3LTA4ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdsaWIuaCAoR0xJQl9WQVIpOiBSZW5hbWUgdGhlIEdVVElMU19DX1ZBUiBtYWNybyB0byBHTElCX1ZBUi4KCgkqIGd1bmljb2RlLmg6IE1hcmsgdGhlIGdfdXRmOF9za2lwIGFycmF5IHdpdGggR0xJQl9WQVIuCgoJKiBnbGliLmRlZjogQWRkIHR3byBtaXNzaW5nIGVudHJ5IHBvaW50cy4KClRodSBKdWwgIDYgMTU6MzU6MjggMjAwMCAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBSZWxlYXNlIDEuMy4xCgoJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IERpc3QgZml4ZXMuCgoJKiBjb25maWd1cmUuaW46IE1vZGVyYXRlIHRoZSB3YXJuaW5ncyBqdXN0IGEgbGl0dGxlIGJpdC4KCjIwMDAtMDctMDUgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogUkVBRE1FLndpbjMyOiBVcGRhdGUuCgpNb24gSnVsICAzIDE3OjU4OjAyIDIwMDAgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ3V0ZjguYyAoZ191dGY4X2dldF9jaGFyc2V0X2ludGVybmFsKTogRml4IHVwCgl0byBjb3JyZXNwb25kIHRvIGNvbmZpZ3VyZS5pbiBjaGVja3MuCgpNb24gSnVsICAzIDE3OjE4OjE5IDIwMDAgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ2xpYi5oOiBDb21tZW50IGdfZ2V0X2NvZGVzZXQoKSBvdXQgb2YgdGhlIGhlYWRlciBmaWxlCgl0ZW1wb3JhcmlseS4gKFZlcnkgc2ltaWxhciB0byBnX2dldF9jaGFyc2V0KCksIG5lZWQKCXRvIHJlc29sdmUgdGhlIHR3by4pCgoyMDAwLTA3LTAxICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdsaWIuZGVmOiBBZGQgbmV3IGVudHJ5IHBvaW50cy4KCgkqIG1ha2VmaWxlLnttaW5ndyxtc2N9LmluOiBBZGQgdGhlIG5ldyBVbmljb2RlIG9iamVjdCBmaWxlcy4KClRodSBKdW4gMjkgMTU6NTc6MjggMjAwMCAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBORVdTOiB1cGRhdGVkCgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgc25hcGNoZWNrIHRhcmdldCB0byBnbyBhbG9uZyB3aXRoIHNuYXBzaG90CgoJKiBnc3RyaW5nLmMgZ2xpYi5oIChnX3N0cmluZ19oYXNoKTogQWRkIGdfc3RyaW5nX2hhc2ggdG8gCglnbyBhbG9uZyB3aXRoIGdfc3RyaW5nX2VxdWFsLgoKVHVlIEp1biAyNyAxMjo0MDoyMyBFRFQgMjAwMCAgRGF2aWQgQS4gV2hlZWxlciA8ZHdoZWVsZXJAZHdoZWVsZXIuY29tPgoKCSogZ2xpYi5oOiBBZGRlZCBnX3N0cmluZ19lcXVhbCBmb3IgY29tcGFyaW5nIEdTdHJpbmdzOwoJY2hhbmdlZCBnX3N0cl9lcXVhbCBzbyBpdCByZXR1cm5zIGdib29sZWFuIChpbnN0ZWFkIG9mIGdpbnQpLgoKCSogZ3N0cmluZy5jOiBNb2RpZmllZCBHU3RyaW5nIGltcGxlbWVudGF0aW9uIHRvIHN1cHBvcnQgZW1iZWRkZWQKCUFTQ0lJIE5VTCAoJ1wwJykgY2hhcmFjdGVycywgYW5kIGltcGxlbWVudGVkIGdfc3RyaW5nX2VxdWFsLgoKCSogdGVzdGdsaWIuYyB0ZXN0cy9zdHJpbmctdGVzdC5jOiBBZGRlZCB0ZXN0cyBmb3IgZ19zdHJpbmdfZXF1YWwKCWFuZCB0ZXN0cyBmb3IgcHJvcGVyIGhhbmRsaW5nIG9mIGVtYmVkZGVkIEFTQ0lJIE5VTCBjaGFyYWN0ZXJzLgoKV2VkIEp1biAyOCAyMjo1MjowMCAyMDAwICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIE1ha2VmaWxlLmFtIChsaWJnbGliX2xhX1NPVVJDRVMpOiBGaXgKCWd1bmljaGFydGFibGUuaCA9PiBndW5pY2hhcnRhYmxlcy5oLiAoRnJvbSBFcmljIExpbWluZ3MpCgpGcmkgSnVuIDIzIDE3OjIwOjI2IDIwMDAgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdsaWIuaDogZGVmaW5lIGdzdHJpbmcgaW4gdGVybXMgb2YgZ2NoYXIqLiB0aGlzIHR5cGVkZWYgcmVmbGVjdHMKCXRoZSB0eXBlIG5hbWUgb2YgdGhlIHByaW1pdGl2ZSBHX1RZUEVfU1RSSU5HIGluIHRoZSBnb2JqZWN0IG1vZHVsZS4KCldlZCBKdW4gMjEgMTI6MDk6MDMgMjAwMCAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBndW5pY29kZS5oIGd1dGY4LmMgZ3VuaXByb3AuYyBndW5pZGVjb21wLltjaF0gZ3VuaWNoYXJ0YWJsZXMuaAoJTWFrZWZpbGUuYW0gZ2xpYi5oOiBJbml0aWFsIHBhc3MgYXQgYWRkaW5nIHVuaWNvZGUgc3VwcG9ydAoJZnVuY3Rpb25zLiBBIGZldyB0aGluZ3Mgc3RpbGwgbmVlZCB0byBiZSBpbXBsZW1lbnRlZCwgYSBiaXQKCW9mIGNsZWFudXAgbmVlZHMgdG8gYmUgZG9uZSwgdGVzdHMgbmVlZCB0byBiZSBhZGRlZCwgYW5kIAoJdGhlIGRvY3MgbmVlZCB0byBiZSBmaW5pc2hlZCwgYnV0IHRoaXMgc2hvdWxkIGFsbG93IHJlcGxhY2luZwoJbW9zdCBvciBhbGwgdXNlIG9mIGxpYnVuaWNvZGUuCgoyMDAwLTA2LTA2ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdpb3dpbjMyLmMgKGdfaW9fY2hhbm5lbF93aW4zMl9waXBlX3JlYWRhYmxlKTogSWYgd2UgYXJlCgl3YXRjaGluZyB0aGUgc2FtZSBwaXBlIGZvciBkaWZmZXJlbnQgY29uZGl0aW9ucyAod2l0aCBkaWZmZXJlbnQKCWNhbGxiYWNrcyksIGNoZWNrIHRoZW0gYWxsLiBPbmx5IGNhbGwgdGhlIGNhbGxiYWNrIGZvciBHX0lPX0lOCglmcm9tIGhlcmUuIChUaGlzIGJ1ZyBwb3BwZWQgdXAgd2hlbiBhIHdhdGNoIGZvciBHX0lPX0VSUnxHX0lPX0hVUAoJd2FzIGFkZGVkIHRvIGdpbXBsaWIuKQoKMjAwMC0wNS0zMCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBndXRpbHMuYyAoZ19sb2NhbGVfZ2V0X2NvZGVzZXQpOiBJbXBsZW1lbnQgb24gV2luMzIuCgoJKiBnbGliLmRlZjogQWRkIGdfZ2V0X2NvZGVzZXQuCgoJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IG1ha2VmaWxlLmN5Z3dpbiogaGFzIGJlZW4KCXJlbmFtZWQgdG8gbWFrZWZpbGUubWluZ3cqLgoKVHVlIE1heSAzMCAxNjowMTozMiAyMDAwICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIuaCBndXRpbHMuYzogTW92ZSB0aGUgZ19sb2NhbGVfZ2V0X2NvZGVzZXQoKSB1cCBpbiB0aGUgCgloZWFkZXIgZmlsZSB0byBjb3JyZXNwb25kIHRvIHRvIGNvbW1lbnRzIGFib3V0IG1lbW9yeQoJbWFuYWdlbWVudC4gUmVuYW1lIHRvIGdfZ2V0X2NvZGVzZXQoKSB0byBhdm9pZCAKCXBvbGx1dGluZyB0aGUgZ19sb2NhbGVfKiBuYW1lc3BhY2UsIHdoaWNoIHByb2JhYmx5Cgl3b3VsZCBoYXZlIGdfbG9jYWxlX2dldF9jb2Rlc2V0IChHTG9jYWxlICpsb2NhbGUpLgoJQWRkIGEgZG9jIGNvbW1lbnQuCgpNb24gTWF5IDI5IDE0OjEwOjM1IDIwMDAgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ3V0aWxzLmMgKGdfbG9jYWxlX2dldF9jb2Rlc2V0KTogQWRkIGZ1bmN0aW9uIHRvIGdldCB0aGUgCgljb2Rlc2V0IG5hbWUgZm9yIHRoZSBjdXJyZW50IGxvY2FsZS4KCgkqIGNvbmZpZ3VyZS5pbiBhY2NvbmZpZy5oOiBBZGQgY2hlY2sgZm9yIG5sX2xhbmdpbmZvKENPREVTRVQpOwoKRnJpIE1heSAxOSAxMTozOToyOSAyMDAwICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBndXRpbHMuYyAoZ19zbnByaW50Zik6CgkoZ192c25wcmludGYpOiBhZGRlZCBhcmd1bWVudCBhc3NlcnRtZW50cy4KCgkqIGdzdHJpbmcuYyAoZ19zdHJpbmdfYXNzaWduKTogYWRkZWQgYXJndW1lbnQgYXNzZXJ0bWVudHMuCgkoZ19zdHJpbmdfdHJ1bmNhdGUpOiBtYWtlIGxlbiBhIGd1aW50LgoKRnJpIE1heSAxOSAwOTowMDo0NCAyMDAwICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbWVtLmMgKGdfZnJlZSk6IGZpeGVkIFNJWkVPRl9MT05HPT00IGFzc3VtcHRpb24gd2l0aAoJRU5BQkxFX01FTV9DSEVDSywgZnJvbSBBcnQgSGFhcyA8YWhhYXNAbmVvc29mdC5jb20+LgoKCSogZ3NsaXN0LmMgKGdfc2xpc3RfcmV2ZXJzZSk6IHNodXQgdXAgY29tcGlsZXIuCgoJKiBnc2Nhbm5lci5jIChnX3NjYW5uZXJfZ2V0X3Rva2VuX2xsKTogcmVtb3ZlZCBpbmxpbmUgYXNzaWdubWVudC4KCgkqIGdhcnJheS5jOiByZW1vdmUgaW5kZXg+PTAgY2hlY2tzIGZvciB1bnNpZ25lZCBpbmRpY2VzLgoKCSogZ21haW4uYyAoZ19pZGxlX3ByZXBhcmUpOiB0aW1lb3V0IGFzc2lnbm1lbnQgZml4LgoKCSogZ3RyZWUuYyAoZ190cmVlX25vZGVfcm90YXRlX3JpZ2h0KTogc2h1dCB1cCBjb21waWxlci4KCjIwMDAtMDUtMTMgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogbWFrZWZpbGUubWluZ3cuaW4KCSogdGVzdHMvbWFrZWZpbGUubWluZ3cuaW4KCSogYnVpbGQtZGxsOiBSZW5hbWUgbWFrZWZpbGUuY3lnd2luKC5pbikgdG8KCW1ha2VmaWxlLm1pbmd3KC5pbiksIHdoaWNoIGJldHRlciBkZXNjcmliZXMgd2hhdCBpdCBpcy4gTW92ZSB0aGUKCWJ1aWxkIG9mIGdtb2R1bGUsIGd0aHJlYWQgYW5kIGdvYmplY3QgRExMcyB0byBtYWtlZmlsZXMgaW4gdGhvc2UKCWRpcmVjdG9yaWVzLiBNb3ZlIHJlc291cmNlIGZpbGUgaGFuZGxpbmcgYW5kIGJ1aWxkIG51bWJlciBidW1wIHRvCglidWlsZC1kbGwsIHdoZXJlIGl0IHNpdHMgbXVjaCBjbGVhbmVyLgoKCSogUkVBRE1FLndpbjMyCgkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogVXBkYXRlIGFjY29yZGluZ2x5LgoKCSogZ2xpYi5oOiBBZGQgR19QSSwgR19QSV8yLCBHX1BJXzQsIEdfRSwgR19MTjIsIEdfTE4xMCBhbmQKCUdfU1FSVDIuIE1fUEkgZXRjIGFyZW4ndCBuZWNlc3NhcmlseSBpbiA8bWF0aC5oPiBpbiBzdHJpY3QgSVNPIEMKCWltcGxlbWVudGF0aW9ucy4KCgkqIGdsaWIuZGVmOiBBZGQgZ19zdHJjYW5vbi4KCgkqIGd0cmVlLmMgKGdfdHJlZV9ub2RlX3JvdGF0ZV9sZWZ0KTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMuCgoJKiBnd2luMzIuYyAoZ193aW4zMl9vcGVuZGlyKTogUmVtb3ZlIHVubmVlZGVkIHN0YXRlbWVudC4KClRodSBNYXkgIDQgMDI6MDQ6NDYgMjAwMCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogY29uZmlndXJlLmluIChTVFJJUF9EVU1NWSk6IHNvbWUgTWFrZSAzLjc5ICQoc3RyaXAgKSB2ZXJzaW9ucyBhcmUKCWJyb2tlbiBhbmQgcmVxdWlyZSBhbiBlbXB0eSBhcmcsIGdpdmUgaXQgdG8gdGhlbS4KCkZyaSBBcHIgMjggMjM6NTQ6MzUgMjAwMCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogc2V0dXAgdGhpbmdzIGZvciBhIG5ldyBzdWItbGlicmFyeSBsaWJnb2JqZWN0OgoKCSogTWFrZWZpbGUuYW0gKFNVQkRJUlMpOiBhZGRlZCBnb2JqZWN0CgoJKiBnbGliLWNvbmZpZy5pbjogZmVhdHVyZSAtbGdvYmplY3QuCgoJKiBjb25maWd1cmUuaW4gKEFDX09VVFBVVCk6IGdlbmVyYXRlIGdvYmplY3QvTWFrZWZpbGUuCgoJKiBnbGliLm00IChBTV9QQVRIX0dMSUIpOiBmZWF0dXJlIGdvYmplY3QgbW9kdWxlLgoKCSogZ2xpYi5zcGVjLmluOiBhZGRlZCAle3ByZWZpeH0vbGliL2xpYmdvYmplY3QtMS4zLnNvLioKCkZyaSBBcHIgMjggMjE6NDE6NDkgMjAwMCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ2xpYi5oOiBhZGRlZCBHX1NUUkxPQyBtYWNyby4KCUdfU1RSVUNUX09GRlNFVCgpOiBzaWduZWRuZXNzIGNvcnJlY3Rpb25zLgoJKEdfQ1NFVF9ESUdJVFMpOiBsaXN0IDAtOS4KCSogZ3NjYW5uZXIuYyAoZ19zY2FubmVyX2NvbmZpZ190ZW1wbGF0ZSk6IHVzZSBHX0NTRVRfRElHSVRTLgoKCSogZ2xpYi5oOiAKCSogZ3N0cmZ1bmNzLmM6CgkoZ19zdHJkb3duKToKCShnX3N0cnVwKToKCShnX3N0cnJldmVyc2UpOiByZXR1cm4gdGhlIG1vZGlmaWVkIHN0cmluZyBpbnN0ZWFkIG9mIHZvaWQsIHNvCgljYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgY2FuIGJlIG5lc3RlZC4KCShnX3N0cmNhbm9uKTogbmV3IGZ1bmN0aW9uLCBjYW5vbmljYWxpemVzIHN0cmluZyBhY2NvcmRpbmcgdG8KCWEgZ2l2ZW4gY2hhcmFjdGVyIHNldC4KCkZyaSBBcHIgMjggMTk6NDU6MTYgMjAwMCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ2FzeW5jcXVldWUuYyAoZ19hc3luY19xdWV1ZV91bnJlZik6IGdldCByaWQgb2YgYW4gdW51c2VkIHZhcmlhYmxlLgoKV2VkIE1heSAxMCAxOTo1Mjo0NCAyMDAwICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIubTQ6IFByaW50IGZvdW5kIHZlcnNpb24gd2hlbiB0ZXN0IHN1Y2NlZWRzLgoKMjAwMC0wNS0wNCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBtYWtlZmlsZS5jeWd3aW4uaW4KCSogdGVzdHMvbWFrZWZpbGUuY3lnd2luLmluOiBJbmNsdWRlIHRoZSBjb21tb24gbWFrZWZpbGUgc25pcHBldAoJZnJvbSAuLi9idWlsZC93aW4zMi4KCglNYXliZSBDVlNST09UL21vZHVsZXMgc2hvdWxkIGJlIGNoYW5nZWQgc28gdGhhdCB0aGUgJ2J1aWxkJyBtb2R1bGUKCWlzIGluY2x1ZGVkIHdpdGhpbiB0aGUgZ2xpYiBtb2R1bGUgKGFuZCBndGsrLCBhbmQgZ2ltcCwgYW5kIG1heWJlCglvdGhlcnMgbGF0ZXIpLCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlICdtYWNyb3MnIG1vZHVsZSBpcyBpbmNsdWRlZAoJaW4gbG90cyBvZiBHTk9NRSBDVlMgbW9kdWxlcz8KCjIwMDAtMDUtMDIgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ2xpYi5kZWY6IEFkZCBuZXcgZnVuY3Rpb25zLgoKCSogbWFrZWZpbGUue2N5Z3dpbixtc2N9LmluIChnbGliX09CSkVDVFMpOiBBZGQgbmV3IG9iamVjdCBmaWxlcy4KCgkqIHRlc3RzL21ha2VmaWxlLntjeWd3aW4sbXNjfS5pbjogQWRkIHRocmVhZCBwb29sLXRlc3QuCgoyMDAwLTA0LTI4ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ2FzeW5jcXVldWUuYzogTmV3IEZpbGUgaW1wbGVtZW50aW5nIGFuIGFzeW5jaHJvbm91cyBxdWV1ZSB0byBiZQoJdXNlZCBmb3IgYXN5bmNocm9ub3VzIGludGVyLXRocmVhZCBjb21tdW5pY2F0aW9uLgoKCSogZ3RocmVhZHBvb2wuYzogTmV3IEZpbGUgaW1wbGVtZW50aW5nIGEgdGhyZWFkIHBvb2wgdG8gYmUgdXNlZAoJZm9yIGRpc3RyaWJ1dGluZyB3b3JrIGFtb25nIHNldmVyYWwgdGhyZWFkcy4gCgoJKiBnbGliLmg6IEFkZGVkIHRoZSB0eXBlIGFuZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgZm9yIHRoZXNlIHR3bwoJdHlwZXMuCgoJKiB0ZXN0cy90aHJlYWRwb29sLXRlc3QuYzogTmV3IEZpbGUgaW1wbGVtZW50aW5nIGEgdGVzdCBmb3IgdGhlCgl0aHJlYWQgcG9vbC4gVGhpcyBhbHNvIGNoZWNrcyB0aGUgYXN5bmNocm9ub3VzIHF1ZXVlIHVuZGVybHlpbmcKCXRoZSB0aHJlYWQgcG9vbC4KCgkqIHRlc3RzL01ha2VmaWxlLmFtOiBDaGFuZ2VkIGFjY29yZGluZ2x5LgoKMjAwMC0wNC0yNiAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogTG9vayBmb3IgYm90aCBwdGhyZWFkX2NyZWF0ZSBhbmQgcHRocmVhZF9qb2luIGluCgl0aGUgdGhyZWFkIGxpYnJhcnkuIFNvbWUgc3lzdGVtcyBkZWZpbmUgb25lIG9mIHRoZW0sIGJ1dCBub3QgYm90aAoJaW4gbGliYy4gQXJnaGguIE5vdyB3ZSByZWFsbHkgc3RhcnQgYSB0aHJlYWQgYW5kIGpvaW4gaXQgbGF0ZXIgYW5kCgljaGVjaywgd2hldGhlciB0aGUgdGhyZWFkIHRvIGFjdHVhbGx5IHJhbi4KCgkqIGdsaWIuaCwgZ2NhY2hlLmMsIGd0cmVlLmM6IENoYW5nZWQgdGhlICd2YWx1ZScgcGFyYW1ldGVyIG9mCglnX2NhY2hlX3JlbW92ZSBmcm9tIGdwb2ludGVyIHRvIGdjb25zdHBvaW50ZXIuIERpdG8gZm9yIHRoZSAna2V5JwoJcGFyYW1ldGVyIG9mIGdfdHJlZV9sb29rdXAgYW5kIGdfdHJlZV9yZW1vdmUgYW5kIHRoZSAnZGF0YScKCXBhcmFtZXRlciBvZiBnX3RyZWVfc2VhcmNoLiBUaGlzIGZ1bmN0aW9uIG5vdyB0YWtlcyBhIGZ1bmN0aW9uIG9mCgl0eXBlIEdDb21wYXJlRnVuYyBpbnN0ZWFkIG9mIEdTZWFyY2hGdW5jLiBUaGlzIGZpeGVzIEJ1ZwoJIzgyNjcuIFRoYW5rcyB0byBKdWFuIFRvbGVkbyA8dG9sZWRvQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gZm9yCglwb2ludGluZyB0aGF0IG91dC4KCgkqIGdsaWIuaDogUmVtb3ZlZCBkZWNsYXJhdGlvbiBvZiBHU2VhcmNoRnVuYy4KCgkqIGdtZW0uYzogcy9HU2VhcmNoRnVuYy9HQ29tcGFyZUZ1bmMvLgoKMjAwMC0wNC0xOSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbGliLmRlZjogVXBkYXRlIGVudHJ5IHBvaW50IGxpc3QuCgoyMDAwLTA0LTE5ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ2xpYi5oIChHX1RSWUxPQ0spOiBNYWRlIHRoZSBkZWJ1Z2dpbmcgR19UUllMT0NLIGNhbGwgYWxzbyB3b3JrCglmb3IgY29tcGlsZXJzIHdpdGggZnVubnkgR19TVE1UXyhTVEFSVHxFTkQpIG1hY3Jvcy4KCgkqIHRlc3RzL3RocmVhZC10ZXN0LmM6IEltcGxlbWVudGVkIGEgY2hlY2sgZm9yIHRoYXQuCgoJKiBndXRpbHMuYyAoZ19nZXRlbnYpOiBDaGFuZ2VkIHRoZSB3aW4zMiBwYXJ0IG9mIHRoaXMgZnVuY3Rpb24gdG8KCWJlIHRocmVhZCBzYWZlIGFuZCB0byBtYWtlIHRoZSByZXR1cm5lZCBlbnZpcm9ubWVudCBzdHJpbmcKCXBlcnNpc3RlbnQgdG8gbWF0Y2ggdGhlIFVOKlggYmVoYXZpb3IuIFRoaXMgaXMgYWdhaW4gYSByZXNwb25zZSB0bwoJQnVnICM4OTgzLgoKCSogZ2xpYi5oIChHX0xPQ0tfTkFNRSk6IFJlbW92ZWQgcGFyZW50aGVzZXMgYXJvdW5kIHRoZSBsb2NrIG5hbWUsCglhcyB0aGF0IHNlZW1zIHRvIGNhdXNlIHByb2JsZW1zIGZvciBzb21lIGNvbXBpbGVycyBhbmQgcmVhbGx5Cglpc24ndCBuZWNlc3NhcnkuCgpXZWQgQXByIDE5IDA4OjMyOjMyIDIwMDAgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdzY2FubmVyLmMgKGdfc2Nhbm5lcl9uZXcpOiBtYWtlIHN1cmUgdGhhdAoJc2Nhbm5lci0+Y29uZmlnLT5jc2V0X3NraXBfY2hhcmFjdGVycyBpcyAiIiBpbnN0ZWFkIG9mIE5VTEwsIHNvIHdlCglkb24ndCBzZWdmYXVsdCBmdXJ0aGVyIG9uLgoKMjAwMC0wNC0xOCAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdsaWIuaCwgZ2xpc3QuaCwgZ3NsaXN0Lmg6IENoYW5nZWQgdGhlICdkYXRhJyBwYXJhbWV0ZXJzIGZyb20KCWdwb2ludGVyIHRvIGdjb25zdHBvaW50ZXIgZm9yIHRoZSBmdW5jdGlvbnMKCWdfKGxpc3R8c2xpc3QpXyhyZW1vdmV8ZmluZHxmaW5kX2N1c3RvbXxpbmRleCksIGFzIHRoZXkgZG8gbm90CgljaGFuZ2UgdGhpcyBwYXJhbWV0ZXIuIFRoaXMgZml4ZXMgYnVnICM0ODM2LgoKCSogZ2xpYi5oOiBDaGFuZ2VkIGNvbW1lbnQgZm9yIGdfZ2V0ZW52IHRvIHJlZmxlY3QsIHRoYXQgdGhlCglyZXR1cm5lZCBtZW1vcnkgbXVzdCBub3QgYmUgZnJlZWQuIEZpeGVzIGJ1ZyAjODk4My4KCjIwMDAtMDQtMTcgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBjb25maWd1cmUuaW4sIGFjY29uZmlnLmg6IEFkZCBjb25maWd1cmUgdGVzdCBmb3IgZ2FyYmFnZQoJY29sbGVjdG9yIGZyaWVuZGxpbmVzcyBmb3IgR0xpYi4gSWYgZW5hYmxlZCwgRU5BQkxFX0dDX0ZSSUVORExZCgl3aWxsIGJlIGRlZmluZWQuCgoJKiBnYXJyYXkuYywgZ2hhc2guYywgZ2xpc3QuYywgZ21haW4uYywgZ21lbS5jLCBnbm9kZS5jLCBncXVldWUuYywKCWdzbGlzdC5jLCBndHJlZS5jOiBJZiBFTkFCTEVfR0NfRlJJRU5ETFkgaXMgZGVmaW5lZCwgTlVMTGlmeSBhbGwKCW1lbW9yeSByZWxlYXNlZCBieSB0aGUgdXNlciwgYnV0IGNhY2hlZCBieSBHTGliLiBUaGlzIGxldHMgYQoJZ2FyYmFnZSBjb2xsZWN0b3IgaGF2ZSBhIG1vcmUgY29ycmVjdCB2aWV3IG9mIHRoZSBhY3R1YWxseSB1c2VkCgltZW1vcnkuCgoJKiBnYXJyYXkuYywgZ2xpYi5oOiBBZGRlZCBnXyhhcnJheXxwdHJfYXJyYXl8Ynl0ZV9hcnJheSlfc2l6ZWRfbmV3CglmdW5jdGlvbnMsIHRoYXQgcmVzZXJ2ZSBhIGNlcnRhaW4gYW1vdW50IG9mIG1lbWVvcnkgZm9yIHRoZSBhcnJheQoJYXQgY3JlYXRpb24gdGltZSB0byBhdm9pZCByZWFsbG9jYXRpb24uIEZpeGVzIGJ1ZyAjNjcwNyBmcm9tCglDaGFybGVzIEtlcnIgPGNrZXJyQG9zc2VydmVyMS5uc3NsLm5vYWEuZ292Pi4KCgkqIGdsaWIuaCwgZ3F1ZXVlLmMsIHRlc3RzL3F1ZXVlLXRlc3QuYyAobWFpbik6IFJlbmFtZWQKCWdfcXVldWVfY3JlYXRlIHRvIGdfcXVldWVfbmV3IGluIGNvbmZvcm1hbmNlIHRvIGFsbCBvdGhlciBHTGliCglkYXRhIHR5cGVzLgoKMjAwMC0wNC0wNyAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdyYW5kLmMgKGdfcmFuZF9uZXcpOiBGaXhlZCBidWcuIFRoYW5rcyB0byBNYXJrbyBLcmVlbgoJPG1hcmtvQGwtdC5lZT4gZm9yIHJlcG9ydGluZyB0aGF0LgoKMjAwMC0wMy0yNiAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBSRUFETUUud2luMzI6IFRlbGwgYWJvdXQgdXNpbmcgdGhlIG1pbmd3LWJhc2VkIGdjYywgd2hpY2ggaXMKCW11Y2ggZWFzaWVyIHRoYW4gbW9kaWZ5aW5nIHRoZSBjeWd3aW4gZ2NjIHRvIHByb2R1Y3QgbWluZ3cgY29kZQoJZm9yIHRoZSBtc3ZjcnQgcnVudGltZS4KCgkqIG1ha2VmaWxlLmN5Z3dpbi5pbiAoV0lOMzJBUElIRUFERVJTKTogS2x1ZGdlIHRvIG1ha2UgaXQgd29yawoJd2l0aCBhICJwdXJlIiBtaW5ndyBnY2MsIHRvby4KCjIwMDAtMDMtMjQgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnYXJyYXkuYzogTWFkZSBHQXJyYXkgYmVoYXZlIGNvcnJlY3RseS4gTm93IHplcm9fdGVybWluYXRlZAoJcmVhbGx5IG1lYW5zLCB0aGF0IHRoZSBlbGVtZW50IGFycmF5LT5kYXRhW2FycmF5LT5sZW5dIGV4aXN0cyBhbmQKCWlzIHplcm9lZCwgYW5kIGNsZWFyIG1lYW5zIHRoYXQgYW55IHVuYXNzaWduZWQgZWxlbWVudHMgb2J0YWluZWQKCXRocm91Z2ggZ19hcnJheV9zZXRfc2l6ZSAodGhlIG9ubHkgd2F5IHRvIGdldCB1bmFzc2lnbmVkIGVsZW1lbnRzCglBRkFJQ1QpIGFyZSB6ZXJvZWQuIEFkZGVkIHNvbWUgbWFjcm9zIHRvIG1ha2UgdGhlIGNvZGUgbW9yZQoJb2J2b2l1cy4gQWxzbyBtYWRlIEdQdHJBcnJheSB6ZXJvIGVsZW1lbnRzIGFmdGVyCglnX3B0cl9hcnJheV9zZXRfc2l6ZS4gVGhpcyBpcyBkb25lIGluIGEgcG9ydGJhbGUgd2F5IChhc3NpZ25tZW50CglvZiBOVUxMIGluc3RlYWQgb2YganVzdCBtZW1zZXR0aW5nIGl0IHRvIHplcm8pLCB0aG91Z2ggdGhhdCBtaWdodAoJYmUgbW9yZSBwb3J0YWJpbGl0eSB0aGFuIHdlIGFjdHVhbGx5IHdhbnQuCgoJKiBNYWtlZmlsZS5hbSwgZ3RocmVhZC9NYWtlZmlsZS5hbSwgZ21vZHVsZS9NYWtlZmlsZS5hbSwKCXRlc3RzL01ha2VmaWxlLmFtOiBBZGRlZCB2YXJpb3VzIHdpbjMyIHJlbGF0ZWQgKi5pbiBmaWxlcyB0bwoJRVhUUkFfRElTVCB0byBsZXQgJ21ha2UgZGlzdGNoZWNrJyBwcm9jdWRlIGFsbCB0aGUgY29ycmVzcG9uZGluZwoJZmlsZXMsIHdoaWNoIGl0IHNpbGVudGx5IGZhaWxzIHRvIGRvIGN1cnJlbnRseS4KCjIwMDAtMDMtMjMgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBjb25maWd1cmUuaW46IEFmdGVyIGZpbmRpbmcgdGhlIHJpZ2h0IHRocmVhZCBsaWJyYXJ5IChjb250YWluaW5nCgllLmcuIHB0aHJlYWRfY3JlYXRlKSB3ZSBub3cgc2VhcmNoIGZvciB0aGUgcmlnaHQgcmVhbHRpbWUgbGlicmFyeQoJKGNvbnRhaW5pbmcgZS5nLiBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4KS4gTWFrZXMgdGhlIG91dHB1dCBvZiB0aGUKCXRocmVhZCByZWxhdGVkIGxpYnJhcmllcyBjb3JyZWN0LiAKCgkqIGd0aW1lci5jIChnX3VzbGVlcCk6IFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGdfdXNsZWVwCgkoc2ltcGx5IGNhbGxpbmcgc2VsZWN0KSBkb2Vzbid0IHdvcmsgcmVsaWFibGUgZm9yIG11bHRpLXRocmVhZGVkCglwcm9ncmFtcyBvbiBzb21lIHBsYXRmb3JtcyAoYmFkIG9tZW4gZm9yIHRoZSBtYWluIGxvb3AuLi4uKSwgc28gSQoJY2hhbmdlZCB0aGUgaW1wbGVtZW50YXRpb24gZm9yIHRocmVhZC11c2luZyBwcm9ncmFtcyB0byB3YWl0IGZvciBhCglHQ29uZCBmb3IgdGhlIHNwZWNpZmllZCBhbW91bnQgb2YgdGltZSAoTkI6IHNsZWVwIGFuZCB1c2xlZXAgYXJlCglub3QgTVQtc2FmZSBpbiBnZW5lcmFsLCBiZWNhdXNlIHRoZXkgb2Z0ZW4gdXNlIHNpZ25hbHMpLgoKV2VkIE1hciAyMiAxNjo0OTo1NyAyMDAwICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdtZW0uYyAoZ19tZW1fY2h1bmtfYXJlYV9jb21wYXJlKTogRml4IGluZGVudGF0aW9uLgoKMjAwMC0wMy0yMiBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+CgoJKiBnbWVtLmMgKGdfbWVtX2NodW5rX2FyZWFfY29tcGFyZSk6IEZpeCA2NC1iaXRuZXNzIGJ1ZyBpbgoJY29tcGFyaW5nIHR3byBwb2ludGVycyBtb3JlIHRoYW4gNEcgYXBhcnQuCgoyMDAwLTAzLTIyICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGd1dGlscy5jOiBNb3ZlIFdpbjMyLW9ubHkgaW5jbHVkZXMgYWZ0ZXIgaW5jbHVzaW9uIG9mIGdsaWIuaCwgc28KCXRoYXQgR19PU19XSU4zMiBpcyBkZWZpbmVkLgoKCSogZ2xpYmNvbmZpZy5oLndpbjMyLmluOiBBZGQgR1N5c3RlbVRocmVhZC4KCjIwMDAtMDMtMjIgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBndXRpbHMuYyAoZ19nZXRfY3VycmVudF9kaXIpOiBPaywgTWFyY3VzIEJyaW5rbWFubgoJPE1hcmN1cy5Ccmlua21hbm5AcnVoci11bmktYm9jaHVtLmRlPiBjb252aW5jZWQgbWUsIHRoYXQgMTI4IEtCCglwYXRoIGxlbmd0aCBtaWdodCBub3QgYmUgZW5vdWdoIGZvciB0aGUgSFVSRC4gU28gSSBjaGFuZ2VkIHRoZQoJbG9vcCB0byBhdCBsZWFzdCBhdm9pZCBhbiBpbnRlZ2VyIG92ZXJmbG93LCB3aGljaCBjb3VsZCBoYXBwZW4gYXQKCWJleW9uZCAyR0Igc2l6ZSA7LSkKCgkqIGNvbmZpZ3VyZS5pbjogVGVzdCBmb3Igc2NoZWRfeWllbGQgYXMgdGhlIG5hdGl2ZSB5aWVsZCBmdW5jdGlvbgoJZmlyc3QuIENvcnJlY3RlZCB0eXBvIGdfdGhyZWFkX3NsZWVwIC0+IGdfdXNsZWVwLiBDb3JyZWN0ZWQKCW1lc3NhZ2UgZm9yIHRoZSBwdGhyZWFkX2NyZWF0ZSB0ZXN0LiBOZWdhdGl2ZSBQcmlvcml0aWVzIGFyZQoJYWxsb3dlZCAoYW5kIHVzZWQgb24gU29sYXJpcyksIHNvIGNvbnNpZGVyCglzY2hlZF9nZXRfcHJpb3JpdHlfbWluIGZhaWxlZCBvbmx5IGlmIGl0IHJldHVybnMgLTEsIG5vdCA8MC4gQ2hlY2sKCWZvciBzY2hlZF9nZXRfcHJpb3JpdHlfbWluIGFsc28gaW4gLWxydCwgaWYgbm90IGZvdW5kIGluIC1scHRocmVhZAoJYWxvbmUgYW5kIGFkZCAtbHJ0IHRvIEdfVEhSRUFEX0xJQlMgdGhlbi4gUmVtb3ZlIHNwZWNpYWwgY2FzZQoJaGFuZGxpbmcgb2YgcHJpb3JpdGllcyBmb3Igb2xkZXIgc29sYXJpcyB2ZXJzaW9ucyBhbmQgcG9zaXgKCXRocmVhZHMuIFRoYW5rcyB0byBXYW4tVGVoIENoYW5nIDx3dGNAbmV0c2NhcGUuY29tPiBmb3Igc3VnZ2VzdGluZwoJc29tZSBvZiB0aG9zZSBjaGFuZ2VzLgoKCSogY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViLCBsdGNvbmZpZywgbHRtYWluLnNoOgoJVXBncmFkZSB0byBsaWJ0b29sIDEuMy40LgoKMjAwMC0wMy0yMSAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdsaWIuaCwgY29uZmlndXJlLmluLCBndXRpbHMuaDogYWx3YXlzIGRlZmluZSBHX0dOVUNfRVhURU5TSU9OLAoJZXZlbiB3aGVuIG5vdCBuZWVkZWQgYnkgR0xpYi4gVGhhdCdzIGFjdHVhbGx5IGFsc28gdGhlIHdheSwgdGhlCglHTGliIHJlZmVyZW5jZSBtYW51YWwgZGVzY3JpYmVzIHRoYXQgbWFjcm8uIFRoZXJlZm9yZSBJIGhhZCB0bwoJcmVtb3ZlIHRoZSBsb25lc29tZSAjaW5jbHVkZSA8Z2xpYmNvbmZpZy5oPiBpbiBndXRpbHMuYywgd2hpY2gKCWRvZXNuJ3Qgc2VlbSB0byBiZSBuZWVkZWQgdGhlcmUgaG93ZXZlci4gVGhpcyBjaGFuZ2Ugc2hvdWxkIG1ha2UKCUJlbiBHZXJ0emZpZWxkIDxjaGVAZGViaWFuLm9yZz4gaGFwcHkuCgoJKiBndXRpbHMuYzogRnVydGhlcm1vcmUgdHdvIHdhcm5pbmdzIGluIGd1dGlscy5jIHdlcmUgdm9pZGVkLAoJd2hpY2ggY3JlcHQgaW4gZHVlIHRvIG15IGxhc3QgY2hhbmdlLgoKCSogZ3V0aWxzLmMgKGdfZ2V0X2N1cnJlbnRfZGlyKTogQWxsb2NhdGUgb25seSB1cCB0byAxMjhLQiBmb3IgYQoJcGF0aG5hbWUuIFdoaWxlIHRoaXMgaXMgYW4gYXJiaXRyYXJ5IHZhbHVlIGp1c3QgbGlrZSAyMDQ4LCBpdAoJc2VlbXMgdG8gYmUgZW5vdWdoIChhZnRlciBhbGwsIGV2ZW4gNEdCIGlzIGFuIGFyYml0cmFyeSB2YWx1ZSkuCgoyMDAwLTAzLTIwICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ21haW4uYyAoZ19tYWluX3BvbGwpOiBXYXJuIGluIGNhc2Ugb2YgYW4gZXJyb3IgZHVyaW5nIHRoZSBjYWxsCgl0byBwb2xsKDIpLiBDbG9zZXMgQnVnIzc1NjQgYXMgcmVwb3J0ZWQgYnkgRGF2aWQgSGVsZGVyCgk8ZGhlbGRlckB1bWljaC5lZHU+LgoKCSogZ3V0aWxzLmMgKGdfZ2V0X2N1cnJlbnRfZGlyKTogTWFrZSBnX2dldF9jdXJyZW50X2RpciB3b3JrIG9uCglzeXN0ZW1zIHdpdGggdW5saW1pdGVkIHBhdGhuYW1lIGxlbmd0aCBsaWtlIHRoZSBIVVJEIChJdCB3b3JrZWQKCXRoZXJlIGJlZm9yZSwgYnV0IG9ubHkgZm9yIHBhdGhlcyBzaG9ydGVyIHRoYW4gMjA0OCkuIENsb3NlcwoJQnVnIzQ1MjUgYXMgcmVwb3J0ZWQgYnkgTWFyY3VzIEJyaW5rbWFubgoJPE1hcmN1cy5Ccmlua21hbm5AcnVoci11bmktYm9jaHVtLmRlPi4KCjIwMDAtMDMtMTcgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnaW91bml4LmMgKGdfaW9fdW5peF93cml0ZSwgZ19pb191bml4X3JlYWQpOiBJbnRlcnByZXQgRUlOVFIgYXMKCUdfSU9fRVJST1JfQUdBSU4uCgoyMDAwLTAzLTE3ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogY29uZmlndXJlLmluOiBBZGRlZCB0aGUgbWlzc2luZyBQT1NJWF9OT19ZSUVMRCBhbmQKCVBPU0lYX05PX1BSSU9SSVRJRVMgd2FybmluZyBtZXNzYWdlcy4KCgkqIGNvbmZpZ3VyZS5pbjogVXNlIEFDX1RSWV9SVU4gaW5zdGVhZCBvZiBBQ19UUllfTElOSywgdG8gdGVzdCBmb3IKCXJlYWwgdGhyZWFkIHN1cHBvcnQuIE9uIHNvbGFyaXMgcHRocmVhZF9jcmVhdGUgY2FuIGJlIGxpbmtlZCB0bwoJZXZlbiBpbiAtbGMsIGJ1dCBpdCBkb2Vzbid0IHdvcmsgdGhlbi4KCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgdXNlIHByaW9yaXRpZXMgZm9yIHRocmVhZHMsIHdoZW4gdGhlCgltaW5pbWFsL21heGltYWwgcHJpb3JpdGllcyBjb3VsZG4ndCBiZSBkZXRlcm1pbmVkIGF0IGNvbmZpZ3VyZQoJdGltZS4KCgkqIGNvbmZpZ3VyZS5pbiwgZ3RocmVhZC5jOiBBbHdheXMgZGVmaW5lIEdTeXN0ZW1UaHJlYWQgaW4KCWdsaWJjb25maWcuaCB0byByZXByZXNlbnQgYSBzeXN0ZW0gdGhyZWFkLgoKCSogY29uZmlndXJlLmluOiBEbyBub3QgdXNlIG5hdGl2ZSByZWN1cnNpdmUgdGhyZWFkcywgd2hlbgoJcG9zc2liZS4gV2UgdXNlIHNvbWUgZmVhdHVyZXMsIHRoYXQgdGhleSBkbyBub3QgZXhwb3NlIChuYW1lbHkgdGhlCglkZXB0aCBjb3VudGVyKS4KCgkqIGdsaWIuaCwgZ3RocmVhZC5jOiBSZWRlZmluZWQgR1N0YXRpY1JlY011dGV4LiBUaGUgZnVuY3Rpb25zIGFyZQoJbm93IGltcGxlbWVudGVkIGluIGEgZGlmZmVyZW50IHdheSwgd2hpY2ggc2hvdWxkIGJlIHdheQoJZmFzdGVyLiBBbHNvdGhlcmUgYXJlIG5vdyBmdW5jdGlvbnMgZ19zdGF0aWNfcmVjX211dGV4X3VubG9ja19mdWxsCglhbmQgZ19zdGF0aWNfcmVjX211dGV4X2xvY2tfZnVsbCB0byBsZWF2ZS9lbnRlciBhIHJlY3Vyc2l2ZSBtdXRleAoJY29tcGxldGx5LgoKCSogZ3RocmVhZC5jIChnX3RocmVhZF9zZWxmKTogRG8gbm90IHRlc3QgdGhlIHN5c3RlbV90aHJlYWQgdG8gYmUKCW5vbi16ZXJvIHRvIHNwZWVkIHRoaW5ncyB1cC4KCgkqIGd0aHJlYWQuYyAoZ19tdXRleF9pbml0KTogVGhlcmVmb3JlIHNldCB0aGUgc3lzdGVtX3RocmVhZCBvZiB0aGUKCW1haW4gdGhyZWFkIGhlcmUuCgoJKiB0ZXN0cy90aHJlYWQtdGVzdC5jOiBSZXJ1biBhbGwgdGVzdHMgb25jZSBhZ2FpbiwgYnV0IHRoaXMgdGltZQoJd2UgZm9vbCB0aGUgc3lzdGVtIGludG8gdGhpbmtpbmcsIHRoYXQgdGhlIGF2YWlsYWJsZSB0aHJlYWQgc3lzdGVtCglpcyBub3QgbmF0aXZlLCBidXQgdXNlcnByb3ZpZGVkLgoKMjAwMC0wMy0xMyAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdxdWV1ZS5jIChnX3F1ZXVlX3B1c2hfdGFpbF9saW5rLCBnX3F1ZXVlX3B1c2hfaGVhZF9saW5rKTogV2UKCXdhbnQgdGhlIG5leHQgYW5kIHByZXYgcG9pbnRlciBvZiB0aGUgaW5zZXJ0ZWQgbGluayB0byBiZSBOVUxMLgoKMjAwMC0wMy0wNiAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogQW5vdGhlciBzbWFsbCBjaGFuZ2UgdG8gdGhlIHB0aHJlYWRfLi4gc2VhcmNoCglwYXR0ZXJuLiBTaG91bGQgd29yayAqbm93KiBmb3IgQUlYLgoKMjAwMC0wMy0wNCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnd2luMzIuYyAoZ193aW4zMl9lcnJvcl9tZXNzYWdlKTogTmV3IGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUKCW1lc3NhZ2Ugc3RyaW5nIGZvciBhIFdpbjMyIGVycm9yIGNvZGUuCgoJKiBnbGliLmg6IERlY2xhcmUgaXQuCgoJKiBnbGliLmRlZjogRXhwb3J0IGl0LCBwbHVzIGdfbm9kZV9jb3B5LgoKMjAwMC0wMy0wMyAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogTWFrZSB0aGUgc2VhcmNoIGZvciBwdGhyZWFkX2F0dHJfLi4uIHByb3RvdHlwZXMKCWZpbmQgbmFtZXMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSBhbHNvLCBsaWtlIGl0IGlzIG9uIEFJWC4gVGhhbmtzCgl0byBWYWxkaXMgS2xldG5pZWtzIDxWYWxkaXMuS2xldG5pZWtzQHZ0LmVkdT4gZm9yIHRoZSBpbmZvLgoKV2VkIE1hciAgMSAxMDozOTozOSAyMDAwICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnc2xpc3QuYyAoZ19zbGlzdF9yZXZlcnNlKTogbWlub3Igb3B0aW1pemF0aW9uLgoKCSogdGVzdGdsaWIuYyAoZ19ub2RlX3Rlc3QpOiBhZGRlZCBhIGNvdXBsZSBvZiB0ZXN0cyBmb3IKCWdfbm9kZV9jb3B5KCkuCgoJKiBnbGliLmg6CgkqIGdub2RlLmMgKGdfbm9kZV9jb3B5KTogbmV3IGZ1bmN0aW9uIHRvIGNvcHkgc3VidHJlZXMsCglzdXBwbGllZCBieSBkYnNlYXJzQGl4Lm5ldGNvbS5jb20uCgljaGFuZ2VkIGl0ZXJhdG9yIHRvIHdhbGsgdGhlIGNoaWxkcmVuIGxpc3QgYmFja3dhcmRzLCBzbwoJd2UgZ2V0IGRvd24gZnJvbSBPKG5eMikgdG8gTyhuKS4KCgkqIGdub2RlLmMgKGdfbm9kZV9maXJzdF9zaWJsaW5nKTogYXBwbGllZCBwYXRjaCBmcm9tCglkYnNlYXJzQGl4Lm5ldGNvbS5jb20gdG8gb3B0aW1pemUgYWNjZXNzIGlmIG5vZGUtPnBhcmVudAoJaXMgcHJlc2VudC4KCgkqIGd1dGlscy5jIChnX2dldF9hbnlfaW5pdCk6IGJhY2tlZCBvdXQgSEFWRV9QV19HRUNPUyBjaGVjayBhcm91bmQKCWFzc2lnbm1lbnQgb2YgZ19yZWFsX25hbWUsIHNpY25lIEhBVkVfUFdfR0VDT1MgaXMgbmV2ZXIgZGVmaW5lZCBhbmQKCXRodXMgYnJlYWtzIHRoZSBvcmlnaW5hbCBjb2RlLgoKCSogbWVyZ2VkIGNoYW5nZXMgZnJvbSAxLjIuNy4KCkZyaSBKYW4gMjggMTE6Mzc6NDEgMjAwMCAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJQnVnICM0MTU2IC0gQ2hhbmdlcyB2YWd1ZWx5IG1vZGVsbGVkIGFmdGVyIFNjb3R0IEdpZmZvcmQncyBwYXRjaAoKCSogZ3RpbWVyLmMgKGdfdGltZXJfZWxhcHNlZCk6IE5ldmVyIHJlcG9ydCBuZWdhdGl2ZSB0aW1lcyAtCgljbGlwIHRpbWVzIHRvIDAuCgoJKiBnbWFpbi5jIChnX3RpbWVvdXRfcHJlcGFyZSk6IEd1YXJkIGFnYWluc3QgdW5leHBlY3RlZAoJY2xvY2sgc2hpZnRzIGJ5IG5ldmVyIHNldHRpbmcgYSB0aW1lb3V0IG9mIG1vcmUgdGhhbgoJZGF0YS0+aW50ZXJ2YWwgbXNlY3MuCgoyMDAwLTAyLTI3ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdsaWIuZGVmOiBBZGQgbmV3IGZ1bmN0aW9ucy4KCjIwMDAtMDItMjMgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogUkVBRE1FLndpbjMyOiBBZGQgYSBtaXNzaW5nIHN0ZXAgdG8gdGhlIHNldHVwIGluc3RydWN0aW9ucyBmb3IKCWdjYy0yLjk1LjIuIFRoYW5rcyB0byBBcm5hdWQgQ2hhcmxldC4KCgkqIGdsaWIuZGVmOiBBZGQgbWlzc2luZyBlbnRyeSBwb2ludC4KCjIwMDAtMDItMTggIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBjb25maWd1cmUuaW46IENoYW5nZWQgR0NDIHZlcnNpb24gdGVzdCB0byBhbHNvIGFjY2VwdCBtYWpvcgoJdmVyc2lvbnMgPiAyLiBUaGFua3MgdG8gQmVuIEdlcnR6ZmllbGQgPGNoZUBkZWJpYW4ub3JnPiBmb3IKCXBvaW50aW5nIHRoaXMgb3V0LgoKVGh1IEZlYiAxNyAxMjo1Mzo0NCAyMDAwICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnc3RyaW5nLmM6IGNoYW5nZWQgZ19zdHJfaGFzaCgpIHRvIGEgMzEgYml0IHZlcnNpb24gYmFzZWQgb24KCWEgc3VibWlzc2lvbiBieSBLYXJsIE5lbHNvbiBhbmQgaGFuZCBvcHRpbWl6ZWQgYWQgYWJzdXJkdW0gYnkKCXZhcmlvdXMgcGVvcGxlIDspCgoJKiBnc3RyaW5nLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBoYXZvYyBmb3IgbmV3IGdzdHJpbmcgZnVuY3Rpb25zLAoJYWRkZWQgc29tZSBtb3JlIHNhbml0eSBjaGVja3MsIGNvZGluZyBzdHlsZSBmaXh1cHMuCgoyMDAwLTAyLTEzICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcG9ib3guY29tPgoKCSogdGVzdHMvc3RyaW5nLXRlc3QuYyAobWFpbik6IEFkZCB0ZXN0cyBmb3IgdGhlIG5ldyBHU3RyaW5nIAoJZmVhdHVyZXMKCgkqIHRlc3RnbGliLmMgKG1haW4pOiBBZGQgdGVzdHMgZm9yIHRoZSBuZXcgR1N0cmluZyBmZWF0dXJlcwoKCSogZ3N0cmluZy5jIChnX3N0cmluZ19pbnNlcnRfbGVuKTogTmV3IGZ1bmN0aW9uOyBpbnNlcnQgCglhIGdpdmVuIGxlbmd0aCBvZiBzdHJpbmcgYXQgYSBnaXZlbiBwb3NpdGlvbi4gCgkoZ19zdHJpbmdfYXBwZW5kKTogcmVpbXBsZW1lbnQgaW4gdGVybXMgb2YgZ19zdHJpbmdfaW5zZXJ0X2xlbgoJKGdfc3RyaW5nX2FwcGVuZF9sZW4pOiBuZXcgZnVuY3Rpb24KCShnX3N0cmluZ19pbnNlcnRfYyk6IGFjY2VwdCAtMSBmb3IgInBvcyIgYXJnIHRvIG1lYW4gImFwcGVuZCIKCShnX3N0cmluZ19hcHBlbmRfYyk6IHJlaW1wbGVtZW50IGluIHRlcm1zIG9mIGdfc3RyaW5nX2luc2VydF9jCgkoZ19zdHJpbmdfcHJlcGVuZCk6IHJlaW1wbGVtZW50IGluIHRlcm1zIG9mIGdfc3RyaW5nX2luc2VydF9sZW4KCShnX3N0cmluZ19wcmVwZW5kX2xlbik6IG5ldyBmdW5jdGlvbgoJKGdfc3RyaW5nX3ByZXBlbmRfYyk6IHJlaW1wbGVtZW50IGluIHRlcm1zIG9mIGdfc3RyaW5nX2luc2VydF9jCgkoZ19zdHJpbmdfaW5zZXJ0KTogcmVpbXBsZW1lbnQgaW4gdGVybXMgb2YgZ19zdHJpbmdfaW5zZXJ0X2xlbgoKCSogZ2xpYi5oOiBEZWNsYXJlIGdfc3RyaW5nX2luc2VydF9sZW4sIGdfc3RyaW5nX2FwcGVuZF9sZW4sCglnX3N0cmluZ19wcmVwZW5kX2xlbgoKU3VuIEZlYiAxMyAwODoxNjo0NyAyMDAwICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBjb25maWd1cmUuaW46IHd0Zj8/PyBzb21lb25lIGRlc3Ryb3llZCB0aGUgY29uZmlndXJlLmluLCByZXZlcnRpbmcgdG8KCWFuIG9sZGVyIHZlcnNpb24gZnJvbSBGZWIgNCB3aGljaCBhcGVhcnMgdG8gc3RpbGwgd29yay4KCjIwMDAtMDItMDcgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ21vZHVsZS5yYy5pbiBndGhyZWFkLnJjLmluOiBNb3ZlIHRvIGNvcnJlc3BvbmRpbmcgc3ViZGlyZWN0b3JpZXMuCgoJKiBNYWtlZmlsZS5hbQoJKiBnbW9kdWxlL01ha2VmaWxlLmFtCgkqIGd0aHJlYWQvTWFrZWZpbGUuYW06IENoYW5nZSBhY2NvcmRpbmdseS4KCgkqIG1ha2VmaWxlLmN5Z3dpbjogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLCBzb21lIGNsZWFudXAuCgoyMDAwLTAyLTA1ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdsaWIucmMuaW4gZ21vZHVsZS5yYy5pbiBndGhyZWFkLnJjLmluOiBOZXcgZmlsZXMsIGZvciBwdXR0aW5nCgl2ZXJzaW9uIGluZm8gaW4gdGhlIERMTHMgb24gV2luMzIuCgoJKiBNYWtlZmlsZS5hbTogR2VuZXJhdGUgY29ycmVzcG9uZGluZyAqLnJjIGZpbGVzIGFuZCBkaXN0cmlidXRlCgl0aGVtLgoKCSogbWFrZWZpbGUuY3lnd2luLmluOiBBZGQgcnVsZXMgdG8gYXV0b21hdGljYWxseSBidW1wIGEgImJ1aWxkCgludW1iZXIiIGluIHRoZSB2ZXJzaW9uIGluZm8gaW4gdGhlIHJjIGZpbGVzIGVhY2ggdGltZSB0aGUgRExMIGlzCglidWlsdC4gQnV0IGRvIHRoaXMgb25seSBmb3IgdGhlIHBlcnNvbiB3aG8gcmVsZWFzZXMgYmluYXJpZXMuIElmCglvdGhlcnMgYnVpbGQgdGhlIERMTHMsIHRoZSBidWlsZCBudW1iZXIgaXMgc2V0IHRvIHplcm8uCgpGcmkgRmViICA0IDE5OjM2OjA1IDIwMDAgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdsaWIuaDogCgkqIGdkYXRhc2V0LmM6IHJldHVybiBzdG9sZW4gZGF0YSBmcm9tIGdfZGF0YWxpc3RfaWRfcmVtb3ZlX25vX25vdGlmeSgpCglhbmQgZ19kYXRhc2V0X2lkX3JlbW92ZV9ub19ub3RpZnkoKSB0byBhdm9pZCBzZWNvbmQgbG9va3VwIGZvciBjb21tb24KCXVzZS4KCjIwMDAtMDItMDEgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ2xpYi5oCgkqIGdzdHJmdW5jcy5jIChnX2ZpbGVuYW1lX3RvX3V0ZjgsIGdfZmlsZW5hbWVfZnJvbV91dGY4KTogTmV3CglmdW5jdGlvbnMgZm9yIGNvbnZlcnNpb24gYmV0d2VlbiBVVEYtOCBhbmQgdGhlIGVuY29kaW5nIGV4cGVjdGVkCglieSBDIHJ1bnRpbWUgZnVuY3Rpb25zIGxpa2Ugb3BlbigpIGFuZCBzdGF0KCksIGFuZCByZXR1cm5lZCBieQoJcmVhZGRpcigpLgoKCUltcGxlbWVudCB0aGVtIG9uIFdpbjMyIHdoZXJlIHdlIHVzZSB0aGUgc3lzdGVtICJBTlNJIiBjb2RlcGFnZSwKCXdoaWNoIG1pZ2h0IGJlIHNpbmdsZS1ieXRlIG9yIGRvdWJsZS1ieXRlLiBPbiBVbml4LCBqdXN0IHNraXAgdGhlCglpc3N1ZSBmb3Igbm93IGFuZCBwcm92aWRlIGR1bW15IGltcGxlbWVudGF0aW9ucyB0aGF0IHJldHVybiBhIGNvcHkKCW9mIHRoZSBhcmd1bWVudC4KCgkqIFJFQURNRS53aW4zMgoJKiBidWlsZC1kbGwKCSogZ2xpYi5kZWY6IE1pbm9yIHVwZGF0ZXMuCgpXZWQgSmFuIDI2IDA1OjI0OjM4IDIwMDAgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdsaWIuaDoKCSogZ21haW4uYzogcy9jdXJyZW50X3RpbWUvZGlzcGF0Y2hfdGltZS8gZm9yIHRoZSBkaXNwYXRjaCgpIGhhbmRsZXJzLgoJcmVmZXRjaCB0aGUgY3VycmVudCB0aW1lIGFmdGVyIGludm9jYXRpb24gb2YgcG9sbCgpIHRvIGNvdmVyIHVwIGZvcgoJdGhlIHRpbWUgc3BlbnQgaW4gdGhhdCBmdW5jdGlvbiBjYWxsLgoKRnJpIEphbiAyMSAxMDoxODoyNCAyMDAwICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdsaWIuaCAoR19OX0VMRU1FTlRTKTogQWRkZWQgR19OX0VMRU1FTlRTIG1hY3JvIHRvIGRldGVybWluZQoJdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhbiBhcnJheS4KClN1biBKYW4gIDkgMTM6Mjg6MzYgMjAwMCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ3N0cmZ1bmNzLmMgKGdfc3RydG9kKTogY29ycmVjdGx5IGZldGNoIHRoZSBjdXJyZW50IGxvY2FsZSwKCWZpeCBmcm9tIG93ZW4uCgoxOTk5LTEyLTE2ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdtb2R1bGUvZ21vZHVsZS13aW4zMi5jOiBVc2UgRm9ybWF0TWVzc2FnZSB0byB0cmFuc2xhdGUgc3lzdGVtCgllcnJvciBjb2RlcyBpbnRvIHRleHR1YWwgbWVzc2FnZXMuCgoxOTk5LTExLTI1ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ2xpYi5oIChHX1RSWUxPQ0spOiBUaGlzIG9mIGNvdXJzZSBzaG91bGQgcmV0dXJuIFRSVUUgaW4gYQoJcHJvZ3JhbSB3aXRoIGEgdGhyZWFkLWRpc2FibGVkIEdMaWIuCgoxOTk5LTExLTE4ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdsaWIuZGVmOiBnX3N0cmpvaW4gd2FzIG1pc3NpbmcuCgoxOTk5LTExLTE2ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogYWNjb25maWcuaCwgY29uZmlnLmgud2luMzIuaW4sIGNvbmZpZ3VyZS5pbjogUmVuYW1lZAoJR0xJQl9TSVpFT0ZfUFRIUkVBRF9UIHRvIEdMSUJfU0laRU9GX1NZU1RFTV9USFJFQUQgdG8gcmVmbGVjdAoJY2hhbmdlZCBtZWFuaW5nLgoKCSogY29uZmlndXJlLmluOiBDb3BlIHdpdGggc3lzdGVtcywgdGhhdCBoYXZlIGEgcHRocmVhZF90IHR5cGUsCgl0aGF0IGlzIG5vdCBhIHBvaW50ZXIuIEhpbnQgZnJvbSBLYXJsIE5lbHNvbgoJPGtlbmVsc29uQGVjZS51Y2RhdmlzLmVkdT4uIERlZmluZSBHTElCX1NJWkVPRl9TWVNURU1fVEhSRUFEIHRvIDQKCWZvciBTb2xhcmlzLiBDb3BlIHdpdGggc3lzdGVtcywgdGhhdCBoYXZlIG5vIGRlZmF1bHQgbXV0ZXgKCWluaXRpYWxpemUsIGxpa2Ugb2J2aW91c2x5IG1vc3QgRENFIHN5c3RlbXMuCgoJKiBnbGliLmgsIGd0aHJlYWQuYzogQ2hhbmdlZCB0aGUgcHJvdG90eXBlIG9mIHRocmVhZF9jcmVhdGUgYW5kCgl0aHJlYWRfc2VsZiB0byByZXR1cm4gdGhlIHN5c3RlbSB0aHJlYWQgaW50byBwcm92aWRlZCBtZW1vcnkKCWluc3RlYWQgb2YgYSByZXR1cm4gdmFsdWUuIFRoaXMgaXMgbmVjZXNzYXJ5LCBhcyBIUFVYIGhhcyBhCglwdGhyZWFkX3QsIHRoYXQgaXMgYmlnZ2VyIHRoYW4gdGhlIGJpZ2dlc3QgaW50ZWdyYWwgdHlwZSB0aGVyZS4KCgkqIGd0aHJlYWQuYzogc3lzdGVtX3RocmVhZCBpcyBubyBsb25nZXIgYSBwb2ludGVyLCBidXQgYW4gbWVtb3J5CglhcmVhIG9mIHNpemUgR0xJQl9TSVpFT0ZfU1lTVEVNX1RIUkVBRC4gQ2hhbmdlZCB0aGUKCXplcm9pbml0aWFsaXphdGlvbiBhbmQgdGhlIHRlc3RzIGZvciB6ZXJvbmVzcyBhY2NvcmRpbmdseS4KCjE5OTktMTEtMDkgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBjb25maWd1cmUuaW46IENyZWF0ZSBkb2NzL2dsaWItY29uZmlnLjEgZnJvbQoJZG9jcy9nbGliLWNvbmZpZy4xLmluLiBNYWtlcyAnbWFrZSBkaXN0Y2hlY2snIGhhcHB5IChhbmQgbWUgdG9vKS4KCgkqIGdsaWItY29uZmlnLjE6IFJlbW92ZWQgZnJvbSBDVlMsIGFzIGl0IGlzIGEgZ2VuZXJhdGVkIGZpbGUuCgoxOTk5LTExLTA4ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogY29uZmlndXJlLmluOiBNYWtlIHRoZSB0ZXN0IGZvciBnZXRwd3VpZF9yIHdvcmsgb24gbmV3ZXIgQUlYCgl2ZXJzaW9ucywgdG9vLiBTdGlsbCB3b3JrcyBvbiBTb2xhcmlzIGFuZCBMaW51eC4gUGF0Y2ggZnJvbSBDcmFpZwoJUm9kcmlndWVzIDxyb2RyaWdjQG1lZGlhb25lLm5ldD4uCgoxOTk5LTExLTA4ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGd3aW4zMi5jIChnX3dpbjMyX2dldGxvY2FsZSk6IExvb2sgYXQgZW52IHZhcnMgTENfQUxMLCBMQ19DVFlQRQoJYW5kIExBTkcgZmlyc3QuIFNvbWUgcmVmaW5lbWVudHMgdG8gdGhlIHN1Ymxhbmd1YWdlIGxvZ2ljLgoKMTk5OS0xMS0wNCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBtYWtlZmlsZS57Y3lnd2luLG1zY30uaW46IEFkZCBnd2luMzIgb2JqZWN0LiBBZGQgcnVsZSB0byBtYWtlIC5pCgkocHJlcHJvY2Vzc2VkIHNvdXJjZSkgZmlsZXMuCgoxOTk5LTExLTAxICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdsaWIuaAoJKiBnbGliLmRlZjogUmVuYW1lIFdpbjMyLW9ubHkgZnVuY3Rpb25zIGZyb20gZ3dpbl8qIHRvIGdfd2luMzJfKgoJdG8gbWF0Y2ggdGhlIEdMaWIgbmFtaW5nIGNvbnZlbnRpb25zLgoKCSogZ3V0aWxzLmMKCSogZ3dpbjMyLmMKCSogdGVzdGdsaWIuYwoJKiBNYWtlZmlsZS5hbTogTW92ZSB0aGUgV2luMzItb25seSBmdW5jdGlvbnMgdG8gdGhlIG5ldwoJZmlsZSBnd2luMzIuYwoKMTk5OS0xMC0zMSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBndXRpbHMuYyAoZ3dpbl9nZXRsb2NhbGUpOiBOZXcgV2luMzItc3BlY2lmaWMgZnVuY3Rpb24sIHJldHVybnMKCWEgVW5peGlzaCBjdXJyZW50IGxvY2FsZSBzdHJpbmcgKGVuLCB6aF9UVyBldGMpLgoKCSogZ2xpYi5oOiBEZWNsYXJlIGl0LgoKCSogZ2xpYi5kZWY6IEV4cG9ydCBpdC4KCgkqIHRlc3RnbGliLmM6IFRlc3QgaXQuCgoJKiBnbWVzc2FnZXMuYyAoV2luMzI6IGVuc3VyZV9zdGRvdXRfdmFsaWQpOiBTb21lIGltcHJvdmVtZW50cywKCW1ha2Ugc3VyZSB3ZSBkb24ndCBjYWxsIEFsbG9jQ29uc29sZSBzZXZlcmFsIHRpbWVzLCB3aGljaCBJIHRoaW5rCgloYXMgaGFwcGVuZWQuCgpTdW4gT2N0IDMxIDE4OjU1OjAxIDE5OTkgIGFwZUBzcGFjZXRlYy5ubyAgKEFzYmpvcm4gUGV0dGVyc2VuKQoKCSogZ2NhY2hlLmMgKGdfY2FjaGVfcmVtb3ZlKTogVGVzdCBpZiBub2RlIGlzIE5VTEwuCglJZiBub3QgdGVzdGVkLCBHSU1QJ3Mgc2NyaXB0LWZ1IHdpbGwgY3Jhc2guIAoKU3VuIE9jdCAxNyAxODoxMTo0MCAxOTk5ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnZGF0YXNldC5jIChnX2RhdGFfc2V0X2ludGVybmFsKTogcmVtb3ZlIGdfZGF0YXNldF9nbG9iYWxfbG9jayBhcm91bmQKCWRlc3Ryb3koKSBub3RpZmljYXRpb24gaGVyZSBhcyB3ZWxsLgoKMTk5OS0xMC0xNSAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdkYXRhc2V0LmMgKGdfZGF0YWxpc3RfY2xlYXJfaSk6IEF2b2lkIEZyZWV6aW5nLCB3aGVuIGdfZGF0YWxpc3QKCWlzIGNhbGxlZCByZWN1cnNpdmx5LiBSZXBvcnRlZCBieSBPbGEgQW5kZXJzc29uIDxyYW5kQGxpbmcudW11LnNlPi4KClR1ZSBPY3QgMTIgMTQ6MTc6MTIgMTk5OSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ2xpYi5oOiByZW1vdmVkIHVzZWxlc3MgZ19zdHJpbmcoeCkgbWFjcm8gdGhhdCBjbHV0dGVyZWQgdGhlIG5hbWVzcGFjZQoJYW5kIHdhcyBqdXN0IGEgcG9vciB3cmFwcGVyIGFyb3VuZCB0aGUgY3BwICcjJyBzeW1ib2wsIHVzZSAjeCBpZiB5b3UKCW5lZWQgdG8gd29yayBhcm91bmQgdGhpcy4KCWFkZGVkIG5ldyBtYWNybyBHX1NUUklOR0lGWShhcmcpIHRoYXQgd2lsbCBjb252ZXJ0IGFyZyB0byBhIHN0cmluZywKCW5vIG1hdHRlciB3aGV0aGVyIGl0IGNvbnRhaW5zIG1hY3JvcyBvciBub3QuCgoxOTk5LTEwLTEyICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGNvbmZpZy5oLndpbjMyLmluOiBEZWZpbmUgdGhlIG5ldyBHTElCX1NJWkVPRl8qIGNvbnN0YW50cyBoZXJlLAoJdG9vLgoKCSogZ2xpYi5oOiBTbWFsbCBXaW4zMiBjb21tZW50cyBpbXByb3ZlbWVudC4KClR1ZSBPY3QgMTIgMTI6MTY6MTIgMTk5OSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21lc3NhZ2VzLmMgKGdfcHJpbnRmX3N0cmluZ191cHBlcl9ib3VuZCk6IGNvbXBsZXRseSBuZXcKCWltcGxlbWVudGF0aW9uIGZvciBwcmludGYgc3RyaW5nIHVwcGVyIGJvdW5kcyBjYWxjdWxhdGlvbi4KCXdlIGhhbmRsZSBhbGwgZ2xpYmMgMi4xIGZvcm1hdCBzcGVjaWZpZXJzIG5vdywgZXhjZXB0IGZvciBwb3NpdGlvbmFsCglwYXJhbWV0ZXJzICglbm4kLi4uKSBhbmQgd2lkZSBjaGFyIHN0cmluZ3MsIHBsdXMgc29tZSBvYnNjdXJlIHVwcGVyCgljYXNlIHZhcmlhbnRzIG9mIHRoZSBzdGFuZGFyZCBjb252ZXJzaW9ucy4gdGhpcyBmaXhlcyBhIGxvdCBvZgoJYnVncyBpbiB0aGUgb2xkIGNvZGUsIGkuZS4KCS0gTlVMTCBmb3JtYXQgc3RyaW5ncwoJLSBmbG9hdHMgd2l0aCBleHBvbmVudHMgPisyNAoJLSAlRwoJLSBwcmVjaXNpb24gc3BlY2lmaWNhdGlvbnMgaW4gZ2VuZXJhbAoJLSBuZWdhdGl2ZSBmaWVsZCB3aWR0aHMKCS0gJXAgZm9yIFNJWkVPRl9WT0lEX1AgPiA0IHBsYXRmb3JtcwoJd2Ugbm93IGlzc3VlIHdhcm5pZ25zIGluIHBsYWNlcyB3aGVyZSB0aGUgb2xkIGNvZGUgd291bGQgaGF2ZQoJY2F1c2VkIGJ1ZmZlciBvdmVycnVucyBhbnl3YXlzLiB3YXJuaW5ncyBhcmUgc3VwcHJlc3NlZCB3aGVuIGludm9rZWQKCWZyb20gZ2xvZ3YoKSwgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9ucyBpZiBzb21lb25lIHBhc3NlcyBhIGxvZwoJbWVzc2FnZSB0aGF0IGNvbWVzIHdpdGggcmVhbGx5IG9ic2N1cmUgZm9ybWF0IHNwZWNpZmljYXRpb25zLgoKVHVlIE9jdCAxMiAxMTo0OTowMCAxOTk5ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnc3RyZnVuY3MuYzogbnVrZWQgb2xkIGdfcHJpbnRmX3N0cmluZ191cHBlcl9ib3VuZCgpIHZlcnNpb24uCgpUdWUgT2N0IDEyIDAzOjM0OjQwIDE5OTkgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdsaWIuaDogYWRkZWQgR0Zsb2F0SUVFRTc1NCBhbmQgR0RvdWJsZUlFRUU3NTQgdW5pb25zIHRvIGFjY2VzcyBzaWduLAoJbWFudGlzc2EgYW5kIGV4cG9uZW50IG9mIElFRUUgZmxvYXRzIGFuZCBkb3VibGVzIChyZXF1aXJlZCBieSB0aGUgbmV3Cgl2ZXJzaW9uIG9mIGdfcHJpbnRmX3N0cmluZ191cHBlcl9ib3VuZCkuIHRoZSB1bmlvbnMgYXJlIGVuZGlhbiBzcGVjaWZpYywKCXdlIGhhbmRsZSBHX0xJVFRMRV9FTkRJQU4gYW5kIEdfQklHX0VORElBTiBhcyBvZiBjdXJyZW50bHkuIGllZWUgZmxvYXRzCglhbmQgZG91YmxlcyBhcmUgc3VwcG9ydGVkICh1c2VkIGZvciBzdG9yYWdlKSBieSBhdCBsZWFzdCBpbnRlbCwgcHBjIGFuZAoJc3BhcmMsIHJlZmVyZW5jZToKCWh0dHA6Ly90d2lzdGVyLm91LmVkdS93b3Jrc2hvcC5kb2NzL2NvbW1vbi10b29scy9udW1lcmljYWxfY29tcF9ndWlkZS9uY2dfbWF0aC5kb2MuaHRtbAoKTW9uIE9jdCAxMSAxODowMTo0OSAxOTk5ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBjb25maWd1cmUuaW46IGFkZGVkIGFkZGl0aW9uYWwgY2hlY2tzIHRvIGZpZ3VyZSBzaXplcyBvZiBzaXplX3QsCglwdHJkaWZmX3QgYW5kIGludG1heF90IChyZXF1aXJlZCBieSBnX3ByaW50Zl9zdHJpbmdfdXBwZXJfYm91bmQpLgoKV2VkIE9jdCAgNiAxMjo0NDoyMyBQRFQgMTk5OSBNYW5pc2ggU2luZ2ggPHlvc2hAZ2ltcC5vcmc+CgoJKiBjb25maWd1cmUuaW46IGJsYWguIHVzZSBHX1dJVEhfQ1lHV0lOIGluc3RlYWQgb2YgR19IQVZFX0NZR1dJTgoKMTk5OS0xMC0wNSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbGliLmg6IChXaW4zMikgRHJvcCB0aGUgbWFwcGluZyBvZiBQT1NJWCBmdW5jdGlvbiBuYW1lcyB0byB0aGUKCXVuZGVyc2NvcmVkIHZlcnNpb25zLCBpdCdzIHVubmVjZXNzYXJ5IGFmdGVyIGFsbC4gV2l0aCBNU1ZDIHdlIGdldAoJdGhlbSBmcm9tIG9sZG5hbWVzLmxpYiwgd2l0aCBnY2MtMi45NSBhbmQgbWluZ3czMiBmcm9tCgktbG1vbGRuYW1lLW1zdmMuIEFkZCBjb21tZW50IGFib3V0IHdoYXQgaGVhZGVycyB0byBpbmNsdWRlIGZvcgoJcHJvdG90eXBlcy4KCgkqIGdsaWJjb25maWcuaC53aW4zMi5pbjogRG9uJ3QgZGVmaW5lIFdJTjMyIGFuZCBOQVRJVkVfV0lOMzIuCgoJKiBnZXJyb3IuYyAoZ19vbl9lcnJvcl9xdWVyeSk6IChXaW4zMikgU2xpZ2h0bHkgaW5jcmVhc2VkIHZlcmJvc2l0eS4KCgkqIGJ1aWxkLWRsbDogRG9uJ3Qgc3RyaXAuCgoJKiB0ZXN0cy9zdHJpbmctdGVzdC5jIHRlc3RzL2Rpcm5hbWUtdGVzdC5jOiBVc2UgR19PU19XSU4zMi4KCgkqIGdsaWIuZGVmOiBBZGQgZ190aHJlYWRfdXNlX2RlZmF1bHRfaW1wbC4KClN1biBPY3QgIDMgMTk6NDY6NTUgUERUIDE5OTkgTWFuaXNoIFNpbmdoIDx5b3NoQGdpbXAub3JnPgoKCSogY29uZmlndXJlLmluOiB1c2UgR19IQVZFX0NZR1dJTiBpbnN0ZWFkIG9mIEdfT1NfRkVBVFVSRV9DWUdXSU4KClN1biBPY3QgIDMgMTk6MjU6NDIgUERUIDE5OTkgTWFuaXNoIFNpbmdoIDx5b3NoQGdpbXAub3JnPgoKCSogYWNjb25maWcuaAoJKiBjb25maWd1cmUuaW4KCSogZ2xpYmNvbmZpZy5oLndpbjMyOiBHX09TX0ZPTyAjZGVmaW5lcy4gSSAqdGhpbmsqIEkgZ290IHRoZSBjeWd3aW4KCWFuZCBiZW9zIHN0dWZmIHJpZ2h0LCBidXQgSSBoYXZlbid0IHRlc3RlZCBpdC4gVGhlIHJlc3BlY3RpdmUKCXBvcnRlcnMgc2hvdWxkIGZpeCBhbnkgc2NyZXd1cHMKCgkqIGdsaWIuaAoJKiBnZXJyb3IuYwoJKiBnbWFpbi5jCgkqIGdtZXNzYWdlcy5jCgkqIGdzY2FubmVyLmMKCSogZ3RocmVhZC5jCgkqIGd0aW1lci5jCgkqIGd1dGlscy5jCgkqIHRlc3RnbGliLmM6IHVzZSBHX09TIHN0dWZmCgpXZWQgU2VwIDIyIDAxOjUzOjE4IDE5OTkgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdsaWIuaCAoTlVMTCk6IGRlZmluZSBOVUxMIGFzICgwTCkgaWYgX19jcGx1c3BsdXMgaXMgZGVmaW5lZCwgdG8KCWF2b2lkICJBTlNJIEMrKyBmb3JiaWRzIGltcGxpY2l0IGNvbnZlcnNpb24gZnJvbSBgdm9pZCAqJyBpbiBhcmd1bWVudAoJcGFzc2luZyIgZXJyb3JzIHVwb24gTlVMTCB1c2FnZSBpbiBDKysgcHJvZ3JhbXMgKGdjYy0yLjk1IGlzIG9uIGNyYWNrCglmb3IgZXJyb3Jpbmcgb3V0IG9uIHRoaXMsIGluc3RlYWQgb2YganVzdCBpc3N1ZWluZyBhIHdhcm5pbmcpLgoKCSogZ2xpYi5oIChnX3RyYXNoX3N0YWNrX3BvcCk6IHVzZSB1bmNhc3RlZCBOVUxMIGFnYWluLgoKRnJpIFNlcCAxNyAxMDoyNDo0NSAxOTk5ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbWVtLmMgKGdfbWVtX2NodW5rX2NvbXB1dGVfc2l6ZSkgKGdfbWVtX2NodW5rX25ldyk6IGFwcGxpZWQKCXBhdGNoIGZyb20gU29lcmVuIFNhbmRtYW5uIDxzYW5kbWFubkBkYWltaS5hdS5kaz4sIHRvIGZvcmNlIG1lbQoJY2h1bmsncyBhcmVhIHNpemVzIHRvIGJlIGEgbXVsdGl0aXBsZSBvZiBhdG9tX3NpemUsIGFuZCB0bwoJZWxpbWluYXRlIHRoZSBNQVhfTUVNX0FSRUEgcmVzdHJpY3Rpb24gb2YgNjU1MzYgYnl0ZXMuIHdlIGFsc28KCWNhdGNoIGNhc2VzIHdoZXJlIHVzZXJzIHBhc3MgYW4gYXJlYSBzaXplIDwgYXRvbSBzaXplIHdpdGggYQoJcmV0dXJuX2lmX2ZhaWwgc3RhdGVtZW50IG5vdyAod2hpY2ggaXMgb2ssIGJlY2F1c2UgcHJldmlvdXNseSB0aGlzCglsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uIGFueXdheXMpLgoKVGh1IFNlcCAxNiAxMzoxOTo1NCAxOTk5ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbGliLmggKGdfdHJhc2hfc3RhY2tfcG9wKTogYWRkIGV4cGxpY2l0IChHVHJhc2hTdGFjayopIGNhc3QgZm9yIE5VTEwKCXBvaW50ZXIgdG8gY3VyZSBBTlNJIEMrKyBlcnJvci4KCk1vbiBTZXAgMTMgMjM6MjU6NTkgMTk5OSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21lc3NhZ2VzLmMgKGdfbG9ndik6IGluIGNhc2Ugd2UgaGF2ZSB0byBhYm9ydCB0aGUgcHJvZ3JhbSwKCWRlYnVnZ2luZyBpcyBlbmFibGVkIGFuZCB3ZSBhcmUgbm90IGNhbGxlZCByZWN1cnNpdmVseSwgdHJ5Cgl0byBhYm9ydCB3aXRoIHJhaXNlIChTSUdUUkFQKSBmaXJzdCwgc28gZGV2ZWxvcGVycyBtYXkgaWdub3JlCgljZXJ0YWluIGZhaWx1cmUgY29uZGl0aW9ucyBkdXJpbmcgZGVidWdnaW5nIHN0YWdlLgoKVGh1IEF1ZyAyNiAxNTowOTozNiAxOTk5ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBNYWtlZmlsZS5hbToKCSogZ21vZHVsZS9NYWtlZmlsZS5hbToKCSogZ3RocmVhZC9NYWtlZmlsZS5hbTogYWRkZWQgLS1leHBvcnQtZHluYW1pYyBzbyB3ZSBjYW4gbG9hZCBkeW5taWMKCW1vZHVsZXMsIChyZXF1aXJlZCwgYWNjb3JkaW5nIHRvIHRoZSBsaWJ0b29sIDEuMy4zIGRvY3UpLgoKMTk5OS0wNy0yMyAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdyYW5kLmMgKGdfcmFuZF9uZXcpOiBVc2UgL2Rldi91cmFuZG9tLCBhcyBpdCBkb2Vzbid0IGJsb2NrLAoJd2hpY2ggL2Rldi9yYW5kb20gbWlnaHQgZG8uIERvIG5vdCBYT1IgdGhlIHRpbWUsIHdoZW4gZ2V0dGluZyB0aGUKCXNlZWQgZm9ybSAvZGV2L3VyYW5kb20sIGFzIHRoaXMgaXMgZ29vZCBpdHNlbGYuIFByZXZlbnQgdGhlCglpbml0aWFsIHNlZWQgZnJvbSBiZWluZyB6ZXJvLCB3aGljaCBjYXVzZXMgdGhlIFBSTkcgdG8gcHJvZHVjZQoJb25seSB6ZXJvcy4gSGludHMgZnJvbSBDb2xpbiBQbHVtYiA8Y29saW5AcGdwLmNvbT4uCgoxOTk5LTA4LTE3ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdsaWIuaCAoZ190cmFzaF9zdGFja19wdXNoKTogQWRkIGEgY2FzdC4KCgkqIGdzbGlzdC5jCgkqIGdsaXN0LmM6IE1ha2UgdGhlIGlubGluZSBmdW5jdGlvbnMgc3RhdGljIGlubGluZSwgYW5kIGFkZAoJc2VwYXJhdGUgZXh0ZXJuIHdyYXBwZXJzLiBOb3QgYWxsIGNvbXBpbGVycyBwcm9kdWNlIGNhbGxhYmxlIGVudHJ5Cglwb2ludHMgZm9yIGlubGluZSBmdW5jdGlvbnMsIGV2ZW4gaWYgZ2NjIGRvZXMuCgpTdW4gQXVnIDE1IDAyOjQ3OjE0IDE5OTkgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdsaWIuaCAoZ190cmFzaF9zdGFja19wb3ApOiBlbGltaW5hdGUgbWVtc2V0KCkgY2FsbCwgc2luY2Ugc3RyaW5nLmgKCWhhcyBub3QgbmVjY2Vzc2FyaWx5IGJlZW4gaW5jbHVkZWQgcHJpb3IgdG8gZ2xpYi5oLgoKTW9uIEF1ZyAgMiAyMTowMzoxMCAxOTk5ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBjb25maWd1cmUuaW46IGFkZGVkIC0tZW5hYmxlLW1zZy1wcmVmaXggb3B0aW9uLgoKCSogZ21lc3NhZ2VzLmMgKGdfbG9nX2RlZmF1bHRfaGFuZGxlcik6IGZlYXR1cmUgInByZ19uYW1lIChwaWQ6JXUpOiAiCglpZiAtLWVuYWJsZS1tc2ctcHJlZml4IHdhcyBzZWxlY3RlZCAodXNlICIocHJvY2VzczoldSk6ICIgaWYKCWdfZ2V0X3ByZ25hbWUgKCkgcmV0dXJucyBOVUxMLCBhbG9uZyB0aGUgbGluZXMgb2YgZ19vbl9lcnJvcl9xdWVyeSkuCgoxOTk5LTA4LTAzICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdsaWIuaAoJKiBnc3RyZnVuY3MuYwoJKiB0ZXN0cy9zdHJmdW5jLXRlc3QuYzogUmVuYW1lIGdfc3RyY2NweSB0byBnX3N0cmNvbXByZXNzIGFuZAoJZ19zdHJlY3B5IHRvIGdfc3RyZXNjYXBlIHBlciBUaW0gSmFuaWsncyBzdWdnZXN0aW9uLiBEcm9wcGVkIHRoZQoJZGVzdGluYXRpb24gcGFyYW1ldGVyLCBhbHdheXMgZ19tYWxsb2MgYSBuZXcgc3RyaW5nLiAgRml4IGJ1ZyBpbgoJZ19zdHJjb21wcmVzcywgb2N0YWwgZGlnaXRzIHdlcmUgZ29iYmxlZCB1cCB3aXRob3V0IGxpbWl0LCBzaG91bGQKCXVzZSBtYXggdGhyZWUuCgoJU291cmNlcyB0aGF0IHVzZSBnX3N0cmVzY2FwZSBtdXN0IGhhdmUgaWZkZWZzIHRvIGJlIGNvbXBpbGFibGUKCWJvdGggd2l0aCBHTGliIDEuMiBhbmQgMS4zLgoKU2F0IEp1bCAzMSAxNzo1MjowMyBQRFQgMTk5OSBNYW5pc2ggU2luZ2ggPHlvc2hAZ2ltcC5vcmc+CgoJKiBnbGliLmgKCSogZ3N0cmZ1bmNzLmM6IHRoZSAjZGVmaW5lIGZvciBnX3N0cmVzY2FwZSBpbnRlcmZlcmVkIHdpdGggdGhlCgljb21waWxhdGlvbiBvZiB0aGUgZnVuY3Rpb24sIHNvIGp1c3QgcmVtb3ZlIHRoZSBmdW5jdGlvbiBhbmQKCW5vdGUgdGhhdCBpdCdzIGRlcHJlY2F0ZWQgaW4gdGhlIGhlYWRlcgoKMTk5OS0wOC0wMSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnc3RyZnVuY3MuYyAoZ19zdHJjY3B5LCBnX3N0cmVjcHkpOiBOZXcgZnVuY3Rpb25zLgoKCSogZ2xpYi5oOiBEZWNsYXJlIGFuZCBkb2N1bWVudCB0aGVtLiBEZWZpbmUgdGhlIGRlcHJlY2F0ZWQKCWdfc3RyZXNjYXBlIGFzIGEgbWFjcm8gdGhhdCBjYWxscyBnX3N0cmVjcHkuCgoJKiB0ZXN0cy9zdHJmdW5jLXRlc3QuYyAobWFpbik6IFRlc3QgdGhlbS4KCgkqIG1ha2VmaWxlLntjeWd3aW4sbXNjfS5pbgoJKiB0ZXN0cy9tYWtlZmlsZS57Y3lnd2luLG1zY30uaW46IFJlbW92ZSBnc3RhY2sgYW5kIGl0cyB0ZXN0Cglwcm9ncmFtLgoKCSogZ2xpYi5kZWY6IEFkZGl0aW9ucyBhbmQgcmVtb3ZhbHMuCgoJKiBSRUFETUUud2luMzI6IEltcHJvdmUgZ2NjIGJ1aWxkIGluc3RydWN0aW9ucy4KCgkqIGJ1aWxkLWRsbDogQWxzbyBidWlsZCBpbXBvcnQgbGlicmFyeSBmb3IgTVNWQy4KClNhdCBKdWwgMjQgMjA6MTE6MzUgMTk5OSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogbWVyZ2VkIEdMaWIgMS4zLjAgd2l0aCBnbGliLTEuMi4zIGZyb20gRnJpIEp1bCAxNiAyMjoxODozNi4KCSogaW5jb3Jwb3JhdGVkIHByb3Bvc2VkIGNsZWFudXBzIGZyb20gZ3RrLWRldmVsLWxpc3QuCgoJKiBidW1wZWQgdmVyc2lvbiBudW1iZXIgdG8gR0xpYi0xLjMuMQoKCSogZ2xpYi5oOgoJKiBncXVldWUuYzoKCSogZ3N0cmluZy5jOgoJKiBnbGlzdC5jOgoJcmVtb3ZlZCBzdHJpbmcgdG9rZW5pc2F0aW9uICh3ZSBnb3QgZ19zdHJzcGxpdCgpIGFuZCBnX3N0cmpvaW4oKQoJYWxyZWFkeSkgYW5kIHJlYWRsaW5lIGZ1bmN0aW9ucy4KCXMvZ19saXN0X2RlbGV0ZS9nX2xpc3RfZGVsZXRlX2xpbmsuCglpbXBsZW1lbnRlZCBnX3NsaXN0X2RlbGV0ZV9saW5rLgoJcmVtb3ZlZCBub3Rpb24gb2YgZ19BVEVYSVQoKSBtYWNybyBpbiBnbGliLmgsIHRoaXMgaXMgYW4gKmludGVybmFsKgoJbWFjcm8sIGdfYXRleGl0KCkgaXMgcHJvdmlkZWQgZm9yIHB1YmxpYyBjb25zdW1wdGlvbi4KCWFkZGVkIEdUcmFzaFN0YWNrIGlubGluZSB1dGlsaXR5IGZ1bmN0aW9ucy4KCXJlaW1wbGVtZW50IGRvdWJsZSBlbmVkZWQgcXVldWVzLgoJcmVtb3ZlZCBHU3RhY2sgaW1wbGVtZW50YXRpb24sIHBlb3BsZSBjYW4gdXNlIGEgcXVldWUgb3IgYSAoc2luZ2x5KQoJbGlua2VkIGxpc3QgZm9yIHRoaXMgdGFzay4KCWRlcHJlY2F0ZWQgZ19zdHJlc2NhcGUoKSwgd2UgbmVlZCB0aGUgU3VuT1MgdmFyaWFudHMgaGVyZS4KCgkqIGdkYXRlLmM6IGFkZGVkIERFQlVHX01TRygpIG1hY3JvIHRvIHdyYXAgb2xkIG1lc3NhZ2VzLgoKCSogKi4qOiBDVlMgbWVyZ2VzLgoKCSogdXBncmFkZSB0byBsaWJ0b29sIDEuMy4zLgoKMTk5OS0wNy0yMSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJV2luMzI6IFdpdGggdGhlIGxhdGVzdCBnY2MgKDIuOTUsIHByZS1yZWxlYXNlKSwgd2UgY2FuIGhhdmUgYmluYXJ5CiAJY29tcGF0aWJpbGl0eSB3aXRoIE1TVkMgYnkgdXNpbmcgdGhlIHN3aXRjaCAtZm5hdGl2ZS1zdHJ1Y3QuIE5vCiAJbG9uZ2VyIGJ1aWxkIERMTHMgd2l0aCAuZ2NjIGluIHRoZSBuYW1lIHdoZW4gdXNpbmcgZ2NjLgoKCSogUkVBRE1FLndpbjMyOiBSZW5ldyBnY2MgYnVpbGQgaW5zdHJ1Y3Rpb25zLgoKCSogYnVpbGQtZGxsOiBDb21tZW50cyBjaGFuZ2UsIGhhbmRsZSBhbHNvIC5hIGZpbGVzLgoKCSogbWFrZWZpbGUuY3lnd2luLmluCgkqIHRlc3RzL21ha2VmaWxlLmN5Z3dpbi5pbjogUmVtb3ZlIC5nY2MgZnJvbSBETEwgbmFtZS4KCjE5OTktMDctMTMgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogUkVBRE1FLndpbjMyOiBDb3JyZWN0IFVSTCBmb3IgbWluZ3cgcnVudGltZSBzb3VyY2VzLgoKCSogYnVpbGQtZGxsOiBDb21iaW5lIGNvbW1hbmRzIHdpdGggJiYuCgoJKiBnbGliLmg6IE1hcCBhbHNvIHJtZGlyKCkgYW5kIGh5cG90KCkgZm9yIE1TVkNSVCBsaWJyYXJ5LgoKCSogbWFrZWZpbGUuY3lnd2luLmluCgkqIHRlc3RzL21ha2VmaWxlLmN5Z3dpbi5pbjogTmV3IERMTCBuYW1pbmcgc3R5bGUuIEdDQy1jb21waWxlZCBETExzIGFyZQogCW5vdyBjYWxsZWQgKi5nY2MuZGxsLCB0byBhdm9pZCBiaW5hcnkgaW5jb21wYXRpYmlsaXRpZXMgd2l0aAogCU1TVkMtY29tcGlsZWQgdmVyc2lvbnMuCgoJKiBtYWtlZmlsZS5tc2MuaW46IENvc21ldGljcy4KCjE5OTktMDctMDcgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBjb25maWd1cmUuaW46IFRlc3QgZm9yIHB0aHJlYWRfam9pbiByYXRoZXIgdGhhbiBmb3IKCXB0aHJlYWRfY3JlYXRlIHRvIGRldGVybWluZSB0aGUgcmlnaHQgdGhyZWFkLWxpYi4gTWFrZXMgaXQgd29yayBvbgoJbWlwcy1zZ2ktaXJpeDYuNS4gSGl0biBmcm9tIHRvIEphcmkgVnVva3NlbnJhbnRhCgk8amF2dUBwaWFuby51eC5waHlzLmp5dS5maT4uCgoxOTk5LTA3LTAyICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIFJFQURNRS53aW4zMjogTm90ZSBhYm91dCBuZWVkIHRvIGZpeCBhbm90aGVyIGJ1ZyBpbiB0aGUgbWluZ3czMgogCWhlYWRlcnMuCgoJKiBtYWtlZmlsZS5tc2MuaW46IERlYnVnZ2luZyB0dXJuZWQgb24gdmlhIGFuIG5tYWtlIHZhcmlhYmxlLAoJbm8gbmVlZCB0byBlZGl0IHRoZSBtYWtlZmlsZS4KCjE5OTktMDctMDEgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBjb25maWd1cmUuaW4sIGFjY29uZmlnLmgsIGd1dGlscy5jOiBBZGRlZCBhIGdfbWVtbW92ZQoJcmVwbGFjZW1lbnQgZm9yIHBsYXRmb3JtcyB3aXRob3V0IG1lbW1vdmUsIHdoZXJlIGJjb3B5IGNhbid0CgloYW5kbGUgb3ZlcmxhcHBpbmcgY29waWVzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjaGVja3MsIHdoaWNoIGlzCgl0YWtlbiBmb3JtIHRoZSBQRVJMIENvbmZpZ3VyZSByb3V0aW5lLgoKCSogZ2xpYi5oOiBVcGRhdGVkIHRoZSBjb21tZW50YXJ5IGFib3V0IGdfbWVtbW92ZSB0byBiZSByaWdodCBhbmQKCW1vcmUgR0xpYi1saWtlLgoKCSogY29uZmlndXJlLmluOiBSZW1vdmVkIHRlc3QgZm9yIHJhbmRfciwgYXMgaXQgaXNuJ3QgdXNlZCBhbnltb3JlLgoKMTk5OS0wNi0zMCAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdsaWIuaCwgZ3JhbmQuYzogRmluYWxseSByZW1vdmVkIHRoZSBnX3JhbmRvbV9ub3JtYWwgYW5kCglnX3JhbmRfbm9ybWFsIGZ1bmN0aW9ucy4KCjE5OTktMDYtMjggIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ2xpYi5kZWY6IEFkZCBtaXNzaW5nIGV4cG9ydCBvZiBnX3N0cm5jYXNlY21wLgoKMTk5OS0wNi0yMSAgSm9zZSBNZXJjYWRvICA8am1lcmNhZG9AbWl0LmVkdT4KCgkqIGdsaWIuc3BlYy5pbjogQ2hhbmdlZCB2ZXJzaW9uIG51bWJlciAoMS4xLT4xLjMpIGluIGZpbGVzIHNlY3Rpb24KCXRvIGFsbG93IHJwbSB0byBidWlsZCBwYWNrYWdlcyBhZ2Fpbi4KCjE5OTktMDYtMjEgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogUkVBRE1FLndpbjMyOiBVcGRhdGUgdGhlIHB0aHJlYWRzIHNuYXBzaG90IHZlcnNpb24gd2Ugd2FudC4KCUFkdmljZSBob3cgdG8gaGFuZC1leHBhbmQgdGhlIG1ha2VmaWxlLiouaW4gZmlsZXMuCgoJKiBjb25maWcuaC53aW4zMi5pbjogRGVmaW5lIHZhbHVlcyBuZWVkZWQgYnkgU2ViYXN0aWFuIFdpbGhlbG1pJ3MKCW5ldyB0aHJlYWQgc3R1ZmYuCgoJKiBnbGliLmRlZjogQWRkIG5ldyBmdW5jdGlvbnMuCgoJKiBnbGliY29uZmlnLmgud2luMzIuaW46IFVwZGF0ZSB0aGUgcHRocmVhZHMgc25hcHNob3QgdmVyc2lvbi4KCUZpeCB0eXBvLgoKCSogZ3RocmVhZC5jOiBJbmNsdWRlIGNvbmZpZy5oLCBndWFyZCBpbmNsdXNpb24gb2YgdW5pc3RkLmguICBXaGVuCiAJdXNpbmcgZ2NjIG9uIFdpbjMyLCBnX3RocmVhZF9mdW5jdGlvbnNfZm9yX2dsaWJfdXNlIG11c3QgYmUgbWFya2VkCiAJZm9yIGV4cG9ydCBoZXJlLCB0b28uCgoJKiBndGltZXIuYzogSW1wbGVtZW50IGdfdXNsZWVwIG9uIG5hdGl2ZSBXaW4zMiB1c2luZyBTbGVlcCAod2hpY2gKCW9ubHkgaGFzIG1pbGxpc2Vjb25kIGdyYW51bGFyaXR5LCB0aG91Z2gpLgoKCSogbWFrZWZpbGUuY3lnd2luLmluCgkqIG1ha2VmaWxlLm1zYy5pbjogVXBkYXRlIHB0aHJlYWRzIHNuYXBzaG90IHZlcnNpb24uIEZpbGUKCW5hbWUgY2hhbmdlcy4gUmVtb3ZlIHRlc3RndGhyZWFkLgoKCSogdGVzdHMvbWFrZWZpbGUuY3lnd2luLmluCgkqIHRlc3RzL21ha2VmaWxlLm1zYy5pbjogQWRkIHRocmVhZC10ZXN0LiBMaW5rIHdpdGggZ3RocmVhZCBsaWIuCgoxOTk5LTA2LTE4ICBKZWZmIEdhcnppayAgPGpnYXJ6aWtAcG9ib3guY29tPgoKCSogdGVzdHMvTWFrZWZpbGUuYW06ICBSZS1vcmRlciB0ZXN0cyBpbiBhbHBoYSBvcmRlci4KCjE5OTktMDYtMTggIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBjb25maWd1cmUuaW46IENoYW5nZWQgdGVzdCBmb3IgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSBmcm9tCglBQ19UUllfQ09NUElMRSB0byBBQ19UUllfTElOSy4KCjE5OTktMDYtMTcgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBjb25maWd1cmUuaW4sIGFjZ2xpYi5tNCwgYWNjb25maWcuaCwgZ2xpYi5oLCBndGhyZWFkLmM6CglDb21wbGV0ZWQgdGhlIHRocmVhZCBzdXBwb3J0IGluIEdMaWIuIFRocmVhZCBjcmVhdGlvbiwKCXByaW9yaXRpemluZyB0aHJlYWRzLCB5aWVsZGluZywgam9pbmluZyB0aHJlYWRzIGFzIHdlbGwgYXMKCXJlYWRlci93cml0ZXIgbG9ja3MgYW5kIHJlY3Vyc2l2ZSBtdXRleGVzIGFyZSBub3cgaW4gcGxhY2UuIFBsZWFzZQoJdGVzdCBoZWF2aWx5IG9uIHlvdXIgcGxhdGZvcm0uIEl0IGlzIHNvIGZhciB0ZXN0ZWQgb24KCUxpbnV4L2kzODYvcHRocmVhZHMsIFNvbGFyaXMvU3BhcmMvcHRocmVhZHMgYW5kCglTb2xhcmlzL1NwYXJjL3NvbGFyaXN0aHJlYWRzLgoKCSogZ3RpbWVyLmMsIGdsaWIuaDogSW1wbGVtZW50IGdfdXNsZWVwIChndWxvbmcgbWljcm9zZWNvbmRzKSBmb3IKCXRocmVhZCBzYWZlIHNsZWVwaW5nLiAoc2xlZXAoKSBpcyBub3QgTVQtc2FmZSBhdCBhbGwhKQoKCSogZ3V0aWxzLmM6IEF2b2lkIGNvbXBpbGVyIHdhcm5pbmcuCgoJKiB0ZXN0cy9NYWtlZmlsZS5hbSwgdGVzdHMvdGhyZWFkLXRlc3QuYzogTmV3IHByb2dyYW0gdG8gdGVzdCBzb21lCglhc3BlY3RzIG9mIHRoZSB0aHJlYWQgaW1wbGVtZW50YXRpb24uCgoJKiBndGhyZWFkLmMsIE1ha2VmaWxlLmFtOiBSZW5hbWVkIGZyb20gZ211dGV4LmMgdG8gcmVmbGVjdCB0aGUKCWNoYW5nZSBvZiBjb250ZW50LgoKCSogY29uZmlndXJlLmluOiBQdXJnZWQgYWxsIGFwcGVhcmFuY2VzIG9mIG5zcHIuIAoKV2VkIEp1biAgMiAxMTo0Mjo0NiBQRFQgMTk5OSBNYW5pc2ggU2luZ2ggPHlvc2hAZ2ltcC5vcmc+CgoJKiBhY2luY2x1ZGUubTQKCSogY29uZmlnLmd1ZXNzCgkqIGNvbmZpZy5zdGF0dXMKCSogbHRjb25maWcKCSogbHRtYWluLnNoOiB1cGdyYWRlIHRvIGxpYnRvb2wgMS4zLjIgKEJlT1MgY2hhbmdlcyBtZXJnZWQpCgoxOTk5LTA1LTI5ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdzdHJmdW5jcy5jIChnX3N0cmVzY2FwZSk6IEJhY2tzbGFzaGlmeSBhbHNvICciJyBjaGFyYWN0ZXJzLgoKCSogZ2xpYi5oOiBEb2N1bWVudCBnX3N0cmVzY2FwZS4KCjE5OTktMDUtMTIgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ2xpYi5oIChXaW4zMik6IE1hcCBmaWxlbm8gdG8gX2ZpbGVubyBmb3IgbWluZ3czMi4gTWFwIGZzdGF0IHRvCiAJX2ZzdGF0LgoKCSogUkVBRE1FLndpbjMyOiBBZHZpY2UgYWxzbyB0byByZW1vdmUgLWxtb2xkbmFtZSBpbiB0aGUKIAlwYXRjaCB0byB0aGUgZWdjcy0xLjEuMiBzcGVjIGZpbGUuCgpXZWQgTWF5IDEyIDAwOjIzOjU1IENEVCAxOTk5IFNoYXduIFQuIEFtdW5kc29uIDxhbXVuZHNvbkBndGsub3JnPgoKCSogZ21vZHVsZS9NYWtlZmlsZS5hbTogQW5vdGhlciBzbWFsbCBmaXguCgoxOTk5LTA1LTA4ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIE1ha2VmaWxlLmFtIHRlc3RzL01ha2VmaWxlLmFtOiBDb3JyZWN0IHJ1bGVzIGZvciBtYWtpbmcgdGhlCgl3aW4zMi1yZWxhdGVkIGZpbGVzIHRoYXQgYXJlIG1hZGUgZnJvbSBjb3JyZXNwb25kaW5nIC5pbiBmaWxlcy4KCUlzIHRoZXJlIGEgY2xlYW5lciB3YXkgdGhhbiBleHBsaWNpdGx5IHdyaXRpbmcgcnVsZXMgdGhhdCBpbnZva2UKCWNvbmZpZy5zdGF0dXM/CgpGcmkgSnVsIDE2IDIyOjE4OjM2IFBEVCAxOTk5IE1hbmlzaCBTaW5naCA8eW9zaEBnaW1wLm9yZz4KCgkqIGx0Y29uZmlnCgkqIGx0bWFpbi5zaDogdXBncmFkZSB0byBsaWJ0b29sIDEuMy4zCgoxOTk5LTA2LTE4ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ2RhdGUuYywgZ3N0cmZ1bmNzLmMsIGdzdHJpbmcuYzogRml4ZWQgdGhlIHVzZSBvZiB0aGUKCWlzLi4uLi4gYW5kIHRvLi4uLi4gbWFjcm9zLCB3aGljaCB0YWtlIHVuc2lnbmVkIGNoYXJzLCBub3QgY2hhcnMhCglUaGFua3MgdG8gTW9ydGVuIFdlbGluZGVyIDx0ZXJyYUBkaWt1LmRrPiBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuCgpUaHUgSnVuICAzIDE2OjMwOjMxIFBEVCAxOTk5IE1hbmlzaCBTaW5naCA8eW9zaEBnaW1wLm9yZz4KCgkqIGdlcnJvci5jIChnX29uX2Vycm9yX3F1ZXJ5KTogY2hlY2sgaXNhdHR5KCkgYmVmb3JlIHF1ZXJ5aW5nIHNvCgl3ZSBkb24ndCBsb29wIGVuZGxlc3NseQoKU2F0IE1heSAyOSAxMToxNjoyOSBQRFQgMTk5OSBNYW5pc2ggU2luZ2ggPHlvc2hAZ2ltcC5vcmc+CgoJKiBhY2luY2x1ZGUubTQKCSogY29uZmlnLmd1ZXNzCgkqIGNvbmZpZy5zdGF0dXMKCSogbHRjb25maWcKCSogbHRtYWluLnNoOiB1cGdyYWRlIHRvIGxpYnRvb2wgMS4zLjIKCjE5OTktMDUtMjYgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnbWFpbi5jOiBwcm92aWRlIGEgcG9sbCBwcm90b3R5cGUgZm9yIFN1bk9TLCBhcyB0aGV5IGRvIG5vdCBkbwoJaXQgc2VsZi4gSGludCBmcm9tIENocmlzdGlhbiBQYXJnIDxjcGFyZ0Bmcy1kZXNpZ24uZGU+LgoKVHVlIE1heSAyNSAxMjoyMzowNyAxOTk5ICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdzdHJmdW5jcy5jIChnX3N0cmNodWcpOiBVc2UgZ19tZW1tb3ZlKCkgbm90IG1lbW1vdmUoKS4KCShSZXBvcnRlZCBieSBDaGFybGVzIExldmVydCA8Y2hhcmxlc0Bjb21tLnBvbHltdGwuY2E+KQoKTW9uIE1heSAxMCAyMjowMzo1MiBDRFQgMTk5OSBTaGF3biBULiBBbXVuZHNvbiA8YW11bmRzb25AZ3RrLm9yZz4KCgkqIFJlbGVhc2VkIEdMaWIgMS4yLjMKCjE5OTktMDUtMDggIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogTWFrZWZpbGUuYW0gdGVzdHMvTWFrZWZpbGUuYW06IENvcnJlY3QgcnVsZXMgZm9yIG1ha2luZyB0aGUKCXdpbjMyLXJlbGF0ZWQgZmlsZXMgdGhhdCBhcmUgbWFkZSBmcm9tIGNvcnJlc3BvbmRpbmcgLmluIGZpbGVzLgoJSXMgdGhlcmUgYSBjbGVhbmVyIHdheSB0aGFuIGV4cGxpY2l0bHkgd3JpdGluZyBydWxlcyB0aGF0IGludm9rZQoJY29uZmlnLnN0YXR1cz8KClNhdCBNYXkgIDEgMTA6MTg6MDEgUERUIDE5OTkgTWFuaXNoIFNpbmdoIDx5b3NoQGdpbXAub3JnPgoKCSogYWNpbmNsdWRlLm00CgkqIGNvbmZpZy5ndWVzcwoJKiBjb25maWcuc3RhdHVzCgkqIGx0Y29uZmlnCgkqIGx0bWFpbi5zaDogdXBncmFkZSB0byBsaWJ0b29sIDEuMwoKMTk5OS0wNC0zMCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBNYWtlZmlsZS5hbTogRG9uJ3QgZGlzdHJpYnV0ZSBnbGliY29uZmlnLmgud2luMzIuaW4sIGJ1dAoJZ2xpYmNvbmZpZy5oLndpbjMyLiBHZW5lcmF0ZSBpdCB3aGVuIG1ha2luZyBhIGRpc3QuIEFsc28gZ2VuZXJhdGUKCW1ha2VmaWxlLm1zYyBhbmQgY29uZmlnLmgud2luMzIgZnJvbSBjb3JyZXNwb25kaW5nIC5pbiBmaWxlcyB3aGVuCgltYWtpbmcgZGlzdC4KCgkqIGNvbmZpZ3VyZS5pbjogQWxzbyBzdWJzdGl0dXRlIEBHTElCX0lOVEVSRkFDRV9BR0VAIGFuZAoJQEdMSUJfQklOQVJZX0FHRUAgKG5lZWRlZCBpbiBjb25maWcuaC53aW4zMikuCgoJKiBnbGliY29uZmlnLmgud2luMzIuaW46IFVzZSBzdGF0aWMgbXV0ZXggc3RydWN0dXJlIGFuZCBpbml0aWFsCgl2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSAxOTk5LTA0LTA3IHNuYXBzaG90IG9mIHB0aHJlYWRzLXdpbjMyLgoKCSogdGVzdHMvTWFrZWZpbGUuYW06IERpc3RyaWJ1dGUgbWFrZWZpbGUubXNjLiBHZW5lcmF0ZSBpdCB3aGVuCgltYWtpbmcgZGlzdC4KCgkqIHRlc3RzL21ha2VmaWxlLm1zYy5pbjogTmV3IGZpbGUuCgoJKiB0ZXN0cy9ub2RlLXRlc3QuYzogSW5jbHVkZSA8c3RkbGliLmg+IGZvciBleGl0KCkuCgpUaHUgQXByIDI5IDAyOjE2OjM2IDE5OTkgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdzdHJmdW5jcy5jOiBtaW5vciBjb2RlIGNsZWFudXBzLgoKVHVlIEFwciAyNyAxMzoxMToyOSAxOTk5ICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdtYWluLmMgKGdfbWFpbl9wb2xsKTogTWFzayBvdXQgRVJSIEhVUCBhbmQgTlZBTCBmcm9tCgl0aGUgZXZlbnRzIGZpZWxkIHNvIHdlIGRvbid0IGdpdmUgSVJJWCBmaXRzLgoKVHVlIEFwciAyMCAwODo0MjoyMiAxOTk5ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnc2Nhbm5lci5jIChnX3NjYW5uZXJfdW5leHBfdG9rZW4pOiBiZWhhdmUgY29uc2VydmF0aXZlIHdpdGgKCUdfVE9LRU5fSURFTlRJRklFUl9OVUxMIGFuZCBhbHdheXMgYXNzdW1lIHNjYW5uZXItPnZhbHVlLnZfc3RyaW5nCgl0byBiZSAibnVsbCIgaW4gdGhhdCBjYXNlLgoKMTk5OS0wNC0yMCAgSGF2b2MgUGVubmluZ3RvbiAgPGhwQHBvYm94LmNvbT4KCgkqIGd1dGlscy5jIChnX3ZzbnByaW50Zik6ICBXaGVuIHVzaW5nIHRoZSB2c25wcmludGYoKQoJaW1wbGVtZW50YXRpb24sICdcMCctdGVybWluYXRlIHRoZSByZXN1bHRpbmcgc3RyaW5nCglhbmQgcmV0dXJuIGl0cyBsZW5ndGggcmF0aGVyIHRoYW4gLTEuCgpNb24gQXByIDE5IDEzOjQyOjIxIDE5OTkgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ21haW4uYyAoZ19tYWluX2l0ZXJhdGUpOiBBZGRlZCBtaXNzaW5nCgkjaWZkZWYgR19USFJFQURTX0VOQUJMRUQuIChJIG5ldmVyIGxpa2VkIEdfVEhSRUFEU19FTkFCTEVEIGluCgl0aGUgZmlyc3QgcGxhY2UhKQoKMTk5OS0wNC0xOCAgSGF2b2MgUGVubmluZ3RvbiAgPGhwQHBvYm94LmNvbT4KCgkqIGd1dGlscy5jIChnX3NucHJpbnRmKTogV2hlbiB1c2luZyB0aGUgdnNucHJpbnRmKCkKCWltcGxlbWVudGF0aW9uLCAnXDAnLXRlcm1pbmF0ZSB0aGUgcmVzdWx0aW5nIHN0cmluZwoJYW5kIHJldHVybiBpdHMgbGVuZ3RoIHJhdGhlciB0aGFuIC0xLgoKRnJpIEFwciAxNiAwNjo1MjowNyAxOTk5ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnc2Nhbm5lci5jIChnX3NjYW5uZXJfdW5leHBfdG9rZW4pOiBmZWF0dXJlIEdfVE9LRU5fRU9GIGFzIGEgdmFsaWQKCWV4cGVjdGVkIHRva2VuIGFzIHdlbGwsIHNvIHdlIGdldCAiLSBleHBlY3RlZCBlbmQgb2YgZmlsZSIgaW5zdGVhZCBvZgoJIi0gZXhwZWN0ZWQgKHVua25vd24pIHRva2VuIDwwPiIuCgpUdWUgQXByIDEzIDE2OjE2OjE0IENEVCAxOTk5IFNoYXduIFQuIEFtdW5kc29uIDxhbXVuZHNvbkBndGsub3JnPgoKCSogUmVsZWFzZWQgR0xpYiAxLjIuMgoKMTk5OS0wNC0xMiAgRWxsaW90IExlZSAgPHNvcHdpdGhAbWg2OS5taC5jdWMuZWR1PgoKCSogZ19zdHJjaHVnKCk6IHMvc3RyY3B5L21lbW1vdmUvCgoxOTk5LTA0LTEyICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogY29uZmlndXJlLmluOiBBZGp1c3RlZCB0aGUgdGVzdCBmb3IgYW4gdW5pbXBsZW1lbnRlZAoJZ2V0cHd1aWRfci4gSW5mbyBmcm9tIE1pY2hhZWwgUHJ1ZXR0IDxtaWtlcEB1Z2NzLmNhbHRlY2guZWR1Pi4KClN1biBBcHIgMTEgMTU6MDc6MzQgMTk5OSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogY29uZmlndXJlLmluOiBidW1wZWQgdmVyc2luIG51bWJlciB0byBHTGliIDEuMi4yLCBpbnRlcmZhY2UgMiwKCWJpbmFyeSAyLgoKCSogTkVXUzogdXBkYXRlcy4KClN1biBBcHIgMTEgMTQ6Mzc6MDYgMTk5OSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ3N0cmZ1bmNzLmMgKGdfc3RyY2FzZWNtcCk6IGFsd2F5cyBjaGVjayBmb3IgczEsIHMyICE9IE5VTEwuCgpTYXQgQXByIDEwIDE5OjMwOjUwIDE5OTkgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdsaWIuaDogcmVtb3ZlZCBicmFjZXMgYXJvdW5kIGlubGluZSBzdHJpbmdzIGZvciB0aGUgR19HTlVDX0ZVTkNUSU9OCglhbmQgR19HTlVDX1BSRVRUWV9GVU5DVElPTiBtYWNyb3MsIHNvIHRoZSBtYWNyb3MgY2FuIGJlIHVzZWQgZm9yCgljb21waWxlIHRpbWUgc3RyaW5nIGNvbmNhdGVuYXRpb24uCgpUaHUgQXByICA4IDE5OjUzOjE5IDE5OTkgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ21haW4uYyAoZ19tYWluX2l0ZXJhdGUpOiBDaGVjayBmb3IgdHdvIHRocmVhZHMKCWNhbGxpbmcgZ19tYWluX2l0ZXJhdGUgYXQgb25jZS4KCgkqIGdtYWluLmM6IElmIHRoZSBzZXQgb2YgcG9sbCBmaWxlIGRlc2NyaXB0b3JzIGNoYW5nZXMKCWR1cmluZyBhIGNhbGwgdG8gcG9sbCgpLCBhYm9ydCB0aGF0IGNhbGwsIGFuZCBzdGFydAoJYSBuZXcgcG9sbC4gTXkgdGVzdCBwcm9ncmFtIHN0aWxsIHNlZ2ZhdWx0cwoJb2JzY3VyZWx5IG9uIGdsaWJjIDIuMCAoaW4gcmVhZCgpISEhKSwgYnV0IG5vdyBpdCB3b3JrcyBvbgoJZ2xpYmMgMi4xLCBzbyBJJ2xsIGJsYW1lIHNvbWV0aGluZyBlbHNlIGZvciB0aGUgb3RoZXIgc2VnZmF1bHQuCgoxOTk5LTAzLTMxICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogY29uZmlndXJlLmluOiBGaXhlZCBzbGlnaHQgYnVnLCB0aGF0IG1hZGUgY29uZmlndXJlIGhhbmcgb24gc29tZQoJc3lzdGVtcy4gUGxlYXNlIGRvIG5vdCBtZXJnZSB0aGlzIGludG8gMS4zIGJyYW5jaC4gSXQncyB0YWtlbiBjYXJlCglvZiBkaWZmZXJlbnRseSB0aGVyZS4gSW5mbyBmcm9tIEouIFJoZXR0IEF1bHRtYW4KCTxjdXBsYW5AYWxsZXkuZ2F0b3IubmV0PgoKV2VkIE1hciAyNCAyMToyMzo0NyBDU1QgMTk5OSBTaGF3biBULiBBbXVuZHNvbiA8YW11bmRzb25AZ3RrLm9yZz4KCgkqIFJlbGVhc2VkIEdMaWIgMS4yLjEKCgkqIFJFQURNRToKCSAgSU5TVEFMTDogCgkgIE5FV1M6IAoJICBzYW5pdHlfY2hlY2s6IHVwZGF0ZWQKCgkqIGdsaWJjb25maWcuaC53aW4zMi5pbjoKCSAgTWFrZWZpbGUuYW06CiAJICBkb2NzL2dsaWItY29uZmlnLjEuaW46CgkgIGRvY3MvTWFrZWZpbGUuYW06IEFkZGVkIGZpbGVzIHVzZWQgdG8gZ2VuZXJhdGUgbmV3IGZpbGVzLgoKCSogZ2xpYmNvbmZpZy5oLndpbjMyOgoJICBkb2NzL2dsaWItY29uZmlnLjE6IFJlbW92ZWQsIG5vdyBnZW5lcmF0ZWQuCgoJKiBjb25maWd1cmUuaW46IEFkZGVkIHRvIG91dHB1dCBub3ctZ2VuZXJhdGVkIGZpbGVzLgoKVHVlIE1hciAyMyAxMzo0MzozOSBQU1QgMTk5OSBNYW5pc2ggU2luZ2ggPHlvc2hAZ2ltcC5vcmc+CgoJKiBnaW91bml4LmM6IGFkZCB1c2VyX2RhdGEgcGFyYW0gdG8gY2hlY2sgYW5kIHByZXBhcmUgZnVuY3Rpb25zCgpNb24gTWFyIDIyIDAzOjU0OjQzIDE5OTkgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdsaWIuaDoKCSogZ21haW4uYzogYWRkIHVzZXJfZGF0YSB0byB0aGUgR1NvdXJjZSAtPmNoZWNrIGFuZCAtPnByZXBhcmUKCWZ1bmN0aW9ucywgc28gaXQgY2FuIGJlIHVzZWQgdG8gZS5nLiBwYXNzIGEgR1BvbGxGZC4KCShnX21haW5fcG9sbCk6IG9ubHkgYWRkIHBvbGwgcmVjb3JkcyB3aXRoIGFuIGV2ZW50cyBtYXNrICE9IDAgdG8gdGhlCglmZF9hcnJheS4gZG9uJ3QgZXZlbiBib3RoZXIgY2FsbGluZyBwb2xsX2Z1bmMoKSBpZiBmZHM9dGltZW91dD0wLgoJYWRkZWQgZGVidWdnaW5nIHByaW50b3V0cyBhcm91bmQgcG9sbF9mdW5jKCkgaW52b2NhdGlvbiB0aGF0IGNhbiBiZQoJZW5hYmxlZCB3aXRoICNkZWZpbmUgR19NQUlOX1BPTExfREVCVUcuCgpGcmkgTWFyIDE5IDE2OjI5OjUwIFBTVCAxOTk5IE1hbmlzaCBTaW5naCA8eW9zaEBnaW1wLm9yZz4KCgkqIGFjaW5jbHVkZS5tNAoJKiBjb25maWcuZ3Vlc3MKCSogY29uZmlnLnN1YgoJKiBsdGNvbmZpZwoJKiBsdG1haW4uc2g6IHVwZ3JhZGUgdG8gbGlidG9vbCAxLjJmCgoJKiBhdXRvZ2VuLnNoOiBsaWJ0b29sIGlzIG5vdCByZXF1aXJlZCB0byBhdXRvZ2VuIGdsaWIKCgkqIGFjY29uZmlnLmg6IHJlbW92ZSBXSVRIX1NZTUJPTF9VTkRFUlNDT1JFIChub3QgZXhwbGljdGx5CgluZWVkZWQpCgoxOTk5LTAzLTE4ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ21lbS5jOiBGaXhlZCBhbm90aGVyIHN0dXBpZCBmYXVsdCBvZiBtaW5lOiBEaWQKCXMvZ19zdGF0aWNfL2dfcHJpdmF0ZV8vZwoKV2VkIE1hciAxNyAwMzoxNzo0MiAxOTk5ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBjb25maWd1cmUuaW4gYnVtcGVkIHZlcnNpbiBudW1iZXIgdG8gR0xpYiAxLjIuMSwgaW50ZXJmYWNlIDEsCgliaW5hcnkgMS4KCgkqIE5FV1M6IHVwZGF0ZXMuCgoJKiBnbGliLmg6IGFkZGVkIEdMSUJfQ0hFQ0tfVkVSU0lPTigpIG1hY3JvIHNpbWlsYXIgdG8KCUdUS19DSEVDS19WRVJTSU9OKCkuCgpTdW4gTWFyIDE0IDE3OjUwOjM1IDE5OTkgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdtZW0uYyAoZ19tZW1fY2h1bmtfKik6IGNoYW5nZWQgYSBidW5jaCBvZiBnX2Fzc2VydCgpIHN0YXRlbWVudHMKCXRvIGdfcmV0dXJuX2lmX2ZhaWwoKS4KCShnX21lbV9wcm9maWxlKTogCgkoZ19tZW1fY2h1bmtfcHJpbnQpOiAKCShnX21lbV9jaHVua19pbmZvKTogcmVtb3ZlZCBzb21lIGV4dHJhbmVvdXMgIlxuInMgYXQgdGhlIGVuZCBvZiB0aGUgbG9nCgltZXNzYWdlcy4KCgkqIGd0aW1lci5jIChnX3RpbWVyXyopOgljaGFuZ2VkIGEgYnVuY2ggb2YgZ19hc3NlcnQoKSBzdGF0ZW1lbnRzCgl0byBnX3JldHVybl9pZl9mYWlsKCkuCgkqIGdyZWwuYyAoZ18qKTogY2hhbmdlZCBhIGJ1bmNoIG9mIGdfYXNzZXJ0KCkgc3RhdGVtZW50cyB0bwoJZ19yZXR1cm5faWZfZmFpbCgpIGFuZCBhZGRlZCBzb21lIGV4dHJhIG9uZXMgdG8gY2hlY2sgcmVsYXRpb24gIT0gTlVMTC4KCjE5OTktMDMtMTIgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBjb25maWd1cmUuaW46IEFsc28gYWNjZXB0IF9QY3RpbWVfciBpbnN0ZWFkIG9mIGN0aW1lX3IsIHdoaWxlCglzZXJhY2hpbmcgZm9yIHRoZSByaWdodCBgX1JFRU5UUkFOVCcgZmxhZy4gVGhpcyBpcyBmb3IgRGlnaXRhbAoJVU5JWCA0LjBkLiBUaGFua3MgdG8gU2FzY2hhIEJyYXdlciA8c2JAYWRhc3lzLmNoPi4KClR1ZSBNYXIgIDkgMjM6MjU6NTAgMTk5OSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogY29uZmlndXJlLmluOiBjaGVjayBmb3Igd29ya2luZyByZWFsbG9jIChOVUxMLCkuCgkqIGdtZW0uYyAoZ19yZWFsbG9jKTogdXNlIG1hbGxvYygpIGZvciBpbml0aWFsIGFsbG9jYXRpb24gb24gc3lzdGVtcwoJd2hlcmUgcmVhbGxvYyhOVUxMLCkgd2lsbCBub3Qgd29yayAodGhpcyBpcyB0aGUgY2FzZSBvbiBTdW5PUywgcmVwb3J0ZWQKCWJ5IFRvbSBHZWlnZXIpLgoKTW9uIE1hciAgOCAwNzo0MjowOCAxOTk5ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnaG9vay5jIChnX2hvb2tfdW5yZWYpOiB3aGVuICFob29rX2xpc3QtPmlzX3NldHVwLCB3cmFwIHRoZQoJZmxhZyBhcm91bmQgdGhlIGNhbGwgdG8gZ19ob29rX2ZyZWUoKSB0byBhdm9pZCBzcHVyaW91cwoJd2FybmluZ3MgKGhhcHBlbnMgZHVyaW5nIGRlc3RydWN0aW9uIHBoYXNlKS4KCjE5OTktMDMtMDMgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnbGliY29uZmlnLmgud2luMzIsIGNvbmZpZy5oLndpbjMyOiBNb3ZlZCBHX1RIUkVBRFNfSU1QTF9QT1NJWAoJZnJvbSBjb25maWcuaC53aW4zMiB0byBnbGliY29uZmlnLmgud2luMzIKCgkqIGFjY29uZmlnLmgsIGNvbmZpZ3VyZS5pbiwgY29uZmlnLmgud2luMzI6IEFkZGVkIHRlc3QgZm9yIERDRQoJdmVyc2lvbnMgb2YgbXV0ZXhfdHJ5bG9jayBhbmQgY29uZF90aW1lZHdhaXQuIFRoZSB3aW4zMiB2ZXJzaW9ucwoJYXJlIHBvc2l4LCBhcmVuJ3QgdGhleT8KCjE5OTktMDMtMDIgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnbWVtLmM6IEZpeGVkIGEgc3R1cGlkIGN1dCduJ3Bhc3RlIGVycm9yIG9mIG1pbmUuIFRoYW5rcyB0bwoJRnJpZWRyaWNoIERvbWluaWN1cyA8RnJpZWRyaWNoLkRvbWluaWN1c0BpbmthLmRlPgoKMTk5OS0wMy0wMSAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGd1dGlscy5jIChnX2dldF9hbnlfaW5pdCk6IEZpeGVkIHlldCBhbm90aGVyIGJsb29keQoJaW1wbGVtZW50YXRpb24gb2YgZ2V0cHd1aWRfciBvbiBBSVguIFRoYW5rcyB0byBPbGFmIERpZXRzY2hlCgk8b2xhZi5kaWV0c2NoZStsaXN0Lmd0a0BuZXRjb2xvZ25lLmRlPi4gSSB3b3VsZCBsaWtlIGEgY29uZmlndXJlCgl0ZXN0IGJldHRlciB0aGFuIHRoYXQsIGJ1dCBoYXZlIG5vIGlkZWEsIGhvdyB0byBkbyB0aGF0IGVhc2lseS4KClN1biBGZWIgMjEgMjI6MTE6NTEgQ1NUIDE5OTkgIFNoYXduIFQuIEFtdW5kc29uIDxhbXVuZHNvbkBndGsub3JnPgoKCSogUmVsZWFzZWQgR0xpYiAxLjIuMAoKCSogQVVUSE9SUzogdXBkYXRlZAoKV2VkIEZlYiAyNCAwMDowODo0MiBDU1QgMTk5OSBTaGF3biBULiBBbXVuZHNvbiA8YW11bmRzb25AZ3RrLm9yZz4KCgkqICouW2NoXTogaW5zZXJ0ZWQgYWRkaXRpb25hbCBub3RlIHRvIGxvb2sgZm9yIENoYW5nZUxvZyBhbmQKCSAgQVVUSE9SUyBmaWxlIGZvciBhIGxvZyBvZiBtb2RpZmljYXRpb25zLgoKU3VuIEZlYiAyMSAxNDowMTowMCAxOTk5ICBEciBNaWtlIDxkcm1pa2VAcmVkaGF0LmNvbT4KCgkqIE1hZGUgc3BlY2ZpbGUgZ2VuZXJhdGVkLCB0d2Vha2VkIHNsaWdodGx5CgpTYXQgTWF5ICA4IDA2OjAwOjE3IENEVCAxOTk5IFNoYXduIFQuIEFtdW5kc29uIDxhbXVuZHNvbkBndGsub3JnPgoKCSogY29uZmlndXJlLmluCgkgIGdtb2R1bGUvTWFrZWZpbGUuYW0KCSAgZ3RocmVhZC9NYWtlZmlsZS5hbTogQmV0dGVyIHRlc3RpbmcgcmV2ZWFscyBiZXR0ZXIKCSAgbWV0aG9kcy4gIEZpeGVzIGZvciBCZU9TLgoKU2F0IE1heSAgOCAwMTo1MjoyOSBDRFQgMTk5OSBTaGF3biBULiBBbXVuZHNvbiA8YW11bmRzb25AZ3RrLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbgoJICBnZXJyb3IuYwoJICBnbWFpbi5jCgkgIGdzdHJmdW5jcy5jCgkgIGd1dGlscy5jCgkgIGx0Y29uZmlnCgkgIGx0bWFpbi5zaAoJICBnbW9kdWxlL01ha2VmaWxlLmFtCgkgIGdtb2R1bGUvZ21vZHVsZS5jCgkgIGdtb2R1bGUvZ21vZHVsZWNvbmYuaC5pbgoJICBnbW9kdWxlL2dtb2R1bGUtYmVvcy5jCgkgIGd0aHJlYWQvTWFrZWZpbGUuYW06IFBvcnQgdG8gQmVPUyBieSBteXNlbGYgYW5kIFJpY2hhcmQgT2ZmZXIuCgoxOTk5LTA1LTA2ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIG1ha2VmaWxlLm1zYy5pbiBtYWtlZmlsZS5jeWd3aW4uaW4gZ2xpYmNvbmZpZy5oLndpbjMyLmluCiAJY29uZmlnLmgud2luMzIuaW4gdGVzdHMvbWFrZWZpbGUubXNjLmluIHRlc3RzL21ha2VmaWxlLmN5Z3dpbi5pbjoKIAlOZXcgZmlsZXMsIHVzZWQgdG8gZ2VuZXJhdGUgY29ycmVzcG9uZGluZyBub24tLmluIGZpbGVzIHdoZW4KIAltYWtpbmcgYSBkaXN0LiBUaGlzIGlzIGp1c3Qgc28gdGhlIHZlcnNpb24gbnVtYmVycyB3aWxsIGJlIGtlcHQgaW4KIAlzeW5jaCBhdXRvbWF0aWNhbGx5LgoKCSogY29uZmlndXJlLmluOiBBbHNvIHN1YnN0aXR1dGUgQEdMSUJfTUFKT1JfVkVSU0lPTkAsCiAJQEdMSUJfTUlOT1JfVkVSU0lPTkAsIGFuZCBAR0xJQl9JTlRFUkZBQ0VfQUdFQC4KCgkqIE1ha2VmaWxlLmFtIHRlc3RzL01ha2VmaWxlLmFtOiBBbHNvIGRpc3RyaWJ1dGUgbWFrZWZpbGUuY3lnd2luLgoKCSogZ2Vycm9yLmMgKGdfb25fZXJyb3JfcXVlcnkpOiBPbiBXaW4zMiwgcHV0IHVwIGEgTWVzc2FnZUJveCBhbmQKIAl0aGVuIGV4aXQuCgoJKiBnbGliLmRlZjogQWRkIGEgY291cGxlIG9mIGZ1bmN0aW9ucy4KClNhdCBNYXkgIDEgMTA6MjY6MjAgUERUIDE5OTkgTWFuaXNoIFNpbmdoIDx5b3NoQGdpbXAub3JnPgoKCSogYWNpbmNsdWRlLm00CgkqIGNvbmZpZy5ndWVzcwoJKiBjb25maWcuc3RhdHVzCgkqIGx0Y29uZmlnCgkqIGx0bWFpbi5zaDogdXBncmFkZSB0byBsaWJ0b29sIDEuMwoKMTk5OS0wNC0yNSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBSRUFETUUud2luMzI6IE1vcmUgZWRpdGluZy4KCSogYnVpbGQtZGxsOiBVc2UgZ2NjLCBub3QgbGQgdG8gbGluay4KCSogZ2xpYi5oOiBPbiBuYXRpdmUgV2luMzIgdXNlIF91bmxpbmsoKS4KCSogZ3NjYW5uZXIuYzogVXNlIGNvcnJlbnQgTkFUSVZFX1dJTjMyIGZlYXR1cmUgdGVzdCBtYWNybywKCW5vdCBfTVNDX1ZFUi4KCSogZ3N0cmluZy5jOiBJbmNsdWRlIDxpby5oPiBvbiBXaW4zMiBmb3IgX3JlYWQgcHJvdG90eXBlLgoJKiBndXRpbHMuYzogUmVtb3ZlIG9sZCBJTyBjaGFubmVsIGNvZGUgKHdhcyBpbiAjaWYgMCkuCgkqIG1ha2VmaWxlLmN5Z3dpbjogRG9uJ3QgbmVlZCB0byBsaW5rIHdpdGgga2VybmVsMzIgYW5kIG1zdmNydAoJZXhwbGljaXRseSwgdGhleSBhcmUgaW5jbHVkZWQgYW55d2F5LgoKMTk5OS0wNC0yNCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJU3VwcG9ydCBhZGRlZCBmb3IgYnVpbGRpbmcgdXNpbmcgYSBHTlUgdG9vbGNoYWluIG9uIFdpbjMyLAoJaS5lLiBnY2MgLW1uby1jeWd3aW4gb24gY3lnd2luIChhLmsuYS4gbWluZ3czMiwgdXNpbmcgZWdjcy0xLjEuMikuCgoJKiBSRUFETUUud2luMzI6IFVwZGF0ZWQuCgkqIGJ1aWxkLWRsbCBtYWtlZmlsZS5jeWd3aW4gdGVzdHMvbWFrZWZpbGUuY3lnd2luOiBOZXcgZmlsZXMuCgkqIGdsaWIuaCBnbGliLmRlZiBnbGliY29uZmlnLmgud2luMzI6IFNsaWdodCB1cGRhdGVzLiAKCSogZ21haW4uYzogTm8gbmVlZCB0byBpbmNsdWRlIDxmY250bC5oPiBhbmQgPGlvLmg+IG9uIFdpbjMyLgoJKiBnbWFpbi5jIGd1dGlscy5jIHRlc3RnbGliLmMgdGVzdHMvc3RyaW5nLXRlc3QuYzogVGVzdCBmb3IKCU5BVElWRV9XSU4zMiwgbm90IF9NU0NfVkVSLgoJKiBnbXV0ZXguYzogTXVzdCBkZWNsYXJlIGdfdGhyZWFkX2Z1bmN0aW9uc19mb3JfZ2xpYl91c2UgYXMKCWV4cG9ydGVkICh1c2luZyB0aGUgR1VUSUxTX0NfVkFSIG1hY3JvKS4KCSogZ3V0aWxzLmMgZ21vZHVsZS9saWJncGx1Z2luX1thYl0uYzogTGliTWFpbiBub3QgbmVlZGVkLgoJKiBnbW9kdWxlL2dtb2R1bGVjb25mLmgud2luMzI6IE5lZWQgdW5kZXJzY29yZSB3aXRoIGdjYy4KCSogZ3RocmVhZC9ndGhyZWFkLmM6IFdpdGggZ2NjIG9uIFdpbjMyLCBtdXN0IHVzZSBtZW1jcHkgdG8gYXNzaWduCgl2YWx1ZSBvZiBnX3RocmVhZF9mdW5jdGlvbnNfZm9yX2dsaWJfdXNlICg/KS4KCSogbWFrZWZpbGUubXNjIHRlc3RzL21ha2VmaWxlLm1zYzogQ29zbWV0aWNzLgoKRnJpIEFwciAyMyAxNDoyOToyNSBCU1QgMTk5OSAgVG9ueSBHYWxlIDxnYWxlQGd0ay5vcmc+CgoJKiBnbGliLmg6IEZpeCB0eXBvIGluIGdfc3RyaW5nX25jYXNlY21wIG1hY3JvIChieSBtZSkuCgkgIEFkZCBiX3N0cmluZ19zdHJuY2FzZWNtcCBtYWNyby4KCjE5OTktMDQtMjIgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBndXRpbHMuYyAoZ19nZXRfYW55X2luaXQpOiB1c2Ugc3lzY29uZiAoX1NDX0dFVFBXX1JfU0laRV9NQVgpIGFzCgl0aGUgbmV3IGluaXRpbmFsIGJ1ZnNpemUgZm9yIGdldHB3dWlkX3Igb24gc3lzdGVtcywgdGhhdCBzdXBwb3J0Cgl0aGlzLiBIaW50IGZyb20gSG9sZ2VyIER1ZXJlciA8SC5EdWVyZXJAemFpdC51bmktYnJlbWVuLmRlPi4KClNhdCBBcHIgMTcgMjA6NTU6MTMgQlNUIDE5OTkgIFRvbnkgR2FsZSA8Z2FsZUBndGsub3JnPgoKCSogZ2xpYi5oLCBnc3RyaW5nLmM6IEFkZCBuZXcgZ19zdHJpbmcgZnVuY3Rpb25zIGZvciByZWFkaW5nCgkgIGZyb20gZmlsZS9zb2NrZXQgZGVzY3JpcHRvcnMsIGFuZCB0b2tlbmlzaW5nIHN0cmluZ3MuCgoJICBBZGRlZCB2YXJpb3VzIGdfc3RyaW5nIG1hY3Jvcy4KClR1ZSBBcHIgMTMgMjM6Mjg6MzIgMTk5OSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBSRUFETUUud2luMzI6IE1lbnRpb24gdGhlIHRlc3RzIGRpcmVjdG9yeS4KCgkqIGdsaWIuZGVmOiBBZGQgdGhlIGZ1bmN0aW9ucyBmcm9tIGdyYW5kLmMuCgoJKiBnbGliY29uZmlnLmgud2luMzI6IEFkZCB1bnNpZ25lZCBtYXggdmFsdWVzLCBhbmQgdGhlIGZvcm1hdAogCXN0cmluZ3MuCgoJKiBtYWtlZmlsZS5tc2M6IEFkZCBncmFuZC4KCgkqIHRlc3RzL3tkYXRlLXRlc3Qsbm9kZS10ZXN0fS5jOiBJbmNsdWRlIDxzdGRsaWIuaD4gZm9yIGV4aXQoKS4KCgkqIHRlc3RzL21ha2VmaWxlLm1zYzogTmV3IGZpbGUuCgoxOTk5LTA0LTEyICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ2xpYi5oOiBNb3ZlZCBzdHJ1Y3QgZGVjbGFyYXRpb24gdXAuIFN0eWxlIGZpeGVzLgoKCSogZ3JhbmQuYzogU3R5bGUgZml4ZXMuIE9ubHkgdHJ5IHRvIG9wZW4gL2Rldi9yYW5kb20gb25jZS4KCgkqIHRlc3RzL3JhbmQtdGVzdC5jIChtYWluKTogTmV3IHRlc3RzOyBTbGlnaHQgYnVnIGZpeC4gCgoxOTk5LTA0LTA5ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ3JhbmQuYywgdGVzdHMvcmFuZC10ZXN0LmM6IE5ldyBmaWxlcyB0byBpbXBsZW1lbnQgdGhlIE1lcnNlbm5lCglUd2lzdGVyIFBzZXVkbyBSYW5kb20gTnVtYmVyIEdlbmVyYXRvci4KCgkqIGdsaWIuaCwgQVVUSE9SUywgTWFrZWZpbGUuYW0sIHRlc3RzL01ha2VmaWxlLmFtOiBDaGFuZ2VkCglhY2NvcmRpbmdseS4KClRodSBBcHIgIDggMjE6MTI6MzAgQ0RUIDE5OTkgU2hhd24gVC4gQW11bmRzb24gPGFtdW5kc29uQGd0ay5vcmc+CgoJKiBSZWxlYXNlZCBHTGliIDEuMy4wCgoxOTk5LTAzLTMwICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogY29uZmlndXJlLmluOiBBZGRlZCBhIGNoZWNrIGZvciB0aGUgcmlnaHQgZm9ybWF0IHRvIHByaW50ZiBhbmQKCXNjYW5mIGxvbmcgbG9uZ3MuIEl0IGlzICVxaSBpbnN0ZWFkIG9mICVsbGkgb24gRnJlZUJTRCBmb3IKCXdoYXRldmVyIHJlYXNvbi4KCjE5OTktMDMtMjggIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBNYWtlZmlsZS5hbSAoZ2xpYmNvbmZpZy5oKTogTWFrZSBzdXJlIGBnbGliY29uZmlnLmgnIGV4aXN0cwoJYWZ0ZXIgdGhlIHJ1bGUgaXMgZmlyZWQuCgkoaW5zdGFsbC1leGVjLWxvY2FsKTogSW5zdGFsbCBnbGliY29uZmlnLmggb25seSBpZiB0aGUgY29udGVudHMKCWFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudGx5IGluc3RhbGxlZCBnbGliY29uZmlnLmguCgoxOTk5LTAzLTI2ICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogTWFrZWZpbGUuYW0gKGNvbmZpZ2V4ZWNpbmNsdWRlZGlyKTogUmVuYW1lIGZyb20gCgljb25maWdpbmNsdWRlZGlyIHNvIHRoYXQgZ2xpYmNvbmZpZy5oIHdpbGwgYmUgaW5zdGFsbGVkIAoJYXMgcGFydCBvZiBgbWFrZSBpbnN0YWxsLWV4ZWMnLiAKClRodSBNYXIgMjUgMjI6NDU6NDcgMTk5OSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBjb25maWcuaC53aW4zMjogVXBkYXRlIHZlcnNpb24gbnVtYmVycy4KCgkqIGdsaWJjb25maWcuaC53aW4zMjogVXBkYXRlIHZlcnNpb24gbnVtYmVycyBhbmQgcHRocmVhZHMtd2luMzItCiAJcmVsYXRlZCBtYWdpYyB2YWx1ZXMuCgoJKiBSRUFETUUud2luMzI6IFNvbWUgaW1wcm92ZW1lbnRzLgoKCSogbWFrZWZpbGUubXNjOiBBZGQgZ3F1ZXVlIGFuZCBnc3RhY2suIENvcnJlY3QgdmVyc2lvbiBudW1iZXIuCgpGcmkgTWFyIDE5IDE2OjI5OjUwIFBTVCAxOTk5IE1hbmlzaCBTaW5naCA8eW9zaEBnaW1wLm9yZz4KCgkqIGFjaW5jbHVkZS5tNAoJKiBjb25maWcuZ3Vlc3MKCSogY29uZmlnLnN1YgoJKiBsdGNvbmZpZwoJKiBsdG1haW4uc2g6IHVwZ3JhZGUgdG8gbGlidG9vbCAxLjJmCgoJKiBhdXRvZ2VuLnNoOiBsaWJ0b29sIGlzIG5vdCByZXF1aXJlZCB0byBhdXRvZ2VuIGdsaWIKCgkqIGFjY29uZmlnLmg6IHJlbW92ZSBXSVRIX1NZTUJPTF9VTkRFUlNDT1JFIChub3QgZXhwbGljdGx5CgluZWVkZWQpCgoxOTk5LTAzLTE4ICBKZWZmIEdhcnppayAgPGpnYXJ6aWtAcG9ib3guY29tPgoKCSogZ2xpYi5kZWY6IEFkZCBuZXcgZ19saXN0LCBnX3N0YWNrLCBnX3F1ZXVlIGZ1bmN0aW9ucy4KCjE5OTktMDMtMTggIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBjb25maWd1cmUuaW46IGFkZGVkIG5ldyBBQ19TVUJTVChHVEhSRUFEX0NPTVBJTEVfSU1QTF9ERUZJTkVTKQoJdG8gaG9sZCB2YXJpb3VzIGRlZmluZXMgdG8gZ2V0IHRoZSByaWdodCB0aHJlYWQgaW1wbGVtZW50YXRpb24gb24KCWRpZmZlcmVudCBwbGF0Zm9ybXMuIEFsc28gbG9vayBpbiAtbGRjZSBmb3IgcHRocmVhZF9jcmVhdGUuIFNob3VsZAoJbWFrZSBpdCB3b3JrIG9uIEhQLVVYIDEwLnguIEluZm9ybWF0aW9uIGZyb20gIkQuIEVtaWxpbyBHcmltYWxkbwoJVHVub24iIDxlbWlsaW9fdHVub25AbmwuY29tcHV3YXJlLmNvbT4uCgoxOTk5LTAzLTE3ICBKZWZmIEdhcnppayAgPGpnYXJ6aWtAcG9ib3guY29tPgoKCSogZ3N0YWNrLmMsIGdxdWV1ZS5jOgoJQWRkIGNvcHlyaWdodCwgY2xlYW4gdXAgY29kZSBhIGJpdC4KCjE5OTktMDMtMTcgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBjb25maWd1cmUuaW46IEFkZGVkIG1pc3NpbmcgdmFsdWVzIGZvciBHX01BWFUoU0hPUlR8SU5UfExPTkcpIG9uCglwbGF0Zm9ybXMgd2l0aCBvbmx5IC91c3IvaW5jbHVkZS92YWx1ZXMuaC4KCgkqIGFjY29uZmlnLmg6IFJlbW92ZWQgdW5uZWNlc3NhcnkgbWFjcm9zLgoKCSogZ2xpYmNvbmZpZy5oLndpbjMyLCBjb25maWcuaC53aW4zMjogTW92ZWQgR19USFJFQURTX0lNUExfUE9TSVgKCWZyb20gY29uZmlnLmgud2luMzIgdG8gZ2xpYmNvbmZpZy5oLndpbjMyLiBUYWtlbiBmcm9tIGdsaWIgMS4yCglicmFuY2guCgoJKiBjb25maWd1cmUuaW46IEFsc28gYWNjZXB0IF9QY3RpbWVfciBpbnN0ZWFkIG9mIGN0aW1lX3IsIHdoaWxlCglzZXJhY2hpbmcgZm9yIHRoZSByaWdodCBgX1JFRU5UUkFOVCcgZmxhZy4gVGhpcyBpcyBmb3IgRGlnaXRhbAoJVU5JWCA0LjBkLiBUYWtlbiBmcm9tIGdsaWIgMS4yIGJyYW5jaC4KCldlZCBNYXIgMTcgMDM6MTQ6NTYgMTk5OSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ2xpYi5oOiBhZGRlZCBHTElCX0NIRUNLX1ZFUlNJT04oKSBtYWNybyBzaW1pbGFyIHRvCglHVEtfQ0hFQ0tfVkVSU0lPTigpLgoKV2VkIE1hciAxNyAwMTo0NjoyOCAxOTk5ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBtZXJnZXMgZnJvbSBnbGliLTEtMjoKClN1biBNYXIgMTQgMTc6NTA6MzUgMTk5OSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21lbS5jIChnX21lbV9jaHVua18qKTogY2hhbmdlZCBhIGJ1bmNoIG9mIGdfYXNzZXJ0KCkgc3RhdGVtZW50cwoJdG8gZ19yZXR1cm5faWZfZmFpbCgpLgoJKGdfbWVtX3Byb2ZpbGUpOgoJKGdfbWVtX2NodW5rX3ByaW50KToKCShnX21lbV9jaHVua19pbmZvKTogcmVtb3ZlZCBzb21lIGV4dHJhbmVvdXMgIlxuInMgYXQgdGhlIGVuZCBvZiB0aGUgbG9nCgltZXNzYWdlcy4KCgkqIGd0aW1lci5jIChnX3RpbWVyXyopOiBjaGFuZ2VkIGEgYnVuY2ggb2YgZ19hc3NlcnQoKSBzdGF0ZW1lbnRzCgl0byBnX3JldHVybl9pZl9mYWlsKCkuCgkqIGdyZWwuYyAoZ18qKTogY2hhbmdlZCBhIGJ1bmNoIG9mIGdfYXNzZXJ0KCkgc3RhdGVtZW50cyB0bwoJZ19yZXR1cm5faWZfZmFpbCgpIGFuZCBhZGRlZCBzb21lIGV4dHJhIG9uZXMgdG8gY2hlY2sgcmVsYXRpb24gIT0gTlVMTC4KClR1ZSBNYXIgIDkgMjM6MjU6NTAgMTk5OSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogY29uZmlndXJlLmluOiBjaGVjayBmb3Igd29ya2luZyByZWFsbG9jIChOVUxMLCkuCgkqIGdtZW0uYyAoZ19yZWFsbG9jKTogdXNlIG1hbGxvYygpIGZvciBpbml0aWFsIGFsbG9jYXRpb24gb24gc3lzdGVtcwoJd2hlcmUgcmVhbGxvYyhOVUxMLCkgd2lsbCBub3Qgd29yayAodGhpcyBpcyB0aGUgY2FzZSBvbiBTdW5PUywgcmVwb3J0ZWQKCWJ5IFRvbSBHZWlnZXIpLgoKTW9uIE1hciAgOCAwNzo0MjowOCAxOTk5ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnaG9vay5jIChnX2hvb2tfdW5yZWYpOiB3aGVuICFob29rX2xpc3QtPmlzX3NldHVwLCB3cmFwIHRoZQoJZmxhZyBhcm91bmQgdGhlIGNhbGwgdG8gZ19ob29rX2ZyZWUoKSB0byBhdm9pZCBzcHVyaW91cwoJd2FybmluZ3MgKGhhcHBlbnMgZHVyaW5nIGRlc3RydWN0aW9uIHBoYXNlKS4KCjE5OTktMDMtMDIgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnbWVtLmM6IEZpeGVkIGEgc3R1cGlkIGN1dCduJ3Bhc3RlIGVycm9yIG9mIG1pbmUuIFRoYW5rcyB0bwoJRnJpZWRyaWNoIERvbWluaWN1cyA8RnJpZWRyaWNoLkRvbWluaWN1c0BpbmthLmRlPgoKMTk5OS0wMy0xNiAgVGltdXIgQmFrZXlldiAgPG1jQGJhdC5ydT4KCgkqIGNvbmZpZ3VyZS5pbjogRml4IHByb2JsZW0gd2l0aCBwdGhyZWFkX2NyZWF0ZSBpbiBsaWJjLCBhcyBydW5uaW5nCgkiZ2NjIHRlc3QuYyAtbCAiIGlzIG5vdCBsZWdhbC4KCjE5OTktMDMtMTYgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiB0ZXN0cy90eXBlLXRlc3QuYzogQWRkZWQgYSB0ZXN0IGZvciB0aGUKCUdfKFUpP0lOVCgxNnwzMnw2NClfRk9STUFUIGFuZCBHXyhNSU58TUFYfE1BWFUpKFNIT1JUfElOVHxMT05HKQoJbWFjcm9zLgoKCSogY29uZmlndXJlLmluOiBSZW1vdmVkIEdfKFUpP0lOVDhfRk9STUFUIGFnYWluLCBhcyBpdCBjYW4ndCBiZQoJdXNlZCBmb3Igc2NhbmYuCgoJKiBjb25maWd1cmUuaW46IEFkZGVkIHRoZSBtYWNyb3MgR19NQVhVKFNIT1JUfElOVHxMT05HKS4gSSBkbyBub3QKCWtub3cgaG93IHRvIGhhbmRsZSB0aGVzZSBvbiBwbGF0Zm9ybXMgd2l0aCAvdXNyL2luY2x1ZGUvdmFsdWVzLmgsCglidXQgd2l0aG91dCAvdXNyL2luY2x1ZGUvbGltaXRzLmguIFBsZWFzZSBzb21lb25lIGFkZCB0aGlzLgoKCjE5OTktMDMtMTUgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBjb25maWd1cmUuaW46IEFkZGVkIHRoZSBtYWNyb3MgR18oVSk/SU5UKDh8MTZ8MzJ8NjQpX0ZPUk1BVCB0bwoJdXNlIGZvciBwcmludGYgYW5kIChtdWNoIG1vcmUgaW1wb3J0YW50KSBzY2FuZiBmb3JtYXQgc3RyaW5ncyBmb3IKCXRoZSBjb3JyZXNwb25kaW5nIEdMaWIgdHlwZXMuIAoKCSogZ2xpYi5oIEFkZGVkIEdfKFUpPyhTSE9SVHxJTlR8TE9ORylfRk9STUFUIGZvciBjb25zaXN0ZW5jeS4gSXQKCWhvd2V2ZXIgbWFrZXMgbm8gc2Vuc2UgdG8gYWxzbyBwcm92aWRlIEdfKEZMT0FUfERPVUJMRSlfRk9STUFULCBhcwoJdGhleSBhcmUgZGlmZmVyZW50IGZvciBwcmludGYgKGYgZm9yIGJvdGgpIGFuZCBzY2FuZiAoZiBmb3IgZmxvYXQsCglsZiBmb3IgZG91YmxlKS4gRGVmaW5pbmcgR19JTlRfRk9STUFUIG1ha2VzIHNlbnNlIGhvd2V2ZXIsIGFzIHdlCgltaWdodCB3YW50IHRvIGRlZmluZSBnaW50IHRvIHNvbWV0aGluZyBkaWZmZXJlbnQgdGhhbiBpbnQgc29tZWRheQoJaW4gdGhlIGZ1dHVyZS4gSWRlYSBmcm9tIFNhc2NoYSBCcmF3ZXIgPHNiQGFkYXN5cy5jaD4uCgoxOTk5LTAzLTE0ICBKZWZmIEdhcnppayAgPGpnYXJ6aWtAcG9ib3guY29tPgoKCSogZ2RhdGUuYzoKCUNvbW1lbnRlZCBvdXQgZGVidWdnaW5nIG91dHB1dC4KCgkqIHRlc3RzL01ha2VmaWxlLmFtLCB0ZXN0cy9kYXRlLXRlc3QuYzoKCUFkZGVkIHRlc3Qgb2YgdGhlIEdEYXRlIG1vZHVsZSwgYmFzZWQgY2xvc2VseSBvbiB0ZXN0Z2RhdGUuYy4KCgkqIHRlc3RzL01ha2VmaWxlLmFtOgoJQnVnZml4IC0gY29tcGlsZSB0ZXN0cyB3aXRoIEBHTElCX0RFQlVHX0ZMQUdTQC4KCjE5OTktMDMtMTQgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBjb25maWd1cmUuaW4gKGdsaWJjb25maWcuaCk6IFJlbW92ZSB3aWRlY2hhciB0ZXN0cyBhbmQgZGVmaW5lcy4KCShmZF9zZXQpOiBDaGFuZ2UgdGhlIGdyZXAgZm9yIGBmZF9tYXNrJyB0byBzZWFyY2ggZm9yIGBmZF9zZXQnLgoJKiBnZXJyb3IuYyAoZmRfbWFzayk6IFJlbW92ZSBjb25kaXRpb25hbCB0eXBlZGVmLiAgSXQgaXMgbm90IHVzZWQKCWVsc2V3aGVyZSBpbiB0aGUgZmlsZS4KCSogZ21haW4uYyAoZmRfbWFzayk6IExpa2V3aXNlLgoKMTk5OS0wMy0xMiAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogVGVzdCBmb3IgcG9zaXggdGhyZWFkcyBmaXJzdCwgdGhlbiBmb3IgZGNlIHRocmVhZHMuCgoxOTk5LTAzLTExICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogY29uZmlndXJlLmluOiBSZXZhbXBlZCB0aGUgdGhyZWFkIGNvbmZpZ3VyZSBzdHVmZi4gTm93IGRjZQoJdGhyZWFkcyAob2xkIHBvc2l4IGRyYWZ0KSBhcmUgcmVjb2duaWNlZC4gVGhpcyBpcyBuZWNlc3NhcnksCgliZWNhdXNlIGRjZSB0aHJlYWRzIGFyZSBpbiBmYWN0IHdvcmtpbmcgcXVpdGUgZGlmZmVyZW50bHkgZnJvbQoJcG9zaXggdGhyZWFkcy4gQWxzbyBjaGFuZ2VkIHRoZSBjb25kaXRpb25zIGZvciBjaGVja2luZyBmb3IgTVQKCXNhZmUgZnVuY3Rpb25zIGEgYml0LCBiZWNhdXNlIEdfVEhSRUFEU19JTVBMX05PTkUgc3RpbGwgaGF2ZSB0bwoJY29tcGlsZSB0aHJlYWQgc2FmZS4gTk9URTogUGxlYXNlIGRvIG5vdCBjb21taXQgbXkgY2hhbmdlIHRvCglnbGliLTEtMi97YWNjb25maWcuaCxjb25maWd1cmUuaW4sY29uZmlnLmgud2luMzJ9IGZyb20gMTk5OS0wMy0wMywKCWFzIHRoZSBjdXJyZW50IGNoYW5nZSB3aWxsIHRha2UgY2FyZSBvZiB0aGF0IHRvby4KClR1ZSBNYXIgIDkgMTQ6Mzc6MzIgMTk5OSAgSmVmZiBHYXJ6aWsgIDxqZ2FyemlrQHBvYm94LmNvbT4KCgkqIE1ha2VmaWxlLmFtLCBnbGliLmgsIGdzdGFjay5jLCBncXVldWUuYywKCSAgdGVzdHMvTWFrZWZpbGUuYW0sIHRlc3RzL3F1ZXVlLXRlc3QuYywgdGVzdHMvc3RhY2stdGVzdC5jOgoJQWRkZWQgc3RhY2ssIHF1ZXVlIEFEVHMgYW5kIHJlbGF0ZWQgdGVzdHMuCgoJKiBnbGliLmgsIGdsaXN0LmM6CglOZXcgZ19saXN0X2RlbGV0ZSgpIGZ1bmN0aW9uLgoKU2F0IE1hciAgNiAxMTowMzowOCAxOTk5ICBBc2Jqb3JuIFBldHRlcnNlbiAgPGFwZUBscmRwZi5zcGFjZXRlYy5ubz4KCgkqIGd1dGlscy5jIChnX2dldF9hbnlfaW5pdCk6IGFkZCBPUy8yIGNoYW5nZXMuCgljaGFuZ2UgJ1xcJyBpbiBIT01FIHRvICcvJy4KCjE5OTktMDMtMDMgIEpvc2ggTWFjRG9uYWxkICA8am1hY2RAc3Bpbi5kc2wucGFjYmVsbC5uZXQ+CgoJKiBnbGliLmRlZjogZ19zcGFjZWRfcHJpbWVzX2Nsb3Nlc3Qgd2FzIG9taXR0ZWQgaGVyZSwgc28gSQoJY291bGRuJ3QgYnVpbGQgWGRlbHRhIG9uIFdpbmRvd3MuCgoxOTk5LTAzLTAxICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ3V0aWxzLmMgKGdfZ2V0X2FueV9pbml0KTogRml4ZWQgeWV0IGFub3RoZXIgYmxvb2R5CglpbXBsZW1lbnRhdGlvbiBvZiBnZXRwd3VpZF9yIG9uIEFJWC4gVGhhbmtzIHRvIE9sYWYgRGlldHNjaGUKCTxvbGFmLmRpZXRzY2hlK2xpc3QuZ3RrQG5ldGNvbG9nbmUuZGU+LiBJIHdvdWxkIGxpa2UgYSBjb25maWd1cmUKCXRlc3QgYmV0dGVyIHRoYW4gdGhhdCwgYnV0IGhhdmUgbm8gaWRlYSwgaG93IHRvIGRvIHRoYXQgZWFzaWx5LgoKU2F0IEZlYiAyNyAwMToxODo0NyAxOTk5ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBDaGFuZ2VMb2c6IG1vdmVkIG9sZCBDaGFuZ2VMb2cgdG8gQ2hhbmdlTG9nLnByZS0xLTIsIGFuZCBzdGFydGVkCgluZXcgb25lLgoKCSogY29uZmlndXJlLmluOiBzZXQgZ2xpYiB2ZXJzaW9uIHRvIDEuMy4wLgo=