LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTWFyIDE0IDE3OjI1OjMzIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL3dpbi5oLCBpcGMvZGRlX3Byb2MuYywgbWlzYy9zcHkuYywgd2luZG93cy9jbGFzcy5jLCB3aW5kb3dzL2RjZS5jLCB3aW5kb3dzL2RlZmRsZy5jLCB3aW5kb3dzL2RlZnduZC5jLCB3aW5kb3dzL2RpYWxvZy5jLCB3aW5kb3dzL2RpbnB1dC5jLCB3aW5kb3dzL2ZvY3VzLmMsIHdpbmRvd3MvaW5wdXQuYywgd2luZG93cy9tZGkuYywgd2luZG93cy9ub25jbGllbnQuYywgd2luZG93cy9wYWludGluZy5jLCB3aW5kb3dzL3Byb3BlcnR5LmMsIHdpbmRvd3MvcXVldWUuYywgd2luZG93cy9zY3JvbGwuYywgd2luZG93cy93aW4uYywgd2luZG93cy93aW5wb3MuYywgd2luZG93cy93aW5wcm9jLmMsIHdpbmRvd3MveDExZHJ2L2NsaXBib2FyZC5jLCB3aW5kb3dzL3gxMWRydi9ldmVudC5jLCB3aW5kb3dzL3gxMWRydi9tb3VzZS5jLCB3aW5kb3dzL3gxMWRydi93bmQuYywgY29udHJvbHMvYnV0dG9uLmMsIGNvbnRyb2xzL2NvbWJvLmMsIGNvbnRyb2xzL2Rlc2t0b3AuYywgY29udHJvbHMvZWRpdC5jLCBjb250cm9scy9pY29udGl0bGUuYywgY29udHJvbHMvbGlzdGJveC5jLCBjb250cm9scy9tZW51LmMsIGNvbnRyb2xzL3Njcm9sbC5jLCBjb250cm9scy9zdGF0aWMuYywgZGxscy9jb21jdGwzMi91cGRvd24uYywgZ3JhcGhpY3MvZGRyYXcuYywgaWYxNjMyL3RodW5rLmM6CglGcmFuY29pcyBCb2lzdmVydCA8ZnJhbmNvaXNAbWFjYWRhbWlhbi5jb20+CglNYWRlIGFjY2VzcyB0byB0aGUgd25kIHN0cnVjdCB0aHJlYWQtc2FmZS4KCgkqICovKjogSmltIEFzdG9uIDxhc3RvMDAwMUBhbGdvbnF1aW5jLm9uLmNhPgoJUmVuYW1lZCB3aW50eXBlcy5oIHRvIHdpbmRlZi5oLgoKCSogbWVtb3J5L2hlYXAuYzogTWFrZSB0aGUgc3lzdGVtIGhlYXAgY3JpdGljYWwgc2VjdGlvbiBnbG9iYWwuCgoJKiBNYWtlLnJ1bGVzLmluOgoJRml4ZWQgTWFrZWZpbGUgdXAtdG8tZGF0ZSBjaGVjayB0byBhdm9pZCByZWxpbmtpbmcgYWxsIHRoZSBvYmplY3QKCWZpbGVzLgoKCSogd2luZG93cy9kaW5wdXQuYzogUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglSZWltcGxlbWVudGVkIHNvbWUgY29kZSB3aXRob3V0IHVzaW5nIFgxMS4KCgkqIGdyYXBoaWNzL2RkcmF3LmMsIHJlbGF5MzIvZGRyYXcuc3BlYzoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJQWRkZWQgZnVuY3Rpb25zIERpcmVjdERyYXdFbnVtZXJhdGVXIGFuZCBEaXJlY3REcmF3RW51bWVyYXRlRXhXLgoKCSogaW5jbHVkZS9wZWV4ZS5oLCBsb2FkZXIvcGVfaW1hZ2UuYzogVGhlb2RvcmUgUy4gSGV0a2UgPHRzaEBndGUubmV0PgoJQWRkZWQgdHJhY2luZyBmb3IgZGVsYXllZCBpbXBvcnRzIGFuZCByZW1vdmVkIHRoZSBmaXhtZS4KCgkqIGZpbGVzL2Rvc19mcy5jOiBQZXRlciBHYW50ZW4gPGdhbnRlbkB1bmktYnJlbWVuLmRlPgoJQmV0dGVyIGltcGxlbWVudGF0aW9uIG9mIEdldFNob3J0UGF0aE5hbWVBL1cuCgoJKiBtaXNjL3JlZ2lzdHJ5LmMsIHdpbmUuaW5pOiBOYXRoYW4gWm9yaWNoIDx3ZmlsYXJkb0BmdXNlLm5ldD4KCUFsbG93IHRoZSBmaWxlIG5hbWVzIGFuZCBwYXRocyBmb3IgdGhlIHJlZ2lzdHJ5IGZpbGVzICh1c2VyLnJlZyBhbmQKCXN5c3RlbS5yZWcpIHRvIGJlIHNwZWNpZmllZCBpbiBhIFtSZWdpc3RyeV0gc2VjdGlvbiBvZiB3aW5lLmluaSBvcgoJb3RoZXIgY29uZmlnIGZpbGUuCgoJKiBtZW1vcnkvc3RyaW5nLmM6IEdlcmFyZCBQYXRlbCA8Zy5wYXRlbEB3YW5hZG9vLmZyPgoJRml4IE9lbVRvQW5zaUJ1ZmYgZm9yIHJlYWwgV2luMzEgYmVoYXZpb3IuCgoJKiB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUZpcnN0IGF0dGVtcHQgYXQgc3VwcG9ydGluZyBkaWZmZXJlbnQga2V5Ym9hcmQgbGF5b3V0cyB3aXRoIHRoZWlyCgljb3JyZWN0IHNjYW5jb2RlIG1hcHBpbmcuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgcHJvZ3JhbXMvTWFrZWZpbGUuaW4sIHByb2dyYW1zL3JlZ2FwaS8uY3ZzaWdub3JlLCBwcm9ncmFtcy9yZWdhcGkvTWFrZWZpbGUuaW4sIHByb2dyYW1zL3JlZ2FwaS9SRUFETUUsIHByb2dyYW1zL3JlZ2FwaS9yZWdGaXhlci5wbCwgcHJvZ3JhbXMvcmVnYXBpL3JlZ1Jlc3RvcmVyLnBsLCBwcm9ncmFtcy9yZWdhcGkvcmVnU2V0LnNoLCBwcm9ncmFtcy9yZWdhcGkvcmVnYXBpLmM6CglTeWx2YWluIFN0Lkdlcm1haW4gPHN5bHZhaW5AbWFjYWRhbWlhbi5jb20+CglBZGRlZCBjb21tYW5kIGxpbmUgdG9vbCB0byBhY2Nlc3MgdGhlIHJlZ2lzdHJ5LgoKCSogcmMvd2luZXJjLmM6IEZpeGVkIGNvbXBpbGF0aW9uLgoKCSogcmMvLmN2c2lnbm9yZTogUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglJZ25vcmUgZ2VuZXJhdGVkIGZpbGVzLgoKCSogcHJvZ3JhbXMvbm90ZXBhZC9sY2MuaDogRml4ZWQgbWFrZSBkZXBlbmQuCgoJKiBvbGUvb2xlMi5jLCBvbGUvb2xlZm9udC5jLCBpbmNsdWRlL29sZS5oLCBpbmNsdWRlL29sZTIuaCwgaW5jbHVkZS9vbGVhdXRvLmgsIGluY2x1ZGUvb2xlY3RsLmgsIGluY2x1ZGUvd2luZS9vYmpfY29udHJvbC5oLCBpbmNsdWRlL3dpbmUvb2JqX2RhdGFvYmplY3QuaCwgaW5jbHVkZS93aW5lL29ial9kcmFnZHJvcC5oLCBpbmNsdWRlL3dpbmUvb2JqX2lucGxhY2UuaCwgaW5jbHVkZS93aW5lL29ial9tb25pa2VyLmgsIGluY2x1ZGUvd2luZS9vYmpfb2xlYXV0LmgsIGluY2x1ZGUvd2luZS9vYmpfb2xlZm9udC5oLCBpbmNsdWRlL3dpbmUvb2JqX29sZW9iai5oLCBpbmNsdWRlL3dpbmUvb2JqX29sZXVuZG8uaCwgaW5jbHVkZS93aW5lL29ial9vbGV2aWV3LmgsIGluY2x1ZGUvd2luZS9vYmpfcGljdHVyZS5oLCBpbmNsdWRlL3dpbmUvb2JqX3NoZWxsbGluay5oLCBpbmNsdWRlL3dpbmUvb2JqX3N0b3JhZ2UuaCwgaW5jbHVkZS93aW5lcnJvci5oLCBpbmNsdWRlL3dpbmdkaS5oLCBpbmNsdWRlL3dpbnNvY2suaCwgaW5jbHVkZS93aW51c2VyLmgsIGluY2x1ZGUvd3R5cGVzLmg6CglQYXVsIFF1aW5uIDxwYXVscUBsaW51eG1hc3Rlci5odW5ncnljYXRzLm9yZz4KCU1hbnkgbmV3IGRlZmluZXMsIGFuZCBzdHJ1Y3RzIHRvIGhlbHAgY29tcGlsZSBNRkMuIEFzIHdlbGwgYXMgYSBmZXcKCU9MRSBjb3JyZWN0aW9ucyBmcm9tIGVhcmxpZXIuCgoJKiBsb2FkZXIvbmUvbW9kdWxlLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglNYWtlIEdldE1vZHVsZUhhbmRsZTE2IG9ubHkgbG9vayBmb3IgbW9kdWxlIG5hbWVzLCBub3QgcGF0aCBuYW1lcy4KCgkqIG1zZG9zL2ludDEwLmM6IEplc3MgSGFhcyA8ZGVzbW9rZUBob3RtYWlsLmNvbT4KCUFkZGVkIHNvbWUgbW9yZSB2Z2EgdmlkZW8gbW9kZXMuCgoJKiB3aW5kb3dzL3gxMWRydi93bmQuYzogUGF2ZWwgUm9za2luIDxwYXZlbF9yb3NraW5AZ2VvY2l0aWVzLmNvbT4KCVByZXZlbnQgWDExIGVycm9ycyB3aGVuIFhDcmVhdGVXaW5kb3cgaXMgY2FsbGVkIHdpdGggemVybyB3aWR0aCBvcgoJaGVpZ2h0LgoKCSogb2JqZWN0cy9tZXRhZmlsZS5jOiBDYW9sYW4gTWNOYW1hcmEgPENhb2xhbi5NY05hbWFyYUB1bC5pZT4KCUFkZGVkIG1ldGFmaWxlIHN1cHBvcnQgZm9yIEV4dEZsb29kRmlsbC4KCgkqIGNvbnRyb2xzL2J1dHRvbi5jOgoJRGlyayBUaGllcmJhY2ggPHRoaWVyYmFjaEBtYXRoZW1hdGlrLnR1LWRhcm1zdGFkdC5kZT4KCVBhaW50IGdyYXkgdGV4dCBvbiBncmF5IGJhY2tncm91bmQgaW4gY2hlY2tib3hlcy9yYWRpb2J1dHRvbnMgYnkKCXN0aXBwbGluZy4gQWxzbyBjaGFuZ2VkIHRoZSBicnVzaCB1c2VkIGluIHRoaXMgY2FzZSB0byBnaXZlIGJldHRlcgoJcmVhZGFiaWxpdHkgd2l0aCBYIGZvbnRzLgoKCSogaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgaW5jbHVkZS90YXBpLmgsIG1pc2MvQXR0aWMvdGFwaTMyLmMsIG1pc2MvTWFrZWZpbGUuaW4sIHJlbGF5MzIvdGFwaTMyLnNwZWMsIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGxscy9NYWtlZmlsZS5pbiwgZGxscy90YXBpMzIvLmN2c2lnbm9yZSwgZGxscy90YXBpMzIvTWFrZWZpbGUuaW4sIGRsbHMvdGFwaTMyL2Fzc2lzdGVkLmMsIGRsbHMvdGFwaTMyL2xpbmUuYywgZGxscy90YXBpMzIvcGhvbmUuYywgaW5jbHVkZS9kZWJ1Zy5oOgoJQW5kcmVhcyBNb2hyIDxjaXBhbTg5NUBjaXAxLmluZC51bmktc3R1dHRnYXJ0LmRlPgoJSW1wbGVtZW50ZWQgKG5lYXJseSkgYWxsIFRBUEkgZnVuY3Rpb25zIGFzIHN0dWJzLgoKCSogaW5jbHVkZS93aW5lL3dpbnVzZXIxNi5oLCBtaXNjL2NvbW0uYywgZmlsZXMvZG9zX2ZzLmMsIGluY2x1ZGUvd2luYmFzZS5oOgoJTWljaGFlbCBNY0Nvcm1hY2sgPE1pY2hhZWwuTWNDb3JtYWNrQGFsY2F0ZWwuY29tLmF1PgoJQmFzaWMgc3VwcG9ydCBmb3IgV0lOMzIgc2VyaWFsIGNvbW11bmljYXRpb25zIEFQSS4KCU1vZGlmeSBET1NGU19PcGVuRGV2aWNlIHRvIGFsbG93IG9wZW5pbmcgb2YgQ09NIHBvcnRzLgoJQ2hhbmdlIFdpbjMyIGNvbW0gZnVuY3Rpb25zIHRvIGFjY2VwdCBmaWxlIGhhbmRsZS4KCUFkZCBkZWNsYXJhdGlvbiBvZiBDT01TVEFUMzIgc3RydWN0dXJlLgoKCSogZ3JhcGhpY3MvdmdhLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRml4ZWQgYSBzaWxseSBWR0EtZW11bGF0aW9uIHBhbGV0dGUgYnVnLgoKCSogbXNkb3MvaW50MTAuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglGaXhlZCBhIGNvdXBsZSBvZiB1Z2x5IHdhcm5pbmdzIChjYXVzZWQgYnkgdWdseSBlcnJvcnMpLgoKCSogbXNkb3MvZG9zbWVtLmM6IEFuZHJlYXMgTW9ociA8Y2lwYW04OTVAY2lwMS5pbmQudW5pLXN0dXR0Z2FydC5kZT4KCUJ1ZyBmaXguCgoJKiBkbGxzL3NoZWxsMzIvYnJzZm9sZGVyLmMsIGRsbHMvc2hlbGwzMi9jb250bWVudS5jLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jLCBkbGxzL3NoZWxsMzIvZW51bWlkbGlzdC5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGRsbHMvc2hlbGwzMi9zaGVsbGd1aWQuYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBpbmNsdWRlL3NobGd1aWQuaCwgaW5jbHVkZS9zaGxvYmouaCwgaW5jbHVkZS93aW5lL29ial9lbnVtaWRsaXN0LmgsIGluY2x1ZGUvd2luZS9vYmpfc2hlbGxmb2xkZXIuaCwgb2xlL2d1aWQuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJLSBJU2hlbGxGb2xkZXIgYW5kIElFbnVtSURMaXN0IGFyZSB1c2luZyB0aGUgbmV3IENPTSBoZWFkZXJzCgktIGZpeGVkIHNvcnQgb3JkZXIgZm9yIGZvbGRlcnMgYW5kIGRyaXZlcwoKCSogUkVBRE1FOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUNvcnJlY3RlZCBsb2NhdGlvbiBvZiBGQVEuCgoJKiBtc2Rvcy9pbnQyMS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUZ1bGx5IGltcGxlbWVudGVkIERpcmVjdCBDb25zb2xlIElucHV0LgoKU2F0IE1hciAxMyAxODoyMDoyNyAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luZG93cy9xdWV1ZS5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGlmMTYzMi90aHVuay5jLCBzY2hlZHVsZXIvc3lzZGVwcy5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCBuZXdseSBpbnRyb2R1Y2VkIGFuZCBzb21lIGxlZnRvdmVyIHdhcm5pbmdzLgoKCSogaW5jbHVkZS93aW5nZGkuaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglJdCBpcyBub3cgcG9zc2libGUgdG8gdXNlIHRoZSBzdGFuZGFyZCBtYWNyb3MgZm9yIEdldFRleHRFeHRlbnRQb2ludAoJYW5kIEdldFRleHRFeHRlbnRQb2ludDMyLgoKCSogaW5jbHVkZS9wcnNodC5oOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCUZpeGVkIHNvbWUgU2VuZE1lc3NhZ2UzMkEgdGhhdCBlc2NhcGVkIHRoZSByZW5hbWluZy4KCgkqIGluY2x1ZGUvb2xlMi5oOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCU9uIHdpbmRvd3Mgb2xlMi5oIGluY2x1ZGVzIG9sZWF1dG8uaCBhbmQgc29tZSBwcm9ncmFtcyBkZXBlbmQgb24gdGhpcy4KCgkqIGluY2x1ZGUvb2xlYXV0by5oLCBvbGUvb2xlMmRpc3AuYzogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglGaXhlcyBpbiB0aGUgU3lzQWxsb2NTdHJpbmcgZnVuY3Rpb25zIHByb3RvdHlwZXMuIEl0J3MgbW9zdGx5ICdjb25zdCcKCXByb2JsZW1zIHRoYXQgcHJldmVudCByZWd1bGFyIGNvZGUgZnJvbSBjb21waWxpbmcuCgoJKiBkbGxzL2NvbW1kbGcvZmlsZWRsZy5jLCBncmFwaGljcy94MTFkcnYvb2VtYml0bWFwLmMsIGluY2x1ZGUvYml0bWFwcy9BdHRpYy9vYm1fY2Ryb20sIGluY2x1ZGUvYml0bWFwcy9BdHRpYy9vYm1fZHJpdmUsIGluY2x1ZGUvYml0bWFwcy9BdHRpYy9vYm1fZm9sZGVyLCBpbmNsdWRlL2JpdG1hcHMvQXR0aWMvb2JtX2ZvbGRlcjIsIGluY2x1ZGUvYml0bWFwcy9BdHRpYy9vYm1faGFyZGRpc2ssIGluY2x1ZGUvYml0bWFwcy9vaWNfY2Ryb20sIGluY2x1ZGUvYml0bWFwcy9vaWNfZmxvcHB5LCBpbmNsdWRlL2JpdG1hcHMvb2ljX2ZvbGRlciwgaW5jbHVkZS9iaXRtYXBzL29pY19mb2xkZXIyLCBpbmNsdWRlL2JpdG1hcHMvb2ljX2hkaXNrLCBpbmNsdWRlL2JpdG1hcHMvb2ljX25ldHdvcmssIGluY2x1ZGUvd2ludXNlci5oOgoJUGF2ZWwgUm9za2luIDxwYXZlbF9yb3NraW5AZ2VvY2l0aWVzLmNvbT4KCUZpbGUgb3BlbiBkaWFsb2cgbm93IHVzZXMgaWNvbnMgaW5zdGVhZCBvZiBiaXRtYXBzLgoKCSogaW5jbHVkZS92ZncuaDogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglVcGRhdGVkIEFWSSogY2xhc3MgaW50ZXJmYWNlIHRvIG5ldyBJQ09NXyBtZXRob2RzLgoKCSogbXVsdGltZWRpYS9tc3ZpZGVvLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU29tZSBmaXhlcyBhbmQgYWRkaXRpb25zLgoKCSogZGxscy9hdmlmaWwzMi8uY3ZzaWdub3JlLCBkbGxzL2F2aWZpbDMyL01ha2VmaWxlLmluLCBkbGxzL2F2aWZpbDMyL2F2aWZpbGUuYywgaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oLCByZWxheTMyL2F2aWZpbDMyLnNwZWMsIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGxscy9NYWtlZmlsZS5pbjoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU3RhcnRlZCBvbiBhdmlmaWwzMiBpbXBsZW1lbnRhdGlvbiAob25seSBzdHVicyBjdXJyZW50bHkpLgoKCSogZ3JhcGhpY3MvcGFpbnRpbmcuYzogUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglSZWltcGxlbWVudGVkIERyYXdGb2N1c1JlY3Qgd2l0aG91dCB1c2luZyBYMTEuCgoJKiBpbmNsdWRlL21pc2NlbXUuaCwgbXNkb3MvZG9zbWVtLmMsIG1zZG9zL2ludDEwLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglJbXBsZW1lbnRlZCBtb2RlIHNldHRpbmcgdGhpbmdzIGFzIHdlbGwgYXMgVkVTQSBhZGRpdGlvbnMgYW5kIG90aGVyCgl0aGluZ3MuIENsZWFuZWQgdXAgRE9TTUVNX0Jpb3NEYXRhIGhhbmRsaW5nLgoKCSogaW5jbHVkZS93aW5lL29ial9vbGVmb250LmgsIG9sZS9vbGVmb250LmM6CglGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglJbXBsZW1lbnRlZCB0aGUgSVBlcnNpc3RTdHJlYW0gaW50ZXJmYWNlIG9uIHRoZSBPTEUgZm9udCBvYmplY3QuCgoJKiBtaXNjZW11L2VtdWxhdGUuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCU1ha2UgZnVuY3Rpb24gQlg9NiByb3VuZCBTVDAgdG8gaW50ZWdlci4KCgkqIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS93aW5nZGkuaDogUGF1bCBRdWlubiA8cGF1bHFAY29yZWwuY2E+CglBZHJpYW4gVGh1cnN0b24gPGFkcmlhbnRAY29yZWwuY2E+CgktIENoYW5nZWQgTFZNX1NFVElURU1QT1NJVElPTiAtPiBMVk1fU0VUSVRFTVBPU0lUSU9OMzIKCSAgICAgICAgICBMVk1fU0VUSVRFTVBPU0lUSU9OMTYgLT4gTFZNX1NFVElURU1QT1NJVElPTgoJLSBBZGRlZCBzb21lIG1pc3Npbmcgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgdG8gd2luZ2RpLmgKCS0gQWRkZWQgcHJvcGVyIGRlZmluZXMgZm9yIEdldENoYXJXaWR0aHNYWFgKCS0gQWRkZWQgYysrIHByb3RlY3Rpb24gdG8gd2luZ2RpLmgKCgkqIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYywgZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hlbGxwYXRoLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGluY2x1ZGUvc2hlbGwuaCwgcmVsYXkzMi9zaGVsbDMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCS0gbW9zdGx5IGNsZWFudXAgYWZ0ZXIgdGhlIHJlbmFtaW5nCgktIGltcGxlbWVudGVkIFNISUxDcmVhdGVGcm9tUGF0aAoJLSBzbWFsbCBjaGFuZ2VkIHRvIFNIR2V0RmlsZUluZm8KCgkqIGluY2x1ZGUvcHJzaHQuaCwgaW5jbHVkZS93aW51c2VyLmg6CglCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJQ2hhbmdlZCB0aGUgRExHVEVNUExBVEUgYW5kIERMR0lURU1URU1QTEFURSB0eXBlcyB0byBhZGhlcmUgdG8gdGhlIEFXCglzdHJ1Y3R1cmUgZm9yIGNvbXBhdGliaWxpdHkuCgoJKiBkbGxzL2NvbW1kbGcvcHJpbnRkbGcuYywgaW5jbHVkZS9jZGVyci5oLCBpbmNsdWRlL2NvbW1kbGcuaCwgZGxscy9jb21tZGxnL2NvbG9yZGxnLmMsIGRsbHMvY29tbWRsZy9maWxlZGxnLmMsIGRsbHMvY29tbWRsZy9mb250ZGxnLmM6CglCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJTW92ZWQgZXJyb3IgY29kZXMgdG8gY2RlcnIuaC4KCgkqIGxvYWRlci9tb2R1bGUuYzogUGV0ZXIgR2FudGVuIDxnYW50ZW5AdW5pLWJyZW1lbi5kZT4KCUZpeCBDcmVhdGVQcm9jZXNzIHRvIGhhbmRsZSBscENvbW1hbmRsaW5lIGJldHRlci4KCgkqIHdpbjMyL2luaXQuYzogUGV0ZXIgR2FudGVuIDxnYW50ZW5AdW5pLWJyZW1lbi5kZT4KCUNoYW5nZSBHZXRTdGFydHVwSW5mb0EvVyB0byByZXR1cm4gdGhlIHJlYWwgU3RhcnR1cEluZm8uCgoJKiB3aW5kb3dzL21kaS5jOiBHdXkgQWxiZXJ0ZWxsaSAgPDxnYWxiZXJ0ZUBuZW8ubHJ1bi5jb20+PgoJSGFuZGxlIG51bGwgd25kUHRyIGZvciBtZGkgd2luZG93LgoKCSogaW5jbHVkZS93aW5iYXNlLmg6IERhdmUgUGlja2xlcyA8ZGF2ZXBAbnVnYXRlLmRlbW9uLmNvLnVrPgoJRml4ZWQgYSBjb3VwbGUgb2YgbWlzc2luZyAjZGVmaW5lcyBmb3IgV2luMzIgQVBJIGZ1bmN0aW9ucyB3aXRoCglBU0NJSS9Vbmljb2RlIHZlcnNpb25zLgoKCSogd2luMzIvbmV3Zm5zLmMsIGlmMTYzMi9rZXJuZWwuc3BlYywgaWYxNjMyL3RodW5rLmMsIGlmMTYzMi93cHJvY3Muc3BlYywgaW5jbHVkZS9jYWxsYmFjay5oLCBtaXNjL2NhbGxiYWNrLmMsIHJlbGF5MzIvTWFrZWZpbGUuaW4sIHJlbGF5MzIvdXR0aHVuay5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBVVFJlZ2lzdGVyIGFuZCBVVFVuUmVnaXN0ZXIuCgoJKiBpZjE2MzIvZGRlbWwuc3BlYywgaW5jbHVkZS9kZGVtbC5oLCBpbmNsdWRlL3dpbm50LmgsIG1pc2MvZGRlbWwuYywgcmVsYXkzMi91c2VyMzIuc3BlYzoKCTxrZWl0aF9tQHN3ZWVuZXkuZGVtb24uY28udWs+CglBZGRlZCBjb2RlZCBzdHVicyBmb3IgRGRlUXVlcnlDb252SW5mbyAoMTYgJiAzMiBiaXQpLCBEZGVBZGREYXRhICgzMgoJYml0KSwgRGRlQWJhbmRvblRyYW5zYWN0aW9uICgzMiBiaXQpLCBEZGVJbXBlcnNvbmF0ZUNsaWVudCAoMzIpCglEZGVTZXRRdWFsaXR5T2ZTZXJ2aWNlLCBEZGVTZXRVc2VySGFuZGxlLgoJQ29ycmVjdGVkIGhlYXAgaGFuZGxpbmcgaW4gRGRlSW5pdGlhbGl6ZVcsIHJlZmluZWQgQ3JlYXRlTXV0ZXggZXJyb3IKCWhhbmRsaW5nLgoJR2VuZXJhbCB0aWR5aW5nLgoKCSogaWYxNjMyL29sZWNsaS5zcGVjLCBpbmNsdWRlL29sZS5oLCBvbGUvb2xlY2xpLmM6CglQYXZlbCBSb3NraW4gPHBhdmVsX3Jvc2tpbkBnZW9jaXRpZXMuY29tPgoJQWRkZWQgcHJvdG90eXBlcyBmb3IgT2xlUXVlcnlMaW5rRnJvbUNsaXAsIE9sZVF1ZXJ5Q3JlYXRlRnJvbUNsaXAsCglPbGVDcmVhdGVMaW5rRnJvbUNsaXAsIE9sZUNyZWF0ZUZyb21DbGlwLCBPbGVRdWVyeVR5cGUsCglPbGVSZXZlcnRDbGllbnREb2MsIE9sZUVudW1PYmplY3RzLgoKCSogcmVsYXkzMi9vbGVjbGkzMi5zcGVjOiBQYXZlbCBSb3NraW4gPHBhdmVsX3Jvc2tpbkBnZW9jaXRpZXMuY29tPgoJRGVmaW5pdGlvbiBmb3IgT2xlQ3JlYXRlTGlua0Zyb21DbGlwIHdhcyBpbmNvcnJlY3QuCgoJKiBsb2FkZXIvcmVzb3VyY2UuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglNYXNrIG91dCB0aGUgdXBwZXIgMTIgYml0cyBmcm9tIHRoZSByZXNvdXJjZWlkLCBqdXN0IGxpa2Ugd2luOTUgZG9lcy4KCgkqIEJVR1M6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJVXBkYXRlZCBidWcgbGlzdCBieSBteSBrbm93bGVkZ2Ugb2YgdGhlbS4KCgkqIG9sZS9zdG9yYWdlMzIuYzogVGh1eSBOZ3V5ZW4gPHRodXlAbWFjYWRhbWlhbi5jb20+CglTdGdDcmVhdGVEb2NmaWxlIGFjY2VwdHMgTlVMTCBhcyBhIGZpbGUgbmFtZS4KCgkqIG9iamVjdHMvbWV0YWZpbGUuYzogQ2FvbGFuIE1jTmFtYXJhIDxDYW9sYW4uTWNOYW1hcmFAdWwuaWU+CglBZGRlZCBzdXBwb3J0IGZvciBhbHRlcm5hdGUgRElCQklUQkxUIGxheW91dC4KCgkqIGRlYnVnZ2VyL21zYy5jOiBTZXJnZXkgVHVyY2hhbm92IDx0dXJjaGFub3ZAdXNhLm5ldD4KCUJ1ZmZlciBzaXplIGJ1ZyBpbiBMb2NhdGVEZWJ1Z0luZm9GaWxlLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogQW5kcmVhcyBNb2hyIDxjaXBhbTg5NUBjaXAxLmluZC51bmktc3R1dHRnYXJ0LmRlPgoJSW1wcm92ZWQgImVycm9yIiBtZXNzYWdlIHJlYWRhYmlsaXR5LgoKCSogc2VydmVyL3Byb2Nlc3MuYzogRml4ZWQgcHJvY2Vzc19zaWduYWxlZCAodGhhbmtzIHRvIFV3ZSBCb25uZXMpLgoKCSogZGxscy9jb21jdGwzMi9saXN0dmlldy5jOiBGaXhlZCBtYWtlIGRlcGVuZAoKRnJpIE1hciAxMiAxNzo0Mjo1MCAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZGxscy9jb21jdGwzMi9hbmltYXRlLmMsIGRsbHMvY29tY3RsMzIvY29tYm9leC5jLCBkbGxzL2NvbWN0bDMyL2RhdGV0aW1lLmMsIGRsbHMvY29tY3RsMzIvZmxhdHNiLmMsIGRsbHMvY29tY3RsMzIvaGVhZGVyLmMsIGRsbHMvY29tY3RsMzIvaG90a2V5LmMsIGRsbHMvY29tY3RsMzIvaXBhZGRyZXNzLmMsIGRsbHMvY29tY3RsMzIvbW9udGhjYWwuYywgZGxscy9jb21jdGwzMi9uYXRpdmVmb250LmMsIGRsbHMvY29tY3RsMzIvcGFnZXIuYywgZGxscy9jb21jdGwzMi9yZWJhci5jLCBkbGxzL2NvbWN0bDMyL3N0YXR1cy5jLCBkbGxzL2NvbWN0bDMyL3Rvb2xiYXIuYywgZGxscy9jb21jdGwzMi90b29sdGlwcy5jLCBkbGxzL2NvbWN0bDMyL3RyYWNrYmFyLmMsIGluY2x1ZGUvaXBhZGRyZXNzLmgsIGluY2x1ZGUvdXBkb3duLmg6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJUmVwbGFjZWQgZGlyZWN0IGFjY2VzcyB0byB0aGUgV05EIHN0cnVjdHVyZSBieSBjb3JyZXNwb25kaW5nIGNhbGxzIHRvCglXaW4zMiBmdW5jdGlvbnMuCgoJKiBkbGxzL2NvbWN0bDMyL2NvbW1jdHJsLmMsIGRsbHMvY29tY3RsMzIvcHJvZ3Jlc3MuYywgZGxscy9jb21jdGwzMi91cGRvd24uYywgaW5jbHVkZS9jb21tY3RybC5oOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIHNvbWUgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZSBhdXRvbWF0ZWQgcmVuYW1pbmcuCgoJKiByZXNvdXJjZXMvLmN2c2lnbm9yZTogQWRkZWQgc3lzcmVzX1J1LnMKCgkqIGRsbHMvY29tY3RsMzIvaGVhZGVyLmMsIGRsbHMvY29tY3RsMzIvbGlzdHZpZXcuYywgaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL2xpc3R2aWV3Lmg6CglMdWMgVG91cmFuZ2VhdSA8bHVjQG1hY2FkYW1pYW4uY29tPgoJQ2hhbmdlZCB0aGUgbGlzdHZpZXcgY29udHJvbCB0byBhZGQgdGhlIHJlcG9ydCB2aWV3IGFuZCBmaXggc29tZSBidWdzCglmb3IgdGhlIGxpc3Qgdmlldy4KCgkqIG1pc2Mvc2hlbGwuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglSZW1vdmVkIHVzZSBvZiBXTkQgc3RydWN0LgoKCSogZGxscy9udGRsbC9ydGxzdHIuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCAjaWZkZWYgSEFWRV9XQ1RZUEVfSC4KCgkqIGRsbHMvY29tY3RsMzIvdGFiLmM6IFRodXkgTmd1eWVuIDx0aHV5QG1hY2FkYW1pYW4uY29tPgoJUmVtb3ZlZCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBXTkQgc3RydWN0LgoKCSogd2luZG93cy93aW5wcm9jLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTWVzc2FnZSB0cmFuc2xhdGlvbiBmb3IgV01fV0lOSU5JQ0hBTkdFLgoKCSogd2luZG93cy9ub25jbGllbnQuYzogUGF2ZWwgUm9za2luIDxwYXZlbF9yb3NraW5AZ2VvY2l0aWVzLmNvbT4KCW9ibV9jbG9zZWRfOTUgc2hvdWxkIG5vdCBiZSBkcmF3biBpbnZlcnRlZC4KCgkqIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYzogU3lsdmFpbiBTdC5HZXJtYWluIDxzeWx2YWluQG1hY2FkYW1pYW4uY29tPgoJUmVtb3ZlZCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBXTkQgc3RydWN0LgoKCSogb2xlL3N0Z19iaWdibG9ja2ZpbGUuYywgb2xlL3N0b3JhZ2UzMi5jLCBvbGUvc3RvcmFnZTMyLmg6CglUaHV5IE5ndXllbiA8dGh1eUBtYWNhZGFtaWFuLmNvbT4KCUltcHJvdmVkIHBlcmZvcm1hbmNlLgoKCSogd2luZG93cy9kY2UuYzogU3RlcGhhbmUgTHVzc2llciA8U3RlcGhhbmVAbWFjYWRhbWlhbi5jb20+CglDcmVhdGUgYSBuZXcgREMgaW4gR2V0RENFeCB3aGVuIG5vbmUgYXJlIGF2YWlsYWJsZS4KCgkqIG9sZS9vbGUyZGlzcC5jLCBvbGUvdmFyaWFudC5jLCByZWxheTMyL29sZWF1dDMyLnNwZWM6CglTdGVwaGFuZSBMdXNzaWVyIDxzdGVwaGFuZUBtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGVkIERvc0RhdGVUaW1lVG9WYXJpYW50KCkgYW5kIFN5c0FsbG9jU3RyaW5nQnl0ZUxlbigpIGZ1bmN0aW9ucy4KCgkqIGNvbnRyb2xzL2NvbWJvLmM6IFBhdmVsIFJvc2tpbiA8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+CglDaGFuZ2VkIHRoZSBidXR0b24gc3RhdGUgdG8gInVwIiBhcyBzb29uIGFzIGl0IGlzIGtub3duIHRoYXQgdGhlCglzZWxlY3Rpb24gaGFzIGJlZW4gY2FuY2VsbGVkLCBzbyB0aGUgYnV0dG9uIGlzIHJlZHJhd24gaW4gdGhlICJ1cCIKCXN0YXRlLgoKCSogbWlzY2VtdS9pbnN0ci5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUVtdWxhdGUgKHdlbGwsIGlnbm9yZSkgbW92IGNyMCxlYXggYW5kIG1vdiBlYXgsY3IwLgoKV2VkIE1hciAxMCAxODowMzo1NCAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS93aW5lL29ial9pbnBsYWNlLmgsIGluY2x1ZGUvd2luZS9vYmpfb2xlYXV0LmgsIGluY2x1ZGUvd2luZS9vYmpfb2xlb2JqLmgsIGluY2x1ZGUvd2luZS9vYmpfb2xldW5kby5oLCBpbmNsdWRlL3dpbmUvb2JqX29sZXZpZXcuaCwgaW5jbHVkZS93aW5lL29ial9waWN0dXJlLmgsIGluY2x1ZGUvd2luZS9vYmpfcHJvcGVydHkuaCwgb2xlL2NvbXBvYmouYywgb2xlL2d1aWQuYywgb2xlL29sZTJkaXNwLmMsIG9sZS9vbGVjbGkuYywgb2xlL29sZWRsZy5jLCBvbGUvb2xlb2JqLmMsIGRsbHMvc2hlbGwzMi9kYXRhb2JqZWN0LmMsIGRsbHMvc2hlbGwzMi9waWRsLmMsIGRsbHMvc2hlbGwzMi9zaGxmb2xkZXIuYywgaW5jbHVkZS9BdHRpYy93aW50eXBlcy5oLCBpbmNsdWRlL2NvbW1kbGcuaCwgaW5jbHVkZS9pbW0uaCwgaW5jbHVkZS9vYWlkbC5oLCBpbmNsdWRlL29iamJhc2UuaCwgaW5jbHVkZS9vY2lkbC5oLCBpbmNsdWRlL29sZS5oLCBpbmNsdWRlL29sZTJ2ZXIuaCwgaW5jbHVkZS9vbGVhdXRvLmgsIGluY2x1ZGUvb2xlY3RsLmgsIGluY2x1ZGUvb2xlaWRsLmgsIGluY2x1ZGUvc2hsZ3VpZC5oLCBpbmNsdWRlL3NobG9iai5oLCBpbmNsdWRlL3dpbmJhc2UuaCwgaW5jbHVkZS93aW5lL29ial9iYXNlLmgsIGluY2x1ZGUvd2luZS9vYmpfY29udHJvbC5oLCBpbmNsdWRlL3dpbmUvb2JqX2RhdGFvYmplY3QuaCwgaW5jbHVkZS93aW5lL29ial9kcmFnZHJvcC5oLCBpbmNsdWRlL3dpbm50LmgsIGluY2x1ZGUvd3R5cGVzLmg6CglQYXVsIFF1aW5uIDxwYXVscUBjb3JlbC5jYT4KCUFkZGVkIGEgbG90IG9mIG5ldyBPTEUgaW50ZXJmYWNlcy4KCgkqIGRvY3VtZW50YXRpb24vbGFuZ3VhZ2VzLCBkb2N1bWVudGF0aW9uL3dpbmUubWFuLCBpbmNsdWRlL29wdGlvbnMuaCwgbWlzYy9tYWluLmMsIG9sZS9vbGUybmxzLmMsIHJlc291cmNlcy9NYWtlZmlsZS5pbiwgcmVzb3VyY2VzL3N5c3Jlcy5jLCByZXNvdXJjZXMvc3lzcmVzX1J1LnJjOgoJQWxleGFuZGVyIEthbmF2aW4gPGFrQGNhdmUuaG9wLnN0dS5uZXZhLnJ1PgoJQWRkZWQgc3VwcG9ydCBmb3IgUnVzc2lhbiBsYW5ndWFnZS4KCgkqIGlmMTYzMi90aHVuay5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVRlbXBvcmFyeSBmaXg6IEFjdGl2YXRlIDE2LWJpdCBzeXN0ZW0gdGltZXIgY2FsbGJhY2sgcm91dGluZXMsIGJ1dAoJc2tpcCBjYWxsaW5nIHRoZW0gaWYgdGltZXIgc2lnbmFsIG9jY3VyZWQgd2hpbGUgY3VycmVudCB0aHJlYWQgd2FzCglob2xkaW5nIHRoZSBXaW4xNkxvY2sgKHRvIHByZXZlbnQgMTYtYml0IHN0YWNrIGNvcnJ1cHRpb24pLgoKCSogaW5jbHVkZS9zeXNsZXZlbC5oLCBzY2hlZHVsZXIvc3lzbGV2ZWwuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgX0NvbmZpcm1XaW4xNkxvY2sgKEtFUk5FTDMyLjk2KS4KCgkqIGdyYXBoaWNzL2RkcmF3LmMsIGluY2x1ZGUvZGRyYXcuaDoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSBzb21lIGNsZWFuIHVwIGluIGhhbmRsaW5nIG9mIGRlcHRoCgktIG1vcmUgZGVwdGggY29udmVyc2lvbiByb3V0aW5lcyBmb3IgWDExICgxNSwgMTYgYW5kIDMyIC0+IDgpCgoJKiBpbmNsdWRlL3F1ZXVlLmgsIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL3F1ZXVlLmM6CglTdGVwaGFuZSBMdXNzaWVyIDxzdGVwaGFuZUBtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGVkIFNlbmRNZXNzYWdlVGltZW91dCgpIGZ1bmN0aW9ucy4KCgkqIHByb2dyYW1zL25vdGVwYWQvQ2hhbmdlTG9nLCBwcm9ncmFtcy9ub3RlcGFkL01ha2VmaWxlLmluLCBwcm9ncmFtcy9ub3RlcGFkL3NlYXJjaC5jOgoJTWFyY2VsIEJhdXIgPG1iYXVyQGcyNi5ldGh6LmNoPgoJQWRkZWQgQm95ZXItTW9vcmUgdGV4dCBzZWFyY2guCgoJKiBpZjE2MzIvdGh1bmsuYywgaWYxNjMyL3VzZXIuc3BlYywgaW5jbHVkZS9jYWxsYmFjay5oLCBtaXNjL2NhbGxiYWNrLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkZGVkIFVTRVIuRGVzdHJveUljb24zMiB0byBDYWxsb3V0IHN0cnVjdC4KCgkqIGluY2x1ZGUvbW9kdWxlLmgsIGxvYWRlci9uZS9jb252ZXJ0LmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCURlbGV0ZWQgTkVfRnJlZVBFUmVzb3VyY2UoKS4KCgkqIGluY2x1ZGUvdXNlci5oLCBsb2FkZXIvbWFpbi5jLCBsb2FkZXIvbW9kdWxlLmMsIHdpbmRvd3MvdXNlci5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGFwdGVkIHRvIGN1cnNvci9pY29uIGhhbmRsaW5nIGNoYW5nZXMuCgoJKiBsb2FkZXIvbmUvcmVzb3VyY2UuYywgbG9hZGVyL3Jlc291cmNlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFsbG93IGFjY2Vzc2luZyBib3RoIE5FIGFuZCBQRSByZXNvdXJjZXMgd2l0aCBib3RoIDE2LSBhbmQgMzItYml0IEFQSS4KCUhvb2sgY3Vyc29yL2ljb24gZGVzdHJ1Y3Rpb24gaW50byBGcmVlUmVzb3VyY2UgKGxpa2UgV2luOTUpLgoKCSogaW5jbHVkZS9jdXJzb3JpY29uLmgsIG9iamVjdHMvY3Vyc29yaWNvbi5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBXaW45NS1zdHlsZSBzaGFyZWQgY3Vyc29yL2ljb24gY2FjaGUuCglNZXJnZWQgTkUgYW5kIFBFIHJlc291cmNlIGhhbmRsaW5nLgoKCSogZ3JhcGhpY3MveDExZHJ2L29lbWJpdG1hcC5jLCBpbmNsdWRlL2JpdG1hcHMvQXR0aWMvb2JtX2ZvbGRlciwgaW5jbHVkZS9iaXRtYXBzL0F0dGljL29ibV9mb2xkZXIyOgoJUGF2ZWwgUm9za2luIDxwYXZlbF9yb3NraW5AZ2VvY2l0aWVzLmNvbT4KCUZpeGVkIGZvbGRlciBiaXRtYXAgY29sb3JzIGZvciA4YnBwLgoKCSogZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmM6IENhb2xhbiBNY05hbWFyYSA8Q2FvbGFuLk1jTmFtYXJhQHVsLmllPgoJV2luZG93cyBkb2VzbnQgYWxsb3cgZGFzaGVkIGFuZCBkb3R0ZWQgbGluZXMgPiAxLgoKCSogb2xlL2NvbXBvYmouYzogRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJRml4ZWQgYSByZWZlcmVuY2UtY291bnRpbmcgcHJvYmxlbSBpbiB0aGUgZXh0ZXJuYWwgbG9jayBtZWNoYW5pc20uCgoJKiBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jOiBGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglGaXhlZCBhIHNpbXBsZSBidWcgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTaGVsbFZpZXcgb2JqZWN0cy4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYywgaW5jbHVkZS9zaGVsbC5oOgoJU2VyZ2V5IFR1cmNoYW5vdiA8dHVyY2hhbm92QHVzYS5uZXQ+CglBZGRlZCBzb21lIGV4dHJhIENTSURMcy4KCgkqIGxvYWRlci9tb2R1bGUuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IEFsbG93IGxwQ29tbWFuZExpbmUgPT0gTlVMTCBpbiBDcmVhdGVQcm9jZXNzKCkuCgoJKiB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IFRvQXNjaWkgc2hvdWxkIG5vdCBnZW5lcmF0ZSBBU0NJSSBjb2RlIHdoZW4ga2V5LXVwIGZsYWcgaXMgc2V0LgoKCSogZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jLCBncmFwaGljcy94MTFkcnYvYml0bWFwLmMsIHdpbmRvd3MveDExZHJ2L2V2ZW50LmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUF2b2lkIHVubmVjZXNzYXJ5IEdyYXBoaWNzRXhwb3NlIGV2ZW50cy4KCgkqIG9sZS9zYWZlYXJyYXkuYzogRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJRml4ZWQgaW5kZXggY2FsY3VsYXRpb25zIG9mIHRoZSB1cHBlciBhbmQgbG93ZXIgYm91bmRzIG9mIGEgc2FmZWFycmF5LgoJRml4ZWQgYSB3cm9uZyBpbml0aWFsaXphdGlvbiBvZiB0aGUgVlQgc2l6ZXMgYXJyYXkuCgoJKiBvbGUvb2xlMi5jLCByZWxheTMyL29sZTMyLnNwZWM6CglGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglJbXBsZW1lbnRhdGlvbiBvZiB0aGUgUmVsZWFzZVN0Z01lZGl1bSBtZXRob2QuCgpUdWUgTWFyICA5IDE3OjQ3OjUxIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBkbGxzL250ZGxsL01ha2VmaWxlLmluLCBkbGxzL250ZGxsL2ZpbGUuYywgZGxscy9udGRsbC9udC5jLCBkbGxzL250ZGxsL29tLmMsIGRsbHMvbnRkbGwvcmVnLmMsIGRsbHMvbnRkbGwvcnRsLmMsIGRsbHMvbnRkbGwvcnRsc3RyLmMsIGRsbHMvbnRkbGwvc2VjLmMsIGRsbHMvbnRkbGwvc3luYy5jLCBkbGxzL250ZGxsL3RpbWUuYywgcmVsYXkzMi9hZHZhcGkzMi5zcGVjLCByZWxheTMyL250ZGxsLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCS0gc29ydGVkIEFQSSBieSBncm91cHMKCS0gbmV3IHN0dWJzOiAgTnRRdWVyeURpcmVjdG9yeUZpbGUsICBad1F1ZXJ5RGlyZWN0b3J5RmlsZQoJLSBpbXBsLjogUnRsQWxsb2NhdGVIZWFwLCBSdGxDcmVhdGVIZWFwLCBSdGxEZXN0cm95SGVhcCwgUnRsRnJlZUhlYXAsCgkgIFJ0bEdldERhY2xTZWN1cml0eURlc2NyaXB0b3IsIFJ0bEdldFNhY2xTZWN1cml0eURlc2NyaXB0b3IKCS0gaW1wbC4gYnkgUmV4IEpvbGxpZmYgKHJleEBsdmNhYmxlbW9kZW0uY29tKTogUnRsVGltZVRvVGltZUZpZWxkcywKCSAgUnRsVGltZUZpZWxkc1RvVGltZQoKCSogaW5jbHVkZS9udGRkay5oLCBpbmNsdWRlL250ZGVmLmgsIGluY2x1ZGUvd2lubnQuaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTWFueSBuZXcgcHJvdG90eXBlcy4KCgkqIGxvYWRlci9yZXNvdXJjZS5jLCBpbmNsdWRlL21vZHVsZS5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXggdXNlIG9mIHdyb25nIHByb3RvdHlwZSBmcm9tIG50ZGxsLmguCgoJKiBkbGxzL2FkdmFwaTMyL3NlY3VyaXR5LmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1ha2UgbW9yZSBmdW5jdGlvbnMganVzdCBjYWxsaW5nIGRvd24gdG8gbnRkbGwuCglOZXc6IEdldFNlY3VyaXR5RGVzY3JpcHRvclNhY2wuCgoJKiBncmFwaGljcy9wc2Rydi9hZm0uYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJQWNjZXB0ICJOb3JtYWwiIGFzIGEgdmFsaWQgQUZNIHdlaWdodC4KCgkqIG9sZS9zdG9yYWdlMzIuYywgb2xlL3N0b3JhZ2UzMi5oOiBUaHV5IE5ndXllbiA8dGh1eUBtYWNhZGFtaWFuLmNvbT4KCVNtYXJ0ZXIgd2F5IG9mIHNlYXJjaGluZyBmb3IgYSBmcmVlIGJsb2NrLgoKCSogd2luZG93cy9tZXNzYWdlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogRGlyZWN0ZWRZaWVsZCgpIG9ubHkgdG8gMTYtYml0IHRhc2tzIGluIFJlcGx5TWVzc2FnZSgpLgoKCSogbGlidGVzdC9oZWxsbzUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDb3JyZWN0ZWQgY2FzdCBzbyBoZWxsbzUgY29tcGlsZXMgYWdhaW4uCgoJKiBkbGxzL2NvbW1kbGcvZmlsZWRsZy5jOiBOb3JtYW4gU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglEb24ndCBjb3B5IGxwc3RyRmlsZVRpdGxlIGlmIGdpdmVuIE5VTEwgcG9pbnRlciBmb3IgdGhpcy4KCURlbHBoaSAyLjAgcGFzc2VzIE5VTEwgZm9yIGxwc3RyRmlsZVRpdGxlIHRvIEdldE9wZW4vU2F2ZUZpbGVOYW1lLgoKCSogbWlzYy93aW5zb2NrLmMsIGluY2x1ZGUvd2luc29jay5oOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXggYnJva2VuIF9jb252ZXJ0X3NvY2tvcHQgZm9yIElQUFJPVE9fVENQIGNhc2VzLCBhZGRlZCBUQ1BfTk9ERUxBWS4KCgkqIG1zZG9zL2RwbWkuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglfX2FzbV9fIGZpeCBhcyBzdWdnZXN0ZWQgYnkgPGRhbmllbEBtYXQudXRmc20uY2w+IERhbmllbCBTZXJwZWxsLAoJcmVtb3ZlZCBhZGRpdGlvbmFsICJlYXgiIGZyb20gY2xvYmJlciBsaXN0LCBzbyBlZ2NzLWN1cnJlbnQgbGlrZXMgaXQuCgoJKiBtZW1vcnkvdmlydHVhbC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNyZWF0ZUZpbGVNYXBwaW5nIFNldExhc3RFcnJvcigwKXMgb24gbmV3bHkgY3JlYXRlZCBtYXBwaW5ncy4KClN1biBGZWIgMjggMjA6MDU6MTIgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGRsbHMvY29tbWRsZy8uY3ZzaWdub3JlLCBkbGxzL2NvbW1kbGcvTWFrZWZpbGUuaW4sIGRsbHMvY29tbWRsZy9jb2xvcmRsZy5jLCBkbGxzL2NvbW1kbGcvZmlsZWRsZy5jLCBkbGxzL2NvbW1kbGcvZmluZGRsZy5jLCBkbGxzL2NvbW1kbGcvZm9udGRsZy5jLCBkbGxzL2NvbW1kbGcvZ2VuZXJpYy5jLCBkbGxzL2NvbW1kbGcvcHJpbnRkbGcuYywgbWlzYy9BdHRpYy9jb21tZGxnLmMsIG1pc2MvTWFrZWZpbGUuaW4sIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGxscy9NYWtlZmlsZS5pbjoKCUtsYWFzIHZhbiBHZW5kIDxLbGFhc0B2YW5nZW5kLmRlbW9uLm5sPgoJQ3JlYXRlIGEgbmV3IHN1YmRpcmVjdG9yeSBmb3IgdGhlIGNvbW1vbiBkaWFsb2cgYm94IERMTCBhbmQgbW92ZSBhbGwKCWNvZGUgZnJvbSAvbWlzYy9jb21tZGxnLmMgdG8gdGhpcyBkaXJlY3RvcnkuICBBbHNvIG1hZGUgYSBzdGFydCBpbgoJZG9jdW1lbnRpbmcgdGhlIEFQSSBjYWxscy4KCgkqIG1pc2Mvd2luc29jay5jLCBkZWJ1Z2dlci9icmVhay5jLCBkZWJ1Z2dlci9kYmcueSwgZGVidWdnZXIvZGJnbWFpbi5jLCBkZWJ1Z2dlci9lZGl0bGluZS5jLCBkZWJ1Z2dlci9leHByLmMsIGRlYnVnZ2VyL2hhc2guYywgZGVidWdnZXIvaW5mby5jLCBkZWJ1Z2dlci9tZW1vcnkuYywgZGVidWdnZXIvbXNjLmMsIGRlYnVnZ2VyL3JlZ2lzdGVycy5jLCBkZWJ1Z2dlci9zb3VyY2UuYywgZGVidWdnZXIvc3RhY2suYywgZGVidWdnZXIvdHlwZXMuYywgaW5jbHVkZS9BdHRpYy93aW50eXBlcy5oOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglNb3JlIGluY2x1ZGUgb3B0aW1pemF0aW9ucy4KCgkqIHdpbmRvd3MvZHJpdmVyLmMsIHdpbmRvd3Mvd2lucHJvYy5jLCBkbGxzL2NvbWN0bDMyL3Rvb2xiYXIuYywgZGxscy9jb21jdGwzMi90cmVldmlldy5jLCBsb2FkZXIvcGVfaW1hZ2UuYywgbXNkb3MvZHBtaS5jLCBtdWx0aW1lZGlhL2F1ZGlvLmMsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYywgb2JqZWN0cy9kYy5jLCBvbGUvc3RvcmFnZTMyLmMsIGNvbnRyb2xzL21lbnUuYywgZGxscy9jb21jdGwzMi9ob3RrZXkuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgYSBsb3Qgb2Ygd2FybmluZ3MgdXNpbmcgV0lORV9VTlVTRUQsIGNhc3RzLCBjb21tZW50aW5nIG91dCBhbmQKCWFkZGl0aW9uYWwge30uIFJld3JvdGUgR2V0Q3JlYXRpb25Nb2RlRnJvbVNUR00gc28gd2UgZG9uJ3QgZ2V0CgkicG9zc2libGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUiLgoKCSogaW5jbHVkZS9tbXN5c3RlbS5oLCBpbmNsdWRlL211bHRpbWVkaWEuaDoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTUNJX09QRU5fRFJJVkVSX1BBUk1TIC0gQWRkIHdpbjMyIHZlcnNpb24gb2Ygc3RydWN0dXJlLgoKCSogZmlsZXMvZGlyZWN0b3J5LmMsIG1zZG9zL2ludDIxLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNoYW5nZWQgQ3JlYXRlRGlyZWN0b3J5IExhc3RFcnJvciByZXR1cm5zIHRvIG1hdGNoIFdpbjMyIChmb3VuZCBvdXQgYnkKCWV4cGVyaW1lbnQpLiBBZGFwdGVkIGludDIxIENyZWF0ZURpcmVjdG9yeSBjYWxsIHRvIHN0aWxsIHJldHVybiB0aGUKCWNvcnJlY3QgRE9TIGVycm9yIGNvZGVzIGFjY29yZGluZyB0byBSYWxwaCBCcm93bi4KCgkqIGdyYXBoaWNzL2RkcmF3LmMsIHJlbGF5MzIvZGRyYXcuc3BlYzoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSBhZGRlZCBmdW5jdGlvbiBEaXJlY3REcmF3RW51bWVyYXRlRXgKCS0gYWRkZWQgKG9yIGNvcnJlY3RlZCkgY2hlY2sgZm9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGVudW1lcmF0aW9uIGZ1bmN0aW9ucwoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW46IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQmV0dGVyIGRldGVjdGlvbiBvZiBvbGQgKGkuZS4gbm9uIE9wZW5HTCAxLjIgY29tcGxpYW50KSB2ZXJzaW9uIG9mIE1lc2EuCgoJKiBtdWx0aW1lZGlhL21jaWNkYS5jOgoJTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBzdHVkLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRkZWQgbWlzc2luZyA8c3lzL3R5cGVzLmg+LgoKCSogaW5jbHVkZS93aW51c2VyLmg6IEtsYWFzIHZhbiBHZW5kIDxrbGFhc0B2YW5nZW5kLmRlbW9uLm5sPgoJQWRkZWQgdGhlIGJ1dHRvbiBzdGF0ZXMgYXMgcmV0dXJuZWQgYnkgSXNEbGdCdXR0b25DaGVja2VkKCkuCgoJKiBsb2FkZXIvbW9kdWxlLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCBzdXBwb3J0IGZvciBxdW90ZWQgZmlsZSBuYW1lcyBpbiBDcmVhdGVQcm9jZXNzKCkuCgoJKiBmaWxlcy9maWxlLmMsIHNjaGVkdWxlci9jbGllbnQuYywgc2NoZWR1bGVyL2V2ZW50LmMsIHNjaGVkdWxlci9tdXRleC5jLCBzY2hlZHVsZXIvc2VtYXBob3JlLmMsIHNlcnZlci9maWxlLmMsIHdpbjMyL2NvbnNvbGUuYzoKCUNMSUVOVF9XYWl0UmVwbHk6IGRvbid0IGNsZWFyIGxhc3QgZXJyb3Igb24gc3VjY2VzczsgZml4ZWQgY2FsbGVycwoJYWNjb3JkaW5nbHkgKGJhc2VkIG9uIGEgcGF0Y2ggYnkgSnVlcmdlbiBTY2htaWVkKS4KCgkqIG1zZG9zL2ludDEwLmM6IEplc3MgSGFhcyA8ZGVzbW9rZUBob3RtYWlsLmNvbT4KCUFkZGVkIHNvbWUgc3VwcG9ydCBhbmQgc3R1YnMgZm9yIFZFU0EgdG8gbXNkb3MvaW50MTAuYy4KCgkqIG9sZS9iaW5kY3R4LmMsIG9sZS9maWxlbW9uaWtlci5jLCBvbGUvaWZzLmMsIG9sZS9pdGVtbW9uaWtlci5jLCBvbGUvbW9uaWtlci5jLCBvbGUvb2xlMi5jLCBvbGUvb2xlMmRpc3AuYywgb2xlL29sZTJubHMuYywgb2xlL29sZWNsaS5jLCBvbGUvb2xlZGxnLmMsIG9sZS9vbGVmb250LmMsIG9sZS9vbGVvYmouYywgb2xlL29sZXN2ci5jLCBvbGUvc2FmZWFycmF5LmMsIG9sZS9zdGdfYmlnYmxvY2tmaWxlLmMsIG9sZS9zdGdfc3RyZWFtLmMsIG9sZS9zdG9yYWdlLmMsIG9sZS9zdG9yYWdlMzIuYywgb2xlL3R5cGVsaWIuYywgb2xlL3ZhcmlhbnQuYywgdG9vbHMvZm50MmJkZi5jLCB3aW5kb3dzL2Rpc3BsYXkuYywgZGxscy9zaGVsbDMyL2RhdGFvYmplY3QuYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBpbmNsdWRlL29sZW9iai5oLCBpbmNsdWRlL3NobG9iai5oLCBpbmNsdWRlL3dpbmUvb2JqX2NoYW5uZWwuaCwgaW5jbHVkZS93aW5lL29ial9jbGllbnRzZXJ2ZXIuaCwgaW5jbHVkZS93aW5lL29ial9jb250cm9sLmgsIGluY2x1ZGUvd2luZS9vYmpfZGF0YW9iamVjdC5oLCBpbmNsdWRlL3dpbmUvb2JqX2RyYWdkcm9wLmgsIGluY2x1ZGUvd2luZS9vYmpfaW5wbGFjZS5oLCBpbmNsdWRlL3dpbmUvb2JqX21hcnNoYWwuaCwgaW5jbHVkZS93aW5lL29ial9taXNjLmgsIGluY2x1ZGUvd2luZS9vYmpfbW9uaWtlci5oLCBpbmNsdWRlL3dpbmUvb2JqX29sZWF1dC5oLCBpbmNsdWRlL3dpbmUvb2JqX29sZWZvbnQuaCwgaW5jbHVkZS93aW5lL29ial9wcm9wZXJ0eXN0b3JhZ2UuaCwgaW5jbHVkZS93aW5lL29ial9zdG9yYWdlLmgsIGluY2x1ZGUvd2luZS93aW51c2VyMTYuaCwgbGlicmFyeS93aW5lc3R1Yi5jLCBtZW1vcnkvc3RyaW5nLmMsIG1pc2Mvc291bmQuYywgbXVsdGltZWRpYS9tbXN5c3RlbS5jLCBjb250cm9scy9tZW51LmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU1vcmUgaW5jbHVkZSBvcHRpbWlzYXRpb25zIGFuZCBmaXhlcy4KCgkqIHNlcnZlci9wcm9jZXNzLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJb3Blbl9vYmplY3Qgc2hvdWxkIHJldHVybiBFUlJPUl9GSUxFX05PVF9GT1VORCB3aGVuIHRoZSBuYW1lZCBvYmplY3QKCWlzIG5vdCBmb3VuZC4KCgkqIGZpbGVzL2RpcmVjdG9yeS5jOiBBbmRyZWFzIE1vaHIgPGNpcGFtODk1QGNpcDEuaW5kLnVuaS1zdHV0dGdhcnQuZGU+CglCZXR0ZXIgZXJyb3IgbWVzc2FnZS4KCgkqIHNjaGVkdWxlci9BdHRpYy9rMzJvYmouYywgc2NoZWR1bGVyL01ha2VmaWxlLmluLCBzY2hlZHVsZXIvY2xpZW50LmMsIHNjaGVkdWxlci9jcml0c2VjdGlvbi5jLCBzY2hlZHVsZXIvZXZlbnQuYywgc2NoZWR1bGVyL2hhbmRsZS5jLCBzY2hlZHVsZXIvbXV0ZXguYywgc2NoZWR1bGVyL3BpcGUuYywgc2NoZWR1bGVyL3Byb2Nlc3MuYywgc2NoZWR1bGVyL3NlbWFwaG9yZS5jLCBzY2hlZHVsZXIvc3luY2hyby5jLCBzY2hlZHVsZXIvc3lzZGVwcy5jLCBzY2hlZHVsZXIvdGhyZWFkLmMsIHdpbjMyL2NvbnNvbGUuYywgd2luMzIvZGV2aWNlLmMsIGZpbGVzL2NoYW5nZS5jLCBmaWxlcy9kb3NfZnMuYywgZmlsZXMvZmlsZS5jLCBpbmNsdWRlL0F0dGljL2szMm9iai5oLCBpbmNsdWRlL2ZpbGUuaCwgaW5jbHVkZS9wcm9jZXNzLmgsIGluY2x1ZGUvdGhyZWFkLmgsIGxvYWRlci90YXNrLmMsIG1lbW9yeS92aXJ0dWFsLmMsIG1pc2MvdG9vbGhlbHAuYzoKCVVzZSBzZXJ2ZXIgaGFuZGxlcyBkaXJlY3RseSBmb3IgV2luMzIgaGFuZGxlcy4gUmVtb3ZlZCB1c2Ugb2YgSzMyT0JKLgoKCSogd2luZG93cy9kZWZ3bmQuYywgd2luZG93cy9tc2dib3guYywgd2luZG93cy94MTFkcnYvbW9uaXRvci5jLCBvYmplY3RzL2JydXNoLmMsIG9iamVjdHMvY2xpcHBpbmcuYywgb2JqZWN0cy9wZW4uYywgb2JqZWN0cy9yZWdpb24uYywgb2JqZWN0cy90ZXh0LmMsIG9sZS9vbGVmb250LmMsIG9sZS9vbGVvYmouYywgc2NoZWR1bGVyL0F0dGljL2szMm9iai5jLCBzY2hlZHVsZXIvZXZlbnQuYywgc2NoZWR1bGVyL211dGV4LmMsIHNjaGVkdWxlci9zZW1hcGhvcmUuYywgc2VydmVyL2ZpbGUuYywgc2VydmVyL3JlcXVlc3QuYywgZGVidWdnZXIvZGJnLnksIGRlYnVnZ2VyL3JlZ2lzdGVycy5jLCBncmFwaGljcy9kM2RkZXZpY2VzLmMsIGdyYXBoaWNzL2QzZGV4ZWN1dGVidWZmZXIuYywgZ3JhcGhpY3MvZDNkdGV4dHVyZS5jLCBncmFwaGljcy9lc2NhcGUuYywgZ3JhcGhpY3Mvd2luMTZkcnYvZm9udC5jLCBsb2FkZXIvbmUvY29udmVydC5jLCBtaXNjL25ldHdvcmsuYywgbWlzYy9wb3J0LmMsIG1pc2NlbXUvbWFpbi5jLCBtdWx0aW1lZGlhL2F1ZGlvLmMsIG11bHRpbWVkaWEvZHBsYXkuYywgbXVsdGltZWRpYS9pbml0LmMsIG11bHRpbWVkaWEvbWNpd2F2ZS5jLCBtdWx0aW1lZGlhL21peGVyLmMsIG11bHRpbWVkaWEvbW1hdXguYywgY29uc29sZS94dGVybS5jLCBjb250cm9scy9saXN0Ym94LmM6CglEYXZpZCBMdXllciA8bHV5ZXJAdWNzLnV3YS5lZHUuYXU+CgktIGZpeGVkIG1pc3Npbmcgc3RkbGliLmggYW5kIHN0cmluZy5oIGluY2x1ZGVzIGV2ZXJ5d2hlcmUKCS0gcmVtb3ZlZCBhIGNvdXBsZSBvZiB1bm5lZWRlZCBzdGRsaWIuaCBhbmQgc3RkaW8uaCBpbmNsdWRlcwoKCSogaW5jbHVkZS9wcm9jZXNzLmgsIGluY2x1ZGUvdGhyZWFkLmgsIGxvYWRlci90YXNrLmMsIHNjaGVkdWxlci9wcm9jZXNzLmMsIHNjaGVkdWxlci9zeXNkZXBzLmMsIHNjaGVkdWxlci90aHJlYWQuYywgd2luZG93cy9xdWV1ZS5jLCB3aW5kb3dzL3dpbi5jLCB3aW5kb3dzL3dpbnByb2MuYzoKCVByb2Nlc3MgYW5kIHRocmVhZCBpZCBub3cgdXNlIHRoZSBzZXJ2ZXItc2lkZSBpZCBpbnN0ZWFkIG9mIGFuCglvYmZ1c2NhdGVkIHBvaW50ZXIuCgoJKiBsaWJ0ZXN0L2d1aXRlc3QuYywgbGlidGVzdC9ndWl0ZXN0LnJjLCBsaWJ0ZXN0L2d1aXRlc3Qucmg6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVRoZSBXaW5kb3dzIEdVSSBiZWhhdmlvdXIgdGVzdGVyIHVzZWQgb24gdGhlIFdpbmRvd3MgY29tcHV0ZXIuICBJdCB3YXMKCXVzZWQgd2l0aCBCb3JsYW5kIEMrKyA0LjUyLCBidXQgc2hvdWxkIGJlIGVhc3kgdG8gYWRhcHQgdG8gV2luZWxpYiBieQoJd2hvZXZlciBmZWVscyBsaWtlIGl0OyBJIGhhdmVuJ3QsIEkganVzdCByZWxlYXNlZCB0aGlzIHVzZWZ1bCB0ZXN0IGFwcAoJaW4gY2FzZSBpdCB3b3VsZCBiZW5lZml0IG90aGVyIGRldmVsb3BlcnMuCgoJKiBkb2N1bWVudGF0aW9uL2d1aTogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglUaGlzIGZpbGUgZGV0YWlscyB0aGUgcmVzdWx0cyAobWVzc2FnZSB0cmFjZXMpIHRoZSBHVUkgYmVoYXZpb3VyCgl0ZXN0ZXIgYXBwIGdhdmUgdW5kZXIgcmVhbCBXaW5kb3dzIGZvciB2YXJpb3VzIGV2ZW50cy4gSXQgd2FzIHVzZWZ1bAoJZm9yIHNvbWUgb2YgbXkgZGVidWdnaW5nIGF0IGxlYXN0LCBwZXJoYXBzIGl0IGNvdWxkIGJlIG9mIHNvbWUgdXNlIHRvCglvdGhlciBXaW5lIEdVSSBkZWJ1Z2dlcnMgYXMgd2VsbC4KCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL3NpZ19jb250ZXh0LmgsIGluY2x1ZGUvd2lubmxzLmgsIG1pc2Mvd2luc29jay5jLCBtaXNjL3dpbnNvY2tfZG5zLmMsIG11bHRpbWVkaWEvZHNvdW5kLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQHN0dWQuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglTb21lIFNvbGFyaXMgZml4ZXMuIDxyZXNvbHYuaD4gbmVlZHMgPGFycGEvbmFtZXNlci5oPiwgc2lnX2NvbnRleHQuaAoJbmVlZHMgdG8gZGVmaW5lIEhBTkRMRVJfQ09OVEVYVCwgd2N0eXBlLmggZG9lcyBub3QgbGlrZSAnd3NwcmludGYnCglkZWZpbmVkLCBtc2Rvcy9kcG1pLmMgbmVlZHMgInN0YWNrZnJhbWUuaCIgdG9vLCBhbmQgbXVsdGltZWRpYS9kc291bmQuYwoJbmVlZHMgIndpbnVzZXIuaCIuCgoJKiB3aW4zMi9rZXJuZWwzMi5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUdldEJpbmFyeVR5cGVbQVddIG1vdmVkIHRvIGxvYWRlci9tb2R1bGUuYywgbW9kaWZpZWQgdG8gcmVjb2duaXplIC5DT00KCWFuZCAuUElGIGZpbGVzLgoKCSogbG9hZGVyL2Rvcy9tb2R1bGUuYywgbWlzY2VtdS9tYWluLmMsIG1zZG9zL2RwbWkuYywgaW5jbHVkZS9kb3NleGUuaCwgaW5jbHVkZS9wZV9pbWFnZS5oLCBsb2FkZXIvbWFpbi5jLCBsb2FkZXIvcGVfaW1hZ2UuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRhcHRlZCB0byBDcmVhdGVQcm9jZXNzIGNoYW5nZXMuCgoJKiBsb2FkZXIvbmUvbW9kdWxlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU5FIG1vZHVsZXMgYWRhcHRlZCB0byBDcmVhdGVQcm9jZXNzIGNoYW5nZXMuCglMb2FkTW9kdWxlMTYvTG9hZExpYnJhcnkxNiByZW9yZ2FuaXphdGlvbi4KCgkqIGluY2x1ZGUvbW9kdWxlLmgsIGluY2x1ZGUvdGFzay5oLCBsb2FkZXIvbW9kdWxlLmMsIGxvYWRlci90YXNrLmMsIHNjaGVkdWxlci9wcm9jZXNzLmMsIHNjaGVkdWxlci90aHJlYWQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJUHJvY2VzcyBjcmVhdGlvbiBzZXF1ZW5jZSByZW9yZ2FuaXplZDoKCS0gUmVtb3ZlZCBpbnN0YW5jZSBkYXRhIHNlZ21lbnQgZm9yIGFsbCBidXQgTkUgbW9kdWxlcy4KCS0gQ2hlY2sgYmluYXJ5IHR5cGUgaW4gQ3JlYXRlUHJvY2VzcyBiZWZvcmUgbG9hZGluZyBtb2R1bGUuCgktIFVuaXggcHJvY2VzcyBjcmVhdGlvbiBtb3ZlZCBmcm9tIFdpbkV4ZWMgdG8gQ3JlYXRlUHJvY2Vzcy4KCS0gQnVnZml4OiBmaWxsIGluIHRoZGItPnRlYi5odGFzazE2IG1lbWJlciBjb3JyZWN0bHkuCgoJKiB3aW5kb3dzL2lucHV0LmM6IEd1eSBBbGJlcnRlbGxpIDxnYWxiZXJ0ZUBuZW8ubHJ1bi5jb20+CgktIENvZGUgdG8gcmV0dXJuIGRlZmF1bHQgbGFuZ3VhZ2UgY29kZSBhcyBrZXlib2FyZCBsYXlvdXQuCgktIEltcGxlbWVudGVkIG90aGVyIHN0dWJzIGFzc29jaWF0ZWQgd2l0aCBrZXlib2FyZCBsYXlvdXQ6CgkgIEdldEtleWJvYXJkTGF5b3V0TmFtZUEsIEFjdGl2YXRlS2V5Ym9hcmRMYXlvdXQsCgkgIExvYWRLZXlib2FyZExheW91dFtBV10sIEdldEtleWJvYXJkTGF5b3V0TGlzdC4KCgkqIGluY2x1ZGUvY29tbWRsZy5oLCBpbmNsdWRlL3Jlc291cmNlLmgsIG1pc2MvQXR0aWMvY29tbWRsZy5jLCByZXNvdXJjZXMvc3lzcmVzX0VuLnJjOgoJS2xhYXMgdmFuIEdlbmQgPGtsYWFzQHZhbmdlbmQuZGVtb24ubmw+CglQcmVsaW1pbmFyeSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUHJpbnREbGdBIHN0dWIuCgoJKiBvbGUvbmxzL25sZC5ubHM6IEtsYWFzIHZhbiBHZW5kIDxrbGFhc0B2YW5nZW5kLmRlbW9uLm5sPgoJTm93IGNvbXBsaWFudCB0byB0aGUgRHV0Y2ggc3RhbmRhcmRzLgoKCSogd2luZG93cy93aW4uYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGSU5EX1duZFB0ciBzaG91bGQgbm90IHNldCBFUlJPUl9JTlZBTElEX1dJTkRPV19IQU5ETEUgd2hlbiBoV25kPTAuCgoJKiBtc2Rvcy9kb3NtZW0uYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglGaXhlZCBhIGNvdXBsZSBvZiBkb3NtZW0gYmxvY2sgcmVzaXplIGJ1Z3MuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCS0gbm8gbW9yZSAzRCBjYXBhYmlsaXRpZXMgaWYgRGlyZWN0M0Qgc3VwcG9ydCBpcyBub3QgY29tcGlsZWQgaW4KCS0gc29tZSBkZWJ1ZyBtZXNzYWdlcyBjbGVhbi11cCAocmVwbGFjZWQgZnByaW50ZnMgYnkgRFVNUHMpCgoJKiBtaXNjL21haW4uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglXZSBnb3QgcGFzc2VkIGEgTlVMTCBEaWFsZWN0IHB0ciBhbmQgYWNjZXNzZWQgaXQgdW5wcm90ZWN0ZWQuCgoJKiBzZXJ2ZXIvZmlsZS5jLCBzZXJ2ZXIvbWFwcGluZy5jLCBpbmNsdWRlL3NlcnZlci9vYmplY3QuaCwgbWVtb3J5L3ZpcnR1YWwuYzoKCUFkZGVkIHN1cHBvcnQgZm9yIG1hcHBpbmdzIHdpdGggbm8gYXNzb2NpYXRlZCBmaWxlLgoKCSogaW5jbHVkZS9zZXJ2ZXIuaCwgaW5jbHVkZS9zZXJ2ZXIvcHJvY2Vzcy5oLCBzY2hlZHVsZXIvY2xpZW50LmMsIHNlcnZlci9wcm9jZXNzLmMsIHNlcnZlci9yZXF1ZXN0LmMsIHNlcnZlci90cmFjZS5jOgoJUmVtb3ZlZCBkc3RfaGFuZGxlIGluIGR1cGxpY2F0ZV9oYW5kbGUgcmVxdWVzdC4KCUFkZGVkIGluaGVyaXQgZmxhZyBpbiBjcmVhdGVfbWFwcGluZyByZXF1ZXN0LgoKCSogaW5jbHVkZS9vYWlkbC5oLCBpbmNsdWRlL3dpbmUvb2JqX29sZWF1dC5oLCBvbGUvc2FmZWFycmF5LmMsIG9sZS92YXJpYW50LmM6CglGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglJbXBsZW1lbnRlZCBzdXBwb3J0IGZvciBhcnJheXMgYW5kIHNhZmUgYXJyYXlzIGluIFZBUklBTlQgZGF0YQoJc3RydWN0dXJlcy4gQWxzbyBtb3ZlZCB0aGUgU0FGRUFSUkFZIGRlZmluaXRpb24gKHlldCBhZ2FpbikgdG8gdGhlCglvYmpfb2xlYXV0LmggZmlsZS4KCgkqIHdpbmUuaW5pOiBBbmRyZWFzIE1vaHIgPGNpcGFtODk1QGNpcDEuaW5kLnVuaS1zdHV0dGdhcnQuZGU+CglGaXhlZCBGaWxlc3lzdGVtIGRvY3VtZW50YXRpb24uCgoJKiBpbmNsdWRlL2JpdG1hcHMvQXR0aWMvb2JtX2ZvbGRlciwgaW5jbHVkZS9iaXRtYXBzL0F0dGljL29ibV9mb2xkZXIyOgoJUGF2ZWwgUm9za2luIDxwYXZlbF9yb3NraW5AZ2VvY2l0aWVzLmNvbT4KCU1hZGUgZm9sZGVyIGljb25zIGdyYXkteWVsbG93IGluc3RlYWQgb2YgYmx1ZS4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jOiBGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglPcmRlciBvZiBzZW5kIG1lc3NhZ2UgcHJvY2Vzc2luZyB3YXMgbm90IHJlc3BlY3RlZCBhbmQgdGhlIG1lc3NhZ2UKCXN0YWNrZWQgbGFzdCBmaW5pc2hlZCBhZnRlciB0aGUgbWVzc2FnZSBzdGFja2VkIGZpcnN0LgoKCSogd2luZG93cy93aW5wb3MuYzogRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJQWRkZWQgY2hlY2tzIHRvIGd1YXJkIGFnYWluc3QgTlVMTCBhY3RpdmUgd2luZG93LgoKCSogd2luZG93cy9kaWFsb2cuYzogTm9ybWFuIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJRG9uJ3QgY2hlY2sgY2hpbGRyZW4gb2YgZGlzYWJsZWQgb3IgaW52aXNpYmxlIGNvbnRyb2xzIGZvciBkaWFsb2cKCWtleWJvYXJkIGFjY2VsZXJhdG9ycy4gRml4ZXMgcHJvYmxlbXMgd2l0aCBkaWFsb2dzIHdpdGggdGFiIGJveGVzLgoKCSogb2xlL2NvbXBvYmouYywgcmVsYXkzMi9vbGUzMi5zcGVjOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgdGhlIENvVGFza01lbVJlYWxsb2MgQVBJLiBBbHNvIGNsZWFuLXVwIGFyb3VuZCB0aGF0IEFQSQoJY2FsbC4KCgkqIG9sZS9zdG9yYWdlMzIuYzogVGh1eSBOZ3V5ZW4gPHRodXlAbWFjYWRhbWlhbi5jb20+CglBZGRlZCBhIG1pc3NpbmcgUmVsZWFzZS4KCVNUR01fQ1JFQVRFIHNob3VsZCB0cmFuc2xhdGUgdG8gQ1JFQVRFX0FMV0FZUy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRnJpIEZlYiAyNiAxMjozMzoyMSAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogREVWRUxPUEVSUy1ISU5UUzogVXBkYXRlZCBmb3IgbmV3IG5hbWluZyBjb252ZW50aW9ucy4KCgkqICovKjogTGFyZ2Utc2NhbGUgcmVuYW1pbmcgb2YgYWxsIFdpbjMyIGZ1bmN0aW9ucyBhbmQgdHlwZXMgdG8KIAl1c2UgdGhlIHN0YW5kYXJkIFdpbmRvd3MgbmFtZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBGZWIgMjUgMTg6MTE6NDAgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG1pc2MvbWFpbi5jOiBBbGJlcnQgZGVuIEhhYW4gPGFsYmVydGRAY29yZWwuY2E+CglGb3IgdmFyaW91cyByZWFzb25zIHNvbWUgb2Ygb3VyIGxpYndpbmUgZXhlY3V0YWJsZXMgbXVzdCBoYXZlIGEgIi4iIGluCgl0aGVpciBmaWxlIG5hbWVzLiBUaGUgIi4iIGNhdXNlcyB0cm91YmxlIHdoZW4gdGhlIGZpbGUgbmFtZSBpcyB1c2VkIGFzCgl0aGUgY2xhc3MgbmFtZSBmb3IgYW4gWCByZXNvdXJjZSBhcyB3aW5lIGRvZXMgZm9yIGNvbW1hbmQgbGluZSBwYXJzaW5nCgl1bmRlciBYLgoKCSogd2luZG93cy93aW4uYzoKCU1ha2UgR2V0V2luZG93TG9uZyhHV0xfSFdORFBBUkVOVCkgcmV0dXJuIHRoZSBzYW1lIHRoaW5nIGFzCglHZXRQYXJlbnQzMjsgc3VnZ2VzdGVkIGJ5IERhdmUgUGlja2xlcyA8ZGF2ZXBAbnVnYXRlLmRlbW9uLmNvLnVrPi4KCgkqIGluY2x1ZGUvZ2RpLmgsIGluY2x1ZGUvaGVhcC5oLCBpbmNsdWRlL3dpbnR5cGVzLmg6CglEYXZpZCBMdXllciA8bHV5ZXJAdWNzLnV3YS5lZHUuYXU+CglBZGRlZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkgb24gc3RhdGljIGlubGluZSBmdW5jdGlvbnMgZGVjbGFyZWQgaW4KCWhlYWRlciBmaWxlcy4KCgkqIGRvY3VtZW50YXRpb24vYnVncmVwb3J0czogQWRhbSB0aGUgSmF6eiBHdXkgPG1hZ2ljYm94QGJlc3R3ZWIubmV0PgoJQWRkZWQgIlRoZSBFYXN5IFdheSIgYW5kICJUaGUgSGFyZCBXYXkiLCBsYXJnZWx5IGZhdm9yaW5nIHRoZSBlYXN5IHdheSwKCXdoaWNoIHVzZXMgbXkgYnVnX3JlcG9ydC5wbCBzY3JpcHQuCglBZGRlZCBpbmZvIG9uIGEgY29tbWFuZCB0aGF0IGNhbiBiZSBydW4gb24gYWxsIHNoZWxscyB0byBwcmludCBkZWJ1ZwoJbXNncyB0byBhIGZpbGUgYW5kIG5vdCB0byB4dGVybS4KCgkqIG1zZG9zL2RwbWkuYzoKCU1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25Ac3R1ZC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU5lZWRzIHRocmVhZC5oIGZvciBub24tTGludXguCgoJKiBpbmNsdWRlL3dpbi5oLCB3aW5kb3dzL3dpbi5jOgoJRnJhbmNvaXMgQm9pc3ZlcnQgPGZyYW5jb2lzQG1hY2FkYW1pYW4uY29tPgoJQWRkaW5nIG9mIG5ldyBmdW5jdGlvbnMgdG8gbWFrZSB0aGUgd25kIHN0cnVjdCB0aHJlYWQgc2FmZS4gQWRkaW5nIG9mCglpcmVmQ291bnQgaW4gd25kIHN0cnVjdC4KCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBjb25zb2xlL25jdXJzZXMuYywgaW5jbHVkZS9hY2NvbmZpZy5oLCBpbmNsdWRlL2NvbmZpZy5oLmluOgoJTWljaGFlbCBWZWtzbGVyIDxtdmVrc2xlckB0ZWNodW5peC50ZWNobmlvbi5hYy5pbD4KCUFkZGVkIGNvbmZpZ3VyZSBjaGVjayBmb3IgZ2V0YmtnZCBhbmQgZGVmaW5lIEhBVkVfR0VUQktHRC4KCgkqIGluY2x1ZGUvb2NpZGwuaCwgaW5jbHVkZS9vbGUyLmgsIGluY2x1ZGUvb2xlaWRsLmgsIGluY2x1ZGUvd2luZS9vYmpfY2FjaGUuaCwgaW5jbHVkZS93aW5lL29ial9jb25uZWN0aW9uLmgsIGluY2x1ZGUvd2luZS9vYmpfY29udHJvbC5oLCBpbmNsdWRlL3dpbmUvb2JqX2lucGxhY2UuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBvbGUvb2xlZm9udC5jOgoJUGF1bCBRdWlubiA8cGF1bHFAY29yZWwuY2E+CglNYW55IGludGVyZmFjZSBkZWNsYXJhdGlvbnMgdGhhdCBvcmlnaW5hdGVkIGZyb20gb2xlaWRsLmgsIG9haWRsLmggYW5kCglvY2lkbC5oIHNlcGFyYXRlZCBpbnRvIHNvbWV3aGF0IHJlbGV2YW50IG9ial8qIGZpbGVzLgoKCSogZmlsZXMvZHJpdmUuYywgb2xlL2NvbXBvYmouYywgcmVzb3VyY2VzL3N5c3Jlcy5jOgoJTWljaGFlbCBWZWtzbGVyIDxtdmVrc2xlckB0ZWNodW5peC50ZWNobmlvbi5hYy5pbD4KCUZpeGVkIHdhcm5pbmcgYW5kIGNvbXBpbGF0aW9uIGVycm9ycy4KCgkqIGluY2x1ZGUvd2luZG93cy5oOiBNaWNoYWVsIFZla3NsZXIgPG12ZWtzbGVyQHRlY2h1bml4LnRlY2huaW9uLmFjLmlsPgoJUmVtb3ZlZCBpbmNsdWRlcyBvZiB3aW5lLyogaGVhZGVycy4KCgkqIGxvYWRlci9yZXNvdXJjZS5jOiBQYXZlbCBSb3NraW4gPHBhdmVsX3Jvc2tpbkBnZW9jaXRpZXMuY29tPgoJTWFkZSBtZXNzYWdlICJSZXNvdXJjZSBub3QgZm91bmQiIFdBUk4uCgoJKiBkbGxzL3NoZWxsMzIvY29udG1lbnUuYywgaW5jbHVkZS9zaGxvYmouaDoKCUFkcmlhbiBUaHVyc3RvbiA8YWRyaWFudEBDT1JFTC5DQT4KCS0gVXNlIHRoZSBuZXcgQ09NIGRlZmluaXRpb24gbWFjcm9zIGluIHRoZSBoZWFkZXIuCgktIFB1dCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIG9iamVjdCBpbiB0aGUgY29udG1lbnUuYy4KCS0gTWFrZSBhcHByb3ByaWF0ZSBuYW1lIGNoYW5nZXMgaW4gY29udG1lbnUuYy4KCgkqIG1pc2MvcmVnaXN0cnkuYywgaW5jbHVkZS93aW5yZWcuaDogUGF1bCBRdWlubiA8cGF1bHFAY29yZWwuY2E+CglaeWdvIEJsYXhlbGwgPHp5Z29iQGNvcmVsLmNhPgoJTW9kaWZpZXMgcGFyYW1ldGVyIGxpc3Qgb2YgYSBjb3VwbGUgb2YgZnVuY3Rpb25zIHRvIGNvbXBseSB3aXRoIFNESy4KCgkqIHdpbmRvd3Mvc2Nyb2xsLmM6IFBhc2NhbCBMZXNzYXJkIDxwYXNjYWxAbWFjYWRhbWlhbi5jb20+CglTY3JvbGxEQzMyIG1vZGlmaWVkIHRvIHJldHVybiByZWN0IGluIGxvZ2ljYWwgY29vcmRpbmF0ZS4KCgkqIGluY2x1ZGUvd2luZS9vYmpfb2xlYXV0Lmg6IEFkcmlhbiBUaHVyc3RvbiA8YWRyaWFudEBDT1JFTC5DQT4KCUFkZHMgQysrIG5hbWVsZXNzIHVuaW9uIHN1cHBvcnQgdG8gdGFnVkFSSUFOVC4KCgkqIGluY2x1ZGUvbW1zeXN0ZW0uaCwgaW5jbHVkZS9vYWlkbC5oLCBpbmNsdWRlL29sZWF1dG8uaDoKCUFkcmlhbiBUaHVyc3RvbiA8YWRyaWFudEBDT1JFTC5DQT4KCU1vdmVkIHNvbWUgZGVmaW5pdGlvbnMgb3V0IG9mIG9sZWF1dG8uaCBhbmQgaW50byBvYWlkbC5oIHRvIGNvbmZvcm0gdG8gdGhlIFNESy4KCVJlbW92ZWQgYSByZWR1bmRhbnQgaW5jbHVkZS4KCUFkZGVkIHNvbWUgYysrIHByb3RlY3Rpb24uCgpXZWQgRmViIDI0IDE1OjU4OjUxIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBkbGxzL3NoZWxsMzIvZW51bWlkbGlzdC5jLCBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvcGlkbC5oLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGluY2x1ZGUvc2hsb2JqLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUNoYW5nZWQgcGlkbCBzdHJ1Y3R1cmUgdG8gbWF0Y2ggdGhlIHBpZGwncyB1c2VkIGluIGxuay1maWxlcy4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbGxpbmsuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSW1wbGVtZW50ZWQgcmVhZGluZyBvZiAqLmxuay1maWxlcy4KCgkqIGluY2x1ZGUvd2luZS9vYmpfc2hlbGxsaW5rLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCW5ldyBmaWxlLCBpbmNsdWRpbmcgdGhlIElTaGVsbExpbmsgZGVmaW5pdGlvbi4KCgkqIGluY2x1ZGUvbW9kdWxlLmgsIGluY2x1ZGUvcGVfaW1hZ2UuaCwgbG9hZGVyL2VsZi5jLCBsb2FkZXIvbWFpbi5jLCBsb2FkZXIvbW9kdWxlLmMsIGxvYWRlci9wZV9pbWFnZS5jLCBsb2FkZXIvcGVfcmVzb3VyY2UuYywgbG9hZGVyL3Jlc291cmNlLmMsIGxvYWRlci90YXNrLmMsIHNjaGVkdWxlci90aHJlYWQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJTW9kaWZpZWQgcHJvY2VzcyBjcmVhdGlvbiBzZXF1ZW5jZTogY2FsbCBQRV9DcmVhdGVNb2R1bGUgaW4gdGhlCgljb250ZXh0IG9mIHRoZSBuZXcgcHJvY2VzcyAoaW4gVEFTS19DYWxsVG9TdGFydCkuCglDaGFuZ2VkIGFsbCBQRS9Nb2R1bGUgcm91dGluZXMgc28gYXMgdG8gYWx3YXlzIG9wZXJhdGUgb24gdGhlIGN1cnJlbnQKCXByb2Nlc3M7IGFkYXB0ZWQgYWxsIGNhbGxlcnMuCgoJKiBtc2Rvcy9kb3Njb25mLmMsIG1zZG9zL2Rvc21lbS5jLCBtc2Rvcy9kcG1pLmMsIG1zZG9zL2ludDE2LmMsIG1zZG9zL2ludDIxLmMsIG1zZG9zL2ludDJhLmMsIG1zZG9zL2ludGVycnVwdHMuYywgbXNkb3MvaW9wb3J0cy5jLCBtc2Rvcy92eGQuYywgbXNkb3MveG1zLmMsIG9sZS9zdG9yYWdlLmMsIG9sZS90eXBlbGliLmMsIHByb2dyYW1zL2F2aXRvb2xzL2ljaW5mby5jLCByZWxheTMyL3JlbGF5Mzg2LmMsIHRvb2xzL2J1aWxkLmMsIHdpbmRvd3MvY2xpcGJvYXJkLmMsIHdpbmRvd3MvaW5wdXQuYywgZGxscy9zaGVsbDMyL2NvbnRtZW51LmMsIGRsbHMvc2hlbGwzMi9lbnVtaWRsaXN0LmMsIGRsbHMvc2hlbGwzMi9mb2xkZXJzLmMsIGRsbHMvc2hlbGwzMi9zaGVsbGxpbmsuYywgZGxscy9zaGVsbDMyL3NoZWxsb2xlLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGdyYXBoaWNzL2QzZGRldmljZXMuYywgZ3JhcGhpY3MvZDNkZXhlY3V0ZWJ1ZmZlci5jLCBncmFwaGljcy9kM2RsaWdodC5jLCBncmFwaGljcy9kM2RtYXRlcmlhbC5jLCBncmFwaGljcy9kM2R0ZXh0dXJlLmMsIGdyYXBoaWNzL2QzZHZpZXdwb3J0LmMsIGdyYXBoaWNzL2RkcmF3LmMsIGxvYWRlci9tYWluLmMsIG1lbW9yeS9hdG9tLmMsIG1pc2MvbHN0ci5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglPcHRpbWl6ZWQgYXdheSBtb3JlIGluY2x1ZGVzLCByZWFkZGVkIHNvbWUgI2luY2x1ZGVzIGZvciBuZWNlc3NhcnkKCXByb3RvdHlwZXMuCgoJKiBtc2Rvcy9pbnQyZi5jOiA8c21pbEBtZWNoYXRyb25pa2EuaHU+CglBZGRlZCBsb3ctbGV2ZWwgTmV0d2FyZSBpbnN0YWxsYXRpb24gY2hlY2suCgoJKiBpbmNsdWRlL2NvbnNvbGUuaCwgY29uc29sZS9pbnRlcmZhY2UuYywgY29uc29sZS9uY3Vyc2VzLmM6CglKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUFkZGVkIEdldEJhY2tncm91bmRDb2xvciBjYWxsIHRvIHRoZSBjb25zb2xlIHN0cnVjdC4gV2lsbCBiZSB1c2VkCglsYXRlci4KCgkqIG1zZG9zL2ludDEwLmM6IEpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJQnVnZml4ZXMgZm9yIElOVCAxMC8wQiAoU2V0QmFja2dyb3VuZENvbG9yKSB0byB3b3JrIHByb3Blcmx5LgoJKEludGVycnVwdCBsaXN0IGRpZCBub3QgaGF2ZSBjb3JyZWN0LikKCgkqIHdpbmRvd3MvZGlucHV0LmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQWRkZWQgc3R1YnMgZm9yIHR3byBtaXNzaW5nIG1ldGhvZHMgb2YgRElucHV0LgoKCSogb2xlL3N0Z19iaWdibG9ja2ZpbGUuYzogVGh1eSBOZ3V5ZW4gPHRodXlAbWFjYWRhbWlhbi5jb20+CglGaXhlZCBhIGJ1Zy4KCgkqIG9sZS9zdG9yYWdlMzIuYywgb2xlL3N0b3JhZ2UzMi5oOiBUaHV5IE5ndXllbiA8dGh1eUBtYWNhZGFtaWFuLmNvbT4KCUFkZGVkIHN1cHBvcnQgZm9yIGxhcmdlciBmaWxlcy4KCgkqIG9iamVjdHMvZGliLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJRml4ZXMgYnVmZmVyIG92ZXJydW4gcHJvYmxlbXMgd2l0aCBHZXRESUJpdHMuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYzogU3RlcGhhbmUgTHVzc2llciA8c3RlcGhhbmVAbWFjYWRhbWlhbi5jb20+CglGaXhlZCBzb21lIFNlbmRNZXNzYWdlIGJ1Z3MuCgoJKiBvbGUvY29tcG9iai5jOiBTeWx2YWluIFN0Lkdlcm1haW4gPHN5bHZhaW5AbWFjYWRhbWlhbi5jb20+CglGaXggQ09NX0V4dGVybmFsTG9ja0ZyZWVMaXN0IHRvIGRvIG5vdCBmYWlsIHdpdGggYW4gZW1wdHkgbGlzdC4KCk1vbiBGZWIgMjIgMTA6MjE6NTYgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG1pc2MvTWFrZWZpbGUuaW4sIG1pc2Mvc3RyaW5nLmM6CglaeWdvIEJsYXhlbGwgPHpibGF4ZWxsQGZ1cnJ5dGVycm9yLm9yZz4KCUltcGxlbWVudGVkIHNvbWUgQ1JURExMIHN0cmluZyBmdW5jdGlvbnMuCgoJKiBvYmplY3RzL2VuaG1ldGFmaWxlLmMsIG9iamVjdHMvbGluZWRkYS5jLCBvYmplY3RzL21ldGFmaWxlLmMsIG9iamVjdHMvdGV4dC5jLCB3aW5kb3dzL2NhcmV0LmMsIHdpbmRvd3MvY2xpcGJvYXJkLmMsIHdpbmRvd3MvZGlhbG9nLmMsIHdpbmRvd3MvZHJpdmVyLmMsIHdpbmRvd3MvaG9vay5jLCB3aW5kb3dzL2lucHV0LmMsIHdpbmRvd3Mva2V5Ym9hcmQuYywgd2luZG93cy9tZGkuYywgd2luZG93cy9tb3VzZS5jLCB3aW5kb3dzL211bHRpbW9uLmMsIHdpbmRvd3MvcmVjdC5jLCB3aW5kb3dzL3Njcm9sbC5jLCB3aW5kb3dzL3RpbWVyLmMsIHdpbmRvd3MvdXNlci5jLCB3aW5kb3dzL3dpbnByb2MuYywgaW5jbHVkZS9tZW51LmgsIGluY2x1ZGUvbW1zeXN0ZW0uaCwgaW5jbHVkZS9zeXNtZXRyaWNzLmgsIGluY2x1ZGUvdmZ3LmgsIG11bHRpbWVkaWEvYXVkaW8uYywgbXVsdGltZWRpYS9kcGxheS5jLCBtdWx0aW1lZGlhL2Rzb3VuZC5jLCBtdWx0aW1lZGlhL2luaXQuYywgbXVsdGltZWRpYS9qb3lzdGljay5jLCBtdWx0aW1lZGlhL21jaWFuaW0uYywgbXVsdGltZWRpYS9tY2ljZGEuYywgbXVsdGltZWRpYS9tY2ltaWRpLmMsIG11bHRpbWVkaWEvbWNpc3RyaW5nLmMsIG11bHRpbWVkaWEvbWNpd2F2ZS5jLCBtdWx0aW1lZGlhL21pZGkuYywgbXVsdGltZWRpYS9taXhlci5jLCBtdWx0aW1lZGlhL21tYXV4LmMsIG11bHRpbWVkaWEvbW1pby5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIG11bHRpbWVkaWEvdGltZS5jLCBvYmplY3RzL2N1cnNvcmljb24uYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU29tZSBtb3JlIHJlY3Vyc2l2ZSBpbmNsdWRlIGZpeGVzL29wdGltaXphdGlvbnMuCgoJKiBkbGxzL3NoZWxsMzIvY29udG1lbnUuYywgZGxscy9zaGVsbDMyL2VudW1pZGxpc3QuYywgZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jLCBkbGxzL3NoZWxsMzIvcGlkbC5oLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCS0gZWxpbWluYXRlZCBvbmUgZWxlbWVudCBvZiB0aGUgcGlkbCBzdHJ1Y3QgKGR3U0ZHQU8pCgktIGNoYW5nZWQgc29tZSBzdXBlcmZsb3VzIEZJWE1FCgoJKiBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGluY2x1ZGUvd2luZS9vYmpfZHJhZ2Ryb3AuaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJLSBoZWFkZXIgdXNlcyB0aGUgbGFzdCBtYWNyb3Mgbm93CgktIHJld3JvdGUgSURyb3BUYXJnZXQgYWNjb3JkaW5nIHRvIHRoZSBuZXcgQ09NIGhlYWRlcnMKCSAgKHdhcyBsb2NhbCBkZWNsYXJlZCBub3QgdXNpbmcgdGhlIGFscmVhZHkgd3JpdHRlbiBwcm90b3R5cGVzKQoJLSBjb3JyZWN0ZWQgRHJvcCBtZXRob2QgKHdyb25nIHBhcmFtZXRlciBjb3VudCkKCgkqIHdpbmRvd3MvZGlucHV0LmM6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJVXBkYXRlZCB0byB1c2UgdGhlIGxhdGVzdCBDT00gbWFjcm9zLCBJQ09NX1ZUQUJMRSBhbmQgSUNPTV9USElTLgoJQWRkZWQgdGhlIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbiBzdHJ1Y3R1cmVzLgoJSSByZW1lbWJlcmVkIGZyb20gYW4gZW1haWwgdGhhdCBldmVuIHdoZW4gYXNrZWQgZm9yIGEKCUlEaXJlY3RJbnB1dERldmljZUEgd2hhdCB3YXMgcmV0dXJuZWQgd2FzIGFuIElEaXJlY3RJbnB1dERldmljZTJBIHNvIEkKCWNvbnNpZGVyZWQgdGhhdCB3ZSB3b3VsZCBvbmx5IGltcGxlbWVudCB0aGUgbGF0dGVyLiBUaGUKCUlEaXJlY3RJbnB1dERldmljZUFfeHh4IG1ldGhvZHMgaGF2ZSBiZWVuIHJlbmFtZWQgdG8KCUlEaXJlY3RJbnB1dERldmljZTJBX3h4eCwgYW5kIHdlIGFsd2F5cyByZXR1cm4gb3VyIElEaXJlY3RJbnB1dERldmljZTJBCglpbXBsZW1lbnRhdGlvbiBhcyBiZWZvcmUuCglSZW5hbWVkIHRoZSBpbXBsZW1lbnRhdGlvbiBzdHJ1Y3R1cmVzIHRvIFh4eEltcGwuCgoJKiBpbmNsdWRlL2RpbnB1dC5oOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCVVzZSBsYXRlc3QgQ09NIG1hY3JvcwoJRGVmaW5lZCB0aGUgSURpcmVjdElucHV0RGV2aWNlQSBpbnRlcmZhY2UgaW5kZXBlbmRlbnRseSBmcm9tCglJRGlyZWN0SW5wdXREZXZpY2UyQS4KCVJlbW92ZWQgdGhlIDMyIHN1ZmZpeCBvZiB0aGUgaW50ZXJmYWNlcy4gSG9wZWZ1bGx5IHRoaXMgd2lsbCBub3QKCWNhdXNlIGFueSBwcm9ibGVtIHdpdGggdGhlIHJlbmFtaW5nLgoJTW92ZWQgdGhlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHN0dWZmIHRvIGRpbnB1dC5jICh3ZWxsLCB0aGUKCWludGVyZmFjZXMgYXQgbGVhc3QpLgoKU3VuIEZlYiAyMSAxODozNToyOCAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogc2NoZWR1bGVyL3Byb2Nlc3MuYywgc2NoZWR1bGVyL3N5c2RlcHMuYywgaW5jbHVkZS9wcm9jZXNzLmgsIGluY2x1ZGUvdGhyZWFkLmg6CglDaGFuZ2VkIGluaXRpYWwgcHJvY2VzcyBjcmVhdGlvbiB0byBhdm9pZCBtZW1vcnkgYWxsb2NhdGlvbnMuCglSZW1vdmVkIGEgZmV3IHVudXNlZCBmaWVsZHMgaW4gUERCIGFuZCBUSERCLgoKCSogc2NoZWR1bGVyL2NsaWVudC5jLCBzY2hlZHVsZXIvdGhyZWFkLmM6CglSZW1vdmVkIHRocmVhZCBxdWV1ZSBmdW5jdGlvbnMuCglDaGFuZ2VkIGluaXRpYWwgdGhyZWFkIGNyZWF0aW9uIHRvIGF2b2lkIG1lbW9yeSBhbGxvY2F0aW9ucy4KCU1vdmVkIHNlcnZlciBzdGFydHVwIHRvIFRIUkVBRF9DcmVhdGVJbml0aWFsVGhyZWFkLgoKCSogc2NoZWR1bGVyL3N5bmNocm8uYzoKCVJlbW92ZWQgdXNlIG9mIHBlci10aHJlYWQgd2FpdF9zdHJ1Y3QsIGNsZWFuZWQgdXAgYSBiaXQuCgoJKiBzY2hlZHVsZXIvazMyb2JqLmMsIG1lbW9yeS92aXJ0dWFsLmM6IFJlbW92ZWQgTUVNX01BUFBFRF9GSUxFX09wcy4KCgkqIGluY2x1ZGUvd2lubnQuaDogQWRkZWQgYSBmZXcgZXhjZXB0aW9uIGNvZGVzLgoKCSogd2luZG93cy93aW4uYywgaW5jbHVkZS9tbXN5c3RlbS5oLCBpbmNsdWRlL3BhdGguaCwgaW5jbHVkZS9wcm9ncmVzcy5oLCBpbmNsdWRlL3F1ZXVlLmgsIGluY2x1ZGUvcmVzb3VyY2UuaCwgaW5jbHVkZS9zdHJ1Y3QzMi5oLCBpbmNsdWRlL3VwZG93bi5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW5wb3MuaCwgbG9hZGVyL21haW4uYywgbWlzYy9jb21tZGxnLmMsIG1pc2Mvd2luc29ja19kbnMuYywgbXVsdGltZWRpYS9tbXN5c3RlbS5jLCBpbmNsdWRlL2N1cnNvcmljb24uaCwgaW5jbHVkZS9kZGVfYXRvbS5oLCBpbmNsdWRlL2RkcmF3LmgsIGluY2x1ZGUvZGlzcGRpYi5oLCBpbmNsdWRlL2Rvc2V4ZS5oLCBpbmNsdWRlL2Rzb3VuZC5oLCBjb250cm9scy9tZW51LmM6CglNaWNoYWVsIFZla3NsZXIgPG12ZWtzbGVyQHRlY2h1bml4LnRlY2huaW9uLmFjLmlsPgoJLSBGaXggaGVhZGVycyB0byBpbmNsdWRlIGxlc3Mgb3Igc21hbGxlciBoZWFkZXIgZmlsZXMuCgktIEZpeCBoZWFkZXIgYW5kIHNvdXJjZSBmaWxlcyB0byBpbmNsdWRlIG1pc3NpbmcgaGVhZGVyIGZpbGVzIHRvIGF2b2lkCgkgIHdhcm5pbmdzIGFuZCBlcnJvcnMuCgoJKiBsb2FkZXIvc2lnbmFsLmMsIG1lbW9yeS9sZHQuYywgbWlzYy9wb3J0LmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNoYW5nZSAiZyIgKGdlbmVyYWwgcmVncykgaW50byAiciIgKGhhcmRyZWdzKSBpbiBjbG9uZSAvIG1vZGlmeV9sZHQgLwoJd2luZV9zaWdhY3Rpb24gX19QSUNfXyBjYXNlcywgc2luY2UgImciIHdpbGwgbm90IHdvcmsgd2l0aAoJLWZvbWl0LWZyYW1lLXBvaW50ZXIgKCJnIiBpcyByZWZlcmVuY2VkIHVzaW5nICVlc3Agd2hpY2ggd2FzCglpbnZhbGlkYXRlZCBiZWZvcmUpLiBCdWcgZm91bmQgYW5kIChvdGhlcikgZml4IHN1Z2dlc3RlZCBieQoJPGRhbmllbEBtYXQudXRmc20uY2w+IERhbmllbCBTZXJwZWxsLgoKCSogb2xlL29sZWZvbnQuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBtaXNzaW5nIFdJTkFQSXMuCgoJKiB3aW5kb3dzL3gxMWRydi9ldmVudC5jLCB3aW5kb3dzL3gxMWRydi9pbml0LmMsIGxvYWRlci90YXNrLmMsIHdpbmRvd3MvZXZlbnQuYywgd2luZG93cy90dHlkcnYvZXZlbnQuYywgd2luZG93cy90dHlkcnYvaW5pdC5jLCBpbmNsdWRlL21lc3NhZ2UuaCwgaW5jbHVkZS90dHlkcnYuaCwgaW5jbHVkZS94MTFkcnYuaDoKCVN0ZXBoYW5lIEx1c3NpZXIgPHN0ZXBoYW5lQG1hY2FkYW1pYW4uY29tPgoJRml4IHByb2JsZW0gd2hlcmUgeW91IG5lZWQgbW91c2UgYWN0aXZpdHkgdG8gdW5sb2NrIHNvbWUgMTYgYml0cwoJdGhyZWFkIHdpdGggbXVsdGktdGhyZWFkZWQgYXBwcy4KClNhdCBGZWIgMjAgMTY6NDg6NTQgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHJlbGF5MzIvb2xlYXV0MzIuc3BlYywgaW5jbHVkZS9BdHRpYy9pbnRlcmZhY2VzLmgsIGluY2x1ZGUvb2FpZGwuaCwgaW5jbHVkZS9vY2lkbC5oLCBpbmNsdWRlL29sZS5oLCBpbmNsdWRlL29sZWF1dG8uaCwgaW5jbHVkZS9vbGVjdGwuaCwgaW5jbHVkZS93aW5lL29ial9vbGVhdXQuaCwgaW5jbHVkZS93aW5lL29ial9vbGVmb250LmgsIGluY2x1ZGUvd3R5cGVzLmgsIG9sZS9NYWtlZmlsZS5pbiwgb2xlL2d1aWQuYywgb2xlL29sZTJkaXNwLmMsIG9sZS9vbGVmb250LmMsIG9sZS90eXBlbGliLmM6CglGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglJbXBsZW1lbnRlZCB0aGUgT2xlQ3JlYXRlRm9udEluZGlyZWN0IG1ldGhvZCBhbmQgdGhlIGFzc29jaWF0ZWQgQ09NCglvYmplY3QuIFRoYXQgb2JqZWN0IHN1cHBvcnRzIHRoZSBJRm9udCBhbmQgSURpc3BhdGNoIGludGVyZmFjZXMuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9jb25maWcuaC5pbiwgbWlzYy9wb3J0LmMsIG1pc2Mvd2luc29jay5jLCBtaXNjL3dpbnNvY2tfZG5zLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVByb2JsZW1zIHJlcG9ydGVkIGJ5IERvbmFsZCBQYWdlLCBQUiAxMDUtMTA3LgoKCSogY29uc29sZS9uY3Vyc2VzLmM6IEpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJTW9yZSBjb21tZW50aW5nLCBiZXR0ZXIgZGVidWdnaW5nIG9mIGNvbG9yIHByb2JsZW1zLCBhbmQgc3VwcG9ydCBmb3IKCXRoZSBuZXcgVGVybWluYWxUeXBlIG9wdGlvbiBpbiB3aW5lLmluaS4gVGhpcyBhbGxvd3MgdXMgdG8gc2VsZWN0Cgl3aGljaCB0ZXJtaW5hbCB0eXBlIHdlIGFyZSByZWFsbHkgdXNpbmcgc28gdGhhdCB3ZSBjYW4sIGZvciBleGFtcGxlLAoJdXNlIGl0cyBjb2xvciBjYXBhYmlsaXRpZXMuCgoJKiBjb25zb2xlL2ludGVyZmFjZS5jLCBpbmNsdWRlL2NvbnNvbGUuaDoKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJU3VwcG9ydCBmb3IgdGhlIG5ldyBJbml0aWFsUm93cyBhbmRmIEluaXRpYWxDb2x1bW5zIG9wdGlvbnMgaW4gd2luZS5pbmkKCShHZW5lcmljIHJlcGxhY2VtZW50IGZvciBYdGVybVJlc29sdXRpb24gb3B0aW9uLi4uKQoKCSogbXNkb3MvaW50MTAuYzogSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglGaXggKkRVSCogcHJvYmxlbSBjYXVzaW5nIGxvdHMgYW5kIGxvdHMgb2YgdW5uZWNlc3NhcnkgQWxsb2NDb2xvciBlcnJvcnMuCgoJKiBjb25zb2xlL3h0ZXJtLmM6IEpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJUmVtb3ZhbCBvZiBvYnNvbGV0ZSBYdGVybVJlc29sdXRpb24gb3B0aW9uLgoKCSogZG9jdW1lbnRhdGlvbi9jb25zb2xlLCB3aW5lLmluaToKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJQWRkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBuZXcgd2luZS5jb25mIG9wdGlvbnMuCgoJKiBkZWJ1Z2dlci9zdGFjay5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUZpeGVkIGJhY2t0cmFjayBpc3N1ZSBvbiAxNmJpdCBjb2RlLgoKCSogZGVidWdnZXIvbXNjLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQ2hhbmdlZCBMb2NhdGVEZWJ1Z0luZm9GaWxlIHRvIHJlZHVjZSBzdGFjayBjb25zdW1wdGlvbiAoZnJvbSAxM2sgdG8gMmsgISEpCgoJKiBkZWJ1Z2dlci9pbmZvLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRml4ZWQgY29tbWVudCBmb3IgV2luZSBkb2N1bWVudGF0aW9uLgoKCSogaW5jbHVkZS9zZXJ2ZXIuaCwgaW5jbHVkZS9zZXJ2ZXIvcmVxdWVzdC5oLCBzZXJ2ZXIvcmVxdWVzdC5jLCBzZXJ2ZXIvdHJhY2UuYzoKCUFkZGVkIGdldC9zZXRfaGFuZGxlX2luZm8gcmVxdWVzdC4KCgkqIGdyYXBoaWNzL3gxMWRydi9kaWIuYzoKCUZpeGVkIGVuZC1vZi1saW5lIGJ1ZyBpbiBYMTFEUlZfRElCX1NldEltYWdlQml0c19STEU0LgoKCSogdG9vbHMvd3JjL0NIQU5HRVMsIHRvb2xzL3dyYy9nZW5yZXMuYywgdG9vbHMvd3JjL25ld3N0cnVjLmMsIHRvb2xzL3dyYy9wYXJzZXIueSwgdG9vbHMvd3JjL3dyYy5oLCB0b29scy93cmMvd3JjdHlwZXMuaCwgdG9vbHMvd3JjL3dyaXRlcmVzLmM6CglCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJRml4IGEgY291cGxlIG9mIDY0Yml0IHBsYXRmb3JtIHByb2JsZW1zIGFuZCBzcGVlZCB1cCBjb21waWxhdGlvbi4gU2VlCgl0b29scy93cmMvQ0hBTkdFUyBmb3IgZGV0YWlscy4KCgkqIG11bHRpbWVkaWEvbW1pby5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCW1taW9EZXNjZW5kOiBkZWJ1Z291dHB1dCBlbmhhbmNlZCwgRklORExJU1QvRklORFJJRkYgc2hvdWxkIENoZWNrIHRoZQoJY29ycmVjdCBja2lkIChMSVNUL1JJRkYpIHRvby4gKHZlcmlmaWVkIGFnYWluc3QgbWNpYXZpMzIuZGxsKQoKCSogTWFrZWZpbGUuaW46IFp5Z28gQmxheGVsbCA8emJsYXhlbGxAZnVycnl0ZXJyb3Iub3JnPgoJQWRkZWQgYSBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB3aW5lLnN5bSBiZWZvcmUgaW5zdGFsbGluZyBpdC4KCgkqIGluY2x1ZGUvb2xlMi5oLCBvbGUvb2xlMi5jLCByZWxheTMyL29sZTMyLnNwZWM6CglGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglBZGRlZCBzb21lIG5ldyBzdHVicyBmb3IgdGhlIE9MRSBtZW51IGRlc2NyaXB0b3IgbWV0aG9kcy4KCkZyaSBGZWIgMTkgMTY6NTA6MjQgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbmRvd3MvcXVldWUuYzogTWFydGluIFdhbGtlciA8bXdhbGtlckBjYWNpLmNvLnVrPgoJRml4ZWQgbWVzc2FnZSBmaWx0ZXJpbmcgY2hlY2suCgoJKiByZWxheTMyL2FkdmFwaTMyLnNwZWMsIGRsbHMvYWR2YXBpMzIvc2VjdXJpdHkuYywgZGxscy9udGRsbC9udC5jLCBkbGxzL250ZGxsL3J0bC5jLCBpbmNsdWRlL250ZGRrLmgsIGluY2x1ZGUvbnRkZWYuaCwgaW5jbHVkZS9udGRsbC5oLCBpbmNsdWRlL3F1ZXVlLmgsIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbm50LmgsIGluY2x1ZGUvd2lucmVnLmgsIG9sZS9vbGVvYmouYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJLSBtYWRlIHRoZSBzZWN1cml0eSBmdW5jdGlvbnMgY29uc2lzdGVudC4gYWR2YXBpIGNhbGxzIGRvd24gdG8gbnRkbGwgbm93CgktIG5ldyBTZXRTZWN1cml0eURlc2NyaXB0b3JHcm91cCwgIFNldFNlY3VyaXR5RGVzY3JpcHRvck93bmVyLAoJICBTZXRTZWN1cml0eURlc2NyaXB0b3JTYWNsLCBHZXRTZWN1cml0eURlc2NyaXB0b3JEYWNsCgktIG50LWhlYWRlciBjbGVhbnVwCgoJKiBkbGxzL250ZGxsL3J0bC5jLCBpZjE2MzIvYnVpbHRpbi5jLCBtaXNjL2NwdS5jLCB3aW4zMi9rZXJuZWwzMi5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglGaXhlZCBhIGZldyBicm9rZW4gaW5jbHVkZXMuCgoJKiB3aW5kb3dzL25vbmNsaWVudC5jOiBSZXZlcnRlZCBicm9rZW4gY2xvc2UgYnV0dG9uIGNoYW5nZS4KCgkqIGRsbHMvY29tY3RsMzIvaGVhZGVyLmMsIGRsbHMvY29tY3RsMzIvcmViYXIuYywgZGxscy9jb21jdGwzMi90YWIuYywgZGxscy9jb21jdGwzMi90b29sYmFyLmMsIGRsbHMvY29tY3RsMzIvdG9vbHRpcHMuYywgZGxscy9jb21jdGwzMi91cGRvd24uYywgZGxscy9zaGVsbDMyL2NvbnRtZW51LmMsIGRsbHMvc2hlbGwzMi9kYXRhb2JqZWN0LmMsIGdyYXBoaWNzL3BhdGguYywgZ3JhcGhpY3MvcHNkcnYvaW5pdC5jLCB0b29scy93cmMvbmV3c3RydWMuYywgY29udHJvbHMvYnV0dG9uLmMsIGNvbnRyb2xzL2VkaXQuYywgY29udHJvbHMvd2lkZ2V0cy5jLCBkbGxzL2FkdmFwaTMyL2FkdmFwaS5jLCBkbGxzL2FkdmFwaTMyL3NlY3VyaXR5LmM6CglKZWZmIEdhcnppayA8amdhcnppa0Bwb2JveC5jb20+CglBZGRlZCBtaXNzaW5nIHN0cmluZy5oIGluY2x1ZGUuCgoJKiBsb2FkZXIvbmUvbW9kdWxlLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglPbmx5IGFwcGVuZCAuZGxsIGlmIG5vIGV4dGVuc2lvbiB5ZXQuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYzogRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJVGVtcG9yYXJ5IGZpeCBzdWdnZXN0ZWQgYnkgVWxyaWNoIHRvIGFsbG93IHRoZQoJTXNnV2FpdEZvck11bHRpcGxlT2JqZWN0IG1ldGhvZCB0byBiZSBjYWxsZWQgZnJvbSAxNiBiaXQgdGhyZWFkcy4KCgkqIHdpbmRvd3Mvd2lucHJvYy5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUluaXRpYWxpemVkIHJldHVybiB2YWx1ZSBvZiAxNi0+MzIgY29udmVyc2lvbiBvZiBXTV9NRElHRVRBQ1RJVkUgaW4KCWNhc2UgaXQncyBzZW50IHRvIGEgd2luZG93IHRoYXQgZG9lc24ndCBoYW5kbGUgaXQgKGkuZS4gbm90IE1ESQoJY2xpZW50KS4KCgkqIGluY2x1ZGUvZGNlLmgsIHdpbmRvd3MvZGNlLmMsIHdpbmRvd3Mvd2lucG9zLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkIGV4dHJhIGNoaWxkIGFyZ3VtZW50cyB0byBEQ0VfR2V0VmlzUmduKCkgdG8gYmUgYWJsZSB0byBoYW5kbGUKCVBBUkVOVERDIGNsYXNzIHN0eWxlIGNvbWJpbmVkIHdpdGggQ0xJUENISUxEUkVOIHdpbmRvdyBzdHlsZSwgdG8KCXByZXZlbnQgbWlzLXJlZHJhd3MgaW4gRnJlZSBBZ2VudCAxNi1iaXQuCgoJKiBkbGxzL3ZlcnNpb24vaW5mby5jOiBMYXdzb24gQS4gV2hpdG5leSA8bGF3c29uX3doaXRuZXlAanVuby5jb20+CglEb24ndCBoYW5nIG9uIHRoZSBsYXN0IGNoaWxkIGlmIGl0J3Mgbm90IHdhbnRlZC4KCgkqIHdpbjMyL2tlcm5lbDMyLmMsIHJlbGF5MzIva2VybmVsMzIuc3BlYzogSWFuIFNjaG1pZHQgPGlyc21hbkBpYWcubmV0PgoJUGFydGlhbCBzdHViIGltcGxlbWVudGF0aW9uIG9mIHVuZG9jdW1lbnRlZCBLRVJORUwgcm91dGluZSBQSzE2Rk5GLAoJbmVlZGVkIGJ5IFdpbjk4IEVYUExPUkVSLiBUaGFua3MgdG8gVWxyaWNoIFdlaWdhbmQgZm9yIGluZm9ybWF0aW9uLgoKCSogbWlzYy9jb21tZGxnLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRml4IHJlZHJhdyBwcm9ibGVtcyBmb3IgQ2hvb3NlQ29sb3IgZGlhbG9nLgoKCSogKi8qLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUmVtb3ZlZCBhIGxvdCBvZiBvY2N1cmVuY2VzIG9mIHdpbmRvd3MuaCAoYW5kIGFkZGVkIG5lY2Vzc2FyeSBvdGhlcgoJaW5jbHVkZXMpLgoKCSogaW5jbHVkZS9vYmppZGwuaCwgaW5jbHVkZS93aW5lL29ial9tb25pa2VyLmgsIG9sZS9jb21wb2JqLmMsIGRsbHMvc2hlbGwzMi9kYXRhb2JqZWN0LmMsIGRsbHMvc2hlbGwzMi9lbnVtaWRsaXN0LmM6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCVNtYWxsIGZpeGVzLgoKCSogaW5jbHVkZS9kc291bmQuaCwgbXVsdGltZWRpYS9kc291bmQuYzoKCUZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJQ2hhbmdlZCB0aGUgZmlyc3QgcGFyYW1ldGVyIGZyb20gTFBHVUlEIChXaW5kb3dzIGhlYWRlcnMpIHRvIFJFRkdVSUQuCglUaGlzIG1ha2VzIGl0IGEgJ2NvbnN0IEdVSUQqJyB3aGljaCBtZWFucyBEaXJlY3RTb3VuZENyZWF0ZSBtdXN0IG5vdAoJY2hhbmdlIGl0LgoKCSogZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCVJlbW92ZWQgcmVkdW5kYW50IGRlZmluaXRpb25zIG9mIElzRXF1YWxJSUQgYW5kIElzRXF1YWxDTFNJRCAoc2VlCglpbmNsdWRlL3dpbmUvb2JqX2Jhc2UuaCkKClRodSBGZWIgMTggMTc6MzQ6MTAgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL3F1ZXVlLmMsIHdpbmRvd3MvdXNlci5jLCBpbmNsdWRlL3F1ZXVlLmg6CglTdGVwaGFuZSBMdXNzaWVyIDxzdGVwaGFuZUBtYWNhZGFtaWFuLmNvbT4KCS0gTmV3IGltcGxlbWVudGF0aW9uIG9mIFNlbmRNZXNzYWdlLCBSZWNlaXZlTWVzc2FnZSwgUmVwbHlNZXNzYWdlIGZ1bmN0aW9ucwoJICB0byBzdXBwb3J0IHRocmVhZC1zYWZlbmVzcywgYW5kIG5lc3RlZCBTZW5kTWVzc2FnZS4KCS0gQWRkaXRpb24gb2YgUmVwbHlNZXNzYWdlMzIuCgoJKiB3aW5kb3dzL3gxMWRydi93bmQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBDb3BlIHdpdGggTlVMTCBwRHJpdmVyRGF0YSBpbiBYMTFEUlZfV05EX0dldFhXaW5kb3cuCgoJKiBtaXNjL2NvbW1kbGcuYywgcmVzb3VyY2VzL3N5c3Jlc19Fbi5yYzoKCVBhc2NhbCBMZXNzYXJkIDxwYXNjYWxAbWFjYWRhbWlhbi5jb20+CglBcHBsaWVkIHRoZSBjaGFuZ2VzIG9mIHRoZSByZXN1bHRpbmcgY29sb3Igb2YgdGhlIGNob29zZSBjb2xvciBkaWFsb2cuCglJbml0aWFsaXplIHZhbHVlcyBpbiB0aGUgY2hvb3NlIGNvbG9yIGRpYWxvZy4KCgkqIGluY2x1ZGUvd2luZS9vYmpfYmFzZS5oLCBpbmNsdWRlL3dpbmUvb2JqX21hcnNoYWwuaDoKCUZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJUmVtb3ZlZCByZWZlcmVuY2VzIHRvIElDT01fSU5IRVJJVFMuCgoJKiBvbGUvc3RnX2JpZ2Jsb2NrZmlsZS5jLCBvbGUvc3RvcmFnZTMyLmMsIG9sZS9zdG9yYWdlMzIuaDoKCVRodXkgTmd1eWVuIDx0aHV5QG1hY2FkYW1pYW4uY29tPgoJRml4ZWQgYnVnIHdpdGggcmVhZC1vbmx5IGZpbGVzLgoKCSogbXVsdGltZWRpYS9tY2lhdmkuYywgbXVsdGltZWRpYS9tY2ltaWRpLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJlbW92ZWQgc3VwZXJmbG91cyBXSU5BUEkgKG1pc21hdGNoIHdpdGggcHJvdG90eXBlKSBpbiAqX0RyaXZlclByb2MzMi4KCgkqIGluY2x1ZGUvZG9zZXhlLmg6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJZG9zZXhlLmggZGVwZW5kcyBvbiB3aW5iYXNlLmggKGZvciBMUFNUQVJUVVBJTkZPMzJBKQoKCSogZGxscy9zaGVsbDMyL3NoZWxsbGluay5jLCBvbGUvYmluZGN0eC5jLCBvbGUvZmlsZW1vbmlrZXIuYywgb2xlL2l0ZW1tb25pa2VyLmMsIG9sZS9zdGdfc3RyZWFtLmMsIG9sZS9zdG9yYWdlMzIuYywgb2xlL3N0b3JhZ2UzMi5oOgoJRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglNb2RpZmllZCBzbyB0aGF0IHRoZXkgZG8gbm90IHVzZSB0aGUgVlRBQkxFX0ZVTkMgbWFjcm9zIHRoYXQgcGVyZm9ybWVkCgljYXN0cyBvZiBhbGwgbWV0aG9kcyBwdXQgaW4gdGhlIGp1bXAgdGFibGUuIEkgZmluZCBpdCB0b28gcmlza3kgdG8gdXNlCglzdWNoIG1hY3JvcyBiZWNhdXNlIG5vdGhpbmcgZ3VhcmFudGVlcyB0aGF0IHlvdSBhY3R1YWxseSBwdXQgdGhlIHJpZ2h0CgltZXRob2QgYXQgdGhlIHJpZ2h0IHBsYWNlIG9yIHRoYXQgdGhlIHByb3RvdHlwZSBpcyByaWdodC4KCgkqIGluY2x1ZGUvd2luZS9vYmpfbW9uaWtlci5oLCBpbmNsdWRlL3dpbmUvb2JqX3N0b3JhZ2UuaCwgb2xlL3N0b3JhZ2UuYzoKCUZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJVXBkYXRlZCB0byB1c2UgdGhlIGxhdGVzdCBDT00gbWFjcm9zLiBEZWZpbmVkIG1vcmUgaW50ZXJmYWNlcyBhbmQgQVBJCglmdW5jdGlvbnMuCgoJKiBjb250cm9scy9tZW51LmMsIGdyYXBoaWNzL3gxMWRydi9vZW1iaXRtYXAuYywgaW5jbHVkZS93aW51c2VyLmgsIHdpbmRvd3Mvbm9uY2xpZW50LmM6CglGcmFuY29pcyBCb2lzdmVydDxmcmFuY29pc0BtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGF0aW9uIG9mIHRoZSBwdXNoZWQgY2xvc2UgYnV0dG9uLgoKV2VkIEZlYiAxNyAxNzo0NTo1NCAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS9tYXBpZGVmcy5oLCBpbmNsdWRlL29iamJhc2UuaCwgaW5jbHVkZS9vbGUuaCwgaW5jbHVkZS9vbGVhdXRvLmgsIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbmUvb2JqX21vbmlrZXIuaCwgaW5jbHVkZS93aW5lL29ial9wcm9wZXJ0eXN0b3JhZ2UuaCwgaW5jbHVkZS93aW5udC5oLCBpbmNsdWRlL3dpbnR5cGVzLmgsIGluY2x1ZGUvd3R5cGVzLmgsIG9sZS9jb21wb2JqLmM6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCU1vdmVkIHNvbWUgZGVmaW5pdGlvbnMgdG8gdGhlaXIgcHJvcGVyIGluY2x1ZGUgZmlsZS4KCgkqIGluY2x1ZGUvd2luZS9vYmpfY2xpZW50c2VydmVyLmgsIGluY2x1ZGUvd2luZS9vYmpfbWlzYy5oOgoJRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglGaXhlZCBzb21lIElDT01fSU5IRVJJVCBzdHVmZiBhbmQgYWRkZWQgbmV3IHJlbGF0ZWQgQVBJIGZ1bmN0aW9ucy4KCgkqIGluY2x1ZGUvd2luZS9vYmpfYmFzZS5oOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCUFkZGVkIG5ldyBBUEkuIFBhcnQgb2YgaXQgd2FzIGluICdpbmNsdWRlL29iamJhc2UuaCcgYmVmb3JlIGFuZCBwYXJ0CglvZiBpdCBpcyBuZXcuIE5vdyBpdCBhbHNvIGNvbnRhaW5zICdXSU5FX1N0cmluZ0Zyb21DTFNJRCcuIEl0J3Mgbm90CglwZXJmZWN0IGJ1dCBpdCdzIGJldHRlciB0aGFuIGhhdmluZyBpdCBpbiAnaW5jbHVkZS9vYmpiYXNlLmgnLgoKCSogZGxscy9hZHZhcGkzMi9jcnlwdC5jLCBkbGxzL250ZGxsL250LmMsIGdyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jLCBzY2hlZHVsZXIvc3luY2hyby5jLCBjb250cm9scy9zY3JvbGwuYzoKCUZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJRml4ZWQgYSBudW1iZXIgb2Ygd2FybmluZ3MgY29uY2VybmluZyB0aGUgbWF0Y2hpbmcgb2YgdGhlIHByaW50ZgoJZm9ybWF0IHN0cmluZyBhbmQgdGhlIGFzc29jaWF0ZWQgcGFyYW1ldGVycyAoYWN0dWFsbHkgaXQncyBtb3N0bHkKCVRSQUNFIGFuZCBGSVhNRXMpLgoKCSogaW5jbHVkZS9tbXN5c3RlbS5oLCBtdWx0aW1lZGlhL21taW8uYywgbXVsdGltZWRpYS9tbXN5c3RlbS5jLCByZWxheTMyL3dpbm1tLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCW1taW9EZXNjZW5kOiBmaXhlZCBGSU5EX3h4eHgsIHZlcmlmaWVkIHdpdGggbWNpYXZpMzIuZGxsLgoJbWNpTG9hZENvbW1hbmRSZXNvdXJjZTMyOiBzZWNvbmQgYXJnIGlzIHdpZGUgc3RyaW5nCgltY2lHZXREcml2ZXJEYXRhOiBzcGVjIGhhcyBqdXN0IG9uZSBsb25nIGFyZ3VtZW50CgoJKiBvbGUvY29tcG9iai5jLCBvbGUvaWZzLmMsIG9sZS9pZnMuaCwgb2xlL3N0b3JhZ2UuYywgZGxscy9zaGVsbDMyL3NoZWxsb2xlLmMsIGluY2x1ZGUvd2luZS9vYmpfYmFzZS5oLCBpbmNsdWRlL3dpbmUvb2JqX2RhdGFvYmplY3QuaCwgbXVsdGltZWRpYS9kc291bmQuYywgZGxscy9zaGVsbDMyL2RhdGFvYmplY3QuYywgZGxscy9zaGVsbDMyL3NoZWxsbGluay5jOgoJRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglDaGFuZ2VkIElDT01fVEhJUyBkZWZpbml0aW9uLgoKCSogZGxscy92ZXJzaW9uL2luZm8uYywgaW5jbHVkZS92ZXIuaDoKCUJlcnRobyBTdHVsdGllbnMgPGJlcnRob0BwYW50ZXIuc29jaS5hYXUuZGs+CglSZW5hbWVkIFZTX1ZFUlNJT05fSU5GT3h4IHN0cnVjdHVyZSB0byBWU19WRVJTSU9OX0lORk9fU1RSVUNUeHguCglUaGUgVlNfVkVSU0lPTl9JTkZPIGlzIGEgc2ltcGxlIGRlZmluZSBhbmQgd291bGQgY2F1c2UgY29uZnVzaW9uLgoJQWxzbyBjb3JyZWN0ZWQgdGhlIFZTX3h4X0lORk8gZGVmaW5lcyBub3QgdG8gdXNlIE1BS0VJTlRSRVNPVVJDRTE2IGZvciB3aW4zMi4KCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOiBTdGVmZmVuIE1vZWxsZXIgPG1vZWxsZXJAZWJpLmFjLnVrPgoJIkNvbmZpZ3VyZSBmaW5pc2hlZCIgbWVzc2FnZSBzdWdnZXN0cyB0byBjYWxsIG1ha2Ugd2hlbiBtYWtlIGRlcGVuZAoJd2FzIHN1Y2Nlc3NmdWwuCgoJKiAqLyo6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJT3B0aW1pemVkIGluY2x1ZGUvKi5oOiAocmVjdXJzaXZlbHkpIGluY2x1ZGUgYWxsIGhlYWRlcnMgbmVlZGVkIGJ5Cgl0aGlzIC5oIGZpbGUsIGJ1dCBvbmx5IHRob3NlLiBOZWNlc3NhcnkgZml4ZXMgdG8gYSBsb3Qgb2YgLmMgZmlsZXMsCglzdGFydGVkIG9wdGltaXppbmcgIndpbmRvd3MuaCIgYXdheSBmcm9tIHNvbWUgb2YgdGhlbS4gTW92ZWQKCUdldEN1cnJlbnRUYXNrIHByb3RvdHlwZSB0byB3aW5lL3dpbmJhc2UxNi5oLgoKCSogaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL2xpc3R2aWV3LmgsIGRsbHMvY29tY3RsMzIvbGlzdHZpZXcuYzoKCUx1YyBUb3VyYW5nZWF1IDxsdWNAbWFjYWRhbWlhbi5jb20+CglQcmVsaW1pbmFyeSBsaXN0dmlldyBjb250cm9sIGltcGxlbWVudGF0aW9uLgoKCSogY29udHJvbHMvbWVudS5jOiBGcmFuY29pcyBCb2lzdmVydCA8ZnJhbmNvaXNAbWFjYWRhbWlhbi5jb20+CglHaXZlIHRoZSBjb250ZXh0IG1lbnUgaXRzIHByb3BlciBiZWhhdmlvdXIgYW5kIG1vZGlmeSBUcmFja1BvcHVwTWVudQoJdG8gY29tcGx5IHdpdGggd2luZG93cyBBUEkuCgoJKiB3aW5kb3dzL3BhaW50aW5nLmM6IERhdmUgUGlja2xlcyA8ZGF2ZXBAbnVnYXRlLmRlbW9uLmNvLnVrPgoJR2V0VXBkYXRlUmVjdCBzaG91bGQgcmV0dXJuIGNsaWVudCBjb29yZGluYXRlcyB1bmxlc3MgdGhlIHdpbmRvdyB3YXMKCWNyZWF0ZWQgd2l0aCB0aGUgQ1NfT1dOREMgc3R5bGUgYW5kIHRoZSBtYXBwaW5nIG1vZGUgaXMgbm90IE1NX1RFWFQsCglpbiB3aGljaCBjYXNlIHRoZSByZXN1bHQgc2hvdWxkIGJlIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMuCgoJKiBpbmNsdWRlL3dpbmUvb2JqX2NoYW5uZWwuaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglBZGRlZCB0aGUgYWN0dWFsIGRlZmluaXRpb25zIG9mIHRoZSBpbnRlcmZhY2VzLgoKCSogaW5jbHVkZS9zZXJ2cHJvdi5oOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCUNvbnZlcnRlZCB0byB0aGUgbmV3IENPTSBkZWNsYXJhdGlvbiAnc3RhbmRhcmQnIGZvciBiZXR0ZXIKCWNvbXBhdGliaWxpdHkgd2l0aCBDIGNvZGUgaW1wbGVtZW50YXRpbmcgdGhhdCBpbnRlcmZhY2UuCgoJKiBtaXNjL3dzcHJpbnRmLmM6IEZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCUNoYW5nZWQgV1BSSU5URl9FeHRyYWN0VkFQdHIgdG8gdGFrZSB0aGUgYWRkcmVzcyBvZiB0aGUgdmFfbGlzdCB0byBiZQoJYWJsZSB0byBtb2RpZnkgaXQuCgoJKiBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmM6IFN5bHZhaW4gU3QuR2VybWFpbiA8c3lsdmFpbkBtYWNhZGFtaWFuLmNvbT4KCURlZmluZWQgSURyb3BUYXJnZXQgZm9yIFNoZWxsRm9sZGVyLiAgSW1wbGVtZW50ZWQgdGhlIENvbnN0cnVjdG9yLAoJRGVzdHJ1Y3RvciwgQWRkUmVmLCBSZWxlYXNlIGFuZCBRdWVyeUludGVyZmFjZSBtZXRob2RzLgoKCSogbWVtb3J5L3NlbGVjdG9yLmMsIGlmMTYzMi9rZXJuZWwuc3BlYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUNoYW5nZSB0eXBlIG9mIG1vZGUgYXJndW1lbnQgdG8gR0VUVkRNUE9JTlRFUjMyVyBmcm9tIERXT1JEIHRvIFdvcmQKCk1vbiBGZWIgMTUgMTU6MjQ6MjAgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvbXNhY20uaCwgaW5jbHVkZS93aW51c2VyLmg6CglEb3VnbGFzIFJpZGd3YXkgPHJpZGd3YXlAd2luZWhxLmNvbT4KCWMybWFuIGRvZXNuJ3QgbGlrZSBleHRyYSBzZW1pY29sb25zLgoKCSogd2luZG93cy93aW5wb3MuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglSZXNldHRpbmcgWCBmb2N1cyBzaG91bGQgbm90IGJlIGRvbmUgd2l0aCBTZXRGb2N1czMyLiBDYWxsZWQKCXRoZSB3aW5kb3dpbmcgKFgxMSkgZHJpdmVyJ3MgU2V0Rm9jdXMgcm91dGluZSBkaXJlY3RseSBpbnN0ZWFkLgoJVGhpcyBhcHBhcmVudGx5IGZpeGVzIGEgYmlnIGhlYXAgb2YgdXNlciBpbnRlcmZhY2UgcHJvYmxlbXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBGZWIgMTQgMTQ6MDk6NDIgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGdyYXBoaWNzL3BhaW50aW5nLmMsIGluY2x1ZGUvd2ludXNlci5oLCBvYmplY3RzL2N1cnNvcmljb24uYywgd2luZG93cy9kaWFsb2cuYywgd2luZG93cy9wYWludGluZy5jLCB3aW5kb3dzL3JlY3QuYywgd2luZG93cy93aW4uYywgd2luZG93cy93aW5wb3MuYzoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQ2hhbmdlZCBzb21lIGZ1bmN0aW9ucyBwcm90b3R5cGVzICh3ZXJlIHJldHVybmluZyB2b2lkKS4KCgkqIG1pc2MvbWFpbi5jLCBpbmNsdWRlL3dpbnVzZXIuaDogUGF1bCBRdWlubiA8cGF1bHFAY29yZWwuY2E+CglGaXhlZCBzb21lIFdpbmVsaWIgbmFtZXMuCgoJKiBpbmNsdWRlL2NsaXBib2FyZC5oLCBpbmNsdWRlL2NvbnNvbGUuaCwgaW5jbHVkZS9kZXNrdG9wLmgsIGluY2x1ZGUva2V5Ym9hcmQuaCwgaW5jbHVkZS90dHlkcnYuaCwgaW5jbHVkZS94MTFkcnYuaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQ29ycmVjdGVkIHByb3RvdHlwZXMgZnVuYygpIC0+ZnVuYyh2b2lkKS4KCgkqIG11bHRpbWVkaWEvaW5pdC5jLCBtdWx0aW1lZGlhL21pZGkuYywgZGVidWdnZXIvbWVtb3J5LmM6CglCcmlhbiBKb3NlcGggQ3phcGlnYSA8cm9vdEBnbGFjaWQuY29tPgoJRml4ZWQgYSBmZXcgI2lmZGVmcy4KCgkqIHdpbmRvd3Mvc2Nyb2xsLmMsIHdpbmRvd3MveDExZHJ2L3duZC5jOgoJSmVyb21lIFZvdWlsbG9uIDx2b3VpbGxvbkBjbGFyYW5ldC5mcj4KCU1ha2UgYSBjb3JyZWN0IHVzZSBvZiBjbGlwcGluZyByZWN0YW5nbGVzLgoKCSogaW5jbHVkZS9iaXRtYXBzL29jcl9jcm9zczoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFkZGVkIHdoaXRlIGJvcmRlci4KCgkqIGRlYnVnZ2VyL2RiX2Rpc2FzbS5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUltcGxlbWVudGVkIGJldHRlciBvdXRwdXQgZm9yIGluZGlyZWN0IGNhbGxzLgoKCSogcmVsYXkzMi93aW5tbS5zcGVjOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUZpeGVkIHR5cG8gaW4gd2lubW0uc3BlYy4KCgkqIGluY2x1ZGUvd2ludHlwZXMuaCwgaW5jbHVkZS93cmNfcnNjLmgsIG1pc2MvbHN0ci5jLCBtaXNjL3dzcHJpbnRmLmMsIHJlbGF5MzIvYnVpbHRpbjMyLmMsIHJlbGF5MzIvcmVsYXkzODYuYywgcmVsYXkzMi9zbm9vcC5jOgoJR2F2cmllbCBTdGF0ZSA8Z2F2cmllbHNAQ09SRUwuQ0E+CglBIGZldyBub24teDg2IFdpbmVsaWIgZml4ZXMuCgoJKiBtaXNjZW11L21haW4uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglEbyBub3QgcHJpbnQgJ3dpbmU6IG5vIGV4ZWN1dGVhYmxlIGZvdW5kJyBpZiB3ZSBkaWQgZXhlY3V0ZSBzb21ldGhpbmcuCgoJKiBwcm9ncmFtcy9ub3RlcGFkLyo6CglNYXJjZWwgQmF1ciA8bWJhdXJAZzI2LmV0aHouY2g+CgktIEFkZGVkIG5ldyBJRFNfTk9UU0FWRUQgcmVzc291cmNlIChuZWVkcyB0cmFuc2xhdGlvbiBpbiAqLnJjKQoJLSBJbXByb3ZlZCBwcmludGluZyBzdXBwb3J0IChub3QgeWV0IGNvbXBsZXRlKQoJLSBJbXByb3ZlZCBmaWxlIGRyYWcgYW5kIGRyb3AgKHNob3VsZCBub3cgd29yaykKCS0gR2VuZXJhbCBjb2RlIGNsZWFudXAKCgkqIGluY2x1ZGUvbXVsdGltZWRpYS5oLCBtdWx0aW1lZGlhL21jaW1pZGkuYywgbXVsdGltZWRpYS9tY2l3YXZlLmMsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYzoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRml4ZWQgYnVncyBvbiBNQ0kgbm90aWZpY2F0aW9uIChjYWxsYmFjayBpbmZvIGFyZSBjb3BpZWQgYmVmb3JlCglhc3luY2hyb25vdXMgcmV0dXJuKSAtIG1ha2UgdXNlIG9mIGl0IGluIE1DSSB3YXZlIGFuZCBtaWRpLgoJSW1wbGVtZW50ZWQgbWNpKFNldHxHZXQpRGV2aWNlSUQoMTZ8MzIpIGZ1bmN0aW9ucy4KCgkqIHdpbmRvd3MveDExZHJ2L3duZC5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVNpbmNlIFNldFBhcmVudCBub3cgaGlkZXMvc2hvd3MsIGV4cGxpY2l0bHkgaW52YWxpZGF0aW5nIERDcyBpbiB0aGUKCXBhcmVudCBjaGFuZ2Ugb3BlcmF0aW9uIHNob3VsZCBubyBsb25nZXIgYmUgbmVjZXNzYXJ5LgoKCSogd2luZG93cy9kaWFsb2cuYzogR2VyYXJkIFBhdGVsIDxHLlBhdGVsQFdhbmFkb28uZnI+CglGaXggaWYgRW5kRGlhbG9nIGNhbGxlZCBpbiBXTV9JTklURElBTE9HIChESUFMT0dfRG9EaWFsb2dCb3gpLgoKCSogbXNkb3MvaW9wb3J0cy5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJTW92ZWQgVkdBIHBvcnQgYWNjZXNzIGNoZWNrIGF0IHRoZSBiZWdpbm5pbmcgaW4gb3JkZXIgdG8gaW1wcm92ZQoJcGVyZm9ybWFuY2UgYSBsaXR0bGUgYml0LgoKCSogc2VydmVyL2ZpbGUuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglJbXBsZW1lbnRlZCBmbGFnIEZJTEVfRkxBR19ERUxFVEVfT05fQ0xPU0UuCgoJKiBtc2Rvcy9pbnQxMC5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUFkZGVkIGNvbW1lbnRzLiBUaGluayBJJ3ZlIGZpeGVkIElOVCAxMC8wOCAoR2V0IENoYXJhY3RlciBhbmQKCUF0dHJpYnV0ZSBhdCBDdXJzb3IpLgoKCSogY29uc29sZS94dGVybS5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUFkZGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBYdGVybVByb2dyYW0gYW5kIFh0ZXJtUmVzb2x1dGlvbi4KCUZpeGVkIGEgd2FybmluZy4KCgkqIGRvY3VtZW50YXRpb24vY29uc29sZSwgd2luZS5pbmk6CglKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCU5ldyBleGFtcGxlcy9kb2N1bWVudGF0aW9uIGZvciBjb25zb2xlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgkqIG1pc2MvbWFpbi5jLCB3aW5kb3dzL3gxMWRydi9tYWluLmMsIGNvbnNvbGUvZ2VuZXJpYy5jLCBjb25zb2xlL2ludGVyZmFjZS5jLCBjb25zb2xlL25jdXJzZXMuYywgY29uc29sZS90dHkuYywgaW5jbHVkZS9jb25zb2xlLmgsIGluY2x1ZGUvb3B0aW9ucy5oLCBsb2FkZXIvbWFpbi5jOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglNb3ZlZCBpbml0aWFsaXphdGlvbiB1bnRpbCBsYXRlci4gQWxzbyBtb3ZlZCBhcm91bmQgY29kZSBhIGJpdCB0byBiZQoJY29uc2lzdGFudC4KCgkqIGluY2x1ZGUvZGVidWdnZXIuaDogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBwb3NzaWJpbGl0eSB0byBsb2FkIC5zdGFicy8uc3RhYnN0ciBzZWN0aW9ucyBmcm9tIFBFIGRsbHMuCglVbmZvcnR1bmF0ZWx5IG15IHNhbXBsZXMgdXNlIGN1cnJlbnRseSB0eXBlZGVmcyB3aGljaCB3aW5lLWRiZyBkb2VzCglub3QgdW5kZXJzdGFuZCwgc28gbm8gYWN0dWFsIHBhcnNpbmcuCgoJKiBkbGxzL21zYWNtL21zYWNtX21haW4uYywgZGxscy9tc2FjbTMyL2Zvcm1hdC5jLCBkbGxzL21zYWNtMzIvc3RyZWFtLmMsIGluY2x1ZGUvbW1yZWcuaCwgaW5jbHVkZS9tbXN5c3RlbS5oLCBpbmNsdWRlL21zYWNtLmgsIGluY2x1ZGUvbXNhY21kcnYuaCwgaW5jbHVkZS93aW5iYXNlLmg6CglCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJQ2hhbmdlIGEgY291cGxlIG9mIG5hbWVzIHRoYXQgd291bGQgY29uZmxpY3QgYWZ0ZXIgYWxsIDMyW0FXXSBzdWZmaXhlcwoJYXJlIHJlbW92ZWQuIFN0cnVjdHVyZXMgZGVmaW5lZCBpbiBib3RoIG1tcmVnLmggYW5kIG1tc3lzdGVtLmggYXJlCglwcm90ZWN0ZWQgd2l0aCAjaWZkZWY6cyBhcyBpbiBNUycgaGVhZGVycy4KCgkqIG1pc2MvaW1tLmM6IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJRml4ZWQgd3JvbmcgdHlwZWNhc3RzLgoKCSogcHJvZ3JhbXMvcHJvZ21hbi9ncnBmaWxlLmM6IFN0ZWZhbiBMZWljaHRlciA8c2xlQGNhbWxpbmUuY29tPgoJQ29tcGlsYXRpb24gZml4LgoKCSogY29uZmlndXJlLmluLCBjb25maWd1cmU6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRml4IGZvciBYMTEgaW5jbHVkZXMgZGV0ZWN0aW9uLgoKCSogZGVidWdnZXIvaGFzaC5jLCBkZWJ1Z2dlci9tc2MuYywgZGVidWdnZXIvc3RhYnMuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgcG9zc2liaWxpdHkgdG8gbG9hZCAuc3RhYnMvLnN0YWJzdHIgc2VjdGlvbnMgZnJvbSBQRSBkbGxzLgoJVW5mb3J0dW5hdGVseSBteSBzYW1wbGVzIHVzZSBjdXJyZW50bHkgdHlwZWRlZnMgd2hpY2ggd2luZS1kYmcgZG9lcwoJbm90IHVuZGVyc3RhbmQsIHNvIG5vIGFjdHVhbCBwYXJzaW5nLgoKCSogbXVsdGltZWRpYS9kcGxheS5jLCBkb2N1bWVudGF0aW9uL3N0YXR1cy9kaXJlY3RkcmF3LCBncmFwaGljcy9kM2R2aWV3cG9ydC5jLCBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2QzZC5oOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTb21lIGRkcmF3L2QzZCBidWdmaXhlcywgdXBkYXRlZCBEaWFibG8vV0M0IGRkcmF3IHN0YXR1cy4KCgkqIG9sZS9vbGUybmxzLmMsIHJlbGF5MzIva2VybmVsMzIuc3BlYywgaW5jbHVkZS93aW5ubHMuaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSW1wbGVtZW50YXRpb24gb2YgQ29udmVydERlZmF1bHRMb2NhbGUzMi4KCgkqIHdpbmRvd3MvbWRpLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJV0lOMzEgTG9vayBzdGlsbCBuZWVkcyBhIGNsb3NlIGJ1dHRvbiBvbiB0aGUgbGVmdCBvZiB0aGUgbWVudSBiYXIuCgoJKiB3aW5kb3dzL3dpbnBvcy5jOiBGcmFuY29pcyBCb2lzdmVydCA8ZnJhbmNvaXNAbWFjYWRhbWlhbi5jb20+CglDaGFuZ2VkIFNldFdpbmRvd1BvczMyIHRvIGZvcmNlIHRoZSB1cGRhdGUgb2YgdGhlIG5vbi1jbGllbnQgYXJlYS4KClNhdCBGZWIgMTMgMTc6NTY6MjggMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgaW5jbHVkZS9tbXN5c3RlbS5oLCBpbmNsdWRlL29sZS5oLCBpbmNsdWRlL3dpbmdkaS5oLCBpbmNsdWRlL3dpbnNvY2suaDoKCUJlcnRobyBTdHVsdGllbnMgPGJlcnRob0BwYW50ZXIuc29jaS5hYXUuZGs+CglGaXhlZCBhIGNvdXBsZSBvZiBmYXVsdHkgbmFtZXMgdXNlZCBpbiB3aW5lIGFuZCB0eXBvcyBzbyB0aGF0IGl0IHdpbGwKCWNvbXBpbGUgYWdhaW4gYWZ0ZXIgY29udmVyc2lvbiBmcm9tIDMyW0FXXSBuYW1pbmcgdG8gW0FXXSBuYW1pbmcuCgoJKiBpZjE2MzIvQXR0aWMvc2lnbmFsLmMsIGlmMTYzMi9NYWtlZmlsZS5pbiwgaW5jbHVkZS9kZWJ1Z2dlci5oLCBpbmNsdWRlL2Rvc2V4ZS5oLCBpbmNsdWRlL21pc2NlbXUuaCwgaW5jbHVkZS9zaWdfY29udGV4dC5oLCBsb2FkZXIvZG9zL2Rvc3ZtLmMsIGxvYWRlci9zaWduYWwuYywgbWlzY2VtdS9pbnN0ci5jLCBtaXNjZW11L21haW4uYywgZ3JhcGhpY3MvZGRyYXcuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTW92ZWQgdGhlIGlmMTYzMi9zaWduYWwuYyBzdHVmZiBpbnRvIGxvYWRlci9zaWduYWwuYywgYWRhcHRlZCBmdW5jdGlvbgoJcG9pbnRlcnMgZm9yIHdpbmVfZGVidWcgYW5kIElOU1RSX0VtdWxhdGVJbnN0cnVjdGlvbi4KCgkqIG9sZS9jb21wb2JqLmM6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJQWxsIGd1aWQgJ1JFRnh4eCcgdHlwZXMgYWxyZWFkeSBoYXZlIGEgJ2NvbnN0JyBpbnNpZGUgdGhlbS4KCgkqIGRsbHMvY29tY3RsMzIvZHJhZ2xpc3QuYywgZGxscy9jb21jdGwzMi90b29sdGlwcy5jLCBtaXNjL3ZlcnNpb24uYywgd2luZG93cy93aW5wb3MuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU29tZSB3YXJuaW5ncyBmaXhlZCwgb25lIHVzZWxlc3MgVkVSU0lPTiB3YXJuaW5nIHJlbW92ZWQgKHdpbmVsaWIpLgoKCSogbWlzYy9yZWdpc3RyeS5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJUmVnRmx1c2hLZXk6IHdyb25nIGVycm9yIGNvZGUuCgoJKiB3aW4zMi9maWxlLmM6IEFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFkZHMgYSB3YXJuaW5nIG1lc3NhZ2UgaWYgcGVybWlzc2lvbnMgbm90IHN1ZmZpY2llbnQuCgoJKiBtdWx0aW1lZGlhL21peGVyLmMsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYywgcmVsYXkzMi93aW5tbS5zcGVjLCBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmgsIGluY2x1ZGUvbXVsdGltZWRpYS5oLCBtdWx0aW1lZGlhL01ha2VmaWxlLmluLCBtdWx0aW1lZGlhL21jaWFuaW0uYywgbXVsdGltZWRpYS9tY2lhdmkuYywgbXVsdGltZWRpYS9tY2ltaWRpLmMsIG11bHRpbWVkaWEvbWNpd2F2ZS5jLCBtdWx0aW1lZGlhL21pZGkuYzoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgc3VwcG9ydCBmb3IgTUNJIEFWSSBkcml2ZXIKCUFkZGVkIHNvbWUgZml4ZXMgbWl4ZXIgZnVuY3Rpb25zCglGaXhlZCBNQ0kgc3RyaW5nIGNvbXBhcmlzb24gKHRoYW5rcyB0byBMaW9uZWwgVUxNRVIpCglObyBsb25nZXIgdXNpbmcgMTYgYml0IFVTRVIgZnVuY3Rpb25zICh1c2UgdGhlaXIgMzIgYml0IGNvdW50ZXIgcGFydCkKCVJlaW5kZW50aW5nLgoJQWRkZWQgZnVuY3Rpb24gc25kUGxheVNvdW5kMzJXCgoJKiBpbmNsdWRlL29iamJhc2UuaCwgaW5jbHVkZS9vYmppZGwuaCwgaW5jbHVkZS93aW5lL29ial9tYXJzaGFsLmg6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCUFkZGVkIHRoZSBhY3R1YWwgaW50ZXJmYWNlIGRlZmluaXRpb25zIHRvIHRoZSBvYmpfbWFyc2hhbC5oIHNrZWxldG9uCglmaWxlLiBBbHNvIGRlZmluZWQgdGhlIGFzc29jaWF0ZWQgQyBBUEkuCgoJKiB3aW5kb3dzL3F1ZXVlLmM6IFN0ZXBoYW5lIEx1c3NpZXIgPHN0ZXBoYW5lQG1hY2FkYW1pYW4uY29tPgoJVXNlIGdsb2JhbCBzeW5jaHJvbml6YXRpb24gb2JqZWN0cywgdG8gYmUgYWJsZSB0byB1c2UgaXQgaW4gZGlmZmVyZW50Cglwcm9jZXNzZXMgKG5vdCBvbmx5IHRoZSBwcm9jZXNzIHdoaWNoIGNyZWF0ZSB0aGUgc3luY2hybyBvYmplY3QpLgoKCSogd2luZG93cy9tZGkuYzogTm9ybWFuIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJU2V0IGh3bmRBY3RpdmVDaGlsZCB3aGVuIG1heGltaXppbmcgYSBtZGkgY2hpbGQgd2luZG93IGJlY2F1c2UgaXQgaXMKCW5vdCBzZXQgd2hlbiBtYXhpbWl6aW5nIGEgd2luZG93IG90aGVyIHRoYW4gdGhlIGFjdGl2ZSBjaGlsZC4KCgkqIGNvbnRyb2xzL21lbnUuYzogUGFzY2FsIExlc3NhcmQgPHBhc2NhbEBtYWNhZGFtaWFuLmNvbT4KCUNoYW5nZSB0aGUgR2V0TWVudUl0ZW1SZWN0IHRvIGNvbXBseSB3aXRoIHdpbmRvd3MgQVBJLgoKCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlLy5jdnNpZ25vcmUsIGluY2x1ZGUvTWFrZWZpbGUuaW46CglKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglDcmVhdGVkIGluY2x1ZGUvTWFrZWZpbGUuaW4gdG8gc2VwYXJhdGUgaGVhZGVyIGZpbGUgaW5zdGFsbGF0aW9uIGZyb20KCXRoZSB0b3AtbGV2ZWwgTWFrZWZpbGUuCgoJKiBvbGUvc3RnX2JpZ2Jsb2NrZmlsZS5jLCBvbGUvc3RnX3N0cmVhbS5jLCBvbGUvc3RvcmFnZTMyLmMsIG9sZS9zdG9yYWdlMzIuaDoKCVRodXkgTmd1eWVuIDx0aHV5QG1hY2FkYW1pYW4uY29tPgoJLSBGaXhlZCBhIHNtYWxsIGJsb2NrIGRlcG90IGJ1Zy4KCS0gSW1wbGVtZW50ZWQgY29udmVydGluZyBmcm9tIHNtYWxsIGJsb2NrcyB0byBiaWcgYmxvY2tzLgoJLSBWYWxpZGF0ZWQgZmlsZSBhdHRyaWJ1dGVzIGFuZCBmbGFncy4KCS0gRml4ZWQgYSBidWcgZm9yIGxhcmdlciBmaWxlcy4KCgkqIHJlc291cmNlcy8uY3ZzaWdub3JlOiBhZGRlZCBzeXNyZXNfTmwKCgkqIGdyYXBoaWNzL3gxMWRydi9vZW1iaXRtYXAuYywgaW5jbHVkZS9vbGUyLmgsIGluY2x1ZGUvb2xlaWRsLmgsIGluY2x1ZGUvc2hsZ3VpZC5oLCBpbmNsdWRlL3NobG9iai5oLCBpbmNsdWRlL3dpbmRlZi5oLCBpbmNsdWRlL3dpbmUvb2JqX2RyYWdkcm9wLmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBvbGUvb2xlMi5jLCByZWxheTMyL29sZTMyLnNwZWM6CglGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglJbXBsZW1lbnRlZCB0aGUgT0xFIERyYWcgYW5kIERyb3AgdGFyZ2V0IHJlZ2lzdHJhdGlvbiBtZWNoYW5pc20gYW5kCgl0aGUgRG9EcmFnRHJvcCBsb29wIHRvIHBlcmZvcm0gdGhlIERuRCBvcGVyYXRpb24uCgoJKiB3aW5kb3dzL21kaS5jLCBjb250cm9scy9tZW51LmMsIGluY2x1ZGUvbWVudS5oOgoJRnJhbmNvaXMgQm9pc3ZlcnQgPGZyYW5jb2lzQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgdGhlIFdJTjMxIExvb2sgbWRpIGJ1dHRvbnMgYW5kIGFsc28gc29tZSBkZWZpbmVzIGZvciB0aGUKCW1hZ2ljIG1lbnUgaXRlbXMuCgoJKiBkbGxzL2FkdmFwaTMyL01ha2VmaWxlLmluLCBkbGxzL2FkdmFwaTMyL2NyeXB0LmMsIGluY2x1ZGUvd2luY3J5cHQuaCwgcmVsYXkzMi9hZHZhcGkzMi5zcGVjOgoJSWFuIFNjaG1pZHQgPGlyc21hbkBpYWcubmV0PgoJQWRkZWQgZW50cmllcyBmb3IgbW9zdCBDcnlwdCogY2FsbHMuCglBZGRlZCBzdHViIGZvciBDcnlwdEFjcXVpcmVDb250ZXh0QS4gIFRoaXMgYWxsb3dzIFdpbjk4IEVYUExPUkVSLkVYRQoJdG8gZ2V0IGZhcnRoZXIuCgoJKiBjb250cm9scy9lZGl0LmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBbiBhcHAgbGVmdCBqdW5rIGluIHRoZSB1bmRvIGJ1ZmZlciBvZiBhbiBlZGl0IGNvbnRyb2wgdXBvbiBjcmVhdGlvbi4KCgkqIHdpbmRvd3Mvd2luLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQ2hhbmdlZCBTZXRQYXJlbnQzMiB0byBhZGhlcmUgdG8gV2luZG93cyBiZWhhdmlvdXIgKG1vc3RseSksCgl3aGljaCBzaG91bGQgYWxzbyBrZWVwIGl0IGZyb20gbGVhdmluZyBnYXJiYWdlIGFyb3VuZC4KCgkqIG9sZS9jb21wb2JqLmM6IFN5bHZhaW4gU3QuR2VybWFpbiA8c3lsdmFpbkBtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGF0aW9uIG9mIGEgc2ltcGxlIGxpbmtlZCBsaXN0IChzdGF0aWMpIHRoYXQgc3RvcmVzIGFuZCBjb3VudHMKCXJlZmVyZW5jZXMgdG8gQ09NIG9iamVjdHMuCgoJKiBpbmNsdWRlL29iamJhc2UuaCwgaW5jbHVkZS93dHlwZXMuaDoKCUZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJTWFrZSB0aGUgUkVGeHh4IHR5cGVzIGNvbnN0IGV2ZW4gaW4gQy4gQWxzbyBhZGQgRk1USUQuCgoJKiB3aW5kb3dzL3dpbnBvcy5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCURvbid0IGNhbGwgRVZFTlRfRHVtbXlNb3Rpb25Ob3RpZnkgZm9yIGhpZGRlbiB3aW5kb3dzLgoKCSogd2luZG93cy9tZXNzYWdlLmM6IFN0ZXBoYW5lIEx1c3NpZXIgPHN0ZXBoYW5lQG1hY2FkYW1pYW4uY29tPgoJRml4IHNvbWUgdGhyZWFkLXNhZmVuZXNzIHByb2JsZW0gd2hlbiBhY2Nlc3NpbmcgdGhlIHN5c3RlbSBtZXNzYWdlCglxdWV1ZS4KCgkqIHdpbmRvd3MvaW5wdXQuYywgaW5jbHVkZS93aW51c2VyLmgsIHJlbGF5MzIvdXNlcjMyLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUltcGxlbWVudGVkIE1hcFZpcnR1YWxLZXlFeCAodGlja2V0IDIxKS4KCUlnbm9yZSBrZXlib2FyZCBsYXlvdXQgZm9yIG5vdy4KCgkqIGluY2x1ZGUvb2JqaWRsLmgsIGluY2x1ZGUvd2luZS9vYmpfY2xpZW50c2VydmVyLmg6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCUFkZGVkIHRoZSBhY3R1YWwgaW50ZXJmYWNlIGRlZmluaXRpb25zIHRvIHRoZSBvYmpfY2xpZW50c2VydmVyLmgKCXNrZWxldG9uIGZpbGUuCgoJKiBkbGxzL250ZGxsL01ha2VmaWxlLmluLCBkbGxzL250ZGxsL250LmMsIGRsbHMvbnRkbGwvcmVnLmMsIGRsbHMvbnRkbGwvcnRsLmMsIHJlbGF5MzIvbnRkbGwuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJLSBkb2N1bWVudGVkIG1vc3Qgb2YgdGhlIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnMgaW4gbnQuYwoJLSBpbXBsZW1lbnRlZCBSdGxHZXREYWNsU2VjdXJpdHlEZXNjcmlwdG9yCgktIHN0dWJzIGZvciBOdEVudW1lcmF0ZUtleSwgTnRPcGVuU3ltYm9saWNMaW5rT2JqZWN0LCBOdFF1ZXJ5S2V5CgktIHN0dWJzIGZvciBOdFJhaXNlRXhjZXB0aW9uLCBSdGxSYWlzZUV4Y2VwdGlvbiAodGhpcyBib3RoIHdpbGwgY3Jhc2gpCgpGcmkgRmViIDEyIDE3OjQ3OjA3IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBkbGxzL2FkdmFwaTMyL3NlY3VyaXR5LmMsIGRsbHMvYWR2YXBpMzIvc2VydmljZS5jLCBmaWxlcy9kcml2ZS5jLCBtaXNjL3JlZ2lzdHJ5LmMsIHdpbjMyL25ld2Zucy5jLCB3aW5kb3dzL3VzZXIuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU21hbGwgZml4ZXMgdG8gY29tcGlsZSB3aXRoIHRoZSBoZWFkZXJzIChtb3N0bHkgbnQtc2VjdXJpdHkpLgoKCSogaW5jbHVkZS9udGRkay5oLCBpbmNsdWRlL250ZGVmLmgsIGluY2x1ZGUvbnRkbGwuaCwgaW5jbHVkZS93aW5iYXNlLmgsIGluY2x1ZGUvd2luZGVmLmgsIGluY2x1ZGUvd2lubnQuaCwgaW5jbHVkZS93aW5yZWcuaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTWFkZSBudC1yZWxhdGVkIHR5cGVzIGNvbXBhdGlibGUsIHRocm93IG91dCB3aW5lLXNwZWNpZmljIHR5cGVzLgoKCSogd2luZG93cy9tb3VzZS5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVVzZSBNT05JVE9SXy4uLiBpbnN0ZWFkIG9mIERFU0tUT1BfLi4uIHJvdXRpbmVzIHRvIGdldCBzY3JlZW4KCWRpbWVuc2lvbnM7IHRoZXNlIHdvcmsgYWxzbyB3aXRoIG5hdGl2ZSBVU0VSLgoKCSogd2luZG93cy9kZWZ3bmQuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglXTV9BQ1RJVkFURSBkZWZhdWx0IHByb2Nlc3Npbmcgc2hvdWxkIHNldCB3aW5kb3cgZm9jdXMuCglTaG91bGQgZml4IGZvY3VzIHByb2JsZW1zIGluIG5vbi1tYW5hZ2VkIG1vZGUuCgpUaHUgRmViIDExIDE2OjMyOjE3IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBvbGUvbmxzL25sZC5ubHMsIHJlc291cmNlcy9NYWtlZmlsZS5pbiwgcmVzb3VyY2VzL1RPRE8sIHJlc291cmNlcy9zeXNyZXMuYywgcmVzb3VyY2VzL3N5c3Jlc19ObC5yYywgQVVUSE9SUywgZG9jdW1lbnRhdGlvbi9sYW5ndWFnZXMsIGluY2x1ZGUvYXV0aG9ycy5oLCBpbmNsdWRlL29wdGlvbnMuaCwgbWlzYy9tYWluLmMsIG9sZS9vbGUybmxzLmM6CglLbGFhcyB2YW4gR2VuZCA8a2xhYXNAdmFuZ2VuZC5kZW1vbi5ubD4KCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBEdXRjaCBsYW5ndWFnZS4KCgkqIGRsbHMvY29tY3RsMzIvcHJvcHNoZWV0LmMsIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9wcnNodC5oLCBpbmNsdWRlL3NobG9iai5oOgoJQWRyaWFuIFRodXJzdG9uIDxhZHJpYW50QGNvcmVsLmNhPgoJWnlnbyBCbGF4ZWxsIDx6YmxheGVsbEBjb3JlbC5jYT4KCU1vdmUgcHJvcGVydHkgc2hlZXRzIGZyb20gY29tbWN0cmwuaCBpbnRvIGludG8gcHJzaHQuaC4KCgkqIGdyYXBoaWNzL2QzZGRldmljZXMuYywgZ3JhcGhpY3MvZDNkZXhlY3V0ZWJ1ZmZlci5jLCBncmFwaGljcy9kM2RsaWdodC5jLCBncmFwaGljcy9kM2RtYXRlcmlhbC5jLCBncmFwaGljcy9kM2R0ZXh0dXJlLmMsIGdyYXBoaWNzL2QzZHZpZXdwb3J0LmM6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUFkZGVkICdvYmpiYXNlLmgnIHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZ3MuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUJldHRlciBkZXRlY3Rpb24gb2YgWFNobSBlcnJvcnMgKHNob3VsZCBub3cgcnVuIG9uIHJlbW90ZSBkaXNwbGF5cykuCgoJKiBtdWx0aW1lZGlhL21tc3lzdGVtLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlcyBtaXhlckdldElEMTYvMzIgcHJvYmxlbXMvZXJyb3JzLgoKCSogb2xlL29sZW9iai5jLCBtdWx0aW1lZGlhL2RwbGF5LmM6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJSXNFcXVhbEdVSUQgaXMgZGVmaW5lZCBpbiAnaW5jbHVkZS93aW5lL29ial9iYXNlLmgnLiBBbGwgb3RoZXIKCWRlY2xhcmF0aW9ucyBtdXN0IHN1cnJlbmRlciBvciBwcmVwYXJlIHRvIGJlIG1ldCB3aXRoIGRlYWRseSBmb3JjZSA6LSkKCgkqIHJlbGF5MzIvb2xlMzIuc3BlYzogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglBZGRlZCBuZXcgZnVuY3Rpb25zIChmcm9tIFdpbjk4KQoJQWRkZWQgY29tbWVudHMgd2l0aCB0aGUgcGFyYW1ldGVyIHR5cGVzIGZvciBmdXR1cmUgdXNlIHdpdGggZGxsZ2x1ZQoKCSogZmlsZXMvZHJpdmUuYzogVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJU2V0IHRoZSBmbGFncyBmb3IgR2V0Vm9sdW1lSW5mb3JtYXRpb24zMkEuCgoJKiB3aW5kb3dzL3dpbi5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpbmRXaW5kb3cgZmFpbGVkIGZvciAzMiBiaXQgd2luZG93cyB3aXRoIHN0eWxlICE9IFdTX0NISUxELgoKV2VkIEZlYiAxMCAwNjo1Mjo1OCAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS9BdHRpYy9wcmludC5oLCBpbmNsdWRlL3dpbnNwb29sLmgsIG1pc2MvcHJpbnRkcnYuYywgZ3JhcGhpY3MvcHNkcnYvZHJpdmVyLmMsIGdyYXBoaWNzL3BzZHJ2L2VzY2FwZS5jLCBncmFwaGljcy9wc2Rydi9mb250LmMsIGdyYXBoaWNzL3BzZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL3BzZHJ2L2luaXQuYywgZ3JhcGhpY3MvcHNkcnYvcHBkLmMsIGdyYXBoaWNzL3BzZHJ2L3BzLmMsIGdyYXBoaWNzL3BzZHJ2L3RleHQuYzoKCVBhdWwgUXVpbm4gPHBhdWxxQGNvcmVsLmNhPgoJQWxiZXJ0IERlbiBIYWFuIDxhbGJlcnRkQGNvcmVsLmNhPgoJTW92ZXMgZmlsZXMgZnJvbSBwcmludC5oIHRvIHdpbnNwb29sLmggZm9yIGJldHRlciBTREsgaGVhZGVyIGNvbXBsaWFuY2UKCWZvciBXaW5lbGliIHByb2dyYW1zLgoKCSogaW5jbHVkZS9ob29rLmgsIGluY2x1ZGUvb2JqaWRsLmgsIGluY2x1ZGUvb2xlMi5oLCBpbmNsdWRlL3RjaGFyLmgsIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbmUvb2JqX2NsaWVudHNlcnZlci5oLCBpbmNsdWRlL3dpbmUvb2JqX2RhdGFvYmplY3QuaCwgaW5jbHVkZS93aW5lL29ial9zdG9yYWdlLmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgaW5jbHVkZS93aW51c2VyLmgsIGluY2x1ZGUvd3R5cGVzLmg6CglBbGJlcnQgRGVuIEhhYW4gPGFsYmVydGRAY29yZWwuY2E+CglBZHJpYW4gVGh1cnN0b24gPGF0aHVyc3RvQGNvcmVsLmNhPgoJUGF1bCBRdWlubiA8cGF1bHFAY29yZWwuY2E+CglaeWdvIEJsYXhlbGwgPHp5Z29iQGNvcmVsLmNhPgoJTWlzY2VsbGFuZW91cyBwYXRjaGVzIHRvIGhlYWRlciBmaWxlcy4gIEFsbCBvZiB0aGVzZSBhcmUgc3VwcG9zZWRseSB0aGVyZQoJdG8gaGVscCBidWlsZCBXaW5lbGliIGFwcGxpY2F0aW9ucy4KCgkqIGluY2x1ZGUvd2ludHlwZXMuaDogQWxiZXJ0IERlbiBIYWFuIDxhbGJlcnRkQGNvcmVsLmNhPgoJQWRyaWFuIFRodXJzdG9uIDxhdGh1cnN0b0Bjb3JlbC5jYT4KCVBhdWwgUXVpbm4gPHBhdWxxQGNvcmVsLmNhPgoJWnlnbyBCbGF4ZWxsIDx6eWdvYkBjb3JlbC5jYT4KCU1vcmUgdHlwZXMgd2UgbmVlZCBmb3IgY29tcGlsaW5nIFdpbmVsaWIvTUZDIGFwcGxpY2F0aW9ucy4KCgkqIGluY2x1ZGUvY29tbWN0cmwuaDogUGF1bCBRdWlubiA8cGF1bHFAY29yZWwuY2E+CglBZHJpYW4gVGh1cnN0b24gPGFkcmlhbnRAY29yZWwuY2E+CglNb3JlIHR5cGVzIGZvciBjb21tb24gY29udHJvbHMuICBOZWVkZWQgZm9yIFdpbmVsaWIuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGxsaW5rLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBpbmNsdWRlL3dpbmUvb2JqX2Jhc2UuaCwgbXVsdGltZWRpYS9kc291bmQuYywgb2xlL2NvbXBvYmouYywgb2xlL2lmcy5jOgoJRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglCZXR0ZXIgc2V0IG9mIG1hY3JvcyBmb3IgZGVmaW5pbmcgdGhlIENPTSBpbnRlcmZhY2VzLgoKCSogZGxscy9hZHZhcGkzMi9zZWN1cml0eS5jLCByZWxheTMyL2FkdmFwaTMyLnNwZWM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglUd28gQURWQVBJMzIgc3R1YnM6IEltcGVyc29uYXRlU2VsZjMyIGFuZCBBY2Nlc3NDaGVjazMyLiBTcGVsbGluZyBmaXhlcy4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJRml4ZWQgZGVidWcgb3V0cHV0IHRvIGZvbGxvdyAnLWRlYnVnbXNnJyBmbGFncy4KClR1ZSBGZWIgIDkgMTU6NDk6MzkgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG1zZG9zL2ludDIwLmMsIG9sZS9zYWZlYXJyYXkuYywgcmVsYXkzMi9idWlsdGluMzIuYywgc2VydmVyL2RldmljZS5jLCBzZXJ2ZXIvZmlsZS5jLCBzZXJ2ZXIvcGlwZS5jLCBzZXJ2ZXIvdGhyZWFkLmMsIHdpbmRvd3Mvd2luaGVscC5jOgoJTWljaGFlbCBWZWtzbGVyIDxtdmVrc2xlckB0ZWNodW5peC50ZWNobmlvbi5hYy5pbD4KCUFkZGVkIG1pc3NpbmcgaW5jbHVkZXMgdG8gYXZvaWQgd2FybmluZ3MvZXJyb3JzLgoKCSogaW5jbHVkZS9kaW5wdXQuaCwgaW5jbHVkZS9semV4cGFuZC5oLCBpbmNsdWRlL250ZGxsLmgsIGluY2x1ZGUvb2xlMi5oLCBpbmNsdWRlL3NoZWxsYXBpLmgsIGluY2x1ZGUvdmdhLmgsIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbmNvbi5oLCBpbmNsdWRlL3dpbmRlZi5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW5lL2tleWJvYXJkMTYuaCwgaW5jbHVkZS93aW5lL29ial9zdG9yYWdlLmgsIGluY2x1ZGUvd2luZS9zaGVsbDE2LmgsIGluY2x1ZGUvd2luZS93MzJza3JubC5oLCBpbmNsdWRlL3dpbmUvd2luYmFzZTE2LmgsIGluY2x1ZGUvd2luZS93aW5lc291bmQuaCwgaW5jbHVkZS93aW5lL3dpbmVzdHJpbmcuaCwgaW5jbHVkZS93aW5lL3dpbnVzZXIxNi5oLCBpbmNsdWRlL3dpbm5ldHdrLmgsIGluY2x1ZGUvd2lubmxzLmgsIGluY2x1ZGUvd2lubnQuaCwgaW5jbHVkZS93aW5yZWcuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBpbmNsdWRlL3dpbnVzZXIuaCwgaW5jbHVkZS93aW52ZXIuaDoKCU1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdGVjaHVuaXgudGVjaG5pb24uYWMuaWw+CglNb3ZlZCBldmVyeXRoaW5nIG91dCBvZiB3aW5kb3dzLmguCgoJKiBncmFwaGljcy93aW5nLmMsIGlmMTYzMi9nZGkuc3BlYywgaW5jbHVkZS9iaXRtYXAuaCwgaW5jbHVkZS9wYWxldHRlLmgsIGluY2x1ZGUvd2luZ2RpLmgsIG9iamVjdHMvcGFsZXR0ZS5jLCByZWxheTMyL2dkaTMyLnNwZWM6CglCcmFkIFBlcGVycyA8YnJhZEBsaW51eGNhbmFkYS5jb20+CglXaW5HIGZpeGVzLgoKCSogY29udHJvbHMvbWVudS5jLCBpbmNsdWRlL21lc3NhZ2UuaCwgaW5jbHVkZS9xdWV1ZS5oLCB3aW5kb3dzL2RpYWxvZy5jLCB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9ub25jbGllbnQuYywgd2luZG93cy9xdWV1ZS5jLCB3aW5kb3dzL3RpbWVyLmM6CglTdGVwaGFuZSBMdXNzaWVyIDxzdGVwaGFuZUBtYWNhZGFtaWFuLmNvbT4KCS1GaXhlZCBNRVNTQUdFIGZ1bmN0aW9ucyB0aGF0IHdlcmUgdGh1bmtpbmcgZG93biB0byAxNiBiaXRzIGltcGxlbWVudGF0aW9uLgoJU28gUGVla01lc3NhZ2UzMiwgR2V0TWVzc2FnZTMyLCBQb3N0TWVzc2FnZTMyLCBQb3N0VGhyZWFkTWVzc2FnZSBhcmUgZml4ZWQKCXdpdGggdGhpcyBwYXRjaC4gVW5pY29kZSB2ZXJzaW9uIG9mIHRob3NlIGZ1bmN0aW9ucyBpcyBjdXJyZW50bHkgb25seQoJY2FsbGluZyB0aGUgQVNDSUkgdmVyc2lvbi4KCS1GaXhlZCBxdWV1ZSBzaWduYWxpbmcgdXNpbmcgYSBuZXcgRVZFTlQgb2JqZWN0IGluIHRoZSBxdWV1ZSBmb3IgMzIgYml0cwoJdGhyZWFkLiBNc2dXYWl0Rm9yTXVsdGlwbGVPYmplY3QgaGFzIGJlZW4gZml4ZWQgYW5kIGlzIG5vdyBibG9ja2luZyBvbiB0aGUKCXJpZ2h0IEVWRU5ULgoKCSogb2JqZWN0cy9tZXRhZmlsZS5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUdldE1ldGFGaWxlQml0c0V4IHNob3VsZCB3b3JrIGluIGJ5dGVzIG5vdCB3b3Jkcy4KCgkqIGluY2x1ZGUvc2hsb2JqLmg6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJRGxsR2V0Q2xhc3NPYmplY3Qgc2hvdWxkIHRha2UgYSBSRUZDTFNJRCBub3QgYW4gTFBDTFNJRC4KCgkqIG9iamVjdHMvZGliLmMsIGluY2x1ZGUvZ2xvYmFsLmgsIG1lbW9yeS92aXJ0dWFsLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUNoYW5nZSBmYXVsdCBoYW5kbGVyICdhZGRyJyBhcmd1bWVudCB0byBMUENWT0lELgoKCSogZmlsZXMvZmlsZS5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUNhbGwgVklSVFVBTF9IYW5kbGVGYXVsdCBpZiByZWFkL3dyaXRlIHJldHVybnMgRUZBVUxULgoKCSogZGxscy9jb21jdGwzMi90cmVldmlldy5jOgoJQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCUZpeCB0eXBvIHRvIG1hcCBHZXRUZXh0RXh0ZW50UG9pbnQgdG8gdGhlIGNvcnJlY3QgMzJBIHZlcnNpb24uCgoJKiBkb2N1bWVudGF0aW9uL2RlYnVnZ2luZywgaW5jbHVkZS9wZWV4ZS5oLCBpbmNsdWRlL3dpbmNvbi5oLCBwcm9ncmFtcy9yZWd0ZXN0L3JlZ3Rlc3QuYywgcmVsYXkzMi9hZHZhcGkzMi5zcGVjLCB3aW5kb3dzL3gxMWRydi9tYWluLmMsIGRsbHMvYWR2YXBpMzIvc2VjdXJpdHkuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU29tZSBzbWFsbCBidWdmaXhlcywgYWRkZWQgbW9yZSBQRSByZWxvY2F0aW9uIHR5cGVzIChmb3IgV2luQ0UgbW9zdGx5KSwKCXNvbWUgY29uc29sZSBwcm90b3R5cGVzLCAtZGxsIGlzIHVzZWZ1bCBmb3Igd2luZWxpYiB0b28sIHJlZ3Rlc3QKCWNvbXBpbGUgZml4ZWQuCgoJKiBpbmNsdWRlL3dpbmUvd2ludXNlcjE2LmgsIGluY2x1ZGUvd2ludXNlci5oLCBvYmplY3RzL2N1cnNvcmljb24uYzoKCVBhdWwgUXVpbm4gPHBhdWxxQGNvcmVsLmNhPgoJR2V0Q3Vyc29yUG9zIGlzIGFjdHVhbGx5IGEgQk9PTC4KCgkqIGluY2x1ZGUvbW1zeXN0ZW0uaDogUGF1bCBRdWlubiA8cGF1bHFAY29yZWwuY2E+CglBZHJpYW4gVGh1cnN0b24gPGFkcmlhbnRAY29yZWwuY2E+CglNb3JlIHR5cGVzLCBDKysgcHJvdGVjdGlvbiwgYW5kIGEgdHlwbyBjb3JyZWN0aW9uIGZvciBtbXN5c3RlbS5oLgoKCSogaW5jbHVkZS9jb21tY3RybC5oOiBaeWdvIEJsYXhlbGwgPHVqMjJrZmJjQHVtYWlsLmZ1cnJ5dGVycm9yLm9yZz4KCU1vdmUgdGhlICNkZWZpbmUgb2YgRFVNTVlVTklPTk5BTUUqIHRvIGJlZm9yZSB0aGV5IGFyZSB1c2VkLgoJQWRkIGEgZGVmaW5pdGlvbiBmb3IgRFVNTVlVTklPTk5BTUUgKGFzIG9wcG9zZWQgdG8gRFVOMSwgRFVOMi4uLikuCglVc2UgdGhlIGNvcnJlY3QgV0lORUxJQl9OQU1FX0FXIG1hY3JvIGZvciBUVklURU0gYW5kIHJlbGF0ZWQgbmFtZXMuCglEZWZpbmUgIlRWX0lURU0iIHRvIGFncmVlIHdpdGggeW91LWtub3ctd2hvJ3MgZG9jdW1lbnRhdGlvbi4KCgkqIGRsbHMvdmVyc2lvbi9pbmZvLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU5VTEwgaXMgYSB2YWxpZCBhcmd1bWVudCBhcyBoYW5kbGUgZm9yIEdldEZpbGVWZXJzaW9uSW5mb1NpemUzMkEuCgoJKiBpbmNsdWRlL2RpbnB1dC5oLCB3aW5kb3dzL2RpbnB1dC5jOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglBZGRlZCBidWZmZXJlZCBkZXZpY2UgYWNjZXNzIGZvciBESW5wdXQncyBtb3VzZSBkcml2ZXIuCgoJKiBmaWxlcy9maWxlLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJV3JvbmcgYWNjZXNzIG9uIHNlcnZlciBoYW5kbGUgd2FzIGRlbWFuZGVkIChHRU5FUklDX1JFQUQgaW5zdGVhZCBvZgoJR0VORVJJQ19XUklURSkuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQmV0dGVyIGltcGxlbWVudGF0aW9uICh0YWtlcyBzdHJpbmdzIG9yIHJlcy1pZCdzIG5vdykuCgoJKiBkbGxzL3ZlcnNpb24vcmVzb3VyY2UuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBOVUxMIHBvaW50ZXIgY2hlY2sgZm9yIG91dHB1dCBwYXJhbWV0ZXJzLgoKCSogZGxscy9zaGVsbDMyL2Jyc2ZvbGRlci5jOgoJWnlnbyBCbGF4ZWxsIDx1ajIya2ZiY0B1bWFpbC5mdXJyeXRlcnJvci5vcmc+CglGaXhlZCB0d28gcG9pbnRlci9pbnRlZ2VyIG1pc21hdGNoIHdhcm5pbmdzLgoKCSogZG9jdW1lbnRhdGlvbi9jb25zb2xlOiBaeWdvIEJsYXhlbGwgPHVqMjJrZmJjQHVtYWlsLmZ1cnJ5dGVycm9yLm9yZz4KCVNwZWxsaW5nIGZpeGVzLgoKCSogY29uc29sZS94dGVybS5jLCB3aW4zMi9jb25zb2xlLmM6CglaeWdvIEJsYXhlbGwgPHVqMjJrZmJjQHVtYWlsLmZ1cnJ5dGVycm9yLm9yZz4KCXdpbmVfb3BlbnB0eSBpcyBub3QgcHJvcGVybHkgZGVjbGFyZWQgKGVpdGhlciBtaXNzaW5nIG9yIG1pc21hdGNoZWQKCWRlY2xhcmF0aW9ucykgaW4gYm90aCBwbGFjZXMgd2hlcmUgaXQgaXMgdXNlZC4KCgkqIGluY2x1ZGUvd2luZ2RpLmgsIG9iamVjdHMvZGliLmM6CglaeWdvIEJsYXhlbGwgPHVqMjJrZmJjQHVtYWlsLmZ1cnJ5dGVycm9yLm9yZz4KCUZpeCB0eXBlcyBvZiBHZXRESUJpdHMgZnVuY3Rpb25zIChMUFNUUiBzaG91bGQgYmUgTFBWT0lEKS4KCgkqIGdyYXBoaWNzL3gxMWRydi9kaWIuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJRml4ZXMgc2V2ZXJhbCBwcm9ibGVtcyB3aXRoIFNldERJQml0c1RvRGV2aWNlIGlmIHhTcmMgIT0gMC4KCVRoYW5rcyB0byBJYW4gU2NobWlkdCBmb3IgdGhlIGxvZ3MuCgoJKiB3aW5kb3dzL21kaS5jOiBGcmFuY29pcyBCb2lzdmVydCA8ZnJhbmNvaXNAbWFjYWRhbWlhbi5jb20+CglUaGUgc3lzdGVtcyBidXR0b25zIChtaW5pbWl6ZS9yZXN0b3JlL2Nsb3NlKSBub3cgYXBwZWFyIG9uIHRoZSBtZW51CgliYXIgb2YgbWRpIGFwcGxpY2F0aW9uLgoKCSogY29udHJvbHMvbWVudS5jOiBGcmFuY29pcyBCb2lzdmVydCA8ZnJhbmNvaXNAbWFjYWRhbWlhbi5jb20+CglJbXBsZW1lbnRlZCB0aGUgbWFnaWMgbWVudSBpdGVtcyBpZCdzIHVzZWQgYnkgd2luZG93cyB3aGVuIGluc2VydGluZwoJdGhlIG1pbmltaXplL21heGltaXplL2Nsb3NlIGJ1dHRvbnMgaW4gdGhlIG1lbnUgYmFyIG9mIGFuIGFwcGxpY2F0aW9uLgoKCSogb2JqZWN0cy9lbmhtZXRhZmlsZS5jOiBKYXNvbiBNY011bGxhbiA8am1jY0BvbnR2LmNvbT4KCUFkZHMgc3VwcG9ydCBmb3IgRU1SX1NUUkVUQ0hESUJJVFMgaW4gRU1Gcy4KCgkqIHByb2dyYW1zL2F2aXRvb2xzL2F2aXBsYXkuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCBpbWFnZSBzaXplIGFuZCBsaW5lIHNpemUsIGFkZGVkIDhiaXQgY29sb3IvcGFsZXR0ZSBoYW5kbGluZy4KCgkqIHRvb2xzL2J1Z19yZXBvcnQucGw6IEFkYW0gdGhlIEphenogR3V5IDxtYWdpY2JveEBiZXN0d2ViLm5ldD4KCUZpeGVkIGZvcm1hdHRpbmcgb2YgY29kZQoJTm93IGNoYW5nZXMgdG8gZGlyZWN0b3J5IG9mIHByb2dyYW0gdG8gYmUgcnVuIGJlZm9yZSBzdGFydGluZyB3aW5lCgoJKiB3aW5kb3dzL3F1ZXVlLmMsIHdpbmRvd3MvdXNlci5jLCBpbmNsdWRlL3VzZXIuaCwgc2NoZWR1bGVyL3RocmVhZC5jOgoJU3RlcGhhbmUgTHVzc2llciA8c3RlcGhhbmVAbWFjYWRhbWlhbi5jb20+CgktIENsZWFuZWQgdXAgdGhlIG1lc3NhZ2UgcXVldWUgd2hlbiBhIHRocmVhZCBleGl0IChidXQgbm90IHRoZSBwcm9jZXNzKS4KCS0gTW9kaWZpZWQgUVVFVUVfRGVsZXRlTXNnUXVldWUgdG8gZXhpdCBncmFjZWZ1bGx5ICh3aXRob3V0IGNyYXNoaW5nIFdpbmUpIGlmCgkgIHF1ZXVlIGxpbmsgbGlzdCBpcyBjb3JydXB0ZWQuCgoJKiBtdWx0aW1lZGlhL2Rzb3VuZC5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVNvdW5kcyB3ZXJlIGN1dCBvZmYgZHVlIHRvIGludGVnZXIgb3ZlcmZsb3cuIEZpeGVkLgoKCSogaW5jbHVkZS93aW5kb3dzeC5oOiBQYXVsIFF1aW5uIDxwYXVscUBjb3JlbC5jYT4KCUFkZGVkIHdpbmRvd3N4LmggZm9yIFdpbmVsaWIuCgpGcmkgRmViICA1IDE3OjQwOjQ3IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgcHJvZ3JhbXMvTWFrZWZpbGUuaW4sIHByb2dyYW1zL2NtZGxndHN0Ly5jdnNpZ25vcmUsIHByb2dyYW1zL2NtZGxndHN0L01ha2VmaWxlLmluLCBwcm9ncmFtcy9jbWRsZ3RzdC9jbWRsZ3IuaCwgcHJvZ3JhbXMvY21kbGd0c3QvY21kbGdyLnJjLCBwcm9ncmFtcy9jbWRsZ3RzdC9jbWRsZ3RzdC5jOgoJPGV3aWxsQG5jYWwudmVyaW8uY29tPgoJQWRkZWQgY29tbW9uIGRpYWxvZ3MgdGVzdCBwcm9ncmFtLgoKCSogaW5jbHVkZS9tZXNzYWdlLmgsIGluY2x1ZGUvcXVldWUuaCwgaW5jbHVkZS93aW4uaCwgaW5jbHVkZS93aW5wb3MuaCwgc2NoZWR1bGVyL3RocmVhZC5jLCB3aW5kb3dzL2ZvY3VzLmMsIHdpbmRvd3MvaW5wdXQuYywgd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3MvcXVldWUuYywgd2luZG93cy93aW4uYywgd2luZG93cy93aW5wb3MuYzoKCU5vZWwgQm9ydGh3aWNrIDxub2VsQG1hY2FkYW1pYW4uY29tPgoJQWRkZWQgbWFuYWdlbWVudCBhbmQgYWxsb2NhdGlvbiBvZiB0aGUgUEVSUVVFVUVEQVRBIHN0cnVjdHVyZS4KCgkqIGdyYXBoaWNzL2RkcmF3LmMsIGdyYXBoaWNzL3ZnYS5jLCBpbmNsdWRlL2RkcmF3Lmg6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCS0gYWRkZWQgYSBkdW1wIG9mIHRoZSBwYWxldHRlIGNyZWF0aW9uIGZsYWdzCgktIGNoYW5nZWQgcGFsZXR0ZSBjcmVhdGlvbiBjb2RlIGluIHZnYS5jIHRvIHByZXZlbnQgdXNlbGVzcyBlcnJvcgoJICBtZXNzYWdlCgoJKiBkb2N1bWVudGF0aW9uL3dpbmUubWFuLCBmaWxlcy9kcml2ZS5jLCB3aW5lLmluaToKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVVzZSB2ZmF0L3dpbjk1IGFzIGRlZmF1bHQuCgoJKiBpbmNsdWRlL3Zmdy5oLCBtdWx0aW1lZGlhL21zdmlkZW8uYywgcHJvZ3JhbXMvYXZpdG9vbHMvLmN2c2lnbm9yZSwgcHJvZ3JhbXMvYXZpdG9vbHMvTWFrZWZpbGUuaW4sIHByb2dyYW1zL2F2aXRvb2xzL2F2aWluZm8uYywgcHJvZ3JhbXMvYXZpdG9vbHMvYXZpcGxheS5jLCByZWxheTMyL2J1aWx0aW4zMi5jLCByZWxheTMyL21zdmZ3MzIuc3BlYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJVXBkYXRlZCBtc3ZpZGVvIC8gdmZ3LmgsIHVzZSBidWlsdGluIG1zdmZ3MzIuZGxsIGJ5IGRlZmF1bHQsIGFkZGVkCglhdmlpbmZvIGFuZCBhdmlwbGF5IHByb2dyYW1zLgoKCSogd2luMzIvY29uc29sZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNvbnRpbnVlZCBoYWNrIHRvIHdpbjMyL2NvbnNvbGUuYywgc28gdGhhdCB0aGUgSURBIFBybyBEaXNhc3NlbWJsZXIKCXdvcmtzIGFnYWluLiBOZWVkcyBtdWNoIG1vcmUgd29yayBob3dldmVyLgoKCSogb2xlL3N0b3JhZ2UzMi5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUluY2x1ZGUgb2JqYmFzZS5oIGZvciBDb1Rhc2tNZW0qIHByb3RvdHlwZXMgKG9yIHdlIGdldCBXSU5BUEkKCXByb2JsZW1zKS4KCgkqIG9sZS9zdG9yYWdlMzIuaDogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBtaXNzaW5nIFVMT05HIHRvIHN0YXRpYyBjb25zdCBPRkZTRVRfeHguCgpUaHUgRmViICA0IDE2OjQ1OjQwIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBkb2N1bWVudGF0aW9uL3dpbmUubWFuOiBKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglWYXJpb3VzIG1hbnBhZ2UgdXBkYXRlcywgaW5jbHVkaW5nIHRoZSBpbmNvcnJlY3Qgc3RhdGVtZW50IGFib3V0IGdsaWJjCglhbmQgY2xvbmUoKS4KCgkqIGRvY3VtZW50YXRpb24vZGVidWdnaW5nOiBKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglGaXggcG9pbnRlciB0byB0aGUgV2luZG93cyBEaXNhc3NlbWJsZXIgMzIuICBUaGFua3MgdG8gSGVyYmVydAoJUm9zbWFuaXRoIDxoZXJwQHdpbGRzYXUuaWR2LnVuaS1saW56LmFjLmF0PiBmb3Igc3VnZ2VzdGluZyB0aGlzLgoKCSogZGxscy9tc2FjbTMyL2RyaXZlci5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQW5vdGhlciB1c2FnZSBvZiBub24tcG9ydGFibGUgZnVuY3Rpb25zLi4uCgoJKiBtc2Rvcy9kb3NtZW0uYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVNvbWUgdmFsdWVzIG9mIHBCaW9zRGF0YSBhZGRlZC9maXhlZC4KCgkqIG9iamVjdHMvcGFsZXR0ZS5jLCB3aW5kb3dzL2NsaXBib2FyZC5jLCB3aW5kb3dzL2RjZS5jLCB3aW5kb3dzL2Rpc3BsYXkuYywgd2luZG93cy9ldmVudC5jLCB3aW5kb3dzL2tleWJvYXJkLmMsIHdpbmRvd3MvbW91c2UuYywgd2luZG93cy9zeXNtZXRyaWNzLmMsIHdpbmRvd3MvdXNlci5jLCB3aW5kb3dzL3dpbi5jLCB3aW5kb3dzL3dpbnBvcy5jLCBjb250cm9scy9kZXNrdG9wLmMsIGNvbnRyb2xzL3dpZGdldHMuYywgZGVidWdnZXIvZGJnLnksIGdyYXBoaWNzL2RkcmF3LmMsIGdyYXBoaWNzL3BhaW50aW5nLmMsIGdyYXBoaWNzL3dpbmcuYywgaW5jbHVkZS9iaXRtYXAuaCwgaW5jbHVkZS9jb2xvci5oLCBpbmNsdWRlL2RkcmF3LmgsIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgaW5jbHVkZS9kZXNrdG9wLmgsIGluY2x1ZGUvZGlzcGxheS5oLCBpbmNsdWRlL21haW4uaCwgaW5jbHVkZS9vcHRpb25zLmgsIGluY2x1ZGUvdHR5ZHJ2LmgsIGluY2x1ZGUvd2luLmgsIGluY2x1ZGUveDExZHJ2LmgsIG1pc2MvbWFpbi5jLCBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2NvbG9yLmMsIG9iamVjdHMvZGMuYywgb2JqZWN0cy9kaWIuYywgb2JqZWN0cy9nZGlvYmouYzoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJTW92ZWQgc29tZSBtb3JlIGNvZGUgdG8gdGhlIFgxMSBkcml2ZXIuCgoJKiB3aW5kb3dzL3R0eWRydi9NYWtlZmlsZS5pbiwgd2luZG93cy90dHlkcnYvY2xpcGJvYXJkLmMsIHdpbmRvd3MvdHR5ZHJ2L2Rlc2t0b3AuYywgd2luZG93cy90dHlkcnYvZXZlbnQuYywgd2luZG93cy90dHlkcnYvaW5pdC5jLCB3aW5kb3dzL3R0eWRydi9rZXlib2FyZC5jLCB3aW5kb3dzL3R0eWRydi9tYWluLmMsIHdpbmRvd3MvdHR5ZHJ2L21vbml0b3IuYywgd2luZG93cy90dHlkcnYvbW91c2UuYywgd2luZG93cy90dHlkcnYvd25kLmM6CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCVRUWSBkcml2ZXIgY2hhbmdlcy4KCgkqIHdpbmRvd3MveDExZHJ2L01ha2VmaWxlLmluLCB3aW5kb3dzL3gxMWRydi9jbGlwYm9hcmQuYywgd2luZG93cy94MTFkcnYvZGVza3RvcC5jLCB3aW5kb3dzL3gxMWRydi9ldmVudC5jLCB3aW5kb3dzL3gxMWRydi9pbml0LmMsIHdpbmRvd3MveDExZHJ2L2tleWJvYXJkLmMsIHdpbmRvd3MveDExZHJ2L21haW4uYywgd2luZG93cy94MTFkcnYvbW9uaXRvci5jLCB3aW5kb3dzL3gxMWRydi9tb3VzZS5jLCB3aW5kb3dzL3gxMWRydi93bmQuYywgZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jLCBncmFwaGljcy94MTFkcnYvYml0bWFwLmMsIGdyYXBoaWNzL3gxMWRydi9icnVzaC5jLCBncmFwaGljcy94MTFkcnYvY2xpcHBpbmcuYywgZ3JhcGhpY3MveDExZHJ2L2RpYi5jLCBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYywgZ3JhcGhpY3MveDExZHJ2L2luaXQuYywgZ3JhcGhpY3MveDExZHJ2L29iamVjdHMuYywgZ3JhcGhpY3MveDExZHJ2L29lbWJpdG1hcC5jLCBncmFwaGljcy94MTFkcnYvcGVuLmMsIGdyYXBoaWNzL3gxMWRydi90ZXh0LmMsIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglYMTEgZHJpdmVyIGNoYW5nZXMuCgoJKiB0c3gxMS90c194Zjg2ZGdhLmMsIHRzeDExL3RzX3hmODZ2bW9kZS5jLCB0c3gxMS90c194bGliLmMsIHRzeDExL3RzX3hwbS5jLCB0c3gxMS90c194cmVzb3VyY2UuYywgdHN4MTEvdHNfeHNobS5jLCB0c3gxMS90c194dXRpbC5jLCBpbmNsdWRlL3RzX3hmODZkZ2EuaCwgaW5jbHVkZS90c194Zjg2dm1vZGUuaCwgaW5jbHVkZS90c194bGliLmgsIGluY2x1ZGUvdHNfeHBtLmgsIGluY2x1ZGUvdHNfeHJlc291cmNlLmgsIGluY2x1ZGUvdHNfeHNobS5oLCBpbmNsdWRlL3RzX3h1dGlsLmgsIHRvb2xzL21ha2VfWDExd3JhcHBlcnM6CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCU5vbi1YMTEgY29tcGlsZSBmaXggZm9yIGdlbmVyYXRlZCBjb2RlLgoKCSogaW5jbHVkZS9tb25pdG9yLmgsIHdpbmRvd3MvbXVsdGltb24uYzoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJSW1wbGVtZW50YXRpb24gb2YgdGhlIG5ldyBtb25pdG9yIGFic3RyYWN0aW9uLgoKCSogZ3JhcGhpY3MvdHR5ZHJ2Ly5jdnNpZ25vcmUsIGdyYXBoaWNzL3R0eWRydi9NYWtlZmlsZS5pbiwgZ3JhcGhpY3MvdHR5ZHJ2L2luaXQuYywgTWFrZWZpbGUuaW46CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCU5ldyBUVFkgZHJpdmVyIGZvciBHREkuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9hY2NvbmZpZy5oLCBpbmNsdWRlL2NvbmZpZy5oLmluOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CgktIEFkZGVkIHRoZSBncmFwaGljcy90dHlkcnYgZGlyZWN0b3J5LgoJLSBEb24ndCBzZWFyY2ggZm9yIHJlZW50cmFudCBYIHdoZW4gWCBkb2Vzbid0IGV4aXN0LgoJLSBBZGRlZCBjb25maWcgb3B0aW9ucyBIQVZFX0xJQlhYUE0KCS0gQWRkZWQgY2hlY2tzIGlmIHRoZSBoZWFkZXIgZmlsZXMgYWxzbyBleGlzdCBmb3Igc29tZSBsaWJyYXJpZXMKClR1ZSBGZWIgIDIgMTY6MTQ6MjMgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGRsbHMvc2hlbGwzMi9icnNmb2xkZXIuYywgZ3JhcGhpY3MvZDNkY29tbW9uLmMsIGdyYXBoaWNzL2QzZGRldmljZXMuYywgZ3JhcGhpY3MvZDNkZXhlY3V0ZWJ1ZmZlci5jLCBncmFwaGljcy9kM2RsaWdodC5jLCBncmFwaGljcy9kM2RtYXRlcmlhbC5jLCBncmFwaGljcy9kM2R0ZXh0dXJlLmMsIGdyYXBoaWNzL2QzZHZpZXdwb3J0LmMsIGluY2x1ZGUvaW50ZXJmYWNlcy5oLCBvbGUvc2FmZWFycmF5LmMsIG9sZS9zdGdfYmlnYmxvY2tmaWxlLmMsIG9sZS9zdGdfc3RyZWFtLmMsIG9sZS9zdG9yYWdlMzIuYzoKCUZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJUmVwbGFjZWQgcmVmZXJlbmNlcyB0byBpbnRlcmZhY2VzLmggYnkgd2luZS9vYmpfeHh4LmggaGVhZGVycyBpbnN0ZWFkCglzaW5jZSB0aGVzZSBoZWFkZXJzIGFscmVhZHkgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGRlZmluaXRpb25zLgoKCSogaW5jbHVkZS9tc2Rvcy5oLCBtc2Rvcy9BdHRpYy9jZHJvbS5jLCBtc2Rvcy9NYWtlZmlsZS5pbiwgbXNkb3MvaW50MmYuYzoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJUmVtb3ZlZCByZWZlcmVuY2VzIHRvIG9ic29sZXRlIG1zZG9zL2Nkcm9tLmMgZmlsZS4KCU1ha2UgdXNlIG9mIG5ldyBXaW5lIGludGVybmFsIENEIFJPTSBpbnRlcmZhY2UuCgoJKiBtdWx0aW1lZGlhL21jaWNkYS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUZpeGVkIHRyYWNrcyBpbmRleGluZyBpbiBtY2ljZGEuYwoJTWFrZSB1c2Ugb2YgbmV3IFdpbmUgaW50ZXJuYWwgQ0QgUk9NIGludGVyZmFjZS4KCgkqIGluY2x1ZGUvY2Ryb20uaCwgbWlzYy9NYWtlZmlsZS5pbiwgbWlzYy9jZHJvbS5jOgoJRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglOZXcgV2luZSBpbnRlcm5hbCBpbnRlcmZhY2UgZm9yIGhhbmRsaW5nIENEIFJvbSAoZXNwZWNpYWxseSBhdWRpbyBDRAoJUk9NKS4KCgkqIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS90cmVldmlldy5oLCBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmM6CglaeWdvIEJsYXhlbGwgPHVqMjJrZmJjQHVtYWlsLmZ1cnJ5dGVycm9yLm9yZz4KCUNoYW5nZSBhIGZldyB0eXBlcyB0byBtYXRjaCB5b3Uta25vdy13aG8ncyBkZWNsYXJhdGlvbnMuCglIVFJFRUlURU0gaXMgYSBzdHJ1Y3QgX1RSRUVJVEVNIEZBUioKCUdldERJQml0cyBwYXNzZXMgYSBMUFZPSUQgZm9yIHRoZSBiaXRtYXAgZGF0YSwgbm90IExQU1RSLgoJQWRqdXN0bWVudCBvZiBXaW5lIEMgY29kZSB0byBtYXRjaCB0aGUgbmV3IHR5cGVzIGluY2x1ZGVkLgoKCSogbWlzYy9semV4cGFuZC5jOiBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlZCBHRVRfTFpfU1RBVEUgbWFjcm8uCgoJKiBncmFwaGljcy9kM2RfcHJpdmF0ZS5oLCBncmFwaGljcy9kM2R0ZXh0dXJlLmMsIGdyYXBoaWNzL2RkcmF3LmMsIGluY2x1ZGUvZDNkLmgsIGluY2x1ZGUvZGRyYXcuaDoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQWRkZWQgc3R1YnMgZm9yIG5ldyBEaXJlY3REcmF3NCBhbmQgRGlyZWN0RHJhd1N1cmZhY2U0IG1ldGhvZHMuCgoJKiB0b29scy93cmMvd3JjLmgsIHRvb2xzL3dyYy93cmN0eXBlcy5oLCB0b29scy93cmMvQ0hBTkdFUzoKCUFsYmVydCBkZW4gSGFhbiA8YWxiZXJ0ZEBjb3JlbC5jYT4KCUZpeGVkIHdyb25nIG9yZGVyIG9mIHJlc19pY28gYW5kIHJlc19ibXAgd2hpY2ggbXVzdCBiZSBpbiBSVF94eHggb3JkZXIuCgoJKiBkbGxzL3ZlcnNpb24vcmVzb3VyY2UuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglyZXNsZW4gY291bGQgYmUgdXNlZCB1bmluaXRpYWxpc2VkIGluIEdldEZpbGVSZXNvdXJjZTMyIChmaXhlcyBzb21lCglzdHJhbmdlIFZlclF1ZXJ5VmFsdWUgY3Jhc2hlcykuCgoJKiBvbGUvbmxzL3N2ZS5ubHM6IEphbiBELiA8SmFuLkRqYXJ2QG1ib3gyMDAuc3dpcG5ldC5zZT4KCUFkZGVkIGRlZmluaXRpb24gZm9yIExPQ0FMRV9TR1JPVVBJTkcsIExPQ0FMRV9TTU9OR1JPVVBJTkcgYW5kCglMT0NBTEVfSUlOVExDVVJSRElHSVRTLgoKCSogbWVtb3J5L3NlbGVjdG9yLmMsIHJlbGF5MzIva2VybmVsMzIuc3BlYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBQcmVzZXJ2ZSBFQVggaW4gVW5NYXBTTEZpeEFycmF5KCkuCgoJKiBkbGxzL2NvbWN0bDMyL2NvbWN0bDMydW5kb2MuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVzIGxpdHRsZSBwb2ludGVyIGJ1ZyBpbiBEUEFfRGVsZXRlUHRyKCkuCgoJKiBpZjE2MzIva2VybmVsLnNwZWMsIG1lbW9yeS9zdHJpbmcuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgS0VSTkVMLjQzNCAoVW5pY29kZVRvQW5zaSkuCgoJKiBmaWxlcy9kcml2ZS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUdldERpc2tGcmVlU3BhY2VFeDMyQSBjYW4gZ2V0IG51bGwgcG9pbnRlcnMgYW5kIHN0aWxsIG5vdCBjcmFzaC4KCgkqIGdyYXBoaWNzL3BzZHJ2L2RyaXZlci5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglDbGVhciB1cCBhcmdzIHRvIFBTRFJWX0FkdmFuY2VkU2V0dXBEaWFsb2cuCgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJUmVkdWNlIE1BWF9GT05UX1NJWkUgdG8gMTAwMC4KClN1biBKYW4gMzEgMTk6MDQ6MzEgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbjMyL2NvbnNvbGUuYywgaW5jbHVkZS9zZXJ2ZXIuaCwgaW5jbHVkZS9zZXJ2ZXIvb2JqZWN0LmgsIGluY2x1ZGUvc2VydmVyL3JlcXVlc3QuaCwgbG9hZGVyL25lL21vZHVsZS5jLCByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHNlcnZlci9jb25zb2xlLmMsIHNlcnZlci9yZXF1ZXN0LmMsIHNlcnZlci90cmFjZS5jOgoJQWRkZWQgaW5wdXQgcXVldWUgdG8gc2VydmVyLXNpZGUgY29uc29sZSBvYmplY3QsCglyZWFkL3dyaXRlX2NvbnNvbGVfaW5wdXQgcmVxdWVzdHMsIGFuZCB1c2UgdGhlbSBmb3IKCVJlYWQvV3JpdGVDb25zb2xlSW5wdXQuCgoJKiBzY2hlZHVsZXIvY2xpZW50LmM6IEdlb2ZmIENsYXJlIDxnd2NAcm9vdC5jby51az4KCUZpeCB0byBhbGxvdyBmb3IgcmVjdm1zZygpIHJldHVybmluZyBsZXNzIGRhdGEgdGhhbiBpcyBuZWVkZWQuCgoJKiBpbmNsdWRlL3Rvb2xoZWxwLmgsIGluY2x1ZGUvd2luZG93cy5oOgoJQXR0ZW1wdCBhdCBmaXhpbmcgdGhlIE1BWF9QQVRIIG11bHRpcGxlIGRlZmluaXRpb24gcHJvYmxlbS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEphbiAzMSAxMDoxMzo0NCAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS9tb2R1bGUuaCwgbG9hZGVyL25lL3Jlc291cmNlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU1vZGlmeSBORV9GaW5kVHlwZVNlY3Rpb24gYW5kIE5FX0ZpbmRSZXNvdXJjZUZyb21UeXBlIHNvIGFzIHRvIGJlCgl1c2FibGUgYnkgdGhlIFZFUlNJT04gY29kZS4KCgkqIGluY2x1ZGUvcGVfaW1hZ2UuaCwgbG9hZGVyL3BlX3Jlc291cmNlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkZGVkIEdldFJlc0RpckVudHJ5QSBmb3IgdXNlIGJ5IHRoZSBWRVJTSU9OIGNvZGUuCgoJKiBtaXNjL0F0dGljL3Zlci5jLCBtaXNjL01ha2VmaWxlLmluOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglSZW1vdmVkIG9sZCBWRVIuRExMIGNvZGUuCgoJKiBkbGxzL3ZlcnNpb24vLmN2c2lnbm9yZSwgZGxscy92ZXJzaW9uL01ha2VmaWxlLmluLCBkbGxzL3ZlcnNpb24vaW5mby5jLCBkbGxzL3ZlcnNpb24vaW5zdGFsbC5jLCBkbGxzL3ZlcnNpb24vcmVzb3VyY2UuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50YXRpb24gb2YgVkVSU0lPTi5ETEwuIEJhc2VkIG9uIG9sZCBtaXNjL3Zlci5jLgoJLSBBY2Nlc3NpbmcgUEUgdmVyc2lvbiBpbmZvIHJlc291cmNlcyBzaG91bGQgd29yayBjb3JyZWN0bHkgbm93LgoJLSBGaXhlZCBtZW1vcnkgbGVha3MuCgktIENsZWFuIHNlcGFyYXRpb24gb2YgMTYtIGFuZCAzMi1iaXQgcGFydHMuCgktIE1pbm9yIGJ1Z2ZpeGVzLgoKCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkbGxzL01ha2VmaWxlLmluOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGQgbmV3IHN1YmRpcmVjdG9yaWVzIGRsbHMvdmVyIGFuZCBkbGxzL3ZlcnNpb24uCgoJKiBpZjE2MzIvdmVyLnNwZWMsIGRsbHMvdmVyLy5jdnNpZ25vcmUsIGRsbHMvdmVyL01ha2VmaWxlLmluLCBkbGxzL3Zlci92ZXIxNi5jLCBpbmNsdWRlL3Zlci5oOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRhdGlvbiBvZiBWRVIuRExMLiBUaHVua3MgdXAgdG8gVkVSU0lPTi5ETEwuCgoJKiBtaXNjL2xzdHIuYzogUGFzY2FsIEN1b3EgPGN1b3FAdmlzYW4uaW5yaWEuZnI+CglJc0NoYXJBbHBoYTMyQTogdXNlIGxvb2stdXAgdGFibGUgZnJvbSBvbGUybmxzLmMuCgoJKiBvbGUvb2xlMm5scy5jOiBQYXNjYWwgQ3VvcSA8Y3VvcUB2aXNhbi5pbnJpYS5mcj4KCUxDTWFwU3RyaW5nMzJBOiBJbXBsZW1lbnRlZCBmbGFncyBOT1JNX0lHTk9SRU5PTlNQQUNFIGFuZAoJTk9STV9JR05PUkVTWU1CT0xTIGluIHN0cmluZyBtYXBwaW5nIG1vZGUuCgoJKiB3aW5kb3dzL3gxMWRydi93bmQuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglDcmVhdGUgWCB3aW5kb3cgZm9yIGNoaWxkIHdpbmRvd3MgcmVwYXJlbnRlZCB0byBiZSB0b3AgbGV2ZWwgd2luZG93cy4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbHBhdGguYywgaW5jbHVkZS9zaGVsbC5oLCByZWxheTMyL3NoZWxsMzIuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YiBmb3IgUGF0aFF1YWxpZnkzMltBfFddLgoKCSogZ3JhcGhpY3MvZDNkbWF0ZXJpYWwuYywgZ3JhcGhpY3MvZGRyYXcuYzoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQmFicmlhbiBWaWt0b3IgPHZAdWx5c3Nlcy5zY2guYm1lLmh1PgoJLSBhZGRlZCBzdXBwb3J0IGZvciBDb2xvcktleWluZyBkdXJpbmcgYmxpdHMKCS0gbWlzY2VsbGFuZW91cyBmaXhlcwoKCSogZGxscy9udGRsbC9ydGwuYywgaW5jbHVkZS9udGRsbC5oLCByZWxheTMyL250ZGxsLnNwZWM6CglBbGV4IEtvcm9ia2EgPGtvcm9ia2FAZ2FsYXh5LmFtcy5zdW55c2IuZWR1PgoJQWRkZWQgYW4gaW1wbGVtZW50YXRpb24gb2YgTVJTVyBsb2Nrcy4KCgkqIG1zZG9zL2ludDIxLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQWRkZWQgbWlzc2luZyBpbmNsdWRlcyAodGhlIFBTUCBoYW5kbGluZyB3YXMgaW5jb3JyZWN0LCBhcyB0aGUKCU1aX1NVUFBPUlRFRCBkZWZpbml0aW9uIHdhcyBtaXNzaW5nKS4gQWRkZWQgYSBzaW1wbGUgaGFuZGxlciBmb3IKCWRpcmVjdCBjb25zb2xlIGlucHV0LCB3aGljaCBuZWVkcyB0byBiZSBpbXByb3ZlZC4KCgkqIGNvbnNvbGUvdHR5LmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJU21hbGwgZml4LgoKCSogc2NoZWR1bGVyL3N5bmNocm8uYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglMaXN0IGhhbmRsZXMgV2FpdEZvck11bHRpcGxlT2JqZWN0cyBpcyB3YWl0aW5nIGZvciB3aGVuIHJ1bm5pbmcgd2l0aAoJLWRlYnVnbXNnICt3aW4zMi4KCgkqIGRsbHMvYWR2YXBpMzIvc2VjdXJpdHkuYywgcmVsYXkzMi9hZHZhcGkzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTdHViIGZvciBHZXRTZWN1cml0eURlc2NyaXB0b3JDb250cm9sLgoKCSogcmVsYXkzMi91c2VyMzIuc3BlYywgd2luZG93cy91c2VyLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN0dWIgZm9yIEdldFVzZXJPYmplY3RTZWN1cml0eS4KCgkqIG1pc2MvcmVnaXN0cnkuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglJbXBsZW1lbnRlZCBoYW5kbGluZyBvZiBSRUdfTVVMVElfU1ogYW5kIGZpeGVkIHNtYWxsIGJ1ZyBpbgoJUmVnU2V0VmFsdWUuCgoJKiB3aW5kb3dzL3dpbnByb2MuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglFdmVyeSBFTV9HRVRMSU5FIHNlbmQgYmV0d2VlbiBhIDMyVyB0byBhIDMyQSB3aW5kb3cgcmV0dXJuZWQKCWluY29tcGxldGUgdmFsdWVzIGJlZm9yZSAodGhlIGZpcnN0IDIgY2hhcnMgd2hlcmUgY3V0IGF3YXkpLgoKCSogd2luZG93cy93aW5wb3MuYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglGaXggdHlwbyBpbiBTZXRXaW5kb3dQb3MzMi4KClNhdCBKYW4gMzAgMTU6NTU6MjggMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvYnVpbHRpbjMyLmgsIG1pc2MvbWFpbi5jLCByZWxheTMyL2J1aWx0aW4zMi5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglFbmFibGUvZGlzYWJsZSByZWxheTMyIGRlYnVnZ2luZyBvbiB0aGUgZmx5LiBTdGFydCBhcHAgd2l0aAoJLWRlYnVnbXNnICtyZWxheSBvciB3YXJuK3JlbGF5LiBTdWdnZXN0ZWQgYnkgSnVlcmdlbiBTY2htaWVkLgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGdyYXBoaWNzL2QzZF9wcml2YXRlLmgsIGluY2x1ZGUvYWNjb25maWcuaCwgaW5jbHVkZS9jb25maWcuaC5pbiwgaW5jbHVkZS9kM2QuaCwgaW5jbHVkZS93aW5lX2dsLmg6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUFkZGVkIGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgTWVzYSdzIGhlYWRlciBmaWxlcy4KCgkqIG11bHRpbWVkaWEvYXVkaW8uYywgbXVsdGltZWRpYS9kc291bmQuYzoKCUFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUZpeGVkIGVycm9yIG1lc3NhZ2VzLgoKCSogbWlzYy9jb21tZGxnLmM6IEJlcm5kIEhlcmQgPGhlcmRAaGVyZHNvZnQuY29tPgoJVXNlIHByb3BlciAxNi0+MzIgbWVzc2FnZSBjb252ZXJzaW9uIGluIEZJTEVETEdfQ2FsbFdpbmRvd1Byb2MuCgoJKiB3aW5kb3dzL3gxMWRydi93bmQuYzogQmVybmQgSGVyZCA8aGVyZEBoZXJkc29mdC5jb20+CglTZXRQYXJlbnQgc2hvdWxkIGxpbmsgdGhlIHdpbmRvdyBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QuCgoJKiB3aW5kb3dzL3dpbnBvcy5jOiBORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCUluIFdpbmRvdyBTZXRXaW5kb3dQb3Mgd2l0aCBTV1BfSElERVdJTkRPVyBkb2VzIG5vdCByZW1vdmUKCXRoZSBmb2N1cyBmcm9tIHRoZSBmb2N1cyB3aW5kb3c7IFNob3dXaW5kb3cgd2l0aCBTV19ISURFIGRvZXMuCglTbyBtb3ZlIHRoZSBjb2RlIHRoYXQgZG9lcyB0aGlzIGZyb20gU2V0V2luZG93UG9zIHRvIFNob3dXaW5kb3cuCgoJKiBtZW1vcnkvc3RyaW5nLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQ2hlY2sgZm9yIE5VTEwgaW4gbHN0cmNweSogKFdpbmRvd3MgdXNlcyByZWFsIGV4Y2VwdGlvbiBoYW5kbGVycykuCgoJKiBNYWtlZmlsZS5pbjogSmFtZXMgSnVyYW4gPGp1cmFuQGNzZS5wc3UuZWR1PgoJRG9uJ3QgaW5zdGFsbCBpbmNsdWRlIGZpbGVzIHdoZW4gLS1kaXNhYmxlLWxpYiBpcyB1c2VkLgoKCSogcmVsYXkzMi93aW5tbS5zcGVjOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQWRkZWQgV0lOTU0gam95KiAuc3BlYyBlbnRyaWVzLgoKCSogbXNkb3MveG1zLmM6IEFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVhNUyBmaXguCgoJKiBtc2Rvcy9kb3NtZW0uYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVNwZWxsaW5nIGZpeC4KCgkqIFJFQURNRTogQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRG9jIHVwZGF0ZS4KCgkqIGluY2x1ZGUvbWlzY2VtdS5oLCBtc2Rvcy9pbnQxMC5jLCBtc2Rvcy9pbnQyMS5jLCBtc2Rvcy9pbnRlcnJ1cHRzLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglTb21lIGludGVycnVwdCBlbmhhbmNlbWVudHMuCgoJKiBtc2Rvcy9pb3BvcnRzLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglpbXBsZW1lbnRlZCB0aW1lciBsYXRjaGluZwoJdHJhY2UgbWVzc2FnZSBmaXgKCXRlbXBvcmFyeSAiZml4IiBmb3IgTGludXgncyBjb2Fyc2UgdGltZXIgcmVzb2x1dGlvbgoKCSogaWYxNjMyL2NvbXBvYmouc3BlYywgaW5jbHVkZS9vYmpiYXNlLmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgb2xlL2NvbXBvYmouYywgb2xlL29sZTIuYywgcmVsYXkzMi9vbGUzMi5zcGVjOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgdGhlIHN0YXJ0dXAtc2h1dGRvd24gbWVjaGFuaXNtIGZvciB0aGUgQ09NIHN1YnN5c3RlbS4KCUltcGxlbWVudGVkIHRoZSBDbGFzcyBvYmplY3QgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbS4KCgkqIHByb2dyYW1zL2Nsb2NrLy5jdnNpZ25vcmUsIHByb2dyYW1zL25vdGVwYWQvLmN2c2lnbm9yZTogQWRkZWQgRmkucwoKCSogaW5jbHVkZS93aW5lL29ial9zdG9yYWdlLmgsIG9sZS9NYWtlZmlsZS5pbiwgb2xlL3N0Z19iaWdibG9ja2ZpbGUuYywgb2xlL3N0Z19zdHJlYW0uYywgb2xlL3N0b3JhZ2UuYywgb2xlL3N0b3JhZ2UzMi5jLCBvbGUvc3RvcmFnZTMyLmgsIHJlbGF5MzIvb2xlMzIuc3BlYzoKCUZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCUFkZGVkIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBPTEUgc3RydWN0dXJlZCBzdG9yYWdlLiBUaGUgbWFpbgoJZmVhdHVyZXMgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbiBhcmU6CgktIENhbiBvcGVuIHN0b3JhZ2VzIGNyZWF0ZWQgaW4gV2luZG93cy4KCS0gQ2FuIGNyZWF0ZSBuZXcgc3RvcmFnZXMgdGhhdCB0aGUgd2luZG93cyBsaWJyYXJpZXMgY2FuCgkgIHJlYWQuCgktIFByb3ZpZGVzIGFsbCB0aGUgZnVuY3Rpb25hbGl0eSB0byBjcmVhdGUvb3Blbi9yZW1vdmUgYW5kCgkgIHJlbmFtZSBzdHJlYW1zIGFuZCBzdG9yYWdlcyBpbnNpZGUgdGhlIG1haW4gc3RvcmFnZSBvYmplY3QuCgoJKiBpbmNsdWRlL21pc2NlbXUuaCwgbWlzY2VtdS9tYWluLmMsIGdyYXBoaWNzL2RkcmF3LmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCURlZmluZWQgUkVTVE9SRV9TSUdOQUxTIGJ5IGRlZmF1bHQgYW5kIGNhbGwgU0lHTkFMX0VtdWxhdG9ySW5pdAoJdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIgaW5zdGVhZC4gQWRkZWQgYSBmZXcgdHJhY2VzLiBGaXhlZCB0aGUKCSJNZW1vcnkgY29ycnVwdGlvbiAhIiBtZXNzYWdlIGluIERHQSBtb2RlLiBDb21tZW50ZWQgb3V0IGFuCgl1bm5lY2Vzc2FyeSBUU1hGODZWaWRNb2RlU2V0Vmlld1BvcnQgdGhhdCBjYXVzZWQgbXkgWCBzZXJ2ZXIgdG8KCWFjdCB1cCwgcmVseWluZyBvbiBUU1hGODZER0FTZXRWaWV3UG9ydCBpbnN0ZWFkLgoKCSogZ3JhcGhpY3MvcHNkcnYvdGV4dC5jLCBtc2Rvcy9pbnQyZi5jLCBwcm9ncmFtcy93aW5oZWxwL2hscDJzZ21sLmMsIGRsbHMvY29tY3RsMzIvY29tY3RsMzJ1bmRvYy5jLCBmaWxlcy9maWxlLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNvbWUgbW9yZSB3YXJuaW5ncyBhbmQgYnVncyBmaXhlZC4KCgkqIGRsbHMvY29tY3RsMzIvdGFiLmMsIGluY2x1ZGUvdGFiLmg6IEFsZXggUHJpZW0gPGFsZXhwQHNjaS5rdW4ubmw+CglTbWFsbCB1cGRhdGUuCgoJKiBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvdHJlZXZpZXcuaCwgZGxscy9jb21jdGwzMi90cmVldmlldy5jLCBkbGxzL3NoZWxsMzIvYnJzZm9sZGVyLmM6CglBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgoJLSBUaGUgdXN1YWwgYnVnZml4ZXMuCgktIEJldHRlciB1bmljb2RlIHN1cHBvcnQgKG9ubHkgZGVmaW5lcywgY3VycmVudGx5KQoJLSBEcmFnICYgZHJvcCBpbXBsZW1lbnRlZC4KCS0gTFBTVFJfVEVYVENBTExCQUNLIHNob3VsZCB3b3JrIG5vdy4KCS0gRmlyc3Qgc3RhcnQgYXQgY3VzdG9tIGRyYXcgY29kZS4KCgkqIHdpbmRvd3MveDExZHJ2L2V2ZW50LmM6IEZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCU1ha2Ugc3VyZSB0aGF0IHRoZSBrZXlzdGF0ZSByZWNlaXZlZCBieSB0aGUgV01fWEJVVFRPTlVQIGFuZAoJV01fWEJVVFRPTkRPV04gbWF0Y2hlcyB0aGUgbWVzc2FnZS4gSW4gWCwgdGhlIGtleXN0YXRlIGlzIGNoYW5nZWQKCWFmdGVyIHRoZSBtZXNzYWdlIGlzIHByb2Nlc3NlZC4gIEluIFdpbmRvd3MsIGl0IGlzIGNoYW5nZWQgYmVmb3JlLgoKCSogZGxscy9hZHZhcGkzMi9zZWN1cml0eS5jLCBkbGxzL2FkdmFwaTMyL3NlcnZpY2UuYzoKCU1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+CglEb2MgdXBkYXRlcy4KCgkqIHdpbjMyL2ZpbGUuYzogQmVyZW5kIFJlaXRzbWEgPGJlcmVuZCBhdCBhc3NldC1jb250cm9sLmNvbT4KCVNldEZpbGVBdHRyaWJ1dGVzMzJBIGNoYW5nZWQgdG8gbWFrZSBmaWxlIHdyaXRlYWJsZSB3aGVuCglGSUxFX0FUVFJJQlVURV9SRUFET05MWSBpcyBub3Qgc2V0LgoKCSogY29uc29sZS9pbnRlcmZhY2UuYywgY29uc29sZS9uY3Vyc2VzLmMsIGluY2x1ZGUvY29uc29sZS5oLCBtc2Rvcy9pbnQxMC5jOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglQcmVsaW1pbmFyeSBjb2xvciBjb25zb2xlIHN1cHBvcnQuCgoJKiBkb2N1bWVudGF0aW9uL2xhbmd1YWdlcywgcHJvZ3JhbXMvY2xvY2svQ2hhbmdlTG9nLCBwcm9ncmFtcy9jbG9jay9GaS5yYywgcHJvZ3JhbXMvY2xvY2svTWFrZWZpbGUuaW4sIHByb2dyYW1zL2Nsb2NrL21haW4uYywgcHJvZ3JhbXMvbm90ZXBhZC9DaGFuZ2VMb2csIHByb2dyYW1zL25vdGVwYWQvRmkucmMsIHByb2dyYW1zL25vdGVwYWQvTWFrZWZpbGUuaW4sIHByb2dyYW1zL25vdGVwYWQvbWFpbi5jLCByZXNvdXJjZXMvc3lzcmVzX0ZpLnJjOgoJSnVra2EtUGVra2EgSWl2b25lbiA8amlpdm9uZW5AcG9zZWlkb24uY3MuaHV0LmZpPgoJVXBkYXRlZCBGaW5uaXNoIGxhbmd1YWdlIHN1cHBvcnQuCgpGcmkgSmFuIDI5IDE1OjEyOjExIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL3Zmdy5oLCBpbmNsdWRlL3dpbmVycm9yLmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgbXVsdGltZWRpYS9tc3ZpZGVvLmMsIG9sZS9ndWlkLmMsIHByb2dyYW1zL01ha2VmaWxlLmluLCBwcm9ncmFtcy9hdml0b29scy8uY3ZzaWdub3JlLCBwcm9ncmFtcy9hdml0b29scy9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvYXZpdG9vbHMvaWNpbmZvLmMsIHJlbGF5MzIvbXN2ZnczMi5zcGVjLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oLCBpbmNsdWRlL29sZWF1dG8uaDoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJVXBkYXRlZCBtc3ZpZGVvLiBOZXcgcHJvZ3JhbSAnaWNpbmZvIFstYWJvdXRdIFstY29uZmlndXJlXScgdG8KCXF1ZXJ5IGluc3RhbGxlZCAod2luMzIpIGNvbXByZXNzb3JzLiBTdGFydGVkIG9uIEFWSUZJTEUgc3VwcG9ydC4KClRodSBKYW4gMjggMTc6NTY6MTQgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvd2luZS9vYmpfbWlzYy5oLCBpbmNsdWRlL3dpbmUvb2JqX21vbmlrZXIuaCwgaW5jbHVkZS93aW5lL29ial9zdG9yYWdlLmgsIG9sZS9NYWtlZmlsZS5pbiwgb2xlL2JpbmRjdHguYywgb2xlL2ZpbGVtb25pa2VyLmMsIG9sZS9pdGVtbW9uaWtlci5jLCBvbGUvbW9uaWtlci5jLCBvbGUvb2xlMi5jOgoJTm9vbWVuIEhhbXphIDxub29tZW5AbWFjYWRhbWlhbi5jb20+CglBZGRlZCBhIHN0dWIgaW1wbGVtZW50YXRpb24gZm9yIEZpbGVNb25pa2VyLCBJdGVtTW9uaWtlciBhbmQgQmluZEN0eAoJY2xhc3Nlcy4KCgkqIGRlYnVnZ2VyL2RiZy55LCBkZWJ1Z2dlci9kZWJ1Zy5sOgoJTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglJbXBsZW1lbnRlZCB0aGUgc3ltYm9sZmlsZSBjb21tYW5kIChhcyBtZW50aW9uZWQgYnkgdGhlIGhlbHAKCWNvbW1hbmQpLiBUaGlzIHJlYWRzIGEgc3ltYm9sIGZpbGUgaW4gdGhlIGZvcm1hdCBnZW5lcmF0ZWQgYnkgbm0uCgoJKiBtdWx0aW1lZGlhL2RwbGF5LmM6IFBldGVyIEh1bm5pc2V0dCA8aHVubmlzZUBub3J0ZWxuZXR3b3Jrcy5jb20+CgktIFNtYWxsIGJ1ZyBmaXguCgktIEFkZGVkIGRpcmVjdCBwbGF5IGFzY2lpIGludGVyZmFjZXMuCgktIEZpeGVkIHVwIHRoZSBRdWVyeUludGVyZmFjZSBmb3IgZHBsYXkgYW5kIGRwbGF5bG9iYnkgdG8gaGFuZGxlIGFsbCBjYXNlcy4KCgkqIG1lbW9yeS92aXJ0dWFsLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgRklMRV9WSUVXIHN0cnVjdCBpbml0aWFsaXNhdGlvbi4KCgkqIGluY2x1ZGUvZG9zZXhlLmg6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlZCBub24taTM4NiBjb21waWxlLgoKCSogZ3JhcGhpY3MvdmdhLmMsIG1zZG9zL2RwbWkuYywgbXVsdGltZWRpYS9kcGxheS5jLCBtdWx0aW1lZGlhL21taW8uYywgZGxscy9jb21jdGwzMi9hbmltYXRlLmMsIGRsbHMvY29tY3RsMzIvY29tYm9leC5jLCBkbGxzL2NvbWN0bDMyL2NvbWN0bDMydW5kb2MuYywgZGxscy9jb21jdGwzMi9ob3RrZXkuYywgZGxscy9jb21jdGwzMi9pcGFkZHJlc3MuYywgZGxscy9jb21jdGwzMi9saXN0dmlldy5jLCBkbGxzL2NvbWN0bDMyL3BhZ2VyLmMsIGRsbHMvY29tY3RsMzIvcHJvcHNoZWV0LmMsIGRsbHMvY29tY3RsMzIvcmViYXIuYywgZGxscy9jb21jdGwzMi90YWIuYywgZGxscy9jb21jdGwzMi90b29sYmFyLmMsIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYzoKCUphbWVzIEp1cmFuIDxqcmoxMjBAcHN1LmVkdT4KCUNvbW1lbnRlZCBvdXQgdW51c2VkIHZhcmlhYmxlcyB0byBwcmV2ZW50IG5lZWRsZXNzIGNvbXBpbGVyIHdhcm5pbmdzLgoKCSogaW5jbHVkZS9kZGVtbC5oLCBtaXNjL2RkZW1sLmM6CglLZWl0aCBNYXR0aGV3cyA8a2VpdGhfbUBzd2VlbmV5LmRlbW9uLmNvLnVrPgoJMXN0IGN1dCBpbXBsZW1lbnRhdGlvbiBvZiBEZGVJbml0aWFsaXplMzJXIGFuZCBzdXBwb3J0aW5nIGNvZGUuCgoJKiBkbGxzL2FkdmFwaTMyL2FkdmFwaS5jLCBkbGxzL2FkdmFwaTMyL2V2ZW50bG9nLmMsIGRsbHMvYWR2YXBpMzIvc2VjdXJpdHkuYywgZGxscy9hZHZhcGkzMi9zZXJ2aWNlLmM6CglNYXR0aGV3IEJlY2tlciA8bWJlY2tlckBnbGFzc2NpdHkubmV0PgoJRG9jdW1lbnRhdGlvbiBzdGFuZGFyZGl6YXRpb25zLgoKCSogaW5jbHVkZS9xdWV1ZS5oLCB3aW5kb3dzL2hvb2suYywgd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3MvcXVldWUuYywgd2luZG93cy93aW4uYywgd2luZG93cy93aW5wb3MuYzoKCVN0ZXBoYW5lIEx1c3NpZXIgPHN0ZXBoYW5lQG1hY2FkYW1pYW4uY29tPgoJLSBNYWRlIHRoZSBtZXNzYWdlIHF1ZXVlIGFjY2VzcyB0byBiZSB0aHJlYWQgc2FmZS4gKFVzaW5nIHR3byBuZXcKCSAgZnVuY3Rpb25zIHRvIGFjY2VzcyB0aGUgbWVzc2FnZSBxdWV1ZSwgUVVFVUVfTG9jaygpLCBRVUVVRV9VbmxvY2soKQoJICBpbnN0ZWFkIG9mIEdsb2JhbExvY2sxNigpKS4KCS0gRml4ZWQgUVVFVUVfRHVtcFF1ZXVlICh1c2VkIGJ5ICJpbmZvIHF1ZXVlIDxoYW5kbGU+IiB3aXRoIHRoZQoJICB3aW5lLWRlYnVnZ2VyKS4KCgkqIG11bHRpbWVkaWEvZHNvdW5kLmMsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYywgb2JqZWN0cy90ZXh0LmMsIHdpbmRvd3MvZGlhbG9nLmMsIHdpbmRvd3MvZGlucHV0LmMsIHdpbmRvd3MvbWRpLmMsIHdpbmRvd3MvbXNnYm94LmMsIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3Mvd2lucHJvYy5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgZ3JhcGhpY3MvZDNkbWF0ZXJpYWwuYywgZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jLCBpZjE2MzIvcmVsYXkuYywgaW5jbHVkZS93aW5jb24uaCwgbG9hZGVyL3Jlc291cmNlLmMsIG1pc2MvaW1tLmMsIG1pc2MvbHpleHBhbmQuYywgbXNkb3MvaW50MjEuYywgZGxscy9jb21jdGwzMi9wcm9wc2hlZXQuYywgZGxscy9udGRsbC9ydGwuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgYSBsb3Qgb2Ygd2FybmluZ3MgZm9yIHBvc3NpYmxlIHByb2JsZW1zLgoKCSogbWlzYy9jb21tLmM6IEhlcmJlcnQgUm9zbWFuaXRoIDxoZXJwQHdpbGRzYXUuaWR2LnVuaS1saW56LmFjLmF0PgoJRml4ZWQgdHlwby4KCgkqIHRvb2xzL2J1Z19yZXBvcnQucGw6IEFkYW0gdGhlIEphenogR3V5IDxtYWdpY2JveEBiZXN0d2ViLm5ldD4KCUZpeGVkIHZhcmlvdXMgYnVncy4KCU1hZGUgbmV3YmllIG1vZGUgZWFzaWVyLgoKCSogb2JqZWN0cy9jdXJzb3JpY29uLmMsIGRsbHMvY29tY3RsMzIvaW1hZ2VsaXN0LmMsIGlmMTYzMi91c2VyLnNwZWMsIGluY2x1ZGUvd2luZS93aW51c2VyMTYuaCwgaW5jbHVkZS93aW51c2VyLmg6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeGVkIEdldEljb25JbmZvMTYgKC5zcGVjLElDT05JTkZPIHN0cnVjdCBpcyBkaWZmZXJlbnQgZm9yIFdpbjE2L1dpbjMyKS4KCgkqIGNvbnNvbGUvbmN1cnNlcy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVN3aXRjaCBuY3Vyc2VzLmgvY3Vyc2VzLmggaW5jbHVkZSAod29ya3MgYmV0dGVyIGZvciBGcmVlQlNEKS4KCgkqIHdpbmRvd3MvZHJpdmVyLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgbG9hZGluZyBvZiB3aW4zMiBkcml2ZXJzLgoKVHVlIEphbiAyNiAxNzoyOTo0OSAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZmlsZXMvcHJvZmlsZS5jOiBEb24ndCBhYm9ydCBQUk9GSUxFX0dldFNlY3Rpb24gb24gZW1wdHkga2V5cy4KCgkqIGRsbHMvbXNhY20zMi9pbnRlcm5hbC5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVRlbXBvcmFyeSAjaWYgMCdlZCBwYXJ0IGZvciBidWlsdGluIG1vZHVsZXMgaW4gTVNBQ00gdG8gbWFrZSBpdAoJY29tcGlsZSB3aXRoIHRoZSBwYXRjaCBmb3IgbG9hZGFibGUgZHJpdmVycy4KCgkqIGluY2x1ZGUvZHJpdmVyLmgsIHJlbGF5MzIvd2lubW0uc3BlYywgd2luZG93cy9kcml2ZXIuYzoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgc3VwcG9ydCBmb3IgbG9hZGluZyBkcml2ZXJzIGluIFdpbmUuCgoJKiB0b29scy9idWdfcmVwb3J0LnBsOiBBZGFtIHRoZSBKYXp6IEd1eSA8bWFnaWNib3hAYmVzdHdlYi5uZXQ+CglBIHBlcmwgc2NyaXB0IHRvIHByb2R1Y2UgYSBidWcgcmVwb3J0IHdpdGggbGl0dGxlIGhhc3NsZS4KCgkqIGdyYXBoaWNzL2Rpc3BkaWIuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglBZGRlZCAoZHVtbXkpIERlYXRoL1Jlc3VycmVjdGlvbiBjYWxscyB0byBEaXNwbGF5RGliLgoKCSogbWlzYy9semV4cGFuZC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFsbG9jYXRlIGEgRE9TIGhhbmRsZSBpZiB3ZSBvcGVuIGEgbm9ybWFsIGZpbGUgd2l0aCBMWk9wZW5GaWxlMTYuCgoJKiBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2RkcmF3Lmg6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCS0gYWRkZWQgZGVwdGggY29udmVyc2lvbiByb3V0aW5lcyAob25seSA4YnBwIC0+IDE2IGJwcCBmb3Igbm93KQoJLSBhZGRlZCBzdXBwb3J0IG9mIERFUFRIX0ZJTEwgZm9yIEJsaXRzCgktIGFkZGVkIHNvbWUgZmxhZ3MgaW4gR2V0Q2FwcyB0byBnZXQgc29tZSBnYW1lcyB3b3JraW5nCgoJKiBpZjE2MzIvdXNlci5zcGVjLCBpbmNsdWRlL3dpbmUvd2ludXNlcjE2LmgsIGluY2x1ZGUvd2ludXNlci5oLCBvYmplY3RzL2N1cnNvcmljb24uYywgcmVsYXkzMi91c2VyMzIuc3BlYywgZGxscy9jb21jdGwzMi9pbWFnZWxpc3QuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUltcGxlbWVudGVkIEdldEljb25JbmZvMTYgLT4gY2FsbCB0byBHZXRJY29uSW5mbzMyLgoKCSogc2NoZWR1bGVyL2NsaWVudC5jOiBDb21tZW50ZWQgb3V0IEVYRUNfU0VSVkVSCgoJKiBkbGxzL2NvbWN0bDMyL2RyYWdsaXN0LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJMyBtaXNzaW5nIFdJTkFQSSBhZGRlZC4KCgkqIGRsbHMvc2hlbGwzMi9lbnVtaWRsaXN0LmMsIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGRsbHMvc2hlbGwzMi9zaHJlcy5yYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU21hbGwgZml4ZXMuCgoJKiBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmMsIGluY2x1ZGUvY29tbWN0cmwuaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQ2hhbmdlZCBzb21lIHRyZWV2aWV3IHJlbGF0ZWQgZGVmaW5pdGlvbnMuCgoJKiBkbGxzL3NoZWxsMzIvTWFrZWZpbGUuaW4sIGRsbHMvc2hlbGwzMi9icnNmb2xkZXIuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSW1wbGVtZW50ZWQgU0hCcm93c2VGb3JGb2xkZXIoKSBkaWFsb2cuCgoJKiBkZWJ1Z2dlci9tc2MuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCB0eXBvIGluIHR5cGUgKHJlbW92ZWQgcXVpdGUgYSBmZXcgd2FybmluZ3MpLgoKCSogZGxscy9hZHZhcGkzMi9zZWN1cml0eS5jLCByZWxheTMyL2FkdmFwaTMyLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIEdldFNlY3VyaXR5RGVzY3JpcHRvck93bmVyL0dyb3VwLCBSZXZlcnRUb1NlbGYgc3R1YnMuCglSZXR1cm4gTlVMTCBmcm9tIE9wZW5UaHJlYWRUb2tlbi4KCgkqIHdpbjMyL2NvbnNvbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglEbyBub3QgZW5kbGVzc2x5IGxvb3AgaW4gQ09OU09MRV9nZXRfaW5wdXQgYWZ0ZXIgRU9GLgoJQ3JlYXRlIHh0ZXJtIGV2ZW4gaWYgc3RkaW4gaXMgbm90IGEgdGVybWluYWxoYW5kbGUuCglTZXRDb25zb2xlQ3Vyc29yUG9zaXRpb246IE9ubHkgbWFrZSBjb21wbGV4IGNvbnNvbGUgb24gcm93IGNoYW5nZSwKCWlnbm9yZSBpbnRlcmxpbmUgcG9zaXRpb25pbmcgKHNvIHRoZSBjeWd3aW4gY21kbGluZSB0b29scyBkbyBub3QKCWNyZWF0ZSB4dGVybXMgdW5uZWNlc3NhcnkpCgoJKiBtaXNjL3ByaW50ZHJ2LmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJTWFrZSBzdXJlIERydkdldFByaW50ZXJEYXRhIHJldHVybnMgdGhlIGNvcnJlY3QgZGF0YSBpZiBjYkRhdGEgPD0gMQoKCSogaW5jbHVkZS9xdWV1ZS5oLCB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9xdWV1ZS5jLCB3aW5kb3dzL3dpbi5jOgoJU3RlcGhhbmUgTHVzc2llciA8c3RlcGhhbmVAbWFjYWRhbWlhbi5jb20+CgktIENoYW5naW5nIE1FU1NBR0VRVUVVRSBzdHJ1Y3R1cmUgYWNjb3JkaW5nIHRvIFVscmljaCBwcm9wb3NpdGlvbi4KCS0gT25lIG1lc3NhZ2UgcXVldWUgZm9yIGV2ZXJ5IHRocmVhZCBuZWVkaW5nIGl0LgoJLSBNZXNzYWdlcyBpbiB0aGUgbWVzc2FnZSBxdWV1ZSBhcmUgbm93IHN0b3JlZCBpbiBhIGxpbmtlZCBsaXN0CgktIE1lc3NhZ2VzIGFyZSBhbGxvY2F0ZWQgaW4gdGhlIHN5c3RlbSBoZWFwLgoJLSBNZXNzYWdlcyBpbiB0aGUgbWVzc2FnZSBxdWV1ZSBhcmUgMzIgYml0cyAoTVNHMzIpLgoJLSBBbGwgcmVhZC93cml0ZSBvcGVyYXRpb25zIHJlZ2FyZGluZyBtZXNzYWdlcyBpbiB0aGUgbWVzc2FnZSBxdWV1ZSBhcmUKCSAgdGhyZWFkIHNhZmUuCgpTdW4gSmFuIDI0IDE5OjE0OjU4IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBkbGxzL2NvbWN0bDMyL2NvbW1jdHJsLmMsIGRsbHMvY29tY3RsMzIvZmxhdHNiLmMsIGRsbHMvY29tY3RsMzIvaW1hZ2VsaXN0LmMsIGRsbHMvY29tY3RsMzIvbGlzdHZpZXcuYywgZGxscy9jb21jdGwzMi9wcm9wc2hlZXQuYywgZGxscy9jb21jdGwzMi9zdGF0dXMuYywgaW5jbHVkZS9mbGF0c2IuaDoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBzZXZlcmFsIGJ1Z3MgYW5kIHR5cG9zLgoKCSogZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglVcGRhdGVzIGFuZCBmaXhlcy4KCgkqIGRsbHMvY29tY3RsMzIvTWFrZWZpbGUuaW4sIGRsbHMvY29tY3RsMzIvZHJhZ2xpc3QuYywgaW5jbHVkZS9jb21tY3RybC5oLCByZWxheTMyL2NvbWN0bDMyLnNwZWM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJTmV3IGRyYWcgbGlzdCBjb250cm9sLgoKCSogZGxscy9jb21jdGwzMi9jb21jdGwzMnVuZG9jLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBwb2ludGVyIGJ1Z3MgaW4gRFBBX0luc2VydFB0cigpIGFuZCBEUEFfRGVsZXRlUHRyKCkuCgoJKiBkbGxzL2NvbWN0bDMyL3Byb2dyZXNzLmMsIGluY2x1ZGUvcHJvZ3Jlc3MuaDoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBXTV9bRy9TXUVURk9OVCBoYW5kbGluZy4KCgkqIGRsbHMvY29tY3RsMzIvcGFnZXIuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIFdNX0NPTU1BTkQgYW5kIFdNX05PVElGWSBoYW5kbGluZy4KCgkqIGRsbHMvY29tY3RsMzIvdG9vbHRpcHMuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIHJlZHJhdyBidWcgZm9yIHRyYWNraW5nIHRvb2x0aXBzLgoKCSogZGxscy9jb21jdGwzMi9yZWJhci5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgc29tZSBtZXNzYWdlcyB0byB0aGUgcmViYXIgY29udHJvbC4KCgkqIG11bHRpbWVkaWEvbWNpY2RhLmM6IEdlb2ZmIENsYXJlIDxnd2NAcm9vdC5jby51az4KCVNldmVyYWwgaW50ZXJuYWwgZnVuY3Rpb25zIHdvbid0IGNvbXBpbGUgd2hlbiB0aGUgY29uZGl0aW9uYWwKCSNpZiBkZWZpbmVkKGxpbnV4KSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pCgljb21lcyBvdXQgZmFsc2UuICBJIG1vdmVkIHRoZSBjb25kaXRpb25hbHMgYXJvdW5kIHNvIHRoYXQKCXRoZSBmaWxlIHdvdWxkIGF0IGxlYXN0IGNvbXBpbGUuICBOb3Qgc3VyZSBpZiBpdCBkb2VzIHRoZQoJcmlnaHQgdGhpbmcgb24gbm9uLWxpbnV4L0ZyZWVCU0QvTmV0QlNEIHN5c3RlbXMuCgoJKiBtaXNjL3Rvb2xoZWxwLmM6IEdlb2ZmIENsYXJlIDxnd2NAcm9vdC5jby51az4KCU1vdmVkIHByb2Nlc3MuaCBoaWdoZXIgdXAgdGhlIGluY2x1ZGUgbGlzdCwgdG8gYXZvaWQgYSBwcm9ibGVtIHdpdGgKCSJFUlIiIGJlaW5nIHJlZGVmaW5lZCBpbiBzeXMvcmVnc2V0LmguCgoJKiBtaXNjL2NvbW0uYzogR2VvZmYgQ2xhcmUgPGd3Y0Byb290LmNvLnVrPgoJVGhlIEI1NzYwMCBhbmQgQjExNTIwMCBzeW1ib2xzIGFyZSBub3QgZGVmaW5lZCBpbiBVbml4d2FyZS4KCgkqIGNvbnRyb2xzL2xpc3Rib3guYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglDaGFuZ2UgU1dfPz8/IG9wdGlvbnMgb24gbGlzdCBib3ggc2Nyb2xsaW5nIHNvIHRoYXQgdGhleSBtYXRjaCB3aGF0CglXaW5kb3dzIGRvZXMuCgoJKiBsb2FkZXIvZG9zL2Rvc3ZtLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJTW92ZWQgRE9TIGhhbmRsZSBhbGxvY2F0aW9uIHNsaWdodGx5LCB0byBmaXggcG90ZW50aWFsIG1lbW9yeQoJbGVha3MgYW5kIGxvc3QgaGFuZGxlcy4gQWxzbyByZW1vdmVkIHNvbWUgdXNlbGVzcyBpbml0IGNvZGUuCgoJKiBncmFwaGljcy9wc2Rydi9hZm0uYywgZ3JhcGhpY3MvcHNkcnYvdGV4dC5jLCBpZjE2MzIvZHVtbXkuYywgaWYxNjMyL2dkaS5zcGVjLCBtaXNjL3ByaW50ZHJ2LmM6CglOaWNrIEhvbGxvd2F5IDxOaWNrLkhvbGxvd2F5QGFsZmllLmRlbW9uLmNvLnVrPgoJSW50ZXJuYWwgUG9zdFNjcmlwdCBwcmludGVyIGRyaXZlciBpbXByb3ZlbWVudHMuCgoJKiBjb250cm9scy9lZGl0LmM6IEdlcmFyZCBQYXRlbCA8Ry5QYXRlbEB3YW5hZG9vLmZyPgoJQ2hhbmdlZCBFRElUX0VNX0NoYXJGcm9tUG9zIHRvIHJldHVybiBsaW5lIG51bWJlci4KCgkqIHdpbmRvd3MveDExZHJ2L3duZC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZyZWUgdGhlIHByaXZhdGUgZGF0YSBwb2ludGVyLCBUSEVOIHNldCBpdCB0byBOVUxMLgoKCSogd2luZG93cy9tZXNzYWdlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTWlzc2luZyBXSU5BUEkuCgoJKiBpbmNsdWRlL29sZWF1dG8uaCwgaW5jbHVkZS93aW5lcnJvci5oLCBvbGUvTWFrZWZpbGUuaW4sIG9sZS9zYWZlYXJyYXkuYywgcmVsYXkzMi9vbGVhdXQzMi5zcGVjOgoJU3lsdmFpbiBTdC5HZXJtYWluIDxzeWx2YWluQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50YXRpb24gb2YgdGhlIFNhZmVBcnJheSBmYW1pbHkgZnVuY3Rpb25zLgoKCSogaW5jbHVkZS93aW5kb3dzLmgsIHJlbGF5MzIva2VybmVsMzIuc3BlYywgc2NoZWR1bGVyL3RocmVhZC5jOgoJR3V5IEFsYmVydGVsbGkgPGdhbGJlcnRlQG5lby5scnVuLmNvbT4KCUFkZGVkIHN0dWIgZm9yIFNldFRocmVhZExvY2FsZS4KCgkqIG9iamVjdHMvdGV4dC5jOiBHdXkgQWxiZXJ0ZWxsaSA8Z2FsYmVydGVAbmVvLmxydW4uY29tPgoJRmluaXNoZWQgR2V0VGV4dENoYXJzZXRJbmZvIHJvdXRpbmUuCgoJKiBvbGUvbmxzL2VudS5ubHMsIG9sZS9vbGUybmxzLmM6CglHdXkgQWxiZXJ0ZWxsaSA8Z2FsYmVydGVAbmVvLmxydW4uY29tPgoJRml4ZWQgRklYTUUgaW4gRW51bVRpbWVGb3JtYXRzMzJXCglBZGRlZCBzdXBwb3J0IGZvciBGT05UU0lHTkFUVVJFIGluIEdldExvY2FsZUluZm8zMkEgYW5kIHVwZGF0ZWQKCUdldExvY2FsZUluZm8zMlcuCgoJKiBkb2N1bWVudGF0aW9uL2ludGVybmFsLWRsbCwgZG9jdW1lbnRhdGlvbi9zaGVsbDMyLCBkb2N1bWVudGF0aW9uL3dpbmUubWFuOgoJUGFzY2FsIEN1b3EgPFBhc2NhbC5DdW9xQGlucmlhLmZyPgoJRml4ZWQgdHlwb3MuCgoJKiBkZWJ1Z2dlci9tc2MuYzogU2VyZ2V5IFR1cmNoYW5vdiA8dHVyY2hhbm92QHVzYS5uZXQ+CglGaXhlZCBzb3VyY2UgbGluZSBtYXRjaGluZyBmb3IgZnVuY3Rpb25zIGluIERFQlVHX1Byb2Nlc3NDb2ZmRGVidWc7CglzZWFyY2hpbmcgZm9yIERCRyBhbmQgUERCIGZpbGVzLgoKCSogZGVidWdnZXIvaGFzaC5jOiBTZXJnZXkgVHVyY2hhbm92IDx0dXJjaGFub3ZAdXNhLm5ldD4KCUZpeCBmb3IgZmlsZXMgd2hpY2ggZG8gbm90IGNvbnRhaW4gZXhwb3J0cyAoZmcsIEVYRSkgdG8gZ2V0IHByb2Nlc3NlZAoJZm9yIGRlYnVnIGluZm9ybWF0aW9uLgoKCSogaWYxNjMyL2tlcm5lbC5zcGVjLCBpZjE2MzIvcmVsYXkuYywgaWYxNjMyL3RodW5rLmMsIHRvb2xzL2J1aWxkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIEtFUk5FTC42MjEgKENCQ2xpZW50VGh1bmtTTEV4KS4KCgkqIGRlYnVnZ2VyL2RiZy55LCBkZWJ1Z2dlci9kZWJ1Zy5sLCBkZWJ1Z2dlci9pbmZvLmMsIGluY2x1ZGUvbWFpbi5oLCBtaXNjL21haW4uYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWxsb3cgc3dpdGNoaW5nIG9mZi9vbiBvZiBkZWJ1Z21zZ3MgaW4gdGhlIGRlYnVnZ2VyLgoKCSogbG9hZGVyL21haW4uYywgbWlzY2VtdS9pbnN0ci5jLCBtc2Rvcy9kb3NtZW0uYywgbXNkb3MvaW50MTUuYywgaW5jbHVkZS9taXNjZW11Lmg6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglJbXBsZW1lbnRlZCBJbnQgMHgxNS8weGMwOiBCSU9TIC0gR0VUIENPTkZJRyBhbmQgc29tZSBvdGhlciBCSU9TCglkYXRhLgoKU2F0IEphbiAyMyAxNDoxNToxNyAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZ3JhcGhpY3MvcGFpbnRpbmcuYywgaWYxNjMyL3VzZXIuc3BlYywgaW5jbHVkZS93aW5lL3dpbnVzZXIxNi5oLCBsb2FkZXIvcGVfaW1hZ2UuYywgbWlzYy9sc3RyLmMsIHdpbmRvd3MvaG9vay5jLCB3aW5kb3dzL21lc3NhZ2UuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUltcGxlbWVudGVkIFdJTjE2X0NhbGxNc2dGaWx0ZXIzMiwgV0lOMTZfRGlzcGF0Y2hNZXNzYWdlMzIsCglEcmF3QW5pbWF0ZWRSZWN0czE2IChzdHViKSwgRm9ybWF0TWVzc2FnZTE2LCBXSU4xNl9HZXRNZXNzYWdlMzIsCglXSU4xNl9QZWVrTWVzc2FnZTMyIGFuZCBXSU4xNl9UcmFuc2xhdGVNZXNzYWdlMzIuCgoJKiBkbGxzL3NoZWxsMzIvTWFrZWZpbGUuaW4sIGRsbHMvc2hlbGwzMi9jbGFzc2VzLmMsIGRsbHMvc2hlbGwzMi9jb250bWVudS5jLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jLCBkbGxzL3NoZWxsMzIvZW51bWlkbGlzdC5jLCBkbGxzL3NoZWxsMzIvZm9sZGVycy5jLCBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hlbGxndWlkLmMsIGRsbHMvc2hlbGwzMi9zaGVsbGxpbmsuYywgZGxscy9zaGVsbDMyL3NoZWxsb2xlLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hlbGxwYXRoLmMsIGRsbHMvc2hlbGwzMi9zaGxmb2xkZXIuYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYywgaW5jbHVkZS9pbnRlcmZhY2VzLmgsIGluY2x1ZGUvc2hsZ3VpZC5oLCBpbmNsdWRlL3NobG9iai5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgbWlzYy9zaGVsbC5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CgktIHNvbWUgZml4ZXMsIGNsZWFuZWQgdXAgaW5jbHVkZXMsIGZpeGVkIGxlYWtzCgktIGNsZWFuIERsbFJlZmVyZW5jZUNvdW50LCBiZXR0ZXIgRGxsTWFpbigpCgktIGR5bmFtaWNhbGx5IGxpbmtpbmcgTG9va3VwSWNvbklkRnJvbURpcmVjdG9yeUV4MzIgYW5kCgkgIENyZWF0ZUljb25Gcm9tUmVzb3VyY2VFeDMyIHRvIFVTRVIzMgoJLSBtb3ZlZCBndWlkJ3MgaW5zdGFuY2VzIHRvIG5ldyBmaWxlIHNoZWxsZ3VpZC5jCgktIGltcGxlbWVudGVkICBTaGVsbEV4ZWN1dGVFeDMyVwoKCSogb2xlL01ha2VmaWxlLmluLCBvbGUvY29tcG9iai5jLCBvbGUvZ3VpZC5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglNb3ZlZCB0aGUgaW5zdGFuY2UgY3JlYXRpb24gb2YgR1VJRCdzIHRvIGEgbmV3IGZpbGUuCglTaXplIG9mIGNvbXBvYmoubyBnb2VzIGRvd24gdG8gMS8zOyBzaG91bGQgcHJldmVudCBtb3JlIHNpZzExJ3MuCgoJKiBpbmNsdWRlL2luaXRndWlkLmg6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IGZpbGUgdG8gaW5zdGFudGlhdGUgR1VJRCdzIG1zLWxpa2UuCgoJKiB3aW5kb3dzL3gxMWRydi93bmQuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTZXQgcHJpdmF0ZSBkYXRhIHN0cnVjdCB0byBOVUxMIHRvIGV4cG9zZSBwcm9ibGVtcyBpbiBvdGhlciBjb2RlCgliZXR0ZXIuIEZpeGVzIHRoZSBYVW5tYXBXaW5kb3cgcHJvYmxlbXMgcmVwb3J0ZWQgYnkgcmVwbGFjaW5nIHRoZW0KCXdpdGggTlVMTCBwdHIgZGVyZWZlcmVuY2VzLgoKCSogZG9jdW1lbnRhdGlvbi9kZWJ1Zy1tc2dzLCBkb2N1bWVudGF0aW9uL2RlYnVnZ2luZywgZG9jdW1lbnRhdGlvbi9pbnRlcm5hbC1kbGwsIGRvY3VtZW50YXRpb24vaW9wb3J0LXRyYWNlLWhpbnRzLCBkb2N1bWVudGF0aW9uL3dpbmVfb3MyOgoJWnlnbyBCbGF4ZWxsIDx1ajIya2ZiY0B1bWFpbC5mdXJyeXRlcnJvci5vcmc+CglGaXhlZCB0eXBvcy4KCgkqIGZpbGVzL2ZpbGUuYywgaW5jbHVkZS9maWxlLmgsIGxvYWRlci9kb3MvZG9zdm0uYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRE9TIHByb2dyYW1zIHVzZSBoYW5kbGVzIDAtNCB3aXRob3V0IG9wZW5pbmcvY2xvc2luZyBhbnkgb2YgdGhvc2UKCWhhbmRsZXMgZmlyc3QuIFNwbGl0IHVwIEluaXQgZnJvbSBBbGxvY0Rvc0hhbmRsZSBhbmQgY2FsbCBpdCBmcm9tCgl0aGUgRE9TVk0uCgoJKiBNYWtlZmlsZS5pbjogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglSZW1vdmUgY29uZmlndXJlLmluLT5jb25maWd1cmUgcnVsZSAod2UgbWlnaHQgbm90IGhhdmUgYXV0b2NvbmYpLgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW46IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQWRkZWQgInVzZXItZnJpZW5kbHkiIHdhcm5pbmcgZm9yIG1pc3NpbmcgWC4KCgkqIGluY2x1ZGUvb2xlLmg6IEZpeGVkIEdldE9iamVjdCBtYWNybyBwcm9ibGVtLgoKCSogZG9jdW1lbnRhdGlvbi9zdGF0dXMvZGlyZWN0M0Q6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCS0gdXBkYXRlZCBkb2N1bWVudGF0aW9uIHRvIGJlIGluIHN5bmMgd2l0aCBjdXJyZW50IGNvZGUKCgkqIGdyYXBoaWNzL2QzZG1hdGVyaWFsLmMsIGdyYXBoaWNzL2QzZHZpZXdwb3J0LmM6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCS0gdmFyaW91cyB3YXJuaW5nIGFuZCBidWcgZml4ZXMKCgkqIGdyYXBoaWNzL2QzZGRldmljZXMuYywgZ3JhcGhpY3MvZDNkdGV4dHVyZS5jOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIGFkZGVkIG1vcmUgdGV4dHVyZSBmb3JtYXRzIHVzaW5nIE9wZW5HTCdzIHBhY2tlZCBwaXhlbCBmb3JtYXRzCgoJKiBncmFwaGljcy9kM2RleGVjdXRlYnVmZmVyLmMsIGluY2x1ZGUvZDNkLmg6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCS0gYmV0dGVyIHN1cHBvcnQgZm9yIEV4ZWN1dGVCdWZmZXJzCgoJKiBncmFwaGljcy9kZHJhdy5jOiBMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCS0gY29ycmVjdGVkIGJ1ZyBpbiBaIEJ1ZmZlciBhbGxvY2F0aW9uCgktIHB1dCBWSURFT01FTU9SWSBmbGFnIGZvciBhbGwgcHJpbWFyeSBzdXJmYWNlcwoJLSBwdXQgc29tZXRoaW5nIGluIGEgc3VyZmFjZSBhZnRlciBhIFJlbGVhc2VEQwoKCSogbWlzYy9wcmludGRydi5jOiBNb3J0ZW4gV2VsaW5kZXIgPHRlcnJhQGRpa3UuZGs+CglNaXNzaW5nIFdJTkFQSS4KCgkqIGNvbnRyb2xzL3N0YXRpYy5jOiBOaWNsYXMgS2FybHNzb24gPG5rYXJsc3NvQHJhLmFiby5maT4KCVJlbW92ZWQgRFRfU0lOR0xFTElORSBhbmQgRFRfTk9DTElQIHN0eWxlcyBmb3IgU1NfTEVGVE5PV09SRFdSQVAuCgoJKiBvYmplY3RzL2VuaG1ldGFmaWxlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQ2hlY2sgb3BlbmVkIGVuaG1ldGFmaWxlIGZvciBtYWdpYyB2YWx1ZXMuCgoJKiBpbmNsdWRlL2Rzb3VuZC5oLCBtdWx0aW1lZGlhL2Rzb3VuZC5jOiBSb2IgUmlnZ3MgPHJyaWdnc0B0ZXNzZXIuY29tPgoJRml4ZWQgZHVwbGljYXRlIHNvdW5kIGJ1ZmZlciBoYW5kbGluZy4gVXBkYXRlZCBzdGF0dXMuCgoJKiBtaXNjL3JlZ2lzdHJ5LmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IGZ1bmN0aW9ucyAgbG1lbWNweW5BdG9XIGFuZCAgbG1lbWNweW5XdG9BIGZvciBjb252ZXJ0aW5nCglSRUdfTVVMVElfU1ogKGluY2x1ZGluZyBcMHgwMCkKCUJldHRlciBkZWJ1ZyBvdXRwdXQgZm9yIFJFR19CSU5BUlkgYW5kIFJFR19NVUxUSV9TWgoJUmV3cml0dGVuIFJlZ1F1ZXJ5VmFsdWVFeDMyW0F8V10KCgkqIG9iamVjdHMvcGFsZXR0ZS5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUltcGxlbWVudGVkIENyZWF0ZUhhbGZ0b25lUGFsZXR0ZS4KCUZpeGVkIDMgY3Jhc2hlcyAoMSByZWFsLCAyIHBvdGVudGlhbCkuCgoJKiBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmMsIGlmMTYzMi9zaGVsbC5zcGVjLCBpbmNsdWRlL3NoZWxsLmgsIG1pc2Mvc2hlbGwuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJSW1wbGVtZW50ZWQgRXh0cmFjdEljb25FeDE2LCBhZGRlZCBzb21lIGNvbnN0cyB0byBFeHRyYWN0SWNvbkV4Ki4KCgkqIG9sZS9vbGUyLmMsIG9sZS9vbGVjbGkuYywgcmVsYXkzMi9vbGUzMi5zcGVjLCBpbmNsdWRlL3dpbmVycm9yLmg6CglTeWx2YWluIFN0Lkdlcm1haW4gPHN5bHZhaW5AbWFjYWRhbWlhbi5jb20+CglEb0RyYWdEcm9wIGFuZCBPbGVJc0N1cnJlbnRDbGlwYm9hcmQgc3R1YiBpbXBsZW1lbnRhdGlvbi4KCgkqIG9sZS90eXBlbGliLmM6IEZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCU1ha2UgTG9hZFR5cGVMaWIgc3R1YiByZXR1cm4gZmFpbHVyZSBpbnN0ZWFkIG9mIHN1Y2Nlc3MuCgpGcmkgSmFuIDIyIDE3OjA5OjQ2IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBkb2N1bWVudGF0aW9uL2FjY2VsZXJhdG9ycywgaW5jbHVkZS93aW51c2VyLmgsIGxvYWRlci9yZXNvdXJjZS5jLCB3aW5kb3dzL2lucHV0LmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeGVkIGFjY2VsZXJhdG9yIGhhbmRsaW5nLiBBQ0NFTDE2IHVzZWQgaW50ZXJuYWwsIEFDQ0VMMzIgZm9yIFdpbjMyCglBUEksIFBFX0FDQ0VMIGZvciBQRSBBY2NlbGVyYXRvcnMuIFNlZSBkb2N1bWVudGF0aW9uL2FjY2VsZXJhdG9ycy4KClRodSBKYW4gMjEgMTQ6MDU6MTEgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvZGRlbWwuaCwgbWlzYy9kZGVtbC5jLCByZWxheTMyL3VzZXIzMi5zcGVjOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJVGhlcmUgd2VyZSB0d28gY29waWVzIG9mIHRoZSBEZGVDbXBTdHJpbmdIYW5kbGVzIChBIGFuZCBXKSBhbmQgdGhhdAoJQVBJIGRvZXMgbm90IGhhdmUgMiB2ZXJzaW9ucy4gUmVtb3ZlZCB0aGUgZXh0cmEgdmVyc2lvbi4KCldlZCBKYW4gMjAgMTQ6NTQ6MDEgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jOiBQYWJsbyBTYXJhdHhhZ2EgPHBhYmxvLnNhcmFjaGFnYUBwaW5nLmJlPgoJU21hbGwgcGF0Y2guCgoJKiB3aW4zMi9jb25zb2xlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJV2luMzIgY29uc29sZSBuZWVkcyBTWU5DSFJPTklaRSBhY2Nlc3MuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgY29uc29sZS9uY3Vyc2VzLmMsIGRlYnVnZ2VyL3N0YWJzLmMsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvY29uc29sZS5oLCBtaXNjL3BvcnQuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJYXV0b2NvbmY6IGFkZGVkIGNoZWNrcyBmb3IgbGliaW8uaCwgZWxmLmgsIGN1cnNlcy5oLG5jdXJzZXMuaCBhbmQKCWZpeGVkIGluY2x1ZGVycy4KCgkqIG9sZS9vbGUybmxzLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTENNYXBTdHJpbmdBOiBpZiBkc3RsZW4gaXMgaW5zdWZmaWNpZW50LCByZXR1cm4KCUVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVIgKHZlcmlmaWVkKS4KCgkqIG9iamVjdHMvZW5obWV0YWZpbGUuYywgcmVsYXkzMi9nZGkzMi5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTb21lIHNtYWxsIGZpeGVzIHRvIGVuaG1ldGFmaWxlcy4KCgkqIGNvbnRyb2xzL2xpc3Rib3guYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglEbyBub3QgY2FsbCBvd25lcmRyYXcgZm9yIGludmFsaWQgaXRlbXMgKGVtcHR5IGZvY3VzcmVjdHMpLgoJRml4ZXMgRXVkb3JhIDE2Yml0IGVtcHR5IEluYm94IHByb2JsZW0uCgoJKiB3aW5kb3dzL25vbmNsaWVudC5jOiBOb29tZW4gSGFtemEgPG5vb21lbkBtYWNhZGFtaWFuLmNvbT4KCUZpeGVkIHRoZSBOQ19EcmF3TWF4QnV0dG9uOTUgYW5kIE5DX0RyYXdNaW5CdXR0b245NSBmdW5jdGlvbnMuIFJld3JvdGUKCXRoZXNlIGZ1bmN0aW9ucyB3aXRoIHRoZSBzYW1lIGxvZ2ljIGFzIHRoZSBOQ19EcmF3Q2xvc2VCdXR0b24gZnVuY3Rpb24uCgoJKiB3aW5kb3dzL3dpbi5jOiBOb2VsIEJvcnRod2ljayA8bm9lbEBtYWNhZGFtaWFuLmNvbT4KCVJlcGFyZW50aW5nIGEgd2luZG93IHdpdGggU2V0UGFyZW50IGluIFdpbmRvd3Mgc2hvdWxkIGNhdXNlIHRoZSBjaGlsZAoJd2luZG93IGJlaW5nIHJlLXBhcmVudGVkIHRvIGJlIG1vdmVkIHVwIHRvIHRoZSB0b3Btb3N0IGluIHRoZSB6LW9yZGVyLAoJYW5kIFdNX1dJTkRPV1BPU0NIQU5HSU5HIGFuZCBXTV9XSU5ET1dQT1NDSEFOR0VEIG1lc3NhZ2VzIHRvIGJlIHNlbnQuCgoJKiByZWxheTMyL2J1aWx0aW4zMi5jOiBSb2JlcnQgUmlnZ3MgPHJyaWdnc0B0ZXNzZXIuY29tPgoJVXNlIGV4dGVybmFsIERpcmVjdFBsYXkgRExMcyBieSBkZWZhdWx0LgoKCSogbG9hZGVyL3Rhc2suYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBbGxvdyBwYXNzaW5nIHRhc2sgaGFuZGxlcyB0byBHZXRUaHJlYWRRdWV1ZSgpIGFuZCBTZXRGYXN0UXVldWUoKS4KCgkqIHdpbmRvd3MvdXNlci5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUhhbmRsZSAoY29uc29sZSkgYXBwbGljYXRpb25zIHRoYXQgbmV2ZXIgY3JlYXRlZCBhIHF1ZXVlIGNvcnJlY3RseQoJaW4gVVNFUl9BcHBFeGl0KCk7IGNhbGwgSW5pdFRocmVhZElucHV0KCkgaW4gSW5pdEFwcCgpLgoKCSogd2luZG93cy9ob29rLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJLSBGaXhlZCBjcmVhdGlvbiBvZiBtZXNzYWdlIHF1ZXVlIGluIGhvb2sgQVBJIHJvdXRpbmVzLgoJLSBTb21lIHByZXBhcmF0aW9ucyBmb3IgdGhyZWFkLWxvY2FsIG1lc3NhZ2UgcXVldWVzLgoKCSogbG9hZGVyL25lL21vZHVsZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDaGVjayBtb2R1bGUgbmFtZSBsZW5ndGggaW4gTW9kdWxlTmV4dCgpLgoKCSogd2luZG93cy94MTFkcnYvZXZlbnQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJVXNlIENhbGxvdXQgdG8gY2FsbCBSZWRyYXdXaW5kb3czMi4KCgkqIG1zZG9zL2ludDIxLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQ2xlYXIgRE9TIGV4dGVuZGVkIGVycm9yIG9ubHkgZm9yIGZ1bmNzID49MHgyZiAodGhhbmtzIHRvIERhdmUKCVBpY2tsZXMpLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglVbmlmaWVkIHBhbGV0dGUgY3JlYXRlLCBkbyBhbGxvY2F0ZSBjb2xvcmNlbGxzIG9uIGluaXQgZm9yIERHQS4KClR1ZSBKYW4gMTkgMTc6NDg6MjUgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHNjaGVkdWxlci9zeW5jaHJvLmMsIHNjaGVkdWxlci90aHJlYWQuYywgc2VydmVyL2NvbnNvbGUuYywgc2VydmVyL2ZpbGUuYywgc2VydmVyL3Byb2Nlc3MuYywgc2VydmVyL3JlcXVlc3QuYywgc2VydmVyL3RocmVhZC5jLCBzZXJ2ZXIvdHJhY2UuYywgd2luMzIvY29uc29sZS5jLCB3aW4zMi9kZXZpY2UuYywgd2luMzIvcHJvY2Vzcy5jLCBpbmNsdWRlL2ZpbGUuaCwgaW5jbHVkZS9wcm9jZXNzLmgsIGluY2x1ZGUvc2VydmVyLmgsIGluY2x1ZGUvc2VydmVyL29iamVjdC5oLCBpbmNsdWRlL3NlcnZlci9yZXF1ZXN0LmgsIGluY2x1ZGUvc2VydmVyL3RocmVhZC5oLCBpbmNsdWRlL3RocmVhZC5oLCBpbmNsdWRlL3dpbmJhc2UuaCwgaW5jbHVkZS93aW5kb3dzLmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgbWVtb3J5L3ZpcnR1YWwuYywgbXNkb3MvaW50MjEuYywgbXNkb3MvdnhkLmMsIHJlbGF5MzIva2VybmVsMzIuc3BlYywgc2NoZWR1bGVyL2NsaWVudC5jLCBzY2hlZHVsZXIvaGFuZGxlLmMsIHNjaGVkdWxlci9rMzJvYmouYywgc2NoZWR1bGVyL3Byb2Nlc3MuYywgZmlsZXMvY2hhbmdlLmMsIGZpbGVzL2Rvc19mcy5jLCBmaWxlcy9maWxlLmMsIGluY2x1ZGUvZGV2aWNlLmg6CglIYWNrZWQgc2VydmVyLXNpZGUgZGV2aWNlIHN1cHBvcnQKCUFkZGVkIHVzZXIgQVBDcyBzdXBwb3J0LgoJTWFueSBjaGFuZ2VzIHRvIHRoZSB4dGVybSBjb25zb2xlIHRvIG1ha2UgdXNlIG9mIHRoZSBzZXJ2ZXIgKG5vdAoJZmluaXNoZWQgeWV0KS4KCU1vdmVkIHNvbWUgb3RoZXIgc21hbGwgc3R1ZmYgdG8gdGhlIHNlcnZlci4KCgkqIHRvb2xzL21ha2VfcmVxdWVzdHM6IEFkZGVkIGxvbmcgdHlwZSBmb3JtYXQuCgoJKiBzZXJ2ZXIvTWFrZWZpbGUuaW4sIHNlcnZlci9kZXZpY2UuYzoKCUFkZGVkIHNlcnZlci1zaWRlIGRldmljZSBzdXBwb3J0IChvbmx5IGEgaGFjayBmb3Igbm93KS4KClN1biBKYW4gMTcgMTc6NDg6NDggMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIENoYW5nZUxvZzoKCVJlY292ZXJlZCBsb2cgZW50cmllcyBmcm9tIENWUyBtYWlsaW5nIGxpc3QuCgoJKiByZWxheTMyL250ZGxsLnNwZWMsIGRsbHMvbnRkbGwvcnRsLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUltcGxlbWVudGVkIF9hbGxvY2FfcHJvYmUgYW5kIF9jaGtzdGsgKG1vc3RseSBkb25lIGJ5IFVscmljaCBXZWlnYW5kKS4KCgkqIGZpbGVzL2ZpbGUuYwoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglIYW5kbGUgRVJST1JfV1JJVEVfUFJPVEVDVCB0b28gaW4gcmVhZG9ubHkgZmFsbGJhY2sgb3Blbi4KCgkqIGRsbHMvYWR2YXBpMzIvc2VjdXJpdHkuYywgcmVsYXkzMi9hZHZhcGkzMi5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBHZXRTZWN1cml0eURlc2NyaXB0b3JMZW5ndGggc3R1YiBmb3IgcmVnZWR0MzIuZXhlLgoKCSogZGVidWdnZXIvTWFrZWZpbGUuaW4sIGZpbGVzL01ha2VmaWxlLmluOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGQgIiIgYXJvdW5kIC1EIGRlZmluZXMgZm9yIHBhdGhzIHdpdGggc3BhY2VzIGluIHRoZW0uCgoJKiBncmFwaGljcy9kM2R0ZXh0dXJlLmMsIGdyYXBoaWNzL2RkcmF3LmMsIGluY2x1ZGUvZGRyYXcuaDoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQ2xlYW5lZCB1cCBDb2xvcktleSBoYW5kbGluZy4KCgkqIG9iamVjdHMvbWV0YWZpbGUuYzoKCVBhdWwgUXVpbm4gPHBhdWxxQENPUkVMLkNBPgoJTUVUQVJFQ09SRCBtZW1iZXIgcmRQYXJhbSBzaG91bGQgYmUgcmRQYXJtIChpbiB3aW4zMiBzZGspCglsb3RzIG9mIGNoYW5nZXMgaW4gdGhpcyBzb3VyY2UgZmlsZSB0byByZWZsZWN0IHRoaXMgY2hhbmdlLgoKCSogZ3JhcGhpY3MvZXNjYXBlLmMsIGdyYXBoaWNzL3BhaW50aW5nLmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuYywgaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL2NvbW1kbGcuaCwgaW5jbHVkZS9nZGkuaCwgaW5jbHVkZS90Y2hhci5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW5nZGkuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBpbmNsdWRlL3dpbnVzZXIuaCwgbWlzYy9zcG9vbGVyLmMsIG9iamVjdHMvZ2Rpb2JqLmMsCglyZWxheTMyL2dkaTMyLnNwZWM6CglQYXVsIFF1aW5uIDxwYXVscUBDT1JFTC5DQT4KCUZpeGVkIGJhZCBkZWZpbmVzLCBhZGRlZCBhIGZldyB0eXBlcyAnbiBkZWZpbmVzLgoKCSogd2luZG93cy9kaW5wdXQuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRGlzYWJsZSBicm9rZW4gY2FsbGJhY2tzIHdoaWNoIGxlYWQgdG8gY3Jhc2hlcy4KCgkqIG11bHRpbWVkaWEvbWNpc3RyaW5nLmM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUZpeGVkIElEIHVzYWdlIChhbmQgcmVseSBsZXNzIGhlYXZpbHkgb24gbXVsdGltZWRpYS9tbXN5c3RlbS5jCglpbnRlcm5hbCBzdHJ1Y3R1cmVzKS4KCgkqIG1pc2MvdG9vbGhlbHAuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJZGVidWcuaCBuZWVkcyB0byBiZSBpbmNsdWRlZCBsYXN0IHNpbmNlIGl0ICN1bmRlZnMgRVJSIGZvciBTb2xhcmlzLgoKCSogZGVidWdnZXIvZGVidWcubCwgZGVidWdnZXIvbWVtb3J5LmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIC91IGZvcm1hdCB0byBkZWJ1Z2dlciBkaXNwbGF5IGZvciBVTklDT0RFIHN0cmluZ3MuCgoJKiBsb2FkZXIvcGVfaW1hZ2UuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUmVtb3ZlIGlycml0YXRpbmcgRklYTUUgbGluZSBubyBsb25nZXIgbmVlZGVkLgoKCSogbXNkb3MvaW50MmYuYzoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgbWlzc2luZyAnXG4nIGluIEZJWE1FIG1lc3NhZ2UuCgoJKiBncmFwaGljcy9kZHJhdy5jOgoJUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCW9iamJhc2UuaCBuZWVkZWQgZm9yIFdJTkVfU3RyaW5nRnJvbUNMU0lEKCksIGZpeCBDIGZ1bmN0aW9uCglkZWNsYXJhdGlvbnMsIGluc3RhbGwgYSBjb2xvcm1hcCBpZiB3ZSBhcmUgbm90IG1hbmFnZWQsIHJlbGVhc2UKCWJhY2tidWZmZXJzIGluIERHQSBtb2RlLCBmaXggdmlkZW8gbW9kZSBzd2l0Y2hpbmcgbG9naWMgdG8gYXZvaWQKCXBvc3NpYmxlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4KCgkqIG1zZG9zL2RwbWkuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVNtYWxsIGZpeC4KCgkqIGZpbGVzL2ZpbGUuYywgaW5jbHVkZS9maWxlLmgsIGluY2x1ZGUvcHJvY2Vzcy5oLCBsb2FkZXIvcmVzb3VyY2UuYywgbG9hZGVyL2Rvcy9tb2R1bGUuYywgbG9hZGVyL25lL3NlZ21lbnQuYywgbWlzYy9semV4cGFuZC5jLCBtc2Rvcy9pbnQyMS5jIHZ4ZC5jLCBtdWx0aW1lZGlhL21taW8uYywgd2luMzIva2VybmVsMzIuYzoKCUJldHRlciBET1MgZmlsZSBoYW5kbGUgbWFuYWdlbWVudC4KCgkqIGRvY3VtZW50YXRpb24vY29tbW9uX2NvbnRyb2xzOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJVGhpcyBzaG91bGQgaGVscCBwcmV2ZW50IGR1cGxpY2F0ZSB3b3JrLgoKCSogaWYxNjMyL2dkaS5zcGVjLCBpbmNsdWRlL3dpbmdkaS5oLCBvYmplY3RzL2RjLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglJbXBsZW1lbnRlZCBEZWF0aCgpIGFuZCBSZXN1cnJlY3Rpb24oKSwgdHdvIGZ1bmN0aW9ucyBuZWVkZWQgYnkgc29tZQoJVFBXaW4gKD8pIGNvbW1hbmQgbGluZSB0b29sLgoKCSogd2luZG93cy93aW5wcm9jLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUFkZGVkIDMyLT4xNiB0cmFuc2xhdGlvbiBmb3IgV01fQUNUSVZBVEVBUFAuCgoJKiBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NoZWxscGF0aC5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIHJlbGF5MzIvc2hlbGwzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3R1YnM6IFNoZWxsTWVzc2FnZUJveFcsIFJ1bkRMTF9DYWxsRW50cnkxNi4KCUltcGxlbWVudGF0aW9uIGZvciBTSEdldFNwZWNpYWxGb2xkZXJQYXRoMzJbQXxXXS4KCU1hbnkgYnVnZml4ZXMuCgoJKiBjb25zb2xlL3h0ZXJtLmMsIG1pc2MvcG9ydC5jLCB3aW4zMi9jb25zb2xlLmM6CglKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUNoYW5nZSBhbGwgV2luZSBvcGVucHR5KCkgaW1wbGVtZW50YXRpb25zIHRvIG1hdGNoIHRoZSAic3RhbmRhcmQiIGFuZAoJdGhlbiBtYWtlIHRoZW0gYm90aCBjYWxsIHRoZSBzYW1lIGNvZGUgbGVhdmluZyB0aGUgb3B0aW9uIHRvIGNoYW5nZQoJdGhhdCBjb2RlIHRvIGNhbGwgdGhlICJzdGFuZGFyZCIgb3BlbnB0eSgpIGF0IGEgbGF0ZXIgZGF0ZS4KCgkqIHJlbGF5MzIva2VybmVsMzIuc3BlYywgc2NoZWR1bGVyL3Byb2Nlc3MuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgU2V0UHJvY2Vzc0FmZmluaXR5TWFzayBzdHViLgoKCSogZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9kZHJhdy5oOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCB0aGUgb3RoZXIgdW5pb24gbWlzdXNlIHRvbyAob25lIGxlc3MgbWVtIGNvcnJ1cHRpb24pCglSZS1hZGRlZCBYSW5zdGFsbENvbG9ybWFwIChvciBub24gbWFuYWdlZCBkb2VzIG5vdCBjaGFuZ2UgcGFsZXR0ZSkKCgkqIGlmMTYzMi9rZXJuZWwuc3BlYywgc2NoZWR1bGVyL3N5bmNocm8uYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRkZWQgYW4gaW1wbGVtZW50YXRpb24gZm9yIEtFUk5FTC40OTUuCgoJKiBkb2N1bWVudGF0aW9uL3N0YXR1cywgZG9jdW1lbnRhdGlvbi9kaXJlY3QzRCwgZ3JhcGhpY3MvZDNkX3ByaXZhdGUuaCwgZ3JhcGhpY3MvZDNkY29tbW9uLmMsIGdyYXBoaWNzL2QzZGRldmljZXMuYywgZ3JhcGhpY3MvZDNkZXhlY3V0ZWJ1ZmZlci5jLCBncmFwaGljcy9kM2R0ZXh0dXJlLmMsIGdyYXBoaWNzL2QzZHZpZXdwb3J0LmMsIGdyYXBoaWNzL2RkcmF3LmMsIGluY2x1ZGUvZDNkLmgsIGluY2x1ZGUvZGRyYXcuaDoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSBhZGRlZCBiaXRtYXNrIHRvIHN0b3JlIHdoaWNoIENvbG9yS2V5IHN0cnVjdHVyZXMgYXJlIHZhbGlkCgktIGhhbmRsZSBtYW55IG5ldyByZW5kZXJpbmcgc3RhdGVzLCBzb21lIG9wdGltaXphdGlvbnMgaW4gc3RhdGUgY2hhbmdlcwoJLSA4Yml0IHBhbGV0dGl6ZWQgdGV4dHVyZXMgbm93IHN1cHBvcnQgQ29sb3JLZXlpbmcKCS0gc29tZSBtaXNjZWxsYW5lb3VzIGJ1ZyBmaXhlcyBhbmQgY29kZSByZXdyaXRlCgoJKiBjb250cm9scy9tZW51LmM6CglOb29tZW4gSGFtemEgPG5vb21lbkBtYWNhZGFtaWFuLmNvbT4KCUZpeGVkIHRoZSBsb29rIG9mIHRoZSBtZW51IHNvIGl0IHdvdWxkIGJlIGNvbXBsaWFudCB3aXRoIFdpbjk1OiBtb2RpZmllZAoJdGhlIG1vdXNlIHRyYWNraW5nIGNvZGUgc28gaXQgd291bGQgY2hhbmdlIHRoZSBzZWxlY3Rpb24gZXZlcnkgdGltZSB0aGUKCW1vdXNlIG1vdmVkIG92ZXIgYSBtZW51IGl0ZW0uCgoJKiBkb2N1bWVudGF0aW9uL2hvdy10by1wb3J0OgoJTWlrZSBDYXN0bGUgPGRhbGdvZGFAc2hlbGwucnQ2Ni5jb20+CglTbWFsbCBmaXguCgoJKiBkbGxzL2NvbWN0bDMyL3VwZG93bi5jOgoJTm9lbCBCb3J0aHdpY2sgPG5vZWxAbWFjYWRhbWlhbi5jb20+CglGaXhlZCBidWdzOgoJLSBXaGVuIGFuIGVkaXQgY29udHJvbCBidWRkeSB3YXMgdXNlZCBzaW5nbGUgZGlnaXQgdmFsdWVzIHdlcmUgbm90CgliZWluZyBkaXNwbGF5ZWQuCgktIENvbW1hIHZhbHVlcyB3ZXJlIG5vdCBkaXNwbGF5ZWQgY29ycmVjdGx5IHdoZW4gdGhvdXNhbmRzIHNlcGFyYXRpb24KCXdhcyByZXF1ZXN0ZWQuCgoJKiB3aW4zMi9uZXdmbnMuYzoKCVRvbSBCZWNoIDx0b21iQGlpLnVpYi5ubz4KCVdoaWxlIHRoZSBkZWJ1ZyBldmVudCBtZXNzYWdlcyBhcmUgbm90IGltcGxlbWVudGVkLCBXYWl0Rm9yRGVidWdFdmVudAoJc2hvdWxkIHJldHVybiBGQUxTRS4KCgkqIGlmMTYzMi91c2VyLnNwZWMsIG9iamVjdHMvYml0bWFwLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglJbXBsZW1lbnRlZCBDb3B5SW1hZ2UxNi4KCgkqIGRvY3VtZW50YXRpb24vYnVncmVwb3J0cyAKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVNtYWxsIGZpeC4KCgkqIGNvbnNvbGUvZ2VuZXJpYy5jLCBtc2Rvcy9pbnQyMS5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDaGFuZ2VkIDB4MDEgdG8gdXNlIGdlbmVyaWMgY29uc29sZSwgZml4ZWQgMHgwYi4KCUZpeGVkIENPTlNPTEVfR2V0Q2hhcmFjdGVyICh0d28gYXJncyBzd2FwcGVkKS4KCgkqIGluY2x1ZGUvbW9kdWxlLmgsIGxvYWRlci9tYWluLmMsIGxvYWRlci9tb2R1bGUuYywgbG9hZGVyL2Rvcy9tb2R1bGUuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWxsb3cgc3BlY2lmeWluZyBtb2R1bGUgbmFtZSBmb3IgTkUgZHVtbXkgbW9kdWxlLgoKCSogbG9hZGVyL3BlX2ltYWdlLmMgCglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVNldCBtb2R1bGUgbmFtZSBvZiBkdW1teSBtb2R1bGUgZXF1YWwgdG8gbW9kdWxlIG5hbWUgb2YgUEUgbW9kdWxlLgoKCSogY29udHJvbHMvc2Nyb2xsLmMsIGNvbnRyb2xzL3VpdG9vbHMuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTWlzc2luZyBpbmNsdWRlIHdpbmUvd2ludXNlcjE2LmggYWRkZWQuCgoJKiBncmFwaGljcy92Z2EuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQ3JlYXRlIGFuIGFjdHVhbCBwcmltYXJ5IHN1cmZhY2UgZm9yIHNjcmVlbmJ1ZmZlci4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEphbiAxMCAxNDo0MDozNCAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS9taXNjZW11LmgsIGluY2x1ZGUvbXNkb3MuaCwgbG9hZGVyL21haW4uYywgbXNkb3MvTWFrZWZpbGUuaW4sIG1zZG9zL2Rvc2NvbmYuYywgbXNkb3MvaW50MjEuYzoKCUFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUFkZGVkIGNvbmZpZy5zeXMgcGFyc2VyLgoKCSogY29udHJvbHMvbGlzdGJveC5jOiBQYXNjYWwgQ3VvcSA8UGFzY2FsLkN1b3FAaW5yaWEuZnI+CglTbWFsbCBjaGFuZ2UgaW4gTEJfU0VUQ1VSU0VMMzIgaGFuZGxpbmcgKHRoZSBjYXJldCBzaG91bGQgYmUgbW92ZWQgYXMKCXdlbGwpLgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGZpbGVzL2FzeW5jLmMsIGluY2x1ZGUvY29uZmlnLmguaW4sIG1pc2Mvd2luc29ja19kbnMuYywgbXNkb3MvaW50MjEuYywgb2xlL2NvbXBvYmouYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJVXNlIGF1dG9jb25mIGNoZWNrIGZvciBwcmVzZW5jZSBvZiBzeXMvZmlsZS5oLgoKCSogZGxscy9udGRsbC9ydGwuYywgcmVsYXkzMi9udGRsbC5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglJbXBsZW1lbnRlZCBEYmdQcmludCwgYWRkZWQgdWx0b2EuCgoJKiB3aW4zMi9jb25zb2xlLmM6IFBldGVyIEh1bm5pc2V0dCA8aHVubmlzZUBub3J0ZWxuZXR3b3Jrcy5jb20+CglQZWVrQ29uc29sZUlucHV0ICYgUmVhZENvbnNvbGVJbnB1dCBuZWVkIHRvIHJldHVybiAwIHJlY29yZHMgcmVhZCBpbgoJdGhlIGNhc2Ugb2YgYW4gaW52YWxpZCBoYW5kbGUuCgoJKiBjb25zb2xlL25jdXJzZXMuYywgbG9hZGVyL21haW4uYzoKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJTW9yZSB2ZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQuCglSZW1vdmUgY29tcGlsYXRpb24gd2FybmluZy4KCgkqIG1zZG9zL2ludDEwLmM6IEpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJRml4IHVwIHNvbWUgaW50ZXJydXB0IGNhbGxzIHRvIHJldHVybiBhdCB0aGUgZGF0YSB0aGF0IHRoZXkgYXJlIHN1cHBvc2VkCgl0by4gQWxzbyBpbmNyZWFzZSBjb21tZW50IHZlcmJvc2l0eSB0byBoZWxwIGRlYnVnIHRoaW5ncyBsYXRlci4KCgkqIGluY2x1ZGUvb3B0aW9ucy5oLCBtaXNjL21haW4uYywgbWlzYy92ZXJzaW9uLmM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglBZGRlZCBzd2l0Y2ggLWRvc3Zlci4KCUNsZWFudXAgZm9yIE9hQnVpbGRWZXJzaW9uKCkuCgoJKiBsaWJ0ZXN0Ly5jdnNpZ25vcmU6IEFkZGVkIHZhcnRlc3QgYW5kIHZvbGluZm8KCgkqIGRsbHMvc2hlbGwzMi9jb250bWVudS5jLCBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvcGlkbC5oLCBkbGxzL3NoZWxsMzIvc2hlbGxsaW5rLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGluY2x1ZGUvc2hlbGwuaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTWFueSBidWdmaXhlcywgY29kZSBjbGVhbnVwLgoJUmVtb3ZlZCBhIGZldyBnbGl0Y2hlcyBmcm9tIHRoZSBDT00gcGF0Y2guCgoJKiB3aW5kb3dzL2RpYWxvZy5jOiBMYXdzb24gV2hpdG5leSA8bGF3c29uX3doaXRuZXlAanVuby5jb20+CglPbmx5IGRlc3Ryb3kgd2luZG93IG9uY2UuCgoJKiBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2RkcmF3Lmg6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCS0gbW92ZWQgZHJhd2FibGUgdG8gY29tbW9uIHNpbmNlIGl0IGlzIHVzZWQgYnkgYm90aCBER0EgYW5kIFhsaWIuCgkgIChmaXhlcyBvbmUgYmFkIG1lbW9yeSBjb3JydXB0aW9uIGJ1ZyBpbiBER0EgKFN0YXJDcmFmdCBhbmQgRGlhYmxvKQoJLSBhZGRlZCBCbHRGYXN0IHNhbml0eSBjaGVja3MuCgoJKiB3aW5kb3dzL3F1ZXVlLmMsIGxvYWRlci90YXNrLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUluaXRBcHAoKSBjYWxsIHJlbW92ZWQgZnJvbSAzMi1iaXQgYXBwbGljYXRpb24gc3RhcnR1cDsKCWNyZWF0ZSB0YXNrIG1lc3NhZ2UgcXVldWUgaW4gSW5pdFRocmVhZElucHV0KCkgaW5zdGVhZC4KCgkqIGxvYWRlci9uZS9jb252ZXJ0LmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkZGVkIGFjY2VsZXJhdG9yIHRhYmxlIFBFLT5ORSByZXNvdXJjZSBjb252ZXJzaW9uLgoKCSogZGVidWdnZXIvZWRpdGxpbmUuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJUmVzdGFydCByZWFkKCkgaW4gY2FzZSBvZiBFSU5UUiBpbiBUVFlnZXQoKS4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVB0ciByZWYgd3JvbmcuCgoJKiB0b29scy93cmMvQ0hBTkdFUywgdG9vbHMvd3JjL2R1bXByZXMuYywgdG9vbHMvd3JjL2dlbnJlcy5jLCB0b29scy93cmMvbmV3c3RydWMuYywgdG9vbHMvd3JjL25ld3N0cnVjLmgsIHRvb2xzL3dyYy9wYXJzZXIubCwgdG9vbHMvd3JjL3BhcnNlci55LCB0b29scy93cmMvcmVhZHJlcy5jLCB0b29scy93cmMvdXRpbHMuYywgdG9vbHMvd3JjL3V0aWxzLmgsIHRvb2xzL3dyYy93cmMuaCwgdG9vbHMvd3JjL3dyY3R5cGVzLmgsIHRvb2xzL3dyYy93cml0ZXJlcy5jOgoJQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCVdyYyB2ZXJzaW9uIDEuMC44LiBUb29sYmFyIHJlc291cmNlcyBhcmUgbm93IHN1cHBvcnRlZC4gQSBjb3VwbGUgb2YKCW90aGVyIGZpeGVzIGFyZSBhbHNvIGluY2x1ZGVkLiBTZWUgZmlsZSB0b29scy93cmMvQ0hBTkdFUyBmb3IgZGV0YWlscy4KCgkqIG9sZS9jb21wb2JqLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTWlzc2luZyBXSU5BUEkuCgoJKiBpbmNsdWRlL3gxMWRydi5oLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBvYmplY3RzL2RjLmMsIHJlbGF5MzIvYnVpbHRpbjMyLmMsIHJlbGF5MzIvcmVsYXkzODYuYywgc2NoZWR1bGVyL2szMm9iai5jLCBmaWxlcy9hc3luYy5jLCBpZjE2MzIvcmVsYXkuYywgaW5jbHVkZS9tYWluLmgsIGluY2x1ZGUvbXVsdGltZWRpYS5oLCBpbmNsdWRlL3dpbmRvd3MuaDoKCUphbWVzIEp1cmFuIDxqcmoxMjBAcHN1LmVkdT4KCUFkZCBtaXNzaW5nICNpbmNsdWRlcyBhbmQgcHJvdG90eXBlcyB0byBlbGltaW5hdGUgc29tZSBpbXBsaWNpdAoJZnVuY3Rpb24gZGVjbGFyYXRpb24gd2FybmluZ3MgYW5kICdleHRlcm4ncyBpbiAuYyBmaWxlcy4KCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBjb25zb2xlL25jdXJzZXMuYywgaW5jbHVkZS9hY2NvbmZpZy5oLCBpbmNsdWRlL2NvbmZpZy5oLmluOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglDaGVjayBmb3IgcmVzaXpldGVybSBpbiBuY3Vyc2VzLgoKCSogbGlidGVzdC9NYWtlZmlsZS5pbiwgbGlidGVzdC92YXJ0ZXN0LVdpbjMyLmxvZywgbGlidGVzdC92YXJ0ZXN0LmMsIGxpYnRlc3QvdmFydGVzdC5yZWFkbWU6CglGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglOZXcgdGVzdCBwcm9ncmFtIGZvciBWQVJJQU5UIGZ1bmN0aW9ucy4KCgkqIGRlYnVnZ2VyL21zYy5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVNvbWUgZGVidWcgaW5mb3JtYXRpb24gKFBEQikgd2FzIG5vdCBtYXBwZWQgd2hlbiBsb2FkaW5nIGEgbW9kdWxlLAoJd2hpY2ggY2F1c2VkIGEgY29yZSBpbiB0aGUgZGVidWdnZXIgd2hlbiBpdCB0cmllZCB0byBhY2Nlc3MgaXQuCgoJKiBNYWtlZmlsZS5pbjogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglMaW5rcyBsaWJ3aW5lLnNvLjEuMCB0byBsaWJ3aW5lLnNvIGluIFdpbmUncyBtYWluIGRpcmVjdG9yeS4KCU1ha2VzIFdpbmUgY29tcGlsZSB3aXRoIC0tZW5hYmxlLWRsbCBhZ2Fpbi4KClNhdCBKYW4gIDkgMDk6MTI6NDAgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHJlbGF5MzIvb2xlMzIuc3BlYywgd2luZG93cy9kaW5wdXQuYywgaW5jbHVkZS9zdG9yYWdlLmgsIGluY2x1ZGUvdW5rbnduLmgsIGluY2x1ZGUvd2luZG93cy5oLCBpbmNsdWRlL3dpbmUvb2JqX2Jhc2UuaCwgaW5jbHVkZS93aW5lL29ial9jaGFubmVsLmgsIGluY2x1ZGUvd2luZS9vYmpfY2xpZW50c2VydmVyLmgsIGluY2x1ZGUvd2luZS9vYmpfZGF0YW9iamVjdC5oLCBpbmNsdWRlL3dpbmUvb2JqX21hcnNoYWwuaCwgaW5jbHVkZS93aW5lL29ial9taXNjLmgsIGluY2x1ZGUvd2luZS9vYmpfbW9uaWtlci5oLCBpbmNsdWRlL3dpbmUvb2JqX3Byb3BlcnR5c3RvcmFnZS5oLCBpbmNsdWRlL3dpbmUvb2JqX3N0b3JhZ2UuaCwgaW5jbHVkZS93aW5lcnJvci5oLCBpbmNsdWRlL3d0eXBlcy5oLCBtaXNjL3NoZWxsLmMsIG11bHRpbWVkaWEvZHBsYXkuYywgbXVsdGltZWRpYS9kc291bmQuYywgb2JqZWN0cy9mb250LmMsIG9sZS9jb21wb2JqLmMsIG9sZS9pZnMuYywgb2xlL21vbmlrZXIuYywgb2xlL29sZTIuYywgb2xlL29sZTJkaXNwLmMsIG9sZS9vbGVkbGcuYywgb2xlL29sZW9iai5jLCBvbGUvc3RvcmFnZS5jLCBvbGUvdHlwZWxpYi5jLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jLCBkbGxzL3NoZWxsMzIvZW51bWlkbGlzdC5jLCBkbGxzL3NoZWxsMzIvZm9sZGVycy5jLCBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGRsbHMvc2hlbGwzMi9zaGVsbGxpbmsuYywgZGxscy9zaGVsbDMyL3NoZWxsb2xlLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGdyYXBoaWNzL2RkcmF3LmMsIGdyYXBoaWNzL3ZnYS5jLCBpZjE2MzIvY29tcG9iai5zcGVjLCBpbmNsdWRlL2NvbXBvYmouaCwgaW5jbHVkZS9kZHJhdy5oLCBpbmNsdWRlL2RpbnB1dC5oLCBpbmNsdWRlL2RwbGF5LmgsIGluY2x1ZGUvZHNvdW5kLmgsIGluY2x1ZGUvaW50ZXJmYWNlcy5oLCBpbmNsdWRlL29iamJhc2UuaCwgaW5jbHVkZS9vYmppZGwuaCwgaW5jbHVkZS9vbGUuaCwgaW5jbHVkZS9vbGUyLmgsIGluY2x1ZGUvb2xlb2JqLmgsIGluY2x1ZGUvc2VydnByb3YuaCwgaW5jbHVkZS9zaGVsbC5oLCBpbmNsdWRlL3NobGd1aWQuaCwgaW5jbHVkZS9zaGxvYmouaCwgZGxscy9jb21jdGwzMi9pbWFnZWxpc3QuYywgZGxscy9zaGVsbDMyL2NvbnRtZW51LmM6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAbXVsdGltYW5pYS5jb20+CglBZGRlZCBhIGxvdCBvZiBDT00gaW50ZXJmYWNlcyBkZWZpbml0aW9ucy4KCVJlc3RydWN0dXJlZCBDT00gaGVhZGVyIGZpbGVzIGZvciBiZXR0ZXIgY29tcGF0aWJpbGl0eSBhbmQgY2xhcml0eS4KCkZyaSBKYW4gIDggMTY6Mzc6MDMgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGZpbGVzL2ZpbGUuYzogU2V0IEdFTkVSSUNfUkVBRHxHRU5FUklDX1dSSVRFIGFjY2VzcyBmb3IgT0ZfQ1JFQVRFLgoJTWFrZSBHZXRGaWxlVHlwZSB3b3JrIGZvciBhbGwgaGFuZGxlIHR5cGVzLgoKCSogd2luMzIvZGV2aWNlLmM6IEF2b2lkIGNyYXNoIG9uIE5VTEwgZGV2LT5pbmZvLgoKCSogaW5jbHVkZS9mbGF0c2IuaCwgcmVsYXkzMi9jb21jdGwzMi5zcGVjLCBkbGxzL2NvbWN0bDMyL01ha2VmaWxlLmluLCBkbGxzL2NvbWN0bDMyL2NvbW1jdHJsLmMsIGRsbHMvY29tY3RsMzIvZmxhdHNiLmMsIGluY2x1ZGUvY29tbWN0cmwuaDoKCUFsZXggUHJpZW0gPGFsZXhwQHNjaS5rdW4ubmw+CglBZGRlZCBzdHVicyBhbmQgZGVmaW5lcyBmb3IgdGhlIGZsYXQgc2Nyb2xsYmFyIGNvbW1vbiBjb250cm9sLgoKCSogaW5jbHVkZS9jb21tY3RybC5oLCBkbGxzL2NvbWN0bDMyL2RhdGV0aW1lLmM6CglBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgoJQWRkZWQgc29tZSBkZWZpbmVzIG5lZWRlZCBmb3IgY3VzdG9tIGRyYXcnaW5nIGFuZCBkYXRldGltZSBjb21tb24KCWNvbnRyb2xzLgoKCSogZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jOiBFZGRpZSBDYXJwZW50ZXIgPGVjYXJwZW50ZXJAaXRleC5jby56YT4KCUZpeGVkIGEgc21hbGwgYnVnIGluIGZ1bmN0aW9uIEV4dHJhY3RJY29uRXgzMkEuCgoJKiB3aW5kb3dzL3dpbnByb2MuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglIVEFTSzE2IC0+IHRocmVhZElEIG1hcHBpbmcgb2YgV01fQUNUSVZBVEVBUFAuCgoJKiBmaWxlcy9maWxlLmM6IEJlcnRobyBTdHVsdGllbnMgPGJlcnRob0BwYW50ZXIuc29jaS5hYXUuZGs+CglNYWtlIERlbGV0ZUZpbGUgZmFpbCBmb3IgZW1wdHkgcGF0aC4KCgkqIG1zZG9zL2lvcG9ydHMuYzogR2VyYWxkIFBmZWlmZXIgPHBmZWlmZXJAZGJhaS50dXdpZW4uYWMuYXQ+CglGaXggZHVtbXlfY3RyIHN0dWZmIHRvIHdvcmsgZXZlbiB3aXRob3V0IERJUkVDVF9JT19BQ0NFU1MuCgoJKiBsb2FkZXIvbmUvc2VnbWVudC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeGVkIHdyb25nIGJ1ZmZlciB3aGljaCBjYXVzZWQgZml4dXBzIHRvIGZhaWwuCgoJKiBncmFwaGljcy9kM2Rjb21tb24uYywgZ3JhcGhpY3MvZDNkZGV2aWNlcy5jLCBncmFwaGljcy9kM2R0ZXh0dXJlLmMsIGluY2x1ZGUvZDNkLmg6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCS0gYWRkZWQgYWxsIHRoZSBEaXJlY3QzRCBlcnJvciBjb2RlcwoJLSBhZGRlZCA4Yml0IHBhbGV0dGl6ZWQgdGV4dHVyZSBzdXBwb3J0CgoJKiBtc2Rvcy9jZHJvbS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCWlmZGVmcyBmb3IgZGVmaW5lcyBub3QgaW4gbGludXggMi4wLgoKCSogcmVsYXkzMi93aW5zcG9vbC5zcGVjLCBtaXNjL3ByaW50ZHJ2LmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCB0d28gc3R1YnMgZm9yIEFkZFByaW50ZXJEcml2ZXIuCgoJKiBpbmNsdWRlL2Rvc2V4ZS5oLCBsb2FkZXIvZG9zL2Rvc21vZC5jLCBsb2FkZXIvZG9zL2Rvc21vZC5oLCBsb2FkZXIvZG9zL2Rvc3ZtLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVF1ZXVlIFNJR0FMUk0gdG8gcmVkdWNlIHRoZSAic2lnbmFsIDE0IGxvc3QiIGNvbXBsYWludHMuCglBZGRlZCBzdXBwb3J0IGZvciByZXByb2dyYW1taW5nIHRoZSBET1MgdGltZXIsIGFuZCByZWFkaW5nIGJhY2sgdGhlCgljdXJyZW50IHZhbHVlLgoKCSogbWlzYy9yZWdpc3RyeS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVdpbmUgaGFuZ3Mgd2hlbiByZWdpc3RyeSAoY29ycnVwdGVkKSBoYXMgbG9uZSBcIGF0IGVuZCBvZiBmaWxlLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmM6CglLb3N0eWEgSXZhbm92IDxrb3N0eWFAd2FybWNhdC5leGNvbS5zcGIuc3U+CglTbWFsbCBwYXRjaCB0aGF0IGVuYWJsZXMgQ2xhcmlvbiBmb3IgV2luZG93cyBub3QgdG8gdHJhcCB3aGlsZQoJbG9hZGluZy4KCgkqIG9sZS92YXJpYW50LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUmVwbGFjZSB0cm91Ymxlc29tZSBhc3NpZ25tZW50cyBieSBtZW1zZXQgZm9yIHdob2xlIHN0cnVjdC4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQWRkZWQgaGFuZGxpbmcgb2YgdGhlICdwYWxlbnQnIGZpZWxkIG9mIHRoZSBDcmVhdGVQYWxldHRlIHByb2NlZHVyZS4KCgkqIGRvY3VtZW50YXRpb24vd2luZS5tYW46CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCBkZXNjcmlwdGlvbiBhYm91dCBpbmNsdWRpbmcvZXhjbHVkaW5nIGZ1bmN0aW9ucyBmcm9tIHJlbGF5Cgl0cmFjZS4KCgkqIHdpbjMyL2NvbnNvbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglSZWFkIGF0IGxlYXN0IDEgaW5wdXQgcmVjb3JkIGluIFJlYWRDb25zb2xlSW5wdXRBLgoKCSogbWVtb3J5L3ZpcnR1YWwuYzoKCUZpeGVkIENyZWF0ZU1hcHBpbmcgd2hlbiBhIG1hcHBpbmcgd2l0aCB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLgoKV2VkIEphbiAgNiAxMDozNzoyOSAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogc2VydmVyL2ZpbGUuYzogRml4ZWQgZmlsZSBkZXN0cnVjdGlvbiB3aGVuIGZpbGUgaGFzIG5vIG5hbWUuCgpUdWUgSmFuICA1IDE4OjM4OjU5IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtaXNjL21haW4uYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglXYXJucyB1c2VyIGlmIG11bHRpcGxlIC1kbGwgc3dpdGNoZXMgYXJlIHVzZWQgb24gY29tbWFuZCBsaW5lLgoKCSogZGxscy9jb21jdGwzMi90cmFja2Jhci5jOiBBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgoJRml4ZWQgYSBsZWZ0b3ZlciBIZWFwRnJlZSBpbiB0aGUgdHJhY2tiYXIgY29tbW9uIGNvbnRyb2wuCgoJKiBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgaW5jbHVkZS90YWIuaCwgZGxscy9jb21jdGwzMi90YWIuYzoKCUFsZXggUHJpZW0gPGFsZXhwQHNjaS5rdW4ubmw+CglGaXhlZCBzb21lIHByb2JsZW1zIHdpdGggdGhlIHRhYiBjb21tb24gY29udHJvbCAod2l0aCB0aGFua3MgdG8gQW5kZXJzCglDYXJsc3NvbiA8YW5kZXJzLmNhcmxzc29uQGxpbnV4Lm51PikuCgoJKiBkbGxzL2NvbWN0bDMyL2NvbW1jdHJsLmMsIGRsbHMvY29tY3RsMzIvcHJvcHNoZWV0LmMsIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9wcm9wc2hlZXQuaCwgcmVsYXkzMi9jb21jdGwzMi5zcGVjOgoJQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCUFkZGVkIGEgbWlzc2luZyBQcm9wZXJ0eVNoZWV0MzJBVyBhbmQgQ3JlYXRlUHJvcGVydHlTaGVldFBhZ2Ugc3R1YiwKCWFuZCBzb21lIG1pc3NpbmcgZGVmaW5lcy4KCgkqIG1pc2MvbWFpbi5jLCBzY2hlZHVsZXIvc3lzbGV2ZWwuYywgZ3JhcGhpY3MvdmdhLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVVzZSBNYWtlQ3JpdGljYWxTZWN0aW9uR2xvYmFsIG9uIGFsbCBjcml0aWNhbCBzZWN0aW9ucyB1c2VkIGFjcm9zcwoJcHJvY2VzcyBib3VuZGFyaWVzLgoKCSogaW5jbHVkZS93aW5iYXNlLmgsIGluY2x1ZGUvd2luZG93cy5oOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGRlZCBwcm90b3R5cGVzIGZvciBNYWtlQ3JpdGljYWxTZWN0aW9uR2xvYmFsLCBDb252ZXJ0VG9HbG9iYWxIYW5kbGUuCgoJKiBkb2N1bWVudGF0aW9uL3dpbmUubWFuOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQWRkZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIHRoZSBtYW4gcGFnZS4KCgkqIGxvYWRlci9kb3MvbW9kdWxlLmM6IEdlcmFsZCBQZmVpZmVyIDxwZmVpZmVyQGRiYWkudHV3aWVuLmFjLmF0PgoJRml4ZWQgYXJncyBvZiBNWl9DcmVhdGVQcm9jZXNzLgoKCSogcHJvZ3JhbXMvY2xvY2svbGFuZ3VhZ2UuYywgcHJvZ3JhbXMvbm90ZXBhZC9sYW5ndWFnZS5jLCBwcm9ncmFtcy9wcm9nbWFuL21haW4uYzoKCUFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUZpeGVkIHN0cmluZyBidWcgaW4gcHJvZ3JhbXMvLgoKCSogbXNkb3MvaW9wb3J0cy5jOiBBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglBZGRlZCBzdHVwaWQgImFjdGlvbiIgZW11bGF0aW9uIGZvciBoYXJkd2FyZSB0aW1lcnMgaW4gaW9wb3J0cy5jLgoKCSogZGxscy93aW5hc3BpL3dpbmFzcGkxNi5jOiBBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglBZ2FpbiBhIHNtYWxsIERPU0FTUEkgcGF0Y2guCgoJKiBkb2N1bWVudGF0aW9uL2J1Z3JlcG9ydHMsIGRvY3VtZW50YXRpb24vZm9udHMsIHdpbmRvd3Mvc3lzbWV0cmljcy5jLCB3aW5kb3dzL3dpbi5jLCB3aW5kb3dzL3dpbnBvcy5jOgoJQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJRG9jdW1lbnRhdGlvbiB1cGRhdGVzLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIGNoZWNrIGlmIHBhbGV0dGUgaXMgbm90IG51bGwgd2hlbiBzZXR0aW5nIGEgcGFsZXR0ZQoJLSBjaGVjayBpZiB3aW5kb3cgaGFuZGxlIGlzIHZhbGlkIGJlZm9yZSBnZXR0aW5nIGl0cyAnZHJhd2FibGUnCgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglQcmV2ZW50IGNvcmUgZHVtcCB3aXRoIHNvbWUgVFRGICh3aGVuIFgxMSBydW5zIHdpdGggYSB0cnVlIHR5cGUKCXNlcnZlcikuCgoJKiBzZXJ2ZXIvY29uc29sZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVVzZSBzdGRvdXQgZm9yIGRlZmF1bHQgY29uc29sZSBvdXRwdXQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBKYW4gIDMgMTc6MDA6MjAgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGdyYXBoaWNzL2QzZGV4ZWN1dGVidWZmZXIuYywgZ3JhcGhpY3MvZDNkbGlnaHQuYywgZ3JhcGhpY3MvZDNkbWF0ZXJpYWwuYywgZ3JhcGhpY3MvZDNkdGV4dHVyZS5jLCBncmFwaGljcy9kM2R2aWV3cG9ydC5jLCBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2FjY29uZmlnLmgsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvZDNkLmgsIGluY2x1ZGUvd2luZV9nbC5oLCBtdWx0aW1lZGlhL2Rzb3VuZC5jLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZG9jdW1lbnRhdGlvbi9zdGF0dXMvZGlyZWN0M0QsIGRvY3VtZW50YXRpb24vc3RhdHVzL2RpcmVjdGRyYXcsIGdyYXBoaWNzL01ha2VmaWxlLmluLCBncmFwaGljcy9kM2RfcHJpdmF0ZS5oLCBncmFwaGljcy9kM2Rjb21tb24uYywgZ3JhcGhpY3MvZDNkZGV2aWNlcy5jOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIGJlZ2lubmluZyBvZiBpbXBsZW1lbnRhdGlvbiBvZiBEaXJlY3QzRDIgKERYIDUuMCkgYW5kIGFzc29jaWF0ZWQgY2xhc3NlcwoJLSBzb21lIGJhc2ljIGNvZGUgZm9yIERpcmVjdDNEIGFuZCBEaXJlY3QzREV4ZWN1dGVCdWZmZXIgKERYIDMuMCkKCS0gYWRkZWQgc3RyZXRjaGluZyB0byBCbHQgZnVuY3Rpb24KCgkqIG1pc2MvdmVyc2lvbi5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVRyeSB0byBhdXRvZGV0ZWN0IE5UNC4KCgkqIHdpbjMyL2NvbnNvbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CgkwIG1lYW5zIHN1Y2Nlc3MsIGFsbCBlbHNlIGZhaWx1cmUgZm9yIFdhaXRGb3JTaW5nbGVPYmplY3QuCgoJKiBtc2Rvcy9pbnQxMC5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCURvIG5vdCBhZHZhbmNlIHRoZSBjdXJzb3IgaW4gY2VydGFpbiByb3V0aW5lcy4gVGhpcyBjbGVhbmVkIHVwIHRoZQoJaW1wbGVtZW50YXRpb24gcXVpdGUgYSBiaXQuCgoJKiBsb2FkZXIvbWFpbi5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCVNldCBjb25zb2xlIHZpZGVvIG1vZGUgd2hlbiBsb2FkaW5nIERPUyBhcHAuIChFdmVudHVhbGx5LCBJIHdhbnQgdG8KCW1pbWljIFdpbmRvd3MgOXgncyBiZWhhdmlvciBieSBzZXR0aW5nIHRoZSB2aWRlbyBtb2RlIG9ubHkgd2hlbiBub24KCUlOVCAyMSBjYWxscyBhcmUgdXNlZCB0byBhbGxvdyBmb3IgYXJiaXRyYXJ5LXNpemVkIGNvbnNvbGVzKS4KCgkqIGNvbnNvbGUvaW50ZXJmYWNlLmMsIGNvbnNvbGUveHRlcm0uYzoKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJWHRlcm0gZHJpdmVyIGNhbiBub3cgcmVzaXplIHRoZSB0ZXJtaW5hbCB3aGVuIGEgbW9kZSBjaGFuZ2UgaXMKCWRldGVjdGVkLgoKCSogY29uc29sZS9nZW5lcmljLmM6IEpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJTG9uZyBzdGFuZGluZyBzY3JvbGwgYnVnIGZpeGVkIQoKCSogY29uc29sZS9uY3Vyc2VzLmMsIGluY2x1ZGUvYWNjb25maWcuaCwgaW5jbHVkZS9jb25maWcuaC5pbiwgaW5jbHVkZS9jb25zb2xlLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglSZXdyaXRlIG9mIGNvbmZpZ3VyYXRpb24gc3lzdGVtIHRvIHN1cHBvcnQgInJlZ3VsYXIiIGN1cnNlcyBhcyB3ZWxsIGFzCgllbGltaW5hdGluZyB0aGUgLS13aXRoLW5jdXJzZXMgb3B0aW9uLiBOb3csIG5jdXJzZXMgc3VwcG9ydCB3aWxsIGJlCglidWlsdCBpbiBpZiBhIGNvbXBhdGlibGUgbGlicmFyeSBpcyBkZXRlY3RlZC4KCgkqIGluY2x1ZGUvd2ludHlwZXMuaCwgd2luZG93cy9kZWZkbGcuYzoKCU5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJRml4IHRoZSByZXR1cm4gdHlwZSBvZiBETEdQUk9DIHR5cGUgYW5kIG1hc2sgb3V0IHRoZSB1bnNldCBoaWdod29yZCBvZgoJdGhlIHJldHVybiB3aGVuIGEgMTYgYml0IGRpYWxvZyBwcm9jIGlzIGNhbGxlZC4KCgkqIGluY2x1ZGUvaW50ZXJmYWNlcy5oOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJQWRkIGludGVyZmFjZSBJRCdzIGZvciB1cGNvbWluZyBJVHlwZUxpYiBpbXBsZW1lbnRhdGlvbi4KCgkqIGZpbGVzL2Rvc19mcy5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUJ1Z2ZpeCBmb3IgdHJhaWxpbmcgc2xhc2hlcywgcmVwZXRpdGlvbiBvZiAnLycgb3IgJ1wnIGFuZAoJU2V0TGFzdEVycm9yKCkgaW4gR2V0RnVsbFBhdGhuYW1lLgoKCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkbGxzL01ha2VmaWxlLmluLCBkbGxzL2FkdmFwaTMyLy5jdnNpZ25vcmUsIGRsbHMvYWR2YXBpMzIvTWFrZWZpbGUuaW4sIGRsbHMvYWR2YXBpMzIvYWR2YXBpLmMsIGRsbHMvYWR2YXBpMzIvZXZlbnRsb2cuYywgZGxscy9hZHZhcGkzMi9zZWN1cml0eS5jLCBkbGxzL2FkdmFwaTMyL3NlcnZpY2UuYywgcmVsYXkzMi9hZHZhcGkzMi5zcGVjLCB3aW4zMi9BdHRpYy9hZHZhcGkuYywgd2luMzIvQXR0aWMvc2VjdXJpdHkuYywgd2luMzIvTWFrZWZpbGUuaW4sIHdpbjMyL2luaXQuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTW92ZWQgQURWQVBJMzIgZmlsZXMgdG8gZGxscy9hZHZhcGkzMi4KCUFkZGVkIHN0dWJzIGZvciBldmVudGxvZyBmdW5jdGlvbnMuCgoJKiByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL3NoZWxsbGluay5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvbGUuYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGVsbHBhdGguYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYywgaW5jbHVkZS9zaGxvYmouaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IHN0dWJzIE5UU0hDaGFuZ2VOb3RpZnlSZWdpc3RlciwgTlRTSENoYW5nZU5vdGlmeURlcmVnaXN0ZXIuCglDbGVhbnVwLCBzb21lIG1vcmUgZnVuY3Rpb25zIFVOSUNPREUgcmVhZHkuCgoJKiBkbGxzL3NoZWxsMzIvcGlkbC5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNIQ2xvbmVTcGVjaWFsSURMaXN0IGltcGxlbWVudGVkLgoJU0hHZXREYXRhRnJvbUlETGlzdEEgY29ycmVjdGVkLgoKCSogZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTaGVsbF9HZXRDYWNoZWRJbWFnZUluZGV4MzJbQXxXXSBpbXBsZW1lbnRlZC4KCgkqIG1zZG9zL2ludDIxLmMsIG1zZG9zL2ludDI1LmMsIG1zZG9zL2ludDI2LmMsIGZpbGVzL2RyaXZlLmMsIGluY2x1ZGUvZHJpdmUuaDoKCUFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUltcGxlbWVudGVkIHJhdyBkZXZpY2UgYWNjZXNzIGNhbGxzIGZvciBpb2N0bEdlbmVyaWNCbGtEZXZSZXEoKQoJYW5kIHRoZXJlZm9yZSBtb3ZlZCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIGludDJbNTZdLmMgaW50byBmaWxlcy9kcml2ZS5jLgoKCSogbXNkb3MvaW9wb3J0cy5jOiBBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglBZGRlZCBhdXRvbWF0aWMgQ01PUyBSQU0gY2hlY2tzdW0gY2FsY3VsYXRpb24uCgoJKiBkbGxzL3dpbmFzcGkvd2luYXNwaTE2LmMsIGRsbHMvd25hc3BpMzIvd2luYXNwaTMyLmMsIGRvY3VtZW50YXRpb24vYXNwaSwgcmVsYXkzMi93bmFzcGkzMi5zcGVjOgoJQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJU2VuZEFTUEkzMkNvbW1hbmQzMiBoYXMgdG8gYmUgX19jZGVjbC4KCVVwZGF0ZWQgZG9jdW1lbnRhdGlvbi9hc3BpIGFuZCByZXZlcnRlZCBhbiBFUlIgYmFjayB0byBXQVJOLgoKCSogZG9jdW1lbnRhdGlvbi9idWdyZXBvcnRzOiBKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglPZiBjb3Vyc2Ugd2Ugd2FudCB0aGUgbGFzdCAxMDAgbGluZXMsIG5vdCB0aGUgZmlyc3QgMTAwIGxpbmVzLgoJVXNlICd0YWlsJyBpbnN0ZWFkIG9mICdoZWFkJy4gQWxzbyBmaXggdGV4dCBhbGlnbm1lbnQgZnJvbQoJcHJldmlvdXMgcGF0Y2guCgoJKiBtdWx0aW1lZGlhL2pveXN0aWNrLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJUmVhZGluZyBqb3lzdGljayA1IHdoZW4gd2Ugb25seSBzdXBwb3J0IDQgc2hvdWxkIGZhaWwgaW5zdGVhZCBvZgoJaGFuZy4KCgkqIG11bHRpbWVkaWEvbWNpY2RhLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJUGxheWluZyBhIG5vbi1leGlzdGVudCBDRCBzaG91bGQgZmFpbCBpbnN0ZWFkIG9mIGNyYXNoLgoKCSogTWFrZS5ydWxlcy5pbiwgTWFrZWZpbGUuaW46IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQ2hlY2sgZm9yIG5lY2Vzc2FyeSBjb25maWd1cmUgcmVydW5zIGZvciBNYWtlZmlsZSBhbmQgTWFrZS5ydWxlcwoJZ2VuZXJhdGlvbi4KCgkqIG1pc2NlbXUvaW5zdHIuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglFbXVsYXRlcyBpbnMvb3V0cyBjb3JyZWN0bHkgZm9yIERPUyBwcm9ncmFtcy4KCgkqIG9sZS9zdG9yYWdlLmMsIHNjaGVkdWxlci9wcm9jZXNzLmMsIHNlcnZlci9jaGFuZ2UuYywgc2VydmVyL2NvbnNvbGUuYywgc2VydmVyL2V2ZW50LmMsIHNlcnZlci9maWxlLmMsIHNlcnZlci9tYXBwaW5nLmMsIHNlcnZlci9tdXRleC5jLCBzZXJ2ZXIvb2JqZWN0LmMsIHNlcnZlci9waXBlLmMsIHNlcnZlci9wcm9jZXNzLmMsIHNlcnZlci9yZXF1ZXN0LmMsIHNlcnZlci9zZW1hcGhvcmUuYywgc2VydmVyL3RocmVhZC5jLCBzZXJ2ZXIvdHJhY2UuYywgd2luMzIvZGV2aWNlLmMsIHdpbjMyL2ZpbGUuYywgZmlsZXMvZG9zX2ZzLmMsIGZpbGVzL2ZpbGUuYywgaW5jbHVkZS9kZXZpY2UuaCwgaW5jbHVkZS9maWxlLmgsIGluY2x1ZGUvc2VydmVyLmgsIGluY2x1ZGUvc2VydmVyL29iamVjdC5oLCBpbmNsdWRlL3NlcnZlci9yZXF1ZXN0LmgsIGxvYWRlci9uZS9tb2R1bGUuYywgbG9hZGVyL3BlX2ltYWdlLmMsIG1pc2MvY3J0ZGxsLmMsIG1zZG9zL2ludDIxLmMsIG1zZG9zL3Z4ZC5jOgoJSW1wbGVtZW50ZWQgZmlsZSBzaGFyaW5nIGNoZWNrcyBpbiB0aGUgc2VydmVyLgoJQWRkZWQgc2V0IGZpbGUgdGltZSBzZXJ2ZXIgcmVxdWVzdC4KCU92ZXJhbGwgY2xlYW4gdXAgb2YgdGhlIGZpbGUgaGFuZGxpbmcgKERPUyBkZXZpY2UgaGFuZGxpbmcgaXMgbm93Cglicm9rZW4sIHNob3VsZCBiZSByZWRvbmUpLgoKU2F0IEphbiAgMiAwODoyMjozNCAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbWVtb3J5L3ZpcnR1YWwuYzoKCUZpeGVkIGJ1ZyBpbiBDcmVhdGVGaWxlTWFwcGluZyB3aGVuIG5hbWUgaXMgbm90IE5VTEwuCgoJKiBzZXJ2ZXIvcmVxdWVzdC5jOiBGaXhlZCBDSEVDS19TVFJJTkcgZGlzcGxheS4KCkZyaSBKYW4gIDEgMTk6NTE6MjUgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGlmMTYzMi9rZXJuZWwuc3BlYywgbWVtb3J5L2xvY2FsLmM6CglSaWNoYXJkIEEgTG91Z2ggPHJhbG91Z2guY2VkQGRuZXQuY28udWs+CglQdXQgcmV0dXJuIHZhbHVlIG9mIExvY2FsQWxsb2MgaW4gQ1ggdG9vLgoKCSogaW5jbHVkZS9wc2Rydi5oOiBEaW1pdHJpZSBPLiBQYXVuIDxkaW1pQGNzLnRvcm9udG8uZWR1PgoJUHJvdGVjdCBhZ2FpbnN0IG11bHRpcGxlIGluY2x1ZGVzLgoKCSogZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jOiBVc2UgcHJvcGVyIHN5c3RlbSBkaXJlY3RvcnkuCgoJKiBzY2hlZHVsZXIvcHJvY2Vzcy5jOiBHb3QgcmlkIG9mIENMSUVOVF9HZXRQcm9jZXNzSW5mby4KCgkqIHdpbmRvd3MvY2xhc3MuYywgd2luZG93cy9kY2UuYywgd2luZG93cy9kZWZkbGcuYywgd2luZG93cy9kZWZ3bmQuYywgd2luZG93cy9kcml2ZXIuYywgd2luZG93cy9tc2dib3guYywgd2luZG93cy9wYWludGluZy5jLCB3aW5kb3dzL3VzZXIuYywgd2luZG93cy93aW5oZWxwLmMsIGluY2x1ZGUvd2luZS93aW51c2VyMTYuaCwgaW5jbHVkZS93aW5yZWcuaCwgaW5jbHVkZS93aW51c2VyLmgsIGxvYWRlci9tb2R1bGUuYywgbWlzYy9jb21tLmMsIG1pc2Mvc2hlbGwuYywgbWlzYy9zcG9vbGVyLmMsIG1pc2Mvc3B5LmMsIG1pc2Mvd2luc29jay5jLCBtdWx0aW1lZGlhL2F1ZGlvLmMsIG11bHRpbWVkaWEvbWNpYW5pbS5jLCBtdWx0aW1lZGlhL21jaWNkYS5jLCBtdWx0aW1lZGlhL21jaW1pZGkuYywgbXVsdGltZWRpYS9tY2l3YXZlLmMsIG11bHRpbWVkaWEvbWlkaS5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIG9iamVjdHMvY2xpcHBpbmcuYywgb2xlL29sZW9iai5jLCBjb250cm9scy9idXR0b24uYywgY29udHJvbHMvZGVza3RvcC5jLCBjb250cm9scy9pY29udGl0bGUuYywgY29udHJvbHMvc3RhdGljLmMsIGRlYnVnZ2VyL2RiZy55LCBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYywgZ3JhcGhpY3MvcHNkcnYvZXNjYXBlLmMsIGlmMTYzMi90aHVuay5jLCBpbmNsdWRlL2NhbGxiYWNrLmgsIGluY2x1ZGUvZGlzcGxheS5oLCBpbmNsdWRlL2ltYWdlbGlzdC5oLCBpbmNsdWRlL29sZS5oLCBpbmNsdWRlL3F1ZXVlLmgsIGluY2x1ZGUvc2hlbGwuaCwgaW5jbHVkZS9zdG9yYWdlLmgsIGluY2x1ZGUvc3RydWN0MzIuaCwgaW5jbHVkZS93aW5iYXNlLmgsIGluY2x1ZGUvd2luZG93cy5oOgoJTWljaGFlbCBWZWtzbGVyIDxtdmVrc2xlckB0ZWNodW5peC50ZWNobmlvbi5hYy5pbD4KCU1vdmVzIG1vcmUgc3R1ZmYgZnJvbSB3aW5kb3dzLmguCgktIGluY2x1ZGUvd2ludXNlci5oIC0gaW50ZXJmYWNlIHJlbGV2YW50IHRvIHVzZXIzMi5zcGVjCgktIGluY2x1ZGUvd2luZS93aW51c2VyMTYuaCAtIHRoZSBvbGQgMTYgYml0IGludGVyZmFjZSAoaW50ZXJuYWwgdXNlKQoJLSBpbmNsdWRlL3dpbmJhc2UuaCAtIHNvbWUgbWlub3IgdXBkYXRlcyB0byBrZWVwIHRoaW5ncyBjb2hlcmVudC4KCS0gTG90IG9mIG90aGVyIGZpbGVzIG1hZGUgdG8gaW5jbHVkZSB3aW5lL3dpbnVzZXIxNi5oLCB3aGljaCBpcyBubwoJICBsb25nZXIgaW5jbHVkZWQgZnJvbSB3aW5kb3dzLmgKCgkqIHNjaGVkdWxlci9oYW5kbGUuYzogRml4ZWQgQ2xvc2VIYW5kbGUoKSBvbiBnbG9iYWwgaGFuZGxlcy4KCgkqIFJFQURNRSwgZG9jdW1lbnRhdGlvbi9idWdyZXBvcnRzLCBkb2N1bWVudGF0aW9uL3dpbjk1bG9vaywgZG9jdW1lbnRhdGlvbi93aW5lLm1hbjoKCUphbWVzIEp1cmFuIDxqcmoxMjBAcHN1LmVkdT4KCUFkZCBzb21lIGluZm9ybWF0aW9uIHRvIHRoZSBtYW4gcGFnZSBhbmQgUkVBRE1FIGZpbGUuCglNYWtlIGRvY3VtZW50YXRpb24vd2luOTVsb29rIHNheSBbVHdlYWsuTGF5b3V0XSBpbnN0ZWFkIG9mCglbVHdlYWtzLkxheW91dF0uCglGaXggaW5jb3JyZWN0IGNvbW1hbmQgZ2l2ZW4gaW4gZG9jdW1lbnRhdGlvbi9idWdyZXBvcnRzLgoJU3RhbmRhcmQgZXJyb3Igd2FzIG5vdCBiZWluZyByZWRpcmVjdGVkLCBzbyBtb3N0IG9mIHRoZQoJb3V0cHV0IHdhcyBsb3N0LgoKCSogb2JqZWN0cy9iaXRtYXAuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglEZWxwaGkgMi4wIG5lZWRzIHRvIGFsbG9jYXRlIGEgYml0bWFwIGJpZ2dlciB0aGFuIDQwOTYgYml0cyB3aWRlLgoKCSogbWlzYy9wcmludGRydi5jOiBORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCUluaXRpYWxpemUgbHBkd05lZWRlZC4KCgkqIGlmMTYzMi9zbm9vcC5jOgoJTWFyY3VzIE1laXNzbmVyIDxNYXJjdXMuTWVpc3NuZXJAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbmNsdWRlIHN0dWZmIGV2ZW4gaWYgbm90IG9uIF9faTM4Nl9fIGZvciBkZWJ1ZyBkZWZpbmVzLgoKCSogb2xlL3ZhcmlhbnQuYzoKCU1hcmN1cyBNZWlzc25lciA8TWFyY3VzLk1laXNzbmVyQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQW5vdGhlciAvLyBjb21tZW50IGZpeGVkLgoKCSogc2VydmVyL2ZpbGUuYzoKCU1hcmN1cyBNZWlzc25lciA8TWFyY3VzLk1laXNzbmVyQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJTmVlZCA8ZXJybm8uaD4gZm9yIGVycm5vIGRlY2wuIG9uIFNvbGFyaXMuCgoJKiBpbmNsdWRlL3dpbmdkaS5oLCBpbmNsdWRlL3gxMWZvbnQuaCwgb2JqZWN0cy9mb250LmM6CglEb3VnbGFzIFJpZGd3YXkgPHJpZGd3YXlAd2luZWhxLmNvbT4KCUltcGxlbWVudCBUcmFuc2xhdGVDaGFyc2V0SW5mbywgY2hhbmdlIGNoYXJzZXQgdHlwZSB0byBCWVRFLgoKCSogY29udHJvbHMvY29tYm8uYywgY29udHJvbHMvbGlzdGJveC5jLCBpbmNsdWRlL2NvbWJvLmg6CglBbGV4IEtvcm9ia2EgPGtvcm9ia2FAZ2FsYXh5LmFtcy5zdW55c2IuZWR1PgoJQmV0dGVyIENCX1NFVENVUlNFTCBtZXNzYWdlIGhhbmRsaW5nLgoKCSogaW5jbHVkZS9xdWV1ZS5oLCBpbmNsdWRlL3RocmVhZC5oLCBzY2hlZHVsZXIvc3luY2hyby5jLCBzY2hlZHVsZXIvdGhyZWFkLmMsIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL3F1ZXVlLmM6CglNb3ZlZCBNc2dXYWl0Rm9yTXVsdGlwbGVPYmplY3QgaW1wbGVtZW50YXRpb24gdG8gVVNFUiByb3V0aW5lcywgdXNpbmcKCWEgbm9ybWFsIFdpbjMyIGV2ZW50LgoKCSogdG9vbHMvbWFrZV9yZXF1ZXN0czogU2VuZCBkZWJ1Z2dpbmcgb3V0cHV0IHRvIHN0ZGVyci4KCgkqIGZpbGVzL2NoYW5nZS5jLCBmaWxlcy9kb3NfZnMuYywgZmlsZXMvZmlsZS5jLCBpbmNsdWRlL2ZpbGUuaCwgc2NoZWR1bGVyL2NsaWVudC5jLCBzY2hlZHVsZXIvZXZlbnQuYywgc2NoZWR1bGVyL2szMm9iai5jLCBzY2hlZHVsZXIvbXV0ZXguYywgc2NoZWR1bGVyL3BpcGUuYywgc2NoZWR1bGVyL3NlbWFwaG9yZS5jLCB3aW4zMi9jb25zb2xlLmM6CglDbGVhbmVkIHVwIGFuZCByZW1vdmVkIHNvbWUgbm8gbG9uZ2VyIHVzZWQgY29kZS4KCgkqIG1lbW9yeS92aXJ0dWFsLmM6IFVzZSBzZXJ2ZXIgZmlsZSBtYXBwaW5nIG9iamVjdHMuCgoJKiBpbmNsdWRlL3NlcnZlci9vYmplY3QuaCwgaW5jbHVkZS9zZXJ2ZXIvcmVxdWVzdC5oLCBpbmNsdWRlL3NlcnZlci90aHJlYWQuaCwgc2VydmVyL01ha2VmaWxlLmluLCBzZXJ2ZXIvY29uc29sZS5jLCBzZXJ2ZXIvZmlsZS5jLCBzZXJ2ZXIvbWFpbi5jLCBzZXJ2ZXIvbWFwcGluZy5jLCBzZXJ2ZXIvb2JqZWN0LmMsIHNlcnZlci9waXBlLmMsIHNlcnZlci9yZXF1ZXN0LmMsIHNlcnZlci90aHJlYWQuYywgc2VydmVyL3RyYWNlLmMsIGluY2x1ZGUvc2VydmVyLmg6CglBZGRlZCBzZXJ2ZXItc2lkZSBmaWxlIG1hcHBpbmcgb2JqZWN0IHN1cHBvcnQuCgoJKiBtaXNjL2NydGRsbC5jOgoJSGFja2VkIHN0ZGlvIGZ1bmN0aW9ucyB0byB1c2UgV2luMzIgZmlsZSBoYW5kbGVzLiBTdGlsbCBuZWVkcyBhIHByb3BlcgoJc3RkaW8gZW11bGF0aW9uLgoKCSogbG9hZGVyL25lL21vZHVsZS5jLCBsb2FkZXIvbmUvcmVzb3VyY2UuYywgbG9hZGVyL25lL3NlZ21lbnQuYzoKCVVzZSBXaW4zMiBmaWxlIGhhbmRsZXMgaW5zdGVhZCBvZiBVbml4IG9uZXMuCgoJKiBpbmNsdWRlL21vZHVsZS5oLCBpbmNsdWRlL3BlX2ltYWdlLmgsIGluY2x1ZGUvcHJvY2Vzcy5oLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBsb2FkZXIvbW9kdWxlLmMsIGxvYWRlci9wZV9pbWFnZS5jLCBzY2hlZHVsZXIvcHJvY2Vzcy5jLCBpbmNsdWRlL2Rvc2V4ZS5oOgoJVGFrZSBpbnRvIGFjY291bnQgaGFuZGxlIGluaGVyaXRhbmNlIGZsYWcuCgpUaHUgRGVjIDMxIDE1OjU1OjE5IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBkZWJ1Z2dlci9kYl9kaXNhc20uYzoKCUNoYW5nZWQgZGJfdGFza19wcmludHN5bSB0byBhbHdheXMgcHJpbnQgYSBmdWxsIGFkZHJlc3MsIG5vIG1hdHRlcgoJd2hhdCB0aGUgb3BlcmFuZCBzaXplIGlzLgoKCSogc2NoZWR1bGVyL2NyaXRzZWN0aW9uLmM6IFJlLWltcGxlbWVudGVkIHVzaW5nIGEgcmVhbCBzZW1hcGhvcmUuCgoJKiB3aW5kb3dzL3F1ZXVlLmMsIGZpbGVzL2NoYW5nZS5jLCBmaWxlcy9maWxlLmMsIGluY2x1ZGUvazMyb2JqLmgsIGluY2x1ZGUvcHJvY2Vzcy5oLCBpbmNsdWRlL3RocmVhZC5oLCBsb2FkZXIvc2lnbmFsLmMsIG1lbW9yeS92aXJ0dWFsLmMsIG1pc2MvdG9vbGhlbHAuYywgc2NoZWR1bGVyL2NsaWVudC5jLCBzY2hlZHVsZXIvZXZlbnQuYywgc2NoZWR1bGVyL2hhbmRsZS5jLCBzY2hlZHVsZXIvazMyb2JqLmMsIHNjaGVkdWxlci9tdXRleC5jLCBzY2hlZHVsZXIvcGlwZS5jLCBzY2hlZHVsZXIvcHJvY2Vzcy5jLCBzY2hlZHVsZXIvc2VtYXBob3JlLmMsIHNjaGVkdWxlci9zeW5jaHJvLmMsIHNjaGVkdWxlci90aHJlYWQuYywgd2luMzIvY29uc29sZS5jLCB3aW4zMi9kZXZpY2UuYzoKCVJlbW92ZWQgY2xpZW50LXNpZGUgd2FpdCBmdW5jdGlvbnM7IGFsbCB3YWl0aW5nIGlzIG5vdyBkb25lIHRocm91Z2gKCXRoZSBzZXJ2ZXIuCgoJKiBzZXJ2ZXIvTWFrZWZpbGUuaW4sIHNlcnZlci9jaGFuZ2UuYywgc2VydmVyL3Byb2Nlc3MuYywgc2VydmVyL3JlcXVlc3QuYywgc2VydmVyL3RyYWNlLmMsIGluY2x1ZGUvc2VydmVyLmgsIGluY2x1ZGUvc2VydmVyL29iamVjdC5oLCBpbmNsdWRlL3NlcnZlci9yZXF1ZXN0Lmg6CglBZGRlZCBjaGFuZ2Ugbm90aWZpY2F0aW9ucy4KCUFkZGVkIGdsb2JhbCBoYW5kbGUgc3VwcG9ydC4KCldlZCBEZWMgMzAgMTI6MTE6NTIgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvdGhyZWFkLmgsIHNjaGVkdWxlci9zeW5jaHJvLmM6CglDaGFuZ2VkIHNlcnZlciB3YWl0IGxvZ2ljIGEgYml0LgoKCSogd2luMzIvY29uc29sZS5jOgoJSGFja3MgdG8gc3VwcG9ydCBzZXJ2ZXItc2lkZSBjb25zb2xlLiBTaG91bGQgYmUgcmVkb25lIHByb3Blcmx5Cglzb21lIGRheS4KCgkqIGZpbGVzL2Rvc19mcy5jLCBmaWxlcy9maWxlLmMsIGluY2x1ZGUvZmlsZS5oLCB3aW4zMi9maWxlLmMsIHdpbjMyL25ld2Zucy5jOgoJUmVpbXBsZW1lbnRlZCBSZWFkL1dyaXRlRmlsZSB0byB1c2Ugc2VydmVyIGZpbGUgZGVzY3JpcHRvcnMuCglSZW1vdmVkIGZpbGUgcG9zaXRpb24gaGFjayBhcyBpdCBpcyB3cm9uZyBmb3IgV2luMzIgKHNob3VsZCBiZSByZWRvbmUKCWZvciBXaW4xNiBvbmx5KS4KCgkqIHNjaGVkdWxlci9NYWtlZmlsZS5pbiwgc2NoZWR1bGVyL2szMm9iai5jLCBzY2hlZHVsZXIvcGlwZS5jOgoJQWRkZWQgYW5vbnltb3VzIHBpcGUgc3VwcG9ydAoKCSogaW5jbHVkZS9zZXJ2ZXIuaCwgaW5jbHVkZS9zZXJ2ZXIvb2JqZWN0LmgsIGluY2x1ZGUvc2VydmVyL3JlcXVlc3QuaCwgc2VydmVyL01ha2VmaWxlLmluLCBzZXJ2ZXIvY29uc29sZS5jLCBzZXJ2ZXIvZXZlbnQuYywgc2VydmVyL2ZpbGUuYywgc2VydmVyL211dGV4LmMsIHNlcnZlci9vYmplY3QuYywgc2VydmVyL3BpcGUuYywgc2VydmVyL3Byb2Nlc3MuYywgc2VydmVyL3JlcXVlc3QuYywgc2VydmVyL3NlbWFwaG9yZS5jLCBzZXJ2ZXIvdGhyZWFkLmMsIHNlcnZlci90cmFjZS5jOgoJQWRkZWQgc2V2ZXJhbCBmaWxlIHNlcnZlciByZXF1ZXN0cwoJQWRkZWQgc2VydmVyLXNpZGUgcGlwZXMgYW5kIGNvbnNvbGVzCgpTdW4gRGVjIDI3IDE1OjI4OjU1IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtaXNjL2NydGRsbC5jLCBtc2Rvcy9pbnQyMS5jLCBzY2hlZHVsZXIvY2xpZW50LmMsIHNjaGVkdWxlci9rMzJvYmouYywgc2VydmVyL01ha2VmaWxlLmluLCBzZXJ2ZXIvZXZlbnQuYywgc2VydmVyL2ZpbGUuYywgc2VydmVyL211dGV4LmMsIHNlcnZlci9wcm9jZXNzLmMsIHNlcnZlci9yZXF1ZXN0LmMsIHNlcnZlci9zZW1hcGhvcmUuYywgc2VydmVyL3RyYWNlLmMsIHRvb2xzL21ha2VfcmVxdWVzdHMsIGZpbGVzL2Rvc19mcy5jLCBmaWxlcy9maWxlLmMsIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgaW5jbHVkZS9maWxlLmgsIGluY2x1ZGUvc2VydmVyLmgsIGluY2x1ZGUvc2VydmVyL29iamVjdC5oLCBpbmNsdWRlL3NlcnZlci9yZXF1ZXN0LmgsIGxvYWRlci9tYWluLmMsIG1lbW9yeS92aXJ0dWFsLmM6CglBZGRlZCBiZWdpbm5pbmdzIG9mIHNlcnZlci1zaWRlIGZpbGUgaGFuZGxpbmcuCglBZGRlZCAtZGVidWdtc2cgK3NlcnZlciBzdXBwb3J0LgoJQmV0dGVyIHNlcnZlciByZXF1ZXN0IGR1bXBpbmcgZm9yIHZhcmFyZ3MgcmVxdWVzdHMuCgoJKiB3aW5kb3dzL3gxMWRydi93bmQuYzoKCUZpeGVkIFNldEZvY3VzIHRoYXQgd2FzIGJyb2tlbiB3aGVuIG1vdmVkIHRvIHgxMWRydi4KCgkqIGluY2x1ZGUvc2VydmVyL29iamVjdC5oLCBpbmNsdWRlL3NlcnZlci90aHJlYWQuaCwgc2NoZWR1bGVyL2NsaWVudC5jLCBzZXJ2ZXIvTWFrZWZpbGUuaW4sIHNlcnZlci9ldmVudC5jLCBzZXJ2ZXIvbWFpbi5jLCBzZXJ2ZXIvbXV0ZXguYywgc2VydmVyL3Byb2Nlc3MuYywgc2VydmVyL3NlbGVjdC5jLCBzZXJ2ZXIvc2VtYXBob3JlLmMsIHNlcnZlci9zb2NrZXQuYywgc2VydmVyL3RocmVhZC5jOgoJQWRkZWQgYWRkX3F1ZXVlL3JlbW92ZV9xdWV1ZSB0byBzZXJ2ZXIgb2JqZWN0IG9wZXJhdGlvbnMuCglNb3ZlZCBzZWxlY3QoKSBsb29wIGZ1bmN0aW9ucyB0byBzZWxlY3QuYy4KClNhdCBEZWMgMjYgMTk6NDc6MDAgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHByb2dyYW1zL3JlZ3Rlc3QvcmVndGVzdC5jOgoJUmVuYW1lZCBFUlIgbWFjcm8gdG8gYXZvaWQgY29uZnVzaW5nIHRoZSBtYWtlX2RlYnVnIHNjcmlwdC4KCgkqIG9sZS9zdG9yYWdlLmMsIG9sZS90eXBlbGliLmMsIGluY2x1ZGUvZDNkLmgsIGluY2x1ZGUvbW1zeXN0ZW0uaCwgaW5jbHVkZS9vbGVhdXRvLmgsIGluY2x1ZGUvc3RvcmFnZS5oLCBpbmNsdWRlL3dpbnZlcnNpb24uaCwgb2xlL2NvbXBvYmouYywgb2xlL29sZTIuYywgb2xlL29sZTJubHMuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRml4ZWQgdG9ucyBvZiBpbmNvbXBsZXRlIHByb3RvdHlwZXMsIGFzc2lnbm1lbnQncyBvZiBwb2ludGVyIHdpdGgKCWRpZmZlcmVudCBzaWduZWRuZXNzLCBzdXBlcmZsb3VzICcsJyBhbmQgJzsnIGluIHN0cnVjdHVyZXMsIHdyb25nCglyZXR1cm4tdHlwZXMsIGxvc2Ugb2YgZGlnaXRzIGFuZCBzb21lIHNtYWxsIGdsaXRjaGVzLgoKCSogZ3JhcGhpY3MveDExZHJ2L3hmb250LmMsIGluY2x1ZGUveDExZm9udC5oOgoJQWxleCBLb3JvYmthIDxrb3JvYmthQGdhbGF4eS5hbXMuc3VueXNiLmVkdT4KCUNsZWFuZWQgdXAgZm9udCBlbmNvZGluZyBoYW5kbGluZy4gQWRkZWQgJ0lnbm9yZSMnIG9wdGlvbiB0byB0aGUKCVtmb250c10gc2VjdGlvbi4gQWxzbywgZmlsZSB3aXRoIGNhY2hlZCBtZXRyaWNzIG5vdyBoYXMgdGhlIHZhbHVlIG9mCgkkRElTUExBWSBhcHBlbmRlZCB0byB0aGUgZmlsZW5hbWUuCgoJKiBwcm9ncmFtcy9jbG9jay9sYW5ndWFnZS5jLCBwcm9ncmFtcy9jbG9jay9tYWluLmMsIHByb2dyYW1zL25vdGVwYWQvZGlhbG9nLmMsIHByb2dyYW1zL25vdGVwYWQvbGFuZ3VhZ2UuYywgcHJvZ3JhbXMvbm90ZXBhZC9tYWluLmMsIHJjL3N5c3Rlc3QuYywgd2luZG93cy9tdWx0aW1vbi5jLCB3aW5kb3dzL25vbmNsaWVudC5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBmaWxlcy9wcm9maWxlLmMsIGdyYXBoaWNzL3BhdGguYywgaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL2QzZC5oLCBpbmNsdWRlL2RwbGF5LmgsIGluY2x1ZGUvZHNvdW5kLmgsIGluY2x1ZGUvb2xlLmgsIGluY2x1ZGUvb2xlb2JqLmgsIGluY2x1ZGUvc2hsb2JqLmgsIGluY2x1ZGUvdmZ3LmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgaW5jbHVkZS93aW5pb2N0bC5oLCBtaXNjL21haW4uYywgbXVsdGltZWRpYS9hdWRpby5jLCBtdWx0aW1lZGlhL2Rzb3VuZC5jLCBvbGUvb2xlMi5jLCBkZWJ1Z2dlci9zdGFicy5jLCBkbGxzL2NvbWN0bDMyL2FuaW1hdGUuYywgZGxscy9jb21jdGwzMi9oZWFkZXIuYywgZGxscy9jb21jdGwzMi9ob3RrZXkuYywgZGxscy9jb21jdGwzMi9saXN0dmlldy5jLCBkbGxzL2NvbWN0bDMyL3BhZ2VyLmMsIGRsbHMvY29tY3RsMzIvcmViYXIuYywgZGxscy9jb21jdGwzMi90b29sYmFyLmMsIGRsbHMvY29tY3RsMzIvdG9vbHRpcHMuYywgZGxscy9jb21jdGwzMi90cmFja2Jhci5jLCBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmMsIGRsbHMvc2hlbGwzMi9jb250bWVudS5jLCBkbGxzL3NoZWxsMzIvZW51bWlkbGlzdC5jLCBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQ2hhbmdlZCAvLyBjb21tZW50cyB0byAvKiAqLyBzbyBXSU5FIGNvbXBpbGVzIHdpdGggbm9uLWdjYyBjb21waWxlcnMKCWFnYWluLgoKCSogd2luZG93cy90dHlkcnYvY2xpcGJvYXJkLmMsIHdpbmRvd3MvdHR5ZHJ2L2V2ZW50LmMsIHdpbmRvd3MvdHR5ZHJ2L2luaXQuYywgd2luZG93cy94MTFkcnYvY2xpcGJvYXJkLmMsIHdpbmRvd3MveDExZHJ2L2V2ZW50LmMsIHdpbmRvd3MveDExZHJ2L2luaXQuYywgd2luZG93cy94MTFkcnYvbW91c2UuYywgd2luZG93cy94MTFkcnYvd25kLmMsIGRlYnVnZ2VyL2RiZy55LCBncmFwaGljcy9kZHJhdy5jLCBncmFwaGljcy94MTFkcnYvYml0Ymx0LmMsIGdyYXBoaWNzL3gxMWRydi9icnVzaC5jLCBncmFwaGljcy94MTFkcnYvY2xpcHBpbmcuYywgZ3JhcGhpY3MveDExZHJ2L2luaXQuYywgaW5jbHVkZS9jbGlwYm9hcmQuaCwgaW5jbHVkZS9kZHJhdy5oLCBpbmNsdWRlL2Rpc3BsYXkuaCwgaW5jbHVkZS90dHlkcnYuaCwgaW5jbHVkZS93aW4uaCwgaW5jbHVkZS94MTFkcnYuaCwgb2JqZWN0cy9wYWxldHRlLmMsIHdpbmRvd3MvZGNlLmMsIHdpbmRvd3MvZGlucHV0LmMsIHdpbmRvd3MvZGlzcGxheS5jLCB3aW5kb3dzL2lucHV0LmMsIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL3Njcm9sbC5jLCB3aW5kb3dzL3dpbi5jLCB3aW5kb3dzL3dpbnBvcy5jOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglNb3ZlZCBtb3JlIHRoaW5ncyB0byB0aGUgWDExIGRyaXZlci4KCgkqIGluY2x1ZGUvd2luZ2RpLmgsIG9iamVjdHMvYnJ1c2guYzoKCUZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBtdWx0aW1hbmlhLmNvbT4KCUZpeGVkIHRoZSBwcm90b3R5cGUgb2YgQ3JlYXRlRElCUGF0dGVybkJydXNoUHQKCgkqIGluY2x1ZGUvd2luZG93cy5oOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAbXVsdGltYW5pYS5jb20+CglSZW1vdmVkIHRoZSBDTl94eHggbWFjcm9zIHNpbmNlIHRoZXkgYXJlIG5vdCB1c2VkLCBkbyBub3QgY29ycmVzcG9uZCB0bwoJYW55IFdpbmRvd3MgZGVmaW5lIGFuZCBjb25mbGljdCB3aXRoIE1GQyBkZWZpbmVzLgoJd2luZG93cy5oIG11c3QgcHJvdmlkZSBhbGwgdGhlIGRlZmluaXRpb25zIGNvbnRhaW5lZCBpbiB3aW5iYXNlLmgKCVNvbWUgWHh4MzIgZnVuY3Rpb25zIGRpZCBub3QgaGF2ZSB0aGUgYXNzb2NpYXRlZCBYeHggbWFjcm8uCgoJKiBpbmNsdWRlL3dpbnR5cGVzLmg6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBtdWx0aW1hbmlhLmNvbT4KCUFkZGVkIGEgdHlwZWRlZiBmb3IgX19pbnQ2NCB3aGljaCBpcyBhIGJ1aWx0aW4gVmlzdWFsIEMrKyB0eXBlCglBZGRlZCBhIHR5cGVkZWYgZm9yIFBVSU5UCgoJKiBpbmNsdWRlL29iamJhc2UuaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QG11bHRpbWFuaWEuY29tPgoJUkVGSUlEIHdhcyBub3QgZGVmaW5lZC4KCgkqIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9hY2NvbmZpZy5oLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL3dpbnNvY2suaCwgbWlzYy93aW5zb2NrLmMsIGNvbmZpZ3VyZToKCVBhdmVsIFJvc2tpbiA8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+Cgljb25maWd1cmUgZmlyc3QgY2hlY2tzIHdoZXRoZXIgaXQgaXMgcG9zc2libGUgdG8gY29tcGlsZSBJUFggY29kZSB3aXRoCglHbGliYyBoZWFkZXJzLiBJZiBpdCBmYWlscywgbmV4dCBjaGVjayBkZXRlcm1pbmVzIHdoZXRoZXIgZGlyZWN0IGluY2x1c2lvbgoJb2YgPGxpbnV4L2lweC5oPiB3b3Jrcy4KCgkqIGluY2x1ZGUvdGNoYXIuaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QG11bHRpbWFuaWEuY29tPgoJUHJvdmlkZXMgdGhlIG1hcHBpbmdzLiBNQkNTIGFuZCBVbmljb2RlIGZ1bmN0aW9ucyBhcmUgbm90IGltcGxlbWVudGVkLgoJU3RhbmRhcmQgKFNCQ1MpIGZ1bmN0aW9ucyBtYXkgZXhpc3Qgb3Igbm90LCB3aXRoIHRoZSBzYW1lIG9yIGEgZGlmZmVyZW50CglzZW1hbnRpY3MuCgoJKiBkbGxzL2NvbWN0bDMyL2lwYWRkcmVzcy5jLCBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvaXBhZGRyZXNzLmg6CglBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgoJSVBhZGRyZXNzIGNvbW1vbiBjb250cm9sIGltcGxlbWVudGF0aW9uLiBGaXJzdCB0cnk7IG5lZWRzIG1vcmUgd29yayB0bwoJcmVtb3ZlIGJvcmluZyBidWdzLgoKRnJpIERlYyAyNSAwODo1NToxNSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZGxscy9zaGVsbDMyL2NvbnRtZW51LmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGluY2x1ZGUvb2xlb2JqLmgsIGluY2x1ZGUvc2hsb2JqLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVkIHRoZSBURVhUIHJlZGVmaW5lZCB3YXJuaW5ncy4KCgkqIG1zZG9zL2ludDEwLmM6IEpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJSG9vayBpbnRvIHRoZSAoc3R1YmJlZCkgcmVzaXplIGNvZGUgaW4gbXNkb3MgaW50MTAuCgoJKiBjb25zb2xlL2ludGVyZmFjZS5jLCBpbmNsdWRlL2NvbnNvbGUuaCwgaW5jbHVkZS9vcHRpb25zLmgsIGxvYWRlci9tYWluLmMsIG1pc2MvbWFpbi5jOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglBZGQgc3VwcG9ydCBmb3Igc2VsZWN0aW9uIG9mIGNvbnNvbGUgbW9kZSBkcml2ZXJzIHRvIHVzZSB1c2luZyB0aGUKCS1jb25zb2xlIG9wdGlvbi4gQ3VycmVudGx5ICJ0dHkiLCAibmN1cnNlcyIsIGFuZCAieHRlcm0iIGFyZQoJc3VwcG9ydGVkLgoJQWRkIHN0dWJzIGZvciByZXNpemluZyB0aGUgc2NyZWVuIG9uIG1vZGUgY2hhbmdlcy4KCgkqIGluY2x1ZGUvZGRlbWwuaCwgbWlzYy9kZGVtbC5jLCByZWxheTMyL3VzZXIzMi5zcGVjOgoJSmVhbi1DbGF1ZGUgQ290ZSA8amVhbi1jbGF1ZGVAbWFjYWRhbWlhbi5jb20+CglQYXJ0aWFsIGltcGxlbWVudGF0aW9uIGZvciB0aGUgZm9sbG93aW5nIERERSBBUElzOgoJRGRlQ21wU3RyaW5nSGFuZGxlcywgRGRlQ3JlYXRlU3RyaW5nSGFuZGxlLCBEZGVGcmVlU3RyaW5nSGFuZGxlLAoJRGRlUXVlcnlTdHJpbmcsIERkZVVuaW5pdGlhbGl6ZS4KClRodSBEZWMgMjQgMTY6NTk6MTcgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG9sZS9NYWtlZmlsZS5pbiwgb2xlL3BhcnNlZHQuYywgb2xlL3BhcnNlZHQuaCwgb2xlL3ZhcmlhbnQuYzoKCUplYW4tQ2xhdWRlIENvdGUgPGplYW4tY2xhdWRlQG1hY2FkYW1pYW4uY29tPgoJQWRkZWQgVmFyRGF0ZUZyb21TdHIgQVBJLgoKCSogZGxscy9jb21jdGwzMi90cmFja2Jhci5jLCBpbmNsdWRlL3RyYWNrYmFyLmg6CglBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgoJLSBUb29sdGlwIHN1cHBvcnQKCS0gVmVydGljYWwgdHJhY2tiYXJzIHN1cHBvcnRlZCBub3cKCS0gVEJTX0JPVEggc3VwcG9ydCAoZ29lcyBhbG9uZyB3aXRoIHBhcnRpYWwgY2xlYW51cCBvZiBkcmF3aW5nIGNvZGUpCgktIFVzZSBDT01DVEwzMiBoZWFwIGluc3RlYWQgb2Ygc3lzdGVtIGhlYXAKCgkqIGdyYXBoaWNzL2RkcmF3LmMsIGluY2x1ZGUvZGRyYXcuaDoKCVBldGVyIEh1bm5pc2V0dCA8aHVubmlzZUBub3J0ZWxuZXR3b3Jrcy5jb20+CglBZGRlZCBhbGwgY2xpcHBlciYzZCBzdHVicy4KCVN0YXJ0aW5nIENvbG9yS2V5IHN1cHBvcnQuCglGaXhlZCB0cmFjZSBzdGF0ZW1lbnQgaW4gRGlyZWN0RHJhd0NyZWF0ZSBhcyBmb3JtYXR0aW5nIHdhc24ndCBjb3JyZWN0LgoJQ2hhbmdlZCAicmV0dXJuIDA7IiB0byAicmV0dXJuIEREX09LIiBvciAicmV0dXJuIFNfT0siIGFzIGFwcHJvcHJpYXRlLgoJQWRkZWQgU3VyZmFjZUVudW0gZHdGbGFncy4KCgkqIGluY2x1ZGUvZHBsYXkuaCwgbXVsdGltZWRpYS9kcGxheS5jOgoJUGV0ZXIgSHVubmlzZXR0IDxodW5uaXNlQG5vcnRlbG5ldHdvcmtzLmNvbT4KCUFkZGVkIG1hY3JvcyB0byBoZWFkZXIgZmlsZSBmb3IgZWFzaWVyIGZ1bmN0aW9uIGNhbGxpbmcuCglDaGFuZ2VkIGltcGxlbWVudGF0aW9uIGEgbGl0dGxlIGJpdC4KCUFkZGVkIHN0dWJzIGZvciBkcGxheTMuIFN0aWxsIG5lZWQgdG8gYnJlYWsgaW50byBBIGFuZCBXIHZlcnNpb25zLgoKCSogd2luMzIvZmlsZS5jOiBQZXRlciBIdW5uaXNldHQgPGh1bm5pc2VAbm9ydGVsbmV0d29ya3MuY29tPgoJQ3JlYXRlRmlsZTMyQSB3YXMgb25seSBhbGxvd2luZyBjb25zb2xlIG9wZW5zIG9uIENPTklOJC9PVVQkLiBUaGlzCgloYXMgYmVlbiBjaGFuZ2VkIHRvIGhhdmUgYSBjYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmUuCgoJKiBjb250cm9scy9saXN0Ym94LmM6IEdlcmFyZCBQYXRlbCA8Zy5wYXRlbEB3YW5hZG9vLmZyPgoJRG9uJ3Qgc2VuZCBPREFfRU5USVJFIGZvciBlbXB0eSBsaXN0Ym94ZXMgKExJU1RCT1hfUGFpbnQpLgoKCSogaW5jbHVkZS93aW5iYXNlLmgsIHJlbGF5MzIva2VybmVsMzIuc3BlYywgd2luMzIva2VybmVsMzIuYzoKCUplYW4tQ2xhdWRlIENvdGUgPGplYW4tY2xhdWRlQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgdGhlIEdldEJpbmFyeVR5cGUgQVBJIGZ1bmN0aW9uLgoKCSogbG9hZGVyL2Rvcy9kb3Ntb2QuYywgbG9hZGVyL2Rvcy9kb3Ntb2QuaCwgbG9hZGVyL2Rvcy9kb3N2bS5jLCBsb2FkZXIvZG9zL21vZHVsZS5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglBZGRlZCBzb21lIG5ldyBkb3Ntb2QgY29tbXVuaWNhdGlvbiBwb3NzaWJpbGl0aWVzLCBpbmNsdWRpbmcKCWFjdGl2YXRpbmcgYSBkb3Ntb2Qtc3BlY2lmaWMgc2V0aXRpbWVyKCksIGFuZCB0aGUgY2FwdHVyZSBvZiBzb21lCgljb21tb24gc2lnbmFscywgd2hpY2ggaXMgcmV0dXJuZWQgdG8gV2luZSAocHJldmlvdXNseSBhIFNJR0lMTAoJd291bGQganVzdCBjYXVzZSBhICJkb3Ntb2Qgc3luYyBsb3N0IiB3aXRob3V0IGV4cGxhbmF0aW9uLCBub3cgaXQKCWludm9rZXMgdGhlIFdpbmUgZGVidWdnZXIpLiBJbnZva2VzIGludCAwOCB1cG9uIHJlY2VpcHQgb2YgZG9zbW9kCglTSUdBTFJNLCB0aHVzIHNpbXVsYXRpbmcgdGhlIERPUyB0aW1lci4gTWFkZSBET1MgaW50ZXJydXB0IGNhbGxzCgliZSByZXBvcnRlZCBieSAtZGVidWdtc2cgK3JlbGF5IGluc3RlYWQgb2YgLWRlYnVnbXNnICtpbnQuIEFuZAoJZml4ZWQgbm9uLWkzODYgY29tcGlsYXRpb24gb2YgZG9zbW9kLiAoQW55dGhpbmcgZWxzZT8hKQoKCSogbG9hZGVyL21haW4uYywgd2luZG93cy93aW4uYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJRGVza3RvcCB3aW5kb3cgcXVldWUgaGFuZGxpbmcgYWRhcHRlZC4KCgkqIHdpbmRvd3MvY2xpcGJvYXJkLmMsIHdpbmRvd3MvaG9vay5jLCB3aW5kb3dzL3RpbWVyLmMsIHdpbmRvd3Mvd2lucG9zLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVF1ZXVlIGhhbmRsaW5nIGFkYXB0ZWQgdG8gbmV3IHF1ZXVlIHJvdXRpbmVzLgoKCSogd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3MvcXVldWUuYywgaWYxNjMyL3VzZXIuc3BlYywgaW5jbHVkZS9xdWV1ZS5oLCBpbmNsdWRlL3Rhc2suaDoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgc3R1YiBmb3IgSW5pdFRocmVhZElucHV0LgoJVXNlIEdldFRocmVhZFF1ZXVlL0dldEZhc3RRdWV1ZSBpbnN0ZWFkIG9mIEdldFRhc2tRdWV1ZS4KCgkqIGxvYWRlci90YXNrLmMsIG1pc2NlbXUvbWFpbi5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglVc2UgQ2FsbG91dCB0YWJsZSBpbnN0ZWFkIG9mIGRpcmVjdCBHZXRQcm9jQWRkcmVzcy4KCVVzZXJZaWVsZCBtb3ZlZCB0byBVU0VSLgoKCSogaW5jbHVkZS9jYWxsYmFjay5oLCBtaXNjL2NhbGxiYWNrLmMsIGlmMTYzMi90aHVuay5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDYWxsb3V0IHRhYmxlIChmb3IgS0VSTkVMLT5VU0VSIGNhbGxzKSBhZGRlZC4KCUNhbGxiYWNrcy0+Q2FsbFBvc3RBcHBNZXNzYWdlUHJvYyByZW1vdmVkLgoKCSogbWlzYy9jYWxsYmFjay5jLCB3aW5kb3dzL3gxMWRydi9ldmVudC5jLCBpbmNsdWRlL2NhbGxiYWNrLmgsIGluY2x1ZGUvcXVldWUuaCwgaW5jbHVkZS90YXNrLmgsIGxvYWRlci90YXNrLmMsIGlmMTYzMi90aHVuay5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglIYW5kbGUgbm9uLWhhcmR3YXJlIFggZXZlbnRzIGNvcnJlY3RseSB3aXRoIG5hdGl2ZSBVU0VSCgkocmVtb3ZlZCByZWZlcmVuY2UgdG8gTUVTU0FHRVFVRVVFIGZyb20gS0VSTkVMIGNvZGUpLgoJSGFuZGxlIEV4cG9zZSBldmVudHMgd2l0aCBuYXRpdmUgVVNFUi4KCgkqIG1pc2MvY3J0ZGxsLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglCZXR0ZXIgX3VsdG9hKCkuCgoJKiB3aW4zMi90aW1lLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglGaXggc21hbGwgcHJvYmxlbSBpbiBHZXRUaW1lWm9uZUluZm9ybWF0aW9uKCkuCgoJKiB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJTG93ZXN0IHNjYW4gY29kZSBzZWVtcyB0byBiZSAxLCBub3QgemVyby4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU3R1YnMgZm9yIElEaXJlY3QzRCgyKTo6Q3JlYXRlTGlnaHQgYW5kIENyZWF0ZURldmljZSB0byBhdm9pZCBjcmFzaGVzLgoKCSogZGxscy9udGRsbC9ydGwuYywgcmVsYXkzMi9udGRsbC5zcGVjLCBkbGxzL250ZGxsL250LmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBzdHVicy4KCgkqIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRml4ZXMgY3Jhc2ggd2hlbiBydW5uaW5nIHdpdGhvdXQgZXh0ZXJuYWwgc2hlbGwzMi5kbGwuCgoJKiB3aW5kb3dzL3dpbnByb2MuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglNb3JlIG1lc3NhZ2VzIFtMQl8qLEVNXypdIHRyYW5zbGF0ZWQgMzJBIGZyb20vdG8gMzJXLgoKCSogcmVsYXkzMi91c2VyMzIuc3BlYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglEZXN0IGJ1ZmZlciB3YXMgcHJpbnRlZCBvdXQgYXMgc3RyLgoKCSogbWlzYy92ZXIuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglHZXR0aW5nIHN0cmluZ3Mgd2l0aCBWZXJRdWVyeVZhbHVlMzJXIHdhcyBicm9rZW4uIENvbXBsZXRlCglyZWNvbnN0cnVjdGlvbiBvZiB0aGUgZnVuY3Rpb24uCgoJKiBtaXNjL3Rvb2xoZWxwLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJRml4IG51bWJlciBhbmQgdHlwZSBvZiBhcmdzIGluIGRlYnVnZ2luZyBzdGF0ZW1lbnRzLgoKCSogb2xlL3N0b3JhZ2UuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAbXVkLmRlPgoJSVN0b3JhZ2UzMiB2dGFibGUgd2FzIG1pc3NpbmcgMyBzdHViIGVudHJpZXMuCgpGcmkgRGVjIDE4IDE3OjM4OjM5IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL3dpbmdkaS5oLCBvYmplY3RzL2ZvbnQuYywgcmVsYXkzMi9nZGkzMi5zcGVjOgoJRG91Z2xhcyBSaWRnd2F5IDxyaWRnd2F5QHdpbmVocS5jb20+CglEb2N1bWVudGF0aW9uIGZvciBUcmFuc2xhdGVDaGFyc2V0SW5mby4KCgkqIGRsbHMvd25hc3BpMzIvd2luYXNwaTMyLmMsIGlmMTYzMi93cHJvY3Muc3BlYywgZGxscy93aW5hc3BpL3dpbmFzcGkxNi5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJTWFrZSB0aGUgRE9TQVNQSSBwYXJ0IHVzZSB0aGUgZXhjZWxsZW50IERQTUkgUk1DQiBpbXBsZW1lbnRhdGlvbiBkb25lCglieSBPdmUgS2FhdmVuLCB3aGljaCBtYWtlcyB0aGUgY29kZSBfbXVjaF8gY2xlYW5lci4KCgkqIE1ha2UucnVsZXMuaW4sIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKCVRvZGQgVmllcmxpbmcgPHR2QHBvYm94LmNvbT4KCVVzZSAtbHdpbmUgZm9yIGxpbmtpbmcuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9xdWV1ZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IGFsd2F5cyBjbGVhciBRU18uLi4gZnJvbSAqYm90aCogY2hhbmdlQml0cyBhbmQgd2FpdEJpdHMuCglCdWdmaXg6IHF1ZXVlLT5oU2VuZGluZ1Rhc2sgaXMgKnF1ZXVlKiBoYW5kbGUsIG5vdCB0YXNrIGhhbmRsZS4KCgkqIGlmMTYzMi9zdG9yYWdlLnNwZWMsIGluY2x1ZGUvaW50ZXJmYWNlcy5oLCBpbmNsdWRlL29iamJhc2UuaCwgaW5jbHVkZS9zdG9yYWdlLmgsIG9sZS9pZnMuYywgb2xlL3N0b3JhZ2UuYzoKCUZyYW7nb2lzIEdvdWdldCA8Z291Z2V0QG1ldGFpbnRlZ3JhdGlvbi5uZXQ+CglGaXJzdCBzdGVwIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gY2FsbCBDT00gaW50ZXJmYWNlcyBmcm9tIEMrKyBjb2RlIGluCglXaW5lbGliLgoKCSogZGxscy9jb21jdGwzMi90cmVldmlldy5jLCBpbmNsdWRlL3RyZWV2aWV3Lmg6CglBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgoJUHJlbGltaW5hcnkgdG9vbHRpcCBzdXBwb3J0LgoJV01fU0VURk9OVC9HRVRGT05UIGFkZGVkLgoJU29tZSBidWcgZml4ZXMuCglVc2UgQ09NQ1RMMzIgaGVhcCBpbnN0ZWFkIG9mIHN5c3RlbSBoZWFwLgoKCSogZ3JhcGhpY3MvcGFpbnRpbmcuYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglJbXBsZW1lbnRlZCBQb2x5bGluZVRvLgoKCSogcmVsYXkzMi9udGRsbC5zcGVjOiBBZHJpYW4gSGFydmV5IDxhZHJpYW5Ac2VsZWN0LmNvbS5hdT4KCVRoZSBady4uLiBGdW5jdGlvbnMgaW4gbnRkbGwuZGxsIGFyZSBqdXN0IGFsdGVybmF0ZSBlbnRyeQoJcG9pbnRzIGZvciB0aGUgc2FtZSBmdW5jdGlvbnMgYXMgdGhlIE50Li4uIGZ1bmN0aW9uIG9mIHRoZQoJc2FtZSBuYW1lcy4gIENoYW5nZWQgbnRkbGwuc3BlYyB0byBtYXRjaCB0aGlzLgoKCSogaW5jbHVkZS9tb2R1bGUuaCwgaW5jbHVkZS9wZV9pbWFnZS5oLCBsb2FkZXIvbW9kdWxlLmMsIGxvYWRlci9wZV9pbWFnZS5jLCByZWxheTMyL2J1aWx0aW4zMi5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglSZW9yZ2FuaXplZCBQRSBtb2R1bGUgbG9hZGluZyB0byBwcmVwYXJlIGZvciBlbGYtZGxsIGxvYWRlci4KCVdJTkVfTU9EUkVGIGNyZWF0aW9uIG1vdmVkIHRvIG9uZSBjZW50cmFsIGxvY2F0aW9uLgoJQnVnZml4OiBjb3JyZWN0bHkgc2VsZWN0IG5hdGl2ZS9idWlsdC1pbiB2ZXJzaW9uIGlmIC5ETEwKCWV4dGVuc2lvbiBpcyBtaXNzaW5nIGluIExvYWRMaWJyYXJ5IGNhbGwuCgoJKiBtdWx0aW1lZGlhL21tc3lzdGVtLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQ2hhbmdlZCBlcnJvciB2YWx1ZXMgTUNJX0lOVEVSTkFMIHRvIHRoZWlyIGNvcnJlY3QgdmFsdWVzLgoKCSogbXVsdGltZWRpYS9tY2l3YXZlLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJUmVtb3ZlZCB3YXJuaW5nLgoKCSogbXVsdGltZWRpYS9tY2lzdHJpbmcuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglObyBsb25nZXIgc2VuZGluZyBkaXJlY3RseSBtZXNzYWdlcyB0byBEcml2ZXJQcm9jIGJ1dCByYXRoZXIgZ28gdGhyb3VnaAoJTUNJIGxheWVyIChyZXF1aXJlZCBmb3Igb3Blbi9jbG9zZSkuCgoJKiBtdWx0aW1lZGlhL21jaWNkYS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVJlbW92ZWQgaW5jb3JyZWN0IHBhdGNoIGZvciBNQ0lfT1BFTiBhbmMgTUNJX0NMT1NFIHBhcmFtZXRlcnMgKHRoYW5rcyB0byBSb2JlcnQgUmlnZ3MKCWZvciBwb2ludGluZyBvdXQgdGhlIGJ1Zywgc2VlIHRoZSBmaXggaW4gbWNpc3RyaW5nLmMpCglGaXhlZCBNQ0kgc2Vla2luZyBvbiBDRCBhdWRpby4KCgkqIGluY2x1ZGUvd2luZXJyb3IuaDogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTdHVicyBmb3IgV2FpdE5hbWVkUGlwZVtBfFddLgoKCSogZGxscy9zaGVsbDMyL2NsYXNzZXMuYywgZGxscy9zaGVsbDMyL2RhdGFvYmplY3QuYywgZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGRsbHMvc2hlbGwzMi9zaGxmb2xkZXIuYywgaW5jbHVkZS9zaGVsbC5oLCByZWxheTMyL3NoZWxsMzIuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU21hbGwgZml4ZXMuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YiBDb250cm9sX0ZpbGxDYWNoZV9SdW5ETEwuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNIR2V0RmlsZUluZm8zMkE6IGdldCBTSEdGSV9TWVNJQ09OSU5ERVggaW1wbGVtZW50ZWQuCgoJKiBkbGxzL3NoZWxsMzIvcGlkbC5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUlMQXBwZW5kIHNlZW1zIHRvIHdvcmsgbm93LgoKCSogcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCB3aW4zMi9rZXJuZWwzMi5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTdHVicyBmb3IgV2FpdE5hbWVkUGlwZVtBfFddLgoKVHVlIERlYyAxNSAxODowNDo1OCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZmlsZXMvZGlyZWN0b3J5LmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJRml4IEdldFRlbXBQYXRoMzIgaWYgY291bnQ9MC4KCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL211bHRpbWVkaWEuaCwgbXVsdGltZWRpYS9hdWRpby5jLCBtdWx0aW1lZGlhL2Rzb3VuZC5jLCBtdWx0aW1lZGlhL2luaXQuYywgbXVsdGltZWRpYS9tY2ljZGEuYywgbXVsdGltZWRpYS9tY2ltaWRpLmMsIG11bHRpbWVkaWEvbWlkaS5jLCBtdWx0aW1lZGlhL21peGVyLmMsIG11bHRpbWVkaWEvbW1hdXguYzoKCVRvZGQgVmllcmxpbmcgPHR2QHBvYm94LmNvbT4KCS0gYWRkIC1sb3NzYXVkaW8gaWYgbmVlZGVkLCBhbmQgYSBjaGVjayBmb3IgPHNvdW5kY2FyZC5oPiwgdG8gY29uZmlndXJlLmluCgkgIChydW4gYXV0b2NvbmYgYWZ0ZXIgdGhpcykuICBOb3RlIHRoYXQgdGhlIGNoZWNrIGhhcyBiZWVuIGFsdGVyZWQgdG8gYnJlYWsKCSAgb3V0IG9mIHRoZSBBQ19DSEVDS19IRUFERVJTIGFmdGVyIHRoZSBmaXJzdCBtYXRjaCAtIHRoaXMgaXMgc28KCSAgPHN5cy9zb3VuZGNhcmQuaD4sIGlmIGZvdW5kIG9uIE5ldEJTRCAoYSBgcmVhbCcgT1NTKSwgd2lsbCBub3QgY29uZmxpY3QKCSAgd2l0aCB0aGUgZW11bGF0ZWQgb3NzYXVkaW8uCgktIGNoZWNrIGZvciA8c291bmRjYXJkLmg+IGFsb25nIHdpdGggdGhlIG90aGVyIHR3byBpbiBhIG11dHVhbGx5LWV4Y2x1c2l2ZQoJICBtYW5uZXIgaW4gdGhlIHZhcmlvdXMgKi5jIGZpbGVzIHRoYXQgbmVlZCBpdDsgY2hhbmdlIGluY2x1ZGUgb2YKCSAgIm1tc3lzdGVtLmgiIHRvICJtdWx0aW1lZGlhLmgiIHNvIHRoaXMgbG9naWMgaXMgYWxsIGluIG9uZSBwbGFjZQoJLSBjaGFuZ2UgbWNpY2RhLmMgdG8gYWxsb3cgZm9yIENEIGF1ZGlvIG1hbmlwdWxhdGlvbiBvbiBOZXRCU0QuICBUaGlzCgkgIGluY2x1ZGVzOgoJICAqIGNoYW5naW5nIGlvY3RsKCkgY2FsbHMgdG8gYmUgTk9OLVNQTElUIHdpdGggZXhhY3RseSAzIGFyZ3M7IG9uIE5ldEJTRAoJICAgIG9zc2F1ZGlvLCBpb2N0bCgpIGlzICNkZWZpbmVkIHRvIGJlIF9vc3NfaW9jdGwgYnkgPHNvdW5kY2FyZC5oPiwgYW5kCgkgICAgbmVpdGhlciBzcGxpdHRpbmcgd2l0aCAjLWRpcmVjdGl2ZXMgbm9yIGEgdHdvLWFyZyBpb2N0bCB3b3JrOwoJICAqIGNoYW5naW5nIHRoZSAjaWYgbG9naWMgdG8gYWxsb3cgYm90aCBGcmVlQlNEIGFuZCBOZXRCU0QgdG8gc2hhcmUgdGhlCgkgICAgYXBwcm9wcmlhdGUgY29kZSBibG9ja3MKCS0gYmxvY2sgb3V0IE1JREkgY29kZSBmb3IgTmV0QlNEIChpbml0LmMpIGFuZC9vciBtaXNzaW5nIFNORENUTF9NSURJX0lORk8KCSAgKG1pZGkuYywgbWNpbWlkaS5jKS4gIE5ldEJTRCdzIE9TUyBlbXVsYXRpb24gZG9lcyBub3QgKHlldCkgc3VwcG9ydCBNSURJLgoJVGhhbmtzIGdvIHRvIG15Y3JvZnRAbmV0YnNkLm9yZyBmb3IgdGhlIDk5JSBidWxrIG9mIHRoaXMgd29yay4KCgkqIHRzeDExL1gxMV9jYWxscywgdHN4MTEvdHNfeHV0aWwuYywgd2luZG93cy94MTFkcnYvd25kLmMsIGluY2x1ZGUvdHNfeHV0aWwuaDoKCURpcmsgVGhpZXJiYWNoIDx0aGllcmJhY2hAbWF0aGVtYXRpay50dS1kYXJtc3RhZHQuZGU+CglTZXQgdGhlIGNsYXNzIGhpbnRzIGZvciBtYW5hZ2VkIHdpbmRvd3MuCgoJKiBmaWxlcy9kb3NfZnMuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglCdWdmaXg6IEdldEZ1bGxQYXRoTmFtZSBzZXRzIGxwRmlsZVBhcnQgb25seSB3aGVuIHRoZSBsYXN0IGVsZW1lbnQKCWRvZXMgbm90IGVuZCB3aXRoICdcJy4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL3dpbi5jLCBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvY29tbWRsZy5oLCBpbmNsdWRlL2RkZW1sLmgsIGluY2x1ZGUvbW91c2UuaCwgaW5jbHVkZS9zaGxvYmouaCwgaW5jbHVkZS93aW5iYXNlLmgsIGluY2x1ZGUvd2luZG93cy5oLCBpbmNsdWRlL3dpbmVycm9yLmgsIGluY2x1ZGUvd2luZ2RpLmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgbWlzYy9kZGVtbC5jLCBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2JydXNoLmMsIG9iamVjdHMvZGMuYywgb2JqZWN0cy9mb250LmMsIG9iamVjdHMvZ2Rpb2JqLmMsIHJlbGF5MzIvZ2RpMzIuc3BlYywgcmVsYXkzMi91c2VyMzIuc3BlYywgY29udHJvbHMvbWVudS5jLCBkbGxzL2NvbWN0bDMyL2NvbW1jdHJsLmMsIGdyYXBoaWNzL2JpdGJsdC5jLCBncmFwaGljcy9lc2NhcGUuYywgZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jLCBncmFwaGljcy9wYWludGluZy5jLCBncmFwaGljcy9wYXRoLmMsIGlmMTYzMi91c2VyLnNwZWM6CglQYXVsIFF1aW5uIDxwYXVscUBDT1JFTC5DQT4KCUxvdHMgb2YgbmV3IGRlZmluZXMgYW5kIHN0dWJzLgoKCSogTWFrZS5ydWxlcy5pbiwgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgoJVG9kZCBWaWVybGluZyA8dHZAcG9ib3guY29tPgoJVGhlc2UgcGF0Y2hlcyBhZGQgc3VwcG9ydCBmb3IgLS1lbmFibGUtZGxsIG9uIE5ldEJTRCwgYW5kIG1heSBldmVuIGRvIHNvIGZvcgoJRnJlZUJTRCBhLm91dC4gIE5vdywgTmV0QlNEIGNhbiB1c2UgbGlid2luZSBhcyBhIHNoYXJlZCBvYmplY3QuICBUaGFua3MgdG8KCW15Y3JvZnRAbmV0YnNkLm9yZyBmb3IgZG9pbmcgdGhpcyB3b3JrIQoKCSogdG9vbHMvd3JjL3dyaXRlcmVzLmM6IFRvZGQgVmllcmxpbmcgPHR2QHBvYm94LmNvbT4KCUdsb2JhbCBjb25zdHJ1Y3RvcnMgdXNpbmcgYC5zZWN0aW9uIC5jdG9ycycgYXJlIGJvZ3VzIGZvciBOZXRCU0QncwoJYXNzZW1ibGVyLiBVc2UgdGhlIGFwcHJvcHJpYXRlIGAuc3RhYnMnIHdoZW4gb24gTmV0QlNELgoKCSogb2xlL3ZhcmlhbnQuYzogVG9kZCBWaWVybGluZyA8dHZAcG9ib3guY29tPgoJVW5kZWZpbmVkIENIQVJfTUFYIGFuZCBDSEFSX01JTiAoI2RlZmluZWQgYnkgTmV0QlNEJ3Mgc3lzdGVtIGhlYWRlcnMpLgoJRml4ZWQgc29tZSBjb25zdGFudHMgdGhhdCBhcmUgdG9vIGJpZyBmb3IgYSBwbGFpbiBgaW50Jy4KCgkqIG9sZS92YXJpYW50LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQ2hlY2sgZm9yIE1BWEZMT0FUIGlmIEZMVF9NQVggaXNuJ3QgdGhlcmUuCgoJKiBncmFwaGljcy9wc2Rydi9NYWtlZmlsZS5pbjogVG9kZCBWaWVybGluZyA8dHZAcG9ib3guY29tPgoJZ3JhcGhpY3MvcHNkcnYgZm9yZ2V0cyB0byBwdWxsIGluIEBETExGTEFHU0AsIGFuZCBzbyBpcyBjb21waWxlZCBub24tUElDIGlmCgl1c2luZyAtLWVuYWJsZS1kbGwuCgoJKiBpbmNsdWRlL3dpbmdkaS5oLCBpbmNsdWRlL3dpbnR5cGVzLmgsIGluY2x1ZGUvd2ludXNlci5oLCBpbmNsdWRlL3dpbmRvd3MuaDoKCVZla3NsZXIgTWljaGFlbCA8bXZla3NsZXJAdGVjaHVuaXgudGVjaG5pb24uYWMuaWw+CglNb3ZlIGRlY2xhcmF0aW9ucyBmcm9tIHdpbmRvd3MuaCB0byB3aW5nZGkuaCBhbmQgd2ludXNlci5oLgoKTW9uIERlYyAxNCAxODoxNToxMSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luMzIvY29uc29sZS5jLCBmaWxlcy9NYWtlZmlsZS5pbiwgZmlsZXMvYXN5bmMuYywgZmlsZXMvZmlsZS5jLCBpbmNsdWRlL2FzeW5jLmgsIGluY2x1ZGUvZmlsZS5oLCBsb2FkZXIvc2lnbmFsLmMsIG1pc2Mvd2luc29ja19kbnMuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTWFkZSBhc3luYyBJTyAoU0lHSU8pIHN0dWZmIGZyb20gV0lOU09DSyBnZW5lcmljIHVzZWFibGUuCglBZGRlZCBhc3luYyBJTyBzdXBwb3J0IHRvIEZJTEUgYW5kIENPTlNPTEUgb2JqZWN0cy4KCgkqIG1pc2Mvd2luc29jay5jOiBTdGVwaGVuIExhbmdhc2VrIDx2b3Jsb25AZG9kZHMubmV0PgoJUHJldmVudCBzZWdmYXVsdCBpbiBzZXRzb2Nrb3B0IHdoZW4gb3B0bmFtZSBpcyBTT19MSU5HRVIgYW5kIG9wdHZhbCBpcwoJbnVsbC4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGxmb2xkZXIuYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYywgcmVsYXkzMi9zaGVsbDMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNvbWUgY2xlYW51cC4KCgkqIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU0hNYXBQSURMVG9TeXN0ZW1JbWFnZUxpc3RJbmRleCB0cnkncyB0byBkZXRlcm1pbmUgYW5kIGxvYWQgdGhlIGV4YWN0CglpY29uIGZvciBmaWxlcyAoYnkgdHlwZSkgbm93LgoKCSogZGxscy9zaGVsbDMyL2NsYXNzZXMuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgSENSX0dldERlZmF1bHRJY29uIChpbnRlcm5hbCkuCgoJKiBpbmNsdWRlL2Rvc2V4ZS5oLCBsb2FkZXIvZG9zL2Rvc3ZtLmMsIGxvYWRlci9kb3MvbW9kdWxlLmMsIG1zZG9zL2Rvc21lbS5jLCBtc2Rvcy9kcG1pLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCU1vdmVkIERQTUkgd3JhcHBlciBhbGxvY2F0aW9uIGNvZGUgdG8gZG9zbWVtLmMgdG8gUkVBTExZIG1ha2UgdGhlCglSTWNhbGwgc2hvcnRjdXRzIGluZGVwZW5kZW50IG9mIGRvc21vZC4gU1MgaGFkIGJlZW4gbGVmdCBvdXQgb2YKCXRoZSBSRUFMTU9ERUNBTEwgY29weSByb3V0aW5lcyBmb3Igc29tZSByZWFzb24sIGZpeGVkIG5vdy4gQWxzbwoJY2xlYW5lZCB1cCBhIGZldyBjb21waWxlciB3YXJuaW5ncy4KCgkqIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jOiBJYW4gUGlsY2hlciA8cGlsY2hlckBjb25jZW50cmljLm5ldD4KCUFkZGVkIGFiaWxpdHkgdG8gc3BlY2lmeSBYIGZvbnRzIHVzZWQgZm9yIEhlbHYgYW5kIFRtcyBSbW4gdHlwZWZhY2VzCgl3aXRoIERlZmF1bHRTZXJpZiBhbmQgRGVmYXVsdFNhbnNTZXJpZiBJTkkga2V5cy4KCgkqIHRvb2xzL3dyYy9wYXJzZXIueSwgdG9vbHMvd3JjL3dyYy5oLCB0b29scy93cmMvd3JpdGVyZXMuYywgdG9vbHMvd3JjL0NIQU5HRVM6CglCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJLSBBZGRlZCBhIGdsb2JhbCBsYWJlbCBmb3IgZWxmLWRsbCBsaW5raW5nIGFuZCBhIGxvbmcgd2l0aCB0aGUgcmVzb3VyY2UKCSAgc2l6ZSBhbmQgYSBsb25nIHdpdGggdGhlIGRpcmVjdG9yeSBzaXplLgoJLSBLaWxsZWQgYW4gYW5ub3lpbmcgd2FybmluZyBzaW5jZSB2ZXJzaW9uIDEuMC4wIGluIHBhcnNlci55IGFib3V0IGEKCSAgdmFyIGJlaW5nIHVzZWQgYmVmb3JlIGluaXQuCgoJKiBpbmNsdWRlL3NobG9iai5oLCBkbGxzL3NoZWxsMzIvc2hlbGxsaW5rLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglBZGRzIHRoZSBJUGVyc2lzdEZpbGUgSW50ZXJmYWNlIHRvIElTaGVsbExpbmtbV10gYW5kIGdhdmUgYm90aCBvd24KCUlDbGFzc0ZhY3RvcnlzLgoKCSogd2luMzIvY29uc29sZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCShSZWFkQ29uc29sZTMyQSk6IHNtYWxsIGFuZCBzdHVwaWQgYnVnIGZpeGVkCgkoV3JpdGVDb25zb2xlT3V0cHV0KTogYnVnIGZpeGVkIChhdHRyaWJ1dGVzIG1heSBjaGFuZ2Ugd2l0aGluIGxpbmVzKQoJYW5kIGVuaGFuY2VkIHNwZWVkd2lzZSBieSB1c2luZyBidWZmZXJpbmcuCgkoQ09OU09MRV9zdHJpbmdfMl9JUik6IGVuaGFuY2VkLCBub3cgZ2V0cyBzY2FuY29kZXMgYW5kIHZpcnR1YWxrZXljb2RlcwoKCSogbWlzYy9jcnRkbGwuYywgcmVsYXkzMi9jcnRkbGwuc3BlYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJX3VsdG9hIGltcGxlbWVudGVkLgoKCSogY29udHJvbHMvc3RhdGljLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU21hbGwgaGFjayB0byBnZXQgcmlkIG9mIGFubm95aW5nIGVycjpyZXNvdXJjZTogbWVzc2FnZSBmb3IKCU1lc3NhZ2VCb3hlcy4KCgkqIHJlbGF5MzIvZHNvdW5kLnNwZWM6IElhbiBTY2htaWR0IDxpcnNtYW5AaWFnLm5ldD4KCUZpeCBvZmYtYnktMSBlcnJvciBpbiBEaXJlY3RTb3VuZCBvcmRpbmFscy4gVGhhbmtzIHRvIFJvYmVydCBSaWdncyBmb3IKCXRoZSBwb2ludGVyLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogU3RlcGhlbiBDcm93bGV5IDxjcm93QGRlYmlhbi5vcmc+CglTYXZlIHRoZSBvcmlnaW5hbCB2aWRlbyBtb2RlIGJlZm9yZSBnb2luZyBmdWxsc2NyZWVuIGFuZCByZXN0b3JlIGl0Cgl3aGVuIHRoZSBsYXN0IERpcmVjdERyYXdfUmVsZWFzZSBpcyBjYWxsZWQuIEFsc28gZml4IGEgcHJvYmxlbSB3aGVyZQoJdGhlIHZpZXdwb3J0IHdhc24ndCBzZXQgdG8gMCwwLgoKCSogY29uc29sZS94dGVybS5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCU1hZGUgbW9yZSBjcm9zcy1wbGF0Zm9ybSBieSBjaGFuZ2luZyAtPl9maWxlbm8gdG8gZmlsZW5vKCkuCgoJKiB3aW5kb3dzL3dpbi5jOiBORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCUZpeCB0aGUgWi1vcmRlciBvZiBtYXhpbWl6ZWQvbWluaW1pemVkIGNoaWxkIHdpbmRvd3MuCgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJWExGRHMgc2hvdWxkIGJlIHdlbGwtZm9ybWVkICgxNCBoeXBoZW5zKSB0byBtYXRjaCBzY2FsYWJsZSBmb250cy4KCVN0b3Agc2xhbnQgZmllbGQgYmVjb21pbmcgd2lsZGNhcmRlZCB0b28gZWFybHkuCgoJKiB3aW5kb3dzL2ZvY3VzLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJKEZPQ1VTX1N3aXRjaEZvY3VzKSBjaGVjayBmb3IgcEZvY3VzVG8gPT0gTlVMTCBpbnN0ZWFkIG9mIGhGb2N1c1RvPT0wLgoKCSogb2xlL29sZTJubHMuYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglIYWNrIE9MRV9HZXRGb3JtYXQqIHRvIHJldHVybiBzb21ldGhpbmcgaWYgZGF0ZWxlbiA9IDAuCglSZW1vdmUgdW5uZWNlc3NhcnkgV0lOQVBJJ3MuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZyaSBEZWMgMTEgMTU6MDQ6MTEgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvcHJvY2Vzcy5oLCBpbmNsdWRlL3RsaGVscDMyLmgsIGluY2x1ZGUvdG9vbGhlbHAuaCwgbWlzYy90b29saGVscC5jLCBzY2hlZHVsZXIvazMyb2JqLmMsIHNjaGVkdWxlci9wcm9jZXNzLmM6CglQYXRyaWNrIFNwaW5sZXIgPHNwaW5sZXIucGF0cmlja0BtYXlvLmVkdT4KCUltcGxlbWVudGVkIENyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdCwgaW5jbHVkaW5nIHR3byBvZiB0aGUgcm91dGluZXMKCXVzaW5nIHNuYXBzaG90cywgUHJvY2VzczMyRmlyc3QgYW5kIFByb2Nlc3MzMk5leHQuCgoJKiByZWxheTMyL29sZWF1dDMyLnNwZWMsIGluY2x1ZGUvbWFwaWRlZnMuaCwgaW5jbHVkZS9vbGVhdXRvLmgsIGluY2x1ZGUvd2luMTZkcnYuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBvbGUvY29tcG9iai5jLCBvbGUvdmFyaWFudC5jOgoJSnVzdGluIEJyYWRmb3JkIDxqdXN0aW5AdWthbnMuZWR1PgoJTW9zdCBvZiB0aGUgY3VycmVuY3kgdmFyaWFudCBjb252ZXJzaW9uIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZC4KCU1pbm9yIGJ1Z2ZpeGVzIGFuZCBoZWFkZXIgdGlkeWluZy4KCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGxscy9yYXNhcGkzMi9NYWtlZmlsZS5pbiwgZGxscy9yYXNhcGkzMi9yYXNhcGkuYywgaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oLCBpbmNsdWRlL3Jhcy5oLCBpbmNsdWRlL3dpbnR5cGVzLmgsIHJlbGF5MzIvcmFzYXBpMzIuc3BlYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgUmFzRW51bUNvbm5lY3Rpb25zIHN0dWIuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGRsbHMvc2hlbGwzMi9zaGVsbHBhdGguYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQnVnZml4IGluIFBhdGhDb21iaW5lMzJbQXxXXS4KCVZpZXcgbWVudSBpbiBleHBsb3JlciBhbmQgb24gcmlnaHQgbW91c2UgYnV0dG9uIGlzIHdvcmtpbmcgbm93LgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglJbXBsZW1lbnRlZCAgSUxHZXREaXNwbGF5TmFtZS4KCgkqIGRsbHMvc2hlbGwzMi9jbGFzc2VzLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTdGFydGVkIGltcGxlbWVudGF0aW9uIG9mIFNoZWxsRXhlY3V0ZUV4MzJBLgoJU21hbGwgY2hhbmdlcy4KCgkqIGRsbHMvc2hlbGwzMi8uY3ZzaWdub3JlLCBkbGxzL3NoZWxsMzIvTWFrZWZpbGUuaW4sIGRsbHMvc2hlbGwzMi9zaHJlcy5yYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTW92ZWQgbWVudSByZXNvdXJjZXMgdG8gcmMtZmlsZS4KCgkqIGluY2x1ZGUvcGVfaW1hZ2UuaCwgb2xlL29sZTJubHMuYywgd2luMzIvZmlsZS5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglUd28gZGVidWcgbWVzc2FnZXMgY2xhcmlmaWVkLCBvbmUgdXNlbGVzcyBwcm90b3R5cGUgcmVtb3ZlZC4KCgkqIGluY2x1ZGUvb2xlYXV0by5oLCBvbGUvdmFyaWFudC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CgkyOTQgbWlzc2luZyBXSU5BUEkgYWRkZWQuCgoJKiB0b29scy90ZXN0cnVuOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUtpbGwgc3dhcHBlZCBvdXQgKHdpbmUpIHByb2Nlc3NlcyB0b28gYW5kIHRydW5jYXRlIGRpZmYgYWZ0ZXIgc29tZSB4eHgKCWxpbmVzLgoKCSogb2xlL29sZTJubHMuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCBTZXRMYXN0RXJyb3Igd2l0aCB3cm9uZyB2YWx1ZS4KCgkqIG1pc2MvcHJpbnRkcnYuYywgb2JqZWN0cy9lbmhtZXRhZmlsZS5jLCBncmFwaGljcy9wYWludGluZy5jLCBpbmNsdWRlL3dpbmRvd3MuaDoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJSW1wbGVtZW50IEFib3J0RG9jMTYsIG1vdmUgQWJvcnREb2MzMiBhbmQgU3RhcnREb2MzMlcgdG8KCW1pc2MvcHJpbnRkcnYuYyBhbmQgZml4IGEgZmV3IGNvbXBpbGUgd2FybmluZ3MuCgoJKiB3aW4zMi9vcmRpbmFscy5jLCB3aW5kb3dzL2RyaXZlci5jLCB3aW5kb3dzL21zZ2JveC5jLCB3aW5kb3dzL211bHRpbW9uLmMsIHdpbmRvd3MvdXNlci5jLCBkbGxzL2NvbWN0bDMyL2FuaW1hdGUuYywgZGxscy9jb21jdGwzMi9jb21ib2V4LmMsIGRsbHMvbnRkbGwvbnQuYywgaWYxNjMyL3R5cGVsaWIuc3BlYywgaW5jbHVkZS9maWxlLmgsIGxvYWRlci9kb3MvbW9kdWxlLmMsIG1zZG9zL2ludDIxLmMsIG9sZS9vbGUybmxzLmMsIG9sZS90eXBlbGliLmM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglGaXhlZCBhIGJ1bmNoIG9mIGNvbXBpbGVyIHdhcm5pbmdzLgoKCSogZmlsZXMvZmlsZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIFdpbjMyIHN5bmNocm8gdG8gRklMRXMgKHVzZWZ1bCBvbmx5IGZvciB0ZXJtaW5hbCBoYW5kbGVzKS4KClRodSBEZWMgMTAgMTY6MDQ6NTEgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG9iamVjdHMvYml0bWFwLmMsIG9iamVjdHMvZGMuYywgb2JqZWN0cy9lbmhtZXRhZmlsZS5jLCBvYmplY3RzL2ZvbnQuYywgb2JqZWN0cy9tZXRhZmlsZS5jLCByZWxheTMyL2NvbWN0bDMyLnNwZWMsIHJlbGF5MzIvZ2RpMzIuc3BlYywgcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCByZWxheTMyL21wci5zcGVjLCByZWxheTMyL3NoZWxsMzIuc3BlYywgcmVsYXkzMi90YXBpMzIuc3BlYywgcmVsYXkzMi91c2VyMzIuc3BlYywgcmVsYXkzMi93aW5zcG9vbC5zcGVjLCB3aW4zMi9jb25zb2xlLmMsIHdpbjMyL2tlcm5lbDMyLmMsIHdpbjMyL3RpbWUuYywgd2luZG93cy9pbnB1dC5jLCB3aW5kb3dzL21lc3NhZ2UuYywgZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jLCBpZjE2MzIvZGRlbWwuc3BlYywgaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL2RkZW1sLmgsIGluY2x1ZGUvc2hsb2JqLmgsIGluY2x1ZGUvd2luZG93cy5oLCBpbmNsdWRlL3dpbnR5cGVzLmgsIG1lbW9yeS9zdHJpbmcuYywgbWlzYy9kZGVtbC5jLCBtaXNjL25ldHdvcmsuYywgbWlzYy9wcmludGRydi5jLCBtaXNjL3RhcGkzMi5jLCBjb250cm9scy9lZGl0LmMsIGRsbHMvY29tY3RsMzIvTWFrZWZpbGUuaW4sIGRsbHMvY29tY3RsMzIvY29tY3RsMzJ1bmRvYy5jLCBkbGxzL2NvbWN0bDMyL3Byb3BzaGVldC5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGZpbGVzL2ZpbGUuYywgZ3JhcGhpY3MvcGFpbnRpbmcuYzoKCUZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCVN5bHZhaW4gU3QtR2VybWFpbiA8c3lsdmFpbkBtYWNhZGFtaWFuLmNvbT4KCVRodXkgTmd1eWVuIDx0aHV5QG1hY2FkYW1pYW4uY29tPgoJTG90cyBvZiBuZXcgc3R1YnMuCgoJKiBtc2Rvcy92eGQuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglMZXQgdGhlIFN5c3RlbV9UaW1lX1NlbGVjdG9yIGNsb2NrIHRpY2suCgoJKiBsb2FkZXIvZG9zL21vZHVsZS5jLCBtaXNjZW11L2luc3RyLmMsIG1zZG9zL2Rvc21lbS5jLCBncmFwaGljcy9kaXNwZGliLmMsIGdyYXBoaWNzL3ZnYS5jLCBpbmNsdWRlL21pc2NlbXUuaCwgaW5jbHVkZS92Z2EuaDoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRhcHRlZCB0byBDcmVhdGVTeXN0ZW1UaW1lciBpbnRlcmZhY2UgY2hhbmdlLgoKCSogaWYxNjMyL3N5c3RlbS5zcGVjLCBpZjE2MzIvdGh1bmsuYywgaW5jbHVkZS9jYWxsYmFjay5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgbWlzYy9jYWxsYmFjay5jLCBtaXNjL3N5c3RlbS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDbGVhbmVkIHVwIENyZWF0ZVN5c3RlbVRpbWVyIGludGVyZmFjZSBmb3IgdXNlIHdpdGggMzItYml0IGNhbGxiYWNrcy4KCShOT1RFOiAxNi1iaXQgY2FsbGJhY2tzIHN0aWxsIGRvbid0IHdvcmshKQoKCSogd2luZG93cy9tZGkuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CgktIEhhbmRsZSBXTV9NRElSRVNUT1JFIGJ5IGNhbGxpbmcgV01fU1lTQ09NTUFORCBmb3IKCXRoZSBjaGlsZCB3aW5kb3cgc28gdGhhdCB0aGUgc3lzdGVtIG1lbnUgaXMgc2V0IGNvcnJlY3RseS4KCS0gSW4gTURJQ2FzY2FkZSBhbmQgTURJVGlsZSB1c2UgV01fTURJUkVTVE9SRSBtZXNzYWdlCgl0byByZXN0b3JlIG1heGltaXplZCB3aW5kb3cgc28gdGhhdCBzeXN0ZW0gbWVudSBpcwoJaGFuZGxlZCBjb3JyZWN0bHkuCgoJKiBpbmNsdWRlL29sZWF1dG8uaCwgaW5jbHVkZS93aW5lcnJvci5oLCBvbGUvTWFrZWZpbGUuaW4sIG9sZS90eXBlbGliLmMsIG9sZS92YXJpYW50LmMsIHJlbGF5MzIvb2xlYXV0MzIuc3BlYzoKCUplYW4tQ2xhdWRlIENvdGUgPGplYW4tY2xhdWRlQG1hY2FkYW1pYW4uY29tPgoJQWRkZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFZBUklBTlQgQVBJcy4KCgkqIGZpbGVzL2RyaXZlLmM6IFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUZpeGVkIERSSVZFX0dldEZyZWVTcGFjZSB0byBoYW5kbGUgc3BhY2UgPiA0IEdCeXRlLgoKCSogZGxscy9jb21jdGwzMi90cmVldmlldy5jOiBBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgoJaGFuZGxlIFRWSUZfVEVYVCBieSBUUkVFVklFV19TZXRJdGVtIGFjY29yZGluZyB0byBNUyBkb2N1bWVudGF0aW9uLgoJYmV0dGVyIGhhbmRsaW5nIG9mIExQU1RSX1RFWFRDQUxMQkFDSzMyQQoJVFJFRVZJRVdfR2V0TmV4dHxQcmV2TGlzdEl0ZW0gZGlkbid0IGRlc2NlbmQgaW50byB2aXNpYmxlIGNoaWxkIGl0ZW1zLgoKCSogbG9hZGVyL3BlX2ltYWdlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJV2FybiBpZiB0d28gLmV4ZXMgY29uZmxpY3Qgd2l0aCBlYWNoIG90aGVyIGFuZCB0aGUgc2Vjb25kIGRvZXMgbm90CgloYXZlIHJlbG9jYXRpb24gcmVjb3Jkcy4KCgkqIG1pc2MvY29tbWRsZy5jOiBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlZCBHZXRGaWxlVGl0bGUzMkEgbm90IGZpbGxpbmcgdXAgbHBUaXRsZSBpZiBscEZpbGUgZGlkbid0Cgljb250YWluICcvJywnXFwnIG9yICc6Jy4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IFN0ZXBoZW4gQ3Jvd2xleSA8Y3Jvd0BkZWJpYW4ub3JnPgoJRml4ZWQgYSBwb3RlbnRpYWwgY3Jhc2ggaWYgYSB1c2FibGUgdmlkZW8gbW9kZSBpcyBub3QgZGV0ZWN0ZWQuCgoJKiB0b29scy9tYWtlX2F1dGhvcnM6IFNjcmlwdCB0byBnZW5lcmF0ZSBhdXRob3JzIGZpbGVzCgoJKiBpbmNsdWRlL2RpbnB1dC5oLCB3aW5kb3dzL2RpbnB1dC5jOiBSb2JlcnQgUmlnZ3MgPHJyaWdnc0B0ZXNzZXIuY29tPgoJU3R1YnMgZm9yIElEaXJlY3RJbnB1dEVmZmVjdCBhbmQgSURpcmVjdElucHV0RGV2aWNlMkEgbWV0aG9kcywKCWFzIHdlbGwgYXMgQWRkUmVmKCksIEdldENhcGFiaWxpdGVzKCksIEVudW1PYmplY3RzKCksCglHZXRQcm9wZXJ0eSgpLCBHZXRPYmplY3RJbmZvKCksIEdldERldmljZUluZm8oKSwgSW5pdGlhbGl6ZSgpLAoJYW5kIFJ1bkNvbnRyb2xQYW5lbCgpIGZvciBJRGlyZWN0SW5wdXREZXZpY2UuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBSb2JlcnQgUmlnZ3MgPHJyaWdnc0B0ZXNzZXIuY29tPgoJU2V0IHdpbmRvdyBmb2N1cyBpbiAgX2NvbW1vbl9JRGlyZWN0RHJhd19TZXREaXNwbGF5TW9kZSgpLgoKCSogbXVsdGltZWRpYS9tY2ljZGEuYzogUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCUFjY2VwdCBNQ0lfT1BFTiBhbmQgTUNJX0NMT1NFIG1lc3NhZ2VzIGluIE1DSUNEQVVESU9fRHJpdmVyUHJvYzMyKCkuCgoJKiBpbmNsdWRlL3dpbi5oLCB3aW5kb3dzL3dpbi5jLCB3aW5kb3dzL3gxMWRydi9ldmVudC5jLCB3aW5kb3dzL3gxMWRydi93bmQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJUmVtb3ZlZCBkZWZlcnJlZCBFeHBvc2UgZXZlbnRzIGhhbmRsaW5nLgoKCSogd2luZG93cy9kY2UuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglEb24ndCBjbGlwIFZpc1JnbiBhZ2FpbnN0IFggZGVza3RvcC4KCgkqIGxvYWRlci9tb2R1bGUuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglMb2FkTW9kdWxlMzIvV2luRXhlYzMyIHNob3VsZCByZXR1cm4gMTYtYml0IGhJbnN0YW5jZS9oVGFzay4KCgkqIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglTYW5pdHkgY2hlY2sgb24gZm9udCBzaXplLgoKCSogZGxscy9jb21jdGwzMi90cmVldmlldy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU1pc3NpbmcgcGFyZW50aGVzZXMgYWRkZWQuCgpXZWQgRGVjICA5IDE2OjM3OjA1IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBsb2FkZXIvdGFzay5jLCByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHdpbjMyL2NvbnNvbGUuYywgaW5jbHVkZS93aW5jb24uaDoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRW5oYW5jZWQgV2luMzIgQ29uc29sZSAoWFRFUk0pCgktIGlucHV0aGFuZGxpbmcgZW5oYW5jZWQgKGtleXMgYW5kIG1vdXNlY2xpY2tzKQoJLSB3aW4zMiBzeW5jaHJvbml6YXRpb24gKHBhcnRpYWwpCgktIGxvdHMgb2YgZW5oYW5jZW1lbnRzIHRvIGRyYXdpbmcgZnVuY3Rpb25zCgktIHNpbXBsZS9jb21wbGV4IGNvbnNvbGUgKHNpbXBsZS1zdGRpbi9zdGRvdXQgLT4gY29tcGxleC14dGVybSkuCgoJKiBjb25zb2xlL01ha2VmaWxlLmluLCBjb25zb2xlL2dlbmVyaWMuYywgY29uc29sZS9pbnRlcmZhY2UuYywgY29uc29sZS9uY3Vyc2VzLmMsIGNvbnNvbGUvdHR5LmMsIGNvbnNvbGUveHRlcm0uYywgaW5jbHVkZS9jb25zb2xlLmg6CglKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUFkZCBhIGRyaXZlciB0byBvcGVuIHVwIGEgbmV3IHh0ZXJtIHdpbmRvdyB3aGVuZXZlciBjb25zb2xlIG91dHB1dCBpcwoJbmVlZGVkLiBEZXJpdmVkIGZyb20gY29uc29sZS93aW4zMi5jIGJ1dCB3ZSBhcmUgbm90IHlldCByZWFkeSB0byBtZXJnZQoJdGhlIGNvZGUgY29tcGxldGVseS4KCgkqIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jLCBpbmNsdWRlL3dpbmRvd3MuaCwgdG9vbHMvZm50MmJkZi5jOgoJUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuYWxwaGFuZXQuY2g+CglJbXByb3ZlZCB0aGUgaGFuZGxpbmcgb2YgZm9udCBlbmNvZGluZ3MuCgoJKiBtc2Rvcy9kcG1pLmMsIGluY2x1ZGUvbWlzY2VtdS5oOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUltcGxlbWVudGVkIERQTUkgUk1DQnMgdXNpbmcgdGhlIERPUyBzdWJzeXN0ZW0sIGFuZCBhIGZldyBvdGhlcgoJaW1wcm92ZW1lbnRzLiBBbHNvLCBzb21lIHNwZWNpYWwtY2FzZWQgc2hvcnRjdXQgcGF0aHMgd2lsbCBhbGxvdyBzb21lCgljb21tb24gcmVhbC1tb2RlIGNhbGwvUk1DQiBjb21iaW5hdGlvbnMgdG8gd29yayBldmVuIHdpdGhvdXQgY2FsbGluZyB0aGUKCURPUyBzdWJzeXN0ZW0sIHRodXMgbGV0dGluZyBBUElzIGxpa2UgRE9TQVNQSSB3b3JrIHdpdGhvdXQgYW55IGRpcnR5IGhhY2tzCglldmVuIG9uIHBsYXRmb3JtcyB0aGF0IGNhbm5vdCB1c2UgZG9zbW9kLgoKCSogbXVsdGltZWRpYS90aW1lLmMsIG9sZS9jb21wb2JqLmMsIGZpbGVzL2NoYW5nZS5jLCBsb2FkZXIvbW9kdWxlLmMsIG1pc2MvbHpleHBhbmQuYywgbWlzYy9tYWluLmMsIGNvbnRyb2xzL21lbnUuYywgY29udHJvbHMvc2Nyb2xsLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNvbWUgdW5uZWNlc3NhcnkgI2luY2x1ZGUgYW5kIG1lc3NhZ2VzIHJlbW92ZWQuCgoJKiBvbGUvb2xlMm5scy5jOiBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglTb21lIHNtYWxsIGNvcnJlY3Rpb25zIHRvIEVudW1TeXN0ZW1Mb2NhbGVzMzJBVwoKVHVlIERlYyAgOCAxNTowNjozOSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogdG9vbHMvbWFrZV9YMTF3cmFwcGVycywgdHN4MTEvdHNfeGY4NnZtb2RlLmMsIGdyYXBoaWNzL2RkcmF3LmM6CglUcmllZCBhbm90aGVyIGtsdWRnZSBmb3IgdGhlIFhtZC5oIHByb2JsZW0uCgoJKiB0c3gxMS9NYWtlZmlsZS5pbiwgdHN4MTEvWDExX2NhbGxzLCB0c3gxMS90c194Zjg2dm1vZGUuYywgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGdyYXBoaWNzL2RkcmF3LmMsIGluY2x1ZGUvYWNjb25maWcuaCwgaW5jbHVkZS9jb25maWcuaC5pbiwgaW5jbHVkZS90c194Zjg2dm1vZGUuaCwgdG9vbHMvbWFrZV9YMTF3cmFwcGVyczoKCVN0ZXBoZW4gQ3Jvd2xleSA8Y3Jvd0BkZWJpYW4ub3JnPgoJQWRkZWQgZnVsbHNjcmVlbiBER0Egc3VwcG9ydC4KCgkqIG1pc2MvbWFpbi5jOiBQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KCUZpeGVkIGR1bW15IGVudHJpZXMgaW4gTUFJTl9QYXJzZUxhbmd1YWdlT3B0aW9uKCkuCgoJKiBpbmNsdWRlL21tc3lzdGVtLmgsIG11bHRpbWVkaWEvbWNpY2RhLmM6CglCcmlhbiBHZXJzdCA8YmdlcnN0QHF1YXJrLnZwcGx1cy5jb20+CglQcm9wZXJseSBpbXBsZW1lbnQgTUNJX0NEQV9TVEFUVVNfVFlQRV9UUkFDSy4KCUZpeCBhbiBvZmYtYnktb25lIGJ1ZyB3aXRoIE1DSV9TVEFUVVNfTEVOR1RILgoKCSogd2luZG93cy94MTFkcnYvZXZlbnQuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTdXBlcmZsb3VzIFdJTkFQSSByZW1vdmVkLgoKCSogbG9hZGVyL3BlX2ltYWdlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJV2FybiBhYm91dCBpbnZhbGlkIGVudHJ5cG9pbnRzIChjcmVhdGVkIGJ5IHZpcnVzZXMpIHdoaWNoIHJlc3VsdCBpbgoJV2luZSBjcmFzaGVzLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDcmVhdGUgWDExIHBhbGV0dGUgb24gRGlyZWN0RHJhd1N1cmZhY2U6OlNldFBhbGV0dGUsIG5vdCBiZWZvcmUgKHdlCgltaWdodCBub3QgaGF2ZSBhbiBYMTEgd2luZG93IHlldCkuCgoJKiBsb2FkZXIvbWFpbi5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU1vdmUgVFdFQUtfSW5pdCBmcm9tIFVTRVIgdG8gR0RJSW5pdC4KCgkqIGdyYXBoaWNzL3BhaW50aW5nLmMsIGlmMTYzMi9nZGkuc3BlYywgaW5jbHVkZS93aW5kb3dzLmgsIG1pc2MvcHJpbnRkcnYuYywgbWlzYy9zcG9vbGVyLmMsIHJlbGF5MzIvZ2RpMzIuc3BlYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJRml4IGZvciBTZXRBYm9ydFByb2MxNiwgc3R1YiBmb3IgU2V0QWJvcnRQcm9jMzIgYW5kIHRpZHkgdXAgc29tZSBvdGhlcgoJcHJpbnRpbmcgZnVuY3Rpb25zLgoKCSogd2luZG93cy9mb2N1cy5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeCBpbmNsdWRlcy4KCgkqIGdyYXBoaWNzL3gxMWRydi90ZXh0LmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeCBYMTFEUlZfRXh0VGV4dE91dCBmb3Igcm90YXRlZCB0ZXh0IGlmIGVpdGhlciBvZiBscER4LCBicmVha0V4dHJhCglvciBjaGFyRXh0cmEgYXJlIG5vbi16ZXJvLgoKCSogaW5jbHVkZS9BdHRpYy9ncmFwaGljcy5oLCBtaXNjL3NoZWxsLmMsIHdpbmRvd3MvQXR0aWMvZ3JhcGhpY3MuYywgd2luZG93cy9NYWtlZmlsZS5pbiwgd2luZG93cy9ub25jbGllbnQuYywgd2luZG93cy9zY3JvbGwuYywgY29udHJvbHMvYnV0dG9uLmMsIGNvbnRyb2xzL2NvbWJvLmMsIGNvbnRyb2xzL2Rlc2t0b3AuYywgY29udHJvbHMvaWNvbnRpdGxlLmMsIGNvbnRyb2xzL21lbnUuYywgY29udHJvbHMvc2Nyb2xsLmMsIGRsbHMvY29tY3RsMzIvdXBkb3duLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglSZXBsYWNlIEdSQVBIXyBmdW5jdGlvbnMgd2l0aCBXaW4gU0RLIGVxdWl2YWxlbnRzLgoKTW9uIERlYyAgNyAxNjoyMzo0MiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZmlsZXMvZG9zX2ZzLmM6IEFsZXhhbmRlciBMYXJzc29uIDxhbGxhQGx5c2F0b3IubGl1LnNlPgoJUmV2ZXJ0ZWQgcHJldmlvdXMgcGF0Y2guCgoJKiBpbmNsdWRlL2Rvc2V4ZS5oOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCURvbid0IGRlZmluZSBNWl9TVVBQT1JURUQgb24gbm9uLWkzODYgcGxhdGZvcm1zLgoKCSogbG9hZGVyL2Rvcy9tb2R1bGUuYywgbXNkb3MvZHBtaS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUZpeGVkIERQTUlfQ2FsbFJNUHJvYyAoSSB0aGluaykuCgoJKiBtaXNjL25ldHdvcmsuYywgcmVsYXkzMi9tcHIuc3BlYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU3R1YiBmb3IgTlBTR2V0UHJvdmlkZXJIYW5kbGVBLgoKCSogd2luZG93cy94MTFkcnYva2V5Ym9hcmQuYzogQnJpYW4gR2Vyc3QgPGJnZXJzdEBxdWFyay52cHBsdXMuY29tPgoJVGhlIHNjYW5jb2RlIFdpbmRvd3Mgc2VuZCBmb3IgZXh0ZW5kZWQga2V5cyBpcyB0aGUgc2NhbmNvZGUgb2YgdGhlCgl1bmV4dGVuZGVkIGVxdWl2YWxlbnQgb2YgdGhlIGtleSwgcGx1cyB0aGUgZXh0ZW5kZWQgZmxhZy4KCgkqIGRsbHMvd2luYXNwaS93aW5hc3BpMTYuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUZpeGVkIGEgcmVhbCBtb2RlIHByb2JsZW0uCgoJKiBsb2FkZXIvbmUvbW9kdWxlLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglORV9NT0RVTEUuc3RhY2tfc2l6ZSB3YXMgc2V0IHRvIGEgcmlkaWN1bG91c2x5IHNtYWxsIHZhbHVlIG9mIDUuCglXaW5kb3dzIHNldHMgMHgxNDAwIGluIHN1Y2ggY2FzZXMgZm9yIHByb2dyYW1zLgoKCSogY29udHJvbHMvc3RhdGljLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJV2UgZG9uJ3QgeWV0IHdhbnQgdGhlIHN0YXRpYyBjb250cm9sIHRvIGNhbGwgRGVzdHJveUljb24uCgoJKiB3aW5kb3dzL2NsYXNzLmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJQWRkZWQgY2FzZSBmb3IgR0NXX0FUT00gaW50IEdldENsYXNzTG9uZzMyQS4KCgkqIG1pc2MvbmV0d29yay5jLCByZWxheTMyL21wci5zcGVjOiBHYWVsIGRlIENoYWxlbmRhciA8Z2FlbEBsaW1zaS5mcj4KCVN0dWIgZm9yIFdOZXRPcGVuRW51bTMyVy4KCgkqIG11bHRpbWVkaWEvZHNvdW5kLmMsIHJlbGF5MzIvZHNvdW5kLnNwZWM6CglSb2JlcnQgUmlnZ3MgPHJyaWdnc0B0ZXNzZXIuY29tPgoJTW9yZSBnZW5lcmFsIGNvZGUgY2xlYW51cCBmb3IgcmVhZGFiaWxpdHkuCglBIGZldyBtb3JlIHBhcmFtZXRlciB2YWxpZGF0aW9uIGNoZWNrcy4KCVJldHVybiBEU19PSyByYXRoZXIgdGhhbiAwIGluIGEgbnVtYmVyIG9mIGZ1bmN0aW9ucy4KCUZpeGVkIHByaW1hcnkgYnVmZmVyIHJlZiBjb3VudCBidWcgaW4gQ3JlYXRlU291bmRCdWZmZXIoKS4KCUhhbmRsZSAxLTMgYnl0ZSBzb3VuZCBmcmFnbWVudHMgdGhhdCB3b3VsZCBjYXVzZSBidWZmZXIgb3ZlcnJ1bnMuCglDbGVhciBwcmltYXJ5IGJ1ZmZlciB3aXRoIGEgbmV1dHJhbCB2YWx1ZSBpbnN0ZWFkIG9mIGFsd2F5cyAwCgkoYmVjYXVzZSAxMjggaXMgbmV1dHJhbCBmb3IgOC1iaXQgc291bmQpLgoJRml4IGJ1ZyB3aXRoIG1peGluZyA4LWJpdCBzb3VuZCBpbnRvIHRoZSBwcmltYXJ5IGJ1ZmZlci4KCUJyb2tlIG91dCB0aGUgbWFpbiBibG9jayBpbiBEU09VTkRfdGhyZWFkKCkgdG8gYW5vdGhlciBmdW5jdGlvbiBmb3IKCXJlYWRhYmlsaXR5LgoJSGFuZGxlICJubyBhdWRpbyIgYW5kICJhdWRpbyBidXN5IiBjYXNlcyBwcm9wZXJseSB3aGVuIGluaXRpYWxpemluZwoJZHNvdW5kLiBSZW5hbWUgRGxsQ2FuVW5sb2FkTm93KCkgdG8gRFNPVU5EX0RsbENhblVubG9hZE5vdygpLgoKCSogZGVidWdnZXIvaGFzaC5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCU1hZGUgdmFyaWFibGVzIG9wdGltaXplZCBpbnRvIHJlZ2lzdGVycyBhY2Nlc3NpYmxlLgoKCSogcmVsYXkzMi91c2VyMzIuc3BlYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVRoZSBzcGVjIGRlZmluaXRpb24gZm9yIE1vbml0b3JGcm9tV2luZG93IHdhcyB3cm9uZy4KCgkqIG1zZG9zL2ludDIxLmM6IFN0ZWZhbiBMZWljaHRlciA8c2xlQGNhbWxpbmUuY29tPgoJRmlsZSBoYW5kbGUgYnVnIGZpeC4KCgkqIGRvY3VtZW50YXRpb24vY29tbW9uX2NvbnRyb2xzOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgcGFyYWdyYXBoIGFib3V0IGRpZmZlcmVudCBkbGwgdmVyc2lvbnMgYW5kIHN0cnVjdHVyZSBzaXplcy4KCgkqIGluY2x1ZGUvY29tbWN0cmwuaDogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIG1pc3NpbmcgVE9PTElORk8gc3RydWN0dXJlLgoKCSogbXVsdGltZWRpYS9tbXN5c3RlbS5jOiBBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglGaXhlZCBhIGhlYXAgYnVnLgoKCSogbG9hZGVyL3Rhc2suYywgbWVtb3J5L2xvY2FsLmMsIG1lbW9yeS9zZWxlY3Rvci5jLCBtaXNjL2NhbGxiYWNrLmMsIG1zZG9zL2RwbWkuYywgbXNkb3MvaW50NDEuYywgbXNkb3MvdnhkLmMsIGlmMTYzMi9rZXJuZWwuc3BlYywgaWYxNjMyL3RodW5rLmMsIGluY2x1ZGUvY2FsbGJhY2suaCwgaW5jbHVkZS9sZHQuaCwgaW5jbHVkZS93aW5kb3dzLmg6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CgktIFNldmVyYWwga2VybmVsLnNwZWMgcmV0dXJuIHR5cGUgbWlzbWF0Y2ggZml4ZXMKCS0gW0dTXWV0U2VsZWN0b3JCYXNlIFdpbjMycyBvZmZzZXQgc3VwcG9ydCBieSBVbHJpY2ggV2VpZ2FuZCAodGhhbmtzIHYubS4gISEpCgktIE1vdmUgQXBwVG9XaW5lL1dpbmVUb0FwcCBtYWNyb3MgYXMgVzMyU19BUFAyV0lORSBldGMuIHRvIGxkdC5oCgktIExvY2FsTm90aWZ5KCkgYmFzaWMgc3VwcG9ydAoJLSBGaXhlcyBmb3IgbG9jYWwgaGVhcCBoYW5kbGluZyB3aXRoIGhlYXAgaGFuZGxlcyBjcmVhdGVkIGJ5IFZpcnR1YWwqKCkKCgkqIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IC1taWNyb3NvZnQtc3ltYm9sIGVuY29kaW5nIHdhcyBub3QgcmVjb2duaXplZC4KCgkqIHdpbmRvd3Mvd2luLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBXSU5fUmVzZXRRdWV1ZVdpbmRvd3Mgd291bGQgc2tpcCBzb21lIHdpbmRvd3MuCgoJKiB0b29scy9idWlsZC5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFsbG93IHJlY3Vyc2l2ZWx5IHJlZW50ZXJpbmcgQ0FMTDMyX0xhcmdlU3RhY2suCgoJKiBpbmNsdWRlL3R0eWRydi5oLCB3aW5kb3dzL3R0eWRydi8uY3ZzaWdub3JlLCB3aW5kb3dzL3R0eWRydi9NYWtlZmlsZS5pbiwgd2luZG93cy90dHlkcnYvY2xpcGJvYXJkLmMsIHdpbmRvd3MvdHR5ZHJ2L2V2ZW50LmMsIHdpbmRvd3MvdHR5ZHJ2L2luaXQuYywgd2luZG93cy90dHlkcnYva2V5Ym9hcmQuYywgd2luZG93cy90dHlkcnYvbW91c2UuYywgd2luZG93cy90dHlkcnYvd25kLmMsIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJQWRkZWQgdGhlIG5ldyBUVFkgZHJpdmVyLgoKCSogaW5jbHVkZS9jbGlwYm9hcmQuaCwgaW5jbHVkZS9rZXlib2FyZC5oLCBpbmNsdWRlL21lc3NhZ2UuaCwgaW5jbHVkZS93aW4uaCwgaW5jbHVkZS94MTFkcnYuaCwgd2luZG93cy9jbGlwYm9hcmQuYywgd2luZG93cy9kZWZ3bmQuYywgd2luZG93cy9kaW5wdXQuYywgd2luZG93cy9kaXNwbGF5LmMsIHdpbmRvd3MvZXZlbnQuYywgd2luZG93cy9mb2N1cy5jLCB3aW5kb3dzL2tleWJvYXJkLmMsIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL25vbmNsaWVudC5jLCB3aW5kb3dzL3dpbi5jLCB3aW5kb3dzL3dpbnBvcy5jLCB3aW5kb3dzL3gxMWRydi9NYWtlZmlsZS5pbiwgd2luZG93cy94MTFkcnYvY2xpcGJvYXJkLmMsIHdpbmRvd3MveDExZHJ2L2V2ZW50LmMsIHdpbmRvd3MveDExZHJ2L2luaXQuYywgd2luZG93cy94MTFkcnYva2V5Ym9hcmQuYywgd2luZG93cy94MTFkcnYvbW91c2UuYywgd2luZG93cy94MTFkcnYvd25kLmM6CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCU1vdmVkIG1vcmUgY29kZSB0byB0aGUgWDExIGRyaXZlci4KClRodSBEZWMgIDMgMTY6Mjk6NTYgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG1zZG9zL2ludDEwLmMsIG1zZG9zL2ludDE2LmMsIG1zZG9zL2ludDIxLmMsIG1zZG9zL2ludDI5LmM6CglKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUNhbGwgdGhlIG5ldyBjb25zb2xlIGRyaXZlciBmb3Igc29tZSByb3V0aW5lcy4gVGhpcyBpcyBub3QgY29tcGxldGVseQoJZG9uZSB5ZXQgYW5kIG1vcmUgZm9yIHRlc3RpbmcgcHVycG9zZXMuCgpXZWQgRGVjICAyIDE5OjU4OjA5IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBjb25maWd1cmUuaW4sIGNvbnNvbGUvLmN2c2lnbm9yZSwgY29uc29sZS9NYWtlZmlsZS5pbiwgY29uc29sZS9nZW5lcmljLmMsIGNvbnNvbGUvaW50ZXJmYWNlLmMsIGNvbnNvbGUvbmN1cnNlcy5jLCBjb25zb2xlL3R0eS5jLCBpbmNsdWRlL2FjY29uZmlnLmgsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvY29uc29sZS5oLCBpbmNsdWRlL3dpbm50LmgsIGxvYWRlci9tYWluLmMsIG1pc2MvbWFpbi5jLCBNYWtlZmlsZS5pbiwgY29uZmlndXJlOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglBZGRlZCBjb25zb2xlIHN1cHBvcnQuCgoJKiBncmFwaGljcy94MTFkcnYvb2VtYml0bWFwLmMsIGluY2x1ZGUvYml0bWFwLmgsIGluY2x1ZGUvZ2RpLmgsIGluY2x1ZGUveDExZHJ2LmgsIGxvYWRlci9tYWluLmMsIG9iamVjdHMvQXR0aWMvb2VtYml0bWFwLmMsIG9iamVjdHMvTWFrZWZpbGUuaW4sIG9iamVjdHMvYml0bWFwLmMsIG9iamVjdHMvY3Vyc29yaWNvbi5jLCBncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmMsIGdyYXBoaWNzL3BzZHJ2L2luaXQuYywgZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jLCBncmFwaGljcy93aW4xNmRydi9wZW4uYywgZ3JhcGhpY3MveDExZHJ2L01ha2VmaWxlLmluLCBncmFwaGljcy94MTFkcnYvaW5pdC5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglNb3ZlIE9FTSByZXNvdXJjZXMgdG8gdGhlIHgxMWRydi4KCgkqIGZpbGVzL2Rvc19mcy5jOiBBbGV4YW5kZXIgTGFyc3NvbiA8YWxsYUBseXNhdG9yLmxpdS5zZT4KCU9wZW5pbmcgYSBmaWxlIGluIGEgZGlyZWN0b3J5IHdoaWNoIGRvZXNuJ3QgZXhpc3QgcmV0dXJucwoJRVJST1JfRklMRV9OT1RfRk9VTkQgaW5zdGVhZCBvZiBFUlJPUl9QQVRIX05PVF9GT1VORC4KCgkqIG1lbW9yeS9hdG9tLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJSGFuZGxlIGF0b21zICIjIG5vbiBudW1iZXIiIChvcmFjbGUgY2xpZW50KS4KClR1ZSBEZWMgIDEgMTY6MjM6MTkgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGlmMTYzMi9rZXJuZWwuc3BlYywgbWlzYy9lcnJvci5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglSZW5hbWVkIEtFUk5FTC4zMjcgdG8gSGFuZGxlUGFyYW1FcnJvciAoYXMgaW4gJ1VuZG9jLiBXaW5kb3dzJykuCglGaXhlZCB3cm9uZyBvcmRpbmFscy9wcm90b3R5cGUgZm9yIE1hcFByb2Nlc3NIYW5kbGUvR2V0TW9kdWxlRmlsZU5hbWUzMi4KCUFkZGVkIG5hbWVzIGZvciBzb21lIHVuZG9jdW1lbnRlZCBleHBvcnRzLgoKCSogbWVtb3J5L2dsb2JhbC5jLCBpZjE2MzIvdGh1bmsuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgR2xvYmFsQ2hhbmdlTG9ja0NvdW50IChLRVJORUwuMzY1KS4KCgkqIGlmMTYzMi90b29saGVscC5zcGVjLCBpbmNsdWRlL3Rvb2xoZWxwLmgsIG1lbW9yeS9oZWFwLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIExvY2FsMzJJbmZvLCBzdHVicyBmb3IgTG9jYWwzMkZpcnN0L05leHQgKEtFUk5FTC40NDQtNDQ2KS4KCgkqIGlmMTYzMi9nZGkuc3BlYywgb2JqZWN0cy9nZGlvYmouYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgR2RpRnJlZVJlc291cmNlcyAoR0RJLjYwOSkuCgoJKiBpbmNsdWRlL2Rzb3VuZC5oLCBtdWx0aW1lZGlhL2Rzb3VuZC5jOgoJUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCUZpeGVkIDgtYml0IFdBViBmb3JtYXQgaGFuZGxpbmcgKGl0IGlzIHVuc2lnbmVkIGRhdGEpLgoJRml4ZWQgb2ZmLWJ5LW9uZSBjaGVja3MgZm9yIGJ1ZmZlciB3cmFwLgoJSW5jcmVtZW50IHJlZiBjb3VudCBmb3IgcHJpbWFyeSBidWZmZXIgaW4gQ3JlYXRlU291bmRCdWZmZXIoKS4KCUFkZGVkIERTQlBOX09GRlNFVFNUT1Agc3VwcG9ydCB0byBwb3NpdGlvbiBub3RpZmljYXRpb24gY29kZS4KCUxvdHMgb2YgbWlub3IgcGFyYW1ldGVyIHZhbGlkYXRpb24gY2hlY2tzLgoJU3R1YnMgZm9yOiBJRGlyZWN0U291bmRfaW5pdGlhbGl6ZSgpLCBJRGlyZWN0U291bmRfQ29tcGFjdCgpLAoJYW5kIElEaXJlY3RTb3VuZF9HZXRTcGVha2VyQ29uZmlnKCkuCglGaXhlZCBmcmVxIHNoaWZ0aW5nIHdpdGggMTYtYml0IGRhdGEgcHJvYmxlbSwgZml4ZWQgOGJpdDwtPjE2Yml0Cgljb252ZXJzaW9uLgoJTG90cyBvZiB0aHJlYWQgbG9ja2luZyBmb3IgRGlyZWN0U291bmQgYnVmZmVycy4KCURlYWxsb2MgcHJpbWFyeSBidWZmZXIgd2hlbiBkc291bmQgaXMgZGVhbGxvY2F0ZWQuCgoJKiBpbmNsdWRlL3dpbnR5cGVzLmg6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCB0aGUgVEVYVCgpIGFuZCBNQUtFTFJFU1VMVCgpIGRlZmluaXRpb25zLgoKCSogd2luZG93cy9xdWV1ZS5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNtYWxsIGNoYW5nZS4KCgkqIE1ha2VmaWxlLmluOiBKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglSZXZlcnQgbWlzZ3VpZGVkIGNoYW5nZSB0byBpbnN0YWxsX2xpYiB0aGF0IGJyb2tlIC1kaXNhYmxlLWxpYgoJY29uZmlndXJlIG9wdGlvbi4KCgkqIG1pc2MvbWFpbi5jLCBpbmNsdWRlL3dpbmRvd3MuaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IHBhcmFtZXRlciBTUElfR0VURFJBR0ZVTExXSU5ET1cuCglPbmUgbWlzc2luZyBicmVhayBpbiBTUElfR0VURFJBR0ZVTExXSU5ET1cuCgoJKiBkbGxzL3NoZWxsMzIvcGlkbC5jLCByZWxheTMyL3NoZWxsMzIuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IGZ1bmN0aW9ucyBJTEdsb2JhbENsb25lL0lMR2xvYmFsRnJlZS4KCgkqIGRvY3VtZW50YXRpb24vcHJpbnRpbmc6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUFkZCBhIG5vdGUgYWJvdXQgV2luUHJpbnRlcnMuCgoJKiByZWxheTMyL250ZGxsLnNwZWMsIHJlbGF5MzIvb2xlMzIuc3BlYywgcmVsYXkzMi91c2VyMzIuc3BlYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgc29tZSBzdHVicywgc29tZSBwdHItPnN0ciBjb252ZXJzaW9ucy4KCgkqIGdyYXBoaWNzL2RkcmF3LmMsIGluY2x1ZGUvZGRyYXcuaCwgcmVsYXkzMi9kZHJhdy5zcGVjOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIGFkZGVkIGRlZmluaXRpb24gb2YgRGlyZWN0RHJhd0NyZWF0ZUNsaXBwZXIuCgktIG1vcmUgdmVyc2F0aWxlIHN1cHBvcnQgb2Ygc3VyZmFjZXMgLyBiZXR0ZXIgc3VyZmFjZSBkZXNjcmlwdGlvbiBzdXBwb3J0LgoKCSogZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hlbGxwYXRoLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGluY2x1ZGUvc2hlbGwuaCwgcmVsYXkzMi9zaGVsbDMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVkIHdyb25nIHBhcmFtZXRlciBjb3VudCBmb3IgU0hDaGFuZ2VOb3RpZnlEZXJlZ2lzdGVyLCAgU0hGcmVlVW51c2VkTGlicmFyaWVzLgoJTmV3IGZ1bmN0aW9ucyBQYXJzZUZpZWxkLCBHZXQvU2V0SW5zdGFuY2VFeHBsb3JlcigpLCBQYXRoSXNVTkMsIFBhdGhJc1JlbGF0aXZlLgoJU3R1YnMgU0hXYWl0Rm9yRmlsZVRvT3BlbiwgUGF0aEZpbmRPblBhdGguCgoJKiByZWxheTMyL3VzZXIzMi5zcGVjOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNtYWxsIGNoYW5nZXMgdG8gcHJpbnQgdGhlIHN0cmluZ3MgaW4gdGhlIHJlbGF5LXRyYWNlLgoKCSogd2luZG93cy9jbGFzcy5jOiBORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCVRoZSBjbGFzcyBuYW1lIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIGdldHB0ci4KCgkqIG11bHRpbWVkaWEvbWNpbWlkaS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUZpeGVkIG1lbW9yeS9zdGF0dXMgcmVjb3Zlcnkgd2hlbiBlcnJvciBvY2N1cmVkIGluIE1JRElfbWNpT3Blbi4KCUZpeGVkIHN1cHBvcnQgZm9yIFJNSUQgZmlsZXMgaW4gTUlESV9tY2lPcGVuLgoJRml4ZWQgYnVnIGZvciBwbGF5aW5nIE1JREkgZmlsZXMgd2l0aCB0ZW1wbyBjaGFuZ2VzLiBTb3VuZCBvdXRwdXQgaXMKCW5vdyBjb3JyZWN0LCBidXQgbGVuZ3RoIG9mIHRyYWNrcyAoYW5kIHRoZXJlZm9yZSBvZiB3aG9sZSBmaWxlKSBpcyBub3QKCWNvcnJlY3QuCglDaGFuZ2VkIGVycm9yIHZhbHVlcyAoSU5URVJOQUwgPT4gSU5WQUxJRF9GSUxFKSB3aGVuIGZpbGUgY2Fubm90IGJlIHJlYWQuCgoJKiBtdWx0aW1lZGlhL21jaXdhdmUuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCBtZW1vcnkvc3RhdHVzIHJlY292ZXJ5IHdoZW4gZXJyb3Igb2NjdXJlZCBpbiBXQVZFX21jaU9wZW4uCglDaGFuZ2VkIGVycm9yIHZhbHVlcyAoSU5URVJOQUwgPT4gSU5WQUxJRF9GSUxFKSB3aGVuIGZpbGUgY2Fubm90CgliZSByZWFkLgoKCSogbXVsdGltZWRpYS9tc3ZpZGVvLmMsIHJlbGF5MzIvbXN2ZnczMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTdHVicyBmb3IgTUNJV25kQ3JlYXRlW0F8V10uCgoJKiBtaXNjL3Zlci5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVZlclF1ZXJ5VmFsdWUsIGJ1Z2ZpeDogd2UgY2FudCBjb252ZXJ0IGJpbmFyeSBkYXRhIHdpdGgKCUhFQVBfc3RyZHVwV3RvQSAoXFZhckZpbGVJbmZvXFRyYW5zbGF0aW9uKS4KCk1vbiBOb3YgMzAgMTc6NDE6MTcgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHJlbGF5MzIvYWR2YXBpMzIuc3BlYywgd2luMzIvYWR2YXBpLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN0dWJzIGZvciBFbnVtU2VydmljZVN0YXR1czMyLCBzbWFsbCBjaGFuZ2VzLgoKCSogb2JqZWN0cy9jdXJzb3JpY29uLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTG9hZCBub3cgdGhlIGZpcnN0IGljb24gZnJvbSB0aGUgKi5hbmkgZmlsZSBpbnN0ZWFkIG9mIGNyYXNoaW5nLgoKCSogbWlzY2VtdS9tYWluLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4IHdhcm5pbmdzIGluIG1pc2NlbXUvbWFpbi5jLgoKCSogaW5jbHVkZS93aW5kb3dzLmg6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CgktIGFkZGVkIHNvbWUgZGVmaW5lcyBhcm91bmQgdGhlIENvbW1Qb3J0IChQVVJHRV9YWFggYW5kIE1TX1hYWF9PTikKCS0gYWRkZWQgdGhlIERMR1RFTVBMQVRFIGFuZCBETEdJVEVNVEVNUExBVEUgc3RydWN0dXJlcwoJLSBhZGRlZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3IgU3RhcnRQYWdlLEVuZFBhZ2UsR2V0Q29tbU1hc2ssCgkJR2V0Q29tbU1vZGVtU3RhdHVzIGFuZCBQdXJnQ29tbSxXYWl0Q29tbUV2ZW50LgoKCSogd2luZG93cy9kZWZ3bmQuYzogUGF1bCBRdWlubiA8UGF1bFFAY29yZWwuY29tPgoJRml4ZWQgYWN0aXZhdGlvbi9Gb2N1cyBtZXNzYWdlIG9yZGVyIHByb2JsZW0gd2hlbiBjcmVhdGluZyBhIG5ldyBIV05ELgoKCSogd2luZG93cy93aW5wb3MuYywgaWYxNjMyL3VzZXIuc3BlYywgaW5jbHVkZS93aW5kb3dzLmgsIHJlbGF5MzIvdXNlcjMyLnNwZWM6CglQYXVsIFF1aW5uIDxQYXVsUUBjb3JlbC5jb20+CglJbXBsZW1lbnRhdGlvbiBvZiBDaGlsZFdpbmRvd0Zyb21Qb2ludEV4IGZ1bmN0aW9ucy4KCgkqIG1pc2MvcmVnaXN0cnkuYzogR2F2cmllbCBTdGF0ZSA8Z2F2cmllbHNAY29yZWwuY29tPgoJRml4ZWQgcmVnaXN0cnkgcXVlcnkgZXJyb3IgdmFsdWU6IG5vdyByZXR1cm5zIEVSUk9SX0ZJTEVfTk9UX0ZPVU5ELgoKCSogb2JqZWN0cy9iaXRtYXAuYywgb2JqZWN0cy9jdXJzb3JpY29uLmMsIG9iamVjdHMvZGliLmMsIG9iamVjdHMvcGFsZXR0ZS5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglHZXRTeXN0ZW1QYWxldHRlRW50cmllcyByZXR1cm5zIHBhbGV0dGUgc2l6ZSBpZiBlbnRyaWVzPT1OVUxMLgoJVXNlIHRoaXMgaW5zdGVhZCBvZiBDT0xPUl9HZXRTeXN0ZW1QYWxldHRlU2l6ZS4KCgkqIHJlbGF5MzIvZHNvdW5kLnNwZWMsIG11bHRpbWVkaWEvZHNvdW5kLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUltcGxlbWVudGVkIGNsYXNzIGZhY3RvcnkgZm9yIGRzb3VuZC4KCgkqIHJlbGF5MzIva2VybmVsMzIuc3BlYywgbWlzYy9jb21tLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CgktIGZpeGVkIGEgbWluaW1hbCBlcnJvciBpbiBHZXRDb21tTWFzayBkZWZpbml0aW9uLgoJLSBhZGRzIHN0dWJzIGZvciBHZXRDb21tTW9kZW1TdGF0dXMgYW5kIFdhaXRDb21tRXZlbnQuCgoJKiBpbmNsdWRlL3htYWxsb2MuaCwgbGlicmFyeS93aW5lc3R1Yi5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRml4ZXMgZm9yIEMrKyBXaW5lbGliIGNvbXBpbGF0aW9uLgoKCSogb2xlL2NvbXBvYmouYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglCdWdmaXg6IHNlY29uZCBSZWdPcGVuS2V5IHNob3VsZCB1c2UgQ0xTSURrZXkgaW5zdGVhZCBvZiBIS0VZX0NMQVNTRVNfUk9PVC4KCkZyaSBOb3YgMjcgMTY6MDY6MDggMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIEJVR1MsIGRvY3VtZW50YXRpb24vYnVncmVwb3J0cywgZG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmcsIGRvY3VtZW50YXRpb24vbm8td2luZG93cywgZG9jdW1lbnRhdGlvbi93aW5lLm1hbjoKCUphbWVzIEp1cmFuIDxqcmoxMjBAcHN1LmVkdT4KCURvY3VtZW50YXRpb24gdXBkYXRlcy4KCgkqIE1ha2VmaWxlLmluOiBKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglGaXhlZCAnbWFrZSBpbnN0YWxsJyB0byByZWFsbHkgY2hlY2sgZm9yIGxpYndpbmUuYSBiZWZvcmUgaW5zdGFsbGluZwoJaXQuCgoJKiBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL29wdGlvbnMuaCwgbWlzYy9tYWluLmM6CglTdGVwaGVuIENyb3dsZXkgPGNyb3dAZGViaWFuLm9yZz4KCUFkZGVkIGEgbmV3IGNtZGxpbmUgc3dpdGNoIHRvIGRpc2FibGUgWEY4NiBER0EgRXh0ZW5zaW9ucywgLW5vZGdhLgoKCSogZmlsZXMvZHJpdmUuYzogQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJSW1wcm92ZWQgR2V0RGlza0ZyZWVTcGFjZTMyQSgpLgoKVGh1IE5vdiAyNiAxNjozMjowMCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luZG93cy93aW4uYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglSZW1vdmUgaW5jbHVkZWQgY29sb3IuaC4KCgkqIGxvYWRlci9wZV9pbWFnZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJlbW92ZSB1bm5lY2Vzc2FyeSBjaGVjayBmb3IgZW50cnlwb2ludCBhZGRyZXNzICh0ZXN0IGJpbmFyeSB3YXMKCWluZmVjdGVkIGJ5IGEgdmlydXMgd2hpY2ggdXNlcyBpbnZhbGlkIFBFIGxvYWRpbmcgc3R1ZmYpLgoKCSogZ3JhcGhpY3MvcGFpbnRpbmcuYywgcmVsYXkzMi9nZGkzMi5zcGVjOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQWRkZWQgc3R1YnMgZm9yIFN0YXJ0cGFnZSBhbmQgRW5kUGFnZS4KCgkqIGlmMTYzMi90aHVuay5jLCBvYmplY3RzL2RjLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVJlbW92ZWQgc29tZSB1bm5lY2Vzc2FyeSBGSVhNRSBvdXRwdXRzLgoKCSogaWYxNjMyL2tlcm5lbC5zcGVjLCBsb2FkZXIvdGFzay5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBLRVJORUwuNjAyIGFuZCBzdHViIGZvciBLRVJORUwuNDkwLgoKCSogb2xlL29sZTJubHMuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IERvICpub3QqIHplcm8gb3V0IG91dHB1dCBidWZmZXIgaW4gR2V0TnVtYmVyRm9ybWF0MzJbQVddLgoKV2VkIE5vdiAyNSAxODoxNTo1MyAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogb2xlL25scy9ncmMubmxzLCBvbGUvbmxzL3NreS5ubHMsIG9sZS9ubHMvdGhhLm5scywgb2xlL25scy90cmsubmxzLCBvbGUvb2xlMm5scy5jOgoJUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuYWxwaGFuZXQuY2g+CglTbWFsbCBmaXhlcy4KCgkqIGxvYWRlci9uZS9yZXNvdXJjZS5jLCBpbmNsdWRlL21vZHVsZS5oLCBsb2FkZXIvcmVzb3VyY2UuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJTW92ZWQgLi4uUmVzb3VyY2UxNiByb3V0aW5lcyB0byBsb2FkZXIvcmVzb3VyY2UuYy4KCUltcGxlbWVudGVkIGFjY2Vzc2luZyBQRS1maWxlIHJlc291cmNlcyB3aXRoIDE2LWJpdCByZXNvdXJjZSByb3V0aW5lcy4KCgkqIGlmMTYzMi9rZXJuZWwuc3BlYywgbG9hZGVyL25lL01ha2VmaWxlLmluLCBsb2FkZXIvbmUvY29udmVydC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRhdGlvbiBvZiBQRS0+TkUgcmVzb3VyY2UgY29udmVyc2lvbiByb3V0aW5lcyAoS0VSTkVMLjYxNS02MTgpLgoKCSogaW5jbHVkZS9vbGVhdXRvLmgsIG9sZS9vbGUyZGlzcC5jLCByZWxheTMyL29sZWF1dDMyLnNwZWM6CglGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglJbXBsZW1lbnRlZCAzIG1ldGhvZHM6IFN5c0FsbG9jU3RyaW5nTGVuKCksIFN5c1JlQWxsb2NTdHJpbmdMZW4oKQoJYW5kIFN5c1N0cmluZ0xlbigpLiBFbnN1cmUgdGhhdCB0aGUgQlNUUiBvYmplY3RzIHdlcmUgYWxsb2NhdGVkCglhY2NvcmRpbmcgdG8gdGhlIFdpbmRvd3MgZG9jdW1lbnRhdGlvbi4KCgkqIGRsbHMvc2hlbGwzMi9NYWtlZmlsZS5pbiwgZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NoZWxscGF0aC5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBpbmNsdWRlL3NoZWxsLmgsIHJlbGF5MzIvc2hlbGwzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglNb3ZlZCBleGlzdGluZyBwYXRoIC0gZnVuY3Rpb25zIHRvIHNoZWxscGF0Y2guYy4KCU5ldzogUGF0aFJlbW92ZUJsYW5rczMyQXxXLCAgUGF0aE1hdGNoU3BlYzMyQXxXLAoJUGF0aFNldERsZ0l0ZW1QYXRoMzJBfFcuCgoJKiBkbGxzL3NoZWxsMzIvZm9sZGVycy5jLCBkbGxzL3NoZWxsMzIvc2hlbGxsaW5rLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBpbmNsdWRlL3NobG9iai5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglNb3ZlZCBleGlzdGluZyBJU2hlbGxMaW5rIGNsYXNzLiBOZXcgc3R1YnMgZm9yIElTaGVsbExpbmtXLgoKCSogaW5jbHVkZS9iaXRtYXAuaCwgaW5jbHVkZS9jb2xvci5oLCBpbmNsdWRlL2dkaS5oLCBpbmNsdWRlL3gxMWRydi5oLCBpbmNsdWRlL3gxMWZvbnQuaCwgbWlzYy9tYWluLmMsIG9iamVjdHMvYml0bWFwLmMsIG9iamVjdHMvY29sb3IuYywgb2JqZWN0cy9kYy5jLCBvYmplY3RzL2dkaW9iai5jLCB3aW5kb3dzL0F0dGljL2dyYXBoaWNzLmMsIHdpbmRvd3MvZGNlLmMsIHdpbmRvd3MvZGlzcGxheS5jLCB3aW5kb3dzL2V2ZW50LmMsIHdpbmRvd3MvaW5wdXQuYywgd2luZG93cy9tb3VzZS5jLCB3aW5kb3dzL3Njcm9sbC5jLCB3aW5kb3dzL3N5c21ldHJpY3MuYywgd2luZG93cy91c2VyLmMsIGdyYXBoaWNzL2RkcmF3LmMsIGdyYXBoaWNzL3BhaW50aW5nLmMsIGdyYXBoaWNzL3dpbmcuYywgZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jLCBncmFwaGljcy94MTFkcnYvYml0bWFwLmMsIGdyYXBoaWNzL3gxMWRydi9icnVzaC5jLCBncmFwaGljcy94MTFkcnYvY2xpcHBpbmcuYywgZ3JhcGhpY3MveDExZHJ2L2RpYi5jLCBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYywgZ3JhcGhpY3MveDExZHJ2L2luaXQuYywgZ3JhcGhpY3MveDExZHJ2L3Blbi5jLCBncmFwaGljcy94MTFkcnYvdGV4dC5jLCBncmFwaGljcy94MTFkcnYveGZvbnQuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJUmVtb3ZlIFhfRENfSU5GTyBmcm9tIERDIGFuZCBtYWtlIGl0IGJlaGF2ZSBsaWtlIGFueSBvdGhlciBQREVWSUNFLgoKCSogaW5jbHVkZS9taXNjZW11LmgsIG1zZG9zL2RwbWkuYywgbXNkb3MvaW50MjEuYywgbXNkb3MvaW50MjUuYywgbXNkb3MvaW50MjYuYywgbXNkb3MvaW50MmYuYywgbXNkb3MveG1zLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUNoYW5nZWQgQ1RYX1NFR19PRkZfVE9fTElOIHRvIGFsbG93IGxpbmVhciBhZGRyZXNzZXMgaW4gMzItYml0CglyZWdpc3RlcnMgKHVzZWQgYnkgRGV2aWNlSW9Db250cm9sKS4gQWRhcHRlZCBhbGwgdXNlcnMuCgoJKiBpbmNsdWRlL3dpbmlvY3RsLmgsIHdpbjMyL2RldmljZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCAobW9zdCkgVldpbjMyLlZ4RCBEZXZpY2VJb0NvbnRyb2wgcm91dGluZXMuCgpUdWUgTm92IDI0IDIwOjQ3OjE3IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL3RocmVhZC5oLCBzY2hlZHVsZXIvdGhyZWFkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogU2V0IHRoZSBURUJGX1dJTjMyIGZsYWcgaW4gdGViLmZsYWdzIGZvciAzMi1iaXQgdGhyZWFkcy4KCgkqIGxvYWRlci90YXNrLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBDYWxsIEluaXRUaHJlYWRJbnB1dCBpbiBHZXRGYXN0UXVldWUgd2l0aCBjb3JyZWN0IHBhcmFtZXRlcgoJZm9yIDMyLWJpdCBxdWV1ZXMuCgoJKiB3aW4zMi9rZXJuZWwzMi5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogW1FGXVRfVGh1bmsgc2hvdWxkIGNsZWFyIEhJV09SRChFQVgpIG9uIHJldHVybi4KCUJ1Z2ZpeDogaGFjayBmb3Igc3R1cGlkIFVTRVIzMiBDYWxsYmFja0dsdWVMUyByb3V0aW5lIGluIENvbW1vbjMyVGhrTFMuCgoJKiBpZjE2MzIvdGh1bmsuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IEJhZCBqdW1wIGdlbmVyYXRlZCBpbiBUSFVOS19BbGxvY0xTVGh1bmtsZXQuCglCdWdmaXg6IEZvcmdvdCB0byBjb252ZXJ0IHNlZ3B0ciBpbiBBbGxvY0xTVGh1bmtsZXRDYWxsYmFja0V4LgoKCSogZ3JhcGhpY3MveDExZHJ2L3hmb250LmM6IEVyaWMgV2FybmtlIDxlcmljQHNub3dtb29uLmNvbT4KCURvbid0IG1hdGNoIGFnYWluc3QgU3ltYm9sIG9yIE5pbCBmb250cy4KCgkqIG1lbW9yeS9nbG9iYWwuYzogU3RlcGhlbiBDcm93bGV5IDxjcm93QGRlYmlhbi5vcmc+CglSZXR1cm4gdGhlICJidWZmZXJzIiBhbmQgImNhY2hlZCIgbWVtb3J5IGFzIGZyZWUgc2luY2UgaXQgaXMKCWRlYWxsb2NhdGVkIHdoZW4gYSBwcm9ncmFtIG5lZWRzIGl0IGFueXdheS4KCgkqIHdpbmRvd3MvZGlhbG9nLmMsIGluY2x1ZGUvd2luZG93cy5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglCdWdmaXg6IFNldERsZ0l0ZW1UZXh0MzIgcmV0dXJucyBCT09MIG5vdCB2b2lkLgoKCSogcmVsYXkzMi91c2VyMzIuc3BlYywgd2luZG93cy91c2VyLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBzdHVicyBHZXRVc2VyT2JqZWN0SW5mb3JtYXRpb25BfFcuCgoJKiByZWxheTMyL3JlbGF5Mzg2LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUmVtb3ZlZCBsZWZ0IG92ZXIgJ3Nob3cnIGFuZCB1c2VsZXNzIGRlYWRiZWVmIGNoZWNraW5nIHdoaWNoIGRvZXNuJ3QKCXdvcmsuCgoJKiBsb2FkZXIvcGVfaW1hZ2UuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGp1c3QgYnJva2VuIGVudHJ5cG9pbnQgYWRkcmVzc2VzLiAod2luOTggbm90ZXBhZC5leGUpCgoJKiBkb2N1bWVudGF0aW9uL3N0YXR1cy9tdWx0aW1lZGlhOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVVwZGF0ZWQgYWNjb3JkaW5nIHRvIGRldmVsb3BtZW50LgoKCSogaWYxNjMyL21tc3lzdGVtLnNwZWMsIHJlbGF5MzIvd2lubW0uc3BlYzoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJU29tZSBuZXcgc3R1YnMgKG1pZGlTdHJlYW1YWFggZnVuY3Rpb25zLCBzb21lIG1jaSBmdW5jdGlvbnMsIGFuZAoJc29tZSBtbWlvIGZ1bmN0aW9ucykuCgoJKiBtdWx0aW1lZGlhL21pZGkuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglNb3ZlZCBNQ0kgcGFydCB0byBtY2ltaWRpLmMgOyBhZGRlZCBEcml2ZXJQcm9jLgoKCSogbXVsdGltZWRpYS9hdWRpby5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCU1vdmVkIE1DSSBwYXJ0IHRvIG1jaXdhdmUuYyA7IGFkZGVkIHNvbWUgZXJyb3IgY2hlY2tpbmcgOyBhZGRlZAoJRHJpdmVyUHJvYwoKCSogaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oLCBtdWx0aW1lZGlhL01ha2VmaWxlLmluOgoJRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglBZGRlZCBtY2ltaWRpIGFuZCBtY2l3YXZlLgoKCSogbXVsdGltZWRpYS9tY2ltaWRpLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRml4ZWQgYnVnIGluIE1DSV9JTkZPIGNvbW1hbmQgOyBmaXhlZCBwYXVzZS9yZXN1bWUgY29tbWFuZHMgOyBmaXhlZAoJc2VlayBjb21tYW5kLgoKCSogbXVsdGltZWRpYS9tY2l3YXZlLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJU3RhcnRpbmcgd3JpdGluZyBNQ0kgcGFydCA7IGZpeGVkIGJ1ZyBpbiBNQ0lfSU5GTyBjb21tYW5kLgoKCSogbXVsdGltZWRpYS9tbWlvLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgc29tZSBtaXNzaW5nIHN0dWJzIGluIDMyIGJpdCBwYXJ0LgoKCSogbXVsdGltZWRpYS9tY2lzdHJpbmcuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglNYWRlIHVzZSBvZiBuZXcgMTYvMzIgTUNJIG1lc3NhZ2UgaGFuZGxpbmcgaW4gbW1zeXN0ZW0uYy4KCgkqIGluY2x1ZGUvbW1zeXN0ZW0uaCwgaW5jbHVkZS9tdWx0aW1lZGlhLmg6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUFkZGVkIHNvbWUgbmV3IGZ1bmN0aW9ucy9zdHJ1Y3R1cmVzIGRlZmluaXRpb25zLihJIGNvdWxkbid0IGdldCBhbGwKCXRoZSBtYW5pZmVzdCBjb25zdGFudHMgdmFsdWVzIHRoYXQgTVMgd2FzIHJlZmVycmluZyB0byBpbiBpdHMgc3BlY3MuLi4KCWlmIHNvbWVvbmUgaGFzIHRoZW0uLi4pCgoJKiBtdWx0aW1lZGlhL21jaWFuaW0uYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglBZGRlZCBzb21lIGVycm9yIGNoZWNraW5nIDsgbWFkZSB1c2Ugb2YgbmV3IDE2LzMyIE1DSSBtZXNzYWdlIGhhbmRsaW5nCglpbiBtbXN5c3RlbS5jIDsgZml4ZWQgYnVnIGluIE1DSV9JTkZPIGNvbW1hbmQuCgoJKiBtdWx0aW1lZGlhL21jaWNkYS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUFkZGVkIHNvbWUgZXJyb3IgY2hlY2tpbmcgOyBtYWRlIHVzZSBvZiBuZXcgMTYvMzIgTUNJIG1lc3NhZ2UKCWhhbmRsaW5nIGluIG1tc3lzdGVtLmMuCglBZGRlZCBXaW45NSBjb21tYW5kIHRvIGhhbmRsZSBjZC1yb20gd2l0aCBib3RoIGRhdGEgYW5kIGF1ZGlvIDsgZml4ZWQKCWJ1ZyBpbiBNQ0lfSU5GTyBjb21tYW5kIDsgc2hhZG93aW5nIE1DSSBzdGF0dXMgZm9yIGRldmljZXMgdGhhdCBjYW4ndAoJZ2V0IGN1cnJlbnQgc3RhdHVzIDsgZml4ZWQgc3RhdHVzIG5vdCBiZWluZyB1cGRhdGVkIG9uIGNkIGNoYW5nZS4KCgkqIG11bHRpbWVkaWEvbW1zeXN0ZW0uYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGYWN0b3JpemVkIDE2LzMyIGJpdCBNQ0kgZnVuY3Rpb24gYnkgdXNpbmcgIG1lc3NhZ2UgbWFwcGluZyBmcm9tIDE2Cgl0byAzMiBiaXRzIDsgYWRkZWQgc29tZSBuZXcgcHJvdG90eXBlcyBtY2lTZW5kQ29tbWFuZCwgbWNpU2VuZFN0cmluZywKCW1jaShTZXQvR2V0KVlpZWxkUHJvYyA7IHN0YXJ0ZWQgd3JpdGluZyBtaWRpU3RyZWFtWFhYIGZ1bmN0aW9ucyAtIG5vdAoJeWV0IHdvcmtpbmcuIEZpeGVkIHNvbWUgaXNzdWVzIHJlZ2FyZGluZyBhc3luY2hyb25vdXMgTUNJIGNvbW1hbmRzIDsKCWZpeGVkIE1DSV9TWVNJTkZPIGNvbW1hbmQuCgoJKiByZXNvdXJjZXMvc3lzcmVzX0ZyLnJjOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUZpeGVkIHNvbWUgcXVpcmtzLgoKU3VuIE5vdiAyMiAxODoyOTo1MCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZGxscy9zaGVsbDMyL2NvbnRtZW51LmMsIGRsbHMvc2hlbGwzMi9kYXRhb2JqZWN0LmMsIGRsbHMvc2hlbGwzMi9mb2xkZXJzLmMsIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYywgZGxscy9zaGVsbDMyL3BpZGwuaCwgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglNYW55IGZpeGVzLgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgZnVuY3Rpb246IF9JTEdldEV4dGVuc2lvbi4KCgkqIGRsbHMvc2hlbGwzMi9NYWtlZmlsZS5pbiwgZGxscy9zaGVsbDMyL2NsYXNzZXMuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IGZpbGUuIEhLRVlfQ0xBU1NFU19ST09UIGhhbmRsaW5nLgoKCSogZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglVcGRhdGVkLgoKCSogZGxscy9jb21jdGwzMi9oZWFkZXIuYywgZGxscy9jb21jdGwzMi9zdGF0dXMuYywgZGxscy9jb21jdGwzMi90b29sYmFyLmMsIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9oZWFkZXIuaCwgaW5jbHVkZS9saXN0dmlldy5oLCBpbmNsdWRlL29sZTIuaCwgaW5jbHVkZS9yZWJhci5oLCBpbmNsdWRlL3N0YXR1cy5oLCBpbmNsdWRlL3Rvb2xiYXIuaCwgaW5jbHVkZS90b29sdGlwcy5oOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIFVuaWNvZGUgc3VwcG9ydCAoYXQgbGVhc3QgcGFydGlhbGx5KS4KCgkqIG9sZS9NYWtlZmlsZS5pbiwgb2xlL2NvbXBvYmouYywgb2xlL29sZW9iai5jLCBpbmNsdWRlL29sZW9iai5oLCBpbmNsdWRlL3NobG9iai5oOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIElPbGVBZHZpc2VIb2xlciBpbnRlcmZhY2UgKHN0aWxsIGEgZHVtbXkpIGFuZCBmaXhlZAoJQ3JlYXRlT2xlQWR2aXNlSG9sZGVyKCkuCgoJKiBkbGxzL2NvbWN0bDMyL2NvbW1jdHJsLmMsIGRsbHMvY29tY3RsMzIvdG9vbHRpcHMuYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBnbG9iYWwgc3ViY2xhc3NpbmcgYXRvbSwgdXNlZCBieSB0b29sdGlwcyBhbmQgdXBkb3duIChub3QgeWV0KS4KCgkqIGRsbHMvY29tY3RsMzIvcmViYXIuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUltcHJvdmVkIGxheW91dCBjb2RlLgoKCSogZGxscy9jb21jdGwzMi9pbWFnZWxpc3QuYywgcmVsYXkzMi9jb21jdGwzMi5zcGVjOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIEltYWdlTGlzdF9Mb2FkSW1hZ2UoKS4KCgkqIGRsbHMvY29tY3RsMzIvY29tYm9leC5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgQ01FTV9TRVRJVEVNMzJBIGFuZCBtZXNzYWdlIGZvcndhcmRpbmcgdG8gY29tYm9ib3guCgoJKiBvbGUvbW9uaWtlci5jLCByZWxheTMyL29sZTMyLnNwZWM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgc3R1YiBmb3IgQ3JlYXRlSXRlbU1vbmlrZXIoKS4KCgkqIGRsbHMvY29tY3RsMzIvY29tY3RsMzJ1bmRvYy5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRml4ZWQgc29tZSB1bmRvY3VtZW50ZWQgZnVuY3Rpb24gbmFtZXMgYW5kIGltcGxlbWVudGVkIERQQV9NZXJnZQoJcGFydGlhbGx5LgoKCSogY29udHJvbHMvYnV0dG9uLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglFbmFibGVkIGRvdWJsZSBjbGljayBmb3IgYnV0dG9ucy4KCgkqIGluY2x1ZGUvd2luZG93cy5oOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgY29tbWFuZCBhbmQgcmV0dXJuIGNvbnN0YW50cyB1c2VkIGJ5IFdNX05PVElGWUZPUk1BVC4KCgkqIG9iamVjdHMvYnJ1c2guYywgb2JqZWN0cy9kYy5jLCBvYmplY3RzL2dkaW9iai5jLCBvYmplY3RzL3Blbi5jLCB3aW5kb3dzL0F0dGljL2dyYXBoaWNzLmMsIGdyYXBoaWNzL3BhaW50aW5nLmMsIGdyYXBoaWNzL3gxMWRydi9iaXRibHQuYywgZ3JhcGhpY3MveDExZHJ2L2RpYi5jLCBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYywgZ3JhcGhpY3MveDExZHJ2L3RleHQuYywgaW5jbHVkZS9kYy5oLCBpbmNsdWRlL3gxMWRydi5oOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglNb3ZlZCBEQ19TZXR1cEdDIGZ1bmN0aW9ucyB0byBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYy4KCgkqIGluY2x1ZGUvb3B0aW9ucy5oLCBtaXNjL21haW4uYywgb2xlL29sZTJubHMuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU21hbGwgZml4ZXMgdG8gZ2V0IHRoZSBkZWZhdWx0IGxhbmd1YWdlIHRvIGEgc2Vuc2libGUgdmFsdWUuCglUaGFua3MgdG8gUGFibG8uCgoJKiBBTk5PVU5DRSwgREVWRUxPUEVSUy1ISU5UUywgUkVBRE1FLCBkb2N1bWVudGF0aW9uL1JFQURNRS5kb2N1bWVudGF0aW9uLCBkb2N1bWVudGF0aW9uL2hvdy10by1wb3J0LCBkb2N1bWVudGF0aW9uL3dpbmUubWFuLCBkb2N1bWVudGF0aW9uL3dpbmUudGV4aW5mbzoKCURvdWdsYXMgUmlkZ3dheSA8cmlkZ3dheUB3aW5laHEuY29tPgoJTWlzY2VsbGFuZW91cyBzbWFsbCBmaXhlcy4KCgkqIGdyYXBoaWNzL3dpbjE2ZHJ2L3BydGRydi5jLCBpZjE2MzIvZ2RpLnNwZWMsIGluY2x1ZGUvd2luZG93cy5oLCBvYmplY3RzL21ldGFmaWxlLmMsIG9iamVjdHMvcmVnaW9uLmMsIHJlbGF5MzIvZ2RpMzIuc3BlYzoKCUFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUFkZGVkIFdpbjE2IGltcGxlbWVudGF0aW9uIGZvciBHZXRSZWdpb25EYXRhKCkuCgoJKiBvbGUvdHlwZWxpYi5jOiBBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglFbmhhbmNlZCBPQUJ1aWxkVmVyc2lvbigpIHRvIHJldHVybiBkaWZmZXJlbnQgdmVyc2lvbiB2YWx1ZXMgZm9yCglkaWZmZXJlbnQgd2ludmVycy4KCgkqIG1zZG9zL2ludDIxLmM6IEFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUFkZGVkIElOVDIxX1BhcnNlRmlsZU5hbWVJbnRvRkNCKCkgYW5kIHNvbWUgb3RoZXIgdGhpbmdzIHRvIGdldAoJQ09NTUFORC5DT00gd29ya2luZy4KCgkqIHJlbGF5MzIva2VybmVsMzIuc3BlYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglBZGRlZCBtaXNzaW5nIGVudHJ5IGZvciBHZXROdW1iZXJGb3JtYXRXLgoKCSogb2JqZWN0cy9wYWxldHRlLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQ2hlY2tpbmcgZm9yIE5VTEwtcG9pbnRlci4KCgkqIG9sZS9ubHMvZnJhLm5scywgb2xlL25scy9mcmIubmxzLCBvbGUvbmxzL2ZyYy5ubHMsIG9sZS9ubHMvZnJsLm5sczoKCVJvYmVydCBQb3VsaW90IDxrcnlub3NAY2xpYy5uZXQ+CglCZXR0ZXIgT0xFIHN1cHBvcnQgaW4gRnJlbmNoIGxhbmd1YWdlcy4KCgkqIGxvYWRlci9tb2R1bGUuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglJbXBsZW1lbnRhdGlvbiBvZiBDcmVhdGVQcm9jZXNzMzJXLgoKCSogd2luZG93cy9ldmVudC5jOiBEYXZpZCBMdXllciA8bHV5ZXJAdWNzLnV3YS5lZHUuYXU+CglRdWV1aW5nIG9mIGRlZmVycmVkIEV4cG9zZSBldmVudHMuCgoJKiBjb250cm9scy9saXN0Ym94LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTEJfR0VUVEVYVDogSGFuZGxlIHBhc3NlZCBOVUxMIGJ1ZmZlci4KCgkqIGNvbnRyb2xzL2NvbWJvLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQ0JfR0VUVEVYVDogVXNlIGxwQnVmZmVyIGluc3RlYWQgb2YgbHBUZXh0IGZvciBMQl9HRVRURVhUMzIsIGhhbmRsZSAwCglieXRlIE5VTEwgYnVmZmVyLgoKCSogb2xlL25scy9mcnMubmxzLCBvbGUvbmxzL3NreS5ubHMsIG9sZS9vbGUybmxzLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVR1cm4gbWVnYSBkb3VibGUgc3dpdGNoIGludG8gc3RhdGljIHRhYmxlIChyZWR1Y2VzIGNvbXBpbGUgdGltZSkuCgoJKiBBVVRIT1JTLCBpbmNsdWRlL2F1dGhvcnMuaDogQWRkZWQgUm9iZXJ0IFJpZ2dzLgoKCSogaW5jbHVkZS9kM2QuaDogUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCWluY2x1ZGUgZGRyYXcuaCwgcXVlc3Rpb25hYmxlIGZpeCBmb3IgcXVlc3Rpb25hYmxlIHN0cnVjdC91bmlvbgoJY29uc3RydWN0IGluIE1TJ3MgRDNEVkVDVE9SIGRlZmluaXRpb24uCgoJKiBpbmNsdWRlL2Rzb3VuZC5oOiBSb2JlcnQgUmlnZ3MgPHJyaWdnc0B0ZXNzZXIuY29tPgoJTW9yZSBmbGFncyAoRGlyZWN0WCA1LjIpLCBEaXJlY3RTb3VuZDNETGlzdGVuZXIgYW5kCglEaXJlY3RTb3VuZDNEQnVmZmVyIHN0cnVjdHVyZXMsIGluY2x1ZGUgc29tZSByZXF1aXJlZCBmaWxlcwoJKHdpbmRvd3MuaCwgY29tcG9iai5oLCBhbmQgZDNkLmgpLgoKCSogbXVsdGltZWRpYS9kc291bmQuYzogUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCURpcmVjdFNvdW5kM0RMaXN0ZW5lciBhbmQgRGlyZWN0U291bmQzREJ1ZmZlciBzdHVicywgbmV3IG1peGVyIGNvZGUsCglwcmltYXJ5IGJ1ZmZlciBpcyBpbXBsZW1lbnRlZCBjbG9zZXIgdG8gd2hhdCB0aGUgU0RLIGRvY3Mgc3BlY2lmeSwKCW90aGVyIFNESyBkb2N1bWVudGVkIGJlaGF2aW91ciBlbmZvcmNlZC4gQ29tcGxldGVkIHRoZSBkZXZjYXBzIGxpc3QuCgoJKiBtaXNjL2NydGRsbC5jLCByZWxheTMyL2NydGRsbC5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3R1YnMgc3RyZGF0ZSwgc3RydGltZS4KCgkqIG1lbW9yeS9zZWxlY3Rvci5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IHR5cG8gaW4gU1VuTWFwTFNfSVBfRUJQXzggbGVhZCB0byBzdGFjayBjb3JydXB0aW9uLgoKCSogbWlzYy9jb21tLmM6IENsaWZmIFdyaWdodCA8Y2xpZmZAc25pcGU0NDQub3JnPgoJRml4ZWQgYSBtYXNrIHNldCwgYW5kIG90aGVyIHBhcml0eSBzZXR0aW5nIGJ1Z3MgZm9yIHNlcmlhbCBwb3J0cy4KCgkqIGluY2x1ZGUvc2lnX2NvbnRleHQuaDogVmFzdWRldiBNdWxjaGFuZGFuaSA8dmFzdUB0ZWlsLnNvZnQubmV0PgoJQWRkZWQgQlNESSBzaWdjb250ZXh0IGRlZmluaXRpb25zLgoKCSogd2luZG93cy9jbGFzcy5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJRml4ZWQgdHlwby4KCgkqIHJlbGF5MzIvcmVsYXkzODYuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglSZW1vdmUgbm93IHVzZWxlc3MgUkVMQVlfU2hvd0RlYnVnbXNnc1JlbGF5IGNoZWNrLgoKCSogbG9hZGVyL3BlX2ltYWdlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRG8gbm90IHJlbG9jYXRlIHRoZSBwb2ludGVycyBpbiB0aGUgSU1BR0VfVEhSRUFEX0xPQ0FMX1NUT1JBR0UKCWRpcmVjdG9yeSwgZm9yIHRoZXkgc2VlbSB0byBiZSByZWxvY2F0ZWQgYnkgdGhlIHN0YW5kYXJkIHJlbG9jYXRpbmcKCW1lY2hhbmlzbS4gKEV4cGxpY2l0bHkgY2hlY2tlZCBvbmUgcHJvZ3JhbSB1c2luZyBpdCkKCgkqIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBpbmNsdWRlL3NoZWxsLmg6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVBhdGhBZGRCYWNrc2hsYXNoLCBQYXRoUmVtb3ZlQmFja3NsYXNoOiBhcmd1bWVudCBpcyBub3QgY29uc3RhbnQuCgoJKiB3aW5kb3dzL3dpbi5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNoZWNrIHduZFB0ciBmb3IgTlVMTC4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQmx0RmFzdDogSG9ub3IgbFBpdGNoLCBMb2NrL1VubG9jayBzdXJmYWNlcyAoeGxpYiBuZWVkcyB1bmxvY2sgdG8gZHJhdykuCgoJKiBtaXNjL3Nwb29sZXIuYywgbWlzYy9NYWtlZmlsZS5pbiwgbWlzY2VtdS9tYWluLmMsIE1ha2VmaWxlLmluLCBncmFwaGljcy93aW4xNmRydi9pbml0LmMsIGxvYWRlci9tYWluLmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVRha2VzIHByaW50IHNwb29sZXIgZnVuY3Rpb25zIG91dCBvZiB3aW4xNmRydi4KCUFsbG93cyB0aGUgUG9zdFNjcmlwdCBkcml2ZXIgdG8gZ28gaW50byBsaWJ3aW5lLgoKCSogaWYxNjMyL2dkaS5zcGVjLCBvYmplY3RzL2JydXNoLmMsIG9iamVjdHMvcGFsZXR0ZS5jOgoJSWFuIFNjaG1pZHQgPGlyc21hbkBpYWcubmV0PgoJQWRkZWQgc3R1YnMgZm9yIHR3byB1bmRvY3VtZW50ZWQgR0RJIHJvdXRpbmVzLCBTZXRNYWdpY0NvbG9ycyBhbmQKCVNldFNvbGlkQnJ1c2guIFRoaXMgYWxsb3dzIFdpbjk4IG5hdGl2ZSBVU0VSIHRvIHN0YXJ0IHVwLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogU3RlcGhlbiBDcm93bGV5IDxjcm93QGRlYmlhbi5vcmc+CglGaXhlZCB0aGUgREdBIGRldGVjdGlvbiBjb2RlIGluIGRkcmF3LiBZb3UgZG9uJ3QgbmVlZCByb290IGFjY2VzcywKCWhhdmluZyByK3cgYWNjZXNzIHRvIC9kZXYvbWVtIGlzIGVub3VnaC4KCgkqIGRvY3VtZW50YXRpb24vc3RhdHVzL2RpcmVjdGRyYXcsIGdyYXBoaWNzL2RkcmF3LmMsIGdyYXBoaWNzL3dpbmcuYywgaW5jbHVkZS9kZHJhdy5oOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglEaXJlY3REcmF3IHN0YXR1cyB1cGRhdGVkLgoJVXNlIGNvb3BlcmF0aXZlIHdpbmRvdyBmb3IgZHJhd2luZyBpbiB4bGliIGltcGxlbWVudGF0aW9uIGlmIHBvc3NpYmxlLgoJU2xpZ2h0bHkgcmVzdHJ1Y3R1cmVkIElEaXJlY3REcmF3U3VyZmFjZTo6Qmx0IHNvIGl0IGRvZXNuJ3QgY3Jhc2guCgoJKiB3aW5kb3dzL2tleWJvYXJkLmM6IERhdmlkIEZhdXJlIDxEYXZpZC5GYXVyZUBpbnNhLWx5b24uZnI+CglNaWNybyBwYXRjaCBmb3IgQWx0R3Iga2V5IG9uIGdlcm1hbiBrZXlib2FyZHMuCgoJKiBmaWxlcy9kb3NfZnMuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlcyBlcnJvciBoYW5kbGluZyAoU2V0TGFzdEVycm9yKCkgYW5kIHJldHVybiB2YWx1ZSkuCgoJKiBvYmplY3RzL3RleHQuYywgaW5jbHVkZS93aW5kb3dzLmg6IEdhZWwgZGUgQ2hhbGVuZGFyIDxnYWVsQGxpbXNpLmZyPgoJUGFydGlhbGx5IGNvbXBsZXRlIEdldFRleHRDaGFyc2V0SW5mbyBhbmQgY29ycmVjdHMgcmV0dXJuIHZhbHVlcyBmb3IKCXRoaXMgZmFtaWx5IG9mIGZ1bmN0aW9ucy4KClN1biBOb3YgMTUgMTg6MTI6MTIgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG9sZS9jb21wb2JqLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQnVnIGZpeC4KCgkqIG9iamVjdHMvZGliLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCByZXRyaWV2YWwgb2YgaW52YWxpZCBwYWxldHRlIGRhdGEgaW4gR2V0RElCaXRzKCkuCgoJKiB3aW5kb3dzL3dpbnBvcy5jOiBKb2huIFJpY2hhcmRzb24gPGpyaWNoYXJkQHplYWxhbmQubXYuY29tPgoJQWxsb3cgU1dQX0hJREVXSU5ET1cgdG8gYmUgY2FsbGVkIG9uIHdpbmRvd3MgdGhhdCBhcmUgYWxyZWFkeSBoaWRkZW4KCXdpdGhvdXQgdW5tYXBwaW5nIHRoZW0gYWdhaW4uCgoJKiB3aW5kb3dzL3Njcm9sbC5jOiBQaW0gQm9sbGVuIDxwaW1AZ2ltbGkuaWFlaHYubmw+CglGaXhlZCBzY3JvbGwgYnVnIGluIFNjcm9sbFdpbmRvd0V4MzIgd2hpY2ggY2F1c2VkIGdhcmJhZ2Ugb24gc2NyZWVuCglvdXRzaWRlIGRlc2t0b3Agd2luZG93IHdpdGggZ3R3aW4uZXhlIChEdXRjaCBiYW5raW5nIHByb2dyYW0pLgoKCSogbG9hZGVyL21haW4uYywgbWVtb3J5L2F0b20uYywgbWlzYy9kZGVtbC5jLCB3aW5kb3dzL2NsYXNzLmMsIHdpbmRvd3MvbWVzc2FnZS5jLCBpbmNsdWRlL0F0dGljL2F0b20uaCwgaW5jbHVkZS9nbG9iYWwuaDoKCVNtYWxsIGF0b20gZml4ZXMuCgoJKiBvYmplY3RzL2RpYi5jOiBEaXJrIFRoaWVyYmFjaCA8dGhpZXJiYWNoQG1hdGhlbWF0aWsudHUtZGFybXN0YWR0LmRlPgoJRml4ZWQgYnVnIGluIFN0cmV0Y2hESUJpdHMzMiAod3Jvbmcgb3JpZ2luKS4KCgkqIHdpbmRvd3Mvd2lucHJvYy5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNtYWxsIGZpeGVzLgoKCSogaW5jbHVkZS9kZHJhdy5oLCBpbmNsdWRlL3RzX3hzaG0uaCwgdG9vbHMvbWFrZV9YMTF3cmFwcGVycywgdHN4MTEvWDExX2NhbGxzLCB0c3gxMS90c194c2htLmMsIGdyYXBoaWNzL2RkcmF3LmM6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCVNvbWUgY29ycmVjdGlvbnMgdG8gdGhlIGhhbmRsaW5nIG9mIG9mZi1zY3JlZW4gYnVmZmVycy4KCUNvcnJlY3Rpb24gdG8gdGhlIEVudW1EaXNwbGF5TW9kZXMgZnVuY3Rpb24uCglBZGRlZCBYU2htIHN1cHBvcnQgdG8gWGxpYiBkcml2ZXIuCglPcGVuIGEgRGlyZWN0WCB3aW5kb3cgZXZlbiB3aGVuIHVzaW5nIHRoZSBER0EgZHJpdmVyLgoKCSogaW5jbHVkZS9zaGVsbC5oLCBpbmNsdWRlL3NobG9iai5oLCBtaXNjL3NoZWxsLmMsIHJlbGF5MzIvc2hlbGwzMi5zcGVjLCBkbGxzL3NoZWxsMzIvTWFrZWZpbGUuaW4sIGRsbHMvc2hlbGwzMi9jb250bWVudS5jLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jLCBkbGxzL3NoZWxsMzIvZm9sZGVycy5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgZGxscy9zaGVsbDMyL3NoZWxsb2xlLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUNsZWFudXAsIHNtYWxsIGZpeGVzLCBhIGZldyBuZXcgc3R1YnMuCgoJKiBkbGxzL3NoZWxsMzIvc2hsdmlldy5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUhhbmRsaW5nIGZvciBsaXN0dmlld3N0eWxlcywgdmlldyBtb2RlIGJ1dHRvbnMgaW4gZmlsZWRpYWxvZ3MKCWVuYWJsZWQgYW5kIGhhbmRsZWQuCglOZXcgbGlzdHZpZXcgY29sdW1ucyBTaXplLCBUeXBlLCBNb2RpZmllZCBmb3IgcmVwb3J0dmlldwoJY3JlYXRlZCBhbmQgaGFuZGxlZC4KCgkqIGRsbHMvc2hlbGwzMi9pZl9tYWNyb3MuaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IGZpbGUsIHdyYXBwZXIgZm9yIElTaGVsbEJyb3dzZXIgY2xhc3MuCgoJKiBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBmaWxlLCBzb21lIGhlbHBlciBmdW5jdGlvbnMgZm9yIGljb24gY2FjaGUuCglJbXBsZW1lbnRlZCBFeHRyYWN0SWNvbkV4OyBtb3ZlZCBTSE1hcFBJRExUb1N5c3RlbUltYWdlTGlzdEluZGV4LAoJU2hlbGxfR2V0SW1hZ2VMaXN0IGluIHRoaXMgZmlsZS4KCgkqIGRsbHMvc2hlbGwzMi9waWRsLmMsIGRsbHMvc2hlbGwzMi9waWRsLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUltcGxlbWVudGVkOiBJTElzRXFhbCwgSUxGaW5kQ2hpbGQsIF9JTEdldEZpbGVEYXRlLCBfSUxHZXRGaWxlU2l6ZS4KCgkqIGxvYWRlci9tb2R1bGUuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglMb2FkTGlicmFyeUV4OiBzaG93IGEgd2FybmluZyB3aGVuIGNhbGxlZCB3aXRoIHVuaW1wbGVtZW50ZWQgcGFybS4KCgkqIG1pc2NlbXUvaW5zdHIuYzogQ2xlYW5lZCB1cCBhIGJpdC4KCgkqIG1lbW9yeS9zZWxlY3Rvci5jLCBtaXNjZW11L2luc3RyLmMsIHRvb2xzL2J1aWxkLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNsZWFuIGludmFsaWQgc2VsZWN0b3JzIG9uIHRoZSBwb3AgJXhzIGZyb20gdGhlIFNUQUNLRlJBTUUgaXRzZWxmCglpbnN0ZWFkIG9mIHVzaW5nIGxpbmtlZCBsaXN0IGhhY2suCgoJKiBNYWtlZmlsZS5pbjogUmVtb3ZlZCBnZXRzIG1lc3NhZ2UuCgoJKiBvbGUvbmxzL3RoYS5ubHM6IERhdmlkIEx1eWVyIDxsdXllckB1Y3MudXdhLmVkdS5hdT4KCUFkZGVkIFRoYWkgbmxzLXJlc291cmNlcy4KCgkqIG9sZS9ubHMvUkVBRE1FLCBvbGUvbmxzL2N6ZS5ubHMsIG9sZS9ubHMvZXNlLm5scywgb2xlL25scy9lc2cubmxzLCBvbGUvbmxzL2VzdC5ubHMsIG9sZS9ubHMvZXVxLm5scywgb2xlL25scy9mb3MubmxzLCBvbGUvbmxzL2hydi5ubHMsIG9sZS9ubHMvaHVuLm5scywgb2xlL25scy9pc2wubmxzLCBvbGUvbmxzL25vci5ubHMsIG9sZS9ubHMvcGxrLm5scywgb2xlL25scy9wdGcubmxzLCBvbGUvbmxzL3JvbS5ubHMsIG9sZS9ubHMvc2x2Lm5scywgb2xlL25scy9zdmUubmxzLCBvbGUvb2xlMm5scy5jLCBpbmNsdWRlL3dpbm5scy5oOgoJUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuYWxwaGFuZXQuY2g+CglEaXNwbGF5IHRoZSBsYW5ndWFnZSBpZCBmb3IgIlhYWCBub3Qgc3VwcG9ydGVkIGZvciB5b3VyIGxhbmd1YWdlIgoJbWVzc2FnZXMuCglBZGRlZCBhbGwgbGFuZ3VhZ2VzIGFuZCBzdWJsYW5ndWFnZXMgZm9yIGxhbmd1YWdlcyBzdXBwb3J0ZWQgaW4KCXJlc291cmNlcy9zeXNyZXNfWHguCgoJKiBvbGUvb2xlMi5jLCByZWxheTMyL29sZTMyLnNwZWM6IEdhdnJpZWwgU3RhdGUgPGdhdnJpZWxzQGNvcmVsLmNvbT4KCUFkZCBzdHVicyBmb3IgR2V0UnVubmluZ09iamVjdFRhYmxlMzIgYW5kIE9sZVJlZ0dldFVzZXJUeXBlLgoKCSogb2xlL21vbmlrZXIuYzogR2F2cmllbCBTdGF0ZSA8Z2F2cmllbHNAY29yZWwuY29tPgoJRW5zdXJlIHRoYXQgQ3JlYXRlRmlsZU1vbmlrZXIgZnVuY3Rpb25zIGRvbid0IHJldHVybiBhIGJvZ3VzIG1vbmlrZXIKCW9iamVjdCBvbiBmYWlsdXJlLgoKCSogaW5jbHVkZS9jbGFzcy5oLCB3aW5kb3dzL2NsYXNzLmM6IEdhdnJpZWwgU3RhdGUgPGdhdnJpZWxzQGNvcmVsLmNvbT4KCUFkZGVkIGNvZGUgdG8gbWFuYWdlIEFzY2lpIGFuZCBXaWRlQ2hhciBjbGFzcyBuYW1lcywgYW5kIHRvIHJldHVybiB0aGUKCW5hbWVzIGluIHRoZSBHZXRDbGFzc0luZm8gZnVuY3Rpb25zLgoKCSogaW5jbHVkZS93aW5zb2NrLmg6IENvbnN0YW50aW5lIFNhcHVudHpha2lzIDxjc2FwdW50ekBzdGFuZm9yZC5lZHU+CglGaXggdG8gTGludXggSVBYIHNvIGNvbXBpbGVzIG9uIG5vbi1saW51eCBwbGF0Zm9ybXMuCgoJKiBtaXNjL21haW4uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglPd24gWDExIGVycm9yaGFuZGxlciB0byBsb2NhdGUgWDExIGVycm9ycy4gVXNlZnVsIG9ubHkgd2l0aCAtc3luYy4KClNhdCBOb3YgMTQgMTg6NTk6MzAgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvY29sb3IuaCwgaW5jbHVkZS9pbWFnZWhscC5oLCBpbmNsdWRlL3BhbGV0dGUuaCwgbWVtb3J5L2dsb2JhbC5jLCBtaXNjL3JlZ2lzdHJ5LmMsIHdpbmRvd3MvZGVmd25kLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVkIHdhcm5pbmdzLCBzb21lIG9ubHkgdmlzaWJsZSB3aXRoIC1Xc3RyaWN0LXByb3RvdHlwZXMgb3IgLXBlZGFudGljLgoKCSogaW5jbHVkZS9jdXJzb3JpY29uLmgsIGluY2x1ZGUvZGlzcGxheS5oLCBpbmNsdWRlL21lc3NhZ2UuaCwgb2JqZWN0cy9jdXJzb3JpY29uLmMsIHdpbmRvd3MvZGlzcGxheS5jLCB3aW5kb3dzL21vdXNlLmMsIHdpbmRvd3MveDExZHJ2L2luaXQuYywgaWYxNjMyL2Rpc3BsYXkuc3BlYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJTW92ZWQgWDExIG1vdXNlIGN1cnNvciBoYW5kbGluZyB0byB0aGUgRElTUExBWSBkcml2ZXIuCgoJKiBpZjE2MzIvdGh1bmsuYywgaW5jbHVkZS9jYWxsYmFjay5oLCBsb2FkZXIvbWFpbi5jLCBsb2FkZXIvdGFzay5jLCBtaXNjL2NhbGxiYWNrLmMsIG1pc2NlbXUvbWFpbi5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglTb21lIGZpeGVzIHRvIFdpbmUgc3RhcnR1cC90ZXJtaW5hdGlvbiBzZXF1ZW5jZSB3aXRoIG5hdGl2ZSBVU0VSLgoJRG8gbm90IGNhbGwgYnVpbHQtaW4gVVNFUiBzaWduYWwgaGFuZGxlciB3aGVuIHVzaW5nIG5hdGl2ZSBVU0VSLgoKCSogZGVidWdnZXIvYnJlYWsuYywgaW5jbHVkZS9kZWJ1Z2dlci5oLCBpbmNsdWRlL3Rhc2suaDoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiAtZGVidWcgZGlkbid0IHdvcmsgYW55bW9yZSBhZnRlciB0aGUgbGFzdCBzdGFydHVwIHNlcXVlbmNlIHBhdGNoLgoKCSogb2xlL2NvbXBvYmouYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIGxpc3QgaW5zZXJ0aW9uIGJ1ZyBpbiBDb0xvYWRMaWJyYXJ5KCkuCgoJKiBpZjE2MzIvd3Byb2NzLnNwZWMsIG1zZG9zL01ha2VmaWxlLmluLCBtc2Rvcy9pbnQyZi5jLCBtc2Rvcy9pbnQ0MS5jLCBtc2Rvcy92eGQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRkZWQgc3R1YnMgZm9yIHNldmVyYWwgVnhEcyAvIGludGVycnVwdHMuCgoJKiBpZjE2MzIvdGh1bmsuYywgaW5jbHVkZS9jYWxsYmFjay5oLCBtaXNjL2NhbGxiYWNrLmMsIGdyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJU2hvdWxkIGdldCB3aW4xNmRydiBBYm9ydFByb2Mgd29ya2luZy4gSG9wZWZ1bGx5LgoKCSogd2luZG93cy9pbnB1dC5jLCB3aW5kb3dzL2tleWJvYXJkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU1vdmVkIEdldEtleWJvYXJkTGF5b3V0TmFtZTE2IHRvIHdpbmRvd3MvaW5wdXQuYy4KCgkqIGluY2x1ZGUvaW1hZ2VobHAuaCwgaW5jbHVkZS93aW5udC5oLCBpbmNsdWRlL3dpbnR5cGVzLmg6CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCU1vdmVkIHNvbWUgZGVjbGFyYXRpb25zIGZyb20gaW1hZ2VobHAuaCB0byBjb21tb24gaW5jbHVkZSBmaWxlcy4KCgkqIHJlbGF5MzIva2VybmVsMzIuc3BlYywgd2luMzIvdGhyZWFkLmM6CglSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJQWRkZWQgaW1wbGVtZW50YXRpb25zIGZvciBJbnRlcmxvY2tlZEV4Y2hhbmdlQWRkKCkgYW5kCglJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSgpLgoKCSogd2luMzIvY29uc29sZS5jLCBvYmplY3RzL2RpYi5jLCBvYmplY3RzL2VuaG1ldGFmaWxlLmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeGVzIGEgZmV3IG9mIHRoZSBtYW55IGNvbXBpbGVyIHdhcm5pbmdzLgoKCSogbWlzY2VtdS9pbnN0ci5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUVtdWxhdGUgIm1vdiBjcjQsZWF4IiAodG9tYnJhaWRlciAzIGRlbW8pLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglEbyBub3QgZW51bWVyYXRlIEQzRCBkZXZpY2VzIHdlIGNhbid0IGhhbmRsZSBhbnl3YXkuCglSZXR1cm4gYml0bWFza3MgZm9yIGhpL3RydWVjb2xvciBkZXB0aHMgaW4gRW51bURpc3BsYXlNb2Rlcy4KCgkqIGlmMTYzMi9zbm9vcC5jLCBpbmNsdWRlL3Nub29wLmgsIHJlbGF5MzIvYnVpbHRpbjMyLmMsIHJlbGF5MzIvc25vb3AuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU3BlZWQgdXAgcmVsYXkzMiwgc25vb3AxNiBhbmQgc25vb3AzMiBpbmNsdWRlL2V4Y2x1ZGVzIGJ5IGRvaW5nIHRoZW0KCWp1c3Qgb25jZSBhdCBjcmVhdGlvbiB0aW1lLgoKCSogcmVsYXkzMi9vbGUzMi5zcGVjLCBvbGUvY29tcG9iai5jLCBvbGUvb2xlMi5jOgoJUGF2ZWwgUm9za2luIDxwYXZlbF9yb3NraW5AZ2VvY2l0aWVzLmNvbT4KCUFkZGVkIHN0dWJzIGZvciBDb1Jldm9rZUNsYXNzT2JqZWN0IGFuZCBPbGVTZXRDbGlwYm9hcmQuCgoJKiB3aW5kb3dzL3dpbi5jOiBQZXIgxW5nc3Ry9m0gPHBhbmdAbWluZC5udT4KCUVudW1UYXNrV2luZG93czE2OiBCYXNpbmcgdGhlIHNlbGVjdGlvbiBvbiBhIHdpbmRvdydzIHRhc2sgaXMgbm90IG9ubHkKCW1vcmUgc3RyYWlnaHRmb3J3YXJkIHRoYW4gY29tcGFyaW5nIG1lc3NhZ2UgcXVldWVzLCBpdCBhbHNvIHdvcmtzCgliZXR0ZXIgZm9yIFdpbjMyIGFwcGxpY2F0aW9ucy4KCgkqIG1lbW9yeS9sb2NhbC5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUNoYW5nZWQgc29tZSBvZiB0aGUgbWVzc2FnZSBjbGFzc2VzLgoKCSogd2luZG93cy9rZXlib2FyZC5jOiBEYXZpZCBGYXVyZSA8RGF2aWQuRmF1cmVAaW5zYS1seW9uLmZyPgoJU3BlY2lhbCBjYXNlIGhhbmRsaW5nIG9mIDogU2hpZnQgKyBhcnJvdywgc2hpZnQgKyBob21lLCAuLi4KCVggcmV0dXJucyBhIGNoYXIgZm9yIGl0LCBidXQgV2luZG93cyBkb2Vzbid0LiBJZ25vcmUgWCBjaGFyLgoJQWxzbyBhZGRlZCBzb21lIGRvY3VtZW50YXRpb24uCgoJKiBpbmNsdWRlL3dpbnNvY2suaCwgbWlzYy93aW5zb2NrLmM6CglTdGVwaGVuIExhbmdhc2VrIDx2b3Jsb25AZG9kZHMubmV0PgoJQnVnZml4ZXMgZm9yIElQWCBjb2RlIGFuZCBwcmVsaW1pbmFyeSBncm91bmR3b3JrIGZvciBvdGhlciBhZGRyZXNzCglmYW1pbHkgc3VwcG9ydC4KCgkqIG9sZS9jb21wb2JqLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJKENvR2V0Q2xhc3NPYmplY3QpIG9uZSBtaXNzaW5nIENBTExCQUNLLCBleHRyZW1lbHkgc2ltcGxpZmllZCBjbHNpZAoJbG9va3VwIChSZWdpc3RyeSBpcyBjYXNlIGluc2Vuc2l0aXZlKS4KCgkqIHJlbGF5MzIvbnRkbGwuc3BlYywgd2luMzIvYWR2YXBpLmMsIGRsbHMvbnRkbGwvcnRsLmMsIHJlbGF5MzIvYWR2YXBpMzIuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YnM6IFNldFNlcnZpY2VTdGF0dXMsIFJlZ2lzdGVyU2VydmljZUN0cmxIYW5kbGVyQS9XLAoJU3RhcnRTZXJ2aWNlQ3RybERpc3BhdGNoZXIzMkEvVywgUnRsU3lzdGVtVGltZVRvTG9jYWxUaW1lLAoJUnRsVGltZVRvVGltZUZpZWxkcy4KCgkqIGluY2x1ZGUvd2luZG93cy5oLCBvbGUvb2xlMm5scy5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTdHViIGZvciBHZXROdW1iZXJGb3JtYXQzMlcuCgoJKiBtaXNjL2NydGRsbC5jOiBEYXZpZCBBLiBDdXRoYmVydCA8ZGFjdXRAZWNlLmNtdS5lZHU+CglnZXRzKCkgZml4ZXMuCgoJKiBvbGUvbmxzL3J1cy5ubHM6IEFsZXhhbmRlciBWLiBMdWt5YW5vdiA8bGF2QGxvbmcueWFyLnJ1PgoJRml4IFNDT1VOVFJZLCBTTkFUSVZFQ1RSWU5BTUUsIFNBQkJSRVZEQVlOQU1FMzsgY2hhbmdlIHNvbWUgU01PTlRITkFNRSoKCXRvIGJlIGluIG5vbWluYXRpdmUgY2FzZS4KCgkqIHdpbmRvd3MvcXVldWUuYzogUGVyIMVuZ3N0cvZtIDxwYW5nQG1pbmQubnU+CglGaXhlZCBTZXRNZXNzYWdlUXVldWUzMiB0byByZXR1cm4gRkFMU0UsIG5vdCBUUlVFLCB3aGVuIGNhbGxlZCB3aXRoCglhbiBpbnZhbGlkIHNpemUgcGFyYW1ldGVyLgoKCSogbXVsdGltZWRpYS9kc291bmQuYzogTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglBZGRlZCBjb3JyZWN0IGltcGxlbWVudGF0aW9uIG9mIEdldENhcHMsIGNoYW5nZWQgUGxheSBhbmQgU3RvcCBoYW5kbGluZwoJb2YgcG9zaXRpb25zIGluZGV4ZXMsIHN1cHByZXNzZWQgd2FybmluZ3MuCgoJKiBtZW1vcnkvbG9jYWwuYzogTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglDb3JyZWN0ZWQgYnVnIGluIFRSQUNFIGZ1bmN0aW9uLgoKCSogQVVUSE9SUywgZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9hdXRob3JzLmgsIGluY2x1ZGUvZGRyYXcuaDoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQ29ycmVjdGVkIGJ1ZyBpbiBEaXJlY3REcmF3U3VyZmFjZSBjcmVhdGlvbiBhbmQgaGFuZGxpbmcgZm9yIGRyaXZlcgoJYmFzZWQgdXBvbiBYbGlsYi4KCgkqIHdpbmRvd3MvZGlucHV0LmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJV2luZSBrZXlib2FyZCBhbmQgbW91c2UgaGF2ZSBub3cgdGhlaXIgb3duIFVJRHMuCgoJKiBvYmplY3RzL2JydXNoLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJRml4IGFsbG9jYXRpb24gc2l6ZSBpbiBDcmVhdGVESUJQYXR0ZXJuQnJ1c2gqLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTm92ICA4IDE2OjQ0OjQxIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW5kb3dzL2RpYWxvZy5jOiBORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCUZpeGVkIGtleXN0cm9rZSBhY2NlbGVyYXRvcnMgaW4gZGlhbG9ncyB3aGljaCBoYXZlIGNvbnRyb2xzIGNvbnRhaW5pbmcKCW90aGVyIGNvbnRyb2xzIGFzIGNoaWxkIHdpbmRvd3MuCgoJKiBpbmNsdWRlL3dpbnByb2MuaCwgbWlzYy9jb21tZGxnLmMsIHdpbmRvd3MvaG9vay5jLCB3aW5kb3dzL3dpbnByb2MuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRml4ZXM6IExCXy9DQl8vRU1fIG1lc3NhZ2VzIGZvciBnZXR0aW5nL3NldHRpbmcgdGV4dCBhbmQgYSBidWcgaW4KCTE2LT4zMiBiaXQgY29udmVyc2lvbi4KCgkqIG9iamVjdHMvZGliLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJUHJldmVudCBDcmVhdGVESUJTZWN0aW9uIGZyb20gc2VnIGZhdWx0aW5nIHdoZW4gb25lIGRpbWVuc2lvbiBvZgoJc2VjdGlvbiBpcyAwLgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvd2luc29jay5oLCBtaXNjL3dpbnNvY2suYzoKCVN0ZXBoZW4gTGFuZ2FzZWsgPHZvcmxvbkBkb2Rkcy5uZXQ+CglTdXBwb3J0IGZvciBJUFggbmV0d29ya2luZyB2aWEgd2luc29jayB1bmRlciBMaW51eC4KCgkqIHJlbGF5MzIvZ2RpMzIuc3BlYywgZ3JhcGhpY3MvcGFpbnRpbmcuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFkZGVkIGEgc3R1YiBmb3IgU3RhcnREb2NBIGFuZCBFbmREb2MuCgoJKiByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHNjaGVkdWxlci9wcm9jZXNzLmMsIHdpbjMyL2NvbnNvbGUuYzoKCUphbWVzIFN1dGhlcmxhbmQgPEphbWVzU3V0aGVybGFuZEBnbXguZGU+CglNb3JlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTZXRDdHJsSGFuZGxlcigpIGZ1bmN0aW9uIChhbmQgdGhlCglyZWxhdGVkIGNvbnNvbGUgZnVuY3Rpb25zKS4KCgkqIG9iamVjdHMvYnJ1c2guYywgcmVsYXkzMi9nZGkzMi5zcGVjOiBKZWZmIEpvaGFubiA8ampvaGFubkBraXZhLm5ldD4KCUFkZGVkIENyZWF0ZURJQlBhdHRlcm5CcnVzaFB0IChHREkzMi4zNSkgd2l0aCBtaW5vciBkb2N1bWVudGF0aW9uCgl1cGRhdGVzLgoKCSogZ3JhcGhpY3MvdmdhLmMsIGluY2x1ZGUvdmdhLmgsIG1zZG9zL2lvcG9ydHMuYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJU2ltdWxhdGUgdGhlIFZHQSB2ZXJ0aWNhbCByZWZyZXNoLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglBZGRlZCBzdXBwb3J0IG9mIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcmVjdGFuZ2xlcyBpbiBCbGl0IGZ1bmN0aW9uLgoKCSogaW5jbHVkZS9kaW5wdXQuaCwgd2luZG93cy9kaW5wdXQuYzoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQWRkZWQgZGV2aWNlIHR5cGUgY29uc3RhbnRzIGFuZCB1c2VkIHRoZW0gaW4gZGV2aWNlIGVudW1lcmF0aW9uCglmdW5jdGlvbi4KCgkqIG1pc2MvcmVnaXN0cnkuYzogVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQVBJIGRvY3VtZW50YXRpb24gc2F5cyB0aGF0IFJlZ0VudW1LZXlFeCwgUmVnRW51bVZhbHVlIGFuZAoJUmVnUXVlcnlJbmZvS2V5IHRha2VzIHRoZSBzaXplIG9mIHRoZSBidWZmZXJzIGFzIGNoYXJhY3RlcnMuCgoJKiBvbGUvY29tcG9iai5jOiBBZGRlZCBtaXNzaW5nICNpbmNsdWRlICJjb25maWcuaCIKCgkqIEFVVEhPUlMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL2F1dGhvcnMuaCwgaW5jbHVkZS9jb25maWcuaC5pbiwgb2xlL2NvbXBvYmouYzoKCUp1c3RpbiBCcmFkZm9yZCA8anVzdGluQHVrYW5zLmVkdT4KCVJlcGxhY2VzIENvQ3JlYXRlR3VpZCBzdHViIHdpdGggYW4gaW1wbGVtZW50YXRpb24gb2YgRENFJ3MgVVVJRAoJc3BlY2lmaWNhdGlvbi4gQWxzbyByZW1vdmVzIHNvbWUgdW5uZWNlc3NhcnkgY29kZSBmcm9tIFN0cmluZ0Zyb21DTFNJRC4KCgkqIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS93aW5iYXNlLmgsIGluY2x1ZGUvd2ludHlwZXMuaDoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFkZGVkIGFuIGV4dGVybiAiQyIgc2FmZWd1YXJkLgoKCSogaW5jbHVkZS9jb21tZGxnLmgsIGluY2x1ZGUvd2luZG93cy5oLCB3aW5kb3dzL2lucHV0LmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CgktIGFkZHMgR2V0RXhpdENvZGVQcm9jZXNzCgktIGNvcnJlY3RzIHRoZSByZXR1cm4tdHlwZSBvZiBHZXRLZXlTdGF0ZQoJLSBjb3JyZWN0cyB0aGUgd2luZWxpYiBkZWZpbml0aW9uIG9mIElzRGlhbG9nTWVzc2FnZQoJLSBhZGRzIHdpbmVsaWIgZGVmaW5pdGlvbnMgZm9yIFByaW50RGxnCgoJKiBvYmplY3RzL2NsaXBwaW5nLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglFeHRTZWxlY3RDbGlwUmduIGZpeDogUkdOX0RJRkYgZGlkIG5vdCB3b3JrLgoKCSogb2JqZWN0cy9jdXJzb3JpY29uLmMsIHdpbmRvd3MvZXZlbnQuYywgd2luZG93cy9tZXNzYWdlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkYXB0ZWQgdG8gbmV3IGlucHV0IGV2ZW50IGhhbmRsaW5nLgoKCSogaWYxNjMyL3RodW5rLmMsIGlmMTYzMi91c2VyLnNwZWMsIGluY2x1ZGUvaW5wdXQuaCwgaW5jbHVkZS93aW5kb3dzLmgsIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHdpbmRvd3MvTWFrZWZpbGUuaW4sIHdpbmRvd3MvaW5wdXQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJVVNFUi1zaWRlIHBhcnQgb2YgaW5wdXQgZXZlbnQgaGFuZGxpbmc6IGNvbnRhaW5zIGltcGxlbWVudGF0aW9uIG9mCglrZXliZF9ldmVudCBhbmQgbW91c2VfZXZlbnQsIGFuZCBVU0VSLXJlbGF0ZWQgY29kZSByZW1vdmVkIGZyb20KCXdpbmRvd3MvZXZlbnQuYyBhbmQgd2luZG93cy9rZXlib2FyZC5jLgoKCSogd2luZG93cy9kaXNwbGF5LmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVN0dWJzIGZvciBESVNQTEFZLkRSViByZW1vdmVkIGZyb20ga2V5Ym9hcmQuYy4KCgkqIGlmMTYzMi9tb3VzZS5zcGVjLCBpbmNsdWRlL21vdXNlLmgsIHdpbmRvd3MvbW91c2UuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50YXRpb24gb2YgTU9VU0UuRFJWIChjb250YWlucyBzb21lIGNvZGUgdGFrZW4gZnJvbQoJd2luZG93cy9ldmVudC5jKS4KCgkqIGlmMTYzMi9rZXlib2FyZC5zcGVjLCBpbmNsdWRlL2tleWJvYXJkLmgsIHdpbmRvd3Mva2V5Ym9hcmQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50YXRpb24gb2YgS0VZQk9BUkQuRFJWIChjb2RlIG1vc3RseSB0YWtlbiBmcm9tIHByZXZpb3VzCgl3aW5kb3dzL2tleWJvYXJkLmMpLgoKCSogbG9hZGVyL21haW4uYywgbG9hZGVyL3Rhc2suYywgbWlzY2VtdS9tYWluLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogcmVhbGx5ICpkbyogc3dpdGNoIHRvIHRoZSBpbml0aWFsIHRhc2sncyBzdGFjay4KCUNhbGxMYXJnZVN0YWNrIG1lY2hhbmlzbSByZS1lbmFibGVkLgoKCSogaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCU5ldyBGaWxlcy4gQWRkZWQgJ2RhdGUgYW5kIHRpbWUgcGlja2VyJyBhbmQgJ21vbnRoIGNhbGVuZGFyJyBjb250cm9sCglkdW1taWVzLiBUaGV5IGFyZSB1c2VkIGJ5IE91dGxvb2sgRXhwcmVzcy4KCgkqIG9sZS9vbGUyLmMsIHJlbGF5MzIvb2xlMzIuc3BlYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBzdHViIGZvciBDcmVhdGVCaW5kQ3R4KCkgYW5kIGFkZGVkIG1pc3NpbmcgQ29HZXRDbGFzc09iamVjdCgpCgl0byAqLnNwZWMgZmlsZS4gTWFrZXMgSW50ZXJuZXQgRXhwbG9yZXIgNC4wMSBoYXBweSA7LSkKCgkqIGRsbHMvY29tY3RsMzIvcGFnZXIuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUxpdHRsZSBpbXByb3ZlbWVudC4KCgkqIGRsbHMvY29tY3RsMzIvbGlzdHZpZXcuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIHByZWxpbWluYXJ5IGhpdCB0ZXN0aW5nLiBNYWtlcyByZWdlZGl0LmV4ZSBoYXBweSA7LSkKCgkqIGRvY3VtZW50YXRpb24vY29tbW9uX2NvbnRyb2xzLCBkbGxzL2NvbWN0bDMyL2ltYWdlbGlzdC5jOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUltcHJvdmVkIGRvY3VtZW50YXRpb24gYW5kIGZpeGVkIHR5cG9zLgoKCSogZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCByZWxheTMyL2NvbWN0bDMyLnNwZWM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgRHJhd1N0YXR1c1RleHQzMkFXKCkgYW5kIENyZWF0ZVN0YXR1c1dpbmRvdzMyQVcoKS4KCgkqIGRsbHMvY29tY3RsMzIvcmViYXIuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUltcHJvdmVkIGRpc3BsYXkgYW5kIGxheW91dCBjb2RlLgoKCSogZGxscy9jb21jdGwzMi9NYWtlZmlsZS5pbiwgZGxscy9jb21jdGwzMi9kYXRldGltZS5jLCBkbGxzL2NvbWN0bDMyL21vbnRoY2FsLmMsIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9kYXRldGltZS5oLCBpbmNsdWRlL21vbnRoY2FsLmg6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJTmV3IEZpbGVzLiBBZGRlZCAnZGF0ZSBhbmQgdGltZSBwaWNrZXInIGFuZCAnbW9udGggY2FsZW5kYXInIGNvbnRyb2wKCWR1bW1pZXMuIFRoZXkgYXJlIHVzZWQgYnkgT3V0bG9vayBFeHByZXNzLgoKU2F0IE5vdiAgNyAxMjo1NjozMiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogb2JqZWN0cy9lbmhtZXRhZmlsZS5jLCByZWxheTMyL2dkaTMyLnNwZWMsIGluY2x1ZGUvd2luZG93cy5oOgoJQ2hhcmxlcyBTdXByaW4gPGNzdXByaW5AbHlueC5kYWMubmV1LmVkdT4KCUFkZGVkIHN0dWJzIGZvciBTZXRXaW5NZXRhRmlsZUJpdHMgYW5kIEdldEVuaE1ldGFGaWxlUGFsZXR0ZUVudHJpZXMuCgoJKiBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJU3RvcCBYMTFEUlZfUm91bmRSZWN0IGNhbGxpbmcgWERyYXdBcmMgd2l0aCAtdmUgd2lkdGgvaGVpZ2h0IHBhcmFtcwoJd2hpY2ggaXQgZGlkIGlmIGVpdGhlciBlbGxpcHNlIGRpbWVuc2lvbiB3YXMgemVyby4KCgkqIGdyYXBoaWNzL3BhaW50aW5nLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJT3B0aW1pemUgUm91bmRSZWN0MzIgdG8gY2FsbCBSZWN0YW5nbGUzMiBpZiBlaXRoZXIgZWxsaXBzZSBkaW1lbnNpb24KCWlzIHplcm8uCgoJKiByZWxheTMyL21wci5zcGVjLCBtaXNjL25ldHdvcmsuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFkZGVkIHN0dWIgV05ldEVudW1DYWNoZWRQYXNzd29yZHMuCgoJKiBtc2Rvcy9pbnQyMS5jLCBtc2Rvcy9pbnQyNS5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJTWFkZSB0aGlzIGZpbGUgRE9TTU9EIGZyaWVuZGx5LgoKCSogbG9hZGVyL25lL3NlZ21lbnQuYywgbG9hZGVyL3BlX2ltYWdlLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglVbmlmaWVkICJObyBpbXBsZW1lbnRhdGlvbiBmb3IuLi4iIHdhcm5pbmdzLgoKCSogd2luMzIvZGV2aWNlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJbW9ub2RlYmcudnhkIHVzZWQgYnkgc29tZSBPcmlnaW4gcHJvZ3JhbXMgaW1wbGVtZW50ZWQuCgoJKiBvYmplY3RzL2JpdG1hcC5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRmFpbCBpZiBsZXNzIHRoZW4gb25lIGVudGlyZSBsaW5lIHJlcXVlc3RlZCBpbiBHZXRCaXRtYXBCaXRzMzIuCgoJKiB3aW5kb3dzL3dpbnByb2MuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUFkZGVkIFdNX0dFVERMR0NPREUgaGFuZGxpbmcgaW4gKFVuKU1hcE1zZzMyQXRvMTYuCgoJKiBpZjE2MzIvY29tcG9iai5zcGVjLCBpbmNsdWRlL29sZS5oLCBvbGUvY29tcG9iai5jLCByZWxheTMyL29sZTMyLnNwZWM6CglKb2huIFJpY2hhcmRzb24gPGpyaWNoYXJkQHplYWxhbmQubXYuY29tPgoJSW1wbGVtZW50YXRpb24gb2YgQ29Mb2FkTGlicmFyeSwgQ29GcmVlQWxsTGlicmFyaWVzLAoJQ29GcmVlVW51c2VkTGlicmFyaWVzLCBDb0ZyZWVMaWJyYXJ5LgoJRml4ZWQgbWlzc3BlbGxpbmcgb2YgQ29VbmluaXRpYWxpemUuCgoJKiBwcm9ncmFtcy9jbG9jay9DaGFuZ2VMb2csIHByb2dyYW1zL2Nsb2NrL21haW4uYzoKCVJvYmVydCBQb3VsaW90IDxrcnlub3NAY2xpYy5uZXQ+CglGaXhlcyBmb3Igb3RoZXIgbGFuZ3VhZ2VzLgoKRnJpIE5vdiAgNiAxNzozNjoxMyAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbWlzYy9yZWdpc3RyeS5jOiBKb2huIFJpY2hhcmRzb24gPGpyaWNoYXJkQHplYWxhbmQubXYuY29tPgoJRml4IHdpZGUgY2hhcmFjdGVyIGZ1bmN0aW9ucyB0byByZXR1cm4gY2hhcmFjdGVyIGNvdW50IGluIGNoYXJhY3RlcgoJcXVhbnRpdGllcyBub3QgYnl0ZSBxdWFudGl0aWVzLiAgTWFrZSBSZWdRdWVyeUluZm9LZXkgYW5kCglSZWdRdWVyeUluZm9LZXkgYmVoYXZlIGNvcnJlY3RseSBpbiB3aW45NSBtb2RlLgoKCSogaW5jbHVkZS9kaW5wdXQuaCwgd2luZG93cy9kaW5wdXQuYzoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQ2hhbmdlZCBtb3VzZSBidXR0b24gbWFwcGluZyBhbmQgY2hlY2sgc2l6ZSBvZiByZXR1cm4gYnVmZmVyLgoKCSogb2JqZWN0cy9jbGlwcGluZy5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJRXh0U2VsZWN0Q2xpcFJnbigpIHdpdGggUkdOX0NPUFkgY29waWVzIHRoZSB3cm9uZyByZWdpb24uCgoJKiBmaWxlcy9maWxlLmM6IFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUZpeGVkIGFuIGVycm9yIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBGSUxFX1NoYXJlRGVueS4KCgkqIHNjaGVkdWxlci9oYW5kbGUuYywgaWYxNjMyL3RodW5rLmMsIGluY2x1ZGUvZGVidWd0b29scy5oLCBpbmNsdWRlL3NpZ19jb250ZXh0LmgsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU29sYXJpcyByZWRlZmluZXMgRVJSIGFuZCBDUywgZml4ZWQgb2NjdXJhbmNlcy4KCVNvbGFyaXMgaGFzIFRSQVBOTyBpbiBpdHMgc2lnY29udGV4dCwgYWRkZWQgdG8gc2lnX2NvbnRleHQuaAoKCSogaW5jbHVkZS9tbXN5c3RlbS5oLCBtdWx0aW1lZGlhL21taW8uYywgcmVsYXkzMi93aW5tbS5zcGVjLCBpZjE2MzIvbW1zeXN0ZW0uc3BlYzoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJTWFkZSBtbWlvU2V0QnVmZmVyIGNhbGxhYmxlIGZyb20gMTYgYW5kIDMyIGJpdCBjb2RlLgoKCSogY29udHJvbHMvbWVudS5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVkIHdyb25nIGFyZyB0eXBlLgoKCSogb2JqZWN0cy9kaWIuYywgb2JqZWN0cy9nZGlvYmouYywgZ3JhcGhpY3MveDExZHJ2L01ha2VmaWxlLmluLCBncmFwaGljcy94MTFkcnYvZGliLmMsIGdyYXBoaWNzL3gxMWRydi9pbml0LmMsIGluY2x1ZGUveDExZHJ2Lmg6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCU1vdmVkIFgxMSBESUIgc3R1ZmYgdG8geDExZHJ2LgoKCSogd2luMzIvY29kZV9wYWdlLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglUaGUgQVBJIGZvciBXaWRlQ2hhclRvTXVsdGlCeXRlIHNheXMgdGhhdCB0aGUgc3JjLXN0cmluZyBoYXMgb25seSB0byBiZQoJdHJlYXRlZCBhcyBOVUxMLXRlcm1pbmF0ZWQgaWYgc3JjbGVuIGlzIC0xLgoKCSogaW5jbHVkZS93aW4uaCwgd2luZG93cy9ldmVudC5jLCB3aW5kb3dzL3dpbi5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglNYWRlIHN1cmUgQ29uZmlndXJlTm90aWZ5IGlzIHByb2Nlc3NlZCBiZWZvcmUgRXhwb3NlLCBkZWZlcnJpbmcgdGhlCglFeHBvc2UgZXZlbnQgaWYgbmVjZXNzYXJ5LCB0aHVzIHdvcmtpbmcgYXJvdW5kIGEgV00gZmxhdyB3aXRoIHZpcnR1YWwKCWRlc2t0b3Agc2Nyb2xsaW5nIGluIC1tYW5hZ2VkIG1vZGUuCgoJKiByZXNvdXJjZXMvc3lzcmVzX0ZyLnJjOiBFcmljIFBvdWVjaCA8ZXJpYy5wb3VlY2hAbGVtZWwuZnI+CglUcmFuc2xhdGVkIGluIEZyZW5jaCAobm90IHNvIGdvb2QgYW55aG93KSBtZXNzYWdlIGZvciB0aGUgbWFyayBvbgoJc3lzdGVtIG1lbnUuCgoJKiBtaXNjL21haW4uYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglDaGFuZ2VkIHRoZSBkZWZhdWx0IGZyb20gMCB0byAweDQwOSAoZW5nLXVzKS4KCgkqIHdpbmRvd3MvbWRpLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJVHdvIG1pc3NpbmcgV0lOQVBJcy4KCgkqIGluY2x1ZGUvaW50ZXJmYWNlcy5oOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVkIG9uZSB3cm9uZyBwYXJhbWV0ZXIuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglGaXhlZCAtLWRpc2FibGUtbGliLgoKVGh1IE5vdiAgNSAxMDozMzoxOCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS9jb21tY3RybC5oOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUNvbnN0YW50cyBmb3IgY29udHJvbHMgaW4gY29tbW9uIGRpYWxvZ3MuCgpXZWQgTm92ICA0IDE4OjA4OjMzIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtaXNjL2NydGRsbC5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVkIHNvbWUgY29tcGlsZXIgd2FybmluZ3MuCgpTdW4gTm92ICAxIDE5OjI3OjI0IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9ub25jbGllbnQuYywgd2luZG93cy9wYWludGluZy5jLCB3aW5kb3dzL3dpbmhlbHAuYywgd2luZG93cy93aW5wb3MuYywgbWlzYy9jb21tZGxnLmMsIG1pc2Mvc2hlbGwuYywgbWlzYy93aW5zb2NrLmMsIG1pc2NlbXUvaW5zdHIuYywgbXVsdGltZWRpYS9hdWRpby5jLCBtdWx0aW1lZGlhL2pveXN0aWNrLmMsIG9iamVjdHMvYml0bWFwLmMsIG9iamVjdHMvY2xpcHBpbmcuYywgb2JqZWN0cy9jb2xvci5jLCBvYmplY3RzL2N1cnNvcmljb24uYywgb2JqZWN0cy9kaWIuYywgdG9vbHMvd3JjL2R1bXByZXMuYywgdG9vbHMvd3JjL3BhcnNlci5sLCB3aW5kb3dzL2NsaXBib2FyZC5jLCB3aW5kb3dzL21kaS5jLCBmaWxlcy9maWxlLmMsIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jLCBtZW1vcnkvaGVhcC5jOgoJSmVzcGVyIFNrb3YgPGpza292QGN5Z251cy5jby51az4KCWVnY3MgJ2FtYmlndW91cyBlbHNlJyB3YXJuaW5ncyBmaXhlcy4KCgkqIGluY2x1ZGUvdG9vbGhlbHAuaCwgaW5jbHVkZS93aW5kb3dzLmgsIHNjaGVkdWxlci9wcm9jZXNzLmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUdldCByaWQgb2YgdGhlIHJlZGVmaW5pdGlvbiBvZiBNQVhfUEFUSCBhbmQgbW92ZSBQUk9DRVNTRU5UUlkzMgoJZGVmaW5pdGlvbiB0byB0b29saGVscC5oLgoKCSogd2luZG93cy93aW4uYywgaW5jbHVkZS9wZV9pbWFnZS5oLCBsaWJyYXJ5L3dpbmVzdHViLmMsIGxvYWRlci9lbGYuYywgbG9hZGVyL21vZHVsZS5jLCBsb2FkZXIvcmVzb3VyY2UuYywgbWlzYy9jYWxsYmFjay5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglSdW4gV2luZWxpYiBhcHBsaWNhdGlvbnMgYXMgMzItYml0IHByb2Nlc3NlcyBpbiB0aGUgaW5pdGlhbCB0YXNrLgoJU2ltcGxpZmllZC9yZW1vdmVkIHNldmVyYWwgc3BlY2lhbCAnaWYgKF9fd2luZWxpYiknIGNhc2VzIGluCglXaW5lIG1haW4gY29kZSBvYnNvbGV0ZWQgYnkgdGhhdCBjaGFuZ2UuCgoJKiB3aW5kb3dzL2V2ZW50LmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQ2FsbCBtb3VzZSBkcml2ZXIgY2FsbGJhY2sgYWxzbyBpZiB3aW5kb3dzIGFyZSBub3QgcmVnaXN0ZXJlZCB3aXRoIFgKCShpZiB1c2luZyBuYXRpdmUgVVNFUi5FWEUpLgoKCSogbWVtb3J5L2F0b20uYywgaW5jbHVkZS9hdG9tLmg6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkYXB0ZWQgdG8gc2VwYXJhdGlvbiBiZXR3ZWVuIEtFUk5FTCBhbmQgVVNFUi4KCgkqIGlmMTYzMi9idWlsdGluLmMsIGluY2x1ZGUvbWFpbi5oLCBsb2FkZXIvbWFpbi5jLCBsb2FkZXIvdGFzay5jLCBtaXNjZW11L21haW4uYywgcmVsYXkzMi9nZGkzMi5zcGVjLCByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHNjaGVkdWxlci9wcm9jZXNzLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIG5ldyBXaW5lIHN0YXJ0dXAgc2VxdWVuY2UsIHNlcGFyYXRpbmcgc3RhcnR1cCBpbnRvCglLRVJORUwvVVNFUi9HREkgcmVsYXRlZCBwYXJ0cywgYWxsb3dpbmcgbmF0aXZlIHJlcGxhY2VtZW50LgoJSW1wbGVtZW50ZWQgaW5pdGlhbCAna2VybmVsJyB0YXNrLgoKCSogaW5jbHVkZS9vbGUuaCwgaW5jbHVkZS93aW5lcnJvci5oLCBvbGUvY29tcG9iai5jOgoJSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEB6ZWFsYW5kLm12LmNvbT4KCUltcGxlbWVudGF0aW9uIG9mIElucHJvY1NlcnZlcjMyIENvR2V0Q2xhc3NPYmplY3QuCgoJKiBpbmNsdWRlL2JpdG1hcC5oLCBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2N1cnNvcmljb24uYywgb2JqZWN0cy9vZW1iaXRtYXAuYywgZ3JhcGhpY3MveDExZHJ2L2JpdG1hcC5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglNb3JlIGJpdG1hcCBmaXhlcy4KCgkqIHdpbmRvd3Mvd2lucHJvYy5jOiBGaXhlZCBjcmFzaGVzIHdpdGggV01fR0VURExHQ09ERSB0cmFuc2xhdGlvbi4KCgkqIHByb2dyYW1zL3dpbmhlbHAvTWFrZWZpbGUuaW4sIHByb2dyYW1zL3dpbnZlci9NYWtlZmlsZS5pbiwgd2luZG93cy93aW4uYywgd2luZG93cy94MTFkcnYvLmN2c2lnbm9yZSwgd2luZG93cy94MTFkcnYvTWFrZWZpbGUuaW4sIHdpbmRvd3MveDExZHJ2L2luaXQuYywgaW5jbHVkZS9jb25maWcuaC5pbiwgaW5jbHVkZS93aW4uaCwgbGlidGVzdC9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvY2xvY2svTWFrZWZpbGUuaW4sIHByb2dyYW1zL2NvbnRyb2wvTWFrZWZpbGUuaW4sIHByb2dyYW1zL25vdGVwYWQvTWFrZWZpbGUuaW4sIHByb2dyYW1zL3Byb2dtYW4vTWFrZWZpbGUuaW4sIHByb2dyYW1zL3JlZ3Rlc3QvTWFrZWZpbGUuaW4sIHByb2dyYW1zL3ZpZXcvTWFrZWZpbGUuaW4sIE1ha2UucnVsZXMuaW4sIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9hY2NvbmZpZy5oOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglTdGFydGVkIG1vdmluZyBzb21lIFgxMSB3aW5kb3cgbWFuYWdlbWVudCBjb2RlIHRvIHdpbmRvd3MveDExZHJ2LgoKCSogaWYxNjMyL3VzZXIuc3BlYywgd2luZG93cy9kaWFsb2cuYywgd2luZG93cy93aW5wcm9jLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUZpeGVkIElzRGlhbG9nTWVzc2FnZTE2LgoKCSogTWFrZWZpbGUuaW46IERvdWdsYXMgUmlkZ3dheSA8cmlkZ3dheUB3aW5laHEuY29tPgoJVGVsbCBwZW9wbGUgdG8gaWdub3JlIHRoZSAnZ2V0cycgd2FybmluZy4gU29tZSB3aWxsIGxpc3Rlbi4KCgkqIGdyYXBoaWNzL3gxMWRydi9iaXRtYXAuYywgd2luZG93cy9ncmFwaGljcy5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglBIGNvdXBsZSBvZiBzbWFsbCBmaXhlcyB0byBteSBiaXRtYXAgcGF0Y2guCgoJKiByZXNvdXJjZXMvVE9ETywgcmVzb3VyY2VzL3N5c3Jlc19EZS5yYywgcmVzb3VyY2VzL3N5c3Jlc19Fbi5yYywgd2luZG93cy9ub25jbGllbnQuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFsbG93IHRoZSB1c2VyIHRvIHB1dCBhIG1hcmsgaW4gdGhlIGRlYnVnIGxvZyBieSBhZGRpbmcgYSBpdGVtIGluIHRoZQoJU1lTTUVOVS4gVGhlIG1lc3NhZ2VzIG5lZWRzIGltcGxlbWVudGF0aW9uIGluIGFsbCBvdGhlciBsYW5ndWFnZXMgdGhhbgoJRW5nbGlzaCBhbmQgR2VybWFuLgoKCSogZmlsZXMvZmlsZS5jOiBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglHaXZlIHRlbXBmaWxlIGEgZGlmZmVyZW50IG5hbWUgZXZlbiBpZiB0aGV5IGFyZSBjcmVhdGVkIGluIHRoZSBzYW1lCglzZWNvbmQuIFJlbW92ZWQgc29tZSBmaXhtZXMgZnJvbSB0aGUgU2hhcmVEZW55IHN0dWZmLgoKCSogaW5jbHVkZS9tZGkuaCwgaW5jbHVkZS93aW5kb3dzLmgsIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHdpbmRvd3MvbWRpLmMsIHdpbmRvd3Mvd2luLmM6CglSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJQ3JlYXRlV2luZG93RXgzMltBV10gbm93IGNyZWF0ZXMgYW4gTURJIGNoaWxzIHdoZW4gdGhlIFdNX0VYX01ESUNISUxECglleHRlbmRlZCBzdHlsZSBpcyBzcGVjaWZpZWQuIEFsc28gaW1wbGVtZW50ZWQgQ3JlYXRlTURJV2luZG93MzJBKCkKCWNhbGwgLSBzaW5nbGUgdGhyZWFkIG9ubHkgLS4KCgkqIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglFcnJlZCBpbiB0aGUgYml0IG1hY3JvcyBpbiB0cmVldmlldy5jLiBTaGlmdGNvdW50cyB3ZXJlIHdyb25nLgoKCSogbG9hZGVyL3BlX2ltYWdlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRGV0ZWN0aW9uIG9mIHRoZSBlbmQgb2YgaW1wb3J0cyB3aXRoIENoYXJhY3RlcmlzdGljcyAwIGZhaWwgZm9yIEJvcmxhbmQKCXByb2dyYW1zICh3aGljaCBzZWVtIHRvIGhhdmUgYWx3YXlzIGNoYXJhY3RlcmlzdGljcyAwKS4gQ2hhbmdlZCB0byBhbGdvcml0aG0KCXRvIHNvbWV0aGluZyBhIGJpdCBtb3JlIGludGVsbGlnZW50LgoKCSogb2xlL2NvbXBvYmouYywgcmVsYXkzMi9vbGUzMi5zcGVjOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkIENvRnJlZUxpYnJhcnkgc3R1Yi4KCgkqIFJFQURNRTogVXBkYXRlZCBGQVEgbG9jYXRpb24uCgoJKiBncmFwaGljcy9lc2NhcGUuYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglJbXBsZW1lbnQgU0VHUFRSIGNvbnZlcnNpb24gZm9yIFNUQVJURE9DIGluIEVzY2FwZTMyKCkuCgoJKiBvYmplY3RzL2RjLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBTZXREQ1N0YXRlIGRpZCBub3QgcmVzZXQgY2xpcHBpbmcgcmVnaW9uIHRvIGVtcHR5LgoKCSogd2luMzIvaW5pdC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeGVkIHNtYWxsIG9mZiBieSBvbmUgZXJyb3IgaW4gR2V0Q29tcHV0ZXJOYW1lMzJXLCBhbHdheXMga2lsbGVkIHRoZQoJbGFzdCBjaGFyYWN0ZXIgb2YgYSBob3N0bmFtZS4KCgkqIG9iamVjdHMvZGliLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRG9uJ3QgSGVhcEZyZWUoKSBjb2xvcm1hcCBpZiB3ZSBkaWRuJ3QgYWxsb2NhdGUgb25lLgoKCSogd2luMzIvYWR2YXBpLmMsIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL3VzZXIuYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGluY2x1ZGUvd2ludHlwZXMuaCwgbWlzYy9jcnRkbGwuYywgbWlzYy9wcmludGRydi5jLCByZWxheTMyL2FkdmFwaTMyLnNwZWMsIHJlbGF5MzIvY3J0ZGxsLnNwZWMsIHJlbGF5MzIvbXByLnNwZWMsIHJlbGF5MzIvc2hlbGwzMi5zcGVjLCByZWxheTMyL3VzZXIzMi5zcGVjLCByZWxheTMyL3dpbnNwb29sLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIHN0dWJzIGZvciB1c2VyMzIsYWR2YXBpMzIgZnVuY3Rpb25zLgoKCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkbGxzL01ha2VmaWxlLmluLCBkbGxzL250ZGxsLyosIGluY2x1ZGUvbnRkbGwuaCwgbWlzYy9BdHRpYy9udGRsbC5jLCBtaXNjL01ha2VmaWxlLmluLCByZWxheTMyL250ZGxsLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU1vcmUgTnQqIGFuZCBSdGwqIGZ1bmN0aW9uIHN0dWJzLCBtb3ZlZCBudGRsbC5jIHRvIGRsbHMvbnRkbGwvLgoKCSogbWVtb3J5L2xvY2FsLmMsIG1lbW9yeS9oZWFwLmM6IEFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUNoYW5nZWQgbWFueSBXQVJOKClzIHJlbGF0ZWQgdG8gaW50ZXJuYWwgV2luZSBtZW1vcnkgZmFpbHVyZXMgdG8KCUVSUigpcy4KCgkqIGlmMTYzMi9rZXJuZWwuc3BlYywgc2NoZWR1bGVyL3Byb2Nlc3MuYzoKCUFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUFkZGVkIC5zcGVjIGVudHJ5IGZvciBLRVJORUwuUmVnaXN0ZXJTZXJ2aWNlUHJvY2Vzcy4KCgkqIGlmMTYzMi9kaXNwbGF5LnNwZWMsIHdpbmRvd3Mva2V5Ym9hcmQuYzoKCUFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUFkZGVkIHN0dWIgZm9yIENoZWNrQ3Vyc29yKCkuCgoJKiBpbmNsdWRlL2RpYWxvZy5oLCB3aW5kb3dzL2RlZmRsZy5jOiBUaW0gTmV3c29tZSA8bnVpc2FuY2VAY211LmVkdT4KCUZpeCBmb3Igbm9uLW1vZGFsIGRpYWxvZyBjbG9zaW5nLgoKCSogd2luZG93cy9kaW5wdXQuYzogRGF2aWQgRmF1cmUgIDxmYXVyZUBrZGUub3JnPgoJUmV3cm90ZSB0aGUgdHdvIHJvdXRpbmVzIHVzaW5nIHRoZSB2a2V5LT5zY2FuY29kZSBhcnJheSB0byB1c2UKCWtleWMydmtleSBmb3IgZWFjaCBrZXljb2RlLCBpbnN0ZWFkLiBOb3QgdGVzdGVkLgoJUmVtb3ZlZCB1bnVzZWQgSURpcmVjdElucHV0RGV2aWNlQV9HZXREZXZpY2VTdGF0ZS4KCUZpeGVkIHdhcm5pbmcgaW4gVFJBQ0UoKSBjYWxsLgoKCSogd2luZG93cy9rZXlib2FyZC5jOiBEYXZpZCBGYXVyZSA8ZmF1cmVAa2RlLm9yZz4KCURlbGV0ZWQgdGhlIHZrZXktPnNhbmNvZGUgYXJyYXksIGJlY2F1c2UgUVdFUlRZIHNwZWNpZmljLgoJQmFjayB0byB1c2luZyB0aGUgWCBrZXljb2RlIGluc3RlYWQgYXMgdGhlIHNjYW5jb2RlLiBUZXN0ZWQuCgoJKiBncmFwaGljcy9wc2Rydi9pbml0LmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVByaW50IGEgbWVzc2FnZSBpZiB0aGUgUG9zdFNjcmlwdCBkcml2ZXIgY2FuJ3QgZmluZCBhIFBQRCBmaWxlLgoKCSogbXNkb3MvaW50MTAuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglBZGRlZCBWR0EgMjU2LWNvbG9yIG1vZGUgMHgxMyB1c2luZyB0aGUgRGlzcGxheURpYiBWR0EgZW11bGF0aW9uLgoJKERPUyBhcHBzL2dhbWVzIHVzaW5nIHRoaXMgbW9kZSBjb21lcyB1cCBub3csIGFsdGhvdWdoIHlvdSBjYW4ndAoJcmVhbGx5IGRvIGFueXRoaW5nIHdpdGggdGhlbSAoeWV0PykuKQoKCSogbXNkb3MvZHBtaS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVVzZSBtYWNybyBWODZfRkxBRy4KCgkqIG1zZG9zL2Rvc21lbS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVNldCBkZWZhdWx0IHZpZGVvIG1vZGUgdG8gMyAoODB4MjUgY29sb3IpLgoKCSogbG9hZGVyL2Rvcy9kb3Ntb2QuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglJZ25vcmVzIGEgY291cGxlIG9mIHNpZ25hbHMuCgoJKiBncmFwaGljcy9NYWtlZmlsZS5pbiwgZ3JhcGhpY3MvZGlzcGRpYi5jLCBncmFwaGljcy92Z2EuYywgaW5jbHVkZS92Z2EuaCwgbXNkb3MvaW9wb3J0cy5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglNb3ZlZCBWR0EtZW11bGF0aW5nIERpcmVjdFggY29kZSBmcm9tIGRpc3BkaWIuYyB0byBhIHNlcGFyYXRlCglmaWxlLiBNYWRlIGl0IHVzZSBhIHN5c3RlbSB0aW1lciBhbmQgdHJhcCBJL08gYWNjZXNzZXMgdG8gdGhlIFZHQQoJREFDIHJlZ2lzdGVycyB0byBhY2NvbW1vZGF0ZSBEaXNwbGF5RGliLXVzaW5nIHByb2dyYW1zIHRoYXQgdHJ5IHRvCglhY2Nlc3MgdGhlIFZHQSBoYXJkd2FyZSBkaXJlY3RseS4KCgkqIG1pc2NlbXUvaW5zdHIuYywgaWYxNjMyL3NpZ25hbC5jLCBpbmNsdWRlL2Rvc2V4ZS5oLCBsb2FkZXIvZG9zL2Rvc3ZtLmMsIGxvYWRlci9kb3MvbW9kdWxlLmMsIG1pc2Mvc3lzdGVtLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUluZGlyZWN0aW9uIGZvciBJTlNUUl9FbXVsYXRlSW5zdHJ1Y3Rpb24gZm9yIHVzZSBieSBET1MgY29kZS4KCUFkZGVkIHN1cHBvcnQgZm9yIGEgNTVIeiBzeXN0ZW0gdGltZXIsIGxldHRpbmcgRE9TIGFwcHMgY2FsaWJyYXRlCgl0aGVpciBkZWxheSBsb29wcyBhbmQgc3VjaC4gQ2FsbHMgSU5TVFJfRW11bGF0ZUluc3RydWN0aW9uIGZvcgoJaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIChwcmluY2lwYWxseSBJL08gcG9ydCBhY2Nlc3MpLiBBZGRlZCBtYWNybwoJVjg2X0ZMQUcuCgpTYXQgT2N0IDMxIDEyOjIwOjU2IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW5kb3dzL2RpbnB1dC5jLCBtdWx0aW1lZGlhL2Rzb3VuZC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTbWFsbCBmaXhlcy4KCgkqIG1lbW9yeS92aXJ0dWFsLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUmVtb3ZlZCB0aGUgRklYTUUoKSBhbmQgbW92ZWQgU2V0TGFzdEVycm9yKDApIHRvIHRoZSBlbmQgKHNvIHRoYXQKCUdldFRlbXBGaWxlTmFtZSBldC5hbC4gY2FuJ3Qgb3ZlcndyaXRlIGl0KS4KCgkqIG1pc2MvQXR0aWMvbnRkbGwuYywgcmVsYXkzMi9udGRsbC5zcGVjLCByZWxheTMyL3JlbGF5Mzg2LmMsIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHdpbmRvd3MvdXNlci5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglMb3RzIG9mIHN0dWJzIHRvIGdldCB3aW5sb2dvbi5leGUgZnJvbSBudDMuNTEgYW5kIG90aGVyIE5UMy41MSBhcHBsZXRzCglhIGJpdCBmdXJ0aGVyLgoKCSogd2luZG93cy9tZGkuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCU1ESWNoaWxkIGNyZWF0ZWQgd2hlbiB0aGUgTURJIGNsaWVudCBoYXMgdGhlIE1ESVNfQUxMQ0hJTERTVFlMRVMKCXN0eWxlLCBzaG91bGQgbm90IGJlIHNob3duIGF0IGNyZWF0aW9uIG5vciBhY3RpdmF0ZWQgdW5sZXNzIHRoZQoJV1NfVklTSUJMRSBmbGFnIGlzIHNldC4KCgkqIGxvYWRlci9wZV9pbWFnZS5jOiBTdGVwaGVuIExhbmdhc2VrIDx2b3Jsb25AZG9kZHMubmV0PgoJQnVnZml4IGZvciBmaXh1cF9pbXBvcnRzOiBFbmFibGUgY2hlY2tpbmcgZm9yIHRlcm1pbmF0aW5nIGltcG9ydAoJc3RydWN0IHdpdGggQ2hhcmFjdGVyaXN0aWNzIGJpdGZpZWxkIHNldCB0byAwLgoKCSogd2luZG93cy93aW4uYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCURlbGF5IGxpbmtpbmcgbmV3bHkgY3JlYXRlZCB3aW5kb3cgaW4gbGlua2VkIGxpc3QgdW50aWwgYWZ0ZXIgdGhlCglXTV9OQ0NSRUFURSBtZXNzYWdlLgoKCSogZmlsZXMvZmlsZS5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJU21hbGwgYnVnIGluIEZJTEVfSW5Vc2UgZG9lcyBub3QgZG8gYSByZWxlYXNlIG9uIGV2ZXJ5IGFjcXVpcmVkIGZpbGUKCXBvaW50ZXIuCgoJKiBjb250cm9scy9zdGF0aWMuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglscHN6TmFtZSBvZiBOVUxMIGlzIGhhbmRsZWQgKHJlbW92ZXMgc29tZSB3YXJuaW5ncykuCgoJKiB0b29scy90ZXN0cnVuOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU5vdyBhbGxvd3Mgc3BlY2lmaWNhdGlvbiBvZiBhIHN0YXJ0IGRpcmVjdG9yeSBvbiB0aGUgY21kbGluZS4KCgkqIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglHZXRzIHJpZCBvZiB0aGUgYXJjaC1kZXBlbmRlbnQgYml0IG9wZXJhdGlvbnMgKHRlc3RlZCBvbiBMaW51eCBhbmQKCVNvbGFyaXMveDg2KS4KCldlZCBPY3QgMjggMTQ6NTg6MDIgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbmRvd3Mvd2luLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQSBkZXN0IGJ1ZmZlciB3YXMgcHJpbnRlZCBvdXQgYXMgc3RyaW5nLgoKCSogaW5jbHVkZS9zaGxvYmouaDogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglDb3JyZWN0ZWQgMiB3cm9uZyBkZWZpbml0aW9ucy4KCgkqIGluY2x1ZGUvd2luZG93cy5oLCByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHNjaGVkdWxlci9wcm9jZXNzLmM6CglQYXRyaWNrIFNwaW5sZXIgPHNwaW5sZXIucGF0cmlja0BtYXlvLmVkdT4KCUFkZGVkIHN0dWJzIGZvciBQcm9jZXNzMzJGaXJzdC9Qcm9jZXNzMzJOZXh0LgoKCSogaW5jbHVkZS94MTFkcnYuaCwgb2JqZWN0cy9jbGlwcGluZy5jLCBvYmplY3RzL2RjLmMsIG9iamVjdHMvZGN2YWx1ZXMuYywgb2JqZWN0cy9wYWxldHRlLmMsIG9iamVjdHMvcmVnaW9uLmMsIGdyYXBoaWNzL2VzY2FwZS5jLCBncmFwaGljcy9tZXRhZmlsZWRydi9ncmFwaGljcy5jLCBncmFwaGljcy9wYWludGluZy5jLCBncmFwaGljcy9wYXRoLmMsIGdyYXBoaWNzL3BzZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL3dpbjE2ZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jLCBpbmNsdWRlL2RlYnVnZ2VyLmgsIGluY2x1ZGUvZ2RpLmgsIGluY2x1ZGUvbWV0YWZpbGVkcnYuaCwgaW5jbHVkZS9wc2Rydi5oLCBpbmNsdWRlL3dpbjE2ZHJ2LmgsIGluY2x1ZGUvd2luZG93cy5oLCBpbmNsdWRlL3dpbnR5cGVzLmgsIGRlYnVnZ2VyL2RiZy55LCBkZWJ1Z2dlci9tc2MuYywgZGVidWdnZXIvc3RhYnMuYywgZGVidWdnZXIvdHlwZXMuYzoKCUZyYW7nb2lzIEdvdWdldCA8Z291Z2V0QG1ldGFpbnRlZ3JhdGlvbi5uZXQ+CglGaXhlZCBzb21lIExQUE9JTlQvTFBTSVpFIG1pc21hdGNoZXMgYW5kIHNvbWUgbWlzc2luZyAiY29uc3QiIGluIHRoZQoJaGVhZGVycyBwcm90b3R5cGVzLgoKCSogZ3JhcGhpY3MvcHNkcnYvaW5pdC5jLCBncmFwaGljcy93aW4xNmRydi9pbml0LmMsIGdyYXBoaWNzL3gxMWRydi9iaXRtYXAuYywgZ3JhcGhpY3MveDExZHJ2L2JydXNoLmMsIGdyYXBoaWNzL3gxMWRydi9pbml0LmMsIGdyYXBoaWNzL3gxMWRydi9vYmplY3RzLmMsIGluY2x1ZGUvYml0bWFwLmgsIGluY2x1ZGUvZ2RpLmgsIGluY2x1ZGUveDExZHJ2LmgsIG9iamVjdHMvYml0bWFwLmMsIG9iamVjdHMvYnJ1c2guYywgb2JqZWN0cy9kaWIuYywgb2JqZWN0cy9vZW1iaXRtYXAuYywgd2luZG93cy9ncmFwaGljcy5jLCBncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUFkZGVkIHBCaXRtYXBCaXRzIGFuZCBwQ3JlYXRlQml0bWFwIHRvIHRoZSBHREkgZnVuY3Rpb24gdGFibGUgYW5kCgltb3ZlZCB0aGUgWDExIGRlcGVuZGVudCBzdHVmZiBvdXQgb2Ygb2JqZWN0cy9iaXRtYXAuYyBpbnRvIHgxMWRydi4KCgkqIHJlbGF5MzIvc2hlbGwzMi5zcGVjLCBkbGxzL3NoZWxsMzIvc2hlbGxvbGUuYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGluY2x1ZGUvc2hlbGwuaCwgZGxscy9zaGVsbDMyL3BpZGwuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IFNIR2V0U2ltcGxlSURMaXN0RnJvbVBhdGgzMkFXLgoJVW5pY29kZS1zYWZlOiBQYXRoRmluZEZpbGVuYW1lMzJBVy4KCgkqIGluY2x1ZGUvc2hsb2JqLmg6IEp1c3RpbiBCcmFkZm9yZCA8anVzdGluQGJ1c2JveS5zcGVkLnVrYW5zLmVkdT4KCUlFeHRyYWN0SWNvbiBoYWQgYW4gZXh0cmEgYyBpbiBhIHN0cnVjdCBkZWZpbml0aW9uLgoKCSogcmVsYXkzMi9kcGxheS5zcGVjOgoJSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEB6ZWFsYW5kLm12LnNwYW1sZXNzLmNvbT4KCUFkZGVkIGVudHJ5IGZvciBEaXJlY3RQbGF5RW51bWVyYXRlLgoKCSogb2xlL25scy9za3kubmxzLCBvbGUvb2xlMm5scy5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglBZGRlZCBTbG92YWsgbmxzLXJlc291cmNlcy4KCgkqIG9iamVjdHMvcmVnaW9uLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJRml4ZWQgZGlmZmVyZW5jZXMgYmV0d2VlbiBTZXRSZWN0UmduMTYgYW5kIFNldFJlY3RSZ24zMi4gQWxzbyBhIGJ1ZyBmaXggZm9yCglDcmVhdGVSb3VuZFJlY3RSZ24uCgpUdWUgT2N0IDI3IDE1OjQxOjU0IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW5kb3dzL3VzZXIuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglFbnVtRGlzcGxheU1vZGVzKiByZXR1cm5zIGEgc3RhdGljIGxpc3Qgb2YgbW9kZXMgd2l0aCBhbGwgZGVwdGhzCgkoaGVscHMgaGV4ZW4yZGVtbyksIENoYW5nZURpc3BsYXlTZXR0aW5ncyByZXR1cm5zIHRydWUgYWxsIHRoZSB0aW1lLgoKCSogaW5jbHVkZS93aW50eXBlcy5oLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIHJlbGF5MzIvd2lubW0uc3BlYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU3R1YiBmb3IgbWlkaU9wZW5TdHJlYW0gKGhlbHBzIGhleGVuMmRlbW8pLgoKCSogb2xlL25scy9lbmMubmxzLCBvbGUvbmxzL2ZyYy5ubHMsIHJlc291cmNlcy9zeXNyZXNfRnIucmM6CglSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgoJU21hbGwgcGF0Y2ggZm9yIGJldHRlciBGcmVuY2ggc3VwcG9ydC4KCgkqIGxvYWRlci9lbGYuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IG1lbW9yeSBvdmVyd3JpdGUgYnVnLgoKTW9uIE9jdCAyNiAxMTowNDoxMyAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogY29udHJvbHMvZWRpdC5jLCB3aW5kb3dzL2NsaXBib2FyZC5jOiBQYXNjYWwgQ3VvcSA8cGN1b3FAZW5zLWx5b24uZnI+CgkzMi1iaXQgY2xpcGJvYXJkIHN1cHBvcnQuCgoJKiB3aW5kb3dzL3F1ZXVlLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4IGZvciBRVUVVRV9TaWduYWw6IEFsd2F5cyB1c2UgUG9zdEV2ZW50IGlmIG5vIHRocmVhZCBpcyB3YWl0aW5nCglvbiB0aGUgcXVldWUuCgoJKiB3aW5kb3dzL21kaS5jOiBORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCUZpeGVkIGEgbWlub3IgcHJvYmxlbSB3aXRoIHRoZSBtZW51cyBmb3IgbWRpIGNoaWxkIHdpbmRvd3MuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJlbW92ZWQgbm8gbG9uZ2VyIG5lY2Vzc2FyeSBjb21tZW50ZWQgb3V0IGNvZGUsIGRlc3Ryb3kgb2xkIHdpbmRvdwoJd2hlbiBTZXREaXNwbGF5TW9kZSBpcyBjYWxsZWQgYWdhaW4sIEVudW1EaXNwbGF5TW9kZXMgbm93IHJldHVybnMKCWFsbCBwb3NzaWJsZSBtb2RlcyAodXNpbmcgYSBzdGF0aWMgbGlzdCkuCgoJKiBtZW1vcnkvdmlydHVhbC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFub24gc2hhcmVkIG1hcHBpbmcgZml4ZWQgZm9yIGZpbGUgc2hhcmluZy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE9jdCAyNSAxMDozMjoyMyAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogb2xlL29sZTJubHMuYywgaW5jbHVkZS93aW5ubHMuaDogQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CglGaXhlcyBmb3IgTEFOR19ORVVUUkFMLgoKCSogaW5jbHVkZS90YXNrLmg6CglBZGRlZCBzb21lIHBhZGRpbmcgdG8gdGhlIFBEQiBmb3IgaWxsLWJlaGF2aW5nIGFwcHMgKHByb2JsZW0gcmVwb3J0ZWQKCWJ5IEFuZHJlYXMgTW9ocikuCgoJKiBkb2N1bWVudGF0aW9uL2lvcG9ydC10cmFjZS1oaW50cywgaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oLCBtaXNjZW11L2luc3RyLmM6CglKb25hdGhhbiBCdXp6YXJkIDxqYWJAaGV4LnByZXN0ZWwuY28udWs+CglBZGRlZCBhIG5ldyBkZWJ1Z2dpbmcgY2hhbm5lbCBpbyB0byBhbGxvdyByZWFkL3dyaXRlcyBvbiBhIHBvcnQgdG8gYmUKCWxvZ2dlZCB0byBhIGZpbGUuCgoJKiB3aW5kb3dzL2tleWJvYXJkLmM6IERhdmlkIEZhdXJlIDxEYXZpZC5GYXVyZUBpbnNhLWx5b24uZnI+CglSZXBsYWNlZCAweDAwIHdpdGggMHgwMSBpbiB0aGUgdmtleS0+c2FuY29kZSBhcnJheSwgc28gdGhhdCBubyBrZXkgaXMKCWlnbm9yZWQuIDB4MDAgaXMgdXNlZCBmb3IgZ2VuZXJhdGVkIGtleSBldmVudHMgb25seS4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL3F1ZXVlLmM6CglEb3VnbGFzIFJpZGd3YXkgPHJpZGd3YXlAd2luZWhxLmNvbT4KCUFQSSBEb2N1bWVudGF0aW9uIGZvciBTZW5kTWVzc2FnZSwgR2V0VGlja0NvdW50LCBQb3N0UXVpdE1lc3NhZ2UsCglHZXRNZXNzYWdlUG9zLCBHZXRNZXNzYWdlVGltZS4KCgkqIG1lbW9yeS92aXJ0dWFsLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRGVsZXRlIHRoZSBmaWxlbmFtZSBmb3IgdGhlIG1hcHBpbmcgaW5zdGFudGx5LgoKCSogZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIHJlbGF5MzIvc2hlbGwzMi5zcGVjOgoJTWljaGFlbCBQb29sZSA8cG9vbGVAZ3Jhdml0b24ucmVzLmNtdS5lZHU+CglTdHViIGZvciBTSFNpbXBsZUlETGlzdEZyb21QYXRoLgoKCSogbG9hZGVyL3Rhc2suYzogRml4ZWQgYnVnIGluIFN3aXRjaFN0YWNrVG8uCgpTYXQgT2N0IDI0IDEzOjA2OjE2IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBjb250cm9scy9zY3JvbGwuYzogUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglDaGVjayBpZiBzY3JvbGxiYXIgYW5kIHBhcmVudCBhcmUgdmlzaWJsZSBiZWZvcmUgcmVkcmF3LgoKCSogaWYxNjMyL3NoZWxsLnNwZWMsIGluY2x1ZGUvc2hlbGwuaCwgbWlzYy9zaGVsbC5jLCBwcm9ncmFtcy9ub3RlcGFkL21haW4uYywgcmVsYXkzMi9zaGVsbDMyLnNwZWM6CglLYWkgTW9yaWNoIDxrYWkubW9yaWNoQGRhcm1zdGFkdC5uZXRzdXJmLmRlPgoJQWRkZWQgRHJhZyozMiBmdW5jdGlvbnMuCgoJKiB3aW5kb3dzL2V2ZW50LmM6IEthaSBNb3JpY2ggPGthaS5tb3JpY2hAZGFybXN0YWR0Lm5ldHN1cmYuZGU+CglBZGRlZCBEcmFnJkRyb3AgZnJvbSBLREUgYXBwIHRvIDE2LzMyIGJpdCBXaW5kb3plIGFwcC4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jOiBLYWkgTW9yaWNoIDxrYWkubW9yaWNoQGRhcm1zdGFkdC5uZXRzdXJmLmRlPgoJQWRkZWQgRklYTUUgbWVzc2FnZSBpbiBQb3N0TWVzc2FnZTMyeCBpZiBwYXJhbWV0ZXJzIGFyZSB0cnVuY2F0ZWQKCXdoZW4gY2FsbGluZyBQb3N0TWVzc2FnZTE2LgoKCSogaW5jbHVkZS9wcm9jZXNzLmgsIHNjaGVkdWxlci9ldmVudC5jLCBzY2hlZHVsZXIvaGFuZGxlLmMsIHNjaGVkdWxlci9wcm9jZXNzLmMsIHNjaGVkdWxlci90aHJlYWQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRkZWQgc3VwcG9ydCBmb3IgZ2xvYmFsIGhhbmRsZXMsIGltcGxlbWVudGVkIENvbnZlcnRUb0dsb2JhbEhhbmRsZS4KCUFsbG9jYXRlIHN0YXJ0dXAgZGF0YSBhbmQgMTYtYml0IHN0YWNrIGZvciBpbml0aWFsIHByb2Nlc3MuCgoJKiBkb2N1bWVudGF0aW9uL3dpbmUudGV4aW5mbzogTGVpZ2ggV2VkZGluZyA8bHdlZGRpbmdAY29ycGxpbmsuY29tLmF1PgoJU21hbGwgZml4LgoKCSogcHJvZ3JhbXMvcHJvZ21hbi8uY3ZzaWdub3JlLCBwcm9ncmFtcy9wcm9nbWFuL0VzLnJjLCBwcm9ncmFtcy9wcm9nbWFuL01ha2VmaWxlLmluLCBwcm9ncmFtcy93aW5oZWxwLy5jdnNpZ25vcmUsIHByb2dyYW1zL3dpbmhlbHAvRXMucmMsIHByb2dyYW1zL3dpbmhlbHAvTWFrZWZpbGUuaW4sIHByb2dyYW1zL2Nsb2NrLy5jdnNpZ25vcmUsIHByb2dyYW1zL2Nsb2NrL0VzLnJjLCBwcm9ncmFtcy9jbG9jay9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvbm90ZXBhZC8uY3ZzaWdub3JlLCBwcm9ncmFtcy9ub3RlcGFkL0VzLnJjLCBwcm9ncmFtcy9ub3RlcGFkL01ha2VmaWxlLmluOgoJUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuYWxwaGFuZXQuY2g+CglBZGRlZCBTcGFuaXNoIHJlc291cmNlcy4KCgkqIG9sZS9ubHMvZXVxLm5scywgcmVzb3VyY2VzL3N5c3Jlc19Fcy5yYzoKCVBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgoJU21hbGwgY29ycmVjdGlvbnMuCgoJKiByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHNjaGVkdWxlci9wcm9jZXNzLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUxvYWRMaWJyYXJ5RXhXIHNwZWMgYWRkZWQgKGZ1bmN0aW9uIHdhcyB0aGVyZSkuCglTZXRQcm9jZXNzUHJpb3JpdHlCb29zdCBzdHViIGFkZGVkLgoKCSogbXNkb3MvZHBtaS5jOiBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCUNvbXBpbGUgZml4IGZvciBTb2xhcmlzLgoKCSogaWYxNjMyLy5jdnNpZ25vcmUsIGlmMTYzMi9NYWtlZmlsZS5pbiwgaWYxNjMyL2J1aWx0aW4uYywgaWYxNjMyL2Rpc3BkaWIuc3BlYywgaW5jbHVkZS9kaXNwZGliLmgsIGdyYXBoaWNzL01ha2VmaWxlLmluLCBncmFwaGljcy9kaXNwZGliLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUltcGxlbWVudGVkIERpc3BsYXlEaWIuCgoJKiBjb250cm9scy9zdGF0aWMuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglIYWNrIHRvIHN1cHBvcnQgaW50ZWdlciBpZHMgaW4gYWxsIHN0YXRpYyBjb250cm9scy4KCgkqIGluY2x1ZGUvZGlucHV0LmgsIHdpbmRvd3MvZGlucHV0LmM6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUJlZ2lubmluZyBvZiBtb3VzZSBzdXBwb3J0IGluIERpcmVjdElucHV0IChvbmx5ICJzdGFuZGFyZCIgbW91c2UKCWNvbmZpZ3VyYXRpb24gc3VwcG9ydGVkIGZvciBub3cpLgoKCSogaW5jbHVkZS8qLmgsIGRsbHMvY29tY3RsMzIvKi5jOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIHh4eF9VbnJlZ2lzdGVyKCkgZnVuY3Rpb25zIHRvIGFsbCBjb21tb24gY29udHJvbHMuCgoJKiBkbGxzL2NvbWN0bDMyL2NvbWN0bDMydW5kb2MuYywgZGxscy9jb21jdGwzMi9wYWdlci5jLCBkbGxzL2NvbWN0bDMyL3Rvb2xiYXIuYywgZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHMsIHJlbGF5MzIvY29tY3RsMzIuc3BlYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglTb21lIG1pbm9yIGltcHJvdmVtZW50cyBhbmQgZml4ZXMuCgoJKiBkbGxzL2NvbWN0bDMyL3JlYmFyLmMsIGluY2x1ZGUvcmViYXIuaDoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglJbXByb3ZlZCB0aGUgcmViYXIgY29udHJvbC4KCgkqIGRsbHMvY29tY3RsMzIvdG9vbHRpcHMuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIHN1cHBvcnQgZm9yIHRyYW5zcGFyZW50IGFuZCB0cmFja2luZyB0b29sdGlwcy4KCgkqIGNvbnRyb2xzL21lbnUuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIGEgcG9wdXAgbWVudSBzZWxlY3Rpb24gYnVnLgoKCSogd2luZG93cy9ub25jbGllbnQuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIERyYXdDYXB0aW9uMTYoKSBhbmQgRHJhd0NhcHRpb25UZW1wMTYoKS4KCgkqIHdpbmRvd3Mva2V5Ym9hcmQuYzogRGF2aWQgRmF1cmUgPERhdmlkLkZhdXJlQGluc2EtbHlvbi5mcj4KCUZpeGVkIHdhcm5pbmcuCgoJKiBncmFwaGljcy9wc2Rydi9NYWtlZmlsZS5pbiwgZ3JhcGhpY3MvcHNkcnYvYml0bWFwLmMsIGdyYXBoaWNzL3BzZHJ2L2JydXNoLmMsIGdyYXBoaWNzL3BzZHJ2L2ZvbnQuYywgZ3JhcGhpY3MvcHNkcnYvZ3JhcGhpY3MuYywgZ3JhcGhpY3MvcHNkcnYvaW5pdC5jLCBncmFwaGljcy9wc2Rydi9wcy5jLCBpbmNsdWRlL2dkaS5oLCBpbmNsdWRlL3BzZHJ2LmgsIG9iamVjdHMvZGliLmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUFkZHMgQXJjLCBDaG9yZCwgR2V0Q2hhcldpZHRoLCBQaWUsIFBvbHlQb2x5Z29uLCBQb2x5UG9seWxpbmUsIFJvdW5kUmVjdCwKCVNldFBpeGVsLCBoYXRjaGVkIGJydXNoZXMgYW5kIGEgc3R1YiBmb3IgU3RyZXRjaERJQml0cyB0byB0aGUgUG9zdFNjcmlwdAoJZHJpdmVyLgoKCSogaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oLCBpbmNsdWRlL21pc2NlbXUuaCwgbXNkb3MvTWFrZWZpbGUuaW4sIG1zZG9zL2ludGVycnVwdHMuYzoKCUpvc2VwaCBQcmFuZXZpY2ggPGtuaWdodEBiYWx0aW1vcmUud3dhdmVzLmNvbT4KCUFkZGVkIHN1cHBvcnQgZm9yIGludDE3IGFuZCBpbnQxOS4KCgkqIG1zZG9zL2ludDE5LmM6IENhcmwgdmFuIFNjaGFpayA8Y2FybEBkcmVhbWNvYXQuY2hlLnVjdC5hYy56YT4KCVN0dWJzIGZvciBkb3MgbW9kZSByZWJvb3QgaW50ZXJydXB0LgoKCSogbXNkb3MvaW50MTcuYzogQ2FybCB2YW4gU2NoYWlrIDxjYXJsQGRyZWFtY29hdC5jaGUudWN0LmFjLnphPgoJU29tZSBwcmludGVyIHN0dWJzIGZvciBET1MgYWRkZWQuCgoJKiBtc2Rvcy9pbnQxMy5jOiBKb3NlcGggUHJhbmV2aWNoIDxrbmlnaHRAYmFsdGltb3JlLnd3YXZlcy5jb20+CglNb3JlIHN0dWJzIGFkZGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBvbmx5IHBhcnRpYWxseSBtaW5lLCBJIGp1c3QgbWFkZQoJdGhlbSBjb21waWxlLgoKCSogbXNkb3MvaW50MTAuYzogSm9zZXBoIFByYW5ldmljaCA8a25pZ2h0QGJhbHRpbW9yZS53d2F2ZXMuY29tPgoJQWRkZWQgc29tZSB0cmFjZXMgYW5kIGNsZWFuZWQgdXAgYSBjb3VwbGUgb2YgdGhpbmdzLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBpbmNsdWRlL3NoZWxsLmgsIGluY2x1ZGUvc2hsb2JqLmgsIG1lbW9yeS9zdHJpbmcuYywgb2xlL29sZTJubHMuYywgcmVsYXkzMi9zaGVsbDMyLnNwZWMsIGRsbHMvc2hlbGwzMi9kYXRhb2JqZWN0LmMsIGRsbHMvc2hlbGwzMi9lbnVtaWRsaXN0LmMsIGRsbHMvc2hlbGwzMi9waWRsLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQ2hhbmdlZCBzb21lIHN0cmluZy1zaGVsbDMyIGZ1bmN0aW9ucyB0byAzMkFXLCBwYXJhbWV0ZXIgYXJlCglvcyBkZXBlbmRpbmcgMzJBIG9yIDMyVyAoLXdpbnZlciBudDM1MSBvciBudDQwKSwgc29tZSBuZXcgZnVuY3Rpb25zLgoJU29tZSBmaXhlcyBpbiBvbGUybmxzLgoJTmV3IE9MRTJOTFNfQ2hlY2tMb2NhbGUoKSB0byBoYW5kbGUgTG9jYWxlX1VzZXJfRGVmYXVsdCBhbmQKCUxvY2FsZV9TeXN0ZW1fRGVmYXVsdC4KCVNoZWxsMzIgbm93IGR5bmFtaWNseSBsaW5rcyB0byBEUEFfKigpLCBjb21kbGczMiB3b3JrcyBhZ2FpbgoJKGNvbWN0bDMyIGhlYXAgYWxsb2MgcGF0Y2ggYnJva2UgaXQpLgoKCSogaW5jbHVkZS93aW52ZXJzaW9uLmgsIG1pc2MvdmVyc2lvbi5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglBZGRlZCBWRVJTSU9OX0lzT3NVbmljb2RlKCkuCgoJKiBzY2hlZHVsZXIvaGFuZGxlLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglNb3JlIG9mZi1ieS1vbmUgZXJyb3JzIGZpeGVkLgoKCSogaW5jbHVkZS9maWxlLmgsIG1pc2MvY3J0ZGxsLmMsIG1zZG9zL3Z4ZC5jLCB3aW4zMi9maWxlLmMsIGZpbGVzL2ZpbGUuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUZpbGUgc2hhcmluZyBmaXhlcy4KCkZyaSBPY3QgMjMgMTc6MjY6NDQgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG1pc2MvY29tbWRsZy5jOiBOaWNrIEhvbGxvd2F5IDxhbGZpZUBhbGZpZS5kZW1vbi5jby51az4KCUJ1ZyBmaXguCgoJKiBsb2FkZXIvZG9zL21vZHVsZS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUZpeGVkIERPUyBlbnZpcm9ubWVudCBwYXNzaW5nLgoKCSogbWlzYy9tYWluLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3lzbWV0cmljczMyVyBmb3IgU1BJX0dFVElDT05USVRMRUxPR0ZPTlQgcmV0dXJucyBjb3JyZWN0IGZvbnRuYW1lLgoKCSogaW5jbHVkZS9mb250LmgsIG9iamVjdHMvZm9udC5jLCBvYmplY3RzL2dkaW9iai5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgRk9OVF9HZXRPYmplY3QzMlcoKSwgR2V0T2JqZWN0MzJXKCkuCgoJKiByZWxheTMyL3VzZXIzMi5zcGVjLCB3aW4zMi9vcmRpbmFscy5jLCB3aW5kb3dzL3VzZXIuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IHN0dWIgUmVnaXN0ZXJUYXNrTGlzdC4KCU5ldyBmdW5jdGlvbiBFbnVtRGlzcGxheVNldHRpbmdzMzJXKCkuCgoJKiBtaXNjL250ZGxsLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTW9yZSBwYXJhbWV0ZXIgY2hlY2tpbmcgaW4gUmx0Q29weVNpZC4KCgkqIHdpbmRvd3Mvd2lucHJvYy5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1vcmUgbWVzc2FnZSBtYXBwaW5nIDMyQTwtLT4zMlcgZm9yIEVNXywgQ0JfLCBMQl8gZm9yIFVuaWNvZGUuCgoJKiByZWxheTMyLy5jdnNpZ25vcmUsIHJlbGF5MzIvTWFrZWZpbGUuaW4sIHJlbGF5MzIvYXZpZmlsMzIuc3BlYywgcmVsYXkzMi9idWlsdGluMzIuYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQWRkZWQgbmV3IGRsbCBhdmlmaWwzMi5kbGwuCgoJKiBsb2FkZXIvZG9zL2Rvc3ZtLmMsIGxvYWRlci9kb3MvbW9kdWxlLmMsIG1zZG9zL2RwbWkuYywgaW5jbHVkZS9kb3NleGUuaDoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRmlyc3Qgc2hvdCBhdCBEUE1JIHJlYWxtb2RlIGNhbGxzLgoKCSogbG9hZGVyL21vZHVsZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglGaXhlZCBzZXZlcmFsIGJ1Z3Mgd2l0aCBETEwgaW5pdGlhbGl6YXRpb24uCgpUaHUgT2N0IDIyIDE3OjAyOjI1IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBzY2hlZHVsZXIvc3lzbGV2ZWwuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBvcmRpbmFsIGZvciB0d28gc3lzbGV2ZWwgZnVuY3Rpb25zLgoKCSogbXVsdGltZWRpYS9taWRpLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQW5vdGhlciBtaXNzaW5nIFdJTkFQSS4KCgkqIGluY2x1ZGUvbW1zeXN0ZW0uaDogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTbWFsbCBjb3JyZWN0aW9ucyBpbiBtbWlvIGRlY2xhcmF0aW9ucy4KCgkqIGxvYWRlci9wZV9pbWFnZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVRha2UgdmlydHVhbCBzaXplcyBpbiBhY2NvdW50IGZvciB0aGUgdG90YWwgdm1hIHNpemUuCgoJKiBvbGUvbmxzL3JvbS5ubHM6IERpbWl0cmllIE8uIFBhdW4gPGRpbWlAY3MudG9yb250by5lZHU+CglBZGQgc29tZSBtb3JlIE5MUyBkZWZpbml0aW9ucyBmb3IgdGhlIFJvbWFuaWFuIGxhbmd1YWdlLgoKCSogbXVsdGltZWRpYS9kc291bmQuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTb21lIHByb2dyYW1zIChxdWFrZTIgZXQgYWwpIGRvIGNoZWNrIGZvciBEU0NBUFNfRU1VTERSSVZFUiBhbmQgc3RvcAoJdG8gd29yay4gJ0FkanVzdCcgY2FwcyBmbGFncyBhY2NvcmRpbmdseS4KCgkqIG9sZS9jb21wb2JqLmMsIHJlbGF5MzIvb2xlMzIuc3BlYzoKCVBldGUgUmF0emxhZmYgPHByYXR6bGFmZkBjZmEuaGFydmFyZC5lZHU+CglTdHViIGZvciBDb0NyZWF0ZUd1aWQoKS4KCgkqIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYywgbXVsdGltZWRpYS9tY2ljZGEuYzoKCUJyaWFuIExpdHppbmdlciA8YnJpYW5AbGl0emluZ2VyLmNvbT4KCUZpeGVzIGZvciBGcmVlQlNELgoKCSogbGlidGVzdC8uY3ZzaWdub3JlLCBsaWJ0ZXN0L01ha2VmaWxlLmluOgoJUGV0dGVyIFJlaW5ob2xkdHNlbiA8cGVyZUBtaW5lcnZhLmNjLnVpdC5ubz4KCU1ha2Ugc3VyZSBoZWxsbzNyZXMuaCBpcyBnZW5lcmF0ZWQgZXZlbiBpZiAnbWFrZSBkZXBlbmQnIG5ldmVyIGhhcwoJYmVlbiBydW4uCgoJKiB3aW5kb3dzL25vbmNsaWVudC5jOiBORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCUZpeGVkIG1vdmluZyBhbmQgc2l6aW5nIG9mIGNoaWxkIHdpbmRvd3MuCgoJKiBpbmNsdWRlL3RzX3hsaWIuaCwgdG9vbHMvbWFrZV9YMTF3cmFwcGVycywgdHN4MTEvWDExX2NhbGxzLCB0c3gxMS90c194bGliLmMsIHdpbmRvd3Mva2V5Ym9hcmQuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJWFF1ZXJ5S2V5bWFwIC0+IFRTWFF1ZXJ5S2V5bWFwIChmaXhlcyB0aGUgWElPIGVycm9ycyByZXBvcnRlZCkuCgpXZWQgT2N0IDIxIDE3OjIwOjQ4IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL2Rvc2V4ZS5oLCBsb2FkZXIvZG9zL2Rvc3ZtLmMsIG1pc2NlbXUvbWFpbi5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglBZGRlZCBpbmRpcmVjdGlvbiBmb3IgY3R4X2RlYnVnIHRvIHRoZSBET1MgbG9hZGVyLCBzbyBXaW5lbGliIHdvcmtzCglhZ2Fpbi4KCgkqIG1lbW9yeS92aXJ0dWFsLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU3VwcG9ydCBhbm9uIHNoYXJlZCBtYXBwaW5ncyB1c2luZyB0ZW1wb3JhcnkgZmlsZXMgKHdvbnQgYmUgZGVsZXRlZAoJeWV0KS4KCgkqIG1pc2MvbWFpbi5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVdhcyBmcmVlaW5nIHRoZSBpbmNvcnJlY3QgcG9pbnRlcnMgLT4gY3Jhc2ggaW4gbWFsbG9jcy9mcmVlcy4KCgkqIGZpbGVzL2Rvc19mcy5jLCByZWxheTMyL2tlcm5lbDMyLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURlZmluZURvc0RldmljZSBzdHViIGFkZGVkLgoKCSogbWlzY2VtdS9tYWluLmMsIHdpbmUuaW5pOiBDaGFkIFBvd2VsbCAocHhweEB1c2EubmV0KQoJQWRkZWQgYSBkZWZhdWx0IHByb2dyYW0gb3B0aW9uIGluIHdpbmUuY29uZiBpbiBzZWN0aW9uIFtwcm9ncmFtc10ga2V5CglEZWZhdWx0LgoKCSogaW5jbHVkZS93aW50eXBlcy5oOiBEYXZpZCBDdXRoYmVydCA8ZGFjdXRAZWNlLmNtdS5lZHU+CglCZXR0ZXIgZml4IGZvciB0aGlzX2lzX2Ffc3ludGF4X2Vycm9yLgoKCSogb2xlL25scy8qLm5sczoKCVBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgoJQWRkZWQgdGhlIGVudHJpZXMgZm9yIExPQ0FMRV9TSVNPNjM5TEFOR05BTUUgYW5kCglMT0NBTEVfU0lTTzMxNjZDVFJZTkFNRS4KCgkqIGRvY3VtZW50YXRpb24vd2luZS5tYW46IEphbWVzIEp1cmFuIDxqcmoxMjBAcHN1LmVkdT4KCVVwZGF0ZWQgbWFucGFnZS4KCgkqIHJlbGF5MzIvbXNhY20zMi5zcGVjOiBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCUZpeGVkIHdyb25nIG9yZGluYWxzLgoKCSogb2JqZWN0cy9yZWdpb24uYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglGaXhlZCBhIGJ1ZyBpbiBSZWN0SW5SZWdpb24uCgpUdWUgT2N0IDIwIDE1OjI2OjI2IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtc2Rvcy9pbnRlcnJ1cHRzLmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJUmVtb3ZlZCBhbiBpbmNvcnJlY3QgZXJyb3IgbWVzc2FnZS4KCgkqIGZpbGVzL2RyaXZlLmM6IFBldHRlciBSZWluaG9sZHRzZW4gPHBlcmVAbWluZXJ2YS5jYy51aXQubm8+CglNYWtlIHN1cmUgdGhlIGFjY2VzcyBmdW5jdGlvbnMgYXJlIGFsd2F5cyB1c2VkIHRvIGdldCBsYWJlbCBhbmQgc2VyaWFsCgludW1iZXIuCgpNb24gT2N0IDE5IDA4OjQ4OjI0IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBvbGUvb2xlMm5scy5jOiBFcmljIFBvdWVjaCA8ZXJpYy5wb3VlY2hAaG9sLmZyPgoJRml4ZWQgYnVnIG9uIHBsYXRmb3JtcyB3ZXJlIGJ1ZmZlcnMgcmV0dXJuZWQgYnkgZ2V0ZW52KCkgc2hhbGwgbm90IGJlCglmcmVlKCknZWQuIEFkZGVkIEZyZW5jaCAoZGVmYXVsdCkgaW4gbG9jYWxlIGhhbmRsaW5nLgoKCSogaW5jbHVkZS93aW50eXBlcy5oOiBEYXZlIEN1dGhiZXJ0IDxkYWN1dEBlY2UuY211LmVkdT4KCUNoYW5nZWQgInRoaXMgaXMgYSBzeW50YXggZXJyb3IiIHRvICJ0aGlzX2lzX2Ffc3ludGF4X2Vycm9yIiB0byBtYWtlIGEKCWNvbXBpbGUtdGltZSBlcnJvciBtZXNzYWdlIG1ha2UgbW9yZSBzZW5zZS4KCgkqIHNjaGVkdWxlci9oYW5kbGUuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUZpeGVkIG9mZiBieSBvbmUgZXJyb3IgaW4gSEFORExFX0dldE9ialB0ci4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE9jdCAxOCAxNDo0ODozMSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZmlsZXMvZmlsZS5jOiBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglUcnkgdG8gaW1wbGVtZW50IHRoZSBPRl9TSEFSRV9YWFggb3B0aW9ucy4KCU1vdmUgdGhlIG1vZGUgdHJhbnNsYXRpb25zIHRvIGZ1bmN0aW9ucy4KCgkqIGluY2x1ZGUvbWFpbi5oLCBvbGUvY29tcG9iai5jLCBvbGUvaWZzLmMsIG9sZS9vbGUyZGlzcC5jLCBvbGUvb2xlMm5scy5jLCBvbGUvb2xlc3ZyLmMsIG9sZS9zdG9yYWdlLmM6CglNYXR0aGV3IEJlY2tlciA8bWJlY2tlckBnbGFzc2NpdHkubmV0PgoJRG9jdW1lbnRhdGlvbiB1cGRhdGVzLgoKCSogb2xlL2NvbXBvYmouYywgcmVsYXkzMi9vbGUzMi5zcGVjOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQWRkZWQgc3R1YiBmb3IgQ29TZXRTdGF0ZTMyLgoKCSogbWlzY2VtdS9tYWluLmM6IENoYWQgUG93ZWxsIDxweHB4QHVzYS5uZXQ+CglBZGRlZCBhYmlsaXR5IHRvIHJlYWQgYSBzdGFydHVwIHByb2dyYW0gZnJvbSB3aW5lLmluaSBmaWxlLgoJUHV0IGl0IGluIHNlY3Rpb24gW3Byb2dyYW1zXSBrZXkgU3RhcnR1cC4KCgkqIGluY2x1ZGUvdHJhY2tiYXIuaCwgaW5jbHVkZS90cmVldmlldy5oLCBkbGxzL2NvbWN0bDMyL3RyYWNrYmFyLmMsIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYzoKCUFsZXggUHJpZW0gPGFsZXhwQHNjaS5rdW4ubmw+CglGdXJ0aGVyIGltcHJvdmVtZW50cy4KCgkqIGluY2x1ZGUvY3Vyc29yaWNvbi5oLCBvYmplY3RzL2N1cnNvcmljb24uYzoKCVR1cmNoYW5vdiBTZXJnZXkgPHR1cmNoYW5vdkB1c2EubmV0PgoJSW1wbGVtZW50ZWQgTG9hZEN1cnNvckZyb21GaWxlLCBmaXhlZCBEcmF3SWNvbkV4IHRvIHN1cHBvcnQgb2Zmc2NyZWVuCglkcmF3aW5nLCBmaXhlZCBDVVJTT1JJQ09OX0NyZWF0ZUZyb21SZXNvdXJjZSB0byBzdXBwb3J0IExSXyBzZW1hbnRpY3MuCgoJKiBpbmNsdWRlL2JpdG1hcC5oLCBvYmplY3RzL2JpdG1hcC5jOgoJVHVyY2hhbm92IFNlcmdleSA8dHVyY2hhbm92QHVzYS5uZXQ+CglGaXhlZCBMb2FkSW1hZ2UgdG8gc3VwcG9ydCBhbG1vc3QgYWxsIExSXyBmbGFncy4KCgkqIG9iamVjdHMvZGliLmM6IFR1cmNoYW5vdiBTZXJnZXkgPHR1cmNoYW5vdkB1c2EubmV0PgoJRml4ZWQgYnVnIGluIERJQl9TZXRJbWFnZUJpdHNfUkxFOCAoYmVjYXVzZSAnY29sb3InIHZhciB3YXMgV09SRCwgYWxsCglDT0xPUkVGcyBoYWQgcmVkIHBhcnQgemVyb2VkKSB0aGF0IG1hZGUgcGxlbnR5IG9mIGN5YW4gY29sb3JzLCBtaW5vcgoJYnVnIGZpeGVzLCBjaGFuZ2VzIHRvIHN1cHBvcnQgTFJfIGZsYWdzLgoKCSogaW5jbHVkZS9nbG9iYWwuaCwgbWVtb3J5L3ZpcnR1YWwuYzoKCVR1cmNoYW5vdiBTZXJnZXkgPHR1cmNoYW5vdkB1c2EubmV0PgoJQWRkZWQgVklSVFVBTF9NYXBGaWxlVyB0byBtYXAgZmlsZSB0byBtZW1vcnkgaW4gb25lIGZ1bmN0aW9uIGNhbGwuCgoJKiBpbmNsdWRlL2RkcmF3LmgsIGluY2x1ZGUvd2luZG93cy5oLCBpbmNsdWRlL3dpbnR5cGVzLmgsIHdpbmRvd3MvbXVsdGltb24uYzoKCVR1cmNoYW5vdiBTZXJnZXkgPHR1cmNoYW5vdkB1c2EubmV0PgoJTW92ZWQgTXVsdGltb25pdG9yIEFQSSBkZWNsYXJhdGlvbnMgdG8gd2luZG93cy5oLgoKCSogaWYxNjMyL3VzZXIuc3BlYywgaW5jbHVkZS9kcml2ZXIuaCwgbXVsdGltZWRpYS9hdWRpby5jLCBtdWx0aW1lZGlhL21jaWFuaW0uYywgbXVsdGltZWRpYS9tY2ljZGEuYywgbXVsdGltZWRpYS9taWRpLmMsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYywgcmVsYXkzMi93aW5tbS5zcGVjLCB3aW5kb3dzL2RyaXZlci5jOgoJVHVyY2hhbm92IFNlcmdleSA8dHVyY2hhbm92QHVzYS5uZXQ+CglJbXBsZW1lbnRlZCBEZWZEcml2ZXJQcm9jMzIgZnJvbSB3aW5tbS5kbGwuCgoJKiBjb250cm9scy9zY3JvbGwuYywgaW5jbHVkZS9zY3JvbGwuaCwgd2luZG93cy9tZGkuYywgd2luZG93cy9ub25jbGllbnQuYzoKCUFsZXggS29yb2JrYSA8a29yb2JrYUBhbXMuc3VueXNiLmVkdT4KCUdvdCByaWQgb2YgZmxpY2tlcmluZyBzY3JvbGxiYXIgYXJyb3dzLiBNREkgc2Nyb2xsaW5nIHNwZWVkZWQgdXAgYQoJYml0LgoKCSogaW5jbHVkZS93aW5ubHMuaCwgb2xlL25scy9kZXUubmxzLCBvbGUvb2xlMm5scy5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglHZXRMb2NhbGVJbmZvMzJBIGNhbiBoYW5kbGUgbGVuPTAgbm93LCBzZXRzIExhc3RFcnJvciBhbmQgdG91Y2hlcwoJYnVmZmVyIG9ubHkgd2hlbiBuZWNlc3NhcnkuCglVcGRhdGVkIGRldS5ubHMgYW5kIHNvbWUgTENUWVBFUyBpbiB3aW5ubHMuaC4KCgkqIGlmMTYzMi9yZWxheS5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJQ2FsbFByb2NbRXhdMzJXIGNhbGxlZCB3aXRoIGxwUHJvY0FkZHJlc3M9PU5VTEwgc2hvdWxkIHJldHVybiB6ZXJvIGFuZAoJbm90IGNyYXNoLgoKU2F0IE9jdCAxNyAxMzowNzo0OCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZGxscy9jb21jdGwzMi9jb21tY3RybC5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVJlZHVjZWQgaHVnZSAoMUdCKSBoZWFwIGNyZWF0aW9uIHRoYXQgY2F1c2VkIFN0YXJjcmFmdCB0byBmYWlsLgoKCSogaW5jbHVkZS9kb3NleGUuaCwgaW5jbHVkZS9tb2R1bGUuaCwgbG9hZGVyL2Rvcy9kb3N2bS5jLCBtdWx0aW1lZGlhL2RwbGF5LmMsIHdpbmRvd3MvZGlhbG9nLmM6CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCUNvbXBpbGUgZml4IGZvciBTb2xhcmlzLgoKCSogbXVsdGltZWRpYS9taWRpLmM6IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJQ29tcGlsZSBmaXggZm9yIG5vbiBPU1Mgc3lzdGVtcy4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJQ29tcGlsZSBmaXggZm9yIG5vbiBYRjg2LURHQSBzeXN0ZW1zLgoKCSogbGlidGVzdC9NYWtlZmlsZS5pbiwgbGlidGVzdC92b2xpbmZvLmM6CglQZXR0ZXIgUmVpbmhvbGR0c2VuIDxwZXJlQHRkLm9yZy51aXQubm8+CglOZXcgZmlsZSB0byB0ZXN0IERSSVZFX0dldExhYmVsLgoKCSogbXVsdGltZWRpYS9tY2ljZGEuYzogUGV0ZXIgSHVubmlzZXR0IDxodW5uaXNlQG5vcnRlbC5jYT4KCVNtYWxsLCBzdWJvcHRpbWFsLCBmaXggZm9yIDMyIGJpdCBjZGF1ZGlvIG9wZW4gcm91dGluZXMuIE5lZWRzIHByb3BlcgoJMzJiaXQgY2RhdWRpbyBiaXQgc3VwcG9ydCBiZWZvcmUgaXQgY2FuIGJlIHJlbW92ZWQuLi4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IFBldGVyIEh1bm5pc2V0dCA8aHVubmlzZUBub3J0ZWwuY2E+CglBZGRlZCBhIGJ1bmNoIG9mIHN0dWJzIGZvciBkZHJhdyBzdWZhY2Ugcm91dGluZXMuIEFsbCBzdHVicyBmb3IKCXN1cmZhY2UgcHJlc2VudCBub3cuCglDb21tZW50ZWQgb3V0IG1lc3NhZ2UgcHVtcCBjYWxscy4gSSBkb24ndCBzZWUgYSByZWFzb24gZm9yIHRoZW0gYmVpbmcKCXRoZXJlLiBFdmVyeXRoaW5nIHdvcmtzIGZpbmUgd2l0aCAtZGVza3RvcCBhbmQgLW1hbmFnZWQgc3RpbGwgaGFzCglwcm9ibGVtcy4gRGlzYWdyZWVtZW50cz8KCgkqIG9sZS9vbGUybmxzLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRml4ZWQgR2V0TG9jYWxlSW5mbzMyQSBmb3Igb3RoZXIgbGFuZ3VhZ2VzIHRoYW4gZW5fdWsuCglNYWRlIGl0IHJlY29nbmlzZSBMT0NBTEVfU1lTVEVNX0RFRkFVTFQsIExPQ0FMRV9TWVNURU1fREVGQVVMVCBhbmQKCWxhc3QgYnV0IG5vdCBsZWFzdCB0aGUgZmlyc3QgYXJndW1lbnQgbGNpZCB3aGVyZSBpcyBhbGwgYWJvdXQuLi4KCgkqIGluY2x1ZGUvc3lzbGV2ZWwuaCwgbWlzYy9yZWdpc3RyeS5jLCBtdWx0aW1lZGlhL2RwbGF5LmMsIG11bHRpbWVkaWEvZHNvdW5kLmMsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYywgbXVsdGltZWRpYS90aW1lLmMsIHdpbmRvd3MvY2FyZXQuYywgZGxscy9tc2FjbTMyL2J1aWx0aW4uYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgc29tZSBtb3JlIG1pc3NpbmcgV0lOQVBJcyAoaG9wZWZ1bGx5IGNvcnJlY3QpLgoKCSogb2xlL29sZTJubHMuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCB0aGUgPSAtPiA9PSBidWcuCgoJKiBtc2Rvcy9pbnQyZi5jOiBKb3NlcGggUHJhbmV2aWNoIDxrbmlnaHRAYmFsdGltb3JlLnd3YXZlcy5jb20+CglTaGVsbCBwYXJhbWV0ZXJzIChjb25maWcuc3lzKSBhbmQgQU5TSSBzdXBwb3J0IHN0dWJzLgoKCSogbXNkb3MvTWFrZWZpbGUuaW46IEpvc2VwaCBQcmFuZXZpY2ggPGtuaWdodEBiYWx0aW1vcmUud3dhdmVzLmNvbT4KCUFkZGVkIGludDE2LmMgYW5kIGludDI5LmMuCgoJKiBpbmNsdWRlL21pc2NlbXUuaCwgbXNkb3MvaW50ZXJydXB0cy5jOgoJSm9zZXBoIFByYW5ldmljaCA8a25pZ2h0QGJhbHRpbW9yZS53d2F2ZXMuY29tPgoJTW9yZSBpbnRlcnJ1cHRzIHRoYXQgY2FuIGJlIGRvbmUgZnJvbSBET1MgbW9kZS4KCgkqIG1zZG9zL2ludDI5LmM6IEpvc2VwaCBQcmFuZXZpY2ggPGtuaWdodEBiYWx0aW1vcmUud3dhdmVzLmNvbT4KCUFkZGVkIGludDI5IChGYXN0IFdyaXRlIHRvIFNjcmVlbikgc3VwcG9ydC4KCgkqIG1zZG9zL2ludDE2LmMsIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaDoKCUpvc2VwaCBQcmFuZXZpY2ggPGtuaWdodEBiYWx0aW1vcmUud3dhdmVzLmNvbT4KCUFkZGVkIGludDE2IChLZXlib2FyZCkgc3VwcG9ydCwgbW9zdGx5IHN0dWJzLgoKRnJpIE9jdCAxNiAxNTo0MDoyMSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogcmVsYXkzMi9zaGVsbDMyLnNwZWMsIGRsbHMvc2hlbGwzMi9waWRsLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGxmb2xkZXIuYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYywgaW5jbHVkZS9zaGxvYmouaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTWFueSBidWdmaXhlcywgbmV3IHN0dWJzIFNIR2V0UmVhbElETCwgU0hSZWdRdWVyeVZhbHVlMzJXLAoJU0hSZWdRdWVyeVZhbHVlRXgzMlcsIFN0clJldFRvU3RyTiwgU3RyQ2hyVywgU0hBbGxvY1NoYXJlZCwKCVNITG9ja1NoYXJlZCwgU0hVbmxvY2tTaGFyZWQsIFNIRnJlZVNoYXJlZCwgU2V0QXBwU3RhcnRpbmdDdXJzb3IzMiwKCVNITG9hZE9MRTMyLCBTaGVsbF9NZXJnZU1lbnVzMzIsIFBhdGhHZXREcml2ZU51bWJlcjMyLCBEcml2ZVR5cGUzMiwKCVNIQWJvcnRJbnZva2VDb21tYW5kLCBTSE91dE9mTWVtb3J5TWVzc2FnZUJveCwgU0hGbHVzaENsaXBib2FyZC4KCgkqIG1pc2MvbnRkbGwuYywgcmVsYXkzMi9udGRsbC5zcGVjOgoJRGlldG1hciBLbGluZyA8ZGlldG1hci5rbGluZ0B1c2EubmV0PgoJQWRkZWQgdW5kb2N1bWVudGVkIGZ1bmN0aW9uIFJ0bE9wZW5DdXJyZW50VXNlci4KCgkqIG9iamVjdHMvY3Vyc29yaWNvbi5jLCBtaXNjL3NoZWxsLmMsIG1pc2MvdmVyLmMsIG1pc2MvdmVyc2lvbi5jLCBsb2FkZXIvZWxmLmMsIGxvYWRlci9tb2R1bGUuYywgbG9hZGVyL3BlX2ltYWdlLmMsIGxvYWRlci9wZV9yZXNvdXJjZS5jLCBpbmNsdWRlL25lZXhlLmgsIGluY2x1ZGUvcGVfaW1hZ2UuaCwgaW5jbHVkZS9wZWV4ZS5oLCBkZWJ1Z2dlci9kYmdtYWluLmMsIGRlYnVnZ2VyL21zYy5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJUmVuYW1lZCBhbGwgTFBJTUFHRV8qIHR5cGVzIHRvIFBJTUFHRV8qLgoKVGh1IE9jdCAxNSAxMzowMzoxMCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luZG93cy93aW5wb3MuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUZpeGVkIGFuIGVycm9yIHdoZW4gYW4gb3duZWQgd2luZG93IGFjdGl2YXRlcyBpdHMgb3duZXIgZHVyaW5nCgljcmVhdGlvbi4KCgkqIHdpbmRvd3MvZGVmZGxnLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglDbG9zaW5nIGEgZGlhbG9nIHVzaW5nIHRoZSBtZW51IGJhciAoIngiIG9yICItIiBidXR0b24gb3Igd2luZG93cwoJbWVudSkgbXVzdCBnZW5lcmF0ZSBhIFdNX0NPTU1BTkQrSURDQU5DRUwgbWVzc2FnZSwgdW5saWtlIGNsb3NpbmcKCW5vcm1hbCB3aW5kb3dzIHdoZW4gRGVzdHJveVdpbmRvdygpIGlzIGNhbGxlZC4KCgkqIGRsbHMvc2hlbGwzMi9waWRsLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkZGVkIG1pc3NpbmcgV0lOQVBJcy4KCgkqIHdpbmRvd3Mvd2lucG9zLmMsIHdpbjMyL29yZGluYWxzLmMsIHJlbGF5MzIvdXNlcjMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBzdHVicyBQcml2YXRlRXh0cmFjdEljb25FeFtBV10sIFByaXZhdGVFeHRyYWN0SWNvbnNXLAoJUmVnaXN0ZXJTaGVsbEhvb2tXaW5kb3csIERlcmVnaXN0ZXJTaGVsbEhvb2tXaW5kb3csIEdldFByb2dtYW5XaW5kb3csCglHZXRUYXNrbWFuV2luZG93LCBTZXRQcm9nbWFuV2luZG93LCBTZXRTaGVsbFdpbmRvd0V4LAoJU2V0VGFza21hbldpbmRvdy4KCgkqIHJlbGF5MzIvbnRkbGwuc3BlYywgbWlzYy9udGRsbC5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3R1YnMgTnRRdWVyeUluZm9ybWF0aW9uVGhyZWFkLCBOdFF1ZXJ5SW5mb3JtYXRpb25Ub2tlbiwKCVJ0bEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZCwgUnRsRXF1YWxTaWQsIFJ0bEZyZWVTaWQuCgoJKiBtdWx0aW1lZGlhL21tc3lzdGVtLmM6IFR1cmNoYW5vdiBTZXJnZXkgPHR1cmNoYW5vdkB1c2EubmV0PgoJRml4ZWQgUGxheVNvdW5kIHRvIHN0YXJ0IGl0cyB0aHJlYWQgdGhlIHJpZ2h0IHdheS4KCldlZCBPY3QgMTQgMTg6NDA6MzUgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGNvbnRyb2xzL2NvbWJvLmMsIGNvbnRyb2xzL2xpc3Rib3guYzoKCUFsZXggS29yb2JrYSA8a29yb2JrYUBhbXMuc3VueXNiLmVkdT4KCUNCX1NFVENVUlNFTCBhbmQgc29tZSBvdGhlciBmaXhlcy4KCgkqIHdpbmRvd3MvcXVldWUuYzogQWxleCBLb3JvYmthIDxrb3JvYmthQGFtcy5zdW55c2IuZWR1PgoJQmV0dGVyIFFVRVVFX0ZsdXNoTWVzc2FnZXMoKS4KCgkqIHJlbGF5MzIvZ2RpMzIuc3BlYywgb2JqZWN0cy9mb250LmMsIGluY2x1ZGUvd2luZG93cy5oLCBpZjE2MzIvZ2RpLnNwZWM6CglNb3NoZSBWYWluZXIgPG1vc2hldkBlYXN5YmFzZS5jb20+CglQYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIEdldE91dGxpbmVUZXh0TWV0cmljczMyQS4KCUFkZGVkIHN0cnVjdHVyZXMgZm9yIE9VVExJTkVURVhUTUVUUklDUy4KCgkqIG9iamVjdHMvZGMuYywgaW5jbHVkZS9nZGkuaCwgZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jLCBncmFwaGljcy94MTFkcnYvYml0bWFwLmMsIGdyYXBoaWNzL3gxMWRydi9pbml0LmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCURvIG5vdCBjbGlwIHNvdXJjZSByZWN0YW5nbGUgZXZlbiBieSB2aXNpYmxlIHJlZ2lvbiBmb3IgYml0Ymx0cy4KCUFkZGVkIGZpZWxkICd0b3RhbEV4dGVudCcgdG8gV0lOX0RDX0lORk8uCgoJKiBtc2Rvcy92eGQuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGRlZCBzdHViIGZvciBWTU0gUE0gQVBJIEFIPTAyNltkZV0gKG5ldmVyIHNheSAnc2FmZSBtb2RlJykuCgoJKiBtZW1vcnkvaGVhcC5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogTG9jYWwzMkZyZWUgY2F1c2VkIGZyZWUgaGFuZGxlcyBsaXN0IGNvcnJ1cHRpb24uCgoJKiBpbmNsdWRlL2RlYnVndG9vbHMuaDogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCAtLWRpc2FibGUtZGVidWcgY29uZmlnIG9wdGlvbi4KClR1ZSBPY3QgMTMgMTI6NTA6MDQgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHJlbGF5MzIvc2hlbGwzMi5zcGVjLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYzoKCVBldHRlciBSZWluaG9sZHRzZW4gPHBlcmVAdGQub3JnLnVpdC5ubz4KCUFkZGVkIHN0dWJzIFNIUmVnQ2xvc2VLZXkoKSwgU0hSZWdPcGVuS2V5W0FXXSgpLCBTSFJlZ1F1ZXJ5VmFsdWVFeEEoKQoJYW5kIEZpbGVJY29uSW5pdCgpIG5lZWRlZCBieSBXaW45NSBleHBsb3Jlci4KCk1vbiBPY3QgMTIgMDc6MjU6NTQgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbmRvd3MvZGlhbG9nLmMsIGNvbnRyb2xzL2J1dHRvbi5jLCBjb250cm9scy9tZW51LmM6CglOb3JtYW4gU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglJbXByb3Zpbmcga2V5Ym9hcmQgaGFuZGxpbmcsIGluY2x1ZGluZyBhY2NlbGVyYXRvciBrZXlzIGluIGRpYWxvZwoJYm94ZXMuIEFsc28gZml4ZXMgZW50ZXIga2V5IGluIEFnZW50MzIgZWRpdCBib3guCgpTdW4gT2N0IDExIDE5OjM3OjIzIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtaXNjL2NvbW1kbGcuYzogRXJpYyBQb3VlY2ggIDxlcmljLnBvdWVjaEBsZW1lbC5mcj4KCUFkZGVkIHN1cHBvcnQgaW4gZmlsZSBkaWFsb2cgYm94ZXMgaGFuZGxpbmcgZm9yIGZpbHRlcnMgbGlrZQoJIioudHh0OyouYmF0Ii4KCgkqIHdpbjMyL2tlcm5lbDMyLmMsIHNjaGVkdWxlci90aHJlYWQuYywgbG9hZGVyL21vZHVsZS5jLCBsb2FkZXIvcGVfaW1hZ2UuYywgbG9hZGVyL3Rhc2suYywgaW5jbHVkZS9tb2R1bGUuaCwgaW5jbHVkZS9wZV9pbWFnZS5oOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBuZXcgUEUgRExMIGluaXRhbGl6YXRpb24gY29kZSwgdHJ5aW5nIHRvIGNhbGwgdGhlCglEbGxFbnRyeVBvaW50IHJvdXRpbmVzIGFsd2F5cyBpbiBjb3JyZWN0IG9yZGVyIDotKQoJQnlwYXNzIHNub29waW5nIHdoZW4gZ2V0dGluZyBkYXRhIGJ1ZmZlciBhZGRyZXNzZXMgKHRodW5rIGJ1ZmZlcnMsCglfX0dQIGhhbmRsZXJzKSBhbmQgZm9yIDMyLWJpdCByb3V0aW5lcyBkaXJlY3RseSBjYWxsZWQgZnJvbSAxNi1iaXQKCShkdWUgdG8gc3RhY2sgYWRkcmVzcyBzaXplIHByb2JsZW1zKS4KCgkqIHdpbjMyL29yZGluYWxzLmMsIHJlbGF5MzIva2VybmVsMzIuc3BlYywgbG9hZGVyL25lL21vZHVsZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBDb21tb25VbmltcFN0dWIsIE1hcEhJbnN0KExTfFNMKV9QTiwgVzMyU19CYWNrVG8zMi4KCVN0dWIgZm9yIEhvdXNlQ2xlYW5Mb2dpY2FsbHlEZWFkSGFuZGxlcywgZml4ZWQgazMyd3ZzcHJpbnRmQS4KCgkqIHRvb2xzL2J1aWxkLmMsIGlmMTYzMi9rZXJuZWwuc3BlYywgaWYxNjMyL3JlbGF5LmMsIGlmMTYzMi90aHVuay5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCAocGFydGlhbGx5KSB0aGUgS0VSTkVMIFRodW5rbGV0IEFQSSBhbmQgQ2FsbGJhY2sgQ2xpZW50CglBUEkgKEtFUk5FTC41NjAtNTY4LDYwNC02MTIsNjE5LTYyMikuCglBZGRlZCBzdHVicyBmb3IgSzIyOCwgSzIzNywgS0VSTkVMLjM2NSwgS0VSTkVMLjQ0Ny4KCgkqIG9iamVjdHMvYml0bWFwLmMsIGlmMTYzMi9nZGkuc3BlYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJU3R1YnMgZm9yIENyZWF0ZVVzZXIoRGlzY2FyZGFibGUpQml0bWFwMTYuCgoJKiBtZW1vcnkvaGVhcC5jLCBpbmNsdWRlL3dpbm50Lmg6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIEhFQVBfV0lORV9DT0RFMTZTRUcgU0VHUFRSIGhlYXBzIHdpdGggMTYtYml0IGNvZGUgc2VnbWVudHMuCgoJKiBtZW1vcnkvZ2xvYmFsLmMsIGluY2x1ZGUvd2luZG93cy5oOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglHbG9iYWxGaXgxNiBpcyBzdXBwb3NlZCB0byByZXR1cm4gc2VsZWN0b3IgdG8gdGhlIG1lbW9yeSBhcmVhLgoKCSogbXNkb3MvdnhkLmMsIGlmMTYzMi9NYWtlZmlsZS5pbiwgaWYxNjMyL2J1aWx0aW4uYywgaWYxNjMyL2NvbW0uc3BlYywgaWYxNjMyL3dwcm9jcy5zcGVjOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglTdHVicyBmb3IgQ09NTS5EUlYsIFJFQk9PVC5WWEQsIFZERC5WWEQuCgoJKiBzY2hlZHVsZXIvcHJvY2Vzcy5jLCBzY2hlZHVsZXIvc3lzbGV2ZWwuYywgaW5jbHVkZS9zaWdfY29udGV4dC5oLCBpbmNsdWRlL3N5c2xldmVsLmg6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVVzZSBlbWVyZ2VuY3kgVEVCIHNlbGVjdG9yIHRvIGF2b2lkIGRlYnVnZ2VyIGNyYXNoZXMgd2hlbiBzdGVwcGluZwoJdGhyb3VnaCByZWxheSBzdHVicyAob3Igd2hlbiBGUyBpcyBpbnZhbGlkIG90aGVyd2lzZSkuCgoJKiB3aW5kb3dzL2V2ZW50LmMsIHdpbmRvd3Mva2V5Ym9hcmQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJTU9VU0UuRFJWIHJvdXRpbmVzIG1vdmVkIHRvIGV2ZW50LmMuIENhbGwgbW91c2UgZXZlbnQgcHJvY2VkdXJlLgoKCSogd2luZG93cy9kY2UuYywgd2luZG93cy9wYWludGluZy5jLCB3aW5kb3dzL3Njcm9sbC5jLCBvYmplY3RzL2NsaXBwaW5nLmMsIG9iamVjdHMvZGMuYywgb2JqZWN0cy9kY3ZhbHVlcy5jLCBpbmNsdWRlL2RjLmgsIGluY2x1ZGUvd2luZG93cy5oLCBpZjE2MzIvZ2RpLnNwZWMsIGdyYXBoaWNzL3gxMWRydi9iaXRibHQuYywgZ3JhcGhpY3MveDExZHJ2L2NsaXBwaW5nLmMsIGdyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jLCBncmFwaGljcy94MTFkcnYvdGV4dC5jLCBncmFwaGljcy9wYXRoLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUNoYW5nZWQgREMgbWVtYmVycyB3LmhWaXNSZ24sIHcuaENsaXBSZ24sIGFtZCB3LmhHQ0NsaXBSZ24gdG8KCWNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBkZXZpY2UsIG5vdCB0aGUgREMgb3JpZ2luLiBUaGlzIGlzCgluZWNlc3NhcnkgdG8gY29ycmVjdGx5IGltcGxlbWVudCBHZXRDbGlwUmduMTYgYW5kIElucXVpcmVWaXNSZ24uCglTZWxlY3RWaXNSZ24gYWxzbyBleHBlY3RzIHJlZ2lvbiBpbiBkZXZpY2UtcmVsYXRpdmUgY29vcmRpbmF0ZXMuCglBZGFwdGVkIHRoZSByZXN0IG9mIFdpbmUgdG8gdGhpcyBjb29yZGluYXRlIGNoYW5nZS4KCUltcGxlbWVudGVkIEV4dFNlbGVjdENsaXBSZ24uCgoJKiB0b29scy93aW5hcGktY2hlY2ssIHNjaGVkdWxlci9zeXNsZXZlbC5jLCBmaWxlcy9kb3NfZnMuYzoKCUFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoJU21hbGwgZml4LgoKCSogbG9hZGVyL25lL3NlZ21lbnQuYywgaW5jbHVkZS9tb2R1bGUuaCwgaW5jbHVkZS9uZWV4ZS5oLCBpZjE2MzIva2VybmVsLnNwZWM6CglBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCVlldCBhbm90aGVyIHNtYWxsIHNlbGYtbG9hZGVyIGZpeC4KCgkqIGZpbGVzL2RyaXZlLmM6IEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoJRml4ZWQgc2V2ZXJlIGJ1ZzogU2V0Q3VycmVudERpcmVjdG9yeTMyQSBkaWRuJ3Qgc2V0IHBUYXNrLT5jdXJkaXIKCWNvcnJlY3RseSBkdWUgdG8gY3VycmVudCBkcml2ZSBiZWluZyBzZXQgdG9vIGxhdGUuCgoJKiBNYWtlLnJ1bGVzLmluOiBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCVVzZSAkKEFTKSBpbnN0ZWFkIG9mICQoQ0MpIHRvIGNvbXBpbGUgLnMgZmlsZXMuCgoJKiByZWxheTMyLy5jdnNpZ25vcmUsIHJlbGF5MzIvTWFrZWZpbGUuaW4sIHJlbGF5MzIvYnVpbHRpbjMyLmMsIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgaW5jbHVkZS9tbXJlZy5oLCBpZjE2MzIvLmN2c2lnbm9yZSwgaWYxNjMyL01ha2VmaWxlLmluLCBpZjE2MzIvYnVpbHRpbi5jLCBkbGxzL01ha2VmaWxlLmluLCBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW46CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCVN0YXJ0ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIE1TQUNNLkRMTCwgTVNBQ00zMi5ETEwgYW5kIElNQUdFSExQLkRMTC4KCgkqIGluY2x1ZGUvaW1hZ2VobHAuaCwgcmVsYXkzMi9pbWFnZWhscC5zcGVjLCBkbGxzL2ltYWdlaGxwLy5jdnNpZ25vcmUsIGRsbHMvaW1hZ2VobHAvTWFrZWZpbGUuaW4sIGRsbHMvaW1hZ2VobHAvYWNjZXNzLmMsIGRsbHMvaW1hZ2VobHAvZGVidWcuYywgZGxscy9pbWFnZWhscC9pbWFnZWhscF9tYWluLmMsIGRsbHMvaW1hZ2VobHAvaW50ZWdyaXR5LmMsIGRsbHMvaW1hZ2VobHAvaW50ZXJuYWwuYywgZGxscy9pbWFnZWhscC9tb2RpZnkuYywgZGxscy9pbWFnZWhscC9zeW1ib2wuYzoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJU3RhcnRlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgSU1BR0VITFAuRExMLgoKCSogaW5jbHVkZS9tc2FjbS5oLCBpbmNsdWRlL21zYWNtZHJ2LmgsIHJlbGF5MzIvbXNhY20zMi5zcGVjLCBpZjE2MzIvbXNhY20uc3BlYywgZGxscy9tc2FjbTMyLy5jdnNpZ25vcmUsIGRsbHMvbXNhY20zMi9NYWtlZmlsZS5pbiwgZGxscy9tc2FjbTMyL2J1aWx0aW4uYywgZGxscy9tc2FjbTMyL2RyaXZlci5jLCBkbGxzL21zYWNtMzIvZmlsdGVyLmMsIGRsbHMvbXNhY20zMi9mb3JtYXQuYywgZGxscy9tc2FjbTMyL2ludGVybmFsLmMsIGRsbHMvbXNhY20zMi9tc2FjbTMyX21haW4uYywgZGxscy9tc2FjbTMyL3N0cmVhbS5jLCBkbGxzL21zYWNtLy5jdnNpZ25vcmUsIGRsbHMvbXNhY20vTWFrZWZpbGUuaW4sIGRsbHMvbXNhY20vbXNhY21fbWFpbi5jOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglTdGFydGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBNU0FDTS5ETEwgYW5kIE1TQUNNMzIuRExMLgoKCSogd2luMzIvZGV2aWNlLmM6IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJUmVtb3ZlZCB0aGluZ3MgdGhhdCB3ZXJlIGVhcmxpZXIgYWRkZWQgYnkgbWlzdGFrZS4KCgkqIHJlbGF5MzIvd2lubW0uc3BlYzogUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglUaGUgaW1wbGVtZW50YXRpb24gb2YgbW1pb1dyaXRlIGlzIG5vdyBjYWxsZWQgaW5zdGVhZCBvZiB0aGUgc3R1Yi4KCgkqIGluY2x1ZGUvc2hlbGwuaCwgZGxscy9zaGVsbDMyL3NoZWxsb2xlLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUJ1Z2ZpeGVzLCBzaGVsbHZpZXcgdXNlcyBEUEEncyBub3csIElTaGVsbFZpZXdfR2V0SXRlbU9iamVjdCBpbXBsZW1lbnRlZC4KCgkqIHJlbGF5MzIvc2hlbGwzMi5zcGVjLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBzdHViczogU0hHZXRGaWxlSW5mbzMyVywgUmVhZENhYmluZXRTdGF0ZSwgV3JpdGVDYWJpbmV0U3RhdGUsIElzVXNlckFkbWluLgoJSW1wbGVtZW50ZWQ6IFNIR2V0UGF0aEZyb21JRExpc3QzMlcuCglDaGFuZ2VkIFBhdGhDb21iaW5lLgoKCSogaW5jbHVkZS9zaGxvYmouaDogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3RydWN0dXJlcyBEVkFTUEVDVCwgVFlNRUQsIElETExpc3QuCglTaGVsbCBzcGVjaWZpYyBjbGlwYm9hcmQgZm9ybWF0cy4KCgkqIHJlbGF5MzIvd2luc3Bvb2wuc3BlYywgbWlzYy9wcmludGRydi5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTdHViIEVudW1QcmludGVyc1cuCgoJKiBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglJbXBsZW1lbnRlZCBmaXJzdCBmdW5jdGlvbnMuCgoJKiBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvcGlkbC5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgY2xhc3MgSURMTGlzdCAiSXRlbSBJRCBMaXN0IExpc3QiIChpbnRlcm5hbCkuCgoJKiBtaXNjL3Zlci5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNtYWxsIGNoYW5nZXMgKHVzZXMgSElXT1JEL0xPV09SRCkuCgoJKiB3aW5kb3dzL2RpYWxvZy5jLCByZWxheTMyL3VzZXIzMi5zcGVjOgoJU2F0IE9jdCAxMCAxMjowMDowMCAxOTk4ICBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN0dWIgQ3JlYXRlRGlhbG9nSW5kaXJlY3RQYXJhbUFvclcuCgoJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW46CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQ+CglEb24ndCBpbnN0YWxsIG9iamVjdCBmaWxlcyB3aGVuIC0tZGlzYWJsZS1saWIgaXMgc2VsZWN0ZWQuCgoJKiBkZWJ1Z2dlci9oYXNoLmMsIGRlYnVnZ2VyL21zYy5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0PgoJRG9uJ3QgcHJpbnQgbmFtZSBmb3IgMzIgYml0IGxpYiBtdWx0aXBsZSB0aW1lcy4KCUNsZWFuIHVwIHByaW50aW5nIGluIERFQlVHX1Byb2Nlc3NEZWZlcnJlZERlYnVnLgoKCSogbWVtb3J5L2hlYXAuYywgZGxscy9jb21jdGwzMi90YWIuYywgY29udHJvbHMvY29tYm8uYzoKCURhdmlkIEx1eWVyIDxsdXllckB1Y3MudXdhLmVkdS5hdT4KCVNtYWxsIGZpeGVzLgoKCSogZmlsZXMvZHJpdmUuYzogUGV0dGVyIFJlaW5ob2xkdHNlbiA8cGVyZUB0ZC5vcmcudWl0Lm5vPgoJQnVnZml4OiBDaGFuZ2VkIEdldERyaXZlVHlwZTMyQShOVUxMKSB0byB1c2UgY3dkJ3Mgcm9vdC4KCgkqIG9sZS90eXBlbGliLmMsIG9sZS9jb21wb2JqLmMsIG9sZS9pZnMuYywgb2xlL21vbmlrZXIuYywgb2xlL29sZTIuYywgb2xlL29sZTJkaXNwLmMsIG9sZS9vbGUybmxzLmMsIG9sZS9vbGVjbGkuYywgb2xlL29sZXN2ci5jLCBvbGUvc3RvcmFnZS5jLCBtaXNjL250ZGxsLmMsIG1pc2MvcmVnaXN0cnkuYzoKCU1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+CglEb2N1bWVudGF0aW9uIGNvcnJlY3Rpb25zL3N0YW5kYXJkaXphdGlvbnMuCgoJKiBtdWx0aW1lZGlhL2F1ZGlvLmMsIG11bHRpbWVkaWEvaW5pdC5jLCBtdWx0aW1lZGlhL21jaWFuaW0uYywgbXVsdGltZWRpYS9tY2ljZGEuYywgbXVsdGltZWRpYS9tY2lzdHJpbmcuYywgbXVsdGltZWRpYS9taWRpLmMsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYywgaW5jbHVkZS9tbXN5c3RlbS5oLCBpbmNsdWRlL211bHRpbWVkaWEuaDoKCUVyaWMgUG91ZWNoICA8ZXJpYy5wb3VlY2hAbGVtZWwuZnI+CglTdGFydGVkIGNvZGluZyAzMiBiaXQgTUNJIGhhbmRsaW5nLgoJQWRkZWQgT3Blbi9DbG9zZSB0byBsb3ctbGV2ZWwgTUNJIGRyaXZlcnMgKGF1ZGlvLCBtaWRpLCBhbmltLCBjZGEpLgoJV3JvdGUgTUNJIE1JREkgc3VwcG9ydC4KCgkqIGdyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJWWV0IGFub3RoZXIgaW1wcm92ZW1lbnQgdG8gdGhlIGJlemllciBjb2RlLgoKCSogd2luZG93cy9tZXNzYWdlLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglHZXRUaWNrQ291bnRzKCkgaGFzIGEgZ3JhbnVsYXJpdHkgaW4gd2luZG93cyBvZiAyNSBtc2VjJ3MuCglHaXJvdGVsJ3Mgc2VyaWFsIGNvbW11bmljYXRpb24gYXBwZWFycyB0byBkZXBlbmQgb24gaXQsIHNvIEkgZ3Vlc3MKCWl0J3MgYSBmZWF0dXJlLi4uCgoJKiBtaXNjL2NvbW0uYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCVVwZGF0ZSB0aGUgbW9kZW1uIHN0YXR1cyBiaXQgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgUkxTRCBsaW5lIGlzCglhY3RpdmUgaW4gZXZlcnkgY2FsbCB0byBHZXRDb21tRXJyb3IoKS4gVGhpcyBpcyBub3QgdGhlIHByb3BlciBwbGFjZSwKCWJ1dCBzaW5jZSB3aW5lIGRvZXNuJ3QgZG8gYW55IGV2ZW50LXN0dWZmLi4uCglGaXhlZCBzb21lIFRSQUNFIGNhbGwncyBmYWNlZCB3aXRoIG5vbiB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5ncy4KCVJlc3RvcmUgdGhlIHRlcm1pbmFsIHN0YXRlIGF0IENsb3NlQ29tbXQgdG8gdGhlIHN0YXRlIGl0IHdhcyBhdAoJT3BlbkNvbW0oKSwgc28gdGhlIG1vZGVtIHdpbGwgZ28gb2ZmLWhvb2suCgoJKiBsb2FkZXIvbW9kdWxlLmM6IEFsZXhhbmRlciBMYXJzc29uICA8YWxsYUBseXNhdG9yLmxpdS5zZT4KCUdldE1vZHVsZUZpbGVOYW1lMzJBKCkgcmV0dXJucyBsb25nIGZpbGVuYW1lIGlmIGFwcCBzZXRzIG9zdmVyc2lvbiA+PQoJNC4wLiBBbHNvIG1vdmVkIHRoZSBsb25nIGZpbGVuYW1lIGhhY2tlcnkgdG8gR2V0TG9uZ1BhdGhOYW1lMzJBKCkgc28KCWl0IGNhbiBiZSB1c2VkIGJ5IHdpbjMyIHByb2dyYW1zLgoKCSogZmlsZXMvZG9zX2ZzLmM6IEFsZXhhbmRlciBMYXJzc29uIDxhbGxhQGx5c2F0b3IubGl1LnNlPgoJR2V0TG9uZ1BhdGhOYW1lMzJBKCkgcmV0dXJucyBkb3MgZm9ybWF0IGxvbmcgZmlsZW5hbWUgaW5zdGVhZCBvZiB1bml4Cglmb3JtYXQuCgoJKiBkbGxzL2NvbWN0bDMyL2xpc3R2aWV3LmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglTbWFsbCBmaXhlcy4KCgkqIHJlbGF5MzIvc2hlbGwzMi5zcGVjLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBTSEZsdXNoQ2xpcGJvYXJkLgoKCSogcmVsYXkzMi9jb21jdGwzMi5zcGVjLCBpbmNsdWRlL2NvbW1jdHJsLmgsIGRsbHMvY29tY3RsMzIvY29tY3RsMzJ1bmRvYy5jOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIHNvbWUgdW5kb2N1bWVudGVkIGZ1bmN0aW9ucy4KCUNoYW5nZWQgYWxnb3JpdGhtIGluIERQQV9RdWlja1NvcnQoKS4KCUZpeGVkIGhlYXAgY3JlYXRpb24vZGVzdHJ1Y3Rpb24gYW5kIGNvbnRyb2wgW3VuXXJlZ2lzdHJhdGlvbiBpbgoJQ29tQ3RsMzJMaWJNYWluKCkuCgoJKiBkbGxzL2NvbWN0bDMyL2hlYWRlci5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRml4ZWQgYSBidWcuCgoJKiBpbmNsdWRlL3Rvb2x0aXBzLmgsIGRsbHMvY29tY3RsMzIvdG9vbHRpcHMuYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCB0cmFja2luZyBzdXBwb3J0IGFuZCBmaXhlZCBsb2FkaW5nIG9mIHJlc291cmNlIHN0cmluZ3MuCglBZGRlZCB1bnJlZ2lzdGVyIGNvZGUuCgoJKiBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmgsIGluY2x1ZGUvaXBhZGRyZXNzLmgsIGluY2x1ZGUvbmF0aXZlZm9udC5oLCBkbGxzL2NvbWN0bDMyL01ha2VmaWxlLmluLCBkbGxzL2NvbWN0bDMyL2NvbW1jdHJsLmMsIGRsbHMvY29tY3RsMzIvaXBhZGRyZXNzLmMsIGRsbHMvY29tY3RsMzIvbmF0aXZlZm9udC5jOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIElQQWRkcmVzcyBhbmQgTmF0aXZlRm9udCBjb250cm9scy4KCgkqIGluY2x1ZGUvaW1hZ2VsaXN0LmgsIGRsbHMvY29tY3RsMzIvaW1hZ2VsaXN0LmM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJU29tZSBtaW5vciBpbXByb3ZlbWVudHMuCgoJKiBpbmNsdWRlL3Rvb2xiYXIuaCwgZGxscy9jb21jdGwzMi90b29sYmFyLmM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJSW1wcm92ZWQgZHJhd2luZyBhbmQgcGxhY2VtZW50IGNvZGUuIEV4cGxvcmVyIHN0eWxlIGNvbW1vbiBkaWFsb2dzIGFyZQoJbG9va2luZyBnb29kIG5vdy4KCgkqIG9iamVjdHMvY3Vyc29yaWNvbi5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRml4ZWQgYnVnIGluIERyYXdJY29uRXgzMigpLgoKCSogbWlzYy9tYWluLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglJbXByb3ZlZCBHZXRTeXN0ZW1JbmZvcm1hdGlvbjMyW0EvV10uCgoJKiB3aW5kb3dzL25vbmNsaWVudC5jLCByZWxheTMyL3VzZXIzMi5zcGVjLCBpbmNsdWRlL3dpbmRvd3MuaCwgaWYxNjMyL3VzZXIuc3BlYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBEcmF3Q2FwdGlvblsxNi8zMl0gYW5kIERyYXdDYXB0aW9uVGVtcFsxNi8zMkEvMzJXXS4KCUZpeGVkIGhhbmRsaW5nIG9mIFdTX0VYX1RPT0xXSU5ET1cuCgoJKiBkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9sczogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCVVwZGF0ZWQuCgoJKiB3aW5kb3dzL2V2ZW50LmMsIHdpbmRvd3Mva2V5Ym9hcmQuYywgaW5jbHVkZS9rZXlib2FyZC5oOgoJRGF2aWQgRmF1cmUgPGZhdXJlQGtkZS5vcmc+CglBZGRlZCBLRVlCT0FSRF9VcGRhdGVTdGF0ZSwgdG8gcmVhZCB0aGUgbW9kaWZpZXJzIHdoZW4gdGhlIHdpbmUgYXBwIGlzCglhY3RpdmF0ZWQuIFVzZXMgdGhlIG5ldyBLRVlCT0FSRF9VcGRhdGVPbmVTdGF0ZS4KCUZpeGVkIGEgcHJvYmxlbSB3aXRoIG1lbnUgYWNjZWxlcmF0b3JzIChBbHQtbGV0dGVyIGdlbmVyYXRlcyBhIGRvd24KCWFycm93IGV2ZW50IHdoaWNoIGJlZXBzIGlmIG5vdCBmaWx0ZXJlZCkuCglTcGVlZGVkIHVwIFRvQXNjaWkxNi8zMigpIGEgbGl0dGxlIGJpdC4KCgkqIGRlYnVnZ2VyL2JyZWFrLmMsIGRlYnVnZ2VyL2RiX2Rpc2FzbS5jLCBkZWJ1Z2dlci9kYmcueSwgZGVidWdnZXIvZXhwci5jLCBkZWJ1Z2dlci9zb3VyY2UuYywgZGVidWdnZXIvdHlwZXMuYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJTWFkZSBXaW5lJ3MgZGVidWdnZXIgd29yayBzYXRpc2ZhY3RvcmlseSB3aXRoIERPUyBhcHBzLgoJUGVyaGFwcyBkZXJlZmVyZW5jaW5nIHdvcmsgYmV0dGVyIGZvciBXaW4xNiBhcHBzIHRvbyBub3csIGJ1dAoJaXQgYXBwZWFycyB0aGUgZGVidWdnZXIgY29yZSB3YXNuJ3QgZGVzaWduZWQgZm9yIHNlZ21lbnRhdGlvbi4KCgkqIG1zZG9zL2RwbWkuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglTaW11bGF0ZXMgRFBNSSBtZW1vcnkgbWFwIGJ5IGNvbnZlcnRpbmcgbG93ZXItTUIgc2VnbWVudCBiYXNlCglhZGRyZXNzZXMgYXMgbmVjZXNzYXJ5LiBJbXBsZW1lbnRlZCBhbGxvY2F0aW5nL2ZyZWVpbmcgRE9TIG1lbW9yeQoJYmxvY2tzLiBBZGRlZCBYTVMgaG9vay4gKERQTUkgcmVtYWlucyBkaXNhYmxlZCBieSBkZWZhdWx0IHVudGlsCglzb21lb25lIGltcGxlbWVudHMgdGhlIHJhdyBtb2RlIHN3aXRjaCBlbnRyeSBwb2ludHMgcGt1bnppcCBuZWVkcy4pCgoJKiBtc2Rvcy9pbnQyMS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUkgdGhpbmsgaXQncyB0aW1lIHRvIHJldGhpbmsgdGhlIEhGSUxFMTZfVE9fSEZJTEUzMiBzdHJhdGVneSwKCWNhbid0IGtlZXAgd29ya2luZyBhcm91bmQgZmxhd3MgaW4gaXQgbGlrZSB0aGlzIChub3cgc3RkaW8KCXdhcyBnZXR0aW5nIGNsb3NlZCB3aGVuIHByb2dyYW1zIGNsb3NlIGhhbmRsZXMgPj01KQoKCSogbXNkb3MveG1zLmMsIG1zZG9zL01ha2VmaWxlLmluLCBtc2Rvcy9pbnQyZi5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglJbXBsZW1lbnRlZCBiYXNpYyBYTVMgZnVuY3Rpb25zLiB3Y2IuZXhlIChXaW4xNiBkaXNhc3NlbWJsZXIpIG5vdwoJc2VlbXMgdG8gd29yayBmaW5lIHVuZGVyIFdpbmUuCgoJKiBsb2FkZXIvZG9zL2Rvc3ZtLmMsIGxvYWRlci9kb3MvbW9kdWxlLmMsIGluY2x1ZGUvZG9zZXhlLmgsIGluY2x1ZGUvbWlzY2VtdS5oOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglNb3ZlZCBzb21lIHN5c3RlbSBkZXBlbmRlbmNpZXMgdG8gbG9hZGVyL2Rvcy9kb3N2bS5jLiBJbXBsZW1lbnRlZAoJZW52aXJvbm1lbnRhbCBhcmd2WzBdIHBhc3NpbmcgdG8gRE9TIGFwcHMuIEFkZGVkIFhNUyBob29rcy4KCgkqIGRlYnVnZ2VyL3N0YWJzLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQWRkZWQgYSBtZW1zZXQoKSB0byBwcmV2ZW50IGEgZGVidWdnZXIgc2VnZmF1bHQgY2F1c2VkIGJ5Cgl1bmluaXRpYWxpemVkIHBvaW50ZXJzIGluIHRoZSBzdGFicyBsb29rdXAgdGFibGVzLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBIGZldyBmaXhlcy4KCgkqIHJlbGF5MzIvbnRkbGwuc3BlYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBSdGxBbGxvY2F0ZUFuZEluaXRpYWxpemVTaWQgZW50cnkuCgoJKiBsb2FkZXIvTWFrZWZpbGUuaW4sIGxvYWRlci9lbGYuYywgbG9hZGVyL21vZHVsZS5jLCBsb2FkZXIvcGVfaW1hZ2UuYywgaW5jbHVkZS9jb25maWcuaC5pbiwgaW5jbHVkZS9tb2R1bGUuaCwgaW5jbHVkZS9wZV9pbWFnZS5oLCBpbmNsdWRlL3BlZXhlLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglHZW5lcmljIGR5bmFtaWMgZGxsIGxvYWRlciB1c2luZyBkbCooKSBBUEkuCglJbmNsdWRlczogc3RkY2FsbC0+Y2RlY2wgbWFwcGluZyBhYmlsaXR5LCBzbm9vcGluZy4KCShUZXN0ZWQgb25seSB3aXRoIGdsaWRlMnguZGxsIC0+IGxpYmdsaWRlMnguc28pCgoJKiBtdWx0aW1lZGlhL2luaXQuYywgbXVsdGltZWRpYS90aW1lLmMsIGluY2x1ZGUvbW1zeXN0ZW0uaCwgaW5jbHVkZS9tdWx0aW1lZGlhLmg6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIHdpbjMyIGVuaGFuY2VkIGZ1bmN0aW9uYWxpdHkgdG8gdGltZXIgY2FsbGJhY2tzLgoKCSogd2luMzIvY29uc29sZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIGJhZCBoYWNrcyBzbyBXcml0ZUNvbnNvbGVPdXRwdXQgd29ya3Mgb24gdnQxMDAgYW5kIFBlZWtNZXNzYWdlCglkb2VzIGF0IGxlYXN0IGEgYml0IG9mIGtleWJvYXJkIGlucHV0LgoKCSogcmVsYXkzMi9zbm9vcC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNob3VsZCBkaXNwbGF5IGFnYWluLgoKU2F0IE9jdCAxMCAxNTo1Mjo0NiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luZG93cy9kaWFsb2cuYzogRGF2ZSBQaWNrbGVzIDxkYXZlcEBudWdhdGUuZGVtb24uY28udWs+CglJbXBsZW1lbnRlZCBEU19DRU5URVIgZGlhbG9nIHN0eWxlLgoKCSogbWlzYy9tYWluLmM6IFBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgoJQWRkZWQgZnVuY3Rpb24gdG8gYnVpbGQgdGhlIFdpbmRvd3MgbnVtZXJpYyBsYW5ndWFnZSBJRCBmcm9tIGxhbmd1YWdlLAoJY29kZSwgY2hhcnNldCBhbmQgZGlhbGVjdCBzdHJpbmdzLCBsaWtlIHVzZWQgYnkgVW5peCBMQU5HIHZhcmlhYmxlLgoKCSogb2xlL29sZTJubHMuYywgb2xlL25scy9SRUFETUUsIGluY2x1ZGUvd2lubmxzLmgsIG9sZS9ubHMvKi5ubHM6CglQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KCU1vcmUgTkxTIGRhdGEuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBQZXRlciBTY2hsYWlsZSA8dWRiekByei51bmkta2FybHNydWhlLmRlPgoJRml4ZWQgYSBsb3Qgb2YgYnVncyBpbiBkZHJhdy5jIHRvIG1ha2UgeGxpYiBzdXBwb3J0IHdvcmsuCglSdW5zIHN1Y2Nlc3NmdWxseSBUUjJEZW1vIGFuZCBKYXp6IEphY2tyYWJiaXQgSUkgRGVtbyEKCgkqIG9iamVjdHMvZ2Rpb2JqLmM6IENsaWZmIFdyaWdodCA8Y2xpZmZAc25pcGU0NDQub3JnPgoJQWRkZWQgREMgb2JqZWN0IHR5cGUgdG8gdGhlIGxpc3Qgb2YgdmFsaWQgb2JqZWN0cyB0aGF0IGNhbiBiZSBkZWxldGVkCglieSBEZWxldGVPYmplY3QzMi4KClN1biBPY3QgIDQgMTg6MjA6MjkgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIENoYW5nZUxvZzoKCVN0YXJ0aW5nIG5ldyBmb3JtYXQgY2hhbmdlbG9nIChvbGRlciBjaGFuZ2VzIG1vdmVkIHRvCglkb2N1bWVudGF0aW9uL0NoYW5nZUxvZy5PTEQpLgo=