LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgSnVsICA1IDE5OjA2OjM1IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGFsZXhAbnVtZW5vcj4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCUZpeGVkIGRyYXdpbmcgYnVnIHRoYXQgY2F1c2VkIHBhcnQgb2YgYSBub24tY2xpZW50IHNjcm9sbCBiYXIKCXRvIGJlIHBhaW50ZWQgZXZlbiB3aGVuIHRoZSBzY3JvbGwtYmFyIHdhcyBoaWRkZW4uCgoJKiBbZGVidWdnZXIvYnJlYWsuY10gW2RlYnVnZ2VyL2RiZy55XQoJUmV3cm90ZSBicmVha3BvaW50IGhhbmRsaW5nIHRvIHdvcmsgaW4gMTYtYml0IG1vZGUuCglJbXBsZW1lbnRlZCBzaW5nbGUtc3RlcHBpbmcgKCdzdGVwJyBhbmQgJ25leHQnIGluc3RydWN0aW9ucykuCgoJKiBbZGVidWdnZXIvZGVidWcubF0KCUZvcm1hdCBzcGVjaWZpZXIgaXMgbm93IGEgc2VwYXJhdGUgdG9rZW4uCglFbnRlcmluZyBhbiBlbXB0eSBsaW5lIGF0IHRoZSBkZWJ1Z2dlciBwcm9tcHQgY2F1c2VzIHRoZSBwcmV2aW91cwoJY29tbWFuZCB0byBiZSByZXBlYXRlZCwgbGlrZSB1bmRlciBnZGIuCgkKCSogW2RlYnVnZ2VyL2RlYnVnLmxdIFtkZWJ1Z2dlci9yZWdpc3RlcnMuY10KCURpZmZlcmVudGlhdGUgMTYtYml0IGFuZCAzMi1iaXQgcmVnaXN0ZXJzIHdpdGhvdXQgdGFraW5nIGN1cnJlbnQKCW1vZGUgaW50byBhY2NvdW50ICgkZWF4IGlzIGFsd2F5cyAzMi1iaXQsICRheCBhbHdheXMgMTYtYml0KS4KCgkqIFtkZWJ1Z2dlci9zdGFjay5jXQoJRml4ZWQgc3RhY2sgaW5mb3JtYXRpb24gcm91dGluZXMgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIDE2LWJpdAoJYW5kIDMyLWJpdCBzdGFja3MuCgoJKiBbbG9hZGVyL3Rhc2suY10KCU9wdGlvbiAtZGVidWcgbm93IHNldHMgYSBicmVha3BvaW50IGF0IHRoZSBmaXJzdCBpbnN0cnVjdGlvbiBvZgoJZXZlcnkgbG9hZGVkIHRhc2suCgoJKiBbbWlzY2VtdS9pbnN0ci5jXQoJQWRkZWQgaGFuZGxpbmcgb2YgbG9jaywgcmVwZSBhbmQgcmVwbmUgcHJlZml4ZXMuCgoJKiBbb2JqZWN0cy9kaWIuY10KCUNoYW5nZWQgU3RyZXRjaERJQml0cygpIHRvIGRvIHRoZSBjb3JyZWN0IHRoaW5nLCBldmVuIGlmIGl0J3Mgc3RpbGwKCW5vdCByZWFsbHkgb3B0aW1hbC4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglGaXhlcyBpbiBSb3VuZFJlY3QoKSwgdGhhbmtzIHRvIEJhYmFrIE1hc2FsZWhkYW4uCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglUcmllZCB0byBmaXggbW91c2UgZXZlbnQgaGFuZGxpbmcgd2l0aCByZXNwZWN0IHRvIGRpc2FibGVkCgl3aW5kb3dzLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUNsZWFyIFdJTl9ORUVEU19OQ1BBSU5UIGZsYWcgYmVmb3JlIHNlbmRpbmcgV01fTkNQQUlOVCB0byBhdm9pZAoJaW5maW5pdGUgbG9vcHMuCgoJKiBbd2luZG93cy93aW4uY10KCUZpeGVkIElzV2luZG93VmlzaWJsZSgpIHRvIHJldHVybiBGQUxTRSB3aGVuIG9uZSBvZiB0aGUgcGFyZW50Cgl3aW5kb3dzIGlzIGhpZGRlbi4KClNhdCBKdWwgIDEgMjI6MDg6MjEgMTk5NSAgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL2NvbXBvYmouc3BlY11bbWlzYy9jb21wb2JqLmNdCglDb0dldE1hbGxvYzogTmV3IGZ1bmN0aW9uCglBZGRlZCByZWxheSBlbnRyaWVzIGZvciBDT01QT0JKIG9yZGluYWxzIGFib3ZlIDEwMAoJQ29Jbml0aWFsaXplOiBDaGFuZ2VkIHBhcmFtZXRlciB0byBEV09SRAoKCSogW2lmMTYzMi9vbGUyLnNwZWNdCglFeHBvcnRlZCBpbXBsZW1lbnRhdGlvbiBvZiBPbGVCdWlsZFZlcnNpb24KCgkqIFtpZjE2MzIvb2xlMmRpc3Auc3BlY11bbWlzYy9vbGUyZGlzcC5jXVttaXNjL0ltYWtlZmlsZV0KCW9sZTJkaXNwLmM6IE5ldyBmaWxlCglTeXNBbGxvY1N0cmluZywgU3lzUmVhbGxvY1N0cmluZywgU3lzQWxsb2NTdHJpbmdMZW4sCglTeXNSZUFsbG9jU3RyaW5nTGVuLCBTeXNGcmVlU3RyaW5nLCBTeXNTdHJpbmdMZW46IG5ldyBmdW5jdGlvbnMKCgkqIFtpZjE2MzIvb2xlMm5scy5zcGVjXVtpbmNsdWRlL3dpbm5scy5oXVttaXNjL29sZTJubHMuY10KCUNvbXBhcmVTdHJpbmdBOiBOZXcgZnVuY3Rpb24KClRodSBKdW4gMjkgMTk6NDI6MDIgMTk5NSAgTWFyY3VzIE1laXNzbmVyICA8bXNtZWlzc25AZmF1aTAxLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJKiBbb2JqZWN0cy9mb250LmNdIFtpZjE2MzIvZ2RpLnNwZWNdCglOZXcgc3R1YnMgZm9yIENyZWF0ZVNjYWxhYmxlRm9udFJlc291cmNlLCBHZXRHbHlwaE91dGxpbmUuCgpUaHUgSnVuIDI5IDEzOjQ3OjA4IEdNVCAxOTk1ICBH9nJhbiBUaHluaSAgKGdvcmFuQG5vcnJza2VuLmJpbGRiYXNlbi5zZSkKCgkqIFttaXNjL2NvbW1kbGcuY10KCUV4dGVuc2l2ZSBjaGFuZ2VzIGFuZCBidWcgZml4ZXMgdG8gRmlsZURpYWxvZyBoYW5kbGluZywKICAgICAgICBiZWhhdmVzIG1vcmUgbGlrZSBuYXRpdmUgV2luZG93cy4KCldlZCBKdW4gMjggMTM6MDQ6NDQgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKICAgICAgICAqIFtjb250cm9scy9saXN0Ym94LmNdIFtjb250cm9scy9jb21iby5jXQoJU29tZSBtaW5vciBvcHRpbWl6YXRpb25zLgoJCgkqIFttZW1vcnkvbG9jYWwuY10KCUxPQ0FMX0ZpbmRGcmVlQmxvY2soKTogTmV2ZXIgdXNlIHRoZSBsYXN0IG9uZS4KCQoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJR2xvYmFsUmVBbGxvYygpOiBHTUVNX01PRElGWSBtdXN0IG5vdCBiZSBpZ25vcmVkIHdoZW4gc2l6ZT09MC4KCQoJKiBbbWlzYy9maWxlLmNdCglyZWFkKCkgcmV0dXJucyBhbiBlcnJvciB3aGVuIGxlbmd0aD09MC4gVGhpcyBpcyBub3Qgd2hhdCBXaW5kb3dzCglwcm9ncmFtcyBleHBlY3QsIHNvIHBheSBhdHRlbnRpb24gdG8gdGhpcyBpbiBfbHJlYWQoKS4gQ2hhbmdlZCB0aGlzCglpbiBfbHdyaXRlKCksIF9ocmVhZCgpLCBfaHdyaXRlKCksIHRvby4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUxvYWRJY29uKCk6IElnbm9yZSBiaWgtPmJpU2l6ZUltYWdlLCBzb21lIGljb25zIGhhdmUgd3JvbmcgdmFsdWVzIGluCgl0aGVyZS4KCQoJKiBbaWYxNjMyL3NoZWxsLnNwZWNdIFttaXNjL3NoZWxsLmNdCglXcm9uZyBzcGVjIGZpbGUgZW50cmllcyBjYXVzZWQgaGF2b2M6IEhLRVkgaGFzIDMyIGJpdCwgbm90IDE2LgoJQWNjZXB0IHNvbWUgbW9yZSBjb21iaW5hdGlvbnMgb2YgcGFyYW1ldGVycyBpbiB0aGUgUmVnLi4oKSBmdW5jdGlvbnMuCgkKCSogW2lmMTYzMi90b29saGVscC5zcGVjXQoJTWFrZSBJbnRlcnJ1cHRSZWdpc3RlcigpIGFuZCBJbnRlcnJ1cHRVbnJlZ2lzdGVyKCkgcmV0dXJuIGZhbHNlLgoKCSogW3dpbmRvd3MvaG9vay5jXQoJQ2FsbE5leHRIb29rRXgoKSB1c2VkIHRvIGNyYXNoIHdoZW4gY2FsbGVkIHdpdGggYSBudWxsIGhob29rLiBGaXhlZC4KCldlZCBKdW4gMjggMTA6MTQ6MzQgMTk5NSAgTWFydGluIHZvbiBMb2V3aXMgIDxtYXJ0aW5AaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaW5jbHVkZS9uZWV4ZS5oXVtsb2FkZXIvbmVfaW1hZ2UuY10KCU5FX0xvYWRTZWdtZW50OiBEZXRlY3QgaXRlcmF0ZWQgc2VnbWVudHMKCgkqIFttaXNjL29sZTJubHMuY10KCUxPQ0FMRV9TTE9OR0RBVEU6IGZpeGVkIHR5cG8KCgkqIFttaXNjZW11L2ludDVjLmNdCglSZW9yZGVyZWQgaW5jbHVkZSBmaWxlcyB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBMaW51eCBsaWJjLjUuMQoKCSogW3JjL3dpbmVyYy5jXQoJQWRkZWQgLWIgb3B0aW9uIHRvIHByb2Nlc3MgYmluYXJ5IHJlc291cmNlIGZpbGVzIGludG8gQyBhcnJheXMKCgkqIFtpbmNsdWRlL2NhbGxiYWNrLmhdCglDYWxsV25kUHJvYzogQWRkZWQgZHVtbXkgZHMgcGFyYW1ldGVyIGZvciBsaWJ3aW5lCgoJKiBbaW5jbHVkZS9nZGkuaF1baW5jbHVkZS91c2VyLmhdCglVU0VSX0hFQVBfQUxMT0MsIEdESV9IRUFQX0FMTE9DOiBkcm9wcGVkIGZsYWdzIHBhcmFtZXRlcgoKCSogW2luY2x1ZGUvbGR0LmhdW2luY2x1ZGUvc3RhY2tmcmFtZS5oXQoJZGVmaW5lZCBzZWdtZW50IGNvbnZlcnNpb24gbWFjcm9zIGZvciBsaWJ3aW5lCgoJKiBbbWlzYy9hdG9tLmNdCglEZWZpbmVkIFVTRVJfSGVhcFNlbCBmb3IgbGlid2luZQoKCSogW21pc2MvbWFpbi5jXQoJRGlzYWJsZSAtZGxsIG9wdGlvbiBmb3IgbGlid2luZQoKCSogW21pc2MvdXNlci5jXQoJcmVtb3ZlZCBHZXRGcmVlU3lzdGVtUmVzb3VyY2VzLCBTeXN0ZW1IZWFwSW5mbyBmcm9tIGxpYndpbmUgZm9yIG5vdwoKCSogW3Rvb2xraXQvaGVhcC5jXQoJZml4ZWQgTG9jYWxMb2NrIHByb3RvdHlwZQoKCSogW3Rvb2xraXQvc3VwLmNdCglzeW5jJ2VkIGxvYWRfbXpfaGVhZGVyLCBsb2FkX25lX2hlYWRlciB3aXRoIHN0cnVjdHVyZXMKCgkqIFt0b29sa2l0L3dpbm1haW4uY10KCURpc2FibGVkIHJlc291cmNlIERMTHMgZm9yIGxpYndpbmUgZm9yIG5vdwoKTW9uIEp1biAyNiAxOTozMDoyNCAxOTk1ICBIYW5zIGRlIEdyYWFmZiAgKGdyYWFmZkB0d2k3Mi50d2kudHVkZWxmdC5ubCkKCgkqIFttaXNjL21haW4uY10KCUZpeGVkIC1lbmhhbmNlZCBvcHRpb24gdG8gcmVwb3J0IGEgMzg2IENQVSBpbnN0ZWFkIG9mIGEgMjg2LgoKRnJpIEp1biAyMyAyMzoxODoyNSAxOTk1ICBNYXJjdXMgTWVpc3NuZXIgIDxtc21laXNzbkBmYXVpMDEuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbWlzYy9kb3NfZnMuY10KCVJlbW92ZSBtYXhpbXVtIG9wZW4gZG9zZGlyZW50IGxpbWl0IChmaXhpbmcgdGhlIHdpbmZpbGUuZXhlCiAJcHJvYmxlbSkgYnkgdXNpbmcgdGVsbGRpcigpL3NlZWtkaXIoKS4KCQpGcmkgSnVuIDIzIDEzOjQyOjI1IDE5OTUgIEhhbnMgZGUgR3JhYWZmICAoZ3JhYWZmQHR3aTcyLnR3aS50dWRlbGZ0Lm5sKQoKCSogW21pc2MvcHJvZmlsZS5jXQoJRml4ZWQgcHJvYmxlbSBwYXJzaW5nIGVtcHR5IGxpbmVzIHdpdGhpbiBzZWN0aW9ucyBpbiAuaW5pIGZpbGVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gSnVuIDE5IDIwOjI5OjUwIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKCgkqIFtkZWJ1Z2dlci8qLmNdCglNb2RpZmllZCBkZWJ1Z2dlciB0byB1c2Ugc2VnbWVudGVkIHBvaW50ZXJzIGV2ZXJ5d2hlcmUuCgoJKiBbaWYxNjMyL3NoZWxsLnNwZWNdIFtpZjE2MzIvc291bmQuc3BlY10gW2lmMTYzMi91c2VyLnNwZWNdCglEZWNsYXJlZCBhbGwgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIG9ubHkgMTYtYml0IGFzICdwYXNjYWwxNicuCgoJKiBbaW5jbHVkZS9sZHQuaF0gW21lbW9yeS9sZHQuY10KCUV4cG9ydCBMRFRfRW50cnlUb0J5dGVzIChuZXcpIGFuZCBMRFRfQnl0ZXNUb0VudHJ5IGZvciBEUE1JLgoJTWFpbnRhaW4gYSBjb3B5IG9mIHRoZSBzZWxlY3RvciBmbGFncywgcmVtb3ZpbmcgdGhlIG5lZWQgdG8gbWFrZSBhCglzeXN0ZW0gY2FsbCB0byByZXRyaWV2ZSBhbiBMRFQgZW50cnkuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJRml4ZWQgYnVnIHdpdGggbW9kdWxlIGZpbGUgaGFuZGxlIGNhY2hlLgoKCSogW2xvYWRlci9uZV9yZXNvdXJjZS5jXQoJRml4ZWQgZmlsZSBuYW1lIGJ1ZyBpbiBORV9BY2Nlc3NSZXNvdXJjZSgpLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJRml4ZWQgYnVnIGluIExvYWRJY29uKCkgdGhhdCBjYXVzZWQgd3JvbmcgY29sb3JzIHRvIGJlIHVzZWQgZm9yCgl0aGUgaWNvbiBtYXNrLgoKCSogW2xvYWRlci9zaWduYWwuY10KCU1vdmVkIGluc3RydWN0aW9uIGVtdWxhdGlvbiB0byBtaXNjZW11L2luc3RyLmMuCgoJKiBbbWlzYy9kb3NfZnMuY10gW21pc2NlbXUvaW50MjEuY10KCUxvdHMgb2Ygc21hbGwgZml4ZXMsIHRoYW5rcyB0byBNb3J0ZW4gV2VsaW5kZXIuCgoJKiBbbWlzY2VtdS9kcG1pLmNdCglNb3JlIGNvbXBsZXRlIERQTUkgZW11bGF0aW9uLgoKCSogW21pc2NlbXUvaW5zdHIuY10KCUFkZGVkIHN1cHBvcnQgZm9yIHByZWZpeGVzIGluIGluc3RydWN0aW9ucyB0byBlbXVsYXRlLgoKCSogW21pc2NlbXUvaW50MmYuY10KCVVzZSByZWdpc3RlciBtYWNyb3MgaW5zdGVhZCBvZiBkZXN0cm95aW5nIHRoZSBoaWdoIHBhcnQgb2YgMzItYml0CglyZWdpc3RlcnMuCgoJKiBbb2JqZWN0cy9kYy5jXQoJRml4ZWQgYnVnIGluIEdldERDU3RhdGUoKSB0aGF0IGZhaWxlZCB0byBjbGVhciB0aGUgbmV3IERDLgoKCSogW3JjL3N5c3Jlcy5yY10KCVJlbW92ZWQgZGlhbG9ncyAxMSBhbmQgMTIgdGhhdCB3ZXJlIG5ldmVyIHVzZWQuCgoJKiBbdG9vbHMvYnVpbGQuY10KCSdwYXNjYWwxNicgZ2VuZXJhdGVkIGZ1bmN0aW9ucyBkaWQgbm90IHNhdmUgJWR4LgoJUmVtb3ZlZCB1c2Ugb2YgJWZzIHRvIGFjY2VzcyB0aGUgc3RhY2suCgklZHMgaXMgbm8gbG9uZ2VyIGluaXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nIGEgMTYtYml0IHJvdXRpbmUuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUFjY2VwdCBhIE5VTEwgcG9pbnRlciBhcyB3aW5kb3cgdGl0bGUuCgoJKiBbd2luZG93cy9tZGkuY10KCU1ESUNhc2NhZGU6IHNraXAgaWNvbmljIHdpbmRvd3MuCglJbXBsZW1lbnRlZCBDYWxjQ2hpbGRTY3JvbGwoKS4KCQoJKiBbd2luZG93cy91dGlsaXR5LmNdCglGaXhlZCBNdWxEaXYoKSBmb3IgaWxsZWdhbCB2YWx1ZXMuCgoJKiBbd2luZG93cy93aW4uY10KCUZpeGVkIFggZXJyb3IgaW4gQ3JlYXRlV2luZG93RXgoKSB3aGVuIFdNX05DQ0FMQ1NJWkUgcmV0dXJuZWQKCWEgemVybyB3aWR0aCBvciBoZWlnaHQuCgpTdW4gSnVuIDE4IDIyOjIyOjMwIE1FVCBEU1QgMTk5NSAgRm9ucyBCb3RtYW4gIChib3RtYW5AaW50ZXIubmwubmV0KQoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUZpeGVkICJ1bmluaXRhbGl6ZWQiIG1lc3NhZ2Ugd2hpY2ggLVdhbGwgY291bGRudCBzZWUgdG8gYmUgb2sKCWluIEVESVRfV3JpdGVUZXh0LgoKCSogW2luY2x1ZGUvZGVidWcuaF0KCUFkZGVkIGRlZmluZSBmb3IgZXh0cmEgY2hlY2tzIGluIEFQSSBkZWZpbml0aW9ucyBkdXJpbmcgZGVidWdnaW5nLgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJQWRkZWQgbmV3bGluZSBpbiBORV9GaXh1cFByb2xvZ3MgdG8gYXZvaWQgbG9uZyBsaW5lcy4KCgkqIFttaXNjL2Rvc19mcy5jXQoJQWRkZWQgZXh0cmEgc2FmZXR5IGNoZWNrIGluIERPU19WYWxpZERyaXZlLgoKCSogW21pc2MvZXhlYy5jXQoJRml4ZWQgZGVmaW5pdGlvbiBvZiBFeGl0V2luZG93cy4KCQpTdW4gSnVuIDE4IDIxOjE2OjA4IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIFtjb250cm9scy9lZGl0LmNdCglTb21lIGZpeGVzLCBtb3N0bHkgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBidXQgYWxzbyBmb3IgdGV4dCBzZWxlY3Rpb24KCWFuZCB0YWIgcG9zdGl0aW9ucy4gR2VuZXJhbCBjbGVhbnVwLiBOb3RlcGFkLmV4ZSBub3cgd29ya3MuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUZpeDogdGhlIGh3bmQgZmllbGQgb2YgdGhlIERSQVdJVEVNU1RSVUNUIHNob3VsZCBhbHdheXMgYmUgdGhhdCBvZgoJdGhlIGNvbWJvIGJveCwgbm90IHRoZSBDb21ib0xCb3ggdGhhdCBiZWxvbmdzIHRvIGl0LgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUhhbmRsZSBpdGVtSUQgZmllbGQgY29ycmVjdGx5IHRocm91Z2hvdXQuCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglJbXBsZW1lbnRlZCBmbGFnIExNRU1fWkVST0lOSVQuCglMb2NhbFJlQWxsb2MoKSBjb3VsZCB0cmFzaCB0aGUgaGVhcC4gRml4ZWQuCgoJKiBbb2JqZWN0cy9mb250LmNdCglGT05UX01hdGNoRm9udCgpOiBkb24ndCBnZXQgY29uZnVzZWQgYnkgbmVnYXRpdmUgd2lkdGhzLgoJRml4ZWQgYSBzZWdmYXVsdCBpbiBFbnVtRm9udHMoKS4KCgkqIFtvYmplY3RzL3RleHQuY10KCURyYXdUZXh0KCk6IERUX0NBTENSRUNUIGltcGxpZXMgRFRfTk9DTElQLgoKCSogW29iamVjdHMvZGN2YWx1ZXMuY10KCU1BS0VMT05HIHdhcyB1c2VkIHdpdGggYmFkIHBhcmFtZXRlcnMgaW4gRENfR0VUX1hfWS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJRG9uJ3Qgc2hvdyB0aGUgZGlhbG9nIGlmIFdTX1ZJU0lCTEUgaXNuJ3Qgc2V0IGluIHRoZSB0ZW1wbGF0ZS4KCgkqIFt3aW5kb3dzL3V0aWxpdHkuY10KCVVUSUxJVFlfY29udmVydEFyZ3MoKTogTmV2ZXIgcGFzcyBhbiBleHByZXNzaW9uIGNvbnRhaW5pbmcgKysgaW50byBhCgltYWNyby4uLgoKCSogW3dpbmRvd3Mvd2luLmNdCglTZXRQYXJlbnQoKSBzaG91bGQgdW5saW5rIHRoZSB3aW5kb3cgYmVmb3JlIGNoYW5naW5nIHRoZSBwYXJlbnQuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglEb24ndCBjYWxsIHRpbWVyIGZ1bmN0aW9ucyB2aWEgQ2FsbFdpbmRvd1Byb2MoKSwgc2luY2UgaXQgY2hlY2tzCgl3aGV0aGVyIGh3bmQ9PTAgYW5kIGRvZXMgbm90IGNhbGwgdGhlIGZ1bmN0aW9uIGluIHRoYXQgY2FzZS4KCgkqIFttaXNjZW11L2luc3RyLmNdCglJZ25vcmUgaW50ZXJydXB0IDB4M0QsIGZvciBWQlJVTjMwMC5ETEwuCgoJKiBbbWlzYy9jb21tZGxnLmNdCglEb24ndCByZWx5IG9uIHRoZSBpdGVtRGF0YSBmaWVsZCBvZiB0aGUgRFJBV0lURU1TVFJVQ1QgdG8gY29udGFpbiBhCglwb2ludGVyIHRvIHRoZSBpdGVtIHRleHQuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglEaXNhYmxlIE9MRSBhbmQgRERFTUwgRExMcyBieSBkZWZhdWx0LCBzaW5jZSB0aGV5IGNvbnRhaW4gbm90aGluZyBidXQKCXN0dWJzIGFueXdheS4gU0hFTEwsIENPTU1ETEcgYW5kIFdJTjg3RU0gYXJlIGxlZnQgZW5hYmxlZCwgYWx0aG91Z2gKCXNvbWUgcHJvZ3JhbXMgbWF5IHdvcmsgYmV0dGVyIHdpdGhvdXQgdGhlbS4KCQoJKiBbbXVsdGltZWRpYS8qLmNdIFtpbmNsdWRlL211bHRpbWVkaWEuaF0gW2luY2x1ZGUvZHJpdmVyLmhdCglCZWd1biBjbGVhbmluZyB0aGluZ3MgdXAgYSBsaXR0bGUuIFJlcGxhY2VkIHByaW50ZnMgd2l0aCBkcHJpbnRmXwoJbWFjcm9zLCBtYWRlIGZ1bmN0aW9ucyBzdGF0aWMgd2hlcmUgcG9zc2libGUsIGFuZCBzb21lIG90aGVyIG1pbm9yCgljaGFuZ2VzLgoKU3VuIEp1biAxMSAyMzoxOToxMCAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAgPG1hcnRpbkBpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtkZWJ1Z2dlci9kYmcueV1bZGVidWdnZXIvZGJnLmxdCglSZW1vdmVkIHNwZWNpYWwgaGFuZGxpbmcgZm9yIEZJTEVfSURFTlRJRkVSLCBiZWNhdXNlIGl0IGNhdXNlZAoJcHJvYmxlbXMgd2l0aCB4Lzxmb3JtYXQ+IHN0YXRlbWVudHMuCgoJKiBbZGVidWdnZXIvaW5mby5jXQoJVXNlIFNDX0VTUCBpbnN0ZWFkIG9mIFNDX0VJUCBmb3Igc3RhY2sgZHVtcC4KCgkqIFttaXNjL2NvbXBvYmouY11baWYxNjMyL2NvbXBvYmouc3BlY10KCUNvQnVpbGRWZXJzaW9uLCBDb0luaXRpYWxpemUsIENvVW5pbml0aWFsaXplOiBuZXcgZnVuY3Rpb25zCgoJKiBbbWlzYy9vbGUyLmNdW2lmMTYzMi9vbGUyLnNwZWNdW21pc2MvSW1ha2VmaWxlXVtpbmNsdWRlL29sZTIuaF0KCU5ldyBmaWxlcyBvbGUyLmMsIG9sZTIuaAoJT2xlQnVpbGRWZXJzaW9uLCBPbGVJbml0aWFsaXplLCBPbGVVbmluaXRpYWxpemU6IG5ldyBmdW5jdGlvbnMKCgkqIFtpZjE2MzIvb2xlMmRpc3Auc3BlY10KCUFkZGVkIG1pc3Npbmcgb3JkaW5hbHMgYWJvdmUgMTA5CgoJKiBbbWlzYy9vbGUybmxzLmNdW2lmMTYzMi9vbGUybmxzLnNwZWNdW2luY2x1ZGUvd2lubmxzLmhdCglOZXcgZmlsZSB3aW5ubHMuaAoJR2V0TG9jYWxlSW5mb0E6IG5ldyBmdW5jdGlvbgoKCSogW2lmMTYzMi9zaGVsbC5zcGVjXQoJQWRkZWQgRmluZEVudmlyb25tZW50U3RyaW5nIGFzIHN0dWIKCgkqIFttaXNjL29sZWNsaS5jXVtpZjE2MzIvb2xlY2xpLnNwZWNdCglPbGVJc0RjTWV0YTogTmV3IGZ1bmN0aW9uCgoJKiBbb2JqZWN0cy9mb250XVttaXNjL2dkaS5zcGVjXQoJR2V0S2VybmluZ1BhaXJzOiBuZXcgZnVuY3Rpb24KCgkqIFttaXNjL3NoZWxsLmNdCglTaGVsbEV4ZWN1dGU6IEltcGxlbWVudGVkIHN1cHBvcnQgZm9yIHN0YXJ0aW5nIHByb2dyYW1zCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUluc2VydGVkIG1pc3NpbmcgcmVsYXkgdG8gR2V0Q2xpcEN1cnNvcgoKU3VuIEp1biAxMSAyMDozNDo0NyAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CiAgICAgICAgCgkqIFtjb250cm9scy9lZGl0LmNdCglGaXggYSBwcm9ibGVtIHdpdGggdGhlIGxvY2FsIGhlYXAuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJRml4ZWQgd3JvbmcgZGVjbGFyYXRpb25zIG9mIENBVENIQlVGIGFuZCBMUENBVENIQlVGLgoJCgkqIFtpbmNsdWRlL21kaS5oXSBbd2luZG93cy9tZGkuY10KCVRoaXMgY29kZSBzdGlsbCBhc3N1bWVkIHNlZ21lbnRlZCBhZGRyZXNzPT1saW5lYXIgYWRkcmVzcy4gRml4ZWQuCgoJKiBbaW5jbHVkZS9tc2Rvcy5oXSBbbWlzYy9kb3NfZnMuY10KCVRoZSBmaWxlbWFzayBmaWVsZCBvZiB0aGUgZG9zZGlyZW50IHN0cnVjdHVyZSBjb3VsZCBiZSBvdmVycnVuLiBGaXhlZC4KCUlmIHlvdSBoYWQgYSBmaWxlIGNhbGxlZCBmb29iYXIgYW5kIGEgZmlsZSBjYWxsZWQgZm9vLCB0cnlpbmcgdG8gCglGaW5kRmlsZShmb28pIGNvdWxkIGFjY2lkZW50YWxseSBmaW5kIGZpbGUgZm9vYmFyIGluc3RlYWQuIEZpeGVkLgoJCgkqIFttaXNjL2ZpbGUuY10KCU9wZW5GaWxlKCk6IEFsd2F5cyByZXR1cm4gdGhlIGZ1bGwgcGF0aG5hbWUgaW4gb2ZzLT5zelBhdGhOYW1lLiBUaGlzIAoJYWxzbyBmaXhlcyBHZXRNb2R1bGVGaWxlbmFtZSgpLgoJUHJldmVudCBfbGNsb3NlKCkgZnJvbSBjbG9zaW5nIHN0ZGVyciBvciBzdGRvdXQuCgoJKiBbbWlzYy9wcm9maWxlLmNdCglTZWFyY2ggZm9yIC5pbmkgZmlsZXMgaW4gdGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgbW9kdWxlIGFzIHdlbGwuCgkoTmVlZGVkIGJ5IExvdHVzIE9yZ2FuaXplci4pCgoJKiBbbG9hZGVyL3Rhc2suY10gW2xvYWRlci9uZV9pbWFnZS5jXSBbbG9hZGVyL21vZHVsZS5jXQoJW21lbW9yeS9sb2NhbC5jXQoJTG9jYWwgaGVhcHMgYXJlIG5vdyBpbml0aWFsaXplZCBieSBJbml0VGFzaygpIGZvciBleGVjdXRhYmxlcy4gRExMcwoJaGF2ZSB0byBjYWxsIExvY2FsSW5pdCgpIHRoZW1zZWx2ZXMsIExvY2FsSW5pdCgpIGhhcyB0byBwdXQgdGhlCgloZWFwIGF0IHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQgd2hlbiBjYWxsZWQgd2l0aCBzdGFydD09MC4gV2Ugbm8gbG9uZ2VyCglhbGxvY2F0ZSB0aGUgREdST1VQIHdpdGggNjRrIG9uIHN0YXJ0dXAsIGJ1dCBncm93IHRoZSBsb2NhbCBoZWFwCglpbiBMT0NBTF9HZXRCbG9jaygpIHdoZW4gbmVjZXNzYXJ5LgoKICAgICAgICAqIFtsb2FkZXIvbW9kdWxlLmNdCglMb2FkTGlicmFyeSgpIHNob3VsZCBjYWxsIExvYWRNb2R1bGUoKSBpbiBhbGwgY2FzZXMsIGV2ZW4gaWYgdGhlCglETEwgaXMgYWxyZWFkeSBsb2FkZWQsIHRvIGVuc3VyZSB0aGF0IHRoZSByZWZlcmVuY2UgY291bnQgaXMgY29ycmVjdC4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCVNvbWUgY2hhbmdlcyB0byBmdW5jdGlvbiBwcm9sb2cgZml4dXAuIERvZXMgYW55b25lIGtub3cgZXhhY3RseSBob3cKCXRoaXMgaXMgc3VwcG9zZWQgdG8gd29yaz8gSSBhbSBvbmx5IGd1ZXNzaW5nIGhlcmUuCglJbiBORV9Jbml0aWFsaXplRExMcygpLCBpbml0aWFsaXplIHRoZSBETExzIGEgbW9kdWxlIHJlZmVycyB0byBiZWZvcmUKCXRoZSBtb2R1bGUgaXRzZWxmLgoJCiAgICAgICAgKiBbbG9hZGVyL3Rhc2suY10KCUluaXRpYWxpemUgaW5zdGFuY2UgZGF0YSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBER1JPVVAgaW4gSW5pdFRhc2soKS4KCgkqIFttZW1vcnkvbG9jYWwuY10KCVNvbWUgZml4ZXMgZm9yIG1vdmVhYmxlIGJsb2Nrcy4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCUFsbCB0aGUgSXNCYWQqUG9pbnRlcigpIGZ1bmN0aW9ucyByZXR1cm5lZCBleGFjdGx5IHRoZSB3cm9uZyBib29sZWFuCgl2YWx1ZSBpbiBhbGwgY2FzZXMhCgkKCSogW29iamVjdHMvYml0Ymx0LmNdCglGaXhlZCBhbm90aGVyIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBkZWJ1Z2dpbmcgb3V0cHV0LgoJCgkqIFtvYmplY3RzL2ZvbnQuY10KCVNvbWUgbW9yZSByZWNvdmVyeSBwb3NzaWJpbGl0aWVzIGZvciBGT05UX01hdGNoRm9udCgpIGlmIGEgc3BlY2lmaWVkCglmb250IGRvZXMgbm90IGV4aXN0LgoJCgkqIFt3aW5kb3dzL3dpbi5jXQoJVGhlIGRpYWxvZyBjb2RlIG1heSBjYWxsIENyZWF0ZVdpbmRvd0V4IHdpdGggYW4gaW50ZWdlciBpbiB3aW5kb3dOYW1lLgoJVGhpcyBoYXBwZW5zIGZvciBzdGF0aWMgaWNvbiBjb250cm9scyB0aGF0IGV4cGVjdCBhIHJlc291cmNlIElEIGFzCgl0aGUgd2luZG93IG5hbWUuIENyZWF0ZVdpbmRvd0V4KCkgdXNlZCB0byBjcmFzaC4gRml4ZWQuCgkKCSogW3dpbmRvd3MvY2xhc3MuY10gW3dpbmRvd3Mvd2luLmNdCglXaW5kb3cgY2xhc3NlcyBhcmUgb3duZWQgYnkgbW9kdWxlcywgbm90IGluc3RhbmNlcy4gQ2hhbmdlZAoJUmVnaXN0ZXJDbGFzcygpLCBVbnJlZ2lzdGVyQ2xhc3MoKSwgR2V0Q2xhc3NJbmZvKCkgYW5kIENyZWF0ZVdpbmRvd0V4KCkKCWFjY29yZGluZ2x5LgoKU2F0IEp1biAxMCAxNjoxMDo1MyAxOTk1ICBPbGFmIEZsZWJiZSA8by5mbGViYmVAc2NpZW5jZS1jb21wdXRpbmcudW5pLXR1ZWJpbmdlbi5kZT4KCgkqIFttaXNjZW11L2ludDIxLmNdCgkgIGNsb2NrLmV4ZSB3YXMgZGlzcGxheWluZyBpbmNvcnJlY3QgeWVhci4KCkZyaSBKdW4gOSAyMDozNjo1NiAxOTk1ICBWaWN0b3IgU2NobmVpZGVyIDx0YWlsb3JAY3JsLmNvbT4KCgkqIFtpbmNsdWRlL2N1cnNvci5oXSBbd2luZG93cy9jdXJzb3IuY10KCUltcGxlbWVudGVkIENyZWF0ZUN1cnNvckljb25JbmRpcmVjdCgpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgSnVuICA2IDEyOjExOjQxIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKCgkqIFtjb250cm9scy9tZW51LmNdCglGaXhlZCBidWcgd2l0aCBkcmF3aW5nIG11bHRpLWNvbHVtbiBtZW51cyB3aXRoIHZlcnRpY2FsIHNlcGFyYXRvci4KCgkqIFtkZWJ1Z2dlci9kZWJ1Zy5sXQoJRml4ZWQgTlVMTC1wb2ludGVyIHJlZmVyZW5jZSBhZnRlciByZWFkbGluZSgpLgoKCSogW2lmMTYzMi93aW5wcm9jcy5zcGVjXSBbbWlzY2VtdS9pbnQyMS5jXSBbbWlzY2VtdS9pbnRlcnJ1cHRzLmNdCglBZGRlZCBpbnRlcnJ1cHQgdmVjdG9yIGVtdWxhdGlvbi4gQWxsb3dzIHRvIHJldHJpZXZlIGFuIGludGVycnVwdAoJdmVjdG9yIGFuZCBqdW1wIHRvIGl0IHdpdGhvdXQgY3Jhc2hpbmcuCgoJKiBbbG9hZGVyL2xkdC5jXQoJTW92ZWQgbGR0LmMgdG8gbWVtb3J5IGRpcmVjdG9yeS4KCgkqIFtsb2FkZXIvdGFzay5jXQoJSW1wbGVtZW50ZWQgTG9ja0N1cnJlbnRUYXNrKCkgYW5kIEdldEluc3RhbmNlRGF0YSgpLgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCBTdHJldGNoQmx0KCkgdG8gdXNlIHdyb25nIGNvbG9ycyB3aGVuCglzdHJldGNoaW5nIGEgbW9ub2Nocm9tZSBiaXRtYXAgdG8gYSBjb2xvciBkaXNwbGF5LgoKCSogW29iamVjdHMvYml0bWFwLmNdCglGaXhlZCBhIHNlZ21lbnRlZCBwb2ludGVyIGJ1ZyBpbiBDcmVhdGVCaXRtYXBJbmRpcmVjdCgpLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglBZGRlZCBwb3NzaWJpbGl0eSB0byBoYXZlIGFyZ3VtZW50cyBmb3IgcmVnaXN0ZXIgZnVuY3Rpb25zOyB1c2VkCglieSBpbnRlcnJ1cHQgdmVjdG9ycyB0byByZW1vdmUgdGhlIGZsYWdzIGZyb20gdGhlIHN0YWNrLgoJR2VuZXJhdGUgYSBuZXcgZnVuY3Rpb24gQ2FsbFRvMzJfTGFyZ2VTdGFjaygpLCB0aGF0IGFsbG93cyBjYWxsaW5nCglhIDMyLWJpdCBmdW5jdGlvbiB1c2luZyB0aGUgb3JpZ2luYWwgMzItYml0IHN0YWNrLCBmb3IgZnVuY3Rpb25zCgl0aGF0IG5lZWQgbW9yZSB0aGF0IDY0ayBvZiBzdGFjay4KClR1ZSBNYXkgMzAgMTA6Mjk6NTYgMTk5NSAgTWFydGluIHZvbiBMb2V3aXMgIDxtYXJ0aW5AaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL3NoZWxsLnNwZWNdIFttaXNjL3NoZWxsLmNdCglEb0Vudmlyb25tZW50U3Vic3Q6IGZpeGVkIHByb3RvdHlwZQoKCSogW2lmMTYzMi9nZGkuc3BlY10gW29iamVjdHMvcGFsZXR0ZS5jXQoJU2V0U3lzdGVtUGFsZXR0ZVVzZTogbmV3IGZ1bmN0aW9uCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbbG9hZGVyL3Jlc291cmNlLmNdCglEaXJlY3RSZXNBbGxvYzogbmV3IGZ1bmN0aW9uCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10gW3dpbmRvd3Mva2V5Ym9hcmQuY10KCVNldEtleWJvYXJkU3RhdGU6IG5ldyBmdW5jdGlvbgoKTW9uIE1heSAyOSAxMjo1ODoyOCAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CiAgICAgICAgCgkqIFt0b29scy9idWlsZC5jXQogICAgICAgIFByZXZlbnQgaW50ZXJydXB0cyBmcm9tIGRlc3Ryb3lpbmcgdGhlIGFyZ3MgZm9yIGEgMzIgYml0IGZ1bmN0aW9uCiAgICAgICAgYnkgbG9hZGluZyB0aGUgY29ycmVjdCB2YWx1ZSBpbnRvICVlc3AgZGlyZWN0bHkgYWZ0ZXIgJXNzLgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXSBbbG9hZGVyL21vZHVsZS5jXQoJVGhlIG5ldyBpbnN0YW5jZSBtdXN0IGJlIGNyZWF0ZWQgZWFybGllciBpbiBMb2FkTW9kdWxlKCksIHNvIHRoYXQKCWZpeHVwcyByZWZlcmVuY2luZyBpdCB3aWxsIGJlIGhhbmRsZWQgY29ycmVjdGx5LgogICAgICAgIEluaXRpYWxpemUgdGhlIGxvY2FsIGhlYXAgZm9yIGEgREdST1VQIGluIE5FX0xvYWRTZWdtZW50KCkuCgkKCSogW29iamVjdHMvZGliLmNdCglMaWtlIFJMRTggYml0bWFwcywgUkxFNCBiaXRtYXBzIGRvbid0IGFsd2F5cyBlbmQgd2l0aCBhIHByb3BlciBjb2RlLgoJVGhpcyB1c2VkIHRvIGNyYXNoIFdpbmUuIEZpeGVkLgoKICAgICAgICAqIFtvYmplY3RzL3RleHQuY10KCUZpeCBwb3NzaWJsZSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gZGVidWdnaW5nIG91dHB1dC4KCQoJKiBbbWlzYy9jb21tZGxnLmNdCglIYW5kbGUgdXNlciBpbnB1dCBpbiB0aGUgZWRpdCBjb250cm9sIGJldHRlci4gU29tZSBidWdzIGZpeGVkLgoJCgkqIFttZW1vcnkvbG9jYWwuY10KCVN0YXJ0ZWQgaW1wbGVtZW50aW5nIG1vdmVhYmxlIGJsb2Nrcy4gVGhpcyBpcyB1bmZpbmlzaGVkICghKSwgYnV0CglhdCBsZWFzdCBpdCBkb2VzIG5vdCBzZWVtIHRvIGJyZWFrIHRoaW5ncy4KCldlZCBNYXkgMjQgMTM6MjY6MzYgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgogICAgICAgIAoJKiBbbG9hZGVyL21vZHVsZS5jXQoJTG9hZE1vZHVsZSgpOiBETExzIG9jY2FzaW9uYWxseSBoYXZlIGEgZGF0YSBzZWdtZW50LCBhbmQgdGhleSB3b3JrCgltdWNoIGJldHRlciBpZiBpdCBpcyBsb2FkZWQgOi0pCglMb2FkTGlicmFyeSgpOiBwYXNzIEhNT0RVTEUgaW5zdGVhZCBvZiBISU5TVEFOQ0UgdG8gTkVfSW5pdGlhbGl6ZURMTHMuCglGaW5kTW9kdWxlKCk6IGFsc28gc3RyaXAgb2ZmIHRoZSBsYXN0IGJhY2tzbGFzaCBvZiB0aGUgcGF0aG5hbWVzCgkoV2luaGVscCB0cmllZCB0byBsb2FkIEM6XFdJTkRPV1NcU1lTVEVNXENPTU1ETEcuRExMKS4KCUdldE1vZHVsZUhhbmRsZSgpOiBqdXN0IGNhbGwgTU9EVUxFX0ZpbmRNb2R1bGUsIGl0IGRvZXMgdGhlIHNhbWUgam9iLAoJb25seSBiZXR0ZXIuCgkKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJTG9jYWxJbml0KCkgdGhlIGhlYXAgb2YgYSBETEwgaW4gTkVfSW5pdERMTC4gKFRoaXMgaXMgcHJvYmFibHkKCW5vdCByZWFsbHkgY29ycmVjdCwgaXQgc2VlbXMgdGhhdCBhbGwgcHJvZ3JhbXMgYW5kIERMTHMgdHJ5IHRvIGRvCgl0aGlzIHRoZW1zZWx2ZXMuIEJ1dCB0aGV5IHBhc3Mgd2VpcmQgcGFyYW1ldGVycy4pCglORV9Jbml0aWFsaXplRExMcyBzaG91bGQgYWxzbyBjYWxsIE5FX0luaXRETEwgZm9yIHRoZSBwYXNzZWQgaE1vZHVsZS4KCQoJKiBbbG9hZGVyL3Rhc2suY10gW21pc2MvdXNlci5jXQoJRmluaXNoIGdsb2JhbCBpbml0aWFsaXphdGlvbnMgaW4gSW5pdFRhc2sgaW5zdGVhZCBvZiBJbml0QXBwLCBvcgoJYWxsIHRoZSBETExzIHdpbGwgYmUgaW5pdGlhbGl6ZWQgaW4gSW5pdFRhc2sgd2l0aG91dCBhbnkgYXZhaWxhYmxlCgl3aW5kb3cgY2xhc3NlcyEKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE1heSAyMSAxMjozMDozMCAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHUpCgoJKiBbZGVidWdnZXIvaGFzaC5jXSBbZGVidWdnZXIvaW5mby5jXQoJQWRkZWQgc3VwcG9ydCBmb3Igc3ltYm9saWMgc2VnbWVudGVkIGFkZHJlc3Nlcy4gQWRkIHN5bWJvbHMgZm9yIGFsbAoJYnVpbHQtaW4gQVBJIGVudHJ5IHBvaW50cy4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2luY2x1ZGUvZGxscy5oXQoJUmVtb3ZlZCBkbGxfdGFibGUgc3RydWN0dXJlLCBhcyB3ZSBub3cgdXNlIHRoZSBidWlsdC1pbiBtb2R1bGUKCXN0cnVjdHVyZXMuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtsb2FkZXIvbWFpbi5jXQoJUmVtb3ZlZCB3aW5lc3RhdCBvcHRpb24sIGFzIGl0IHdhcyBubyBsb25nZXIgdmVyeSBtZWFuaW5nZnVsLgoKCSogW2luY2x1ZGUvc3RhY2tmcmFtZS5oXQoJTmV3IG1hY3JvIE1BS0VfU0VHUFRSIHRoYXQgY3JlYXRlcyBhIHNlZ21lbnRlZCBwb2ludGVyIHRvIGEgbG9jYWwKCXZhcmlhYmxlIG9uIHRoZSAzMi1iaXQgc3RhY2suCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIGFuIGFwcGxpY2F0aW9uLgoJSW1wbGVtZW50ZWQgTG9hZE1vZHVsZSgpIGFuZCBGcmVlTW9kdWxlKCkuCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdIFtsb2FkZXIvdGFzay5jXQoJTW92ZWQgaW5pdGlhbGlzYXRpb24gb2YgYnVpbHQtaW4gRExMcyB0byBJbml0VGFzaygpLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUltcGxlbWVudGVkIGRpc2NhcmRhYmxlIGJsb2Nrcy4KCgkqIFttaXNjL2ZpbGUuY10KCVNlYXJjaCBwYXRoIG9mIGN1cnJlbnQgZXhlY3V0YWJsZSBpbiBPcGVuRmlsZSgpLgoJRml4ZWQgYnVnIHdpdGggc2VhcmNoaW5nIGluIFdpbmRvd3MgcGF0aC4KCgkqIFttaXNjL2xzdHIuY10KCUhhcmQtY29kZWQgdHJhbnNsYXRpb24gdGFibGVzIGZvciBBbnNpPC0+T2VtLgoKCSogW21pc2MvdXNlci5jXQoJTW92ZWQgc29tZSBnbG9iYWwgaW5pdGlhbGl6YXRpb25zIHRvIEluaXRBcHAoKSwgYmVjYXVzZSB0aGV5IG5lZWQKCWEgdGFzayBjb250ZXh0IHRvIGJlIHBlcmZvcm1lZC4KCgkqIFtvYmplY3RzL2RjLmNdCglIYW5kbGUgUjJfQkxBQ0sgYW5kIFIyX1dISVRFIHNwZWNpYWxseSBzbyB0aGF0IHRoZXkgd29yayBjb3JyZWN0bHkKCXdpdGggcGFsZXR0ZSBkaXNwbGF5cy4KCgkqIFt0b29scy9idWlsZC5jXQoJU3VwcHJlc3NlZCBnZW5lcmF0aW9uIG9mIHRoZSBDIGZpbGUgZm9yIERMTCBzcGVjcywgYmVjYXVzZSBpdCdzIG5vCglsb25nZXIgbmVlZGVkLiBPdXRwdXQgYWxsIHRoZSBhc3NlbWJseSBjb2RlIGRpcmVjdGx5IHRvIHN0ZG91dC4KCVNvbWUgY2hhbmdlcyB0byBpbnRlZ3JhdGUgV2luMzIgc3VwcG9ydCBmcm9tIE1hcnRpbiB2b24JTG9ld2lzLiAKCgkqIFt3aW5kb3dzL21zZ2JveC5jXQoJTW92ZWQgbWVzc2FnZSBib3ggY29kZSBmcm9tIG1pc2MvIHRvIHdpbmRvd3MvLgoKTW9uIE1heSAxNSAyMzo0MDowNCAxOTk1ICBNYXJ0aW4gQXlvdHRlICh3aW5lQHRyZ2NvcnAubWtzaW5mby5xYy5jYSkKCgkqIFttaXNjL2F1ZGlvLmNdIFttaXNjL21jaWNkYS5jXSBbbWlzYy9tY2lhbmltLmNdIFttaXNjL21pZGkuY10KCSAgW21pc2MvbW1hdXguY10gW21pc2MvbW1zeXN0ZW0uY10KCU1vZGlmeSBjb2RlICYgdXNlIHBvaW50ZXJzIGNvbnZlcnNpb24gbWFjcm9zLgoJTWFrZSBjZGF1ZGlvICYgd2F2ZSBkZXZpY2VzIHdvcmsgYWdhaW4gKG9ubHkgdXNpbmcgc29tZSBhcHBsZXRzKS4KCgkqIFttaXNjL3Byb2ZpbGUuY10KCUNoYW5nZSBnZXRjKCkgdG8gZmdldGMoKSB3aGVyZSBuZWVkZWQuCgpNb24gTWF5IDE1IDIyOjEwOjU2IDE5OTUgIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9JbWFrZWZpbGVdCglhZGRlZCBlbnRyaWVzIGZvciB0aGUgbmV3IGZpbGVzIGdkaTMyLnNwZWMsIGtlcm5lbDMyLnNwZWMsCgl1c2VyMzIuc3BlYywgc2hlbGwzMi5zcGVjIGFuZCB3aW5wcm9jczMyLnNwZWMuCgoJKiBbaWYxNjMyL2NvbW1kbGcuc3BlY11baWYxNjMyL2tlcm5lbC5zcGVjXVtpZjE2MzIvc2hlbGwuc3BlY10KCSAgW2lmMTYzMi9zdG9yYWdlLnNwZWNdW2lmMTYzMi9zeXN0ZW0uc3BlY11baWYxNjMyL3VzZXIuc3BlY10KCUNob29zZUZvbnQsIFJFU0VSVkVENSwgSW50ZXJuYWxFeHRyYWN0SWNvbjogTWFya2VkIGFzIHN0dWJzCglFeHRyYWN0QXNzb2NpYXRlZEljb24sIERvRW52aXJvbm1lbnRTdWJzdCwgRHVtcEljb246CgkJc3R1YiBpbXBsZW1lbnRhdGlvbnMgcHJvdmlkZWQgCgltYXJrZWQgc3RvcmFnZS5kbGwsc3RvcmVnZS5zeXMgZnVuY3Rpb25zIGFzIHN0dWJzCgoJKiBbaW5jbHVkZS9wZV9pbWFnZS5oXQoJQWRkZWQgc3RydWN0dXJlcyBXSU4zMl9idWlsdGluIGFuZCAgV0lOMzJfZnVuY3Rpb24KCgkqIFtpbmNsdWRlL3BlZXhlLmhdCglQRV9JbXBvcnRfRGlyZWN0b3J5OiByZW5hbWVkIHJlc2VydmVkIGZpZWxkcyB0byAKCQlUaW1lRGF0ZSwgRm9yd2FyZGVyLCBUaHVua19MaXN0CgoJKiBbaW5jbHVkZS93aW5lcnJvci5oXQoJTmV3IGZpbGUuCgoJKiBbbG9hZGVyL21haW4uY10KCWNhbGxlZCBSRUxBWTMyX0luaXQKCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCXhtbWFwOiBtYXAgQlNTIGFub255bW91cwoJZHVtcF9pbXBvcnRzOiByZW5hbWVkIHRvIGZpeHVwX2ltcG9ydHMsIGRvIHRoZSBmaXh1cCBvZiBpbXBvcnRlZAoJICAgICAgICAgICAgICBzeW1ib2xzCglQRV9Mb2FkSW1hZ2U6IHBhc3MgcmF3IGRhdGEgc2l6ZSB0byB4bW1hcAoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJRHVtcEljb246IG5ldyBmdW5jdGlvbgoKCSogW21pc2Mva2VybmVsMzIuY10KCU5ldyBmaWxlLgoKCSogW21pc2MvbWFpbi5jXQoJbWFrZSBzdGRvdXQgYW5kIHN0ZGVyciB1bmJ1ZmZlcmVkCgoJKiBbbWlzYy9zaGVsbC5jXQoJRG9FbnZpcm9ubWVudFN1YnN0OiBuZXcgZnVuY3Rpb24KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUZPTlRfTWF0Y2hGb250OiB0cnkgb2JsaXF1ZSBpZiB0aGVyZSBpcyBubyBpdGFsaWMKCgkqIFtyYy9JbWFrZWZpbGVdW3JjL3BhcnNlci5sXQoJeXl3cmFwOiBuZXcgZnVuY3Rpb24KCURvbid0IGxpbmsgd2l0aCBsaWJmbC5hIG9uIExpbnV4CgoJKiBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIGtleXdvcmRzIHN0ZGNhbGwsIHN1YnN5c3RlbSwgYmFzZQoJR2VuZXJhdGVGb3JXaW4zMjogbmV3IGZ1bmN0aW9uCglCdWlsZFNwZWNGaWxlczogY2FsbCBHZW5lcmF0ZUZvcldpbjMyIGlmIHN1YnN5c3RlbSBpcyB3aW4zMgoKTW9uIE1heSAxNSAxMDozODoxNCAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CiAgICAgICAgCiAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveC5jXSBbY29udHJvbHMvY29tYm8uY10gW3dpbmRvd3MvZGVmd25kLmNdCglNaW5vciBmaXhlcy4KCQoJKiBbbWlzYy9tZXNzYWdlLmNdIFttaXNjL21haW4uY10gW3JjL3N5c3JlcyoucmNdIFtpbmNsdWRlL3RleHRzLmhdCglSZXdyb3RlIG1lc3NhZ2UgYm94IGhhbmRsaW5nLgoJCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJRGlhbG9ncyBzaG91bGQgYmUgaW52aXNpYmxlIHVudGlsIGFmdGVyIFdNX0lOSVRESUFMT0cgaXMgc2VlbnQuCglEb24ndCBzd2l0Y2ggdG8gaW52aXNpYmxlIGRpYWxvZyBpdGVtcyBvbiBhIFRBQiBrZXlwcmVzcy4KCQoJKiBbd2luZG93cy9tZGkuY10KCVNlbmQgV01fTkNQQUlOVCBtZXNzYWdlIGluIE1ESVJlc3RvcmVDaGlsZCgpLgoJCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglGaXhlZCB0eXBvICgmJiAtPiAmKS4KCQoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFtpZjE2MzIvdXNlci5zcGVjXQoJSW1wbGVtZW50ZWQgUG9zdEFwcE1lc3NhZ2UoKS4KCQoJKiBbd2luZG93cy9ldmVudC5jXQoJU2V0Q2FwdHVyZSgwKSBzaG91bGQgYWN0IGxpa2UgUmVsZWFzZUNhcHR1cmUoKS4KClR1ZSBNYXkgIDkgMTE6NTU6NTIgMTk5NSAgICAgRWRkaWUgQy4gRG9zdCAgICAgICAgICAgICAoZWNkQGRyZXNzbGVyLmRlKQoKCSogW0ltYWtlZmlsZV0KCUNoYW5nZWQgQ0RFQlVHRkxBR1MgZm9yIHN5c3RlbXMgcnVubmluZyBfX0VMRl9fICh0ZW1wb3JhcmlseSkKCUFkZGVkIEFTRkxBR1MgdG8gZXhwb3J0ZWQgdmFyaWFibGVzLgoKCSogW2RlYnVnZ2VyL3JlYWRsaW5lL0ltYWtlZmlsZV0KCU1vdmVkIGRlZmluZXMgZm9yIGxpYnJlYWRsaW5lIGZyb20gREVGSU5FUyB0byBFWFRSQV9ERUZJTkVTCgoJKiBbbWVtb3J5L2xvY2FsLmNdIFttaXNjZW11L2ludDIxLmNdCglBZGRlZCBzb21lIG1vcmUgZGVidWdnaW5nIG91dHB1dHMuCgpNb24gTWF5ICA4IDAwOjU1OjI3IE1FVCBEU1QgMTk5NQkgIERhZyBBc2hlaW0gKGRhc2hAaWZpLnVpby5ubykKCgkqIFttaXNjL21lc3NhZ2UuY10KCUZpeGVkIGEgIkZJWE1FIiBjb25jZXJuaW5nIG5vcndlZ2lhbiB0cmFuc2xhdGlvbi4KClN1biBNYXkgIDcgMjM6MjU6MjMgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgogICAgICAgIAoJKiBbKi8qXQogICAgICAgIFJlbW92ZWQgd2FybmluZ3MgaW4gYSBjb3VwbGUgb2YgZmlsZXMgYW5kIGRlbGV0ZWQgc29tZSBvYnNvbGV0ZSBjb2RlLgoKICAgICAgICAqIFtjb250cm9scy9saXN0Ym94LmNdCiAgICAgICAgQ2xlYW51cCwgc3BlZWQgaW1wcm92ZW1lbnRzICYgbG90cyBvZiBidWcgZml4ZXMuCgogICAgICAgICogW2NvbnRyb2xzL2NvbWJvLmNdCglNb3N0bHkgcmV3cml0dGVuLiBUaGlzIGlzIHN0aWxsIHZlcnkgYnVnZ3ksIGJ1dCBub3QgcXVpdGUgYXMgYmFkIGFzIAoJYmVmb3JlLgoKICAgICAgICAqIFtpbmNsdWRlL2NvbW1kbGcuaF0gW21pc2MvY29tbWRsZy5jXQogICAgICAgIFJlbW92ZWQgdGhlIG5lZWQgZm9yIHN5c3Jlcy5kbGwuIFNtYWxsIGJ1ZyBmaXhlcy4KCQogICAgICAgICogW29iamVjdHMvb2VtYml0bWFwLmNdIFtpbmNsdWRlL2JpdG1hcHMvPG1hbnk+XSBbaW5jbHVkZS93aW5kb3dzLmhdCiAgICAgICAgICBbbG9hZGVyL2xpYnJhcnkuY10gW2xvYWRlci9tYWluLmNdIFtyYy9zeXNyZXMqLnJjXQogICAgICAgIFJlbW92ZWQgc3lzcmVzLmRsbCBhbmQgcmVwbGFjZWQgdGhlIHJlbWFpbmluZyBiaXRtYXBzL2ljb25zIHdpdGgKICAgICAgICBYUE0gZXF1aXZhbGVudHMuCgogICAgICAgICogW21pc2MvbWVzc2FnZS5jXSBbd2luZG93cy9ub25jbGllbnQuY10gW21pc2MvbWFpbi5jXQogICAgICAgICAgW2lmMTYzMi93aW5wcm9jcy5zcGVjXQogICAgICAgICJBYm91dCBXaW5lLi4uIiBub3cgYnJpbmdzIHVwIGEgc3RhbmRhcmQgU2hlbGxBYm91dCgpIHdpbmRvdyB3aXRoCiAgICAgICAgdGhlIFdpbmUgaWNvbiBhbmQgdGhlIGxpc3Qgb2YgY29udHJpYnV0b3JzLgoJCgkqIFttaXNjL3NoZWxsLmNdCglGaXhlZCBTaGVsbEFib3V0KCkvQWJvdXREaWFsb2dQcm9jKCkgdG8gc2hvdyB0aGUgcmlnaHQgaWNvbi4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglTbWFsbCBoYWNrIGZvciBub24tYWxwaGFudW1lcmljIGtleXM6IERvbnQndCBzZW5kIHRoZSBhc2NpaSB2YWx1ZSBpbgoJdGhlIFdNX0tFWURPV04gbWVzc2FnZSwgYnV0IHNvbWUgdW51c2VkIGNvZGUgaW5zdGVhZC4gU2hvdWxkIGJlIGRvbmUKCXByb3Blcmx5IGJ5IHNlbmRpbmcgZGlmZmVyZW50IGNvZGVzIGZvciBlYWNoIGtleS4gVGhlIGVkaXQgY29udHJvbAoJdXNlZCB0byBnZXQgYSBWS19ERUxFVEUgbWVzc2FnZSBlYWNoIHRpbWUgdGhlIHVzZXIgdHlwZWQgJy4nLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCVJlbW92ZWQgYSBjaGVjayBmb3IgQ1NfR0xPQkFMQ0xBU1MgaW4gQ0xBU1NfRmluZENsYXNzQnlOYW1lKCkuCglUaGlzIHVzZWQgdG8gYmUgbm8gcHJvYmxlbSwgYnV0IGJyZWFrcyBSZXNvdXJjZSBXb3Jrc2hvcCBpbiA5NTA0MDMuCgkKCSogW29iamVjdHMvZGliLmNdCglOZXcgZGlhZ25vc3RpYyBmb3IgYSBidWcgSSd2ZSBiZWVuIGVuY291bnRlcmluZy4gSWYgaXQgc2hvd3MgdXAsCglwbGVhc2UgcmVwb3J0IGl0LgoKU3VuIE1heSAgNyAyMzoxMToxOCBFRFQgMTk5NSAgV2lsbGlhbSBNYWdybyAod21hZ3JvQHRjLmNvcm5lbGwuZWR1KQoKCSogW29iamVjdHMvY29sb3IuY10KCUhhbmRsZSBzaXR1YXRpb24gd2hlbiAnZGMnIGV4aXN0cywgYnV0IHBhbGV0dGUgbWFwcGluZwoJZG9lcyBub3QuICAoRml4ZXMga2lkcGl4MiBkZW1vLikKClN1biBNYXkgIDcgMDM6MzI6MDAgMTk5NSAgQ2hhcmxlcyBNLiBIYW5udW0gIChteWNyb2Z0QG1pdC5lZHUpCgoJKiBbbG9hZGVyL2xkdC5jXQoJTERUX1ByaW50OiBPbmx5IHNob3cgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRoYXQgdGhlIGtlcm5lbAoJcmV0dXJuZWQuIE1ha2UgdGhpcyB3b3JrIGZvciBOZXRCU0QuCgpGcmkgTWF5ICA1IDAyOjUzOjI2IDE5OTUgIENoYXJsZXMgTS4gSGFubnVtICAobXljcm9mdEBtaXQuZWR1KQoKCSogW2RlYnVnZ2VyL2RiZy55XSBbaW5jbHVkZS93aW5lLmhdIFtsb2FkZXIvc2lnbmFsLmNdCglNb2RpZnkgY3MgYW5kIGRzIHNlbGVjdG9yIHZhbHVlcyBmb3IgTmV0QlNELWN1cnJlbnQuCgoJKiBbZGVidWdnZXIvZGVidWcubF0KCSRzcCwgJGVzcDogVXNlIFJOX0VTUF9BVF9TSUdOQUwgcmF0aGVyIHRoYW4gUk5fRVNQLgoKCSogW2RlYnVnZ2VyL3JlZ3Bvcy5oXQoJTW9kaWZ5IHNpZ2NvbnRleHQgZm9ybWF0IGZvciBOZXRCU0QtY3VycmVudC4KCVNDX0VTUDogVXNlIFJOX0VTUF9BVF9TSUdOQUwgcmF0aGVyIHRoYW4gUk5fRVNQLgoKCSogW2luY2x1ZGUvbGR0LmhdCglTRUxFQ1RPUl9UT19FTlRSWTogRXhwbGljaXRseSBjbGVhciB0aGUgdG9wIGhhbGYgb2YgdGhlIHNlbGVjdG9yCgl2YWx1ZSwgc2luY2Ugb25seSAxNiBiaXRzIG9mIGl0IG1heSBoYXZlIGJlZW4gc2F2ZWQuCgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCVNldCBzdHJ1Y3R1cmUgcGFja2luZyB3aXRoIGAjcHJhZ21hIHBhY2snIHRvIGFjY29tb2RhdGUKCW90aGVyL29sZGVyIGNvbXBpbGVycy4KClR1ZSBNYXkgIDIgMTg6MTU6MDEgMTk5NSBQYWFsIEJleWVyIChiZXllckBpZHQudW5pdC5ubykKCQoJKiBbbWlzYy9jb21tZGxnLmNdCglGaXhlZCBwYXRoLW5hbWVzIHNvIHdoZW4gY2hhbmdpbmcgZGlyZWN0b3J5IHRoZSBsaXN0Ym94ZXMKCWNoYW5nZXMgdG9vLgoJCgkqIFtkZWJ1Z2dlci9kYmcueSBkZWJ1Z2dlci9kZWJ1Zy5sIHdpbmUuaW5pXQoJQWRkZWQgU3ltYm9sVGFibGVGaWxlIHRvIHdpbmUuaW5pIHNvIHN5bWJvbHMgY2FuIGJlIHJlYWQKCXdpdGhvdXQgc3RhbmRpbmcgaW4gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHdpbmUuc3ltLgoJQWRkZWQgdGhlIHBvc3NpYmlsaXR5IHRvIHNwZWNpZnkgZnVsbCBuYW1lIG9mIHdpbmUuc3ltIGZyb20KCXRoZSBkZWJ1Z2dlciBwcm9tcHQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBBcHIgMjkgMjA6NDI6MDEgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJRml4ZWQgcGFpbnRpbmcgb2YgU1NfKkZSQU1FIGNvbnRyb2xzLgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJUGFzcyB0aGUgd2luZG93IGluc3RhbmNlIGFzIERTIHRvIHRoZSAxNi1iaXQgd2luZG93IHByb2NlZHVyZS4KCVJld3JvdGUgQ2F0Y2goKSBhbmQgVGhyb3coKSB0byBtYWtlIHRoZW0gd29yayB3aXRoIG11bHRpcGxlIHRhc2tzLgoKCSogW2xvYWRlci9tYWluLmNdCglOZXcgZnVuY3Rpb24gTUFJTl9Jbml0KCkgdG8gcGVyZm9ybSBpbml0aWFsaXphdGlvbnMgYmVmb3JlIHRoZQoJZmlyc3QgdGFzayBpcyBzdGFydGVkIGluc3RlYWQgb2YgZG9pbmcgdGhlbSBpbiBJbml0QXBwKCkuCglUZW1wb3JhcnkgaGFjayB0byBjb21tYW5kLWxpbmUgcGFyc2luZyB0byBsb2FkIG9uZSBwcm9ncmFtIHBlcgoJY29tbWFuZC1saW5lIGFyZ3VtZW50LCB0byBtYWtlIHRlc3RpbmcgdGFzay1zd2l0Y2hpbmcgZWFzaWVyLgoKCSogW2xvYWRlci8qLmNdCglSZWltcGxlbWVudGVkIG1vZHVsZXMgdG8gdXNlIGEgV2luZG93cy1jb21wYXRpYmxlIGxheW91dCBhbmQgdG8KCWFsbG93IG11bHRpcGxlIHRhc2tzIGFuZCBtdWx0aXBsZSBtb2R1bGUgaW5zdGFuY2VzLiBOb3QgcmVhbGx5CglmaW5pc2hlZCB5ZXQuCgoJKiBbbG9hZGVyL3Rhc2suY10gW21pc2MvZXhlYy5jXQoJUmVpbXBsZW1lbnRlZCB0YXNrcyB0byB1c2UgYSBjb21tb24gYWRkcmVzcyBzcGFjZSwgYW5kIGltcGxlbWVudGVkCglwcmVsaW1pbmFyeSB0YXNrLXN3aXRjaGluZyBjYXBhYmlsaXRpZXMuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJRml4ZWQgYnVnIGluIEdsb2JhbE5leHQoKS4KCgkqIFttaXNjL21haW4uY10KCVVwZGF0ZWQgdGhlIGxpc3Qgb2YgY29udHJpYnV0b3JzLiBMZXQgbWUga25vdyBpZiBJIGZvcmdvdCBzb21lb25lLgoKCSogW21pc2NlbXUvaW50MjEuY10KCVVzZSBvbmUgRFRBIHBlciB0YXNrIGluc3RlYWQgb2YgYSBnbG9iYWwgb25lLgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglGaXhlZCBidWcgaW4gQml0Qmx0KCkgdGhhdCBjb3VsZCBjYXVzZSBCYWRNYXRjaCBlcnJvcnMuCgoJKiBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIG5ldyBmdW5jdGlvbiB0eXBlICdzdHViJywgdGhhdCBtYWtlcyBwb3NzaWJsZSB0byBleHBvcnQgYW4KCXVuaW1wbGVtZW50ZWQgZnVuY3Rpb24gYnkgbmFtZSBhcyB3ZWxsIGFzIGJ5IG9yZGluYWwuIFRoaXMgd2lsbAoJYXZvaWQgbG9hZGluZyBlcnJvcnMgZm9yIHVuaW1wbGVtZW50ZWQgZnVuY3Rpb25zLgoJR2VuZXJhdGUgYW4gaW4tbWVtb3J5IG1vZHVsZSBsYXlvdXQgZm9yIGJ1aWx0LWluIERMTHMgc28gdGhhdCB0aGUKCXNhbWUgY29kZSBjYW4gYmUgdXNlZCBmb3IgYnVpbHQtaW4gYW5kIGxvYWRlZCBtb2R1bGVzLgoJQ2hhbmdlZCByZWxheSBjb2RlIHRvIG1ha2UgaXQgdW5uZWNlc3NhcnkgdG8gc2F2ZSB0aGUgdmFsdWUgb2YgdGhlCglCUCByZWdpc3Rlci4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUltcGxlbWVudGVkIG11bHRpcGxlIG1lc3NhZ2UgcXVldWVzIGFuZCBwcmVsaW1pbmFyeSB0YXNrLXN3aXRjaGluZwoJY2FwYWJpbGl0aWVzLiBJbnRlci10YXNrIFNlbmRNZXNzYWdlKCkgY2FsbHMgYXJlIG5vdCBpbXBsZW1lbnRlZAoJeWV0IGFuZCB3aWxsIHByb2JhYmx5IGNhdXNlIGNyYXNoZXMgaWYgdXNlZC4KCgkqIFt3aW5kb3dzL3Byb3BlcnR5LmNdCglSZWltcGxlbWVudGVkIHByb3BlcnRpZXMgYW5kIGFsbG9jYXRlIHRoZW0gb24gdGhlIFVTRVIgaGVhcC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRml4ZWQgYnVnIGluIFNldFdpbmRvd1dvcmQoKS4KCVJlaW1wbGVtZW50ZWQgRW51bVdpbmRvd3MoKSBhbmQgRW51bVRhc2tXaW5kb3dzKCkuCgpUdWUgQXByIDE4IDA5OjQ4OjM4IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KICAgICAgICAKCSogW21pc2MvbWFpbi5jXQoJR2V0U3lzdGVtUGFyYW1ldGVyc0luZm8oKTogQWRkaXRpb25hbCBhY3Rpb24gU1BJX0dFVElDT05USVRMRUZPTlQuCgkKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJUmVtb3ZlZCB0aGUgY2hlY2sgZm9yIE5FX1NFR0ZMQUdTX0VYRUNVVEVPTkxZLCBzaW5jZSBpdCBicm9rZQoJY29udHJvbC5leGUuCglGaXhlZCBpY29uIGxvYWRpbmcuCgkKCSogW29iamVjdHMvZm9udC5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglGaXhlZCBhIGJ1ZyBpbiBJbml0Rm9udHNMaXN0KCkgYW5kIHdvcmtlZCBvbiB0aGUgRW51bUZvbnRzKCkKCWZ1bmN0aW9ucyB0byBtYWtlIHRoZW0gY29tcHJlaGVuc2libGUuCgogICAgICAgICogW2NvbnRyb2xzL2J1dHRvbi5jXQoJRml4ZWQgbXkgcHJldmlvdXMgcGF0Y2ggdG8gaGFuZGxlIExCVVRUT05VUCBtZXNzYWdlcy4KCkZyaSBBcHIgMTQgMTE6NDE6MjggMTk5NSAgQ2FtZXJvbiBIZWlkZSAgKGhlaWRlQGVlLnVhbGJlcnRhLmNhKQoKICAgICAgICAqIFttaXNjL25ldHdvcmsuYywgbWlzYy9kb3NfZnMuY10KICAgICAgICBJbXBsZW1lbnRlZCBXTmV0R2V0Q29ubmVjdGlvbi4gIEFsbCB0aGF0IGlzIGN1cnJlbnRseQogICAgICAgIHN1cHBvcnRlZCBhcmUgZHJpdmVzLCBmb3Igd2hpY2ggdGhlIHJlbW90ZSBuYW1lIGlzIHNpbXBseQogICAgICAgIHRoZSByZWRpcmVjdGVkIFVOSVggZGlyZWN0b3J5IG5hbWUuCgogICAgICAgICogW21pc2NlbXUvaW50Mj8uY10KICAgICAgICBNb3JlIGRyaXZlIG51bWJlciB2YWxpZGl0eSBjaGVja2luZy4KCldlZCBBcHIgMTIgMTE6Mjg6MzcgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgogICAgICAgIAogICAgICAgICogW2NvbnRyb2xzL2xpc3Rib3guY10KCU9vcHMsIG15IHByZXZpb3VzIGNoYW5nZSB0byBMaXN0Qm94RGlyZWN0b3J5IGJyb2tlIHRoZSBCb3JsYW5kCglmaWxlIG9wZW4gZGlhbG9nLiBGaXhlZC4KCk1vbiBBcHIgMTAgMjM6MTc6MTIgMTk5NSAgTWFydGluIHZvbiBMb2V3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL29sZTJubHMuc3BlY10gW21pc2Mvb2xlMm5scy5jXSBbbWlzYy9JbWFrZWZpbGVdCglOZXcgZmlsZSBvbGUybmxzLmMuIEFkZGVkIHN0dWJzIGZvciBHZXRVc2VyRGVmYXVsdExDSUQsIAoJR2V0U3lzdGVtRGVmYXVsdExDSUQsIEdldFVzZXJEZWZhdWx0TGFuZ0lELCBHZXRTeXN0ZW1EZWZhdWx0TGFuZ0lELgoKTW9uIEFwciAxMCAxMDowNToxOCAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CiAgICAgICAgCgkqIFttZW1vcnkvZ2xvYmFsLmNdIFttZW1vcnkvbG9jYWwuY10gW2luY2x1ZGUvd2luZG93cy5oXQoJR2xvYmFsUmVBbGxvYygpOiBJZiBHTUVNX01PRElGWSBpcyBzZXQsIGRvbid0IHJlc2l6ZSB0aGUgYmxvY2suCglMb2NhbFJlQWxsb2MoKTogU2FtZSBmb3IgTE1FTV9NT0RJRlkuCgkKICAgICAgICAqIFtjb250cm9scy9saXN0Ym94LmNdCglGaXhlZCBhIGJ1ZyBpbiBMaXN0Qm94RGlyZWN0b3J5IHRoYXQgcHJldmVudGVkIGNvbW1kbGcgZnJvbSB3b3JraW5nLgoJQ2hlY2sgZm9yIGVycm9ycyBpbiBzb21lIG1vcmUgcGxhY2VzLgoKICAgICAgICAqIFtpZjE2MzIvZ2RpLnNwZWNdIFtpZjE2MzIvdXNlci5zcGVjXQoJMTYgYml0IGNhbGxiYWNrIGZ1bmN0aW9ucyBzaG91bGQgYmUgcGFzc2VkIGFzIHNlZ3B0cnMuCgkKCSogW2luY2x1ZGUvZGxscy5oXSBbbG9hZGVyL25lX2ltYWdlLmNdIFtsb2FkZXIvc2VsZWN0b3IuY10KCVtsb2FkZXIvbGlicmFyeS5jXQoJUHJldmVudCBhIERMTCBmcm9tIGJlaW5nIGluaXRpYWxpemVkIHR3aWNlIChCb3JsYW5kcyBSZXNvdXJjZQoJV29ya3Nob3AgdXNlZCB0byBkbyB0aGlzKS4KCVByb3ZpZGUgYW4gYWRkaXRpb25hbCBmbGFnIGZvciBlYWNoIHdfZmlsZSB0aGF0IGluZGljYXRlcyB3aGV0aGVyCglpdCdzIGFuIEVYRSBvciBhIERMTCwgZm9yIGNvbWJpbmF0aW9ucyBsaWtlIHBicnVzaC5leGUvLmRsbC4KCQoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglIYW5kbGUgTEJVVFRPTlVQIG1lc3NhZ2VzIGV2ZW4gaWYgdGhlIGJ1dHRvbiBubyBsb25nZXIgaGFzIHRoZQoJY2FwdHVyZSAoZm9yIFdpbkhlbHApLgoJCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglGQVJQUk9DIGlzIG5vdyBhIHNlZ3B0ciBmb3IgdGhlIGVtdWxhdG9yIGFuZCBhIGZ1bmN0aW9uCglwb2ludGVyIGZvciB0aGUgbGlicmFyeS4KCQoJKiBbbWlzYy9jb21tZGxnLmNdIFttaXNjL2NvbW1kbGcuaF0KCUNsZWFuZWQgdGhlIGZpbGUgZGlhbG9ncyB1cCBhIGxpdHRsZS4gVGhleSBub3cgd29yayByZWFzb25hYmx5IHdlbGwsCglhbHRob3VnaCB0aGVyZSBhcmUgc3RpbGwgc29tZSBwcm9ibGVtcyAoZS5nLiBmaWxlcyBhcmUgaW5pdGlhbGx5CiAgICAgICAgaW52aXNpYmxlKS4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdIFtpZjE2MzIvdXNlci5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdCglHZXRDbGFzc0luZm8oKSBtdXN0IHRha2UgYSBzZWdwdHIsIGFzIGl0IGNoZWNrcyB3aGV0aGVyIHRoZQoJaGlnaHdvcmQgaXMgemVyby4KCUdldENsYXNzTmFtZSgpIGNhbGxlZCB0aGUgd3JvbmcgYXRvbSBmdW5jdGlvbi4gTm8gc3VycHJpc2UgaXQgZGlkbid0CiAgICAgICAgZmluZCBhbnl0aGluZy4KCgkqIFttaXNjL2xzdHIuY10KCUFuc2lUb09lbSgpIGFuZCBPZW1Ub0Fuc2koKSBkaWRuJ3QgdGVybWluYXRlIHRoZSBzdHJpbmdzLiBGaXhlZC4KICAgICAgICBSZW1vdmVkIHNvbWUgd2FybmluZ3MuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpZjE2MzIvZGRlbWwuc3BlY10gW2luY2x1ZGUvZGxscy5oXQoJTmV3IHNwZWMgZmlsZSBmb3IgdGhlIDMuMSBEREVNTCBEREwuIAoKCSogW2NvbnRyb2xzL21lbnUuY10KCVNtYWxsIGZpeCB0byBDaGFuZ2VNZW51IC0gbWFzayBvdXQgdGhlIG9ic29sZXRlIGZsYWdzCgkoTUZfQVBQRU5EID09IE1GX09XTkVSRFJBVywgdGhpcyBsZWQgdG8gcHJvYmxlbXMpLiBJdCBhbHNvIGhhZAoJcHJvYmxlbXMgd2l0aCB0aGUgTUZfQllQT1NJVElPTiBmbGFnLgoKICAgICAgICAqIFt3aW5kb3dzL21lc3NhZ2UuY10KICAgICAgICBTZW5kTWVzc2FnZSgpOiBjYWxsIHRoZSBXSF9DQUxMV05EUFJPQyBob29rIGZ1bmN0aW9uLiBUaGlzIGlzIHJhdGhlcgogICAgICAgIHVnbHksIEknbSBhZnJhaWQuIFdpbmRvd3MgcHJvYmFibHkgcGFzc2VzIGEgcG9pbnRlciB0byB0aGUgMTYgYml0CiAgICAgICAgc3RhY2sgZm9yIHNwZWVkIHJlYXNvbnMuCgkKICAgICAgICAqIFt3aW5kb3dzL2hvb2suY10gW2luY2x1ZGUvd2luZG93cy5oXQogICAgICAgIFNldC9Ib29rV2luZG93c0hvb2soKSBzaG91bGRuJ3QganVzdCBjYWxsIHRoZWlyICpFeCBjb3VudGVycGFydHMsIGFzCiAgICAgICAgdGhleSBoYXZlIHNsaWdodGx5IGRpZmZlcmVudCBzZW1hbnRpY3MuCiAgICAgICAgTVMgSGVhcnRzIG5vdyB3b3JrcyBzb21ld2hhdCwgaWYgeW91IGRpc2FibGUgdGhlIG5ldyBidWlsdGluIERERU1MLgogICAgICAgIFRoZSBncmFwaGljcyBhcmUgY29tcGxldGVseSBtZXNzZWQgdXAsIHRob3VnaC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEFwciAgMiAxODozMToxMiAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHUpCgoJKiBbQ29uZmlndXJlXSBbaWYxNjMyL0ltYWtlZmlsZV0KCVJlbW92ZWQgbmV3IGJ1aWxkIGFuZCBzaG9ydCBuYW1lcyBvcHRpb25zLgoKCSogW2lmMTYzMi8qLmNdIFt0b29scy9idWlsZC5jXQoJSW1wbGVtZW50ZWQgY29tcGlsZWQgY2FsbC1iYWNrIGZ1bmN0aW9ucyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlOwoJYWxsIHRoZSByZWxheSBjb2RlIGlzIG5vdyBkb25lIGluIGFzc2VtYmx5IGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZQoJYnVpbGQgcHJvZ3JhbS4KCVJlbGF5IGNvZGUgaXMgbm8gbG9uZ2VyIGRlcGVuZGVudCBvbiBiZWluZyBsb2FkZWQgYmVsb3cgNjRLLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJRml4ZWQgbWVtb3J5IGxlYWsgaW4gTG9hZFN0cmluZygpLiBBIGZpeCB3aWxsIGFsc28gYmUgbmVlZGVkIGZvcgoJb3RoZXIgcmVzb3VyY2VzLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUltcGxlbWVudGVkIGdsb2JhbCBoZWFwIGFyZW5hcywgc28gd2UgY2FuIHN0b3JlIGluZm9ybWF0aW9ucyBhYm91dAoJZ2xvYmFsIGJsb2NrcywgbGlrZSBsb2NrIGNvdW50cyBvciBvd25lciBoYW5kbGUuCglJbXBsZW1lbnRlZCBGYXJHZXRPd25lcigpIGFuZCBGYXJTZXRPd25lcigpLgoJSW1wbGVtZW50ZWQgZ2xvYmFsIGhlYXAgVE9PTEhFTFAgZnVuY3Rpb25zLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJQnVnIGZpeDogaXQgd2FzIG5vdCBwb3NzaWJsZSB0byByZS11c2UgYSBmcmVlIHNlbGVjdG9yLgoKU3VuIEFwciAyIDAxOjM0OjUyIDE5OTUgQ29uc3RhbnRpbmUgU2FwdW50emFraXMgIChjc2FwdW50ekBtaXQuZWR1KQoKCSogIFtjb250cm9scy9saXN0Ym94LmNdCglNYWpvciB3b3JrIG9uIGxpc3Rib3ggY29kZQogICAgICAgICAtIE1hbnkgYnVncyBmaXhlZCAoc3RpbGwgbWFueSBidWdzKQogICAgICAgICAtIE1vcmUgbWVzc2FnZXMgc3VwcG9ydGVkCiAgICAgICAgIC0gQ29kZSBzaW1wbGlmaWVkCgpGcmkgTWFyIDMxIDAzOjI3OjE2IEVTVCAxOTk1IFdpbGxpYW0gTWFncm8gKHdtYWdyb0B0Yy5jb3JuZWxsLmVkdSkKCgkqIFtjb250cm9scy9lZGl0LmNdCglMb3RzIG9mIGJ1ZyBmaXhlcyByZWxhdGVkIHRvIGRpYXBwZWFyaW5nIHRleHQsIGxvc3QgY2FyZXRzLAoJaGlnaGxpZ2h0aW5nLCBzZWdtZW50YXRpb24gZmF1bHRzLCBvY2N1cmFuY2Ugb2YgcmFuZG9tCgljaGFyYWN0ZXJzLCBpbnNlcnRpb24gb2YgY2hhcmFjdGVycyBvdmVyIHNlbGVjdGlvbiwgbWlzcGxhY2VkCgljYXJldCBsb2NhdGlvbiwgZGlzcGxheSBjb3JydXB0aW9uLCBlbmQgb2YgbGluZSBiZWhhdmlvciwgZXRjLgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCUVESVQgY2xhc3MgZG9lc24ndCB3YW50IHRvIHVzZSBDU19QQVJFTlREQyBmbGFnLgoKVGh1IE1hciAzMCAyMDo1ODoyNSAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CiAgICAgICAgCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCSAgRml4dXBGdW5jdGlvblByb2xvZ3MoKSBzaG91bGQgYWxzbyBoYW5kbGUgbXVsdGlwbGUgZGF0YSBtb2R1bGVzLgoJICAodGhpcyBidWcgb25seSBiZWNhbWUgdmlzaWJsZSBiZWNhdXNlIE1ha2VQcm9jSW5zdGFuY2UoKSB3YXMgZml4ZWQKCSAgaW4gOTUwMzE5KQoJCgkqIFttaXNjL2Rvc2ZzLmNdCgkgIFNpbXBsaWZpZWQgRE9TX1NpbXBsaWZ5UGF0aC4KCSAgU21hbGwgZml4IHRvIERPU19vcGVuZGlyIHRvIHJldXNlIGFuIGVudHJ5IGlmIGFuIG9wZW4gZGlyZWN0b3J5CgkgIGlzIG9wZW5lZCBhZ2FpbiwgdG8gcHJldmVudCAidG9vIG1hbnkgb3BlbiBkaXJlY3RvcmllcyIgbWVzc2FnZXMuCgpUaHUgTWFyIDMwIDEyOjA1OjA1IDE5OTUgTWFydGluIHZvbiBMb2V3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL2NvbXBvYmouc3BlY11baW5jbHVkZS9jb21wb2JqLmhdW21pc2MvY29tcG9iai5jXQoJQ29EaXNjb25uZWN0T2JqZWN0OiBuZXcgc3R1YiBmdW5jdGlvbgoKCSogW2luY2x1ZGUvbXNkb3MuaF0KCWZpeCBET1NWRVJTSU9OCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglORV9GaXh1cFNlZ21lbnQ6IEJlIG1vcmUgZ2VuZXJvdXMgb24gYWRkaXRpdmUgZml4dXBzCgoJKiBbaWYxNjMyL3VzZXIuc3BlY11bbWlzYy9uZXR3b3JrLmNdCglBZGQgbW9yZSBXTmV0KiBzdHVicwoKV2VkIE1hciAyOSAxMTo0NzoyMiAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgogICAgICAgICogW2NvbnRyb2xzL2xpc3Rib3guY10KCSAgRGxnRGlyTGlzdCgpOiBzZW5kIHNlZ3B0ciBpbnN0ZWFkIG9mIGxpbmVhciBwb2ludGVyIAoJICBpbiBtZXNzYWdlIHRvIHN0YXRpYyBjb250cm9sCgkqIFtjb250cm9scy9tZW51LmNdCgkgIFRyaWVkIHRvIGltcGxlbWVudCBvd25lcmRyYXduIG1lbnVpdGVtcy4gRG9lc24ndCB3b3JrLgoJKiBbaWYxNjMyL2dkaS5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdIFtvYmplY3RzL2ZvbnQuY10KCSAgUHJvdmlkZSBhIHN0dWIgZm9yIEdldFJhc3Rlcml6ZXJDYXBzKCkKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJICBQYXNzIGVuZCBhZGRyZXNzIGluc3RlYWQgb2YgbGVuZ3RoIHRvIExvY2FsSW5pdCgpIGluIAoJICBDcmVhdGVTZWxlY3RvcnMoKQoJKiBbbWVtb3J5L2xvY2FsLmNdCgkgIExvY2FsSW5pdCgpOiBJZiB0aGVyZSdzIGFscmVhZHkgYSBsb2NhbCBoZWFwIGluIHRoZSBzZWdtZW50LCBkbwoJICBub3RoaW5nIGFuZCByZXR1cm4gVFJVRQoJKiBbb2JqZWN0cy9saW5lZGRhLmNdCgkgIFJlcGxhY2VkIGJ1Z2d5IExpbmVEREEoKSB3aXRoIGEgQnJlc2VuaGFtIGFsZ29yaXRobS4gU2hvdWxkIHdvcmsKCSAgbm93LgoJKiBbd2luZG93cy9jdXJzb3IuY10KCSAgTG9hZEN1cnNvcigpL0NyZWF0ZUN1cnNvcigpOiBDbGVhbmVkIHVwIHRoZSBtZXNzLiBOZWVkcyBzb21lCgkgIG1vcmUgd29yayBzdGlsbC4KClR1ZSBNYXIgMjEgMTc6NTQ6NDMgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKICAgICAgICAqIFtpZjE2MzIvcmVsYXkuY10gW2lmMTYzMi9jYWxsYmFjay5jXSBbaW5jbHVkZS9kbGxzLmhdCgkgIFtpZjE2MzIvd2lucHJvY3Muc3BlY10gW2lmMTYzMi93aW5wcm9jcy5jXSBbaW5jbHVkZS93aW5wcm9jcy5oXQoJICBbY29udHJvbHMvd2lkZ2V0cy5jXSBbbWlzYy9zaGVsbC5jXSBbbWlzYy9jb21tZGxnLmNdCgkgIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbbWlzYy9tZXNzYWdlLmNdCgkgIEFkZGVkIGEgbmV3IGJ1aWx0aW4gRExMIHRoYXQgcHJvdmlkZXMgMTYgYml0IGVudHJ5IHBvaW50cyBmb3IgYWxsCgkgIHRoZSBEZWYqUHJvY3MgKERlZkRsZ1Byb2MsIEJ1dHRvblByb2MgZXRjLikuIE9XTCBwcm9ncmFtcyB3b3JrCgkgIGFnYWluLgoJKiBbbWlzYy9zaGVsbC5jXQoJICBSZWdPcGVuS2V5KCkvUmVnQ3JlYXRlS2V5KCkgYnVncyBmaXhlZC4KICAgICAgICAqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCSAgU2tpcHBpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgRExMIHdoZW4gQ1MgPT0gMCB3YXMgYnJva2VuLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTWFyIDE5IDE2OjMwOjIwIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKCgkqIFsqLypdCglJbXBsZW1lbnRlZCBhIG5ldyBtZW1vcnkgbWFwcGluZyBzY2hlbWUuIFRoZXJlJ3Mgbm8gbG9uZ2VyIGEKCW9uZS10by1vbmUgbWFwcGluZyBiZXR3ZWVuIDE2LWJpdCBhbmQgMzItYml0IHBvaW50ZXJzLiBQbGVhc2Ugc2VlCglmaWxlIERFVkVMT1BFUlMtSElOVFMgZm9yIHRlY2huaWNhbCBkZXRhaWxzLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJRml4ZWQgYnVnIHdoZW4gZHJhZ2dpbmcgbW91c2UgaW4gaG9yaXpvbnRhbCBzY3JvbGxiYXJzLgoKCSogW3Rvb2xzL2J1aWxkLmNdIFtpZjE2MzIvKi5zcGVjXQoJUmVtb3ZlZCBzdXBwb3J0IGZvciBDIGNhbGxiYWNrIGZ1bmN0aW9ucyBhbmQgZm9yIHJlLW9yZGVyaW5nCglvZiB0aGUgMzItYml0IGFyZ3VtZW50cywgYXMgdGhlc2Ugd2VyZSBuZXZlciB1c2VkLiBUaGlzIHNob3VsZAoJYWxsb3cgYSBtb3JlIGVmZmljaWVudCBjYWxsYmFjayBzY2hlbWUgdG8gYmUgaW1wbGVtZW50ZWQuCgoJKiBbaWYxNjMyL29sZWNsaS5zcGVjXQoJUmVkdWNlZCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdG8gbWFrZSB0aGUgMTYtYml0IGNvZGUgZml0IGluIDY0ay4KCVRoaXMgbGltaXRhdGlvbiB3aWxsIHNvb24gYmUgcmVtb3ZlZC4KCgkqIFtsb2FkZXIvbGR0LmNdCglSZXdyb3RlIExEVCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIGFuZCBpbXBsZW1lbnRlZCBMRFRfR2V0RW50cnkoKS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglSZXdyb3RlIEdsb2JhbCooKSByb3V0aW5lcyB0byB1c2UgdGhlIG5ldyBzZWxlY3RvciBhbGxvY2F0aW9uCgltZWNoYW5pc20uCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglSZXdyb3RlIGxvY2FsIGhlYXAgaGFuZGxpbmcgdG8gdXNlIGEgV2luZG93cy1jb21wYXRpYmxlIGxheW91dAoJKG5vdCByZWFsbHkgZmluaXNoZWQgeWV0KS4KCUltcGxlbWVudGVkIFRPT0xIRUxQIGhlYXAtd2Fsa2luZyByb3V0aW5lcy4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCUltcGxlbWVudGVkIExEVCBtYW5pcHVsYXRpb24gQVBJIGZ1bmN0aW9ucy4KClR1ZSBNYXIgMTQgMTk6NTA6MjggRVNUIDE5OTUgV2lsbGlhbSBNYWdybyAod21hZ3JvQHRjLmNvcm5lbGwuZWR1KQoKCSogW3dpbmRvd3MvZGVmZGxnLmNdCglGaXhlZCBwcm9ibGVtIHdoZXJlIGRpYWxvZ3MgY2xvc2VkIHVzaW5nIHRoZSBTeXN0ZW0gbWVudSAKICAgICAgICAoJ0Nsb3NlJyBpdGVtIG9yIGRvdWJsZSBjbGljayBvbiBjbG9zZSBib3gpIHdvdWxkCgloYW5nIFdpbmUuCgpTdW4gTWFyIDEyIDE0OjI4OjEzIDE5OTUgIE1pY2hhZWwgUGF0cmEgPG1pY2t5QG1hcmllLnBoeXNpay5UVS1CZXJsaW4uREU+CgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJUmVtb3ZlZCBtb3N0IG9mIHRoZSBzdGF0ZW1lbnRzIGZvciBzZW5kaW5nIGEgbm90aWZpY2F0aW9uIG1lc3NhZ2UKCUxpc3RCb3hEaXJlY3RvcnkoKSwgRGxnRGlyU2VsZWN0KCksIERsZ0Rpckxpc3QoKTogSW1wcm92ZWQgdGhlCgljb2RlOyBCb3JsYW5kJ3Mgc3RhbmRhcmQgZmlsZSBvcGVuIGRpYWxvZyB3aWxsIHdvcmsgbm93LgoJCgkqIFttaXNjL21haW4uY10sIFttaXNjL2ZpbGUuY10sIFttaXNjZW11L2ludDIxLmNdCglBZGRlZCBzdXBwb3J0IGZvciBuZXcgY29tbWFuZCBsaW5lIG9wdGlvbiAiLWFsbG93cmVhZG9ubHkiLiBJZiBzZXQKCWFuIGF0dGVtcHQgdG8gb3BlbiBhIHJlYWQgb25seSBmaWxlIGluIHdyaXRlIG1vZGUgd2lsbCBiZSBjb252ZXJ0ZWQgCgl0byBvcGVuaW5nIGl0IHJlYWQgb25seSAobWFueSBwcm9ncmFtcyB0cnkgdG8gb3BlbiBhbGwgZmlsZXMgaW4gCglyZWFkL3dyaXRlIG1vZGUgZXZlbiBpZiB0aGV5IG9ubHkgaW50ZW5kIHRvIHJlYWQgaXQgLSB0aGlzIG1pZ2h0IAoJY2F1c2UgYSBmZXcgdW5kZXIgcHJvYmxlbXMgdW5kZXIgYW4gdW5peC1saWtlIGVudmlyb25tZW50IHdoZXJlIG1vc3QgCglmaWxlcyBhcmUgcmVhZCBvbmx5IGZvciBhICJub3JtYWwiIHVzZXIpCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglHZXRNZW1vcnlSZWZlcmVuY2UoKTogQWRkZWQgc3VwcG9ydCBmb3IgX19BSEluY3IgYW5kIF9fQUhTaGlmdAoKCSogW21pc2MvZG9zX2ZzLmNdCglET1NfU2ltcGxpZnlQYXRoKCk6IFRoaXMgcm91dGluZSBzaW1wbGlmaWVzIHBhdGggbmFtZXMgKCBlLmcuLCBpdAoJd2lsbCBjaGFuZ2UgIi91c3IvLy9sb2NhbC9iaW4vLi4vbGliLy9hIiB0byAiL3Vzci9sb2NhbC9saWIvYSIgKQoJbWF0Y2goKTogcmV3cml0dGVuCgkKCSogW29iamVjdHMvdGV4dC5jXQoJVEVYVF9OZXh0TGluZSgpOiBSZW1vdmVkIGEgYnVnIGluIHRoZSBoYW5kbGluZyBvZiBMRidzCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJR2V0RmlsZURhdGVUaW1lKCk6IEZpeGVkLiBTZXRGaWxlRGF0ZVRpbWUoKSBpcyBzdGlsbCBicm9rZW4uCgpTYXQgTWFyIDExIDE5OjQ2OjE5IDE5OTUgIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUNoYW5nZU1lbnU6IGRlZmF1bHRzIHRvIE1GX0lOU0VSVAoJSW5zZXJ0TWVudTogYWxsb3cgaW5zZXJ0aW9uIGV2ZW4gaWYgcG9zaXRpb24gaXMgb25lIGFmdGVyIGxhc3QgaXRlbQoKCSogW2lmMTYzMi9JbWFrZWZpbGVdIFtpZjE2MzIvY29tcG9iai5zcGVjXSBbaWYxNjMyL3JlbGF5LmNdCgkgIFtpZjE2MzIvc3RvcmFnZS5zcGVjXSBbaW5jbHVkZS9kbGxzLmhdCglBZGRlZCBzdHVicyBmb3IgU1RPUkFHRS5ETEwgYW5kIENPTVBPQkouRExMCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW5TZW5kTWVzc2FnZTogbmV3IGZ1bmN0aW9uCgoJKiBbaW5jbHVkZS9uZWV4ZS5oXVtpbmNsdWRlL25lX2ltYWdlLmNdCglORV9GaXh1cFNlZ21lbnQ6IGZpeGVkIGhhbmRsaW5nIG9mIGFkZGl0aXZlIHJlY29yZHMKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUdldEVudHJ5RExMTmFtZTogcmV0dXJuIE5VTEwgaW5zdGVhZCBvZiBwb2ludGVyIHRvIERMTC4wIGlmIG5vdCBmb3VuZAoKCSogW2xvYWRlci9zaWduYWwuY10KCXdpbl9mYXVsdDogRW50ZXIgZGVidWdnZXIgb24gU0lHRlBFLCB0b28KCldlZCBNYXIgIDEgMjE6NDc6NDIgMTk5NSAgQ2FtZXJvbiBIZWlkZSAgKGhlaWRlQGVlLnVhbGJlcnRhLmNhKQoKICAgICAgICAqIFttaXNjZW11L2ludCouY10KICAgICAgICBWYXJpb3VzIG1pbm9yIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGNsb2NrIHRpY2sgY291bnRlciwKICAgICAgICBGaW5kRmlyc3QvRmluZE5leHQgZnVuY3MsIGFuZCBEUEIgaGFuZGxpbmcuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBNYXIgIDIgMTc6NDQ6MzIgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQoKCSogW2xvYWRlci9yZXNvdXJjZS5jXSBbb2JqZWN0cy9vZW1iaXRtYXAuY10KCVJlbW92ZWQgc3lzcmVzIGJpdG1hcCBjb2RlOyB5b3UgbmVlZCBsaWJYcG0gdG8gY29tcGlsZSBub3cuCglJbXBsZW1lbnRlZCBMb2FkSWNvbigpIGZvciBPRU0gaWNvbnMuCgoJKiBbaW5jbHVkZS9iaXRtYXBzL29pY18qXQoJQWRkZWQgT0VNIGljb25zIGluIFhQTSBmb3JtYXQuCgoJKiBbb2JqZWN0cy9kaWIuY10KCUJ1ZyBmaXggaW4gRHJhd0ljb24oKS4KCgkqIFtyYy9zeXNyZXNibS5yY10KCVJlbW92ZWQ7IGFsbCBiaXRtYXBzIGFyZSBzdG9yZWQgaW4gWFBNIGZvcm1hdCBub3cuCgpUdWUgRmViIDI4IDE4OjU0OjI4IDE5OTUgIFRvbWkgTGVwcGlrYW5nYXMgICh0b21pbGVwcEBwYWp1Lm91bHUuZmkpCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJU21hbGwgcGF0Y2ggdG8gZml4IGVkaXQtY29udHJvbCB3aGVuIGl0J3MgY3JlYXRlZCB3aXRoIHRleHQuCgpTdW4gRmViIDI2IDIwOjIyOjE1IDE5OTUgIE1pY2hhZWwgVmVrc2xlciAgKGUxNjc4MjIzQHRvY2huYXBjMi50ZWNobmlvbi5hYy5pbCkKCgkqIFt0b29scy9tYWtlX2RlYnVnXQoJVGhlIGNyZWF0ZWQgbWFjcm9zIHdvbid0IGhhdmUgc2lkZSBlZmZlY3RzIGFueW1vcmUgd2hlbiB1c2VkIGluCglhbiAiaWYtZWxzZSIgc3RydWN0dXJlLiBObyBtb3JlIHdhcm5pbmdzIGZyb20gdGhlIGNvbXBpbGVyIHdoZW4KCWNvbXBpbGVkIHdpdGhvdXQgZGVmaW5pbmcgREVCVUdfUlVOVElNRS4KIApTdW4gRmViIDI2IDIwOjIwOjQ5IDE5OTUgIE1pY2hhZWwgUGF0cmEgPG1pY2t5QG1hcmllLnBoeXNpay5UVS1CZXJsaW4uREU+CgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTGlzdEJveERlbGV0ZVN0cmluZygpOiBGaXhlZAoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJR2V0TWVtb3J5UmVmZXJlbmNlKCk6IFdoZW4gc3BlY2lhbCBzZWdtZW50cyBhcmUgcmVmZXJlbmNlZCBieQoJcHNldWRvLWZ1bmN0aW9ucyBsaWtlIF9fMDA0MEgsIGEgcmVmZXJlbmNlIHRvIGEgIm5vcm1hbCIgc2VnbWVudAoJd2lsbCBiZSByZXR1cm5lZCBwcmV2ZW50aW5nIHRoZSBwcm9ncmFtIGZyb20gY3Jhc2hpbmcgYXMgc29vbgoJYXMgdGhlIHJlZmVyZW5jZWQgc2VnbWVudCBpcyBhY3R1YWxseSBhY2Nlc3NlZC4KClN1biBGZWIgMjYgMTU6NTU6MTQgTUVUIDE5OTUgIE1hcnRpbiB2b24gTG9ld2lzIChsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGUpCgoJKiBbQ29uZmlndXJlXQoJQXNrIGZvciBPTEUgc3R1YnMgYW5kIG1hbGxvYyBkZWJ1Z2dpbmcKCgkqIFtJbWFrZWZpbGVdCglsaW5rIHdpdGggbGlibWNoZWNrLmEgaWYgbmVjZXNzYXJ5CgoJKiBbaWYxNjMyL3JlbGF5LmNdW2luY2x1ZGUvZGxsLmhdW2lmMTYzMi9JbWFrZWZpbGVdCglBZGQgT0xFIHN0dWJzLCBpbmNyZWFzZSBudW1iZXIgb2YgYnVpbHRpbnMKCWRsbF9uYW1lX3RhYmxlX2VudHJ5X3M6IG5ldyBmaWVsZCBkbGxfaXNfdXNlZAoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglHZXRNb2R1bGVIYW5kbGUsTW9kdWxlTmV4dDogQ2hlY2sgZGxsX2lzX3VzZWQKCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCUJhcmsgb24gdW5zdXBwb3J0ZWQgTkVfUkFERFJfTE9XQllURSBmbGFnICh3aGF0IGlzIGl0IHN1cHBvc2VkCgl0byBtZWFuLCBhbnl3YXk/KQoKCSogW21pc2Mvb2xlY2xpLmNdW21pc2Mvb2xlc3ZyLmNdCglOZXcgZmlsZXMuIEFkZCB0byBtaXNjL0ltYWtlZmlsZQoKCSogW21pc2MvZG9zX2ZzLmNdCglET1NfR2V0VW5peEZpbGVOYW1lOiBtYWtlIGEgY29weSBvZiB0aGUgaW5wdXQgcGFyYW1ldGVyIHRvIAoJcHJldmVudCBvdmVyd3JpdGluZwoKCSogW21pc2MvbWFpbi5jXQoJTUFJTl9QYXJzZURMTE9wdGlvbnM6IG5ldyBmdW5jdGlvbgoJTUFJTl9QYXJzZU9wdGlvbnM6IHRyZWF0IC1kbGwgY29tbWFuZCBsaW5lIGZsYWcKCW1haW46IGFkZCBzdXBwb3J0IGZvciBtYWxsb2MgZGVidWdnaW5nCgpGcmkgRmViIDI0IDEyOjQzOjI3IDE5OTUgIEVyaWsgU3ZlbmRzZW4gIDx6M2VzdkBrbWQtYWMuZGs+CgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJU21hbGwgcGF0Y2ggZm9yIHBlb3BsZSB1c2luZyBGcmVlQlNELTIuMS4wLgoKRnJpIEZlYiAxNyAyMjo0OToxOCAxOTk1ICBNaWd1ZWwgZGUgSWNhemEgKG1pZ3VlbEByb3hhbm5lLm51Y2xlY3UudW5hbS5teCkKCgkqIFt0b29sa2l0L3N1cC5jXQoJQWRkZWQgcmV0dXJuIHZhbHVlcyB0byB0aGUgQ2FsbCogcm91dGluZXMKCgkqIFt0b29sa2l0L3dpbm1haW4uY10KCUxvYWQgdGhlIHJlc291cmNlIGZpbGUgcHJvcGVybHkgZm9yIFdpbmVMaWIgYXBwbGljYXRpb25zLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgRmViIDE2IDE4OjU3OjMxIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKCgkqIFtpZjE2MzIvY2FsbC5TXQoJT25seSBzYXZlIHRoZSBsb3dlciAxNi1iaXRzIG9mIFNQIGFuZCBCUC4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCVdoZW4gY2FsbGluZyB0byAxNi1iaXQgY29kZSwgcmVzdG9yZSBEUyBmcm9tIGl0cyBwcmV2aW91cyB2YWx1ZSBvbgoJZW50cnkgdG8gdGhlIDMyLWJpdCBjb2RlLCBpbnN0ZWFkIG9mIGZyb20gdGhlIGNvZGUgc2VnbWVudCBvd25lci4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2luY2x1ZGUvc3RhY2tmcmFtZS5oXQoJVXNlIGEgc3RydWN0dXJlIHRvIHJlcHJlc2VudCB0aGUgMTYtYml0IHN0YWNrIGZyYW1lIGxheW91dAoJaW5zdGVhZCBvZiBoYXJkLWNvZGVkIG9mZnNldHMuCgkKCSogW3JjL0ltYWtlZmlsZV0KCVVzZSB5LnRhYi5jIGZvciBiaXNvbiBvdXRwdXQgZmlsZSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHlhY2MuCgoJKiBbdG9vbHMvYnVpbGQuY10KCVNtYWxsIG9wdGltaXphdGlvbiBmb3IgY2FsbHMgdG8gMzItYml0IGNvZGUuCgpTdW4gRmViIDEyIDAzOjE5OjQ3IDE5OTUgIE1pY2hhZWwgVmVrc2xlciAoczE2NzgyMjNAdDIudGVjaG5pb24uYWMuaWwpCgoJKiBbdG9vbHMvYnVpbGQuY10KCUZpeGVkIGJ1ZyAoaW5mbGljdGVkIGJ5IHByZXZpb3VzIGNoYW5nZSkgLSBTRUdWIG9uIFpNQUdJQyBmaWxlIGZvcm1hdC4KClN1biBGZWIgMTEgMjA6MDA6MDAgMTk5NSAgR/ZyYW4gVGh5bmkgIChnb3JhbkBub3Jyc2tlbi5iaWxkYmFzZW4uc2UpCgoJKiBbZGVidWdnZXIvZGJnLnldCglSZW1vdmUgdW5uZWNlc3Nhcnkgc3ltLXRhYmxlIGxvYWRpbmcgd2hlbiBzdG9wcGVkIGluIDE2LWJpdCBtb2RlLgoKCSogW2luY2x1ZGUvc2VnbWVtLmhdIFtsb2FkZXIvc2VsZWN0b3IuY10KICAgICAgICBBZGRlZCBkeW5hbWljIGFsbG9jdGlvbiBvZiBzZWxlY3RvcnMuCiAgICAgICAgRml4ZWQgc29tZSBwcm9ibGVtcyB3aXRoIGxhcmdlIHByb2dyYW1zIFNJR1NFR1YtaW5nIHdoaWxlCiAgICAgICAgcnVubmluZyBvdXQgb2Ygc2VsZWN0b3JzLgoKCSogW2luY2x1ZGUvc2VnbWVtLmhdIFtsb2FkZXIvc2VsZWN0b3IuY10gW2lmMTYzMi9jYWxsYmFjay5jXSAKICAgICAgICAgIFttZW1vcnkvZ2xvYmFsLmNdIFttZW1vcnkvaGVhcC5jXSBbbWVtb3J5L2xpbmVhci5jXQoJVXNlIF9fQUhTSElGVCBhbmQgX19BSElOQ1IgaW5zdGVhZCBvZiAzIGFuZCA4LgoKTW9uIEZlYiAgNiAxODowNzozOCAxOTk1ICBDYW1lcm9uIEhlaWRlICAoaGVpZGVAZWUudWFsYmVydGEuY2EpCgogICAgICAgICogW21pc2MvZG9zX2ZzLmNdCiAgICAgICAgQmV0dGVyIHJlbGF0aXZlIHBhdGggaGFuZGxpbmcgd2hlbiBjb252ZXJ0aW5nIGZpbGVuYW1lcyBiZXR3ZWVuCiAgICAgICAgZG9zIGFuZCB1bml4LCBhbGxvd2luZyAnLicgdG8gYmUgdXNlZCBpbiB0aGUgV2luZG93cyBwYXRoLgogICAgICAgIFN0YXJ0dXAgd29ya2luZyBkaXIgaXMgbm93IGJhc2VkIG9uIGN1cnJlbnQgd29ya2luZyBkaXIuCgpTYXQgRmViICA0IDIxOjIxOjEzIDE5OTUgIE1pY2hhZWwgVmVrc2xlciAoczE2NzgyMjNAdDIudGVjaG5pb24uYWMuaWwpCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL2RsbHMuaF0gW3Rvb2xzL2J1aWxkLmNdCglTcXVlZXplZCBkYXRhIHN0cnVjdHVyZSB0aGF0IHJlZmVyZW5jZXMgaW50ZXJuYWwgZGxsJ3MgKG1vc3RseQoJInN0cnVjdCBkbGxfdGFibGVfZW50cnlfcyIpLiBDYXVzZWQgMjAlIHJlZHVjdGlvbiBpbiBleGVjdXRhYmxlCgljb2RlIHNpemUuCgpGcmkgRmViICAzIDE4OjUzOjE1IDE5OTUgIE1hcnRpbiB2LiBMb2V3aXMgIChsb2V3aXNAbWFyaWUpCgoJKiBbSW1ha2VmaWxlXQoJbWFrZSB3aW5lLnN5bSBvbmx5IHdoZW4gbWFraW5nIGVtdWxhdG9yCgoJKiBbbWlzYy9maWxlLmNdCglPcGVuRmlsZSgpOiByZXBvcnQgYXMgbm90IGltcGxlbWVudGVkIGZvciBXSU5FTElCCgoJKiBbbWlzYy93aW5zb2NrLmNdCglGaXggQ09OVkVSVF9IT1NURU5UIGFuZCBmcmllbmRzIGZvciB1c2Ugd2l0aCBXSU5FTElCCgoJKiBbcmMvSW1ha2VmaWxlXVtyYy9yYy55XVtyYy9wYXJzZXIuY10KCVJlbmFtZSByYy55IHRvIHBhcnNlci55CglVc2UgZmxleCBhbmQgYmlzb24gb24gU3VuCgoJKiBbdG9vbGtpdC9zdXAuY10KCUNhbGxXaW5kb3dQcm9jOiBmaXggcGFyYW1ldGVyIHR5cGUKCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglDb21tZW50ZWQgI2lmZGVmIHNwYXJjCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBGZWIgIDEgMTk6Mjc6NTUgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJSW1wbGVtZW50ZWQgbWF4aW1pemVkIHdpbmRvd3MuCglJbXBsZW1lbnRlZCBpY29uIHBvc2l0aW9uaW5nIGFuZCBBcnJhbmdlSWNvbmljV2luZG93cygpLgoJQnVnIGZpeGVzIGluIFNldFdpbmRvd1BvcygpLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUltcGxlbWVudGVkIEdldENvbnRyb2xCcnVzaCgpLgoJV2luZG93IGZyYW1lIGlzIG5vIGxvbmdlciBjb250YWluZWQgaW4gdGhlIHVwZGF0ZSByZWdpb24uCgoJKiBbd2luZG93cy93aW4uY10KCURlc3Ryb3kgb3duZWQgd2luZG93cyB1cG9uIERlc3Ryb3lXaW5kb3coKS4KClN1biBKYW4gMjkgMTY6MTc6MjIgMTk5NSAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUNoYW5nZWQgbGluZSB0ZXJtaW5hdG9yIHRvIFxyXG4gdG8gYmUgY29tcGF0aWJsZSB3aXRoCglXaW5kb3dzLiAgRml4ZWQgYnVnIGluIHRleHQgc2VsZWN0aW9uLgoKU3VuIEphbiAyOSAxNDoxMDoyMiAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgogICAgICAgKiBbbWlzYy9zaGVsbC5jXQogICAgICAgUmV3cm90ZSBSZWdDcmVhdGVLZXkgYW5kIFJlZ09wZW5LZXksIHNpbmNlIHRoZXkgd2VyZSBjb21wbGV0ZWx5IGJyb2tlbi4KICAgICAgIEZpeGVkIGEgYnVnIGluIFJlZ1F1ZXJ5S2V5VmFsdWUuIEltcGxlbWVudGVkIFJlZ0VudW1LZXkKICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBub3cgd29yayBzb21ld2hhdCBtb3JlIHRoZSB3YXkgV2luZG93cyBwcm9ncmFtcyBleHBlY3QKICAgICAgIHRoZW0gdG8gd29yay4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEphbiAyMiAxODo1NTozMyAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdIFtvYmplY3RzL2RpYi5jXQoJRml4ZWQgaWNvbiBsb2FkaW5nIGFuZCBkcmF3aW5nLCBub3cgdGhhdCBCaXRCbHQoKSB3b3JrcyBjb3JyZWN0bHkuCgkKCSogW29iamVjdHMvY2xpcHBpbmcuY10gW29iamVjdHMvcmVnaW9uLmNdCglJbXBsZW1lbnRlZCBlbGxpcHRpYyByZWdpb25zIHdpdGggYSBzZXQgb2YgcmVjdGFuZ2xlLiBUaGlzIGdyZWF0bHkKCXNpbXBsaWZpZXMgdGhlIHJlZ2lvbiBjb2RlIGFuZCBzaG91bGQgYm9vc3QgY2xpcHBpbmcgcGVyZm9ybWFuY2UuCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJRml4ZWQgYnVnIHRoYXQgY2F1c2VkIHNlZy1mYXVsdCBvbiAyNGJwcCBkaXNwbGF5cy4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJRml4ZWQgYnVnIHdoZW4gc2hyaW5raW5nIGEgYml0bWFwIHRvIG1vcmUgdGhhbiBoYWxmIGl0cyBzaXplLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUZpeGVkIGJ1Z3MgaW4gUGFpbnRSZ24oKSBhbmQgUG9seWxpbmUoKS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy9wYWludGluZy5jXSBbd2luZG93cy93aW5wb3MuY10KCUZpeGVkIHNvbWUgcHJvYmxlbXMgd2l0aCB3aW5kb3cgYmFja2dyb3VuZCBwYWludGluZy4KClRodSBKYW4gMTIgMTI6MjA6MjUgUFNUIDE5OTUgUm9zcyBCaXJvIChiaXJvQHlnZ2RyYXNpbC5jb20pCgogICAgICAgKiBbdG9vbHMvYnVpbGQuY10KICAgICAgICogW3Rvb2xzL25ld2J1aWxkLmNdCiAgICAgICAqIFtJbWFrZWZpbGVdCiAgICAgICAqIFtpbmNsdWRlL3dpbmUuaF0KICAgICAgICogW2xvYWRlci9jYWxsLlNdCiAgICAgICAqIFtsb2FkZXIvc2VsZWN0b3IuY10KICAgICAgICogW2luY2x1ZGUvc2VnbWVtLmhdCiAgICAgICAqIFttaXNjL21haW4uY10KICAgICAgIENoYW5nZWQgc2VsZWN0b3IgY29kZSBhbmQgMTYvMzIgYml0IHhmZXIgY29kZSBzbyB0aGF0IHdpbmUKICAgICAgIG5vIGxvbmdlciBoYXMgdG8gYmUgbG9hZGVkIGxvdyBpbiBtZW1vcnkuICBDaGFuZ2VkIHdpbmUKICAgICAgIHRvIHdvcmsgd2l0aCBFTEYgYmluYXJ5IGZvcm1hdHMgdW5kZXIgTGludXguCiAgICAgICAKU2F0IFNlcCAxNyAxMTowODo0OSAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAZXNwMjIpCgoJKiBbZGVidWdnZXIvZGJfZGlzYXNtLmNdCglOZXcgaW5zdHJ1Y3Rpb24gZGlzYXNzZW1ibGVyIC0gYm9ycm93ZWQgZnJvbSBNYWNoIGtlcm5lbC4gIEhhcyBhCglCU0Qgc3R5bGUgb2YgbGljZW5zZSBhcyBvcHBvc2VkIHRvIHRoZSBnZGIgY29kZSB3ZSB3ZXJlIHByZXZpb3VzbHkKCXVzaW5nIHdoaWNoIHdhcyB1bmRlciB0aGUgR1BMLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gSmFuICA5IDE4OjI3OjExIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtJbWFrZWZpbGVdCglDb21waWxpbmcgd2l0aCAtV2FsbCBmbGFnLgoKCSogWyovKl0KCUZpeGVzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgY29tcGlsYXRpb24gd2FybmluZ3MuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUZpeGVkIEJpdEJsdCgpIGFuZCB1c2VkIHRoZSBzYW1lIGNvZGUgdG8gcmV3cml0ZSBQYXRCbHQoKSBhbmQKCVN0cmV0Y2hCbHQoKS4gVGhlIHRocmVlICpCbHQoKSBmdW5jdGlvbnMgc2hvdWxkIG5vdyBiZSBjb3JyZWN0IGluCglldmVyeSBjYXNlIChmYW1vdXMgbGFzdCB3b3JkcykuCgoJKiBbb2JqZWN0cy9icnVzaC5jXSBbb2JqZWN0cy9kaXRoZXIuY10KCU1lcmdlZCB0aGUgdHdvIGZpbGVzIGludG8gYnJ1c2guYwoKCSogW29iamVjdHMvZGMuY10KCUZpeGVkIGJ1ZyB3aGVuIHRoZSBXaW5kb3dzIHByb2dyYW1zIGZvcmdldCB0byByZS1zZWxlY3QgdGhlCglvcmlnaW5hbCBiaXRtYXAgaW4gYSBtZW1vcnkgREMuCgoJKiBbb2JqZWN0cy9mb250LmNdCglUdHkgdG8gdXNlICdmaXhlZCcgZm9udCB3aGVuIHRoZSBzeXN0ZW0gZm9udCBjYW4ndCBiZSBmb3VuZC4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJVGVudGF0aXZlIGZpeCB0byBtYWtlIGRpYWxvZ3MgbG9vayBiZXR0ZXIgd2hlbiB1c2luZyBmaXhlZC13aWR0aAoJZm9udHMuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJUGFydGlhbGx5IGltcGxlbWVudGVkIHRoZSBQU19JTlNJREVGUkFNRSBwZW4gc3R5bGUuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUZpeCBmb3Igd2luZG93cyB0aGF0IGhhdmUgdGhlIFdTX0VYX0RMR01PREFMRlJBTUUgc3R5bGUgYml0Cgl3aXRob3V0IHRoZSBXU19ETEdGUkFNRSBzdHlsZS4KClRodSBKYW4gIDUgMTM6Mzc6NDIgMTk5NSAgQ2FtZXJvbiBIZWlkZSAgKGhlaWRlQGVlLnVhbGJlcnRhLmNhKQoKCSogW21lbW9yeS9nbG9iYWwuY10KCUdsb2JhbENvbXBhY3Qgc2hvdWxkIG5vdyByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbiB0aGUKCWxhcmdlc3QgcnVuIG9mIGZyZWUgYmxvY2tzIGluY2x1ZGVzIHRoZSBsYXN0IGJsb2NrLgoKCSogW3dpbmRvd3MvbWRpLmNdCglUaWxpbmcgYW5kIGNhc2NhZGluZyB3aW5kb3dzIHdpdGhvdXQgYW55IE1ESSBjaGlsZHJlbiBzaG91bGQKCW5vIGxvbmdlciBjcmFzaCAoYXNzdW1pbmcgbm8tb3AgaXMgdGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8pLgoKU3VuIEphbiAgMSAyMzozMDoyNSAxOTk1ICBGb25zIEJvdG1hbiAgPGJvdG1hbkByYWJvLm5sPgoKCSogW29iamVjdHMvZm9udC5jXQoJR2V0VGV4dEV4dGVudFBvaW50OiBmaXhlZCBkZWJ1ZyBvdXRwdXQsIHN0ciBpcyBjb3VudGVkIHN0cmluZywgbm90CiAgICAgICAgemVybyB0ZXJtaW5hdGVkLgoKCSogW2lmMTYzMi9yZWxheS5jXQoJRExMUmVsYXk6IHdoZW4gZGVidWdnaW5nX3N0YWNrIGdvdCBzZWd2LCBhZGRlZCB1cHBlciBib3VuZCBmb3IKICAgICAgICBzdGFjayBkdW1wLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgRGVjIDI3IDEzOjM1OjE2IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFsqL0ltYWtlZmlsZV0KCUFsbCBvYmplY3RzIGZpbGVzIGFyZSBub3cga2VwdCBpbiB0aGVpciByZXNwZWN0aXZlIGRpcmVjdG9yeS4KCgkqIFtSRUFETUVdCglSZXdyb3RlIG1vc3Qgb2YgaXQuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCVJld3JvdGUgQml0Qmx0KCkgdG8gbG9vayByaWdodCBpbiBldmVyeSBjYXNlLCB3aGlsZSBtaW5pbWl6aW5nCgl0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLiBOb3QgcmVhbGx5IGZpbmlzaGVkIHlldC4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXSBbb2JqZWN0cy9kYy5jXQoJRml4ZWQgYnVnIHdpdGggcGF0dGVybiBicnVzaGVzLgoKCSogW29iamVjdHMvY2xpcHBpbmcuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10KCUZpeGVzIGZvciBsb2dpY2FsIGNvb3JkaW5hdGVzLgoKCSogW29iamVjdHMvY29sb3IuY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUZpeGVkIEdldFBpeGVsKCkgdG8gcmV0dXJuIHRoZSBjb3JyZWN0IGNvbG9yLCBhbmQgbWFkZSBpdCBmYXN0ZXIuCgoJKiBbb2JqZWN0cy9yZWdpb24uY10KCUZpeGVkIGJ1ZyBpbiBDb21iaW5lUmduKCkgd2hlbiBvbmUgb2YgdGhlIHJlZ2lvbiBpcyBlbXB0eS4KCkZyaSBEZWMgMjIgMDE6NDI6NTcgTUVUIDE5OTQJCSAgRGFnIEFzaGVpbSAoZGFzaEBpZmkudWlvLm5vKQoKCSogW0NvbmZpZ3VyZV0KCURvbid0IGFzc3VtZSB0aGF0IGV4cHIgaGFuZGxlcyAnPT0nLCB1c2UgJz0nIGluc3RlYWQuCglHaXZlIGEgKGhvcGVmdWxseSBpbmZvcm1hdGl2ZSkgbWVzc2FnZSBpZiBpbWFrZSBmYWlscy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIERlYyAgNyAxNDo1MjoyNSAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJRml4ZWQgcHJvYmxlbXMgZHVlIHRvIG5ldyBzY3JvbGwtYmFyIGNvZGUuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXSBbbWlzY2VtdS9pb3BvcnRzLmNdCglIYW5kbGUgSS9PIG9wY29kZXMgdGhhdCB1c2UgYW4gYWJzb2x1dGUgYWRkcmVzcy4KCgkqIFtvYmplY3RzL3RleHQuY10KCUltcGxlbWVudGVkIFRhYmJlZFRleHRPdXQoKS4KClNhdCBEZWMgIDMgMTg6NTM6MDggMTk5NCAgS2VubmV0aCBNYWNEb25hbGQgIDxLLk1hY0RvbmFsZEBlZC5hYy51az4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglJbXBsZW1lbnRlZCBHZXRNZXRhZmlsZSgpLgoJRml4ZWQgYnVnIGluIFBsYXlNZXRhRmlsZSgpIHdoZW4gcmVhZGluZyBkaXNjIGJhc2VkIG1ldGFmaWxlIHJlY29yZHMuCglBZGRlZCBNRVRBX1BPTFlQT0xZR09OLCBNRVRBX0RFTEVURU9CSkVDVCBhbmQgTUVUQV9FT0YgdG8gCglQbGF5TWV0YUZpbGVSZWNvcmQoKS4KCQpXZWQgTm92IDMwIDA2OjMyOjI1IDE5OTQgIE1hcnRpbiB2b24gTG9ld2lzICAobWFydGluQGNzLmNzdWZyZXNuby5lZHUpCgoJKiBbSW1ha2VmaWxlXQoJd2luZS5zeW06IFJlbW92ZSBnY2MyX2NvbXBpbGVkIGFuZCBmcmllbmRzCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXVtpZjE2MzIvcmVsYXkuY11baWYxNjMyL3JlbGF5LmNdCgkgIFtsb2FkZXIvcmVzb3VyY2UuY11bbWVtb3J5L2hlYXAuY11bb2JqZWN0cy9kaWIuY11bd2luZG93cy9kaWFsb2cuY10KCVJlcGxhY2UgI2lmZGVmIERFQlVHX1hYWCB3aXRoIGlmKGRlYnVnZ2luZ194eHgpewoKCSogW2lmMTYzMi9jYWxsLlNdCglDYWxsVG9MaWJNYWluOiBOZXcgZnVuY3Rpb24KCgkqIFtpZjE2MzIvcmVsYXkuY11baW5jbHVkZS9vcHRpb25zLmhdW21pc2MvbWFpbi5jXQoJICBbbWlzY2VtdS9pbnQxYS5jXVttaXNjZW11L2ludDIxLmNdW21pc2NlbXUva2VybmVsLmNdCglyZW1vdmVkIE9wdGlvbnMucmVsYXlfZGVidWcKCgkqIFtpbmNsdWRlL2hlYXAuaF0KCUhFQVBfT1dORVI6IFVzZSBkcyBpbnN0ZWFkIG9mIGNzOmlwCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglMb2FkTkVJbWFnZTogUmVtZW1iZXIgY3VycmVudCBleGUsIGhhbmRsZSBub2RhdGEgZGxscwoJSW5pdE5FRExMOiBoYW5kbGUgbm9kYXRhIGRsbHMsIGNhbGwgQ2FsbFRvTGliTWFpbgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJQ3JlYXRlU2VsZWN0b3JzOiBJbml0aWFsaXplIGF1dG9fZGF0YV9zZWwgd2l0aCAwCgoJKiBbbWVtb3J5L2hlYXAuY10KCUhFQVBfQ2hlY2tIZWFwOiBDaGVjayBwcmV2CglIRUFQX0NoZWNrTG9jYWxIZWFwczogbmV3IGZ1bmN0aW9uCgoJKiBbbWlzYy9wcm9maWxlXQoJUmVtZW1iZXIgYW5kIGR1bXAgb25seSBjaGFuZ2VkIHByb2ZpbGVzCgoJKiBbdG9vbHMvbWFrZWRlYnVnXQoJSW50cm9kdWNlIGRlYnVnZ2luZ194eHggZmxhZ3MKClN1biBOb3YgMjcgMjM6MTM6MjIgTUVUIDE5OTQJPGVyaWtAeHM0YWxsLm5sPgoKCSogW2NsaXBib2FyZC5oIGNvbG9yLmggZGMuaCBkb3NfZnMuaCBldmVudC5oIGZvbnQuaCBncmFwaGljcy5oCglpZjE2MzIuaCBrZXJuZWwuaCBsaWJyYXJ5LmggbWlzY2VtdS5oIG5lX2ltYWdlLmggbm9uY2xpZW50LmggCglwZV9pbWFnZS5oIHNlbGVjdG9ycy5oIHdpbnR5cGVzLmhdCglBZGRlZC4KCgkqIFsqLypdCgktIENvbW1lbnRlZCBhbGwgJ3N0YXRpYyBjaGFyIGNvcHlyaWdodCBzdGF0ZW1lbnRzJywgc2VlIG1pc2MvbWFpbi5jCgktIG1vdmVkIHByb3RvdHlwZXMgdG8gaGVhZGVycyBmaWxlcywgZml4ZWQgd3JvbmcgcHJvdG90eXBlcy4KCS0gKnBsZWFzZSogYWRkIGEgaGVhZGVyIGZpbGUgZm9yIGVhY2ggLmMgaWYgeW91IG5lZWQgdG8gZXhwb3J0CgkgIHRoaW5ncy4KCgkqIFttaXNjL21haW4uY10KCUFkZGVkIG9uZSBzdGF0aWMgc3RyaW5nIHdoaWNoIGxpc3QgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMuCgpGcmkgTm92IDI1IDE2OjI0OjI3IE1FVCAxOTk0CQkgIERhZyBBc2hlaW0gKGRhc2hAaWZpLnVpby5ubykKCgkqIFtDb25maWd1cmVdCglNYWRlIHRoZSBzdXBwb3J0IGZvciBtdWx0aXBsZSBsYW5ndWFnZXMgbW9yZSBhdXRvbWF0aWMuICBBZGRlZAoJYSBbZm9udHNdIHNlY3Rpb24gdG8gdGhlIHdpbmUuY29uZiBmaWxlLiAgTWFkZSB0aGUgZGVmYXVsdHMKCWJldHRlci4gIEdlbmVyYWxseSBjbGVhbmVkIGl0IHVwLgoKCSogW3JjL3N5c3Jlc19Oby5yY10gW3JjL3N5c3Jlc19EZS5yY10gW3JjL3N5c3Jlcy5jXQoJTm9yd2VnaWFuIHJlc291cmNlcyBhbmQgc21hbGwgZml4ZXMgdG8gdGhlIGdlcm1hbiByZXNvdXJjZXMuCgpXZWQgTm92IDIzIDIwOjI4OjU5IDE5OTQgIE1hcnRpbiB2b24gTG9ld2lzICAobWFydGluQGNzLmNzdWZyZXNuby5lZHUpCgoJKiBbZGVidWdnZXIvYnJlYWsuY10KCWJhcmsoKSwgdG9nZ2xlX25leHQoKSwgc2hvdWxkX2NvbnRpbnVlKCk6IE5ldyBmdW5jdGlvbnMKCWluc2VydF9icmVhaygpOiBGaXhlZCwgYWRkcyB3cml0ZSBhY2Nlc3MgdG8gcGFnZSBiZWZvcmUgd3JpdGluZwoJd2luZV9icC5uZXh0X2FkZHI6IG5ldyBzdHJ1Y3R1cmUgZmllbGQKCgkqIFtkZWJ1Z2dlci9kYmcueV0KCUNoYW5nZWQgc3ltYm9sJ3MgdmFsdWUgdG8gYmUgaXQncyB2YWx1ZSBpbnN0ZWFkIG9mIHRoZSB2YWx1ZQoJcG9pbnRlZCB0byBieSB0aGUgc3ltYm9sLgoJQ2hhbmdlZCBTSUdUUkFQIGhhbmRsaW5nIHRvIGFsbG93IGNvbnRpbnVhdGlvbiBhZnRlciBicmVhayBwb2ludAoKCSogW21pc2Mvc2hlbGwuY10KCVNoZWxsQWJvdXQoKTogTG9hZCByZXNvdXJjZSBmcm9tIG1lbW9yeQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTm92IDIwIDE4OjMwOjA2IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9zY3JvbGwuY10gW2luY2x1ZGUvc2Nyb2xsLmhdCglSZXdyaXR0ZW4gbW9zdCBvZiBzY3JvbGwtYmFyIGNvZGUgZm9yIGJldHRlciBXaW5kb3dzIGxvb2sgJiBmZWVsLgoJSW1wbGVtZW50ZWQgRW5hYmxlU2Nyb2xsQmFyKCkuCglQcmVsaW1pbmFyeSBrZXlib2FyZCBzdXBwb3J0LgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglGaXhlZCBCYWRNYXRjaCBlcnJvciBmb3IgQml0Qmx0KCkgYW5kIFN0cmV0Y2hCbHQoKSB3aGVuIHJlYWRpbmcKCWJpdHMgZnJvbSBvdXRzaWRlIHRoZSB2aXNpYmxlIHJlZ2lvbi4KCgkqIFtvYmplY3RzL29lbWJpdG1hcC5jXSBbaW5jbHVkZS9iaXRtYXBzL29ibV8qXQoJVXNlIFhQTSBzeW1ib2xpYyBjb2xvcnMgdG8gbG9hZCBiaXRtYXBzLiBUaGlzIGFsbG93cyB0aGUgY29sb3JzCglvZiB0aGUgYml0bWFwcyB0byBkZXBlbmQgb24gdGhlIHN5c3RlbSBjb2xvcnMuCgoJKiBbdG9vbHMvbWFrZV9kZWJ1Z10KCU1hZGUgdGhlIG1ha2VfZGVidWcgc2NyaXB0IG1vcmUgcm9idXN0LgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglGaXhlZCBDaGVja1JhZGlvQnV0dG9uKCkuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUEgZmV3IGNoYW5nZXMgdG8gc2Nyb2xsLWJhciBkcmF3aW5nIGFuZCB0cmFja2luZy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJUmVuYW1lZCBOZXh0V2luZG93RnJvbVBvaW50KCkgdG8gV0lOUE9TX05leHRXaW5kb3dGcm9tUG9pbnQoKSB0bwoJYXZvaWQgY29uZnVzaW9uLCBhbmQgb3B0aW1pemVkIGl0IHNvbWV3aGF0LgoKTm92IDE5LCA5NCBNYXJ0aW4gQXlvdHRlICh3aW5lQHRyZ2NvcnAubWtzaW5mby5xYy5jYSkKCgkqIFttaXNjL2F1ZGlvLmNdCgkqIFttaXNjL21jaWFuaW0uY10KCW1vcmUgY29kaW5nIGJ1dCBub3RoaW5nIHNwZWN0YWN1bGFyLgoKCSogW21pc2MvbW1hdXguY10KCXNvbWUgY29kaW5nIHRvIGFjY2VzcyAnL2Rldi9taXhlcicuCgoJKiBbbWlzYy9taWRpLmNdCglzb21lIGNvZGluZyB0byByZWFkIC5NSUQgZmlsZXMsIGJ1dCBpdCdzIG5vdCBwbGF5aW5nIHlldC4KClN1biBOb3YgMTMgMTk6MzE6MDMgMTk5NCAgICBKYW1lcyBZb3VuZ21hbiAobWJjc3RqeUBhZnMubWFuLmFjLnVrKQoKCSogW29iamVjdHMvZGliLmNdCglSZWltcGxlbWVudGVkIERJQl9TZXRJbWFnZUJpdHNfUkxFOCgpIHNvIHRoYXQgaXQgd291bGQgY29wZSB3aXRoCgliaXRtYXBzIHdoaWNoIGRvbid0IGVuZCAweDAwLCAweDAyIChwcmV2aW91c2x5IGl0IGJsZXcgdXApLiAgVGhpcwoJaW5jbHVkZXMgc29tZSBiaXRtYXBzIG91dHB1dCBieSBQYWludCBTaG9wIFByby4gIEltcGxlbWVudGF0aW9uIGlzCglwb3NzaWJseSBub3cgdG9vIGxheC4gIFBsZWFzZSBzZWUgdGhlIG5vdGVzIG9uIHRoZSBmdW5jdGlvbiBhYm91dAoJd2h5LgoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KCVRoZSBkZXNrdG9wIHBhdHRlcm4gc2hvdWxkIGJlIHBhaW50ZWQgaWYgdGhlIHdhbGxwYXBlciBkb2Vzbid0Cgljb3ZlciB0aGUgd2hvbGUgc2NyZWVuIHdpZHRoIE9SIHRoZSB3aG9sZSBzY3JlZW4gaGVpZ2h0LgoKU3VuIE5vdiAxMyAwMDowNzoxMSBNRVQgMTk5NAlFcmlrIEJvcwk8ZXJpa0B4czRhbGwubmw+CgoJKiBbb2JqZWN0cy9kaWIuY10KCVNtYWxsIGJ1ZyBpbiBESUJfU2V0SW1hZ2VCaXRzKCkgZml4ZWQsIGJpdG1hcHMgaW4gMTYsMjQgYnBwCglub3cgd29yay4KCgkqIFtsb2FkZXIvbmVfcmVzb3VyY2UuY10gW2luY2x1ZGUvcmVzb3VyY2UuaF0KCVNvbWUgY2xlYW51cC4KClRodSBOb3YgMTAgMjA6NDQ6NTggMTk5NCAgTWFydGluIHZvbiBMb2V3aXMgIChtYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdSkKCgkqIFtDb25maWd1cmVdCgkgIFtyYy9zeXNyZXMucmNdCglQcmltaXRpdmUgY29tcGlsZS10aW1lIHN1cHBvcnQgZm9yIG11bHRpcGxlIGxhbmd1YWdlcwoKCSogW3JjL3N5c3Jlc19EZS5yY10KCU5ldyBmaWxlCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglMb2FkQml0bWFwOiBSZWNvZ25pemUgZW5kIG9mIHN5c3Jlc2JtIHByb3Blcmx5CgoJKiBbcmMvSW1ha2VmaWxlXQoJUnVsZXMgdG8gY29tcGlsZSByZXNvdXJjZXMgc2ltcGxpZmllZCwgZGVwZW5kZW5jaWVzIGNoYW5nZWQKCgkqIFtyYy9zeXNyZXNibS5yY10KCURvbid0IHVzZSBzeXNyZXNibSBpZiB1c2luZyBYUE0KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJQ3JlYXRlRGlhbG9nSW5kaXJlY3RQYXJhbTogUmV2ZXJzZSBaLW9yZGVyIG9mIGNvbnRyb2xzCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglNU0dfVHJhbnNsYXRlTW91c2VNc2c6IEZpeCBIVFRSQU5TUEFSRU5UIGhhbmRsaW5nCgoJKiBbd2luZG93cy93aW5wb3MuY10KCU5leHRXaW5kb3dGcm9tUG9pbnQ6IE5ldyBmdW5jdGlvbgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJV01fTkNISVRURVNUOiBHcm91cCBCb3ggaXMgSFRUUkFOU1BBUkVOVAoJQlVUVE9OX0NoZWNrQXV0b1JhZGlvQnV0dG9uOiBOZXcgZnVuY3Rpb24KCUJNX1NFVENIRUNLOiBBZGRlZCBjYWxsIHRvIEJVVFRPTl9DaGVja0F1dG9SYWRpb0J1dHRvbgoKTW9uIE5vdiAgNyAxMToyMDoyNiAxOTk0ICBQYXVsIEZhbHN0YWQgIChwZkB6b29mLmN0cy5jb20pCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglGaXggaGFuZyB3aGVuIHVzaW5nIERyYXdUZXh0KC4uLiwgRFRfV09SREJSRUFLKSB3aXRoIGEgd29yZCB0aGF0CglpcyB0b28gbG9uZyB0byBicmVhay4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCURvbid0IGFzc3VtZSBoZWx2ZXRpY2EgaWYgdGhlcmUgaXMgbm8gZm9udCBmYW1pbHk7IGxldCB0aGUgb3RoZXIKCWZvbnQgYXR0cmlidXRlcyBkZWNpZGUgd2hhdCBmb250IHRvIHVzZS4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglMaXN0Ym94ZXMgYW5kIGNvbWJvIGJveGVzIG5lZWQgdG8gYmUgbm90aWZpZWQgb2YgZG91YmxlLWNsaWNrcy4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCgkgIFtpbmNsdWRlL2xpc3Rib3guaF0KCglzY3JvbGxpbmcgdG8gYm90dG9tIG9mIGxpc3QgYm94IHNob3VsZCBkaXNwbGF5IGxhc3QgaXRlbSBhdCB0aGUKCWJvdHRvbSwgbm90IGF0IHRoZSB0b3AuCgkKCWxpc3QgYm94ZXMgbmVlZCB0byBhbGxvY2F0ZSBhIHNlcGFyYXRlIGhlYXAgZm9yIHRoZWlyIGl0ZW0gZGF0YSwKCXJhdGhlciB0aGFuIHVzaW5nIHRoZSB1c2VyIGhlYXAuICBPdGhlcndpc2UsIGl0J3MgdmVyeSBlYXN5IHRvIHJ1bgoJb3V0IG9mIG1lbW9yeSBmb3IgbGlzdCBib3ggaXRlbXMuCgoJcmVtb3ZlZCByZWR1bmRhbnQgY29kZSBpbiBMaXN0Qm94QWRkU3RyaW5nKCkuICBJbXBsZW1lbnRlZCBzaW1wbGUKCXZlcnNpb24gb2YgTEJTX1NPUlQuCgoJRG9uJ3QgcHV0IFsuXSBpbiB0aGUgbGlzdCBib3ggd2hlbiB1c2luZyBERExfRElSRUNUT1JZLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglDb21ib3Mgc2hvdWxkIHBhc3MgQ0JTX1NPUlQgb250byB0aGVpciBsaXN0IGJveC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJSWYgd2luZG93IGNyZWF0aW9uIGlzIGFib3J0ZWQsIHJlbW92ZSB0aGUgd2luZG93IGZyb20gdGhlCglsaW5rZWQgbGlzdHMuCgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglzdGF0aWMgY29udHJvbHMgd2l0aCBTU19JQ09OIHdlcmUgYWx3YXlzIHJldHVybmluZyAwIGZyb20KCVdNX05DQ1JFQVRFLgoKCU1ha2Ugc3VyZSBzdGF0aWMgY29udHJvbHMgaGF2ZSB0ZXh0IHRvIGRyYXcgYmVmb3JlIGRyYXdpbmcgaXQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBOb3YgIDYgMTg6NTI6MDQgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW29iamVjdHMvb2VtYml0bWFwLmNdICAoTmV3IGZpbGUpCglBZGRlZCBwb3NzaWJpbGl0eSB0byB1c2UgLnhwbSBmaWxlcyBmb3IgT0VNIGJpdG1hcHMuCgoJKiBbaW5jbHVkZS9iaXRtYXBzL29ibSpdICAoTmV3IGZpbGVzKQoJUmVkcmF3biBhbGwgT0VNIGJpdG1hcHMgaW4geHBtIGZvcm1hdC4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUFkZCBzcGFjZSBmb3IgaW50ZXJuYWwgbGVhZGluZyB3aGVuIHVzaW5nIGEgbmVnYXRpdmUgZm9udCBoZWlnaHQuCglTdHVicyBmb3IgQWRkRm9udFJlc291cmNlKCkgYW5kIFJlbW92ZUZvbnRSZXNvdXJjZSgpLgoJRml4IGluIEZPTlRfSW5pdCgpIGZvciB1bmluaXRpYWxpc2VkIGRlZmF1bHQgZm9udC4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJTWFrZSBmb250IGhlaWdodCBuZWdhdGl2ZSBhcyBpdCBpcyByZWFsbHkgYSBwb2ludCBzaXplIGFuZCBub3QgYQoJcGl4ZWwgc2l6ZTsgZGlhbG9ncyB1c2luZyA4LXBvaW50IGZvbnRzIGxvb2sgYmV0dGVyIG5vdy4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglGaXhlZCB0aGUgZml4IDotKSBmb3IgUGllKCkgdG8gbWFrZSBpdCB3b3JrIGZvciBBcmMoKSBhbmQgQ2hvcmQoKSBhbHNvLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBIGZldyBjaGFuZ2VzIGZvciBuZXcgT0VNIGJpdG1hcHMuCgpTdW4gTm92ICA2IDE4OjIyOjE4IDE5OTQgIE1pY2hhZWwgUGF0cmEgIDxtaWNreUBtYXJpZS5waHlzaWsudHUtYmVybGluLmRlPgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCVRoZSBuYW1lcyBvZiBsb2NhbCBjbGFzc2VzIGhhdmUgdG8gYmUgc3RvcmVkIHVzaW5nIEdsb2JhbEF0b20qLgoJT3RoZXJ3aXNlIHRoZXkgY291bGRuJ3QgYmUgYWNjZXNzZWQgZnJvbSBvdGhlciBtb2R1bGVzIChlLmcuIEJXQ0MpIAoKCSogW2lmMTYzMi9jYWxsLlNdCglDYWxsVG8xNihjeCk6IEl0J3MgcG9zc2libGUgdG8gc2V0IHRoZSBjb250ZW50cyBvZiB0aGUgY3gtcmVnaXN0ZXIuCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglJbml0TkVETEwoKTogVGhlIHNpemUgb2YgdGhlIGxvY2FsIGhlYXAgaXMgbm93IHBhc3NlZCBpbiB0aGUgY3gtCglyZWdpc3RlciB3aGVuIGluaXRpYWxpemluZyBhIERMTC4KCgkqIFttZW1vcnkvaGVhcC5jXQoJTG9jYWxJbml0KCk6IFRoZSBjYXNlIHN0YXJ0PT0wIGlzIG5vdyBoYW5kbGVkIGluIHRoZSB3YXkgaXQgc2hvdWxkLgoKCSogW3dpbmRvd3Mvd2luLmNdCglHZXRXaW5kb3dMb25nKCk6IElmIHRoZSBhZHJlc3Mgb2YgdGhlIHdpbmRvd3MgZnVuY3Rpb24gaXMgcmVxdWVzdGVkCglpdCdzIG5vIGxvbmdlciByZXR1cm5lZCBpZiBpdCdzIHdpdGhpbiB0aGUgV2luZSBjb2RlIChhbmQgdGhlcmVmb3JlCgl1bnJlYWNoYWJsZSBieSBhIHdpbmRvd3MgcHJvZ3JhbSkuIFRoaXMgbWFrZXMgQm9ybGFuZCdzIE9XTCBoYXBweS4KCgkqIFtjb250cm9scy9lZGl0LmNdCglFRElUX0dldFN0cigpOiBBZGRlZCBoYW5kbGluZyBmb3Igb2ZmPDAuCgpTdW4gTm92ICA2IDE3OjM3OjE0IDE5OTQgIENocmlzIEpvbmVzICA8Y2hyaXNqQGljaGlwcy5pbnRlbC5jb20+CgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCUZpeGVkIGluZmluaXRlIGxvb3AgYnVnIHdoZW4gdHdvIERMTHMgcmVmZXIgdG8gZWFjaCBvdGhlciAoZml4ZXMKCWhhbmd1cCBvZiBRdWlja2VuIGR1cmluZyBsb2FkaW5nKS4KClRodSBOb3YgMDQgMTI6MDA6MDAgMTk5NCAgSmFuIFdpbGxhbW93aXVzICAoamFuQGphbmhoLnNoLnN1Yi5kZSkKCgkqIFttaXNjL2Rvc19mcy5jXQoJQnVnIGZpeDogVGhlIHNpemUgb2YgYSBkaXNrIGFuIHRoZSBhdmFpbGFibGUgc3BhY2UKCWlzIG5vdyByZXR1cm5lZCBpbiBieXRlcyBpbnN0ZWFkIG9mIChpbmNvcnJlY3RseSkKCUtCeXRlcy4KClRodSBOb3YgMDMgMTI6MDA6MDAgMTk5NCAgSmFuIFdpbGxhbW93aXVzICAoamFuQGphbmhoLnNoLnN1Yi5kZSkKCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglCdWcgZml4OiBQaWUgc2VnbWVudHMgYXJlIG5vdyBmaWxsZWQgd2l0aCBjb3JyZWN0IGJydXNoLgoKVGh1IE5vdiAgMyAxMDo0MDowOSAxOTk0ICBNYXJ0aW4gdm9uIExvZXdpcyAgKG1hcnRpbkBjcy5jc3VmcmVzbm8uZWR1KQoKICAgICAgICAqIFtJbWFrZWZpbGVdCiAgICAgICAgZ2VuZXJhdGUgcmMubyBiZWZvcmUgbG9hZGVyLm8KCiAgICAgICAgKiBbY29udHJvbHMvbWVudS5jXQogICAgICAgIENvcHlTeXNNZW51OiBnZW5lcmF0ZSBTWVNNRU5VIG9uIHRoZSBmbHksIGVsaW1pbmF0ZSBoU3lzTWVudQoKICAgICAgICAqIFtpbmNsdWRlL3Jlc291cmNlLmhdCiAgICAgICAgQWRkIHN0cnVjdCBSZXNvdXJjZVRhYmxlCgogICAgICAgICogW2xvYWRlci9iaXRtYXAuaF0KICAgICAgICBMb2FkIHN5c3RlbSBiaXRtYXBzIGZyb20gc3lzcmVzYm1UYWJsZQoKICAgICAgICAqIFttaXNjL2NsaXBib2FyZC5jXQogICAgICAgICAgW3dpbmRvd3MvZXZlbnQuY10KICAgICAgICBJc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZSxFVkVOVF9TZWxlY3Rpb25SZXF1ZXN0OiBidWcgZml4ZXMKICAgICAgICAKICAgICAgICAqIFtyYy9JbWFrZWZpbGVdCiAgICAgICAgZ2VuZXJhdGUgcmMubyBmcm9tIHN5c3Jlcy5vIGFuZCBzeXNyZXNibS5vLiBBZGRlZCAtbGZsCgogICAgICAgICogW3JjL3JjLnldCiAgICAgICAgY2hhbmdlIHN0eWxlIGhhbmRsaW5nIHRvIGFsbG93ICggUzEgfCBTMiApIHwgUzMKCiAgICAgICAgKiBbcmMvc3lzcmVzLnJjXQogICAgICAgICAgW3JjL3N5c3Jlc2JtLnJjXQogICAgICAgIFB1dCBiaXRtYXBzIGFuZCBpY29ucyB0byBzeXNyZXNibSwgZXZlcnl0aGluZyBlbHNlIHRvIHN5c3JlcwoKICAgICAgICAqIFtyYy93aW5lcmMuY10KICAgICAgICAgIFtyYy93aW5lcmMuaF0KICAgICAgICBBZGRlZCAtbywgLWMgZmxhZ3MuIE5ldyBmdW5jdGlvbiBzZXRfb3V0X2ZpbGUuIE91dHB1dCB0byBmaWxlcy4KCiAgICAgICAgKiBbd2luZG93cy9kaWFsb2cuY10KICAgICAgICBEaWFsb2dCb3hJbmRpcmVjdFB0ciwgRGlhbG9nQm94SW5kaXJlY3RQYXJhbVB0cjogTmV3IGZ1bmN0aW9ucyAKCiAgICAgICAgKiBbd2luZG93cy9ub25jbGllbnQuY10KICAgICAgICBDcmVhdGUgQWJvdXRXaW5lIGRpYWxvZyBmcm9tIHRlbXBsYXRlIHBvaW50ZXIKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE9jdCAzMCAxMzowMToxOCAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglCdWcgZml4IGZvciBTU19JQ09OIGNvbnRyb2xzLgoKCSogW2lmMTYzMi9JbWFrZWZpbGVdCglGaXhlZCBjYWxsLm8gZGVwZW5kZW5jaWVzLgoKCSogW29iamVjdHMvY2xpcHBpbmcuY10gW29iamVjdHMvZGMuY10KCUZpeGVkIHZpc2libGUgcmVnaW9uIGhhbmRsaW5nLiBoVmlzUmduIGlzIGFsd2F5cyBub24tbnVsbCBub3cuCgoJKiBbd2luZG93cy9kY2UuY10KCUJ1ZyBmaXggaW4gR2V0RENFeCBmb3IgQ1NfT1dOREMgd2luZG93cy4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy9wYWludGluZy5jXQoJRml4ZXMgdG8gaWNvbiB3aW5kb3cgZHJhd2luZy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQSBmZXcgZml4ZXMgaW4gU2V0V2luZG93UG9zKCkuCgpTdW4gT2N0IDMwIDEyOjUwOjI0IDE5OTQgIE1pY2hhZWwgUGF0cmEgIDxtaWNreUBtYXJpZS5waHlzaWsudHUtYmVybGluLmRlPgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglCaXRCbHQoKTogQml0Qmx0IGlzIG5vdyBhYmxlIHRvIGhhbmRsZSBhbnkgcmFzdGVyIG9wZXJhdGlvbi4gSWYKCXRoZSByZXF1ZXN0IGNhbid0IGJlIHBhc3NlZCB0byBYV2luZG93cyBkaXJlY3RseSwgaXQncyBxdWl0ZQoJc2xvdywgdGhvdWdoLgoKCSogWyovKi5jXQoJICBbbWlzYy9tYWluLmNdCglJbXByb3ZlbWVudHMgb2YgdGhlIHN5c3RlbSBmb3IgaGFuZGxpbmcgZGVidWcgbWVzc2FnZXMuIE9wdGlvbnMgYXJlCglub3cgYWxzbyBsb2FkZWQgZnJvbSAvdXNyL2xpYi9YMTEvYXBwLWRlZmF1bHRzL1dpbmUgKGluc2VydAoJKmRlYnVnb3B0aW9uczogK3h4eCB0aGVyZSBpZiB5b3Ugd2FudCB0byBoYXZlIHR1cm4gbWVzc2FnZXMgeHh4IG9uKS4KCgkqIFtjb250cm9scy9tZW51LmNdCglEZXN0cm95TWVudSgpOiBUaGUgd2hvbGUgd2luZG93IHdvbid0IGJlIGRlc3Ryb3llZCBhcyBhIHNpZGVlZmZlY3QKCWFueSBsb25nZXIuCgoJKiBbbWlzYy9maWxlLmNdCglPcGVuRmlsZSgpOiBGaXhlZCBidWcgaW4gc2VhcmNoaW5nIGluIHN5c3RlbS93aW5kb3ctZGlyZWN0b3J5LgoKU3VuIE9jdCAzMCAxMjoyNTo1MyAxOTk0ICBKaW1teSBUaXJ0YXdhbmdzYSA8ajB0MjUyN0B0YW0yMDAwLnRhbXUuZWR1PgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQnVnIGZpeCBmb3Igd2luZG93IHJlbGF0ZWQgc3RydWN0dXJlcy4KCURDQiBhbmQgQ09NU1RBVCBhcmUgYWZmZWN0ZWQuIFRoZXkgbXVzdCBiZSBwYWNrZWQuCgoJKiBbbWlzYy9jb21tLmNdCglCdWcgZml4IGZvciBDT00gcG9ydHM6CglEaWFsIGFuZCBkaWFsb2cgd2luZG93IGluIHRlcm1pbmFsLmV4ZSBub3cgd29ya3MuCglOb24gc2VxdWVudGlhbCBDT00gYXNzaWdubWVudHMgaW4gd2luZS5jb25mIHNob3VsZCBub3QgYnJlYWsgbm93LgoJQmF1ZHJhdGUgY2FuIGJlIHNwZWNpZmllZCBpbiB3aW5lLmNvbmYgdG8gb3ZlcmNvbWUgYmF1ZHJhdGUgbGltaXRhdGlvbgoJaW4gbXN3aW5kb3cuIFNlZSBzYW1wbGUgd2luZS5pbmkKCgkqIFtpbmNsdWRlL2NvbW0uaF0KCWFkZCBiYXVkcmF0ZSBmaWVsZCB0byBEb3NEZXZpY2VTdHJ1Y3RyZQoKCSogW29iamVjdC9mb250LmNdCglCdWcgZml4IGZvciBmb250IGFzc2lnbm1lbnQuCglVc2UgcGFpcnMgb2YgZm91bmRyeSBhbmQgZmFtaWx5IGZvbnRuYW1lcyBpbiBYMTEgdG8gY29ycmVzcG9uZCB3aXRoCgl3aW5kb3cncyBmb250cy4KCVB1dCBmb250IGFzc2lnbm1lbnQgaW5pIHdpbmUuaW5pLgoKCSogW3dpbmUuaW5pXQoJQWRkaW5nIG9wdGlvbmFsIGJhdWRyYXRlIGFmdGVyIHBvcnQgbmFtZSBpbiAic2VyaWFscG9ydHMiIHNlY3Rpb24KCUFkZCBuZXcgc2VjdGlvbiwgImZvbnRzIi4KCSJkZWZhdWx0IiBpcyBzcGVjaWFsIGtleSBpbiAiZm9udHMiIHRvIG1hdGNoIGFueSB1bm1hdGNoIHdpbmRvdyBmb250LgoKT2N0IDI5LCA5NCAobmV3IGFkZHJlc3MpIHdpbmVAdHJnY29ycC5ta3NpbmZvLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2lmMTYzMi9yZWxheS5jXQoJKiBbaWYxNjMyL2NvbW1kbGcuc3BlY10gCU5ldyBmaWxlLgoJKiBbbWlzYy9jb21tZGxnLmNdIAkJCU5ldyBmaWxlLgoJKiBbaW5jbHVkZS9jb21tZGxnLmhdIAkJTmV3IGZpbGUuCglCZWdpbiBvZiBhbiBlbXVsYXRlZCBDT01NRExHIERMTCwgYnVpbHQtaW4gZm9yIG5vdy4KCShCVFcsIGlmIHlvdSB3YW50IHRvIHN3aXRjaCBiZXR3ZWVuIGJ1aWx0LWluICYgMTZiaXRzIENvbW1EbGcsIG9ubHkgCgl0aGluZyB5b3UgbmVlZCB0byBkbyBpcyB0byBwdXQgdGhlIHJlYWwvZHVtbXkgbmFtZSBpbiBmaWxlIHJlbGF5LmMpCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCgkqIFtjb250cm9scy9jb21iby5jXQoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJRmV3IGJ1ZyBmaXhlcyBhbmQvb3IgY29zbWV0aWMuCgoJKiBbbWlzYy9hdWRpby5jXQoJKiBbbWlzYy9tbWF1eC5jXQoJYnVnIGZpeGVzIGFuZCBmbGFncyByZXR1cm5lZCB0byBlbXVsYXRlIFNCMTYuCgoJKiBbbWlzYy9taWRpLmNdIAkJCU5ldyBmaWxlLgoJc2tlbGV0b24gZm9yICdNaWRpJyBNTVNZU1RFTSAmIE1DSSBkcml2ZXIuCgoJKiBbbWlzYy9tY2lhbmltLmNdIAkJCU5ldyBmaWxlLgoJc2tlbGV0b24gZm9yICdBbmltYXRpb24xJyBNQ0kgZHJpdmVyLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBZGQgbmV3IHN0dWIgZm9yIEdldExhc3RBY3RpdmVXaW5kb3coKS4KClR1ZSBPY3QgMjUgMDk6MTc6MjUgMTk5NCAgT2xhZiBGbGViYmUgIChmbGViYmVAdGF0LnBoeXNpay51bmktdHVlYmluZ2VuLmRlKQoKCSogW2lmMTYzMi9jYWxsLlNdIFt0b29scy9idWlsZC5jXQogICAgICAgICAgIFN1cHBvcnQgZm9yIEVMRiBmb3JtYXQuIChOb3QgY29tcGxldGUpCgpTdW4gT2N0IDIzIDAwOjUxOjUwIDE5OTQgIFBhdWwgRmFsc3RhZCAgKHBmQHpvb2YpCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUFkZCBzdHVicyBmb3IgQXJyYW5nZUljb25pY1dpbmRvd3MoKSwgZXRjLgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCUFkZCBJc0JhZCpQdHIoKSBmdW5jdGlvbnMuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJQWRkIHRlc3RfbWVtb3J5KCksIGZvciB1c2Ugd2l0aCBJc0JhZCpQdHIoKS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQWRkIHN0dWJzIGZvciBUaWxlQ2hpbGRXaW5kb3dzKCksIGV0Yy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJSXNXaW5kb3coKSBzaG91bGRuJ3QgY3Jhc2ggaWYgaXQncyBnaXZlbiBhIGJhZCBoYW5kbGUuCglBZGQgc3R1YiBmb3IgR2V0TGFzdEFjdGl2ZVBvcHVwKCkuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJSW1wbGVtZW50IHRoZSBJc0JhZCpQdHIoKSBmdW5jdGlvbnMuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJUmV0dXJuIHRoZSBmdWxsIGxvbmd3b3JkIG9mIHRoZSBpdGVtIGRhdGEgaW4gTEJfR0VUSVRFTURBVEEuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRG9uJ3QgbGV0IHRoZSB1c2VyIHNlbGVjdCBhbiBhcmVhIHBhc3QgdGhlIGVuZCBvZiB0aGUgdGV4dC4KCgkqIFtvYmplY3RzL3RleHQuY10KCUluIERyYXdUZXh0KCksIHRoZSBjb2RlIHRvIGRlbGV0ZSBjcmxmcyBhbHNvIHJlbW92ZWQgbXVsdGlwbGUKCWNvbnNlY3V0aXZlIG5ld2xpbmVzLiAgQWxzbywgdXNpbmcgRFRfQ0FMQ1JFQ1QgZGlkbid0IHJldHVybgoJdGhlIHJpZ2h0IGhlaWdodCwgYW5kIHRoZSB3aWR0aCB3YXNuJ3QgcmV0dXJuZWQgYXQgYWxsLgoJVGhpcyBjYXVzZWQgTWVzc2FnZUJveGVzIHRvIGJlIG1pc3NpbmcgbXVjaCBvZiB0aGVpciB0ZXh0LgoKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglTY3JvbGxXaW5kb3dbRXhdIGRpZG4ndCB3b3JrIHJpZ2h0IHdpdGggbnVsbCBMUFJFQ1QgYXJndW1lbnRzLgoKRnJpIE9jdCAyMSAyMTo0NzoxOSAxOTk0ICBQYXVsIEZhbHN0YWQgIChwZkB6b29mLmN0cy5jb20pCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJRml4ZWQgaW50MjEgMHg0MiBoYW5kbGVyIHRvIHByb3Blcmx5IGFzc2VtYmxlIDMyLWJpdCBzZWVrIHB0ci4KCgkqIFttaXNjL3Byb3BlcnR5LmNdCglGaXhlZCBpbnZlcnRlZCBsb2dpYyBpbiBFbnVtUHJvcHMoKSwgYW5kIGNoYW5nZWQgQ2FsbEJhY2sxNigpCgljYWxsIHRvIHVzZSBuZXcgYXJnIGZvcm1hdC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRml4ZWQgQ2FsbEJhY2sxNigpIGNhbGwgaW4gRW51bVtDaGlsZF1XaW5kb3dzIHRvIHVzZSBuZXcgYXJnCglmb3JtYXQ7IHRoaXMgZml4ZXMgY3Jhc2hlcyBpbiBlbnVtIHByb2NlZHVyZXMuCgpXZWQgT2N0IDE5IDIxOjMwOjAwIFBEVCAxOTk0CQltYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdQoKCSogW21pc2MvY2xpcGJvYXJkLmNdCgkgIFt3aW5kb3dzL2V2ZW50LmNdCgkgIFt3aW5kb3dzL21lc3NhZ2UuY10KCUFkZGVkIGN1dCBhbmQgcGFzdGUgYmV0d2VlbiBXaW5lIGFuZCBvdGhlciBYIGNsaWVudHMgdmlhCgl0aGUgUFJJTUFSWSBzZWxlY3Rpb24uIFRleHQgb25seSB0aGlzIHRpbWUuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRURJVF9MaW5lTGVuZ3RoLCBFRElUX1RleHRMaW5lIHJldHVybiAwIGZvciBsaW5lcyBhZnRlciBsYXN0IG9uZS4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJU2VuZCBXTV9TWVNDT01NQU5EIHRvIG92ZXJsYXBwZWQgYW5jZXN0b3Igd2luZG93LCAKCW5vdCB0aGUgcmVjZWl2ZXIgb2YgV01fU1lTS0VZRE9XTgoKU2F0IE9jdCAyMiAxNTowMTowMiAxOTk0ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQGJyYWRmb3JkLmFjLnVrPgoKICAgICAgICAqIFtjb250cm9scy9lZGl0LmNdCglDbGllbnRXaWR0aCgpL0NsaWVudEhlaWdodCgpIG1hY3JvczogcmV0dXJuIDAgaWYgc2l6ZSB3b3VsZAoJYmUgbmVnYXRpdmUKCUVESVRfU3RyTGVuZ3RoKCk6IHRha2VzIHVuc2lnbmVkIGNoYXIqIGluc3RlYWQgb2YgY2hhcioKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglMaXN0Qm94V25kUHJvYygpOiBpbiAiY2FzZSBXTV9NT1VTRU1PVkUiIC0gc2V0IGxwaGwgYXQgc3RhcnQgb2YKCWNhc2UgaW5zdGVhZCBvZiBpbiBlYWNoIHBsYWNlIHJlcXVpcmVkIChpdCB3YXMgb21pdHRlZCBpbgoJc29tZSBwbGFjZXMgY2F1c2luZyBwcm9ibGVtcyEpCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTUVOVV9DYWxjSXRlbVNpemUoKTogZG9uJ3QgdHJ5IHRvIGZpbmQgc2l6ZSBvZiBhIHRleHQgaXRlbQoJaWYgdGhlIHBvaW50ZXIgaXMgTlVMTAoKCSogW2luY2x1ZGUvaGVhcC5oXQoJYWRkZWQgZGVmaW5pdGlvbiBvZiBIRUFQX0xvY2FsSW5pdCgpCgoJKiBbaW5jbHVkZS9tc2Rvcy5oXQoJcmVtb3ZlZCBidWdneSBwb2ludGVyKCkgbWFjcm8gKHVzZSBTQUZFTUFLRVBUUigpIGZyb20gc2VnbWVtLmgKCWluc3RlYWQpCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglJUENDb3B5U2VsZWN0b3IoKTogYWRkZWQgbWlzc2luZyBmbGFncyB0byBzaG1nZXQoKSBjYWxsCgk/IGRvZXMgdGhpcyBicmVhayBsaW51eCAtIEkgYWRkZWQgdGhlc2UgZmxhZ3MgaW4gYSBwcmV2aW91cwoJcGF0Y2ggYnV0IHRoZXkgd2VyZSBtaXNzaW5nIGluIHRoZSBjb3JyZXNwb25kaW5nIHJlbGVhc2UgPwoKCSogW2xvYWRlci9zaWduYWwuY10KCXdpbl9mYXVsdCgpOiBhZGRlZCBtaXNzaW5nIGRlZmluaXRpb25zIG9mIGksIGR1bXAgZm9yIHRob3NlCglub3QgcnVubmluZyBOZXRCU0Qgb3IgbGludXgKCgkqIFttaXNjL2Rvc19mcy5jXQoJRE9TX0dldEN1cnJlbnREaXIoKTogbWFkZSB0ZW1wW10gc3RhdGljIHNvIGl0IGNhbiBiZSBzYWZlbHkKCXJldHVybmVkCgoJKiBbbWlzY2VtdS9pbnQyMS5jLGludDI1LmMsaW50MjYuY10KCUNoYW5nZWQgYWxsIGludm9jYXRpb25zIG9mIHBvaW50ZXIoKSB0byBTQUZFTUFLRVBUUigpLiBJbmNsdWRlZAoJc2VnbWVtLmggd2hlcmUgbmVjZXNzYXJ5LgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglDcmVhdGVEaWFsb2dJbmRpcmVjdFBhcmFtKCk6IENoYW5nZWQgSEVBUF9Jbml0KCkgY2FsbCB0byAKCUhFQVBfTG9jYWxJbml0KCksIHJlbW92ZWQgcmVkdW5kYW50IHZhcmlhYmxlcwoKU2F0IE9jdCAyMiAwMDoyOTo0MSBNRVQgMTk5NAkJICBEYWcgQXNoZWltIChkYXNoQGlmaS51aW8ubm8pCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10gW2xvYWRlci9tYWluLmNdIFtsb2FkZXIvbmVfaW1hZ2UuY10KCSAgW21pc2MvZXhlYy5jXSBbbWlzY2VtdS9pbnQxMC5jXSBbbWlzY2VtdS9pbnQyMS5jXQoJICBbb2JqZWN0cy9iaXRibHQuY10gW29iamVjdHMvbWV0YWZpbGUuY10KCVJld3JpdHRlbiBtb3JlIHByaW50ZidzIHRvIHVzZSB0aGUgbmV3IGRlYnVnZ2luZyBzeXN0ZW0sIGFuZAoJbWFkZSB3aW5lIGxlc3MgdmVyYm9zZSBwZXIgZGVmYXVsdC4gVXNlICItZGVidWdtc2cgK21vZHVsZSIKCXRvIGdldCAoYWxtb3N0KSB0aGUgc2FtZSBiZWhhdmlvciBhcyBiZWZvcmUuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBPY3QgMTYgMTM6Mjk6MDcgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJSW1wbGVtZW50ZWQgV01fR0VURExHQ09ERSwgV01fU0VURk9OVCwgQk1fU0VUU1RZTEUsIEJNX1NFVENIRUNLLAoJQk1fU0VUU1RBVEUuCglJbXBsZW1lbnRlZCBkZWZhdWx0IGJ1dHRvbiBwYWludGluZy4KCU9wdGltaXNlZCByZWRyYXdpbmcuCglGaXhlZCBvd25lci1kcmF3IGJ1dHRvbnMuCgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglJbXBsZW1lbnRlZCBXTV9TRVRGT05ULgoJQSBmZXcgb3B0aW1pc2F0aW9ucyBpbiBwYWludGluZyBjb2RlLgoJQnVnIGZpeCBmb3IgU1NfU0lNUExFIGNvbnRyb2xzLgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJUHJlbGltaW5hcnkgR2V0Q29kZUhhbmRsZSgpLgoKCSogW2lmMTYzMi9nZGkuc3BlY10KCUNoYW5nZWQgJ3Bhc2NhbCcgdG8gJ3Bhc2NhbDE2JyBldmVyeXdoZXJlIGl0J3MgbmVlZGVkLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJRml4ZWQgYSBmZXcgZGF0YSBzdHJ1Y3R1cmVzLgoKCSogW21lbW9yeS9oZWFwLmNdCglCdWcgZml4IGluIEhFQVBfUmVBbGxvYygpLgoKCSogW21pc2MvY3Vyc29yLmNdCglGaXhlZCBTZXRDdXJzb3IoKS4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJRml4ZWQgUGF0Qmx0KCkgd2hlbiB1c2luZyBCTEFDS05FU1Mgb3IgV0hJVEVORVNTIGNvZGVzLgoKCSogW29iamVjdHMvZm9udC5jXQoJQmV0dGVyIGZvbnQgbWFwcGluZyBjb2RlLgoJSW1wbGVtZW50ZWQgR2V0VGV4dEZhY2UoKS4KCgkqIFtvYmplY3RzL3JlZ2lvbi5jXQoJQnVnIGZpeCBpbiBSRUdJT05fTWFrZVBpeG1hcCgpLgoJRmFzdGVyIHJlZ2lvbiBjb3B5aW5nLgoKCSogW29iamVjdHMvdGV4dC5jXQoJSW1wbGVtZW50ZWQgRXh0VGV4dE91dCgpLgoJSW1wbGVtZW50ZWQgRFRfTk9DTElQIHN0eWxlIGZvciBEcmF3VGV4dCgpLgoKCSogW3dpbmRvd3MvZGMuY10KCUZyZWUgdGhlIGJpdG1hcCB3aGVuIGRlbGV0aW5nIGEgbWVtb3J5IERDLgoKCSogW3dpbmRvd3MvZGNlLmNdCglBZGRlZCBzdXBwb3J0IGZvciB3aW5kb3dzIHRoYXQgaGF2ZSBubyBhc3NvY2lhdGVkIFggd2luZG93LgoJSW1wbGVtZW50ZWQgRENYX0NMSVBTSUJMSU5HUyBhbmQgRENYX1BBUkVOVENMSVAgaW4gR2V0RENFeCgpLgoKCSogW3dpbmRvd3MvZGVmZGxnLmNdCglJbXBsZW1lbnRlZCBkZWZhdWx0IHB1c2ggYnV0dG9uIGhhbmRsaW5nIGFuZCBETV9TRVRERUZJRC4KCUltcGxlbWVudGVkIFdNX05FWFRETEdDVEwuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUltcGxlbWVudGVkIGRlZmF1bHQgcHVzaCBidXR0b24gaGFuZGxpbmcuCglCZWdpbm5pbmcgb2YgYSBrZXlib2FyZCBpbnRlcmZhY2UgaW4gZGlhbG9ncwoJKGRvZXMgbm90IHJlYWxseSB3b3JrIHlldCkuCglGaXhlZCBkaWFsb2dzIHRoYXQgdXNlIGEgc3BlY2lhbCBmb250LgoKCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvZm9jdXMuY10KCUFkZGVkIHN1cHBvcnQgZm9yIG5vbi1YIHdpbmRvd3MuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJUmV3cml0dGVuIEZsb29kRmlsbCgpIGFuZCBpbXBsZW1lbnRlZCBFeHRGbG9vZEZpbGwoKS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUNsZWFuZXIgaGFyZHdhcmUgbWVzc2FnZXMgYW5kIFggZXZlbnRzIGhhbmRsaW5nLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdIFt3aW5kb3dzL3BhaW50aW5nLmNdCglJbXBsZW1lbnRlZCBXTV9TRVRSRURSQVcuCgoJKiBbd2luZG93cy93aW4uY10KCU9ubHkgY3JlYXRlIGFuIFggd2luZG93IGZvciB0b3AtbGV2ZWwgd2luZG93cywgb3IgZm9yIHRoZSBkZXNrdG9wLgoJQ2hpbGQgd2luZG93cyBub3cgdXNlIHRoZWlyIHBhcmVudCdzIGRyYXdhYmxlLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglCZWdpbm5pbmcgb2Ygc3VwcG9ydCBmb3Igbm9uLVggd2luZG93cyAoc3RpbGwgc29tZXdoYXQgYnJva2VuKS4KCUltcGxlbWVudGVkICpEZWZlcldpbmRvd1BvcygpLgoKCSogWyovSW1ha2VmaWxlXQoJQ2xlYW5lZCB1cCBzb21lIEltYWtlZmlsZXMuCglNb3ZlZCBkYy5jIGZyb20gd2luZG93cy8gdG8gb2JqZWN0cy8uCglNb3ZlZCBjdXJzb3IuYyBmcm9tIG1pc2MvIHRvIHdpbmRvd3MvLgoKU3VuIE9jdCAxNiAxMjoyMTo1MiAxOTk0ICBNaWNoYWVsIFBhdHJhIDxtaWNreUBtYXJpZS5waHlzaWsudHUtYmVybGluLmQ0MDAuZGU+CgoJKiBbaW5jbHVkZS9kZWJ1Zy5oXQoJICBbaW5jbHVkZS9zdGRkZWJ1Zy5oXQoJICBbKi8qLmNdCiAgICAgICAgUmV3cml0dGVuIGFsbCB0aGUgY2FsbHMgdG8gcHJpbnRmIGZvciBkaXNwbGF5aW5nIGRlYnVnLWluZm9ybWF0aW9uCiAgICAgICAgKG1lc3NhZ2VzIGxpa2UgIkxvYWRJbWFnZTogbG9hZGluZyBTT0wgKFNPTC5FWEUpIiBldGMuKSAKICAgICAgICBBZGRlZCBvcHRpb24gIi1kZWJ1Z21zZyIgdG8gV2luZS4gRXhhbXBsZTogIi1kZWJ1Z21zZyArYWxsIiB3aWxsIHR1cm4KICAgICAgICBhbGwgdGhlc2UgbWVzc2FnZXMgb24sICItZGVidWdtc2cgLWRsbCIgd2lsbCB0dXJuIGFsbCBtZXNzYWdlcyAKCWNvbmNlcm5pbmcgRExMcyBvZmYuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUFkZGVkIHNvbWUgaGFuZGxpbmcgZm9yIGNvbWJvIGNvbnRyb2xzIHdpdGggb3duZXJkcmF3LXN0eWxlcwogICAgICAgIChqdXN0IGNyZWF0aW5nIGFuZCBwYXNzaW5nIHRoZSBuZWNlc3NhcnkgbWVzc2FnZXMgdG8gdGhlIAoJY29ycmVzcG9uZGluZyBsaXN0Ym94IGNvbnRyb2w7IHRoZSBlZGl0LWNvbnRyb2wgbmVlZHMgdG8gYmUKCXJlcGxhY2VkIHdpdGggc29tZXRoaW5nIGVsc2UpLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCSAgW3dpbmRvd3MvZGlhbG9nLmNdCglBZGRlZCBzdXBwb3J0IGZvciB1c2Ugb2YgZ2xvYmFsIGhlYXAgbWVtb3J5IGluIGRpYWxvZ3Mgd2l0aCAKCWVkaXQgY29udHJvbHMuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgaXRlbSBkYXRhLgoJTGlzdEJveEluc2VydFN0cmluZygpOiBGaXhlZCBidWcgZm9yIGVsZW1lbnRzIHdoaWNoIGFyZSBub3QgaW5zZXJ0ZWQKCWFmdGVyIHRoZSBjdXJyZW50bHkgbGFzdCBlbGVtZW50LgoJCgkqIFttaXNjL2Rvc19mcy5jXQoJICBbbWlzY2VtdS9pbnQyMS5jXQoJRE9TX1ZhbGlkRGlyZWN0b3J5KCk6IENoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gc3RyaW5nIGlzIGluIGZhY3QgdGhlCgl2YWxpZCBuYW1lIG9mIGEgZGlyZWN0b3J5LgoKU2F0IE9jdCAxNSAxNzozNTowMCBQRFQgMTk5NAkJPG1hcnRpbkBjcy5jc3VmcmVzbm8uZWR1PgoKCSogW0ltYWtlZmlsZV0KCWdlbmVyYXRlIHdpbmUuc3ltIGFmdGVyIGNyZWF0aW5nIHdpbmUKCgkqIFtkZWJ1Z2dlci9kYmcueV0KCWxvYWQgIndpbmUuc3ltIiB3aGVuIGVudGVyaW5nIGRlYnVnZ2VyCgoJKiBbZGVidWdnZXIvaW5mby5jXQoJc3ltYm9saWMgYmFja3RyYWNlIGZvciAzMi1iaXQgc3RhY2suIEJyZWFrcyAxNi1iaXQgYnQuCgpTdW4gU2VwICAyNSAxMjowMDowMCBQRFQgMTk5NCAgIDxtYXJ0aW5Ab3NpcmlzLmNzLmNzdWZyZXNuby5lZHU+CgoJKiBbcmMvcmMueV0gW3JjL3JjLmhdIFtyYy9yYy5sXSBbcmMvd2luZXJjLmNdCglGaWxlcyBjcmVhdGVkCgpTdW4gU2VwIDE4IDExOjA0OjQ1IE1FVCBEU1QgMTk5NCAgICAgICAgICBEYWcgQXNoZWltIChkYXNoQGlmaS51aW8ubm8pCgoJKiBbbWlzYy9zcHkuY10KCUV4Y2x1ZGUgYW5kIEluY2x1ZGUgbm8gbG9uZ2VyIHJlcXVpcmVzIGEgdGVybWluYXRpbmcgJzsnIHRvCglyZWdpc3RlciB0aGUgbGFzdCBjb21wb25lbnQuCgpUaHUgU2VwIDE1IDIzOjEwOjA5IE1FVCBEU1QgMTk5NCAgICAgICAgICBEYWcgQXNoZWltIChkYXNoQGlmaS51aW8ubm8pCgoJKiBbQ29uZmlndXJlXQoJUmV3cm90ZSBtdWNoIG9mIGl0LiAgQWRkZWQgY2FwYWJpbGl0eSB0byBnZW5lcmF0ZSBhIHdpbmUuaW5pCglmaWxlLiAgQ29tbWVudGVkIG91dCB0aGUgcHJvY2Vzc29yIGVtdWxhdG9yIG9wdGlvbnMgdW50aWwgdGhhdAoJYmVjb21lcyBpbnRlcmVzdGluZy4gIEdpdmVzIGEgd2FybmluZyBpZiBpdCBzZWVzIGFueSAqLnJlagoJZmlsZXMuICBJIGhvcGUgSSBoYXZlbid0IGFzc3VtZWQgdG8gbXVjaCBhYm91dCB0aGUgc2hlbGwvT1Mgc28KCXRoYXQgaXQgYnJlYWtzIHVuZGVyICpCU0QuCgoJKiBbbWlzYy9kb3NfZnMuY10KCVJlbW92ZWQvY2hhbmdlZCBjYWxscyB0byBUb1VuaXgoKSAod2hpY2ggY2FsbHMgdG9sb3dlcigpKSBzbwoJdGhhdCB0aGUgcGFydCBvZiB0aGUgcGF0aG5hbWUgd2hpY2ggY29ycmVzcG9uZCB3aXRoIHRoZSBkcml2ZQoJbGV0dGVyIG9uIERPUyBubyBsb25nZXIgd2lsbCBiZSBtYXBwZWQgdG8gbG93ZXJjYXNlLiAgVGhpcwoJbWVhbnMgdGhhdCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gaGF2ZSB1cHBlcmNhc2UgbGV0dGVycyBpbgoJdGhlIFtkcml2ZXNdIHNlY3Rpb24gb2Ygd2luZS5pbmkuCgoJKiBbTElDRU5TRV0KCUNvc21ldGljIGNoYW5nZXMgc28gdGhhdCBpdCBkaXNwbGF5cyBiZXR0ZXIgaW4gdGhlIHdpbmRvdyB5b3UKCWdldCBmcm9tIHByZXNzaW5nICJDcmVkaXRfTGljZW5zZSIgaW4gdGhlICJBYm91dCBXSU5FIiB3aW5kb3cuCgpTdW4gQXVnIDIxIDIxOjEyOjA2IE1FVCBEU1QgMTk5NAk8ZXJpa0B4czRhbGwubmw+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJTG9hZE1lbnUoKSBtb3ZlZCB0byBsb2FkZXIvcmVzb3VyY2UuYy4KCgkqIFttaXNjL21haW4uY10KCUFkZGVkIHN0dWIgZm9yIEZpbGVDRFIoKS4KCgkqIFtpbmNsdWRlL3BlZXhlLmhdCglBZGRlZCwgZnJvbSBFcmljJ3MgcGUtdGVzdC4KCgkqIFtpbmNsdWRlL3Jlc291cmNlLmhdCglBZGRlZC4KCgkqIFtsb2FkZXIvcmVzb3VyY2VzLmNdCglSZW1vdmVkIGR1cGxpY2F0ZWQgY29kZSBpbiAqUmVzb3VyY2UoKSBmdW5jdGlvbnMuCglNb3ZlZCBORS1wcm9ncmFtIHNwZWNpZmljIGZ1bmN0aW9ucyBpbnRvIG5lX2ltYWdlLmMuCglNb3ZlZCBORS1maWxlZm9ybWF0IGZ1bmN0aW9ucyB0byBuZV9yZXNvdXJjZS5jLgoKCSogW3BlX2ltYWdlLmNdIFtwZV9yZXNvdXJjZS5jXQoJQWRkZWQuIE5vdGhpbmcgaW1wbGVtZW50ZWQgdG8gcnVuIFBFLWV4ZWN1dGFibGVzLCByZXNvdXJjZQoJbG9hZGluZyBvbmx5LgoKCSogW21pc2MvZmlsZS5jXQoJQ2hhbmdlZCBPcGVuRmlsZSgpIHRvIHVzZSBtYWNyb3MuCgoJKiBbbWlzYy9zaGVsbC5jXQoJQWRkZWQgTlVMTC1wdHIgY2hlY2tzIHRvIFNoZWxsQWJvdXQoKS4KCgkqIFttaXNjZW11L2ludDIxLmNdCglGaXhlZCBhIGZldyB0eXBvcy4KCgkqIFttaXNjZW11L2tlcm5lbC5jXQoJQWRkZWQgX0RJID0gX0RTLCB0byBwdXQgdGhlIGNhbGxlcidzIGluc3RhbmNlIGluIERJLiBEb2Vzbid0Cgl3b3JrIHByb3Blcmx5IGlmIGNhbGxlciBjaGFuZ2VkIERTIDotKAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgQXVnIDI1IDE1OjI0OjM2IEVEVCAxOTk0ICAgICAgICAgICAgPGpyaWNoYXJkQGNzLnVtbC5lZHU+CgogICAgICAgICogW2luY2x1ZGUvd2luLmhdCiAgICAgICAgUmVtb3ZlZCBzZXBlcmF0ZSBYIHdpbmRvdyBmb3IgaWNvbiwgYWRkZWQgaWNvbiB3aWR0aCxoZWlnaHQuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglDb21tZW50ZWQgb3V0IHRoZSBvbGQgU1dfeHh4IGVtdW0gYW5kIGFkZGVkIGRlZmluZXMgc2luY2UKCXRoZXkgYXJlbid0IGVudW1lcmF0ZWQuCgoJKiBbd2luZG93cy9kY2UuY10KICAgICAgICBSZW1vdmVkIHNvbWUgb2xkZXIgSXNJY29uaWMgY2hlY2tzIGZyb20gR2V0RENFeCgpLCBmdW5jdGlvbmFsaXR5CiAgICAgICAgaXMgbm93IGluIG5vbmNsaWVudCBhbmQgZ2VuZXJpYyB3aW5lIHdpbmRvdyBoYW5kbGluZyBjb2RlLgogICAgICAgIExvdHMgb2YgdGhhbmtzIHRvIEFsZXhhbmRyZSBKdWxsaWFyZCBhbGwgdGhlIGhpbnRzIGFuZAogICAgICAgIGhlbHAuLi4KCiAgICAgICAgKiBbd2luZG93cy9kZWZ3bmQuY10KICAgICAgICBSZW1vdmVkIGNhbGwgdG8gTkNfSGFuZGxlTkNQYWludEljb24oKSB1bmRlciBjYXNlIFdNX1BBSU5USUNPTiwKICAgICAgICBXTV9QQUlOVElDT04gbm93IGNhbGxzIE5DX0hhbmRsZU5DUGFpbnQuICAKCiAgICAgICAgKiBbd2luZG93cy9ldmVudC5jXQogICAgICAgIFJlbW92ZWQgSXNJY29uaWMgY2hlY2tzLgoKICAgICAgICAqIFt3aW5kb3dzL2ljb24uY10KICAgICAgICBSZW1vdmVkIGV2ZXJ5dGhpbmcgaW4gdGhpcyBmaWxlIGZvciBub3cuLi4gY291bGQgYmUgdXNlZCBsYXRlci4KICAgICAgICBJY29uIGZ1bmN0aW9uYWxpdHkgaXMgbm93IGhhbmRsZWQgYnkgdGhlIGdlbmVyaWMgd2luZSB3aW5kb3dzCiAgICAgICAgaGFuZGxpbmcgZnVuY3Rpb25zLgogICAgICAgIAogICAgICAgICogW3dpbmRvd3MvbWRpLmNdCiAgICAgICAgQWRkZWQgYSBTaG93V2luZG93IGluIE1ESVJlc3RvcmVDaGlsZCgpLiAgTURJIGNoaWxkIHdpbmRvd3Mgbm93CiAgICAgICAgc2hvdyB1cCB3aGVuIGRlaWNvbmlmaWVkLiAgUmVtb3ZlZCBJc0ljb25pYyBjaGVja3MuCgogICAgICAgICogW3dpbmRvd3MvbWVzc2FnZS5jXQogICAgICAgIFJlbW92ZWQgb2xkIGljb24gcm91dGluZXMgZnJvbSBoYXJkd2FyZV9ldmVudCgpLgoKICAgICAgICAqIFt3aW5kb3dzL25vbmNsaWVudC5jXQogICAgICAgIENoYW5nZWQgTkNfSGFuZGxlTkNDYWxjU2l6ZSgpIHNvIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzaXplCiAgICAgICAgb2YgYW4gaWNvbiB3aW5kb3cuICBNYWRlIE5DX0ludGVybmFsTkNIaXRUZXN0KCkgb24gYW4gSWNvbmljCiAgICAgICAgd2luZG93IGFsd2F5cyByZXR1cm4gSFRDQVBUSU9OLiAgTWFkZSBOQ19IYW5kbGVOQ0xCdXR0b25EYmxDbGsoKQogICAgICAgIG9uIGFuIEljb25pYyB3aW5kb3cgYWx3YXlzIHNlbmQgYSBTQ19SRVNUT1JFIG1lc3NhZ2UuCgogICAgICAgICogW3dpbmRvd3MvcGFpbnRpbmcuY10KICAgICAgICBDaGFuZ2VkIFJlZHJhd1dpbmRvdygpIHNvIGl0IGRvZXNuJ3QgcmVkcmF3IGFuIGljb25pYyB3aW5kb3cKICAgICAgICB1bmxlc3MgaXQgaGFzIHRvIChubyBpY29uIGZvciB0aGlzIGNsYXNzKS4KICAgICAgICAKICAgICAgICAqIFt3aW5kb3dzL3dpbi5jXQogICAgICAgIFJlbW92ZWQgY3JlYXRpb24gb2Ygc2VwZXJhdGUgaWNvbiB3aW5kb3cgZnJvbSBDcmVhdGVXaW5kb3dFeCgpLgogICAgICAgIAogICAgICAgICogW3dpbmRvd3Mvd2lucG9zLmNdCiAgICAgICAgQWRkZWQgc2F2aW5nIGFuZCByZXN0b3Jpbmcgb2Ygd2luZG93IHJlY3RhbmdsZSBkdXJpbmcKICAgICAgICBpY29uaWZpY2F0aW9uL2RlaWNvbmlmaWNhdGlvbiB0byBTaG93V2luZG93KCkuICBBZGRlZAoJZnVuY3Rpb25zIHRvIHJlY3Vyc2l2ZWx5IGhpZGUgYW5kIHNob3cgY2hpbGRyZW4uLi4gY2FsbGVkCglieSBTaG93V2luZG93IGR1cmluZyBpY29uaWZpY2F0aW9uL2RlaWNvbmlmaWNhdGlvbi4KClNhdCwgMjcgQXVnIDE5OTQgMTg6NDc6MzQgKzAxMDAgKE1FVCBEU1QpICBtaWNreUBtYXJpZS5waHlzaWsudHUtYmVybGluLmRlIChNaWNoYWVsIFBhdHJhKQoKICAgICAgICAqIFt3aW5kb3dzL21lc3NhZ2UuY10KICAgICAgICBXYWl0TWVzc2FnZSgpOiBGaXhlZCBoYW5kbGluZyBvZiB3bV90aW1lci1tZXNzYWdlcwoKICAgICAgICAqIFttaXNjZW11L2ludDIxLmNdCiAgICAgICAgRmluZE5leHRGQ0IoKTogUmV3cml0dGVuIHRvIHN1cHBvcnQgb3RoZXIgZnVuY3Rpb25zIHRoYW4ganVzdAogICAgICAgIHJldHVybmluZyB0aGUgdm9sdW1lIGxhYmVsCgoJKiBbbWlzYy9maWxlLmNdCglPcGVuRmlsZSgpOiBGaXggaW4gaGFuZGxpbmcgb2YgT0ZfQ1JFQVRFCgpXZWQgQXVnIDI0IDE5OjQwOjQyIFBEVCAxOTk0ICBBbmRyZXcgTGFnb2R6aW5za2kgIChhbmRyZXdAbmV0Y29tLmNvbSkKCgkqIFtpZjE2MzIvdXNlci5zcGVjXQoJQWRkZWQgU2V0UGFyZW50LgoKCSogW3dpbmRvd3Mvd2luLmNdCglBZGRlZCBTZXRQYXJlbnQuCgpGcmkgQXVnIDE5IDE2OjM3OjAwIDE5OTQgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAYnJhZGZvcmQuYWMudWs+CgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglNYW55IGNoYW5nZXMgdGhyb3VnaG91dCBmaWxlIHRvIGNvcnJlY3QgaGFuZGxpbmcgb2Ygc2hhcmVkIG1lbW9yeQoJZnVuY3Rpb24gcmV0dXJuIGNvZGVzLiBGcmVlQlNEIGFuZCBTdW5PUyBzaG0gZnVuY3Rpb25zIHJldHVybgoJLTEgbm90IDAgb24gZXJyb3IuIElmIExpbnV4IGlzIGRpZmZlcmVudCwgdGhlc2UgY2hhbmdlcwoJd2lsbCBoYXZlIHRvIGJlIGJhY2tlZCBvdXQuCglDbGVhbnVwU2VsZWN0b3JzKCk6IHRoaXMgaXMgYSBuZXcgKGludGVybmFsKSBjYWxsIHRvIGZyZWUKCXVwIGFsbCBzZWxlY3RvcnMgKGFuZCBzaG0gaGFuZGxlcy9tZW1vcnkpIGZvciB1c2Ugb24gZXhpdC4KCgkqIFtpbmNsdWRlL3NlZ21lbS5oXQoJQ2hhbmdlIGNvbW1lbnQgdG8gcmVmbGVjdCBuZXcgdXNlIG9mIHNobV9rZXkKCgkqIFttaXNjL21haW4uY10KCWNhbGxlZF9hdF9leGl0KCk6IGFkZCBjYWxsIHRvIENsZWFudXBTZWxlY3RvcnMoKQoKTW9uIEF1ZyAyMiAxODoxOToyNSAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglVc2UgT0JNX0NIRUNLQk9YRVMgdG8gZHJhdyBjaGVjayBib3hlcyB3aXRoIGNvcnJlY3QgY29sb3JzLgoJRml4ZWQgYnVnIHdpdGggV01fU0VUVEVYVCBoYW5kbGluZy4KCUEgZmV3IGRyYXdpbmcgb3B0aW1pc2F0aW9ucy4KCgkqIFtjb250cm9scy9tZW51LmNdCglJbXBsZW1lbnRlZCBjb3JyZWN0IFx0IGFuZCBcYSBoYW5kbGluZyBpbiBtZW51IGl0ZW1zLgoJSW1wbGVtZW50ZWQgaGVscCBpdGVtcyAoZmx1c2ggcmlnaHQpIG9uIG1lbnUgYmFyLgoJQWRkZWQgV01fRU5URVJNRU5VTE9PUCBhbmQgV01fRVhJVE1FTlVMT09QIG1lc3NhZ2VzLgoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJRml4ZWQgU1NfSUNPTiBjb250cm9scyBhbmQgaW1wbGVtZW50ZWQgU1RNX1NFVElDT04gbWVzc2FnZQoJaGFuZGxpbmcuCgoJKiBbY29udHJvbHMvd2lkZ2V0LmNdCglTZXQgY3Vyc29yIHRvIElEQ19BUlJPVyBmb3IgYnVpbHQtaW4gY2xhc3Nlcy4KCgkqIFtpbmNsdWRlL29wdGlvbnMuaF0gW21pc2MvbWFpbi5jXQoJQmFja2luZyBzdG9yZSBpcyBub3cgb2ZmIGJ5IGRlZmF1bHQuCgoJKiBbb2JqZWN0cy9yZWdpb24uY10KCVVzZSBYIHJlZ2lvbnMgZm9yIHJlY3RhbmdsZSBhbmQgcG9seWdvbiByZWdpb25zOiAqbWFqb3IqIHNwZWVkCglpbXByb3ZlbWVudC4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJRml4ZWQgdGhlIGZpeCBmb3IgaW50ZWdlciBpZHMgaW4gY29udHJvbHMuIFNTX0lDT04gY29udHJvbHMgaW4KCWRpYWxvZ3Mgc2hvdWxkIHdvcmsgbm93LgoJSW1wbGVtZW50ZWQgRFNfQUJTQUxJR04gc3R5bGUuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJSW1wbGVtZW50ZWQgSW52ZXJ0UmduKCkuCglOZXcgaW50ZXJuYWwgZnVuY3Rpb24gR1JBUEhfRHJhd0JpdG1hcCgpIHRvIGRyYXcgYml0bWFwcyBmYXN0ZXIKCXRoYW4gd2l0aCBDcmVhdGVDb21wYXRpYmxlREMoKSArIEJpdEJsdCgpLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJRGV0ZXJtaW5pbmcgdGhlIHdpbmRvdyBmb3IgYSBtb3VzZSBtZXNzYWdlIGlzIG5vdyBkb25lIGF0CglHZXRNZXNzYWdlKCkgdGltZS4KCU1vZGlmaWVkIFBlZWtNZXNzYWdlKCkgaGFuZGxpbmcgdG8gYXZvaWQgbmVlZGxlc3NseSBmbHVzaGluZyB0aGUKCW91dHB1dCBxdWV1ZS4KCgkqIFt3aW5kb3dzL3RpbWVyLmNdCglDaGVjayBmb3IgcmVzdGFydCBvZiBhIHRpbWVyIChTZXRUaW1lciBjYWxsIHdpdGggdGhlIHNhbWUgaHduZCBhbmQKCWlkIHRoYW4gYW4gZXhpc3RpbmcgdGltZXIpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgQXVnICA5IDIzOjU4OjI5IE1FVCBEU1QgMTk5NAk8ZXJpa0BoYWNrdGljLm5sPgoKCSogW21pc2MvZmlsZS5jXQoJT3BlbkZpbGUoKTogQ29tcGxldGx5IHJld3JpdHRlbi4KCgkqIFttaXNjZW11L2ludDIxLmNdCglDcmVhdGVGaWxlKCk6IEZpeGVkIHdyb25nIG1vZGUgaW4gY2FsbCB0byBvcGVuLgoJT3BlbkV4aXN0aW5nRmlsZSgpOiBJbXBsZW1lbnRlZCBmaWxlIHNoYXJpbmcuCglGaW5kTmV4dCgpOiBGaXhlZC4KCUNyZWF0ZU5ld0ZpbGUoKTogRml4ZWQgd3JvbmcgbW9kZSBpbiBjYWxsIHRvIG9wZW4uCglmTG9jaygpOiBBZGRlZCB0byBoYW5kbGUgcmVjb3JkIGxvY2tpbmcuCglHZXRGaWxlQXR0cmlidXRlKCk6IEFkZGVkLgoJQXMgYSByZXN1bHQsIEFIID0gMHg1YywgMHgwOSwgYW5kIDB4MGIgd2VyZSBjaGFuZ2VkLgoKCSogW21pc2NlbXUvaW50MmYuY10KCUFIID0gMHgxMDogU0hBUkUgaW5zdGFsbGF0aW9uIGNoZWNrCiAKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJQWNjZXNzUmVzb3VyY2UoKTogRml4ZWQuIEEgbmV3IGZpbGUgZGVzY3JpcHRvciB3aWxsIGJlIHJldHVybmVkIGJ5CglldmVyeSBjYWxsIHRvIEFjY2Vzc1Jlc291cmNlKCkuCgoJKiBbd2luZG93cy91dGlsaXR5LmNdCgl3dnNwcmludGYoKTogRml4ZWQuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJRmluZE1lbnVJdGVtKCk6IEZpeGVkIChoYW5kbGluZyBmb3IgblBvcyA9PSAtMSBhZGRlZCkuCQoKCSogW3dpbmRvd3Mvd2luLmNdCglDcmVhdGVXaW5kb3dFeCgpOiBBZGRlZCBjYWxsIHRvIFdJTlBPU19HZXRNaW5NYXhJbmZvLgoKCSogW0NvbmZpZ3VyZV0KCUFkZGVkIHR3byBvcHRpb25zIGZvciBhIHByb2Nlc3NvciBlbXVsYXRvciB0aGF0IG1pZ2h0IGJlCglwbHVnZ2VkIGluIGxhdGVyLi4KCgkqIFtsb2FkZXIvdGFzay5jXSBbaW5jbHVkZS90b29saGVscC5oXSBbaWYxNjMyL3Rvb2xoZWxwLnNwZWNdCglDcmVhdGVOZXdUYXNrKCkgc3RvcmVzIHJlYWwgbW9kdWxlbmFtZSBpbnN0ZWFkIG9mICdUQVNLeHh4eCcuCglBZGRlZCBUYXNrRmlyc3QoKSwgVGFza05leHQoKSwgVGFza0ZpbmRIYW5kbGUoKS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglBZGRlZCBzdHViIGZvciBNZW1NYW5JbmZvKCkuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglBZGRlZCBzdHViIGZvciBHZXRUYWJiZWRUZXh0RXh0KCkuCgoJKiBbbWlzY2VtdS8qXQoJQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byByZWdpc3RlcnMuIFBsZWFzZSBkb24ndCBhY2Nlc3MKIAl0aGUgY29udGV4dCBzdHJ1Y3R1cmUuCglmaXggZm9yIEdldFN5c3RlbVRpbWUoKSBieSA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+IGFkZGVkLgoKCSogW21pc2MvbHN0ci5jXQoJRml4ZWQgYnVnIGluIEFuc2lVcHBlcigpICYgQW5zaUxvd2VyKCkuCgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCWJ1Z2ZpeCBpbiBnZXRzb2Nrb3B0KCkvc2V0c29ja29wdCgpOiB3aW5zb2NrIHVzZXMgZGlmZmVyZW50IHZhbHVlcwoJdGhhbiB1bml4LgoKCSogW29iamVjdHMvZGliLmNdCglBZGRlZCBESUJfU2V0SW1hZ2VCaXRzX1JMRVs0OF0gdG8gc3VwcG9ydCBjb21wcmVzc2VkIGJpdG1hcHMuCgpNb24gQXVnICA4IDIxOjEyOjMzIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtjb250cm9scy9lZGl0LmNdCglBZGRlZCBzdXBwb3J0IGZvciBXTV9DT1BZLCBXTV9DVVQgYW5kIFdNX1BBU1RFIG1lc3NhZ2VzLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdIFt3aW5kb3dzL2RlZmRsZy5jXSBbaW5jbHVkZS9kaWFsb2cuaF0KCU1vZGlmaWVkIGRpYWxvZyBjb2RlIHRvIGNyZWF0ZSBuZXcgaGVhcCBmb3IgZWRpdCBjb250cm9scwoJdW5sZXNzIERTX0xPQ0FMRURJVCBzdHlsZSBpcyBzZXQuCgpUaHUgQXVnICA0IDE4OjUwOjU2IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9idXR0b24uY10gW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL3N0YXRpYy5jXQoJUmVtb3ZlZCB1bm5lZWRlZCBHbG9iYWxVbmxvY2soKSBjYWxscy4KCgkqIFtjb250cm9scy9tZW51LmNdIFtpbmNsdWRlL21lbnUuaF0KCUxvdHMgb2YgY2hhbmdlcywgZml4ZWQgYSBsb3Qgb2Ygb2xkIGJ1Z3MgYW5kIGludHJvZHVjZWQgYSBsb3Qgb2YKCW5ldyBvbmVzIDotKQoJLSBDaGFuZ2VkIG1lc3NhZ2UgbG9vcCB0byB1c2UgTVNHX0dldEludGVybmFsTWVzc2FnZSgpLgoJLSBGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCB0aGUgbWFpbiB3aW5kb3cgdG8gbG9zZSBhY3RpdmF0aW9uIHdoZW4KCSAgZGlzcGxheWluZyBhIG1lbnUuCgktIENvcnJlY3RseSBzZW5kIGluaXRpYWxpc2F0aW9uIG1lc3NhZ2VzIChXTV9JTklUTUVOVVBPUFVQKS4KCS0gSW1wbGVtZW50ZWQgRW5kTWVudSgpIGFuZCBMb29rdXBNZW51SGFuZGxlKCkuCgktIENoYW5nZWQgaW50ZXJuYWwgc3RydWN0dXJlcyB0byBiZSBhcyBjb21wYXRpYmxlIGFzIHBvc3NpYmxlIHdpdGgKCSAgTVMtV2luZG93cy4KCS0gQWxsb2NhdGVkIGV2ZXJ5dGhpbmcgb24gdGhlIFVTRVIgaGVhcCBpbnN0ZWFkIG9mIHRoZSBnbG9iYWwgaGVhcC4KCS0gUHJlZml4ZWQgYWxsIGludGVybmFsIGZ1bmN0aW9uIG5hbWVzIHdpdGggTUVOVV8gYW5kIGRlY2xhcmVkCgkgIHRoZW0gc3RhdGljLgoJLSBNb3ZlZCAiQWJvdXQgV2luZS4uLiIgaGFuZGxpbmcgdG8gTkNfSGFuZGxlU3lzQ29tbWFuZCgpLgoJLSBNdWx0aS1saW5lIG1lbnVzIHNob3VsZCBub3cgd29yayBjb3JyZWN0bHkuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdIFtvYmplY3RzL2JpdG1hcC5jXQoJQWRkZWQgdGhlIHBvc3NpYmlsaXR5IHRvIGNyZWF0ZSBPRU0gYml0bWFwcyBkaXJlY3RseSBhcyBYIGJpdG1hcHMuCgoJKiBbb2JqZWN0cy9kY3ZhbHVlcy5jXSBbd2luZG93cy9kYy5jXQoJRml4ZWQgR2V0RENPcmcoKSB0byByZXR1cm4gc2NyZWVuIGNvb3JkaW5hdGVzLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJRml4ZWQgZG91YmxlLWNsaWNrIGNoZWNrcyB3aGVuIHRoZSBtZXNzYWdlIGlzIG5vdCByZW1vdmVkIGZyb20gdGhlCglxdWV1ZS4KCUZpeGVkIE1TR19HZXRJbnRlcm5hbE1lc3NhZ2UoKSB0byBzZW5kIFdNX0VOVEVSSURMRSBtZXNzYWdlcy4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQnVnIGZpeCBpbiBzeXN0ZW0gbWVudSBoaXQtdGVzdCBjYWxjdWxhdGlvbi4KCUEgZmV3IGNoYW5nZXMgZm9yIG5ldyBtZW51IGZ1bmN0aW9ucy4KClRodSBBdWcgMTEgMTc6NTE6MDIgMTk5NCAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBicmFkZm9yZC5hYy51az4KCiAgICAgICAgKiBbY29udHJvbHMvZWRpdC5jXQogICAgICAgIEJ1ZyBmaXggaW4gRWRpdF9OQ0NyZWF0ZU1lc3NhZ2UKICAgICAgICBlcy0+dGV4dGxlbiB3YXMgYmVpbmcgdXNlZCBiZWZvcmUgYmVpbmcgc2V0CgogICAgICAgICogW2NvbnRyb2xzL21lbnUuY10KICAgICAgICBCdWcgZml4IGluIE1FTlVfRHJhd01lbnVJdGVtCiAgICAgICAgZG9uJ3QgdHJ5IHRvIHdyaXRlIHRleHQgaWYgTlVMTCBwb2ludGVyIHBhc3NlZAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgQXVnICA0IDA3OjE4OjAyIDE5OTQgIE1pY2hhZWwgUGF0cmEgIDxtaWNreUBtYXJpZS5waHlzaWsudHUtYmVybGluLmRlPgoKICAgICAgICAqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUltcGxlbWVudGVkIFdhaXRNZXNzYWdlKCkgKFVTRVIuMTEyKS4KCiAgICAgICAgKiBbaWYxNjMyL3VzZXIuc3BlY10KCUFkZGVkIFdhaXRNZXNzYWdlLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglXTV9FUkFTRUJLR05EOiBBZGRlZCBzdXBwb3J0IGZvciBoYnJCYWNrZ3JvdW5kPUNPTE9SX3h4eC4KCiAgIAkqIFttaXNjZW11L2ludHsxMywyMSwyYX0uY10KICAgICAgICAqIFttaXNjZW11L0ltYWtlZmlsZV0KCSogW3NpZ25hbC9sb2FkZXIuY10KCUFkZGVkIGEgZmV3IGJhc2ljIGRpc2sgaW5mb3JtYXRpb24gYW5kIGRpYWdub3N0aWMgZnVuY3Rpb25zIHRvCglwcmV2ZW50IHByb2dyYW1zIHVzaW5nIHRoaXMgZnVuY3Rpb24gZnJvbSBjcmFzaGluZy4gQWxsIGRyaXZlcwoJYXJlIGNsYWltZWQgdG8gYmUgcmVtb3RlIG9uZXMsIHNvIGRpcmVjdCBJL08gaXNuJ3QgYWxsb3dlZC4KCgkqIFtjb250cm9scy9lZGl0LmNdCglFRElUX1dyaXRlVGV4dCgpOiBBZGRlZCBjb2RlIHRvIGNvcnJlY3RseSBlcmFzZSB0aGUgcmVtYWluaW5nIHNwYWNlCglvZiB0aGUgZWRpdC1jb250cm9sIGlmIHRoZSBzaXplIG9mIHRoZSBjb250cm9sIGhhcyBjaGFuZ2VkIHNpbmNlZCBpdCdzCgljcmVhdGlvbi4KClR1ZSBKdWwgMjYgMjI6MDU6NTQgTUVUIERTVCAxOTk0IEVyaWsgQm9zIDxlcmlrQGhhY2t0aWMubmw+CgoJKiBbaWYxNjMyL21vdXNlLnNwZWNdCglBZGRlZCBtb3VzZS5kbGwgZW50cnksIG5vIGZ1bmN0aW9ucy4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUJ1ZyBmaXggaW4gQWNjZXNzUmVzb3VyY2UoKS4gCgoJKiBbbWlzYy9rZXlib2FyZC5jXSwgYWRkZWQgW2luY2x1ZGUva2V5Ym9hcmQuaF0KCUNoYW5nZWQgZnVuY3Rpb25zIHRvIHJldHVybiBtb3JlIHVzZWZ1bCB2YWx1ZXMuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUhhY2tlZCBESUFMT0dfR2V0Q29udHJvbCgpIHRvIHN1cHBvcnQgcmVzb3VyY2VzIHdoaWNoCgloYXZlIDB4ZmYwMCAtIDB4ZmZmZiBhcyBpZC4gKiogTmVlZHMgdG8gYmUgZG9uZSBwcm9wZXJseSBieQoJc29tZW9uZSB3aG8ga25vd3MgdGhlIE5FIGZpbGVmb3JtYXQgKioKCkp1bCAyOSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUFkZCBuZXcgc3R1YiBmb3IgRW5hYmxlSEdhcmR3YXJlSW5wdXQoKSBmdW5jdGlvbi4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUFkZCBjb2RpbmcgZm9yIEhXTkRfQlJPQURDQVNUIGluIFBvc3RNZXNzYWdlKCkuCgoJKiBbbWlzYy9maWxlLmNdCglBZGQgY29kaW5nIGZvciBPcGVuRmlsZSgpIGFsc28gc2VhcmNoIGluIFdpbmRvd1BhdGhzLgoKCSogW21pc2MvbW1zeXN0ZW0uY10KCSogW21pc2MvYXVkaW8uY10KCSogW21pc2MvbW1hdXguY10KCSogW21pc2MvbWNpY2RhLmNdCglDaGFuZ2UgI2luY2x1ZGUgImxpbnV4L3NvdW5kY2FyZC5oIiBieSAjaW5jbHVkZSAic3lzL3NvdW5kY2FyZC5oIgoJQWRkIGNvZGluZyBpbiBNTUlPIGZ1bmN0aW9ucy4gTm93LCBtbWlvRGVzY2VuZCgpIGNhbiBmaW5kIFdBViBjaHVua3MuCglTbmRQbGF5U291bmQgJiBNQ0lfRUxFTUVOVCBub3cgdXNlIE1NSU8gYW5kIGFkanVzdCB0byBwcm9wZXIgZm9ybWF0cy4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gSnVsIDE4IDIzOjU1OjEzIE1FVCBEU1QgMTk5NAoKCSogW2lmMTYzMi9jYWxsLlNdCglDYWxsVG8xNigpOiBhZGRlZCBgbW92ICVlYXgsJWVkeCcganVzdCBiZWZvcmUgbGNhbGwsCgl0byBtYWtlIHN1cmUgdGhhdCBEWCBjb250YWluIHRoZSBETEwncyBoaW5zdGFuY2Ugd2hlbgoJaW5pdGlhbGlzZWQuCgoJQ2FsbFRvMzJfMTYoKSBhZGRlZCwgZXF1YWwgdG8gQ2FsbFRvMzIoKSBleGNlcHQgZm9yCglvbmUgdGhpbmc6IGl0IHNhdmVzIERYIGFuZCAKCgkqIFt0b29scy9idWlsZC5jXQoJQWRkZWQgc29tZSBjb2RlIHRvIHN1cHBvcnQgMTYgYW5kIDMyIGJpdCByZXR1cm4gdmFsdWVzLgoKCSogWzE2MzIve2tlcm5lbCx1c2VyfS5zcGVjXQoJQ2hhbmdlZCBtb3N0IG9mIHRoZSBgcGFzY2FsJyBzdHlsZSB0byBwYXNjYWxfMTYgd2hlbgoJZnVuY3Rpb24gcmV0dXJuZWQgYSAxNmJpdCB2YWx1ZS4KClR1ZSBKdWwgMTkgMTg6NDA6MjUgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL21lbnUuY10KCVJlb3JnYW5pemVkIHNpemluZyBhbmQgZHJhd2luZyBjb2RlIHRvIGltcGxlbWVudCBtdWx0aS1saW5lIG1lbnVzLgoJSW1wbGVtZW50ZWQgTUVOVUJSRUFLIHN0eWxlLgoJVXNlIHN5c3RlbSBjb2xvcnMgdG8gZHJhdyBtZW51cy4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglCdWcgZml4IGluIENPTE9SX0lzU29saWQoKS4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUJ1ZyBmaXggaW4gRk9OVF9HZXRNZXRyaWNzKCk6IGNhbGN1bGF0ZSBhdmVyYWdlIGNoYXJhY3RlciB3aWR0aAoJb25seSBvbiBleGlzdGluZyBjaGFycyAoZGlhbG9ncyBsb29rIG11Y2ggYmV0dGVyKS4KCgkqIFtvYmplY3RzL3RleHQuY10KCUJ1ZyBmaXggaW4gRHJhd1RleHQoKTogdXNlIHRleHQgY29sb3IgdG8gdW5kZXJsaW5lIG1uZW1vbmljLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglDaGFuZ2VkIFdNX05DSElUVEVTVCBoYW5kbGluZyB0byBjb3BlIHdpdGggbXVsdGktbGluZSBtZW51IGJhcnMuCgoJKiBbd2luZG93cy9zeXNjb2xvci5jXQoJQWRkZWQgc3lzdGVtIG9iamVjdHMgZm9yIG1lbnUgY29sb3JzLgoKTW9uIEp1bCAxOCAxOTozMjowOCBQRFQgMTk5NCAgQW5kcmV3IExhZ29kemluc2tpICAoYW5kcmV3QG5ldGNvbS5jb20pCgogICAgICAgICogW2NvbnRyb2xzL21lbnUuY10KICAgICAgICBGaXhlZCBidWcgaW4gU2VsZWN0UHJldkl0ZW0gdGhhdCBjYXVzZWQgc2VwZXJhdG9ycyB0byBub3QgYmUKCXNraXBwZWQgd2hlbiB1c2luZyB0aGUgdXAgYXJyb3cga2V5LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgSnVsIDE0IDE3OjUwOjQ1IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbQ29uZmlndXJlXQoJQXV0b2RldGVjdHMgTGludXggdmVyc2lvbiAoaWYgcnVubmluZyBMaW51eCkuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJTmV3IHNpZ25hbHMgZm9yIExpbnV4LgoKCSogW2xvYWRlci9sZHRsaWIuY10KCU5ldyBzdHJ1Y3R1cmUgZmllbGQgaW4gc3lzIGNhbGwuCgpTdW4gSnVsIDEwIDE5OjMxOjM0IDE5OTQgIE9sYWYgRmxlYmJlICAob2xhZkBkcmFnb24pCgogICAgICAgICogW2xvYWQvcmVzb3VyY2UuY10gCiAgICAgICAgICBmaXhlZCBNZW1vcnkgKFJlc291cmNlKSBMZWFrLgoKICAgICAgICAqIFtsb2FkL21haW4uY10gCiAgICAgICAgICBmaXhlZCBhIHByaW50Zi4KClR1ZSBKdWwgMTIgMTg6NTA6MzQgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KCUltcGxlbWVudGVkIGRlc2t0b3Agd2FsbHBhcGVyIChvbmx5IDE2IGNvbG9ycyBmb3Igbm93KS4KCgkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJUHJlbGltaW5hcnkgd29yayB0byBhbGxvdyBtdWx0aS1saW5lIG1lbnVzLgoKCSogW21pc2MvbWFpbi5jXQoJTm8gYmFja2luZyBzdG9yZSBvbiBkZXNrdG9wIHdpbmRvdyAobm90IHVzZWZ1bCkuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglBIGZldyBmaXhlcyB0byBEcmF3VGV4dCgpIHRvIG1ha2UgdW5kZXJsaW5lcyB1bmRlciBtbmVtb25pYwoJbGV0dGVycyB0byBsb29rIGJldHRlci4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglNb3JlIGZpeGVzIHRvIEdSQVBIX0RyYXdBcmMoKSwgYW5kIHNvbWUgZml4ZXMgdG8gUG9seWdvbigpLgoJSW1wbGVtZW50ZWQgUG9seVBvbHlnb24oKSAocGFydGlhbGx5IHdvcmtpbmcpLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglOZXcgZnVuY3Rpb24gV0lOUE9TX1NlbmROQ0NhbGNTaXplKCkuCglDbGVhbmVkIHVwIFNldFdpbmRvd1BvcygpIGFuZCBhZGRlZCBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvcgoJbXVsdGktbGluZSBtZW51cy4KCk1vbiBKdWwgMTEgMTk6MTU6NTEgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHNwaGlueCkKCgkqIFtjb250cm9scy9lZGl0LmNdCglDaGFuZ2VzIHRvIHdvcmsgYXMgYSBsaWJyYXJ5LgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXSAKCUlmZGVmZWQgbW9kdWxlLgoKCSogW2lmMTYzMi9yZWxheS5jXQoJQ2hhbmdlcyB0byBhbGxvdyBsaW5raW5nIHdpdGggV2luZUxpYi4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIG1hY3JvIFdJTkVMSUJfVU5JTVAKCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJV2hlbiBjb21waWxpbmcgV2luZUxpYiwgR2V0UHJvY0FkZHJlc3MgaXMgbm90IGltcGxlbWVudGVkIHlldC4KCgkqIFtsb2FkZXIvbWFpbi5jXQoJQWRkZWQgZW1wdHkgSW5pdERMTCB3aGVuIHVzaW5nIFdpbmVMaWIuCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglTb21lIHBhcnRzIG9mIHRoZSBsb2FkZXIgYXJlIG5lZWRlZCBmb3IgV2luZUxpYiwgaWZkZWZlZCBjb3JyZWN0bHkKCgkqIFttaXNjL3thdWRpby5jLG1jaWNkYS5jLG1tYXV4LmMsbW1zeXN0ZW0uY10KCURpc2FibGUgY29tcGlsYXRpb24gb2YgbW9kdWxlIHdoZW4gY29tcGlsaW5nIFdpbmVMaWIuCgoJKiBbdG9vbGtpdC9oZWFwLmNdCglGaXhlZCBzbWFsbCBidWcuICBXaGVuIHBhc3NlZCBhbiBpbnZhbGlkIGhhbmRsZSBXaW5lTGliIHdvdWxkCgljcmFzaCwgbm93IHJldHVybiBOVUxMLgoKCSogW3Rvb2xraXQvd2lubWFpbi5jXQoJQ2FsbCBDcmVhdGVOZXdUYXNrIGluIF9XaW5NYWluLgoKU3VuIEp1bCAxMCAwOTowODowMiAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbY29udHJvbHMvZWRpdC5jXSBbY29udHJvbHMvd2lkZ2V0LmNdCglNb3JlIGNoYW5nZXMgdG8gaW1wcm92ZSBjb21wYXRpYmlsaXR5IHdpdGggV2luZG93cycgZWRpdAoJY29udHJvbC4gIEZpbmlzaGVkIG9mZiB0YWIgc3RvcCBzdXBwb3J0LgoKTW9uIEp1bCAxMSAyMTowNTowMiBNRVQgRFNUIDE5OTQgIEVyaWsgQm9zIDxlcmlrQGhhY2t0aWMubmw+CgoJKiBbaWYxNjMyL3JlbGF5LmNdCgkjIG9mIG9yZGluYWxzIGluIHNoZWxsLmRsbCBjaGFuZ2VkIHRvIDEwMy4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglzdGksIGNsaSB3aWxsIG5vdyBiZSBpZ25vcmVkLgoKCSogW29iamVjdHMvYnJ1c2guY10KCUFkZGVkIHN0dWIgZm9yIEdldFN5c0NvbG9yQnJ1c2goKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuLCAzIEp1bCAxOTk0IDIwOjE1OjU2ICswMTAwIChCU1QpICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJQnVnIGZpeGVzIGFuZCB0aWR5aW5nIHVwLiAgUHJlbGltaW5hcnkgdGFiIHN0b3Agc3VwcG9ydAoJKGRvZXNuJ3Qgd29yayB5ZXQpLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglSZXZlcnNlZCBvcmRlciBvZiBidXR0b25zIGluIENoZWNrUmFkaW9CdXR0b25zIHNvIHRoYXQgYWxsCglidXR0b25zIGFyZSBub3cgZGlzcGxheWVkLgoKVHVlIEp1bCAgNSAxODozMDoyNCAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbaW5jbHVkZS9vcHRpb25zLmhdIFttaXNjL21haW4uY10gW3dpbmRvd3Mvd2luLmNdCglSZW1vdmVkIG5vc2F2ZXVuZGVycyBvcHRpb24sIHJlcGxhY2VkIGJ5IGhhbmRsaW5nCgl0aGUgQ1NfU0FWRUJJVFMgZmxhZy4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglNb2RpZmllZCB0aGUgZml4IGZvciBuZWdhdGl2ZSBzaXplIGluIGNsYXNzIGV4dHJhIGJ5dGVzIHRvCglhdm9pZCBtb2RpZnlpbmcgdGhlIGNhbGxlcidzIGRhdGEuCgoJKiBbd2luZG93cy9kYy5jXQoJQnVnIGZpeDogc3lzdGVtIGZvbnQgbXVzdCBiZSBhIHByb3BvcnRpb25hbCBmb250LgoJRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgdGhlIGRlZmF1bHQgcGVuIHRvIG5vdCBiZSBzZWxlY3RlZAoJY29ycmVjdGx5IGluIGEgREMuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJQnVnIGZpeCBpbiBHUkFQSF9EcmF3QXJjKCkuIFRoYW5rcyB0byBBZHJpYW5vIEF6ZXZlZG8gZm9yCglub3RpY2luZyBpdC4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglSZW1vdmVkIGluY29ycmVjdCBzZWxlY3Rpbmcgb2YgZGVmYXVsdCBvYmplY3RzIGluIEJlZ2luUGFpbnQoKQoJKG5vIGxvbmdlciBuZWVkZWQgYmVjYXVzZSBvZiB0aGUgZml4IGluIGRjLmMpLgoKSnVsIDQsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttaXNjL21tc3lzdGVtLmNdCgkqIFttaXNjL2F1ZGlvLmNdCglBZGQgbW9yZSBjb2RlIHRvIGludGVyZmFjZSAnL2Rldi9kc3AnLgoKCSogTmV3IGZpbGUgW21pc2MvbWNpY2RhLmNdCglDcmVhdGUgYW4gTUNJX0RFVlRZUEVfQ0RfQVVESU8gZHJpdmVyIGNvbm5lY3RlZCB0byAnL2Rldi9zYnBjZCcuCgoJKiBOZXcgZmlsZSBbbWlzYy9tbWF1eC5jXQoJU3R1YnMgdG8gbWFrZSBhIGZ1dHVyZSBkcml2ZXIgY29ubmVjdGVkIHRvICcvZGV2L21peGVyJy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJVGVtcG9yYXJ5IHBhdGNoIHRvIENyZWF0ZVdpbmRvd0V4KCkgZm9yIHJlc2V0aW5nIG5lZ2F0aXZlCgljb29yZGluYXRlcyB0byAwLDAgOyBiZWNhdXNlICdzb3VuZHJlYy5leGUnIGdpdmUgbmVnYXRpdmUgdmFsdWVzCglhbmQgSSBuZWVkIGl0IHRvIHdvcmsgb24gTU1TWVNURU0gLi4uIDotKQoKCSogW21pc2NlbXUvaW50MmYuY10KCWFkZCBhIHN0dWIgJ2RvX2ludDJmXzE2JyAoZnVuY3Rpb24gMHgxNikgZm9yIERNUEkgc2VydmVyLgoKTW9uIEp1biAyMCAxMDowODo0MCBCU1QgMTk5NCAgV2lsbGlhbSBTbWl0aCAod29zQGRjcy53YXJ3aWNrLmFjLnVrKQoKCSogaW5jbHVkZS9jb21tLmgKCU5ldyBmaWxlIC0tIHNvbWUgZGVmaW5pdGlvbnMgdGhhdCB3ZXJlIGluIGNvbW0uYyBub3cgbmVlZCB0bwoJYmUgc2hhcmVkIHdpdGggbWlzYy9kb3NfZnMuYwoKCSogbWlzYy9jb21tLmMKCVNvbWUgZGVmaW5pdGlvbnMgbW92ZWQgaW50byBpbmNsdWRlL2NvbW0uaAoKCSogbWlzYy9kb3NfZnMuYyAoRE9TX0dldEVxdWlwbWVudCk6CglGaXhlZCBlcnJvciBpbiBlcXVpcG1lbnQgLS0gYml0d2lzZSBvciBvZiB0d28gdmFsdWVzIHNob3VsZAoJYmUgdXNlZCBpbnN0ZWFkIG9mIGxvZ2ljYWwgb3IuICBBbHNvIGFkZGVkIGNvZGUgdG8gY29ycmVjdGx5CglyZXBvcnQgdGhlIG51bWJlciBvZiBzZXJpYWwgYW5kIHBhcmFsbGVsIGRldmljZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBKdW4gMjAgMTQ6MjY6NDEgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJQWxsb3cgbmVnYXRpdmUgYml0bWFwIHNpemVzLgoKU3VuIEp1biAxOSAxMjowMDowNCAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgogICAgICAgICogW2NvbnRyb2xzL2VkaXQuY10KICAgICAgICBJbXByb3ZlZCBzZWxlY3Rpb24gZGlzcGxheS4gIEFkZGVkIHByb2Nlc3NpbmcgZm9yIFdNX1NFVEZPTlQsCiAgICAgICAgRU1fUkVQTEFDRVNFTCwgRU1fTElORUxFTkdUSCwgRU1fVU5ETywgRU1fRU1QVFlVTkRPQlVGRkVSLAogICAgICAgIEVNX0dFVEhBTkRMRSwgRU1fU0VUSEFORExFIG1lc3NhZ2VzLiAgVGV4dCBidWZmZXIgbm93IHN0b3JlZCBvbiAKICAgICAgICBhcHBsaWNhdGlvbidzIGxvY2FsIGhlYXAuCgogICAgICAgICogW3dpbmRvd3MvZ3JhcGhpY3MuY10KICAgICAgICBDb3JyZWN0ZWQgYnVnIGluIFJlY3RhbmdsZSgpLiAgWEZpbGxSZWN0YW5nbGUgaGFzIHRoZSBzYW1lCiAgICAgICAgd2lkdGggYXMgUmVjdGFuZ2xlLCBidXQgWERyYXdSZWN0YW5nbGUgaXMgb25lIHBpeGVsIHdpZGVyCiAgICAgICAgZm9yIHRoZSBzYW1lIGNvLW9yZGluYXRlcy4KCiAgICAgICAgKiBbbWVtb3J5L2hlYXAuY10gW2luY2x1ZGUvaGVhcC5oXQogICAgICAgIEFkZGVkIEhFQVBfTG9jYWxTaXplIGZ1bmN0aW9uLgoKICAgICAgICAqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL2tleWJvYXJkLmNdCiAgICAgICAgSW1wcm92ZW1lbnRzIHRvIEtleVN0YXRlVGFibGUgYW5kIGFkZGl0aW9uIG9mIEFzeW5jS2V5U3RhdGVUYWJsZS4KICAgICAgICBBZGRlZCBzdXBwb3J0aW5nIGNvZGUgdG8gR2V0S2V5U3RhdGUgYW5kIEdldEFzeW5jS2V5U3RhdGUgYW5kCiAgICAgICAgbWVyZ2VkIG1vdXNlIGJ1dHRvbiBzdGF0ZXMgaW50byBHZXRLZXlib2FyZFN0YXRlLgoKICAgICAgICAqIFtsb2FkZXIvcmVzb3VyY2UuY10gW2luY2x1ZGUvYWNjZWwuaF0KICAgICAgICBBZGRlZCByZWNvZ25pdGlvbiBvZiBTSElGVCwgQ09OVFJPTCBhbmQgQUxUIGtleXMgdG8KICAgICAgICBUcmFuc2xhdGVBY2NlbGVyYXRvci4KCiAgICAgICAgKiBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbb2JqZWN0cy9mb250LmNdIFtvYmplY3RzL2JpdGJsdC5jXQogICAgICAgIEEgYml0IG1vcmUgbWV0YWZpbGUgc3VwcG9ydC4KClN1biBKdW4gMTkgMTc6Mjk6MDAgTUVUIERTVCAxOTk0ICBFcmlrIEJvcyAoZXJpa0BoYWNrdGljLm5sKQoKICAgICAgICAqIFtsb2FkZXIvcmVzb3VyY2UuY10KICAgICAgICBTaXplb2ZSZXNvdXJjZSgpIGFuZCBBbGxvY1Jlc291cmNlKCkgYWRkZWQsIEFjY2Vzc1Jlc291cmNlKCkgdXBkYXRlZC4KCiAgICAgICAgKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQogICAgICAgIEZyZWVMaWJyYXJ5KCkgdXNlZCBmb3IgRnJlZU1vZHVsZSgpLgoKICAgICAgICAqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCiAgICAgICAgUmVjdGFuZ2xlKCk6IHN3YXAgbGVmdCAmIHJpZ2h0IGNvcm5lcnMgd2hlbiByaWdodCA8IGxlZnQsCiAgICAgICAgc3dhcCB0b3AgJiBib3R0b20gd2hlbiBib3R0b24gPCB0b3AuCgpKdW4gMTksIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9jb21iby5jXQoJRml4IGJ1ZyBpbiB3aW5kb3cgc3R5bGUgb2YgdGhlIGFzc29jaWF0ZWQgbGlzdGJveC4KCgkqIFtjb250cm9scy9tZW51LmNdCglTa2lwIHNlcGFyYXRvcnMgaW4ga2V5Ym9hcmQgbmF2aWdhdGlvbiBieSB1c2luZyBuZXcgaW50ZXJuYWwgCgkJZnVuY3Rpb25zIFNlbGVjdFByZXZJdGVtKCkgJiBTZWxlY3ROZXh0SXRlbSgpLAoKCSogW21pc2MvcHJvZmlsZS5jXQoJQnVnIGZpeCBpbiBHZXRQcml2YXRlUHJvZmlsZUludCgpLCB3YXMgbGltaXRlZCB0byA0IGRpZ2l0LAoJCUludEJ1ZiBtdXN0IGJlIGFsbG9jIHRvICg1KzEpPTYuIGNoYXIgaW5zdGVhZCBvZiA1LgoKCSogW21pc2MvbWFpbi5jXQoJUHV0IGNvZGUgaW4gZnVuY3Rpb25zIFNldEVudmlyb25tZW50KCkgJiBHZXRFbnZpcm9ubWVudCgpLgoKCSogW21pc2Mvc2hlbGwuY10KCVN0YXJ0IHB1dHRpbmcgc29tZSBjb2RlIGluIEV4dHJhY3RJY29uKCkgZnVuY3Rpb24uCgoJKiBbbWlzYy9tbXN5c3RlbS5jXQoJU29tZSBjb2RlIGZvciBNTVRpbWVyIGZ1bmN0aW9ucyAmIHRpbWVycyBsaXN0LgoKCSogW21pc2NlbXUvaW50MzEuY10KCUZldyBzdHVicyBmb3IgRFBNSSBpbnRlcnJ1cHQgY2FsbHMuIE5vdGhpbmcgd29yayB5ZXQuCgpNb24gSnVuIDIwIDA3OjM3OjQzIEVEVCAxOTk0CUpvaG4gUmljaGFyZHNvbiAoanJpY2hhcmRAY3MudW1sLmVkdSkKCgkqIGluY2x1ZGUvd2luLmggKHRhZ1dORCk6CglBZGRlZCBpY29uIGZpZWxkcyBpY29uLCBoSWNvbiBhbmQgcmVjdENsaWVudFNhdmUgdG8gCgl0aGUgdGFnV05EIHN0cnVjdC4KCgkqIHdpbmRvd3MvSW1ha2VmaWxlCglBZGRlZCBpY29uLmMgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gY29tcGlsZQoKCSogd2luZG93cy9kY2UuYyAoR2V0RENFeCk6CglBZGRlZCBzb21lIGNoZWNrcyBmb3IgaWNvbmljIG1vZGUgYW5kIHBhc3MgaWNvbiB3aW5kb3cgYXMgZHJhd2FibGUsCglub3QgdGhlIHJlYWwgd2luZG93LgoKCSogd2luZG93cy9kZWZ3bmQuYyAoRGVmV2luZG93UHJvYykKCUFkZGVkIFBBSU5USUNPTiBkZWZhdWx0IHdpbmRvd3MgcHJvY2VkdXJlLgoKCSogd2luZG93cy9ldmVudC5jIChFVkVOVF9FeHBvc2UpCglBZGRlZCBjaGVjayBmb3IgaWNvbmljIHdpbmRvdyBleHBvc2UuIElmIGljb25pYyB3aW5kb3cgaXMgZXhwb3NlZAoJc2VuZCBhIFdNX1BBSU5USUNPTiBtZXNzYWdlCgoJKiB3aW5kb3dzL2ljb24uYyAKCU5ldyBmaWxlLiAgSUNPTl9JY29uaWZ5LCBJQ09OX2ZpbmRJY29uRnJvbVBvaW50LCBJQ09OX0RlaWNvbmlmeS4KCgkqIHdpbmRvd3MvbWRpLmMgKERlZk1ESUNoaWxkUHJvYykKCVRlc3QgZm9yIElzSWNvbmljIGR1cmluZyBhIFNDX1JFU1RPUkUsIHRoaXMgZG9lc24ndCB3b3JrIHlldC4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jIChoYXJkd2FyZV9ldmVudCkKCUxvb2tzIGZvciBpY29uIGFzIHdlbGwgYXMgd2luZG93IG5vdy4KCgkqIHdpbmRvd3Mvbm9uY2xpZW50LmMgKE5DX0hhbmRsZVN5c0NvbW1hbmQsIE5DX0RvTkNQYWludEljb24pCglBZGRlZCBpY29uaWZ5L2RlaWNvbmlmeSBpbiBOQ19IYW5kbGVTeXNDb21tYW5kLCBuZXcgZnVuY3Rpb24KCU5DX0RvTkNQYWludEljb24gd2hpY2ggcGFpbnRzIGFuIGljb24uCgoJKiB3aW5kb3dzL3BhaW50aW5nLmMgKEJlZ2luUGFpbnQpCglNYWRlIGEgQmVnaW5QYWludCBzZWxlY3QgdGhlIFNUT0NLX0JMQUNLX1BFTiwgU1RPQ0tfV0hJVEVfQlJVU0gsCglhbmQgU1RPQ0tfU1lTVEVNX0ZPTlQgb2JqZWN0cyBzaW5jZSB0aGlzIGlzIChob3BlZnVsbHkpIGRlZmF1bHQKCXdpbmRvd3MgYmVoYXZpb3IuCgoJKiB3aW5kb3dzL3dpbi5oIChDcmVhdGVXaW5kb3dFeCkKCVNldCB0aGUgZGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yIG9mIGEgd2luZG93IHRvIGJlIHdoaXRlLgoJQ3JlYXRlIGljb24gd2luZG93LCB0dXJuIG9mZiBNSU5JTUlaRSBpZiBpdCBpcyBvbiwgc2luY2UKCUkgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggaXQgYXMgb2YgeWV0Li4uIHJlZ2lzdGVyCgl0aGUgaWNvbiB3aXRoIHRoZSBod25kIG9mIGl0cyB3aW5kb3cgc28gd2UgY2FuIGlkZW50aWZ5IHdoZXJlCglpY29uIG1lc3NhZ2VzIGFyZSBjb21pbmcgZnJvbS4KCk1vbiBKdW4gMjAgMTA6MTU6NTkgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHNwaGlueCkKCgkqIHdpbmRvd3MvZXZlbnQuYzogQWRkZWQgYSBoYWNrIHRvIGRlZmluZSBYUG9pbnRlciB3aGVuIHVzaW5nCglYMTFSNC4gCgoJKiB0b29sa2l0L2hlbGxvLmM6IFRlc3QgYXBwbGljYXRpb24gZm9yIFdpbmVMaWIuIFRvIGNvbXBpbGUgeW91J2xsCgluZWVkOiBnY2MgLUlpbmNsdWRlIC1EV0lORUxJQiAtZyBoZWxsby5jIC1jLCBhbmQgdG8gbGluayB5b3UnbGwKCW5lZWQ6IGdjYyBoZWxsby5vIGxpYndpbmUuYSAtbFgxMSAtTC91c3Ivb3Blbndpbi9saWIgLWxtIAoKCSogdG9vbGtpdC9oZWFwLmM6IEV4dGVuZGVkIHRoZSBzaXplIG9mIHRoZSBibG9jayBzaXplIHBlciBjaHVuay4KCgkqIG1pc2Mvc3RyZXNzLmMgKEdldEZyZWVGaWxlSGFuZGxlcyk6IEZpeGVkIHR5cG8uCgoJKiBtaXNjL21haW4uYyAobWFpbik6IENoYW5nZXMgdG8gYWxsb3cgY29tcGlsYXRpb24gdW5kZXIgU3VuT1MuIAoKCSogbG9hZGVyL2xpYnJhcnkuYzogQ2hhbmdlZCBzb21lIGlmZGVmcyB0byBjb21waWxlIFdpbmVMaWIuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBKdW4gMTQgMDg6MDk6MTQgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIGxvYWRlci9zZWxlY3Rvci5jIChHZXRDdXJyZW50UERCKTogCglBZGRlZCB0cml2aWFsIGZ1bmN0aW9uIEdldEN1cnJlbnRQREIoKSB3aGljaCByZXR1cm5zIHRoZSBwcm9ncmFtCglzZWdtZW50IHByZWZpeCBzZWxlY3Rvci4KCgkqIG1lbW9yeS9oZWFwLmMgKEhFQVBfRnJlZSk6IAoJSWYgZnJlZSBsaXN0IGlzIGVtcHR5LCBtYWtlIHRoZSBmcmVlZCBibG9jayB0aGUgZnJlZSBsaXN0LgoKRnJpIEp1biAxMCAwNzo1Njo0OSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogY29udHJvbHMvZWRpdC5jIChFRElUX1NldFRleHRNc2cpOiAKCURvIG5vdCBhcHBlbmQgYSBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgbGluZS4KCgkqIHdpbmRvd3MvZXZlbnQuYyAoU2V0Q2FwdHVyZSk6IAoJU2V0IHdpbkhhc0N1cnNvciBpZiBtb3VzZSBjYXB0dXJlIHN1Y2NlZWRzLgoKSnVuIDEzLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJRml4IGJ1ZyBpbiBsaXN0Ym94IDogSW5zZXJ0U3RyaW5nIHNob3VsZCBjYWxsIEFkZFN0cmluZyBpZiAtMS4KCgkqIFtjb250cm9scy9tZW51LmNdCglOZXcgZnVuY3Rpb24gR2V0TWVudVN0YXRlKCkuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJVHJ5IHRvIG1ha2UgU2hvd1Njcm9sbEJhcigpIHJlY2FsYyBOQ18gcmVnaW9ucy4gTm90IGZpbmlzaGVkICEKCgkqIFtvYmplY3RzL3RleHQuY10KCUFkZCBTdHViIGZvciBUYWJiZWRUZXh0T3V0KCksIHdoaWNoIHRlbXBvcmFyZWx5IGNhbGwgVGV4dG91dCgpLgoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10gW3dpbmRvd3MvZXZlbnQuY10KCU5ldyBmdW5jdGlvbiBHZXRLZXlCb2FyZFN0YXRlKCkgd2l0aCBhbiBLZXlTdGF0ZVRhYmxlIGFycmF5CgkJJiBhc3NvY2lhdGVkIGhhbmRsaW5nIGluIGZ1bmN0aW9uIEVWRU5UX2tleSgpLgoKTW9uIEp1biAxMyAxNjo0NToyNCBNRVQgRFNUIDE5OTQgKGVyaWtAaGFja3RpYy5ubCkKCiAgICAgICAgKiBbY29udHJvbHMvbWVudS5jXQogICAgICAgIElzTWVudSgpIGFkZGVkLgoKICAgICAgICAqIFtsb2FkZXIvbGlicmFyeS5jXQogICAgICAgIE1vZHVsZUZpcnN0KCksIE1vZHVsZU5leHQoKSwgTW9kdWxlRmluZE5hbWUoKSwgTW9kdWxlRmluZEhhbmRsZSgpCiAgICAgICAgYWRkZWQuCgogICAgICAgICogW29iamVjdC9nZGlvYmouY10KICAgICAgICBJc0dESU9iamVjdCgpIGFkZGVkLgoKICAgICAgICAqIFttaXNjZW11L2ludDJbNTZdLmNdCiAgICAgICAgYnVnZml4OiBib3RoIGRpZG4ndCBsZWF2ZSBmbGFncyBwdXNoZWQgb24gMTZiaXQtc3RhY2suCiAgICAgICAgKHdpbmZpbGUgZ2V0cyBhIGJpdCBmdXJ0aGVyKQoKICAgICAgICAqIFttaXNjZW11L2ludDE2LmNdCiAgICAgICAgQWRkZWQgKGVtcHR5KS4KClNhdCBKdW4gMTEgMjI6NTY6NDggMTk5NCBKb24gVG9tYnMgKGpvbkBlc2l4Mi51cy5lcykKCSogd2luZG93cy9ldmVudC5jOgoJQWRkZWQgY29kZSB0byBkcm9wIHJlZHVuZGFudCBtb3Rpb24gRXZlbnRzIGluIHRoZSBYRXZlbnQgcXVldWUuCgpUaHUgSnVuICA5IDEwOjU1OjU1IE1FVCBEU1QgMTk5NCAgSm9jaGVuIEhlaW4gKCBIZWluQFN0dWRlbnQuVFUtQ2xhdXN0aGFsLmRlICkKCgkqIFttaXNjL21haW4uYyBtaXNjL21lc3NhZ2UuYyBpbmNsdWRlL3RleHRzLmhdCglSZW1vdmVkIHRoZSB0ZXh0LWNvbnN0YW50cyBmcm9tIG1lc3NhZ2UuYyBpbnRvIHZhcmlhYmxlcwoJd2hpY2ggbWF5IGJlIGNoYW5nZWQgZnJvbSBYLXJlc291cmNlcy4KCgkqIFttaXNjL21haW4uYyBtaXNjL21lc3NhZ2UuY10KCWFkZGVkIDxsb2NhbGUuaD4gYW5kIHNldGxvY2FsZSgpIHRvIG1haW4uYywgdXNlZCB0b3VwcGVyKCkgaW4gbWVzc2FnZS5jCgpNb24sIDEzIEp1biA5NCAwOTo0MToxNiAtMDUwMCBQYXVsIEJyYW1lbCA8cGF1bGJyQGNvbW0ubW90LmNvbT4KCiAgICAgICAgKiBjb250cm9scy9idXR0b24uYyAoIFtDUl1CX0xCdXR0b24qICkgCiAgICAgICAgbGVmdCByYy5yaWdodCBhdCBmdWxsIHdpbmRvdyB3aWR0aCBzbyBjbGljayBvbiBsYWJlbCBhbHNvIAogICAgICAgIGFjdGl2YXRlcyB0aGUgY29udHJvbCAoTVNXaW4gYmVoYXZpb3IpCgpTYXQgSnVuIDExIDE5OjA1OjQwIDE5OTQgIE9sYWYgRmxlYmJlICAoZmxlYmJlQHRhdC5waHlzaWsudW5pLXR1ZWJpbmdlbi5kZSkKCiAgICAgICAgKiBpbmNsdWRlL3dpbmRvd3MuaDoKICAgICAgICAgIGZ1bmN0aW9ucyBwb2ludGVycyBjYW4gbm90IGJlIHBhY2tlZC4KICAgICAgICAgIChhbm5veWluZyB3YXJuaW5ncyB3aXRoIGZvcnRoY29tbWluZyBnY2MtMi42LngpCiAgICAgICAgCiAgICAgICAgKiBsb2FkZXIvbWFpbi5jIChJbml0RExMKTogCiAgICAgICAgICBGaXhlZCBhIHByaW50ZiBzdGF0ZW1lbnQuIChmb3IgY29udHJvbC5leGUpIAoKICAgICAgICAgIChJbml0aWFsaXplTG9hZGVkRExMcyk6IAogICAgICAgICAgZGVsZXRlZCBzaGFkb3cgZGVmaW5pdGlvbiBvZiAgKndwbnQuCiAgICAgICAgICAoQnJlYWtzIG1hbnkgcHJvZ3JhbXMsIGJlY2F1c2Ugbm93IENPTU1ETEcgd2lsbCBiZQogICAgICAgICAgIGluaXRpYWxpemVkIDotKAoKICAgICAgICAqIHdpbmRvd3Mvd2luLmMgKFNldFdpbmRvd1RleHQpOiAKICAgICAgICAgIGFkZGVkIG1pc3NpbmcgYnJlYWtzOyAoUEVOU0FURSBzdGFydHMpIAoKICAgICAgICAqIHdpbmRvd3MvZ3JhcGhpY3MuYyAoRmxvb2RGaWxsKTogCiAgICAgICAgICBQcm9wZXIgYm91bmRhcnlzLiAoQkFOR0JBTkcgc3RhcnRzKSBGbG9vZEZpbGVfcmVjIHNob3VsZAogICAgICAgICAgYmUgcmV3cml0dGVuLgoKICAgICAgICAqIG9iamVjdHMvZm9udC5jIChGT05UX0dldE1ldHJpY3MpOiAKICAgICAgICAgIFRZUE86IHVzZSBmb250LT5wZXJjaGFyIG9ubHkgaWYgaXQgaXMgZGVmaW5lZC4gKFdSSVRFIHN0YXJ0cykKClN1biBKdW5lIDEyLCBQZXRlciBCcm9hZGh1cnN0IChwYnJAdWEubndsLmFjLnVrKQogICAgICAgIGNvbnRyb2xzL3Njcm9sbC5jOgogICAgICAgIEZpeGVzIGZvciBpbXByb3ZlZCBiZWhhdmlvdXIgd2hlbiBkcmFnZ2luZyB0aHVtYjsKICAgICAgICBBZGRlZCBTQl9USFVNQlBPU0lUSU9OIG1lc3NhZ2Ugd2hlbiB0aHVtYiBpcyByZWxlYXNlZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEp1biAgNyAwODo0MToyNyAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogbG9hZGVyL3NlbGVjdG9yLmMgKEZpeHVwRnVuY3Rpb25Qcm9sb2dzKTogCglOZXcgZnVuY3Rpb24gdG8gZml4dXAgbG9hZGVkIERMTCBmdW5jdGlvbiBwcm9sb2dzLiAgSXQgcmVwbGFjZXMgdGhlCglkbyBub3RoaW5nIGNvZGUgd2l0aCBjb2RlIHRoYXQgbG9hZHMgRFMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZGF0YQoJc2VnbWVudCBmb3IgdGhlIERMTC4KCgkqIG1pc2MvY3Vyc29yLmMgKExvYWRDdXJzb3IpOiAKCURpc2FibGVkIGN1cnNvciBsb2FkaW5nIGZyb20gLkVYRSBvciAuRExMLiAgVGhlIGNvZGUgbmVlZHMgdG8gaGFuZGxlCgl0aGUgcG9zc2liaWxpdHkgb2YgbXVsdGlwbGUgY3Vyc29ycyBpbiBhIHNpbmdsZSBkaXJlY3RvcnkuICBBbHNvLAoJaXQgc2hvdWxkIGNoZWNrIHRvIHNlZSBpZiB0aGUgY3Vyc29yIGlzIHRoZSByaWdodCBzaXplLgoKCSogb2JqZWN0cy9mb250LmMgKEVudW1Gb250cyk6IAoJQ2hlY2tlZCBmb3IgbHBMb2dGb250TGlzdFtpXSA9PSBOVUxMCgoJKiBvYmplY3RzL2dkaW9iai5jIChTZXRPYmplY3RPd25lcik6IAoJUmVtb3ZlZCBzdHViLiAgUmVwbGFjZWQgd2l0aCBzaW1wbGUgcmV0dXJuIGluIGdkaS5zcGVjLiAgVGhpcwoJZnVuY3Rpb24gaXMgbm90IGRlZmluZWQgZm9yIHRoZSByZXRhaWwgdmVyc2lvbiBvZiBXaW5kb3dzLgoKCSogbWVtb3J5L2hlYXAuYyAoV0lOMTZfTG9jYWxIYW5kbGVEZWx0YSk6IAoJTmV3IGZ1bmN0aW9uLiAgVGhpcyBpcyByZWFsbHkgYSBkdW1teSB0aGF0IGltaXRhdGVzIHRoZSBwcm9wZXIKCXJldHVybiB2YWx1ZXMuCgoJKiBsb2FkZXIvbGlicmFyeS5jIChHZXRQcm9jQWRkcmVzcyk6IAoJRml4ZWQgZGVmaW5pdGlvbiBvZiBJU19CVUlMVElOX0RMTCgpIG1hY3JvLgoKTW9uIEp1biAgNiAxODoxNTo0MCAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogbWlzY2VtdS9pbnQyMS5jIChTZWVrRmlsZSk6IAoJTmVlZGVkIHRvIHJldHVybiBjdXJyZW50IHBvc2l0aW9uIGluIERYOkFYLgoKCSogd2luZG93cy91dGlsaXR5LmMgKHdpbmRvd3Nfd3NwcmludGYpOiAKCUFkZGVkIHN1cHBvcnQgZm9yICcjJyBpbiBmb3JtYXQsIGFuZCBmaXhlZCBidWcgd2l0aCAicHRyIiBiZWluZwoJaW5jcmVtZW50ZWQgdG9vIG1hbnkgdGltZXMuCgoJKiBtaXNjZW11L2ludDIxLmMgKE9wZW5FeGlzdGluZ0ZpbGUpOiAKCUFkZCBjb2RlIHRvIGhhbmRsZSBvcGVuaW5nIGZpbGVzIHJlYWQtb25seSBhbmQgd3JpdGUtb25seS4KCgkqIGxvYWRlci93aW5lLmM6CglTZWdtZW50IGZpeHVwcyBub3cgZG9uZSBpbiBMb2FkSW1hZ2UgaW5zdGVhZCBvZiBfV2luTWFpbi4gIFRoaXMKCWlzIG5lY2Vzc2FyeSB0byBzdXBwb3J0IExvYWRMaWJyYXJ5KCkuCgpTdW4gSnVuICA1IDE3OjM0OjI0IDE5OTQgIEVyaWsgQm9zIChlcmlrQGhhY2t0aWMubmwpCgoJKiBbbG9hZGVyLypdCgkJLSBmaXhlZDogR2V0TW9kdWxlSGFuZGxlKCkgc29tZXRpbWVzIHJldHVybmVkCgkJICBhIHdyb25nIGhhbmRsZS4KCQktIGRvbid0IGluaXQgZGxscyB3aGVuIGNzID09IDAgKGx6ZXhwYW5kLCBkb2Vzbid0CgkJICBzZWVtIHRvIGhhdmUgYSBpbml0IGZ1bmN0aW9uKQoJCS0gTG9hZExpYnJhcnkgJiBMb2FkSW1hZ2Ugbm93IHJldHVybiBlcnJvciBpbnN0ZWFkCgkJICBvZiBzdG9wcGluZyB3aW5lLgoJCS0gbW92ZWQgbW9zdCBvZiBORS1mdW5jdGlvbnMgaW50byBvbmUgZmlsZS4KCQktIExvYWRMaWJyYXJ5KCkgdXNlcyB3X2ZpbGVzIGxpc3QgaW5zdGVhZCBvZiBpdHMKCQkgIG93biBsaXN0LgoJCS0gTkUgZXhlY3RhYmxlcyBhcmUgbm93IGZpeGVkLXVwIGFuZCBpbml0aWFsaXNlZCB3aGVuCgkJICBsb2FkZWQgaW5zdGVhZCBvZiBvbmx5IG9uY2UgYmVmb3JlIGNhbGxpbmcgSW5pdFRhc2suCgoJKiBbbWlzY2VtdS9pbnQxNS5jXSBbbWlzY2VtdS9pbnQzMS5jXQoJQWRkZWQuCQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJU3R1YnMgYWRkZWQgZm9yIHtHZXR8U2V0fVNlbGVjdG9yTGltaXQoKSwge0dldHxTZXR9U2VsZWN0b3JCYXNlKCkuCgoJKiBbbWlzYy9tYWluLmNdCglTdHViIGFkZGVkIGZvciBJc1JvbU1vZHVsZSgpLgoKCSogW21pc2NlbXUvaW50MjEuY10KCVNvbWUgY2xlYW51cCwgYWRkZWQgaGVhcCBmb3IgcmV0dXJuaW5nIGRhdGEuCgpKdW4gNiwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW3Rvb2xzL2J1aWxkLmNdCglDaGFuZ2UgTUFYX09SRElOQUxTCWRlZmluZSB0byBoaWdoZXIgdmFsdWUsIDEyOTkgZW50cmllcy4KCShNTVNZU1RFTSBkb2Vzbid0IGhhdmUgc3VjY2VzaXZlIG51bWJlcnMsIHNvbWUgYXJlIGFyb3VuZCAxMjAwKS4KCgkqIFt3aW5kb3dzL3V0aWxpdHkuY10KCUJ1ZyBmaXggaW4gd2luZG93c193c3ByaW50ZigpLCAodHdpY2UgaW5jcmVtZW50cyAuLi4pLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglCdWcgZml4IGluIFNldFdpbmRvd1BvcygpLCByZWRyYXcgd2FzIGRvbmUgaWYgZmxhZwoJCXdhcyBzZXQgdG8gU1dQX05PUkVEUkFXIHdoaWxlIFNXUF9TSE9XV0lORE9XKS4KCgkqIFttaXNjL21lc3NhZ2UuY10gW2NvbnRyb2xzL2NvbWJvLmNdCglBZGQgYW4gSW52YWxpZGF0ZVJlY3QoKSBpbiBXTV9TSE9XV0lORE9XIHRvIHN0YXRpc2Z5IHRoZSBuZXcgJ3NhdmV1bmRlcicuCgoJKiBbd2luZG93cy93aW4uY10KCUluIENyZWF0ZVdpbmRvd0V4KCksIGRvIFNldE1lbnUoKSBjYWxscyBhZnRlciB3aW5kb3cgY3JlYXRpb24sCgkJanVzdCBiZWZvcmUgc2VuZGluZyB0byBXTV9OQ0NBTENTSVpFLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUluIGZ1bmN0aW9uIFNldE1lbnUoKSwgbm93IHVzZSBTZXRXaW5kb3dQb3MoKSB3aXRoIAoJCWZsYWdzIFNXUF9GUkFNRUNIQU5HRUQgdG8gcmVhZGp1c3QgbWVudSBhcmVhLgoJRnVuY3Rpb24gTWVudUJhckNhbGNTaXplKCkgcmVkb25lLgoKU3VuIE1heSAyOSAxMTowODoyNCAxOTk0ICBEYXZpZCBCLiBUaG9tYXMgIChkdEB5ZW50YS5hYnEubm0udXMpCgogICAgICAgICogW29iamVjdHMvdGV4dC5jXQogICAgICAgIEZpeGVkIHByb2JsZW1zIGFzc29jaWF0ZWQgd2l0aCBEVF9XT1JEQlJFQUsgZmxhZy4gIFN0cmluZyBsZW5ndGgKICAgICAgICB3YXMgbm90IGJlaW5nIHByb3Blcmx5IGRlY3JlbWVudGVkIHdoZW4gbGluZXMgd2VyZSBmb2xkZWQsIGFuZAogICAgICAgIHdyYXBwaW5nIHdhcyBub3QgcGVyZm9ybWVkIHdoZW4gRFRfTk9DTElQIGFuZCBEVF9OT1BSRUZJWCB3ZXJlCiAgICAgICAgYm90aCBvbiBpbiBhZGRpdGlvbiB0byBEVF9XT1JEQlJFQUsuICBXaW5kb3dzIGRvZXMgd3JhcHBpbmcgaW4KICAgICAgICB0aGlzIGNhc2UsIGFuZCBub3cgc28gZG9lcyB3aW5lLgoKU3VuIEp1biAgNSAxOToxNzo0OSAxOTk0ICBPbGFmIEZsZWJiZSAgKG9sYWZAZHJhZ29uKQoKICAgICAgICAqIFtlZGl0LmNdCiAgICAgICAgY3AxIHdhcyB1bmluaXRpYWxpemVkIGlmZiBsaW5lbm8gPT0gMAoKICAgICAgICAqICBGaW5kRmlsZSB0ZXN0cyBmb3IgZXhpc3RhbmNlIG9mIGZpbGUgZXZlbiBpZiBhIGZ1bGwKICAgICAgICAgICBmaWxlbmFtZSB3YXMgc3VwcGxpZWQuIFdoYXQgYWJvdXQgdW5peCBmaWxlIG5hbWVzPwoKICAgICAgICAqIFtjb250cm9scy9saXN0Ym94IF0KICAgICAgICB3bmRQdHIgd2FzIHVuaW5pdGlhbGl6ZWQgZm9yIExCX1NFVFRPUElOREVYCgogICAgICAgICogW21pc2MvcHJvcGVydHkuY10gICAgIAogICAgICAgIERvIG5vdCBmcmVlIGxwUHJvcC4gSXMgaXQgcmVhbGx5IGFsbG9jYXRlZCBieSBtYWxsb2M/Cgl7ZWRpdGVkIGJ5IEJvYiBBbXN0YWR0OiBjaGFuZ2VkIGZyZWUoKSB0byBHbG9iYWxGcmVlKCl9CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBNYXkgMjggMTI6MDM6MjMgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIG1pc2NlbXUvaW50MjEuYyAoT3BlbkV4aXN0aW5nRmlsZSk6IAoJT3BlbkV4aXN0aW5nRmlsZSBuZWVkZWQgdG8gcmV0dXJuIGhhbmRsZSBpbiBBWCByZWdpc3RlciBpbnN0ZWFkCglvZiB0aGUgQlggcmVnaXN0ZXIuCgoJKiBtaXNjZW11L2ludDIxLmMgKGlvY3RsR2V0RGV2aWNlSW5mbyk6IAoJQWRkZWQgYSBsaXR0bGUgY29kZSB0byBnaXZlIGEgZmFrZSByZXN1bHQgZm9yIG5vcm1hbCBmaWxlcy4KCldlZCBNYXkgMjUgMjE6NTU6MzggMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglyZXR1cm4gdmFsdWUgZnJvbSBHbG9iYWxTaXplIHdhcyBjb21wbGV0ZWx5IHdyb25nLgoKCSogW21pc2NlbXUvaW50MjEuaF0KCWZpeGVkIGJ1ZyBpbiBGaW5kRmlyc3QuICBEaXJlY3RvcnkgcG9pbnRlciAoZHApIHdhcyBub3QgcGxhY2VkIGluCglkdGEgY29ycmVjdGx5LgoKCSogW3Rvb2xzL2J1aWxkLmNdCglmaXhlZCBjcmVhdGlvbiBvZiBwb3AuaCB0byBndWFyYW50ZWUgdGhhdCBmbGFncyBhcmUgcmVzdG9yZWQgY29ycmVjdGx5LgoKCSogW21pc2MvY29tbS5jXQoJY2hhbmdlZCBhbGwgb2NjdXJhbmNlIG9mIHN0cm5jbXAoKSB0byBzdHJuY2FzZWNtcCgpLgoJQnVpbGRDb21tRENCKCkgc2hvdWxkIG5vdCByZXF1aXJlIHRoYXQgT3BlbkNvbW0oKSBiZSBjYWxsZWQgZmlyc3QuCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglIZWFwIGluaXRpYWxpemVkIHRvIHNpemUgb2YgZnVsbCBzZWdtZW50IGxlc3Mgc3RhY2sgc2l6ZSBhbmQgCglhdXRvbWF0aWMgZGF0YSBzaXplLgoKU2F0IE1heSAyOCAwOToxNDozMyAxOTk0ICBSaWNrIFNsYWRrZXkgIChqcnNAd29ybGQuc3RkLmNvbSkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglDb3JyZWN0IHR5cG9zIGluIExpc3RCb3hSZXNldENvbnRlbnQgd2hlcmUgbHBscyB2YXJpYWJsZSBpcwoJdXNlZCB3aGVyZSBsc2xzMiB2YXJpYWJsZSBpcyBtZWFudC4gIERvbid0IGNhbGwgVVNFUl9IRUFQX0ZSRUUKCXR3aWNlIG9uIHRoZSBzYW1lIGhhbmRsZSBpZiBoRGF0YSBhbmQgaE1lbSBhcmUgdGhlIHNhbWUuCgoJKiBbZGVidWdnZXIvb3Bjb2Rlcy9pMzg2LWRpcy5jXQoJQWRkIG5ldyBuYW1lIGFycmF5IG5hbWVzX3JtdyBmb3IgdGFibGUgZHJpdmVuIGRlY29kaW5nIG9mIHRoZQoJMTYtYml0IG1vZC9ybSBmaWVsZC4gIE9taXQgbGFyZ2UgY2FzZSBzdGF0ZW1lbnQgaW4gT1BfRSBhbmQKCXJlcGxhY2Ugd2l0aCBhcnJheSByZWZlcmVuY2UgdG8gbWF0Y2ggZXhpc3RpbmcgY29kaW5nIHN0eWxlLgoJQWRkIG5ldyBzdGF0aWMgdmFyaWFibGUgbWFjaGluZSB3aXRoIHZhbHVlIDI4NiBvciAzODYgdG8KCWNvcnJlY3RseSBkZWNvZGUgbW9kL3JtIGZpZWxkIGluIGVpdGhlciAxNiBvciAzMiBiaXQgbW9kZXMuCglTZXQgaXQgaW4gcHJpbnRfaW5zbl9pezIsM304Ni4gIEluIE9QX0UgdXNlIGl0IHRvIGRlY2lkZSBob3cKCXRvIGRlY29kZSBtb2Qvcm0uICBXaGlsZSB0aGUgY29kZSB3YXMgY29ycmVjdCBmb3IgMTYgYml0IGNvZGUsCglpdCB3YXMgaW1wcm9wZXJseSBkZWNvZGluZyBtb2Qvcm0gZmllbGRzIG9uIHdvcmQgcHJlZml4ZWQKCTMyIGJpdCBpbnN0cnVjdGlvbnMuCgoJKiBbZGVidWdnZXIvZGVidWcubF0KCVJlY29nbml6ZSBuZXcgdG9rZW4gQUJPUlQuICAgUmVjb2duaXplIHNpbmdsZSBsZXR0ZXJzICdwJwoJYW5kICdxJyBhcyB0b2tlbnMuCgoJKiBbZGVidWdnZXIvZGJnLnldCglBZGQgbmV3IHRva2VuIEFCT1JULiAgQWxsb3cgcHJpbnQgY29tbWFuZCB0byBiZSBpbnZva2VkIGJ5CgkncCcgYW5kIHF1aXQgY29tbWFuZCBieSAncScsIGFsYSBHREIuICBDaGFuZ2UgbG90cyBvZiAnfTsnCgl0byBqdXN0ICd9Jy4gIEFkZCBzdGF0aWMgZHVtbXlfcmVncyB0byB3aW5lX2RlYnVnIHNvIHRoYXQKCXdpbmVfZGVidWcoMCwgTlVMTCkgZG9lc24ndCBjb3JlIGR1bXAgd2l0aCBxbWFnaWMuCgoJKiBbZGVidWdnZXIvaW5mby5jXQoJQ29ycmVjdCBzeW50YXggb2YgYnJlYWsgY29tbWFuZCBpbiBoZWxwdGV4dCBhbmQgb21pdCBmb3JtZXIKCWNvbW1lbnQgYWJvdXQgcHJvYmFibGUgYnVnZ2luZXNzIG9mIHRoZSBkaXNhc3NlbWJseSBzaW5jZSBpdAoJaXMgbm93IGNvcnJlY3QuICBDaGFuZ2UgZnByaW50ZiBvZiBmaXJzdCBiYWNrdHJhY2Ugc3RhY2sKCWZyYW1lIHRvIG1hdGNoIHRoYXQgb2YgdGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudCBmcmFtZXMuCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglDaGFuZ2UgY29uc3RydWN0aW9uIG9mIGNvbW1hbmQgbGluZSBpbiBDcmVhdGVQU1AgZnJvbSBjcmVhdGluZwoJYSBzdHJpbmcgdGhhdCBsb29rcyBsaWtlICJhcmcxIGFyZzIgXHIiIHRvICJhcmcxIGFyZzIiLiAgQSBET1MKCVBTUCBjb21tYW5kIGxpbmUgbG9va3MgbGlrZSAiIGFyZzEgYXJnMlxyIiB3aXRoIHRoZSBsZW5ndGggbm90CglpbmNsdWRpbmcgdGhlIHRyYWlsaW5nICJcciIgYnV0IHRoYXQgaXMgbm90IGhvdyBXaW5kb3dzIGRvZXMgaXQuCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCUNoYW5nZSB1c2VzIG9mICVzIHRvIHByaW50IHN0cmluZ3MgaW4gR2V0TW9kdWxlSGFuZGxlIHRvICV4IHNvCgl0aGF0IHN0cmluZyBJRHMgZG9uJ3QgY2F1c2UgYSBjb3JlIGR1bXAgd2l0aCBxbWFnaWMuICBIYW5kbGUKCWNvbnZlcnRpbmcgYSBzdHJpbmcgaWQgdG8gYSBsaXRlcmFsIG1vZHVsZSBoYW5kbGUuICBGb3IKCWV4YW1wbGUsIEdldE1vZHVsZUhhbmRsZSgoTFBTVFIpIDB4NTcpIG5vdyByZXR1cm5zIDB4NTcgaWYKCWl0IGlzIGEgcmVhbCBtb2R1bGUgaGFuZGxlLgoKCSogW21pc2MvbWVzc2FnZS5jXQoJSW4gTWVzc2FnZUJveCwgdHJhbnNsYXRlIGEgTlVMTCB0aXRsZSBhcmd1bWVudCB0byB0aGUgc3RyaW5nICJFcnJvciIuCgoJKiBbbWlzYy9wcm9maWxlLmNdCglJbiBHZXRTZXRQcm9maWxlIHRyYW5zbGF0ZSBhIE5VTEwgRGVmYXVsdCBhcmd1bWVudCB0byAiIi4gIEFueQoJY2FsbGVyIHdob3NlIERlZmF1bHQgYXJndW1lbnQgaXMgTlVMTCBpcyBidWdneSwgYnV0IENIQVJNQVAgZG9lcyBpdAoJYW55d2F5LgoKCSogW29iamVjdHMvZm9udC5jXQoJQWRkIE5VTEwgcG9pbnRlciBjaGVja3MgaW4gRW51bUZvbnRGYW1pbGllcyB0byBwcmV2ZW50IGNvcmUgZHVtcHMuCgpTYXQgTWF5IDI4IDIwOjAxOjUxIDE5OTQgSm9uIFRvbWJzIChqb25AZ3RleDAyLnVzLmVzKSAKCgkqIE5ldyBvcHRpb25zL3Jlc291cnNlcyBub3NhdmV1bmRlcnMgYW5kIG5vYmFja2luZ3N0b3JlLiAgQnkgCglkZWZhdWx0IGJhY2tpbmdzdG9yZSBhbmQgc2F2ZXVuZGVycyBhcmUgbm93IGVuYWJsZWQsIHRoZXNlIHVzZSAKCW1vcmUgbWVtb3J5IGJ1dCBhdm9pZHMgdGhvc2Ugc2xvdyAoc29tZXRpbWVzIG11bHRpcGxlKSByZWRyYXdzIAoJY2F1c2VkIGJlIGV4cG9zdXJlIGV2ZW50cy4KCk1heSAzMCwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW21pc2MvZHJpdmVyLmNdIE5ldyBmaWxlCglTa2VsZXRvbiBmb3IgJ0luc3RhbGxhYmxlIFdpbmUgRHJpdmVycycgZnVuY3Rpb25zLiA6LSkKCSogW21pc2MvYXVkaW8uY10gTmV3IGZpbGUKCVNrZWxldG9uIGZvciBiYXNpYyAnQXVkaW8gRHJpdmVyJyBmdW5jdGlvbnMuCgkqIFttaXNjL25ldHdvcmsuY10gTmV3IGZpbGUKCVN0dWJzIGZvciBmZXcgbmV0d29ya2luZyBmdW5jdGlvbnMuCgoJKiBbbWlzYy9tbXN5c3RlbS5jXQoJTW9yZSBjb2RpbmcgLi4uIGEgZHVzdCBpbiBhIGdhbGF4eSAuLi4KCSogW21pc2Mvc2hlbGwuY10KCVNvbWUgY29kaW5nIGZvciAnUmVnWFhYJyBmdW5jdGlvbnMgLi4uIGEgZHVzdCBpbiB0aGUgd2luZCAuLi4KCgkqIFttaXNjL3Byb2ZpbGUuY10KCUJ1ZyBmaXggaW4gR2V0U2V0UHJvZmlsZSgpLCBiYWQgZW51bWVyYXRpb24gaWYgS2V5TmFtZSA9PSBOVUxMLgoKCSogW29iamVjdHMvZ2RpLmNdCglOZXcgZnVuY3Rpb24gQ3JlYXRlRGlzY2FyZGFibGVCaXRtYXAoKSwgaXQganVzdCBjYWxsaW5nIAoJQ3JlYXRlQ29tcGF0aWJsZUJpdG1hcCgpIGZvciBub3cuIEl0J3MgZ2V0ICdjbG9jay5leGUnIHJ1bm5pbmcgISA6LSkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCgkqIFtjb250cm9scy9jb21iby5jXQoJTmV3IGZvbnQgbWVtYmVyIGFzc2lnbmVkIHRvIFNZU1RFTV9GT05UIGFzIGRlZmF1bHQuCglBZGRlZCBwcm9jZXNzaW5nIGZvciBXTV9TRVRGT05UIG1lc3NhZ2U7CgoKVHVlIE1heSAzMSAyMDozNDoyNSBFRFQgMTk5NCAgSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEBjcy51bWwuZWR1PgoKICAgICAgICAqIFt3aW5kb3dzL2V2ZW50LmNdCiAgICAgICAgQWRkZWQgQXN5bmNNb3VzZUJ1dHRvbnNTdGF0ZXMgYXJyYXkgZm9yIEdldEFzeW5jS2V5U3RhdGUuCgogICAgICAgICogW3dpbmRvd3Mva2V5Ym9hcmQuY10KICAgICAgICBJbXBsZW1lbnRlZCBiZWdpbm5pbmcgb2YgR2V0QXN5bmNLZXlTdGF0ZS4KCldlZCBNYXkgMjUgMjM6MzU6MDMgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKICAgICAgICAqIFtvYmplY3RzL21ldGFmaWxlLmNdIFtpbmNsdWRlL21ldGFmaWxlLmhdCiAgICAgICAgICBbd2luZG93cy9tYXBwaW5nLmNdIFtvYmplY3RzL2NsaXBwaW5nLmNdIFtvYmplY3RzL2JpdGJsdC5jXQogICAgICAgICAgW3dpbmRvd3MvZGMuY10KICAgICAgICBGdXJ0aGVyIG1ldGFmaWxlIHN1cHBvcnQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBNYXkgMjMgMTU6MDc6MzYgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUFsbG9jYXRlIGhlYXAgYW5kIHN0YWNrIHNlZ21lbnRzIGFzIDY0ay4KClNhdCBNYXkgMjEgMDE6MTU6NDkgMTk5NCAgUmljayBTbGFka2V5ICAoanJzQHdvcmxkLnN0ZC5jb20pCgogICAgICAgICogW2xvYWRlci9zZWxlY3Rvci5jXQogICAgICAgIENvcnJlY3QgdHlwb3Mgd2hlcmUgbWVtY3B5IGlzIHVzZWQgaW5zdGVhZCBvZiBtZW1zZXQuCgogICAgICAgICogW2xvYWRlci9yZXNvdXJjZS5jXQogICAgICAgIEFsbG93IGZvciBsZWdpdGltYXRlIGNhc2VzIHdoZXJlIGJpU2l6ZUltYWdlIGlzIDAgaW4gTG9hZEljb24KICAgICAgICBieSBjYWxjdWxhdGluZyB0aGUgdmFsdWUgd2hlbiB0aGUgYml0bWFwIGlzIG5vdCBjb21wcmVzc2VkLgoKICAgICAgICAqIFttaXNjZW11L2ludDIxLmNdCiAgICAgICAgRml4IE5VTEwgZGVyZWZlcmVuY2UgY2F1c2VkIGJ5IHN1cGVyZmx1b3VzIERPU19jbG9zZWRpciBpbiBGaW5kTmV4dC4KCiAgICAgICAgKiBbbG9hZGVyL3Jlc291cmNlLmNdCiAgICAgICAgTmV3IGZ1bmN0aW9uIHR5cGVfbWF0Y2ggdG8gaGFuZGxlIHN0cmluZyByZXNvdXJjZSB0eXBlcyBhcwogICAgICAgIHdlbGwgYXMgSURzLiAgSW4gYWRkaXRpb24sIGNvbXBhcmUgb25seSBsb3cgNCBiaXRzIG9mIHR5cGVfaWQKICAgICAgICB3aGVuIGJvdGggbnVtYmVycyBhcmUgSURzIHNvIHRoYXQgMHgwMDAyIG1hdGNoZXMgMHg4MDAyLgogICAgICAgIEluIEZpbmRSZXNvdXJjZUJ5TnVtYmVyIGFuZCBGaW5kUmVzb3VyY2VCeU5hbWUgdXNlIHR5cGVfbWF0Y2gKICAgICAgICBpbnN0ZWFkIG9mIGNvbXBhcmluZyBudW1iZXJzLiAgSW4gRmluZFJlc291cmNlIGhhbmRsZSB0aGUKICAgICAgICAiI251bWJlciIgc3ludGF4IGFuZCBlbXB0eSBzdHJpbmdzIGluIGJvdGggdGhlIHJlc291cmNlIGFuZAogICAgICAgIHR5cGUgbmFtZXMuCgpNb24gTWF5IDIzIDAwOjQ4OjI1IDE5OTQgIFJpY2sgU2xhZGtleSAgKGpyc0B3b3JsZC5zdGQuY29tKQoKICAgICAgICAqIFt3aW5kb3dzL2RpYWxvZy5jXQogICAgICAgIEZpeCBpbmFkdmVydGVudCBwcmludGluZyBvZiBzdHJpbmcgSURzIGFzIHN0cmluZ3MuCgpNYXkgMjMsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9tZW51LmNdCglOZXcgZnVuY3Rpb25zIEdldE1lbnVJdGVtQ291bnQoKSwgR2V0TWVudUl0ZW1JRCgpLgoJCUdldE1lbnVTdHJpbmcoKSAmIEhpbGl0ZU1lbnVJdGVtKCkuCglCdWcgZml4IGluIENoZWNrTWVudUl0ZW0oKS4KCUZ1bmN0aW9uIFNldE1lbnUoKSBub3cgbWFrZSBjbGllbnQgYXJlYSByZWNhbGMgaWYgbWVudSByZW1vdmVkLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglCdWcgZml4IGluIFNldFdpbmRvd1BvcygpLCBubyBtb3JlIFhNYXBwaW5nIG9yIFhDb25maWd1cmluZwlvZgoJCXdpbmRvd3Mgd2l0aCBpbml0aWFsIHdpZHRoIG9yIGhlaWdodCBlcXVhbCB6ZXJvLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdCglOZXcgZnVuY3Rpb24gRW51bU9iamVjdHMoKSwgdXNpbmcgbmV3IGxwUGVuQnJ1c2hMaXN0IGJ1aWxkdXAKCQlmcm9tIGNhbGxzIHRvIG5ldyBmdW5jdGlvbiBHRElfQXBwZW5kVG9QZW5CcnVzaExpc3QoKS4KCQkoJ3BicnVzaC5leGUnIGRvbid0IHNob3cgaXRzIGZhY2UgeWV0ICEgLi4uIDotKCApCglOZXcgRU1QVFkgU1RVQiBmb3IgZnVuY3Rpb24gU2V0T2JqZWN0T3duZXIoKSwKCQkoJ21wbGF5ZXIuZXhlJyBjYWxsIGl0IHZpYSBHZXRQcm9jQWRkcmVzcygpIC4uLikKCgkqIFtvYmplY3RzL2ZvbnQuY10KCU5ldyBpbnRlcm5hbCBmdW5jdGlvbnMgUGFyc2VGb250UGFybXMoKSAmIEluaXRGb250c0xpc3QoKS4KCUVudW1Gb250cygpICYgRW51bUZvbnRGYW1pbGllcygpIGVudW1lcmF0ZXMgZm9udHMgKG5vIG1vcmUgZHVtbWllcykuCglGT05UX01hdGNoRm9udCBub3cgbWFrZSByZXRyaWVzIHRvIGZpbmQgY2xvc2VzdC1zbWFsbGVzdCBmb250LgoJCSgnY2hhcm1hcC5leGUnIGNhbiBub3cgc2hvdyB0aGUgZGlmZmVyZW50cyBmb250cyBhdmFpbGFibGUpCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCVVzZSBzbWFsbCBkb3MgT0JNX09MRF9DTE9TRSBidXR0b24gZm9yIE1ESSB3aW5kb3dzLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10gW29iamVjdHMvYml0bWFwLmNdCglTdGFydCB0byByZW1vdmUgb2Jzb2xldGUgZ2xvYmFscyBzdWNoIFhUX3NjcmVlbiAuLi4KCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJTWFrZSBmdW5jdGlvbiBHZXRQcm9jQWRkcmVzcygpIHdvcmtpbmcgYWxzbyB3aXRoIGJ1aWx0aW4gRExMcy4KClR1ZSBNYXkgMjQgMjA6MTg6MDIgMTk5NCAgRXJpayBCb3MgKGVyaWtAaGFja3RpYy5ubCkKCiAgICAgICAgKiBbaWYxNjMyL3N5c3RlbS5zcGVjXSBbaWYxNjMyL3Rvb2xoZWxwLnNwZWNdCiAgICAgICAgc3lzdGVtLmRsbCAmIHRvb2xoZWxwLmRsbCBhZGRlZC4KCiAgICAgICAgKiBbbG9hZGVyL2xpYnJhcnkuY10KICAgICAgICBNb2RpZmllZCBHZXRNb2R1bGVGaWxlTmFtZSgpIHRvIHJldHVybiB0aGUgZnVsbAogICAgICAgIGZpbGVuYW1lLgogICAgICAgIEFkZGVkIGEgY2hlY2sgdG8gTG9hZExpYnJhcnkoKSB0byBwcmV2ZW50IGxvYWRpbmcKICAgICAgICBidWlsdCBpbiBkbGxzLiAoZWcuIHVzZXIuZXhlKQogICAgICAgIEFkZGVkIGEgY2hlY2sgdG8gRnJlZUxpYnJhcnkoKSB0byBwcmV2ZW50IGJ1aWx0LWluCiAgICAgICAgZGxscyBmcm9tIGJlaW5nIGZyZWVkLgogICAgICAgIE1vZGlmaWVkIEdldFByb2NBZGRyZXNzKCkgdG8gc3VwcG9ydCBidWlsdGluIGRsbHMuCgogICAgICAgICogW2xvYWRlci9zaWduYWwuY10gW21pc2NlbXUvaW50MmYuY10KICAgICAgICBBZGRlZCA9PiBwaWZlZGl0IHJ1bnMuCgogICAgICAgICogW21pc2MvZG9zX2ZzLmNdCiAgICAgICAgQWRkZWQgYSBOVUxMLXB0ciBjaGVjayB0byBET1NfY2xvc2VkaXIoKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIE1heSAxNyAyMzowMzoxNiAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW3dpbmRvd3MvZGNlLmNdCglGaXhlZCBidWcgd2l0aCBkY2UgaW5pdGlhbGl6YXRpb24gdGhhdCB3YXMgY2F1c2luZyBkaWFsb2cgYm94ZXMgdG8gbm90CgliZSBkaXNwbGF5ZWQuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglCZXR0ZXIgZml4IGZvciBidWcgZm91bmQgYnkgTWFydGluLgoKU2F0IE1heSAxNCAxOTo0ODozOSAxOTk0ICBSaWNrIFNsYWRrZXkgIChqcnNAd29ybGQuc3RkLmNvbSkKCiAgICAgICAgKiBbIG1lbW9yeS9oZWFwLmMgXQogICAgICAgIFJlZGlyZWN0IEhFQVBfUmVBbGxvYyBjYWxscyB3aXRoIE5VTEwgYXJndW1lbnQgdG8gSEVBUF9BbGxvYy4KCk1heSAxNiwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW29iamVjdHMvZm9udC5jXQoJTWFrZSBFbnVtRm9udHMoKSBjYWxsaW5nIGEgY2FsbGJhY2sgd2l0aCBkdW1teSBmb250cyAuLi4gOi0pCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglBZGQgRW1wdHkgU3R1YiBmb3IgRXh0VGV4dE91dCgpLCB3aGljaCB0ZW1wb3JhcmVseSBjYWxsIFRleHRvdXQoKS4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCVRlbXBvcmFyZWx5IGdvIGFyb3VuZCBidWcgaW4gQ2FsbFdpbmRvd1Byb2MoKSwgeW91IHdpbGwgc2VlIHByaW50ZnMuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJTWFrZSBFRElUIGNvbnRyb2xzIGZvY3VzZWQgYnkgYSBtb3VzZSBjbGljay4KCgkqIFttaXNjL3Byb3BlcnR5LmNdCglCdWcgRml4IGluIGZ1bmN0aW9uIEVudW1Qcm9wcygpLCBiZXR0ZXIgdXNlIG9mIENhbGxCYWNrMTYoKS4KCgkqIFttaXNjL21tc3lzdGVtLmNdCglCYXNpYyBTa2VsdG9uJ3MgZm9yIE1DSSBtZXNzYWdlcyBkaXNwYXRjaGluZyBmdW5jdGlvbi4KClN1biBNYXkgMTUgMTY6MTU6MTcgMTk5NCAgRXJpayBCb3MgKGVyaWtAaGFja3RpYy5ubCkKCiAgICAgICAgKiBbd2luZG93cy91dGlsaXR5LmNdCiAgICAgICAgQWRkZWQgd2luZG93c193c3ByaW50ZigpIGZvciB0aGUgZW11bGF0b3IsIHdzcHJpbnRmKCkgaXMKICAgICAgICBmb3IgbGlid2luZS4KClNhdCBNYXkgMTQgMjI6MTY6NDAgMTk5NCAgUmljayBTbGFka2V5ICAoanJzQHdvcmxkLnN0ZC5jb20pCgogICAgICAgICogW21pc2MvY3Vyc29yLmNdCiAgICAgICAgRml4IHBvaW50ZXIgcHJvYmxlbXMgaW4gTG9hZEN1cnNvciBsZWFkaW5nIHRvIGhlYXAgY29ycnVwdGlvbi4KCiAgICAgICAgKiAgWyBjb250cm9scy9tZW51LmMgXQogICAgICAgIEZpeCB0d28gTlVMTCBkZXJlZmVyZW5jaW5nIGJ1Z3MuCgpTdW4gTWF5IDE1IDIwOjA3OjQ4IDE5OTQgIFJpY2sgU2xhZGtleSAgKGpyc0B3b3JsZC5zdGQuY29tKQoKICAgICAgICAqIFtvYmplY3RzL2ZvbnQuY10KICAgICAgICBGaXggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNpbmcgYnVnIGluIEdldENoYXJXaWR0aC4KCiAgICAgICAgKiBbbG9hZGVyL3Jlc291cmNlLmNdCiAgICAgICAgRml4IHVuZGVyLWFsbG9jYXRpb24gb2YgbWVtb3J5IGluIExvYWRBY2NlbGVyYXRvcnMuCgogICAgICAgICogW3dpbmRvd3MvY2xhc3MuY10KICAgICAgICBJZ25vcmUgbmVnYXRpdmUgc2l6ZXMgZm9yIGV4dHJhIGZpZWxkcyBpbiBSZWdpc3RlckNsYXNzLgoKU3VuIE1heSAxNSAwNjozNTowMyAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgogICAgICAgICogW29iamVjdHMvbWV0YWZpbGUuY10gW2luY2x1ZGUvbWV0YWZpbGUuaF0gW2luY2x1ZGUvd2luZG93cy5oXQogICAgICAgICAgW29iamVjdHMvZ2Rpb2JqLmNdIFtvYmplY3RzL2JydXNoLmNdIFtvYmplY3RzL3Blbi5jXQogICAgICAgICAgW29iamVjdHMvdGV4dC5jXSBbb2JqZWN0cy9kY3ZhbHVlcy5jXSBbd2luZG93cy9ncmFwaGljcy5jXQogICAgICAgICAgW3dpbmRvd3MvZGMuY10gW3dpbmRvd3MvbWFwcGluZy5jXQogICAgICAgIEJlZ2lubmluZ3Mgb2YgbWV0YWZpbGUgc3VwcG9ydC4KCiAgICAgICAgKiBbbWlzYy9maWxlLmNdCiAgICAgICAgQ29ycmVjdGVkIHNwZWxsaW5nIG9mIF9sY3JlYXQuCgogICAgICAgICogW2NvbnRyb2xzL2VkaXQuY10KICAgICAgICBNaW5vciBidWcgZml4ZXMuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTWF5IDksIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9zY3JvbGwuY10KCU1ha2UgdGh1bWJ0cmFjayBidXR0b24gZGlzYXBwZWFyIGlmIHNjcm9sbCBib3ggcmF0aW8gPCAzOjEuCglNYWtlIGFycm93IGJ1dHRvbnMgcmVjdGFuZ3VsYXIgaWYgc2Nyb2xsIGJveCByYXRpbyA8IDI6MS4KCUFkZCBjb2RlIGZvciBTQlNfVE9QQUxJR04sIFNCU19CT1RUT01BTElHTiwgCgkJCQlTQlNfTEVGVEFMSUdOICYgU0JTX1JJR0hUQUxJR04uCglCdWcgZml4IGluIE5DX0NyZWF0ZVNjcm9sbEJhcnMoKSwgbm8gbW9yZSBiaWdidXR0IGluIGNhbGVuZGFyLmV4ZS4uLiA6LSkKCgkqIFtsb2FkZXIvbGlicmFyeS5jXSBbbG9hZGVyL3Rhc2suY10gW21pc2MvZXhlYy5jXQoJQ29udGludWUgcGxheWluZyBhcm91bmQgdHJ5aW5nIHRvIGdldCBhIHNlY29uZCB0YXNrIHJ1bm5pbmcuCgoJKiBbd2luZG93cy9tZGkuY10KCUNoYW5nZSBPQk1fQ0xPU0UgZm9yIE9CTV9PTERfQ0xPU0UsIGEgc21hbGxlciBkb3QgYnV0dG9uIHdoZW4gbWF4aW1pemVkLgoKCSogW2V2ZXJ5d2hlcmVdCglBZGRpbmcgcHJldmlvdXMgd29ya3Mgb2YgdGhlIEFwciAyNSwgOTQuCgpUdWUgTWF5IDEwIDE4OjA5OjE0IDE5OTQgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtpZjE2MzIvbW1zeXN0ZW0uc3BlY10gW21pc2MvbW1zeXN0ZW0uY10gW2luY2x1ZGUvbW1zeXN0ZW0uaF0KCUFkZGVkIE1hcnRpbidzIG1tc3lzdGVtLmRsbCBzdHVicy4KCgkqIFttaXNjL3NvdW5kLmNdCglBZGRlZCByZW1haW5pbmcgc3R1YnMgZm9yIHNvdW5kLmRsbC4KCgkqIFtpZjE2MzIvc2hlbGwuc3BlY10gW21pc2Mvc2hlbGwuY10KCUZpeGVkIHByb3RvdHlwZXMgKEkgZm91bmQgdGhlbSBpbiBCQyA0KSBhbmQgYWRkZWQgU2hlbGxBYm91dCgpCglhbmQgQWJvdXREbGdQcm9jKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1heSAxLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJQWRkIFhVbmdyYWJQb2ludGVyKCkgJiBYVW5ncmFiU2VydmVyKCkgaW4gd2luZV9mYXVsdCgpLgoKRnJpIEFwciAyMiAxOTozMDowOCAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW29iamVjdHMvYml0Ymx0LmNdCgljb2xvcl9zdHJldGNoKCkgcmV3cml0dGVuIHRvIHVzZSBpbnRzIG9ubHkuICpmYXN0ISoKCUJMQUNLT05XSElURSAmIFdISVRFT05CTEFDSyBzdHJldGNobW9kZXMgcmVkaXJlY3RlZCB0bwoJdXNlIGNvbG9yX3N0cmV0Y2goKS4KCk1vbiBNYXkgIDIgMjE6Mzk6NDMgMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtjb250cm9scy9tZW51LmNdCglTZXRTeXNNZW51KCkgYWRkZWQuCgoJKiBbbWlzYy9jdXJzb3IuY10KCUdldEN1cnNvcigpIGFkZGVkLgoKCSogW21pc2MvbWFpbi5jXQoJU3dhcE1vdXNlQnV0dG9uKCkgYWRkZWQsIChOT1ApLgoKCSogW3dpbmRvd3Mvd2luLmNdCglHZXREZXNrdG9wSHduZCgpIGFkZGVkLgoKCSogW2lmMTYzMi8qc3BlY10KCUFkZGVkIG5vdCBpbXBsZW1lbnRlZCBmdW5jdGlvbnMgZGVmcyBhcyBjb21tZW50LgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglDaGFuZ2UgV1NBR2V0WGJ5WSgpIGZ1bmN0aW9ucyB0byBub24tYmxvY2tpbmcgb25lcywKCUFkZGVkIFdTQUFzeW5jU2VsZWN0KCkuIAoJKFdTQSBmdW5jdGlvbnMgY2FuJ3QgYmUgY2FuY2VsZWQgeWV0KS4KCldlZCBBcHIgMjAgMjM6NTg6NTggMTk5NCAgU2NvdHQgQS4gTGFpcmQgIChzY290dEBjdXJseSkKCgkqIG1pc2MvcHJvZmlsZS5jOiBGaXhlZCBidWcgd2l0aCBHZXRJbmlGaWxlTmFtZSByZXR1cm5pbmcgd3JvbmcKCXBhdGggd2hlbiBnaXZlbiBhIHNpbXBsZSBmaWxlIG5hbWUuICBGaXhlZCBHZXRTZXRQcm9maWxlIHRvIGFsbG93CgllbnVtZXJhdGluZyBhbGwga2V5IG5hbWVzIHdoZW4gS2V5TmFtZSBpcyBudWxsLgoKQXByIDI1LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUFkZCBwcm90ZWN0aW9uIHRvIEJpdEJsdCgpICYgU3RyZXRjaEJsdCgpIGZvciB3aWR0aCBvciBoZWlnaHQgPSAwLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBdm9pZCBwYWludGluZyBpbiBOQ19Eb05DUGFpbnQoKSBpZiBJc1dpbmRvd1Zpc2libGUoKS4KCVNpbXBsaWZ5IE5DX1RyYWNrTW91c2VNZW51QmFyKCkgYmVjYXVzZSBjb2RlIG1vdmVkIHRvIE1lbnVGb2N1c0xvb3AoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQ3JlYXRlV2luZG93RXgoKSAmIERlc3Ryb3lXaW5kb3coKSBub3cgY2FsbCByZXNwZWN0aXZlbHkKCQlBZGRXaW5kb3dUb1Rhc2soKSAmIFJlbW92ZVdpbmRvd0Zyb21UYXNrKCkuCglOZXcgZW1wdHkgc3R1YiBmb3IgZnVuY3Rpb24gQW55UG9wdXAoKS4KCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJQnVnIEZpeCA6IEdldE1vZHVsZUZpbGVOYW1lKCkgbm93IHJldHVybiBmdWxsIHBhdGggZmlsZW5hbWUuCgoJKiBbaW5jbHVkZS9tZW51LmhdIFtjb250cm9scy9tZW51LmNdCglBZGQgaFRleHQgaGFuZGxlIGFuZCByZW1vdmUgb2Jzb2xldGUgTUVOVUlURU0gc3RydWN0IG1lbWJlcnMuCglBZGQgYSBSZWxlYXNlQ2FwdHVyZSgpIGluIFNldE1lbnUoKSB3aGVuIG1lbnViYXIgY2hhbmdlZCB3aGlsZSBjYXB0dXJlZC4KCUFkZCBNZW51TW91c2VNb3ZlKCkgTWVudUJ1dHRvblVwKCkgaW4gZnVuY3Rpb24gTWVudUZvY3VzTG9vcCgpLgoKCSogW21pc2MvZmlsZS5jXQoJR2V0VGVtcEZpbGVuYW1lKCkgbm93IGNyZWF0ZSBhIGZpbGUuCglfbGNyZWF0ZSgpIHVzZSB1bml4IG9wZW4gKG5hbWUsIG1vZGUsIHBlcm0pLCB3aXRoIHBlcm09TzY2Ni4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCVJlbW92ZSB0ZW1wb3Jhcmx5IGJ1aWx0aW4gU0hFTEwuRExMLCBBZGQgTU1TWVNURU0uRExMIGluIGJ1aWx0aW4gbGlzdC4KCgkqIE5ldyBmaWxlIFttaXNjL21tc3lzdGVtLmNdCgkqIE5ldyBmaWxlIFtpbmNsdWRlL21tc3lzdGVtLmhdCgkqIE5ldyBmaWxlIFtpZjE2MzIvbW1zeXN0ZW0uc3BlY10KCU1hbnksIG1hbnkgZW1wdHkgc3R1YnMgLi4uIDotKQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKV2VkIEFwciAyMCAxNDo1MzozNSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW3Rvb2xzL2J1aWxkLmNdIFtpZjE2MzIvY2FsbC5TXSBbaWYxNjMyL0ltYWtlZmlsZV0KCUZpeGVkIGJ1ZyBmb3Igbm9uLUxpbnV4IHN5c3RlbXMuCgpBcHIgMTgsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFt3aW5kb3dzL3dpbi5jXQoJQnVnIGZpeGVkIGluIENyZWF0ZVdpbmRvd0V4KCkgOiBOb3cgdXNlIFNldE1lbnUoKSBmb3IgbWVudWJhciBzZXR1cC4KCU5ldyBlbXB0eSBzdHViIGZvciBmdW5jdGlvbiBTZXRTeXNNb2RhbFdpbmRvdygpLgoKCSogW21pc2MvZXhlYy5jXQoJTmV3IGVtcHR5IHN0dWIgZm9yIGZ1bmN0aW9uIEV4aXRXaW5kb3dzKCkuCgoJKiBbb2JqZWN0cy9mb250LmNdCglOZXcgZW1wdHkgc3R1YiBmb3IgZnVuY3Rpb24gRW51bUZvbnRzKCkuCgoJKiBOZXcgZmlsZSBbbWlzYy9wcm9wZXJ0eS5jXQoJTmV3IGZ1bmN0aW9ucyBSZW1vdmVQcm9wKCksIEdldFByb3AoKSwgU2V0UHJvcCgpICYgRW51bVByb3BzKCkuCgoJKiBOZXcgZmlsZSBbbWlzYy9zaGVsbC5jXQoJTmV3IGVtcHR5IHN0dWJzIGZvciBmdW5jdGlvbiBSZWdpc3RlclNoZWxsUHJvYygpLCAKCQkJU2hlbGxFeGVjdXRlKCkgJiBTaGVsbFByb2MoKS4KCgkqIE5ldyBmaWxlcyBbbG9hZGVyL3Rhc2suY10gJiBbaW5jbHVkZS90YXNrLmhdCglNb3ZlIGZ1bmN0aW9ucyBHZXRXaW5kb3dUYXNrKCksIEdldE51bVRhc2soKSwgRW51bVRhc2tXaW5kb3dzKCkKCQlmcm9tICdsb2FkZXIvbGlicmFyeS5jJy4KCgkqIFtpZjE2MzIvdXNlci5jXSBbaWYxNjMyL2tlcm5lbC5jXQoJUHV0IEF0b21zIGZ1bmN0aW9ucyBlbnRyaWVzLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglOZXcgZnVuY3Rpb25zIERpckRsZ1NlbGVjdENvbWJvQm94KCkgJiBEaXJEbGdMaXN0Q29tYm9Cb3goKS4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglOZXcgZnVuY3Rpb25zIERpckRsZ1NlbGVjdCgpICYgRGlyRGxnTGlzdCgpLgoKU3VuIEFwciAxNyAyMDo1Nzo1OSAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW29iamVjdHMvdGVzdC5jXQoJR3JheVN0cmluZygpIGFkZGVkLgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJQ2FsbEdyYXlTdHJpbmdQcm9jKCkgYWRkZWQuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpZjE2MzIvbW1zeXN0ZW0uc3BlY10KCUFkZGVkLgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2lmMTYzMi91c2VyLnNwZWNdCglBZGRlZCBmb3Jnb3R0ZW4gc3BlY3MgZm9yIGF0b20gZnVuY3Rpb25zLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgQXByIDEyIDAwOjA1OjMxIDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBtaXNjL3NweS5jIChTcHlJbml0KTogQWRkZWQgbW9yZSBtZXNzYWdlIHR5cGVzCgoJKiBbd2luZG93cy9tZGkuY10gW2luY2x1ZGUvbWRpLmhdCglNYXhpbWl6aW5nIGFuZCByZXN0b3JpbmcgY2hpbGQgd2luZG93cy4KCVRpbGluZyBvZiBjaGlsZCB3aW5kb3dzLgoKTW9uIEFwciAxMSAyMDo0ODoyOCAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbd2luZG93cy93aW5wb3MuY10KCVJldmVydCBmb2N1cyBhbmQgYWN0aXZhdGlvbiB0byBwcmV2aW91cyB3aW5kb3cgd2hlbiBoaWRpbmcgYSB3aW5kb3cuCgoJKiBbd2luZG93cy9zeXNjb2xvci5jXQoJSW1wbGVtZW50ZWQgc3lzdGVtIGNvbG9yIG9iamVjdHMgKGJydXNoZXMgYW5kIHBlbnMgY3JlYXRlZCBhdAoJU2V0U3lzQ29sb3IoKSB0aW1lIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UpLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFtjb250cm9scy9idXR0b24uY10KCUNoYW5nZWQgcGFpbnRpbmcgY29kZSB0byB1c2Ugc3lzdGVtIGNvbG9yIG9iamVjdHMuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglOZXcgZnVuY3Rpb24gTVNHX0ludGVybmFsR2V0TWVzc2FnZSgpIGZvciBpbnRlcm5hbCBtZXNzYWdlcwoJbG9vcHMgKGUuZy4gZm9yIGRpYWxvZ3Mgb3IgbWVudXMpLgoKCSogW3dpbmRvd3MvaG9vay5jXSBbaW5jbHVkZS9ob29rLmhdICAoTmV3IGZpbGVzKQoJQmVnaW5uaW5nIG9mIHRoZSB3aW5kb3cgaG9va3MgaW1wbGVtZW50YXRpb24uCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCVVzZSBuZXcgZnVuY3Rpb24gTVNHX0ludGVybmFsR2V0TWVzc2FnZSgpIGluIERpYWxvZ0JveCgpLgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJQWRkZWQgZnVuY3Rpb24gQ2FsbEhvb2tQcm9jKCkuCgpBcHIgMTEsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglCdWcgZml4IDogV01fQ0hBUnMgYXJlIHNlbnQgdG8gZm9jdXNlZCB3aW5kb3cgbGlrZSBXTV9LRVk/Pz8uCgoJKiBbbWlzYy9leGVjLmNdCglOb3RoaW5nIG11Y2ggbW9yZSB0aGFuIGEgc3R1YiBmb3IgTG9hZE1vZHVsZSgpLCBJIHNhdyB0aGVyZSBhIGxvdAoJCXRvIGJlIGRvbmUgaW4gdGhhdCBjb3JuZXIsIEkgd2lsbCBjb21lIGJhY2sgbGF0ZXIgLi4uCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCU5ldyBmdW5jdGlvbnMgR2V0V2luZG93VGFzaygpLCBHZXROdW1UYXNrKCksIEVudW1UYXNrV2luZG93cygpIAoJCQlhbmQgYXNzb2NpYXRlZCBtb2R1bGVzICYgdGFza3MgbGlua2VkLWxpc3RzLgoJKGl0J3Mgb25seSBhbiAnZW1lcmdpbmcgYnVkJywgbW9yZSB0byBjb21lIG5leHQgd2Vla3MpLgoKCSogW2xvYWRlci93aW5lLmNdCglVc2UgTG9hZExpYnJhcnkoKSBpbnN0ZWFkIG9mIExvYWRJbWFnZSgpIGZvciAnc3lzcmVzLmRsbCcuCgoJKiBbY29udHJvbC9tZW51LmNdCglZb3UgY2FuIG5vdyBjbGljayBvdXRzaWRlIG1lbnUgcmVnaW9uIHdpdGhvdXQgcHJvYmxlbS4KCUtleWJvYXJkIG5hdmlnIG1vcmUgc21vb3RseSwgZXZlbiBpZiBhIGNoaWxkIGhhcyB0aGUgZm9jdXMuCglCdWcgZml4IGluIEluc2VydEl0ZW0oKSwgKGJhZCBsaW5rbGlzdCB3aGVuIGluc2VydCBwb2ludCBub3QgZm91bmQpLgoJY2hhbmdlIFJlYWxsb2MgZm9yIEZyZWUgJiBBbGxvYyBpbiBNb2RpZnlJdGVtKCkuCglNRl9TVFJJTkcgbm93IHNldCBCTEFDS19QRU4gdG8gZml4IGJ1ZyBvZiBiYWQgY29sb3Igb2YgdGhlIHVuZGVyc2NvcmVzIAoJCWRvbmUgYnkgRHJhd1RleHQoKSwgKG1heWJlIGl0IHNob3VsZCBkb25lIGluIERyYXdUZXh0KCkgaXRzZWxmID8pLgoKU3VuIEFwciAxMCAxNDowNjowOCAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW21pc2MvcHJvZmlsZS5jXQoJLklOSSBmaWxlcyB3aWxsIG5vdyBiZSBzdG9yZWQgaW4gLyBsb2FkZWQgZnJvbSB0aGUgd2luZG93cyBkaXIKCWlmIG5vIHBhdGggaXMgc3VwcGxpZWQuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJRml4ZWQgR2V0RHJpdmVUeXBlJ3MgcHJvdG90eXBlLgoKCSogW2lmMTYzMi93aW5zb2NrLnNwZWNdIFtpbmNsdWRlL3dpbnNvY2suaF0gW21pc2Mvd2luc29ja2V0LmNdCglGaXhlZCBwcm90b3R5cGVzOiB3aW5zb2NrIHVzZXMgYSB3b3JkIGFzIHNvY2tldCBoYW5kbGUgbm90IGFuIGludC4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJQWRkZWQgaGVhcCBhbGxvY2F0aW9uIGZvciByZXR1cm5lZCBzdHJ1Y3R1cmVzLgoJQWRkZWQgbm9uLWJsb2NraW5nIFdTQUFzeW5jR2V0WGJ5WSgpIGZ1bmN0aW9ucyBhcyBibG9ja2luZyBvbmVzLgoKCSogW2xvYWRlci93aW5lLmNdCglBZGRlZCBJc0RMTExvYWRlZCgpLCB1c2VkIGluIExvYWRJbWFnZSgpIHRvIHByZXZlbnQgbG9hZGluZwoJYSBkbGwgbXVsdGlwbGUgdGltZXMuCglEaXJlY3RvcnkgaXMgYWRkZWQgdG8gd2luZSdzIHBhdGggd2hlbiBhIGZ1bGxwYXRoIGlzIHN1cHBsaWVkIHdoZW4KCXN0YXJ0aW5nIHdpbmUuCglMb2FkSW1hZ2UoKTogRExMIGZpbGVuYW1lIHVzZWQgaW5zdGVhZCBETEwncyBvd24gaW50ZXJuYWwgbmFtZSwKCWZpeGVzICdCYWQgRExMIG5hbWUnIGVycm9ycy4KClNhdCBBcHIgIDkgMDg6MjY6MDMgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL3dpZGdldHMuY10KCUZpcnN0IHJlbGVhc2Ugb2YgZWRpdCBjb250cm9sLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgQXByICA1IDE0OjM2OjU5IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbaW5jbHVkZS9tZGkuaF0gW3dpbmRvd3MvbWRpLmNdCglVc2UgV01fUEFSRU5UTk9USUZZIG1lc3NhZ2VzIHRvIGFjdGl2YXRlIGNoaWxkcmVuLgoJR2VuZXJhdGUgV01fQ0hJTERBQ1RJVkFURSBtZXNzYWdlcy4KCUJlZ2lubmluZ3MgaGFuZGxlciBmb3IgbWF4bWl6ZWQgY2hpbGQgd2luZG93LgoJQ2xlYW4gdXAgd2hlbiBjaGlsZHJlbiBhcmUgZGVzdHJveWVkLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3Mvd2lucG9zLmNdCglSZW1vdmVkIGNvZGUgYWRkIDk0LzAzLzI2LgoKQXByIDQsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9sL21lbnUuY10KCU1ha2UgbW91c2UgbWVudSBuYXZpZ2F0aW9uIHdvcmtpbmcgYWdhaW4uIDotKSkKCShiZSBjYXJlZnVsbCwgY2xpY2tpbmcgb3V0c2lkZSBtZW51cyAoaWUuOiBjbGllbnRyZWN0KSAKCW5vdCByZXNvbHZlZCB5ZXQpCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10gIFtjb250cm9scy9zY3JvbGwuY10KCUJ1Z3MgZml4IGluIE5DVHJhY2tTY3JvbGxCYXJzKCkuCgoJKiBbbWlzYy9kb3NfZnMuY10KCUJ1ZyBmaXggaW4gJ1RvRG9zKCknIGluIGNvbnZlcnNpb24gZm9yICcvJywKCQkoZXhhbXBsZTogJy93aW5kb3cvJyB3YXMgdHJhbnNsYXRlZCB0byAnV0lORE9XcycpLgoKCSogW21pc2NlbXUvaW50MjEuY10KCUZ1bmN0aW9uIENoYW5nZURpcigpIGV4dHJhY3QgcG9zc2libGUgZHJpdmUgYmVmb3JlIERPU19DaGFuZ2VEaXIoKS4KCgkqIFtsb2FkZXIvbGlicmFyeS5jXSAgW2xvYWRlci93aW5lLmNdCglQbGF5aW5nIGFyb3VuZCBtb3ZpbmcgZnVuY3Rpb24gR2V0UHJvY0FkZHJlc3MoKSBhbmQgcHV0IHNvbWUgY29kZSBpbi4KCk1vbiBBcHIgIDQgMjE6Mzk6MDcgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbbWlzYy9tYWluLmNdCglCZXR0ZXIgZXhwbGFuYXRpb24gb2YgY29tbWFuZC1saW5lIG9wdGlvbnMuCgoJKiBbb2JqZWN0cy9kaWIuY10KCUltcGxlbWVudGVkIFNldERJQml0c1RvRGV2aWNlKCkuCgoJKiBbd2luZG93cy9kYy5jXQoJQnVnIGZpeCBpbiBTZXREQ1N0YXRlKCkuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJUmVtb3ZlZCBXU19ESVNBQkxFRCBoYW5kbGluZyAobm93IGRvbmUgaW4gbWVzc2FnZS5jKS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUFkZGVkIHNlbmRpbmcgYSBXTV9QQVJFTlROT1RJRlkgbWVzc2FnZSBpbiBNU0dfVHJhbnNsYXRlTW91c2VNc2coKS4KCVVzZSBXaW5kb3dGcm9tUG9pbnQoKSB0byBmaW5kIHRoZSB3aW5kb3cgZm9yIG1vdXNlIGV2ZW50cywgdGFraW5nCglpbnRvIGFjY291bnQgZGlzYWJsZWQgd2luZG93cy4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglCdWcgZml4IGluIEJlZ2luUGFpbnQoKSB0byBhbGxvdyBjYWxsaW5nIGl0IGF0IG90aGVyIHRpbWVzIHRoYW4KCW9uIFdNX1BBSU5UIChTb2xpdGFpcmUgbmVlZHMgaXQuLi4pCgoJKiBbd2luZG93cy93aW4uY10KCUltcGxlbWVudGVkIEZpbmRXaW5kb3coKS4KCVJld3JpdHRlbiBFbmFibGVXaW5kb3coKSB0byBiZWhhdmUgbW9yZSBsaWtlIFdpbmRvd3MuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCVJld3JpdHRlbiBXaW5kb3dGcm9tUG9pbnQoKSB0byBhbHNvIHNlYXJjaCBjaGlsZCB3aW5kb3dzLgoKTW9uIEFwciAgNCAxNzozNjozMiAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW2luY2x1ZGUvaW50MjEuaF0gLT4gW21zZG9zLmhdCglyZW5hbWVkLgoKCSogW21pc2NlbXUvaW50MTAuaF0gW21pc2NlbXUvaW50MjUuaF0gW21pc2NlbXUvaW50MjYuaF0gCgluZXcsIGFkZGVkIGZvciBpbnQgMTAsIDI1IGFuZCAyNi4KCgkqIFttaXNjZW11L2lvcG9ydHMuY10KCW5ldywgYWRkZWQgdG8gYWxsb3cgd2luIGFwcHMgdG8gdXNlIGlvcG9ydHMuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgaW4sIGluYiwgb3V0LCBvdXRiIGluc3RydWN0aW9ucy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE1hciAyNyAxMzo0MDoyNSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogY29udHJvbHMvbWVudS5jIChJbnNlcnRNZW51KTogQ2hhbmdlZCB0byB1c2UgRmluZE1lbnVJdGVtKCkuCgpTYXQgTWFyIDI2IDIxOjIzOjU1IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbd2luZG93cy9tZGkuY10KCVdpbmRvdyBsaXN0IHByb3Blcmx5IHVwZGF0ZWQuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglDYWxsIFdJTlBPU19DaGlsZEFjdGl2YXRlKCkgd2hlbiBtb3VzZSBwcmVzc2VkLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglVc2UgV0lOUE9TX0lzQW5BY3RpdmVXaW5kb3coKSBpbnN0ZWFkIG9mIEdldEFjdGl2ZVdpbmRvdygpIGluCglOQ19IYW5kbGVOQ1BhaW50KCkuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUNyZWF0ZWQgZnVuY3Rpb25zIFdJTlBPU19Jc0FuQWN0aXZlV2luZG93KCkgYW5kIFdJTlBPU19BY3RpdmF0ZUNoaWxkKCkKClRodSBNYXIgMjQgMTQ6NDk6MTcgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIGNvbnRyb2xzL21lbnUuYyAoRGVsZXRlTWVudSk6IENoYW5nZWQgdG8gdXNlIEZpbmRNZW51SXRlbQoJKERlbGV0ZU1lbnUpOiBNYW55IGJ1ZyBmaXhlcy4KCgkqIFtjb250cm9scy9tZW51LmNdCglDcmVhdGVkIGZ1bmN0aW9uIEZpbmRNZW51SXRlbSgpLgoKVGh1IE1hciAyNCAxNDoxNzoyNCAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW3dpbmRvd3Mvd2luLmNdCglSZW1vdmVkIGluY29ycmVjdCBNREkgaGFuZGxpbmcgY29kZSBmcm9tIENyZWF0ZVdpbmRvd0V4KCkuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTUZfU1RSSU5HIGl0ZW1zIG5lZWRlZCB0byBhbGxvY2F0ZSBhIHByaXZhdGUgY29weSBvZiBzdHJpbmcuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJRml4ZWQgYnVnZ3kgY2FsbHMgdG8gR2xvYmFsRnJlZSgpLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUVsaW1pbmF0ZWQgc29tZSByZWR1bmRhbnQgY29kZSB3aXRoIGZ1bmN0aW9uIGNhbGwuCgpXZWQgTWFyIDIzIDE5OTQgUGVudHRpIE1vaWxhbmVuIChwZW50dGkubW9pbGFuZW5AbnRjLm5va2lhLmNvbSkKCgkqIFt3aW5kb3dzL3RpbWVyLmNdCgl0aW1lciBsaXN0IHBvaW50ZXJzIGxvb3BlZCBpbiBJbnNlcnRUaW1lcgoKVHVlIE1hciAyOSAxMzozMjowOCBNRVQgRFNUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFttaXNjL2N1cnNvci5jXQoJQSBmZXcgY2hhbmdlcyBmb3IgZGVza3RvcCB3aW5kb3cgc3VwcG9ydC4KCgkqIFttaXNjL21haW4uY10KCUFkZGVkIC1kZXB0aCBvcHRpb24uCgoJKiBbbWlzYy9yZWN0LmNdCglZZXQgYW5vdGhlciBidWcgZml4IGluIFN1YnRyYWN0UmVjdCgpLgoKCSogW29iamVjdHMvYml0bWFwLmNdCglDaGFuZ2VzIHRvIHVzZSBvbmx5IG9uZSBkZXB0aCAoc3BlY2lmaWVkIHdpdGggLWRlcHRoKQoJZm9yIGNvbG9yIGJpdG1hcHMuCgoJKiBbb2JqZWN0cy9icnVzaC5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgZGl0aGVyZWQgc29saWQgYnJ1c2hlcy4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglVc2UgdGhlIHNhbWUgMjAgc3lzdGVtIGNvbG9ycyBhcyBpbiBXaW5kb3dzLgoJU3lzdGVtIHBhbGV0dGUgaW5pdGlhbGlzYXRpb24gbm93IGRvbmUgaW4gQ09MT1JfSW5pdFBhbGV0dGUoKS4KCUFkZGVkIHN1cHBvcnQgZm9yIGEgY29sb3IgbWFwcGluZyB0YWJsZSB0byBtYXAgbG9naWNhbCBjb2xvcgoJaW5kZXhlcyB0byBYIGNvbG9ybWFwIGVudHJpZXMuCglJbXBsZW1lbnRlZCBHZXROZWFyZXN0Q29sb3IoKSBhbmQgUmVhbGl6ZURlZmF1bHRQYWxldHRlKCkuCgoJKiBbb2JqZWN0cy9kaWIuY10KCUFkZGVkIHN1cHBvcnQgZm9yIGNvbG9yIG1hcHBpbmcgdGFibGUuCgoJKiBbb2JqZWN0cy9kaXRoZXIuY10gIChOZXcgZmlsZSkKCUltcGxlbWVudGVkIHNvbGlkIGNvbG9yIGRpdGhlcmluZy4KCgkqIFtvYmplY3RzL3BhbGV0dGUuY10KCUltcGxlbWVudGVkIEdldFN5c3RlbVBhbGV0dGVFbnRyaWVzKCkgYW5kIFNlbGVjdFBhbGV0dGUoKS4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglNYWtlIGEgY29weSBvZiB0aGUgbWVudSBuYW1lIGluIFJlZ2lzdGVyQ2xhc3MoKS4KCgkqIFt3aW5kb3dzL2RjLmNdCglGaXhlZCBkZXZpY2UgY2FwcyB3aGVuIHVzaW5nIGEgZGVza3RvcCB3aW5kb3cuCglBZGRlZCBzdXBwb3J0IGZvciB0aGUgY29sb3IgbWFwcGluZyB0YWJsZSBpbiBEQ3MuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQWRkZWQgQ29uZmlndXJlTm90aWZ5IGhhbmRsZXIgb24gZGVza3RvcCB3aW5kb3cuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglSZW1vdmVkIGNhbGwgdG8gWFRyYW5zbGF0ZUNvb3JkaW5hdGVzKCkgb24gZXZlcnkgbW91c2UgbW90aW9uCglOZXcgZnVuY3Rpb24gTVNHX1N5bmNocm9uaXplKCkgdG8gc3luY2hyb25pemUgd2l0aCB0aGUgWCBzZXJ2ZXIuCgoJKiBbd2luZG93cy9zeXNjb2xvci5jXQoJUmV3cml0dGVuIFNZU0NPTE9SX0luaXQoKSB0byByZWFkIHRoZSBzeXN0ZW0gY29sb3JzIGZyb20gV0lOLklOSS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQWRkZWQgc3luY2hyb25pemF0aW9uIG9uIHdpbmRvdyBtYXBwaW5nLiBTb2x2ZXMgdGhlIGRvdWJsZSByZWRyYXcKCXByb2JsZW0gd2hlbiBzdGFydGluZyBTb2xpdGFpcmUuCgpNYXIgMjcsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9sL21lbnUuY10JKiBbd2luZG93cy9kZWZ3bmQuY10KCU1ha2Uga2V5Ym9hcmQgbmF2aWdhdGlvbiB3b3JraW5nIHdpdGggbWVudWJhciwKCWJ1dCB0ZW1wb3JhcmVseSBpbnNlcnRlZCBhIGJ1ZyBpbiBtZW51YmFyIG1vdXNlIGhhbmRsaW5nIC4uLiA6LSgoCgkoaXQgd2lsbCBiZSBmaXggbmV4dCB3ZWVrICEpCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUNvbm5lY3QgVktfTUVOVSB0byBtZW51YmFyIG5hdmlnYXRpb24uCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCUdldE1vZHVsZUhhbmRsZSgpIHJldHVybiAnZmljdGl2ZSAweEYwMDArIGhhbmRsZXMnIGZvciBidWlsdC1pbiBETExzLgoKU3VuIE1hciAyMCAyMjozMjoxMyAxOTk0IEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbWlzYy9tYWluLmNdCglBZGRlZCBDb3B5KCkuIEFkZGVkIGEgY2hlY2sgZm9yIGAtaCcgdG8gc2hvdyB1c2FnZS4KCgkqIFttaXNjL2Rvc19mcy5jXQoJRml4ZWQgYnVnIGluIEZpbmRGaWxlKCksIHRvIGxvYWQgZGlyZWN0b3JpZXMgYXMgZGxscy4KCgkqIFttaXNjL2Rvc19mcy5jXQoJRml4ZWQgVG9Vbml4KCkgYW5kIFRvRG9zKCkgYWdhaW4sIGFzIG15IHByZXZpb3VzIHBhdGNoCglkaWRuJ3QgbWFrZSBpdC4KCgkqIFttaXNjL2Rvc19mcy5jXSBbbWlzY2VtdS9pbnQyMS5jXQoJQnVnIGZpeGVzLCBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgYWxsIHdpbmZpbGUgYW5kIHByb2dtYW4gaW50MjEKCXJlcXVlc3RzIG5vdyBleGNlcHQgZm9yIGEgZmV3IHNtYWxsIHRoaW5ncy4KClR1ZSBNYXIgMjkgMDY6MjU6NTQgMTk5NCAgY3J3QGhhcnJpcy5tbGIuc2VtaS5oYXJyaXMuY29tIChDYXJsIFdpbGxpYW1zKQoKCSogW21lbW9yeS9oZWFwLmNdCglJbXBsZW1lbnRlZCBHZXRGcmVlU3lzdGVtUmVzb3VyY2VzKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBNYXIgMjEgMTc6MzI6MjUgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIGNvbnRyb2xzL21lbnUuYyAoR2V0U3ViTWVudSk6IEZ1bmN0aW9uIGRpZCBub3QgcmV0dXJuIGNvcnJlY3QgdmFsdWUKCgkqIFt3aW5kb3dzL21kaS5jXQoJQmVnaW5uaW5ncyBvZiBtZW51IGhhbmRsaW5nLgoKVGh1IE1hciAxMCAxMTozMjowNiAxOTk0ICBTdGVmYW4gKFNBTSkgTXVlbnplbCAgKG11ZW56ZWxAdGF0LnBoeXNpay51bmktdHVlYmluZ2VuLmRlKQoKCSogW29iamVjdHMvZm9udC5jXQoJaWYgZm9udC53aWR0aCBlcXVhbHMgemVybyB1c2UgYXN0ZXJpeCBpbnN0ZWFkLgoKTW9uIE1hciAyMSAxNzoyMzozNyBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW29iamVjdHMvYml0bWFwLmNdCglSZXdyaXR0ZW4gYml0bWFwIGNvZGUgdG8gdXNlIGV4Y2x1c2l2ZWx5IFggcGl4bWFwczsgKm11Y2gqIGZhc3Rlci4KCgkqIFtvYmplY3RzL2JydXNoLmNdCglTb21lIGNoYW5nZXMgd2l0aCBwYXR0ZXJuIGJydXNoZXMgYmVjYXVzZSBvZiB0aGUgbmV3IGJpdG1hcCBjb2RlLgoKCSogW29iamVjdHMvY29sb3IuY10KCUFkZGVkIGZ1bmN0aW9uIENPTE9SX1RvUGh5c2ljYWwgZm9yIGJldHRlciBjb2xvciBtYXBwaW5nLgoKCSogW29iamVjdHMvZGliLmNdCglIZWF2aWx5IG9wdGltaXplZCBTZXRESUJpdHMoKS4KCgkqIFt3aW5kb3dzL2RjLmNdCglPcGltaXplZCBTZXREQ1N0YXRlKCkgYW5kIERDX1NldHVwR0MqKCkgZnVuY3Rpb25zLgoJQWRkZWQgc3R1YiBmb3IgQ3JlYXRlSUMoKS4KCk1hciAyMCwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW21pc2MvbWVzc2FnZS5jXQoJQ2FsbCBTZXRGb2N1cygpIGFmdGVyIGNsb3NpbmcgYm94IHRvIGdpdmUgYmFjayBmb2N1cyB0byBwcmV2aW91cyBvd25lci4KCgkqIFttaXNjL2ZpbGVzLmNdCglTbWFsbCBidWcgZml4IGluIEdldFRlbXBGaWxlbmFtZSgpIDogcmVwbGFjZSBhICdcJyB0byAnXFwnLgoKCSogW2NvbnRyb2wvc2Nyb2xsLmNdCglDYWxscyB0byBCaXRCbHQoKSByZXBsYWNlIGJ5IFN0cmV0Y2hCbHQoKS4KCgkqIFtjb250cm9sL21lbnUuY10KCUNhbGwgU2V0Rm9jdXMoKSB0byBwcmV2aW91cyBvd25lciBhZnRlciBjbG9zaW5nIFBvcHVwcy4JCglGaWxsIHN0dWIgRGVsZXRlTWVudSgpLgoKCSogW2NvbnRyb2wvbGlzdGJveC5jXQoJKiBbY29udHJvbC9jb21iby5jXQoJVXNlIFNldEZvY3VzKCkgaW4gV01fTEJVVFRPTkRPV04uCglDbG9zZSBDb21ib0JveCBMaXN0IHVwb24gV01fS0lMTEZPQ1VTLgoJRWFybHkgZGV2ZWxvcG1lbnQgb2YgV01fTUVBU1VSRUlURU0gbWVjYW5pc20uCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUVhcmx5IGRldmVsb3BtZW50IG9mIFdNX01FQVNVUkVJVEVNIG1lY2FuaXNtLgoKVHVlIE1hciAyMiAxMDo0NDo1NyAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAeG9jaGl0bCkKCgkqIFttaXNjL2F0b20uY10KCUZpeGVkIHNpbnRheGlzIHByb2JsZW0gd2hlbiBidWlsZGluZyB0aGUgbGlicmFyeS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIE1hciAxNSAxMzoxMTo1NiAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgbWVzc2FnZSB0eXBlcyBhbmQgc3RydWN0dXJlcyBmb3IgTURJCgoJKiBbaW5jbHVkZS9tZGkuaF0KCUNyZWF0ZWQgaW50ZXJuYWwgc3RydWN0dXJlcyBmb3IgaGFuZGxpbmcgTURJCgoJKiBbd2luZG93cy9tZGkuY10KCUJlZ2FuIGNyZWF0aW5nIE1ESSBzdXBwb3J0CgpUaHUgTWFyIDEwIDE2OjUxOjQ2IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbbG9hZGVyL3dpbmUuY10gW2luY2x1ZGUvd2luZS5oXQoJQWRkZWQgbmV3IGZpZWxkIHRvICJzdHJ1Y3Qgd19maWxlcyIgdG8gaG9sZCB0aGUgIm5hbWUgdGFibGUiCglyZXNvdXJjZSBmb3IgV2luZG93cyAzLjAgcHJvZ3JhbXMKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUFkZGVkIGNvZGUgdG8gaGFuZGxlIHByb2dyYW1zIHdpdGggYSAibmFtZSB0YWJsZSIgcmVzb3VyY2UuCglMb2FkUmVzb3VyY2VCeU5hbWUoKSBtb2RpZmllZCB0byBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZgoJdGhpcyByZXNvdXJjZS4KCk1vbiBNYXIgMTQgMjI6MzE6NDIgTUVUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtvYmplY3RzL2NvbG9yLmNdCglBZGRlZCBpbnN0YWxsaW5nIHRoZSBwcml2YXRlIGNvbG9ybWFwIG9uIHRoZSBkZXNrdG9wIHdpbmRvdy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglDbGVhbmVkIHVwIGZvY3VzIGV2ZW50IGhhbmRsaW5nIChzZWUgZm9jdXMuYykuCglVc2UgR2V0Rm9jdXMoKSB0byBkaXJlY3Qga2V5IGV2ZW50cyB0byB0aGUgY29ycmVjdCB3aW5kb3cuCgoJKiBbd2luZG93cy9mb2N1cy5jXQoJUmV3cml0dGVuIFNldEZvY3VzKCkgdG86CgktIG9ubHkgc2V0IFggZm9jdXMgb24gdG9wLWxldmVsIHdpbmRvd3MKCS0gc2VuZCBXTV9TRVRGT0NVUyBhbmQgV01fS0lMTEZPQ1VTIG1lc3NhZ2VzICh3YXMgZG9uZSBpbiBldmVudC5jKQoJLSBwcmV2ZW50IHNldHRpbmcgZm9jdXMgdG8gZGlzYWJsZWQgd2luZG93cwoJLSBpbnN0YWxsIHByaXZhdGUgY29sb3JtYXAgc28gLXByaXZhdGVtYXAgb3B0aW9uIHdvcmtzIGFnYWluCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL3RpbWVyLmNdCglDaGFuZ2VkIHRpbWVyIG1hbmFnZW1lbnQgdG8gbm8gbG9uZ2VyIHVzZSBQb3N0TWVzc2FnZSgpLCBidXQKCXRvIGdlbmVyYXRlIHRpbWVyIG1lc3NhZ2VzIG9uIHRoZSBmbHkuIEFsc28gZml4ZWQgYSByZWxhdGVkIGJ1ZwoJaW4gR2V0TWVzc2FnZSgpIHdoaWNoIGNvdWxkIGNhdXNlIGJ1c3ktd2FpdGluZy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJT25seSBzZWxlY3QgZm9jdXMgZXZlbnRzIG9uIHRvcC1sZXZlbCB3aW5kb3dzLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglBZGRlZCBzb21lIHNhbml0eSBjaGVja3MgZm9yIGRlc2t0b3Agd2luZG93LgoKRnJpIE1hciAgNCAyMDo0MjowMSAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW21pc2MvZG9zX2ZzLmNdCglidWcgZml4ZXMgaW4gVG9Vbml4KCksIFdpbkluaUZpbGVOYW1lKCksIEdldFVuaXhGaWxlTmFtZSgpLiAKCVN1cHBvcnQgZm9yIHRpbGRlIHN5bWJvbCBhZGRlZCBmb3Igcm9vdGRpcmVjdG9yaWVzIGluIFtkcml2ZXNdCglzZWN0aW9uIG9mIHdpbmUncyBjb25maWdmaWxlLgoKCSogW21pc2MvZmlsZS5jXQoJaHJlYWQoKSwgaHdyaXRlKCkgYWRkZWQuCgoJKiBbbWlzYy9tYWluLmNdCglobWVtY3B5KCkgYWRkZWQuCgoJKiBbaWYxNjMyL3N0cmVzcy5zcGVjXSBbaW5jbHVkZS9zdHJlc3MuaF0gW21pc2Mvc3RyZXNzLmNdCglBZGRlZCBTVFJFU1MuRExMLCBhbiB1c2VsZXNzIGRsbCB1c2VkIHRvIHN0cmVzcyBhIHdpbmRvd3Mgc3lzdGVtLgoKCSogWyovKl0KCUFkZGVkIG1pc3NpbmcgI2luY2x1ZGVzLCBmaXhlZCBwcm90b3R5cGVzIGZvciBwcm90b3R5cGUgY2hlY2tpbmcuCgoJKiBbaW5jbHVkZS9wcm90b3R5cGVzLmhdCgoJQWRkZWQgcHJvdG90eXBlcyBmb3IgbG9hZGVyLypjLCBpZjE2MzIvKmMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBNYXIgIDggMDk6NTQ6MzQgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtDb25maWd1cmVdCglBZGRlZCByZW1pbmRlciB0byBzZXQgV0lORVBBVEgsIGlmIGl0IGlzIG5vdCBzZXQuCgoJKiBbSW1ha2VmaWxlXQoJUmVtb3ZlZCAjZWxpZidzCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglBZGRlZCBCTl9DTElDS0VEIG5vdGlmaWNhdGlvbiBmb3Igb3duZXItZHJhdyBidXR0b25zLgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW21lbW9yeS9oZWFwLmNdCglDaGFuZ2VkIExvY2FsKiBmdW5jdGlvbnMgdG8gV0lOMTZfTG9jYWwqIHRvIHByZXZlbnQgdW5jb25jaW91cyB1c2UKCW9mIHRoZXNlIGZ1bmN0aW9ucy4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCVB1c2ggb2xkIFN0YWNrMTZGcmFtZSBvbiBzdGFjayBiZWZvcmUgc2V0dGluZy4KCgkqIFtpbmNsdWRlL2F0b20uaF0gW21pc2MvYXRvbS5jXSBbaW5jbHVkZS9oZWFwLmhdIFttZW1vcnkvbG9jYWwuY10KCUFkZGVkIG11bHRpcGxlIGxvY2FsIGhlYXAgaGFuZGxpbmcgaW4gQXRvbSogZnVuY3Rpb25zLgoKCSogW2luY2x1ZGUvcmVnZnVuYy5oXSBbbWlzY2VtdS9pbnQyMS5jXQoJUmV3cm90ZSBET1MzQ2FsbCgpIHVzZSBjb250ZXh0IGZyYW1lIHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgc3RhY2suCgoJKiBbbWlzYy9wcm9maWxlLmNdCglGaXhlZCB0byBhbGxvdyBsZWFkaW5nICI7IiB0byBtYXJrIGNvbW1lbnRzLgoKCSogW21pc2Mvc3B5LmNdCglGaXhlZCBidWdzIGFuZCBhZGRlZCBzdXBwb3J0IGZvciAiaW5jbHVkZSIgYW5kICJleGNsdWRlIiBmaWx0ZXJzLgoKCSogW21pc2MvdXNlci5jXQoJUmVhcnJhbmdlZCBjYWxscyBpbiBJbml0QXBwKCkuCgoJKiBbbWlzYy9mb250LmNdCglGaXhlZCBmb250IGhhbmRsaW5nIHRvIGNyZWF0ZSBzeXN0ZW0gZm9udHMsIGlmIHRoZXkgYXJlIHVzZWQuCgoJKiBbd2luZG93cy9kYy5jXQoJSWYgdGV4dCBkcmF3biBvbiB3aW5kb3cgd2l0aCBubyBmb250IHNwZWNpZmllZCwgdGhlbiBkZWZhdWx0IHRoZQoJZm9udCB0byB0aGUgc3lzdGVtIGZvbnQuCgpNb24gTWFyICA3IDIwOjMyOjA5IE1FVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbY29udHJvbHMvZGVza3RvcC5jXQoJQWRkZWQgaGFuZGxpbmcgb2YgV01fTkNDUkVBVEUgYW5kIFdNX0VSQVNFQktHTkQgZnVuY3Rpb25zLgoJSW1wbGVtZW50ZWQgU2V0RGVza1BhdHRlcm4oKS4KCgkqIFttaXNjL21haW4uY10KCUFkZGVkIC1kZXNrdG9wIG9wdGlvbiB0byBnZXQgYSBsYXJnZSBkZXNrdG9wIHdpbmRvdyB3aXRoCglldmVyeXRoaW5nIGluc2lkZSBpdC4KCUFkZGVkIC1uYW1lIG9wdGlvbi4KCgkqIFttaXNjL3JlY3QuY10KCUJ1ZyBmaXggaW4gU3VidHJhY3RSZWN0KCkuCgoJKiBbb2JqZWN0cy8qLmNdCglSZXBsYWNlZCB0aGUgRGVmYXVsdFJvb3RXaW5kb3coKSBtYWNybyBieSB0aGUgcm9vdFdpbmRvdyB2YXJpYWJsZS4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCSAgW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3dpbi5jXQoJQSBmZXcgY2hhbmdlcyB0byBhY2NvbW9kYXRlIHRoZSBuZXcgZGVza3RvcCB3aW5kb3cuCgogVHVlIE1hciAgOCAxMToxMzowMyAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAeG9jaGl0bC5udWNsZWN1LnVuYW0ubXgpCiAKIAkqIFt0b29sa2l0L2FyY2guY10gLS1OZXcgZmlsZS0tIAogCVJvdXRpbmVzIGZvciBjb252ZXJ0aW5nIGxpdHRsZSBlbmRpYW4gZGF0YSBzdHJ1Y3R1cmVzIHRvCiAJYmlnLWVuZGlhbiBkYXRhIHN0cnVjdHVyZXMsIGN1cnJlbnRseSBvbmx5IEJJVE1BUCBzdHJ1Y3R1cmVzIGFyZSAKIAljb252ZXJ0ZWQuCiAKIAkqIFttaXNjL2F0b20uY10KIAlXaGVuIHVzZWQgYXMgcGFydCBvZiB0aGUgV2luZUxpYiwgdGhlIGNvZGUgaXMgbXVjaCBzaW1wbGVyLgogCURvZXNuJ3QgZGVwZW5kIG9uIGFsaWduZW1lbnQuCiAKIAkqIFtsb2FkZXIvd2luZS5jXQogCUlmZGVmZWQgRW11bGF0b3IgZGVwZW5kZW50IGNvZGUgaWYgY29tcGlsaW5nIFdpbmVMaWIuCiAKIAkqIFtsb2FkZXIvcmVzb3VyY2UuY10KIAlNb3ZlZCBtaXNjL3Jlc291cmNlLmMgdG8gbG9hZGVyL3Jlc291cmNlLmMuCiAKIAkqIFtsb2FkZXIvZHVtcC5jLGxkdC5jLGxkdGxpYi5jLGxpYnJhcnksYyxzZWxlY3Rvci5jLHNpZ25hbC5jXQogCUlmZGVmZWQgd2hvbGUgY29kZSBpZiBjb21waWxpbmcgV0lORUxJQi4KIAogCSogW2luY2x1ZGUvd2luc29jay5oXQogCUFkZGVkIGNvbXBpbGF0aW9uIGRlZmluZSB0byBhbGxvdyBjb21waWxhdGlvbiBvbiBTdW5PUy4KIAogCSogW2luY2x1ZGUvd2luZS5oXQogCVJlbW92ZWQgbG9hZF90eXBlaW5mbyBhbmQgbG9hZF9uYW1laW5mbyBwcm90b3R5cGVzLCB0aGV5IGJlbG9uZwogCXRvIG5lZXhlLmgKIAogCSogW2luY2x1ZGUvbmVleGUuaF0KIAlBZGRlZCBsb2FkX3R5cGVpbmZvIGFuZCBsb2FkX25hbWVpbmZvIHByb3RvdHlwZXMuCiAKIAkqIFtpbmNsdWRlL2FyY2guaF0KIAlGaXhlZCBzb21lIGJ1Z3MgaW4gdGhlIGNvbnZlcnNpb24gcm91dGluZXMuCiAJQWRkZWQgbWFjcm9zIGZvciBCaXRtYXAgbG9hZGluZy4KClR1ZSBNYXIgIDggMTI6NTI6MDUgMTk5NCAgY3J3QG1hbmlhYy5tbGIuc2VtaS5oYXJyaXMuY29tIChDYXJsIFdpbGxpYW1zKQogCQoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbbWVtb3J5L2dsb2JhbC5jXQoJSW1wbGVtZW50ZWQgR2V0RnJlZVNwYWNlKCkKCgkqIFtpZjE2MzIvdXNlci5zcGVjXSBbbG9hZGVyL3Jlc291cmNlLmNdCglJbXBsZW1lbnRlZCBDcmVhdGVJY29uKCkKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIE1hciAgMSAxMTozMDoyMSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW0NvbmZpZ3VyZV0gWyovSW1ha2VmaWxlXQoJQ3JlYXRlZCBjb25maWd1cmUgc2NyaXB0IHRvIGhhbmRsZSBkaWZmZXJlbnQgdHlwZXMgb2YgV2luZSBidWlsZHMuCgoJKiBbQ29uZmlndXJlXSBbdG9vbHMvYnVpbGQuY10gW2lmMTYzMi9JbWFrZWZpbGVdIFtXaW5lLnRtcGxdCglBZGRlZCBhYmlsaXR5IHRvIGNvbXBpbGUgV2luZSBvbiBzeXN0ZW1zIHdpdGggMTQtY2hhciBmaWxlbmFtZSBsaW1pdC4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWlzYy9tYWluLmNdCglBZGRlZCAtcmVsYXlkYmcgb3B0aW9uIHRvIGNvbW1hbmQgbGluZSBpZiBERUJVR19SRUxBWSBpcyBkZWZpbmVkLgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJRml4ZWQgYnVnIGluIEdldEVudHJ5RExMTmFtZSgpIHRoYXQgY2F1c2VkIFdpbmUgdG8gc2VnIGZhdWx0LgoKCSogW21lbW9yeS9oZWFwLmNdCglGaXhlZCBMb2NhbEluaXQoKSB0byB3b3JrIGNvcnJlY3RseS4KCgkqIFttaXNjL3VzZXIuY10KCUFkZGVkIGNvZGUgdG8gY2FsbCBsb2FkZWQgRExMcycgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuCgpUdWUgTWFyICAxIDAxOjAxOjE3IE1FVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbd2luZG93cy9kY2UuY10KCUFkZGVkIGNsaXBwaW5nIG9mIGNoaWxkIHdpbmRvd3MgYnkgdGhlaXIgcGFyZW50J3MgY2xpZW50IGFyZWEuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUJ1ZyBmaXggaW4gTkNfRG9OQ1BhaW50KCkuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJQnVnIGZpeCBpbiBSZWRyYXdXaW5kb3coKS4KCkZlYiAyNywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW21lbS9hdG9tLmNdCglCdWcgZml4IGFnYWluIGluIEFUT01fRGVsZXRlQXRvbSgpIDogCgkJY2hhbmdlIExvY2FsRnJlZSgpIGJ5IFVTRVJfSEVBUF9GUkVFKCkuCgkoUHJldmlvdXMgcGF0Y2ggZG9uZSBGZWIgMTN0aCBoYWQgYmVlbiBsb3N0KQoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJTW92ZSBiaXRtYXBzIGxvYWRpbmcgaW4gQWxsb2NTY3JvbGxCYXIoKSBpbnN0ZWFkIG9mIGluIFdNX0NSRUFURS4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdIChzb3JyeSBBbGV4IC4uLikKCVRoZXJlIHdhcyBubyBidWcgdGhlcmUgImluIFJlZ2lzdGVyQ2xhc3MoKSA6IAogICAgICAgICAgICAgICAgV05EQ0xBU1MtPmxwc3pDbGFzc05hbWUgd2FzIHJlc2V0IHRvIE5VTEwuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXgoKCSogW21pc2MvY2xpcGJvYXJkLmNdCS0tLSBOZXcgRmlsZSAtLS0KCU5ldyBmdW5jdGlvbiBFbnVtQ2xpcGJvYXJkRm9ybWF0cygpLgoJTmV3IGZ1bmN0aW9uIE9wZW5DbGlwYm9hcmQoKS4KCU5ldyBmdW5jdGlvbiBDbG9zZUNsaXBib2FyZCgpLgoJTmV3IGZ1bmN0aW9uIEVtcHR5Q2xpcGJvYXJkKCkuCglOZXcgZnVuY3Rpb24gR2V0Q2xpcGJvYXJkT3duZXIoKS4KCU5ldyBmdW5jdGlvbiBHZXRDbGlwYm9hcmRWaWV3ZXIoKS4KCU5ldyBmdW5jdGlvbiBDb3VudENsaXBib2FyZEZvcm1hdHMoKS4KCU5ldyBmdW5jdGlvbiBJc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZSgpLgoJTmV3IGZ1bmN0aW9uIE9wZW5DbGlwYm9hcmQoKS4KCU5ldyBmdW5jdGlvbiBHZXRDbGlwYm9hcmREYXRhKCkuCglOZXcgZnVuY3Rpb24gU2V0Q2xpcGJvYXJkVmlld2VyKCkuCglOZXcgZnVuY3Rpb24gRW51bUNsaXBib2FyZEZvcm1hdHMoKS4KCU5ldyBmdW5jdGlvbiBSZWdpc3RlckNsaXBib2FyZEZvcm1hdCgpLgoJTmV3IGZ1bmN0aW9uIENoYW5nZUNsaXBib2FyZENoYWluKCkuCglOZXcgZnVuY3Rpb24gU2V0Q2xpcGJvYXJkRGF0YSgpLgoJTmV3IGZ1bmN0aW9uIEdldE9wZW5DbGlwYm9hcmRXaW5kb3coKS4KCU5ldyBmdW5jdGlvbiBHZXRQcmlvcml0eUNsaXBib2FyZEZvcm1hdCgpLgoJTmV3IGZ1bmN0aW9uIEdldENsaXBib2FyZEZvcm1hdE5hbWUoKS4KClR1ZSBNYXIgIDEgMjA6MTU6NDUgMTk5NCAgRXJpayBCb3MgPGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubD4KCgkqIFttaXNjL2NvbW0uY10KCWJ1Z2ZpeCBpbiBPcGVuQ29tbSgpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgRmViIDIyIDE4OjA0OjAyIDE5OTQgIEplZmZyZXkgSHN1IDxoc3VAZnJlZWZhbGwuY2Ryb20uY29tPgoKCSogW2luY2x1ZGUvd2luc29jay5oXQoJVGhlIHNvY2twcm90byBzdHJ1Y3QgaXMgYWxyZWFkeSBkZWZpbmVkIGluIDxzeXMvc29ja2V0Lmg+CgoJKiBbbWlzYy93aW5zb2NrLmNdCglOZWVkIHRvIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4gZm9yIHN0cnVjdCBpbi1hZGRyLgoJVXNlIHN5c19lcnJsaXN0W10gaW5zdGVhZCBvZiBzdHJlcnJvcltdLgoKCSpbdG9vbGtpdC9oZWFwLmNdCglBTlNJIEMgc3BlY2lmaWVzIHRoYXQgdGhlIG1hbGxvYyBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gc3RkbGliLmgsCgkgIHNvIHdlIGRvbid0IG5lZWQgdG8gaW5jbHVkZSBtYWxsb2MuaC4KCgkqW2xvYWRlci9sZHRsaWIuY10KCVByaW50IGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2UgYWJvdXQgcHJvYmFibGUgY2F1c2Ugb2YgaTM4Nl9zZXRfbGR0KCkKCSAgZmFpbHVyZSBhbmQgdGhlbiBleGl0LgoKCSpbSW1ha2VmaWxlXQoJRm9yIHN5c3RlbXMgdGhhdCBkb24ndCB1c2UgZ21ha2UgYnkgZGVmYXVsdCwgc2V0IHRoZSBNQUtFIHZhcmlhYmxlCgkgIHRvIGdtYWtlIGFuZCBwcm9wYWdhdGUgaXQgb24gcmVjdXJzaXZlIG1ha2VzLgoJVGFrZSBvdXQgLWxpMzg2IGZvciBGcmVlQlNEIHN5c3RlbXMgYW5kIGRlZmluZSBfX0ZyZWVCU0RfXyBzbyBXaW5lCgkgIGNhbiBiZSBidWlsdCB3aXRoIHRoZSBGcmVlQlNEIDEuMC4yIGNvbXBpbGVyLgoKVHVlIEZlYiAyMiAwMjo1MjoxOSBFU1QgMTk5NCAgICBqcmljaGFyZEBjcy51bWwuZWR1IChKb2huIFJpY2hhcmRzb24pCgogICAgICAgICogW29iamVjdHMvYml0Ymx0LmNdCiAgICAgICAgQWRkZWQgaW4gdGhyZWUgZnVuY3Rpb25zIHRvIGRvIHN0cmV0Y2hpbmcgYW5kIGNvbXByZXNzaW9uCiAgICAgICAgZm9yIFdISVRFT05CTEFDSywgQkxBQ0tPTldISVRFLCBhbmQgY29sb3IgY29waWVzLgoKVHVlIEZlYiAyMiAxNTowMTozMSBFU1QgMTk5NCAgICBqcmljaGFyZEBjcy51bWwuZWR1IChKb2huIFJpY2hhcmRzb24pCgogICAgICAgICogW3dpbmRvd3MvZ3JhcGhpY3MuY10KICAgICAgICBBZGRlZCBGbG9vZEZpbGwgYW5kIEZsb29kRmlsbF9yZWMuICBGbG9vZEZpbGxfcmVjIGlzIHByZXR0eQogICAgICAgIGluZWZmaWNlbnQsIGJ1dCBzaG91bGQgc3VmZmljZSBmb3Igbm93LgoKICAgICAgICAqIFtpbmNsdWRlL3dpbmRvd3MuaF0KICAgICAgICBDaGFuZ2VkIHRoZSB4LHkgcGFyYW1hdGVycyBmb3IgdGhlIEZsb29kRmlsbCBwcm90b3R5cGUgCiAgICAgICAgZnJvbSBpbnRzIHRvIHNob3J0cwoKVHVlIEZlYiAyMiAwMDo1ODoyOCBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW3dpbmRvd3Mvd2lkZ2V0cy5jXQoJQWRkZWQgZGVza3RvcCB3aW5kb3cgY2xhc3MuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJQnVnIGZpeCBpbiBSZWRyYXdXaW5kb3coKS4KCUltcGxlbWVudGVkIEV4Y2x1ZGVVcGRhdGVSZ24oKS4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy93aW5wb3MuY10KCUltcGxlbWVudGVkIGRlc2t0b3Agd2luZG93LgoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KCVByZWxpbWluYXJ5IGRlc2t0b3Agd2luZG93IHByb2NlZHVyZS4KCkZlYiAyMCwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL21lbnUuY10KCU5ldyBmdW5jdGlvbiBMb2FkTWVudUluZGlyZWN0KCkuCglOZXcgZnVuY3Rpb24gR2V0TWVudUNoZWNrTWFya0RpbWVuc2lvbnMoKS4KCgkqIFtpZjE2MzIvdXNlci5zcGVjXQoJRW50cnkgZm9yIERlZkRsZ1Byb2MoKS4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglGaXggYnVnIGluIFJlZ2lzdGVyQ2xhc3MoKSA6IAoJCVdORENMQVNTLT5scHN6TWVudU5hbWUgd2FzIHJlc2V0IHRvIE5VTEwuCgoJKiBbd2luZG93cy93aW4uY10KCUluIENyZWF0ZVdpbmRvd0V4KCksIGlmIGhNZW51ID09IDAgdGhlbiB1c2UgCgkJd25kY2xhc3MtPmxwc3pNZW51TmFtZSB0byBsb2FkIE1lbnUgZnJvbSByZXNvdXJjZTsKCk1vbiBGZWIgMjEgMjI6Mzg6MjggMTk5NCBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW2xvYWRlci9saWJyYXJ5LmNdIFtsb2FkZXIvd2luZS5jXQoJRml4ZWQgcnVuaW5nIERMTCdzIGFzIG1haW4gZXhlY3V0YWJsZSBwcm9ibGVtLgoKCSogW21pc2MvZG9zX2ZzLmNdCglBZGRlZCB3aWxkY2FyZCBzdXBwb3J0IGluIERPU19yZWFkZGlyKCkuCgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCUFkZGVkIHByb3BlciBlcnJvciBoYW5kbGluZyBvZiBCU0Qgd2luc29ja2V0IGZ1bmN0aW9ucy4KCgkqIFttaXNjZW11L2ludDIxLmNdCglLRVJORUxfRE9TM0NhbGwgcmVuYW1lZCB0byBET1MzQ2FsbCBhbmQgbW9kaWZpZWQgdG8gdXNlIGRvX2ludDIxKCkuCgoJKiBbbWFpbi9tYWluLmNdCglBZGRlZCBmdW5jdGlvbnMgZm9yIEdldFZlcnNpb24sIEdldFdpbkZsYWdzIGFuZCBHZXRUaW1lclJlc29sdXRpb24KCWZvciBsaWJ3aW5lLmEsIFN5c3RlbVBhcmFtZXRlcnNJbmZvKCkgcGFydGx5IGltcGxlbWVudGVkLgoKVHVlIEZlYiAyMiAxOTowMDowMiAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAeG9jaGl0bC5udWNsZWN1LnVuYW0ubXgpCgoJKiBbdG9vbGtpdC93aW5tYWluLmNdCglBZGRlZCBfV2luTWFpbiBmdW5jdGlvbi4gU2V0dXBzIHRoZSBsaWJyYXJ5IChjYWxscyBVU0VSX0luaXRBcHApLgoKCSogW3Rvb2xraXQvc3VwLmNdCglBZGRlZCBsb2FkX216X2hlYWRlciwgbG9hZF9uZV9oZWFkZXIsIGxvYWRfdHlwZV9pbmZvIGFuZAoJbG9hZF9uYW1lX2luZm8gZnVuY3Rpb25zLgoKCSogW3Rvb2xraXQvaGVhcC5jXSAKCUNvZGUgY2xlYW51cC4gCgoJKiBbbWlzYy91c2VyLmNdCglNb3ZlZCBmcm9tIGxvYWRlci9taXNjLmMuIEkgaG9wZSB0byBwdXQgYmFjayBhbGwgdGhlIGxvYWRlcgoJZnVuY3Rpb25zIGluIHRoZSB+bG9hZGVyIHN1YmRpcmVjdG9yeSBpbiB0aGUgZnV0dXJlLiBDVXJyZW50bHkgaXMKCW5lZWRlZCBzaW5jZSBpdCBoYXMgVVNFUl9Jbml0QXBwLgoKCSogW21pc2MvcmVzb3VyY2UuY10KCVNpbmNlIFdpbmVMaWIgd2lsbCBwcm9iYWJseSBuZWVkIERMTHMgKGN1cnJlbnRseSBpdCBuZWVkcwoJU3lzcmVzLmRsbCkuIFdpbmVMaWIgd2lsbCBiZSB1c2luZyBtdWNoIGNvZGUgb2YgdGhlIGxvYWRlciBhZ2Fpbi4KCVNvIEkgcmVtb3ZlZCBzb21lIGlmZGVmcyB0aGF0IHdlcmUgdXNlZCBieSBXaW5lTGliLgoKCUFkZGVkIGxvYWRfdHlwZWluZm8gYW5kIGxvYWRfbmFtZWluZm8gKGFuZCB0aGUgY29ycmVzcG9uZGluZwoJZnVuY3Rpb25zIGluIFt0b29sa2l0L3N1cC5jXQoKCUFkZGVkIGludGVnZXIgY29udmVydGlvbiBmdW5jdGlvbnMgaW4gdGhlIG5lZWRlZCBwbGFjZXMuCgoJQWRkZWQgdmVyeSB1Z2x5IHBhdGNoIChpbmNsdWRlcyB3aW5lLmMpLiBJbiB0aGUgbmV4dCByZWxlYXNlIEkKCXBsYW4gdG8gbW92ZSBiYWNrIGFsbCB0aGUgbG9hZGVyIHJvdXRpbmVzIHRvIH4vbG9hZGVyLiBJbiB0aGUKCW1lYW50aW1lIEkgbmVlZGVkIHRoaXMgcGF0Y2guIEl0IGRvZXNuJ3QgYWZmZWN0IGFueSBvZiB0aGUKCWVtdWxhdG9yIGNvZGUgKGl0cyBpZmRlZmVkIGZvciBXaW5lTGliKS4KCgkqIFttaXNjL21haW4uY10KCUNsZWFuZWQgdXAgY2FsbCB0byBXaW5NYWluIChub3cgdXNlcyBbdG9vbGtpdC93aW5tYWluLmNdCglJZmRlZmVkIGFyZ3VtZW50IG51bWJlciBjaGVja2luZyB3aGVuIGNvbXBpbGluZyB0aGUgbGlicmFyeS4KCgkqIFtsb2FkZXIvd2luZS5jXQoJTW9kaWZpZWQgdG8gdXNlIGxvYWRfKG16fG5lKV9oZWFkZXIgaW5zdGVhZCBvZiBkb2luZyBhIGRpcmVjdAoJcmVhZC4gIFdoZW4gY29tcGlsaW5nIHRoZSBlbXVsYXRvciBpdCBzdGlsbCB1c2VzIHRoZSBkaXJlY3QgcmVhZAoJZm9yIHBlcmZvcm1hbmNlLiAKCgkqIFtpbmNsdWRlL3dpbmUuaF0KCVByb3RvdHlwZXMgZm9yIGxvYWRpbmcgcm91dGluZXMuCgoJKiBbaW5jbHVkZS9jbGFzcy5oXQoJQWRkZWQgV0lORV9QQUNLRUQgbWFjcm8gaW5zdGVhZCBvZiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkKCgkqIFtpbmNsdWRlL2FyY2guaF0KCU1hY3JvcyBmb3IgY29udmVydGluZyBpbnRlZ2VycyAoTGl0dGxlIGVuZGlhbiB0byBiaWctZW5kaWFuKS4KCU5lZWRlZCBpbiB0aGUgU3VuIHRvIGFsbG93IGxvYWRpbmcgb2YgRExMIGZpbGVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gRmViIDE0IDIzOjQ4OjA5IE1FVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbd2luZG93cy9jbGlwcGluZy5jXQoJTW92ZWQgZXZlcnl0aGluZyBpbnRvIHdpbmRvd3MvcGFpbnRpbmcuYyBhbmQgcmVtb3ZlZCB0aGlzIGZpbGUuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglSZW1vdmVkIGNhbGxzIHRvIG1lbW1vdmUoKSBpbiBNU0dfUmVtb3ZlTXNnKCkuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUFkZGVkIFdNX0dFVE1JTk1BWElORk8gc3VwcG9ydCBmb3Igd2luZG93IHJlc2l6aW5nLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUltcGxlbWVudGVkIFJlZHJhd1dpbmRvdygpLgoKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglCdWcgZml4IGluIFNjcm9sbFdpbmRvd0V4KCkuCgoJKiBbd2luZG93cy93aW4uY10KCU1vdmVkIFVwZGF0ZVdpbmRvdygpIHRvIHdpbmRvd3MvcGFpbnRpbmcuYy4KCkZyaSBGZWIgMTEgMTI6NDE6MjggMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCQoJKiBbbG9hZGVyL3dpbmUuY10gW21pc2MvZG9zX2ZzLmNdCglnZXRlbnYoKSBlcSBOVUxMIGJ1Z2ZpeGVzLgoKCSogW21pc2MvY29tbS5jXQoJY2ZtYWtlcmF3IGNoYW5nZWQgZm9yIFN1bk9TLgoKRmViIDEzLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWVtL2F0b20uY10KCUJ1ZyBmaXggaW4gQVRPTV9EZWxldGVBdG9tKCkgOiAKCQljaGFuZ2UgTG9jYWxGcmVlKCkgYnkgVVNFUl9IRUFQX0ZSRUUoKS4KCgkqIFttaXNjL21lc3NhZ2UuY10KCU5ldyBmdW5jdGlvbiBGYXRhbEFwcEV4aXQoKS4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCU5ldyBlbXB0eSBzdHViIFNldE1hcHBlckZsYWdzKCkuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJQmV0dGVyIENoZWNrTWFyayAmIG90aGVyIGJpdG1hcHMgcGxhY2VtZW50LgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCU5ldyBmdW5jdGlvbiBSb3VuZFJlY3QoKSA6IGNhbGMuZXhlIG5vdyB3b3JraW5nLi4uCgpUdWUgRmViIDE1IDE0OjI5OjM3IDE5OTQgIEpvaG4gUmljaGFyZHNvbgoKICAgICAgICAqIFtvYmplY3RzL2JpdGJsdC5jXQogICAgICAgIEZpeGVkIFN0cmV0Y2hCbHQgc28gaXQgd29ya3MgcXVpY2tlciBhbmQgZmFzdGVyLiAgSXQgc3RpbGwgZG9lc24ndAogICAgICAgIHVzZSB0aGUgU3RyZXRjaE1vZGUgYml0cyBmb3IgYml0bWFwIGNvbXByZXNzaW9uLCBidXQgdGhhdCB3aWxsCiAgICAgICAgY29tZSBzb29uLgoKTW9uIEZlYiAxNCAxMzoyMTowNCAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAcm94YW5uZS5udWNsZWN1LnVuYW0ubXgpCgoJKiBbaW5jbHVkZS93aW5kb3dzLmgsZGlhbG9nLmgsZ2RpLmhdCglDaGFuZ2VkIF9fYXRyaWJ1dGVfXyAoKHBhY2tlZCkpIGZvciBXSU5FX1BBQ0tFRC4gCglXaGVuIGNvbXBpbGluZyB0aGUgbGlicmFyeSB0aGlzIGlzIGRlZmluZWQgYXMgbm90aGluZy4gVGhpcyBnZXRzCglyaWQgd2l0aCBhbGwgdGhlIHByb2JsZW1zIGNvbXBpbGluZyB1bmRlciBTdW5PUy4gQWxzbyAKCgkqIFt3aW5kb3dzL3V0aWxpdHkuY10KCUFkZGVkIERlYnVnUHJpbnRTdHJpbmcuCgoJKiBbdG9vbGtpdC9zdXAuY10KCUFkZGVkIGhTeXNSZXMgPSAxIGRlZmluaXRpb24gdG8gcmVzb2x2ZSBleHRlcm5hbHMuCglBZGRlZCBDYWxsTGluZUREQVByb2MgZnVuY3Rpb24gKHRvb2xraXQgdmVyc2lvbikuCglBZGRlZCB0b3ksIGFuZCBoaSBpbmVmaWNpZW50IG1lbW1vdmUgdW50aWwgY29kZSBpbiBtZXNzYWdlLmMgZ2V0CglyZXdyaXR0ZW4uCgoJKiBbb2JqZWN0cy9nZGlvYmouY10KCUlmZGVmZWQgbGludXgvZW11bGF0b3ItZGVwZW5kZW50IGNvZGUgdG8gYWxsb3cgY29tcGlsYXRpb24gb2YKCVdpbmVMaWIuCgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCUFkZGVkIGlmZGVmIHRvIGFsbG93IGNvbXBpbGF0aW9uIHVuZGVyIFN1bk9TLgoKCSogW21pc2MvcmVzb3VyY2UuY10KCVdoZW4gY29tcGlsaW5nIHRoZSBsaWJyYXJ5LCB0aGUgcmVzb3VyY2UgZmlsZSBpcyBleHBlY3RlZCB0byBiZSBpbgoJYSBmaWxlIGNhbGxlZCAkYXJndlswXS5SZXMuIEFsc28gdGhlIGluZm9ybWF0aW9uIG9mIHRoZSByZXNvdXJjZQoJaXMgZXhwZWN0ZWQgdG8gYmUgYXQgb2Zmc2V0IDAgb2YgdGhlIC5SZXMgZmlsZS4KCgkqIFttaXNjL21haW4uY10KCUNhbGwgV2luTWFpbiB3aXRoIGFyZ3VtZW50cyBpZiBjb21waWxpbmcgV2luZUxpYi4KCUNhbGwgc2h1dGRvd24gZnVuY3Rpb25zIChDb21tX0RlSW5pdCwgRE9TX0RlSW5pdEZTKS4KCUNhbGwgc3luY19wcm9maWxlcyB0byBwcmVzZXJ2ZSBjaGFuZ2VzIHRvIC5JTkkgZmlsZXMuCgoJKiBbbWlzYy9jb21tLmMsZG9zX2ZzLmNdCglyZW1vdmVkIGNhbGwgdG8gYXRleGl0KENvbW1fRGVJbml0KQoJcmVtb3ZlZCBjYWxsIHRvIGF0ZXhpdChET1NfRGVJbml0RlMpCglTaHV0ZG93biBmdW5jdGlvbnMgYXJlIG5vdyBjYWxsZWQgZnJvbSB0aGUgcmV0dXJuIG9mIFdpbk1haW4KCgkqIHJlbW92ZWQgbWVtb3J5bGliIHN1YmRpcmVjdG9yeQoKCSogbW92ZWQgbWVtb3J5L2F0b20uYyAgICB0byBtaXNjL2F0b20uYwoJICBtb3ZlZCBtZW1vcnlsaWIvaGVhcC5jIHRvIHRvb2xraXQvaGVhcC5jCgoJKiBbbG9hZGVyL3dpbmUuY10KCU1vdmVkIERlYnVnUHJpbnRTdHJpbmcgdG8gd2luZG93cy91dGlsaXR5LmMKCgkqIFtpbmNsdWRlL3dpbnNvY2suaF0KCURlZmluZSBTT19ET05UTElOR0VSIG9ubHkgaWYgaXQgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGVmaW5lZC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCWFkZGVkIGRlZmluaXRpb24gZm9yIERMR1BST0MuCglhZGRlZCBkZWZpbml0aW9uIGZvciBMTUVNX1dJTkVfQUxJR04gYW5kIG90aGVyIExNRU1fKiBjb25zdGFudHMuCglXaGVuIGNvbXBpbGluZyBXaW5lTGliIFdORFBST0MgaXMgZGVmaW5lZCB3aXRoIGFsbCB0aGUgcGFyYW1ldGVycwoJdG8gYXZvaWQgY29tcGlsYXRpb24gcHJvYmxlbXMuCgoJKiBbaW5jbHVkZS91c2VyLmhdCglXaGVuIGNvbXBpbGluZyBXaW5lTGliIFVTRVJfSEVBUF8oQUxMT0N8UkVBTExPQ3xBRERSfEZSRUUpIHRoZQoJY2FsbHMgYXJlIHRyYW5zbGF0ZWQgdG8gdGhlIGxpYnJhcnkgYWxsb2NhdGlvbiByb3V0aW5lcy4KCgkqIFtpbmNsdWRlL2dkaS5oLHVzZXIuaF0KCVdoZW4gY29tcGlsaW5nIFdpbmVMaWIgR0RJX0hFQVBfKEFMTE9DfEFERFJ8RlJFRSkgdGhlIGNhbGxzIGFyZQoJdHJhbnNsYXRlZCB0byB0aGUgbGlicmFyeSBhbGxvY2F0aW9uIHJvdXRpbmVzLgoKCSogW2luY2x1ZGUvYXRvbS5oXQoJRGVmaW5lZCBMb2NhbEFsaWduLiBXaGVuIGNvbXBpbGluZyB0aGUgZW11bGF0b3IgaXQncyB0cmFuc2xhdGVkIGFzCglhIGNhbGwgdG8gTG9jYWxBbGxvYyAodGhlIG9yaWdpbmFsIGNvZGUpLCB3aGVuIGNvbXBpbGluZyBXaW5lTGliCglhcyBhIGNhbGwgdG8gTG9jYWxBbGxvYyB3aXRoIGEgV0lORS1mbGFnIGNhbGxlZCBMTUVNX1dJTkVfQUxJR04KCShhdG9tLmMgbmVlZHMgYWxpZ25lZCBkYXRhIG9uIGEgNCBieXRlIGJvdW5kYXJ5KS4KCgkqIFttaXNjL2ZpbGUuY10KCVJlbmFtZWQgS0VSTkVMXyogZnVuY3Rpb25zIGFuZCBmaXhlZCBwcm90b3R5cGVzLgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCVJlbmFtZWQgS0VSTkVMXyogZnVuY3Rpb25zIGluIG9yZGVyIHRvIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zCgl1c2luZyBXaW5lIGFzIGEgbGlicmFyeSAoT3BlRmlsZSwgX2xjbG9zZSwgX2xyZWFkLCBfbGNyZWF0ZSwKCV9sbHNlZWssIF9sb3BlbiwgX2x3cml0ZSkuCgoJKiBbTWFrZWZpbGVdCglDcmVhdGUgbGlicmFyeSBpbnN0ZWFkIG9mIGV4ZWN1dGFibGUgd2hlbiBidWlsZGluZyB0YXJnZXQKCWxpYndpbmUuYSAKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEZlYiAgOCAxMzo1MjoxMSAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAcm94YW5uZSkKCgkqIFtNYWtlZmlsZXNdCglVc2UgJChDQykgaW5zdGVhZCBvZiBjYy4KCUFkZGVkIGxpYndpbmUgdGFyZ2V0LgoKCSogW2luY2x1ZGUvcHJvdG90eXBlc10KCSNpZmRlZmVkIHNlY3Rpb24gZm9yIFdpbmVMaWIKCgkqIG1vdmVkIGxvYWRlci9jdXJzb3IuYyAgIHRvIG1pc2MvY3Vyc29yLmMKCSAgbW92ZWQgbG9hZGVyL3Jlc291cmNlLmMgdG8gbWlzYy9yZXNvdXJjZS5jCgkgIG1vdmVkIG1pc2MvZW11bGF0ZS5jICAgIHRvIG1pc2NlbXUvZW11bGF0ZS5jCgkgIG1vdmVkIG1pc2MvaW50MWEuYyAgICAgIHRvIG1pc2NlbXUvaW50MWEuYwoJICBtb3ZlZCBtaXNjL2ludDIxLmMJICB0byBtaXNjZW11L2ludDIxLmMKCSAgbW92ZWQJbWlzYy9rZXJuZWwuYwkgIHRvIG1pc2NlbXUva2VybmVsLmMKCSAgbW92ZWQgbWlzYy91c2VyLmMgICAgICAgdG8gbWlzY2VtdS91c2VyLmMKCgkqIFttZW1vcnlsaWIvaGVhcC5jXQoJSGVhcCBtYW5hZ2VtZW50IGZvciBXaW5lTGliCgoJKiBbbWlzYy9jb21tLmNdCglNb2RpZmllZCB0byBhbGxvdyBjb21waWxhdGlvbiB1bmRlciBTdW5PUyAoI2luY2x1ZGUgZXJybm8sIFN1bk9TCglkb2Vzbid0IGhhdmUgYXRleGl0ICgpKS4KCgkqIFttaXNjL2Rvc19mcy5jXQoJTW9kaWZpZWQgdG8gYWxsb3cgY29tcGlsYXRpb24gdW5kZXIgU3VuT1MgKCNpbmNsdWRlIHZmcy5oKQoKCSogW21pc2MvZmlsZS5jXQoJTW9kaWZpZWQgdG8gYWxsb3cgY29tcGlsYXRpb24gdW5kZXIgU3VuT1MgKE9QRU5fTUFYIGNvbnN0YW50LAoJI2luY2x1ZGUgdW5pc3RkLmgpCgoJKiBbb2JqZWN0cy9wYWxldHRlLmNdCglNb2RpZmllZCB0byBhbGxvdyBjb21waWxhdGlvbiB1bmRlciBTdW5PUyAoI2luY2x1ZGUgbGltaXRzKQoKCSogW3Rvb2xraXQvc3VwLmNdCglXaW5lTGliIHZlcnNpb24gb2YgQ2FsbFdpbmRvd1Byb2MuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJVHlwZWRlZiBYUG9pbnRlciB1bmRlciBYMTFSNCAoT3BlbldpbmRvd3MpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglXaGVuIGNvbXBpbGluZyBXaW5lTGliLCB1c2UgZGlyZWN0IGNhbGxiYWNrcyBpbnN0ZWFkIG9mIHRoZQoJd2luZG93cyBzdXBwbGllZCBjYWxsYmFja3MuCgpNb24gRmViICA3IDIyOjM3OjM0IE1FVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbbG9hZGVyL2N1cnNvci5jXQoJTmV3IGZ1bmN0aW9uIENVUlNPUl9TZXRXaW5DdXJzb3IoKSwgZm9yIGludGVybmFsIHVzZSwgdG8gc2V0Cgl0aGUgY3Vyc29yIG9mIGEgc3BlY2lmaWMgd2luZG93IG1vcmUgcmVsaWFibHkgdGhhbiB3aXRoIFNldEN1cnNvcigpLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglCZXR0ZXIgd2luZG93IG1hbmFnZW1lbnQuIE1vdmluZyBhbmQgcmVzaXppbmcgZnJvbSB0aGUgc3lzdGVtCgltZW51IHNob3VsZCB3b3JrIG5vdy4KCUFkZGVkIHNjcm9sbC1iYXIgbW91c2UgdHJhY2tpbmcuCgoJKiBbd2luZG93cy93aW4uY10KCU1vdmVkIHNjcm9sbC1iYXIgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uIHRvIGRlZnduZC5jLgoKRmViIDUsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQ2FsbCB0byBTdGREcmF3TWVudUJhcigpIGR1cmluZyBOQydzIGRyYXdpbmcuCglOZXcgTkNfVHJhY2tNb3VzZU1lbnVCYXIoKSBmdW5jdGlvbiB3aGljaCBjYWxsIAoJCU1lbnVCdXR0b25Eb3duKCksIE1lbnVCdXR0b25VcCgpICYgTWVudU1vdXNlTW92ZSgpLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU5ldyBDaGFuZ2VNZW51KCkgZnVuY3Rpb24uCglSZW1vdmUgcGVybWFuZW50bHkgb2xkIFh0IG1lbnUgY29kZS4KCU1ha2UgY29tbW9uIGZ1bmN0aW9ucyBNZW51QnV0dG9uRG93bigpLCBNZW51QnV0dG9uVXAoKQoJCSYgTWVudU1vdXNlTW92ZSgpIGZvciBib3RoIHBvcHVwcyAmIG1lbnViYXIuCgkKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglQYWludCBPQk1fQ09NQk8gZGlyZWN0bHkgaW4gY29tYm8gY2xpZW50LgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeCBidWcgaW4gbXVsdGljb2x1bW5zIGNhbGN1bGF0aW9ucy4KCgkqIFtjb250cm9scy9NYWtlZmlsZV0KCVJlbW92ZSBydWxlcyBmb3Igb2xkIGZpbGUgJ2NhcHRpb24uYycuCgoJKiBbbWlzYy9rZXJuZWwuY10KCVJlbW92ZSBlbXB0eSBzdHViIEdldE1vZHVsZUZpbGVOYW1lKCkuCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCU5ldyBHZXRNb2R1bGVIYW5kbGUoKSBmdW5jdGlvbi4KCU5ldyBHZXRNb2R1bGVVc2FnZSgpIGZ1bmN0aW9uLgoJTmV3IEdldE1vZHVsZUZpbGVOYW1lKCkgZnVuY3Rpb24uCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglUcnkgdG8gZmluZCB0aGUgYnVnIGEgbWlzc2luZyBtZW51IGxvYWRpbmcgLi4uIE5vdCBmb3VuZCB5ZXQgIQoKCSogW3dpbmRvd3Mvd2luLmNdCglSZW1vdmUgb2xkIG1lbnViYXIgY3JlYXRpb24uCgpUaHUgRmViICAzIDIyOjMwOjExIDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCU1vcmUgZnVuY3Rpb25zIGFkZGVkLgoKCSogW2lmMTYzMi93aW5zb2NrLnNwZWNdIFttaXNjL3dpbnNvY2tldC5jXQoJQWRkZWQgSm9obiBCcmV6YWsncyB3aW5zb2NrLmRsbCBzdHVmZi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEZlYiAgMSAyMToxNDo0NyAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJQWRkZWQgZnVuY3Rpb24gQ3JlYXRlTmV3U2VnbWVudHMoKS4gIE1vZGlmaWVkIElQQ0NvcHlTZWxlY3RvcgoJdG8gYWxsb3cgYWxpYXNpbmcgdG8gYW55IGFyYml0cmFyeSBtZW1vcnkgc3BhY2UuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJRml4ZWQgcG90ZW50aWFsIGJ1ZyBpbiBHbG9iYWxHZXRGcmVlU2VnbWVudHMoKS4KCgkqIFttZW1vcnkvbGluZWFyLmNdCglDcmVhdGVkIGZ1bmN0aW9ucyBHbG9iYWxMaW5lYXJMb2NrKCkgYW5kIEdsb2JhbExpbmVhclVubG9jaygpLgoKVHVlIEZlYiAgMSAwNTo1MTo0MyAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJUmVtb3ZlZCBDQVBUSU9OIHdpbmRvdyBjbGFzcy4KCgkqIFtsb2FkZXIvY3Vyc29yLmNdCglCdWcgZml4IGluIExvYWRDdXJzb3IoKTogZG9uJ3QgYWxsb2NhdGUgbWVtb3J5IGV2ZXJ5IHRpbWUgZm9yCglidWlsdC1pbiBjdXJzb3JzLgoKCSogW3dpbmRvd3MvY2xpcHBpbmcuY10KCUludmFsaWRhdGUgY2hpbGQgd2luZG93cyBpbiBJbnZhbGlkYXRlUmduKCkuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUFkZGVkIHJlcGFpbnQgb2YgdGhlIGNhcHRpb24gd2hlbiBjaGFuZ2luZyB3aW5kb3cgdGV4dC4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglNb2RpZmllZCBTZXRDYXB0dXJlKCkgdG8gYWxsb3cga2V5Ym9hcmQgZXZlbnRzIHdoaWxlIGNhcHR1cmluZy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCU5ldyBmdW5jdGlvbiBNU0dfR2V0SGFyZHdhcmVNZXNzYWdlKCksIHRvIGRvIG1vdXNlIHRyYWNraW5nCgl3aXRob3V0IHJldHVybmluZyBjb250cm9sIHRvIHRoZSBXaW5kb3dzIHByb2dyYW0uCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUEgY291cGxlIG9mIGNoYW5nZXMgaW4gZnJhbWUgZHJhd2luZyBmb3IgRExHTU9EQUxGUkFNRSB3aW5kb3dzLgoJUmV3cml0dGVuIHdpbmRvdyBtb3ZpbmcgY29kZSwgdG8gdXNlIE1TR19HZXRIYXJkd2FyZU1lc3NhZ2UoKQoJaW5zdGVhZCBvZiBub24tY2xpZW50IG1vdXNlIGV2ZW50cyAodGhpcyBpcyB0aGUgd2F5IFdpbmRvd3MKCWRvZXMgaXQpLCBhbmQgdG8gc2VuZCBXTV9FTlRFUlNJWkVNT1ZFIG1lc3NhZ2VzLgoJUmVtb3ZlZCBXTV9OQ0JVVFRPTlVQIGFuZCBXTV9OQ01PVVNFTU9WRSBoYW5kbGVycy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWxsb2NhdGUgdGVtcG9yYXJ5IHN0cnVjdHVyZXMgb24gdGhlIFVTRVIgaGVhcCBpbnN0ZWFkIG9mCgl1c2luZyBHbG9iYWxBbGxvYygpLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglBZGRlZCBmdW5jdGlvbiBXSU5QT1NfR2V0TWluTWF4SW5mbygpIHRvIGdldCBzaXppbmcgaW5mb3JtYXRpb25zLgoKSmFuIDMxLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUNhbGwgdG8gU3RkRHJhd1Njcm9sbEJhcigpIGR1cmluZyBOQydzIGRyYXdpbmcuCglDYWxsIHRvIE5DX1Njcm9sbEJhckJ1dHRvbkRvd24oKSBvbiBOQyBtb3VzZSBldmVudHMgV01fTEJVVFRPTkRPV04uCglDYWxsIHRvIE5DX1Njcm9sbEJhckJ1dHRvblVwKCkgb24gTkMgbW91c2UgZXZlbnRzIFdNX0xCVVRUT05VUC4KCUNhbGwgdG8gTkNfU2Nyb2xsQmFyTW91c2VNb3ZlKCkgb24gTkMgbW91c2UgZXZlbnRzIFdNX01PVVNFTU9WRS4KCgkqIFtjb250cm9scy9tZW51LmNdCglOZXcgR2V0U3ViTWVudSgpIGZ1bmN0aW9uLgoJTW92ZSBHZXRNZW51KCkgJiBTZXRNZW51KCkgZnVuY3Rpb25zIGZyb20gJ3dpbmRvd3Mvd2luLmMnLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCVN0YXJ0IGNoYW5nZXMgdG8gc2F0aXNmeSByZWNlbnQgY2hhbmdlcyBpbiBzY3JvbGxiYXJzL3dpbmRvd3MuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglQdXQgc29tZSBjb2RlIGluIExvYWRBY2NlbGVyYXRvcnMoKSBzdHViLgoJTmV3IFRyYW5zbGF0ZUFjY2VsZXJhdG9yKCkgZnVuY3Rpb24uCgoJKiBbd2luZG93cy93aW4uY10KCVJlbW92ZSBHZXRNZW51KCkgJiBTZXRNZW51KCkgZnVuY3Rpb25zLgoJQ2FsbCB0byBOQ19DcmVhdGVTY3JvbGxCYXJzKCkgaWYgcmVxdWlyZWQgYnkgQ3JlYXRlV2luZG93KCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBKYW4gMjQgMTA6NDA6MTAgRVNUIDE5OTQgSm9obiBSaWNoYXJkc29uIChqcmljaGFyZEBjcy51bWwuZWR1KQoKICAgICAgICAqIFt3aW5kb3cvd2luLmNdCiAgICAgICAgQWRkZWQgZnVuY3Rpb25zIEVudW1XaW5kb3dzLCBFbnVtQ2hpbGRXaW5kb3dzLCBhbmQgaGVscGVyCiAgICAgICAgV0lOX0VudW1DaGlsZFdpbi4gIEVudW1XaW5kb3dzIHdvbid0IGxpc3QgYWxsIHdpbmUgd2luZG93cwogICAgICAgIGJlY2F1c2UgR2V0RGVza3RvcFdpbmRvdyBpc24ndCBjb21wbGV0ZS4gIEhvd2V2ZXIsIHRoZSBjb2RlCiAgICAgICAgaXMgaW4gcGxhY2UgZm9yIGl0IHRvIHdvcmsgY29ycmVjdGx5IGFuZCBvbmx5IG5lZWRzIAogICAgICAgIEdldERlc2t0b3BXaW5kb3cgdG8gZG8gc28uICAKClR1ZSBKYW4gMjUgMDU6NTE6NDcgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglBZGRlZCBoYW5kbGluZyBvZiBhY3RpdmF0aW9uIG1lc3NhZ2VzIChXTV9BQ1RJVkFURSwKCVdNX05DQUNUSVZBVEUsIFdNX01PVVNFQUNUSVZBVEUpCgoJKiBbd2luZG93cy9ldmVudC5jXQoJRGUtYWN0aXZhdGUgdGhlIHdpbmRvdyB3aGVuIGxvc2luZyBpbnB1dCBmb2N1cy4KCgkqIFt3aW5kb3dzL2ZvY3VzLmNdCglCdWcgZml4IGluIFNldEZvY3VzKCkuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglBZGRlZCBhY3RpdmF0aW9uIG9mIHRoZSB3aW5kb3cgb24gbW91c2UtY2xpY2tzLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglDaGFuZ2VkIG5vbi1jbGllbnQgYXJlYSBwYWludGluZyB0byB1c2UgdGhlIGNvcnJlY3QgY29sb3JzCglkZXBlbmRpbmcgdXBvbiB0aGUgYWN0aXZhdGlvbiBzdGF0ZS4KCUFkZGVkIFdNX05DQUNUSVZBVEUgbWVzc2FnZSBoYW5kbGluZy4KCUZpeGVkIGEgY291cGxlIG9mIGJ1Z3MgaW4gd2luZG93IG1vdmluZyBhbmQgcmVzaXppbmcuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUltcGxlbWVudGVkIEdldC9TZXRBY3RpdmVXaW5kb3coKS4KCUltcGxlbWVudGVkIFNXUF9OT0FDVElWQVRFIGZsYWcgaW4gU2V0V2luZG93UG9zKCkuCgpKYW4gMTcsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttaXNjL21lc3NhZ2UuY10KCU1lc3NhZ2VCb3ggaGFzIGEgQ2FwdGlvbkJhciBmb3IgaGlzIHRpdGxlIGV4Y2VwdCBmb3IKCQlNQl9TWVNURU1NT0RBTCB3aXRoIE1CX0lDT05IQU5ELgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglDYWxsIHRvIE5DX1RyYWNrU3lzTWVudSBvbiBTeXNNZW51IGJ1dHRvbiBtb3VzZSBjbGljay4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQ2FsbCB0byBOQ19UcmFja1N5c01lbnUgb24gQWx0IGtleSAoVktfTUVOVSkuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IEdldFN5c3RlbU1lbnUoKSBmdW5jdGlvbi4KCU5ldyBDb3B5U3lzdGVtTWVudSgpIGludGVybmFsIGZ1bmN0aW9uLgoJTmV3IE5DX1RyYWNrU3lzTWVudSgpIGludGVybmFsIGZ1bmN0aW9uLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJTmV3IFdNX0lOSVRNRU5VLCBXTV9JTklUTUVOVVBPUFVQLCBXTV9NRU5VU0VMRUNUICYgV01fTUVOVUNIQVIgZGVmaW5lcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEphbiAxMyAxMTo0NToxMyAxOTk0ICBKb2huIFJpY2hhcmRzb24gPGpyaWNoYXJkQGNzLnVtbC5lZHU+CgoJKiBbd2luZG93L3dpbi5jXQoJQWRkZWQgZnVuY3Rpb25zIEVuYWJsZVdpbmRvdywgSXNXaW5kb3dFbmFibGVkLCBhbmQgaGVscGVyIAoJV0lOX1NldFNlbnNpdGl2ZS4KCQoJKiBbd2luZG93L2V2ZW50LmNdCglBZGRlZCBjaGVja3MgZm9yIFdTX0RJU0FCTEVEIHdpbmRvd3MgaW4gRVZFTlRfa2V5LCBFVkVOVF9Nb3Rpb25Ob3RpZnksCglFVkVOVF9CdXR0b25QcmVzcywgRVZFTlRfQnV0dG9uUmVsZWFzZSwgRVZFTlRfQ29uZmlndXJlTm90aWZ5LAoJRVZFTlRfRm9jdXNJbiwgRVZFTlRfRm9jdXNPdXQsIGFuZCBFVkVOVF9FbnRlck5vdGlmeS4gIEtleSBhbmQgCglidXR0b24gcHJlc3NlcyBiZWVwIGZvciBhIGRpc2FibGVkIHdpbmRvdy4gIAoJSWYgYW55b25lIGZpbmRzIGJldHRlciBwbGFjZXMgZm9yIHRoZXNlIGNoZWNrcywgcGxlYXNlIHRlbGwgbWUuCgpKYW4gMTcsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttaXNjL21lc3NhZ2UuY10KCUNsZWFudXAgb24gYnV0dG9ucyBhbnN3ZXIgdmFsdWUgcmV0dXJuZWQuCgoJKiBbY29udHJvbC9jb21iby5jXQoJTm93IHVzZSBPQk1fQ09NQk8gYml0bWFwIGRyb3Bkb3duIGJ1dHRvbi4KCk1vbiBKYW4gMTcgMjE6NTY6NDUgMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFttaXNjL2NvbW0vY10KCUEgZmV3IGJ1Z2ZpeGVzLgoKVHVlIEphbiAxOCAwNjozNjo0OCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbbG9hZGVyL2N1cnNvci5jXQoJQWRkZWQgWCBjdXJzb3IgZm9yIElEQ19TSVpFTlMgYW5kIElEQ19TSVpFV0UuCgoJKiBbaW5jbHVkZS9vcHRpb25zLmhdIFttaXNjL21haW4uY10gIChOZXcgZmlsZXMpCglSZXdyb3RlIG1haW4oKSBmdW5jdGlvbiB0byBnZXQgcmlkIG9mIFh0IGFwcGxpY2F0aW9uIGNvbnRleHQsCglhbmQgYWRkZWQgY29tbWFuZC1saW5lIG9wdGlvbiBwYXJzaW5nLgoKCSogW29iamVjdHMvY29sb3IuY10KCVVzZSBvZiBhIHByaXZhdGUgbWFwIG5vdyBjb25maWd1cmFibGUgd2l0aCBjb21tYW5kLWxpbmUgb3B0aW9uLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglBZGRlZCBXTV9TWVNDT01NQU5EIGhhbmRsaW5nLCBhbmQgYmV0dGVyIFdNX1NFVENVUlNPUiBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglSZW1vdmVkIENvbmZpZ3VyZU5vdGlmeSBldmVudCBoYW5kbGVyIChubyBsb25nZXIgbmVlZGVkKS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCVNlbmQgV01fU0VUQ1VSU09SIG1lc3NhZ2Ugb24gbW91c2UgZXZlbnRzLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglVc2UgT0VNIGJpdG1hcHMgZm9yIHRoZSBkcmF3aW5nIG9mIHRoZSBub24tY2xpZW50IGFyZWEuCglBZGRlZCBjYXB0aW9uIGJhciBidXR0b25zIGhhbmRsaW5nLCBhbmQgbW92aW5nIGFuZCByZXNpemluZyBvZgoJdGhlIHdpbmRvdyB2aWEgdGhlIHdpbmRvdyBmcmFtZSAoYnlwYXNzaW5nIHRoZSB3aW5kb3cgbWFuYWdlcikuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJQnVnIGZpeCBpbiBCZWdpblBhaW50KCkuCgoJKiBbd2luZG93cy93aW4uY10KCVNldCB0aGUgb3ZlcnJpZGVfcmVkaXJlY3QgZmxhZyBmb3Igd2luZG93cyAodG8gYnlwYXNzIHdpbmRvdwoJbWFuYWdlcikuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUltcGxlbWVudGVkIFdpbmRvd0Zyb21Qb2ludCgpLCBDaGlsZFdpbmRvd0Zyb21Qb2ludCgpLAoJQnJpbmdXaW5kb3dUb1RvcCgpLCBHZXQvU2V0SW50ZXJuYWxXaW5kb3dQb3MoKSwKCUdldC9TZXRXaW5kb3dQbGFjZW1lbnQoKS4KCk1vbiBKYW4gMTcgMjA6NDg6MjQgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFttZW1vcnkvaGVhcC5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbG9jYWwgaGVhcHMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBKYW4gIDQgMTM6MDE6MzMgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKICAgICAgICAqIFt3aW5kb3cvY2FyZXQuY10KICAgICAgICBNb2RpZmllZCBjb2RlIHRvIHVzZSBzeXN0ZW0gdGltZXIuCgpKYW4gOSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW3dpbmRvd3Mvd2luLmNdCglXaW5kb3dzIGNyZWF0ZSBpZiByZXF1aXJlZCBuZXcgWExJQiBNZW51QmFyICYgQ2FwdGlvbkJhci4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJV01fQ0FMQ1NJWkUgTW92ZSAmIFJlc2l6ZSBjYXB0aW9uLCBtZW51YmFyICYgc2Nyb2xsYmFycy4KCShJJ20gbm90IHN1cmUgaXQncyB0aGUgZ29vZCBwbGFjZSBmb3IgaXQsIGJ1dCBpdCB3b3JrLi4uKQoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJb3B0aW1pemUgaW4gRmluZFJlc291cmNlQnlOdW1iZXIsIG1ha2UgbHNlZWsoKSBpZiBuZXh0IHR5cGUgLi4uCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglzY3JvbGxiYXIgYnV0dG9ucyBhcmUgbm93IHVzaW5nIHN5c3RlbSByZXNvdXJjZXMgYml0bWFwcy4KCgkqIFtjb250cm9scy9jYXB0aW9uLmNdIC0gbmV3IGZpbGUgLi4uCgljYXB0aW9uYmFyIHNob3dpbmcgdGl0bGUsIGNsb3NlIGJ1dHRvbiB3aXRoIFN5c01lbnUsCglhbmQgb3RoZXIgYnV0dG9ucyB1c2luZyBzeXN0ZW0gcmVzb3VyY2VzIGJpdG1hcHMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IGZ1bmN0aW9uczogU2V0TWVudUl0ZW1CaXRtYXBzKCkgd2l0aCAnZ2x1ZXMnLAoJTWFrZSBuZXcgdmVyc2lvbiBvZiBMb2FkTWVudSgpICYgUGFyc2VNZW51KCksCgkoIHB1dCAjZGVmaW5lIFVTRV9QT1BVUE1FTlUgKS4KCUltcGxlbWVudGF0aW9uIG9mIE1lbnVCYXIgZnVuY3Rpb25zLgoJCgkqIFtzeXNyZXMuZGxsXQoJTmV3IGJpdG1hcHMgZm9yIHN5c3RlbSBzdWNoIE9CTV9DTE9TRSwgT0JNX01JTklNSVpFLCBPQk1fVVBBUlJPV0kuCglOZXcgU1lTTUVOVSBtZW51LCBpdCBkb24ndCB3b3JrIHlldCAhIDotKCgKClR1ZSBKYW4gMTEgMDU6Mjc6NDUgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbbWVtb3J5L2F0b20uY10KCUZpeGVkIGEgYnVnIHRoYXQgY291bGQgY2F1c2UgYXRvbXMgdG8gYmUgY2FzZS1zZW5zaXRpdmUuCgoJKiBbbWlzYy9yZWN0LmNdCglCdWcgZml4IGluIFN1YnRyYWN0UmVjdCgpLgoKCSogW29iamVjdHMvY2xpcHBpbmcuY10KCUJ1ZyBmaXggd2hlbiBzZXR0aW5nIHRoZSBjbGlwIG1hc2sgdG8gYW4gZW1wdHkgcmVnaW9uLgoKCSogW3dpbmRvd3MvZGNlLmNdCglCdWcgZml4IGluIFJlbGVhc2VEQygpLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglDYWxsIEFkanVzdFdpbmRvd1JlY3RFeCgpIGJlZm9yZSBjcmVhdGluZyB0aGUgZGlhbG9nIHdpbmRvdy4KCUFkZGVkIHN1cHBvcnQgZm9yIERTX01PREFMRlJBTUUgc3R5bGUuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQ2xlYW5lZCB1cCBldmVudCBoYW5kbGluZyBhbmQgcmVtb3ZlZCBvbGQgWHQgc3R1ZmYuCglNb3ZlZCBkb3VibGUtY2xpY2sgaGFuZGxpbmcgdG8gd2luZG93cy9tZXNzYWdlLmMKCgkqIFt3aW5kb3dzL2ZvY3VzLmNdCglCdWcgZml4OiBvbmx5IHNldCB0aGUgWCBmb2N1cyB3aGVuIHRoZSB3aW5kb3cgaXMgdmlld2FibGUuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJUmV3cml0dGVuIERyYXdSZWxpZWZSZWN0KCkgdG8gdXNlIGJydXNoIGluc3RlYWQgb2YgcGVuLCBhbmQKCXRvIHVzZSB0aGUgc3lzdGVtIGNvbG9ycy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUltcGxlbWVudGVkIFdNX05DSElUVEVTVCBtZXNzYWdlIHNlbmRpbmcsIGFuZCBub24tY2xpZW50Cgltb3VzZSBtZXNzYWdlcy4KCUNsZWFuZWQgdXAgZG91YmxlLWNsaWNrIGhhbmRsaW5nLCBhbmQgcmVtb3ZlZCB0aGUgWHQgY29kZS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSAgKE5ldyBmaWxlKQoJSW1wbGVtZW50ZWQgQWRqdXN0V2luZG93UmVjdCgpLgoJSW1wbGVtZW50ZWQgV01fTkNDQUxDU0laRSwgV01fTkNISVRURVNUIGFuZCBXTV9OQ1BBSU5UIGhhbmRsaW5nLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUFkZGVkIHNlbmRpbmcgb2YgdGhlIFdNX05DUEFJTlQgbWVzc2FnZSBpbiBCZWdpblBhaW50KCkuCgoJKiBbd2luZG93cy9zeXNtZXRyaWNzLmNdIFtpbmNsdWRlL3N5c21ldHJpY3MuaF0gIChOZXcgZmlsZXMpCglJbXBsZW1lbnRlZCBzeXN0ZW0gbWV0cmljcy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQnVnIGZpeCBpbiBzZXR0aW5nIHRoZSBwYXJlbnQgYW5kIG93bmVyIGluIENyZWF0ZVdpbmRvdygpLgoJUmVtb3ZlZCB0aGUgWHQgY29kZS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQWRkZWQgc2VuZGluZyBvZiB0aGUgV01fTkNQQUlOVCBtZXNzYWdlIGluIFNldFdpbmRvd1BvcygpLgoJUmVtb3ZlZCB0aGUgWHQgY29kZS4KClN1biBKYW4gIDIgMTI6Mzg6NTMgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCUltcGxlbWVudGVkIEdldENsYXNzTmFtZSBhbmQgR2V0Q2xhc3NJbmZvLgoKCSogW3dpbmRvd3MvY2FyZXQuY10KCVZhcmlvdXMgaW1wcm92ZW1lbnRzIHRvIHRleHQgY2FyZXQgY29kZS4KCkZyaSBEZWMgMzEgMTU6MjI6MjIgMTk5MyAgSm9obiBCcmV6YWsgPGJyZXpha0BhcG9sbG8uaHAuY29tPgoKCSogW21pc2MvY29tbS5jXQoJUGF0Y2hlcyB0byB3b3JrIHdpdGggTmV0QlNELgoKVGh1IERlYyAzMCAxMjoxMTo1NSAxOTkzICBKb2huIFJpY2hhcmRzb24gPGpyaWNoYXJkQGNzLnVtbC5lZHU+CgoJKiBbb2JqZWN0cy9iaXRibHQuY10gQWRkZWQgU3RyZXRjaEJsdCgpLgoKVHVlIEphbiAgNCAwNToyMjowNyAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbbWlzYy91c2VyLmNdCglBZGRlZCBjcmVhdGlvbiBvZiBzeXN0ZW0gbWVzc2FnZSBxdWV1ZS4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXSBbb2JqZWN0cy9kY3ZhbHVlcy5jXSBbd2luZG93cy9kYy5jXQoJQWRkZWQgREMgc2l6ZSBmaWVsZHMgaW50byBEQyBzdHJ1Y3R1cmUuCQkKCgkqIFtvYmplY3RzL2NsaXBwaW5nLmNdCglCdWcgZml4IGluIENMSVBQSU5HX0ludGVyc2VjdFJlY3QoKS4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglBbGxvY2F0ZSBhIERDRSBpbnN0ZWFkIG9mIGEgREMgZm9yIENTX0NMQVNTREMgY2xhc3Nlcy4KCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdCglGaXhlZCBHZXRVcGRhdGVSZWN0KCkgYW5kIEdldFVwZGF0ZVJnbigpIHRvIGNsaXAgdG8gdGhlIGNsaWVudCBhcmVhLgoKCSogW3dpbmRvd3MvZGNlLmNdCglJbXBsZW1lbnRlZCBHZXREQ0V4KCkgYW5kIEdldFdpbmRvd0RDKCkuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUltcGxlbWVudGVkIFdNX1dJTkRPV1BPU0NIQU5HRUQgaGFuZGxpbmcuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJUHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgWGxpYiBldmVudCBoYW5kbGluZyBpbnN0ZWFkIG9mIFh0IGNhbGxiYWNrcy4KCUNoYW5nZWQgTVNHX0FkZE1zZygpIGNhbGxzIHRvIGhhcmR3YXJlX2V2ZW50KCkgb3IgUG9zdE1lc3NhZ2UoKS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCVByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIG11bHRpcGxlIG1lc3NhZ2UgcXVldWVzLgoJSW1wbGVtZW50ZWQgaGFyZHdhcmVfZXZlbnQoKSB0byBzdG9yZSBtZXNzYWdlcyBpbnRvIHRoZSBzeXN0ZW0gcXVldWUuCglJbXBsZW1lbnRlZCBHZXQvU2V0VGFza1F1ZXVlKCkuCglCZXR0ZXIgV01fUEFJTlQgYW5kIFdNX1RJTUVSIGhhbmRsaW5nLgoJQ2hhbmdlcyB0byB1c2UgWGxpYiBpbnN0ZWFkIG9mIFh0IGZvciBldmVudHMuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJVXNlIEdldERDRXgoKSB0byByZXRyaWV2ZSB0aGUgREMsIHRvIGdldCBhIGNvcnJlY3QgdmlzaWJsZSByZWdpb24uCgoJKiBbd2luZG93cy90aW1lci5jXQoJTW92ZWQgdGhlIHRpbWVyIHByb2NlZHVyZSBjYWxsYmFjayBpbnRvIERpc3BhdGNoTWVzc2FnZSgpLgoJQ2hhbmdlZCBpbXBsZW1lbnRhdGlvbiB0byBnZXQgcmlkIG9mIFh0IHRpbWVvdXRzLiAgVGltZXIgY2hlY2tpbmcKCWlzIG5vdyBkb25lIGluc2lkZSBHZXRNZXNzYWdlKCkuCgoJKiBbd2luZG93cy93aW4uY10KCUFsbG9jYXRlIGEgRENFIGluc3RlYWQgb2YgYSBEQyBmb3IgQ1NfT1dOREMgd2luZG93cy4KCVJlcGxhY2VkIFh0IGNhbGxzIHdpdGggWGxpYiBjYWxscy4KCU1vdmVkIHdpbmRvdyBwb3NpdGlvbmluZyBmdW5jdGlvbnMgaW50byB3aW5kb3dzL3dpbnBvcy5jCgoJKiBbd2luZG93cy93aW5wb3MuY10gIChOZXcgZmlsZSkKCVJld3JpdHRlbiBtb3N0IG9mIHRoZSB3aW5kb3cgcG9zaXRpb25pbmcgZnVuY3Rpb25zLgoJSW1wbGVtZW50ZWQgU2V0V2luZG93UG9zKCkgYW5kIE1hcFdpbmRvd1BvaW50cygpLgoKSmFuIDMsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtpZjE2MzIvdXNlci5zcGVjXQoJQmFkIGFyZ3VtZW50cyBkZXNjcmlwdGlvbiBmb3IgZnVuY3Rpb24gU2V0RGxnSXRlbVRleHQuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglGdW5jdGlvbiBEcmF3VGV4dCBub3cgaGFuZGxlIERUX0NBTENSRUNUIHJlcXVlc3QuCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglNZXNzYWdlIGJveGVzIG5vdyB1c2UgRHJhd1RleHQgd2l0aCBEVF9DQUxDUkVDVC4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglCdWcgZml4IGluIGZ1bmN0aW9uIEZyYW1lUmVjdCwgKGl0IHdhcyB1c2luZyBQRU4gaW5zdGVhZCBvZiBCUlVTSCkuCgoJKiBbd2luZG93cy93aW4uY10KCUJ1ZyBmaXggZm9yIGZsYWdzIGluIGZ1bmN0aW9uIFNob3dXaW5kb3cuCglNb3JlIGFjY3VyYXRlIFdNX1NJWkUgZ2VuZXJhdGVkIGJ5IGZ1bmN0aW9uIFNob3dXaW5kb3cuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTW9yZSBjb2RlIGZvciBMQlNfTVVMVElQTEVTRUwuCglNb3JlIGNvZGUgZm9yIExCU19NVUxUSUNPTFVNTi4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUJhZCBkZWZpbmUgZm9yIE1GX1NFUEFSQVRPUi4KCgkqIFtjb250cm9scy9tZW51LmNdCglOZXcgZnVuY3Rpb25zOiBQb3BNZW51V25kUHJvYygpIHdpdGggJ2dsdWVzJywKCUNyZWF0ZVBvcHVwTWVudSgpLCBBcHBlbmRNZW51KCksIEluc2VydE1lbnUoKSwgUmVtb3ZlTWVudSgpLCAKCURlbGV0ZU1lbnUoKSwgTW9kaWZ5TWVudSgpLCBUcmFja1BvcHVwTWVudSgpLgoJQ29kZSBpbiBzdHViczogQ3JlYXRlTWVudSgpLCBEZXN0cm95TWVudSgpLiAKClNhdCBKYW4gIDEgMTA6MjI6NDMgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIGxvYWRlci93aW5lLmM6IEFkZGVkIHN1cHBvcnQgZm9yIHJlbG9jYXRpb24gdHlwZXMgNSBhbmQgNi4KCk1vbiBEZWMgMjcgMTE6MDY6MDMgMTk5MyAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFttaXNjL2NvbW0uY10KCW5ldyBmdW5jdGlvbnM6IEJ1aWxkQ29tbURDQigpLCBPcGVuQ29tbSgpLCBDbG9zZUNvbW0oKSwKCVNldENvbW1CcmVhaygpLCBDbGVhckNvbW1CcmVhaygpLCBFc2NhcGVDb21tRnVuY3Rpb24oKSwgRmx1c2hDb21tKCksCglHZXRDb21tRXJyb3IoKSwgU2V0Q29tbUV2ZW50TWFzaygpLCBHZXRDb21tRXZlbnRNYXNrKCksCglTZXRDb21tU3RhdGUoKSwgR2V0Q29tbVN0YXRlKCksIFRyYW5zbWl0Q29tbUNoYXIoKSwgUmVhZENvbW0oKSwgCglXcml0ZUNvbW0oKS4KCldlZCBEZWMgMjIgMTM6MDA6MTUgMTk5MyAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW3dpbmRvd3MvY2FyZXQuY10KCUltcGxlbWVudGVkIHRleHQgY2FyZXQgZnVuY3Rpb25zLgoKVHVlIERlYyAyMSAwNjoxMzo1OCAxOTkzICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbbG9hZGVyL3dpbmUuY10KCUJ1ZyBmaXggaW4gTG9hZEltYWdlKCkuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10gW29iamVjdHMvY2xpcHBpbmcuY10gW29iamVjdHMvdGV4dC5jXQoJICBbd2luZG93cy9kYy5jXSBbd2luZG93cy9kY2UuY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10KCU1vZGlmaWVkIGdyYXBoaWNzIGNhbGxzIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBEQyBvcmlnaW4uCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUFkZGVkIHByZWxpbWluYXJ5IFdNX05DQ0FMQ1NJWkUgaGFuZGxpbmcuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJU2VuZCBXTV9OQ0NBTENTSVpFIG1lc3NhZ2Ugb24gcmVzaXplIGV2ZW50LgoKCSogW3dpbmRvd3Mvd2luLmNdCglTZW5kIFdNX05DQ0FMQ1NJWkUgbWVzc2FnZSBpbiBDcmVhdGVXaW5kb3coKS4KCVJlYWxpemUgd2lkZ2V0cyBhdCBjcmVhdGlvbiB0aW1lIChzaG91bGQgcHJldmVudCBwcm9ibGVtcyB3aXRoCgl1bnJlYWxpemVkIHdpZGdldHMpLgoKRGVjIDE5LCA5MyBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglTZW5kIG1vdXNlICYga2V5Ym9hcmQgbWVzc2FnZSByZWNlaXZlZCB0byBpdHMgcGFyZW50LgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJU2VuZCBrZXlib2FyZCBtZXNzYWdlIHJlY2VpdmVkIHRvIGl0cyBwYXJlbnQuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJQWRkIE5hdmlnYXRpb24ga2V5cyAuCglMaXN0Qm94IG5vdyB1c2UgVlNDUk9MTCAmIEhTQ1JPTEwgaW5zdGVhZCBvZiBjaGlsZHJlbi4KCUFscGhhIHZlcnNpb24gb2YgTEJTX01VTFRJUExFU0VMLgoJQWxwaGEgdmVyc2lvbiBvZiBMQlNfTVVMVElDT0xVTU4uCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUFkZCBOYXZpZ2F0aW9uIGtleXMgb24gY2xvc2VkIENvbWJvQm94LgoJUmVtb3ZlIHVzZWxlc3MgJ0NPTUJPQk9YX0NyZWF0ZUNvbWJvQm94JyBmdW5jdGlvbi4KCk1vbiBEZWMgMTkgMjA6Mzk6MzQgMTk5MyAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtsb2FkZXIvd2luZS4KCUxvYWRJbWFnZSgpIG1vZGlmaWVkIHRvIHVzZSBGaW5kRmlsZSgpLgoKCSogW21pc2MvZmlsZS5jXQoJU2V0RXJyb3JNb2RlIGFkZGVkCgoJKiBbbWlzYy9kb3NfZnMuY10KCWJ1ZyBmaXhlcy4KCkRlYyAxMywgOTMgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW21lbW9yeS9nbG9iYWwuY10KCWJ1ZyBmaXggaW4gR2xvYmFsR2V0RnJlZVNlZ21lbnQgOiBnb29kIHB0ciBpbiAnZ19wcmV2Jy4KCgkqIFtzeXNyZXMuZGxsXQoJcHJlbGltaW5hcnkgdmVyc2lvbiBvZiBhICdnbGFzcyBvZiB3aW5lJyBiaXRtYXAKCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglOZXcgZnVuY3Rpb24gJ0dldENhcHR1cmUnLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJUmVtb3ZlIHVzZWxlc3MgJ1NDUk9MTEJBUl9DcmVhdGVTY3JvbGxCYXInIGZ1bmN0aW9uLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCVJlbW92ZSB1c2VsZXNzICdMSVNUQk9YX0NyZWF0ZUxpc3RCb3gnIGZ1bmN0aW9uLgoKTW9uIERlYyAxMyAxMzo1MTowMCAxOTkzICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbb2JqZWN0cy9mb250LmNdCglDb3JyZWN0ZWQgYnVncyBpbiBHZXRDaGFyV2lkdGgoKS4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglNb2RpZmllZCBFVkVOVF9rZXkgdG8gc2VuZCBXaW5kb3dzIHZpcnR1YWwga2V5IGNvZGVzIGZvcgoJV01fS0VZRE9XTiBhbmQgV01fS0VZVVAgbWVzc2FnZXMsIGFuZCBhIFdNX0NIQVIgbWVzc2FnZQoJZm9yIHByaW50YWJsZSBjaGFyYWN0ZXJzLgoKV2VkIERlYyAwOCAxOToyMDowMCAxOTkzICBLYXJsIEd1ZW50ZXIgV3VlbnNjaCAoaG4zMjR3dUB1bmlkdWkudW5pLWR1aXNidXJnLmRlKQoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUFkZGVkIFBvbHlsaW5lIGFuZCBQb2x5Z29uCgpNb24gRGVjIDEzIDE0OjUxOjU0IDE5OTMgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTGlzdEJveERpcmVjdG9yeSgpIG1vZGlmaWVkIHRvIHVzZSBkb3NfZnMuYydzIGZ1bmN0aW9ucyB0bwoJYWNjZXNzIGZpbGVzJnxkcml2ZXMuCgpTYXQgRGVjIDA0IDE3OjA0OjIzIDE5OTMgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgogICAgICAgCSogW21pc2MvZG9zX2ZzLmNdCiAgICAgICAJQWRkZWQgRmluZEZpbGUoKSB0byBzZWFyY2ggYSBmaWxlIGluIGEgZG9zL3VuaXggc3R5bGUgcGF0aC4KCQoJKiBbbWlzYy9maWxlLmNdCglOZXcgV2luMzEgZnVuY3Rpb25zOiBPcGVuRmlsZSwgX2xjcmVhdGUsIF9sbHNlZWssIEdldFRlbXBEcml2ZSwKCUdldFRlbXBGaWxlTmFtZSwgR2V0V2luZG93c0RpcmVjdG9yeSwgR2V0U3lzdGVtRGlyZWN0b3J5LAoJR2V0RHJpdmVUeXBlLgkJCSAgIAoKICAgICAgIAkqIFttaXNjL2ludDIxLmNdCiAgICAgICAJTW9kaWZpZWQuCgpXZWQgRGVjICAxIDE2OjIwOjQ1IDE5OTMgIE1pZ3VlbCBkZSBJY2F6YSAgKG1pZ3VlbEByb3hhbm5lLm51Y2xlY3UudW5hbS5teCkKCiAgICAgICAgKiBbbWlzYy9wcm9maWxlLmNdCiAgICAgICAgVGhlIFByb2ZpbGUgZnVuY3Rpb25zIG5vdyByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWVzLiBUaGV5IG5vdwogICAgICAgIGltcGxlbWVudCBhbGwgdGhlIGZlYXR1cmVzIGRlc2NyaWJlZCBpbiB0aGUgU0RLLgoKVHVlIE5vdiAzMCAxMzo1NToyNyAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBhbXNjb25zKQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJUmV3cm90ZSBzZWxlY3RvciBhbGlhc2luZyByb3V0aW5lcyB0byB1c2UgU3lzdGVtIFYgSVBDCglyb3V0aW5lIHRvIGFsaWFzIG1lbW9yeSBzZWdtZW50cy4KCk5vdiAyOCwgOTMgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU1vcmUgY29uc2lzdGVuY3kgaW4gZnVuY3Rpb25zIHVzaW5nIHdJbmRleGVzCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglOZXcgZnVuY3Rpb24gOiBTaG93U2Nyb2xsQmFyKCkuCgoJKiBbbG9hZGVyL2N1cnNvci5jXSAuLi4gTmV3IGZpbGUKCU1vdmUgY3Vyc29yIGZ1bmN0aW9ucyBmcm9tIFtsb2FkZXIvcmVzb3VyY2UuY10uCglOZXcgZnVuY3Rpb24gOiBDbGlwQ3Vyc29yKCkuCglOZXcgZnVuY3Rpb24gOiBHZXRDbGlwQ3Vyc29yKCkuCglOZXcgZnVuY3Rpb24gOiBDcmVhdGVDdXJzb3IoKS4KCVNldEN1cnNvcigpIG5vdyB3b3JraW5nIHVzaW5nIGdsb2FiYWwgdmFyaWFibGUgJ3dpbkhhc0N1cnNvcicuCgoJKltvYmplY3QvcGFsZXR0ZS5jXQoJTmV3IHN0dWIgb25seSA6IFNlbGVjdFBhbGV0dGUoKS4KCU5ldyBzdHViIG9ubHkgOiBSZWFsaXplUGFsZXR0ZSgpLgoKCSpbd2luL2V2ZW50LmNdCglOZXcgZnVuY3Rpb24gOiBFVkVOVF9lbnRlcl9ub3RpZnkoKSwKCQl1cGRhdGUgJ3dpbkhhc0N1cnNvcicgYW5kIHNlbmQgV01fU0VUQ1VSU09SLgoKCSpbd2luL2RlZnduZC5jXQoJQWRkIHByb2Nlc3Npbmcgb2YgV01fU0VUQ1VSU09SIG1lc3NhZ2UuCgoJKlt3aW4vd2luLmNdCglOZXcgbWVtYmVycyBpbiBXTkQgc3RydWN0dXJlIDogaEN1cnNvciwgaFduZFZTY3JvbGwgJiBoV25kSFNjcm9sbC4gCglDcmVhdGVXaW5kb3dFeCgpIG5vdyBjcmVhdGUgY2hpbGRyZW4gZm9yIFdNX0hTQ1JPTEwgJiBXTV9WU0NST0xMLgoJTmV3IGZ1bmN0aW9uIENsaWVudFRvU2NyZWVuKCkuCglOZXcgZnVuY3Rpb24gU2NyZWVuVG9DbGllbnQoKS4KCk1vbiBOb3YgMjUgMTg6MjU6NDAgMTk5MyAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCiAgICAgICAJKiBbZmlsZXMuaCAvIHJlZ2Z1bmMuaCAvIG1pc2MvZG9zLmNdCiAgICAgICAJUmVtb3ZlZC4KCiAgICAgICAJKiBbbWlzYy9kb3NfZnMuY10KICAgICAgIAlBZGRlZCBzdXBwb3J0IGZvciBsb2FkaW5nIGRvc2RyaXZlIGNmZyBmcm9tIHdpbmUuaW5pLgoKICAgICAgIAkqIFttaXNjL2ludDIxLmNdCiAgICAgICAJTW9kaWZpZWQuCgoKV2VkIE5vdiAyNCAxMTozNzozMyAxOTkzICBqdWxsaWFyZEBkaXN1bnMyLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtpbmNsdWRlL2F0b20uaF0gW21lbW9yeS9hdG9tLmNdCglJbXBsZW1lbnRlZCBhdG9tcy4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglNb2RpZmllZCBSZWdpc3RlckNsYXNzKCkgdG8gdXNlIGF0b21zLgoJSW1wbGVtZW50ZWQgQ1NfR0xPQkFMQ0xBU1Mgc3R5bGUuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglJbXBsZW1lbnRlZCBSZWdpc3RlcldpbmRvd01lc3NhZ2UoKS4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUJ1ZyBmaXggaW4gTG9hZFJlc291cmNlKCkuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCU1vZGlmaWVkIENyZWF0ZURpYWxvZ1BhcmFtKCkgdG8gdXNlIEZpbmQvTG9hZFJlc291cmNlKCkuCgpNb24gTm92IDIyIDEzOjU4OjU2IDE5OTMgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCiAgICAgICAgKiBbd2luZG93cy9zY3JvbGwuY10KCVByZWxpbWluYXJ5IGltcGxlbWVudGF0aW9ucyBvZiBTY3JvbGxXaW5kb3csIFNjcm9sbERDIGFuZAogICAgICAgIFNjcm9sbFdpbmRvd0V4LgoKTm92IDIxLCA5MyBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJT3B0aW1pemF0aW9uIG9mIHJlZHJhdyBkdXJpbmcgJ0FkZCcgb3IgJ0luc2VydCcuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglPcHRpbWl6YXRpb24gb2YgV01fUEFJTlQgZHVyaW5nICd0aHVtYnRyYWNraW5nJy4KCgkqIFtjb250cm9scy9idXR0b24uY10KCUFkZCBvZiBiZXRhIGltcGxlbWVudCBvZiAnQlNfT1dORVJEUkFXJwoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJU3R5bGUgJ1NTX0lDT04nIG5ldyBzdXBwb3J0ZWQuCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglCZWdpbiBvZiBpbXBsZW1hbnRhdGlvbiBvZiBNQl9YWFggc3R5bGVzLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJRnVuY3Rpb24gTG9hZEljb24oKSA6IG5vdyBwcmVwYXJlIHRyYW5zcGFyZW5jeSBCaXRtYXAgbWFzay4KCUZ1bmN0aW9uIExvYWRDdXJzb3IoKSA6IG5vdyBwcmVwYXJlIGEgJ1ggcGl4bWFwY3Vyc29yJy4KCU5ldyBmdW5jdGlvbiBTZXRDdXJzb3IoKSA6IG5vdCBmaW5pc2hlZC4KCU5ldyBmdW5jdGlvbiBTaG93Q3Vyc29yKCkgOiBub3QgZmluaXNoZWQuCglOZXcgZnVuY3Rpb24gQWNjZXNzUmVzb3VyY2UoKSA6IHN0dWIuCgoJKiBbb2JqL2RpYi5jXQoJRnVuY3Rpb24gRHJhd0ljb24oKTogZGV1Z2dpbmcgcGhhc2Ugb2YgaWNvbiB0cmFuc3BhcmVuY3kgbWFzay4KCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJbmV3IGZpbGUgZm9yIG5ld3MgZnVuY3Rpb25zIExvYWRMaWJyYXJ5KCkgJiBGcmVlTGlicmFyeSgpLgoKCSogW3N5c3Jlcy5kbGxdCglSZXNvdXJjZXMgb25seSAxNmJpdHMgRExMIGZvciBTeXN0ZW0gUmVzb3VyY2VzLCBpY29ucywgZXRjLi4uCgpTdW4gTm92IDE0IDE0OjM5OjA2IDE5OTMgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtpbmNsdWRlL2RpYWxvZy5oXSBbd2luZG93cy9kaWFsb2cuY10KCVNpbXBsaWZpZWQgZGlhbG9nIHRlbXBsYXRlIHBhcnNpbmcuCglJbXBsZW1lbnRlZCBEaWFsb2dCb3hJbmRpcmVjdCgpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglGaXhlZCBidWcgaW4gQ3JlYXRlV2luZG93KCkgd2hlbiBhYm9ydGluZyB3aW5kb3cgY3JlYXRpb24uCglNb2RpZmllZCBVcGRhdGVXaW5kb3coKSB0byBvbmx5IHVwZGF0ZSB2aXNpYmxlIHdpbmRvd3MuCglJbXBsZW1lbnRlZCBJc1dpbmRvdygpLgoKTm92IDE0LCA5MyBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTGlzdGJveCBjb250cm9sIHdpbmRvdyA6IG5ldyBtZXNzYWdlcy4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQ29tYm8gYm94IGNvbnRyb2wgd2luZG93IDogbmV3IG1lc3NhZ2VzLgoKCSogW21pc2MvbWVzc2FnZS5jXQoJTW92ZWQgc3R1YiBNZXNzYWdlQm94KCkgdG8gdGhpcyBuZXcgZmlsZS4KCUltcGxlbWVudGVkIG9mIGEgY2FsbGJhY2ssIG5vdyBNZXNzYWdlQm94IHNob3cgYSB3aW5kb3cuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglOZXcgZnVuY3Rpb24gRGVzdHJveUljb24oKQoJTmV3IGZ1bmN0aW9uIERlc3Ryb3lDdXJzb3IoKQoJRmlsbGVkIHN0dWIgTG9hZEljb24oKQoJRmlsbGVkIHN0dWIgTG9hZEN1cnNvcigpCglCdWcgZml4ZWQgaW4gRmluZFJlc291cmNlQnlOYW1lKCkgOiBtaXNzaW5nIGxzZWVrKCkuCgoJKiBbb2JqL2RpYi5jXQoJTmV3IGZ1bmN0aW9uIERyYXdJY29uKCkKCgkqIFt3aW5kb3dzL3dpbi5jXQoJTmV3IGZ1bmN0aW9uIENsb3NlV2luZG93KCkKCU5ldyBmdW5jdGlvbiBPcGVuSWNvbigpCglOZXcgZnVuY3Rpb24gSXNJY29uaWMoKQoJTmV3IEZ1bmN0aW9uIEZpbmRXaW5kb3coKQoKU3VuIE5vdiAxNCAwODoyNzoxOSAxOTkzICBLYXJsIEd1ZW50ZXIgV3VlbnNjaCAoaHoyMjV3dUB1bmlkdWkudW5pLWR1aXNidXJnLmRlKQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJV3JvdGUgQWxsb2NDU3RvRFNBbGlhcygpIGFuZCBBbGxvY0RTdG9DU0FsaWFzKCkKClN1biBOb3YgMTQgMDg6Mjc6MTkgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgYW1zY29ucykKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCVdyb3RlIEFsbG9jU2VsZWN0b3IoKSBhbmQgUHJlc3RvQ2hhbmdvU2VsZWN0b3IoKS4gIFlVSyEKClNhdCBOb3YgMTMgMTM6NTY6NDIgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgYW1zY29ucykKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCVdyb3RlIEZpbmRSZXNvdXJjZSgpLCBMb2FkUmVzb3VyY2UoKSwgTG9ja1Jlc291cmNlKCksCglhbmQgRnJlZVJlc291cmNlKCkKCgkqIFtpbmNsdWRlL3NlZ21lbS5oXSBbbG9hZGVyL3NlbGVjdG9yLmNdIFtsb2FkZXIvc2lnbmFsLmhdCglDaGFuZ2VkIHNlbGVjdG9yIGFsbG9jYXRpb24gbWV0aG9kLgoKU3VuIE5vdiAxMCAwODoyNzoxOSAxOTkzICBLYXJsIEd1ZW50ZXIgV3VlbnNjaCAoaHoyMjV3dUB1bmlkdWkudW5pLWR1aXNidXJnLmRlKQoKCSogW2lmMTYzMi9jYWxsYmFjay5jIGlmMTYzMi9jYWxsLlMgaWYxNjMyL3VzZXIuc3BlY10gCglhZGRlZCBDYXRjaCAoS0VSTkVMLjU1KSBhbmQgVGhyb3cgKEtFUk5FTC41NikKCQpOb3YgNywgOTMgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJU2Nyb2xsIGJhciBjb250cm9sIHdpbmRvdwoJCUJ1ZyByZXNvbHZlZCA6IFBhaW50aW5nIG1lc3NhZ2UgYmVmb3JlIHNjcm9sbCB2aXNpYmxlLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUxpc3Rib3ggY29udHJvbCB3aW5kb3cKCQlEZXN0cm95IGNsZWFudXAuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUNvbWJvIGJveCBjb250cm9sIHdpbmRvdwoJCURlc3Ryb3kgY2xlYW51cC4KCgkqIFtjb250cm9scy9idXR0b24uY10KCQlHZXRDaGVjayBNZXNzYWdlIG5vdyByZXR1cm4gaXMgc3RhdGUuCgoJKiBbd2luZG93cy93aW4uY10KCU5ldyBmdW5jdGlvbiBJc1dpbmRvd1Zpc2libGUoKQoKTW9uIE5vdiAgMSAxNDo0MDoyMSAxOTkzICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCVJlbW92ZWQgc29tZSBkdXBsaWNhdGUgZW50cmllcy4KCgkqIFtpbmNsdWRlL2RpYWxvZy5oXSBbd2luZG93cy9kaWFsb2cuY10KCUltcGxlbWVudGVkIGRpYWxvZyB1bml0cyBhbmQgZm9udHMuCglBZGRlZCBwcmVsaW1pbmFyeSBsb2FkaW5nIG9mIGRpYWxvZyByZXNvdXJjZXMuCglQcmVsaW1pbmFyeSBpbXBsZW1lbnRhdGlvbiBvZiBEaWFsb2dCb3goKS4KCUltcGxlbWVudGVkIEdldC9TZXREbGdJdGVtKiBmdW5jdGlvbnMuCgoJKiBbd2luZG93cy93aW4uY10KCUltcGxlbWVudGVkIFdNX1BBUkVOVE5PVElGWSBtZXNzYWdlLgoJSW1wbGVtZW50ZWQgQ3JlYXRlV2luZG93RXgoKSBhbmQgR2V0V2luZG93KCkuCglDb21wbGV0ZWQgRGVzdHJveVdpbmRvdygpLgoKTW9uIE5vdiAgMSAxODoxOTozNCAxOTkzICBFcmlrIEJvcwoKCSogW2xvYWRlci9zaWduYWwuY10KCUFkZGVkIHN1cHBvcnQgZm9yIGludCAweDExICYgMHgxMi4KCiAgICAgICAgKiBbbG9hZGVyL2ludDIxLmNdCglJbXByb3ZlZCBmdW5jdGlvbiBoYW5kbGluZy4KClN1biBPY3QgMzEgMTI6Mzg6MDkgMTk5MyAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW29iamVjdHMvZm9udC5jXQoJSW1wbGVtZW50ZWQgR2V0Q2hhcldpZHRoKCkuCgpXZWQgT2N0IDI3IDA5OjU2OjA2IDE5OTMgIEpvaG4gQnJlemFrIDxicmV6YWtAY2guaHAuY29tPgoKCSogW01ha2VmaWxlXQogICAgICAgIFVzZSBHTlUgbWFsbG9jLgoKCSogW2luY2x1ZGUvaW50MjEuaCBpbmNsdWRlL3dpbmUuaF0KICAgICAgICBDaGFuZ2Ugc2NfZWZsYWdzIHRvIHNjX2VmbCAuCgoJKiBbaW5jbHVkZS93aW5lLmhdCiAgICAgICAgRml4IG1pc3BsYWNlZCAjZW5kaWYKICAgICAgICBJbmNsdWRlIDxzaWduYWwuaD4gZm9yIE5ldEJTRAoKCSogW2xvYWRlci9pbnQyMS5jXQogICAgICAgIERvbid0IGluY2x1ZGUgPHN5cy92ZnMuaD4gaW4gTmV0QlNECiAgICAgICAgRG8gaW5jbHVkZSA8c3lzL21vdW50Lmg+IGluIE5ldEJTRAogICAgICAgIENsZWFudXAgc29tZSBsaW50LgoKTW9uIE9jdCAyNiAxNzo1OTowMSAxOTkzICBFcmlrIEJvcwoKICAgICAgICAqIFtpbmNsdWRlL2ludDIxLmhdCiAgICAgICAgQWRkZWQuCgogICAgICAgICogW2xvYWRlci9pbnQyMS5jXQogICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIG1hbnkgZG9zIGludHMuCgogICAgICAgICogW21pc2MvZmlsZS5jXSBbaW5jbHVkZS9maWxlcy5oXQogICAgICAgIE1vdmVkIE9QRU5fTUFYIGFuZCBEb3NEcml2ZVN0cnVjdCB0byBmaWxlcy5oLgoKU3VuIE9jdCAyNCAxMzozNjo1MCAxOTkzICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglJbXBsZW1lbnRlZCBDSEVDS0JPWCwgQVVUT0NIRUNLQk9YLCAzU1RBVEUsIEFVVE8zU1RBVEUsCglSQURJT0JVVFRPTiwgQVVUT1JBRElPQlVUVE9OLCBHUk9VUEJPWCBjb250cm9scywgdG9nZXRoZXIgd2l0aAoJYSBwcmVsaW1pbmFyeSBVU0VSQlVUVE9OIGNvbnRyb2wuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglDb3JyZWN0ZWQgYnVncyBpbiBURVhUX05leHRMaW5lKCkgYW5kIGFkZGVkIGhhbmRsaW5nIG9mIHByZWZpeAoJY2hhcmFjdGVyLgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJRGlzYWJsZWQgZm9jdXMgaGFuZGxpbmcgYnkgY29tbWVudGluZyBvdXQgU2V0Rm9jdXMoKSBjYWxscyB1bnRpbAoJc2VyaW91cyBidWcgY2FuIGJlIGZvdW5kLgoKT2N0ICAyMCwgOTMgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUxpc3Rib3ggY29udHJvbCB3aW5kb3cKCQlQYWludGluZyBjbGVhbnVwLCBuZXcgbWVzc2FnZXMgcHJvY2Vzc2VkLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJU2Nyb2xsIGJhciBjb250cm9sIHdpbmRvdwoJCVBhaW50aW5nIGNsZWFudXAuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUNvbWJvIGJveCBjb250cm9sIHdpbmRvdwoJCVBhaW50aW5nIGNsZWFudXAuCgpUdWUgT2N0IDEyIDE3OjUwOjExIDE5OTMgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtvYmplY3RzL2NvbG9yLmNdIFtvYmplY3RzL3BhbGV0dGUuY10gW3dpbmRvd3Mvc3lzY29sb3IuY10KCUJldHRlciBzdXBwb3J0IGZvciB0aGUgcHJpdmF0ZSBjb2xvciBtYXAuCglVc2luZyBhIHByaXZhdGUgbWFwIGlzIG5vdyB0aGUgZGVmYXVsdC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQnVnIGZpeC4KCgkqIFtpbmNsdWRlL2RpYWxvZy5oXSBbd2luZG93cy9kaWFsb2cuY10KCUltcGxlbWVudGVkIENyZWF0ZURpYWxvZyooKSBhbmQgSXNEaWFsb2dNZXNzYWdlKCkuCgoJKiBbbWlzYy94dC5jXSBbd2luZG93cy9kZWZ3bmQuY10KCU1vdmVkIERlZldpbmRvd1Byb2MoKSB0byBkZWZ3bmQuYy4KCUFkZGVkIFdNX05DQ1JFQVRFLCBXTV9OQ0RFU1RST1kgYW5kIFdNX0NUTENPTE9SIGhhbmRsaW5nLgoKCSogW3dpbmRvd3MvZGVmZGxnLmNdCglTdGFydGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBEZWZEbGdQcm9jKCkuCgoJKiBbd2luZG93cy93aW4uY10KCUFkZGVkIFdNX05DQ1JFQVRFIGFuZCBXTV9OQ0RFU1RST1kgbWVzc2FnZXMuCglJbXBsZW1lbnRlZCBJc0NoaWxkKCkuCgpUdWUgT2N0IDEyIDE3OjUwOjIwIDE5OTMgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFt3aW5kb3dzL2ZvY3VzLmNdCglJbXBsZW1lbnRlZCBHZXRGb2N1cygpIGFuZCBTZXRGb2N1cygpLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUFkZGVkIHByb2Nlc3Npbmcgb2YgRm9jdXNJbiBhbmQgRm9jdXNPdXQgZXZlbnRzLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUFkZGVkIERyYXdGb2N1c1JlY3QoKS4KClNhdCBPY3QgIDkgMTQ6MzY6NTcgMTk5MyAgRXJpayBCb3MKCgkqIFtsb2FkZXIvaW50MWEuY10KCUFkZGVkIG1vcmUgZnVuY3Rpb24gaGFuZGxpbmcuCgpXZWQgT2N0ICA2IDEyOjIxOjIyIDE5OTMgIEVyaWsgQm9zCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJU3BsaXQgc2lnbmFsLmMgaW50byBpbnQxYS5jLCBpbnQyMS5jIGFuZCBzaWduYWwuYy4KClR1ZSBPY3QgIDUgMjI6MTI6NDAgMTk5MyAgRGF2aWQgTWV0Y2FsZmUKCgkqIFtjb250cm9scy9zdGF0aWMuY10gW2NvbnRyb2wvd2lkZ2V0cy5jXQoJU3RhdGljIGNvbnRyb2wgY2xhc3MuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglBZGRlZCBwcm9jZXNzaW5nIG9mIGFkZGl0aW9uYWwgRFRfIGZsYWdzIHRvIERyYXdUZXh0KCkuCgoJKiBbd2luZG93cy93aW4uY10gW21pc2MveHQuY10KCUFkZGVkIFNldFdpbmRvd1RleHQoKSBhbmQgV01fU0VUVEVYVCBwcm9jZXNzaW5nLgoKVHVlIE9jdCAgNSAyMjoxMjo0MCAxOTkzICBNYXJ0aW4gQXlvdHRlCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTGlzdGJveCBjb250cm9sIHdpbmRvdwoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJU2Nyb2xsIGJhciBjb250cm9sIHdpbmRvdwoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglDb21ibyBib3ggY29udHJvbCB3aW5kb3cKCgkqIFtpbmNsdWRlL2NvbWJvLmhdCglDb21ibyBib3ggZGVmaW5pdGlvbnMKCgkqIFtpbmNsdWRlL2xpc3Rib3guaF0KCUxpc3Rib3ggZGVmaW5pdGlvbnMKCgkqIFtpbmNsdWRlL3Njcm9sbC5oXQoJU2Nyb2xsIGJhciBkZWZpbml0aW9ucwoKU2F0IE9jdCAgMiAwOTozNTo1NCAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJRml4ZWQgYnVnIGluIE1ha2VQcm9jSW5zdGFuY2UoKS4KCgkqIFtkZWJ1Z2dlci9pbmZvLmNdCglDaGFuZ2VkIHgvdyBhbmQgeC9iIHRvIGRpc3BsYXkgaW4gaGV4LgoKCSogW2RlYnVnZ2VyL2kzODYtcGluc24uY10KCUFkZGVkIGNvZGUgdG8gcHJvcGVybHkgdW5hc3NlbWJsZSAxNi1iaXQgaW5kZXhpbmcuCgpGcmkgT2N0ICAxIDA4OjI5OjA1IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbbG9hZGVyL2ZpbGVzLmNdIFttaXNjL3Byb2ZpbGUuY10KCVN5c3RlbSBpbml0aWFsaXphdGlvbiBmaWxlIGlzIG5vdyBjYWxsZWQgIndpbmUuaW5pIiBhbmQgY2FuCgliZSBsb2NhdGVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSwKCW9yIGFueSBkaXJlY3RvcmllcyBzcGVjaWZpZWQgaW4gdGhlIFdJTkVQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLgoKCSogW3Rvb2xzL2J1aWxkLmNdIFtpZjE2MzIvY2FsbC5TXSBbaW5jbHVkZS9yZWdmdW5jLmhdCglDaGFuZ2VkIHJlZ2lzdGVyIGZ1bmN0aW9uIHN0YWNrIHRvIG1hdGNoIHNpZ2NvbnRleHQgc3RydWN0dXJlLgoKVGh1IFNlcCAzMCAyMjozMDoyMSAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2xvYWRlci9maWxlcy5jXQoJQ3JlYXRlZCBmdW5jdGlvbiB0byBzZWFyY2ggYSBwYXRoIGZvciBmaWxlcyB0byBsb2FkLgoKCSogW2xvYWRlci93aW5lLmNdCglNb2RpZmllZCBleGUgYW5kIGRsbCBmaWxlIGxvYWRpbmcgdG8gc2VhcmNoIHRocm91Z2ggcGF0aAoJc3BlY2lmaWVkIGJ5IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBXSU5FUEFUSC4KClRodSBTZXAgMzAgMjI6MzA6MjEgMTk5MyAgRXJpYyBZb3VuZ2RhbGUKCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglCdWcgZml4LgoKVGh1IFNlcCAzMCAyMjozMDoyMSAxOTkzICBKb2huIEJyZXphawoKCSogW2RlYnVnZ2VyL2RiZy55XSBbZGVidWdnZXIvZGVidWcubF0gW2RlYnVnZ2VyL2R0ZXN0LmNdIAoJICBbZGVidWdnZXIvb2JzdGFjay5oXQoJVXBkYXRlcyB0byBhbGxvdyBkZWJ1Z2dlciB0byBmdW5jdGlvbiB1bmRlciBOZXRCU0QuCgpUdWUgU2VwIDI4IDE5OjU5OjIxIDE5OTMgIERhdmlkIE1ldGNhbGZlCgoJKiBbd2luZG93cy93aW4uY10KCUltcGxlbWVudGVkIHN1cHBvcnQgZm9yIHdpbmRvd3Mgd2l0aCBubyBib3JkZXJzLiAgQWRkZWQKIAlHZXRQYXJlbnQoKSwgR2V0RGxnQ3RybElEKCksIEdldFdpbmRvd1RleHQoKSBhbmQKCUdldFdpbmRvd1RleHRMZW5ndGgoKSBmdW5jdGlvbnMuCgoJKiBbbWlzYy94dC5jXQoJQWRkZWQgcHJvY2Vzc2luZyBvZiBXTV9HRVRURVhUIGFuZCBXTV9HRVRURVhUTEVOR1RIIG1lc3NhZ2VzCgl0byBEZWZXaW5kb3dQcm9jIGFuZCBJbXBsZW1lbnRlZCBNZXNzYWdlQmVlcCgpLgoKCSogW3dpbmRvd3Mvc3lzY29sb3IuY10KCUFkZGVkIHByZWxpbWluYXJ5IHN5c3RlbSBjb2xvciBzdXBwb3J0LgoKCSogW2NvbnRyb2xzL2J1dHRvbjEuY10KCU1vZHMgdG8gbmV3IGJ1dHRvbiBjb250cm9sIGFuZCBpbnRlZ3JhdGlvbiB3aXRoIFdpbmUuCgpUdWUgU2VwIDI4IDE5OjU5OjIxIDE5OTMgIEpvaGFubmVzIFJ1c2NoZWluc2tpCgoJKiBbY29udHJvbHMvYnV0dG9uMS5jXQoJTmV3IGJ1dHRvbiBjb250cm9sIHVzaW5nIEdESSBmdW5jdGlvbnMuCgkKVHVlIFNlcCAyOCAxOTo1OToyMSAxOTkzICBFcmljIFlvdW5nZGFsZQoKCSogW2RlYnVnZ2VyLypdCglBZGRlZCBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzIHRvIFdpbmUKClNhdCBTZXAgMjUgMTM6MjI6NTAgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAZGkuZXBmbC5jaCkKCgkqIFtvYmplY3RzL3JlZ2lvbi5jXQoJQnVnIGZpeAoKRnJpIFNlcCAyNCAwNzozNToxMSAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW3Rvb2xzL2J1aWxkLmNdCglDaGFuZ2VkIHRoZSBlbnRyeSBwb2ludCBjb2RlIHRvIHJlZHVjZSB0aGUgc3RhbmRhcmQgZW50cnkKCXBvaW50IHNpemUgZnJvbSAyMiBieXRlcyB0byAxMCBieXRlcy4gIFRoaXMgbGVhdmVzIGFib3V0Cgk0MDAwIGZyZWUgZW50cnkgcG9pbnRzIGluc3RlYWQgb2YgdGhlIDgwMCBpbiB2ZXJzaW9uIDAuNC4yLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJUmV3cm90ZSBmdW5jdGlvbnMgdG8gYWxsb3cgbG9hZGluZyBvZiByZXNvdXJjZXMgZnJvbSBhbnkKCURMTC4KCgkqIFtsb2FkZXIvd2luZS5jXSBbaW5jbHVkZS93aW5lLmhdCglBZGRlZCBmdW5jdGlvbnMgR2V0RmlsZW5hbWVGcm9tSW5zdGFuY2UoKSBhbmQgR2V0RmlsZUluZm8oKQoJdG8gc2VhcmNoIGZvciBhIGxvYWRlZCBmaWxlIGJhc2VkIG9uIGl0cyBpbnN0YW5jZSBoYW5kbGUuCglBZGRlZCBhIGZpZWxkIGluIHN0cnVjdCB3X2ZpbGVzIHRvIG1ha2Ugc2VhcmNoaW5nIGJ5IGFuIGluc3RhbmNlCgloYW5kbGUgZmFzdGVyLgoKVHVlIFNlcCAyMSAwOTo1NzowMSAxOTkzICBtaWd1ZWxAcm94YW5uZS5udWNsZWN1LnVuYW0ubXggKE1pZ3VlbCBkZSBJY2F6YSkKCgkqIFttaXNjL3Byb2ZpbGUuY10KCUltcGxlbWVudGF0aW9uIG9mIC5JTkkgZmlsZSBoYW5kbGluZwoKTW9uIFNlcCAyMCAxMDo1NDozMiAxOTkzICBEYXZpZCBNZXRjYWxmZQoKCSogW21pc2MvcHJvZmlsZS5jLm9sZF0KCUltcGxlbWVudGF0aW9uIG9mIC5JTkkgZmlsZSBoYW5kbGluZwoKTW9uIFNlcCAyMCAxMDo1NDozMiAxOTkzICBKb2huIEJyZXphawoKCSogW2NvbnRyb2xzL1dpbkJ1dHRvbi5jXQoJQnVnIGZpeCB3aXRoIGNhbGwgdG8gWHRWYVNldFZhbHVlcy4KCk1vbiBTZXAgMjAgMTA6NTQ6MzIgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbd2luZG93cy93aW4uY10KCVF1aWNrIHBhdGNoIHRvIGdldCBjb2xvcm1hcHMgdG8gd29yayB3aXRoIGJ1dHRvbiB3aWRnZXQuCgpNb24gU2VwIDIwIDAyOjQyOjU0IDE5OTMgICAgKHluZ3ZpQGhhZnJvLmlzKQoKCSogbWlzYy9rZXlib2FyZC5jOiAKCUlmZGVmZWQgb3V0IHNvbWUgYm9ndXMgQW5zaTwtPk9lbSBjb252ZXJzaW9uIGZ1bmN0aW9ucwoKCSogbWlzYy9sc3RyLmM6IAoJTmV3IGZpbGUgd2l0aCBzdHJpbmcgZnVuY3Rpb25zIGxpa2UgbHN0ciogSXNDaGFyKiAqQW5zaSogCgpXZWQgU2VwIDE1IDIwOjM1OjEwIDE5OTMgIEpvaG4gQnJlemFrCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJQWRkaXRpb25hbCBjaGFuZ2VzIHRvIHN1cHBvcnQgTmV0QlNELgoKV2VkIFNlcCAxNSAyMjoxOToyMiAxOTkzICBNYXJ0aW4gQXlvdHRlCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJQWRkZWQgRnJhbWVSZWN0IGZ1bmN0aW9uCgpUdWUgU2VwIDE0IDEzOjU0OjQ1IDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW29iamVjdHMvY29sb3IuY10gW29iamVjdHMvcGFsZXR0ZS5jXQoJUHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgcHJpdmF0ZSBjb2xvciBtYXAuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJSW1wbGVtZW50ZWQgQ1NfQ0xBU1NEQyBzdHlsZS4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJTW92ZWQgRENFcyB0byBVU0VSIGhlYXAuCglJbXBsZW1lbnRlZCBjbGFzcyBhbmQgd2luZG93IERDcy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglJbXBsZW1lbnRlZCBDU19EQkxDTEtTIHN0eWxlLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUJ1ZyBmaXggaW4gU2V0UGl4ZWwoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQkKCUltcGxlbWVudGVkIENTX09XTkRDIHN0eWxlLgoJSW1wbGVtZW50ZWQgR2V0L1NldFdpbmRvd0xvbmcoKS4KCgkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL2NsYXNzLmNdIFt3aW5kb3dzL2NsaXBwaW5nLmNdIAoJICBbd2luZG93cy9kY2UuY10gW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy93aW4uY10JCglNb3ZlZCB3aW5kb3dzIGZyb20gZ2xvYmFsIGhlYXAgdG8gVVNFUiBoZWFwLgoKTW9uIFNlcCAxMyAwNTowMDoxMSAxOTkzICBFcmljIFlvdW5nZGFsZQoKCSogW01ha2VmaWxlXSBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL2RsbHMuaF0gW3NlbGVjdG9yLmNdCgkgIFtsb2FkZXIvd2luZS5jXSBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIGFiaWxpdHkgdG8gZ2VuZXJhdGUgbWlzc2luZyBmdW5jdGlvbnMgc3RhdGlzdGljcy4KCk1vbiBTZXAgMTMgMTI6MDk6NDcgMTk5MyAgU2NvdHQgQS4gTGFpcmQgIChzY290dEBjdXJseSkKCgkqIFtXSU4zMS1BUFBMRVRTXQoJQWRkZWQgbmV3IGZpbGUuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJQWRkZWQgZGVmaW5pdGlvbnMgZm9yIEdldFByb2ZpbGV7SW50LFN0cmluZ30gYW5kIFNldEhhbmRsZUNvdW50LgoKCSogW2lmMTYzMi9rZXlib2FyZC5zcGVjXQoJQ3JlYXRlZCBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiBmb3IgS2V5Ym9hcmQgZHJpdmVyIERMTC4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCUFkZGVkIGtleWJvYXJkLmRsbCB0byBsaXN0IG9mIGluY2x1ZGVkIERMTHMuCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUFkZGVkIExvYWRBY2NlbGVyYXRvcnMgZGVmaW5pdGlvbi4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUFkZGVkIExvYWRBY2NlbGVyYXRvcnMgc3R1Yi4KCgkqIFttaXNjL2ZpbGUuY10KCUNoYW5nZWQgT3BlbkZpbGUsIGFuZCBhZGRlZCBTZXRIYW5kbGVDb3VudCAoZm9yIHdpbmZpbGUuZXhlKQoKCSogW21pc2Mva2V5Ym9hcmQuY10KCUFkZGVkIGtleWJvYXJkIGNvZGUuCgoJKiBbbWlzYy9wcm9maWxlLmNdIFttaXNjL3h0LmNdCglNb3ZlZCBHZXRQcml2YXRlUHJvZmlsZSogY29tbWFuZHMgaGVyZSwgYW5kIGFkZGVkIEdldFByb2ZpbGUqCgljb21tYW5kcy4KCk1vbiBTZXAgMTMgMTA6MjQ6MzcgMTk5MyAgQW5kcmV3IEJ1bGhhawoKCSogW3dpbmRvd3MvdXRpbGl0eS5jXQoJSW1wbGVtZW50ZWQgTXVsRGl2KCksIE91dHB1dERlYnVnU3RyaW5nKCkgYW5kIHd2c3ByaW50ZigpCgpGcmkgU2VwIDEwIDA5OjEzOjMwIDE5OTMgIEpvaG4gQnJlemFrCgoJKiBbKi9NYWtlZmlsZV0KCUNyZWF0ZWQgcGF0Y2ggdG8gYWxsb3cgQlNEIG1ha2UgdG8gYnVpbGQgd2luZS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRml4ZWQgTlVMTCBwb2ludGVyIHJlZmVyZW5jZS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW21pc2MveHQuY10KCURlZmluZWQgSFogdG8gaGFuZGxlIHN5c3RlbSBzcGVjaWZpYyB0aW1pbmcuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJVXNlIE1fUEkgaXMgUEkKCgkqIFtvYmplY3RzL3BhbGxldGUuY10KCU5ldEJTRCBkb2VzIG5vdCBoYXZlIC91c3IvaW5jbHVkZS92YWx1ZXMuaCBhbmQgTUFYSU5UIGlzIElOVF9NQVguCgoJKiBbZHVtcC5jXSBbbGR0LmNdIFt3aW5lLmNdCglpZmRlZidlZCBsaW51eCBoZWFkZXJzIGZvciBsaW51eCBjb21waWxlLgoKCSogW2xvYWRlci9sZHRsaWIuY10KCUFkZCBOZXRCU0Qgc3lzdGVtIGNhbGxzIHdoZW4gY29tcGlsZWQgb24gdGhhdCBzeXN0ZW0uCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglVc2UgbW1hcChNQVBfQU5PTiwgLi4uKSBmb3IgTmV0QlNELgoKCSogW2lmMTYzMi9jYWxsLlNdCglGaXhlZCBzZWxlY3RvciBhc3N1bXB0aW9ucy4KClRodSBTZXAgOSAyMDowMTozNyAxOTkzICBEYXZpZCBNZXRjYWxmZQoKCSogW2NvbnRyb2xzL1dpbkJ1dHRvbipdIFtjb250cm9scy9idXR0b24uY10gW2NvbnRyb2xzL3dpZGdldC5jXQogIAkgIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9jbGFzcy5jXQoJQWRkZWQgM0QgYnV0dG9uIGNvbnRyb2wgYW5kIHRpZWQgaW50byBDcmVhdGVXaW5kb3coKQoKVGh1IFNlcCAgOSAwNzozNToyNCAxOTkzICBTY290dCBMYWlyZAoKCSogW2lmMTYzMi9zb3VuZC5zcGVjXQoJQ3JlYXRlZCBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiBmb3IgU09VTkQgRExMLgoKCSogW2lmMTYzMi93aW44N2VtLnNwZWNdCglBZGRlZCBtb3JlIGZ1bmN0aW9ucyB0byB0aGUgV0lOODdFTSBETEwgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24KCgkqIFttaXNjL2VtdWxhdGUuY10KCUNyZWF0ZWQgc3R1YnMgZm9yIHRoZSBuZXcgbWF0aCBlbXVsYXRpb24gZnVuY3Rpb25zLgoKCSogW21pc2Mvc291bmQuY10KCUNyZWF0ZWQgc3R1YnMgZm9yIHRoZSBTT1VORCBETEwuCgpTdW4gU2VwICA1IDIxOjAyOjEwIDE5OTMgIEpvaG4gQnVydG9uCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJQWRkZWQgaW50ZXJmYWNlIHNwZWNpZmljYXRpb25zIGZvciBPcGVuRmlsZSwgX2xjbG9zZSwgX2xyZWFkLCBfbG9wZW4sCglhbmQgX2x3cml0ZS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIE9GXyBtYWNyb3MKCgkqIFttaXNjL2ZpbGUuY10KCUltcGxlbWVudGVkIE9wZW5GaWxlLCBfbGNsb3NlLCBfbHJlYWQsIF9sb3BlbiBhbmQgX2x3cml0ZS4KCkZyaSBTZXAgIDMgMTg6NDc6MDMgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgogICAgICAgICogW3dpbmRvd3MvZGMuY10KCUJ1ZyBmaXgKCgkqIFtvYmplY3RzL3RleHQuY10KCUJ1ZyBmaXgKCkZyaSBTZXAgIDMgMTg6NDc6MDMgMTk5MyAgQm9iIEFtc3RhZHQKCiAgICAgICAgKiBbb2JqZWN0cy9saW5lZGRhLmNdCiAgICAgICAgRmluaXNoZWQgTGluZUREQSgpLgoKRnJpIFNlcCAgMyAxMTo1MjoxOCAxOTkzICBCb2IgQW1zdGFkdAoKCSogW3dpbmRvd3MvdGltZXIuY10KCUNoYW5nZWQgdG8gdXNlIENhbGxXaW5kb3dQcm9jKCkgcmF0aGVyIGRpcmVjdGx5IGNhbGxpbmcgY2FsbGJhY2suCgoJKiBbd2luZG93cy9ldmVudC5jXQoJSW1wbGVtZW50ZWQgU2V0Q2FwdHVyZSgpIGFuZCBSZWxlYXNlQ2FwdHVyZSgpCgoJKiBbd2luZG93cy9rZXlib2FyZC5jXQoJQ3JlYXRlZCBzdHViIGZvciBHZXRLZXlTdGF0ZSgpCgoJKiBbb2JqZWN0cy9saW5lZGRhLmNdCglDcmVhdGVkIHN0dWIgZm9yIExpbmVEREEoKQoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJQ3JlYXRlZCBjYWxsYmFjayBoYW5kbGVyIGZvciBMaW5lRERBIGNhbGxiYWNrIHByb2NlZHVyZS4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUNyZWF0ZWQgRnJlZVByb2NJbnN0YW5jZSgpCgpGcmkgU2VwICAzIDA4OjM2OjUyIDE5OTMgIERhdmlkIE1ldGNhbGZlCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJUGF0Y2ggdG8gYW5kIGNvZGUgZm9yIElOVCAxQQoKVGh1IFNlcCAgMiAwMDozMTo1NCAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFtvYmplY3RzL2ZvbnQuY10gW29iamVjdHMvdGV4dC5jXQoJTW9yZSB0ZXh0IHN1cHBvcnQ6IGltcGxlbWVudGVkIGp1c3RpZmljYXRpb24gYW5kIHVuZGVybGluaW5nLgoKCSogW3dpbmRvd3MvY2xpcHBpbmcuY10gW29iamVjdHMvY2xpcHBpbmcuY10KCU1vdmVkIGxvdy1sZXZlbCBjbGlwcGluZyBmdW5jdGlvbnMgdG8gb2JqZWN0cy9jbGlwcGluZy5jLgoKCSogW3dpbmRvd3MvY2xpcHBpbmcuY10gW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW1wbGVtZW50ZWQgd2luZG93IHVwZGF0ZSByZWdpb25zLgoKCSogW3dpbmRvd3MvZGMuY10gW29iamVjdHMvZGN2YWx1ZXMuY10KCU1vdmVkIHNvbWUgZGV2aWNlLWluZGVwZW5kZW50IERDIGZ1bmN0aW9ucyB0byBvYmplY3RzL2RjdmFsdWVzLmMuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJSW1wbGVtZW50ZWQgSW52ZXJ0UmVjdCgpIGFuZCBHZXRQaXhlbCgpLgoKU2F0IEF1ZyAyOCAwODo0MDoyMyAxOTkzICBFcmljIFlvdW5nZGFsZQoKCSogW2luY2x1ZGUvbmVleGUuaF0gW2xvYWRlci93aW5lLmNdCglBZGRlZCBjb2RlIHRvIGhhbmRsZSByZWxvY2F0aW9uIHR5cGUgNC4KCgkqIFtsb2FkZXIvc2lnbmFsLmhdIFtsb2FkZXIvd2luZS5jXSBbbG9hZGVyL3NlbGVjdG9yLmNdCglBZGRlZCBzdXBwb3J0IGZvciBkb3MgaW50ZXJydXB0cy4KClRodSAyNiBBdWcgMTk6MTU6MDAgMTk5MyAgRXJpYyBZb3VuZ2RhbGUKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUZpeGVkIGJ1ZyBkZWFsaW5nIHdpdGggbG9hZGluZyBETExzLgoKVGh1IEF1ZyAyNiAxOToyMjo0MCAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCiAgICAgICAgKiBbaW5jbHVkZS9nZGkuaF0gW29iamVjdHMvZm9udC5jXSBbd2luZG93cy9kYy5jXQogICAgICAgIEJlZ2lubmluZyBvZiByZWFsIGZvbnQgc3VwcG9ydC4KCiAgICAgICAgKiBbd2luZG93cy9ncmFwaGljcy5jXQogICAgICAgIEltcGxlbWVudGVkIFBhdEJsdCgpLgoKICAgICAgICAqIFttZW1vcnkvZ2xvYmFsLmNdCiAgICAgICAgQ29ycmVjdGVkIGEgYnVnIHdpdGggbGlua2VkIGxpc3QgaGFuZGxpbmcgaW4gR2xvYmFsQWxsb2MoKS4KCiAgICAgICAgKiBbb2JqZWN0cy9iaXRtYXAuY10KICAgICAgICBDb3JyZWN0ZWQgYSBidWcgaW4gQklUTUFQX1NlbGVjdE9iamVjdCgpLgoKVHVlIEF1ZyAyNCAxOToyMjo0MCAxOTkzICBEYXZpZCBNZXRjYWxmZQoKICAgICAgICAqIFtjb250cm9scy9Db21tYW5kKl0gW2NvbnRyb2xzL0xhYmVsKl0gW2NvbnRyb2xzW01lbnVCdXR0bypdCgkgIFtjb250cm9scy9TbWVNZW51QnV0dCpdCglDaGFuZ2UgY29kZSB0byBzdXBwb3J0ICYgYXMgYSBzcGVjaWFsIGNoYXJhY3RlciBpbiBtZW51IGl0ZW0gdGV4dC4KClR1ZSBBdWcgMjQgMTk6MjI6NDAgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbaW5jbHVkZS9nZGkuaF0gW3dpbmRvd3MvZGMuY10KCUhlYXZpbHkgbW9kaWZpZWQgdGhlIERDIHN0cnVjdHVyZSBmb3IgYmV0dGVyIGRldmljZS1pbmRlcGVuZGVuY2UuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCUltcGxlbWVudGVkIGJpdG1hcCBkaW1lbnNpb25zLgoKCSogW3dpbmRvd3MvZGMuY10gW3dpbmRvd3MvZGNlLmNdCglJbXBsZW1lbnRlZCBEQyBzdGF0ZSBzYXZpbmcgYW5kIHJlc3RvcmluZy4KCgkqIFt3aW5kb3dzL2RjLmNdCglJbXBsZW1lbnRlZCBST1AgbW9kZS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglJbXBsZW1lbnRlZCBGaWxsUmVjdCgpLgoKTW9uIEF1ZyAyMyAyMjowODozNCAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW21pc2MveHQuY10KCUZpeGVkIGJ1ZyBpbiBJbnZhbGlkYXRlUmVjdCgpLiAgU29saXRhaXJlIGF0dGVtcHRlZCB0bwoJY2xlYXIgd2luZG93IGJlZm9yZSBpdCB3YXMgcmVhbGl6ZWQuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglCZWdhbiByZXdyaXRlIG9mIExvYWRCaXRtYXAoKS4KCgkqIFtsb2FkZXIvd2luZS5jXQoJRml4ZWQgY29kZSB3aGljaCBzZXQgQXJndiBhbmQgQXJnYyBnbG9iYWwgdmFyaWFibGVzLgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJQWRkZWQgY29kZSB0byBzZXQgdXAgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KCgkqIFtpbmNsdWRlL25lZXhlLmhdCglGaXhlZCBlcnJvciBpbiBQU1Agc3RydWN0dXJlLgoKVHVlIEF1ZyAxNyAyMDo0MToxMiAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFtpbmNsdWRlL2dkaS5oXSBbd2luZG93cy9kYy5jXQoJSW1wbGVtZW50ZWQgZGV2aWNlIGNhcGFiaWxpdGllcy4KCgkqIFtvYmplY3RzL3JlZ2lvbi5jXQoJSW1wbGVtZW50ZWQgRXF1YWxSZ24oKSBhbmQgQ29tYmluZVJnbigpLgoKCSogW3dpbmRvd3MvY2xpcHBpbmcuY10KCUltcGxlbWVudGVkIFNhdmUvUmVzdG9yZVZpc1JnbigpLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUltcGxlbWVudGVkIFBhaW50UmduKCkgYW5kIEZpbGxSZ24oKS4KCgkqIFt3aW5kb3dzL21hcHBpbmcuY10KCUltcGxlbWVudGVkIG1hcHBpbmcgbW9kZXMuCgpUdWUgQXVnIDEwIDE0OjA3OjM4IDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW2lmMTYzMi91c2VyLnNwZWNdIFttaXNjL3JlY3QuY10KCUltcGxlbWVudGVkIHJlY3RhbmdsZSBBUEkgZnVuY3Rpb25zLgoKCSogW2lmMTYzMi9nZGkuc3BlY10gW2luY2x1ZGUvZ2RpLmhdIFtvYmplY3RzL3JlZ2lvbi5jXQoJSW1wbGVtZW50ZWQgcmVnaW9ucy4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglDb3JyZWN0ZWQgYSB0eXBvIGluIFVucmVnaXN0ZXJDbGFzcygpLgoKCSogW3dpbmRvd3MvY2xpcHBpbmcuY10gW3dpbmRvd3MvZGMuY10KCUltcGxlbWVudGVkIERDIGNsaXBwaW5nIGFuZCB2aXNpYmxlIHJlZ2lvbi4KClR1ZSBBdWcgMTAgMjA6NTc6NTYgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL3dpbi5jXQoJU2V0TWVudSgpLCBHZXRNZW51KCksIENoZWNrTWVudUl0ZW0oKSBpbXBsZW1lbnRlZAoKVGh1IEF1ZyAgNSAyMjozMzoyMiAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2NvbnRyb2xzL21lbnUuY10gW3dpbmRvd3Mvd2luLmNdCglNYW55IGltcHJvdmVtZW50cyBtZW51cy4gIExvYWRNZW51KCkgc2hvdWxkIHdvcmsuCgpXZWQgQXVnICA0IDE0OjU1OjM2IDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKICAgICAgICAqIFtvYmplY3RzL2RpYi5jXQogICAgICAgIFN0YXJ0ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGRldmljZS1pbmRlcGVuZGVudCBiaXRtYXBzLgoKICAgICAgICAqIFtvYmplY3RzL2JpdG1hcC5jXQogICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIG11bHRpcGxlIGJpdG1hcCBkZXB0aHMuCgogICAgICAgICogW29iamVjdHMvYnJ1c2guY10KICAgICAgICBJbXBsZW1lbnRlZCBwYXR0ZXJuIGJydXNoZXMuCgogICAgICAgICogW3dpbmRvd3MvZGMuY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10KICAgICAgICBJbXBsZW1lbnRlZCBzb21lIEdESSBncmFwaGljcyBwcmltaXRpdmVzLgoKVHVlIEF1ZyAgMyAyMToxNjo0NyAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2NvbnRyb2xzL21lbnUuY10gW3dpbmRvd3Mvd2luLmNdIFtpbmNsdWRlL21lbnUuaF0KCUNvZGUgdG8gbG9hZCBjbGFzcyBtZW51cyBmcm9tIGV4ZWN1dGFibGUgZmlsZS4KCgkqIFtpZjE2MzIvdXNlci5zcGVjXQoJRml4ZWQgc3BlY2lmaWNhdGlvbiBvZiBTZW5kTWVzc2FnZSgpIGFuZCBQb3N0TWVzc2FnZS4KCk1vbiBKdWwgMjYgMjE6NTM6MjQgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbaWYxNjMyL2NhbGwuU10KCUNvcnJlY3RlZCBhIGJ1ZyBpbiBLRVJORUxfSW5pdFRhc2soKS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIGEgbG90IG9mIGNvbnN0YW50cy4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUNvcnJlY3RlZCBhIGJ1ZyBpbiBzZWdtZW50IGFsbG9jYXRpb24gaW4gQ3JlYXRlU2VsZWN0b3JzKCkuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCUltcGxlbWVudGVkIFNlbGVjdE9iamVjdCgpIGZvciBiaXRtYXBzLgoKCSogW29iamVjdHMvYnJ1c2guY10KCUltcGxlbWVudGVkIGhhdGNoZWQgYnJ1c2hlcyBhbmQgU2VsZWN0T2JqZWN0KCkuCgoJKiBbb2JqZWN0cy9nZGlvYmouY10KCVJlbW92ZWQgbGlua2VkIGxpc3QgKG5vdCBuZWVkZWQpLgoKCSogW29iamVjdHMvcGFsZXR0ZS5jXQoJSW1wbGVtZW50ZWQgc3lzdGVtIHBhbGV0dGUgY3JlYXRpb24gYW5kIG1pc2MuIHBhbGV0dGUgQVBJIGZ1bmN0aW9ucy4KCgkqIFt3aW5kb3dzL3RpbWVyLmNdCglJbXBsZW1lbnRlZCB0aW1lcnMuCgoJKiBbd2luZG93cy9kYy5jXQoJSW1wbGVtZW50ZWQgbWVtb3J5IGRldmljZSBjb250ZXh0cy4KClR1ZSBKdWwgMjAgMTA6Mzg6NTkgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCiAgICAgICAgKiBbZG9zLmNdCglTcGxpdCBET1MzQ2FsbCgpIG91dCBvZiBrZXJuZWwuYy4gIEFkZGVkIHN1cHBvcnQgZm9yIGdldCBkYXRlCglhbmQgdGltZSBmdW5jdGlvbnMuCgoJKiBbY2FsbC5TXQoJQWRkZWQgZnVuY3Rpb24gUmV0dXJuRnJvbVJlZ2lzdGVyRnVuYygpIHRvIGFsbG93IERPUyBjYWxscwoJdG8gcmV0dXJuIHZhbHVlcyBpbiByZWdpc3RlcnMuCgoJKiBbcmVnZnVuYy5oXQoJTWFjcm9zIHRvIGFjY2VzcyByZWdpc3RlcnMgc2F2ZWQgb24gc3RhY2suCgpUdWUgSnVsIDIwIDEwOjM4OjU5IDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKICAgICAgICAqIFt3aW4uY10KICAgICAgICBDb3JyZWN0ZWQgYWxsb2NhdGlvbiBvZiB0aGUgV01fQ1JFQVRFIGRhdGEgc3RydWN0dXJlLgoKICAgICAgICAqIFtkY2UuY10gW2RjZS5oXQogICAgICAgIEltcGxlbWVudGVkIERDRSBoYW5kbGluZy4KCiAgICAgICAgKiBbYml0bWFwLmNdIFticnVzaC5jXSBbZGMuY10gW2ZvbnQuY10gW2dkaS5oXSBbZ2RpLnNwZWNdIAogICAgICAgICAgW2dkaW9iai5jXSBbcGFsZXR0ZS5jXSBbcGVuLmNdCiAgICAgICAgSW1wbGVtZW50ZWQgdGhlIEdESSBvYmplY3RzIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxsb2NhdGlvbi4KCiAgICAgICAgKiBbd2luZG93cy5oXQogICAgICAgIEFkZGVkIHNldmVyYWwgc3RydWN0dXJlcyBhbmQgY29uc3RhbnRzIGZvciBHREkgb2JqZWN0cy4KCk1vbiBKdWwgMTkgMTI6NTE6MTAgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtsZHRsaWIuY10KCU1vZGlmaWVkIHN5c3RlbSBjYWxscyB0byBtYXRjaCBMaW51cycgbmV3IGludGVyZmFjZSBmb3IKCXRoZSBMRFQgbW9kaWZpY2F0aW9uLgoKCSogW3dpbi5jXQoJRml4ZWQgYnVnIHdpdGggV01fQ1JFQVRFIG1lc3NhZ2UuCgoJKiBbaGVhcC5jXSBba2VybmVsLnNwZWNdCglDb21wbGV0ZWQgbG9jYWwgaGVhcCBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KCgkqIFtnbG9iYWwuY10KCUNyZWF0ZWQgZnVuY3Rpb24gR2xvYmFsUXVpY2tBbGxvYygpIGZvciBlYXN5IGFsbG9jYXRpb24gZnJvbSBETExzCgpUdWUgSnVsIDEzIDIwOjMxOjMxIDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbZ2xvYmFsLmNdCglDb21wbGV0ZWQgZ2xvYmFsIG1lbW9yeSBwb29sIEFQSQoKU3VuIEp1bCAxMSAxNjo1OTo1MiAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFttZXNzYWdlLmNdIFt1c2VyLmNdIFt1c2VyLnNwZWNdIFt3aW5kb3dzLmhdCglBZGRlZCBlbXVsYXRpb24gb2YgV2luZG93cyBtZXNzYWdlIHF1ZXVlLgoKVGh1IEp1bCAgOCAxOToyOToyNyAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2J1aWxkLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtjYWxsYmFjay5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSAKCUFsZXhhbmRyZSBKdWxsaWFyZAoJKiBbZHVtcC5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbZ2xvYmFsLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtoZWFwLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtrZXJuZWwuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2xkdC5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbbGR0bGliLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtyZWxheS5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbcmVzb3VyY2UuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgCglBbGV4YW5kcmUgSnVsaWFyZAoJKiBbc2VsZWN0b3IuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgRXJpYyBZb3VuZ2RhbGUKCSogW3VzZXIuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW3dpbmUuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgRXJpYyBZb3VuZ2RhbGUgYW5kCglBbGV4YW5kcmUgSnVsbGlhcmQKCSogW3dpbnRjbC5jXSBPcmlnaW5hbCBieSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCgl1cGRhdGVzIGJ5IFBldGVyIE1hY0RvbmFsZCBhbmQgQWxleGFuZHJlIEp1bGxpYXJkCgkqIFtjYWxsYmFjay5oXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbZGxscy5oXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbaGVhcC5oXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbbmVleGUuaF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW3Byb3RvdHlwZXMuaF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgCglFcmljIFlvdW5nZGFsZQoJKiBbc2VnbWVtLmhdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFt0a0ludC5oXSBPcmlnaW5hbCBieSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKCSogW3dpbmRvd3MuaF0gT3JpZ2luYWwgYnkgUGV0ZXIgTWFjRG9uYWxkLCB1cGRhdGVzIGJ5IAoJQWxleGFuZHJlIEp1bGxpYXJkIGFuZCBCb2IgQW1zdGFkdAoJKiBbd2luZS5oXSBPcmlnaW5hbCBieSBFcmljIFlvdW5nZGFsZQoJKiBba2VybmVsLnNwZWNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IAoJQWxleGFuZHJlIEp1bGxpYXJkCgkqIFtnZGkuc3BlY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgCglBbGV4YW5kcmUgSnVsbGlhcmQKCSogW3NoZWxsLnNwZWNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFt1bml4bGliLnNwZWNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFt1c2VyLnNwZWNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IEFsZXhhbmRyZSBKdWxsaWFyZAoJKiBbd2luODdlbS5zcGVjXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbV2luZG93cy50Y2xdIE9yaWdpbmFsIGJ5IFBldGVyIE1hY0RvbmFsZCwgdXBkYXRlcyBieSAKCUFsZXhhbmRyZSBKdWxsaWFyZAoJKiBbYnVpbGQtc3BlYy50eHRdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtpZjE2MzIuU10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgRXJpYyBZb3VuZ2RhbGUK