Name: series-workflowfxxn6 Phase: Succeeded StartedAt: 2026-06-22 12:17:05 +0000 UTC FinishedAt: 2026-06-22 16:23:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[0] Phase: Succeeded StartedAt: 2026-06-22 12:17:05 +0000 UTC FinishedAt: 2026-06-22 12:27:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[0].run-triage Phase: Succeeded StartedAt: 2026-06-22 12:17:05 +0000 UTC FinishedAt: 2026-06-22 12:27:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "INET", "IPV6" ], "series_id": "3862deed-e572-4299-9b43-dcef3522fbbb" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_icmp_send", "ip_route_reply_fill_dst", "ip6_route_reply_fill_dst" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA2LzIyIDEyOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pY21wX3NlbmQmIzM0OywKICAgICYjMzQ7aXBfcm91dGVfcmVwbHlfZmlsbF9kc3QmIzM0OywKICAgICYjMzQ7aXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaWNtcF9zZW5kYCB0byBzZW5kIElDTVAgY29udHJvbCBtZXNzYWdlcyBmcm9tIEJQRiBwcm9ncmFtcywgYW5kIHJlZmFjdG9ycyByb3V0aW5nIGNvZGUgdG8gZXhwb3J0IGBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdGAgYW5kIGBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3RgLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTI6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyZjg0YzFhOWVjZmI5ZGZjZjIzOWYwNjM4N2JkNzNiMmQyMGMyNmQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjIgMTI6MjY6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggMDlmZmUwZjEzY2U3NTIuLmViNWE2MGQzYmFiZTJhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5AQCAtMTAwLDYgJiM0MzsxMDAsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkc3RfZW50cnkgKmlwNl9yb3V0ZV9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIGlwNl9yb3V0ZV9vdXRwdXRfZmxhZ3MobmV0LCBzaywgZmw2LCAwKTtcbiB9XG4gXG4mIzQzO2ludCBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4mIzQzO1xuIC8qIE9ubHkgY29uZGl0aW9uYWxseSByZWxlYXNlIGRzdCBpZiBmbGFncyBpbmRpY2F0ZXNcbiAgKiAhUlQ2X0xPT0tVUF9GX0RTVF9OT1JFRiBvciBkc3QgaXMgaW4gdW5jYWNoZWRfbGlzdC5cbiAgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvcm91dGUuaFxuaW5kZXggZjkwMTA2ZjM4M2M1NmQuLjMwMGQyOTJjZDlhMWYzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvcm91dGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvcm91dGUuaFxuQEAgLTE3Myw2ICYjNDM7MTczLDcgQEAgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2Zsb3coc3RydWN0IG5ldCAqLCBzdHJ1Y3QgZmxvd2k0ICpmbHAsXG4gXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbiBzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2JsYWNraG9sZV9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGRzdF9lbnRyeSAqZHN0X29yaWcpO1xuJiM0MztpbnQgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfa2V5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmxwKVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCAyZTk2YjRiODQ3Y2UxMi4uZmM2OWExNDY1MGU0MjkgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC04NCw2ICYjNDM7ODQsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGRwX3NvY2tfZHJ2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9kc2NwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcHY2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2ljbXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2Rldi5oXCYjMzQ7XG4gXG5AQCAtMTI1NDYsNiAmIzQzOzEyNTQ4LDEwMSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3hkcF9wdWxsX2RhdGEoc3RydWN0IHhkcF9tZCAqeCwgdTMyIGxlbilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGJwZl9pY21wX3NlbmQgLSBTZW5kIGFuIElDTVAgY29udHJvbCBtZXNzYWdlXG4mIzQzOyAqIEBza2JfY3R4OiBQYWNrZXQgdGhhdCB0cmlnZ2VyZWQgdGhlIGNvbnRyb2wgbWVzc2FnZVxuJiM0MzsgKiBAdHlwZTogSUNNUCB0eXBlIChvbmx5IElDTVBfREVTVF9VTlJFQUNIL0lDTVBWNl9ERVNUX1VOUkVBQ0ggc3VwcG9ydGVkKVxuJiM0MzsgKiBAY29kZTogSUNNUCBjb2RlICgwLTE1IGZvciBJUHY0LCAwLTYgZm9yIElQdjYpXG4mIzQzOyAqXG4mIzQzOyAqIFNlbmRzIGFuIElDTVAgY29udHJvbCBtZXNzYWdlIGluIHJlc3BvbnNlIHRvIHRoZSBwYWNrZXQuIFRoZSBvcmlnaW5hbCBwYWNrZXRcbiYjNDM7ICogaXMgY2xvbmVkIGJlZm9yZSBzZW5kaW5nIHRoZSBJQ01QIG1lc3NhZ2UsIHNvIHRoZSBCUEYgcHJvZ3JhbSBjYW4gc3RpbGwgbGV0XG4mIzQzOyAqIHRoZSBwYWNrZXQgcGFzcyBpZiBkZXNpcmVkLlxuJiM0MzsgKlxuJiM0MzsgKiBDdXJyZW50bHkgb25seSBJQ01QX0RFU1RfVU5SRUFDSCAoSVB2NCkgYW5kIElDTVBWNl9ERVNUX1VOUkVBQ0ggKElQdjYpIGFyZVxuJiM0MzsgKiBzdXBwb3J0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmU6XG4mIzQzOyAqICAgICAgICAgLUVJTlZBTDogSW52YWxpZCBjb2RlIHBhcmFtZXRlclxuJiM0MzsgKiAgICAgICAgIC1FQkFETVNHOiBQYWNrZXQgdG9vIHNob3J0IG9yIG1hbGZvcm1lZFxuJiM0MzsgKiAgICAgICAgIC1FTk9NRU06IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuJiM0MzsgKiAgICAgICAgIC1FQlVTWTogUmVjdXJzaW9uIGRldGVjdGVkXG4mIzQzOyAqICAgICAgICAgLUVIT1NUVU5SRUFDSDogUm91dGluZyBmYWlsZWRcbiYjNDM7ICogICAgICAgICAtRVBST1RPTk9TVVBQT1JUOiBOb24tSVAgcHJvdG9jb2xcbiYjNDM7ICogICAgICAgICAtRU9QTk9UU1VQUDogVW5zdXBwb3J0ZWQgSUNNUCB0eXBlXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2ljbXBfc2VuZChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LCBpbnQgdHlwZSwgaW50IGNvZGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopc2tiX2N0eDtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2s7XG4mIzQzO1xuJiM0MztcdHNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTtcbiYjNDM7XHRpZiAoc2sgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX2tlcm5fc29jayBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fSUNNUCB8fCBzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX0lDTVBWNikpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbiYjNDM7XHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbiYjNDM7XHRcdGlmICh0eXBlICE9IElDTVBfREVTVF9VTlJFQUNIKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRpZiAoY29kZSBcdTAwM2MgMCB8fCBjb2RlIFx1MDAzZSBOUl9JQ01QX1VOUkVBQ0gpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRcdGlmICghbnNrYilcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwobnNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKSB7XG4mIzQzO1x0XHRcdGtmcmVlX3NrYihuc2tiKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghc2tiX2RzdChuc2tiKSBcdTAwMjZcdTAwMjYgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3QobnNrYikgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiKG5za2IpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVIT1NUVU5SRUFDSDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQoSVBDQihuc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0X3NrYl9wYXJtKSk7XG4mIzQzO1xuJiM0MztcdFx0aWNtcF9zZW5kKG5za2IsIHR5cGUsIGNvZGUsIDApO1xuJiM0MztcdFx0Y29uc3VtZV9za2IobnNrYik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuJiM0MztcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4mIzQzO1x0XHRpZiAodHlwZSAhPSBJQ01QVjZfREVTVF9VTlJFQUNIKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRpZiAoY29kZSBcdTAwM2MgMCB8fCBjb2RlIFx1MDAzZSBJQ01QVjZfUkVKRUNUX1JPVVRFKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRuc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0XHRpZiAoIW5za2IpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRcdGlmICghcHNrYl9uZXR3b3JrX21heV9wdWxsKG5za2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7XG4mIzQzO1x0XHRcdGtmcmVlX3NrYihuc2tiKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghc2tiX2RzdChuc2tiKSBcdTAwMjZcdTAwMjYgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0KG5za2IpIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdGtmcmVlX3NrYihuc2tiKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KElQNkNCKG5za2IpLCAwLCBzaXplb2Yoc3RydWN0IGluZXQ2X3NrYl9wYXJtKSk7XG4mIzQzO1xuJiM0MztcdFx0aWNtcHY2X3NlbmQobnNrYiwgdHlwZSwgY29kZSwgMCk7XG4mIzQzO1x0XHRjb25zdW1lX3NrYihuc2tiKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuIFxuIGludCBicGZfZHlucHRyX2Zyb21fc2tiX3Jkb25seShzdHJ1Y3QgX19za19idWZmICpza2IsIHU2NCBmbGFncyxcbkBAIC0xMjU4OCw2ICYjNDM7MTI2ODUsMTAgQEAgQlRGX0tGVU5DU19TVEFSVChicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc29ja19vcHNfZW5hYmxlX3R4X3RzdGFtcClcbiBCVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzKVxuIFxuJiM0MztCVEZfS0ZVTkNTX1NUQVJUKGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2ljbXBfc2VuZClcbiYjNDM7QlRGX0tGVU5DU19FTkQoYnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQpXG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3NrYiA9IHtcbiBcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuIFx0LnNldCA9IFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfc2tiLFxuQEAgLTEyNjE4LDYgJiM0MzsxMjcxOSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9zb2NrX29wcyA9IHtcbiBcdC5zZXQgPSBcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzLFxuIH07XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCA9IHtcbiYjNDM7XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiYjNDM7XHQuc2V0ID0gXHUwMDI2YnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbkBAIC0xMjYzOSw2ICYjNDM7MTI3NDUsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxuIFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxuIFx0XHRcdFx0XHQgICAgICAgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpO1xuIFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTtcbiYjNDM7XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcbiYjNDM7XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF9pY21wX3NlbmQpO1xuJiM0MztcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCBcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XG4gXHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TT0NLX09QUywgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX29wcyk7XG4gfVxuIGxhdGVfaW5pdGNhbGwoYnBmX2tmdW5jX2luaXQpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmNcbmluZGV4IGZlY2Y2NjIxZjY3OWY5Li5jMWMwNzI0ZTRkNGRkNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuY1xuQEAgLTI1MiwyMSAmIzQzOzI1Miw2IEBAIHN0YXRpYyB2b2lkIG5mX3JlamVjdF9pcF90Y3BoZHJfcHV0KHN0cnVjdCBza19idWZmICpuc2tiLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqXG4gXHRuc2tiLVx1MDAzZWNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbilcbi17XG4tXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMO1xuLVx0c3RydWN0IGZsb3dpIGZsO1xuLVxuLVx0bWVtc2V0KFx1MDAyNmZsLCAwLCBzaXplb2Yoc3RydWN0IGZsb3dpKSk7XG4tXHRmbC51LmlwNC5kYWRkciA9IGlwX2hkcihza2JfaW4pLVx1MDAzZXNhZGRyO1xuLVx0bmZfaXBfcm91dGUoZGV2X25ldChza2JfaW4tXHUwMDNlZGV2KSwgXHUwMDI2ZHN0LCBcdTAwMjZmbCwgZmFsc2UpO1xuLVx0aWYgKCFkc3QpXG4tXHRcdHJldHVybiAtMTtcbi1cbi1cdHNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKiBTZW5kIFJTVCByZXBseSAqL1xuIHZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcbiBcdFx0ICAgaW50IGhvb2spXG5AQCAtMjc5LDcgJiM0MzsyNjQsNyBAQCB2b2lkIG5mX3NlbmRfcmVzZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvbGRza2IsXG4gXHRpZiAoIW90aClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCFza2JfZHN0KG9sZHNrYikgXHUwMDI2XHUwMDI2IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qob2xkc2tiKSBcdTAwM2MgMClcbiYjNDM7XHRpZiAoIXNrYl9kc3Qob2xkc2tiKSBcdTAwMjZcdTAwMjYgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qob2xkc2tiKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHNrYl9ydGFibGUob2xkc2tiKS1cdTAwM2VydF9mbGFncyBcdTAwMjYgKFJUQ0ZfQlJPQURDQVNUIHwgUlRDRl9NVUxUSUNBU1QpKVxuQEAgLTM1Miw3ICYjNDM7MzM3LDcgQEAgdm9pZCBuZl9zZW5kX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IGNvZGUsIGludCBob29rKVxuIFx0aWYgKGlwaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCFza2JfZHN0KHNrYl9pbikgXHUwMDI2XHUwMDI2IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qoc2tiX2luKSBcdTAwM2MgMClcbiYjNDM7XHRpZiAoIXNrYl9kc3Qoc2tiX2luKSBcdTAwMjZcdTAwMjYgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc2tiX2luKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYl9pbikgfHxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuY1xuaW5kZXggM2YzZGU1MTY0ZDZlNTguLmYyNDYwOTkzM2ZiZWNiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvcm91dGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvcm91dGUuY1xuQEAgLTI5NDIsNiAmIzQzOzI5NDIsMjEgQEAgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2Zsb3coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbHA0LFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpcF9yb3V0ZV9vdXRwdXRfZmxvdyk7XG4gXG4mIzQzO2ludCBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0YWJsZSAqcnQ7XG4mIzQzO1x0c3RydWN0IGZsb3dpNCBmbDQgPSB7XG4mIzQzO1x0XHQuZGFkZHIgPSBpcF9oZHIoc2tiKS1cdTAwM2VzYWRkclxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBcdTAwMjZmbDQpO1xuJiM0MztcdGlmIChJU19FUlIocnQpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocnQpO1xuJiM0MztcdHNrYl9kc3Rfc2V0KHNrYiwgXHUwMDI2cnQtXHUwMDNlZHN0KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpcF9yb3V0ZV9yZXBseV9maWxsX2RzdCk7XG4mIzQzO1xuIC8qIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgaGVsZCAqL1xuIHN0YXRpYyBpbnQgcnRfZmlsbF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGRzdCwgX19iZTMyIHNyYyxcbiBcdFx0XHRzdHJ1Y3QgcnRhYmxlICpydCwgdTMyIHRhYmxlX2lkLCBkc2NwX3QgZHNjcCxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jXG5pbmRleCBlZjViN2U4NWNmZmE4YS4uN2QyZjU3N2U3MmI4ODIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmNcbkBAIC0yOTMsMjEgJiM0MzsyOTMsNiBAQCBuZl9yZWplY3RfaXA2X3RjcGhkcl9wdXQoc3RydWN0IHNrX2J1ZmYgKm5za2IsXG4gXHRcdFx0XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpLCAwKSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmZfcmVqZWN0Nl9maWxsX3NrYl9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbilcbi17XG4tXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMO1xuLVx0c3RydWN0IGZsb3dpIGZsO1xuLVxuLVx0bWVtc2V0KFx1MDAyNmZsLCAwLCBzaXplb2Yoc3RydWN0IGZsb3dpKSk7XG4tXHRmbC51LmlwNi5kYWRkciA9IGlwdjZfaGRyKHNrYl9pbiktXHUwMDNlc2FkZHI7XG4tXHRuZl9pcDZfcm91dGUoZGV2X25ldChza2JfaW4tXHUwMDNlZGV2KSwgXHUwMDI2ZHN0LCBcdTAwMjZmbCwgZmFsc2UpO1xuLVx0aWYgKCFkc3QpXG4tXHRcdHJldHVybiAtMTtcbi1cbi1cdHNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiB2b2lkIG5mX3NlbmRfcmVzZXQ2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxuIFx0XHQgICAgaW50IGhvb2spXG4ge1xuQEAgLTQ0MCw3ICYjNDM7NDI1LDcgQEAgdm9pZCBuZl9zZW5kX3VucmVhY2g2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYl9pbixcbiBcdGlmIChob29rbnVtID09IE5GX0lORVRfTE9DQUxfT1VUIFx1MDAyNlx1MDAyNiBza2JfaW4tXHUwMDNlZGV2ID09IE5VTEwpXG4gXHRcdHNrYl9pbi1cdTAwM2VkZXYgPSBuZXQtXHUwMDNlbG9vcGJhY2tfZGV2O1xuIFxuLVx0aWYgKCFza2JfZHN0KHNrYl9pbikgXHUwMDI2XHUwMDI2IG5mX3JlamVjdDZfZmlsbF9za2JfZHN0KHNrYl9pbikgXHUwMDNjIDApXG4mIzQzO1x0aWYgKCFza2JfZHN0KHNrYl9pbikgXHUwMDI2XHUwMDI2IGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdChza2JfaW4pIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpY21wdjZfc2VuZChza2JfaW4sIElDTVBWNl9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCA2MzYxYWQyZmNmNzcxNS4uMGZhNTZjODAxMTc4MTYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5AQCAtMjczMiw2ICYjNDM7MjczMiwyNCBAQCBzdHJ1Y3QgZHN0X2VudHJ5ICppcDZfcm91dGVfb3V0cHV0X2ZsYWdzKHN0cnVjdCBuZXQgKm5ldCxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoaXA2X3JvdXRlX291dHB1dF9mbGFncyk7XG4gXG4mIzQzO2ludCBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc3RfZW50cnkgKnJlc3VsdDtcbiYjNDM7XHRzdHJ1Y3QgZmxvd2k2IGZsID0ge1xuJiM0MztcdFx0LmRhZGRyID0gaXB2Nl9oZHIoc2tiKS1cdTAwM2VzYWRkclxuJiM0MztcdH07XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0cmVzdWx0ID0gaXA2X3JvdXRlX291dHB1dChkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBcdTAwMjZmbCk7XG4mIzQzO1x0ZXJyID0gcmVzdWx0LVx1MDAzZWVycm9yO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRkc3RfcmVsZWFzZShyZXN1bHQpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNrYl9kc3Rfc2V0KHNrYiwgcmVzdWx0KTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdCk7XG4mIzQzO1xuIHN0cnVjdCBkc3RfZW50cnkgKmlwNl9ibGFja2hvbGVfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Rfb3JpZylcbiB7XG4gXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqb3J0ID0gZHN0X3J0Nl9pbmZvKGRzdF9vcmlnKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pY21wX3NlbmRfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ljbXBfc2VuZF9rZnVuYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmZkNGI4ZmE3OGEwMTg0XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pY21wX3NlbmRfa2Z1bmMuY1xuQEAgLTAsMCAmIzQzOzEsMjUwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXR3b3JrX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NjZ3JvdXBfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VycnF1ZXVlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjcG9sbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2ljbXBfc2VuZC5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVElNRU9VVF9NUyAxMDAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIElDTVBfREVTVF9VTlJFQUNIIDNcbiYjNDM7I2RlZmluZSBJQ01QVjZfREVTVF9VTlJFQUNIIDFcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSUNNUF9IT1NUX1VOUkVBQ0ggMVxuJiM0MzsjZGVmaW5lIElDTVBfRlJBR19ORUVERUQgNFxuJiM0MzsjZGVmaW5lIE5SX0lDTVBfVU5SRUFDSCAxNVxuJiM0MzsjZGVmaW5lIElDTVBWNl9SRUpFQ1RfUk9VVEUgNlxuJiM0MztcbiYjNDM7c3RhdGljIGludCBjb25uZWN0X3RvX2ZkX25vbmJsb2NrKGludCBzZXJ2ZXJfZmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xuJiM0MztcdHNvY2tsZW5fdCBsZW4gPSBzaXplb2YoYWRkcik7XG4mIzQzO1x0aW50IGZkLCBlcnIsIG9uID0gMTtcbiYjNDM7XG4mIzQzO1x0aWYgKGdldHNvY2tuYW1lKHNlcnZlcl9mZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIFx1MDAyNmxlbikpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdGZkID0gc29ja2V0KGFkZHIuc3NfZmFtaWx5LCBTT0NLX1NUUkVBTSB8IFNPQ0tfTk9OQkxPQ0ssIDApO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfUkVDVkVSUiwgXHUwMDI2b24sIHNpemVvZihvbikpIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YWRkciwgbGVuKTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyAhPSBFSU5QUk9HUkVTUykge1xuJiM0MztcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZWFkX2ljbXBfZXJycXVldWUoaW50IHNvY2tmZCwgaW50IGV4cGVjdGVkX2NvZGUsIGludCBhZilcbiYjNDM7e1xuJiM0MztcdGludCBleHBlY3RlZF9lZV90eXBlID0gKGFmID09IEFGX0lORVQpID8gSUNNUF9ERVNUX1VOUkVBQ0ggOlxuJiM0MztcdFx0XHRcdFx0XHQgSUNNUFY2X0RFU1RfVU5SRUFDSDtcbiYjNDM7XHRpbnQgZXhwZWN0ZWRfb3JpZ2luID0gKGFmID09IEFGX0lORVQpID8gU09fRUVfT1JJR0lOX0lDTVAgOlxuJiM0MztcdFx0XHRcdFx0XHRTT19FRV9PUklHSU5fSUNNUDY7XG4mIzQzO1x0aW50IGV4cGVjdGVkX2xldmVsID0gKGFmID09IEFGX0lORVQpID8gSVBQUk9UT19JUCA6IElQUFJPVE9fSVBWNjtcbiYjNDM7XHRpbnQgZXhwZWN0ZWRfdHlwZSA9IChhZiA9PSBBRl9JTkVUKSA/IElQX1JFQ1ZFUlIgOiBJUFY2X1JFQ1ZFUlI7XG4mIzQzO1x0c3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICpzb2NrX2VycjtcbiYjNDM7XHRjaGFyIGN0cmxfYnVmWzUxMl07XG4mIzQzO1x0c3RydWN0IG1zZ2hkciBtc2cgPSB7XG4mIzQzO1x0XHQubXNnX2NvbnRyb2wgPSBjdHJsX2J1ZixcbiYjNDM7XHRcdC5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjdHJsX2J1ZiksXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgcG9sbGZkIHBmZCA9IHtcbiYjNDM7XHRcdC5mZCA9IHNvY2tmZCxcbiYjNDM7XHRcdC5ldmVudHMgPSBQT0xMRVJSLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGNtc2doZHIgKmNtO1xuJiM0MztcdHNzaXplX3QgbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UocG9sbChcdTAwMjZwZmQsIDEsIFRJTUVPVVRfTVMpLCAxLCBcJiMzNDtwb2xsX2VycnF1ZXVlXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0biA9IHJlY3Ztc2coc29ja2ZkLCBcdTAwMjZtc2csIE1TR19FUlJRVUVVRSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UobiwgMCwgXCYjMzQ7cmVjdm1zZ19lcnJxdWV1ZVwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNtID0gQ01TR19GSVJTVEhEUihcdTAwMjZtc2cpO1xuJiM0MztcdGlmICghQVNTRVJUX05FUShjbSwgTlVMTCwgXCYjMzQ7Y21fZmlyc3RoZHJfbnVsbFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoOyBjbTsgY20gPSBDTVNHX05YVEhEUihcdTAwMjZtc2csIGNtKSkge1xuJiM0MztcdFx0aWYgKGNtLVx1MDAzZWNtc2dfbGV2ZWwgIT0gZXhwZWN0ZWRfbGV2ZWwgfHxcbiYjNDM7XHRcdCAgICBjbS1cdTAwM2VjbXNnX3R5cGUgIT0gZXhwZWN0ZWRfdHlwZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0c29ja19lcnIgPSAoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIUFTU0VSVF9FUShzb2NrX2Vyci1cdTAwM2VlZV9vcmlnaW4sIGV4cGVjdGVkX29yaWdpbixcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3NvY2tfZXJyX29yaWdpblwmIzM0OykpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdGlmICghQVNTRVJUX0VRKHNvY2tfZXJyLVx1MDAzZWVlX3R5cGUsIGV4cGVjdGVkX2VlX3R5cGUsXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtzb2NrX2Vycl90eXBlX2Rlc3RfdW5yZWFjaFwmIzM0OykpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdEFTU0VSVF9FUShzb2NrX2Vyci1cdTAwM2VlZV9jb2RlLCBleHBlY3RlZF9jb2RlLCBcJiMzNDtzb2NrX2Vycl9jb2RlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9GQUlMKFwmIzM0O25vIElQX1JFQ1ZFUlIvSVBWNl9SRUNWRVJSIGNvbnRyb2wgbWVzc2FnZSBmb3VuZFwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc3RydWN0IGljbXBfc2VuZCAqc2tlbCwgaW50IGNvZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgaW50IGFmLCBjb25zdCBjaGFyICppcClcbiYjNDM7e1xuJiM0MztcdGludCBzcnZfZmQgPSAtMSwgY2xpZW50X2ZkID0gLTE7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luIGFkZHI7XG4mIzQzO1x0c29ja2xlbl90IGxlbiA9IHNpemVvZihhZGRyKTtcbiYjNDM7XG4mIzQzO1x0c3J2X2ZkID0gc3RhcnRfc2VydmVyKGFmLCBTT0NLX1NUUkVBTSwgaXAsIDAsIFRJTUVPVVRfTVMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX0ZEKHNydl9mZCwgXCYjMzQ7c3RhcnRfc2VydmVyXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKGdldHNvY2tuYW1lKHNydl9mZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIFx1MDAyNmxlbikpIHtcbiYjNDM7XHRcdGNsb3NlKHNydl9mZCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNlcnZlcl9wb3J0ID0gbnRvaHMoYWRkci5zaW5fcG9ydCk7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldW5yZWFjaF90eXBlID0gKGFmID09IEFGX0lORVQpID8gSUNNUF9ERVNUX1VOUkVBQ0ggOlxuJiM0MztcdFx0XHRcdFx0XHQgICAgSUNNUFY2X0RFU1RfVU5SRUFDSDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2V1bnJlYWNoX2NvZGUgPSBjb2RlO1xuJiM0MztcbiYjNDM7XHRjbGllbnRfZmQgPSBjb25uZWN0X3RvX2ZkX25vbmJsb2NrKHNydl9mZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfRkQoY2xpZW50X2ZkLCBcJiMzNDtjbGllbnRfY29ubmVjdF9ub25ibG9ja1wmIzM0OykpIHtcbiYjNDM7XHRcdGNsb3NlKHNydl9mZCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTa2lwIHJlYWRpbmcgSUNNUCBlcnJvciBxdWV1ZSBpZiBjb2RlIGlzIGludmFsaWQgKi9cbiYjNDM7XHRpZiAoY29kZSBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2ICgoYWYgPT0gQUZfSU5FVCBcdTAwMjZcdTAwMjYgY29kZSBcdTAwM2M9IE5SX0lDTVBfVU5SRUFDSCkgfHxcbiYjNDM7XHRcdFx0ICAoYWYgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2IGNvZGUgXHUwMDNjPSBJQ01QVjZfUkVKRUNUX1JPVVRFKSkpXG4mIzQzO1x0XHRyZWFkX2ljbXBfZXJycXVldWUoY2xpZW50X2ZkLCBjb2RlLCBhZik7XG4mIzQzO1xuJiM0MztcdGNsb3NlKGNsaWVudF9mZCk7XG4mIzQzO1x0Y2xvc2Uoc3J2X2ZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX2ljbXBfdGVzdChzdHJ1Y3QgaWNtcF9zZW5kICpza2VsLCBpbnQgYWYsIGNvbnN0IGNoYXIgKmlwLFxuJiM0MztcdFx0XHQgIGludCBtYXhfY29kZSlcbiYjNDM7e1xuJiM0MztcdGZvciAoaW50IGNvZGUgPSAwOyBjb2RlIFx1MDAzYz0gbWF4X2NvZGU7IGNvZGUmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIFRDUCBzdGFjayByZWFjdHMgZGlmZmVyZW50bHkgd2hlbiBhc2tpbmcgZm9yXG4mIzQzO1x0XHQgKiBmcmFnbWVudGF0aW9uLCBsZXQmIzM5O3MgaWdub3JlIGl0IGZvciBub3cuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChhZiA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBjb2RlID09IElDTVBfRlJBR19ORUVERUQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgY29kZSwgYWYsIGlwKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNla2Z1bmNfcmV0LCAwLCBcJiMzNDtrZnVuY19yZXRcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGVzdCBhbiBpbnZhbGlkIGNvZGUgKi9cbiYjNDM7XHR0cmlnZ2VyX3Byb2dfcmVhZF9pY21wX2VycnF1ZXVlKHNrZWwsIC0xLCBhZiwgaXApO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNla2Z1bmNfcmV0LCAtRUlOVkFMLCBcJiMzNDtrZnVuY19yZXRcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3RfaWNtcF9zZW5kX3VucmVhY2hfY2dyb3VwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWNtcF9zZW5kICpza2VsO1xuJiM0MztcdGludCBjZ3JvdXBfZmQgPSAtMTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGljbXBfc2VuZF9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsX29wZW5cJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRjZ3JvdXBfZmQgPSB0ZXN0X19qb2luX2Nncm91cChcJiMzNDsvaWNtcF9zZW5kX3VucmVhY2hfY2dyb3VwXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsIFwmIzM0O2pvaW5fY2dyb3VwXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2VsaW5rcy5lZ3Jlc3MgPVxuJiM0MztcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5lZ3Jlc3MsIGNncm91cF9mZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3MuZWdyZXNzLCBcJiMzNDtwcm9nX2F0dGFjaF9jZ3JvdXBcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtpcHY0XCYjMzQ7KSlcbiYjNDM7XHRcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVCwgXCYjMzQ7MTI3LjAuMC4xXCYjMzQ7LCBOUl9JQ01QX1VOUkVBQ0gpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtpcHY2XCYjMzQ7KSlcbiYjNDM7XHRcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVDYsIFwmIzM0Ozo6MVwmIzM0OywgSUNNUFY2X1JFSkVDVF9ST1VURSk7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdGljbXBfc2VuZF9fZGVzdHJveShza2VsKTtcbiYjNDM7XHRpZiAoY2dyb3VwX2ZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGNncm91cF9mZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9pY21wX3NlbmRfdW5yZWFjaF90Yyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3RjeF9vcHRzLCBvcHRzKTtcbiYjNDM7XHRzdHJ1Y3QgaWNtcF9zZW5kICpza2VsO1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c2tlbF9vcGVuXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdGN4KHNrZWwtXHUwMDNlcHJvZ3MudGNfZWdyZXNzLCAxLCBcdTAwMjZvcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCYjMzQ7cHJvZ19hdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtpcHY0XCYjMzQ7KSlcbiYjNDM7XHRcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVCwgXCYjMzQ7MTI3LjAuMC4xXCYjMzQ7LCBOUl9JQ01QX1VOUkVBQ0gpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtpcHY2XCYjMzQ7KSlcbiYjNDM7XHRcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVDYsIFwmIzM0Ozo6MVwmIzM0OywgSUNNUFY2X1JFSkVDVF9ST1VURSk7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuJiM0MztcdGljbXBfc2VuZF9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2ljbXBfc2VuZF91bnJlYWNoX3JlY3Vyc2lvbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGljbXBfc2VuZCAqc2tlbDtcbiYjNDM7XHRpbnQgY2dyb3VwX2ZkID0gLTE7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c2tlbF9vcGVuXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNldHVwX2Nncm91cF9lbnZpcm9ubWVudCgpKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RmFpbGVkIHRvIHNldHVwIGNncm91cCBlbnZpcm9ubWVudFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjZ3JvdXBfZmQgPSBnZXRfcm9vdF9jZ3JvdXAoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsIFwmIzM0O2dldF9yb290X2Nncm91cFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdHNrZWwtXHUwMDNlZGF0YS1cdTAwM2V0YXJnZXRfcGlkID0gZ2V0cGlkKCk7XG4mIzQzO1x0c2tlbC1cdTAwM2VsaW5rcy5yZWN1cnNpb24gPVxuJiM0MztcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5yZWN1cnNpb24sIGNncm91cF9mZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3MucmVjdXJzaW9uLCBcJiMzNDtwcm9nX2F0dGFjaF9jZ3JvdXBcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHR0cmlnZ2VyX3Byb2dfcmVhZF9pY21wX2VycnF1ZXVlKHNrZWwsIElDTVBfSE9TVF9VTlJFQUNILCBBRl9JTkVULFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7MTI3LjAuMC4xXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCZWNhdXNlIHRoZXJlJiMzOTtzIHJlY3Vyc2lvbiBpbnZvbHZlZCwgdGhlIGZpcnN0IGNhbGwgd2lsbCByZXR1cm4gYXRcbiYjNDM7XHQgKiBpbmRleCAxIHNpbmNlIGl0IHdpbGwgcmV0dXJuIHRoZSBzZWNvbmQsIGFuZCB0aGUgc2Vjb25kIGNhbGwgd2lsbFxuJiM0MztcdCAqIHJldHVybiBhdCBpbmRleCAwIHNpbmNlIGl0IHdpbGwgcmV0dXJuIHRoZSBmaXJzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXJlY19rZnVuY19yZXRzWzBdLCAtRUJVU1ksIFwmIzM0O2tmdW5jX3JldHNbMF1cJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNlcmVjX2tmdW5jX3JldHNbMV0sIDAsIFwmIzM0O2tmdW5jX3JldHNbMV1cJiMzNDspO1xuJiM0MztcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuJiM0MztcdGljbXBfc2VuZF9fZGVzdHJveShza2VsKTtcbiYjNDM7XHRpZiAoY2dyb3VwX2ZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGNncm91cF9mZCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZmQ5Yzc2ODQ3OTdiMDdcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuY1xuQEAgLTAsMCAmIzQzOzEsMTg0IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl90cmFjaW5nX25ldC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiAxMjcuMC4wLjEgaW4gaG9zdCBieXRlIG9yZGVyICovXG4mIzQzOyNkZWZpbmUgU0VSVkVSX0lQIDB4N0YwMDAwMDFcbiYjNDM7LyogOjoxIGluIGhvc3QgYnl0ZSBvcmRlciAobGFzdCAzMi1iaXQgd29yZCkgKi9cbiYjNDM7I2RlZmluZSBTRVJWRVJfSVA2X0xPIDB4MDAwMDAwMDFcbiYjNDM7XG4mIzQzO19fdTE2IHNlcnZlcl9wb3J0ID0gMDtcbiYjNDM7aW50IHVucmVhY2hfdHlwZSA9IDA7XG4mIzQzO2ludCB1bnJlYWNoX2NvZGUgPSAwO1xuJiM0MztpbnQga2Z1bmNfcmV0ID0gLTE7XG4mIzQzO2ludCB0YXJnZXRfcGlkID0gLTE7XG4mIzQzO1xuJiM0Mzt1bnNpZ25lZCBpbnQgcmVjX2NvdW50ID0gMDtcbiYjNDM7aW50IHJlY19rZnVuY19yZXRzW10gPSB7IC0xLCAtMSB9O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2Nncm91cF9za2IvZWdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgZWdyZXNzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhO1xuJiM0MztcdHZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YV9lbmQ7XG4mIzQzO1x0c3RydWN0IGlwaGRyICppcGg7XG4mIzQzO1x0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4mIzQzO1x0c3RydWN0IHRjcGhkciAqdGNwaDtcbiYjNDM7XHRfX3U4IHZlcnNpb247XG4mIzQzO1xuJiM0MztcdGlmIChkYXRhICYjNDM7IDEgXHUwMDNlIGRhdGFfZW5kKVxuJiM0MztcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1xuJiM0MztcdHZlcnNpb24gPSAoKigoX191OCAqKWRhdGEpKSBcdTAwM2VcdTAwM2UgNDtcbiYjNDM7XG4mIzQzO1x0aWYgKHZlcnNpb24gPT0gNCkge1xuJiM0MztcdFx0aXBoID0gZGF0YTtcbiYjNDM7XHRcdGlmICgodm9pZCAqKShpcGggJiM0MzsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8XG4mIzQzO1x0XHQgICAgaXBoLVx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fVENQIHx8XG4mIzQzO1x0XHQgICAgaXBoLVx1MDAzZWRhZGRyICE9IGJwZl9odG9ubChTRVJWRVJfSVApKVxuJiM0MztcdFx0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XG4mIzQzO1x0XHR0Y3BoID0gKHZvaWQgKilpcGggJiM0MzsgaXBoLVx1MDAzZWlobCAqIDQ7XG4mIzQzO1x0XHRpZiAoKHZvaWQgKikodGNwaCAmIzQzOyAxKSBcdTAwM2UgZGF0YV9lbmQgfHxcbiYjNDM7XHRcdCAgICB0Y3BoLVx1MDAzZWRlc3QgIT0gYnBmX2h0b25zKHNlcnZlcl9wb3J0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1xuJiM0MztcdH0gZWxzZSBpZiAodmVyc2lvbiA9PSA2KSB7XG4mIzQzO1x0XHRpcDZoID0gZGF0YTtcbiYjNDM7XHRcdGlmICgodm9pZCAqKShpcDZoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZCB8fFxuJiM0MztcdFx0ICAgIGlwNmgtXHUwMDNlbmV4dGhkciAhPSBJUFBST1RPX1RDUClcbiYjNDM7XHRcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlwNmgtXHUwMDNlZGFkZHIuaW42X3UudTZfYWRkcjMyWzBdICE9IDAgfHxcbiYjNDM7XHRcdCAgICBpcDZoLVx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlsxXSAhPSAwIHx8XG4mIzQzO1x0XHQgICAgaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMl0gIT0gMCB8fFxuJiM0MztcdFx0ICAgIGlwNmgtXHUwMDNlZGFkZHIuaW42X3UudTZfYWRkcjMyWzNdICE9IGJwZl9odG9ubChTRVJWRVJfSVA2X0xPKSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1xuJiM0MztcdFx0dGNwaCA9ICh2b2lkICopKGlwNmggJiM0MzsgMSk7XG4mIzQzO1x0XHRpZiAoKHZvaWQgKikodGNwaCAmIzQzOyAxKSBcdTAwM2UgZGF0YV9lbmQgfHxcbiYjNDM7XHRcdCAgICB0Y3BoLVx1MDAzZWRlc3QgIT0gYnBmX2h0b25zKHNlcnZlcl9wb3J0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldHVybiBTS19QQVNTO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2Z1bmNfcmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFNLX0RST1A7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Yy9lZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCB0Y19lZ3Jlc3Moc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhX2VuZDtcbiYjNDM7XHRzdHJ1Y3QgZXRoaGRyICpldGg7XG4mIzQzO1x0c3RydWN0IGlwaGRyICppcGg7XG4mIzQzO1x0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4mIzQzO1x0c3RydWN0IHRjcGhkciAqdGNwaDtcbiYjNDM7XG4mIzQzO1x0ZXRoID0gZGF0YTtcbiYjNDM7XHRpZiAoKHZvaWQgKikoZXRoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZClcbiYjNDM7XHRcdHJldHVybiBUQ1hfUEFTUztcbiYjNDM7XG4mIzQzO1x0aWYgKGV0aC1cdTAwM2VoX3Byb3RvID09IGJwZl9odG9ucyhFVEhfUF9JUCkpIHtcbiYjNDM7XHRcdGlwaCA9ICh2b2lkICopKGV0aCAmIzQzOyAxKTtcbiYjNDM7XHRcdGlmICgodm9pZCAqKShpcGggJiM0MzsgMSkgXHUwMDNlIGRhdGFfZW5kKVxuJiM0MztcdFx0XHRyZXR1cm4gVENYX1BBU1M7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1RDUCB8fFxuJiM0MztcdFx0ICAgIGlwaC1cdTAwM2VkYWRkciAhPSBicGZfaHRvbmwoU0VSVkVSX0lQKSlcbiYjNDM7XHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuJiM0MztcbiYjNDM7XHRcdHRjcGggPSAodm9pZCAqKWlwaCAmIzQzOyBpcGgtXHUwMDNlaWhsICogNDtcbiYjNDM7XHRcdGlmICgodm9pZCAqKSh0Y3BoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZClcbiYjNDM7XHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0Y3BoLVx1MDAzZWRlc3QgIT0gYnBmX2h0b25zKHNlcnZlcl9wb3J0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuJiM0MztcbiYjNDM7XHR9IGVsc2UgaWYgKGV0aC1cdTAwM2VoX3Byb3RvID09IGJwZl9odG9ucyhFVEhfUF9JUFY2KSkge1xuJiM0MztcdFx0aXA2aCA9ICh2b2lkICopKGV0aCAmIzQzOyAxKTtcbiYjNDM7XHRcdGlmICgodm9pZCAqKShpcDZoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZClcbiYjNDM7XHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpcDZoLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19UQ1ApXG4mIzQzO1x0XHRcdHJldHVybiBUQ1hfUEFTUztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMF0gIT0gMCB8fFxuJiM0MztcdFx0ICAgIGlwNmgtXHUwMDNlZGFkZHIuaW42X3UudTZfYWRkcjMyWzFdICE9IDAgfHxcbiYjNDM7XHRcdCAgICBpcDZoLVx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlsyXSAhPSAwIHx8XG4mIzQzO1x0XHQgICAgaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbM10gIT0gYnBmX2h0b25sKFNFUlZFUl9JUDZfTE8pKVxuJiM0MztcdFx0XHRyZXR1cm4gVENYX1BBU1M7XG4mIzQzO1xuJiM0MztcdFx0dGNwaCA9ICh2b2lkICopKGlwNmggJiM0MzsgMSk7XG4mIzQzO1x0XHRpZiAoKHZvaWQgKikodGNwaCAmIzQzOyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4mIzQzO1x0XHRcdHJldHVybiBUQ1hfUEFTUztcbiYjNDM7XG4mIzQzO1x0XHRpZiAodGNwaC1cdTAwM2VkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpXG4mIzQzO1x0XHRcdHJldHVybiBUQ1hfUEFTUztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0dXJuIFRDWF9QQVNTO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2Z1bmNfcmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFRDWF9EUk9QO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7Y2dyb3VwX3NrYi9lZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCByZWN1cnNpb24oc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhX2VuZDtcbiYjNDM7XHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGg7XG4mIzQzO1x0c3RydWN0IHRjcGhkciAqdGNwaDtcbiYjNDM7XHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoKGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMikgIT0gdGFyZ2V0X3BpZClcbiYjNDM7XHRcdHJldHVybiBTS19QQVNTO1xuJiM0MztcbiYjNDM7XHRpcGggPSBkYXRhO1xuJiM0MztcdGlmICgodm9pZCAqKShpcGggJiM0MzsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8IGlwaC1cdTAwM2V2ZXJzaW9uICE9IDQpXG4mIzQzO1x0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XG4mIzQzO1x0aWYgKGlwaC1cdTAwM2VkYWRkciAhPSBicGZfaHRvbmwoU0VSVkVSX0lQKSlcbiYjNDM7XHRcdHJldHVybiBTS19QQVNTO1xuJiM0MztcbiYjNDM7XHRpZiAoaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQKSB7XG4mIzQzO1x0XHR0Y3BoID0gKHZvaWQgKilpcGggJiM0MzsgaXBoLVx1MDAzZWlobCAqIDQ7XG4mIzQzO1x0XHRpZiAoKHZvaWQgKikodGNwaCAmIzQzOyAxKSBcdTAwM2UgZGF0YV9lbmQgfHxcbiYjNDM7XHRcdCAgICB0Y3BoLVx1MDAzZWRlc3QgIT0gYnBmX2h0b25zKHNlcnZlcl9wb3J0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1x0fSBlbHNlIGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSB7XG4mIzQzO1x0XHRpY21waCA9ICh2b2lkICopaXBoICYjNDM7IGlwaC1cdTAwM2VpaGwgKiA0O1xuJiM0MztcdFx0aWYgKCh2b2lkICopKGljbXBoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZCB8fFxuJiM0MztcdFx0ICAgIGljbXBoLVx1MDAzZXR5cGUgIT0gdW5yZWFjaF90eXBlIHx8XG4mIzQzO1x0XHQgICAgaWNtcGgtXHUwMDNlY29kZSAhPSB1bnJlYWNoX2NvZGUpXG4mIzQzO1x0XHRcdHJldHVybiBTS19QQVNTO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBjYWxsIHdpbGwgcHJvdm9rZSBhIHJlY3Vyc2lvbjogdGhlIElDTVAgcGFja2V0IGdlbmVyYXRlZCBieSB0aGVcbiYjNDM7XHQgKiBrZnVuYyB3aWxsIHJlLXRyaWdnZXIgdGhpcyBwcm9ncmFtIHNpbmNlIHdlIGFyZSBpbiB0aGUgcm9vdCBjZ3JvdXAgaW5cbiYjNDM7XHQgKiB3aGljaCB0aGUga2VybmVsIElDTVAgc29ja2V0IGJlbG9uZ3MuIEhvd2V2ZXIgd2hlbiByZS1lbnRlcmluZyB0aGVcbiYjNDM7XHQgKiBrZnVuYywgaXQgc2hvdWxkIHJldHVybiBFQlVTWS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBicGZfaWNtcF9zZW5kKHNrYiwgdW5yZWFjaF90eXBlLCB1bnJlYWNoX2NvZGUpO1xuJiM0MztcdHJlY19rZnVuY19yZXRzW3JlY19jb3VudCBcdTAwMjYgMV0gPSByZXQ7XG4mIzQzO1x0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2cmVjX2NvdW50LCAxKTtcbiYjNDM7XG4mIzQzO1x0LyogTGV0IHRoZSBmaXJzdCBJQ01QIGVycm9yIG1lc3NhZ2UgcGFzcyAqL1xuJiM0MztcdGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKVxuJiM0MztcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1xuJiM0MztcdHJldHVybiBTS19EUk9QO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtEdWFsIEJTRC9HUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTI6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ljbXBfc2VuZCYjMzQ7LAogICAgJiMzNDtpcF9yb3V0ZV9yZXBseV9maWxsX2RzdCYjMzQ7LAogICAgJiMzNDtpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHRvIHNlbmQgSUNNUCBjb250cm9sIG1lc3NhZ2VzIGZyb20gQlBGIHByb2dyYW1zLCBhbmQgcmVmYWN0b3JzIHJvdXRpbmcgY29kZSB0byBleHBvcnQgYGlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0YCBhbmQgYGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdGAuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmY4NGMxYTllY2ZiOWRmY2YyMzlmMDYzODdiZDczYjJkMjBjMjZkMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDIyIDEyOjI2OjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAppbmRleCAwOWZmZTBmMTNjZTc1Mi4uZWI1YTYwZDNiYWJlMmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCkBAIC0xMDAsNiAmIzQzOzEwMCw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRzdF9lbnRyeSAqaXA2X3JvdXRlX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsCiAJcmV0dXJuIGlwNl9yb3V0ZV9vdXRwdXRfZmxhZ3MobmV0LCBzaywgZmw2LCAwKTsKIH0KIAomIzQzO2ludCBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7CiAvKiBPbmx5IGNvbmRpdGlvbmFsbHkgcmVsZWFzZSBkc3QgaWYgZmxhZ3MgaW5kaWNhdGVzCiAgKiAhUlQ2X0xPT0tVUF9GX0RTVF9OT1JFRiBvciBkc3QgaXMgaW4gdW5jYWNoZWRfbGlzdC4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcm91dGUuaCBiL2luY2x1ZGUvbmV0L3JvdXRlLmgKaW5kZXggZjkwMTA2ZjM4M2M1NmQuLjMwMGQyOTJjZDlhMWYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yb3V0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3JvdXRlLmgKQEAgLTE3Myw2ICYjNDM7MTczLDcgQEAgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2Zsb3coc3RydWN0IG5ldCAqLCBzdHJ1Y3QgZmxvd2k0ICpmbHAsCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBzb2NrICpzayk7CiBzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2JsYWNraG9sZV9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJICAgICAgIHN0cnVjdCBkc3RfZW50cnkgKmRzdF9vcmlnKTsKJiM0MztpbnQgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2tleShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTQgKmZscCkKIHsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggMmU5NmI0Yjg0N2NlMTIuLmZjNjlhMTQ2NTBlNDI5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtODQsNiAmIzQzOzg0LDggQEAKICNpbmNsdWRlICZsdDtsaW51eC91bi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC94ZHBfc29ja19kcnYuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaW5ldF9kc2NwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ljbXB2Ni5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvaWNtcC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2Rldi5oJiMzNDsKIApAQCAtMTI1NDYsNiAmIzQzOzEyNTQ4LDEwMSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3hkcF9wdWxsX2RhdGEoc3RydWN0IHhkcF9tZCAqeCwgdTMyIGxlbikKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGJwZl9pY21wX3NlbmQgLSBTZW5kIGFuIElDTVAgY29udHJvbCBtZXNzYWdlCiYjNDM7ICogQHNrYl9jdHg6IFBhY2tldCB0aGF0IHRyaWdnZXJlZCB0aGUgY29udHJvbCBtZXNzYWdlCiYjNDM7ICogQHR5cGU6IElDTVAgdHlwZSAob25seSBJQ01QX0RFU1RfVU5SRUFDSC9JQ01QVjZfREVTVF9VTlJFQUNIIHN1cHBvcnRlZCkKJiM0MzsgKiBAY29kZTogSUNNUCBjb2RlICgwLTE1IGZvciBJUHY0LCAwLTYgZm9yIElQdjYpCiYjNDM7ICoKJiM0MzsgKiBTZW5kcyBhbiBJQ01QIGNvbnRyb2wgbWVzc2FnZSBpbiByZXNwb25zZSB0byB0aGUgcGFja2V0LiBUaGUgb3JpZ2luYWwgcGFja2V0CiYjNDM7ICogaXMgY2xvbmVkIGJlZm9yZSBzZW5kaW5nIHRoZSBJQ01QIG1lc3NhZ2UsIHNvIHRoZSBCUEYgcHJvZ3JhbSBjYW4gc3RpbGwgbGV0CiYjNDM7ICogdGhlIHBhY2tldCBwYXNzIGlmIGRlc2lyZWQuCiYjNDM7ICoKJiM0MzsgKiBDdXJyZW50bHkgb25seSBJQ01QX0RFU1RfVU5SRUFDSCAoSVB2NCkgYW5kIElDTVBWNl9ERVNUX1VOUkVBQ0ggKElQdjYpIGFyZQomIzQzOyAqIHN1cHBvcnRlZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmU6CiYjNDM7ICogICAgICAgICAtRUlOVkFMOiBJbnZhbGlkIGNvZGUgcGFyYW1ldGVyCiYjNDM7ICogICAgICAgICAtRUJBRE1TRzogUGFja2V0IHRvbyBzaG9ydCBvciBtYWxmb3JtZWQKJiM0MzsgKiAgICAgICAgIC1FTk9NRU06IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAomIzQzOyAqICAgICAgICAgLUVCVVNZOiBSZWN1cnNpb24gZGV0ZWN0ZWQKJiM0MzsgKiAgICAgICAgIC1FSE9TVFVOUkVBQ0g6IFJvdXRpbmcgZmFpbGVkCiYjNDM7ICogICAgICAgICAtRVBST1RPTk9TVVBQT1JUOiBOb24tSVAgcHJvdG9jb2wKJiM0MzsgKiAgICAgICAgIC1FT1BOT1RTVVBQOiBVbnN1cHBvcnRlZCBJQ01QIHR5cGUKJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2ljbXBfc2VuZChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LCBpbnQgdHlwZSwgaW50IGNvZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopc2tiX2N0eDsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKm5za2I7CiYjNDM7CXN0cnVjdCBzb2NrICpzazsKJiM0MzsKJiM0MzsJc2sgPSBza2JfdG9fZnVsbF9zayhza2IpOwomIzQzOwlpZiAoc2sgJmFtcDsmYW1wOyBzay0mZ3Q7c2tfa2Vybl9zb2NrICZhbXA7JmFtcDsKJiM0MzsJICAgIChzay0mZ3Q7c2tfcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QIHx8IHNrLSZndDtza19wcm90b2NvbCA9PSBJUFBST1RPX0lDTVBWNikpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlzd2l0Y2ggKHNrYi0mZ3Q7cHJvdG9jb2wpIHsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkKJiM0MzsJY2FzZSBodG9ucyhFVEhfUF9JUCk6CiYjNDM7CQlpZiAodHlwZSAhPSBJQ01QX0RFU1RfVU5SRUFDSCkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQlpZiAoY29kZSAmbHQ7IDAgfHwgY29kZSAmZ3Q7IE5SX0lDTVBfVU5SRUFDSCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCW5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKJiM0MzsJCWlmICghbnNrYikKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJCWlmICghcHNrYl9uZXR3b3JrX21heV9wdWxsKG5za2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkgewomIzQzOwkJCWtmcmVlX3NrYihuc2tiKTsKJiM0MzsJCQlyZXR1cm4gLUVCQURNU0c7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIXNrYl9kc3QobnNrYikgJmFtcDsmYW1wOyBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChuc2tiKSAmbHQ7IDApIHsKJiM0MzsJCQlrZnJlZV9za2IobnNrYik7CiYjNDM7CQkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQltZW1zZXQoSVBDQihuc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0X3NrYl9wYXJtKSk7CiYjNDM7CiYjNDM7CQlpY21wX3NlbmQobnNrYiwgdHlwZSwgY29kZSwgMCk7CiYjNDM7CQljb25zdW1lX3NrYihuc2tiKTsKJiM0MzsJCWJyZWFrOwomIzQzOyNlbmRpZgomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgomIzQzOwkJaWYgKHR5cGUgIT0gSUNNUFY2X0RFU1RfVU5SRUFDSCkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQlpZiAoY29kZSAmbHQ7IDAgfHwgY29kZSAmZ3Q7IElDTVBWNl9SRUpFQ1RfUk9VVEUpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQluc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CiYjNDM7CQlpZiAoIW5za2IpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CQlpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChuc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkgewomIzQzOwkJCWtmcmVlX3NrYihuc2tiKTsKJiM0MzsJCQlyZXR1cm4gLUVCQURNU0c7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIXNrYl9kc3QobnNrYikgJmFtcDsmYW1wOyBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3QobnNrYikgJmx0OyAwKSB7CiYjNDM7CQkJa2ZyZWVfc2tiKG5za2IpOwomIzQzOwkJCXJldHVybiAtRUhPU1RVTlJFQUNIOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbWVtc2V0KElQNkNCKG5za2IpLCAwLCBzaXplb2Yoc3RydWN0IGluZXQ2X3NrYl9wYXJtKSk7CiYjNDM7CiYjNDM7CQlpY21wdjZfc2VuZChuc2tiLCB0eXBlLCBjb2RlLCAwKTsKJiM0MzsJCWNvbnN1bWVfc2tiKG5za2IpOwomIzQzOwkJYnJlYWs7CiYjNDM7I2VuZGlmCiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBfX2JwZl9rZnVuY19lbmRfZGVmcygpOwogCiBpbnQgYnBmX2R5bnB0cl9mcm9tX3NrYl9yZG9ubHkoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCB1NjQgZmxhZ3MsCkBAIC0xMjU4OCw2ICYjNDM7MTI2ODUsMTAgQEAgQlRGX0tGVU5DU19TVEFSVChicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX29wc19lbmFibGVfdHhfdHN0YW1wKQogQlRGX0tGVU5DU19FTkQoYnBmX2tmdW5jX2NoZWNrX3NldF9zb2NrX29wcykKIAomIzQzO0JURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pY21wX3NlbmQpCiYjNDM7QlRGX0tGVU5DU19FTkQoYnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQpCiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9za2IgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLnNldCA9ICZhbXA7YnBmX2tmdW5jX2NoZWNrX3NldF9za2IsCkBAIC0xMjYxOCw2ICYjNDM7MTI3MTksMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfc29ja19vcHMgPSB7CiAJLnNldCA9ICZhbXA7YnBmX2tmdW5jX2NoZWNrX3NldF9zb2NrX29wcywKIH07CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9pY21wX3NlbmQgPSB7CiYjNDM7CS5vd25lciA9IFRISVNfTU9EVUxFLAomIzQzOwkuc2V0ID0gJmFtcDticGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZCwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwpAQCAtMTI2MzksNiAmIzQzOzEyNzQ1LDkgQEAgc3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZCkKIAlyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsCiAJCQkJCSAgICAgICAmYW1wO2JwZl9rZnVuY19zZXRfc29ja19hZGRyKTsKIAlyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgJmFtcDticGZfa2Z1bmNfc2V0X3RjcF9yZXFzayk7CiYjNDM7CXJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiwgJmFtcDticGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7CiYjNDM7CXJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCAmYW1wO2JwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTsKJiM0MzsJcmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1QsICZhbXA7YnBmX2tmdW5jX3NldF9pY21wX3NlbmQpOwogCXJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tfT1BTLCAmYW1wO2JwZl9rZnVuY19zZXRfc29ja19vcHMpOwogfQogbGF0ZV9pbml0Y2FsbChicGZfa2Z1bmNfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jCmluZGV4IGZlY2Y2NjIxZjY3OWY5Li5jMWMwNzI0ZTRkNGRkNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMKQEAgLTI1MiwyMSAmIzQzOzI1Miw2IEBAIHN0YXRpYyB2b2lkIG5mX3JlamVjdF9pcF90Y3BoZHJfcHV0KHN0cnVjdCBza19idWZmICpuc2tiLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqCiAJbnNrYi0mZ3Q7Y3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7CiB9CiAKLXN0YXRpYyBpbnQgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKQotewotCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7Ci0Jc3RydWN0IGZsb3dpIGZsOwotCi0JbWVtc2V0KCZhbXA7ZmwsIDAsIHNpemVvZihzdHJ1Y3QgZmxvd2kpKTsKLQlmbC51LmlwNC5kYWRkciA9IGlwX2hkcihza2JfaW4pLSZndDtzYWRkcjsKLQluZl9pcF9yb3V0ZShkZXZfbmV0KHNrYl9pbi0mZ3Q7ZGV2KSwgJmFtcDtkc3QsICZhbXA7ZmwsIGZhbHNlKTsKLQlpZiAoIWRzdCkKLQkJcmV0dXJuIC0xOwotCi0Jc2tiX2RzdF9zZXQoc2tiX2luLCBkc3QpOwotCXJldHVybiAwOwotfQotCiAvKiBTZW5kIFJTVCByZXBseSAqLwogdm9pZCBuZl9zZW5kX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLAogCQkgICBpbnQgaG9vaykKQEAgLTI3OSw3ICYjNDM7MjY0LDcgQEAgdm9pZCBuZl9zZW5kX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLAogCWlmICghb3RoKQogCQlyZXR1cm47CiAKLQlpZiAoIXNrYl9kc3Qob2xkc2tiKSAmYW1wOyZhbXA7IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qob2xkc2tiKSAmbHQ7IDApCiYjNDM7CWlmICghc2tiX2RzdChvbGRza2IpICZhbXA7JmFtcDsgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qob2xkc2tiKSAmbHQ7IDApCiAJCXJldHVybjsKIAogCWlmIChza2JfcnRhYmxlKG9sZHNrYiktJmd0O3J0X2ZsYWdzICZhbXA7IChSVENGX0JST0FEQ0FTVCB8IFJUQ0ZfTVVMVElDQVNUKSkKQEAgLTM1Miw3ICYjNDM7MzM3LDcgQEAgdm9pZCBuZl9zZW5kX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IGNvZGUsIGludCBob29rKQogCWlmIChpcGgtJmd0O2ZyYWdfb2ZmICZhbXA7IGh0b25zKElQX09GRlNFVCkpCiAJCXJldHVybjsKIAotCWlmICghc2tiX2RzdChza2JfaW4pICZhbXA7JmFtcDsgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChza2JfaW4pICZsdDsgMCkKJiM0MzsJaWYgKCFza2JfZHN0KHNrYl9pbikgJmFtcDsmYW1wOyBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChza2JfaW4pICZsdDsgMCkKIAkJcmV0dXJuOwogCiAJaWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYl9pbikgfHwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDNmM2RlNTE2NGQ2ZTU4Li5mMjQ2MDk5MzNmYmVjYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0yOTQyLDYgJiM0MzsyOTQyLDIxIEBAIHN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9mbG93KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmxwNCwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlwX3JvdXRlX291dHB1dF9mbG93KTsKIAomIzQzO2ludCBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0YWJsZSAqcnQ7CiYjNDM7CXN0cnVjdCBmbG93aTQgZmw0ID0gewomIzQzOwkJLmRhZGRyID0gaXBfaGRyKHNrYiktJmd0O3NhZGRyCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KHNrYi0mZ3Q7ZGV2KSwgJmFtcDtmbDQpOwomIzQzOwlpZiAoSVNfRVJSKHJ0KSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKHJ0KTsKJiM0MzsJc2tiX2RzdF9zZXQoc2tiLCAmYW1wO3J0LSZndDtkc3QpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaXBfcm91dGVfcmVwbHlfZmlsbF9kc3QpOwomIzQzOwogLyogY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayBoZWxkICovCiBzdGF0aWMgaW50IHJ0X2ZpbGxfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIF9fYmUzMiBkc3QsIF9fYmUzMiBzcmMsCiAJCQlzdHJ1Y3QgcnRhYmxlICpydCwgdTMyIHRhYmxlX2lkLCBkc2NwX3QgZHNjcCwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMKaW5kZXggZWY1YjdlODVjZmZhOGEuLjdkMmY1NzdlNzJiODgyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYwpAQCAtMjkzLDIxICYjNDM7MjkzLDYgQEAgbmZfcmVqZWN0X2lwNl90Y3BoZHJfcHV0KHN0cnVjdCBza19idWZmICpuc2tiLAogCQkJCQkJICAgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpLCAwKSk7CiB9CiAKLXN0YXRpYyBpbnQgbmZfcmVqZWN0Nl9maWxsX3NrYl9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbikKLXsKLQlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMOwotCXN0cnVjdCBmbG93aSBmbDsKLQotCW1lbXNldCgmYW1wO2ZsLCAwLCBzaXplb2Yoc3RydWN0IGZsb3dpKSk7Ci0JZmwudS5pcDYuZGFkZHIgPSBpcHY2X2hkcihza2JfaW4pLSZndDtzYWRkcjsKLQluZl9pcDZfcm91dGUoZGV2X25ldChza2JfaW4tJmd0O2RldiksICZhbXA7ZHN0LCAmYW1wO2ZsLCBmYWxzZSk7Ci0JaWYgKCFkc3QpCi0JCXJldHVybiAtMTsKLQotCXNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTsKLQlyZXR1cm4gMDsKLX0KLQogdm9pZCBuZl9zZW5kX3Jlc2V0NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYiwKIAkJICAgIGludCBob29rKQogewpAQCAtNDQwLDcgJiM0Mzs0MjUsNyBAQCB2b2lkIG5mX3NlbmRfdW5yZWFjaDYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLAogCWlmIChob29rbnVtID09IE5GX0lORVRfTE9DQUxfT1VUICZhbXA7JmFtcDsgc2tiX2luLSZndDtkZXYgPT0gTlVMTCkKIAkJc2tiX2luLSZndDtkZXYgPSBuZXQtJmd0O2xvb3BiYWNrX2RldjsKIAotCWlmICghc2tiX2RzdChza2JfaW4pICZhbXA7JmFtcDsgbmZfcmVqZWN0Nl9maWxsX3NrYl9kc3Qoc2tiX2luKSAmbHQ7IDApCiYjNDM7CWlmICghc2tiX2RzdChza2JfaW4pICZhbXA7JmFtcDsgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0KHNrYl9pbikgJmx0OyAwKQogCQlyZXR1cm47CiAKIAlpY21wdjZfc2VuZChza2JfaW4sIElDTVBWNl9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggNjM2MWFkMmZjZjc3MTUuLjBmYTU2YzgwMTE3ODE2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTI3MzIsNiAmIzQzOzI3MzIsMjQgQEAgc3RydWN0IGRzdF9lbnRyeSAqaXA2X3JvdXRlX291dHB1dF9mbGFncyhzdHJ1Y3QgbmV0ICpuZXQsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcDZfcm91dGVfb3V0cHV0X2ZsYWdzKTsKIAomIzQzO2ludCBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc3RfZW50cnkgKnJlc3VsdDsKJiM0MzsJc3RydWN0IGZsb3dpNiBmbCA9IHsKJiM0MzsJCS5kYWRkciA9IGlwdjZfaGRyKHNrYiktJmd0O3NhZGRyCiYjNDM7CX07CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXJlc3VsdCA9IGlwNl9yb3V0ZV9vdXRwdXQoZGV2X25ldChza2ItJmd0O2RldiksIE5VTEwsICZhbXA7ZmwpOwomIzQzOwllcnIgPSByZXN1bHQtJmd0O2Vycm9yOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZHN0X3JlbGVhc2UocmVzdWx0KTsKJiM0MzsJZWxzZQomIzQzOwkJc2tiX2RzdF9zZXQoc2tiLCByZXN1bHQpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3QpOwomIzQzOwogc3RydWN0IGRzdF9lbnRyeSAqaXA2X2JsYWNraG9sZV9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdF9vcmlnKQogewogCXN0cnVjdCBydDZfaW5mbyAqcnQsICpvcnQgPSBkc3RfcnQ2X2luZm8oZHN0X29yaWcpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaWNtcF9zZW5kX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pY21wX3NlbmRfa2Z1bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZmQ0YjhmYTc4YTAxODQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pY21wX3NlbmRfa2Z1bmMuYwpAQCAtMCwwICYjNDM7MSwyNTAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldHdvcmtfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtjZ3JvdXBfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lcnJxdWV1ZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7aWNtcF9zZW5kLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBUSU1FT1VUX01TIDEwMDAKJiM0MzsKJiM0MzsjZGVmaW5lIElDTVBfREVTVF9VTlJFQUNIIDMKJiM0MzsjZGVmaW5lIElDTVBWNl9ERVNUX1VOUkVBQ0ggMQomIzQzOwomIzQzOyNkZWZpbmUgSUNNUF9IT1NUX1VOUkVBQ0ggMQomIzQzOyNkZWZpbmUgSUNNUF9GUkFHX05FRURFRCA0CiYjNDM7I2RlZmluZSBOUl9JQ01QX1VOUkVBQ0ggMTUKJiM0MzsjZGVmaW5lIElDTVBWNl9SRUpFQ1RfUk9VVEUgNgomIzQzOwomIzQzO3N0YXRpYyBpbnQgY29ubmVjdF90b19mZF9ub25ibG9jayhpbnQgc2VydmVyX2ZkKQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcjsKJiM0MzsJc29ja2xlbl90IGxlbiA9IHNpemVvZihhZGRyKTsKJiM0MzsJaW50IGZkLCBlcnIsIG9uID0gMTsKJiM0MzsKJiM0MzsJaWYgKGdldHNvY2tuYW1lKHNlcnZlcl9mZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7YWRkciwgJmFtcDtsZW4pKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChhZGRyLnNzX2ZhbWlseSwgU09DS19TVFJFQU0gfCBTT0NLX05PTkJMT0NLLCAwKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJaWYgKGFkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2ICZhbXA7JmFtcDsKJiM0MzsJICAgIHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9SRUNWRVJSLCAmYW1wO29uLCBzaXplb2Yob24pKSAmbHQ7IDApIHsKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDthZGRyLCBsZW4pOwomIzQzOwlpZiAoZXJyICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vICE9IEVJTlBST0dSRVNTKSB7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZWFkX2ljbXBfZXJycXVldWUoaW50IHNvY2tmZCwgaW50IGV4cGVjdGVkX2NvZGUsIGludCBhZikKJiM0Mzt7CiYjNDM7CWludCBleHBlY3RlZF9lZV90eXBlID0gKGFmID09IEFGX0lORVQpID8gSUNNUF9ERVNUX1VOUkVBQ0ggOgomIzQzOwkJCQkJCSBJQ01QVjZfREVTVF9VTlJFQUNIOwomIzQzOwlpbnQgZXhwZWN0ZWRfb3JpZ2luID0gKGFmID09IEFGX0lORVQpID8gU09fRUVfT1JJR0lOX0lDTVAgOgomIzQzOwkJCQkJCVNPX0VFX09SSUdJTl9JQ01QNjsKJiM0MzsJaW50IGV4cGVjdGVkX2xldmVsID0gKGFmID09IEFGX0lORVQpID8gSVBQUk9UT19JUCA6IElQUFJPVE9fSVBWNjsKJiM0MzsJaW50IGV4cGVjdGVkX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJUF9SRUNWRVJSIDogSVBWNl9SRUNWRVJSOwomIzQzOwlzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKnNvY2tfZXJyOwomIzQzOwljaGFyIGN0cmxfYnVmWzUxMl07CiYjNDM7CXN0cnVjdCBtc2doZHIgbXNnID0gewomIzQzOwkJLm1zZ19jb250cm9sID0gY3RybF9idWYsCiYjNDM7CQkubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY3RybF9idWYpLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgcG9sbGZkIHBmZCA9IHsKJiM0MzsJCS5mZCA9IHNvY2tmZCwKJiM0MzsJCS5ldmVudHMgPSBQT0xMRVJSLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgY21zZ2hkciAqY207CiYjNDM7CXNzaXplX3QgbjsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfR0UocG9sbCgmYW1wO3BmZCwgMSwgVElNRU9VVF9NUyksIDEsICYjMzQ7cG9sbF9lcnJxdWV1ZSYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbiA9IHJlY3Ztc2coc29ja2ZkLCAmYW1wO21zZywgTVNHX0VSUlFVRVVFKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UobiwgMCwgJiMzNDtyZWN2bXNnX2VycnF1ZXVlJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwljbSA9IENNU0dfRklSU1RIRFIoJmFtcDttc2cpOwomIzQzOwlpZiAoIUFTU0VSVF9ORVEoY20sIE5VTEwsICYjMzQ7Y21fZmlyc3RoZHJfbnVsbCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yICg7IGNtOyBjbSA9IENNU0dfTlhUSERSKCZhbXA7bXNnLCBjbSkpIHsKJiM0MzsJCWlmIChjbS0mZ3Q7Y21zZ19sZXZlbCAhPSBleHBlY3RlZF9sZXZlbCB8fAomIzQzOwkJICAgIGNtLSZndDtjbXNnX3R5cGUgIT0gZXhwZWN0ZWRfdHlwZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXNvY2tfZXJyID0gKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqKUNNU0dfREFUQShjbSk7CiYjNDM7CiYjNDM7CQlpZiAoIUFTU0VSVF9FUShzb2NrX2Vyci0mZ3Q7ZWVfb3JpZ2luLCBleHBlY3RlZF9vcmlnaW4sCiYjNDM7CQkJICAgICAgICYjMzQ7c29ja19lcnJfb3JpZ2luJiMzNDspKQomIzQzOwkJCXJldHVybjsKJiM0MzsJCWlmICghQVNTRVJUX0VRKHNvY2tfZXJyLSZndDtlZV90eXBlLCBleHBlY3RlZF9lZV90eXBlLAomIzQzOwkJCSAgICAgICAmIzM0O3NvY2tfZXJyX3R5cGVfZGVzdF91bnJlYWNoJiMzNDspKQomIzQzOwkJCXJldHVybjsKJiM0MzsJCUFTU0VSVF9FUShzb2NrX2Vyci0mZ3Q7ZWVfY29kZSwgZXhwZWN0ZWRfY29kZSwgJiMzNDtzb2NrX2Vycl9jb2RlJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CUFTU0VSVF9GQUlMKCYjMzQ7bm8gSVBfUkVDVkVSUi9JUFY2X1JFQ1ZFUlIgY29udHJvbCBtZXNzYWdlIGZvdW5kJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0cmlnZ2VyX3Byb2dfcmVhZF9pY21wX2VycnF1ZXVlKHN0cnVjdCBpY21wX3NlbmQgKnNrZWwsIGludCBjb2RlLAomIzQzOwkJCQkJICAgIGludCBhZiwgY29uc3QgY2hhciAqaXApCiYjNDM7ewomIzQzOwlpbnQgc3J2X2ZkID0gLTEsIGNsaWVudF9mZCA9IC0xOwomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKJiM0MzsJc29ja2xlbl90IGxlbiA9IHNpemVvZihhZGRyKTsKJiM0MzsKJiM0MzsJc3J2X2ZkID0gc3RhcnRfc2VydmVyKGFmLCBTT0NLX1NUUkVBTSwgaXAsIDAsIFRJTUVPVVRfTVMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChzcnZfZmQsICYjMzQ7c3RhcnRfc2VydmVyJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoZ2V0c29ja25hbWUoc3J2X2ZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDthZGRyLCAmYW1wO2xlbikpIHsKJiM0MzsJCWNsb3NlKHNydl9mZCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtzZXJ2ZXJfcG9ydCA9IG50b2hzKGFkZHIuc2luX3BvcnQpOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3VucmVhY2hfdHlwZSA9IChhZiA9PSBBRl9JTkVUKSA/IElDTVBfREVTVF9VTlJFQUNIIDoKJiM0MzsJCQkJCQkgICAgSUNNUFY2X0RFU1RfVU5SRUFDSDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt1bnJlYWNoX2NvZGUgPSBjb2RlOwomIzQzOwomIzQzOwljbGllbnRfZmQgPSBjb25uZWN0X3RvX2ZkX25vbmJsb2NrKHNydl9mZCk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKGNsaWVudF9mZCwgJiMzNDtjbGllbnRfY29ubmVjdF9ub25ibG9jayYjMzQ7KSkgewomIzQzOwkJY2xvc2Uoc3J2X2ZkKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTa2lwIHJlYWRpbmcgSUNNUCBlcnJvciBxdWV1ZSBpZiBjb2RlIGlzIGludmFsaWQgKi8KJiM0MzsJaWYgKGNvZGUgJmd0Oz0gMCAmYW1wOyZhbXA7ICgoYWYgPT0gQUZfSU5FVCAmYW1wOyZhbXA7IGNvZGUgJmx0Oz0gTlJfSUNNUF9VTlJFQUNIKSB8fAomIzQzOwkJCSAgKGFmID09IEFGX0lORVQ2ICZhbXA7JmFtcDsgY29kZSAmbHQ7PSBJQ01QVjZfUkVKRUNUX1JPVVRFKSkpCiYjNDM7CQlyZWFkX2ljbXBfZXJycXVldWUoY2xpZW50X2ZkLCBjb2RlLCBhZik7CiYjNDM7CiYjNDM7CWNsb3NlKGNsaWVudF9mZCk7CiYjNDM7CWNsb3NlKHNydl9mZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ1bl9pY21wX3Rlc3Qoc3RydWN0IGljbXBfc2VuZCAqc2tlbCwgaW50IGFmLCBjb25zdCBjaGFyICppcCwKJiM0MzsJCQkgIGludCBtYXhfY29kZSkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGNvZGUgPSAwOyBjb2RlICZsdDs9IG1heF9jb2RlOyBjb2RlJiM0MzsmIzQzOykgewomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBUQ1Agc3RhY2sgcmVhY3RzIGRpZmZlcmVudGx5IHdoZW4gYXNraW5nIGZvcgomIzQzOwkJICogZnJhZ21lbnRhdGlvbiwgbGV0JiMzOTtzIGlnbm9yZSBpdCBmb3Igbm93LgomIzQzOwkJICovCiYjNDM7CQlpZiAoYWYgPT0gQUZfSU5FVCAmYW1wOyZhbXA7IGNvZGUgPT0gSUNNUF9GUkFHX05FRURFRCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgY29kZSwgYWYsIGlwKTsKJiM0MzsJCUFTU0VSVF9FUShza2VsLSZndDtkYXRhLSZndDtrZnVuY19yZXQsIDAsICYjMzQ7a2Z1bmNfcmV0JiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRlc3QgYW4gaW52YWxpZCBjb2RlICovCiYjNDM7CXRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgLTEsIGFmLCBpcCk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtkYXRhLSZndDtrZnVuY19yZXQsIC1FSU5WQUwsICYjMzQ7a2Z1bmNfcmV0JiMzNDspOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfaWNtcF9zZW5kX3VucmVhY2hfY2dyb3VwKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWNtcF9zZW5kICpza2VsOwomIzQzOwlpbnQgY2dyb3VwX2ZkID0gLTE7CiYjNDM7CiYjNDM7CXNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwljZ3JvdXBfZmQgPSB0ZXN0X19qb2luX2Nncm91cCgmIzM0Oy9pY21wX3NlbmRfdW5yZWFjaF9jZ3JvdXAmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKGNncm91cF9mZCwgJiMzNDtqb2luX2Nncm91cCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7bGlua3MuZWdyZXNzID0KJiM0MzsJCWJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtJmd0O3Byb2dzLmVncmVzcywgY2dyb3VwX2ZkKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtJmd0O2xpbmtzLmVncmVzcywgJiMzNDtwcm9nX2F0dGFjaF9jZ3JvdXAmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7aXB2NCYjMzQ7KSkKJiM0MzsJCXJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVCwgJiMzNDsxMjcuMC4wLjEmIzM0OywgTlJfSUNNUF9VTlJFQUNIKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtpcHY2JiMzNDspKQomIzQzOwkJcnVuX2ljbXBfdGVzdChza2VsLCBBRl9JTkVUNiwgJiMzNDs6OjEmIzM0OywgSUNNUFY2X1JFSkVDVF9ST1VURSk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWNtcF9zZW5kX19kZXN0cm95KHNrZWwpOwomIzQzOwlpZiAoY2dyb3VwX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShjZ3JvdXBfZmQpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfaWNtcF9zZW5kX3VucmVhY2hfdGModm9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90Y3hfb3B0cywgb3B0cyk7CiYjNDM7CXN0cnVjdCBpY21wX3NlbmQgKnNrZWw7CiYjNDM7CXN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7CiYjNDM7CiYjNDM7CXNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF90Y3goc2tlbC0mZ3Q7cHJvZ3MudGNfZWdyZXNzLCAxLCAmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobGluaywgJiMzNDtwcm9nX2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtpcHY0JiMzNDspKQomIzQzOwkJcnVuX2ljbXBfdGVzdChza2VsLCBBRl9JTkVULCAmIzM0OzEyNy4wLjAuMSYjMzQ7LCBOUl9JQ01QX1VOUkVBQ0gpOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2lwdjYmIzM0OykpCiYjNDM7CQlydW5faWNtcF90ZXN0KHNrZWwsIEFGX0lORVQ2LCAmIzM0Ozo6MSYjMzQ7LCBJQ01QVjZfUkVKRUNUX1JPVVRFKTsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlicGZfbGlua19fZGVzdHJveShsaW5rKTsKJiM0MzsJaWNtcF9zZW5kX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfaWNtcF9zZW5kX3VucmVhY2hfcmVjdXJzaW9uKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWNtcF9zZW5kICpza2VsOwomIzQzOwlpbnQgY2dyb3VwX2ZkID0gLTE7CiYjNDM7CiYjNDM7CXNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCkpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O0ZhaWxlZCB0byBzZXR1cCBjZ3JvdXAgZW52aXJvbm1lbnRcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwljZ3JvdXBfZmQgPSBnZXRfcm9vdF9jZ3JvdXAoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfRkQoY2dyb3VwX2ZkLCAmIzM0O2dldF9yb290X2Nncm91cCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7ZGF0YS0mZ3Q7dGFyZ2V0X3BpZCA9IGdldHBpZCgpOwomIzQzOwlza2VsLSZndDtsaW5rcy5yZWN1cnNpb24gPQomIzQzOwkJYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC0mZ3Q7cHJvZ3MucmVjdXJzaW9uLCBjZ3JvdXBfZmQpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC0mZ3Q7bGlua3MucmVjdXJzaW9uLCAmIzM0O3Byb2dfYXR0YWNoX2Nncm91cCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJdHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCBJQ01QX0hPU1RfVU5SRUFDSCwgQUZfSU5FVCwKJiM0MzsJCQkJCSYjMzQ7MTI3LjAuMC4xJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCZWNhdXNlIHRoZXJlJiMzOTtzIHJlY3Vyc2lvbiBpbnZvbHZlZCwgdGhlIGZpcnN0IGNhbGwgd2lsbCByZXR1cm4gYXQKJiM0MzsJICogaW5kZXggMSBzaW5jZSBpdCB3aWxsIHJldHVybiB0aGUgc2Vjb25kLCBhbmQgdGhlIHNlY29uZCBjYWxsIHdpbGwKJiM0MzsJICogcmV0dXJuIGF0IGluZGV4IDAgc2luY2UgaXQgd2lsbCByZXR1cm4gdGhlIGZpcnN0LgomIzQzOwkgKi8KJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2RhdGEtJmd0O3JlY19rZnVuY19yZXRzWzBdLCAtRUJVU1ksICYjMzQ7a2Z1bmNfcmV0c1swXSYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2RhdGEtJmd0O3JlY19rZnVuY19yZXRzWzFdLCAwLCAmIzM0O2tmdW5jX3JldHNbMV0mIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJY2xlYW51cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTsKJiM0MzsJaWNtcF9zZW5kX19kZXN0cm95KHNrZWwpOwomIzQzOwlpZiAoY2dyb3VwX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShjZ3JvdXBfZmQpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZmQ5Yzc2ODQ3OTdiMDcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmMKQEAgLTAsMCAmIzQzOzEsMTg0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2VuZGlhbi5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX3RyYWNpbmdfbmV0LmgmIzM0OwomIzQzOwomIzQzOy8qIDEyNy4wLjAuMSBpbiBob3N0IGJ5dGUgb3JkZXIgKi8KJiM0MzsjZGVmaW5lIFNFUlZFUl9JUCAweDdGMDAwMDAxCiYjNDM7LyogOjoxIGluIGhvc3QgYnl0ZSBvcmRlciAobGFzdCAzMi1iaXQgd29yZCkgKi8KJiM0MzsjZGVmaW5lIFNFUlZFUl9JUDZfTE8gMHgwMDAwMDAwMQomIzQzOwomIzQzO19fdTE2IHNlcnZlcl9wb3J0ID0gMDsKJiM0MztpbnQgdW5yZWFjaF90eXBlID0gMDsKJiM0MztpbnQgdW5yZWFjaF9jb2RlID0gMDsKJiM0MztpbnQga2Z1bmNfcmV0ID0gLTE7CiYjNDM7aW50IHRhcmdldF9waWQgPSAtMTsKJiM0MzsKJiM0Mzt1bnNpZ25lZCBpbnQgcmVjX2NvdW50ID0gMDsKJiM0MztpbnQgcmVjX2tmdW5jX3JldHNbXSA9IHsgLTEsIC0xIH07CiYjNDM7CiYjNDM7U0VDKCYjMzQ7Y2dyb3VwX3NrYi9lZ3Jlc3MmIzM0OykKJiM0MztpbnQgZWdyZXNzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXNrYi0mZ3Q7ZGF0YTsKJiM0MzsJdm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi0mZ3Q7ZGF0YV9lbmQ7CiYjNDM7CXN0cnVjdCBpcGhkciAqaXBoOwomIzQzOwlzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKJiM0MzsJc3RydWN0IHRjcGhkciAqdGNwaDsKJiM0MzsJX191OCB2ZXJzaW9uOwomIzQzOwomIzQzOwlpZiAoZGF0YSAmIzQzOyAxICZndDsgZGF0YV9lbmQpCiYjNDM7CQlyZXR1cm4gU0tfUEFTUzsKJiM0MzsKJiM0MzsJdmVyc2lvbiA9ICgqKChfX3U4ICopZGF0YSkpICZndDsmZ3Q7IDQ7CiYjNDM7CiYjNDM7CWlmICh2ZXJzaW9uID09IDQpIHsKJiM0MzsJCWlwaCA9IGRhdGE7CiYjNDM7CQlpZiAoKHZvaWQgKikoaXBoICYjNDM7IDEpICZndDsgZGF0YV9lbmQgfHwKJiM0MzsJCSAgICBpcGgtJmd0O3Byb3RvY29sICE9IElQUFJPVE9fVENQIHx8CiYjNDM7CQkgICAgaXBoLSZndDtkYWRkciAhPSBicGZfaHRvbmwoU0VSVkVSX0lQKSkKJiM0MzsJCQlyZXR1cm4gU0tfUEFTUzsKJiM0MzsKJiM0MzsJCXRjcGggPSAodm9pZCAqKWlwaCAmIzQzOyBpcGgtJmd0O2lobCAqIDQ7CiYjNDM7CQlpZiAoKHZvaWQgKikodGNwaCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kIHx8CiYjNDM7CQkgICAgdGNwaC0mZ3Q7ZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKQomIzQzOwkJCXJldHVybiBTS19QQVNTOwomIzQzOwomIzQzOwl9IGVsc2UgaWYgKHZlcnNpb24gPT0gNikgewomIzQzOwkJaXA2aCA9IGRhdGE7CiYjNDM7CQlpZiAoKHZvaWQgKikoaXA2aCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kIHx8CiYjNDM7CQkgICAgaXA2aC0mZ3Q7bmV4dGhkciAhPSBJUFBST1RPX1RDUCkKJiM0MzsJCQlyZXR1cm4gU0tfUEFTUzsKJiM0MzsKJiM0MzsJCWlmIChpcDZoLSZndDtkYWRkci5pbjZfdS51Nl9hZGRyMzJbMF0gIT0gMCB8fAomIzQzOwkJICAgIGlwNmgtJmd0O2RhZGRyLmluNl91LnU2X2FkZHIzMlsxXSAhPSAwIHx8CiYjNDM7CQkgICAgaXA2aC0mZ3Q7ZGFkZHIuaW42X3UudTZfYWRkcjMyWzJdICE9IDAgfHwKJiM0MzsJCSAgICBpcDZoLSZndDtkYWRkci5pbjZfdS51Nl9hZGRyMzJbM10gIT0gYnBmX2h0b25sKFNFUlZFUl9JUDZfTE8pKQomIzQzOwkJCXJldHVybiBTS19QQVNTOwomIzQzOwomIzQzOwkJdGNwaCA9ICh2b2lkICopKGlwNmggJiM0MzsgMSk7CiYjNDM7CQlpZiAoKHZvaWQgKikodGNwaCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kIHx8CiYjNDM7CQkgICAgdGNwaC0mZ3Q7ZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKQomIzQzOwkJCXJldHVybiBTS19QQVNTOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0dXJuIFNLX1BBU1M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2Z1bmNfcmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIFNLX0RST1A7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjL2VncmVzcyYjMzQ7KQomIzQzO2ludCB0Y19lZ3Jlc3Moc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJdm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLSZndDtkYXRhOwomIzQzOwl2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpc2tiLSZndDtkYXRhX2VuZDsKJiM0MzsJc3RydWN0IGV0aGhkciAqZXRoOwomIzQzOwlzdHJ1Y3QgaXBoZHIgKmlwaDsKJiM0MzsJc3RydWN0IGlwdjZoZHIgKmlwNmg7CiYjNDM7CXN0cnVjdCB0Y3BoZHIgKnRjcGg7CiYjNDM7CiYjNDM7CWV0aCA9IGRhdGE7CiYjNDM7CWlmICgodm9pZCAqKShldGggJiM0MzsgMSkgJmd0OyBkYXRhX2VuZCkKJiM0MzsJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsKJiM0MzsJaWYgKGV0aC0mZ3Q7aF9wcm90byA9PSBicGZfaHRvbnMoRVRIX1BfSVApKSB7CiYjNDM7CQlpcGggPSAodm9pZCAqKShldGggJiM0MzsgMSk7CiYjNDM7CQlpZiAoKHZvaWQgKikoaXBoICYjNDM7IDEpICZndDsgZGF0YV9lbmQpCiYjNDM7CQkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwomIzQzOwkJaWYgKGlwaC0mZ3Q7cHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgfHwKJiM0MzsJCSAgICBpcGgtJmd0O2RhZGRyICE9IGJwZl9odG9ubChTRVJWRVJfSVApKQomIzQzOwkJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsKJiM0MzsJCXRjcGggPSAodm9pZCAqKWlwaCAmIzQzOyBpcGgtJmd0O2lobCAqIDQ7CiYjNDM7CQlpZiAoKHZvaWQgKikodGNwaCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kKQomIzQzOwkJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsKJiM0MzsJCWlmICh0Y3BoLSZndDtkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpCiYjNDM7CQkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwomIzQzOwl9IGVsc2UgaWYgKGV0aC0mZ3Q7aF9wcm90byA9PSBicGZfaHRvbnMoRVRIX1BfSVBWNikpIHsKJiM0MzsJCWlwNmggPSAodm9pZCAqKShldGggJiM0MzsgMSk7CiYjNDM7CQlpZiAoKHZvaWQgKikoaXA2aCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kKQomIzQzOwkJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsKJiM0MzsJCWlmIChpcDZoLSZndDtuZXh0aGRyICE9IElQUFJPVE9fVENQKQomIzQzOwkJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsKJiM0MzsJCWlmIChpcDZoLSZndDtkYWRkci5pbjZfdS51Nl9hZGRyMzJbMF0gIT0gMCB8fAomIzQzOwkJICAgIGlwNmgtJmd0O2RhZGRyLmluNl91LnU2X2FkZHIzMlsxXSAhPSAwIHx8CiYjNDM7CQkgICAgaXA2aC0mZ3Q7ZGFkZHIuaW42X3UudTZfYWRkcjMyWzJdICE9IDAgfHwKJiM0MzsJCSAgICBpcDZoLSZndDtkYWRkci5pbjZfdS51Nl9hZGRyMzJbM10gIT0gYnBmX2h0b25sKFNFUlZFUl9JUDZfTE8pKQomIzQzOwkJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsKJiM0MzsJCXRjcGggPSAodm9pZCAqKShpcDZoICYjNDM7IDEpOwomIzQzOwkJaWYgKCh2b2lkICopKHRjcGggJiM0MzsgMSkgJmd0OyBkYXRhX2VuZCkKJiM0MzsJCQlyZXR1cm4gVENYX1BBU1M7CiYjNDM7CiYjNDM7CQlpZiAodGNwaC0mZ3Q7ZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKQomIzQzOwkJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsJfQomIzQzOwomIzQzOwlrZnVuY19yZXQgPSBicGZfaWNtcF9zZW5kKHNrYiwgdW5yZWFjaF90eXBlLCB1bnJlYWNoX2NvZGUpOwomIzQzOwomIzQzOwlyZXR1cm4gVENYX0RST1A7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2Nncm91cF9za2IvZWdyZXNzJiMzNDspCiYjNDM7aW50IHJlY3Vyc2lvbihzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwl2b2lkICpkYXRhID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGE7CiYjNDM7CXZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGFfZW5kOwomIzQzOwlzdHJ1Y3QgaWNtcGhkciAqaWNtcGg7CiYjNDM7CXN0cnVjdCB0Y3BoZHIgKnRjcGg7CiYjNDM7CXN0cnVjdCBpcGhkciAqaXBoOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoKGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyKSAhPSB0YXJnZXRfcGlkKQomIzQzOwkJcmV0dXJuIFNLX1BBU1M7CiYjNDM7CiYjNDM7CWlwaCA9IGRhdGE7CiYjNDM7CWlmICgodm9pZCAqKShpcGggJiM0MzsgMSkgJmd0OyBkYXRhX2VuZCB8fCBpcGgtJmd0O3ZlcnNpb24gIT0gNCkKJiM0MzsJCXJldHVybiBTS19QQVNTOwomIzQzOwomIzQzOwlpZiAoaXBoLSZndDtkYWRkciAhPSBicGZfaHRvbmwoU0VSVkVSX0lQKSkKJiM0MzsJCXJldHVybiBTS19QQVNTOwomIzQzOwomIzQzOwlpZiAoaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX1RDUCkgewomIzQzOwkJdGNwaCA9ICh2b2lkICopaXBoICYjNDM7IGlwaC0mZ3Q7aWhsICogNDsKJiM0MzsJCWlmICgodm9pZCAqKSh0Y3BoICYjNDM7IDEpICZndDsgZGF0YV9lbmQgfHwKJiM0MzsJCSAgICB0Y3BoLSZndDtkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpCiYjNDM7CQkJcmV0dXJuIFNLX1BBU1M7CiYjNDM7CX0gZWxzZSBpZiAoaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX0lDTVApIHsKJiM0MzsJCWljbXBoID0gKHZvaWQgKilpcGggJiM0MzsgaXBoLSZndDtpaGwgKiA0OwomIzQzOwkJaWYgKCh2b2lkICopKGljbXBoICYjNDM7IDEpICZndDsgZGF0YV9lbmQgfHwKJiM0MzsJCSAgICBpY21waC0mZ3Q7dHlwZSAhPSB1bnJlYWNoX3R5cGUgfHwKJiM0MzsJCSAgICBpY21waC0mZ3Q7Y29kZSAhPSB1bnJlYWNoX2NvZGUpCiYjNDM7CQkJcmV0dXJuIFNLX1BBU1M7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXR1cm4gU0tfUEFTUzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGlzIGNhbGwgd2lsbCBwcm92b2tlIGEgcmVjdXJzaW9uOiB0aGUgSUNNUCBwYWNrZXQgZ2VuZXJhdGVkIGJ5IHRoZQomIzQzOwkgKiBrZnVuYyB3aWxsIHJlLXRyaWdnZXIgdGhpcyBwcm9ncmFtIHNpbmNlIHdlIGFyZSBpbiB0aGUgcm9vdCBjZ3JvdXAgaW4KJiM0MzsJICogd2hpY2ggdGhlIGtlcm5lbCBJQ01QIHNvY2tldCBiZWxvbmdzLiBIb3dldmVyIHdoZW4gcmUtZW50ZXJpbmcgdGhlCiYjNDM7CSAqIGtmdW5jLCBpdCBzaG91bGQgcmV0dXJuIEVCVVNZLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTsKJiM0MzsJcmVjX2tmdW5jX3JldHNbcmVjX2NvdW50ICZhbXA7IDFdID0gcmV0OwomIzQzOwlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO3JlY19jb3VudCwgMSk7CiYjNDM7CiYjNDM7CS8qIExldCB0aGUgZmlyc3QgSUNNUCBlcnJvciBtZXNzYWdlIHBhc3MgKi8KJiM0MzsJaWYgKGlwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKQomIzQzOwkJcmV0dXJuIFNLX1BBU1M7CiYjNDM7CiYjNDM7CXJldHVybiBTS19EUk9QOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtEdWFsIEJTRC9HUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0ODAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgQlBGIGBicGZfaWNtcF9zZW5kYCBQYXRjaCoqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgbmV3IHBhdGNoIGludHJvZHVjaW5nIGEgYGJwZl9pY21wX3NlbmRgIGtmdW5jLiBUaGlzIGlzIGludGVyZXN0aW5nIOKAkyBkaXJlY3QgSUNNUCBjb250cm9sIG1lc3NhZ2UgdHJhbnNtaXNzaW9uIHZpYSBCUEYgaXMgYSBwb3RlbnRpYWxseSBwb3dlcmZ1bCBhZGRpdGlvbi4gRnJvbSB3aGF0IEkgc2VlLCB0aGUgcHJpbWFyeSBtb2RpZmljYXRpb24gaW52b2x2ZXMgYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgdGhlIGtmdW5jIGlzIGJlaW5nIGludGVncmF0ZWQgaW50byB0aGUgQlBGIGZyYW1ld29yay4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgbmV0L2lwdjQvcm91dGUuY2AgYW5kIGBuZXQvaXB2Ni9yb3V0ZS5jYCB0byBleHBvcnQgYGlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0YCBhbmQgYGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdGAgcmVzcGVjdGl2ZWx5LCBhbmQgdGhlbiB1cGRhdGVzIGBuZl9yZWplY3RfaXB2NC5jYCBhbmQgYG5mX3JlamVjdF9pcHY2LmNgIHRvIHVzZSB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zLiBHb29kIGhvdXNla2VlcGluZywgcmVtb3ZpbmcgdGhvc2Ugc3RhdGljIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgcmVqZWN0IGNvZGUuIEFuZCwgb2YgY291cnNlLCB0aGVyZSBhcmUgYWNjb21wYW55aW5nIHNlbGYtdGVzdHMuIFRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydC4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIHNpZ25pZmljYW50IGVuaGFuY2VtZW50IHRvIEJQRiYjMzk7cyBjYXBhYmlsaXRpZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIG5lZWRzIHRvIGJlIHJpZ29yb3VzbHkgZnV6emVkLiBUaGUgYXR0YWNrIHN1cmZhY2UgaGVyZSBpcyBkZWZpbml0ZWx5IGluY3JlYXNlZCBhbmQgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGlzIGtmdW5jIGlzIHJvYnVzdCBhbmQgc2VjdXJlLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBgYnBmX2ljbXBfc2VuZGAsIGBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdGAsIGFuZCBgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0YC4KCk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGFzc3VtaW5nIGBDT05GSUdfQlBGX1NZU0NBTExgLCBgQ09ORklHX0lORVRgLCBhbmQgYENPTkZJR19JUFY2YCBhcmUgbmVjZXNzYXJ5LCBidXQgbGV0JiMzOTtzIGJlIHN1cmUuIFRoZSBrZnVuYyBpcyBkZWZpbmVkIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGlzIHJlZ2lzdGVyZWQgZm9yIGBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0JgLCBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgLCBhbmQgYEJQRl9QUk9HX1RZUEVfU0NIRURfQUNUYC4gVGhpcyBtZWFucyB0aGF0IGBDT05GSUdfQ0dST1VQX0JQRmAgaXMgbGlrZWx5IGFub3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGUga2Z1bmMgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gY29uZmlybSB0aGUgZGV0YWlscyBhbmQgZW5zdXJlIHRoYXQgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaWNtcF9zZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTI0OTA9X19icGZfa2Z1bmMgaW50IGJwZl94ZHBfcHVsbF9kYXRhKHN0cnVjdCB4ZHBfbWQgKngsIHUzMiBsZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NTEtLyoqXG5uZXQvY29yZS9maWx0ZXIuYzoxMjU1MjogKiBicGZfaWNtcF9zZW5kIC0gU2VuZCBhbiBJQ01QIGNvbnRyb2wgbWVzc2FnZVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NTMtICogQHNrYl9jdHg6IFBhY2tldCB0aGF0IHRyaWdnZXJlZCB0aGUgY29udHJvbCBtZXNzYWdlXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NzItICovXG5uZXQvY29yZS9maWx0ZXIuYzoxMjU3MzpfX2JwZl9rZnVuYyBpbnQgYnBmX2ljbXBfc2VuZChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LCBpbnQgdHlwZSwgaW50IGNvZGUpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjU3NC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTI2ODg9QlRGX0tGVU5DU19TVEFSVChicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZClcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNjg5OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfaWNtcF9zZW5kKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI2OTAtQlRGX0tGVU5DU19FTkQoYnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGBicGZfaWNtcF9zZW5kYCBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGBicGZfaWNtcF9zZW5kYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLiBJIHNlZSB0aGF0IHVuZGVyIHRoZSBob29kLCBpdCBsZXZlcmFnZXMgYGljbXBfc2VuZGAgYW5kIGBpY21wdjZfc2VuZGAuIE5vdywgSSYjMzk7bSBub3RpbmcgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzOiBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpYCBhbmQgYCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50OyB0aG9zZSBmbGFncyBhcmUgZGVmaW5pdGVseSBrZXkuIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IGlzIGdhdGVkIGJlaGluZCB0aGUgZ2VuZXJhbCBJUHY0IGFuZCBJUHY2IHByb3RvY29sIHN1cHBvcnQuIE5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gZ2V0cyByZWdpc3RlcmVkIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIHRoZSBgYnBmX2tmdW5jX2luaXRgIGluIGBuZXQvY29yZS9maWx0ZXIuY2A7IHRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgQlBGIGtmdW5jIHJlZ2lzdHJhdGlvbnMgcmVzaWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9rZnVuY19pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTI3MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfaWNtcF9zZW5kID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzI2LVxubmV0L2NvcmUvZmlsdGVyLmM6MTI3Mjc6c3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZClcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzI4LXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc1Mi19XG5uZXQvY29yZS9maWx0ZXIuYzoxMjc1MzpsYXRlX2luaXRjYWxsKGJwZl9rZnVuY19pbml0KTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzU0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjAzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVuYWJsaW5nIEJQRi1iYXNlZCBJQ01QIFNlbmQgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUga2VybmVsIGNvbmZpZ3MgbmVlZGVkIHRvIGVuYWJsZSB0aGlzIEJQRi1iYXNlZCBJQ01QIHNlbmQgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIHNlZS4uLiBJICp0aGluayogYEJQRl9TWVNDQUxMYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkLCBzaW5jZSBgYnBmX2ljbXBfc2VuZGAgaXMgYSBCUEYga2Z1bmMuICBQb3RlbnRpYWxseSwgYENHUk9VUF9CUEZgIG1pZ2h0IGJlIG5lZWRlZCB0b28uIEFuZCBmb3IgYXR0YWNoaW5nIHRoZSBCUEYgcHJvZ3JhbSwgcHJvYmFibHkgYE5FVF9TQ0hfSU5HUkVTU2Agb3IgbWF5YmUgYE5FVF9DTFNfQUNUYCBhcmUgcmVsZXZhbnQgYXR0YWNoIHBvaW50cy4gSSBkb24mIzM5O3QgbmVlZCB0byBsaXN0ICpldmVyeSogY29uZmlnLCBqdXN0IHRoZSBrZXkgb25lcyB0aGF0IHVubG9jayB0aGUgZmVhdHVyZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IGBCUEZfU1lTQ0FMTGAgYW5kIGl0cyBkZXBlbmRlbmNpZXMsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgYGJwZl9rZnVuY19pbml0YCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIGNvbmZpcm0gdGhhdCB0aGF0IGl0JiMzOTtzIGNvbXBpbGVkIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9rZnVuY19pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTEyNzIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcyNi1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyNzI3OnN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcyOC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NTItfVxubmV0L2NvcmUvZmlsdGVyLmM6MTI3NTM6bGF0ZV9pbml0Y2FsbChicGZfa2Z1bmNfaW5pdCk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjc1NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc3MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCUEYgUmVxdWlyZW1lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgQlBGIHNpdHVhdGlvbiwgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZy4gSXQgc2VlbXMgdGhlIGNvcmUgQlBGIGZpbHRlcmluZyBpcyBiYWtlZCBpbiBpZiB0aGUgbmV0d29yayBzdGFjayBpcyBlbmFibGVkLCBzcGVjaWZpY2FsbHkgaWYgYG5ldC9jb3JlL2ZpbHRlci5jYCBnZXRzIGNvbXBpbGVkLiBBbmQgdGhhdCwgb2YgY291cnNlLCByZWxpZXMgb24gYENPTkZJR19ORVRgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4KCkJ1dCB0aGUgcmVhbCBtZWF0IG9mIHdoYXQgSSB3YW50IHRvIHRlc3QgLSB0aGUgc2VuZGluZyBvZiBJQ01QIG1lc3NhZ2VzIHRocm91Z2ggQlBGLCBzcGVjaWZpY2FsbHkgY2FsbGluZyBgYnBmX2ljbXBfc2VuZGAgLSBub3cgdGhhdCBnZXRzIGEgbGl0dGxlIG1vcmUgY29tcGxleC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFsc28gaGF2ZSBib3RoIGBJTkVUYCBhbmQgYElQVjZgIGVuYWJsZWQuIFRoZSBhY3R1YWwgSUNNUCBzZW5kaW5nIGZ1bmN0aW9ucywgYGljbXBfc2VuZGAgYW5kIGBpY21wdjZfc2VuZGAsIGFyZSBwdWxsZWQgaW4gZnJvbSBgbmV0L2lwdjQvaWNtcC5jYCBhbmQgYG5ldC9pcHY2L2ljbXAuY2AgcmVzcGVjdGl2ZWx5LCBzbyB0aG9zZSBwcm90b2NvbHMgbmVlZCB0byBiZSBpbmNsdWRlZC4KCkFuZCwgb2J2aW91c2x5LCB0byBldmVuICp1c2UqIHRoZSBCUEYgc3lzY2FsbHMsIEkmIzM5O2xsIG5lZWQgYEJQRl9TWVNDQUxMYCBlbmFibGVkIGFzIHdlbGwuIFRoYXQmIzM5O3MgYSBuby1icmFpbmVyLCBidXQgZ29vZCB0byBrZWVwIGl0IGluIG1pbmQuCgpOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiByb3V0aW5nIGFuZCBCUEYuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBpbnRvIGBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdGAgYW5kIGBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3RgIHRvIHNlZSBob3cgdGhvc2UgdGllIGludG8gdGhlIEJQRiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9yb3V0ZV9yZXBseV9maWxsX2RzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTI1NzM9X19icGZfa2Z1bmMgaW50IGJwZl9pY21wX3NlbmQoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgaW50IHR5cGUsIGludCBjb2RlKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNjAwLVxubmV0L2NvcmUvZmlsdGVyLmM6MTI2MDE6XHRcdGlmICghc2tiX2RzdChuc2tiKSBcdTAwMjZcdTAwMjYgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3QobnNrYikgXHUwMDNjIDApIHtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNjAyLVx0XHRcdGtmcmVlX3NrYihuc2tiKTtcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYz0yNTY9dm9pZCBuZl9zZW5kX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTI2Ni1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jOjI2NzpcdGlmICghc2tiX2RzdChvbGRza2IpIFx1MDAyNlx1MDAyNiBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChvbGRza2IpIFx1MDAzYyAwKVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMjY4LVx0XHRyZXR1cm47XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MzMxPXZvaWQgbmZfc2VuZF91bnJlYWNoKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCBjb2RlLCBpbnQgaG9vaylcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zMzktXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYzozNDA6XHRpZiAoIXNrYl9kc3Qoc2tiX2luKSBcdTAwMjZcdTAwMjYgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc2tiX2luKSBcdTAwM2MgMClcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTM0MS1cdFx0cmV0dXJuO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9Mjk0Mz1FWFBPUlRfU1lNQk9MX0dQTChpcF9yb3V0ZV9vdXRwdXRfZmxvdyk7XG5uZXQvaXB2NC9yb3V0ZS5jLTI5NDQtXG5uZXQvaXB2NC9yb3V0ZS5jOjI5NDU6aW50IGlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC9yb3V0ZS5jLTI5NDYte1xuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjk1Ny19XG5uZXQvaXB2NC9yb3V0ZS5jOjI5NTg6RVhQT1JUX1NZTUJPTF9HUEwoaXBfcm91dGVfcmVwbHlfZmlsbF9kc3QpO1xubmV0L2lwdjQvcm91dGUuYy0yOTU5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg2NwoJCQkJCQkJb3V0cHV0OiAxNTMKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgTmV3IElDTVAgQ2FwYWJpbGl0aWVzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIHByZXR0eSBpbnRlcmVzdGluZyBuZXcgZnVuY3Rpb25hbGl0eS4gSSBzZWUgYSBuZXcgQlBGIGtmdW5jLCBgYnBmX2ljbXBfc2VuZGAsIHdoaWNoIGFsbG93cyBzZW5kaW5nIElDTVAgY29udHJvbCBtZXNzYWdlcyBmcm9tIEJQRiBwcm9ncmFtcy4gVGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIEFuZCBpdCYjMzk7cyBub3QganVzdCB0aGUga2Z1bmMgaXRzZWxmOyB0aGUgcGF0Y2ggYWxzbyBleHBvc2VzIGBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdGAgYW5kIGBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3RgIGJ5IHJlZmFjdG9yaW5nIHNvbWUgcm91dGluZyBjb2RlLiBUaGlzIG1lYW5zIHdlIGhhdmUgZXZlbiBtb3JlIGtlcm5lbCBsb2dpYyBub3cgZXhwb3NlZCBhbmQgdGhlcmVmb3JlIHJlYWNoYWJsZSBmcm9tIEJQRi4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZ1bmN0aW9ucywgdGhlc2UgYXJlIGRlZmluaXRlbHkgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIHRlc3RpbmcgdGhlbSB0aG9yb3VnaGx5LiBUbyBydW4gdGhlIHRlc3RzLCBpdCBsb29rcyBsaWtlIEkmIzM5O2xsIG5lZWQgYEJQRl9TWVNDQUxMYCwgYElORVRgLCBhbmQgYElQVjZgIGNvbmZpZ3VyZWQuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCBpbiBteSB0ZXN0IGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ljbXBfc2VuZCYjMzQ7LAogICAgJiMzNDtpcF9yb3V0ZV9yZXBseV9maWxsX2RzdCYjMzQ7LAogICAgJiMzNDtpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHRvIHNlbmQgSUNNUCBjb250cm9sIG1lc3NhZ2VzIGZyb20gQlBGIHByb2dyYW1zLCBhbmQgcmVmYWN0b3JzIHJvdXRpbmcgY29kZSB0byBleHBvcnQgYGlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0YCBhbmQgYGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdGAuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ljbXBfc2VuZCYjMzQ7LAogICAgJiMzNDtpcF9yb3V0ZV9yZXBseV9maWxsX2RzdCYjMzQ7LAogICAgJiMzNDtpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHRvIHNlbmQgSUNNUCBjb250cm9sIG1lc3NhZ2VzIGZyb20gQlBGIHByb2dyYW1zLCBhbmQgcmVmYWN0b3JzIHJvdXRpbmcgY29kZSB0byBleHBvcnQgYGlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0YCBhbmQgYGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdGAuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDEyOjI2OjUwLjc5MjMzODMyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MDE3NTUxMzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ljbXBfc2VuZFwiLFxuICAgIFwiaXBfcm91dGVfcmVwbHlfZmlsbF9kc3RcIixcbiAgICBcImlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaWNtcF9zZW5kYCB0byBzZW5kIElDTVAgY29udHJvbCBtZXNzYWdlcyBmcm9tIEJQRiBwcm9ncmFtcywgYW5kIHJlZmFjdG9ycyByb3V0aW5nIGNvZGUgdG8gZXhwb3J0IGBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdGAgYW5kIGBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3RgLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDEyOjI2OjUwLjc5MjM0NDM3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0NzE5NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmY4NGMxYTllY2ZiOWRmY2YyMzlmMDYzODdiZDczYjJkMjBjMjZkMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyMiAxMjoyNjo0OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuaW5kZXggMDlmZmUwZjEzY2U3NTIuLmViNWE2MGQzYmFiZTJhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcXG5AQCAtMTAwLDYgKzEwMCw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRzdF9lbnRyeSAqaXA2X3JvdXRlX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHJldHVybiBpcDZfcm91dGVfb3V0cHV0X2ZsYWdzKG5ldCwgc2ssIGZsNiwgMCk7XFxuIH1cXG4gXFxuK2ludCBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuK1xcbiAvKiBPbmx5IGNvbmRpdGlvbmFsbHkgcmVsZWFzZSBkc3QgaWYgZmxhZ3MgaW5kaWNhdGVzXFxuICAqICFSVDZfTE9PS1VQX0ZfRFNUX05PUkVGIG9yIGRzdCBpcyBpbiB1bmNhY2hlZF9saXN0LlxcbiAgKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcm91dGUuaCBiL2luY2x1ZGUvbmV0L3JvdXRlLmhcXG5pbmRleCBmOTAxMDZmMzgzYzU2ZC4uMzAwZDI5MmNkOWExZjMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvcm91dGUuaFxcbisrKyBiL2luY2x1ZGUvbmV0L3JvdXRlLmhcXG5AQCAtMTczLDYgKzE3Myw3IEBAIHN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9mbG93KHN0cnVjdCBuZXQgKiwgc3RydWN0IGZsb3dpNCAqZmxwLFxcbiBcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcXG4gc3RydWN0IGRzdF9lbnRyeSAqaXB2NF9ibGFja2hvbGVfcm91dGUoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRzdF9lbnRyeSAqZHN0X29yaWcpO1xcbitpbnQgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9rZXkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbHApXFxuIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDJlOTZiNGI4NDdjZTEyLi5mYzY5YTE0NjUwZTQyOSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXFxuQEAgLTg0LDYgKzg0LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQveGRwX3NvY2tfZHJ2LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaW5ldF9kc2NwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pY21wdjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9pY21wLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiZGV2LmhcXFwiXFxuIFxcbkBAIC0xMjU0Niw2ICsxMjU0OCwxMDEgQEAgX19icGZfa2Z1bmMgaW50IGJwZl94ZHBfcHVsbF9kYXRhKHN0cnVjdCB4ZHBfbWQgKngsIHUzMiBsZW4pXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKipcXG4rICogYnBmX2ljbXBfc2VuZCAtIFNlbmQgYW4gSUNNUCBjb250cm9sIG1lc3NhZ2VcXG4rICogQHNrYl9jdHg6IFBhY2tldCB0aGF0IHRyaWdnZXJlZCB0aGUgY29udHJvbCBtZXNzYWdlXFxuKyAqIEB0eXBlOiBJQ01QIHR5cGUgKG9ubHkgSUNNUF9ERVNUX1VOUkVBQ0gvSUNNUFY2X0RFU1RfVU5SRUFDSCBzdXBwb3J0ZWQpXFxuKyAqIEBjb2RlOiBJQ01QIGNvZGUgKDAtMTUgZm9yIElQdjQsIDAtNiBmb3IgSVB2NilcXG4rICpcXG4rICogU2VuZHMgYW4gSUNNUCBjb250cm9sIG1lc3NhZ2UgaW4gcmVzcG9uc2UgdG8gdGhlIHBhY2tldC4gVGhlIG9yaWdpbmFsIHBhY2tldFxcbisgKiBpcyBjbG9uZWQgYmVmb3JlIHNlbmRpbmcgdGhlIElDTVAgbWVzc2FnZSwgc28gdGhlIEJQRiBwcm9ncmFtIGNhbiBzdGlsbCBsZXRcXG4rICogdGhlIHBhY2tldCBwYXNzIGlmIGRlc2lyZWQuXFxuKyAqXFxuKyAqIEN1cnJlbnRseSBvbmx5IElDTVBfREVTVF9VTlJFQUNIIChJUHY0KSBhbmQgSUNNUFY2X0RFU1RfVU5SRUFDSCAoSVB2NikgYXJlXFxuKyAqIHN1cHBvcnRlZC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZTpcXG4rICogICAgICAgICAtRUlOVkFMOiBJbnZhbGlkIGNvZGUgcGFyYW1ldGVyXFxuKyAqICAgICAgICAgLUVCQURNU0c6IFBhY2tldCB0b28gc2hvcnQgb3IgbWFsZm9ybWVkXFxuKyAqICAgICAgICAgLUVOT01FTTogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXFxuKyAqICAgICAgICAgLUVCVVNZOiBSZWN1cnNpb24gZGV0ZWN0ZWRcXG4rICogICAgICAgICAtRUhPU1RVTlJFQUNIOiBSb3V0aW5nIGZhaWxlZFxcbisgKiAgICAgICAgIC1FUFJPVE9OT1NVUFBPUlQ6IE5vbi1JUCBwcm90b2NvbFxcbisgKiAgICAgICAgIC1FT1BOT1RTVVBQOiBVbnN1cHBvcnRlZCBJQ01QIHR5cGVcXG4rICovXFxuK19fYnBmX2tmdW5jIGludCBicGZfaWNtcF9zZW5kKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIGludCB0eXBlLCBpbnQgY29kZSlcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopc2tiX2N0eDtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XFxuK1xcdHN0cnVjdCBzb2NrICpzaztcXG4rXFxuK1xcdHNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTtcXG4rXFx0aWYgKHNrIFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19rZXJuX3NvY2sgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QIHx8IHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX0lDTVBWNikpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlcHJvdG9jb2wpIHtcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxuK1xcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbitcXHRcXHRpZiAodHlwZSAhPSBJQ01QX0RFU1RfVU5SRUFDSClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHRpZiAoY29kZSBcXHUwMDNjIDAgfHwgY29kZSBcXHUwMDNlIE5SX0lDTVBfVU5SRUFDSClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRuc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XFxuK1xcdFxcdGlmICghbnNrYilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRcXHRpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChuc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpIHtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKG5za2IpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghc2tiX2RzdChuc2tiKSBcXHUwMDI2XFx1MDAyNiBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChuc2tiKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKG5za2IpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVIT1NUVU5SRUFDSDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0bWVtc2V0KElQQ0IobnNrYiksIDAsIHNpemVvZihzdHJ1Y3QgaW5ldF9za2JfcGFybSkpO1xcbitcXG4rXFx0XFx0aWNtcF9zZW5kKG5za2IsIHR5cGUsIGNvZGUsIDApO1xcbitcXHRcXHRjb25zdW1lX3NrYihuc2tiKTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZlxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4rXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4rXFx0XFx0aWYgKHR5cGUgIT0gSUNNUFY2X0RFU1RfVU5SRUFDSClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHRpZiAoY29kZSBcXHUwMDNjIDAgfHwgY29kZSBcXHUwMDNlIElDTVBWNl9SRUpFQ1RfUk9VVEUpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0bnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xcbitcXHRcXHRpZiAoIW5za2IpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0XFx0aWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwobnNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKG5za2IpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghc2tiX2RzdChuc2tiKSBcXHUwMDI2XFx1MDAyNiBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3QobnNrYikgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYihuc2tiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG1lbXNldChJUDZDQihuc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0Nl9za2JfcGFybSkpO1xcbitcXG4rXFx0XFx0aWNtcHY2X3NlbmQobnNrYiwgdHlwZSwgY29kZSwgMCk7XFxuK1xcdFxcdGNvbnN1bWVfc2tiKG5za2IpO1xcbitcXHRcXHRicmVhaztcXG4rI2VuZGlmXFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gX19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4gXFxuIGludCBicGZfZHlucHRyX2Zyb21fc2tiX3Jkb25seShzdHJ1Y3QgX19za19idWZmICpza2IsIHU2NCBmbGFncyxcXG5AQCAtMTI1ODgsNiArMTI2ODUsMTAgQEAgQlRGX0tGVU5DU19TVEFSVChicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfb3BzX2VuYWJsZV90eF90c3RhbXApXFxuIEJURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfc29ja19vcHMpXFxuIFxcbitCVEZfS0ZVTkNTX1NUQVJUKGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2ljbXBfc2VuZClcXG4rQlRGX0tGVU5DU19FTkQoYnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQpXFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9za2IgPSB7XFxuIFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbiBcXHQuc2V0ID0gXFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfc2tiLFxcbkBAIC0xMjYxOCw2ICsxMjcxOSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9zb2NrX29wcyA9IHtcXG4gXFx0LnNldCA9IFxcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzLFxcbiB9O1xcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfaWNtcF9zZW5kID0ge1xcbitcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4rXFx0LnNldCA9IFxcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZCxcXG4rfTtcXG4rXFxuIHN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXFxuIHtcXG4gXFx0aW50IHJldDtcXG5AQCAtMTI2MzksNiArMTI3NDUsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxcbiBcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpO1xcbiBcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTtcXG4rXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9pY21wX3NlbmQpO1xcbitcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcXG4rXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1QsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XFxuIFxcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tfT1BTLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX29wcyk7XFxuIH1cXG4gbGF0ZV9pbml0Y2FsbChicGZfa2Z1bmNfaW5pdCk7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmNcXG5pbmRleCBmZWNmNjYyMWY2NzlmOS4uYzFjMDcyNGU0ZDRkZDQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmNcXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuY1xcbkBAIC0yNTIsMjEgKzI1Miw2IEBAIHN0YXRpYyB2b2lkIG5mX3JlamVjdF9pcF90Y3BoZHJfcHV0KHN0cnVjdCBza19idWZmICpuc2tiLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqXFxuIFxcdG5za2ItXFx1MDAzZWNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbilcXG4te1xcbi1cXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgZmxvd2kgZmw7XFxuLVxcbi1cXHRtZW1zZXQoXFx1MDAyNmZsLCAwLCBzaXplb2Yoc3RydWN0IGZsb3dpKSk7XFxuLVxcdGZsLnUuaXA0LmRhZGRyID0gaXBfaGRyKHNrYl9pbiktXFx1MDAzZXNhZGRyO1xcbi1cXHRuZl9pcF9yb3V0ZShkZXZfbmV0KHNrYl9pbi1cXHUwMDNlZGV2KSwgXFx1MDAyNmRzdCwgXFx1MDAyNmZsLCBmYWxzZSk7XFxuLVxcdGlmICghZHN0KVxcbi1cXHRcXHRyZXR1cm4gLTE7XFxuLVxcbi1cXHRza2JfZHN0X3NldChza2JfaW4sIGRzdCk7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiAvKiBTZW5kIFJTVCByZXBseSAqL1xcbiB2b2lkIG5mX3NlbmRfcmVzZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvbGRza2IsXFxuIFxcdFxcdCAgIGludCBob29rKVxcbkBAIC0yNzksNyArMjY0LDcgQEAgdm9pZCBuZl9zZW5kX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxcbiBcXHRpZiAoIW90aClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0aWYgKCFza2JfZHN0KG9sZHNrYikgXFx1MDAyNlxcdTAwMjYgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChvbGRza2IpIFxcdTAwM2MgMClcXG4rXFx0aWYgKCFza2JfZHN0KG9sZHNrYikgXFx1MDAyNlxcdTAwMjYgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qob2xkc2tiKSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmIChza2JfcnRhYmxlKG9sZHNrYiktXFx1MDAzZXJ0X2ZsYWdzIFxcdTAwMjYgKFJUQ0ZfQlJPQURDQVNUIHwgUlRDRl9NVUxUSUNBU1QpKVxcbkBAIC0zNTIsNyArMzM3LDcgQEAgdm9pZCBuZl9zZW5kX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IGNvZGUsIGludCBob29rKVxcbiBcXHRpZiAoaXBoLVxcdTAwM2VmcmFnX29mZiBcXHUwMDI2IGh0b25zKElQX09GRlNFVCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmICghc2tiX2RzdChza2JfaW4pIFxcdTAwMjZcXHUwMDI2IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qoc2tiX2luKSBcXHUwMDNjIDApXFxuK1xcdGlmICghc2tiX2RzdChza2JfaW4pIFxcdTAwMjZcXHUwMDI2IGlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0KHNrYl9pbikgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiX2luKSB8fFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuY1xcbmluZGV4IDNmM2RlNTE2NGQ2ZTU4Li5mMjQ2MDk5MzNmYmVjYiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9yb3V0ZS5jXFxuKysrIGIvbmV0L2lwdjQvcm91dGUuY1xcbkBAIC0yOTQyLDYgKzI5NDIsMjEgQEAgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2Zsb3coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbHA0LFxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGlwX3JvdXRlX291dHB1dF9mbG93KTtcXG4gXFxuK2ludCBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBydGFibGUgKnJ0O1xcbitcXHRzdHJ1Y3QgZmxvd2k0IGZsNCA9IHtcXG4rXFx0XFx0LmRhZGRyID0gaXBfaGRyKHNrYiktXFx1MDAzZXNhZGRyXFxuK1xcdH07XFxuK1xcbitcXHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkoZGV2X25ldChza2ItXFx1MDAzZWRldiksIFxcdTAwMjZmbDQpO1xcbitcXHRpZiAoSVNfRVJSKHJ0KSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIocnQpO1xcbitcXHRza2JfZHN0X3NldChza2IsIFxcdTAwMjZydC1cXHUwMDNlZHN0KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoaXBfcm91dGVfcmVwbHlfZmlsbF9kc3QpO1xcbitcXG4gLyogY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayBoZWxkICovXFxuIHN0YXRpYyBpbnQgcnRfZmlsbF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGRzdCwgX19iZTMyIHNyYyxcXG4gXFx0XFx0XFx0c3RydWN0IHJ0YWJsZSAqcnQsIHUzMiB0YWJsZV9pZCwgZHNjcF90IGRzY3AsXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmNcXG5pbmRleCBlZjViN2U4NWNmZmE4YS4uN2QyZjU3N2U3MmI4ODIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmNcXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuY1xcbkBAIC0yOTMsMjEgKzI5Myw2IEBAIG5mX3JlamVjdF9pcDZfdGNwaGRyX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqbnNrYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpLCAwKSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbmZfcmVqZWN0Nl9maWxsX3NrYl9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbilcXG4te1xcbi1cXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgZmxvd2kgZmw7XFxuLVxcbi1cXHRtZW1zZXQoXFx1MDAyNmZsLCAwLCBzaXplb2Yoc3RydWN0IGZsb3dpKSk7XFxuLVxcdGZsLnUuaXA2LmRhZGRyID0gaXB2Nl9oZHIoc2tiX2luKS1cXHUwMDNlc2FkZHI7XFxuLVxcdG5mX2lwNl9yb3V0ZShkZXZfbmV0KHNrYl9pbi1cXHUwMDNlZGV2KSwgXFx1MDAyNmRzdCwgXFx1MDAyNmZsLCBmYWxzZSk7XFxuLVxcdGlmICghZHN0KVxcbi1cXHRcXHRyZXR1cm4gLTE7XFxuLVxcbi1cXHRza2JfZHN0X3NldChza2JfaW4sIGRzdCk7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiB2b2lkIG5mX3NlbmRfcmVzZXQ2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxcbiBcXHRcXHQgICAgaW50IGhvb2spXFxuIHtcXG5AQCAtNDQwLDcgKzQyNSw3IEBAIHZvaWQgbmZfc2VuZF91bnJlYWNoNihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2JfaW4sXFxuIFxcdGlmIChob29rbnVtID09IE5GX0lORVRfTE9DQUxfT1VUIFxcdTAwMjZcXHUwMDI2IHNrYl9pbi1cXHUwMDNlZGV2ID09IE5VTEwpXFxuIFxcdFxcdHNrYl9pbi1cXHUwMDNlZGV2ID0gbmV0LVxcdTAwM2Vsb29wYmFja19kZXY7XFxuIFxcbi1cXHRpZiAoIXNrYl9kc3Qoc2tiX2luKSBcXHUwMDI2XFx1MDAyNiBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChza2JfaW4pIFxcdTAwM2MgMClcXG4rXFx0aWYgKCFza2JfZHN0KHNrYl9pbikgXFx1MDAyNlxcdTAwMjYgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0KHNrYl9pbikgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpY21wdjZfc2VuZChza2JfaW4sIElDTVBWNl9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xcbmluZGV4IDYzNjFhZDJmY2Y3NzE1Li4wZmE1NmM4MDExNzgxNiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXFxuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xcbkBAIC0yNzMyLDYgKzI3MzIsMjQgQEAgc3RydWN0IGRzdF9lbnRyeSAqaXA2X3JvdXRlX291dHB1dF9mbGFncyhzdHJ1Y3QgbmV0ICpuZXQsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoaXA2X3JvdXRlX291dHB1dF9mbGFncyk7XFxuIFxcbitpbnQgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0KHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGRzdF9lbnRyeSAqcmVzdWx0O1xcbitcXHRzdHJ1Y3QgZmxvd2k2IGZsID0ge1xcbitcXHRcXHQuZGFkZHIgPSBpcHY2X2hkcihza2IpLVxcdTAwM2VzYWRkclxcbitcXHR9O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0cmVzdWx0ID0gaXA2X3JvdXRlX291dHB1dChkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgXFx1MDAyNmZsKTtcXG4rXFx0ZXJyID0gcmVzdWx0LVxcdTAwM2VlcnJvcjtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0ZHN0X3JlbGVhc2UocmVzdWx0KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRza2JfZHN0X3NldChza2IsIHJlc3VsdCk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0KTtcXG4rXFxuIHN0cnVjdCBkc3RfZW50cnkgKmlwNl9ibGFja2hvbGVfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Rfb3JpZylcXG4ge1xcbiBcXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqb3J0ID0gZHN0X3J0Nl9pbmZvKGRzdF9vcmlnKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaWNtcF9zZW5kX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pY21wX3NlbmRfa2Z1bmMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmZkNGI4ZmE3OGEwMTg0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ljbXBfc2VuZF9rZnVuYy5jXFxuQEAgLTAsMCArMSwyNTAgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldHdvcmtfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjY2dyb3VwX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VycnF1ZXVlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nwb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImljbXBfc2VuZC5za2VsLmhcXFwiXFxuK1xcbisjZGVmaW5lIFRJTUVPVVRfTVMgMTAwMFxcbitcXG4rI2RlZmluZSBJQ01QX0RFU1RfVU5SRUFDSCAzXFxuKyNkZWZpbmUgSUNNUFY2X0RFU1RfVU5SRUFDSCAxXFxuK1xcbisjZGVmaW5lIElDTVBfSE9TVF9VTlJFQUNIIDFcXG4rI2RlZmluZSBJQ01QX0ZSQUdfTkVFREVEIDRcXG4rI2RlZmluZSBOUl9JQ01QX1VOUkVBQ0ggMTVcXG4rI2RlZmluZSBJQ01QVjZfUkVKRUNUX1JPVVRFIDZcXG4rXFxuK3N0YXRpYyBpbnQgY29ubmVjdF90b19mZF9ub25ibG9jayhpbnQgc2VydmVyX2ZkKVxcbit7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7XFxuK1xcdHNvY2tsZW5fdCBsZW4gPSBzaXplb2YoYWRkcik7XFxuK1xcdGludCBmZCwgZXJyLCBvbiA9IDE7XFxuK1xcbitcXHRpZiAoZ2V0c29ja25hbWUoc2VydmVyX2ZkLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmFkZHIsIFxcdTAwMjZsZW4pKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRmZCA9IHNvY2tldChhZGRyLnNzX2ZhbWlseSwgU09DS19TVFJFQU0gfCBTT0NLX05PTkJMT0NLLCAwKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0aWYgKGFkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfUkVDVkVSUiwgXFx1MDAyNm9uLCBzaXplb2Yob24pKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2YWRkciwgbGVuKTtcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJybm8gIT0gRUlOUFJPR1JFU1MpIHtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmZDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVhZF9pY21wX2VycnF1ZXVlKGludCBzb2NrZmQsIGludCBleHBlY3RlZF9jb2RlLCBpbnQgYWYpXFxuK3tcXG4rXFx0aW50IGV4cGVjdGVkX2VlX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJQ01QX0RFU1RfVU5SRUFDSCA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBJQ01QVjZfREVTVF9VTlJFQUNIO1xcbitcXHRpbnQgZXhwZWN0ZWRfb3JpZ2luID0gKGFmID09IEFGX0lORVQpID8gU09fRUVfT1JJR0lOX0lDTVAgOlxcbitcXHRcXHRcXHRcXHRcXHRcXHRTT19FRV9PUklHSU5fSUNNUDY7XFxuK1xcdGludCBleHBlY3RlZF9sZXZlbCA9IChhZiA9PSBBRl9JTkVUKSA/IElQUFJPVE9fSVAgOiBJUFBST1RPX0lQVjY7XFxuK1xcdGludCBleHBlY3RlZF90eXBlID0gKGFmID09IEFGX0lORVQpID8gSVBfUkVDVkVSUiA6IElQVjZfUkVDVkVSUjtcXG4rXFx0c3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICpzb2NrX2VycjtcXG4rXFx0Y2hhciBjdHJsX2J1Zls1MTJdO1xcbitcXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcXG4rXFx0XFx0Lm1zZ19jb250cm9sID0gY3RybF9idWYsXFxuK1xcdFxcdC5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjdHJsX2J1ZiksXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBwb2xsZmQgcGZkID0ge1xcbitcXHRcXHQuZmQgPSBzb2NrZmQsXFxuK1xcdFxcdC5ldmVudHMgPSBQT0xMRVJSLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgY21zZ2hkciAqY207XFxuK1xcdHNzaXplX3QgbjtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0dFKHBvbGwoXFx1MDAyNnBmZCwgMSwgVElNRU9VVF9NUyksIDEsIFxcXCJwb2xsX2VycnF1ZXVlXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG4gPSByZWN2bXNnKHNvY2tmZCwgXFx1MDAyNm1zZywgTVNHX0VSUlFVRVVFKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UobiwgMCwgXFxcInJlY3Ztc2dfZXJycXVldWVcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y20gPSBDTVNHX0ZJUlNUSERSKFxcdTAwMjZtc2cpO1xcbitcXHRpZiAoIUFTU0VSVF9ORVEoY20sIE5VTEwsIFxcXCJjbV9maXJzdGhkcl9udWxsXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoOyBjbTsgY20gPSBDTVNHX05YVEhEUihcXHUwMDI2bXNnLCBjbSkpIHtcXG4rXFx0XFx0aWYgKGNtLVxcdTAwM2VjbXNnX2xldmVsICE9IGV4cGVjdGVkX2xldmVsIHx8XFxuK1xcdFxcdCAgICBjbS1cXHUwMDNlY21zZ190eXBlICE9IGV4cGVjdGVkX3R5cGUpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0c29ja19lcnIgPSAoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtKTtcXG4rXFxuK1xcdFxcdGlmICghQVNTRVJUX0VRKHNvY2tfZXJyLVxcdTAwM2VlZV9vcmlnaW4sIGV4cGVjdGVkX29yaWdpbixcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJzb2NrX2Vycl9vcmlnaW5cXFwiKSlcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9FUShzb2NrX2Vyci1cXHUwMDNlZWVfdHlwZSwgZXhwZWN0ZWRfZWVfdHlwZSxcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJzb2NrX2Vycl90eXBlX2Rlc3RfdW5yZWFjaFxcXCIpKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdEFTU0VSVF9FUShzb2NrX2Vyci1cXHUwMDNlZWVfY29kZSwgZXhwZWN0ZWRfY29kZSwgXFxcInNvY2tfZXJyX2NvZGVcXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRBU1NFUlRfRkFJTChcXFwibm8gSVBfUkVDVkVSUi9JUFY2X1JFQ1ZFUlIgY29udHJvbCBtZXNzYWdlIGZvdW5kXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc3RydWN0IGljbXBfc2VuZCAqc2tlbCwgaW50IGNvZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBpbnQgYWYsIGNvbnN0IGNoYXIgKmlwKVxcbit7XFxuK1xcdGludCBzcnZfZmQgPSAtMSwgY2xpZW50X2ZkID0gLTE7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyO1xcbitcXHRzb2NrbGVuX3QgbGVuID0gc2l6ZW9mKGFkZHIpO1xcbitcXG4rXFx0c3J2X2ZkID0gc3RhcnRfc2VydmVyKGFmLCBTT0NLX1NUUkVBTSwgaXAsIDAsIFRJTUVPVVRfTVMpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19GRChzcnZfZmQsIFxcXCJzdGFydF9zZXJ2ZXJcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKGdldHNvY2tuYW1lKHNydl9mZCwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZhZGRyLCBcXHUwMDI2bGVuKSkge1xcbitcXHRcXHRjbG9zZShzcnZfZmQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzZXJ2ZXJfcG9ydCA9IG50b2hzKGFkZHIuc2luX3BvcnQpO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXVucmVhY2hfdHlwZSA9IChhZiA9PSBBRl9JTkVUKSA/IElDTVBfREVTVF9VTlJFQUNIIDpcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIElDTVBWNl9ERVNUX1VOUkVBQ0g7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldW5yZWFjaF9jb2RlID0gY29kZTtcXG4rXFxuK1xcdGNsaWVudF9mZCA9IGNvbm5lY3RfdG9fZmRfbm9uYmxvY2soc3J2X2ZkKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoY2xpZW50X2ZkLCBcXFwiY2xpZW50X2Nvbm5lY3Rfbm9uYmxvY2tcXFwiKSkge1xcbitcXHRcXHRjbG9zZShzcnZfZmQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFNraXAgcmVhZGluZyBJQ01QIGVycm9yIHF1ZXVlIGlmIGNvZGUgaXMgaW52YWxpZCAqL1xcbitcXHRpZiAoY29kZSBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2ICgoYWYgPT0gQUZfSU5FVCBcXHUwMDI2XFx1MDAyNiBjb2RlIFxcdTAwM2M9IE5SX0lDTVBfVU5SRUFDSCkgfHxcXG4rXFx0XFx0XFx0ICAoYWYgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjYgY29kZSBcXHUwMDNjPSBJQ01QVjZfUkVKRUNUX1JPVVRFKSkpXFxuK1xcdFxcdHJlYWRfaWNtcF9lcnJxdWV1ZShjbGllbnRfZmQsIGNvZGUsIGFmKTtcXG4rXFxuK1xcdGNsb3NlKGNsaWVudF9mZCk7XFxuK1xcdGNsb3NlKHNydl9mZCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl9pY21wX3Rlc3Qoc3RydWN0IGljbXBfc2VuZCAqc2tlbCwgaW50IGFmLCBjb25zdCBjaGFyICppcCxcXG4rXFx0XFx0XFx0ICBpbnQgbWF4X2NvZGUpXFxuK3tcXG4rXFx0Zm9yIChpbnQgY29kZSA9IDA7IGNvZGUgXFx1MDAzYz0gbWF4X2NvZGU7IGNvZGUrKykge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgVENQIHN0YWNrIHJlYWN0cyBkaWZmZXJlbnRseSB3aGVuIGFza2luZyBmb3JcXG4rXFx0XFx0ICogZnJhZ21lbnRhdGlvbiwgbGV0J3MgaWdub3JlIGl0IGZvciBub3cuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoYWYgPT0gQUZfSU5FVCBcXHUwMDI2XFx1MDAyNiBjb2RlID09IElDTVBfRlJBR19ORUVERUQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0dHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCBjb2RlLCBhZiwgaXApO1xcbitcXHRcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNla2Z1bmNfcmV0LCAwLCBcXFwia2Z1bmNfcmV0XFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRlc3QgYW4gaW52YWxpZCBjb2RlICovXFxuK1xcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgLTEsIGFmLCBpcCk7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VrZnVuY19yZXQsIC1FSU5WQUwsIFxcXCJrZnVuY19yZXRcXFwiKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2ljbXBfc2VuZF91bnJlYWNoX2Nncm91cCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBpY21wX3NlbmQgKnNrZWw7XFxuK1xcdGludCBjZ3JvdXBfZmQgPSAtMTtcXG4rXFxuK1xcdHNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5cXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0Y2dyb3VwX2ZkID0gdGVzdF9fam9pbl9jZ3JvdXAoXFxcIi9pY21wX3NlbmRfdW5yZWFjaF9jZ3JvdXBcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoY2dyb3VwX2ZkLCBcXFwiam9pbl9jZ3JvdXBcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlbGlua3MuZWdyZXNzID1cXG4rXFx0XFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cXHUwMDNlcHJvZ3MuZWdyZXNzLCBjZ3JvdXBfZmQpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlbGlua3MuZWdyZXNzLCBcXFwicHJvZ19hdHRhY2hfY2dyb3VwXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJpcHY0XFxcIikpXFxuK1xcdFxcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVCwgXFxcIjEyNy4wLjAuMVxcXCIsIE5SX0lDTVBfVU5SRUFDSCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaXB2NlxcXCIpKVxcbitcXHRcXHRydW5faWNtcF90ZXN0KHNrZWwsIEFGX0lORVQ2LCBcXFwiOjoxXFxcIiwgSUNNUFY2X1JFSkVDVF9ST1VURSk7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRpY21wX3NlbmRfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcdGlmIChjZ3JvdXBfZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoY2dyb3VwX2ZkKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2ljbXBfc2VuZF91bnJlYWNoX3RjKHZvaWQpXFxuK3tcXG4rXFx0TElCQlBGX09QVFMoYnBmX3RjeF9vcHRzLCBvcHRzKTtcXG4rXFx0c3RydWN0IGljbXBfc2VuZCAqc2tlbDtcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDtcXG4rXFxuK1xcdHNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5cXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdGN4KHNrZWwtXFx1MDAzZXByb2dzLnRjX2VncmVzcywgMSwgXFx1MDAyNm9wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXFxcInByb2dfYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJpcHY0XFxcIikpXFxuK1xcdFxcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVCwgXFxcIjEyNy4wLjAuMVxcXCIsIE5SX0lDTVBfVU5SRUFDSCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaXB2NlxcXCIpKVxcbitcXHRcXHRydW5faWNtcF90ZXN0KHNrZWwsIEFGX0lORVQ2LCBcXFwiOjoxXFxcIiwgSUNNUFY2X1JFSkVDVF9ST1VURSk7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcXG4rXFx0aWNtcF9zZW5kX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbit2b2lkIHRlc3RfaWNtcF9zZW5kX3VucmVhY2hfcmVjdXJzaW9uKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGljbXBfc2VuZCAqc2tlbDtcXG4rXFx0aW50IGNncm91cF9mZCA9IC0xO1xcbitcXG4rXFx0c2tlbCA9IGljbXBfc2VuZF9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInNrZWxfb3BlblxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRpZiAoc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCkpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJGYWlsZWQgdG8gc2V0dXAgY2dyb3VwIGVudmlyb25tZW50XFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRjZ3JvdXBfZmQgPSBnZXRfcm9vdF9jZ3JvdXAoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoY2dyb3VwX2ZkLCBcXFwiZ2V0X3Jvb3RfY2dyb3VwXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXRhcmdldF9waWQgPSBnZXRwaWQoKTtcXG4rXFx0c2tlbC1cXHUwMDNlbGlua3MucmVjdXJzaW9uID1cXG4rXFx0XFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cXHUwMDNlcHJvZ3MucmVjdXJzaW9uLCBjZ3JvdXBfZmQpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlbGlua3MucmVjdXJzaW9uLCBcXFwicHJvZ19hdHRhY2hfY2dyb3VwXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgSUNNUF9IT1NUX1VOUkVBQ0gsIEFGX0lORVQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCIxMjcuMC4wLjFcXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEJlY2F1c2UgdGhlcmUncyByZWN1cnNpb24gaW52b2x2ZWQsIHRoZSBmaXJzdCBjYWxsIHdpbGwgcmV0dXJuIGF0XFxuK1xcdCAqIGluZGV4IDEgc2luY2UgaXQgd2lsbCByZXR1cm4gdGhlIHNlY29uZCwgYW5kIHRoZSBzZWNvbmQgY2FsbCB3aWxsXFxuK1xcdCAqIHJldHVybiBhdCBpbmRleCAwIHNpbmNlIGl0IHdpbGwgcmV0dXJuIHRoZSBmaXJzdC5cXG4rXFx0ICovXFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VyZWNfa2Z1bmNfcmV0c1swXSwgLUVCVVNZLCBcXFwia2Z1bmNfcmV0c1swXVxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNlcmVjX2tmdW5jX3JldHNbMV0sIDAsIFxcXCJrZnVuY19yZXRzWzFdXFxcIik7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xcbitcXHRpY21wX3NlbmRfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcdGlmIChjZ3JvdXBfZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoY2dyb3VwX2ZkKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mZDljNzY4NDc5N2IwN1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmNcXG5AQCAtMCwwICsxLDE4NCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2VuZGlhbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX3RyYWNpbmdfbmV0LmhcXFwiXFxuK1xcbisvKiAxMjcuMC4wLjEgaW4gaG9zdCBieXRlIG9yZGVyICovXFxuKyNkZWZpbmUgU0VSVkVSX0lQIDB4N0YwMDAwMDFcXG4rLyogOjoxIGluIGhvc3QgYnl0ZSBvcmRlciAobGFzdCAzMi1iaXQgd29yZCkgKi9cXG4rI2RlZmluZSBTRVJWRVJfSVA2X0xPIDB4MDAwMDAwMDFcXG4rXFxuK19fdTE2IHNlcnZlcl9wb3J0ID0gMDtcXG4raW50IHVucmVhY2hfdHlwZSA9IDA7XFxuK2ludCB1bnJlYWNoX2NvZGUgPSAwO1xcbitpbnQga2Z1bmNfcmV0ID0gLTE7XFxuK2ludCB0YXJnZXRfcGlkID0gLTE7XFxuK1xcbit1bnNpZ25lZCBpbnQgcmVjX2NvdW50ID0gMDtcXG4raW50IHJlY19rZnVuY19yZXRzW10gPSB7IC0xLCAtMSB9O1xcbitcXG4rU0VDKFxcXCJjZ3JvdXBfc2tiL2VncmVzc1xcXCIpXFxuK2ludCBlZ3Jlc3Moc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cXHUwMDNlZGF0YTtcXG4rXFx0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cXHUwMDNlZGF0YV9lbmQ7XFxuK1xcdHN0cnVjdCBpcGhkciAqaXBoO1xcbitcXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcXG4rXFx0c3RydWN0IHRjcGhkciAqdGNwaDtcXG4rXFx0X191OCB2ZXJzaW9uO1xcbitcXG4rXFx0aWYgKGRhdGEgKyAxIFxcdTAwM2UgZGF0YV9lbmQpXFxuK1xcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXG4rXFx0dmVyc2lvbiA9ICgqKChfX3U4ICopZGF0YSkpIFxcdTAwM2VcXHUwMDNlIDQ7XFxuK1xcbitcXHRpZiAodmVyc2lvbiA9PSA0KSB7XFxuK1xcdFxcdGlwaCA9IGRhdGE7XFxuK1xcdFxcdGlmICgodm9pZCAqKShpcGggKyAxKSBcXHUwMDNlIGRhdGFfZW5kIHx8XFxuK1xcdFxcdCAgICBpcGgtXFx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fVENQIHx8XFxuK1xcdFxcdCAgICBpcGgtXFx1MDAzZWRhZGRyICE9IGJwZl9odG9ubChTRVJWRVJfSVApKVxcbitcXHRcXHRcXHRyZXR1cm4gU0tfUEFTUztcXG4rXFxuK1xcdFxcdHRjcGggPSAodm9pZCAqKWlwaCArIGlwaC1cXHUwMDNlaWhsICogNDtcXG4rXFx0XFx0aWYgKCh2b2lkICopKHRjcGggKyAxKSBcXHUwMDNlIGRhdGFfZW5kIHx8XFxuK1xcdFxcdCAgICB0Y3BoLVxcdTAwM2VkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpXFxuK1xcdFxcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXG4rXFx0fSBlbHNlIGlmICh2ZXJzaW9uID09IDYpIHtcXG4rXFx0XFx0aXA2aCA9IGRhdGE7XFxuK1xcdFxcdGlmICgodm9pZCAqKShpcDZoICsgMSkgXFx1MDAzZSBkYXRhX2VuZCB8fFxcbitcXHRcXHQgICAgaXA2aC1cXHUwMDNlbmV4dGhkciAhPSBJUFBST1RPX1RDUClcXG4rXFx0XFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxuK1xcbitcXHRcXHRpZiAoaXA2aC1cXHUwMDNlZGFkZHIuaW42X3UudTZfYWRkcjMyWzBdICE9IDAgfHxcXG4rXFx0XFx0ICAgIGlwNmgtXFx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlsxXSAhPSAwIHx8XFxuK1xcdFxcdCAgICBpcDZoLVxcdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMl0gIT0gMCB8fFxcbitcXHRcXHQgICAgaXA2aC1cXHUwMDNlZGFkZHIuaW42X3UudTZfYWRkcjMyWzNdICE9IGJwZl9odG9ubChTRVJWRVJfSVA2X0xPKSlcXG4rXFx0XFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxuK1xcbitcXHRcXHR0Y3BoID0gKHZvaWQgKikoaXA2aCArIDEpO1xcbitcXHRcXHRpZiAoKHZvaWQgKikodGNwaCArIDEpIFxcdTAwM2UgZGF0YV9lbmQgfHxcXG4rXFx0XFx0ICAgIHRjcGgtXFx1MDAzZWRlc3QgIT0gYnBmX2h0b25zKHNlcnZlcl9wb3J0KSlcXG4rXFx0XFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXHR9XFxuK1xcbitcXHRrZnVuY19yZXQgPSBicGZfaWNtcF9zZW5kKHNrYiwgdW5yZWFjaF90eXBlLCB1bnJlYWNoX2NvZGUpO1xcbitcXG4rXFx0cmV0dXJuIFNLX0RST1A7XFxuK31cXG4rXFxuK1NFQyhcXFwidGMvZWdyZXNzXFxcIilcXG4raW50IHRjX2VncmVzcyhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLVxcdTAwM2VkYXRhO1xcbitcXHR2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpc2tiLVxcdTAwM2VkYXRhX2VuZDtcXG4rXFx0c3RydWN0IGV0aGhkciAqZXRoO1xcbitcXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4rXFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XFxuK1xcdHN0cnVjdCB0Y3BoZHIgKnRjcGg7XFxuK1xcbitcXHRldGggPSBkYXRhO1xcbitcXHRpZiAoKHZvaWQgKikoZXRoICsgMSkgXFx1MDAzZSBkYXRhX2VuZClcXG4rXFx0XFx0cmV0dXJuIFRDWF9QQVNTO1xcbitcXG4rXFx0aWYgKGV0aC1cXHUwMDNlaF9wcm90byA9PSBicGZfaHRvbnMoRVRIX1BfSVApKSB7XFxuK1xcdFxcdGlwaCA9ICh2b2lkICopKGV0aCArIDEpO1xcbitcXHRcXHRpZiAoKHZvaWQgKikoaXBoICsgMSkgXFx1MDAzZSBkYXRhX2VuZClcXG4rXFx0XFx0XFx0cmV0dXJuIFRDWF9QQVNTO1xcbitcXG4rXFx0XFx0aWYgKGlwaC1cXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgfHxcXG4rXFx0XFx0ICAgIGlwaC1cXHUwMDNlZGFkZHIgIT0gYnBmX2h0b25sKFNFUlZFUl9JUCkpXFxuK1xcdFxcdFxcdHJldHVybiBUQ1hfUEFTUztcXG4rXFxuK1xcdFxcdHRjcGggPSAodm9pZCAqKWlwaCArIGlwaC1cXHUwMDNlaWhsICogNDtcXG4rXFx0XFx0aWYgKCh2b2lkICopKHRjcGggKyAxKSBcXHUwMDNlIGRhdGFfZW5kKVxcbitcXHRcXHRcXHRyZXR1cm4gVENYX1BBU1M7XFxuK1xcbitcXHRcXHRpZiAodGNwaC1cXHUwMDNlZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKVxcbitcXHRcXHRcXHRyZXR1cm4gVENYX1BBU1M7XFxuK1xcbitcXHR9IGVsc2UgaWYgKGV0aC1cXHUwMDNlaF9wcm90byA9PSBicGZfaHRvbnMoRVRIX1BfSVBWNikpIHtcXG4rXFx0XFx0aXA2aCA9ICh2b2lkICopKGV0aCArIDEpO1xcbitcXHRcXHRpZiAoKHZvaWQgKikoaXA2aCArIDEpIFxcdTAwM2UgZGF0YV9lbmQpXFxuK1xcdFxcdFxcdHJldHVybiBUQ1hfUEFTUztcXG4rXFxuK1xcdFxcdGlmIChpcDZoLVxcdTAwM2VuZXh0aGRyICE9IElQUFJPVE9fVENQKVxcbitcXHRcXHRcXHRyZXR1cm4gVENYX1BBU1M7XFxuK1xcbitcXHRcXHRpZiAoaXA2aC1cXHUwMDNlZGFkZHIuaW42X3UudTZfYWRkcjMyWzBdICE9IDAgfHxcXG4rXFx0XFx0ICAgIGlwNmgtXFx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlsxXSAhPSAwIHx8XFxuK1xcdFxcdCAgICBpcDZoLVxcdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMl0gIT0gMCB8fFxcbitcXHRcXHQgICAgaXA2aC1cXHUwMDNlZGFkZHIuaW42X3UudTZfYWRkcjMyWzNdICE9IGJwZl9odG9ubChTRVJWRVJfSVA2X0xPKSlcXG4rXFx0XFx0XFx0cmV0dXJuIFRDWF9QQVNTO1xcbitcXG4rXFx0XFx0dGNwaCA9ICh2b2lkICopKGlwNmggKyAxKTtcXG4rXFx0XFx0aWYgKCh2b2lkICopKHRjcGggKyAxKSBcXHUwMDNlIGRhdGFfZW5kKVxcbitcXHRcXHRcXHRyZXR1cm4gVENYX1BBU1M7XFxuK1xcbitcXHRcXHRpZiAodGNwaC1cXHUwMDNlZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKVxcbitcXHRcXHRcXHRyZXR1cm4gVENYX1BBU1M7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldHVybiBUQ1hfUEFTUztcXG4rXFx0fVxcbitcXG4rXFx0a2Z1bmNfcmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTtcXG4rXFxuK1xcdHJldHVybiBUQ1hfRFJPUDtcXG4rfVxcbitcXG4rU0VDKFxcXCJjZ3JvdXBfc2tiL2VncmVzc1xcXCIpXFxuK2ludCByZWN1cnNpb24oc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cXHUwMDNlZGF0YTtcXG4rXFx0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cXHUwMDNlZGF0YV9lbmQ7XFxuK1xcdHN0cnVjdCBpY21waGRyICppY21waDtcXG4rXFx0c3RydWN0IHRjcGhkciAqdGNwaDtcXG4rXFx0c3RydWN0IGlwaGRyICppcGg7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoKGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFxcdTAwM2VcXHUwMDNlIDMyKSAhPSB0YXJnZXRfcGlkKVxcbitcXHRcXHRyZXR1cm4gU0tfUEFTUztcXG4rXFxuK1xcdGlwaCA9IGRhdGE7XFxuK1xcdGlmICgodm9pZCAqKShpcGggKyAxKSBcXHUwMDNlIGRhdGFfZW5kIHx8IGlwaC1cXHUwMDNldmVyc2lvbiAhPSA0KVxcbitcXHRcXHRyZXR1cm4gU0tfUEFTUztcXG4rXFxuK1xcdGlmIChpcGgtXFx1MDAzZWRhZGRyICE9IGJwZl9odG9ubChTRVJWRVJfSVApKVxcbitcXHRcXHRyZXR1cm4gU0tfUEFTUztcXG4rXFxuK1xcdGlmIChpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQKSB7XFxuK1xcdFxcdHRjcGggPSAodm9pZCAqKWlwaCArIGlwaC1cXHUwMDNlaWhsICogNDtcXG4rXFx0XFx0aWYgKCh2b2lkICopKHRjcGggKyAxKSBcXHUwMDNlIGRhdGFfZW5kIHx8XFxuK1xcdFxcdCAgICB0Y3BoLVxcdTAwM2VkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpXFxuK1xcdFxcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXHR9IGVsc2UgaWYgKGlwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSB7XFxuK1xcdFxcdGljbXBoID0gKHZvaWQgKilpcGggKyBpcGgtXFx1MDAzZWlobCAqIDQ7XFxuK1xcdFxcdGlmICgodm9pZCAqKShpY21waCArIDEpIFxcdTAwM2UgZGF0YV9lbmQgfHxcXG4rXFx0XFx0ICAgIGljbXBoLVxcdTAwM2V0eXBlICE9IHVucmVhY2hfdHlwZSB8fFxcbitcXHRcXHQgICAgaWNtcGgtXFx1MDAzZWNvZGUgIT0gdW5yZWFjaF9jb2RlKVxcbitcXHRcXHRcXHRyZXR1cm4gU0tfUEFTUztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoaXMgY2FsbCB3aWxsIHByb3Zva2UgYSByZWN1cnNpb246IHRoZSBJQ01QIHBhY2tldCBnZW5lcmF0ZWQgYnkgdGhlXFxuK1xcdCAqIGtmdW5jIHdpbGwgcmUtdHJpZ2dlciB0aGlzIHByb2dyYW0gc2luY2Ugd2UgYXJlIGluIHRoZSByb290IGNncm91cCBpblxcbitcXHQgKiB3aGljaCB0aGUga2VybmVsIElDTVAgc29ja2V0IGJlbG9uZ3MuIEhvd2V2ZXIgd2hlbiByZS1lbnRlcmluZyB0aGVcXG4rXFx0ICoga2Z1bmMsIGl0IHNob3VsZCByZXR1cm4gRUJVU1kuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSBicGZfaWNtcF9zZW5kKHNrYiwgdW5yZWFjaF90eXBlLCB1bnJlYWNoX2NvZGUpO1xcbitcXHRyZWNfa2Z1bmNfcmV0c1tyZWNfY291bnQgXFx1MDAyNiAxXSA9IHJldDtcXG4rXFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNnJlY19jb3VudCwgMSk7XFxuK1xcbitcXHQvKiBMZXQgdGhlIGZpcnN0IElDTVAgZXJyb3IgbWVzc2FnZSBwYXNzICovXFxuK1xcdGlmIChpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSUNNUClcXG4rXFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxuK1xcbitcXHRyZXR1cm4gU0tfRFJPUDtcXG4rfVxcbitcXG4rY2hhciBMSUNFTlNFW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiRHVhbCBCU0QvR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTI6MjY6NTEuMzE3OTkxMDk4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQ5MTg4NTQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pY21wX3NlbmRcIixcbiAgICBcImlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0XCIsXG4gICAgXCJpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2ljbXBfc2VuZGAgdG8gc2VuZCBJQ01QIGNvbnRyb2wgbWVzc2FnZXMgZnJvbSBCUEYgcHJvZ3JhbXMsIGFuZCByZWZhY3RvcnMgcm91dGluZyBjb2RlIHRvIGV4cG9ydCBgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3RgIGFuZCBgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0YC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJmODRjMWE5ZWNmYjlkZmNmMjM5ZjA2Mzg3YmQ3M2IyZDIwYzI2ZDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAxMjoyNjo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbmluZGV4IDA5ZmZlMGYxM2NlNzUyLi5lYjVhNjBkM2JhYmUyYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTEwMCw2ICsxMDAsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkc3RfZW50cnkgKmlwNl9yb3V0ZV9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIGlwNl9yb3V0ZV9vdXRwdXRfZmxhZ3MobmV0LCBzaywgZmw2LCAwKTtcbiB9XG4gXG4raW50IGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitcbiAvKiBPbmx5IGNvbmRpdGlvbmFsbHkgcmVsZWFzZSBkc3QgaWYgZmxhZ3MgaW5kaWNhdGVzXG4gICogIVJUNl9MT09LVVBfRl9EU1RfTk9SRUYgb3IgZHN0IGlzIGluIHVuY2FjaGVkX2xpc3QuXG4gICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcm91dGUuaCBiL2luY2x1ZGUvbmV0L3JvdXRlLmhcbmluZGV4IGY5MDEwNmYzODNjNTZkLi4zMDBkMjkyY2Q5YTFmMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3JvdXRlLmhcbisrKyBiL2luY2x1ZGUvbmV0L3JvdXRlLmhcbkBAIC0xNzMsNiArMTczLDcgQEAgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2Zsb3coc3RydWN0IG5ldCAqLCBzdHJ1Y3QgZmxvd2k0ICpmbHAsXG4gXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbiBzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2JsYWNraG9sZV9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGRzdF9lbnRyeSAqZHN0X29yaWcpO1xuK2ludCBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9rZXkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbHApXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDJlOTZiNGI4NDdjZTEyLi5mYzY5YTE0NjUwZTQyOSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTg0LDYgKzg0LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91bi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hkcF9zb2NrX2Rydi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfZHNjcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcHY2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaWNtcC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJkZXYuaFwiXG4gXG5AQCAtMTI1NDYsNiArMTI1NDgsMTAxIEBAIF9fYnBmX2tmdW5jIGludCBicGZfeGRwX3B1bGxfZGF0YShzdHJ1Y3QgeGRwX21kICp4LCB1MzIgbGVuKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIGJwZl9pY21wX3NlbmQgLSBTZW5kIGFuIElDTVAgY29udHJvbCBtZXNzYWdlXG4rICogQHNrYl9jdHg6IFBhY2tldCB0aGF0IHRyaWdnZXJlZCB0aGUgY29udHJvbCBtZXNzYWdlXG4rICogQHR5cGU6IElDTVAgdHlwZSAob25seSBJQ01QX0RFU1RfVU5SRUFDSC9JQ01QVjZfREVTVF9VTlJFQUNIIHN1cHBvcnRlZClcbisgKiBAY29kZTogSUNNUCBjb2RlICgwLTE1IGZvciBJUHY0LCAwLTYgZm9yIElQdjYpXG4rICpcbisgKiBTZW5kcyBhbiBJQ01QIGNvbnRyb2wgbWVzc2FnZSBpbiByZXNwb25zZSB0byB0aGUgcGFja2V0LiBUaGUgb3JpZ2luYWwgcGFja2V0XG4rICogaXMgY2xvbmVkIGJlZm9yZSBzZW5kaW5nIHRoZSBJQ01QIG1lc3NhZ2UsIHNvIHRoZSBCUEYgcHJvZ3JhbSBjYW4gc3RpbGwgbGV0XG4rICogdGhlIHBhY2tldCBwYXNzIGlmIGRlc2lyZWQuXG4rICpcbisgKiBDdXJyZW50bHkgb25seSBJQ01QX0RFU1RfVU5SRUFDSCAoSVB2NCkgYW5kIElDTVBWNl9ERVNUX1VOUkVBQ0ggKElQdjYpIGFyZVxuKyAqIHN1cHBvcnRlZC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmU6XG4rICogICAgICAgICAtRUlOVkFMOiBJbnZhbGlkIGNvZGUgcGFyYW1ldGVyXG4rICogICAgICAgICAtRUJBRE1TRzogUGFja2V0IHRvbyBzaG9ydCBvciBtYWxmb3JtZWRcbisgKiAgICAgICAgIC1FTk9NRU06IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuKyAqICAgICAgICAgLUVCVVNZOiBSZWN1cnNpb24gZGV0ZWN0ZWRcbisgKiAgICAgICAgIC1FSE9TVFVOUkVBQ0g6IFJvdXRpbmcgZmFpbGVkXG4rICogICAgICAgICAtRVBST1RPTk9TVVBQT1JUOiBOb24tSVAgcHJvdG9jb2xcbisgKiAgICAgICAgIC1FT1BOT1RTVVBQOiBVbnN1cHBvcnRlZCBJQ01QIHR5cGVcbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2ljbXBfc2VuZChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LCBpbnQgdHlwZSwgaW50IGNvZGUpXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXNrYl9jdHg7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcbitcdHN0cnVjdCBzb2NrICpzaztcbitcbitcdHNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTtcbitcdGlmIChzayBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfa2Vybl9zb2NrIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX0lDTVAgfHwgc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QVjYpKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0c3dpdGNoIChza2ItXHUwMDNlcHJvdG9jb2wpIHtcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbitcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuK1x0XHRpZiAodHlwZSAhPSBJQ01QX0RFU1RfVU5SRUFDSClcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdGlmIChjb2RlIFx1MDAzYyAwIHx8IGNvZGUgXHUwMDNlIE5SX0lDTVBfVU5SRUFDSClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0bnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuK1x0XHRpZiAoIW5za2IpXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRcdGlmICghcHNrYl9uZXR3b3JrX21heV9wdWxsKG5za2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkge1xuK1x0XHRcdGtmcmVlX3NrYihuc2tiKTtcbitcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFza2JfZHN0KG5za2IpIFx1MDAyNlx1MDAyNiBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChuc2tiKSBcdTAwM2MgMCkge1xuK1x0XHRcdGtmcmVlX3NrYihuc2tiKTtcbitcdFx0XHRyZXR1cm4gLUVIT1NUVU5SRUFDSDtcbitcdFx0fVxuK1xuK1x0XHRtZW1zZXQoSVBDQihuc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0X3NrYl9wYXJtKSk7XG4rXG4rXHRcdGljbXBfc2VuZChuc2tiLCB0eXBlLCBjb2RlLCAwKTtcbitcdFx0Y29uc3VtZV9za2IobnNrYik7XG4rXHRcdGJyZWFrO1xuKyNlbmRpZlxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuK1x0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbitcdFx0aWYgKHR5cGUgIT0gSUNNUFY2X0RFU1RfVU5SRUFDSClcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdGlmIChjb2RlIFx1MDAzYyAwIHx8IGNvZGUgXHUwMDNlIElDTVBWNl9SRUpFQ1RfUk9VVEUpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbitcdFx0aWYgKCFuc2tiKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0XHRpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChuc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuK1x0XHRcdGtmcmVlX3NrYihuc2tiKTtcbitcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFza2JfZHN0KG5za2IpIFx1MDAyNlx1MDAyNiBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3QobnNrYikgXHUwMDNjIDApIHtcbitcdFx0XHRrZnJlZV9za2IobnNrYik7XG4rXHRcdFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XG4rXHRcdH1cbitcbitcdFx0bWVtc2V0KElQNkNCKG5za2IpLCAwLCBzaXplb2Yoc3RydWN0IGluZXQ2X3NrYl9wYXJtKSk7XG4rXG4rXHRcdGljbXB2Nl9zZW5kKG5za2IsIHR5cGUsIGNvZGUsIDApO1xuK1x0XHRjb25zdW1lX3NrYihuc2tiKTtcbitcdFx0YnJlYWs7XG4rI2VuZGlmXG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuIFxuIGludCBicGZfZHlucHRyX2Zyb21fc2tiX3Jkb25seShzdHJ1Y3QgX19za19idWZmICpza2IsIHU2NCBmbGFncyxcbkBAIC0xMjU4OCw2ICsxMjY4NSwxMCBAQCBCVEZfS0ZVTkNTX1NUQVJUKGJwZl9rZnVuY19jaGVja19zZXRfc29ja19vcHMpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX29wc19lbmFibGVfdHhfdHN0YW1wKVxuIEJURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfc29ja19vcHMpXG4gXG4rQlRGX0tGVU5DU19TVEFSVChicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2ljbXBfc2VuZClcbitCVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZClcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9za2IgPSB7XG4gXHQub3duZXIgPSBUSElTX01PRFVMRSxcbiBcdC5zZXQgPSBcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X3NrYixcbkBAIC0xMjYxOCw2ICsxMjcxOSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9zb2NrX29wcyA9IHtcbiBcdC5zZXQgPSBcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzLFxuIH07XG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfaWNtcF9zZW5kID0ge1xuK1x0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4rXHQuc2V0ID0gXHUwMDI2YnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQsXG4rfTtcbitcbiBzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxuIHtcbiBcdGludCByZXQ7XG5AQCAtMTI2MzksNiArMTI3NDUsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxuIFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxuIFx0XHRcdFx0XHQgICAgICAgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpO1xuIFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTtcbitcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiwgXHUwMDI2YnBmX2tmdW5jX3NldF9pY21wX3NlbmQpO1xuK1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcbitcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCBcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XG4gXHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TT0NLX09QUywgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX29wcyk7XG4gfVxuIGxhdGVfaW5pdGNhbGwoYnBmX2tmdW5jX2luaXQpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmNcbmluZGV4IGZlY2Y2NjIxZjY3OWY5Li5jMWMwNzI0ZTRkNGRkNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuY1xuQEAgLTI1MiwyMSArMjUyLDYgQEAgc3RhdGljIHZvaWQgbmZfcmVqZWN0X2lwX3RjcGhkcl9wdXQoc3RydWN0IHNrX2J1ZmYgKm5za2IsIGNvbnN0IHN0cnVjdCBza19idWZmICpcbiBcdG5za2ItXHUwMDNlY3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxuLXtcbi1cdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7XG4tXHRzdHJ1Y3QgZmxvd2kgZmw7XG4tXG4tXHRtZW1zZXQoXHUwMDI2ZmwsIDAsIHNpemVvZihzdHJ1Y3QgZmxvd2kpKTtcbi1cdGZsLnUuaXA0LmRhZGRyID0gaXBfaGRyKHNrYl9pbiktXHUwMDNlc2FkZHI7XG4tXHRuZl9pcF9yb3V0ZShkZXZfbmV0KHNrYl9pbi1cdTAwM2VkZXYpLCBcdTAwMjZkc3QsIFx1MDAyNmZsLCBmYWxzZSk7XG4tXHRpZiAoIWRzdClcbi1cdFx0cmV0dXJuIC0xO1xuLVxuLVx0c2tiX2RzdF9zZXQoc2tiX2luLCBkc3QpO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qIFNlbmQgUlNUIHJlcGx5ICovXG4gdm9pZCBuZl9zZW5kX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxuIFx0XHQgICBpbnQgaG9vaylcbkBAIC0yNzksNyArMjY0LDcgQEAgdm9pZCBuZl9zZW5kX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxuIFx0aWYgKCFvdGgpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghc2tiX2RzdChvbGRza2IpIFx1MDAyNlx1MDAyNiBuZl9yZWplY3RfZmlsbF9za2JfZHN0KG9sZHNrYikgXHUwMDNjIDApXG4rXHRpZiAoIXNrYl9kc3Qob2xkc2tiKSBcdTAwMjZcdTAwMjYgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qob2xkc2tiKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHNrYl9ydGFibGUob2xkc2tiKS1cdTAwM2VydF9mbGFncyBcdTAwMjYgKFJUQ0ZfQlJPQURDQVNUIHwgUlRDRl9NVUxUSUNBU1QpKVxuQEAgLTM1Miw3ICszMzcsNyBAQCB2b2lkIG5mX3NlbmRfdW5yZWFjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgY29kZSwgaW50IGhvb2spXG4gXHRpZiAoaXBoLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIXNrYl9kc3Qoc2tiX2luKSBcdTAwMjZcdTAwMjYgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChza2JfaW4pIFx1MDAzYyAwKVxuK1x0aWYgKCFza2JfZHN0KHNrYl9pbikgXHUwMDI2XHUwMDI2IGlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0KHNrYl9pbikgXHUwMDNjIDApXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChza2JfY3N1bV91bm5lY2Vzc2FyeShza2JfaW4pIHx8XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmNcbmluZGV4IDNmM2RlNTE2NGQ2ZTU4Li5mMjQ2MDk5MzNmYmVjYiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3JvdXRlLmNcbisrKyBiL25ldC9pcHY0L3JvdXRlLmNcbkBAIC0yOTQyLDYgKzI5NDIsMjEgQEAgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2Zsb3coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbHA0LFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpcF9yb3V0ZV9vdXRwdXRfZmxvdyk7XG4gXG4raW50IGlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0KHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IHJ0YWJsZSAqcnQ7XG4rXHRzdHJ1Y3QgZmxvd2k0IGZsNCA9IHtcbitcdFx0LmRhZGRyID0gaXBfaGRyKHNrYiktXHUwMDNlc2FkZHJcbitcdH07XG4rXG4rXHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkoZGV2X25ldChza2ItXHUwMDNlZGV2KSwgXHUwMDI2Zmw0KTtcbitcdGlmIChJU19FUlIocnQpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihydCk7XG4rXHRza2JfZHN0X3NldChza2IsIFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoaXBfcm91dGVfcmVwbHlfZmlsbF9kc3QpO1xuK1xuIC8qIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgaGVsZCAqL1xuIHN0YXRpYyBpbnQgcnRfZmlsbF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGRzdCwgX19iZTMyIHNyYyxcbiBcdFx0XHRzdHJ1Y3QgcnRhYmxlICpydCwgdTMyIHRhYmxlX2lkLCBkc2NwX3QgZHNjcCxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jXG5pbmRleCBlZjViN2U4NWNmZmE4YS4uN2QyZjU3N2U3MmI4ODIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuY1xuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmNcbkBAIC0yOTMsMjEgKzI5Myw2IEBAIG5mX3JlamVjdF9pcDZfdGNwaGRyX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqbnNrYixcbiBcdFx0XHRcdFx0XHQgICBzaXplb2Yoc3RydWN0IHRjcGhkciksIDApKTtcbiB9XG4gXG4tc3RhdGljIGludCBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxuLXtcbi1cdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7XG4tXHRzdHJ1Y3QgZmxvd2kgZmw7XG4tXG4tXHRtZW1zZXQoXHUwMDI2ZmwsIDAsIHNpemVvZihzdHJ1Y3QgZmxvd2kpKTtcbi1cdGZsLnUuaXA2LmRhZGRyID0gaXB2Nl9oZHIoc2tiX2luKS1cdTAwM2VzYWRkcjtcbi1cdG5mX2lwNl9yb3V0ZShkZXZfbmV0KHNrYl9pbi1cdTAwM2VkZXYpLCBcdTAwMjZkc3QsIFx1MDAyNmZsLCBmYWxzZSk7XG4tXHRpZiAoIWRzdClcbi1cdFx0cmV0dXJuIC0xO1xuLVxuLVx0c2tiX2RzdF9zZXQoc2tiX2luLCBkc3QpO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHZvaWQgbmZfc2VuZF9yZXNldDYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvbGRza2IsXG4gXHRcdCAgICBpbnQgaG9vaylcbiB7XG5AQCAtNDQwLDcgKzQyNSw3IEBAIHZvaWQgbmZfc2VuZF91bnJlYWNoNihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2JfaW4sXG4gXHRpZiAoaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX09VVCBcdTAwMjZcdTAwMjYgc2tiX2luLVx1MDAzZWRldiA9PSBOVUxMKVxuIFx0XHRza2JfaW4tXHUwMDNlZGV2ID0gbmV0LVx1MDAzZWxvb3BiYWNrX2RldjtcbiBcbi1cdGlmICghc2tiX2RzdChza2JfaW4pIFx1MDAyNlx1MDAyNiBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChza2JfaW4pIFx1MDAzYyAwKVxuK1x0aWYgKCFza2JfZHN0KHNrYl9pbikgXHUwMDI2XHUwMDI2IGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdChza2JfaW4pIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpY21wdjZfc2VuZChza2JfaW4sIElDTVBWNl9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCA2MzYxYWQyZmNmNzcxNS4uMGZhNTZjODAxMTc4MTYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5AQCAtMjczMiw2ICsyNzMyLDI0IEBAIHN0cnVjdCBkc3RfZW50cnkgKmlwNl9yb3V0ZV9vdXRwdXRfZmxhZ3Moc3RydWN0IG5ldCAqbmV0LFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpcDZfcm91dGVfb3V0cHV0X2ZsYWdzKTtcbiBcbitpbnQgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0KHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGRzdF9lbnRyeSAqcmVzdWx0O1xuK1x0c3RydWN0IGZsb3dpNiBmbCA9IHtcbitcdFx0LmRhZGRyID0gaXB2Nl9oZHIoc2tiKS1cdTAwM2VzYWRkclxuK1x0fTtcbitcdGludCBlcnI7XG4rXG4rXHRyZXN1bHQgPSBpcDZfcm91dGVfb3V0cHV0KGRldl9uZXQoc2tiLVx1MDAzZWRldiksIE5VTEwsIFx1MDAyNmZsKTtcbitcdGVyciA9IHJlc3VsdC1cdTAwM2VlcnJvcjtcbitcdGlmIChlcnIpXG4rXHRcdGRzdF9yZWxlYXNlKHJlc3VsdCk7XG4rXHRlbHNlXG4rXHRcdHNrYl9kc3Rfc2V0KHNrYiwgcmVzdWx0KTtcbitcdHJldHVybiBlcnI7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdCk7XG4rXG4gc3RydWN0IGRzdF9lbnRyeSAqaXA2X2JsYWNraG9sZV9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdF9vcmlnKVxuIHtcbiBcdHN0cnVjdCBydDZfaW5mbyAqcnQsICpvcnQgPSBkc3RfcnQ2X2luZm8oZHN0X29yaWcpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ljbXBfc2VuZF9rZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaWNtcF9zZW5kX2tmdW5jLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZmQ0YjhmYTc4YTAxODRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ljbXBfc2VuZF9rZnVuYy5jXG5AQCAtMCwwICsxLDI1MCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0d29ya19oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NjZ3JvdXBfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXJycXVldWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3BvbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJpY21wX3NlbmQuc2tlbC5oXCJcbitcbisjZGVmaW5lIFRJTUVPVVRfTVMgMTAwMFxuK1xuKyNkZWZpbmUgSUNNUF9ERVNUX1VOUkVBQ0ggM1xuKyNkZWZpbmUgSUNNUFY2X0RFU1RfVU5SRUFDSCAxXG4rXG4rI2RlZmluZSBJQ01QX0hPU1RfVU5SRUFDSCAxXG4rI2RlZmluZSBJQ01QX0ZSQUdfTkVFREVEIDRcbisjZGVmaW5lIE5SX0lDTVBfVU5SRUFDSCAxNVxuKyNkZWZpbmUgSUNNUFY2X1JFSkVDVF9ST1VURSA2XG4rXG4rc3RhdGljIGludCBjb25uZWN0X3RvX2ZkX25vbmJsb2NrKGludCBzZXJ2ZXJfZmQpXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcjtcbitcdHNvY2tsZW5fdCBsZW4gPSBzaXplb2YoYWRkcik7XG4rXHRpbnQgZmQsIGVyciwgb24gPSAxO1xuK1xuK1x0aWYgKGdldHNvY2tuYW1lKHNlcnZlcl9mZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIFx1MDAyNmxlbikpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGZkID0gc29ja2V0KGFkZHIuc3NfZmFtaWx5LCBTT0NLX1NUUkVBTSB8IFNPQ0tfTk9OQkxPQ0ssIDApO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRpZiAoYWRkci5zc19mYW1pbHkgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUFY2LCBJUFY2X1JFQ1ZFUlIsIFx1MDAyNm9uLCBzaXplb2Yob24pKSBcdTAwM2MgMCkge1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcbitcdGVyciA9IGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhZGRyLCBsZW4pO1xuK1x0aWYgKGVyciBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gIT0gRUlOUFJPR1JFU1MpIHtcbitcdFx0Y2xvc2UoZmQpO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJlYWRfaWNtcF9lcnJxdWV1ZShpbnQgc29ja2ZkLCBpbnQgZXhwZWN0ZWRfY29kZSwgaW50IGFmKVxuK3tcbitcdGludCBleHBlY3RlZF9lZV90eXBlID0gKGFmID09IEFGX0lORVQpID8gSUNNUF9ERVNUX1VOUkVBQ0ggOlxuK1x0XHRcdFx0XHRcdCBJQ01QVjZfREVTVF9VTlJFQUNIO1xuK1x0aW50IGV4cGVjdGVkX29yaWdpbiA9IChhZiA9PSBBRl9JTkVUKSA/IFNPX0VFX09SSUdJTl9JQ01QIDpcbitcdFx0XHRcdFx0XHRTT19FRV9PUklHSU5fSUNNUDY7XG4rXHRpbnQgZXhwZWN0ZWRfbGV2ZWwgPSAoYWYgPT0gQUZfSU5FVCkgPyBJUFBST1RPX0lQIDogSVBQUk9UT19JUFY2O1xuK1x0aW50IGV4cGVjdGVkX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJUF9SRUNWRVJSIDogSVBWNl9SRUNWRVJSO1xuK1x0c3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICpzb2NrX2VycjtcbitcdGNoYXIgY3RybF9idWZbNTEyXTtcbitcdHN0cnVjdCBtc2doZHIgbXNnID0ge1xuK1x0XHQubXNnX2NvbnRyb2wgPSBjdHJsX2J1ZixcbitcdFx0Lm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGN0cmxfYnVmKSxcbitcdH07XG4rXHRzdHJ1Y3QgcG9sbGZkIHBmZCA9IHtcbitcdFx0LmZkID0gc29ja2ZkLFxuK1x0XHQuZXZlbnRzID0gUE9MTEVSUixcbitcdH07XG4rXHRzdHJ1Y3QgY21zZ2hkciAqY207XG4rXHRzc2l6ZV90IG47XG4rXG4rXHRpZiAoIUFTU0VSVF9HRShwb2xsKFx1MDAyNnBmZCwgMSwgVElNRU9VVF9NUyksIDEsIFwicG9sbF9lcnJxdWV1ZVwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0biA9IHJlY3Ztc2coc29ja2ZkLCBcdTAwMjZtc2csIE1TR19FUlJRVUVVRSk7XG4rXHRpZiAoIUFTU0VSVF9HRShuLCAwLCBcInJlY3Ztc2dfZXJycXVldWVcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGNtID0gQ01TR19GSVJTVEhEUihcdTAwMjZtc2cpO1xuK1x0aWYgKCFBU1NFUlRfTkVRKGNtLCBOVUxMLCBcImNtX2ZpcnN0aGRyX251bGxcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoOyBjbTsgY20gPSBDTVNHX05YVEhEUihcdTAwMjZtc2csIGNtKSkge1xuK1x0XHRpZiAoY20tXHUwMDNlY21zZ19sZXZlbCAhPSBleHBlY3RlZF9sZXZlbCB8fFxuK1x0XHQgICAgY20tXHUwMDNlY21zZ190eXBlICE9IGV4cGVjdGVkX3R5cGUpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHNvY2tfZXJyID0gKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqKUNNU0dfREFUQShjbSk7XG4rXG4rXHRcdGlmICghQVNTRVJUX0VRKHNvY2tfZXJyLVx1MDAzZWVlX29yaWdpbiwgZXhwZWN0ZWRfb3JpZ2luLFxuK1x0XHRcdCAgICAgICBcInNvY2tfZXJyX29yaWdpblwiKSlcbitcdFx0XHRyZXR1cm47XG4rXHRcdGlmICghQVNTRVJUX0VRKHNvY2tfZXJyLVx1MDAzZWVlX3R5cGUsIGV4cGVjdGVkX2VlX3R5cGUsXG4rXHRcdFx0ICAgICAgIFwic29ja19lcnJfdHlwZV9kZXN0X3VucmVhY2hcIikpXG4rXHRcdFx0cmV0dXJuO1xuK1x0XHRBU1NFUlRfRVEoc29ja19lcnItXHUwMDNlZWVfY29kZSwgZXhwZWN0ZWRfY29kZSwgXCJzb2NrX2Vycl9jb2RlXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRBU1NFUlRfRkFJTChcIm5vIElQX1JFQ1ZFUlIvSVBWNl9SRUNWRVJSIGNvbnRyb2wgbWVzc2FnZSBmb3VuZFwiKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShzdHJ1Y3QgaWNtcF9zZW5kICpza2VsLCBpbnQgY29kZSxcbitcdFx0XHRcdFx0ICAgIGludCBhZiwgY29uc3QgY2hhciAqaXApXG4re1xuK1x0aW50IHNydl9mZCA9IC0xLCBjbGllbnRfZmQgPSAtMTtcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyO1xuK1x0c29ja2xlbl90IGxlbiA9IHNpemVvZihhZGRyKTtcbitcbitcdHNydl9mZCA9IHN0YXJ0X3NlcnZlcihhZiwgU09DS19TVFJFQU0sIGlwLCAwLCBUSU1FT1VUX01TKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKHNydl9mZCwgXCJzdGFydF9zZXJ2ZXJcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChnZXRzb2NrbmFtZShzcnZfZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhZGRyLCBcdTAwMjZsZW4pKSB7XG4rXHRcdGNsb3NlKHNydl9mZCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNlcnZlcl9wb3J0ID0gbnRvaHMoYWRkci5zaW5fcG9ydCk7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V1bnJlYWNoX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJQ01QX0RFU1RfVU5SRUFDSCA6XG4rXHRcdFx0XHRcdFx0ICAgIElDTVBWNl9ERVNUX1VOUkVBQ0g7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V1bnJlYWNoX2NvZGUgPSBjb2RlO1xuK1xuK1x0Y2xpZW50X2ZkID0gY29ubmVjdF90b19mZF9ub25ibG9jayhzcnZfZmQpO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoY2xpZW50X2ZkLCBcImNsaWVudF9jb25uZWN0X25vbmJsb2NrXCIpKSB7XG4rXHRcdGNsb3NlKHNydl9mZCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIFNraXAgcmVhZGluZyBJQ01QIGVycm9yIHF1ZXVlIGlmIGNvZGUgaXMgaW52YWxpZCAqL1xuK1x0aWYgKGNvZGUgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiAoKGFmID09IEFGX0lORVQgXHUwMDI2XHUwMDI2IGNvZGUgXHUwMDNjPSBOUl9JQ01QX1VOUkVBQ0gpIHx8XG4rXHRcdFx0ICAoYWYgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2IGNvZGUgXHUwMDNjPSBJQ01QVjZfUkVKRUNUX1JPVVRFKSkpXG4rXHRcdHJlYWRfaWNtcF9lcnJxdWV1ZShjbGllbnRfZmQsIGNvZGUsIGFmKTtcbitcbitcdGNsb3NlKGNsaWVudF9mZCk7XG4rXHRjbG9zZShzcnZfZmQpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydW5faWNtcF90ZXN0KHN0cnVjdCBpY21wX3NlbmQgKnNrZWwsIGludCBhZiwgY29uc3QgY2hhciAqaXAsXG4rXHRcdFx0ICBpbnQgbWF4X2NvZGUpXG4re1xuK1x0Zm9yIChpbnQgY29kZSA9IDA7IGNvZGUgXHUwMDNjPSBtYXhfY29kZTsgY29kZSsrKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBUQ1Agc3RhY2sgcmVhY3RzIGRpZmZlcmVudGx5IHdoZW4gYXNraW5nIGZvclxuK1x0XHQgKiBmcmFnbWVudGF0aW9uLCBsZXQncyBpZ25vcmUgaXQgZm9yIG5vdy5cbitcdFx0ICovXG4rXHRcdGlmIChhZiA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBjb2RlID09IElDTVBfRlJBR19ORUVERUQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgY29kZSwgYWYsIGlwKTtcbitcdFx0QVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VrZnVuY19yZXQsIDAsIFwia2Z1bmNfcmV0XCIpO1xuK1x0fVxuK1xuK1x0LyogVGVzdCBhbiBpbnZhbGlkIGNvZGUgKi9cbitcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgLTEsIGFmLCBpcCk7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCwgLUVJTlZBTCwgXCJrZnVuY19yZXRcIik7XG4rfVxuK1xuK3ZvaWQgdGVzdF9pY21wX3NlbmRfdW5yZWFjaF9jZ3JvdXAodm9pZClcbit7XG4rXHRzdHJ1Y3QgaWNtcF9zZW5kICpza2VsO1xuK1x0aW50IGNncm91cF9mZCA9IC0xO1xuK1xuK1x0c2tlbCA9IGljbXBfc2VuZF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRjZ3JvdXBfZmQgPSB0ZXN0X19qb2luX2Nncm91cChcIi9pY21wX3NlbmRfdW5yZWFjaF9jZ3JvdXBcIik7XG4rXHRpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsIFwiam9pbl9jZ3JvdXBcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHNrZWwtXHUwMDNlbGlua3MuZWdyZXNzID1cbitcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5lZ3Jlc3MsIGNncm91cF9mZCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cdTAwM2VsaW5rcy5lZ3Jlc3MsIFwicHJvZ19hdHRhY2hfY2dyb3VwXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImlwdjRcIikpXG4rXHRcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVCwgXCIxMjcuMC4wLjFcIiwgTlJfSUNNUF9VTlJFQUNIKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiaXB2NlwiKSlcbitcdFx0cnVuX2ljbXBfdGVzdChza2VsLCBBRl9JTkVUNiwgXCI6OjFcIiwgSUNNUFY2X1JFSkVDVF9ST1VURSk7XG4rXG4rY2xlYW51cDpcbitcdGljbXBfc2VuZF9fZGVzdHJveShza2VsKTtcbitcdGlmIChjZ3JvdXBfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShjZ3JvdXBfZmQpO1xuK31cbitcbit2b2lkIHRlc3RfaWNtcF9zZW5kX3VucmVhY2hfdGModm9pZClcbit7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGN4X29wdHMsIG9wdHMpO1xuK1x0c3RydWN0IGljbXBfc2VuZCAqc2tlbDtcbitcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XG4rXG4rXHRza2VsID0gaWNtcF9zZW5kX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsX29wZW5cIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3RjeChza2VsLVx1MDAzZXByb2dzLnRjX2VncmVzcywgMSwgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCJwcm9nX2F0dGFjaFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJpcHY0XCIpKVxuK1x0XHRydW5faWNtcF90ZXN0KHNrZWwsIEFGX0lORVQsIFwiMTI3LjAuMC4xXCIsIE5SX0lDTVBfVU5SRUFDSCk7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImlwdjZcIikpXG4rXHRcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVDYsIFwiOjoxXCIsIElDTVBWNl9SRUpFQ1RfUk9VVEUpO1xuK1xuK2NsZWFudXA6XG4rXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcbitcdGljbXBfc2VuZF9fZGVzdHJveShza2VsKTtcbit9XG4rXG4rdm9pZCB0ZXN0X2ljbXBfc2VuZF91bnJlYWNoX3JlY3Vyc2lvbih2b2lkKVxuK3tcbitcdHN0cnVjdCBpY21wX3NlbmQgKnNrZWw7XG4rXHRpbnQgY2dyb3VwX2ZkID0gLTE7XG4rXG4rXHRza2VsID0gaWNtcF9zZW5kX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsX29wZW5cIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmIChzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKSkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJGYWlsZWQgdG8gc2V0dXAgY2dyb3VwIGVudmlyb25tZW50XFxuXCIpO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRjZ3JvdXBfZmQgPSBnZXRfcm9vdF9jZ3JvdXAoKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKGNncm91cF9mZCwgXCJnZXRfcm9vdF9jZ3JvdXBcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHNrZWwtXHUwMDNlZGF0YS1cdTAwM2V0YXJnZXRfcGlkID0gZ2V0cGlkKCk7XG4rXHRza2VsLVx1MDAzZWxpbmtzLnJlY3Vyc2lvbiA9XG4rXHRcdGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtXHUwMDNlcHJvZ3MucmVjdXJzaW9uLCBjZ3JvdXBfZmQpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3MucmVjdXJzaW9uLCBcInByb2dfYXR0YWNoX2Nncm91cFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0dHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCBJQ01QX0hPU1RfVU5SRUFDSCwgQUZfSU5FVCxcbitcdFx0XHRcdFx0XCIxMjcuMC4wLjFcIik7XG4rXG4rXHQvKlxuK1x0ICogQmVjYXVzZSB0aGVyZSdzIHJlY3Vyc2lvbiBpbnZvbHZlZCwgdGhlIGZpcnN0IGNhbGwgd2lsbCByZXR1cm4gYXRcbitcdCAqIGluZGV4IDEgc2luY2UgaXQgd2lsbCByZXR1cm4gdGhlIHNlY29uZCwgYW5kIHRoZSBzZWNvbmQgY2FsbCB3aWxsXG4rXHQgKiByZXR1cm4gYXQgaW5kZXggMCBzaW5jZSBpdCB3aWxsIHJldHVybiB0aGUgZmlyc3QuXG4rXHQgKi9cbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNlcmVjX2tmdW5jX3JldHNbMF0sIC1FQlVTWSwgXCJrZnVuY19yZXRzWzBdXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VyZWNfa2Z1bmNfcmV0c1sxXSwgMCwgXCJrZnVuY19yZXRzWzFdXCIpO1xuK1xuK2NsZWFudXA6XG4rXHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuK1x0aWNtcF9zZW5kX19kZXN0cm95KHNrZWwpO1xuK1x0aWYgKGNncm91cF9mZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGNncm91cF9mZCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mZDljNzY4NDc5N2IwN1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ljbXBfc2VuZC5jXG5AQCAtMCwwICsxLDE4NCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuK1xuKy8qIDEyNy4wLjAuMSBpbiBob3N0IGJ5dGUgb3JkZXIgKi9cbisjZGVmaW5lIFNFUlZFUl9JUCAweDdGMDAwMDAxXG4rLyogOjoxIGluIGhvc3QgYnl0ZSBvcmRlciAobGFzdCAzMi1iaXQgd29yZCkgKi9cbisjZGVmaW5lIFNFUlZFUl9JUDZfTE8gMHgwMDAwMDAwMVxuK1xuK19fdTE2IHNlcnZlcl9wb3J0ID0gMDtcbitpbnQgdW5yZWFjaF90eXBlID0gMDtcbitpbnQgdW5yZWFjaF9jb2RlID0gMDtcbitpbnQga2Z1bmNfcmV0ID0gLTE7XG4raW50IHRhcmdldF9waWQgPSAtMTtcbitcbit1bnNpZ25lZCBpbnQgcmVjX2NvdW50ID0gMDtcbitpbnQgcmVjX2tmdW5jX3JldHNbXSA9IHsgLTEsIC0xIH07XG4rXG4rU0VDKFwiY2dyb3VwX3NrYi9lZ3Jlc3NcIilcbitpbnQgZWdyZXNzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHR2b2lkICpkYXRhID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YTtcbitcdHZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YV9lbmQ7XG4rXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbitcdHN0cnVjdCBpcHY2aGRyICppcDZoO1xuK1x0c3RydWN0IHRjcGhkciAqdGNwaDtcbitcdF9fdTggdmVyc2lvbjtcbitcbitcdGlmIChkYXRhICsgMSBcdTAwM2UgZGF0YV9lbmQpXG4rXHRcdHJldHVybiBTS19QQVNTO1xuK1xuK1x0dmVyc2lvbiA9ICgqKChfX3U4ICopZGF0YSkpIFx1MDAzZVx1MDAzZSA0O1xuK1xuK1x0aWYgKHZlcnNpb24gPT0gNCkge1xuK1x0XHRpcGggPSBkYXRhO1xuK1x0XHRpZiAoKHZvaWQgKikoaXBoICsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8XG4rXHRcdCAgICBpcGgtXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgfHxcbitcdFx0ICAgIGlwaC1cdTAwM2VkYWRkciAhPSBicGZfaHRvbmwoU0VSVkVSX0lQKSlcbitcdFx0XHRyZXR1cm4gU0tfUEFTUztcbitcbitcdFx0dGNwaCA9ICh2b2lkICopaXBoICsgaXBoLVx1MDAzZWlobCAqIDQ7XG4rXHRcdGlmICgodm9pZCAqKSh0Y3BoICsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8XG4rXHRcdCAgICB0Y3BoLVx1MDAzZWRlc3QgIT0gYnBmX2h0b25zKHNlcnZlcl9wb3J0KSlcbitcdFx0XHRyZXR1cm4gU0tfUEFTUztcbitcbitcdH0gZWxzZSBpZiAodmVyc2lvbiA9PSA2KSB7XG4rXHRcdGlwNmggPSBkYXRhO1xuK1x0XHRpZiAoKHZvaWQgKikoaXA2aCArIDEpIFx1MDAzZSBkYXRhX2VuZCB8fFxuK1x0XHQgICAgaXA2aC1cdTAwM2VuZXh0aGRyICE9IElQUFJPVE9fVENQKVxuK1x0XHRcdHJldHVybiBTS19QQVNTO1xuK1xuK1x0XHRpZiAoaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMF0gIT0gMCB8fFxuK1x0XHQgICAgaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMV0gIT0gMCB8fFxuK1x0XHQgICAgaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMl0gIT0gMCB8fFxuK1x0XHQgICAgaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbM10gIT0gYnBmX2h0b25sKFNFUlZFUl9JUDZfTE8pKVxuK1x0XHRcdHJldHVybiBTS19QQVNTO1xuK1xuK1x0XHR0Y3BoID0gKHZvaWQgKikoaXA2aCArIDEpO1xuK1x0XHRpZiAoKHZvaWQgKikodGNwaCArIDEpIFx1MDAzZSBkYXRhX2VuZCB8fFxuK1x0XHQgICAgdGNwaC1cdTAwM2VkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpXG4rXHRcdFx0cmV0dXJuIFNLX1BBU1M7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXR1cm4gU0tfUEFTUztcbitcdH1cbitcbitcdGtmdW5jX3JldCA9IGJwZl9pY21wX3NlbmQoc2tiLCB1bnJlYWNoX3R5cGUsIHVucmVhY2hfY29kZSk7XG4rXG4rXHRyZXR1cm4gU0tfRFJPUDtcbit9XG4rXG4rU0VDKFwidGMvZWdyZXNzXCIpXG4raW50IHRjX2VncmVzcyhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLVx1MDAzZWRhdGE7XG4rXHR2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpc2tiLVx1MDAzZWRhdGFfZW5kO1xuK1x0c3RydWN0IGV0aGhkciAqZXRoO1xuK1x0c3RydWN0IGlwaGRyICppcGg7XG4rXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcbitcdHN0cnVjdCB0Y3BoZHIgKnRjcGg7XG4rXG4rXHRldGggPSBkYXRhO1xuK1x0aWYgKCh2b2lkICopKGV0aCArIDEpIFx1MDAzZSBkYXRhX2VuZClcbitcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0aWYgKGV0aC1cdTAwM2VoX3Byb3RvID09IGJwZl9odG9ucyhFVEhfUF9JUCkpIHtcbitcdFx0aXBoID0gKHZvaWQgKikoZXRoICsgMSk7XG4rXHRcdGlmICgodm9pZCAqKShpcGggKyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4rXHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0XHRpZiAoaXBoLVx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fVENQIHx8XG4rXHRcdCAgICBpcGgtXHUwMDNlZGFkZHIgIT0gYnBmX2h0b25sKFNFUlZFUl9JUCkpXG4rXHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0XHR0Y3BoID0gKHZvaWQgKilpcGggKyBpcGgtXHUwMDNlaWhsICogNDtcbitcdFx0aWYgKCh2b2lkICopKHRjcGggKyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4rXHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0XHRpZiAodGNwaC1cdTAwM2VkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpXG4rXHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0fSBlbHNlIGlmIChldGgtXHUwMDNlaF9wcm90byA9PSBicGZfaHRvbnMoRVRIX1BfSVBWNikpIHtcbitcdFx0aXA2aCA9ICh2b2lkICopKGV0aCArIDEpO1xuK1x0XHRpZiAoKHZvaWQgKikoaXA2aCArIDEpIFx1MDAzZSBkYXRhX2VuZClcbitcdFx0XHRyZXR1cm4gVENYX1BBU1M7XG4rXG4rXHRcdGlmIChpcDZoLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19UQ1ApXG4rXHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0XHRpZiAoaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMF0gIT0gMCB8fFxuK1x0XHQgICAgaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMV0gIT0gMCB8fFxuK1x0XHQgICAgaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMl0gIT0gMCB8fFxuK1x0XHQgICAgaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbM10gIT0gYnBmX2h0b25sKFNFUlZFUl9JUDZfTE8pKVxuK1x0XHRcdHJldHVybiBUQ1hfUEFTUztcbitcbitcdFx0dGNwaCA9ICh2b2lkICopKGlwNmggKyAxKTtcbitcdFx0aWYgKCh2b2lkICopKHRjcGggKyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4rXHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0XHRpZiAodGNwaC1cdTAwM2VkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpXG4rXHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1x0fVxuK1xuK1x0a2Z1bmNfcmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTtcbitcbitcdHJldHVybiBUQ1hfRFJPUDtcbit9XG4rXG4rU0VDKFwiY2dyb3VwX3NrYi9lZ3Jlc3NcIilcbitpbnQgcmVjdXJzaW9uKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHR2b2lkICpkYXRhID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YTtcbitcdHZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YV9lbmQ7XG4rXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGg7XG4rXHRzdHJ1Y3QgdGNwaGRyICp0Y3BoO1xuK1x0c3RydWN0IGlwaGRyICppcGg7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKChicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzIpICE9IHRhcmdldF9waWQpXG4rXHRcdHJldHVybiBTS19QQVNTO1xuK1xuK1x0aXBoID0gZGF0YTtcbitcdGlmICgodm9pZCAqKShpcGggKyAxKSBcdTAwM2UgZGF0YV9lbmQgfHwgaXBoLVx1MDAzZXZlcnNpb24gIT0gNClcbitcdFx0cmV0dXJuIFNLX1BBU1M7XG4rXG4rXHRpZiAoaXBoLVx1MDAzZWRhZGRyICE9IGJwZl9odG9ubChTRVJWRVJfSVApKVxuK1x0XHRyZXR1cm4gU0tfUEFTUztcbitcbitcdGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcbitcdFx0dGNwaCA9ICh2b2lkICopaXBoICsgaXBoLVx1MDAzZWlobCAqIDQ7XG4rXHRcdGlmICgodm9pZCAqKSh0Y3BoICsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8XG4rXHRcdCAgICB0Y3BoLVx1MDAzZWRlc3QgIT0gYnBmX2h0b25zKHNlcnZlcl9wb3J0KSlcbitcdFx0XHRyZXR1cm4gU0tfUEFTUztcbitcdH0gZWxzZSBpZiAoaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSUNNUCkge1xuK1x0XHRpY21waCA9ICh2b2lkICopaXBoICsgaXBoLVx1MDAzZWlobCAqIDQ7XG4rXHRcdGlmICgodm9pZCAqKShpY21waCArIDEpIFx1MDAzZSBkYXRhX2VuZCB8fFxuK1x0XHQgICAgaWNtcGgtXHUwMDNldHlwZSAhPSB1bnJlYWNoX3R5cGUgfHxcbitcdFx0ICAgIGljbXBoLVx1MDAzZWNvZGUgIT0gdW5yZWFjaF9jb2RlKVxuK1x0XHRcdHJldHVybiBTS19QQVNTO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0dXJuIFNLX1BBU1M7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogVGhpcyBjYWxsIHdpbGwgcHJvdm9rZSBhIHJlY3Vyc2lvbjogdGhlIElDTVAgcGFja2V0IGdlbmVyYXRlZCBieSB0aGVcbitcdCAqIGtmdW5jIHdpbGwgcmUtdHJpZ2dlciB0aGlzIHByb2dyYW0gc2luY2Ugd2UgYXJlIGluIHRoZSByb290IGNncm91cCBpblxuK1x0ICogd2hpY2ggdGhlIGtlcm5lbCBJQ01QIHNvY2tldCBiZWxvbmdzLiBIb3dldmVyIHdoZW4gcmUtZW50ZXJpbmcgdGhlXG4rXHQgKiBrZnVuYywgaXQgc2hvdWxkIHJldHVybiBFQlVTWS5cbitcdCAqL1xuK1x0cmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTtcbitcdHJlY19rZnVuY19yZXRzW3JlY19jb3VudCBcdTAwMjYgMV0gPSByZXQ7XG4rXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZyZWNfY291bnQsIDEpO1xuK1xuK1x0LyogTGV0IHRoZSBmaXJzdCBJQ01QIGVycm9yIG1lc3NhZ2UgcGFzcyAqL1xuK1x0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lDTVApXG4rXHRcdHJldHVybiBTS19QQVNTO1xuK1xuK1x0cmV0dXJuIFNLX0RST1A7XG4rfVxuK1xuK2NoYXIgTElDRU5TRVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkR1YWwgQlNEL0dQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTI6MjY6NTEuMzE3OTkyNDY4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMxOTA5ODY2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBCUEYgYGJwZl9pY21wX3NlbmRgIFBhdGNoKipcblxuT2theSwgc28gd2UgaGF2ZSBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIGBicGZfaWNtcF9zZW5kYCBrZnVuYy4gVGhpcyBpcyBpbnRlcmVzdGluZyDigJMgZGlyZWN0IElDTVAgY29udHJvbCBtZXNzYWdlIHRyYW5zbWlzc2lvbiB2aWEgQlBGIGlzIGEgcG90ZW50aWFsbHkgcG93ZXJmdWwgYWRkaXRpb24uIEZyb20gd2hhdCBJIHNlZSwgdGhlIHByaW1hcnkgbW9kaWZpY2F0aW9uIGludm9sdmVzIGBuZXQvY29yZS9maWx0ZXIuY2AsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIHRoZSBrZnVuYyBpcyBiZWluZyBpbnRlZ3JhdGVkIGludG8gdGhlIEJQRiBmcmFtZXdvcmsuIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYG5ldC9pcHY0L3JvdXRlLmNgIGFuZCBgbmV0L2lwdjYvcm91dGUuY2AgdG8gZXhwb3J0IGBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdGAgYW5kIGBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3RgIHJlc3BlY3RpdmVseSwgYW5kIHRoZW4gdXBkYXRlcyBgbmZfcmVqZWN0X2lwdjQuY2AgYW5kIGBuZl9yZWplY3RfaXB2Ni5jYCB0byB1c2UgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucy4gR29vZCBob3VzZWtlZXBpbmcsIHJlbW92aW5nIHRob3NlIHN0YXRpYyBpbXBsZW1lbnRhdGlvbnMgaW4gdGhlIHJlamVjdCBjb2RlLiBBbmQsIG9mIGNvdXJzZSwgdGhlcmUgYXJlIGFjY29tcGFueWluZyBzZWxmLXRlc3RzLiBUaGF0J3MgYSBzb2xpZCBzdGFydC5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgZW5oYW5jZW1lbnQgdG8gQlBGJ3MgY2FwYWJpbGl0aWVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBuZWVkcyB0byBiZSByaWdvcm91c2x5IGZ1enplZC4gVGhlIGF0dGFjayBzdXJmYWNlIGhlcmUgaXMgZGVmaW5pdGVseSBpbmNyZWFzZWQgYW5kIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBrZnVuYyBpcyByb2J1c3QgYW5kIHNlY3VyZS4gSSdsbCBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBgYnBmX2ljbXBfc2VuZGAsIGBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdGAsIGFuZCBgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0YC5cblxuTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSBhc3N1bWluZyBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19JTkVUYCwgYW5kIGBDT05GSUdfSVBWNmAgYXJlIG5lY2Vzc2FyeSwgYnV0IGxldCdzIGJlIHN1cmUuIFRoZSBrZnVuYyBpcyBkZWZpbmVkIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGlzIHJlZ2lzdGVyZWQgZm9yIGBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0JgLCBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgLCBhbmQgYEJQRl9QUk9HX1RZUEVfU0NIRURfQUNUYC4gVGhpcyBtZWFucyB0aGF0IGBDT05GSUdfQ0dST1VQX0JQRmAgaXMgbGlrZWx5IGFub3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4gSSdsbCBzZWFyY2ggZm9yIHRoZSBrZnVuYyB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBjb25maXJtIHRoZSBkZXRhaWxzIGFuZCBlbnN1cmUgdGhhdCBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDgwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTI6MjY6NTguNjM3MDkzMTEyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2OTg5MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pY21wX3NlbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTI0OTA9X19icGZfa2Z1bmMgaW50IGJwZl94ZHBfcHVsbF9kYXRhKHN0cnVjdCB4ZHBfbWQgKngsIHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjU1MS0vKipcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjU1MjogKiBicGZfaWNtcF9zZW5kIC0gU2VuZCBhbiBJQ01QIGNvbnRyb2wgbWVzc2FnZVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTUzLSAqIEBza2JfY3R4OiBQYWNrZXQgdGhhdCB0cmlnZ2VyZWQgdGhlIGNvbnRyb2wgbWVzc2FnZVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NzItICovXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI1NzM6X19icGZfa2Z1bmMgaW50IGJwZl9pY21wX3NlbmQoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgaW50IHR5cGUsIGludCBjb2RlKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTc0LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyNjg4PUJURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQpXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI2ODk6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pY21wX3NlbmQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI2OTAtQlRGX0tGVU5DU19FTkQoYnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDEyOjI2OjU4LjY5NDA5NDAwMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODEwOTU5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBgYnBmX2ljbXBfc2VuZGAgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYGJwZl9pY21wX3NlbmRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSBob3cgaXQncyBpbXBsZW1lbnRlZC4gSSBzZWUgdGhhdCB1bmRlciB0aGUgaG9vZCwgaXQgbGV2ZXJhZ2VzIGBpY21wX3NlbmRgIGFuZCBgaWNtcHY2X3NlbmRgLiBOb3csIEknbSBub3RpbmcgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzOiBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpYCBhbmQgYCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KWAuIFRoYXQncyBpbXBvcnRhbnQ7IHRob3NlIGZsYWdzIGFyZSBkZWZpbml0ZWx5IGtleS4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgZ2F0ZWQgYmVoaW5kIHRoZSBnZW5lcmFsIElQdjQgYW5kIElQdjYgcHJvdG9jb2wgc3VwcG9ydC4gTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBnZXRzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwuIEknbSBnb2luZyB0byBjaGVjayB0aGUgYGJwZl9rZnVuY19pbml0YCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgOyB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgQlBGIGtmdW5jIHJlZ2lzdHJhdGlvbnMgcmVzaWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcxMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDEyOjI3OjAyLjQ3NTE5Mjk2NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODM1NjIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfa2Z1bmNfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMjcyMj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9pY21wX3NlbmQgPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcyNi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjcyNzpzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzI4LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzUyLX1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjc1MzpsYXRlX2luaXRjYWxsKGJwZl9rZnVuY19pbml0KTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTI6Mjc6MDIuNTMzNTU0OTY0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkxMjk0MjU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFbmFibGluZyBCUEYtYmFzZWQgSUNNUCBTZW5kIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUga2VybmVsIGNvbmZpZ3MgbmVlZGVkIHRvIGVuYWJsZSB0aGlzIEJQRi1iYXNlZCBJQ01QIHNlbmQgZnVuY3Rpb25hbGl0eS4gTGV0J3Mgc2VlLi4uIEkgKnRoaW5rKiBgQlBGX1NZU0NBTExgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQsIHNpbmNlIGBicGZfaWNtcF9zZW5kYCBpcyBhIEJQRiBrZnVuYy4gIFBvdGVudGlhbGx5LCBgQ0dST1VQX0JQRmAgbWlnaHQgYmUgbmVlZGVkIHRvby4gQW5kIGZvciBhdHRhY2hpbmcgdGhlIEJQRiBwcm9ncmFtLCBwcm9iYWJseSBgTkVUX1NDSF9JTkdSRVNTYCBvciBtYXliZSBgTkVUX0NMU19BQ1RgIGFyZSByZWxldmFudCBhdHRhY2ggcG9pbnRzLiBJIGRvbid0IG5lZWQgdG8gbGlzdCAqZXZlcnkqIGNvbmZpZywganVzdCB0aGUga2V5IG9uZXMgdGhhdCB1bmxvY2sgdGhlIGZlYXR1cmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IGBCUEZfU1lTQ0FMTGAgYW5kIGl0cyBkZXBlbmRlbmNpZXMsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgYGJwZl9rZnVuY19pbml0YCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gY29uZmlybSB0aGF0IHRoYXQgaXQncyBjb21waWxlZCBhcyBleHBlY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMDMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTI6Mjc6MDguNDQ2NTAyNDIzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1ODczNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9rZnVuY19pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMjcyMj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9pY21wX3NlbmQgPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcyNi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjcyNzpzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzI4LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzUyLX1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjc1MzpsYXRlX2luaXRjYWxsKGJwZl9rZnVuY19pbml0KTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTI6Mjc6MDguNTAyMzgwNjcyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI1NTQ1NTU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCUEYgUmVxdWlyZW1lbnRzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBzaXR1YXRpb24sIGFuZCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nLiBJdCBzZWVtcyB0aGUgY29yZSBCUEYgZmlsdGVyaW5nIGlzIGJha2VkIGluIGlmIHRoZSBuZXR3b3JrIHN0YWNrIGlzIGVuYWJsZWQsIHNwZWNpZmljYWxseSBpZiBgbmV0L2NvcmUvZmlsdGVyLmNgIGdldHMgY29tcGlsZWQuIEFuZCB0aGF0LCBvZiBjb3Vyc2UsIHJlbGllcyBvbiBgQ09ORklHX05FVGAuIFRoYXQncyB0aGUgYmFzZWxpbmUuXG5cbkJ1dCB0aGUgcmVhbCBtZWF0IG9mIHdoYXQgSSB3YW50IHRvIHRlc3QgLSB0aGUgc2VuZGluZyBvZiBJQ01QIG1lc3NhZ2VzIHRocm91Z2ggQlBGLCBzcGVjaWZpY2FsbHkgY2FsbGluZyBgYnBmX2ljbXBfc2VuZGAgLSBub3cgdGhhdCBnZXRzIGEgbGl0dGxlIG1vcmUgY29tcGxleC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFsc28gaGF2ZSBib3RoIGBJTkVUYCBhbmQgYElQVjZgIGVuYWJsZWQuIFRoZSBhY3R1YWwgSUNNUCBzZW5kaW5nIGZ1bmN0aW9ucywgYGljbXBfc2VuZGAgYW5kIGBpY21wdjZfc2VuZGAsIGFyZSBwdWxsZWQgaW4gZnJvbSBgbmV0L2lwdjQvaWNtcC5jYCBhbmQgYG5ldC9pcHY2L2ljbXAuY2AgcmVzcGVjdGl2ZWx5LCBzbyB0aG9zZSBwcm90b2NvbHMgbmVlZCB0byBiZSBpbmNsdWRlZC5cblxuQW5kLCBvYnZpb3VzbHksIHRvIGV2ZW4gKnVzZSogdGhlIEJQRiBzeXNjYWxscywgSSdsbCBuZWVkIGBCUEZfU1lTQ0FMTGAgZW5hYmxlZCBhcyB3ZWxsLiBUaGF0J3MgYSBuby1icmFpbmVyLCBidXQgZ29vZCB0byBrZWVwIGl0IGluIG1pbmQuXG5cbk5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHJvdXRpbmcgYW5kIEJQRi4gSSdtIGdvaW5nIHRvIGxvb2sgaW50byBgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3RgIGFuZCBgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0YCB0byBzZWUgaG93IHRob3NlIHRpZSBpbnRvIHRoZSBCUEYgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NzMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTI6Mjc6MTQuNzU3ODM4OTIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTc0ODYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9yb3V0ZV9yZXBseV9maWxsX2RzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyNTczPV9fYnBmX2tmdW5jIGludCBicGZfaWNtcF9zZW5kKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIGludCB0eXBlLCBpbnQgY29kZSlcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNjAwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNjAxOlxcdFxcdGlmICghc2tiX2RzdChuc2tiKSBcXHUwMDI2XFx1MDAyNiBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChuc2tiKSBcXHUwMDNjIDApIHtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjYwMi1cXHRcXHRcXHRrZnJlZV9za2IobnNrYik7XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYz0yNTY9dm9pZCBuZl9zZW5kX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMjY2LVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jOjI2NzpcXHRpZiAoIXNrYl9kc3Qob2xkc2tiKSBcXHUwMDI2XFx1MDAyNiBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChvbGRza2IpIFxcdTAwM2MgMClcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0yNjgtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MzMxPXZvaWQgbmZfc2VuZF91bnJlYWNoKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCBjb2RlLCBpbnQgaG9vaylcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTMzOS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYzozNDA6XFx0aWYgKCFza2JfZHN0KHNrYl9pbikgXFx1MDAyNlxcdTAwMjYgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc2tiX2luKSBcXHUwMDNjIDApXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzQxLVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9Mjk0Mz1FWFBPUlRfU1lNQk9MX0dQTChpcF9yb3V0ZV9vdXRwdXRfZmxvdyk7XFxubmV0L2lwdjQvcm91dGUuYy0yOTQ0LVxcbm5ldC9pcHY0L3JvdXRlLmM6Mjk0NTppbnQgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9yb3V0ZS5jLTI5NDYte1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yOTU3LX1cXG5uZXQvaXB2NC9yb3V0ZS5jOjI5NTg6RVhQT1JUX1NZTUJPTF9HUEwoaXBfcm91dGVfcmVwbHlfZmlsbF9kc3QpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMjk1OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTI6Mjc6MTQuODM3NTk0MjMyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4ODc5NTYyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgTmV3IElDTVAgQ2FwYWJpbGl0aWVzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgcHJldHR5IGludGVyZXN0aW5nIG5ldyBmdW5jdGlvbmFsaXR5LiBJIHNlZSBhIG5ldyBCUEYga2Z1bmMsIGBicGZfaWNtcF9zZW5kYCwgd2hpY2ggYWxsb3dzIHNlbmRpbmcgSUNNUCBjb250cm9sIG1lc3NhZ2VzIGZyb20gQlBGIHByb2dyYW1zLiBUaGF0IGltbWVkaWF0ZWx5IHNjcmVhbXMgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gQW5kIGl0J3Mgbm90IGp1c3QgdGhlIGtmdW5jIGl0c2VsZjsgdGhlIHBhdGNoIGFsc28gZXhwb3NlcyBgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3RgIGFuZCBgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0YCBieSByZWZhY3RvcmluZyBzb21lIHJvdXRpbmcgY29kZS4gVGhpcyBtZWFucyB3ZSBoYXZlIGV2ZW4gbW9yZSBrZXJuZWwgbG9naWMgbm93IGV4cG9zZWQgYW5kIHRoZXJlZm9yZSByZWFjaGFibGUgZnJvbSBCUEYuXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZ1bmN0aW9ucywgdGhlc2UgYXJlIGRlZmluaXRlbHkgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgdGVzdGluZyB0aGVtIHRob3JvdWdobHkuIFRvIHJ1biB0aGUgdGVzdHMsIGl0IGxvb2tzIGxpa2UgSSdsbCBuZWVkIGBCUEZfU1lTQ0FMTGAsIGBJTkVUYCwgYW5kIGBJUFY2YCBjb25maWd1cmVkLiBJJ2xsIG1ha2Ugc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCBpbiBteSB0ZXN0IGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg2NywiT3V0cHV0VG9rZW5zIjoxNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTI6Mjc6MTkuNzI1NTU1MTY4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQzMTQ2NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ljbXBfc2VuZFwiLFxuICAgIFwiaXBfcm91dGVfcmVwbHlfZmlsbF9kc3RcIixcbiAgICBcImlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaWNtcF9zZW5kYCB0byBzZW5kIElDTVAgY29udHJvbCBtZXNzYWdlcyBmcm9tIEJQRiBwcm9ncmFtcywgYW5kIHJlZmFjdG9ycyByb3V0aW5nIGNvZGUgdG8gZXhwb3J0IGBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdGAgYW5kIGBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3RgLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaWNtcF9zZW5kXCIsXG4gICAgXCJpcF9yb3V0ZV9yZXBseV9maWxsX2RzdFwiLFxuICAgIFwiaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHRvIHNlbmQgSUNNUCBjb250cm9sIG1lc3NhZ2VzIGZyb20gQlBGIHByb2dyYW1zLCBhbmQgcmVmYWN0b3JzIHJvdXRpbmcgY29kZSB0byBleHBvcnQgYGlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0YCBhbmQgYGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdGAuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowfxxn6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-22 12:17:05 +0000 UTC FinishedAt: 2026-06-22 12:27:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "INET", "IPV6" ], "series_id": "3862deed-e572-4299-9b43-dcef3522fbbb" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_icmp_send", "ip_route_reply_fill_dst", "ip6_route_reply_fill_dst" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA2LzIyIDEyOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pY21wX3NlbmQmIzM0OywKICAgICYjMzQ7aXBfcm91dGVfcmVwbHlfZmlsbF9kc3QmIzM0OywKICAgICYjMzQ7aXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaWNtcF9zZW5kYCB0byBzZW5kIElDTVAgY29udHJvbCBtZXNzYWdlcyBmcm9tIEJQRiBwcm9ncmFtcywgYW5kIHJlZmFjdG9ycyByb3V0aW5nIGNvZGUgdG8gZXhwb3J0IGBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdGAgYW5kIGBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3RgLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTI6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyZjg0YzFhOWVjZmI5ZGZjZjIzOWYwNjM4N2JkNzNiMmQyMGMyNmQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjIgMTI6MjY6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggMDlmZmUwZjEzY2U3NTIuLmViNWE2MGQzYmFiZTJhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5AQCAtMTAwLDYgJiM0MzsxMDAsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkc3RfZW50cnkgKmlwNl9yb3V0ZV9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIGlwNl9yb3V0ZV9vdXRwdXRfZmxhZ3MobmV0LCBzaywgZmw2LCAwKTtcbiB9XG4gXG4mIzQzO2ludCBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4mIzQzO1xuIC8qIE9ubHkgY29uZGl0aW9uYWxseSByZWxlYXNlIGRzdCBpZiBmbGFncyBpbmRpY2F0ZXNcbiAgKiAhUlQ2X0xPT0tVUF9GX0RTVF9OT1JFRiBvciBkc3QgaXMgaW4gdW5jYWNoZWRfbGlzdC5cbiAgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvcm91dGUuaFxuaW5kZXggZjkwMTA2ZjM4M2M1NmQuLjMwMGQyOTJjZDlhMWYzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvcm91dGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvcm91dGUuaFxuQEAgLTE3Myw2ICYjNDM7MTczLDcgQEAgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2Zsb3coc3RydWN0IG5ldCAqLCBzdHJ1Y3QgZmxvd2k0ICpmbHAsXG4gXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbiBzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2JsYWNraG9sZV9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGRzdF9lbnRyeSAqZHN0X29yaWcpO1xuJiM0MztpbnQgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfa2V5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmxwKVxuIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCAyZTk2YjRiODQ3Y2UxMi4uZmM2OWExNDY1MGU0MjkgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC04NCw2ICYjNDM7ODQsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGRwX3NvY2tfZHJ2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9kc2NwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcHY2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2ljbXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2Rldi5oXCYjMzQ7XG4gXG5AQCAtMTI1NDYsNiAmIzQzOzEyNTQ4LDEwMSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3hkcF9wdWxsX2RhdGEoc3RydWN0IHhkcF9tZCAqeCwgdTMyIGxlbilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGJwZl9pY21wX3NlbmQgLSBTZW5kIGFuIElDTVAgY29udHJvbCBtZXNzYWdlXG4mIzQzOyAqIEBza2JfY3R4OiBQYWNrZXQgdGhhdCB0cmlnZ2VyZWQgdGhlIGNvbnRyb2wgbWVzc2FnZVxuJiM0MzsgKiBAdHlwZTogSUNNUCB0eXBlIChvbmx5IElDTVBfREVTVF9VTlJFQUNIL0lDTVBWNl9ERVNUX1VOUkVBQ0ggc3VwcG9ydGVkKVxuJiM0MzsgKiBAY29kZTogSUNNUCBjb2RlICgwLTE1IGZvciBJUHY0LCAwLTYgZm9yIElQdjYpXG4mIzQzOyAqXG4mIzQzOyAqIFNlbmRzIGFuIElDTVAgY29udHJvbCBtZXNzYWdlIGluIHJlc3BvbnNlIHRvIHRoZSBwYWNrZXQuIFRoZSBvcmlnaW5hbCBwYWNrZXRcbiYjNDM7ICogaXMgY2xvbmVkIGJlZm9yZSBzZW5kaW5nIHRoZSBJQ01QIG1lc3NhZ2UsIHNvIHRoZSBCUEYgcHJvZ3JhbSBjYW4gc3RpbGwgbGV0XG4mIzQzOyAqIHRoZSBwYWNrZXQgcGFzcyBpZiBkZXNpcmVkLlxuJiM0MzsgKlxuJiM0MzsgKiBDdXJyZW50bHkgb25seSBJQ01QX0RFU1RfVU5SRUFDSCAoSVB2NCkgYW5kIElDTVBWNl9ERVNUX1VOUkVBQ0ggKElQdjYpIGFyZVxuJiM0MzsgKiBzdXBwb3J0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmU6XG4mIzQzOyAqICAgICAgICAgLUVJTlZBTDogSW52YWxpZCBjb2RlIHBhcmFtZXRlclxuJiM0MzsgKiAgICAgICAgIC1FQkFETVNHOiBQYWNrZXQgdG9vIHNob3J0IG9yIG1hbGZvcm1lZFxuJiM0MzsgKiAgICAgICAgIC1FTk9NRU06IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuJiM0MzsgKiAgICAgICAgIC1FQlVTWTogUmVjdXJzaW9uIGRldGVjdGVkXG4mIzQzOyAqICAgICAgICAgLUVIT1NUVU5SRUFDSDogUm91dGluZyBmYWlsZWRcbiYjNDM7ICogICAgICAgICAtRVBST1RPTk9TVVBQT1JUOiBOb24tSVAgcHJvdG9jb2xcbiYjNDM7ICogICAgICAgICAtRU9QTk9UU1VQUDogVW5zdXBwb3J0ZWQgSUNNUCB0eXBlXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2ljbXBfc2VuZChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LCBpbnQgdHlwZSwgaW50IGNvZGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopc2tiX2N0eDtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2s7XG4mIzQzO1xuJiM0MztcdHNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTtcbiYjNDM7XHRpZiAoc2sgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX2tlcm5fc29jayBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fSUNNUCB8fCBzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX0lDTVBWNikpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbiYjNDM7XHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbiYjNDM7XHRcdGlmICh0eXBlICE9IElDTVBfREVTVF9VTlJFQUNIKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRpZiAoY29kZSBcdTAwM2MgMCB8fCBjb2RlIFx1MDAzZSBOUl9JQ01QX1VOUkVBQ0gpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRcdGlmICghbnNrYilcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwobnNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKSB7XG4mIzQzO1x0XHRcdGtmcmVlX3NrYihuc2tiKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghc2tiX2RzdChuc2tiKSBcdTAwMjZcdTAwMjYgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3QobnNrYikgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiKG5za2IpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVIT1NUVU5SRUFDSDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQoSVBDQihuc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0X3NrYl9wYXJtKSk7XG4mIzQzO1xuJiM0MztcdFx0aWNtcF9zZW5kKG5za2IsIHR5cGUsIGNvZGUsIDApO1xuJiM0MztcdFx0Y29uc3VtZV9za2IobnNrYik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuJiM0MztcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4mIzQzO1x0XHRpZiAodHlwZSAhPSBJQ01QVjZfREVTVF9VTlJFQUNIKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRpZiAoY29kZSBcdTAwM2MgMCB8fCBjb2RlIFx1MDAzZSBJQ01QVjZfUkVKRUNUX1JPVVRFKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRuc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0XHRpZiAoIW5za2IpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRcdGlmICghcHNrYl9uZXR3b3JrX21heV9wdWxsKG5za2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7XG4mIzQzO1x0XHRcdGtmcmVlX3NrYihuc2tiKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FQkFETVNHO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghc2tiX2RzdChuc2tiKSBcdTAwMjZcdTAwMjYgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0KG5za2IpIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdGtmcmVlX3NrYihuc2tiKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KElQNkNCKG5za2IpLCAwLCBzaXplb2Yoc3RydWN0IGluZXQ2X3NrYl9wYXJtKSk7XG4mIzQzO1xuJiM0MztcdFx0aWNtcHY2X3NlbmQobnNrYiwgdHlwZSwgY29kZSwgMCk7XG4mIzQzO1x0XHRjb25zdW1lX3NrYihuc2tiKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuIFxuIGludCBicGZfZHlucHRyX2Zyb21fc2tiX3Jkb25seShzdHJ1Y3QgX19za19idWZmICpza2IsIHU2NCBmbGFncyxcbkBAIC0xMjU4OCw2ICYjNDM7MTI2ODUsMTAgQEAgQlRGX0tGVU5DU19TVEFSVChicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc29ja19vcHNfZW5hYmxlX3R4X3RzdGFtcClcbiBCVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzKVxuIFxuJiM0MztCVEZfS0ZVTkNTX1NUQVJUKGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2ljbXBfc2VuZClcbiYjNDM7QlRGX0tGVU5DU19FTkQoYnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQpXG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3NrYiA9IHtcbiBcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuIFx0LnNldCA9IFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfc2tiLFxuQEAgLTEyNjE4LDYgJiM0MzsxMjcxOSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9zb2NrX29wcyA9IHtcbiBcdC5zZXQgPSBcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzLFxuIH07XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCA9IHtcbiYjNDM7XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiYjNDM7XHQuc2V0ID0gXHUwMDI2YnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbkBAIC0xMjYzOSw2ICYjNDM7MTI3NDUsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxuIFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxuIFx0XHRcdFx0XHQgICAgICAgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpO1xuIFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTtcbiYjNDM7XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcbiYjNDM7XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF9pY21wX3NlbmQpO1xuJiM0MztcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCBcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XG4gXHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TT0NLX09QUywgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX29wcyk7XG4gfVxuIGxhdGVfaW5pdGNhbGwoYnBmX2tmdW5jX2luaXQpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmNcbmluZGV4IGZlY2Y2NjIxZjY3OWY5Li5jMWMwNzI0ZTRkNGRkNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuY1xuQEAgLTI1MiwyMSAmIzQzOzI1Miw2IEBAIHN0YXRpYyB2b2lkIG5mX3JlamVjdF9pcF90Y3BoZHJfcHV0KHN0cnVjdCBza19idWZmICpuc2tiLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqXG4gXHRuc2tiLVx1MDAzZWNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbilcbi17XG4tXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMO1xuLVx0c3RydWN0IGZsb3dpIGZsO1xuLVxuLVx0bWVtc2V0KFx1MDAyNmZsLCAwLCBzaXplb2Yoc3RydWN0IGZsb3dpKSk7XG4tXHRmbC51LmlwNC5kYWRkciA9IGlwX2hkcihza2JfaW4pLVx1MDAzZXNhZGRyO1xuLVx0bmZfaXBfcm91dGUoZGV2X25ldChza2JfaW4tXHUwMDNlZGV2KSwgXHUwMDI2ZHN0LCBcdTAwMjZmbCwgZmFsc2UpO1xuLVx0aWYgKCFkc3QpXG4tXHRcdHJldHVybiAtMTtcbi1cbi1cdHNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKiBTZW5kIFJTVCByZXBseSAqL1xuIHZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcbiBcdFx0ICAgaW50IGhvb2spXG5AQCAtMjc5LDcgJiM0MzsyNjQsNyBAQCB2b2lkIG5mX3NlbmRfcmVzZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvbGRza2IsXG4gXHRpZiAoIW90aClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCFza2JfZHN0KG9sZHNrYikgXHUwMDI2XHUwMDI2IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qob2xkc2tiKSBcdTAwM2MgMClcbiYjNDM7XHRpZiAoIXNrYl9kc3Qob2xkc2tiKSBcdTAwMjZcdTAwMjYgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qob2xkc2tiKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHNrYl9ydGFibGUob2xkc2tiKS1cdTAwM2VydF9mbGFncyBcdTAwMjYgKFJUQ0ZfQlJPQURDQVNUIHwgUlRDRl9NVUxUSUNBU1QpKVxuQEAgLTM1Miw3ICYjNDM7MzM3LDcgQEAgdm9pZCBuZl9zZW5kX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IGNvZGUsIGludCBob29rKVxuIFx0aWYgKGlwaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCFza2JfZHN0KHNrYl9pbikgXHUwMDI2XHUwMDI2IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qoc2tiX2luKSBcdTAwM2MgMClcbiYjNDM7XHRpZiAoIXNrYl9kc3Qoc2tiX2luKSBcdTAwMjZcdTAwMjYgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc2tiX2luKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYl9pbikgfHxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuY1xuaW5kZXggM2YzZGU1MTY0ZDZlNTguLmYyNDYwOTkzM2ZiZWNiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvcm91dGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvcm91dGUuY1xuQEAgLTI5NDIsNiAmIzQzOzI5NDIsMjEgQEAgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2Zsb3coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbHA0LFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpcF9yb3V0ZV9vdXRwdXRfZmxvdyk7XG4gXG4mIzQzO2ludCBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0YWJsZSAqcnQ7XG4mIzQzO1x0c3RydWN0IGZsb3dpNCBmbDQgPSB7XG4mIzQzO1x0XHQuZGFkZHIgPSBpcF9oZHIoc2tiKS1cdTAwM2VzYWRkclxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBcdTAwMjZmbDQpO1xuJiM0MztcdGlmIChJU19FUlIocnQpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocnQpO1xuJiM0MztcdHNrYl9kc3Rfc2V0KHNrYiwgXHUwMDI2cnQtXHUwMDNlZHN0KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpcF9yb3V0ZV9yZXBseV9maWxsX2RzdCk7XG4mIzQzO1xuIC8qIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgaGVsZCAqL1xuIHN0YXRpYyBpbnQgcnRfZmlsbF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGRzdCwgX19iZTMyIHNyYyxcbiBcdFx0XHRzdHJ1Y3QgcnRhYmxlICpydCwgdTMyIHRhYmxlX2lkLCBkc2NwX3QgZHNjcCxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jXG5pbmRleCBlZjViN2U4NWNmZmE4YS4uN2QyZjU3N2U3MmI4ODIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmNcbkBAIC0yOTMsMjEgJiM0MzsyOTMsNiBAQCBuZl9yZWplY3RfaXA2X3RjcGhkcl9wdXQoc3RydWN0IHNrX2J1ZmYgKm5za2IsXG4gXHRcdFx0XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpLCAwKSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmZfcmVqZWN0Nl9maWxsX3NrYl9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbilcbi17XG4tXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMO1xuLVx0c3RydWN0IGZsb3dpIGZsO1xuLVxuLVx0bWVtc2V0KFx1MDAyNmZsLCAwLCBzaXplb2Yoc3RydWN0IGZsb3dpKSk7XG4tXHRmbC51LmlwNi5kYWRkciA9IGlwdjZfaGRyKHNrYl9pbiktXHUwMDNlc2FkZHI7XG4tXHRuZl9pcDZfcm91dGUoZGV2X25ldChza2JfaW4tXHUwMDNlZGV2KSwgXHUwMDI2ZHN0LCBcdTAwMjZmbCwgZmFsc2UpO1xuLVx0aWYgKCFkc3QpXG4tXHRcdHJldHVybiAtMTtcbi1cbi1cdHNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiB2b2lkIG5mX3NlbmRfcmVzZXQ2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxuIFx0XHQgICAgaW50IGhvb2spXG4ge1xuQEAgLTQ0MCw3ICYjNDM7NDI1LDcgQEAgdm9pZCBuZl9zZW5kX3VucmVhY2g2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYl9pbixcbiBcdGlmIChob29rbnVtID09IE5GX0lORVRfTE9DQUxfT1VUIFx1MDAyNlx1MDAyNiBza2JfaW4tXHUwMDNlZGV2ID09IE5VTEwpXG4gXHRcdHNrYl9pbi1cdTAwM2VkZXYgPSBuZXQtXHUwMDNlbG9vcGJhY2tfZGV2O1xuIFxuLVx0aWYgKCFza2JfZHN0KHNrYl9pbikgXHUwMDI2XHUwMDI2IG5mX3JlamVjdDZfZmlsbF9za2JfZHN0KHNrYl9pbikgXHUwMDNjIDApXG4mIzQzO1x0aWYgKCFza2JfZHN0KHNrYl9pbikgXHUwMDI2XHUwMDI2IGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdChza2JfaW4pIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpY21wdjZfc2VuZChza2JfaW4sIElDTVBWNl9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCA2MzYxYWQyZmNmNzcxNS4uMGZhNTZjODAxMTc4MTYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5AQCAtMjczMiw2ICYjNDM7MjczMiwyNCBAQCBzdHJ1Y3QgZHN0X2VudHJ5ICppcDZfcm91dGVfb3V0cHV0X2ZsYWdzKHN0cnVjdCBuZXQgKm5ldCxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoaXA2X3JvdXRlX291dHB1dF9mbGFncyk7XG4gXG4mIzQzO2ludCBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc3RfZW50cnkgKnJlc3VsdDtcbiYjNDM7XHRzdHJ1Y3QgZmxvd2k2IGZsID0ge1xuJiM0MztcdFx0LmRhZGRyID0gaXB2Nl9oZHIoc2tiKS1cdTAwM2VzYWRkclxuJiM0MztcdH07XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0cmVzdWx0ID0gaXA2X3JvdXRlX291dHB1dChkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBcdTAwMjZmbCk7XG4mIzQzO1x0ZXJyID0gcmVzdWx0LVx1MDAzZWVycm9yO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRkc3RfcmVsZWFzZShyZXN1bHQpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNrYl9kc3Rfc2V0KHNrYiwgcmVzdWx0KTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdCk7XG4mIzQzO1xuIHN0cnVjdCBkc3RfZW50cnkgKmlwNl9ibGFja2hvbGVfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Rfb3JpZylcbiB7XG4gXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqb3J0ID0gZHN0X3J0Nl9pbmZvKGRzdF9vcmlnKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pY21wX3NlbmRfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ljbXBfc2VuZF9rZnVuYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmZkNGI4ZmE3OGEwMTg0XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pY21wX3NlbmRfa2Z1bmMuY1xuQEAgLTAsMCAmIzQzOzEsMjUwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXR3b3JrX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NjZ3JvdXBfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VycnF1ZXVlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjcG9sbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2ljbXBfc2VuZC5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVElNRU9VVF9NUyAxMDAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIElDTVBfREVTVF9VTlJFQUNIIDNcbiYjNDM7I2RlZmluZSBJQ01QVjZfREVTVF9VTlJFQUNIIDFcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSUNNUF9IT1NUX1VOUkVBQ0ggMVxuJiM0MzsjZGVmaW5lIElDTVBfRlJBR19ORUVERUQgNFxuJiM0MzsjZGVmaW5lIE5SX0lDTVBfVU5SRUFDSCAxNVxuJiM0MzsjZGVmaW5lIElDTVBWNl9SRUpFQ1RfUk9VVEUgNlxuJiM0MztcbiYjNDM7c3RhdGljIGludCBjb25uZWN0X3RvX2ZkX25vbmJsb2NrKGludCBzZXJ2ZXJfZmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xuJiM0MztcdHNvY2tsZW5fdCBsZW4gPSBzaXplb2YoYWRkcik7XG4mIzQzO1x0aW50IGZkLCBlcnIsIG9uID0gMTtcbiYjNDM7XG4mIzQzO1x0aWYgKGdldHNvY2tuYW1lKHNlcnZlcl9mZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIFx1MDAyNmxlbikpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdGZkID0gc29ja2V0KGFkZHIuc3NfZmFtaWx5LCBTT0NLX1NUUkVBTSB8IFNPQ0tfTk9OQkxPQ0ssIDApO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfUkVDVkVSUiwgXHUwMDI2b24sIHNpemVvZihvbikpIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YWRkciwgbGVuKTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyAhPSBFSU5QUk9HUkVTUykge1xuJiM0MztcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZWFkX2ljbXBfZXJycXVldWUoaW50IHNvY2tmZCwgaW50IGV4cGVjdGVkX2NvZGUsIGludCBhZilcbiYjNDM7e1xuJiM0MztcdGludCBleHBlY3RlZF9lZV90eXBlID0gKGFmID09IEFGX0lORVQpID8gSUNNUF9ERVNUX1VOUkVBQ0ggOlxuJiM0MztcdFx0XHRcdFx0XHQgSUNNUFY2X0RFU1RfVU5SRUFDSDtcbiYjNDM7XHRpbnQgZXhwZWN0ZWRfb3JpZ2luID0gKGFmID09IEFGX0lORVQpID8gU09fRUVfT1JJR0lOX0lDTVAgOlxuJiM0MztcdFx0XHRcdFx0XHRTT19FRV9PUklHSU5fSUNNUDY7XG4mIzQzO1x0aW50IGV4cGVjdGVkX2xldmVsID0gKGFmID09IEFGX0lORVQpID8gSVBQUk9UT19JUCA6IElQUFJPVE9fSVBWNjtcbiYjNDM7XHRpbnQgZXhwZWN0ZWRfdHlwZSA9IChhZiA9PSBBRl9JTkVUKSA/IElQX1JFQ1ZFUlIgOiBJUFY2X1JFQ1ZFUlI7XG4mIzQzO1x0c3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICpzb2NrX2VycjtcbiYjNDM7XHRjaGFyIGN0cmxfYnVmWzUxMl07XG4mIzQzO1x0c3RydWN0IG1zZ2hkciBtc2cgPSB7XG4mIzQzO1x0XHQubXNnX2NvbnRyb2wgPSBjdHJsX2J1ZixcbiYjNDM7XHRcdC5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjdHJsX2J1ZiksXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgcG9sbGZkIHBmZCA9IHtcbiYjNDM7XHRcdC5mZCA9IHNvY2tmZCxcbiYjNDM7XHRcdC5ldmVudHMgPSBQT0xMRVJSLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGNtc2doZHIgKmNtO1xuJiM0MztcdHNzaXplX3QgbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UocG9sbChcdTAwMjZwZmQsIDEsIFRJTUVPVVRfTVMpLCAxLCBcJiMzNDtwb2xsX2VycnF1ZXVlXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0biA9IHJlY3Ztc2coc29ja2ZkLCBcdTAwMjZtc2csIE1TR19FUlJRVUVVRSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UobiwgMCwgXCYjMzQ7cmVjdm1zZ19lcnJxdWV1ZVwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNtID0gQ01TR19GSVJTVEhEUihcdTAwMjZtc2cpO1xuJiM0MztcdGlmICghQVNTRVJUX05FUShjbSwgTlVMTCwgXCYjMzQ7Y21fZmlyc3RoZHJfbnVsbFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoOyBjbTsgY20gPSBDTVNHX05YVEhEUihcdTAwMjZtc2csIGNtKSkge1xuJiM0MztcdFx0aWYgKGNtLVx1MDAzZWNtc2dfbGV2ZWwgIT0gZXhwZWN0ZWRfbGV2ZWwgfHxcbiYjNDM7XHRcdCAgICBjbS1cdTAwM2VjbXNnX3R5cGUgIT0gZXhwZWN0ZWRfdHlwZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0c29ja19lcnIgPSAoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIUFTU0VSVF9FUShzb2NrX2Vyci1cdTAwM2VlZV9vcmlnaW4sIGV4cGVjdGVkX29yaWdpbixcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3NvY2tfZXJyX29yaWdpblwmIzM0OykpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdGlmICghQVNTRVJUX0VRKHNvY2tfZXJyLVx1MDAzZWVlX3R5cGUsIGV4cGVjdGVkX2VlX3R5cGUsXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtzb2NrX2Vycl90eXBlX2Rlc3RfdW5yZWFjaFwmIzM0OykpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdEFTU0VSVF9FUShzb2NrX2Vyci1cdTAwM2VlZV9jb2RlLCBleHBlY3RlZF9jb2RlLCBcJiMzNDtzb2NrX2Vycl9jb2RlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9GQUlMKFwmIzM0O25vIElQX1JFQ1ZFUlIvSVBWNl9SRUNWRVJSIGNvbnRyb2wgbWVzc2FnZSBmb3VuZFwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc3RydWN0IGljbXBfc2VuZCAqc2tlbCwgaW50IGNvZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgaW50IGFmLCBjb25zdCBjaGFyICppcClcbiYjNDM7e1xuJiM0MztcdGludCBzcnZfZmQgPSAtMSwgY2xpZW50X2ZkID0gLTE7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luIGFkZHI7XG4mIzQzO1x0c29ja2xlbl90IGxlbiA9IHNpemVvZihhZGRyKTtcbiYjNDM7XG4mIzQzO1x0c3J2X2ZkID0gc3RhcnRfc2VydmVyKGFmLCBTT0NLX1NUUkVBTSwgaXAsIDAsIFRJTUVPVVRfTVMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX0ZEKHNydl9mZCwgXCYjMzQ7c3RhcnRfc2VydmVyXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKGdldHNvY2tuYW1lKHNydl9mZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIFx1MDAyNmxlbikpIHtcbiYjNDM7XHRcdGNsb3NlKHNydl9mZCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNlcnZlcl9wb3J0ID0gbnRvaHMoYWRkci5zaW5fcG9ydCk7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldW5yZWFjaF90eXBlID0gKGFmID09IEFGX0lORVQpID8gSUNNUF9ERVNUX1VOUkVBQ0ggOlxuJiM0MztcdFx0XHRcdFx0XHQgICAgSUNNUFY2X0RFU1RfVU5SRUFDSDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2V1bnJlYWNoX2NvZGUgPSBjb2RlO1xuJiM0MztcbiYjNDM7XHRjbGllbnRfZmQgPSBjb25uZWN0X3RvX2ZkX25vbmJsb2NrKHNydl9mZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfRkQoY2xpZW50X2ZkLCBcJiMzNDtjbGllbnRfY29ubmVjdF9ub25ibG9ja1wmIzM0OykpIHtcbiYjNDM7XHRcdGNsb3NlKHNydl9mZCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTa2lwIHJlYWRpbmcgSUNNUCBlcnJvciBxdWV1ZSBpZiBjb2RlIGlzIGludmFsaWQgKi9cbiYjNDM7XHRpZiAoY29kZSBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2ICgoYWYgPT0gQUZfSU5FVCBcdTAwMjZcdTAwMjYgY29kZSBcdTAwM2M9IE5SX0lDTVBfVU5SRUFDSCkgfHxcbiYjNDM7XHRcdFx0ICAoYWYgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2IGNvZGUgXHUwMDNjPSBJQ01QVjZfUkVKRUNUX1JPVVRFKSkpXG4mIzQzO1x0XHRyZWFkX2ljbXBfZXJycXVldWUoY2xpZW50X2ZkLCBjb2RlLCBhZik7XG4mIzQzO1xuJiM0MztcdGNsb3NlKGNsaWVudF9mZCk7XG4mIzQzO1x0Y2xvc2Uoc3J2X2ZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX2ljbXBfdGVzdChzdHJ1Y3QgaWNtcF9zZW5kICpza2VsLCBpbnQgYWYsIGNvbnN0IGNoYXIgKmlwLFxuJiM0MztcdFx0XHQgIGludCBtYXhfY29kZSlcbiYjNDM7e1xuJiM0MztcdGZvciAoaW50IGNvZGUgPSAwOyBjb2RlIFx1MDAzYz0gbWF4X2NvZGU7IGNvZGUmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIFRDUCBzdGFjayByZWFjdHMgZGlmZmVyZW50bHkgd2hlbiBhc2tpbmcgZm9yXG4mIzQzO1x0XHQgKiBmcmFnbWVudGF0aW9uLCBsZXQmIzM5O3MgaWdub3JlIGl0IGZvciBub3cuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChhZiA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBjb2RlID09IElDTVBfRlJBR19ORUVERUQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgY29kZSwgYWYsIGlwKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNla2Z1bmNfcmV0LCAwLCBcJiMzNDtrZnVuY19yZXRcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGVzdCBhbiBpbnZhbGlkIGNvZGUgKi9cbiYjNDM7XHR0cmlnZ2VyX3Byb2dfcmVhZF9pY21wX2VycnF1ZXVlKHNrZWwsIC0xLCBhZiwgaXApO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNla2Z1bmNfcmV0LCAtRUlOVkFMLCBcJiMzNDtrZnVuY19yZXRcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3RfaWNtcF9zZW5kX3VucmVhY2hfY2dyb3VwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWNtcF9zZW5kICpza2VsO1xuJiM0MztcdGludCBjZ3JvdXBfZmQgPSAtMTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGljbXBfc2VuZF9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsX29wZW5cJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRjZ3JvdXBfZmQgPSB0ZXN0X19qb2luX2Nncm91cChcJiMzNDsvaWNtcF9zZW5kX3VucmVhY2hfY2dyb3VwXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsIFwmIzM0O2pvaW5fY2dyb3VwXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2VsaW5rcy5lZ3Jlc3MgPVxuJiM0MztcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5lZ3Jlc3MsIGNncm91cF9mZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3MuZWdyZXNzLCBcJiMzNDtwcm9nX2F0dGFjaF9jZ3JvdXBcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtpcHY0XCYjMzQ7KSlcbiYjNDM7XHRcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVCwgXCYjMzQ7MTI3LjAuMC4xXCYjMzQ7LCBOUl9JQ01QX1VOUkVBQ0gpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtpcHY2XCYjMzQ7KSlcbiYjNDM7XHRcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVDYsIFwmIzM0Ozo6MVwmIzM0OywgSUNNUFY2X1JFSkVDVF9ST1VURSk7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdGljbXBfc2VuZF9fZGVzdHJveShza2VsKTtcbiYjNDM7XHRpZiAoY2dyb3VwX2ZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGNncm91cF9mZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9pY21wX3NlbmRfdW5yZWFjaF90Yyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3RjeF9vcHRzLCBvcHRzKTtcbiYjNDM7XHRzdHJ1Y3QgaWNtcF9zZW5kICpza2VsO1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c2tlbF9vcGVuXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdGN4KHNrZWwtXHUwMDNlcHJvZ3MudGNfZWdyZXNzLCAxLCBcdTAwMjZvcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCYjMzQ7cHJvZ19hdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtpcHY0XCYjMzQ7KSlcbiYjNDM7XHRcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVCwgXCYjMzQ7MTI3LjAuMC4xXCYjMzQ7LCBOUl9JQ01QX1VOUkVBQ0gpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtpcHY2XCYjMzQ7KSlcbiYjNDM7XHRcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVDYsIFwmIzM0Ozo6MVwmIzM0OywgSUNNUFY2X1JFSkVDVF9ST1VURSk7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuJiM0MztcdGljbXBfc2VuZF9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2ljbXBfc2VuZF91bnJlYWNoX3JlY3Vyc2lvbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGljbXBfc2VuZCAqc2tlbDtcbiYjNDM7XHRpbnQgY2dyb3VwX2ZkID0gLTE7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c2tlbF9vcGVuXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNldHVwX2Nncm91cF9lbnZpcm9ubWVudCgpKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RmFpbGVkIHRvIHNldHVwIGNncm91cCBlbnZpcm9ubWVudFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjZ3JvdXBfZmQgPSBnZXRfcm9vdF9jZ3JvdXAoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsIFwmIzM0O2dldF9yb290X2Nncm91cFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdHNrZWwtXHUwMDNlZGF0YS1cdTAwM2V0YXJnZXRfcGlkID0gZ2V0cGlkKCk7XG4mIzQzO1x0c2tlbC1cdTAwM2VsaW5rcy5yZWN1cnNpb24gPVxuJiM0MztcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5yZWN1cnNpb24sIGNncm91cF9mZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3MucmVjdXJzaW9uLCBcJiMzNDtwcm9nX2F0dGFjaF9jZ3JvdXBcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHR0cmlnZ2VyX3Byb2dfcmVhZF9pY21wX2VycnF1ZXVlKHNrZWwsIElDTVBfSE9TVF9VTlJFQUNILCBBRl9JTkVULFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7MTI3LjAuMC4xXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCZWNhdXNlIHRoZXJlJiMzOTtzIHJlY3Vyc2lvbiBpbnZvbHZlZCwgdGhlIGZpcnN0IGNhbGwgd2lsbCByZXR1cm4gYXRcbiYjNDM7XHQgKiBpbmRleCAxIHNpbmNlIGl0IHdpbGwgcmV0dXJuIHRoZSBzZWNvbmQsIGFuZCB0aGUgc2Vjb25kIGNhbGwgd2lsbFxuJiM0MztcdCAqIHJldHVybiBhdCBpbmRleCAwIHNpbmNlIGl0IHdpbGwgcmV0dXJuIHRoZSBmaXJzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXJlY19rZnVuY19yZXRzWzBdLCAtRUJVU1ksIFwmIzM0O2tmdW5jX3JldHNbMF1cJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNlcmVjX2tmdW5jX3JldHNbMV0sIDAsIFwmIzM0O2tmdW5jX3JldHNbMV1cJiMzNDspO1xuJiM0MztcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuJiM0MztcdGljbXBfc2VuZF9fZGVzdHJveShza2VsKTtcbiYjNDM7XHRpZiAoY2dyb3VwX2ZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGNncm91cF9mZCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZmQ5Yzc2ODQ3OTdiMDdcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuY1xuQEAgLTAsMCAmIzQzOzEsMTg0IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl90cmFjaW5nX25ldC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiAxMjcuMC4wLjEgaW4gaG9zdCBieXRlIG9yZGVyICovXG4mIzQzOyNkZWZpbmUgU0VSVkVSX0lQIDB4N0YwMDAwMDFcbiYjNDM7LyogOjoxIGluIGhvc3QgYnl0ZSBvcmRlciAobGFzdCAzMi1iaXQgd29yZCkgKi9cbiYjNDM7I2RlZmluZSBTRVJWRVJfSVA2X0xPIDB4MDAwMDAwMDFcbiYjNDM7XG4mIzQzO19fdTE2IHNlcnZlcl9wb3J0ID0gMDtcbiYjNDM7aW50IHVucmVhY2hfdHlwZSA9IDA7XG4mIzQzO2ludCB1bnJlYWNoX2NvZGUgPSAwO1xuJiM0MztpbnQga2Z1bmNfcmV0ID0gLTE7XG4mIzQzO2ludCB0YXJnZXRfcGlkID0gLTE7XG4mIzQzO1xuJiM0Mzt1bnNpZ25lZCBpbnQgcmVjX2NvdW50ID0gMDtcbiYjNDM7aW50IHJlY19rZnVuY19yZXRzW10gPSB7IC0xLCAtMSB9O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2Nncm91cF9za2IvZWdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgZWdyZXNzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhO1xuJiM0MztcdHZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YV9lbmQ7XG4mIzQzO1x0c3RydWN0IGlwaGRyICppcGg7XG4mIzQzO1x0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4mIzQzO1x0c3RydWN0IHRjcGhkciAqdGNwaDtcbiYjNDM7XHRfX3U4IHZlcnNpb247XG4mIzQzO1xuJiM0MztcdGlmIChkYXRhICYjNDM7IDEgXHUwMDNlIGRhdGFfZW5kKVxuJiM0MztcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1xuJiM0MztcdHZlcnNpb24gPSAoKigoX191OCAqKWRhdGEpKSBcdTAwM2VcdTAwM2UgNDtcbiYjNDM7XG4mIzQzO1x0aWYgKHZlcnNpb24gPT0gNCkge1xuJiM0MztcdFx0aXBoID0gZGF0YTtcbiYjNDM7XHRcdGlmICgodm9pZCAqKShpcGggJiM0MzsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8XG4mIzQzO1x0XHQgICAgaXBoLVx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fVENQIHx8XG4mIzQzO1x0XHQgICAgaXBoLVx1MDAzZWRhZGRyICE9IGJwZl9odG9ubChTRVJWRVJfSVApKVxuJiM0MztcdFx0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XG4mIzQzO1x0XHR0Y3BoID0gKHZvaWQgKilpcGggJiM0MzsgaXBoLVx1MDAzZWlobCAqIDQ7XG4mIzQzO1x0XHRpZiAoKHZvaWQgKikodGNwaCAmIzQzOyAxKSBcdTAwM2UgZGF0YV9lbmQgfHxcbiYjNDM7XHRcdCAgICB0Y3BoLVx1MDAzZWRlc3QgIT0gYnBmX2h0b25zKHNlcnZlcl9wb3J0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1xuJiM0MztcdH0gZWxzZSBpZiAodmVyc2lvbiA9PSA2KSB7XG4mIzQzO1x0XHRpcDZoID0gZGF0YTtcbiYjNDM7XHRcdGlmICgodm9pZCAqKShpcDZoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZCB8fFxuJiM0MztcdFx0ICAgIGlwNmgtXHUwMDNlbmV4dGhkciAhPSBJUFBST1RPX1RDUClcbiYjNDM7XHRcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlwNmgtXHUwMDNlZGFkZHIuaW42X3UudTZfYWRkcjMyWzBdICE9IDAgfHxcbiYjNDM7XHRcdCAgICBpcDZoLVx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlsxXSAhPSAwIHx8XG4mIzQzO1x0XHQgICAgaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMl0gIT0gMCB8fFxuJiM0MztcdFx0ICAgIGlwNmgtXHUwMDNlZGFkZHIuaW42X3UudTZfYWRkcjMyWzNdICE9IGJwZl9odG9ubChTRVJWRVJfSVA2X0xPKSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1xuJiM0MztcdFx0dGNwaCA9ICh2b2lkICopKGlwNmggJiM0MzsgMSk7XG4mIzQzO1x0XHRpZiAoKHZvaWQgKikodGNwaCAmIzQzOyAxKSBcdTAwM2UgZGF0YV9lbmQgfHxcbiYjNDM7XHRcdCAgICB0Y3BoLVx1MDAzZWRlc3QgIT0gYnBmX2h0b25zKHNlcnZlcl9wb3J0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldHVybiBTS19QQVNTO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2Z1bmNfcmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFNLX0RST1A7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Yy9lZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCB0Y19lZ3Jlc3Moc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhX2VuZDtcbiYjNDM7XHRzdHJ1Y3QgZXRoaGRyICpldGg7XG4mIzQzO1x0c3RydWN0IGlwaGRyICppcGg7XG4mIzQzO1x0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4mIzQzO1x0c3RydWN0IHRjcGhkciAqdGNwaDtcbiYjNDM7XG4mIzQzO1x0ZXRoID0gZGF0YTtcbiYjNDM7XHRpZiAoKHZvaWQgKikoZXRoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZClcbiYjNDM7XHRcdHJldHVybiBUQ1hfUEFTUztcbiYjNDM7XG4mIzQzO1x0aWYgKGV0aC1cdTAwM2VoX3Byb3RvID09IGJwZl9odG9ucyhFVEhfUF9JUCkpIHtcbiYjNDM7XHRcdGlwaCA9ICh2b2lkICopKGV0aCAmIzQzOyAxKTtcbiYjNDM7XHRcdGlmICgodm9pZCAqKShpcGggJiM0MzsgMSkgXHUwMDNlIGRhdGFfZW5kKVxuJiM0MztcdFx0XHRyZXR1cm4gVENYX1BBU1M7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1RDUCB8fFxuJiM0MztcdFx0ICAgIGlwaC1cdTAwM2VkYWRkciAhPSBicGZfaHRvbmwoU0VSVkVSX0lQKSlcbiYjNDM7XHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuJiM0MztcbiYjNDM7XHRcdHRjcGggPSAodm9pZCAqKWlwaCAmIzQzOyBpcGgtXHUwMDNlaWhsICogNDtcbiYjNDM7XHRcdGlmICgodm9pZCAqKSh0Y3BoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZClcbiYjNDM7XHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0Y3BoLVx1MDAzZWRlc3QgIT0gYnBmX2h0b25zKHNlcnZlcl9wb3J0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuJiM0MztcbiYjNDM7XHR9IGVsc2UgaWYgKGV0aC1cdTAwM2VoX3Byb3RvID09IGJwZl9odG9ucyhFVEhfUF9JUFY2KSkge1xuJiM0MztcdFx0aXA2aCA9ICh2b2lkICopKGV0aCAmIzQzOyAxKTtcbiYjNDM7XHRcdGlmICgodm9pZCAqKShpcDZoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZClcbiYjNDM7XHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpcDZoLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19UQ1ApXG4mIzQzO1x0XHRcdHJldHVybiBUQ1hfUEFTUztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMF0gIT0gMCB8fFxuJiM0MztcdFx0ICAgIGlwNmgtXHUwMDNlZGFkZHIuaW42X3UudTZfYWRkcjMyWzFdICE9IDAgfHxcbiYjNDM7XHRcdCAgICBpcDZoLVx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlsyXSAhPSAwIHx8XG4mIzQzO1x0XHQgICAgaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbM10gIT0gYnBmX2h0b25sKFNFUlZFUl9JUDZfTE8pKVxuJiM0MztcdFx0XHRyZXR1cm4gVENYX1BBU1M7XG4mIzQzO1xuJiM0MztcdFx0dGNwaCA9ICh2b2lkICopKGlwNmggJiM0MzsgMSk7XG4mIzQzO1x0XHRpZiAoKHZvaWQgKikodGNwaCAmIzQzOyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4mIzQzO1x0XHRcdHJldHVybiBUQ1hfUEFTUztcbiYjNDM7XG4mIzQzO1x0XHRpZiAodGNwaC1cdTAwM2VkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpXG4mIzQzO1x0XHRcdHJldHVybiBUQ1hfUEFTUztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0dXJuIFRDWF9QQVNTO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2Z1bmNfcmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFRDWF9EUk9QO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7Y2dyb3VwX3NrYi9lZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCByZWN1cnNpb24oc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhX2VuZDtcbiYjNDM7XHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGg7XG4mIzQzO1x0c3RydWN0IHRjcGhkciAqdGNwaDtcbiYjNDM7XHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoKGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMikgIT0gdGFyZ2V0X3BpZClcbiYjNDM7XHRcdHJldHVybiBTS19QQVNTO1xuJiM0MztcbiYjNDM7XHRpcGggPSBkYXRhO1xuJiM0MztcdGlmICgodm9pZCAqKShpcGggJiM0MzsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8IGlwaC1cdTAwM2V2ZXJzaW9uICE9IDQpXG4mIzQzO1x0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XG4mIzQzO1x0aWYgKGlwaC1cdTAwM2VkYWRkciAhPSBicGZfaHRvbmwoU0VSVkVSX0lQKSlcbiYjNDM7XHRcdHJldHVybiBTS19QQVNTO1xuJiM0MztcbiYjNDM7XHRpZiAoaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQKSB7XG4mIzQzO1x0XHR0Y3BoID0gKHZvaWQgKilpcGggJiM0MzsgaXBoLVx1MDAzZWlobCAqIDQ7XG4mIzQzO1x0XHRpZiAoKHZvaWQgKikodGNwaCAmIzQzOyAxKSBcdTAwM2UgZGF0YV9lbmQgfHxcbiYjNDM7XHRcdCAgICB0Y3BoLVx1MDAzZWRlc3QgIT0gYnBmX2h0b25zKHNlcnZlcl9wb3J0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1x0fSBlbHNlIGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSB7XG4mIzQzO1x0XHRpY21waCA9ICh2b2lkICopaXBoICYjNDM7IGlwaC1cdTAwM2VpaGwgKiA0O1xuJiM0MztcdFx0aWYgKCh2b2lkICopKGljbXBoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZCB8fFxuJiM0MztcdFx0ICAgIGljbXBoLVx1MDAzZXR5cGUgIT0gdW5yZWFjaF90eXBlIHx8XG4mIzQzO1x0XHQgICAgaWNtcGgtXHUwMDNlY29kZSAhPSB1bnJlYWNoX2NvZGUpXG4mIzQzO1x0XHRcdHJldHVybiBTS19QQVNTO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBjYWxsIHdpbGwgcHJvdm9rZSBhIHJlY3Vyc2lvbjogdGhlIElDTVAgcGFja2V0IGdlbmVyYXRlZCBieSB0aGVcbiYjNDM7XHQgKiBrZnVuYyB3aWxsIHJlLXRyaWdnZXIgdGhpcyBwcm9ncmFtIHNpbmNlIHdlIGFyZSBpbiB0aGUgcm9vdCBjZ3JvdXAgaW5cbiYjNDM7XHQgKiB3aGljaCB0aGUga2VybmVsIElDTVAgc29ja2V0IGJlbG9uZ3MuIEhvd2V2ZXIgd2hlbiByZS1lbnRlcmluZyB0aGVcbiYjNDM7XHQgKiBrZnVuYywgaXQgc2hvdWxkIHJldHVybiBFQlVTWS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBicGZfaWNtcF9zZW5kKHNrYiwgdW5yZWFjaF90eXBlLCB1bnJlYWNoX2NvZGUpO1xuJiM0MztcdHJlY19rZnVuY19yZXRzW3JlY19jb3VudCBcdTAwMjYgMV0gPSByZXQ7XG4mIzQzO1x0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2cmVjX2NvdW50LCAxKTtcbiYjNDM7XG4mIzQzO1x0LyogTGV0IHRoZSBmaXJzdCBJQ01QIGVycm9yIG1lc3NhZ2UgcGFzcyAqL1xuJiM0MztcdGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKVxuJiM0MztcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1xuJiM0MztcdHJldHVybiBTS19EUk9QO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtEdWFsIEJTRC9HUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTI6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ljbXBfc2VuZCYjMzQ7LAogICAgJiMzNDtpcF9yb3V0ZV9yZXBseV9maWxsX2RzdCYjMzQ7LAogICAgJiMzNDtpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHRvIHNlbmQgSUNNUCBjb250cm9sIG1lc3NhZ2VzIGZyb20gQlBGIHByb2dyYW1zLCBhbmQgcmVmYWN0b3JzIHJvdXRpbmcgY29kZSB0byBleHBvcnQgYGlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0YCBhbmQgYGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdGAuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmY4NGMxYTllY2ZiOWRmY2YyMzlmMDYzODdiZDczYjJkMjBjMjZkMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDIyIDEyOjI2OjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAppbmRleCAwOWZmZTBmMTNjZTc1Mi4uZWI1YTYwZDNiYWJlMmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCkBAIC0xMDAsNiAmIzQzOzEwMCw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRzdF9lbnRyeSAqaXA2X3JvdXRlX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsCiAJcmV0dXJuIGlwNl9yb3V0ZV9vdXRwdXRfZmxhZ3MobmV0LCBzaywgZmw2LCAwKTsKIH0KIAomIzQzO2ludCBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7CiAvKiBPbmx5IGNvbmRpdGlvbmFsbHkgcmVsZWFzZSBkc3QgaWYgZmxhZ3MgaW5kaWNhdGVzCiAgKiAhUlQ2X0xPT0tVUF9GX0RTVF9OT1JFRiBvciBkc3QgaXMgaW4gdW5jYWNoZWRfbGlzdC4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcm91dGUuaCBiL2luY2x1ZGUvbmV0L3JvdXRlLmgKaW5kZXggZjkwMTA2ZjM4M2M1NmQuLjMwMGQyOTJjZDlhMWYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yb3V0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3JvdXRlLmgKQEAgLTE3Myw2ICYjNDM7MTczLDcgQEAgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2Zsb3coc3RydWN0IG5ldCAqLCBzdHJ1Y3QgZmxvd2k0ICpmbHAsCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBzb2NrICpzayk7CiBzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2JsYWNraG9sZV9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJICAgICAgIHN0cnVjdCBkc3RfZW50cnkgKmRzdF9vcmlnKTsKJiM0MztpbnQgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2tleShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTQgKmZscCkKIHsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggMmU5NmI0Yjg0N2NlMTIuLmZjNjlhMTQ2NTBlNDI5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtODQsNiAmIzQzOzg0LDggQEAKICNpbmNsdWRlICZsdDtsaW51eC91bi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC94ZHBfc29ja19kcnYuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaW5ldF9kc2NwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ljbXB2Ni5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvaWNtcC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2Rldi5oJiMzNDsKIApAQCAtMTI1NDYsNiAmIzQzOzEyNTQ4LDEwMSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3hkcF9wdWxsX2RhdGEoc3RydWN0IHhkcF9tZCAqeCwgdTMyIGxlbikKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGJwZl9pY21wX3NlbmQgLSBTZW5kIGFuIElDTVAgY29udHJvbCBtZXNzYWdlCiYjNDM7ICogQHNrYl9jdHg6IFBhY2tldCB0aGF0IHRyaWdnZXJlZCB0aGUgY29udHJvbCBtZXNzYWdlCiYjNDM7ICogQHR5cGU6IElDTVAgdHlwZSAob25seSBJQ01QX0RFU1RfVU5SRUFDSC9JQ01QVjZfREVTVF9VTlJFQUNIIHN1cHBvcnRlZCkKJiM0MzsgKiBAY29kZTogSUNNUCBjb2RlICgwLTE1IGZvciBJUHY0LCAwLTYgZm9yIElQdjYpCiYjNDM7ICoKJiM0MzsgKiBTZW5kcyBhbiBJQ01QIGNvbnRyb2wgbWVzc2FnZSBpbiByZXNwb25zZSB0byB0aGUgcGFja2V0LiBUaGUgb3JpZ2luYWwgcGFja2V0CiYjNDM7ICogaXMgY2xvbmVkIGJlZm9yZSBzZW5kaW5nIHRoZSBJQ01QIG1lc3NhZ2UsIHNvIHRoZSBCUEYgcHJvZ3JhbSBjYW4gc3RpbGwgbGV0CiYjNDM7ICogdGhlIHBhY2tldCBwYXNzIGlmIGRlc2lyZWQuCiYjNDM7ICoKJiM0MzsgKiBDdXJyZW50bHkgb25seSBJQ01QX0RFU1RfVU5SRUFDSCAoSVB2NCkgYW5kIElDTVBWNl9ERVNUX1VOUkVBQ0ggKElQdjYpIGFyZQomIzQzOyAqIHN1cHBvcnRlZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmU6CiYjNDM7ICogICAgICAgICAtRUlOVkFMOiBJbnZhbGlkIGNvZGUgcGFyYW1ldGVyCiYjNDM7ICogICAgICAgICAtRUJBRE1TRzogUGFja2V0IHRvbyBzaG9ydCBvciBtYWxmb3JtZWQKJiM0MzsgKiAgICAgICAgIC1FTk9NRU06IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAomIzQzOyAqICAgICAgICAgLUVCVVNZOiBSZWN1cnNpb24gZGV0ZWN0ZWQKJiM0MzsgKiAgICAgICAgIC1FSE9TVFVOUkVBQ0g6IFJvdXRpbmcgZmFpbGVkCiYjNDM7ICogICAgICAgICAtRVBST1RPTk9TVVBQT1JUOiBOb24tSVAgcHJvdG9jb2wKJiM0MzsgKiAgICAgICAgIC1FT1BOT1RTVVBQOiBVbnN1cHBvcnRlZCBJQ01QIHR5cGUKJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2ljbXBfc2VuZChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LCBpbnQgdHlwZSwgaW50IGNvZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopc2tiX2N0eDsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKm5za2I7CiYjNDM7CXN0cnVjdCBzb2NrICpzazsKJiM0MzsKJiM0MzsJc2sgPSBza2JfdG9fZnVsbF9zayhza2IpOwomIzQzOwlpZiAoc2sgJmFtcDsmYW1wOyBzay0mZ3Q7c2tfa2Vybl9zb2NrICZhbXA7JmFtcDsKJiM0MzsJICAgIChzay0mZ3Q7c2tfcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QIHx8IHNrLSZndDtza19wcm90b2NvbCA9PSBJUFBST1RPX0lDTVBWNikpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlzd2l0Y2ggKHNrYi0mZ3Q7cHJvdG9jb2wpIHsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkKJiM0MzsJY2FzZSBodG9ucyhFVEhfUF9JUCk6CiYjNDM7CQlpZiAodHlwZSAhPSBJQ01QX0RFU1RfVU5SRUFDSCkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQlpZiAoY29kZSAmbHQ7IDAgfHwgY29kZSAmZ3Q7IE5SX0lDTVBfVU5SRUFDSCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCW5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKJiM0MzsJCWlmICghbnNrYikKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJCWlmICghcHNrYl9uZXR3b3JrX21heV9wdWxsKG5za2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkgewomIzQzOwkJCWtmcmVlX3NrYihuc2tiKTsKJiM0MzsJCQlyZXR1cm4gLUVCQURNU0c7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIXNrYl9kc3QobnNrYikgJmFtcDsmYW1wOyBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChuc2tiKSAmbHQ7IDApIHsKJiM0MzsJCQlrZnJlZV9za2IobnNrYik7CiYjNDM7CQkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQltZW1zZXQoSVBDQihuc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0X3NrYl9wYXJtKSk7CiYjNDM7CiYjNDM7CQlpY21wX3NlbmQobnNrYiwgdHlwZSwgY29kZSwgMCk7CiYjNDM7CQljb25zdW1lX3NrYihuc2tiKTsKJiM0MzsJCWJyZWFrOwomIzQzOyNlbmRpZgomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgomIzQzOwkJaWYgKHR5cGUgIT0gSUNNUFY2X0RFU1RfVU5SRUFDSCkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQlpZiAoY29kZSAmbHQ7IDAgfHwgY29kZSAmZ3Q7IElDTVBWNl9SRUpFQ1RfUk9VVEUpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQluc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CiYjNDM7CQlpZiAoIW5za2IpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CQlpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChuc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkgewomIzQzOwkJCWtmcmVlX3NrYihuc2tiKTsKJiM0MzsJCQlyZXR1cm4gLUVCQURNU0c7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIXNrYl9kc3QobnNrYikgJmFtcDsmYW1wOyBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3QobnNrYikgJmx0OyAwKSB7CiYjNDM7CQkJa2ZyZWVfc2tiKG5za2IpOwomIzQzOwkJCXJldHVybiAtRUhPU1RVTlJFQUNIOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbWVtc2V0KElQNkNCKG5za2IpLCAwLCBzaXplb2Yoc3RydWN0IGluZXQ2X3NrYl9wYXJtKSk7CiYjNDM7CiYjNDM7CQlpY21wdjZfc2VuZChuc2tiLCB0eXBlLCBjb2RlLCAwKTsKJiM0MzsJCWNvbnN1bWVfc2tiKG5za2IpOwomIzQzOwkJYnJlYWs7CiYjNDM7I2VuZGlmCiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBfX2JwZl9rZnVuY19lbmRfZGVmcygpOwogCiBpbnQgYnBmX2R5bnB0cl9mcm9tX3NrYl9yZG9ubHkoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCB1NjQgZmxhZ3MsCkBAIC0xMjU4OCw2ICYjNDM7MTI2ODUsMTAgQEAgQlRGX0tGVU5DU19TVEFSVChicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX29wc19lbmFibGVfdHhfdHN0YW1wKQogQlRGX0tGVU5DU19FTkQoYnBmX2tmdW5jX2NoZWNrX3NldF9zb2NrX29wcykKIAomIzQzO0JURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pY21wX3NlbmQpCiYjNDM7QlRGX0tGVU5DU19FTkQoYnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQpCiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9za2IgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLnNldCA9ICZhbXA7YnBmX2tmdW5jX2NoZWNrX3NldF9za2IsCkBAIC0xMjYxOCw2ICYjNDM7MTI3MTksMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfc29ja19vcHMgPSB7CiAJLnNldCA9ICZhbXA7YnBmX2tmdW5jX2NoZWNrX3NldF9zb2NrX29wcywKIH07CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9pY21wX3NlbmQgPSB7CiYjNDM7CS5vd25lciA9IFRISVNfTU9EVUxFLAomIzQzOwkuc2V0ID0gJmFtcDticGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZCwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwpAQCAtMTI2MzksNiAmIzQzOzEyNzQ1LDkgQEAgc3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZCkKIAlyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsCiAJCQkJCSAgICAgICAmYW1wO2JwZl9rZnVuY19zZXRfc29ja19hZGRyKTsKIAlyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgJmFtcDticGZfa2Z1bmNfc2V0X3RjcF9yZXFzayk7CiYjNDM7CXJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiwgJmFtcDticGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7CiYjNDM7CXJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCAmYW1wO2JwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTsKJiM0MzsJcmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1QsICZhbXA7YnBmX2tmdW5jX3NldF9pY21wX3NlbmQpOwogCXJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tfT1BTLCAmYW1wO2JwZl9rZnVuY19zZXRfc29ja19vcHMpOwogfQogbGF0ZV9pbml0Y2FsbChicGZfa2Z1bmNfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jCmluZGV4IGZlY2Y2NjIxZjY3OWY5Li5jMWMwNzI0ZTRkNGRkNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMKQEAgLTI1MiwyMSAmIzQzOzI1Miw2IEBAIHN0YXRpYyB2b2lkIG5mX3JlamVjdF9pcF90Y3BoZHJfcHV0KHN0cnVjdCBza19idWZmICpuc2tiLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqCiAJbnNrYi0mZ3Q7Y3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7CiB9CiAKLXN0YXRpYyBpbnQgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKQotewotCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7Ci0Jc3RydWN0IGZsb3dpIGZsOwotCi0JbWVtc2V0KCZhbXA7ZmwsIDAsIHNpemVvZihzdHJ1Y3QgZmxvd2kpKTsKLQlmbC51LmlwNC5kYWRkciA9IGlwX2hkcihza2JfaW4pLSZndDtzYWRkcjsKLQluZl9pcF9yb3V0ZShkZXZfbmV0KHNrYl9pbi0mZ3Q7ZGV2KSwgJmFtcDtkc3QsICZhbXA7ZmwsIGZhbHNlKTsKLQlpZiAoIWRzdCkKLQkJcmV0dXJuIC0xOwotCi0Jc2tiX2RzdF9zZXQoc2tiX2luLCBkc3QpOwotCXJldHVybiAwOwotfQotCiAvKiBTZW5kIFJTVCByZXBseSAqLwogdm9pZCBuZl9zZW5kX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLAogCQkgICBpbnQgaG9vaykKQEAgLTI3OSw3ICYjNDM7MjY0LDcgQEAgdm9pZCBuZl9zZW5kX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLAogCWlmICghb3RoKQogCQlyZXR1cm47CiAKLQlpZiAoIXNrYl9kc3Qob2xkc2tiKSAmYW1wOyZhbXA7IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qob2xkc2tiKSAmbHQ7IDApCiYjNDM7CWlmICghc2tiX2RzdChvbGRza2IpICZhbXA7JmFtcDsgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qob2xkc2tiKSAmbHQ7IDApCiAJCXJldHVybjsKIAogCWlmIChza2JfcnRhYmxlKG9sZHNrYiktJmd0O3J0X2ZsYWdzICZhbXA7IChSVENGX0JST0FEQ0FTVCB8IFJUQ0ZfTVVMVElDQVNUKSkKQEAgLTM1Miw3ICYjNDM7MzM3LDcgQEAgdm9pZCBuZl9zZW5kX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IGNvZGUsIGludCBob29rKQogCWlmIChpcGgtJmd0O2ZyYWdfb2ZmICZhbXA7IGh0b25zKElQX09GRlNFVCkpCiAJCXJldHVybjsKIAotCWlmICghc2tiX2RzdChza2JfaW4pICZhbXA7JmFtcDsgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChza2JfaW4pICZsdDsgMCkKJiM0MzsJaWYgKCFza2JfZHN0KHNrYl9pbikgJmFtcDsmYW1wOyBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChza2JfaW4pICZsdDsgMCkKIAkJcmV0dXJuOwogCiAJaWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYl9pbikgfHwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDNmM2RlNTE2NGQ2ZTU4Li5mMjQ2MDk5MzNmYmVjYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0yOTQyLDYgJiM0MzsyOTQyLDIxIEBAIHN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9mbG93KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmxwNCwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlwX3JvdXRlX291dHB1dF9mbG93KTsKIAomIzQzO2ludCBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0YWJsZSAqcnQ7CiYjNDM7CXN0cnVjdCBmbG93aTQgZmw0ID0gewomIzQzOwkJLmRhZGRyID0gaXBfaGRyKHNrYiktJmd0O3NhZGRyCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KHNrYi0mZ3Q7ZGV2KSwgJmFtcDtmbDQpOwomIzQzOwlpZiAoSVNfRVJSKHJ0KSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKHJ0KTsKJiM0MzsJc2tiX2RzdF9zZXQoc2tiLCAmYW1wO3J0LSZndDtkc3QpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaXBfcm91dGVfcmVwbHlfZmlsbF9kc3QpOwomIzQzOwogLyogY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayBoZWxkICovCiBzdGF0aWMgaW50IHJ0X2ZpbGxfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIF9fYmUzMiBkc3QsIF9fYmUzMiBzcmMsCiAJCQlzdHJ1Y3QgcnRhYmxlICpydCwgdTMyIHRhYmxlX2lkLCBkc2NwX3QgZHNjcCwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMKaW5kZXggZWY1YjdlODVjZmZhOGEuLjdkMmY1NzdlNzJiODgyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYwpAQCAtMjkzLDIxICYjNDM7MjkzLDYgQEAgbmZfcmVqZWN0X2lwNl90Y3BoZHJfcHV0KHN0cnVjdCBza19idWZmICpuc2tiLAogCQkJCQkJICAgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpLCAwKSk7CiB9CiAKLXN0YXRpYyBpbnQgbmZfcmVqZWN0Nl9maWxsX3NrYl9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbikKLXsKLQlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMOwotCXN0cnVjdCBmbG93aSBmbDsKLQotCW1lbXNldCgmYW1wO2ZsLCAwLCBzaXplb2Yoc3RydWN0IGZsb3dpKSk7Ci0JZmwudS5pcDYuZGFkZHIgPSBpcHY2X2hkcihza2JfaW4pLSZndDtzYWRkcjsKLQluZl9pcDZfcm91dGUoZGV2X25ldChza2JfaW4tJmd0O2RldiksICZhbXA7ZHN0LCAmYW1wO2ZsLCBmYWxzZSk7Ci0JaWYgKCFkc3QpCi0JCXJldHVybiAtMTsKLQotCXNrYl9kc3Rfc2V0KHNrYl9pbiwgZHN0KTsKLQlyZXR1cm4gMDsKLX0KLQogdm9pZCBuZl9zZW5kX3Jlc2V0NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYiwKIAkJICAgIGludCBob29rKQogewpAQCAtNDQwLDcgJiM0Mzs0MjUsNyBAQCB2b2lkIG5mX3NlbmRfdW5yZWFjaDYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLAogCWlmIChob29rbnVtID09IE5GX0lORVRfTE9DQUxfT1VUICZhbXA7JmFtcDsgc2tiX2luLSZndDtkZXYgPT0gTlVMTCkKIAkJc2tiX2luLSZndDtkZXYgPSBuZXQtJmd0O2xvb3BiYWNrX2RldjsKIAotCWlmICghc2tiX2RzdChza2JfaW4pICZhbXA7JmFtcDsgbmZfcmVqZWN0Nl9maWxsX3NrYl9kc3Qoc2tiX2luKSAmbHQ7IDApCiYjNDM7CWlmICghc2tiX2RzdChza2JfaW4pICZhbXA7JmFtcDsgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0KHNrYl9pbikgJmx0OyAwKQogCQlyZXR1cm47CiAKIAlpY21wdjZfc2VuZChza2JfaW4sIElDTVBWNl9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggNjM2MWFkMmZjZjc3MTUuLjBmYTU2YzgwMTE3ODE2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTI3MzIsNiAmIzQzOzI3MzIsMjQgQEAgc3RydWN0IGRzdF9lbnRyeSAqaXA2X3JvdXRlX291dHB1dF9mbGFncyhzdHJ1Y3QgbmV0ICpuZXQsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcDZfcm91dGVfb3V0cHV0X2ZsYWdzKTsKIAomIzQzO2ludCBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc3RfZW50cnkgKnJlc3VsdDsKJiM0MzsJc3RydWN0IGZsb3dpNiBmbCA9IHsKJiM0MzsJCS5kYWRkciA9IGlwdjZfaGRyKHNrYiktJmd0O3NhZGRyCiYjNDM7CX07CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXJlc3VsdCA9IGlwNl9yb3V0ZV9vdXRwdXQoZGV2X25ldChza2ItJmd0O2RldiksIE5VTEwsICZhbXA7ZmwpOwomIzQzOwllcnIgPSByZXN1bHQtJmd0O2Vycm9yOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZHN0X3JlbGVhc2UocmVzdWx0KTsKJiM0MzsJZWxzZQomIzQzOwkJc2tiX2RzdF9zZXQoc2tiLCByZXN1bHQpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3QpOwomIzQzOwogc3RydWN0IGRzdF9lbnRyeSAqaXA2X2JsYWNraG9sZV9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdF9vcmlnKQogewogCXN0cnVjdCBydDZfaW5mbyAqcnQsICpvcnQgPSBkc3RfcnQ2X2luZm8oZHN0X29yaWcpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaWNtcF9zZW5kX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pY21wX3NlbmRfa2Z1bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZmQ0YjhmYTc4YTAxODQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pY21wX3NlbmRfa2Z1bmMuYwpAQCAtMCwwICYjNDM7MSwyNTAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldHdvcmtfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtjZ3JvdXBfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lcnJxdWV1ZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7aWNtcF9zZW5kLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBUSU1FT1VUX01TIDEwMDAKJiM0MzsKJiM0MzsjZGVmaW5lIElDTVBfREVTVF9VTlJFQUNIIDMKJiM0MzsjZGVmaW5lIElDTVBWNl9ERVNUX1VOUkVBQ0ggMQomIzQzOwomIzQzOyNkZWZpbmUgSUNNUF9IT1NUX1VOUkVBQ0ggMQomIzQzOyNkZWZpbmUgSUNNUF9GUkFHX05FRURFRCA0CiYjNDM7I2RlZmluZSBOUl9JQ01QX1VOUkVBQ0ggMTUKJiM0MzsjZGVmaW5lIElDTVBWNl9SRUpFQ1RfUk9VVEUgNgomIzQzOwomIzQzO3N0YXRpYyBpbnQgY29ubmVjdF90b19mZF9ub25ibG9jayhpbnQgc2VydmVyX2ZkKQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcjsKJiM0MzsJc29ja2xlbl90IGxlbiA9IHNpemVvZihhZGRyKTsKJiM0MzsJaW50IGZkLCBlcnIsIG9uID0gMTsKJiM0MzsKJiM0MzsJaWYgKGdldHNvY2tuYW1lKHNlcnZlcl9mZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7YWRkciwgJmFtcDtsZW4pKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChhZGRyLnNzX2ZhbWlseSwgU09DS19TVFJFQU0gfCBTT0NLX05PTkJMT0NLLCAwKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJaWYgKGFkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2ICZhbXA7JmFtcDsKJiM0MzsJICAgIHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9SRUNWRVJSLCAmYW1wO29uLCBzaXplb2Yob24pKSAmbHQ7IDApIHsKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDthZGRyLCBsZW4pOwomIzQzOwlpZiAoZXJyICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vICE9IEVJTlBST0dSRVNTKSB7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZWFkX2ljbXBfZXJycXVldWUoaW50IHNvY2tmZCwgaW50IGV4cGVjdGVkX2NvZGUsIGludCBhZikKJiM0Mzt7CiYjNDM7CWludCBleHBlY3RlZF9lZV90eXBlID0gKGFmID09IEFGX0lORVQpID8gSUNNUF9ERVNUX1VOUkVBQ0ggOgomIzQzOwkJCQkJCSBJQ01QVjZfREVTVF9VTlJFQUNIOwomIzQzOwlpbnQgZXhwZWN0ZWRfb3JpZ2luID0gKGFmID09IEFGX0lORVQpID8gU09fRUVfT1JJR0lOX0lDTVAgOgomIzQzOwkJCQkJCVNPX0VFX09SSUdJTl9JQ01QNjsKJiM0MzsJaW50IGV4cGVjdGVkX2xldmVsID0gKGFmID09IEFGX0lORVQpID8gSVBQUk9UT19JUCA6IElQUFJPVE9fSVBWNjsKJiM0MzsJaW50IGV4cGVjdGVkX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJUF9SRUNWRVJSIDogSVBWNl9SRUNWRVJSOwomIzQzOwlzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKnNvY2tfZXJyOwomIzQzOwljaGFyIGN0cmxfYnVmWzUxMl07CiYjNDM7CXN0cnVjdCBtc2doZHIgbXNnID0gewomIzQzOwkJLm1zZ19jb250cm9sID0gY3RybF9idWYsCiYjNDM7CQkubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY3RybF9idWYpLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgcG9sbGZkIHBmZCA9IHsKJiM0MzsJCS5mZCA9IHNvY2tmZCwKJiM0MzsJCS5ldmVudHMgPSBQT0xMRVJSLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgY21zZ2hkciAqY207CiYjNDM7CXNzaXplX3QgbjsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfR0UocG9sbCgmYW1wO3BmZCwgMSwgVElNRU9VVF9NUyksIDEsICYjMzQ7cG9sbF9lcnJxdWV1ZSYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbiA9IHJlY3Ztc2coc29ja2ZkLCAmYW1wO21zZywgTVNHX0VSUlFVRVVFKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UobiwgMCwgJiMzNDtyZWN2bXNnX2VycnF1ZXVlJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwljbSA9IENNU0dfRklSU1RIRFIoJmFtcDttc2cpOwomIzQzOwlpZiAoIUFTU0VSVF9ORVEoY20sIE5VTEwsICYjMzQ7Y21fZmlyc3RoZHJfbnVsbCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yICg7IGNtOyBjbSA9IENNU0dfTlhUSERSKCZhbXA7bXNnLCBjbSkpIHsKJiM0MzsJCWlmIChjbS0mZ3Q7Y21zZ19sZXZlbCAhPSBleHBlY3RlZF9sZXZlbCB8fAomIzQzOwkJICAgIGNtLSZndDtjbXNnX3R5cGUgIT0gZXhwZWN0ZWRfdHlwZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXNvY2tfZXJyID0gKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqKUNNU0dfREFUQShjbSk7CiYjNDM7CiYjNDM7CQlpZiAoIUFTU0VSVF9FUShzb2NrX2Vyci0mZ3Q7ZWVfb3JpZ2luLCBleHBlY3RlZF9vcmlnaW4sCiYjNDM7CQkJICAgICAgICYjMzQ7c29ja19lcnJfb3JpZ2luJiMzNDspKQomIzQzOwkJCXJldHVybjsKJiM0MzsJCWlmICghQVNTRVJUX0VRKHNvY2tfZXJyLSZndDtlZV90eXBlLCBleHBlY3RlZF9lZV90eXBlLAomIzQzOwkJCSAgICAgICAmIzM0O3NvY2tfZXJyX3R5cGVfZGVzdF91bnJlYWNoJiMzNDspKQomIzQzOwkJCXJldHVybjsKJiM0MzsJCUFTU0VSVF9FUShzb2NrX2Vyci0mZ3Q7ZWVfY29kZSwgZXhwZWN0ZWRfY29kZSwgJiMzNDtzb2NrX2Vycl9jb2RlJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CUFTU0VSVF9GQUlMKCYjMzQ7bm8gSVBfUkVDVkVSUi9JUFY2X1JFQ1ZFUlIgY29udHJvbCBtZXNzYWdlIGZvdW5kJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0cmlnZ2VyX3Byb2dfcmVhZF9pY21wX2VycnF1ZXVlKHN0cnVjdCBpY21wX3NlbmQgKnNrZWwsIGludCBjb2RlLAomIzQzOwkJCQkJICAgIGludCBhZiwgY29uc3QgY2hhciAqaXApCiYjNDM7ewomIzQzOwlpbnQgc3J2X2ZkID0gLTEsIGNsaWVudF9mZCA9IC0xOwomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKJiM0MzsJc29ja2xlbl90IGxlbiA9IHNpemVvZihhZGRyKTsKJiM0MzsKJiM0MzsJc3J2X2ZkID0gc3RhcnRfc2VydmVyKGFmLCBTT0NLX1NUUkVBTSwgaXAsIDAsIFRJTUVPVVRfTVMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChzcnZfZmQsICYjMzQ7c3RhcnRfc2VydmVyJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoZ2V0c29ja25hbWUoc3J2X2ZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDthZGRyLCAmYW1wO2xlbikpIHsKJiM0MzsJCWNsb3NlKHNydl9mZCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtzZXJ2ZXJfcG9ydCA9IG50b2hzKGFkZHIuc2luX3BvcnQpOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3VucmVhY2hfdHlwZSA9IChhZiA9PSBBRl9JTkVUKSA/IElDTVBfREVTVF9VTlJFQUNIIDoKJiM0MzsJCQkJCQkgICAgSUNNUFY2X0RFU1RfVU5SRUFDSDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt1bnJlYWNoX2NvZGUgPSBjb2RlOwomIzQzOwomIzQzOwljbGllbnRfZmQgPSBjb25uZWN0X3RvX2ZkX25vbmJsb2NrKHNydl9mZCk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKGNsaWVudF9mZCwgJiMzNDtjbGllbnRfY29ubmVjdF9ub25ibG9jayYjMzQ7KSkgewomIzQzOwkJY2xvc2Uoc3J2X2ZkKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTa2lwIHJlYWRpbmcgSUNNUCBlcnJvciBxdWV1ZSBpZiBjb2RlIGlzIGludmFsaWQgKi8KJiM0MzsJaWYgKGNvZGUgJmd0Oz0gMCAmYW1wOyZhbXA7ICgoYWYgPT0gQUZfSU5FVCAmYW1wOyZhbXA7IGNvZGUgJmx0Oz0gTlJfSUNNUF9VTlJFQUNIKSB8fAomIzQzOwkJCSAgKGFmID09IEFGX0lORVQ2ICZhbXA7JmFtcDsgY29kZSAmbHQ7PSBJQ01QVjZfUkVKRUNUX1JPVVRFKSkpCiYjNDM7CQlyZWFkX2ljbXBfZXJycXVldWUoY2xpZW50X2ZkLCBjb2RlLCBhZik7CiYjNDM7CiYjNDM7CWNsb3NlKGNsaWVudF9mZCk7CiYjNDM7CWNsb3NlKHNydl9mZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ1bl9pY21wX3Rlc3Qoc3RydWN0IGljbXBfc2VuZCAqc2tlbCwgaW50IGFmLCBjb25zdCBjaGFyICppcCwKJiM0MzsJCQkgIGludCBtYXhfY29kZSkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGNvZGUgPSAwOyBjb2RlICZsdDs9IG1heF9jb2RlOyBjb2RlJiM0MzsmIzQzOykgewomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBUQ1Agc3RhY2sgcmVhY3RzIGRpZmZlcmVudGx5IHdoZW4gYXNraW5nIGZvcgomIzQzOwkJICogZnJhZ21lbnRhdGlvbiwgbGV0JiMzOTtzIGlnbm9yZSBpdCBmb3Igbm93LgomIzQzOwkJICovCiYjNDM7CQlpZiAoYWYgPT0gQUZfSU5FVCAmYW1wOyZhbXA7IGNvZGUgPT0gSUNNUF9GUkFHX05FRURFRCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgY29kZSwgYWYsIGlwKTsKJiM0MzsJCUFTU0VSVF9FUShza2VsLSZndDtkYXRhLSZndDtrZnVuY19yZXQsIDAsICYjMzQ7a2Z1bmNfcmV0JiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRlc3QgYW4gaW52YWxpZCBjb2RlICovCiYjNDM7CXRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgLTEsIGFmLCBpcCk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtkYXRhLSZndDtrZnVuY19yZXQsIC1FSU5WQUwsICYjMzQ7a2Z1bmNfcmV0JiMzNDspOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfaWNtcF9zZW5kX3VucmVhY2hfY2dyb3VwKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWNtcF9zZW5kICpza2VsOwomIzQzOwlpbnQgY2dyb3VwX2ZkID0gLTE7CiYjNDM7CiYjNDM7CXNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwljZ3JvdXBfZmQgPSB0ZXN0X19qb2luX2Nncm91cCgmIzM0Oy9pY21wX3NlbmRfdW5yZWFjaF9jZ3JvdXAmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKGNncm91cF9mZCwgJiMzNDtqb2luX2Nncm91cCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7bGlua3MuZWdyZXNzID0KJiM0MzsJCWJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtJmd0O3Byb2dzLmVncmVzcywgY2dyb3VwX2ZkKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtJmd0O2xpbmtzLmVncmVzcywgJiMzNDtwcm9nX2F0dGFjaF9jZ3JvdXAmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7aXB2NCYjMzQ7KSkKJiM0MzsJCXJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVCwgJiMzNDsxMjcuMC4wLjEmIzM0OywgTlJfSUNNUF9VTlJFQUNIKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtpcHY2JiMzNDspKQomIzQzOwkJcnVuX2ljbXBfdGVzdChza2VsLCBBRl9JTkVUNiwgJiMzNDs6OjEmIzM0OywgSUNNUFY2X1JFSkVDVF9ST1VURSk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWNtcF9zZW5kX19kZXN0cm95KHNrZWwpOwomIzQzOwlpZiAoY2dyb3VwX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShjZ3JvdXBfZmQpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfaWNtcF9zZW5kX3VucmVhY2hfdGModm9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90Y3hfb3B0cywgb3B0cyk7CiYjNDM7CXN0cnVjdCBpY21wX3NlbmQgKnNrZWw7CiYjNDM7CXN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7CiYjNDM7CiYjNDM7CXNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF90Y3goc2tlbC0mZ3Q7cHJvZ3MudGNfZWdyZXNzLCAxLCAmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobGluaywgJiMzNDtwcm9nX2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtpcHY0JiMzNDspKQomIzQzOwkJcnVuX2ljbXBfdGVzdChza2VsLCBBRl9JTkVULCAmIzM0OzEyNy4wLjAuMSYjMzQ7LCBOUl9JQ01QX1VOUkVBQ0gpOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2lwdjYmIzM0OykpCiYjNDM7CQlydW5faWNtcF90ZXN0KHNrZWwsIEFGX0lORVQ2LCAmIzM0Ozo6MSYjMzQ7LCBJQ01QVjZfUkVKRUNUX1JPVVRFKTsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlicGZfbGlua19fZGVzdHJveShsaW5rKTsKJiM0MzsJaWNtcF9zZW5kX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfaWNtcF9zZW5kX3VucmVhY2hfcmVjdXJzaW9uKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWNtcF9zZW5kICpza2VsOwomIzQzOwlpbnQgY2dyb3VwX2ZkID0gLTE7CiYjNDM7CiYjNDM7CXNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCkpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O0ZhaWxlZCB0byBzZXR1cCBjZ3JvdXAgZW52aXJvbm1lbnRcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwljZ3JvdXBfZmQgPSBnZXRfcm9vdF9jZ3JvdXAoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfRkQoY2dyb3VwX2ZkLCAmIzM0O2dldF9yb290X2Nncm91cCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7ZGF0YS0mZ3Q7dGFyZ2V0X3BpZCA9IGdldHBpZCgpOwomIzQzOwlza2VsLSZndDtsaW5rcy5yZWN1cnNpb24gPQomIzQzOwkJYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC0mZ3Q7cHJvZ3MucmVjdXJzaW9uLCBjZ3JvdXBfZmQpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC0mZ3Q7bGlua3MucmVjdXJzaW9uLCAmIzM0O3Byb2dfYXR0YWNoX2Nncm91cCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJdHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCBJQ01QX0hPU1RfVU5SRUFDSCwgQUZfSU5FVCwKJiM0MzsJCQkJCSYjMzQ7MTI3LjAuMC4xJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCZWNhdXNlIHRoZXJlJiMzOTtzIHJlY3Vyc2lvbiBpbnZvbHZlZCwgdGhlIGZpcnN0IGNhbGwgd2lsbCByZXR1cm4gYXQKJiM0MzsJICogaW5kZXggMSBzaW5jZSBpdCB3aWxsIHJldHVybiB0aGUgc2Vjb25kLCBhbmQgdGhlIHNlY29uZCBjYWxsIHdpbGwKJiM0MzsJICogcmV0dXJuIGF0IGluZGV4IDAgc2luY2UgaXQgd2lsbCByZXR1cm4gdGhlIGZpcnN0LgomIzQzOwkgKi8KJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2RhdGEtJmd0O3JlY19rZnVuY19yZXRzWzBdLCAtRUJVU1ksICYjMzQ7a2Z1bmNfcmV0c1swXSYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2RhdGEtJmd0O3JlY19rZnVuY19yZXRzWzFdLCAwLCAmIzM0O2tmdW5jX3JldHNbMV0mIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJY2xlYW51cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTsKJiM0MzsJaWNtcF9zZW5kX19kZXN0cm95KHNrZWwpOwomIzQzOwlpZiAoY2dyb3VwX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShjZ3JvdXBfZmQpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZmQ5Yzc2ODQ3OTdiMDcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmMKQEAgLTAsMCAmIzQzOzEsMTg0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2VuZGlhbi5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX3RyYWNpbmdfbmV0LmgmIzM0OwomIzQzOwomIzQzOy8qIDEyNy4wLjAuMSBpbiBob3N0IGJ5dGUgb3JkZXIgKi8KJiM0MzsjZGVmaW5lIFNFUlZFUl9JUCAweDdGMDAwMDAxCiYjNDM7LyogOjoxIGluIGhvc3QgYnl0ZSBvcmRlciAobGFzdCAzMi1iaXQgd29yZCkgKi8KJiM0MzsjZGVmaW5lIFNFUlZFUl9JUDZfTE8gMHgwMDAwMDAwMQomIzQzOwomIzQzO19fdTE2IHNlcnZlcl9wb3J0ID0gMDsKJiM0MztpbnQgdW5yZWFjaF90eXBlID0gMDsKJiM0MztpbnQgdW5yZWFjaF9jb2RlID0gMDsKJiM0MztpbnQga2Z1bmNfcmV0ID0gLTE7CiYjNDM7aW50IHRhcmdldF9waWQgPSAtMTsKJiM0MzsKJiM0Mzt1bnNpZ25lZCBpbnQgcmVjX2NvdW50ID0gMDsKJiM0MztpbnQgcmVjX2tmdW5jX3JldHNbXSA9IHsgLTEsIC0xIH07CiYjNDM7CiYjNDM7U0VDKCYjMzQ7Y2dyb3VwX3NrYi9lZ3Jlc3MmIzM0OykKJiM0MztpbnQgZWdyZXNzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXNrYi0mZ3Q7ZGF0YTsKJiM0MzsJdm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi0mZ3Q7ZGF0YV9lbmQ7CiYjNDM7CXN0cnVjdCBpcGhkciAqaXBoOwomIzQzOwlzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKJiM0MzsJc3RydWN0IHRjcGhkciAqdGNwaDsKJiM0MzsJX191OCB2ZXJzaW9uOwomIzQzOwomIzQzOwlpZiAoZGF0YSAmIzQzOyAxICZndDsgZGF0YV9lbmQpCiYjNDM7CQlyZXR1cm4gU0tfUEFTUzsKJiM0MzsKJiM0MzsJdmVyc2lvbiA9ICgqKChfX3U4ICopZGF0YSkpICZndDsmZ3Q7IDQ7CiYjNDM7CiYjNDM7CWlmICh2ZXJzaW9uID09IDQpIHsKJiM0MzsJCWlwaCA9IGRhdGE7CiYjNDM7CQlpZiAoKHZvaWQgKikoaXBoICYjNDM7IDEpICZndDsgZGF0YV9lbmQgfHwKJiM0MzsJCSAgICBpcGgtJmd0O3Byb3RvY29sICE9IElQUFJPVE9fVENQIHx8CiYjNDM7CQkgICAgaXBoLSZndDtkYWRkciAhPSBicGZfaHRvbmwoU0VSVkVSX0lQKSkKJiM0MzsJCQlyZXR1cm4gU0tfUEFTUzsKJiM0MzsKJiM0MzsJCXRjcGggPSAodm9pZCAqKWlwaCAmIzQzOyBpcGgtJmd0O2lobCAqIDQ7CiYjNDM7CQlpZiAoKHZvaWQgKikodGNwaCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kIHx8CiYjNDM7CQkgICAgdGNwaC0mZ3Q7ZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKQomIzQzOwkJCXJldHVybiBTS19QQVNTOwomIzQzOwomIzQzOwl9IGVsc2UgaWYgKHZlcnNpb24gPT0gNikgewomIzQzOwkJaXA2aCA9IGRhdGE7CiYjNDM7CQlpZiAoKHZvaWQgKikoaXA2aCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kIHx8CiYjNDM7CQkgICAgaXA2aC0mZ3Q7bmV4dGhkciAhPSBJUFBST1RPX1RDUCkKJiM0MzsJCQlyZXR1cm4gU0tfUEFTUzsKJiM0MzsKJiM0MzsJCWlmIChpcDZoLSZndDtkYWRkci5pbjZfdS51Nl9hZGRyMzJbMF0gIT0gMCB8fAomIzQzOwkJICAgIGlwNmgtJmd0O2RhZGRyLmluNl91LnU2X2FkZHIzMlsxXSAhPSAwIHx8CiYjNDM7CQkgICAgaXA2aC0mZ3Q7ZGFkZHIuaW42X3UudTZfYWRkcjMyWzJdICE9IDAgfHwKJiM0MzsJCSAgICBpcDZoLSZndDtkYWRkci5pbjZfdS51Nl9hZGRyMzJbM10gIT0gYnBmX2h0b25sKFNFUlZFUl9JUDZfTE8pKQomIzQzOwkJCXJldHVybiBTS19QQVNTOwomIzQzOwomIzQzOwkJdGNwaCA9ICh2b2lkICopKGlwNmggJiM0MzsgMSk7CiYjNDM7CQlpZiAoKHZvaWQgKikodGNwaCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kIHx8CiYjNDM7CQkgICAgdGNwaC0mZ3Q7ZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKQomIzQzOwkJCXJldHVybiBTS19QQVNTOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0dXJuIFNLX1BBU1M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2Z1bmNfcmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIFNLX0RST1A7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjL2VncmVzcyYjMzQ7KQomIzQzO2ludCB0Y19lZ3Jlc3Moc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJdm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLSZndDtkYXRhOwomIzQzOwl2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpc2tiLSZndDtkYXRhX2VuZDsKJiM0MzsJc3RydWN0IGV0aGhkciAqZXRoOwomIzQzOwlzdHJ1Y3QgaXBoZHIgKmlwaDsKJiM0MzsJc3RydWN0IGlwdjZoZHIgKmlwNmg7CiYjNDM7CXN0cnVjdCB0Y3BoZHIgKnRjcGg7CiYjNDM7CiYjNDM7CWV0aCA9IGRhdGE7CiYjNDM7CWlmICgodm9pZCAqKShldGggJiM0MzsgMSkgJmd0OyBkYXRhX2VuZCkKJiM0MzsJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsKJiM0MzsJaWYgKGV0aC0mZ3Q7aF9wcm90byA9PSBicGZfaHRvbnMoRVRIX1BfSVApKSB7CiYjNDM7CQlpcGggPSAodm9pZCAqKShldGggJiM0MzsgMSk7CiYjNDM7CQlpZiAoKHZvaWQgKikoaXBoICYjNDM7IDEpICZndDsgZGF0YV9lbmQpCiYjNDM7CQkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwomIzQzOwkJaWYgKGlwaC0mZ3Q7cHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgfHwKJiM0MzsJCSAgICBpcGgtJmd0O2RhZGRyICE9IGJwZl9odG9ubChTRVJWRVJfSVApKQomIzQzOwkJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsKJiM0MzsJCXRjcGggPSAodm9pZCAqKWlwaCAmIzQzOyBpcGgtJmd0O2lobCAqIDQ7CiYjNDM7CQlpZiAoKHZvaWQgKikodGNwaCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kKQomIzQzOwkJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsKJiM0MzsJCWlmICh0Y3BoLSZndDtkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpCiYjNDM7CQkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwomIzQzOwl9IGVsc2UgaWYgKGV0aC0mZ3Q7aF9wcm90byA9PSBicGZfaHRvbnMoRVRIX1BfSVBWNikpIHsKJiM0MzsJCWlwNmggPSAodm9pZCAqKShldGggJiM0MzsgMSk7CiYjNDM7CQlpZiAoKHZvaWQgKikoaXA2aCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kKQomIzQzOwkJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsKJiM0MzsJCWlmIChpcDZoLSZndDtuZXh0aGRyICE9IElQUFJPVE9fVENQKQomIzQzOwkJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsKJiM0MzsJCWlmIChpcDZoLSZndDtkYWRkci5pbjZfdS51Nl9hZGRyMzJbMF0gIT0gMCB8fAomIzQzOwkJICAgIGlwNmgtJmd0O2RhZGRyLmluNl91LnU2X2FkZHIzMlsxXSAhPSAwIHx8CiYjNDM7CQkgICAgaXA2aC0mZ3Q7ZGFkZHIuaW42X3UudTZfYWRkcjMyWzJdICE9IDAgfHwKJiM0MzsJCSAgICBpcDZoLSZndDtkYWRkci5pbjZfdS51Nl9hZGRyMzJbM10gIT0gYnBmX2h0b25sKFNFUlZFUl9JUDZfTE8pKQomIzQzOwkJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsKJiM0MzsJCXRjcGggPSAodm9pZCAqKShpcDZoICYjNDM7IDEpOwomIzQzOwkJaWYgKCh2b2lkICopKHRjcGggJiM0MzsgMSkgJmd0OyBkYXRhX2VuZCkKJiM0MzsJCQlyZXR1cm4gVENYX1BBU1M7CiYjNDM7CiYjNDM7CQlpZiAodGNwaC0mZ3Q7ZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKQomIzQzOwkJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsJfQomIzQzOwomIzQzOwlrZnVuY19yZXQgPSBicGZfaWNtcF9zZW5kKHNrYiwgdW5yZWFjaF90eXBlLCB1bnJlYWNoX2NvZGUpOwomIzQzOwomIzQzOwlyZXR1cm4gVENYX0RST1A7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2Nncm91cF9za2IvZWdyZXNzJiMzNDspCiYjNDM7aW50IHJlY3Vyc2lvbihzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwl2b2lkICpkYXRhID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGE7CiYjNDM7CXZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGFfZW5kOwomIzQzOwlzdHJ1Y3QgaWNtcGhkciAqaWNtcGg7CiYjNDM7CXN0cnVjdCB0Y3BoZHIgKnRjcGg7CiYjNDM7CXN0cnVjdCBpcGhkciAqaXBoOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoKGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyKSAhPSB0YXJnZXRfcGlkKQomIzQzOwkJcmV0dXJuIFNLX1BBU1M7CiYjNDM7CiYjNDM7CWlwaCA9IGRhdGE7CiYjNDM7CWlmICgodm9pZCAqKShpcGggJiM0MzsgMSkgJmd0OyBkYXRhX2VuZCB8fCBpcGgtJmd0O3ZlcnNpb24gIT0gNCkKJiM0MzsJCXJldHVybiBTS19QQVNTOwomIzQzOwomIzQzOwlpZiAoaXBoLSZndDtkYWRkciAhPSBicGZfaHRvbmwoU0VSVkVSX0lQKSkKJiM0MzsJCXJldHVybiBTS19QQVNTOwomIzQzOwomIzQzOwlpZiAoaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX1RDUCkgewomIzQzOwkJdGNwaCA9ICh2b2lkICopaXBoICYjNDM7IGlwaC0mZ3Q7aWhsICogNDsKJiM0MzsJCWlmICgodm9pZCAqKSh0Y3BoICYjNDM7IDEpICZndDsgZGF0YV9lbmQgfHwKJiM0MzsJCSAgICB0Y3BoLSZndDtkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpCiYjNDM7CQkJcmV0dXJuIFNLX1BBU1M7CiYjNDM7CX0gZWxzZSBpZiAoaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX0lDTVApIHsKJiM0MzsJCWljbXBoID0gKHZvaWQgKilpcGggJiM0MzsgaXBoLSZndDtpaGwgKiA0OwomIzQzOwkJaWYgKCh2b2lkICopKGljbXBoICYjNDM7IDEpICZndDsgZGF0YV9lbmQgfHwKJiM0MzsJCSAgICBpY21waC0mZ3Q7dHlwZSAhPSB1bnJlYWNoX3R5cGUgfHwKJiM0MzsJCSAgICBpY21waC0mZ3Q7Y29kZSAhPSB1bnJlYWNoX2NvZGUpCiYjNDM7CQkJcmV0dXJuIFNLX1BBU1M7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXR1cm4gU0tfUEFTUzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGlzIGNhbGwgd2lsbCBwcm92b2tlIGEgcmVjdXJzaW9uOiB0aGUgSUNNUCBwYWNrZXQgZ2VuZXJhdGVkIGJ5IHRoZQomIzQzOwkgKiBrZnVuYyB3aWxsIHJlLXRyaWdnZXIgdGhpcyBwcm9ncmFtIHNpbmNlIHdlIGFyZSBpbiB0aGUgcm9vdCBjZ3JvdXAgaW4KJiM0MzsJICogd2hpY2ggdGhlIGtlcm5lbCBJQ01QIHNvY2tldCBiZWxvbmdzLiBIb3dldmVyIHdoZW4gcmUtZW50ZXJpbmcgdGhlCiYjNDM7CSAqIGtmdW5jLCBpdCBzaG91bGQgcmV0dXJuIEVCVVNZLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTsKJiM0MzsJcmVjX2tmdW5jX3JldHNbcmVjX2NvdW50ICZhbXA7IDFdID0gcmV0OwomIzQzOwlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO3JlY19jb3VudCwgMSk7CiYjNDM7CiYjNDM7CS8qIExldCB0aGUgZmlyc3QgSUNNUCBlcnJvciBtZXNzYWdlIHBhc3MgKi8KJiM0MzsJaWYgKGlwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKQomIzQzOwkJcmV0dXJuIFNLX1BBU1M7CiYjNDM7CiYjNDM7CXJldHVybiBTS19EUk9QOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtEdWFsIEJTRC9HUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0ODAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgQlBGIGBicGZfaWNtcF9zZW5kYCBQYXRjaCoqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgbmV3IHBhdGNoIGludHJvZHVjaW5nIGEgYGJwZl9pY21wX3NlbmRgIGtmdW5jLiBUaGlzIGlzIGludGVyZXN0aW5nIOKAkyBkaXJlY3QgSUNNUCBjb250cm9sIG1lc3NhZ2UgdHJhbnNtaXNzaW9uIHZpYSBCUEYgaXMgYSBwb3RlbnRpYWxseSBwb3dlcmZ1bCBhZGRpdGlvbi4gRnJvbSB3aGF0IEkgc2VlLCB0aGUgcHJpbWFyeSBtb2RpZmljYXRpb24gaW52b2x2ZXMgYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgdGhlIGtmdW5jIGlzIGJlaW5nIGludGVncmF0ZWQgaW50byB0aGUgQlBGIGZyYW1ld29yay4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgbmV0L2lwdjQvcm91dGUuY2AgYW5kIGBuZXQvaXB2Ni9yb3V0ZS5jYCB0byBleHBvcnQgYGlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0YCBhbmQgYGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdGAgcmVzcGVjdGl2ZWx5LCBhbmQgdGhlbiB1cGRhdGVzIGBuZl9yZWplY3RfaXB2NC5jYCBhbmQgYG5mX3JlamVjdF9pcHY2LmNgIHRvIHVzZSB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zLiBHb29kIGhvdXNla2VlcGluZywgcmVtb3ZpbmcgdGhvc2Ugc3RhdGljIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgcmVqZWN0IGNvZGUuIEFuZCwgb2YgY291cnNlLCB0aGVyZSBhcmUgYWNjb21wYW55aW5nIHNlbGYtdGVzdHMuIFRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydC4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIHNpZ25pZmljYW50IGVuaGFuY2VtZW50IHRvIEJQRiYjMzk7cyBjYXBhYmlsaXRpZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIG5lZWRzIHRvIGJlIHJpZ29yb3VzbHkgZnV6emVkLiBUaGUgYXR0YWNrIHN1cmZhY2UgaGVyZSBpcyBkZWZpbml0ZWx5IGluY3JlYXNlZCBhbmQgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGlzIGtmdW5jIGlzIHJvYnVzdCBhbmQgc2VjdXJlLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBgYnBmX2ljbXBfc2VuZGAsIGBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdGAsIGFuZCBgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0YC4KCk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGFzc3VtaW5nIGBDT05GSUdfQlBGX1NZU0NBTExgLCBgQ09ORklHX0lORVRgLCBhbmQgYENPTkZJR19JUFY2YCBhcmUgbmVjZXNzYXJ5LCBidXQgbGV0JiMzOTtzIGJlIHN1cmUuIFRoZSBrZnVuYyBpcyBkZWZpbmVkIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGlzIHJlZ2lzdGVyZWQgZm9yIGBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0JgLCBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgLCBhbmQgYEJQRl9QUk9HX1RZUEVfU0NIRURfQUNUYC4gVGhpcyBtZWFucyB0aGF0IGBDT05GSUdfQ0dST1VQX0JQRmAgaXMgbGlrZWx5IGFub3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGUga2Z1bmMgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gY29uZmlybSB0aGUgZGV0YWlscyBhbmQgZW5zdXJlIHRoYXQgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaWNtcF9zZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTI0OTA9X19icGZfa2Z1bmMgaW50IGJwZl94ZHBfcHVsbF9kYXRhKHN0cnVjdCB4ZHBfbWQgKngsIHUzMiBsZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NTEtLyoqXG5uZXQvY29yZS9maWx0ZXIuYzoxMjU1MjogKiBicGZfaWNtcF9zZW5kIC0gU2VuZCBhbiBJQ01QIGNvbnRyb2wgbWVzc2FnZVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NTMtICogQHNrYl9jdHg6IFBhY2tldCB0aGF0IHRyaWdnZXJlZCB0aGUgY29udHJvbCBtZXNzYWdlXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NzItICovXG5uZXQvY29yZS9maWx0ZXIuYzoxMjU3MzpfX2JwZl9rZnVuYyBpbnQgYnBmX2ljbXBfc2VuZChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LCBpbnQgdHlwZSwgaW50IGNvZGUpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjU3NC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTI2ODg9QlRGX0tGVU5DU19TVEFSVChicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZClcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNjg5OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfaWNtcF9zZW5kKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI2OTAtQlRGX0tGVU5DU19FTkQoYnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGBicGZfaWNtcF9zZW5kYCBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGBicGZfaWNtcF9zZW5kYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLiBJIHNlZSB0aGF0IHVuZGVyIHRoZSBob29kLCBpdCBsZXZlcmFnZXMgYGljbXBfc2VuZGAgYW5kIGBpY21wdjZfc2VuZGAuIE5vdywgSSYjMzk7bSBub3RpbmcgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzOiBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpYCBhbmQgYCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50OyB0aG9zZSBmbGFncyBhcmUgZGVmaW5pdGVseSBrZXkuIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IGlzIGdhdGVkIGJlaGluZCB0aGUgZ2VuZXJhbCBJUHY0IGFuZCBJUHY2IHByb3RvY29sIHN1cHBvcnQuIE5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gZ2V0cyByZWdpc3RlcmVkIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIHRoZSBgYnBmX2tmdW5jX2luaXRgIGluIGBuZXQvY29yZS9maWx0ZXIuY2A7IHRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgQlBGIGtmdW5jIHJlZ2lzdHJhdGlvbnMgcmVzaWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9rZnVuY19pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTI3MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfaWNtcF9zZW5kID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzI2LVxubmV0L2NvcmUvZmlsdGVyLmM6MTI3Mjc6c3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZClcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzI4LXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc1Mi19XG5uZXQvY29yZS9maWx0ZXIuYzoxMjc1MzpsYXRlX2luaXRjYWxsKGJwZl9rZnVuY19pbml0KTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzU0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjAzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVuYWJsaW5nIEJQRi1iYXNlZCBJQ01QIFNlbmQgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUga2VybmVsIGNvbmZpZ3MgbmVlZGVkIHRvIGVuYWJsZSB0aGlzIEJQRi1iYXNlZCBJQ01QIHNlbmQgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIHNlZS4uLiBJICp0aGluayogYEJQRl9TWVNDQUxMYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkLCBzaW5jZSBgYnBmX2ljbXBfc2VuZGAgaXMgYSBCUEYga2Z1bmMuICBQb3RlbnRpYWxseSwgYENHUk9VUF9CUEZgIG1pZ2h0IGJlIG5lZWRlZCB0b28uIEFuZCBmb3IgYXR0YWNoaW5nIHRoZSBCUEYgcHJvZ3JhbSwgcHJvYmFibHkgYE5FVF9TQ0hfSU5HUkVTU2Agb3IgbWF5YmUgYE5FVF9DTFNfQUNUYCBhcmUgcmVsZXZhbnQgYXR0YWNoIHBvaW50cy4gSSBkb24mIzM5O3QgbmVlZCB0byBsaXN0ICpldmVyeSogY29uZmlnLCBqdXN0IHRoZSBrZXkgb25lcyB0aGF0IHVubG9jayB0aGUgZmVhdHVyZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IGBCUEZfU1lTQ0FMTGAgYW5kIGl0cyBkZXBlbmRlbmNpZXMsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgYGJwZl9rZnVuY19pbml0YCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIGNvbmZpcm0gdGhhdCB0aGF0IGl0JiMzOTtzIGNvbXBpbGVkIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9rZnVuY19pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTEyNzIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcyNi1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyNzI3OnN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcyOC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NTItfVxubmV0L2NvcmUvZmlsdGVyLmM6MTI3NTM6bGF0ZV9pbml0Y2FsbChicGZfa2Z1bmNfaW5pdCk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjc1NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc3MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCUEYgUmVxdWlyZW1lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgQlBGIHNpdHVhdGlvbiwgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZy4gSXQgc2VlbXMgdGhlIGNvcmUgQlBGIGZpbHRlcmluZyBpcyBiYWtlZCBpbiBpZiB0aGUgbmV0d29yayBzdGFjayBpcyBlbmFibGVkLCBzcGVjaWZpY2FsbHkgaWYgYG5ldC9jb3JlL2ZpbHRlci5jYCBnZXRzIGNvbXBpbGVkLiBBbmQgdGhhdCwgb2YgY291cnNlLCByZWxpZXMgb24gYENPTkZJR19ORVRgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4KCkJ1dCB0aGUgcmVhbCBtZWF0IG9mIHdoYXQgSSB3YW50IHRvIHRlc3QgLSB0aGUgc2VuZGluZyBvZiBJQ01QIG1lc3NhZ2VzIHRocm91Z2ggQlBGLCBzcGVjaWZpY2FsbHkgY2FsbGluZyBgYnBmX2ljbXBfc2VuZGAgLSBub3cgdGhhdCBnZXRzIGEgbGl0dGxlIG1vcmUgY29tcGxleC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFsc28gaGF2ZSBib3RoIGBJTkVUYCBhbmQgYElQVjZgIGVuYWJsZWQuIFRoZSBhY3R1YWwgSUNNUCBzZW5kaW5nIGZ1bmN0aW9ucywgYGljbXBfc2VuZGAgYW5kIGBpY21wdjZfc2VuZGAsIGFyZSBwdWxsZWQgaW4gZnJvbSBgbmV0L2lwdjQvaWNtcC5jYCBhbmQgYG5ldC9pcHY2L2ljbXAuY2AgcmVzcGVjdGl2ZWx5LCBzbyB0aG9zZSBwcm90b2NvbHMgbmVlZCB0byBiZSBpbmNsdWRlZC4KCkFuZCwgb2J2aW91c2x5LCB0byBldmVuICp1c2UqIHRoZSBCUEYgc3lzY2FsbHMsIEkmIzM5O2xsIG5lZWQgYEJQRl9TWVNDQUxMYCBlbmFibGVkIGFzIHdlbGwuIFRoYXQmIzM5O3MgYSBuby1icmFpbmVyLCBidXQgZ29vZCB0byBrZWVwIGl0IGluIG1pbmQuCgpOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiByb3V0aW5nIGFuZCBCUEYuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBpbnRvIGBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdGAgYW5kIGBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3RgIHRvIHNlZSBob3cgdGhvc2UgdGllIGludG8gdGhlIEJQRiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9yb3V0ZV9yZXBseV9maWxsX2RzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTI1NzM9X19icGZfa2Z1bmMgaW50IGJwZl9pY21wX3NlbmQoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgaW50IHR5cGUsIGludCBjb2RlKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNjAwLVxubmV0L2NvcmUvZmlsdGVyLmM6MTI2MDE6XHRcdGlmICghc2tiX2RzdChuc2tiKSBcdTAwMjZcdTAwMjYgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3QobnNrYikgXHUwMDNjIDApIHtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNjAyLVx0XHRcdGtmcmVlX3NrYihuc2tiKTtcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYz0yNTY9dm9pZCBuZl9zZW5kX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTI2Ni1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jOjI2NzpcdGlmICghc2tiX2RzdChvbGRza2IpIFx1MDAyNlx1MDAyNiBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChvbGRza2IpIFx1MDAzYyAwKVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMjY4LVx0XHRyZXR1cm47XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MzMxPXZvaWQgbmZfc2VuZF91bnJlYWNoKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCBjb2RlLCBpbnQgaG9vaylcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zMzktXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYzozNDA6XHRpZiAoIXNrYl9kc3Qoc2tiX2luKSBcdTAwMjZcdTAwMjYgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc2tiX2luKSBcdTAwM2MgMClcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTM0MS1cdFx0cmV0dXJuO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9Mjk0Mz1FWFBPUlRfU1lNQk9MX0dQTChpcF9yb3V0ZV9vdXRwdXRfZmxvdyk7XG5uZXQvaXB2NC9yb3V0ZS5jLTI5NDQtXG5uZXQvaXB2NC9yb3V0ZS5jOjI5NDU6aW50IGlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC9yb3V0ZS5jLTI5NDYte1xuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjk1Ny19XG5uZXQvaXB2NC9yb3V0ZS5jOjI5NTg6RVhQT1JUX1NZTUJPTF9HUEwoaXBfcm91dGVfcmVwbHlfZmlsbF9kc3QpO1xubmV0L2lwdjQvcm91dGUuYy0yOTU5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg2NwoJCQkJCQkJb3V0cHV0OiAxNTMKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgTmV3IElDTVAgQ2FwYWJpbGl0aWVzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIHByZXR0eSBpbnRlcmVzdGluZyBuZXcgZnVuY3Rpb25hbGl0eS4gSSBzZWUgYSBuZXcgQlBGIGtmdW5jLCBgYnBmX2ljbXBfc2VuZGAsIHdoaWNoIGFsbG93cyBzZW5kaW5nIElDTVAgY29udHJvbCBtZXNzYWdlcyBmcm9tIEJQRiBwcm9ncmFtcy4gVGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIEFuZCBpdCYjMzk7cyBub3QganVzdCB0aGUga2Z1bmMgaXRzZWxmOyB0aGUgcGF0Y2ggYWxzbyBleHBvc2VzIGBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdGAgYW5kIGBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3RgIGJ5IHJlZmFjdG9yaW5nIHNvbWUgcm91dGluZyBjb2RlLiBUaGlzIG1lYW5zIHdlIGhhdmUgZXZlbiBtb3JlIGtlcm5lbCBsb2dpYyBub3cgZXhwb3NlZCBhbmQgdGhlcmVmb3JlIHJlYWNoYWJsZSBmcm9tIEJQRi4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZ1bmN0aW9ucywgdGhlc2UgYXJlIGRlZmluaXRlbHkgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIHRlc3RpbmcgdGhlbSB0aG9yb3VnaGx5LiBUbyBydW4gdGhlIHRlc3RzLCBpdCBsb29rcyBsaWtlIEkmIzM5O2xsIG5lZWQgYEJQRl9TWVNDQUxMYCwgYElORVRgLCBhbmQgYElQVjZgIGNvbmZpZ3VyZWQuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCBpbiBteSB0ZXN0IGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ljbXBfc2VuZCYjMzQ7LAogICAgJiMzNDtpcF9yb3V0ZV9yZXBseV9maWxsX2RzdCYjMzQ7LAogICAgJiMzNDtpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHRvIHNlbmQgSUNNUCBjb250cm9sIG1lc3NhZ2VzIGZyb20gQlBGIHByb2dyYW1zLCBhbmQgcmVmYWN0b3JzIHJvdXRpbmcgY29kZSB0byBleHBvcnQgYGlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0YCBhbmQgYGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdGAuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ljbXBfc2VuZCYjMzQ7LAogICAgJiMzNDtpcF9yb3V0ZV9yZXBseV9maWxsX2RzdCYjMzQ7LAogICAgJiMzNDtpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHRvIHNlbmQgSUNNUCBjb250cm9sIG1lc3NhZ2VzIGZyb20gQlBGIHByb2dyYW1zLCBhbmQgcmVmYWN0b3JzIHJvdXRpbmcgY29kZSB0byBleHBvcnQgYGlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0YCBhbmQgYGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdGAuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDEyOjI2OjUwLjc5MjMzODMyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MDE3NTUxMzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ljbXBfc2VuZFwiLFxuICAgIFwiaXBfcm91dGVfcmVwbHlfZmlsbF9kc3RcIixcbiAgICBcImlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaWNtcF9zZW5kYCB0byBzZW5kIElDTVAgY29udHJvbCBtZXNzYWdlcyBmcm9tIEJQRiBwcm9ncmFtcywgYW5kIHJlZmFjdG9ycyByb3V0aW5nIGNvZGUgdG8gZXhwb3J0IGBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdGAgYW5kIGBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3RgLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDEyOjI2OjUwLjc5MjM0NDM3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0NzE5NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmY4NGMxYTllY2ZiOWRmY2YyMzlmMDYzODdiZDczYjJkMjBjMjZkMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyMiAxMjoyNjo0OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuaW5kZXggMDlmZmUwZjEzY2U3NTIuLmViNWE2MGQzYmFiZTJhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcXG5AQCAtMTAwLDYgKzEwMCw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRzdF9lbnRyeSAqaXA2X3JvdXRlX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHJldHVybiBpcDZfcm91dGVfb3V0cHV0X2ZsYWdzKG5ldCwgc2ssIGZsNiwgMCk7XFxuIH1cXG4gXFxuK2ludCBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuK1xcbiAvKiBPbmx5IGNvbmRpdGlvbmFsbHkgcmVsZWFzZSBkc3QgaWYgZmxhZ3MgaW5kaWNhdGVzXFxuICAqICFSVDZfTE9PS1VQX0ZfRFNUX05PUkVGIG9yIGRzdCBpcyBpbiB1bmNhY2hlZF9saXN0LlxcbiAgKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcm91dGUuaCBiL2luY2x1ZGUvbmV0L3JvdXRlLmhcXG5pbmRleCBmOTAxMDZmMzgzYzU2ZC4uMzAwZDI5MmNkOWExZjMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvcm91dGUuaFxcbisrKyBiL2luY2x1ZGUvbmV0L3JvdXRlLmhcXG5AQCAtMTczLDYgKzE3Myw3IEBAIHN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9mbG93KHN0cnVjdCBuZXQgKiwgc3RydWN0IGZsb3dpNCAqZmxwLFxcbiBcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcXG4gc3RydWN0IGRzdF9lbnRyeSAqaXB2NF9ibGFja2hvbGVfcm91dGUoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRzdF9lbnRyeSAqZHN0X29yaWcpO1xcbitpbnQgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9rZXkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbHApXFxuIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDJlOTZiNGI4NDdjZTEyLi5mYzY5YTE0NjUwZTQyOSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXFxuQEAgLTg0LDYgKzg0LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQveGRwX3NvY2tfZHJ2LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaW5ldF9kc2NwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pY21wdjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9pY21wLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiZGV2LmhcXFwiXFxuIFxcbkBAIC0xMjU0Niw2ICsxMjU0OCwxMDEgQEAgX19icGZfa2Z1bmMgaW50IGJwZl94ZHBfcHVsbF9kYXRhKHN0cnVjdCB4ZHBfbWQgKngsIHUzMiBsZW4pXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKipcXG4rICogYnBmX2ljbXBfc2VuZCAtIFNlbmQgYW4gSUNNUCBjb250cm9sIG1lc3NhZ2VcXG4rICogQHNrYl9jdHg6IFBhY2tldCB0aGF0IHRyaWdnZXJlZCB0aGUgY29udHJvbCBtZXNzYWdlXFxuKyAqIEB0eXBlOiBJQ01QIHR5cGUgKG9ubHkgSUNNUF9ERVNUX1VOUkVBQ0gvSUNNUFY2X0RFU1RfVU5SRUFDSCBzdXBwb3J0ZWQpXFxuKyAqIEBjb2RlOiBJQ01QIGNvZGUgKDAtMTUgZm9yIElQdjQsIDAtNiBmb3IgSVB2NilcXG4rICpcXG4rICogU2VuZHMgYW4gSUNNUCBjb250cm9sIG1lc3NhZ2UgaW4gcmVzcG9uc2UgdG8gdGhlIHBhY2tldC4gVGhlIG9yaWdpbmFsIHBhY2tldFxcbisgKiBpcyBjbG9uZWQgYmVmb3JlIHNlbmRpbmcgdGhlIElDTVAgbWVzc2FnZSwgc28gdGhlIEJQRiBwcm9ncmFtIGNhbiBzdGlsbCBsZXRcXG4rICogdGhlIHBhY2tldCBwYXNzIGlmIGRlc2lyZWQuXFxuKyAqXFxuKyAqIEN1cnJlbnRseSBvbmx5IElDTVBfREVTVF9VTlJFQUNIIChJUHY0KSBhbmQgSUNNUFY2X0RFU1RfVU5SRUFDSCAoSVB2NikgYXJlXFxuKyAqIHN1cHBvcnRlZC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZTpcXG4rICogICAgICAgICAtRUlOVkFMOiBJbnZhbGlkIGNvZGUgcGFyYW1ldGVyXFxuKyAqICAgICAgICAgLUVCQURNU0c6IFBhY2tldCB0b28gc2hvcnQgb3IgbWFsZm9ybWVkXFxuKyAqICAgICAgICAgLUVOT01FTTogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXFxuKyAqICAgICAgICAgLUVCVVNZOiBSZWN1cnNpb24gZGV0ZWN0ZWRcXG4rICogICAgICAgICAtRUhPU1RVTlJFQUNIOiBSb3V0aW5nIGZhaWxlZFxcbisgKiAgICAgICAgIC1FUFJPVE9OT1NVUFBPUlQ6IE5vbi1JUCBwcm90b2NvbFxcbisgKiAgICAgICAgIC1FT1BOT1RTVVBQOiBVbnN1cHBvcnRlZCBJQ01QIHR5cGVcXG4rICovXFxuK19fYnBmX2tmdW5jIGludCBicGZfaWNtcF9zZW5kKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIGludCB0eXBlLCBpbnQgY29kZSlcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopc2tiX2N0eDtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XFxuK1xcdHN0cnVjdCBzb2NrICpzaztcXG4rXFxuK1xcdHNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTtcXG4rXFx0aWYgKHNrIFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19rZXJuX3NvY2sgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QIHx8IHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX0lDTVBWNikpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlcHJvdG9jb2wpIHtcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxuK1xcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbitcXHRcXHRpZiAodHlwZSAhPSBJQ01QX0RFU1RfVU5SRUFDSClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHRpZiAoY29kZSBcXHUwMDNjIDAgfHwgY29kZSBcXHUwMDNlIE5SX0lDTVBfVU5SRUFDSClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRuc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XFxuK1xcdFxcdGlmICghbnNrYilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRcXHRpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChuc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpIHtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKG5za2IpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghc2tiX2RzdChuc2tiKSBcXHUwMDI2XFx1MDAyNiBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChuc2tiKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKG5za2IpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVIT1NUVU5SRUFDSDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0bWVtc2V0KElQQ0IobnNrYiksIDAsIHNpemVvZihzdHJ1Y3QgaW5ldF9za2JfcGFybSkpO1xcbitcXG4rXFx0XFx0aWNtcF9zZW5kKG5za2IsIHR5cGUsIGNvZGUsIDApO1xcbitcXHRcXHRjb25zdW1lX3NrYihuc2tiKTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZlxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4rXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4rXFx0XFx0aWYgKHR5cGUgIT0gSUNNUFY2X0RFU1RfVU5SRUFDSClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHRpZiAoY29kZSBcXHUwMDNjIDAgfHwgY29kZSBcXHUwMDNlIElDTVBWNl9SRUpFQ1RfUk9VVEUpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0bnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xcbitcXHRcXHRpZiAoIW5za2IpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0XFx0aWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwobnNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKG5za2IpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVCQURNU0c7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghc2tiX2RzdChuc2tiKSBcXHUwMDI2XFx1MDAyNiBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3QobnNrYikgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYihuc2tiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG1lbXNldChJUDZDQihuc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0Nl9za2JfcGFybSkpO1xcbitcXG4rXFx0XFx0aWNtcHY2X3NlbmQobnNrYiwgdHlwZSwgY29kZSwgMCk7XFxuK1xcdFxcdGNvbnN1bWVfc2tiKG5za2IpO1xcbitcXHRcXHRicmVhaztcXG4rI2VuZGlmXFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gX19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4gXFxuIGludCBicGZfZHlucHRyX2Zyb21fc2tiX3Jkb25seShzdHJ1Y3QgX19za19idWZmICpza2IsIHU2NCBmbGFncyxcXG5AQCAtMTI1ODgsNiArMTI2ODUsMTAgQEAgQlRGX0tGVU5DU19TVEFSVChicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfb3BzX2VuYWJsZV90eF90c3RhbXApXFxuIEJURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfc29ja19vcHMpXFxuIFxcbitCVEZfS0ZVTkNTX1NUQVJUKGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2ljbXBfc2VuZClcXG4rQlRGX0tGVU5DU19FTkQoYnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQpXFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9za2IgPSB7XFxuIFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbiBcXHQuc2V0ID0gXFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfc2tiLFxcbkBAIC0xMjYxOCw2ICsxMjcxOSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9zb2NrX29wcyA9IHtcXG4gXFx0LnNldCA9IFxcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzLFxcbiB9O1xcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfaWNtcF9zZW5kID0ge1xcbitcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4rXFx0LnNldCA9IFxcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZCxcXG4rfTtcXG4rXFxuIHN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXFxuIHtcXG4gXFx0aW50IHJldDtcXG5AQCAtMTI2MzksNiArMTI3NDUsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxcbiBcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpO1xcbiBcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTtcXG4rXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9pY21wX3NlbmQpO1xcbitcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcXG4rXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1QsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XFxuIFxcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tfT1BTLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX29wcyk7XFxuIH1cXG4gbGF0ZV9pbml0Y2FsbChicGZfa2Z1bmNfaW5pdCk7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmNcXG5pbmRleCBmZWNmNjYyMWY2NzlmOS4uYzFjMDcyNGU0ZDRkZDQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmNcXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuY1xcbkBAIC0yNTIsMjEgKzI1Miw2IEBAIHN0YXRpYyB2b2lkIG5mX3JlamVjdF9pcF90Y3BoZHJfcHV0KHN0cnVjdCBza19idWZmICpuc2tiLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqXFxuIFxcdG5za2ItXFx1MDAzZWNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbilcXG4te1xcbi1cXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgZmxvd2kgZmw7XFxuLVxcbi1cXHRtZW1zZXQoXFx1MDAyNmZsLCAwLCBzaXplb2Yoc3RydWN0IGZsb3dpKSk7XFxuLVxcdGZsLnUuaXA0LmRhZGRyID0gaXBfaGRyKHNrYl9pbiktXFx1MDAzZXNhZGRyO1xcbi1cXHRuZl9pcF9yb3V0ZShkZXZfbmV0KHNrYl9pbi1cXHUwMDNlZGV2KSwgXFx1MDAyNmRzdCwgXFx1MDAyNmZsLCBmYWxzZSk7XFxuLVxcdGlmICghZHN0KVxcbi1cXHRcXHRyZXR1cm4gLTE7XFxuLVxcbi1cXHRza2JfZHN0X3NldChza2JfaW4sIGRzdCk7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiAvKiBTZW5kIFJTVCByZXBseSAqL1xcbiB2b2lkIG5mX3NlbmRfcmVzZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvbGRza2IsXFxuIFxcdFxcdCAgIGludCBob29rKVxcbkBAIC0yNzksNyArMjY0LDcgQEAgdm9pZCBuZl9zZW5kX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxcbiBcXHRpZiAoIW90aClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0aWYgKCFza2JfZHN0KG9sZHNrYikgXFx1MDAyNlxcdTAwMjYgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChvbGRza2IpIFxcdTAwM2MgMClcXG4rXFx0aWYgKCFza2JfZHN0KG9sZHNrYikgXFx1MDAyNlxcdTAwMjYgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qob2xkc2tiKSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmIChza2JfcnRhYmxlKG9sZHNrYiktXFx1MDAzZXJ0X2ZsYWdzIFxcdTAwMjYgKFJUQ0ZfQlJPQURDQVNUIHwgUlRDRl9NVUxUSUNBU1QpKVxcbkBAIC0zNTIsNyArMzM3LDcgQEAgdm9pZCBuZl9zZW5kX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IGNvZGUsIGludCBob29rKVxcbiBcXHRpZiAoaXBoLVxcdTAwM2VmcmFnX29mZiBcXHUwMDI2IGh0b25zKElQX09GRlNFVCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmICghc2tiX2RzdChza2JfaW4pIFxcdTAwMjZcXHUwMDI2IG5mX3JlamVjdF9maWxsX3NrYl9kc3Qoc2tiX2luKSBcXHUwMDNjIDApXFxuK1xcdGlmICghc2tiX2RzdChza2JfaW4pIFxcdTAwMjZcXHUwMDI2IGlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0KHNrYl9pbikgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiX2luKSB8fFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuY1xcbmluZGV4IDNmM2RlNTE2NGQ2ZTU4Li5mMjQ2MDk5MzNmYmVjYiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9yb3V0ZS5jXFxuKysrIGIvbmV0L2lwdjQvcm91dGUuY1xcbkBAIC0yOTQyLDYgKzI5NDIsMjEgQEAgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2Zsb3coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbHA0LFxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGlwX3JvdXRlX291dHB1dF9mbG93KTtcXG4gXFxuK2ludCBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBydGFibGUgKnJ0O1xcbitcXHRzdHJ1Y3QgZmxvd2k0IGZsNCA9IHtcXG4rXFx0XFx0LmRhZGRyID0gaXBfaGRyKHNrYiktXFx1MDAzZXNhZGRyXFxuK1xcdH07XFxuK1xcbitcXHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkoZGV2X25ldChza2ItXFx1MDAzZWRldiksIFxcdTAwMjZmbDQpO1xcbitcXHRpZiAoSVNfRVJSKHJ0KSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIocnQpO1xcbitcXHRza2JfZHN0X3NldChza2IsIFxcdTAwMjZydC1cXHUwMDNlZHN0KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoaXBfcm91dGVfcmVwbHlfZmlsbF9kc3QpO1xcbitcXG4gLyogY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayBoZWxkICovXFxuIHN0YXRpYyBpbnQgcnRfZmlsbF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGRzdCwgX19iZTMyIHNyYyxcXG4gXFx0XFx0XFx0c3RydWN0IHJ0YWJsZSAqcnQsIHUzMiB0YWJsZV9pZCwgZHNjcF90IGRzY3AsXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmNcXG5pbmRleCBlZjViN2U4NWNmZmE4YS4uN2QyZjU3N2U3MmI4ODIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmNcXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuY1xcbkBAIC0yOTMsMjEgKzI5Myw2IEBAIG5mX3JlamVjdF9pcDZfdGNwaGRyX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqbnNrYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpLCAwKSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbmZfcmVqZWN0Nl9maWxsX3NrYl9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbilcXG4te1xcbi1cXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgZmxvd2kgZmw7XFxuLVxcbi1cXHRtZW1zZXQoXFx1MDAyNmZsLCAwLCBzaXplb2Yoc3RydWN0IGZsb3dpKSk7XFxuLVxcdGZsLnUuaXA2LmRhZGRyID0gaXB2Nl9oZHIoc2tiX2luKS1cXHUwMDNlc2FkZHI7XFxuLVxcdG5mX2lwNl9yb3V0ZShkZXZfbmV0KHNrYl9pbi1cXHUwMDNlZGV2KSwgXFx1MDAyNmRzdCwgXFx1MDAyNmZsLCBmYWxzZSk7XFxuLVxcdGlmICghZHN0KVxcbi1cXHRcXHRyZXR1cm4gLTE7XFxuLVxcbi1cXHRza2JfZHN0X3NldChza2JfaW4sIGRzdCk7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiB2b2lkIG5mX3NlbmRfcmVzZXQ2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxcbiBcXHRcXHQgICAgaW50IGhvb2spXFxuIHtcXG5AQCAtNDQwLDcgKzQyNSw3IEBAIHZvaWQgbmZfc2VuZF91bnJlYWNoNihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2JfaW4sXFxuIFxcdGlmIChob29rbnVtID09IE5GX0lORVRfTE9DQUxfT1VUIFxcdTAwMjZcXHUwMDI2IHNrYl9pbi1cXHUwMDNlZGV2ID09IE5VTEwpXFxuIFxcdFxcdHNrYl9pbi1cXHUwMDNlZGV2ID0gbmV0LVxcdTAwM2Vsb29wYmFja19kZXY7XFxuIFxcbi1cXHRpZiAoIXNrYl9kc3Qoc2tiX2luKSBcXHUwMDI2XFx1MDAyNiBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChza2JfaW4pIFxcdTAwM2MgMClcXG4rXFx0aWYgKCFza2JfZHN0KHNrYl9pbikgXFx1MDAyNlxcdTAwMjYgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0KHNrYl9pbikgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpY21wdjZfc2VuZChza2JfaW4sIElDTVBWNl9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xcbmluZGV4IDYzNjFhZDJmY2Y3NzE1Li4wZmE1NmM4MDExNzgxNiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXFxuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xcbkBAIC0yNzMyLDYgKzI3MzIsMjQgQEAgc3RydWN0IGRzdF9lbnRyeSAqaXA2X3JvdXRlX291dHB1dF9mbGFncyhzdHJ1Y3QgbmV0ICpuZXQsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoaXA2X3JvdXRlX291dHB1dF9mbGFncyk7XFxuIFxcbitpbnQgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0KHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGRzdF9lbnRyeSAqcmVzdWx0O1xcbitcXHRzdHJ1Y3QgZmxvd2k2IGZsID0ge1xcbitcXHRcXHQuZGFkZHIgPSBpcHY2X2hkcihza2IpLVxcdTAwM2VzYWRkclxcbitcXHR9O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0cmVzdWx0ID0gaXA2X3JvdXRlX291dHB1dChkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgXFx1MDAyNmZsKTtcXG4rXFx0ZXJyID0gcmVzdWx0LVxcdTAwM2VlcnJvcjtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0ZHN0X3JlbGVhc2UocmVzdWx0KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRza2JfZHN0X3NldChza2IsIHJlc3VsdCk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0KTtcXG4rXFxuIHN0cnVjdCBkc3RfZW50cnkgKmlwNl9ibGFja2hvbGVfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Rfb3JpZylcXG4ge1xcbiBcXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqb3J0ID0gZHN0X3J0Nl9pbmZvKGRzdF9vcmlnKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaWNtcF9zZW5kX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pY21wX3NlbmRfa2Z1bmMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmZkNGI4ZmE3OGEwMTg0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ljbXBfc2VuZF9rZnVuYy5jXFxuQEAgLTAsMCArMSwyNTAgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldHdvcmtfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjY2dyb3VwX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VycnF1ZXVlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nwb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImljbXBfc2VuZC5za2VsLmhcXFwiXFxuK1xcbisjZGVmaW5lIFRJTUVPVVRfTVMgMTAwMFxcbitcXG4rI2RlZmluZSBJQ01QX0RFU1RfVU5SRUFDSCAzXFxuKyNkZWZpbmUgSUNNUFY2X0RFU1RfVU5SRUFDSCAxXFxuK1xcbisjZGVmaW5lIElDTVBfSE9TVF9VTlJFQUNIIDFcXG4rI2RlZmluZSBJQ01QX0ZSQUdfTkVFREVEIDRcXG4rI2RlZmluZSBOUl9JQ01QX1VOUkVBQ0ggMTVcXG4rI2RlZmluZSBJQ01QVjZfUkVKRUNUX1JPVVRFIDZcXG4rXFxuK3N0YXRpYyBpbnQgY29ubmVjdF90b19mZF9ub25ibG9jayhpbnQgc2VydmVyX2ZkKVxcbit7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7XFxuK1xcdHNvY2tsZW5fdCBsZW4gPSBzaXplb2YoYWRkcik7XFxuK1xcdGludCBmZCwgZXJyLCBvbiA9IDE7XFxuK1xcbitcXHRpZiAoZ2V0c29ja25hbWUoc2VydmVyX2ZkLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmFkZHIsIFxcdTAwMjZsZW4pKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRmZCA9IHNvY2tldChhZGRyLnNzX2ZhbWlseSwgU09DS19TVFJFQU0gfCBTT0NLX05PTkJMT0NLLCAwKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0aWYgKGFkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfUkVDVkVSUiwgXFx1MDAyNm9uLCBzaXplb2Yob24pKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2YWRkciwgbGVuKTtcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJybm8gIT0gRUlOUFJPR1JFU1MpIHtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmZDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVhZF9pY21wX2VycnF1ZXVlKGludCBzb2NrZmQsIGludCBleHBlY3RlZF9jb2RlLCBpbnQgYWYpXFxuK3tcXG4rXFx0aW50IGV4cGVjdGVkX2VlX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJQ01QX0RFU1RfVU5SRUFDSCA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBJQ01QVjZfREVTVF9VTlJFQUNIO1xcbitcXHRpbnQgZXhwZWN0ZWRfb3JpZ2luID0gKGFmID09IEFGX0lORVQpID8gU09fRUVfT1JJR0lOX0lDTVAgOlxcbitcXHRcXHRcXHRcXHRcXHRcXHRTT19FRV9PUklHSU5fSUNNUDY7XFxuK1xcdGludCBleHBlY3RlZF9sZXZlbCA9IChhZiA9PSBBRl9JTkVUKSA/IElQUFJPVE9fSVAgOiBJUFBST1RPX0lQVjY7XFxuK1xcdGludCBleHBlY3RlZF90eXBlID0gKGFmID09IEFGX0lORVQpID8gSVBfUkVDVkVSUiA6IElQVjZfUkVDVkVSUjtcXG4rXFx0c3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICpzb2NrX2VycjtcXG4rXFx0Y2hhciBjdHJsX2J1Zls1MTJdO1xcbitcXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcXG4rXFx0XFx0Lm1zZ19jb250cm9sID0gY3RybF9idWYsXFxuK1xcdFxcdC5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjdHJsX2J1ZiksXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBwb2xsZmQgcGZkID0ge1xcbitcXHRcXHQuZmQgPSBzb2NrZmQsXFxuK1xcdFxcdC5ldmVudHMgPSBQT0xMRVJSLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgY21zZ2hkciAqY207XFxuK1xcdHNzaXplX3QgbjtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0dFKHBvbGwoXFx1MDAyNnBmZCwgMSwgVElNRU9VVF9NUyksIDEsIFxcXCJwb2xsX2VycnF1ZXVlXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG4gPSByZWN2bXNnKHNvY2tmZCwgXFx1MDAyNm1zZywgTVNHX0VSUlFVRVVFKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UobiwgMCwgXFxcInJlY3Ztc2dfZXJycXVldWVcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y20gPSBDTVNHX0ZJUlNUSERSKFxcdTAwMjZtc2cpO1xcbitcXHRpZiAoIUFTU0VSVF9ORVEoY20sIE5VTEwsIFxcXCJjbV9maXJzdGhkcl9udWxsXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoOyBjbTsgY20gPSBDTVNHX05YVEhEUihcXHUwMDI2bXNnLCBjbSkpIHtcXG4rXFx0XFx0aWYgKGNtLVxcdTAwM2VjbXNnX2xldmVsICE9IGV4cGVjdGVkX2xldmVsIHx8XFxuK1xcdFxcdCAgICBjbS1cXHUwMDNlY21zZ190eXBlICE9IGV4cGVjdGVkX3R5cGUpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0c29ja19lcnIgPSAoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtKTtcXG4rXFxuK1xcdFxcdGlmICghQVNTRVJUX0VRKHNvY2tfZXJyLVxcdTAwM2VlZV9vcmlnaW4sIGV4cGVjdGVkX29yaWdpbixcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJzb2NrX2Vycl9vcmlnaW5cXFwiKSlcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9FUShzb2NrX2Vyci1cXHUwMDNlZWVfdHlwZSwgZXhwZWN0ZWRfZWVfdHlwZSxcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJzb2NrX2Vycl90eXBlX2Rlc3RfdW5yZWFjaFxcXCIpKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdEFTU0VSVF9FUShzb2NrX2Vyci1cXHUwMDNlZWVfY29kZSwgZXhwZWN0ZWRfY29kZSwgXFxcInNvY2tfZXJyX2NvZGVcXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRBU1NFUlRfRkFJTChcXFwibm8gSVBfUkVDVkVSUi9JUFY2X1JFQ1ZFUlIgY29udHJvbCBtZXNzYWdlIGZvdW5kXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc3RydWN0IGljbXBfc2VuZCAqc2tlbCwgaW50IGNvZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBpbnQgYWYsIGNvbnN0IGNoYXIgKmlwKVxcbit7XFxuK1xcdGludCBzcnZfZmQgPSAtMSwgY2xpZW50X2ZkID0gLTE7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyO1xcbitcXHRzb2NrbGVuX3QgbGVuID0gc2l6ZW9mKGFkZHIpO1xcbitcXG4rXFx0c3J2X2ZkID0gc3RhcnRfc2VydmVyKGFmLCBTT0NLX1NUUkVBTSwgaXAsIDAsIFRJTUVPVVRfTVMpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19GRChzcnZfZmQsIFxcXCJzdGFydF9zZXJ2ZXJcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKGdldHNvY2tuYW1lKHNydl9mZCwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZhZGRyLCBcXHUwMDI2bGVuKSkge1xcbitcXHRcXHRjbG9zZShzcnZfZmQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzZXJ2ZXJfcG9ydCA9IG50b2hzKGFkZHIuc2luX3BvcnQpO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXVucmVhY2hfdHlwZSA9IChhZiA9PSBBRl9JTkVUKSA/IElDTVBfREVTVF9VTlJFQUNIIDpcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIElDTVBWNl9ERVNUX1VOUkVBQ0g7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldW5yZWFjaF9jb2RlID0gY29kZTtcXG4rXFxuK1xcdGNsaWVudF9mZCA9IGNvbm5lY3RfdG9fZmRfbm9uYmxvY2soc3J2X2ZkKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoY2xpZW50X2ZkLCBcXFwiY2xpZW50X2Nvbm5lY3Rfbm9uYmxvY2tcXFwiKSkge1xcbitcXHRcXHRjbG9zZShzcnZfZmQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFNraXAgcmVhZGluZyBJQ01QIGVycm9yIHF1ZXVlIGlmIGNvZGUgaXMgaW52YWxpZCAqL1xcbitcXHRpZiAoY29kZSBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2ICgoYWYgPT0gQUZfSU5FVCBcXHUwMDI2XFx1MDAyNiBjb2RlIFxcdTAwM2M9IE5SX0lDTVBfVU5SRUFDSCkgfHxcXG4rXFx0XFx0XFx0ICAoYWYgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjYgY29kZSBcXHUwMDNjPSBJQ01QVjZfUkVKRUNUX1JPVVRFKSkpXFxuK1xcdFxcdHJlYWRfaWNtcF9lcnJxdWV1ZShjbGllbnRfZmQsIGNvZGUsIGFmKTtcXG4rXFxuK1xcdGNsb3NlKGNsaWVudF9mZCk7XFxuK1xcdGNsb3NlKHNydl9mZCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl9pY21wX3Rlc3Qoc3RydWN0IGljbXBfc2VuZCAqc2tlbCwgaW50IGFmLCBjb25zdCBjaGFyICppcCxcXG4rXFx0XFx0XFx0ICBpbnQgbWF4X2NvZGUpXFxuK3tcXG4rXFx0Zm9yIChpbnQgY29kZSA9IDA7IGNvZGUgXFx1MDAzYz0gbWF4X2NvZGU7IGNvZGUrKykge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgVENQIHN0YWNrIHJlYWN0cyBkaWZmZXJlbnRseSB3aGVuIGFza2luZyBmb3JcXG4rXFx0XFx0ICogZnJhZ21lbnRhdGlvbiwgbGV0J3MgaWdub3JlIGl0IGZvciBub3cuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoYWYgPT0gQUZfSU5FVCBcXHUwMDI2XFx1MDAyNiBjb2RlID09IElDTVBfRlJBR19ORUVERUQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0dHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCBjb2RlLCBhZiwgaXApO1xcbitcXHRcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNla2Z1bmNfcmV0LCAwLCBcXFwia2Z1bmNfcmV0XFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRlc3QgYW4gaW52YWxpZCBjb2RlICovXFxuK1xcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgLTEsIGFmLCBpcCk7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VrZnVuY19yZXQsIC1FSU5WQUwsIFxcXCJrZnVuY19yZXRcXFwiKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2ljbXBfc2VuZF91bnJlYWNoX2Nncm91cCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBpY21wX3NlbmQgKnNrZWw7XFxuK1xcdGludCBjZ3JvdXBfZmQgPSAtMTtcXG4rXFxuK1xcdHNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5cXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0Y2dyb3VwX2ZkID0gdGVzdF9fam9pbl9jZ3JvdXAoXFxcIi9pY21wX3NlbmRfdW5yZWFjaF9jZ3JvdXBcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoY2dyb3VwX2ZkLCBcXFwiam9pbl9jZ3JvdXBcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlbGlua3MuZWdyZXNzID1cXG4rXFx0XFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cXHUwMDNlcHJvZ3MuZWdyZXNzLCBjZ3JvdXBfZmQpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlbGlua3MuZWdyZXNzLCBcXFwicHJvZ19hdHRhY2hfY2dyb3VwXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJpcHY0XFxcIikpXFxuK1xcdFxcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVCwgXFxcIjEyNy4wLjAuMVxcXCIsIE5SX0lDTVBfVU5SRUFDSCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaXB2NlxcXCIpKVxcbitcXHRcXHRydW5faWNtcF90ZXN0KHNrZWwsIEFGX0lORVQ2LCBcXFwiOjoxXFxcIiwgSUNNUFY2X1JFSkVDVF9ST1VURSk7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRpY21wX3NlbmRfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcdGlmIChjZ3JvdXBfZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoY2dyb3VwX2ZkKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2ljbXBfc2VuZF91bnJlYWNoX3RjKHZvaWQpXFxuK3tcXG4rXFx0TElCQlBGX09QVFMoYnBmX3RjeF9vcHRzLCBvcHRzKTtcXG4rXFx0c3RydWN0IGljbXBfc2VuZCAqc2tlbDtcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDtcXG4rXFxuK1xcdHNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5cXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdGN4KHNrZWwtXFx1MDAzZXByb2dzLnRjX2VncmVzcywgMSwgXFx1MDAyNm9wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXFxcInByb2dfYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJpcHY0XFxcIikpXFxuK1xcdFxcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVCwgXFxcIjEyNy4wLjAuMVxcXCIsIE5SX0lDTVBfVU5SRUFDSCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaXB2NlxcXCIpKVxcbitcXHRcXHRydW5faWNtcF90ZXN0KHNrZWwsIEFGX0lORVQ2LCBcXFwiOjoxXFxcIiwgSUNNUFY2X1JFSkVDVF9ST1VURSk7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcXG4rXFx0aWNtcF9zZW5kX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbit2b2lkIHRlc3RfaWNtcF9zZW5kX3VucmVhY2hfcmVjdXJzaW9uKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGljbXBfc2VuZCAqc2tlbDtcXG4rXFx0aW50IGNncm91cF9mZCA9IC0xO1xcbitcXG4rXFx0c2tlbCA9IGljbXBfc2VuZF9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInNrZWxfb3BlblxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRpZiAoc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCkpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJGYWlsZWQgdG8gc2V0dXAgY2dyb3VwIGVudmlyb25tZW50XFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRjZ3JvdXBfZmQgPSBnZXRfcm9vdF9jZ3JvdXAoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoY2dyb3VwX2ZkLCBcXFwiZ2V0X3Jvb3RfY2dyb3VwXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXRhcmdldF9waWQgPSBnZXRwaWQoKTtcXG4rXFx0c2tlbC1cXHUwMDNlbGlua3MucmVjdXJzaW9uID1cXG4rXFx0XFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cXHUwMDNlcHJvZ3MucmVjdXJzaW9uLCBjZ3JvdXBfZmQpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlbGlua3MucmVjdXJzaW9uLCBcXFwicHJvZ19hdHRhY2hfY2dyb3VwXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgSUNNUF9IT1NUX1VOUkVBQ0gsIEFGX0lORVQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCIxMjcuMC4wLjFcXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEJlY2F1c2UgdGhlcmUncyByZWN1cnNpb24gaW52b2x2ZWQsIHRoZSBmaXJzdCBjYWxsIHdpbGwgcmV0dXJuIGF0XFxuK1xcdCAqIGluZGV4IDEgc2luY2UgaXQgd2lsbCByZXR1cm4gdGhlIHNlY29uZCwgYW5kIHRoZSBzZWNvbmQgY2FsbCB3aWxsXFxuK1xcdCAqIHJldHVybiBhdCBpbmRleCAwIHNpbmNlIGl0IHdpbGwgcmV0dXJuIHRoZSBmaXJzdC5cXG4rXFx0ICovXFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VyZWNfa2Z1bmNfcmV0c1swXSwgLUVCVVNZLCBcXFwia2Z1bmNfcmV0c1swXVxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNlcmVjX2tmdW5jX3JldHNbMV0sIDAsIFxcXCJrZnVuY19yZXRzWzFdXFxcIik7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xcbitcXHRpY21wX3NlbmRfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcdGlmIChjZ3JvdXBfZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoY2dyb3VwX2ZkKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mZDljNzY4NDc5N2IwN1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmNcXG5AQCAtMCwwICsxLDE4NCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2VuZGlhbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX3RyYWNpbmdfbmV0LmhcXFwiXFxuK1xcbisvKiAxMjcuMC4wLjEgaW4gaG9zdCBieXRlIG9yZGVyICovXFxuKyNkZWZpbmUgU0VSVkVSX0lQIDB4N0YwMDAwMDFcXG4rLyogOjoxIGluIGhvc3QgYnl0ZSBvcmRlciAobGFzdCAzMi1iaXQgd29yZCkgKi9cXG4rI2RlZmluZSBTRVJWRVJfSVA2X0xPIDB4MDAwMDAwMDFcXG4rXFxuK19fdTE2IHNlcnZlcl9wb3J0ID0gMDtcXG4raW50IHVucmVhY2hfdHlwZSA9IDA7XFxuK2ludCB1bnJlYWNoX2NvZGUgPSAwO1xcbitpbnQga2Z1bmNfcmV0ID0gLTE7XFxuK2ludCB0YXJnZXRfcGlkID0gLTE7XFxuK1xcbit1bnNpZ25lZCBpbnQgcmVjX2NvdW50ID0gMDtcXG4raW50IHJlY19rZnVuY19yZXRzW10gPSB7IC0xLCAtMSB9O1xcbitcXG4rU0VDKFxcXCJjZ3JvdXBfc2tiL2VncmVzc1xcXCIpXFxuK2ludCBlZ3Jlc3Moc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cXHUwMDNlZGF0YTtcXG4rXFx0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cXHUwMDNlZGF0YV9lbmQ7XFxuK1xcdHN0cnVjdCBpcGhkciAqaXBoO1xcbitcXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcXG4rXFx0c3RydWN0IHRjcGhkciAqdGNwaDtcXG4rXFx0X191OCB2ZXJzaW9uO1xcbitcXG4rXFx0aWYgKGRhdGEgKyAxIFxcdTAwM2UgZGF0YV9lbmQpXFxuK1xcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXG4rXFx0dmVyc2lvbiA9ICgqKChfX3U4ICopZGF0YSkpIFxcdTAwM2VcXHUwMDNlIDQ7XFxuK1xcbitcXHRpZiAodmVyc2lvbiA9PSA0KSB7XFxuK1xcdFxcdGlwaCA9IGRhdGE7XFxuK1xcdFxcdGlmICgodm9pZCAqKShpcGggKyAxKSBcXHUwMDNlIGRhdGFfZW5kIHx8XFxuK1xcdFxcdCAgICBpcGgtXFx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fVENQIHx8XFxuK1xcdFxcdCAgICBpcGgtXFx1MDAzZWRhZGRyICE9IGJwZl9odG9ubChTRVJWRVJfSVApKVxcbitcXHRcXHRcXHRyZXR1cm4gU0tfUEFTUztcXG4rXFxuK1xcdFxcdHRjcGggPSAodm9pZCAqKWlwaCArIGlwaC1cXHUwMDNlaWhsICogNDtcXG4rXFx0XFx0aWYgKCh2b2lkICopKHRjcGggKyAxKSBcXHUwMDNlIGRhdGFfZW5kIHx8XFxuK1xcdFxcdCAgICB0Y3BoLVxcdTAwM2VkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpXFxuK1xcdFxcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXG4rXFx0fSBlbHNlIGlmICh2ZXJzaW9uID09IDYpIHtcXG4rXFx0XFx0aXA2aCA9IGRhdGE7XFxuK1xcdFxcdGlmICgodm9pZCAqKShpcDZoICsgMSkgXFx1MDAzZSBkYXRhX2VuZCB8fFxcbitcXHRcXHQgICAgaXA2aC1cXHUwMDNlbmV4dGhkciAhPSBJUFBST1RPX1RDUClcXG4rXFx0XFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxuK1xcbitcXHRcXHRpZiAoaXA2aC1cXHUwMDNlZGFkZHIuaW42X3UudTZfYWRkcjMyWzBdICE9IDAgfHxcXG4rXFx0XFx0ICAgIGlwNmgtXFx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlsxXSAhPSAwIHx8XFxuK1xcdFxcdCAgICBpcDZoLVxcdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMl0gIT0gMCB8fFxcbitcXHRcXHQgICAgaXA2aC1cXHUwMDNlZGFkZHIuaW42X3UudTZfYWRkcjMyWzNdICE9IGJwZl9odG9ubChTRVJWRVJfSVA2X0xPKSlcXG4rXFx0XFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxuK1xcbitcXHRcXHR0Y3BoID0gKHZvaWQgKikoaXA2aCArIDEpO1xcbitcXHRcXHRpZiAoKHZvaWQgKikodGNwaCArIDEpIFxcdTAwM2UgZGF0YV9lbmQgfHxcXG4rXFx0XFx0ICAgIHRjcGgtXFx1MDAzZWRlc3QgIT0gYnBmX2h0b25zKHNlcnZlcl9wb3J0KSlcXG4rXFx0XFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXHR9XFxuK1xcbitcXHRrZnVuY19yZXQgPSBicGZfaWNtcF9zZW5kKHNrYiwgdW5yZWFjaF90eXBlLCB1bnJlYWNoX2NvZGUpO1xcbitcXG4rXFx0cmV0dXJuIFNLX0RST1A7XFxuK31cXG4rXFxuK1NFQyhcXFwidGMvZWdyZXNzXFxcIilcXG4raW50IHRjX2VncmVzcyhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLVxcdTAwM2VkYXRhO1xcbitcXHR2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpc2tiLVxcdTAwM2VkYXRhX2VuZDtcXG4rXFx0c3RydWN0IGV0aGhkciAqZXRoO1xcbitcXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4rXFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XFxuK1xcdHN0cnVjdCB0Y3BoZHIgKnRjcGg7XFxuK1xcbitcXHRldGggPSBkYXRhO1xcbitcXHRpZiAoKHZvaWQgKikoZXRoICsgMSkgXFx1MDAzZSBkYXRhX2VuZClcXG4rXFx0XFx0cmV0dXJuIFRDWF9QQVNTO1xcbitcXG4rXFx0aWYgKGV0aC1cXHUwMDNlaF9wcm90byA9PSBicGZfaHRvbnMoRVRIX1BfSVApKSB7XFxuK1xcdFxcdGlwaCA9ICh2b2lkICopKGV0aCArIDEpO1xcbitcXHRcXHRpZiAoKHZvaWQgKikoaXBoICsgMSkgXFx1MDAzZSBkYXRhX2VuZClcXG4rXFx0XFx0XFx0cmV0dXJuIFRDWF9QQVNTO1xcbitcXG4rXFx0XFx0aWYgKGlwaC1cXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgfHxcXG4rXFx0XFx0ICAgIGlwaC1cXHUwMDNlZGFkZHIgIT0gYnBmX2h0b25sKFNFUlZFUl9JUCkpXFxuK1xcdFxcdFxcdHJldHVybiBUQ1hfUEFTUztcXG4rXFxuK1xcdFxcdHRjcGggPSAodm9pZCAqKWlwaCArIGlwaC1cXHUwMDNlaWhsICogNDtcXG4rXFx0XFx0aWYgKCh2b2lkICopKHRjcGggKyAxKSBcXHUwMDNlIGRhdGFfZW5kKVxcbitcXHRcXHRcXHRyZXR1cm4gVENYX1BBU1M7XFxuK1xcbitcXHRcXHRpZiAodGNwaC1cXHUwMDNlZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKVxcbitcXHRcXHRcXHRyZXR1cm4gVENYX1BBU1M7XFxuK1xcbitcXHR9IGVsc2UgaWYgKGV0aC1cXHUwMDNlaF9wcm90byA9PSBicGZfaHRvbnMoRVRIX1BfSVBWNikpIHtcXG4rXFx0XFx0aXA2aCA9ICh2b2lkICopKGV0aCArIDEpO1xcbitcXHRcXHRpZiAoKHZvaWQgKikoaXA2aCArIDEpIFxcdTAwM2UgZGF0YV9lbmQpXFxuK1xcdFxcdFxcdHJldHVybiBUQ1hfUEFTUztcXG4rXFxuK1xcdFxcdGlmIChpcDZoLVxcdTAwM2VuZXh0aGRyICE9IElQUFJPVE9fVENQKVxcbitcXHRcXHRcXHRyZXR1cm4gVENYX1BBU1M7XFxuK1xcbitcXHRcXHRpZiAoaXA2aC1cXHUwMDNlZGFkZHIuaW42X3UudTZfYWRkcjMyWzBdICE9IDAgfHxcXG4rXFx0XFx0ICAgIGlwNmgtXFx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlsxXSAhPSAwIHx8XFxuK1xcdFxcdCAgICBpcDZoLVxcdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMl0gIT0gMCB8fFxcbitcXHRcXHQgICAgaXA2aC1cXHUwMDNlZGFkZHIuaW42X3UudTZfYWRkcjMyWzNdICE9IGJwZl9odG9ubChTRVJWRVJfSVA2X0xPKSlcXG4rXFx0XFx0XFx0cmV0dXJuIFRDWF9QQVNTO1xcbitcXG4rXFx0XFx0dGNwaCA9ICh2b2lkICopKGlwNmggKyAxKTtcXG4rXFx0XFx0aWYgKCh2b2lkICopKHRjcGggKyAxKSBcXHUwMDNlIGRhdGFfZW5kKVxcbitcXHRcXHRcXHRyZXR1cm4gVENYX1BBU1M7XFxuK1xcbitcXHRcXHRpZiAodGNwaC1cXHUwMDNlZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKVxcbitcXHRcXHRcXHRyZXR1cm4gVENYX1BBU1M7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldHVybiBUQ1hfUEFTUztcXG4rXFx0fVxcbitcXG4rXFx0a2Z1bmNfcmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTtcXG4rXFxuK1xcdHJldHVybiBUQ1hfRFJPUDtcXG4rfVxcbitcXG4rU0VDKFxcXCJjZ3JvdXBfc2tiL2VncmVzc1xcXCIpXFxuK2ludCByZWN1cnNpb24oc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cXHUwMDNlZGF0YTtcXG4rXFx0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cXHUwMDNlZGF0YV9lbmQ7XFxuK1xcdHN0cnVjdCBpY21waGRyICppY21waDtcXG4rXFx0c3RydWN0IHRjcGhkciAqdGNwaDtcXG4rXFx0c3RydWN0IGlwaGRyICppcGg7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoKGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFxcdTAwM2VcXHUwMDNlIDMyKSAhPSB0YXJnZXRfcGlkKVxcbitcXHRcXHRyZXR1cm4gU0tfUEFTUztcXG4rXFxuK1xcdGlwaCA9IGRhdGE7XFxuK1xcdGlmICgodm9pZCAqKShpcGggKyAxKSBcXHUwMDNlIGRhdGFfZW5kIHx8IGlwaC1cXHUwMDNldmVyc2lvbiAhPSA0KVxcbitcXHRcXHRyZXR1cm4gU0tfUEFTUztcXG4rXFxuK1xcdGlmIChpcGgtXFx1MDAzZWRhZGRyICE9IGJwZl9odG9ubChTRVJWRVJfSVApKVxcbitcXHRcXHRyZXR1cm4gU0tfUEFTUztcXG4rXFxuK1xcdGlmIChpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQKSB7XFxuK1xcdFxcdHRjcGggPSAodm9pZCAqKWlwaCArIGlwaC1cXHUwMDNlaWhsICogNDtcXG4rXFx0XFx0aWYgKCh2b2lkICopKHRjcGggKyAxKSBcXHUwMDNlIGRhdGFfZW5kIHx8XFxuK1xcdFxcdCAgICB0Y3BoLVxcdTAwM2VkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpXFxuK1xcdFxcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXHR9IGVsc2UgaWYgKGlwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSB7XFxuK1xcdFxcdGljbXBoID0gKHZvaWQgKilpcGggKyBpcGgtXFx1MDAzZWlobCAqIDQ7XFxuK1xcdFxcdGlmICgodm9pZCAqKShpY21waCArIDEpIFxcdTAwM2UgZGF0YV9lbmQgfHxcXG4rXFx0XFx0ICAgIGljbXBoLVxcdTAwM2V0eXBlICE9IHVucmVhY2hfdHlwZSB8fFxcbitcXHRcXHQgICAgaWNtcGgtXFx1MDAzZWNvZGUgIT0gdW5yZWFjaF9jb2RlKVxcbitcXHRcXHRcXHRyZXR1cm4gU0tfUEFTUztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoaXMgY2FsbCB3aWxsIHByb3Zva2UgYSByZWN1cnNpb246IHRoZSBJQ01QIHBhY2tldCBnZW5lcmF0ZWQgYnkgdGhlXFxuK1xcdCAqIGtmdW5jIHdpbGwgcmUtdHJpZ2dlciB0aGlzIHByb2dyYW0gc2luY2Ugd2UgYXJlIGluIHRoZSByb290IGNncm91cCBpblxcbitcXHQgKiB3aGljaCB0aGUga2VybmVsIElDTVAgc29ja2V0IGJlbG9uZ3MuIEhvd2V2ZXIgd2hlbiByZS1lbnRlcmluZyB0aGVcXG4rXFx0ICoga2Z1bmMsIGl0IHNob3VsZCByZXR1cm4gRUJVU1kuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSBicGZfaWNtcF9zZW5kKHNrYiwgdW5yZWFjaF90eXBlLCB1bnJlYWNoX2NvZGUpO1xcbitcXHRyZWNfa2Z1bmNfcmV0c1tyZWNfY291bnQgXFx1MDAyNiAxXSA9IHJldDtcXG4rXFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNnJlY19jb3VudCwgMSk7XFxuK1xcbitcXHQvKiBMZXQgdGhlIGZpcnN0IElDTVAgZXJyb3IgbWVzc2FnZSBwYXNzICovXFxuK1xcdGlmIChpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSUNNUClcXG4rXFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxuK1xcbitcXHRyZXR1cm4gU0tfRFJPUDtcXG4rfVxcbitcXG4rY2hhciBMSUNFTlNFW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiRHVhbCBCU0QvR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTI6MjY6NTEuMzE3OTkxMDk4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQ5MTg4NTQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pY21wX3NlbmRcIixcbiAgICBcImlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0XCIsXG4gICAgXCJpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2ljbXBfc2VuZGAgdG8gc2VuZCBJQ01QIGNvbnRyb2wgbWVzc2FnZXMgZnJvbSBCUEYgcHJvZ3JhbXMsIGFuZCByZWZhY3RvcnMgcm91dGluZyBjb2RlIHRvIGV4cG9ydCBgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3RgIGFuZCBgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0YC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJmODRjMWE5ZWNmYjlkZmNmMjM5ZjA2Mzg3YmQ3M2IyZDIwYzI2ZDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAxMjoyNjo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbmluZGV4IDA5ZmZlMGYxM2NlNzUyLi5lYjVhNjBkM2JhYmUyYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTEwMCw2ICsxMDAsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkc3RfZW50cnkgKmlwNl9yb3V0ZV9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIGlwNl9yb3V0ZV9vdXRwdXRfZmxhZ3MobmV0LCBzaywgZmw2LCAwKTtcbiB9XG4gXG4raW50IGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitcbiAvKiBPbmx5IGNvbmRpdGlvbmFsbHkgcmVsZWFzZSBkc3QgaWYgZmxhZ3MgaW5kaWNhdGVzXG4gICogIVJUNl9MT09LVVBfRl9EU1RfTk9SRUYgb3IgZHN0IGlzIGluIHVuY2FjaGVkX2xpc3QuXG4gICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcm91dGUuaCBiL2luY2x1ZGUvbmV0L3JvdXRlLmhcbmluZGV4IGY5MDEwNmYzODNjNTZkLi4zMDBkMjkyY2Q5YTFmMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3JvdXRlLmhcbisrKyBiL2luY2x1ZGUvbmV0L3JvdXRlLmhcbkBAIC0xNzMsNiArMTczLDcgQEAgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2Zsb3coc3RydWN0IG5ldCAqLCBzdHJ1Y3QgZmxvd2k0ICpmbHAsXG4gXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbiBzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2JsYWNraG9sZV9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGRzdF9lbnRyeSAqZHN0X29yaWcpO1xuK2ludCBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9rZXkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbHApXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDJlOTZiNGI4NDdjZTEyLi5mYzY5YTE0NjUwZTQyOSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTg0LDYgKzg0LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91bi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hkcF9zb2NrX2Rydi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfZHNjcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcHY2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaWNtcC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJkZXYuaFwiXG4gXG5AQCAtMTI1NDYsNiArMTI1NDgsMTAxIEBAIF9fYnBmX2tmdW5jIGludCBicGZfeGRwX3B1bGxfZGF0YShzdHJ1Y3QgeGRwX21kICp4LCB1MzIgbGVuKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIGJwZl9pY21wX3NlbmQgLSBTZW5kIGFuIElDTVAgY29udHJvbCBtZXNzYWdlXG4rICogQHNrYl9jdHg6IFBhY2tldCB0aGF0IHRyaWdnZXJlZCB0aGUgY29udHJvbCBtZXNzYWdlXG4rICogQHR5cGU6IElDTVAgdHlwZSAob25seSBJQ01QX0RFU1RfVU5SRUFDSC9JQ01QVjZfREVTVF9VTlJFQUNIIHN1cHBvcnRlZClcbisgKiBAY29kZTogSUNNUCBjb2RlICgwLTE1IGZvciBJUHY0LCAwLTYgZm9yIElQdjYpXG4rICpcbisgKiBTZW5kcyBhbiBJQ01QIGNvbnRyb2wgbWVzc2FnZSBpbiByZXNwb25zZSB0byB0aGUgcGFja2V0LiBUaGUgb3JpZ2luYWwgcGFja2V0XG4rICogaXMgY2xvbmVkIGJlZm9yZSBzZW5kaW5nIHRoZSBJQ01QIG1lc3NhZ2UsIHNvIHRoZSBCUEYgcHJvZ3JhbSBjYW4gc3RpbGwgbGV0XG4rICogdGhlIHBhY2tldCBwYXNzIGlmIGRlc2lyZWQuXG4rICpcbisgKiBDdXJyZW50bHkgb25seSBJQ01QX0RFU1RfVU5SRUFDSCAoSVB2NCkgYW5kIElDTVBWNl9ERVNUX1VOUkVBQ0ggKElQdjYpIGFyZVxuKyAqIHN1cHBvcnRlZC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmU6XG4rICogICAgICAgICAtRUlOVkFMOiBJbnZhbGlkIGNvZGUgcGFyYW1ldGVyXG4rICogICAgICAgICAtRUJBRE1TRzogUGFja2V0IHRvbyBzaG9ydCBvciBtYWxmb3JtZWRcbisgKiAgICAgICAgIC1FTk9NRU06IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuKyAqICAgICAgICAgLUVCVVNZOiBSZWN1cnNpb24gZGV0ZWN0ZWRcbisgKiAgICAgICAgIC1FSE9TVFVOUkVBQ0g6IFJvdXRpbmcgZmFpbGVkXG4rICogICAgICAgICAtRVBST1RPTk9TVVBQT1JUOiBOb24tSVAgcHJvdG9jb2xcbisgKiAgICAgICAgIC1FT1BOT1RTVVBQOiBVbnN1cHBvcnRlZCBJQ01QIHR5cGVcbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2ljbXBfc2VuZChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LCBpbnQgdHlwZSwgaW50IGNvZGUpXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXNrYl9jdHg7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcbitcdHN0cnVjdCBzb2NrICpzaztcbitcbitcdHNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTtcbitcdGlmIChzayBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfa2Vybl9zb2NrIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX0lDTVAgfHwgc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QVjYpKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0c3dpdGNoIChza2ItXHUwMDNlcHJvdG9jb2wpIHtcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbitcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuK1x0XHRpZiAodHlwZSAhPSBJQ01QX0RFU1RfVU5SRUFDSClcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdGlmIChjb2RlIFx1MDAzYyAwIHx8IGNvZGUgXHUwMDNlIE5SX0lDTVBfVU5SRUFDSClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0bnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuK1x0XHRpZiAoIW5za2IpXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRcdGlmICghcHNrYl9uZXR3b3JrX21heV9wdWxsKG5za2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkge1xuK1x0XHRcdGtmcmVlX3NrYihuc2tiKTtcbitcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFza2JfZHN0KG5za2IpIFx1MDAyNlx1MDAyNiBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChuc2tiKSBcdTAwM2MgMCkge1xuK1x0XHRcdGtmcmVlX3NrYihuc2tiKTtcbitcdFx0XHRyZXR1cm4gLUVIT1NUVU5SRUFDSDtcbitcdFx0fVxuK1xuK1x0XHRtZW1zZXQoSVBDQihuc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0X3NrYl9wYXJtKSk7XG4rXG4rXHRcdGljbXBfc2VuZChuc2tiLCB0eXBlLCBjb2RlLCAwKTtcbitcdFx0Y29uc3VtZV9za2IobnNrYik7XG4rXHRcdGJyZWFrO1xuKyNlbmRpZlxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuK1x0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbitcdFx0aWYgKHR5cGUgIT0gSUNNUFY2X0RFU1RfVU5SRUFDSClcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdGlmIChjb2RlIFx1MDAzYyAwIHx8IGNvZGUgXHUwMDNlIElDTVBWNl9SRUpFQ1RfUk9VVEUpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbitcdFx0aWYgKCFuc2tiKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0XHRpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChuc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuK1x0XHRcdGtmcmVlX3NrYihuc2tiKTtcbitcdFx0XHRyZXR1cm4gLUVCQURNU0c7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFza2JfZHN0KG5za2IpIFx1MDAyNlx1MDAyNiBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3QobnNrYikgXHUwMDNjIDApIHtcbitcdFx0XHRrZnJlZV9za2IobnNrYik7XG4rXHRcdFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XG4rXHRcdH1cbitcbitcdFx0bWVtc2V0KElQNkNCKG5za2IpLCAwLCBzaXplb2Yoc3RydWN0IGluZXQ2X3NrYl9wYXJtKSk7XG4rXG4rXHRcdGljbXB2Nl9zZW5kKG5za2IsIHR5cGUsIGNvZGUsIDApO1xuK1x0XHRjb25zdW1lX3NrYihuc2tiKTtcbitcdFx0YnJlYWs7XG4rI2VuZGlmXG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuIFxuIGludCBicGZfZHlucHRyX2Zyb21fc2tiX3Jkb25seShzdHJ1Y3QgX19za19idWZmICpza2IsIHU2NCBmbGFncyxcbkBAIC0xMjU4OCw2ICsxMjY4NSwxMCBAQCBCVEZfS0ZVTkNTX1NUQVJUKGJwZl9rZnVuY19jaGVja19zZXRfc29ja19vcHMpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX29wc19lbmFibGVfdHhfdHN0YW1wKVxuIEJURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfc29ja19vcHMpXG4gXG4rQlRGX0tGVU5DU19TVEFSVChicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2ljbXBfc2VuZClcbitCVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZClcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9za2IgPSB7XG4gXHQub3duZXIgPSBUSElTX01PRFVMRSxcbiBcdC5zZXQgPSBcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X3NrYixcbkBAIC0xMjYxOCw2ICsxMjcxOSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9zb2NrX29wcyA9IHtcbiBcdC5zZXQgPSBcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzLFxuIH07XG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfaWNtcF9zZW5kID0ge1xuK1x0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4rXHQuc2V0ID0gXHUwMDI2YnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQsXG4rfTtcbitcbiBzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxuIHtcbiBcdGludCByZXQ7XG5AQCAtMTI2MzksNiArMTI3NDUsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxuIFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxuIFx0XHRcdFx0XHQgICAgICAgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpO1xuIFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTtcbitcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiwgXHUwMDI2YnBmX2tmdW5jX3NldF9pY21wX3NlbmQpO1xuK1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcbitcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCBcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XG4gXHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TT0NLX09QUywgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX29wcyk7XG4gfVxuIGxhdGVfaW5pdGNhbGwoYnBmX2tmdW5jX2luaXQpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmNcbmluZGV4IGZlY2Y2NjIxZjY3OWY5Li5jMWMwNzI0ZTRkNGRkNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuY1xuQEAgLTI1MiwyMSArMjUyLDYgQEAgc3RhdGljIHZvaWQgbmZfcmVqZWN0X2lwX3RjcGhkcl9wdXQoc3RydWN0IHNrX2J1ZmYgKm5za2IsIGNvbnN0IHN0cnVjdCBza19idWZmICpcbiBcdG5za2ItXHUwMDNlY3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxuLXtcbi1cdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7XG4tXHRzdHJ1Y3QgZmxvd2kgZmw7XG4tXG4tXHRtZW1zZXQoXHUwMDI2ZmwsIDAsIHNpemVvZihzdHJ1Y3QgZmxvd2kpKTtcbi1cdGZsLnUuaXA0LmRhZGRyID0gaXBfaGRyKHNrYl9pbiktXHUwMDNlc2FkZHI7XG4tXHRuZl9pcF9yb3V0ZShkZXZfbmV0KHNrYl9pbi1cdTAwM2VkZXYpLCBcdTAwMjZkc3QsIFx1MDAyNmZsLCBmYWxzZSk7XG4tXHRpZiAoIWRzdClcbi1cdFx0cmV0dXJuIC0xO1xuLVxuLVx0c2tiX2RzdF9zZXQoc2tiX2luLCBkc3QpO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qIFNlbmQgUlNUIHJlcGx5ICovXG4gdm9pZCBuZl9zZW5kX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxuIFx0XHQgICBpbnQgaG9vaylcbkBAIC0yNzksNyArMjY0LDcgQEAgdm9pZCBuZl9zZW5kX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxuIFx0aWYgKCFvdGgpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghc2tiX2RzdChvbGRza2IpIFx1MDAyNlx1MDAyNiBuZl9yZWplY3RfZmlsbF9za2JfZHN0KG9sZHNrYikgXHUwMDNjIDApXG4rXHRpZiAoIXNrYl9kc3Qob2xkc2tiKSBcdTAwMjZcdTAwMjYgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qob2xkc2tiKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHNrYl9ydGFibGUob2xkc2tiKS1cdTAwM2VydF9mbGFncyBcdTAwMjYgKFJUQ0ZfQlJPQURDQVNUIHwgUlRDRl9NVUxUSUNBU1QpKVxuQEAgLTM1Miw3ICszMzcsNyBAQCB2b2lkIG5mX3NlbmRfdW5yZWFjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgY29kZSwgaW50IGhvb2spXG4gXHRpZiAoaXBoLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIXNrYl9kc3Qoc2tiX2luKSBcdTAwMjZcdTAwMjYgbmZfcmVqZWN0X2ZpbGxfc2tiX2RzdChza2JfaW4pIFx1MDAzYyAwKVxuK1x0aWYgKCFza2JfZHN0KHNrYl9pbikgXHUwMDI2XHUwMDI2IGlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0KHNrYl9pbikgXHUwMDNjIDApXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChza2JfY3N1bV91bm5lY2Vzc2FyeShza2JfaW4pIHx8XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmNcbmluZGV4IDNmM2RlNTE2NGQ2ZTU4Li5mMjQ2MDk5MzNmYmVjYiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3JvdXRlLmNcbisrKyBiL25ldC9pcHY0L3JvdXRlLmNcbkBAIC0yOTQyLDYgKzI5NDIsMjEgQEAgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2Zsb3coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbHA0LFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpcF9yb3V0ZV9vdXRwdXRfZmxvdyk7XG4gXG4raW50IGlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0KHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IHJ0YWJsZSAqcnQ7XG4rXHRzdHJ1Y3QgZmxvd2k0IGZsNCA9IHtcbitcdFx0LmRhZGRyID0gaXBfaGRyKHNrYiktXHUwMDNlc2FkZHJcbitcdH07XG4rXG4rXHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkoZGV2X25ldChza2ItXHUwMDNlZGV2KSwgXHUwMDI2Zmw0KTtcbitcdGlmIChJU19FUlIocnQpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihydCk7XG4rXHRza2JfZHN0X3NldChza2IsIFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoaXBfcm91dGVfcmVwbHlfZmlsbF9kc3QpO1xuK1xuIC8qIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgaGVsZCAqL1xuIHN0YXRpYyBpbnQgcnRfZmlsbF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGRzdCwgX19iZTMyIHNyYyxcbiBcdFx0XHRzdHJ1Y3QgcnRhYmxlICpydCwgdTMyIHRhYmxlX2lkLCBkc2NwX3QgZHNjcCxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jXG5pbmRleCBlZjViN2U4NWNmZmE4YS4uN2QyZjU3N2U3MmI4ODIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuY1xuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmNcbkBAIC0yOTMsMjEgKzI5Myw2IEBAIG5mX3JlamVjdF9pcDZfdGNwaGRyX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqbnNrYixcbiBcdFx0XHRcdFx0XHQgICBzaXplb2Yoc3RydWN0IHRjcGhkciksIDApKTtcbiB9XG4gXG4tc3RhdGljIGludCBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxuLXtcbi1cdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7XG4tXHRzdHJ1Y3QgZmxvd2kgZmw7XG4tXG4tXHRtZW1zZXQoXHUwMDI2ZmwsIDAsIHNpemVvZihzdHJ1Y3QgZmxvd2kpKTtcbi1cdGZsLnUuaXA2LmRhZGRyID0gaXB2Nl9oZHIoc2tiX2luKS1cdTAwM2VzYWRkcjtcbi1cdG5mX2lwNl9yb3V0ZShkZXZfbmV0KHNrYl9pbi1cdTAwM2VkZXYpLCBcdTAwMjZkc3QsIFx1MDAyNmZsLCBmYWxzZSk7XG4tXHRpZiAoIWRzdClcbi1cdFx0cmV0dXJuIC0xO1xuLVxuLVx0c2tiX2RzdF9zZXQoc2tiX2luLCBkc3QpO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHZvaWQgbmZfc2VuZF9yZXNldDYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvbGRza2IsXG4gXHRcdCAgICBpbnQgaG9vaylcbiB7XG5AQCAtNDQwLDcgKzQyNSw3IEBAIHZvaWQgbmZfc2VuZF91bnJlYWNoNihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2JfaW4sXG4gXHRpZiAoaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX09VVCBcdTAwMjZcdTAwMjYgc2tiX2luLVx1MDAzZWRldiA9PSBOVUxMKVxuIFx0XHRza2JfaW4tXHUwMDNlZGV2ID0gbmV0LVx1MDAzZWxvb3BiYWNrX2RldjtcbiBcbi1cdGlmICghc2tiX2RzdChza2JfaW4pIFx1MDAyNlx1MDAyNiBuZl9yZWplY3Q2X2ZpbGxfc2tiX2RzdChza2JfaW4pIFx1MDAzYyAwKVxuK1x0aWYgKCFza2JfZHN0KHNrYl9pbikgXHUwMDI2XHUwMDI2IGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdChza2JfaW4pIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpY21wdjZfc2VuZChza2JfaW4sIElDTVBWNl9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCA2MzYxYWQyZmNmNzcxNS4uMGZhNTZjODAxMTc4MTYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5AQCAtMjczMiw2ICsyNzMyLDI0IEBAIHN0cnVjdCBkc3RfZW50cnkgKmlwNl9yb3V0ZV9vdXRwdXRfZmxhZ3Moc3RydWN0IG5ldCAqbmV0LFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpcDZfcm91dGVfb3V0cHV0X2ZsYWdzKTtcbiBcbitpbnQgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0KHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGRzdF9lbnRyeSAqcmVzdWx0O1xuK1x0c3RydWN0IGZsb3dpNiBmbCA9IHtcbitcdFx0LmRhZGRyID0gaXB2Nl9oZHIoc2tiKS1cdTAwM2VzYWRkclxuK1x0fTtcbitcdGludCBlcnI7XG4rXG4rXHRyZXN1bHQgPSBpcDZfcm91dGVfb3V0cHV0KGRldl9uZXQoc2tiLVx1MDAzZWRldiksIE5VTEwsIFx1MDAyNmZsKTtcbitcdGVyciA9IHJlc3VsdC1cdTAwM2VlcnJvcjtcbitcdGlmIChlcnIpXG4rXHRcdGRzdF9yZWxlYXNlKHJlc3VsdCk7XG4rXHRlbHNlXG4rXHRcdHNrYl9kc3Rfc2V0KHNrYiwgcmVzdWx0KTtcbitcdHJldHVybiBlcnI7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdCk7XG4rXG4gc3RydWN0IGRzdF9lbnRyeSAqaXA2X2JsYWNraG9sZV9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdF9vcmlnKVxuIHtcbiBcdHN0cnVjdCBydDZfaW5mbyAqcnQsICpvcnQgPSBkc3RfcnQ2X2luZm8oZHN0X29yaWcpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ljbXBfc2VuZF9rZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaWNtcF9zZW5kX2tmdW5jLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZmQ0YjhmYTc4YTAxODRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ljbXBfc2VuZF9rZnVuYy5jXG5AQCAtMCwwICsxLDI1MCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0d29ya19oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NjZ3JvdXBfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXJycXVldWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3BvbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJpY21wX3NlbmQuc2tlbC5oXCJcbitcbisjZGVmaW5lIFRJTUVPVVRfTVMgMTAwMFxuK1xuKyNkZWZpbmUgSUNNUF9ERVNUX1VOUkVBQ0ggM1xuKyNkZWZpbmUgSUNNUFY2X0RFU1RfVU5SRUFDSCAxXG4rXG4rI2RlZmluZSBJQ01QX0hPU1RfVU5SRUFDSCAxXG4rI2RlZmluZSBJQ01QX0ZSQUdfTkVFREVEIDRcbisjZGVmaW5lIE5SX0lDTVBfVU5SRUFDSCAxNVxuKyNkZWZpbmUgSUNNUFY2X1JFSkVDVF9ST1VURSA2XG4rXG4rc3RhdGljIGludCBjb25uZWN0X3RvX2ZkX25vbmJsb2NrKGludCBzZXJ2ZXJfZmQpXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcjtcbitcdHNvY2tsZW5fdCBsZW4gPSBzaXplb2YoYWRkcik7XG4rXHRpbnQgZmQsIGVyciwgb24gPSAxO1xuK1xuK1x0aWYgKGdldHNvY2tuYW1lKHNlcnZlcl9mZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIFx1MDAyNmxlbikpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGZkID0gc29ja2V0KGFkZHIuc3NfZmFtaWx5LCBTT0NLX1NUUkVBTSB8IFNPQ0tfTk9OQkxPQ0ssIDApO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRpZiAoYWRkci5zc19mYW1pbHkgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUFY2LCBJUFY2X1JFQ1ZFUlIsIFx1MDAyNm9uLCBzaXplb2Yob24pKSBcdTAwM2MgMCkge1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcbitcdGVyciA9IGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhZGRyLCBsZW4pO1xuK1x0aWYgKGVyciBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gIT0gRUlOUFJPR1JFU1MpIHtcbitcdFx0Y2xvc2UoZmQpO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJlYWRfaWNtcF9lcnJxdWV1ZShpbnQgc29ja2ZkLCBpbnQgZXhwZWN0ZWRfY29kZSwgaW50IGFmKVxuK3tcbitcdGludCBleHBlY3RlZF9lZV90eXBlID0gKGFmID09IEFGX0lORVQpID8gSUNNUF9ERVNUX1VOUkVBQ0ggOlxuK1x0XHRcdFx0XHRcdCBJQ01QVjZfREVTVF9VTlJFQUNIO1xuK1x0aW50IGV4cGVjdGVkX29yaWdpbiA9IChhZiA9PSBBRl9JTkVUKSA/IFNPX0VFX09SSUdJTl9JQ01QIDpcbitcdFx0XHRcdFx0XHRTT19FRV9PUklHSU5fSUNNUDY7XG4rXHRpbnQgZXhwZWN0ZWRfbGV2ZWwgPSAoYWYgPT0gQUZfSU5FVCkgPyBJUFBST1RPX0lQIDogSVBQUk9UT19JUFY2O1xuK1x0aW50IGV4cGVjdGVkX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJUF9SRUNWRVJSIDogSVBWNl9SRUNWRVJSO1xuK1x0c3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICpzb2NrX2VycjtcbitcdGNoYXIgY3RybF9idWZbNTEyXTtcbitcdHN0cnVjdCBtc2doZHIgbXNnID0ge1xuK1x0XHQubXNnX2NvbnRyb2wgPSBjdHJsX2J1ZixcbitcdFx0Lm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGN0cmxfYnVmKSxcbitcdH07XG4rXHRzdHJ1Y3QgcG9sbGZkIHBmZCA9IHtcbitcdFx0LmZkID0gc29ja2ZkLFxuK1x0XHQuZXZlbnRzID0gUE9MTEVSUixcbitcdH07XG4rXHRzdHJ1Y3QgY21zZ2hkciAqY207XG4rXHRzc2l6ZV90IG47XG4rXG4rXHRpZiAoIUFTU0VSVF9HRShwb2xsKFx1MDAyNnBmZCwgMSwgVElNRU9VVF9NUyksIDEsIFwicG9sbF9lcnJxdWV1ZVwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0biA9IHJlY3Ztc2coc29ja2ZkLCBcdTAwMjZtc2csIE1TR19FUlJRVUVVRSk7XG4rXHRpZiAoIUFTU0VSVF9HRShuLCAwLCBcInJlY3Ztc2dfZXJycXVldWVcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGNtID0gQ01TR19GSVJTVEhEUihcdTAwMjZtc2cpO1xuK1x0aWYgKCFBU1NFUlRfTkVRKGNtLCBOVUxMLCBcImNtX2ZpcnN0aGRyX251bGxcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoOyBjbTsgY20gPSBDTVNHX05YVEhEUihcdTAwMjZtc2csIGNtKSkge1xuK1x0XHRpZiAoY20tXHUwMDNlY21zZ19sZXZlbCAhPSBleHBlY3RlZF9sZXZlbCB8fFxuK1x0XHQgICAgY20tXHUwMDNlY21zZ190eXBlICE9IGV4cGVjdGVkX3R5cGUpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHNvY2tfZXJyID0gKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqKUNNU0dfREFUQShjbSk7XG4rXG4rXHRcdGlmICghQVNTRVJUX0VRKHNvY2tfZXJyLVx1MDAzZWVlX29yaWdpbiwgZXhwZWN0ZWRfb3JpZ2luLFxuK1x0XHRcdCAgICAgICBcInNvY2tfZXJyX29yaWdpblwiKSlcbitcdFx0XHRyZXR1cm47XG4rXHRcdGlmICghQVNTRVJUX0VRKHNvY2tfZXJyLVx1MDAzZWVlX3R5cGUsIGV4cGVjdGVkX2VlX3R5cGUsXG4rXHRcdFx0ICAgICAgIFwic29ja19lcnJfdHlwZV9kZXN0X3VucmVhY2hcIikpXG4rXHRcdFx0cmV0dXJuO1xuK1x0XHRBU1NFUlRfRVEoc29ja19lcnItXHUwMDNlZWVfY29kZSwgZXhwZWN0ZWRfY29kZSwgXCJzb2NrX2Vycl9jb2RlXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRBU1NFUlRfRkFJTChcIm5vIElQX1JFQ1ZFUlIvSVBWNl9SRUNWRVJSIGNvbnRyb2wgbWVzc2FnZSBmb3VuZFwiKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShzdHJ1Y3QgaWNtcF9zZW5kICpza2VsLCBpbnQgY29kZSxcbitcdFx0XHRcdFx0ICAgIGludCBhZiwgY29uc3QgY2hhciAqaXApXG4re1xuK1x0aW50IHNydl9mZCA9IC0xLCBjbGllbnRfZmQgPSAtMTtcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyO1xuK1x0c29ja2xlbl90IGxlbiA9IHNpemVvZihhZGRyKTtcbitcbitcdHNydl9mZCA9IHN0YXJ0X3NlcnZlcihhZiwgU09DS19TVFJFQU0sIGlwLCAwLCBUSU1FT1VUX01TKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKHNydl9mZCwgXCJzdGFydF9zZXJ2ZXJcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChnZXRzb2NrbmFtZShzcnZfZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhZGRyLCBcdTAwMjZsZW4pKSB7XG4rXHRcdGNsb3NlKHNydl9mZCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNlcnZlcl9wb3J0ID0gbnRvaHMoYWRkci5zaW5fcG9ydCk7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V1bnJlYWNoX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJQ01QX0RFU1RfVU5SRUFDSCA6XG4rXHRcdFx0XHRcdFx0ICAgIElDTVBWNl9ERVNUX1VOUkVBQ0g7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V1bnJlYWNoX2NvZGUgPSBjb2RlO1xuK1xuK1x0Y2xpZW50X2ZkID0gY29ubmVjdF90b19mZF9ub25ibG9jayhzcnZfZmQpO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoY2xpZW50X2ZkLCBcImNsaWVudF9jb25uZWN0X25vbmJsb2NrXCIpKSB7XG4rXHRcdGNsb3NlKHNydl9mZCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIFNraXAgcmVhZGluZyBJQ01QIGVycm9yIHF1ZXVlIGlmIGNvZGUgaXMgaW52YWxpZCAqL1xuK1x0aWYgKGNvZGUgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiAoKGFmID09IEFGX0lORVQgXHUwMDI2XHUwMDI2IGNvZGUgXHUwMDNjPSBOUl9JQ01QX1VOUkVBQ0gpIHx8XG4rXHRcdFx0ICAoYWYgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2IGNvZGUgXHUwMDNjPSBJQ01QVjZfUkVKRUNUX1JPVVRFKSkpXG4rXHRcdHJlYWRfaWNtcF9lcnJxdWV1ZShjbGllbnRfZmQsIGNvZGUsIGFmKTtcbitcbitcdGNsb3NlKGNsaWVudF9mZCk7XG4rXHRjbG9zZShzcnZfZmQpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydW5faWNtcF90ZXN0KHN0cnVjdCBpY21wX3NlbmQgKnNrZWwsIGludCBhZiwgY29uc3QgY2hhciAqaXAsXG4rXHRcdFx0ICBpbnQgbWF4X2NvZGUpXG4re1xuK1x0Zm9yIChpbnQgY29kZSA9IDA7IGNvZGUgXHUwMDNjPSBtYXhfY29kZTsgY29kZSsrKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBUQ1Agc3RhY2sgcmVhY3RzIGRpZmZlcmVudGx5IHdoZW4gYXNraW5nIGZvclxuK1x0XHQgKiBmcmFnbWVudGF0aW9uLCBsZXQncyBpZ25vcmUgaXQgZm9yIG5vdy5cbitcdFx0ICovXG4rXHRcdGlmIChhZiA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBjb2RlID09IElDTVBfRlJBR19ORUVERUQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgY29kZSwgYWYsIGlwKTtcbitcdFx0QVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VrZnVuY19yZXQsIDAsIFwia2Z1bmNfcmV0XCIpO1xuK1x0fVxuK1xuK1x0LyogVGVzdCBhbiBpbnZhbGlkIGNvZGUgKi9cbitcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgLTEsIGFmLCBpcCk7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCwgLUVJTlZBTCwgXCJrZnVuY19yZXRcIik7XG4rfVxuK1xuK3ZvaWQgdGVzdF9pY21wX3NlbmRfdW5yZWFjaF9jZ3JvdXAodm9pZClcbit7XG4rXHRzdHJ1Y3QgaWNtcF9zZW5kICpza2VsO1xuK1x0aW50IGNncm91cF9mZCA9IC0xO1xuK1xuK1x0c2tlbCA9IGljbXBfc2VuZF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRjZ3JvdXBfZmQgPSB0ZXN0X19qb2luX2Nncm91cChcIi9pY21wX3NlbmRfdW5yZWFjaF9jZ3JvdXBcIik7XG4rXHRpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsIFwiam9pbl9jZ3JvdXBcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHNrZWwtXHUwMDNlbGlua3MuZWdyZXNzID1cbitcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5lZ3Jlc3MsIGNncm91cF9mZCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cdTAwM2VsaW5rcy5lZ3Jlc3MsIFwicHJvZ19hdHRhY2hfY2dyb3VwXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImlwdjRcIikpXG4rXHRcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVCwgXCIxMjcuMC4wLjFcIiwgTlJfSUNNUF9VTlJFQUNIKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiaXB2NlwiKSlcbitcdFx0cnVuX2ljbXBfdGVzdChza2VsLCBBRl9JTkVUNiwgXCI6OjFcIiwgSUNNUFY2X1JFSkVDVF9ST1VURSk7XG4rXG4rY2xlYW51cDpcbitcdGljbXBfc2VuZF9fZGVzdHJveShza2VsKTtcbitcdGlmIChjZ3JvdXBfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShjZ3JvdXBfZmQpO1xuK31cbitcbit2b2lkIHRlc3RfaWNtcF9zZW5kX3VucmVhY2hfdGModm9pZClcbit7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGN4X29wdHMsIG9wdHMpO1xuK1x0c3RydWN0IGljbXBfc2VuZCAqc2tlbDtcbitcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XG4rXG4rXHRza2VsID0gaWNtcF9zZW5kX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsX29wZW5cIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3RjeChza2VsLVx1MDAzZXByb2dzLnRjX2VncmVzcywgMSwgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCJwcm9nX2F0dGFjaFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJpcHY0XCIpKVxuK1x0XHRydW5faWNtcF90ZXN0KHNrZWwsIEFGX0lORVQsIFwiMTI3LjAuMC4xXCIsIE5SX0lDTVBfVU5SRUFDSCk7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImlwdjZcIikpXG4rXHRcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVDYsIFwiOjoxXCIsIElDTVBWNl9SRUpFQ1RfUk9VVEUpO1xuK1xuK2NsZWFudXA6XG4rXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcbitcdGljbXBfc2VuZF9fZGVzdHJveShza2VsKTtcbit9XG4rXG4rdm9pZCB0ZXN0X2ljbXBfc2VuZF91bnJlYWNoX3JlY3Vyc2lvbih2b2lkKVxuK3tcbitcdHN0cnVjdCBpY21wX3NlbmQgKnNrZWw7XG4rXHRpbnQgY2dyb3VwX2ZkID0gLTE7XG4rXG4rXHRza2VsID0gaWNtcF9zZW5kX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsX29wZW5cIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmIChzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKSkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJGYWlsZWQgdG8gc2V0dXAgY2dyb3VwIGVudmlyb25tZW50XFxuXCIpO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRjZ3JvdXBfZmQgPSBnZXRfcm9vdF9jZ3JvdXAoKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKGNncm91cF9mZCwgXCJnZXRfcm9vdF9jZ3JvdXBcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHNrZWwtXHUwMDNlZGF0YS1cdTAwM2V0YXJnZXRfcGlkID0gZ2V0cGlkKCk7XG4rXHRza2VsLVx1MDAzZWxpbmtzLnJlY3Vyc2lvbiA9XG4rXHRcdGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtXHUwMDNlcHJvZ3MucmVjdXJzaW9uLCBjZ3JvdXBfZmQpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3MucmVjdXJzaW9uLCBcInByb2dfYXR0YWNoX2Nncm91cFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0dHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCBJQ01QX0hPU1RfVU5SRUFDSCwgQUZfSU5FVCxcbitcdFx0XHRcdFx0XCIxMjcuMC4wLjFcIik7XG4rXG4rXHQvKlxuK1x0ICogQmVjYXVzZSB0aGVyZSdzIHJlY3Vyc2lvbiBpbnZvbHZlZCwgdGhlIGZpcnN0IGNhbGwgd2lsbCByZXR1cm4gYXRcbitcdCAqIGluZGV4IDEgc2luY2UgaXQgd2lsbCByZXR1cm4gdGhlIHNlY29uZCwgYW5kIHRoZSBzZWNvbmQgY2FsbCB3aWxsXG4rXHQgKiByZXR1cm4gYXQgaW5kZXggMCBzaW5jZSBpdCB3aWxsIHJldHVybiB0aGUgZmlyc3QuXG4rXHQgKi9cbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNlcmVjX2tmdW5jX3JldHNbMF0sIC1FQlVTWSwgXCJrZnVuY19yZXRzWzBdXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VyZWNfa2Z1bmNfcmV0c1sxXSwgMCwgXCJrZnVuY19yZXRzWzFdXCIpO1xuK1xuK2NsZWFudXA6XG4rXHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuK1x0aWNtcF9zZW5kX19kZXN0cm95KHNrZWwpO1xuK1x0aWYgKGNncm91cF9mZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGNncm91cF9mZCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mZDljNzY4NDc5N2IwN1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ljbXBfc2VuZC5jXG5AQCAtMCwwICsxLDE4NCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuK1xuKy8qIDEyNy4wLjAuMSBpbiBob3N0IGJ5dGUgb3JkZXIgKi9cbisjZGVmaW5lIFNFUlZFUl9JUCAweDdGMDAwMDAxXG4rLyogOjoxIGluIGhvc3QgYnl0ZSBvcmRlciAobGFzdCAzMi1iaXQgd29yZCkgKi9cbisjZGVmaW5lIFNFUlZFUl9JUDZfTE8gMHgwMDAwMDAwMVxuK1xuK19fdTE2IHNlcnZlcl9wb3J0ID0gMDtcbitpbnQgdW5yZWFjaF90eXBlID0gMDtcbitpbnQgdW5yZWFjaF9jb2RlID0gMDtcbitpbnQga2Z1bmNfcmV0ID0gLTE7XG4raW50IHRhcmdldF9waWQgPSAtMTtcbitcbit1bnNpZ25lZCBpbnQgcmVjX2NvdW50ID0gMDtcbitpbnQgcmVjX2tmdW5jX3JldHNbXSA9IHsgLTEsIC0xIH07XG4rXG4rU0VDKFwiY2dyb3VwX3NrYi9lZ3Jlc3NcIilcbitpbnQgZWdyZXNzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHR2b2lkICpkYXRhID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YTtcbitcdHZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YV9lbmQ7XG4rXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbitcdHN0cnVjdCBpcHY2aGRyICppcDZoO1xuK1x0c3RydWN0IHRjcGhkciAqdGNwaDtcbitcdF9fdTggdmVyc2lvbjtcbitcbitcdGlmIChkYXRhICsgMSBcdTAwM2UgZGF0YV9lbmQpXG4rXHRcdHJldHVybiBTS19QQVNTO1xuK1xuK1x0dmVyc2lvbiA9ICgqKChfX3U4ICopZGF0YSkpIFx1MDAzZVx1MDAzZSA0O1xuK1xuK1x0aWYgKHZlcnNpb24gPT0gNCkge1xuK1x0XHRpcGggPSBkYXRhO1xuK1x0XHRpZiAoKHZvaWQgKikoaXBoICsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8XG4rXHRcdCAgICBpcGgtXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgfHxcbitcdFx0ICAgIGlwaC1cdTAwM2VkYWRkciAhPSBicGZfaHRvbmwoU0VSVkVSX0lQKSlcbitcdFx0XHRyZXR1cm4gU0tfUEFTUztcbitcbitcdFx0dGNwaCA9ICh2b2lkICopaXBoICsgaXBoLVx1MDAzZWlobCAqIDQ7XG4rXHRcdGlmICgodm9pZCAqKSh0Y3BoICsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8XG4rXHRcdCAgICB0Y3BoLVx1MDAzZWRlc3QgIT0gYnBmX2h0b25zKHNlcnZlcl9wb3J0KSlcbitcdFx0XHRyZXR1cm4gU0tfUEFTUztcbitcbitcdH0gZWxzZSBpZiAodmVyc2lvbiA9PSA2KSB7XG4rXHRcdGlwNmggPSBkYXRhO1xuK1x0XHRpZiAoKHZvaWQgKikoaXA2aCArIDEpIFx1MDAzZSBkYXRhX2VuZCB8fFxuK1x0XHQgICAgaXA2aC1cdTAwM2VuZXh0aGRyICE9IElQUFJPVE9fVENQKVxuK1x0XHRcdHJldHVybiBTS19QQVNTO1xuK1xuK1x0XHRpZiAoaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMF0gIT0gMCB8fFxuK1x0XHQgICAgaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMV0gIT0gMCB8fFxuK1x0XHQgICAgaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMl0gIT0gMCB8fFxuK1x0XHQgICAgaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbM10gIT0gYnBmX2h0b25sKFNFUlZFUl9JUDZfTE8pKVxuK1x0XHRcdHJldHVybiBTS19QQVNTO1xuK1xuK1x0XHR0Y3BoID0gKHZvaWQgKikoaXA2aCArIDEpO1xuK1x0XHRpZiAoKHZvaWQgKikodGNwaCArIDEpIFx1MDAzZSBkYXRhX2VuZCB8fFxuK1x0XHQgICAgdGNwaC1cdTAwM2VkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpXG4rXHRcdFx0cmV0dXJuIFNLX1BBU1M7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXR1cm4gU0tfUEFTUztcbitcdH1cbitcbitcdGtmdW5jX3JldCA9IGJwZl9pY21wX3NlbmQoc2tiLCB1bnJlYWNoX3R5cGUsIHVucmVhY2hfY29kZSk7XG4rXG4rXHRyZXR1cm4gU0tfRFJPUDtcbit9XG4rXG4rU0VDKFwidGMvZWdyZXNzXCIpXG4raW50IHRjX2VncmVzcyhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLVx1MDAzZWRhdGE7XG4rXHR2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpc2tiLVx1MDAzZWRhdGFfZW5kO1xuK1x0c3RydWN0IGV0aGhkciAqZXRoO1xuK1x0c3RydWN0IGlwaGRyICppcGg7XG4rXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcbitcdHN0cnVjdCB0Y3BoZHIgKnRjcGg7XG4rXG4rXHRldGggPSBkYXRhO1xuK1x0aWYgKCh2b2lkICopKGV0aCArIDEpIFx1MDAzZSBkYXRhX2VuZClcbitcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0aWYgKGV0aC1cdTAwM2VoX3Byb3RvID09IGJwZl9odG9ucyhFVEhfUF9JUCkpIHtcbitcdFx0aXBoID0gKHZvaWQgKikoZXRoICsgMSk7XG4rXHRcdGlmICgodm9pZCAqKShpcGggKyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4rXHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0XHRpZiAoaXBoLVx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fVENQIHx8XG4rXHRcdCAgICBpcGgtXHUwMDNlZGFkZHIgIT0gYnBmX2h0b25sKFNFUlZFUl9JUCkpXG4rXHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0XHR0Y3BoID0gKHZvaWQgKilpcGggKyBpcGgtXHUwMDNlaWhsICogNDtcbitcdFx0aWYgKCh2b2lkICopKHRjcGggKyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4rXHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0XHRpZiAodGNwaC1cdTAwM2VkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpXG4rXHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0fSBlbHNlIGlmIChldGgtXHUwMDNlaF9wcm90byA9PSBicGZfaHRvbnMoRVRIX1BfSVBWNikpIHtcbitcdFx0aXA2aCA9ICh2b2lkICopKGV0aCArIDEpO1xuK1x0XHRpZiAoKHZvaWQgKikoaXA2aCArIDEpIFx1MDAzZSBkYXRhX2VuZClcbitcdFx0XHRyZXR1cm4gVENYX1BBU1M7XG4rXG4rXHRcdGlmIChpcDZoLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19UQ1ApXG4rXHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0XHRpZiAoaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMF0gIT0gMCB8fFxuK1x0XHQgICAgaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMV0gIT0gMCB8fFxuK1x0XHQgICAgaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMl0gIT0gMCB8fFxuK1x0XHQgICAgaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbM10gIT0gYnBmX2h0b25sKFNFUlZFUl9JUDZfTE8pKVxuK1x0XHRcdHJldHVybiBUQ1hfUEFTUztcbitcbitcdFx0dGNwaCA9ICh2b2lkICopKGlwNmggKyAxKTtcbitcdFx0aWYgKCh2b2lkICopKHRjcGggKyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4rXHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0XHRpZiAodGNwaC1cdTAwM2VkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpXG4rXHRcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1x0fVxuK1xuK1x0a2Z1bmNfcmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTtcbitcbitcdHJldHVybiBUQ1hfRFJPUDtcbit9XG4rXG4rU0VDKFwiY2dyb3VwX3NrYi9lZ3Jlc3NcIilcbitpbnQgcmVjdXJzaW9uKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHR2b2lkICpkYXRhID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YTtcbitcdHZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YV9lbmQ7XG4rXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGg7XG4rXHRzdHJ1Y3QgdGNwaGRyICp0Y3BoO1xuK1x0c3RydWN0IGlwaGRyICppcGg7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKChicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzIpICE9IHRhcmdldF9waWQpXG4rXHRcdHJldHVybiBTS19QQVNTO1xuK1xuK1x0aXBoID0gZGF0YTtcbitcdGlmICgodm9pZCAqKShpcGggKyAxKSBcdTAwM2UgZGF0YV9lbmQgfHwgaXBoLVx1MDAzZXZlcnNpb24gIT0gNClcbitcdFx0cmV0dXJuIFNLX1BBU1M7XG4rXG4rXHRpZiAoaXBoLVx1MDAzZWRhZGRyICE9IGJwZl9odG9ubChTRVJWRVJfSVApKVxuK1x0XHRyZXR1cm4gU0tfUEFTUztcbitcbitcdGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcbitcdFx0dGNwaCA9ICh2b2lkICopaXBoICsgaXBoLVx1MDAzZWlobCAqIDQ7XG4rXHRcdGlmICgodm9pZCAqKSh0Y3BoICsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8XG4rXHRcdCAgICB0Y3BoLVx1MDAzZWRlc3QgIT0gYnBmX2h0b25zKHNlcnZlcl9wb3J0KSlcbitcdFx0XHRyZXR1cm4gU0tfUEFTUztcbitcdH0gZWxzZSBpZiAoaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSUNNUCkge1xuK1x0XHRpY21waCA9ICh2b2lkICopaXBoICsgaXBoLVx1MDAzZWlobCAqIDQ7XG4rXHRcdGlmICgodm9pZCAqKShpY21waCArIDEpIFx1MDAzZSBkYXRhX2VuZCB8fFxuK1x0XHQgICAgaWNtcGgtXHUwMDNldHlwZSAhPSB1bnJlYWNoX3R5cGUgfHxcbitcdFx0ICAgIGljbXBoLVx1MDAzZWNvZGUgIT0gdW5yZWFjaF9jb2RlKVxuK1x0XHRcdHJldHVybiBTS19QQVNTO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0dXJuIFNLX1BBU1M7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogVGhpcyBjYWxsIHdpbGwgcHJvdm9rZSBhIHJlY3Vyc2lvbjogdGhlIElDTVAgcGFja2V0IGdlbmVyYXRlZCBieSB0aGVcbitcdCAqIGtmdW5jIHdpbGwgcmUtdHJpZ2dlciB0aGlzIHByb2dyYW0gc2luY2Ugd2UgYXJlIGluIHRoZSByb290IGNncm91cCBpblxuK1x0ICogd2hpY2ggdGhlIGtlcm5lbCBJQ01QIHNvY2tldCBiZWxvbmdzLiBIb3dldmVyIHdoZW4gcmUtZW50ZXJpbmcgdGhlXG4rXHQgKiBrZnVuYywgaXQgc2hvdWxkIHJldHVybiBFQlVTWS5cbitcdCAqL1xuK1x0cmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTtcbitcdHJlY19rZnVuY19yZXRzW3JlY19jb3VudCBcdTAwMjYgMV0gPSByZXQ7XG4rXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZyZWNfY291bnQsIDEpO1xuK1xuK1x0LyogTGV0IHRoZSBmaXJzdCBJQ01QIGVycm9yIG1lc3NhZ2UgcGFzcyAqL1xuK1x0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lDTVApXG4rXHRcdHJldHVybiBTS19QQVNTO1xuK1xuK1x0cmV0dXJuIFNLX0RST1A7XG4rfVxuK1xuK2NoYXIgTElDRU5TRVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkR1YWwgQlNEL0dQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTI6MjY6NTEuMzE3OTkyNDY4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMxOTA5ODY2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBCUEYgYGJwZl9pY21wX3NlbmRgIFBhdGNoKipcblxuT2theSwgc28gd2UgaGF2ZSBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIGBicGZfaWNtcF9zZW5kYCBrZnVuYy4gVGhpcyBpcyBpbnRlcmVzdGluZyDigJMgZGlyZWN0IElDTVAgY29udHJvbCBtZXNzYWdlIHRyYW5zbWlzc2lvbiB2aWEgQlBGIGlzIGEgcG90ZW50aWFsbHkgcG93ZXJmdWwgYWRkaXRpb24uIEZyb20gd2hhdCBJIHNlZSwgdGhlIHByaW1hcnkgbW9kaWZpY2F0aW9uIGludm9sdmVzIGBuZXQvY29yZS9maWx0ZXIuY2AsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIHRoZSBrZnVuYyBpcyBiZWluZyBpbnRlZ3JhdGVkIGludG8gdGhlIEJQRiBmcmFtZXdvcmsuIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYG5ldC9pcHY0L3JvdXRlLmNgIGFuZCBgbmV0L2lwdjYvcm91dGUuY2AgdG8gZXhwb3J0IGBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdGAgYW5kIGBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3RgIHJlc3BlY3RpdmVseSwgYW5kIHRoZW4gdXBkYXRlcyBgbmZfcmVqZWN0X2lwdjQuY2AgYW5kIGBuZl9yZWplY3RfaXB2Ni5jYCB0byB1c2UgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucy4gR29vZCBob3VzZWtlZXBpbmcsIHJlbW92aW5nIHRob3NlIHN0YXRpYyBpbXBsZW1lbnRhdGlvbnMgaW4gdGhlIHJlamVjdCBjb2RlLiBBbmQsIG9mIGNvdXJzZSwgdGhlcmUgYXJlIGFjY29tcGFueWluZyBzZWxmLXRlc3RzLiBUaGF0J3MgYSBzb2xpZCBzdGFydC5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgZW5oYW5jZW1lbnQgdG8gQlBGJ3MgY2FwYWJpbGl0aWVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBuZWVkcyB0byBiZSByaWdvcm91c2x5IGZ1enplZC4gVGhlIGF0dGFjayBzdXJmYWNlIGhlcmUgaXMgZGVmaW5pdGVseSBpbmNyZWFzZWQgYW5kIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBrZnVuYyBpcyByb2J1c3QgYW5kIHNlY3VyZS4gSSdsbCBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBgYnBmX2ljbXBfc2VuZGAsIGBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdGAsIGFuZCBgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0YC5cblxuTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSBhc3N1bWluZyBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19JTkVUYCwgYW5kIGBDT05GSUdfSVBWNmAgYXJlIG5lY2Vzc2FyeSwgYnV0IGxldCdzIGJlIHN1cmUuIFRoZSBrZnVuYyBpcyBkZWZpbmVkIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGlzIHJlZ2lzdGVyZWQgZm9yIGBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0JgLCBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgLCBhbmQgYEJQRl9QUk9HX1RZUEVfU0NIRURfQUNUYC4gVGhpcyBtZWFucyB0aGF0IGBDT05GSUdfQ0dST1VQX0JQRmAgaXMgbGlrZWx5IGFub3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4gSSdsbCBzZWFyY2ggZm9yIHRoZSBrZnVuYyB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBjb25maXJtIHRoZSBkZXRhaWxzIGFuZCBlbnN1cmUgdGhhdCBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDgwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTI6MjY6NTguNjM3MDkzMTEyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2OTg5MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pY21wX3NlbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTI0OTA9X19icGZfa2Z1bmMgaW50IGJwZl94ZHBfcHVsbF9kYXRhKHN0cnVjdCB4ZHBfbWQgKngsIHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjU1MS0vKipcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjU1MjogKiBicGZfaWNtcF9zZW5kIC0gU2VuZCBhbiBJQ01QIGNvbnRyb2wgbWVzc2FnZVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTUzLSAqIEBza2JfY3R4OiBQYWNrZXQgdGhhdCB0cmlnZ2VyZWQgdGhlIGNvbnRyb2wgbWVzc2FnZVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NzItICovXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI1NzM6X19icGZfa2Z1bmMgaW50IGJwZl9pY21wX3NlbmQoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgaW50IHR5cGUsIGludCBjb2RlKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTc0LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyNjg4PUJURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQpXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI2ODk6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pY21wX3NlbmQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI2OTAtQlRGX0tGVU5DU19FTkQoYnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDEyOjI2OjU4LjY5NDA5NDAwMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODEwOTU5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBgYnBmX2ljbXBfc2VuZGAgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYGJwZl9pY21wX3NlbmRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSBob3cgaXQncyBpbXBsZW1lbnRlZC4gSSBzZWUgdGhhdCB1bmRlciB0aGUgaG9vZCwgaXQgbGV2ZXJhZ2VzIGBpY21wX3NlbmRgIGFuZCBgaWNtcHY2X3NlbmRgLiBOb3csIEknbSBub3RpbmcgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzOiBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpYCBhbmQgYCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KWAuIFRoYXQncyBpbXBvcnRhbnQ7IHRob3NlIGZsYWdzIGFyZSBkZWZpbml0ZWx5IGtleS4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgZ2F0ZWQgYmVoaW5kIHRoZSBnZW5lcmFsIElQdjQgYW5kIElQdjYgcHJvdG9jb2wgc3VwcG9ydC4gTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBnZXRzIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwuIEknbSBnb2luZyB0byBjaGVjayB0aGUgYGJwZl9rZnVuY19pbml0YCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgOyB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgQlBGIGtmdW5jIHJlZ2lzdHJhdGlvbnMgcmVzaWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcxMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDEyOjI3OjAyLjQ3NTE5Mjk2NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODM1NjIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfa2Z1bmNfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMjcyMj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9pY21wX3NlbmQgPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcyNi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjcyNzpzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzI4LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzUyLX1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjc1MzpsYXRlX2luaXRjYWxsKGJwZl9rZnVuY19pbml0KTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTI6Mjc6MDIuNTMzNTU0OTY0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkxMjk0MjU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFbmFibGluZyBCUEYtYmFzZWQgSUNNUCBTZW5kIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUga2VybmVsIGNvbmZpZ3MgbmVlZGVkIHRvIGVuYWJsZSB0aGlzIEJQRi1iYXNlZCBJQ01QIHNlbmQgZnVuY3Rpb25hbGl0eS4gTGV0J3Mgc2VlLi4uIEkgKnRoaW5rKiBgQlBGX1NZU0NBTExgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQsIHNpbmNlIGBicGZfaWNtcF9zZW5kYCBpcyBhIEJQRiBrZnVuYy4gIFBvdGVudGlhbGx5LCBgQ0dST1VQX0JQRmAgbWlnaHQgYmUgbmVlZGVkIHRvby4gQW5kIGZvciBhdHRhY2hpbmcgdGhlIEJQRiBwcm9ncmFtLCBwcm9iYWJseSBgTkVUX1NDSF9JTkdSRVNTYCBvciBtYXliZSBgTkVUX0NMU19BQ1RgIGFyZSByZWxldmFudCBhdHRhY2ggcG9pbnRzLiBJIGRvbid0IG5lZWQgdG8gbGlzdCAqZXZlcnkqIGNvbmZpZywganVzdCB0aGUga2V5IG9uZXMgdGhhdCB1bmxvY2sgdGhlIGZlYXR1cmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IGBCUEZfU1lTQ0FMTGAgYW5kIGl0cyBkZXBlbmRlbmNpZXMsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgYGJwZl9rZnVuY19pbml0YCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gY29uZmlybSB0aGF0IHRoYXQgaXQncyBjb21waWxlZCBhcyBleHBlY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMDMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTI6Mjc6MDguNDQ2NTAyNDIzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1ODczNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9rZnVuY19pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMjcyMj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9pY21wX3NlbmQgPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjcyNi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjcyNzpzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzI4LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzUyLX1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjc1MzpsYXRlX2luaXRjYWxsKGJwZl9rZnVuY19pbml0KTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTI6Mjc6MDguNTAyMzgwNjcyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI1NTQ1NTU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCUEYgUmVxdWlyZW1lbnRzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBzaXR1YXRpb24sIGFuZCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nLiBJdCBzZWVtcyB0aGUgY29yZSBCUEYgZmlsdGVyaW5nIGlzIGJha2VkIGluIGlmIHRoZSBuZXR3b3JrIHN0YWNrIGlzIGVuYWJsZWQsIHNwZWNpZmljYWxseSBpZiBgbmV0L2NvcmUvZmlsdGVyLmNgIGdldHMgY29tcGlsZWQuIEFuZCB0aGF0LCBvZiBjb3Vyc2UsIHJlbGllcyBvbiBgQ09ORklHX05FVGAuIFRoYXQncyB0aGUgYmFzZWxpbmUuXG5cbkJ1dCB0aGUgcmVhbCBtZWF0IG9mIHdoYXQgSSB3YW50IHRvIHRlc3QgLSB0aGUgc2VuZGluZyBvZiBJQ01QIG1lc3NhZ2VzIHRocm91Z2ggQlBGLCBzcGVjaWZpY2FsbHkgY2FsbGluZyBgYnBmX2ljbXBfc2VuZGAgLSBub3cgdGhhdCBnZXRzIGEgbGl0dGxlIG1vcmUgY29tcGxleC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFsc28gaGF2ZSBib3RoIGBJTkVUYCBhbmQgYElQVjZgIGVuYWJsZWQuIFRoZSBhY3R1YWwgSUNNUCBzZW5kaW5nIGZ1bmN0aW9ucywgYGljbXBfc2VuZGAgYW5kIGBpY21wdjZfc2VuZGAsIGFyZSBwdWxsZWQgaW4gZnJvbSBgbmV0L2lwdjQvaWNtcC5jYCBhbmQgYG5ldC9pcHY2L2ljbXAuY2AgcmVzcGVjdGl2ZWx5LCBzbyB0aG9zZSBwcm90b2NvbHMgbmVlZCB0byBiZSBpbmNsdWRlZC5cblxuQW5kLCBvYnZpb3VzbHksIHRvIGV2ZW4gKnVzZSogdGhlIEJQRiBzeXNjYWxscywgSSdsbCBuZWVkIGBCUEZfU1lTQ0FMTGAgZW5hYmxlZCBhcyB3ZWxsLiBUaGF0J3MgYSBuby1icmFpbmVyLCBidXQgZ29vZCB0byBrZWVwIGl0IGluIG1pbmQuXG5cbk5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHJvdXRpbmcgYW5kIEJQRi4gSSdtIGdvaW5nIHRvIGxvb2sgaW50byBgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3RgIGFuZCBgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0YCB0byBzZWUgaG93IHRob3NlIHRpZSBpbnRvIHRoZSBCUEYgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NzMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTI6Mjc6MTQuNzU3ODM4OTIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTc0ODYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9yb3V0ZV9yZXBseV9maWxsX2RzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyNTczPV9fYnBmX2tmdW5jIGludCBicGZfaWNtcF9zZW5kKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIGludCB0eXBlLCBpbnQgY29kZSlcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNjAwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNjAxOlxcdFxcdGlmICghc2tiX2RzdChuc2tiKSBcXHUwMDI2XFx1MDAyNiBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChuc2tiKSBcXHUwMDNjIDApIHtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjYwMi1cXHRcXHRcXHRrZnJlZV9za2IobnNrYik7XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYz0yNTY9dm9pZCBuZl9zZW5kX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMjY2LVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jOjI2NzpcXHRpZiAoIXNrYl9kc3Qob2xkc2tiKSBcXHUwMDI2XFx1MDAyNiBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdChvbGRza2IpIFxcdTAwM2MgMClcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0yNjgtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MzMxPXZvaWQgbmZfc2VuZF91bnJlYWNoKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCBjb2RlLCBpbnQgaG9vaylcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTMzOS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYzozNDA6XFx0aWYgKCFza2JfZHN0KHNrYl9pbikgXFx1MDAyNlxcdTAwMjYgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc2tiX2luKSBcXHUwMDNjIDApXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzQxLVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9Mjk0Mz1FWFBPUlRfU1lNQk9MX0dQTChpcF9yb3V0ZV9vdXRwdXRfZmxvdyk7XFxubmV0L2lwdjQvcm91dGUuYy0yOTQ0LVxcbm5ldC9pcHY0L3JvdXRlLmM6Mjk0NTppbnQgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9yb3V0ZS5jLTI5NDYte1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yOTU3LX1cXG5uZXQvaXB2NC9yb3V0ZS5jOjI5NTg6RVhQT1JUX1NZTUJPTF9HUEwoaXBfcm91dGVfcmVwbHlfZmlsbF9kc3QpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMjk1OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTI6Mjc6MTQuODM3NTk0MjMyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4ODc5NTYyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgTmV3IElDTVAgQ2FwYWJpbGl0aWVzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgcHJldHR5IGludGVyZXN0aW5nIG5ldyBmdW5jdGlvbmFsaXR5LiBJIHNlZSBhIG5ldyBCUEYga2Z1bmMsIGBicGZfaWNtcF9zZW5kYCwgd2hpY2ggYWxsb3dzIHNlbmRpbmcgSUNNUCBjb250cm9sIG1lc3NhZ2VzIGZyb20gQlBGIHByb2dyYW1zLiBUaGF0IGltbWVkaWF0ZWx5IHNjcmVhbXMgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gQW5kIGl0J3Mgbm90IGp1c3QgdGhlIGtmdW5jIGl0c2VsZjsgdGhlIHBhdGNoIGFsc28gZXhwb3NlcyBgaXBfcm91dGVfcmVwbHlfZmlsbF9kc3RgIGFuZCBgaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0YCBieSByZWZhY3RvcmluZyBzb21lIHJvdXRpbmcgY29kZS4gVGhpcyBtZWFucyB3ZSBoYXZlIGV2ZW4gbW9yZSBrZXJuZWwgbG9naWMgbm93IGV4cG9zZWQgYW5kIHRoZXJlZm9yZSByZWFjaGFibGUgZnJvbSBCUEYuXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZ1bmN0aW9ucywgdGhlc2UgYXJlIGRlZmluaXRlbHkgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgdGVzdGluZyB0aGVtIHRob3JvdWdobHkuIFRvIHJ1biB0aGUgdGVzdHMsIGl0IGxvb2tzIGxpa2UgSSdsbCBuZWVkIGBCUEZfU1lTQ0FMTGAsIGBJTkVUYCwgYW5kIGBJUFY2YCBjb25maWd1cmVkLiBJJ2xsIG1ha2Ugc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCBpbiBteSB0ZXN0IGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg2NywiT3V0cHV0VG9rZW5zIjoxNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTI6Mjc6MTkuNzI1NTU1MTY4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQzMTQ2NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ljbXBfc2VuZFwiLFxuICAgIFwiaXBfcm91dGVfcmVwbHlfZmlsbF9kc3RcIixcbiAgICBcImlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaWNtcF9zZW5kYCB0byBzZW5kIElDTVAgY29udHJvbCBtZXNzYWdlcyBmcm9tIEJQRiBwcm9ncmFtcywgYW5kIHJlZmFjdG9ycyByb3V0aW5nIGNvZGUgdG8gZXhwb3J0IGBpcF9yb3V0ZV9yZXBseV9maWxsX2RzdGAgYW5kIGBpcDZfcm91dGVfcmVwbHlfZmlsbF9kc3RgLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaWNtcF9zZW5kXCIsXG4gICAgXCJpcF9yb3V0ZV9yZXBseV9maWxsX2RzdFwiLFxuICAgIFwiaXA2X3JvdXRlX3JlcGx5X2ZpbGxfZHN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHRvIHNlbmQgSUNNUCBjb250cm9sIG1lc3NhZ2VzIGZyb20gQlBGIHByb2dyYW1zLCBhbmQgcmVmYWN0b3JzIHJvdXRpbmcgY29kZSB0byBleHBvcnQgYGlwX3JvdXRlX3JlcGx5X2ZpbGxfZHN0YCBhbmQgYGlwNl9yb3V0ZV9yZXBseV9maWxsX2RzdGAuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowfxxn6[1] Phase: Succeeded StartedAt: 2026-06-22 12:27:32 +0000 UTC FinishedAt: 2026-06-22 12:27:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-22 12:27:32 +0000 UTC FinishedAt: 2026-06-22 12:27:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2] Phase: Succeeded StartedAt: 2026-06-22 12:27:32 +0000 UTC FinishedAt: 2026-06-22 16:23:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-22 12:27:32 +0000 UTC FinishedAt: 2026-06-22 16:23:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-22 12:27:32 +0000 UTC FinishedAt: 2026-06-22 12:27:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-22 12:27:32 +0000 UTC FinishedAt: 2026-06-22 12:27:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},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-workflowfxxn6/series-workflowfxxn6-convert-artifact-2553819174/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-22 12:27:56 +0000 UTC FinishedAt: 2026-06-22 12:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-22 12:27:56 +0000 UTC FinishedAt: 2026-06-22 12:49:59 +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:*6844a674-4921-4cc3-ba7e-7d457d33b6ee,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-workflowfxxn6/series-workflowfxxn6-convert-artifact-2553819174/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": "549edaf0-2892-408b-a935-a5007a66f5e9", "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-workflowfxxn6/series-workflowfxxn6-build-action-3388887228/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-22 12:27:56 +0000 UTC FinishedAt: 2026-06-22 12:49:49 +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:*6844a674-4921-4cc3-ba7e-7d457d33b6ee,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-workflowfxxn6/series-workflowfxxn6-convert-artifact-2553819174/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": "549edaf0-2892-408b-a935-a5007a66f5e9", "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-workflowfxxn6/series-workflowfxxn6-build-action-3388887228/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-22 12:49:59 +0000 UTC FinishedAt: 2026-06-22 12:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-22 12:49:59 +0000 UTC FinishedAt: 2026-06-22 12:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-22 12:49:59 +0000 UTC FinishedAt: 2026-06-22 12:52:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-22 12:49:59 +0000 UTC FinishedAt: 2026-06-22 12:50:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},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-workflowfxxn6/series-workflowfxxn6-convert-artifact-413945721/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-22 12:52:45 +0000 UTC FinishedAt: 2026-06-22 12:54:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-22 12:52:45 +0000 UTC FinishedAt: 2026-06-22 12:54:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*549edaf0-2892-408b-a935-a5007a66f5e9,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-workflowfxxn6/series-workflowfxxn6-build-action-3388887228/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-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-22 12:54:32 +0000 UTC FinishedAt: 2026-06-22 12:54:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-22 12:54:32 +0000 UTC FinishedAt: 2026-06-22 12:54:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-22 12:54:32 +0000 UTC FinishedAt: 2026-06-22 13:19:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-22 12:54:32 +0000 UTC FinishedAt: 2026-06-22 13:19:58 +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:*6844a674-4921-4cc3-ba7e-7d457d33b6ee,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-workflowfxxn6/series-workflowfxxn6-convert-artifact-413945721/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": "e96e5954-245b-4bdb-b592-da6fa10a5b20", "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-workflowfxxn6/series-workflowfxxn6-build-action-3691516245/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-22 12:54:32 +0000 UTC FinishedAt: 2026-06-22 13:19:48 +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:*6844a674-4921-4cc3-ba7e-7d457d33b6ee,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-workflowfxxn6/series-workflowfxxn6-convert-artifact-413945721/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": "e96e5954-245b-4bdb-b592-da6fa10a5b20", "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-workflowfxxn6/series-workflowfxxn6-build-action-3691516245/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-22 13:19:58 +0000 UTC FinishedAt: 2026-06-22 13:19:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-22 13:19:58 +0000 UTC FinishedAt: 2026-06-22 13:19:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-22 13:19:58 +0000 UTC FinishedAt: 2026-06-22 13:21:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-22 13:19:58 +0000 UTC FinishedAt: 2026-06-22 13:21:34 +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:*e96e5954-245b-4bdb-b592-da6fa10a5b20,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-workflowfxxn6/series-workflowfxxn6-build-action-3691516245/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-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-22 13:21:44 +0000 UTC FinishedAt: 2026-06-22 16:23:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-22 13:21:44 +0000 UTC FinishedAt: 2026-06-22 16:23:16 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"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:*549edaf0-2892-408b-a935-a5007a66f5e9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e96e5954-245b-4bdb-b592-da6fa10a5b20,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-workflowfxxn6/series-workflowfxxn6-build-action-3388887228/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-workflowfxxn6/series-workflowfxxn6-build-action-3691516245/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-22 13:21:44 +0000 UTC FinishedAt: 2026-06-22 13:21:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-22 13:21:44 +0000 UTC FinishedAt: 2026-06-22 13:21:49 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"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-workflowfxxn6/series-workflowfxxn6-convert-artifact-1452139502/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-22 13:21:44 +0000 UTC FinishedAt: 2026-06-22 13:21:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-22 13:21:44 +0000 UTC FinishedAt: 2026-06-22 13:21:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-22 13:21:44 +0000 UTC FinishedAt: 2026-06-22 13:21:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-22 13:21:54 +0000 UTC FinishedAt: 2026-06-22 16:23:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfxxn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_icmp_send","ip_route_reply_fill_dst","ip6_route_reply_fill_dst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","IPV6"],"series_id":"3862deed-e572-4299-9b43-dcef3522fbbb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-22 13:21:54 +0000 UTC FinishedAt: 2026-06-22 16:23:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*549edaf0-2892-408b-a935-a5007a66f5e9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e96e5954-245b-4bdb-b592-da6fa10a5b20,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-workflowfxxn6/series-workflowfxxn6-build-action-3388887228/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-workflowfxxn6/series-workflowfxxn6-build-action-3691516245/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-workflowfxxn6/series-workflowfxxn6-convert-artifact-1452139502/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,}