Name: series-workflow9svpb Phase: Succeeded StartedAt: 2026-09-10 10:05:14 +0000 UTC FinishedAt: 2026-09-10 13:53:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[0] Phase: Succeeded StartedAt: 2026-09-10 10:05:14 +0000 UTC FinishedAt: 2026-09-10 10:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 10:05:14 +0000 UTC FinishedAt: 2026-09-10 10:10:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "548b86839f7fb819a4d6c83b71c73ec378d24275", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IP_MULTICAST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "548b86839f7fb819a4d6c83b71c73ec378d24275", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IP_MULTICAST" ], "series_id": "293ef455-185d-4e79-be98-cdce095add91" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_mc_msfget", "do_ip_getsockopt", "sockptr_to_sockopt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBfTVVMVElDQVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbWNfbXNmZ2V0JiMzNDssCiAgICAmIzM0O2RvX2lwX2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7c29ja3B0cl90b19zb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBJUF9NU0ZJTFRFUiBnZXRzb2Nrb3B0IGhhbmRsaW5nIHRvIHVzZSB0aGUgbmV3IHNvY2tvcHRfdCAvIGlvdl9pdGVyIGluZnJhc3RydWN0dXJlIHZpYSBgc29ja3B0cl90b19zb2Nrb3B0KClgLCBgc29ja29wdF9leHBhbmRfb3V0KClgLCBhbmQgYGNvcHlfdG9faXRlcigpYC4gXG5cbi0gSW4gYGRvX2lwX2dldHNvY2tvcHQoKWAsIGBtc2ZgIGlzIHBvcHVsYXRlZCBmcm9tIHVzZXJzcGFjZSB2aWEgYGNvcHlfZnJvbV9zb2NrcHRyKClgIGZvciBgSVBfTVNGSUxURVJfU0laRSgwKWAgKDE2IGJ5dGVzKSwgY292ZXJpbmcgYWxsIHNjYWxhciBmaWVsZHMgKGBpbXNmX211bHRpYWRkcmAsIGBpbXNmX2ludGVyZmFjZWAsIGBpbXNmX2Ztb2RlYCwgYGltc2ZfbnVtc3JjYCksIHdpdGggYGltc2ZfZm1vZGVgIGFuZCBgaW1zZl9udW1zcmNgIHN1YnNlcXVlbnRseSB1cGRhdGVkIGJlZm9yZSBgY29weV90b19pdGVyKClgIGNvcGllcyBleGFjdGx5IDE2IGJ5dGVzLiBUaGVyZSBpcyBubyBzdHJ1Y3QgcGFkZGluZyBpbiBgc3RydWN0IGlwX21zZmlsdGVyYC5cbi0gVGhlIG11bHRpY2FzdCBzb3VyY2UgZmlsdGVyIGFkZHJlc3MgYXJyYXkgYHBzbC1cdTAwM2VzbF9hZGRyYCBpcyBjb3BpZWQgdXAgdG8gYGNvcHljb3VudCBcdTAwM2M9IHBzbC1cdTAwM2VzbF9jb3VudGAgZWxlbWVudHMsIHdoaWNoIGFyZSBmdWxseSBpbml0aWFsaXplZCBrZXJuZWwgZGF0YS5cbi0gYHNvY2tvcHRfZXhwYW5kX291dCgpYCBhbmQgYHNvY2twdHJfdG9fc29ja29wdCgpYCBvbmx5IGFkanVzdCBpdGVyYXRvciBkZXNjcmlwdG9ycyBmb3IgdXNlciBtZW1vcnkgYm91bmRhcmllcyBhbmQgZG8gbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS5cblxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFBvdGVudGlhbCBtZW1vcnkgaXNzdWVzIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyB1c2VyIGJ1ZmZlciBhY2Nlc3MgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4pIGFuZCBjb3B5LXRvLXVzZXIgZmF1bHQgaGFuZGxpbmcuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIElQX01TRklMVEVSIHNvY2tldCBvcHRpb24gaW4gSVB2NCBnZXRzb2Nrb3B0IGJ5IGNvbnZlcnRpbmcgaXBfbWNfbXNmZ2V0IHRvIHVzZSB0aGUgc29ja29wdF90IGFic3RyYWN0aW9uLCBpbnRyb2R1Y2luZyB0aGUgc29ja29wdF9leHBhbmRfb3V0IGhlbHBlciB0byBkeW5hbWljYWxseSByZXNpemUgdGhlIG91dHB1dCBidWZmZXIgaXRlcmF0b3IsIGFuZCBleHBvcnRpbmcgc29ja3B0cl90b19zb2Nrb3B0LiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBjYW4gYmUgZGlyZWN0bHkgZXhlcmNpc2VkIGZyb20gdXNlcnNwYWNlIHZpYSBnZXRzb2Nrb3B0KCkgY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MjUyNWZjZDc2OWFkY2JmNDk2MjU3ZWQ2NDhlM2JjYjM2MjMxNTAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTA6MDc6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZ21wLmggYi9pbmNsdWRlL2xpbnV4L2lnbXAuaFxuaW5kZXggYTBjZjAzOTg1MTlmZC4uZTA3NTYxMTM0NGVmMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaWdtcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lnbXAuaFxuQEAgLTE0LDYgJiM0MzsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvY2twdHIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaWdtcC5oXHUwMDNlXG5AQCAtMjczLDcgJiM0MzsyNzQsNyBAQCBleHRlcm4gaW50IGlwX21jX3NvdXJjZShpbnQgYWRkLCBpbnQgb21vZGUsIHN0cnVjdCBzb2NrICpzayxcbiBcdFx0c3RydWN0IGlwX21yZXFfc291cmNlICptcmVxcywgaW50IGlmaW5kZXgpO1xuIGV4dGVybiBpbnQgaXBfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixpbnQgaWZpbmRleCk7XG4gZXh0ZXJuIGludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixcbi1cdFx0XHRzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKTtcbiYjNDM7XHRcdFx0c29ja29wdF90ICpvcHQpO1xuIGV4dGVybiBpbnQgaXBfbWNfZ3NmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGdyb3VwX2ZpbHRlciAqZ3NmLFxuIFx0XHRcdHNvY2twdHJfdCBvcHR2YWwsIHNpemVfdCBvZmZzZXQpO1xuIGV4dGVybiBpbnQgaXBfbWNfc2ZfYWxsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBfX2JlMzIgbG9jYWwsIF9fYmUzMiBybXQsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmhcbmluZGV4IDQ3MDEwMGFlNzEwNzcuLmRlMGVkMzYyYjM3NzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldC5oXG5AQCAtNzAsNiAmIzQzOzcwLDMxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfaW5pdF91c2VyKHNvY2tvcHRfdCAqb3B0LCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBHcm93IG9wdHZhbCB0byBAc2l6ZSwgZm9yIHRoZSBvcHRpb25zIHdob3NlIHJlcGx5IGlzIHNpemVkIGJ5IGEgY291bnQgdGhlXG4mIzQzOyAqIGNhbGxlciBsZWZ0IGluIG9wdHZhbCByYXRoZXIgdGhhbiBieSBvcHRsZW4uIFRob3NlIHdyaXRlIHBhc3Qgb3B0bGVuIHRvZGF5XG4mIzQzOyAqIGFuZCB1c2Vyc3BhY2UgcmVsaWVzIG9uIGl0LlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsIGl0IGJlZm9yZSB3cml0aW5nIHRocm91Z2ggb3B0LVx1MDAzZWl0ZXJfb3V0OiBpdCByZS1hbmNob3JzIHRoZSBpdGVyYXRvciBhdFxuJiM0MzsgKiB0aGUgaGVhZCBvZiBvcHR2YWwuIE9ubHkgYSB1c2VyIGJ1ZmZlciBjYW4gYmUgbG9uZ2VyIHRoYW4gdGhlIG9wdGxlbiB0aGVcbiYjNDM7ICogY2FsbGVyIGRlY2xhcmVkLCBzbyBhIGtlcm5lbC1iYWNrZWQgb3B0dmFsIGlzIHJlZnVzZWQgd2l0aCAtRUlOVkFMLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgc29ja29wdF9leHBhbmRfb3V0KHNvY2tvcHRfdCAqb3B0LCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdGlmIChzaXplIFx1MDAzYz0gaW92X2l0ZXJfY291bnQoXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFpdGVyX2lzX3VidWYoXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aW92X2l0ZXJfdWJ1ZihcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQsIElURVJfREVTVCwgb3B0LVx1MDAzZWl0ZXJfb3V0LnVidWYsIHNpemUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbixcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3Qga3ZlYyAqa3ZlYyk7XG4mIzQzO1xuIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdDtcbiBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvO1xuIHN0cnVjdCBpbm9kZTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmNcbmluZGV4IGQ1NjM1NWFjYTc5NzcuLjE0NGZjYTE1OGFkY2IgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pZ21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lnbXAuY1xuQEAgLTI3MDksOCAmIzQzOzI3MDksOCBAQCBpbnQgaXBfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgaW50IGlmaW5kZXgpXG4gXHRcdGVyciA9IGlwX21jX2xlYXZlX2dyb3VwKHNrLCBcdTAwMjZpbXIpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4taW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLFxuLVx0XHQgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcbiYjNDM7XG4mIzQzO2ludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgc29ja29wdF90ICpvcHQpXG4ge1xuIFx0aW50IGVyciwgbGVuLCBjb3VudCwgY29weWNvdW50LCBtc2Zfc2l6ZTtcbiBcdHN0cnVjdCBpcF9tcmVxblx0aW1yO1xuQEAgLTI3NTUsMTQgJiM0MzsyNzU1LDE5IEBAIGludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixcbiBcdGxlbiA9IGZsZXhfYXJyYXlfc2l6ZShwc2wsIHNsX2FkZHIsIGNvcHljb3VudCk7XG4gXHRtc2YtXHUwMDNlaW1zZl9udW1zcmMgPSBjb3VudDtcbiBcdG1zZl9zaXplID0gSVBfTVNGSUxURVJfU0laRShjb3B5Y291bnQpO1xuLVx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFx1MDAyNm1zZl9zaXplLCBzaXplb2YoaW50KSkgfHxcbi1cdCAgICBjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBtc2YsIElQX01TRklMVEVSX1NJWkUoMCkpKSB7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBzb3VyY2UgbGlzdCBpcyBzaXplZCBieSB0aGUgaW1zZl9udW1zcmMgdGhlIGNhbGxlciBsZWZ0IGluXG4mIzQzO1x0ICogb3B0dmFsLCBub3QgYnkgb3B0bGVuLCB3aGljaCBvbmx5IGhhcyB0byBjb3ZlciB0aGUgZml4ZWQgcGFydC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBzb2Nrb3B0X2V4cGFuZF9vdXQob3B0LCBtc2Zfc2l6ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdG9wdC1cdTAwM2VvcHRsZW4gPSBtc2Zfc2l6ZTtcbiYjNDM7XHRpZiAoY29weV90b19pdGVyKG1zZiwgSVBfTVNGSUxURVJfU0laRSgwKSwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPVxuJiM0MztcdCAgICBJUF9NU0ZJTFRFUl9TSVpFKDApKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdH1cbi1cdGlmIChsZW4gXHUwMDI2XHUwMDI2XG4tXHQgICAgY29weV90b19zb2NrcHRyX29mZnNldChvcHR2YWwsXG4tXHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaXBfbXNmaWx0ZXIsIGltc2Zfc2xpc3RfZmxleCksXG4tXHRcdFx0XHQgICBwc2wtXHUwMDNlc2xfYWRkciwgbGVuKSlcbiYjNDM7XHRpZiAobGVuIFx1MDAyNlx1MDAyNiBjb3B5X3RvX2l0ZXIocHNsLVx1MDAzZXNsX2FkZHIsIGxlbiwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0cmV0dXJuIDA7XG4gZG9uZTpcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuaW5kZXggYTU1ZWYzMjdlYzkzMi4uYzU4ZTU2NWYyYTVhYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbkBAIC0xNzA2LDYgJiM0MzsxNzA2LDggQEAgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0Y2FzZSBJUF9NU0ZJTFRFUjpcbiBcdHtcbiBcdFx0c3RydWN0IGlwX21zZmlsdGVyIG1zZjtcbiYjNDM7XHRcdHN0cnVjdCBrdmVjIGt2ZWM7XG4mIzQzO1x0XHRzb2Nrb3B0X3Qgb3B0O1xuIFxuIFx0XHRpZiAobGVuIFx1MDAzYyBJUF9NU0ZJTFRFUl9TSVpFKDApKSB7XG4gXHRcdFx0ZXJyID0gLUVJTlZBTDtcbkBAIC0xNzE1LDcgJiM0MzsxNzE3LDEzIEBAIGludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4tXHRcdGVyciA9IGlwX21jX21zZmdldChzaywgXHUwMDI2bXNmLCBvcHR2YWwsIG9wdGxlbik7XG4mIzQzO1x0XHRlcnIgPSBzb2NrcHRyX3RvX3NvY2tvcHQoXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbiwgXHUwMDI2a3ZlYyk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBpcF9tY19tc2ZnZXQoc2ssIFx1MDAyNm1zZiwgXHUwMDI2b3B0KTtcbiYjNDM7XHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXG4mIzQzO1x0XHRcdGVyciA9IC1FRkFVTFQ7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFx0Y2FzZSBNQ0FTVF9NU0ZJTFRFUjpcbmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmNcbmluZGV4IGMwNWQ4NmU2M2FiZjcuLjI5YTBmN2Y4ZTJjYWIgMTAwNjQ0XG4tLS0gYS9uZXQvc29ja2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zb2NrZXQuY1xuQEAgLTI0MzcsOCAmIzQzOzI0MzcsOCBAQCBJTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKGJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsXG4gICogSXQgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgYm90aCBpb3YgcG9pbnRzIHRvIHRoZSBzYW1lIGRhdGEsIGJ1dCxcbiAgKiAuaXRlcl9pbiBpcyByZWFkLW9ubHkgYW5kIC5pdGVyX291dCBpcyB3cml0ZS1vbmx5IGJ5IHRoZSBwcm90b2NvbCBjYWxsYmFja3NcbiAgKi9cbi1zdGF0aWMgaW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCxcbi1cdFx0XHQgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBzdHJ1Y3Qga3ZlYyAqa3ZlYylcbiYjNDM7aW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCxcbiYjNDM7XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBzdHJ1Y3Qga3ZlYyAqa3ZlYylcbiB7XG4gXHRpbnQga29wdGxlbjtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQX01VTFRJQ0FTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX21jX21zZmdldCYjMzQ7LAogICAgJiMzNDtkb19pcF9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3NvY2twdHJfdG9fc29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIElQX01TRklMVEVSIHNvY2tldCBvcHRpb24gaW4gSVB2NCBnZXRzb2Nrb3B0IGJ5IGNvbnZlcnRpbmcgaXBfbWNfbXNmZ2V0IHRvIHVzZSB0aGUgc29ja29wdF90IGFic3RyYWN0aW9uLCBpbnRyb2R1Y2luZyB0aGUgc29ja29wdF9leHBhbmRfb3V0IGhlbHBlciB0byBkeW5hbWljYWxseSByZXNpemUgdGhlIG91dHB1dCBidWZmZXIgaXRlcmF0b3IsIGFuZCBleHBvcnRpbmcgc29ja3B0cl90b19zb2Nrb3B0LiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBjYW4gYmUgZGlyZWN0bHkgZXhlcmNpc2VkIGZyb20gdXNlcnNwYWNlIHZpYSBnZXRzb2Nrb3B0KCkgY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MjUyNWZjZDc2OWFkY2JmNDk2MjU3ZWQ2NDhlM2JjYjM2MjMxNTAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMTA6MDc6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lnbXAuaCBiL2luY2x1ZGUvbGludXgvaWdtcC5oCmluZGV4IGEwY2YwMzk4NTE5ZmQuLmUwNzU2MTEzNDRlZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWdtcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaWdtcC5oCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW4uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yZWZjb3VudC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NvY2twdHIuaCZndDsKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L2lnbXAuaCZndDsKQEAgLTI3Myw3ICYjNDM7Mjc0LDcgQEAgZXh0ZXJuIGludCBpcF9tY19zb3VyY2UoaW50IGFkZCwgaW50IG9tb2RlLCBzdHJ1Y3Qgc29jayAqc2ssCiAJCXN0cnVjdCBpcF9tcmVxX3NvdXJjZSAqbXJlcXMsIGludCBpZmluZGV4KTsKIGV4dGVybiBpbnQgaXBfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixpbnQgaWZpbmRleCk7CiBleHRlcm4gaW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLAotCQkJc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbik7CiYjNDM7CQkJc29ja29wdF90ICpvcHQpOwogZXh0ZXJuIGludCBpcF9tY19nc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZ3JvdXBfZmlsdGVyICpnc2YsCiAJCQlzb2NrcHRyX3Qgb3B0dmFsLCBzaXplX3Qgb2Zmc2V0KTsKIGV4dGVybiBpbnQgaXBfbWNfc2ZfYWxsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBfX2JlMzIgbG9jYWwsIF9fYmUzMiBybXQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldC5oIGIvaW5jbHVkZS9saW51eC9uZXQuaAppbmRleCA0NzAxMDBhZTcxMDc3Li5kZTBlZDM2MmIzNzc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0LmgKQEAgLTcwLDYgJiM0Mzs3MCwzMSBAQCBzdGF0aWMgaW5saW5lIGludCBzb2Nrb3B0X2luaXRfdXNlcihzb2Nrb3B0X3QgKm9wdCwgY2hhciBfX3VzZXIgKm9wdHZhbCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qCiYjNDM7ICogR3JvdyBvcHR2YWwgdG8gQHNpemUsIGZvciB0aGUgb3B0aW9ucyB3aG9zZSByZXBseSBpcyBzaXplZCBieSBhIGNvdW50IHRoZQomIzQzOyAqIGNhbGxlciBsZWZ0IGluIG9wdHZhbCByYXRoZXIgdGhhbiBieSBvcHRsZW4uIFRob3NlIHdyaXRlIHBhc3Qgb3B0bGVuIHRvZGF5CiYjNDM7ICogYW5kIHVzZXJzcGFjZSByZWxpZXMgb24gaXQuCiYjNDM7ICoKJiM0MzsgKiBDYWxsIGl0IGJlZm9yZSB3cml0aW5nIHRocm91Z2ggb3B0LSZndDtpdGVyX291dDogaXQgcmUtYW5jaG9ycyB0aGUgaXRlcmF0b3IgYXQKJiM0MzsgKiB0aGUgaGVhZCBvZiBvcHR2YWwuIE9ubHkgYSB1c2VyIGJ1ZmZlciBjYW4gYmUgbG9uZ2VyIHRoYW4gdGhlIG9wdGxlbiB0aGUKJiM0MzsgKiBjYWxsZXIgZGVjbGFyZWQsIHNvIGEga2VybmVsLWJhY2tlZCBvcHR2YWwgaXMgcmVmdXNlZCB3aXRoIC1FSU5WQUwuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc29ja29wdF9leHBhbmRfb3V0KHNvY2tvcHRfdCAqb3B0LCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CWlmIChzaXplICZsdDs9IGlvdl9pdGVyX2NvdW50KCZhbXA7b3B0LSZndDtpdGVyX291dCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghaXRlcl9pc191YnVmKCZhbXA7b3B0LSZndDtpdGVyX291dCkpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlvdl9pdGVyX3VidWYoJmFtcDtvcHQtJmd0O2l0ZXJfb3V0LCBJVEVSX0RFU1QsIG9wdC0mZ3Q7aXRlcl9vdXQudWJ1Ziwgc2l6ZSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuLAomIzQzOwkJICAgICAgIHN0cnVjdCBrdmVjICprdmVjKTsKJiM0MzsKIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdDsKIHN0cnVjdCBwaXBlX2lub2RlX2luZm87CiBzdHJ1Y3QgaW5vZGU7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmMKaW5kZXggZDU2MzU1YWNhNzk3Ny4uMTQ0ZmNhMTU4YWRjYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWdtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lnbXAuYwpAQCAtMjcwOSw4ICYjNDM7MjcwOSw4IEBAIGludCBpcF9tY19tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBpbnQgaWZpbmRleCkKIAkJZXJyID0gaXBfbWNfbGVhdmVfZ3JvdXAoc2ssICZhbXA7aW1yKTsKIAlyZXR1cm4gZXJyOwogfQotaW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLAotCQkgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbikKJiM0MzsKJiM0MztpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIHNvY2tvcHRfdCAqb3B0KQogewogCWludCBlcnIsIGxlbiwgY291bnQsIGNvcHljb3VudCwgbXNmX3NpemU7CiAJc3RydWN0IGlwX21yZXFuCWltcjsKQEAgLTI3NTUsMTQgJiM0MzsyNzU1LDE5IEBAIGludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwKIAlsZW4gPSBmbGV4X2FycmF5X3NpemUocHNsLCBzbF9hZGRyLCBjb3B5Y291bnQpOwogCW1zZi0mZ3Q7aW1zZl9udW1zcmMgPSBjb3VudDsKIAltc2Zfc2l6ZSA9IElQX01TRklMVEVSX1NJWkUoY29weWNvdW50KTsKLQlpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgJmFtcDttc2Zfc2l6ZSwgc2l6ZW9mKGludCkpIHx8Ci0JICAgIGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIG1zZiwgSVBfTVNGSUxURVJfU0laRSgwKSkpIHsKJiM0MzsKJiM0MzsJLyogVGhlIHNvdXJjZSBsaXN0IGlzIHNpemVkIGJ5IHRoZSBpbXNmX251bXNyYyB0aGUgY2FsbGVyIGxlZnQgaW4KJiM0MzsJICogb3B0dmFsLCBub3QgYnkgb3B0bGVuLCB3aGljaCBvbmx5IGhhcyB0byBjb3ZlciB0aGUgZml4ZWQgcGFydC4KJiM0MzsJICovCiYjNDM7CWVyciA9IHNvY2tvcHRfZXhwYW5kX291dChvcHQsIG1zZl9zaXplKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CW9wdC0mZ3Q7b3B0bGVuID0gbXNmX3NpemU7CiYjNDM7CWlmIChjb3B5X3RvX2l0ZXIobXNmLCBJUF9NU0ZJTFRFUl9TSVpFKDApLCAmYW1wO29wdC0mZ3Q7aXRlcl9vdXQpICE9CiYjNDM7CSAgICBJUF9NU0ZJTFRFUl9TSVpFKDApKQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKGxlbiAmYW1wOyZhbXA7Ci0JICAgIGNvcHlfdG9fc29ja3B0cl9vZmZzZXQob3B0dmFsLAotCQkJCSAgIG9mZnNldG9mKHN0cnVjdCBpcF9tc2ZpbHRlciwgaW1zZl9zbGlzdF9mbGV4KSwKLQkJCQkgICBwc2wtJmd0O3NsX2FkZHIsIGxlbikpCiYjNDM7CWlmIChsZW4gJmFtcDsmYW1wOyBjb3B5X3RvX2l0ZXIocHNsLSZndDtzbF9hZGRyLCBsZW4sICZhbXA7b3B0LSZndDtpdGVyX291dCkgIT0gbGVuKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKIGRvbmU6CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwppbmRleCBhNTVlZjMyN2VjOTMyLi5jNThlNTY1ZjJhNWFhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKQEAgLTE3MDYsNiAmIzQzOzE3MDYsOCBAQCBpbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJY2FzZSBJUF9NU0ZJTFRFUjoKIAl7CiAJCXN0cnVjdCBpcF9tc2ZpbHRlciBtc2Y7CiYjNDM7CQlzdHJ1Y3Qga3ZlYyBrdmVjOwomIzQzOwkJc29ja29wdF90IG9wdDsKIAogCQlpZiAobGVuICZsdDsgSVBfTVNGSUxURVJfU0laRSgwKSkgewogCQkJZXJyID0gLUVJTlZBTDsKQEAgLTE3MTUsNyAmIzQzOzE3MTcsMTMgQEAgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJZXJyID0gLUVGQVVMVDsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWVyciA9IGlwX21jX21zZmdldChzaywgJmFtcDttc2YsIG9wdHZhbCwgb3B0bGVuKTsKJiM0MzsJCWVyciA9IHNvY2twdHJfdG9fc29ja29wdCgmYW1wO29wdCwgb3B0dmFsLCBvcHRsZW4sICZhbXA7a3ZlYyk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCAmYW1wO21zZiwgJmFtcDtvcHQpOwomIzQzOwkJaWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sICZhbXA7b3B0Lm9wdGxlbiwgc2l6ZW9mKGludCkpKQomIzQzOwkJCWVyciA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0OwogCX0KIAljYXNlIE1DQVNUX01TRklMVEVSOgpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IGMwNWQ4NmU2M2FiZjcuLjI5YTBmN2Y4ZTJjYWIgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmMKQEAgLTI0MzcsOCAmIzQzOzI0MzcsOCBAQCBJTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKGJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsCiAgKiBJdCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCBib3RoIGlvdiBwb2ludHMgdG8gdGhlIHNhbWUgZGF0YSwgYnV0LAogICogLml0ZXJfaW4gaXMgcmVhZC1vbmx5IGFuZCAuaXRlcl9vdXQgaXMgd3JpdGUtb25seSBieSB0aGUgcHJvdG9jb2wgY2FsbGJhY2tzCiAgKi8KLXN0YXRpYyBpbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLAotCQkJICAgICAgc29ja3B0cl90IG9wdGxlbiwgc3RydWN0IGt2ZWMgKmt2ZWMpCiYjNDM7aW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCwKJiM0MzsJCSAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBzdHJ1Y3Qga3ZlYyAqa3ZlYykKIHsKIAlpbnQga29wdGxlbjsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODAxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogV29ydGggdGhlIEZ1eno/KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvZXMqLiBGcm9tIGEgcXVpY2sgbG9vaywgaXQgc2VlbXMgbGlrZSBhIHNvY2tldCBvcHRpb24gY2hhbmdlIHJlbGF0ZWQgdG8gSUdNUCBhbmQgSVAgbXVsdGljYXN0IGZpbHRlcmluZy4gU3BlY2lmaWNhbGx5LCB0aGUgc2lnbmF0dXJlIG9mIGBpcF9tY19tc2ZnZXRgIGluIGBpZ21wLmhgIGhhcyBiZWVuIHJlZmFjdG9yZWQsIHN3aXRjaGluZyBmcm9tIHBvaW50ZXJzIHRvIHBvaW50ZXJzIGFuZCBsZW5ndGhzIHRvIGEgYHNvY2tvcHRfdGAgc3RydWN0LCB3aGljaCBpcyBhIHNpZ25pZmljYW50IHNoaWZ0LiBUaGUgYWRkaXRpb24gb2YgYHNvY2tvcHRfZXhwYW5kX291dGAgYW5kIGBzb2NrcHRyX3RvX3NvY2tvcHRgIGluIGBuZXQuaGAgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2UsIHByb3ZpZGluZyBoZWxwZXJzIGZvciBtYW5pcHVsYXRpbmcgdGhpcyBuZXcgc3RydWN0IGFuZCBjb252ZXJ0aW5nIGV4aXN0aW5nIHBvaW50ZXIgcmVwcmVzZW50YXRpb25zLiBUaGUgYGlnbXAuY2AgYW5kIGBpcF9zb2NrZ2x1ZS5jYCB1cGRhdGVzIHNob3cgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFkYXB0aW5nIHRvIHRoZSBgc29ja29wdF90YCBjaGFuZ2UsIGFuZCBgc29ja2V0LmNgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIG1ha2UgYHNvY2twdHJfdG9fc29ja29wdGAgbm9uLXN0YXRpYywgYWxsb3dpbmcgaXQgdG8gYmUgY2FsbGVkIGZyb20gdGhlIG5ldyBgZG9faXBfZ2V0c29ja29wdGAgY2FsbC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZz8gQWJzb2x1dGVseS4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgZGVhbGluZyB3aXRoIElQdjQgc29ja2V0IG9wdGlvbnMsIGFuZCBkaXJlY3RseSByZWFjaGFibGUgdmlhIHRoZSBgZ2V0c29ja29wdGAgc3lzY2FsbC4gVGhhdCBtYWtlcyBpdCBhIHByaW1lIHRhcmdldC4gU3RhbmRhcmQgdXNlciBzcGFjZSBhY2Nlc3MgdG8gY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB2aWEgYSBzeXN0ZW0gY2FsbCBpcyBhbiBpZGVhbCBzcG90LgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzOiBJIG5lZWQgdG8gZ2V0IHRoZSBleGFjdCBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9ucyBhZmZlY3RlZCB0byByZWZpbmUgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgYmV0dGVyIGNvbnRleHQgZm9yIHRoZSBjb2RlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBnb29kIHNwb3QgZm9yIGEgZm9jdXNlZCBmdXp6ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja3B0cl90b19zb2Nrb3B0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0Lmg9ODI9c3RhdGljIGlubGluZSBpbnQgc29ja29wdF9leHBhbmRfb3V0KHNvY2tvcHRfdCAqb3B0LCBzaXplX3Qgc2l6ZSlcbi0tXG5pbmNsdWRlL2xpbnV4L25ldC5oLTk0LVxuaW5jbHVkZS9saW51eC9uZXQuaDo5NTppbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuLFxuaW5jbHVkZS9saW51eC9uZXQuaC05Ni1cdFx0ICAgICAgIHN0cnVjdCBrdmVjICprdmVjKTtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE1MDc9aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTcxOS1cdFx0fVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNzIwOlx0XHRlcnIgPSBzb2NrcHRyX3RvX3NvY2tvcHQoXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbiwgXHUwMDI2a3ZlYyk7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3MjEtXHRcdGlmIChlcnIpXG4tLVxubmV0L3NvY2tldC5jPTI0MzE9SU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShib29sIHRjcF9icGZfYnlwYXNzX2dldHNvY2tvcHQoaW50IGxldmVsLFxuLS1cbm5ldC9zb2NrZXQuYy0yNDM5LSAqL1xubmV0L3NvY2tldC5jOjI0NDA6aW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCxcbm5ldC9zb2NrZXQuYy0yNDQxLVx0XHQgICAgICAgc29ja3B0cl90IG9wdGxlbiwgc3RydWN0IGt2ZWMgKmt2ZWMpXG4tLVxubmV0L3NvY2tldC5jPTI0NjY9aW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxuLS1cbm5ldC9zb2NrZXQuYy0yNDg1LVx0fSBlbHNlIGlmIChvcHMtXHUwMDNlZ2V0c29ja29wdF9pdGVyKSB7XG5uZXQvc29ja2V0LmM6MjQ4NjpcdFx0ZXJyID0gc29ja3B0cl90b19zb2Nrb3B0KFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4sIFx1MDAyNmt2ZWMpO1xubmV0L3NvY2tldC5jLTI0ODctXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA3NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIElHTVAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBob3cgbXVsdGljYXN0IG1lbWJlcnNoaXAgaW5mb3JtYXRpb24gaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSVB2NCBjb250ZXh0LiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoZSBpc3N1ZSBJJiMzOTttIHRyYWNraW5nIGlzIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgcmV0cmlldmVzIG9yIHNldHMgbXVsdGljYXN0IG1lbWJlcnNoaXAgaW5mb3JtYXRpb24uIFRoZXJlZm9yZSwgSSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgaXBfbWNfbXNmZ2V0YCBmdW5jdGlvbi4gSXQmIzM5O3MgYWxtb3N0IGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyBhbnl0aGluZyBJR01QLXJlbGF0ZWQuIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24sIHJlc2lkaW5nIHdpdGhpbiB0aGUgYG5ldC9pcHY0L2lnbXAuY2AgZmlsZSwgcGxheXMgYSBwaXZvdGFsIHJvbGUuIEkmIzM5O20gaG9waW5nIEkgY2FuIGZpbmQgdGhlIGNsdWUgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfbWNfbXNmZ2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaWdtcC5oPTI3NT1leHRlcm4gaW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsaW50IGlmaW5kZXgpO1xuaW5jbHVkZS9saW51eC9pZ21wLmg6Mjc2OmV4dGVybiBpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXG5pbmNsdWRlL2xpbnV4L2lnbXAuaC0yNzctXHRcdFx0c29ja29wdF90ICpvcHQpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0yNjIyPWludCBpcF9tY19tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBpbnQgaWZpbmRleClcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjcxMi1cbm5ldC9pcHY0L2lnbXAuYzoyNzEzOmludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgc29ja29wdF90ICpvcHQpXG5uZXQvaXB2NC9pZ21wLmMtMjcxNC17XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xNTA3PWludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3MjMtXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE3MjQ6XHRcdGVyciA9IGlwX21jX21zZmdldChzaywgXHUwMDI2bXNmLCBcdTAwMjZvcHQpO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzI1LVx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2b3B0Lm9wdGxlbiwgc2l6ZW9mKGludCkpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBpcF9zb2NrZ2x1ZS5jYCoqCgpPa2F5LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGlzIHNwZWNpZmljIHNpdHVhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBoZWFkIGRpcmVjdGx5IGludG8gdGhlIGBpcF9zb2NrZ2x1ZS5jYCBzb3VyY2UgY29kZSwgYW5kIEkmIzM5O20gdGFyZ2V0aW5nIGFyb3VuZCBsaW5lIDE3MDAuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHBsYWNlIHRvIHN0YXJ0IOKAkyBJJiMzOTttIGhvcGluZyB0aGF0IGFyZWEgd2lsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSBleHBlY3QgdGhhdCBhcm91bmQgdGhhdCByZWdpb24gSSBjYW4gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGN1cnJlbnQgc3RhdGUsIGFuZCB0aGlzIGZlZWxzIGxpa2UgYSBzdHJvbmcgc3RhcnRpbmcgcG9pbnQgdG8gYWNoaWV2ZSB0aGF0IGdvYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzAwOlx0XG4xNzAxOlx0XHRpZiAobmVlZHNfcnRubClcbjE3MDI6XHRcdFx0cnRubF9sb2NrKCk7XG4xNzAzOlx0XHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XG4xNzA0Olx0XG4xNzA1Olx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbjE3MDY6XHRcdGNhc2UgSVBfTVNGSUxURVI6XG4xNzA3Olx0XHR7XG4xNzA4Olx0XHRcdHN0cnVjdCBpcF9tc2ZpbHRlciBtc2Y7XG4xNzA5Olx0XHRcdHN0cnVjdCBrdmVjIGt2ZWM7XG4xNzEwOlx0XHRcdHNvY2tvcHRfdCBvcHQ7XG4xNzExOlx0XG4xNzEyOlx0XHRcdGlmIChsZW4gXHUwMDNjIElQX01TRklMVEVSX1NJWkUoMCkpIHtcbjE3MTM6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTcxNDpcdFx0XHRcdGdvdG8gb3V0O1xuMTcxNTpcdFx0XHR9XG4xNzE2Olx0XHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZtc2YsIG9wdHZhbCwgSVBfTVNGSUxURVJfU0laRSgwKSkpIHtcbjE3MTc6XHRcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMTcxODpcdFx0XHRcdGdvdG8gb3V0O1xuMTcxOTpcdFx0XHR9XG4xNzIwOlx0XHRcdGVyciA9IHNvY2twdHJfdG9fc29ja29wdChcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcdTAwMjZrdmVjKTtcbjE3MjE6XHRcdFx0aWYgKGVycilcbjE3MjI6XHRcdFx0XHRnb3RvIG91dDtcbjE3MjM6XHRcbjE3MjQ6XHRcdFx0ZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCBcdTAwMjZtc2YsIFx1MDAyNm9wdCk7XG4xNzI1Olx0XHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXG4xNzI2Olx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjE3Mjc6XHRcdFx0Z290byBvdXQ7XG4xNzI4Olx0XHR9XG4xNzI5Olx0XHRjYXNlIE1DQVNUX01TRklMVEVSOlxuMTczMDpcdFx0XHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcbjE3MzE6XHRcdFx0XHRlcnIgPSBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyKHNrLCBvcHR2YWwsIG9wdGxlbixcbjE3MzI6XHRcdFx0XHRcdFx0XHRcdCAgIGxlbik7XG4xNzMzOlx0XHRcdGVsc2VcbjE3MzQ6XHRcdFx0XHRlcnIgPSBpcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc2ssIG9wdHZhbCwgb3B0bGVuLCBsZW4pO1xuMTczNTpcdFx0XHRnb3RvIG91dDtcbjE3MzY6XHRcdGNhc2UgSVBfUFJPVE9DT0w6XG4xNzM3Olx0XHRcdHZhbCA9IGluZXRfc2soc2spLVx1MDAzZWluZXRfbnVtO1xuMTczODpcdFx0XHRicmVhaztcbjE3Mzk6XHRcdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQzNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIElHTVAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gd2UgbmVlZCB0byBleGFtaW5lIHRoZSBJR01QIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IG11bHRpY2FzdCBzb3VyY2UgZmlsdGVyaW5nIGlzIGhhbmRsZWQuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBuZXQvaXB2NC9pZ21wLmNgLiBUaGUgY29yZSBsb2dpYyBwcm9iYWJseSByZXNpZGVzIG5lYXIgYGlwX21jX21zZmdldGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIHJldHJpZXZlcyB0aGUgTXVsdGljYXN0IFNvdXJjZSBGaWx0ZXIgKE1TRikgc3RhdGUuIEkmIzM5O20gYXNzdW1pbmcgaXQgaGFuZGxlcyB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIGxvb2t1cHMsIGFuZCBhbnkgYXNzb2NpYXRlZCBsb2NraW5nIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5IHdoZW4gYSBtdWx0aWNhc3QgZ3JvdXAgbWVtYmVyIGFkZHMgb3IgcmVtb3ZlcyBhIHNvdXJjZS4gSeKAmWxsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGFsZ29yaXRobXMgdXNlZCBmb3IgbWF0Y2hpbmcsIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcm91dGluZyB0YWJsZSwgYXMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0dWFsIGZvcndhcmRpbmcgZGVjaXNpb25zIHN0ZW0gZnJvbSwgYmFzZWQgb24gdGhlIGZpbHRlciBpbmZvcm1hdGlvbi4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgaXQgcGVyZm9ybXMgc29tZSBzb3J0IG9mIGhhc2gtYmFzZWQgbG9va3VwIHRvIG9wdGltaXplIHRoZSBNU0YgcmV0cmlldmFsLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBlcnJvciBoYW5kbGluZzogd2hhdCBoYXBwZW5zIGlmIHRoZSBlbnRyeSBpc24mIzM5O3QgZm91bmQsIG9yIGlmIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB3aXRoIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50PyBUaGlzIHdpbGwgYmUgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzEwOlx0XHRyZXR1cm4gZXJyO1xuMjcxMTpcdH1cbjI3MTI6XHRcbjI3MTM6XHRpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIHNvY2tvcHRfdCAqb3B0KVxuMjcxNDpcdHtcbjI3MTU6XHRcdGludCBlcnIsIGxlbiwgY291bnQsIGNvcHljb3VudCwgbXNmX3NpemU7XG4yNzE2Olx0XHRzdHJ1Y3QgaXBfbXJlcW5cdGltcjtcbjI3MTc6XHRcdF9fYmUzMiBhZGRyID0gbXNmLVx1MDAzZWltc2ZfbXVsdGlhZGRyO1xuMjcxODpcdFx0c3RydWN0IGlwX21jX3NvY2tsaXN0ICpwbWM7XG4yNzE5Olx0XHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7XG4yNzIwOlx0XHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XG4yNzIxOlx0XHRzdHJ1Y3QgaXBfc2Zfc29ja2xpc3QgKnBzbDtcbjI3MjI6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbjI3MjM6XHRcbjI3MjQ6XHRcdEFTU0VSVF9SVE5MKCk7XG4yNzI1Olx0XG4yNzI2Olx0XHRpZiAoIWlwdjRfaXNfbXVsdGljYXN0KGFkZHIpKVxuMjcyNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI3Mjg6XHRcbjI3Mjk6XHRcdGltci5pbXJfbXVsdGlhZGRyLnNfYWRkciA9IG1zZi1cdTAwM2VpbXNmX211bHRpYWRkcjtcbjI3MzA6XHRcdGltci5pbXJfYWRkcmVzcy5zX2FkZHIgPSBtc2YtXHUwMDNlaW1zZl9pbnRlcmZhY2U7XG4yNzMxOlx0XHRpbXIuaW1yX2lmaW5kZXggPSAwO1xuMjczMjpcdFx0aW5fZGV2ID0gaXBfbWNfZmluZF9kZXYobmV0LCBcdTAwMjZpbXIpO1xuMjczMzpcdFxuMjczNDpcdFx0aWYgKCFpbl9kZXYpIHtcbjI3MzU6XHRcdFx0ZXJyID0gLUVOT0RFVjtcbjI3MzY6XHRcdFx0Z290byBkb25lO1xuMjczNzpcdFx0fVxuMjczODpcdFx0ZXJyID0gLUVBRERSTk9UQVZBSUw7XG4yNzM5Olx0XG4yNzQwOlx0XHRmb3JfZWFjaF9wbWNfcnRubChpbmV0LCBwbWMpIHtcbjI3NDE6XHRcdFx0aWYgKHBtYy1cdTAwM2VtdWx0aS5pbXJfbXVsdGlhZGRyLnNfYWRkciA9PSBtc2YtXHUwMDNlaW1zZl9tdWx0aWFkZHIgXHUwMDI2XHUwMDI2XG4yNzQyOlx0XHRcdCAgICBwbWMtXHUwMDNlbXVsdGkuaW1yX2lmaW5kZXggPT0gaW1yLmltcl9pZmluZGV4KVxuMjc0MzpcdFx0XHRcdGJyZWFrO1xuMjc0NDpcdFx0fVxuMjc0NTpcdFx0aWYgKCFwbWMpXHRcdC8qIG11c3QgaGF2ZSBhIHByaW9yIGpvaW4gKi9cbjI3NDY6XHRcdFx0Z290byBkb25lO1xuMjc0NzpcdFx0bXNmLVx1MDAzZWltc2ZfZm1vZGUgPSBwbWMtXHUwMDNlc2Ztb2RlO1xuMjc0ODpcdFx0cHNsID0gcnRubF9kZXJlZmVyZW5jZShwbWMtXHUwMDNlc2ZsaXN0KTtcbjI3NDk6XHRcdGlmICghcHNsKSB7XG4yNzUwOlx0XHRcdGNvdW50ID0gMDtcbjI3NTE6XHRcdH0gZWxzZSB7XG4yNzUyOlx0XHRcdGNvdW50ID0gcHNsLVx1MDAzZXNsX2NvdW50O1xuMjc1MzpcdFx0fVxuMjc1NDpcdFx0Y29weWNvdW50ID0gY291bnQgXHUwMDNjIG1zZi1cdTAwM2VpbXNmX251bXNyYyA/IGNvdW50IDogbXNmLVx1MDAzZWltc2ZfbnVtc3JjO1xuMjc1NTpcdFx0bGVuID0gZmxleF9hcnJheV9zaXplKHBzbCwgc2xfYWRkciwgY29weWNvdW50KTtcbjI3NTY6XHRcdG1zZi1cdTAwM2VpbXNmX251bXNyYyA9IGNvdW50O1xuMjc1NzpcdFx0bXNmX3NpemUgPSBJUF9NU0ZJTFRFUl9TSVpFKGNvcHljb3VudCk7XG4yNzU4Olx0XG4yNzU5Olx0XHQvKiBUaGUgc291cmNlIGxpc3QgaXMgc2l6ZWQgYnkgdGhlIGltc2ZfbnVtc3JjIHRoZSBjYWxsZXIgbGVmdCBpblxuMjc2MDpcdFx0ICogb3B0dmFsLCBub3QgYnkgb3B0bGVuLCB3aGljaCBvbmx5IGhhcyB0byBjb3ZlciB0aGUgZml4ZWQgcGFydC5cbjI3NjE6XHRcdCAqL1xuMjc2MjpcdFx0ZXJyID0gc29ja29wdF9leHBhbmRfb3V0KG9wdCwgbXNmX3NpemUpO1xuMjc2MzpcdFx0aWYgKGVycilcbjI3NjQ6XHRcdFx0cmV0dXJuIGVycjtcbjI3NjU6XHRcbjI3NjY6XHRcdG9wdC1cdTAwM2VvcHRsZW4gPSBtc2Zfc2l6ZTtcbjI3Njc6XHRcdGlmIChjb3B5X3RvX2l0ZXIobXNmLCBJUF9NU0ZJTFRFUl9TSVpFKDApLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9XG4yNzY4Olx0XHQgICAgSVBfTVNGSUxURVJfU0laRSgwKSlcbjI3Njk6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4yNzcwOlx0XHRpZiAobGVuIFx1MDAyNlx1MDAyNiBjb3B5X3RvX2l0ZXIocHNsLVx1MDAzZXNsX2FkZHIsIGxlbiwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXG4yNzcxOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjc3MjpcdFx0cmV0dXJuIDA7XG4yNzczOlx0ZG9uZTpcbjI3NzQ6XHRcdHJldHVybiBlcnI7XG4yNzc1Olx0fVxuMjc3NjpcdFxuMjc3NzpcdGludCBpcF9tY19nc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZ3JvdXBfZmlsdGVyICpnc2YsXG4yNzc4Olx0XHRcdCBzb2NrcHRyX3Qgb3B0dmFsLCBzaXplX3Qgc3Nfb2Zmc2V0KVxuMjc3OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg5MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNvY2twdHJfdG9fc29ja29wdGAgaW4gYG5ldC9zb2NrZXQuY2AqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIGluIHRoZSBuZXR3b3JrIHNvY2tldCBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBzb2NrcHRyX3RvX3NvY2tvcHRgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhpcyBmdW5jdGlvbiBiZWNhdXNlIGl0IHNvdW5kcyBsaWtlIGl0JiMzOTtzIGhhbmRsaW5nIHRoZSB0cmFuc2xhdGlvbiBiZXR3ZWVuIGEgZ2VuZXJpYyBzb2NrZXQgcG9pbnRlciBhbmQgdGhlIHNvY2tldCBvcHRpb25zLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhIHRvIHVuZGVyc3RhbmQsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHN1YnRsZSBiZWhhdmlvciBjaGFuZ2VzLiBJIG5lZWQgdG8gYmUgdGhpbmtpbmcgYWJvdXQgZGF0YSBzdHJ1Y3R1cmVzIGhlcmUuIFdoYXQga2luZCBvZiBwb2ludGVyIGlzIGBzb2NrcHRyYD8gSXMgaXQgYSB1c2VyLXNwYWNlIHBvaW50ZXI/IEtlcm5lbCBzcGFjZT8gVGhpcyBpbmZsdWVuY2VzIGhvdyB0aGlzIHRyYW5zbGF0aW9uIGFjdHVhbGx5IG9jY3VycywgYW5kIGFueSBtaXN0YWtlcyBoZXJlIGNhbiBsZWFkIHRvIGlzc3Vlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBvcHRpb24gZGF0YSBpdHNlbGYgaXMgcGFzc2VkOyBpcyBpdCBjb3BpZWQ/IEFjY2Vzc2VkIGRpcmVjdGx5PyBBbnkga2luZCBvZiBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyB3b3VsZCBiZSBleHRyZW1lbHkgaW50ZXJlc3RpbmcuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgdGhpcyBpbiBsaWdodCBvZiBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMuIFRoaXMgaXMgZ29pbmcgdG8gcmVxdWlyZSBhIGRlZXAgZGl2ZSB0byBmdWxseSBncmFzcCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgc29ja2V0IG9wdGlvbnMgYmVpbmcgc2V0LCBvciByZWFkLCBvciBib3RoLiBVbmRlcnN0YW5kaW5nIHRoYXQgZGlmZmVyZW5jZSB3aWxsIGJlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc29ja2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0MzU6XHQgKiBJbml0aWFsaXplIGEgc29ja29wdF90IGZyb20gc29ja3B0ciBvcHR2YWwvb3B0bGVuLCBzZXR0aW5nIHVwIGlvdl9pdGVyXG4yNDM2Olx0ICogZm9yIGJvdGggaW5wdXQgYW5kIG91dHB1dCBkaXJlY3Rpb25zLlxuMjQzNzpcdCAqIEl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IGJvdGggaW92IHBvaW50cyB0byB0aGUgc2FtZSBkYXRhLCBidXQsXG4yNDM4Olx0ICogLml0ZXJfaW4gaXMgcmVhZC1vbmx5IGFuZCAuaXRlcl9vdXQgaXMgd3JpdGUtb25seSBieSB0aGUgcHJvdG9jb2wgY2FsbGJhY2tzXG4yNDM5Olx0ICovXG4yNDQwOlx0aW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCxcbjI0NDE6XHRcdFx0ICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIHN0cnVjdCBrdmVjICprdmVjKVxuMjQ0MjpcdHtcbjI0NDM6XHRcdGludCBrb3B0bGVuO1xuMjQ0NDpcdFxuMjQ0NTpcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmtvcHRsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKVxuMjQ0NjpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjI0NDc6XHRcbjI0NDg6XHRcdGlmIChrb3B0bGVuIFx1MDAzYyAwKVxuMjQ0OTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI0NTA6XHRcbjI0NTE6XHRcdGlmIChvcHR2YWwuaXNfa2VybmVsKSB7XG4yNDUyOlx0XHRcdGt2ZWMtXHUwMDNlaW92X2Jhc2UgPSBvcHR2YWwua2VybmVsO1xuMjQ1MzpcdFx0XHRrdmVjLVx1MDAzZWlvdl9sZW4gPSBrb3B0bGVuO1xuMjQ1NDpcdFx0XHRpb3ZfaXRlcl9rdmVjKFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCwgSVRFUl9ERVNULCBrdmVjLCAxLCBrb3B0bGVuKTtcbjI0NTU6XHRcdFx0aW92X2l0ZXJfa3ZlYyhcdTAwMjZvcHQtXHUwMDNlaXRlcl9pbiwgSVRFUl9TT1VSQ0UsIGt2ZWMsIDEsIGtvcHRsZW4pO1xuMjQ1NjpcdFx0fSBlbHNlIHtcbjI0NTc6XHRcdFx0aW92X2l0ZXJfdWJ1ZihcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQsIElURVJfREVTVCwgb3B0dmFsLnVzZXIsIGtvcHRsZW4pO1xuMjQ1ODpcdFx0XHRpb3ZfaXRlcl91YnVmKFx1MDAyNm9wdC1cdTAwM2VpdGVyX2luLCBJVEVSX1NPVVJDRSwgb3B0dmFsLnVzZXIsXG4yNDU5Olx0XHRcdFx0ICAgICAga29wdGxlbik7XG4yNDYwOlx0XHR9XG4yNDYxOlx0XHRvcHQtXHUwMDNlb3B0bGVuID0ga29wdGxlbjtcbjI0NjI6XHRcbjI0NjM6XHRcdHJldHVybiAwO1xuMjQ2NDpcdH1cbjI0NjU6XHRcbjI0NjY6XHRpbnQgZG9fc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsXG4yNDY3Olx0XHRcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcbjI0Njg6XHR7XG4yNDY5Olx0XHRpbnQgbWF4X29wdGxlbiBfX21heWJlX3VudXNlZCA9IDA7XG4yNDcwOlx0XHRjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHM7XG4yNDcxOlx0XHRzdHJ1Y3Qga3ZlYyBrdmVjO1xuMjQ3MjpcdFx0c29ja29wdF90IG9wdDtcbjI0NzM6XHRcdGludCBlcnI7XG4yNDc0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4ODIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBuZXQuaGAgdG8gVHJhY2UgU29ja2V0IE9wdGlvbnMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZSBuZXR3b3JrIHNvY2tldCBiZWhhdmlvciwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGV4cGFuZHMgc29ja2V0IG9wdGlvbnMsIHNwZWNpZmljYWxseSwgdGhhdCBgc29ja29wdF9leHBhbmRfb3V0YCBtYWNyby4gUmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBgaW5jbHVkZS9saW51eC9uZXQuaGAgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgdGhpcyBtYWNybyBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHNvY2tldCBvcHRpb24gaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20gYXNzdW1pbmcgaXQgcmVsYXRlcyB0byB1c2VyIHNwYWNlIG9yIHRoZSBuZXR3b3JrIHN0YWNrIHByZXBhcmluZyBvcHRpb25zIGJlZm9yZSBwYXNzaW5nIHRoZW0gb3V0LiBHb3R0YSB0cmFjZSB0aGUgY2FsbGluZyBjb250ZXh0cyB0byBzZWUgaWYgdGhpcyBpcyByZWxhdGVkIHRvIGEgdnVsbmVyYWJpbGl0eS4gTGV0JiMzOTtzIHNlZSBob3cgYHNvY2tvcHRfZXhwYW5kX291dGAgaGFuZGxlcyB0aGUgY29weWluZywgdmFsaWRhdGlvbiwgYW5kIGV4cGFuc2lvbiBvZiBzb2NrZXQgb3B0aW9ucywgYW5kIHdoYXQgdHlwZSBzYWZldHkgY29uc2lkZXJhdGlvbnMgYXJlIGluIHBsYXkuIEFueSBvZmYtYnktb25lIGVycm9ycz8gUG9zc2libGUgaW50ZWdlciBvdmVyZmxvd3M/IEkgc2hvdWxkIGNoZWNrIGl0cyB1c2UgaW4gdGhlIGNvZGUgYmFzZSDigJMgbGlrZWx5IHRoZSBgc2V0c29ja29wdGAgYW5kIGBnZXRzb2Nrb3B0YCBpbXBsZW1lbnRhdGlvbnMgYXJlIHRoZSBwcmltYXJ5IGFyZWFzIG9mIGludGVyZXN0LiBHb3R0YSBxdWlja2x5IHNraW0gdGhvc2UgZnVuY3Rpb25zIGFuZCBzZWUgd2hhdCB0aGlzIG1hY3JvIGlzIGRvaW5nIGluIHRoZSBjb250ZXh0IG9mIGBzdHJ1Y3Qgc29ja2V0YCBtYW5pcHVsYXRpb24gYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBXZSYjMzk7cmUgbG9va2luZyBmb3IgaG93IHRoaXMgbWFjcm8gcHJvdGVjdHMgYWdhaW5zdCB1c2VybGFuZCBidWZmZXIgb3ZlcnJ1bnMgb3Igb3RoZXIgcmVsYXRlZCBleHBsb2l0YWJsZSBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XG4gIDYxOlx0XHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuICA2MjpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAgNjM6XHRcdGlmIChsZW4gXHUwMDNjIDApXG4gIDY0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA2NTpcdFxuICA2NjpcdFx0aW92X2l0ZXJfdWJ1ZihcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQsIElURVJfREVTVCwgb3B0dmFsLCBsZW4pO1xuICA2NzpcdFx0aW92X2l0ZXJfdWJ1ZihcdTAwMjZvcHQtXHUwMDNlaXRlcl9pbiwgSVRFUl9TT1VSQ0UsIG9wdHZhbCwgbGVuKTtcbiAgNjg6XHRcdG9wdC1cdTAwM2VvcHRsZW4gPSBsZW47XG4gIDY5Olx0XG4gIDcwOlx0XHRyZXR1cm4gMDtcbiAgNzE6XHR9XG4gIDcyOlx0XG4gIDczOlx0LypcbiAgNzQ6XHQgKiBHcm93IG9wdHZhbCB0byBAc2l6ZSwgZm9yIHRoZSBvcHRpb25zIHdob3NlIHJlcGx5IGlzIHNpemVkIGJ5IGEgY291bnQgdGhlXG4gIDc1Olx0ICogY2FsbGVyIGxlZnQgaW4gb3B0dmFsIHJhdGhlciB0aGFuIGJ5IG9wdGxlbi4gVGhvc2Ugd3JpdGUgcGFzdCBvcHRsZW4gdG9kYXlcbiAgNzY6XHQgKiBhbmQgdXNlcnNwYWNlIHJlbGllcyBvbiBpdC5cbiAgNzc6XHQgKlxuICA3ODpcdCAqIENhbGwgaXQgYmVmb3JlIHdyaXRpbmcgdGhyb3VnaCBvcHQtXHUwMDNlaXRlcl9vdXQ6IGl0IHJlLWFuY2hvcnMgdGhlIGl0ZXJhdG9yIGF0XG4gIDc5Olx0ICogdGhlIGhlYWQgb2Ygb3B0dmFsLiBPbmx5IGEgdXNlciBidWZmZXIgY2FuIGJlIGxvbmdlciB0aGFuIHRoZSBvcHRsZW4gdGhlXG4gIDgwOlx0ICogY2FsbGVyIGRlY2xhcmVkLCBzbyBhIGtlcm5lbC1iYWNrZWQgb3B0dmFsIGlzIHJlZnVzZWQgd2l0aCAtRUlOVkFMLlxuICA4MTpcdCAqL1xuICA4MjpcdHN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfZXhwYW5kX291dChzb2Nrb3B0X3QgKm9wdCwgc2l6ZV90IHNpemUpXG4gIDgzOlx0e1xuICA4NDpcdFx0aWYgKHNpemUgXHUwMDNjPSBpb3ZfaXRlcl9jb3VudChcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpKVxuICA4NTpcdFx0XHRyZXR1cm4gMDtcbiAgODY6XHRcbiAgODc6XHRcdGlmIChXQVJOX09OX09OQ0UoIWl0ZXJfaXNfdWJ1ZihcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpKSlcbiAgODg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDg5Olx0XG4gIDkwOlx0XHRpb3ZfaXRlcl91YnVmKFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCwgSVRFUl9ERVNULCBvcHQtXHUwMDNlaXRlcl9vdXQudWJ1Ziwgc2l6ZSk7XG4gIDkxOlx0XG4gIDkyOlx0XHRyZXR1cm4gMDtcbiAgOTM6XHR9XG4gIDk0Olx0XG4gIDk1Olx0aW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbixcbiAgOTY6XHRcdFx0ICAgICAgIHN0cnVjdCBrdmVjICprdmVjKTtcbiAgOTc6XHRcbiAgOTg6XHRzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3Q7XG4gIDk5Olx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbztcbiAxMDA6XHRzdHJ1Y3QgaW5vZGU7XG4gMTAxOlx0c3RydWN0IGZpbGU7XG4gMTAyOlx0c3RydWN0IG5ldDtcbiAxMDM6XHRcbiAxMDQ6XHQvKiBIaXN0b3JpY2FsbHksIFNPQ0tXUV9BU1lOQ19OT1NQQUNFIFx1MDAyNiBTT0NLV1FfQVNZTkNfV0FJVERBVEEgd2VyZSBsb2NhdGVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODc5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqS2NvbmZpZyBEZXBlbmRlbmN5IEFuYWx5c2lzKioKCk9rYXksIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zIGZvciB0aGlzIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0IGBuZXQvaXB2NC9pZ21wLmNgIGFuZCBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AuIFNpbmNlIHRoZXNlIGFyZSB3aXRoaW4gdGhlIGBuZXQvaXB2NGAgZGlyZWN0b3J5LCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhleSByZWxhdGUgdG8gSVB2NCBuZXR3b3JraW5nLiBUaGF0IHR5cGljYWxseSBtZWFucyBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX05FVGAgYXJlIGludm9sdmVkIOKAkyB0aG9zZSBhcmUgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnRzLiBOb3csIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgTWFrZWZpbGVzLiBJJiMzOTtsbCBwcm9iYWJseSBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgbGlzdGVkIGVpdGhlciBpbiBgbmV0L2lwdjQvTWFrZWZpbGVgIG9yIHBvdGVudGlhbGx5IGluIHRoZSB0b3AtbGV2ZWwgYG5ldC9NYWtlZmlsZWAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGNvbmZpcm0gdGhlIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfTkVUYCBkZXBlbmRlbmNpZXMsIGFuZCBtYXliZSBmaW5kIGEgZmV3IG1vcmUgc3BlY2lmaWMgb25lcyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIE1ha2VmaWxlcyByZXZlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lnbXAubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGUtMTMtXHQgICAgIHRjcF9vZmZsb2FkLm8gdGNwX3BsYi5vIGRhdGFncmFtLm8gcmF3Lm8gdWRwLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE0Olx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTUtXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzM5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NCBNYWtlZmlsZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIElQdjQgc3RhY2ssIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGZpcnN0IDI1IGxpbmVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIG92ZXJ2aWV3LiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgc2VjdGlvbiBpcyBwcm9iYWJseSBkZWZpbmluZyBzb21lIGJhc2ljIHZhcmlhYmxlcywgaW5jbHVkZSBwYXRocywgbWF5YmUgc2V0dGluZyB1cCBzb21lIGluaXRpYWwgYnVpbGQgdGFyZ2V0cyBvciBkZXBlbmRlbmNpZXMgZm9yIHRoZSBJUHY0IG1vZHVsZS4gQ291bGQgYmUgaW5pdGlhbCBjb25maWd1cmF0aW9uLCBvciB0aGUgY29yZSBpbmNsdWRlIGRpcmVjdGl2ZXMuIEkmIzM5O2xsIHNjYW4gdGhvc2UgbGluZXMgYW5kIGdldCBhIGJldHRlciBmZWVsIGZvciBpdHMgaW5pdGlhbCBzZXR1cC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IFRDUC9JUCAoSU5FVCkgbGF5ZXIuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxuICAgNzpcdFx0ICAgICBpcF9pbnB1dC5vIGlwX2ZyYWdtZW50Lm8gaXBfZm9yd2FyZC5vIGlwX29wdGlvbnMubyBcXFxuICAgODpcdFx0ICAgICBpcF9vdXRwdXQubyBpcF9zb2NrZ2x1ZS5vIGluZXRfaGFzaHRhYmxlcy5vIFxcXG4gICA5Olx0XHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcbiAgMTA6XHRcdCAgICAgdGNwLm8gdGNwX2lucHV0Lm8gdGNwX291dHB1dC5vIHRjcF90aW1lci5vIHRjcF9pcHY0Lm8gXFxcbiAgMTE6XHRcdCAgICAgdGNwX21pbmlzb2Nrcy5vIHRjcF9jb25nLm8gdGNwX21ldHJpY3MubyB0Y3BfZmFzdG9wZW4ubyBcXFxuICAxMjpcdFx0ICAgICB0Y3BfcmVjb3ZlcnkubyB0Y3BfdWxwLm8gXFxcbiAgMTM6XHRcdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxuICAxNDpcdFx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxuICAxNTpcdFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxuICAxNjpcdFx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxuICAxNzpcdFx0ICAgICBtZXRyaWNzLm8gbmV0bGluay5vIG5leHRob3AubyB1ZHBfdHVubmVsX3N0dWIub1xuICAxODpcdFxuICAxOTpcdG9iai0kKENPTkZJR19ORVRfSVBfVFVOTkVMKSAmIzQzOz0gaXBfdHVubmVsLm9cbiAgMjA6XHRvYmotJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsX25ldF9pcHY0Lm9cbiAgMjE6XHRvYmotJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Mub1xuICAyMjpcdG9iai0kKENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMpICYjNDM7PSBmaWJfcnVsZXMub1xuICAyMzpcdG9iai0kKENPTkZJR19JUF9NUk9VVEUpICYjNDM7PSBpcG1yLm9cbiAgMjQ6XHRvYmotJChDT05GSUdfSVBfTVJPVVRFX0NPTU1PTikgJiM0Mzs9IGlwbXJfYmFzZS5vXG4gIDI1Olx0b2JqLSQoQ09ORklHX05FVF9JUElQKSAmIzQzOz0gaXBpcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDk5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBpbmV0YCBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgY29udHJvbGxpbmcgYGluZXRgLiBUaGUgaGludCBpcyBgQ09ORklHX0lORVRgLCB3aGljaCBzdWdnZXN0cyBpdCYjMzk7cyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBzdGFuZGFyZCBwbGFjZXMgaW4gdGhlIGtlcm5lbCBzb3VyY2UsIHR5cGljYWxseSBgbmV0L0tjb25maWdgIG9yLCBzaW5jZSBpdCYjMzk7cyBpbnRlcm5ldC1yZWxhdGVkLCBgbmV0L2lwdjQvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvciByZWZlcmVuY2UgdG8gYENPTkZJR19JTkVUYCBhbmQgc2VlIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQgYW5kIHdoYXQgaXRzIGRlcGVuZGVuY2llcyBtaWdodCBiZS4gVGltZSB0byBkaXZlIGludG8gdGhvc2UgS2NvbmZpZyBmaWxlcyBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9OTk9Y29uZmlnIE5FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVFxuLS1cbm5ldC9LY29uZmlnLTExMy1cbm5ldC9LY29uZmlnOjExNDpjb25maWcgSU5FVFxubmV0L0tjb25maWctMTE1LVx0Ym9vbCBcJiMzNDtUQ1AvSVAgbmV0d29ya2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM5NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgSVAgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIG11bHRpY2FzdCBzZXR0aW5ncyBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgbmV0L2lwdjQvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgcGxhY2Ugd2hlcmUgeW91JiMzOTtsbCBmaW5kIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIElQdjQgbmV0d29ya2luZywgaW5jbHVkaW5nIGFueXRoaW5nIHNwZWNpZmljIHRvIElHTVAgb3IgdGhlIG11bHRpY2FzdCBmZWF0dXJlcyBpbiBnZW5lcmFsLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGtleXdvcmRzLCBvcHRpb25zLCBvciBkZXBlbmRlbmNpZXMgdGhlcmUuIEkmIzM5O20gZXNwZWNpYWxseSBsb29raW5nIHRvIHNlZSBpZiBgQ09ORklHX0lQX01VTFRJQ0FTVGAgaXMgdXNlZCwgYXMgaXQgb2Z0ZW4gZm9ybXMgdGhlIGJhc2lzIGZvciBlbmFibGluZyB0aGUgY29yZSBtdWx0aWNhc3QgZnVuY3Rpb25hbGl0eS4KClRoZW4sIEkmIzM5O2xsIGRpdmUgYSBiaXQgZGVlcGVyIGludG8gdGhlIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gYG5ldC9pcHY0L2lnbXAuY2AuIGBpZ21wLmNgIGlzIHRoZSBtb3N0IG9idmlvdXMgbG9jYXRpb24gZm9yIElHTVAtc3BlY2lmaWMgY29kZSwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBncm91cCBtZW1iZXJzaGlwcyBhcmUgaGFuZGxlZC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggdGhpcyBmaWxlIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBsaWtlIGAjaWZkZWZgIG9yIGNvbmZpZ3VyYXRpb24gbWFjcm9zIHN0YXJ0aW5nIHdpdGggYENPTkZJR19gLiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBkaWZmZXJlbnQgY29kZSBibG9ja3MgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIGhvdyB0aGVzZSBtdWx0aWNhc3Qgb3B0aW9ucyBhcmUgZW5hYmxlZCwgZGlzYWJsZWQsIGFuZCBjb25maWd1cmVkLiBJJiMzOTttIGhvcGluZyB0byBkaXNjb3ZlciB0aGUgcHJlY2lzZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gY29uZmlndXJhdGlvbiBzZXR0aW5ncyBhbmQgdGhlaXIgaW5mbHVlbmNlIG9uIHRoZSBjb2RlIHRoYXQgaGFuZGxlcyBJR01QIGFuZCByZWxhdGVkIG11bHRpY2FzdCBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lnbXAuYy0xMDEtI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQuaFx1MDAzZVxubmV0L2lwdjQvaWdtcC5jOjEwMjojaWZkZWYgQ09ORklHX0lQX01ST1VURVxubmV0L2lwdjQvaWdtcC5jLTEwMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9tcm91dGUuaFx1MDAzZVxubmV0L2lwdjQvaWdtcC5jLTEwNC0jZW5kaWZcbm5ldC9pcHY0L2lnbXAuYzoxMDU6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5uZXQvaXB2NC9pZ21wLmMtMTA2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfZnMuaFx1MDAzZVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xMDktXG5uZXQvaXB2NC9pZ21wLmM6MTEwOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTExLS8qIFBhcmFtZXRlciBuYW1lcyBhbmQgdmFsdWVzIGFyZSB0YWtlbiBmcm9tIGlnbXAtdjItMDYgZHJhZnQgKi9cbi0tXG5uZXQvaXB2NC9pZ21wLmM9MjIwPXN0YXRpYyB2b2lkIGlwX3NmX2xpc3RfY2xlYXJfYWxsKHN0cnVjdCBpcF9zZl9saXN0ICpwc2YpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTIzMC1cbm5ldC9pcHY0L2lnbXAuYzoyMzE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMzItXG4tLVxubmV0L2lwdjQvaWdtcC5jPTExMjk9aW50IGlnbXBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTExNjktXHRjYXNlIElHTVBfUElNOlxubmV0L2lwdjQvaWdtcC5jOjExNzA6I2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMVxubmV0L2lwdjQvaWdtcC5jLTExNzEtXHRcdHJldHVybiBwaW1fcmN2X3YxKHNrYik7XG4tLVxubmV0L2lwdjQvaWdtcC5jPTEyMTk9c3RhdGljIHZvaWQgaXBfbWNfZmlsdGVyX2RlbChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xMjI3LVxubmV0L2lwdjQvaWdtcC5jOjEyMjg6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xMjI5LS8qXG4tLVxubmV0L2lwdjQvaWdtcC5jPTEzNTg9c3RhdGljIHZvaWQgX19pZ21wX2dyb3VwX2Ryb3BwZWQoc3RydWN0IGlwX21jX2xpc3QgKmltLCBnZnBfdCBnZnApXG4tLVxubmV0L2lwdjQvaWdtcC5jLTEzNjAtXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbS1cdTAwM2VpbnRlcmZhY2U7XG5uZXQvaXB2NC9pZ21wLmM6MTM2MTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTEzNjItXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGluX2Rldi1cdTAwM2VkZXYpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0xMzcwLVxubmV0L2lwdjQvaWdtcC5jOjEzNzE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xMzcyLVx0aWYgKGltLVx1MDAzZW11bHRpYWRkciA9PSBJR01QX0FMTF9IT1NUUylcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MTQwMj1zdGF0aWMgdm9pZCBpZ21wX2dyb3VwX2FkZGVkKHN0cnVjdCBpcF9tY19saXN0ICppbSlcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTQwNC1cdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGltLVx1MDAzZWludGVyZmFjZTtcbm5ldC9pcHY0L2lnbXAuYzoxNDA1OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTQwNi1cdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaW5fZGV2LVx1MDAzZWRldik7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTE0MTMtXG5uZXQvaXB2NC9pZ21wLmM6MTQxNDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTE0MTUtXHRpZiAoaW0tXHUwMDNlbXVsdGlhZGRyID09IElHTVBfQUxMX0hPU1RTKVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xNTcwPXN0YXRpYyB2b2lkIF9fX19pcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcixcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTYxNS1cdHNwaW5fbG9ja19pbml0KFx1MDAyNmltLVx1MDAzZWxvY2spO1xubmV0L2lwdjQvaWdtcC5jOjE2MTY6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xNjE3LVx0dGltZXJfc2V0dXAoXHUwMDI2aW0tXHUwMDNldGltZXIsIGlnbXBfdGltZXJfZXhwaXJlLCAwKTtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTYyNS1cbm5ldC9pcHY0L2lnbXAuYzoxNjI2OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTYyNy1cdGlnbXB2M19kZWxfZGVscmVjKGluX2RldiwgaW0pO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xNzk0PXN0YXRpYyB2b2lkIGlwX21jX3Jlam9pbl9ncm91cHMoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxubmV0L2lwdjQvaWdtcC5jLTE3OTUte1xubmV0L2lwdjQvaWdtcC5jOjE3OTY6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xNzk3LVx0c3RydWN0IGlwX21jX2xpc3QgKmltO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xODc2PXZvaWQgaXBfbWNfcmVtYXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xODgyLVx0Zm9yX2VhY2hfcG1jX3J0bmwoaW5fZGV2LCBwbWMpIHtcbm5ldC9pcHY0L2lnbXAuYzoxODgzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTg4NC1cdFx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBwbWMpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xODkyPXZvaWQgaXBfbWNfZG93bihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE5MDAtXG5uZXQvaXB2NC9pZ21wLmM6MTkwMTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTE5MDItXHRXUklURV9PTkNFKGluX2Rldi1cdTAwM2Vtcl9pZmNfY291bnQsIDApO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0xOTEyLVxubmV0L2lwdjQvaWdtcC5jOjE5MTM6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xOTE0LXN0YXRpYyB2b2lkIGlwX21jX3Jlc2V0KHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldilcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MTkyOD12b2lkIGlwX21jX2luaXRfZGV2KHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldilcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTkzMS1cbm5ldC9pcHY0L2lnbXAuYzoxOTMyOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTkzMy1cdHRpbWVyX3NldHVwKFx1MDAyNmluX2Rldi1cdTAwM2Vtcl9ncV90aW1lciwgaWdtcF9ncV90aW1lcl9leHBpcmUsIDApO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xOTQzPXZvaWQgaXBfbWNfdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xOTUyLVx0Zm9yX2VhY2hfcG1jX3J0bmwoaW5fZGV2LCBwbWMpIHtcbm5ldC9pcHY0L2lnbXAuYzoxOTUzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTk1NC1cdFx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBwbWMpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xOTY0PXZvaWQgaXBfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xOTcxLVx0aXBfbWNfZG93bihpbl9kZXYpO1xubmV0L2lwdjQvaWdtcC5jOjE5NzI6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xOTczLVx0aWdtcHYzX2NsZWFyX2RlbHJlYyhpbl9kZXYpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0yMDIyPXN0YXRpYyBpbnQgaXBfbWNfZGVsMV9zcmMoc3RydWN0IGlwX21jX2xpc3QgKnBtYywgaW50IHNmbW9kZSxcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjA0Mi1cdGlmICghcHNmLVx1MDAzZXNmX2NvdW50W01DQVNUX0lOQ0xVREVdIFx1MDAyNlx1MDAyNiAhcHNmLVx1MDAzZXNmX2NvdW50W01DQVNUX0VYQ0xVREVdKSB7XG5uZXQvaXB2NC9pZ21wLmM6MjA0MzojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIwNDQtXHRcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IHBtYy1cdTAwM2VpbnRlcmZhY2U7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTIwNTQtXHRcdFx0XHRcdCAgIHBtY19kZXJlZmVyZW5jZShwc2YtXHUwMDNlc2ZfbmV4dCwgcG1jKSk7XG5uZXQvaXB2NC9pZ21wLmM6MjA1NTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIwNTYtXHRcdGlmIChwc2YtXHUwMDNlc2Zfb2xkaW4gXHUwMDI2XHUwMDI2XG4tLVxubmV0L2lwdjQvaWdtcC5jLTIwNzUtXG5uZXQvaXB2NC9pZ21wLmM6MjA3NjojaWZuZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMDc3LSNkZWZpbmUgaWdtcF9pZmNfZXZlbnQoeClcdGRvIHsgfSB3aGlsZSAoMClcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MjA4MD1zdGF0aWMgaW50IGlwX21jX2RlbF9zcmMoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgKnBtY2EsIGludCBzZm1vZGUsXG4tLVxubmV0L2lwdjQvaWdtcC5jLTIxMDAtXHRyY3VfcmVhZF91bmxvY2soKTtcbm5ldC9pcHY0L2lnbXAuYzoyMTAxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMjEwMi1cdHNmX21hcmtzdGF0ZShwbWMpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMTIwLVx0ICAgIHBtYy1cdTAwM2VzZmNvdW50W01DQVNUX0lOQ0xVREVdKSB7XG5uZXQvaXB2NC9pZ21wLmM6MjEyMTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIxMjItXHRcdHN0cnVjdCBpcF9zZl9saXN0ICpwc2Y7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTIxMjctXHRcdHBtYy1cdTAwM2VzZm1vZGUgPSBNQ0FTVF9JTkNMVURFO1xubmV0L2lwdjQvaWdtcC5jOjIxMjg6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMTI5LVx0XHRwbWMtXHUwMDNlY3Jjb3VudCA9IGluX2Rldi1cdTAwM2Vtcl9xcnYgPzogUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF9pZ21wX3Fydik7XG4tLVxubmV0L2lwdjQvaWdtcC5jPTIxNDY9c3RhdGljIGludCBpcF9tY19hZGQxX3NyYyhzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jLCBpbnQgc2Ztb2RlLFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMTczLVxubmV0L2lwdjQvaWdtcC5jOjIxNzQ6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMTc1LXN0YXRpYyB2b2lkIHNmX21hcmtzdGF0ZShzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jKVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0yMjYwPXN0YXRpYyBpbnQgaXBfbWNfYWRkX3NyYyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiAqcG1jYSwgaW50IHNmbW9kZSxcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjI4MS1cbm5ldC9pcHY0L2lnbXAuYzoyMjgyOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMjI4My1cdHNmX21hcmtzdGF0ZShwbWMpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMzAxLVx0fSBlbHNlIGlmIChpc2V4Y2x1ZGUgIT0gKHBtYy1cdTAwM2VzZmNvdW50W01DQVNUX0VYQ0xVREVdICE9IDApKSB7XG5uZXQvaXB2NC9pZ21wLmM6MjMwMjojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIzMDMtXHRcdHN0cnVjdCBpcF9zZl9saXN0ICpwc2Y7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTIzMTItXHRcdFx0cG1jLVx1MDAzZXNmbW9kZSA9IE1DQVNUX0lOQ0xVREU7XG5uZXQvaXB2NC9pZ21wLmM6MjMxMzojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIzMTQtXHRcdC8qIGVsc2Ugbm8gZmlsdGVyczsga2VlcCBvbGQgbW9kZSBmb3IgcmVwb3J0cyAqL1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0yOTAwPWludCBpcF9jaGVja19tY19yY3Uoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgbWNfYWRkciwgX19iZTMyIHNyY19hZGRyLCB1OCBwcm90bylcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjk0My1cbm5ldC9pcHY0L2lnbXAuYzoyOTQ0OiNpZiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxubmV0L2lwdjQvaWdtcC5jLTI5NDUtc3RydWN0IGlnbXBfbWNfaXRlcl9zdGF0ZSB7XG4tLVxubmV0L2lwdjQvaWdtcC5jPTMwMzE9c3RhdGljIGludCBpZ21wX21jX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0zMDQyLVxubmV0L2lwdjQvaWdtcC5jOjMwNDM6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0zMDQ0LVx0XHRxdWVyaWVyID0gSUdNUF9WMV9TRUVOKHN0YXRlLVx1MDAzZWluX2RldikgPyBcJiMzNDtWMVwmIzM0OyA6XG4tLVxubmV0L2lwdjQvaWdtcC5jPTMyNzQ9aW50IF9faW5pdCBpZ21wX21jX2luaXQodm9pZClcbm5ldC9pcHY0L2lnbXAuYy0zMjc1LXtcbm5ldC9pcHY0L2lnbXAuYzozMjc2OiNpZiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxubmV0L2lwdjQvaWdtcC5jLTMyNzctXHRpbnQgZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA5NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBJUCBNdWx0aWNhc3QgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbXVsdGljYXN0IHN1cHBvcnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBDT05GSUdfSVBfTVVMVElDQVNUYCBvcHRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb2NhdGUgaXQgd2l0aGluIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCDigJMgaXQmIzM5O3MgdGhlIHVzdWFsIGxvY2F0aW9uIGZvciBJUHY0LXNwZWNpZmljIG5ldHdvcmtpbmcgZmVhdHVyZXMuIEkgZXhwZWN0IHRoaXMgY29uZmlnIG9wdGlvbiB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uYWwgc3dpdGNoIGNvbnRyb2xsaW5nIHRoZSBlbnRpcmUgSVB2NCBtdWx0aWNhc3QgZnVuY3Rpb25hbGl0eS4gRnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgZGVwZW5kZW5jaWVzIGFuZCBzZWUgaG93IGl0IGludGVycGxheXMgd2l0aCBvdGhlciBuZXR3b3JraW5nIGZlYXR1cmVzIGFuZCB0aGUgbXVsdGljYXN0IGNvZGUgaXRzZWxmLiBUaW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfTVVMVElDQVNUXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZy00LSNcbm5ldC9pcHY0L0tjb25maWc6NTpjb25maWcgSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9LY29uZmlnLTYtXHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3RpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJUHY0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gSVB2NCBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZSBmb3IgSVB2NC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIG9mIGxvb2tpbmcgYXQgYG5ldC9pcHY0L0tjb25maWdgIGFyb3VuZCBsaW5lIDUuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgdG9wLWxldmVsIG9wdGlvbnMgcmVsYXRlZCB0byBJUHY0IGFyZSBkZWZpbmVkLCBvciBwZXJoYXBzIHRoZSBpbmNsdXNpb24gb2Ygb3RoZXIgcmVsZXZhbnQgZmlsZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBidWlsZC10aW1lIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBwZXJoYXBzIHNvbWUgZ2VuZXJhbCBtb2R1bGUgc2VsZWN0aW9ucyB0aGF0IHdpbGwgaWxsdW1pbmF0ZSB0aGUgY29kZSYjMzk7cyBiZWhhdmlvci4gSSBhbSBhbnRpY2lwYXRpbmcgdGhlIHRvcC1sZXZlbCBpdGVtcywgc28gSSB3aWxsIGtub3cgd2hldGhlciB0byBkaWcgZGVlcGVyIG9yIHdoZXRoZXIgdG8gbG9vayBhcm91bmQgYXQgYW5vdGhlciBLY29uZmlnIGZpbGUuIEkgY2FuIGdldCBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIElQdjQgc3Vic3lzdGVtIGZyb20gdGhpcyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgSVAgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb25maWcgSVBfTVVMVElDQVNUXG4gICA2Olx0XHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3RpbmdcJiMzNDtcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgVGhpcyBpcyBjb2RlIGZvciBhZGRyZXNzaW5nIHNldmVyYWwgbmV0d29ya2VkIGNvbXB1dGVycyBhdCBvbmNlLFxuICAgOTpcdFx0ICBlbmxhcmdpbmcgeW91ciBrZXJuZWwgYnkgYWJvdXQgMiBLQi4gWW91IG5lZWQgbXVsdGljYXN0aW5nIGlmIHlvdVxuICAxMDpcdFx0ICBpbnRlbmQgdG8gcGFydGljaXBhdGUgaW4gdGhlIE1CT05FLCBhIGhpZ2ggYmFuZHdpZHRoIG5ldHdvcmsgb24gdG9wXG4gIDExOlx0XHQgIG9mIHRoZSBJbnRlcm5ldCB3aGljaCBjYXJyaWVzIGF1ZGlvIGFuZCB2aWRlbyBicm9hZGNhc3RzLiBNb3JlXG4gIDEyOlx0XHQgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBNQk9ORSBpcyBvbiB0aGUgV1dXIGF0XG4gIDEzOlx0XHQgIFx1MDAzY2h0dHBzOi8vd3d3LnNhdmV0ei5jb20vbWJvbmUvXHUwMDNlLiBGb3IgbW9zdCBwZW9wbGUsIGl0JiMzOTtzIHNhZmUgdG8gc2F5IE4uXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUlxuICAxNjpcdFx0Ym9vbCBcJiMzNDtJUDogYWR2YW5jZWQgcm91dGVyXCYjMzQ7XG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIElmIHlvdSBpbnRlbmQgdG8gcnVuIHlvdXIgTGludXggYm94IG1vc3RseSBhcyBhIHJvdXRlciwgaS5lLiBhcyBhXG4gIDE5Olx0XHQgIGNvbXB1dGVyIHRoYXQgZm9yd2FyZHMgYW5kIHJlZGlzdHJpYnV0ZXMgbmV0d29yayBwYWNrZXRzLCBzYXkgWTsgeW91XG4gIDIwOlx0XHQgIHdpbGwgdGhlbiBiZSBwcmVzZW50ZWQgd2l0aCBzZXZlcmFsIG9wdGlvbnMgdGhhdCBhbGxvdyBtb3JlIHByZWNpc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MjgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmV2aWV3aW5nIHRoZSBSZWNlbnQgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBmdW5jdGlvbiBtb2RpZmljYXRpb25zLiBGaXJzdCwgYGlwX21jX21zZmdldGAgaW4gYG5ldC9pcHY0L2lnbXAuY2AgaGFzIGJlZW4gcmV3b3JrZWQuIEl0JiMzOTtzIG5vdyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gYW5kIGl0cyBzaWduYXR1cmUgaGFzIGJlZW4gdXBkYXRlZCB0byBhY2NlcHQgYSBgc29ja29wdF90ICpvcHRgLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGF0IGl0IGRpcmVjdGx5IHVzZXMgYHNvY2tvcHRfZXhwYW5kX291dGAgd2l0aCBgbXNmX3NpemVgIGFuZCBgY29weV90b19pdGVyYCwgd2hpY2ggaXMgaG93IGl0JiMzOTtzIGdldHRpbmcgYW5kIGhhbmRsaW5nIHRoZSBkYXRhLgoKTmV4dCwgaW4gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLCBgZG9faXBfZ2V0c29ja29wdGAgaGFzIHVuZGVyZ29uZSBhIGNoYW5nZSBpbiBpdHMgSVBfTVNGSUxURVIgaGFuZGxpbmcuIE5vdywgaW5zdGVhZCBvZiBkb2luZyBldmVyeXRoaW5nIGlubGluZSwgaXQgY2FsbHMgYHNvY2twdHJfdG9fc29ja29wdGAgd2hpY2ggdGhlbiBjYWxscyBgaXBfbWNfbXNmZ2V0YC4KCmBzb2NrcHRyX3RvX3NvY2tvcHRgIGluIGBuZXQvc29ja2V0LmNgIGhhcyBtb3ZlZCBmcm9tIGJlaW5nIGEgc3RhdGljIGZ1bmN0aW9uIHRvIGFuIGV4dGVybiBmdW5jdGlvbi4KCkZpbmFsbHksIHdlIGhhdmUgYHNvY2tvcHRfZXhwYW5kX291dGAgaW4gYGluY2x1ZGUvbGludXgvbmV0LmhgLiBUaGlzIGlzIGEgc3RhdGljIGlubGluZSBoZWxwZXIgZnVuY3Rpb24sIGNydWNpYWwgYmVjYXVzZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQgYnkgYGlwX21jX21zZmdldGAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhpcyB1c2FnZS4gSXQmIzM5O3MgdGltZSB0byBkbyBhIHRob3JvdWdoIGNoZWNrOyBJIG5lZWQgdG8gc2VlIGlmIGFueSBvdGhlciBjb2RlIHBhdGhzIGFyZSBjYWxsaW5nIGBpcF9tY19tc2ZnZXRgIG9yIGBzb2Nrb3B0X2V4cGFuZF9vdXRgLiBHb3R0YSBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgaW50cm9kdWNlZCBhbnkgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgb3IgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2Nrb3B0X2V4cGFuZF9vdXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXQuaD01Nj1zdGF0aWMgaW5saW5lIGludCBzb2Nrb3B0X2luaXRfdXNlcihzb2Nrb3B0X3QgKm9wdCwgY2hhciBfX3VzZXIgKm9wdHZhbCxcbi0tXG5pbmNsdWRlL2xpbnV4L25ldC5oLTgxLSAqL1xuaW5jbHVkZS9saW51eC9uZXQuaDo4MjpzdGF0aWMgaW5saW5lIGludCBzb2Nrb3B0X2V4cGFuZF9vdXQoc29ja29wdF90ICpvcHQsIHNpemVfdCBzaXplKVxuaW5jbHVkZS9saW51eC9uZXQuaC04My17XG4tLVxubmV0L2lwdjQvaWdtcC5jPTI3MTM9aW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBzb2Nrb3B0X3QgKm9wdClcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjc2MS1cdCAqL1xubmV0L2lwdjQvaWdtcC5jOjI3NjI6XHRlcnIgPSBzb2Nrb3B0X2V4cGFuZF9vdXQob3B0LCBtc2Zfc2l6ZSk7XG5uZXQvaXB2NC9pZ21wLmMtMjc2My1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzcwCgkJCQkJCQlvdXRwdXQ6IDE1NAoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBDb25maXJtYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY2FsbCBjaGFpbiBmb3IgYGlwX21jX21zZmdldGAgb25lIG1vcmUgdGltZS4gTG9va3MgbGlrZSBpdCYjMzk7cyBleGNsdXNpdmVseSBjYWxsZWQgd2l0aGluIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCwgc3BlY2lmaWNhbGx5IGJ5IGBkb19pcF9nZXRzb2Nrb3B0YC4gRXhjZWxsZW50LgoKTm93LCBsZXQmIzM5O3MgYWxpZ24gdGhpcyB3aXRoIHRoZSBGb2N1c1N5bWJvbHMgbWV0aG9kb2xvZ3kuIFRoaXMgbWVhbnMgZm9jdXNpbmcgb24gbm9uLXViaXF1aXRvdXMga2VybmVsIGZ1bmN0aW9ucyB0byBuYXJyb3cgZG93biBvdXIgZnV6emluZyBzY29wZS4gV2Ugd2FudCB0byBhdm9pZCBnZW5lcmljIGZ1bmN0aW9ucyBsaWtlIGFsbG9jYXRvcnMgYW5kIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBhbmQgaW5zdGVhZCB0YXJnZXQgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnkgcG9pbnRzLiBgaXBfbWNfbXNmZ2V0YCwgYGRvX2lwX2dldHNvY2tvcHRgLCBhbmQgYHNvY2twdHJfdG9fc29ja29wdGAgYWxsIGZpdCB0aGF0IGJpbGwgcGVyZmVjdGx5LiBSZW1lbWJlciB0aGF0IGBzb2Nrb3B0X2V4cGFuZF9vdXRgIGlzIGlubGluZWQsIHNvIGZ1enppbmcgaXRzIGNhbGxlciwgYGlwX21jX21zZmdldGAsIGlzIHRoZSB3YXkgdG8gZ28uCgpOZXh0LCB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBXZSBkZWZpbml0ZWx5IG5lZWQgYElORVRgIHNpbmNlIHRoaXMgdG91Y2hlcyBgbmV0L2lwdjQvYCwgc3BlY2lmaWNhbGx5IGBpcF9zb2NrZ2x1ZS5jYCBhbmQgYGlnbXAuY2AuIEFuZCBgSVBfTVVMVElDQVNUYCBpcyBzcG90LW9uLCBhcyBtdWx0aWNhc3Qgc29ja2V0IG9wdGlvbnMgbGlrZSBgSVBfTVNGSUxURVJgIGFuZCBJR01QIGFyZSBkaXJlY3RseSByZWxldmFudC4gTm8gc3VycHJpc2VzIHRoZXJlLgoKUXVpY2sgc2FuaXR5IGNoZWNrIG9uIHRob3NlIGNvbmZpZ3M6IGBJTkVUYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgYSBsb3Qgb2Ygd2hhdCB3ZSYjMzk7cmUgbG9va2luZyBhdCwgYW5kIGBJUF9NVUxUSUNBU1RgIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGUgdGFyZ2V0IGZ1bmN0aW9uYWxpdHkuIEFsbCBnb29kLgoKQWxyaWdodCwgdGltZSB0byBjb25zdHJ1Y3QgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycy4gYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgdHJ1ZWAuIFRoZSBgUmVhc29uaW5nYCBzaG91bGQgYmUgY2xlYXI6IFRoaXMgcGF0Y2ggbW9kaWZpZXMgSVBfTVNGSUxURVIgaGFuZGxpbmcgd2l0aGluIElQdjQmIzM5O3MgYGRvX2lwX2dldHNvY2tvcHRgLCBjaGFuZ2VzIGBpcF9tY19tc2ZnZXRgIHRvIHVzZSBgc29ja29wdF90YCBhbmQgYWRkcyBpdGVyYXRvciBsb2dpYyB3aXRoIGBzb2Nrb3B0X2V4cGFuZF9vdXRgLCBhbGwgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHNvY2tldCBjYWxscy4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBgWyYjMzQ7aXBfbWNfbXNmZ2V0JiMzNDssICYjMzQ7ZG9faXBfZ2V0c29ja29wdCYjMzQ7LCAmIzM0O3NvY2twdHJfdG9fc29ja29wdCYjMzQ7XWAuIEFuZCBmaW5hbGx5LCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBgWyYjMzQ7SU5FVCYjMzQ7LCAmIzM0O0lQX01VTFRJQ0FTVCYjMzQ7XWAuCgpFdmVyeXRoaW5nIGlzIHZlcmlmaWVkLCB0aGUgY2hlY2tzIGFyZSBwYXNzZWQsIGFuZCB0aGUgcmVhc29uaW5nIGlzIHNvdW5kLiBOb3cgaXQmIzM5O3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQX01VTFRJQ0FTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX21jX21zZmdldCYjMzQ7LAogICAgJiMzNDtkb19pcF9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3NvY2twdHJfdG9fc29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIElQX01TRklMVEVSIHNvY2tldCBvcHRpb24gaW4gSVB2NCBnZXRzb2Nrb3B0IGJ5IGNvbnZlcnRpbmcgaXBfbWNfbXNmZ2V0IHRvIHVzZSB0aGUgc29ja29wdF90IGFic3RyYWN0aW9uLCBpbnRyb2R1Y2luZyB0aGUgc29ja29wdF9leHBhbmRfb3V0IGhlbHBlciB0byBkeW5hbWljYWxseSByZXNpemUgdGhlIG91dHB1dCBidWZmZXIgaXRlcmF0b3IsIGFuZCBleHBvcnRpbmcgc29ja3B0cl90b19zb2Nrb3B0LiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBjYW4gYmUgZGlyZWN0bHkgZXhlcmNpc2VkIGZyb20gdXNlcnNwYWNlIHZpYSBnZXRzb2Nrb3B0KCkgY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBfTVVMVElDQVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbWNfbXNmZ2V0JiMzNDssCiAgICAmIzM0O2RvX2lwX2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7c29ja3B0cl90b19zb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgSVBfTVNGSUxURVIgc29ja2V0IG9wdGlvbiBpbiBJUHY0IGdldHNvY2tvcHQgYnkgY29udmVydGluZyBpcF9tY19tc2ZnZXQgdG8gdXNlIHRoZSBzb2Nrb3B0X3QgYWJzdHJhY3Rpb24sIGludHJvZHVjaW5nIHRoZSBzb2Nrb3B0X2V4cGFuZF9vdXQgaGVscGVyIHRvIGR5bmFtaWNhbGx5IHJlc2l6ZSB0aGUgb3V0cHV0IGJ1ZmZlciBpdGVyYXRvciwgYW5kIGV4cG9ydGluZyBzb2NrcHRyX3RvX3NvY2tvcHQuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGNhbiBiZSBkaXJlY3RseSBleGVyY2lzZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGdldHNvY2tvcHQoKSBjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgSVBfTVNGSUxURVIgZ2V0c29ja29wdCBoYW5kbGluZyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgLyBpb3ZfaXRlciBpbmZyYXN0cnVjdHVyZSB2aWEgYHNvY2twdHJfdG9fc29ja29wdCgpYCwgYHNvY2tvcHRfZXhwYW5kX291dCgpYCwgYW5kIGBjb3B5X3RvX2l0ZXIoKWAuIFxuXG4tIEluIGBkb19pcF9nZXRzb2Nrb3B0KClgLCBgbXNmYCBpcyBwb3B1bGF0ZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBjb3B5X2Zyb21fc29ja3B0cigpYCBmb3IgYElQX01TRklMVEVSX1NJWkUoMClgICgxNiBieXRlcyksIGNvdmVyaW5nIGFsbCBzY2FsYXIgZmllbGRzIChgaW1zZl9tdWx0aWFkZHJgLCBgaW1zZl9pbnRlcmZhY2VgLCBgaW1zZl9mbW9kZWAsIGBpbXNmX251bXNyY2ApLCB3aXRoIGBpbXNmX2Ztb2RlYCBhbmQgYGltc2ZfbnVtc3JjYCBzdWJzZXF1ZW50bHkgdXBkYXRlZCBiZWZvcmUgYGNvcHlfdG9faXRlcigpYCBjb3BpZXMgZXhhY3RseSAxNiBieXRlcy4gVGhlcmUgaXMgbm8gc3RydWN0IHBhZGRpbmcgaW4gYHN0cnVjdCBpcF9tc2ZpbHRlcmAuXG4tIFRoZSBtdWx0aWNhc3Qgc291cmNlIGZpbHRlciBhZGRyZXNzIGFycmF5IGBwc2wtXHUwMDNlc2xfYWRkcmAgaXMgY29waWVkIHVwIHRvIGBjb3B5Y291bnQgXHUwMDNjPSBwc2wtXHUwMDNlc2xfY291bnRgIGVsZW1lbnRzLCB3aGljaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEuXG4tIGBzb2Nrb3B0X2V4cGFuZF9vdXQoKWAgYW5kIGBzb2NrcHRyX3RvX3NvY2tvcHQoKWAgb25seSBhZGp1c3QgaXRlcmF0b3IgZGVzY3JpcHRvcnMgZm9yIHVzZXIgbWVtb3J5IGJvdW5kYXJpZXMgYW5kIGRvIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBQb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyBzdWNoIGFzIG91dC1vZi1ib3VuZHMgdXNlciBidWZmZXIgYWNjZXNzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOKSBhbmQgY29weS10by11c2VyIGZhdWx0IGhhbmRsaW5nLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUyNTI1ZmNkNzY5YWRjYmY0OTYyNTdlZDY0OGUzYmNiMzYyMzE1MDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAxMDowNzoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWdtcC5oIGIvaW5jbHVkZS9saW51eC9pZ21wLmgKaW5kZXggYTBjZjAzOTg1MTlmZC4uZTA3NTYxMTM0NGVmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZ21wLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pZ21wLmgKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdGltZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc29ja3B0ci5oJmd0OwogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvaWdtcC5oJmd0OwpAQCAtMjczLDcgJiM0MzsyNzQsNyBAQCBleHRlcm4gaW50IGlwX21jX3NvdXJjZShpbnQgYWRkLCBpbnQgb21vZGUsIHN0cnVjdCBzb2NrICpzaywKIAkJc3RydWN0IGlwX21yZXFfc291cmNlICptcmVxcywgaW50IGlmaW5kZXgpOwogZXh0ZXJuIGludCBpcF9tY19tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLGludCBpZmluZGV4KTsKIGV4dGVybiBpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsCi0JCQlzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKTsKJiM0MzsJCQlzb2Nrb3B0X3QgKm9wdCk7CiBleHRlcm4gaW50IGlwX21jX2dzZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBncm91cF9maWx0ZXIgKmdzZiwKIAkJCXNvY2twdHJfdCBvcHR2YWwsIHNpemVfdCBvZmZzZXQpOwogZXh0ZXJuIGludCBpcF9tY19zZl9hbGxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIF9fYmUzMiBsb2NhbCwgX19iZTMyIHJtdCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0LmggYi9pbmNsdWRlL2xpbnV4L25ldC5oCmluZGV4IDQ3MDEwMGFlNzEwNzcuLmRlMGVkMzYyYjM3NzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXQuaApAQCAtNzAsNiAmIzQzOzcwLDMxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfaW5pdF91c2VyKHNvY2tvcHRfdCAqb3B0LCBjaGFyIF9fdXNlciAqb3B0dmFsLAogCXJldHVybiAwOwogfQogCiYjNDM7LyoKJiM0MzsgKiBHcm93IG9wdHZhbCB0byBAc2l6ZSwgZm9yIHRoZSBvcHRpb25zIHdob3NlIHJlcGx5IGlzIHNpemVkIGJ5IGEgY291bnQgdGhlCiYjNDM7ICogY2FsbGVyIGxlZnQgaW4gb3B0dmFsIHJhdGhlciB0aGFuIGJ5IG9wdGxlbi4gVGhvc2Ugd3JpdGUgcGFzdCBvcHRsZW4gdG9kYXkKJiM0MzsgKiBhbmQgdXNlcnNwYWNlIHJlbGllcyBvbiBpdC4KJiM0MzsgKgomIzQzOyAqIENhbGwgaXQgYmVmb3JlIHdyaXRpbmcgdGhyb3VnaCBvcHQtJmd0O2l0ZXJfb3V0OiBpdCByZS1hbmNob3JzIHRoZSBpdGVyYXRvciBhdAomIzQzOyAqIHRoZSBoZWFkIG9mIG9wdHZhbC4gT25seSBhIHVzZXIgYnVmZmVyIGNhbiBiZSBsb25nZXIgdGhhbiB0aGUgb3B0bGVuIHRoZQomIzQzOyAqIGNhbGxlciBkZWNsYXJlZCwgc28gYSBrZXJuZWwtYmFja2VkIG9wdHZhbCBpcyByZWZ1c2VkIHdpdGggLUVJTlZBTC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBzb2Nrb3B0X2V4cGFuZF9vdXQoc29ja29wdF90ICpvcHQsIHNpemVfdCBzaXplKQomIzQzO3sKJiM0MzsJaWYgKHNpemUgJmx0Oz0gaW92X2l0ZXJfY291bnQoJmFtcDtvcHQtJmd0O2l0ZXJfb3V0KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFpdGVyX2lzX3VidWYoJmFtcDtvcHQtJmd0O2l0ZXJfb3V0KSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaW92X2l0ZXJfdWJ1ZigmYW1wO29wdC0mZ3Q7aXRlcl9vdXQsIElURVJfREVTVCwgb3B0LSZndDtpdGVyX291dC51YnVmLCBzaXplKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCBzb2NrcHRyX3RvX3NvY2tvcHQoc29ja29wdF90ICpvcHQsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4sCiYjNDM7CQkgICAgICAgc3RydWN0IGt2ZWMgKmt2ZWMpOwomIzQzOwogc3RydWN0IHBvbGxfdGFibGVfc3RydWN0Owogc3RydWN0IHBpcGVfaW5vZGVfaW5mbzsKIHN0cnVjdCBpbm9kZTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lnbXAuYyBiL25ldC9pcHY0L2lnbXAuYwppbmRleCBkNTYzNTVhY2E3OTc3Li4xNDRmY2ExNThhZGNiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pZ21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaWdtcC5jCkBAIC0yNzA5LDggJiM0MzsyNzA5LDggQEAgaW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIGludCBpZmluZGV4KQogCQllcnIgPSBpcF9tY19sZWF2ZV9ncm91cChzaywgJmFtcDtpbXIpOwogCXJldHVybiBlcnI7CiB9Ci1pbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsCi0JCSBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKQomIzQzOwomIzQzO2ludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgc29ja29wdF90ICpvcHQpCiB7CiAJaW50IGVyciwgbGVuLCBjb3VudCwgY29weWNvdW50LCBtc2Zfc2l6ZTsKIAlzdHJ1Y3QgaXBfbXJlcW4JaW1yOwpAQCAtMjc1NSwxNCAmIzQzOzI3NTUsMTkgQEAgaW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLAogCWxlbiA9IGZsZXhfYXJyYXlfc2l6ZShwc2wsIHNsX2FkZHIsIGNvcHljb3VudCk7CiAJbXNmLSZndDtpbXNmX251bXNyYyA9IGNvdW50OwogCW1zZl9zaXplID0gSVBfTVNGSUxURVJfU0laRShjb3B5Y291bnQpOwotCWlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCAmYW1wO21zZl9zaXplLCBzaXplb2YoaW50KSkgfHwKLQkgICAgY29weV90b19zb2NrcHRyKG9wdHZhbCwgbXNmLCBJUF9NU0ZJTFRFUl9TSVpFKDApKSkgewomIzQzOwomIzQzOwkvKiBUaGUgc291cmNlIGxpc3QgaXMgc2l6ZWQgYnkgdGhlIGltc2ZfbnVtc3JjIHRoZSBjYWxsZXIgbGVmdCBpbgomIzQzOwkgKiBvcHR2YWwsIG5vdCBieSBvcHRsZW4sIHdoaWNoIG9ubHkgaGFzIHRvIGNvdmVyIHRoZSBmaXhlZCBwYXJ0LgomIzQzOwkgKi8KJiM0MzsJZXJyID0gc29ja29wdF9leHBhbmRfb3V0KG9wdCwgbXNmX3NpemUpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJb3B0LSZndDtvcHRsZW4gPSBtc2Zfc2l6ZTsKJiM0MzsJaWYgKGNvcHlfdG9faXRlcihtc2YsIElQX01TRklMVEVSX1NJWkUoMCksICZhbXA7b3B0LSZndDtpdGVyX291dCkgIT0KJiM0MzsJICAgIElQX01TRklMVEVSX1NJWkUoMCkpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KLQlpZiAobGVuICZhbXA7JmFtcDsKLQkgICAgY29weV90b19zb2NrcHRyX29mZnNldChvcHR2YWwsCi0JCQkJICAgb2Zmc2V0b2Yoc3RydWN0IGlwX21zZmlsdGVyLCBpbXNmX3NsaXN0X2ZsZXgpLAotCQkJCSAgIHBzbC0mZ3Q7c2xfYWRkciwgbGVuKSkKJiM0MzsJaWYgKGxlbiAmYW1wOyZhbXA7IGNvcHlfdG9faXRlcihwc2wtJmd0O3NsX2FkZHIsIGxlbiwgJmFtcDtvcHQtJmd0O2l0ZXJfb3V0KSAhPSBsZW4pCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogZG9uZToKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCmluZGV4IGE1NWVmMzI3ZWM5MzIuLmM1OGU1NjVmMmE1YWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwpAQCAtMTcwNiw2ICYjNDM7MTcwNiw4IEBAIGludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAljYXNlIElQX01TRklMVEVSOgogCXsKIAkJc3RydWN0IGlwX21zZmlsdGVyIG1zZjsKJiM0MzsJCXN0cnVjdCBrdmVjIGt2ZWM7CiYjNDM7CQlzb2Nrb3B0X3Qgb3B0OwogCiAJCWlmIChsZW4gJmx0OyBJUF9NU0ZJTFRFUl9TSVpFKDApKSB7CiAJCQllcnIgPSAtRUlOVkFMOwpAQCAtMTcxNSw3ICYjNDM7MTcxNywxMyBAQCBpbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCQllcnIgPSAtRUZBVUxUOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCAmYW1wO21zZiwgb3B0dmFsLCBvcHRsZW4pOwomIzQzOwkJZXJyID0gc29ja3B0cl90b19zb2Nrb3B0KCZhbXA7b3B0LCBvcHR2YWwsIG9wdGxlbiwgJmFtcDtrdmVjKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQllcnIgPSBpcF9tY19tc2ZnZXQoc2ssICZhbXA7bXNmLCAmYW1wO29wdCk7CiYjNDM7CQlpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgJmFtcDtvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpCiYjNDM7CQkJZXJyID0gLUVGQVVMVDsKIAkJZ290byBvdXQ7CiAJfQogCWNhc2UgTUNBU1RfTVNGSUxURVI6CmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggYzA1ZDg2ZTYzYWJmNy4uMjlhMGY3ZjhlMmNhYiAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zb2NrZXQuYwpAQCAtMjQzNyw4ICYjNDM7MjQzNyw4IEBAIElORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoYm9vbCB0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0KGludCBsZXZlbCwKICAqIEl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IGJvdGggaW92IHBvaW50cyB0byB0aGUgc2FtZSBkYXRhLCBidXQsCiAgKiAuaXRlcl9pbiBpcyByZWFkLW9ubHkgYW5kIC5pdGVyX291dCBpcyB3cml0ZS1vbmx5IGJ5IHRoZSBwcm90b2NvbCBjYWxsYmFja3MKICAqLwotc3RhdGljIGludCBzb2NrcHRyX3RvX3NvY2tvcHQoc29ja29wdF90ICpvcHQsIHNvY2twdHJfdCBvcHR2YWwsCi0JCQkgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBzdHJ1Y3Qga3ZlYyAqa3ZlYykKJiM0MztpbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLAomIzQzOwkJICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIHN0cnVjdCBrdmVjICprdmVjKQogewogCWludCBrb3B0bGVuOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDEzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFdlIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoZSBzdGFuZGFyZCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBvciBvdGhlciBzYW5pdGl6ZXJzIHdpbGwgYmUgZW5vdWdoLCBvciBpZiB0aGlzIHJlcXVpcmVzIHRoZSBtb3JlIGFnZ3Jlc3NpdmUgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKS4gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLgoKRmlyc3QsIGxldCBtZSBnZXQgYSBncmFzcCBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgcGF0Y2ggaXMgYmVpbmcgYXBwbGllZC4gV2hhdCYjMzk7cyBpdCB0cnlpbmcgdG8gYWNoaWV2ZT8gV2hhdCYjMzk7cyB0aGUgYXJlYSBvZiB0aGUga2VybmVsIGl0JiMzOTtzIG1vZGlmeWluZz8KClJpZ2h0LCB0aGUgZmlsZXMgdG91Y2hlZCBhcmU6IGBpbmNsdWRlL2xpbnV4L2lnbXAuaGAsIGBpbmNsdWRlL2xpbnV4L25ldC5oYCwgYG5ldC9pcHY0L2lnbXAuY2AsIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCwgYW5kIGBuZXQvc29ja2V0LmNgLiBUaGlzIHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gSUdNUCAoSW50ZXJuZXQgR3JvdXAgTWFuYWdlbWVudCBQcm90b2NvbCkgYW5kIGdlbmVyYWwgbmV0d29ya2luZyBzb2NrZXRzLCBwcm9iYWJseSBJUHY0LiBUaGF0IGhlbHBzIG5hcnJvdyB0aGUgc2NvcGUuCgpOb3csIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgKG9yIGV2ZW4ganVzdCBgcmVhZC1maWxlYCBhbmQgYSBnb29kIHNlYXJjaCkgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoZXNlIGZpbGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvZiBtZW1vcnkgYWxsb2NhdGlvbiwgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGFuZCBkYXRhIGZsb3cgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBhcmVhcyB3aGVyZSBhIHZhbHVlIG1pZ2h0IGJlIHJlYWQgYmVmb3JlIGl0JiMzOTtzIGJlZW4gcHJvcGVybHkgc2V0LiBJ4oCZbGwgbG9vayBjYXJlZnVsbHkgYXQgYW55IG5ldyB2YXJpYWJsZXMgb3IgbW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBvbmVzLiBUaGF04oCZcyB3aGVyZSB0aGUgcmlza3MgdHlwaWNhbGx5IGhpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzAwOlx0XHRcdFx0MCwgTlVMTCwgMCk7XG4yNzAxOlx0XHR9XG4yNzAyOlx0XHRyY3VfYXNzaWduX3BvaW50ZXIocG1jLVx1MDAzZXNmbGlzdCwgbmV3cHNsKTtcbjI3MDM6XHRcdGlmIChwc2wpXG4yNzA0Olx0XHRcdGtmcmVlX3JjdShwc2wsIHJjdSk7XG4yNzA1Olx0XHRwbWMtXHUwMDNlc2Ztb2RlID0gbXNmLVx1MDAzZWltc2ZfZm1vZGU7XG4yNzA2Olx0XHRlcnIgPSAwO1xuMjcwNzpcdGRvbmU6XG4yNzA4Olx0XHRpZiAobGVhdmVncm91cClcbjI3MDk6XHRcdFx0ZXJyID0gaXBfbWNfbGVhdmVfZ3JvdXAoc2ssIFx1MDAyNmltcik7XG4yNzEwOlx0XHRyZXR1cm4gZXJyO1xuMjcxMTpcdH1cbjI3MTI6XHRcbjI3MTM6XHRpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIHNvY2tvcHRfdCAqb3B0KVxuMjcxNDpcdHtcbjI3MTU6XHRcdGludCBlcnIsIGxlbiwgY291bnQsIGNvcHljb3VudCwgbXNmX3NpemU7XG4yNzE2Olx0XHRzdHJ1Y3QgaXBfbXJlcW5cdGltcjtcbjI3MTc6XHRcdF9fYmUzMiBhZGRyID0gbXNmLVx1MDAzZWltc2ZfbXVsdGlhZGRyO1xuMjcxODpcdFx0c3RydWN0IGlwX21jX3NvY2tsaXN0ICpwbWM7XG4yNzE5Olx0XHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7XG4yNzIwOlx0XHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XG4yNzIxOlx0XHRzdHJ1Y3QgaXBfc2Zfc29ja2xpc3QgKnBzbDtcbjI3MjI6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbjI3MjM6XHRcbjI3MjQ6XHRcdEFTU0VSVF9SVE5MKCk7XG4yNzI1Olx0XG4yNzI2Olx0XHRpZiAoIWlwdjRfaXNfbXVsdGljYXN0KGFkZHIpKVxuMjcyNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI3Mjg6XHRcbjI3Mjk6XHRcdGltci5pbXJfbXVsdGlhZGRyLnNfYWRkciA9IG1zZi1cdTAwM2VpbXNmX211bHRpYWRkcjtcbjI3MzA6XHRcdGltci5pbXJfYWRkcmVzcy5zX2FkZHIgPSBtc2YtXHUwMDNlaW1zZl9pbnRlcmZhY2U7XG4yNzMxOlx0XHRpbXIuaW1yX2lmaW5kZXggPSAwO1xuMjczMjpcdFx0aW5fZGV2ID0gaXBfbWNfZmluZF9kZXYobmV0LCBcdTAwMjZpbXIpO1xuMjczMzpcdFxuMjczNDpcdFx0aWYgKCFpbl9kZXYpIHtcbjI3MzU6XHRcdFx0ZXJyID0gLUVOT0RFVjtcbjI3MzY6XHRcdFx0Z290byBkb25lO1xuMjczNzpcdFx0fVxuMjczODpcdFx0ZXJyID0gLUVBRERSTk9UQVZBSUw7XG4yNzM5Olx0XG4yNzQwOlx0XHRmb3JfZWFjaF9wbWNfcnRubChpbmV0LCBwbWMpIHtcbjI3NDE6XHRcdFx0aWYgKHBtYy1cdTAwM2VtdWx0aS5pbXJfbXVsdGlhZGRyLnNfYWRkciA9PSBtc2YtXHUwMDNlaW1zZl9tdWx0aWFkZHIgXHUwMDI2XHUwMDI2XG4yNzQyOlx0XHRcdCAgICBwbWMtXHUwMDNlbXVsdGkuaW1yX2lmaW5kZXggPT0gaW1yLmltcl9pZmluZGV4KVxuMjc0MzpcdFx0XHRcdGJyZWFrO1xuMjc0NDpcdFx0fVxuMjc0NTpcdFx0aWYgKCFwbWMpXHRcdC8qIG11c3QgaGF2ZSBhIHByaW9yIGpvaW4gKi9cbjI3NDY6XHRcdFx0Z290byBkb25lO1xuMjc0NzpcdFx0bXNmLVx1MDAzZWltc2ZfZm1vZGUgPSBwbWMtXHUwMDNlc2Ztb2RlO1xuMjc0ODpcdFx0cHNsID0gcnRubF9kZXJlZmVyZW5jZShwbWMtXHUwMDNlc2ZsaXN0KTtcbjI3NDk6XHRcdGlmICghcHNsKSB7XG4yNzUwOlx0XHRcdGNvdW50ID0gMDtcbjI3NTE6XHRcdH0gZWxzZSB7XG4yNzUyOlx0XHRcdGNvdW50ID0gcHNsLVx1MDAzZXNsX2NvdW50O1xuMjc1MzpcdFx0fVxuMjc1NDpcdFx0Y29weWNvdW50ID0gY291bnQgXHUwMDNjIG1zZi1cdTAwM2VpbXNmX251bXNyYyA/IGNvdW50IDogbXNmLVx1MDAzZWltc2ZfbnVtc3JjO1xuMjc1NTpcdFx0bGVuID0gZmxleF9hcnJheV9zaXplKHBzbCwgc2xfYWRkciwgY29weWNvdW50KTtcbjI3NTY6XHRcdG1zZi1cdTAwM2VpbXNmX251bXNyYyA9IGNvdW50O1xuMjc1NzpcdFx0bXNmX3NpemUgPSBJUF9NU0ZJTFRFUl9TSVpFKGNvcHljb3VudCk7XG4yNzU4Olx0XG4yNzU5Olx0XHQvKiBUaGUgc291cmNlIGxpc3QgaXMgc2l6ZWQgYnkgdGhlIGltc2ZfbnVtc3JjIHRoZSBjYWxsZXIgbGVmdCBpblxuMjc2MDpcdFx0ICogb3B0dmFsLCBub3QgYnkgb3B0bGVuLCB3aGljaCBvbmx5IGhhcyB0byBjb3ZlciB0aGUgZml4ZWQgcGFydC5cbjI3NjE6XHRcdCAqL1xuMjc2MjpcdFx0ZXJyID0gc29ja29wdF9leHBhbmRfb3V0KG9wdCwgbXNmX3NpemUpO1xuMjc2MzpcdFx0aWYgKGVycilcbjI3NjQ6XHRcdFx0cmV0dXJuIGVycjtcbjI3NjU6XHRcbjI3NjY6XHRcdG9wdC1cdTAwM2VvcHRsZW4gPSBtc2Zfc2l6ZTtcbjI3Njc6XHRcdGlmIChjb3B5X3RvX2l0ZXIobXNmLCBJUF9NU0ZJTFRFUl9TSVpFKDApLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9XG4yNzY4Olx0XHQgICAgSVBfTVNGSUxURVJfU0laRSgwKSlcbjI3Njk6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4yNzcwOlx0XHRpZiAobGVuIFx1MDAyNlx1MDAyNiBjb3B5X3RvX2l0ZXIocHNsLVx1MDAzZXNsX2FkZHIsIGxlbiwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXG4yNzcxOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjc3MjpcdFx0cmV0dXJuIDA7XG4yNzczOlx0ZG9uZTpcbjI3NzQ6XHRcdHJldHVybiBlcnI7XG4yNzc1Olx0fVxuMjc3NjpcdFxuMjc3NzpcdGludCBpcF9tY19nc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZ3JvdXBfZmlsdGVyICpnc2YsXG4yNzc4Olx0XHRcdCBzb2NrcHRyX3Qgb3B0dmFsLCBzaXplX3Qgc3Nfb2Zmc2V0KVxuMjc3OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgyNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGlwX3NvY2tnbHVlLmNgKioKCk9rYXksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byBJUHY0IHNvY2tldHMsIGFuZCBJIGhhdmUgYSBmZWVsaW5nIHRoZSBpc3N1ZSBpcyBnb2luZyB0byBiZSBpbiBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AuIE15IGluc3RpbmN0cyBhcmUgdGVsbGluZyBtZSB0byB6ZXJvIGluIGFyb3VuZCBsaW5lIDE3MDAuIEkmIzM5O20gbm90IHN1cmUgKmV4YWN0bHkqIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciB5ZXQsIGJ1dCB0aGF0IGZlZWxzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgaW50cmljYWNpZXMgb2YgaG93IHRoZXNlIHNvY2tldHMgYXJlIGJvdW5kIGFuZCBoYW5kbGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUgYW5kIHdoYXQgY29udGV4dCB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGF0IGxpbmUgcHJvdmlkZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSBmbG93IGFuZCBob3BlZnVsbHkgbmFycm93IGRvd24gdGhlIHBvdGVudGlhbCBjYXVzZSBvZiB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZy4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzAwOlx0XG4xNzAxOlx0XHRpZiAobmVlZHNfcnRubClcbjE3MDI6XHRcdFx0cnRubF9sb2NrKCk7XG4xNzAzOlx0XHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XG4xNzA0Olx0XG4xNzA1Olx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbjE3MDY6XHRcdGNhc2UgSVBfTVNGSUxURVI6XG4xNzA3Olx0XHR7XG4xNzA4Olx0XHRcdHN0cnVjdCBpcF9tc2ZpbHRlciBtc2Y7XG4xNzA5Olx0XHRcdHN0cnVjdCBrdmVjIGt2ZWM7XG4xNzEwOlx0XHRcdHNvY2tvcHRfdCBvcHQ7XG4xNzExOlx0XG4xNzEyOlx0XHRcdGlmIChsZW4gXHUwMDNjIElQX01TRklMVEVSX1NJWkUoMCkpIHtcbjE3MTM6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTcxNDpcdFx0XHRcdGdvdG8gb3V0O1xuMTcxNTpcdFx0XHR9XG4xNzE2Olx0XHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZtc2YsIG9wdHZhbCwgSVBfTVNGSUxURVJfU0laRSgwKSkpIHtcbjE3MTc6XHRcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMTcxODpcdFx0XHRcdGdvdG8gb3V0O1xuMTcxOTpcdFx0XHR9XG4xNzIwOlx0XHRcdGVyciA9IHNvY2twdHJfdG9fc29ja29wdChcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcdTAwMjZrdmVjKTtcbjE3MjE6XHRcdFx0aWYgKGVycilcbjE3MjI6XHRcdFx0XHRnb3RvIG91dDtcbjE3MjM6XHRcbjE3MjQ6XHRcdFx0ZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCBcdTAwMjZtc2YsIFx1MDAyNm9wdCk7XG4xNzI1Olx0XHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXG4xNzI2Olx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjE3Mjc6XHRcdFx0Z290byBvdXQ7XG4xNzI4Olx0XHR9XG4xNzI5Olx0XHRjYXNlIE1DQVNUX01TRklMVEVSOlxuMTczMDpcdFx0XHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcbjE3MzE6XHRcdFx0XHRlcnIgPSBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyKHNrLCBvcHR2YWwsIG9wdGxlbixcbjE3MzI6XHRcdFx0XHRcdFx0XHRcdCAgIGxlbik7XG4xNzMzOlx0XHRcdGVsc2VcbjE3MzQ6XHRcdFx0XHRlcnIgPSBpcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc2ssIG9wdHZhbCwgb3B0bGVuLCBsZW4pO1xuMTczNTpcdFx0XHRnb3RvIG91dDtcbjE3MzY6XHRcdGNhc2UgSVBfUFJPVE9DT0w6XG4xNzM3Olx0XHRcdHZhbCA9IGluZXRfc2soc2spLVx1MDAzZWluZXRfbnVtO1xuMTczODpcdFx0XHRicmVhaztcbjE3Mzk6XHRcdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaWdnaW5nIGludG8gU29ja2V0IE9wdGlvbiBJbnRlcm5hbHMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG5ldHdvcmsgc29ja2V0IG9wdGlvbnMsIGFuZCBJIHdhbnQgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGVtLiBJIHNob3VsZCByZWFsbHkgdGFrZSBhIGxvb2sgYXQgYHNvY2twdHJfdG9fc29ja29wdGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvc29ja2V0LmNgLiBJIG5lZWQgdG8gY2xhcmlmeSBwcmVjaXNlbHkgaG93IHRoYXQgY29udmVyc2lvbiBoYXBwZW5zIGFuZCBob3cgYHNvY2tvcHRfdGAgc3RydWN0dXJlcyBhcmUgbWFuYWdlZCBhbmQgdXNlZCBpbiB0aGUgcHJvY2Vzcy4gSXQmIzM5O3MgdGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHdob2xlIHBpY3R1cmUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhlIHBvaW50ZXJzIGFuZCBkYXRhIGFyZSBwYXNzZWQgYXJvdW5kIOKAkyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBzdWJ0bGUgYnVncyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBjYW4gaGlkZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIHJldmVhbHMgYW55IGludGVyZXN0aW5nIGRlc2lnbiBjaG9pY2VzIG9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQzMDpcdFxuMjQzMTpcdElORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoYm9vbCB0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0KGludCBsZXZlbCxcbjI0MzI6XHRcdFx0XHRcdFx0XHRcdCBpbnQgb3B0bmFtZSkpO1xuMjQzMzpcdFxuMjQzNDpcdC8qXG4yNDM1Olx0ICogSW5pdGlhbGl6ZSBhIHNvY2tvcHRfdCBmcm9tIHNvY2twdHIgb3B0dmFsL29wdGxlbiwgc2V0dGluZyB1cCBpb3ZfaXRlclxuMjQzNjpcdCAqIGZvciBib3RoIGlucHV0IGFuZCBvdXRwdXQgZGlyZWN0aW9ucy5cbjI0Mzc6XHQgKiBJdCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCBib3RoIGlvdiBwb2ludHMgdG8gdGhlIHNhbWUgZGF0YSwgYnV0LFxuMjQzODpcdCAqIC5pdGVyX2luIGlzIHJlYWQtb25seSBhbmQgLml0ZXJfb3V0IGlzIHdyaXRlLW9ubHkgYnkgdGhlIHByb3RvY29sIGNhbGxiYWNrc1xuMjQzOTpcdCAqL1xuMjQ0MDpcdGludCBzb2NrcHRyX3RvX3NvY2tvcHQoc29ja29wdF90ICpvcHQsIHNvY2twdHJfdCBvcHR2YWwsXG4yNDQxOlx0XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBzdHJ1Y3Qga3ZlYyAqa3ZlYylcbjI0NDI6XHR7XG4yNDQzOlx0XHRpbnQga29wdGxlbjtcbjI0NDQ6XHRcbjI0NDU6XHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZrb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcbjI0NDY6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4yNDQ3Olx0XG4yNDQ4Olx0XHRpZiAoa29wdGxlbiBcdTAwM2MgMClcbjI0NDk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNDUwOlx0XG4yNDUxOlx0XHRpZiAob3B0dmFsLmlzX2tlcm5lbCkge1xuMjQ1MjpcdFx0XHRrdmVjLVx1MDAzZWlvdl9iYXNlID0gb3B0dmFsLmtlcm5lbDtcbjI0NTM6XHRcdFx0a3ZlYy1cdTAwM2Vpb3ZfbGVuID0ga29wdGxlbjtcbjI0NTQ6XHRcdFx0aW92X2l0ZXJfa3ZlYyhcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQsIElURVJfREVTVCwga3ZlYywgMSwga29wdGxlbik7XG4yNDU1Olx0XHRcdGlvdl9pdGVyX2t2ZWMoXHUwMDI2b3B0LVx1MDAzZWl0ZXJfaW4sIElURVJfU09VUkNFLCBrdmVjLCAxLCBrb3B0bGVuKTtcbjI0NTY6XHRcdH0gZWxzZSB7XG4yNDU3Olx0XHRcdGlvdl9pdGVyX3VidWYoXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0LCBJVEVSX0RFU1QsIG9wdHZhbC51c2VyLCBrb3B0bGVuKTtcbjI0NTg6XHRcdFx0aW92X2l0ZXJfdWJ1ZihcdTAwMjZvcHQtXHUwMDNlaXRlcl9pbiwgSVRFUl9TT1VSQ0UsIG9wdHZhbC51c2VyLFxuMjQ1OTpcdFx0XHRcdCAgICAgIGtvcHRsZW4pO1xuMjQ2MDpcdFx0fVxuMjQ2MTpcdFx0b3B0LVx1MDAzZW9wdGxlbiA9IGtvcHRsZW47XG4yNDYyOlx0XG4yNDYzOlx0XHRyZXR1cm4gMDtcbjI0NjQ6XHR9XG4yNDY1Olx0XG4yNDY2Olx0aW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxuMjQ2NzpcdFx0XHQgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXG4yNDY4Olx0e1xuMjQ2OTpcdFx0aW50IG1heF9vcHRsZW4gX19tYXliZV91bnVzZWQgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTY0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYHN0cnVjdCBpcF9tc2ZpbHRlcmAgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgYSByZWZyZXNoZXIgb24gdGhlIGBzdHJ1Y3QgaXBfbXNmaWx0ZXJgLiBJdCYjMzk7cyBhIGtleSBzdHJ1Y3R1cmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggSUdNUC9NTEQgYW5kIG11bHRpY2FzdCB0cmFmZmljIG1hbmFnZW1lbnQgaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyAqYWN0dWFsbHkqIGluIHRoZXJlLCBob3cgaXQmIzM5O3Mgc3RydWN0dXJlZCwgYW5kIHdoYXQgZWxlbWVudHMgYXJlIGNyaXRpY2FsIGZvciBmaWx0ZXJpbmcuIEkgd2FudCB0byBzZWUgd2hpY2ggZmllbGRzIGhvbGQgdGhlIGdyb3VwIGFkZHJlc3MsIHNvdXJjZSBhZGRyZXNzZXMgKGlmIGFueSksIGFuZCBhbnkgb3RoZXIgYXNzb2NpYXRlZCBtZXRhZGF0YSB0aGF0IGRpY3RhdGVzIGhvdyB0cmFmZmljIHdpbGwgYmUgaGFuZGxlZC4gSSBhbSBzdXJlIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoZSBzdHJ1Y3R1cmUgYWxpZ25zIHdpdGggdGhlIGN1cnJlbnQgc3RhbmRhcmRzIGZvciBJR01QdjMgb3IgTUxEdjIsIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGZpZWxkIHZhbHVlcyBhcmUgd2l0aCByZWdhcmQgdG8gdGhlIHBhcnRpY3VsYXIgbXVsdGljYXN0IHN0YXRlIG9yIHRoZSBmaWx0ZXIgbW9kZS4gTXkgZ29hbCBoZXJlIGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgY29yZSBwaWVjZXMgdGhhdCBhcmUgdXNlZCB0byByZXByZXNlbnQgbXVsdGljYXN0IGZpbHRlcmluZyBydWxlcyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBkYXRhIHN0cnVjdHVyZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpbmZvcm1hdGlvbiByZWxldmFudCB0byBqb2lucywgbGVhdmVzLCBzb3VyY2VzLCBhbmQgcGVyaGFwcyBzb21lIGludGVybmFsIGZsYWdzIHRoYXQgbWlnaHQgZGljdGF0ZSBiZWhhdmlvciBsaWtlIGluY2x1ZGUvZXhjbHVkZSBsaXN0cy4gVW5kZXJzdGFuZGluZyB0aGUgZGVmaW5pdGlvbiB3aWxsIGFsbG93IG1lIHRvIGltbWVkaWF0ZWx5IGlkZW50aWZ5IHBvdGVudGlhbCBpc3N1ZXMgaW4gcmVsYXRlZCBjb2RlIG9yIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2sgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBpcF9tc2ZpbHRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lnbXAuaD0yNzM9ZXh0ZXJuIGludCBpcF9tY19zb3VyY2UoaW50IGFkZCwgaW50IG9tb2RlLCBzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL2xpbnV4L2lnbXAuaC0yNzQtXHRcdHN0cnVjdCBpcF9tcmVxX3NvdXJjZSAqbXJlcXMsIGludCBpZmluZGV4KTtcbmluY2x1ZGUvbGludXgvaWdtcC5oOjI3NTpleHRlcm4gaW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsaW50IGlmaW5kZXgpO1xuaW5jbHVkZS9saW51eC9pZ21wLmg6Mjc2OmV4dGVybiBpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXG5pbmNsdWRlL2xpbnV4L2lnbXAuaC0yNzctXHRcdFx0c29ja29wdF90ICpvcHQpO1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9pbi5oPTE5Mz1zdHJ1Y3QgaXBfbXJlcV9zb3VyY2Uge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9pbi5oLTE5OC1cbmluY2x1ZGUvdWFwaS9saW51eC9pbi5oOjE5OTpzdHJ1Y3QgaXBfbXNmaWx0ZXIge1xuaW5jbHVkZS91YXBpL2xpbnV4L2luLmgtMjAwLVx0X19iZTMyXHRcdGltc2ZfbXVsdGlhZGRyO1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9pbi5oLTIxMC0jZGVmaW5lIElQX01TRklMVEVSX1NJWkUobnVtc3JjKSBcXFxuaW5jbHVkZS91YXBpL2xpbnV4L2luLmg6MjExOlx0KHNpemVvZihzdHJ1Y3QgaXBfbXNmaWx0ZXIpIC0gc2l6ZW9mKF9fdTMyKSBcXFxuaW5jbHVkZS91YXBpL2xpbnV4L2luLmgtMjEyLVx0JiM0MzsgKG51bXNyYykgKiBzaXplb2YoX191MzIpKVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0yNDgzPWludCBpcF9tY19zb3VyY2UoaW50IGFkZCwgaW50IG9tb2RlLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yNjIxLVxubmV0L2lwdjQvaWdtcC5jOjI2MjI6aW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIGludCBpZmluZGV4KVxubmV0L2lwdjQvaWdtcC5jLTI2MjMte1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0yNzEyLVxubmV0L2lwdjQvaWdtcC5jOjI3MTM6aW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBzb2Nrb3B0X3QgKm9wdClcbm5ldC9pcHY0L2lnbXAuYy0yNzE0LXtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTY2Mj1zdGF0aWMgaW50IHNldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNjY2LXtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6NjY3Olx0c3RydWN0IGlwX21zZmlsdGVyICptc2Y7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTY2OC1cdHN0cnVjdCBzb2NrYWRkcl9pbiAqcHNpbjtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTg5Mj1pbnQgZG9faXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMjU0LVx0e1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxMjU1Olx0XHRzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZjtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTI1Ni1cbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE1MDc9aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTcwNy1cdHtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTcwODpcdFx0c3RydWN0IGlwX21zZmlsdGVyIG1zZjtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTcwOS1cdFx0c3RydWN0IGt2ZWMga3ZlYztcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW4uaD0xOTM9c3RydWN0IGlwX21yZXFfc291cmNlIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW4uaC0xOTgtXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW4uaDoxOTk6c3RydWN0IGlwX21zZmlsdGVyIHtcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oLTIwMC1cdF9fYmUzMlx0XHRpbXNmX211bHRpYWRkcjtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW4uaC0yMTAtI2RlZmluZSBJUF9NU0ZJTFRFUl9TSVpFKG51bXNyYykgXFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oOjIxMTpcdChzaXplb2Yoc3RydWN0IGlwX21zZmlsdGVyKSAtIHNpemVvZihfX3UzMikgXFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oLTIxMi1cdCYjNDM7IChudW1zcmMpICogc2l6ZW9mKF9fdTMyKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk2MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBIZWFkZXJzKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBNeSBpbnR1aXRpb24mIzM5O3MgdGVsbGluZyBtZSB0byBsb29rIGF0IGBpbmNsdWRlL3VhcGkvbGludXgvaW4uaGAgYW5kIHNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIGFyb3VuZCBsaW5lIDE5OS4gSXQmIzM5O3MgdXN1YWxseSB0aGUgZmlyc3QgcGxhY2UgSSBzdGFydCBmb3IgbG93LWxldmVsIHNvY2tldCBvcHRpb25zIG9yIGRlZmluaXRpb25zLiBJIHN1c3BlY3QgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIHJlbGV2YW50IHRvIG15IGN1cnJlbnQgZGVidWdnaW5nIG9yIGludmVzdGlnYXRpb24gbHVya2luZyBpbiB0aGF0IHZpY2luaXR5LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGhlYWRlciwgc28gY2hhbmNlcyBhcmUgd2hhdGV2ZXIgSSBuZWVkIGlzIGRlY2xhcmVkIGluIHRoYXQgZmlsZS4gSSBleHBlY3QgdG8gZmluZCBhIG1hY3JvIG9yIGVudW0gb3Igc3RydWN0IGRlZmluaXRpb24gdGhhdCByZWxhdGVzIHRvIHdoYXRldmVyIEkmIzM5O20gdHJvdWJsZXNob290aW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvaW4uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTk1Olx0XHRfX2JlMzJcdFx0aW1yX2ludGVyZmFjZTtcbiAxOTY6XHRcdF9fYmUzMlx0XHRpbXJfc291cmNlYWRkcjtcbiAxOTc6XHR9O1xuIDE5ODpcdFxuIDE5OTpcdHN0cnVjdCBpcF9tc2ZpbHRlciB7XG4gMjAwOlx0XHRfX2JlMzJcdFx0aW1zZl9tdWx0aWFkZHI7XG4gMjAxOlx0XHRfX2JlMzJcdFx0aW1zZl9pbnRlcmZhY2U7XG4gMjAyOlx0XHRfX3UzMlx0XHRpbXNmX2Ztb2RlO1xuIDIwMzpcdFx0X191MzJcdFx0aW1zZl9udW1zcmM7XG4gMjA0Olx0XHR1bmlvbiB7XG4gMjA1Olx0XHRcdF9fYmUzMlx0XHRpbXNmX3NsaXN0WzFdO1xuIDIwNjpcdFx0XHRfX0RFQ0xBUkVfRkxFWF9BUlJBWShfX2JlMzIsIGltc2Zfc2xpc3RfZmxleCk7XG4gMjA3Olx0XHR9O1xuIDIwODpcdH07XG4gMjA5Olx0XG4gMjEwOlx0I2RlZmluZSBJUF9NU0ZJTFRFUl9TSVpFKG51bXNyYykgXFxcbiAyMTE6XHRcdChzaXplb2Yoc3RydWN0IGlwX21zZmlsdGVyKSAtIHNpemVvZihfX3UzMikgXFxcbiAyMTI6XHRcdCYjNDM7IChudW1zcmMpICogc2l6ZW9mKF9fdTMyKSlcbiAyMTM6XHRcbiAyMTQ6XHRzdHJ1Y3QgZ3JvdXBfcmVxIHtcbiAyMTU6XHRcdF9fdTMyXHRcdFx0XHQgZ3JfaW50ZXJmYWNlO1x0LyogaW50ZXJmYWNlIGluZGV4ICovXG4gMjE2Olx0XHRzdHJ1Y3QgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSBncl9ncm91cDtcdC8qIGdyb3VwIGFkZHJlc3MgKi9cbiAyMTc6XHR9O1xuIDIxODpcdFxuIDIxOTpcdHN0cnVjdCBncm91cF9zb3VyY2VfcmVxIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU2MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDExMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgSVBfTVNGSUxURVJgIFNvY2tldCBPcHRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgc3RydWN0IGlwX21zZmlsdGVyYCBhbmQgaG93IGl0JiMzOTtzIHVzZWQgaW4gdGhlIGtlcm5lbCYjMzk7cyBgSVBfTVNGSUxURVJgIHNvY2tldCBvcHRpb24uIE15IHByaW1hcnkgY29uY2VybiBpcyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB1c2VyLXNwYWNlIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKRmlyc3QsIEkgc2VlIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmOiBgaW1zZl9tdWx0aWFkZHJgLCBgaW1zZl9pbnRlcmZhY2VgLCBgaW1zZl9mbW9kZWAsIGBpbXNmX251bXNyY2AsIGFuZCBgaW1zZl9zbGlzdGAvYGltc2Zfc2xpc3RfZmxleGAuIFRoZSBzaXplIGNhbGN1bGF0aW9uIHVzaW5nIGBJUF9NU0ZJTFRFUl9TSVpFKDApYCBnaXZlcyBtZSBhIGJhc2Ugc2l6ZS4gVGhlbiwgYGRvX2lwX2dldHNvY2tvcHRgIGhhbmRsZXMgdGhlIGBJUF9NU0ZJTFRFUmAgY2FzZS4gSXQgY29waWVzIHRoZSBpbml0aWFsIHBhcnQgb2YgdGhlIGBtc2ZgIHN0cnVjdCBmcm9tIHVzZXItc3BhY2UgdXNpbmcgYGNvcHlfZnJvbV9zb2NrcHRyYC4KClRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoZSBjYWxsIHRvIGBpcF9tY19tc2ZnZXRgLiBIZXJlJiMzOTtzIHdoZXJlIHRoZSB1c2VyLXByb3ZpZGVkIGRhdGEgZGlyZWN0bHkgYWZmZWN0cyBrZXJuZWwgYmVoYXZpb3IuIGBtc2ZgJiMzOTtzIGluaXRpYWwgZmllbGRzIGFyZSBwb3B1bGF0ZWQgZnJvbSB1c2VyLXNwYWNlLiAgYGlwX21jX21zZmdldGAgdGhlbiByZWFkcyBgbXNmLmltc2ZfZm1vZGVgIGFuZCBgbXNmLmltc2ZfbnVtc3JjYC4gVGhpcyBpcyB0aGUgdXNlci1wcm92aWRlZCBjb3VudCwgYW5kIGBtc2Zfc2l6ZWAgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGlzIGNvdW50LCBlc3NlbnRpYWxseSBkZXRlcm1pbmluZyBob3cgbXVjaCBkYXRhIGlzIGJlaW5nIHRyYW5zZmVycmVkIGJhY2sgdG8gdXNlciBzcGFjZS4gIFRoZSBpbnRlcmVzdGluZyBwb2ludCBpcyB0aGF0IGBtc2YtJmd0O2ltc2ZfbnVtc3JjYCBpcyBtb2RpZmllZCB0byBgY291bnRgLCBhZnRlciBgY29weWNvdW50YCBpcyBjYWxjdWxhdGVkLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgc29ja29wdF9leHBhbmRfb3V0YC4gSXQmIzM5O3MgdXNlZCB0byBncm93IHRoZSB1c2VyLXNwYWNlIGJ1ZmZlciBgb3B0dmFsYCB3aGVuIHJlcGx5aW5nIHdpdGggdGhlIHNvY2tldCBvcHRpb24gZGF0YS4gIFRoZSBrZXkgcGFydCBpcyB0aGUgY29tbWVudCBhYm91dCBncm93aW5nIHRoZSBidWZmZXIgKmJleW9uZCogdGhlIGluaXRpYWwgYG9wdGxlbmAgcGFzc2VkIGJ5IHRoZSB1c2VyLiBUaGUgYHNvY2tvcHRfZXhwYW5kX291dGAgZnVuY3Rpb24gcmUtYW5jaG9ycyB0aGUgaXRlcmF0b3IgYXQgdGhlIGJlZ2lubmluZyBvZiBgb3B0dmFsYCB1cCB0byBzaXplLCB1c2luZyBgaW92X2l0ZXJfdWJ1ZmAgb24gYG9wdC0mZ3Q7aXRlcl9vdXQudWJ1ZmAuIFRoaXMgbWVhbnMgdGhhdCB1c2VyLXNwYWNlIGRhdGEgY2FuIGluZmx1ZW5jZSB0aGUgc2l6ZSBvZiBrZXJuZWwgd3JpdGVzIHRvIHVzZXIgc3BhY2UuIEl0IHNlZW1zIHRoZSBpbnRlbnRpb24gaGVyZSBpcyB0byBhbGxvdyB0aGUga2VybmVsIHRvIHdyaXRlIHBhc3QgYG9wdGxlbmAgaW4gYSBjb250cm9sbGVkIHdheSwgYnV0IGl0IGFsc28gY3JlYXRlcyB0aGUgcG90ZW50aWFsIGZvciBzb21lIGludGVyZXN0aW5nIHNpZGUtZWZmZWN0cyB0aGF0IG5lZWQgY2FyZWZ1bCByZXZpZXcuIFRoZSBjb2RlIGRlcGVuZHMgb24gdGhlIGJ1ZmZlciBiZWluZyBhIHVzZXIgYnVmZmVyIGFzIG5vdGVkLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgb3B0LSZndDtpdGVyX291dC51YnVmYCBpcyBwb2ludGluZy4gYHNvY2twdHJfdG9fc29ja29wdGAgaW5pdGlhbGl6ZXMgYG9wdC0mZ3Q7aXRlcl9vdXQudWJ1ZmAgd2l0aCBgb3B0dmFsLnVzZXJgLiBUaGlzIHRlbGxzIG1lIHRoYXQgdGhlIG91dHB1dCBidWZmZXIgaXMgdGhlIHVzZXItcHJvdmlkZWQgYG9wdHZhbGAgYnVmZmVyLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBhIGNyYWZ0ZWQgdXNlci1zcGFjZSBpbnB1dCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGEgYnVmZmVyIG92ZXJmbG93IG9yIGluZm9ybWF0aW9uIGxlYWssIGlmIHRoZXJlJiMzOTtzIGluc3VmZmljaWVudCB2YWxpZGF0aW9uIGFyb3VuZCBgbXNmX3NpemVgIGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGBvcHRsZW5gLiBUaGUgY29tbWVudCBhYm91dCB0aGUgaW50ZW5kZWQgdXNlIG9mIGdyb3dpbmcgdGhlIGJ1ZmZlciBpcyBhbHNvIHNvbWV0aGluZyB0aGF0IG5lZWRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBpbiB0ZXJtcyBvZiBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIHRoZSBjb2RlIHBhdGhzIGFuZCBpZGVudGlmeSB3aGF0IHRoZSB1cHBlciBib3VuZHMgYXJlIGFuZCBob3cgdGhleSBhcmUgZW5mb3JjZWQuIFRvIGRvIHRoaXMsIEkgd2lsbCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgY2FsbGVycyBvZiBgaXBfbWNfbXNmZ2V0YCwgYHNvY2twdHJfdG9fc29ja29wdGAsIGFuZCBgc29ja29wdF9leHBhbmRfb3V0YCB1c2luZyBhIGdyZXAgc2VhcmNoLiBUaGlzIHNob3VsZCB0ZWxsIG1lIGlmIHRoZXJlIGFyZSBvdGhlciBwbGFjZXMgaW4gdGhlIGtlcm5lbCB0aGF0IGJlaGF2ZSBzaW1pbGFybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX21jX21zZmdldHxzb2NrcHRyX3RvX3NvY2tvcHR8c29ja29wdF9leHBhbmRfb3V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaWdtcC5oPTI3NT1leHRlcm4gaW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsaW50IGlmaW5kZXgpO1xuaW5jbHVkZS9saW51eC9pZ21wLmg6Mjc2OmV4dGVybiBpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXG5pbmNsdWRlL2xpbnV4L2lnbXAuaC0yNzctXHRcdFx0c29ja29wdF90ICpvcHQpO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0Lmg9NTY9c3RhdGljIGlubGluZSBpbnQgc29ja29wdF9pbml0X3VzZXIoc29ja29wdF90ICpvcHQsIGNoYXIgX191c2VyICpvcHR2YWwsXG4tLVxuaW5jbHVkZS9saW51eC9uZXQuaC04MS0gKi9cbmluY2x1ZGUvbGludXgvbmV0Lmg6ODI6c3RhdGljIGlubGluZSBpbnQgc29ja29wdF9leHBhbmRfb3V0KHNvY2tvcHRfdCAqb3B0LCBzaXplX3Qgc2l6ZSlcbmluY2x1ZGUvbGludXgvbmV0LmgtODMte1xuLS1cbmluY2x1ZGUvbGludXgvbmV0LmgtOTQtXG5pbmNsdWRlL2xpbnV4L25ldC5oOjk1OmludCBzb2NrcHRyX3RvX3NvY2tvcHQoc29ja29wdF90ICpvcHQsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4sXG5pbmNsdWRlL2xpbnV4L25ldC5oLTk2LVx0XHQgICAgICAgc3RydWN0IGt2ZWMgKmt2ZWMpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0yNjIyPWludCBpcF9tY19tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBpbnQgaWZpbmRleClcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjcxMi1cbm5ldC9pcHY0L2lnbXAuYzoyNzEzOmludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgc29ja29wdF90ICpvcHQpXG5uZXQvaXB2NC9pZ21wLmMtMjcxNC17XG4tLVxubmV0L2lwdjQvaWdtcC5jLTI3NjEtXHQgKi9cbm5ldC9pcHY0L2lnbXAuYzoyNzYyOlx0ZXJyID0gc29ja29wdF9leHBhbmRfb3V0KG9wdCwgbXNmX3NpemUpO1xubmV0L2lwdjQvaWdtcC5jLTI3NjMtXHRpZiAoZXJyKVxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM9MTUwNz1pbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzE5LVx0XHR9XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE3MjA6XHRcdGVyciA9IHNvY2twdHJfdG9fc29ja29wdChcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcdTAwMjZrdmVjKTtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTcyMS1cdFx0aWYgKGVycilcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3MjMtXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE3MjQ6XHRcdGVyciA9IGlwX21jX21zZmdldChzaywgXHUwMDI2bXNmLCBcdTAwMjZvcHQpO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzI1LVx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2b3B0Lm9wdGxlbiwgc2l6ZW9mKGludCkpKVxuLS1cbm5ldC9zb2NrZXQuYz0yNDMxPUlORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoYm9vbCB0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0KGludCBsZXZlbCxcbi0tXG5uZXQvc29ja2V0LmMtMjQzOS0gKi9cbm5ldC9zb2NrZXQuYzoyNDQwOmludCBzb2NrcHRyX3RvX3NvY2tvcHQoc29ja29wdF90ICpvcHQsIHNvY2twdHJfdCBvcHR2YWwsXG5uZXQvc29ja2V0LmMtMjQ0MS1cdFx0ICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIHN0cnVjdCBrdmVjICprdmVjKVxuLS1cbm5ldC9zb2NrZXQuYz0yNDY2PWludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbi0tXG5uZXQvc29ja2V0LmMtMjQ4NS1cdH0gZWxzZSBpZiAob3BzLVx1MDAzZWdldHNvY2tvcHRfaXRlcikge1xubmV0L3NvY2tldC5jOjI0ODY6XHRcdGVyciA9IHNvY2twdHJfdG9fc29ja29wdChcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcdTAwMjZrdmVjKTtcbm5ldC9zb2NrZXQuYy0yNDg3LVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIENhbGwgUGF0aCBvZiBgaXBfbWNfbXNmZ2V0YCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGlwX21jX21zZmdldGAgaXMgb25seSBjYWxsZWQgd2l0aGluIGBkb19pcF9nZXRzb2Nrb3B0YC4gVGhpcyBzdWdnZXN0cyBhIHRhcmdldGVkIGFyZWEgdG8gaW52ZXN0aWdhdGUsIHNwZWNpZmljYWxseSBhcm91bmQgc29ja2V0IG9wdGlvbiByZXRyaWV2YWwgcmVsYXRlZCB0byBJUCBtdWx0aWNhc3QuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IGBpcF9tY19tc2ZnZXRgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgc29ja29wdF90YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBzb2Nrb3B0X3RgIGlzIGRlZmluZWQuIFRoaXMgaXMgbGlrZWx5IGEgc3RydWN0dXJlIG9yIHR5cGUgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbCB0byBob3cgc29ja2V0IG9wdGlvbnMgYXJlIGhhbmRsZWQuIEEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSBzdWdnZXN0cyBJIHNob3VsZCBmaW5kIHRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L25ldC5oYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdCAqXG4gIDQxOlx0ICogVGhlIG9wdGxlbiBmaWVsZCBhbGxvd3MgY2FsbGJhY2tzIHRvIHJldHVybiBhIHNwZWNpZmljIGxlbmd0aCB2YWx1ZVxuICA0MjpcdCAqIGluZGVwZW5kZW50IG9mIHRoZSBieXRlcyB3cml0dGVuIHZpYSBjb3B5X3RvX2l0ZXIoKS5cbiAgNDM6XHQgKi9cbiAgNDQ6XHR0eXBlZGVmIHN0cnVjdCBzb2Nrb3B0IHtcbiAgNDU6XHRcdHN0cnVjdCBpb3ZfaXRlciBpdGVyX2luO1xuICA0NjpcdFx0c3RydWN0IGlvdl9pdGVyIGl0ZXJfb3V0O1xuICA0NzpcdFx0aW50IG9wdGxlbjtcbiAgNDg6XHR9IHNvY2tvcHRfdDtcbiAgNDk6XHRcbiAgNTA6XHQvKlxuICA1MTpcdCAqIEluaXRpYWxpemUgYSB1c2VyLWJhY2tlZCBzb2Nrb3B0X3QgZnJvbSB0aGUgKG9wdHZhbCwgb3B0bGVuKSBfX3VzZXIgcGFpciBvZlxuICA1MjpcdCAqIGEgZ2V0c29ja29wdCgpIGNhbGxiYWNrLiBVc2VkIGJ5IHRyYW5zaXRpb25hbCBfX3VzZXIgZ2V0c29ja29wdCB3cmFwcGVyc1xuICA1MzpcdCAqIHdoaWxlIHRoZSBwcm90by1sYXllciBjYWxsYmFja3MgYXJlIGNvbnZlcnRlZCB0byB0YWtlIGEgc29ja29wdF90OyB0aGVcbiAgNTQ6XHQgKiBjYWxsZXIgd3JpdGVzIG9wdC1cdTAwM2VvcHRsZW4gYmFjayB0byB0aGUgdXNlciBvcHRsZW4gYWZ0ZXIgdGhlIGNhbGxiYWNrLlxuICA1NTpcdCAqL1xuICA1NjpcdHN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfaW5pdF91c2VyKHNvY2tvcHRfdCAqb3B0LCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuICA1NzpcdFx0XHRcdFx0ICAgIGludCBfX3VzZXIgKm9wdGxlbilcbiAgNTg6XHR7XG4gIDU5Olx0XHRpbnQgbGVuO1xuICA2MDpcdFxuICA2MTpcdFx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbiAgNjI6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gIDYzOlx0XHRpZiAobGVuIFx1MDAzYyAwKVxuICA2NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgNjU6XHRcbiAgNjY6XHRcdGlvdl9pdGVyX3VidWYoXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0LCBJVEVSX0RFU1QsIG9wdHZhbCwgbGVuKTtcbiAgNjc6XHRcdGlvdl9pdGVyX3VidWYoXHUwMDI2b3B0LVx1MDAzZWl0ZXJfaW4sIElURVJfU09VUkNFLCBvcHR2YWwsIGxlbik7XG4gIDY4Olx0XHRvcHQtXHUwMDNlb3B0bGVuID0gbGVuO1xuICA2OTpcdFxuICA3MDpcdFx0cmV0dXJuIDA7XG4gIDcxOlx0fVxuICA3MjpcdFxuICA3MzpcdC8qXG4gIDc0Olx0ICogR3JvdyBvcHR2YWwgdG8gQHNpemUsIGZvciB0aGUgb3B0aW9ucyB3aG9zZSByZXBseSBpcyBzaXplZCBieSBhIGNvdW50IHRoZVxuICA3NTpcdCAqIGNhbGxlciBsZWZ0IGluIG9wdHZhbCByYXRoZXIgdGhhbiBieSBvcHRsZW4uIFRob3NlIHdyaXRlIHBhc3Qgb3B0bGVuIHRvZGF5XG4gIDc2Olx0ICogYW5kIHVzZXJzcGFjZSByZWxpZXMgb24gaXQuXG4gIDc3Olx0ICpcbiAgNzg6XHQgKiBDYWxsIGl0IGJlZm9yZSB3cml0aW5nIHRocm91Z2ggb3B0LVx1MDAzZWl0ZXJfb3V0OiBpdCByZS1hbmNob3JzIHRoZSBpdGVyYXRvciBhdFxuICA3OTpcdCAqIHRoZSBoZWFkIG9mIG9wdHZhbC4gT25seSBhIHVzZXIgYnVmZmVyIGNhbiBiZSBsb25nZXIgdGhhbiB0aGUgb3B0bGVuIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBTb2NrZXQgT3B0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgYSByZWZyZXNoZXIgb24gdGhlIG92ZXJhbGwgYGdldHNvY2tvcHRgIGZsb3csIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gVGltZSB0byBnbyByaWdodCB0byB0aGUgc291cmNlIGFuZCBleGFtaW5lIGBkb19zb2NrX2dldHNvY2tvcHRgIHdpdGhpbiBgbmV0L3NvY2tldC5jYC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgcmV0cmlldmFsIG9mIHNvY2tldCBvcHRpb25zLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBudWFuY2VzIG9mIGRpZmZlcmVudCBzb2NrZXQgZmFtaWxpZXMgYW5kIG9wdGlvbiBsZXZlbHPigJRgU09MX1NPQ0tFVGAsIGBJUFBST1RPX1RDUGAsIGV0Yy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGxvY2tpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBvdmVyYWxsIGxvZ2ljIGZvciByZXRyaWV2aW5nIGFuZCByZXR1cm5pbmcgdGhlIHJlcXVlc3RlZCBzb2NrZXQgb3B0aW9uIGRhdGEuIFRoZSBnb2FsIGlzIHRvIHNvbGlkaWZ5IG15IG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBjcml0aWNhbCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgc3dpdGNoIHN0YXRlbWVudCBoYW5kbGluZyB2YXJpb3VzIG9wdGlvbnMgYW5kIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgY29weWluZyBhbmQgc2VjdXJpdHkgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ2NTpcdFxuMjQ2NjpcdGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbjI0Njc6XHRcdFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxuMjQ2ODpcdHtcbjI0Njk6XHRcdGludCBtYXhfb3B0bGVuIF9fbWF5YmVfdW51c2VkID0gMDtcbjI0NzA6XHRcdGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9wcztcbjI0NzE6XHRcdHN0cnVjdCBrdmVjIGt2ZWM7XG4yNDcyOlx0XHRzb2Nrb3B0X3Qgb3B0O1xuMjQ3MzpcdFx0aW50IGVycjtcbjI0NzQ6XHRcbjI0NzU6XHRcdGVyciA9IHNlY3VyaXR5X3NvY2tldF9nZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lKTtcbjI0NzY6XHRcdGlmIChlcnIpXG4yNDc3Olx0XHRcdHJldHVybiBlcnI7XG4yNDc4Olx0XG4yNDc5Olx0XHRpZiAoIWNvbXBhdClcbjI0ODA6XHRcdFx0Y29weV9mcm9tX3NvY2twdHIoXHUwMDI2bWF4X29wdGxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSk7XG4yNDgxOlx0XG4yNDgyOlx0XHRvcHMgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpO1xuMjQ4MzpcdFx0aWYgKGxldmVsID09IFNPTF9TT0NLRVQpIHtcbjI0ODQ6XHRcdFx0ZXJyID0gc2tfZ2V0c29ja29wdChzb2NrLVx1MDAzZXNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuMjQ4NTpcdFx0fSBlbHNlIGlmIChvcHMtXHUwMDNlZ2V0c29ja29wdF9pdGVyKSB7XG4yNDg2Olx0XHRcdGVyciA9IHNvY2twdHJfdG9fc29ja29wdChcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcdTAwMjZrdmVjKTtcbjI0ODc6XHRcdFx0aWYgKGVycilcbjI0ODg6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjQ4OTpcdFxuMjQ5MDpcdFx0XHRlcnIgPSBvcHMtXHUwMDNlZ2V0c29ja29wdF9pdGVyKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBcdTAwMjZvcHQpO1xuMjQ5MTpcdFxuMjQ5MjpcdFx0XHQvKiBBbHdheXMgd3JpdGUgYmFjayBvcHRsZW4sIGV2ZW4gb24gZmFpbHVyZS4gU29tZSBwcm90b2NvbHNcbjI0OTM6XHRcdFx0ICogKGUuZy4gQ0FOIHJhdykgcmV0dXJuIC1FUkFOR0UgYW5kIHNldCBvcHRsZW4gdG8gdGhlXG4yNDk0Olx0XHRcdCAqIHJlcXVpcmVkIGJ1ZmZlciBzaXplIHNvIHVzZXJzcGFjZSBjYW4gZGlzY292ZXIgaXQuXG4yNDk1Olx0XHRcdCAqL1xuMjQ5NjpcdFx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2b3B0Lm9wdGxlbiwgc2l6ZW9mKGludCkpKVxuMjQ5NzpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjQ5ODpcdFx0fSBlbHNlIGlmIChvcHMtXHUwMDNlZ2V0c29ja29wdCkge1xuMjQ5OTpcdFx0XHRpZiAoV0FSTl9PTkNFKG9wdHZhbC5pc19rZXJuZWwgfHwgb3B0bGVuLmlzX2tlcm5lbCxcbjI1MDA6XHRcdFx0XHQgICAgICBcJiMzNDtJbnZhbGlkIGFyZ3VtZW50IHR5cGVcJiMzNDspKVxuMjUwMTpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjI1MDI6XHRcbjI1MDM6XHRcdFx0ZXJyID0gb3BzLVx1MDAzZWdldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbC51c2VyLFxuMjUwNDpcdFx0XHRcdFx0ICAgICAgb3B0bGVuLnVzZXIpO1xuMjUwNTpcdFx0fSBlbHNlIHtcbjI1MDY6XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4yNTA3Olx0XHR9XG4yNTA4Olx0XG4yNTA5Olx0XHRpZiAoIWNvbXBhdClcbjI1MTA6XHRcdFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2stXHUwMDNlc2ssIGxldmVsLCBvcHRuYW1lLFxuMjUxMTpcdFx0XHRcdFx0XHRcdCAgICAgb3B0dmFsLCBvcHRsZW4sIG1heF9vcHRsZW4sXG4yNTEyOlx0XHRcdFx0XHRcdFx0ICAgICBlcnIpO1xuMjUxMzpcdFxuMjUxNDpcdFx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMTgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUF9NU0ZJTFRFUiBHZXRzb2Nrb3B0IEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AgY29kZSBzbmlwcGV0LCBzcGVjaWZpY2FsbHkgdGhlIGBkb19pcF9nZXRzb2Nrb3B0YCBmdW5jdGlvbiBhbmQgdGhlIGBJUF9NU0ZJTFRFUmAgY2FzZS4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGhhbmRsZWQsIGFuZCBJIHdhbnQgdG8gYmUgKmNlcnRhaW4qIHRoZXJlIGFyZSBubyBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciBvdGhlciB2dWxuZXJhYmlsaXRpZXMuCgpSaWdodCwgdGhlIGNvcmUgb2YgdGhlIGBJUF9NU0ZJTFRFUmAgaGFuZGxpbmcgc2VlbXMgdG8gYmUgaGVyZS4gSSBzZWUgYSBgc3RydWN0IGlwX21zZmlsdGVyIG1zZjtgIGJlaW5nIGRlY2xhcmVkLCBhbG9uZyB3aXRoIGBzdHJ1Y3Qga3ZlYyBrdmVjO2AgYW5kIGBzb2Nrb3B0X3Qgb3B0O2AuIFN0YW5kYXJkIHN0dWZmLCBzbyBmYXIuIFRoZSBmaXJzdCBjaGVjaywgYGlmIChsZW4gJmx0OyBJUF9NU0ZJTFRFUl9TSVpFKDApKWAsIGlzIGludGVyZXN0aW5nLiBJdCYjMzk7cyBhIHNpemUgY2hlY2sgcmVsYXRlZCB0byB0aGUgcHJvdmlkZWQgYnVmZmVyLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIG9yaWdpbiBvZiBgbGVuYC4gV2hlcmUgZG9lcyB0aGF0IHZhbHVlIGNvbWUgZnJvbT8gSXQmIzM5O3MgY3J1Y2lhbCB0byB0cmFjZSB0aGF0IGJhY2sgdG8gaXRzIHNvdXJjZSB0byBlbnN1cmUgaXRzIHZhbHVlIGlzIHZhbGlkIGFuZCB0cnVzdGVkLiBMZXQmIzM5O3Mgc2VlIGhvdyBgbGVuYCBpcyBoYW5kbGVkIGluIHRoaXMgZnVuY3Rpb24uIFRoaXMgaXMgY3JpdGljYWwgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MDU6XHR9XG4xNTA2Olx0XG4xNTA3Olx0aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuMTUwODpcdFx0XHQgICAgIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXG4xNTA5Olx0e1xuMTUxMDpcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuMTUxMTpcdFx0Ym9vbCBuZWVkc19ydG5sID0gZ2V0c29ja29wdF9uZWVkc19ydG5sKG9wdG5hbWUpO1xuMTUxMjpcdFx0aW50IHZhbCwgZXJyID0gMDtcbjE1MTM6XHRcdGludCBsZW47XG4xNTE0Olx0XG4xNTE1Olx0XHRpZiAobGV2ZWwgIT0gU09MX0lQKVxuMTUxNjpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xNTE3Olx0XG4xNTE4Olx0XHRpZiAoaXBfbXJvdXRlX29wdChvcHRuYW1lKSlcbjE1MTk6XHRcdFx0cmV0dXJuIGlwX21yb3V0ZV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4xNTIwOlx0XG4xNTIxOlx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcbjE1MjI6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xNTIzOlx0XHRpZiAobGVuIFx1MDAzYyAwKVxuMTUyNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1MjU6XHRcbjE1MjY6XHRcdC8qIEhhbmRsZSBvcHRpb25zIHRoYXQgY2FuIGJlIHJlYWQgd2l0aG91dCBsb2NraW5nIHRoZSBzb2NrZXQuICovXG4xNTI3Olx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbjE1Mjg6XHRcdGNhc2UgSVBfUEtUSU5GTzpcbjE1Mjk6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChQS1RJTkZPLCBzayk7XG4xNTMwOlx0XHRcdGdvdG8gY29weXZhbDtcbjE1MzE6XHRcdGNhc2UgSVBfUkVDVlRUTDpcbjE1MzI6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChUVEwsIHNrKTtcbjE1MzM6XHRcdFx0Z290byBjb3B5dmFsO1xuMTUzNDpcdFx0Y2FzZSBJUF9SRUNWVE9TOlxuMTUzNTpcdFx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KFRPUywgc2spO1xuMTUzNjpcdFx0XHRnb3RvIGNvcHl2YWw7XG4xNTM3Olx0XHRjYXNlIElQX1JFQ1ZPUFRTOlxuMTUzODpcdFx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KFJFQ1ZPUFRTLCBzayk7XG4xNTM5Olx0XHRcdGdvdG8gY29weXZhbDtcbjE1NDA6XHRcdGNhc2UgSVBfUkVUT1BUUzpcbjE1NDE6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChSRVRPUFRTLCBzayk7XG4xNTQyOlx0XHRcdGdvdG8gY29weXZhbDtcbjE1NDM6XHRcdGNhc2UgSVBfUEFTU1NFQzpcbjE1NDQ6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChQQVNTU0VDLCBzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTY4CgkJCQkJCQlvdXRwdXQ6IDM0NQoJCQkJCQkJdGhvdWdodHM6IDI5ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgSVBfTVNGSUxURVIgR2V0c29ja29wdCBJbXBsZW1lbnRhdGlvbiBhbmQgS01TQU4gTmVlZHMgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHRyYWNpbmcgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBgZ2V0c29ja29wdGAgY2FsbCBmb3IgYElQX01TRklMVEVSYCBhbmQgZXZhbHVhdGluZyB3aGV0aGVyIHRoZSByZWNlbnQgY2hhbmdlcyByZXF1aXJlIEtNU0FOLiBUaGUgY29yZSBvZiBpdCBib2lscyBkb3duIHRvIGhvdyB3ZSBoYW5kbGUgdGhlIHZhcmlhYmxlLWxlbmd0aCBzb3VyY2UgbGlzdC4gIFRoZSBpbml0aWFsIGBjb3B5X2Zyb21fc29ja3B0cmAgb3BlcmF0aW9uIGdyYWJzIHRoZSBmaXhlZCBwYXJ0IG9mIGBzdHJ1Y3QgaXBfbXNmaWx0ZXJgICgxNiBieXRlcykgZnJvbSB1c2VyIHNwYWNlLCBwb3B1bGF0aW5nIHRoZSBgbXNmYCBzdHJ1Y3QuIFRoYXQgY292ZXJzIGBpbXNmX211bHRpYWRkcmAsIGBpbXNmX2ludGVyZmFjZWAsIGBpbXNmX2Ztb2RlYCBhbmQgYGltc2ZfbnVtc3JjYC4gIE5vIHBhZGRpbmcgd29ycmllcyBoZXJlLCBhbGwgMzItYml0IGFsaWduZWQuCgpUaGVuIHRoZSBgc29ja29wdF90b19zb2NrcHRyYCBzdHVmZiBzZXRzIHVwIGBpdGVyX2luYCwgYGl0ZXJfb3V0YCBhbmQgdGhlIGBvcHRsZW5gLCB3aGljaCBjYW4gYmUgY3JpdGljYWwuIFRoZSBgaXBfbWNfbXNmZ2V0YCBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGhhcHBlbnMuIEl0IHZhbGlkYXRlcyB0aGUgbXVsdGljYXN0IGFkZHJlc3MsIGZpbmRzIHRoZSByZWxldmFudCBtdWx0aWNhc3Qgc29ja2V0IGxpc3QgZW50cnkgKGBwbWNgKSwgYW5kIHBvcHVsYXRlcyBgbXNmLSZndDtpbXNmX2Ztb2RlYCBhbmQgYG1zZi0mZ3Q7aW1zZl9udW1zcmNgLiAgQ3J1Y2lhbGx5LCBpdCBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2Ygc291cmNlIGFkZHJlc3NlcyAoYGNvcHljb3VudGApIHRvIGNvcHkgYmFjayB0byB1c2VyIHNwYWNlLiBUaGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gYGNvcHljb3VudGAgd2l0aCB0aGUgYElQX01TRklMVEVSX1NJWkUoKWAgbWFjcm8uIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHNvY2tvcHRfZXhwYW5kX291dGAsIHdoaWNoIGV4cGFuZHMgdGhlIG91dHB1dCBpdGVyYXRvciYjMzk7cyBidWZmZXIuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIHVzZXIgbWlnaHQgcHJvdmlkZSBhIHNtYWxsZXIgYG9wdGxlbmAgdGhhbiB0aGUgZmluYWwgc2l6ZSB0aGF0IG5lZWRzIHRvIGJlIGNvcGllZCBiYWNrLiBUaGlzIGV4cGFuc2lvbiBlbnN1cmVzIHRoYXQgdGhlIHVzZXItcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaCBmb3IgdGhlIHBvdGVudGlhbGx5IGxhcmdlciBzb3VyY2UgbGlzdC4KCkkmIzM5O3ZlIGNhcmVmdWxseSBleGFtaW5lZCB0aGUgZGF0YSBmbG93IHRvIGVuc3VyZSB3ZSBkb24mIzM5O3QgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gYG1zZmAgKHRoZSBmaXhlZCBwYXJ0KSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgY29waWVkIG91dC4gYHBzbC0mZ3Q7c2xfYWRkcmAsIHRoZSBmbGV4aWJsZSBhcnJheSBob2xkaW5nIHNvdXJjZSBhZGRyZXNzZXMsIGlzIHNpemVkIGFuZCBwb3B1bGF0ZWQgY29ycmVjdGx5IGJhc2VkIG9uIGBjb3VudGAsIHdoaWNoIGlzIGRlcml2ZWQgZnJvbSBgcG1jLSZndDtzZmxpc3RgIGRhdGEgd2hpY2ggY29udGFpbnMgYHBzbC0mZ3Q7c2xfY291bnRgLiBUaGUgYGNvcHljb3VudGAgZGV0ZXJtaW5lcyB0aGUgYWN0dWFsIG51bWJlciBvZiBzb3VyY2UgYWRkcmVzc2VzIHRvIGNvcHksIGFuZCBpdCBpcyBhbHdheXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBwc2wtJmd0O3NsX2NvdW50YCwgYW5kIGFsbCBgbGVuYCBieXRlcyBmcm9tIGBwc2wtJmd0O3NsX2FkZHJgIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gYG9wdGxlbmAgaXMgaW5pdGlhbGl6ZWQgdG9vLiBJJiMzOTt2ZSBhbHNvIGNoZWNrZWQgdGhlIGhhbmRsaW5nIG9mIGBrdmVjYCBhbmQgZW5zdXJlZCBpdCYjMzk7cyBzYWZlLgoKVGhlIG9yaWdpbmFsIGNvZGUgZGlyZWN0bHkgY2FsY3VsYXRlZCB0aGUgb2Zmc2V0IGFuZCB1c2VkIGBjb3B5X3RvX3NvY2twdHJfb2Zmc2V0YC4gVGhpcyBuZXcgaW1wbGVtZW50YXRpb24gbWFrZXMgdXNlIG9mIGEgYHNvY2tvcHRfZXhwYW5kX291dGAgdXRpbGl0eSB3aGljaCBlbnN1cmVzIG5vIHRydW5jYXRpb24gaGFwcGVucy4gIFRoZSBleHBhbnNpb24gb2YgdGhlIGl0ZXJhdG9yIGlzIHRoZSBrZXkgY2hhbmdlIHRvIGhhbmRsZSB0aGUgdmFyaWFibGUtbGVuZ3RoIHBhcnQgb2YgdGhlIHN0cnVjdC4gRXZlcnl0aGluZyBoYXMgYmVlbiBpbml0aWFsaXplZCBvciBwb3B1bGF0ZWQgYmVmb3JlIGdldHRpbmcgY29waWVkIHRvIHRoZSBpdGVyYXRvciBhbmQgYmFjayB0byB1c2Vyc3BhY2UuCgpCYXNlZCBvbiB0aGUgS01TQU4gZ3VpZGVsaW5lcywgdGhpcyByZWZhY3RvcmluZyBkb2VzbiYjMzk7dCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiAgQWxsIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCB0aGVyZSYjMzk7cyBubyByaXNrIG9mIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgcHJpbWFyaWx5IGFib3V0IHN0cmVhbWxpbmluZyBhbmQgbW9kZXJuaXppbmcgdGhlIGdldHNvY2tvcHQgY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgSVBfTVNGSUxURVIgZ2V0c29ja29wdCBoYW5kbGluZyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgLyBpb3ZfaXRlciBpbmZyYXN0cnVjdHVyZSB2aWEgYHNvY2twdHJfdG9fc29ja29wdCgpYCwgYHNvY2tvcHRfZXhwYW5kX291dCgpYCwgYW5kIGBjb3B5X3RvX2l0ZXIoKWAuIFxuXG4tIEluIGBkb19pcF9nZXRzb2Nrb3B0KClgLCBgbXNmYCBpcyBwb3B1bGF0ZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBjb3B5X2Zyb21fc29ja3B0cigpYCBmb3IgYElQX01TRklMVEVSX1NJWkUoMClgICgxNiBieXRlcyksIGNvdmVyaW5nIGFsbCBzY2FsYXIgZmllbGRzIChgaW1zZl9tdWx0aWFkZHJgLCBgaW1zZl9pbnRlcmZhY2VgLCBgaW1zZl9mbW9kZWAsIGBpbXNmX251bXNyY2ApLCB3aXRoIGBpbXNmX2Ztb2RlYCBhbmQgYGltc2ZfbnVtc3JjYCBzdWJzZXF1ZW50bHkgdXBkYXRlZCBiZWZvcmUgYGNvcHlfdG9faXRlcigpYCBjb3BpZXMgZXhhY3RseSAxNiBieXRlcy4gVGhlcmUgaXMgbm8gc3RydWN0IHBhZGRpbmcgaW4gYHN0cnVjdCBpcF9tc2ZpbHRlcmAuXG4tIFRoZSBtdWx0aWNhc3Qgc291cmNlIGZpbHRlciBhZGRyZXNzIGFycmF5IGBwc2wtXHUwMDNlc2xfYWRkcmAgaXMgY29waWVkIHVwIHRvIGBjb3B5Y291bnQgXHUwMDNjPSBwc2wtXHUwMDNlc2xfY291bnRgIGVsZW1lbnRzLCB3aGljaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEuXG4tIGBzb2Nrb3B0X2V4cGFuZF9vdXQoKWAgYW5kIGBzb2NrcHRyX3RvX3NvY2tvcHQoKWAgb25seSBhZGp1c3QgaXRlcmF0b3IgZGVzY3JpcHRvcnMgZm9yIHVzZXIgbWVtb3J5IGJvdW5kYXJpZXMgYW5kIGRvIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBQb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyBzdWNoIGFzIG91dC1vZi1ib3VuZHMgdXNlciBidWZmZXIgYWNjZXNzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOKSBhbmQgY29weS10by11c2VyIGZhdWx0IGhhbmRsaW5nLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgSVBfTVNGSUxURVIgZ2V0c29ja29wdCBoYW5kbGluZyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgLyBpb3ZfaXRlciBpbmZyYXN0cnVjdHVyZSB2aWEgYHNvY2twdHJfdG9fc29ja29wdCgpYCwgYHNvY2tvcHRfZXhwYW5kX291dCgpYCwgYW5kIGBjb3B5X3RvX2l0ZXIoKWAuIFxuXG4tIEluIGBkb19pcF9nZXRzb2Nrb3B0KClgLCBgbXNmYCBpcyBwb3B1bGF0ZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBjb3B5X2Zyb21fc29ja3B0cigpYCBmb3IgYElQX01TRklMVEVSX1NJWkUoMClgICgxNiBieXRlcyksIGNvdmVyaW5nIGFsbCBzY2FsYXIgZmllbGRzIChgaW1zZl9tdWx0aWFkZHJgLCBgaW1zZl9pbnRlcmZhY2VgLCBgaW1zZl9mbW9kZWAsIGBpbXNmX251bXNyY2ApLCB3aXRoIGBpbXNmX2Ztb2RlYCBhbmQgYGltc2ZfbnVtc3JjYCBzdWJzZXF1ZW50bHkgdXBkYXRlZCBiZWZvcmUgYGNvcHlfdG9faXRlcigpYCBjb3BpZXMgZXhhY3RseSAxNiBieXRlcy4gVGhlcmUgaXMgbm8gc3RydWN0IHBhZGRpbmcgaW4gYHN0cnVjdCBpcF9tc2ZpbHRlcmAuXG4tIFRoZSBtdWx0aWNhc3Qgc291cmNlIGZpbHRlciBhZGRyZXNzIGFycmF5IGBwc2wtXHUwMDNlc2xfYWRkcmAgaXMgY29waWVkIHVwIHRvIGBjb3B5Y291bnQgXHUwMDNjPSBwc2wtXHUwMDNlc2xfY291bnRgIGVsZW1lbnRzLCB3aGljaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEuXG4tIGBzb2Nrb3B0X2V4cGFuZF9vdXQoKWAgYW5kIGBzb2NrcHRyX3RvX3NvY2tvcHQoKWAgb25seSBhZGp1c3QgaXRlcmF0b3IgZGVzY3JpcHRvcnMgZm9yIHVzZXIgbWVtb3J5IGJvdW5kYXJpZXMgYW5kIGRvIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBQb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyBzdWNoIGFzIG91dC1vZi1ib3VuZHMgdXNlciBidWZmZXIgYWNjZXNzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOKSBhbmQgY29weS10by11c2VyIGZhdWx0IGhhbmRsaW5nLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6MjAuNzU3NTE0NTI2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMzg3MDY0NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQX01VTFRJQ0FTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX21jX21zZmdldFwiLFxuICAgIFwiZG9faXBfZ2V0c29ja29wdFwiLFxuICAgIFwic29ja3B0cl90b19zb2Nrb3B0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIElQX01TRklMVEVSIGdldHNvY2tvcHQgaGFuZGxpbmcgdG8gdXNlIHRoZSBuZXcgc29ja29wdF90IC8gaW92X2l0ZXIgaW5mcmFzdHJ1Y3R1cmUgdmlhIGBzb2NrcHRyX3RvX3NvY2tvcHQoKWAsIGBzb2Nrb3B0X2V4cGFuZF9vdXQoKWAsIGFuZCBgY29weV90b19pdGVyKClgLiBcXG5cXG4tIEluIGBkb19pcF9nZXRzb2Nrb3B0KClgLCBgbXNmYCBpcyBwb3B1bGF0ZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBjb3B5X2Zyb21fc29ja3B0cigpYCBmb3IgYElQX01TRklMVEVSX1NJWkUoMClgICgxNiBieXRlcyksIGNvdmVyaW5nIGFsbCBzY2FsYXIgZmllbGRzIChgaW1zZl9tdWx0aWFkZHJgLCBgaW1zZl9pbnRlcmZhY2VgLCBgaW1zZl9mbW9kZWAsIGBpbXNmX251bXNyY2ApLCB3aXRoIGBpbXNmX2Ztb2RlYCBhbmQgYGltc2ZfbnVtc3JjYCBzdWJzZXF1ZW50bHkgdXBkYXRlZCBiZWZvcmUgYGNvcHlfdG9faXRlcigpYCBjb3BpZXMgZXhhY3RseSAxNiBieXRlcy4gVGhlcmUgaXMgbm8gc3RydWN0IHBhZGRpbmcgaW4gYHN0cnVjdCBpcF9tc2ZpbHRlcmAuXFxuLSBUaGUgbXVsdGljYXN0IHNvdXJjZSBmaWx0ZXIgYWRkcmVzcyBhcnJheSBgcHNsLVxcdTAwM2VzbF9hZGRyYCBpcyBjb3BpZWQgdXAgdG8gYGNvcHljb3VudCBcXHUwMDNjPSBwc2wtXFx1MDAzZXNsX2NvdW50YCBlbGVtZW50cywgd2hpY2ggYXJlIGZ1bGx5IGluaXRpYWxpemVkIGtlcm5lbCBkYXRhLlxcbi0gYHNvY2tvcHRfZXhwYW5kX291dCgpYCBhbmQgYHNvY2twdHJfdG9fc29ja29wdCgpYCBvbmx5IGFkanVzdCBpdGVyYXRvciBkZXNjcmlwdG9ycyBmb3IgdXNlciBtZW1vcnkgYm91bmRhcmllcyBhbmQgZG8gbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gUG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgc3VjaCBhcyBvdXQtb2YtYm91bmRzIHVzZXIgYnVmZmVyIGFjY2VzcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTikgYW5kIGNvcHktdG8tdXNlciBmYXVsdCBoYW5kbGluZy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIHRoZSBJUF9NU0ZJTFRFUiBzb2NrZXQgb3B0aW9uIGluIElQdjQgZ2V0c29ja29wdCBieSBjb252ZXJ0aW5nIGlwX21jX21zZmdldCB0byB1c2UgdGhlIHNvY2tvcHRfdCBhYnN0cmFjdGlvbiwgaW50cm9kdWNpbmcgdGhlIHNvY2tvcHRfZXhwYW5kX291dCBoZWxwZXIgdG8gZHluYW1pY2FsbHkgcmVzaXplIHRoZSBvdXRwdXQgYnVmZmVyIGl0ZXJhdG9yLCBhbmQgZXhwb3J0aW5nIHNvY2twdHJfdG9fc29ja29wdC4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgY2FuIGJlIGRpcmVjdGx5IGV4ZXJjaXNlZCBmcm9tIHVzZXJzcGFjZSB2aWEgZ2V0c29ja29wdCgpIGNhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowNzoyMC43NTc1MjA5MTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMDMwMzYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUyNTI1ZmNkNzY5YWRjYmY0OTYyNTdlZDY0OGUzYmNiMzYyMzE1MDBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMTAgMTA6MDc6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZ21wLmggYi9pbmNsdWRlL2xpbnV4L2lnbXAuaFxcbmluZGV4IGEwY2YwMzk4NTE5ZmQuLmUwNzU2MTEzNDRlZjMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9pZ21wLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lnbXAuaFxcbkBAIC0xNCw2ICsxNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb2NrcHRyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L2lnbXAuaFxcdTAwM2VcXG5AQCAtMjczLDcgKzI3NCw3IEBAIGV4dGVybiBpbnQgaXBfbWNfc291cmNlKGludCBhZGQsIGludCBvbW9kZSwgc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRzdHJ1Y3QgaXBfbXJlcV9zb3VyY2UgKm1yZXFzLCBpbnQgaWZpbmRleCk7XFxuIGV4dGVybiBpbnQgaXBfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixpbnQgaWZpbmRleCk7XFxuIGV4dGVybiBpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXFxuLVxcdFxcdFxcdHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pO1xcbitcXHRcXHRcXHRzb2Nrb3B0X3QgKm9wdCk7XFxuIGV4dGVybiBpbnQgaXBfbWNfZ3NmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGdyb3VwX2ZpbHRlciAqZ3NmLFxcbiBcXHRcXHRcXHRzb2NrcHRyX3Qgb3B0dmFsLCBzaXplX3Qgb2Zmc2V0KTtcXG4gZXh0ZXJuIGludCBpcF9tY19zZl9hbGxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIF9fYmUzMiBsb2NhbCwgX19iZTMyIHJtdCxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmhcXG5pbmRleCA0NzAxMDBhZTcxMDc3Li5kZTBlZDM2MmIzNzc5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldC5oXFxuQEAgLTcwLDYgKzcwLDMxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfaW5pdF91c2VyKHNvY2tvcHRfdCAqb3B0LCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLypcXG4rICogR3JvdyBvcHR2YWwgdG8gQHNpemUsIGZvciB0aGUgb3B0aW9ucyB3aG9zZSByZXBseSBpcyBzaXplZCBieSBhIGNvdW50IHRoZVxcbisgKiBjYWxsZXIgbGVmdCBpbiBvcHR2YWwgcmF0aGVyIHRoYW4gYnkgb3B0bGVuLiBUaG9zZSB3cml0ZSBwYXN0IG9wdGxlbiB0b2RheVxcbisgKiBhbmQgdXNlcnNwYWNlIHJlbGllcyBvbiBpdC5cXG4rICpcXG4rICogQ2FsbCBpdCBiZWZvcmUgd3JpdGluZyB0aHJvdWdoIG9wdC1cXHUwMDNlaXRlcl9vdXQ6IGl0IHJlLWFuY2hvcnMgdGhlIGl0ZXJhdG9yIGF0XFxuKyAqIHRoZSBoZWFkIG9mIG9wdHZhbC4gT25seSBhIHVzZXIgYnVmZmVyIGNhbiBiZSBsb25nZXIgdGhhbiB0aGUgb3B0bGVuIHRoZVxcbisgKiBjYWxsZXIgZGVjbGFyZWQsIHNvIGEga2VybmVsLWJhY2tlZCBvcHR2YWwgaXMgcmVmdXNlZCB3aXRoIC1FSU5WQUwuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGludCBzb2Nrb3B0X2V4cGFuZF9vdXQoc29ja29wdF90ICpvcHQsIHNpemVfdCBzaXplKVxcbit7XFxuK1xcdGlmIChzaXplIFxcdTAwM2M9IGlvdl9pdGVyX2NvdW50KFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfb3V0KSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFpdGVyX2lzX3VidWYoXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpb3ZfaXRlcl91YnVmKFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfb3V0LCBJVEVSX0RFU1QsIG9wdC1cXHUwMDNlaXRlcl9vdXQudWJ1Ziwgc2l6ZSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbixcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBrdmVjICprdmVjKTtcXG4rXFxuIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdDtcXG4gc3RydWN0IHBpcGVfaW5vZGVfaW5mbztcXG4gc3RydWN0IGlub2RlO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmNcXG5pbmRleCBkNTYzNTVhY2E3OTc3Li4xNDRmY2ExNThhZGNiIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2lnbXAuY1xcbisrKyBiL25ldC9pcHY0L2lnbXAuY1xcbkBAIC0yNzA5LDggKzI3MDksOCBAQCBpbnQgaXBfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgaW50IGlmaW5kZXgpXFxuIFxcdFxcdGVyciA9IGlwX21jX2xlYXZlX2dyb3VwKHNrLCBcXHUwMDI2aW1yKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbi1pbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXFxuLVxcdFxcdCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxcbitcXG4raW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBzb2Nrb3B0X3QgKm9wdClcXG4ge1xcbiBcXHRpbnQgZXJyLCBsZW4sIGNvdW50LCBjb3B5Y291bnQsIG1zZl9zaXplO1xcbiBcXHRzdHJ1Y3QgaXBfbXJlcW5cXHRpbXI7XFxuQEAgLTI3NTUsMTQgKzI3NTUsMTkgQEAgaW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLFxcbiBcXHRsZW4gPSBmbGV4X2FycmF5X3NpemUocHNsLCBzbF9hZGRyLCBjb3B5Y291bnQpO1xcbiBcXHRtc2YtXFx1MDAzZWltc2ZfbnVtc3JjID0gY291bnQ7XFxuIFxcdG1zZl9zaXplID0gSVBfTVNGSUxURVJfU0laRShjb3B5Y291bnQpO1xcbi1cXHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXFx1MDAyNm1zZl9zaXplLCBzaXplb2YoaW50KSkgfHxcXG4tXFx0ICAgIGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIG1zZiwgSVBfTVNGSUxURVJfU0laRSgwKSkpIHtcXG4rXFxuK1xcdC8qIFRoZSBzb3VyY2UgbGlzdCBpcyBzaXplZCBieSB0aGUgaW1zZl9udW1zcmMgdGhlIGNhbGxlciBsZWZ0IGluXFxuK1xcdCAqIG9wdHZhbCwgbm90IGJ5IG9wdGxlbiwgd2hpY2ggb25seSBoYXMgdG8gY292ZXIgdGhlIGZpeGVkIHBhcnQuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBzb2Nrb3B0X2V4cGFuZF9vdXQob3B0LCBtc2Zfc2l6ZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRvcHQtXFx1MDAzZW9wdGxlbiA9IG1zZl9zaXplO1xcbitcXHRpZiAoY29weV90b19pdGVyKG1zZiwgSVBfTVNGSUxURVJfU0laRSgwKSwgXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpICE9XFxuK1xcdCAgICBJUF9NU0ZJTFRFUl9TSVpFKDApKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0fVxcbi1cXHRpZiAobGVuIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBjb3B5X3RvX3NvY2twdHJfb2Zmc2V0KG9wdHZhbCxcXG4tXFx0XFx0XFx0XFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGlwX21zZmlsdGVyLCBpbXNmX3NsaXN0X2ZsZXgpLFxcbi1cXHRcXHRcXHRcXHQgICBwc2wtXFx1MDAzZXNsX2FkZHIsIGxlbikpXFxuK1xcdGlmIChsZW4gXFx1MDAyNlxcdTAwMjYgY29weV90b19pdGVyKHBzbC1cXHUwMDNlc2xfYWRkciwgbGVuLCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gbGVuKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0cmV0dXJuIDA7XFxuIGRvbmU6XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXFxuaW5kZXggYTU1ZWYzMjdlYzkzMi4uYzU4ZTU2NWYyYTVhYSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXFxuKysrIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xcbkBAIC0xNzA2LDYgKzE3MDYsOCBAQCBpbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdGNhc2UgSVBfTVNGSUxURVI6XFxuIFxcdHtcXG4gXFx0XFx0c3RydWN0IGlwX21zZmlsdGVyIG1zZjtcXG4rXFx0XFx0c3RydWN0IGt2ZWMga3ZlYztcXG4rXFx0XFx0c29ja29wdF90IG9wdDtcXG4gXFxuIFxcdFxcdGlmIChsZW4gXFx1MDAzYyBJUF9NU0ZJTFRFUl9TSVpFKDApKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuQEAgLTE3MTUsNyArMTcxNywxMyBAQCBpbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuLVxcdFxcdGVyciA9IGlwX21jX21zZmdldChzaywgXFx1MDAyNm1zZiwgb3B0dmFsLCBvcHRsZW4pO1xcbitcXHRcXHRlcnIgPSBzb2NrcHRyX3RvX3NvY2tvcHQoXFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4sIFxcdTAwMjZrdmVjKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRlcnIgPSBpcF9tY19tc2ZnZXQoc2ssIFxcdTAwMjZtc2YsIFxcdTAwMjZvcHQpO1xcbitcXHRcXHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXFx1MDAyNm9wdC5vcHRsZW4sIHNpemVvZihpbnQpKSlcXG4rXFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFx0Y2FzZSBNQ0FTVF9NU0ZJTFRFUjpcXG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXFxuaW5kZXggYzA1ZDg2ZTYzYWJmNy4uMjlhMGY3ZjhlMmNhYiAxMDA2NDRcXG4tLS0gYS9uZXQvc29ja2V0LmNcXG4rKysgYi9uZXQvc29ja2V0LmNcXG5AQCAtMjQzNyw4ICsyNDM3LDggQEAgSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShib29sIHRjcF9icGZfYnlwYXNzX2dldHNvY2tvcHQoaW50IGxldmVsLFxcbiAgKiBJdCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCBib3RoIGlvdiBwb2ludHMgdG8gdGhlIHNhbWUgZGF0YSwgYnV0LFxcbiAgKiAuaXRlcl9pbiBpcyByZWFkLW9ubHkgYW5kIC5pdGVyX291dCBpcyB3cml0ZS1vbmx5IGJ5IHRoZSBwcm90b2NvbCBjYWxsYmFja3NcXG4gICovXFxuLXN0YXRpYyBpbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLFxcbi1cXHRcXHRcXHQgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBzdHJ1Y3Qga3ZlYyAqa3ZlYylcXG4raW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCxcXG4rXFx0XFx0ICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIHN0cnVjdCBrdmVjICprdmVjKVxcbiB7XFxuIFxcdGludCBrb3B0bGVuO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6MjEuMzc4MzgzNDE3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2ODUzNjExOTk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUF9NVUxUSUNBU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9tY19tc2ZnZXRcIixcbiAgICBcImRvX2lwX2dldHNvY2tvcHRcIixcbiAgICBcInNvY2twdHJfdG9fc29ja29wdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgSVBfTVNGSUxURVIgc29ja2V0IG9wdGlvbiBpbiBJUHY0IGdldHNvY2tvcHQgYnkgY29udmVydGluZyBpcF9tY19tc2ZnZXQgdG8gdXNlIHRoZSBzb2Nrb3B0X3QgYWJzdHJhY3Rpb24sIGludHJvZHVjaW5nIHRoZSBzb2Nrb3B0X2V4cGFuZF9vdXQgaGVscGVyIHRvIGR5bmFtaWNhbGx5IHJlc2l6ZSB0aGUgb3V0cHV0IGJ1ZmZlciBpdGVyYXRvciwgYW5kIGV4cG9ydGluZyBzb2NrcHRyX3RvX3NvY2tvcHQuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGNhbiBiZSBkaXJlY3RseSBleGVyY2lzZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGdldHNvY2tvcHQoKSBjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MjUyNWZjZDc2OWFkY2JmNDk2MjU3ZWQ2NDhlM2JjYjM2MjMxNTAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTA6MDc6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lnbXAuaCBiL2luY2x1ZGUvbGludXgvaWdtcC5oXG5pbmRleCBhMGNmMDM5ODUxOWZkLi5lMDc1NjExMzQ0ZWYzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pZ21wLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaWdtcC5oXG5AQCAtMTQsNiArMTQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvY2twdHIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaWdtcC5oXHUwMDNlXG5AQCAtMjczLDcgKzI3NCw3IEBAIGV4dGVybiBpbnQgaXBfbWNfc291cmNlKGludCBhZGQsIGludCBvbW9kZSwgc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRzdHJ1Y3QgaXBfbXJlcV9zb3VyY2UgKm1yZXFzLCBpbnQgaWZpbmRleCk7XG4gZXh0ZXJuIGludCBpcF9tY19tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLGludCBpZmluZGV4KTtcbiBleHRlcm4gaW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLFxuLVx0XHRcdHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pO1xuK1x0XHRcdHNvY2tvcHRfdCAqb3B0KTtcbiBleHRlcm4gaW50IGlwX21jX2dzZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBncm91cF9maWx0ZXIgKmdzZixcbiBcdFx0XHRzb2NrcHRyX3Qgb3B0dmFsLCBzaXplX3Qgb2Zmc2V0KTtcbiBleHRlcm4gaW50IGlwX21jX3NmX2FsbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgX19iZTMyIGxvY2FsLCBfX2JlMzIgcm10LFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0LmggYi9pbmNsdWRlL2xpbnV4L25ldC5oXG5pbmRleCA0NzAxMDBhZTcxMDc3Li5kZTBlZDM2MmIzNzc5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXQuaFxuQEAgLTcwLDYgKzcwLDMxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfaW5pdF91c2VyKHNvY2tvcHRfdCAqb3B0LCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogR3JvdyBvcHR2YWwgdG8gQHNpemUsIGZvciB0aGUgb3B0aW9ucyB3aG9zZSByZXBseSBpcyBzaXplZCBieSBhIGNvdW50IHRoZVxuKyAqIGNhbGxlciBsZWZ0IGluIG9wdHZhbCByYXRoZXIgdGhhbiBieSBvcHRsZW4uIFRob3NlIHdyaXRlIHBhc3Qgb3B0bGVuIHRvZGF5XG4rICogYW5kIHVzZXJzcGFjZSByZWxpZXMgb24gaXQuXG4rICpcbisgKiBDYWxsIGl0IGJlZm9yZSB3cml0aW5nIHRocm91Z2ggb3B0LVx1MDAzZWl0ZXJfb3V0OiBpdCByZS1hbmNob3JzIHRoZSBpdGVyYXRvciBhdFxuKyAqIHRoZSBoZWFkIG9mIG9wdHZhbC4gT25seSBhIHVzZXIgYnVmZmVyIGNhbiBiZSBsb25nZXIgdGhhbiB0aGUgb3B0bGVuIHRoZVxuKyAqIGNhbGxlciBkZWNsYXJlZCwgc28gYSBrZXJuZWwtYmFja2VkIG9wdHZhbCBpcyByZWZ1c2VkIHdpdGggLUVJTlZBTC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBzb2Nrb3B0X2V4cGFuZF9vdXQoc29ja29wdF90ICpvcHQsIHNpemVfdCBzaXplKVxuK3tcbitcdGlmIChzaXplIFx1MDAzYz0gaW92X2l0ZXJfY291bnQoXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFpdGVyX2lzX3VidWYoXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aW92X2l0ZXJfdWJ1ZihcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQsIElURVJfREVTVCwgb3B0LVx1MDAzZWl0ZXJfb3V0LnVidWYsIHNpemUpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCBzb2NrcHRyX3RvX3NvY2tvcHQoc29ja29wdF90ICpvcHQsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4sXG4rXHRcdCAgICAgICBzdHJ1Y3Qga3ZlYyAqa3ZlYyk7XG4rXG4gc3RydWN0IHBvbGxfdGFibGVfc3RydWN0O1xuIHN0cnVjdCBwaXBlX2lub2RlX2luZm87XG4gc3RydWN0IGlub2RlO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lnbXAuYyBiL25ldC9pcHY0L2lnbXAuY1xuaW5kZXggZDU2MzU1YWNhNzk3Ny4uMTQ0ZmNhMTU4YWRjYiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lnbXAuY1xuKysrIGIvbmV0L2lwdjQvaWdtcC5jXG5AQCAtMjcwOSw4ICsyNzA5LDggQEAgaW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIGludCBpZmluZGV4KVxuIFx0XHRlcnIgPSBpcF9tY19sZWF2ZV9ncm91cChzaywgXHUwMDI2aW1yKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuLWludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixcbi1cdFx0IHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXG4rXG4raW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRpbnQgZXJyLCBsZW4sIGNvdW50LCBjb3B5Y291bnQsIG1zZl9zaXplO1xuIFx0c3RydWN0IGlwX21yZXFuXHRpbXI7XG5AQCAtMjc1NSwxNCArMjc1NSwxOSBAQCBpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXG4gXHRsZW4gPSBmbGV4X2FycmF5X3NpemUocHNsLCBzbF9hZGRyLCBjb3B5Y291bnQpO1xuIFx0bXNmLVx1MDAzZWltc2ZfbnVtc3JjID0gY291bnQ7XG4gXHRtc2Zfc2l6ZSA9IElQX01TRklMVEVSX1NJWkUoY29weWNvdW50KTtcbi1cdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZtc2Zfc2l6ZSwgc2l6ZW9mKGludCkpIHx8XG4tXHQgICAgY29weV90b19zb2NrcHRyKG9wdHZhbCwgbXNmLCBJUF9NU0ZJTFRFUl9TSVpFKDApKSkge1xuK1xuK1x0LyogVGhlIHNvdXJjZSBsaXN0IGlzIHNpemVkIGJ5IHRoZSBpbXNmX251bXNyYyB0aGUgY2FsbGVyIGxlZnQgaW5cbitcdCAqIG9wdHZhbCwgbm90IGJ5IG9wdGxlbiwgd2hpY2ggb25seSBoYXMgdG8gY292ZXIgdGhlIGZpeGVkIHBhcnQuXG4rXHQgKi9cbitcdGVyciA9IHNvY2tvcHRfZXhwYW5kX291dChvcHQsIG1zZl9zaXplKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRvcHQtXHUwMDNlb3B0bGVuID0gbXNmX3NpemU7XG4rXHRpZiAoY29weV90b19pdGVyKG1zZiwgSVBfTVNGSUxURVJfU0laRSgwKSwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPVxuK1x0ICAgIElQX01TRklMVEVSX1NJWkUoMCkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0fVxuLVx0aWYgKGxlbiBcdTAwMjZcdTAwMjZcbi1cdCAgICBjb3B5X3RvX3NvY2twdHJfb2Zmc2V0KG9wdHZhbCxcbi1cdFx0XHRcdCAgIG9mZnNldG9mKHN0cnVjdCBpcF9tc2ZpbHRlciwgaW1zZl9zbGlzdF9mbGV4KSxcbi1cdFx0XHRcdCAgIHBzbC1cdTAwM2VzbF9hZGRyLCBsZW4pKVxuK1x0aWYgKGxlbiBcdTAwMjZcdTAwMjYgY29weV90b19pdGVyKHBzbC1cdTAwM2VzbF9hZGRyLCBsZW4sIFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gbGVuKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdHJldHVybiAwO1xuIGRvbmU6XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbmluZGV4IGE1NWVmMzI3ZWM5MzIuLmM1OGU1NjVmMmE1YWEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXG4rKysgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXG5AQCAtMTcwNiw2ICsxNzA2LDggQEAgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0Y2FzZSBJUF9NU0ZJTFRFUjpcbiBcdHtcbiBcdFx0c3RydWN0IGlwX21zZmlsdGVyIG1zZjtcbitcdFx0c3RydWN0IGt2ZWMga3ZlYztcbitcdFx0c29ja29wdF90IG9wdDtcbiBcbiBcdFx0aWYgKGxlbiBcdTAwM2MgSVBfTVNGSUxURVJfU0laRSgwKSkge1xuIFx0XHRcdGVyciA9IC1FSU5WQUw7XG5AQCAtMTcxNSw3ICsxNzE3LDEzIEBAIGludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4tXHRcdGVyciA9IGlwX21jX21zZmdldChzaywgXHUwMDI2bXNmLCBvcHR2YWwsIG9wdGxlbik7XG4rXHRcdGVyciA9IHNvY2twdHJfdG9fc29ja29wdChcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcdTAwMjZrdmVjKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0ZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCBcdTAwMjZtc2YsIFx1MDAyNm9wdCk7XG4rXHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXG4rXHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXHRjYXNlIE1DQVNUX01TRklMVEVSOlxuZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuY1xuaW5kZXggYzA1ZDg2ZTYzYWJmNy4uMjlhMGY3ZjhlMmNhYiAxMDA2NDRcbi0tLSBhL25ldC9zb2NrZXQuY1xuKysrIGIvbmV0L3NvY2tldC5jXG5AQCAtMjQzNyw4ICsyNDM3LDggQEAgSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShib29sIHRjcF9icGZfYnlwYXNzX2dldHNvY2tvcHQoaW50IGxldmVsLFxuICAqIEl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IGJvdGggaW92IHBvaW50cyB0byB0aGUgc2FtZSBkYXRhLCBidXQsXG4gICogLml0ZXJfaW4gaXMgcmVhZC1vbmx5IGFuZCAuaXRlcl9vdXQgaXMgd3JpdGUtb25seSBieSB0aGUgcHJvdG9jb2wgY2FsbGJhY2tzXG4gICovXG4tc3RhdGljIGludCBzb2NrcHRyX3RvX3NvY2tvcHQoc29ja29wdF90ICpvcHQsIHNvY2twdHJfdCBvcHR2YWwsXG4tXHRcdFx0ICAgICAgc29ja3B0cl90IG9wdGxlbiwgc3RydWN0IGt2ZWMgKmt2ZWMpXG4raW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCxcbitcdFx0ICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIHN0cnVjdCBrdmVjICprdmVjKVxuIHtcbiBcdGludCBrb3B0bGVuO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6MjEuMzc4Mzg2ODU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDgwOTg3NzE3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IFdvcnRoIHRoZSBGdXp6PyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyouIEZyb20gYSBxdWljayBsb29rLCBpdCBzZWVtcyBsaWtlIGEgc29ja2V0IG9wdGlvbiBjaGFuZ2UgcmVsYXRlZCB0byBJR01QIGFuZCBJUCBtdWx0aWNhc3QgZmlsdGVyaW5nLiBTcGVjaWZpY2FsbHksIHRoZSBzaWduYXR1cmUgb2YgYGlwX21jX21zZmdldGAgaW4gYGlnbXAuaGAgaGFzIGJlZW4gcmVmYWN0b3JlZCwgc3dpdGNoaW5nIGZyb20gcG9pbnRlcnMgdG8gcG9pbnRlcnMgYW5kIGxlbmd0aHMgdG8gYSBgc29ja29wdF90YCBzdHJ1Y3QsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgc2hpZnQuIFRoZSBhZGRpdGlvbiBvZiBgc29ja29wdF9leHBhbmRfb3V0YCBhbmQgYHNvY2twdHJfdG9fc29ja29wdGAgaW4gYG5ldC5oYCBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSwgcHJvdmlkaW5nIGhlbHBlcnMgZm9yIG1hbmlwdWxhdGluZyB0aGlzIG5ldyBzdHJ1Y3QgYW5kIGNvbnZlcnRpbmcgZXhpc3RpbmcgcG9pbnRlciByZXByZXNlbnRhdGlvbnMuIFRoZSBgaWdtcC5jYCBhbmQgYGlwX3NvY2tnbHVlLmNgIHVwZGF0ZXMgc2hvdyB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYWRhcHRpbmcgdG8gdGhlIGBzb2Nrb3B0X3RgIGNoYW5nZSwgYW5kIGBzb2NrZXQuY2AgaXMgYmVpbmcgbW9kaWZpZWQgdG8gbWFrZSBgc29ja3B0cl90b19zb2Nrb3B0YCBub24tc3RhdGljLCBhbGxvd2luZyBpdCB0byBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IGBkb19pcF9nZXRzb2Nrb3B0YCBjYWxsLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGNvZGUsIGRlYWxpbmcgd2l0aCBJUHY0IHNvY2tldCBvcHRpb25zLCBhbmQgZGlyZWN0bHkgcmVhY2hhYmxlIHZpYSB0aGUgYGdldHNvY2tvcHRgIHN5c2NhbGwuIFRoYXQgbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQuIFN0YW5kYXJkIHVzZXIgc3BhY2UgYWNjZXNzIHRvIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgdmlhIGEgc3lzdGVtIGNhbGwgaXMgYW4gaWRlYWwgc3BvdC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzOiBJIG5lZWQgdG8gZ2V0IHRoZSBleGFjdCBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9ucyBhZmZlY3RlZCB0byByZWZpbmUgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIEknbGwgcHJvYmFibHkgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgYSBiZXR0ZXIgY29udGV4dCBmb3IgdGhlIGNvZGUuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2Qgc3BvdCBmb3IgYSBmb2N1c2VkIGZ1enplci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgwMSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA3OjI2LjE4ODI2NjcwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODY1ODg3MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2twdHJfdG9fc29ja29wdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldC5oPTgyPXN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfZXhwYW5kX291dChzb2Nrb3B0X3QgKm9wdCwgc2l6ZV90IHNpemUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldC5oLTk0LVxcbmluY2x1ZGUvbGludXgvbmV0Lmg6OTU6aW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbixcXG5pbmNsdWRlL2xpbnV4L25ldC5oLTk2LVxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZlYyAqa3ZlYyk7XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE1MDc9aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzE5LVxcdFxcdH1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE3MjA6XFx0XFx0ZXJyID0gc29ja3B0cl90b19zb2Nrb3B0KFxcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcXHUwMDI2a3ZlYyk7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzIxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvc29ja2V0LmM9MjQzMT1JTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKGJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsXFxuLS1cXG5uZXQvc29ja2V0LmMtMjQzOS0gKi9cXG5uZXQvc29ja2V0LmM6MjQ0MDppbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLFxcbm5ldC9zb2NrZXQuYy0yNDQxLVxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBzdHJ1Y3Qga3ZlYyAqa3ZlYylcXG4tLVxcbm5ldC9zb2NrZXQuYz0yNDY2PWludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcXG4tLVxcbm5ldC9zb2NrZXQuYy0yNDg1LVxcdH0gZWxzZSBpZiAob3BzLVxcdTAwM2VnZXRzb2Nrb3B0X2l0ZXIpIHtcXG5uZXQvc29ja2V0LmM6MjQ4NjpcXHRcXHRlcnIgPSBzb2NrcHRyX3RvX3NvY2tvcHQoXFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4sIFxcdTAwMjZrdmVjKTtcXG5uZXQvc29ja2V0LmMtMjQ4Ny1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowNzoyOS4wNTQxNTkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2Nzc5OTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSUdNUCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgaG93IG11bHRpY2FzdCBtZW1iZXJzaGlwIGluZm9ybWF0aW9uIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIElQdjQgY29udGV4dC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGUgaXNzdWUgSSdtIHRyYWNraW5nIGlzIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgcmV0cmlldmVzIG9yIHNldHMgbXVsdGljYXN0IG1lbWJlcnNoaXAgaW5mb3JtYXRpb24uIFRoZXJlZm9yZSwgSSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgaXBfbWNfbXNmZ2V0YCBmdW5jdGlvbi4gSXQncyBhbG1vc3QgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZXhwbG9yaW5nIGFueXRoaW5nIElHTVAtcmVsYXRlZC4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiwgcmVzaWRpbmcgd2l0aGluIHRoZSBgbmV0L2lwdjQvaWdtcC5jYCBmaWxlLCBwbGF5cyBhIHBpdm90YWwgcm9sZS4gSSdtIGhvcGluZyBJIGNhbiBmaW5kIHRoZSBjbHVlIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDc2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6MzEuMDIxOTYxOTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1NDY3NTg1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9tY19tc2ZnZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9pZ21wLmg9Mjc1PWV4dGVybiBpbnQgaXBfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixpbnQgaWZpbmRleCk7XFxuaW5jbHVkZS9saW51eC9pZ21wLmg6Mjc2OmV4dGVybiBpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXFxuaW5jbHVkZS9saW51eC9pZ21wLmgtMjc3LVxcdFxcdFxcdHNvY2tvcHRfdCAqb3B0KTtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0yNjIyPWludCBpcF9tY19tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBpbnQgaWZpbmRleClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yNzEyLVxcbm5ldC9pcHY0L2lnbXAuYzoyNzEzOmludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgc29ja29wdF90ICpvcHQpXFxubmV0L2lwdjQvaWdtcC5jLTI3MTQte1xcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xNTA3PWludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTcyMy1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE3MjQ6XFx0XFx0ZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCBcXHUwMDI2bXNmLCBcXHUwMDI2b3B0KTtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3MjUtXFx0XFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFxcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA3OjMzLjM3NjY0NjI1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNDM5NTY5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGlwX3NvY2tnbHVlLmNgKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcyBzcGVjaWZpYyBzaXR1YXRpb24uIEknbSBnb2luZyB0byBoZWFkIGRpcmVjdGx5IGludG8gdGhlIGBpcF9zb2NrZ2x1ZS5jYCBzb3VyY2UgY29kZSwgYW5kIEknbSB0YXJnZXRpbmcgYXJvdW5kIGxpbmUgMTcwMC4gVGhhdCdzIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCDigJMgSSdtIGhvcGluZyB0aGF0IGFyZWEgd2lsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nLiBJIGV4cGVjdCB0aGF0IGFyb3VuZCB0aGF0IHJlZ2lvbiBJIGNhbiB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZS4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBjdXJyZW50IHN0YXRlLCBhbmQgdGhpcyBmZWVscyBsaWtlIGEgc3Ryb25nIHN0YXJ0aW5nIHBvaW50IHRvIGFjaGlldmUgdGhhdCBnb2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjU1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6MzguNDIwNjA1Nzg3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX3NvY2tnbHVlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcwMDpcXHRcXG4xNzAxOlxcdFxcdGlmIChuZWVkc19ydG5sKVxcbjE3MDI6XFx0XFx0XFx0cnRubF9sb2NrKCk7XFxuMTcwMzpcXHRcXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XFxuMTcwNDpcXHRcXG4xNzA1OlxcdFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbjE3MDY6XFx0XFx0Y2FzZSBJUF9NU0ZJTFRFUjpcXG4xNzA3OlxcdFxcdHtcXG4xNzA4OlxcdFxcdFxcdHN0cnVjdCBpcF9tc2ZpbHRlciBtc2Y7XFxuMTcwOTpcXHRcXHRcXHRzdHJ1Y3Qga3ZlYyBrdmVjO1xcbjE3MTA6XFx0XFx0XFx0c29ja29wdF90IG9wdDtcXG4xNzExOlxcdFxcbjE3MTI6XFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNjIElQX01TRklMVEVSX1NJWkUoMCkpIHtcXG4xNzEzOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTcxNDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xNzE1OlxcdFxcdFxcdH1cXG4xNzE2OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2bXNmLCBvcHR2YWwsIElQX01TRklMVEVSX1NJWkUoMCkpKSB7XFxuMTcxNzpcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjE3MTg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTcxOTpcXHRcXHRcXHR9XFxuMTcyMDpcXHRcXHRcXHRlcnIgPSBzb2NrcHRyX3RvX3NvY2tvcHQoXFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4sIFxcdTAwMjZrdmVjKTtcXG4xNzIxOlxcdFxcdFxcdGlmIChlcnIpXFxuMTcyMjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xNzIzOlxcdFxcbjE3MjQ6XFx0XFx0XFx0ZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCBcXHUwMDI2bXNmLCBcXHUwMDI2b3B0KTtcXG4xNzI1OlxcdFxcdFxcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcXHUwMDI2b3B0Lm9wdGxlbiwgc2l6ZW9mKGludCkpKVxcbjE3MjY6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4xNzI3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3Mjg6XFx0XFx0fVxcbjE3Mjk6XFx0XFx0Y2FzZSBNQ0FTVF9NU0ZJTFRFUjpcXG4xNzMwOlxcdFxcdFxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxcbjE3MzE6XFx0XFx0XFx0XFx0ZXJyID0gY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcihzaywgb3B0dmFsLCBvcHRsZW4sXFxuMTczMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBsZW4pO1xcbjE3MzM6XFx0XFx0XFx0ZWxzZVxcbjE3MzQ6XFx0XFx0XFx0XFx0ZXJyID0gaXBfZ2V0X21jYXN0X21zZmlsdGVyKHNrLCBvcHR2YWwsIG9wdGxlbiwgbGVuKTtcXG4xNzM1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3MzY6XFx0XFx0Y2FzZSBJUF9QUk9UT0NPTDpcXG4xNzM3OlxcdFxcdFxcdHZhbCA9IGluZXRfc2soc2spLVxcdTAwM2VpbmV0X251bTtcXG4xNzM4OlxcdFxcdFxcdGJyZWFrO1xcbjE3Mzk6XFx0XFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6MzguNDIwNzU1MDk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUzNjQyODg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSUdNUCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gZXhhbWluZSB0aGUgSUdNUCBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBtdWx0aWNhc3Qgc291cmNlIGZpbHRlcmluZyBpcyBoYW5kbGVkLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBuZXQvaXB2NC9pZ21wLmNgLiBUaGUgY29yZSBsb2dpYyBwcm9iYWJseSByZXNpZGVzIG5lYXIgYGlwX21jX21zZmdldGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIHJldHJpZXZlcyB0aGUgTXVsdGljYXN0IFNvdXJjZSBGaWx0ZXIgKE1TRikgc3RhdGUuIEknbSBhc3N1bWluZyBpdCBoYW5kbGVzIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgbG9va3VwcywgYW5kIGFueSBhc3NvY2lhdGVkIGxvY2tpbmcgdG8gZW5zdXJlIHRocmVhZCBzYWZldHkgd2hlbiBhIG11bHRpY2FzdCBncm91cCBtZW1iZXIgYWRkcyBvciByZW1vdmVzIGEgc291cmNlLiBJ4oCZbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgYWxnb3JpdGhtcyB1c2VkIGZvciBtYXRjaGluZywgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSByb3V0aW5nIHRhYmxlLCBhcyB0aGF0J3Mgd2hlcmUgdGhlIGFjdHVhbCBmb3J3YXJkaW5nIGRlY2lzaW9ucyBzdGVtIGZyb20sIGJhc2VkIG9uIHRoZSBmaWx0ZXIgaW5mb3JtYXRpb24uIEl0J3MgbGlrZWx5IHRoYXQgaXQgcGVyZm9ybXMgc29tZSBzb3J0IG9mIGhhc2gtYmFzZWQgbG9va3VwIHRvIG9wdGltaXplIHRoZSBNU0YgcmV0cmlldmFsLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nOiB3aGF0IGhhcHBlbnMgaWYgdGhlIGVudHJ5IGlzbid0IGZvdW5kLCBvciBpZiB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50PyBUaGlzIHdpbGwgYmUgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MzcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA3OjQzLjk1NzE4ODM5MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjM5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaWdtcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MTAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3MTA6XFx0XFx0cmV0dXJuIGVycjtcXG4yNzExOlxcdH1cXG4yNzEyOlxcdFxcbjI3MTM6XFx0aW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBzb2Nrb3B0X3QgKm9wdClcXG4yNzE0OlxcdHtcXG4yNzE1OlxcdFxcdGludCBlcnIsIGxlbiwgY291bnQsIGNvcHljb3VudCwgbXNmX3NpemU7XFxuMjcxNjpcXHRcXHRzdHJ1Y3QgaXBfbXJlcW5cXHRpbXI7XFxuMjcxNzpcXHRcXHRfX2JlMzIgYWRkciA9IG1zZi1cXHUwMDNlaW1zZl9tdWx0aWFkZHI7XFxuMjcxODpcXHRcXHRzdHJ1Y3QgaXBfbWNfc29ja2xpc3QgKnBtYztcXG4yNzE5OlxcdFxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjtcXG4yNzIwOlxcdFxcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTtcXG4yNzIxOlxcdFxcdHN0cnVjdCBpcF9zZl9zb2NrbGlzdCAqcHNsO1xcbjI3MjI6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xcbjI3MjM6XFx0XFxuMjcyNDpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbjI3MjU6XFx0XFxuMjcyNjpcXHRcXHRpZiAoIWlwdjRfaXNfbXVsdGljYXN0KGFkZHIpKVxcbjI3Mjc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjcyODpcXHRcXG4yNzI5OlxcdFxcdGltci5pbXJfbXVsdGlhZGRyLnNfYWRkciA9IG1zZi1cXHUwMDNlaW1zZl9tdWx0aWFkZHI7XFxuMjczMDpcXHRcXHRpbXIuaW1yX2FkZHJlc3Muc19hZGRyID0gbXNmLVxcdTAwM2VpbXNmX2ludGVyZmFjZTtcXG4yNzMxOlxcdFxcdGltci5pbXJfaWZpbmRleCA9IDA7XFxuMjczMjpcXHRcXHRpbl9kZXYgPSBpcF9tY19maW5kX2RldihuZXQsIFxcdTAwMjZpbXIpO1xcbjI3MzM6XFx0XFxuMjczNDpcXHRcXHRpZiAoIWluX2Rldikge1xcbjI3MzU6XFx0XFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4yNzM2OlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4yNzM3OlxcdFxcdH1cXG4yNzM4OlxcdFxcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xcbjI3Mzk6XFx0XFxuMjc0MDpcXHRcXHRmb3JfZWFjaF9wbWNfcnRubChpbmV0LCBwbWMpIHtcXG4yNzQxOlxcdFxcdFxcdGlmIChwbWMtXFx1MDAzZW11bHRpLmltcl9tdWx0aWFkZHIuc19hZGRyID09IG1zZi1cXHUwMDNlaW1zZl9tdWx0aWFkZHIgXFx1MDAyNlxcdTAwMjZcXG4yNzQyOlxcdFxcdFxcdCAgICBwbWMtXFx1MDAzZW11bHRpLmltcl9pZmluZGV4ID09IGltci5pbXJfaWZpbmRleClcXG4yNzQzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3NDQ6XFx0XFx0fVxcbjI3NDU6XFx0XFx0aWYgKCFwbWMpXFx0XFx0LyogbXVzdCBoYXZlIGEgcHJpb3Igam9pbiAqL1xcbjI3NDY6XFx0XFx0XFx0Z290byBkb25lO1xcbjI3NDc6XFx0XFx0bXNmLVxcdTAwM2VpbXNmX2Ztb2RlID0gcG1jLVxcdTAwM2VzZm1vZGU7XFxuMjc0ODpcXHRcXHRwc2wgPSBydG5sX2RlcmVmZXJlbmNlKHBtYy1cXHUwMDNlc2ZsaXN0KTtcXG4yNzQ5OlxcdFxcdGlmICghcHNsKSB7XFxuMjc1MDpcXHRcXHRcXHRjb3VudCA9IDA7XFxuMjc1MTpcXHRcXHR9IGVsc2Uge1xcbjI3NTI6XFx0XFx0XFx0Y291bnQgPSBwc2wtXFx1MDAzZXNsX2NvdW50O1xcbjI3NTM6XFx0XFx0fVxcbjI3NTQ6XFx0XFx0Y29weWNvdW50ID0gY291bnQgXFx1MDAzYyBtc2YtXFx1MDAzZWltc2ZfbnVtc3JjID8gY291bnQgOiBtc2YtXFx1MDAzZWltc2ZfbnVtc3JjO1xcbjI3NTU6XFx0XFx0bGVuID0gZmxleF9hcnJheV9zaXplKHBzbCwgc2xfYWRkciwgY29weWNvdW50KTtcXG4yNzU2OlxcdFxcdG1zZi1cXHUwMDNlaW1zZl9udW1zcmMgPSBjb3VudDtcXG4yNzU3OlxcdFxcdG1zZl9zaXplID0gSVBfTVNGSUxURVJfU0laRShjb3B5Y291bnQpO1xcbjI3NTg6XFx0XFxuMjc1OTpcXHRcXHQvKiBUaGUgc291cmNlIGxpc3QgaXMgc2l6ZWQgYnkgdGhlIGltc2ZfbnVtc3JjIHRoZSBjYWxsZXIgbGVmdCBpblxcbjI3NjA6XFx0XFx0ICogb3B0dmFsLCBub3QgYnkgb3B0bGVuLCB3aGljaCBvbmx5IGhhcyB0byBjb3ZlciB0aGUgZml4ZWQgcGFydC5cXG4yNzYxOlxcdFxcdCAqL1xcbjI3NjI6XFx0XFx0ZXJyID0gc29ja29wdF9leHBhbmRfb3V0KG9wdCwgbXNmX3NpemUpO1xcbjI3NjM6XFx0XFx0aWYgKGVycilcXG4yNzY0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjc2NTpcXHRcXG4yNzY2OlxcdFxcdG9wdC1cXHUwMDNlb3B0bGVuID0gbXNmX3NpemU7XFxuMjc2NzpcXHRcXHRpZiAoY29weV90b19pdGVyKG1zZiwgSVBfTVNGSUxURVJfU0laRSgwKSwgXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpICE9XFxuMjc2ODpcXHRcXHQgICAgSVBfTVNGSUxURVJfU0laRSgwKSlcXG4yNzY5OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjI3NzA6XFx0XFx0aWYgKGxlbiBcXHUwMDI2XFx1MDAyNiBjb3B5X3RvX2l0ZXIocHNsLVxcdTAwM2VzbF9hZGRyLCBsZW4sIFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXFxuMjc3MTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yNzcyOlxcdFxcdHJldHVybiAwO1xcbjI3NzM6XFx0ZG9uZTpcXG4yNzc0OlxcdFxcdHJldHVybiBlcnI7XFxuMjc3NTpcXHR9XFxuMjc3NjpcXHRcXG4yNzc3OlxcdGludCBpcF9tY19nc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZ3JvdXBfZmlsdGVyICpnc2YsXFxuMjc3ODpcXHRcXHRcXHQgc29ja3B0cl90IG9wdHZhbCwgc2l6ZV90IHNzX29mZnNldClcXG4yNzc5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6NDMuOTU3NTMxNTYyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NjEzOTQ2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHNvY2twdHJfdG9fc29ja29wdGAgaW4gYG5ldC9zb2NrZXQuY2AqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHNvbWV0aGluZyBpbiB0aGUgbmV0d29yayBzb2NrZXQgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBgc29ja3B0cl90b19zb2Nrb3B0YC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSBpdCBzb3VuZHMgbGlrZSBpdCdzIGhhbmRsaW5nIHRoZSB0cmFuc2xhdGlvbiBiZXR3ZWVuIGEgZ2VuZXJpYyBzb2NrZXQgcG9pbnRlciBhbmQgdGhlIHNvY2tldCBvcHRpb25zLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhIHRvIHVuZGVyc3RhbmQsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHN1YnRsZSBiZWhhdmlvciBjaGFuZ2VzLiBJIG5lZWQgdG8gYmUgdGhpbmtpbmcgYWJvdXQgZGF0YSBzdHJ1Y3R1cmVzIGhlcmUuIFdoYXQga2luZCBvZiBwb2ludGVyIGlzIGBzb2NrcHRyYD8gSXMgaXQgYSB1c2VyLXNwYWNlIHBvaW50ZXI/IEtlcm5lbCBzcGFjZT8gVGhpcyBpbmZsdWVuY2VzIGhvdyB0aGlzIHRyYW5zbGF0aW9uIGFjdHVhbGx5IG9jY3VycywgYW5kIGFueSBtaXN0YWtlcyBoZXJlIGNhbiBsZWFkIHRvIGlzc3Vlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBvcHRpb24gZGF0YSBpdHNlbGYgaXMgcGFzc2VkOyBpcyBpdCBjb3BpZWQ/IEFjY2Vzc2VkIGRpcmVjdGx5PyBBbnkga2luZCBvZiBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyB3b3VsZCBiZSBleHRyZW1lbHkgaW50ZXJlc3RpbmcuIEknbGwgbmVlZCB0byBjb25zaWRlciB0aGlzIGluIGxpZ2h0IG9mIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyBnb2luZyB0byByZXF1aXJlIGEgZGVlcCBkaXZlIHRvIGZ1bGx5IGdyYXNwIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBMZXQncyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHNvY2tldCBvcHRpb25zIGJlaW5nIHNldCwgb3IgcmVhZCwgb3IgYm90aC4gVW5kZXJzdGFuZGluZyB0aGF0IGRpZmZlcmVuY2Ugd2lsbCBiZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4OTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA3OjQ3LjkxODkyOTM3MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjc4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NvY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MzU6XFx0ICogSW5pdGlhbGl6ZSBhIHNvY2tvcHRfdCBmcm9tIHNvY2twdHIgb3B0dmFsL29wdGxlbiwgc2V0dGluZyB1cCBpb3ZfaXRlclxcbjI0MzY6XFx0ICogZm9yIGJvdGggaW5wdXQgYW5kIG91dHB1dCBkaXJlY3Rpb25zLlxcbjI0Mzc6XFx0ICogSXQgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgYm90aCBpb3YgcG9pbnRzIHRvIHRoZSBzYW1lIGRhdGEsIGJ1dCxcXG4yNDM4OlxcdCAqIC5pdGVyX2luIGlzIHJlYWQtb25seSBhbmQgLml0ZXJfb3V0IGlzIHdyaXRlLW9ubHkgYnkgdGhlIHByb3RvY29sIGNhbGxiYWNrc1xcbjI0Mzk6XFx0ICovXFxuMjQ0MDpcXHRpbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLFxcbjI0NDE6XFx0XFx0XFx0ICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIHN0cnVjdCBrdmVjICprdmVjKVxcbjI0NDI6XFx0e1xcbjI0NDM6XFx0XFx0aW50IGtvcHRsZW47XFxuMjQ0NDpcXHRcXG4yNDQ1OlxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2a29wdGxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXFxuMjQ0NjpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yNDQ3OlxcdFxcbjI0NDg6XFx0XFx0aWYgKGtvcHRsZW4gXFx1MDAzYyAwKVxcbjI0NDk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjQ1MDpcXHRcXG4yNDUxOlxcdFxcdGlmIChvcHR2YWwuaXNfa2VybmVsKSB7XFxuMjQ1MjpcXHRcXHRcXHRrdmVjLVxcdTAwM2Vpb3ZfYmFzZSA9IG9wdHZhbC5rZXJuZWw7XFxuMjQ1MzpcXHRcXHRcXHRrdmVjLVxcdTAwM2Vpb3ZfbGVuID0ga29wdGxlbjtcXG4yNDU0OlxcdFxcdFxcdGlvdl9pdGVyX2t2ZWMoXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQsIElURVJfREVTVCwga3ZlYywgMSwga29wdGxlbik7XFxuMjQ1NTpcXHRcXHRcXHRpb3ZfaXRlcl9rdmVjKFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfaW4sIElURVJfU09VUkNFLCBrdmVjLCAxLCBrb3B0bGVuKTtcXG4yNDU2OlxcdFxcdH0gZWxzZSB7XFxuMjQ1NzpcXHRcXHRcXHRpb3ZfaXRlcl91YnVmKFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfb3V0LCBJVEVSX0RFU1QsIG9wdHZhbC51c2VyLCBrb3B0bGVuKTtcXG4yNDU4OlxcdFxcdFxcdGlvdl9pdGVyX3VidWYoXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9pbiwgSVRFUl9TT1VSQ0UsIG9wdHZhbC51c2VyLFxcbjI0NTk6XFx0XFx0XFx0XFx0ICAgICAga29wdGxlbik7XFxuMjQ2MDpcXHRcXHR9XFxuMjQ2MTpcXHRcXHRvcHQtXFx1MDAzZW9wdGxlbiA9IGtvcHRsZW47XFxuMjQ2MjpcXHRcXG4yNDYzOlxcdFxcdHJldHVybiAwO1xcbjI0NjQ6XFx0fVxcbjI0NjU6XFx0XFxuMjQ2NjpcXHRpbnQgZG9fc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsXFxuMjQ2NzpcXHRcXHRcXHQgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXFxuMjQ2ODpcXHR7XFxuMjQ2OTpcXHRcXHRpbnQgbWF4X29wdGxlbiBfX21heWJlX3VudXNlZCA9IDA7XFxuMjQ3MDpcXHRcXHRjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHM7XFxuMjQ3MTpcXHRcXHRzdHJ1Y3Qga3ZlYyBrdmVjO1xcbjI0NzI6XFx0XFx0c29ja29wdF90IG9wdDtcXG4yNDczOlxcdFxcdGludCBlcnI7XFxuMjQ3NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6NDcuOTE5MzAwNDMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MzQwMzAyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG5ldC5oYCB0byBUcmFjZSBTb2NrZXQgT3B0aW9ucyoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgc29tZSBuZXR3b3JrIHNvY2tldCBiZWhhdmlvciwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGV4cGFuZHMgc29ja2V0IG9wdGlvbnMsIHNwZWNpZmljYWxseSwgdGhhdCBgc29ja29wdF9leHBhbmRfb3V0YCBtYWNyby4gUmlnaHQsIGxldCdzIHB1bGwgdXAgdGhlIGBpbmNsdWRlL2xpbnV4L25ldC5oYCBmaWxlLiBJJ2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoaXMgbWFjcm8gaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBzb2NrZXQgb3B0aW9uIGluZnJhc3RydWN0dXJlLiBJJ20gYXNzdW1pbmcgaXQgcmVsYXRlcyB0byB1c2VyIHNwYWNlIG9yIHRoZSBuZXR3b3JrIHN0YWNrIHByZXBhcmluZyBvcHRpb25zIGJlZm9yZSBwYXNzaW5nIHRoZW0gb3V0LiBHb3R0YSB0cmFjZSB0aGUgY2FsbGluZyBjb250ZXh0cyB0byBzZWUgaWYgdGhpcyBpcyByZWxhdGVkIHRvIGEgdnVsbmVyYWJpbGl0eS4gTGV0J3Mgc2VlIGhvdyBgc29ja29wdF9leHBhbmRfb3V0YCBoYW5kbGVzIHRoZSBjb3B5aW5nLCB2YWxpZGF0aW9uLCBhbmQgZXhwYW5zaW9uIG9mIHNvY2tldCBvcHRpb25zLCBhbmQgd2hhdCB0eXBlIHNhZmV0eSBjb25zaWRlcmF0aW9ucyBhcmUgaW4gcGxheS4gQW55IG9mZi1ieS1vbmUgZXJyb3JzPyBQb3NzaWJsZSBpbnRlZ2VyIG92ZXJmbG93cz8gSSBzaG91bGQgY2hlY2sgaXRzIHVzZSBpbiB0aGUgY29kZSBiYXNlIOKAkyBsaWtlbHkgdGhlIGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgIGltcGxlbWVudGF0aW9ucyBhcmUgdGhlIHByaW1hcnkgYXJlYXMgb2YgaW50ZXJlc3QuIEdvdHRhIHF1aWNrbHkgc2tpbSB0aG9zZSBmdW5jdGlvbnMgYW5kIHNlZSB3aGF0IHRoaXMgbWFjcm8gaXMgZG9pbmcgaW4gdGhlIGNvbnRleHQgb2YgYHN0cnVjdCBzb2NrZXRgIG1hbmlwdWxhdGlvbiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIFdlJ3JlIGxvb2tpbmcgZm9yIGhvdyB0aGlzIG1hY3JvIHByb3RlY3RzIGFnYWluc3QgdXNlcmxhbmQgYnVmZmVyIG92ZXJydW5zIG9yIG90aGVyIHJlbGF0ZWQgZXhwbG9pdGFibGUgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg4MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6NTAuNTUzMzQzOTgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L25ldC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcbiAgNjE6XFx0XFx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcXG4gIDYyOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAgNjM6XFx0XFx0aWYgKGxlbiBcXHUwMDNjIDApXFxuICA2NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0aW92X2l0ZXJfdWJ1ZihcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCwgSVRFUl9ERVNULCBvcHR2YWwsIGxlbik7XFxuICA2NzpcXHRcXHRpb3ZfaXRlcl91YnVmKFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfaW4sIElURVJfU09VUkNFLCBvcHR2YWwsIGxlbik7XFxuICA2ODpcXHRcXHRvcHQtXFx1MDAzZW9wdGxlbiA9IGxlbjtcXG4gIDY5OlxcdFxcbiAgNzA6XFx0XFx0cmV0dXJuIDA7XFxuICA3MTpcXHR9XFxuICA3MjpcXHRcXG4gIDczOlxcdC8qXFxuICA3NDpcXHQgKiBHcm93IG9wdHZhbCB0byBAc2l6ZSwgZm9yIHRoZSBvcHRpb25zIHdob3NlIHJlcGx5IGlzIHNpemVkIGJ5IGEgY291bnQgdGhlXFxuICA3NTpcXHQgKiBjYWxsZXIgbGVmdCBpbiBvcHR2YWwgcmF0aGVyIHRoYW4gYnkgb3B0bGVuLiBUaG9zZSB3cml0ZSBwYXN0IG9wdGxlbiB0b2RheVxcbiAgNzY6XFx0ICogYW5kIHVzZXJzcGFjZSByZWxpZXMgb24gaXQuXFxuICA3NzpcXHQgKlxcbiAgNzg6XFx0ICogQ2FsbCBpdCBiZWZvcmUgd3JpdGluZyB0aHJvdWdoIG9wdC1cXHUwMDNlaXRlcl9vdXQ6IGl0IHJlLWFuY2hvcnMgdGhlIGl0ZXJhdG9yIGF0XFxuICA3OTpcXHQgKiB0aGUgaGVhZCBvZiBvcHR2YWwuIE9ubHkgYSB1c2VyIGJ1ZmZlciBjYW4gYmUgbG9uZ2VyIHRoYW4gdGhlIG9wdGxlbiB0aGVcXG4gIDgwOlxcdCAqIGNhbGxlciBkZWNsYXJlZCwgc28gYSBrZXJuZWwtYmFja2VkIG9wdHZhbCBpcyByZWZ1c2VkIHdpdGggLUVJTlZBTC5cXG4gIDgxOlxcdCAqL1xcbiAgODI6XFx0c3RhdGljIGlubGluZSBpbnQgc29ja29wdF9leHBhbmRfb3V0KHNvY2tvcHRfdCAqb3B0LCBzaXplX3Qgc2l6ZSlcXG4gIDgzOlxcdHtcXG4gIDg0OlxcdFxcdGlmIChzaXplIFxcdTAwM2M9IGlvdl9pdGVyX2NvdW50KFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfb3V0KSlcXG4gIDg1OlxcdFxcdFxcdHJldHVybiAwO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFpdGVyX2lzX3VidWYoXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpKSlcXG4gIDg4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRpb3ZfaXRlcl91YnVmKFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfb3V0LCBJVEVSX0RFU1QsIG9wdC1cXHUwMDNlaXRlcl9vdXQudWJ1Ziwgc2l6ZSk7XFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdHJldHVybiAwO1xcbiAgOTM6XFx0fVxcbiAgOTQ6XFx0XFxuICA5NTpcXHRpbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuLFxcbiAgOTY6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdmVjICprdmVjKTtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0c3RydWN0IHBvbGxfdGFibGVfc3RydWN0O1xcbiAgOTk6XFx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbztcXG4gMTAwOlxcdHN0cnVjdCBpbm9kZTtcXG4gMTAxOlxcdHN0cnVjdCBmaWxlO1xcbiAxMDI6XFx0c3RydWN0IG5ldDtcXG4gMTAzOlxcdFxcbiAxMDQ6XFx0LyogSGlzdG9yaWNhbGx5LCBTT0NLV1FfQVNZTkNfTk9TUEFDRSBcXHUwMDI2IFNPQ0tXUV9BU1lOQ19XQUlUREFUQSB3ZXJlIGxvY2F0ZWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6NTAuNTUzNTUxMDkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4MDMzNzQ2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKktjb25maWcgRGVwZW5kZW5jeSBBbmFseXNpcyoqXG5cbk9rYXksIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zIGZvciB0aGlzIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgYG5ldC9pcHY0L2lnbXAuY2AgYW5kIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYC4gU2luY2UgdGhlc2UgYXJlIHdpdGhpbiB0aGUgYG5ldC9pcHY0YCBkaXJlY3RvcnksIEknbSBwcmV0dHkgY29uZmlkZW50IHRoZXkgcmVsYXRlIHRvIElQdjQgbmV0d29ya2luZy4gVGhhdCB0eXBpY2FsbHkgbWVhbnMgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19ORVRgIGFyZSBpbnZvbHZlZCDigJMgdGhvc2UgYXJlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cy4gTm93LCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgTWFrZWZpbGVzLiBJJ2xsIHByb2JhYmx5IGZpbmQgdGhlIGRlcGVuZGVuY2llcyBsaXN0ZWQgZWl0aGVyIGluIGBuZXQvaXB2NC9NYWtlZmlsZWAgb3IgcG90ZW50aWFsbHkgaW4gdGhlIHRvcC1sZXZlbCBgbmV0L01ha2VmaWxlYC4gSSdtIGV4cGVjdGluZyB0byBjb25maXJtIHRoZSBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX05FVGAgZGVwZW5kZW5jaWVzLCBhbmQgbWF5YmUgZmluZCBhIGZldyBtb3JlIHNwZWNpZmljIG9uZXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZi4gTGV0J3Mgc2VlIHdoYXQgdGhlIE1ha2VmaWxlcyByZXZlYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODc5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowNzo1NC4zNTY5MzAxMTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDYyNjU5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZ21wLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTMtXFx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNDpcXHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6NTQuNDcxNTYxMTMzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MDI3MTg5OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjQgTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIElQdjQgc3RhY2ssIHNvIGxldCdzIHN0YXJ0IHdpdGggdGhlIGBuZXQvaXB2NC9NYWtlZmlsZWAuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZSBmaXJzdCAyNSBsaW5lcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaW5pdGlhbCBvdmVydmlldy4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIHNlY3Rpb24gaXMgcHJvYmFibHkgZGVmaW5pbmcgc29tZSBiYXNpYyB2YXJpYWJsZXMsIGluY2x1ZGUgcGF0aHMsIG1heWJlIHNldHRpbmcgdXAgc29tZSBpbml0aWFsIGJ1aWxkIHRhcmdldHMgb3IgZGVwZW5kZW5jaWVzIGZvciB0aGUgSVB2NCBtb2R1bGUuIENvdWxkIGJlIGluaXRpYWwgY29uZmlndXJhdGlvbiwgb3IgdGhlIGNvcmUgaW5jbHVkZSBkaXJlY3RpdmVzLiBJJ2xsIHNjYW4gdGhvc2UgbGluZXMgYW5kIGdldCBhIGJldHRlciBmZWVsIGZvciBpdHMgaW5pdGlhbCBzZXR1cC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMzOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA3OjU3LjI3NDI4Mjk4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IFRDUC9JUCAoSU5FVCkgbGF5ZXIuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxcXFxuICAgNzpcXHRcXHQgICAgIGlwX2lucHV0Lm8gaXBfZnJhZ21lbnQubyBpcF9mb3J3YXJkLm8gaXBfb3B0aW9ucy5vIFxcXFxcXG4gICA4OlxcdFxcdCAgICAgaXBfb3V0cHV0Lm8gaXBfc29ja2dsdWUubyBpbmV0X2hhc2h0YWJsZXMubyBcXFxcXFxuICAgOTpcXHRcXHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcbiAgMTA6XFx0XFx0ICAgICB0Y3AubyB0Y3BfaW5wdXQubyB0Y3Bfb3V0cHV0Lm8gdGNwX3RpbWVyLm8gdGNwX2lwdjQubyBcXFxcXFxuICAxMTpcXHRcXHQgICAgIHRjcF9taW5pc29ja3MubyB0Y3BfY29uZy5vIHRjcF9tZXRyaWNzLm8gdGNwX2Zhc3RvcGVuLm8gXFxcXFxcbiAgMTI6XFx0XFx0ICAgICB0Y3BfcmVjb3ZlcnkubyB0Y3BfdWxwLm8gXFxcXFxcbiAgMTM6XFx0XFx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXFxcXG4gIDE0OlxcdFxcdCAgICAgdWRwX29mZmxvYWQubyBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyBpZ21wLm8gXFxcXFxcbiAgMTU6XFx0XFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxcXFxuICAxNjpcXHRcXHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXFxcXG4gIDE3OlxcdFxcdCAgICAgbWV0cmljcy5vIG5ldGxpbmsubyBuZXh0aG9wLm8gdWRwX3R1bm5lbF9zdHViLm9cXG4gIDE4OlxcdFxcbiAgMTk6XFx0b2JqLSQoQ09ORklHX05FVF9JUF9UVU5ORUwpICs9IGlwX3R1bm5lbC5vXFxuICAyMDpcXHRvYmotJChDT05GSUdfU1lTQ1RMKSArPSBzeXNjdGxfbmV0X2lwdjQub1xcbiAgMjE6XFx0b2JqLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mub1xcbiAgMjI6XFx0b2JqLSQoQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUykgKz0gZmliX3J1bGVzLm9cXG4gIDIzOlxcdG9iai0kKENPTkZJR19JUF9NUk9VVEUpICs9IGlwbXIub1xcbiAgMjQ6XFx0b2JqLSQoQ09ORklHX0lQX01ST1VURV9DT01NT04pICs9IGlwbXJfYmFzZS5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfTkVUX0lQSVApICs9IGlwaXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowNzo1Ny4yNzQzNDQ5NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODg1MDMzOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgaW5ldGAgRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBjb250cm9sbGluZyBgaW5ldGAuIFRoZSBoaW50IGlzIGBDT05GSUdfSU5FVGAsIHdoaWNoIHN1Z2dlc3RzIGl0J3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgc3RhbmRhcmQgcGxhY2VzIGluIHRoZSBrZXJuZWwgc291cmNlLCB0eXBpY2FsbHkgYG5ldC9LY29uZmlnYCBvciwgc2luY2UgaXQncyBpbnRlcm5ldC1yZWxhdGVkLCBgbmV0L2lwdjQvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb3IgcmVmZXJlbmNlIHRvIGBDT05GSUdfSU5FVGAgYW5kIHNlZSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQgYW5kIHdoYXQgaXRzIGRlcGVuZGVuY2llcyBtaWdodCBiZS4gVGltZSB0byBkaXZlIGludG8gdGhvc2UgS2NvbmZpZyBmaWxlcyBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA5OSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDg6MDMuMTU5MzgxOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNzE5MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9LY29uZmlnLTExMy1cXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcXG5uZXQvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA4OjAzLjMyMjEwOTc3OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTQ5MzA2OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsJ3MgSVAgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgbXVsdGljYXN0IHNldHRpbmdzIGFyZSBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBuZXQvaXB2NC9LY29uZmlnYC4gVGhhdCdzIHVzdWFsbHkgdGhlIHBsYWNlIHdoZXJlIHlvdSdsbCBmaW5kIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIElQdjQgbmV0d29ya2luZywgaW5jbHVkaW5nIGFueXRoaW5nIHNwZWNpZmljIHRvIElHTVAgb3IgdGhlIG11bHRpY2FzdCBmZWF0dXJlcyBpbiBnZW5lcmFsLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGtleXdvcmRzLCBvcHRpb25zLCBvciBkZXBlbmRlbmNpZXMgdGhlcmUuIEknbSBlc3BlY2lhbGx5IGxvb2tpbmcgdG8gc2VlIGlmIGBDT05GSUdfSVBfTVVMVElDQVNUYCBpcyB1c2VkLCBhcyBpdCBvZnRlbiBmb3JtcyB0aGUgYmFzaXMgZm9yIGVuYWJsaW5nIHRoZSBjb3JlIG11bHRpY2FzdCBmdW5jdGlvbmFsaXR5LlxuXG5UaGVuLCBJJ2xsIGRpdmUgYSBiaXQgZGVlcGVyIGludG8gdGhlIGNvZGUuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGluIGBuZXQvaXB2NC9pZ21wLmNgLiBgaWdtcC5jYCBpcyB0aGUgbW9zdCBvYnZpb3VzIGxvY2F0aW9uIGZvciBJR01QLXNwZWNpZmljIGNvZGUsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgZ3JvdXAgbWVtYmVyc2hpcHMgYXJlIGhhbmRsZWQuIEknbGwgdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggdGhpcyBmaWxlIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBsaWtlIGAjaWZkZWZgIG9yIGNvbmZpZ3VyYXRpb24gbWFjcm9zIHN0YXJ0aW5nIHdpdGggYENPTkZJR19gLiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBkaWZmZXJlbnQgY29kZSBibG9ja3MgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIGhvdyB0aGVzZSBtdWx0aWNhc3Qgb3B0aW9ucyBhcmUgZW5hYmxlZCwgZGlzYWJsZWQsIGFuZCBjb25maWd1cmVkLiBJJ20gaG9waW5nIHRvIGRpc2NvdmVyIHRoZSBwcmVjaXNlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFuZCB0aGVpciBpbmZsdWVuY2Ugb24gdGhlIGNvZGUgdGhhdCBoYW5kbGVzIElHTVAgYW5kIHJlbGF0ZWQgbXVsdGljYXN0IG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzk1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDg6MDkuNDcxNDE4OTA2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk3OTQzMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pZ21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaWdtcC5jLTEwMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQuaFxcdTAwM2VcXG5uZXQvaXB2NC9pZ21wLmM6MTAyOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXFxubmV0L2lwdjQvaWdtcC5jLTEwMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvbXJvdXRlLmhcXHUwMDNlXFxubmV0L2lwdjQvaWdtcC5jLTEwNC0jZW5kaWZcXG5uZXQvaXB2NC9pZ21wLmM6MTA1OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbm5ldC9pcHY0L2lnbXAuYy0xMDYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb2NfZnMuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xMDktXFxubmV0L2lwdjQvaWdtcC5jOjExMDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xMTEtLyogUGFyYW1ldGVyIG5hbWVzIGFuZCB2YWx1ZXMgYXJlIHRha2VuIGZyb20gaWdtcC12Mi0wNiBkcmFmdCAqL1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTIyMD1zdGF0aWMgdm9pZCBpcF9zZl9saXN0X2NsZWFyX2FsbChzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIzMC1cXG5uZXQvaXB2NC9pZ21wLmM6MjMxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIzMi1cXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xMTI5PWludCBpZ21wX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTExNjktXFx0Y2FzZSBJR01QX1BJTTpcXG5uZXQvaXB2NC9pZ21wLmM6MTE3MDojaWZkZWYgQ09ORklHX0lQX1BJTVNNX1YxXFxubmV0L2lwdjQvaWdtcC5jLTExNzEtXFx0XFx0cmV0dXJuIHBpbV9yY3ZfdjEoc2tiKTtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xMjE5PXN0YXRpYyB2b2lkIGlwX21jX2ZpbHRlcl9kZWwoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xMjI3LVxcbm5ldC9pcHY0L2lnbXAuYzoxMjI4OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTEyMjktLypcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xMzU4PXN0YXRpYyB2b2lkIF9faWdtcF9ncm91cF9kcm9wcGVkKHN0cnVjdCBpcF9tY19saXN0ICppbSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTEzNjAtXFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW0tXFx1MDAzZWludGVyZmFjZTtcXG5uZXQvaXB2NC9pZ21wLmM6MTM2MTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xMzYyLVxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaW5fZGV2LVxcdTAwM2VkZXYpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTEzNzAtXFxubmV0L2lwdjQvaWdtcC5jOjEzNzE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTM3Mi1cXHRpZiAoaW0tXFx1MDAzZW11bHRpYWRkciA9PSBJR01QX0FMTF9IT1NUUylcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xNDAyPXN0YXRpYyB2b2lkIGlnbXBfZ3JvdXBfYWRkZWQoc3RydWN0IGlwX21jX2xpc3QgKmltKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE0MDQtXFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW0tXFx1MDAzZWludGVyZmFjZTtcXG5uZXQvaXB2NC9pZ21wLmM6MTQwNTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xNDA2LVxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaW5fZGV2LVxcdTAwM2VkZXYpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE0MTMtXFxubmV0L2lwdjQvaWdtcC5jOjE0MTQ6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTQxNS1cXHRpZiAoaW0tXFx1MDAzZW11bHRpYWRkciA9PSBJR01QX0FMTF9IT1NUUylcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xNTcwPXN0YXRpYyB2b2lkIF9fX19pcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcixcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xNjE1LVxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZpbS1cXHUwMDNlbG9jayk7XFxubmV0L2lwdjQvaWdtcC5jOjE2MTY6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTYxNy1cXHR0aW1lcl9zZXR1cChcXHUwMDI2aW0tXFx1MDAzZXRpbWVyLCBpZ21wX3RpbWVyX2V4cGlyZSwgMCk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTYyNS1cXG5uZXQvaXB2NC9pZ21wLmM6MTYyNjojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xNjI3LVxcdGlnbXB2M19kZWxfZGVscmVjKGluX2RldiwgaW0pO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE3OTQ9c3RhdGljIHZvaWQgaXBfbWNfcmVqb2luX2dyb3VwcyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxubmV0L2lwdjQvaWdtcC5jLTE3OTUte1xcbm5ldC9pcHY0L2lnbXAuYzoxNzk2OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE3OTctXFx0c3RydWN0IGlwX21jX2xpc3QgKmltO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE4NzY9dm9pZCBpcF9tY19yZW1hcChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTg4Mi1cXHRmb3JfZWFjaF9wbWNfcnRubChpbl9kZXYsIHBtYykge1xcbm5ldC9pcHY0L2lnbXAuYzoxODgzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE4ODQtXFx0XFx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBwbWMpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE4OTI9dm9pZCBpcF9tY19kb3duKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xOTAwLVxcbm5ldC9pcHY0L2lnbXAuYzoxOTAxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE5MDItXFx0V1JJVEVfT05DRShpbl9kZXYtXFx1MDAzZW1yX2lmY19jb3VudCwgMCk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTkxMi1cXG5uZXQvaXB2NC9pZ21wLmM6MTkxMzojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xOTE0LXN0YXRpYyB2b2lkIGlwX21jX3Jlc2V0KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xOTI4PXZvaWQgaXBfbWNfaW5pdF9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE5MzEtXFxubmV0L2lwdjQvaWdtcC5jOjE5MzI6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTkzMy1cXHR0aW1lcl9zZXR1cChcXHUwMDI2aW5fZGV2LVxcdTAwM2Vtcl9ncV90aW1lciwgaWdtcF9ncV90aW1lcl9leHBpcmUsIDApO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE5NDM9dm9pZCBpcF9tY191cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTk1Mi1cXHRmb3JfZWFjaF9wbWNfcnRubChpbl9kZXYsIHBtYykge1xcbm5ldC9pcHY0L2lnbXAuYzoxOTUzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE5NTQtXFx0XFx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBwbWMpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE5NjQ9dm9pZCBpcF9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTk3MS1cXHRpcF9tY19kb3duKGluX2Rldik7XFxubmV0L2lwdjQvaWdtcC5jOjE5NzI6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTk3My1cXHRpZ21wdjNfY2xlYXJfZGVscmVjKGluX2Rldik7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjAyMj1zdGF0aWMgaW50IGlwX21jX2RlbDFfc3JjKHN0cnVjdCBpcF9tY19saXN0ICpwbWMsIGludCBzZm1vZGUsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjA0Mi1cXHRpZiAoIXBzZi1cXHUwMDNlc2ZfY291bnRbTUNBU1RfSU5DTFVERV0gXFx1MDAyNlxcdTAwMjYgIXBzZi1cXHUwMDNlc2ZfY291bnRbTUNBU1RfRVhDTFVERV0pIHtcXG5uZXQvaXB2NC9pZ21wLmM6MjA0MzojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0yMDQ0LVxcdFxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IHBtYy1cXHUwMDNlaW50ZXJmYWNlO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIwNTQtXFx0XFx0XFx0XFx0XFx0ICAgcG1jX2RlcmVmZXJlbmNlKHBzZi1cXHUwMDNlc2ZfbmV4dCwgcG1jKSk7XFxubmV0L2lwdjQvaWdtcC5jOjIwNTU6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjA1Ni1cXHRcXHRpZiAocHNmLVxcdTAwM2VzZl9vbGRpbiBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIwNzUtXFxubmV0L2lwdjQvaWdtcC5jOjIwNzY6I2lmbmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIwNzctI2RlZmluZSBpZ21wX2lmY19ldmVudCh4KVxcdGRvIHsgfSB3aGlsZSAoMClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0yMDgwPXN0YXRpYyBpbnQgaXBfbWNfZGVsX3NyYyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiAqcG1jYSwgaW50IHNmbW9kZSxcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yMTAwLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbm5ldC9pcHY0L2lnbXAuYzoyMTAxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIxMDItXFx0c2ZfbWFya3N0YXRlKHBtYyk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjEyMC1cXHQgICAgcG1jLVxcdTAwM2VzZmNvdW50W01DQVNUX0lOQ0xVREVdKSB7XFxubmV0L2lwdjQvaWdtcC5jOjIxMjE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjEyMi1cXHRcXHRzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIxMjctXFx0XFx0cG1jLVxcdTAwM2VzZm1vZGUgPSBNQ0FTVF9JTkNMVURFO1xcbm5ldC9pcHY0L2lnbXAuYzoyMTI4OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIxMjktXFx0XFx0cG1jLVxcdTAwM2VjcmNvdW50ID0gaW5fZGV2LVxcdTAwM2Vtcl9xcnYgPzogUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfaWdtcF9xcnYpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTIxNDY9c3RhdGljIGludCBpcF9tY19hZGQxX3NyYyhzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jLCBpbnQgc2Ztb2RlLFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIxNzMtXFxubmV0L2lwdjQvaWdtcC5jOjIxNzQ6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjE3NS1zdGF0aWMgdm9pZCBzZl9tYXJrc3RhdGUoc3RydWN0IGlwX21jX2xpc3QgKnBtYylcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0yMjYwPXN0YXRpYyBpbnQgaXBfbWNfYWRkX3NyYyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiAqcG1jYSwgaW50IHNmbW9kZSxcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yMjgxLVxcbm5ldC9pcHY0L2lnbXAuYzoyMjgyOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIyODMtXFx0c2ZfbWFya3N0YXRlKHBtYyk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjMwMS1cXHR9IGVsc2UgaWYgKGlzZXhjbHVkZSAhPSAocG1jLVxcdTAwM2VzZmNvdW50W01DQVNUX0VYQ0xVREVdICE9IDApKSB7XFxubmV0L2lwdjQvaWdtcC5jOjIzMDI6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjMwMy1cXHRcXHRzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIzMTItXFx0XFx0XFx0cG1jLVxcdTAwM2VzZm1vZGUgPSBNQ0FTVF9JTkNMVURFO1xcbm5ldC9pcHY0L2lnbXAuYzoyMzEzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIzMTQtXFx0XFx0LyogZWxzZSBubyBmaWx0ZXJzOyBrZWVwIG9sZCBtb2RlIGZvciByZXBvcnRzICovXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjkwMD1pbnQgaXBfY2hlY2tfbWNfcmN1KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIG1jX2FkZHIsIF9fYmUzMiBzcmNfYWRkciwgdTggcHJvdG8pXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjk0My1cXG5uZXQvaXB2NC9pZ21wLmM6Mjk0NDojaWYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcXG5uZXQvaXB2NC9pZ21wLmMtMjk0NS1zdHJ1Y3QgaWdtcF9tY19pdGVyX3N0YXRlIHtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0zMDMxPXN0YXRpYyBpbnQgaWdtcF9tY19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0zMDQyLVxcbm5ldC9pcHY0L2lnbXAuYzozMDQzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTMwNDQtXFx0XFx0cXVlcmllciA9IElHTVBfVjFfU0VFTihzdGF0ZS1cXHUwMDNlaW5fZGV2KSA/IFxcXCJWMVxcXCIgOlxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTMyNzQ9aW50IF9faW5pdCBpZ21wX21jX2luaXQodm9pZClcXG5uZXQvaXB2NC9pZ21wLmMtMzI3NS17XFxubmV0L2lwdjQvaWdtcC5jOjMyNzY6I2lmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpXFxubmV0L2lwdjQvaWdtcC5jLTMyNzctXFx0aW50IGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDg6MDkuNTgxMjE4Mjg0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2OTA3MTUyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBJUCBNdWx0aWNhc3QgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtdWx0aWNhc3Qgc3VwcG9ydC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgQ09ORklHX0lQX01VTFRJQ0FTVGAgb3B0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBsb2NhdGUgaXQgd2l0aGluIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyBpdCdzIHRoZSB1c3VhbCBsb2NhdGlvbiBmb3IgSVB2NC1zcGVjaWZpYyBuZXR3b3JraW5nIGZlYXR1cmVzLiBJIGV4cGVjdCB0aGlzIGNvbmZpZyBvcHRpb24gd2lsbCBiZSB0aGUgZm91bmRhdGlvbmFsIHN3aXRjaCBjb250cm9sbGluZyB0aGUgZW50aXJlIElQdjQgbXVsdGljYXN0IGZ1bmN0aW9uYWxpdHkuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGRlcGVuZGVuY2llcyBhbmQgc2VlIGhvdyBpdCBpbnRlcnBsYXlzIHdpdGggb3RoZXIgbmV0d29ya2luZyBmZWF0dXJlcyBhbmQgdGhlIG11bHRpY2FzdCBjb2RlIGl0c2VsZi4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwOTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowODoxNS4yNzE5MzU3MjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDI4NTIxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfTVVMVElDQVNUXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZy00LSNcXG5uZXQvaXB2NC9LY29uZmlnOjU6Y29uZmlnIElQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L0tjb25maWctNi1cXHRib29sIFxcXCJJUDogbXVsdGljYXN0aW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowODoxNS4zODIyMjU2OTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMwOTg0NDk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gSVB2NCBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUga2VybmVsJ3MgS2NvbmZpZyBmaWxlIGZvciBJUHY0LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBvZiBsb29raW5nIGF0IGBuZXQvaXB2NC9LY29uZmlnYCBhcm91bmQgbGluZSA1LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgdG9wLWxldmVsIG9wdGlvbnMgcmVsYXRlZCB0byBJUHY0IGFyZSBkZWZpbmVkLCBvciBwZXJoYXBzIHRoZSBpbmNsdXNpb24gb2Ygb3RoZXIgcmVsZXZhbnQgZmlsZXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGJ1aWxkLXRpbWUgZmxhZ3MsIGRlcGVuZGVuY2llcywgYW5kIHBlcmhhcHMgc29tZSBnZW5lcmFsIG1vZHVsZSBzZWxlY3Rpb25zIHRoYXQgd2lsbCBpbGx1bWluYXRlIHRoZSBjb2RlJ3MgYmVoYXZpb3IuIEkgYW0gYW50aWNpcGF0aW5nIHRoZSB0b3AtbGV2ZWwgaXRlbXMsIHNvIEkgd2lsbCBrbm93IHdoZXRoZXIgdG8gZGlnIGRlZXBlciBvciB3aGV0aGVyIHRvIGxvb2sgYXJvdW5kIGF0IGFub3RoZXIgS2NvbmZpZyBmaWxlLiBJIGNhbiBnZXQgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBJUHY0IHN1YnN5c3RlbSBmcm9tIHRoaXMgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDg6MTcuNjkyMDczOTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBJUCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb25maWcgSVBfTVVMVElDQVNUXFxuICAgNjpcXHRcXHRib29sIFxcXCJJUDogbXVsdGljYXN0aW5nXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGlzIGNvZGUgZm9yIGFkZHJlc3Npbmcgc2V2ZXJhbCBuZXR3b3JrZWQgY29tcHV0ZXJzIGF0IG9uY2UsXFxuICAgOTpcXHRcXHQgIGVubGFyZ2luZyB5b3VyIGtlcm5lbCBieSBhYm91dCAyIEtCLiBZb3UgbmVlZCBtdWx0aWNhc3RpbmcgaWYgeW91XFxuICAxMDpcXHRcXHQgIGludGVuZCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgTUJPTkUsIGEgaGlnaCBiYW5kd2lkdGggbmV0d29yayBvbiB0b3BcXG4gIDExOlxcdFxcdCAgb2YgdGhlIEludGVybmV0IHdoaWNoIGNhcnJpZXMgYXVkaW8gYW5kIHZpZGVvIGJyb2FkY2FzdHMuIE1vcmVcXG4gIDEyOlxcdFxcdCAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE1CT05FIGlzIG9uIHRoZSBXV1cgYXRcXG4gIDEzOlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd3d3LnNhdmV0ei5jb20vbWJvbmUvXFx1MDAzZS4gRm9yIG1vc3QgcGVvcGxlLCBpdCdzIHNhZmUgdG8gc2F5IE4uXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcXG4gIDE2OlxcdFxcdGJvb2wgXFxcIklQOiBhZHZhbmNlZCByb3V0ZXJcXFwiXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIElmIHlvdSBpbnRlbmQgdG8gcnVuIHlvdXIgTGludXggYm94IG1vc3RseSBhcyBhIHJvdXRlciwgaS5lLiBhcyBhXFxuICAxOTpcXHRcXHQgIGNvbXB1dGVyIHRoYXQgZm9yd2FyZHMgYW5kIHJlZGlzdHJpYnV0ZXMgbmV0d29yayBwYWNrZXRzLCBzYXkgWTsgeW91XFxuICAyMDpcXHRcXHQgIHdpbGwgdGhlbiBiZSBwcmVzZW50ZWQgd2l0aCBzZXZlcmFsIG9wdGlvbnMgdGhhdCBhbGxvdyBtb3JlIHByZWNpc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDg6MTcuNjkyMTU0NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjM1MjA2NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJldmlld2luZyB0aGUgUmVjZW50IENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZXNlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMuIEZpcnN0LCBgaXBfbWNfbXNmZ2V0YCBpbiBgbmV0L2lwdjQvaWdtcC5jYCBoYXMgYmVlbiByZXdvcmtlZC4gSXQncyBub3cgYSBub24tc3RhdGljIGZ1bmN0aW9uIGFuZCBpdHMgc2lnbmF0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgdG8gYWNjZXB0IGEgYHNvY2tvcHRfdCAqb3B0YC4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCBpdCBkaXJlY3RseSB1c2VzIGBzb2Nrb3B0X2V4cGFuZF9vdXRgIHdpdGggYG1zZl9zaXplYCBhbmQgYGNvcHlfdG9faXRlcmAsIHdoaWNoIGlzIGhvdyBpdCdzIGdldHRpbmcgYW5kIGhhbmRsaW5nIHRoZSBkYXRhLlxuXG5OZXh0LCBpbiBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AsIGBkb19pcF9nZXRzb2Nrb3B0YCBoYXMgdW5kZXJnb25lIGEgY2hhbmdlIGluIGl0cyBJUF9NU0ZJTFRFUiBoYW5kbGluZy4gTm93LCBpbnN0ZWFkIG9mIGRvaW5nIGV2ZXJ5dGhpbmcgaW5saW5lLCBpdCBjYWxscyBgc29ja3B0cl90b19zb2Nrb3B0YCB3aGljaCB0aGVuIGNhbGxzIGBpcF9tY19tc2ZnZXRgLlxuXG5gc29ja3B0cl90b19zb2Nrb3B0YCBpbiBgbmV0L3NvY2tldC5jYCBoYXMgbW92ZWQgZnJvbSBiZWluZyBhIHN0YXRpYyBmdW5jdGlvbiB0byBhbiBleHRlcm4gZnVuY3Rpb24uXG5cbkZpbmFsbHksIHdlIGhhdmUgYHNvY2tvcHRfZXhwYW5kX291dGAgaW4gYGluY2x1ZGUvbGludXgvbmV0LmhgLiBUaGlzIGlzIGEgc3RhdGljIGlubGluZSBoZWxwZXIgZnVuY3Rpb24sIGNydWNpYWwgYmVjYXVzZSBpdCdzIGJlaW5nIGNhbGxlZCBieSBgaXBfbWNfbXNmZ2V0YC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoaXMgdXNhZ2UuIEl0J3MgdGltZSB0byBkbyBhIHRob3JvdWdoIGNoZWNrOyBJIG5lZWQgdG8gc2VlIGlmIGFueSBvdGhlciBjb2RlIHBhdGhzIGFyZSBjYWxsaW5nIGBpcF9tY19tc2ZnZXRgIG9yIGBzb2Nrb3B0X2V4cGFuZF9vdXRgLiBHb3R0YSBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBpbnRyb2R1Y2VkIGFueSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBvciBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTI4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDg6MjEuOTI3MzYzNTU1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ4NTgyNzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tvcHRfZXhwYW5kX291dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldC5oPTU2PXN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfaW5pdF91c2VyKHNvY2tvcHRfdCAqb3B0LCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXQuaC04MS0gKi9cXG5pbmNsdWRlL2xpbnV4L25ldC5oOjgyOnN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfZXhwYW5kX291dChzb2Nrb3B0X3QgKm9wdCwgc2l6ZV90IHNpemUpXFxuaW5jbHVkZS9saW51eC9uZXQuaC04My17XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjcxMz1pbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIHNvY2tvcHRfdCAqb3B0KVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTI3NjEtXFx0ICovXFxubmV0L2lwdjQvaWdtcC5jOjI3NjI6XFx0ZXJyID0gc29ja29wdF9leHBhbmRfb3V0KG9wdCwgbXNmX3NpemUpO1xcbm5ldC9pcHY0L2lnbXAuYy0yNzYzLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA4OjI0LjA3NTk1MTMzMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzA2MTExNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IENvbmZpcm1hdGlvbioqXG5cbk9rYXksIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgY2FsbCBjaGFpbiBmb3IgYGlwX21jX21zZmdldGAgb25lIG1vcmUgdGltZS4gTG9va3MgbGlrZSBpdCdzIGV4Y2x1c2l2ZWx5IGNhbGxlZCB3aXRoaW4gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLCBzcGVjaWZpY2FsbHkgYnkgYGRvX2lwX2dldHNvY2tvcHRgLiBFeGNlbGxlbnQuXG5cbk5vdywgbGV0J3MgYWxpZ24gdGhpcyB3aXRoIHRoZSBGb2N1c1N5bWJvbHMgbWV0aG9kb2xvZ3kuIFRoaXMgbWVhbnMgZm9jdXNpbmcgb24gbm9uLXViaXF1aXRvdXMga2VybmVsIGZ1bmN0aW9ucyB0byBuYXJyb3cgZG93biBvdXIgZnV6emluZyBzY29wZS4gV2Ugd2FudCB0byBhdm9pZCBnZW5lcmljIGZ1bmN0aW9ucyBsaWtlIGFsbG9jYXRvcnMgYW5kIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBhbmQgaW5zdGVhZCB0YXJnZXQgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnkgcG9pbnRzLiBgaXBfbWNfbXNmZ2V0YCwgYGRvX2lwX2dldHNvY2tvcHRgLCBhbmQgYHNvY2twdHJfdG9fc29ja29wdGAgYWxsIGZpdCB0aGF0IGJpbGwgcGVyZmVjdGx5LiBSZW1lbWJlciB0aGF0IGBzb2Nrb3B0X2V4cGFuZF9vdXRgIGlzIGlubGluZWQsIHNvIGZ1enppbmcgaXRzIGNhbGxlciwgYGlwX21jX21zZmdldGAsIGlzIHRoZSB3YXkgdG8gZ28uXG5cbk5leHQsIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFdlIGRlZmluaXRlbHkgbmVlZCBgSU5FVGAgc2luY2UgdGhpcyB0b3VjaGVzIGBuZXQvaXB2NC9gLCBzcGVjaWZpY2FsbHkgYGlwX3NvY2tnbHVlLmNgIGFuZCBgaWdtcC5jYC4gQW5kIGBJUF9NVUxUSUNBU1RgIGlzIHNwb3Qtb24sIGFzIG11bHRpY2FzdCBzb2NrZXQgb3B0aW9ucyBsaWtlIGBJUF9NU0ZJTFRFUmAgYW5kIElHTVAgYXJlIGRpcmVjdGx5IHJlbGV2YW50LiBObyBzdXJwcmlzZXMgdGhlcmUuXG5cblF1aWNrIHNhbml0eSBjaGVjayBvbiB0aG9zZSBjb25maWdzOiBgSU5FVGAgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGEgbG90IG9mIHdoYXQgd2UncmUgbG9va2luZyBhdCwgYW5kIGBJUF9NVUxUSUNBU1RgIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGUgdGFyZ2V0IGZ1bmN0aW9uYWxpdHkuIEFsbCBnb29kLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNvbnN0cnVjdCB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBgV29ydGhGdXp6aW5nYCBpcyB1bmVxdWl2b2NhbGx5IGB0cnVlYC4gVGhlIGBSZWFzb25pbmdgIHNob3VsZCBiZSBjbGVhcjogVGhpcyBwYXRjaCBtb2RpZmllcyBJUF9NU0ZJTFRFUiBoYW5kbGluZyB3aXRoaW4gSVB2NCdzIGBkb19pcF9nZXRzb2Nrb3B0YCwgY2hhbmdlcyBgaXBfbWNfbXNmZ2V0YCB0byB1c2UgYHNvY2tvcHRfdGAgYW5kIGFkZHMgaXRlcmF0b3IgbG9naWMgd2l0aCBgc29ja29wdF9leHBhbmRfb3V0YCwgYWxsIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBzb2NrZXQgY2FsbHMuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgYFtcImlwX21jX21zZmdldFwiLCBcImRvX2lwX2dldHNvY2tvcHRcIiwgXCJzb2NrcHRyX3RvX3NvY2tvcHRcIl1gLiBBbmQgZmluYWxseSwgdGhlIGBFbmFibGVDb25maWdzYCBhcmUgYFtcIklORVRcIiwgXCJJUF9NVUxUSUNBU1RcIl1gLlxuXG5FdmVyeXRoaW5nIGlzIHZlcmlmaWVkLCB0aGUgY2hlY2tzIGFyZSBwYXNzZWQsIGFuZCB0aGUgcmVhc29uaW5nIGlzIHNvdW5kLiBOb3cgaXQncyB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3NzAsIk91dHB1dFRva2VucyI6MTU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA4OjI5Ljc4MjA2NjY0NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjQzMTcxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBfTVVMVElDQVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfbWNfbXNmZ2V0XCIsXG4gICAgXCJkb19pcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJzb2NrcHRyX3RvX3NvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIElQX01TRklMVEVSIHNvY2tldCBvcHRpb24gaW4gSVB2NCBnZXRzb2Nrb3B0IGJ5IGNvbnZlcnRpbmcgaXBfbWNfbXNmZ2V0IHRvIHVzZSB0aGUgc29ja29wdF90IGFic3RyYWN0aW9uLCBpbnRyb2R1Y2luZyB0aGUgc29ja29wdF9leHBhbmRfb3V0IGhlbHBlciB0byBkeW5hbWljYWxseSByZXNpemUgdGhlIG91dHB1dCBidWZmZXIgaXRlcmF0b3IsIGFuZCBleHBvcnRpbmcgc29ja3B0cl90b19zb2Nrb3B0LiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBjYW4gYmUgZGlyZWN0bHkgZXhlcmNpc2VkIGZyb20gdXNlcnNwYWNlIHZpYSBnZXRzb2Nrb3B0KCkgY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBfTVVMVElDQVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfbWNfbXNmZ2V0XCIsXG4gICAgXCJkb19pcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJzb2NrcHRyX3RvX3NvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIElQX01TRklMVEVSIHNvY2tldCBvcHRpb24gaW4gSVB2NCBnZXRzb2Nrb3B0IGJ5IGNvbnZlcnRpbmcgaXBfbWNfbXNmZ2V0IHRvIHVzZSB0aGUgc29ja29wdF90IGFic3RyYWN0aW9uLCBpbnRyb2R1Y2luZyB0aGUgc29ja29wdF9leHBhbmRfb3V0IGhlbHBlciB0byBkeW5hbWljYWxseSByZXNpemUgdGhlIG91dHB1dCBidWZmZXIgaXRlcmF0b3IsIGFuZCBleHBvcnRpbmcgc29ja3B0cl90b19zb2Nrb3B0LiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBjYW4gYmUgZGlyZWN0bHkgZXhlcmNpc2VkIGZyb20gdXNlcnNwYWNlIHZpYSBnZXRzb2Nrb3B0KCkgY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA4OjI5LjkxNDUwODU1M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIyMzAwNTcyMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowODoyOS45MTY0OTgyMDNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4MjIyODA2MzI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBJUF9NU0ZJTFRFUiBnZXRzb2Nrb3B0IGhhbmRsaW5nIHRvIHVzZSB0aGUgbmV3IHNvY2tvcHRfdCAvIGlvdl9pdGVyIGluZnJhc3RydWN0dXJlIHZpYSBgc29ja3B0cl90b19zb2Nrb3B0KClgLCBgc29ja29wdF9leHBhbmRfb3V0KClgLCBhbmQgYGNvcHlfdG9faXRlcigpYC4gXFxuXFxuLSBJbiBgZG9faXBfZ2V0c29ja29wdCgpYCwgYG1zZmAgaXMgcG9wdWxhdGVkIGZyb20gdXNlcnNwYWNlIHZpYSBgY29weV9mcm9tX3NvY2twdHIoKWAgZm9yIGBJUF9NU0ZJTFRFUl9TSVpFKDApYCAoMTYgYnl0ZXMpLCBjb3ZlcmluZyBhbGwgc2NhbGFyIGZpZWxkcyAoYGltc2ZfbXVsdGlhZGRyYCwgYGltc2ZfaW50ZXJmYWNlYCwgYGltc2ZfZm1vZGVgLCBgaW1zZl9udW1zcmNgKSwgd2l0aCBgaW1zZl9mbW9kZWAgYW5kIGBpbXNmX251bXNyY2Agc3Vic2VxdWVudGx5IHVwZGF0ZWQgYmVmb3JlIGBjb3B5X3RvX2l0ZXIoKWAgY29waWVzIGV4YWN0bHkgMTYgYnl0ZXMuIFRoZXJlIGlzIG5vIHN0cnVjdCBwYWRkaW5nIGluIGBzdHJ1Y3QgaXBfbXNmaWx0ZXJgLlxcbi0gVGhlIG11bHRpY2FzdCBzb3VyY2UgZmlsdGVyIGFkZHJlc3MgYXJyYXkgYHBzbC1cXHUwMDNlc2xfYWRkcmAgaXMgY29waWVkIHVwIHRvIGBjb3B5Y291bnQgXFx1MDAzYz0gcHNsLVxcdTAwM2VzbF9jb3VudGAgZWxlbWVudHMsIHdoaWNoIGFyZSBmdWxseSBpbml0aWFsaXplZCBrZXJuZWwgZGF0YS5cXG4tIGBzb2Nrb3B0X2V4cGFuZF9vdXQoKWAgYW5kIGBzb2NrcHRyX3RvX3NvY2tvcHQoKWAgb25seSBhZGp1c3QgaXRlcmF0b3IgZGVzY3JpcHRvcnMgZm9yIHVzZXIgbWVtb3J5IGJvdW5kYXJpZXMgYW5kIGRvIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFBvdGVudGlhbCBtZW1vcnkgaXNzdWVzIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyB1c2VyIGJ1ZmZlciBhY2Nlc3MgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4pIGFuZCBjb3B5LXRvLXVzZXIgZmF1bHQgaGFuZGxpbmcuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUyNTI1ZmNkNzY5YWRjYmY0OTYyNTdlZDY0OGUzYmNiMzYyMzE1MDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxMDowNzoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWdtcC5oIGIvaW5jbHVkZS9saW51eC9pZ21wLmhcbmluZGV4IGEwY2YwMzk4NTE5ZmQuLmUwNzU2MTEzNDRlZjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lnbXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9pZ21wLmhcbkBAIC0xNCw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29ja3B0ci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9pZ21wLmhcdTAwM2VcbkBAIC0yNzMsNyArMjc0LDcgQEAgZXh0ZXJuIGludCBpcF9tY19zb3VyY2UoaW50IGFkZCwgaW50IG9tb2RlLCBzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdHN0cnVjdCBpcF9tcmVxX3NvdXJjZSAqbXJlcXMsIGludCBpZmluZGV4KTtcbiBleHRlcm4gaW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsaW50IGlmaW5kZXgpO1xuIGV4dGVybiBpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXG4tXHRcdFx0c29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbik7XG4rXHRcdFx0c29ja29wdF90ICpvcHQpO1xuIGV4dGVybiBpbnQgaXBfbWNfZ3NmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGdyb3VwX2ZpbHRlciAqZ3NmLFxuIFx0XHRcdHNvY2twdHJfdCBvcHR2YWwsIHNpemVfdCBvZmZzZXQpO1xuIGV4dGVybiBpbnQgaXBfbWNfc2ZfYWxsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBfX2JlMzIgbG9jYWwsIF9fYmUzMiBybXQsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmhcbmluZGV4IDQ3MDEwMGFlNzEwNzcuLmRlMGVkMzYyYjM3NzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldC5oXG5AQCAtNzAsNiArNzAsMzEgQEAgc3RhdGljIGlubGluZSBpbnQgc29ja29wdF9pbml0X3VzZXIoc29ja29wdF90ICpvcHQsIGNoYXIgX191c2VyICpvcHR2YWwsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBHcm93IG9wdHZhbCB0byBAc2l6ZSwgZm9yIHRoZSBvcHRpb25zIHdob3NlIHJlcGx5IGlzIHNpemVkIGJ5IGEgY291bnQgdGhlXG4rICogY2FsbGVyIGxlZnQgaW4gb3B0dmFsIHJhdGhlciB0aGFuIGJ5IG9wdGxlbi4gVGhvc2Ugd3JpdGUgcGFzdCBvcHRsZW4gdG9kYXlcbisgKiBhbmQgdXNlcnNwYWNlIHJlbGllcyBvbiBpdC5cbisgKlxuKyAqIENhbGwgaXQgYmVmb3JlIHdyaXRpbmcgdGhyb3VnaCBvcHQtXHUwMDNlaXRlcl9vdXQ6IGl0IHJlLWFuY2hvcnMgdGhlIGl0ZXJhdG9yIGF0XG4rICogdGhlIGhlYWQgb2Ygb3B0dmFsLiBPbmx5IGEgdXNlciBidWZmZXIgY2FuIGJlIGxvbmdlciB0aGFuIHRoZSBvcHRsZW4gdGhlXG4rICogY2FsbGVyIGRlY2xhcmVkLCBzbyBhIGtlcm5lbC1iYWNrZWQgb3B0dmFsIGlzIHJlZnVzZWQgd2l0aCAtRUlOVkFMLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfZXhwYW5kX291dChzb2Nrb3B0X3QgKm9wdCwgc2l6ZV90IHNpemUpXG4re1xuK1x0aWYgKHNpemUgXHUwMDNjPSBpb3ZfaXRlcl9jb3VudChcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChXQVJOX09OX09OQ0UoIWl0ZXJfaXNfdWJ1ZihcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpb3ZfaXRlcl91YnVmKFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCwgSVRFUl9ERVNULCBvcHQtXHUwMDNlaXRlcl9vdXQudWJ1Ziwgc2l6ZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbixcbitcdFx0ICAgICAgIHN0cnVjdCBrdmVjICprdmVjKTtcbitcbiBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3Q7XG4gc3RydWN0IHBpcGVfaW5vZGVfaW5mbztcbiBzdHJ1Y3QgaW5vZGU7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWdtcC5jIGIvbmV0L2lwdjQvaWdtcC5jXG5pbmRleCBkNTYzNTVhY2E3OTc3Li4xNDRmY2ExNThhZGNiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaWdtcC5jXG4rKysgYi9uZXQvaXB2NC9pZ21wLmNcbkBAIC0yNzA5LDggKzI3MDksOCBAQCBpbnQgaXBfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgaW50IGlmaW5kZXgpXG4gXHRcdGVyciA9IGlwX21jX2xlYXZlX2dyb3VwKHNrLCBcdTAwMjZpbXIpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4taW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLFxuLVx0XHQgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcbitcbitpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdGludCBlcnIsIGxlbiwgY291bnQsIGNvcHljb3VudCwgbXNmX3NpemU7XG4gXHRzdHJ1Y3QgaXBfbXJlcW5cdGltcjtcbkBAIC0yNzU1LDE0ICsyNzU1LDE5IEBAIGludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixcbiBcdGxlbiA9IGZsZXhfYXJyYXlfc2l6ZShwc2wsIHNsX2FkZHIsIGNvcHljb3VudCk7XG4gXHRtc2YtXHUwMDNlaW1zZl9udW1zcmMgPSBjb3VudDtcbiBcdG1zZl9zaXplID0gSVBfTVNGSUxURVJfU0laRShjb3B5Y291bnQpO1xuLVx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFx1MDAyNm1zZl9zaXplLCBzaXplb2YoaW50KSkgfHxcbi1cdCAgICBjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBtc2YsIElQX01TRklMVEVSX1NJWkUoMCkpKSB7XG4rXG4rXHQvKiBUaGUgc291cmNlIGxpc3QgaXMgc2l6ZWQgYnkgdGhlIGltc2ZfbnVtc3JjIHRoZSBjYWxsZXIgbGVmdCBpblxuK1x0ICogb3B0dmFsLCBub3QgYnkgb3B0bGVuLCB3aGljaCBvbmx5IGhhcyB0byBjb3ZlciB0aGUgZml4ZWQgcGFydC5cbitcdCAqL1xuK1x0ZXJyID0gc29ja29wdF9leHBhbmRfb3V0KG9wdCwgbXNmX3NpemUpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdG9wdC1cdTAwM2VvcHRsZW4gPSBtc2Zfc2l6ZTtcbitcdGlmIChjb3B5X3RvX2l0ZXIobXNmLCBJUF9NU0ZJTFRFUl9TSVpFKDApLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9XG4rXHQgICAgSVBfTVNGSUxURVJfU0laRSgwKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHR9XG4tXHRpZiAobGVuIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGNvcHlfdG9fc29ja3B0cl9vZmZzZXQob3B0dmFsLFxuLVx0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGlwX21zZmlsdGVyLCBpbXNmX3NsaXN0X2ZsZXgpLFxuLVx0XHRcdFx0ICAgcHNsLVx1MDAzZXNsX2FkZHIsIGxlbikpXG4rXHRpZiAobGVuIFx1MDAyNlx1MDAyNiBjb3B5X3RvX2l0ZXIocHNsLVx1MDAzZXNsX2FkZHIsIGxlbiwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0cmV0dXJuIDA7XG4gZG9uZTpcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuaW5kZXggYTU1ZWYzMjdlYzkzMi4uYzU4ZTU2NWYyYTVhYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbkBAIC0xNzA2LDYgKzE3MDYsOCBAQCBpbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRjYXNlIElQX01TRklMVEVSOlxuIFx0e1xuIFx0XHRzdHJ1Y3QgaXBfbXNmaWx0ZXIgbXNmO1xuK1x0XHRzdHJ1Y3Qga3ZlYyBrdmVjO1xuK1x0XHRzb2Nrb3B0X3Qgb3B0O1xuIFxuIFx0XHRpZiAobGVuIFx1MDAzYyBJUF9NU0ZJTFRFUl9TSVpFKDApKSB7XG4gXHRcdFx0ZXJyID0gLUVJTlZBTDtcbkBAIC0xNzE1LDcgKzE3MTcsMTMgQEAgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbi1cdFx0ZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCBcdTAwMjZtc2YsIG9wdHZhbCwgb3B0bGVuKTtcbitcdFx0ZXJyID0gc29ja3B0cl90b19zb2Nrb3B0KFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4sIFx1MDAyNmt2ZWMpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHRlcnIgPSBpcF9tY19tc2ZnZXQoc2ssIFx1MDAyNm1zZiwgXHUwMDI2b3B0KTtcbitcdFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFx1MDAyNm9wdC5vcHRsZW4sIHNpemVvZihpbnQpKSlcbitcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcdGNhc2UgTUNBU1RfTVNGSUxURVI6XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCBjMDVkODZlNjNhYmY3Li4yOWEwZjdmOGUyY2FiIDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4rKysgYi9uZXQvc29ja2V0LmNcbkBAIC0yNDM3LDggKzI0MzcsOCBAQCBJTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKGJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsXG4gICogSXQgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgYm90aCBpb3YgcG9pbnRzIHRvIHRoZSBzYW1lIGRhdGEsIGJ1dCxcbiAgKiAuaXRlcl9pbiBpcyByZWFkLW9ubHkgYW5kIC5pdGVyX291dCBpcyB3cml0ZS1vbmx5IGJ5IHRoZSBwcm90b2NvbCBjYWxsYmFja3NcbiAgKi9cbi1zdGF0aWMgaW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCxcbi1cdFx0XHQgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBzdHJ1Y3Qga3ZlYyAqa3ZlYylcbitpbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLFxuK1x0XHQgICAgICAgc29ja3B0cl90IG9wdGxlbiwgc3RydWN0IGt2ZWMgKmt2ZWMpXG4ge1xuIFx0aW50IGtvcHRsZW47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowODoyOS45MTY1MDcyODNaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM1ODE3MzQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhlIHN0YW5kYXJkIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIG9yIG90aGVyIHNhbml0aXplcnMgd2lsbCBiZSBlbm91Z2gsIG9yIGlmIHRoaXMgcmVxdWlyZXMgdGhlIG1vcmUgYWdncmVzc2l2ZSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLiBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbi5cblxuRmlyc3QsIGxldCBtZSBnZXQgYSBncmFzcCBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgcGF0Y2ggaXMgYmVpbmcgYXBwbGllZC4gV2hhdCdzIGl0IHRyeWluZyB0byBhY2hpZXZlPyBXaGF0J3MgdGhlIGFyZWEgb2YgdGhlIGtlcm5lbCBpdCdzIG1vZGlmeWluZz9cblxuUmlnaHQsIHRoZSBmaWxlcyB0b3VjaGVkIGFyZTogYGluY2x1ZGUvbGludXgvaWdtcC5oYCwgYGluY2x1ZGUvbGludXgvbmV0LmhgLCBgbmV0L2lwdjQvaWdtcC5jYCwgYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLCBhbmQgYG5ldC9zb2NrZXQuY2AuIFRoaXMgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIElHTVAgKEludGVybmV0IEdyb3VwIE1hbmFnZW1lbnQgUHJvdG9jb2wpIGFuZCBnZW5lcmFsIG5ldHdvcmtpbmcgc29ja2V0cywgcHJvYmFibHkgSVB2NC4gVGhhdCBoZWxwcyBuYXJyb3cgdGhlIHNjb3BlLlxuXG5Ob3csIEknbGwgdXNlIGBncmVwcGVyYCAob3IgZXZlbiBqdXN0IGByZWFkLWZpbGVgIGFuZCBhIGdvb2Qgc2VhcmNoKSB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhlc2UgZmlsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgbWVtb3J5IGFsbG9jYXRpb24sIGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBhbmQgZGF0YSBmbG93IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYXJlYXMgd2hlcmUgYSB2YWx1ZSBtaWdodCBiZSByZWFkIGJlZm9yZSBpdCdzIGJlZW4gcHJvcGVybHkgc2V0LiBJ4oCZbGwgbG9vayBjYXJlZnVsbHkgYXQgYW55IG5ldyB2YXJpYWJsZXMgb3IgbW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBvbmVzLiBUaGF04oCZcyB3aGVyZSB0aGUgcmlza3MgdHlwaWNhbGx5IGhpZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowODozNS4yNzQ2ODM5NjFaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lnbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzAwOlxcdFxcdFxcdFxcdDAsIE5VTEwsIDApO1xcbjI3MDE6XFx0XFx0fVxcbjI3MDI6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBtYy1cXHUwMDNlc2ZsaXN0LCBuZXdwc2wpO1xcbjI3MDM6XFx0XFx0aWYgKHBzbClcXG4yNzA0OlxcdFxcdFxcdGtmcmVlX3JjdShwc2wsIHJjdSk7XFxuMjcwNTpcXHRcXHRwbWMtXFx1MDAzZXNmbW9kZSA9IG1zZi1cXHUwMDNlaW1zZl9mbW9kZTtcXG4yNzA2OlxcdFxcdGVyciA9IDA7XFxuMjcwNzpcXHRkb25lOlxcbjI3MDg6XFx0XFx0aWYgKGxlYXZlZ3JvdXApXFxuMjcwOTpcXHRcXHRcXHRlcnIgPSBpcF9tY19sZWF2ZV9ncm91cChzaywgXFx1MDAyNmltcik7XFxuMjcxMDpcXHRcXHRyZXR1cm4gZXJyO1xcbjI3MTE6XFx0fVxcbjI3MTI6XFx0XFxuMjcxMzpcXHRpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIHNvY2tvcHRfdCAqb3B0KVxcbjI3MTQ6XFx0e1xcbjI3MTU6XFx0XFx0aW50IGVyciwgbGVuLCBjb3VudCwgY29weWNvdW50LCBtc2Zfc2l6ZTtcXG4yNzE2OlxcdFxcdHN0cnVjdCBpcF9tcmVxblxcdGltcjtcXG4yNzE3OlxcdFxcdF9fYmUzMiBhZGRyID0gbXNmLVxcdTAwM2VpbXNmX211bHRpYWRkcjtcXG4yNzE4OlxcdFxcdHN0cnVjdCBpcF9tY19zb2NrbGlzdCAqcG1jO1xcbjI3MTk6XFx0XFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xcbjI3MjA6XFx0XFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xcbjI3MjE6XFx0XFx0c3RydWN0IGlwX3NmX3NvY2tsaXN0ICpwc2w7XFxuMjcyMjpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XFxuMjcyMzpcXHRcXG4yNzI0OlxcdFxcdEFTU0VSVF9SVE5MKCk7XFxuMjcyNTpcXHRcXG4yNzI2OlxcdFxcdGlmICghaXB2NF9pc19tdWx0aWNhc3QoYWRkcikpXFxuMjcyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNzI4OlxcdFxcbjI3Mjk6XFx0XFx0aW1yLmltcl9tdWx0aWFkZHIuc19hZGRyID0gbXNmLVxcdTAwM2VpbXNmX211bHRpYWRkcjtcXG4yNzMwOlxcdFxcdGltci5pbXJfYWRkcmVzcy5zX2FkZHIgPSBtc2YtXFx1MDAzZWltc2ZfaW50ZXJmYWNlO1xcbjI3MzE6XFx0XFx0aW1yLmltcl9pZmluZGV4ID0gMDtcXG4yNzMyOlxcdFxcdGluX2RldiA9IGlwX21jX2ZpbmRfZGV2KG5ldCwgXFx1MDAyNmltcik7XFxuMjczMzpcXHRcXG4yNzM0OlxcdFxcdGlmICghaW5fZGV2KSB7XFxuMjczNTpcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbjI3MzY6XFx0XFx0XFx0Z290byBkb25lO1xcbjI3Mzc6XFx0XFx0fVxcbjI3Mzg6XFx0XFx0ZXJyID0gLUVBRERSTk9UQVZBSUw7XFxuMjczOTpcXHRcXG4yNzQwOlxcdFxcdGZvcl9lYWNoX3BtY19ydG5sKGluZXQsIHBtYykge1xcbjI3NDE6XFx0XFx0XFx0aWYgKHBtYy1cXHUwMDNlbXVsdGkuaW1yX211bHRpYWRkci5zX2FkZHIgPT0gbXNmLVxcdTAwM2VpbXNmX211bHRpYWRkciBcXHUwMDI2XFx1MDAyNlxcbjI3NDI6XFx0XFx0XFx0ICAgIHBtYy1cXHUwMDNlbXVsdGkuaW1yX2lmaW5kZXggPT0gaW1yLmltcl9pZmluZGV4KVxcbjI3NDM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjc0NDpcXHRcXHR9XFxuMjc0NTpcXHRcXHRpZiAoIXBtYylcXHRcXHQvKiBtdXN0IGhhdmUgYSBwcmlvciBqb2luICovXFxuMjc0NjpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuMjc0NzpcXHRcXHRtc2YtXFx1MDAzZWltc2ZfZm1vZGUgPSBwbWMtXFx1MDAzZXNmbW9kZTtcXG4yNzQ4OlxcdFxcdHBzbCA9IHJ0bmxfZGVyZWZlcmVuY2UocG1jLVxcdTAwM2VzZmxpc3QpO1xcbjI3NDk6XFx0XFx0aWYgKCFwc2wpIHtcXG4yNzUwOlxcdFxcdFxcdGNvdW50ID0gMDtcXG4yNzUxOlxcdFxcdH0gZWxzZSB7XFxuMjc1MjpcXHRcXHRcXHRjb3VudCA9IHBzbC1cXHUwMDNlc2xfY291bnQ7XFxuMjc1MzpcXHRcXHR9XFxuMjc1NDpcXHRcXHRjb3B5Y291bnQgPSBjb3VudCBcXHUwMDNjIG1zZi1cXHUwMDNlaW1zZl9udW1zcmMgPyBjb3VudCA6IG1zZi1cXHUwMDNlaW1zZl9udW1zcmM7XFxuMjc1NTpcXHRcXHRsZW4gPSBmbGV4X2FycmF5X3NpemUocHNsLCBzbF9hZGRyLCBjb3B5Y291bnQpO1xcbjI3NTY6XFx0XFx0bXNmLVxcdTAwM2VpbXNmX251bXNyYyA9IGNvdW50O1xcbjI3NTc6XFx0XFx0bXNmX3NpemUgPSBJUF9NU0ZJTFRFUl9TSVpFKGNvcHljb3VudCk7XFxuMjc1ODpcXHRcXG4yNzU5OlxcdFxcdC8qIFRoZSBzb3VyY2UgbGlzdCBpcyBzaXplZCBieSB0aGUgaW1zZl9udW1zcmMgdGhlIGNhbGxlciBsZWZ0IGluXFxuMjc2MDpcXHRcXHQgKiBvcHR2YWwsIG5vdCBieSBvcHRsZW4sIHdoaWNoIG9ubHkgaGFzIHRvIGNvdmVyIHRoZSBmaXhlZCBwYXJ0LlxcbjI3NjE6XFx0XFx0ICovXFxuMjc2MjpcXHRcXHRlcnIgPSBzb2Nrb3B0X2V4cGFuZF9vdXQob3B0LCBtc2Zfc2l6ZSk7XFxuMjc2MzpcXHRcXHRpZiAoZXJyKVxcbjI3NjQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNzY1OlxcdFxcbjI3NjY6XFx0XFx0b3B0LVxcdTAwM2VvcHRsZW4gPSBtc2Zfc2l6ZTtcXG4yNzY3OlxcdFxcdGlmIChjb3B5X3RvX2l0ZXIobXNmLCBJUF9NU0ZJTFRFUl9TSVpFKDApLCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT1cXG4yNzY4OlxcdFxcdCAgICBJUF9NU0ZJTFRFUl9TSVpFKDApKVxcbjI3Njk6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMjc3MDpcXHRcXHRpZiAobGVuIFxcdTAwMjZcXHUwMDI2IGNvcHlfdG9faXRlcihwc2wtXFx1MDAzZXNsX2FkZHIsIGxlbiwgXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcXG4yNzcxOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjI3NzI6XFx0XFx0cmV0dXJuIDA7XFxuMjc3MzpcXHRkb25lOlxcbjI3NzQ6XFx0XFx0cmV0dXJuIGVycjtcXG4yNzc1OlxcdH1cXG4yNzc2OlxcdFxcbjI3Nzc6XFx0aW50IGlwX21jX2dzZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBncm91cF9maWx0ZXIgKmdzZixcXG4yNzc4OlxcdFxcdFxcdCBzb2NrcHRyX3Qgb3B0dmFsLCBzaXplX3Qgc3Nfb2Zmc2V0KVxcbjI3Nzk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowODozNS4yNzQ4MzcwMDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE3NDg4OTkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgaXBfc29ja2dsdWUuY2AqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gSVB2NCBzb2NrZXRzLCBhbmQgSSBoYXZlIGEgZmVlbGluZyB0aGUgaXNzdWUgaXMgZ29pbmcgdG8gYmUgaW4gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLiBNeSBpbnN0aW5jdHMgYXJlIHRlbGxpbmcgbWUgdG8gemVybyBpbiBhcm91bmQgbGluZSAxNzAwLiBJJ20gbm90IHN1cmUgKmV4YWN0bHkqIHdoYXQgSSdtIGxvb2tpbmcgZm9yIHlldCwgYnV0IHRoYXQgZmVlbHMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgdGhlc2Ugc29ja2V0cyBhcmUgYm91bmQgYW5kIGhhbmRsZWQuIExldCdzIHNlZSB3aGF0J3MgdGhlcmUgYW5kIHdoYXQgY29udGV4dCB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGF0IGxpbmUgcHJvdmlkZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSBmbG93IGFuZCBob3BlZnVsbHkgbmFycm93IGRvd24gdGhlIHBvdGVudGlhbCBjYXVzZSBvZiB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nLiBUaW1lIHRvIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODI3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowODozOC40NDk3MzAwMTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX3NvY2tnbHVlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcwMDpcXHRcXG4xNzAxOlxcdFxcdGlmIChuZWVkc19ydG5sKVxcbjE3MDI6XFx0XFx0XFx0cnRubF9sb2NrKCk7XFxuMTcwMzpcXHRcXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XFxuMTcwNDpcXHRcXG4xNzA1OlxcdFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbjE3MDY6XFx0XFx0Y2FzZSBJUF9NU0ZJTFRFUjpcXG4xNzA3OlxcdFxcdHtcXG4xNzA4OlxcdFxcdFxcdHN0cnVjdCBpcF9tc2ZpbHRlciBtc2Y7XFxuMTcwOTpcXHRcXHRcXHRzdHJ1Y3Qga3ZlYyBrdmVjO1xcbjE3MTA6XFx0XFx0XFx0c29ja29wdF90IG9wdDtcXG4xNzExOlxcdFxcbjE3MTI6XFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNjIElQX01TRklMVEVSX1NJWkUoMCkpIHtcXG4xNzEzOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTcxNDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xNzE1OlxcdFxcdFxcdH1cXG4xNzE2OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2bXNmLCBvcHR2YWwsIElQX01TRklMVEVSX1NJWkUoMCkpKSB7XFxuMTcxNzpcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjE3MTg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTcxOTpcXHRcXHRcXHR9XFxuMTcyMDpcXHRcXHRcXHRlcnIgPSBzb2NrcHRyX3RvX3NvY2tvcHQoXFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4sIFxcdTAwMjZrdmVjKTtcXG4xNzIxOlxcdFxcdFxcdGlmIChlcnIpXFxuMTcyMjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xNzIzOlxcdFxcbjE3MjQ6XFx0XFx0XFx0ZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCBcXHUwMDI2bXNmLCBcXHUwMDI2b3B0KTtcXG4xNzI1OlxcdFxcdFxcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcXHUwMDI2b3B0Lm9wdGxlbiwgc2l6ZW9mKGludCkpKVxcbjE3MjY6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4xNzI3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3Mjg6XFx0XFx0fVxcbjE3Mjk6XFx0XFx0Y2FzZSBNQ0FTVF9NU0ZJTFRFUjpcXG4xNzMwOlxcdFxcdFxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxcbjE3MzE6XFx0XFx0XFx0XFx0ZXJyID0gY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcihzaywgb3B0dmFsLCBvcHRsZW4sXFxuMTczMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBsZW4pO1xcbjE3MzM6XFx0XFx0XFx0ZWxzZVxcbjE3MzQ6XFx0XFx0XFx0XFx0ZXJyID0gaXBfZ2V0X21jYXN0X21zZmlsdGVyKHNrLCBvcHR2YWwsIG9wdGxlbiwgbGVuKTtcXG4xNzM1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3MzY6XFx0XFx0Y2FzZSBJUF9QUk9UT0NPTDpcXG4xNzM3OlxcdFxcdFxcdHZhbCA9IGluZXRfc2soc2spLVxcdTAwM2VpbmV0X251bTtcXG4xNzM4OlxcdFxcdFxcdGJyZWFrO1xcbjE3Mzk6XFx0XFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDg6MzguNDQ5ODkxNjczWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MTI3MzM1OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byBTb2NrZXQgT3B0aW9uIEludGVybmFscyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IG5ldHdvcmsgc29ja2V0IG9wdGlvbnMsIGFuZCBJIHdhbnQgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGVtLiBJIHNob3VsZCByZWFsbHkgdGFrZSBhIGxvb2sgYXQgYHNvY2twdHJfdG9fc29ja29wdGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvc29ja2V0LmNgLiBJIG5lZWQgdG8gY2xhcmlmeSBwcmVjaXNlbHkgaG93IHRoYXQgY29udmVyc2lvbiBoYXBwZW5zIGFuZCBob3cgYHNvY2tvcHRfdGAgc3RydWN0dXJlcyBhcmUgbWFuYWdlZCBhbmQgdXNlZCBpbiB0aGUgcHJvY2Vzcy4gSXQncyB0aW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgd2hvbGUgcGljdHVyZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZSBwb2ludGVycyBhbmQgZGF0YSBhcmUgcGFzc2VkIGFyb3VuZCDigJMgdGhhdCdzIG9mdGVuIHdoZXJlIHRoZSBzdWJ0bGUgYnVncyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBjYW4gaGlkZS4gTGV0J3Mgc2VlIGlmIHRoaXMgcmV2ZWFscyBhbnkgaW50ZXJlc3RpbmcgZGVzaWduIGNob2ljZXMgb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbiBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA4OjQxLjE2MjYyNzUzMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NvY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MzA6XFx0XFxuMjQzMTpcXHRJTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKGJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsXFxuMjQzMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgaW50IG9wdG5hbWUpKTtcXG4yNDMzOlxcdFxcbjI0MzQ6XFx0LypcXG4yNDM1OlxcdCAqIEluaXRpYWxpemUgYSBzb2Nrb3B0X3QgZnJvbSBzb2NrcHRyIG9wdHZhbC9vcHRsZW4sIHNldHRpbmcgdXAgaW92X2l0ZXJcXG4yNDM2OlxcdCAqIGZvciBib3RoIGlucHV0IGFuZCBvdXRwdXQgZGlyZWN0aW9ucy5cXG4yNDM3OlxcdCAqIEl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IGJvdGggaW92IHBvaW50cyB0byB0aGUgc2FtZSBkYXRhLCBidXQsXFxuMjQzODpcXHQgKiAuaXRlcl9pbiBpcyByZWFkLW9ubHkgYW5kIC5pdGVyX291dCBpcyB3cml0ZS1vbmx5IGJ5IHRoZSBwcm90b2NvbCBjYWxsYmFja3NcXG4yNDM5OlxcdCAqL1xcbjI0NDA6XFx0aW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCxcXG4yNDQxOlxcdFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBzdHJ1Y3Qga3ZlYyAqa3ZlYylcXG4yNDQyOlxcdHtcXG4yNDQzOlxcdFxcdGludCBrb3B0bGVuO1xcbjI0NDQ6XFx0XFxuMjQ0NTpcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmtvcHRsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKVxcbjI0NDY6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMjQ0NzpcXHRcXG4yNDQ4OlxcdFxcdGlmIChrb3B0bGVuIFxcdTAwM2MgMClcXG4yNDQ5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI0NTA6XFx0XFxuMjQ1MTpcXHRcXHRpZiAob3B0dmFsLmlzX2tlcm5lbCkge1xcbjI0NTI6XFx0XFx0XFx0a3ZlYy1cXHUwMDNlaW92X2Jhc2UgPSBvcHR2YWwua2VybmVsO1xcbjI0NTM6XFx0XFx0XFx0a3ZlYy1cXHUwMDNlaW92X2xlbiA9IGtvcHRsZW47XFxuMjQ1NDpcXHRcXHRcXHRpb3ZfaXRlcl9rdmVjKFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfb3V0LCBJVEVSX0RFU1QsIGt2ZWMsIDEsIGtvcHRsZW4pO1xcbjI0NTU6XFx0XFx0XFx0aW92X2l0ZXJfa3ZlYyhcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX2luLCBJVEVSX1NPVVJDRSwga3ZlYywgMSwga29wdGxlbik7XFxuMjQ1NjpcXHRcXHR9IGVsc2Uge1xcbjI0NTc6XFx0XFx0XFx0aW92X2l0ZXJfdWJ1ZihcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCwgSVRFUl9ERVNULCBvcHR2YWwudXNlciwga29wdGxlbik7XFxuMjQ1ODpcXHRcXHRcXHRpb3ZfaXRlcl91YnVmKFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfaW4sIElURVJfU09VUkNFLCBvcHR2YWwudXNlcixcXG4yNDU5OlxcdFxcdFxcdFxcdCAgICAgIGtvcHRsZW4pO1xcbjI0NjA6XFx0XFx0fVxcbjI0NjE6XFx0XFx0b3B0LVxcdTAwM2VvcHRsZW4gPSBrb3B0bGVuO1xcbjI0NjI6XFx0XFxuMjQ2MzpcXHRcXHRyZXR1cm4gMDtcXG4yNDY0OlxcdH1cXG4yNDY1OlxcdFxcbjI0NjY6XFx0aW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxcbjI0Njc6XFx0XFx0XFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxcbjI0Njg6XFx0e1xcbjI0Njk6XFx0XFx0aW50IG1heF9vcHRsZW4gX19tYXliZV91bnVzZWQgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowODo0MS4xNjI3ODM1NjFaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI4NDYzMTk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHN0cnVjdCBpcF9tc2ZpbHRlcmAgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCBhIHJlZnJlc2hlciBvbiB0aGUgYHN0cnVjdCBpcF9tc2ZpbHRlcmAuIEl0J3MgYSBrZXkgc3RydWN0dXJlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIElHTVAvTUxEIGFuZCBtdWx0aWNhc3QgdHJhZmZpYyBtYW5hZ2VtZW50IGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyAqYWN0dWFsbHkqIGluIHRoZXJlLCBob3cgaXQncyBzdHJ1Y3R1cmVkLCBhbmQgd2hhdCBlbGVtZW50cyBhcmUgY3JpdGljYWwgZm9yIGZpbHRlcmluZy4gSSB3YW50IHRvIHNlZSB3aGljaCBmaWVsZHMgaG9sZCB0aGUgZ3JvdXAgYWRkcmVzcywgc291cmNlIGFkZHJlc3NlcyAoaWYgYW55KSwgYW5kIGFueSBvdGhlciBhc3NvY2lhdGVkIG1ldGFkYXRhIHRoYXQgZGljdGF0ZXMgaG93IHRyYWZmaWMgd2lsbCBiZSBoYW5kbGVkLiBJIGFtIHN1cmUgSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHN0cnVjdHVyZSBhbGlnbnMgd2l0aCB0aGUgY3VycmVudCBzdGFuZGFyZHMgZm9yIElHTVB2MyBvciBNTER2MiwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZmllbGQgdmFsdWVzIGFyZSB3aXRoIHJlZ2FyZCB0byB0aGUgcGFydGljdWxhciBtdWx0aWNhc3Qgc3RhdGUgb3IgdGhlIGZpbHRlciBtb2RlLiBNeSBnb2FsIGhlcmUgaXMgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBjb3JlIHBpZWNlcyB0aGF0IGFyZSB1c2VkIHRvIHJlcHJlc2VudCBtdWx0aWNhc3QgZmlsdGVyaW5nIHJ1bGVzIHdpdGhpbiB0aGUga2VybmVsJ3MgZGF0YSBzdHJ1Y3R1cmVzLiBTcGVjaWZpY2FsbHksIEknbSBleHBlY3RpbmcgdG8gZmluZCBpbmZvcm1hdGlvbiByZWxldmFudCB0byBqb2lucywgbGVhdmVzLCBzb3VyY2VzLCBhbmQgcGVyaGFwcyBzb21lIGludGVybmFsIGZsYWdzIHRoYXQgbWlnaHQgZGljdGF0ZSBiZWhhdmlvciBsaWtlIGluY2x1ZGUvZXhjbHVkZSBsaXN0cy4gVW5kZXJzdGFuZGluZyB0aGUgZGVmaW5pdGlvbiB3aWxsIGFsbG93IG1lIHRvIGltbWVkaWF0ZWx5IGlkZW50aWZ5IHBvdGVudGlhbCBpc3N1ZXMgaW4gcmVsYXRlZCBjb2RlIG9yIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2sgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NjQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA4OjQ0LjQ0NzQxODQ5MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MTEyNjQxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgaXBfbXNmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9pZ21wLmg9MjczPWV4dGVybiBpbnQgaXBfbWNfc291cmNlKGludCBhZGQsIGludCBvbW9kZSwgc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbGludXgvaWdtcC5oLTI3NC1cXHRcXHRzdHJ1Y3QgaXBfbXJlcV9zb3VyY2UgKm1yZXFzLCBpbnQgaWZpbmRleCk7XFxuaW5jbHVkZS9saW51eC9pZ21wLmg6Mjc1OmV4dGVybiBpbnQgaXBfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixpbnQgaWZpbmRleCk7XFxuaW5jbHVkZS9saW51eC9pZ21wLmg6Mjc2OmV4dGVybiBpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXFxuaW5jbHVkZS9saW51eC9pZ21wLmgtMjc3LVxcdFxcdFxcdHNvY2tvcHRfdCAqb3B0KTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9pbi5oPTE5Mz1zdHJ1Y3QgaXBfbXJlcV9zb3VyY2Uge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2luLmgtMTk4LVxcbmluY2x1ZGUvdWFwaS9saW51eC9pbi5oOjE5OTpzdHJ1Y3QgaXBfbXNmaWx0ZXIge1xcbmluY2x1ZGUvdWFwaS9saW51eC9pbi5oLTIwMC1cXHRfX2JlMzJcXHRcXHRpbXNmX211bHRpYWRkcjtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9pbi5oLTIxMC0jZGVmaW5lIElQX01TRklMVEVSX1NJWkUobnVtc3JjKSBcXFxcXFxuaW5jbHVkZS91YXBpL2xpbnV4L2luLmg6MjExOlxcdChzaXplb2Yoc3RydWN0IGlwX21zZmlsdGVyKSAtIHNpemVvZihfX3UzMikgXFxcXFxcbmluY2x1ZGUvdWFwaS9saW51eC9pbi5oLTIxMi1cXHQrIChudW1zcmMpICogc2l6ZW9mKF9fdTMyKSlcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0yNDgzPWludCBpcF9tY19zb3VyY2UoaW50IGFkZCwgaW50IG9tb2RlLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTI2MjEtXFxubmV0L2lwdjQvaWdtcC5jOjI2MjI6aW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIGludCBpZmluZGV4KVxcbm5ldC9pcHY0L2lnbXAuYy0yNjIzLXtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yNzEyLVxcbm5ldC9pcHY0L2lnbXAuYzoyNzEzOmludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgc29ja29wdF90ICpvcHQpXFxubmV0L2lwdjQvaWdtcC5jLTI3MTQte1xcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz02NjI9c3RhdGljIGludCBzZXRfbWNhc3RfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNjY2LXtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjY2NzpcXHRzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZjtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTY2OC1cXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gKnBzaW47XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTg5Mj1pbnQgZG9faXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEyNTQtXFx0e1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTI1NTpcXHRcXHRzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZjtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEyNTYtXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE1MDc9aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzA3LVxcdHtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE3MDg6XFx0XFx0c3RydWN0IGlwX21zZmlsdGVyIG1zZjtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3MDktXFx0XFx0c3RydWN0IGt2ZWMga3ZlYztcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oPTE5Mz1zdHJ1Y3QgaXBfbXJlcV9zb3VyY2Uge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2luLmgtMTk4LVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oOjE5OTpzdHJ1Y3QgaXBfbXNmaWx0ZXIge1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oLTIwMC1cXHRfX2JlMzJcXHRcXHRpbXNmX211bHRpYWRkcjtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oLTIxMC0jZGVmaW5lIElQX01TRklMVEVSX1NJWkUobnVtc3JjKSBcXFxcXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2luLmg6MjExOlxcdChzaXplb2Yoc3RydWN0IGlwX21zZmlsdGVyKSAtIHNpemVvZihfX3UzMikgXFxcXFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oLTIxMi1cXHQrIChudW1zcmMpICogc2l6ZW9mKF9fdTMyKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDg6NDYuNzg4NTUyMjk1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MDA4NjIzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBIZWFkZXJzKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIE15IGludHVpdGlvbidzIHRlbGxpbmcgbWUgdG8gbG9vayBhdCBgaW5jbHVkZS91YXBpL2xpbnV4L2luLmhgIGFuZCBzcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIGFyb3VuZCBsaW5lIDE5OS4gSXQncyB1c3VhbGx5IHRoZSBmaXJzdCBwbGFjZSBJIHN0YXJ0IGZvciBsb3ctbGV2ZWwgc29ja2V0IG9wdGlvbnMgb3IgZGVmaW5pdGlvbnMuIEkgc3VzcGVjdCB0aGVyZSdzIHNvbWV0aGluZyByZWxldmFudCB0byBteSBjdXJyZW50IGRlYnVnZ2luZyBvciBpbnZlc3RpZ2F0aW9uIGx1cmtpbmcgaW4gdGhhdCB2aWNpbml0eS4gSXQncyBhIGZ1bmRhbWVudGFsIGhlYWRlciwgc28gY2hhbmNlcyBhcmUgd2hhdGV2ZXIgSSBuZWVkIGlzIGRlY2xhcmVkIGluIHRoYXQgZmlsZS4gSSBleHBlY3QgdG8gZmluZCBhIG1hY3JvIG9yIGVudW0gb3Igc3RydWN0IGRlZmluaXRpb24gdGhhdCByZWxhdGVzIHRvIHdoYXRldmVyIEknbSB0cm91Ymxlc2hvb3RpbmcuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk2MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA4OjQ4LjU4OTQxNzI5OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvaW4uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxOTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTU6XFx0XFx0X19iZTMyXFx0XFx0aW1yX2ludGVyZmFjZTtcXG4gMTk2OlxcdFxcdF9fYmUzMlxcdFxcdGltcl9zb3VyY2VhZGRyO1xcbiAxOTc6XFx0fTtcXG4gMTk4OlxcdFxcbiAxOTk6XFx0c3RydWN0IGlwX21zZmlsdGVyIHtcXG4gMjAwOlxcdFxcdF9fYmUzMlxcdFxcdGltc2ZfbXVsdGlhZGRyO1xcbiAyMDE6XFx0XFx0X19iZTMyXFx0XFx0aW1zZl9pbnRlcmZhY2U7XFxuIDIwMjpcXHRcXHRfX3UzMlxcdFxcdGltc2ZfZm1vZGU7XFxuIDIwMzpcXHRcXHRfX3UzMlxcdFxcdGltc2ZfbnVtc3JjO1xcbiAyMDQ6XFx0XFx0dW5pb24ge1xcbiAyMDU6XFx0XFx0XFx0X19iZTMyXFx0XFx0aW1zZl9zbGlzdFsxXTtcXG4gMjA2OlxcdFxcdFxcdF9fREVDTEFSRV9GTEVYX0FSUkFZKF9fYmUzMiwgaW1zZl9zbGlzdF9mbGV4KTtcXG4gMjA3OlxcdFxcdH07XFxuIDIwODpcXHR9O1xcbiAyMDk6XFx0XFxuIDIxMDpcXHQjZGVmaW5lIElQX01TRklMVEVSX1NJWkUobnVtc3JjKSBcXFxcXFxuIDIxMTpcXHRcXHQoc2l6ZW9mKHN0cnVjdCBpcF9tc2ZpbHRlcikgLSBzaXplb2YoX191MzIpIFxcXFxcXG4gMjEyOlxcdFxcdCsgKG51bXNyYykgKiBzaXplb2YoX191MzIpKVxcbiAyMTM6XFx0XFxuIDIxNDpcXHRzdHJ1Y3QgZ3JvdXBfcmVxIHtcXG4gMjE1OlxcdFxcdF9fdTMyXFx0XFx0XFx0XFx0IGdyX2ludGVyZmFjZTtcXHQvKiBpbnRlcmZhY2UgaW5kZXggKi9cXG4gMjE2OlxcdFxcdHN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIGdyX2dyb3VwO1xcdC8qIGdyb3VwIGFkZHJlc3MgKi9cXG4gMjE3OlxcdH07XFxuIDIxODpcXHRcXG4gMjE5OlxcdHN0cnVjdCBncm91cF9zb3VyY2VfcmVxIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDg6NDguNTg5NDg2MTE4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzOTYxNjkyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgSVBfTVNGSUxURVJgIFNvY2tldCBPcHRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IHRoZSBgc3RydWN0IGlwX21zZmlsdGVyYCBhbmQgaG93IGl0J3MgdXNlZCBpbiB0aGUga2VybmVsJ3MgYElQX01TRklMVEVSYCBzb2NrZXQgb3B0aW9uLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgdGhlIGludGVyYWN0aW9uIHdpdGggdXNlci1zcGFjZSBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuRmlyc3QsIEkgc2VlIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmOiBgaW1zZl9tdWx0aWFkZHJgLCBgaW1zZl9pbnRlcmZhY2VgLCBgaW1zZl9mbW9kZWAsIGBpbXNmX251bXNyY2AsIGFuZCBgaW1zZl9zbGlzdGAvYGltc2Zfc2xpc3RfZmxleGAuIFRoZSBzaXplIGNhbGN1bGF0aW9uIHVzaW5nIGBJUF9NU0ZJTFRFUl9TSVpFKDApYCBnaXZlcyBtZSBhIGJhc2Ugc2l6ZS4gVGhlbiwgYGRvX2lwX2dldHNvY2tvcHRgIGhhbmRsZXMgdGhlIGBJUF9NU0ZJTFRFUmAgY2FzZS4gSXQgY29waWVzIHRoZSBpbml0aWFsIHBhcnQgb2YgdGhlIGBtc2ZgIHN0cnVjdCBmcm9tIHVzZXItc3BhY2UgdXNpbmcgYGNvcHlfZnJvbV9zb2NrcHRyYC5cblxuVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGNhbGwgdG8gYGlwX21jX21zZmdldGAuIEhlcmUncyB3aGVyZSB0aGUgdXNlci1wcm92aWRlZCBkYXRhIGRpcmVjdGx5IGFmZmVjdHMga2VybmVsIGJlaGF2aW9yLiBgbXNmYCdzIGluaXRpYWwgZmllbGRzIGFyZSBwb3B1bGF0ZWQgZnJvbSB1c2VyLXNwYWNlLiAgYGlwX21jX21zZmdldGAgdGhlbiByZWFkcyBgbXNmLmltc2ZfZm1vZGVgIGFuZCBgbXNmLmltc2ZfbnVtc3JjYC4gVGhpcyBpcyB0aGUgdXNlci1wcm92aWRlZCBjb3VudCwgYW5kIGBtc2Zfc2l6ZWAgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGlzIGNvdW50LCBlc3NlbnRpYWxseSBkZXRlcm1pbmluZyBob3cgbXVjaCBkYXRhIGlzIGJlaW5nIHRyYW5zZmVycmVkIGJhY2sgdG8gdXNlciBzcGFjZS4gIFRoZSBpbnRlcmVzdGluZyBwb2ludCBpcyB0aGF0IGBtc2YtXHUwMDNlaW1zZl9udW1zcmNgIGlzIG1vZGlmaWVkIHRvIGBjb3VudGAsIGFmdGVyIGBjb3B5Y291bnRgIGlzIGNhbGN1bGF0ZWQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBgc29ja29wdF9leHBhbmRfb3V0YC4gSXQncyB1c2VkIHRvIGdyb3cgdGhlIHVzZXItc3BhY2UgYnVmZmVyIGBvcHR2YWxgIHdoZW4gcmVwbHlpbmcgd2l0aCB0aGUgc29ja2V0IG9wdGlvbiBkYXRhLiAgVGhlIGtleSBwYXJ0IGlzIHRoZSBjb21tZW50IGFib3V0IGdyb3dpbmcgdGhlIGJ1ZmZlciAqYmV5b25kKiB0aGUgaW5pdGlhbCBgb3B0bGVuYCBwYXNzZWQgYnkgdGhlIHVzZXIuIFRoZSBgc29ja29wdF9leHBhbmRfb3V0YCBmdW5jdGlvbiByZS1hbmNob3JzIHRoZSBpdGVyYXRvciBhdCB0aGUgYmVnaW5uaW5nIG9mIGBvcHR2YWxgIHVwIHRvIHNpemUsIHVzaW5nIGBpb3ZfaXRlcl91YnVmYCBvbiBgb3B0LVx1MDAzZWl0ZXJfb3V0LnVidWZgLiBUaGlzIG1lYW5zIHRoYXQgdXNlci1zcGFjZSBkYXRhIGNhbiBpbmZsdWVuY2UgdGhlIHNpemUgb2Yga2VybmVsIHdyaXRlcyB0byB1c2VyIHNwYWNlLiBJdCBzZWVtcyB0aGUgaW50ZW50aW9uIGhlcmUgaXMgdG8gYWxsb3cgdGhlIGtlcm5lbCB0byB3cml0ZSBwYXN0IGBvcHRsZW5gIGluIGEgY29udHJvbGxlZCB3YXksIGJ1dCBpdCBhbHNvIGNyZWF0ZXMgdGhlIHBvdGVudGlhbCBmb3Igc29tZSBpbnRlcmVzdGluZyBzaWRlLWVmZmVjdHMgdGhhdCBuZWVkIGNhcmVmdWwgcmV2aWV3LiBUaGUgY29kZSBkZXBlbmRzIG9uIHRoZSBidWZmZXIgYmVpbmcgYSB1c2VyIGJ1ZmZlciBhcyBub3RlZC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgb3B0LVx1MDAzZWl0ZXJfb3V0LnVidWZgIGlzIHBvaW50aW5nLiBgc29ja3B0cl90b19zb2Nrb3B0YCBpbml0aWFsaXplcyBgb3B0LVx1MDAzZWl0ZXJfb3V0LnVidWZgIHdpdGggYG9wdHZhbC51c2VyYC4gVGhpcyB0ZWxscyBtZSB0aGF0IHRoZSBvdXRwdXQgYnVmZmVyIGlzIHRoZSB1c2VyLXByb3ZpZGVkIGBvcHR2YWxgIGJ1ZmZlci5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBhIGNyYWZ0ZWQgdXNlci1zcGFjZSBpbnB1dCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGEgYnVmZmVyIG92ZXJmbG93IG9yIGluZm9ybWF0aW9uIGxlYWssIGlmIHRoZXJlJ3MgaW5zdWZmaWNpZW50IHZhbGlkYXRpb24gYXJvdW5kIGBtc2Zfc2l6ZWAgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gYG9wdGxlbmAuIFRoZSBjb21tZW50IGFib3V0IHRoZSBpbnRlbmRlZCB1c2Ugb2YgZ3Jvd2luZyB0aGUgYnVmZmVyIGlzIGFsc28gc29tZXRoaW5nIHRoYXQgbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGluIHRlcm1zIG9mIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIHRocm91Z2ggdGhlIGNvZGUgcGF0aHMgYW5kIGlkZW50aWZ5IHdoYXQgdGhlIHVwcGVyIGJvdW5kcyBhcmUgYW5kIGhvdyB0aGV5IGFyZSBlbmZvcmNlZC4gVG8gZG8gdGhpcywgSSB3aWxsIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxsZXJzIG9mIGBpcF9tY19tc2ZnZXRgLCBgc29ja3B0cl90b19zb2Nrb3B0YCwgYW5kIGBzb2Nrb3B0X2V4cGFuZF9vdXRgIHVzaW5nIGEgZ3JlcCBzZWFyY2guIFRoaXMgc2hvdWxkIHRlbGwgbWUgaWYgdGhlcmUgYXJlIG90aGVyIHBsYWNlcyBpbiB0aGUga2VybmVsIHRoYXQgYmVoYXZlIHNpbWlsYXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU2MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowODo1NC45ODU2NTc0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTM4ODk0NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX21jX21zZmdldHxzb2NrcHRyX3RvX3NvY2tvcHR8c29ja29wdF9leHBhbmRfb3V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWdtcC5oPTI3NT1leHRlcm4gaW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsaW50IGlmaW5kZXgpO1xcbmluY2x1ZGUvbGludXgvaWdtcC5oOjI3NjpleHRlcm4gaW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLFxcbmluY2x1ZGUvbGludXgvaWdtcC5oLTI3Ny1cXHRcXHRcXHRzb2Nrb3B0X3QgKm9wdCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldC5oPTU2PXN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfaW5pdF91c2VyKHNvY2tvcHRfdCAqb3B0LCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXQuaC04MS0gKi9cXG5pbmNsdWRlL2xpbnV4L25ldC5oOjgyOnN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfZXhwYW5kX291dChzb2Nrb3B0X3QgKm9wdCwgc2l6ZV90IHNpemUpXFxuaW5jbHVkZS9saW51eC9uZXQuaC04My17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldC5oLTk0LVxcbmluY2x1ZGUvbGludXgvbmV0Lmg6OTU6aW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbixcXG5pbmNsdWRlL2xpbnV4L25ldC5oLTk2LVxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZlYyAqa3ZlYyk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjYyMj1pbnQgaXBfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgaW50IGlmaW5kZXgpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjcxMi1cXG5uZXQvaXB2NC9pZ21wLmM6MjcxMzppbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIHNvY2tvcHRfdCAqb3B0KVxcbm5ldC9pcHY0L2lnbXAuYy0yNzE0LXtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yNzYxLVxcdCAqL1xcbm5ldC9pcHY0L2lnbXAuYzoyNzYyOlxcdGVyciA9IHNvY2tvcHRfZXhwYW5kX291dChvcHQsIG1zZl9zaXplKTtcXG5uZXQvaXB2NC9pZ21wLmMtMjc2My1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xNTA3PWludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTcxOS1cXHRcXHR9XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNzIwOlxcdFxcdGVyciA9IHNvY2twdHJfdG9fc29ja29wdChcXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbiwgXFx1MDAyNmt2ZWMpO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTcyMS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzIzLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTcyNDpcXHRcXHRlcnIgPSBpcF9tY19tc2ZnZXQoc2ssIFxcdTAwMjZtc2YsIFxcdTAwMjZvcHQpO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTcyNS1cXHRcXHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXFx1MDAyNm9wdC5vcHRsZW4sIHNpemVvZihpbnQpKSlcXG4tLVxcbm5ldC9zb2NrZXQuYz0yNDMxPUlORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoYm9vbCB0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0KGludCBsZXZlbCxcXG4tLVxcbm5ldC9zb2NrZXQuYy0yNDM5LSAqL1xcbm5ldC9zb2NrZXQuYzoyNDQwOmludCBzb2NrcHRyX3RvX3NvY2tvcHQoc29ja29wdF90ICpvcHQsIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L3NvY2tldC5jLTI0NDEtXFx0XFx0ICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIHN0cnVjdCBrdmVjICprdmVjKVxcbi0tXFxubmV0L3NvY2tldC5jPTI0NjY9aW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxcbi0tXFxubmV0L3NvY2tldC5jLTI0ODUtXFx0fSBlbHNlIGlmIChvcHMtXFx1MDAzZWdldHNvY2tvcHRfaXRlcikge1xcbm5ldC9zb2NrZXQuYzoyNDg2OlxcdFxcdGVyciA9IHNvY2twdHJfdG9fc29ja29wdChcXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbiwgXFx1MDAyNmt2ZWMpO1xcbm5ldC9zb2NrZXQuYy0yNDg3LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA4OjU3LjkyNDU1Nzc4NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NjU4MTU1OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIENhbGwgUGF0aCBvZiBgaXBfbWNfbXNmZ2V0YCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBpcF9tY19tc2ZnZXRgIGlzIG9ubHkgY2FsbGVkIHdpdGhpbiBgZG9faXBfZ2V0c29ja29wdGAuIFRoaXMgc3VnZ2VzdHMgYSB0YXJnZXRlZCBhcmVhIHRvIGludmVzdGlnYXRlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHNvY2tldCBvcHRpb24gcmV0cmlldmFsIHJlbGF0ZWQgdG8gSVAgbXVsdGljYXN0LiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGhvdyBgaXBfbWNfbXNmZ2V0YCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYHNvY2tvcHRfdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgc29ja29wdF90YCBpcyBkZWZpbmVkLiBUaGlzIGlzIGxpa2VseSBhIHN0cnVjdHVyZSBvciB0eXBlIHRoYXQncyBmdW5kYW1lbnRhbCB0byBob3cgc29ja2V0IG9wdGlvbnMgYXJlIGhhbmRsZWQuIEEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSBzdWdnZXN0cyBJIHNob3VsZCBmaW5kIHRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L25ldC5oYC4gTGV0J3MgY29uZmlybSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQwMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA5OjA3LjU4MjcxNTk5N1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L25ldC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdCAqXFxuICA0MTpcXHQgKiBUaGUgb3B0bGVuIGZpZWxkIGFsbG93cyBjYWxsYmFja3MgdG8gcmV0dXJuIGEgc3BlY2lmaWMgbGVuZ3RoIHZhbHVlXFxuICA0MjpcXHQgKiBpbmRlcGVuZGVudCBvZiB0aGUgYnl0ZXMgd3JpdHRlbiB2aWEgY29weV90b19pdGVyKCkuXFxuICA0MzpcXHQgKi9cXG4gIDQ0OlxcdHR5cGVkZWYgc3RydWN0IHNvY2tvcHQge1xcbiAgNDU6XFx0XFx0c3RydWN0IGlvdl9pdGVyIGl0ZXJfaW47XFxuICA0NjpcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgaXRlcl9vdXQ7XFxuICA0NzpcXHRcXHRpbnQgb3B0bGVuO1xcbiAgNDg6XFx0fSBzb2Nrb3B0X3Q7XFxuICA0OTpcXHRcXG4gIDUwOlxcdC8qXFxuICA1MTpcXHQgKiBJbml0aWFsaXplIGEgdXNlci1iYWNrZWQgc29ja29wdF90IGZyb20gdGhlIChvcHR2YWwsIG9wdGxlbikgX191c2VyIHBhaXIgb2ZcXG4gIDUyOlxcdCAqIGEgZ2V0c29ja29wdCgpIGNhbGxiYWNrLiBVc2VkIGJ5IHRyYW5zaXRpb25hbCBfX3VzZXIgZ2V0c29ja29wdCB3cmFwcGVyc1xcbiAgNTM6XFx0ICogd2hpbGUgdGhlIHByb3RvLWxheWVyIGNhbGxiYWNrcyBhcmUgY29udmVydGVkIHRvIHRha2UgYSBzb2Nrb3B0X3Q7IHRoZVxcbiAgNTQ6XFx0ICogY2FsbGVyIHdyaXRlcyBvcHQtXFx1MDAzZW9wdGxlbiBiYWNrIHRvIHRoZSB1c2VyIG9wdGxlbiBhZnRlciB0aGUgY2FsbGJhY2suXFxuICA1NTpcXHQgKi9cXG4gIDU2OlxcdHN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfaW5pdF91c2VyKHNvY2tvcHRfdCAqb3B0LCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbiAgNTc6XFx0XFx0XFx0XFx0XFx0ICAgIGludCBfX3VzZXIgKm9wdGxlbilcXG4gIDU4OlxcdHtcXG4gIDU5OlxcdFxcdGludCBsZW47XFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXFxuICA2MjpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gIDYzOlxcdFxcdGlmIChsZW4gXFx1MDAzYyAwKVxcbiAgNjQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdGlvdl9pdGVyX3VidWYoXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQsIElURVJfREVTVCwgb3B0dmFsLCBsZW4pO1xcbiAgNjc6XFx0XFx0aW92X2l0ZXJfdWJ1ZihcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX2luLCBJVEVSX1NPVVJDRSwgb3B0dmFsLCBsZW4pO1xcbiAgNjg6XFx0XFx0b3B0LVxcdTAwM2VvcHRsZW4gPSBsZW47XFxuICA2OTpcXHRcXG4gIDcwOlxcdFxcdHJldHVybiAwO1xcbiAgNzE6XFx0fVxcbiAgNzI6XFx0XFxuICA3MzpcXHQvKlxcbiAgNzQ6XFx0ICogR3JvdyBvcHR2YWwgdG8gQHNpemUsIGZvciB0aGUgb3B0aW9ucyB3aG9zZSByZXBseSBpcyBzaXplZCBieSBhIGNvdW50IHRoZVxcbiAgNzU6XFx0ICogY2FsbGVyIGxlZnQgaW4gb3B0dmFsIHJhdGhlciB0aGFuIGJ5IG9wdGxlbi4gVGhvc2Ugd3JpdGUgcGFzdCBvcHRsZW4gdG9kYXlcXG4gIDc2OlxcdCAqIGFuZCB1c2Vyc3BhY2UgcmVsaWVzIG9uIGl0LlxcbiAgNzc6XFx0ICpcXG4gIDc4OlxcdCAqIENhbGwgaXQgYmVmb3JlIHdyaXRpbmcgdGhyb3VnaCBvcHQtXFx1MDAzZWl0ZXJfb3V0OiBpdCByZS1hbmNob3JzIHRoZSBpdGVyYXRvciBhdFxcbiAgNzk6XFx0ICogdGhlIGhlYWQgb2Ygb3B0dmFsLiBPbmx5IGEgdXNlciBidWZmZXIgY2FuIGJlIGxvbmdlciB0aGFuIHRoZSBvcHRsZW4gdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA5OjA3LjU4MjgwMjEzN1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTY3MzE2OTE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsJ3MgU29ja2V0IE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgYSByZWZyZXNoZXIgb24gdGhlIG92ZXJhbGwgYGdldHNvY2tvcHRgIGZsb3csIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gVGltZSB0byBnbyByaWdodCB0byB0aGUgc291cmNlIGFuZCBleGFtaW5lIGBkb19zb2NrX2dldHNvY2tvcHRgIHdpdGhpbiBgbmV0L3NvY2tldC5jYC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgcmV0cmlldmFsIG9mIHNvY2tldCBvcHRpb25zLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG51YW5jZXMgb2YgZGlmZmVyZW50IHNvY2tldCBmYW1pbGllcyBhbmQgb3B0aW9uIGxldmVsc+KAlGBTT0xfU09DS0VUYCwgYElQUFJPVE9fVENQYCwgZXRjLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgb3ZlcmFsbCBsb2dpYyBmb3IgcmV0cmlldmluZyBhbmQgcmV0dXJuaW5nIHRoZSByZXF1ZXN0ZWQgc29ja2V0IG9wdGlvbiBkYXRhLiBUaGUgZ29hbCBpcyB0byBzb2xpZGlmeSBteSBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgY3JpdGljYWwgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIEknbSBleHBlY3RpbmcgdG8gc2VlIGEgc3dpdGNoIHN0YXRlbWVudCBoYW5kbGluZyB2YXJpb3VzIG9wdGlvbnMgYW5kIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBjb3B5aW5nIGFuZCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjYxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowOToxOS4yNTU5NzUyNzlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExOTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc29ja2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ2NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQ2NTpcXHRcXG4yNDY2OlxcdGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcXG4yNDY3OlxcdFxcdFxcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcXG4yNDY4OlxcdHtcXG4yNDY5OlxcdFxcdGludCBtYXhfb3B0bGVuIF9fbWF5YmVfdW51c2VkID0gMDtcXG4yNDcwOlxcdFxcdGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9wcztcXG4yNDcxOlxcdFxcdHN0cnVjdCBrdmVjIGt2ZWM7XFxuMjQ3MjpcXHRcXHRzb2Nrb3B0X3Qgb3B0O1xcbjI0NzM6XFx0XFx0aW50IGVycjtcXG4yNDc0OlxcdFxcbjI0NzU6XFx0XFx0ZXJyID0gc2VjdXJpdHlfc29ja2V0X2dldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUpO1xcbjI0NzY6XFx0XFx0aWYgKGVycilcXG4yNDc3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjQ3ODpcXHRcXG4yNDc5OlxcdFxcdGlmICghY29tcGF0KVxcbjI0ODA6XFx0XFx0XFx0Y29weV9mcm9tX3NvY2twdHIoXFx1MDAyNm1heF9vcHRsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpO1xcbjI0ODE6XFx0XFxuMjQ4MjpcXHRcXHRvcHMgPSBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKTtcXG4yNDgzOlxcdFxcdGlmIChsZXZlbCA9PSBTT0xfU09DS0VUKSB7XFxuMjQ4NDpcXHRcXHRcXHRlcnIgPSBza19nZXRzb2Nrb3B0KHNvY2stXFx1MDAzZXNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbjI0ODU6XFx0XFx0fSBlbHNlIGlmIChvcHMtXFx1MDAzZWdldHNvY2tvcHRfaXRlcikge1xcbjI0ODY6XFx0XFx0XFx0ZXJyID0gc29ja3B0cl90b19zb2Nrb3B0KFxcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcXHUwMDI2a3ZlYyk7XFxuMjQ4NzpcXHRcXHRcXHRpZiAoZXJyKVxcbjI0ODg6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNDg5OlxcdFxcbjI0OTA6XFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VnZXRzb2Nrb3B0X2l0ZXIoc29jaywgbGV2ZWwsIG9wdG5hbWUsIFxcdTAwMjZvcHQpO1xcbjI0OTE6XFx0XFxuMjQ5MjpcXHRcXHRcXHQvKiBBbHdheXMgd3JpdGUgYmFjayBvcHRsZW4sIGV2ZW4gb24gZmFpbHVyZS4gU29tZSBwcm90b2NvbHNcXG4yNDkzOlxcdFxcdFxcdCAqIChlLmcuIENBTiByYXcpIHJldHVybiAtRVJBTkdFIGFuZCBzZXQgb3B0bGVuIHRvIHRoZVxcbjI0OTQ6XFx0XFx0XFx0ICogcmVxdWlyZWQgYnVmZmVyIHNpemUgc28gdXNlcnNwYWNlIGNhbiBkaXNjb3ZlciBpdC5cXG4yNDk1OlxcdFxcdFxcdCAqL1xcbjI0OTY6XFx0XFx0XFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFxcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXFxuMjQ5NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yNDk4OlxcdFxcdH0gZWxzZSBpZiAob3BzLVxcdTAwM2VnZXRzb2Nrb3B0KSB7XFxuMjQ5OTpcXHRcXHRcXHRpZiAoV0FSTl9PTkNFKG9wdHZhbC5pc19rZXJuZWwgfHwgb3B0bGVuLmlzX2tlcm5lbCxcXG4yNTAwOlxcdFxcdFxcdFxcdCAgICAgIFxcXCJJbnZhbGlkIGFyZ3VtZW50IHR5cGVcXFwiKSlcXG4yNTAxOlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4yNTAyOlxcdFxcbjI1MDM6XFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VnZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwudXNlcixcXG4yNTA0OlxcdFxcdFxcdFxcdFxcdCAgICAgIG9wdGxlbi51c2VyKTtcXG4yNTA1OlxcdFxcdH0gZWxzZSB7XFxuMjUwNjpcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4yNTA3OlxcdFxcdH1cXG4yNTA4OlxcdFxcbjI1MDk6XFx0XFx0aWYgKCFjb21wYXQpXFxuMjUxMDpcXHRcXHRcXHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFQoc29jay1cXHUwMDNlc2ssIGxldmVsLCBvcHRuYW1lLFxcbjI1MTE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBvcHR2YWwsIG9wdGxlbiwgbWF4X29wdGxlbixcXG4yNTEyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXJyKTtcXG4yNTEzOlxcdFxcbjI1MTQ6XFx0XFx0cmV0dXJuIGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDk6MTkuMjU4MTAxMDE5WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0NDAzNTcwMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVBfTVNGSUxURVIgR2V0c29ja29wdCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCBjb2RlIHNuaXBwZXQsIHNwZWNpZmljYWxseSB0aGUgYGRvX2lwX2dldHNvY2tvcHRgIGZ1bmN0aW9uIGFuZCB0aGUgYElQX01TRklMVEVSYCBjYXNlLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaGFuZGxlZCwgYW5kIEkgd2FudCB0byBiZSAqY2VydGFpbiogdGhlcmUgYXJlIG5vIG1lbW9yeSBzYWZldHkgaXNzdWVzIG9yIG90aGVyIHZ1bG5lcmFiaWxpdGllcy5cblxuUmlnaHQsIHRoZSBjb3JlIG9mIHRoZSBgSVBfTVNGSUxURVJgIGhhbmRsaW5nIHNlZW1zIHRvIGJlIGhlcmUuIEkgc2VlIGEgYHN0cnVjdCBpcF9tc2ZpbHRlciBtc2Y7YCBiZWluZyBkZWNsYXJlZCwgYWxvbmcgd2l0aCBgc3RydWN0IGt2ZWMga3ZlYztgIGFuZCBgc29ja29wdF90IG9wdDtgLiBTdGFuZGFyZCBzdHVmZiwgc28gZmFyLiBUaGUgZmlyc3QgY2hlY2ssIGBpZiAobGVuIFx1MDAzYyBJUF9NU0ZJTFRFUl9TSVpFKDApKWAsIGlzIGludGVyZXN0aW5nLiBJdCdzIGEgc2l6ZSBjaGVjayByZWxhdGVkIHRvIHRoZSBwcm92aWRlZCBidWZmZXIuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBvcmlnaW4gb2YgYGxlbmAuIFdoZXJlIGRvZXMgdGhhdCB2YWx1ZSBjb21lIGZyb20/IEl0J3MgY3J1Y2lhbCB0byB0cmFjZSB0aGF0IGJhY2sgdG8gaXRzIHNvdXJjZSB0byBlbnN1cmUgaXRzIHZhbHVlIGlzIHZhbGlkIGFuZCB0cnVzdGVkLiBMZXQncyBzZWUgaG93IGBsZW5gIGlzIGhhbmRsZWQgaW4gdGhpcyBmdW5jdGlvbi4gVGhpcyBpcyBjcml0aWNhbCBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzE4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDk6MzMuNjYxNjc1MDE4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MDU6XFx0fVxcbjE1MDY6XFx0XFxuMTUwNzpcXHRpbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuMTUwODpcXHRcXHRcXHQgICAgIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXFxuMTUwOTpcXHR7XFxuMTUxMDpcXHRcXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XFxuMTUxMTpcXHRcXHRib29sIG5lZWRzX3J0bmwgPSBnZXRzb2Nrb3B0X25lZWRzX3J0bmwob3B0bmFtZSk7XFxuMTUxMjpcXHRcXHRpbnQgdmFsLCBlcnIgPSAwO1xcbjE1MTM6XFx0XFx0aW50IGxlbjtcXG4xNTE0OlxcdFxcbjE1MTU6XFx0XFx0aWYgKGxldmVsICE9IFNPTF9JUClcXG4xNTE2OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xNTE3OlxcdFxcbjE1MTg6XFx0XFx0aWYgKGlwX21yb3V0ZV9vcHQob3B0bmFtZSkpXFxuMTUxOTpcXHRcXHRcXHRyZXR1cm4gaXBfbXJvdXRlX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4xNTIwOlxcdFxcbjE1MjE6XFx0XFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKVxcbjE1MjI6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTUyMzpcXHRcXHRpZiAobGVuIFxcdTAwM2MgMClcXG4xNTI0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE1MjU6XFx0XFxuMTUyNjpcXHRcXHQvKiBIYW5kbGUgb3B0aW9ucyB0aGF0IGNhbiBiZSByZWFkIHdpdGhvdXQgbG9ja2luZyB0aGUgc29ja2V0LiAqL1xcbjE1Mjc6XFx0XFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuMTUyODpcXHRcXHRjYXNlIElQX1BLVElORk86XFxuMTUyOTpcXHRcXHRcXHR2YWwgPSBpbmV0X3Rlc3RfYml0KFBLVElORk8sIHNrKTtcXG4xNTMwOlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNTMxOlxcdFxcdGNhc2UgSVBfUkVDVlRUTDpcXG4xNTMyOlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoVFRMLCBzayk7XFxuMTUzMzpcXHRcXHRcXHRnb3RvIGNvcHl2YWw7XFxuMTUzNDpcXHRcXHRjYXNlIElQX1JFQ1ZUT1M6XFxuMTUzNTpcXHRcXHRcXHR2YWwgPSBpbmV0X3Rlc3RfYml0KFRPUywgc2spO1xcbjE1MzY6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1Mzc6XFx0XFx0Y2FzZSBJUF9SRUNWT1BUUzpcXG4xNTM4OlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoUkVDVk9QVFMsIHNrKTtcXG4xNTM5OlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNTQwOlxcdFxcdGNhc2UgSVBfUkVUT1BUUzpcXG4xNTQxOlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoUkVUT1BUUywgc2spO1xcbjE1NDI6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1NDM6XFx0XFx0Y2FzZSBJUF9QQVNTU0VDOlxcbjE1NDQ6XFx0XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChQQVNTU0VDLCBzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA5OjMzLjY2MTgyNTE1OFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODQ4MjcwNzQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBJUF9NU0ZJTFRFUiBHZXRzb2Nrb3B0IEltcGxlbWVudGF0aW9uIGFuZCBLTVNBTiBOZWVkcyBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBiZWVuIHRyYWNpbmcgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBgZ2V0c29ja29wdGAgY2FsbCBmb3IgYElQX01TRklMVEVSYCBhbmQgZXZhbHVhdGluZyB3aGV0aGVyIHRoZSByZWNlbnQgY2hhbmdlcyByZXF1aXJlIEtNU0FOLiBUaGUgY29yZSBvZiBpdCBib2lscyBkb3duIHRvIGhvdyB3ZSBoYW5kbGUgdGhlIHZhcmlhYmxlLWxlbmd0aCBzb3VyY2UgbGlzdC4gIFRoZSBpbml0aWFsIGBjb3B5X2Zyb21fc29ja3B0cmAgb3BlcmF0aW9uIGdyYWJzIHRoZSBmaXhlZCBwYXJ0IG9mIGBzdHJ1Y3QgaXBfbXNmaWx0ZXJgICgxNiBieXRlcykgZnJvbSB1c2VyIHNwYWNlLCBwb3B1bGF0aW5nIHRoZSBgbXNmYCBzdHJ1Y3QuIFRoYXQgY292ZXJzIGBpbXNmX211bHRpYWRkcmAsIGBpbXNmX2ludGVyZmFjZWAsIGBpbXNmX2Ztb2RlYCBhbmQgYGltc2ZfbnVtc3JjYC4gIE5vIHBhZGRpbmcgd29ycmllcyBoZXJlLCBhbGwgMzItYml0IGFsaWduZWQuXG5cblRoZW4gdGhlIGBzb2Nrb3B0X3RvX3NvY2twdHJgIHN0dWZmIHNldHMgdXAgYGl0ZXJfaW5gLCBgaXRlcl9vdXRgIGFuZCB0aGUgYG9wdGxlbmAsIHdoaWNoIGNhbiBiZSBjcml0aWNhbC4gVGhlIGBpcF9tY19tc2ZnZXRgIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgaGFwcGVucy4gSXQgdmFsaWRhdGVzIHRoZSBtdWx0aWNhc3QgYWRkcmVzcywgZmluZHMgdGhlIHJlbGV2YW50IG11bHRpY2FzdCBzb2NrZXQgbGlzdCBlbnRyeSAoYHBtY2ApLCBhbmQgcG9wdWxhdGVzIGBtc2YtXHUwMDNlaW1zZl9mbW9kZWAgYW5kIGBtc2YtXHUwMDNlaW1zZl9udW1zcmNgLiAgQ3J1Y2lhbGx5LCBpdCBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2Ygc291cmNlIGFkZHJlc3NlcyAoYGNvcHljb3VudGApIHRvIGNvcHkgYmFjayB0byB1c2VyIHNwYWNlLiBUaGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gYGNvcHljb3VudGAgd2l0aCB0aGUgYElQX01TRklMVEVSX1NJWkUoKWAgbWFjcm8uIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHNvY2tvcHRfZXhwYW5kX291dGAsIHdoaWNoIGV4cGFuZHMgdGhlIG91dHB1dCBpdGVyYXRvcidzIGJ1ZmZlci4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgdXNlciBtaWdodCBwcm92aWRlIGEgc21hbGxlciBgb3B0bGVuYCB0aGFuIHRoZSBmaW5hbCBzaXplIHRoYXQgbmVlZHMgdG8gYmUgY29waWVkIGJhY2suIFRoaXMgZXhwYW5zaW9uIGVuc3VyZXMgdGhhdCB0aGUgdXNlci1wcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoIGZvciB0aGUgcG90ZW50aWFsbHkgbGFyZ2VyIHNvdXJjZSBsaXN0LlxuXG5JJ3ZlIGNhcmVmdWxseSBleGFtaW5lZCB0aGUgZGF0YSBmbG93IHRvIGVuc3VyZSB3ZSBkb24ndCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgbXNmYCAodGhlIGZpeGVkIHBhcnQpIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBjb3BpZWQgb3V0LiBgcHNsLVx1MDAzZXNsX2FkZHJgLCB0aGUgZmxleGlibGUgYXJyYXkgaG9sZGluZyBzb3VyY2UgYWRkcmVzc2VzLCBpcyBzaXplZCBhbmQgcG9wdWxhdGVkIGNvcnJlY3RseSBiYXNlZCBvbiBgY291bnRgLCB3aGljaCBpcyBkZXJpdmVkIGZyb20gYHBtYy1cdTAwM2VzZmxpc3RgIGRhdGEgd2hpY2ggY29udGFpbnMgYHBzbC1cdTAwM2VzbF9jb3VudGAuIFRoZSBgY29weWNvdW50YCBkZXRlcm1pbmVzIHRoZSBhY3R1YWwgbnVtYmVyIG9mIHNvdXJjZSBhZGRyZXNzZXMgdG8gY29weSwgYW5kIGl0IGlzIGFsd2F5cyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHBzbC1cdTAwM2VzbF9jb3VudGAsIGFuZCBhbGwgYGxlbmAgYnl0ZXMgZnJvbSBgcHNsLVx1MDAzZXNsX2FkZHJgIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gYG9wdGxlbmAgaXMgaW5pdGlhbGl6ZWQgdG9vLiBJJ3ZlIGFsc28gY2hlY2tlZCB0aGUgaGFuZGxpbmcgb2YgYGt2ZWNgIGFuZCBlbnN1cmVkIGl0J3Mgc2FmZS5cblxuVGhlIG9yaWdpbmFsIGNvZGUgZGlyZWN0bHkgY2FsY3VsYXRlZCB0aGUgb2Zmc2V0IGFuZCB1c2VkIGBjb3B5X3RvX3NvY2twdHJfb2Zmc2V0YC4gVGhpcyBuZXcgaW1wbGVtZW50YXRpb24gbWFrZXMgdXNlIG9mIGEgYHNvY2tvcHRfZXhwYW5kX291dGAgdXRpbGl0eSB3aGljaCBlbnN1cmVzIG5vIHRydW5jYXRpb24gaGFwcGVucy4gIFRoZSBleHBhbnNpb24gb2YgdGhlIGl0ZXJhdG9yIGlzIHRoZSBrZXkgY2hhbmdlIHRvIGhhbmRsZSB0aGUgdmFyaWFibGUtbGVuZ3RoIHBhcnQgb2YgdGhlIHN0cnVjdC4gRXZlcnl0aGluZyBoYXMgYmVlbiBpbml0aWFsaXplZCBvciBwb3B1bGF0ZWQgYmVmb3JlIGdldHRpbmcgY29waWVkIHRvIHRoZSBpdGVyYXRvciBhbmQgYmFjayB0byB1c2Vyc3BhY2UuXG5cbkJhc2VkIG9uIHRoZSBLTVNBTiBndWlkZWxpbmVzLCB0aGlzIHJlZmFjdG9yaW5nIGRvZXNuJ3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gIEFsbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgdGhlcmUncyBubyByaXNrIG9mIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgcHJpbWFyaWx5IGFib3V0IHN0cmVhbWxpbmluZyBhbmQgbW9kZXJuaXppbmcgdGhlIGdldHNvY2tvcHQgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTY4LCJPdXRwdXRUb2tlbnMiOjM0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5ODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowOTo1Mi4xNDQ1MzUzNDZaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgSVBfTVNGSUxURVIgZ2V0c29ja29wdCBoYW5kbGluZyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgLyBpb3ZfaXRlciBpbmZyYXN0cnVjdHVyZSB2aWEgYHNvY2twdHJfdG9fc29ja29wdCgpYCwgYHNvY2tvcHRfZXhwYW5kX291dCgpYCwgYW5kIGBjb3B5X3RvX2l0ZXIoKWAuIFxcblxcbi0gSW4gYGRvX2lwX2dldHNvY2tvcHQoKWAsIGBtc2ZgIGlzIHBvcHVsYXRlZCBmcm9tIHVzZXJzcGFjZSB2aWEgYGNvcHlfZnJvbV9zb2NrcHRyKClgIGZvciBgSVBfTVNGSUxURVJfU0laRSgwKWAgKDE2IGJ5dGVzKSwgY292ZXJpbmcgYWxsIHNjYWxhciBmaWVsZHMgKGBpbXNmX211bHRpYWRkcmAsIGBpbXNmX2ludGVyZmFjZWAsIGBpbXNmX2Ztb2RlYCwgYGltc2ZfbnVtc3JjYCksIHdpdGggYGltc2ZfZm1vZGVgIGFuZCBgaW1zZl9udW1zcmNgIHN1YnNlcXVlbnRseSB1cGRhdGVkIGJlZm9yZSBgY29weV90b19pdGVyKClgIGNvcGllcyBleGFjdGx5IDE2IGJ5dGVzLiBUaGVyZSBpcyBubyBzdHJ1Y3QgcGFkZGluZyBpbiBgc3RydWN0IGlwX21zZmlsdGVyYC5cXG4tIFRoZSBtdWx0aWNhc3Qgc291cmNlIGZpbHRlciBhZGRyZXNzIGFycmF5IGBwc2wtXFx1MDAzZXNsX2FkZHJgIGlzIGNvcGllZCB1cCB0byBgY29weWNvdW50IFxcdTAwM2M9IHBzbC1cXHUwMDNlc2xfY291bnRgIGVsZW1lbnRzLCB3aGljaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEuXFxuLSBgc29ja29wdF9leHBhbmRfb3V0KClgIGFuZCBgc29ja3B0cl90b19zb2Nrb3B0KClgIG9ubHkgYWRqdXN0IGl0ZXJhdG9yIGRlc2NyaXB0b3JzIGZvciB1c2VyIG1lbW9yeSBib3VuZGFyaWVzIGFuZCBkbyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5Llxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBQb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyBzdWNoIGFzIG91dC1vZi1ib3VuZHMgdXNlciBidWZmZXIgYWNjZXNzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOKSBhbmQgY29weS10by11c2VyIGZhdWx0IGhhbmRsaW5nLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIElQX01TRklMVEVSIGdldHNvY2tvcHQgaGFuZGxpbmcgdG8gdXNlIHRoZSBuZXcgc29ja29wdF90IC8gaW92X2l0ZXIgaW5mcmFzdHJ1Y3R1cmUgdmlhIGBzb2NrcHRyX3RvX3NvY2tvcHQoKWAsIGBzb2Nrb3B0X2V4cGFuZF9vdXQoKWAsIGFuZCBgY29weV90b19pdGVyKClgLiBcXG5cXG4tIEluIGBkb19pcF9nZXRzb2Nrb3B0KClgLCBgbXNmYCBpcyBwb3B1bGF0ZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBjb3B5X2Zyb21fc29ja3B0cigpYCBmb3IgYElQX01TRklMVEVSX1NJWkUoMClgICgxNiBieXRlcyksIGNvdmVyaW5nIGFsbCBzY2FsYXIgZmllbGRzIChgaW1zZl9tdWx0aWFkZHJgLCBgaW1zZl9pbnRlcmZhY2VgLCBgaW1zZl9mbW9kZWAsIGBpbXNmX251bXNyY2ApLCB3aXRoIGBpbXNmX2Ztb2RlYCBhbmQgYGltc2ZfbnVtc3JjYCBzdWJzZXF1ZW50bHkgdXBkYXRlZCBiZWZvcmUgYGNvcHlfdG9faXRlcigpYCBjb3BpZXMgZXhhY3RseSAxNiBieXRlcy4gVGhlcmUgaXMgbm8gc3RydWN0IHBhZGRpbmcgaW4gYHN0cnVjdCBpcF9tc2ZpbHRlcmAuXFxuLSBUaGUgbXVsdGljYXN0IHNvdXJjZSBmaWx0ZXIgYWRkcmVzcyBhcnJheSBgcHNsLVxcdTAwM2VzbF9hZGRyYCBpcyBjb3BpZWQgdXAgdG8gYGNvcHljb3VudCBcXHUwMDNjPSBwc2wtXFx1MDAzZXNsX2NvdW50YCBlbGVtZW50cywgd2hpY2ggYXJlIGZ1bGx5IGluaXRpYWxpemVkIGtlcm5lbCBkYXRhLlxcbi0gYHNvY2tvcHRfZXhwYW5kX291dCgpYCBhbmQgYHNvY2twdHJfdG9fc29ja29wdCgpYCBvbmx5IGFkanVzdCBpdGVyYXRvciBkZXNjcmlwdG9ycyBmb3IgdXNlciBtZW1vcnkgYm91bmRhcmllcyBhbmQgZG8gbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gUG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgc3VjaCBhcyBvdXQtb2YtYm91bmRzIHVzZXIgYnVmZmVyIGFjY2VzcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTikgYW5kIGNvcHktdG8tdXNlciBmYXVsdCBoYW5kbGluZy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9svpb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 10:05:14 +0000 UTC FinishedAt: 2026-09-10 10:09:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "548b86839f7fb819a4d6c83b71c73ec378d24275", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IP_MULTICAST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "548b86839f7fb819a4d6c83b71c73ec378d24275", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IP_MULTICAST" ], "series_id": "293ef455-185d-4e79-be98-cdce095add91" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_mc_msfget", "do_ip_getsockopt", "sockptr_to_sockopt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBfTVVMVElDQVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbWNfbXNmZ2V0JiMzNDssCiAgICAmIzM0O2RvX2lwX2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7c29ja3B0cl90b19zb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBJUF9NU0ZJTFRFUiBnZXRzb2Nrb3B0IGhhbmRsaW5nIHRvIHVzZSB0aGUgbmV3IHNvY2tvcHRfdCAvIGlvdl9pdGVyIGluZnJhc3RydWN0dXJlIHZpYSBgc29ja3B0cl90b19zb2Nrb3B0KClgLCBgc29ja29wdF9leHBhbmRfb3V0KClgLCBhbmQgYGNvcHlfdG9faXRlcigpYC4gXG5cbi0gSW4gYGRvX2lwX2dldHNvY2tvcHQoKWAsIGBtc2ZgIGlzIHBvcHVsYXRlZCBmcm9tIHVzZXJzcGFjZSB2aWEgYGNvcHlfZnJvbV9zb2NrcHRyKClgIGZvciBgSVBfTVNGSUxURVJfU0laRSgwKWAgKDE2IGJ5dGVzKSwgY292ZXJpbmcgYWxsIHNjYWxhciBmaWVsZHMgKGBpbXNmX211bHRpYWRkcmAsIGBpbXNmX2ludGVyZmFjZWAsIGBpbXNmX2Ztb2RlYCwgYGltc2ZfbnVtc3JjYCksIHdpdGggYGltc2ZfZm1vZGVgIGFuZCBgaW1zZl9udW1zcmNgIHN1YnNlcXVlbnRseSB1cGRhdGVkIGJlZm9yZSBgY29weV90b19pdGVyKClgIGNvcGllcyBleGFjdGx5IDE2IGJ5dGVzLiBUaGVyZSBpcyBubyBzdHJ1Y3QgcGFkZGluZyBpbiBgc3RydWN0IGlwX21zZmlsdGVyYC5cbi0gVGhlIG11bHRpY2FzdCBzb3VyY2UgZmlsdGVyIGFkZHJlc3MgYXJyYXkgYHBzbC1cdTAwM2VzbF9hZGRyYCBpcyBjb3BpZWQgdXAgdG8gYGNvcHljb3VudCBcdTAwM2M9IHBzbC1cdTAwM2VzbF9jb3VudGAgZWxlbWVudHMsIHdoaWNoIGFyZSBmdWxseSBpbml0aWFsaXplZCBrZXJuZWwgZGF0YS5cbi0gYHNvY2tvcHRfZXhwYW5kX291dCgpYCBhbmQgYHNvY2twdHJfdG9fc29ja29wdCgpYCBvbmx5IGFkanVzdCBpdGVyYXRvciBkZXNjcmlwdG9ycyBmb3IgdXNlciBtZW1vcnkgYm91bmRhcmllcyBhbmQgZG8gbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS5cblxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFBvdGVudGlhbCBtZW1vcnkgaXNzdWVzIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyB1c2VyIGJ1ZmZlciBhY2Nlc3MgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4pIGFuZCBjb3B5LXRvLXVzZXIgZmF1bHQgaGFuZGxpbmcuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIElQX01TRklMVEVSIHNvY2tldCBvcHRpb24gaW4gSVB2NCBnZXRzb2Nrb3B0IGJ5IGNvbnZlcnRpbmcgaXBfbWNfbXNmZ2V0IHRvIHVzZSB0aGUgc29ja29wdF90IGFic3RyYWN0aW9uLCBpbnRyb2R1Y2luZyB0aGUgc29ja29wdF9leHBhbmRfb3V0IGhlbHBlciB0byBkeW5hbWljYWxseSByZXNpemUgdGhlIG91dHB1dCBidWZmZXIgaXRlcmF0b3IsIGFuZCBleHBvcnRpbmcgc29ja3B0cl90b19zb2Nrb3B0LiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBjYW4gYmUgZGlyZWN0bHkgZXhlcmNpc2VkIGZyb20gdXNlcnNwYWNlIHZpYSBnZXRzb2Nrb3B0KCkgY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MjUyNWZjZDc2OWFkY2JmNDk2MjU3ZWQ2NDhlM2JjYjM2MjMxNTAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTA6MDc6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZ21wLmggYi9pbmNsdWRlL2xpbnV4L2lnbXAuaFxuaW5kZXggYTBjZjAzOTg1MTlmZC4uZTA3NTYxMTM0NGVmMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaWdtcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lnbXAuaFxuQEAgLTE0LDYgJiM0MzsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvY2twdHIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaWdtcC5oXHUwMDNlXG5AQCAtMjczLDcgJiM0MzsyNzQsNyBAQCBleHRlcm4gaW50IGlwX21jX3NvdXJjZShpbnQgYWRkLCBpbnQgb21vZGUsIHN0cnVjdCBzb2NrICpzayxcbiBcdFx0c3RydWN0IGlwX21yZXFfc291cmNlICptcmVxcywgaW50IGlmaW5kZXgpO1xuIGV4dGVybiBpbnQgaXBfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixpbnQgaWZpbmRleCk7XG4gZXh0ZXJuIGludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixcbi1cdFx0XHRzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKTtcbiYjNDM7XHRcdFx0c29ja29wdF90ICpvcHQpO1xuIGV4dGVybiBpbnQgaXBfbWNfZ3NmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGdyb3VwX2ZpbHRlciAqZ3NmLFxuIFx0XHRcdHNvY2twdHJfdCBvcHR2YWwsIHNpemVfdCBvZmZzZXQpO1xuIGV4dGVybiBpbnQgaXBfbWNfc2ZfYWxsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBfX2JlMzIgbG9jYWwsIF9fYmUzMiBybXQsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmhcbmluZGV4IDQ3MDEwMGFlNzEwNzcuLmRlMGVkMzYyYjM3NzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldC5oXG5AQCAtNzAsNiAmIzQzOzcwLDMxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfaW5pdF91c2VyKHNvY2tvcHRfdCAqb3B0LCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBHcm93IG9wdHZhbCB0byBAc2l6ZSwgZm9yIHRoZSBvcHRpb25zIHdob3NlIHJlcGx5IGlzIHNpemVkIGJ5IGEgY291bnQgdGhlXG4mIzQzOyAqIGNhbGxlciBsZWZ0IGluIG9wdHZhbCByYXRoZXIgdGhhbiBieSBvcHRsZW4uIFRob3NlIHdyaXRlIHBhc3Qgb3B0bGVuIHRvZGF5XG4mIzQzOyAqIGFuZCB1c2Vyc3BhY2UgcmVsaWVzIG9uIGl0LlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsIGl0IGJlZm9yZSB3cml0aW5nIHRocm91Z2ggb3B0LVx1MDAzZWl0ZXJfb3V0OiBpdCByZS1hbmNob3JzIHRoZSBpdGVyYXRvciBhdFxuJiM0MzsgKiB0aGUgaGVhZCBvZiBvcHR2YWwuIE9ubHkgYSB1c2VyIGJ1ZmZlciBjYW4gYmUgbG9uZ2VyIHRoYW4gdGhlIG9wdGxlbiB0aGVcbiYjNDM7ICogY2FsbGVyIGRlY2xhcmVkLCBzbyBhIGtlcm5lbC1iYWNrZWQgb3B0dmFsIGlzIHJlZnVzZWQgd2l0aCAtRUlOVkFMLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgc29ja29wdF9leHBhbmRfb3V0KHNvY2tvcHRfdCAqb3B0LCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdGlmIChzaXplIFx1MDAzYz0gaW92X2l0ZXJfY291bnQoXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFpdGVyX2lzX3VidWYoXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aW92X2l0ZXJfdWJ1ZihcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQsIElURVJfREVTVCwgb3B0LVx1MDAzZWl0ZXJfb3V0LnVidWYsIHNpemUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbixcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3Qga3ZlYyAqa3ZlYyk7XG4mIzQzO1xuIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdDtcbiBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvO1xuIHN0cnVjdCBpbm9kZTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmNcbmluZGV4IGQ1NjM1NWFjYTc5NzcuLjE0NGZjYTE1OGFkY2IgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pZ21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lnbXAuY1xuQEAgLTI3MDksOCAmIzQzOzI3MDksOCBAQCBpbnQgaXBfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgaW50IGlmaW5kZXgpXG4gXHRcdGVyciA9IGlwX21jX2xlYXZlX2dyb3VwKHNrLCBcdTAwMjZpbXIpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4taW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLFxuLVx0XHQgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcbiYjNDM7XG4mIzQzO2ludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgc29ja29wdF90ICpvcHQpXG4ge1xuIFx0aW50IGVyciwgbGVuLCBjb3VudCwgY29weWNvdW50LCBtc2Zfc2l6ZTtcbiBcdHN0cnVjdCBpcF9tcmVxblx0aW1yO1xuQEAgLTI3NTUsMTQgJiM0MzsyNzU1LDE5IEBAIGludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixcbiBcdGxlbiA9IGZsZXhfYXJyYXlfc2l6ZShwc2wsIHNsX2FkZHIsIGNvcHljb3VudCk7XG4gXHRtc2YtXHUwMDNlaW1zZl9udW1zcmMgPSBjb3VudDtcbiBcdG1zZl9zaXplID0gSVBfTVNGSUxURVJfU0laRShjb3B5Y291bnQpO1xuLVx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFx1MDAyNm1zZl9zaXplLCBzaXplb2YoaW50KSkgfHxcbi1cdCAgICBjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBtc2YsIElQX01TRklMVEVSX1NJWkUoMCkpKSB7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBzb3VyY2UgbGlzdCBpcyBzaXplZCBieSB0aGUgaW1zZl9udW1zcmMgdGhlIGNhbGxlciBsZWZ0IGluXG4mIzQzO1x0ICogb3B0dmFsLCBub3QgYnkgb3B0bGVuLCB3aGljaCBvbmx5IGhhcyB0byBjb3ZlciB0aGUgZml4ZWQgcGFydC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBzb2Nrb3B0X2V4cGFuZF9vdXQob3B0LCBtc2Zfc2l6ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdG9wdC1cdTAwM2VvcHRsZW4gPSBtc2Zfc2l6ZTtcbiYjNDM7XHRpZiAoY29weV90b19pdGVyKG1zZiwgSVBfTVNGSUxURVJfU0laRSgwKSwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPVxuJiM0MztcdCAgICBJUF9NU0ZJTFRFUl9TSVpFKDApKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdH1cbi1cdGlmIChsZW4gXHUwMDI2XHUwMDI2XG4tXHQgICAgY29weV90b19zb2NrcHRyX29mZnNldChvcHR2YWwsXG4tXHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaXBfbXNmaWx0ZXIsIGltc2Zfc2xpc3RfZmxleCksXG4tXHRcdFx0XHQgICBwc2wtXHUwMDNlc2xfYWRkciwgbGVuKSlcbiYjNDM7XHRpZiAobGVuIFx1MDAyNlx1MDAyNiBjb3B5X3RvX2l0ZXIocHNsLVx1MDAzZXNsX2FkZHIsIGxlbiwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0cmV0dXJuIDA7XG4gZG9uZTpcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuaW5kZXggYTU1ZWYzMjdlYzkzMi4uYzU4ZTU2NWYyYTVhYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbkBAIC0xNzA2LDYgJiM0MzsxNzA2LDggQEAgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0Y2FzZSBJUF9NU0ZJTFRFUjpcbiBcdHtcbiBcdFx0c3RydWN0IGlwX21zZmlsdGVyIG1zZjtcbiYjNDM7XHRcdHN0cnVjdCBrdmVjIGt2ZWM7XG4mIzQzO1x0XHRzb2Nrb3B0X3Qgb3B0O1xuIFxuIFx0XHRpZiAobGVuIFx1MDAzYyBJUF9NU0ZJTFRFUl9TSVpFKDApKSB7XG4gXHRcdFx0ZXJyID0gLUVJTlZBTDtcbkBAIC0xNzE1LDcgJiM0MzsxNzE3LDEzIEBAIGludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4tXHRcdGVyciA9IGlwX21jX21zZmdldChzaywgXHUwMDI2bXNmLCBvcHR2YWwsIG9wdGxlbik7XG4mIzQzO1x0XHRlcnIgPSBzb2NrcHRyX3RvX3NvY2tvcHQoXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbiwgXHUwMDI2a3ZlYyk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBpcF9tY19tc2ZnZXQoc2ssIFx1MDAyNm1zZiwgXHUwMDI2b3B0KTtcbiYjNDM7XHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXG4mIzQzO1x0XHRcdGVyciA9IC1FRkFVTFQ7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFx0Y2FzZSBNQ0FTVF9NU0ZJTFRFUjpcbmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmNcbmluZGV4IGMwNWQ4NmU2M2FiZjcuLjI5YTBmN2Y4ZTJjYWIgMTAwNjQ0XG4tLS0gYS9uZXQvc29ja2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zb2NrZXQuY1xuQEAgLTI0MzcsOCAmIzQzOzI0MzcsOCBAQCBJTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKGJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsXG4gICogSXQgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgYm90aCBpb3YgcG9pbnRzIHRvIHRoZSBzYW1lIGRhdGEsIGJ1dCxcbiAgKiAuaXRlcl9pbiBpcyByZWFkLW9ubHkgYW5kIC5pdGVyX291dCBpcyB3cml0ZS1vbmx5IGJ5IHRoZSBwcm90b2NvbCBjYWxsYmFja3NcbiAgKi9cbi1zdGF0aWMgaW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCxcbi1cdFx0XHQgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBzdHJ1Y3Qga3ZlYyAqa3ZlYylcbiYjNDM7aW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCxcbiYjNDM7XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBzdHJ1Y3Qga3ZlYyAqa3ZlYylcbiB7XG4gXHRpbnQga29wdGxlbjtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQX01VTFRJQ0FTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX21jX21zZmdldCYjMzQ7LAogICAgJiMzNDtkb19pcF9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3NvY2twdHJfdG9fc29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIElQX01TRklMVEVSIHNvY2tldCBvcHRpb24gaW4gSVB2NCBnZXRzb2Nrb3B0IGJ5IGNvbnZlcnRpbmcgaXBfbWNfbXNmZ2V0IHRvIHVzZSB0aGUgc29ja29wdF90IGFic3RyYWN0aW9uLCBpbnRyb2R1Y2luZyB0aGUgc29ja29wdF9leHBhbmRfb3V0IGhlbHBlciB0byBkeW5hbWljYWxseSByZXNpemUgdGhlIG91dHB1dCBidWZmZXIgaXRlcmF0b3IsIGFuZCBleHBvcnRpbmcgc29ja3B0cl90b19zb2Nrb3B0LiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBjYW4gYmUgZGlyZWN0bHkgZXhlcmNpc2VkIGZyb20gdXNlcnNwYWNlIHZpYSBnZXRzb2Nrb3B0KCkgY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MjUyNWZjZDc2OWFkY2JmNDk2MjU3ZWQ2NDhlM2JjYjM2MjMxNTAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMTA6MDc6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lnbXAuaCBiL2luY2x1ZGUvbGludXgvaWdtcC5oCmluZGV4IGEwY2YwMzk4NTE5ZmQuLmUwNzU2MTEzNDRlZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWdtcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaWdtcC5oCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW4uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yZWZjb3VudC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NvY2twdHIuaCZndDsKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L2lnbXAuaCZndDsKQEAgLTI3Myw3ICYjNDM7Mjc0LDcgQEAgZXh0ZXJuIGludCBpcF9tY19zb3VyY2UoaW50IGFkZCwgaW50IG9tb2RlLCBzdHJ1Y3Qgc29jayAqc2ssCiAJCXN0cnVjdCBpcF9tcmVxX3NvdXJjZSAqbXJlcXMsIGludCBpZmluZGV4KTsKIGV4dGVybiBpbnQgaXBfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixpbnQgaWZpbmRleCk7CiBleHRlcm4gaW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLAotCQkJc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbik7CiYjNDM7CQkJc29ja29wdF90ICpvcHQpOwogZXh0ZXJuIGludCBpcF9tY19nc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZ3JvdXBfZmlsdGVyICpnc2YsCiAJCQlzb2NrcHRyX3Qgb3B0dmFsLCBzaXplX3Qgb2Zmc2V0KTsKIGV4dGVybiBpbnQgaXBfbWNfc2ZfYWxsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBfX2JlMzIgbG9jYWwsIF9fYmUzMiBybXQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldC5oIGIvaW5jbHVkZS9saW51eC9uZXQuaAppbmRleCA0NzAxMDBhZTcxMDc3Li5kZTBlZDM2MmIzNzc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0LmgKQEAgLTcwLDYgJiM0Mzs3MCwzMSBAQCBzdGF0aWMgaW5saW5lIGludCBzb2Nrb3B0X2luaXRfdXNlcihzb2Nrb3B0X3QgKm9wdCwgY2hhciBfX3VzZXIgKm9wdHZhbCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qCiYjNDM7ICogR3JvdyBvcHR2YWwgdG8gQHNpemUsIGZvciB0aGUgb3B0aW9ucyB3aG9zZSByZXBseSBpcyBzaXplZCBieSBhIGNvdW50IHRoZQomIzQzOyAqIGNhbGxlciBsZWZ0IGluIG9wdHZhbCByYXRoZXIgdGhhbiBieSBvcHRsZW4uIFRob3NlIHdyaXRlIHBhc3Qgb3B0bGVuIHRvZGF5CiYjNDM7ICogYW5kIHVzZXJzcGFjZSByZWxpZXMgb24gaXQuCiYjNDM7ICoKJiM0MzsgKiBDYWxsIGl0IGJlZm9yZSB3cml0aW5nIHRocm91Z2ggb3B0LSZndDtpdGVyX291dDogaXQgcmUtYW5jaG9ycyB0aGUgaXRlcmF0b3IgYXQKJiM0MzsgKiB0aGUgaGVhZCBvZiBvcHR2YWwuIE9ubHkgYSB1c2VyIGJ1ZmZlciBjYW4gYmUgbG9uZ2VyIHRoYW4gdGhlIG9wdGxlbiB0aGUKJiM0MzsgKiBjYWxsZXIgZGVjbGFyZWQsIHNvIGEga2VybmVsLWJhY2tlZCBvcHR2YWwgaXMgcmVmdXNlZCB3aXRoIC1FSU5WQUwuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc29ja29wdF9leHBhbmRfb3V0KHNvY2tvcHRfdCAqb3B0LCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CWlmIChzaXplICZsdDs9IGlvdl9pdGVyX2NvdW50KCZhbXA7b3B0LSZndDtpdGVyX291dCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghaXRlcl9pc191YnVmKCZhbXA7b3B0LSZndDtpdGVyX291dCkpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlvdl9pdGVyX3VidWYoJmFtcDtvcHQtJmd0O2l0ZXJfb3V0LCBJVEVSX0RFU1QsIG9wdC0mZ3Q7aXRlcl9vdXQudWJ1Ziwgc2l6ZSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuLAomIzQzOwkJICAgICAgIHN0cnVjdCBrdmVjICprdmVjKTsKJiM0MzsKIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdDsKIHN0cnVjdCBwaXBlX2lub2RlX2luZm87CiBzdHJ1Y3QgaW5vZGU7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmMKaW5kZXggZDU2MzU1YWNhNzk3Ny4uMTQ0ZmNhMTU4YWRjYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWdtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lnbXAuYwpAQCAtMjcwOSw4ICYjNDM7MjcwOSw4IEBAIGludCBpcF9tY19tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBpbnQgaWZpbmRleCkKIAkJZXJyID0gaXBfbWNfbGVhdmVfZ3JvdXAoc2ssICZhbXA7aW1yKTsKIAlyZXR1cm4gZXJyOwogfQotaW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLAotCQkgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbikKJiM0MzsKJiM0MztpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIHNvY2tvcHRfdCAqb3B0KQogewogCWludCBlcnIsIGxlbiwgY291bnQsIGNvcHljb3VudCwgbXNmX3NpemU7CiAJc3RydWN0IGlwX21yZXFuCWltcjsKQEAgLTI3NTUsMTQgJiM0MzsyNzU1LDE5IEBAIGludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwKIAlsZW4gPSBmbGV4X2FycmF5X3NpemUocHNsLCBzbF9hZGRyLCBjb3B5Y291bnQpOwogCW1zZi0mZ3Q7aW1zZl9udW1zcmMgPSBjb3VudDsKIAltc2Zfc2l6ZSA9IElQX01TRklMVEVSX1NJWkUoY29weWNvdW50KTsKLQlpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgJmFtcDttc2Zfc2l6ZSwgc2l6ZW9mKGludCkpIHx8Ci0JICAgIGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIG1zZiwgSVBfTVNGSUxURVJfU0laRSgwKSkpIHsKJiM0MzsKJiM0MzsJLyogVGhlIHNvdXJjZSBsaXN0IGlzIHNpemVkIGJ5IHRoZSBpbXNmX251bXNyYyB0aGUgY2FsbGVyIGxlZnQgaW4KJiM0MzsJICogb3B0dmFsLCBub3QgYnkgb3B0bGVuLCB3aGljaCBvbmx5IGhhcyB0byBjb3ZlciB0aGUgZml4ZWQgcGFydC4KJiM0MzsJICovCiYjNDM7CWVyciA9IHNvY2tvcHRfZXhwYW5kX291dChvcHQsIG1zZl9zaXplKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CW9wdC0mZ3Q7b3B0bGVuID0gbXNmX3NpemU7CiYjNDM7CWlmIChjb3B5X3RvX2l0ZXIobXNmLCBJUF9NU0ZJTFRFUl9TSVpFKDApLCAmYW1wO29wdC0mZ3Q7aXRlcl9vdXQpICE9CiYjNDM7CSAgICBJUF9NU0ZJTFRFUl9TSVpFKDApKQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKGxlbiAmYW1wOyZhbXA7Ci0JICAgIGNvcHlfdG9fc29ja3B0cl9vZmZzZXQob3B0dmFsLAotCQkJCSAgIG9mZnNldG9mKHN0cnVjdCBpcF9tc2ZpbHRlciwgaW1zZl9zbGlzdF9mbGV4KSwKLQkJCQkgICBwc2wtJmd0O3NsX2FkZHIsIGxlbikpCiYjNDM7CWlmIChsZW4gJmFtcDsmYW1wOyBjb3B5X3RvX2l0ZXIocHNsLSZndDtzbF9hZGRyLCBsZW4sICZhbXA7b3B0LSZndDtpdGVyX291dCkgIT0gbGVuKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKIGRvbmU6CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwppbmRleCBhNTVlZjMyN2VjOTMyLi5jNThlNTY1ZjJhNWFhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKQEAgLTE3MDYsNiAmIzQzOzE3MDYsOCBAQCBpbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJY2FzZSBJUF9NU0ZJTFRFUjoKIAl7CiAJCXN0cnVjdCBpcF9tc2ZpbHRlciBtc2Y7CiYjNDM7CQlzdHJ1Y3Qga3ZlYyBrdmVjOwomIzQzOwkJc29ja29wdF90IG9wdDsKIAogCQlpZiAobGVuICZsdDsgSVBfTVNGSUxURVJfU0laRSgwKSkgewogCQkJZXJyID0gLUVJTlZBTDsKQEAgLTE3MTUsNyAmIzQzOzE3MTcsMTMgQEAgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJZXJyID0gLUVGQVVMVDsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWVyciA9IGlwX21jX21zZmdldChzaywgJmFtcDttc2YsIG9wdHZhbCwgb3B0bGVuKTsKJiM0MzsJCWVyciA9IHNvY2twdHJfdG9fc29ja29wdCgmYW1wO29wdCwgb3B0dmFsLCBvcHRsZW4sICZhbXA7a3ZlYyk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCAmYW1wO21zZiwgJmFtcDtvcHQpOwomIzQzOwkJaWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sICZhbXA7b3B0Lm9wdGxlbiwgc2l6ZW9mKGludCkpKQomIzQzOwkJCWVyciA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0OwogCX0KIAljYXNlIE1DQVNUX01TRklMVEVSOgpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IGMwNWQ4NmU2M2FiZjcuLjI5YTBmN2Y4ZTJjYWIgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmMKQEAgLTI0MzcsOCAmIzQzOzI0MzcsOCBAQCBJTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKGJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsCiAgKiBJdCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCBib3RoIGlvdiBwb2ludHMgdG8gdGhlIHNhbWUgZGF0YSwgYnV0LAogICogLml0ZXJfaW4gaXMgcmVhZC1vbmx5IGFuZCAuaXRlcl9vdXQgaXMgd3JpdGUtb25seSBieSB0aGUgcHJvdG9jb2wgY2FsbGJhY2tzCiAgKi8KLXN0YXRpYyBpbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLAotCQkJICAgICAgc29ja3B0cl90IG9wdGxlbiwgc3RydWN0IGt2ZWMgKmt2ZWMpCiYjNDM7aW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCwKJiM0MzsJCSAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBzdHJ1Y3Qga3ZlYyAqa3ZlYykKIHsKIAlpbnQga29wdGxlbjsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODAxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogV29ydGggdGhlIEZ1eno/KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvZXMqLiBGcm9tIGEgcXVpY2sgbG9vaywgaXQgc2VlbXMgbGlrZSBhIHNvY2tldCBvcHRpb24gY2hhbmdlIHJlbGF0ZWQgdG8gSUdNUCBhbmQgSVAgbXVsdGljYXN0IGZpbHRlcmluZy4gU3BlY2lmaWNhbGx5LCB0aGUgc2lnbmF0dXJlIG9mIGBpcF9tY19tc2ZnZXRgIGluIGBpZ21wLmhgIGhhcyBiZWVuIHJlZmFjdG9yZWQsIHN3aXRjaGluZyBmcm9tIHBvaW50ZXJzIHRvIHBvaW50ZXJzIGFuZCBsZW5ndGhzIHRvIGEgYHNvY2tvcHRfdGAgc3RydWN0LCB3aGljaCBpcyBhIHNpZ25pZmljYW50IHNoaWZ0LiBUaGUgYWRkaXRpb24gb2YgYHNvY2tvcHRfZXhwYW5kX291dGAgYW5kIGBzb2NrcHRyX3RvX3NvY2tvcHRgIGluIGBuZXQuaGAgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2UsIHByb3ZpZGluZyBoZWxwZXJzIGZvciBtYW5pcHVsYXRpbmcgdGhpcyBuZXcgc3RydWN0IGFuZCBjb252ZXJ0aW5nIGV4aXN0aW5nIHBvaW50ZXIgcmVwcmVzZW50YXRpb25zLiBUaGUgYGlnbXAuY2AgYW5kIGBpcF9zb2NrZ2x1ZS5jYCB1cGRhdGVzIHNob3cgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFkYXB0aW5nIHRvIHRoZSBgc29ja29wdF90YCBjaGFuZ2UsIGFuZCBgc29ja2V0LmNgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIG1ha2UgYHNvY2twdHJfdG9fc29ja29wdGAgbm9uLXN0YXRpYywgYWxsb3dpbmcgaXQgdG8gYmUgY2FsbGVkIGZyb20gdGhlIG5ldyBgZG9faXBfZ2V0c29ja29wdGAgY2FsbC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZz8gQWJzb2x1dGVseS4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgZGVhbGluZyB3aXRoIElQdjQgc29ja2V0IG9wdGlvbnMsIGFuZCBkaXJlY3RseSByZWFjaGFibGUgdmlhIHRoZSBgZ2V0c29ja29wdGAgc3lzY2FsbC4gVGhhdCBtYWtlcyBpdCBhIHByaW1lIHRhcmdldC4gU3RhbmRhcmQgdXNlciBzcGFjZSBhY2Nlc3MgdG8gY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB2aWEgYSBzeXN0ZW0gY2FsbCBpcyBhbiBpZGVhbCBzcG90LgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzOiBJIG5lZWQgdG8gZ2V0IHRoZSBleGFjdCBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9ucyBhZmZlY3RlZCB0byByZWZpbmUgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgYmV0dGVyIGNvbnRleHQgZm9yIHRoZSBjb2RlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBnb29kIHNwb3QgZm9yIGEgZm9jdXNlZCBmdXp6ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja3B0cl90b19zb2Nrb3B0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0Lmg9ODI9c3RhdGljIGlubGluZSBpbnQgc29ja29wdF9leHBhbmRfb3V0KHNvY2tvcHRfdCAqb3B0LCBzaXplX3Qgc2l6ZSlcbi0tXG5pbmNsdWRlL2xpbnV4L25ldC5oLTk0LVxuaW5jbHVkZS9saW51eC9uZXQuaDo5NTppbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuLFxuaW5jbHVkZS9saW51eC9uZXQuaC05Ni1cdFx0ICAgICAgIHN0cnVjdCBrdmVjICprdmVjKTtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE1MDc9aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTcxOS1cdFx0fVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNzIwOlx0XHRlcnIgPSBzb2NrcHRyX3RvX3NvY2tvcHQoXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbiwgXHUwMDI2a3ZlYyk7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3MjEtXHRcdGlmIChlcnIpXG4tLVxubmV0L3NvY2tldC5jPTI0MzE9SU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShib29sIHRjcF9icGZfYnlwYXNzX2dldHNvY2tvcHQoaW50IGxldmVsLFxuLS1cbm5ldC9zb2NrZXQuYy0yNDM5LSAqL1xubmV0L3NvY2tldC5jOjI0NDA6aW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCxcbm5ldC9zb2NrZXQuYy0yNDQxLVx0XHQgICAgICAgc29ja3B0cl90IG9wdGxlbiwgc3RydWN0IGt2ZWMgKmt2ZWMpXG4tLVxubmV0L3NvY2tldC5jPTI0NjY9aW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxuLS1cbm5ldC9zb2NrZXQuYy0yNDg1LVx0fSBlbHNlIGlmIChvcHMtXHUwMDNlZ2V0c29ja29wdF9pdGVyKSB7XG5uZXQvc29ja2V0LmM6MjQ4NjpcdFx0ZXJyID0gc29ja3B0cl90b19zb2Nrb3B0KFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4sIFx1MDAyNmt2ZWMpO1xubmV0L3NvY2tldC5jLTI0ODctXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA3NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIElHTVAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBob3cgbXVsdGljYXN0IG1lbWJlcnNoaXAgaW5mb3JtYXRpb24gaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSVB2NCBjb250ZXh0LiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoZSBpc3N1ZSBJJiMzOTttIHRyYWNraW5nIGlzIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgcmV0cmlldmVzIG9yIHNldHMgbXVsdGljYXN0IG1lbWJlcnNoaXAgaW5mb3JtYXRpb24uIFRoZXJlZm9yZSwgSSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgaXBfbWNfbXNmZ2V0YCBmdW5jdGlvbi4gSXQmIzM5O3MgYWxtb3N0IGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyBhbnl0aGluZyBJR01QLXJlbGF0ZWQuIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24sIHJlc2lkaW5nIHdpdGhpbiB0aGUgYG5ldC9pcHY0L2lnbXAuY2AgZmlsZSwgcGxheXMgYSBwaXZvdGFsIHJvbGUuIEkmIzM5O20gaG9waW5nIEkgY2FuIGZpbmQgdGhlIGNsdWUgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfbWNfbXNmZ2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaWdtcC5oPTI3NT1leHRlcm4gaW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsaW50IGlmaW5kZXgpO1xuaW5jbHVkZS9saW51eC9pZ21wLmg6Mjc2OmV4dGVybiBpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXG5pbmNsdWRlL2xpbnV4L2lnbXAuaC0yNzctXHRcdFx0c29ja29wdF90ICpvcHQpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0yNjIyPWludCBpcF9tY19tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBpbnQgaWZpbmRleClcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjcxMi1cbm5ldC9pcHY0L2lnbXAuYzoyNzEzOmludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgc29ja29wdF90ICpvcHQpXG5uZXQvaXB2NC9pZ21wLmMtMjcxNC17XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xNTA3PWludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3MjMtXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE3MjQ6XHRcdGVyciA9IGlwX21jX21zZmdldChzaywgXHUwMDI2bXNmLCBcdTAwMjZvcHQpO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzI1LVx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2b3B0Lm9wdGxlbiwgc2l6ZW9mKGludCkpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBpcF9zb2NrZ2x1ZS5jYCoqCgpPa2F5LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGlzIHNwZWNpZmljIHNpdHVhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBoZWFkIGRpcmVjdGx5IGludG8gdGhlIGBpcF9zb2NrZ2x1ZS5jYCBzb3VyY2UgY29kZSwgYW5kIEkmIzM5O20gdGFyZ2V0aW5nIGFyb3VuZCBsaW5lIDE3MDAuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHBsYWNlIHRvIHN0YXJ0IOKAkyBJJiMzOTttIGhvcGluZyB0aGF0IGFyZWEgd2lsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSBleHBlY3QgdGhhdCBhcm91bmQgdGhhdCByZWdpb24gSSBjYW4gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGN1cnJlbnQgc3RhdGUsIGFuZCB0aGlzIGZlZWxzIGxpa2UgYSBzdHJvbmcgc3RhcnRpbmcgcG9pbnQgdG8gYWNoaWV2ZSB0aGF0IGdvYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzAwOlx0XG4xNzAxOlx0XHRpZiAobmVlZHNfcnRubClcbjE3MDI6XHRcdFx0cnRubF9sb2NrKCk7XG4xNzAzOlx0XHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XG4xNzA0Olx0XG4xNzA1Olx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbjE3MDY6XHRcdGNhc2UgSVBfTVNGSUxURVI6XG4xNzA3Olx0XHR7XG4xNzA4Olx0XHRcdHN0cnVjdCBpcF9tc2ZpbHRlciBtc2Y7XG4xNzA5Olx0XHRcdHN0cnVjdCBrdmVjIGt2ZWM7XG4xNzEwOlx0XHRcdHNvY2tvcHRfdCBvcHQ7XG4xNzExOlx0XG4xNzEyOlx0XHRcdGlmIChsZW4gXHUwMDNjIElQX01TRklMVEVSX1NJWkUoMCkpIHtcbjE3MTM6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTcxNDpcdFx0XHRcdGdvdG8gb3V0O1xuMTcxNTpcdFx0XHR9XG4xNzE2Olx0XHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZtc2YsIG9wdHZhbCwgSVBfTVNGSUxURVJfU0laRSgwKSkpIHtcbjE3MTc6XHRcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMTcxODpcdFx0XHRcdGdvdG8gb3V0O1xuMTcxOTpcdFx0XHR9XG4xNzIwOlx0XHRcdGVyciA9IHNvY2twdHJfdG9fc29ja29wdChcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcdTAwMjZrdmVjKTtcbjE3MjE6XHRcdFx0aWYgKGVycilcbjE3MjI6XHRcdFx0XHRnb3RvIG91dDtcbjE3MjM6XHRcbjE3MjQ6XHRcdFx0ZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCBcdTAwMjZtc2YsIFx1MDAyNm9wdCk7XG4xNzI1Olx0XHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXG4xNzI2Olx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjE3Mjc6XHRcdFx0Z290byBvdXQ7XG4xNzI4Olx0XHR9XG4xNzI5Olx0XHRjYXNlIE1DQVNUX01TRklMVEVSOlxuMTczMDpcdFx0XHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcbjE3MzE6XHRcdFx0XHRlcnIgPSBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyKHNrLCBvcHR2YWwsIG9wdGxlbixcbjE3MzI6XHRcdFx0XHRcdFx0XHRcdCAgIGxlbik7XG4xNzMzOlx0XHRcdGVsc2VcbjE3MzQ6XHRcdFx0XHRlcnIgPSBpcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc2ssIG9wdHZhbCwgb3B0bGVuLCBsZW4pO1xuMTczNTpcdFx0XHRnb3RvIG91dDtcbjE3MzY6XHRcdGNhc2UgSVBfUFJPVE9DT0w6XG4xNzM3Olx0XHRcdHZhbCA9IGluZXRfc2soc2spLVx1MDAzZWluZXRfbnVtO1xuMTczODpcdFx0XHRicmVhaztcbjE3Mzk6XHRcdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQzNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIElHTVAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gd2UgbmVlZCB0byBleGFtaW5lIHRoZSBJR01QIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IG11bHRpY2FzdCBzb3VyY2UgZmlsdGVyaW5nIGlzIGhhbmRsZWQuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBuZXQvaXB2NC9pZ21wLmNgLiBUaGUgY29yZSBsb2dpYyBwcm9iYWJseSByZXNpZGVzIG5lYXIgYGlwX21jX21zZmdldGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIHJldHJpZXZlcyB0aGUgTXVsdGljYXN0IFNvdXJjZSBGaWx0ZXIgKE1TRikgc3RhdGUuIEkmIzM5O20gYXNzdW1pbmcgaXQgaGFuZGxlcyB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIGxvb2t1cHMsIGFuZCBhbnkgYXNzb2NpYXRlZCBsb2NraW5nIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5IHdoZW4gYSBtdWx0aWNhc3QgZ3JvdXAgbWVtYmVyIGFkZHMgb3IgcmVtb3ZlcyBhIHNvdXJjZS4gSeKAmWxsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGFsZ29yaXRobXMgdXNlZCBmb3IgbWF0Y2hpbmcsIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcm91dGluZyB0YWJsZSwgYXMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0dWFsIGZvcndhcmRpbmcgZGVjaXNpb25zIHN0ZW0gZnJvbSwgYmFzZWQgb24gdGhlIGZpbHRlciBpbmZvcm1hdGlvbi4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgaXQgcGVyZm9ybXMgc29tZSBzb3J0IG9mIGhhc2gtYmFzZWQgbG9va3VwIHRvIG9wdGltaXplIHRoZSBNU0YgcmV0cmlldmFsLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBlcnJvciBoYW5kbGluZzogd2hhdCBoYXBwZW5zIGlmIHRoZSBlbnRyeSBpc24mIzM5O3QgZm91bmQsIG9yIGlmIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB3aXRoIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50PyBUaGlzIHdpbGwgYmUgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzEwOlx0XHRyZXR1cm4gZXJyO1xuMjcxMTpcdH1cbjI3MTI6XHRcbjI3MTM6XHRpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIHNvY2tvcHRfdCAqb3B0KVxuMjcxNDpcdHtcbjI3MTU6XHRcdGludCBlcnIsIGxlbiwgY291bnQsIGNvcHljb3VudCwgbXNmX3NpemU7XG4yNzE2Olx0XHRzdHJ1Y3QgaXBfbXJlcW5cdGltcjtcbjI3MTc6XHRcdF9fYmUzMiBhZGRyID0gbXNmLVx1MDAzZWltc2ZfbXVsdGlhZGRyO1xuMjcxODpcdFx0c3RydWN0IGlwX21jX3NvY2tsaXN0ICpwbWM7XG4yNzE5Olx0XHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7XG4yNzIwOlx0XHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XG4yNzIxOlx0XHRzdHJ1Y3QgaXBfc2Zfc29ja2xpc3QgKnBzbDtcbjI3MjI6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbjI3MjM6XHRcbjI3MjQ6XHRcdEFTU0VSVF9SVE5MKCk7XG4yNzI1Olx0XG4yNzI2Olx0XHRpZiAoIWlwdjRfaXNfbXVsdGljYXN0KGFkZHIpKVxuMjcyNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI3Mjg6XHRcbjI3Mjk6XHRcdGltci5pbXJfbXVsdGlhZGRyLnNfYWRkciA9IG1zZi1cdTAwM2VpbXNmX211bHRpYWRkcjtcbjI3MzA6XHRcdGltci5pbXJfYWRkcmVzcy5zX2FkZHIgPSBtc2YtXHUwMDNlaW1zZl9pbnRlcmZhY2U7XG4yNzMxOlx0XHRpbXIuaW1yX2lmaW5kZXggPSAwO1xuMjczMjpcdFx0aW5fZGV2ID0gaXBfbWNfZmluZF9kZXYobmV0LCBcdTAwMjZpbXIpO1xuMjczMzpcdFxuMjczNDpcdFx0aWYgKCFpbl9kZXYpIHtcbjI3MzU6XHRcdFx0ZXJyID0gLUVOT0RFVjtcbjI3MzY6XHRcdFx0Z290byBkb25lO1xuMjczNzpcdFx0fVxuMjczODpcdFx0ZXJyID0gLUVBRERSTk9UQVZBSUw7XG4yNzM5Olx0XG4yNzQwOlx0XHRmb3JfZWFjaF9wbWNfcnRubChpbmV0LCBwbWMpIHtcbjI3NDE6XHRcdFx0aWYgKHBtYy1cdTAwM2VtdWx0aS5pbXJfbXVsdGlhZGRyLnNfYWRkciA9PSBtc2YtXHUwMDNlaW1zZl9tdWx0aWFkZHIgXHUwMDI2XHUwMDI2XG4yNzQyOlx0XHRcdCAgICBwbWMtXHUwMDNlbXVsdGkuaW1yX2lmaW5kZXggPT0gaW1yLmltcl9pZmluZGV4KVxuMjc0MzpcdFx0XHRcdGJyZWFrO1xuMjc0NDpcdFx0fVxuMjc0NTpcdFx0aWYgKCFwbWMpXHRcdC8qIG11c3QgaGF2ZSBhIHByaW9yIGpvaW4gKi9cbjI3NDY6XHRcdFx0Z290byBkb25lO1xuMjc0NzpcdFx0bXNmLVx1MDAzZWltc2ZfZm1vZGUgPSBwbWMtXHUwMDNlc2Ztb2RlO1xuMjc0ODpcdFx0cHNsID0gcnRubF9kZXJlZmVyZW5jZShwbWMtXHUwMDNlc2ZsaXN0KTtcbjI3NDk6XHRcdGlmICghcHNsKSB7XG4yNzUwOlx0XHRcdGNvdW50ID0gMDtcbjI3NTE6XHRcdH0gZWxzZSB7XG4yNzUyOlx0XHRcdGNvdW50ID0gcHNsLVx1MDAzZXNsX2NvdW50O1xuMjc1MzpcdFx0fVxuMjc1NDpcdFx0Y29weWNvdW50ID0gY291bnQgXHUwMDNjIG1zZi1cdTAwM2VpbXNmX251bXNyYyA/IGNvdW50IDogbXNmLVx1MDAzZWltc2ZfbnVtc3JjO1xuMjc1NTpcdFx0bGVuID0gZmxleF9hcnJheV9zaXplKHBzbCwgc2xfYWRkciwgY29weWNvdW50KTtcbjI3NTY6XHRcdG1zZi1cdTAwM2VpbXNmX251bXNyYyA9IGNvdW50O1xuMjc1NzpcdFx0bXNmX3NpemUgPSBJUF9NU0ZJTFRFUl9TSVpFKGNvcHljb3VudCk7XG4yNzU4Olx0XG4yNzU5Olx0XHQvKiBUaGUgc291cmNlIGxpc3QgaXMgc2l6ZWQgYnkgdGhlIGltc2ZfbnVtc3JjIHRoZSBjYWxsZXIgbGVmdCBpblxuMjc2MDpcdFx0ICogb3B0dmFsLCBub3QgYnkgb3B0bGVuLCB3aGljaCBvbmx5IGhhcyB0byBjb3ZlciB0aGUgZml4ZWQgcGFydC5cbjI3NjE6XHRcdCAqL1xuMjc2MjpcdFx0ZXJyID0gc29ja29wdF9leHBhbmRfb3V0KG9wdCwgbXNmX3NpemUpO1xuMjc2MzpcdFx0aWYgKGVycilcbjI3NjQ6XHRcdFx0cmV0dXJuIGVycjtcbjI3NjU6XHRcbjI3NjY6XHRcdG9wdC1cdTAwM2VvcHRsZW4gPSBtc2Zfc2l6ZTtcbjI3Njc6XHRcdGlmIChjb3B5X3RvX2l0ZXIobXNmLCBJUF9NU0ZJTFRFUl9TSVpFKDApLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9XG4yNzY4Olx0XHQgICAgSVBfTVNGSUxURVJfU0laRSgwKSlcbjI3Njk6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4yNzcwOlx0XHRpZiAobGVuIFx1MDAyNlx1MDAyNiBjb3B5X3RvX2l0ZXIocHNsLVx1MDAzZXNsX2FkZHIsIGxlbiwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXG4yNzcxOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjc3MjpcdFx0cmV0dXJuIDA7XG4yNzczOlx0ZG9uZTpcbjI3NzQ6XHRcdHJldHVybiBlcnI7XG4yNzc1Olx0fVxuMjc3NjpcdFxuMjc3NzpcdGludCBpcF9tY19nc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZ3JvdXBfZmlsdGVyICpnc2YsXG4yNzc4Olx0XHRcdCBzb2NrcHRyX3Qgb3B0dmFsLCBzaXplX3Qgc3Nfb2Zmc2V0KVxuMjc3OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg5MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNvY2twdHJfdG9fc29ja29wdGAgaW4gYG5ldC9zb2NrZXQuY2AqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIGluIHRoZSBuZXR3b3JrIHNvY2tldCBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBzb2NrcHRyX3RvX3NvY2tvcHRgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhpcyBmdW5jdGlvbiBiZWNhdXNlIGl0IHNvdW5kcyBsaWtlIGl0JiMzOTtzIGhhbmRsaW5nIHRoZSB0cmFuc2xhdGlvbiBiZXR3ZWVuIGEgZ2VuZXJpYyBzb2NrZXQgcG9pbnRlciBhbmQgdGhlIHNvY2tldCBvcHRpb25zLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhIHRvIHVuZGVyc3RhbmQsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHN1YnRsZSBiZWhhdmlvciBjaGFuZ2VzLiBJIG5lZWQgdG8gYmUgdGhpbmtpbmcgYWJvdXQgZGF0YSBzdHJ1Y3R1cmVzIGhlcmUuIFdoYXQga2luZCBvZiBwb2ludGVyIGlzIGBzb2NrcHRyYD8gSXMgaXQgYSB1c2VyLXNwYWNlIHBvaW50ZXI/IEtlcm5lbCBzcGFjZT8gVGhpcyBpbmZsdWVuY2VzIGhvdyB0aGlzIHRyYW5zbGF0aW9uIGFjdHVhbGx5IG9jY3VycywgYW5kIGFueSBtaXN0YWtlcyBoZXJlIGNhbiBsZWFkIHRvIGlzc3Vlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBvcHRpb24gZGF0YSBpdHNlbGYgaXMgcGFzc2VkOyBpcyBpdCBjb3BpZWQ/IEFjY2Vzc2VkIGRpcmVjdGx5PyBBbnkga2luZCBvZiBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyB3b3VsZCBiZSBleHRyZW1lbHkgaW50ZXJlc3RpbmcuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgdGhpcyBpbiBsaWdodCBvZiBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMuIFRoaXMgaXMgZ29pbmcgdG8gcmVxdWlyZSBhIGRlZXAgZGl2ZSB0byBmdWxseSBncmFzcCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgc29ja2V0IG9wdGlvbnMgYmVpbmcgc2V0LCBvciByZWFkLCBvciBib3RoLiBVbmRlcnN0YW5kaW5nIHRoYXQgZGlmZmVyZW5jZSB3aWxsIGJlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc29ja2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0MzU6XHQgKiBJbml0aWFsaXplIGEgc29ja29wdF90IGZyb20gc29ja3B0ciBvcHR2YWwvb3B0bGVuLCBzZXR0aW5nIHVwIGlvdl9pdGVyXG4yNDM2Olx0ICogZm9yIGJvdGggaW5wdXQgYW5kIG91dHB1dCBkaXJlY3Rpb25zLlxuMjQzNzpcdCAqIEl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IGJvdGggaW92IHBvaW50cyB0byB0aGUgc2FtZSBkYXRhLCBidXQsXG4yNDM4Olx0ICogLml0ZXJfaW4gaXMgcmVhZC1vbmx5IGFuZCAuaXRlcl9vdXQgaXMgd3JpdGUtb25seSBieSB0aGUgcHJvdG9jb2wgY2FsbGJhY2tzXG4yNDM5Olx0ICovXG4yNDQwOlx0aW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCxcbjI0NDE6XHRcdFx0ICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIHN0cnVjdCBrdmVjICprdmVjKVxuMjQ0MjpcdHtcbjI0NDM6XHRcdGludCBrb3B0bGVuO1xuMjQ0NDpcdFxuMjQ0NTpcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmtvcHRsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKVxuMjQ0NjpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjI0NDc6XHRcbjI0NDg6XHRcdGlmIChrb3B0bGVuIFx1MDAzYyAwKVxuMjQ0OTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI0NTA6XHRcbjI0NTE6XHRcdGlmIChvcHR2YWwuaXNfa2VybmVsKSB7XG4yNDUyOlx0XHRcdGt2ZWMtXHUwMDNlaW92X2Jhc2UgPSBvcHR2YWwua2VybmVsO1xuMjQ1MzpcdFx0XHRrdmVjLVx1MDAzZWlvdl9sZW4gPSBrb3B0bGVuO1xuMjQ1NDpcdFx0XHRpb3ZfaXRlcl9rdmVjKFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCwgSVRFUl9ERVNULCBrdmVjLCAxLCBrb3B0bGVuKTtcbjI0NTU6XHRcdFx0aW92X2l0ZXJfa3ZlYyhcdTAwMjZvcHQtXHUwMDNlaXRlcl9pbiwgSVRFUl9TT1VSQ0UsIGt2ZWMsIDEsIGtvcHRsZW4pO1xuMjQ1NjpcdFx0fSBlbHNlIHtcbjI0NTc6XHRcdFx0aW92X2l0ZXJfdWJ1ZihcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQsIElURVJfREVTVCwgb3B0dmFsLnVzZXIsIGtvcHRsZW4pO1xuMjQ1ODpcdFx0XHRpb3ZfaXRlcl91YnVmKFx1MDAyNm9wdC1cdTAwM2VpdGVyX2luLCBJVEVSX1NPVVJDRSwgb3B0dmFsLnVzZXIsXG4yNDU5Olx0XHRcdFx0ICAgICAga29wdGxlbik7XG4yNDYwOlx0XHR9XG4yNDYxOlx0XHRvcHQtXHUwMDNlb3B0bGVuID0ga29wdGxlbjtcbjI0NjI6XHRcbjI0NjM6XHRcdHJldHVybiAwO1xuMjQ2NDpcdH1cbjI0NjU6XHRcbjI0NjY6XHRpbnQgZG9fc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsXG4yNDY3Olx0XHRcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcbjI0Njg6XHR7XG4yNDY5Olx0XHRpbnQgbWF4X29wdGxlbiBfX21heWJlX3VudXNlZCA9IDA7XG4yNDcwOlx0XHRjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHM7XG4yNDcxOlx0XHRzdHJ1Y3Qga3ZlYyBrdmVjO1xuMjQ3MjpcdFx0c29ja29wdF90IG9wdDtcbjI0NzM6XHRcdGludCBlcnI7XG4yNDc0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4ODIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBuZXQuaGAgdG8gVHJhY2UgU29ja2V0IE9wdGlvbnMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZSBuZXR3b3JrIHNvY2tldCBiZWhhdmlvciwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGV4cGFuZHMgc29ja2V0IG9wdGlvbnMsIHNwZWNpZmljYWxseSwgdGhhdCBgc29ja29wdF9leHBhbmRfb3V0YCBtYWNyby4gUmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBgaW5jbHVkZS9saW51eC9uZXQuaGAgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgdGhpcyBtYWNybyBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHNvY2tldCBvcHRpb24gaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20gYXNzdW1pbmcgaXQgcmVsYXRlcyB0byB1c2VyIHNwYWNlIG9yIHRoZSBuZXR3b3JrIHN0YWNrIHByZXBhcmluZyBvcHRpb25zIGJlZm9yZSBwYXNzaW5nIHRoZW0gb3V0LiBHb3R0YSB0cmFjZSB0aGUgY2FsbGluZyBjb250ZXh0cyB0byBzZWUgaWYgdGhpcyBpcyByZWxhdGVkIHRvIGEgdnVsbmVyYWJpbGl0eS4gTGV0JiMzOTtzIHNlZSBob3cgYHNvY2tvcHRfZXhwYW5kX291dGAgaGFuZGxlcyB0aGUgY29weWluZywgdmFsaWRhdGlvbiwgYW5kIGV4cGFuc2lvbiBvZiBzb2NrZXQgb3B0aW9ucywgYW5kIHdoYXQgdHlwZSBzYWZldHkgY29uc2lkZXJhdGlvbnMgYXJlIGluIHBsYXkuIEFueSBvZmYtYnktb25lIGVycm9ycz8gUG9zc2libGUgaW50ZWdlciBvdmVyZmxvd3M/IEkgc2hvdWxkIGNoZWNrIGl0cyB1c2UgaW4gdGhlIGNvZGUgYmFzZSDigJMgbGlrZWx5IHRoZSBgc2V0c29ja29wdGAgYW5kIGBnZXRzb2Nrb3B0YCBpbXBsZW1lbnRhdGlvbnMgYXJlIHRoZSBwcmltYXJ5IGFyZWFzIG9mIGludGVyZXN0LiBHb3R0YSBxdWlja2x5IHNraW0gdGhvc2UgZnVuY3Rpb25zIGFuZCBzZWUgd2hhdCB0aGlzIG1hY3JvIGlzIGRvaW5nIGluIHRoZSBjb250ZXh0IG9mIGBzdHJ1Y3Qgc29ja2V0YCBtYW5pcHVsYXRpb24gYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBXZSYjMzk7cmUgbG9va2luZyBmb3IgaG93IHRoaXMgbWFjcm8gcHJvdGVjdHMgYWdhaW5zdCB1c2VybGFuZCBidWZmZXIgb3ZlcnJ1bnMgb3Igb3RoZXIgcmVsYXRlZCBleHBsb2l0YWJsZSBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XG4gIDYxOlx0XHRpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKVxuICA2MjpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAgNjM6XHRcdGlmIChsZW4gXHUwMDNjIDApXG4gIDY0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA2NTpcdFxuICA2NjpcdFx0aW92X2l0ZXJfdWJ1ZihcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQsIElURVJfREVTVCwgb3B0dmFsLCBsZW4pO1xuICA2NzpcdFx0aW92X2l0ZXJfdWJ1ZihcdTAwMjZvcHQtXHUwMDNlaXRlcl9pbiwgSVRFUl9TT1VSQ0UsIG9wdHZhbCwgbGVuKTtcbiAgNjg6XHRcdG9wdC1cdTAwM2VvcHRsZW4gPSBsZW47XG4gIDY5Olx0XG4gIDcwOlx0XHRyZXR1cm4gMDtcbiAgNzE6XHR9XG4gIDcyOlx0XG4gIDczOlx0LypcbiAgNzQ6XHQgKiBHcm93IG9wdHZhbCB0byBAc2l6ZSwgZm9yIHRoZSBvcHRpb25zIHdob3NlIHJlcGx5IGlzIHNpemVkIGJ5IGEgY291bnQgdGhlXG4gIDc1Olx0ICogY2FsbGVyIGxlZnQgaW4gb3B0dmFsIHJhdGhlciB0aGFuIGJ5IG9wdGxlbi4gVGhvc2Ugd3JpdGUgcGFzdCBvcHRsZW4gdG9kYXlcbiAgNzY6XHQgKiBhbmQgdXNlcnNwYWNlIHJlbGllcyBvbiBpdC5cbiAgNzc6XHQgKlxuICA3ODpcdCAqIENhbGwgaXQgYmVmb3JlIHdyaXRpbmcgdGhyb3VnaCBvcHQtXHUwMDNlaXRlcl9vdXQ6IGl0IHJlLWFuY2hvcnMgdGhlIGl0ZXJhdG9yIGF0XG4gIDc5Olx0ICogdGhlIGhlYWQgb2Ygb3B0dmFsLiBPbmx5IGEgdXNlciBidWZmZXIgY2FuIGJlIGxvbmdlciB0aGFuIHRoZSBvcHRsZW4gdGhlXG4gIDgwOlx0ICogY2FsbGVyIGRlY2xhcmVkLCBzbyBhIGtlcm5lbC1iYWNrZWQgb3B0dmFsIGlzIHJlZnVzZWQgd2l0aCAtRUlOVkFMLlxuICA4MTpcdCAqL1xuICA4MjpcdHN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfZXhwYW5kX291dChzb2Nrb3B0X3QgKm9wdCwgc2l6ZV90IHNpemUpXG4gIDgzOlx0e1xuICA4NDpcdFx0aWYgKHNpemUgXHUwMDNjPSBpb3ZfaXRlcl9jb3VudChcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpKVxuICA4NTpcdFx0XHRyZXR1cm4gMDtcbiAgODY6XHRcbiAgODc6XHRcdGlmIChXQVJOX09OX09OQ0UoIWl0ZXJfaXNfdWJ1ZihcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpKSlcbiAgODg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDg5Olx0XG4gIDkwOlx0XHRpb3ZfaXRlcl91YnVmKFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCwgSVRFUl9ERVNULCBvcHQtXHUwMDNlaXRlcl9vdXQudWJ1Ziwgc2l6ZSk7XG4gIDkxOlx0XG4gIDkyOlx0XHRyZXR1cm4gMDtcbiAgOTM6XHR9XG4gIDk0Olx0XG4gIDk1Olx0aW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbixcbiAgOTY6XHRcdFx0ICAgICAgIHN0cnVjdCBrdmVjICprdmVjKTtcbiAgOTc6XHRcbiAgOTg6XHRzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3Q7XG4gIDk5Olx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbztcbiAxMDA6XHRzdHJ1Y3QgaW5vZGU7XG4gMTAxOlx0c3RydWN0IGZpbGU7XG4gMTAyOlx0c3RydWN0IG5ldDtcbiAxMDM6XHRcbiAxMDQ6XHQvKiBIaXN0b3JpY2FsbHksIFNPQ0tXUV9BU1lOQ19OT1NQQUNFIFx1MDAyNiBTT0NLV1FfQVNZTkNfV0FJVERBVEEgd2VyZSBsb2NhdGVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODc5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqS2NvbmZpZyBEZXBlbmRlbmN5IEFuYWx5c2lzKioKCk9rYXksIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zIGZvciB0aGlzIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0IGBuZXQvaXB2NC9pZ21wLmNgIGFuZCBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AuIFNpbmNlIHRoZXNlIGFyZSB3aXRoaW4gdGhlIGBuZXQvaXB2NGAgZGlyZWN0b3J5LCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhleSByZWxhdGUgdG8gSVB2NCBuZXR3b3JraW5nLiBUaGF0IHR5cGljYWxseSBtZWFucyBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX05FVGAgYXJlIGludm9sdmVkIOKAkyB0aG9zZSBhcmUgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnRzLiBOb3csIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgTWFrZWZpbGVzLiBJJiMzOTtsbCBwcm9iYWJseSBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgbGlzdGVkIGVpdGhlciBpbiBgbmV0L2lwdjQvTWFrZWZpbGVgIG9yIHBvdGVudGlhbGx5IGluIHRoZSB0b3AtbGV2ZWwgYG5ldC9NYWtlZmlsZWAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGNvbmZpcm0gdGhlIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfTkVUYCBkZXBlbmRlbmNpZXMsIGFuZCBtYXliZSBmaW5kIGEgZmV3IG1vcmUgc3BlY2lmaWMgb25lcyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIE1ha2VmaWxlcyByZXZlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lnbXAubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGUtMTMtXHQgICAgIHRjcF9vZmZsb2FkLm8gdGNwX3BsYi5vIGRhdGFncmFtLm8gcmF3Lm8gdWRwLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE0Olx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTUtXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzM5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NCBNYWtlZmlsZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIElQdjQgc3RhY2ssIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGZpcnN0IDI1IGxpbmVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIG92ZXJ2aWV3LiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgc2VjdGlvbiBpcyBwcm9iYWJseSBkZWZpbmluZyBzb21lIGJhc2ljIHZhcmlhYmxlcywgaW5jbHVkZSBwYXRocywgbWF5YmUgc2V0dGluZyB1cCBzb21lIGluaXRpYWwgYnVpbGQgdGFyZ2V0cyBvciBkZXBlbmRlbmNpZXMgZm9yIHRoZSBJUHY0IG1vZHVsZS4gQ291bGQgYmUgaW5pdGlhbCBjb25maWd1cmF0aW9uLCBvciB0aGUgY29yZSBpbmNsdWRlIGRpcmVjdGl2ZXMuIEkmIzM5O2xsIHNjYW4gdGhvc2UgbGluZXMgYW5kIGdldCBhIGJldHRlciBmZWVsIGZvciBpdHMgaW5pdGlhbCBzZXR1cC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IFRDUC9JUCAoSU5FVCkgbGF5ZXIuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxuICAgNzpcdFx0ICAgICBpcF9pbnB1dC5vIGlwX2ZyYWdtZW50Lm8gaXBfZm9yd2FyZC5vIGlwX29wdGlvbnMubyBcXFxuICAgODpcdFx0ICAgICBpcF9vdXRwdXQubyBpcF9zb2NrZ2x1ZS5vIGluZXRfaGFzaHRhYmxlcy5vIFxcXG4gICA5Olx0XHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcbiAgMTA6XHRcdCAgICAgdGNwLm8gdGNwX2lucHV0Lm8gdGNwX291dHB1dC5vIHRjcF90aW1lci5vIHRjcF9pcHY0Lm8gXFxcbiAgMTE6XHRcdCAgICAgdGNwX21pbmlzb2Nrcy5vIHRjcF9jb25nLm8gdGNwX21ldHJpY3MubyB0Y3BfZmFzdG9wZW4ubyBcXFxuICAxMjpcdFx0ICAgICB0Y3BfcmVjb3ZlcnkubyB0Y3BfdWxwLm8gXFxcbiAgMTM6XHRcdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxuICAxNDpcdFx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxuICAxNTpcdFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxuICAxNjpcdFx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxuICAxNzpcdFx0ICAgICBtZXRyaWNzLm8gbmV0bGluay5vIG5leHRob3AubyB1ZHBfdHVubmVsX3N0dWIub1xuICAxODpcdFxuICAxOTpcdG9iai0kKENPTkZJR19ORVRfSVBfVFVOTkVMKSAmIzQzOz0gaXBfdHVubmVsLm9cbiAgMjA6XHRvYmotJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsX25ldF9pcHY0Lm9cbiAgMjE6XHRvYmotJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Mub1xuICAyMjpcdG9iai0kKENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMpICYjNDM7PSBmaWJfcnVsZXMub1xuICAyMzpcdG9iai0kKENPTkZJR19JUF9NUk9VVEUpICYjNDM7PSBpcG1yLm9cbiAgMjQ6XHRvYmotJChDT05GSUdfSVBfTVJPVVRFX0NPTU1PTikgJiM0Mzs9IGlwbXJfYmFzZS5vXG4gIDI1Olx0b2JqLSQoQ09ORklHX05FVF9JUElQKSAmIzQzOz0gaXBpcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDk5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBpbmV0YCBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgY29udHJvbGxpbmcgYGluZXRgLiBUaGUgaGludCBpcyBgQ09ORklHX0lORVRgLCB3aGljaCBzdWdnZXN0cyBpdCYjMzk7cyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBzdGFuZGFyZCBwbGFjZXMgaW4gdGhlIGtlcm5lbCBzb3VyY2UsIHR5cGljYWxseSBgbmV0L0tjb25maWdgIG9yLCBzaW5jZSBpdCYjMzk7cyBpbnRlcm5ldC1yZWxhdGVkLCBgbmV0L2lwdjQvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvciByZWZlcmVuY2UgdG8gYENPTkZJR19JTkVUYCBhbmQgc2VlIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQgYW5kIHdoYXQgaXRzIGRlcGVuZGVuY2llcyBtaWdodCBiZS4gVGltZSB0byBkaXZlIGludG8gdGhvc2UgS2NvbmZpZyBmaWxlcyBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9OTk9Y29uZmlnIE5FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVFxuLS1cbm5ldC9LY29uZmlnLTExMy1cbm5ldC9LY29uZmlnOjExNDpjb25maWcgSU5FVFxubmV0L0tjb25maWctMTE1LVx0Ym9vbCBcJiMzNDtUQ1AvSVAgbmV0d29ya2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM5NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgSVAgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIG11bHRpY2FzdCBzZXR0aW5ncyBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgbmV0L2lwdjQvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgcGxhY2Ugd2hlcmUgeW91JiMzOTtsbCBmaW5kIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIElQdjQgbmV0d29ya2luZywgaW5jbHVkaW5nIGFueXRoaW5nIHNwZWNpZmljIHRvIElHTVAgb3IgdGhlIG11bHRpY2FzdCBmZWF0dXJlcyBpbiBnZW5lcmFsLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGtleXdvcmRzLCBvcHRpb25zLCBvciBkZXBlbmRlbmNpZXMgdGhlcmUuIEkmIzM5O20gZXNwZWNpYWxseSBsb29raW5nIHRvIHNlZSBpZiBgQ09ORklHX0lQX01VTFRJQ0FTVGAgaXMgdXNlZCwgYXMgaXQgb2Z0ZW4gZm9ybXMgdGhlIGJhc2lzIGZvciBlbmFibGluZyB0aGUgY29yZSBtdWx0aWNhc3QgZnVuY3Rpb25hbGl0eS4KClRoZW4sIEkmIzM5O2xsIGRpdmUgYSBiaXQgZGVlcGVyIGludG8gdGhlIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gYG5ldC9pcHY0L2lnbXAuY2AuIGBpZ21wLmNgIGlzIHRoZSBtb3N0IG9idmlvdXMgbG9jYXRpb24gZm9yIElHTVAtc3BlY2lmaWMgY29kZSwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBncm91cCBtZW1iZXJzaGlwcyBhcmUgaGFuZGxlZC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggdGhpcyBmaWxlIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBsaWtlIGAjaWZkZWZgIG9yIGNvbmZpZ3VyYXRpb24gbWFjcm9zIHN0YXJ0aW5nIHdpdGggYENPTkZJR19gLiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBkaWZmZXJlbnQgY29kZSBibG9ja3MgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIGhvdyB0aGVzZSBtdWx0aWNhc3Qgb3B0aW9ucyBhcmUgZW5hYmxlZCwgZGlzYWJsZWQsIGFuZCBjb25maWd1cmVkLiBJJiMzOTttIGhvcGluZyB0byBkaXNjb3ZlciB0aGUgcHJlY2lzZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gY29uZmlndXJhdGlvbiBzZXR0aW5ncyBhbmQgdGhlaXIgaW5mbHVlbmNlIG9uIHRoZSBjb2RlIHRoYXQgaGFuZGxlcyBJR01QIGFuZCByZWxhdGVkIG11bHRpY2FzdCBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lnbXAuYy0xMDEtI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQuaFx1MDAzZVxubmV0L2lwdjQvaWdtcC5jOjEwMjojaWZkZWYgQ09ORklHX0lQX01ST1VURVxubmV0L2lwdjQvaWdtcC5jLTEwMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9tcm91dGUuaFx1MDAzZVxubmV0L2lwdjQvaWdtcC5jLTEwNC0jZW5kaWZcbm5ldC9pcHY0L2lnbXAuYzoxMDU6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5uZXQvaXB2NC9pZ21wLmMtMTA2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfZnMuaFx1MDAzZVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xMDktXG5uZXQvaXB2NC9pZ21wLmM6MTEwOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTExLS8qIFBhcmFtZXRlciBuYW1lcyBhbmQgdmFsdWVzIGFyZSB0YWtlbiBmcm9tIGlnbXAtdjItMDYgZHJhZnQgKi9cbi0tXG5uZXQvaXB2NC9pZ21wLmM9MjIwPXN0YXRpYyB2b2lkIGlwX3NmX2xpc3RfY2xlYXJfYWxsKHN0cnVjdCBpcF9zZl9saXN0ICpwc2YpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTIzMC1cbm5ldC9pcHY0L2lnbXAuYzoyMzE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMzItXG4tLVxubmV0L2lwdjQvaWdtcC5jPTExMjk9aW50IGlnbXBfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTExNjktXHRjYXNlIElHTVBfUElNOlxubmV0L2lwdjQvaWdtcC5jOjExNzA6I2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMVxubmV0L2lwdjQvaWdtcC5jLTExNzEtXHRcdHJldHVybiBwaW1fcmN2X3YxKHNrYik7XG4tLVxubmV0L2lwdjQvaWdtcC5jPTEyMTk9c3RhdGljIHZvaWQgaXBfbWNfZmlsdGVyX2RlbChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xMjI3LVxubmV0L2lwdjQvaWdtcC5jOjEyMjg6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xMjI5LS8qXG4tLVxubmV0L2lwdjQvaWdtcC5jPTEzNTg9c3RhdGljIHZvaWQgX19pZ21wX2dyb3VwX2Ryb3BwZWQoc3RydWN0IGlwX21jX2xpc3QgKmltLCBnZnBfdCBnZnApXG4tLVxubmV0L2lwdjQvaWdtcC5jLTEzNjAtXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbS1cdTAwM2VpbnRlcmZhY2U7XG5uZXQvaXB2NC9pZ21wLmM6MTM2MTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTEzNjItXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGluX2Rldi1cdTAwM2VkZXYpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0xMzcwLVxubmV0L2lwdjQvaWdtcC5jOjEzNzE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xMzcyLVx0aWYgKGltLVx1MDAzZW11bHRpYWRkciA9PSBJR01QX0FMTF9IT1NUUylcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MTQwMj1zdGF0aWMgdm9pZCBpZ21wX2dyb3VwX2FkZGVkKHN0cnVjdCBpcF9tY19saXN0ICppbSlcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTQwNC1cdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGltLVx1MDAzZWludGVyZmFjZTtcbm5ldC9pcHY0L2lnbXAuYzoxNDA1OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTQwNi1cdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaW5fZGV2LVx1MDAzZWRldik7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTE0MTMtXG5uZXQvaXB2NC9pZ21wLmM6MTQxNDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTE0MTUtXHRpZiAoaW0tXHUwMDNlbXVsdGlhZGRyID09IElHTVBfQUxMX0hPU1RTKVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xNTcwPXN0YXRpYyB2b2lkIF9fX19pcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcixcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTYxNS1cdHNwaW5fbG9ja19pbml0KFx1MDAyNmltLVx1MDAzZWxvY2spO1xubmV0L2lwdjQvaWdtcC5jOjE2MTY6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xNjE3LVx0dGltZXJfc2V0dXAoXHUwMDI2aW0tXHUwMDNldGltZXIsIGlnbXBfdGltZXJfZXhwaXJlLCAwKTtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTYyNS1cbm5ldC9pcHY0L2lnbXAuYzoxNjI2OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTYyNy1cdGlnbXB2M19kZWxfZGVscmVjKGluX2RldiwgaW0pO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xNzk0PXN0YXRpYyB2b2lkIGlwX21jX3Jlam9pbl9ncm91cHMoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxubmV0L2lwdjQvaWdtcC5jLTE3OTUte1xubmV0L2lwdjQvaWdtcC5jOjE3OTY6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xNzk3LVx0c3RydWN0IGlwX21jX2xpc3QgKmltO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xODc2PXZvaWQgaXBfbWNfcmVtYXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xODgyLVx0Zm9yX2VhY2hfcG1jX3J0bmwoaW5fZGV2LCBwbWMpIHtcbm5ldC9pcHY0L2lnbXAuYzoxODgzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTg4NC1cdFx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBwbWMpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xODkyPXZvaWQgaXBfbWNfZG93bihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE5MDAtXG5uZXQvaXB2NC9pZ21wLmM6MTkwMTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTE5MDItXHRXUklURV9PTkNFKGluX2Rldi1cdTAwM2Vtcl9pZmNfY291bnQsIDApO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0xOTEyLVxubmV0L2lwdjQvaWdtcC5jOjE5MTM6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xOTE0LXN0YXRpYyB2b2lkIGlwX21jX3Jlc2V0KHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldilcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MTkyOD12b2lkIGlwX21jX2luaXRfZGV2KHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldilcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTkzMS1cbm5ldC9pcHY0L2lnbXAuYzoxOTMyOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTkzMy1cdHRpbWVyX3NldHVwKFx1MDAyNmluX2Rldi1cdTAwM2Vtcl9ncV90aW1lciwgaWdtcF9ncV90aW1lcl9leHBpcmUsIDApO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xOTQzPXZvaWQgaXBfbWNfdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xOTUyLVx0Zm9yX2VhY2hfcG1jX3J0bmwoaW5fZGV2LCBwbWMpIHtcbm5ldC9pcHY0L2lnbXAuYzoxOTUzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTk1NC1cdFx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBwbWMpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xOTY0PXZvaWQgaXBfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xOTcxLVx0aXBfbWNfZG93bihpbl9kZXYpO1xubmV0L2lwdjQvaWdtcC5jOjE5NzI6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xOTczLVx0aWdtcHYzX2NsZWFyX2RlbHJlYyhpbl9kZXYpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0yMDIyPXN0YXRpYyBpbnQgaXBfbWNfZGVsMV9zcmMoc3RydWN0IGlwX21jX2xpc3QgKnBtYywgaW50IHNmbW9kZSxcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjA0Mi1cdGlmICghcHNmLVx1MDAzZXNmX2NvdW50W01DQVNUX0lOQ0xVREVdIFx1MDAyNlx1MDAyNiAhcHNmLVx1MDAzZXNmX2NvdW50W01DQVNUX0VYQ0xVREVdKSB7XG5uZXQvaXB2NC9pZ21wLmM6MjA0MzojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIwNDQtXHRcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IHBtYy1cdTAwM2VpbnRlcmZhY2U7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTIwNTQtXHRcdFx0XHRcdCAgIHBtY19kZXJlZmVyZW5jZShwc2YtXHUwMDNlc2ZfbmV4dCwgcG1jKSk7XG5uZXQvaXB2NC9pZ21wLmM6MjA1NTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIwNTYtXHRcdGlmIChwc2YtXHUwMDNlc2Zfb2xkaW4gXHUwMDI2XHUwMDI2XG4tLVxubmV0L2lwdjQvaWdtcC5jLTIwNzUtXG5uZXQvaXB2NC9pZ21wLmM6MjA3NjojaWZuZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMDc3LSNkZWZpbmUgaWdtcF9pZmNfZXZlbnQoeClcdGRvIHsgfSB3aGlsZSAoMClcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MjA4MD1zdGF0aWMgaW50IGlwX21jX2RlbF9zcmMoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgKnBtY2EsIGludCBzZm1vZGUsXG4tLVxubmV0L2lwdjQvaWdtcC5jLTIxMDAtXHRyY3VfcmVhZF91bmxvY2soKTtcbm5ldC9pcHY0L2lnbXAuYzoyMTAxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMjEwMi1cdHNmX21hcmtzdGF0ZShwbWMpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMTIwLVx0ICAgIHBtYy1cdTAwM2VzZmNvdW50W01DQVNUX0lOQ0xVREVdKSB7XG5uZXQvaXB2NC9pZ21wLmM6MjEyMTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIxMjItXHRcdHN0cnVjdCBpcF9zZl9saXN0ICpwc2Y7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTIxMjctXHRcdHBtYy1cdTAwM2VzZm1vZGUgPSBNQ0FTVF9JTkNMVURFO1xubmV0L2lwdjQvaWdtcC5jOjIxMjg6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMTI5LVx0XHRwbWMtXHUwMDNlY3Jjb3VudCA9IGluX2Rldi1cdTAwM2Vtcl9xcnYgPzogUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF9pZ21wX3Fydik7XG4tLVxubmV0L2lwdjQvaWdtcC5jPTIxNDY9c3RhdGljIGludCBpcF9tY19hZGQxX3NyYyhzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jLCBpbnQgc2Ztb2RlLFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMTczLVxubmV0L2lwdjQvaWdtcC5jOjIxNzQ6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMTc1LXN0YXRpYyB2b2lkIHNmX21hcmtzdGF0ZShzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jKVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0yMjYwPXN0YXRpYyBpbnQgaXBfbWNfYWRkX3NyYyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiAqcG1jYSwgaW50IHNmbW9kZSxcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjI4MS1cbm5ldC9pcHY0L2lnbXAuYzoyMjgyOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMjI4My1cdHNmX21hcmtzdGF0ZShwbWMpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMzAxLVx0fSBlbHNlIGlmIChpc2V4Y2x1ZGUgIT0gKHBtYy1cdTAwM2VzZmNvdW50W01DQVNUX0VYQ0xVREVdICE9IDApKSB7XG5uZXQvaXB2NC9pZ21wLmM6MjMwMjojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIzMDMtXHRcdHN0cnVjdCBpcF9zZl9saXN0ICpwc2Y7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTIzMTItXHRcdFx0cG1jLVx1MDAzZXNmbW9kZSA9IE1DQVNUX0lOQ0xVREU7XG5uZXQvaXB2NC9pZ21wLmM6MjMxMzojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIzMTQtXHRcdC8qIGVsc2Ugbm8gZmlsdGVyczsga2VlcCBvbGQgbW9kZSBmb3IgcmVwb3J0cyAqL1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0yOTAwPWludCBpcF9jaGVja19tY19yY3Uoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgbWNfYWRkciwgX19iZTMyIHNyY19hZGRyLCB1OCBwcm90bylcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjk0My1cbm5ldC9pcHY0L2lnbXAuYzoyOTQ0OiNpZiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxubmV0L2lwdjQvaWdtcC5jLTI5NDUtc3RydWN0IGlnbXBfbWNfaXRlcl9zdGF0ZSB7XG4tLVxubmV0L2lwdjQvaWdtcC5jPTMwMzE9c3RhdGljIGludCBpZ21wX21jX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0zMDQyLVxubmV0L2lwdjQvaWdtcC5jOjMwNDM6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0zMDQ0LVx0XHRxdWVyaWVyID0gSUdNUF9WMV9TRUVOKHN0YXRlLVx1MDAzZWluX2RldikgPyBcJiMzNDtWMVwmIzM0OyA6XG4tLVxubmV0L2lwdjQvaWdtcC5jPTMyNzQ9aW50IF9faW5pdCBpZ21wX21jX2luaXQodm9pZClcbm5ldC9pcHY0L2lnbXAuYy0zMjc1LXtcbm5ldC9pcHY0L2lnbXAuYzozMjc2OiNpZiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxubmV0L2lwdjQvaWdtcC5jLTMyNzctXHRpbnQgZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA5NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBJUCBNdWx0aWNhc3QgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbXVsdGljYXN0IHN1cHBvcnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBDT05GSUdfSVBfTVVMVElDQVNUYCBvcHRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb2NhdGUgaXQgd2l0aGluIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCDigJMgaXQmIzM5O3MgdGhlIHVzdWFsIGxvY2F0aW9uIGZvciBJUHY0LXNwZWNpZmljIG5ldHdvcmtpbmcgZmVhdHVyZXMuIEkgZXhwZWN0IHRoaXMgY29uZmlnIG9wdGlvbiB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uYWwgc3dpdGNoIGNvbnRyb2xsaW5nIHRoZSBlbnRpcmUgSVB2NCBtdWx0aWNhc3QgZnVuY3Rpb25hbGl0eS4gRnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgZGVwZW5kZW5jaWVzIGFuZCBzZWUgaG93IGl0IGludGVycGxheXMgd2l0aCBvdGhlciBuZXR3b3JraW5nIGZlYXR1cmVzIGFuZCB0aGUgbXVsdGljYXN0IGNvZGUgaXRzZWxmLiBUaW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfTVVMVElDQVNUXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZy00LSNcbm5ldC9pcHY0L0tjb25maWc6NTpjb25maWcgSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9LY29uZmlnLTYtXHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3RpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJUHY0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gSVB2NCBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZSBmb3IgSVB2NC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIG9mIGxvb2tpbmcgYXQgYG5ldC9pcHY0L0tjb25maWdgIGFyb3VuZCBsaW5lIDUuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgdG9wLWxldmVsIG9wdGlvbnMgcmVsYXRlZCB0byBJUHY0IGFyZSBkZWZpbmVkLCBvciBwZXJoYXBzIHRoZSBpbmNsdXNpb24gb2Ygb3RoZXIgcmVsZXZhbnQgZmlsZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBidWlsZC10aW1lIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBwZXJoYXBzIHNvbWUgZ2VuZXJhbCBtb2R1bGUgc2VsZWN0aW9ucyB0aGF0IHdpbGwgaWxsdW1pbmF0ZSB0aGUgY29kZSYjMzk7cyBiZWhhdmlvci4gSSBhbSBhbnRpY2lwYXRpbmcgdGhlIHRvcC1sZXZlbCBpdGVtcywgc28gSSB3aWxsIGtub3cgd2hldGhlciB0byBkaWcgZGVlcGVyIG9yIHdoZXRoZXIgdG8gbG9vayBhcm91bmQgYXQgYW5vdGhlciBLY29uZmlnIGZpbGUuIEkgY2FuIGdldCBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIElQdjQgc3Vic3lzdGVtIGZyb20gdGhpcyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgSVAgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb25maWcgSVBfTVVMVElDQVNUXG4gICA2Olx0XHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3RpbmdcJiMzNDtcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgVGhpcyBpcyBjb2RlIGZvciBhZGRyZXNzaW5nIHNldmVyYWwgbmV0d29ya2VkIGNvbXB1dGVycyBhdCBvbmNlLFxuICAgOTpcdFx0ICBlbmxhcmdpbmcgeW91ciBrZXJuZWwgYnkgYWJvdXQgMiBLQi4gWW91IG5lZWQgbXVsdGljYXN0aW5nIGlmIHlvdVxuICAxMDpcdFx0ICBpbnRlbmQgdG8gcGFydGljaXBhdGUgaW4gdGhlIE1CT05FLCBhIGhpZ2ggYmFuZHdpZHRoIG5ldHdvcmsgb24gdG9wXG4gIDExOlx0XHQgIG9mIHRoZSBJbnRlcm5ldCB3aGljaCBjYXJyaWVzIGF1ZGlvIGFuZCB2aWRlbyBicm9hZGNhc3RzLiBNb3JlXG4gIDEyOlx0XHQgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBNQk9ORSBpcyBvbiB0aGUgV1dXIGF0XG4gIDEzOlx0XHQgIFx1MDAzY2h0dHBzOi8vd3d3LnNhdmV0ei5jb20vbWJvbmUvXHUwMDNlLiBGb3IgbW9zdCBwZW9wbGUsIGl0JiMzOTtzIHNhZmUgdG8gc2F5IE4uXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUlxuICAxNjpcdFx0Ym9vbCBcJiMzNDtJUDogYWR2YW5jZWQgcm91dGVyXCYjMzQ7XG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIElmIHlvdSBpbnRlbmQgdG8gcnVuIHlvdXIgTGludXggYm94IG1vc3RseSBhcyBhIHJvdXRlciwgaS5lLiBhcyBhXG4gIDE5Olx0XHQgIGNvbXB1dGVyIHRoYXQgZm9yd2FyZHMgYW5kIHJlZGlzdHJpYnV0ZXMgbmV0d29yayBwYWNrZXRzLCBzYXkgWTsgeW91XG4gIDIwOlx0XHQgIHdpbGwgdGhlbiBiZSBwcmVzZW50ZWQgd2l0aCBzZXZlcmFsIG9wdGlvbnMgdGhhdCBhbGxvdyBtb3JlIHByZWNpc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MjgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmV2aWV3aW5nIHRoZSBSZWNlbnQgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBmdW5jdGlvbiBtb2RpZmljYXRpb25zLiBGaXJzdCwgYGlwX21jX21zZmdldGAgaW4gYG5ldC9pcHY0L2lnbXAuY2AgaGFzIGJlZW4gcmV3b3JrZWQuIEl0JiMzOTtzIG5vdyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gYW5kIGl0cyBzaWduYXR1cmUgaGFzIGJlZW4gdXBkYXRlZCB0byBhY2NlcHQgYSBgc29ja29wdF90ICpvcHRgLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGF0IGl0IGRpcmVjdGx5IHVzZXMgYHNvY2tvcHRfZXhwYW5kX291dGAgd2l0aCBgbXNmX3NpemVgIGFuZCBgY29weV90b19pdGVyYCwgd2hpY2ggaXMgaG93IGl0JiMzOTtzIGdldHRpbmcgYW5kIGhhbmRsaW5nIHRoZSBkYXRhLgoKTmV4dCwgaW4gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLCBgZG9faXBfZ2V0c29ja29wdGAgaGFzIHVuZGVyZ29uZSBhIGNoYW5nZSBpbiBpdHMgSVBfTVNGSUxURVIgaGFuZGxpbmcuIE5vdywgaW5zdGVhZCBvZiBkb2luZyBldmVyeXRoaW5nIGlubGluZSwgaXQgY2FsbHMgYHNvY2twdHJfdG9fc29ja29wdGAgd2hpY2ggdGhlbiBjYWxscyBgaXBfbWNfbXNmZ2V0YC4KCmBzb2NrcHRyX3RvX3NvY2tvcHRgIGluIGBuZXQvc29ja2V0LmNgIGhhcyBtb3ZlZCBmcm9tIGJlaW5nIGEgc3RhdGljIGZ1bmN0aW9uIHRvIGFuIGV4dGVybiBmdW5jdGlvbi4KCkZpbmFsbHksIHdlIGhhdmUgYHNvY2tvcHRfZXhwYW5kX291dGAgaW4gYGluY2x1ZGUvbGludXgvbmV0LmhgLiBUaGlzIGlzIGEgc3RhdGljIGlubGluZSBoZWxwZXIgZnVuY3Rpb24sIGNydWNpYWwgYmVjYXVzZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQgYnkgYGlwX21jX21zZmdldGAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhpcyB1c2FnZS4gSXQmIzM5O3MgdGltZSB0byBkbyBhIHRob3JvdWdoIGNoZWNrOyBJIG5lZWQgdG8gc2VlIGlmIGFueSBvdGhlciBjb2RlIHBhdGhzIGFyZSBjYWxsaW5nIGBpcF9tY19tc2ZnZXRgIG9yIGBzb2Nrb3B0X2V4cGFuZF9vdXRgLiBHb3R0YSBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgaW50cm9kdWNlZCBhbnkgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgb3IgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2Nrb3B0X2V4cGFuZF9vdXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXQuaD01Nj1zdGF0aWMgaW5saW5lIGludCBzb2Nrb3B0X2luaXRfdXNlcihzb2Nrb3B0X3QgKm9wdCwgY2hhciBfX3VzZXIgKm9wdHZhbCxcbi0tXG5pbmNsdWRlL2xpbnV4L25ldC5oLTgxLSAqL1xuaW5jbHVkZS9saW51eC9uZXQuaDo4MjpzdGF0aWMgaW5saW5lIGludCBzb2Nrb3B0X2V4cGFuZF9vdXQoc29ja29wdF90ICpvcHQsIHNpemVfdCBzaXplKVxuaW5jbHVkZS9saW51eC9uZXQuaC04My17XG4tLVxubmV0L2lwdjQvaWdtcC5jPTI3MTM9aW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBzb2Nrb3B0X3QgKm9wdClcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjc2MS1cdCAqL1xubmV0L2lwdjQvaWdtcC5jOjI3NjI6XHRlcnIgPSBzb2Nrb3B0X2V4cGFuZF9vdXQob3B0LCBtc2Zfc2l6ZSk7XG5uZXQvaXB2NC9pZ21wLmMtMjc2My1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzcwCgkJCQkJCQlvdXRwdXQ6IDE1NAoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBDb25maXJtYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY2FsbCBjaGFpbiBmb3IgYGlwX21jX21zZmdldGAgb25lIG1vcmUgdGltZS4gTG9va3MgbGlrZSBpdCYjMzk7cyBleGNsdXNpdmVseSBjYWxsZWQgd2l0aGluIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCwgc3BlY2lmaWNhbGx5IGJ5IGBkb19pcF9nZXRzb2Nrb3B0YC4gRXhjZWxsZW50LgoKTm93LCBsZXQmIzM5O3MgYWxpZ24gdGhpcyB3aXRoIHRoZSBGb2N1c1N5bWJvbHMgbWV0aG9kb2xvZ3kuIFRoaXMgbWVhbnMgZm9jdXNpbmcgb24gbm9uLXViaXF1aXRvdXMga2VybmVsIGZ1bmN0aW9ucyB0byBuYXJyb3cgZG93biBvdXIgZnV6emluZyBzY29wZS4gV2Ugd2FudCB0byBhdm9pZCBnZW5lcmljIGZ1bmN0aW9ucyBsaWtlIGFsbG9jYXRvcnMgYW5kIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBhbmQgaW5zdGVhZCB0YXJnZXQgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnkgcG9pbnRzLiBgaXBfbWNfbXNmZ2V0YCwgYGRvX2lwX2dldHNvY2tvcHRgLCBhbmQgYHNvY2twdHJfdG9fc29ja29wdGAgYWxsIGZpdCB0aGF0IGJpbGwgcGVyZmVjdGx5LiBSZW1lbWJlciB0aGF0IGBzb2Nrb3B0X2V4cGFuZF9vdXRgIGlzIGlubGluZWQsIHNvIGZ1enppbmcgaXRzIGNhbGxlciwgYGlwX21jX21zZmdldGAsIGlzIHRoZSB3YXkgdG8gZ28uCgpOZXh0LCB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBXZSBkZWZpbml0ZWx5IG5lZWQgYElORVRgIHNpbmNlIHRoaXMgdG91Y2hlcyBgbmV0L2lwdjQvYCwgc3BlY2lmaWNhbGx5IGBpcF9zb2NrZ2x1ZS5jYCBhbmQgYGlnbXAuY2AuIEFuZCBgSVBfTVVMVElDQVNUYCBpcyBzcG90LW9uLCBhcyBtdWx0aWNhc3Qgc29ja2V0IG9wdGlvbnMgbGlrZSBgSVBfTVNGSUxURVJgIGFuZCBJR01QIGFyZSBkaXJlY3RseSByZWxldmFudC4gTm8gc3VycHJpc2VzIHRoZXJlLgoKUXVpY2sgc2FuaXR5IGNoZWNrIG9uIHRob3NlIGNvbmZpZ3M6IGBJTkVUYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgYSBsb3Qgb2Ygd2hhdCB3ZSYjMzk7cmUgbG9va2luZyBhdCwgYW5kIGBJUF9NVUxUSUNBU1RgIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGUgdGFyZ2V0IGZ1bmN0aW9uYWxpdHkuIEFsbCBnb29kLgoKQWxyaWdodCwgdGltZSB0byBjb25zdHJ1Y3QgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycy4gYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgdHJ1ZWAuIFRoZSBgUmVhc29uaW5nYCBzaG91bGQgYmUgY2xlYXI6IFRoaXMgcGF0Y2ggbW9kaWZpZXMgSVBfTVNGSUxURVIgaGFuZGxpbmcgd2l0aGluIElQdjQmIzM5O3MgYGRvX2lwX2dldHNvY2tvcHRgLCBjaGFuZ2VzIGBpcF9tY19tc2ZnZXRgIHRvIHVzZSBgc29ja29wdF90YCBhbmQgYWRkcyBpdGVyYXRvciBsb2dpYyB3aXRoIGBzb2Nrb3B0X2V4cGFuZF9vdXRgLCBhbGwgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHNvY2tldCBjYWxscy4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBgWyYjMzQ7aXBfbWNfbXNmZ2V0JiMzNDssICYjMzQ7ZG9faXBfZ2V0c29ja29wdCYjMzQ7LCAmIzM0O3NvY2twdHJfdG9fc29ja29wdCYjMzQ7XWAuIEFuZCBmaW5hbGx5LCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBgWyYjMzQ7SU5FVCYjMzQ7LCAmIzM0O0lQX01VTFRJQ0FTVCYjMzQ7XWAuCgpFdmVyeXRoaW5nIGlzIHZlcmlmaWVkLCB0aGUgY2hlY2tzIGFyZSBwYXNzZWQsIGFuZCB0aGUgcmVhc29uaW5nIGlzIHNvdW5kLiBOb3cgaXQmIzM5O3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQX01VTFRJQ0FTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX21jX21zZmdldCYjMzQ7LAogICAgJiMzNDtkb19pcF9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3NvY2twdHJfdG9fc29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIElQX01TRklMVEVSIHNvY2tldCBvcHRpb24gaW4gSVB2NCBnZXRzb2Nrb3B0IGJ5IGNvbnZlcnRpbmcgaXBfbWNfbXNmZ2V0IHRvIHVzZSB0aGUgc29ja29wdF90IGFic3RyYWN0aW9uLCBpbnRyb2R1Y2luZyB0aGUgc29ja29wdF9leHBhbmRfb3V0IGhlbHBlciB0byBkeW5hbWljYWxseSByZXNpemUgdGhlIG91dHB1dCBidWZmZXIgaXRlcmF0b3IsIGFuZCBleHBvcnRpbmcgc29ja3B0cl90b19zb2Nrb3B0LiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBjYW4gYmUgZGlyZWN0bHkgZXhlcmNpc2VkIGZyb20gdXNlcnNwYWNlIHZpYSBnZXRzb2Nrb3B0KCkgY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBfTVVMVElDQVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbWNfbXNmZ2V0JiMzNDssCiAgICAmIzM0O2RvX2lwX2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7c29ja3B0cl90b19zb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgSVBfTVNGSUxURVIgc29ja2V0IG9wdGlvbiBpbiBJUHY0IGdldHNvY2tvcHQgYnkgY29udmVydGluZyBpcF9tY19tc2ZnZXQgdG8gdXNlIHRoZSBzb2Nrb3B0X3QgYWJzdHJhY3Rpb24sIGludHJvZHVjaW5nIHRoZSBzb2Nrb3B0X2V4cGFuZF9vdXQgaGVscGVyIHRvIGR5bmFtaWNhbGx5IHJlc2l6ZSB0aGUgb3V0cHV0IGJ1ZmZlciBpdGVyYXRvciwgYW5kIGV4cG9ydGluZyBzb2NrcHRyX3RvX3NvY2tvcHQuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGNhbiBiZSBkaXJlY3RseSBleGVyY2lzZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGdldHNvY2tvcHQoKSBjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgSVBfTVNGSUxURVIgZ2V0c29ja29wdCBoYW5kbGluZyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgLyBpb3ZfaXRlciBpbmZyYXN0cnVjdHVyZSB2aWEgYHNvY2twdHJfdG9fc29ja29wdCgpYCwgYHNvY2tvcHRfZXhwYW5kX291dCgpYCwgYW5kIGBjb3B5X3RvX2l0ZXIoKWAuIFxuXG4tIEluIGBkb19pcF9nZXRzb2Nrb3B0KClgLCBgbXNmYCBpcyBwb3B1bGF0ZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBjb3B5X2Zyb21fc29ja3B0cigpYCBmb3IgYElQX01TRklMVEVSX1NJWkUoMClgICgxNiBieXRlcyksIGNvdmVyaW5nIGFsbCBzY2FsYXIgZmllbGRzIChgaW1zZl9tdWx0aWFkZHJgLCBgaW1zZl9pbnRlcmZhY2VgLCBgaW1zZl9mbW9kZWAsIGBpbXNmX251bXNyY2ApLCB3aXRoIGBpbXNmX2Ztb2RlYCBhbmQgYGltc2ZfbnVtc3JjYCBzdWJzZXF1ZW50bHkgdXBkYXRlZCBiZWZvcmUgYGNvcHlfdG9faXRlcigpYCBjb3BpZXMgZXhhY3RseSAxNiBieXRlcy4gVGhlcmUgaXMgbm8gc3RydWN0IHBhZGRpbmcgaW4gYHN0cnVjdCBpcF9tc2ZpbHRlcmAuXG4tIFRoZSBtdWx0aWNhc3Qgc291cmNlIGZpbHRlciBhZGRyZXNzIGFycmF5IGBwc2wtXHUwMDNlc2xfYWRkcmAgaXMgY29waWVkIHVwIHRvIGBjb3B5Y291bnQgXHUwMDNjPSBwc2wtXHUwMDNlc2xfY291bnRgIGVsZW1lbnRzLCB3aGljaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEuXG4tIGBzb2Nrb3B0X2V4cGFuZF9vdXQoKWAgYW5kIGBzb2NrcHRyX3RvX3NvY2tvcHQoKWAgb25seSBhZGp1c3QgaXRlcmF0b3IgZGVzY3JpcHRvcnMgZm9yIHVzZXIgbWVtb3J5IGJvdW5kYXJpZXMgYW5kIGRvIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBQb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyBzdWNoIGFzIG91dC1vZi1ib3VuZHMgdXNlciBidWZmZXIgYWNjZXNzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOKSBhbmQgY29weS10by11c2VyIGZhdWx0IGhhbmRsaW5nLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUyNTI1ZmNkNzY5YWRjYmY0OTYyNTdlZDY0OGUzYmNiMzYyMzE1MDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAxMDowNzoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWdtcC5oIGIvaW5jbHVkZS9saW51eC9pZ21wLmgKaW5kZXggYTBjZjAzOTg1MTlmZC4uZTA3NTYxMTM0NGVmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZ21wLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pZ21wLmgKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdGltZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc29ja3B0ci5oJmd0OwogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvaWdtcC5oJmd0OwpAQCAtMjczLDcgJiM0MzsyNzQsNyBAQCBleHRlcm4gaW50IGlwX21jX3NvdXJjZShpbnQgYWRkLCBpbnQgb21vZGUsIHN0cnVjdCBzb2NrICpzaywKIAkJc3RydWN0IGlwX21yZXFfc291cmNlICptcmVxcywgaW50IGlmaW5kZXgpOwogZXh0ZXJuIGludCBpcF9tY19tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLGludCBpZmluZGV4KTsKIGV4dGVybiBpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsCi0JCQlzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKTsKJiM0MzsJCQlzb2Nrb3B0X3QgKm9wdCk7CiBleHRlcm4gaW50IGlwX21jX2dzZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBncm91cF9maWx0ZXIgKmdzZiwKIAkJCXNvY2twdHJfdCBvcHR2YWwsIHNpemVfdCBvZmZzZXQpOwogZXh0ZXJuIGludCBpcF9tY19zZl9hbGxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIF9fYmUzMiBsb2NhbCwgX19iZTMyIHJtdCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0LmggYi9pbmNsdWRlL2xpbnV4L25ldC5oCmluZGV4IDQ3MDEwMGFlNzEwNzcuLmRlMGVkMzYyYjM3NzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXQuaApAQCAtNzAsNiAmIzQzOzcwLDMxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfaW5pdF91c2VyKHNvY2tvcHRfdCAqb3B0LCBjaGFyIF9fdXNlciAqb3B0dmFsLAogCXJldHVybiAwOwogfQogCiYjNDM7LyoKJiM0MzsgKiBHcm93IG9wdHZhbCB0byBAc2l6ZSwgZm9yIHRoZSBvcHRpb25zIHdob3NlIHJlcGx5IGlzIHNpemVkIGJ5IGEgY291bnQgdGhlCiYjNDM7ICogY2FsbGVyIGxlZnQgaW4gb3B0dmFsIHJhdGhlciB0aGFuIGJ5IG9wdGxlbi4gVGhvc2Ugd3JpdGUgcGFzdCBvcHRsZW4gdG9kYXkKJiM0MzsgKiBhbmQgdXNlcnNwYWNlIHJlbGllcyBvbiBpdC4KJiM0MzsgKgomIzQzOyAqIENhbGwgaXQgYmVmb3JlIHdyaXRpbmcgdGhyb3VnaCBvcHQtJmd0O2l0ZXJfb3V0OiBpdCByZS1hbmNob3JzIHRoZSBpdGVyYXRvciBhdAomIzQzOyAqIHRoZSBoZWFkIG9mIG9wdHZhbC4gT25seSBhIHVzZXIgYnVmZmVyIGNhbiBiZSBsb25nZXIgdGhhbiB0aGUgb3B0bGVuIHRoZQomIzQzOyAqIGNhbGxlciBkZWNsYXJlZCwgc28gYSBrZXJuZWwtYmFja2VkIG9wdHZhbCBpcyByZWZ1c2VkIHdpdGggLUVJTlZBTC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBzb2Nrb3B0X2V4cGFuZF9vdXQoc29ja29wdF90ICpvcHQsIHNpemVfdCBzaXplKQomIzQzO3sKJiM0MzsJaWYgKHNpemUgJmx0Oz0gaW92X2l0ZXJfY291bnQoJmFtcDtvcHQtJmd0O2l0ZXJfb3V0KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFpdGVyX2lzX3VidWYoJmFtcDtvcHQtJmd0O2l0ZXJfb3V0KSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaW92X2l0ZXJfdWJ1ZigmYW1wO29wdC0mZ3Q7aXRlcl9vdXQsIElURVJfREVTVCwgb3B0LSZndDtpdGVyX291dC51YnVmLCBzaXplKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCBzb2NrcHRyX3RvX3NvY2tvcHQoc29ja29wdF90ICpvcHQsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4sCiYjNDM7CQkgICAgICAgc3RydWN0IGt2ZWMgKmt2ZWMpOwomIzQzOwogc3RydWN0IHBvbGxfdGFibGVfc3RydWN0Owogc3RydWN0IHBpcGVfaW5vZGVfaW5mbzsKIHN0cnVjdCBpbm9kZTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lnbXAuYyBiL25ldC9pcHY0L2lnbXAuYwppbmRleCBkNTYzNTVhY2E3OTc3Li4xNDRmY2ExNThhZGNiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pZ21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaWdtcC5jCkBAIC0yNzA5LDggJiM0MzsyNzA5LDggQEAgaW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIGludCBpZmluZGV4KQogCQllcnIgPSBpcF9tY19sZWF2ZV9ncm91cChzaywgJmFtcDtpbXIpOwogCXJldHVybiBlcnI7CiB9Ci1pbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsCi0JCSBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKQomIzQzOwomIzQzO2ludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgc29ja29wdF90ICpvcHQpCiB7CiAJaW50IGVyciwgbGVuLCBjb3VudCwgY29weWNvdW50LCBtc2Zfc2l6ZTsKIAlzdHJ1Y3QgaXBfbXJlcW4JaW1yOwpAQCAtMjc1NSwxNCAmIzQzOzI3NTUsMTkgQEAgaW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLAogCWxlbiA9IGZsZXhfYXJyYXlfc2l6ZShwc2wsIHNsX2FkZHIsIGNvcHljb3VudCk7CiAJbXNmLSZndDtpbXNmX251bXNyYyA9IGNvdW50OwogCW1zZl9zaXplID0gSVBfTVNGSUxURVJfU0laRShjb3B5Y291bnQpOwotCWlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCAmYW1wO21zZl9zaXplLCBzaXplb2YoaW50KSkgfHwKLQkgICAgY29weV90b19zb2NrcHRyKG9wdHZhbCwgbXNmLCBJUF9NU0ZJTFRFUl9TSVpFKDApKSkgewomIzQzOwomIzQzOwkvKiBUaGUgc291cmNlIGxpc3QgaXMgc2l6ZWQgYnkgdGhlIGltc2ZfbnVtc3JjIHRoZSBjYWxsZXIgbGVmdCBpbgomIzQzOwkgKiBvcHR2YWwsIG5vdCBieSBvcHRsZW4sIHdoaWNoIG9ubHkgaGFzIHRvIGNvdmVyIHRoZSBmaXhlZCBwYXJ0LgomIzQzOwkgKi8KJiM0MzsJZXJyID0gc29ja29wdF9leHBhbmRfb3V0KG9wdCwgbXNmX3NpemUpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJb3B0LSZndDtvcHRsZW4gPSBtc2Zfc2l6ZTsKJiM0MzsJaWYgKGNvcHlfdG9faXRlcihtc2YsIElQX01TRklMVEVSX1NJWkUoMCksICZhbXA7b3B0LSZndDtpdGVyX291dCkgIT0KJiM0MzsJICAgIElQX01TRklMVEVSX1NJWkUoMCkpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KLQlpZiAobGVuICZhbXA7JmFtcDsKLQkgICAgY29weV90b19zb2NrcHRyX29mZnNldChvcHR2YWwsCi0JCQkJICAgb2Zmc2V0b2Yoc3RydWN0IGlwX21zZmlsdGVyLCBpbXNmX3NsaXN0X2ZsZXgpLAotCQkJCSAgIHBzbC0mZ3Q7c2xfYWRkciwgbGVuKSkKJiM0MzsJaWYgKGxlbiAmYW1wOyZhbXA7IGNvcHlfdG9faXRlcihwc2wtJmd0O3NsX2FkZHIsIGxlbiwgJmFtcDtvcHQtJmd0O2l0ZXJfb3V0KSAhPSBsZW4pCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogZG9uZToKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCmluZGV4IGE1NWVmMzI3ZWM5MzIuLmM1OGU1NjVmMmE1YWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwpAQCAtMTcwNiw2ICYjNDM7MTcwNiw4IEBAIGludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAljYXNlIElQX01TRklMVEVSOgogCXsKIAkJc3RydWN0IGlwX21zZmlsdGVyIG1zZjsKJiM0MzsJCXN0cnVjdCBrdmVjIGt2ZWM7CiYjNDM7CQlzb2Nrb3B0X3Qgb3B0OwogCiAJCWlmIChsZW4gJmx0OyBJUF9NU0ZJTFRFUl9TSVpFKDApKSB7CiAJCQllcnIgPSAtRUlOVkFMOwpAQCAtMTcxNSw3ICYjNDM7MTcxNywxMyBAQCBpbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCQllcnIgPSAtRUZBVUxUOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCAmYW1wO21zZiwgb3B0dmFsLCBvcHRsZW4pOwomIzQzOwkJZXJyID0gc29ja3B0cl90b19zb2Nrb3B0KCZhbXA7b3B0LCBvcHR2YWwsIG9wdGxlbiwgJmFtcDtrdmVjKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQllcnIgPSBpcF9tY19tc2ZnZXQoc2ssICZhbXA7bXNmLCAmYW1wO29wdCk7CiYjNDM7CQlpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgJmFtcDtvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpCiYjNDM7CQkJZXJyID0gLUVGQVVMVDsKIAkJZ290byBvdXQ7CiAJfQogCWNhc2UgTUNBU1RfTVNGSUxURVI6CmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggYzA1ZDg2ZTYzYWJmNy4uMjlhMGY3ZjhlMmNhYiAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zb2NrZXQuYwpAQCAtMjQzNyw4ICYjNDM7MjQzNyw4IEBAIElORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoYm9vbCB0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0KGludCBsZXZlbCwKICAqIEl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IGJvdGggaW92IHBvaW50cyB0byB0aGUgc2FtZSBkYXRhLCBidXQsCiAgKiAuaXRlcl9pbiBpcyByZWFkLW9ubHkgYW5kIC5pdGVyX291dCBpcyB3cml0ZS1vbmx5IGJ5IHRoZSBwcm90b2NvbCBjYWxsYmFja3MKICAqLwotc3RhdGljIGludCBzb2NrcHRyX3RvX3NvY2tvcHQoc29ja29wdF90ICpvcHQsIHNvY2twdHJfdCBvcHR2YWwsCi0JCQkgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBzdHJ1Y3Qga3ZlYyAqa3ZlYykKJiM0MztpbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLAomIzQzOwkJICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIHN0cnVjdCBrdmVjICprdmVjKQogewogCWludCBrb3B0bGVuOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDEzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFdlIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoZSBzdGFuZGFyZCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBvciBvdGhlciBzYW5pdGl6ZXJzIHdpbGwgYmUgZW5vdWdoLCBvciBpZiB0aGlzIHJlcXVpcmVzIHRoZSBtb3JlIGFnZ3Jlc3NpdmUgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKS4gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLgoKRmlyc3QsIGxldCBtZSBnZXQgYSBncmFzcCBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgcGF0Y2ggaXMgYmVpbmcgYXBwbGllZC4gV2hhdCYjMzk7cyBpdCB0cnlpbmcgdG8gYWNoaWV2ZT8gV2hhdCYjMzk7cyB0aGUgYXJlYSBvZiB0aGUga2VybmVsIGl0JiMzOTtzIG1vZGlmeWluZz8KClJpZ2h0LCB0aGUgZmlsZXMgdG91Y2hlZCBhcmU6IGBpbmNsdWRlL2xpbnV4L2lnbXAuaGAsIGBpbmNsdWRlL2xpbnV4L25ldC5oYCwgYG5ldC9pcHY0L2lnbXAuY2AsIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCwgYW5kIGBuZXQvc29ja2V0LmNgLiBUaGlzIHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gSUdNUCAoSW50ZXJuZXQgR3JvdXAgTWFuYWdlbWVudCBQcm90b2NvbCkgYW5kIGdlbmVyYWwgbmV0d29ya2luZyBzb2NrZXRzLCBwcm9iYWJseSBJUHY0LiBUaGF0IGhlbHBzIG5hcnJvdyB0aGUgc2NvcGUuCgpOb3csIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgKG9yIGV2ZW4ganVzdCBgcmVhZC1maWxlYCBhbmQgYSBnb29kIHNlYXJjaCkgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoZXNlIGZpbGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvZiBtZW1vcnkgYWxsb2NhdGlvbiwgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGFuZCBkYXRhIGZsb3cgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBhcmVhcyB3aGVyZSBhIHZhbHVlIG1pZ2h0IGJlIHJlYWQgYmVmb3JlIGl0JiMzOTtzIGJlZW4gcHJvcGVybHkgc2V0LiBJ4oCZbGwgbG9vayBjYXJlZnVsbHkgYXQgYW55IG5ldyB2YXJpYWJsZXMgb3IgbW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBvbmVzLiBUaGF04oCZcyB3aGVyZSB0aGUgcmlza3MgdHlwaWNhbGx5IGhpZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzAwOlx0XHRcdFx0MCwgTlVMTCwgMCk7XG4yNzAxOlx0XHR9XG4yNzAyOlx0XHRyY3VfYXNzaWduX3BvaW50ZXIocG1jLVx1MDAzZXNmbGlzdCwgbmV3cHNsKTtcbjI3MDM6XHRcdGlmIChwc2wpXG4yNzA0Olx0XHRcdGtmcmVlX3JjdShwc2wsIHJjdSk7XG4yNzA1Olx0XHRwbWMtXHUwMDNlc2Ztb2RlID0gbXNmLVx1MDAzZWltc2ZfZm1vZGU7XG4yNzA2Olx0XHRlcnIgPSAwO1xuMjcwNzpcdGRvbmU6XG4yNzA4Olx0XHRpZiAobGVhdmVncm91cClcbjI3MDk6XHRcdFx0ZXJyID0gaXBfbWNfbGVhdmVfZ3JvdXAoc2ssIFx1MDAyNmltcik7XG4yNzEwOlx0XHRyZXR1cm4gZXJyO1xuMjcxMTpcdH1cbjI3MTI6XHRcbjI3MTM6XHRpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIHNvY2tvcHRfdCAqb3B0KVxuMjcxNDpcdHtcbjI3MTU6XHRcdGludCBlcnIsIGxlbiwgY291bnQsIGNvcHljb3VudCwgbXNmX3NpemU7XG4yNzE2Olx0XHRzdHJ1Y3QgaXBfbXJlcW5cdGltcjtcbjI3MTc6XHRcdF9fYmUzMiBhZGRyID0gbXNmLVx1MDAzZWltc2ZfbXVsdGlhZGRyO1xuMjcxODpcdFx0c3RydWN0IGlwX21jX3NvY2tsaXN0ICpwbWM7XG4yNzE5Olx0XHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7XG4yNzIwOlx0XHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XG4yNzIxOlx0XHRzdHJ1Y3QgaXBfc2Zfc29ja2xpc3QgKnBzbDtcbjI3MjI6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbjI3MjM6XHRcbjI3MjQ6XHRcdEFTU0VSVF9SVE5MKCk7XG4yNzI1Olx0XG4yNzI2Olx0XHRpZiAoIWlwdjRfaXNfbXVsdGljYXN0KGFkZHIpKVxuMjcyNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI3Mjg6XHRcbjI3Mjk6XHRcdGltci5pbXJfbXVsdGlhZGRyLnNfYWRkciA9IG1zZi1cdTAwM2VpbXNmX211bHRpYWRkcjtcbjI3MzA6XHRcdGltci5pbXJfYWRkcmVzcy5zX2FkZHIgPSBtc2YtXHUwMDNlaW1zZl9pbnRlcmZhY2U7XG4yNzMxOlx0XHRpbXIuaW1yX2lmaW5kZXggPSAwO1xuMjczMjpcdFx0aW5fZGV2ID0gaXBfbWNfZmluZF9kZXYobmV0LCBcdTAwMjZpbXIpO1xuMjczMzpcdFxuMjczNDpcdFx0aWYgKCFpbl9kZXYpIHtcbjI3MzU6XHRcdFx0ZXJyID0gLUVOT0RFVjtcbjI3MzY6XHRcdFx0Z290byBkb25lO1xuMjczNzpcdFx0fVxuMjczODpcdFx0ZXJyID0gLUVBRERSTk9UQVZBSUw7XG4yNzM5Olx0XG4yNzQwOlx0XHRmb3JfZWFjaF9wbWNfcnRubChpbmV0LCBwbWMpIHtcbjI3NDE6XHRcdFx0aWYgKHBtYy1cdTAwM2VtdWx0aS5pbXJfbXVsdGlhZGRyLnNfYWRkciA9PSBtc2YtXHUwMDNlaW1zZl9tdWx0aWFkZHIgXHUwMDI2XHUwMDI2XG4yNzQyOlx0XHRcdCAgICBwbWMtXHUwMDNlbXVsdGkuaW1yX2lmaW5kZXggPT0gaW1yLmltcl9pZmluZGV4KVxuMjc0MzpcdFx0XHRcdGJyZWFrO1xuMjc0NDpcdFx0fVxuMjc0NTpcdFx0aWYgKCFwbWMpXHRcdC8qIG11c3QgaGF2ZSBhIHByaW9yIGpvaW4gKi9cbjI3NDY6XHRcdFx0Z290byBkb25lO1xuMjc0NzpcdFx0bXNmLVx1MDAzZWltc2ZfZm1vZGUgPSBwbWMtXHUwMDNlc2Ztb2RlO1xuMjc0ODpcdFx0cHNsID0gcnRubF9kZXJlZmVyZW5jZShwbWMtXHUwMDNlc2ZsaXN0KTtcbjI3NDk6XHRcdGlmICghcHNsKSB7XG4yNzUwOlx0XHRcdGNvdW50ID0gMDtcbjI3NTE6XHRcdH0gZWxzZSB7XG4yNzUyOlx0XHRcdGNvdW50ID0gcHNsLVx1MDAzZXNsX2NvdW50O1xuMjc1MzpcdFx0fVxuMjc1NDpcdFx0Y29weWNvdW50ID0gY291bnQgXHUwMDNjIG1zZi1cdTAwM2VpbXNmX251bXNyYyA/IGNvdW50IDogbXNmLVx1MDAzZWltc2ZfbnVtc3JjO1xuMjc1NTpcdFx0bGVuID0gZmxleF9hcnJheV9zaXplKHBzbCwgc2xfYWRkciwgY29weWNvdW50KTtcbjI3NTY6XHRcdG1zZi1cdTAwM2VpbXNmX251bXNyYyA9IGNvdW50O1xuMjc1NzpcdFx0bXNmX3NpemUgPSBJUF9NU0ZJTFRFUl9TSVpFKGNvcHljb3VudCk7XG4yNzU4Olx0XG4yNzU5Olx0XHQvKiBUaGUgc291cmNlIGxpc3QgaXMgc2l6ZWQgYnkgdGhlIGltc2ZfbnVtc3JjIHRoZSBjYWxsZXIgbGVmdCBpblxuMjc2MDpcdFx0ICogb3B0dmFsLCBub3QgYnkgb3B0bGVuLCB3aGljaCBvbmx5IGhhcyB0byBjb3ZlciB0aGUgZml4ZWQgcGFydC5cbjI3NjE6XHRcdCAqL1xuMjc2MjpcdFx0ZXJyID0gc29ja29wdF9leHBhbmRfb3V0KG9wdCwgbXNmX3NpemUpO1xuMjc2MzpcdFx0aWYgKGVycilcbjI3NjQ6XHRcdFx0cmV0dXJuIGVycjtcbjI3NjU6XHRcbjI3NjY6XHRcdG9wdC1cdTAwM2VvcHRsZW4gPSBtc2Zfc2l6ZTtcbjI3Njc6XHRcdGlmIChjb3B5X3RvX2l0ZXIobXNmLCBJUF9NU0ZJTFRFUl9TSVpFKDApLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9XG4yNzY4Olx0XHQgICAgSVBfTVNGSUxURVJfU0laRSgwKSlcbjI3Njk6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4yNzcwOlx0XHRpZiAobGVuIFx1MDAyNlx1MDAyNiBjb3B5X3RvX2l0ZXIocHNsLVx1MDAzZXNsX2FkZHIsIGxlbiwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXG4yNzcxOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjc3MjpcdFx0cmV0dXJuIDA7XG4yNzczOlx0ZG9uZTpcbjI3NzQ6XHRcdHJldHVybiBlcnI7XG4yNzc1Olx0fVxuMjc3NjpcdFxuMjc3NzpcdGludCBpcF9tY19nc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZ3JvdXBfZmlsdGVyICpnc2YsXG4yNzc4Olx0XHRcdCBzb2NrcHRyX3Qgb3B0dmFsLCBzaXplX3Qgc3Nfb2Zmc2V0KVxuMjc3OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgyNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGlwX3NvY2tnbHVlLmNgKioKCk9rYXksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byBJUHY0IHNvY2tldHMsIGFuZCBJIGhhdmUgYSBmZWVsaW5nIHRoZSBpc3N1ZSBpcyBnb2luZyB0byBiZSBpbiBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AuIE15IGluc3RpbmN0cyBhcmUgdGVsbGluZyBtZSB0byB6ZXJvIGluIGFyb3VuZCBsaW5lIDE3MDAuIEkmIzM5O20gbm90IHN1cmUgKmV4YWN0bHkqIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciB5ZXQsIGJ1dCB0aGF0IGZlZWxzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgaW50cmljYWNpZXMgb2YgaG93IHRoZXNlIHNvY2tldHMgYXJlIGJvdW5kIGFuZCBoYW5kbGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUgYW5kIHdoYXQgY29udGV4dCB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGF0IGxpbmUgcHJvdmlkZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSBmbG93IGFuZCBob3BlZnVsbHkgbmFycm93IGRvd24gdGhlIHBvdGVudGlhbCBjYXVzZSBvZiB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZy4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzAwOlx0XG4xNzAxOlx0XHRpZiAobmVlZHNfcnRubClcbjE3MDI6XHRcdFx0cnRubF9sb2NrKCk7XG4xNzAzOlx0XHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XG4xNzA0Olx0XG4xNzA1Olx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbjE3MDY6XHRcdGNhc2UgSVBfTVNGSUxURVI6XG4xNzA3Olx0XHR7XG4xNzA4Olx0XHRcdHN0cnVjdCBpcF9tc2ZpbHRlciBtc2Y7XG4xNzA5Olx0XHRcdHN0cnVjdCBrdmVjIGt2ZWM7XG4xNzEwOlx0XHRcdHNvY2tvcHRfdCBvcHQ7XG4xNzExOlx0XG4xNzEyOlx0XHRcdGlmIChsZW4gXHUwMDNjIElQX01TRklMVEVSX1NJWkUoMCkpIHtcbjE3MTM6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTcxNDpcdFx0XHRcdGdvdG8gb3V0O1xuMTcxNTpcdFx0XHR9XG4xNzE2Olx0XHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZtc2YsIG9wdHZhbCwgSVBfTVNGSUxURVJfU0laRSgwKSkpIHtcbjE3MTc6XHRcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMTcxODpcdFx0XHRcdGdvdG8gb3V0O1xuMTcxOTpcdFx0XHR9XG4xNzIwOlx0XHRcdGVyciA9IHNvY2twdHJfdG9fc29ja29wdChcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcdTAwMjZrdmVjKTtcbjE3MjE6XHRcdFx0aWYgKGVycilcbjE3MjI6XHRcdFx0XHRnb3RvIG91dDtcbjE3MjM6XHRcbjE3MjQ6XHRcdFx0ZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCBcdTAwMjZtc2YsIFx1MDAyNm9wdCk7XG4xNzI1Olx0XHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXG4xNzI2Olx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjE3Mjc6XHRcdFx0Z290byBvdXQ7XG4xNzI4Olx0XHR9XG4xNzI5Olx0XHRjYXNlIE1DQVNUX01TRklMVEVSOlxuMTczMDpcdFx0XHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcbjE3MzE6XHRcdFx0XHRlcnIgPSBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyKHNrLCBvcHR2YWwsIG9wdGxlbixcbjE3MzI6XHRcdFx0XHRcdFx0XHRcdCAgIGxlbik7XG4xNzMzOlx0XHRcdGVsc2VcbjE3MzQ6XHRcdFx0XHRlcnIgPSBpcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc2ssIG9wdHZhbCwgb3B0bGVuLCBsZW4pO1xuMTczNTpcdFx0XHRnb3RvIG91dDtcbjE3MzY6XHRcdGNhc2UgSVBfUFJPVE9DT0w6XG4xNzM3Olx0XHRcdHZhbCA9IGluZXRfc2soc2spLVx1MDAzZWluZXRfbnVtO1xuMTczODpcdFx0XHRicmVhaztcbjE3Mzk6XHRcdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaWdnaW5nIGludG8gU29ja2V0IE9wdGlvbiBJbnRlcm5hbHMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG5ldHdvcmsgc29ja2V0IG9wdGlvbnMsIGFuZCBJIHdhbnQgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGVtLiBJIHNob3VsZCByZWFsbHkgdGFrZSBhIGxvb2sgYXQgYHNvY2twdHJfdG9fc29ja29wdGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvc29ja2V0LmNgLiBJIG5lZWQgdG8gY2xhcmlmeSBwcmVjaXNlbHkgaG93IHRoYXQgY29udmVyc2lvbiBoYXBwZW5zIGFuZCBob3cgYHNvY2tvcHRfdGAgc3RydWN0dXJlcyBhcmUgbWFuYWdlZCBhbmQgdXNlZCBpbiB0aGUgcHJvY2Vzcy4gSXQmIzM5O3MgdGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHdob2xlIHBpY3R1cmUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhlIHBvaW50ZXJzIGFuZCBkYXRhIGFyZSBwYXNzZWQgYXJvdW5kIOKAkyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBzdWJ0bGUgYnVncyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBjYW4gaGlkZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIHJldmVhbHMgYW55IGludGVyZXN0aW5nIGRlc2lnbiBjaG9pY2VzIG9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQzMDpcdFxuMjQzMTpcdElORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoYm9vbCB0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0KGludCBsZXZlbCxcbjI0MzI6XHRcdFx0XHRcdFx0XHRcdCBpbnQgb3B0bmFtZSkpO1xuMjQzMzpcdFxuMjQzNDpcdC8qXG4yNDM1Olx0ICogSW5pdGlhbGl6ZSBhIHNvY2tvcHRfdCBmcm9tIHNvY2twdHIgb3B0dmFsL29wdGxlbiwgc2V0dGluZyB1cCBpb3ZfaXRlclxuMjQzNjpcdCAqIGZvciBib3RoIGlucHV0IGFuZCBvdXRwdXQgZGlyZWN0aW9ucy5cbjI0Mzc6XHQgKiBJdCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCBib3RoIGlvdiBwb2ludHMgdG8gdGhlIHNhbWUgZGF0YSwgYnV0LFxuMjQzODpcdCAqIC5pdGVyX2luIGlzIHJlYWQtb25seSBhbmQgLml0ZXJfb3V0IGlzIHdyaXRlLW9ubHkgYnkgdGhlIHByb3RvY29sIGNhbGxiYWNrc1xuMjQzOTpcdCAqL1xuMjQ0MDpcdGludCBzb2NrcHRyX3RvX3NvY2tvcHQoc29ja29wdF90ICpvcHQsIHNvY2twdHJfdCBvcHR2YWwsXG4yNDQxOlx0XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBzdHJ1Y3Qga3ZlYyAqa3ZlYylcbjI0NDI6XHR7XG4yNDQzOlx0XHRpbnQga29wdGxlbjtcbjI0NDQ6XHRcbjI0NDU6XHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZrb3B0bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcbjI0NDY6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4yNDQ3Olx0XG4yNDQ4Olx0XHRpZiAoa29wdGxlbiBcdTAwM2MgMClcbjI0NDk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNDUwOlx0XG4yNDUxOlx0XHRpZiAob3B0dmFsLmlzX2tlcm5lbCkge1xuMjQ1MjpcdFx0XHRrdmVjLVx1MDAzZWlvdl9iYXNlID0gb3B0dmFsLmtlcm5lbDtcbjI0NTM6XHRcdFx0a3ZlYy1cdTAwM2Vpb3ZfbGVuID0ga29wdGxlbjtcbjI0NTQ6XHRcdFx0aW92X2l0ZXJfa3ZlYyhcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQsIElURVJfREVTVCwga3ZlYywgMSwga29wdGxlbik7XG4yNDU1Olx0XHRcdGlvdl9pdGVyX2t2ZWMoXHUwMDI2b3B0LVx1MDAzZWl0ZXJfaW4sIElURVJfU09VUkNFLCBrdmVjLCAxLCBrb3B0bGVuKTtcbjI0NTY6XHRcdH0gZWxzZSB7XG4yNDU3Olx0XHRcdGlvdl9pdGVyX3VidWYoXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0LCBJVEVSX0RFU1QsIG9wdHZhbC51c2VyLCBrb3B0bGVuKTtcbjI0NTg6XHRcdFx0aW92X2l0ZXJfdWJ1ZihcdTAwMjZvcHQtXHUwMDNlaXRlcl9pbiwgSVRFUl9TT1VSQ0UsIG9wdHZhbC51c2VyLFxuMjQ1OTpcdFx0XHRcdCAgICAgIGtvcHRsZW4pO1xuMjQ2MDpcdFx0fVxuMjQ2MTpcdFx0b3B0LVx1MDAzZW9wdGxlbiA9IGtvcHRsZW47XG4yNDYyOlx0XG4yNDYzOlx0XHRyZXR1cm4gMDtcbjI0NjQ6XHR9XG4yNDY1Olx0XG4yNDY2Olx0aW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxuMjQ2NzpcdFx0XHQgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXG4yNDY4Olx0e1xuMjQ2OTpcdFx0aW50IG1heF9vcHRsZW4gX19tYXliZV91bnVzZWQgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTY0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYHN0cnVjdCBpcF9tc2ZpbHRlcmAgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgYSByZWZyZXNoZXIgb24gdGhlIGBzdHJ1Y3QgaXBfbXNmaWx0ZXJgLiBJdCYjMzk7cyBhIGtleSBzdHJ1Y3R1cmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggSUdNUC9NTEQgYW5kIG11bHRpY2FzdCB0cmFmZmljIG1hbmFnZW1lbnQgaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyAqYWN0dWFsbHkqIGluIHRoZXJlLCBob3cgaXQmIzM5O3Mgc3RydWN0dXJlZCwgYW5kIHdoYXQgZWxlbWVudHMgYXJlIGNyaXRpY2FsIGZvciBmaWx0ZXJpbmcuIEkgd2FudCB0byBzZWUgd2hpY2ggZmllbGRzIGhvbGQgdGhlIGdyb3VwIGFkZHJlc3MsIHNvdXJjZSBhZGRyZXNzZXMgKGlmIGFueSksIGFuZCBhbnkgb3RoZXIgYXNzb2NpYXRlZCBtZXRhZGF0YSB0aGF0IGRpY3RhdGVzIGhvdyB0cmFmZmljIHdpbGwgYmUgaGFuZGxlZC4gSSBhbSBzdXJlIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoZSBzdHJ1Y3R1cmUgYWxpZ25zIHdpdGggdGhlIGN1cnJlbnQgc3RhbmRhcmRzIGZvciBJR01QdjMgb3IgTUxEdjIsIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGZpZWxkIHZhbHVlcyBhcmUgd2l0aCByZWdhcmQgdG8gdGhlIHBhcnRpY3VsYXIgbXVsdGljYXN0IHN0YXRlIG9yIHRoZSBmaWx0ZXIgbW9kZS4gTXkgZ29hbCBoZXJlIGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgY29yZSBwaWVjZXMgdGhhdCBhcmUgdXNlZCB0byByZXByZXNlbnQgbXVsdGljYXN0IGZpbHRlcmluZyBydWxlcyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBkYXRhIHN0cnVjdHVyZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpbmZvcm1hdGlvbiByZWxldmFudCB0byBqb2lucywgbGVhdmVzLCBzb3VyY2VzLCBhbmQgcGVyaGFwcyBzb21lIGludGVybmFsIGZsYWdzIHRoYXQgbWlnaHQgZGljdGF0ZSBiZWhhdmlvciBsaWtlIGluY2x1ZGUvZXhjbHVkZSBsaXN0cy4gVW5kZXJzdGFuZGluZyB0aGUgZGVmaW5pdGlvbiB3aWxsIGFsbG93IG1lIHRvIGltbWVkaWF0ZWx5IGlkZW50aWZ5IHBvdGVudGlhbCBpc3N1ZXMgaW4gcmVsYXRlZCBjb2RlIG9yIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2sgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBpcF9tc2ZpbHRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lnbXAuaD0yNzM9ZXh0ZXJuIGludCBpcF9tY19zb3VyY2UoaW50IGFkZCwgaW50IG9tb2RlLCBzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL2xpbnV4L2lnbXAuaC0yNzQtXHRcdHN0cnVjdCBpcF9tcmVxX3NvdXJjZSAqbXJlcXMsIGludCBpZmluZGV4KTtcbmluY2x1ZGUvbGludXgvaWdtcC5oOjI3NTpleHRlcm4gaW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsaW50IGlmaW5kZXgpO1xuaW5jbHVkZS9saW51eC9pZ21wLmg6Mjc2OmV4dGVybiBpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXG5pbmNsdWRlL2xpbnV4L2lnbXAuaC0yNzctXHRcdFx0c29ja29wdF90ICpvcHQpO1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9pbi5oPTE5Mz1zdHJ1Y3QgaXBfbXJlcV9zb3VyY2Uge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9pbi5oLTE5OC1cbmluY2x1ZGUvdWFwaS9saW51eC9pbi5oOjE5OTpzdHJ1Y3QgaXBfbXNmaWx0ZXIge1xuaW5jbHVkZS91YXBpL2xpbnV4L2luLmgtMjAwLVx0X19iZTMyXHRcdGltc2ZfbXVsdGlhZGRyO1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9pbi5oLTIxMC0jZGVmaW5lIElQX01TRklMVEVSX1NJWkUobnVtc3JjKSBcXFxuaW5jbHVkZS91YXBpL2xpbnV4L2luLmg6MjExOlx0KHNpemVvZihzdHJ1Y3QgaXBfbXNmaWx0ZXIpIC0gc2l6ZW9mKF9fdTMyKSBcXFxuaW5jbHVkZS91YXBpL2xpbnV4L2luLmgtMjEyLVx0JiM0MzsgKG51bXNyYykgKiBzaXplb2YoX191MzIpKVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0yNDgzPWludCBpcF9tY19zb3VyY2UoaW50IGFkZCwgaW50IG9tb2RlLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yNjIxLVxubmV0L2lwdjQvaWdtcC5jOjI2MjI6aW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIGludCBpZmluZGV4KVxubmV0L2lwdjQvaWdtcC5jLTI2MjMte1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0yNzEyLVxubmV0L2lwdjQvaWdtcC5jOjI3MTM6aW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBzb2Nrb3B0X3QgKm9wdClcbm5ldC9pcHY0L2lnbXAuYy0yNzE0LXtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTY2Mj1zdGF0aWMgaW50IHNldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNjY2LXtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6NjY3Olx0c3RydWN0IGlwX21zZmlsdGVyICptc2Y7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTY2OC1cdHN0cnVjdCBzb2NrYWRkcl9pbiAqcHNpbjtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTg5Mj1pbnQgZG9faXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMjU0LVx0e1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxMjU1Olx0XHRzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZjtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTI1Ni1cbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE1MDc9aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTcwNy1cdHtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTcwODpcdFx0c3RydWN0IGlwX21zZmlsdGVyIG1zZjtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTcwOS1cdFx0c3RydWN0IGt2ZWMga3ZlYztcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW4uaD0xOTM9c3RydWN0IGlwX21yZXFfc291cmNlIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW4uaC0xOTgtXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW4uaDoxOTk6c3RydWN0IGlwX21zZmlsdGVyIHtcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oLTIwMC1cdF9fYmUzMlx0XHRpbXNmX211bHRpYWRkcjtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaW4uaC0yMTAtI2RlZmluZSBJUF9NU0ZJTFRFUl9TSVpFKG51bXNyYykgXFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oOjIxMTpcdChzaXplb2Yoc3RydWN0IGlwX21zZmlsdGVyKSAtIHNpemVvZihfX3UzMikgXFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oLTIxMi1cdCYjNDM7IChudW1zcmMpICogc2l6ZW9mKF9fdTMyKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk2MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBIZWFkZXJzKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBNeSBpbnR1aXRpb24mIzM5O3MgdGVsbGluZyBtZSB0byBsb29rIGF0IGBpbmNsdWRlL3VhcGkvbGludXgvaW4uaGAgYW5kIHNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIGFyb3VuZCBsaW5lIDE5OS4gSXQmIzM5O3MgdXN1YWxseSB0aGUgZmlyc3QgcGxhY2UgSSBzdGFydCBmb3IgbG93LWxldmVsIHNvY2tldCBvcHRpb25zIG9yIGRlZmluaXRpb25zLiBJIHN1c3BlY3QgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIHJlbGV2YW50IHRvIG15IGN1cnJlbnQgZGVidWdnaW5nIG9yIGludmVzdGlnYXRpb24gbHVya2luZyBpbiB0aGF0IHZpY2luaXR5LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGhlYWRlciwgc28gY2hhbmNlcyBhcmUgd2hhdGV2ZXIgSSBuZWVkIGlzIGRlY2xhcmVkIGluIHRoYXQgZmlsZS4gSSBleHBlY3QgdG8gZmluZCBhIG1hY3JvIG9yIGVudW0gb3Igc3RydWN0IGRlZmluaXRpb24gdGhhdCByZWxhdGVzIHRvIHdoYXRldmVyIEkmIzM5O20gdHJvdWJsZXNob290aW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvaW4uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTk1Olx0XHRfX2JlMzJcdFx0aW1yX2ludGVyZmFjZTtcbiAxOTY6XHRcdF9fYmUzMlx0XHRpbXJfc291cmNlYWRkcjtcbiAxOTc6XHR9O1xuIDE5ODpcdFxuIDE5OTpcdHN0cnVjdCBpcF9tc2ZpbHRlciB7XG4gMjAwOlx0XHRfX2JlMzJcdFx0aW1zZl9tdWx0aWFkZHI7XG4gMjAxOlx0XHRfX2JlMzJcdFx0aW1zZl9pbnRlcmZhY2U7XG4gMjAyOlx0XHRfX3UzMlx0XHRpbXNmX2Ztb2RlO1xuIDIwMzpcdFx0X191MzJcdFx0aW1zZl9udW1zcmM7XG4gMjA0Olx0XHR1bmlvbiB7XG4gMjA1Olx0XHRcdF9fYmUzMlx0XHRpbXNmX3NsaXN0WzFdO1xuIDIwNjpcdFx0XHRfX0RFQ0xBUkVfRkxFWF9BUlJBWShfX2JlMzIsIGltc2Zfc2xpc3RfZmxleCk7XG4gMjA3Olx0XHR9O1xuIDIwODpcdH07XG4gMjA5Olx0XG4gMjEwOlx0I2RlZmluZSBJUF9NU0ZJTFRFUl9TSVpFKG51bXNyYykgXFxcbiAyMTE6XHRcdChzaXplb2Yoc3RydWN0IGlwX21zZmlsdGVyKSAtIHNpemVvZihfX3UzMikgXFxcbiAyMTI6XHRcdCYjNDM7IChudW1zcmMpICogc2l6ZW9mKF9fdTMyKSlcbiAyMTM6XHRcbiAyMTQ6XHRzdHJ1Y3QgZ3JvdXBfcmVxIHtcbiAyMTU6XHRcdF9fdTMyXHRcdFx0XHQgZ3JfaW50ZXJmYWNlO1x0LyogaW50ZXJmYWNlIGluZGV4ICovXG4gMjE2Olx0XHRzdHJ1Y3QgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSBncl9ncm91cDtcdC8qIGdyb3VwIGFkZHJlc3MgKi9cbiAyMTc6XHR9O1xuIDIxODpcdFxuIDIxOTpcdHN0cnVjdCBncm91cF9zb3VyY2VfcmVxIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU2MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDExMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgSVBfTVNGSUxURVJgIFNvY2tldCBPcHRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgc3RydWN0IGlwX21zZmlsdGVyYCBhbmQgaG93IGl0JiMzOTtzIHVzZWQgaW4gdGhlIGtlcm5lbCYjMzk7cyBgSVBfTVNGSUxURVJgIHNvY2tldCBvcHRpb24uIE15IHByaW1hcnkgY29uY2VybiBpcyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB1c2VyLXNwYWNlIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKRmlyc3QsIEkgc2VlIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmOiBgaW1zZl9tdWx0aWFkZHJgLCBgaW1zZl9pbnRlcmZhY2VgLCBgaW1zZl9mbW9kZWAsIGBpbXNmX251bXNyY2AsIGFuZCBgaW1zZl9zbGlzdGAvYGltc2Zfc2xpc3RfZmxleGAuIFRoZSBzaXplIGNhbGN1bGF0aW9uIHVzaW5nIGBJUF9NU0ZJTFRFUl9TSVpFKDApYCBnaXZlcyBtZSBhIGJhc2Ugc2l6ZS4gVGhlbiwgYGRvX2lwX2dldHNvY2tvcHRgIGhhbmRsZXMgdGhlIGBJUF9NU0ZJTFRFUmAgY2FzZS4gSXQgY29waWVzIHRoZSBpbml0aWFsIHBhcnQgb2YgdGhlIGBtc2ZgIHN0cnVjdCBmcm9tIHVzZXItc3BhY2UgdXNpbmcgYGNvcHlfZnJvbV9zb2NrcHRyYC4KClRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoZSBjYWxsIHRvIGBpcF9tY19tc2ZnZXRgLiBIZXJlJiMzOTtzIHdoZXJlIHRoZSB1c2VyLXByb3ZpZGVkIGRhdGEgZGlyZWN0bHkgYWZmZWN0cyBrZXJuZWwgYmVoYXZpb3IuIGBtc2ZgJiMzOTtzIGluaXRpYWwgZmllbGRzIGFyZSBwb3B1bGF0ZWQgZnJvbSB1c2VyLXNwYWNlLiAgYGlwX21jX21zZmdldGAgdGhlbiByZWFkcyBgbXNmLmltc2ZfZm1vZGVgIGFuZCBgbXNmLmltc2ZfbnVtc3JjYC4gVGhpcyBpcyB0aGUgdXNlci1wcm92aWRlZCBjb3VudCwgYW5kIGBtc2Zfc2l6ZWAgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGlzIGNvdW50LCBlc3NlbnRpYWxseSBkZXRlcm1pbmluZyBob3cgbXVjaCBkYXRhIGlzIGJlaW5nIHRyYW5zZmVycmVkIGJhY2sgdG8gdXNlciBzcGFjZS4gIFRoZSBpbnRlcmVzdGluZyBwb2ludCBpcyB0aGF0IGBtc2YtJmd0O2ltc2ZfbnVtc3JjYCBpcyBtb2RpZmllZCB0byBgY291bnRgLCBhZnRlciBgY29weWNvdW50YCBpcyBjYWxjdWxhdGVkLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgc29ja29wdF9leHBhbmRfb3V0YC4gSXQmIzM5O3MgdXNlZCB0byBncm93IHRoZSB1c2VyLXNwYWNlIGJ1ZmZlciBgb3B0dmFsYCB3aGVuIHJlcGx5aW5nIHdpdGggdGhlIHNvY2tldCBvcHRpb24gZGF0YS4gIFRoZSBrZXkgcGFydCBpcyB0aGUgY29tbWVudCBhYm91dCBncm93aW5nIHRoZSBidWZmZXIgKmJleW9uZCogdGhlIGluaXRpYWwgYG9wdGxlbmAgcGFzc2VkIGJ5IHRoZSB1c2VyLiBUaGUgYHNvY2tvcHRfZXhwYW5kX291dGAgZnVuY3Rpb24gcmUtYW5jaG9ycyB0aGUgaXRlcmF0b3IgYXQgdGhlIGJlZ2lubmluZyBvZiBgb3B0dmFsYCB1cCB0byBzaXplLCB1c2luZyBgaW92X2l0ZXJfdWJ1ZmAgb24gYG9wdC0mZ3Q7aXRlcl9vdXQudWJ1ZmAuIFRoaXMgbWVhbnMgdGhhdCB1c2VyLXNwYWNlIGRhdGEgY2FuIGluZmx1ZW5jZSB0aGUgc2l6ZSBvZiBrZXJuZWwgd3JpdGVzIHRvIHVzZXIgc3BhY2UuIEl0IHNlZW1zIHRoZSBpbnRlbnRpb24gaGVyZSBpcyB0byBhbGxvdyB0aGUga2VybmVsIHRvIHdyaXRlIHBhc3QgYG9wdGxlbmAgaW4gYSBjb250cm9sbGVkIHdheSwgYnV0IGl0IGFsc28gY3JlYXRlcyB0aGUgcG90ZW50aWFsIGZvciBzb21lIGludGVyZXN0aW5nIHNpZGUtZWZmZWN0cyB0aGF0IG5lZWQgY2FyZWZ1bCByZXZpZXcuIFRoZSBjb2RlIGRlcGVuZHMgb24gdGhlIGJ1ZmZlciBiZWluZyBhIHVzZXIgYnVmZmVyIGFzIG5vdGVkLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgb3B0LSZndDtpdGVyX291dC51YnVmYCBpcyBwb2ludGluZy4gYHNvY2twdHJfdG9fc29ja29wdGAgaW5pdGlhbGl6ZXMgYG9wdC0mZ3Q7aXRlcl9vdXQudWJ1ZmAgd2l0aCBgb3B0dmFsLnVzZXJgLiBUaGlzIHRlbGxzIG1lIHRoYXQgdGhlIG91dHB1dCBidWZmZXIgaXMgdGhlIHVzZXItcHJvdmlkZWQgYG9wdHZhbGAgYnVmZmVyLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBhIGNyYWZ0ZWQgdXNlci1zcGFjZSBpbnB1dCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGEgYnVmZmVyIG92ZXJmbG93IG9yIGluZm9ybWF0aW9uIGxlYWssIGlmIHRoZXJlJiMzOTtzIGluc3VmZmljaWVudCB2YWxpZGF0aW9uIGFyb3VuZCBgbXNmX3NpemVgIGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGBvcHRsZW5gLiBUaGUgY29tbWVudCBhYm91dCB0aGUgaW50ZW5kZWQgdXNlIG9mIGdyb3dpbmcgdGhlIGJ1ZmZlciBpcyBhbHNvIHNvbWV0aGluZyB0aGF0IG5lZWRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBpbiB0ZXJtcyBvZiBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIHRoZSBjb2RlIHBhdGhzIGFuZCBpZGVudGlmeSB3aGF0IHRoZSB1cHBlciBib3VuZHMgYXJlIGFuZCBob3cgdGhleSBhcmUgZW5mb3JjZWQuIFRvIGRvIHRoaXMsIEkgd2lsbCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgY2FsbGVycyBvZiBgaXBfbWNfbXNmZ2V0YCwgYHNvY2twdHJfdG9fc29ja29wdGAsIGFuZCBgc29ja29wdF9leHBhbmRfb3V0YCB1c2luZyBhIGdyZXAgc2VhcmNoLiBUaGlzIHNob3VsZCB0ZWxsIG1lIGlmIHRoZXJlIGFyZSBvdGhlciBwbGFjZXMgaW4gdGhlIGtlcm5lbCB0aGF0IGJlaGF2ZSBzaW1pbGFybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX21jX21zZmdldHxzb2NrcHRyX3RvX3NvY2tvcHR8c29ja29wdF9leHBhbmRfb3V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaWdtcC5oPTI3NT1leHRlcm4gaW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsaW50IGlmaW5kZXgpO1xuaW5jbHVkZS9saW51eC9pZ21wLmg6Mjc2OmV4dGVybiBpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXG5pbmNsdWRlL2xpbnV4L2lnbXAuaC0yNzctXHRcdFx0c29ja29wdF90ICpvcHQpO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0Lmg9NTY9c3RhdGljIGlubGluZSBpbnQgc29ja29wdF9pbml0X3VzZXIoc29ja29wdF90ICpvcHQsIGNoYXIgX191c2VyICpvcHR2YWwsXG4tLVxuaW5jbHVkZS9saW51eC9uZXQuaC04MS0gKi9cbmluY2x1ZGUvbGludXgvbmV0Lmg6ODI6c3RhdGljIGlubGluZSBpbnQgc29ja29wdF9leHBhbmRfb3V0KHNvY2tvcHRfdCAqb3B0LCBzaXplX3Qgc2l6ZSlcbmluY2x1ZGUvbGludXgvbmV0LmgtODMte1xuLS1cbmluY2x1ZGUvbGludXgvbmV0LmgtOTQtXG5pbmNsdWRlL2xpbnV4L25ldC5oOjk1OmludCBzb2NrcHRyX3RvX3NvY2tvcHQoc29ja29wdF90ICpvcHQsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4sXG5pbmNsdWRlL2xpbnV4L25ldC5oLTk2LVx0XHQgICAgICAgc3RydWN0IGt2ZWMgKmt2ZWMpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0yNjIyPWludCBpcF9tY19tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBpbnQgaWZpbmRleClcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjcxMi1cbm5ldC9pcHY0L2lnbXAuYzoyNzEzOmludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgc29ja29wdF90ICpvcHQpXG5uZXQvaXB2NC9pZ21wLmMtMjcxNC17XG4tLVxubmV0L2lwdjQvaWdtcC5jLTI3NjEtXHQgKi9cbm5ldC9pcHY0L2lnbXAuYzoyNzYyOlx0ZXJyID0gc29ja29wdF9leHBhbmRfb3V0KG9wdCwgbXNmX3NpemUpO1xubmV0L2lwdjQvaWdtcC5jLTI3NjMtXHRpZiAoZXJyKVxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM9MTUwNz1pbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzE5LVx0XHR9XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE3MjA6XHRcdGVyciA9IHNvY2twdHJfdG9fc29ja29wdChcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcdTAwMjZrdmVjKTtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTcyMS1cdFx0aWYgKGVycilcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3MjMtXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE3MjQ6XHRcdGVyciA9IGlwX21jX21zZmdldChzaywgXHUwMDI2bXNmLCBcdTAwMjZvcHQpO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzI1LVx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2b3B0Lm9wdGxlbiwgc2l6ZW9mKGludCkpKVxuLS1cbm5ldC9zb2NrZXQuYz0yNDMxPUlORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoYm9vbCB0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0KGludCBsZXZlbCxcbi0tXG5uZXQvc29ja2V0LmMtMjQzOS0gKi9cbm5ldC9zb2NrZXQuYzoyNDQwOmludCBzb2NrcHRyX3RvX3NvY2tvcHQoc29ja29wdF90ICpvcHQsIHNvY2twdHJfdCBvcHR2YWwsXG5uZXQvc29ja2V0LmMtMjQ0MS1cdFx0ICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIHN0cnVjdCBrdmVjICprdmVjKVxuLS1cbm5ldC9zb2NrZXQuYz0yNDY2PWludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbi0tXG5uZXQvc29ja2V0LmMtMjQ4NS1cdH0gZWxzZSBpZiAob3BzLVx1MDAzZWdldHNvY2tvcHRfaXRlcikge1xubmV0L3NvY2tldC5jOjI0ODY6XHRcdGVyciA9IHNvY2twdHJfdG9fc29ja29wdChcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcdTAwMjZrdmVjKTtcbm5ldC9zb2NrZXQuYy0yNDg3LVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIENhbGwgUGF0aCBvZiBgaXBfbWNfbXNmZ2V0YCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGlwX21jX21zZmdldGAgaXMgb25seSBjYWxsZWQgd2l0aGluIGBkb19pcF9nZXRzb2Nrb3B0YC4gVGhpcyBzdWdnZXN0cyBhIHRhcmdldGVkIGFyZWEgdG8gaW52ZXN0aWdhdGUsIHNwZWNpZmljYWxseSBhcm91bmQgc29ja2V0IG9wdGlvbiByZXRyaWV2YWwgcmVsYXRlZCB0byBJUCBtdWx0aWNhc3QuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IGBpcF9tY19tc2ZnZXRgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgc29ja29wdF90YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBzb2Nrb3B0X3RgIGlzIGRlZmluZWQuIFRoaXMgaXMgbGlrZWx5IGEgc3RydWN0dXJlIG9yIHR5cGUgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbCB0byBob3cgc29ja2V0IG9wdGlvbnMgYXJlIGhhbmRsZWQuIEEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSBzdWdnZXN0cyBJIHNob3VsZCBmaW5kIHRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L25ldC5oYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdCAqXG4gIDQxOlx0ICogVGhlIG9wdGxlbiBmaWVsZCBhbGxvd3MgY2FsbGJhY2tzIHRvIHJldHVybiBhIHNwZWNpZmljIGxlbmd0aCB2YWx1ZVxuICA0MjpcdCAqIGluZGVwZW5kZW50IG9mIHRoZSBieXRlcyB3cml0dGVuIHZpYSBjb3B5X3RvX2l0ZXIoKS5cbiAgNDM6XHQgKi9cbiAgNDQ6XHR0eXBlZGVmIHN0cnVjdCBzb2Nrb3B0IHtcbiAgNDU6XHRcdHN0cnVjdCBpb3ZfaXRlciBpdGVyX2luO1xuICA0NjpcdFx0c3RydWN0IGlvdl9pdGVyIGl0ZXJfb3V0O1xuICA0NzpcdFx0aW50IG9wdGxlbjtcbiAgNDg6XHR9IHNvY2tvcHRfdDtcbiAgNDk6XHRcbiAgNTA6XHQvKlxuICA1MTpcdCAqIEluaXRpYWxpemUgYSB1c2VyLWJhY2tlZCBzb2Nrb3B0X3QgZnJvbSB0aGUgKG9wdHZhbCwgb3B0bGVuKSBfX3VzZXIgcGFpciBvZlxuICA1MjpcdCAqIGEgZ2V0c29ja29wdCgpIGNhbGxiYWNrLiBVc2VkIGJ5IHRyYW5zaXRpb25hbCBfX3VzZXIgZ2V0c29ja29wdCB3cmFwcGVyc1xuICA1MzpcdCAqIHdoaWxlIHRoZSBwcm90by1sYXllciBjYWxsYmFja3MgYXJlIGNvbnZlcnRlZCB0byB0YWtlIGEgc29ja29wdF90OyB0aGVcbiAgNTQ6XHQgKiBjYWxsZXIgd3JpdGVzIG9wdC1cdTAwM2VvcHRsZW4gYmFjayB0byB0aGUgdXNlciBvcHRsZW4gYWZ0ZXIgdGhlIGNhbGxiYWNrLlxuICA1NTpcdCAqL1xuICA1NjpcdHN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfaW5pdF91c2VyKHNvY2tvcHRfdCAqb3B0LCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuICA1NzpcdFx0XHRcdFx0ICAgIGludCBfX3VzZXIgKm9wdGxlbilcbiAgNTg6XHR7XG4gIDU5Olx0XHRpbnQgbGVuO1xuICA2MDpcdFxuICA2MTpcdFx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcbiAgNjI6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gIDYzOlx0XHRpZiAobGVuIFx1MDAzYyAwKVxuICA2NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgNjU6XHRcbiAgNjY6XHRcdGlvdl9pdGVyX3VidWYoXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0LCBJVEVSX0RFU1QsIG9wdHZhbCwgbGVuKTtcbiAgNjc6XHRcdGlvdl9pdGVyX3VidWYoXHUwMDI2b3B0LVx1MDAzZWl0ZXJfaW4sIElURVJfU09VUkNFLCBvcHR2YWwsIGxlbik7XG4gIDY4Olx0XHRvcHQtXHUwMDNlb3B0bGVuID0gbGVuO1xuICA2OTpcdFxuICA3MDpcdFx0cmV0dXJuIDA7XG4gIDcxOlx0fVxuICA3MjpcdFxuICA3MzpcdC8qXG4gIDc0Olx0ICogR3JvdyBvcHR2YWwgdG8gQHNpemUsIGZvciB0aGUgb3B0aW9ucyB3aG9zZSByZXBseSBpcyBzaXplZCBieSBhIGNvdW50IHRoZVxuICA3NTpcdCAqIGNhbGxlciBsZWZ0IGluIG9wdHZhbCByYXRoZXIgdGhhbiBieSBvcHRsZW4uIFRob3NlIHdyaXRlIHBhc3Qgb3B0bGVuIHRvZGF5XG4gIDc2Olx0ICogYW5kIHVzZXJzcGFjZSByZWxpZXMgb24gaXQuXG4gIDc3Olx0ICpcbiAgNzg6XHQgKiBDYWxsIGl0IGJlZm9yZSB3cml0aW5nIHRocm91Z2ggb3B0LVx1MDAzZWl0ZXJfb3V0OiBpdCByZS1hbmNob3JzIHRoZSBpdGVyYXRvciBhdFxuICA3OTpcdCAqIHRoZSBoZWFkIG9mIG9wdHZhbC4gT25seSBhIHVzZXIgYnVmZmVyIGNhbiBiZSBsb25nZXIgdGhhbiB0aGUgb3B0bGVuIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBTb2NrZXQgT3B0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgYSByZWZyZXNoZXIgb24gdGhlIG92ZXJhbGwgYGdldHNvY2tvcHRgIGZsb3csIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gVGltZSB0byBnbyByaWdodCB0byB0aGUgc291cmNlIGFuZCBleGFtaW5lIGBkb19zb2NrX2dldHNvY2tvcHRgIHdpdGhpbiBgbmV0L3NvY2tldC5jYC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgcmV0cmlldmFsIG9mIHNvY2tldCBvcHRpb25zLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBudWFuY2VzIG9mIGRpZmZlcmVudCBzb2NrZXQgZmFtaWxpZXMgYW5kIG9wdGlvbiBsZXZlbHPigJRgU09MX1NPQ0tFVGAsIGBJUFBST1RPX1RDUGAsIGV0Yy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGxvY2tpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBvdmVyYWxsIGxvZ2ljIGZvciByZXRyaWV2aW5nIGFuZCByZXR1cm5pbmcgdGhlIHJlcXVlc3RlZCBzb2NrZXQgb3B0aW9uIGRhdGEuIFRoZSBnb2FsIGlzIHRvIHNvbGlkaWZ5IG15IG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBjcml0aWNhbCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgc3dpdGNoIHN0YXRlbWVudCBoYW5kbGluZyB2YXJpb3VzIG9wdGlvbnMgYW5kIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgY29weWluZyBhbmQgc2VjdXJpdHkgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ2NTpcdFxuMjQ2NjpcdGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcbjI0Njc6XHRcdFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxuMjQ2ODpcdHtcbjI0Njk6XHRcdGludCBtYXhfb3B0bGVuIF9fbWF5YmVfdW51c2VkID0gMDtcbjI0NzA6XHRcdGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9wcztcbjI0NzE6XHRcdHN0cnVjdCBrdmVjIGt2ZWM7XG4yNDcyOlx0XHRzb2Nrb3B0X3Qgb3B0O1xuMjQ3MzpcdFx0aW50IGVycjtcbjI0NzQ6XHRcbjI0NzU6XHRcdGVyciA9IHNlY3VyaXR5X3NvY2tldF9nZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lKTtcbjI0NzY6XHRcdGlmIChlcnIpXG4yNDc3Olx0XHRcdHJldHVybiBlcnI7XG4yNDc4Olx0XG4yNDc5Olx0XHRpZiAoIWNvbXBhdClcbjI0ODA6XHRcdFx0Y29weV9mcm9tX3NvY2twdHIoXHUwMDI2bWF4X29wdGxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSk7XG4yNDgxOlx0XG4yNDgyOlx0XHRvcHMgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpO1xuMjQ4MzpcdFx0aWYgKGxldmVsID09IFNPTF9TT0NLRVQpIHtcbjI0ODQ6XHRcdFx0ZXJyID0gc2tfZ2V0c29ja29wdChzb2NrLVx1MDAzZXNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuMjQ4NTpcdFx0fSBlbHNlIGlmIChvcHMtXHUwMDNlZ2V0c29ja29wdF9pdGVyKSB7XG4yNDg2Olx0XHRcdGVyciA9IHNvY2twdHJfdG9fc29ja29wdChcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcdTAwMjZrdmVjKTtcbjI0ODc6XHRcdFx0aWYgKGVycilcbjI0ODg6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjQ4OTpcdFxuMjQ5MDpcdFx0XHRlcnIgPSBvcHMtXHUwMDNlZ2V0c29ja29wdF9pdGVyKHNvY2ssIGxldmVsLCBvcHRuYW1lLCBcdTAwMjZvcHQpO1xuMjQ5MTpcdFxuMjQ5MjpcdFx0XHQvKiBBbHdheXMgd3JpdGUgYmFjayBvcHRsZW4sIGV2ZW4gb24gZmFpbHVyZS4gU29tZSBwcm90b2NvbHNcbjI0OTM6XHRcdFx0ICogKGUuZy4gQ0FOIHJhdykgcmV0dXJuIC1FUkFOR0UgYW5kIHNldCBvcHRsZW4gdG8gdGhlXG4yNDk0Olx0XHRcdCAqIHJlcXVpcmVkIGJ1ZmZlciBzaXplIHNvIHVzZXJzcGFjZSBjYW4gZGlzY292ZXIgaXQuXG4yNDk1Olx0XHRcdCAqL1xuMjQ5NjpcdFx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2b3B0Lm9wdGxlbiwgc2l6ZW9mKGludCkpKVxuMjQ5NzpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjQ5ODpcdFx0fSBlbHNlIGlmIChvcHMtXHUwMDNlZ2V0c29ja29wdCkge1xuMjQ5OTpcdFx0XHRpZiAoV0FSTl9PTkNFKG9wdHZhbC5pc19rZXJuZWwgfHwgb3B0bGVuLmlzX2tlcm5lbCxcbjI1MDA6XHRcdFx0XHQgICAgICBcJiMzNDtJbnZhbGlkIGFyZ3VtZW50IHR5cGVcJiMzNDspKVxuMjUwMTpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjI1MDI6XHRcbjI1MDM6XHRcdFx0ZXJyID0gb3BzLVx1MDAzZWdldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbC51c2VyLFxuMjUwNDpcdFx0XHRcdFx0ICAgICAgb3B0bGVuLnVzZXIpO1xuMjUwNTpcdFx0fSBlbHNlIHtcbjI1MDY6XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4yNTA3Olx0XHR9XG4yNTA4Olx0XG4yNTA5Olx0XHRpZiAoIWNvbXBhdClcbjI1MTA6XHRcdFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19HRVRTT0NLT1BUKHNvY2stXHUwMDNlc2ssIGxldmVsLCBvcHRuYW1lLFxuMjUxMTpcdFx0XHRcdFx0XHRcdCAgICAgb3B0dmFsLCBvcHRsZW4sIG1heF9vcHRsZW4sXG4yNTEyOlx0XHRcdFx0XHRcdFx0ICAgICBlcnIpO1xuMjUxMzpcdFxuMjUxNDpcdFx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMTgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUF9NU0ZJTFRFUiBHZXRzb2Nrb3B0IEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AgY29kZSBzbmlwcGV0LCBzcGVjaWZpY2FsbHkgdGhlIGBkb19pcF9nZXRzb2Nrb3B0YCBmdW5jdGlvbiBhbmQgdGhlIGBJUF9NU0ZJTFRFUmAgY2FzZS4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGhhbmRsZWQsIGFuZCBJIHdhbnQgdG8gYmUgKmNlcnRhaW4qIHRoZXJlIGFyZSBubyBtZW1vcnkgc2FmZXR5IGlzc3VlcyBvciBvdGhlciB2dWxuZXJhYmlsaXRpZXMuCgpSaWdodCwgdGhlIGNvcmUgb2YgdGhlIGBJUF9NU0ZJTFRFUmAgaGFuZGxpbmcgc2VlbXMgdG8gYmUgaGVyZS4gSSBzZWUgYSBgc3RydWN0IGlwX21zZmlsdGVyIG1zZjtgIGJlaW5nIGRlY2xhcmVkLCBhbG9uZyB3aXRoIGBzdHJ1Y3Qga3ZlYyBrdmVjO2AgYW5kIGBzb2Nrb3B0X3Qgb3B0O2AuIFN0YW5kYXJkIHN0dWZmLCBzbyBmYXIuIFRoZSBmaXJzdCBjaGVjaywgYGlmIChsZW4gJmx0OyBJUF9NU0ZJTFRFUl9TSVpFKDApKWAsIGlzIGludGVyZXN0aW5nLiBJdCYjMzk7cyBhIHNpemUgY2hlY2sgcmVsYXRlZCB0byB0aGUgcHJvdmlkZWQgYnVmZmVyLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIG9yaWdpbiBvZiBgbGVuYC4gV2hlcmUgZG9lcyB0aGF0IHZhbHVlIGNvbWUgZnJvbT8gSXQmIzM5O3MgY3J1Y2lhbCB0byB0cmFjZSB0aGF0IGJhY2sgdG8gaXRzIHNvdXJjZSB0byBlbnN1cmUgaXRzIHZhbHVlIGlzIHZhbGlkIGFuZCB0cnVzdGVkLiBMZXQmIzM5O3Mgc2VlIGhvdyBgbGVuYCBpcyBoYW5kbGVkIGluIHRoaXMgZnVuY3Rpb24uIFRoaXMgaXMgY3JpdGljYWwgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MDU6XHR9XG4xNTA2Olx0XG4xNTA3Olx0aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuMTUwODpcdFx0XHQgICAgIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXG4xNTA5Olx0e1xuMTUxMDpcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuMTUxMTpcdFx0Ym9vbCBuZWVkc19ydG5sID0gZ2V0c29ja29wdF9uZWVkc19ydG5sKG9wdG5hbWUpO1xuMTUxMjpcdFx0aW50IHZhbCwgZXJyID0gMDtcbjE1MTM6XHRcdGludCBsZW47XG4xNTE0Olx0XG4xNTE1Olx0XHRpZiAobGV2ZWwgIT0gU09MX0lQKVxuMTUxNjpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xNTE3Olx0XG4xNTE4Olx0XHRpZiAoaXBfbXJvdXRlX29wdChvcHRuYW1lKSlcbjE1MTk6XHRcdFx0cmV0dXJuIGlwX21yb3V0ZV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4xNTIwOlx0XG4xNTIxOlx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcbjE1MjI6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xNTIzOlx0XHRpZiAobGVuIFx1MDAzYyAwKVxuMTUyNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1MjU6XHRcbjE1MjY6XHRcdC8qIEhhbmRsZSBvcHRpb25zIHRoYXQgY2FuIGJlIHJlYWQgd2l0aG91dCBsb2NraW5nIHRoZSBzb2NrZXQuICovXG4xNTI3Olx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbjE1Mjg6XHRcdGNhc2UgSVBfUEtUSU5GTzpcbjE1Mjk6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChQS1RJTkZPLCBzayk7XG4xNTMwOlx0XHRcdGdvdG8gY29weXZhbDtcbjE1MzE6XHRcdGNhc2UgSVBfUkVDVlRUTDpcbjE1MzI6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChUVEwsIHNrKTtcbjE1MzM6XHRcdFx0Z290byBjb3B5dmFsO1xuMTUzNDpcdFx0Y2FzZSBJUF9SRUNWVE9TOlxuMTUzNTpcdFx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KFRPUywgc2spO1xuMTUzNjpcdFx0XHRnb3RvIGNvcHl2YWw7XG4xNTM3Olx0XHRjYXNlIElQX1JFQ1ZPUFRTOlxuMTUzODpcdFx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KFJFQ1ZPUFRTLCBzayk7XG4xNTM5Olx0XHRcdGdvdG8gY29weXZhbDtcbjE1NDA6XHRcdGNhc2UgSVBfUkVUT1BUUzpcbjE1NDE6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChSRVRPUFRTLCBzayk7XG4xNTQyOlx0XHRcdGdvdG8gY29weXZhbDtcbjE1NDM6XHRcdGNhc2UgSVBfUEFTU1NFQzpcbjE1NDQ6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChQQVNTU0VDLCBzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTY4CgkJCQkJCQlvdXRwdXQ6IDM0NQoJCQkJCQkJdGhvdWdodHM6IDI5ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgSVBfTVNGSUxURVIgR2V0c29ja29wdCBJbXBsZW1lbnRhdGlvbiBhbmQgS01TQU4gTmVlZHMgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHRyYWNpbmcgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBgZ2V0c29ja29wdGAgY2FsbCBmb3IgYElQX01TRklMVEVSYCBhbmQgZXZhbHVhdGluZyB3aGV0aGVyIHRoZSByZWNlbnQgY2hhbmdlcyByZXF1aXJlIEtNU0FOLiBUaGUgY29yZSBvZiBpdCBib2lscyBkb3duIHRvIGhvdyB3ZSBoYW5kbGUgdGhlIHZhcmlhYmxlLWxlbmd0aCBzb3VyY2UgbGlzdC4gIFRoZSBpbml0aWFsIGBjb3B5X2Zyb21fc29ja3B0cmAgb3BlcmF0aW9uIGdyYWJzIHRoZSBmaXhlZCBwYXJ0IG9mIGBzdHJ1Y3QgaXBfbXNmaWx0ZXJgICgxNiBieXRlcykgZnJvbSB1c2VyIHNwYWNlLCBwb3B1bGF0aW5nIHRoZSBgbXNmYCBzdHJ1Y3QuIFRoYXQgY292ZXJzIGBpbXNmX211bHRpYWRkcmAsIGBpbXNmX2ludGVyZmFjZWAsIGBpbXNmX2Ztb2RlYCBhbmQgYGltc2ZfbnVtc3JjYC4gIE5vIHBhZGRpbmcgd29ycmllcyBoZXJlLCBhbGwgMzItYml0IGFsaWduZWQuCgpUaGVuIHRoZSBgc29ja29wdF90b19zb2NrcHRyYCBzdHVmZiBzZXRzIHVwIGBpdGVyX2luYCwgYGl0ZXJfb3V0YCBhbmQgdGhlIGBvcHRsZW5gLCB3aGljaCBjYW4gYmUgY3JpdGljYWwuIFRoZSBgaXBfbWNfbXNmZ2V0YCBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGhhcHBlbnMuIEl0IHZhbGlkYXRlcyB0aGUgbXVsdGljYXN0IGFkZHJlc3MsIGZpbmRzIHRoZSByZWxldmFudCBtdWx0aWNhc3Qgc29ja2V0IGxpc3QgZW50cnkgKGBwbWNgKSwgYW5kIHBvcHVsYXRlcyBgbXNmLSZndDtpbXNmX2Ztb2RlYCBhbmQgYG1zZi0mZ3Q7aW1zZl9udW1zcmNgLiAgQ3J1Y2lhbGx5LCBpdCBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2Ygc291cmNlIGFkZHJlc3NlcyAoYGNvcHljb3VudGApIHRvIGNvcHkgYmFjayB0byB1c2VyIHNwYWNlLiBUaGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gYGNvcHljb3VudGAgd2l0aCB0aGUgYElQX01TRklMVEVSX1NJWkUoKWAgbWFjcm8uIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHNvY2tvcHRfZXhwYW5kX291dGAsIHdoaWNoIGV4cGFuZHMgdGhlIG91dHB1dCBpdGVyYXRvciYjMzk7cyBidWZmZXIuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIHVzZXIgbWlnaHQgcHJvdmlkZSBhIHNtYWxsZXIgYG9wdGxlbmAgdGhhbiB0aGUgZmluYWwgc2l6ZSB0aGF0IG5lZWRzIHRvIGJlIGNvcGllZCBiYWNrLiBUaGlzIGV4cGFuc2lvbiBlbnN1cmVzIHRoYXQgdGhlIHVzZXItcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaCBmb3IgdGhlIHBvdGVudGlhbGx5IGxhcmdlciBzb3VyY2UgbGlzdC4KCkkmIzM5O3ZlIGNhcmVmdWxseSBleGFtaW5lZCB0aGUgZGF0YSBmbG93IHRvIGVuc3VyZSB3ZSBkb24mIzM5O3QgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gYG1zZmAgKHRoZSBmaXhlZCBwYXJ0KSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgY29waWVkIG91dC4gYHBzbC0mZ3Q7c2xfYWRkcmAsIHRoZSBmbGV4aWJsZSBhcnJheSBob2xkaW5nIHNvdXJjZSBhZGRyZXNzZXMsIGlzIHNpemVkIGFuZCBwb3B1bGF0ZWQgY29ycmVjdGx5IGJhc2VkIG9uIGBjb3VudGAsIHdoaWNoIGlzIGRlcml2ZWQgZnJvbSBgcG1jLSZndDtzZmxpc3RgIGRhdGEgd2hpY2ggY29udGFpbnMgYHBzbC0mZ3Q7c2xfY291bnRgLiBUaGUgYGNvcHljb3VudGAgZGV0ZXJtaW5lcyB0aGUgYWN0dWFsIG51bWJlciBvZiBzb3VyY2UgYWRkcmVzc2VzIHRvIGNvcHksIGFuZCBpdCBpcyBhbHdheXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBwc2wtJmd0O3NsX2NvdW50YCwgYW5kIGFsbCBgbGVuYCBieXRlcyBmcm9tIGBwc2wtJmd0O3NsX2FkZHJgIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gYG9wdGxlbmAgaXMgaW5pdGlhbGl6ZWQgdG9vLiBJJiMzOTt2ZSBhbHNvIGNoZWNrZWQgdGhlIGhhbmRsaW5nIG9mIGBrdmVjYCBhbmQgZW5zdXJlZCBpdCYjMzk7cyBzYWZlLgoKVGhlIG9yaWdpbmFsIGNvZGUgZGlyZWN0bHkgY2FsY3VsYXRlZCB0aGUgb2Zmc2V0IGFuZCB1c2VkIGBjb3B5X3RvX3NvY2twdHJfb2Zmc2V0YC4gVGhpcyBuZXcgaW1wbGVtZW50YXRpb24gbWFrZXMgdXNlIG9mIGEgYHNvY2tvcHRfZXhwYW5kX291dGAgdXRpbGl0eSB3aGljaCBlbnN1cmVzIG5vIHRydW5jYXRpb24gaGFwcGVucy4gIFRoZSBleHBhbnNpb24gb2YgdGhlIGl0ZXJhdG9yIGlzIHRoZSBrZXkgY2hhbmdlIHRvIGhhbmRsZSB0aGUgdmFyaWFibGUtbGVuZ3RoIHBhcnQgb2YgdGhlIHN0cnVjdC4gRXZlcnl0aGluZyBoYXMgYmVlbiBpbml0aWFsaXplZCBvciBwb3B1bGF0ZWQgYmVmb3JlIGdldHRpbmcgY29waWVkIHRvIHRoZSBpdGVyYXRvciBhbmQgYmFjayB0byB1c2Vyc3BhY2UuCgpCYXNlZCBvbiB0aGUgS01TQU4gZ3VpZGVsaW5lcywgdGhpcyByZWZhY3RvcmluZyBkb2VzbiYjMzk7dCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiAgQWxsIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCB0aGVyZSYjMzk7cyBubyByaXNrIG9mIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgcHJpbWFyaWx5IGFib3V0IHN0cmVhbWxpbmluZyBhbmQgbW9kZXJuaXppbmcgdGhlIGdldHNvY2tvcHQgY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgSVBfTVNGSUxURVIgZ2V0c29ja29wdCBoYW5kbGluZyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgLyBpb3ZfaXRlciBpbmZyYXN0cnVjdHVyZSB2aWEgYHNvY2twdHJfdG9fc29ja29wdCgpYCwgYHNvY2tvcHRfZXhwYW5kX291dCgpYCwgYW5kIGBjb3B5X3RvX2l0ZXIoKWAuIFxuXG4tIEluIGBkb19pcF9nZXRzb2Nrb3B0KClgLCBgbXNmYCBpcyBwb3B1bGF0ZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBjb3B5X2Zyb21fc29ja3B0cigpYCBmb3IgYElQX01TRklMVEVSX1NJWkUoMClgICgxNiBieXRlcyksIGNvdmVyaW5nIGFsbCBzY2FsYXIgZmllbGRzIChgaW1zZl9tdWx0aWFkZHJgLCBgaW1zZl9pbnRlcmZhY2VgLCBgaW1zZl9mbW9kZWAsIGBpbXNmX251bXNyY2ApLCB3aXRoIGBpbXNmX2Ztb2RlYCBhbmQgYGltc2ZfbnVtc3JjYCBzdWJzZXF1ZW50bHkgdXBkYXRlZCBiZWZvcmUgYGNvcHlfdG9faXRlcigpYCBjb3BpZXMgZXhhY3RseSAxNiBieXRlcy4gVGhlcmUgaXMgbm8gc3RydWN0IHBhZGRpbmcgaW4gYHN0cnVjdCBpcF9tc2ZpbHRlcmAuXG4tIFRoZSBtdWx0aWNhc3Qgc291cmNlIGZpbHRlciBhZGRyZXNzIGFycmF5IGBwc2wtXHUwMDNlc2xfYWRkcmAgaXMgY29waWVkIHVwIHRvIGBjb3B5Y291bnQgXHUwMDNjPSBwc2wtXHUwMDNlc2xfY291bnRgIGVsZW1lbnRzLCB3aGljaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEuXG4tIGBzb2Nrb3B0X2V4cGFuZF9vdXQoKWAgYW5kIGBzb2NrcHRyX3RvX3NvY2tvcHQoKWAgb25seSBhZGp1c3QgaXRlcmF0b3IgZGVzY3JpcHRvcnMgZm9yIHVzZXIgbWVtb3J5IGJvdW5kYXJpZXMgYW5kIGRvIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBQb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyBzdWNoIGFzIG91dC1vZi1ib3VuZHMgdXNlciBidWZmZXIgYWNjZXNzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOKSBhbmQgY29weS10by11c2VyIGZhdWx0IGhhbmRsaW5nLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgSVBfTVNGSUxURVIgZ2V0c29ja29wdCBoYW5kbGluZyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgLyBpb3ZfaXRlciBpbmZyYXN0cnVjdHVyZSB2aWEgYHNvY2twdHJfdG9fc29ja29wdCgpYCwgYHNvY2tvcHRfZXhwYW5kX291dCgpYCwgYW5kIGBjb3B5X3RvX2l0ZXIoKWAuIFxuXG4tIEluIGBkb19pcF9nZXRzb2Nrb3B0KClgLCBgbXNmYCBpcyBwb3B1bGF0ZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBjb3B5X2Zyb21fc29ja3B0cigpYCBmb3IgYElQX01TRklMVEVSX1NJWkUoMClgICgxNiBieXRlcyksIGNvdmVyaW5nIGFsbCBzY2FsYXIgZmllbGRzIChgaW1zZl9tdWx0aWFkZHJgLCBgaW1zZl9pbnRlcmZhY2VgLCBgaW1zZl9mbW9kZWAsIGBpbXNmX251bXNyY2ApLCB3aXRoIGBpbXNmX2Ztb2RlYCBhbmQgYGltc2ZfbnVtc3JjYCBzdWJzZXF1ZW50bHkgdXBkYXRlZCBiZWZvcmUgYGNvcHlfdG9faXRlcigpYCBjb3BpZXMgZXhhY3RseSAxNiBieXRlcy4gVGhlcmUgaXMgbm8gc3RydWN0IHBhZGRpbmcgaW4gYHN0cnVjdCBpcF9tc2ZpbHRlcmAuXG4tIFRoZSBtdWx0aWNhc3Qgc291cmNlIGZpbHRlciBhZGRyZXNzIGFycmF5IGBwc2wtXHUwMDNlc2xfYWRkcmAgaXMgY29waWVkIHVwIHRvIGBjb3B5Y291bnQgXHUwMDNjPSBwc2wtXHUwMDNlc2xfY291bnRgIGVsZW1lbnRzLCB3aGljaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEuXG4tIGBzb2Nrb3B0X2V4cGFuZF9vdXQoKWAgYW5kIGBzb2NrcHRyX3RvX3NvY2tvcHQoKWAgb25seSBhZGp1c3QgaXRlcmF0b3IgZGVzY3JpcHRvcnMgZm9yIHVzZXIgbWVtb3J5IGJvdW5kYXJpZXMgYW5kIGRvIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBQb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyBzdWNoIGFzIG91dC1vZi1ib3VuZHMgdXNlciBidWZmZXIgYWNjZXNzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOKSBhbmQgY29weS10by11c2VyIGZhdWx0IGhhbmRsaW5nLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6MjAuNzU3NTE0NTI2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMzg3MDY0NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQX01VTFRJQ0FTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX21jX21zZmdldFwiLFxuICAgIFwiZG9faXBfZ2V0c29ja29wdFwiLFxuICAgIFwic29ja3B0cl90b19zb2Nrb3B0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIElQX01TRklMVEVSIGdldHNvY2tvcHQgaGFuZGxpbmcgdG8gdXNlIHRoZSBuZXcgc29ja29wdF90IC8gaW92X2l0ZXIgaW5mcmFzdHJ1Y3R1cmUgdmlhIGBzb2NrcHRyX3RvX3NvY2tvcHQoKWAsIGBzb2Nrb3B0X2V4cGFuZF9vdXQoKWAsIGFuZCBgY29weV90b19pdGVyKClgLiBcXG5cXG4tIEluIGBkb19pcF9nZXRzb2Nrb3B0KClgLCBgbXNmYCBpcyBwb3B1bGF0ZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBjb3B5X2Zyb21fc29ja3B0cigpYCBmb3IgYElQX01TRklMVEVSX1NJWkUoMClgICgxNiBieXRlcyksIGNvdmVyaW5nIGFsbCBzY2FsYXIgZmllbGRzIChgaW1zZl9tdWx0aWFkZHJgLCBgaW1zZl9pbnRlcmZhY2VgLCBgaW1zZl9mbW9kZWAsIGBpbXNmX251bXNyY2ApLCB3aXRoIGBpbXNmX2Ztb2RlYCBhbmQgYGltc2ZfbnVtc3JjYCBzdWJzZXF1ZW50bHkgdXBkYXRlZCBiZWZvcmUgYGNvcHlfdG9faXRlcigpYCBjb3BpZXMgZXhhY3RseSAxNiBieXRlcy4gVGhlcmUgaXMgbm8gc3RydWN0IHBhZGRpbmcgaW4gYHN0cnVjdCBpcF9tc2ZpbHRlcmAuXFxuLSBUaGUgbXVsdGljYXN0IHNvdXJjZSBmaWx0ZXIgYWRkcmVzcyBhcnJheSBgcHNsLVxcdTAwM2VzbF9hZGRyYCBpcyBjb3BpZWQgdXAgdG8gYGNvcHljb3VudCBcXHUwMDNjPSBwc2wtXFx1MDAzZXNsX2NvdW50YCBlbGVtZW50cywgd2hpY2ggYXJlIGZ1bGx5IGluaXRpYWxpemVkIGtlcm5lbCBkYXRhLlxcbi0gYHNvY2tvcHRfZXhwYW5kX291dCgpYCBhbmQgYHNvY2twdHJfdG9fc29ja29wdCgpYCBvbmx5IGFkanVzdCBpdGVyYXRvciBkZXNjcmlwdG9ycyBmb3IgdXNlciBtZW1vcnkgYm91bmRhcmllcyBhbmQgZG8gbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gUG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgc3VjaCBhcyBvdXQtb2YtYm91bmRzIHVzZXIgYnVmZmVyIGFjY2VzcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTikgYW5kIGNvcHktdG8tdXNlciBmYXVsdCBoYW5kbGluZy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIHRoZSBJUF9NU0ZJTFRFUiBzb2NrZXQgb3B0aW9uIGluIElQdjQgZ2V0c29ja29wdCBieSBjb252ZXJ0aW5nIGlwX21jX21zZmdldCB0byB1c2UgdGhlIHNvY2tvcHRfdCBhYnN0cmFjdGlvbiwgaW50cm9kdWNpbmcgdGhlIHNvY2tvcHRfZXhwYW5kX291dCBoZWxwZXIgdG8gZHluYW1pY2FsbHkgcmVzaXplIHRoZSBvdXRwdXQgYnVmZmVyIGl0ZXJhdG9yLCBhbmQgZXhwb3J0aW5nIHNvY2twdHJfdG9fc29ja29wdC4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgY2FuIGJlIGRpcmVjdGx5IGV4ZXJjaXNlZCBmcm9tIHVzZXJzcGFjZSB2aWEgZ2V0c29ja29wdCgpIGNhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowNzoyMC43NTc1MjA5MTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMDMwMzYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUyNTI1ZmNkNzY5YWRjYmY0OTYyNTdlZDY0OGUzYmNiMzYyMzE1MDBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMTAgMTA6MDc6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZ21wLmggYi9pbmNsdWRlL2xpbnV4L2lnbXAuaFxcbmluZGV4IGEwY2YwMzk4NTE5ZmQuLmUwNzU2MTEzNDRlZjMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9pZ21wLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lnbXAuaFxcbkBAIC0xNCw2ICsxNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb2NrcHRyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L2lnbXAuaFxcdTAwM2VcXG5AQCAtMjczLDcgKzI3NCw3IEBAIGV4dGVybiBpbnQgaXBfbWNfc291cmNlKGludCBhZGQsIGludCBvbW9kZSwgc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRzdHJ1Y3QgaXBfbXJlcV9zb3VyY2UgKm1yZXFzLCBpbnQgaWZpbmRleCk7XFxuIGV4dGVybiBpbnQgaXBfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixpbnQgaWZpbmRleCk7XFxuIGV4dGVybiBpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXFxuLVxcdFxcdFxcdHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pO1xcbitcXHRcXHRcXHRzb2Nrb3B0X3QgKm9wdCk7XFxuIGV4dGVybiBpbnQgaXBfbWNfZ3NmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGdyb3VwX2ZpbHRlciAqZ3NmLFxcbiBcXHRcXHRcXHRzb2NrcHRyX3Qgb3B0dmFsLCBzaXplX3Qgb2Zmc2V0KTtcXG4gZXh0ZXJuIGludCBpcF9tY19zZl9hbGxvdyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIF9fYmUzMiBsb2NhbCwgX19iZTMyIHJtdCxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmhcXG5pbmRleCA0NzAxMDBhZTcxMDc3Li5kZTBlZDM2MmIzNzc5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldC5oXFxuQEAgLTcwLDYgKzcwLDMxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfaW5pdF91c2VyKHNvY2tvcHRfdCAqb3B0LCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLypcXG4rICogR3JvdyBvcHR2YWwgdG8gQHNpemUsIGZvciB0aGUgb3B0aW9ucyB3aG9zZSByZXBseSBpcyBzaXplZCBieSBhIGNvdW50IHRoZVxcbisgKiBjYWxsZXIgbGVmdCBpbiBvcHR2YWwgcmF0aGVyIHRoYW4gYnkgb3B0bGVuLiBUaG9zZSB3cml0ZSBwYXN0IG9wdGxlbiB0b2RheVxcbisgKiBhbmQgdXNlcnNwYWNlIHJlbGllcyBvbiBpdC5cXG4rICpcXG4rICogQ2FsbCBpdCBiZWZvcmUgd3JpdGluZyB0aHJvdWdoIG9wdC1cXHUwMDNlaXRlcl9vdXQ6IGl0IHJlLWFuY2hvcnMgdGhlIGl0ZXJhdG9yIGF0XFxuKyAqIHRoZSBoZWFkIG9mIG9wdHZhbC4gT25seSBhIHVzZXIgYnVmZmVyIGNhbiBiZSBsb25nZXIgdGhhbiB0aGUgb3B0bGVuIHRoZVxcbisgKiBjYWxsZXIgZGVjbGFyZWQsIHNvIGEga2VybmVsLWJhY2tlZCBvcHR2YWwgaXMgcmVmdXNlZCB3aXRoIC1FSU5WQUwuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGludCBzb2Nrb3B0X2V4cGFuZF9vdXQoc29ja29wdF90ICpvcHQsIHNpemVfdCBzaXplKVxcbit7XFxuK1xcdGlmIChzaXplIFxcdTAwM2M9IGlvdl9pdGVyX2NvdW50KFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfb3V0KSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFpdGVyX2lzX3VidWYoXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpb3ZfaXRlcl91YnVmKFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfb3V0LCBJVEVSX0RFU1QsIG9wdC1cXHUwMDNlaXRlcl9vdXQudWJ1Ziwgc2l6ZSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbixcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBrdmVjICprdmVjKTtcXG4rXFxuIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdDtcXG4gc3RydWN0IHBpcGVfaW5vZGVfaW5mbztcXG4gc3RydWN0IGlub2RlO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmNcXG5pbmRleCBkNTYzNTVhY2E3OTc3Li4xNDRmY2ExNThhZGNiIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2lnbXAuY1xcbisrKyBiL25ldC9pcHY0L2lnbXAuY1xcbkBAIC0yNzA5LDggKzI3MDksOCBAQCBpbnQgaXBfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgaW50IGlmaW5kZXgpXFxuIFxcdFxcdGVyciA9IGlwX21jX2xlYXZlX2dyb3VwKHNrLCBcXHUwMDI2aW1yKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbi1pbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXFxuLVxcdFxcdCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxcbitcXG4raW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBzb2Nrb3B0X3QgKm9wdClcXG4ge1xcbiBcXHRpbnQgZXJyLCBsZW4sIGNvdW50LCBjb3B5Y291bnQsIG1zZl9zaXplO1xcbiBcXHRzdHJ1Y3QgaXBfbXJlcW5cXHRpbXI7XFxuQEAgLTI3NTUsMTQgKzI3NTUsMTkgQEAgaW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLFxcbiBcXHRsZW4gPSBmbGV4X2FycmF5X3NpemUocHNsLCBzbF9hZGRyLCBjb3B5Y291bnQpO1xcbiBcXHRtc2YtXFx1MDAzZWltc2ZfbnVtc3JjID0gY291bnQ7XFxuIFxcdG1zZl9zaXplID0gSVBfTVNGSUxURVJfU0laRShjb3B5Y291bnQpO1xcbi1cXHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXFx1MDAyNm1zZl9zaXplLCBzaXplb2YoaW50KSkgfHxcXG4tXFx0ICAgIGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIG1zZiwgSVBfTVNGSUxURVJfU0laRSgwKSkpIHtcXG4rXFxuK1xcdC8qIFRoZSBzb3VyY2UgbGlzdCBpcyBzaXplZCBieSB0aGUgaW1zZl9udW1zcmMgdGhlIGNhbGxlciBsZWZ0IGluXFxuK1xcdCAqIG9wdHZhbCwgbm90IGJ5IG9wdGxlbiwgd2hpY2ggb25seSBoYXMgdG8gY292ZXIgdGhlIGZpeGVkIHBhcnQuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBzb2Nrb3B0X2V4cGFuZF9vdXQob3B0LCBtc2Zfc2l6ZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRvcHQtXFx1MDAzZW9wdGxlbiA9IG1zZl9zaXplO1xcbitcXHRpZiAoY29weV90b19pdGVyKG1zZiwgSVBfTVNGSUxURVJfU0laRSgwKSwgXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpICE9XFxuK1xcdCAgICBJUF9NU0ZJTFRFUl9TSVpFKDApKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0fVxcbi1cXHRpZiAobGVuIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBjb3B5X3RvX3NvY2twdHJfb2Zmc2V0KG9wdHZhbCxcXG4tXFx0XFx0XFx0XFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGlwX21zZmlsdGVyLCBpbXNmX3NsaXN0X2ZsZXgpLFxcbi1cXHRcXHRcXHRcXHQgICBwc2wtXFx1MDAzZXNsX2FkZHIsIGxlbikpXFxuK1xcdGlmIChsZW4gXFx1MDAyNlxcdTAwMjYgY29weV90b19pdGVyKHBzbC1cXHUwMDNlc2xfYWRkciwgbGVuLCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT0gbGVuKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0cmV0dXJuIDA7XFxuIGRvbmU6XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXFxuaW5kZXggYTU1ZWYzMjdlYzkzMi4uYzU4ZTU2NWYyYTVhYSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXFxuKysrIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xcbkBAIC0xNzA2LDYgKzE3MDYsOCBAQCBpbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdGNhc2UgSVBfTVNGSUxURVI6XFxuIFxcdHtcXG4gXFx0XFx0c3RydWN0IGlwX21zZmlsdGVyIG1zZjtcXG4rXFx0XFx0c3RydWN0IGt2ZWMga3ZlYztcXG4rXFx0XFx0c29ja29wdF90IG9wdDtcXG4gXFxuIFxcdFxcdGlmIChsZW4gXFx1MDAzYyBJUF9NU0ZJTFRFUl9TSVpFKDApKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuQEAgLTE3MTUsNyArMTcxNywxMyBAQCBpbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuLVxcdFxcdGVyciA9IGlwX21jX21zZmdldChzaywgXFx1MDAyNm1zZiwgb3B0dmFsLCBvcHRsZW4pO1xcbitcXHRcXHRlcnIgPSBzb2NrcHRyX3RvX3NvY2tvcHQoXFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4sIFxcdTAwMjZrdmVjKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRlcnIgPSBpcF9tY19tc2ZnZXQoc2ssIFxcdTAwMjZtc2YsIFxcdTAwMjZvcHQpO1xcbitcXHRcXHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXFx1MDAyNm9wdC5vcHRsZW4sIHNpemVvZihpbnQpKSlcXG4rXFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFx0Y2FzZSBNQ0FTVF9NU0ZJTFRFUjpcXG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXFxuaW5kZXggYzA1ZDg2ZTYzYWJmNy4uMjlhMGY3ZjhlMmNhYiAxMDA2NDRcXG4tLS0gYS9uZXQvc29ja2V0LmNcXG4rKysgYi9uZXQvc29ja2V0LmNcXG5AQCAtMjQzNyw4ICsyNDM3LDggQEAgSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShib29sIHRjcF9icGZfYnlwYXNzX2dldHNvY2tvcHQoaW50IGxldmVsLFxcbiAgKiBJdCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCBib3RoIGlvdiBwb2ludHMgdG8gdGhlIHNhbWUgZGF0YSwgYnV0LFxcbiAgKiAuaXRlcl9pbiBpcyByZWFkLW9ubHkgYW5kIC5pdGVyX291dCBpcyB3cml0ZS1vbmx5IGJ5IHRoZSBwcm90b2NvbCBjYWxsYmFja3NcXG4gICovXFxuLXN0YXRpYyBpbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLFxcbi1cXHRcXHRcXHQgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBzdHJ1Y3Qga3ZlYyAqa3ZlYylcXG4raW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCxcXG4rXFx0XFx0ICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIHN0cnVjdCBrdmVjICprdmVjKVxcbiB7XFxuIFxcdGludCBrb3B0bGVuO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6MjEuMzc4MzgzNDE3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2ODUzNjExOTk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUF9NVUxUSUNBU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9tY19tc2ZnZXRcIixcbiAgICBcImRvX2lwX2dldHNvY2tvcHRcIixcbiAgICBcInNvY2twdHJfdG9fc29ja29wdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgSVBfTVNGSUxURVIgc29ja2V0IG9wdGlvbiBpbiBJUHY0IGdldHNvY2tvcHQgYnkgY29udmVydGluZyBpcF9tY19tc2ZnZXQgdG8gdXNlIHRoZSBzb2Nrb3B0X3QgYWJzdHJhY3Rpb24sIGludHJvZHVjaW5nIHRoZSBzb2Nrb3B0X2V4cGFuZF9vdXQgaGVscGVyIHRvIGR5bmFtaWNhbGx5IHJlc2l6ZSB0aGUgb3V0cHV0IGJ1ZmZlciBpdGVyYXRvciwgYW5kIGV4cG9ydGluZyBzb2NrcHRyX3RvX3NvY2tvcHQuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGNhbiBiZSBkaXJlY3RseSBleGVyY2lzZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGdldHNvY2tvcHQoKSBjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MjUyNWZjZDc2OWFkY2JmNDk2MjU3ZWQ2NDhlM2JjYjM2MjMxNTAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTA6MDc6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lnbXAuaCBiL2luY2x1ZGUvbGludXgvaWdtcC5oXG5pbmRleCBhMGNmMDM5ODUxOWZkLi5lMDc1NjExMzQ0ZWYzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pZ21wLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaWdtcC5oXG5AQCAtMTQsNiArMTQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvY2twdHIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaWdtcC5oXHUwMDNlXG5AQCAtMjczLDcgKzI3NCw3IEBAIGV4dGVybiBpbnQgaXBfbWNfc291cmNlKGludCBhZGQsIGludCBvbW9kZSwgc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRzdHJ1Y3QgaXBfbXJlcV9zb3VyY2UgKm1yZXFzLCBpbnQgaWZpbmRleCk7XG4gZXh0ZXJuIGludCBpcF9tY19tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLGludCBpZmluZGV4KTtcbiBleHRlcm4gaW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLFxuLVx0XHRcdHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pO1xuK1x0XHRcdHNvY2tvcHRfdCAqb3B0KTtcbiBleHRlcm4gaW50IGlwX21jX2dzZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBncm91cF9maWx0ZXIgKmdzZixcbiBcdFx0XHRzb2NrcHRyX3Qgb3B0dmFsLCBzaXplX3Qgb2Zmc2V0KTtcbiBleHRlcm4gaW50IGlwX21jX3NmX2FsbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgX19iZTMyIGxvY2FsLCBfX2JlMzIgcm10LFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0LmggYi9pbmNsdWRlL2xpbnV4L25ldC5oXG5pbmRleCA0NzAxMDBhZTcxMDc3Li5kZTBlZDM2MmIzNzc5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXQuaFxuQEAgLTcwLDYgKzcwLDMxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfaW5pdF91c2VyKHNvY2tvcHRfdCAqb3B0LCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogR3JvdyBvcHR2YWwgdG8gQHNpemUsIGZvciB0aGUgb3B0aW9ucyB3aG9zZSByZXBseSBpcyBzaXplZCBieSBhIGNvdW50IHRoZVxuKyAqIGNhbGxlciBsZWZ0IGluIG9wdHZhbCByYXRoZXIgdGhhbiBieSBvcHRsZW4uIFRob3NlIHdyaXRlIHBhc3Qgb3B0bGVuIHRvZGF5XG4rICogYW5kIHVzZXJzcGFjZSByZWxpZXMgb24gaXQuXG4rICpcbisgKiBDYWxsIGl0IGJlZm9yZSB3cml0aW5nIHRocm91Z2ggb3B0LVx1MDAzZWl0ZXJfb3V0OiBpdCByZS1hbmNob3JzIHRoZSBpdGVyYXRvciBhdFxuKyAqIHRoZSBoZWFkIG9mIG9wdHZhbC4gT25seSBhIHVzZXIgYnVmZmVyIGNhbiBiZSBsb25nZXIgdGhhbiB0aGUgb3B0bGVuIHRoZVxuKyAqIGNhbGxlciBkZWNsYXJlZCwgc28gYSBrZXJuZWwtYmFja2VkIG9wdHZhbCBpcyByZWZ1c2VkIHdpdGggLUVJTlZBTC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBzb2Nrb3B0X2V4cGFuZF9vdXQoc29ja29wdF90ICpvcHQsIHNpemVfdCBzaXplKVxuK3tcbitcdGlmIChzaXplIFx1MDAzYz0gaW92X2l0ZXJfY291bnQoXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFpdGVyX2lzX3VidWYoXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aW92X2l0ZXJfdWJ1ZihcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQsIElURVJfREVTVCwgb3B0LVx1MDAzZWl0ZXJfb3V0LnVidWYsIHNpemUpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCBzb2NrcHRyX3RvX3NvY2tvcHQoc29ja29wdF90ICpvcHQsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4sXG4rXHRcdCAgICAgICBzdHJ1Y3Qga3ZlYyAqa3ZlYyk7XG4rXG4gc3RydWN0IHBvbGxfdGFibGVfc3RydWN0O1xuIHN0cnVjdCBwaXBlX2lub2RlX2luZm87XG4gc3RydWN0IGlub2RlO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lnbXAuYyBiL25ldC9pcHY0L2lnbXAuY1xuaW5kZXggZDU2MzU1YWNhNzk3Ny4uMTQ0ZmNhMTU4YWRjYiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lnbXAuY1xuKysrIGIvbmV0L2lwdjQvaWdtcC5jXG5AQCAtMjcwOSw4ICsyNzA5LDggQEAgaW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIGludCBpZmluZGV4KVxuIFx0XHRlcnIgPSBpcF9tY19sZWF2ZV9ncm91cChzaywgXHUwMDI2aW1yKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuLWludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixcbi1cdFx0IHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXG4rXG4raW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBzb2Nrb3B0X3QgKm9wdClcbiB7XG4gXHRpbnQgZXJyLCBsZW4sIGNvdW50LCBjb3B5Y291bnQsIG1zZl9zaXplO1xuIFx0c3RydWN0IGlwX21yZXFuXHRpbXI7XG5AQCAtMjc1NSwxNCArMjc1NSwxOSBAQCBpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXG4gXHRsZW4gPSBmbGV4X2FycmF5X3NpemUocHNsLCBzbF9hZGRyLCBjb3B5Y291bnQpO1xuIFx0bXNmLVx1MDAzZWltc2ZfbnVtc3JjID0gY291bnQ7XG4gXHRtc2Zfc2l6ZSA9IElQX01TRklMVEVSX1NJWkUoY29weWNvdW50KTtcbi1cdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZtc2Zfc2l6ZSwgc2l6ZW9mKGludCkpIHx8XG4tXHQgICAgY29weV90b19zb2NrcHRyKG9wdHZhbCwgbXNmLCBJUF9NU0ZJTFRFUl9TSVpFKDApKSkge1xuK1xuK1x0LyogVGhlIHNvdXJjZSBsaXN0IGlzIHNpemVkIGJ5IHRoZSBpbXNmX251bXNyYyB0aGUgY2FsbGVyIGxlZnQgaW5cbitcdCAqIG9wdHZhbCwgbm90IGJ5IG9wdGxlbiwgd2hpY2ggb25seSBoYXMgdG8gY292ZXIgdGhlIGZpeGVkIHBhcnQuXG4rXHQgKi9cbitcdGVyciA9IHNvY2tvcHRfZXhwYW5kX291dChvcHQsIG1zZl9zaXplKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRvcHQtXHUwMDNlb3B0bGVuID0gbXNmX3NpemU7XG4rXHRpZiAoY29weV90b19pdGVyKG1zZiwgSVBfTVNGSUxURVJfU0laRSgwKSwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPVxuK1x0ICAgIElQX01TRklMVEVSX1NJWkUoMCkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0fVxuLVx0aWYgKGxlbiBcdTAwMjZcdTAwMjZcbi1cdCAgICBjb3B5X3RvX3NvY2twdHJfb2Zmc2V0KG9wdHZhbCxcbi1cdFx0XHRcdCAgIG9mZnNldG9mKHN0cnVjdCBpcF9tc2ZpbHRlciwgaW1zZl9zbGlzdF9mbGV4KSxcbi1cdFx0XHRcdCAgIHBzbC1cdTAwM2VzbF9hZGRyLCBsZW4pKVxuK1x0aWYgKGxlbiBcdTAwMjZcdTAwMjYgY29weV90b19pdGVyKHBzbC1cdTAwM2VzbF9hZGRyLCBsZW4sIFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCkgIT0gbGVuKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdHJldHVybiAwO1xuIGRvbmU6XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbmluZGV4IGE1NWVmMzI3ZWM5MzIuLmM1OGU1NjVmMmE1YWEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXG4rKysgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXG5AQCAtMTcwNiw2ICsxNzA2LDggQEAgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0Y2FzZSBJUF9NU0ZJTFRFUjpcbiBcdHtcbiBcdFx0c3RydWN0IGlwX21zZmlsdGVyIG1zZjtcbitcdFx0c3RydWN0IGt2ZWMga3ZlYztcbitcdFx0c29ja29wdF90IG9wdDtcbiBcbiBcdFx0aWYgKGxlbiBcdTAwM2MgSVBfTVNGSUxURVJfU0laRSgwKSkge1xuIFx0XHRcdGVyciA9IC1FSU5WQUw7XG5AQCAtMTcxNSw3ICsxNzE3LDEzIEBAIGludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4tXHRcdGVyciA9IGlwX21jX21zZmdldChzaywgXHUwMDI2bXNmLCBvcHR2YWwsIG9wdGxlbik7XG4rXHRcdGVyciA9IHNvY2twdHJfdG9fc29ja29wdChcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcdTAwMjZrdmVjKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0ZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCBcdTAwMjZtc2YsIFx1MDAyNm9wdCk7XG4rXHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXG4rXHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXHRjYXNlIE1DQVNUX01TRklMVEVSOlxuZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuY1xuaW5kZXggYzA1ZDg2ZTYzYWJmNy4uMjlhMGY3ZjhlMmNhYiAxMDA2NDRcbi0tLSBhL25ldC9zb2NrZXQuY1xuKysrIGIvbmV0L3NvY2tldC5jXG5AQCAtMjQzNyw4ICsyNDM3LDggQEAgSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShib29sIHRjcF9icGZfYnlwYXNzX2dldHNvY2tvcHQoaW50IGxldmVsLFxuICAqIEl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IGJvdGggaW92IHBvaW50cyB0byB0aGUgc2FtZSBkYXRhLCBidXQsXG4gICogLml0ZXJfaW4gaXMgcmVhZC1vbmx5IGFuZCAuaXRlcl9vdXQgaXMgd3JpdGUtb25seSBieSB0aGUgcHJvdG9jb2wgY2FsbGJhY2tzXG4gICovXG4tc3RhdGljIGludCBzb2NrcHRyX3RvX3NvY2tvcHQoc29ja29wdF90ICpvcHQsIHNvY2twdHJfdCBvcHR2YWwsXG4tXHRcdFx0ICAgICAgc29ja3B0cl90IG9wdGxlbiwgc3RydWN0IGt2ZWMgKmt2ZWMpXG4raW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCxcbitcdFx0ICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIHN0cnVjdCBrdmVjICprdmVjKVxuIHtcbiBcdGludCBrb3B0bGVuO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6MjEuMzc4Mzg2ODU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDgwOTg3NzE3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IFdvcnRoIHRoZSBGdXp6PyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyouIEZyb20gYSBxdWljayBsb29rLCBpdCBzZWVtcyBsaWtlIGEgc29ja2V0IG9wdGlvbiBjaGFuZ2UgcmVsYXRlZCB0byBJR01QIGFuZCBJUCBtdWx0aWNhc3QgZmlsdGVyaW5nLiBTcGVjaWZpY2FsbHksIHRoZSBzaWduYXR1cmUgb2YgYGlwX21jX21zZmdldGAgaW4gYGlnbXAuaGAgaGFzIGJlZW4gcmVmYWN0b3JlZCwgc3dpdGNoaW5nIGZyb20gcG9pbnRlcnMgdG8gcG9pbnRlcnMgYW5kIGxlbmd0aHMgdG8gYSBgc29ja29wdF90YCBzdHJ1Y3QsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgc2hpZnQuIFRoZSBhZGRpdGlvbiBvZiBgc29ja29wdF9leHBhbmRfb3V0YCBhbmQgYHNvY2twdHJfdG9fc29ja29wdGAgaW4gYG5ldC5oYCBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSwgcHJvdmlkaW5nIGhlbHBlcnMgZm9yIG1hbmlwdWxhdGluZyB0aGlzIG5ldyBzdHJ1Y3QgYW5kIGNvbnZlcnRpbmcgZXhpc3RpbmcgcG9pbnRlciByZXByZXNlbnRhdGlvbnMuIFRoZSBgaWdtcC5jYCBhbmQgYGlwX3NvY2tnbHVlLmNgIHVwZGF0ZXMgc2hvdyB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYWRhcHRpbmcgdG8gdGhlIGBzb2Nrb3B0X3RgIGNoYW5nZSwgYW5kIGBzb2NrZXQuY2AgaXMgYmVpbmcgbW9kaWZpZWQgdG8gbWFrZSBgc29ja3B0cl90b19zb2Nrb3B0YCBub24tc3RhdGljLCBhbGxvd2luZyBpdCB0byBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IGBkb19pcF9nZXRzb2Nrb3B0YCBjYWxsLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGNvZGUsIGRlYWxpbmcgd2l0aCBJUHY0IHNvY2tldCBvcHRpb25zLCBhbmQgZGlyZWN0bHkgcmVhY2hhYmxlIHZpYSB0aGUgYGdldHNvY2tvcHRgIHN5c2NhbGwuIFRoYXQgbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQuIFN0YW5kYXJkIHVzZXIgc3BhY2UgYWNjZXNzIHRvIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgdmlhIGEgc3lzdGVtIGNhbGwgaXMgYW4gaWRlYWwgc3BvdC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzOiBJIG5lZWQgdG8gZ2V0IHRoZSBleGFjdCBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9ucyBhZmZlY3RlZCB0byByZWZpbmUgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIEknbGwgcHJvYmFibHkgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgYSBiZXR0ZXIgY29udGV4dCBmb3IgdGhlIGNvZGUuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2Qgc3BvdCBmb3IgYSBmb2N1c2VkIGZ1enplci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgwMSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA3OjI2LjE4ODI2NjcwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODY1ODg3MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2twdHJfdG9fc29ja29wdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldC5oPTgyPXN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfZXhwYW5kX291dChzb2Nrb3B0X3QgKm9wdCwgc2l6ZV90IHNpemUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldC5oLTk0LVxcbmluY2x1ZGUvbGludXgvbmV0Lmg6OTU6aW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbixcXG5pbmNsdWRlL2xpbnV4L25ldC5oLTk2LVxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZlYyAqa3ZlYyk7XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE1MDc9aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzE5LVxcdFxcdH1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE3MjA6XFx0XFx0ZXJyID0gc29ja3B0cl90b19zb2Nrb3B0KFxcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcXHUwMDI2a3ZlYyk7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzIxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvc29ja2V0LmM9MjQzMT1JTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKGJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsXFxuLS1cXG5uZXQvc29ja2V0LmMtMjQzOS0gKi9cXG5uZXQvc29ja2V0LmM6MjQ0MDppbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLFxcbm5ldC9zb2NrZXQuYy0yNDQxLVxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBzdHJ1Y3Qga3ZlYyAqa3ZlYylcXG4tLVxcbm5ldC9zb2NrZXQuYz0yNDY2PWludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcXG4tLVxcbm5ldC9zb2NrZXQuYy0yNDg1LVxcdH0gZWxzZSBpZiAob3BzLVxcdTAwM2VnZXRzb2Nrb3B0X2l0ZXIpIHtcXG5uZXQvc29ja2V0LmM6MjQ4NjpcXHRcXHRlcnIgPSBzb2NrcHRyX3RvX3NvY2tvcHQoXFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4sIFxcdTAwMjZrdmVjKTtcXG5uZXQvc29ja2V0LmMtMjQ4Ny1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowNzoyOS4wNTQxNTkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2Nzc5OTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSUdNUCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgaG93IG11bHRpY2FzdCBtZW1iZXJzaGlwIGluZm9ybWF0aW9uIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIElQdjQgY29udGV4dC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGUgaXNzdWUgSSdtIHRyYWNraW5nIGlzIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgcmV0cmlldmVzIG9yIHNldHMgbXVsdGljYXN0IG1lbWJlcnNoaXAgaW5mb3JtYXRpb24uIFRoZXJlZm9yZSwgSSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgaXBfbWNfbXNmZ2V0YCBmdW5jdGlvbi4gSXQncyBhbG1vc3QgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZXhwbG9yaW5nIGFueXRoaW5nIElHTVAtcmVsYXRlZC4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiwgcmVzaWRpbmcgd2l0aGluIHRoZSBgbmV0L2lwdjQvaWdtcC5jYCBmaWxlLCBwbGF5cyBhIHBpdm90YWwgcm9sZS4gSSdtIGhvcGluZyBJIGNhbiBmaW5kIHRoZSBjbHVlIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDc2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6MzEuMDIxOTYxOTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1NDY3NTg1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9tY19tc2ZnZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9pZ21wLmg9Mjc1PWV4dGVybiBpbnQgaXBfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixpbnQgaWZpbmRleCk7XFxuaW5jbHVkZS9saW51eC9pZ21wLmg6Mjc2OmV4dGVybiBpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXFxuaW5jbHVkZS9saW51eC9pZ21wLmgtMjc3LVxcdFxcdFxcdHNvY2tvcHRfdCAqb3B0KTtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0yNjIyPWludCBpcF9tY19tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBpbnQgaWZpbmRleClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yNzEyLVxcbm5ldC9pcHY0L2lnbXAuYzoyNzEzOmludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgc29ja29wdF90ICpvcHQpXFxubmV0L2lwdjQvaWdtcC5jLTI3MTQte1xcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xNTA3PWludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTcyMy1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE3MjQ6XFx0XFx0ZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCBcXHUwMDI2bXNmLCBcXHUwMDI2b3B0KTtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3MjUtXFx0XFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFxcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA3OjMzLjM3NjY0NjI1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNDM5NTY5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGlwX3NvY2tnbHVlLmNgKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcyBzcGVjaWZpYyBzaXR1YXRpb24uIEknbSBnb2luZyB0byBoZWFkIGRpcmVjdGx5IGludG8gdGhlIGBpcF9zb2NrZ2x1ZS5jYCBzb3VyY2UgY29kZSwgYW5kIEknbSB0YXJnZXRpbmcgYXJvdW5kIGxpbmUgMTcwMC4gVGhhdCdzIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCDigJMgSSdtIGhvcGluZyB0aGF0IGFyZWEgd2lsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nLiBJIGV4cGVjdCB0aGF0IGFyb3VuZCB0aGF0IHJlZ2lvbiBJIGNhbiB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZS4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBjdXJyZW50IHN0YXRlLCBhbmQgdGhpcyBmZWVscyBsaWtlIGEgc3Ryb25nIHN0YXJ0aW5nIHBvaW50IHRvIGFjaGlldmUgdGhhdCBnb2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjU1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6MzguNDIwNjA1Nzg3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX3NvY2tnbHVlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcwMDpcXHRcXG4xNzAxOlxcdFxcdGlmIChuZWVkc19ydG5sKVxcbjE3MDI6XFx0XFx0XFx0cnRubF9sb2NrKCk7XFxuMTcwMzpcXHRcXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XFxuMTcwNDpcXHRcXG4xNzA1OlxcdFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbjE3MDY6XFx0XFx0Y2FzZSBJUF9NU0ZJTFRFUjpcXG4xNzA3OlxcdFxcdHtcXG4xNzA4OlxcdFxcdFxcdHN0cnVjdCBpcF9tc2ZpbHRlciBtc2Y7XFxuMTcwOTpcXHRcXHRcXHRzdHJ1Y3Qga3ZlYyBrdmVjO1xcbjE3MTA6XFx0XFx0XFx0c29ja29wdF90IG9wdDtcXG4xNzExOlxcdFxcbjE3MTI6XFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNjIElQX01TRklMVEVSX1NJWkUoMCkpIHtcXG4xNzEzOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTcxNDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xNzE1OlxcdFxcdFxcdH1cXG4xNzE2OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2bXNmLCBvcHR2YWwsIElQX01TRklMVEVSX1NJWkUoMCkpKSB7XFxuMTcxNzpcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjE3MTg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTcxOTpcXHRcXHRcXHR9XFxuMTcyMDpcXHRcXHRcXHRlcnIgPSBzb2NrcHRyX3RvX3NvY2tvcHQoXFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4sIFxcdTAwMjZrdmVjKTtcXG4xNzIxOlxcdFxcdFxcdGlmIChlcnIpXFxuMTcyMjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xNzIzOlxcdFxcbjE3MjQ6XFx0XFx0XFx0ZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCBcXHUwMDI2bXNmLCBcXHUwMDI2b3B0KTtcXG4xNzI1OlxcdFxcdFxcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcXHUwMDI2b3B0Lm9wdGxlbiwgc2l6ZW9mKGludCkpKVxcbjE3MjY6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4xNzI3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3Mjg6XFx0XFx0fVxcbjE3Mjk6XFx0XFx0Y2FzZSBNQ0FTVF9NU0ZJTFRFUjpcXG4xNzMwOlxcdFxcdFxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxcbjE3MzE6XFx0XFx0XFx0XFx0ZXJyID0gY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcihzaywgb3B0dmFsLCBvcHRsZW4sXFxuMTczMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBsZW4pO1xcbjE3MzM6XFx0XFx0XFx0ZWxzZVxcbjE3MzQ6XFx0XFx0XFx0XFx0ZXJyID0gaXBfZ2V0X21jYXN0X21zZmlsdGVyKHNrLCBvcHR2YWwsIG9wdGxlbiwgbGVuKTtcXG4xNzM1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3MzY6XFx0XFx0Y2FzZSBJUF9QUk9UT0NPTDpcXG4xNzM3OlxcdFxcdFxcdHZhbCA9IGluZXRfc2soc2spLVxcdTAwM2VpbmV0X251bTtcXG4xNzM4OlxcdFxcdFxcdGJyZWFrO1xcbjE3Mzk6XFx0XFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6MzguNDIwNzU1MDk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUzNjQyODg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSUdNUCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gZXhhbWluZSB0aGUgSUdNUCBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBtdWx0aWNhc3Qgc291cmNlIGZpbHRlcmluZyBpcyBoYW5kbGVkLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBuZXQvaXB2NC9pZ21wLmNgLiBUaGUgY29yZSBsb2dpYyBwcm9iYWJseSByZXNpZGVzIG5lYXIgYGlwX21jX21zZmdldGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIHJldHJpZXZlcyB0aGUgTXVsdGljYXN0IFNvdXJjZSBGaWx0ZXIgKE1TRikgc3RhdGUuIEknbSBhc3N1bWluZyBpdCBoYW5kbGVzIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgbG9va3VwcywgYW5kIGFueSBhc3NvY2lhdGVkIGxvY2tpbmcgdG8gZW5zdXJlIHRocmVhZCBzYWZldHkgd2hlbiBhIG11bHRpY2FzdCBncm91cCBtZW1iZXIgYWRkcyBvciByZW1vdmVzIGEgc291cmNlLiBJ4oCZbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgYWxnb3JpdGhtcyB1c2VkIGZvciBtYXRjaGluZywgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSByb3V0aW5nIHRhYmxlLCBhcyB0aGF0J3Mgd2hlcmUgdGhlIGFjdHVhbCBmb3J3YXJkaW5nIGRlY2lzaW9ucyBzdGVtIGZyb20sIGJhc2VkIG9uIHRoZSBmaWx0ZXIgaW5mb3JtYXRpb24uIEl0J3MgbGlrZWx5IHRoYXQgaXQgcGVyZm9ybXMgc29tZSBzb3J0IG9mIGhhc2gtYmFzZWQgbG9va3VwIHRvIG9wdGltaXplIHRoZSBNU0YgcmV0cmlldmFsLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nOiB3aGF0IGhhcHBlbnMgaWYgdGhlIGVudHJ5IGlzbid0IGZvdW5kLCBvciBpZiB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50PyBUaGlzIHdpbGwgYmUgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MzcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA3OjQzLjk1NzE4ODM5MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjM5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaWdtcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MTAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3MTA6XFx0XFx0cmV0dXJuIGVycjtcXG4yNzExOlxcdH1cXG4yNzEyOlxcdFxcbjI3MTM6XFx0aW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBzb2Nrb3B0X3QgKm9wdClcXG4yNzE0OlxcdHtcXG4yNzE1OlxcdFxcdGludCBlcnIsIGxlbiwgY291bnQsIGNvcHljb3VudCwgbXNmX3NpemU7XFxuMjcxNjpcXHRcXHRzdHJ1Y3QgaXBfbXJlcW5cXHRpbXI7XFxuMjcxNzpcXHRcXHRfX2JlMzIgYWRkciA9IG1zZi1cXHUwMDNlaW1zZl9tdWx0aWFkZHI7XFxuMjcxODpcXHRcXHRzdHJ1Y3QgaXBfbWNfc29ja2xpc3QgKnBtYztcXG4yNzE5OlxcdFxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjtcXG4yNzIwOlxcdFxcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTtcXG4yNzIxOlxcdFxcdHN0cnVjdCBpcF9zZl9zb2NrbGlzdCAqcHNsO1xcbjI3MjI6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xcbjI3MjM6XFx0XFxuMjcyNDpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbjI3MjU6XFx0XFxuMjcyNjpcXHRcXHRpZiAoIWlwdjRfaXNfbXVsdGljYXN0KGFkZHIpKVxcbjI3Mjc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjcyODpcXHRcXG4yNzI5OlxcdFxcdGltci5pbXJfbXVsdGlhZGRyLnNfYWRkciA9IG1zZi1cXHUwMDNlaW1zZl9tdWx0aWFkZHI7XFxuMjczMDpcXHRcXHRpbXIuaW1yX2FkZHJlc3Muc19hZGRyID0gbXNmLVxcdTAwM2VpbXNmX2ludGVyZmFjZTtcXG4yNzMxOlxcdFxcdGltci5pbXJfaWZpbmRleCA9IDA7XFxuMjczMjpcXHRcXHRpbl9kZXYgPSBpcF9tY19maW5kX2RldihuZXQsIFxcdTAwMjZpbXIpO1xcbjI3MzM6XFx0XFxuMjczNDpcXHRcXHRpZiAoIWluX2Rldikge1xcbjI3MzU6XFx0XFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4yNzM2OlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4yNzM3OlxcdFxcdH1cXG4yNzM4OlxcdFxcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xcbjI3Mzk6XFx0XFxuMjc0MDpcXHRcXHRmb3JfZWFjaF9wbWNfcnRubChpbmV0LCBwbWMpIHtcXG4yNzQxOlxcdFxcdFxcdGlmIChwbWMtXFx1MDAzZW11bHRpLmltcl9tdWx0aWFkZHIuc19hZGRyID09IG1zZi1cXHUwMDNlaW1zZl9tdWx0aWFkZHIgXFx1MDAyNlxcdTAwMjZcXG4yNzQyOlxcdFxcdFxcdCAgICBwbWMtXFx1MDAzZW11bHRpLmltcl9pZmluZGV4ID09IGltci5pbXJfaWZpbmRleClcXG4yNzQzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3NDQ6XFx0XFx0fVxcbjI3NDU6XFx0XFx0aWYgKCFwbWMpXFx0XFx0LyogbXVzdCBoYXZlIGEgcHJpb3Igam9pbiAqL1xcbjI3NDY6XFx0XFx0XFx0Z290byBkb25lO1xcbjI3NDc6XFx0XFx0bXNmLVxcdTAwM2VpbXNmX2Ztb2RlID0gcG1jLVxcdTAwM2VzZm1vZGU7XFxuMjc0ODpcXHRcXHRwc2wgPSBydG5sX2RlcmVmZXJlbmNlKHBtYy1cXHUwMDNlc2ZsaXN0KTtcXG4yNzQ5OlxcdFxcdGlmICghcHNsKSB7XFxuMjc1MDpcXHRcXHRcXHRjb3VudCA9IDA7XFxuMjc1MTpcXHRcXHR9IGVsc2Uge1xcbjI3NTI6XFx0XFx0XFx0Y291bnQgPSBwc2wtXFx1MDAzZXNsX2NvdW50O1xcbjI3NTM6XFx0XFx0fVxcbjI3NTQ6XFx0XFx0Y29weWNvdW50ID0gY291bnQgXFx1MDAzYyBtc2YtXFx1MDAzZWltc2ZfbnVtc3JjID8gY291bnQgOiBtc2YtXFx1MDAzZWltc2ZfbnVtc3JjO1xcbjI3NTU6XFx0XFx0bGVuID0gZmxleF9hcnJheV9zaXplKHBzbCwgc2xfYWRkciwgY29weWNvdW50KTtcXG4yNzU2OlxcdFxcdG1zZi1cXHUwMDNlaW1zZl9udW1zcmMgPSBjb3VudDtcXG4yNzU3OlxcdFxcdG1zZl9zaXplID0gSVBfTVNGSUxURVJfU0laRShjb3B5Y291bnQpO1xcbjI3NTg6XFx0XFxuMjc1OTpcXHRcXHQvKiBUaGUgc291cmNlIGxpc3QgaXMgc2l6ZWQgYnkgdGhlIGltc2ZfbnVtc3JjIHRoZSBjYWxsZXIgbGVmdCBpblxcbjI3NjA6XFx0XFx0ICogb3B0dmFsLCBub3QgYnkgb3B0bGVuLCB3aGljaCBvbmx5IGhhcyB0byBjb3ZlciB0aGUgZml4ZWQgcGFydC5cXG4yNzYxOlxcdFxcdCAqL1xcbjI3NjI6XFx0XFx0ZXJyID0gc29ja29wdF9leHBhbmRfb3V0KG9wdCwgbXNmX3NpemUpO1xcbjI3NjM6XFx0XFx0aWYgKGVycilcXG4yNzY0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjc2NTpcXHRcXG4yNzY2OlxcdFxcdG9wdC1cXHUwMDNlb3B0bGVuID0gbXNmX3NpemU7XFxuMjc2NzpcXHRcXHRpZiAoY29weV90b19pdGVyKG1zZiwgSVBfTVNGSUxURVJfU0laRSgwKSwgXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpICE9XFxuMjc2ODpcXHRcXHQgICAgSVBfTVNGSUxURVJfU0laRSgwKSlcXG4yNzY5OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjI3NzA6XFx0XFx0aWYgKGxlbiBcXHUwMDI2XFx1MDAyNiBjb3B5X3RvX2l0ZXIocHNsLVxcdTAwM2VzbF9hZGRyLCBsZW4sIFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXFxuMjc3MTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yNzcyOlxcdFxcdHJldHVybiAwO1xcbjI3NzM6XFx0ZG9uZTpcXG4yNzc0OlxcdFxcdHJldHVybiBlcnI7XFxuMjc3NTpcXHR9XFxuMjc3NjpcXHRcXG4yNzc3OlxcdGludCBpcF9tY19nc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZ3JvdXBfZmlsdGVyICpnc2YsXFxuMjc3ODpcXHRcXHRcXHQgc29ja3B0cl90IG9wdHZhbCwgc2l6ZV90IHNzX29mZnNldClcXG4yNzc5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6NDMuOTU3NTMxNTYyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NjEzOTQ2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHNvY2twdHJfdG9fc29ja29wdGAgaW4gYG5ldC9zb2NrZXQuY2AqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHNvbWV0aGluZyBpbiB0aGUgbmV0d29yayBzb2NrZXQgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBgc29ja3B0cl90b19zb2Nrb3B0YC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSBpdCBzb3VuZHMgbGlrZSBpdCdzIGhhbmRsaW5nIHRoZSB0cmFuc2xhdGlvbiBiZXR3ZWVuIGEgZ2VuZXJpYyBzb2NrZXQgcG9pbnRlciBhbmQgdGhlIHNvY2tldCBvcHRpb25zLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhIHRvIHVuZGVyc3RhbmQsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHN1YnRsZSBiZWhhdmlvciBjaGFuZ2VzLiBJIG5lZWQgdG8gYmUgdGhpbmtpbmcgYWJvdXQgZGF0YSBzdHJ1Y3R1cmVzIGhlcmUuIFdoYXQga2luZCBvZiBwb2ludGVyIGlzIGBzb2NrcHRyYD8gSXMgaXQgYSB1c2VyLXNwYWNlIHBvaW50ZXI/IEtlcm5lbCBzcGFjZT8gVGhpcyBpbmZsdWVuY2VzIGhvdyB0aGlzIHRyYW5zbGF0aW9uIGFjdHVhbGx5IG9jY3VycywgYW5kIGFueSBtaXN0YWtlcyBoZXJlIGNhbiBsZWFkIHRvIGlzc3Vlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBvcHRpb24gZGF0YSBpdHNlbGYgaXMgcGFzc2VkOyBpcyBpdCBjb3BpZWQ/IEFjY2Vzc2VkIGRpcmVjdGx5PyBBbnkga2luZCBvZiBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyB3b3VsZCBiZSBleHRyZW1lbHkgaW50ZXJlc3RpbmcuIEknbGwgbmVlZCB0byBjb25zaWRlciB0aGlzIGluIGxpZ2h0IG9mIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyBnb2luZyB0byByZXF1aXJlIGEgZGVlcCBkaXZlIHRvIGZ1bGx5IGdyYXNwIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBMZXQncyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHNvY2tldCBvcHRpb25zIGJlaW5nIHNldCwgb3IgcmVhZCwgb3IgYm90aC4gVW5kZXJzdGFuZGluZyB0aGF0IGRpZmZlcmVuY2Ugd2lsbCBiZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4OTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA3OjQ3LjkxODkyOTM3MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjc4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NvY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MzU6XFx0ICogSW5pdGlhbGl6ZSBhIHNvY2tvcHRfdCBmcm9tIHNvY2twdHIgb3B0dmFsL29wdGxlbiwgc2V0dGluZyB1cCBpb3ZfaXRlclxcbjI0MzY6XFx0ICogZm9yIGJvdGggaW5wdXQgYW5kIG91dHB1dCBkaXJlY3Rpb25zLlxcbjI0Mzc6XFx0ICogSXQgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgYm90aCBpb3YgcG9pbnRzIHRvIHRoZSBzYW1lIGRhdGEsIGJ1dCxcXG4yNDM4OlxcdCAqIC5pdGVyX2luIGlzIHJlYWQtb25seSBhbmQgLml0ZXJfb3V0IGlzIHdyaXRlLW9ubHkgYnkgdGhlIHByb3RvY29sIGNhbGxiYWNrc1xcbjI0Mzk6XFx0ICovXFxuMjQ0MDpcXHRpbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLFxcbjI0NDE6XFx0XFx0XFx0ICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIHN0cnVjdCBrdmVjICprdmVjKVxcbjI0NDI6XFx0e1xcbjI0NDM6XFx0XFx0aW50IGtvcHRsZW47XFxuMjQ0NDpcXHRcXG4yNDQ1OlxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2a29wdGxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXFxuMjQ0NjpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yNDQ3OlxcdFxcbjI0NDg6XFx0XFx0aWYgKGtvcHRsZW4gXFx1MDAzYyAwKVxcbjI0NDk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjQ1MDpcXHRcXG4yNDUxOlxcdFxcdGlmIChvcHR2YWwuaXNfa2VybmVsKSB7XFxuMjQ1MjpcXHRcXHRcXHRrdmVjLVxcdTAwM2Vpb3ZfYmFzZSA9IG9wdHZhbC5rZXJuZWw7XFxuMjQ1MzpcXHRcXHRcXHRrdmVjLVxcdTAwM2Vpb3ZfbGVuID0ga29wdGxlbjtcXG4yNDU0OlxcdFxcdFxcdGlvdl9pdGVyX2t2ZWMoXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQsIElURVJfREVTVCwga3ZlYywgMSwga29wdGxlbik7XFxuMjQ1NTpcXHRcXHRcXHRpb3ZfaXRlcl9rdmVjKFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfaW4sIElURVJfU09VUkNFLCBrdmVjLCAxLCBrb3B0bGVuKTtcXG4yNDU2OlxcdFxcdH0gZWxzZSB7XFxuMjQ1NzpcXHRcXHRcXHRpb3ZfaXRlcl91YnVmKFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfb3V0LCBJVEVSX0RFU1QsIG9wdHZhbC51c2VyLCBrb3B0bGVuKTtcXG4yNDU4OlxcdFxcdFxcdGlvdl9pdGVyX3VidWYoXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9pbiwgSVRFUl9TT1VSQ0UsIG9wdHZhbC51c2VyLFxcbjI0NTk6XFx0XFx0XFx0XFx0ICAgICAga29wdGxlbik7XFxuMjQ2MDpcXHRcXHR9XFxuMjQ2MTpcXHRcXHRvcHQtXFx1MDAzZW9wdGxlbiA9IGtvcHRsZW47XFxuMjQ2MjpcXHRcXG4yNDYzOlxcdFxcdHJldHVybiAwO1xcbjI0NjQ6XFx0fVxcbjI0NjU6XFx0XFxuMjQ2NjpcXHRpbnQgZG9fc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGJvb2wgY29tcGF0LCBpbnQgbGV2ZWwsXFxuMjQ2NzpcXHRcXHRcXHQgICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXFxuMjQ2ODpcXHR7XFxuMjQ2OTpcXHRcXHRpbnQgbWF4X29wdGxlbiBfX21heWJlX3VudXNlZCA9IDA7XFxuMjQ3MDpcXHRcXHRjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHM7XFxuMjQ3MTpcXHRcXHRzdHJ1Y3Qga3ZlYyBrdmVjO1xcbjI0NzI6XFx0XFx0c29ja29wdF90IG9wdDtcXG4yNDczOlxcdFxcdGludCBlcnI7XFxuMjQ3NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6NDcuOTE5MzAwNDMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MzQwMzAyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG5ldC5oYCB0byBUcmFjZSBTb2NrZXQgT3B0aW9ucyoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgc29tZSBuZXR3b3JrIHNvY2tldCBiZWhhdmlvciwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGV4cGFuZHMgc29ja2V0IG9wdGlvbnMsIHNwZWNpZmljYWxseSwgdGhhdCBgc29ja29wdF9leHBhbmRfb3V0YCBtYWNyby4gUmlnaHQsIGxldCdzIHB1bGwgdXAgdGhlIGBpbmNsdWRlL2xpbnV4L25ldC5oYCBmaWxlLiBJJ2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoaXMgbWFjcm8gaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBzb2NrZXQgb3B0aW9uIGluZnJhc3RydWN0dXJlLiBJJ20gYXNzdW1pbmcgaXQgcmVsYXRlcyB0byB1c2VyIHNwYWNlIG9yIHRoZSBuZXR3b3JrIHN0YWNrIHByZXBhcmluZyBvcHRpb25zIGJlZm9yZSBwYXNzaW5nIHRoZW0gb3V0LiBHb3R0YSB0cmFjZSB0aGUgY2FsbGluZyBjb250ZXh0cyB0byBzZWUgaWYgdGhpcyBpcyByZWxhdGVkIHRvIGEgdnVsbmVyYWJpbGl0eS4gTGV0J3Mgc2VlIGhvdyBgc29ja29wdF9leHBhbmRfb3V0YCBoYW5kbGVzIHRoZSBjb3B5aW5nLCB2YWxpZGF0aW9uLCBhbmQgZXhwYW5zaW9uIG9mIHNvY2tldCBvcHRpb25zLCBhbmQgd2hhdCB0eXBlIHNhZmV0eSBjb25zaWRlcmF0aW9ucyBhcmUgaW4gcGxheS4gQW55IG9mZi1ieS1vbmUgZXJyb3JzPyBQb3NzaWJsZSBpbnRlZ2VyIG92ZXJmbG93cz8gSSBzaG91bGQgY2hlY2sgaXRzIHVzZSBpbiB0aGUgY29kZSBiYXNlIOKAkyBsaWtlbHkgdGhlIGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgIGltcGxlbWVudGF0aW9ucyBhcmUgdGhlIHByaW1hcnkgYXJlYXMgb2YgaW50ZXJlc3QuIEdvdHRhIHF1aWNrbHkgc2tpbSB0aG9zZSBmdW5jdGlvbnMgYW5kIHNlZSB3aGF0IHRoaXMgbWFjcm8gaXMgZG9pbmcgaW4gdGhlIGNvbnRleHQgb2YgYHN0cnVjdCBzb2NrZXRgIG1hbmlwdWxhdGlvbiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIFdlJ3JlIGxvb2tpbmcgZm9yIGhvdyB0aGlzIG1hY3JvIHByb3RlY3RzIGFnYWluc3QgdXNlcmxhbmQgYnVmZmVyIG92ZXJydW5zIG9yIG90aGVyIHJlbGF0ZWQgZXhwbG9pdGFibGUgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg4MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6NTAuNTUzMzQzOTgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L25ldC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcbiAgNjE6XFx0XFx0aWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSlcXG4gIDYyOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAgNjM6XFx0XFx0aWYgKGxlbiBcXHUwMDNjIDApXFxuICA2NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0aW92X2l0ZXJfdWJ1ZihcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCwgSVRFUl9ERVNULCBvcHR2YWwsIGxlbik7XFxuICA2NzpcXHRcXHRpb3ZfaXRlcl91YnVmKFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfaW4sIElURVJfU09VUkNFLCBvcHR2YWwsIGxlbik7XFxuICA2ODpcXHRcXHRvcHQtXFx1MDAzZW9wdGxlbiA9IGxlbjtcXG4gIDY5OlxcdFxcbiAgNzA6XFx0XFx0cmV0dXJuIDA7XFxuICA3MTpcXHR9XFxuICA3MjpcXHRcXG4gIDczOlxcdC8qXFxuICA3NDpcXHQgKiBHcm93IG9wdHZhbCB0byBAc2l6ZSwgZm9yIHRoZSBvcHRpb25zIHdob3NlIHJlcGx5IGlzIHNpemVkIGJ5IGEgY291bnQgdGhlXFxuICA3NTpcXHQgKiBjYWxsZXIgbGVmdCBpbiBvcHR2YWwgcmF0aGVyIHRoYW4gYnkgb3B0bGVuLiBUaG9zZSB3cml0ZSBwYXN0IG9wdGxlbiB0b2RheVxcbiAgNzY6XFx0ICogYW5kIHVzZXJzcGFjZSByZWxpZXMgb24gaXQuXFxuICA3NzpcXHQgKlxcbiAgNzg6XFx0ICogQ2FsbCBpdCBiZWZvcmUgd3JpdGluZyB0aHJvdWdoIG9wdC1cXHUwMDNlaXRlcl9vdXQ6IGl0IHJlLWFuY2hvcnMgdGhlIGl0ZXJhdG9yIGF0XFxuICA3OTpcXHQgKiB0aGUgaGVhZCBvZiBvcHR2YWwuIE9ubHkgYSB1c2VyIGJ1ZmZlciBjYW4gYmUgbG9uZ2VyIHRoYW4gdGhlIG9wdGxlbiB0aGVcXG4gIDgwOlxcdCAqIGNhbGxlciBkZWNsYXJlZCwgc28gYSBrZXJuZWwtYmFja2VkIG9wdHZhbCBpcyByZWZ1c2VkIHdpdGggLUVJTlZBTC5cXG4gIDgxOlxcdCAqL1xcbiAgODI6XFx0c3RhdGljIGlubGluZSBpbnQgc29ja29wdF9leHBhbmRfb3V0KHNvY2tvcHRfdCAqb3B0LCBzaXplX3Qgc2l6ZSlcXG4gIDgzOlxcdHtcXG4gIDg0OlxcdFxcdGlmIChzaXplIFxcdTAwM2M9IGlvdl9pdGVyX2NvdW50KFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfb3V0KSlcXG4gIDg1OlxcdFxcdFxcdHJldHVybiAwO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFpdGVyX2lzX3VidWYoXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpKSlcXG4gIDg4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRpb3ZfaXRlcl91YnVmKFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfb3V0LCBJVEVSX0RFU1QsIG9wdC1cXHUwMDNlaXRlcl9vdXQudWJ1Ziwgc2l6ZSk7XFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdHJldHVybiAwO1xcbiAgOTM6XFx0fVxcbiAgOTQ6XFx0XFxuICA5NTpcXHRpbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuLFxcbiAgOTY6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdmVjICprdmVjKTtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0c3RydWN0IHBvbGxfdGFibGVfc3RydWN0O1xcbiAgOTk6XFx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbztcXG4gMTAwOlxcdHN0cnVjdCBpbm9kZTtcXG4gMTAxOlxcdHN0cnVjdCBmaWxlO1xcbiAxMDI6XFx0c3RydWN0IG5ldDtcXG4gMTAzOlxcdFxcbiAxMDQ6XFx0LyogSGlzdG9yaWNhbGx5LCBTT0NLV1FfQVNZTkNfTk9TUEFDRSBcXHUwMDI2IFNPQ0tXUV9BU1lOQ19XQUlUREFUQSB3ZXJlIGxvY2F0ZWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6NTAuNTUzNTUxMDkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4MDMzNzQ2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKktjb25maWcgRGVwZW5kZW5jeSBBbmFseXNpcyoqXG5cbk9rYXksIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zIGZvciB0aGlzIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgYG5ldC9pcHY0L2lnbXAuY2AgYW5kIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYC4gU2luY2UgdGhlc2UgYXJlIHdpdGhpbiB0aGUgYG5ldC9pcHY0YCBkaXJlY3RvcnksIEknbSBwcmV0dHkgY29uZmlkZW50IHRoZXkgcmVsYXRlIHRvIElQdjQgbmV0d29ya2luZy4gVGhhdCB0eXBpY2FsbHkgbWVhbnMgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19ORVRgIGFyZSBpbnZvbHZlZCDigJMgdGhvc2UgYXJlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cy4gTm93LCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgTWFrZWZpbGVzLiBJJ2xsIHByb2JhYmx5IGZpbmQgdGhlIGRlcGVuZGVuY2llcyBsaXN0ZWQgZWl0aGVyIGluIGBuZXQvaXB2NC9NYWtlZmlsZWAgb3IgcG90ZW50aWFsbHkgaW4gdGhlIHRvcC1sZXZlbCBgbmV0L01ha2VmaWxlYC4gSSdtIGV4cGVjdGluZyB0byBjb25maXJtIHRoZSBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX05FVGAgZGVwZW5kZW5jaWVzLCBhbmQgbWF5YmUgZmluZCBhIGZldyBtb3JlIHNwZWNpZmljIG9uZXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZi4gTGV0J3Mgc2VlIHdoYXQgdGhlIE1ha2VmaWxlcyByZXZlYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODc5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowNzo1NC4zNTY5MzAxMTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDYyNjU5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZ21wLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTMtXFx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNDpcXHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDc6NTQuNDcxNTYxMTMzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MDI3MTg5OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjQgTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIElQdjQgc3RhY2ssIHNvIGxldCdzIHN0YXJ0IHdpdGggdGhlIGBuZXQvaXB2NC9NYWtlZmlsZWAuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZSBmaXJzdCAyNSBsaW5lcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaW5pdGlhbCBvdmVydmlldy4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIHNlY3Rpb24gaXMgcHJvYmFibHkgZGVmaW5pbmcgc29tZSBiYXNpYyB2YXJpYWJsZXMsIGluY2x1ZGUgcGF0aHMsIG1heWJlIHNldHRpbmcgdXAgc29tZSBpbml0aWFsIGJ1aWxkIHRhcmdldHMgb3IgZGVwZW5kZW5jaWVzIGZvciB0aGUgSVB2NCBtb2R1bGUuIENvdWxkIGJlIGluaXRpYWwgY29uZmlndXJhdGlvbiwgb3IgdGhlIGNvcmUgaW5jbHVkZSBkaXJlY3RpdmVzLiBJJ2xsIHNjYW4gdGhvc2UgbGluZXMgYW5kIGdldCBhIGJldHRlciBmZWVsIGZvciBpdHMgaW5pdGlhbCBzZXR1cC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMzOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA3OjU3LjI3NDI4Mjk4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IFRDUC9JUCAoSU5FVCkgbGF5ZXIuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxcXFxuICAgNzpcXHRcXHQgICAgIGlwX2lucHV0Lm8gaXBfZnJhZ21lbnQubyBpcF9mb3J3YXJkLm8gaXBfb3B0aW9ucy5vIFxcXFxcXG4gICA4OlxcdFxcdCAgICAgaXBfb3V0cHV0Lm8gaXBfc29ja2dsdWUubyBpbmV0X2hhc2h0YWJsZXMubyBcXFxcXFxuICAgOTpcXHRcXHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcbiAgMTA6XFx0XFx0ICAgICB0Y3AubyB0Y3BfaW5wdXQubyB0Y3Bfb3V0cHV0Lm8gdGNwX3RpbWVyLm8gdGNwX2lwdjQubyBcXFxcXFxuICAxMTpcXHRcXHQgICAgIHRjcF9taW5pc29ja3MubyB0Y3BfY29uZy5vIHRjcF9tZXRyaWNzLm8gdGNwX2Zhc3RvcGVuLm8gXFxcXFxcbiAgMTI6XFx0XFx0ICAgICB0Y3BfcmVjb3ZlcnkubyB0Y3BfdWxwLm8gXFxcXFxcbiAgMTM6XFx0XFx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXFxcXG4gIDE0OlxcdFxcdCAgICAgdWRwX29mZmxvYWQubyBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyBpZ21wLm8gXFxcXFxcbiAgMTU6XFx0XFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxcXFxuICAxNjpcXHRcXHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXFxcXG4gIDE3OlxcdFxcdCAgICAgbWV0cmljcy5vIG5ldGxpbmsubyBuZXh0aG9wLm8gdWRwX3R1bm5lbF9zdHViLm9cXG4gIDE4OlxcdFxcbiAgMTk6XFx0b2JqLSQoQ09ORklHX05FVF9JUF9UVU5ORUwpICs9IGlwX3R1bm5lbC5vXFxuICAyMDpcXHRvYmotJChDT05GSUdfU1lTQ1RMKSArPSBzeXNjdGxfbmV0X2lwdjQub1xcbiAgMjE6XFx0b2JqLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mub1xcbiAgMjI6XFx0b2JqLSQoQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUykgKz0gZmliX3J1bGVzLm9cXG4gIDIzOlxcdG9iai0kKENPTkZJR19JUF9NUk9VVEUpICs9IGlwbXIub1xcbiAgMjQ6XFx0b2JqLSQoQ09ORklHX0lQX01ST1VURV9DT01NT04pICs9IGlwbXJfYmFzZS5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfTkVUX0lQSVApICs9IGlwaXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowNzo1Ny4yNzQzNDQ5NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODg1MDMzOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgaW5ldGAgRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBjb250cm9sbGluZyBgaW5ldGAuIFRoZSBoaW50IGlzIGBDT05GSUdfSU5FVGAsIHdoaWNoIHN1Z2dlc3RzIGl0J3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgc3RhbmRhcmQgcGxhY2VzIGluIHRoZSBrZXJuZWwgc291cmNlLCB0eXBpY2FsbHkgYG5ldC9LY29uZmlnYCBvciwgc2luY2UgaXQncyBpbnRlcm5ldC1yZWxhdGVkLCBgbmV0L2lwdjQvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb3IgcmVmZXJlbmNlIHRvIGBDT05GSUdfSU5FVGAgYW5kIHNlZSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQgYW5kIHdoYXQgaXRzIGRlcGVuZGVuY2llcyBtaWdodCBiZS4gVGltZSB0byBkaXZlIGludG8gdGhvc2UgS2NvbmZpZyBmaWxlcyBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA5OSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDg6MDMuMTU5MzgxOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNzE5MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9LY29uZmlnLTExMy1cXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcXG5uZXQvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA4OjAzLjMyMjEwOTc3OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTQ5MzA2OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsJ3MgSVAgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgbXVsdGljYXN0IHNldHRpbmdzIGFyZSBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBuZXQvaXB2NC9LY29uZmlnYC4gVGhhdCdzIHVzdWFsbHkgdGhlIHBsYWNlIHdoZXJlIHlvdSdsbCBmaW5kIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIElQdjQgbmV0d29ya2luZywgaW5jbHVkaW5nIGFueXRoaW5nIHNwZWNpZmljIHRvIElHTVAgb3IgdGhlIG11bHRpY2FzdCBmZWF0dXJlcyBpbiBnZW5lcmFsLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGtleXdvcmRzLCBvcHRpb25zLCBvciBkZXBlbmRlbmNpZXMgdGhlcmUuIEknbSBlc3BlY2lhbGx5IGxvb2tpbmcgdG8gc2VlIGlmIGBDT05GSUdfSVBfTVVMVElDQVNUYCBpcyB1c2VkLCBhcyBpdCBvZnRlbiBmb3JtcyB0aGUgYmFzaXMgZm9yIGVuYWJsaW5nIHRoZSBjb3JlIG11bHRpY2FzdCBmdW5jdGlvbmFsaXR5LlxuXG5UaGVuLCBJJ2xsIGRpdmUgYSBiaXQgZGVlcGVyIGludG8gdGhlIGNvZGUuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGluIGBuZXQvaXB2NC9pZ21wLmNgLiBgaWdtcC5jYCBpcyB0aGUgbW9zdCBvYnZpb3VzIGxvY2F0aW9uIGZvciBJR01QLXNwZWNpZmljIGNvZGUsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgZ3JvdXAgbWVtYmVyc2hpcHMgYXJlIGhhbmRsZWQuIEknbGwgdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggdGhpcyBmaWxlIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBsaWtlIGAjaWZkZWZgIG9yIGNvbmZpZ3VyYXRpb24gbWFjcm9zIHN0YXJ0aW5nIHdpdGggYENPTkZJR19gLiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBkaWZmZXJlbnQgY29kZSBibG9ja3MgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIGhvdyB0aGVzZSBtdWx0aWNhc3Qgb3B0aW9ucyBhcmUgZW5hYmxlZCwgZGlzYWJsZWQsIGFuZCBjb25maWd1cmVkLiBJJ20gaG9waW5nIHRvIGRpc2NvdmVyIHRoZSBwcmVjaXNlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFuZCB0aGVpciBpbmZsdWVuY2Ugb24gdGhlIGNvZGUgdGhhdCBoYW5kbGVzIElHTVAgYW5kIHJlbGF0ZWQgbXVsdGljYXN0IG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzk1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDg6MDkuNDcxNDE4OTA2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk3OTQzMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pZ21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaWdtcC5jLTEwMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQuaFxcdTAwM2VcXG5uZXQvaXB2NC9pZ21wLmM6MTAyOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXFxubmV0L2lwdjQvaWdtcC5jLTEwMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvbXJvdXRlLmhcXHUwMDNlXFxubmV0L2lwdjQvaWdtcC5jLTEwNC0jZW5kaWZcXG5uZXQvaXB2NC9pZ21wLmM6MTA1OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbm5ldC9pcHY0L2lnbXAuYy0xMDYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb2NfZnMuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xMDktXFxubmV0L2lwdjQvaWdtcC5jOjExMDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xMTEtLyogUGFyYW1ldGVyIG5hbWVzIGFuZCB2YWx1ZXMgYXJlIHRha2VuIGZyb20gaWdtcC12Mi0wNiBkcmFmdCAqL1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTIyMD1zdGF0aWMgdm9pZCBpcF9zZl9saXN0X2NsZWFyX2FsbChzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIzMC1cXG5uZXQvaXB2NC9pZ21wLmM6MjMxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIzMi1cXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xMTI5PWludCBpZ21wX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTExNjktXFx0Y2FzZSBJR01QX1BJTTpcXG5uZXQvaXB2NC9pZ21wLmM6MTE3MDojaWZkZWYgQ09ORklHX0lQX1BJTVNNX1YxXFxubmV0L2lwdjQvaWdtcC5jLTExNzEtXFx0XFx0cmV0dXJuIHBpbV9yY3ZfdjEoc2tiKTtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xMjE5PXN0YXRpYyB2b2lkIGlwX21jX2ZpbHRlcl9kZWwoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xMjI3LVxcbm5ldC9pcHY0L2lnbXAuYzoxMjI4OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTEyMjktLypcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xMzU4PXN0YXRpYyB2b2lkIF9faWdtcF9ncm91cF9kcm9wcGVkKHN0cnVjdCBpcF9tY19saXN0ICppbSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTEzNjAtXFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW0tXFx1MDAzZWludGVyZmFjZTtcXG5uZXQvaXB2NC9pZ21wLmM6MTM2MTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xMzYyLVxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaW5fZGV2LVxcdTAwM2VkZXYpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTEzNzAtXFxubmV0L2lwdjQvaWdtcC5jOjEzNzE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTM3Mi1cXHRpZiAoaW0tXFx1MDAzZW11bHRpYWRkciA9PSBJR01QX0FMTF9IT1NUUylcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xNDAyPXN0YXRpYyB2b2lkIGlnbXBfZ3JvdXBfYWRkZWQoc3RydWN0IGlwX21jX2xpc3QgKmltKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE0MDQtXFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW0tXFx1MDAzZWludGVyZmFjZTtcXG5uZXQvaXB2NC9pZ21wLmM6MTQwNTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xNDA2LVxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaW5fZGV2LVxcdTAwM2VkZXYpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE0MTMtXFxubmV0L2lwdjQvaWdtcC5jOjE0MTQ6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTQxNS1cXHRpZiAoaW0tXFx1MDAzZW11bHRpYWRkciA9PSBJR01QX0FMTF9IT1NUUylcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xNTcwPXN0YXRpYyB2b2lkIF9fX19pcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcixcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xNjE1LVxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZpbS1cXHUwMDNlbG9jayk7XFxubmV0L2lwdjQvaWdtcC5jOjE2MTY6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTYxNy1cXHR0aW1lcl9zZXR1cChcXHUwMDI2aW0tXFx1MDAzZXRpbWVyLCBpZ21wX3RpbWVyX2V4cGlyZSwgMCk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTYyNS1cXG5uZXQvaXB2NC9pZ21wLmM6MTYyNjojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xNjI3LVxcdGlnbXB2M19kZWxfZGVscmVjKGluX2RldiwgaW0pO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE3OTQ9c3RhdGljIHZvaWQgaXBfbWNfcmVqb2luX2dyb3VwcyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxubmV0L2lwdjQvaWdtcC5jLTE3OTUte1xcbm5ldC9pcHY0L2lnbXAuYzoxNzk2OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE3OTctXFx0c3RydWN0IGlwX21jX2xpc3QgKmltO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE4NzY9dm9pZCBpcF9tY19yZW1hcChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTg4Mi1cXHRmb3JfZWFjaF9wbWNfcnRubChpbl9kZXYsIHBtYykge1xcbm5ldC9pcHY0L2lnbXAuYzoxODgzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE4ODQtXFx0XFx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBwbWMpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE4OTI9dm9pZCBpcF9tY19kb3duKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xOTAwLVxcbm5ldC9pcHY0L2lnbXAuYzoxOTAxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE5MDItXFx0V1JJVEVfT05DRShpbl9kZXYtXFx1MDAzZW1yX2lmY19jb3VudCwgMCk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTkxMi1cXG5uZXQvaXB2NC9pZ21wLmM6MTkxMzojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xOTE0LXN0YXRpYyB2b2lkIGlwX21jX3Jlc2V0KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xOTI4PXZvaWQgaXBfbWNfaW5pdF9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE5MzEtXFxubmV0L2lwdjQvaWdtcC5jOjE5MzI6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTkzMy1cXHR0aW1lcl9zZXR1cChcXHUwMDI2aW5fZGV2LVxcdTAwM2Vtcl9ncV90aW1lciwgaWdtcF9ncV90aW1lcl9leHBpcmUsIDApO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE5NDM9dm9pZCBpcF9tY191cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTk1Mi1cXHRmb3JfZWFjaF9wbWNfcnRubChpbl9kZXYsIHBtYykge1xcbm5ldC9pcHY0L2lnbXAuYzoxOTUzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE5NTQtXFx0XFx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBwbWMpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE5NjQ9dm9pZCBpcF9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTk3MS1cXHRpcF9tY19kb3duKGluX2Rldik7XFxubmV0L2lwdjQvaWdtcC5jOjE5NzI6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTk3My1cXHRpZ21wdjNfY2xlYXJfZGVscmVjKGluX2Rldik7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjAyMj1zdGF0aWMgaW50IGlwX21jX2RlbDFfc3JjKHN0cnVjdCBpcF9tY19saXN0ICpwbWMsIGludCBzZm1vZGUsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjA0Mi1cXHRpZiAoIXBzZi1cXHUwMDNlc2ZfY291bnRbTUNBU1RfSU5DTFVERV0gXFx1MDAyNlxcdTAwMjYgIXBzZi1cXHUwMDNlc2ZfY291bnRbTUNBU1RfRVhDTFVERV0pIHtcXG5uZXQvaXB2NC9pZ21wLmM6MjA0MzojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0yMDQ0LVxcdFxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IHBtYy1cXHUwMDNlaW50ZXJmYWNlO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIwNTQtXFx0XFx0XFx0XFx0XFx0ICAgcG1jX2RlcmVmZXJlbmNlKHBzZi1cXHUwMDNlc2ZfbmV4dCwgcG1jKSk7XFxubmV0L2lwdjQvaWdtcC5jOjIwNTU6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjA1Ni1cXHRcXHRpZiAocHNmLVxcdTAwM2VzZl9vbGRpbiBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIwNzUtXFxubmV0L2lwdjQvaWdtcC5jOjIwNzY6I2lmbmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIwNzctI2RlZmluZSBpZ21wX2lmY19ldmVudCh4KVxcdGRvIHsgfSB3aGlsZSAoMClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0yMDgwPXN0YXRpYyBpbnQgaXBfbWNfZGVsX3NyYyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiAqcG1jYSwgaW50IHNmbW9kZSxcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yMTAwLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbm5ldC9pcHY0L2lnbXAuYzoyMTAxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIxMDItXFx0c2ZfbWFya3N0YXRlKHBtYyk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjEyMC1cXHQgICAgcG1jLVxcdTAwM2VzZmNvdW50W01DQVNUX0lOQ0xVREVdKSB7XFxubmV0L2lwdjQvaWdtcC5jOjIxMjE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjEyMi1cXHRcXHRzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIxMjctXFx0XFx0cG1jLVxcdTAwM2VzZm1vZGUgPSBNQ0FTVF9JTkNMVURFO1xcbm5ldC9pcHY0L2lnbXAuYzoyMTI4OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIxMjktXFx0XFx0cG1jLVxcdTAwM2VjcmNvdW50ID0gaW5fZGV2LVxcdTAwM2Vtcl9xcnYgPzogUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfaWdtcF9xcnYpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTIxNDY9c3RhdGljIGludCBpcF9tY19hZGQxX3NyYyhzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jLCBpbnQgc2Ztb2RlLFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIxNzMtXFxubmV0L2lwdjQvaWdtcC5jOjIxNzQ6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjE3NS1zdGF0aWMgdm9pZCBzZl9tYXJrc3RhdGUoc3RydWN0IGlwX21jX2xpc3QgKnBtYylcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0yMjYwPXN0YXRpYyBpbnQgaXBfbWNfYWRkX3NyYyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiAqcG1jYSwgaW50IHNmbW9kZSxcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yMjgxLVxcbm5ldC9pcHY0L2lnbXAuYzoyMjgyOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIyODMtXFx0c2ZfbWFya3N0YXRlKHBtYyk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjMwMS1cXHR9IGVsc2UgaWYgKGlzZXhjbHVkZSAhPSAocG1jLVxcdTAwM2VzZmNvdW50W01DQVNUX0VYQ0xVREVdICE9IDApKSB7XFxubmV0L2lwdjQvaWdtcC5jOjIzMDI6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjMwMy1cXHRcXHRzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIzMTItXFx0XFx0XFx0cG1jLVxcdTAwM2VzZm1vZGUgPSBNQ0FTVF9JTkNMVURFO1xcbm5ldC9pcHY0L2lnbXAuYzoyMzEzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIzMTQtXFx0XFx0LyogZWxzZSBubyBmaWx0ZXJzOyBrZWVwIG9sZCBtb2RlIGZvciByZXBvcnRzICovXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjkwMD1pbnQgaXBfY2hlY2tfbWNfcmN1KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIG1jX2FkZHIsIF9fYmUzMiBzcmNfYWRkciwgdTggcHJvdG8pXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjk0My1cXG5uZXQvaXB2NC9pZ21wLmM6Mjk0NDojaWYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcXG5uZXQvaXB2NC9pZ21wLmMtMjk0NS1zdHJ1Y3QgaWdtcF9tY19pdGVyX3N0YXRlIHtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0zMDMxPXN0YXRpYyBpbnQgaWdtcF9tY19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0zMDQyLVxcbm5ldC9pcHY0L2lnbXAuYzozMDQzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTMwNDQtXFx0XFx0cXVlcmllciA9IElHTVBfVjFfU0VFTihzdGF0ZS1cXHUwMDNlaW5fZGV2KSA/IFxcXCJWMVxcXCIgOlxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTMyNzQ9aW50IF9faW5pdCBpZ21wX21jX2luaXQodm9pZClcXG5uZXQvaXB2NC9pZ21wLmMtMzI3NS17XFxubmV0L2lwdjQvaWdtcC5jOjMyNzY6I2lmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpXFxubmV0L2lwdjQvaWdtcC5jLTMyNzctXFx0aW50IGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDg6MDkuNTgxMjE4Mjg0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2OTA3MTUyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBJUCBNdWx0aWNhc3QgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtdWx0aWNhc3Qgc3VwcG9ydC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgQ09ORklHX0lQX01VTFRJQ0FTVGAgb3B0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBsb2NhdGUgaXQgd2l0aGluIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyBpdCdzIHRoZSB1c3VhbCBsb2NhdGlvbiBmb3IgSVB2NC1zcGVjaWZpYyBuZXR3b3JraW5nIGZlYXR1cmVzLiBJIGV4cGVjdCB0aGlzIGNvbmZpZyBvcHRpb24gd2lsbCBiZSB0aGUgZm91bmRhdGlvbmFsIHN3aXRjaCBjb250cm9sbGluZyB0aGUgZW50aXJlIElQdjQgbXVsdGljYXN0IGZ1bmN0aW9uYWxpdHkuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGRlcGVuZGVuY2llcyBhbmQgc2VlIGhvdyBpdCBpbnRlcnBsYXlzIHdpdGggb3RoZXIgbmV0d29ya2luZyBmZWF0dXJlcyBhbmQgdGhlIG11bHRpY2FzdCBjb2RlIGl0c2VsZi4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwOTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowODoxNS4yNzE5MzU3MjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDI4NTIxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfTVVMVElDQVNUXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZy00LSNcXG5uZXQvaXB2NC9LY29uZmlnOjU6Y29uZmlnIElQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L0tjb25maWctNi1cXHRib29sIFxcXCJJUDogbXVsdGljYXN0aW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowODoxNS4zODIyMjU2OTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMwOTg0NDk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gSVB2NCBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUga2VybmVsJ3MgS2NvbmZpZyBmaWxlIGZvciBJUHY0LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBvZiBsb29raW5nIGF0IGBuZXQvaXB2NC9LY29uZmlnYCBhcm91bmQgbGluZSA1LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgdG9wLWxldmVsIG9wdGlvbnMgcmVsYXRlZCB0byBJUHY0IGFyZSBkZWZpbmVkLCBvciBwZXJoYXBzIHRoZSBpbmNsdXNpb24gb2Ygb3RoZXIgcmVsZXZhbnQgZmlsZXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGJ1aWxkLXRpbWUgZmxhZ3MsIGRlcGVuZGVuY2llcywgYW5kIHBlcmhhcHMgc29tZSBnZW5lcmFsIG1vZHVsZSBzZWxlY3Rpb25zIHRoYXQgd2lsbCBpbGx1bWluYXRlIHRoZSBjb2RlJ3MgYmVoYXZpb3IuIEkgYW0gYW50aWNpcGF0aW5nIHRoZSB0b3AtbGV2ZWwgaXRlbXMsIHNvIEkgd2lsbCBrbm93IHdoZXRoZXIgdG8gZGlnIGRlZXBlciBvciB3aGV0aGVyIHRvIGxvb2sgYXJvdW5kIGF0IGFub3RoZXIgS2NvbmZpZyBmaWxlLiBJIGNhbiBnZXQgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBJUHY0IHN1YnN5c3RlbSBmcm9tIHRoaXMgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDg6MTcuNjkyMDczOTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBJUCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb25maWcgSVBfTVVMVElDQVNUXFxuICAgNjpcXHRcXHRib29sIFxcXCJJUDogbXVsdGljYXN0aW5nXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGlzIGNvZGUgZm9yIGFkZHJlc3Npbmcgc2V2ZXJhbCBuZXR3b3JrZWQgY29tcHV0ZXJzIGF0IG9uY2UsXFxuICAgOTpcXHRcXHQgIGVubGFyZ2luZyB5b3VyIGtlcm5lbCBieSBhYm91dCAyIEtCLiBZb3UgbmVlZCBtdWx0aWNhc3RpbmcgaWYgeW91XFxuICAxMDpcXHRcXHQgIGludGVuZCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgTUJPTkUsIGEgaGlnaCBiYW5kd2lkdGggbmV0d29yayBvbiB0b3BcXG4gIDExOlxcdFxcdCAgb2YgdGhlIEludGVybmV0IHdoaWNoIGNhcnJpZXMgYXVkaW8gYW5kIHZpZGVvIGJyb2FkY2FzdHMuIE1vcmVcXG4gIDEyOlxcdFxcdCAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE1CT05FIGlzIG9uIHRoZSBXV1cgYXRcXG4gIDEzOlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd3d3LnNhdmV0ei5jb20vbWJvbmUvXFx1MDAzZS4gRm9yIG1vc3QgcGVvcGxlLCBpdCdzIHNhZmUgdG8gc2F5IE4uXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcXG4gIDE2OlxcdFxcdGJvb2wgXFxcIklQOiBhZHZhbmNlZCByb3V0ZXJcXFwiXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIElmIHlvdSBpbnRlbmQgdG8gcnVuIHlvdXIgTGludXggYm94IG1vc3RseSBhcyBhIHJvdXRlciwgaS5lLiBhcyBhXFxuICAxOTpcXHRcXHQgIGNvbXB1dGVyIHRoYXQgZm9yd2FyZHMgYW5kIHJlZGlzdHJpYnV0ZXMgbmV0d29yayBwYWNrZXRzLCBzYXkgWTsgeW91XFxuICAyMDpcXHRcXHQgIHdpbGwgdGhlbiBiZSBwcmVzZW50ZWQgd2l0aCBzZXZlcmFsIG9wdGlvbnMgdGhhdCBhbGxvdyBtb3JlIHByZWNpc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDg6MTcuNjkyMTU0NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjM1MjA2NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJldmlld2luZyB0aGUgUmVjZW50IENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZXNlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMuIEZpcnN0LCBgaXBfbWNfbXNmZ2V0YCBpbiBgbmV0L2lwdjQvaWdtcC5jYCBoYXMgYmVlbiByZXdvcmtlZC4gSXQncyBub3cgYSBub24tc3RhdGljIGZ1bmN0aW9uIGFuZCBpdHMgc2lnbmF0dXJlIGhhcyBiZWVuIHVwZGF0ZWQgdG8gYWNjZXB0IGEgYHNvY2tvcHRfdCAqb3B0YC4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCBpdCBkaXJlY3RseSB1c2VzIGBzb2Nrb3B0X2V4cGFuZF9vdXRgIHdpdGggYG1zZl9zaXplYCBhbmQgYGNvcHlfdG9faXRlcmAsIHdoaWNoIGlzIGhvdyBpdCdzIGdldHRpbmcgYW5kIGhhbmRsaW5nIHRoZSBkYXRhLlxuXG5OZXh0LCBpbiBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AsIGBkb19pcF9nZXRzb2Nrb3B0YCBoYXMgdW5kZXJnb25lIGEgY2hhbmdlIGluIGl0cyBJUF9NU0ZJTFRFUiBoYW5kbGluZy4gTm93LCBpbnN0ZWFkIG9mIGRvaW5nIGV2ZXJ5dGhpbmcgaW5saW5lLCBpdCBjYWxscyBgc29ja3B0cl90b19zb2Nrb3B0YCB3aGljaCB0aGVuIGNhbGxzIGBpcF9tY19tc2ZnZXRgLlxuXG5gc29ja3B0cl90b19zb2Nrb3B0YCBpbiBgbmV0L3NvY2tldC5jYCBoYXMgbW92ZWQgZnJvbSBiZWluZyBhIHN0YXRpYyBmdW5jdGlvbiB0byBhbiBleHRlcm4gZnVuY3Rpb24uXG5cbkZpbmFsbHksIHdlIGhhdmUgYHNvY2tvcHRfZXhwYW5kX291dGAgaW4gYGluY2x1ZGUvbGludXgvbmV0LmhgLiBUaGlzIGlzIGEgc3RhdGljIGlubGluZSBoZWxwZXIgZnVuY3Rpb24sIGNydWNpYWwgYmVjYXVzZSBpdCdzIGJlaW5nIGNhbGxlZCBieSBgaXBfbWNfbXNmZ2V0YC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoaXMgdXNhZ2UuIEl0J3MgdGltZSB0byBkbyBhIHRob3JvdWdoIGNoZWNrOyBJIG5lZWQgdG8gc2VlIGlmIGFueSBvdGhlciBjb2RlIHBhdGhzIGFyZSBjYWxsaW5nIGBpcF9tY19tc2ZnZXRgIG9yIGBzb2Nrb3B0X2V4cGFuZF9vdXRgLiBHb3R0YSBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBpbnRyb2R1Y2VkIGFueSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBvciBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTI4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDg6MjEuOTI3MzYzNTU1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ4NTgyNzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tvcHRfZXhwYW5kX291dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldC5oPTU2PXN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfaW5pdF91c2VyKHNvY2tvcHRfdCAqb3B0LCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXQuaC04MS0gKi9cXG5pbmNsdWRlL2xpbnV4L25ldC5oOjgyOnN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfZXhwYW5kX291dChzb2Nrb3B0X3QgKm9wdCwgc2l6ZV90IHNpemUpXFxuaW5jbHVkZS9saW51eC9uZXQuaC04My17XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjcxMz1pbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIHNvY2tvcHRfdCAqb3B0KVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTI3NjEtXFx0ICovXFxubmV0L2lwdjQvaWdtcC5jOjI3NjI6XFx0ZXJyID0gc29ja29wdF9leHBhbmRfb3V0KG9wdCwgbXNmX3NpemUpO1xcbm5ldC9pcHY0L2lnbXAuYy0yNzYzLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA4OjI0LjA3NTk1MTMzMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzA2MTExNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IENvbmZpcm1hdGlvbioqXG5cbk9rYXksIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgY2FsbCBjaGFpbiBmb3IgYGlwX21jX21zZmdldGAgb25lIG1vcmUgdGltZS4gTG9va3MgbGlrZSBpdCdzIGV4Y2x1c2l2ZWx5IGNhbGxlZCB3aXRoaW4gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLCBzcGVjaWZpY2FsbHkgYnkgYGRvX2lwX2dldHNvY2tvcHRgLiBFeGNlbGxlbnQuXG5cbk5vdywgbGV0J3MgYWxpZ24gdGhpcyB3aXRoIHRoZSBGb2N1c1N5bWJvbHMgbWV0aG9kb2xvZ3kuIFRoaXMgbWVhbnMgZm9jdXNpbmcgb24gbm9uLXViaXF1aXRvdXMga2VybmVsIGZ1bmN0aW9ucyB0byBuYXJyb3cgZG93biBvdXIgZnV6emluZyBzY29wZS4gV2Ugd2FudCB0byBhdm9pZCBnZW5lcmljIGZ1bmN0aW9ucyBsaWtlIGFsbG9jYXRvcnMgYW5kIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBhbmQgaW5zdGVhZCB0YXJnZXQgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnkgcG9pbnRzLiBgaXBfbWNfbXNmZ2V0YCwgYGRvX2lwX2dldHNvY2tvcHRgLCBhbmQgYHNvY2twdHJfdG9fc29ja29wdGAgYWxsIGZpdCB0aGF0IGJpbGwgcGVyZmVjdGx5LiBSZW1lbWJlciB0aGF0IGBzb2Nrb3B0X2V4cGFuZF9vdXRgIGlzIGlubGluZWQsIHNvIGZ1enppbmcgaXRzIGNhbGxlciwgYGlwX21jX21zZmdldGAsIGlzIHRoZSB3YXkgdG8gZ28uXG5cbk5leHQsIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFdlIGRlZmluaXRlbHkgbmVlZCBgSU5FVGAgc2luY2UgdGhpcyB0b3VjaGVzIGBuZXQvaXB2NC9gLCBzcGVjaWZpY2FsbHkgYGlwX3NvY2tnbHVlLmNgIGFuZCBgaWdtcC5jYC4gQW5kIGBJUF9NVUxUSUNBU1RgIGlzIHNwb3Qtb24sIGFzIG11bHRpY2FzdCBzb2NrZXQgb3B0aW9ucyBsaWtlIGBJUF9NU0ZJTFRFUmAgYW5kIElHTVAgYXJlIGRpcmVjdGx5IHJlbGV2YW50LiBObyBzdXJwcmlzZXMgdGhlcmUuXG5cblF1aWNrIHNhbml0eSBjaGVjayBvbiB0aG9zZSBjb25maWdzOiBgSU5FVGAgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGEgbG90IG9mIHdoYXQgd2UncmUgbG9va2luZyBhdCwgYW5kIGBJUF9NVUxUSUNBU1RgIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGUgdGFyZ2V0IGZ1bmN0aW9uYWxpdHkuIEFsbCBnb29kLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNvbnN0cnVjdCB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBgV29ydGhGdXp6aW5nYCBpcyB1bmVxdWl2b2NhbGx5IGB0cnVlYC4gVGhlIGBSZWFzb25pbmdgIHNob3VsZCBiZSBjbGVhcjogVGhpcyBwYXRjaCBtb2RpZmllcyBJUF9NU0ZJTFRFUiBoYW5kbGluZyB3aXRoaW4gSVB2NCdzIGBkb19pcF9nZXRzb2Nrb3B0YCwgY2hhbmdlcyBgaXBfbWNfbXNmZ2V0YCB0byB1c2UgYHNvY2tvcHRfdGAgYW5kIGFkZHMgaXRlcmF0b3IgbG9naWMgd2l0aCBgc29ja29wdF9leHBhbmRfb3V0YCwgYWxsIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBzb2NrZXQgY2FsbHMuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgYFtcImlwX21jX21zZmdldFwiLCBcImRvX2lwX2dldHNvY2tvcHRcIiwgXCJzb2NrcHRyX3RvX3NvY2tvcHRcIl1gLiBBbmQgZmluYWxseSwgdGhlIGBFbmFibGVDb25maWdzYCBhcmUgYFtcIklORVRcIiwgXCJJUF9NVUxUSUNBU1RcIl1gLlxuXG5FdmVyeXRoaW5nIGlzIHZlcmlmaWVkLCB0aGUgY2hlY2tzIGFyZSBwYXNzZWQsIGFuZCB0aGUgcmVhc29uaW5nIGlzIHNvdW5kLiBOb3cgaXQncyB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3NzAsIk91dHB1dFRva2VucyI6MTU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA4OjI5Ljc4MjA2NjY0NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjQzMTcxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBfTVVMVElDQVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfbWNfbXNmZ2V0XCIsXG4gICAgXCJkb19pcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJzb2NrcHRyX3RvX3NvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIElQX01TRklMVEVSIHNvY2tldCBvcHRpb24gaW4gSVB2NCBnZXRzb2Nrb3B0IGJ5IGNvbnZlcnRpbmcgaXBfbWNfbXNmZ2V0IHRvIHVzZSB0aGUgc29ja29wdF90IGFic3RyYWN0aW9uLCBpbnRyb2R1Y2luZyB0aGUgc29ja29wdF9leHBhbmRfb3V0IGhlbHBlciB0byBkeW5hbWljYWxseSByZXNpemUgdGhlIG91dHB1dCBidWZmZXIgaXRlcmF0b3IsIGFuZCBleHBvcnRpbmcgc29ja3B0cl90b19zb2Nrb3B0LiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBjYW4gYmUgZGlyZWN0bHkgZXhlcmNpc2VkIGZyb20gdXNlcnNwYWNlIHZpYSBnZXRzb2Nrb3B0KCkgY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBfTVVMVElDQVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfbWNfbXNmZ2V0XCIsXG4gICAgXCJkb19pcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJzb2NrcHRyX3RvX3NvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIElQX01TRklMVEVSIHNvY2tldCBvcHRpb24gaW4gSVB2NCBnZXRzb2Nrb3B0IGJ5IGNvbnZlcnRpbmcgaXBfbWNfbXNmZ2V0IHRvIHVzZSB0aGUgc29ja29wdF90IGFic3RyYWN0aW9uLCBpbnRyb2R1Y2luZyB0aGUgc29ja29wdF9leHBhbmRfb3V0IGhlbHBlciB0byBkeW5hbWljYWxseSByZXNpemUgdGhlIG91dHB1dCBidWZmZXIgaXRlcmF0b3IsIGFuZCBleHBvcnRpbmcgc29ja3B0cl90b19zb2Nrb3B0LiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBjYW4gYmUgZGlyZWN0bHkgZXhlcmNpc2VkIGZyb20gdXNlcnNwYWNlIHZpYSBnZXRzb2Nrb3B0KCkgY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA4OjI5LjkxNDUwODU1M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIyMzAwNTcyMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowODoyOS45MTY0OTgyMDNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4MjIyODA2MzI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBJUF9NU0ZJTFRFUiBnZXRzb2Nrb3B0IGhhbmRsaW5nIHRvIHVzZSB0aGUgbmV3IHNvY2tvcHRfdCAvIGlvdl9pdGVyIGluZnJhc3RydWN0dXJlIHZpYSBgc29ja3B0cl90b19zb2Nrb3B0KClgLCBgc29ja29wdF9leHBhbmRfb3V0KClgLCBhbmQgYGNvcHlfdG9faXRlcigpYC4gXFxuXFxuLSBJbiBgZG9faXBfZ2V0c29ja29wdCgpYCwgYG1zZmAgaXMgcG9wdWxhdGVkIGZyb20gdXNlcnNwYWNlIHZpYSBgY29weV9mcm9tX3NvY2twdHIoKWAgZm9yIGBJUF9NU0ZJTFRFUl9TSVpFKDApYCAoMTYgYnl0ZXMpLCBjb3ZlcmluZyBhbGwgc2NhbGFyIGZpZWxkcyAoYGltc2ZfbXVsdGlhZGRyYCwgYGltc2ZfaW50ZXJmYWNlYCwgYGltc2ZfZm1vZGVgLCBgaW1zZl9udW1zcmNgKSwgd2l0aCBgaW1zZl9mbW9kZWAgYW5kIGBpbXNmX251bXNyY2Agc3Vic2VxdWVudGx5IHVwZGF0ZWQgYmVmb3JlIGBjb3B5X3RvX2l0ZXIoKWAgY29waWVzIGV4YWN0bHkgMTYgYnl0ZXMuIFRoZXJlIGlzIG5vIHN0cnVjdCBwYWRkaW5nIGluIGBzdHJ1Y3QgaXBfbXNmaWx0ZXJgLlxcbi0gVGhlIG11bHRpY2FzdCBzb3VyY2UgZmlsdGVyIGFkZHJlc3MgYXJyYXkgYHBzbC1cXHUwMDNlc2xfYWRkcmAgaXMgY29waWVkIHVwIHRvIGBjb3B5Y291bnQgXFx1MDAzYz0gcHNsLVxcdTAwM2VzbF9jb3VudGAgZWxlbWVudHMsIHdoaWNoIGFyZSBmdWxseSBpbml0aWFsaXplZCBrZXJuZWwgZGF0YS5cXG4tIGBzb2Nrb3B0X2V4cGFuZF9vdXQoKWAgYW5kIGBzb2NrcHRyX3RvX3NvY2tvcHQoKWAgb25seSBhZGp1c3QgaXRlcmF0b3IgZGVzY3JpcHRvcnMgZm9yIHVzZXIgbWVtb3J5IGJvdW5kYXJpZXMgYW5kIGRvIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFBvdGVudGlhbCBtZW1vcnkgaXNzdWVzIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyB1c2VyIGJ1ZmZlciBhY2Nlc3MgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4pIGFuZCBjb3B5LXRvLXVzZXIgZmF1bHQgaGFuZGxpbmcuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUyNTI1ZmNkNzY5YWRjYmY0OTYyNTdlZDY0OGUzYmNiMzYyMzE1MDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxMDowNzoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWdtcC5oIGIvaW5jbHVkZS9saW51eC9pZ21wLmhcbmluZGV4IGEwY2YwMzk4NTE5ZmQuLmUwNzU2MTEzNDRlZjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lnbXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9pZ21wLmhcbkBAIC0xNCw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29ja3B0ci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9pZ21wLmhcdTAwM2VcbkBAIC0yNzMsNyArMjc0LDcgQEAgZXh0ZXJuIGludCBpcF9tY19zb3VyY2UoaW50IGFkZCwgaW50IG9tb2RlLCBzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdHN0cnVjdCBpcF9tcmVxX3NvdXJjZSAqbXJlcXMsIGludCBpZmluZGV4KTtcbiBleHRlcm4gaW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsaW50IGlmaW5kZXgpO1xuIGV4dGVybiBpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXG4tXHRcdFx0c29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbik7XG4rXHRcdFx0c29ja29wdF90ICpvcHQpO1xuIGV4dGVybiBpbnQgaXBfbWNfZ3NmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGdyb3VwX2ZpbHRlciAqZ3NmLFxuIFx0XHRcdHNvY2twdHJfdCBvcHR2YWwsIHNpemVfdCBvZmZzZXQpO1xuIGV4dGVybiBpbnQgaXBfbWNfc2ZfYWxsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBfX2JlMzIgbG9jYWwsIF9fYmUzMiBybXQsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmhcbmluZGV4IDQ3MDEwMGFlNzEwNzcuLmRlMGVkMzYyYjM3NzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldC5oXG5AQCAtNzAsNiArNzAsMzEgQEAgc3RhdGljIGlubGluZSBpbnQgc29ja29wdF9pbml0X3VzZXIoc29ja29wdF90ICpvcHQsIGNoYXIgX191c2VyICpvcHR2YWwsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBHcm93IG9wdHZhbCB0byBAc2l6ZSwgZm9yIHRoZSBvcHRpb25zIHdob3NlIHJlcGx5IGlzIHNpemVkIGJ5IGEgY291bnQgdGhlXG4rICogY2FsbGVyIGxlZnQgaW4gb3B0dmFsIHJhdGhlciB0aGFuIGJ5IG9wdGxlbi4gVGhvc2Ugd3JpdGUgcGFzdCBvcHRsZW4gdG9kYXlcbisgKiBhbmQgdXNlcnNwYWNlIHJlbGllcyBvbiBpdC5cbisgKlxuKyAqIENhbGwgaXQgYmVmb3JlIHdyaXRpbmcgdGhyb3VnaCBvcHQtXHUwMDNlaXRlcl9vdXQ6IGl0IHJlLWFuY2hvcnMgdGhlIGl0ZXJhdG9yIGF0XG4rICogdGhlIGhlYWQgb2Ygb3B0dmFsLiBPbmx5IGEgdXNlciBidWZmZXIgY2FuIGJlIGxvbmdlciB0aGFuIHRoZSBvcHRsZW4gdGhlXG4rICogY2FsbGVyIGRlY2xhcmVkLCBzbyBhIGtlcm5lbC1iYWNrZWQgb3B0dmFsIGlzIHJlZnVzZWQgd2l0aCAtRUlOVkFMLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfZXhwYW5kX291dChzb2Nrb3B0X3QgKm9wdCwgc2l6ZV90IHNpemUpXG4re1xuK1x0aWYgKHNpemUgXHUwMDNjPSBpb3ZfaXRlcl9jb3VudChcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChXQVJOX09OX09OQ0UoIWl0ZXJfaXNfdWJ1ZihcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpb3ZfaXRlcl91YnVmKFx1MDAyNm9wdC1cdTAwM2VpdGVyX291dCwgSVRFUl9ERVNULCBvcHQtXHUwMDNlaXRlcl9vdXQudWJ1Ziwgc2l6ZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbixcbitcdFx0ICAgICAgIHN0cnVjdCBrdmVjICprdmVjKTtcbitcbiBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3Q7XG4gc3RydWN0IHBpcGVfaW5vZGVfaW5mbztcbiBzdHJ1Y3QgaW5vZGU7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWdtcC5jIGIvbmV0L2lwdjQvaWdtcC5jXG5pbmRleCBkNTYzNTVhY2E3OTc3Li4xNDRmY2ExNThhZGNiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaWdtcC5jXG4rKysgYi9uZXQvaXB2NC9pZ21wLmNcbkBAIC0yNzA5LDggKzI3MDksOCBAQCBpbnQgaXBfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgaW50IGlmaW5kZXgpXG4gXHRcdGVyciA9IGlwX21jX2xlYXZlX2dyb3VwKHNrLCBcdTAwMjZpbXIpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4taW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLFxuLVx0XHQgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcbitcbitpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIHNvY2tvcHRfdCAqb3B0KVxuIHtcbiBcdGludCBlcnIsIGxlbiwgY291bnQsIGNvcHljb3VudCwgbXNmX3NpemU7XG4gXHRzdHJ1Y3QgaXBfbXJlcW5cdGltcjtcbkBAIC0yNzU1LDE0ICsyNzU1LDE5IEBAIGludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixcbiBcdGxlbiA9IGZsZXhfYXJyYXlfc2l6ZShwc2wsIHNsX2FkZHIsIGNvcHljb3VudCk7XG4gXHRtc2YtXHUwMDNlaW1zZl9udW1zcmMgPSBjb3VudDtcbiBcdG1zZl9zaXplID0gSVBfTVNGSUxURVJfU0laRShjb3B5Y291bnQpO1xuLVx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFx1MDAyNm1zZl9zaXplLCBzaXplb2YoaW50KSkgfHxcbi1cdCAgICBjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBtc2YsIElQX01TRklMVEVSX1NJWkUoMCkpKSB7XG4rXG4rXHQvKiBUaGUgc291cmNlIGxpc3QgaXMgc2l6ZWQgYnkgdGhlIGltc2ZfbnVtc3JjIHRoZSBjYWxsZXIgbGVmdCBpblxuK1x0ICogb3B0dmFsLCBub3QgYnkgb3B0bGVuLCB3aGljaCBvbmx5IGhhcyB0byBjb3ZlciB0aGUgZml4ZWQgcGFydC5cbitcdCAqL1xuK1x0ZXJyID0gc29ja29wdF9leHBhbmRfb3V0KG9wdCwgbXNmX3NpemUpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdG9wdC1cdTAwM2VvcHRsZW4gPSBtc2Zfc2l6ZTtcbitcdGlmIChjb3B5X3RvX2l0ZXIobXNmLCBJUF9NU0ZJTFRFUl9TSVpFKDApLCBcdTAwMjZvcHQtXHUwMDNlaXRlcl9vdXQpICE9XG4rXHQgICAgSVBfTVNGSUxURVJfU0laRSgwKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHR9XG4tXHRpZiAobGVuIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGNvcHlfdG9fc29ja3B0cl9vZmZzZXQob3B0dmFsLFxuLVx0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGlwX21zZmlsdGVyLCBpbXNmX3NsaXN0X2ZsZXgpLFxuLVx0XHRcdFx0ICAgcHNsLVx1MDAzZXNsX2FkZHIsIGxlbikpXG4rXHRpZiAobGVuIFx1MDAyNlx1MDAyNiBjb3B5X3RvX2l0ZXIocHNsLVx1MDAzZXNsX2FkZHIsIGxlbiwgXHUwMDI2b3B0LVx1MDAzZWl0ZXJfb3V0KSAhPSBsZW4pXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0cmV0dXJuIDA7XG4gZG9uZTpcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuaW5kZXggYTU1ZWYzMjdlYzkzMi4uYzU4ZTU2NWYyYTVhYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbkBAIC0xNzA2LDYgKzE3MDYsOCBAQCBpbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRjYXNlIElQX01TRklMVEVSOlxuIFx0e1xuIFx0XHRzdHJ1Y3QgaXBfbXNmaWx0ZXIgbXNmO1xuK1x0XHRzdHJ1Y3Qga3ZlYyBrdmVjO1xuK1x0XHRzb2Nrb3B0X3Qgb3B0O1xuIFxuIFx0XHRpZiAobGVuIFx1MDAzYyBJUF9NU0ZJTFRFUl9TSVpFKDApKSB7XG4gXHRcdFx0ZXJyID0gLUVJTlZBTDtcbkBAIC0xNzE1LDcgKzE3MTcsMTMgQEAgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbi1cdFx0ZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCBcdTAwMjZtc2YsIG9wdHZhbCwgb3B0bGVuKTtcbitcdFx0ZXJyID0gc29ja3B0cl90b19zb2Nrb3B0KFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4sIFx1MDAyNmt2ZWMpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHRlcnIgPSBpcF9tY19tc2ZnZXQoc2ssIFx1MDAyNm1zZiwgXHUwMDI2b3B0KTtcbitcdFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFx1MDAyNm9wdC5vcHRsZW4sIHNpemVvZihpbnQpKSlcbitcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcdGNhc2UgTUNBU1RfTVNGSUxURVI6XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCBjMDVkODZlNjNhYmY3Li4yOWEwZjdmOGUyY2FiIDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4rKysgYi9uZXQvc29ja2V0LmNcbkBAIC0yNDM3LDggKzI0MzcsOCBAQCBJTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKGJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsXG4gICogSXQgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgYm90aCBpb3YgcG9pbnRzIHRvIHRoZSBzYW1lIGRhdGEsIGJ1dCxcbiAgKiAuaXRlcl9pbiBpcyByZWFkLW9ubHkgYW5kIC5pdGVyX291dCBpcyB3cml0ZS1vbmx5IGJ5IHRoZSBwcm90b2NvbCBjYWxsYmFja3NcbiAgKi9cbi1zdGF0aWMgaW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCxcbi1cdFx0XHQgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBzdHJ1Y3Qga3ZlYyAqa3ZlYylcbitpbnQgc29ja3B0cl90b19zb2Nrb3B0KHNvY2tvcHRfdCAqb3B0LCBzb2NrcHRyX3Qgb3B0dmFsLFxuK1x0XHQgICAgICAgc29ja3B0cl90IG9wdGxlbiwgc3RydWN0IGt2ZWMgKmt2ZWMpXG4ge1xuIFx0aW50IGtvcHRsZW47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowODoyOS45MTY1MDcyODNaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM1ODE3MzQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhlIHN0YW5kYXJkIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIG9yIG90aGVyIHNhbml0aXplcnMgd2lsbCBiZSBlbm91Z2gsIG9yIGlmIHRoaXMgcmVxdWlyZXMgdGhlIG1vcmUgYWdncmVzc2l2ZSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLiBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbi5cblxuRmlyc3QsIGxldCBtZSBnZXQgYSBncmFzcCBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgcGF0Y2ggaXMgYmVpbmcgYXBwbGllZC4gV2hhdCdzIGl0IHRyeWluZyB0byBhY2hpZXZlPyBXaGF0J3MgdGhlIGFyZWEgb2YgdGhlIGtlcm5lbCBpdCdzIG1vZGlmeWluZz9cblxuUmlnaHQsIHRoZSBmaWxlcyB0b3VjaGVkIGFyZTogYGluY2x1ZGUvbGludXgvaWdtcC5oYCwgYGluY2x1ZGUvbGludXgvbmV0LmhgLCBgbmV0L2lwdjQvaWdtcC5jYCwgYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLCBhbmQgYG5ldC9zb2NrZXQuY2AuIFRoaXMgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIElHTVAgKEludGVybmV0IEdyb3VwIE1hbmFnZW1lbnQgUHJvdG9jb2wpIGFuZCBnZW5lcmFsIG5ldHdvcmtpbmcgc29ja2V0cywgcHJvYmFibHkgSVB2NC4gVGhhdCBoZWxwcyBuYXJyb3cgdGhlIHNjb3BlLlxuXG5Ob3csIEknbGwgdXNlIGBncmVwcGVyYCAob3IgZXZlbiBqdXN0IGByZWFkLWZpbGVgIGFuZCBhIGdvb2Qgc2VhcmNoKSB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhlc2UgZmlsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgbWVtb3J5IGFsbG9jYXRpb24sIGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBhbmQgZGF0YSBmbG93IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYXJlYXMgd2hlcmUgYSB2YWx1ZSBtaWdodCBiZSByZWFkIGJlZm9yZSBpdCdzIGJlZW4gcHJvcGVybHkgc2V0LiBJ4oCZbGwgbG9vayBjYXJlZnVsbHkgYXQgYW55IG5ldyB2YXJpYWJsZXMgb3IgbW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBvbmVzLiBUaGF04oCZcyB3aGVyZSB0aGUgcmlza3MgdHlwaWNhbGx5IGhpZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowODozNS4yNzQ2ODM5NjFaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lnbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzAwOlxcdFxcdFxcdFxcdDAsIE5VTEwsIDApO1xcbjI3MDE6XFx0XFx0fVxcbjI3MDI6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBtYy1cXHUwMDNlc2ZsaXN0LCBuZXdwc2wpO1xcbjI3MDM6XFx0XFx0aWYgKHBzbClcXG4yNzA0OlxcdFxcdFxcdGtmcmVlX3JjdShwc2wsIHJjdSk7XFxuMjcwNTpcXHRcXHRwbWMtXFx1MDAzZXNmbW9kZSA9IG1zZi1cXHUwMDNlaW1zZl9mbW9kZTtcXG4yNzA2OlxcdFxcdGVyciA9IDA7XFxuMjcwNzpcXHRkb25lOlxcbjI3MDg6XFx0XFx0aWYgKGxlYXZlZ3JvdXApXFxuMjcwOTpcXHRcXHRcXHRlcnIgPSBpcF9tY19sZWF2ZV9ncm91cChzaywgXFx1MDAyNmltcik7XFxuMjcxMDpcXHRcXHRyZXR1cm4gZXJyO1xcbjI3MTE6XFx0fVxcbjI3MTI6XFx0XFxuMjcxMzpcXHRpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIHNvY2tvcHRfdCAqb3B0KVxcbjI3MTQ6XFx0e1xcbjI3MTU6XFx0XFx0aW50IGVyciwgbGVuLCBjb3VudCwgY29weWNvdW50LCBtc2Zfc2l6ZTtcXG4yNzE2OlxcdFxcdHN0cnVjdCBpcF9tcmVxblxcdGltcjtcXG4yNzE3OlxcdFxcdF9fYmUzMiBhZGRyID0gbXNmLVxcdTAwM2VpbXNmX211bHRpYWRkcjtcXG4yNzE4OlxcdFxcdHN0cnVjdCBpcF9tY19zb2NrbGlzdCAqcG1jO1xcbjI3MTk6XFx0XFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xcbjI3MjA6XFx0XFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xcbjI3MjE6XFx0XFx0c3RydWN0IGlwX3NmX3NvY2tsaXN0ICpwc2w7XFxuMjcyMjpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XFxuMjcyMzpcXHRcXG4yNzI0OlxcdFxcdEFTU0VSVF9SVE5MKCk7XFxuMjcyNTpcXHRcXG4yNzI2OlxcdFxcdGlmICghaXB2NF9pc19tdWx0aWNhc3QoYWRkcikpXFxuMjcyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNzI4OlxcdFxcbjI3Mjk6XFx0XFx0aW1yLmltcl9tdWx0aWFkZHIuc19hZGRyID0gbXNmLVxcdTAwM2VpbXNmX211bHRpYWRkcjtcXG4yNzMwOlxcdFxcdGltci5pbXJfYWRkcmVzcy5zX2FkZHIgPSBtc2YtXFx1MDAzZWltc2ZfaW50ZXJmYWNlO1xcbjI3MzE6XFx0XFx0aW1yLmltcl9pZmluZGV4ID0gMDtcXG4yNzMyOlxcdFxcdGluX2RldiA9IGlwX21jX2ZpbmRfZGV2KG5ldCwgXFx1MDAyNmltcik7XFxuMjczMzpcXHRcXG4yNzM0OlxcdFxcdGlmICghaW5fZGV2KSB7XFxuMjczNTpcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbjI3MzY6XFx0XFx0XFx0Z290byBkb25lO1xcbjI3Mzc6XFx0XFx0fVxcbjI3Mzg6XFx0XFx0ZXJyID0gLUVBRERSTk9UQVZBSUw7XFxuMjczOTpcXHRcXG4yNzQwOlxcdFxcdGZvcl9lYWNoX3BtY19ydG5sKGluZXQsIHBtYykge1xcbjI3NDE6XFx0XFx0XFx0aWYgKHBtYy1cXHUwMDNlbXVsdGkuaW1yX211bHRpYWRkci5zX2FkZHIgPT0gbXNmLVxcdTAwM2VpbXNmX211bHRpYWRkciBcXHUwMDI2XFx1MDAyNlxcbjI3NDI6XFx0XFx0XFx0ICAgIHBtYy1cXHUwMDNlbXVsdGkuaW1yX2lmaW5kZXggPT0gaW1yLmltcl9pZmluZGV4KVxcbjI3NDM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjc0NDpcXHRcXHR9XFxuMjc0NTpcXHRcXHRpZiAoIXBtYylcXHRcXHQvKiBtdXN0IGhhdmUgYSBwcmlvciBqb2luICovXFxuMjc0NjpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuMjc0NzpcXHRcXHRtc2YtXFx1MDAzZWltc2ZfZm1vZGUgPSBwbWMtXFx1MDAzZXNmbW9kZTtcXG4yNzQ4OlxcdFxcdHBzbCA9IHJ0bmxfZGVyZWZlcmVuY2UocG1jLVxcdTAwM2VzZmxpc3QpO1xcbjI3NDk6XFx0XFx0aWYgKCFwc2wpIHtcXG4yNzUwOlxcdFxcdFxcdGNvdW50ID0gMDtcXG4yNzUxOlxcdFxcdH0gZWxzZSB7XFxuMjc1MjpcXHRcXHRcXHRjb3VudCA9IHBzbC1cXHUwMDNlc2xfY291bnQ7XFxuMjc1MzpcXHRcXHR9XFxuMjc1NDpcXHRcXHRjb3B5Y291bnQgPSBjb3VudCBcXHUwMDNjIG1zZi1cXHUwMDNlaW1zZl9udW1zcmMgPyBjb3VudCA6IG1zZi1cXHUwMDNlaW1zZl9udW1zcmM7XFxuMjc1NTpcXHRcXHRsZW4gPSBmbGV4X2FycmF5X3NpemUocHNsLCBzbF9hZGRyLCBjb3B5Y291bnQpO1xcbjI3NTY6XFx0XFx0bXNmLVxcdTAwM2VpbXNmX251bXNyYyA9IGNvdW50O1xcbjI3NTc6XFx0XFx0bXNmX3NpemUgPSBJUF9NU0ZJTFRFUl9TSVpFKGNvcHljb3VudCk7XFxuMjc1ODpcXHRcXG4yNzU5OlxcdFxcdC8qIFRoZSBzb3VyY2UgbGlzdCBpcyBzaXplZCBieSB0aGUgaW1zZl9udW1zcmMgdGhlIGNhbGxlciBsZWZ0IGluXFxuMjc2MDpcXHRcXHQgKiBvcHR2YWwsIG5vdCBieSBvcHRsZW4sIHdoaWNoIG9ubHkgaGFzIHRvIGNvdmVyIHRoZSBmaXhlZCBwYXJ0LlxcbjI3NjE6XFx0XFx0ICovXFxuMjc2MjpcXHRcXHRlcnIgPSBzb2Nrb3B0X2V4cGFuZF9vdXQob3B0LCBtc2Zfc2l6ZSk7XFxuMjc2MzpcXHRcXHRpZiAoZXJyKVxcbjI3NjQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNzY1OlxcdFxcbjI3NjY6XFx0XFx0b3B0LVxcdTAwM2VvcHRsZW4gPSBtc2Zfc2l6ZTtcXG4yNzY3OlxcdFxcdGlmIChjb3B5X3RvX2l0ZXIobXNmLCBJUF9NU0ZJTFRFUl9TSVpFKDApLCBcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCkgIT1cXG4yNzY4OlxcdFxcdCAgICBJUF9NU0ZJTFRFUl9TSVpFKDApKVxcbjI3Njk6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMjc3MDpcXHRcXHRpZiAobGVuIFxcdTAwMjZcXHUwMDI2IGNvcHlfdG9faXRlcihwc2wtXFx1MDAzZXNsX2FkZHIsIGxlbiwgXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQpICE9IGxlbilcXG4yNzcxOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjI3NzI6XFx0XFx0cmV0dXJuIDA7XFxuMjc3MzpcXHRkb25lOlxcbjI3NzQ6XFx0XFx0cmV0dXJuIGVycjtcXG4yNzc1OlxcdH1cXG4yNzc2OlxcdFxcbjI3Nzc6XFx0aW50IGlwX21jX2dzZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBncm91cF9maWx0ZXIgKmdzZixcXG4yNzc4OlxcdFxcdFxcdCBzb2NrcHRyX3Qgb3B0dmFsLCBzaXplX3Qgc3Nfb2Zmc2V0KVxcbjI3Nzk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowODozNS4yNzQ4MzcwMDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE3NDg4OTkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgaXBfc29ja2dsdWUuY2AqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gSVB2NCBzb2NrZXRzLCBhbmQgSSBoYXZlIGEgZmVlbGluZyB0aGUgaXNzdWUgaXMgZ29pbmcgdG8gYmUgaW4gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLiBNeSBpbnN0aW5jdHMgYXJlIHRlbGxpbmcgbWUgdG8gemVybyBpbiBhcm91bmQgbGluZSAxNzAwLiBJJ20gbm90IHN1cmUgKmV4YWN0bHkqIHdoYXQgSSdtIGxvb2tpbmcgZm9yIHlldCwgYnV0IHRoYXQgZmVlbHMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgdGhlc2Ugc29ja2V0cyBhcmUgYm91bmQgYW5kIGhhbmRsZWQuIExldCdzIHNlZSB3aGF0J3MgdGhlcmUgYW5kIHdoYXQgY29udGV4dCB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGF0IGxpbmUgcHJvdmlkZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSBmbG93IGFuZCBob3BlZnVsbHkgbmFycm93IGRvd24gdGhlIHBvdGVudGlhbCBjYXVzZSBvZiB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nLiBUaW1lIHRvIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODI3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowODozOC40NDk3MzAwMTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX3NvY2tnbHVlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcwMDpcXHRcXG4xNzAxOlxcdFxcdGlmIChuZWVkc19ydG5sKVxcbjE3MDI6XFx0XFx0XFx0cnRubF9sb2NrKCk7XFxuMTcwMzpcXHRcXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XFxuMTcwNDpcXHRcXG4xNzA1OlxcdFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbjE3MDY6XFx0XFx0Y2FzZSBJUF9NU0ZJTFRFUjpcXG4xNzA3OlxcdFxcdHtcXG4xNzA4OlxcdFxcdFxcdHN0cnVjdCBpcF9tc2ZpbHRlciBtc2Y7XFxuMTcwOTpcXHRcXHRcXHRzdHJ1Y3Qga3ZlYyBrdmVjO1xcbjE3MTA6XFx0XFx0XFx0c29ja29wdF90IG9wdDtcXG4xNzExOlxcdFxcbjE3MTI6XFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNjIElQX01TRklMVEVSX1NJWkUoMCkpIHtcXG4xNzEzOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTcxNDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xNzE1OlxcdFxcdFxcdH1cXG4xNzE2OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2bXNmLCBvcHR2YWwsIElQX01TRklMVEVSX1NJWkUoMCkpKSB7XFxuMTcxNzpcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjE3MTg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTcxOTpcXHRcXHRcXHR9XFxuMTcyMDpcXHRcXHRcXHRlcnIgPSBzb2NrcHRyX3RvX3NvY2tvcHQoXFx1MDAyNm9wdCwgb3B0dmFsLCBvcHRsZW4sIFxcdTAwMjZrdmVjKTtcXG4xNzIxOlxcdFxcdFxcdGlmIChlcnIpXFxuMTcyMjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xNzIzOlxcdFxcbjE3MjQ6XFx0XFx0XFx0ZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCBcXHUwMDI2bXNmLCBcXHUwMDI2b3B0KTtcXG4xNzI1OlxcdFxcdFxcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcXHUwMDI2b3B0Lm9wdGxlbiwgc2l6ZW9mKGludCkpKVxcbjE3MjY6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4xNzI3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3Mjg6XFx0XFx0fVxcbjE3Mjk6XFx0XFx0Y2FzZSBNQ0FTVF9NU0ZJTFRFUjpcXG4xNzMwOlxcdFxcdFxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxcbjE3MzE6XFx0XFx0XFx0XFx0ZXJyID0gY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcihzaywgb3B0dmFsLCBvcHRsZW4sXFxuMTczMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBsZW4pO1xcbjE3MzM6XFx0XFx0XFx0ZWxzZVxcbjE3MzQ6XFx0XFx0XFx0XFx0ZXJyID0gaXBfZ2V0X21jYXN0X21zZmlsdGVyKHNrLCBvcHR2YWwsIG9wdGxlbiwgbGVuKTtcXG4xNzM1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3MzY6XFx0XFx0Y2FzZSBJUF9QUk9UT0NPTDpcXG4xNzM3OlxcdFxcdFxcdHZhbCA9IGluZXRfc2soc2spLVxcdTAwM2VpbmV0X251bTtcXG4xNzM4OlxcdFxcdFxcdGJyZWFrO1xcbjE3Mzk6XFx0XFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDg6MzguNDQ5ODkxNjczWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MTI3MzM1OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byBTb2NrZXQgT3B0aW9uIEludGVybmFscyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IG5ldHdvcmsgc29ja2V0IG9wdGlvbnMsIGFuZCBJIHdhbnQgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGVtLiBJIHNob3VsZCByZWFsbHkgdGFrZSBhIGxvb2sgYXQgYHNvY2twdHJfdG9fc29ja29wdGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvc29ja2V0LmNgLiBJIG5lZWQgdG8gY2xhcmlmeSBwcmVjaXNlbHkgaG93IHRoYXQgY29udmVyc2lvbiBoYXBwZW5zIGFuZCBob3cgYHNvY2tvcHRfdGAgc3RydWN0dXJlcyBhcmUgbWFuYWdlZCBhbmQgdXNlZCBpbiB0aGUgcHJvY2Vzcy4gSXQncyB0aW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgd2hvbGUgcGljdHVyZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZSBwb2ludGVycyBhbmQgZGF0YSBhcmUgcGFzc2VkIGFyb3VuZCDigJMgdGhhdCdzIG9mdGVuIHdoZXJlIHRoZSBzdWJ0bGUgYnVncyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBjYW4gaGlkZS4gTGV0J3Mgc2VlIGlmIHRoaXMgcmV2ZWFscyBhbnkgaW50ZXJlc3RpbmcgZGVzaWduIGNob2ljZXMgb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbiBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA4OjQxLjE2MjYyNzUzMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NvY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MzA6XFx0XFxuMjQzMTpcXHRJTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKGJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsXFxuMjQzMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgaW50IG9wdG5hbWUpKTtcXG4yNDMzOlxcdFxcbjI0MzQ6XFx0LypcXG4yNDM1OlxcdCAqIEluaXRpYWxpemUgYSBzb2Nrb3B0X3QgZnJvbSBzb2NrcHRyIG9wdHZhbC9vcHRsZW4sIHNldHRpbmcgdXAgaW92X2l0ZXJcXG4yNDM2OlxcdCAqIGZvciBib3RoIGlucHV0IGFuZCBvdXRwdXQgZGlyZWN0aW9ucy5cXG4yNDM3OlxcdCAqIEl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IGJvdGggaW92IHBvaW50cyB0byB0aGUgc2FtZSBkYXRhLCBidXQsXFxuMjQzODpcXHQgKiAuaXRlcl9pbiBpcyByZWFkLW9ubHkgYW5kIC5pdGVyX291dCBpcyB3cml0ZS1vbmx5IGJ5IHRoZSBwcm90b2NvbCBjYWxsYmFja3NcXG4yNDM5OlxcdCAqL1xcbjI0NDA6XFx0aW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCxcXG4yNDQxOlxcdFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBzdHJ1Y3Qga3ZlYyAqa3ZlYylcXG4yNDQyOlxcdHtcXG4yNDQzOlxcdFxcdGludCBrb3B0bGVuO1xcbjI0NDQ6XFx0XFxuMjQ0NTpcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmtvcHRsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKVxcbjI0NDY6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMjQ0NzpcXHRcXG4yNDQ4OlxcdFxcdGlmIChrb3B0bGVuIFxcdTAwM2MgMClcXG4yNDQ5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI0NTA6XFx0XFxuMjQ1MTpcXHRcXHRpZiAob3B0dmFsLmlzX2tlcm5lbCkge1xcbjI0NTI6XFx0XFx0XFx0a3ZlYy1cXHUwMDNlaW92X2Jhc2UgPSBvcHR2YWwua2VybmVsO1xcbjI0NTM6XFx0XFx0XFx0a3ZlYy1cXHUwMDNlaW92X2xlbiA9IGtvcHRsZW47XFxuMjQ1NDpcXHRcXHRcXHRpb3ZfaXRlcl9rdmVjKFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfb3V0LCBJVEVSX0RFU1QsIGt2ZWMsIDEsIGtvcHRsZW4pO1xcbjI0NTU6XFx0XFx0XFx0aW92X2l0ZXJfa3ZlYyhcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX2luLCBJVEVSX1NPVVJDRSwga3ZlYywgMSwga29wdGxlbik7XFxuMjQ1NjpcXHRcXHR9IGVsc2Uge1xcbjI0NTc6XFx0XFx0XFx0aW92X2l0ZXJfdWJ1ZihcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX291dCwgSVRFUl9ERVNULCBvcHR2YWwudXNlciwga29wdGxlbik7XFxuMjQ1ODpcXHRcXHRcXHRpb3ZfaXRlcl91YnVmKFxcdTAwMjZvcHQtXFx1MDAzZWl0ZXJfaW4sIElURVJfU09VUkNFLCBvcHR2YWwudXNlcixcXG4yNDU5OlxcdFxcdFxcdFxcdCAgICAgIGtvcHRsZW4pO1xcbjI0NjA6XFx0XFx0fVxcbjI0NjE6XFx0XFx0b3B0LVxcdTAwM2VvcHRsZW4gPSBrb3B0bGVuO1xcbjI0NjI6XFx0XFxuMjQ2MzpcXHRcXHRyZXR1cm4gMDtcXG4yNDY0OlxcdH1cXG4yNDY1OlxcdFxcbjI0NjY6XFx0aW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxcbjI0Njc6XFx0XFx0XFx0ICAgICAgIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxcbjI0Njg6XFx0e1xcbjI0Njk6XFx0XFx0aW50IG1heF9vcHRsZW4gX19tYXliZV91bnVzZWQgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowODo0MS4xNjI3ODM1NjFaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI4NDYzMTk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHN0cnVjdCBpcF9tc2ZpbHRlcmAgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCBhIHJlZnJlc2hlciBvbiB0aGUgYHN0cnVjdCBpcF9tc2ZpbHRlcmAuIEl0J3MgYSBrZXkgc3RydWN0dXJlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIElHTVAvTUxEIGFuZCBtdWx0aWNhc3QgdHJhZmZpYyBtYW5hZ2VtZW50IGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyAqYWN0dWFsbHkqIGluIHRoZXJlLCBob3cgaXQncyBzdHJ1Y3R1cmVkLCBhbmQgd2hhdCBlbGVtZW50cyBhcmUgY3JpdGljYWwgZm9yIGZpbHRlcmluZy4gSSB3YW50IHRvIHNlZSB3aGljaCBmaWVsZHMgaG9sZCB0aGUgZ3JvdXAgYWRkcmVzcywgc291cmNlIGFkZHJlc3NlcyAoaWYgYW55KSwgYW5kIGFueSBvdGhlciBhc3NvY2lhdGVkIG1ldGFkYXRhIHRoYXQgZGljdGF0ZXMgaG93IHRyYWZmaWMgd2lsbCBiZSBoYW5kbGVkLiBJIGFtIHN1cmUgSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHN0cnVjdHVyZSBhbGlnbnMgd2l0aCB0aGUgY3VycmVudCBzdGFuZGFyZHMgZm9yIElHTVB2MyBvciBNTER2MiwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZmllbGQgdmFsdWVzIGFyZSB3aXRoIHJlZ2FyZCB0byB0aGUgcGFydGljdWxhciBtdWx0aWNhc3Qgc3RhdGUgb3IgdGhlIGZpbHRlciBtb2RlLiBNeSBnb2FsIGhlcmUgaXMgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBjb3JlIHBpZWNlcyB0aGF0IGFyZSB1c2VkIHRvIHJlcHJlc2VudCBtdWx0aWNhc3QgZmlsdGVyaW5nIHJ1bGVzIHdpdGhpbiB0aGUga2VybmVsJ3MgZGF0YSBzdHJ1Y3R1cmVzLiBTcGVjaWZpY2FsbHksIEknbSBleHBlY3RpbmcgdG8gZmluZCBpbmZvcm1hdGlvbiByZWxldmFudCB0byBqb2lucywgbGVhdmVzLCBzb3VyY2VzLCBhbmQgcGVyaGFwcyBzb21lIGludGVybmFsIGZsYWdzIHRoYXQgbWlnaHQgZGljdGF0ZSBiZWhhdmlvciBsaWtlIGluY2x1ZGUvZXhjbHVkZSBsaXN0cy4gVW5kZXJzdGFuZGluZyB0aGUgZGVmaW5pdGlvbiB3aWxsIGFsbG93IG1lIHRvIGltbWVkaWF0ZWx5IGlkZW50aWZ5IHBvdGVudGlhbCBpc3N1ZXMgaW4gcmVsYXRlZCBjb2RlIG9yIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2sgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NjQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA4OjQ0LjQ0NzQxODQ5MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MTEyNjQxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgaXBfbXNmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9pZ21wLmg9MjczPWV4dGVybiBpbnQgaXBfbWNfc291cmNlKGludCBhZGQsIGludCBvbW9kZSwgc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbGludXgvaWdtcC5oLTI3NC1cXHRcXHRzdHJ1Y3QgaXBfbXJlcV9zb3VyY2UgKm1yZXFzLCBpbnQgaWZpbmRleCk7XFxuaW5jbHVkZS9saW51eC9pZ21wLmg6Mjc1OmV4dGVybiBpbnQgaXBfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixpbnQgaWZpbmRleCk7XFxuaW5jbHVkZS9saW51eC9pZ21wLmg6Mjc2OmV4dGVybiBpbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXFxuaW5jbHVkZS9saW51eC9pZ21wLmgtMjc3LVxcdFxcdFxcdHNvY2tvcHRfdCAqb3B0KTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9pbi5oPTE5Mz1zdHJ1Y3QgaXBfbXJlcV9zb3VyY2Uge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2luLmgtMTk4LVxcbmluY2x1ZGUvdWFwaS9saW51eC9pbi5oOjE5OTpzdHJ1Y3QgaXBfbXNmaWx0ZXIge1xcbmluY2x1ZGUvdWFwaS9saW51eC9pbi5oLTIwMC1cXHRfX2JlMzJcXHRcXHRpbXNmX211bHRpYWRkcjtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9pbi5oLTIxMC0jZGVmaW5lIElQX01TRklMVEVSX1NJWkUobnVtc3JjKSBcXFxcXFxuaW5jbHVkZS91YXBpL2xpbnV4L2luLmg6MjExOlxcdChzaXplb2Yoc3RydWN0IGlwX21zZmlsdGVyKSAtIHNpemVvZihfX3UzMikgXFxcXFxcbmluY2x1ZGUvdWFwaS9saW51eC9pbi5oLTIxMi1cXHQrIChudW1zcmMpICogc2l6ZW9mKF9fdTMyKSlcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0yNDgzPWludCBpcF9tY19zb3VyY2UoaW50IGFkZCwgaW50IG9tb2RlLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTI2MjEtXFxubmV0L2lwdjQvaWdtcC5jOjI2MjI6aW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIGludCBpZmluZGV4KVxcbm5ldC9pcHY0L2lnbXAuYy0yNjIzLXtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yNzEyLVxcbm5ldC9pcHY0L2lnbXAuYzoyNzEzOmludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgc29ja29wdF90ICpvcHQpXFxubmV0L2lwdjQvaWdtcC5jLTI3MTQte1xcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz02NjI9c3RhdGljIGludCBzZXRfbWNhc3RfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNjY2LXtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjY2NzpcXHRzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZjtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTY2OC1cXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gKnBzaW47XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTg5Mj1pbnQgZG9faXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEyNTQtXFx0e1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTI1NTpcXHRcXHRzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZjtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEyNTYtXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE1MDc9aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzA3LVxcdHtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE3MDg6XFx0XFx0c3RydWN0IGlwX21zZmlsdGVyIG1zZjtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3MDktXFx0XFx0c3RydWN0IGt2ZWMga3ZlYztcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oPTE5Mz1zdHJ1Y3QgaXBfbXJlcV9zb3VyY2Uge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2luLmgtMTk4LVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oOjE5OTpzdHJ1Y3QgaXBfbXNmaWx0ZXIge1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oLTIwMC1cXHRfX2JlMzJcXHRcXHRpbXNmX211bHRpYWRkcjtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oLTIxMC0jZGVmaW5lIElQX01TRklMVEVSX1NJWkUobnVtc3JjKSBcXFxcXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2luLmg6MjExOlxcdChzaXplb2Yoc3RydWN0IGlwX21zZmlsdGVyKSAtIHNpemVvZihfX3UzMikgXFxcXFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oLTIxMi1cXHQrIChudW1zcmMpICogc2l6ZW9mKF9fdTMyKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDg6NDYuNzg4NTUyMjk1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MDA4NjIzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBIZWFkZXJzKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIE15IGludHVpdGlvbidzIHRlbGxpbmcgbWUgdG8gbG9vayBhdCBgaW5jbHVkZS91YXBpL2xpbnV4L2luLmhgIGFuZCBzcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIGFyb3VuZCBsaW5lIDE5OS4gSXQncyB1c3VhbGx5IHRoZSBmaXJzdCBwbGFjZSBJIHN0YXJ0IGZvciBsb3ctbGV2ZWwgc29ja2V0IG9wdGlvbnMgb3IgZGVmaW5pdGlvbnMuIEkgc3VzcGVjdCB0aGVyZSdzIHNvbWV0aGluZyByZWxldmFudCB0byBteSBjdXJyZW50IGRlYnVnZ2luZyBvciBpbnZlc3RpZ2F0aW9uIGx1cmtpbmcgaW4gdGhhdCB2aWNpbml0eS4gSXQncyBhIGZ1bmRhbWVudGFsIGhlYWRlciwgc28gY2hhbmNlcyBhcmUgd2hhdGV2ZXIgSSBuZWVkIGlzIGRlY2xhcmVkIGluIHRoYXQgZmlsZS4gSSBleHBlY3QgdG8gZmluZCBhIG1hY3JvIG9yIGVudW0gb3Igc3RydWN0IGRlZmluaXRpb24gdGhhdCByZWxhdGVzIHRvIHdoYXRldmVyIEknbSB0cm91Ymxlc2hvb3RpbmcuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk2MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA4OjQ4LjU4OTQxNzI5OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvaW4uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxOTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTU6XFx0XFx0X19iZTMyXFx0XFx0aW1yX2ludGVyZmFjZTtcXG4gMTk2OlxcdFxcdF9fYmUzMlxcdFxcdGltcl9zb3VyY2VhZGRyO1xcbiAxOTc6XFx0fTtcXG4gMTk4OlxcdFxcbiAxOTk6XFx0c3RydWN0IGlwX21zZmlsdGVyIHtcXG4gMjAwOlxcdFxcdF9fYmUzMlxcdFxcdGltc2ZfbXVsdGlhZGRyO1xcbiAyMDE6XFx0XFx0X19iZTMyXFx0XFx0aW1zZl9pbnRlcmZhY2U7XFxuIDIwMjpcXHRcXHRfX3UzMlxcdFxcdGltc2ZfZm1vZGU7XFxuIDIwMzpcXHRcXHRfX3UzMlxcdFxcdGltc2ZfbnVtc3JjO1xcbiAyMDQ6XFx0XFx0dW5pb24ge1xcbiAyMDU6XFx0XFx0XFx0X19iZTMyXFx0XFx0aW1zZl9zbGlzdFsxXTtcXG4gMjA2OlxcdFxcdFxcdF9fREVDTEFSRV9GTEVYX0FSUkFZKF9fYmUzMiwgaW1zZl9zbGlzdF9mbGV4KTtcXG4gMjA3OlxcdFxcdH07XFxuIDIwODpcXHR9O1xcbiAyMDk6XFx0XFxuIDIxMDpcXHQjZGVmaW5lIElQX01TRklMVEVSX1NJWkUobnVtc3JjKSBcXFxcXFxuIDIxMTpcXHRcXHQoc2l6ZW9mKHN0cnVjdCBpcF9tc2ZpbHRlcikgLSBzaXplb2YoX191MzIpIFxcXFxcXG4gMjEyOlxcdFxcdCsgKG51bXNyYykgKiBzaXplb2YoX191MzIpKVxcbiAyMTM6XFx0XFxuIDIxNDpcXHRzdHJ1Y3QgZ3JvdXBfcmVxIHtcXG4gMjE1OlxcdFxcdF9fdTMyXFx0XFx0XFx0XFx0IGdyX2ludGVyZmFjZTtcXHQvKiBpbnRlcmZhY2UgaW5kZXggKi9cXG4gMjE2OlxcdFxcdHN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIGdyX2dyb3VwO1xcdC8qIGdyb3VwIGFkZHJlc3MgKi9cXG4gMjE3OlxcdH07XFxuIDIxODpcXHRcXG4gMjE5OlxcdHN0cnVjdCBncm91cF9zb3VyY2VfcmVxIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDg6NDguNTg5NDg2MTE4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzOTYxNjkyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgSVBfTVNGSUxURVJgIFNvY2tldCBPcHRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IHRoZSBgc3RydWN0IGlwX21zZmlsdGVyYCBhbmQgaG93IGl0J3MgdXNlZCBpbiB0aGUga2VybmVsJ3MgYElQX01TRklMVEVSYCBzb2NrZXQgb3B0aW9uLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgdGhlIGludGVyYWN0aW9uIHdpdGggdXNlci1zcGFjZSBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuRmlyc3QsIEkgc2VlIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmOiBgaW1zZl9tdWx0aWFkZHJgLCBgaW1zZl9pbnRlcmZhY2VgLCBgaW1zZl9mbW9kZWAsIGBpbXNmX251bXNyY2AsIGFuZCBgaW1zZl9zbGlzdGAvYGltc2Zfc2xpc3RfZmxleGAuIFRoZSBzaXplIGNhbGN1bGF0aW9uIHVzaW5nIGBJUF9NU0ZJTFRFUl9TSVpFKDApYCBnaXZlcyBtZSBhIGJhc2Ugc2l6ZS4gVGhlbiwgYGRvX2lwX2dldHNvY2tvcHRgIGhhbmRsZXMgdGhlIGBJUF9NU0ZJTFRFUmAgY2FzZS4gSXQgY29waWVzIHRoZSBpbml0aWFsIHBhcnQgb2YgdGhlIGBtc2ZgIHN0cnVjdCBmcm9tIHVzZXItc3BhY2UgdXNpbmcgYGNvcHlfZnJvbV9zb2NrcHRyYC5cblxuVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGNhbGwgdG8gYGlwX21jX21zZmdldGAuIEhlcmUncyB3aGVyZSB0aGUgdXNlci1wcm92aWRlZCBkYXRhIGRpcmVjdGx5IGFmZmVjdHMga2VybmVsIGJlaGF2aW9yLiBgbXNmYCdzIGluaXRpYWwgZmllbGRzIGFyZSBwb3B1bGF0ZWQgZnJvbSB1c2VyLXNwYWNlLiAgYGlwX21jX21zZmdldGAgdGhlbiByZWFkcyBgbXNmLmltc2ZfZm1vZGVgIGFuZCBgbXNmLmltc2ZfbnVtc3JjYC4gVGhpcyBpcyB0aGUgdXNlci1wcm92aWRlZCBjb3VudCwgYW5kIGBtc2Zfc2l6ZWAgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGlzIGNvdW50LCBlc3NlbnRpYWxseSBkZXRlcm1pbmluZyBob3cgbXVjaCBkYXRhIGlzIGJlaW5nIHRyYW5zZmVycmVkIGJhY2sgdG8gdXNlciBzcGFjZS4gIFRoZSBpbnRlcmVzdGluZyBwb2ludCBpcyB0aGF0IGBtc2YtXHUwMDNlaW1zZl9udW1zcmNgIGlzIG1vZGlmaWVkIHRvIGBjb3VudGAsIGFmdGVyIGBjb3B5Y291bnRgIGlzIGNhbGN1bGF0ZWQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBgc29ja29wdF9leHBhbmRfb3V0YC4gSXQncyB1c2VkIHRvIGdyb3cgdGhlIHVzZXItc3BhY2UgYnVmZmVyIGBvcHR2YWxgIHdoZW4gcmVwbHlpbmcgd2l0aCB0aGUgc29ja2V0IG9wdGlvbiBkYXRhLiAgVGhlIGtleSBwYXJ0IGlzIHRoZSBjb21tZW50IGFib3V0IGdyb3dpbmcgdGhlIGJ1ZmZlciAqYmV5b25kKiB0aGUgaW5pdGlhbCBgb3B0bGVuYCBwYXNzZWQgYnkgdGhlIHVzZXIuIFRoZSBgc29ja29wdF9leHBhbmRfb3V0YCBmdW5jdGlvbiByZS1hbmNob3JzIHRoZSBpdGVyYXRvciBhdCB0aGUgYmVnaW5uaW5nIG9mIGBvcHR2YWxgIHVwIHRvIHNpemUsIHVzaW5nIGBpb3ZfaXRlcl91YnVmYCBvbiBgb3B0LVx1MDAzZWl0ZXJfb3V0LnVidWZgLiBUaGlzIG1lYW5zIHRoYXQgdXNlci1zcGFjZSBkYXRhIGNhbiBpbmZsdWVuY2UgdGhlIHNpemUgb2Yga2VybmVsIHdyaXRlcyB0byB1c2VyIHNwYWNlLiBJdCBzZWVtcyB0aGUgaW50ZW50aW9uIGhlcmUgaXMgdG8gYWxsb3cgdGhlIGtlcm5lbCB0byB3cml0ZSBwYXN0IGBvcHRsZW5gIGluIGEgY29udHJvbGxlZCB3YXksIGJ1dCBpdCBhbHNvIGNyZWF0ZXMgdGhlIHBvdGVudGlhbCBmb3Igc29tZSBpbnRlcmVzdGluZyBzaWRlLWVmZmVjdHMgdGhhdCBuZWVkIGNhcmVmdWwgcmV2aWV3LiBUaGUgY29kZSBkZXBlbmRzIG9uIHRoZSBidWZmZXIgYmVpbmcgYSB1c2VyIGJ1ZmZlciBhcyBub3RlZC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgb3B0LVx1MDAzZWl0ZXJfb3V0LnVidWZgIGlzIHBvaW50aW5nLiBgc29ja3B0cl90b19zb2Nrb3B0YCBpbml0aWFsaXplcyBgb3B0LVx1MDAzZWl0ZXJfb3V0LnVidWZgIHdpdGggYG9wdHZhbC51c2VyYC4gVGhpcyB0ZWxscyBtZSB0aGF0IHRoZSBvdXRwdXQgYnVmZmVyIGlzIHRoZSB1c2VyLXByb3ZpZGVkIGBvcHR2YWxgIGJ1ZmZlci5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBhIGNyYWZ0ZWQgdXNlci1zcGFjZSBpbnB1dCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGEgYnVmZmVyIG92ZXJmbG93IG9yIGluZm9ybWF0aW9uIGxlYWssIGlmIHRoZXJlJ3MgaW5zdWZmaWNpZW50IHZhbGlkYXRpb24gYXJvdW5kIGBtc2Zfc2l6ZWAgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gYG9wdGxlbmAuIFRoZSBjb21tZW50IGFib3V0IHRoZSBpbnRlbmRlZCB1c2Ugb2YgZ3Jvd2luZyB0aGUgYnVmZmVyIGlzIGFsc28gc29tZXRoaW5nIHRoYXQgbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGluIHRlcm1zIG9mIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIHRocm91Z2ggdGhlIGNvZGUgcGF0aHMgYW5kIGlkZW50aWZ5IHdoYXQgdGhlIHVwcGVyIGJvdW5kcyBhcmUgYW5kIGhvdyB0aGV5IGFyZSBlbmZvcmNlZC4gVG8gZG8gdGhpcywgSSB3aWxsIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxsZXJzIG9mIGBpcF9tY19tc2ZnZXRgLCBgc29ja3B0cl90b19zb2Nrb3B0YCwgYW5kIGBzb2Nrb3B0X2V4cGFuZF9vdXRgIHVzaW5nIGEgZ3JlcCBzZWFyY2guIFRoaXMgc2hvdWxkIHRlbGwgbWUgaWYgdGhlcmUgYXJlIG90aGVyIHBsYWNlcyBpbiB0aGUga2VybmVsIHRoYXQgYmVoYXZlIHNpbWlsYXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU2MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowODo1NC45ODU2NTc0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTM4ODk0NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX21jX21zZmdldHxzb2NrcHRyX3RvX3NvY2tvcHR8c29ja29wdF9leHBhbmRfb3V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWdtcC5oPTI3NT1leHRlcm4gaW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsaW50IGlmaW5kZXgpO1xcbmluY2x1ZGUvbGludXgvaWdtcC5oOjI3NjpleHRlcm4gaW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLFxcbmluY2x1ZGUvbGludXgvaWdtcC5oLTI3Ny1cXHRcXHRcXHRzb2Nrb3B0X3QgKm9wdCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldC5oPTU2PXN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfaW5pdF91c2VyKHNvY2tvcHRfdCAqb3B0LCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXQuaC04MS0gKi9cXG5pbmNsdWRlL2xpbnV4L25ldC5oOjgyOnN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfZXhwYW5kX291dChzb2Nrb3B0X3QgKm9wdCwgc2l6ZV90IHNpemUpXFxuaW5jbHVkZS9saW51eC9uZXQuaC04My17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldC5oLTk0LVxcbmluY2x1ZGUvbGludXgvbmV0Lmg6OTU6aW50IHNvY2twdHJfdG9fc29ja29wdChzb2Nrb3B0X3QgKm9wdCwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbixcXG5pbmNsdWRlL2xpbnV4L25ldC5oLTk2LVxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZlYyAqa3ZlYyk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjYyMj1pbnQgaXBfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZiwgaW50IGlmaW5kZXgpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjcxMi1cXG5uZXQvaXB2NC9pZ21wLmM6MjcxMzppbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIHNvY2tvcHRfdCAqb3B0KVxcbm5ldC9pcHY0L2lnbXAuYy0yNzE0LXtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yNzYxLVxcdCAqL1xcbm5ldC9pcHY0L2lnbXAuYzoyNzYyOlxcdGVyciA9IHNvY2tvcHRfZXhwYW5kX291dChvcHQsIG1zZl9zaXplKTtcXG5uZXQvaXB2NC9pZ21wLmMtMjc2My1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xNTA3PWludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTcxOS1cXHRcXHR9XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNzIwOlxcdFxcdGVyciA9IHNvY2twdHJfdG9fc29ja29wdChcXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbiwgXFx1MDAyNmt2ZWMpO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTcyMS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzIzLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTcyNDpcXHRcXHRlcnIgPSBpcF9tY19tc2ZnZXQoc2ssIFxcdTAwMjZtc2YsIFxcdTAwMjZvcHQpO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTcyNS1cXHRcXHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXFx1MDAyNm9wdC5vcHRsZW4sIHNpemVvZihpbnQpKSlcXG4tLVxcbm5ldC9zb2NrZXQuYz0yNDMxPUlORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoYm9vbCB0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0KGludCBsZXZlbCxcXG4tLVxcbm5ldC9zb2NrZXQuYy0yNDM5LSAqL1xcbm5ldC9zb2NrZXQuYzoyNDQwOmludCBzb2NrcHRyX3RvX3NvY2tvcHQoc29ja29wdF90ICpvcHQsIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L3NvY2tldC5jLTI0NDEtXFx0XFx0ICAgICAgIHNvY2twdHJfdCBvcHRsZW4sIHN0cnVjdCBrdmVjICprdmVjKVxcbi0tXFxubmV0L3NvY2tldC5jPTI0NjY9aW50IGRvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBib29sIGNvbXBhdCwgaW50IGxldmVsLFxcbi0tXFxubmV0L3NvY2tldC5jLTI0ODUtXFx0fSBlbHNlIGlmIChvcHMtXFx1MDAzZWdldHNvY2tvcHRfaXRlcikge1xcbm5ldC9zb2NrZXQuYzoyNDg2OlxcdFxcdGVyciA9IHNvY2twdHJfdG9fc29ja29wdChcXHUwMDI2b3B0LCBvcHR2YWwsIG9wdGxlbiwgXFx1MDAyNmt2ZWMpO1xcbm5ldC9zb2NrZXQuYy0yNDg3LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA4OjU3LjkyNDU1Nzc4NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NjU4MTU1OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIENhbGwgUGF0aCBvZiBgaXBfbWNfbXNmZ2V0YCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBpcF9tY19tc2ZnZXRgIGlzIG9ubHkgY2FsbGVkIHdpdGhpbiBgZG9faXBfZ2V0c29ja29wdGAuIFRoaXMgc3VnZ2VzdHMgYSB0YXJnZXRlZCBhcmVhIHRvIGludmVzdGlnYXRlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHNvY2tldCBvcHRpb24gcmV0cmlldmFsIHJlbGF0ZWQgdG8gSVAgbXVsdGljYXN0LiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGhvdyBgaXBfbWNfbXNmZ2V0YCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYHNvY2tvcHRfdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgc29ja29wdF90YCBpcyBkZWZpbmVkLiBUaGlzIGlzIGxpa2VseSBhIHN0cnVjdHVyZSBvciB0eXBlIHRoYXQncyBmdW5kYW1lbnRhbCB0byBob3cgc29ja2V0IG9wdGlvbnMgYXJlIGhhbmRsZWQuIEEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSBzdWdnZXN0cyBJIHNob3VsZCBmaW5kIHRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L25ldC5oYC4gTGV0J3MgY29uZmlybSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQwMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA5OjA3LjU4MjcxNTk5N1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L25ldC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdCAqXFxuICA0MTpcXHQgKiBUaGUgb3B0bGVuIGZpZWxkIGFsbG93cyBjYWxsYmFja3MgdG8gcmV0dXJuIGEgc3BlY2lmaWMgbGVuZ3RoIHZhbHVlXFxuICA0MjpcXHQgKiBpbmRlcGVuZGVudCBvZiB0aGUgYnl0ZXMgd3JpdHRlbiB2aWEgY29weV90b19pdGVyKCkuXFxuICA0MzpcXHQgKi9cXG4gIDQ0OlxcdHR5cGVkZWYgc3RydWN0IHNvY2tvcHQge1xcbiAgNDU6XFx0XFx0c3RydWN0IGlvdl9pdGVyIGl0ZXJfaW47XFxuICA0NjpcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgaXRlcl9vdXQ7XFxuICA0NzpcXHRcXHRpbnQgb3B0bGVuO1xcbiAgNDg6XFx0fSBzb2Nrb3B0X3Q7XFxuICA0OTpcXHRcXG4gIDUwOlxcdC8qXFxuICA1MTpcXHQgKiBJbml0aWFsaXplIGEgdXNlci1iYWNrZWQgc29ja29wdF90IGZyb20gdGhlIChvcHR2YWwsIG9wdGxlbikgX191c2VyIHBhaXIgb2ZcXG4gIDUyOlxcdCAqIGEgZ2V0c29ja29wdCgpIGNhbGxiYWNrLiBVc2VkIGJ5IHRyYW5zaXRpb25hbCBfX3VzZXIgZ2V0c29ja29wdCB3cmFwcGVyc1xcbiAgNTM6XFx0ICogd2hpbGUgdGhlIHByb3RvLWxheWVyIGNhbGxiYWNrcyBhcmUgY29udmVydGVkIHRvIHRha2UgYSBzb2Nrb3B0X3Q7IHRoZVxcbiAgNTQ6XFx0ICogY2FsbGVyIHdyaXRlcyBvcHQtXFx1MDAzZW9wdGxlbiBiYWNrIHRvIHRoZSB1c2VyIG9wdGxlbiBhZnRlciB0aGUgY2FsbGJhY2suXFxuICA1NTpcXHQgKi9cXG4gIDU2OlxcdHN0YXRpYyBpbmxpbmUgaW50IHNvY2tvcHRfaW5pdF91c2VyKHNvY2tvcHRfdCAqb3B0LCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbiAgNTc6XFx0XFx0XFx0XFx0XFx0ICAgIGludCBfX3VzZXIgKm9wdGxlbilcXG4gIDU4OlxcdHtcXG4gIDU5OlxcdFxcdGludCBsZW47XFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdGlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpXFxuICA2MjpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gIDYzOlxcdFxcdGlmIChsZW4gXFx1MDAzYyAwKVxcbiAgNjQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdGlvdl9pdGVyX3VidWYoXFx1MDAyNm9wdC1cXHUwMDNlaXRlcl9vdXQsIElURVJfREVTVCwgb3B0dmFsLCBsZW4pO1xcbiAgNjc6XFx0XFx0aW92X2l0ZXJfdWJ1ZihcXHUwMDI2b3B0LVxcdTAwM2VpdGVyX2luLCBJVEVSX1NPVVJDRSwgb3B0dmFsLCBsZW4pO1xcbiAgNjg6XFx0XFx0b3B0LVxcdTAwM2VvcHRsZW4gPSBsZW47XFxuICA2OTpcXHRcXG4gIDcwOlxcdFxcdHJldHVybiAwO1xcbiAgNzE6XFx0fVxcbiAgNzI6XFx0XFxuICA3MzpcXHQvKlxcbiAgNzQ6XFx0ICogR3JvdyBvcHR2YWwgdG8gQHNpemUsIGZvciB0aGUgb3B0aW9ucyB3aG9zZSByZXBseSBpcyBzaXplZCBieSBhIGNvdW50IHRoZVxcbiAgNzU6XFx0ICogY2FsbGVyIGxlZnQgaW4gb3B0dmFsIHJhdGhlciB0aGFuIGJ5IG9wdGxlbi4gVGhvc2Ugd3JpdGUgcGFzdCBvcHRsZW4gdG9kYXlcXG4gIDc2OlxcdCAqIGFuZCB1c2Vyc3BhY2UgcmVsaWVzIG9uIGl0LlxcbiAgNzc6XFx0ICpcXG4gIDc4OlxcdCAqIENhbGwgaXQgYmVmb3JlIHdyaXRpbmcgdGhyb3VnaCBvcHQtXFx1MDAzZWl0ZXJfb3V0OiBpdCByZS1hbmNob3JzIHRoZSBpdGVyYXRvciBhdFxcbiAgNzk6XFx0ICogdGhlIGhlYWQgb2Ygb3B0dmFsLiBPbmx5IGEgdXNlciBidWZmZXIgY2FuIGJlIGxvbmdlciB0aGFuIHRoZSBvcHRsZW4gdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA5OjA3LjU4MjgwMjEzN1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTY3MzE2OTE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsJ3MgU29ja2V0IE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgYSByZWZyZXNoZXIgb24gdGhlIG92ZXJhbGwgYGdldHNvY2tvcHRgIGZsb3csIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gVGltZSB0byBnbyByaWdodCB0byB0aGUgc291cmNlIGFuZCBleGFtaW5lIGBkb19zb2NrX2dldHNvY2tvcHRgIHdpdGhpbiBgbmV0L3NvY2tldC5jYC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgcmV0cmlldmFsIG9mIHNvY2tldCBvcHRpb25zLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG51YW5jZXMgb2YgZGlmZmVyZW50IHNvY2tldCBmYW1pbGllcyBhbmQgb3B0aW9uIGxldmVsc+KAlGBTT0xfU09DS0VUYCwgYElQUFJPVE9fVENQYCwgZXRjLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgb3ZlcmFsbCBsb2dpYyBmb3IgcmV0cmlldmluZyBhbmQgcmV0dXJuaW5nIHRoZSByZXF1ZXN0ZWQgc29ja2V0IG9wdGlvbiBkYXRhLiBUaGUgZ29hbCBpcyB0byBzb2xpZGlmeSBteSBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgY3JpdGljYWwgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIEknbSBleHBlY3RpbmcgdG8gc2VlIGEgc3dpdGNoIHN0YXRlbWVudCBoYW5kbGluZyB2YXJpb3VzIG9wdGlvbnMgYW5kIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBjb3B5aW5nIGFuZCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjYxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowOToxOS4yNTU5NzUyNzlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExOTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc29ja2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ2NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQ2NTpcXHRcXG4yNDY2OlxcdGludCBkb19zb2NrX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgYm9vbCBjb21wYXQsIGludCBsZXZlbCxcXG4yNDY3OlxcdFxcdFxcdCAgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcXG4yNDY4OlxcdHtcXG4yNDY5OlxcdFxcdGludCBtYXhfb3B0bGVuIF9fbWF5YmVfdW51c2VkID0gMDtcXG4yNDcwOlxcdFxcdGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9wcztcXG4yNDcxOlxcdFxcdHN0cnVjdCBrdmVjIGt2ZWM7XFxuMjQ3MjpcXHRcXHRzb2Nrb3B0X3Qgb3B0O1xcbjI0NzM6XFx0XFx0aW50IGVycjtcXG4yNDc0OlxcdFxcbjI0NzU6XFx0XFx0ZXJyID0gc2VjdXJpdHlfc29ja2V0X2dldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUpO1xcbjI0NzY6XFx0XFx0aWYgKGVycilcXG4yNDc3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjQ3ODpcXHRcXG4yNDc5OlxcdFxcdGlmICghY29tcGF0KVxcbjI0ODA6XFx0XFx0XFx0Y29weV9mcm9tX3NvY2twdHIoXFx1MDAyNm1heF9vcHRsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpO1xcbjI0ODE6XFx0XFxuMjQ4MjpcXHRcXHRvcHMgPSBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKTtcXG4yNDgzOlxcdFxcdGlmIChsZXZlbCA9PSBTT0xfU09DS0VUKSB7XFxuMjQ4NDpcXHRcXHRcXHRlcnIgPSBza19nZXRzb2Nrb3B0KHNvY2stXFx1MDAzZXNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbjI0ODU6XFx0XFx0fSBlbHNlIGlmIChvcHMtXFx1MDAzZWdldHNvY2tvcHRfaXRlcikge1xcbjI0ODY6XFx0XFx0XFx0ZXJyID0gc29ja3B0cl90b19zb2Nrb3B0KFxcdTAwMjZvcHQsIG9wdHZhbCwgb3B0bGVuLCBcXHUwMDI2a3ZlYyk7XFxuMjQ4NzpcXHRcXHRcXHRpZiAoZXJyKVxcbjI0ODg6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNDg5OlxcdFxcbjI0OTA6XFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VnZXRzb2Nrb3B0X2l0ZXIoc29jaywgbGV2ZWwsIG9wdG5hbWUsIFxcdTAwMjZvcHQpO1xcbjI0OTE6XFx0XFxuMjQ5MjpcXHRcXHRcXHQvKiBBbHdheXMgd3JpdGUgYmFjayBvcHRsZW4sIGV2ZW4gb24gZmFpbHVyZS4gU29tZSBwcm90b2NvbHNcXG4yNDkzOlxcdFxcdFxcdCAqIChlLmcuIENBTiByYXcpIHJldHVybiAtRVJBTkdFIGFuZCBzZXQgb3B0bGVuIHRvIHRoZVxcbjI0OTQ6XFx0XFx0XFx0ICogcmVxdWlyZWQgYnVmZmVyIHNpemUgc28gdXNlcnNwYWNlIGNhbiBkaXNjb3ZlciBpdC5cXG4yNDk1OlxcdFxcdFxcdCAqL1xcbjI0OTY6XFx0XFx0XFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFxcdTAwMjZvcHQub3B0bGVuLCBzaXplb2YoaW50KSkpXFxuMjQ5NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yNDk4OlxcdFxcdH0gZWxzZSBpZiAob3BzLVxcdTAwM2VnZXRzb2Nrb3B0KSB7XFxuMjQ5OTpcXHRcXHRcXHRpZiAoV0FSTl9PTkNFKG9wdHZhbC5pc19rZXJuZWwgfHwgb3B0bGVuLmlzX2tlcm5lbCxcXG4yNTAwOlxcdFxcdFxcdFxcdCAgICAgIFxcXCJJbnZhbGlkIGFyZ3VtZW50IHR5cGVcXFwiKSlcXG4yNTAxOlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4yNTAyOlxcdFxcbjI1MDM6XFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VnZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwudXNlcixcXG4yNTA0OlxcdFxcdFxcdFxcdFxcdCAgICAgIG9wdGxlbi51c2VyKTtcXG4yNTA1OlxcdFxcdH0gZWxzZSB7XFxuMjUwNjpcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4yNTA3OlxcdFxcdH1cXG4yNTA4OlxcdFxcbjI1MDk6XFx0XFx0aWYgKCFjb21wYXQpXFxuMjUxMDpcXHRcXHRcXHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFQoc29jay1cXHUwMDNlc2ssIGxldmVsLCBvcHRuYW1lLFxcbjI1MTE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBvcHR2YWwsIG9wdGxlbiwgbWF4X29wdGxlbixcXG4yNTEyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXJyKTtcXG4yNTEzOlxcdFxcbjI1MTQ6XFx0XFx0cmV0dXJuIGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDk6MTkuMjU4MTAxMDE5WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0NDAzNTcwMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVBfTVNGSUxURVIgR2V0c29ja29wdCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCBjb2RlIHNuaXBwZXQsIHNwZWNpZmljYWxseSB0aGUgYGRvX2lwX2dldHNvY2tvcHRgIGZ1bmN0aW9uIGFuZCB0aGUgYElQX01TRklMVEVSYCBjYXNlLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaGFuZGxlZCwgYW5kIEkgd2FudCB0byBiZSAqY2VydGFpbiogdGhlcmUgYXJlIG5vIG1lbW9yeSBzYWZldHkgaXNzdWVzIG9yIG90aGVyIHZ1bG5lcmFiaWxpdGllcy5cblxuUmlnaHQsIHRoZSBjb3JlIG9mIHRoZSBgSVBfTVNGSUxURVJgIGhhbmRsaW5nIHNlZW1zIHRvIGJlIGhlcmUuIEkgc2VlIGEgYHN0cnVjdCBpcF9tc2ZpbHRlciBtc2Y7YCBiZWluZyBkZWNsYXJlZCwgYWxvbmcgd2l0aCBgc3RydWN0IGt2ZWMga3ZlYztgIGFuZCBgc29ja29wdF90IG9wdDtgLiBTdGFuZGFyZCBzdHVmZiwgc28gZmFyLiBUaGUgZmlyc3QgY2hlY2ssIGBpZiAobGVuIFx1MDAzYyBJUF9NU0ZJTFRFUl9TSVpFKDApKWAsIGlzIGludGVyZXN0aW5nLiBJdCdzIGEgc2l6ZSBjaGVjayByZWxhdGVkIHRvIHRoZSBwcm92aWRlZCBidWZmZXIuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBvcmlnaW4gb2YgYGxlbmAuIFdoZXJlIGRvZXMgdGhhdCB2YWx1ZSBjb21lIGZyb20/IEl0J3MgY3J1Y2lhbCB0byB0cmFjZSB0aGF0IGJhY2sgdG8gaXRzIHNvdXJjZSB0byBlbnN1cmUgaXRzIHZhbHVlIGlzIHZhbGlkIGFuZCB0cnVzdGVkLiBMZXQncyBzZWUgaG93IGBsZW5gIGlzIGhhbmRsZWQgaW4gdGhpcyBmdW5jdGlvbi4gVGhpcyBpcyBjcml0aWNhbCBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzE4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6MDk6MzMuNjYxNjc1MDE4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MDU6XFx0fVxcbjE1MDY6XFx0XFxuMTUwNzpcXHRpbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuMTUwODpcXHRcXHRcXHQgICAgIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXFxuMTUwOTpcXHR7XFxuMTUxMDpcXHRcXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XFxuMTUxMTpcXHRcXHRib29sIG5lZWRzX3J0bmwgPSBnZXRzb2Nrb3B0X25lZWRzX3J0bmwob3B0bmFtZSk7XFxuMTUxMjpcXHRcXHRpbnQgdmFsLCBlcnIgPSAwO1xcbjE1MTM6XFx0XFx0aW50IGxlbjtcXG4xNTE0OlxcdFxcbjE1MTU6XFx0XFx0aWYgKGxldmVsICE9IFNPTF9JUClcXG4xNTE2OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xNTE3OlxcdFxcbjE1MTg6XFx0XFx0aWYgKGlwX21yb3V0ZV9vcHQob3B0bmFtZSkpXFxuMTUxOTpcXHRcXHRcXHRyZXR1cm4gaXBfbXJvdXRlX2dldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4xNTIwOlxcdFxcbjE1MjE6XFx0XFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKVxcbjE1MjI6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTUyMzpcXHRcXHRpZiAobGVuIFxcdTAwM2MgMClcXG4xNTI0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE1MjU6XFx0XFxuMTUyNjpcXHRcXHQvKiBIYW5kbGUgb3B0aW9ucyB0aGF0IGNhbiBiZSByZWFkIHdpdGhvdXQgbG9ja2luZyB0aGUgc29ja2V0LiAqL1xcbjE1Mjc6XFx0XFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuMTUyODpcXHRcXHRjYXNlIElQX1BLVElORk86XFxuMTUyOTpcXHRcXHRcXHR2YWwgPSBpbmV0X3Rlc3RfYml0KFBLVElORk8sIHNrKTtcXG4xNTMwOlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNTMxOlxcdFxcdGNhc2UgSVBfUkVDVlRUTDpcXG4xNTMyOlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoVFRMLCBzayk7XFxuMTUzMzpcXHRcXHRcXHRnb3RvIGNvcHl2YWw7XFxuMTUzNDpcXHRcXHRjYXNlIElQX1JFQ1ZUT1M6XFxuMTUzNTpcXHRcXHRcXHR2YWwgPSBpbmV0X3Rlc3RfYml0KFRPUywgc2spO1xcbjE1MzY6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1Mzc6XFx0XFx0Y2FzZSBJUF9SRUNWT1BUUzpcXG4xNTM4OlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoUkVDVk9QVFMsIHNrKTtcXG4xNTM5OlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNTQwOlxcdFxcdGNhc2UgSVBfUkVUT1BUUzpcXG4xNTQxOlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoUkVUT1BUUywgc2spO1xcbjE1NDI6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1NDM6XFx0XFx0Y2FzZSBJUF9QQVNTU0VDOlxcbjE1NDQ6XFx0XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChQQVNTU0VDLCBzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjA5OjMzLjY2MTgyNTE1OFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODQ4MjcwNzQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBJUF9NU0ZJTFRFUiBHZXRzb2Nrb3B0IEltcGxlbWVudGF0aW9uIGFuZCBLTVNBTiBOZWVkcyBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBiZWVuIHRyYWNpbmcgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBgZ2V0c29ja29wdGAgY2FsbCBmb3IgYElQX01TRklMVEVSYCBhbmQgZXZhbHVhdGluZyB3aGV0aGVyIHRoZSByZWNlbnQgY2hhbmdlcyByZXF1aXJlIEtNU0FOLiBUaGUgY29yZSBvZiBpdCBib2lscyBkb3duIHRvIGhvdyB3ZSBoYW5kbGUgdGhlIHZhcmlhYmxlLWxlbmd0aCBzb3VyY2UgbGlzdC4gIFRoZSBpbml0aWFsIGBjb3B5X2Zyb21fc29ja3B0cmAgb3BlcmF0aW9uIGdyYWJzIHRoZSBmaXhlZCBwYXJ0IG9mIGBzdHJ1Y3QgaXBfbXNmaWx0ZXJgICgxNiBieXRlcykgZnJvbSB1c2VyIHNwYWNlLCBwb3B1bGF0aW5nIHRoZSBgbXNmYCBzdHJ1Y3QuIFRoYXQgY292ZXJzIGBpbXNmX211bHRpYWRkcmAsIGBpbXNmX2ludGVyZmFjZWAsIGBpbXNmX2Ztb2RlYCBhbmQgYGltc2ZfbnVtc3JjYC4gIE5vIHBhZGRpbmcgd29ycmllcyBoZXJlLCBhbGwgMzItYml0IGFsaWduZWQuXG5cblRoZW4gdGhlIGBzb2Nrb3B0X3RvX3NvY2twdHJgIHN0dWZmIHNldHMgdXAgYGl0ZXJfaW5gLCBgaXRlcl9vdXRgIGFuZCB0aGUgYG9wdGxlbmAsIHdoaWNoIGNhbiBiZSBjcml0aWNhbC4gVGhlIGBpcF9tY19tc2ZnZXRgIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgaGFwcGVucy4gSXQgdmFsaWRhdGVzIHRoZSBtdWx0aWNhc3QgYWRkcmVzcywgZmluZHMgdGhlIHJlbGV2YW50IG11bHRpY2FzdCBzb2NrZXQgbGlzdCBlbnRyeSAoYHBtY2ApLCBhbmQgcG9wdWxhdGVzIGBtc2YtXHUwMDNlaW1zZl9mbW9kZWAgYW5kIGBtc2YtXHUwMDNlaW1zZl9udW1zcmNgLiAgQ3J1Y2lhbGx5LCBpdCBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2Ygc291cmNlIGFkZHJlc3NlcyAoYGNvcHljb3VudGApIHRvIGNvcHkgYmFjayB0byB1c2VyIHNwYWNlLiBUaGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gYGNvcHljb3VudGAgd2l0aCB0aGUgYElQX01TRklMVEVSX1NJWkUoKWAgbWFjcm8uIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHNvY2tvcHRfZXhwYW5kX291dGAsIHdoaWNoIGV4cGFuZHMgdGhlIG91dHB1dCBpdGVyYXRvcidzIGJ1ZmZlci4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgdXNlciBtaWdodCBwcm92aWRlIGEgc21hbGxlciBgb3B0bGVuYCB0aGFuIHRoZSBmaW5hbCBzaXplIHRoYXQgbmVlZHMgdG8gYmUgY29waWVkIGJhY2suIFRoaXMgZXhwYW5zaW9uIGVuc3VyZXMgdGhhdCB0aGUgdXNlci1wcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoIGZvciB0aGUgcG90ZW50aWFsbHkgbGFyZ2VyIHNvdXJjZSBsaXN0LlxuXG5JJ3ZlIGNhcmVmdWxseSBleGFtaW5lZCB0aGUgZGF0YSBmbG93IHRvIGVuc3VyZSB3ZSBkb24ndCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgbXNmYCAodGhlIGZpeGVkIHBhcnQpIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBjb3BpZWQgb3V0LiBgcHNsLVx1MDAzZXNsX2FkZHJgLCB0aGUgZmxleGlibGUgYXJyYXkgaG9sZGluZyBzb3VyY2UgYWRkcmVzc2VzLCBpcyBzaXplZCBhbmQgcG9wdWxhdGVkIGNvcnJlY3RseSBiYXNlZCBvbiBgY291bnRgLCB3aGljaCBpcyBkZXJpdmVkIGZyb20gYHBtYy1cdTAwM2VzZmxpc3RgIGRhdGEgd2hpY2ggY29udGFpbnMgYHBzbC1cdTAwM2VzbF9jb3VudGAuIFRoZSBgY29weWNvdW50YCBkZXRlcm1pbmVzIHRoZSBhY3R1YWwgbnVtYmVyIG9mIHNvdXJjZSBhZGRyZXNzZXMgdG8gY29weSwgYW5kIGl0IGlzIGFsd2F5cyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHBzbC1cdTAwM2VzbF9jb3VudGAsIGFuZCBhbGwgYGxlbmAgYnl0ZXMgZnJvbSBgcHNsLVx1MDAzZXNsX2FkZHJgIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gYG9wdGxlbmAgaXMgaW5pdGlhbGl6ZWQgdG9vLiBJJ3ZlIGFsc28gY2hlY2tlZCB0aGUgaGFuZGxpbmcgb2YgYGt2ZWNgIGFuZCBlbnN1cmVkIGl0J3Mgc2FmZS5cblxuVGhlIG9yaWdpbmFsIGNvZGUgZGlyZWN0bHkgY2FsY3VsYXRlZCB0aGUgb2Zmc2V0IGFuZCB1c2VkIGBjb3B5X3RvX3NvY2twdHJfb2Zmc2V0YC4gVGhpcyBuZXcgaW1wbGVtZW50YXRpb24gbWFrZXMgdXNlIG9mIGEgYHNvY2tvcHRfZXhwYW5kX291dGAgdXRpbGl0eSB3aGljaCBlbnN1cmVzIG5vIHRydW5jYXRpb24gaGFwcGVucy4gIFRoZSBleHBhbnNpb24gb2YgdGhlIGl0ZXJhdG9yIGlzIHRoZSBrZXkgY2hhbmdlIHRvIGhhbmRsZSB0aGUgdmFyaWFibGUtbGVuZ3RoIHBhcnQgb2YgdGhlIHN0cnVjdC4gRXZlcnl0aGluZyBoYXMgYmVlbiBpbml0aWFsaXplZCBvciBwb3B1bGF0ZWQgYmVmb3JlIGdldHRpbmcgY29waWVkIHRvIHRoZSBpdGVyYXRvciBhbmQgYmFjayB0byB1c2Vyc3BhY2UuXG5cbkJhc2VkIG9uIHRoZSBLTVNBTiBndWlkZWxpbmVzLCB0aGlzIHJlZmFjdG9yaW5nIGRvZXNuJ3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gIEFsbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgdGhlcmUncyBubyByaXNrIG9mIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgcHJpbWFyaWx5IGFib3V0IHN0cmVhbWxpbmluZyBhbmQgbW9kZXJuaXppbmcgdGhlIGdldHNvY2tvcHQgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTY4LCJPdXRwdXRUb2tlbnMiOjM0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5ODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDowOTo1Mi4xNDQ1MzUzNDZaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgSVBfTVNGSUxURVIgZ2V0c29ja29wdCBoYW5kbGluZyB0byB1c2UgdGhlIG5ldyBzb2Nrb3B0X3QgLyBpb3ZfaXRlciBpbmZyYXN0cnVjdHVyZSB2aWEgYHNvY2twdHJfdG9fc29ja29wdCgpYCwgYHNvY2tvcHRfZXhwYW5kX291dCgpYCwgYW5kIGBjb3B5X3RvX2l0ZXIoKWAuIFxcblxcbi0gSW4gYGRvX2lwX2dldHNvY2tvcHQoKWAsIGBtc2ZgIGlzIHBvcHVsYXRlZCBmcm9tIHVzZXJzcGFjZSB2aWEgYGNvcHlfZnJvbV9zb2NrcHRyKClgIGZvciBgSVBfTVNGSUxURVJfU0laRSgwKWAgKDE2IGJ5dGVzKSwgY292ZXJpbmcgYWxsIHNjYWxhciBmaWVsZHMgKGBpbXNmX211bHRpYWRkcmAsIGBpbXNmX2ludGVyZmFjZWAsIGBpbXNmX2Ztb2RlYCwgYGltc2ZfbnVtc3JjYCksIHdpdGggYGltc2ZfZm1vZGVgIGFuZCBgaW1zZl9udW1zcmNgIHN1YnNlcXVlbnRseSB1cGRhdGVkIGJlZm9yZSBgY29weV90b19pdGVyKClgIGNvcGllcyBleGFjdGx5IDE2IGJ5dGVzLiBUaGVyZSBpcyBubyBzdHJ1Y3QgcGFkZGluZyBpbiBgc3RydWN0IGlwX21zZmlsdGVyYC5cXG4tIFRoZSBtdWx0aWNhc3Qgc291cmNlIGZpbHRlciBhZGRyZXNzIGFycmF5IGBwc2wtXFx1MDAzZXNsX2FkZHJgIGlzIGNvcGllZCB1cCB0byBgY29weWNvdW50IFxcdTAwM2M9IHBzbC1cXHUwMDNlc2xfY291bnRgIGVsZW1lbnRzLCB3aGljaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEuXFxuLSBgc29ja29wdF9leHBhbmRfb3V0KClgIGFuZCBgc29ja3B0cl90b19zb2Nrb3B0KClgIG9ubHkgYWRqdXN0IGl0ZXJhdG9yIGRlc2NyaXB0b3JzIGZvciB1c2VyIG1lbW9yeSBib3VuZGFyaWVzIGFuZCBkbyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5Llxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBQb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyBzdWNoIGFzIG91dC1vZi1ib3VuZHMgdXNlciBidWZmZXIgYWNjZXNzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOKSBhbmQgY29weS10by11c2VyIGZhdWx0IGhhbmRsaW5nLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIElQX01TRklMVEVSIGdldHNvY2tvcHQgaGFuZGxpbmcgdG8gdXNlIHRoZSBuZXcgc29ja29wdF90IC8gaW92X2l0ZXIgaW5mcmFzdHJ1Y3R1cmUgdmlhIGBzb2NrcHRyX3RvX3NvY2tvcHQoKWAsIGBzb2Nrb3B0X2V4cGFuZF9vdXQoKWAsIGFuZCBgY29weV90b19pdGVyKClgLiBcXG5cXG4tIEluIGBkb19pcF9nZXRzb2Nrb3B0KClgLCBgbXNmYCBpcyBwb3B1bGF0ZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBjb3B5X2Zyb21fc29ja3B0cigpYCBmb3IgYElQX01TRklMVEVSX1NJWkUoMClgICgxNiBieXRlcyksIGNvdmVyaW5nIGFsbCBzY2FsYXIgZmllbGRzIChgaW1zZl9tdWx0aWFkZHJgLCBgaW1zZl9pbnRlcmZhY2VgLCBgaW1zZl9mbW9kZWAsIGBpbXNmX251bXNyY2ApLCB3aXRoIGBpbXNmX2Ztb2RlYCBhbmQgYGltc2ZfbnVtc3JjYCBzdWJzZXF1ZW50bHkgdXBkYXRlZCBiZWZvcmUgYGNvcHlfdG9faXRlcigpYCBjb3BpZXMgZXhhY3RseSAxNiBieXRlcy4gVGhlcmUgaXMgbm8gc3RydWN0IHBhZGRpbmcgaW4gYHN0cnVjdCBpcF9tc2ZpbHRlcmAuXFxuLSBUaGUgbXVsdGljYXN0IHNvdXJjZSBmaWx0ZXIgYWRkcmVzcyBhcnJheSBgcHNsLVxcdTAwM2VzbF9hZGRyYCBpcyBjb3BpZWQgdXAgdG8gYGNvcHljb3VudCBcXHUwMDNjPSBwc2wtXFx1MDAzZXNsX2NvdW50YCBlbGVtZW50cywgd2hpY2ggYXJlIGZ1bGx5IGluaXRpYWxpemVkIGtlcm5lbCBkYXRhLlxcbi0gYHNvY2tvcHRfZXhwYW5kX291dCgpYCBhbmQgYHNvY2twdHJfdG9fc29ja29wdCgpYCBvbmx5IGFkanVzdCBpdGVyYXRvciBkZXNjcmlwdG9ycyBmb3IgdXNlciBtZW1vcnkgYm91bmRhcmllcyBhbmQgZG8gbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gUG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgc3VjaCBhcyBvdXQtb2YtYm91bmRzIHVzZXIgYnVmZmVyIGFjY2VzcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTikgYW5kIGNvcHktdG8tdXNlciBmYXVsdCBoYW5kbGluZy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9svpb[1] Phase: Succeeded StartedAt: 2026-09-10 10:10:03 +0000 UTC FinishedAt: 2026-09-10 10:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 10:10:03 +0000 UTC FinishedAt: 2026-09-10 10:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2] Phase: Succeeded StartedAt: 2026-09-10 10:10:03 +0000 UTC FinishedAt: 2026-09-10 13:53:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 10:10:03 +0000 UTC FinishedAt: 2026-09-10 13:53:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 10:10:03 +0000 UTC FinishedAt: 2026-09-10 10:10:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 10:10:03 +0000 UTC FinishedAt: 2026-09-10 10:10:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9svpb/series-workflow9svpb-convert-artifact-4079975127/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 10:10:14 +0000 UTC FinishedAt: 2026-09-10 10:27:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 10:10:14 +0000 UTC FinishedAt: 2026-09-10 10:27:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b97d7df7-c681-4133-802c-4fa144d4d3b2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9svpb/series-workflow9svpb-convert-artifact-4079975127/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "2d08de8a-021b-4c13-8543-053517788414", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9svpb/series-workflow9svpb-build-action-965212973/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 10:10:14 +0000 UTC FinishedAt: 2026-09-10 10:27:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b97d7df7-c681-4133-802c-4fa144d4d3b2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9svpb/series-workflow9svpb-convert-artifact-4079975127/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "2d08de8a-021b-4c13-8543-053517788414", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9svpb/series-workflow9svpb-build-action-965212973/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 10:27:23 +0000 UTC FinishedAt: 2026-09-10 10:27:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 10:27:23 +0000 UTC FinishedAt: 2026-09-10 10:27:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 10:27:23 +0000 UTC FinishedAt: 2026-09-10 10:27:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 10:27:23 +0000 UTC FinishedAt: 2026-09-10 10:27:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9svpb/series-workflow9svpb-convert-artifact-2962015750/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 10:27:33 +0000 UTC FinishedAt: 2026-09-10 10:29:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 10:27:33 +0000 UTC FinishedAt: 2026-09-10 10:29:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2d08de8a-021b-4c13-8543-053517788414,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9svpb/series-workflow9svpb-build-action-965212973/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 10:29:28 +0000 UTC FinishedAt: 2026-09-10 10:29:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 10:29:28 +0000 UTC FinishedAt: 2026-09-10 10:29:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 10:29:28 +0000 UTC FinishedAt: 2026-09-10 10:48:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 10:29:28 +0000 UTC FinishedAt: 2026-09-10 10:48:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b97d7df7-c681-4133-802c-4fa144d4d3b2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9svpb/series-workflow9svpb-convert-artifact-2962015750/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "3c39adfe-4ce4-48ca-9887-7ba3bc1339ee", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9svpb/series-workflow9svpb-build-action-1780227146/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 10:29:28 +0000 UTC FinishedAt: 2026-09-10 10:48:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b97d7df7-c681-4133-802c-4fa144d4d3b2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9svpb/series-workflow9svpb-convert-artifact-2962015750/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "3c39adfe-4ce4-48ca-9887-7ba3bc1339ee", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9svpb/series-workflow9svpb-build-action-1780227146/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 10:48:47 +0000 UTC FinishedAt: 2026-09-10 10:48:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 10:48:47 +0000 UTC FinishedAt: 2026-09-10 10:48:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 10:48:47 +0000 UTC FinishedAt: 2026-09-10 10:50:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 10:48:47 +0000 UTC FinishedAt: 2026-09-10 10:50:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3c39adfe-4ce4-48ca-9887-7ba3bc1339ee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9svpb/series-workflow9svpb-build-action-1780227146/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 10:50:38 +0000 UTC FinishedAt: 2026-09-10 13:53:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 10:50:38 +0000 UTC FinishedAt: 2026-09-10 13:53:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*2d08de8a-021b-4c13-8543-053517788414,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3c39adfe-4ce4-48ca-9887-7ba3bc1339ee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9svpb/series-workflow9svpb-build-action-965212973/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9svpb/series-workflow9svpb-build-action-1780227146/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 10:50:38 +0000 UTC FinishedAt: 2026-09-10 10:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 10:50:38 +0000 UTC FinishedAt: 2026-09-10 10:50:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9svpb/series-workflow9svpb-convert-artifact-4239190731/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 10:50:38 +0000 UTC FinishedAt: 2026-09-10 10:50:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 10:50:38 +0000 UTC FinishedAt: 2026-09-10 10:50:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 10:50:38 +0000 UTC FinishedAt: 2026-09-10 10:50:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 10:50:48 +0000 UTC FinishedAt: 2026-09-10 13:53:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9svpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","do_ip_getsockopt","sockptr_to_sockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"548b86839f7fb819a4d6c83b71c73ec378d24275","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_MULTICAST"],"series_id":"293ef455-185d-4e79-be98-cdce095add91","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 10:50:48 +0000 UTC FinishedAt: 2026-09-10 13:53:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2d08de8a-021b-4c13-8543-053517788414,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3c39adfe-4ce4-48ca-9887-7ba3bc1339ee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9svpb/series-workflow9svpb-build-action-965212973/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9svpb/series-workflow9svpb-build-action-1780227146/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9svpb/series-workflow9svpb-convert-artifact-4239190731/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}