MjAwMC0xMi0xMCAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0ByZWRoYXQuY29tPgoKCTIwMDAtMTAtMTYgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgoJKiBpb3N0cmVhbS5jYyAob3N0cmVhbTo6b3BlcmF0b3I8PChkb3VibGUgbikpIFtfX0dMSUJDX01JTk9SX18gPj0gMl06CglJbml0aWFsaXplIG5ldyBmaWVsZHMgd2lkZSBhbmQgaTE4biBvZiBzdHJ1Y3QgcHJpbnRmX2luZm8uCgkob3N0cmVhbTo6b3BlcmF0b3I8PChsb25nIGRvdWJsZSBuKSkgW19fR0xJQkNfTUlOT1JfXyA+PSAyXToKCUxpa2V3aXNlLgoKCTIwMDAtMDktMjMgIEZyYW56IFNpcmwgIDxGcmFuei5TaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbT4KCSogc3Rkc3RyZWFtcy5jYzogSW5jbHVkZSA8bGliaW8uaD4sIG5vdCAibGliaW8uaCIuCgkqIGlvbGliaW8uaDogTGlrZXdpc2UuCgkoX0lPX3Bvc19CQUQpOiBVc2UgX0lPX29mZl90IGluc3RlYWQgb2YgX0lPX2Zwb3NfdC4KCSogbGliaW8uaCAoX0lPX1VTRVJfTE9DSyk6IERlZmluZS4KCgkxOTk5LTEyLTIyICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KCSogbGliaW8uaCAoX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCk6IFVzZSBfSU9fb2ZmX3QgaW5zdGVhZCBvZgoJX0lPX2Zwb3NfdC4KCShfSU9fc2Vla29mZiwgX0lPX3NlZWtwb3MpOiBMaWtld2lzZS4gVXNlIF9JT19vZmY2NF90IGluc3RlYWQgb2YKCV9JT19mcG9zNjRfdC4KCSogbGliaW9QLmggKF9JT19zZWVrb2ZmX3QsIF9JT19zZWVrcG9zX3QsIF9JT19zZWVrX3QpOiBMaWtld2lzZS4KCShfSU9fc2Vla29mZiwgX0lPX3NlZWtwb3MpOiBMaWtld2lzZS4KCShfSU9fZGVmYXVsdF9zZWVrb2ZmLCBfSU9fZGVmYXVsdF9zZWVrcG9zKTogTGlrZXdpc2UuCgkoX0lPX2RlZmF1bHRfc2Vlayk6IExpa2V3aXNlLgoJKF9JT19maWxlX3NlZWtvZmYsIF9JT19maWxlX3NlZWssIF9JT19zdHJfc2Vla29mZik6IExpa2V3aXNlLgoJKiBzdHJlYW1idWYuaCAoc3RyZWFtcG9zKTogVHlwZWRlZiB0byBfSU9fb2ZmX3QgcmVzcC4gX0lPX29mZjY0X3QuCgkqIHBhcnNlc3RyZWFtLmggKGNsYXNzIHBhcnNlYnVmOjpwb3NfYXRfbGluZV9zdGFydCk6IENoYW5nZSB0eXBlCgl0byBfSU9fb2ZmX3QuCgoyMDAwLTAxLTI4ICBNYXJ0aW4gdi4gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBmc3RyZWFtLmggKGlmc3RyZWFtOjppZnN0cmVhbSk6IEFkZCBpb3M6OmluIHRvIG1vZGUuCgkoaWZzdHJlYW06Om9wZW4pOiBMaWtld2lzZS4KCShvZnN0cmVhbTo6b2ZzdHJlYW0pOiBBZGQgaW9zOjpvdXQgdG8gbW9kZS4KCShvZnN0cmVhbTo6b3Blbik6IExpa2V3aXNlLgoKMTk5OS0xMi0yMSAgTWFydGluIHYuIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZmlsZWJ1Zi5jYyAob3Blbik6IFN1cHBvcnQgaW9zOjphdGUgaWYgX0dfSEFWRV9JT19GSUxFX09QRU4uCglSZW1vdmUgc2VlayBmb3IgaW9zOjphcHAgaWYgbm90LgoKMTk5OS0xMi0xNCAgTWFydGluIHYuIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogc3Ryc3RyZWFtLmggKHN0cnN0cmVhbWJ1Zjo6c3RyZWFtYnVmKTogUmVuYW1lIHBhcmFtZXRlcnMgdG8KCWF2b2lkIHNoYWRvdyB3YXJuaW5nLgoJKiBzdHJlYW0uaCAoV1MpOiBMaWtld2lzZS4KClN1biBPY3QgMjQgMjM6NTQ6MTAgUERUIDE5OTkgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGdjYy0yLjk1LjIgUmVsZWFzZWQuCgpNb24gQXVnIDE2IDAxOjI5OjI0IFBEVCAxOTk5IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnY2MtMi45NS4xIFJlbGVhc2VkLgoKMTk5OS0wOC0wOCAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBzdHJlYW1idWYuaCAoaW9zOjpzdHJlYW1zaXplKTogRGVjbGFyZSBhcyBfSU9fc3NpemVfdCwgYXMgaW4gdGhlIAoJZ2xvYmFsIHNjb3BlLgoKMTk5OS0wOC0wNyAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KCgkqIGlvc3RyZWFtLmNjOiBBZGQgbWlzc2luZyBjYWxscyB0byBpc2Z4IGFuZCBzZXR1cCBhIGNsZWFudXAKCXJlZ2lvbiBmb3IgdGhlIGxvY2tlZCBzdHJlYW0uCgkqIGlvc3RyZWFtLmg6IExpa2V3aXNlLgoJKiBpc2dldGxpbmUuY2M6IExpa2V3aXNlLgoJKiBpc2dldHNiLmNjOiBMaWtld2lzZS4KCSogaXNzY2FuLmNjOiBMaWtld2lzZS4KCldlZCBKdWwgMjggMjE6Mzk6MzEgUERUIDE5OTkgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGdjYy0yLjk1IFJlbGVhc2VkLgoKU3VuIEp1bCAyNSAyMzo0MDo1MSBQRFQgMTk5OSBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZ2NjLTIuOTUgUmVsZWFzZWQuCgpNb24gSnVuIDI4IDA5OjI1OjIzIDE5OTkgIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGJpdHJhbmdlLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAocG9zdC10YXJnZXQpOiBVc2UgIiQodG9wc3JjZGlyKSIsIG5vdCAiJChzcmNkaXIpLy4uIi4KCjE5OTktMDUtMjAgIEFuZ2VsYSBNYXJpZSBUaG9tYXMgPGFuZ2VsYUBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluOiBUZXN0IGZvciAke2NvbXBpbGVyX25hbWV9LmV4ZSBhcyB3ZWxsLgoKMTk5OS0wNS0xNyAgTWFyayBLZXR0ZW5pcyAgPGtldHRlbmlzQGdudS5vcmc+CgoJKiBsaWJpb1AuaDogT25seSBpbmNsdWRlIGxpYmMtbG9jay5oIGlmIF9JT19NVFNBRkVfSU8gaXMgZGVmaW5lZC4KCjE5OTktMDUtMTIgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoY29tcGlsZXJfbmFtZSk6IERvbid0IGRvIHRoZSBza2lwLXRoaXMtZGlyIHRoaW5nCglpZiB3ZSdyZSByZWNvbmZpZ3VyaW5nLgoKMTk5OS0wNC0yOSAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIHN0cmVhbWJ1Zi5oIChpb3M6On5pb3MpOiBVc2Ugb3BlcmF0b3IgZGVsZXRlW10gdG8gcmVtb3ZlIF9hcnJheXMuCgpNb24gQXByIDEyIDE5OjIyOjQ0IDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogZmlsZWRvYWxsb2MuYyAoX1BPU0lYX1NPVVJDRSk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKiBmaWxlb3BzLmMgKF9QT1NJWF9TT1VSQ0UpOiBMaWtld2lzZS4KCSogaW9wb3Blbi5jIChfUE9TSVhfU09VUkNFKTogTGlrZXdpc2UuCgkqIHByb2NidWYuY2MgKF9QT1NJWF9TT1VSQ0UpOiBMaWtld2lzZS4KCSogbGliaW9QLmggKF9QT1NJWF9TT1VSQ0UpOiBBbmQgZGVmaW5lIGl0IGhlcmUuCgkqIHN0ZGlvc3RyZWFtLmNjOiBJbmNsdWRlIGxpYmlvUC5oIGJlZm9yZSBvdGhlcnMuCgpGcmkgQXByICAyIDE1OjExOjU4IDE5OTkgIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIGxpYmlvL2NvbmZpZ3VyZS5pbiAoZ3h4X2luY2x1ZGVfZGlyKTogSGFuZGxlIGl0LgoJKiBsaWJpby9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCgpXZWQgTWFyIDI0IDIyOjM2OjQ1IDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogY29uZmlndXJlLmluIChFWEVFWFQpOiBEZWZpbmUuCgkoY29tcGlsZXJfbmFtZSk6IFVzZS4KCjE5OTktMDMtMjQgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogZ2VuLXBhcmFtcyAoQ09ORklHX05NKTogYHRlc3QgLi4uIC1vIC4uLicgaXMgbm90IHBvcnRhYmxlLgoKVGh1IE1hciAxMSAwMTowNzo1NSAxOTk5ICBGcmFueiBTaXJsIDxGcmFuei5TaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogQ2xlYW51cCBhbmQgYWRkIG1oLSpwaWMgaGFuZGxpbmcgZm9yIGFybSwgcG93ZXJwYwoKRnJpIE1hciAgNSAwMToxNToxNSAxOTk5ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgogICAgICAgICogY29uZmlnL2xpbnV4bGliYzEubXQgKE1UX0NGTEFHUyk6IEFkZCAtRF9HX1NURElPX1VTRVNfTElCSU8KICAgICAgICAtRF9HX0hBVkVfV0VBS19TWU1CT0wuCgogICAgICAgICogZ2Vub3BzLmM6IEFkZCB0aGUgcHJvcGVyIHdlYWsgYWxpYXMgaWYgX0dfU1RESU9fVVNFU19MSUJJTwogICAgICAgIGFuZCBfR19IQVZFX1dFQUtfU1lNQk9MIGFyZSBkZWZpbmVkLgogICAgICAgICogaW9mY2xvc2UuYzogTGlrZXdpc2UuCiAgICAgICAgKiBpb2Zlb2YuYzogTGlrZXdpc2UuCiAgICAgICAgKiBpb2ZlcnJvci5jOiBMaWtld2lzZS4KICAgICAgICAqIGlvZ2V0Yy5jOiBMaWtld2lzZS4KICAgICAgICAqIGlvcHV0Yy5jOiBMaWtld2lzZS4KICAgICAgICAqIGlvdnNwcmludGYuYzogTGlrZXdpc2UuCiAgICAgICAgKiBpb3Zzc2NhbmYuYzogTGlrZXdpc2UuCgpTdW4gRmViIDI4IDIyOjM5OjE3IDE5OTkgIEdlb2ZmcmV5IE5vZXIgIDxub2VyQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IENoZWNrIGN5Z3dpbiosIG5vdCBjeWd3aW4zMiouCgpXZWQgRmViIDEwIDA5OjI1OjQ4IDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogZ2VuLXBhcmFtcyAoVlRBQkxFX0xBQkVMX1BSRUZJWCk6IEhhbmRsZSB3aW5kb3dzMzIuIAoKV2VkIEZlYiAgMyAyMjowNTo0MSAxOTk5ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgkJCSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGlvc3RyZWFtLmxpc3QpOiBSZW1vdmUgZGVwZW5kZW5jeSBvbgoJc3RhbXAtcGljZGlyLgoJKCQoTElCSU9TVFJFQU1fREVQKSk6IERlcGVuZCBvbiBzdGFtcC1waWNkaXIuCgkoJChMSUJJT19GSUxFUykpOiBTaW1pbGFybHkuCgoJKiBjb25maWcuc2hhcmVkIChhbGwpOiBNYWtlICQoUElDRElSKSBjb25jdXJyZW50LgoKMTk5OC0xMS0yNiAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogY29uZmlndXJlLmluIChjb21waWxlcl9uYW1lKTogQWRkIGNoZWNrIHRvIGRldGVjdCBpZiB0aGlzCglsYW5ndWFnZSdzIGNvbXBpbGVyIGhhcyBiZWVuIGJ1aWx0LgoKMTk5OC0xMC0xMiAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBjb25maWcuc2hhcmVkIChkZXBlbmQubmV3KTogRGVsZXRlIGxpYmMtbG9jay5oIGZyb20KCWRlcGVuZGVuY2llcywgYW5kIGZpeCBfR19jb25maWcuaCAtPiAkKF9HX0NPTkZJR19IKSBydWxlLgoJKiBkZXBlbmQ6IFJlYnVpbHQuCgkKU3VuIE9jdCAxMSAwMTo1MTo0MiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWcuc2hhcmVkIChkZXBlbmQubmV3KTogRml4IHR5cG8uCgkqIGRlcGVuZDogUmVidWlsdC4KCjE5OTgtMDktMDkgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGNvbmZpZ3VyZS5pbiAoSU5TVEFMTERJUik6IEZpeCBjb21tZW50IGFib3V0IGNoYW5naW5nIElOU1RBTExESVIncwoJdmFsdWU7IGRvbid0IGNoYW5nZSBpdHMgdmFsdWUgaWYgLS1lbmFibGUtdmVyc2lvbi1zcGVjaWZpYy1ydW50aW1lLWxpYnMKCWhhcyBiZWVuIHNwZWNpZmllZC4KCldlZCBTZXAgIDIgMjE6MDU6MzkgMTk5OCAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogY29uZmlndXJlLmluOiBGaXggSU5TVEFMTERJUiByZXBsYWNlbWVudCBmb3IgY3Jvc3MtY29tcGlsZS4KClN1biBBdWcgMzAgMjI6Mjc6MDIgMTk5OCAgTHV0eiBXb2hscmFiIDxsdXR6LndvaGxyYWJAaW5mb3JtYXRpay50dS1jaGVtbml0ei5kZT4KCiAgICAgICAgKiBkYnovTWFrZWZpbGUuaW46IEF2b2lkIGFzc3VtcHRpb25zIGFib3V0ICJ0ciIgYmVoYXZlcyB3aGVuCiAgICAgICAgTEFORyBpcyBzZXQgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gRW5nbGlzaC4KClN1biBBdWcgMzAgMjI6MTc6MDAgMTk5OCAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogY29uZmlnLnNoYXJlZDogU2V0IGxpYnN1YmRpci4KCjE5OTgtMDgtMjUgMTQ6MzQgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogbGliaW8vaW9nZXRsaW5lLmMgKF9JT19nZXRsaW5lX2luZm8pOiBEb24ndCByZWFkIGFueXRoaW5nIGZvcgoJTiA9PSAwLiAgUGF0Y2ggYnkgSEogTHUuCgoxOTk4LTA4LTIzICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogaW9tYW5pcC5oOiBVc2UgX19leHRlbnNpb25fXyBmb3IgYGV4dGVybicgZXhwbGljaXQgdGVtcGxhdGUKCWluc3RhbnRpYXRpb25zLgoKMTk5OC0wOC0xNyAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBzdHJmaWxlLmg6IERlZmluZSBfX1BNVCBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLgoKMTk5OC0wOC0wMyAgQW5kcmVhcyBKYWVnZXIgIDxhakBhcnRodXIucmhlaW4tbmVja2FyLmRlPgoKCSogbGliaW9QLmg6IFVzZSBfX1BNVCBpbiB0eXBlZGVmcy4KCSogc3RyZmlsZS5oOiBMaWtld2lzZS4KCjE5OTgtMDYtMjkgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogbGliaW8uaDogUmV3cml0ZSBfX1BNVCBjaGFuZ2Ugc28gdGhhdCBpdCB3b3JrcyB3aXRoIHBsYXRmb3JtcwoJZGVmaW5pbmcgX19QIGJ1dCBub3QgX19QTVQuCgoJKiBsaWJpby5oIChfX1BNVCk6IE5ldyBtYWNyby4gIERlZmluZWQgbGlrZSBfX1AuICBVc2UgaXMgZm9yCglmdW5jdGlvbiBwb2ludGVycy4KCjE5OTgtMDYtMjcgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogUmVtb3ZlIHN1cGVyZmx1b3VzIC9pbmNsdWRlLgoKMTk5OC0wNi0yNiAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogY29uZmlnLnNoYXJlZCAoRkxBR1NfVE9fUEFTUyk6IEFkZCBnY2NfdmVyc2lvbl90cmlnZ2VyLgoJKE1ha2VmaWxlKTogQWRkIGRlcGVuZGVuY3kgdXBvbiAkKGdjY192ZXJzaW9uX3RyaWdnZXIpLgoKMTk5OC0wNi0yNCAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBJbnN0YWxsIF9HX2NvbmZpZy5oIGRlcGVuZGluZyBvbiBuZXcgZmxhZwoJLS1lbmFibGUtdmVyc2lvbi1zcGVjaWZpYy1ydW50aW1lLWxpYnMuCgkqIGNvbmZpZy9saW51eC5tdCAoZ3h4X2luY2x1ZGVfZGlyKTogUmVtb3ZlIGRlZmluaXRpb24gaGVyZSBhcyB3ZSB1c2UKCWdjYydzIGRlZmF1bHQgYW55d2F5LgoKMTk5OC0wNi0yNCAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogY29uZmlnLnNoYXJlZCAoRkxBR1NfVE9fUEFTUyk6IEFkZCBnY2NfdmVyc2lvbi4KCjE5OTgtMDYtMTkgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGNvbmZpZy5zaGFyZWQgKEZMQUdTX1RPX1BBU1MpOiBBZGQgbGlic3ViZGlyLgoKMTk5OC0wNi0wNyAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBnZW5vcHMuYyAoX191bmRlcmZsb3cpOiBSZWFkIGNoYXJhY3RlciBmcm9tIHJlYWQgcG9pbnRlciBhcyB1bnNpZ25lZC4KCShfX3VmbG93KTogTGlrZXdpc2UuCgoxOTk4LTA1LTIyICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCgkqIHN0cm9wcy5jIChfSU9fc3RyX3VuZGVyZmxvdyk6IFJlYWQgbmV3bHkgYXZhaWxhYmxlIGNoYXJhY3RlcgoJZnJvbSBidWZmZXIgYXMgdW5zaWduZWQuCgpTdW4gQXByIDE5IDIyOjEzOjM2IDE5OTggIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIGlzZ2V0bGluZS5jYyAoaXN0cmVhbTo6Z2V0KTogRml4IGEgdHlwby4KClRodSBNYXIgIDUgMDk6MjM6MjggMTk5OCAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogY29uZmlndXJlLmluOiBNYWtlIGxvY2F0aW5nIGZyYWcgZmlsZXMgZmFpbHNhZmUgZXZlbiBmb3IgdGhlCglzcGVjaWFsIGNhc2UgaWYgY29uZmlndXJpbmcgYW5kIGJ1aWxkaW5nIGluIHNyY2Rpci4KCjE5OTgtMDItMjQgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCUNoYW5nZXMgZm9yIF9HX0lPX0lPX0ZJTEVfVkVSU0lPTiA9PSAweDIwMDAxOgoJKiBsaWJpb1AuaCAoX0lPX3Nob3dtYW55Y190LCBfSU9fU0hPV01BTllDLCBfSU9faW1idWVfdCwKCV9JT19JTUJVRSk6IE5ldyBkZWZpbml0aW9ucy4KCShzdHJ1Y3QgX0lPX2p1bXBfdCk6IEFkZCBfX3Nob3dtYW55YyBhbmQgX19pbWJ1ZSBmaWVsZHMuCgkoX0lPX2ZpbGVfZm9wZW4pOiBBZGQgbmV3IGZvdXJ0aCBhcmd1bWVudC4KCSogZmlsZWJ1Zi5jYyAoZmlsZWJ1Zjo6b3Blbik6IFBhc3MgbmV3IGZvdXJ0aCBhcmd1bWVudCB0bwoJX0lPX2ZpbGVfZm9wZW4uCgkqIGlvbGliaW8uaCAoX0lPX2ZyZW9wZW4pOiBMaWtld2lzZS4KCSogc3RyZWFtYnVmLmNjIChzdHJlYW1idWY6OnNob3dtYW55Yywgc3RyZWFtYnVmOjppbWJ1ZSk6IE5ldwoJZnVuY3Rpb25zLgoJKiBzdHJlYW1idWYuaCAoX0lPX3djaGFyX3QpOiBEZWZpbmUgdG8gX0dfd2NoYXJfdC4KCShpb3M6OmZpbGwpOiBSZW1vdmUgY2FzdHMuCgkoc3RydWN0IHN0cmVhbWJ1Zik6IEFkZCBzaG93bWFueWMgYW5kIGltYnVlIG1lbWJlcnMuCgoJKiBpb3N0cmVhbS5jYyAob3N0cmVhbTo6b3BlcmF0b3I8PChkb3VibGUgbikpIFtfX0dMSUJDX01JTk9SX18gPj0KCTFdOiBJbml0aWFsaXplIG5ldyBmaWVsZHMgaXNfY2hhciBvZiBzdHJ1Y3QgcHJpbnRmX2luZm8uCgkob3N0cmVhbTo6b3BlcmF0b3I8PChsb25nIGRvdWJsZSBuKSkgW19fR0xJQkNfTUlOT1JfXyA+PSAxXToKCUxpa2V3aXNlLgoKU3VuIEZlYiAyMiAxNzoyNDo1MyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWcuc2hhcmVkOiBCcmluZyBiYWNrIGNoYW5nZXMgZnJvbSBJYW4gYW5kIEZyZWQgdGhhdCB3ZXJlCglhY2NpZGVudGFsbHkgY2xvYmJlcmVkLiAgU2hvdWxkIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3IgRGF2ZSdzCglyZWNlbnQgY2hhbmdlLgoKVHVlIEZlYiAxNyAyMTo1NjoyNSAxOTk4ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiBjb25maWcvbGludXgubXQgKElPX09CSkVDVFMpOiBBZGQgaW9nZXRsaW5lLm8uCgkqIGNvbmZpZy9saW51eGxpYmMxLm10OiBEaXR0by4KCgkqIGlvZ2V0bGluZS5jIChfSU9fZ2V0bGluZV9pbmZvKTogUmVuYW1lZCBmcm9tIF9JT19nZXRsaW5lLgoJKF9JT19nZXRsaW5lKTogSnVzdCBjYWxsIF9JT19nZXRsaW5lX2luZm8uCgoJKiBpc2dldGxpbmUuY2MgKGlzdHJlYW06OmdldGxpbmUsIGlzdHJlYW06OmdldCwgX3NiX3JlYWRsaW5lKToKCUNhbGwgX0lPX2dldGxpbmVfaW5mbyBpbnN0ZWFkIG9mIF9JT19nZXRsaW5lIGFuZCBnZXQgdGhlIEVPRgoJaW5mb3JtYXRpb24uCgkqIHNiZ2V0bGluZS5jYyAoc3RyZWFtYnVmOjpzZ2V0bGluZSk6IERpdHRvLgoKCSogbGliaW9QLmggKF9JT19nZXRsaW5lX2luZm8pOiBOZXcgZGVjbGFyYXRpb24uCgoJKiBpb2dldGxpbmUuYyAoX0lPX2dldGxpbmUpOiBIYW5kbGUgdGhlIGNhc2Ugd2hlbiB0aGVyZSBpcyBubwoJYnVmZmVyLgoKRnJpIEZlYiAxMyAwMDo1NzoyMCAxOTk4ICBLcmlzdGVyIFdhbGZyaWRzc29uIChjYXRvQGRmLmx0aC5zZSkKCgkqIGZpbGVvcHMuYzogI2luY2x1ZGUgPHVuaXN0ZC5oPi4KCSogaW9wcmltcy5jOiBMaWtld2lzZS4KCjE5OTgtMDItMTAgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGlvc3RyZWFtLmNjIChvc3RyZWFtOjpvcGVyYXRvcjw8KGxvbmcgZG91YmxlKSk6IERvbid0IHVzZQoJbGFiZWxlZCBpbml0aWFsaXplcnMuCgpGcmkgRmViICA2IDAxOjM1OjU2IDE5OTggIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGNvbmZpZy5zaGFyZWQgKEZMQUdTX1RPX1BBU1MpOiBEb24ndCBlbWl0IFBJQ0ZMQUcuCgkoLmMubyk6IENoZWNrIHZhbHVlIG9mIGVuYWJsZV9zaGFyZWQsIG5vdCBQSUNGTEFHLgoJKC5DLm8pOiBEaXRvLgoJKC5jYy5vKTogRGl0by4KCShzdGFtcC1waWNkaXIpOiBEaXRvLgoKVGh1IEZlYiAgNSAxNzo0MToyNiAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjb25maWcuc2hhcmVkIChMSUJTKTogQ2hhbmdlIHRvIC1MLi4vLi4vbGlic3RkYysrICh3YXMgLUwuLi9saWJzdGRjKyspCglpZiAke0RPSU5HX0dQRVJGfSBpcyB0cnVlLgoKMTk5OC0wMS0yMCAgQW5kcmVhcyBTY2h3YWIgIChzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGUpCgoJKiBpb3N0cmVhbS5jYyAoaXN0cmVhbTo6b3BlcmF0b3I+Pihsb25nIGRvdWJsZSYpKQoJWyFfR19IQVZFX0xPTkdfRE9VQkxFX0lPXTogU2NhbiB2YWx1ZSBpbnRvIHNlcGFyYXRlIHZhcmlhYmxlLCBpbgoJY2FzZSBsb25nIGRvdWJsZSBpcyBiaWdnZXIgdGhhbiBkb3VibGUuCgkob3N0cmVhbTo6b3BlcmF0b3I8PChkb3VibGUpKSBbX0dfSEFWRV9QUklOVEZfRlBdOiBGaXggb3JkZXIgb2YKCWluaXRpYWxpemVycyBvZiBzdHJ1Y3QgcHJpbnRmX2luZm8gdG8gbWF0Y2ggZGVjbGFyYXRpb24gb3JkZXIsCgl0byB3b3JrIGFyb3VuZCBnKysgYnVnLgoJKG9zdHJlYW06Om9wZXJhdG9yPDwobG9uZyBkb3VibGUpKSBbX0dfSEFWRV9QUklOVEZfRlBdOiBMaWtld2lzZS4KCgkqIGdlbi1wYXJhbXM6IEFkZCBtaXNzaW5nIHF1b3Rlcy4gIEF2b2lkIHVzZWxlc3MgdXNlIG9mIGNvbW1hbmQKCXN1YnN0aXR1dGlvbi4KClN1biBGZWIgIDEgMTM6Mjk6NDcgMTk5OCAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogZmlsZWJ1Zi5jYyAoZmlsZWJ1Zjo6b3Blbik6IENhbGwgX0lPX2ZpbGVfb3BlbiBpZgoJX0dfSEFWRV9JT19GSUxFX09QRU4gaXMgMS4KCgkqIGxpYmlvLmggKF9JT19mcG9zNjRfdCwgX0lPX29mZjY0X3QpOiBEZWZpbmVkIGlmCglfR19JT19JT19GSUxFX1ZFUlNJT04gPT0gMHgyMDAwMS4KCgkqIGxpYmlvUC5oIChfSU9fZmlsZV9vcGVuKTogTmV3IGRlY2xhcmF0aW9uLgoKCSogbGliaW8uaCAoX0lPX0ZJTEUsIF9JT19zdGRpbl8sIF9JT19zdGRvdXRfLCBfSU9fc3RkZXJyXywKCV9JT19zZWVrb2ZmLCBfSU9fc2Vla3Bvcyk6IEFkZCBzdXBwb3J0IGZvciBsaWJpbyBpbiBnbGliYyAyLjEuCgkqIGxpYmlvUC5oIChfSU9fc2Vla29mZl90LCBfSU9fc2Vla3Bvc190LCBfSU9fc2Vla190LAoJX0lPX3NlZWtvZmYsIF9JT19zZWVrcG9zLCBfSU9fZGVmYXVsdF9zZWVrb2ZmLAoJX0lPX2RlZmF1bHRfc2Vla3BvcywgX0lPX2RlZmF1bHRfc2VlaywgX0lPX2ZpbGVfc2Vla29mZiwKCV9JT19maWxlX3NlZWssIF9JT19zdHJfc2Vla29mZiwgX0lPX3Bvc19CQUQsIF9JT19wb3NfYXNfb2ZmLAoJX0lPX3Bvc18wKTogRGl0dG8uCgkqIHN0cmVhbWJ1Zi5oIChzdHJlYW1vZmYsIHN0cmVhbXBvcyk6IERpdHRvLgoKCSogZ2VuLXBhcmFtcyAoX19leHRlbnNpb25fXyk6IFVzZSBvbmx5IGlmIGdjYyB2ZXJzaW9uID49IDIuOC4KClN1biBGZWIgIDEgMTM6MDg6MTggMTk5OCAgS3Jpc3RlciBXYWxmcmlkc3NvbiAoY2F0b0BkZi5sdGguc2UpCgoJKiBkYnovZGJ6LmMgKHB1dGNvbmYpOiBIYW5kbGUgc3lzdGVtcyB3aGljaCB1c2UgImxvbmcgbG9uZyIgYXMgdHlwZQoJZm9yICJvZmZfdCIuCgkqIGRiei9kYnptYWluLmMgKG1rZmlsZXMpOiBMaWtld2lzZS4KCldlZCBKYW4gMjggMTA6Mjc6MTEgMTk5OCAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogY29uZmlnLnNoYXJlZCAoRkxBR1NfVE9fUEFTUyk6IEFkZCBneHhfaW5jbHVkZV9kaXIuCgoJKiBzdGRpby9jb25maWd1cmUuaW4sIHRlc3RzL2NvbmZpZ3VyZS5pbjogVXBkYXRlIHdpdGggeWVzdGVyZGF5J3MKCXRvcGxldmVsIGNvbmZpZ3VyZS5pbiBjaGFuZ2VzLgoJKiB0ZXN0c3VpdGUvY29uZmlndXJlLmluOiBMaWtld2lzZS4KCgkqIGNvbmZpZy5zaGFyZWQ6IEZpeCB0eXBvIGluIHllc3RlcmRheSdzIGNoYW5nZXMuCgpUdWUgSmFuIDI3IDIzOjI2OjA3IDE5OTggIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGNvbmZpZy5zaGFyZWQ6IEVtaXQgZXZlcnl0aGluZyB3aGljaCBuZWVkcyB0byBiZSByZS1kZWZpbmFibGUKCXZpYSBmaWxlIGRlc2NyaXB0b3IgMTsgdGhlIGdlbmVyaWMgc3R1ZmYgaXMgZW1pdHRlZCB1c2luZyByZWRpcmVjdGlvbgoJb250byBmZCAyLgoKCSogY29uZmlndXJlLmluIChwYWNrYWdlX21ha2VmaWxlX3J1bGVzX2ZyYWcpOiBOZXcgdmFyaWFibGUKCXdoaWNoIGlzIHVzZWQgaW4gdGhlIGNhbGwgdG8gY29uZmlnLnNoYXJlZDsgcmVkaXJlY3QgZmlsZSBkZXNjcmlwdG9yIDIKCXRvICR7cGFja2FnZV9tYWtlZmlsZV9ydWxlc19mcmFnfS4KClR1ZSBKYW4gMjcgMTA6MzU6MjIgMTk5OCAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogY29uZmlndXJlLmluICh0b3BzcmNkaXIpOiBOZXcuCgkoQ0hFQ0tfU1VCRElSUywgY29uZmlnZGlycyk6IENoZWNrICR7dG9wc3JjZGlyfS9nY2MgaW5zdGVhZC4KCShjb25maWctbWwuaW4pOiBVc2UgJHt0b3BzcmNkaXJ9L2NvbmZpZy1tbC5pbi4KCgkqIHRlc3RzL2NvbmZpZ3VyZS5pbiAodG9wc3JjZGlyKTogTmV3LgoJKENIRUNLKTogQ2hlY2sgJHt0b3BzcmNkaXJ9L2djYyBpbnN0ZWFkLgoKRnJpIEphbiAxNiAwMDo0ODowMyAxOTk4ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAbHRzLnNlbC5hbGNhdGVsLmRlPgoKCSogY29uZmlnLnNoYXJlZCAoRkxBR1NfVE9fUEFTUyk6IEFkZCBTSEVMTC4KClRodSBKYW4gMTUgMDA6MjE6NTggMTk5OCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluOiBGb3IgKi0qLWN5Z3dpbjMyKiwgYWRkIGEgLUkgZm9yIHdpbnN1cCB0byBib3RoCglYQ0lOQ0xVREVTIGFuZCBYQ1hYSU5DTFVERVMuCgkqIGNvbmZpZy5zaGFyZWQ6IFVzZSAke2hvc3RfaW5jbHVkZXN9IHdoZW4gc2V0dGluZyBDWFhJTkNMVURFUyBpbgoJdGhlIERPSU5HX0xJQkdYWCBjYXNlLgoJKiBNYWtlZmlsZS5pbiAoX0dfY29uZmlnLmgpOiBQYXNzICQoQ0lOQ0xVREVTKSBpbiBDQyBhbmQKCSQoQ1hYSU5DTFVERVMpIGluIENYWCB3aGVuIHJ1bm5pbmcgZ2VuLXBhcmFtcy4KClR1ZSBKYW4gMTMgMjE6MzI6MDggMTk5OCAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogY29uZmlndXJlLmluIChDSEVDS19TVUJESVJTKTogU2V0IHRvIHRlc3RzdWl0ZSBvbmx5IGlmCgkke3NyY2Rpcn0vLi4vZ2NjIGV4aXN0cy4KCShjb25maWdkaXJzKTogSW5jbHVkZSB0ZXN0c3VpdGUgb25seSBpZiAke3NyY2Rpcn0vLi4vZ2NjIGV4aXN0cy4KCgkqIHRlc3RzL01ha2VmaWxlLmluIChjaGVjayk6IERlcGVuZCBvbiAkKENIRUNLKS4KCgkqIHRlc3RzL2NvbmZpZ3VyZS5pbiAoQ0hFQ0spOiBTZXQgdG8gImNoZWNrLWlvc3RyZWFtCgljaGVjay1zdGRpbyIgaWYgJHtzcmNkaXJ9Ly4uLy4uL2djYyBkb2Vzbid0IGV4aXN0cy4KClRodSBKYW4gIDggMTg6MDk6MDMgMTk5OCAgRnJlZCBGaXNoICA8Zm5mQGN5Z251cy5jb20+CgoJKiBjb25maWcuc2hhcmVkIChUSElTX0ZJTEUpOiBSZWFsbHkgZm91bmQgdmlhIFRPTElCSU8gaW5zdGVhZAoJb2YgVE9MSUJDWFgsIHdoaWNoIGlzIGVtcHR5IHdoZW4gY29uZmlndXJpbmcgZ3BlcmYuCgkoTElCUyk6IFdoZW4gbGlua2luZyBncGVyZiwgZmluZCBsaWJzdGRjKysgcmVsYXRpdmUgdG8gVE9fVE9QRElSCglpbnN0ZWFkIG9mIGhhcmRjb2RlZCAiLi4vIi4KCjE5OTctMTItMTIgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCglEb24ndCBtYWtlIGdwZXJmIGRlcGVuZCB1cG9uIGxpYmcrKy4KCSogY29uZmlnLnNoYXJlZCAoVE9MSUJHQ1hYKSBbRE9JTkdfR1BFUkZdOiBEZWxldGUuCgkoTElCUykgW0RPSU5HX0dQRVJGXTogTWFrZSBpdCBqdXN0IGAtTC4uL2xpYnN0ZGMrKyAtbHN0ZGMrKycuCgpUaHUgRGVjIDExIDExOjIwOjU5IDE5OTcgIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIGNvbmZpZ3VyZS5pbiAodGFyZ2V0IGZyYWdzKTogQWRkICotbGludXgtZ251LgoKRnJpIERlYyAgNSAxNjoyMjoxNSAxOTk3ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiBzdHJlYW1idWYuY2MgKHN0cmVhbWJ1Zjo6fnN0cmVhbWJ1Zik6IERvbid0IGRlbGV0ZSBfbG9jawoJZm9yIF9JT19zdGRpbi9fSU9fc3Rkb3V0L19JT19zdGRlcnIuCgpUaHUgTm92IDI3IDAxOjMyOjQzIDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogQ2hhbmdlIGd4eF9pbmNsdWRlZGlyIHRvIGdjY19pbmNsdWRlX2Rpci4KCSogY29uZmlnLnNoYXJlZCAoZ3h4X2luY2x1ZGVkaXIpOiBSZW1vdmUgZGVmYXVsdCBkZWZpbml0aW9uLgoJKiBjb25maWcvbGludXgubXQ6IENoYW5nZSBneHhfaW5jbHVkZWRpciB0byBneHhfaW5jbHVkZV9kaXIuCgkqIGNvbmZpZy9saW51eGF4cDEubXQ6IExpa2V3aXNlLgoKV2VkIE5vdiAyNiAxNjowODo1MCAxOTk3ICBSaWNoYXJkIEhlbmRlcnNvbiAgKHJ0aEBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluICh0YXJnZXQgZnJhZ3MpOiBBZGQgcG93ZXJwYyotbGludXgtZ251bGliYzEuCgkoc3RkaW8tbG9jayk6IFNpbWlsYXJseS4KCgkqIGNvbmZpZ3VyZS5pbiAodGFyZ2V0IGZyYWdzKTogQWRkIGFscGhhKi1saW51eC1nbnVsaWJjMS4KCShwaWMgZnJhZ3MpOiBJdHMgYWxwaGEqLSBub3QgYWxwaGEtLgoJKHN0ZGlvLWxvY2spOiBLaWxsIGV2ZXJ5dGhpbmcuICBBZGQgYWxwaGEqLWxpbnV4LWdudWxpYmMxLgoJKiBsaWJpby5oOiBDaGVjayBfX0dMSUJDX01JTk9SX18gdG8gZmluZCBzdGRpby1sb2NrLmguICBJZiBub3QKCV9JT19NVFNBRkVfSU8gJiBHTElCQywgbWFrZSBzdXJlIHRoZSBsb2NrIHBvaW50ZXIgaXMgc3RpbGwgdGhlcmUuCgkqIGxpYmlvUC5oOiBDaGVjayBfX0dMSUJDX01JTk9SX18gdG8gZmluZCBsaWJjLWxvY2suaC4KCgkqIGNvbmZpZy9saW51eGF4cDEtbGliYy1sb2NrLmg6IE5ldyBmaWxlLgoJKiBjb25maWcvbGludXhheHAxLXN0ZGlvLWxvY2suaDogTmV3IGZpbGUuCgkqIGNvbmZpZy9saW51eGF4cDEubXQ6IE5ldyBmaWxlLgoKCSogZ2VuLXBhcmFtcyAodmFfbGlzdCk6IENoZWNrIGZvciBhbmQgdXNlIF9fZ251Y192YV9saXN0LgoJKE5VTEwpOiBXb3JrIGFyb3VuZCBzb21lIGxpbnV4IGtlcm5lbCBoZWFkZXJzIGFuZCByZWRlZmluZSBOVUxMLgoKTW9uIE5vdiAyNCAxNzowNDoxOCAxOTk3ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIHN0ZGlvc3RyZWFtLmNjIChzeXNfcmVhZCk6IERlY2xhcmUgY2ggd2l0aCBpbnQgdHlwZSwgcmF0aGVyIHRoYW4KCXdpdGhvdXQgYSB0eXBlLgoKVHVlIE5vdiAxOCAwOTo1Mzo1OCAxOTk3ICBILkouIEx1ICAoaGpsQGdudS5haS5taXQuZWR1KQoKCSogc3Rkc3RyYnVmcy5jYyAoREVGX1NUREZJTEUpOiBVc2UgU1REX1ZUQUJMRS4KClR1ZSBOb3YgMTEgMDE6NDA6MTcgMTk5NyAgT2xlZyBLcml2b3NoZWV2IDxrcmlvbEBmbmFsLmdvdj4KCgkqIGlvbWFuaXAuaDogRml4IGd1aWRpbmcgZGVjbHMuCgoxOTk3LTExLTA1ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBsaWJpby5oIChfX1ApOiBOYW1lIGl0cyBhcmcgYHAnIGluc3RlYWQgb2YgYHBhcmFtcycuCglBdm9pZHMgcHJvYmxlbXMgd2l0aCBhbiB1bmNoYW5nZWQgU29sYXJpcyBtYXRoLmggaGVhZGVyLgoKV2VkIE9jdCAyOSAyMzowMTo0NyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBnZW4tcGFyYW1zOiBPdmVycmlkZSBOVUxMLgoKMTk5Ny0xMC0yNyAwMzo1MyAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBzdGRpby1sb2NrLmg6IFJlbW92ZWQuICBXYXMgbmV2ZXIgbmVlZGVkLgoKV2VkIE9jdCAyMiAxOToxOTozMiAxOTk3ICBILkouIEx1ICAoaGpsQGdudS5haS5taXQuZWR1KQoKCSogbGliaW8uaCAoX0lPX0xPQ0tfVCk6IEhhbmRsZSBnbGliYyAyIHdoZW4gX0lPX01UU0FGRV9JTyBpcwoJbm90IGRlZmluZWQuCgoJKiBpb3Zzc2NhbmYuYyAodnNzY2FuZik6IE1ha2UgaXQgd2VhayBhbGlhcyBvZiBfSU9fdnNzY2FuZiBpZgoJX19saW51eF9fIGlzIGRlZmluZWQgaW5zdGVhZCBvZiBfX0VMRl9fCgoJKiBjb25maWcvbGludXhsaWJjMS5tdCAoVVNFUl9JTkNMVURFUyk6IEFkZCBsaWJpby5oLgoKMTk5Ny0xMC0xNSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IENyZWF0ZSBjb21wYXRpYmlsaXR5IGNvZGUgaW4gYml0cy9saWJjLWxvY2suaCBmaWxlLgoKVGh1IE9jdCAgOSAwNzowODo0MSAxOTk3ICBILkouIEx1ICAoaGpsQGdudS5haS5taXQuZWR1KQoKCSogbGliaW8uaCAoX0lPX0xPQ0tfVCk6IEhhbmRsZSBnbGliYyAyIHdoZW4gX0lPX01UU0FGRV9JTyBpcwoJbm90IGRlZmluZWQuCgoJKiBmaWxlZG9hbGxvYy5jIChfSU9fZmlsZV9kb2FsbG9jYXRlKTogRG9uJ3QgY2FsbAoJX0lPX2NsZWFudXBfcmVnaXN0cmF0aW9uX25lZWRlZCBpZiBfX2xpbnV4X18gaXMgZGVmaW5lZC4KCgkqIGlvZmNsb3NlLmMgKGZjbG9zZSk6IE1ha2UgaXQgd2VhayBhbGlhcyBvZiBfSU9fZmNsb3NlIGlmCglfX0VMRl9fIGlzIGRlZmluZWQuCgoJKiBpb3ZzcHJpbnRmLmMgKHZzcHJpbnRmKTogTWFrZSBpdCB3ZWFrIGFsaWFzIG9mIF9JT192c3ByaW50ZgoJaWYgX19FTEZfXyBpcyBkZWZpbmVkLgoKCSogaW92c3NjYW5mLmMgKHZzc2NhbmYpOiBNYWtlIGl0IHdlYWsgYWxpYXMgb2YgX0lPX3Zzc2NhbmYgaWYKCV9fRUxGX18gaXMgZGVmaW5lZC4KCgkqIGNvbmZpZy9saW51eGxpYmMxLm10IChNVF9DRkxBR1MpOiBEZWZpbmVkIGFzIC1EX0dfSEFWRV9NTUFQLgoJKElPX09CSkVDVFMpOiBBZGQgZmlsZWRvYWxsb2MubyBmaWxlb3BzLm8gZ2Vub3BzLm8gaW9mY2xvc2UubwoJaW92c3ByaW50Zi5vIGlvdnNzY2FuZi5vIHN0cm9wcy5vLgoKRnJpIE9jdCAgMyAxMDoxMzoxMyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpb3N0cmVhbS5jYywgbGliaW8uaDogQ29udmVydCBvdGhlciB1c2VzIG9mICNpZmRlZgoJX0dfSEFWRV9QUklOVEZfRlAgdG8gI2lmLgoKMTk5Ny0xMC0wMiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogaW9zdHJlYW0uY2MgKG9wZXJhdG9yPDwpOiBVc2UgYCNpZiBfR19IQVZFX1BSSU5URl9GUCcsIG5vdCBpZmRlZi4KClRodSBPY3QgIDIgMTA6MzY6NDkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZ2VuLXBhcmFtczogRml4IF9fcHJpbnRmX2ZwIHRlc3QuCgkqIGNvbmZpZy9saW51eGxpYmMxLm10IChneHhfaW5jbHVkZWRpcik6IERvbid0IGRlZmluZS4KClRodSBPY3QgIDIgMTA6MzY6MjYgMTk5NyAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJ0bC5jeWdudXMuY29tPgoKCSogY29uZmlnL2xpbnV4bGliYzEubXQgKF9HX0NPTkZJR19IKTogRG9uJ3QgZGVmaW5lLgoJKiBnZW4tcGFyYW1zOiBBZGQgdGVzdCBmb3IgX19wcmludGZfZnAuCgpTdW4gU2VwIDI4IDEyOjA5OjA0IDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCiAgICAgICAgKiBpb21hbmlwLmg6IFVzZSBuZXcgZnJpZW5kIDw+IHN5bnRheC4KClN1biBTZXAgMjggMTI6MDQ6MjEgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbGliaW8uaDogRG9uJ3QgdXNlIF9JT19MT0NLX1QgaWYgaXQncyBub3QgZGVmaW5lZC4KCkZyaSBTZXAgMjYgMjA6NTY6NDEgMTk5NwoKCUJhc2VkIG9uIGEgcGF0Y2ggYnkgSC5KLiBMdSAgKGhqbEBnbnUuYWkubWl0LmVkdSkuCgoJKiBNYWtlZmlsZS5pbiAoU1RESU9fT0JKRUNUUyk6IE5ldy4gRGVmaW5lZCBhcyBzdGRmaWxlcy5vLgoJKExJQklPX09CSkVDVFMpOiBBZGQgJChTVERJT19PQkpFQ1RTKS4KCShQSUNGTEFHKTogTmV3LCBlbXB0eS4gIG1vdmVkIHRvIGhlcmUgZnJvbSBjb25maWcuc2hhcmVkLgoKCSogY29uZmlnLnNoYXJlZCAoRElTVENMRUFOKTogQWRkIHRhcmdldC1ta2ZyYWcuCgkoUElDRkxBRyk6IFJlbW92ZWQuCgoJKiBjb25maWd1cmUuaW4gKCotbGludXgtZ251bGliYzEpOiBSZW1vdmUgd2FybmluZy4KCSgqLWxpbnV4LWdudSk6IFVzZSBsaW51eC5tdCBtdHNhZmUubXQuCgkoYWxwaGEtKi1saW51eCopOiBVc2UgbWgtZWxmYWxwaGFwaWMuCgoJKiBnZW4tcGFyYW1zIChfR191bGxvbmcpOiBBbHNvIGNoZWNrIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQuCgkoX0dfbGxvbmcpOiBBbHNvIGNoZWNrIGxvbmcgbG9uZyBpbnQuCgoJKiBsaWJpby5oIChfSU9fbG9ja190KTogQWRkIHN1cHBvcnQgZm9yIHRoZSBMaW51eCBsaWJjIDUuCgkoX0lPX3BlZWtjKTogRGVmaW5lZCBhcyBfSU9fcGVla2NfdW5sb2NrZWQgaWYgX0lPX01UU0FGRV9JTwoJaXMgbm90IGRlZmluZWQuCgoJKiBpb3N0cmVhbS5jYyAoX19jdnRfZG91YmxlKTogRml4IGEgdHlwbyBpbiBkZWNsYXJhdGlvbi4KCShpbmZvKTogVXNlIGV4cHIgIT0gMCB0byBpbml0aWFsaXplIHRoZSBiaXQgZmllbGRzLiBEb24ndAoJaW5pdGlhbGl6ZSAiZXh0cmEiIGZvciB0aGUgTGludXggbGliYyA1LgoKCSogc3RyZWFtYnVmLmggKF9HX05FRURfU1REQVJHX0gpOiBDaGFuZ2VkIGZyb20gX0lPX05FRURfU1REQVJHX0guCgoJKiBjb25maWcvbGludXgubXQgKFNURElPX09CSkVDVFMpOiBOZXcsIGVtcHR5LgoJKE1UX0NGTEFHUyk6IFJlbW92ZWQuCgoJKiBjb25maWcvbGludXhsaWJjMS5tdDogUmV3cml0ZS4gIGl0J3MgaWRlbnRpY2FsIHRvIGxpbnV4Lm10IGJ1dAoJSU9fT0JKRUNUUyBtZW50aW9ucyBmaWxlcyBub3QgaW4gZWFybHkgbGliYzUgdmVyc2lvbnMuCgoJKiBjb25maWcvbXRzYWZlLm10OiBOZXcuCgoJKiBkYnovTWFrZWZpbGUuaW4gKGNoZWNrKTogU3VwcG9ydCBtYWtlIC1qLgoKCSogdGVzdHMvdEZpbGUuY2MgKHRlbXBmaWxlKTogRml4IGEgdHlwby4KCjE5OTctMDktMTkgMTE6NTIgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChMSUJJT19PQkpFQ1RTKTogRGVwZW5kIG9uIF9HX0NPTkZJR19ILgoKMTk5Ny0wOS0xNyAwNDowOCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBpb3N0cmVhbS5jYzogQWRkIGZvcndhcmQgZGVjbGFyYXRpb24gZm9yIF9fY3Z0X2RvdWJsZS4KCSogbGliaW8uaDogRGVmaW5lIF9JT19VU0VfRFRPQSBpcyBfR19IQVZFX1BSSU5URl9GUCBpcyBub3QgZGVmaW5lZC4KCSogc3Ryb3BzLmMgKF9JT19zdHJfY291bnQpOiBDb3JyZWN0IGxhc3QgY2hhbmdlLgoKMTk5Ny0wOS0xNyAwMjo1MCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBsaWJpb1AuaDogRGVmaW5lIF9fc2V0X2Vycm5vIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuCgoxOTk3LTA5LTE1IDAyOjM3ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9saW51eC5tdDogUmV3cml0ZSBmb3IgdXNlIHdpdGggZ2xpYmMgMi4KCSogY29uZmlnL2xpbnV4bGliYzEubXQ6IE9sZCBjb250ZW50IG9mIGxpbnV4Lm10LCBmaXIgbGliYzQgYW5kCglsaWJjNS4KCgkqIGNvbmZpZy5zaGFyZWQgKENPTVBJTEUuYyk6IEFsbG93IG5ldyBmbGFncyBpbiBNVF9DRkxBR1MgYmUKCXBhc3NlZC4KCShDT01QSUxFLmNjKTogTGlrZXdpc2UuCgoJKiBjb25maWd1cmUuaW4gKCotbGludXgqKTogUmVtb3ZlIGdvYWwuICBXZSBub3cgaGF2ZS4uLgoJKCotbGludXgtZ251bGliYzEpOiBGb3IgbGliYzQgYW5kIGxpYmM1LiAgRW1pdCB3YXJuaW5nLgoJKCotbGludXgtZ251KSk6IEZvciBnbGliYyAyLgoJQ3JlYXRlIGxpbmtzIHRvIGZpbmQgaGVhZGVycyBmb3IgbXVsdGktdGhyZWFkaW5nIGlmIG5lY2Vzc2FyeS4KCgkqIGZpbGVvcHMuYzogTWFrZSB0aHJlYWQtc2FmZSBieSB1c2luZyBfSU9fY2xlYW51cF9yZWdpb25fc3RhcnQKCWV0YyB0byBoYW5kbGUgY2FuY2VsYXRpb24uICBBY3F1aXJlIGxvY2tzIGluIGZ1bmN0aW9ucyB3aGljaCBhcmUKCWNhbGxlZCBkaXJlY3RseS4KCShfSU9fZmlsZV9yZWFkLCBfSU9fZmlsZV93cml0ZSk6IFJlbW92ZSBkZWFkIGNvZGUuCgoJKiBpbmNsdWRlL2VtcHR5Lmg6IERlZmluZSBzdHViIG1hY3JvcyBmb3IgbG9ja2luZy4KCgkqIGlvbGliaW8uaDogQWRkIHByb3RvdHlwZXMgZm9yIG9ic3RhY2sgcHJpbnRpbmcgZnVuY3Rpb25zLgoKCSogaW9zZWVrb2ZmLmMgKF9JT19zZWVrb2ZmKTogTG9jayBzdHJlYW0gYmVmb3JlIHdvcmtpbmcuCgkqIGlvc2Vla3Bvcy5jIChfSU9fc2Vla3Bvcyk6IExpa2V3aXNlLgoKCSogaW9zdHJlYW0uY2M6IEFkZCBzdXBwb3J0IGZvciBsb25nIGRvdWJsZSBJL08uCglVc2UgX19wcmludGZfZnAgZnJvbSBnbGliYyBpcyBhdmFpbGFibGUuCglVc2UgX0lPX2NsZWFudXBfcmVnaW9uX3N0YXJ0IHRvIGhhbmRsZSBjYW5jZWxhdGlvbiBjb3JyZWN0bHkuCgkqIGlvc3RyZWFtLmggKGNsYXNzIG9zdHJlYW0pOiBDaGFuZ2Ugb3BmeCBhbmQgb3NmeCB0byBsb2NrL3VubG9jawoJc3RyZWFtCgkoY2xhc3MgaXN0cmVhbSk6IExpa2V3aXNlIGZvciBpcGZ4LCBpcGZ4MCwgaXBmeDEsIGFuZCBpc2Z4LgoJRGVjbGFyZSBuZXcgZnVuY3Rpb24gbG9jayBhbmQgdW5sb2NrIGZvciBvc3RyZWFtIGFuZCBpc3RyZWFtLgoJKiBvc2Zvcm0uY2M6IFVzZSBfSU9fY2xlYW51cF9yZWdpb25fc3RhcnQgdG8gaGFuZGxlIGNhbmNlbGF0aW9uCgljb3JyZWN0bHkuCgoJKiBsaWJpby5oOiBVcGRhdGUgZnJvbSBnbGliYyB2ZXJzaW9uLiAgUHJldHR5IHByaW50aW5nLgoJKiBsaWJpb1AuaDogTGlrZXdpc2UuCgoJKiBvdXRmbG9hdC5jOiBPbmx5IGNvbXBpbGUgaWYgX0lPX1VTRV9EVE9BIGlzIGRlZmluZWQuCgoJKiBzdGRpby9mZW9mLmM6IE1ha2UgdGhyZWFkIHNhZmUuCgkqIHN0ZGlvL2ZlcnJvci5jOiBMaWtld2lzZS4KCSogc3RkaW8vZ2V0Yy5jIDogTGlrZXdpc2UuCgkqIHN0ZGlvL3B1dGMuYyA6IExpa2V3aXNlLgoJKiBzdGRpby9zdGRpby5oOiBEZWNsYXJlIGZ1bmN0aW9uIG9mIHRocmVhZC1zYWZlIEFQSS4KCgkqIHN0ZGlvL29icHJpbnRmLmM6IE5ldyBmaWxlLgoJKiBzdGRpby92YXNwcmludGYuYzogTmV3IGZpbGUuCgoJKiBzdGRpby1sb2NrLmg6IFJlbW92ZWQuCgoJKiBzdGRzdHJidWZzLmM6IEFkZCBkZWZpbml0aW9ucyBmb3IgdGhyZWFkLXNhZmUgc3RyZWFtcy4KCgkqIHN0cmVhbWJ1Zi5jYzogSW5pdGlhbGl6ZSBsb2NrLgoKCSogc3Ryb3BzLmMgKF9JT19zdHJfY291bnQpOiBVbmRvIGxhc3QgY2hhbmdlLgoKCSogdGVzdHMvdEZpbGUuY2M6IFN1cHBvcnQgcGFyYWxsZWwgYnVpbGRzIGJ5IGF2b2lkaW5nIGZpeGVkCgluYW1lIGZvciB0ZXN0IGZpbGUuCgpUaHUgU2VwIDExIDE4OjQzOjU2IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChpb3N0cmVhbS5saXN0KTogUmVtb3ZlIFNURElPX1dSQVBfT0JKRUNUUy4KCk1vbiBTZXAgIDggMDE6MzA6MjcgMTk5NyAgV2Vpd2VuIExpdSAgICA8bGl1QGhlcHVuaXgucGh5c2ljcy55YWxlLmVkdT4KCgkqIGxpYmlvLmg6IEZpeCB0eXBvLgoKU3VuIFNlcCAgNyAyMzowMDoxOCAxOTk3ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCgoJKiBsaW51eC5tdCAoTElCSU9TVFJFQU1fREVQKTogQ2hhbmdlIHN0ZGlvLmxpc3QgdG8gc3RtcC1zdGRpby4KCkZyaSBTZXAgIDUgMDk6NTg6NDMgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGlvc3RyZWFtLmxpc3QpOiBJbnN0ZWFkIG9mIGFkZGluZyBzdGRpby5saXN0LCBhZGQKCVNURElPX1dSQVBfT0JKRUNUUy4KCShpb3N0cmVhbS5saXN0KTogTG9zZSBkZXBlbmRlbmN5IG9uIHN0bXAtc3RkaW8sIG5vdCBuZWNlc3NhcnkgZm9yCglvdXIgc3R1ZmYuICBUaGUgc3RkaW8gc3R1ZmYgaXMgcHJlc2VudCBoZXJlIGp1c3QgZm9yIHVuaWZvcm1pdHkKCXdpdGggZ2xpYmMuCgpUaHUgU2VwICA0IDE3OjI2OjIyIDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHBhcnNlc3RyZWFtLmNjIChnZW5lcmFsX3BhcnNlYnVmKTogQ2FzdCByZXR1cm4gb2YgbWFsbG9jIHRvIGNoYXIqLgoKMTk5Ny0wOS0wNCAxNjoxMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJQ2hhbmdlIGNvbXBhcmVkIHRvIHZlcnNpb24gaW5pdGlhbGx5IGludGVuZGVkIHRvIGluOgoJKiBzdHJvcHMuYyAoX0lPX3N0cl9jb3VudCk6IFN0aWxsIHVzZSBfSU9fd3JpdGVfcHRyLCBub3QKCV9JT193cml0ZV9lbmQsIGZvciBub3cuCgoJKiBpb2Zlb2YuYywgaW9mZXJyb3IuYywgaW9mZmx1c2hfdS5jLCBpb2dldGMuYywgaW9wdXRjLmMsIHBlZWtjLmMsCglzdGRpby1sb2NrLmg6IE5ldyBmaWxlcy4KCgkqIGluY2x1ZGU6IE5ldyBkaXIuCgkqIGluY2x1ZGUvZW1wdHkuaDogTmV3IGhlYWRlci4KCgkqIGZpbGVkb2FsbG9jLmM6IFVwZGF0ZSBhbmQgcmVmb3JtYXQgY29weXJpZ2h0LgoJRG9uJ3QgdXNlIERFRlVOLgoJVXNlIF9fc2V0X2Vycm5vIHRocm91Z2hvdXQgdGhlIGNvZGUgdG8gc3VwcG9ydCBtdWx0aS10aHJlYWRlZAoJcHJvZ3JhbXMuCglDb3JyZWN0IGxheW91dCB0byBmb2xsb3cgdGhlIENvZGluZyBTdGFuZGFyZC4KCUFkZCBjYXN0cyB0byBwcmV2ZW50IHdhcm5pbmdzLgoJKiBmaWxlb3BzLmM6IExpa2V3aXNlLgoJKiBnZW5vcHMuYzogTGlrZXdpc2UuCgkqIGlvZmNsb3NlLmM6IExpa2V3aXNlLgoJKiBpb2Zkb3Blbi5jOiBMaWtld2lzZS4KCSogaW9mZmx1c2guYzogTGlrZXdpc2UuCgkqIGlvZmdldHBvcy5jOiBMaWtld2lzZS4KCSogaW9mZ2V0cy5jOiBMaWtld2lzZS4KCSogaW9mb3Blbi5jOiBMaWtld2lzZS4KCSogaW9mcHJpbnRmLmM6IExpa2V3aXNlLgoJKiBpb2ZwdXRzLmM6IExpa2V3aXNlLgoJKiBpb2ZyZWFkLmM6IExpa2V3aXNlLgoJKiBpb2ZzZXRwb3MuYzogTGlrZXdpc2UuCgkqIGlvZnRlbGwuYzogTGlrZXdpc2UuCgkqIGlvZndyaXRlLmM6IExpa2V3aXNlLgoJKiBpb2dldGRlbGltLmM6IExpa2V3aXNlLgoJKiBpb2dldGxpbmUuYzogTGlrZXdpc2UuCgkqIGlvZ2V0cy5jOiBMaWtld2lzZS4KCSogaW9wYWRuLmM6IExpa2V3aXNlLgoJKiBpb3BvcGVuLmM6IExpa2V3aXNlLgoJKiBpb3B1dHMuYzogTGlrZXdpc2UuCgkqIGlvc2Vla29mZi5jOiBMaWtld2lzZS4KCSogaW9zZXRidWZmZXIuYzogTGlrZXdpc2UuCgkqIGlvc2V0dmJ1Zi5jOiBMaWtld2lzZS4KCSogaW9zcHJpbnRmLmM6IExpa2V3aXNlLgoJKiBpb3VuZ2V0Yy5jOiBMaWtld2lzZS4KCSogaW92c3ByaW50Zi5jOiBMaWtld2lzZS4KCSogaW92c3NjYW5mLmM6IExpa2V3aXNlLgoJKiBsaWJpby5oOiBMaWtld2lzZS4KCSogbGliaW9QLmg6IExpa2V3aXNlLgoJKiBzdGRmaWxlcy5jOiBMaWtld2lzZS4KCSogc3RyZmlsZS5oOiBMaWtld2lzZS4KCSogc3Ryb3BzLmM6IExpa2V3aXNlLgoKCSogTWFrZWZpbGUuaW4gKElPX09CSkVDVFMpOiBBZGQgcGVla2MubywgaW9nZXRjLm8sIGlvcHV0Yy5vLAoJaW9mZW9mLm8sIGFuZCBpb2ZlcnJvci5vLgoJKGlvc3RyZWFtLmxpc3QpOiBEZXBlbmQgdXBvbiBzdG1wLXN0ZGlvLiAgQWRkIHRoZSBlbnRyaWVzCglmcm9tIHN0ZGlvLmxpc3QgdG8gaW9zdHJlYW0ubGlzdC4KCShzdG1wLXN0ZGlvKTogTmV3IG5hbWUgZm9yIHdoYXQgd2FzIHRoZSBzdGRpby9zdGRpby5saXN0IHJ1bGUuCglBbGwgaXQgbm93IGRvZXMgaXMgY2QgZG93biBpbnRvIHN0ZGlvIGFuZCBidWlsZCBzdGRpby5saXN0LgoKCSogY29uZmlndXJlLmluIChBTEwpOiBBZGQgbGliaW9zdHJlYW0uYS4KCgkqIGxpYmlvLmggW19JT19NVFNGRV9JT106IEluY2x1ZGUgaGVhZGVyIGRlY2xhcmluZyBsb2NraW5nIGNvZGUuCglPdGhlcndpc2UgZGVmaW5lIG9wYXF1ZSBfSU9fbG9ja190LgoJRGVmaW5lIF9JT19jb29raWVfZmlsZS4KCVJlbmFtZSBfSU9fZ2V0YyB0byBfSU9fZ2V0Y191bmxvY2tlZCwgX0lPX3BlZWtjIHRvIF9JT19wZWVrY191bmxvY2tlZCwKCV9JT19wdXRjIHRvIF9JT19wdXRjX3VubG9ja2VkLCBfSU9fZmVvZiB0byBfSU9fZmVvZl91bmNsb2NrZWQsIGFuZAoJX0lPX2ZlcnJvciB0byBfSU9fZmVycm9yX3VubG9ja2VkLgoJQWRkIHByb3RvdHlwZXMgZm9yIF9JT19nZXRjLCBfSU9fcHV0YywgX0lPX2Zlb2YsIF9JT19mZXJyb3IsCglhbmQgX0lPX3BlZWtjX2xvY2tlZC4KCUFkZCBkZWNsYXJhdGlvbnMgZm9yIF9JT19mbG9ja2ZpbGUsIF9JT19mdW5sb2NrZmlsZSwgYW5kCglfSU9fZnRyeWxvY2tmaWxlLiAgSWYgIV9JT19NVFNBRkVfSU8gZGVmaW5lIF9JT19mbG9ja2ZpbGUsCglfSU9fZnVubG9ja2ZpbGUsIF9JT19mdHJ5bG9ja2ZpbGUsIF9JT19jbGVhbnVwX3JlZ2lvbl9zdGFydCwgYW5kCglfSU9fY2xlYW51cF9yZWdpb25fZW5kIGFzIGVtcHR5IG1hY3Jvcy4KCgkqIGxpYmlvUC5oOiBDaGFuZ2UgdHlwZSBvZiBmaW5pc2ggZnVuY3Rpb24gdG8gdGFrZSBhbiBhZGRpdGlvbmFsIGludAoJYXJndW1lbnQgYW5kIGNoYW5nZSBkZWNsYXJhdGlvbiBvZiBmaW5pc2ggZnVuY3Rpb25zLgoJQWRkIHByb3RvdHlwZXMgZm9yIF9JT19zZWVrb2ZmIGFuZCBfSU9fc2Vla3Bvcy4KCUlmIF9HX0hBVkVfTU1BUCBpcyBkZWZpbmVkIHVzZSBzdHJlYW0gYnVmZmVycyBhbGxvY2F0ZWQgd2l0aCBtbWFwLgoJUmVkZWZpbmUgRlJFRV9CVUYgYW5kIEFMTE9DX0JVRiBtYWNyb3MgdG8gaGVscCBpbiBib3RoIHNpdHVhdGlvbnMuCgkoRklMRUJVRl9MSVRFUkFMKTogSWYgd2UgY29tcGlsZSBmb3IgYSB0aHJlYWQtc2FmZSBsaWJyYXJ5IGFsc28KCWluaXRpYWxpemUgbG9jayBtZW1iZXIuCgoJKiBmaWxlZG9hbGxvYy5jOiBUYWtlIGNhcmUgZm9yIHN5c3RlbXMgYWxyZWFkeSBkZWZpbmluZyBfUE9TSVhfU09VUkNFLgoJS2VlcCBuYW1lIHNwYWNlIGNsZWFuIG9uIHN5c3RlbXMgd2hpY2ggcmVxdWlyZSB0aGlzLgoJKF9JT19maWxlX2RvYWxsb2NhdGUpOiBBZG9wdCBBTExPQ19CVUYgY2FsbCBmb3IgY2hhbmdlZCBzZW1hbnRpYy4KCgkqIGZpbGVvcHMuYzogS2VlcCBuYW1lIHNwYWNlIGNsZWFuIG9uIHN5c3RlbXMgd2hpY2ggcmVxdWlyZSB0aGlzLgoJKF9JT19maWxlX2F0dGFjaCk6IERvbid0IGZhaWwgaWYgc2VlayBmYWlsZWQgYmVjYXVzZSBpdCdzIHVzZWQgb24gYQoJcGlwZS4KCShfSU9fZmlsZV91bmRlcmZsb3cpOiBVcGRhdGUgYnVmZmVyIHBvaW50ZXJzIGJlZm9yZSBjYWxsaW5nIGByZWFkJwoJc2luY2UgdGhlIGByZWFkJyBtaWdodCBub3QgcmV0dXJuIGFueW1vcmUuCgkoX0lPX2ZpbGVfb3ZlcmZsb3cpOiBJZiBzdHJlYW0gYWxsb3dzIG5vIHdyaXRlcyBzZXQgZXJyb3IgZmxhZy4KCShfSU9fc2Vla29mZik6IE1ha2Ugc3VyZSB0aGF0IGFmdGVyIGZsdXNoaW5nIHRoZSBmaWxlIHBvaW50ZXIgaW4KCXRoZSB1bmRlcmx5aW5nIGZpbGUgaXMgZXhhY3QuCgkoX0lPX2ZpbGVfcmVhZCk6IERvbid0IHJlc3RhcnQgYHJlYWQnIHN5c2NhbGwgaWYgaXQgcmV0dXJuIEVJTlRSLgoJVGhpcyB2aW9sYXRlcyBQT1NJWC4KCShfSU9fZmlsZV93cml0ZSk6IExpa2V3aXNlIGZvciBgd3JpdGUnLgoJKF9JT19jbGVhbnVwKTogSW5zdGFsbCBhcyBleGl0IGhhbmRsZXIgaW4gZ2xpYmMuCgoJKiBnZW5vcHMuYyAoX0lPX3NldGIpOiBDb3JyZWN0bHkgdXNlIEZSRUVfQlVGLgoJKF9JT19kZWZhdWx0X2RvYWxsb2NhdGUpOiBDb3JyZWN0bHkgdXNlIEFMTE9DX0JVRi4KCShfSU9faW5pdCk6IEluaXRpYWxpemUgbG9jayBpbiBzdHJlYW0gc3RydWN0dXJlLgoJKF9JT19kZWZhdWx0X2ZpbmlzaCk6IERlc3Ryb3kgbG9jay4KCShfSU9fZ2V0X2NvbHVtbik6IERvbid0IGNvbXBpbGUgc2luY2UgaXQncyBub3QgbmVlZGVkLgoJKF9JT19ub2JhY2t1cF9kZWZhdWx0KTogTGlrZXdpc2UuCgoJKiBpb3BvcGVuLmM6IFRha2UgY2FyZSBmb3Igc3lzdGVtcyBhbHJlYWR5IGRlZmluaW5nIF9QT1NJWF9TT1VSQ0UuCglDb3JyZWN0IF9JT19mb3JrIGFuZCBfSU9fZHVwMiBwcm90b3R5cGVzLgoKCSogaW9mY2xvc2UuYzogQWNxdWlyZSBsb2NrIGJlZm9yZSBzdGFydGluZyB0aGUgd29yay4KCSogaW9mZmx1c2guYzogTGlrZXdpc2UuCgkqIGlvZmdldHBvcy5jOiBMaWtld2lzZS4KCSogaW9mZ2V0cy5jOiBMaWtld2lzZS4KCSogaW9mcHV0cy5jOiBMaWtld2lzZS4KCSogaW9mcmVhZC5jOiBMaWtld2lzZS4KCSogaW9mc2V0cG9zLmM6IExpa2V3aXNlLgoJKiBpb2Z0ZWxsLmM6IExpa2V3aXNlLgoJKiBpb2Z3cml0ZS5jOiBMaWtld2lzZS4KCSogaW9nZXRkZWxpbS5jOiBMaWtld2lzZS4KCSogaW9nZXRzLmM6IExpa2V3aXNlLgoJKiBpb3B1dHMuYzogTGlrZXdpc2UuCgkqIGlvc2V0YnVmZmVyLmM6IExpa2V3aXNlLgoJKiBpb3NldHZidWYuYzogTGlrZXdpc2UuCgkqIGlvdW5nZXRjLmM6IExpa2V3aXNlLgoKCSogaW9mZG9wZW4uYzogQ3JlYXRlIGFuZCBpbml0aWFsaXplIGxvY2sgZm9yIG5ldyBzdHJlYW0uCgkqIGlvZm9wZW4uYzogTGlrZXdpc2UuCgkqIGlvcG9wZW4uYyAoX0lPX3BvcGVuKTogTGlrZXdpc2UuCgkqIGlvdnNwcmludGYuYzogTGlrZXdpc2UuCgkqIGlvdnNzY2FuZi5jOiBMaWtld2lzZS4KCgkqIGdlbm9wcy5jOiBNYWtlIHdlYWsgYWxpYXNlcyBmb3IgdmFyaW91cyBmdW5jdGlvbnMuCgkqIGlvZmNsb3NlLmM6IExpa2V3aXNlLgoJKiBpb2Zkb3Blbi5jOiBMaWtld2lzZS4KCSogaW9mZmx1c2guYzogTGlrZXdpc2UuCgkqIGlvZmdldHBvcy5jOiBMaWtld2lzZS4KCSogaW9mZ2V0cy5jOiBMaWtld2lzZS4KCSogaW9mb3Blbi5jOiBMaWtld2lzZS4KCSogaW9mcHV0cy5jOiBMaWtld2lzZS4KCSogaW9mcmVhZC5jOiBMaWtld2lzZS4KCSogaW9mc2V0cG9zLmM6IExpa2V3aXNlLgoJKiBpb2Z0ZWxsLmM6IExpa2V3aXNlLgoJKiBpb2Z3cml0ZS5jOiBMaWtld2lzZS4KCSogaW9nZXRkZWxpbS5jOiBMaWtld2lzZS4KCSogaW9nZXRzLmM6IExpa2V3aXNlLgoJKiBpb3B1dHMuYzogTGlrZXdpc2UuCgkqIGlvc2V0YnVmZmVyLmM6IExpa2V3aXNlLgoJKiBpb3NldHZidWYuYzogTGlrZXdpc2UuCgkqIGlvdW5nZXRjLmM6IExpa2V3aXNlLgoJKiBpb3ZzcHJpbnRmLmM6IExpa2V3aXNlLgoJKiBpb3Zzc2NhbmYuYzogTGlrZXdpc2UuCgoJKiBpb2ZmbHVzaF91LmM6IE5ldyBmaWxlLiAgZmZsdXNoX3VubG9ja2VkIGltcGxlbWVudGF0aW9uLgoKCSogaW9zdHJlYW0uaCBbX0dfSEFWRV9MT05HX0RPVUJMRV9JT106IERlY2xhcmUgcmVhbCBsb25nIGRvdWJsZQoJb3V0cHV0IG9wZXJhdG9yLgoKCSogcGVla2MuYzogTmV3IGZpbGUuICBJbXBsZW1lbnQgX0lPX3BlZWtjX2xvY2tlZCBmdW5jdGlvbi4KCgkqIHN0ZGZpbGVzLmM6IElmIHdlIGNvbXBpbGUgZm9yIGEgdGhyZWFkLXNhZmUgbGlicmFyeSBhbHNvIGRlZmluZQoJbG9jayB2YXJpYWJsZS4KClR1ZSBBdWcgMjYgMTI6MjQ6MDEgMTk5NyAgSC5KLiBMdSAgKGhqbEBnbnUuYWkubWl0LmVkdSkKCgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbiAoY2hlY2spOiBEb24ndCBkZXBlbmQgb24gc2l0ZS5leHAuCgkoanVzdC1jaGVjayk6IERlcGVuZCBvbiBzaXRlLmV4cC4KCldlZCBBdWcgMjAgMDI6MDE6MzQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW9zdHJlYW0uaDogQWRkIGNvcHkgYXNzaWdubWVudCBvcHMgZm9yIF9JT18/c3RyZWFtX3dpdGhhc3NpZ24uCgpUdWUgSnVsIDIyIDEwOjMxOjQxIDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy5zaGFyZWQgKENIRUNLX1NVQkRJUlMpOiBVc2UgaW5zdGFsbC1zaCwgbm90IGluc3RhbGwuc2guCgpXZWQgSnVuIDI1IDEyOjIwOjU1IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy5zaGFyZWQgKERPSU5HX0dQRVJGKTogTG9vayBmb3IgdGhpcywgZGVmaW5pbmcgVE9MSUJHWFgKCWFuZCBMSUJTIGZvciBpdC4KCldlZCBKdW4gMTggMTE6MDM6MzQgMTk5NyAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBjb25maWcuc2hhcmVkIChGTEFHU19UT19QQVNTKTogRG9uJ3QgaW5jbHVkZSBSVU5URVNULgoKVHVlIEp1biAxNyAyMjoyMzo0OCAxOTk3ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy5zaGFyZWQgKEZMQUdTX1RPX1BBU1MpOiBQYXNzIFJVTlRFU1QgYW5kIFJVTlRFU1RGTEFHUy4KCkZyaSBNYXkgMTYgMjE6MDg6NTMgMTk5NyAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBpb3ZmcHJpbnRmLmM6IERlY2xhcmUgX19jdnRfZG91YmxlIGJlZm9yZSB1c2UuCgoJKiBmbG9hdGNvbnYuYyAoZDJiKTogVXNlIF9HX2ludDMyX3QgaW5zdGVhZCBvZiBpbnQgZm9yIHRoZQoJZSBhbmQgYml0cyBwYXJhbWV0ZXJzLgoJKF9JT19zdHJ0b2QpOiBVc2UgX0dfaW50MzJfdC4KCgkqIGdlbi1wYXJhbXM6IExvb2sgZm9yIE5PX1VTRV9EVE9BIGFuZCBVU0VfSU5UMzJfRkxBR1MuCgoJKiBzdHJvcHMuYyAoX0lPX3N0cl9pbml0X3N0YXRpYyk6IHVzZSBfR19pbnQzMl90IGFwcHJvcHJpYXRlbHkuCgoJKiBsaWJpby5oOiBJZiBfR19OT19VU0VfRFRPQSBpcyBzZXQsIHRoZW4gZG9uJ3QgZGVmaW5lCglfSU9fVVNFX0RUT0EuCgoJKiBjb25maWcvbW4xMDIwMC5tdDogRG9uJ3QgdXNlIGR0b2EsIGl0IG9ubHkgd29ya3MKCWZvciAicmVhbCIgZG91Ymxlcy4KClRodSBNYXkgMTUgMTc6NDQ6MTIgMTk5NyAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IFNldCBDSEVDS19TVUJESVJTIHRvIHRlc3RzdWl0ZSBpZiB3ZSdyZSBkb2luZwoJYSBjcm9zcyBjb21waWxlLgoKCSogY29uZmlnLnNoYXJlZChjaGVjayk6IE9ubHkgcnVuIG1ha2UgY2hlY2sgaW4gdGhlIGRpcmVjdG9yaWVzCglzcGVjaWZpZWQgYnkgQ0hFQ0tfU1VCRElSUy4gU2V0IENIRUNLX1NVQkRJUlMgdG8gU1VCRElSUwoJaWYgaXQgaGFzIG5vIHByZXZpb3VzIHZhbHVlLgoKVGh1IE1heSAgMSAxNzozNToxOSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAodGVzdCwgdHBpcGUpOiBBZGQgJChDRkxBR1MpLgoKV2VkIEFwciAzMCAxMjoxNjoyOSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IERvbid0IHR1cm4gb24gbXVsdGlsaWIgaGVyZS4KClNhdCBBcHIgMjYgMTM6Mzg6MjEgMTk5NyAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKGNvbmZpZ2RpcnMpOiBBZGQgdGVzdHN1aXRlIGRpcmVjdG9yeS4KCgkqIHRlc3RzdWl0ZS9DaGFuZ2VMb2c6CgkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjoKCSogdGVzdHN1aXRlL2xpYmlvLnRlc3RzL3Rpb21hbmlwLmV4cDoKCSogdGVzdHN1aXRlL2xpYmlvLnRlc3RzL3RzdGRpb21pc2MuZXhwOgoJKiB0ZXN0c3VpdGUvbGliaW8udGVzdHMvdGlvbWlzYy5leHA6CgkqIHRlc3RzdWl0ZS9saWJpby50ZXN0cy90RmlsZS5leHA6CgkqIHRlc3RzdWl0ZS9saWJpby50ZXN0cy90ZmZvcm1hdC5leHA6CgkqIHRlc3RzdWl0ZS9saWJpby50ZXN0cy90aWZvcm1hdC5leHA6CgkqIHRlc3RzdWl0ZS9saWJpby50ZXN0cy9ob3VuZGRvZy5leHA6CgkqIHRlc3RzdWl0ZS9saWJpby50ZXN0cy9wdXRiYWNrZG9nLmV4cDoKCSogdGVzdHN1aXRlL2NvbmZpZ3VyZS5pbjoKCSogdGVzdHN1aXRlL2xpYi9saWJpby5leHA6CgkqIHRlc3RzdWl0ZS9jb25maWcvZGVmYXVsdC5leHA6CglOZXcgZmlsZXMgZm9yIERlamFHbnUtc3R5bGUgdGVzdHN1aXRlLgoKRnJpIEFwciAgNCAwMzoxNjo0NCAxOTk3ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBlcHJAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogRW5hYmxlIG11bHRpbGliaW5nIGJ5IGRlZmF1bHQuCglVcGRhdGUgbXVsdGlsaWIgdGVtcGxhdGUgdG8gcmVhZCBjb25maWctbWwuaW4uCgoJKiBmbG9hdGNvbnYuYzogRW5hYmxlIHVzZSBpbiBjcm9zcyB0YXJnZXRzIHdoaWNoIHVzZSB0aGUKCW5ld2xpYiBpZWVlZnAuaCBoZWFkZXIuCgpUaHUgSmFuIDIzIDA5OjE2OjE2IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGxpYmlvUC5oIChfSU9fZmlsZV9hdHRhY2gpOiBEZWxldGUgcmVkdW5kYW50IGRlY2wuCgpUdWUgSmFuIDIxIDIyOjEzOjQ1IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHN0cmVhbWJ1Zi5oIChjbGFzcyBpb3MpOiBUYWtlIG91dCBTVFJFQU1TSVpFIG1lbWJlciwgc2luY2Ugd2UKCW9ubHkgbmVlZCAoYW5kIHNob3VsZCBvbmx5IGhhdmUpIHRoZSBnbG9iYWwgb25lLgoKVHVlIEphbiAgNyAxNDowMjo0MCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpb3N0cmVhbS5oIChsb25nIGxvbmcgZm5zKTogVXNlIF9fZXh0ZW5zaW9uX18uCgoJKiBnZW4tcGFyYW1zOiBVc2UgX0dfbGxvbmcgYW5kIF9HX3VsbG9uZyBpbnN0ZWFkIG9mIGxvbmcgbG9uZyBmb3IKCWRlZHVjZWQgdHlwZXMuCgpGcmkgRGVjICA2IDEzOjEzOjMwIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRiei9kYnouYzogVXNlIG9mZl90LgoKU2F0IE5vdiAyMyAxNTo0NDozNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IERvbid0IGluc3RhbGwgX0dfY29uZmlnLmggd2l0aCBvdGhlciBoZWFkZXJzLgoKTW9uIE5vdiAxOCAxNzoxMjo0MSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjb25maWcuc2hhcmVkIChTVUJESVJTKTogVXNlIC1PIGluc3RlYWQgb2YgLU8zIGZvciBkZWJ1Z2dpbmcuCgpTdW4gTm92ICAzIDEyOjQzOjM0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGlvc3RyZWFtLmNjICh3cml0ZV9pbnQpOiBUcmVhdCBzdHJpbmcgbGl0ZXJhbHMgYXMgY29uc3QuCgpUaHUgU2VwIDI2IDEwOjA5OjE4IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KCgkqIGRlcGVuZDogUmVnZW5lcmF0ZS4KCldlZCBTZXAgMjUgMjI6NTQ6NDUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY29uZmlnLnNoYXJlZCAoZGVwZW5kLm5ldyk6IERlYWwgd2l0aCBoZWFkZXJzIHRoYXQgZG9uJ3QgZW5kIGluIC5oLgoKVGh1IEF1ZyAyOSAxNzowNTo1MyAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKGlbMzQ1XTg2LSotKik6IFJlY29nbml6ZSBpNjg2IGZvciBwZW50aXVtIHByby4KCk1vbiBBdWcgIDUgMDE6MjY6MzIgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY29uZmlne3VyZS5pbiwuc2hhcmVkfSAoRElTVENMRUFOKTogQWRkIG11bHRpbGliLm91dC4KCkZyaSBBdWcgIDIgMTc6Mzk6MzUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbGliaW8uaCAoTlVMTCk6IFVzZSBfX251bGwuCgkqIGxpYmlvUC5oIChOVUxMKTogRGl0dG8uCgkqIHN0cmVhbWJ1Zi5oIChOVUxMKTogRGl0dG8uCgkqIGlvZXh0ZW5kLmNjIChnZXRfYXJyYXlfZWxlbWVudCk6IFVzZSBOVUxMIGluc3RlYWQgb2YgKHZvaWQqKTAuCgpGcmkgSnVsICA1IDE4OjI2OjQxIDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHN0cmZpbGUuaCAoc3RydWN0IF9JT19zdHJlYW1idWYpOiBOZXcgc3RydWN0IHR5cGUuCgkoc3RydWN0IF9JT19zdHJmaWxlKTogVXNlIGl0LgoKVHVlIEp1biAxOCAxODoyNDoyMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBmc3RyZWFtLmggKGZzdHJlYW1iYXNlKTogTWFrZSBfX215X2ZiIG11dGFibGUuCglGcm9tIEpvZSBCdWNrLgoKVHVlIEp1biAxOCAxMTowMzo1MyAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkYnovZmFrZS5jIChtYWluKTogU2V0IHJldHVybiB0eXBlIHRvIGludC4KCSogZGJ6L2Riem1haW4uYyAobWFpbik6IExpa2V3aXNlLgoJKiBkYnovYnl0ZWZsaXAuYyAobWFpbik6IExpa2V3aXNlLgoKTW9uIEp1biAxNyAxNDowNTozNiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBnZW4tcGFyYW1zOiBDaGVjayBpZiBjbG9nIGNvbmZsaWN0cyB3aXRoIHN5c3RlbSBsaWJyYXJpZXMuCgkqIHN0ZHN0cmVhbXMuY2M6IElmIGl0IGRvZXMsIHVzZSBfX0lPX2Nsb2cuCgkqIGlvc3RyZWFtLmg6IExpa2V3aXNlLgoKVHVlIEp1biAxMSAxMzozOTozMSAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBzdGRpb3N0cmVhbS5oIChpc3RkaW9zdHJlYW0gKEZJTEUqKSk6IFB1dCBpc3RyZWFtIGJhc2UKCWluaXRpYWxpemVyIGJlZm9yZSBpbml0IGZvciBfX2YuCgkob3N0ZGlvc3RyZWFtIChGSUxFKikpOiBMaWtld2lzZSBmb3Igb3N0cmVhbSBiYXNlIGluaXQuCgpUdWUgTWF5IDE0IDExOjQ3OjIxIDE5OTYgIFBlciBCb3RobmVyICA8Ym90aG5lckBhbmRyb3MuY3lnbnVzLmNvbT4KCgkqIHN0cmZpbGUuaCAoX0lPX3N0cl9maWVsZHMpOiAgUmVtb3ZlZCBfbGVuIGZpZWxkLgoJKF9JT19TVFJfRFlOQU1JQywgX0lPX1NUUl9GUk9aRU4pOiAgbmV3IG1hY3Jvcy4KCSogc3Ryc3RyZWFtLmggKHN0cnN0cmVhbWJ1Zjo6aXNfc3RhdGljKTogIFJlbW92ZWQuCgkoc3Ryc3RyZWFtYnVmOjpmcm96ZW4pOiAgVXNlIF9JT19TVFJfRFlOQU1JQyBpbnN0ZWFkIG9mIGlzX3N0YXRpYy4KCSogc3Ryc3RyZWFtLmgsIHN0cnN0cmVhbS5jYzogIFJlbW92ZSBzdXBwb3J0IGZvciAhX0lPX05FV19TVFJFQU1TLgoJKiBzdHJzdHJlYW0uY2MgKHN0cnN0cmVhbWJ1Zjo6aW5pdF9keW5hbWljKTogIERvbid0IHNldCBfcy5fbGVuLgoJKiBzdHJvcHMuYyAoX0lPX3N0cl9pbml0X3N0YXRpYyk6ICBCZXR0ZXIgaGFuZGxpbmcgb2YgdGhlCgluZWdhdGl2ZSAoPT0gdW5ib3VuZGVkKSBzaXplIGNhc2UuCgkoX0lPX3N0cl9vdmVyZmxvdywgX0lPX3N0cl91bmRlcmZsb3csIF9JT19zdHJfY291bnQpOiAgUmUtd3JpdGUKCXRvIG5vdCB1c2UgX3MuX2xlbiwgYW5kIG90aGVyd2lzZSBjbGVhbnVwL2ZpeC4KCSogc3Ryc3RyZWFtLmgsIHN0cnN0cmVhbS5jYyAoc3Ryc3RyZWFtYmFzZTo6c3Ryc3RyZWFtYmFzZSgpKTogIENhbGwKCWlvczo6aW5pdCBoZXJlLgogCShvdGhlciBjb25zdHJ1Y3RvcnMpOiAgU2ltcGxpZnkgLSBpbml0IGFscmVhZHkgY2FsbGVkLgoKVHVlIE1heSAxNCAxMDo1NToyMSAxOTk2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAZGVuZWIuY3lnbnVzLmNvbT4KCglDaGFuZ2Ugc28gdGhhdCBzdHJzdHJlYW1idWYgZGVmYXVsdCBjb25zdHJ1Y3RvciBkb2VzIG5vIGFsbG9jYXRpb24uCgkqIHN0cnN0cmVhbS5oIChzdHJzdHJlYW1idWY6OmluaXRfZHluYW1pYyk6ICBEZWZhdWx0IGluaXRpYWwgc2l6ZSA9IDAuCgkqIHN0cnN0cmVhbS5jYyAoc3Ryc3RyZWFtYnVmOjppbml0X2R5bmFtaWMpOiAgRG9uJ3QgYWxsb2NhdGUgYQoJYnVmZmVyICh5ZXQpIGlmIGluaXRpYWxfc2l6ZSBpcyAwLgoJKiBzdHJvcHMuYyAoX0lPX3N0cl9vdmVyZmxvdyk6ICBBZGQgMTAwIHRvIHNpemUgb2YgcmUtYWxsb2NhdGVkCglidWZmZXIsIHRvIGhhbmRsZSBjYXNlIHdoZW4gaW5pdGlhbCBzaXplIGlzIDAuCgoJKiBpb3N0ZGlvLmggKHJlbW92ZSwgcmVuYW1lLCB0bXBmaWxlLCB0ZW1wbmFtKTogIENvbW1lbnQgb3V0LgoKTW9uIE1heSAxMyAyMzoxOTozOSAxOTk2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAZGVuZWIuY3lnbnVzLmNvbT4KCgkqIGZpbGVvcHMuYyAoX0lPX2ZpbGVfY2xvc2VfaXQpOiAgSnVzdCBjYWxsIF9JT19kb19mbHVzaCByYXRoZXIKCXRoYW4gX0lPX2ZpbGVfc3luYywgdG8gYXZvaWQgdXNlbGVzcyBsc2Vlay4KClR1ZSBNYXkgMTQgMTA6NDg6NDggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZmxvYXRjb252LmMgKF9JT19zdHJ0b2QpOiBGb3JjZSBydiBpbnRvIHRoZSBzdGFjay4KCgkqIGNvbmZpZy5zaGFyZWQgKGd4eF9pbmNsdWRlZGlyKTogTm93ICQoaW5jbHVkZWRpcikvZysrLgoKU2F0IEFwciAyNyAwMjozNzo0OSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsaWJpb1AuaCAoSlVNUCopOiBJbXBsZW1lbnQgZm9yIHRodW5rcy4KCShfSU9fanVtcF90KTogQWRkIHNlY29uZCBkdW1teSBmaWVsZCBmb3IgdGh1bmtzLgoKVGh1IEFwciAyNSAxMzoyMDowMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjb25maWcuc2hhcmVkIChDWFgpOiBVc2UgZ2NjLCBub3QgZysrLgoKV2VkIEFwciAyNCAxMDoyOTo1MCAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGJsdWVzLmN5Z251cy5jb20+CgoJKiBjb25maWcuc2hhcmVkIChkZXBlbmQubmV3KTogRGVsZXRlICQoc3JjZGlyKS8gZnJvbSBmb28ue2MsY2N9Cglmb3IgU3VuT1MgVlBBVEguCgkqIGRlcGVuZDogUmVnZW5lcmF0ZWQuCgpGcmkgQXByIDE5IDE3OjI0OjUxIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIFZlcnNpb24gMi44LjBiMy4KCldlZCBBcHIgMTAgMTc6MTY6MDEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluIChBTEwpOiBEb24ndCBidWlsZCBpb3N0cmVhbS5hLgoKTW9uIEFwciAgOCAxNDo0NDoxMSAxOTk2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIGlvc2V0dmJ1Zi5jIChfSU9fc2V0dmJ1Zik6ICBDbGVhciBfSU9fVU5CVUZGRVJFRCB1bmxlc3MgX0lPTkJGLgoKTW9uIEFwciAgOCAxNTowODoyMyAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IFBlcm1pdCAtLWVuYWJsZS1zaGFyZWQgdG8gc3BlY2lmeSBhIGxpc3Qgb2YKCWRpcmVjdG9yaWVzLgoKRnJpIEFwciAgNSAxNzo0ODo1NiAxOTk2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy5zaGFyZWQgKE1PU1RMWUNMRUFOKTogIEFsc28gcmVtb3ZlICR7RVhUUkFfTU9TVExZQ0xFQU59LgoKRnJpIE1hciAyMiAyMzoyNTowMCAxOTk2IFVscmljaCBEcmVwcGVyICA8ZHJlcGVwckBnbnUuYWkubWl0LmVkdT4KCgkqIGdlbm9wcy5jIChfSU9fc3B1dGJhY2tjLCBfSU9fc3VuZ2V0Yyk6IENsZWFyIEVPRiBmbGFnIGlmIHB1dHNoCgliYWNrIHdhcyBzdWNjZXNzZnVsLgoKV2VkIE1hciAyNyAxMTo1NDowOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBWZXJzaW9uIDIuOC4wYjIuCgpGcmkgTWFyIDIyIDE1OjM5OjM2IDE5OTYgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgoKCSogZmlsZW9wcy5jIChfSU9fZG9fd3JpdGUpOiAgUmV2ZXJ0IHByZXZpb3VzIGZpeC4gIChJdCBmYWlscyB0bwoJaGFuZGxlIHRoZSBjYXNlIHRoYXQgZnAtPl9JT19yZWFkX2VuZCAhPSBmcC0+X0lPX3dyaXRlX2Jhc2UuKQoJKF9JT19maWxlX292ZXJmbG93KTogIEluc3RlYWQsIGlmIF9JT19yZWFkX3B0ciBpcyBhdCB0aGUgZW5kIG9mCiAJdGhlIGJ1ZmZlciwgcmVzZXQgYWxsIHRoZSByZWFkIHBvaW50ZXJzIHRvIF9JT19idWZfYmFzZS4KClR1ZSBNYXIgMTIgMTI6MDM6MTcgMTk5NiAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBmaWxlb3BzLmMgKF9JT19kb193cml0ZSk6ICBFdmVuIGlmIHRvX2RvPT0wLCBtdXN0IHJlLXNldCBidWZmZXIKCXBvaW50ZXJzLiAgQnVnIGFuZCBzb2x1dGlvbiBmcm9tIEx1a2UgQmxhbnNoYXJkIDxsdWtlQGNzLndpc2MuZWR1Pi4KCldlZCBGZWIgMjggMTA6MDA6MjQgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogVmVyc2lvbiAyLjguMGIxLgoKVHVlIEZlYiAyNyAxODowODoxNiAxOTk2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIGlvcG9wZW4uYyAoX0lPX3Byb2Nfb3Blbik6ICBVc2UgKGNoYXIqKTAgcmF0aGVyIHRoYW4gaW1wcmVjaXNlIE5VTEwuCgoJKiBzdHJlYW1idWYuaCAoaW9zKTogIEFkZCBpb3M6OmJpbmFyeTsgIGRlcHJlY2F0ZSBpb3M6OmJpbi4KCSogZmlsZWJ1Zi5jYyAoZmlsZWJ1Zjo6b3Blbik6ICBIYW5kbGUgaW9zOjpiaW5hcnkuCgpGcmkgRmViICA5IDEyOjQwOjE5IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNsZWFudXAuYyAoX0lPX2NsZWFudXBfcmVnaXN0cmF0aW9uX25lZWRlZCkgWyFfR19IQVZFX0FURVhJVF06IEluaXQKCXRvIE5VTEwuCgkqIGZpbGVkb2FsbG9jLmMgKF9JT19jbGVhbnVwX3JlZ2lzdHJhdGlvbl9uZWVkZWQpOiBSZW1vdmUgZGVjbC4KClRodSBGZWIgIDggMDg6MTI6NTAgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIGZpbGVkb2FsbG9jLmMgKF9JT19jbGVhbnVwX3JlZ2lzdHJhdGlvbl9uZWVkZWQpOiBSZXZlcnQgcHJldmlvdXMKCWNoYW5nZSwgc2luY2UgY2xlYW51cC5jIG9ubHkgZGVmaW5lcyBpdCBpZiBfR19IQVZFX0FURVhJVC4KCldlZCBGZWIgIDcgMTU6MTA6MTcgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZmlsZWRvYWxsb2MuYyAoX0lPX2NsZWFudXBfcmVnaXN0cmF0aW9uX25lZWRlZCk6IERlY2xhcmUgYXMgZXh0ZXJuLgoKVHVlIERlYyAxMiAxNzoyMToxMyAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIGluZHN0cmVhbS5oLCBpbnN0cmVhbS5jYyAoaW5kaXJlY3RidWY6OnVmbG93KTogIE5ldyBtZXRob2QuCgkqIGluZHN0cmVhbS5jYyAoaW5kaXJlY3RidWY6OnVuZGVyZmxvdyk6ICBGaXggdG8gdXNlIHNnZXRjLCBub3Qgc2J1bXBjLgoJRml4ZXMgYnVnIHJlcG9ydGVkIGJ5IEtldmluIEJleWVyIDxiZXllckBjcy53aXNjLmVkdT4uCgoJKiBpbmRzdHJlYW0uY2MgKGluZGlyZWN0YnVmOjpzZWVrcG9zKTogIEFkZCBwYXJhbm9pYSB0ZXN0LgoKRnJpIERlYyAgOCAxNDo1NTozNCAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIHN0cmVhbS5oOiAgQWRkIHdhcm5pbmcgdG8gbm90IHVzZSB0aGVzZSBmdW5jdGlvbnMuCgkqIHN0cmVhbS5jYyAoc3RyLCBjaHIpOiAgUmUtaW1wbGVtZW50IGhlcmUgKGZyb20gbGliZysrKS4KClR1ZSBOb3YgMjggMTU6MDc6MDEgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBjb25maWcuc2hhcmVkOiAgVXNlIHRlc3QgaW5zdGVhZCBvZiBbIHRvIGF2b2lkIERFQyBVbml4IGxvc3NhZ2UuCgpUaHUgTm92IDIzIDE0OjUxOjQzIDE5OTUgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgoKCSogaW9wb3Blbi5jOiBNb3ZlICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gYWhlYWQgb2YgI2luY2x1ZGUgPHNpZ25hbC5oPgoJdG8gZGVhbCB3aXRoIEJTREkncyBsaXRlcmFsIGltcGxlbWVudGF0aW9uIG9mIFBvc2l4LgoKU2F0IE5vdiAyNSAxMToyMTo1NSAxOTk1ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBTZXQgcm9vdG1lLgoJKiBjb25maWcuc2hhcmVkIChUT1BESVIpOiBTZXQgd2l0aCAke2Zvby0uLi59IHJhdGhlciB0aGFuICR7Zm9vPS4uLn0uCgkoSU5TVEFMTCk6IEhhbmRsZSBhYnNvbHV0ZSwgZG90LCByZWxhdGl2ZS1ub3QtZG90IHZhbHVlcyBvZiBzcmNkaXIuCgkoVEVYSURJUik6IExpa2V3aXNlLgoKVHVlIE5vdiAyMSAxNDoxMjowNSAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IENoZWNrICR7d2l0aF9jcm9zc19ob3N0fSByYXRoZXIgdGhhbiBjb21wYXJpbmcKCSR7aG9zdH0gYW5kICR7dGFyZ2V0fS4KCk1vbiBOb3YgMjAgMTM6NTU6MjkgMTk5NSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluOiBNYXRjaCAqLXNjbzMuMnZbNDVdKi4KCldlZCBOb3YgMTUgMjA6MTk6MzEgMTk5NSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY29uZmlnLnNoYXJlZCAoRkxBR1NfVE9fUEFTUyk6IEFsc28gcGFzcyBTSExJQiBhbmQgU0hDVVJTRVMuCgpUdWUgTm92IDE0IDAxOjQxOjA4IDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CgoJKiBjb25maWcuc2hhcmVkIChUT19SRUFMX1RPUERJUik6IERlZmluZS4KCShNVUxUSVRPUCk6IERlbGV0ZWQuCgkoTVVMVElTUkNUT1AsIE1VTFRJQlVJTERUT1ApOiBOZXcuCgkoVE9QRElSKTogQ2hhbmdlIE1VTFRJVE9QIHRvIE1VTFRJQlVJTERUT1AsIGFuZCB1c2UgVE9fUkVBTF9UT1BESVIuCgkoSU5TVEFMTCk6IEFkZCB3aXRoX211bHRpc3JjdG9wLCBUT19SRUFMX1RPUERJUi4KCShURVhJRElSKTogVXNlIFRPX1JFQUxfVE9QRElSLgoJKExJQlMpOiBEZWxldGUgTVVMVElUT1AuCgkoRkxBR1NfVE9fUEFTUyk6IEFkZCBOTS4KCShDWFhJTkNMVURFUyk6IERlbGV0ZSBNVUxUSVRPUC4KCShkZXBlbmQubmV3KTogRGVsZXRlIGFkZGluZyBNVUxUSVRPUCB0byAuLi8gYnVpbGQgdHJlZSByZWZlcmVuY2VzLgoJQWRkIE1VTFRJU1JDVE9QIHRvIC4uLyBzb3VyY2UgdHJlZSByZWZlcmVuY2VzLgoJKiBjb25maWd1cmUuaW46IERlbGV0ZSBjYWxsIHRvIGNmZy1tbC1jb20uaW4uICBDYWxsIGNvbmZpZy1tbC5pbgoJaW5zdGVhZCBvZiBjZmctbWwtcG9zLmluLgoKU3VuIE5vdiAxMiAxNjozMDo0OCAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChWRVJTSU9OKTogIFNldCB0byAyLjcuMS4KCSogY29uZmlndXJlLmluOiAgQWRkIHdhcm5pbmcgZm9yIExpbnV4LgoJKiBjb25maWcuc2hhcmVkIChESVNUQ0xFQU4pOiAgQWRkIEVYVFJBX0RJU1RDTEVBTi4KCgkqIGVkaXRidWYuaCAoZWRpdF9tYXJrOjppbmRleF9pbl9idWZmZXIpOiAgQXZvaWQgdW51c2VkIHBhcmFtIHdhcm5pbmcuCgoJKiBpb3N0cmVhbS5jYyAoaXN0cmVhbTo6b3BlcmF0b3I+PiAoY2hhciopKTogIEltcHJvdmUgQU5TSSBjb21wbGlhbmNlLgoKRnJpIE5vdiAxMCAwODo0MTozNyAxOTk1ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBjb25maWcuc2hhcmVkIChjaGVjayk6IEFkZCBtaXNzaW5nIHNlbWljb2xvbi4KClRodSBOb3YgIDkgMTc6Mjc6MjIgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluIChBTEwpOiBSZW1vdmUgJChPU1BSSU1fT0JKRUNUUykuCgkqIGNvbmZpZy5zaGFyZWQgKGNoZWNrKTogU2V0IExEX0xJQlJBUllfUEFUSC4KCSogTkVXUzogRml4IHR5cG8uCgkqIGlvZ2V0ZGVsaW0uYyAoX0lPX2dldGRlbGltKTogSW5kZXggKmxpbmVwdHIsIHJhdGhlciB0aGFuIGxpbmVwdHIuCglGcm9tIGFsYW5Ac3ByaS5sZXZlbHMudW5pc2EuZWR1LmF1IChBbGFuIE1vZHJhKS4KCk1vbiBOb3YgIDYgMTU6MDM6MzMgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBzdHJlYW1idWYuY2MsIGVkaXRidWYuY2MsIGlzZ2V0bGluZS5jYywgcGFyc2VzdHJlYW0uY2M6CglGaXhlcyB0byBhdm9pZCAtV2FsbCB3YXJuaW5ncy4KCkZyaSBOb3YgIDMgMTY6NDE6NDEgMTk5NSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZ2VuLXBhcmFtcyBbIV9fU1REQ19fXTogSW5jbHVkZSB2YXJhcmdzLmggaW5zdGVhZCBvZiBzdGRhcmcuaC4KClRodSBOb3YgIDIgMTU6MDQ6MDMgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBjb25maWcuc2hhcmVkOiAgUmUtd3JpdGUgaWYgWCB0aGVuIFkgZWxzZSB0cnVlIGZpIHRvIChub3QgWCkgfHwgWS4KCldlZCBOb3YgIDEgMTM6MjY6NDQgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBpb3N0cmVhbS5oIChpc3RyZWFtOjppcGZ4KTogIEFkZCBkZWZhdWx0IGFyZ3VtZW50IHZhbHVlLgoJUmVwb3J0ZWQgYnkgWW90YW0gTWVkaW5pIDx5b3RhbV9tZWRpbmlAdG1haS5jb20+LgoKCSogbGliaW9QLmggKF9JT19ibGVuKTogIEZpeCB0eXBvLgoJUmVwb3J0ZWQgYnkgQnJ5YW4gVC4gVm9sZCA8YnR2QGxkbC5oZWFsdGhwYXJ0bmVycy5jb20+LgoKRnJpIE9jdCAyNyAxOToyNjoyMCAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChfR19jb25maWcuaCk6ICBTZXQgQ0MgdG8gJChDQykgcmF0aGVyIHRoYW4gdG8gJChDWFgpLAoJbm93IHRoYXQgQ1hYIGRlZmF1bHRzIHRvIGcrKyBhbmQgQ0MgZGVmYXVsdCB0byBnY2MgKHdoZW4gZm91bmQpLgoJKiBjb25maWcuc2hhcmVkOiAgU2ltcGxpZnkgQ1hYIGFuZCBDQywgc2luY2UgdGhleSBnZXQgb3ZlcnJpZGRlbgoJYnkgLi4vY29uZmlndXJlIGFueXdheS4KCldlZCBPY3QgMjUgMTk6NDU6NTAgMTk5NSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogaW9zdGRpby5oOiBXcmFwIGluY2x1ZGluZyB0aGUgZmlsZSB3aXRoICNpZm5kZWYgX0lPU1RESU9fSC4KCldlZCBPY3QgMjUgMTE6MTQ6MjUgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBsaWJpby5oIChfSU9fc2Vla29mZiwgX0lPX3NlZWtwb3MpOiAgTmV3IGRlY2xhcmF0aW9ucy4KCSogbGliaW9QLmggKF9JT19zZWVrb2ZmLCBfSU9fc2Vla3Bvcyk6ICBSZW1vdmUgZGVjbGFyYXRpb25zLgoJKiBsaWJpb1AuaDogIENsZWFudXA7ICByZW1vdmUgb2xkICFfSU9fVU5JRklFRF9KVU1QVEFCTEVTIHN0dWZmLgoKCSogZmlsZWJ1Zi5jYyAoZmlsZWJ1Zjo6fmZpbGVidWYpOiAgT25seSBjYWxsIFNZU1lDTE9TRSBpZiBjdXJyZW50bHkKCW9wZW4uICBCdWcgZm91bmQgYnkgTWFydGluIEdlcmJlcnNoYWdlbiA8Z2VyQGV6aXMtdWxtLmRlPi4KCgkqIHN0cmVhbWJ1Zi5oIChzdHJlYW1idWY6OnB1YnNlZWtvZmYsIHN0cmVhbWJ1Zjo6cHVic2Vla3Bvcyk6CglBZGRlZCwgZnJvbSBBTlNJIGRyYWZ0LgoJKiBmaWxlYnVmLmNjIChmaWxlYnVmOjpvcGVuKSwgaW9zdHJlYW0uY2MgKHZhcmlhYmxlcyBwbGFjZXMpLCBTRmlsZS5jYzoKCVVzZSBwdWJzZWVrb2ZmL3B1YnNlZWtwb3MgcmF0aGVyIHRoYW4gc3NlZWtvZmYvc3NlZWtwb3MuCgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6ICBEb24ndCBpbnN0YWxsIGxpYmlvc3RyZWFtLmEuCgoJKiBmaWxlZG9hbGxvYy5jOiAgQWxzbyAjaW5jbHVkZSA8dW5pc3RkLmg+LgoKTW9uIE9jdCAgOSAxODowOTo1NCAxOTk1ICBKYXNvbiBNb2xlbmRhICA8Y3Jhc2hAcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy5zaGFyZWQgKFNVRkZJWEVTKTogYWRkIC5jLgoKVHVlIFNlcCAyNiAxNjowODowMSAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIHByb2NidWYuY2M6ICBNb3ZlICNwcmFnbWEgaW1wbGVtZW50YXRpb24gdG8gYmVnaW5uaW5nLgoKV2VkIFNlcCAyMCAxNzo1MzozMyAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIHByb2NidWYuaCwgcHJvY2J1Zi5jYzogIEFkZCAjcHJhZ21hIGludGVyZmFjZS9pbXBsZW1lbnRhdGlvbiBzdHVmZi4KCldlZCBTZXAgMjAgMTg6NTk6MDAgMTk5NSAgSm9obiBFYXRvbiAgPGp3ZUBiZXZvLmNoZS53aXNjLmVkdT4KCgkqIHByb2NidWYuaDogUHJvdGVjdCBmcm9tIGJlaW5nIGluY2x1ZGVkIG11bHRpcGxlIHRpbWVzLgoKV2VkIFNlcCAyMCAxNTo0NzoxNCAxOTk1ICBKb2huIEVhdG9uIDxqd2VAYmV2by5jaGUud2lzYy5lZHU+CgoJKiBwcm9jYnVmLmggKHByb2NidWYpOiAgQWRkICdfbmV4dCcgcG9pbnRlciBmaWVsZCBmb3IgY29tcGF0aWJpbGl0eQoJd2l0aCBfSU9fcHJvY19maWxlLgoKV2VkIFNlcCAyMCAxMzo1NDowMiAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjb25maWcuc2hhcmVkOiBBZGQgc3VwcG9ydCBmb3IgbWFpbnRhaW5lci1jbGVhbiB0YXJnZXQgYXMgYQoJc3lub255bSBmb3IgcmVhbGNsZWFuLgoJKiBkYnovTWFrZWZpbGUuaW46IExpa2V3aXNlLgoKTW9uIFNlcCAxMSAxMjoxMToxOSAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIGlvcG9wZW4uYzogICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gYmVmb3JlIDxzeXMvd2FpdC5oPi4KCVRoaXMgaXMgaW4gYWNjb3JkYW5jZSB3aXRoIFBvc2l4LCBhbmQgbmVlZGVkIGZvciBJU0MuCgpGcmkgU2VwICA4IDAwOjExOjU1IDE5OTUgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGdlbi1wYXJhbXM6IFVzZSBkb3VibGUgcXVvdGVzIGluIHRoZSBldmFsIHNldHRpbmcgJFRZUEUgdG8KCSRWQUxVRSwgdG8gcHJlc2VydmUgYW55IHNpbmdsZSBxdW90ZXMgaW4gJFZBTFVFLgoKTW9uIEF1ZyAyMSAxMTozOTowOSAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIGdlbi1wYXJhbXM6IFRlc3QgZm9yIGFuIGFwcHJvcHJpYXRlIHZlcnNpb24gb2YgZ2NjIGJlZm9yZSB1c2luZwogCW1vZGUgYXR0cmlidXRlcy4KCgkqIGNvbmZpZy5zaGFyZWQ6IEFkZCAkKFBJQ0RJUikgdG8gJEFMTC4KCk1vbiBBdWcgIDcgMTc6NTE6NDAgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBnZW4tcGFyYW1zOiAgR2VuZXJhdGUgbmV3IG1hY3JvIF9HX0hBVkVfU1lTX0NERUZTLgoJKiBsaWJpby5oOiAgSWYgX0dfSEFWRV9TWVNfQ0RFRlMsIGdldCBfX1AgZnJvbSA8c3lzL2NkZWZzLmg+LgoKRnJpIEF1ZyAgNCAyMzoyMToxNyAxOTk1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIGdlbi1wYXJhbXM6IFdoZW4gZm9sbG93aW5nIHR5cGVkZWYgY2hhbmdlcywgYWxsb3cgdHlwZWRlZnMKCXRoYXQgZG8gbm90IGhhdmUgYSBzcGFjZSBiZWZvcmUgdGhlIGRlZmluZWQgdHlwZSBuYW1lLAoJZS5nLiBgdHlwZWRlZiB2b2lkICpfX2dudWNfdmFfbGlzdDsnIGFzIGluIExpbnV4LiAgQWxzbywKCW5vdCByZXF1aXJlIGEgc3BhY2UgaW4gdGhlIGRlZmluaWVucywgZS5nLiBgdHlwZWRlZiB2b2lkKmZvbzsnLgoKVGh1IEF1ZyAgMyAxNzo1NDoxNSAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIGlvc3RyZWFtLmgsIGlvc3RyZWFtLmNjIChpc3RyZWFtOjpzeW5jKTogIEFkZGVkIG1pc3NpbmcgbWV0aG9kLgoKVGh1IEF1ZyAgMyAxNzo0OTozNCAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogIFJlbW92ZSBuZXRic2Qgc3BlY2lhbCBjYXNlLgoJKiBjb25maWcvbmV0YnNkLm10OiAgUmVtb3ZlZDsgIG5vIGxvbmdlciB1c2VkLgoKVHVlIEp1biAyMCAxNjowNzoxMiAxOTk1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIGdlbi1wYXJhbXM6IFRha2UgdHJhbnNpdGl2ZSBjbG9zdXJlIG9mIGB0eXBlZGVmJyByZWxhdGlvbi4KCVRoaXMgaXMgbmVlZGVkIGZvciBCU0QvT1MgMi4wLCB3aGljaCBoYXMKCWZwb3NfdCAtPiBvZmZfdCAtPiBxdWFkX3QgLT4gbG9uZyBsb25nLgoKTW9uIEp1bCAyNCAxODoyODoxMCAxOTk1ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogY29uZmlnLnNoYXJlZCAoVE9QRElSKTogRGVsZXRlIGV4dHJhICcvJywgJHJvb3RtZSBtYXkgYmUgZW1wdHkuCgpTYXQgSnVsIDIyIDEzOjI3OjQ1IDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CgoJKiBjb25maWcuc2hhcmVkIChkZXBlbmQubmV3KTogRml4IHF1b3RpbmcgaW4gRE8gTk9UIEVESVQgbGluZS4KCgkqIE1ha2VmaWxlLmluIChfR19jb25maWcuaCk6IEFkZCBtdWx0aWxpYiBzdXBwb3J0LgoJKGluc3RhbGwpOiBMaWtld2lzZS4KCSogY29uZmlnLnNoYXJlZDogTGlrZXdpc2UuCgkqIGNvbmZpZ3VyZS5pbjogTGlrZXdpc2UuCgpXZWQgSnVuIDI4IDE3OjQwOjI1IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogUGxvdEZpbGUuaCwgU0ZpbGUuaCwgYnVpbHRpbmJ1Zi5oLCBlZGl0YnVmLmgsIGZzdHJlYW0uaCwKCWluZHN0cmVhbS5oLCBpb21hbmlwLmgsIGlvc3RyZWFtLmgsIHBhcnNlc3RyZWFtLmgsIHBmc3RyZWFtLmgsCglwcm9jYnVmLmgsIHN0ZGlvc3RyZWFtLmgsIHN0cmVhbS5oLCBzdHJlYW1idWYuaCwgc3Ryc3RyZWFtLmg6IFdyYXAKCXdpdGggZXh0ZXJuICJDKysiLgoKVGh1IEp1biAyMiAwNDozNDowMSAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIGdlbi1wYXJhbXM6IFN1cnJvdW5kIGF0dHJpYnV0ZXMgd2l0aCBfXy4KCk1vbiBKdW4gMTkgMDA6MzM6MjIgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CgoJKiBjb25maWcuc2hhcmVkIChTVUJESVJTKTogTWFzc2FnZSBicm9rZW4gc2hlbGxzIHRoYXQgcmVxdWlyZQogICAgICAgICdlbHNlIHRydWUnLgoKU2F0IEp1biAxNyAxMToyNTozOCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIHN0cmVhbWJ1Zi5oOiBEZWNsYXJlIGlubGluZSBtZW1iZXJzIGlubGluZSBpbiBjbGFzcy4KClRodSBKdW4gMTUgMjA6NDU6MTMgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoVkVSU0lPTik6ICBVcGRhdGUgdG8gdmVyc2lvbiAyLjcuMC4KCldlZCBKdW4gMTQgMjE6NDE6MTEgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHB5dGhvbi5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKFNURElPX1dSQVBfT0JKRUNUUyk6IFJlbW92ZSBzdGRmaWxlcy5vLgoJKExJQklPX09CSkVDVFMpOiBBZGQgc3RkZmlsZXMuby4KCldlZCBKdW4gIDcgMTY6MTE6MzYgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHB5dGhvbi5jeWdudXMuY29tPgoKCSogY29uZmlnLnNoYXJlZCAoYWxsKTogQXBwZWFzZSBiYXNoLgoKV2VkIEp1biAgNyAxMToxNjozOCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoTU9TVExZQ0xFQU4pOiBSZW1vdmUgc3RhbXAtcGljZGlyLgoKCSogY29uZmlnLnNoYXJlZCAoTU9TVExZQ0xFQU4pOiBEaXR0by4KCShDTEVBTik6IERvbid0LgoKTW9uIEp1biAgNSAxODoyOTozOSAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taC0qcGljOiBSZW1vdmVkLgoKCSogY29uZmlndXJlLmluIChNT1NUTFlDTEVBTik6IFJlbW92ZSBwaWMgb2JqZWN0cy4KCShmcmFncyk6IFVzZSB0b3BsZXZlbCBwaWMgZnJhZ21lbnRzLgoKCSogY29uZmlnLnNoYXJlZCAoQ1hYRkxBR1MpOiBVc2UgLU8zLgoJKFBJQ0ZMQUcsIFBJQ0RJUik6IE5ldyBtYWNyb3MuCgkoYWxsKTogRGVwZW5kIG9uICQoUElDRElSKS4KCShGTEFHU19UT19QQVNTKTogUGFzcyBQSUNGTEFHLgoJKC54Lm8pOiBBbHNvIGJ1aWxkIHBpYyBvYmplY3QuCgkoc3RhbXAtcGljZGlyKTogQ3JlYXRlIGRpcmVjdG9yeSBmb3IgcGljIG9iamVjdHMuCgkoTU9TVExZQ0xFQU4pOiBSZW1vdmUgcGljIG9iamVjdHMuCgkoQ0xFQU4pOiBSZW1vdmUgc3RhbXAtcGljZGlyLgoKCSogTWFrZWZpbGUuaW4gKGlvc3RyZWFtLmxpc3QpOiBEZXBlbmQgb24gc3RhbXAtcGljZGlyLgoJKGMrK2NsZWFuKTogRG9uJ3QgcmVtb3ZlIF9HX2NvbmZpZy5oLgoKTW9uIEp1biAgNSAxNTowMzo0NyAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIHN0cnN0cmVhbS5oLCBzdHJzdHJlYW0uY2MgKHN0cnN0cmVhbTo6c3Ryc3RyZWFtKCkpOiAgUmUtaW1wbGVtZW50IHRvCgliZSBsaWtlIG9zdHJzdHJlYW06Om9zdHJlc3RyZWFtKCksIGFuZCBub3QgbGVhayBtZW1vcnkuCgoJKiBzdHJlYW1idWYuaDogIFVzZSAjaWYgIV9JT19VTklGSUVEX0pVTVBUQUJMRVMgaW5zdGVhZCBvZiAjaWZuZGVmLgoKCSogaW9saWJpby5oIChfSU9fcmV3aW5kKTogIEFkZCBtaXNzaW5nIGZsYWdzIHdoZW4gY2FsbGluZyBfSU9fc2Vla29mZi4KClRodSBNYXkgMjUgMjI6MzA6MjEgMTk5NSAgSi5ULiBDb25rbGluICA8anRjQHJ0bC5jeWdudXMuY29tPgoKCSogY29uZmlnL25ldGJzZC5tdCAoR19DT05GSUdfQVJHUyk6IEFkZCBkZWZuIGZvciBvZmZfdC4gIEFub3RoZXIKCSAgbGF5ZXIgb2YgdHlwZWRlZnMgaGFzIGJlZW4gYWRkZWQgYW5kIHRoZSBnZW4tcGFyYW1zIHNjcmlwdCBjYW4KCSAgbm90IGhhbmRsZSBpdC4KCldlZCBNYXkgMTAgMDM6MDI6NTggMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHB5dGhvbi5jeWdudXMuY29tPgoKCSogaW9saWJpby5oIChfSU9fcmV3aW5kKTogQWRkIG5ldyBhcmd1bWVudCB0byBfSU9fc2Vla29mZi4KCgkqIGNvbmZpZy9saW51eC5tdCAoTElCSU9TVFJFQU1fT0JKRUNUUyk6IEluY2x1ZGUgJChTVERJT19XUkFQX09CSkVDVFMpLgoJKExJQklPU1RSRUFNX0RFUCk6IEluY2x1ZGUgc3RkaW8ubGlzdC4KCShMSUJJT1NUUkVBTV9VU0UpOiBJbmNsdWRlIGBjYXQgc3RkaW8ubGlzdGAuCgoJKiBNYWtlZmlsZS5pbiAoTElCSU9TVFJFQU1fREVQKTogTmV3IHZhcmlhYmxlLgoJKExJQklPU1RSRUFNX1VTRSk6IERpdHRvLgoJKGxpYmlvc3RyZWFtLmEpOiBVc2UgdGhlbS4KCShpb3N0cmVhbS5saXN0KTogRGl0dG8uCgkoc3RkaW8ubGlzdCk6IE5ldyBydWxlLgoJKHN0ZGlvL3N0ZGlvLmxpc3QpOiBEaXR0by4KClR1ZSBNYXkgIDkgMTg6Mjk6MzggMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CgoJKiBsaWJpb1AuaCAoX0lPX2p1bXBfdCk6IENoYW5nZSBUWVBFIGZvciBfX2R1bW15IGZyb20gaW50IHRvCiAgICAgICAgX0dfc2l6ZV90LgoKU2F0IE1heSAgNiAxMzo1MDozNyAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIGxpYmlvLmggKF9JT19VTklGSUVEX0pVTVBUQUJMRVMpOiAgI2RlZmluZSBhcyB0cnVlLgoJKF9JT19GSUxFKTogIFJlbW92ZSBfanVtcHMgZmllbGQgKCNpZiBfSU9fVU5JRklFRF9KVU1QVEFCTEVTKS4KCgkqIGxpYmlvUC5oIChlbnVtIF9JT19zZWVrZmxhZ3NfKTogIFJlbW92ZWQuCgoJKiBsaWJpb1AuaCAoX0lPX3NldGJ1Zl90KTogIENoYW5nZSByZXR1cm4gdmFsdWUgb2Ygc2V0cG9zIGp1bXB0YWJsZQoJZnVuY3Rpb24gdG8gbWF0Y2ggQysrIHN0cmVhbWJ1Zjo6c2V0cG9zLiAgKFJldHVybiBOVUxMIG9uIGZhaWx1cmUuKQoJKiBmaWxlb3BzLmMgKF9JT19maWxlX3NldGJ1ZiksIGdlbm9wcy5jIChfSU9fZGVmYXVsdF9zZXRidWYpLAoJZmlsZWJ1Zi5jYywgaW9zZXR2YnVmLmM6ICBVcGRhdGUgdG8gdXNlIG5ldyBzZXRidWYgY29udmVudGlvbnMuCgoJKiBzdHJlYW1idWYuaCAoc3RyZWFtYnVmKTogIFJlLW9yZGVyIHZpcnR1YWwgZnVuY3Rpb25zIG1vcmUgbG9naWNhbGx5LgoJKiBzdHJlYW1idWYuY2MgKHN0cmVhbWJ1Zjo6dWZsb3cpLCBzdHJlYW1idWYuaDogIE5ldyB2aXJ0dWFsLgoJKiBsaWJpb1AuaCAoc3RydWN0IF9JT19qdW1wX3QpOiAgRGVmaW5lIHVzaW5nIG5ldyBKVU1QX0ZJRUxEIG1hY3JvLgoJQW5kIHJlLW9yZGVyIGluIG1vcmUgbG9naWNhbCBvcmRlciBjb25zaXN0ZW50IHdpdGggc3RyZWFtYnVmIHZ0YWJsZS4KCSogZmlsZW9wcy5jIChfSU9fZmlsZV9qdW1wcyksIGlvcG9wZW4uYyAoX0lPX3Byb2NfanVtcHMpLCBpb3ZmcHJpbnRmLmMKCShfSU9faGVscGVyX2p1bXBzKSwgc3RyZWFtYnVmLmNjIChfSU9fc3RyZWFtYnVmX2p1bXBzKSwgc3Ryb3BzLmMKCShfSU9fc3RyX2p1bXBzKTogIFVwZGF0ZSBhY2NvcmRpbmdseSwgdXNpbmcgSlVNUF9JTklUIG1hY3JvLgoJKiBzdGRmaWxlcy5jOiAgU2V0IHZ0YWJsZSB0byBwb2ludCB0byBfSU9fZmlsZV9qdW1wcy4KCSogZmlsZWJ1Zi5jYywgaW9wb3Blbi5jLCBpb3ZmcHJpbnRmLmMgKGhlbHBlcl92ZnByaW50ZiksIGlvdnNwcmludGYuYywKCWlvdnNzY2FuZi5jOiAgVXNlIG1hY3JvcyBhbmQgI2lmIHRvIHNldCBqdW1wdGFibGVzLgoKCSogc3RyZWFtYnVmLmM6ICBfSU9fc3RyZWFtYnVmX2p1bXBzIGFuZCB0aGUgX0lPX3NiXyogbWV0aG9kcyBhcmUgbm90CgluZWVkZWQgI2lmIF9JT19VTklGSUVEX0pVTVBUQUJMRVMuCgkqIGZpbGVidWYuY2MgKGZpbGVidWY6Ol9fbmV3KTogIEFsc28gbm8gbG9uZ2VyIG5lZWRlZC4KCSogZnN0cmVhbS5jYyAoZnN0cmVhbWJhc2U6Ol9fZmJfaW5pdCwgZnN0cmVhbWJhc2U6OmZzdHJlYW1iYXNlKTogIEZpeC4KCSogc3Rkc3RyYnVmcy5jOiAgVXNlIGZpbGVidWYgdnRhYmxlIGluc3RlYWQgb2YgYnVpbHRpbmJ1ZidzLgoJKiBidWlsdGluYnVmLmgsIGJ1aWx0aW5idWYuY2MgKGJ1aWx0aW5idWYpOiAgQ29tbWVudGVkIG91dCAjaWYKCV9JT19VTklGSUVEX0pVTVBUQUJMRVMgLSBubyBsb25nZXIgbmVlZGVkLgoJKiBzdHJzdHJlYW0uY2MgKFNFVF9TVFJfSlVNUFMpOiAgRG9lcyBub3RoaW5nIG5vdy4KCgkqIGJ1aWx0aW5idWYuY2MsIGZpbGVvcHMuYywgZ2Vub3BzLmMsIGlvZmdldHBvcy5jLCBpb2ZzZXRwb3MuYywKCWlvZnRlbGwuYywgaW9wb3Blbi5jLCBpb3NlZWtvZmYuYywgaW9zZWVrcG9zLmMsIGlvc2V0dmJ1Zi5jLAoJaW92ZnByaW50Zi5jLCBpb3Zmc2NhbmYuYywgc3Ryb3BzLmM6ICBVc2UgREVGVU4gYW5kIERFRlVOX1ZPSUQuCgkqIGZpbGVidWYuY2MsIGZpbGVvcHMuYywgZ2Vub3BzLmMsIGlvcG9wZW4uYywgaW9zZWVrb2ZmLmMsIGlvc2Vla3Bvcy5jLAoJaW9zZXR2YnVmLmMsIGlvdmZzY2FuZi5jOiAgVXNlIG5ldyBKVU1QXyogYW5kIElPX09WRVJGTE9XLy4uLiBtYWNyb3MuCgoJKiBsaWJpb1AuaCAoX0lPX3NlZWtwb3NfdCk6ICBUaGlyZCBhcmcgaXMgbm93IGFuIGludCAodXNpbmcgX0lPU19JTlBVVAoJYW5kIF9JT1NfT1VUUFVUKSwgbm90IGFuIGVudW0gX0lPX3NlZWtmbGFnc18uICBGbGFncyB2YWx1ZXMgYXJlCgljaGFuZ2VkLCBhbmQgdGhlaXIgc2Vuc2UgaW52ZXJ0ZWQgKHRvIG1hdGNoIHN0cmVhbWJ1Zjo6c2Vla3BvcykuCgkqIGxpYmlvUC5oIChfSU9fc2Vla29mZl90KTogIFNpbWlsYXJseSBtYXRjaCBzdHJlYW1idWY6OnNlZWtvZmYuCgkqIGZpbGVidWYuY2MsIGZpbGVvcHMuYyAoX0lPX2ZpbGVfZm9wZW4sIF9JT19maWxlX3NlZWtvZmYpLCBnZW5vcHMuYwoJKF9JT19kZWZhdWx0X3NlZWtwb3MsIF9JT19kZWZhdWx0X3NlZWtwb3MpLCBpb2ZnZXRwb3MuYywgaW9mc2V0cG9zLmMsCglpb2xpYmlvLmggKF9JT19mc2VlayksIGlvZnRlbGwuYywgaW9zZWVrb2ZmLmMsIGlvc2Vla3Bvcy5jLAoJaW9zdHJlYW0uY2MsIHN0cmVhbWJ1Zi5jYywgc3Ryb3BzLmMgKF9JT19zdHJfc2Vla29mZiksIHN0cnN0cmVhbS5jYzoKCU5ldyBzZWVrcG9zL3NlZWtvZmYgY29udmVudGlvbnMuCgkqIGlvc3RyZWFtUC5oIChjb252ZXJ0X3RvX3NlZWtmbGFncyk6ICBSZW1vdmVkIC0gbm8gbG9uZ2VyIG5lZWRlZC4KCgkqIGlvbGliaW8uaCAoX0lPX2ZyZWFkKTogIE5ldyBkZWNsYXJhdGlvbi4KCgkqIGRiei9NYWtlZmlsZS5pbjogIFJlLWFycmFuZ2UgZm9yIGNsZWFuZXIgZGVwZW5kZW5jaWVzLgoKRnJpIE1heSAgNSAxNTo1NToyMiAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIGxpYmlvUC5oIChfSU9fSlVNUFMuIEpVTVBfRklFTEQsIEpVTVAwLCBKVU1QMSwgSlVNUDIsIEpVTVAzLAoJSlVNUF9JTklULCBfSU9fRklOSVNILCBfSU9fT1ZFUkZMT1csIC4uLiBfSU9fU1lTU1RBVCk6ICBOZXcgbWFjcm9zCglpbiBwcmVwYXJhdGlvbiBmb3IgbmV3IHVuaWZpZWQganVtcHRhYmxlL3Z0YWJsZSBpbXBsZW1lbnRhdGlvbi4KCSogY2xlYW51cC5jLCBmaWxlZG9hbGxvYy5jLCBpb2ZjbG9zZS5jLCBpb2ZmbHVzaC5jLCBpb2ZpbGVkb2FsbG9jLmMsCglpb3ByaW1zLmMsIGlvc2V0YnVmZmVyLmMsIGlvc3RyZXJyb3IuYywgaW91bmdldGMuYzogIFVzZSBERUZVTi4KCSogZmlsZWRvYWxsb2MuYywgaW9mY2xvc2UsIGlvZmZsdXNoLCBpb3NldGJ1ZmZlci5jOiAgVXNlIG5ldyBtYWNyb3MuCgoJKiBpb2ZvcGVuLmMsIGlvZmRvcGVuLmM6ICBVc2UgbWFjcm9zIGFuZCAjaWYgZm9yIG5ldyBqdW1wdGFibGVzLgoKCSogZ2VuLXBhcmFtczogIERvIG5vdCAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+LgoJQWRkIG1pc3NpbmcgcXVvdGUgaW4gJ2V2YWwnLgoJRG8gYWRkICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gaW4gdGVzdCBmb3IgPHN5cy9yZXNvdXJjZS5oPi4KCSogY29uZmlnL25ldGJzZC5tdDogIE5ldyBmaWxlLCBkZWZpbmluZyBfR19DT05GSUdfQVJHUyAoZm9yIGZwb3NfdCkuCgkqIGNvbmZpZ3VyZS5pbjogIFVzZSBuZXRic2QubXQgZm9yIE5ldEJTRC4KCldlZCBNYXkgIDMgMTU6MDM6NDcgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBsaWJpb1AuaCAoREVGVU4sIERFRlVOX1ZPSUQsIEFORCk6ICBOZXcgbWFjcm9zLCBmcm9tIGFuc2lkZWNsLmguCgkqIGlvZmRvcGVuLmMsIGlvZmdldHMuYywgaW9mb3Blbi5jLCBpb2ZwdXRzLmMsIGlvZnJlYWQuYywgaW9md3JpdGUuYywKCWlvZ2V0ZGVsaW0uYywgaW9nZXRsaW5lLmMsIGlvZ2V0cy5jLCBpb2lnbm9yZS5jLCBpb3BhZG4uYywgaW9wZXJyb3IuYywKCWlvcHV0cy5jLCBpb3ZzcHJpbnRmLmMsIGlvdnNzY2FuZi5jLCBvdXRmbG9hdC5jOiAgVXNlIERFRlVOLgoKTW9uIE1heSAgMSAxNjoyMjozMCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIGdlbi1wYXJhbXM6ICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4uICBEb24ndCB1c2UgX19XQ0hBUl9UWVBFX18gaW4KICAgICAgICBkZWZpbml0aW9uIG9mIF9HX3djaGFyX3QuICBVc2UgX19hdHRyaWJ1dGVfXyAoKG1vZGUpKSB0byBnZXQKICAgICAgICBzcGVjaWZpYy1zaXplZCBpbnRzIHVuZGVyIGdjYywgZG9uJ3Qgd29ycnkgYWJvdXQgaW50OCBvciBpbnQ2NAogICAgICAgIG90aGVyd2lzZS4gIFByb3ZpZGUgZGVmYXVsdHMgaWYgZGVkdWN0aW9uIGZhaWxzLgoKVGh1IEFwciAyNyAxODoyNzo1MyAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIHN0cmVhbWJ1Zi5oIChpb3M6On5pb3MpOiAgRGVsZXRlIF9hcnJheXMuCgkoX0lPX05FV19TVFJFQU1TKTogIFR1cm4gb24uCgkqIGxpYmlvLmggKF9fYWRqdXN0X2NvbHVtbik6ICBSZW1vdmUgYm9ndXMgZGVjbGFyYXRpb24uCgkqIGdlbm9wcy5jIChfSU9fc2V0X2NvbHVtbik6ICBGaXggdHlwbyAoaW4gY29tbWVudGVkLW91dCBjb2RlKS4KClR1ZSBBcHIgMjUgMTc6MTQ6MjkgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CgoJKiBjb25maWcuc2hhcmVkIChDWFhJTkNMVURFUyk6IFVzZSBhIHNoZWxsIHZhcmlhYmxlIHdpdGggYQogICAgICAgIGRpZmZlcmVudCBuYW1lIGZyb20gdGhlIG1ha2UgdmFyaWFibGUuCgkqIGNvbmZpZ3VyZS5pbjogVXBkYXRlIGFjY29yZGluZ2x5LgoKTW9uIEFwciAxNyAxNzoxOTo0MCAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIHN0cmVhbWJ1Zi5oIChfX2FkanVzdF9jb2x1bW4pOiAgUmVtb3ZlIHJlZHVuZGFudCBkZWNsYXJhdGlvbi4KClNhdCBBcHIgMTUgMTE6Mzk6MjUgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBjb25maWcuc2hhcmVkIChkby1jbGVhbi1kdmkpOiAgQWxzbyByZW1vdmUgKi5jcHMuCgoJKiBnZW4tcGFyYW1zOiAgVXNlICR7U0VEfSBpbnN0ZWFkIG9mIHNlZC4KCgkqIGxpYmlvLmg6ICBSZW1vdmUgI2lmJ2Qgb3V0IHN0dWZmIChjb25mdXNlcyBtYWtlZGVwZW5kKS4KCgkqIHN0ZHN0cmVhbXMuY2MgKFNURF9TVFIpOiAgU3RhbmRhcmQgc3RyZWFtcyBzdGFydCB3aXRoIGlvczo6ZGVjIHNldC4KCkZyaSBBcHIgMTQgMjM6NDY6MzEgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBpb3N0cmVhbS5oLCBpb3N0cmVhbS5jYyAoaXN0cmVhbTo6cmVhZCwgb3N0cmVhbTo6d3JpdGUpOgoJVXNlIHN0cmVhbXNpemUgZm9yIHRoZSBsZW5ndGggcGFyYW1ldGVyLgoKCSogc3RyZWFtYnVmLmg6ICBSZW1vdmVkIHJlZHVuZGFudCBfX292ZXJmbG93IGFuZCBfX3VuZGVyZmxvdy4KCgkqIGZzdHJlYW0uaCwgZnN0cmVhbS5jYzogQWRkIHZvaWQgZnN0cmVhbWJhc2U6OmF0dGFjaChpbnQpLgoKCSogaW9zc2NhbmYuYyAoX0lPX3NzY2FuZik6ICBGaXggbm9uLV9fU1REQ19fIG1pc3NpbmcgZGVjbGFyYXRpb24uCgpNb24gQXByICAzIDE1OjQwOjU1IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogaW5kc3RyZWFtLio6IEZpeCBwcm90b3R5cGVzIG9mIHhzcHV0biBhbmQgeHNnZXRuLgoKCSogZmlsZW9wcy5jOiBBdm9pZCA/Pz8gdHJpZ3JhcGguCgpNb24gTWFyIDI3IDE2OjE2OjM4IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogaW9tYW5pcC5oIChvcGVyYXRvcjw8IChvc3RyZWFtJiwgY29uc3Qgb21hbmlwPFRQPiYpOiBEZWZpbmUKICAgICAgICBzZXBhcmF0ZWx5LgoJKG9wZXJhdG9yPj4gKGlzdHJlYW0mLCBjb25zdCBpbWFuaXA8VFA+Jik6IERpdHRvLgoKTW9uIE1hciAyNyAwODo1NjowMCAxOTk1ICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCgoJKiBidWlsdGluYnVmLmNjIChidWlsdGluYnVmOjpzZXRidWYpOiBDYXN0IE5VTEwgdG8gc3RyZWFtYnVmKiwgdG8KCWF2b2lkIHdhcm5pbmcvZXJyb3IgYWJvdXQgY29udmVyc2lvbiBmcm9tIHZvaWQqLgoJKiBpbmRzdHJlYW0uY2MgKGluZGlyZWN0YnVmOjpzZWVrb2ZmKTogTGlrZXdpc2UuCgkoaW5kaXJlY3RidWY6OnNlZWtwb3MpOiBMaWtld2lzZS4KCSogZmlsZWJ1Zi5jYyAoZmlsZWJ1Zjo6c2V0YnVmKTogTGlrZXdpc2UuCgkoZmlsZWJ1Zjo6Y2xvc2UpOiBDYXN0IE5VTEwgdG8gZmlsZWJ1ZiouCgpXZWQgTWFyICAxIDE0OjIzOjE4IDE5OTUgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluIChESVNUQ0xFQU4pOiAgQWRkLCB3aXRoIHRhcmdldC1ta2ZyYWcuCgpGcmkgRmViIDI0IDAxOjAxOjA4IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBweXRob24uY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoZnJhZ3MpOiBEb24ndCByZXF1aXJlIHNvIG1hbnkgZGFzaGVzIGluIHRoZQogICAgICAgIGNhbm9uaWNhbCB0YXJnZXQgbmFtZS4KClNhdCBGZWIgMTggMTM6MTg6MzAgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBzdHJlYW1idWYuY2MgKHN0cmVhbWJ1Zjo6c3luYyk6ICBBbHdheXMgcmV0dXJuIDAsIGV2ZW4gZm9yCglub24tZmx1c2hlZCBvdXRwdXQuICBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBBTlNJL0lTTyBkcmFmdC4KCSogZ2Vub3BzLmMgKF9JT19zeW5jKTogIExpa2V3aXNlIGFsd2F5cyByZXR1cm4gMC4KCkZyaSBGZWIgMTcgMTY6MzM6MjggMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBmaWxlb3BzLmMgKF9JT19maWxlX2Nsb3NlX2l0KTogIENhbGwgX0lPX2ZpbGVfc3luYywgcmF0aGVyCgl0aGFuIF9JT19kb19mbHVzaCwgYmVjYXVzZSB3ZSB3YW50IHRvIGFkanVzdCB0aGUgZmlsZSBwb2ludGVyCglpZiByZWFkaW5nIGFuZCBub3QgYXQgZW5kIChhcyBpbiBTVlI0LCBhbmQgYXMgaW4gZmZsdXNoKS4KCUFsc28sIG1ha2Ugc3VyZSB0byByZXR1cm4gZXJyb3IgaW5kaWNhdGlvbiBpZiBzeW5jIGZhaWxzLgoJKF9JT19maWxlX3N5bmMpOiAgSWdub3JlIHNlZWsgZXJyb3IgaWYgaXQgaXMgRVNQSVBFLgoJKF9JT19maWxlX3NlZWtvZmYpOiAgSWYgbm90IHJlYWRhYmxlLCBkbyBkdW1iIGxzZWVrLgoJKiBpb2ZjbG9zZS5jIChfSU9fZmNsb3NlKTogIElmIGNsb3NpbmcgYSBub24tZmlsZWJ1ZiwgcmV0dXJuIC0xCglpZiBfSU9fRVJSX1NFRU4uCgpGcmkgRmViIDE3IDE5OjMxOjAwIDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGdlbi1wYXJhbXM6IENoZWNrIGZvciBzdHJ1Y3QgdG1zIGluIDxzeXMvdGltZXMuaD4sIGRlZmluaW5nCglIQVZFX1NZU19USU1FUyBhY2NvcmRpbmdseS4KCldlZCBGZWIgMTUgMjE6MDU6MTEgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBzdHJvcHMuYyAoX0lPX3N0cl9jb3VudCk6ICBVc2UgTEVOIG1hY3JvLgoJKF9JT19zdHJfc2Vla29mZik6ICBVcGRhdGUgX2xlbiBmaWVsZC4KCk1vbiBGZWIgIDYgMTk6Mjk6MDAgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CgoJKiBnZW4tcGFyYW1zOiBEZWZhdWx0IHRvIHNob3J0LCBsb25nIGFuZCBsb25nIGxvbmcgZm9yIDE2LCAzMiBhbmQKICAgICAgICA2NCBiaXQgdHlwZXMsIGluIGNhc2UgZGV0ZWN0aW9uIGZhaWxzLgoKV2VkIEphbiAyNSAxODowNzozMCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIGdlbi1wYXJhbXMgKF9HX3dpbnRfdCk6IEFsbG93IGZvciBicm9rZW4gcHJvbW90aW9ucy4KClR1ZSBKYW4gMjQgMTY6MTU6NDAgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBzdGRzdHJidWZzLmNjIChfSU9fZmFrZV9zdGRpb2J1ZnMpOiAgQWRkIGFuIGV4dHJhIGxheWVyIG9mIHN0cnVjdCwKCXRvIGZvcmNlIGNvcnJlY3QgYWxpZ25tZW50IG9uIGk5NjBzLgoJKERFRl9TVERJT0JVRiwgX0lPX3tzdGRpbixzdGRvdXQsc3RkZXJyfV9idWYpOiAgVXBkYXRlIGFjY29yZGluZ2x5LgoKVGh1IEphbiAxOSAxODozMDo1MyAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy5zaGFyZWQgKENYWElOQ0xVREVTKTogQWRkIGxpYnN0ZGMrKyB0byBpbmNsdWRlcyBmb3IKICAgICAgICBidWlsZGluZyBsaWJnKysuCgkoTElCUyk6IEFsc28gbGluayB3aXRoIGxpYnN0ZGMrKyB3aGVuIGJ1aWxkaW5nIGxpYmcrKyB0b3lzLgoJRG9uJ3Qgc2V0IEVYUE9SVF9BTExfVkFSSUFCTEVTOyB1c2VycyB3aWxsIGhhdmUgdG8gc2V0CglMRF9MSUJSQVJZX1BBVEggdGhlbXNlbHZlcy4KCkZyaSBEZWMgMzAgMTY6Mzg6MTMgMTk5NCAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY29uZmlnL2xpbnV4Lm10OiBGaXggYnVpbGQgcHJvYmxlbSBvbiBsaW51eCAxLjAuOC4KClRodSBEZWMgMjIgMTE6NDk6NDUgMTk5NCAgSi5ULiBDb25rbGluICAoanRjQHBoaXNoaGVhZC5jeWdudXMuY29tKQoKCSogY29uZmlnL25ldHdhcmUubXQ6IFVzZSBnY2MgdG8gcHJlLWxpbmsgaW9zdHJlYW0ubmxtJ3Mgb2JqZWN0cwoJICBpbnN0ZWFkIG9mIHVzaW5nIG5sbWNvbnYsIHNvIHRoYXQgcmVmZXJlbmNlcyB0byBmdW5jdGlvbnMgaW4KCSAgbGliZ2NjLmEgYXJlIHJlc29sdmVkLgoKCSogY29uZmlndXJlLmluOiBBcHBlbmQgLm10IHRvIHRhcmdldCBtYWtlZmlsZSBmcmFnbWVudCBmaWxlIG5hbWVzLgoKCSogZmxvYXRjb252LmMgKHRlbnMsIHRpbnl0ZW5zLCBiaWd0ZW5zKTogQWRkZWQgY29uc3QgcXVhbGlmaWVyLgoKVHVlIERlYyAyMCAwOTo1OTo1MCAxOTk0ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBnZW4tcGFyYW1zIChWVEFCTEVfTEFCRUxfUFJFRklYKTogU2luY2Ugc29tZSBzeXN0ZW1zIGhhdmUgR05VIG5tCglhcyBubSwgYW5kIHRoZXkgZGVtYW5nbGUgYnkgZGVmYXVsdCwgd2UgaGF2ZSB0byBub3RpY2UgdGhpcywgYW5kCgl0cnkgLS1uby1jcGx1cyAobGludXgpIG9yIC0tbm8tZGVtYW5nbGUgd2hlbiBydW5uaW5nIG5tLgoKV2VkIERlYyAxNCAxODoxMzo1OCAxOTk0ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIGdlbi1wYXJhbXM6ICBUbyBkZXRlcm1pbmUgdnQtbmFtZS1tYW5nbGluZyB1c2luZyBkdW1teS5DIGFkZAoJI2luY2x1ZGUgYW5kICNwcmFtYSBpbnRlcmZhY2UvaW1wbGVtZW50YXRpb24gdG8gYXZvaWQgcHJvYmxlbSB3aXRoCglhc3NlbWJsZXJzIHRoYXQgZG9uJ3QgZW1pdCBsb2NhbCBzeW1ib2xzLiAgUmVwb3J0ZWQgdW5kZXIgSFBVWCA4CglieSBUaG9tYXMgQXJlbmQgPGFyZW5kQGJsYXNpdXMuQ2hlbWlldGVjaG5pay5VbmktRG9ydG11bmQuREU+LgoKCSogc3RyZWFtYnVmLmggKGlvczo6aW9zKTogIE1vdmUgaW5saW5lIGRlZmluaXRpb24gYWZ0ZXIKCXRoYXQgb2YgaW9zOjppbml0ICh3aGljaCBpb3M6OmlvcyBjYWxscykuCgpTdW4gRGVjICA0IDE5OjUwOjMyIDE5OTQgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgoKCSogZmlsZW9wcy5jIChfSU9fZmlsZV9pbml0LCBfSU9fZmlsZV9jbG9zZV9pdCwgX0lPX2ZpbGVfc3luYyk6CglTZXQgX29mZnNldCB0byBfSU9fcG9zX0JBRCwgdG8gc3VwcG9ydCBhcHBsaWNhdGlvbnMgdGhhdCBmb2xsb3cKCVBPU0lYLjEgcnVsZXMgb24gbWl4aW5nIGZpbGUgaGFuZGxlcy4KCgkqIGZpbGVvcHMuYyAoX0lPX2ZpbGVfb3ZlcmZsb3cpOiAgSGFuZGxlIGNhc2UgdGhhdCBidWZmZXIgd2FzCglhbGxvY2F0ZWQgKHBlcmhhcHMgYnkgc2V0dmJ1ZikgYnV0IF9JT193cml0ZV9iYXNlIGlzIHN0aWxsIDAuCgoJKiBpb3N0ZGlvLmggKHNldGJ1ZmZlcik6ICAjZGVmaW5lIGFzIF9JT19zZXRidWZmZXIuCgkqIHN0cmVhbWJ1Zi5oLCBmaWxlYnVmLmNjOiAgUmVtb3ZlZCBmaWxlYnVmOjpkb193cml0ZS4KClR1ZSBOb3YgMjkgMjM6Mzg6NTcgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQoKCSogZmxvYXRjb252LmMgKHNldHdvcmQwLCBzZXR3b3JkMSk6ICBGaXggdHlwby4KClR1ZSBOb3YgMjkgMTU6Mzc6MjkgMTk5NCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBjb25maWcuc2hhcmVkOiAgTW92ZSAtZm5vLWltcGxpY2l0LXRlbXBsYXRlIGZyb20gQ1hYRkxBR1MKCXRvIExJQkNYWEZMQUdTLiAgVGVzdHMgYXJlIGJldHRlciBydW4gd2l0aG91dCBpdC4KCgkqIGZsb2F0Y29udi5jICh3b3JkMCwgd29yZDEpOiAgUmUtcGxhY2UvcmUtaW1wbGVtZW50IHVzaW5nIHVuaW9ucwoJaW5zdGVhZCBvZiBjYXN0cyB0byBhdm9pZCBvcHRpbWl6ZXIgcHJvYmxlbXMuCgoJKiBkYnovZGJ6bWFpbi5jOiAgUmVuYW1lZCBkaXJuYW1lIC0+IGRpcl9uYW1lIHRvIGF2b2lkIE9TRgoJaGVhZGVyIGZpbGUgYnJhaW5kYW1hZ2UuCgpTYXQgTm92ICA1IDE5OjQ0OjAwIDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tKQoKCSogY29uZmlnLnNoYXJlZCAoTElCQ0ZMQUdTKTogRGVmaW5lLgoJKExJQkNYWEZMQUdTKTogRGVmaW5lLgoJKERPSU5HX0xJQkdYWCk6IERlZmluZSBUT0xJQkdYWC4gIENoYW5nZSBMSUJTIHRvIHVzZSAtbGcrKy4gIEFkZAoJTERfTElCUkFSWV9QQVRIIGFuZCAuRVhQT1JUX0FMTF9WQVJJQUJMRVM6LgoJKEZMQUdTX1RPX1BBU1MpOiBBZGQgTElCQ3ssWFh9RkxBR1MuCgkoWEN7LFhYfUZMQUdTKTogU2V0IHRvIExJQkNGTEFHUyBvciBDRkxBR1MgZGVwZW5kaW5nIG9uICRMSUJESVIuCgkoQ09NUElMRS5jKTogRGVmaW5lLCB1c2UgaW4gLmMubyBydWxlLgoJKENPTVBJTEUuY2MpOiBEZWZpbmUsIHVzZSBpbiAuY2MubyBydWxlLgoKU2F0IE5vdiAgNSAxNToxMjoxMiAxOTk0ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChWRVJTSU9OKTogIFVwZGF0ZSB0byAwLjY3LgoKCSogc3RyZWFtYnVmLmggKGlvczo6ZG9udF9jbG9zZSk6ICBJcyBub3cgc2V0IGJ5IGRlZmF1bHQuCgkqIGZzdHJlYW0uaCwgZnN0cmVhbS5jYyAoX19mYl9pbml0KTogIE5ldyBmdW5jdGlvbi4gIENsZWFycwoJaW9zOjpkb250X2Nsb3NlLiAgQ2hhbmdlIGZzdHJlYW1iYXNlIGNvbnN0cnVjdG9ycyB0byBjYWxsIGl0LgoJKiBzdHJzdHJlYW0uY2M6ICAqc3Ryc3RyZWFtIGNvbnN0cnVjdG9ycyBtdXN0IGNsZWFyIGlvczo6ZG9udF9jbG9zZS4KCSogaW9zdHJlYW0uY2M6ICBTaW1wbGlmeSAtIGRvbid0IG5lZWQgdG8gc2V0IGlvczo6ZG9udF9jbG9zZS4KCSogaW9hc3NpZ24uY2M6ICBTaW1wbGlmeSAtIGFzc3VtZSBpb3M6OmRvbnRfY2xvc2UgaXMgYWx3YXlzIHNldC4KCgkqIGZzdHJlYW0uaCwgZnN0cmVhbS5jYzogIElmIF9JT19ORVdfU1RSRUFNUywgcHV0IHRoZQoJZmlsZWJ1ZiBhcyBhIG1lbWJlciBfX215X2ZiLgoJKiBzdHJzdHJlYW0ue2gsY2N9OiAgTGlrZXdpbGUgdXNlIGEgc3Ryc3RyZWFtYnVmIG1lbWJlciBfX215X3NiLgoJKiBzdHJlYW1idWYuaCwgc3Rkc3RyZWFtcy5jYywgaW9leHRlbmQuY2M6CglGaXggaWYgX0lPX05FV19TVFJFQU1TIHRvIG5vdCB1c2UgaW9zOjpkb250X2Nsb3NlLgoKCSogc3RyZWFtYnVmLmggKGNsYXNzIGlvcyk6ICBNb3ZlIHJkYnVmIGxhdGVyLCB0byBhdm9pZAoJaW5hYmlsaXR5IG9mIGcrKyB0byBpbmxpbmUuCgkqIGZpbGVidWYuY2MgKGZpbGVidWY6On5maWxlYnVmKTogIENhbGwgX0lPX2RvX2ZsdXNoLgoKCSogY29uZmlnLnNoYXJlZDogIEVtaXQgcnVsZXMgdG8gbWFrZSBkZXBlbmQuCgkqIGRlcGVuZDogIE5ldyBmaWxlLgoKRnJpIE5vdiAgNCAxNzoxOToxMSAxOTk0ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIFJFQURNRTogIEZpeCB0eXBvcy4KCSogbGliaW8uaDogIEFkZCBjb21tZW50LiAgVXBkYXRlIENvcHlyaWdodCBub3RpY2UuCgpGcmkgTm92ICA0IDIxOjQ2OjMwIDE5OTQgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogbGliaW8uaCAoX19QKTogQ2hhbmdlIGFyZ3VtZW50IG5hbWUgc3BlbGxpbmcgZnJvbQoJYHBhcmFtbGlzdCcgdG8gYHByb3RvcycgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBCU0RJIDEuMS4KClRodSBOb3YgIDMgMDA6NDU6MTYgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20pCgoJKiBjb25maWcuc2hhcmVkIChDWFhGTEFHUyk6IEFkZCAtZm5vLWltcGxpY2l0LXRlbXBsYXRlcy4KCk1vbiBPY3QgMjQgMTU6NTc6MzUgMTk5NCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBjb25maWcuc2hhcmVkOiAgRGVmaW5lIE5PU1RESUMgYW5kIHVzZSBpdCBmb3IgbGliaW8gdG9vLgoKVGh1IE9jdCAyMCAxOTo0NTozNSAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbSkKCgkqIGlvZ2V0ZGVsaW0uYzogI2luY2x1ZGUgPHN0ZGxpYi5oPi4KClRodSBPY3QgMjAgMTc6MDk6NTIgMTk5NCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBpb3N0cmVhbS5oOiAgQWRkIGNsYXNzZXMgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiBhbmQKCV9JT19vc3RyZWFtX3dpdGhhc3NpZ24uICBSZS10eXBlIGNpbiwgY291dCwgY2VyciwgY2xvZy4KCShjbGFzcyBpb3N0cmVhbSk6ICBEb24ndCBhZGQgZXh0cmEgX2djb3VudCBmaWVsZC4KCSogaW9hc3NpZ24uY2M6ICBOZXcgZmlsZS4gIEltcGxlbWVudCBvcGVyYXRvcj0gZm9yIGNpbiBldGMuCgkqIHN0cmVhbWJ1Zi5oIChjbGFzcyBpb3MpOiAgQ2hhbmdlIHJldHVybiB0eXBlIG9mIG9wZXJhdG9yPS4KCSogTWFrZWZpbGUuaW4gKElPU1RSRUFNX09CSkVDVFMpOiAgQWRkIGlvYXNzaWduLm8uCgoJKiBNYWtlZmlsZS5pbjogIFJlLWFycmFuZ2UsIHNvIGxpbnV4Lm10IG92ZXJyaWRlcyBjYW4gd29yay4KCgkqIGZpbGVvcHMuYyAoX0lPX2ZpbGVfc2Vla29mZik6ICBPcHRpbWl6ZSBzZWVrcyB3aXRoaW4gYnVmZmVyLgoKV2VkIE9jdCAxOSAxNDoyNTo0NyAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbSkKCgkqIGdlbi1wYXJhbXMgKHdpbnRfdCk6IFJldHVybiB0byB1c2luZyBfX1dDSEFSX1RZUEVfXyBmb3IKICAgICAgICBjb21wYXRpYmlsaXR5IHdpdGggZ2NjIHZlcnNpb25zIHByaW9yIHRvIDIuNi4xLgoKVHVlIE9jdCAxOCAxNzowODoxOCAxOTk0ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluOiAgRGVmaW5lIF9HX0NPTkZPR19IIGFzIF9HX2NvbmZpZy5oIGZvciBMaW51eC4gIFVzZSBpdC4KCShJT19PQkpFQ1RTKTogIEFkZCBpb2dldGRlbGltLm8uCgkqIGNvbmZpZy9saW51eC5tdDogIE5ldyBmaWxlLgoJKiBjb25maWd1cmUuaW46ICBTZWxlY3QgY29uZmlnL2xpbnV4Lm10IGlmIExpbnV4LgoJKiBpb2dldGRlbGltLmM6ICBWZXJpb3VzIGNsZWFudXBzLCBtYW55IGZyb20KCVVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGlwZC5pbmZvLnVuaS1rYXJsc3J1aGUuZGU+LgoJKiBsaWJpb1AuaDogQWRkIF9JT19nZXRkZWxpbS4gIFVzZSAodm9pZCkgZm9yIG5vLXBhcmFtZXRlciBmdW5jdGlvbnMuCgpUaHUgT2N0IDEzIDE2OjMwOjU2IDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogbGliaW8uaDogIFJlbmFtZSBVU0VfRFRPQSB0byBfSU9fVVNFX0RUT0EgZm9yIG5hbWVzcGFjZSByZWFzb25zLgoJKiBpb3N0cmVhbS5jYywgaW92ZnNjYW5mLmMsIGlvdmZwcmludGYsIGZsb2F0Y29udi5jOgoJVXBkYXRlIFVTRV9EVE9BIC0+IF9JT19VU0VfRFRPQS4KCgkqIGxpYmlvLmggKF9JT19mZW9mLCBfSU9fZmVycm9yKTogIE1vdmUgdG8gaGVyZSAuLi4KCSogaW9saWJpbzogIC4uLiBmcm9tIGhlcmUKCgkqIGlvc3RyZWFtLmNjIChpc3RyZWFtOjpnZXQsIGlzdHJlYW06Omlnbm9yZSwgaXN0cmVhbTo6cmVhZCk6CglTZXQgX2djb3VudCB0byAwIGlmIGlwZngwIGZhaWxlZC4KCgkqIGlvc3RyZWFtLmNjIChmbHVzaCk6ICBEbyB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGwsIHJhdGhlciB0aGFuCglnb2luZyB0aHJvdWdoIGp1bXB0YWJsZS4gIChUbyBnZXQgY29ycmVjdCBtZXRob2QgaW4gZGVyaXZlZCBjbGFzcy4pCglCdWcgYW5kIGZpeCBmcm9tIEpvaG4gV2llZ2xleSA8andAY2lzLm9oaW8tc3RhdGUuZWR1Pi4KCgkqIGlvZmRvcGVuLmMgKE9fQUNDTU9ERSk6ICBEZWZpbmUgdXNpbmcgT19SRFdSLCBub3QgT19SRFdSSVRFLgoKCSogc3RyZWFtYnVmLmggKGlvczo6cmRidWYoc3RyZWFtYnVmKikpOiAgTmV3LgoJKiBzdHJlYW1idWYuaCAoaW9zOjpvcGVyYXRvcj0pOiAgTWFrZSBwcml2YXRlIChpLmUuIGRpcy1hbGxvdykuCgpXZWQgT2N0IDEyIDE5OjA5OjIwIDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tKQoKCSogZ2VuLXBhcmFtczogRGVmaW5lIF9HX05PX05SViBhbmQgX0dfTk9fRVhURVJOX1RFTVBMQVRFUyBpZiBub3QKICAgICAgICBjb21waWxpbmcgd2l0aCBnKysuCgpUaHUgT2N0ICA2IDE2OjAzOjQzIDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogaW9zdHJlYW0udGV4aSAob3N0cnN0cmVhbTo6c3RyKTogIE5vdGUgdGhhdCBOVUwgaXMgbm90IHdyaXR0ZW4KCWF1dG9tYXRpY2FsbHkuCgpXZWQgT2N0ICA1IDE3OjI4OjI5IDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogaW9nZXRkZWxpbS5jIChfSU9fZ2V0ZGVsaW0pOiAgTmV3IGZ1bmN0aW9uLgoKV2VkIE9jdCAgNSAxNTo0MDoyMiAxOTk0ICBKLlQuIENvbmtsaW4gIChqdGNAcGhpc2hoZWFkLmN5Z251cy5jb20pCgoJKiBjb25maWcvbmV0d2FyZS5tdDogTmV3IGZpbGUsIGZpcnN0IGN1dCBhdCBOZXR3YXJlIE5MTSBzdXBwb3J0LgoJKiBjb25maWd1cmUuaW4gKCotKi1uZXR3YXJlKik6IFVzZSBjb25maWcvbmV0d2FyZS5tdC4KCgkqIGNvbmZpZy5zaGFyZWQgKE5MTUNPTlYsIExEKTogTmV3IGRlZmluaXRpb24uCgoJKiBnZW4tcGFyYW1zOiBjaGVjayBmb3Igbm0gaW4gJHtiaW51dGlsc30vbm0ubmV3LgoJKiBjb25maWcuc2hhcmVkOiBMaWtld2lzZS4KClR1ZSBPY3QgIDQgMTI6MjA6MDEgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBpb21hbmlwLmggKG9tYW5pcDo6b3BlcmF0b3I8PCk6ICBNYWtlIDJuZCBhcmcgYmUgY29uc3QuCglCdWcgYW5kIGZpeCByZXBvcnRlZCBieSBHcmVnIE1jR2FyeSA8Z2ttQG1hZ2lsbGEuY2ljaGxpZC5jb20+LgoKCSogc3Ryc3RyZWFtLmNjIChzdHJzdHJlYW1idWY6OnBjb3VudCk6ICBTaW1wbGlmeSwgdG8gbWF0Y2gKCUFOU0kvSVNPIHNwZWNpZmljYXRpb24uCgpNb24gU2VwIDI2IDE1OjE5OjUyIDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQoKCSogZ2VuLXBhcmFtczogSW5jbHVkZSA8d2NoYXIuaD4gYW5kIDx3Y3R5cGUuaD4gaWYgdGhleSBleGlzdC4KClRodSBTZXAgIDggMTQ6NDE6NDEgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCgoJKiBpb3N0cmVhbS5oIChjbGFzcyBpc3RyZWFtKTogRGVjbGFyZSBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJikuCgkoY2xhc3Mgb3N0cmVhbSk6IERlZmluZSBvcGVyYXRvcjw8KGxvbmcgZG91YmxlKS4KCgkqIGlvc3RyZWFtLmNjIChpc3RyZWFtOjpvcGVyYXRvcj4+KGxvbmcgZG91YmxlJikpOiBEZWZpbmUuCgpXZWQgU2VwICA3IDE0OjQyOjI5IDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogaW9zdHJlYW0udGV4aSAoT3ZlcmZsb3cpOiAgRml4IGJ1Z3MgaW4gZXhhbXBsZS4KCkZyaSBTZXAgIDIgMTc6NDU6NTcgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBpb3N0cmVhbS50ZXg6ICBEb2N1bWVudCBhIGxpdHRsZSBvbiBob3cgdG8gd3JpdGUgeW91cgoJb3duIHN0cmVhbWJ1Zi1kZXJpdmVkIGNsYXNzLCB3aXRoIGFuIGV4YW1wbGUuCgpUdWUgQXVnIDMwIDEzOjAzOjU3IDE5OTQgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKCgkqIGZsb2F0Y29udi5jIChzMmIpOiBEZWNsYXJlIFggYW5kIFkgdG8gYmUgX0dfaW50MzJfdC4KCShkaWZmLCBxdW9yZW0pOiBEZWNsYXJlIEJPUlJPVywgWSwgYW5kIFogbGlrZXdpc2UuCgkodWxwKTogRGVjbGFyZSBMIGxpa2V3aXNlLgoJKF9JT19zdHJ0b2QpOiBEZWNsYXJlIEwgYW5kIEFBREogbGlrZXdpc2UuCgkoX0lPX2R0b2EpOiBEZWNsYXJlIEwgYW5kIEQgbGlrZXdpc2UuICBDYXN0IGRpdmlzaW9uIG9mIEQgYnkgRFMgdG8KCV9HX2ludDMyX3QuCgpNb24gQXVnIDI5IDE2OjAxOjU0IDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogaW9zZXR2YnVmLmMgKF9JT19zZXR2YnVmKTogIElmIHNldHRpbmcgX0lPRkJGIGFuZCBubwoJYnVmZmVyIHdhcyBzcGVjaWZpZWQsIGNhbGwgX19kb2FsbG9jYXRlLgoKCSogZmlsZW9wcy5jLCBmbG9hdGNvbnYuYzogIEFkZCBhIGJ1bmNoIG9mIHBhcmVudGhlc2VzIHRvCglzaHV0IHVwIGdjYyB3YXJuaW5ncy4gIFBhdGNoIGZyb20gSC5KLkx1LgoKCSogc3RkaW9zdHJlYW0uY2MgKHN0ZGlvYnVmOjpzeXNfcmVhZCk6ICBJbmxpbmUgY2FsbCB0byBnZXRjCglmb3IgdGhlIG5vcm1hbCBjYXNlIChzaXplPT0xKS4KClNhdCBBdWcgMjAgMTI6MTQ6NTIgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoVkVSU0lPTik6ICBJbmNyZWFzZSB0byAwLjY2LgoKRnJpIEF1ZyAxOSAxNzoyODo0MSAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIGlvbGliaW8uaDogIEFkZGVkIF9JT19wcmludGYgcHJvdG90eXBlLgoJQWRkZWQgZXh0ZXJuICJDIiB7IC4uLiB9IHdyYXBwZXJzICNpZmRlZiBfX2NwbHVzcGx1cy4KCUJ1Z3MgcmVwb3J0ZWQgYnkgTmVhbCBCZWNrZXIgPG5lYWxAY3RkLmNvbXNhdC5jb20+LgoKV2VkIEF1ZyAxNyAxODoxNzoxNSAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIGZpbGVvcHMuYyAoX0lPX2ZpbGVfc2Vla29mZik6ICBGb3IgX0lPX3NlZWtfY3VyLCBhZGp1c3QgZm9yCglyZWFkLWFoZWFkIGJlZm9yZSBqdW1waW5nIHRvIGxhYmVsIGR1bWIuCgpXZWQgQXVnICAzIDEzOjE1OjAxIDE5OTQgIEguSi4gTHUgIChoamxAbnluZXhzdC5jb20pCgoJKiBsaWJpb1AuaCAoQ0hFQ0tfRklMRShGSUxFLFJFVCkpOiBuZXcsIHdoaWNoIGNoZWNrcyBmb3IKCSAgRklMRSA9PSBOVUxMIGFuZCBfSU9fTUFHSUNfTUFTSy4KCSAgKENPRVJDRV9GSUxFKEZJTEUpKTogbWVyZ2VkIGludG8gQ0hFQ0tfRklMRShGSUxFLFJFVCkKCSAgd2l0aCB0eXBvIGZpeGVzLgoKCSogaW9mcmVhZC5jLCBpb2Z3cml0ZS5jOiBhZGQgQ0hFQ0tfRklMRShmcCwgMCk7CgkqIGlvZmNsb3NlLmM6IGFkZCBDSEVDS19GSUxFKGZwLCBFT0YpOyByZW1vdmUgX0lPX01BR0lDX01BU0sgY2hlY2suCgoJKiBpb2ZmbHVzaC5jLCBpb2ZnZXRwb3MuYywgaW9mcHV0cy5jLCBpb2ZzY2FuZi5jLAoJaW9mc2V0cG9zLmMsIGlvZnZidWYuYywgaW91bmdldGMuYzoKCUFkZCBDSEVDS19GSUxFKGZwLCBFT0YpIGFuZCByZW1vdmUgQ09FUkNFX0ZJTEUoZnApLgoKCSogaW9mZ2V0cy5jOiBhZGQgQ0hFQ0tfRklMRShmcCwgTlVMTCkgYW5kIHJlbW92ZSBDT0VSQ0VfRklMRShmcCkuCgkqIGlvZnByaW50Zi5jOiBhZGQgQ0hFQ0tfRklMRShmcCwgLTEpIGFuZCByZW1vdmUgQ09FUkNFX0ZJTEUoZnApLgoJKiBpb2Z0ZWxsLmM6IGFkZCBDSEVDS19GSUxFKGZwLCAtMUwpIGFuZCByZW1vdmUgQ09FUkNFX0ZJTEUoZnApLgoJKiBpb3NldGJ1ZmZlci5jOiBhZGQgQ0hFQ0tfRklMRShmcCwgKSBhbmQgcmVtb3ZlIENPRVJDRV9GSUxFKGZwKS4KCkZyaSBBdWcgMTIgMTU6MzU6MzkgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBpb2Zkb3Blbi5jIChfSU9fZmRvcGVuKTogICNkZWZpbmUgT19BQ0NNT0RFIGlmIGl0IGlzbid0LgoJU3RpbGwgc2V0IE9fQVBQRU5EIGlmICJhIiBpcyBnaXZlbiwgYnV0IGRvbid0IHVuc2V0IGl0CglpZiBpdCBpc24ndC4gIEFkZGVkIGNvbW1lbnQuCgpNb24gQXVnICA4IDEzOjExOjAwIDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogZ2VuLXBhcmFtcyAoVlRBQkxFX0xBQkVMX1BSRUZJWCk6ICBDaGFuZ2VzIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4KCUZvciBsb29rIGZvciBfKnZ0WyRfLl03KmZpbGVidWYgaW4gdGhlIG5tIG91dHB1dCwgYmVjYXVzZSB0aGF0CgltYXRjaGVzIHdoYXQgZysrIHByb2R1Y2VzIGFuZCBoYXMgcHJvZHVjZWQuICBUaHVzIGl0IHNob3VsZCBiZQoJc29tZXdoYXQgbW9yZSByb2J1c3QuCgpTdW4gQXVnICA3IDIyOjUyOjQ5IDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogZ2VuLXBhcmFtcyAoQ0MpOiAgUmVtb3ZlIG5vLWxvbmdlci1uZWVkZWQgLUkgb3B0aW9ucwoJcGFzc2VkIHRvIHhnY2MgKG5vdyB0aGV5IGFyZSBpbXBsaWVkIGJ5IHRoZSAtQiBvcHRpb25zKS4KCldlZCBKdWwgMjAgMTY6NDE6MTMgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAodG9vbGRpcik6ICBBZGRlZCBkZWZpbml0aW9uLCBzbyB3ZSBjYW4gZG8KCSdtYWtlIGluc3RhbGwnIGluIHRoaXMgZGlyZWN0b3J5LgoJQnVnIHJlcG9ydGVkIGJ5IEtsYW1lciBTY2h1dHRlIDxzY2h1dHRlQHRwZC50bm8ubmw+LgoKTW9uIEp1bCAxOCAxODowMjozNCAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIGdlbi1wYXJhbXMgKFZUQUJMRV9MQUJFTF9QUkVGSVgpOiAgUmVtb3ZlIGZpbGVuYW1lIHNwcGVhcmluZwoJYnkgaXRzZWxmLiAgQWRkIGNvbW1lbnQgZXhwbGFpbmluZyB3aGF0IGlzIGdvaW5nIG9uLgoKVHVlIERlYyAyMSAxMzowMjo0OCAxOTkzICBILkouIEx1ICAoaGpsQGphbG9kKQoKCSogbGliaW8uaDogZGVmaW5lIF9JT191aWRfdCBhbmQgX0lPX0hBVkVfU1RfQkxLU0laRQoJICBhcyBfR194eHh4eHh4eC4KClR1ZSBEZWMgMjEgMTM6MDI6NDggMTk5MyAgSC5KLiBMdSAgKGhqbEBqYWxvZCkKCgkqIGlvcG9wZW4uYzogIERvbid0IGluY2x1ZGUgPGVycm5vLmg+LiBJdCBpcyBpbmNsdWRlZCBpbiAibGliaW9QLmgiLgoKCSogaW9wb3Blbi5jIChfSU9fcHJvY19jbG9zZSkgOiBjaGVjayBpZiBmcCBpcyBvbiB0aGUgbGlzdAoJICBiZWZvcmUgY2xvc2UgaXQuCgpUaHUgSnVsIDE0IDE2OjM4OjQ3IDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogZ2VuLXBhcmFtcyAoQ09ORklHX05NKTogIE1ha2Ugc2VkIHNjcmlwdHMgdG8gZmluZCB2dGFibGUgbmFtZQoJbWFuZ2xpbmcgbW9yZSByb2Jvc3QgZm9yIGRpZmZlcmVudCBmb3JtcyBvZiBubSBvdXRwdXQuCgpUdWUgRGVjIDIxIDEzOjAyOjQ4IDE5OTMgIEguSi4gTHUgIChoamxAamFsb2QpCgoJKiBpb2ZvcGVuLmMgKF9JT19mb3Blbik6IGRvbid0IGNoZWNrIFtyZWR1bmRhbnRseV0gZnAgPT0gTlVMTCBhZnRlcgoJICBJT19maWxlX2luaXQoJmZwLT5fZmlsZSkuCgoJKiBpb21hbmlwLmggKHRlbXBsYXRlPGNsYXNzIFRQPiBjbGFzcyBpYXBwKToKCSAgY2hhbmdlIG9zdHJlYW0gdG8gaXN0cmVhbS4KClR1ZSBKdWwgMTIgMTQ6MDk6MDIgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoVkVSU0lPTik6ICBJbmNyZWFzZSB0byAwLjY1LgoJKiBsaWJpb1AuaCAoYnVpbHRpbmJ1Zl92dGFibGUpOiAgT25seSBkZWZpbmUgI2lmZGVmIF9fY3BsdXNwbHVzLgoKCSogZ2VuLXBhcmFtcyAoX0dfaW50OF90KTogIE9ubHkgZGVmaW5lIGlmIGRlZmluZWQoX19TVERDX18pLAoJYmVjYXVzZSBLJlIgQyBjb21waWxlcnMgZG9uJ3QgaGF2ZSBzaWduZWQgY2hhci4KCShfR19pbnQ2NF90LCBfR191aW50NjRfdCk6ICBPbmx5IGRlZmluZSBpZiBkZWZpbmVkKF9fR05VQ19fKQoJYmVjYXVzZSBvdGhlciBjb21waWxlcnMgbWF5IG5vdCBoYXZlIGxvbmcgbG9uZy4KClN1biBNYXIgMDYgMTM6MTA6MjEgMTk5NCAgSC5KLiBMdSAgKGhqbEBueW5leHN0LmNvbSkKCgkqIGZsb2F0Y29udi5jIChfSU9fZHRvYSAoKSk6IGZpeCBhIHNtYWxsIG1lbW9yeSBsZWFrLCBzZXQgdGhlCgkgICJvbl9zdGFjayIgZmllbGQgdG8gYmUgMCBpZiAicmVzdWx0IiBpcyBub3QgTlVMTC4KClNhdCBNYXIgMDUgMTM6MTg6MjAgMTk5NCAgSC5KLiBMdSAgKGhqbEBueW5leHN0LmNvbSkKCgkqIGZsb2F0Y29udi5jIChfSU9fZHRvYSAoKSk6IGlmIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHRoZQoJICBmbG9hdGluZyBwb2ludCBudW1iZXIgaXMgbW9yZSB0aGFuIHRoZSBwcmV2aW91cyBvbmUsIGZyZWUgdGhlCgkgIG9sZCBzdHJpbmcgYW5kIGFsbG9jYXRlIGEgbmV3IG9uZS4KCSAgW01pbm9yIG9wdGltaXphdGlvbiB0byBhdm9pZCBCY29weS4gLVBCXQoKTW9uIEp1bCAxMSAxMDo1Mzo0MSAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIGZpbGVvcHMuYyAoX0lPX2ZpbGVfdW5kZXJmbG93KTogICdjb3VudCcgc2hvdWxkIGJlIHVuc2lnbmVkLAoJc2luY2UgaXQgY29udGFpbnMgdGhlIHJldHVybiB2YWx1ZSBvZiByZWFkLiAgUmVwb3J0ZWQgYnkKCVRlZW11IFRvcm1hIDx0b3RAdHJlbWEuZmk+LgoKVHVlIERlYyAyMSAxMzowMjo0OCAxOTkzICBILkouIEx1ICAoaGpsQG55bmV4c3QuY29tKQoKCSogZmxvYXRjb252LmMgKF9JT19zdHJ0b2QgKCkpOiBtYWtlICIrIiBhbmQgIi0iIGFzIGVycm9yLgoKU2F0IEp1bCAgOSAxNTowOToyMSAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCglNYWtlIHN1cmUgX0lPX0ZJTEU6Ol9mbGFncyBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LCBmb3IgdGhlCglDIGZ1bmN0aW9ucyAoZm9wZW4sIGZkb3BlbiwgcG9wZW4pLCBhbmQgbm90IGp1c3QgdGhlIEMrKyBmdW5jdGlvbnMuCgkqIGZpbGVvcHMuYyAoX0lPX2ZpbGVfaW5pdCk6ICBTZXQgX2ZsYWdzIHRvIENMT1NFRF9GSUxFQlVGX0ZMQUdTLgoJKiBmaWxlb3BzLmMgKF9JT19maWxlX2ZvcGVuKTogIFJlbW92ZSBib2d1cyBhc3NpZ25tZW50LgoJKiBmaWxlYnVmLmNjIChmaWxlYnVmIGNvbnN0cnVjdG9ycyk6ICBEb24ndCBwYXNzIENMT1NFRF9GSUxFQlVGX0ZMQUdTCgl0byBzdHJlYW1idWYgY29uc3RydWN0b3IgLSBfSU9fZmlsZV9pbml0IGRvZXMgaXQgaW5zdGVhZC4KCSogZmlsZWJ1Zi5jYyAoQ0xPU0VEX0ZJTEVCVUZfRkxBR1MpOiAgUmVtb3ZlZC4KCSogaW9wb3Blbi5jIChfSU9fcHJvY19vcGVuKTogIFVzZSBfSU9fbWFza19mbGFncy4KClRodSBKdW4gMzAgMDg6NDk6NTMgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCgoJKiBkYnovTWFrZWZpbGUuaW4gKG1vc3RseWNsZWFuKTogQWRkIHRhcmdldC4KCldlZCBKdW4gMjkgMDk6MzA6MTIgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCgoJKiBnZW4tcGFyYW1zOiBXb29wcywgY2FuJ3QgcnVuIGEgQyBwcm9ncmFtIHRvIGRldGVybWluZSB0YXJnZXQKICAgICAgICBjaGFyYWN0ZXJpc3RpY3MuICBTaWdoLgoKVHVlIEp1biAyOCAwMzoxMTozMyAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGdlbi1wYXJhbXM6IEFkZCBfR197LHV9aW50ezgsMTYsNjR9X3QsIHVzZSBhIHNob3J0IEMgcHJvZ3JhbSB0bwogICAgICAgIGRldGVybWluZSB3aGF0IGFsbCB0aGVzZSBzaG91bGQgYmUgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGNvbXBhcmUKICAgICAgICB0aGUgTUFYIG51bWJlcnMgaW4gdGhlIHNoZWxsLgoKU3VuIEp1biAyNiAyMTowNDoyNCAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIHN0ZGlvc3RyZWFtLmgsIHN0ZGlvc3RyZWFtLmNjIChzdGRpb2J1Zjo6eHNnZXRuKTogIFJlbW92ZWQuCglUb28gaGFpcnkuICBJZiB3ZSB3YW50IHRvIG9wdGltaXplIGl0LCB3ZSBzaG91bGQgZG8gc28gaW4KCWZpbGVidWY6OnhzZ2V0biAob3IgcmF0aGVyIF9JT19maWxlX3hzZ2V0bikuCgoJKiBzdGRpb3N0cmVhbS5oIChjbGFzcyBzdGRpb2J1ZiksIHN0ZGlvc3RyZWFtLmNjOiAgRml4IHBhcmFtZXRlcgoJYW5kIHJldHVybiB0eXBlcyBvZiB2aXJ0dWFsIGZ1bmN0aW9uIHRvIG1hdGNoZXIgYmFzZSB0eXBlcyAoT29wcyEpLgoJKiBzdHJlYW1zdHJlYW0uY2MgKHN0ZGlvYnVmOjp4c2dldG4sIHN0ZGlvYnVmOjp4c3B1dG4pOgoJT3B0aW1pemUgdG8gY2FsbCBmcmVhZC5md3JpdGUgZGlyZWN0bHkgaWYgIWJ1ZmZlcmVkLgoJKiBmaWxlb3BzLmM6ICBGaXggY29tbWVudC4KCkZyaSBKdW4gMjQgMTE6Mjg6MTggMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBzdGRpb3N0cmVhbS5oIChpc3RkaW9zdHJlYW0sIG9zdGRpb3N0cmVhbSk6ICBOZXcgY2xhc3Nlcy4KCglNb3JlIHJvYnVzdCBmaW5hbCBjbGVhbnVwLgoJKiBjbGVhbnVwLmMgKF9JT19yZWdpc3Rlcl9jbGVhbnVwKTogIFJlZ2lzdGVyIF9JT19jbGVhbnVwLAoJcmF0aGVyIHRoYW4gX0lPX2ZsdXNoX2FsbC4KCSogZmlsZWRvYWxsb2MuYzogVXBkYXRlIGNvbW1lbnQuCgkqIGdlbm9wcy5jIChfSU9fdW5idWZmZXJfYWxsKTogIE5ldy4gIE1ha2VzIGFsbCBmaWxlcyB1bmJ1ZmZlcmVkLgoJKiBnZW5vcHMuYyAoX0lPX2NsZWFudXApLCBsaWJpb1AuaDogIE5ldyBmdW5jdGlvbi4gIENhbGwKCV9JT19mbHVzaF9hbGwsIGFuZCB0aGVuIF9JT191bmJ1ZmZlcl9hbGwuICBUaGlzIGlzIGluIGNhc2UgQysrCglkZXN0cnVjdG9ycyB0cnkgdG8gZG8gb3V0cHV0ICphZnRlciogX0lPX2NsZWFudXAgaXMgY2FsbGVkLgoKCUNvbnN0cnVjdCBzdGFuZGFyZCBzdGRpb2J1ZnMgc3RhdGljYWxseSAodXNpbmcgdHlwZSBwdW5uaW5nKS4KCSogc3Rkc3RyYnVmcy5jOyAgVW5sZXNzIF9TVERJT19VU0VTX0lPU1RSRUFNIGRlY2xhcmUgc3RhbmRhcmQKCXN0ZGlvYnVmcyAoZm9yIHN0ZGluLCBzdGRvdXQsIGFuZCBzdGRlcnIpLCB1c2luZyB0eXBlIHB1bm5pbmcKCShzdHJ1Y3QgX0lPX2Zha2Vfc3RkaW9idWYpLiAgVGhpcyBhdm9pZHMgY29uc3RydWN0b3ItdGltZSBwcm9ibGVtcy4KCSogc3Rkc3RyZWFtcy5jYzogIFJlbW92ZSB0aGUgZGVjbGFyYXRpb25zIG9mIHRoZSBzdGRpb2J1ZnMuCglJbnN0ZWFkIHVzZSB0aGUgbmV3IChmYWtlKSBvbmVzIGluIHN0ZHN0cmJ1ZnMuY2MuICBXZSBubyBsb25nZXIKCWhhdmUgdG8gY2FsbCBpb3M6OnN5bmNfd2l0aF9zdGRpbyBhdCBjb25zdHJ1Y3RvciB0aW1lLgoKCVByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIG5ldyBBTlNJIHN0cmVhbWJ1Zjo6dWZsb3cgdmlydHVhbC4KCSogbGliaW9QLmggKHN0cnVjdCBfSU9fanVtcF90KTogIEFkZCBfX3VmbG93IGZpZWxkLgoJKiBnZW5vcHMuYyAoX0lPX2RlZmF1bHRfdWZsb3cpLCBsaWJpb1AuaDogIE5ldyBmdW5jdGlvbi4KCSogZmlsZW9wcy5jIChfSU9fZmlsZV9qdW1wcyksIGlvcG9wZW4uYyAoSU9fcHJvY19qdW1wcyksCglpb3ZmcHJpbnRmLmMgKF9JT19oZWxwZXJfanVtcHMpLCBzdHJvcHMuYyAoX0lPX3N0cl9qdW1wcyksCglzdHJlYW1idWYuY2MgKF9JT19zdHJlYW1idWZfanVtcHMpOiAgQWRkIF9JT19kZWZhdWx0X3VmbG93LgoJKiBnZW5vcHMuYyAoX191Zmxvdyk6ICBOZXcgZnVuY3Rpb24uCgkoc2F2ZV9mb3JfYmFja3VwKTogIE5ldyBmdW5jdGlvbi4gIFNvbWUgY29kZSBzaGFyZWQgYnkKCV9fdW5kZXJmbG93IGFuZCBfX3VmbG93LCBtb3ZlZCBvdXQgZnJvbSB0aGUgZm9ybWVyLgoJKF9JT19kZWZhdWx0X3VmbG93KTogIE5ldyBmdW5jdGlvbi4KCSogbGliaW8uaCAoX0lPX2dldGMpOiAgQ2FsbCBfX3VmbG93LCBub3QgX191bmRlcmZsb3cuCgpXZWQgSnVuIDIyIDIwOjIyOjQ5IDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCU1ha2Ugc3VyZSB0aGF0IHRoZSB2dGFibGUgb2YgYSBzdHJlYW1idWYgaXMgYWx3YXlzIHZhbGlkLAoJd2hpY2ggbWFrZXMgaW9zOjpyZGJ1ZiBzaW1wbGVyIGFuZCBmYXN0ZXIuCgkqIGdlbi1wYXJhbXM6ICBBZGQgY29kZSB0byBkZXRlcm1pbmUgX0dfVlRBQkxFX0xBQkVMX0hBU19MRU5HVEgsCglfR19WVEFCTEVfTEFCRUxfUFJFRklYLCBfR19WVEFCTEVfTEFCRUxfUFJFRklYX0lELCBhbmQKCV9HX1VTSU5HX1RIVU5LUywgd2hpY2ggZGVzY3JpYmUgaG93IHZpcnR1YWwgZnVuY3Rpb24gdGFibGVzIGFyZSBuYW1lZC4KCSogc3RkZmlsZXMuYyAoRklMRUJVRl9MSVRFUkFMKTogIE1vdmVkIHRvIGxpYmlvUC5oLgoJKiBsaWJpb1AuaCAoYnVpbHRpbmJ1Zl92dGFibGUpOiAgTmV3IChjb21wbGljYXRlZCkgZGVjbGFyYXRpb24uCgkqIGZpbGVidWYuY2MgKGZpbGVidWY6Ol9fbmV3KSwgc3Ryc3RyZWFtLmNjIChTRVRfU1RSX0pVTVBTKToKCUluaXRpYWxpemUgdnRhYmxlIHRvIGJ1aWx0aW5idWZfdnRhYmxlLCBub3QgTlVMTC4KCSogc3Rkc3RyYnVmcy5jYzogIE5ldyBmaWxlLiAgU2FtZSBhcyBzdGRmaWxlcy5jLCBleGNlcHQgdGhhdAoJdnRhYmxlIGlzIGluaXRpYWxpemVkIHRvIGJ1aWx0aW5idWZfdnRhYmxlLCBub3QgTlVMTC4KCSogc3RyZWFtYnVmLmggKGlvczo6cmRidWYpOiAgQ2FuIG5vdyBzaW1wbGlmeS9vcHRpbWl6ZSwgZHVlIHRvCglhYm92ZSBjaGFuZ2VzLiAgQWx3YXlzLCBqdXN0IHJldHVybiBfc3RyYnVmLgoJKiBidWlsdGluYnVmLmgsIGJ1aWx0aW5idWYuY2MgKGJ1aWx0aW5idWY6OnZ0YWJsZSwKCWJ1aWx0aW5idWY6OmdldF9idWlsdGluX3Z0YWJsZSk6ICBSZW1vdmVkLiAgTm8gbG9uZ2VyIG5lZWRlZC4KCSogc3RyZWFtYnVmLmgsIGJ1aWx0aW5idWYuY2MgKGlvczo6X0lPX2ZpeF92dGFibGUpOiAgTm8gbG9uZ2VyIG5lZWRlZC4KCU9ubHkgZGVmaW5lZCAjaWZkZWYgX1NUUkVBTV9DT01QQVQsIGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eS4KCSogTWFrZWZpbGUuaW46ICBNb3ZlIHN0ZGZpbGVzLm8gZnJvbSBJT19PQkpFQ1RTIHRvIFNURElPX1dSQVBfT0JKRUNUUy4KCShJT1NUUkVBTV9PQkpFQ1QpOiAgQWRkIHN0ZHN0cmJ1ZnMuby4KCSogTWFrZWZpbGUuaW4gKF9HX2NvbmZpZy5oKTogIFBhc3MgJChDWFhGTEFHUykgYXMgcGFydCBvZiAkKENYWCkuCgpGcmkgRmViIDExIDExOjA4OjAxIDE5OTQgIFNCUE0gTWFyYyBHSU5HT0xEIChtYXJjQGRhdmlkLnNhY2xheS5jZWEuZnIpCgoJKiBpb3ZmcHJpbnRmLmMgKGhlbHBlcl92ZnByaW50Zik6IGFkZAoJICBocC0+X0lPX2ZpbGVfZmxhZ3MgPSBfSU9fTUFHSUN8KF9JT19JU19GSUxFQlVGK19JT19OT19SRUFEUyk7CglbVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBfSU9fdmZwcmludGYgY2hlY2tzIGZvciBfSU9fVU5CVUZGRVJFRC4gLVBCXQoJW0FjdHVhbGx5OiAgZG9uJ3Qgc2V0IF9JT19JU19GSUxFQlVGLiAtUEJdCgpXZWQgSnVuIDIyIDEzOjQ5OjIyIDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogc3RkaW9zdHJlYW0uY2MsIHN0ZGlvc3RyZWFtLmggKHN0ZGlvYnVmOjpidWZmZXJlZCk6ICBOZXcgbWV0aG9kcy4KCgkqIGlvZmRvcGVuLmMgKF9JT19mZG9wZW4pOiAgVmFyaW91cyBtaW5vciBpbXByb3ZlbWVudHMuCgoJKiBpb3Zmc2NhbmYuYzogIERvbid0IHJldHVybiBFT0Ygb24gY29udHJvbF9mYWlsdXJlLgoKVHVlIERlYyAyMSAxMzowMjo0OCAxOTkzICBILkouIEx1ICAoaGpsQG55bmV4c3QuY29tKQoKCSogaW92ZnNjYW5mLmM6ICBFbmZvcmNlIHRoZSBzZXF1ZW5jZSBvZiB0aGUgY29udmVyc2lvbiBzcGVjaWZpY2F0aW9ucy4KCkZyaSBKdW4gMTcgMjA6NTc6MjIgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBpb2Zkb3Blbi5jOiAgVXNlIGZjbnRsIHRvIGNoZWNrIHRoYXQgcmVxdWVzdGVkIGFjY2VzcyBtb2RlIGlzCgljb21wYXRpYmxlIHdpdGggZXhpc3RpbmcgYWNjZXNzIG1vZGUsIGFuZCB0byBjaGFuZ2UgdGhlCglPX0FQUEVORCBmaWxlIHN0YXR1cyBmbGFnIGlmIG5lZWQgYmUuCgpUaHUgSnVuIDE2IDE3OjMzOjUwIDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogc3RyZWFtYnVmLmggKGlvczo6aW5pdCk6ICBJbml0aWFsaXplIGFsbCB0aGUgZmllbGRzLgoJVGhpcyBtYXkgYmUgb3ZlcmtpbGwsIGJ1dCB0aGUgY3VycmVudCBBTlNJIHdvcmtpbmcgcGFwZXIgcmVxdWlyZXMgaXQuCgkqIHN0cmVhbWJ1Zi5oIChpb3M6Omlvcyk6ICBSZWltcGxlbWVudCBpbiB0ZXJtcyBvZiBpb3M6OmluaXQuCgkqIGlvc3RyZWFtLmNjIChOb24tZGVmYXVsdCBjb25zdHJ1Y3RvcnMgaXN0cmVhbTo6aXN0cmVhbSwKCW9zdHJlYW06Om9zdHJlYW0sIGlvc3RyZWFtOjppb3N0cmVhbSk6ICBDYW5ub3QgdXNlIGEgbWVtLWluaXRpYWxpemVyLAoJYmVjYXVzZSBpdCBpcyBpZ25vcmVkIGlmIGluaXRpYWxpemluZyBhIGRlcml2ZWQgY2xhc3MuICBJbnN0ZWFkLAoJY2FsbCBpb3M6OmluaXQuCgpXZWQgSnVuIDE1IDEzOjM1OjM3IDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogc3Rkc3RyZWFtcy5jYyAoSVNUUkVBTV9ERUYpOiAgRml4IHR5cG8gKGl0J3MgYSBfZmFrZV9pc3RyZWFtLCBub3QKCWEgX2Zha2Vfb3N0cmVhbSkuICBSZXBvcnRlZCBieSBKYXNvbiBTaGlyayA8anNoaXJrQGdvbWV6LmludGVsLmNvbT4uCgoJKiBzdGRpb3N0cmVhbS5oLCBzdGRpb3N0cmVhbS5jYyAoc3RkaW9idWY6On5zdGRpb2J1Zik6ICBOZXcuCglDYWxsIF9JT19kb19mbHVzaC4KCSogc3RkaW9zdHJlYW0uY2MgKHN0ZGlvYnVmOjpzeW5jKTogIENhbGwgX0lPX2RvX2ZsdXNoIHJhdGhlcgoJdGhhbiBmaWxlYnVmOjpzeW5jICh0byBhdm9pZCBiYWQgc2Vla3MpLgoKCSogbGliaW9QLmggKF9JT19kb19mbHVzaCk6ICBBZGQgbWlzc2luZyBwYXJlbnRoZXNlcy4KCkZyaSBKdW4gIDMgMTk6MTY6NTcgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCgoJKiBjb25maWcuc2hhcmVkIChDWFhGTEFHUyk6IFJlbW92ZSAtZm5vLWltcGxpY2l0LXRlbXBsYXRlcy4KCgkqIGlvbWFuaXAuaDogQWRkIGV4cGxpY2l0IGV4dGVybmFsIGluc3RhbnRpYXRpb25zLgoKV2VkIEp1biAgMSAxNDoxNDo0NCAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIGxpYmlvLmggKHN0cnVjdCBfSU9fRklMRV9wbHVzKTogIE1vdmUgZGVmaW5pdGlvbiBmcm9tIGhlcmUgLi4uCgkqIGxpYmlvUC5oIChzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyk6ICAuLi4gdG8gaGVyZS4gIFNpbmNlIHRoaXMKCWZpbGUgaXMgcHJpdmF0ZSB0byB0aGUgaW1wbGVtZW50YXRpb24sIHdlIGNhbiByZW5hbWUgdGhlIGZpZWxkcwoJZnJvbSB0aGUgaW1wbGVtZW50b3IncyB0byB0aGUgdXNlcidzIG5hbWUgYW5tZSBzcGFjZS4KCShUaGlzIGF2b2lkcyBhIGxvc3NhZ2Ugb24gU0NPLCB3aG9zZSBzdGRpby5oIGhhcyBhICNkZWZpbmUgX2ZpbGUuKQoJKiBpb2Zkb3Blbi5jLCBpb2ZvcGVuLmMsIHN0ZGZpbGVzLmM6ICBGaXggZmllbGQgcmVmZXJlbmNlcyBhY2NvcmRpbmdseS4KCSogaW9wb3Blbi5jIChzdHJ1Y3RfSU9fcHJvY19maWxlKTogIFJlbmFtZSBmaWVsZHMgZnJvbQoJaW1wbGVtZW50b3IncyBuYW1lIHNwYWNlIHRvIHVzZXIncywgYW5kIHVwZGF0ZSB1c2FnZXMuCgkqIHN0cmVhbWJ1Zi5oIChzdHJlYW1idWY6Ol92dGFibGUpOiAgUmUtaW1wbGVtZW50IHRvIG5vdCBuZWVkCglzdHJ1Y3QgX0lPX0ZJTEVfcGx1cy4KCSogc3RyZmlsZS5oIChzdHJ1Y3QgX0lPX3N0cmZpbGVfKTogTGlrZXdpc2UuCgpXZWQgSnVuICAxIDEzOjU3OjQ4IDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQoKCSogY29uZmlnLnNoYXJlZCAoQ1hYRkxBR1MpOiBVc2UgLWZuby1pbXBsaWNpdC10ZW1wbGF0ZXMgaW5zdGVhZCBvZgoJLWZleHRlcm5hbC10ZW1wbGF0ZXMuCgpUdWUgTWF5IDMxIDA4OjQ5OjI4IDE5OTQgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKCgkqIGdlbm9wcy5jLCBpb2ZjbG9zZS5jLCBpb2Zkb3Blbi5jLCBpb2ZvcGVuLmMsIGlvcG9wZW4uYzogQmUKCWNvbnNpc3RlbnQgYWJvdXQgcHJvdGVjdGluZyAjaW5jbHVkZSA8c3RkbGliLmg+LgoKCSogaW9wdXRzLmM6IEFkZCAjaW5jbHVkZSA8c3RyaW5nLmg+LCB0byBhdm9pZCB3YXJuaW5nIG9uIGFscGhhLgoKCSogaW9mZG9wZW4uYzogQWRkICNpbmNsdWRlIDxzdGRsaWIuaD4sIHNvIHRoYXQgbWFsbG9jIHdvcmtzIG9uCgltYWNoaW5lcyB3aGVyZSBzaXplb2YoaW50KSAhPSBzaXplb2Yodm9pZCAqKS4KCk1vbiBNYXkgMzAgMTc6MjY6NDkgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBwZnN0cmVhbS5jYyAoaXBmc3RyZWFtOjppcGZzdHJlYW0sIG9wZnN0cmVhbTo6b3Bmc3RyZWFtKToKCVJldmVyc2Ugc2Vuc2Ugb2YgdGVzdCBvZiByZXR1cm4gdmFsdWUgb2YgcHJvY2J1Zjo6b3Blbi4KCShJdCByZXR1cm5zIE5VTEwgb24gZmFpbHVyZS4pCgoJKiBmaWxlZG9hbGxvYy5jIChfSU9fZmlsZV9kb2FsbG9jYXRlKTogIFJlbW92ZSBkZWFkIGNvZGUgZm9yCglVU0VfTUFMTE9DX0JVRi4gIEFkZCBjb2RlIHRvIHJldHVybiBFT0YgaWYgQUxMT0NfQlVGIGZhaWxzLgoKU2F0IE1heSAyOCAxMzo0Nzo0NyAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGlvbWFuaXAuY2M6IEV4cGxpY2l0bHkgaW5zdGFudGlhdGUgc21hbmlwPGludD4gYW5kCglzbWFuaXA8aW9zOjpmbXRmbGFncz4uCgpXZWQgTWF5IDI1IDE2OjA0OjEyIDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogc3RyZmlsZS5oOiAgVXNlIF9fUCBpbnN0ZWFkIG9mIF9QQVJBTVMuCgpGcmkgTWF5IDIwIDExOjQyOjE3IDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogbGliaW8uaDogUmVuYW1lIF9QQVJBTVMgbWFjcm8gdG8gX19QIGZvciBiZXR0ZXIgZ2xpYmMgYW5kIEJTRAoJY29tcGF0aWJpbGl0eS4gIChBbHNvIGRlZmluZSBfUEFSQU1TIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4pCgkqIGNsZWFudXAuYywgaW9saWJpby5oLCBpb3BlcnJvci5jLCBpb3ZmcHJpbnRmLmMsIGlvdmZzY2FuZi5jLAoJbGliaW9QLmg6IFVzZSBfX1AgaW5zdGVhZCBvZiBfUEFSQU1TLgoJKiBpb3N0ZGlvLmg6IFVzZSBfX1AgaW5zdGVhZCBvZiBfQVJHUy4KCgkqIGZpbGVvcHMuYyAoX0lPX2ZpbGVfcmVhZCk6ICBNaW5vciBzdHlsaXN0aWMgdHdlYWsuICAoSXQgaXMKCXByZWZlcmFibGUgdG8gdGVzdCBlcnJubyAqYWZ0ZXIqIHRoZSBlcnJvciByZXR1cm4uKQoKRnJpIE1heSAxMyAxNToyNTozNiAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGlvc3RyZWFtLio6IEFkZCBpbnNlcnRvciBhbmQgZXh0cmFjdG9yIGZvciBib29sIChqdXN0IHByZXRlbmQKCWl0J3MgYW4gaW50KS4KCkZyaSBNYXkgMTMgMTQ6MTI6MDMgMTk5NCAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQoKCSogZ2VuLXBhcmFtczogQ2hlY2sgZm9yIGJ1aWx0aW4gYm9vbCBzdXBwb3J0LgoKV2VkIE1heSAxMSAwMDo0ODozNSAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKCglNYWtlIGxpYmcrKyBidWlsZCB3aXRoIGdjYyAtYW5zaSAtcGVkYW50aWMtZXJyb3JzCgkqIGdlbi1wYXJhbXM6ICNpZmRlZiBfX1NUUklDVF9BTlNJX18sICNkZWZpbmUgX0dfTk9fTlJWLgoJKiBwZnN0cmVhbS5jYyAoaXBmc3RyZWFtOjppcGZzdHJlYW0pOiBXcmFwIHVzZSBvZiB2YXJpYWJsZS1zaXplCglhcnJheSBpbiAjaWZuZGVmIF9fU1RSSUNUX0FOU0lfXy4KCkZyaSBNYXkgIDYgMTI6NDI6MjEgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoVkVSU0lPTik6ICBJbmNyZWFzZSB0byAwLjY0LgoKCSogaXNnZXRsaW5lLmNjIChpc3RyZWFtOjpnZXRsaW5lKTogIFRoZSBkZWxpbWl0ZXIgc2hvdWxkICpub3QqCgliZSBpbmNsdWRlZCBpbiB0aGUgZ2NvdW50KCkuCgoJKiBmaWxlZG9hbGxvYy5jOiAgI2luY2x1ZGUgPHN0ZGxpYi5oPiAoSWYgX19TVERDX18pIHRvIGdldCBtYWxsb2MuCgkqIGlvc3RyZWFtLmggKG9zdHJlYW06OnB1dCk6ICBSZW1vdmUgb3ZlcmxvYWRlZCB2ZXJzaW9ucywgdG8gbWF0Y2gKCW5ldyB3b3JraW5nIHBhcGVyLiAgKEFjdHVhbGx5IGp1c3QgcHV0IGluc2lkZSBfU1RSRUFNX0NPTVBBVCwgZm9yIG5vdy4pCgpUdWUgTWF5ICAzIDE0OjE0OjU3IDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogZ2Vub3BzLmMgKF9JT19kZWZhdWx0X2ZpbmlzaCk6ICBNYWtlIHJvYnVzdCB3aGVuIGNhbGxlZAoJbXVsdGlwbGUgdGltZXMgb24gdGhlIHNhbWUgX0lPX0ZJTEUqLiAgKE9uZSB3YXkgdGhpcyBjYW4KCWhhcHBlbiBpcyBieSB0aGUgYnVpbHRpbmJ1ZiBkZXN0cnVjdG9yIGJlaW5nIGZvbGxvd2VkIGJ5IHRoZQoJc3RyZWFtYnVmIGRlc3RydWN0b3IuKQoKTW9uIE1heSAgMiAxMzo1NToyNiAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGdlbi1wYXJhbXM6IEFjdHVhbGx5IGRldGVybWluZSB3aW50X3QgcmF0aGVyIHRoYW4gZGVwZW5kaW5nIG9uCgljcHAgdG8gcHJvdmlkZSBpdCBvciBkZWZhdWx0aW5nIHRvIHRoZSB1bmRlcmx5aW5nIHR5cGUgZm9yCgl3Y2hhcl90LgoKU2F0IEFwciAzMCAxNDo0NzozMCAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGdlbi1wYXJhbXM6IEFkZCBfR193aW50X3QsIGFsbG93IF9fKl9UWVBFX18gdG8gb3ZlcnJpZGUgdmFsdWVzCglhdCBjb21waWxlIHRpbWUsIGZpeCBkZWZpbml0aW9uIG9mIF9HX0FSR1MuCgpGcmkgQXByIDI5IDE2OjU1OjM3IDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogbGliaW8uaDogUmVtb3ZlICNwcmFnbWEgaW50ZXJmYWNlLiAgKFRoZXJlIGlzIG5vIGltcGxlbWVudGF0aW9uLikKCk1vbiBNYXIgMjggMTQ6MjI6MjYgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBpb3N0cmVhbS5jYyAob3N0cmVhbTo6b3BlcmF0b3I8PChkb3VibGUpKTogIEFkZC9maXggc3VwcG9ydAoJZm9yIHByaW50aW5nICcrJyB3aGVuIGlvczo6c2hvd3BvcyBpcyBzZXQuCgkoRml4ZXMgYnVnIHJlcG9ydGVkIGJ5IERvdWcgTW9vcmUgPGRvdWdtQGNzLnJpY2UuZWR1Pi4pCgkqIGlvc3RyZWFtLmNjIChpc3RyZWFtOjpyZWFkKTogIFNldCBlb2ZiaXQgYXMgd2VsbCBhcyBmYWlsYml0IG9uIGVvZi4KCSogaW9zdHJlYW0uY2MgKG9zdHJlYW06Om9wZXJhdG9yPDwoaW50KSk6ICBGaXggY29udmVyc2lvbgoJdG8gdW5zaWduZWQgKHVzZWQgdG8gbG9zZSBvbiBJTlRfTUlOKS4KCSogaW9zdHJlYW0uY2MgKG9zdHJlYW06Om9wZXJhdG9yPDwobG9uZykpOiAgVXNlICh1bnNpZ25lZCBsb25nKSwKCXJhdGhlciB0aGFuICh1bnNpZ25lZCkgZm9yIHRlbXBvcmFyeS4KCgkqIGNvbmZpZy5zaGFyZWQsIE1ha2VmaWxlLmluOiAgUmVtb3ZlIGRlZmluaXRpb25zIGFuZCB1c2VzCglvZiBYVFJBRkxBR1MuICBJdCBpcyBubyBsb25nZXIgbmVlZGVkLCBzaW5jZSBpdCBpcwoJbm93IGltcGxpZWQgYnkgdGhlIC1CIGZsYWcuCgpGcmkgTWFyIDI1IDAwOjMxOjIyIDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQoKCSogYnVpbHRpbmJ1Zi5oOiBBZGQgcHV0IC8qKi8gYXJvdW5kIGNvbW1lbnQgb24gdHJhaWxpbmcgI2VuZGlmLgoKCSogTWFrZWZpbGUuaW4gKGMrK2NsZWFuKTogTWFrZSBjbGVhbiBpbiB0ZXN0cyBzdWJkaXIsIHRvby4KCldlZCBNYXIgMjMgMTY6NDI6MDkgMTk5NCAgRG91ZyBFdmFucyAgKGRqZUBjYW51Y2suY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIE1ha2VmaWxlLnRlbSBiZWZvcmUgY3JlYXRpbmcgaXQuCglOZWVkZWQgd2hlbiBjb25maWd1cmluZyBmcm9tIHJlYWQtb25seSBzb3VyY2UgdHJlZXMuCgpXZWQgTWFyIDE2IDE0OjA2OjQyIDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogc3Rkc3RyZWFtcy5jYzogIEZpeCBzbyB0aGF0IHN0ZGlvYnVmIGFyZSB1c2VkIGZvciBjaW4vY291dC9jZXJyLAoJdW5sZXNzIF9TVERJT19VU0VTX0lPU1RSRUFNIGlzIGRlZmluZWQuCgkqIGZpbGVidWYuY2MgKGZpbGVidWY6OnNldGJ1Zik6ICBGaXggY29uZnVzaW9uIGFib3V0IHJldHVybgoJdmFsdWUgZnJvbSBfSU9fZmlsZV9zZXRidWYuCgpTdW4gTWFyIDEzIDAwOjU0OjEyIDE5OTQgIFBhdWwgRWdnZXJ0ICAoZWdnZXJ0QHR3aW5zdW4uY29tKQoKCSogY29uZmlnLnNoYXJlZDogRW5zdXJlIHRoYXQgYGFsbCcgcHJlY2VkZXMgYC5QSE9OWSc7CglCU0RJIDEuMSBuZWVkcyB0aGlzLgoKU2F0IE1hciAxMiAwMzo1ODowMCAxOTk0ICBQYXVsIEVnZ2VydCAgKGVnZ2VydEB0d2luc3VuLmNvbSkKCgkqIGNvbmZpZy5zaGFyZWQ6IE91dHB1dCBhIGRlZmluaXRpb24gb2YgSU5TVEFMTCB0aGF0IHVzZXMKCSQke3Jvb3RtZX0sIG5vdCAke3Jvb3RtZX0uICBNb3N0IGBtYWtlJ3MgZG9uJ3QgY2FyZSwgYnV0IEJTREkKCTEuMSBgbWFrZScgZG9lcy4KCkZyaSBNYXIgIDQgMTc6MzM6MDEgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBpb3BvcGVuLmM6ICAjZGVmaW5lIF9QT1NJWF9TT1VSQ0UuCgkqIGlzZ2V0bGluZS5jIChpc3RyZWFtOjpnZXRsaW5lKTogIFZhcmlvdXMgZml4ZXMuCgpUaHUgTWFyICAzIDE3OjU4OjIwIDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogaW9zdHJlYW0uY2MgKHdyaXRlX2ludCk6ICBGaXggdGVzdCBmb3Igd2hlbiB0byBhZGQgaW5pdGlhbCAnMCcKCXdoZW4gaW9zOjpvY3QgYW5kIGlvczo6c2hvd2Jhc2UgYXJlIHNldC4KCUZvciBoZXgsIHNob3diYXNlIGFkZHMgaW5pdGlhbCAweCAob3IgMFgpIHJlZ2FyZGxlc3Mgb2YgdmFsPT0wLgoJQnVncyByZXBvcnRlZCBieSBQaGlsIFJvdGggPHByb3RoQGNzLnVpdWMuZWR1Pi4KCk1vbiBGZWIgMjEgMTM6MTg6MjAgMTk5NCAgSC5KLiBMdSAgKGhqbEBueW5leHN0LmNvbSkKCgkqIGxpYmlvLmggKF9JT19QRU5ESU5HX09VVFBVVF9DT1VOVChfZnApKTogcmV0dXJuIHRoZQoJcGVuZGluZyBvdXRwdXQgY291bnQgaW4gX2ZwLgoKRnJpIEZlYiAyNSAwOToyNjo1NyAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBnZW4tcGFyYW1zOiBGb3IgSEFWRV9TWVNfV0FJVCwgY29tcGlsZSBkdW1teS5jLCBub3QgZHVtbXkuQy4KClR1ZSBGZWIgMjIgMTE6MTk6MDkgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBzdHJlYW1idWYuaCwgZ2Vub3BzLmMsIGxpYmlvUC5oOiAgUmVuYW1lIHJlZmVyZW5jZXMgdG8KCV9JT19GSUxFIGZpZWxkcyBvdGhlcl9nYmFzZSA9PiBfSU9fc2F2ZV9iYXNlLAoJX2F1eF9saW1pdCA9PiBfSU9fYmFja3VwX2Jhc2UsIGFuZCBfb3RoZXJfZWdwdHIgPT4gX0lPX3NhdmVfZW5kLgoJKiBsaWJpby5oOiAgUmVtb3ZlIG5vLWxvbmdlciBuZWVkZWQgbWFjcm9zIF9vdGhlcl9nYmFzZSwKCV9hdXhfbGltaXQsIGFuZCBfb3RoZXJfZWdwdHIuCgkqIGdlbm9wcy5jIChfX3VuZGVyZmxvdywgX0lPX2RlZmF1bHRfZmluaXNoaCwgX0lPX3Vuc2F2ZV9tYXJrZXJzKToKCUNoZWNrIF9JT19zYXZlX2Jhc2UgZm9yIE5VTEwgYmVmb3JlIEZSRUVpbmcgaXQgb3IgY2FsbGluZwoJX0lPX2ZyZWVfYmFja3VwX2FyZWEuCgpUaHUgRmViIDE3IDE1OjI2OjU5IDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogZ2VuLXBhcmFtczogIEltcHJvdmUgZGVkdWN0aW9uIG9mIF9HX3VpbnQzMiBhbmQgX0dfaW50MzIuCglTaG91bGQgbm93IHdvcmsgZm9yIDE2LWJpdCwgMzItYml0LCBvciA2NC1iaXQgdGFyZ2V0cy4KCSogZ2VuLXBhcmFtczogIENoZWNrIGZvciBzeXMvd2FpdC5oIHVzaW5nICR7Q0N9LCBzaW5jZSBpdCdzCglub3cgdXNlZCBpbiBhIEMgZmlsZSwgbm90IGEgQysrIGZpbGUuCgkqIGZsb2F0Y29udi5jOiAgVHlwZWRlZiBfR191aW50MzJfdCBhcyB1bnNpZ25lZDMyLCBhbmQgdXNlCgl1bnNpZ25lZDMyIGluIHBsYWNlIG9mIHVuc2lnbmVkIGxvbmcuICAoTmVlZGVkIGZvciBBbHBoYS4pCgpUdWUgRmViICA4IDEzOjQwOjE1IDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogZmlsZW9wcy5jIChfSU9fZmlsZV9jbG9zZV9pdCk6ICBTaW1wbGlmeSBieSB1c2luZyBfSU9fZG9fZmx1c2guCgkqIGZpbGVvcHMuYyAoX0lPX2ZpbGVfZmluaXNoKTogIERvbid0IGNhbGwgX0lPX2ZpbGVfY2xvc2VfaXQgLQoJZG8gaXQgaW5saW5lLiAgQ2FsbCBfSU9fZG9fZmx1c2ggZXZlbiBpZiBfSU9fREVMRVRFX0RPTlRfQ0xPU0UuCgkqIGZpbGVvcHMuYyAoX0lPX2ZpbGVfYXR0YWNoKTogIFNldCBfSU9fREVMRVRFX0RPTlRfQ0xPU0UuCgkqIGdlbm9wcy5jIChfSU9fZmx1c2hfYWxsKTogIE9ubHkgY2FsbCBvdmVyZmxvdyBpZiB0aGVyZSBpcwoJc29tZXRoaW5nIHRvIHdyaXRlLgoJKiBpb2ZjbG9zZS5jIChfSU9fZmNsb3NlKTogIENoZWNrIHRoYXQgbWFnaWMgbnVtYmVyIGlzIGNvcnJlY3QsCglhbmQgY2xlYXIgaXQgd2hlbiBkb25lLiAgQXZvaWRzIGNyYXNoaW5nIHNvbWUgYnVnZ3kgYXBwbGljYXRpb25zLgoJKiBpb2dldGxpbmUuYyAoX0lPX2dldGxpbmUpOiAgRG9uJ3QgZ3JhdHVpdG91c2x5IGluY3JlbWVudCBvbGRfbGVuLgoJKiBpb2dldHMuYyAoX0lPX2dldHMpOiAgVGFrZSBjYXJlIHRvIGdldCByZXF1aXJlZCBBTlNpIHNlbWFudGljcy4KClN1biBGZWIgIDYgMTk6NTA6MzkgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCgoJKiBpb21hbmlwLmNjOiBFeHBsaWNpdGx5IGluc3RhbnRpYXRlIG9wZXJhdG9yPDwgYW5kID4+LgoKRnJpIEZlYiAgNCAxMjoyODoyMiAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy5zaGFyZWQgKENYWEZMQUdTKTogVXNlIC1mZXh0ZXJuYWwtdGVtcGxhdGVzLgoKCSogaW9tYW5pcC5oOiBVbmNvbW1lbnQgI3ByYWdtYSBpbnRlcmZhY2UuCgpUaHUgSmFuIDIwIDEzOjQ4OjQwIDE5OTQgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCUlmIG5vIGNoYXJhY3RlcnMgYXJlIHJlYWQgYnkgZmdldHMsIEFOU0kgQyBkb2Vzbid0IGFsbG93ICdcMCcgdG8KCWJlIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlciwgYnV0IGl0IGlzIHJlcXVpcmVkIGJ5IEFOU0kgQysrCglmb3IgaXN0cmVhbTo6Z2V0IGFuZCBpc3RyZWFtOjpnZXRsaW5lLiAgQm90aCB1c2UgX0lPX2dldGxpbmUgLi4uCgkqIGlvZ2V0bGluZS5jIChfSU9fZ2V0bGluZSk6ICBEb24ndCB3cml0ZSBhICdcMCcgYXQgdGhlIGVuZAoJb2YgdGhlIHJlYWQgZGF0YS4gIFRoZSBpbnB1dCBidWZmZXIgbGVuZ3RoIGRvZXMgbm90IGluY2x1ZGUKCXNwYWNlIGZvciBhICdcMCcuCgkqIGlvZmdldHMuYywgaW9nZXRzLmM6ICBDaGFuZ2UgYXBwcm9wcmlhdGVseS4KCUFsc28gY2hlY2sgZm9yIF9JT19FUlJfU0VFTiwgYXMgcmVxdWlyZWQgYnkgQU5TSS4KCSogaXNnZXRsaW5lLmNjOiAgVXBkYXRlIGFjY29yZGluZ2x5LgoKTW9uIEphbiAxNyAxMzoyNDoyNiAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChjKytjbGVhbik6IEFkZGVkIHRhcmdldCBmb3IgY29tcGlsZXIgdGVzdGluZwoJKGkuZS4gbWFrZSBjKytjbGVhbiBhbGwpLgoKTW9uIEphbiAxMCAxMToyMDo0MiAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIGxpYmlvLmggKF9JT19wdXRjKTogIEFkZCBwYXJlbnRoZXNlcy4KCVBhdGNoIGZyb20gUmlrIEZhaXRoIDxmYWl0aEBjcy51bmMuZWR1Pi4KClR1ZSBKYW4gIDQgMDE6MzI6MjggMTk5MyAgSG9uZ2ppdSBMdSAoaGpsQG55bmV4c3QuY29tKQoKCSogZ2Vub3BzLmMgKF9JT19kZWZhdWx0X3hzcHV0bik6CgkgIChfSU9fZGVmYXVsdF94c2dldG4pOgoJKiBpb2lnbm9yZS5jOiBjaGFuZ2UgIl9JT19zaXplX3QgY291bnQiIHRvCgkgICJfSU9fc3NpemVfdCBjb3VudCIuCgkqIGlvZ2V0bGluZS5jOiBjaGFuZ2UgIl9JT19zaXplX3QgbGVuIiB0bwoJICAiX0lPX3NzaXplX3QgbGVuIi4KCk1vbiBEZWMgMjAgMDA6MzE6MjEgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBjb25maWcuc2hhcmVkIChDWFhJTkNMVURFUyk6ICBGaXggcXVvdGluZyBvZiAkKE5PU1RESU5DKS4KClN1biBEZWMgMTkgMjE6MDM6NDUgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoVkVSU0lPTik6ICBJbmNyZWFzZSB0byAwLjYzLgoKRnJpIERlYyAxNyAxMzowMjo0NCAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIGlvZnJlYWQuYyAoX0lPX2ZyZWFkKTogIFJldHVybiAwIGlmIGVpdGhlciBzaXplIG9yIGNvdW50IGlzIDAuCgkqIGlvZndyaXRlLmMgKF9JT19md3JpdGUpOiAgUmV0dXJuIDAgaWYgZWl0aGVyIHNpemUgb3IgY291bnQgaXMgMC4KCShUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBmcmVhZCwgYW5kIG1vc3QgaW1wbGVtZW50YXRpb25zLCBidXQgbm90Cgl3aXRoIGEgbGl0ZXJhbCByZWFkaW5nIG9mIHRoZSBBTlNJIHNwZWMuKQoJKiBpb3Zmc2NhbmYuYyAoX0lPX3Zmc2NhbmYpOiAgSWYgZ290IEVPRiB3aGlsZSBza2lwcGluZyBzcGFjZXMsCglzZXQgc2Vlbl9lb2YgYW5kIGJyZWFrIChpbnN0ZWFkIG9mIHJldHVybmluZykuCgkqIHNic2Nhbi5jYyAoc3RyZWFtYnVmOjp2c2Nhbik6ICBTZXQgZXJyb3Igc3RhdGUgYmVmb3JlIHJldHVybmluZy4KCSogc3RyZWFtYnVmLmg6ICBBZGQgYSBmb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgY2xhc3MgaXN0cmVhbQoJdG8gd29yayBhcm91bmQgYSBnKysgdnRhYmxlIG5hbWUgbWFuZ2xpbmcgYnVnLiAgKFBhdGNoIGZyb20KCWhhcnJ5QHBkc3JjLmhpbGNvLmNvbSB2aWEgSmVmZnJleSBBIExhdyA8bGF3QHNuYWtlLmNzLnV0YWguZWR1Pi4pCgkqIE5FV1M6ICBOZXcgZmlsZS4KClNhdCBEZWMgMTEgMTY6MjE6MDggMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBpb3ZmcHJpbnRmLmMgKHN0cnVjdCBoZWxwZXJfZmlsZSwgX0lPX2hlbHBlcl9vdmVyZmxvdywKCWhlbHBlcl92ZnByaW50ZiwgX0lPX2hlbHBlcl9qdW1wcyk6ICBOZXcgc3RydWN0cyBhbmQgZnVuY3Rpb25zLgoJKF9JT192ZnByaW50Zik6ICBVc2UgaGVscGVyX3ZmcHJpbnRmIHRvIG1ha2UgcHJpbnRpbmcgdG8KCXVuYnVmZmVyZWQgZmlsZXMgbW9yZSBlZmZpY2llbnQuCgkqIGdlbm9wcy5jIChfSU9fZGVmYXVsdF91bmRlcmZsb3cpLCBsaWJpb1AuaDogIE5ldyBmdW5jdGlvbi4KCgkqIGlvdnNzY2FuZi5jIChfSU9fdnNzY2FuZik6ICBUaGUgaW5wdXQgc3RyaW5nJ3MgbGVuZ3RoIG1hcmtzCglpdHMgbG9naWNhbCBlbmQtb2YtZmlsZS4KCldlZCBEZWMgIDggMTM6MjA6NDYgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBpbmRzdHJlYW0uY2MgKGluZGlyZWN0YnVmOjpzeW5jKCkpOiAgRG9uJ3QgY3Jhc2ggaWYgZ2V0X3N0cmVhbSgpCglvciBwdXRfc3RyZWFtKCkgYXJlIE5VTEw7ICBzeW5jKCkgYm90aCBzdHJlYW1zIGV2ZW4gaWYgZXJyb3IuCgpTdW4gRGVjICA1IDE5OjI0OjI5IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKCgkqIGlvc3RyZWFtUC5oIChjb252ZXJ0X3RvX3NlZWtmbGFncyk6IFVzZSBfSU9fc2Vla19zZXQgaW5zdGVhZCBvZgoJMCBpbnNpZGUgdGhlIGNvbmRpdGlhbCBleHByZXNzaW9ucy4KCgkqIGlvZnNldHBvcy5jIChfSU9fZnNldHBvcyk6IERlbGV0ZSB1bnVzZWQgdmFyIGBwb3MnLgoKU2F0IERlYyAgNCAxNTo1NzoyNiAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIGZpbGVkb2FsbG9jLmMgKF9JT19maWxlX2RvYWxsb2NhdGUpOiAgQ2hhbmdlIHR5cGUgb2YgY291bGRiZXR0eQoJdG8gaW50LCBhbmQgdHlwZSBvZiBzaXplIHRvIF9JT19zaXplX3QsIGluc3RlYWQgb2Ygc2l6ZV90LgoJKENoYW5nZSBuZWVkZWQgZm9yIFVsdHJpeCwgd2hpY2ggaW5jb3JyZWN0bHkgZGVsaWJlcmF0ZWx5IGRvZXNuJ3QKCWRlZmluZSBzaXplX3QgaW4gPHN5cy90eXBlcy5oPiBpZiBfUE9TSVhfU09VUkNFIGlzIGRlZmluZWQuKQoKVGh1IERlYyAgMiAyMjo0MzowMyAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIGZpbGVvcHMuYyAoX0lPX2ZpbGVfZmluaXNoKTogIFJlbW92ZSByZWR1bmRhbnQgY2FsbCB0byBfSU9fdW5fbGluay4KCSogaW9mY2xvc2UuYyAoX0lPX2ZjbG9zZSk6ICBEb24ndCBjYWxsIGZwLT5fanVtcHMtPl9fY2xvc2U7ICBpdCdzCgl0b28gbG93LWxldmVsLiAgSW5zdGVhZCBjYWxsIF9JT19maWxlX2Nsb3NlX2l0LgoJKiBkYnovTWFrZWZpbGUuaW4gKHJjbGVhbiwgZGlzdGNsZWFuKTogIEFkZCBzb21lIG1pc3NpbmcgZmlsZXMuCgpXZWQgRGVjICAxIDEzOjE5OjE0IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogY29uZmlnL2hwdXgubXQgKE1BVEhfSF9JTkxJTkVTKTogTm8gbG9uZ2VyIGRlZmluZS4KCVBhdGNoIGZyb20gSmVmZnJleSBBIExhdyA8bGF3QHNuYWtlLmNzLnV0YWguZWR1Pi4KCkZyaSBOb3YgMjYgMTM6Mjg6MzYgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBjb25maWcuc2hhcmVkIChDSU5DTFVERVMpOiAgRGVmaW5lIGRlZmF1bHQgaWYgbGliZysrLgoJKiBpb2ZyZWFkLmM6ICBVc2UgX0lPX3NnZXRuLmMuCgkqIGlvbGliaW8uaCAoX0lPX2NsZWFyZXJyKTogIEZpeCB0eXBvLgoJKiBnZW5vcHMuYyAoX0lPX3NlZWttYXJrKTogIFJldHVybiAwIG9uIHN1Y2Nlc3MuCgkqIGZsb2FjdGNvbnYuYyAoQmluaXQpOiAgQ2hhbmdlIHRvIHN0YXRpYy4KCSogaW9mY2xvc2UuYyAoX0lPX2ZjbG9zZSk6ICBDaGVjayBpZiBmaWxlIGlzIF9JT19zdGRpbiwgX0lPX3N0ZG91dCwKCW9yIF9JT19zdGRlcnI7ICBpZiBzbyBkb24ndCB0cnkgdG8gZnJlZSBpdC4gIEZpeCBmcm9tIGhqbEBueW5leHN0LmNvbS4KCgkqIGdlbm9wcy5jIChfSU9fZGVmYXVsdF9zeW5jKSwgbGliaW9QLmg6ICBOZXcgZnVuY3Rpb24uCgkqIGxpYmlvUC5oIChfSU9fZGVmYXVsdF9jbG9zZSk6ICBVc2UgX0lPX2RlZmF1bHRfc3luYyAtc2FtZSBpbnRlcmZhY2UuCgoJKiBNYWtlZmlsZS5pbjogIEluY3JlYXNlIHZlcnNpb24gdG8gMC42Mi4KCSogaW9wb3Blbi5jIChfSU9fcHJvY19jbG9zZSk6ICBVc2Ugd2FpdHBpZCAoYXZhaWxhYmxlIGluIGxpYmliYXJ0eSwKCWlmIG5lZWRlZCksIHJhdGhlciB0aGFuIHdhaXQuICBEb24ndCBibG9jay9pZ25vcmUgU0lHSU5UIGV0YywKCWFzIHRoaXMgaXMgY291bnRlciB0byBQb3NpeC4yLgoJKiBpb3BvcGVuLmM6ICBDaGFpbiBvcGVuIHByb2NfZmlsZXMsIGFuZCBoYXZlIHRoZSBjaGlsZCBjbG9zZQoJdGhlIG9uZXMgdGhhdCBhcmUgb3BlbiAoYXMgcmVxdWlyZWQgYnkgUG9zaXguMikuCgoJKiBmc3RyZWFtLmggKGZzdHJlYW1iYXNlOjpyZGJ1ZiksIHN0cnN0cmVhbS5oIChzdHJzdHJlYW1iYXNlCgk6OnJkYnVmKTogIENhbGwgaW9zOjpyZGJ1ZigpIGluc3RlYWQgb2YgZ2V0dGluZyBfc3RyYnVmIGRpcmVjdGx5LgoKCSogc2JzY2FuLmNjIChzdHJlYW1idWY6OnZzY2FuKTogIENvbW1lbnQgb3V0IGR1cGxpY2F0ZSBkZWZhdWx0IGFyZy4KCSogZmxvYXRjb252LmM6ICBSZWNvZ25pemUgQWxwaGEgYW5kIGk4NjAgYXMgbGl0dGxlLWVuZGlhbi4KCSogc3RyZWFtYnVmLmNjOiAgUmV0dXJuIHR3byBib2d1cyB2YWx1ZSByZXR1cm5zIGZyb20gdm9pZCBmdW5jdGlvbnMuCgkqIGlvbGliaW8uaCwgaW9md3JpdGUuYzogIEZpeCBidWZmZXIgdHlwZSB0byAoY29uc3Qgdm9pZCopLgoJKiBsaWJpby5oOiAgUHJlZGVmaW5lIG9mIHN0cnVjdCBfSU9fRklMRSB0byBoZWxwIG5vbi1nKystY29tcGlsZXJzLgoJKiBsaWJpb1AuaCwgcGZzdHJlYW0uY2MsIHN0ZGZpbGVzLmMsIGlvdmZzY2FuZi5jOiBDbGVhbnVwIHN5bnRheCBqdW5rLgoJKiBzdGRzdHJlYW1zLmNjOiAgTWlub3Igc2ltcGxpZmljYXRpb24uCgkqIHN0cmVhbWJ1Zi5oLCBidWlsdGluYnVmLmNjOiAgQWRkIG5vbi1jb25zdCBpb3M6Ol9JT19maXhfdnRhYmxlKCkKCWZvciB0ZW1wb3JhcnkgYmluYXJ5IGNvbXBhdGliaWxpdHkuCgoJKiBmaWxlZG9hbGxvYy5jLCBmaWxlb3BzLmM6ICBBZGQgX1BPU0lYX1NPVVJDRS4KCSogZmlsZW9wcy5jLCBpb2ZvcGVuLmMsIGlvZnB1dHMuYywgaW9zdHJlYW0uY2MsIHN0cm9wcy5jLAoJc3Ryc3RyZWFtLmNjLCBnZW5vcHMuYzogIEFkZCBzb21lIG1pc3NpbmcgI2luY2x1ZGVzLgoJKiBpb2ZvcGVuLmMsIGlvZmRvcGVuLmM6ICBSZXR1cm4gTlVMTCBpZiBtYWxsb2MgZmFpbHMuCgkqIGlvdmZzY2FuZi5jOiAgRml4IHJldHVybiB0eXBlIGluIHN0cnRvbCBwcm90b3R5cGUuCgkqIGZ3cml0ZS5jOiAgUmVtb3ZlIGJvZ3VzIGZpbGUuCgpXZWQgTm92IDE3IDE0OjA5OjQyIDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBjeWdudXMuY29tKQoKCSogYnVpbHRpbmJ1Zi5jYyAoaW9zOjpfSU9fZml4X3Z0YWJsZSksIHN0cmVhbWJ1Zi5oOiAgTWFrZSBtZXRob2QKCWNvbnN0LCB0byByZWR1Y2UgcHJvYmxlbXMgd2l0aCAtV2Nhc3QtcXVhbC4KClR1ZSBOb3YgMTYgMTk6MzA6NDIgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vQHJ0bC5jeWdudXMuY29tKQoKCSogY29uZmlnLnNoYXJlZCAoQ1hYSU5DTFVERSk6IHVzZSAke30gaW5zdGVhZCBvZiAkKCkgZm9yIE5PU1RESU5DCgpUdWUgTm92IDE2IDE0OjE1OjQ1IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogaW9wb3Blbi5jIChfSU9fcHJvY19jbG9zZSk6ICBSZS1zdHJ1Y3R1cmUgdG8gYXZvaWQKCWRlY2xhcmF0aW9ucyBhZnRlciBzdGF0ZW1lbnRzLgoJKiBmbG9hdGNvbnYuYzogIElmIG5vdCBfX1NURENfXywgI2RlZmluZSBEQkxfTUFOVF9ESUcuCgkqIGNvbmZpZy9pc2MubXQgKEdfQ09ORklHX0FSR1MpOiBSZW1vdmUgYm9ndXMgc3BhY2VzLgoJUGF0Y2ggZnJvbSBEYXZpZCBBLiBBdmVyeSA8ZGFhQG5pYy5jZXJmLm5ldD4uCgpUdWUgTm92IDE2IDE1OjU4OjMxIDE5OTMgIE1hcmsgRWljaGluICAoZWljaGluQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoX0dfY29uZmlnLmgpOiBleHBsaWNpdGx5IHVzZSAkKFNIRUxMKSB0byBydW4KCWdlbi1wYXJhbXMsIHNpbmNlIHdlIGtub3cgaXQgaXMgYSBzY3JpcHQgKHdlJ3JlIGV4cGxpY2l0bHkgbG9va2luZwoJaW4gJHtzcmNkaXJ9IGZvciBpdCkgYW5kIC9iaW4vc2ggbWlnaHQgbm90IGJlIGdvb2QgZW5vdWdoLgoKTW9uIE5vdiAxNSAxMzoyNjoyMiAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIGJ1aWx0aW5idWYuY2M6ICBEb24ndCBkZXBlbmQgb24gaW5pdGlhbGl6YXRpb24gb2Ygc3RhdGljCgl2YXJpYWJsZSBidWlsdGluYnVmOjp2dGFibGUsIHNpbmNlIHRoYXQgbWlnaHQgaGFwcGVuIGFmdGVyCgl3ZSBuZWVkIGl0IChmb3IgYSBzdGF0aWMgY29uc3RydWN0b3IpLiAgSW5zdGVhZCwgaW5pdGlhbGl6ZQoJaXQgd2hlbiBuZWVkZWQgYnkgaW5saW5pbmcgdGhlIGNvZGUgZnJvbSBnZXRfYnVpbHRpbl92dGFibGUKCWludG8gaW9zOjpfSU9fZml4X3Z0YWJsZSgpLgoKCSogZmxvYXRjb252LmM6ICBBdm9pZCB1c2luZyAjZWxpZiwgd2hpY2ggc29tZSBDIGNvbXBpbGVycyBsYWNrLgoJKiBpb2dldGxpbmUuYywgbGliaW9QLmg6ICBNYWtlIGNoYXIgcGFyYW1ldGVyIGJlIGludCwgdG8gYXZvaWQKCXNvbWUgZGVmYXVsdCBwcm9tb3Rpb24gYW5vbWFsaWVzLgoKRnJpIE5vdiAgNSAxMTo0OTo0NiAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy5zaGFyZWQgKGRvLWNsZWFuLWR2aSk6ICBSZW1vdmUgVGVYIHdvcmsgZmlsZXMuCgkqIGlvcG9wZW4uYyAoZXh0ZXJuIF9JT19mb3JrKTogIERvbid0IHVzZSBwYXJhbWV0ZXIgdHlwZSB2b2lkLgoJKiBzdHJvcHMuYyAoX0lPX3N0cl9pbml0X3N0YXRpYyk6ICBDbGVhciB0aGUgYWxsb2NhdGVfYnVmZmVyCglmdW5jdGlvbiBwb2ludGVyLCB0byBtYXJrIHRoZSBzdHJmaWxlIGFzIGJlaW5nIHN0YXRpYy4KCUJ1ZyBmaXggZnJvbSBNaWtlIFJhaXNiZWNrIDxtaWtlQHB1ZGRpbmcucnRyLkNPTT4uCgpUaHUgTm92ICA0IDEwOjQ0OjI0IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogZmlsZWJ1Zi5jYyAoZmlsZWJ1ZjopOiBVc2Ugc3NlZWtvZmYgcmF0aGVyIHRoYW4gc2Vla29mZgoJKHdoaWNoIGxvc2VzIGlmIHZ0YWJsZSBwb2ludGVyIGlzIE5VTEwpLgoKCSogaW9zdHJlYW0uY2MgKG9zdHJlYW06Om9wZXJhdG9yPDwobG9uZyBsb25nIG4pKTogIEZpeCB0aGlua28uCgoJKiBNYWtlZmlsZS5pbiAoVkVSU0lPTik6ICBJbmNyZWFzZSB0byAwLjYwLgoJKiBNYWtlZmlsZS5pbiAoSU9fT0JKRUNUUyk6ICBBZGRlZCBpb3BvcGVuLm8uCgkqIGNvbmZpZy5zaGFyZWQgKERJU1RDTEVBTik6ICBBbHNvIHJlbW92ZSBNYWtlLnBhY2suCgkqIGNvbmZpZy5zaGFyZWQgKENYWElOQ0xVREVTKTogIEFkZCAkKE5PU1RESU5DKS4KCgkqIGNvbmZpZy5zaGFyZWQgKElOU1RBTEwpOiAgRml4IHNvIGl0IHVlcyB0aGUgY29ycmVjdCBpbnN0YWxsLnNoCgl3aGV0aGVyICRzcmNkaXIgaXMgYWJzb2x1dGUgb3IgcmVsYXRpdmUuCgoJKiBmbG9hdGNvbnYuYyAoREJMX01BWF8xMF9FWFApOiBGaXggZGVmYXVsdCB2YWx1ZS4KCldlZCBOb3YgIDMgMTA6MjA6NDkgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBnZW4tcGFyYW1zOiAgTWFrZSBtb3JlIHJvYnVzdCB0byBhbGxvdyByYW5kb20ganVuayAoTmVYVAoJaGFzIHNwYWNlcykgYmVmb3JlIHR5cGVkZWZzLgoKCSogZmlsZW9wcy5jIChfSU9fZmlsZV9vdmVyZmxvdyk6ICBSZWR1Y2UgY29kZSBkdXBsaWNhdGlvbi4KCSogTWFrZWZpbGUuaW4gKElPX09CSkVDVFMpOiAgUmVtb3ZlIGlvcHV0cy5vLgoKCSogaW92ZnNjYW5mLmMsIGxpYmlvLmg6ICBFeHRyYSBwYXJhbWV0ZXIgdG8gX0lPX3Zmc2NhbmYsCglmb3Igb3B0aW9uYWxseSBzZXR0aW5nIGFuIGVycm9yIGluZGljYXRpb24uLgoJKiBpb2ZzY2FuZi5jLCBpb3NjYW5mLmMsIGlvZnNjYW5mLmMsIGlvdnNzY2FuZi5jOiAgRml4IGNhbGxzIHRvCglfSU9fdmZzY2FuZiB0byBwYXNzIGFuIGV4dHJhIE5VTEwuCgkqIHNic2Nhbi5jYyAoc3RyZWFtYnVmOjp2c2Nhbik6ICBJZiBwYXNzZWQgYW4gZXh0cmEgc3RyZWFtLAoJc2V0IGl0cyBlcnJvciBzdGF0ZSAodXNpbmcgbmV3IF9JT192ZnNjYW5mIHBhcmFtZXRlci4KCgkqIGZpbGVkb2FsbG9jLmMsIGZpbGVvcHMuYywgZ2Vub3BzLmMsIGlvZ2V0bGluZS5jLCBpb2lnbm9yZS5jLAoJbGliaW8uaCwgbGliaW9QLmgsIHN0cmVhbWJ1Zi5jYyBzdHJlYW1idWYuaCwgc3RyZmlsZS5oLCBzdHJvcHMuYywKCXN0cnN0cmVhbS5jYzogIFJlcGxhY2UgbWFjcm9zIChfYmFzZSwgX2VidWYsIF9lYmFjaywgX2dwdHIsIF9lZ3B0ciwKCV9wYmFzZSwgX3BwdHIsIF9lcHB0cikgYnkgZmllbGQgbmFtZXMgKF9JT19idWZfYmFzZSwgX0lPX2J1Zl9lbmQsCglfSU9fcmVhZF9iYXNlLCBfSU9fcmVhZF9wcmUsIElPX3JlYWRfZW5kLCBfSU9fd3JpdGVfYmFzZSwKCV9JT193cml0ZV9wdHIsIF9JT193cml0ZV9lbmQpLgoJKiBsaWJpby5oOiAgUmVtb3ZlIHRoZSBvbGQgbWFjcm9zICh3aGljaCBmaXhlcyBhIGNvbmZsaWN0LgoKTW9uIE5vdiAgMSAxNToyMjoxMiAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIGlvc3RyZWFtLmNjOiAgVXNlIF9JT19zcHV0biBpbnN0ZWFkIG9mIHNwdXRuLiAgX0lPX3NwdXRuIGRvZXMKCW5vdCByZXF1aXJlIGEgdnRhYmxlIHBvaW50ZXIsIGFuZCBpcyBhbHNvIHNsaWdodGx5IGZhc3Rlci4KCgkqIGJ1aWx0aW5idWYue2gsY2N9IChidWlsdGluYnVmOjpzZXRidWYpOiAgRml4IHJldHVybiBhbmQKCXBhcmFtZXRlciB0eXBlcy4KCk1vbiBPY3QgMjUgMTI6NTY6MzMgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJS2x1ZGdlIHRvIG1ha2Ugc3VyZSBfSU9fRklMRSBidWZmZXJzIGdldCBmbHVzaGVkIGJlZm9yZSBleGl0LgoJKiBkYnovZGJ6bWFpbi5jLCBkYnovZmFrZS5jLCBkYnovYnl0ZWZsaXAuYzoKCUludm9rZSBEQlpfRklOSVNIIG1hY3JvIChpZiBkZWZpbmVkKSBiZWZvcmUgKG5vcm1hbCkgZXhpdHMuCgkqIGRiei9NYWtlZmlsZS5pbiAoQ0ZMQUdTKTogIERlZmluZSBEQlpfRklOSVNIIHRvIGNhbGwgX0lPX2ZsdXNoX2FsbC4KClNhdCBPY3QgMjMgMjI6MTA6NTMgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoVkVSU0lPTik6ICBTZXQgdG8gMC42MCBmb3IgbGliZysrIHJlbGVhc2UuCgkqIGZpbGVvcHMuYyAoX0lPX2ZpbGVfYXR0YWNoKTogIFNldCBfb2Zmc2V0IHRvIF9JT19wb3NfQkFELgoJKiBpb3N0cmVhbS5jYyAob3N0cmVhbTo6Zmx1c2gpOiAgRml4IHRoaW5rcC4KCSogZWRpdGJ1Zi5jYywgaXNnZXRzYi5jYywgaXNzY2FuLmNjLCBvc2Zvcm0uY2MsIHBhcnNlc3RyZWFtLmNjLAoJcGZzdHJlYW0uY2MsIHNiZm9ybS5jYywgc2JzY2FuLmNjLCBzdGRzdHJlYW1zLmNjLCBzdHJlYW0uY2M6CglSZXBsYWNlICNpbmNsdWRlICJpb3ByaXZhdGUuaCIgYnkgI2luY2x1ZGUgImxpYmlvUC5oIiAoYW5kCglzb21ldGltZXMgc3RkYXJnLmgsIHN0ZGxpYi5oIGFuZC9vciBzdHJpbmcuaCkuCgkqIGlvcHJpdmF0ZS5oOiAgUmVtb3ZlZC4KCgpUaHUgT2N0IDIxIDE5OjI0OjAyIDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogUGxvdEZpbGUuaCwgU0ZpbGUuaCwgZWRpdGJ1Zi5jYywgZWRpdGJ1Zi5oLCBmaWxlYnVmLmNjLAoJZnN0cmVhbS5jYywgZnN0cmVhbS5oLCBpbmRzdHJlYW0uY2MsIGluZHN0cmVhbS5oLCBpb21hbmlwLmNjLAoJaW9tYW5pcC5oLCBpb3ByaXZhdGUuaCwgaW9zdHJlYW0uY2MsIGlvc3RyZWFtLmgsIGlzZ2V0bGluZS5jYywKCWlzZ2V0c2IuY2MsIHBhcnNlc3RyZWFtLmNjLCBwYXJzZXN0cmVhbS5oLCBwZnN0cmVhbS5jYywKCXBmc3RyZWFtLmgsIHByb2NidWYuY2MsIHByb2NidWYuaCwgc3RkaW9zdHJlYW0uY2MsIHN0ZGlvc3RyZWFtLmgsCglzdGRzdHJlYW1zLmNjLCBzdHJlYW1idWYuY2MsIHN0cmVhbWJ1Zi5oLCBzdHJzdHJlYW0uY2MsCglzdHJzdHJlYW0uaDogIFJlbW92ZSBvbGQgKGR1cGxpY2F0ZSkgY29weXJpZ2h0IG5vdGljZXMuCgoJKiBpb3N0cmVhbS5jYzogIEZpeCBjYWxscyB0byBzeW5jKCkgdG8gYmUgc2FmZSBpbiB0aGUgcHJlc2VuY2UKCW9mIHZ0YWJsZS1sZXNzIHN0cmVhbWJ1ZnMuCgpXZWQgT2N0IDIwIDE1OjIyOjA0IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogc3RyZWFtYnVmLmggKHN0cmVhbWJ1Zjo6dW5kZXJmbG93LCBzdHJlYW1idWY6Om92ZXJmbG93KToKCURvbid0IG1ha2UgdmlydHVhbCBmdW5jdGlvbnMgcHVyZS4KCSogc3RyZWFtYnVmLmNjIChzdHJlYW1idWY6OnVuZGVyZmxvdywgc3RyZWFtYnVmOjpvdmVyZmxvdyk6CglEZWZhdWx0IGRlZmluaXRpb25zIChyZXR1cm4gRU9GKS4KCSogZnN0cmVhbS5oOiAgQWRkIG5ldyAoaW50IGZkLCBjaGFyKiBidWYsIGludCBsZW4pIGNvbnN0cnVjdG9ycy4KCVRoZXNlIGFyZSBkZXByZWNhdGVkLCBidXQgYWRkZWQgZm9yIEFUJlQgY29tcGF0aWJpbGl0eS4KCSogZnN0cmVhbS5jYyBmc3RyZWFtYmFzZTo6ZnN0cmVhbWJhc2UoaW50IGZkLCBjaGFyICpwLCBpbnQgbCk6IE5ldy4KClRodSBPY3QgMTQgMTQ6NTc6MDEgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vQHJ0bC5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiB1c2UgJ212IC1mJyBpbnN0ZWFkIG9mICdtdicKClR1ZSBPY3QgMTIgMDU6MDE6NDQgMTk5MyAgTWlrZSBTdHVtcCAgKG1yc0BjeWdudXMuY29tKQoKCSogZmxvYXRjb252LmM6IEZpeCB0eXBvLCBjaGFuZ2UgX19TVERDIHRvIF9fU1REQ19fLgoKTW9uIE9jdCAxMSAxNzowMzoxMiAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIGNsZWFudXAuYzogIEl0IHNob3VsZCBiZSAjaWYgX0dfSEFWRV9BVEVYSVQsIG5vdCAjaWZkZWYuCgoJKiBmbG9hdGNvbnYuYywgaW9zdHJlcnJvci5jLCBpb3ZmcHJpbnRmLmMsIGlvdmZzY2FuZi5jLCBsaWJpb1AuaDoKCUJ1bmNoIG9mIGZpeGVzIHRvIGFsbG93IHVzZSBvZiBub24tQU5TSSAoSyZSKSBDIGNvbXBpbGVycy4KCgkqIE1ha2VmaWxlLmluIChpb3N0cmVhbS5saXN0KTogIFVzZSBDQz0kKENYWCkgdG8gZm9yY2UgdXNlIG9mIGdjYy4KCSogUkVBRE1FOiAgTmV3IGZpbGUuCgpGcmkgT2N0ICA4IDE2OjE5OjU4IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBNb3ZlIGlvdW5nZXRjLm8gZnJvbSBTVERJT19XUkFQX09CSkVDVFMgdG8KCUlPX09CSkVDVFMgKHNpbmNlIGl0IGlzIG5lZWRlZCBmb3IgaW92ZnNjYW5mLmMpLgoJKiBpb3N0cmVycm9yLmM6ICBBZGQgZGVjbGFyYXRpb24gb2Ygc3RyZXJyb3IuCgpUaHUgT2N0ICA3IDEyOjAyOjI4IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogY2xlYW51cC5jOiAgTmV3IGZpbGUsIHRvIGNhdXNlIGZsdXNoaW5nIGF0IGV4aXQuCgkqIGZpbGVkb2FsbG9jLmM6ICBDYXVzZSBmbHVzaGluZyBvbiBleGl0LgoJKiBNYWtlZmlsZS5pbiAoT1NQUklNX09CSkVDVFMpOiAgQWRkIGNsZWFudXAuby4KCSogZ2VuLXBhcmFtczogIENoZWNrIGZvciBhdGV4aXQuCgpUdWUgT2N0ICA1IDE5OjExOjE0IDE5OTMgIE1pa2UgU3R1bXAgIChtcnNAY3lnbnVzLmNvbSkKCgkqIGlvcGVycm9yLmMgKF9JT19zdHJlcnJvcik6IEFkZCBtaXNzaW5nICgpcyBpbiBfUEFSQU1TIHVzYWdlLgoKVHVlIE9jdCAgNSAxMDozMzozNyAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIGlvZnByaW50Zi5jLCBpb2ZzY2FuZi5jLCBpb3ByaW50Zi5jLCBpb3NjYW5mLmMsIGlvc3ByaW50Zi5jLAoJaW9zc2NhbmYuYzogIFJlbW92ZSBib2d1cyBzZW1pLWNvbG9uIGFmdGVyIHZhX2RjbC4KCSogaW9wZXJyb3IuYzogIEZpeCB0eXBvcyBpbiBkZWNsYXJhdGlvbi4KCk1vbiBPY3QgIDQgMTc6MTI6MjIgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKENMRUFOKTogIERlZmluZSAoYXMgX0dfY29uZmlnLmggKi5hKS4KCgkqIGZpbGVvcHMuYyAoX0lPX2ZpbGVfcmVhZCk6ICBEb24ndCBhc3N1bWUgRUlOVFIgaXMgZGVmaW5lZC4KCSogaW9zZXRidWYuYzogIFJlcGxhY2UgYnkgZ2VuZXJhbGl6ZWQgLi4uCgkqIGlvc2V0YnVmZmVyLmM6ICAuLi4gdmFyaWFudCwgZGVyaXZlZCBmcm9tIEJTRC4KCSogTWFrZWZpbGUuaW4gKFNURElPX1dSQVBfT0JKRUNUUyk6ICBDaGFuZ2UgY29ycmVzcG9uZGluZ2x5LgoJKiBpb3NldHZidWYuYyAoaW9zZXR2YnVmKTogIE1pbm9yIEFOU0kgdHdlYWsuCgkqIGlvc3RkaW8uaCAoc2V0YnVmLCBzZXRsaW5lYnVmKTogIE5ldyAjZGVmaW5lcy4KCSogaW9saWJpby5oIChfSU9fc2V0YnVmLCBfSU9fc2V0bGluZWJ1Zik6ICAoUmUtKWRlZmluZSBhcyBtYWNyb3MuCgkqIE1ha2VmaWxlLmluIChMSUJJT19PQkpFQ1RTKTogIE5ldyBtYWNyby4KClR1ZSBTZXAgMjggMTQ6MTU6NTIgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBsaWJpb1AuaCAoX0lPX3Byb2Nfb3BlbiwgX0lPX3Byb2NfY2xvc2UpOiBBZGQgbWlzc2luZyByZXR1cm4gdHlwZXMuCgkqIHByb2NidWYuY2M6ICBCZWxhdGVkIGZpeGVzLgoKTW9uIFNlcCAyNyAxNDowNDo0NyAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBMaXN0IG5ldyBmaWxlcy4gIEFkZCBTVERJT19XUkFQX09CSkVDVFMgbWFjcm8uCgkqIGZsb2F0Y29udi5jIChkMmIpOiAgVXNlIEV4cF9tc2sxMSBpbnN0ZWFkIG9mIEV4cF9tc2sxLgoJKiBpb2ZnZXRwb3MuYyAoX0lPX2ZnZXRwb3MpLCBpb2ZzZXRwb3MuYyAoX0lPX2ZzZXRwb3MpOiAgQ2xlYW4gdXAuCgkqIGlvbGliaW8uaDogIE5ldyBmaWxlLiAgRGVjbGFyYXRpb25zIG9mIF9JT19mb28sIGZvciBtb3N0IGZvbwoJd2hlcmUgZm9vIGlzIGEgc3RkaW8gZnVuY3Rpb24uICAoUmVtb3ZlIHRoZXNlIGZyb20gbGliaW8uaC4pCgkqIGlvc3RyZWFtLmggKGlzdHJlYW06OmlzdHJlYW1idWYsIG9zdHJlYW06Om9zdHJlYW1idWYpOiAgTW92ZQoJb2Jzb2xldGUgZnVuY3Rpb25zIGluc2lkZSAjaWZkZWYgX1NUUkVBTV9DT01QQVQuCgkqIGxpYmlvLmgsIGxpYmlvUC5oLCBzdHJlYW1idWYuaCwgcGFyc2VzdHJlYW0uaCwgc3RkaW9zdHJlYW0uaDoKCVVzZSBfSU9fZnBvc190IHJhdGhlciB0aGFuIF9JT19wb3NfdC4KCSogaW9wb3Blbi5jOiAgTmV3IGZpbGUgdHlwZSwgZm9yIHBpcGUgKHBvcGVuLWxpa2UpIHN0cmVhbXMuCgkqIHByb2NidWYuY2M6ICBOb3cganVzdCBhIEMrKyB3cmFwcGVyIGZvciB0aGUgZmlsZXMgaW4gaW9wb3Blbi5jLgoJKiBzdHJlYW1idWYuaCAoaW9zOjp1bnNldGYpOiAgUmV0dXJuIGNvbXBsZXRlIG9sZCB2YWx1ZSBvZiBmbGFncy4KCSogaW9nZXRzLmMgKF9JT19nZXRzKCksIGlvdW5nZXRjLmMgKF9JT191bmdldGMpLCBpb3BlcnJvci5jCgkoX0lPX3BlcnJvciksIGlvc3RyZXJyb3IuYyAoX0lPX3N0cmVycm9yKTogIE5ldyBmaWxlcyBhbmQKCWZ1bmN0aW9ucywgZm9yIHN0ZGlvIGltcGxlbWVudGF0aW9uLgoJKiBpb3N0ZGlvLmg6ICBBZGQgZGVjbGFyYXRpb25zIGZvciB2YXJpb3VzIHJlY2VudGx5LWFkZGVkIGZ1bmN0aW9ucy4KClN1biBTZXAgMTIgMTQ6MjQ6NTUgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBzdHJlYW1idWYuaCAoaW9zOjpzaG93cG9zKTo6IEZpeCB0eXBvLgoKRnJpIEF1ZyAyNyAxMjowNTo0NyAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIGlvcGFkbi5jIChfSU9fcGFkbik6ICBDaGFuZ2UgdG8gcmV0dXJuIGNvdW50IG9mIGNoYXJzIHdyaXR0ZW4uCgkqIG91dGZsb2F0LmMsIGlvdmZwcmludGYuYzogIENoYW5nZSBmb3IgbmV3IF9JT19wYWRuIGludGVyZmFjZS4KCSogaW9zdHJlYW0uY2MgKG9zdHJlYW06Om9wZXJhdG9yPDwpOiAgTWFrZSBzdXJlIHRvIHNldCBiYWRiaXQKCW9uIGEgZmFpbHVyZSAobWFueSBwbGFjZXMpLiAgVXNlIF9JT19wYWRuIG1vcmUuCgkqIGlvc3RyZWFtLmNjIChvc3RyZWFtJiBvc3RyZWFtOjpvcGVyYXRvcjw8KGNvbnN0IHZvaWQgKnApOiAgTW92ZSB0bwoJKiBvc2Zvcm0uY2M6ICAuLi4gaGVyZSwgdG8gcmVkdWNlIGxpbmtpbmctaW4tdGhlLXdvcmxkIHN5bmRyb21lLgoJKiBvc2Zvcm0uY2M6IFVzZSByZGJ1ZigpLCBpbnN0ZWFkIG9mIF9zdHJidWYgZGlyZWN0bHkuCgoJKiBnZW5vcHMuYyAoX0lPX3NnZXRuKSwgbGliaW8uaDogIE5ldyBmdW5jdGlvbi4KCSogc3RyZWFtYnVmLmggKHN0cmVhbWJ1Zi5oOjpzZ2V0bik6ICBVc2UgX0lPX3NnZXRuLgoJKiBTRmlsZS5jYyAoU0ZpbGU6Om9wZXJhdG9yW10pOiAgVXNlIHNzZWVrb2ZmLCBub3Qgc2Vla29mZi4KClRodSBBdWcgMjYgMTA6MTY6MzEgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vQHJ0bC5jeWdudXMuY29tKQoKCSogY29uZmlnLnNoYXJlZCAoU1VCRElSUyk6IG9ubHkgcmVjdXJzZSBpZiB0aGUgZGlyZWN0b3J5IGlzIGNvbmZpZ3VyZWQKCldlZCBBdWcgMjUgMTI6NTY6MTIgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBjb25maWcve2hwdXgubXQsIGlzYy5tdCwgc2NvNC5tdH06CglNb3ZlZCBmcm9tIC4uL2xpYmcrKy9jb25maWcgKHNpbmNlIHRoZXkgYWZmZWN0IF9HX2NvbmZpZy5oKS4KCSogY29uZmlndXJlLmluOiAgU2V0IHRhcmdldF9tYWtlX2ZyYWcgdG8gb25lIG9mIHRoZSBhYm92ZSBmaWxlcy4KCkZyaSBBdWcgMjAgMDA6NTM6MTQgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBpb2ZvcGVuLmMgKGlvZm9wZW4pOiAgRml4IHR5cGUgcGFzc2VkIHRvIF9JT191bl9saW5rKCkuCgkqIE1ha2VmaWxlLmluIChfR19jb25maWcuaCk6ICBQYXNzICRDQyAobm90ICRDWFgpIGFzIENDLgoKCSogY29uZmlndXJlLmluIChjb25maWdkaXJzKTogIEFkZCBkYnogYW5kIHN0ZGlvLgoJKiBmaWxlb3BzLmMgKF9JT19maWxlX3NlZWtvZmYpOiAgQ29udmVydCBtb3JlIG9sZCBmdW5jdGlvbmFsaXR5LgoJKiBpb2Zkb3Blbi5jOiAgVXNlIG1vZGUgcGFyYW1ldGVyIHRvIHNldCBfZmxhZ3MuCgkqIGlvZnNjYW5mLmMsIGlvcHV0cy5jLCBpb3NjYW5mLmMsIGlvc3ByaW50Zi5jOiAgTmV3IGZpbGVzLgoJKiBNYWtlZmlsZS5pbiAoSU9fT0JKRUNUUyk6ICBBZGRlZCBuZXcgb2JqZWN0cy4KCSogaW9zdGRpby5oOiAgQWRkIGZlb2YuIGZzY2FuZiwgcHV0cywgc3ByaW50ZiwgdnNwcmludGYuCgkqIGxpYmlvLmg6ICBBZGQgX0lPX3ZwcmludGYgbWFjcm8uCgkqIGlvZm9wZW4uYzogIEludm9rZSBfSU9fdW5fbGluayBpZiBmYWlsdXJlLgoJKiBpb3ZzcHJpbnRmLmM6ICBXcml0ZSB0ZXJtaW5hdGluZyBOVUwuCgoJKiBsaWJpb1AuaDogIEFkZCBDT0VSQ0VfRklMRSBtYWNybyAoYnkgZGVmYXVsdCBkb2VzIG5vdGhpbmcpLgoJKiBpb2ZjbG9zZS5jLCBpb2ZmbHVzaC5jLCBpb2ZnZXRzLmMsIGlvZnByaW50Zi5jLCBpb2ZwdXRzLmMsCglpb2ZyZWFkLmMsIGlvZnRlbGwuYywgaW9md3JpdGUuYywgaW9zZXRidWYuYywgaW9zZXR2YnVmLmM6CglJbnZva2UgQ09FUkNFX0ZJTEUgbWFjcm8uCgkqIGlvZnRlbGwuYzogIFVzZSBfSU9fc2Vla29mZi4KCldlZCBBdWcgMTggMjI6NDk6NTYgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBzYmZvcm0uY2MgKHN0cmVhbWJ1Zjo6Zm9ybSksIHNic2Nhbi5jYyAoc3RyZWFtYnVmOjpzY2FuKToKCVJlbW92ZSBjYXN0IHRvIF9JT192YV9saXN0LiAgKExvc2VzIGlmIGFycmF5IHR5cGUuKQoKCSogbGliaW8uaDogIEhhbmRsZSBfSU9fdmFfbGlzdCBmb3Igc3lzdGVtcyB0aGF0IG5lZWQgPHN0ZGFyZy5oPi4KCSogZmxvYXRjb252Lmg6ICBGaXggdHlwbyAocmVwb3J0ZWQgYnkgSC5KLkx1KS4KCldlZCBBdWcgMTggMTk6MzQ6MDQgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vQHJ0bC5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluIChJTlNUQUxMRElSKTogaGFuZGxlIG5hdGl2ZSB2cy4gY3Jvc3MgY2FzZQoKCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBkb24ndCB1c2UgJFRBUkdFVExJQiwgc2V0IElOU1RBTExESVIgdG8KCSQobGliZGlyKQoKV2VkIEF1ZyAxOCAxMjoxMDowMyAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiAgUmVuYW1lIGlvc3RyZWFtLWZpbGVzIHRvIGlvc3RyZWFtLmxpc3QuCgkqIGNvbmZpZ3VyZS5pbjogIEFkZCBpb3N0cmVhbS5saXN0IHRvIE1PU1RMWUNMRUFOLgoKVHVlIEF1ZyAxNyAxODo1Njo1OSAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiAgRGVwZW5kIG9uIF9HX2NvbmZpZy5oIHdoZXJlIGFwcHJvcHJpYXRlLgoJKiBjb25maWcuc2hhcmVkIChDWFhJTkNMVURFUyk6ICBJZiBkb2luZyBsaWJnKyssIHNlYXJjaCAuLi9saWJpby4KClR1ZSBBdWcgMTcgMTc6MzQ6MjQgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJTmV3IGRpcmVjdG9yeS4gIEJhc2VkIG9uIG9sZCBsaWJnKysvaW9zdHJlYW0gY29kZSwKCWJ1dCBleHRlbnNpdmVseSByZS13cml0dGVuLgo=