VGhhbmtzIGdvIHRvIHRoZSBmb2xsb3dpbmcgcGVvcGxlIGZvciBwYXRjaGVzIGFuZCBjb250cmlidXRpb25zOgoKTWljaGFlbCBIdW5vbGQgPG0uaHVub2xkQGdteC5kZT4KICBmb3IgdGhlIGluaXRpYWwgc2FhNzE0NiBkcml2ZXIgYW5kIGl0J3MgcmVjZW50IG92ZXJoYXVsCgpDaHJpc3RpYW4gVGhlaXNzCiAgZm9yIGhpcyB3b3JrIG9uIHRoZSBpbml0aWFsIExpbnV4IERWQiBkcml2ZXIKCk1hcmN1cyBNZXR6bGVyIDxtb2NtQG1ldHpsZXJicm9zLmRlPgpSYWxwaCBNZXR6bGVyIDxyamttQG1ldHpsZXJicm9zLmRlPgogIGZvciB0aGVpciBjb250aW51aW5nIHdvcmsgb24gdGhlIERWQiBkcml2ZXIKCk1pY2hhZWwgSG9senQgPGtqdUBkZWJpYW4ub3JnPgogIGZvciBoaXMgY29udHJpYnV0aW9ucyB0byB0aGUgZHZiLW5ldCBkcml2ZXIKCkRpZWdvIFBpY2NpYW5pIDxkLnBpY2NpYW5pQG5vdmFjb21wLml0PgogIGZvciBDeWJlckxvZ2luIGZvciBMaW51eCB3aGljaCBhbGxvd3MgbG9nZ2luZyBvbnRvIEVPTgogIChpbiBjYXNlIHlvdSBhcmUgd29uZGVyaW5nIHdoZXJlIEN5YmVyTG9naW4gaXMsIEVPTiBjaGFuZ2VkIGl0cyBsb2dpbiAKICBwcm9jZWR1cmUgYW5kIEN5YmVyTG9naW4gaXMgbm8gbG9uZ2VyIHVzZWQuKQoKTWFydGluIFNjaGFsbGVyIDxtYXJ0aW5Ac211cmYuZnJhbmtlbi5kZT4KICBmb3IgcGF0Y2hpbmcgdGhlIGNhYmxlIGNhcmQgZGVjb2RlciBkcml2ZXIKCktsYXVzIFNjaG1pZGluZ2VyIDxLbGF1cy5TY2htaWRpbmdlckBjYWRzb2Z0LmRlPgogIGZvciB2YXJpb3VzIGZpeGVzIHJlZ2FyZGluZyB0dW5pbmcsIE9TRCBhbmQgQ0kgc3R1ZmYgYW5kIGhpcyB3b3JrIG9uIFZEUgoKU3RldmUgQnJvd24gPHNicm93bkBjb3J0bGFuZC5jb20+CiAgZm9yIGhpcyBBRkMga2VybmVsIHRocmVhZAoKQ2hyaXN0b3BoIE1hcnRpbiA8bWFydGluQHVuaS1tYWluei5kZT4KICBmb3IgaGlzIExJUkMgaW5mcmFyZWQgaGFuZGxlcgoKQW5kcmVhcyBPYmVycml0dGVyIDxvYmlAbGludXh0di5vcmc+CkRlbm5pcyBOb2VybWFubiA8ZGVubmlzLm5vZXJtYW5uQG5vZXJuZXQuZGU+CkZlbGl4IERvbWtlIDx0bWJpbmNAZWxpdGVkdmIubmV0PgpGbG9yaWFuIFNjaGlybWVyIDxqb2x0QHR1eGJveC5vcmc+ClJvbm55IFN0cnV0eiA8M2Rlc0BlbGl0ZWR2Yi5kZT4KV29sZnJhbSBKb29zdCA8ZGJveDJAZnJva2FzY2h3ZWkuZGU+Ci4uLmFuZCBhbGwgdGhlIG90aGVyIGRib3gyIHBlb3BsZQogIGZvciBtYW55IGJ1Z2ZpeGVzIGluIHRoZSBnZW5lcmljIERWQiBDb3JlLCBmcm9udGVuZCBkcml2ZXJzIGFuZAogIHRoZWlyIHdvcmsgb24gdGhlIGRib3gyIHBvcnQgb2YgdGhlIERWQiBkcml2ZXIKCk9saXZlciBFbmRyaXNzIDxvLmVuZHJpc3NAZ214LmRlPgogIGZvciBtYW55IGJ1Z2ZpeGVzCgpBbmRyZXcgZGUgUXVpbmNleSA8YWRxX2R2YkBsaWRza2lhbGYubmV0PgogIGZvciB0aGUgdGRhMTAwNHggZnJvbnRlbmQgZHJpdmVyLCBhbmQgdmFyaW91cyBidWdmaXhlcwoKUGV0ZXIgU2NoaWxkbWFubiA8cGV0ZXIuc2NoaWxkbWFubkB3ZWIuZGU+CiAgZm9yIHRoZSBkcml2ZXIgZm9yIHRoZSBUZWNobmlzYXQgU2t5U3RhcjIgUENJIERWQiBjYXJkCgpWYWRpbSBDYXRhbmEgPHNreXN0YXJAbW9sZG92YS5jYz4KUm9iZXJ0byBSYWd1c2EgPHIucmFndXNhQGxpYmVyby5pdD4KQXVndXN0byBDYXJkb3NvIDxhdWd1c3RvQGNhcmhpbC5uZXQ+CiAgZm9yIGFsbCB0aGUgd29yayBmb3IgdGhlIEZsZXhDb3BJSSBjaGlwc2V0IGJ5IEIyQzIsSW5jLgoKRGF2b3IgRW1hcmQgPGVtYXJkQHNvZnRob21lLm5ldD4KICBmb3IgaGlzIHdvcmsgb24gdGhlIGJ1ZGdldCBkcml2ZXJzLCB0aGUgZGVtdXggY29kZSwKICB0aGUgbW9kdWxlIHVubG9hZGluZyBwcm9ibGVtcywgLi4uCiAgCkhhbnMtRnJpZWRlciBWb2d0IDxoZnZvZ3RAYXJjb3IuZGU+CiAgZm9yIGhpcyB3b3JrIG9uIGNhbGN1bGF0aW5nIGFuZCBjaGVja2luZyB0aGUgY3JjJ3MgZm9yIHRoZQogIFRlY2hub1RyZW5kL0hhdXBwYXVnZSBERUMgZHJpdmVyIGZpcm13YXJlCgpNaWNoYWVsIERyZWhlciA8bWljaGFlbEA1ZG90MS5kZT4KQW5kcmVhcyAncmFuZHknIFdlaW5iZXJnZXIKICBmb3IgdGhlIHN1cHBvcnQgb2YgdGhlIEZ1aml0c3UtU2llbWVucyBBY3RpdnkgYnVkZ2V0IERWQi1TCgpLZW5uZXRoIEFhZmz4eSA8a2UtYWFAZnJpc3VyZi5ubz4KICBmb3IgYWRkaW5nIHN1cHBvcnQgZm9yIFR5cGhvb24gRFZCLVMgYnVkZ2V0IGNhcmQKCkVybnN0IFBlaW5saWNoIDxlLnBlaW5saWNoQGlub2RlLmF0PgogIGZvciB0dW5pbmcvRGlTRXFDIHN1cHBvcnQgZm9yIHRoZSBERUMgMzAwMC1zCgpQZXRlciBCZXV0bmVyIDxwLmJldXRuZXJAZ214Lm5ldD4KICBmb3IgdGhlIElSIGNvZGUgZm9yIHRoZSB0dHVzYi1kZWMgZHJpdmVyCgooSWYgeW91IHRoaW5rIHlvdSBzaG91bGQgYmUgaW4gdGhpcyBsaXN0LCBidXQgeW91IGFyZSBub3QsIGRyb3AgYQogbGluZSB0byB0aGUgRFZCIG1haWxpbmcgbGlzdCkK