Name: series-workflowp2fs9 Phase: Succeeded StartedAt: 2026-06-26 15:23:21 +0000 UTC FinishedAt: 2026-06-26 20:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[0] Phase: Succeeded StartedAt: 2026-06-26 15:23:21 +0000 UTC FinishedAt: 2026-06-26 15:35:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 15:23:21 +0000 UTC FinishedAt: 2026-06-26 15:35:04 +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": "fe9f4ee6c61a1410afd73bf011de5ae618004796", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "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": "fe9f4ee6c61a1410afd73bf011de5ae618004796", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "35f04557-5c9e-4f38-afd9-8bf04fe614c4" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_strpbrk", "bpf_memcmp" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA2LzI2IDE1OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3N0cnBicmsmIzM0OywKICAgICYjMzQ7YnBmX21lbWNtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgQlBGIGtmdW5jcywgYnBmX3N0cnBicmsgYW5kIGJwZl9tZW1jbXAsIHdoaWNoIGNhbiBiZSBjYWxsZWQgZnJvbSBCUEYgcHJvZ3JhbXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGFkZGl0aW9ucyB0byB0aGUgY29yZSBCUEYgaGVscGVyIGxpYnJhcnkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTU6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3OGZhZDU0NDU3YzQwMjQ0NDk2ZThjZTAwYmM0MWNiNzdhNmM1MWZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTU6MzM6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuaW5kZXggYjUzMTRjOWZlZDNjZjAuLmVhZDAwZWMzMTRmNTRhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtMzk3MSw2ICYjNDM7Mzk3MSw5MiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICpyZWplY3RfX2lnbilcbiBcdHJldHVybiAtRUZBVUxUO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGJwZl9zdHJwYnJrIC0gRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHNldCBvZiBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nXG4mIzQzOyAqIEBzX19pZ246IFRoZSBzdHJpbmcgdG8gYmUgc2VhcmNoZWRcbiYjNDM7ICogQGFjY2VwdF9faWduOiBUaGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlcnMgdG8gc2VhcmNoIGZvclxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogXHUwMDNlPTAgICAgICAtIEluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gQHNfX2lnbiB0aGF0IG1hdGNoZXMgYW55XG4mIzQzOyAqICAgICAgICAgICAgICBjaGFyYWN0ZXIgaW4gQGFjY2VwdF9faWduXG4mIzQzOyAqICogJS1FTk9FTlQgLSBObyBjaGFyYWN0ZXIgb2YgQGFjY2VwdF9faWduIGZvdW5kIGluIEBzX19pZ25cbiYjNDM7ICogKiAlLUVGQVVMVCAtIENhbm5vdCByZWFkIG9uZSBvZiB0aGUgc3RyaW5nc1xuJiM0MzsgKiAqICUtRTJCSUcgIC0gT25lIG9mIHRoZSBzdHJpbmdzIGlzIHRvbyBsYXJnZVxuJiM0MzsgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBzdHJpbmdzIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2VcbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIGludCBicGZfc3RycGJyayhjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBjcywgY2E7XG4mIzQzO1x0aW50IGksIGo7XG4mIzQzO1xuJiM0MztcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoc19faWduLCAxKSB8fFxuJiM0MztcdCAgICAhY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoYWNjZXB0X19pZ24sIDEpKSB7XG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmNzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuJiM0MztcdFx0aWYgKGNzID09ICYjMzk7XFwwJiMzOTspXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmNhLCBhY2NlcHRfX2lnbiAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTtcbiYjNDM7XHRcdFx0aWYgKGNhID09ICYjMzk7XFwwJiMzOTspXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGlmIChjcyA9PSBjYSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gaTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChqID09IFhBVFRSX1NJWkVfTUFYKVxuJiM0MztcdFx0XHRyZXR1cm4gLUUyQklHO1xuJiM0MztcdFx0c19faWduJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIC1FMkJJRztcbiYjNDM7ZXJyX291dDpcbiYjNDM7XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJwZl9tZW1jbXAgLSBDb21wYXJlIHR3byBtZW1vcnkgcmVnaW9ucyBieXRlIGJ5IGJ5dGVcbiYjNDM7ICogQHB0cjFfX2lnbjogRmlyc3QgbWVtb3J5IHJlZ2lvblxuJiM0MzsgKiBAcHRyMl9faWduOiBTZWNvbmQgbWVtb3J5IHJlZ2lvblxuJiM0MzsgKiBAc2l6ZTogTnVtYmVyIG9mIGJ5dGVzIHRvIGNvbXBhcmVcbiYjNDM7ICpcbiYjNDM7ICogQ29tcGFyZXMgdGhlIGZpcnN0IEBzaXplIGJ5dGVzIG9mIHRoZSBtZW1vcnkgYXJlYXMgQHB0cjFfX2lnbiBhbmRcbiYjNDM7ICogQHB0cjJfX2lnbi4gVW5saWtlIGJwZl9zdHJjbXAsIG51bGwgYnl0ZXMgZG8gbm90IHRlcm1pbmF0ZSB0aGUgY29tcGFyaXNvbi5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlxuJiM0MzsgKiAqICUwICAgICAgIC0gVGhlIG1lbW9yeSByZWdpb25zIGFyZSBlcXVhbFxuJiM0MzsgKiAqICUtMSAgICAgIC0gQHB0cjFfX2lnbiBpcyBsZXNzIHRoYW4gQHB0cjJfX2lnblxuJiM0MzsgKiAqICUxICAgICAgIC0gQHB0cjFfX2lnbiBpcyBncmVhdGVyIHRoYW4gQHB0cjJfX2lnblxuJiM0MzsgKiAqICUtRUZBVUxUIC0gQ2Fubm90IHJlYWQgb25lIG9mIHRoZSBtZW1vcnkgcmVnaW9uc1xuJiM0MzsgKiAqICUtRTJCSUcgIC0gQHNpemUgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIHNpemVcbiYjNDM7ICogKiAlLUVSQU5HRSAtIE9uZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbnMgaXMgb3V0c2lkZSBvZiBrZXJuZWwgYWRkcmVzcyBzcGFjZVxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sXG4mIzQzO1x0XHRcdCAgIHNpemVfdCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgY2hhciAqcDEgPSBwdHIxX19pZ24sICpwMiA9IHB0cjJfX2lnbjtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGMxLCBjMjtcbiYjNDM7XHRzaXplX3QgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNpemUgXHUwMDNlIFhBVFRSX1NJWkVfTUFYKVxuJiM0MztcdFx0cmV0dXJuIC1FMkJJRztcbiYjNDM7XHRpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHAxLCBzaXplKSB8fFxuJiM0MztcdCAgICAhY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQocDIsIHNpemUpKVxuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1xuJiM0MztcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaXplOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2YzEsIHAxICYjNDM7IGksIGNoYXIsIGVycl9vdXQpO1xuJiM0MztcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2YzIsIHAyICYjNDM7IGksIGNoYXIsIGVycl9vdXQpO1xuJiM0MztcdFx0aWYgKGMxICE9IGMyKVxuJiM0MztcdFx0XHRyZXR1cm4gYzEgXHUwMDNjIGMyID8gLTEgOiAxO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7ZXJyX291dDpcbiYjNDM7XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IF9fYnBmX3N0cm5zdHIoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbGVuLFxuIFx0XHRcdCBib29sIGlnbm9yZV9jYXNlKVxuIHtcbkBAIC00ODUwLDYgJiM0Mzs0OTM2LDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJsZW4pO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3Rybmxlbik7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJzcG4pO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY3Nwbik7XG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RycGJyayk7XG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfbWVtY21wKTtcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cnN0cik7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjYXNlc3RyKTtcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cm5zdHIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmluZ19rZnVuY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmluZ19rZnVuY3MuY1xuaW5kZXggMzAwMDMyYTE5NDQ1MTQuLjk1OWZmMzcxMTBhMTYzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyaW5nX2tmdW5jcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJpbmdfa2Z1bmNzLmNcbkBAIC0yMCw2ICYjNDM7MjAsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRlc3RfY2FzZXNbXSA9IHtcbiBcdFwmIzM0O3N0cnNwbl9hY2NlcHRcJiMzNDssXG4gXHRcJiMzNDtzdHJjc3BuX3N0clwmIzM0OyxcbiBcdFwmIzM0O3N0cmNzcG5fcmVqZWN0XCYjMzQ7LFxuJiM0MztcdFx0XCYjMzQ7c3RycGJya19zdHJcJiMzNDssXG4mIzQzO1x0XHRcJiMzNDtzdHJwYnJrX2FjY2VwdFwmIzM0OyxcbiBcdFwmIzM0O3N0cnN0clwmIzM0OyxcbiBcdFwmIzM0O3N0cmNhc2VzdHJcJiMzNDssXG4gXHRcJiMzNDtzdHJuc3RyXCYjMzQ7LFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9zdWNjZXNzLmNcbmluZGV4IGUwZDY3MmQ5M2FkZjg1Li4wNzE1ODFmZjA4MzNmMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuY1xuQEAgLTYyNCw3ICYjNDM7NjI0LDcgQEAgaW50IEJQRl9QUk9HKHRlc3RfZHlucHRyX3NrYl90cF9idGYsIHZvaWQgKnNrYiwgdm9pZCAqbG9jYXRpb24pXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgYnBmX21lbWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCB1MzIgc2l6ZSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbG9jYWxfbWVtY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIsIHUzMiBzaXplKVxuIHtcbiBcdGludCBpO1xuIFxuQEAgLTY1MCwxMiAmIzQzOzY1MCwxMiBAQCBpbnQgdGVzdF9keW5wdHJfY29weSh2b2lkICpjdHgpXG4gXHRlcnIgPSBicGZfZHlucHRyX3dyaXRlKFx1MDAyNnNyYywgMCwgZGF0YSwgc3osIDApO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfY29weShcdTAwMjZkc3QsIDAsIFx1MDAyNnNyYywgMCwgc3opO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChidWYsIHN6LCBcdTAwMjZkc3QsIDAsIDApO1xuLVx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBzeik7XG4mIzQzO1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChkYXRhLCBidWYsIHN6KTtcbiBcbiBcdC8qIFRlc3QgdGhhdCBvZmZzZXRzIGFyZSBoYW5kbGVkIGNvcnJlY3RseSAqL1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfY29weShcdTAwMjZkc3QsIDMsIFx1MDAyNnNyYywgNSwgc3ogLSA1KTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoYnVmLCBzeiAtIDUsIFx1MDAyNmRzdCwgMywgMCk7XG4tXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChkYXRhICYjNDM7IDUsIGJ1Ziwgc3ogLSA1KTtcbiYjNDM7XHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGRhdGEgJiM0MzsgNSwgYnVmLCBzeiAtIDUpO1xuIFxuIFx0YnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoXHUwMDI2c3JjLCAwKTtcbiBcdGJwZl9yaW5nYnVmX2Rpc2NhcmRfZHlucHRyKFx1MDAyNmRzdCwgMCk7XG5AQCAtNjkyLDcgJiM0Mzs2OTIsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKVxuIFx0XHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXHUwMDI2YnVmLCBsZW4sIFx1MDAyNnB0cl94ZHAsIGkgKiBsZW4sIDApO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRpZiAoYnBmX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcbiYjNDM7XHRcdGlmIChsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5AQCAtNzEzLDcgJiM0Mzs3MTMsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKVxuIFx0XHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXHUwMDI2YnVmLCBsZW4sIFx1MDAyNnB0cl9idWYsIGkgKiBsZW4sIDApO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRpZiAoYnBmX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcbiYjNDM7XHRcdGlmIChsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5AQCAtNzI3LDcgJiM0Mzs3MjcsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKVxuIFx0XHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXHUwMDI2YnVmLCBsZW4sIFx1MDAyNnB0cl94ZHAsIDIgJiM0MzsgaSAqIGxlbiwgMCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdGlmIChicGZfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxuJiM0MztcdFx0aWYgKGxvY2FsX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcbiBcdFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbkBAIC03NTAsNyAmIzQzOzc1MCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfemVybyh2b2lkICpjdHgpXG4gXG4gXHRlcnIgPSBicGZfZHlucHRyX2Zyb21fbWVtKG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3osIDAsIFx1MDAyNnB0cik7XG4gXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoXHUwMDI2cHRyLCAwLCBkYXRhX3N6LCAwKTtcbi1cdGVyciA9IGVyciA/OiBicGZfbWVtY21wKHplcm9lcywgbWVtc2V0X3plcm9fZGF0YSwgZGF0YV9zeik7XG4mIzQzO1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcCh6ZXJvZXMsIG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3opO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTc3MCw3ICYjNDM7NzcwLDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF9ub3R6ZXJvKHZvaWQgKmN0eClcbiBcbiBcdGVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X25vdHplcm9fZGF0YSwgZGF0YV9zeiwgMCwgXHUwMDI2cHRyKTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX21lbXNldChcdTAwMjZwdHIsIDAsIGRhdGFfc3osIERZTlBUUl9NRU1TRVRfVkFMKTtcbi1cdGVyciA9IGVyciA/OiBicGZfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfbm90emVyb19kYXRhLCBkYXRhX3N6KTtcbiYjNDM7XHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfbm90emVyb19kYXRhLCBkYXRhX3N6KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03ODYsNyAmIzQzOzc4Niw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfemVyb19vZmZzZXQodm9pZCAqY3R4KVxuIFxuIFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfemVyb19vZmZzZXRfZGF0YSwgZGF0YV9zeiwgMCwgXHUwMDI2cHRyKTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX21lbXNldChcdTAwMjZwdHIsIDgsIDQsIDApO1xuLVx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX29mZnNldF9kYXRhLCBkYXRhX3N6KTtcbiYjNDM7XHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfemVyb19vZmZzZXRfZGF0YSwgZGF0YV9zeik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtODAzLDcgJiM0Mzs4MDMsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm9fYWRqdXN0ZWQodm9pZCAqY3R4KVxuIFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfemVyb19hZGp1c3RlZF9kYXRhLCBkYXRhX3N6LCAwLCBcdTAwMjZwdHIpO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfYWRqdXN0KFx1MDAyNnB0ciwgNCwgOCk7XG4gXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoXHUwMDI2cHRyLCAwLCBicGZfZHlucHRyX3NpemUoXHUwMDI2cHRyKSwgMCk7XG4tXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeik7XG4mIzQzO1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtODk4LDcgJiM0Mzs4OTgsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3hkcF9jaHVua3Moc3RydWN0IHhkcF9tZCAqeGRwKVxuIFx0XHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXHUwMDI2YnVmLCBjaHVua19zeiwgXHUwMDI2cHRyX3hkcCwgb2Zmc2V0LCAwKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dDtcbi1cdFx0ZXJyID0gYnBmX21lbWNtcChidWYsIGV4cGVjdGVkX2J1Ziwgc2l6ZW9mKGJ1ZikpO1xuJiM0MztcdFx0ZXJyID0gbG9jYWxfbWVtY21wKGJ1ZiwgZXhwZWN0ZWRfYnVmLCBzaXplb2YoYnVmKSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG5AQCAtOTUyLDcgJiM0Mzs5NTIsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmUodm9pZCAqcHRyLCBicGZfcmVhZF9keW5wdHJfZm5fdCBicFxuIFx0XHRcdGJyZWFrO1xuIFx0XHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgbGVuLCBcdTAwMjZwdHJfYnVmLCAwLCAwKTtcbiBcbi1cdFx0aWYgKGVyciB8fCBicGZfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKVxuJiM0MztcdFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbikpXG4gXHRcdFx0ZXJyID0gMTtcbiBcbiBcdFx0LyogUmVzZXQgYnVmZmVyIGFuZCBkeW5wdHIgKi9cbkBAIC05ODYsNyAmIzQzOzk4Niw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X2R5bnB0cl9wcm9iZV9zdHIodm9pZCAqcHRyLFxuIFx0XHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgbGVuLCBcdTAwMjZwdHJfYnVmLCAwLCAwKTtcbiBcdFx0aWYgKCFsZW4pXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICYjMzk7XFwwJiMzOTspXG4mIzQzO1x0XHRpZiAoZXJyIHx8IGxvY2FsX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICYjMzk7XFwwJiMzOTspXG4gXHRcdFx0ZXJyID0gMTtcbiBcdH1cbiBcdGJwZl9yaW5nYnVmX2Rpc2NhcmRfZHlucHRyKFx1MDAyNnB0cl9idWYsIDApO1xuQEAgLTEwMTIsNyAmIzQzOzEwMTIsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCwgdm9pZCAqcHRyLFxuIFx0XHRpZiAobGVuIFx1MDAzZSBzaXplb2YoYnVmKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChcdTAwMjZidWYsIGxlbiwgXHUwMDI2cHRyX3hkcCwgb2ZmLCAwKTtcbi1cdFx0aWYgKGVyciB8fCBicGZfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKVxuJiM0MztcdFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbikpXG4gXHRcdFx0ZXJyID0gMTtcbiBcdFx0LyogUmVzZXQgYnVmZmVyIGFuZCBkeW5wdHIgKi9cbiBcdFx0X19idWlsdGluX21lbXNldChidWYsIDAsIHNpemVvZihidWYpKTtcbkBAIC0xMDQ4LDcgJiM0MzsxMDQ4LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3RfZHlucHRyX3Byb2JlX3N0cl94ZHAoc3RydWN0IHhkcF9tZCAqeGRwLCB2b2lkICpcbiBcbiBcdFx0aWYgKCFsZW4pXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICYjMzk7XFwwJiMzOTspXG4mIzQzO1x0XHRpZiAoZXJyIHx8IGxvY2FsX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICYjMzk7XFwwJiMzOTspXG4gXHRcdFx0ZXJyID0gMTtcbiBcbiBcdFx0X19idWlsdGluX21lbXNldChidWYsIDAsIHNpemVvZihidWYpKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuY1xuaW5kZXggYmRkYzRlODU3OWQyNDQuLmU2N2ZlOTcwMGU1OTNjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuY1xuQEAgLTksNiAmIzQzOzksMTAgQEBcbiBjaGFyICp1c2VyX3B0ciA9IChjaGFyICopMTtcbiBjaGFyICppbnZhbGlkX2tlcm5fcHRyID0gKGNoYXIgKiktMTtcbiBcbiYjNDM7ZXh0ZXJuIGludCBicGZfc3RycGJyayhjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKSBfX2tzeW07XG4mIzQzO2V4dGVybiBpbnQgYnBmX21lbWNtcChjb25zdCB2b2lkICpwdHIxX19pZ24sIGNvbnN0IHZvaWQgKnB0cjJfX2lnbixcbiYjNDM7XHRcdCAgICAgIHNpemVfdCBzaXplKSBfX2tzeW07XG4mIzQzO1xuIC8qXG4gICogV2hlbiBwYXNzaW5nIHVzZXJzcGFjZSBwb2ludGVycywgdGhlIGVycm9yIGNvZGUgZGlmZmVycyBiYXNlZCBvbiBhcmNoOlxuICAqICAgLUVSQU5HRSBvbiBhcmNoZXMgd2l0aCBub24tb3ZlcmxhcHBpbmcgYWRkcmVzcyBzcGFjZXNcbkBAIC01Myw2ICYjNDM7NTcsMTAgQEAgU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybnN0cl9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybnN0cl9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKFwmIzM0O2hlbGxvXCYjMzQ7LCBOVUxMLCAxKTsgfVxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5jYXNlc3RyX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKE5VTEwsIFwmIzM0O2hlbGxvXCYjMzQ7LCAxKTsgfVxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5jYXNlc3RyX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFwmIzM0O2hlbGxvXCYjMzQ7LCBOVUxMLCAxKTsgfVxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKE5VTEwsIFwmIzM0O3hcJiMzNDssIDEpOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X21lbWNtcF9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXCYjMzQ7eFwmIzM0OywgTlVMTCwgMSk7IH1cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RycGJya19udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKE5VTEwsIFwmIzM0O3hcJiMzNDspOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cnBicmtfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcJiMzNDt4XCYjMzQ7LCBOVUxMKTsgfVxuIFxuIC8qIFBhc3NpbmcgdXNlcnNwYWNlIHB0ciB0byBzdHJpbmcga2Z1bmNzICovXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RyY21wX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjbXAodXNlcl9wdHIsIFwmIzM0O2hlbGxvXCYjMzQ7KTsgfVxuQEAgLTc5LDYgJiM0Mzs4NywxMCBAQCBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuc3RyX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmVcbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuc3RyX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKFwmIzM0O2hlbGxvXCYjMzQ7LCB1c2VyX3B0ciwgMSk7IH1cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIodXNlcl9wdHIsIFwmIzM0O2hlbGxvXCYjMzQ7LCAxKTsgfVxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihcJiMzNDtoZWxsb1wmIzM0OywgdXNlcl9wdHIsIDEpOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X21lbWNtcF91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKHVzZXJfcHRyLCBcJiMzNDt4XCYjMzQ7LCAxKTsgfVxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9tZW1jbXBfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChcJiMzNDt4XCYjMzQ7LCB1c2VyX3B0ciwgMSk7IH1cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RycGJya191c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayh1c2VyX3B0ciwgXCYjMzQ7eFwmIzM0Oyk7IH1cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RycGJya191c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcJiMzNDt4XCYjMzQ7LCB1c2VyX3B0cik7IH1cbiBcbiAjZW5kaWYgLyogX19UQVJHRVRfQVJDSF9zMzkwICovXG4gXG5AQCAtMTA3LDUgJiM0MzsxMTksOSBAQCBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RybnN0cl9wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm5cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RybnN0cl9wYWdlZmF1bHQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5zdHIoXCYjMzQ7aGVsbG9cJiMzNDssIGludmFsaWRfa2Vybl9wdHIsIDEpOyB9XG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoaW52YWxpZF9rZXJuX3B0ciwgXCYjMzQ7aGVsbG9cJiMzNDssIDEpOyB9XG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoXCYjMzQ7aGVsbG9cJiMzNDssIGludmFsaWRfa2Vybl9wdHIsIDEpOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9tZW1jbXBfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoaW52YWxpZF9rZXJuX3B0ciwgXCYjMzQ7eFwmIzM0OywgMSk7IH1cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X21lbWNtcF9wYWdlZmF1bHQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChcJiMzNDt4XCYjMzQ7LCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfVxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RycGJya19wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoaW52YWxpZF9rZXJuX3B0ciwgXCYjMzQ7eFwmIzM0Oyk7IH1cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cnBicmtfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKFwmIzM0O3hcJiMzNDssIGludmFsaWRfa2Vybl9wdHIpOyB9XG4gXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuY1xuaW5kZXggNDEyYzUzYjg3YjE4MmIuLmQzYjk3OGU0NTNiZDdjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuY1xuQEAgLTE5LDYgJiM0MzsxOSw4IEBAIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgdGVzdF9zdHJzcG5fc3RyX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnNwbihsb25nX1xuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgdGVzdF9zdHJzcG5fYWNjZXB0X3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnNwbihcJiMzNDtiXCYjMzQ7LCBsb25nX3N0cik7IH1cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgaW50IHRlc3Rfc3RyY3Nwbl9zdHJfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY3Nwbihsb25nX3N0ciwgXCYjMzQ7YlwmIzM0Oyk7IH1cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgaW50IHRlc3Rfc3RyY3Nwbl9yZWplY3RfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY3NwbihcJiMzNDtiXCYjMzQ7LCBsb25nX3N0cik7IH1cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIGludCB0ZXN0X3N0cnBicmtfc3RyX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsobG9uZ19zdHIsIFwmIzM0O3pcJiMzNDspOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgdGVzdF9zdHJwYnJrX2FjY2VwdF90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKFwmIzM0O2JcJiMzNDssIGxvbmdfc3RyKTsgfVxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgdGVzdF9zdHJzdHJfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3Ryc3RyKGxvbmdfc3RyLCBcJiMzNDtoZWxsb1wmIzM0Oyk7IH1cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgaW50IHRlc3Rfc3RyY2FzZXN0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjYXNlc3RyKGxvbmdfc3RyLCBcJiMzNDtoZWxsb1wmIzM0Oyk7IH1cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgaW50IHRlc3Rfc3RybnN0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKGxvbmdfc3RyLCBcJiMzNDtoZWxsb1wmIzM0Oywgc2l6ZW9mKGxvbmdfc3RyKSk7IH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmNcbmluZGV4IGY2NWIxMjI2YTgxYTM3Li4yNWI4Yzg5N2RhNTRiYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jXG5AQCAtNyw2ICYjNDM7NywxMCBAQFxuIFxuIGNoYXIgc3RyW10gPSBcJiMzNDtoZWxsbyB3b3JsZFwmIzM0OztcbiBcbiYjNDM7ZXh0ZXJuIGludCBicGZfc3RycGJyayhjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKSBfX2tzeW07XG4mIzQzO2V4dGVybiBpbnQgYnBmX21lbWNtcChjb25zdCB2b2lkICpwdHIxX19pZ24sIGNvbnN0IHZvaWQgKnB0cjJfX2lnbixcbiYjNDM7XHRcdCAgICAgIHNpemVfdCBzaXplKSBfX2tzeW07XG4mIzQzO1xuICNkZWZpbmUgX190ZXN0KHJldHZhbCkgU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fc3VjY2VzcyBfX3JldHZhbChyZXR2YWwpXG4gXG4gLyogRnVuY3Rpb25hbCB0ZXN0cyAqL1xuQEAgLTYwLDQgJiM0Mzs2NCwyNSBAQCBfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfbm90Zm91bmQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc1xuIF9fdGVzdCgtRU5PRU5UKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9ub3Rmb3VuZDModm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoXCYjMzQ7XCYjMzQ7LCBcJiMzNDthXCYjMzQ7LCAwKTsgfVxuIF9fdGVzdCgwKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9lbXB0eSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihzdHIsIFwmIzM0O1wmIzM0OywgMSk7IH1cbiBcbiYjNDM7LyogYnBmX3N0cnBicmsgLSBmdW5jdGlvbmFsIHRlc3RzICovXG4mIzQzO19fdGVzdCgwKSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX2ZpcnN0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcJiMzNDtoXCYjMzQ7KTsgfVxuJiM0MztfX3Rlc3QoNCkgaW50IHRlc3Rfc3RycGJya19mb3VuZF9taWRkbGUodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFwmIzM0O293XCYjMzQ7KTsgfVxuJiM0MztfX3Rlc3QoMikgaW50IHRlc3Rfc3RycGJya19mb3VuZF9tdWx0aXBsZSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXCYjMzQ7bFwmIzM0Oyk7IH1cbiYjNDM7X190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfbm90Zm91bmQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFwmIzM0O3h5elwmIzM0Oyk7IH1cbiYjNDM7X190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfZW1wdHlfYWNjZXB0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcJiMzNDtcJiMzNDspOyB9XG4mIzQzO1xuJiM0MzsvKiBicGZfbWVtY21wIC0gZnVuY3Rpb25hbCB0ZXN0cyAqL1xuJiM0MztjaGFyIGRhdGExW10gPSBcJiMzNDtoZWxsbyB3b3JsZFwmIzM0OztcbiYjNDM7Y2hhciBkYXRhMltdID0gXCYjMzQ7aGVsbG8gd29ybGRcJiMzNDs7XG4mIzQzO2NoYXIgZGF0YTNbXSA9IFwmIzM0O2hlbGxvIHdvcmxlXCYjMzQ7O1xuJiM0MztfX3Rlc3QoMCkgaW50IHRlc3RfbWVtY21wX2VxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTIsIHNpemVvZihkYXRhMSkpOyB9XG4mIzQzO19fdGVzdCgtMSkgaW50IHRlc3RfbWVtY21wX25lcV9sZXNzKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTMsIHNpemVvZihkYXRhMSkpOyB9XG4mIzQzO19fdGVzdCgxKSBpbnQgdGVzdF9tZW1jbXBfbmVxX2dyZWF0ZXIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGRhdGEzLCBkYXRhMSwgc2l6ZW9mKGRhdGExKSk7IH1cbiYjNDM7X190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9zaXplX3plcm8odm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGRhdGExLCBkYXRhMywgMCk7IH1cbiYjNDM7LyogbWVtY21wIHNob3VsZCBOT1Qgc3RvcCBhdCBudWxsIGJ5dGUgLSBjb21wYXJlIHBhc3QgJiMzOTtcXDAmIzM5OyAqL1xuJiM0MztjaGFyIGJpbjFbXSA9IHsgJiMzOTthJiMzOTssICYjMzk7XFwwJiMzOTssICYjMzk7YyYjMzk7IH07XG4mIzQzO2NoYXIgYmluMltdID0geyAmIzM5O2EmIzM5OywgJiMzOTtcXDAmIzM5OywgJiMzOTtkJiMzOTsgfTtcbiYjNDM7X190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9udWxsX2J5dGVfZXEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGJpbjEsIGJpbjEsIHNpemVvZihiaW4xKSk7IH1cbiYjNDM7X190ZXN0KC0xKSBpbnQgdGVzdF9tZW1jbXBfbnVsbF9ieXRlX25lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoYmluMSwgYmluMiwgc2l6ZW9mKGJpbjEpKTsgfVxuJiM0MztcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE1OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3N0cnBicmsmIzM0OywKICAgICYjMzQ7YnBmX21lbWNtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgQlBGIGtmdW5jcywgYnBmX3N0cnBicmsgYW5kIGJwZl9tZW1jbXAsIHdoaWNoIGNhbiBiZSBjYWxsZWQgZnJvbSBCUEYgcHJvZ3JhbXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGFkZGl0aW9ucyB0byB0aGUgY29yZSBCUEYgaGVscGVyIGxpYnJhcnkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc4ZmFkNTQ0NTdjNDAyNDQ0OTZlOGNlMDBiYzQxY2I3N2E2YzUxZmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1biAyNiAxNTozMzo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmMKaW5kZXggYjUzMTRjOWZlZDNjZjAuLmVhZDAwZWMzMTRmNTRhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hlbHBlcnMuYwpAQCAtMzk3MSw2ICYjNDM7Mzk3MSw5MiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICpyZWplY3RfX2lnbikKIAlyZXR1cm4gLUVGQVVMVDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGJwZl9zdHJwYnJrIC0gRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHNldCBvZiBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nCiYjNDM7ICogQHNfX2lnbjogVGhlIHN0cmluZyB0byBiZSBzZWFyY2hlZAomIzQzOyAqIEBhY2NlcHRfX2lnbjogVGhlIHN0cmluZyBjb250YWluaW5nIHRoZSBjaGFyYWN0ZXJzIHRvIHNlYXJjaCBmb3IKJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqICZndDs9MCAgICAgIC0gSW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBAc19faWduIHRoYXQgbWF0Y2hlcyBhbnkKJiM0MzsgKiAgICAgICAgICAgICAgY2hhcmFjdGVyIGluIEBhY2NlcHRfX2lnbgomIzQzOyAqICogJS1FTk9FTlQgLSBObyBjaGFyYWN0ZXIgb2YgQGFjY2VwdF9faWduIGZvdW5kIGluIEBzX19pZ24KJiM0MzsgKiAqICUtRUZBVUxUIC0gQ2Fubm90IHJlYWQgb25lIG9mIHRoZSBzdHJpbmdzCiYjNDM7ICogKiAlLUUyQklHICAtIE9uZSBvZiB0aGUgc3RyaW5ncyBpcyB0b28gbGFyZ2UKJiM0MzsgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBzdHJpbmdzIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbikKJiM0Mzt7CiYjNDM7CWNoYXIgY3MsIGNhOwomIzQzOwlpbnQgaSwgajsKJiM0MzsKJiM0MzsJaWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzX19pZ24sIDEpIHx8CiYjNDM7CSAgICAhY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoYWNjZXB0X19pZ24sIDEpKSB7CiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJfQomIzQzOwomIzQzOwlndWFyZChwYWdlZmF1bHQpKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlpZiAoY3MgPT0gJiMzOTtcMCYjMzk7KQomIzQzOwkJCXJldHVybiAtRU5PRU5UOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBqJiM0MzsmIzQzOykgewomIzQzOwkJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7Y2EsIGFjY2VwdF9faWduICYjNDM7IGosIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJCWlmIChjYSA9PSAmIzM5O1wwJiMzOTspCiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCWlmIChjcyA9PSBjYSkKJiM0MzsJCQkJcmV0dXJuIGk7CiYjNDM7CQl9CiYjNDM7CQlpZiAoaiA9PSBYQVRUUl9TSVpFX01BWCkKJiM0MzsJCQlyZXR1cm4gLUUyQklHOwomIzQzOwkJc19faWduJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gLUUyQklHOwomIzQzO2Vycl9vdXQ6CiYjNDM7CXJldHVybiAtRUZBVUxUOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfbWVtY21wIC0gQ29tcGFyZSB0d28gbWVtb3J5IHJlZ2lvbnMgYnl0ZSBieSBieXRlCiYjNDM7ICogQHB0cjFfX2lnbjogRmlyc3QgbWVtb3J5IHJlZ2lvbgomIzQzOyAqIEBwdHIyX19pZ246IFNlY29uZCBtZW1vcnkgcmVnaW9uCiYjNDM7ICogQHNpemU6IE51bWJlciBvZiBieXRlcyB0byBjb21wYXJlCiYjNDM7ICoKJiM0MzsgKiBDb21wYXJlcyB0aGUgZmlyc3QgQHNpemUgYnl0ZXMgb2YgdGhlIG1lbW9yeSBhcmVhcyBAcHRyMV9faWduIGFuZAomIzQzOyAqIEBwdHIyX19pZ24uIFVubGlrZSBicGZfc3RyY21wLCBudWxsIGJ5dGVzIGRvIG5vdCB0ZXJtaW5hdGUgdGhlIGNvbXBhcmlzb24uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAlMCAgICAgICAtIFRoZSBtZW1vcnkgcmVnaW9ucyBhcmUgZXF1YWwKJiM0MzsgKiAqICUtMSAgICAgIC0gQHB0cjFfX2lnbiBpcyBsZXNzIHRoYW4gQHB0cjJfX2lnbgomIzQzOyAqICogJTEgICAgICAgLSBAcHRyMV9faWduIGlzIGdyZWF0ZXIgdGhhbiBAcHRyMl9faWduCiYjNDM7ICogKiAlLUVGQVVMVCAtIENhbm5vdCByZWFkIG9uZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbnMKJiM0MzsgKiAqICUtRTJCSUcgIC0gQHNpemUgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIHNpemUKJiM0MzsgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBtZW1vcnkgcmVnaW9ucyBpcyBvdXRzaWRlIG9mIGtlcm5lbCBhZGRyZXNzIHNwYWNlCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sCiYjNDM7CQkJICAgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwljb25zdCB1bnNpZ25lZCBjaGFyICpwMSA9IHB0cjFfX2lnbiwgKnAyID0gcHRyMl9faWduOwomIzQzOwl1bnNpZ25lZCBjaGFyIGMxLCBjMjsKJiM0MzsJc2l6ZV90IGk7CiYjNDM7CiYjNDM7CWlmIChzaXplICZndDsgWEFUVFJfU0laRV9NQVgpCiYjNDM7CQlyZXR1cm4gLUUyQklHOwomIzQzOwlpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHAxLCBzaXplKSB8fAomIzQzOwkgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHAyLCBzaXplKSkKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwomIzQzOwlndWFyZChwYWdlZmF1bHQpKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBzaXplOyBpJiM0MzsmIzQzOykgewomIzQzOwkJX19nZXRfa2VybmVsX25vZmF1bHQoJmFtcDtjMSwgcDEgJiM0MzsgaSwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO2MyLCBwMiAmIzQzOyBpLCBjaGFyLCBlcnJfb3V0KTsKJiM0MzsJCWlmIChjMSAhPSBjMikKJiM0MzsJCQlyZXR1cm4gYzEgJmx0OyBjMiA/IC0xIDogMTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0MztlcnJfb3V0OgomIzQzOwlyZXR1cm4gLUVGQVVMVDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9fYnBmX3N0cm5zdHIoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbGVuLAogCQkJIGJvb2wgaWdub3JlX2Nhc2UpCiB7CkBAIC00ODUwLDYgJiM0Mzs0OTM2LDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJsZW4pOwogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJubGVuKTsKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3Ryc3BuKTsKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY3Nwbik7CiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJwYnJrKTsKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX21lbWNtcCk7CiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cnN0cik7CiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNhc2VzdHIpOwogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJuc3RyKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmluZ19rZnVuY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmluZ19rZnVuY3MuYwppbmRleCAzMDAwMzJhMTk0NDUxNC4uOTU5ZmYzNzExMGExNjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmluZ19rZnVuY3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJpbmdfa2Z1bmNzLmMKQEAgLTIwLDYgJiM0MzsyMCw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGVzdF9jYXNlc1tdID0gewogCSYjMzQ7c3Ryc3BuX2FjY2VwdCYjMzQ7LAogCSYjMzQ7c3RyY3Nwbl9zdHImIzM0OywKIAkmIzM0O3N0cmNzcG5fcmVqZWN0JiMzNDssCiYjNDM7CQkmIzM0O3N0cnBicmtfc3RyJiMzNDssCiYjNDM7CQkmIzM0O3N0cnBicmtfYWNjZXB0JiMzNDssCiAJJiMzNDtzdHJzdHImIzM0OywKIAkmIzM0O3N0cmNhc2VzdHImIzM0OywKIAkmIzM0O3N0cm5zdHImIzM0OywKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9zdWNjZXNzLmMKaW5kZXggZTBkNjcyZDkzYWRmODUuLjA3MTU4MWZmMDgzM2YzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuYwpAQCAtNjI0LDcgJiM0Mzs2MjQsNyBAQCBpbnQgQlBGX1BST0codGVzdF9keW5wdHJfc2tiX3RwX2J0Ziwgdm9pZCAqc2tiLCB2b2lkICpsb2NhdGlvbikKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYnBmX21lbWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCB1MzIgc2l6ZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBsb2NhbF9tZW1jbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgdTMyIHNpemUpCiB7CiAJaW50IGk7CiAKQEAgLTY1MCwxMiAmIzQzOzY1MCwxMiBAQCBpbnQgdGVzdF9keW5wdHJfY29weSh2b2lkICpjdHgpCiAJZXJyID0gYnBmX2R5bnB0cl93cml0ZSgmYW1wO3NyYywgMCwgZGF0YSwgc3osIDApOwogCWVyciA9IGVyciA/OiBicGZfZHlucHRyX2NvcHkoJmFtcDtkc3QsIDAsICZhbXA7c3JjLCAwLCBzeik7CiAJZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChidWYsIHN6LCAmYW1wO2RzdCwgMCwgMCk7Ci0JZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBzeik7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBzeik7CiAKIAkvKiBUZXN0IHRoYXQgb2Zmc2V0cyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgKi8KIAllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9jb3B5KCZhbXA7ZHN0LCAzLCAmYW1wO3NyYywgNSwgc3ogLSA1KTsKIAllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKGJ1Ziwgc3ogLSA1LCAmYW1wO2RzdCwgMywgMCk7Ci0JZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZGF0YSAmIzQzOyA1LCBidWYsIHN6IC0gNSk7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZGF0YSAmIzQzOyA1LCBidWYsIHN6IC0gNSk7CiAKIAlicGZfcmluZ2J1Zl9kaXNjYXJkX2R5bnB0cigmYW1wO3NyYywgMCk7CiAJYnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoJmFtcDtkc3QsIDApOwpAQCAtNjkyLDcgJiM0Mzs2OTIsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKQogCQllcnIgPSBicGZfZHlucHRyX3JlYWQoJmFtcDtidWYsIGxlbiwgJmFtcDtwdHJfeGRwLCBpICogbGVuLCAwKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwotCQlpZiAoYnBmX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMCkKJiM0MzsJCWlmIChsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApCiAJCQlnb3RvIG91dDsKIAl9CiAKQEAgLTcxMyw3ICYjNDM7NzEzLDcgQEAgaW50IHRlc3RfZHlucHRyX2NvcHlfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCkKIAkJZXJyID0gYnBmX2R5bnB0cl9yZWFkKCZhbXA7YnVmLCBsZW4sICZhbXA7cHRyX2J1ZiwgaSAqIGxlbiwgMCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKLQkJaWYgKGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApCiYjNDM7CQlpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKQogCQkJZ290byBvdXQ7CiAJfQogCkBAIC03MjcsNyAmIzQzOzcyNyw3IEBAIGludCB0ZXN0X2R5bnB0cl9jb3B5X3hkcChzdHJ1Y3QgeGRwX21kICp4ZHApCiAJCWVyciA9IGJwZl9keW5wdHJfcmVhZCgmYW1wO2J1ZiwgbGVuLCAmYW1wO3B0cl94ZHAsIDIgJiM0MzsgaSAqIGxlbiwgMCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKLQkJaWYgKGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApCiYjNDM7CQlpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKQogCQkJZ290byBvdXQ7CiAJfQogCkBAIC03NTAsNyAmIzQzOzc1MCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfemVybyh2b2lkICpjdHgpCiAKIAllcnIgPSBicGZfZHlucHRyX2Zyb21fbWVtKG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3osIDAsICZhbXA7cHRyKTsKIAllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoJmFtcDtwdHIsIDAsIGRhdGFfc3osIDApOwotCWVyciA9IGVyciA/OiBicGZfbWVtY21wKHplcm9lcywgbWVtc2V0X3plcm9fZGF0YSwgZGF0YV9zeik7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoemVyb2VzLCBtZW1zZXRfemVyb19kYXRhLCBkYXRhX3N6KTsKIAogCXJldHVybiAwOwogfQpAQCAtNzcwLDcgJiM0Mzs3NzAsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X25vdHplcm8odm9pZCAqY3R4KQogCiAJZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfbm90emVyb19kYXRhLCBkYXRhX3N6LCAwLCAmYW1wO3B0cik7CiAJZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KCZhbXA7cHRyLCAwLCBkYXRhX3N6LCBEWU5QVFJfTUVNU0VUX1ZBTCk7Ci0JZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF9ub3R6ZXJvX2RhdGEsIGRhdGFfc3opOwomIzQzOwllcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfbm90emVyb19kYXRhLCBkYXRhX3N6KTsKIAogCXJldHVybiAwOwogfQpAQCAtNzg2LDcgJiM0Mzs3ODYsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm9fb2Zmc2V0KHZvaWQgKmN0eCkKIAogCWVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X3plcm9fb2Zmc2V0X2RhdGEsIGRhdGFfc3osIDAsICZhbXA7cHRyKTsKIAllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoJmFtcDtwdHIsIDgsIDQsIDApOwotCWVyciA9IGVyciA/OiBicGZfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfemVyb19vZmZzZXRfZGF0YSwgZGF0YV9zeik7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX29mZnNldF9kYXRhLCBkYXRhX3N6KTsKIAogCXJldHVybiAwOwogfQpAQCAtODAzLDcgJiM0Mzs4MDMsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm9fYWRqdXN0ZWQodm9pZCAqY3R4KQogCWVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeiwgMCwgJmFtcDtwdHIpOwogCWVyciA9IGVyciA/OiBicGZfZHlucHRyX2FkanVzdCgmYW1wO3B0ciwgNCwgOCk7CiAJZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KCZhbXA7cHRyLCAwLCBicGZfZHlucHRyX3NpemUoJmFtcDtwdHIpLCAwKTsKLQllcnIgPSBlcnIgPzogYnBmX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeik7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX2FkanVzdGVkX2RhdGEsIGRhdGFfc3opOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04OTgsNyAmIzQzOzg5OCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfeGRwX2NodW5rcyhzdHJ1Y3QgeGRwX21kICp4ZHApCiAJCWVyciA9IGJwZl9keW5wdHJfcmVhZCgmYW1wO2J1ZiwgY2h1bmtfc3osICZhbXA7cHRyX3hkcCwgb2Zmc2V0LCAwKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwotCQllcnIgPSBicGZfbWVtY21wKGJ1ZiwgZXhwZWN0ZWRfYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CQllcnIgPSBsb2NhbF9tZW1jbXAoYnVmLCBleHBlY3RlZF9idWYsIHNpemVvZihidWYpKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTk1Miw3ICYjNDM7OTUyLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3RfZHlucHRyX3Byb2JlKHZvaWQgKnB0ciwgYnBmX3JlYWRfZHlucHRyX2ZuX3QgYnAKIAkJCWJyZWFrOwogCQllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKCZhbXA7YnVmLCBsZW4sICZhbXA7cHRyX2J1ZiwgMCwgMCk7CiAKLQkJaWYgKGVyciB8fCBicGZfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKQomIzQzOwkJaWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbikpCiAJCQllcnIgPSAxOwogCiAJCS8qIFJlc2V0IGJ1ZmZlciBhbmQgZHlucHRyICovCkBAIC05ODYsNyAmIzQzOzk4Niw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X2R5bnB0cl9wcm9iZV9zdHIodm9pZCAqcHRyLAogCQllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKCZhbXA7YnVmLCBsZW4sICZhbXA7cHRyX2J1ZiwgMCwgMCk7CiAJCWlmICghbGVuKQogCQkJY29udGludWU7Ci0JCWlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICYjMzk7XDAmIzM5OykKJiM0MzsJCWlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4gLSAxKSB8fCBidWZbbGVuIC0gMV0gIT0gJiMzOTtcMCYjMzk7KQogCQkJZXJyID0gMTsKIAl9CiAJYnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoJmFtcDtwdHJfYnVmLCAwKTsKQEAgLTEwMTIsNyAmIzQzOzEwMTIsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCwgdm9pZCAqcHRyLAogCQlpZiAobGVuICZndDsgc2l6ZW9mKGJ1ZikpCiAJCQljb250aW51ZTsKIAkJZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZCgmYW1wO2J1ZiwgbGVuLCAmYW1wO3B0cl94ZHAsIG9mZiwgMCk7Ci0JCWlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSkKJiM0MzsJCWlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKQogCQkJZXJyID0gMTsKIAkJLyogUmVzZXQgYnVmZmVyIGFuZCBkeW5wdHIgKi8KIAkJX19idWlsdGluX21lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKQEAgLTEwNDgsNyAmIzQzOzEwNDgsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfc3RyX3hkcChzdHJ1Y3QgeGRwX21kICp4ZHAsIHZvaWQgKgogCiAJCWlmICghbGVuKQogCQkJY29udGludWU7Ci0JCWlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICYjMzk7XDAmIzM5OykKJiM0MzsJCWlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4gLSAxKSB8fCBidWZbbGVuIC0gMV0gIT0gJiMzOTtcMCYjMzk7KQogCQkJZXJyID0gMTsKIAogCQlfX2J1aWx0aW5fbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMKaW5kZXggYmRkYzRlODU3OWQyNDQuLmU2N2ZlOTcwMGU1OTNjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMKQEAgLTksNiAmIzQzOzksMTAgQEAKIGNoYXIgKnVzZXJfcHRyID0gKGNoYXIgKikxOwogY2hhciAqaW52YWxpZF9rZXJuX3B0ciA9IChjaGFyICopLTE7CiAKJiM0MztleHRlcm4gaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pIF9fa3N5bTsKJiM0MztleHRlcm4gaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sCiYjNDM7CQkgICAgICBzaXplX3Qgc2l6ZSkgX19rc3ltOwomIzQzOwogLyoKICAqIFdoZW4gcGFzc2luZyB1c2Vyc3BhY2UgcG9pbnRlcnMsIHRoZSBlcnJvciBjb2RlIGRpZmZlcnMgYmFzZWQgb24gYXJjaDoKICAqICAgLUVSQU5HRSBvbiBhcmNoZXMgd2l0aCBub24tb3ZlcmxhcHBpbmcgYWRkcmVzcyBzcGFjZXMKQEAgLTUzLDYgJiM0Mzs1NywxMCBAQCBTRUMoJiMzNDtzeXNjYWxsJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybnN0cl9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybnN0cl9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKCYjMzQ7aGVsbG8mIzM0OywgTlVMTCwgMSk7IH0KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJuY2FzZXN0cl9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihOVUxMLCAmIzM0O2hlbGxvJiMzNDssIDEpOyB9CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybmNhc2VzdHJfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoJiMzNDtoZWxsbyYjMzQ7LCBOVUxMLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKE5VTEwsICYjMzQ7eCYjMzQ7LCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKCYjMzQ7eCYjMzQ7LCBOVUxMLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJwYnJrX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoTlVMTCwgJiMzNDt4JiMzNDspOyB9CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cnBicmtfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyaygmIzM0O3gmIzM0OywgTlVMTCk7IH0KIAogLyogUGFzc2luZyB1c2Vyc3BhY2UgcHRyIHRvIHN0cmluZyBrZnVuY3MgKi8KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJjbXBfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcCh1c2VyX3B0ciwgJiMzNDtoZWxsbyYjMzQ7KTsgfQpAQCAtNzksNiAmIzQzOzg3LDEwIEBAIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuc3RyX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmUKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuc3RyX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKCYjMzQ7aGVsbG8mIzM0OywgdXNlcl9wdHIsIDEpOyB9CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKHVzZXJfcHRyLCAmIzM0O2hlbGxvJiMzNDssIDEpOyB9CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKCYjMzQ7aGVsbG8mIzM0OywgdXNlcl9wdHIsIDEpOyB9CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X21lbWNtcF91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKHVzZXJfcHRyLCAmIzM0O3gmIzM0OywgMSk7IH0KJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3RfbWVtY21wX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoJiMzNDt4JiMzNDssIHVzZXJfcHRyLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJwYnJrX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHVzZXJfcHRyLCAmIzM0O3gmIzM0Oyk7IH0KJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RycGJya191c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyaygmIzM0O3gmIzM0OywgdXNlcl9wdHIpOyB9CiAKICNlbmRpZiAvKiBfX1RBUkdFVF9BUkNIX3MzOTAgKi8KIApAQCAtMTA3LDUgJiM0MzsxMTksOSBAQCBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5zdHJfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5zdHJfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKCYjMzQ7aGVsbG8mIzM0OywgaW52YWxpZF9rZXJuX3B0ciwgMSk7IH0KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihpbnZhbGlkX2tlcm5fcHRyLCAmIzM0O2hlbGxvJiMzNDssIDEpOyB9CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoJiMzNDtoZWxsbyYjMzQ7LCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3RfbWVtY21wX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGludmFsaWRfa2Vybl9wdHIsICYjMzQ7eCYjMzQ7LCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3RfbWVtY21wX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKCYjMzQ7eCYjMzQ7LCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RycGJya19wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoaW52YWxpZF9rZXJuX3B0ciwgJiMzNDt4JiMzNDspOyB9CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJwYnJrX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyaygmIzM0O3gmIzM0OywgaW52YWxpZF9rZXJuX3B0cik7IH0KIAogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmMKaW5kZXggNDEyYzUzYjg3YjE4MmIuLmQzYjk3OGU0NTNiZDdjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmMKQEAgLTE5LDYgJiM0MzsxOSw4IEBAIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgaW50IHRlc3Rfc3Ryc3BuX3N0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJzcG4obG9uZ18KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgaW50IHRlc3Rfc3Ryc3BuX2FjY2VwdF90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJzcG4oJiMzNDtiJiMzNDssIGxvbmdfc3RyKTsgfQogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBpbnQgdGVzdF9zdHJjc3BuX3N0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjc3BuKGxvbmdfc3RyLCAmIzM0O2ImIzM0Oyk7IH0KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgaW50IHRlc3Rfc3RyY3Nwbl9yZWplY3RfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY3NwbigmIzM0O2ImIzM0OywgbG9uZ19zdHIpOyB9CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBpbnQgdGVzdF9zdHJwYnJrX3N0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKGxvbmdfc3RyLCAmIzM0O3omIzM0Oyk7IH0KJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspIGludCB0ZXN0X3N0cnBicmtfYWNjZXB0X3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoJiMzNDtiJiMzNDssIGxvbmdfc3RyKTsgfQogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBpbnQgdGVzdF9zdHJzdHJfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3Ryc3RyKGxvbmdfc3RyLCAmIzM0O2hlbGxvJiMzNDspOyB9CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIGludCB0ZXN0X3N0cmNhc2VzdHJfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY2FzZXN0cihsb25nX3N0ciwgJiMzNDtoZWxsbyYjMzQ7KTsgfQogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBpbnQgdGVzdF9zdHJuc3RyX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5zdHIobG9uZ19zdHIsICYjMzQ7aGVsbG8mIzM0Oywgc2l6ZW9mKGxvbmdfc3RyKSk7IH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYwppbmRleCBmNjViMTIyNmE4MWEzNy4uMjViOGM4OTdkYTU0YmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmMKQEAgLTcsNiAmIzQzOzcsMTAgQEAKIAogY2hhciBzdHJbXSA9ICYjMzQ7aGVsbG8gd29ybGQmIzM0OzsKIAomIzQzO2V4dGVybiBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbikgX19rc3ltOwomIzQzO2V4dGVybiBpbnQgYnBmX21lbWNtcChjb25zdCB2b2lkICpwdHIxX19pZ24sIGNvbnN0IHZvaWQgKnB0cjJfX2lnbiwKJiM0MzsJCSAgICAgIHNpemVfdCBzaXplKSBfX2tzeW07CiYjNDM7CiAjZGVmaW5lIF9fdGVzdChyZXR2YWwpIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgX19zdWNjZXNzIF9fcmV0dmFsKHJldHZhbCkKIAogLyogRnVuY3Rpb25hbCB0ZXN0cyAqLwpAQCAtNjAsNCAmIzQzOzY0LDI1IEBAIF9fdGVzdCgtRU5PRU5UKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9ub3Rmb3VuZDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzCiBfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfbm90Zm91bmQzKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKCYjMzQ7JiMzNDssICYjMzQ7YSYjMzQ7LCAwKTsgfQogX190ZXN0KDApIGludCB0ZXN0X3N0cm5jYXNlc3RyX2VtcHR5KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKHN0ciwgJiMzNDsmIzM0OywgMSk7IH0KIAomIzQzOy8qIGJwZl9zdHJwYnJrIC0gZnVuY3Rpb25hbCB0ZXN0cyAqLwomIzQzO19fdGVzdCgwKSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX2ZpcnN0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCAmIzM0O2gmIzM0Oyk7IH0KJiM0MztfX3Rlc3QoNCkgaW50IHRlc3Rfc3RycGJya19mb3VuZF9taWRkbGUodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsICYjMzQ7b3cmIzM0Oyk7IH0KJiM0MztfX3Rlc3QoMikgaW50IHRlc3Rfc3RycGJya19mb3VuZF9tdWx0aXBsZSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgJiMzNDtsJiMzNDspOyB9CiYjNDM7X190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfbm90Zm91bmQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsICYjMzQ7eHl6JiMzNDspOyB9CiYjNDM7X190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfZW1wdHlfYWNjZXB0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCAmIzM0OyYjMzQ7KTsgfQomIzQzOwomIzQzOy8qIGJwZl9tZW1jbXAgLSBmdW5jdGlvbmFsIHRlc3RzICovCiYjNDM7Y2hhciBkYXRhMVtdID0gJiMzNDtoZWxsbyB3b3JsZCYjMzQ7OwomIzQzO2NoYXIgZGF0YTJbXSA9ICYjMzQ7aGVsbG8gd29ybGQmIzM0OzsKJiM0MztjaGFyIGRhdGEzW10gPSAmIzM0O2hlbGxvIHdvcmxlJiMzNDs7CiYjNDM7X190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTEsIGRhdGEyLCBzaXplb2YoZGF0YTEpKTsgfQomIzQzO19fdGVzdCgtMSkgaW50IHRlc3RfbWVtY21wX25lcV9sZXNzKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTMsIHNpemVvZihkYXRhMSkpOyB9CiYjNDM7X190ZXN0KDEpIGludCB0ZXN0X21lbWNtcF9uZXFfZ3JlYXRlcih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTMsIGRhdGExLCBzaXplb2YoZGF0YTEpKTsgfQomIzQzO19fdGVzdCgwKSBpbnQgdGVzdF9tZW1jbXBfc2l6ZV96ZXJvKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTMsIDApOyB9CiYjNDM7LyogbWVtY21wIHNob3VsZCBOT1Qgc3RvcCBhdCBudWxsIGJ5dGUgLSBjb21wYXJlIHBhc3QgJiMzOTtcMCYjMzk7ICovCiYjNDM7Y2hhciBiaW4xW10gPSB7ICYjMzk7YSYjMzk7LCAmIzM5O1wwJiMzOTssICYjMzk7YyYjMzk7IH07CiYjNDM7Y2hhciBiaW4yW10gPSB7ICYjMzk7YSYjMzk7LCAmIzM5O1wwJiMzOTssICYjMzk7ZCYjMzk7IH07CiYjNDM7X190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9udWxsX2J5dGVfZXEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGJpbjEsIGJpbjEsIHNpemVvZihiaW4xKSk7IH0KJiM0MztfX3Rlc3QoLTEpIGludCB0ZXN0X21lbWNtcF9udWxsX2J5dGVfbmVxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChiaW4xLCBiaW4yLCBzaXplb2YoYmluMSkpOyB9CiYjNDM7CiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE1OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1ODIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuIGZvciBOZXcgQlBGIEtmdW5jcyoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgbmV3IHBhdGNoIGludHJvZHVjaW5nIGBicGZfc3RycGJya2AgYW5kIGBicGZfbWVtY21wYCBhcyBCUEYga2Z1bmNzLiBUaGlzIGlzIGludGVyZXN0aW5nIOKAkyBuZXcgZnVuY3Rpb25hbGl0eSBleHBvc2VkIHRvIEJQRiBwcm9ncmFtcy4gU2luY2UgdGhpcyBjb2RlIGlzLCBieSBkZXNpZ24sIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbG9hZGVkIGFuZCBydW5uaW5nIEJQRiBwcm9ncmFtcywgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBuZXcga2Z1bmNzIGNhbiB3aXRoc3RhbmQgaG9zdGlsZSBpbnB1dC4KCkZpcnN0LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzOiBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAuIFRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzIHdlJiMzOTtsbCBiZSB0YXJnZXRpbmcuCgpOZXh0LCB3ZSBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AgYW5kIGBrZXJuZWwvYnBmL01ha2VmaWxlYCB0byBjb25maXJtLCBidXQgSSYjMzk7bSBiZXR0aW5nIHdlJiMzOTtsbCBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgIChvciBwb3NzaWJseSBqdXN0IGBDT05GSUdfQlBGYCwgYnV0IG1vcmUgbGlrZWx5IHRoZSBmb3JtZXIpIGVuYWJsZWQuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBidWlsZCBhbmQgcnVudGltZSBlbnZpcm9ubWVudHMgYXJlIHN1aXRhYmxlLgoKT25jZSBJIGhhdmUgdmVyaWZpZWQgdGhlc2UgY29uZmlndXJhdGlvbnMsIEkgd2lsbCB1c2UgdGhlIGF2YWlsYWJsZSBmdXp6aW5nIHRvb2xzIHRvIHRlc3QgdGhlc2UgbmV3IGtmdW5jcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RycGJyayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYz0zOTQzPV9fYnBmX2tmdW5jIGludCBicGZfc3RyY3Nwbihjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKnJlamVjdF9faWduKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTM5NzQtLyoqXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozOTc1OiAqIGJwZl9zdHJwYnJrIC0gRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHNldCBvZiBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zOTc2LSAqIEBzX19pZ246IFRoZSBzdHJpbmcgdG8gYmUgc2VhcmNoZWRcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zOTg2LSAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzk4NzpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbilcbmtlcm5lbC9icGYvaGVscGVycy5jLTM5ODgte1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ5Mzg9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjc3BuKTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5Mzk6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJwYnJrKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NDAtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9tZW1jbXApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9MTA9Y2hhciAqaW52YWxpZF9rZXJuX3B0ciA9IChjaGFyICopLTE7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTExLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYzoxMjpleHRlcm4gaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pIF9fa3N5bTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMtMTMtZXh0ZXJuIGludCBicGZfbWVtY21wKGNvbnN0IHZvaWQgKnB0cjFfX2lnbiwgY29uc3Qgdm9pZCAqcHRyMl9faWduLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9NjE9U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3RfbWVtY21wX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChcJiMzNDt4XCYjMzQ7LCBOVUxMLCAxKTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYzo2MjpTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJwYnJrX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoTlVMTCwgXCYjMzQ7eFwmIzM0Oyk7IH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6NjM6U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RycGJya19udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKFwmIzM0O3hcJiMzNDssIE5VTEwpOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTY0LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9OTE9U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3RfbWVtY21wX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXCYjMzQ7eFwmIzM0OywgdXNlcl9wdHIsIDEpOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jOjkyOlNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cnBicmtfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsodXNlcl9wdHIsIFwmIzM0O3hcJiMzNDspOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jOjkzOlNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cnBicmtfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXCYjMzQ7eFwmIzM0OywgdXNlcl9wdHIpOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTk0LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9MTIzPVNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9tZW1jbXBfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXCYjMzQ7eFwmIzM0OywgaW52YWxpZF9rZXJuX3B0ciwgMSk7IH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6MTI0OlNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJwYnJrX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhpbnZhbGlkX2tlcm5fcHRyLCBcJiMzNDt4XCYjMzQ7KTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYzoxMjU6U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cnBicmtfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKFwmIzM0O3hcJiMzNDssIGludmFsaWRfa2Vybl9wdHIpOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTEyNi1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMi5jPTIxPVNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgdGVzdF9zdHJjc3BuX3JlamVjdF90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjc3BuKFwmIzM0O2JcJiMzNDssIGxvbmdfc3RyKTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuYzoyMjpTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgaW50IHRlc3Rfc3RycGJya19zdHJfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhsb25nX3N0ciwgXCYjMzQ7elwmIzM0Oyk7IH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmM6MjM6U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIGludCB0ZXN0X3N0cnBicmtfYWNjZXB0X3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXCYjMzQ7YlwmIzM0OywgbG9uZ19zdHIpOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMi5jLTI0LVNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgdGVzdF9zdHJzdHJfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3Ryc3RyKGxvbmdfc3RyLCBcJiMzNDtoZWxsb1wmIzM0Oyk7IH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmM9OD1jaGFyIHN0cltdID0gXCYjMzQ7aGVsbG8gd29ybGRcJiMzNDs7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmMtOS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYzoxMDpleHRlcm4gaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pIF9fa3N5bTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYy0xMS1leHRlcm4gaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jPTY1PV9fdGVzdCgwKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9lbXB0eSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihzdHIsIFwmIzM0O1wmIzM0OywgMSk7IH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYy02Ni1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYzo2NzovKiBicGZfc3RycGJyayAtIGZ1bmN0aW9uYWwgdGVzdHMgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYzo2ODpfX3Rlc3QoMCkgaW50IHRlc3Rfc3RycGJya19mb3VuZF9maXJzdCh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXCYjMzQ7aFwmIzM0Oyk7IH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYzo2OTpfX3Rlc3QoNCkgaW50IHRlc3Rfc3RycGJya19mb3VuZF9taWRkbGUodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFwmIzM0O293XCYjMzQ7KTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jOjcwOl9fdGVzdCgyKSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX211bHRpcGxlKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcJiMzNDtsXCYjMzQ7KTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jOjcxOl9fdGVzdCgtRU5PRU5UKSBpbnQgdGVzdF9zdHJwYnJrX25vdGZvdW5kKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcJiMzNDt4eXpcJiMzNDspOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmM6NzI6X190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfZW1wdHlfYWNjZXB0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcJiMzNDtcJiMzNDspOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmMtNzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTU6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIE5ldyBCUEYgSGVscGVycyoqCgpBbHJpZ2h0LCBzbyBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAgaGF2ZSBiZWVuIGFkZGVkIHRvIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AuIEludGVyZXN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IHRoZXNlIGFyZSBleHBvc2VkLiBBZGRpbmcgdGhlc2UgcHJpbWl0aXZlcyBpcyBhIHNpZ25pZmljYW50IHN0ZXAsIGFzIHRoZXkgZ3JlYXRseSBleHBhbmQgdGhlIHBvdGVudGlhbCBmdW5jdGlvbmFsaXR5IG9mIEJQRiBwcm9ncmFtcy4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBsb29rIGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFVuZGVyc3RhbmRpbmcgd2hpY2ggY29uZmlnIGZsYWdzIGVuYWJsZSBga2VybmVsL2JwZi9oZWxwZXJzLmNgIGlzIGNydWNpYWwuIEl04oCZcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4ga2VybmVsIGZlYXR1cmVzIGFuZCB0aGUgQlBGIHN1YnN5c3RlbSwgZXNwZWNpYWxseSBhcyB0aGlzIGlzIGEgY29yZSBmaWxlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUgYW5kIGNvbXBpbGVkIGluIG15IGN1cnJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTU6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGVscGVycy5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYzMQoJCQkJCQkJb3V0cHV0OiAxMDcKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV3IEJQRiBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGV4YW1pbmVkIHRoaXMgcGF0Y2gsIGFuZCBpdCBib2lscyBkb3duIHRvIHRoaXM6IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gTXkgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgYWRkaXRpb25zOyB0aGV5JiMzOTtyZSAqaW50ZW5kZWQqIHRvIGRvIHNvbWV0aGluZyB1c2VmdWwuCgpJIHF1aWNrbHkgZG91YmxlLWNoZWNrZWQgdGhlIGNvZGUsIGFuZCB5ZXMsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWRkZWQgdW5jb25kaXRpb25hbGx5IHdpdGhpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgLiBUaGF0IG1lYW5zIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBvbmx5IGNvbmZpZyB3ZSBuZWVkIHRvIGVuYWJsZS4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCBhbnkgb3RoZXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uCgpUaGVyZWZvcmUsIG15IHJlY29tbWVuZGF0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDogVGhlc2UgbmV3IEJQRiBrZnVuY3MsIHBhcnRpY3VsYXJseSBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAsIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaGV5IHJlcHJlc2VudCBuZXcgZnVuY3Rpb25hbGl0eSB0aGF0JiMzOTtzIG5vdyBhdmFpbGFibGUgdG8gQlBGIHByb2dyYW1zLiBUaGV5IHNob3VsZCBiZSBwcmlvcml0aXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc3RycGJyayYjMzQ7LAogICAgJiMzNDticGZfbWVtY21wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdHdvIG5ldyBCUEYga2Z1bmNzLCBicGZfc3RycGJyayBhbmQgYnBmX21lbWNtcCwgd2hpY2ggY2FuIGJlIGNhbGxlZCBmcm9tIEJQRiBwcm9ncmFtcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgYWRkaXRpb25zIHRvIHRoZSBjb3JlIEJQRiBoZWxwZXIgbGlicmFyeSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc3RycGJyayYjMzQ7LAogICAgJiMzNDticGZfbWVtY21wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdHdvIG5ldyBCUEYga2Z1bmNzLCBicGZfc3RycGJyayBhbmQgYnBmX21lbWNtcCwgd2hpY2ggY2FuIGJlIGNhbGxlZCBmcm9tIEJQRiBwcm9ncmFtcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgYWRkaXRpb25zIHRvIHRoZSBjb3JlIEJQRiBoZWxwZXIgbGlicmFyeSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE1OjMzOjU3LjYxNDU5MDQwNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDMzMzIzMDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3N0cnBicmtcIixcbiAgICBcImJwZl9tZW1jbXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgQlBGIGtmdW5jcywgYnBmX3N0cnBicmsgYW5kIGJwZl9tZW1jbXAsIHdoaWNoIGNhbiBiZSBjYWxsZWQgZnJvbSBCUEYgcHJvZ3JhbXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGFkZGl0aW9ucyB0byB0aGUgY29yZSBCUEYgaGVscGVyIGxpYnJhcnkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE1OjMzOjU3LjYxNDU5NDc3NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgwOTcxMTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzhmYWQ1NDQ1N2M0MDI0NDQ5NmU4Y2UwMGJjNDFjYjc3YTZjNTFmYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1biAyNiAxNTozMzo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXFxuaW5kZXggYjUzMTRjOWZlZDNjZjAuLmVhZDAwZWMzMTRmNTRhIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXFxuKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcXG5AQCAtMzk3MSw2ICszOTcxLDkyIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RyY3Nwbihjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKnJlamVjdF9faWduKVxcbiBcXHRyZXR1cm4gLUVGQVVMVDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGJwZl9zdHJwYnJrIC0gRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHNldCBvZiBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nXFxuKyAqIEBzX19pZ246IFRoZSBzdHJpbmcgdG8gYmUgc2VhcmNoZWRcXG4rICogQGFjY2VwdF9faWduOiBUaGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlcnMgdG8gc2VhcmNoIGZvclxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogXFx1MDAzZT0wICAgICAgLSBJbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIEBzX19pZ24gdGhhdCBtYXRjaGVzIGFueVxcbisgKiAgICAgICAgICAgICAgY2hhcmFjdGVyIGluIEBhY2NlcHRfX2lnblxcbisgKiAqICUtRU5PRU5UIC0gTm8gY2hhcmFjdGVyIG9mIEBhY2NlcHRfX2lnbiBmb3VuZCBpbiBAc19faWduXFxuKyAqICogJS1FRkFVTFQgLSBDYW5ub3QgcmVhZCBvbmUgb2YgdGhlIHN0cmluZ3NcXG4rICogKiAlLUUyQklHICAtIE9uZSBvZiB0aGUgc3RyaW5ncyBpcyB0b28gbGFyZ2VcXG4rICogKiAlLUVSQU5HRSAtIE9uZSBvZiB0aGUgc3RyaW5ncyBpcyBvdXRzaWRlIG9mIGtlcm5lbCBhZGRyZXNzIHNwYWNlXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbilcXG4re1xcbitcXHRjaGFyIGNzLCBjYTtcXG4rXFx0aW50IGksIGo7XFxuK1xcbitcXHRpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHNfX2lnbiwgMSkgfHxcXG4rXFx0ICAgICFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChhY2NlcHRfX2lnbiwgMSkpIHtcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBpKyspIHtcXG4rXFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHQoXFx1MDAyNmNzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xcbitcXHRcXHRpZiAoY3MgPT0gJ1xcXFwwJylcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaisrKSB7XFxuK1xcdFxcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFxcdTAwMjZjYSwgYWNjZXB0X19pZ24gKyBqLCBjaGFyLCBlcnJfb3V0KTtcXG4rXFx0XFx0XFx0aWYgKGNhID09ICdcXFxcMCcpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRpZiAoY3MgPT0gY2EpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChqID09IFhBVFRSX1NJWkVfTUFYKVxcbitcXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbitcXHRcXHRzX19pZ24rKztcXG4rXFx0fVxcbitcXHRyZXR1cm4gLUUyQklHO1xcbitlcnJfb3V0OlxcbitcXHRyZXR1cm4gLUVGQVVMVDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGJwZl9tZW1jbXAgLSBDb21wYXJlIHR3byBtZW1vcnkgcmVnaW9ucyBieXRlIGJ5IGJ5dGVcXG4rICogQHB0cjFfX2lnbjogRmlyc3QgbWVtb3J5IHJlZ2lvblxcbisgKiBAcHRyMl9faWduOiBTZWNvbmQgbWVtb3J5IHJlZ2lvblxcbisgKiBAc2l6ZTogTnVtYmVyIG9mIGJ5dGVzIHRvIGNvbXBhcmVcXG4rICpcXG4rICogQ29tcGFyZXMgdGhlIGZpcnN0IEBzaXplIGJ5dGVzIG9mIHRoZSBtZW1vcnkgYXJlYXMgQHB0cjFfX2lnbiBhbmRcXG4rICogQHB0cjJfX2lnbi4gVW5saWtlIGJwZl9zdHJjbXAsIG51bGwgYnl0ZXMgZG8gbm90IHRlcm1pbmF0ZSB0aGUgY29tcGFyaXNvbi5cXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqICUwICAgICAgIC0gVGhlIG1lbW9yeSByZWdpb25zIGFyZSBlcXVhbFxcbisgKiAqICUtMSAgICAgIC0gQHB0cjFfX2lnbiBpcyBsZXNzIHRoYW4gQHB0cjJfX2lnblxcbisgKiAqICUxICAgICAgIC0gQHB0cjFfX2lnbiBpcyBncmVhdGVyIHRoYW4gQHB0cjJfX2lnblxcbisgKiAqICUtRUZBVUxUIC0gQ2Fubm90IHJlYWQgb25lIG9mIHRoZSBtZW1vcnkgcmVnaW9uc1xcbisgKiAqICUtRTJCSUcgIC0gQHNpemUgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIHNpemVcXG4rICogKiAlLUVSQU5HRSAtIE9uZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbnMgaXMgb3V0c2lkZSBvZiBrZXJuZWwgYWRkcmVzcyBzcGFjZVxcbisgKi9cXG4rX19icGZfa2Z1bmMgaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sXFxuK1xcdFxcdFxcdCAgIHNpemVfdCBzaXplKVxcbit7XFxuK1xcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAxID0gcHRyMV9faWduLCAqcDIgPSBwdHIyX19pZ247XFxuK1xcdHVuc2lnbmVkIGNoYXIgYzEsIGMyO1xcbitcXHRzaXplX3QgaTtcXG4rXFxuK1xcdGlmIChzaXplIFxcdTAwM2UgWEFUVFJfU0laRV9NQVgpXFxuK1xcdFxcdHJldHVybiAtRTJCSUc7XFxuK1xcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQocDEsIHNpemUpIHx8XFxuK1xcdCAgICAhY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQocDIsIHNpemUpKVxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFxuK1xcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNpemU7IGkrKykge1xcbitcXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdChcXHUwMDI2YzEsIHAxICsgaSwgY2hhciwgZXJyX291dCk7XFxuK1xcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFxcdTAwMjZjMiwgcDIgKyBpLCBjaGFyLCBlcnJfb3V0KTtcXG4rXFx0XFx0aWYgKGMxICE9IGMyKVxcbitcXHRcXHRcXHRyZXR1cm4gYzEgXFx1MDAzYyBjMiA/IC0xIDogMTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rZXJyX291dDpcXG4rXFx0cmV0dXJuIC1FRkFVTFQ7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19icGZfc3RybnN0cihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBsZW4sXFxuIFxcdFxcdFxcdCBib29sIGlnbm9yZV9jYXNlKVxcbiB7XFxuQEAgLTQ4NTAsNiArNDkzNiw4IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RybGVuKTtcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJubGVuKTtcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJzcG4pO1xcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNzcG4pO1xcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cnBicmspO1xcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX21lbWNtcCk7XFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3Ryc3RyKTtcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjYXNlc3RyKTtcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJuc3RyKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyaW5nX2tmdW5jcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyaW5nX2tmdW5jcy5jXFxuaW5kZXggMzAwMDMyYTE5NDQ1MTQuLjk1OWZmMzcxMTBhMTYzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmluZ19rZnVuY3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmluZ19rZnVuY3MuY1xcbkBAIC0yMCw2ICsyMCw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGVzdF9jYXNlc1tdID0ge1xcbiBcXHRcXFwic3Ryc3BuX2FjY2VwdFxcXCIsXFxuIFxcdFxcXCJzdHJjc3BuX3N0clxcXCIsXFxuIFxcdFxcXCJzdHJjc3BuX3JlamVjdFxcXCIsXFxuK1xcdFxcdFxcXCJzdHJwYnJrX3N0clxcXCIsXFxuK1xcdFxcdFxcXCJzdHJwYnJrX2FjY2VwdFxcXCIsXFxuIFxcdFxcXCJzdHJzdHJcXFwiLFxcbiBcXHRcXFwic3RyY2FzZXN0clxcXCIsXFxuIFxcdFxcXCJzdHJuc3RyXFxcIixcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9zdWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuY1xcbmluZGV4IGUwZDY3MmQ5M2FkZjg1Li4wNzE1ODFmZjA4MzNmMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jXFxuQEAgLTYyNCw3ICs2MjQsNyBAQCBpbnQgQlBGX1BST0codGVzdF9keW5wdHJfc2tiX3RwX2J0Ziwgdm9pZCAqc2tiLCB2b2lkICpsb2NhdGlvbilcXG4gXFx0cmV0dXJuIDE7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IGJwZl9tZW1jbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgdTMyIHNpemUpXFxuK3N0YXRpYyBpbmxpbmUgaW50IGxvY2FsX21lbWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCB1MzIgc2l6ZSlcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuQEAgLTY1MCwxMiArNjUwLDEyIEBAIGludCB0ZXN0X2R5bnB0cl9jb3B5KHZvaWQgKmN0eClcXG4gXFx0ZXJyID0gYnBmX2R5bnB0cl93cml0ZShcXHUwMDI2c3JjLCAwLCBkYXRhLCBzeiwgMCk7XFxuIFxcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX2NvcHkoXFx1MDAyNmRzdCwgMCwgXFx1MDAyNnNyYywgMCwgc3opO1xcbiBcXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKGJ1Ziwgc3osIFxcdTAwMjZkc3QsIDAsIDApO1xcbi1cXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChkYXRhLCBidWYsIHN6KTtcXG4rXFx0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChkYXRhLCBidWYsIHN6KTtcXG4gXFxuIFxcdC8qIFRlc3QgdGhhdCBvZmZzZXRzIGFyZSBoYW5kbGVkIGNvcnJlY3RseSAqL1xcbiBcXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9jb3B5KFxcdTAwMjZkc3QsIDMsIFxcdTAwMjZzcmMsIDUsIHN6IC0gNSk7XFxuIFxcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoYnVmLCBzeiAtIDUsIFxcdTAwMjZkc3QsIDMsIDApO1xcbi1cXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChkYXRhICsgNSwgYnVmLCBzeiAtIDUpO1xcbitcXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGRhdGEgKyA1LCBidWYsIHN6IC0gNSk7XFxuIFxcbiBcXHRicGZfcmluZ2J1Zl9kaXNjYXJkX2R5bnB0cihcXHUwMDI2c3JjLCAwKTtcXG4gXFx0YnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoXFx1MDAyNmRzdCwgMCk7XFxuQEAgLTY5Miw3ICs2OTIsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKVxcbiBcXHRcXHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXFx1MDAyNmJ1ZiwgbGVuLCBcXHUwMDI2cHRyX3hkcCwgaSAqIGxlbiwgMCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRpZiAoYnBmX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcXG4rXFx0XFx0aWYgKGxvY2FsX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuQEAgLTcxMyw3ICs3MTMsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKVxcbiBcXHRcXHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXFx1MDAyNmJ1ZiwgbGVuLCBcXHUwMDI2cHRyX2J1ZiwgaSAqIGxlbiwgMCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRpZiAoYnBmX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcXG4rXFx0XFx0aWYgKGxvY2FsX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuQEAgLTcyNyw3ICs3MjcsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKVxcbiBcXHRcXHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXFx1MDAyNmJ1ZiwgbGVuLCBcXHUwMDI2cHRyX3hkcCwgMiArIGkgKiBsZW4sIDApO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0aWYgKGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXFxuK1xcdFxcdGlmIChsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbkBAIC03NTAsNyArNzUwLDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF96ZXJvKHZvaWQgKmN0eClcXG4gXFxuIFxcdGVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X3plcm9fZGF0YSwgZGF0YV9zeiwgMCwgXFx1MDAyNnB0cik7XFxuIFxcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX21lbXNldChcXHUwMDI2cHRyLCAwLCBkYXRhX3N6LCAwKTtcXG4tXFx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoemVyb2VzLCBtZW1zZXRfemVyb19kYXRhLCBkYXRhX3N6KTtcXG4rXFx0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcCh6ZXJvZXMsIG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3opO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNzcwLDcgKzc3MCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfbm90emVybyh2b2lkICpjdHgpXFxuIFxcbiBcXHRlcnIgPSBicGZfZHlucHRyX2Zyb21fbWVtKG1lbXNldF9ub3R6ZXJvX2RhdGEsIGRhdGFfc3osIDAsIFxcdTAwMjZwdHIpO1xcbiBcXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoXFx1MDAyNnB0ciwgMCwgZGF0YV9zeiwgRFlOUFRSX01FTVNFVF9WQUwpO1xcbi1cXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X25vdHplcm9fZGF0YSwgZGF0YV9zeik7XFxuK1xcdGVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF9ub3R6ZXJvX2RhdGEsIGRhdGFfc3opO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNzg2LDcgKzc4Niw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfemVyb19vZmZzZXQodm9pZCAqY3R4KVxcbiBcXG4gXFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfemVyb19vZmZzZXRfZGF0YSwgZGF0YV9zeiwgMCwgXFx1MDAyNnB0cik7XFxuIFxcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX21lbXNldChcXHUwMDI2cHRyLCA4LCA0LCAwKTtcXG4tXFx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX29mZnNldF9kYXRhLCBkYXRhX3N6KTtcXG4rXFx0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fb2Zmc2V0X2RhdGEsIGRhdGFfc3opO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtODAzLDcgKzgwMyw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfemVyb19hZGp1c3RlZCh2b2lkICpjdHgpXFxuIFxcdGVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeiwgMCwgXFx1MDAyNnB0cik7XFxuIFxcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX2FkanVzdChcXHUwMDI2cHRyLCA0LCA4KTtcXG4gXFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KFxcdTAwMjZwdHIsIDAsIGJwZl9keW5wdHJfc2l6ZShcXHUwMDI2cHRyKSwgMCk7XFxuLVxcdGVyciA9IGVyciA/OiBicGZfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfemVyb19hZGp1c3RlZF9kYXRhLCBkYXRhX3N6KTtcXG4rXFx0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC04OTgsNyArODk4LDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF94ZHBfY2h1bmtzKHN0cnVjdCB4ZHBfbWQgKnhkcClcXG4gXFx0XFx0ZXJyID0gYnBmX2R5bnB0cl9yZWFkKFxcdTAwMjZidWYsIGNodW5rX3N6LCBcXHUwMDI2cHRyX3hkcCwgb2Zmc2V0LCAwKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdGVyciA9IGJwZl9tZW1jbXAoYnVmLCBleHBlY3RlZF9idWYsIHNpemVvZihidWYpKTtcXG4rXFx0XFx0ZXJyID0gbG9jYWxfbWVtY21wKGJ1ZiwgZXhwZWN0ZWRfYnVmLCBzaXplb2YoYnVmKSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuQEAgLTk1Miw3ICs5NTIsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmUodm9pZCAqcHRyLCBicGZfcmVhZF9keW5wdHJfZm5fdCBicFxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChcXHUwMDI2YnVmLCBsZW4sIFxcdTAwMjZwdHJfYnVmLCAwLCAwKTtcXG4gXFxuLVxcdFxcdGlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSlcXG4rXFx0XFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbikpXFxuIFxcdFxcdFxcdGVyciA9IDE7XFxuIFxcbiBcXHRcXHQvKiBSZXNldCBidWZmZXIgYW5kIGR5bnB0ciAqL1xcbkBAIC05ODYsNyArOTg2LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3RfZHlucHRyX3Byb2JlX3N0cih2b2lkICpwdHIsXFxuIFxcdFxcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoXFx1MDAyNmJ1ZiwgbGVuLCBcXHUwMDI2cHRyX2J1ZiwgMCwgMCk7XFxuIFxcdFxcdGlmICghbGVuKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aWYgKGVyciB8fCBicGZfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4gLSAxKSB8fCBidWZbbGVuIC0gMV0gIT0gJ1xcXFwwJylcXG4rXFx0XFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAnXFxcXDAnKVxcbiBcXHRcXHRcXHRlcnIgPSAxO1xcbiBcXHR9XFxuIFxcdGJwZl9yaW5nYnVmX2Rpc2NhcmRfZHlucHRyKFxcdTAwMjZwdHJfYnVmLCAwKTtcXG5AQCAtMTAxMiw3ICsxMDEyLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3RfZHlucHRyX3Byb2JlX3hkcChzdHJ1Y3QgeGRwX21kICp4ZHAsIHZvaWQgKnB0cixcXG4gXFx0XFx0aWYgKGxlbiBcXHUwMDNlIHNpemVvZihidWYpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChcXHUwMDI2YnVmLCBsZW4sIFxcdTAwMjZwdHJfeGRwLCBvZmYsIDApO1xcbi1cXHRcXHRpZiAoZXJyIHx8IGJwZl9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbikpXFxuK1xcdFxcdGlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKVxcbiBcXHRcXHRcXHRlcnIgPSAxO1xcbiBcXHRcXHQvKiBSZXNldCBidWZmZXIgYW5kIGR5bnB0ciAqL1xcbiBcXHRcXHRfX2J1aWx0aW5fbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpO1xcbkBAIC0xMDQ4LDcgKzEwNDgsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfc3RyX3hkcChzdHJ1Y3QgeGRwX21kICp4ZHAsIHZvaWQgKlxcbiBcXG4gXFx0XFx0aWYgKCFsZW4pXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRpZiAoZXJyIHx8IGJwZl9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAnXFxcXDAnKVxcbitcXHRcXHRpZiAoZXJyIHx8IGxvY2FsX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICdcXFxcMCcpXFxuIFxcdFxcdFxcdGVyciA9IDE7XFxuIFxcbiBcXHRcXHRfX2J1aWx0aW5fbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuY1xcbmluZGV4IGJkZGM0ZTg1NzlkMjQ0Li5lNjdmZTk3MDBlNTkzYyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuY1xcbkBAIC05LDYgKzksMTAgQEBcXG4gY2hhciAqdXNlcl9wdHIgPSAoY2hhciAqKTE7XFxuIGNoYXIgKmludmFsaWRfa2Vybl9wdHIgPSAoY2hhciAqKS0xO1xcbiBcXG4rZXh0ZXJuIGludCBicGZfc3RycGJyayhjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKSBfX2tzeW07XFxuK2V4dGVybiBpbnQgYnBmX21lbWNtcChjb25zdCB2b2lkICpwdHIxX19pZ24sIGNvbnN0IHZvaWQgKnB0cjJfX2lnbixcXG4rXFx0XFx0ICAgICAgc2l6ZV90IHNpemUpIF9fa3N5bTtcXG4rXFxuIC8qXFxuICAqIFdoZW4gcGFzc2luZyB1c2Vyc3BhY2UgcG9pbnRlcnMsIHRoZSBlcnJvciBjb2RlIGRpZmZlcnMgYmFzZWQgb24gYXJjaDpcXG4gICogICAtRVJBTkdFIG9uIGFyY2hlcyB3aXRoIG5vbi1vdmVybGFwcGluZyBhZGRyZXNzIHNwYWNlc1xcbkBAIC01Myw2ICs1NywxMCBAQCBTRUMoXFxcInN5c2NhbGxcXFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5zdHJfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVyblxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5zdHJfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybnN0cihcXFwiaGVsbG9cXFwiLCBOVUxMLCAxKTsgfVxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5jYXNlc3RyX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKE5VTEwsIFxcXCJoZWxsb1xcXCIsIDEpOyB9XFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybmNhc2VzdHJfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoXFxcImhlbGxvXFxcIiwgTlVMTCwgMSk7IH1cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKE5VTEwsIFxcXCJ4XFxcIiwgMSk7IH1cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKFxcXCJ4XFxcIiwgTlVMTCwgMSk7IH1cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJwYnJrX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoTlVMTCwgXFxcInhcXFwiKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cnBicmtfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcXFwieFxcXCIsIE5VTEwpOyB9XFxuIFxcbiAvKiBQYXNzaW5nIHVzZXJzcGFjZSBwdHIgdG8gc3RyaW5nIGtmdW5jcyAqL1xcbiBTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cmNtcF91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY21wKHVzZXJfcHRyLCBcXFwiaGVsbG9cXFwiKTsgfVxcbkBAIC03OSw2ICs4NywxMCBAQCBTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cm5zdHJfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZVxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cm5zdHJfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5zdHIoXFxcImhlbGxvXFxcIiwgdXNlcl9wdHIsIDEpOyB9XFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKHVzZXJfcHRyLCBcXFwiaGVsbG9cXFwiLCAxKTsgfVxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihcXFwiaGVsbG9cXFwiLCB1c2VyX3B0ciwgMSk7IH1cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9tZW1jbXBfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcCh1c2VyX3B0ciwgXFxcInhcXFwiLCAxKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X21lbWNtcF91c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKFxcXCJ4XFxcIiwgdXNlcl9wdHIsIDEpOyB9XFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RycGJya191c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayh1c2VyX3B0ciwgXFxcInhcXFwiKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cnBicmtfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXFxcInhcXFwiLCB1c2VyX3B0cik7IH1cXG4gXFxuICNlbmRpZiAvKiBfX1RBUkdFVF9BUkNIX3MzOTAgKi9cXG4gXFxuQEAgLTEwNyw1ICsxMTksOSBAQCBTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJuc3RyX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVyblxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJuc3RyX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybnN0cihcXFwiaGVsbG9cXFwiLCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfVxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKGludmFsaWRfa2Vybl9wdHIsIFxcXCJoZWxsb1xcXCIsIDEpOyB9XFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoXFxcImhlbGxvXFxcIiwgaW52YWxpZF9rZXJuX3B0ciwgMSk7IH1cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3RfbWVtY21wX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGludmFsaWRfa2Vybl9wdHIsIFxcXCJ4XFxcIiwgMSk7IH1cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3RfbWVtY21wX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKFxcXCJ4XFxcIiwgaW52YWxpZF9rZXJuX3B0ciwgMSk7IH1cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RycGJya19wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoaW52YWxpZF9rZXJuX3B0ciwgXFxcInhcXFwiKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJwYnJrX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcXFwieFxcXCIsIGludmFsaWRfa2Vybl9wdHIpOyB9XFxuIFxcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmNcXG5pbmRleCA0MTJjNTNiODdiMTgyYi4uZDNiOTc4ZTQ1M2JkN2MgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmNcXG5AQCAtMTksNiArMTksOCBAQCBTRUMoXFxcInN5c2NhbGxcXFwiKSBpbnQgdGVzdF9zdHJzcG5fc3RyX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnNwbihsb25nX1xcbiBTRUMoXFxcInN5c2NhbGxcXFwiKSBpbnQgdGVzdF9zdHJzcG5fYWNjZXB0X3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnNwbihcXFwiYlxcXCIsIGxvbmdfc3RyKTsgfVxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKSBpbnQgdGVzdF9zdHJjc3BuX3N0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjc3BuKGxvbmdfc3RyLCBcXFwiYlxcXCIpOyB9XFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIGludCB0ZXN0X3N0cmNzcG5fcmVqZWN0X3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNzcG4oXFxcImJcXFwiLCBsb25nX3N0cik7IH1cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIikgaW50IHRlc3Rfc3RycGJya19zdHJfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhsb25nX3N0ciwgXFxcInpcXFwiKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBpbnQgdGVzdF9zdHJwYnJrX2FjY2VwdF90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKFxcXCJiXFxcIiwgbG9uZ19zdHIpOyB9XFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIGludCB0ZXN0X3N0cnN0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJzdHIobG9uZ19zdHIsIFxcXCJoZWxsb1xcXCIpOyB9XFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIGludCB0ZXN0X3N0cmNhc2VzdHJfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY2FzZXN0cihsb25nX3N0ciwgXFxcImhlbGxvXFxcIik7IH1cXG4gU0VDKFxcXCJzeXNjYWxsXFxcIikgaW50IHRlc3Rfc3RybnN0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKGxvbmdfc3RyLCBcXFwiaGVsbG9cXFwiLCBzaXplb2YobG9uZ19zdHIpKTsgfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmNcXG5pbmRleCBmNjViMTIyNmE4MWEzNy4uMjViOGM4OTdkYTU0YmMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jXFxuQEAgLTcsNiArNywxMCBAQFxcbiBcXG4gY2hhciBzdHJbXSA9IFxcXCJoZWxsbyB3b3JsZFxcXCI7XFxuIFxcbitleHRlcm4gaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pIF9fa3N5bTtcXG4rZXh0ZXJuIGludCBicGZfbWVtY21wKGNvbnN0IHZvaWQgKnB0cjFfX2lnbiwgY29uc3Qgdm9pZCAqcHRyMl9faWduLFxcbitcXHRcXHQgICAgICBzaXplX3Qgc2l6ZSkgX19rc3ltO1xcbitcXG4gI2RlZmluZSBfX3Rlc3QocmV0dmFsKSBTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3N1Y2Nlc3MgX19yZXR2YWwocmV0dmFsKVxcbiBcXG4gLyogRnVuY3Rpb25hbCB0ZXN0cyAqL1xcbkBAIC02MCw0ICs2NCwyNSBAQCBfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfbm90Zm91bmQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc1xcbiBfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfbm90Zm91bmQzKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFxcXCJcXFwiLCBcXFwiYVxcXCIsIDApOyB9XFxuIF9fdGVzdCgwKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9lbXB0eSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihzdHIsIFxcXCJcXFwiLCAxKTsgfVxcbiBcXG4rLyogYnBmX3N0cnBicmsgLSBmdW5jdGlvbmFsIHRlc3RzICovXFxuK19fdGVzdCgwKSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX2ZpcnN0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcXFwiaFxcXCIpOyB9XFxuK19fdGVzdCg0KSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX21pZGRsZSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXFxcIm93XFxcIik7IH1cXG4rX190ZXN0KDIpIGludCB0ZXN0X3N0cnBicmtfZm91bmRfbXVsdGlwbGUodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFxcXCJsXFxcIik7IH1cXG4rX190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfbm90Zm91bmQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFxcXCJ4eXpcXFwiKTsgfVxcbitfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RycGJya19lbXB0eV9hY2NlcHQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFxcXCJcXFwiKTsgfVxcbitcXG4rLyogYnBmX21lbWNtcCAtIGZ1bmN0aW9uYWwgdGVzdHMgKi9cXG4rY2hhciBkYXRhMVtdID0gXFxcImhlbGxvIHdvcmxkXFxcIjtcXG4rY2hhciBkYXRhMltdID0gXFxcImhlbGxvIHdvcmxkXFxcIjtcXG4rY2hhciBkYXRhM1tdID0gXFxcImhlbGxvIHdvcmxlXFxcIjtcXG4rX190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTEsIGRhdGEyLCBzaXplb2YoZGF0YTEpKTsgfVxcbitfX3Rlc3QoLTEpIGludCB0ZXN0X21lbWNtcF9uZXFfbGVzcyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTEsIGRhdGEzLCBzaXplb2YoZGF0YTEpKTsgfVxcbitfX3Rlc3QoMSkgaW50IHRlc3RfbWVtY21wX25lcV9ncmVhdGVyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMywgZGF0YTEsIHNpemVvZihkYXRhMSkpOyB9XFxuK19fdGVzdCgwKSBpbnQgdGVzdF9tZW1jbXBfc2l6ZV96ZXJvKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTMsIDApOyB9XFxuKy8qIG1lbWNtcCBzaG91bGQgTk9UIHN0b3AgYXQgbnVsbCBieXRlIC0gY29tcGFyZSBwYXN0ICdcXFxcMCcgKi9cXG4rY2hhciBiaW4xW10gPSB7ICdhJywgJ1xcXFwwJywgJ2MnIH07XFxuK2NoYXIgYmluMltdID0geyAnYScsICdcXFxcMCcsICdkJyB9O1xcbitfX3Rlc3QoMCkgaW50IHRlc3RfbWVtY21wX251bGxfYnl0ZV9lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoYmluMSwgYmluMSwgc2l6ZW9mKGJpbjEpKTsgfVxcbitfX3Rlc3QoLTEpIGludCB0ZXN0X21lbWNtcF9udWxsX2J5dGVfbmVxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChiaW4xLCBiaW4yLCBzaXplb2YoYmluMSkpOyB9XFxuK1xcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTU6MzM6NTguMTk2MjgwMDA1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzQ1MTYyNTEzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zdHJwYnJrXCIsXG4gICAgXCJicGZfbWVtY21wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB0d28gbmV3IEJQRiBrZnVuY3MsIGJwZl9zdHJwYnJrIGFuZCBicGZfbWVtY21wLCB3aGljaCBjYW4gYmUgY2FsbGVkIGZyb20gQlBGIHByb2dyYW1zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBhZGRpdGlvbnMgdG8gdGhlIGNvcmUgQlBGIGhlbHBlciBsaWJyYXJ5IGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc4ZmFkNTQ0NTdjNDAyNDQ0OTZlOGNlMDBiYzQxY2I3N2E2YzUxZmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAxNTozMzo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcbmluZGV4IGI1MzE0YzlmZWQzY2YwLi5lYWQwMGVjMzE0ZjU0YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXG4rKysgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuQEAgLTM5NzEsNiArMzk3MSw5MiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICpyZWplY3RfX2lnbilcbiBcdHJldHVybiAtRUZBVUxUO1xuIH1cbiBcbisvKipcbisgKiBicGZfc3RycGJyayAtIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzZXQgb2YgY2hhcmFjdGVycyBpbiBhIHN0cmluZ1xuKyAqIEBzX19pZ246IFRoZSBzdHJpbmcgdG8gYmUgc2VhcmNoZWRcbisgKiBAYWNjZXB0X19pZ246IFRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2hhcmFjdGVycyB0byBzZWFyY2ggZm9yXG4rICpcbisgKiBSZXR1cm46XG4rICogKiBcdTAwM2U9MCAgICAgIC0gSW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBAc19faWduIHRoYXQgbWF0Y2hlcyBhbnlcbisgKiAgICAgICAgICAgICAgY2hhcmFjdGVyIGluIEBhY2NlcHRfX2lnblxuKyAqICogJS1FTk9FTlQgLSBObyBjaGFyYWN0ZXIgb2YgQGFjY2VwdF9faWduIGZvdW5kIGluIEBzX19pZ25cbisgKiAqICUtRUZBVUxUIC0gQ2Fubm90IHJlYWQgb25lIG9mIHRoZSBzdHJpbmdzXG4rICogKiAlLUUyQklHICAtIE9uZSBvZiB0aGUgc3RyaW5ncyBpcyB0b28gbGFyZ2VcbisgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBzdHJpbmdzIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2VcbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbilcbit7XG4rXHRjaGFyIGNzLCBjYTtcbitcdGludCBpLCBqO1xuK1xuK1x0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzX19pZ24sIDEpIHx8XG4rXHQgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKGFjY2VwdF9faWduLCAxKSkge1xuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBpKyspIHtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4rXHRcdGlmIChjcyA9PSAnXFwwJylcbitcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGorKykge1xuK1x0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmNhLCBhY2NlcHRfX2lnbiArIGosIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRcdGlmIChjYSA9PSAnXFwwJylcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGlmIChjcyA9PSBjYSlcbitcdFx0XHRcdHJldHVybiBpO1xuK1x0XHR9XG4rXHRcdGlmIChqID09IFhBVFRSX1NJWkVfTUFYKVxuK1x0XHRcdHJldHVybiAtRTJCSUc7XG4rXHRcdHNfX2lnbisrO1xuK1x0fVxuK1x0cmV0dXJuIC1FMkJJRztcbitlcnJfb3V0OlxuK1x0cmV0dXJuIC1FRkFVTFQ7XG4rfVxuK1xuKy8qKlxuKyAqIGJwZl9tZW1jbXAgLSBDb21wYXJlIHR3byBtZW1vcnkgcmVnaW9ucyBieXRlIGJ5IGJ5dGVcbisgKiBAcHRyMV9faWduOiBGaXJzdCBtZW1vcnkgcmVnaW9uXG4rICogQHB0cjJfX2lnbjogU2Vjb25kIG1lbW9yeSByZWdpb25cbisgKiBAc2l6ZTogTnVtYmVyIG9mIGJ5dGVzIHRvIGNvbXBhcmVcbisgKlxuKyAqIENvbXBhcmVzIHRoZSBmaXJzdCBAc2l6ZSBieXRlcyBvZiB0aGUgbWVtb3J5IGFyZWFzIEBwdHIxX19pZ24gYW5kXG4rICogQHB0cjJfX2lnbi4gVW5saWtlIGJwZl9zdHJjbXAsIG51bGwgYnl0ZXMgZG8gbm90IHRlcm1pbmF0ZSB0aGUgY29tcGFyaXNvbi5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqICUwICAgICAgIC0gVGhlIG1lbW9yeSByZWdpb25zIGFyZSBlcXVhbFxuKyAqICogJS0xICAgICAgLSBAcHRyMV9faWduIGlzIGxlc3MgdGhhbiBAcHRyMl9faWduXG4rICogKiAlMSAgICAgICAtIEBwdHIxX19pZ24gaXMgZ3JlYXRlciB0aGFuIEBwdHIyX19pZ25cbisgKiAqICUtRUZBVUxUIC0gQ2Fubm90IHJlYWQgb25lIG9mIHRoZSBtZW1vcnkgcmVnaW9uc1xuKyAqICogJS1FMkJJRyAgLSBAc2l6ZSBleGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgc2l6ZVxuKyAqICogJS1FUkFOR0UgLSBPbmUgb2YgdGhlIG1lbW9yeSByZWdpb25zIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2VcbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX21lbWNtcChjb25zdCB2b2lkICpwdHIxX19pZ24sIGNvbnN0IHZvaWQgKnB0cjJfX2lnbixcbitcdFx0XHQgICBzaXplX3Qgc2l6ZSlcbit7XG4rXHRjb25zdCB1bnNpZ25lZCBjaGFyICpwMSA9IHB0cjFfX2lnbiwgKnAyID0gcHRyMl9faWduO1xuK1x0dW5zaWduZWQgY2hhciBjMSwgYzI7XG4rXHRzaXplX3QgaTtcbitcbitcdGlmIChzaXplIFx1MDAzZSBYQVRUUl9TSVpFX01BWClcbitcdFx0cmV0dXJuIC1FMkJJRztcbitcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQocDEsIHNpemUpIHx8XG4rXHQgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHAyLCBzaXplKSlcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRndWFyZChwYWdlZmF1bHQpKCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaXplOyBpKyspIHtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2YzEsIHAxICsgaSwgY2hhciwgZXJyX291dCk7XG4rXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMyLCBwMiArIGksIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRpZiAoYzEgIT0gYzIpXG4rXHRcdFx0cmV0dXJuIGMxIFx1MDAzYyBjMiA/IC0xIDogMTtcbitcdH1cbitcdHJldHVybiAwO1xuK2Vycl9vdXQ6XG4rXHRyZXR1cm4gLUVGQVVMVDtcbit9XG4rXG4gc3RhdGljIGludCBfX2JwZl9zdHJuc3RyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IGxlbixcbiBcdFx0XHQgYm9vbCBpZ25vcmVfY2FzZSlcbiB7XG5AQCAtNDg1MCw2ICs0OTM2LDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJsZW4pO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3Rybmxlbik7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJzcG4pO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY3Nwbik7XG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJwYnJrKTtcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX21lbWNtcCk7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJzdHIpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY2FzZXN0cik7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJuc3RyKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJpbmdfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJpbmdfa2Z1bmNzLmNcbmluZGV4IDMwMDAzMmExOTQ0NTE0Li45NTlmZjM3MTEwYTE2MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmluZ19rZnVuY3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyaW5nX2tmdW5jcy5jXG5AQCAtMjAsNiArMjAsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRlc3RfY2FzZXNbXSA9IHtcbiBcdFwic3Ryc3BuX2FjY2VwdFwiLFxuIFx0XCJzdHJjc3BuX3N0clwiLFxuIFx0XCJzdHJjc3BuX3JlamVjdFwiLFxuK1x0XHRcInN0cnBicmtfc3RyXCIsXG4rXHRcdFwic3RycGJya19hY2NlcHRcIixcbiBcdFwic3Ryc3RyXCIsXG4gXHRcInN0cmNhc2VzdHJcIixcbiBcdFwic3RybnN0clwiLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9zdWNjZXNzLmNcbmluZGV4IGUwZDY3MmQ5M2FkZjg1Li4wNzE1ODFmZjA4MzNmMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuY1xuQEAgLTYyNCw3ICs2MjQsNyBAQCBpbnQgQlBGX1BST0codGVzdF9keW5wdHJfc2tiX3RwX2J0Ziwgdm9pZCAqc2tiLCB2b2lkICpsb2NhdGlvbilcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBicGZfbWVtY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIsIHUzMiBzaXplKVxuK3N0YXRpYyBpbmxpbmUgaW50IGxvY2FsX21lbWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCB1MzIgc2l6ZSlcbiB7XG4gXHRpbnQgaTtcbiBcbkBAIC02NTAsMTIgKzY1MCwxMiBAQCBpbnQgdGVzdF9keW5wdHJfY29weSh2b2lkICpjdHgpXG4gXHRlcnIgPSBicGZfZHlucHRyX3dyaXRlKFx1MDAyNnNyYywgMCwgZGF0YSwgc3osIDApO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfY29weShcdTAwMjZkc3QsIDAsIFx1MDAyNnNyYywgMCwgc3opO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChidWYsIHN6LCBcdTAwMjZkc3QsIDAsIDApO1xuLVx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBzeik7XG4rXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGRhdGEsIGJ1Ziwgc3opO1xuIFxuIFx0LyogVGVzdCB0aGF0IG9mZnNldHMgYXJlIGhhbmRsZWQgY29ycmVjdGx5ICovXG4gXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9jb3B5KFx1MDAyNmRzdCwgMywgXHUwMDI2c3JjLCA1LCBzeiAtIDUpO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChidWYsIHN6IC0gNSwgXHUwMDI2ZHN0LCAzLCAwKTtcbi1cdGVyciA9IGVyciA/OiBicGZfbWVtY21wKGRhdGEgKyA1LCBidWYsIHN6IC0gNSk7XG4rXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGRhdGEgKyA1LCBidWYsIHN6IC0gNSk7XG4gXG4gXHRicGZfcmluZ2J1Zl9kaXNjYXJkX2R5bnB0cihcdTAwMjZzcmMsIDApO1xuIFx0YnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoXHUwMDI2ZHN0LCAwKTtcbkBAIC02OTIsNyArNjkyLDcgQEAgaW50IHRlc3RfZHlucHRyX2NvcHlfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdFx0ZXJyID0gYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgbGVuLCBcdTAwMjZwdHJfeGRwLCBpICogbGVuLCAwKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dDtcbi1cdFx0aWYgKGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXG4rXHRcdGlmIChsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5AQCAtNzEzLDcgKzcxMyw3IEBAIGludCB0ZXN0X2R5bnB0cl9jb3B5X3hkcChzdHJ1Y3QgeGRwX21kICp4ZHApXG4gXHRcdGVyciA9IGJwZl9keW5wdHJfcmVhZChcdTAwMjZidWYsIGxlbiwgXHUwMDI2cHRyX2J1ZiwgaSAqIGxlbiwgMCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdGlmIChicGZfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxuK1x0XHRpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTcyNyw3ICs3MjcsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKVxuIFx0XHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXHUwMDI2YnVmLCBsZW4sIFx1MDAyNnB0cl94ZHAsIDIgKyBpICogbGVuLCAwKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dDtcbi1cdFx0aWYgKGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXG4rXHRcdGlmIChsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5AQCAtNzUwLDcgKzc1MCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfemVybyh2b2lkICpjdHgpXG4gXG4gXHRlcnIgPSBicGZfZHlucHRyX2Zyb21fbWVtKG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3osIDAsIFx1MDAyNnB0cik7XG4gXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoXHUwMDI2cHRyLCAwLCBkYXRhX3N6LCAwKTtcbi1cdGVyciA9IGVyciA/OiBicGZfbWVtY21wKHplcm9lcywgbWVtc2V0X3plcm9fZGF0YSwgZGF0YV9zeik7XG4rXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKHplcm9lcywgbWVtc2V0X3plcm9fZGF0YSwgZGF0YV9zeik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNzcwLDcgKzc3MCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfbm90emVybyh2b2lkICpjdHgpXG4gXG4gXHRlcnIgPSBicGZfZHlucHRyX2Zyb21fbWVtKG1lbXNldF9ub3R6ZXJvX2RhdGEsIGRhdGFfc3osIDAsIFx1MDAyNnB0cik7XG4gXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoXHUwMDI2cHRyLCAwLCBkYXRhX3N6LCBEWU5QVFJfTUVNU0VUX1ZBTCk7XG4tXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X25vdHplcm9fZGF0YSwgZGF0YV9zeik7XG4rXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfbm90emVyb19kYXRhLCBkYXRhX3N6KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03ODYsNyArNzg2LDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF96ZXJvX29mZnNldCh2b2lkICpjdHgpXG4gXG4gXHRlcnIgPSBicGZfZHlucHRyX2Zyb21fbWVtKG1lbXNldF96ZXJvX29mZnNldF9kYXRhLCBkYXRhX3N6LCAwLCBcdTAwMjZwdHIpO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KFx1MDAyNnB0ciwgOCwgNCwgMCk7XG4tXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fb2Zmc2V0X2RhdGEsIGRhdGFfc3opO1xuK1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fb2Zmc2V0X2RhdGEsIGRhdGFfc3opO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTgwMyw3ICs4MDMsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm9fYWRqdXN0ZWQodm9pZCAqY3R4KVxuIFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfemVyb19hZGp1c3RlZF9kYXRhLCBkYXRhX3N6LCAwLCBcdTAwMjZwdHIpO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfYWRqdXN0KFx1MDAyNnB0ciwgNCwgOCk7XG4gXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoXHUwMDI2cHRyLCAwLCBicGZfZHlucHRyX3NpemUoXHUwMDI2cHRyKSwgMCk7XG4tXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeik7XG4rXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfemVyb19hZGp1c3RlZF9kYXRhLCBkYXRhX3N6KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC04OTgsNyArODk4LDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF94ZHBfY2h1bmtzKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdFx0ZXJyID0gYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgY2h1bmtfc3osIFx1MDAyNnB0cl94ZHAsIG9mZnNldCwgMCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdGVyciA9IGJwZl9tZW1jbXAoYnVmLCBleHBlY3RlZF9idWYsIHNpemVvZihidWYpKTtcbitcdFx0ZXJyID0gbG9jYWxfbWVtY21wKGJ1ZiwgZXhwZWN0ZWRfYnVmLCBzaXplb2YoYnVmKSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG5AQCAtOTUyLDcgKzk1Miw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X2R5bnB0cl9wcm9iZSh2b2lkICpwdHIsIGJwZl9yZWFkX2R5bnB0cl9mbl90IGJwXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoXHUwMDI2YnVmLCBsZW4sIFx1MDAyNnB0cl9idWYsIDAsIDApO1xuIFxuLVx0XHRpZiAoZXJyIHx8IGJwZl9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbikpXG4rXHRcdGlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKVxuIFx0XHRcdGVyciA9IDE7XG4gXG4gXHRcdC8qIFJlc2V0IGJ1ZmZlciBhbmQgZHlucHRyICovXG5AQCAtOTg2LDcgKzk4Niw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X2R5bnB0cl9wcm9iZV9zdHIodm9pZCAqcHRyLFxuIFx0XHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgbGVuLCBcdTAwMjZwdHJfYnVmLCAwLCAwKTtcbiBcdFx0aWYgKCFsZW4pXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICdcXDAnKVxuK1x0XHRpZiAoZXJyIHx8IGxvY2FsX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICdcXDAnKVxuIFx0XHRcdGVyciA9IDE7XG4gXHR9XG4gXHRicGZfcmluZ2J1Zl9kaXNjYXJkX2R5bnB0cihcdTAwMjZwdHJfYnVmLCAwKTtcbkBAIC0xMDEyLDcgKzEwMTIsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCwgdm9pZCAqcHRyLFxuIFx0XHRpZiAobGVuIFx1MDAzZSBzaXplb2YoYnVmKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChcdTAwMjZidWYsIGxlbiwgXHUwMDI2cHRyX3hkcCwgb2ZmLCAwKTtcbi1cdFx0aWYgKGVyciB8fCBicGZfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKVxuK1x0XHRpZiAoZXJyIHx8IGxvY2FsX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSlcbiBcdFx0XHRlcnIgPSAxO1xuIFx0XHQvKiBSZXNldCBidWZmZXIgYW5kIGR5bnB0ciAqL1xuIFx0XHRfX2J1aWx0aW5fbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpO1xuQEAgLTEwNDgsNyArMTA0OCw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X2R5bnB0cl9wcm9iZV9zdHJfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCwgdm9pZCAqXG4gXG4gXHRcdGlmICghbGVuKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoZXJyIHx8IGJwZl9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAnXFwwJylcbitcdFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAnXFwwJylcbiBcdFx0XHRlcnIgPSAxO1xuIFxuIFx0XHRfX2J1aWx0aW5fbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jXG5pbmRleCBiZGRjNGU4NTc5ZDI0NC4uZTY3ZmU5NzAwZTU5M2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jXG5AQCAtOSw2ICs5LDEwIEBAXG4gY2hhciAqdXNlcl9wdHIgPSAoY2hhciAqKTE7XG4gY2hhciAqaW52YWxpZF9rZXJuX3B0ciA9IChjaGFyICopLTE7XG4gXG4rZXh0ZXJuIGludCBicGZfc3RycGJyayhjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKSBfX2tzeW07XG4rZXh0ZXJuIGludCBicGZfbWVtY21wKGNvbnN0IHZvaWQgKnB0cjFfX2lnbiwgY29uc3Qgdm9pZCAqcHRyMl9faWduLFxuK1x0XHQgICAgICBzaXplX3Qgc2l6ZSkgX19rc3ltO1xuK1xuIC8qXG4gICogV2hlbiBwYXNzaW5nIHVzZXJzcGFjZSBwb2ludGVycywgdGhlIGVycm9yIGNvZGUgZGlmZmVycyBiYXNlZCBvbiBhcmNoOlxuICAqICAgLUVSQU5HRSBvbiBhcmNoZXMgd2l0aCBub24tb3ZlcmxhcHBpbmcgYWRkcmVzcyBzcGFjZXNcbkBAIC01Myw2ICs1NywxMCBAQCBTRUMoXCJzeXNjYWxsXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybnN0cl9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuXG4gU0VDKFwic3lzY2FsbFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5zdHJfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybnN0cihcImhlbGxvXCIsIE5VTEwsIDEpOyB9XG4gU0VDKFwic3lzY2FsbFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5jYXNlc3RyX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKE5VTEwsIFwiaGVsbG9cIiwgMSk7IH1cbiBTRUMoXCJzeXNjYWxsXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybmNhc2VzdHJfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoXCJoZWxsb1wiLCBOVUxMLCAxKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKE5VTEwsIFwieFwiLCAxKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKFwieFwiLCBOVUxMLCAxKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJwYnJrX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoTlVMTCwgXCJ4XCIpOyB9XG4rU0VDKFwic3lzY2FsbFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cnBicmtfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcInhcIiwgTlVMTCk7IH1cbiBcbiAvKiBQYXNzaW5nIHVzZXJzcGFjZSBwdHIgdG8gc3RyaW5nIGtmdW5jcyAqL1xuIFNFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJjbXBfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcCh1c2VyX3B0ciwgXCJoZWxsb1wiKTsgfVxuQEAgLTc5LDYgKzg3LDEwIEBAIFNFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuc3RyX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmVcbiBTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybnN0cl91c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybnN0cihcImhlbGxvXCIsIHVzZXJfcHRyLCAxKTsgfVxuIFNFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIodXNlcl9wdHIsIFwiaGVsbG9cIiwgMSk7IH1cbiBTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFwiaGVsbG9cIiwgdXNlcl9wdHIsIDEpOyB9XG4rU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X21lbWNtcF91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKHVzZXJfcHRyLCBcInhcIiwgMSk7IH1cbitTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3RfbWVtY21wX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXCJ4XCIsIHVzZXJfcHRyLCAxKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJwYnJrX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHVzZXJfcHRyLCBcInhcIik7IH1cbitTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RycGJya191c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcInhcIiwgdXNlcl9wdHIpOyB9XG4gXG4gI2VuZGlmIC8qIF9fVEFSR0VUX0FSQ0hfczM5MCAqL1xuIFxuQEAgLTEwNyw1ICsxMTksOSBAQCBTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5zdHJfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuXG4gU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJuc3RyX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybnN0cihcImhlbGxvXCIsIGludmFsaWRfa2Vybl9wdHIsIDEpOyB9XG4gU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKGludmFsaWRfa2Vybl9wdHIsIFwiaGVsbG9cIiwgMSk7IH1cbiBTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoXCJoZWxsb1wiLCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3RfbWVtY21wX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGludmFsaWRfa2Vybl9wdHIsIFwieFwiLCAxKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3RfbWVtY21wX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKFwieFwiLCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RycGJya19wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoaW52YWxpZF9rZXJuX3B0ciwgXCJ4XCIpOyB9XG4rU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJwYnJrX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcInhcIiwgaW52YWxpZF9rZXJuX3B0cik7IH1cbiBcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmNcbmluZGV4IDQxMmM1M2I4N2IxODJiLi5kM2I5NzhlNDUzYmQ3YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmNcbkBAIC0xOSw2ICsxOSw4IEBAIFNFQyhcInN5c2NhbGxcIikgaW50IHRlc3Rfc3Ryc3BuX3N0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJzcG4obG9uZ19cbiBTRUMoXCJzeXNjYWxsXCIpIGludCB0ZXN0X3N0cnNwbl9hY2NlcHRfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3Ryc3BuKFwiYlwiLCBsb25nX3N0cik7IH1cbiBTRUMoXCJzeXNjYWxsXCIpIGludCB0ZXN0X3N0cmNzcG5fc3RyX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNzcG4obG9uZ19zdHIsIFwiYlwiKTsgfVxuIFNFQyhcInN5c2NhbGxcIikgaW50IHRlc3Rfc3RyY3Nwbl9yZWplY3RfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY3NwbihcImJcIiwgbG9uZ19zdHIpOyB9XG4rU0VDKFwic3lzY2FsbFwiKSBpbnQgdGVzdF9zdHJwYnJrX3N0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKGxvbmdfc3RyLCBcInpcIik7IH1cbitTRUMoXCJzeXNjYWxsXCIpIGludCB0ZXN0X3N0cnBicmtfYWNjZXB0X3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXCJiXCIsIGxvbmdfc3RyKTsgfVxuIFNFQyhcInN5c2NhbGxcIikgaW50IHRlc3Rfc3Ryc3RyX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnN0cihsb25nX3N0ciwgXCJoZWxsb1wiKTsgfVxuIFNFQyhcInN5c2NhbGxcIikgaW50IHRlc3Rfc3RyY2FzZXN0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjYXNlc3RyKGxvbmdfc3RyLCBcImhlbGxvXCIpOyB9XG4gU0VDKFwic3lzY2FsbFwiKSBpbnQgdGVzdF9zdHJuc3RyX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5zdHIobG9uZ19zdHIsIFwiaGVsbG9cIiwgc2l6ZW9mKGxvbmdfc3RyKSk7IH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmNcbmluZGV4IGY2NWIxMjI2YTgxYTM3Li4yNWI4Yzg5N2RhNTRiYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jXG5AQCAtNyw2ICs3LDEwIEBAXG4gXG4gY2hhciBzdHJbXSA9IFwiaGVsbG8gd29ybGRcIjtcbiBcbitleHRlcm4gaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pIF9fa3N5bTtcbitleHRlcm4gaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sXG4rXHRcdCAgICAgIHNpemVfdCBzaXplKSBfX2tzeW07XG4rXG4gI2RlZmluZSBfX3Rlc3QocmV0dmFsKSBTRUMoXCJzeXNjYWxsXCIpIF9fc3VjY2VzcyBfX3JldHZhbChyZXR2YWwpXG4gXG4gLyogRnVuY3Rpb25hbCB0ZXN0cyAqL1xuQEAgLTYwLDQgKzY0LDI1IEBAIF9fdGVzdCgtRU5PRU5UKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9ub3Rmb3VuZDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzXG4gX190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX25vdGZvdW5kMyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihcIlwiLCBcImFcIiwgMCk7IH1cbiBfX3Rlc3QoMCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfZW1wdHkodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoc3RyLCBcIlwiLCAxKTsgfVxuIFxuKy8qIGJwZl9zdHJwYnJrIC0gZnVuY3Rpb25hbCB0ZXN0cyAqL1xuK19fdGVzdCgwKSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX2ZpcnN0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcImhcIik7IH1cbitfX3Rlc3QoNCkgaW50IHRlc3Rfc3RycGJya19mb3VuZF9taWRkbGUodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFwib3dcIik7IH1cbitfX3Rlc3QoMikgaW50IHRlc3Rfc3RycGJya19mb3VuZF9tdWx0aXBsZSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXCJsXCIpOyB9XG4rX190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfbm90Zm91bmQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFwieHl6XCIpOyB9XG4rX190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfZW1wdHlfYWNjZXB0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcIlwiKTsgfVxuK1xuKy8qIGJwZl9tZW1jbXAgLSBmdW5jdGlvbmFsIHRlc3RzICovXG4rY2hhciBkYXRhMVtdID0gXCJoZWxsbyB3b3JsZFwiO1xuK2NoYXIgZGF0YTJbXSA9IFwiaGVsbG8gd29ybGRcIjtcbitjaGFyIGRhdGEzW10gPSBcImhlbGxvIHdvcmxlXCI7XG4rX190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTEsIGRhdGEyLCBzaXplb2YoZGF0YTEpKTsgfVxuK19fdGVzdCgtMSkgaW50IHRlc3RfbWVtY21wX25lcV9sZXNzKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTMsIHNpemVvZihkYXRhMSkpOyB9XG4rX190ZXN0KDEpIGludCB0ZXN0X21lbWNtcF9uZXFfZ3JlYXRlcih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTMsIGRhdGExLCBzaXplb2YoZGF0YTEpKTsgfVxuK19fdGVzdCgwKSBpbnQgdGVzdF9tZW1jbXBfc2l6ZV96ZXJvKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTMsIDApOyB9XG4rLyogbWVtY21wIHNob3VsZCBOT1Qgc3RvcCBhdCBudWxsIGJ5dGUgLSBjb21wYXJlIHBhc3QgJ1xcMCcgKi9cbitjaGFyIGJpbjFbXSA9IHsgJ2EnLCAnXFwwJywgJ2MnIH07XG4rY2hhciBiaW4yW10gPSB7ICdhJywgJ1xcMCcsICdkJyB9O1xuK19fdGVzdCgwKSBpbnQgdGVzdF9tZW1jbXBfbnVsbF9ieXRlX2VxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChiaW4xLCBiaW4xLCBzaXplb2YoYmluMSkpOyB9XG4rX190ZXN0KC0xKSBpbnQgdGVzdF9tZW1jbXBfbnVsbF9ieXRlX25lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoYmluMSwgYmluMiwgc2l6ZW9mKGJpbjEpKTsgfVxuK1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE1OjMzOjU4LjE5NjI4MzA0NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjAwNDgyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuIGZvciBOZXcgQlBGIEtmdW5jcyoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAgYXMgQlBGIGtmdW5jcy4gVGhpcyBpcyBpbnRlcmVzdGluZyDigJMgbmV3IGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMuIFNpbmNlIHRoaXMgY29kZSBpcywgYnkgZGVzaWduLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGxvYWRlZCBhbmQgcnVubmluZyBCUEYgcHJvZ3JhbXMsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IGtmdW5jcyBjYW4gd2l0aHN0YW5kIGhvc3RpbGUgaW5wdXQuXG5cbkZpcnN0LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHM6IGBicGZfc3RycGJya2AgYW5kIGBicGZfbWVtY21wYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgd2UnbGwgYmUgdGFyZ2V0aW5nLlxuXG5OZXh0LCB3ZSBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYGtlcm5lbC9icGYvaGVscGVycy5jYCBhbmQgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNvbmZpcm0sIGJ1dCBJJ20gYmV0dGluZyB3ZSdsbCBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgIChvciBwb3NzaWJseSBqdXN0IGBDT05GSUdfQlBGYCwgYnV0IG1vcmUgbGlrZWx5IHRoZSBmb3JtZXIpIGVuYWJsZWQuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBidWlsZCBhbmQgcnVudGltZSBlbnZpcm9ubWVudHMgYXJlIHN1aXRhYmxlLlxuXG5PbmNlIEkgaGF2ZSB2ZXJpZmllZCB0aGVzZSBjb25maWd1cmF0aW9ucywgSSB3aWxsIHVzZSB0aGUgYXZhaWxhYmxlIGZ1enppbmcgdG9vbHMgdG8gdGVzdCB0aGVzZSBuZXcga2Z1bmNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTgyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTU6MzQ6MDMuNDU2MzMzMjk3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDc0NjE5MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3N0cnBicmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmM9Mzk0Mz1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICpyZWplY3RfX2lnbilcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTM5NzQtLyoqXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzk3NTogKiBicGZfc3RycGJyayAtIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzZXQgb2YgY2hhcmFjdGVycyBpbiBhIHN0cmluZ1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTM5NzYtICogQHNfX2lnbjogVGhlIHN0cmluZyB0byBiZSBzZWFyY2hlZFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzk4Ni0gKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozOTg3Ol9fYnBmX2tmdW5jIGludCBicGZfc3RycGJyayhjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTM5ODgte1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDkzOD1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNzcG4pO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5Mzk6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJwYnJrKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTQwLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbWVtY21wKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9MTA9Y2hhciAqaW52YWxpZF9rZXJuX3B0ciA9IChjaGFyICopLTE7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYy0xMS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jOjEyOmV4dGVybiBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbikgX19rc3ltO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMtMTMtZXh0ZXJuIGludCBicGZfbWVtY21wKGNvbnN0IHZvaWQgKnB0cjFfX2lnbiwgY29uc3Qgdm9pZCAqcHRyMl9faWduLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYz02MT1TRUMoXFxcInN5c2NhbGxcXFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X21lbWNtcF9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXFxcInhcXFwiLCBOVUxMLCAxKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6NjI6U0VDKFxcXCJzeXNjYWxsXFxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJwYnJrX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoTlVMTCwgXFxcInhcXFwiKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6NjM6U0VDKFxcXCJzeXNjYWxsXFxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJwYnJrX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXFxcInhcXFwiLCBOVUxMKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMtNjQtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jPTkxPVNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3RfbWVtY21wX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXFxcInhcXFwiLCB1c2VyX3B0ciwgMSk7IH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jOjkyOlNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RycGJya191c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayh1c2VyX3B0ciwgXFxcInhcXFwiKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6OTM6U0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJwYnJrX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKFxcXCJ4XFxcIiwgdXNlcl9wdHIpOyB9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYy05NC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9MTIzPVNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X21lbWNtcF9wYWdlZmF1bHQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChcXFwieFxcXCIsIGludmFsaWRfa2Vybl9wdHIsIDEpOyB9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYzoxMjQ6U0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RycGJya19wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoaW52YWxpZF9rZXJuX3B0ciwgXFxcInhcXFwiKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6MTI1OlNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cnBicmtfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKFxcXCJ4XFxcIiwgaW52YWxpZF9rZXJuX3B0cik7IH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTEyNi1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmM9MjE9U0VDKFxcXCJzeXNjYWxsXFxcIikgaW50IHRlc3Rfc3RyY3Nwbl9yZWplY3RfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY3NwbihcXFwiYlxcXCIsIGxvbmdfc3RyKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmM6MjI6U0VDKFxcXCJzeXNjYWxsXFxcIikgaW50IHRlc3Rfc3RycGJya19zdHJfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhsb25nX3N0ciwgXFxcInpcXFwiKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmM6MjM6U0VDKFxcXCJzeXNjYWxsXFxcIikgaW50IHRlc3Rfc3RycGJya19hY2NlcHRfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcXFwiYlxcXCIsIGxvbmdfc3RyKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmMtMjQtU0VDKFxcXCJzeXNjYWxsXFxcIikgaW50IHRlc3Rfc3Ryc3RyX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnN0cihsb25nX3N0ciwgXFxcImhlbGxvXFxcIik7IH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYz04PWNoYXIgc3RyW10gPSBcXFwiaGVsbG8gd29ybGRcXFwiO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYy05LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYzoxMDpleHRlcm4gaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pIF9fa3N5bTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmMtMTEtZXh0ZXJuIGludCBicGZfbWVtY21wKGNvbnN0IHZvaWQgKnB0cjFfX2lnbiwgY29uc3Qgdm9pZCAqcHRyMl9faWduLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jPTY1PV9fdGVzdCgwKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9lbXB0eSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihzdHIsIFxcXCJcXFwiLCAxKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYy02Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmM6Njc6LyogYnBmX3N0cnBicmsgLSBmdW5jdGlvbmFsIHRlc3RzICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jOjY4Ol9fdGVzdCgwKSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX2ZpcnN0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcXFwiaFxcXCIpOyB9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jOjY5Ol9fdGVzdCg0KSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX21pZGRsZSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXFxcIm93XFxcIik7IH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmM6NzA6X190ZXN0KDIpIGludCB0ZXN0X3N0cnBicmtfZm91bmRfbXVsdGlwbGUodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFxcXCJsXFxcIik7IH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmM6NzE6X190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfbm90Zm91bmQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFxcXCJ4eXpcXFwiKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYzo3MjpfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RycGJya19lbXB0eV9hY2NlcHQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFxcXCJcXFwiKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYy03My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTU6MzQ6MDUuNDYzODAxNjEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAzNTQ5ODUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBOZXcgQlBGIEhlbHBlcnMqKlxuXG5BbHJpZ2h0LCBzbyBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAgaGF2ZSBiZWVuIGFkZGVkIHRvIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AuIEludGVyZXN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IHRoZXNlIGFyZSBleHBvc2VkLiBBZGRpbmcgdGhlc2UgcHJpbWl0aXZlcyBpcyBhIHNpZ25pZmljYW50IHN0ZXAsIGFzIHRoZXkgZ3JlYXRseSBleHBhbmQgdGhlIHBvdGVudGlhbCBmdW5jdGlvbmFsaXR5IG9mIEJQRiBwcm9ncmFtcy4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBsb29rIGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFVuZGVyc3RhbmRpbmcgd2hpY2ggY29uZmlnIGZsYWdzIGVuYWJsZSBga2VybmVsL2JwZi9oZWxwZXJzLmNgIGlzIGNydWNpYWwuIEl04oCZcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4ga2VybmVsIGZlYXR1cmVzIGFuZCB0aGUgQlBGIHN1YnN5c3RlbSwgZXNwZWNpYWxseSBhcyB0aGlzIGlzIGEgY29yZSBmaWxlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUgYW5kIGNvbXBpbGVkIGluIG15IGN1cnJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjE4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTU6MzQ6MTAuNDk5MzAyOTI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTgyNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhlbHBlcnMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNTozNDoxMC41NTM4OTczMjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDE0OTk4MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldyBCUEYgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgZXhhbWluZWQgdGhpcyBwYXRjaCwgYW5kIGl0IGJvaWxzIGRvd24gdG8gdGhpczogYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBNeSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBicGZfc3RycGJya2AgYW5kIGBicGZfbWVtY21wYC4gSXQncyBjbGVhciB0aGF0IHRoZXNlIGFyZSBmdW5jdGlvbmFsIGFkZGl0aW9uczsgdGhleSdyZSAqaW50ZW5kZWQqIHRvIGRvIHNvbWV0aGluZyB1c2VmdWwuXG5cbkkgcXVpY2tseSBkb3VibGUtY2hlY2tlZCB0aGUgY29kZSwgYW5kIHllcywgdGhlc2UgZnVuY3Rpb25zIGFyZSBhZGRlZCB1bmNvbmRpdGlvbmFsbHkgd2l0aGluIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AuIFRoYXQgbWVhbnMgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIG9ubHkgY29uZmlnIHdlIG5lZWQgdG8gZW5hYmxlLiBObyBuZWVkIHRvIHdvcnJ5IGFib3V0IGFueSBvdGhlciBjb25kaXRpb25hbCBjb21waWxhdGlvbi5cblxuVGhlcmVmb3JlLCBteSByZWNvbW1lbmRhdGlvbiBpcyBzdHJhaWdodGZvcndhcmQ6IFRoZXNlIG5ldyBCUEYga2Z1bmNzLCBwYXJ0aWN1bGFybHkgYGJwZl9zdHJwYnJrYCBhbmQgYGJwZl9tZW1jbXBgLCBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhleSByZXByZXNlbnQgbmV3IGZ1bmN0aW9uYWxpdHkgdGhhdCdzIG5vdyBhdmFpbGFibGUgdG8gQlBGIHByb2dyYW1zLiBUaGV5IHNob3VsZCBiZSBwcmlvcml0aXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MzEsIk91dHB1dFRva2VucyI6MTA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE1OjM0OjE1LjU2ODg5Nzc2OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkwMDIwMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3N0cnBicmtcIixcbiAgICBcImJwZl9tZW1jbXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgQlBGIGtmdW5jcywgYnBmX3N0cnBicmsgYW5kIGJwZl9tZW1jbXAsIHdoaWNoIGNhbiBiZSBjYWxsZWQgZnJvbSBCUEYgcHJvZ3JhbXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGFkZGl0aW9ucyB0byB0aGUgY29yZSBCUEYgaGVscGVyIGxpYnJhcnkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc3RycGJya1wiLFxuICAgIFwiYnBmX21lbWNtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdHdvIG5ldyBCUEYga2Z1bmNzLCBicGZfc3RycGJyayBhbmQgYnBmX21lbWNtcCwgd2hpY2ggY2FuIGJlIGNhbGxlZCBmcm9tIEJQRiBwcm9ncmFtcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgYWRkaXRpb25zIHRvIHRoZSBjb3JlIEJQRiBoZWxwZXIgbGlicmFyeSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowp2fs9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 15:23:21 +0000 UTC FinishedAt: 2026-06-26 15:34:17 +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": "fe9f4ee6c61a1410afd73bf011de5ae618004796", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "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": "fe9f4ee6c61a1410afd73bf011de5ae618004796", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "35f04557-5c9e-4f38-afd9-8bf04fe614c4" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_strpbrk", "bpf_memcmp" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA2LzI2IDE1OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3N0cnBicmsmIzM0OywKICAgICYjMzQ7YnBmX21lbWNtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgQlBGIGtmdW5jcywgYnBmX3N0cnBicmsgYW5kIGJwZl9tZW1jbXAsIHdoaWNoIGNhbiBiZSBjYWxsZWQgZnJvbSBCUEYgcHJvZ3JhbXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGFkZGl0aW9ucyB0byB0aGUgY29yZSBCUEYgaGVscGVyIGxpYnJhcnkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTU6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3OGZhZDU0NDU3YzQwMjQ0NDk2ZThjZTAwYmM0MWNiNzdhNmM1MWZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTU6MzM6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuaW5kZXggYjUzMTRjOWZlZDNjZjAuLmVhZDAwZWMzMTRmNTRhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtMzk3MSw2ICYjNDM7Mzk3MSw5MiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICpyZWplY3RfX2lnbilcbiBcdHJldHVybiAtRUZBVUxUO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGJwZl9zdHJwYnJrIC0gRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHNldCBvZiBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nXG4mIzQzOyAqIEBzX19pZ246IFRoZSBzdHJpbmcgdG8gYmUgc2VhcmNoZWRcbiYjNDM7ICogQGFjY2VwdF9faWduOiBUaGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlcnMgdG8gc2VhcmNoIGZvclxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogXHUwMDNlPTAgICAgICAtIEluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gQHNfX2lnbiB0aGF0IG1hdGNoZXMgYW55XG4mIzQzOyAqICAgICAgICAgICAgICBjaGFyYWN0ZXIgaW4gQGFjY2VwdF9faWduXG4mIzQzOyAqICogJS1FTk9FTlQgLSBObyBjaGFyYWN0ZXIgb2YgQGFjY2VwdF9faWduIGZvdW5kIGluIEBzX19pZ25cbiYjNDM7ICogKiAlLUVGQVVMVCAtIENhbm5vdCByZWFkIG9uZSBvZiB0aGUgc3RyaW5nc1xuJiM0MzsgKiAqICUtRTJCSUcgIC0gT25lIG9mIHRoZSBzdHJpbmdzIGlzIHRvbyBsYXJnZVxuJiM0MzsgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBzdHJpbmdzIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2VcbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIGludCBicGZfc3RycGJyayhjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBjcywgY2E7XG4mIzQzO1x0aW50IGksIGo7XG4mIzQzO1xuJiM0MztcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoc19faWduLCAxKSB8fFxuJiM0MztcdCAgICAhY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoYWNjZXB0X19pZ24sIDEpKSB7XG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmNzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xuJiM0MztcdFx0aWYgKGNzID09ICYjMzk7XFwwJiMzOTspXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmNhLCBhY2NlcHRfX2lnbiAmIzQzOyBqLCBjaGFyLCBlcnJfb3V0KTtcbiYjNDM7XHRcdFx0aWYgKGNhID09ICYjMzk7XFwwJiMzOTspXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGlmIChjcyA9PSBjYSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gaTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChqID09IFhBVFRSX1NJWkVfTUFYKVxuJiM0MztcdFx0XHRyZXR1cm4gLUUyQklHO1xuJiM0MztcdFx0c19faWduJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIC1FMkJJRztcbiYjNDM7ZXJyX291dDpcbiYjNDM7XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJwZl9tZW1jbXAgLSBDb21wYXJlIHR3byBtZW1vcnkgcmVnaW9ucyBieXRlIGJ5IGJ5dGVcbiYjNDM7ICogQHB0cjFfX2lnbjogRmlyc3QgbWVtb3J5IHJlZ2lvblxuJiM0MzsgKiBAcHRyMl9faWduOiBTZWNvbmQgbWVtb3J5IHJlZ2lvblxuJiM0MzsgKiBAc2l6ZTogTnVtYmVyIG9mIGJ5dGVzIHRvIGNvbXBhcmVcbiYjNDM7ICpcbiYjNDM7ICogQ29tcGFyZXMgdGhlIGZpcnN0IEBzaXplIGJ5dGVzIG9mIHRoZSBtZW1vcnkgYXJlYXMgQHB0cjFfX2lnbiBhbmRcbiYjNDM7ICogQHB0cjJfX2lnbi4gVW5saWtlIGJwZl9zdHJjbXAsIG51bGwgYnl0ZXMgZG8gbm90IHRlcm1pbmF0ZSB0aGUgY29tcGFyaXNvbi5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlxuJiM0MzsgKiAqICUwICAgICAgIC0gVGhlIG1lbW9yeSByZWdpb25zIGFyZSBlcXVhbFxuJiM0MzsgKiAqICUtMSAgICAgIC0gQHB0cjFfX2lnbiBpcyBsZXNzIHRoYW4gQHB0cjJfX2lnblxuJiM0MzsgKiAqICUxICAgICAgIC0gQHB0cjFfX2lnbiBpcyBncmVhdGVyIHRoYW4gQHB0cjJfX2lnblxuJiM0MzsgKiAqICUtRUZBVUxUIC0gQ2Fubm90IHJlYWQgb25lIG9mIHRoZSBtZW1vcnkgcmVnaW9uc1xuJiM0MzsgKiAqICUtRTJCSUcgIC0gQHNpemUgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIHNpemVcbiYjNDM7ICogKiAlLUVSQU5HRSAtIE9uZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbnMgaXMgb3V0c2lkZSBvZiBrZXJuZWwgYWRkcmVzcyBzcGFjZVxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sXG4mIzQzO1x0XHRcdCAgIHNpemVfdCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgY2hhciAqcDEgPSBwdHIxX19pZ24sICpwMiA9IHB0cjJfX2lnbjtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGMxLCBjMjtcbiYjNDM7XHRzaXplX3QgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNpemUgXHUwMDNlIFhBVFRSX1NJWkVfTUFYKVxuJiM0MztcdFx0cmV0dXJuIC1FMkJJRztcbiYjNDM7XHRpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHAxLCBzaXplKSB8fFxuJiM0MztcdCAgICAhY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQocDIsIHNpemUpKVxuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1xuJiM0MztcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaXplOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2YzEsIHAxICYjNDM7IGksIGNoYXIsIGVycl9vdXQpO1xuJiM0MztcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2YzIsIHAyICYjNDM7IGksIGNoYXIsIGVycl9vdXQpO1xuJiM0MztcdFx0aWYgKGMxICE9IGMyKVxuJiM0MztcdFx0XHRyZXR1cm4gYzEgXHUwMDNjIGMyID8gLTEgOiAxO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7ZXJyX291dDpcbiYjNDM7XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IF9fYnBmX3N0cm5zdHIoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbGVuLFxuIFx0XHRcdCBib29sIGlnbm9yZV9jYXNlKVxuIHtcbkBAIC00ODUwLDYgJiM0Mzs0OTM2LDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJsZW4pO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3Rybmxlbik7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJzcG4pO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY3Nwbik7XG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RycGJyayk7XG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfbWVtY21wKTtcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cnN0cik7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjYXNlc3RyKTtcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cm5zdHIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmluZ19rZnVuY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmluZ19rZnVuY3MuY1xuaW5kZXggMzAwMDMyYTE5NDQ1MTQuLjk1OWZmMzcxMTBhMTYzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyaW5nX2tmdW5jcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJpbmdfa2Z1bmNzLmNcbkBAIC0yMCw2ICYjNDM7MjAsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRlc3RfY2FzZXNbXSA9IHtcbiBcdFwmIzM0O3N0cnNwbl9hY2NlcHRcJiMzNDssXG4gXHRcJiMzNDtzdHJjc3BuX3N0clwmIzM0OyxcbiBcdFwmIzM0O3N0cmNzcG5fcmVqZWN0XCYjMzQ7LFxuJiM0MztcdFx0XCYjMzQ7c3RycGJya19zdHJcJiMzNDssXG4mIzQzO1x0XHRcJiMzNDtzdHJwYnJrX2FjY2VwdFwmIzM0OyxcbiBcdFwmIzM0O3N0cnN0clwmIzM0OyxcbiBcdFwmIzM0O3N0cmNhc2VzdHJcJiMzNDssXG4gXHRcJiMzNDtzdHJuc3RyXCYjMzQ7LFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9zdWNjZXNzLmNcbmluZGV4IGUwZDY3MmQ5M2FkZjg1Li4wNzE1ODFmZjA4MzNmMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuY1xuQEAgLTYyNCw3ICYjNDM7NjI0LDcgQEAgaW50IEJQRl9QUk9HKHRlc3RfZHlucHRyX3NrYl90cF9idGYsIHZvaWQgKnNrYiwgdm9pZCAqbG9jYXRpb24pXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgYnBmX21lbWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCB1MzIgc2l6ZSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbG9jYWxfbWVtY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIsIHUzMiBzaXplKVxuIHtcbiBcdGludCBpO1xuIFxuQEAgLTY1MCwxMiAmIzQzOzY1MCwxMiBAQCBpbnQgdGVzdF9keW5wdHJfY29weSh2b2lkICpjdHgpXG4gXHRlcnIgPSBicGZfZHlucHRyX3dyaXRlKFx1MDAyNnNyYywgMCwgZGF0YSwgc3osIDApO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfY29weShcdTAwMjZkc3QsIDAsIFx1MDAyNnNyYywgMCwgc3opO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChidWYsIHN6LCBcdTAwMjZkc3QsIDAsIDApO1xuLVx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBzeik7XG4mIzQzO1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChkYXRhLCBidWYsIHN6KTtcbiBcbiBcdC8qIFRlc3QgdGhhdCBvZmZzZXRzIGFyZSBoYW5kbGVkIGNvcnJlY3RseSAqL1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfY29weShcdTAwMjZkc3QsIDMsIFx1MDAyNnNyYywgNSwgc3ogLSA1KTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoYnVmLCBzeiAtIDUsIFx1MDAyNmRzdCwgMywgMCk7XG4tXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChkYXRhICYjNDM7IDUsIGJ1Ziwgc3ogLSA1KTtcbiYjNDM7XHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGRhdGEgJiM0MzsgNSwgYnVmLCBzeiAtIDUpO1xuIFxuIFx0YnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoXHUwMDI2c3JjLCAwKTtcbiBcdGJwZl9yaW5nYnVmX2Rpc2NhcmRfZHlucHRyKFx1MDAyNmRzdCwgMCk7XG5AQCAtNjkyLDcgJiM0Mzs2OTIsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKVxuIFx0XHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXHUwMDI2YnVmLCBsZW4sIFx1MDAyNnB0cl94ZHAsIGkgKiBsZW4sIDApO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRpZiAoYnBmX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcbiYjNDM7XHRcdGlmIChsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5AQCAtNzEzLDcgJiM0Mzs3MTMsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKVxuIFx0XHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXHUwMDI2YnVmLCBsZW4sIFx1MDAyNnB0cl9idWYsIGkgKiBsZW4sIDApO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRpZiAoYnBmX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcbiYjNDM7XHRcdGlmIChsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5AQCAtNzI3LDcgJiM0Mzs3MjcsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKVxuIFx0XHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXHUwMDI2YnVmLCBsZW4sIFx1MDAyNnB0cl94ZHAsIDIgJiM0MzsgaSAqIGxlbiwgMCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdGlmIChicGZfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxuJiM0MztcdFx0aWYgKGxvY2FsX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcbiBcdFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbkBAIC03NTAsNyAmIzQzOzc1MCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfemVybyh2b2lkICpjdHgpXG4gXG4gXHRlcnIgPSBicGZfZHlucHRyX2Zyb21fbWVtKG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3osIDAsIFx1MDAyNnB0cik7XG4gXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoXHUwMDI2cHRyLCAwLCBkYXRhX3N6LCAwKTtcbi1cdGVyciA9IGVyciA/OiBicGZfbWVtY21wKHplcm9lcywgbWVtc2V0X3plcm9fZGF0YSwgZGF0YV9zeik7XG4mIzQzO1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcCh6ZXJvZXMsIG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3opO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTc3MCw3ICYjNDM7NzcwLDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF9ub3R6ZXJvKHZvaWQgKmN0eClcbiBcbiBcdGVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X25vdHplcm9fZGF0YSwgZGF0YV9zeiwgMCwgXHUwMDI2cHRyKTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX21lbXNldChcdTAwMjZwdHIsIDAsIGRhdGFfc3osIERZTlBUUl9NRU1TRVRfVkFMKTtcbi1cdGVyciA9IGVyciA/OiBicGZfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfbm90emVyb19kYXRhLCBkYXRhX3N6KTtcbiYjNDM7XHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfbm90emVyb19kYXRhLCBkYXRhX3N6KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03ODYsNyAmIzQzOzc4Niw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfemVyb19vZmZzZXQodm9pZCAqY3R4KVxuIFxuIFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfemVyb19vZmZzZXRfZGF0YSwgZGF0YV9zeiwgMCwgXHUwMDI2cHRyKTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX21lbXNldChcdTAwMjZwdHIsIDgsIDQsIDApO1xuLVx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX29mZnNldF9kYXRhLCBkYXRhX3N6KTtcbiYjNDM7XHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfemVyb19vZmZzZXRfZGF0YSwgZGF0YV9zeik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtODAzLDcgJiM0Mzs4MDMsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm9fYWRqdXN0ZWQodm9pZCAqY3R4KVxuIFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfemVyb19hZGp1c3RlZF9kYXRhLCBkYXRhX3N6LCAwLCBcdTAwMjZwdHIpO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfYWRqdXN0KFx1MDAyNnB0ciwgNCwgOCk7XG4gXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoXHUwMDI2cHRyLCAwLCBicGZfZHlucHRyX3NpemUoXHUwMDI2cHRyKSwgMCk7XG4tXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeik7XG4mIzQzO1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtODk4LDcgJiM0Mzs4OTgsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3hkcF9jaHVua3Moc3RydWN0IHhkcF9tZCAqeGRwKVxuIFx0XHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXHUwMDI2YnVmLCBjaHVua19zeiwgXHUwMDI2cHRyX3hkcCwgb2Zmc2V0LCAwKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dDtcbi1cdFx0ZXJyID0gYnBmX21lbWNtcChidWYsIGV4cGVjdGVkX2J1Ziwgc2l6ZW9mKGJ1ZikpO1xuJiM0MztcdFx0ZXJyID0gbG9jYWxfbWVtY21wKGJ1ZiwgZXhwZWN0ZWRfYnVmLCBzaXplb2YoYnVmKSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG5AQCAtOTUyLDcgJiM0Mzs5NTIsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmUodm9pZCAqcHRyLCBicGZfcmVhZF9keW5wdHJfZm5fdCBicFxuIFx0XHRcdGJyZWFrO1xuIFx0XHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgbGVuLCBcdTAwMjZwdHJfYnVmLCAwLCAwKTtcbiBcbi1cdFx0aWYgKGVyciB8fCBicGZfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKVxuJiM0MztcdFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbikpXG4gXHRcdFx0ZXJyID0gMTtcbiBcbiBcdFx0LyogUmVzZXQgYnVmZmVyIGFuZCBkeW5wdHIgKi9cbkBAIC05ODYsNyAmIzQzOzk4Niw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X2R5bnB0cl9wcm9iZV9zdHIodm9pZCAqcHRyLFxuIFx0XHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgbGVuLCBcdTAwMjZwdHJfYnVmLCAwLCAwKTtcbiBcdFx0aWYgKCFsZW4pXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICYjMzk7XFwwJiMzOTspXG4mIzQzO1x0XHRpZiAoZXJyIHx8IGxvY2FsX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICYjMzk7XFwwJiMzOTspXG4gXHRcdFx0ZXJyID0gMTtcbiBcdH1cbiBcdGJwZl9yaW5nYnVmX2Rpc2NhcmRfZHlucHRyKFx1MDAyNnB0cl9idWYsIDApO1xuQEAgLTEwMTIsNyAmIzQzOzEwMTIsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCwgdm9pZCAqcHRyLFxuIFx0XHRpZiAobGVuIFx1MDAzZSBzaXplb2YoYnVmKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChcdTAwMjZidWYsIGxlbiwgXHUwMDI2cHRyX3hkcCwgb2ZmLCAwKTtcbi1cdFx0aWYgKGVyciB8fCBicGZfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKVxuJiM0MztcdFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbikpXG4gXHRcdFx0ZXJyID0gMTtcbiBcdFx0LyogUmVzZXQgYnVmZmVyIGFuZCBkeW5wdHIgKi9cbiBcdFx0X19idWlsdGluX21lbXNldChidWYsIDAsIHNpemVvZihidWYpKTtcbkBAIC0xMDQ4LDcgJiM0MzsxMDQ4LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3RfZHlucHRyX3Byb2JlX3N0cl94ZHAoc3RydWN0IHhkcF9tZCAqeGRwLCB2b2lkICpcbiBcbiBcdFx0aWYgKCFsZW4pXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICYjMzk7XFwwJiMzOTspXG4mIzQzO1x0XHRpZiAoZXJyIHx8IGxvY2FsX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICYjMzk7XFwwJiMzOTspXG4gXHRcdFx0ZXJyID0gMTtcbiBcbiBcdFx0X19idWlsdGluX21lbXNldChidWYsIDAsIHNpemVvZihidWYpKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuY1xuaW5kZXggYmRkYzRlODU3OWQyNDQuLmU2N2ZlOTcwMGU1OTNjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuY1xuQEAgLTksNiAmIzQzOzksMTAgQEBcbiBjaGFyICp1c2VyX3B0ciA9IChjaGFyICopMTtcbiBjaGFyICppbnZhbGlkX2tlcm5fcHRyID0gKGNoYXIgKiktMTtcbiBcbiYjNDM7ZXh0ZXJuIGludCBicGZfc3RycGJyayhjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKSBfX2tzeW07XG4mIzQzO2V4dGVybiBpbnQgYnBmX21lbWNtcChjb25zdCB2b2lkICpwdHIxX19pZ24sIGNvbnN0IHZvaWQgKnB0cjJfX2lnbixcbiYjNDM7XHRcdCAgICAgIHNpemVfdCBzaXplKSBfX2tzeW07XG4mIzQzO1xuIC8qXG4gICogV2hlbiBwYXNzaW5nIHVzZXJzcGFjZSBwb2ludGVycywgdGhlIGVycm9yIGNvZGUgZGlmZmVycyBiYXNlZCBvbiBhcmNoOlxuICAqICAgLUVSQU5HRSBvbiBhcmNoZXMgd2l0aCBub24tb3ZlcmxhcHBpbmcgYWRkcmVzcyBzcGFjZXNcbkBAIC01Myw2ICYjNDM7NTcsMTAgQEAgU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybnN0cl9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybnN0cl9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKFwmIzM0O2hlbGxvXCYjMzQ7LCBOVUxMLCAxKTsgfVxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5jYXNlc3RyX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKE5VTEwsIFwmIzM0O2hlbGxvXCYjMzQ7LCAxKTsgfVxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5jYXNlc3RyX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFwmIzM0O2hlbGxvXCYjMzQ7LCBOVUxMLCAxKTsgfVxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKE5VTEwsIFwmIzM0O3hcJiMzNDssIDEpOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X21lbWNtcF9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXCYjMzQ7eFwmIzM0OywgTlVMTCwgMSk7IH1cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RycGJya19udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKE5VTEwsIFwmIzM0O3hcJiMzNDspOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cnBicmtfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcJiMzNDt4XCYjMzQ7LCBOVUxMKTsgfVxuIFxuIC8qIFBhc3NpbmcgdXNlcnNwYWNlIHB0ciB0byBzdHJpbmcga2Z1bmNzICovXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RyY21wX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjbXAodXNlcl9wdHIsIFwmIzM0O2hlbGxvXCYjMzQ7KTsgfVxuQEAgLTc5LDYgJiM0Mzs4NywxMCBAQCBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuc3RyX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmVcbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuc3RyX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKFwmIzM0O2hlbGxvXCYjMzQ7LCB1c2VyX3B0ciwgMSk7IH1cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIodXNlcl9wdHIsIFwmIzM0O2hlbGxvXCYjMzQ7LCAxKTsgfVxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihcJiMzNDtoZWxsb1wmIzM0OywgdXNlcl9wdHIsIDEpOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X21lbWNtcF91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKHVzZXJfcHRyLCBcJiMzNDt4XCYjMzQ7LCAxKTsgfVxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9tZW1jbXBfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChcJiMzNDt4XCYjMzQ7LCB1c2VyX3B0ciwgMSk7IH1cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RycGJya191c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayh1c2VyX3B0ciwgXCYjMzQ7eFwmIzM0Oyk7IH1cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RycGJya191c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcJiMzNDt4XCYjMzQ7LCB1c2VyX3B0cik7IH1cbiBcbiAjZW5kaWYgLyogX19UQVJHRVRfQVJDSF9zMzkwICovXG4gXG5AQCAtMTA3LDUgJiM0MzsxMTksOSBAQCBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RybnN0cl9wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm5cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RybnN0cl9wYWdlZmF1bHQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5zdHIoXCYjMzQ7aGVsbG9cJiMzNDssIGludmFsaWRfa2Vybl9wdHIsIDEpOyB9XG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoaW52YWxpZF9rZXJuX3B0ciwgXCYjMzQ7aGVsbG9cJiMzNDssIDEpOyB9XG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoXCYjMzQ7aGVsbG9cJiMzNDssIGludmFsaWRfa2Vybl9wdHIsIDEpOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9tZW1jbXBfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoaW52YWxpZF9rZXJuX3B0ciwgXCYjMzQ7eFwmIzM0OywgMSk7IH1cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X21lbWNtcF9wYWdlZmF1bHQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChcJiMzNDt4XCYjMzQ7LCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfVxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RycGJya19wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoaW52YWxpZF9rZXJuX3B0ciwgXCYjMzQ7eFwmIzM0Oyk7IH1cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cnBicmtfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKFwmIzM0O3hcJiMzNDssIGludmFsaWRfa2Vybl9wdHIpOyB9XG4gXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuY1xuaW5kZXggNDEyYzUzYjg3YjE4MmIuLmQzYjk3OGU0NTNiZDdjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuY1xuQEAgLTE5LDYgJiM0MzsxOSw4IEBAIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgdGVzdF9zdHJzcG5fc3RyX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnNwbihsb25nX1xuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgdGVzdF9zdHJzcG5fYWNjZXB0X3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnNwbihcJiMzNDtiXCYjMzQ7LCBsb25nX3N0cik7IH1cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgaW50IHRlc3Rfc3RyY3Nwbl9zdHJfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY3Nwbihsb25nX3N0ciwgXCYjMzQ7YlwmIzM0Oyk7IH1cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgaW50IHRlc3Rfc3RyY3Nwbl9yZWplY3RfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY3NwbihcJiMzNDtiXCYjMzQ7LCBsb25nX3N0cik7IH1cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIGludCB0ZXN0X3N0cnBicmtfc3RyX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsobG9uZ19zdHIsIFwmIzM0O3pcJiMzNDspOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgdGVzdF9zdHJwYnJrX2FjY2VwdF90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKFwmIzM0O2JcJiMzNDssIGxvbmdfc3RyKTsgfVxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgdGVzdF9zdHJzdHJfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3Ryc3RyKGxvbmdfc3RyLCBcJiMzNDtoZWxsb1wmIzM0Oyk7IH1cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgaW50IHRlc3Rfc3RyY2FzZXN0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjYXNlc3RyKGxvbmdfc3RyLCBcJiMzNDtoZWxsb1wmIzM0Oyk7IH1cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgaW50IHRlc3Rfc3RybnN0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKGxvbmdfc3RyLCBcJiMzNDtoZWxsb1wmIzM0Oywgc2l6ZW9mKGxvbmdfc3RyKSk7IH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmNcbmluZGV4IGY2NWIxMjI2YTgxYTM3Li4yNWI4Yzg5N2RhNTRiYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jXG5AQCAtNyw2ICYjNDM7NywxMCBAQFxuIFxuIGNoYXIgc3RyW10gPSBcJiMzNDtoZWxsbyB3b3JsZFwmIzM0OztcbiBcbiYjNDM7ZXh0ZXJuIGludCBicGZfc3RycGJyayhjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKSBfX2tzeW07XG4mIzQzO2V4dGVybiBpbnQgYnBmX21lbWNtcChjb25zdCB2b2lkICpwdHIxX19pZ24sIGNvbnN0IHZvaWQgKnB0cjJfX2lnbixcbiYjNDM7XHRcdCAgICAgIHNpemVfdCBzaXplKSBfX2tzeW07XG4mIzQzO1xuICNkZWZpbmUgX190ZXN0KHJldHZhbCkgU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fc3VjY2VzcyBfX3JldHZhbChyZXR2YWwpXG4gXG4gLyogRnVuY3Rpb25hbCB0ZXN0cyAqL1xuQEAgLTYwLDQgJiM0Mzs2NCwyNSBAQCBfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfbm90Zm91bmQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc1xuIF9fdGVzdCgtRU5PRU5UKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9ub3Rmb3VuZDModm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoXCYjMzQ7XCYjMzQ7LCBcJiMzNDthXCYjMzQ7LCAwKTsgfVxuIF9fdGVzdCgwKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9lbXB0eSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihzdHIsIFwmIzM0O1wmIzM0OywgMSk7IH1cbiBcbiYjNDM7LyogYnBmX3N0cnBicmsgLSBmdW5jdGlvbmFsIHRlc3RzICovXG4mIzQzO19fdGVzdCgwKSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX2ZpcnN0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcJiMzNDtoXCYjMzQ7KTsgfVxuJiM0MztfX3Rlc3QoNCkgaW50IHRlc3Rfc3RycGJya19mb3VuZF9taWRkbGUodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFwmIzM0O293XCYjMzQ7KTsgfVxuJiM0MztfX3Rlc3QoMikgaW50IHRlc3Rfc3RycGJya19mb3VuZF9tdWx0aXBsZSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXCYjMzQ7bFwmIzM0Oyk7IH1cbiYjNDM7X190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfbm90Zm91bmQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFwmIzM0O3h5elwmIzM0Oyk7IH1cbiYjNDM7X190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfZW1wdHlfYWNjZXB0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcJiMzNDtcJiMzNDspOyB9XG4mIzQzO1xuJiM0MzsvKiBicGZfbWVtY21wIC0gZnVuY3Rpb25hbCB0ZXN0cyAqL1xuJiM0MztjaGFyIGRhdGExW10gPSBcJiMzNDtoZWxsbyB3b3JsZFwmIzM0OztcbiYjNDM7Y2hhciBkYXRhMltdID0gXCYjMzQ7aGVsbG8gd29ybGRcJiMzNDs7XG4mIzQzO2NoYXIgZGF0YTNbXSA9IFwmIzM0O2hlbGxvIHdvcmxlXCYjMzQ7O1xuJiM0MztfX3Rlc3QoMCkgaW50IHRlc3RfbWVtY21wX2VxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTIsIHNpemVvZihkYXRhMSkpOyB9XG4mIzQzO19fdGVzdCgtMSkgaW50IHRlc3RfbWVtY21wX25lcV9sZXNzKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTMsIHNpemVvZihkYXRhMSkpOyB9XG4mIzQzO19fdGVzdCgxKSBpbnQgdGVzdF9tZW1jbXBfbmVxX2dyZWF0ZXIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGRhdGEzLCBkYXRhMSwgc2l6ZW9mKGRhdGExKSk7IH1cbiYjNDM7X190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9zaXplX3plcm8odm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGRhdGExLCBkYXRhMywgMCk7IH1cbiYjNDM7LyogbWVtY21wIHNob3VsZCBOT1Qgc3RvcCBhdCBudWxsIGJ5dGUgLSBjb21wYXJlIHBhc3QgJiMzOTtcXDAmIzM5OyAqL1xuJiM0MztjaGFyIGJpbjFbXSA9IHsgJiMzOTthJiMzOTssICYjMzk7XFwwJiMzOTssICYjMzk7YyYjMzk7IH07XG4mIzQzO2NoYXIgYmluMltdID0geyAmIzM5O2EmIzM5OywgJiMzOTtcXDAmIzM5OywgJiMzOTtkJiMzOTsgfTtcbiYjNDM7X190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9udWxsX2J5dGVfZXEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGJpbjEsIGJpbjEsIHNpemVvZihiaW4xKSk7IH1cbiYjNDM7X190ZXN0KC0xKSBpbnQgdGVzdF9tZW1jbXBfbnVsbF9ieXRlX25lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoYmluMSwgYmluMiwgc2l6ZW9mKGJpbjEpKTsgfVxuJiM0MztcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE1OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3N0cnBicmsmIzM0OywKICAgICYjMzQ7YnBmX21lbWNtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgQlBGIGtmdW5jcywgYnBmX3N0cnBicmsgYW5kIGJwZl9tZW1jbXAsIHdoaWNoIGNhbiBiZSBjYWxsZWQgZnJvbSBCUEYgcHJvZ3JhbXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGFkZGl0aW9ucyB0byB0aGUgY29yZSBCUEYgaGVscGVyIGxpYnJhcnkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc4ZmFkNTQ0NTdjNDAyNDQ0OTZlOGNlMDBiYzQxY2I3N2E2YzUxZmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1biAyNiAxNTozMzo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmMKaW5kZXggYjUzMTRjOWZlZDNjZjAuLmVhZDAwZWMzMTRmNTRhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hlbHBlcnMuYwpAQCAtMzk3MSw2ICYjNDM7Mzk3MSw5MiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICpyZWplY3RfX2lnbikKIAlyZXR1cm4gLUVGQVVMVDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGJwZl9zdHJwYnJrIC0gRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHNldCBvZiBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nCiYjNDM7ICogQHNfX2lnbjogVGhlIHN0cmluZyB0byBiZSBzZWFyY2hlZAomIzQzOyAqIEBhY2NlcHRfX2lnbjogVGhlIHN0cmluZyBjb250YWluaW5nIHRoZSBjaGFyYWN0ZXJzIHRvIHNlYXJjaCBmb3IKJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqICZndDs9MCAgICAgIC0gSW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBAc19faWduIHRoYXQgbWF0Y2hlcyBhbnkKJiM0MzsgKiAgICAgICAgICAgICAgY2hhcmFjdGVyIGluIEBhY2NlcHRfX2lnbgomIzQzOyAqICogJS1FTk9FTlQgLSBObyBjaGFyYWN0ZXIgb2YgQGFjY2VwdF9faWduIGZvdW5kIGluIEBzX19pZ24KJiM0MzsgKiAqICUtRUZBVUxUIC0gQ2Fubm90IHJlYWQgb25lIG9mIHRoZSBzdHJpbmdzCiYjNDM7ICogKiAlLUUyQklHICAtIE9uZSBvZiB0aGUgc3RyaW5ncyBpcyB0b28gbGFyZ2UKJiM0MzsgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBzdHJpbmdzIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbikKJiM0Mzt7CiYjNDM7CWNoYXIgY3MsIGNhOwomIzQzOwlpbnQgaSwgajsKJiM0MzsKJiM0MzsJaWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzX19pZ24sIDEpIHx8CiYjNDM7CSAgICAhY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoYWNjZXB0X19pZ24sIDEpKSB7CiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJfQomIzQzOwomIzQzOwlndWFyZChwYWdlZmF1bHQpKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlpZiAoY3MgPT0gJiMzOTtcMCYjMzk7KQomIzQzOwkJCXJldHVybiAtRU5PRU5UOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBqJiM0MzsmIzQzOykgewomIzQzOwkJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7Y2EsIGFjY2VwdF9faWduICYjNDM7IGosIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJCWlmIChjYSA9PSAmIzM5O1wwJiMzOTspCiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCWlmIChjcyA9PSBjYSkKJiM0MzsJCQkJcmV0dXJuIGk7CiYjNDM7CQl9CiYjNDM7CQlpZiAoaiA9PSBYQVRUUl9TSVpFX01BWCkKJiM0MzsJCQlyZXR1cm4gLUUyQklHOwomIzQzOwkJc19faWduJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gLUUyQklHOwomIzQzO2Vycl9vdXQ6CiYjNDM7CXJldHVybiAtRUZBVUxUOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfbWVtY21wIC0gQ29tcGFyZSB0d28gbWVtb3J5IHJlZ2lvbnMgYnl0ZSBieSBieXRlCiYjNDM7ICogQHB0cjFfX2lnbjogRmlyc3QgbWVtb3J5IHJlZ2lvbgomIzQzOyAqIEBwdHIyX19pZ246IFNlY29uZCBtZW1vcnkgcmVnaW9uCiYjNDM7ICogQHNpemU6IE51bWJlciBvZiBieXRlcyB0byBjb21wYXJlCiYjNDM7ICoKJiM0MzsgKiBDb21wYXJlcyB0aGUgZmlyc3QgQHNpemUgYnl0ZXMgb2YgdGhlIG1lbW9yeSBhcmVhcyBAcHRyMV9faWduIGFuZAomIzQzOyAqIEBwdHIyX19pZ24uIFVubGlrZSBicGZfc3RyY21wLCBudWxsIGJ5dGVzIGRvIG5vdCB0ZXJtaW5hdGUgdGhlIGNvbXBhcmlzb24uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAlMCAgICAgICAtIFRoZSBtZW1vcnkgcmVnaW9ucyBhcmUgZXF1YWwKJiM0MzsgKiAqICUtMSAgICAgIC0gQHB0cjFfX2lnbiBpcyBsZXNzIHRoYW4gQHB0cjJfX2lnbgomIzQzOyAqICogJTEgICAgICAgLSBAcHRyMV9faWduIGlzIGdyZWF0ZXIgdGhhbiBAcHRyMl9faWduCiYjNDM7ICogKiAlLUVGQVVMVCAtIENhbm5vdCByZWFkIG9uZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbnMKJiM0MzsgKiAqICUtRTJCSUcgIC0gQHNpemUgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIHNpemUKJiM0MzsgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBtZW1vcnkgcmVnaW9ucyBpcyBvdXRzaWRlIG9mIGtlcm5lbCBhZGRyZXNzIHNwYWNlCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sCiYjNDM7CQkJICAgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwljb25zdCB1bnNpZ25lZCBjaGFyICpwMSA9IHB0cjFfX2lnbiwgKnAyID0gcHRyMl9faWduOwomIzQzOwl1bnNpZ25lZCBjaGFyIGMxLCBjMjsKJiM0MzsJc2l6ZV90IGk7CiYjNDM7CiYjNDM7CWlmIChzaXplICZndDsgWEFUVFJfU0laRV9NQVgpCiYjNDM7CQlyZXR1cm4gLUUyQklHOwomIzQzOwlpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHAxLCBzaXplKSB8fAomIzQzOwkgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHAyLCBzaXplKSkKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwomIzQzOwlndWFyZChwYWdlZmF1bHQpKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBzaXplOyBpJiM0MzsmIzQzOykgewomIzQzOwkJX19nZXRfa2VybmVsX25vZmF1bHQoJmFtcDtjMSwgcDEgJiM0MzsgaSwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO2MyLCBwMiAmIzQzOyBpLCBjaGFyLCBlcnJfb3V0KTsKJiM0MzsJCWlmIChjMSAhPSBjMikKJiM0MzsJCQlyZXR1cm4gYzEgJmx0OyBjMiA/IC0xIDogMTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0MztlcnJfb3V0OgomIzQzOwlyZXR1cm4gLUVGQVVMVDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9fYnBmX3N0cm5zdHIoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbGVuLAogCQkJIGJvb2wgaWdub3JlX2Nhc2UpCiB7CkBAIC00ODUwLDYgJiM0Mzs0OTM2LDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJsZW4pOwogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJubGVuKTsKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3Ryc3BuKTsKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY3Nwbik7CiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJwYnJrKTsKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX21lbWNtcCk7CiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cnN0cik7CiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNhc2VzdHIpOwogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJuc3RyKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmluZ19rZnVuY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmluZ19rZnVuY3MuYwppbmRleCAzMDAwMzJhMTk0NDUxNC4uOTU5ZmYzNzExMGExNjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmluZ19rZnVuY3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJpbmdfa2Z1bmNzLmMKQEAgLTIwLDYgJiM0MzsyMCw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGVzdF9jYXNlc1tdID0gewogCSYjMzQ7c3Ryc3BuX2FjY2VwdCYjMzQ7LAogCSYjMzQ7c3RyY3Nwbl9zdHImIzM0OywKIAkmIzM0O3N0cmNzcG5fcmVqZWN0JiMzNDssCiYjNDM7CQkmIzM0O3N0cnBicmtfc3RyJiMzNDssCiYjNDM7CQkmIzM0O3N0cnBicmtfYWNjZXB0JiMzNDssCiAJJiMzNDtzdHJzdHImIzM0OywKIAkmIzM0O3N0cmNhc2VzdHImIzM0OywKIAkmIzM0O3N0cm5zdHImIzM0OywKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9zdWNjZXNzLmMKaW5kZXggZTBkNjcyZDkzYWRmODUuLjA3MTU4MWZmMDgzM2YzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuYwpAQCAtNjI0LDcgJiM0Mzs2MjQsNyBAQCBpbnQgQlBGX1BST0codGVzdF9keW5wdHJfc2tiX3RwX2J0Ziwgdm9pZCAqc2tiLCB2b2lkICpsb2NhdGlvbikKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYnBmX21lbWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCB1MzIgc2l6ZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBsb2NhbF9tZW1jbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgdTMyIHNpemUpCiB7CiAJaW50IGk7CiAKQEAgLTY1MCwxMiAmIzQzOzY1MCwxMiBAQCBpbnQgdGVzdF9keW5wdHJfY29weSh2b2lkICpjdHgpCiAJZXJyID0gYnBmX2R5bnB0cl93cml0ZSgmYW1wO3NyYywgMCwgZGF0YSwgc3osIDApOwogCWVyciA9IGVyciA/OiBicGZfZHlucHRyX2NvcHkoJmFtcDtkc3QsIDAsICZhbXA7c3JjLCAwLCBzeik7CiAJZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChidWYsIHN6LCAmYW1wO2RzdCwgMCwgMCk7Ci0JZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBzeik7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBzeik7CiAKIAkvKiBUZXN0IHRoYXQgb2Zmc2V0cyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgKi8KIAllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9jb3B5KCZhbXA7ZHN0LCAzLCAmYW1wO3NyYywgNSwgc3ogLSA1KTsKIAllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKGJ1Ziwgc3ogLSA1LCAmYW1wO2RzdCwgMywgMCk7Ci0JZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZGF0YSAmIzQzOyA1LCBidWYsIHN6IC0gNSk7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZGF0YSAmIzQzOyA1LCBidWYsIHN6IC0gNSk7CiAKIAlicGZfcmluZ2J1Zl9kaXNjYXJkX2R5bnB0cigmYW1wO3NyYywgMCk7CiAJYnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoJmFtcDtkc3QsIDApOwpAQCAtNjkyLDcgJiM0Mzs2OTIsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKQogCQllcnIgPSBicGZfZHlucHRyX3JlYWQoJmFtcDtidWYsIGxlbiwgJmFtcDtwdHJfeGRwLCBpICogbGVuLCAwKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwotCQlpZiAoYnBmX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMCkKJiM0MzsJCWlmIChsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApCiAJCQlnb3RvIG91dDsKIAl9CiAKQEAgLTcxMyw3ICYjNDM7NzEzLDcgQEAgaW50IHRlc3RfZHlucHRyX2NvcHlfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCkKIAkJZXJyID0gYnBmX2R5bnB0cl9yZWFkKCZhbXA7YnVmLCBsZW4sICZhbXA7cHRyX2J1ZiwgaSAqIGxlbiwgMCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKLQkJaWYgKGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApCiYjNDM7CQlpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKQogCQkJZ290byBvdXQ7CiAJfQogCkBAIC03MjcsNyAmIzQzOzcyNyw3IEBAIGludCB0ZXN0X2R5bnB0cl9jb3B5X3hkcChzdHJ1Y3QgeGRwX21kICp4ZHApCiAJCWVyciA9IGJwZl9keW5wdHJfcmVhZCgmYW1wO2J1ZiwgbGVuLCAmYW1wO3B0cl94ZHAsIDIgJiM0MzsgaSAqIGxlbiwgMCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKLQkJaWYgKGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApCiYjNDM7CQlpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKQogCQkJZ290byBvdXQ7CiAJfQogCkBAIC03NTAsNyAmIzQzOzc1MCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfemVybyh2b2lkICpjdHgpCiAKIAllcnIgPSBicGZfZHlucHRyX2Zyb21fbWVtKG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3osIDAsICZhbXA7cHRyKTsKIAllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoJmFtcDtwdHIsIDAsIGRhdGFfc3osIDApOwotCWVyciA9IGVyciA/OiBicGZfbWVtY21wKHplcm9lcywgbWVtc2V0X3plcm9fZGF0YSwgZGF0YV9zeik7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoemVyb2VzLCBtZW1zZXRfemVyb19kYXRhLCBkYXRhX3N6KTsKIAogCXJldHVybiAwOwogfQpAQCAtNzcwLDcgJiM0Mzs3NzAsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X25vdHplcm8odm9pZCAqY3R4KQogCiAJZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfbm90emVyb19kYXRhLCBkYXRhX3N6LCAwLCAmYW1wO3B0cik7CiAJZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KCZhbXA7cHRyLCAwLCBkYXRhX3N6LCBEWU5QVFJfTUVNU0VUX1ZBTCk7Ci0JZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF9ub3R6ZXJvX2RhdGEsIGRhdGFfc3opOwomIzQzOwllcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfbm90emVyb19kYXRhLCBkYXRhX3N6KTsKIAogCXJldHVybiAwOwogfQpAQCAtNzg2LDcgJiM0Mzs3ODYsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm9fb2Zmc2V0KHZvaWQgKmN0eCkKIAogCWVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X3plcm9fb2Zmc2V0X2RhdGEsIGRhdGFfc3osIDAsICZhbXA7cHRyKTsKIAllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoJmFtcDtwdHIsIDgsIDQsIDApOwotCWVyciA9IGVyciA/OiBicGZfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfemVyb19vZmZzZXRfZGF0YSwgZGF0YV9zeik7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX29mZnNldF9kYXRhLCBkYXRhX3N6KTsKIAogCXJldHVybiAwOwogfQpAQCAtODAzLDcgJiM0Mzs4MDMsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm9fYWRqdXN0ZWQodm9pZCAqY3R4KQogCWVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeiwgMCwgJmFtcDtwdHIpOwogCWVyciA9IGVyciA/OiBicGZfZHlucHRyX2FkanVzdCgmYW1wO3B0ciwgNCwgOCk7CiAJZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KCZhbXA7cHRyLCAwLCBicGZfZHlucHRyX3NpemUoJmFtcDtwdHIpLCAwKTsKLQllcnIgPSBlcnIgPzogYnBmX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeik7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX2FkanVzdGVkX2RhdGEsIGRhdGFfc3opOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04OTgsNyAmIzQzOzg5OCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfeGRwX2NodW5rcyhzdHJ1Y3QgeGRwX21kICp4ZHApCiAJCWVyciA9IGJwZl9keW5wdHJfcmVhZCgmYW1wO2J1ZiwgY2h1bmtfc3osICZhbXA7cHRyX3hkcCwgb2Zmc2V0LCAwKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwotCQllcnIgPSBicGZfbWVtY21wKGJ1ZiwgZXhwZWN0ZWRfYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CQllcnIgPSBsb2NhbF9tZW1jbXAoYnVmLCBleHBlY3RlZF9idWYsIHNpemVvZihidWYpKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTk1Miw3ICYjNDM7OTUyLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3RfZHlucHRyX3Byb2JlKHZvaWQgKnB0ciwgYnBmX3JlYWRfZHlucHRyX2ZuX3QgYnAKIAkJCWJyZWFrOwogCQllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKCZhbXA7YnVmLCBsZW4sICZhbXA7cHRyX2J1ZiwgMCwgMCk7CiAKLQkJaWYgKGVyciB8fCBicGZfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKQomIzQzOwkJaWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbikpCiAJCQllcnIgPSAxOwogCiAJCS8qIFJlc2V0IGJ1ZmZlciBhbmQgZHlucHRyICovCkBAIC05ODYsNyAmIzQzOzk4Niw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X2R5bnB0cl9wcm9iZV9zdHIodm9pZCAqcHRyLAogCQllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKCZhbXA7YnVmLCBsZW4sICZhbXA7cHRyX2J1ZiwgMCwgMCk7CiAJCWlmICghbGVuKQogCQkJY29udGludWU7Ci0JCWlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICYjMzk7XDAmIzM5OykKJiM0MzsJCWlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4gLSAxKSB8fCBidWZbbGVuIC0gMV0gIT0gJiMzOTtcMCYjMzk7KQogCQkJZXJyID0gMTsKIAl9CiAJYnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoJmFtcDtwdHJfYnVmLCAwKTsKQEAgLTEwMTIsNyAmIzQzOzEwMTIsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCwgdm9pZCAqcHRyLAogCQlpZiAobGVuICZndDsgc2l6ZW9mKGJ1ZikpCiAJCQljb250aW51ZTsKIAkJZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZCgmYW1wO2J1ZiwgbGVuLCAmYW1wO3B0cl94ZHAsIG9mZiwgMCk7Ci0JCWlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSkKJiM0MzsJCWlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKQogCQkJZXJyID0gMTsKIAkJLyogUmVzZXQgYnVmZmVyIGFuZCBkeW5wdHIgKi8KIAkJX19idWlsdGluX21lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKQEAgLTEwNDgsNyAmIzQzOzEwNDgsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfc3RyX3hkcChzdHJ1Y3QgeGRwX21kICp4ZHAsIHZvaWQgKgogCiAJCWlmICghbGVuKQogCQkJY29udGludWU7Ci0JCWlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICYjMzk7XDAmIzM5OykKJiM0MzsJCWlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4gLSAxKSB8fCBidWZbbGVuIC0gMV0gIT0gJiMzOTtcMCYjMzk7KQogCQkJZXJyID0gMTsKIAogCQlfX2J1aWx0aW5fbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMKaW5kZXggYmRkYzRlODU3OWQyNDQuLmU2N2ZlOTcwMGU1OTNjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMKQEAgLTksNiAmIzQzOzksMTAgQEAKIGNoYXIgKnVzZXJfcHRyID0gKGNoYXIgKikxOwogY2hhciAqaW52YWxpZF9rZXJuX3B0ciA9IChjaGFyICopLTE7CiAKJiM0MztleHRlcm4gaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pIF9fa3N5bTsKJiM0MztleHRlcm4gaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sCiYjNDM7CQkgICAgICBzaXplX3Qgc2l6ZSkgX19rc3ltOwomIzQzOwogLyoKICAqIFdoZW4gcGFzc2luZyB1c2Vyc3BhY2UgcG9pbnRlcnMsIHRoZSBlcnJvciBjb2RlIGRpZmZlcnMgYmFzZWQgb24gYXJjaDoKICAqICAgLUVSQU5HRSBvbiBhcmNoZXMgd2l0aCBub24tb3ZlcmxhcHBpbmcgYWRkcmVzcyBzcGFjZXMKQEAgLTUzLDYgJiM0Mzs1NywxMCBAQCBTRUMoJiMzNDtzeXNjYWxsJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybnN0cl9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybnN0cl9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKCYjMzQ7aGVsbG8mIzM0OywgTlVMTCwgMSk7IH0KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJuY2FzZXN0cl9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihOVUxMLCAmIzM0O2hlbGxvJiMzNDssIDEpOyB9CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybmNhc2VzdHJfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoJiMzNDtoZWxsbyYjMzQ7LCBOVUxMLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKE5VTEwsICYjMzQ7eCYjMzQ7LCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKCYjMzQ7eCYjMzQ7LCBOVUxMLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJwYnJrX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoTlVMTCwgJiMzNDt4JiMzNDspOyB9CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cnBicmtfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyaygmIzM0O3gmIzM0OywgTlVMTCk7IH0KIAogLyogUGFzc2luZyB1c2Vyc3BhY2UgcHRyIHRvIHN0cmluZyBrZnVuY3MgKi8KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJjbXBfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcCh1c2VyX3B0ciwgJiMzNDtoZWxsbyYjMzQ7KTsgfQpAQCAtNzksNiAmIzQzOzg3LDEwIEBAIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuc3RyX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmUKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuc3RyX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKCYjMzQ7aGVsbG8mIzM0OywgdXNlcl9wdHIsIDEpOyB9CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKHVzZXJfcHRyLCAmIzM0O2hlbGxvJiMzNDssIDEpOyB9CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKCYjMzQ7aGVsbG8mIzM0OywgdXNlcl9wdHIsIDEpOyB9CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X21lbWNtcF91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKHVzZXJfcHRyLCAmIzM0O3gmIzM0OywgMSk7IH0KJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3RfbWVtY21wX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoJiMzNDt4JiMzNDssIHVzZXJfcHRyLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJwYnJrX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHVzZXJfcHRyLCAmIzM0O3gmIzM0Oyk7IH0KJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RycGJya191c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyaygmIzM0O3gmIzM0OywgdXNlcl9wdHIpOyB9CiAKICNlbmRpZiAvKiBfX1RBUkdFVF9BUkNIX3MzOTAgKi8KIApAQCAtMTA3LDUgJiM0MzsxMTksOSBAQCBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5zdHJfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5zdHJfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKCYjMzQ7aGVsbG8mIzM0OywgaW52YWxpZF9rZXJuX3B0ciwgMSk7IH0KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihpbnZhbGlkX2tlcm5fcHRyLCAmIzM0O2hlbGxvJiMzNDssIDEpOyB9CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoJiMzNDtoZWxsbyYjMzQ7LCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3RfbWVtY21wX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGludmFsaWRfa2Vybl9wdHIsICYjMzQ7eCYjMzQ7LCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3RfbWVtY21wX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKCYjMzQ7eCYjMzQ7LCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RycGJya19wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoaW52YWxpZF9rZXJuX3B0ciwgJiMzNDt4JiMzNDspOyB9CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJwYnJrX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyaygmIzM0O3gmIzM0OywgaW52YWxpZF9rZXJuX3B0cik7IH0KIAogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmMKaW5kZXggNDEyYzUzYjg3YjE4MmIuLmQzYjk3OGU0NTNiZDdjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmMKQEAgLTE5LDYgJiM0MzsxOSw4IEBAIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgaW50IHRlc3Rfc3Ryc3BuX3N0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJzcG4obG9uZ18KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgaW50IHRlc3Rfc3Ryc3BuX2FjY2VwdF90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJzcG4oJiMzNDtiJiMzNDssIGxvbmdfc3RyKTsgfQogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBpbnQgdGVzdF9zdHJjc3BuX3N0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjc3BuKGxvbmdfc3RyLCAmIzM0O2ImIzM0Oyk7IH0KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgaW50IHRlc3Rfc3RyY3Nwbl9yZWplY3RfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY3NwbigmIzM0O2ImIzM0OywgbG9uZ19zdHIpOyB9CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBpbnQgdGVzdF9zdHJwYnJrX3N0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKGxvbmdfc3RyLCAmIzM0O3omIzM0Oyk7IH0KJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspIGludCB0ZXN0X3N0cnBicmtfYWNjZXB0X3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoJiMzNDtiJiMzNDssIGxvbmdfc3RyKTsgfQogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBpbnQgdGVzdF9zdHJzdHJfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3Ryc3RyKGxvbmdfc3RyLCAmIzM0O2hlbGxvJiMzNDspOyB9CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIGludCB0ZXN0X3N0cmNhc2VzdHJfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY2FzZXN0cihsb25nX3N0ciwgJiMzNDtoZWxsbyYjMzQ7KTsgfQogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBpbnQgdGVzdF9zdHJuc3RyX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5zdHIobG9uZ19zdHIsICYjMzQ7aGVsbG8mIzM0Oywgc2l6ZW9mKGxvbmdfc3RyKSk7IH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYwppbmRleCBmNjViMTIyNmE4MWEzNy4uMjViOGM4OTdkYTU0YmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmMKQEAgLTcsNiAmIzQzOzcsMTAgQEAKIAogY2hhciBzdHJbXSA9ICYjMzQ7aGVsbG8gd29ybGQmIzM0OzsKIAomIzQzO2V4dGVybiBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbikgX19rc3ltOwomIzQzO2V4dGVybiBpbnQgYnBmX21lbWNtcChjb25zdCB2b2lkICpwdHIxX19pZ24sIGNvbnN0IHZvaWQgKnB0cjJfX2lnbiwKJiM0MzsJCSAgICAgIHNpemVfdCBzaXplKSBfX2tzeW07CiYjNDM7CiAjZGVmaW5lIF9fdGVzdChyZXR2YWwpIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgX19zdWNjZXNzIF9fcmV0dmFsKHJldHZhbCkKIAogLyogRnVuY3Rpb25hbCB0ZXN0cyAqLwpAQCAtNjAsNCAmIzQzOzY0LDI1IEBAIF9fdGVzdCgtRU5PRU5UKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9ub3Rmb3VuZDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzCiBfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfbm90Zm91bmQzKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKCYjMzQ7JiMzNDssICYjMzQ7YSYjMzQ7LCAwKTsgfQogX190ZXN0KDApIGludCB0ZXN0X3N0cm5jYXNlc3RyX2VtcHR5KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKHN0ciwgJiMzNDsmIzM0OywgMSk7IH0KIAomIzQzOy8qIGJwZl9zdHJwYnJrIC0gZnVuY3Rpb25hbCB0ZXN0cyAqLwomIzQzO19fdGVzdCgwKSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX2ZpcnN0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCAmIzM0O2gmIzM0Oyk7IH0KJiM0MztfX3Rlc3QoNCkgaW50IHRlc3Rfc3RycGJya19mb3VuZF9taWRkbGUodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsICYjMzQ7b3cmIzM0Oyk7IH0KJiM0MztfX3Rlc3QoMikgaW50IHRlc3Rfc3RycGJya19mb3VuZF9tdWx0aXBsZSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgJiMzNDtsJiMzNDspOyB9CiYjNDM7X190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfbm90Zm91bmQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsICYjMzQ7eHl6JiMzNDspOyB9CiYjNDM7X190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfZW1wdHlfYWNjZXB0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCAmIzM0OyYjMzQ7KTsgfQomIzQzOwomIzQzOy8qIGJwZl9tZW1jbXAgLSBmdW5jdGlvbmFsIHRlc3RzICovCiYjNDM7Y2hhciBkYXRhMVtdID0gJiMzNDtoZWxsbyB3b3JsZCYjMzQ7OwomIzQzO2NoYXIgZGF0YTJbXSA9ICYjMzQ7aGVsbG8gd29ybGQmIzM0OzsKJiM0MztjaGFyIGRhdGEzW10gPSAmIzM0O2hlbGxvIHdvcmxlJiMzNDs7CiYjNDM7X190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTEsIGRhdGEyLCBzaXplb2YoZGF0YTEpKTsgfQomIzQzO19fdGVzdCgtMSkgaW50IHRlc3RfbWVtY21wX25lcV9sZXNzKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTMsIHNpemVvZihkYXRhMSkpOyB9CiYjNDM7X190ZXN0KDEpIGludCB0ZXN0X21lbWNtcF9uZXFfZ3JlYXRlcih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTMsIGRhdGExLCBzaXplb2YoZGF0YTEpKTsgfQomIzQzO19fdGVzdCgwKSBpbnQgdGVzdF9tZW1jbXBfc2l6ZV96ZXJvKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTMsIDApOyB9CiYjNDM7LyogbWVtY21wIHNob3VsZCBOT1Qgc3RvcCBhdCBudWxsIGJ5dGUgLSBjb21wYXJlIHBhc3QgJiMzOTtcMCYjMzk7ICovCiYjNDM7Y2hhciBiaW4xW10gPSB7ICYjMzk7YSYjMzk7LCAmIzM5O1wwJiMzOTssICYjMzk7YyYjMzk7IH07CiYjNDM7Y2hhciBiaW4yW10gPSB7ICYjMzk7YSYjMzk7LCAmIzM5O1wwJiMzOTssICYjMzk7ZCYjMzk7IH07CiYjNDM7X190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9udWxsX2J5dGVfZXEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGJpbjEsIGJpbjEsIHNpemVvZihiaW4xKSk7IH0KJiM0MztfX3Rlc3QoLTEpIGludCB0ZXN0X21lbWNtcF9udWxsX2J5dGVfbmVxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChiaW4xLCBiaW4yLCBzaXplb2YoYmluMSkpOyB9CiYjNDM7CiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE1OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1ODIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuIGZvciBOZXcgQlBGIEtmdW5jcyoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgbmV3IHBhdGNoIGludHJvZHVjaW5nIGBicGZfc3RycGJya2AgYW5kIGBicGZfbWVtY21wYCBhcyBCUEYga2Z1bmNzLiBUaGlzIGlzIGludGVyZXN0aW5nIOKAkyBuZXcgZnVuY3Rpb25hbGl0eSBleHBvc2VkIHRvIEJQRiBwcm9ncmFtcy4gU2luY2UgdGhpcyBjb2RlIGlzLCBieSBkZXNpZ24sIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbG9hZGVkIGFuZCBydW5uaW5nIEJQRiBwcm9ncmFtcywgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBuZXcga2Z1bmNzIGNhbiB3aXRoc3RhbmQgaG9zdGlsZSBpbnB1dC4KCkZpcnN0LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzOiBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAuIFRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzIHdlJiMzOTtsbCBiZSB0YXJnZXRpbmcuCgpOZXh0LCB3ZSBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AgYW5kIGBrZXJuZWwvYnBmL01ha2VmaWxlYCB0byBjb25maXJtLCBidXQgSSYjMzk7bSBiZXR0aW5nIHdlJiMzOTtsbCBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgIChvciBwb3NzaWJseSBqdXN0IGBDT05GSUdfQlBGYCwgYnV0IG1vcmUgbGlrZWx5IHRoZSBmb3JtZXIpIGVuYWJsZWQuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBidWlsZCBhbmQgcnVudGltZSBlbnZpcm9ubWVudHMgYXJlIHN1aXRhYmxlLgoKT25jZSBJIGhhdmUgdmVyaWZpZWQgdGhlc2UgY29uZmlndXJhdGlvbnMsIEkgd2lsbCB1c2UgdGhlIGF2YWlsYWJsZSBmdXp6aW5nIHRvb2xzIHRvIHRlc3QgdGhlc2UgbmV3IGtmdW5jcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RycGJyayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYz0zOTQzPV9fYnBmX2tmdW5jIGludCBicGZfc3RyY3Nwbihjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKnJlamVjdF9faWduKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTM5NzQtLyoqXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozOTc1OiAqIGJwZl9zdHJwYnJrIC0gRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHNldCBvZiBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zOTc2LSAqIEBzX19pZ246IFRoZSBzdHJpbmcgdG8gYmUgc2VhcmNoZWRcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zOTg2LSAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzk4NzpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbilcbmtlcm5lbC9icGYvaGVscGVycy5jLTM5ODgte1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ5Mzg9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjc3BuKTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5Mzk6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJwYnJrKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NDAtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9tZW1jbXApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9MTA9Y2hhciAqaW52YWxpZF9rZXJuX3B0ciA9IChjaGFyICopLTE7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTExLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYzoxMjpleHRlcm4gaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pIF9fa3N5bTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMtMTMtZXh0ZXJuIGludCBicGZfbWVtY21wKGNvbnN0IHZvaWQgKnB0cjFfX2lnbiwgY29uc3Qgdm9pZCAqcHRyMl9faWduLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9NjE9U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3RfbWVtY21wX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChcJiMzNDt4XCYjMzQ7LCBOVUxMLCAxKTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYzo2MjpTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJwYnJrX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoTlVMTCwgXCYjMzQ7eFwmIzM0Oyk7IH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6NjM6U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RycGJya19udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKFwmIzM0O3hcJiMzNDssIE5VTEwpOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTY0LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9OTE9U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3RfbWVtY21wX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXCYjMzQ7eFwmIzM0OywgdXNlcl9wdHIsIDEpOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jOjkyOlNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cnBicmtfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsodXNlcl9wdHIsIFwmIzM0O3hcJiMzNDspOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jOjkzOlNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cnBicmtfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXCYjMzQ7eFwmIzM0OywgdXNlcl9wdHIpOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTk0LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9MTIzPVNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9tZW1jbXBfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXCYjMzQ7eFwmIzM0OywgaW52YWxpZF9rZXJuX3B0ciwgMSk7IH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6MTI0OlNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJwYnJrX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhpbnZhbGlkX2tlcm5fcHRyLCBcJiMzNDt4XCYjMzQ7KTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYzoxMjU6U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cnBicmtfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKFwmIzM0O3hcJiMzNDssIGludmFsaWRfa2Vybl9wdHIpOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTEyNi1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMi5jPTIxPVNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgdGVzdF9zdHJjc3BuX3JlamVjdF90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjc3BuKFwmIzM0O2JcJiMzNDssIGxvbmdfc3RyKTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuYzoyMjpTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgaW50IHRlc3Rfc3RycGJya19zdHJfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhsb25nX3N0ciwgXCYjMzQ7elwmIzM0Oyk7IH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmM6MjM6U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIGludCB0ZXN0X3N0cnBicmtfYWNjZXB0X3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXCYjMzQ7YlwmIzM0OywgbG9uZ19zdHIpOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMi5jLTI0LVNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgdGVzdF9zdHJzdHJfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3Ryc3RyKGxvbmdfc3RyLCBcJiMzNDtoZWxsb1wmIzM0Oyk7IH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmM9OD1jaGFyIHN0cltdID0gXCYjMzQ7aGVsbG8gd29ybGRcJiMzNDs7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmMtOS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYzoxMDpleHRlcm4gaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pIF9fa3N5bTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYy0xMS1leHRlcm4gaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jPTY1PV9fdGVzdCgwKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9lbXB0eSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihzdHIsIFwmIzM0O1wmIzM0OywgMSk7IH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYy02Ni1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYzo2NzovKiBicGZfc3RycGJyayAtIGZ1bmN0aW9uYWwgdGVzdHMgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYzo2ODpfX3Rlc3QoMCkgaW50IHRlc3Rfc3RycGJya19mb3VuZF9maXJzdCh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXCYjMzQ7aFwmIzM0Oyk7IH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYzo2OTpfX3Rlc3QoNCkgaW50IHRlc3Rfc3RycGJya19mb3VuZF9taWRkbGUodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFwmIzM0O293XCYjMzQ7KTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jOjcwOl9fdGVzdCgyKSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX211bHRpcGxlKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcJiMzNDtsXCYjMzQ7KTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jOjcxOl9fdGVzdCgtRU5PRU5UKSBpbnQgdGVzdF9zdHJwYnJrX25vdGZvdW5kKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcJiMzNDt4eXpcJiMzNDspOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmM6NzI6X190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfZW1wdHlfYWNjZXB0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcJiMzNDtcJiMzNDspOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmMtNzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTU6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIE5ldyBCUEYgSGVscGVycyoqCgpBbHJpZ2h0LCBzbyBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAgaGF2ZSBiZWVuIGFkZGVkIHRvIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AuIEludGVyZXN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IHRoZXNlIGFyZSBleHBvc2VkLiBBZGRpbmcgdGhlc2UgcHJpbWl0aXZlcyBpcyBhIHNpZ25pZmljYW50IHN0ZXAsIGFzIHRoZXkgZ3JlYXRseSBleHBhbmQgdGhlIHBvdGVudGlhbCBmdW5jdGlvbmFsaXR5IG9mIEJQRiBwcm9ncmFtcy4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBsb29rIGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFVuZGVyc3RhbmRpbmcgd2hpY2ggY29uZmlnIGZsYWdzIGVuYWJsZSBga2VybmVsL2JwZi9oZWxwZXJzLmNgIGlzIGNydWNpYWwuIEl04oCZcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4ga2VybmVsIGZlYXR1cmVzIGFuZCB0aGUgQlBGIHN1YnN5c3RlbSwgZXNwZWNpYWxseSBhcyB0aGlzIGlzIGEgY29yZSBmaWxlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUgYW5kIGNvbXBpbGVkIGluIG15IGN1cnJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTU6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGVscGVycy5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYzMQoJCQkJCQkJb3V0cHV0OiAxMDcKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV3IEJQRiBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGV4YW1pbmVkIHRoaXMgcGF0Y2gsIGFuZCBpdCBib2lscyBkb3duIHRvIHRoaXM6IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gTXkgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgYWRkaXRpb25zOyB0aGV5JiMzOTtyZSAqaW50ZW5kZWQqIHRvIGRvIHNvbWV0aGluZyB1c2VmdWwuCgpJIHF1aWNrbHkgZG91YmxlLWNoZWNrZWQgdGhlIGNvZGUsIGFuZCB5ZXMsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWRkZWQgdW5jb25kaXRpb25hbGx5IHdpdGhpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgLiBUaGF0IG1lYW5zIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBvbmx5IGNvbmZpZyB3ZSBuZWVkIHRvIGVuYWJsZS4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCBhbnkgb3RoZXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uCgpUaGVyZWZvcmUsIG15IHJlY29tbWVuZGF0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDogVGhlc2UgbmV3IEJQRiBrZnVuY3MsIHBhcnRpY3VsYXJseSBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAsIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaGV5IHJlcHJlc2VudCBuZXcgZnVuY3Rpb25hbGl0eSB0aGF0JiMzOTtzIG5vdyBhdmFpbGFibGUgdG8gQlBGIHByb2dyYW1zLiBUaGV5IHNob3VsZCBiZSBwcmlvcml0aXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxNTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc3RycGJyayYjMzQ7LAogICAgJiMzNDticGZfbWVtY21wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdHdvIG5ldyBCUEYga2Z1bmNzLCBicGZfc3RycGJyayBhbmQgYnBmX21lbWNtcCwgd2hpY2ggY2FuIGJlIGNhbGxlZCBmcm9tIEJQRiBwcm9ncmFtcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgYWRkaXRpb25zIHRvIHRoZSBjb3JlIEJQRiBoZWxwZXIgbGlicmFyeSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc3RycGJyayYjMzQ7LAogICAgJiMzNDticGZfbWVtY21wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdHdvIG5ldyBCUEYga2Z1bmNzLCBicGZfc3RycGJyayBhbmQgYnBmX21lbWNtcCwgd2hpY2ggY2FuIGJlIGNhbGxlZCBmcm9tIEJQRiBwcm9ncmFtcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgYWRkaXRpb25zIHRvIHRoZSBjb3JlIEJQRiBoZWxwZXIgbGlicmFyeSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE1OjMzOjU3LjYxNDU5MDQwNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDMzMzIzMDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3N0cnBicmtcIixcbiAgICBcImJwZl9tZW1jbXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgQlBGIGtmdW5jcywgYnBmX3N0cnBicmsgYW5kIGJwZl9tZW1jbXAsIHdoaWNoIGNhbiBiZSBjYWxsZWQgZnJvbSBCUEYgcHJvZ3JhbXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGFkZGl0aW9ucyB0byB0aGUgY29yZSBCUEYgaGVscGVyIGxpYnJhcnkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE1OjMzOjU3LjYxNDU5NDc3NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgwOTcxMTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzhmYWQ1NDQ1N2M0MDI0NDQ5NmU4Y2UwMGJjNDFjYjc3YTZjNTFmYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1biAyNiAxNTozMzo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXFxuaW5kZXggYjUzMTRjOWZlZDNjZjAuLmVhZDAwZWMzMTRmNTRhIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXFxuKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcXG5AQCAtMzk3MSw2ICszOTcxLDkyIEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RyY3Nwbihjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKnJlamVjdF9faWduKVxcbiBcXHRyZXR1cm4gLUVGQVVMVDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGJwZl9zdHJwYnJrIC0gRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHNldCBvZiBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nXFxuKyAqIEBzX19pZ246IFRoZSBzdHJpbmcgdG8gYmUgc2VhcmNoZWRcXG4rICogQGFjY2VwdF9faWduOiBUaGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlcnMgdG8gc2VhcmNoIGZvclxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogXFx1MDAzZT0wICAgICAgLSBJbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIEBzX19pZ24gdGhhdCBtYXRjaGVzIGFueVxcbisgKiAgICAgICAgICAgICAgY2hhcmFjdGVyIGluIEBhY2NlcHRfX2lnblxcbisgKiAqICUtRU5PRU5UIC0gTm8gY2hhcmFjdGVyIG9mIEBhY2NlcHRfX2lnbiBmb3VuZCBpbiBAc19faWduXFxuKyAqICogJS1FRkFVTFQgLSBDYW5ub3QgcmVhZCBvbmUgb2YgdGhlIHN0cmluZ3NcXG4rICogKiAlLUUyQklHICAtIE9uZSBvZiB0aGUgc3RyaW5ncyBpcyB0b28gbGFyZ2VcXG4rICogKiAlLUVSQU5HRSAtIE9uZSBvZiB0aGUgc3RyaW5ncyBpcyBvdXRzaWRlIG9mIGtlcm5lbCBhZGRyZXNzIHNwYWNlXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbilcXG4re1xcbitcXHRjaGFyIGNzLCBjYTtcXG4rXFx0aW50IGksIGo7XFxuK1xcbitcXHRpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHNfX2lnbiwgMSkgfHxcXG4rXFx0ICAgICFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChhY2NlcHRfX2lnbiwgMSkpIHtcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBpKyspIHtcXG4rXFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHQoXFx1MDAyNmNzLCBzX19pZ24sIGNoYXIsIGVycl9vdXQpO1xcbitcXHRcXHRpZiAoY3MgPT0gJ1xcXFwwJylcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBYQVRUUl9TSVpFX01BWDsgaisrKSB7XFxuK1xcdFxcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFxcdTAwMjZjYSwgYWNjZXB0X19pZ24gKyBqLCBjaGFyLCBlcnJfb3V0KTtcXG4rXFx0XFx0XFx0aWYgKGNhID09ICdcXFxcMCcpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRpZiAoY3MgPT0gY2EpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChqID09IFhBVFRSX1NJWkVfTUFYKVxcbitcXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbitcXHRcXHRzX19pZ24rKztcXG4rXFx0fVxcbitcXHRyZXR1cm4gLUUyQklHO1xcbitlcnJfb3V0OlxcbitcXHRyZXR1cm4gLUVGQVVMVDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGJwZl9tZW1jbXAgLSBDb21wYXJlIHR3byBtZW1vcnkgcmVnaW9ucyBieXRlIGJ5IGJ5dGVcXG4rICogQHB0cjFfX2lnbjogRmlyc3QgbWVtb3J5IHJlZ2lvblxcbisgKiBAcHRyMl9faWduOiBTZWNvbmQgbWVtb3J5IHJlZ2lvblxcbisgKiBAc2l6ZTogTnVtYmVyIG9mIGJ5dGVzIHRvIGNvbXBhcmVcXG4rICpcXG4rICogQ29tcGFyZXMgdGhlIGZpcnN0IEBzaXplIGJ5dGVzIG9mIHRoZSBtZW1vcnkgYXJlYXMgQHB0cjFfX2lnbiBhbmRcXG4rICogQHB0cjJfX2lnbi4gVW5saWtlIGJwZl9zdHJjbXAsIG51bGwgYnl0ZXMgZG8gbm90IHRlcm1pbmF0ZSB0aGUgY29tcGFyaXNvbi5cXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqICUwICAgICAgIC0gVGhlIG1lbW9yeSByZWdpb25zIGFyZSBlcXVhbFxcbisgKiAqICUtMSAgICAgIC0gQHB0cjFfX2lnbiBpcyBsZXNzIHRoYW4gQHB0cjJfX2lnblxcbisgKiAqICUxICAgICAgIC0gQHB0cjFfX2lnbiBpcyBncmVhdGVyIHRoYW4gQHB0cjJfX2lnblxcbisgKiAqICUtRUZBVUxUIC0gQ2Fubm90IHJlYWQgb25lIG9mIHRoZSBtZW1vcnkgcmVnaW9uc1xcbisgKiAqICUtRTJCSUcgIC0gQHNpemUgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIHNpemVcXG4rICogKiAlLUVSQU5HRSAtIE9uZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbnMgaXMgb3V0c2lkZSBvZiBrZXJuZWwgYWRkcmVzcyBzcGFjZVxcbisgKi9cXG4rX19icGZfa2Z1bmMgaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sXFxuK1xcdFxcdFxcdCAgIHNpemVfdCBzaXplKVxcbit7XFxuK1xcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAxID0gcHRyMV9faWduLCAqcDIgPSBwdHIyX19pZ247XFxuK1xcdHVuc2lnbmVkIGNoYXIgYzEsIGMyO1xcbitcXHRzaXplX3QgaTtcXG4rXFxuK1xcdGlmIChzaXplIFxcdTAwM2UgWEFUVFJfU0laRV9NQVgpXFxuK1xcdFxcdHJldHVybiAtRTJCSUc7XFxuK1xcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQocDEsIHNpemUpIHx8XFxuK1xcdCAgICAhY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQocDIsIHNpemUpKVxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFxuK1xcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNpemU7IGkrKykge1xcbitcXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdChcXHUwMDI2YzEsIHAxICsgaSwgY2hhciwgZXJyX291dCk7XFxuK1xcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFxcdTAwMjZjMiwgcDIgKyBpLCBjaGFyLCBlcnJfb3V0KTtcXG4rXFx0XFx0aWYgKGMxICE9IGMyKVxcbitcXHRcXHRcXHRyZXR1cm4gYzEgXFx1MDAzYyBjMiA/IC0xIDogMTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rZXJyX291dDpcXG4rXFx0cmV0dXJuIC1FRkFVTFQ7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19icGZfc3RybnN0cihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBsZW4sXFxuIFxcdFxcdFxcdCBib29sIGlnbm9yZV9jYXNlKVxcbiB7XFxuQEAgLTQ4NTAsNiArNDkzNiw4IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RybGVuKTtcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJubGVuKTtcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJzcG4pO1xcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNzcG4pO1xcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cnBicmspO1xcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX21lbWNtcCk7XFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3Ryc3RyKTtcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjYXNlc3RyKTtcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJuc3RyKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyaW5nX2tmdW5jcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyaW5nX2tmdW5jcy5jXFxuaW5kZXggMzAwMDMyYTE5NDQ1MTQuLjk1OWZmMzcxMTBhMTYzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmluZ19rZnVuY3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmluZ19rZnVuY3MuY1xcbkBAIC0yMCw2ICsyMCw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGVzdF9jYXNlc1tdID0ge1xcbiBcXHRcXFwic3Ryc3BuX2FjY2VwdFxcXCIsXFxuIFxcdFxcXCJzdHJjc3BuX3N0clxcXCIsXFxuIFxcdFxcXCJzdHJjc3BuX3JlamVjdFxcXCIsXFxuK1xcdFxcdFxcXCJzdHJwYnJrX3N0clxcXCIsXFxuK1xcdFxcdFxcXCJzdHJwYnJrX2FjY2VwdFxcXCIsXFxuIFxcdFxcXCJzdHJzdHJcXFwiLFxcbiBcXHRcXFwic3RyY2FzZXN0clxcXCIsXFxuIFxcdFxcXCJzdHJuc3RyXFxcIixcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9zdWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuY1xcbmluZGV4IGUwZDY3MmQ5M2FkZjg1Li4wNzE1ODFmZjA4MzNmMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jXFxuQEAgLTYyNCw3ICs2MjQsNyBAQCBpbnQgQlBGX1BST0codGVzdF9keW5wdHJfc2tiX3RwX2J0Ziwgdm9pZCAqc2tiLCB2b2lkICpsb2NhdGlvbilcXG4gXFx0cmV0dXJuIDE7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IGJwZl9tZW1jbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgdTMyIHNpemUpXFxuK3N0YXRpYyBpbmxpbmUgaW50IGxvY2FsX21lbWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCB1MzIgc2l6ZSlcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuQEAgLTY1MCwxMiArNjUwLDEyIEBAIGludCB0ZXN0X2R5bnB0cl9jb3B5KHZvaWQgKmN0eClcXG4gXFx0ZXJyID0gYnBmX2R5bnB0cl93cml0ZShcXHUwMDI2c3JjLCAwLCBkYXRhLCBzeiwgMCk7XFxuIFxcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX2NvcHkoXFx1MDAyNmRzdCwgMCwgXFx1MDAyNnNyYywgMCwgc3opO1xcbiBcXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKGJ1Ziwgc3osIFxcdTAwMjZkc3QsIDAsIDApO1xcbi1cXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChkYXRhLCBidWYsIHN6KTtcXG4rXFx0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChkYXRhLCBidWYsIHN6KTtcXG4gXFxuIFxcdC8qIFRlc3QgdGhhdCBvZmZzZXRzIGFyZSBoYW5kbGVkIGNvcnJlY3RseSAqL1xcbiBcXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9jb3B5KFxcdTAwMjZkc3QsIDMsIFxcdTAwMjZzcmMsIDUsIHN6IC0gNSk7XFxuIFxcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoYnVmLCBzeiAtIDUsIFxcdTAwMjZkc3QsIDMsIDApO1xcbi1cXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChkYXRhICsgNSwgYnVmLCBzeiAtIDUpO1xcbitcXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGRhdGEgKyA1LCBidWYsIHN6IC0gNSk7XFxuIFxcbiBcXHRicGZfcmluZ2J1Zl9kaXNjYXJkX2R5bnB0cihcXHUwMDI2c3JjLCAwKTtcXG4gXFx0YnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoXFx1MDAyNmRzdCwgMCk7XFxuQEAgLTY5Miw3ICs2OTIsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKVxcbiBcXHRcXHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXFx1MDAyNmJ1ZiwgbGVuLCBcXHUwMDI2cHRyX3hkcCwgaSAqIGxlbiwgMCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRpZiAoYnBmX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcXG4rXFx0XFx0aWYgKGxvY2FsX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuQEAgLTcxMyw3ICs3MTMsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKVxcbiBcXHRcXHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXFx1MDAyNmJ1ZiwgbGVuLCBcXHUwMDI2cHRyX2J1ZiwgaSAqIGxlbiwgMCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRpZiAoYnBmX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcXG4rXFx0XFx0aWYgKGxvY2FsX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuQEAgLTcyNyw3ICs3MjcsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKVxcbiBcXHRcXHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXFx1MDAyNmJ1ZiwgbGVuLCBcXHUwMDI2cHRyX3hkcCwgMiArIGkgKiBsZW4sIDApO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0aWYgKGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXFxuK1xcdFxcdGlmIChsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbkBAIC03NTAsNyArNzUwLDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF96ZXJvKHZvaWQgKmN0eClcXG4gXFxuIFxcdGVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X3plcm9fZGF0YSwgZGF0YV9zeiwgMCwgXFx1MDAyNnB0cik7XFxuIFxcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX21lbXNldChcXHUwMDI2cHRyLCAwLCBkYXRhX3N6LCAwKTtcXG4tXFx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoemVyb2VzLCBtZW1zZXRfemVyb19kYXRhLCBkYXRhX3N6KTtcXG4rXFx0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcCh6ZXJvZXMsIG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3opO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNzcwLDcgKzc3MCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfbm90emVybyh2b2lkICpjdHgpXFxuIFxcbiBcXHRlcnIgPSBicGZfZHlucHRyX2Zyb21fbWVtKG1lbXNldF9ub3R6ZXJvX2RhdGEsIGRhdGFfc3osIDAsIFxcdTAwMjZwdHIpO1xcbiBcXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoXFx1MDAyNnB0ciwgMCwgZGF0YV9zeiwgRFlOUFRSX01FTVNFVF9WQUwpO1xcbi1cXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X25vdHplcm9fZGF0YSwgZGF0YV9zeik7XFxuK1xcdGVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF9ub3R6ZXJvX2RhdGEsIGRhdGFfc3opO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNzg2LDcgKzc4Niw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfemVyb19vZmZzZXQodm9pZCAqY3R4KVxcbiBcXG4gXFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfemVyb19vZmZzZXRfZGF0YSwgZGF0YV9zeiwgMCwgXFx1MDAyNnB0cik7XFxuIFxcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX21lbXNldChcXHUwMDI2cHRyLCA4LCA0LCAwKTtcXG4tXFx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX29mZnNldF9kYXRhLCBkYXRhX3N6KTtcXG4rXFx0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fb2Zmc2V0X2RhdGEsIGRhdGFfc3opO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtODAzLDcgKzgwMyw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfemVyb19hZGp1c3RlZCh2b2lkICpjdHgpXFxuIFxcdGVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeiwgMCwgXFx1MDAyNnB0cik7XFxuIFxcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX2FkanVzdChcXHUwMDI2cHRyLCA0LCA4KTtcXG4gXFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KFxcdTAwMjZwdHIsIDAsIGJwZl9keW5wdHJfc2l6ZShcXHUwMDI2cHRyKSwgMCk7XFxuLVxcdGVyciA9IGVyciA/OiBicGZfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfemVyb19hZGp1c3RlZF9kYXRhLCBkYXRhX3N6KTtcXG4rXFx0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC04OTgsNyArODk4LDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF94ZHBfY2h1bmtzKHN0cnVjdCB4ZHBfbWQgKnhkcClcXG4gXFx0XFx0ZXJyID0gYnBmX2R5bnB0cl9yZWFkKFxcdTAwMjZidWYsIGNodW5rX3N6LCBcXHUwMDI2cHRyX3hkcCwgb2Zmc2V0LCAwKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdGVyciA9IGJwZl9tZW1jbXAoYnVmLCBleHBlY3RlZF9idWYsIHNpemVvZihidWYpKTtcXG4rXFx0XFx0ZXJyID0gbG9jYWxfbWVtY21wKGJ1ZiwgZXhwZWN0ZWRfYnVmLCBzaXplb2YoYnVmKSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuQEAgLTk1Miw3ICs5NTIsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmUodm9pZCAqcHRyLCBicGZfcmVhZF9keW5wdHJfZm5fdCBicFxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChcXHUwMDI2YnVmLCBsZW4sIFxcdTAwMjZwdHJfYnVmLCAwLCAwKTtcXG4gXFxuLVxcdFxcdGlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSlcXG4rXFx0XFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbikpXFxuIFxcdFxcdFxcdGVyciA9IDE7XFxuIFxcbiBcXHRcXHQvKiBSZXNldCBidWZmZXIgYW5kIGR5bnB0ciAqL1xcbkBAIC05ODYsNyArOTg2LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3RfZHlucHRyX3Byb2JlX3N0cih2b2lkICpwdHIsXFxuIFxcdFxcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoXFx1MDAyNmJ1ZiwgbGVuLCBcXHUwMDI2cHRyX2J1ZiwgMCwgMCk7XFxuIFxcdFxcdGlmICghbGVuKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aWYgKGVyciB8fCBicGZfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4gLSAxKSB8fCBidWZbbGVuIC0gMV0gIT0gJ1xcXFwwJylcXG4rXFx0XFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAnXFxcXDAnKVxcbiBcXHRcXHRcXHRlcnIgPSAxO1xcbiBcXHR9XFxuIFxcdGJwZl9yaW5nYnVmX2Rpc2NhcmRfZHlucHRyKFxcdTAwMjZwdHJfYnVmLCAwKTtcXG5AQCAtMTAxMiw3ICsxMDEyLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3RfZHlucHRyX3Byb2JlX3hkcChzdHJ1Y3QgeGRwX21kICp4ZHAsIHZvaWQgKnB0cixcXG4gXFx0XFx0aWYgKGxlbiBcXHUwMDNlIHNpemVvZihidWYpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChcXHUwMDI2YnVmLCBsZW4sIFxcdTAwMjZwdHJfeGRwLCBvZmYsIDApO1xcbi1cXHRcXHRpZiAoZXJyIHx8IGJwZl9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbikpXFxuK1xcdFxcdGlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKVxcbiBcXHRcXHRcXHRlcnIgPSAxO1xcbiBcXHRcXHQvKiBSZXNldCBidWZmZXIgYW5kIGR5bnB0ciAqL1xcbiBcXHRcXHRfX2J1aWx0aW5fbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpO1xcbkBAIC0xMDQ4LDcgKzEwNDgsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfc3RyX3hkcChzdHJ1Y3QgeGRwX21kICp4ZHAsIHZvaWQgKlxcbiBcXG4gXFx0XFx0aWYgKCFsZW4pXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRpZiAoZXJyIHx8IGJwZl9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAnXFxcXDAnKVxcbitcXHRcXHRpZiAoZXJyIHx8IGxvY2FsX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICdcXFxcMCcpXFxuIFxcdFxcdFxcdGVyciA9IDE7XFxuIFxcbiBcXHRcXHRfX2J1aWx0aW5fbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuY1xcbmluZGV4IGJkZGM0ZTg1NzlkMjQ0Li5lNjdmZTk3MDBlNTkzYyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuY1xcbkBAIC05LDYgKzksMTAgQEBcXG4gY2hhciAqdXNlcl9wdHIgPSAoY2hhciAqKTE7XFxuIGNoYXIgKmludmFsaWRfa2Vybl9wdHIgPSAoY2hhciAqKS0xO1xcbiBcXG4rZXh0ZXJuIGludCBicGZfc3RycGJyayhjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKSBfX2tzeW07XFxuK2V4dGVybiBpbnQgYnBmX21lbWNtcChjb25zdCB2b2lkICpwdHIxX19pZ24sIGNvbnN0IHZvaWQgKnB0cjJfX2lnbixcXG4rXFx0XFx0ICAgICAgc2l6ZV90IHNpemUpIF9fa3N5bTtcXG4rXFxuIC8qXFxuICAqIFdoZW4gcGFzc2luZyB1c2Vyc3BhY2UgcG9pbnRlcnMsIHRoZSBlcnJvciBjb2RlIGRpZmZlcnMgYmFzZWQgb24gYXJjaDpcXG4gICogICAtRVJBTkdFIG9uIGFyY2hlcyB3aXRoIG5vbi1vdmVybGFwcGluZyBhZGRyZXNzIHNwYWNlc1xcbkBAIC01Myw2ICs1NywxMCBAQCBTRUMoXFxcInN5c2NhbGxcXFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5zdHJfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVyblxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5zdHJfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybnN0cihcXFwiaGVsbG9cXFwiLCBOVUxMLCAxKTsgfVxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5jYXNlc3RyX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKE5VTEwsIFxcXCJoZWxsb1xcXCIsIDEpOyB9XFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybmNhc2VzdHJfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoXFxcImhlbGxvXFxcIiwgTlVMTCwgMSk7IH1cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKE5VTEwsIFxcXCJ4XFxcIiwgMSk7IH1cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKFxcXCJ4XFxcIiwgTlVMTCwgMSk7IH1cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJwYnJrX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoTlVMTCwgXFxcInhcXFwiKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cnBicmtfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcXFwieFxcXCIsIE5VTEwpOyB9XFxuIFxcbiAvKiBQYXNzaW5nIHVzZXJzcGFjZSBwdHIgdG8gc3RyaW5nIGtmdW5jcyAqL1xcbiBTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cmNtcF91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY21wKHVzZXJfcHRyLCBcXFwiaGVsbG9cXFwiKTsgfVxcbkBAIC03OSw2ICs4NywxMCBAQCBTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cm5zdHJfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZVxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cm5zdHJfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5zdHIoXFxcImhlbGxvXFxcIiwgdXNlcl9wdHIsIDEpOyB9XFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKHVzZXJfcHRyLCBcXFwiaGVsbG9cXFwiLCAxKTsgfVxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihcXFwiaGVsbG9cXFwiLCB1c2VyX3B0ciwgMSk7IH1cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9tZW1jbXBfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcCh1c2VyX3B0ciwgXFxcInhcXFwiLCAxKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X21lbWNtcF91c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKFxcXCJ4XFxcIiwgdXNlcl9wdHIsIDEpOyB9XFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RycGJya191c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayh1c2VyX3B0ciwgXFxcInhcXFwiKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cnBicmtfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXFxcInhcXFwiLCB1c2VyX3B0cik7IH1cXG4gXFxuICNlbmRpZiAvKiBfX1RBUkdFVF9BUkNIX3MzOTAgKi9cXG4gXFxuQEAgLTEwNyw1ICsxMTksOSBAQCBTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJuc3RyX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVyblxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJuc3RyX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybnN0cihcXFwiaGVsbG9cXFwiLCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfVxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKGludmFsaWRfa2Vybl9wdHIsIFxcXCJoZWxsb1xcXCIsIDEpOyB9XFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoXFxcImhlbGxvXFxcIiwgaW52YWxpZF9rZXJuX3B0ciwgMSk7IH1cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3RfbWVtY21wX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGludmFsaWRfa2Vybl9wdHIsIFxcXCJ4XFxcIiwgMSk7IH1cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3RfbWVtY21wX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKFxcXCJ4XFxcIiwgaW52YWxpZF9rZXJuX3B0ciwgMSk7IH1cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RycGJya19wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoaW52YWxpZF9rZXJuX3B0ciwgXFxcInhcXFwiKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJwYnJrX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcXFwieFxcXCIsIGludmFsaWRfa2Vybl9wdHIpOyB9XFxuIFxcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmNcXG5pbmRleCA0MTJjNTNiODdiMTgyYi4uZDNiOTc4ZTQ1M2JkN2MgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmNcXG5AQCAtMTksNiArMTksOCBAQCBTRUMoXFxcInN5c2NhbGxcXFwiKSBpbnQgdGVzdF9zdHJzcG5fc3RyX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnNwbihsb25nX1xcbiBTRUMoXFxcInN5c2NhbGxcXFwiKSBpbnQgdGVzdF9zdHJzcG5fYWNjZXB0X3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnNwbihcXFwiYlxcXCIsIGxvbmdfc3RyKTsgfVxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKSBpbnQgdGVzdF9zdHJjc3BuX3N0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjc3BuKGxvbmdfc3RyLCBcXFwiYlxcXCIpOyB9XFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIGludCB0ZXN0X3N0cmNzcG5fcmVqZWN0X3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNzcG4oXFxcImJcXFwiLCBsb25nX3N0cik7IH1cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIikgaW50IHRlc3Rfc3RycGJya19zdHJfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhsb25nX3N0ciwgXFxcInpcXFwiKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBpbnQgdGVzdF9zdHJwYnJrX2FjY2VwdF90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKFxcXCJiXFxcIiwgbG9uZ19zdHIpOyB9XFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIGludCB0ZXN0X3N0cnN0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJzdHIobG9uZ19zdHIsIFxcXCJoZWxsb1xcXCIpOyB9XFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIGludCB0ZXN0X3N0cmNhc2VzdHJfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY2FzZXN0cihsb25nX3N0ciwgXFxcImhlbGxvXFxcIik7IH1cXG4gU0VDKFxcXCJzeXNjYWxsXFxcIikgaW50IHRlc3Rfc3RybnN0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKGxvbmdfc3RyLCBcXFwiaGVsbG9cXFwiLCBzaXplb2YobG9uZ19zdHIpKTsgfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmNcXG5pbmRleCBmNjViMTIyNmE4MWEzNy4uMjViOGM4OTdkYTU0YmMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jXFxuQEAgLTcsNiArNywxMCBAQFxcbiBcXG4gY2hhciBzdHJbXSA9IFxcXCJoZWxsbyB3b3JsZFxcXCI7XFxuIFxcbitleHRlcm4gaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pIF9fa3N5bTtcXG4rZXh0ZXJuIGludCBicGZfbWVtY21wKGNvbnN0IHZvaWQgKnB0cjFfX2lnbiwgY29uc3Qgdm9pZCAqcHRyMl9faWduLFxcbitcXHRcXHQgICAgICBzaXplX3Qgc2l6ZSkgX19rc3ltO1xcbitcXG4gI2RlZmluZSBfX3Rlc3QocmV0dmFsKSBTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3N1Y2Nlc3MgX19yZXR2YWwocmV0dmFsKVxcbiBcXG4gLyogRnVuY3Rpb25hbCB0ZXN0cyAqL1xcbkBAIC02MCw0ICs2NCwyNSBAQCBfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfbm90Zm91bmQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc1xcbiBfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfbm90Zm91bmQzKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFxcXCJcXFwiLCBcXFwiYVxcXCIsIDApOyB9XFxuIF9fdGVzdCgwKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9lbXB0eSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihzdHIsIFxcXCJcXFwiLCAxKTsgfVxcbiBcXG4rLyogYnBmX3N0cnBicmsgLSBmdW5jdGlvbmFsIHRlc3RzICovXFxuK19fdGVzdCgwKSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX2ZpcnN0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcXFwiaFxcXCIpOyB9XFxuK19fdGVzdCg0KSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX21pZGRsZSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXFxcIm93XFxcIik7IH1cXG4rX190ZXN0KDIpIGludCB0ZXN0X3N0cnBicmtfZm91bmRfbXVsdGlwbGUodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFxcXCJsXFxcIik7IH1cXG4rX190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfbm90Zm91bmQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFxcXCJ4eXpcXFwiKTsgfVxcbitfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RycGJya19lbXB0eV9hY2NlcHQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFxcXCJcXFwiKTsgfVxcbitcXG4rLyogYnBmX21lbWNtcCAtIGZ1bmN0aW9uYWwgdGVzdHMgKi9cXG4rY2hhciBkYXRhMVtdID0gXFxcImhlbGxvIHdvcmxkXFxcIjtcXG4rY2hhciBkYXRhMltdID0gXFxcImhlbGxvIHdvcmxkXFxcIjtcXG4rY2hhciBkYXRhM1tdID0gXFxcImhlbGxvIHdvcmxlXFxcIjtcXG4rX190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTEsIGRhdGEyLCBzaXplb2YoZGF0YTEpKTsgfVxcbitfX3Rlc3QoLTEpIGludCB0ZXN0X21lbWNtcF9uZXFfbGVzcyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTEsIGRhdGEzLCBzaXplb2YoZGF0YTEpKTsgfVxcbitfX3Rlc3QoMSkgaW50IHRlc3RfbWVtY21wX25lcV9ncmVhdGVyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMywgZGF0YTEsIHNpemVvZihkYXRhMSkpOyB9XFxuK19fdGVzdCgwKSBpbnQgdGVzdF9tZW1jbXBfc2l6ZV96ZXJvKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTMsIDApOyB9XFxuKy8qIG1lbWNtcCBzaG91bGQgTk9UIHN0b3AgYXQgbnVsbCBieXRlIC0gY29tcGFyZSBwYXN0ICdcXFxcMCcgKi9cXG4rY2hhciBiaW4xW10gPSB7ICdhJywgJ1xcXFwwJywgJ2MnIH07XFxuK2NoYXIgYmluMltdID0geyAnYScsICdcXFxcMCcsICdkJyB9O1xcbitfX3Rlc3QoMCkgaW50IHRlc3RfbWVtY21wX251bGxfYnl0ZV9lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoYmluMSwgYmluMSwgc2l6ZW9mKGJpbjEpKTsgfVxcbitfX3Rlc3QoLTEpIGludCB0ZXN0X21lbWNtcF9udWxsX2J5dGVfbmVxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChiaW4xLCBiaW4yLCBzaXplb2YoYmluMSkpOyB9XFxuK1xcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTU6MzM6NTguMTk2MjgwMDA1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzQ1MTYyNTEzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zdHJwYnJrXCIsXG4gICAgXCJicGZfbWVtY21wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB0d28gbmV3IEJQRiBrZnVuY3MsIGJwZl9zdHJwYnJrIGFuZCBicGZfbWVtY21wLCB3aGljaCBjYW4gYmUgY2FsbGVkIGZyb20gQlBGIHByb2dyYW1zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBhZGRpdGlvbnMgdG8gdGhlIGNvcmUgQlBGIGhlbHBlciBsaWJyYXJ5IGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc4ZmFkNTQ0NTdjNDAyNDQ0OTZlOGNlMDBiYzQxY2I3N2E2YzUxZmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAxNTozMzo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcbmluZGV4IGI1MzE0YzlmZWQzY2YwLi5lYWQwMGVjMzE0ZjU0YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXG4rKysgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuQEAgLTM5NzEsNiArMzk3MSw5MiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICpyZWplY3RfX2lnbilcbiBcdHJldHVybiAtRUZBVUxUO1xuIH1cbiBcbisvKipcbisgKiBicGZfc3RycGJyayAtIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzZXQgb2YgY2hhcmFjdGVycyBpbiBhIHN0cmluZ1xuKyAqIEBzX19pZ246IFRoZSBzdHJpbmcgdG8gYmUgc2VhcmNoZWRcbisgKiBAYWNjZXB0X19pZ246IFRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2hhcmFjdGVycyB0byBzZWFyY2ggZm9yXG4rICpcbisgKiBSZXR1cm46XG4rICogKiBcdTAwM2U9MCAgICAgIC0gSW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBAc19faWduIHRoYXQgbWF0Y2hlcyBhbnlcbisgKiAgICAgICAgICAgICAgY2hhcmFjdGVyIGluIEBhY2NlcHRfX2lnblxuKyAqICogJS1FTk9FTlQgLSBObyBjaGFyYWN0ZXIgb2YgQGFjY2VwdF9faWduIGZvdW5kIGluIEBzX19pZ25cbisgKiAqICUtRUZBVUxUIC0gQ2Fubm90IHJlYWQgb25lIG9mIHRoZSBzdHJpbmdzXG4rICogKiAlLUUyQklHICAtIE9uZSBvZiB0aGUgc3RyaW5ncyBpcyB0b28gbGFyZ2VcbisgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBzdHJpbmdzIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2VcbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbilcbit7XG4rXHRjaGFyIGNzLCBjYTtcbitcdGludCBpLCBqO1xuK1xuK1x0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzX19pZ24sIDEpIHx8XG4rXHQgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKGFjY2VwdF9faWduLCAxKSkge1xuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBpKyspIHtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4rXHRcdGlmIChjcyA9PSAnXFwwJylcbitcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGorKykge1xuK1x0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmNhLCBhY2NlcHRfX2lnbiArIGosIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRcdGlmIChjYSA9PSAnXFwwJylcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGlmIChjcyA9PSBjYSlcbitcdFx0XHRcdHJldHVybiBpO1xuK1x0XHR9XG4rXHRcdGlmIChqID09IFhBVFRSX1NJWkVfTUFYKVxuK1x0XHRcdHJldHVybiAtRTJCSUc7XG4rXHRcdHNfX2lnbisrO1xuK1x0fVxuK1x0cmV0dXJuIC1FMkJJRztcbitlcnJfb3V0OlxuK1x0cmV0dXJuIC1FRkFVTFQ7XG4rfVxuK1xuKy8qKlxuKyAqIGJwZl9tZW1jbXAgLSBDb21wYXJlIHR3byBtZW1vcnkgcmVnaW9ucyBieXRlIGJ5IGJ5dGVcbisgKiBAcHRyMV9faWduOiBGaXJzdCBtZW1vcnkgcmVnaW9uXG4rICogQHB0cjJfX2lnbjogU2Vjb25kIG1lbW9yeSByZWdpb25cbisgKiBAc2l6ZTogTnVtYmVyIG9mIGJ5dGVzIHRvIGNvbXBhcmVcbisgKlxuKyAqIENvbXBhcmVzIHRoZSBmaXJzdCBAc2l6ZSBieXRlcyBvZiB0aGUgbWVtb3J5IGFyZWFzIEBwdHIxX19pZ24gYW5kXG4rICogQHB0cjJfX2lnbi4gVW5saWtlIGJwZl9zdHJjbXAsIG51bGwgYnl0ZXMgZG8gbm90IHRlcm1pbmF0ZSB0aGUgY29tcGFyaXNvbi5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqICUwICAgICAgIC0gVGhlIG1lbW9yeSByZWdpb25zIGFyZSBlcXVhbFxuKyAqICogJS0xICAgICAgLSBAcHRyMV9faWduIGlzIGxlc3MgdGhhbiBAcHRyMl9faWduXG4rICogKiAlMSAgICAgICAtIEBwdHIxX19pZ24gaXMgZ3JlYXRlciB0aGFuIEBwdHIyX19pZ25cbisgKiAqICUtRUZBVUxUIC0gQ2Fubm90IHJlYWQgb25lIG9mIHRoZSBtZW1vcnkgcmVnaW9uc1xuKyAqICogJS1FMkJJRyAgLSBAc2l6ZSBleGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgc2l6ZVxuKyAqICogJS1FUkFOR0UgLSBPbmUgb2YgdGhlIG1lbW9yeSByZWdpb25zIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2VcbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX21lbWNtcChjb25zdCB2b2lkICpwdHIxX19pZ24sIGNvbnN0IHZvaWQgKnB0cjJfX2lnbixcbitcdFx0XHQgICBzaXplX3Qgc2l6ZSlcbit7XG4rXHRjb25zdCB1bnNpZ25lZCBjaGFyICpwMSA9IHB0cjFfX2lnbiwgKnAyID0gcHRyMl9faWduO1xuK1x0dW5zaWduZWQgY2hhciBjMSwgYzI7XG4rXHRzaXplX3QgaTtcbitcbitcdGlmIChzaXplIFx1MDAzZSBYQVRUUl9TSVpFX01BWClcbitcdFx0cmV0dXJuIC1FMkJJRztcbitcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQocDEsIHNpemUpIHx8XG4rXHQgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHAyLCBzaXplKSlcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRndWFyZChwYWdlZmF1bHQpKCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaXplOyBpKyspIHtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2YzEsIHAxICsgaSwgY2hhciwgZXJyX291dCk7XG4rXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMyLCBwMiArIGksIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRpZiAoYzEgIT0gYzIpXG4rXHRcdFx0cmV0dXJuIGMxIFx1MDAzYyBjMiA/IC0xIDogMTtcbitcdH1cbitcdHJldHVybiAwO1xuK2Vycl9vdXQ6XG4rXHRyZXR1cm4gLUVGQVVMVDtcbit9XG4rXG4gc3RhdGljIGludCBfX2JwZl9zdHJuc3RyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IGxlbixcbiBcdFx0XHQgYm9vbCBpZ25vcmVfY2FzZSlcbiB7XG5AQCAtNDg1MCw2ICs0OTM2LDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJsZW4pO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3Rybmxlbik7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJzcG4pO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY3Nwbik7XG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJwYnJrKTtcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX21lbWNtcCk7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJzdHIpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY2FzZXN0cik7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJuc3RyKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJpbmdfa2Z1bmNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJpbmdfa2Z1bmNzLmNcbmluZGV4IDMwMDAzMmExOTQ0NTE0Li45NTlmZjM3MTEwYTE2MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmluZ19rZnVuY3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyaW5nX2tmdW5jcy5jXG5AQCAtMjAsNiArMjAsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRlc3RfY2FzZXNbXSA9IHtcbiBcdFwic3Ryc3BuX2FjY2VwdFwiLFxuIFx0XCJzdHJjc3BuX3N0clwiLFxuIFx0XCJzdHJjc3BuX3JlamVjdFwiLFxuK1x0XHRcInN0cnBicmtfc3RyXCIsXG4rXHRcdFwic3RycGJya19hY2NlcHRcIixcbiBcdFwic3Ryc3RyXCIsXG4gXHRcInN0cmNhc2VzdHJcIixcbiBcdFwic3RybnN0clwiLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9zdWNjZXNzLmNcbmluZGV4IGUwZDY3MmQ5M2FkZjg1Li4wNzE1ODFmZjA4MzNmMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuY1xuQEAgLTYyNCw3ICs2MjQsNyBAQCBpbnQgQlBGX1BST0codGVzdF9keW5wdHJfc2tiX3RwX2J0Ziwgdm9pZCAqc2tiLCB2b2lkICpsb2NhdGlvbilcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBicGZfbWVtY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIsIHUzMiBzaXplKVxuK3N0YXRpYyBpbmxpbmUgaW50IGxvY2FsX21lbWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCB1MzIgc2l6ZSlcbiB7XG4gXHRpbnQgaTtcbiBcbkBAIC02NTAsMTIgKzY1MCwxMiBAQCBpbnQgdGVzdF9keW5wdHJfY29weSh2b2lkICpjdHgpXG4gXHRlcnIgPSBicGZfZHlucHRyX3dyaXRlKFx1MDAyNnNyYywgMCwgZGF0YSwgc3osIDApO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfY29weShcdTAwMjZkc3QsIDAsIFx1MDAyNnNyYywgMCwgc3opO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChidWYsIHN6LCBcdTAwMjZkc3QsIDAsIDApO1xuLVx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBzeik7XG4rXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGRhdGEsIGJ1Ziwgc3opO1xuIFxuIFx0LyogVGVzdCB0aGF0IG9mZnNldHMgYXJlIGhhbmRsZWQgY29ycmVjdGx5ICovXG4gXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9jb3B5KFx1MDAyNmRzdCwgMywgXHUwMDI2c3JjLCA1LCBzeiAtIDUpO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChidWYsIHN6IC0gNSwgXHUwMDI2ZHN0LCAzLCAwKTtcbi1cdGVyciA9IGVyciA/OiBicGZfbWVtY21wKGRhdGEgKyA1LCBidWYsIHN6IC0gNSk7XG4rXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGRhdGEgKyA1LCBidWYsIHN6IC0gNSk7XG4gXG4gXHRicGZfcmluZ2J1Zl9kaXNjYXJkX2R5bnB0cihcdTAwMjZzcmMsIDApO1xuIFx0YnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoXHUwMDI2ZHN0LCAwKTtcbkBAIC02OTIsNyArNjkyLDcgQEAgaW50IHRlc3RfZHlucHRyX2NvcHlfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdFx0ZXJyID0gYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgbGVuLCBcdTAwMjZwdHJfeGRwLCBpICogbGVuLCAwKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dDtcbi1cdFx0aWYgKGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXG4rXHRcdGlmIChsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5AQCAtNzEzLDcgKzcxMyw3IEBAIGludCB0ZXN0X2R5bnB0cl9jb3B5X3hkcChzdHJ1Y3QgeGRwX21kICp4ZHApXG4gXHRcdGVyciA9IGJwZl9keW5wdHJfcmVhZChcdTAwMjZidWYsIGxlbiwgXHUwMDI2cHRyX2J1ZiwgaSAqIGxlbiwgMCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdGlmIChicGZfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxuK1x0XHRpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTcyNyw3ICs3MjcsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKVxuIFx0XHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXHUwMDI2YnVmLCBsZW4sIFx1MDAyNnB0cl94ZHAsIDIgKyBpICogbGVuLCAwKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dDtcbi1cdFx0aWYgKGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXG4rXHRcdGlmIChsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5AQCAtNzUwLDcgKzc1MCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfemVybyh2b2lkICpjdHgpXG4gXG4gXHRlcnIgPSBicGZfZHlucHRyX2Zyb21fbWVtKG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3osIDAsIFx1MDAyNnB0cik7XG4gXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoXHUwMDI2cHRyLCAwLCBkYXRhX3N6LCAwKTtcbi1cdGVyciA9IGVyciA/OiBicGZfbWVtY21wKHplcm9lcywgbWVtc2V0X3plcm9fZGF0YSwgZGF0YV9zeik7XG4rXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKHplcm9lcywgbWVtc2V0X3plcm9fZGF0YSwgZGF0YV9zeik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNzcwLDcgKzc3MCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfbm90emVybyh2b2lkICpjdHgpXG4gXG4gXHRlcnIgPSBicGZfZHlucHRyX2Zyb21fbWVtKG1lbXNldF9ub3R6ZXJvX2RhdGEsIGRhdGFfc3osIDAsIFx1MDAyNnB0cik7XG4gXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoXHUwMDI2cHRyLCAwLCBkYXRhX3N6LCBEWU5QVFJfTUVNU0VUX1ZBTCk7XG4tXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X25vdHplcm9fZGF0YSwgZGF0YV9zeik7XG4rXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfbm90emVyb19kYXRhLCBkYXRhX3N6KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03ODYsNyArNzg2LDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF96ZXJvX29mZnNldCh2b2lkICpjdHgpXG4gXG4gXHRlcnIgPSBicGZfZHlucHRyX2Zyb21fbWVtKG1lbXNldF96ZXJvX29mZnNldF9kYXRhLCBkYXRhX3N6LCAwLCBcdTAwMjZwdHIpO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KFx1MDAyNnB0ciwgOCwgNCwgMCk7XG4tXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fb2Zmc2V0X2RhdGEsIGRhdGFfc3opO1xuK1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fb2Zmc2V0X2RhdGEsIGRhdGFfc3opO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTgwMyw3ICs4MDMsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm9fYWRqdXN0ZWQodm9pZCAqY3R4KVxuIFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfemVyb19hZGp1c3RlZF9kYXRhLCBkYXRhX3N6LCAwLCBcdTAwMjZwdHIpO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfYWRqdXN0KFx1MDAyNnB0ciwgNCwgOCk7XG4gXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoXHUwMDI2cHRyLCAwLCBicGZfZHlucHRyX3NpemUoXHUwMDI2cHRyKSwgMCk7XG4tXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeik7XG4rXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfemVyb19hZGp1c3RlZF9kYXRhLCBkYXRhX3N6KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC04OTgsNyArODk4LDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF94ZHBfY2h1bmtzKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdFx0ZXJyID0gYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgY2h1bmtfc3osIFx1MDAyNnB0cl94ZHAsIG9mZnNldCwgMCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdGVyciA9IGJwZl9tZW1jbXAoYnVmLCBleHBlY3RlZF9idWYsIHNpemVvZihidWYpKTtcbitcdFx0ZXJyID0gbG9jYWxfbWVtY21wKGJ1ZiwgZXhwZWN0ZWRfYnVmLCBzaXplb2YoYnVmKSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG5AQCAtOTUyLDcgKzk1Miw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X2R5bnB0cl9wcm9iZSh2b2lkICpwdHIsIGJwZl9yZWFkX2R5bnB0cl9mbl90IGJwXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoXHUwMDI2YnVmLCBsZW4sIFx1MDAyNnB0cl9idWYsIDAsIDApO1xuIFxuLVx0XHRpZiAoZXJyIHx8IGJwZl9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbikpXG4rXHRcdGlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKVxuIFx0XHRcdGVyciA9IDE7XG4gXG4gXHRcdC8qIFJlc2V0IGJ1ZmZlciBhbmQgZHlucHRyICovXG5AQCAtOTg2LDcgKzk4Niw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X2R5bnB0cl9wcm9iZV9zdHIodm9pZCAqcHRyLFxuIFx0XHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgbGVuLCBcdTAwMjZwdHJfYnVmLCAwLCAwKTtcbiBcdFx0aWYgKCFsZW4pXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICdcXDAnKVxuK1x0XHRpZiAoZXJyIHx8IGxvY2FsX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICdcXDAnKVxuIFx0XHRcdGVyciA9IDE7XG4gXHR9XG4gXHRicGZfcmluZ2J1Zl9kaXNjYXJkX2R5bnB0cihcdTAwMjZwdHJfYnVmLCAwKTtcbkBAIC0xMDEyLDcgKzEwMTIsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCwgdm9pZCAqcHRyLFxuIFx0XHRpZiAobGVuIFx1MDAzZSBzaXplb2YoYnVmKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChcdTAwMjZidWYsIGxlbiwgXHUwMDI2cHRyX3hkcCwgb2ZmLCAwKTtcbi1cdFx0aWYgKGVyciB8fCBicGZfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKVxuK1x0XHRpZiAoZXJyIHx8IGxvY2FsX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSlcbiBcdFx0XHRlcnIgPSAxO1xuIFx0XHQvKiBSZXNldCBidWZmZXIgYW5kIGR5bnB0ciAqL1xuIFx0XHRfX2J1aWx0aW5fbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpO1xuQEAgLTEwNDgsNyArMTA0OCw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X2R5bnB0cl9wcm9iZV9zdHJfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCwgdm9pZCAqXG4gXG4gXHRcdGlmICghbGVuKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoZXJyIHx8IGJwZl9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAnXFwwJylcbitcdFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAnXFwwJylcbiBcdFx0XHRlcnIgPSAxO1xuIFxuIFx0XHRfX2J1aWx0aW5fbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jXG5pbmRleCBiZGRjNGU4NTc5ZDI0NC4uZTY3ZmU5NzAwZTU5M2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jXG5AQCAtOSw2ICs5LDEwIEBAXG4gY2hhciAqdXNlcl9wdHIgPSAoY2hhciAqKTE7XG4gY2hhciAqaW52YWxpZF9rZXJuX3B0ciA9IChjaGFyICopLTE7XG4gXG4rZXh0ZXJuIGludCBicGZfc3RycGJyayhjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKSBfX2tzeW07XG4rZXh0ZXJuIGludCBicGZfbWVtY21wKGNvbnN0IHZvaWQgKnB0cjFfX2lnbiwgY29uc3Qgdm9pZCAqcHRyMl9faWduLFxuK1x0XHQgICAgICBzaXplX3Qgc2l6ZSkgX19rc3ltO1xuK1xuIC8qXG4gICogV2hlbiBwYXNzaW5nIHVzZXJzcGFjZSBwb2ludGVycywgdGhlIGVycm9yIGNvZGUgZGlmZmVycyBiYXNlZCBvbiBhcmNoOlxuICAqICAgLUVSQU5HRSBvbiBhcmNoZXMgd2l0aCBub24tb3ZlcmxhcHBpbmcgYWRkcmVzcyBzcGFjZXNcbkBAIC01Myw2ICs1NywxMCBAQCBTRUMoXCJzeXNjYWxsXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybnN0cl9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuXG4gU0VDKFwic3lzY2FsbFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5zdHJfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybnN0cihcImhlbGxvXCIsIE5VTEwsIDEpOyB9XG4gU0VDKFwic3lzY2FsbFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5jYXNlc3RyX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKE5VTEwsIFwiaGVsbG9cIiwgMSk7IH1cbiBTRUMoXCJzeXNjYWxsXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybmNhc2VzdHJfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoXCJoZWxsb1wiLCBOVUxMLCAxKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKE5VTEwsIFwieFwiLCAxKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKFwieFwiLCBOVUxMLCAxKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJwYnJrX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoTlVMTCwgXCJ4XCIpOyB9XG4rU0VDKFwic3lzY2FsbFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cnBicmtfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcInhcIiwgTlVMTCk7IH1cbiBcbiAvKiBQYXNzaW5nIHVzZXJzcGFjZSBwdHIgdG8gc3RyaW5nIGtmdW5jcyAqL1xuIFNFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJjbXBfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcCh1c2VyX3B0ciwgXCJoZWxsb1wiKTsgfVxuQEAgLTc5LDYgKzg3LDEwIEBAIFNFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuc3RyX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmVcbiBTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybnN0cl91c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybnN0cihcImhlbGxvXCIsIHVzZXJfcHRyLCAxKTsgfVxuIFNFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIodXNlcl9wdHIsIFwiaGVsbG9cIiwgMSk7IH1cbiBTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFwiaGVsbG9cIiwgdXNlcl9wdHIsIDEpOyB9XG4rU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X21lbWNtcF91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKHVzZXJfcHRyLCBcInhcIiwgMSk7IH1cbitTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3RfbWVtY21wX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXCJ4XCIsIHVzZXJfcHRyLCAxKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJwYnJrX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHVzZXJfcHRyLCBcInhcIik7IH1cbitTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RycGJya191c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcInhcIiwgdXNlcl9wdHIpOyB9XG4gXG4gI2VuZGlmIC8qIF9fVEFSR0VUX0FSQ0hfczM5MCAqL1xuIFxuQEAgLTEwNyw1ICsxMTksOSBAQCBTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5zdHJfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuXG4gU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJuc3RyX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybnN0cihcImhlbGxvXCIsIGludmFsaWRfa2Vybl9wdHIsIDEpOyB9XG4gU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKGludmFsaWRfa2Vybl9wdHIsIFwiaGVsbG9cIiwgMSk7IH1cbiBTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoXCJoZWxsb1wiLCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3RfbWVtY21wX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGludmFsaWRfa2Vybl9wdHIsIFwieFwiLCAxKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3RfbWVtY21wX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKFwieFwiLCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RycGJya19wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoaW52YWxpZF9rZXJuX3B0ciwgXCJ4XCIpOyB9XG4rU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJwYnJrX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcInhcIiwgaW52YWxpZF9rZXJuX3B0cik7IH1cbiBcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmNcbmluZGV4IDQxMmM1M2I4N2IxODJiLi5kM2I5NzhlNDUzYmQ3YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmNcbkBAIC0xOSw2ICsxOSw4IEBAIFNFQyhcInN5c2NhbGxcIikgaW50IHRlc3Rfc3Ryc3BuX3N0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJzcG4obG9uZ19cbiBTRUMoXCJzeXNjYWxsXCIpIGludCB0ZXN0X3N0cnNwbl9hY2NlcHRfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3Ryc3BuKFwiYlwiLCBsb25nX3N0cik7IH1cbiBTRUMoXCJzeXNjYWxsXCIpIGludCB0ZXN0X3N0cmNzcG5fc3RyX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNzcG4obG9uZ19zdHIsIFwiYlwiKTsgfVxuIFNFQyhcInN5c2NhbGxcIikgaW50IHRlc3Rfc3RyY3Nwbl9yZWplY3RfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY3NwbihcImJcIiwgbG9uZ19zdHIpOyB9XG4rU0VDKFwic3lzY2FsbFwiKSBpbnQgdGVzdF9zdHJwYnJrX3N0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKGxvbmdfc3RyLCBcInpcIik7IH1cbitTRUMoXCJzeXNjYWxsXCIpIGludCB0ZXN0X3N0cnBicmtfYWNjZXB0X3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXCJiXCIsIGxvbmdfc3RyKTsgfVxuIFNFQyhcInN5c2NhbGxcIikgaW50IHRlc3Rfc3Ryc3RyX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnN0cihsb25nX3N0ciwgXCJoZWxsb1wiKTsgfVxuIFNFQyhcInN5c2NhbGxcIikgaW50IHRlc3Rfc3RyY2FzZXN0cl90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjYXNlc3RyKGxvbmdfc3RyLCBcImhlbGxvXCIpOyB9XG4gU0VDKFwic3lzY2FsbFwiKSBpbnQgdGVzdF9zdHJuc3RyX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5zdHIobG9uZ19zdHIsIFwiaGVsbG9cIiwgc2l6ZW9mKGxvbmdfc3RyKSk7IH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmNcbmluZGV4IGY2NWIxMjI2YTgxYTM3Li4yNWI4Yzg5N2RhNTRiYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jXG5AQCAtNyw2ICs3LDEwIEBAXG4gXG4gY2hhciBzdHJbXSA9IFwiaGVsbG8gd29ybGRcIjtcbiBcbitleHRlcm4gaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pIF9fa3N5bTtcbitleHRlcm4gaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sXG4rXHRcdCAgICAgIHNpemVfdCBzaXplKSBfX2tzeW07XG4rXG4gI2RlZmluZSBfX3Rlc3QocmV0dmFsKSBTRUMoXCJzeXNjYWxsXCIpIF9fc3VjY2VzcyBfX3JldHZhbChyZXR2YWwpXG4gXG4gLyogRnVuY3Rpb25hbCB0ZXN0cyAqL1xuQEAgLTYwLDQgKzY0LDI1IEBAIF9fdGVzdCgtRU5PRU5UKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9ub3Rmb3VuZDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzXG4gX190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX25vdGZvdW5kMyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihcIlwiLCBcImFcIiwgMCk7IH1cbiBfX3Rlc3QoMCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfZW1wdHkodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoc3RyLCBcIlwiLCAxKTsgfVxuIFxuKy8qIGJwZl9zdHJwYnJrIC0gZnVuY3Rpb25hbCB0ZXN0cyAqL1xuK19fdGVzdCgwKSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX2ZpcnN0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcImhcIik7IH1cbitfX3Rlc3QoNCkgaW50IHRlc3Rfc3RycGJya19mb3VuZF9taWRkbGUodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFwib3dcIik7IH1cbitfX3Rlc3QoMikgaW50IHRlc3Rfc3RycGJya19mb3VuZF9tdWx0aXBsZSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXCJsXCIpOyB9XG4rX190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfbm90Zm91bmQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFwieHl6XCIpOyB9XG4rX190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfZW1wdHlfYWNjZXB0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcIlwiKTsgfVxuK1xuKy8qIGJwZl9tZW1jbXAgLSBmdW5jdGlvbmFsIHRlc3RzICovXG4rY2hhciBkYXRhMVtdID0gXCJoZWxsbyB3b3JsZFwiO1xuK2NoYXIgZGF0YTJbXSA9IFwiaGVsbG8gd29ybGRcIjtcbitjaGFyIGRhdGEzW10gPSBcImhlbGxvIHdvcmxlXCI7XG4rX190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTEsIGRhdGEyLCBzaXplb2YoZGF0YTEpKTsgfVxuK19fdGVzdCgtMSkgaW50IHRlc3RfbWVtY21wX25lcV9sZXNzKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTMsIHNpemVvZihkYXRhMSkpOyB9XG4rX190ZXN0KDEpIGludCB0ZXN0X21lbWNtcF9uZXFfZ3JlYXRlcih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTMsIGRhdGExLCBzaXplb2YoZGF0YTEpKTsgfVxuK19fdGVzdCgwKSBpbnQgdGVzdF9tZW1jbXBfc2l6ZV96ZXJvKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTMsIDApOyB9XG4rLyogbWVtY21wIHNob3VsZCBOT1Qgc3RvcCBhdCBudWxsIGJ5dGUgLSBjb21wYXJlIHBhc3QgJ1xcMCcgKi9cbitjaGFyIGJpbjFbXSA9IHsgJ2EnLCAnXFwwJywgJ2MnIH07XG4rY2hhciBiaW4yW10gPSB7ICdhJywgJ1xcMCcsICdkJyB9O1xuK19fdGVzdCgwKSBpbnQgdGVzdF9tZW1jbXBfbnVsbF9ieXRlX2VxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChiaW4xLCBiaW4xLCBzaXplb2YoYmluMSkpOyB9XG4rX190ZXN0KC0xKSBpbnQgdGVzdF9tZW1jbXBfbnVsbF9ieXRlX25lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoYmluMSwgYmluMiwgc2l6ZW9mKGJpbjEpKTsgfVxuK1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE1OjMzOjU4LjE5NjI4MzA0NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjAwNDgyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuIGZvciBOZXcgQlBGIEtmdW5jcyoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAgYXMgQlBGIGtmdW5jcy4gVGhpcyBpcyBpbnRlcmVzdGluZyDigJMgbmV3IGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMuIFNpbmNlIHRoaXMgY29kZSBpcywgYnkgZGVzaWduLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGxvYWRlZCBhbmQgcnVubmluZyBCUEYgcHJvZ3JhbXMsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IGtmdW5jcyBjYW4gd2l0aHN0YW5kIGhvc3RpbGUgaW5wdXQuXG5cbkZpcnN0LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHM6IGBicGZfc3RycGJya2AgYW5kIGBicGZfbWVtY21wYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgd2UnbGwgYmUgdGFyZ2V0aW5nLlxuXG5OZXh0LCB3ZSBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYGtlcm5lbC9icGYvaGVscGVycy5jYCBhbmQgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNvbmZpcm0sIGJ1dCBJJ20gYmV0dGluZyB3ZSdsbCBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgIChvciBwb3NzaWJseSBqdXN0IGBDT05GSUdfQlBGYCwgYnV0IG1vcmUgbGlrZWx5IHRoZSBmb3JtZXIpIGVuYWJsZWQuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBidWlsZCBhbmQgcnVudGltZSBlbnZpcm9ubWVudHMgYXJlIHN1aXRhYmxlLlxuXG5PbmNlIEkgaGF2ZSB2ZXJpZmllZCB0aGVzZSBjb25maWd1cmF0aW9ucywgSSB3aWxsIHVzZSB0aGUgYXZhaWxhYmxlIGZ1enppbmcgdG9vbHMgdG8gdGVzdCB0aGVzZSBuZXcga2Z1bmNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTgyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTU6MzQ6MDMuNDU2MzMzMjk3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDc0NjE5MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3N0cnBicmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmM9Mzk0Mz1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICpyZWplY3RfX2lnbilcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTM5NzQtLyoqXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzk3NTogKiBicGZfc3RycGJyayAtIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzZXQgb2YgY2hhcmFjdGVycyBpbiBhIHN0cmluZ1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTM5NzYtICogQHNfX2lnbjogVGhlIHN0cmluZyB0byBiZSBzZWFyY2hlZFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzk4Ni0gKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozOTg3Ol9fYnBmX2tmdW5jIGludCBicGZfc3RycGJyayhjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTM5ODgte1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDkzOD1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNzcG4pO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5Mzk6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJwYnJrKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTQwLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbWVtY21wKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9MTA9Y2hhciAqaW52YWxpZF9rZXJuX3B0ciA9IChjaGFyICopLTE7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYy0xMS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jOjEyOmV4dGVybiBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbikgX19rc3ltO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMtMTMtZXh0ZXJuIGludCBicGZfbWVtY21wKGNvbnN0IHZvaWQgKnB0cjFfX2lnbiwgY29uc3Qgdm9pZCAqcHRyMl9faWduLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYz02MT1TRUMoXFxcInN5c2NhbGxcXFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X21lbWNtcF9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXFxcInhcXFwiLCBOVUxMLCAxKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6NjI6U0VDKFxcXCJzeXNjYWxsXFxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJwYnJrX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoTlVMTCwgXFxcInhcXFwiKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6NjM6U0VDKFxcXCJzeXNjYWxsXFxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJwYnJrX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXFxcInhcXFwiLCBOVUxMKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMtNjQtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jPTkxPVNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3RfbWVtY21wX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXFxcInhcXFwiLCB1c2VyX3B0ciwgMSk7IH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jOjkyOlNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RycGJya191c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayh1c2VyX3B0ciwgXFxcInhcXFwiKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6OTM6U0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJwYnJrX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKFxcXCJ4XFxcIiwgdXNlcl9wdHIpOyB9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYy05NC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9MTIzPVNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X21lbWNtcF9wYWdlZmF1bHQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChcXFwieFxcXCIsIGludmFsaWRfa2Vybl9wdHIsIDEpOyB9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYzoxMjQ6U0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RycGJya19wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoaW52YWxpZF9rZXJuX3B0ciwgXFxcInhcXFwiKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6MTI1OlNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cnBicmtfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKFxcXCJ4XFxcIiwgaW52YWxpZF9rZXJuX3B0cik7IH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTEyNi1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmM9MjE9U0VDKFxcXCJzeXNjYWxsXFxcIikgaW50IHRlc3Rfc3RyY3Nwbl9yZWplY3RfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY3NwbihcXFwiYlxcXCIsIGxvbmdfc3RyKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmM6MjI6U0VDKFxcXCJzeXNjYWxsXFxcIikgaW50IHRlc3Rfc3RycGJya19zdHJfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhsb25nX3N0ciwgXFxcInpcXFwiKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmM6MjM6U0VDKFxcXCJzeXNjYWxsXFxcIikgaW50IHRlc3Rfc3RycGJya19hY2NlcHRfdG9vX2xvbmcodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcXFwiYlxcXCIsIGxvbmdfc3RyKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmMtMjQtU0VDKFxcXCJzeXNjYWxsXFxcIikgaW50IHRlc3Rfc3Ryc3RyX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnN0cihsb25nX3N0ciwgXFxcImhlbGxvXFxcIik7IH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYz04PWNoYXIgc3RyW10gPSBcXFwiaGVsbG8gd29ybGRcXFwiO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYy05LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYzoxMDpleHRlcm4gaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pIF9fa3N5bTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmMtMTEtZXh0ZXJuIGludCBicGZfbWVtY21wKGNvbnN0IHZvaWQgKnB0cjFfX2lnbiwgY29uc3Qgdm9pZCAqcHRyMl9faWduLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jPTY1PV9fdGVzdCgwKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9lbXB0eSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihzdHIsIFxcXCJcXFwiLCAxKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYy02Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmM6Njc6LyogYnBmX3N0cnBicmsgLSBmdW5jdGlvbmFsIHRlc3RzICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jOjY4Ol9fdGVzdCgwKSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX2ZpcnN0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcXFwiaFxcXCIpOyB9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jOjY5Ol9fdGVzdCg0KSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX21pZGRsZSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXFxcIm93XFxcIik7IH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmM6NzA6X190ZXN0KDIpIGludCB0ZXN0X3N0cnBicmtfZm91bmRfbXVsdGlwbGUodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFxcXCJsXFxcIik7IH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmM6NzE6X190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfbm90Zm91bmQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFxcXCJ4eXpcXFwiKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYzo3MjpfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RycGJya19lbXB0eV9hY2NlcHQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFxcXCJcXFwiKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYy03My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTU6MzQ6MDUuNDYzODAxNjEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAzNTQ5ODUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBOZXcgQlBGIEhlbHBlcnMqKlxuXG5BbHJpZ2h0LCBzbyBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAgaGF2ZSBiZWVuIGFkZGVkIHRvIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AuIEludGVyZXN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IHRoZXNlIGFyZSBleHBvc2VkLiBBZGRpbmcgdGhlc2UgcHJpbWl0aXZlcyBpcyBhIHNpZ25pZmljYW50IHN0ZXAsIGFzIHRoZXkgZ3JlYXRseSBleHBhbmQgdGhlIHBvdGVudGlhbCBmdW5jdGlvbmFsaXR5IG9mIEJQRiBwcm9ncmFtcy4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBsb29rIGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFVuZGVyc3RhbmRpbmcgd2hpY2ggY29uZmlnIGZsYWdzIGVuYWJsZSBga2VybmVsL2JwZi9oZWxwZXJzLmNgIGlzIGNydWNpYWwuIEl04oCZcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4ga2VybmVsIGZlYXR1cmVzIGFuZCB0aGUgQlBGIHN1YnN5c3RlbSwgZXNwZWNpYWxseSBhcyB0aGlzIGlzIGEgY29yZSBmaWxlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUgYW5kIGNvbXBpbGVkIGluIG15IGN1cnJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjE4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTU6MzQ6MTAuNDk5MzAyOTI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTgyNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhlbHBlcnMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxNTozNDoxMC41NTM4OTczMjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDE0OTk4MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldyBCUEYgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgZXhhbWluZWQgdGhpcyBwYXRjaCwgYW5kIGl0IGJvaWxzIGRvd24gdG8gdGhpczogYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBNeSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBicGZfc3RycGJya2AgYW5kIGBicGZfbWVtY21wYC4gSXQncyBjbGVhciB0aGF0IHRoZXNlIGFyZSBmdW5jdGlvbmFsIGFkZGl0aW9uczsgdGhleSdyZSAqaW50ZW5kZWQqIHRvIGRvIHNvbWV0aGluZyB1c2VmdWwuXG5cbkkgcXVpY2tseSBkb3VibGUtY2hlY2tlZCB0aGUgY29kZSwgYW5kIHllcywgdGhlc2UgZnVuY3Rpb25zIGFyZSBhZGRlZCB1bmNvbmRpdGlvbmFsbHkgd2l0aGluIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AuIFRoYXQgbWVhbnMgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIG9ubHkgY29uZmlnIHdlIG5lZWQgdG8gZW5hYmxlLiBObyBuZWVkIHRvIHdvcnJ5IGFib3V0IGFueSBvdGhlciBjb25kaXRpb25hbCBjb21waWxhdGlvbi5cblxuVGhlcmVmb3JlLCBteSByZWNvbW1lbmRhdGlvbiBpcyBzdHJhaWdodGZvcndhcmQ6IFRoZXNlIG5ldyBCUEYga2Z1bmNzLCBwYXJ0aWN1bGFybHkgYGJwZl9zdHJwYnJrYCBhbmQgYGJwZl9tZW1jbXBgLCBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhleSByZXByZXNlbnQgbmV3IGZ1bmN0aW9uYWxpdHkgdGhhdCdzIG5vdyBhdmFpbGFibGUgdG8gQlBGIHByb2dyYW1zLiBUaGV5IHNob3VsZCBiZSBwcmlvcml0aXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MzEsIk91dHB1dFRva2VucyI6MTA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE1OjM0OjE1LjU2ODg5Nzc2OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkwMDIwMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3N0cnBicmtcIixcbiAgICBcImJwZl9tZW1jbXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHR3byBuZXcgQlBGIGtmdW5jcywgYnBmX3N0cnBicmsgYW5kIGJwZl9tZW1jbXAsIHdoaWNoIGNhbiBiZSBjYWxsZWQgZnJvbSBCUEYgcHJvZ3JhbXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGFkZGl0aW9ucyB0byB0aGUgY29yZSBCUEYgaGVscGVyIGxpYnJhcnkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc3RycGJya1wiLFxuICAgIFwiYnBmX21lbWNtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdHdvIG5ldyBCUEYga2Z1bmNzLCBicGZfc3RycGJyayBhbmQgYnBmX21lbWNtcCwgd2hpY2ggY2FuIGJlIGNhbGxlZCBmcm9tIEJQRiBwcm9ncmFtcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgYWRkaXRpb25zIHRvIHRoZSBjb3JlIEJQRiBoZWxwZXIgbGlicmFyeSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowp2fs9[1] Phase: Succeeded StartedAt: 2026-06-26 15:35:04 +0000 UTC FinishedAt: 2026-06-26 15:35:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-26 15:35:04 +0000 UTC FinishedAt: 2026-06-26 15:35:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2] Phase: Succeeded StartedAt: 2026-06-26 15:35:04 +0000 UTC FinishedAt: 2026-06-26 20:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 15:35:04 +0000 UTC FinishedAt: 2026-06-26 20:03:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 15:35:04 +0000 UTC FinishedAt: 2026-06-26 15:35:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 15:35:04 +0000 UTC FinishedAt: 2026-06-26 15:35:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-workflowp2fs9/series-workflowp2fs9-convert-artifact-1384002033/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 15:35:52 +0000 UTC FinishedAt: 2026-06-26 16:03:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 15:35:52 +0000 UTC FinishedAt: 2026-06-26 16:03:20 +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:*76bb8e33-663a-4548-9e4f-0f027d379f4a,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-workflowp2fs9/series-workflowp2fs9-convert-artifact-1384002033/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": "8a513e35-fba5-47fb-930d-df1dbbb542f3", "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-workflowp2fs9/series-workflowp2fs9-build-action-2129194015/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 15:35:52 +0000 UTC FinishedAt: 2026-06-26 16:03:09 +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:*76bb8e33-663a-4548-9e4f-0f027d379f4a,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-workflowp2fs9/series-workflowp2fs9-convert-artifact-1384002033/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": "8a513e35-fba5-47fb-930d-df1dbbb542f3", "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-workflowp2fs9/series-workflowp2fs9-build-action-2129194015/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 16:03:20 +0000 UTC FinishedAt: 2026-06-26 16:03:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 16:03:20 +0000 UTC FinishedAt: 2026-06-26 16:03:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 16:03:20 +0000 UTC FinishedAt: 2026-06-26 16:04:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 16:03:20 +0000 UTC FinishedAt: 2026-06-26 16:03:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-workflowp2fs9/series-workflowp2fs9-convert-artifact-2759971396/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 16:04:21 +0000 UTC FinishedAt: 2026-06-26 16:06:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 16:04:21 +0000 UTC FinishedAt: 2026-06-26 16:06:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8a513e35-fba5-47fb-930d-df1dbbb542f3,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-workflowp2fs9/series-workflowp2fs9-build-action-2129194015/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-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 16:06:22 +0000 UTC FinishedAt: 2026-06-26 16:06:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 16:06:22 +0000 UTC FinishedAt: 2026-06-26 16:06:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 16:06:22 +0000 UTC FinishedAt: 2026-06-26 16:58:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 16:06:22 +0000 UTC FinishedAt: 2026-06-26 16:58:38 +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:*76bb8e33-663a-4548-9e4f-0f027d379f4a,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-workflowp2fs9/series-workflowp2fs9-convert-artifact-2759971396/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": "56bfa10a-728a-418f-a0e2-af3aa91fec81", "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-workflowp2fs9/series-workflowp2fs9-build-action-4294286397/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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: Failed StartedAt: 2026-06-26 16:06:22 +0000 UTC FinishedAt: 2026-06-26 16:09:24 +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:*76bb8e33-663a-4548-9e4f-0f027d379f4a,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-workflowp2fs9/series-workflowp2fs9-convert-artifact-2759971396/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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(1) Phase: Succeeded StartedAt: 2026-06-26 16:16:19 +0000 UTC FinishedAt: 2026-06-26 16:58:28 +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:*76bb8e33-663a-4548-9e4f-0f027d379f4a,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-workflowp2fs9/series-workflowp2fs9-convert-artifact-2759971396/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": "56bfa10a-728a-418f-a0e2-af3aa91fec81", "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-workflowp2fs9/series-workflowp2fs9-build-action-4294286397/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 16:58:38 +0000 UTC FinishedAt: 2026-06-26 16:58:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 16:58:38 +0000 UTC FinishedAt: 2026-06-26 16:58:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 16:58:38 +0000 UTC FinishedAt: 2026-06-26 17:00:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 16:58:38 +0000 UTC FinishedAt: 2026-06-26 17:00:36 +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:*56bfa10a-728a-418f-a0e2-af3aa91fec81,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-workflowp2fs9/series-workflowp2fs9-build-action-4294286397/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-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 17:00:46 +0000 UTC FinishedAt: 2026-06-26 20:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 17:00:46 +0000 UTC FinishedAt: 2026-06-26 20:03:46 +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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"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:*8a513e35-fba5-47fb-930d-df1dbbb542f3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*56bfa10a-728a-418f-a0e2-af3aa91fec81,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-workflowp2fs9/series-workflowp2fs9-build-action-2129194015/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-workflowp2fs9/series-workflowp2fs9-build-action-4294286397/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 17:00:46 +0000 UTC FinishedAt: 2026-06-26 17:01:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 17:00:46 +0000 UTC FinishedAt: 2026-06-26 17:01:04 +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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"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-workflowp2fs9/series-workflowp2fs9-convert-artifact-506044749/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 17:00:46 +0000 UTC FinishedAt: 2026-06-26 17:00:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 17:00:46 +0000 UTC FinishedAt: 2026-06-26 17:00:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 17:00:46 +0000 UTC FinishedAt: 2026-06-26 17:00:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 17:01:24 +0000 UTC FinishedAt: 2026-06-26 20:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2fs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_strpbrk","bpf_memcmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"35f04557-5c9e-4f38-afd9-8bf04fe614c4","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-26 17:01:24 +0000 UTC FinishedAt: 2026-06-26 20:03:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8a513e35-fba5-47fb-930d-df1dbbb542f3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*56bfa10a-728a-418f-a0e2-af3aa91fec81,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-workflowp2fs9/series-workflowp2fs9-build-action-2129194015/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-workflowp2fs9/series-workflowp2fs9-build-action-4294286397/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-workflowp2fs9/series-workflowp2fs9-convert-artifact-506044749/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,}