Name: series-workflowx4hxx Phase: Succeeded StartedAt: 2026-06-23 03:24:23 +0000 UTC FinishedAt: 2026-06-23 07:30:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[0] Phase: Succeeded StartedAt: 2026-06-23 03:24:23 +0000 UTC FinishedAt: 2026-06-23 03:35:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 03:24:23 +0000 UTC FinishedAt: 2026-06-23 03:35:28 +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": "d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd", "config_name": "upstream-apparmor-kasan.config", "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": "d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd", "config_name": "upstream-apparmor-kasan.config", "series_id": "903d6c86-5f28-4c0f-bdd7-03ae52db2997" }, "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+CgkJCTx0ZD4yMDI2LzA2LzIzIDAzOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3N0cnBicmsmIzM0OywKICAgICYjMzQ7YnBmX21lbWNtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHR3byBuZXcgQlBGIGtmdW5jcywgYGJwZl9zdHJwYnJrYCBhbmQgYGJwZl9tZW1jbXBgLCB3aGljaCBhbGxvdyBCUEYgcHJvZ3JhbXMgdG8gcGVyZm9ybSBzdHJpbmcgYW5kIG1lbW9yeSBjb21wYXJpc29ucy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgaGVscGVyIGxpYnJhcnkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgaGFuZGxlIHZhcmlvdXMgaW5wdXRzIHNhZmVseSwgZXNwZWNpYWxseSBzaW5jZSB0aGV5IGRlYWwgd2l0aCBtZW1vcnkgYWNjZXNzIGFuZCBwb3RlbnRpYWwgcGFnZSBmYXVsdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDM6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzM2RkNTRmMjE5M2Y1NDIxZDE3ZWQ2YWEzNzQ5NTY3ZjM0MzI3NDIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMDM6MzQ6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuaW5kZXggYjUzMTRjOWZlZDNjZjAuLmYyNGNmZGIyMjYzNWM3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtMzk3MSw2ICYjNDM7Mzk3MSwxMDkgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJjc3BuKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqcmVqZWN0X19pZ24pXG4gXHRyZXR1cm4gLUVGQVVMVDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfbWVtY21wIC0gQ29tcGFyZSB0d28gbWVtb3J5IHJlZ2lvbnMgYnl0ZSBieSBieXRlXG4mIzQzOyAqIEBwdHIxX19pZ246IEZpcnN0IG1lbW9yeSByZWdpb25cbiYjNDM7ICogQHB0cjJfX2lnbjogU2Vjb25kIG1lbW9yeSByZWdpb25cbiYjNDM7ICogQHNpemU6IE51bWJlciBvZiBieXRlcyB0byBjb21wYXJlXG4mIzQzOyAqXG4mIzQzOyAqIENvbXBhcmVzIHRoZSBmaXJzdCBAc2l6ZSBieXRlcyBvZiB0aGUgbWVtb3J5IGFyZWFzIEBwdHIxX19pZ24gYW5kXG4mIzQzOyAqIEBwdHIyX19pZ24uIFVubGlrZSBicGZfc3RyY21wLCBudWxsIGJ5dGVzIGRvIG5vdCB0ZXJtaW5hdGUgdGhlIGNvbXBhcmlzb24uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAlMCAgICAgICAtIFRoZSBtZW1vcnkgcmVnaW9ucyBhcmUgZXF1YWxcbiYjNDM7ICogKiAlLTEgICAgICAtIEBwdHIxX19pZ24gaXMgbGVzcyB0aGFuIEBwdHIyX19pZ25cbiYjNDM7ICogKiAlMSAgICAgICAtIEBwdHIxX19pZ24gaXMgZ3JlYXRlciB0aGFuIEBwdHIyX19pZ25cbiYjNDM7ICogKiAlLUVGQVVMVCAtIENhbm5vdCByZWFkIG9uZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbnNcbiYjNDM7ICogKiAlLUUyQklHICAtIEBzaXplIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCBzaXplXG4mIzQzOyAqICogJS1FUkFOR0UgLSBPbmUgb2YgdGhlIG1lbW9yeSByZWdpb25zIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2VcbiYjNDM7ICovXG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfc3RycGJyayAtIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzZXQgb2YgY2hhcmFjdGVycyBpbiBhIHN0cmluZ1xuJiM0MzsgKiBAc19faWduOiBUaGUgc3RyaW5nIHRvIGJlIHNlYXJjaGVkXG4mIzQzOyAqIEBhY2NlcHRfX2lnbjogVGhlIHN0cmluZyBjb250YWluaW5nIHRoZSBjaGFyYWN0ZXJzIHRvIHNlYXJjaCBmb3JcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlxuJiM0MzsgKiAqIFx1MDAzZT0wICAgICAgLSBJbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIEBzX19pZ24gdGhhdCBtYXRjaGVzIGFueVxuJiM0MzsgKiAgICAgICAgICAgICAgY2hhcmFjdGVyIGluIEBhY2NlcHRfX2lnblxuJiM0MzsgKiAqICUtRU5PRU5UIC0gTm8gY2hhcmFjdGVyIG9mIEBhY2NlcHRfX2lnbiBmb3VuZCBpbiBAc19faWduXG4mIzQzOyAqICogJS1FRkFVTFQgLSBDYW5ub3QgcmVhZCBvbmUgb2YgdGhlIHN0cmluZ3NcbiYjNDM7ICogKiAlLUUyQklHICAtIE9uZSBvZiB0aGUgc3RyaW5ncyBpcyB0b28gbGFyZ2VcbiYjNDM7ICogKiAlLUVSQU5HRSAtIE9uZSBvZiB0aGUgc3RyaW5ncyBpcyBvdXRzaWRlIG9mIGtlcm5lbCBhZGRyZXNzIHNwYWNlXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbilcbiYjNDM7e1xuJiM0MztcdGNoYXIgY3MsIGNhO1xuJiM0MztcdGludCBpLCBqO1xuJiM0MztcbiYjNDM7XHRpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHNfX2lnbiwgMSkgfHxcbiYjNDM7XHQgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKGFjY2VwdF9faWduLCAxKSkge1xuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRndWFyZChwYWdlZmF1bHQpKCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjcywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiYjNDM7XHRcdGlmIChjcyA9PSAmIzM5O1xcMCYjMzk7KVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjYSwgYWNjZXB0X19pZ24gJiM0MzsgaiwgY2hhciwgZXJyX291dCk7XG4mIzQzO1x0XHRcdGlmIChjYSA9PSAmIzM5O1xcMCYjMzk7KVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRpZiAoY3MgPT0gY2EpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoaiA9PSBYQVRUUl9TSVpFX01BWClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FMkJJRztcbiYjNDM7XHRcdHNfX2lnbiYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAtRTJCSUc7XG4mIzQzO2Vycl9vdXQ6XG4mIzQzO1x0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfbWVtY21wIC0gQ29tcGFyZSB0d28gbWVtb3J5IHJlZ2lvbnMgYnl0ZSBieSBieXRlXG4mIzQzOyAqIEBwdHIxX19pZ246IEZpcnN0IG1lbW9yeSByZWdpb25cbiYjNDM7ICogQHB0cjJfX2lnbjogU2Vjb25kIG1lbW9yeSByZWdpb25cbiYjNDM7ICogQHNpemU6IE51bWJlciBvZiBieXRlcyB0byBjb21wYXJlXG4mIzQzOyAqXG4mIzQzOyAqIENvbXBhcmVzIHRoZSBmaXJzdCBAc2l6ZSBieXRlcyBvZiB0aGUgbWVtb3J5IGFyZWFzIEBwdHIxX19pZ24gYW5kXG4mIzQzOyAqIEBwdHIyX19pZ24uIFVubGlrZSBicGZfc3RyY21wLCBudWxsIGJ5dGVzIGRvIG5vdCB0ZXJtaW5hdGUgdGhlIGNvbXBhcmlzb24uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAlMCAgICAgICAtIFRoZSBtZW1vcnkgcmVnaW9ucyBhcmUgZXF1YWxcbiYjNDM7ICogKiAlLTEgICAgICAtIEBwdHIxX19pZ24gaXMgbGVzcyB0aGFuIEBwdHIyX19pZ25cbiYjNDM7ICogKiAlMSAgICAgICAtIEBwdHIxX19pZ24gaXMgZ3JlYXRlciB0aGFuIEBwdHIyX19pZ25cbiYjNDM7ICogKiAlLUVGQVVMVCAtIENhbm5vdCByZWFkIG9uZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbnNcbiYjNDM7ICogKiAlLUUyQklHICAtIEBzaXplIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCBzaXplXG4mIzQzOyAqICogJS1FUkFOR0UgLSBPbmUgb2YgdGhlIG1lbW9yeSByZWdpb25zIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2VcbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIGludCBicGZfbWVtY21wKGNvbnN0IHZvaWQgKnB0cjFfX2lnbiwgY29uc3Qgdm9pZCAqcHRyMl9faWduLFxuJiM0MztcdFx0XHQgICBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKnAxID0gcHRyMV9faWduLCAqcDIgPSBwdHIyX19pZ247XG4mIzQzO1x0Y2hhciBjMSwgYzI7XG4mIzQzO1x0c2l6ZV90IGk7XG4mIzQzO1xuJiM0MztcdGlmIChzaXplIFx1MDAzZSBYQVRUUl9TSVpFX01BWClcbiYjNDM7XHRcdHJldHVybiAtRTJCSUc7XG4mIzQzO1x0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChwMSwgc2l6ZSkgfHxcbiYjNDM7XHQgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHAyLCBzaXplKSlcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcbiYjNDM7XHRndWFyZChwYWdlZmF1bHQpKCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMxLCBwMSAmIzQzOyBpLCBjaGFyLCBlcnJfb3V0KTtcbiYjNDM7XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMyLCBwMiAmIzQzOyBpLCBjaGFyLCBlcnJfb3V0KTtcbiYjNDM7XHRcdGlmIChjMSAhPSBjMilcbiYjNDM7XHRcdFx0cmV0dXJuIGMxIFx1MDAzYyBjMiA/IC0xIDogMTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO2Vycl9vdXQ6XG4mIzQzO1x0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBfX2JwZl9zdHJuc3RyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IGxlbixcbiBcdFx0XHQgYm9vbCBpZ25vcmVfY2FzZSlcbiB7XG5AQCAtNDg1MCw2ICYjNDM7NDk1Myw4IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RybGVuKTtcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cm5sZW4pO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3Ryc3BuKTtcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNzcG4pO1xuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cnBicmspO1xuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX21lbWNtcCk7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJzdHIpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY2FzZXN0cik7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJuc3RyKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jXG5pbmRleCBlMGQ2NzJkOTNhZGY4NS4uMDcxNTgxZmYwODMzZjMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9zdWNjZXNzLmNcbkBAIC02MjQsNyAmIzQzOzYyNCw3IEBAIGludCBCUEZfUFJPRyh0ZXN0X2R5bnB0cl9za2JfdHBfYnRmLCB2b2lkICpza2IsIHZvaWQgKmxvY2F0aW9uKVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGJwZl9tZW1jbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgdTMyIHNpemUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxvY2FsX21lbWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCB1MzIgc2l6ZSlcbiB7XG4gXHRpbnQgaTtcbiBcbkBAIC02NTAsMTIgJiM0Mzs2NTAsMTIgQEAgaW50IHRlc3RfZHlucHRyX2NvcHkodm9pZCAqY3R4KVxuIFx0ZXJyID0gYnBmX2R5bnB0cl93cml0ZShcdTAwMjZzcmMsIDAsIGRhdGEsIHN6LCAwKTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX2NvcHkoXHUwMDI2ZHN0LCAwLCBcdTAwMjZzcmMsIDAsIHN6KTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoYnVmLCBzeiwgXHUwMDI2ZHN0LCAwLCAwKTtcbi1cdGVyciA9IGVyciA/OiBicGZfbWVtY21wKGRhdGEsIGJ1Ziwgc3opO1xuJiM0MztcdGVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBzeik7XG4gXG4gXHQvKiBUZXN0IHRoYXQgb2Zmc2V0cyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgKi9cbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX2NvcHkoXHUwMDI2ZHN0LCAzLCBcdTAwMjZzcmMsIDUsIHN6IC0gNSk7XG4gXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKGJ1Ziwgc3ogLSA1LCBcdTAwMjZkc3QsIDMsIDApO1xuLVx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZGF0YSAmIzQzOyA1LCBidWYsIHN6IC0gNSk7XG4mIzQzO1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChkYXRhICYjNDM7IDUsIGJ1Ziwgc3ogLSA1KTtcbiBcbiBcdGJwZl9yaW5nYnVmX2Rpc2NhcmRfZHlucHRyKFx1MDAyNnNyYywgMCk7XG4gXHRicGZfcmluZ2J1Zl9kaXNjYXJkX2R5bnB0cihcdTAwMjZkc3QsIDApO1xuQEAgLTY5Miw3ICYjNDM7NjkyLDcgQEAgaW50IHRlc3RfZHlucHRyX2NvcHlfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdFx0ZXJyID0gYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgbGVuLCBcdTAwMjZwdHJfeGRwLCBpICogbGVuLCAwKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dDtcbi1cdFx0aWYgKGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXG4mIzQzO1x0XHRpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTcxMyw3ICYjNDM7NzEzLDcgQEAgaW50IHRlc3RfZHlucHRyX2NvcHlfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdFx0ZXJyID0gYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgbGVuLCBcdTAwMjZwdHJfYnVmLCBpICogbGVuLCAwKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dDtcbi1cdFx0aWYgKGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXG4mIzQzO1x0XHRpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTcyNyw3ICYjNDM7NzI3LDcgQEAgaW50IHRlc3RfZHlucHRyX2NvcHlfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdFx0ZXJyID0gYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgbGVuLCBcdTAwMjZwdHJfeGRwLCAyICYjNDM7IGkgKiBsZW4sIDApO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRpZiAoYnBmX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcbiYjNDM7XHRcdGlmIChsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5AQCAtNzUwLDcgJiM0Mzs3NTAsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm8odm9pZCAqY3R4KVxuIFxuIFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfemVyb19kYXRhLCBkYXRhX3N6LCAwLCBcdTAwMjZwdHIpO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KFx1MDAyNnB0ciwgMCwgZGF0YV9zeiwgMCk7XG4tXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcCh6ZXJvZXMsIG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3opO1xuJiM0MztcdGVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoemVyb2VzLCBtZW1zZXRfemVyb19kYXRhLCBkYXRhX3N6KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03NzAsNyAmIzQzOzc3MCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfbm90emVybyh2b2lkICpjdHgpXG4gXG4gXHRlcnIgPSBicGZfZHlucHRyX2Zyb21fbWVtKG1lbXNldF9ub3R6ZXJvX2RhdGEsIGRhdGFfc3osIDAsIFx1MDAyNnB0cik7XG4gXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoXHUwMDI2cHRyLCAwLCBkYXRhX3N6LCBEWU5QVFJfTUVNU0VUX1ZBTCk7XG4tXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X25vdHplcm9fZGF0YSwgZGF0YV9zeik7XG4mIzQzO1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X25vdHplcm9fZGF0YSwgZGF0YV9zeik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNzg2LDcgJiM0Mzs3ODYsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm9fb2Zmc2V0KHZvaWQgKmN0eClcbiBcbiBcdGVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X3plcm9fb2Zmc2V0X2RhdGEsIGRhdGFfc3osIDAsIFx1MDAyNnB0cik7XG4gXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoXHUwMDI2cHRyLCA4LCA0LCAwKTtcbi1cdGVyciA9IGVyciA/OiBicGZfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfemVyb19vZmZzZXRfZGF0YSwgZGF0YV9zeik7XG4mIzQzO1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fb2Zmc2V0X2RhdGEsIGRhdGFfc3opO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTgwMyw3ICYjNDM7ODAzLDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF96ZXJvX2FkanVzdGVkKHZvaWQgKmN0eClcbiBcdGVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeiwgMCwgXHUwMDI2cHRyKTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX2FkanVzdChcdTAwMjZwdHIsIDQsIDgpO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KFx1MDAyNnB0ciwgMCwgYnBmX2R5bnB0cl9zaXplKFx1MDAyNnB0ciksIDApO1xuLVx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX2FkanVzdGVkX2RhdGEsIGRhdGFfc3opO1xuJiM0MztcdGVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX2FkanVzdGVkX2RhdGEsIGRhdGFfc3opO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTg5OCw3ICYjNDM7ODk4LDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF94ZHBfY2h1bmtzKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdFx0ZXJyID0gYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgY2h1bmtfc3osIFx1MDAyNnB0cl94ZHAsIG9mZnNldCwgMCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdGVyciA9IGJwZl9tZW1jbXAoYnVmLCBleHBlY3RlZF9idWYsIHNpemVvZihidWYpKTtcbiYjNDM7XHRcdGVyciA9IGxvY2FsX21lbWNtcChidWYsIGV4cGVjdGVkX2J1Ziwgc2l6ZW9mKGJ1ZikpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTk1Miw3ICYjNDM7OTUyLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3RfZHlucHRyX3Byb2JlKHZvaWQgKnB0ciwgYnBmX3JlYWRfZHlucHRyX2ZuX3QgYnBcbiBcdFx0XHRicmVhaztcbiBcdFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChcdTAwMjZidWYsIGxlbiwgXHUwMDI2cHRyX2J1ZiwgMCwgMCk7XG4gXG4tXHRcdGlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSlcbiYjNDM7XHRcdGlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKVxuIFx0XHRcdGVyciA9IDE7XG4gXG4gXHRcdC8qIFJlc2V0IGJ1ZmZlciBhbmQgZHlucHRyICovXG5AQCAtOTg2LDcgJiM0Mzs5ODYsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfc3RyKHZvaWQgKnB0cixcbiBcdFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChcdTAwMjZidWYsIGxlbiwgXHUwMDI2cHRyX2J1ZiwgMCwgMCk7XG4gXHRcdGlmICghbGVuKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoZXJyIHx8IGJwZl9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAmIzM5O1xcMCYjMzk7KVxuJiM0MztcdFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAmIzM5O1xcMCYjMzk7KVxuIFx0XHRcdGVyciA9IDE7XG4gXHR9XG4gXHRicGZfcmluZ2J1Zl9kaXNjYXJkX2R5bnB0cihcdTAwMjZwdHJfYnVmLCAwKTtcbkBAIC0xMDEyLDcgJiM0MzsxMDEyLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3RfZHlucHRyX3Byb2JlX3hkcChzdHJ1Y3QgeGRwX21kICp4ZHAsIHZvaWQgKnB0cixcbiBcdFx0aWYgKGxlbiBcdTAwM2Ugc2l6ZW9mKGJ1ZikpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoXHUwMDI2YnVmLCBsZW4sIFx1MDAyNnB0cl94ZHAsIG9mZiwgMCk7XG4tXHRcdGlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSlcbiYjNDM7XHRcdGlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKVxuIFx0XHRcdGVyciA9IDE7XG4gXHRcdC8qIFJlc2V0IGJ1ZmZlciBhbmQgZHlucHRyICovXG4gXHRcdF9fYnVpbHRpbl9tZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7XG5AQCAtMTA0OCw3ICYjNDM7MTA0OCw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X2R5bnB0cl9wcm9iZV9zdHJfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCwgdm9pZCAqXG4gXG4gXHRcdGlmICghbGVuKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoZXJyIHx8IGJwZl9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAmIzM5O1xcMCYjMzk7KVxuJiM0MztcdFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAmIzM5O1xcMCYjMzk7KVxuIFx0XHRcdGVyciA9IDE7XG4gXG4gXHRcdF9fYnVpbHRpbl9tZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmNcbmluZGV4IGJkZGM0ZTg1NzlkMjQ0Li5lNjdmZTk3MDBlNTkzYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmNcbkBAIC05LDYgJiM0Mzs5LDEwIEBAXG4gY2hhciAqdXNlcl9wdHIgPSAoY2hhciAqKTE7XG4gY2hhciAqaW52YWxpZF9rZXJuX3B0ciA9IChjaGFyICopLTE7XG4gXG4mIzQzO2V4dGVybiBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbikgX19rc3ltO1xuJiM0MztleHRlcm4gaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sXG4mIzQzO1x0XHQgICAgICBzaXplX3Qgc2l6ZSkgX19rc3ltO1xuJiM0MztcbiAvKlxuICAqIFdoZW4gcGFzc2luZyB1c2Vyc3BhY2UgcG9pbnRlcnMsIHRoZSBlcnJvciBjb2RlIGRpZmZlcnMgYmFzZWQgb24gYXJjaDpcbiAgKiAgIC1FUkFOR0Ugb24gYXJjaGVzIHdpdGggbm9uLW92ZXJsYXBwaW5nIGFkZHJlc3Mgc3BhY2VzXG5AQCAtNTMsNiAmIzQzOzU3LDEwIEBAIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5zdHJfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVyblxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5zdHJfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybnN0cihcJiMzNDtoZWxsb1wmIzM0OywgTlVMTCwgMSk7IH1cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJuY2FzZXN0cl9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihOVUxMLCBcJiMzNDtoZWxsb1wmIzM0OywgMSk7IH1cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJuY2FzZXN0cl9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihcJiMzNDtoZWxsb1wmIzM0OywgTlVMTCwgMSk7IH1cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3RfbWVtY21wX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChOVUxMLCBcJiMzNDt4XCYjMzQ7LCAxKTsgfVxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKFwmIzM0O3hcJiMzNDssIE5VTEwsIDEpOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cnBicmtfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhOVUxMLCBcJiMzNDt4XCYjMzQ7KTsgfVxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJwYnJrX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXCYjMzQ7eFwmIzM0OywgTlVMTCk7IH1cbiBcbiAvKiBQYXNzaW5nIHVzZXJzcGFjZSBwdHIgdG8gc3RyaW5nIGtmdW5jcyAqL1xuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cmNtcF91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY21wKHVzZXJfcHRyLCBcJiMzNDtoZWxsb1wmIzM0Oyk7IH1cbkBAIC03OSw2ICYjNDM7ODcsMTAgQEAgU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybnN0cl91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJlXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybnN0cl91c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybnN0cihcJiMzNDtoZWxsb1wmIzM0OywgdXNlcl9wdHIsIDEpOyB9XG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKHVzZXJfcHRyLCBcJiMzNDtoZWxsb1wmIzM0OywgMSk7IH1cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl91c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoXCYjMzQ7aGVsbG9cJiMzNDssIHVzZXJfcHRyLCAxKTsgfVxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9tZW1jbXBfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcCh1c2VyX3B0ciwgXCYjMzQ7eFwmIzM0OywgMSk7IH1cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3RfbWVtY21wX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXCYjMzQ7eFwmIzM0OywgdXNlcl9wdHIsIDEpOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cnBicmtfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsodXNlcl9wdHIsIFwmIzM0O3hcJiMzNDspOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cnBicmtfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXCYjMzQ7eFwmIzM0OywgdXNlcl9wdHIpOyB9XG4gXG4gI2VuZGlmIC8qIF9fVEFSR0VUX0FSQ0hfczM5MCAqL1xuIFxuQEAgLTEwNyw1ICYjNDM7MTE5LDkgQEAgU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5zdHJfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5zdHJfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKFwmIzM0O2hlbGxvXCYjMzQ7LCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfVxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKGludmFsaWRfa2Vybl9wdHIsIFwmIzM0O2hlbGxvXCYjMzQ7LCAxKTsgfVxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9wYWdlZmF1bHQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFwmIzM0O2hlbGxvXCYjMzQ7LCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfVxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3RfbWVtY21wX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGludmFsaWRfa2Vybl9wdHIsIFwmIzM0O3hcJiMzNDssIDEpOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9tZW1jbXBfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXCYjMzQ7eFwmIzM0OywgaW52YWxpZF9rZXJuX3B0ciwgMSk7IH1cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cnBicmtfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKGludmFsaWRfa2Vybl9wdHIsIFwmIzM0O3hcJiMzNDspOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJwYnJrX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcJiMzNDt4XCYjMzQ7LCBpbnZhbGlkX2tlcm5fcHRyKTsgfVxuIFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jXG5pbmRleCBmNjViMTIyNmE4MWEzNy4uZTY3YjgwYWIzY2QyYzkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuY1xuQEAgLTcsNiAmIzQzOzcsMTAgQEBcbiBcbiBjaGFyIHN0cltdID0gXCYjMzQ7aGVsbG8gd29ybGRcJiMzNDs7XG4gXG4mIzQzO2V4dGVybiBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbikgX19rc3ltO1xuJiM0MztleHRlcm4gaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sXG4mIzQzO1x0XHQgICAgICBzaXplX3Qgc2l6ZSkgX19rc3ltO1xuJiM0MztcbiAjZGVmaW5lIF9fdGVzdChyZXR2YWwpIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3N1Y2Nlc3MgX19yZXR2YWwocmV0dmFsKVxuIFxuIC8qIEZ1bmN0aW9uYWwgdGVzdHMgKi9cbkBAIC02MCw0ICYjNDM7NjQsMjUgQEAgX190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX25vdGZvdW5kMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXNcbiBfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfbm90Zm91bmQzKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFwmIzM0O1wmIzM0OywgXCYjMzQ7YVwmIzM0OywgMCk7IH1cbiBfX3Rlc3QoMCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfZW1wdHkodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoc3RyLCBcJiMzNDtcJiMzNDssIDEpOyB9XG4gXG4mIzQzOy8qIGJwZl9zdHJwYnJrIC0gZnVuY3Rpb25hbCB0ZXN0cyAqL1xuJiM0MztfX3Rlc3QoMCkgaW50IHRlc3Rfc3RycGJya19mb3VuZF9maXJzdCh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXCYjMzQ7aFwmIzM0Oyk7IH1cbiYjNDM7X190ZXN0KDQpIGludCB0ZXN0X3N0cnBicmtfZm91bmRfbWlkZGxlKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcJiMzNDtvd1wmIzM0Oyk7IH1cbiYjNDM7X190ZXN0KDYpIGludCB0ZXN0X3N0cnBicmtfZm91bmRfbXVsdGlwbGUodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFwmIzM0O3dcJiMzNDspOyB9XG4mIzQzO19fdGVzdCgtRU5PRU5UKSBpbnQgdGVzdF9zdHJwYnJrX25vdGZvdW5kKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcJiMzNDt4eXpcJiMzNDspOyB9XG4mIzQzO19fdGVzdCgtRU5PRU5UKSBpbnQgdGVzdF9zdHJwYnJrX2VtcHR5X2FjY2VwdCh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXCYjMzQ7XCYjMzQ7KTsgfVxuJiM0MztcbiYjNDM7LyogYnBmX21lbWNtcCAtIGZ1bmN0aW9uYWwgdGVzdHMgKi9cbiYjNDM7Y2hhciBkYXRhMVtdID0gXCYjMzQ7aGVsbG8gd29ybGRcJiMzNDs7XG4mIzQzO2NoYXIgZGF0YTJbXSA9IFwmIzM0O2hlbGxvIHdvcmxkXCYjMzQ7O1xuJiM0MztjaGFyIGRhdGEzW10gPSBcJiMzNDtoZWxsbyB3b3JsZVwmIzM0OztcbiYjNDM7X190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTEsIGRhdGEyLCBzaXplb2YoZGF0YTEpKTsgfVxuJiM0MztfX3Rlc3QoLTEpIGludCB0ZXN0X21lbWNtcF9uZXFfbGVzcyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTEsIGRhdGEzLCBzaXplb2YoZGF0YTEpKTsgfVxuJiM0MztfX3Rlc3QoMSkgaW50IHRlc3RfbWVtY21wX25lcV9ncmVhdGVyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMywgZGF0YTEsIHNpemVvZihkYXRhMSkpOyB9XG4mIzQzO19fdGVzdCgwKSBpbnQgdGVzdF9tZW1jbXBfc2l6ZV96ZXJvKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTMsIDApOyB9XG4mIzQzOy8qIG1lbWNtcCBzaG91bGQgTk9UIHN0b3AgYXQgbnVsbCBieXRlIC0gY29tcGFyZSBwYXN0ICYjMzk7XFwwJiMzOTsgKi9cbiYjNDM7Y2hhciBiaW4xW10gPSB7ICYjMzk7YSYjMzk7LCAmIzM5O1xcMCYjMzk7LCAmIzM5O2MmIzM5OyB9O1xuJiM0MztjaGFyIGJpbjJbXSA9IHsgJiMzOTthJiMzOTssICYjMzk7XFwwJiMzOTssICYjMzk7ZCYjMzk7IH07XG4mIzQzO19fdGVzdCgwKSBpbnQgdGVzdF9tZW1jbXBfbnVsbF9ieXRlX2VxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChiaW4xLCBiaW4xLCBzaXplb2YoYmluMSkpOyB9XG4mIzQzO19fdGVzdCgtMSkgaW50IHRlc3RfbWVtY21wX251bGxfYnl0ZV9uZXEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGJpbjEsIGJpbjIsIHNpemVvZihiaW4xKSk7IH1cbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwMzozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9zdHJwYnJrJiMzNDssCiAgICAmIzM0O2JwZl9tZW1jbXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB0d28gbmV3IEJQRiBrZnVuY3MsIGBicGZfc3RycGJya2AgYW5kIGBicGZfbWVtY21wYCwgd2hpY2ggYWxsb3cgQlBGIHByb2dyYW1zIHRvIHBlcmZvcm0gc3RyaW5nIGFuZCBtZW1vcnkgY29tcGFyaXNvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIGhlbHBlciBsaWJyYXJ5IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB2YXJpb3VzIGlucHV0cyBzYWZlbHksIGVzcGVjaWFsbHkgc2luY2UgdGhleSBkZWFsIHdpdGggbWVtb3J5IGFjY2VzcyBhbmQgcG90ZW50aWFsIHBhZ2UgZmF1bHRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzM2RkNTRmMjE5M2Y1NDIxZDE3ZWQ2YWEzNzQ5NTY3ZjM0MzI3NDIyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMjMgMDM6MzQ6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jCmluZGV4IGI1MzE0YzlmZWQzY2YwLi5mMjRjZmRiMjI2MzVjNyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oZWxwZXJzLmMKQEAgLTM5NzEsNiAmIzQzOzM5NzEsMTA5IEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RyY3Nwbihjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKnJlamVjdF9faWduKQogCXJldHVybiAtRUZBVUxUOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYnBmX21lbWNtcCAtIENvbXBhcmUgdHdvIG1lbW9yeSByZWdpb25zIGJ5dGUgYnkgYnl0ZQomIzQzOyAqIEBwdHIxX19pZ246IEZpcnN0IG1lbW9yeSByZWdpb24KJiM0MzsgKiBAcHRyMl9faWduOiBTZWNvbmQgbWVtb3J5IHJlZ2lvbgomIzQzOyAqIEBzaXplOiBOdW1iZXIgb2YgYnl0ZXMgdG8gY29tcGFyZQomIzQzOyAqCiYjNDM7ICogQ29tcGFyZXMgdGhlIGZpcnN0IEBzaXplIGJ5dGVzIG9mIHRoZSBtZW1vcnkgYXJlYXMgQHB0cjFfX2lnbiBhbmQKJiM0MzsgKiBAcHRyMl9faWduLiBVbmxpa2UgYnBmX3N0cmNtcCwgbnVsbCBieXRlcyBkbyBub3QgdGVybWluYXRlIHRoZSBjb21wYXJpc29uLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogJTAgICAgICAgLSBUaGUgbWVtb3J5IHJlZ2lvbnMgYXJlIGVxdWFsCiYjNDM7ICogKiAlLTEgICAgICAtIEBwdHIxX19pZ24gaXMgbGVzcyB0aGFuIEBwdHIyX19pZ24KJiM0MzsgKiAqICUxICAgICAgIC0gQHB0cjFfX2lnbiBpcyBncmVhdGVyIHRoYW4gQHB0cjJfX2lnbgomIzQzOyAqICogJS1FRkFVTFQgLSBDYW5ub3QgcmVhZCBvbmUgb2YgdGhlIG1lbW9yeSByZWdpb25zCiYjNDM7ICogKiAlLUUyQklHICAtIEBzaXplIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCBzaXplCiYjNDM7ICogKiAlLUVSQU5HRSAtIE9uZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbnMgaXMgb3V0c2lkZSBvZiBrZXJuZWwgYWRkcmVzcyBzcGFjZQomIzQzOyAqLwomIzQzOy8qKgomIzQzOyAqIGJwZl9zdHJwYnJrIC0gRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHNldCBvZiBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nCiYjNDM7ICogQHNfX2lnbjogVGhlIHN0cmluZyB0byBiZSBzZWFyY2hlZAomIzQzOyAqIEBhY2NlcHRfX2lnbjogVGhlIHN0cmluZyBjb250YWluaW5nIHRoZSBjaGFyYWN0ZXJzIHRvIHNlYXJjaCBmb3IKJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqICZndDs9MCAgICAgIC0gSW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBAc19faWduIHRoYXQgbWF0Y2hlcyBhbnkKJiM0MzsgKiAgICAgICAgICAgICAgY2hhcmFjdGVyIGluIEBhY2NlcHRfX2lnbgomIzQzOyAqICogJS1FTk9FTlQgLSBObyBjaGFyYWN0ZXIgb2YgQGFjY2VwdF9faWduIGZvdW5kIGluIEBzX19pZ24KJiM0MzsgKiAqICUtRUZBVUxUIC0gQ2Fubm90IHJlYWQgb25lIG9mIHRoZSBzdHJpbmdzCiYjNDM7ICogKiAlLUUyQklHICAtIE9uZSBvZiB0aGUgc3RyaW5ncyBpcyB0b28gbGFyZ2UKJiM0MzsgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBzdHJpbmdzIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbikKJiM0Mzt7CiYjNDM7CWNoYXIgY3MsIGNhOwomIzQzOwlpbnQgaSwgajsKJiM0MzsKJiM0MzsJaWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzX19pZ24sIDEpIHx8CiYjNDM7CSAgICAhY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoYWNjZXB0X19pZ24sIDEpKSB7CiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJfQomIzQzOwomIzQzOwlndWFyZChwYWdlZmF1bHQpKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlpZiAoY3MgPT0gJiMzOTtcMCYjMzk7KQomIzQzOwkJCXJldHVybiAtRU5PRU5UOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBqJiM0MzsmIzQzOykgewomIzQzOwkJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7Y2EsIGFjY2VwdF9faWduICYjNDM7IGosIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJCWlmIChjYSA9PSAmIzM5O1wwJiMzOTspCiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCWlmIChjcyA9PSBjYSkKJiM0MzsJCQkJcmV0dXJuIGk7CiYjNDM7CQl9CiYjNDM7CQlpZiAoaiA9PSBYQVRUUl9TSVpFX01BWCkKJiM0MzsJCQlyZXR1cm4gLUUyQklHOwomIzQzOwkJc19faWduJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gLUUyQklHOwomIzQzO2Vycl9vdXQ6CiYjNDM7CXJldHVybiAtRUZBVUxUOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfbWVtY21wIC0gQ29tcGFyZSB0d28gbWVtb3J5IHJlZ2lvbnMgYnl0ZSBieSBieXRlCiYjNDM7ICogQHB0cjFfX2lnbjogRmlyc3QgbWVtb3J5IHJlZ2lvbgomIzQzOyAqIEBwdHIyX19pZ246IFNlY29uZCBtZW1vcnkgcmVnaW9uCiYjNDM7ICogQHNpemU6IE51bWJlciBvZiBieXRlcyB0byBjb21wYXJlCiYjNDM7ICoKJiM0MzsgKiBDb21wYXJlcyB0aGUgZmlyc3QgQHNpemUgYnl0ZXMgb2YgdGhlIG1lbW9yeSBhcmVhcyBAcHRyMV9faWduIGFuZAomIzQzOyAqIEBwdHIyX19pZ24uIFVubGlrZSBicGZfc3RyY21wLCBudWxsIGJ5dGVzIGRvIG5vdCB0ZXJtaW5hdGUgdGhlIGNvbXBhcmlzb24uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAlMCAgICAgICAtIFRoZSBtZW1vcnkgcmVnaW9ucyBhcmUgZXF1YWwKJiM0MzsgKiAqICUtMSAgICAgIC0gQHB0cjFfX2lnbiBpcyBsZXNzIHRoYW4gQHB0cjJfX2lnbgomIzQzOyAqICogJTEgICAgICAgLSBAcHRyMV9faWduIGlzIGdyZWF0ZXIgdGhhbiBAcHRyMl9faWduCiYjNDM7ICogKiAlLUVGQVVMVCAtIENhbm5vdCByZWFkIG9uZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbnMKJiM0MzsgKiAqICUtRTJCSUcgIC0gQHNpemUgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIHNpemUKJiM0MzsgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBtZW1vcnkgcmVnaW9ucyBpcyBvdXRzaWRlIG9mIGtlcm5lbCBhZGRyZXNzIHNwYWNlCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sCiYjNDM7CQkJICAgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpwMSA9IHB0cjFfX2lnbiwgKnAyID0gcHRyMl9faWduOwomIzQzOwljaGFyIGMxLCBjMjsKJiM0MzsJc2l6ZV90IGk7CiYjNDM7CiYjNDM7CWlmIChzaXplICZndDsgWEFUVFJfU0laRV9NQVgpCiYjNDM7CQlyZXR1cm4gLUUyQklHOwomIzQzOwlpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHAxLCBzaXplKSB8fAomIzQzOwkgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHAyLCBzaXplKSkKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwomIzQzOwlndWFyZChwYWdlZmF1bHQpKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBzaXplOyBpJiM0MzsmIzQzOykgewomIzQzOwkJX19nZXRfa2VybmVsX25vZmF1bHQoJmFtcDtjMSwgcDEgJiM0MzsgaSwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO2MyLCBwMiAmIzQzOyBpLCBjaGFyLCBlcnJfb3V0KTsKJiM0MzsJCWlmIChjMSAhPSBjMikKJiM0MzsJCQlyZXR1cm4gYzEgJmx0OyBjMiA/IC0xIDogMTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0MztlcnJfb3V0OgomIzQzOwlyZXR1cm4gLUVGQVVMVDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9fYnBmX3N0cm5zdHIoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbGVuLAogCQkJIGJvb2wgaWdub3JlX2Nhc2UpCiB7CkBAIC00ODUwLDYgJiM0Mzs0OTUzLDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJsZW4pOwogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJubGVuKTsKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3Ryc3BuKTsKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY3Nwbik7CiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJwYnJrKTsKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX21lbWNtcCk7CiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cnN0cik7CiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNhc2VzdHIpOwogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJuc3RyKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9zdWNjZXNzLmMKaW5kZXggZTBkNjcyZDkzYWRmODUuLjA3MTU4MWZmMDgzM2YzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuYwpAQCAtNjI0LDcgJiM0Mzs2MjQsNyBAQCBpbnQgQlBGX1BST0codGVzdF9keW5wdHJfc2tiX3RwX2J0Ziwgdm9pZCAqc2tiLCB2b2lkICpsb2NhdGlvbikKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYnBmX21lbWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCB1MzIgc2l6ZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBsb2NhbF9tZW1jbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgdTMyIHNpemUpCiB7CiAJaW50IGk7CiAKQEAgLTY1MCwxMiAmIzQzOzY1MCwxMiBAQCBpbnQgdGVzdF9keW5wdHJfY29weSh2b2lkICpjdHgpCiAJZXJyID0gYnBmX2R5bnB0cl93cml0ZSgmYW1wO3NyYywgMCwgZGF0YSwgc3osIDApOwogCWVyciA9IGVyciA/OiBicGZfZHlucHRyX2NvcHkoJmFtcDtkc3QsIDAsICZhbXA7c3JjLCAwLCBzeik7CiAJZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChidWYsIHN6LCAmYW1wO2RzdCwgMCwgMCk7Ci0JZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBzeik7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBzeik7CiAKIAkvKiBUZXN0IHRoYXQgb2Zmc2V0cyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgKi8KIAllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9jb3B5KCZhbXA7ZHN0LCAzLCAmYW1wO3NyYywgNSwgc3ogLSA1KTsKIAllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKGJ1Ziwgc3ogLSA1LCAmYW1wO2RzdCwgMywgMCk7Ci0JZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZGF0YSAmIzQzOyA1LCBidWYsIHN6IC0gNSk7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZGF0YSAmIzQzOyA1LCBidWYsIHN6IC0gNSk7CiAKIAlicGZfcmluZ2J1Zl9kaXNjYXJkX2R5bnB0cigmYW1wO3NyYywgMCk7CiAJYnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoJmFtcDtkc3QsIDApOwpAQCAtNjkyLDcgJiM0Mzs2OTIsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKQogCQllcnIgPSBicGZfZHlucHRyX3JlYWQoJmFtcDtidWYsIGxlbiwgJmFtcDtwdHJfeGRwLCBpICogbGVuLCAwKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwotCQlpZiAoYnBmX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMCkKJiM0MzsJCWlmIChsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApCiAJCQlnb3RvIG91dDsKIAl9CiAKQEAgLTcxMyw3ICYjNDM7NzEzLDcgQEAgaW50IHRlc3RfZHlucHRyX2NvcHlfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCkKIAkJZXJyID0gYnBmX2R5bnB0cl9yZWFkKCZhbXA7YnVmLCBsZW4sICZhbXA7cHRyX2J1ZiwgaSAqIGxlbiwgMCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKLQkJaWYgKGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApCiYjNDM7CQlpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKQogCQkJZ290byBvdXQ7CiAJfQogCkBAIC03MjcsNyAmIzQzOzcyNyw3IEBAIGludCB0ZXN0X2R5bnB0cl9jb3B5X3hkcChzdHJ1Y3QgeGRwX21kICp4ZHApCiAJCWVyciA9IGJwZl9keW5wdHJfcmVhZCgmYW1wO2J1ZiwgbGVuLCAmYW1wO3B0cl94ZHAsIDIgJiM0MzsgaSAqIGxlbiwgMCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKLQkJaWYgKGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApCiYjNDM7CQlpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKQogCQkJZ290byBvdXQ7CiAJfQogCkBAIC03NTAsNyAmIzQzOzc1MCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfemVybyh2b2lkICpjdHgpCiAKIAllcnIgPSBicGZfZHlucHRyX2Zyb21fbWVtKG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3osIDAsICZhbXA7cHRyKTsKIAllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoJmFtcDtwdHIsIDAsIGRhdGFfc3osIDApOwotCWVyciA9IGVyciA/OiBicGZfbWVtY21wKHplcm9lcywgbWVtc2V0X3plcm9fZGF0YSwgZGF0YV9zeik7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoemVyb2VzLCBtZW1zZXRfemVyb19kYXRhLCBkYXRhX3N6KTsKIAogCXJldHVybiAwOwogfQpAQCAtNzcwLDcgJiM0Mzs3NzAsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X25vdHplcm8odm9pZCAqY3R4KQogCiAJZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfbm90emVyb19kYXRhLCBkYXRhX3N6LCAwLCAmYW1wO3B0cik7CiAJZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KCZhbXA7cHRyLCAwLCBkYXRhX3N6LCBEWU5QVFJfTUVNU0VUX1ZBTCk7Ci0JZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF9ub3R6ZXJvX2RhdGEsIGRhdGFfc3opOwomIzQzOwllcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfbm90emVyb19kYXRhLCBkYXRhX3N6KTsKIAogCXJldHVybiAwOwogfQpAQCAtNzg2LDcgJiM0Mzs3ODYsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm9fb2Zmc2V0KHZvaWQgKmN0eCkKIAogCWVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X3plcm9fb2Zmc2V0X2RhdGEsIGRhdGFfc3osIDAsICZhbXA7cHRyKTsKIAllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoJmFtcDtwdHIsIDgsIDQsIDApOwotCWVyciA9IGVyciA/OiBicGZfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfemVyb19vZmZzZXRfZGF0YSwgZGF0YV9zeik7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX29mZnNldF9kYXRhLCBkYXRhX3N6KTsKIAogCXJldHVybiAwOwogfQpAQCAtODAzLDcgJiM0Mzs4MDMsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm9fYWRqdXN0ZWQodm9pZCAqY3R4KQogCWVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeiwgMCwgJmFtcDtwdHIpOwogCWVyciA9IGVyciA/OiBicGZfZHlucHRyX2FkanVzdCgmYW1wO3B0ciwgNCwgOCk7CiAJZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KCZhbXA7cHRyLCAwLCBicGZfZHlucHRyX3NpemUoJmFtcDtwdHIpLCAwKTsKLQllcnIgPSBlcnIgPzogYnBmX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeik7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX2FkanVzdGVkX2RhdGEsIGRhdGFfc3opOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04OTgsNyAmIzQzOzg5OCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfeGRwX2NodW5rcyhzdHJ1Y3QgeGRwX21kICp4ZHApCiAJCWVyciA9IGJwZl9keW5wdHJfcmVhZCgmYW1wO2J1ZiwgY2h1bmtfc3osICZhbXA7cHRyX3hkcCwgb2Zmc2V0LCAwKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwotCQllcnIgPSBicGZfbWVtY21wKGJ1ZiwgZXhwZWN0ZWRfYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CQllcnIgPSBsb2NhbF9tZW1jbXAoYnVmLCBleHBlY3RlZF9idWYsIHNpemVvZihidWYpKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTk1Miw3ICYjNDM7OTUyLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3RfZHlucHRyX3Byb2JlKHZvaWQgKnB0ciwgYnBmX3JlYWRfZHlucHRyX2ZuX3QgYnAKIAkJCWJyZWFrOwogCQllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKCZhbXA7YnVmLCBsZW4sICZhbXA7cHRyX2J1ZiwgMCwgMCk7CiAKLQkJaWYgKGVyciB8fCBicGZfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKQomIzQzOwkJaWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbikpCiAJCQllcnIgPSAxOwogCiAJCS8qIFJlc2V0IGJ1ZmZlciBhbmQgZHlucHRyICovCkBAIC05ODYsNyAmIzQzOzk4Niw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X2R5bnB0cl9wcm9iZV9zdHIodm9pZCAqcHRyLAogCQllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKCZhbXA7YnVmLCBsZW4sICZhbXA7cHRyX2J1ZiwgMCwgMCk7CiAJCWlmICghbGVuKQogCQkJY29udGludWU7Ci0JCWlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICYjMzk7XDAmIzM5OykKJiM0MzsJCWlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4gLSAxKSB8fCBidWZbbGVuIC0gMV0gIT0gJiMzOTtcMCYjMzk7KQogCQkJZXJyID0gMTsKIAl9CiAJYnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoJmFtcDtwdHJfYnVmLCAwKTsKQEAgLTEwMTIsNyAmIzQzOzEwMTIsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCwgdm9pZCAqcHRyLAogCQlpZiAobGVuICZndDsgc2l6ZW9mKGJ1ZikpCiAJCQljb250aW51ZTsKIAkJZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZCgmYW1wO2J1ZiwgbGVuLCAmYW1wO3B0cl94ZHAsIG9mZiwgMCk7Ci0JCWlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSkKJiM0MzsJCWlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKQogCQkJZXJyID0gMTsKIAkJLyogUmVzZXQgYnVmZmVyIGFuZCBkeW5wdHIgKi8KIAkJX19idWlsdGluX21lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKQEAgLTEwNDgsNyAmIzQzOzEwNDgsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfc3RyX3hkcChzdHJ1Y3QgeGRwX21kICp4ZHAsIHZvaWQgKgogCiAJCWlmICghbGVuKQogCQkJY29udGludWU7Ci0JCWlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICYjMzk7XDAmIzM5OykKJiM0MzsJCWlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4gLSAxKSB8fCBidWZbbGVuIC0gMV0gIT0gJiMzOTtcMCYjMzk7KQogCQkJZXJyID0gMTsKIAogCQlfX2J1aWx0aW5fbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMKaW5kZXggYmRkYzRlODU3OWQyNDQuLmU2N2ZlOTcwMGU1OTNjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMKQEAgLTksNiAmIzQzOzksMTAgQEAKIGNoYXIgKnVzZXJfcHRyID0gKGNoYXIgKikxOwogY2hhciAqaW52YWxpZF9rZXJuX3B0ciA9IChjaGFyICopLTE7CiAKJiM0MztleHRlcm4gaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pIF9fa3N5bTsKJiM0MztleHRlcm4gaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sCiYjNDM7CQkgICAgICBzaXplX3Qgc2l6ZSkgX19rc3ltOwomIzQzOwogLyoKICAqIFdoZW4gcGFzc2luZyB1c2Vyc3BhY2UgcG9pbnRlcnMsIHRoZSBlcnJvciBjb2RlIGRpZmZlcnMgYmFzZWQgb24gYXJjaDoKICAqICAgLUVSQU5HRSBvbiBhcmNoZXMgd2l0aCBub24tb3ZlcmxhcHBpbmcgYWRkcmVzcyBzcGFjZXMKQEAgLTUzLDYgJiM0Mzs1NywxMCBAQCBTRUMoJiMzNDtzeXNjYWxsJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybnN0cl9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybnN0cl9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKCYjMzQ7aGVsbG8mIzM0OywgTlVMTCwgMSk7IH0KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJuY2FzZXN0cl9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihOVUxMLCAmIzM0O2hlbGxvJiMzNDssIDEpOyB9CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybmNhc2VzdHJfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoJiMzNDtoZWxsbyYjMzQ7LCBOVUxMLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKE5VTEwsICYjMzQ7eCYjMzQ7LCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKCYjMzQ7eCYjMzQ7LCBOVUxMLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJwYnJrX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoTlVMTCwgJiMzNDt4JiMzNDspOyB9CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cnBicmtfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyaygmIzM0O3gmIzM0OywgTlVMTCk7IH0KIAogLyogUGFzc2luZyB1c2Vyc3BhY2UgcHRyIHRvIHN0cmluZyBrZnVuY3MgKi8KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJjbXBfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcCh1c2VyX3B0ciwgJiMzNDtoZWxsbyYjMzQ7KTsgfQpAQCAtNzksNiAmIzQzOzg3LDEwIEBAIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuc3RyX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmUKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuc3RyX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKCYjMzQ7aGVsbG8mIzM0OywgdXNlcl9wdHIsIDEpOyB9CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKHVzZXJfcHRyLCAmIzM0O2hlbGxvJiMzNDssIDEpOyB9CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKCYjMzQ7aGVsbG8mIzM0OywgdXNlcl9wdHIsIDEpOyB9CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X21lbWNtcF91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKHVzZXJfcHRyLCAmIzM0O3gmIzM0OywgMSk7IH0KJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3RfbWVtY21wX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoJiMzNDt4JiMzNDssIHVzZXJfcHRyLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJwYnJrX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHVzZXJfcHRyLCAmIzM0O3gmIzM0Oyk7IH0KJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RycGJya191c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyaygmIzM0O3gmIzM0OywgdXNlcl9wdHIpOyB9CiAKICNlbmRpZiAvKiBfX1RBUkdFVF9BUkNIX3MzOTAgKi8KIApAQCAtMTA3LDUgJiM0MzsxMTksOSBAQCBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5zdHJfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5zdHJfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKCYjMzQ7aGVsbG8mIzM0OywgaW52YWxpZF9rZXJuX3B0ciwgMSk7IH0KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihpbnZhbGlkX2tlcm5fcHRyLCAmIzM0O2hlbGxvJiMzNDssIDEpOyB9CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoJiMzNDtoZWxsbyYjMzQ7LCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3RfbWVtY21wX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGludmFsaWRfa2Vybl9wdHIsICYjMzQ7eCYjMzQ7LCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3RfbWVtY21wX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKCYjMzQ7eCYjMzQ7LCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RycGJya19wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoaW52YWxpZF9rZXJuX3B0ciwgJiMzNDt4JiMzNDspOyB9CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJwYnJrX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyaygmIzM0O3gmIzM0OywgaW52YWxpZF9rZXJuX3B0cik7IH0KIAogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jCmluZGV4IGY2NWIxMjI2YTgxYTM3Li5lNjdiODBhYjNjZDJjOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYwpAQCAtNyw2ICYjNDM7NywxMCBAQAogCiBjaGFyIHN0cltdID0gJiMzNDtoZWxsbyB3b3JsZCYjMzQ7OwogCiYjNDM7ZXh0ZXJuIGludCBicGZfc3RycGJyayhjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKSBfX2tzeW07CiYjNDM7ZXh0ZXJuIGludCBicGZfbWVtY21wKGNvbnN0IHZvaWQgKnB0cjFfX2lnbiwgY29uc3Qgdm9pZCAqcHRyMl9faWduLAomIzQzOwkJICAgICAgc2l6ZV90IHNpemUpIF9fa3N5bTsKJiM0MzsKICNkZWZpbmUgX190ZXN0KHJldHZhbCkgU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBfX3N1Y2Nlc3MgX19yZXR2YWwocmV0dmFsKQogCiAvKiBGdW5jdGlvbmFsIHRlc3RzICovCkBAIC02MCw0ICYjNDM7NjQsMjUgQEAgX190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX25vdGZvdW5kMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXMKIF9fdGVzdCgtRU5PRU5UKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9ub3Rmb3VuZDModm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoJiMzNDsmIzM0OywgJiMzNDthJiMzNDssIDApOyB9CiBfX3Rlc3QoMCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfZW1wdHkodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoc3RyLCAmIzM0OyYjMzQ7LCAxKTsgfQogCiYjNDM7LyogYnBmX3N0cnBicmsgLSBmdW5jdGlvbmFsIHRlc3RzICovCiYjNDM7X190ZXN0KDApIGludCB0ZXN0X3N0cnBicmtfZm91bmRfZmlyc3Qodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsICYjMzQ7aCYjMzQ7KTsgfQomIzQzO19fdGVzdCg0KSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX21pZGRsZSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgJiMzNDtvdyYjMzQ7KTsgfQomIzQzO19fdGVzdCg2KSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX211bHRpcGxlKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCAmIzM0O3cmIzM0Oyk7IH0KJiM0MztfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RycGJya19ub3Rmb3VuZCh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgJiMzNDt4eXomIzM0Oyk7IH0KJiM0MztfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RycGJya19lbXB0eV9hY2NlcHQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsICYjMzQ7JiMzNDspOyB9CiYjNDM7CiYjNDM7LyogYnBmX21lbWNtcCAtIGZ1bmN0aW9uYWwgdGVzdHMgKi8KJiM0MztjaGFyIGRhdGExW10gPSAmIzM0O2hlbGxvIHdvcmxkJiMzNDs7CiYjNDM7Y2hhciBkYXRhMltdID0gJiMzNDtoZWxsbyB3b3JsZCYjMzQ7OwomIzQzO2NoYXIgZGF0YTNbXSA9ICYjMzQ7aGVsbG8gd29ybGUmIzM0OzsKJiM0MztfX3Rlc3QoMCkgaW50IHRlc3RfbWVtY21wX2VxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTIsIHNpemVvZihkYXRhMSkpOyB9CiYjNDM7X190ZXN0KC0xKSBpbnQgdGVzdF9tZW1jbXBfbmVxX2xlc3Modm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGRhdGExLCBkYXRhMywgc2l6ZW9mKGRhdGExKSk7IH0KJiM0MztfX3Rlc3QoMSkgaW50IHRlc3RfbWVtY21wX25lcV9ncmVhdGVyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMywgZGF0YTEsIHNpemVvZihkYXRhMSkpOyB9CiYjNDM7X190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9zaXplX3plcm8odm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGRhdGExLCBkYXRhMywgMCk7IH0KJiM0MzsvKiBtZW1jbXAgc2hvdWxkIE5PVCBzdG9wIGF0IG51bGwgYnl0ZSAtIGNvbXBhcmUgcGFzdCAmIzM5O1wwJiMzOTsgKi8KJiM0MztjaGFyIGJpbjFbXSA9IHsgJiMzOTthJiMzOTssICYjMzk7XDAmIzM5OywgJiMzOTtjJiMzOTsgfTsKJiM0MztjaGFyIGJpbjJbXSA9IHsgJiMzOTthJiMzOTssICYjMzk7XDAmIzM5OywgJiMzOTtkJiMzOTsgfTsKJiM0MztfX3Rlc3QoMCkgaW50IHRlc3RfbWVtY21wX251bGxfYnl0ZV9lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoYmluMSwgYmluMSwgc2l6ZW9mKGJpbjEpKTsgfQomIzQzO19fdGVzdCgtMSkgaW50IHRlc3RfbWVtY21wX251bGxfYnl0ZV9uZXEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGJpbjEsIGJpbjIsIHNpemVvZihiaW4xKSk7IH0KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA2OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgS2Z1bmMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgdHdvIG5ldyBCUEYga2Z1bmNzOiBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAuIEkgc2VlIHRoYXQgdGhleSYjMzk7cmUgaW1wbGVtZW50ZWQgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYCBhbmQgcmVnaXN0ZXJlZCB1c2luZyBgQlRGX0lEX0ZMQUdTYC4gR29vZCwgc3RhbmRhcmQgcHJhY3RpY2UgdGhlcmUuIEkgYWxzbyBzZWUgdGhhdCB0aGVyZSYjMzk7cyBiZWVuIHNvbWUgcmVuYW1pbmcgb2YgYW4gZXhpc3RpbmcgYGJwZl9tZW1jbXBgIHRvIGBsb2NhbF9tZW1jbXBgIGluIGBkeW5wdHJfc3VjY2Vzcy5jYCB0byBhdm9pZCBhIG5hbWUgY29sbGlzaW9uLiBUaGF0JiMzOTtzIHBydWRlbnQ7IGl0IGF2b2lkcyBwb3RlbnRpYWwgaGVhZGFjaGVzIGxhdGVyLiBBbmQgaXQgbG9va3MgbGlrZSBwcm9wZXIgdGVzdCBjb3ZlcmFnZSBoYXMgYmVlbiBhZGRlZC4gVGhlcmUgYXJlIGZhaWx1cmUgY2FzZXMgaW4gYHN0cmluZ19rZnVuY3NfZmFpbHVyZTEuY2AgYW5kIHN1Y2Nlc3MgY2FzZXMgaW4gYHN0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jYC4gTmljZS4KClRoZSBmYWN0IHRoYXQgdGhpcyBhZGRzIG5ldywgY2FsbGFibGUga2Z1bmNzIG1lYW5zIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgQlBGIGluZnJhc3RydWN0dXJlLCBhbmQgSSBuZWVkIHRvIHRyZWF0IGl0IGFzIHN1Y2guIFRoaXMgc2NyZWFtcyAmIzM0O2Z1enppbmcgY2FuZGlkYXRlLiYjMzQ7IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIG5ldyBmdW5jdGlvbnMgYXJlIHJvYnVzdC4KCkxldCYjMzk7cyBkaXZlIGludG8gYGtlcm5lbC9icGYvaGVscGVycy5jYCBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIG9yIGFueXRoaW5nIHVuZXhwZWN0ZWQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBncmVwIGZvciBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAgd2l0aGluIHRoYXQgZmlsZSB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiB0aGVpciBpbmNsdXNpb24gYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG1heSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zdHJwYnJrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9Mzk0Mz1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICpyZWplY3RfX2lnbilcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zOTkxLS8qKlxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzk5MjogKiBicGZfc3RycGJyayAtIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzZXQgb2YgY2hhcmFjdGVycyBpbiBhIHN0cmluZ1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMzk5My0gKiBAc19faWduOiBUaGUgc3RyaW5nIHRvIGJlIHNlYXJjaGVkXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDAwMy0gKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjQwMDQ6X19icGZfa2Z1bmMgaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MDA1LXtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTU1PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY3Nwbik7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTU2OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RycGJyayk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTU3LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbWVtY21wKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTg3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgcHJvbXB0OgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIEtlcm5lbCBCUEYgTGFuZHNjYXBlKioKCkFscmlnaHQsIHRoZSBkaXJlY3RpdmUgaXMgdG8gbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AuIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMuIEJQRiwgdGhlIEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIsIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IG9mIG1vZGVybiBMaW51eCBzeXN0ZW1zLCBhbGxvd2luZyBmb3IgaW4ta2VybmVsIGV4ZWN1dGlvbiBvZiBieXRlY29kZS4gSXQmIzM5O3MgdXNlZCBmb3IgZXZlcnl0aGluZyBmcm9tIG5ldHdvcmsgZmlsdGVyaW5nIGFuZCBzZWN1cml0eSBtb25pdG9yaW5nIHRvIHRyYWNpbmcgYW5kIHBlcmZvcm1hbmNlIGFuYWx5c2lzLiBgaGVscGVycy5jYCBpcyBsaWtlbHkgd2hlcmUgdGhlIEJQRiBoZWxwZXIgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCwgdGhlIGxvdy1sZXZlbCBmdW5jdGlvbnMgdGhhdCBCUEYgcHJvZ3JhbXMgY2FsbCB0byBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbHJlYWR5IGtub3cgYSBmYWlyIGJpdCBhYm91dCBob3cgdGhpcyB3b3JrcywgYW5kIGhhdmUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBhbmQgcGVyZm9ybWFuY2UgdHJhZGUtb2Zmcy4KCkkmIzM5O2Qgd2FudCB0byBleGFtaW5lIGFueSBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgaW5mbHVlbmNlIGhvdyB0aGVzZSBoZWxwZXJzIGFyZSBjb21waWxlZCwgZW5hYmxlZCwgb3IgZXhwb3NlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtkIGltbWVkaWF0ZWx5IGJlIGxvb2tpbmcgZm9yOgoKKiAgICoqQ29tcGlsZXIgRmxhZ3MqKjogSG93IHRoZSBjb2RlIGlzIGNvbXBpbGVkLiBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbiBmbGFncyB0aGF0IGNvdWxkIGFmZmVjdCBwZXJmb3JtYW5jZSBvciBjb2RlIHNpemU/IEFyZSB0aGVyZSBzZWN1cml0eSBoYXJkZW5pbmcgb3B0aW9ucyBiZWluZyB1c2VkLCBzdWNoIGFzIGAtZnN0YWNrLXByb3RlY3RvcmA/IEFyZSB0aGVyZSBjb21waWxlciBmbGFncyBzcGVjaWZpY2FsbHkgZm9yIEJQRiwgbGlrZSB0aG9zZSBjb250cm9sbGluZyB2ZXJpZmllciBiZWhhdmlvciBvciBkZWJ1Z2dpbmcgb3V0cHV0PwoqICAgKipLY29uZmlnIE9wdGlvbnMqKjogVGhlIEtjb25maWcgZmlsZSAobGlrZWx5IGluIHRoZSBzYW1lIGRpcmVjdG9yeSBvciBhIHBhcmVudCBvbmUpIHdvdWxkIGJlIG15IG5leHQgc3RvcC4gSXQgZGljdGF0ZXMgd2hhdCBmZWF0dXJlcyBhcmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBXaGF0IEtjb25maWcgb3B0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSBCUEYgZnVuY3Rpb25hbGl0eSBvciBoZWxwZXIgZnVuY3Rpb25zPyBXaGF0IGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMgYW5kIHdoYXQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBtaWdodCBhZmZlY3QgaG93IHRoZSBoZWxwZXJzIGFyZSB1c2VkPwoqICAgKipNb2R1bGUgQ29uZmlndXJhdGlvbioqOiBJZiB0aGUgaGVscGVycyBhcmUgY29tcGlsZWQgYXMgYSBtb2R1bGUsIHdoYXQgYXJlIHRoZSByZWxldmFudCBtb2R1bGUgcGFyYW1ldGVycz8gSG93IGFyZSB0aGV5IGxvYWRlZCBhbmQgdW5sb2FkZWQ/IFdoYXQmIzM5O3MgdGhlIG1vZHVsZSYjMzk7cyBkZXBlbmRlbmNpZXMsIGlmIGFueSwgdGhhdCB3b3VsZCBpbmZsdWVuY2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGhlbHBlciBmdW5jdGlvbnM/CiogICAqKlNlY3VyaXR5IE1lY2hhbmlzbXMqKjogQXJlIHRoZXJlIGFueSBzZWN1cml0eS1yZWxhdGVkIEtjb25maWcgb3B0aW9ucyB0aGF0IHJlc3RyaWN0IHRoZSBjYXBhYmlsaXRpZXMgb2YgQlBGIHByb2dyYW1zIG9yIHRoZSBoZWxwZXIgZnVuY3Rpb25zPyBJcyB0aGUgQlBGIHZlcmlmaWVyIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgc2VjdXJlbHk/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgc2V0dGluZ3MgZm9yIHRoZSB1c2Ugb2YgQlBGIGluIHNwZWNpZmljIGNvbnRleHRzLCBzdWNoIGFzIGNvbnRhaW5lciBlbnZpcm9ubWVudHM/CiogICAqKkJ1aWxkIFN5c3RlbSBTZXR0aW5ncyoqOiBIb3cgZG9lcyB0aGUgYnVpbGQgc3lzdGVtIChlLmcuLCBgbWFrZWApIGhhbmRsZSB0aGUgY29tcGlsYXRpb24gYW5kIGxpbmtpbmcgb2YgdGhpcyBjb2RlPyBBcmUgdGhlcmUgYW55IHNwZWNpYWwgdGFyZ2V0cyBvciBydWxlcyBmb3IgQlBGLXJlbGF0ZWQgY29kZT8gQXJlIHRoZXJlIGFueSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3Igb3RoZXIgc2V0dGluZ3MgdGhhdCBjb3VsZCBhZmZlY3QgaG93IGl0JiMzOTtzIGJ1aWx0IG9yIGNvbmZpZ3VyZWQ/CiogICAqKkRvY3VtZW50YXRpb24qKjogT2YgY291cnNlLCBhbnkgZG9jdW1lbnRhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBzcGVjaWZpYyBmaWxlIG9yIHRoZSBCUEYgc3lzdGVtIHdvdWxkIGJlIGhlbHBmdWwgdG8gdW5kZXJzdGFuZCBhbnkgY2F2ZWF0cyBvciBhc3N1bXB0aW9ucyByZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb25zLgoKRXNzZW50aWFsbHksIEkgd2FudCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBidWlsZCBlbnZpcm9ubWVudCBhbmQgdGhlIHBvdGVudGlhbCBpbmZsdWVuY2Ugb24gdGhlIGJlaGF2aW9yIG9mIGBoZWxwZXJzLmNgIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgdHJvdWJsZXNob290aW5nLCB1bmRlcnN0YW5kaW5nIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgYW5kIG9wdGltaXppbmcgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jPTI3Nj1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9jdXJyZW50X2NvbW1fcHJvdG8gPSB7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjgzLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mjg0OiNpZiBkZWZpbmVkKENPTkZJR19RVUVVRURfU1BJTkxPQ0tTKSB8fCBkZWZpbmVkKENPTkZJR19CUEZfQVJDSF9TUElOTE9DSylcbmtlcm5lbC9icGYvaGVscGVycy5jLTI4NS1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0zOTk9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9qaWZmaWVzNjRfcHJvdG8gPSB7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDA0LVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDA1OiNpZmRlZiBDT05GSUdfQ0dST1VQU1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDA2LUJQRl9DQUxMXzAoYnBmX2dldF9jdXJyZW50X2Nncm91cF9pZClcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00NDA9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfY3VycmVudF9hbmNlc3Rvcl9jZ3JvdXBfaWRfcHJvdG8gPSB7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ1LX07XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDY6I2VuZGlmIC8qIENPTkZJR19DR1JPVVBTICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDctXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NzQ0PXN0YXRpYyBpbnQgYnBmX3RyYWNlX2NvcHlfc3RyaW5nKGNoYXIgKmJ1Ziwgdm9pZCAqdW5zYWZlX3B0ciwgY2hhciBmbXRfcHR5cGUsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNzUyLVx0Y2FzZSAmIzM5O3MmIzM5Ozpcbmtlcm5lbC9icGYvaGVscGVycy5jOjc1MzojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX05PTl9PVkVSTEFQUElOR19BRERSRVNTX1NQQUNFXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy03NTQtXHRcdGlmICgodW5zaWduZWQgbG9uZyl1bnNhZmVfcHRyIFx1MDAzYyBUQVNLX1NJWkUpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9MjA2Nz1icGZfYmFzZV9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTIxNjctXHRcdHJldHVybiBcdTAwMjZicGZfZHlucHRyX2RhdGFfcHJvdG87XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyMTY4OiNpZmRlZiBDT05GSUdfQ0dST1VQU1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMjE2OS1cdGNhc2UgQlBGX0ZVTkNfY2dycF9zdG9yYWdlX2dldDpcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMTc5LSNlbmRpZlxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjE4MDojaWZkZWYgQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjE4MS1cdGNhc2UgQlBGX0ZVTkNfZ2V0X2Nncm91cF9jbGFzc2lkOlxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTI3NTM9Q0ZJX05PU0VBTChicGZfdGFza19yZWxlYXNlX2R0b3IpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMjc1NC1cbmtlcm5lbC9icGYvaGVscGVycy5jOjI3NTU6I2lmZGVmIENPTkZJR19DR1JPVVBTXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNzU2LS8qKlxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTI4NzY9YnBmX3Rhc2tfZ2V0X2Nncm91cDEoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgaGllcmFyY2h5X2lkKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTI4ODMtfVxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mjg4NDojZW5kaWYgLyogQ09ORklHX0NHUk9VUFMgKi9cbmtlcm5lbC9icGYvaGVscGVycy5jLTI4ODUtXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9MzI4OT1fX2JwZl9rZnVuYyB2b2lkIGJwZl90aHJvdyh1NjQgY29va2llKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTMyOTgtXHRXQVJOX09OX09OQ0UoIWN0eC5jbnQpO1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MzI5OTpcdC8qIFByZXZlbnQgS0FTQU4gZmFsc2UgcG9zaXRpdmVzIGZvciBDT05GSUdfS0FTQU5fU1RBQ0sgYnkgdW5wb2lzb25pbmdcbmtlcm5lbC9icGYvaGVscGVycy5jLTMzMDAtXHQgKiBkZWVwZXIgc3RhY2sgZGVwdGhzIHRoYW4gY3R4LnNwIGFzIHdlIGRvIG5vdCByZXR1cm4gZnJvbSBicGZfdGhyb3csXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDE5Nj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cm5jYXNlc3RyKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24sXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDIwMS1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQyMDI6I2lmZGVmIENPTkZJR19LRVlTXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MjAzLS8qKlxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQzMjA9X19icGZfa2Z1bmMgaW50IGJwZl92ZXJpZnlfcGtjczdfc2lnbmF0dXJlKHN0cnVjdCBicGZfZHlucHRyICpkYXRhX3AsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDMyMy17XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzI0OiNpZmRlZiBDT05GSUdfU1lTVEVNX0RBVEFfVkVSSUZJQ0FUSU9OXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MzI1LVx0c3RydWN0IGJwZl9keW5wdHJfa2VybiAqZGF0YV9wdHIgPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRhdGFfcDtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MzYwLVx0cmV0dXJuIC1FT1BOT1RTVVBQO1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDM2MTojZW5kaWYgLyogQ09ORklHX1NZU1RFTV9EQVRBX1ZFUklGSUNBVElPTiAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDM2Mi19XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzYzOiNlbmRpZiAvKiBDT05GSUdfS0VZUyAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDM2NC1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODA2PUJURl9LRlVOQ1NfU1RBUlQoZ2VuZXJpY19idGZfaWRzKVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDgwNzojaWZkZWYgQ09ORklHX0NSQVNIX0RVTVBcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4MDgtQlRGX0lEX0ZMQUdTKGZ1bmMsIGNyYXNoX2tleGVjLCBLRl9ERVNUUlVDVElWRSlcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODM2PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmJ0cmVlX3JpZ2h0LCBLRl9SRVRfTlVMTClcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4MzctXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODM4OiNpZmRlZiBDT05GSUdfQ0dST1VQU1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDgzOS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2Nncm91cF9hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkNVIHwgS0ZfUkVUX05VTEwpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDg0OD1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rocm93KVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDg0OTojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4NTAtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zZW5kX3NpZ25hbF90YXNrKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDg1MS0jZW5kaWZcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4NTI6I2lmZGVmIENPTkZJR19LRVlTXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODUzLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbG9va3VwX3VzZXJfa2V5LCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDg1NT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2tleV9wdXQsIEtGX1JFTEVBU0UpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODU2OiNpZmRlZiBDT05GSUdfU1lTVEVNX0RBVEFfVkVSSUZJQ0FUSU9OXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODU3LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfdmVyaWZ5X3BrY3M3X3NpZ25hdHVyZSwgS0ZfU0xFRVBBQkxFKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4NTktI2VuZGlmXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODYwOiNpZmRlZiBDT05GSUdfUzM5MFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDg2MS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2dldF9sb3djb3JlKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4NzM9QlRGX0lEKGZ1bmMsIGJwZl90YXNrX3JlbGVhc2VfZHRvcilcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4NzQ6I2lmZGVmIENPTkZJR19DR1JPVVBTXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODc1LUJURl9JRChzdHJ1Y3QsIGNncm91cClcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODkxPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODkyOiNpZmRlZiBDT05GSUdfQ0dST1VQU1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDg5My1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfY3NzX3Rhc2tfbmV3LCBLRl9JVEVSX05FVylcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTA5PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfZHlucHRyX21lbXNldClcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5MTA6I2lmZGVmIENPTkZJR19ORVRcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MTEtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9tb2RpZnlfcmV0dXJuX3Rlc3RfdHApXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDkyOD1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2xvY2FsX2lycV9yZXN0b3JlKVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDkyOTojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MzAtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9wcm9iZV9yZWFkX3VzZXJfZHlucHRyKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ5Mzc9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cl9keW5wdHIsIEtGX1NMRUVQQUJMRSlcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MzgtI2VuZGlmXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTM5OiNpZmRlZiBDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVJcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NDAtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2RtYWJ1Zl9uZXcsIEtGX0lURVJfTkVXIHwgS0ZfU0xFRVBBQkxFKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ5NjE9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJuY2FzZXN0cik7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTYyOiNpZiBkZWZpbmVkKENPTkZJR19CUEZfTFNNKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ0dST1VQUylcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NjMtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jZ3JvdXBfcmVhZF94YXR0ciwgS0ZfUkNVKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ5Nzk9c3RhdGljIGludCBfX2luaXQga2Z1bmNfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5ODYtXHRcdH0sXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTg3OiNpZmRlZiBDT05GSUdfQ0dST1VQU1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk4OC1cdFx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTcxCgkJCQkJCQlvdXRwdXQ6IDEyNAoJCQkJCQkJdGhvdWdodHM6IDQ4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBOZXcgQlBGIEtmdW5jcyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIG5ldyBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAga2Z1bmNzIGFyZSBiZWluZyBhZGRlZCB0byB0aGUgZ2VuZXJpYyBCVEYga2Z1bmNzLCB3aGljaCBtZWFucyB0aGV5JiMzOTtyZSBhdXRvbWF0aWNhbGx5IGF2YWlsYWJsZSBpZiBCUEYgaXMgZW5hYmxlZC4gTm8gc3BlY2lmaWMgY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIGJleW9uZCB0aGUgc3RhbmRhcmQgQlBGIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBpcyBhcyBleHBlY3RlZC4KCk15IGZvY3VzIGlzIG5hdHVyYWxseSBvbiB0aGVzZSB0d28gZnVuY3Rpb25zOiBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAuIEkgbmVlZCB0byBlbnN1cmUgdGhleSYjMzk7cmUgcm9idXN0LiBUaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIHRoZXNlIGZ1bmN0aW9ucyB3aXRoaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgb2YgQlBGIGhlbHBlciBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyBhbHNvIHJlbmFtaW5nIGBicGZfbWVtY21wYCB0byBgbG9jYWxfbWVtY21wYCBpbiBhIHRlc3QgZmlsZSwgc28gSSBuZWVkIHRvIGFjY291bnQgZm9yIHRoYXQgcmVuYW1lIGluIG15IGFuYWx5c2lzLiBBZGRpdGlvbmFsbHksIHRoZXJlIGFyZSBuZXcgdGVzdHMgYWRkZWQgaW4gYHN0cmluZ19rZnVuY3NfZmFpbHVyZTEuY2AgYW5kIGBzdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuY2AsIHNvIEkgbmVlZCB0byBjaGVjayB0aG9zZSB0b28uCgpGdW5jdGlvbmFsbHksIHRoZXNlIGFkZGl0aW9ucyBlbmFibGUgc3RyaW5nIGFuZCBtZW1vcnkgY29tcGFyaXNvbnMgZGlyZWN0bHkgd2l0aGluIEJQRiBwcm9ncmFtcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSwgZXNwZWNpYWxseSBiZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBpbnZvbHZlIG1lbW9yeSBhY2Nlc3MuIFRoZXkgYXJlIHBvdGVudGlhbCBwb2ludHMgb2YgdnVsbmVyYWJpbGl0eSB0aGF0IG5lZWQgcmlnb3JvdXMgdGVzdGluZyB0byBwcmV2ZW50IHBhZ2UgZmF1bHRzIG9yIG90aGVyIG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy4KClRoZXJlZm9yZSwgdGhlIG91dHB1dCBJJiMzOTttIGdlbmVyYXRpbmcgZm9yIGZ1enppbmcgd2lsbCBiZToKCiogICAqKldvcnRoRnV6emluZzogdHJ1ZSoqIC0gRGVmaW5pdGVseSwgdGhlc2UgYXJlIG5ldyBjb3JlIGZ1bmN0aW9ucy4KKiAgICoqRm9jdXNTeW1ib2xzOiBbJiMzNDticGZfc3RycGJyayYjMzQ7LCAmIzM0O2JwZl9tZW1jbXAmIzM0O10qKiAtIFRoZXNlIGFyZSB0aGUgdHdvIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdGhlIG1vc3QgYXR0ZW50aW9uLgoqICAgKipFbmFibGVDb25maWdzOiBbXSoqIC0gTm8gYWRkaXRpb25hbCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQuCiogICAqKlJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB0d28gbmV3IEJQRiBrZnVuY3MsIGBicGZfc3RycGJya2AgYW5kIGBicGZfbWVtY21wYCwgd2hpY2ggYWxsb3cgQlBGIHByb2dyYW1zIHRvIHBlcmZvcm0gc3RyaW5nIGFuZCBtZW1vcnkgY29tcGFyaXNvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIGhlbHBlciBsaWJyYXJ5IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB2YXJpb3VzIGlucHV0cyBzYWZlbHksIGVzcGVjaWFsbHkgc2luY2UgdGhleSBkZWFsIHdpdGggbWVtb3J5IGFjY2VzcyBhbmQgcG90ZW50aWFsIHBhZ2UgZmF1bHRzLiYjMzQ7KiogLSBUaGlzIHN1bXMgdXAgdGhlIGNvcmUgcmlzayBhc3Nlc3NtZW50IGFuZCBqdXN0aWZpY2F0aW9uIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDAzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc3RycGJyayYjMzQ7LAogICAgJiMzNDticGZfbWVtY21wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdHdvIG5ldyBCUEYga2Z1bmNzLCBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAsIHdoaWNoIGFsbG93IEJQRiBwcm9ncmFtcyB0byBwZXJmb3JtIHN0cmluZyBhbmQgbWVtb3J5IGNvbXBhcmlzb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIEJQRiBoZWxwZXIgbGlicmFyeSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBoYW5kbGUgdmFyaW91cyBpbnB1dHMgc2FmZWx5LCBlc3BlY2lhbGx5IHNpbmNlIHRoZXkgZGVhbCB3aXRoIG1lbW9yeSBhY2Nlc3MgYW5kIHBvdGVudGlhbCBwYWdlIGZhdWx0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc3RycGJyayYjMzQ7LAogICAgJiMzNDticGZfbWVtY21wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdHdvIG5ldyBCUEYga2Z1bmNzLCBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAsIHdoaWNoIGFsbG93IEJQRiBwcm9ncmFtcyB0byBwZXJmb3JtIHN0cmluZyBhbmQgbWVtb3J5IGNvbXBhcmlzb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIEJQRiBoZWxwZXIgbGlicmFyeSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBoYW5kbGUgdmFyaW91cyBpbnB1dHMgc2FmZWx5LCBlc3BlY2lhbGx5IHNpbmNlIHRoZXkgZGVhbCB3aXRoIG1lbW9yeSBhY2Nlc3MgYW5kIHBvdGVudGlhbCBwYWdlIGZhdWx0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDAzOjM0OjM3LjAyODk1MDc2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDEzMzUxNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zdHJwYnJrXCIsXG4gICAgXCJicGZfbWVtY21wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB0d28gbmV3IEJQRiBrZnVuY3MsIGBicGZfc3RycGJya2AgYW5kIGBicGZfbWVtY21wYCwgd2hpY2ggYWxsb3cgQlBGIHByb2dyYW1zIHRvIHBlcmZvcm0gc3RyaW5nIGFuZCBtZW1vcnkgY29tcGFyaXNvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIGhlbHBlciBsaWJyYXJ5IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB2YXJpb3VzIGlucHV0cyBzYWZlbHksIGVzcGVjaWFsbHkgc2luY2UgdGhleSBkZWFsIHdpdGggbWVtb3J5IGFjY2VzcyBhbmQgcG90ZW50aWFsIHBhZ2UgZmF1bHRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwMzozNDozNy4wMjg5NTY2NDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDE3NTc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMzZGQ1NGYyMTkzZjU0MjFkMTdlZDZhYTM3NDk1NjdmMzQzMjc0MjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMDM6MzQ6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xcbmluZGV4IGI1MzE0YzlmZWQzY2YwLi5mMjRjZmRiMjI2MzVjNyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuY1xcbisrKyBiL2tlcm5lbC9icGYvaGVscGVycy5jXFxuQEAgLTM5NzEsNiArMzk3MSwxMDkgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJjc3BuKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqcmVqZWN0X19pZ24pXFxuIFxcdHJldHVybiAtRUZBVUxUO1xcbiB9XFxuIFxcbisvKipcXG4rICogYnBmX21lbWNtcCAtIENvbXBhcmUgdHdvIG1lbW9yeSByZWdpb25zIGJ5dGUgYnkgYnl0ZVxcbisgKiBAcHRyMV9faWduOiBGaXJzdCBtZW1vcnkgcmVnaW9uXFxuKyAqIEBwdHIyX19pZ246IFNlY29uZCBtZW1vcnkgcmVnaW9uXFxuKyAqIEBzaXplOiBOdW1iZXIgb2YgYnl0ZXMgdG8gY29tcGFyZVxcbisgKlxcbisgKiBDb21wYXJlcyB0aGUgZmlyc3QgQHNpemUgYnl0ZXMgb2YgdGhlIG1lbW9yeSBhcmVhcyBAcHRyMV9faWduIGFuZFxcbisgKiBAcHRyMl9faWduLiBVbmxpa2UgYnBmX3N0cmNtcCwgbnVsbCBieXRlcyBkbyBub3QgdGVybWluYXRlIHRoZSBjb21wYXJpc29uLlxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogJTAgICAgICAgLSBUaGUgbWVtb3J5IHJlZ2lvbnMgYXJlIGVxdWFsXFxuKyAqICogJS0xICAgICAgLSBAcHRyMV9faWduIGlzIGxlc3MgdGhhbiBAcHRyMl9faWduXFxuKyAqICogJTEgICAgICAgLSBAcHRyMV9faWduIGlzIGdyZWF0ZXIgdGhhbiBAcHRyMl9faWduXFxuKyAqICogJS1FRkFVTFQgLSBDYW5ub3QgcmVhZCBvbmUgb2YgdGhlIG1lbW9yeSByZWdpb25zXFxuKyAqICogJS1FMkJJRyAgLSBAc2l6ZSBleGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgc2l6ZVxcbisgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBtZW1vcnkgcmVnaW9ucyBpcyBvdXRzaWRlIG9mIGtlcm5lbCBhZGRyZXNzIHNwYWNlXFxuKyAqL1xcbisvKipcXG4rICogYnBmX3N0cnBicmsgLSBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc2V0IG9mIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmdcXG4rICogQHNfX2lnbjogVGhlIHN0cmluZyB0byBiZSBzZWFyY2hlZFxcbisgKiBAYWNjZXB0X19pZ246IFRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2hhcmFjdGVycyB0byBzZWFyY2ggZm9yXFxuKyAqXFxuKyAqIFJldHVybjpcXG4rICogKiBcXHUwMDNlPTAgICAgICAtIEluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gQHNfX2lnbiB0aGF0IG1hdGNoZXMgYW55XFxuKyAqICAgICAgICAgICAgICBjaGFyYWN0ZXIgaW4gQGFjY2VwdF9faWduXFxuKyAqICogJS1FTk9FTlQgLSBObyBjaGFyYWN0ZXIgb2YgQGFjY2VwdF9faWduIGZvdW5kIGluIEBzX19pZ25cXG4rICogKiAlLUVGQVVMVCAtIENhbm5vdCByZWFkIG9uZSBvZiB0aGUgc3RyaW5nc1xcbisgKiAqICUtRTJCSUcgIC0gT25lIG9mIHRoZSBzdHJpbmdzIGlzIHRvbyBsYXJnZVxcbisgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBzdHJpbmdzIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2VcXG4rICovXFxuK19fYnBmX2tmdW5jIGludCBicGZfc3RycGJyayhjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKVxcbit7XFxuK1xcdGNoYXIgY3MsIGNhO1xcbitcXHRpbnQgaSwgajtcXG4rXFxuK1xcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoc19faWduLCAxKSB8fFxcbitcXHQgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKGFjY2VwdF9faWduLCAxKSkge1xcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0fVxcbitcXG4rXFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkrKykge1xcbitcXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdChcXHUwMDI2Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XFxuK1xcdFxcdGlmIChjcyA9PSAnXFxcXDAnKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBqKyspIHtcXG4rXFx0XFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHQoXFx1MDAyNmNhLCBhY2NlcHRfX2lnbiArIGosIGNoYXIsIGVycl9vdXQpO1xcbitcXHRcXHRcXHRpZiAoY2EgPT0gJ1xcXFwwJylcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGlmIChjcyA9PSBjYSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGogPT0gWEFUVFJfU0laRV9NQVgpXFxuK1xcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuK1xcdFxcdHNfX2lnbisrO1xcbitcXHR9XFxuK1xcdHJldHVybiAtRTJCSUc7XFxuK2Vycl9vdXQ6XFxuK1xcdHJldHVybiAtRUZBVUxUO1xcbit9XFxuK1xcbisvKipcXG4rICogYnBmX21lbWNtcCAtIENvbXBhcmUgdHdvIG1lbW9yeSByZWdpb25zIGJ5dGUgYnkgYnl0ZVxcbisgKiBAcHRyMV9faWduOiBGaXJzdCBtZW1vcnkgcmVnaW9uXFxuKyAqIEBwdHIyX19pZ246IFNlY29uZCBtZW1vcnkgcmVnaW9uXFxuKyAqIEBzaXplOiBOdW1iZXIgb2YgYnl0ZXMgdG8gY29tcGFyZVxcbisgKlxcbisgKiBDb21wYXJlcyB0aGUgZmlyc3QgQHNpemUgYnl0ZXMgb2YgdGhlIG1lbW9yeSBhcmVhcyBAcHRyMV9faWduIGFuZFxcbisgKiBAcHRyMl9faWduLiBVbmxpa2UgYnBmX3N0cmNtcCwgbnVsbCBieXRlcyBkbyBub3QgdGVybWluYXRlIHRoZSBjb21wYXJpc29uLlxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogJTAgICAgICAgLSBUaGUgbWVtb3J5IHJlZ2lvbnMgYXJlIGVxdWFsXFxuKyAqICogJS0xICAgICAgLSBAcHRyMV9faWduIGlzIGxlc3MgdGhhbiBAcHRyMl9faWduXFxuKyAqICogJTEgICAgICAgLSBAcHRyMV9faWduIGlzIGdyZWF0ZXIgdGhhbiBAcHRyMl9faWduXFxuKyAqICogJS1FRkFVTFQgLSBDYW5ub3QgcmVhZCBvbmUgb2YgdGhlIG1lbW9yeSByZWdpb25zXFxuKyAqICogJS1FMkJJRyAgLSBAc2l6ZSBleGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgc2l6ZVxcbisgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBtZW1vcnkgcmVnaW9ucyBpcyBvdXRzaWRlIG9mIGtlcm5lbCBhZGRyZXNzIHNwYWNlXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX21lbWNtcChjb25zdCB2b2lkICpwdHIxX19pZ24sIGNvbnN0IHZvaWQgKnB0cjJfX2lnbixcXG4rXFx0XFx0XFx0ICAgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqcDEgPSBwdHIxX19pZ24sICpwMiA9IHB0cjJfX2lnbjtcXG4rXFx0Y2hhciBjMSwgYzI7XFxuK1xcdHNpemVfdCBpO1xcbitcXG4rXFx0aWYgKHNpemUgXFx1MDAzZSBYQVRUUl9TSVpFX01BWClcXG4rXFx0XFx0cmV0dXJuIC1FMkJJRztcXG4rXFx0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChwMSwgc2l6ZSkgfHxcXG4rXFx0ICAgICFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChwMiwgc2l6ZSkpXFxuK1xcdFxcdHJldHVybiAtRVJBTkdFO1xcbitcXG4rXFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2l6ZTsgaSsrKSB7XFxuK1xcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFxcdTAwMjZjMSwgcDEgKyBpLCBjaGFyLCBlcnJfb3V0KTtcXG4rXFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHQoXFx1MDAyNmMyLCBwMiArIGksIGNoYXIsIGVycl9vdXQpO1xcbitcXHRcXHRpZiAoYzEgIT0gYzIpXFxuK1xcdFxcdFxcdHJldHVybiBjMSBcXHUwMDNjIGMyID8gLTEgOiAxO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbitlcnJfb3V0OlxcbitcXHRyZXR1cm4gLUVGQVVMVDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBfX2JwZl9zdHJuc3RyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IGxlbixcXG4gXFx0XFx0XFx0IGJvb2wgaWdub3JlX2Nhc2UpXFxuIHtcXG5AQCAtNDg1MCw2ICs0OTUzLDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJsZW4pO1xcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cm5sZW4pO1xcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cnNwbik7XFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY3Nwbik7XFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RycGJyayk7XFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfbWVtY21wKTtcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJzdHIpO1xcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNhc2VzdHIpO1xcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cm5zdHIpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jXFxuaW5kZXggZTBkNjcyZDkzYWRmODUuLjA3MTU4MWZmMDgzM2YzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9zdWNjZXNzLmNcXG5AQCAtNjI0LDcgKzYyNCw3IEBAIGludCBCUEZfUFJPRyh0ZXN0X2R5bnB0cl9za2JfdHBfYnRmLCB2b2lkICpza2IsIHZvaWQgKmxvY2F0aW9uKVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgYnBmX21lbWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCB1MzIgc2l6ZSlcXG4rc3RhdGljIGlubGluZSBpbnQgbG9jYWxfbWVtY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIsIHUzMiBzaXplKVxcbiB7XFxuIFxcdGludCBpO1xcbiBcXG5AQCAtNjUwLDEyICs2NTAsMTIgQEAgaW50IHRlc3RfZHlucHRyX2NvcHkodm9pZCAqY3R4KVxcbiBcXHRlcnIgPSBicGZfZHlucHRyX3dyaXRlKFxcdTAwMjZzcmMsIDAsIGRhdGEsIHN6LCAwKTtcXG4gXFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfY29weShcXHUwMDI2ZHN0LCAwLCBcXHUwMDI2c3JjLCAwLCBzeik7XFxuIFxcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoYnVmLCBzeiwgXFx1MDAyNmRzdCwgMCwgMCk7XFxuLVxcdGVyciA9IGVyciA/OiBicGZfbWVtY21wKGRhdGEsIGJ1Ziwgc3opO1xcbitcXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGRhdGEsIGJ1Ziwgc3opO1xcbiBcXG4gXFx0LyogVGVzdCB0aGF0IG9mZnNldHMgYXJlIGhhbmRsZWQgY29ycmVjdGx5ICovXFxuIFxcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX2NvcHkoXFx1MDAyNmRzdCwgMywgXFx1MDAyNnNyYywgNSwgc3ogLSA1KTtcXG4gXFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChidWYsIHN6IC0gNSwgXFx1MDAyNmRzdCwgMywgMCk7XFxuLVxcdGVyciA9IGVyciA/OiBicGZfbWVtY21wKGRhdGEgKyA1LCBidWYsIHN6IC0gNSk7XFxuK1xcdGVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZGF0YSArIDUsIGJ1Ziwgc3ogLSA1KTtcXG4gXFxuIFxcdGJwZl9yaW5nYnVmX2Rpc2NhcmRfZHlucHRyKFxcdTAwMjZzcmMsIDApO1xcbiBcXHRicGZfcmluZ2J1Zl9kaXNjYXJkX2R5bnB0cihcXHUwMDI2ZHN0LCAwKTtcXG5AQCAtNjkyLDcgKzY5Miw3IEBAIGludCB0ZXN0X2R5bnB0cl9jb3B5X3hkcChzdHJ1Y3QgeGRwX21kICp4ZHApXFxuIFxcdFxcdGVyciA9IGJwZl9keW5wdHJfcmVhZChcXHUwMDI2YnVmLCBsZW4sIFxcdTAwMjZwdHJfeGRwLCBpICogbGVuLCAwKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdGlmIChicGZfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxcbitcXHRcXHRpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG5AQCAtNzEzLDcgKzcxMyw3IEBAIGludCB0ZXN0X2R5bnB0cl9jb3B5X3hkcChzdHJ1Y3QgeGRwX21kICp4ZHApXFxuIFxcdFxcdGVyciA9IGJwZl9keW5wdHJfcmVhZChcXHUwMDI2YnVmLCBsZW4sIFxcdTAwMjZwdHJfYnVmLCBpICogbGVuLCAwKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdGlmIChicGZfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxcbitcXHRcXHRpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG5AQCAtNzI3LDcgKzcyNyw3IEBAIGludCB0ZXN0X2R5bnB0cl9jb3B5X3hkcChzdHJ1Y3QgeGRwX21kICp4ZHApXFxuIFxcdFxcdGVyciA9IGJwZl9keW5wdHJfcmVhZChcXHUwMDI2YnVmLCBsZW4sIFxcdTAwMjZwdHJfeGRwLCAyICsgaSAqIGxlbiwgMCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRpZiAoYnBmX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcXG4rXFx0XFx0aWYgKGxvY2FsX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuQEAgLTc1MCw3ICs3NTAsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm8odm9pZCAqY3R4KVxcbiBcXG4gXFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfemVyb19kYXRhLCBkYXRhX3N6LCAwLCBcXHUwMDI2cHRyKTtcXG4gXFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KFxcdTAwMjZwdHIsIDAsIGRhdGFfc3osIDApO1xcbi1cXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcCh6ZXJvZXMsIG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3opO1xcbitcXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKHplcm9lcywgbWVtc2V0X3plcm9fZGF0YSwgZGF0YV9zeik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC03NzAsNyArNzcwLDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF9ub3R6ZXJvKHZvaWQgKmN0eClcXG4gXFxuIFxcdGVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X25vdHplcm9fZGF0YSwgZGF0YV9zeiwgMCwgXFx1MDAyNnB0cik7XFxuIFxcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX21lbXNldChcXHUwMDI2cHRyLCAwLCBkYXRhX3N6LCBEWU5QVFJfTUVNU0VUX1ZBTCk7XFxuLVxcdGVyciA9IGVyciA/OiBicGZfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfbm90emVyb19kYXRhLCBkYXRhX3N6KTtcXG4rXFx0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X25vdHplcm9fZGF0YSwgZGF0YV9zeik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC03ODYsNyArNzg2LDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF96ZXJvX29mZnNldCh2b2lkICpjdHgpXFxuIFxcbiBcXHRlcnIgPSBicGZfZHlucHRyX2Zyb21fbWVtKG1lbXNldF96ZXJvX29mZnNldF9kYXRhLCBkYXRhX3N6LCAwLCBcXHUwMDI2cHRyKTtcXG4gXFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KFxcdTAwMjZwdHIsIDgsIDQsIDApO1xcbi1cXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fb2Zmc2V0X2RhdGEsIGRhdGFfc3opO1xcbitcXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfemVyb19vZmZzZXRfZGF0YSwgZGF0YV9zeik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC04MDMsNyArODAzLDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF96ZXJvX2FkanVzdGVkKHZvaWQgKmN0eClcXG4gXFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfemVyb19hZGp1c3RlZF9kYXRhLCBkYXRhX3N6LCAwLCBcXHUwMDI2cHRyKTtcXG4gXFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfYWRqdXN0KFxcdTAwMjZwdHIsIDQsIDgpO1xcbiBcXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoXFx1MDAyNnB0ciwgMCwgYnBmX2R5bnB0cl9zaXplKFxcdTAwMjZwdHIpLCAwKTtcXG4tXFx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX2FkanVzdGVkX2RhdGEsIGRhdGFfc3opO1xcbitcXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfemVyb19hZGp1c3RlZF9kYXRhLCBkYXRhX3N6KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTg5OCw3ICs4OTgsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3hkcF9jaHVua3Moc3RydWN0IHhkcF9tZCAqeGRwKVxcbiBcXHRcXHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXFx1MDAyNmJ1ZiwgY2h1bmtfc3osIFxcdTAwMjZwdHJfeGRwLCBvZmZzZXQsIDApO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0ZXJyID0gYnBmX21lbWNtcChidWYsIGV4cGVjdGVkX2J1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRcXHRlcnIgPSBsb2NhbF9tZW1jbXAoYnVmLCBleHBlY3RlZF9idWYsIHNpemVvZihidWYpKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG5AQCAtOTUyLDcgKzk1Miw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X2R5bnB0cl9wcm9iZSh2b2lkICpwdHIsIGJwZl9yZWFkX2R5bnB0cl9mbl90IGJwXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKFxcdTAwMjZidWYsIGxlbiwgXFx1MDAyNnB0cl9idWYsIDAsIDApO1xcbiBcXG4tXFx0XFx0aWYgKGVyciB8fCBicGZfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKVxcbitcXHRcXHRpZiAoZXJyIHx8IGxvY2FsX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSlcXG4gXFx0XFx0XFx0ZXJyID0gMTtcXG4gXFxuIFxcdFxcdC8qIFJlc2V0IGJ1ZmZlciBhbmQgZHlucHRyICovXFxuQEAgLTk4Niw3ICs5ODYsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfc3RyKHZvaWQgKnB0cixcXG4gXFx0XFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChcXHUwMDI2YnVmLCBsZW4sIFxcdTAwMjZwdHJfYnVmLCAwLCAwKTtcXG4gXFx0XFx0aWYgKCFsZW4pXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRpZiAoZXJyIHx8IGJwZl9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAnXFxcXDAnKVxcbitcXHRcXHRpZiAoZXJyIHx8IGxvY2FsX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICdcXFxcMCcpXFxuIFxcdFxcdFxcdGVyciA9IDE7XFxuIFxcdH1cXG4gXFx0YnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoXFx1MDAyNnB0cl9idWYsIDApO1xcbkBAIC0xMDEyLDcgKzEwMTIsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCwgdm9pZCAqcHRyLFxcbiBcXHRcXHRpZiAobGVuIFxcdTAwM2Ugc2l6ZW9mKGJ1ZikpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKFxcdTAwMjZidWYsIGxlbiwgXFx1MDAyNnB0cl94ZHAsIG9mZiwgMCk7XFxuLVxcdFxcdGlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSlcXG4rXFx0XFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbikpXFxuIFxcdFxcdFxcdGVyciA9IDE7XFxuIFxcdFxcdC8qIFJlc2V0IGJ1ZmZlciBhbmQgZHlucHRyICovXFxuIFxcdFxcdF9fYnVpbHRpbl9tZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7XFxuQEAgLTEwNDgsNyArMTA0OCw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X2R5bnB0cl9wcm9iZV9zdHJfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCwgdm9pZCAqXFxuIFxcbiBcXHRcXHRpZiAoIWxlbilcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICdcXFxcMCcpXFxuK1xcdFxcdGlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4gLSAxKSB8fCBidWZbbGVuIC0gMV0gIT0gJ1xcXFwwJylcXG4gXFx0XFx0XFx0ZXJyID0gMTtcXG4gXFxuIFxcdFxcdF9fYnVpbHRpbl9tZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jXFxuaW5kZXggYmRkYzRlODU3OWQyNDQuLmU2N2ZlOTcwMGU1OTNjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jXFxuQEAgLTksNiArOSwxMCBAQFxcbiBjaGFyICp1c2VyX3B0ciA9IChjaGFyICopMTtcXG4gY2hhciAqaW52YWxpZF9rZXJuX3B0ciA9IChjaGFyICopLTE7XFxuIFxcbitleHRlcm4gaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pIF9fa3N5bTtcXG4rZXh0ZXJuIGludCBicGZfbWVtY21wKGNvbnN0IHZvaWQgKnB0cjFfX2lnbiwgY29uc3Qgdm9pZCAqcHRyMl9faWduLFxcbitcXHRcXHQgICAgICBzaXplX3Qgc2l6ZSkgX19rc3ltO1xcbitcXG4gLypcXG4gICogV2hlbiBwYXNzaW5nIHVzZXJzcGFjZSBwb2ludGVycywgdGhlIGVycm9yIGNvZGUgZGlmZmVycyBiYXNlZCBvbiBhcmNoOlxcbiAgKiAgIC1FUkFOR0Ugb24gYXJjaGVzIHdpdGggbm9uLW92ZXJsYXBwaW5nIGFkZHJlc3Mgc3BhY2VzXFxuQEAgLTUzLDYgKzU3LDEwIEBAIFNFQyhcXFwic3lzY2FsbFxcXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybnN0cl9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybnN0cl9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKFxcXCJoZWxsb1xcXCIsIE5VTEwsIDEpOyB9XFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybmNhc2VzdHJfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoTlVMTCwgXFxcImhlbGxvXFxcIiwgMSk7IH1cXG4gU0VDKFxcXCJzeXNjYWxsXFxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJuY2FzZXN0cl9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihcXFwiaGVsbG9cXFwiLCBOVUxMLCAxKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X21lbWNtcF9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoTlVMTCwgXFxcInhcXFwiLCAxKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X21lbWNtcF9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXFxcInhcXFwiLCBOVUxMLCAxKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cnBicmtfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhOVUxMLCBcXFwieFxcXCIpOyB9XFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RycGJya19udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKFxcXCJ4XFxcIiwgTlVMTCk7IH1cXG4gXFxuIC8qIFBhc3NpbmcgdXNlcnNwYWNlIHB0ciB0byBzdHJpbmcga2Z1bmNzICovXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RyY21wX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjbXAodXNlcl9wdHIsIFxcXCJoZWxsb1xcXCIpOyB9XFxuQEAgLTc5LDYgKzg3LDEwIEBAIFNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybnN0cl91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJlXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybnN0cl91c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybnN0cihcXFwiaGVsbG9cXFwiLCB1c2VyX3B0ciwgMSk7IH1cXG4gU0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIodXNlcl9wdHIsIFxcXCJoZWxsb1xcXCIsIDEpOyB9XFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFxcXCJoZWxsb1xcXCIsIHVzZXJfcHRyLCAxKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X21lbWNtcF91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKHVzZXJfcHRyLCBcXFwieFxcXCIsIDEpOyB9XFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3RfbWVtY21wX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXFxcInhcXFwiLCB1c2VyX3B0ciwgMSk7IH1cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJwYnJrX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHVzZXJfcHRyLCBcXFwieFxcXCIpOyB9XFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RycGJya191c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcXFwieFxcXCIsIHVzZXJfcHRyKTsgfVxcbiBcXG4gI2VuZGlmIC8qIF9fVEFSR0VUX0FSQ0hfczM5MCAqL1xcbiBcXG5AQCAtMTA3LDUgKzExOSw5IEBAIFNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5zdHJfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5zdHJfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKFxcXCJoZWxsb1xcXCIsIGludmFsaWRfa2Vybl9wdHIsIDEpOyB9XFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoaW52YWxpZF9rZXJuX3B0ciwgXFxcImhlbGxvXFxcIiwgMSk7IH1cXG4gU0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihcXFwiaGVsbG9cXFwiLCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9tZW1jbXBfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoaW52YWxpZF9rZXJuX3B0ciwgXFxcInhcXFwiLCAxKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9tZW1jbXBfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXFxcInhcXFwiLCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJwYnJrX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhpbnZhbGlkX2tlcm5fcHRyLCBcXFwieFxcXCIpOyB9XFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cnBicmtfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKFxcXCJ4XFxcIiwgaW52YWxpZF9rZXJuX3B0cik7IH1cXG4gXFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmNcXG5pbmRleCBmNjViMTIyNmE4MWEzNy4uZTY3YjgwYWIzY2QyYzkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jXFxuQEAgLTcsNiArNywxMCBAQFxcbiBcXG4gY2hhciBzdHJbXSA9IFxcXCJoZWxsbyB3b3JsZFxcXCI7XFxuIFxcbitleHRlcm4gaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pIF9fa3N5bTtcXG4rZXh0ZXJuIGludCBicGZfbWVtY21wKGNvbnN0IHZvaWQgKnB0cjFfX2lnbiwgY29uc3Qgdm9pZCAqcHRyMl9faWduLFxcbitcXHRcXHQgICAgICBzaXplX3Qgc2l6ZSkgX19rc3ltO1xcbitcXG4gI2RlZmluZSBfX3Rlc3QocmV0dmFsKSBTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3N1Y2Nlc3MgX19yZXR2YWwocmV0dmFsKVxcbiBcXG4gLyogRnVuY3Rpb25hbCB0ZXN0cyAqL1xcbkBAIC02MCw0ICs2NCwyNSBAQCBfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfbm90Zm91bmQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc1xcbiBfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfbm90Zm91bmQzKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFxcXCJcXFwiLCBcXFwiYVxcXCIsIDApOyB9XFxuIF9fdGVzdCgwKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9lbXB0eSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihzdHIsIFxcXCJcXFwiLCAxKTsgfVxcbiBcXG4rLyogYnBmX3N0cnBicmsgLSBmdW5jdGlvbmFsIHRlc3RzICovXFxuK19fdGVzdCgwKSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX2ZpcnN0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcXFwiaFxcXCIpOyB9XFxuK19fdGVzdCg0KSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX21pZGRsZSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXFxcIm93XFxcIik7IH1cXG4rX190ZXN0KDYpIGludCB0ZXN0X3N0cnBicmtfZm91bmRfbXVsdGlwbGUodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFxcXCJ3XFxcIik7IH1cXG4rX190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfbm90Zm91bmQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFxcXCJ4eXpcXFwiKTsgfVxcbitfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RycGJya19lbXB0eV9hY2NlcHQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFxcXCJcXFwiKTsgfVxcbitcXG4rLyogYnBmX21lbWNtcCAtIGZ1bmN0aW9uYWwgdGVzdHMgKi9cXG4rY2hhciBkYXRhMVtdID0gXFxcImhlbGxvIHdvcmxkXFxcIjtcXG4rY2hhciBkYXRhMltdID0gXFxcImhlbGxvIHdvcmxkXFxcIjtcXG4rY2hhciBkYXRhM1tdID0gXFxcImhlbGxvIHdvcmxlXFxcIjtcXG4rX190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTEsIGRhdGEyLCBzaXplb2YoZGF0YTEpKTsgfVxcbitfX3Rlc3QoLTEpIGludCB0ZXN0X21lbWNtcF9uZXFfbGVzcyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTEsIGRhdGEzLCBzaXplb2YoZGF0YTEpKTsgfVxcbitfX3Rlc3QoMSkgaW50IHRlc3RfbWVtY21wX25lcV9ncmVhdGVyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMywgZGF0YTEsIHNpemVvZihkYXRhMSkpOyB9XFxuK19fdGVzdCgwKSBpbnQgdGVzdF9tZW1jbXBfc2l6ZV96ZXJvKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTMsIDApOyB9XFxuKy8qIG1lbWNtcCBzaG91bGQgTk9UIHN0b3AgYXQgbnVsbCBieXRlIC0gY29tcGFyZSBwYXN0ICdcXFxcMCcgKi9cXG4rY2hhciBiaW4xW10gPSB7ICdhJywgJ1xcXFwwJywgJ2MnIH07XFxuK2NoYXIgYmluMltdID0geyAnYScsICdcXFxcMCcsICdkJyB9O1xcbitfX3Rlc3QoMCkgaW50IHRlc3RfbWVtY21wX251bGxfYnl0ZV9lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoYmluMSwgYmluMSwgc2l6ZW9mKGJpbjEpKTsgfVxcbitfX3Rlc3QoLTEpIGludCB0ZXN0X21lbWNtcF9udWxsX2J5dGVfbmVxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChiaW4xLCBiaW4yLCBzaXplb2YoYmluMSkpOyB9XFxuK1xcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDM6MzQ6MzcuNDk0MDA4MTA5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjU0ODI4Njk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc3RycGJya1wiLFxuICAgIFwiYnBmX21lbWNtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdHdvIG5ldyBCUEYga2Z1bmNzLCBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAsIHdoaWNoIGFsbG93IEJQRiBwcm9ncmFtcyB0byBwZXJmb3JtIHN0cmluZyBhbmQgbWVtb3J5IGNvbXBhcmlzb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIEJQRiBoZWxwZXIgbGlicmFyeSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBoYW5kbGUgdmFyaW91cyBpbnB1dHMgc2FmZWx5LCBlc3BlY2lhbGx5IHNpbmNlIHRoZXkgZGVhbCB3aXRoIG1lbW9yeSBhY2Nlc3MgYW5kIHBvdGVudGlhbCBwYWdlIGZhdWx0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzM2RkNTRmMjE5M2Y1NDIxZDE3ZWQ2YWEzNzQ5NTY3ZjM0MzI3NDIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMDM6MzQ6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5pbmRleCBiNTMxNGM5ZmVkM2NmMC4uZjI0Y2ZkYjIyNjM1YzcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcbkBAIC0zOTcxLDYgKzM5NzEsMTA5IEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RyY3Nwbihjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKnJlamVjdF9faWduKVxuIFx0cmV0dXJuIC1FRkFVTFQ7XG4gfVxuIFxuKy8qKlxuKyAqIGJwZl9tZW1jbXAgLSBDb21wYXJlIHR3byBtZW1vcnkgcmVnaW9ucyBieXRlIGJ5IGJ5dGVcbisgKiBAcHRyMV9faWduOiBGaXJzdCBtZW1vcnkgcmVnaW9uXG4rICogQHB0cjJfX2lnbjogU2Vjb25kIG1lbW9yeSByZWdpb25cbisgKiBAc2l6ZTogTnVtYmVyIG9mIGJ5dGVzIHRvIGNvbXBhcmVcbisgKlxuKyAqIENvbXBhcmVzIHRoZSBmaXJzdCBAc2l6ZSBieXRlcyBvZiB0aGUgbWVtb3J5IGFyZWFzIEBwdHIxX19pZ24gYW5kXG4rICogQHB0cjJfX2lnbi4gVW5saWtlIGJwZl9zdHJjbXAsIG51bGwgYnl0ZXMgZG8gbm90IHRlcm1pbmF0ZSB0aGUgY29tcGFyaXNvbi5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqICUwICAgICAgIC0gVGhlIG1lbW9yeSByZWdpb25zIGFyZSBlcXVhbFxuKyAqICogJS0xICAgICAgLSBAcHRyMV9faWduIGlzIGxlc3MgdGhhbiBAcHRyMl9faWduXG4rICogKiAlMSAgICAgICAtIEBwdHIxX19pZ24gaXMgZ3JlYXRlciB0aGFuIEBwdHIyX19pZ25cbisgKiAqICUtRUZBVUxUIC0gQ2Fubm90IHJlYWQgb25lIG9mIHRoZSBtZW1vcnkgcmVnaW9uc1xuKyAqICogJS1FMkJJRyAgLSBAc2l6ZSBleGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgc2l6ZVxuKyAqICogJS1FUkFOR0UgLSBPbmUgb2YgdGhlIG1lbW9yeSByZWdpb25zIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2VcbisgKi9cbisvKipcbisgKiBicGZfc3RycGJyayAtIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzZXQgb2YgY2hhcmFjdGVycyBpbiBhIHN0cmluZ1xuKyAqIEBzX19pZ246IFRoZSBzdHJpbmcgdG8gYmUgc2VhcmNoZWRcbisgKiBAYWNjZXB0X19pZ246IFRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2hhcmFjdGVycyB0byBzZWFyY2ggZm9yXG4rICpcbisgKiBSZXR1cm46XG4rICogKiBcdTAwM2U9MCAgICAgIC0gSW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBAc19faWduIHRoYXQgbWF0Y2hlcyBhbnlcbisgKiAgICAgICAgICAgICAgY2hhcmFjdGVyIGluIEBhY2NlcHRfX2lnblxuKyAqICogJS1FTk9FTlQgLSBObyBjaGFyYWN0ZXIgb2YgQGFjY2VwdF9faWduIGZvdW5kIGluIEBzX19pZ25cbisgKiAqICUtRUZBVUxUIC0gQ2Fubm90IHJlYWQgb25lIG9mIHRoZSBzdHJpbmdzXG4rICogKiAlLUUyQklHICAtIE9uZSBvZiB0aGUgc3RyaW5ncyBpcyB0b28gbGFyZ2VcbisgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBzdHJpbmdzIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2VcbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbilcbit7XG4rXHRjaGFyIGNzLCBjYTtcbitcdGludCBpLCBqO1xuK1xuK1x0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzX19pZ24sIDEpIHx8XG4rXHQgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKGFjY2VwdF9faWduLCAxKSkge1xuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBpKyspIHtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4rXHRcdGlmIChjcyA9PSAnXFwwJylcbitcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGorKykge1xuK1x0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmNhLCBhY2NlcHRfX2lnbiArIGosIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRcdGlmIChjYSA9PSAnXFwwJylcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGlmIChjcyA9PSBjYSlcbitcdFx0XHRcdHJldHVybiBpO1xuK1x0XHR9XG4rXHRcdGlmIChqID09IFhBVFRSX1NJWkVfTUFYKVxuK1x0XHRcdHJldHVybiAtRTJCSUc7XG4rXHRcdHNfX2lnbisrO1xuK1x0fVxuK1x0cmV0dXJuIC1FMkJJRztcbitlcnJfb3V0OlxuK1x0cmV0dXJuIC1FRkFVTFQ7XG4rfVxuK1xuKy8qKlxuKyAqIGJwZl9tZW1jbXAgLSBDb21wYXJlIHR3byBtZW1vcnkgcmVnaW9ucyBieXRlIGJ5IGJ5dGVcbisgKiBAcHRyMV9faWduOiBGaXJzdCBtZW1vcnkgcmVnaW9uXG4rICogQHB0cjJfX2lnbjogU2Vjb25kIG1lbW9yeSByZWdpb25cbisgKiBAc2l6ZTogTnVtYmVyIG9mIGJ5dGVzIHRvIGNvbXBhcmVcbisgKlxuKyAqIENvbXBhcmVzIHRoZSBmaXJzdCBAc2l6ZSBieXRlcyBvZiB0aGUgbWVtb3J5IGFyZWFzIEBwdHIxX19pZ24gYW5kXG4rICogQHB0cjJfX2lnbi4gVW5saWtlIGJwZl9zdHJjbXAsIG51bGwgYnl0ZXMgZG8gbm90IHRlcm1pbmF0ZSB0aGUgY29tcGFyaXNvbi5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqICUwICAgICAgIC0gVGhlIG1lbW9yeSByZWdpb25zIGFyZSBlcXVhbFxuKyAqICogJS0xICAgICAgLSBAcHRyMV9faWduIGlzIGxlc3MgdGhhbiBAcHRyMl9faWduXG4rICogKiAlMSAgICAgICAtIEBwdHIxX19pZ24gaXMgZ3JlYXRlciB0aGFuIEBwdHIyX19pZ25cbisgKiAqICUtRUZBVUxUIC0gQ2Fubm90IHJlYWQgb25lIG9mIHRoZSBtZW1vcnkgcmVnaW9uc1xuKyAqICogJS1FMkJJRyAgLSBAc2l6ZSBleGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgc2l6ZVxuKyAqICogJS1FUkFOR0UgLSBPbmUgb2YgdGhlIG1lbW9yeSByZWdpb25zIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2VcbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX21lbWNtcChjb25zdCB2b2lkICpwdHIxX19pZ24sIGNvbnN0IHZvaWQgKnB0cjJfX2lnbixcbitcdFx0XHQgICBzaXplX3Qgc2l6ZSlcbit7XG4rXHRjb25zdCBjaGFyICpwMSA9IHB0cjFfX2lnbiwgKnAyID0gcHRyMl9faWduO1xuK1x0Y2hhciBjMSwgYzI7XG4rXHRzaXplX3QgaTtcbitcbitcdGlmIChzaXplIFx1MDAzZSBYQVRUUl9TSVpFX01BWClcbitcdFx0cmV0dXJuIC1FMkJJRztcbitcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQocDEsIHNpemUpIHx8XG4rXHQgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHAyLCBzaXplKSlcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRndWFyZChwYWdlZmF1bHQpKCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaXplOyBpKyspIHtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2YzEsIHAxICsgaSwgY2hhciwgZXJyX291dCk7XG4rXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMyLCBwMiArIGksIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRpZiAoYzEgIT0gYzIpXG4rXHRcdFx0cmV0dXJuIGMxIFx1MDAzYyBjMiA/IC0xIDogMTtcbitcdH1cbitcdHJldHVybiAwO1xuK2Vycl9vdXQ6XG4rXHRyZXR1cm4gLUVGQVVMVDtcbit9XG4rXG4gc3RhdGljIGludCBfX2JwZl9zdHJuc3RyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IGxlbixcbiBcdFx0XHQgYm9vbCBpZ25vcmVfY2FzZSlcbiB7XG5AQCAtNDg1MCw2ICs0OTUzLDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJsZW4pO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3Rybmxlbik7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJzcG4pO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY3Nwbik7XG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJwYnJrKTtcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX21lbWNtcCk7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJzdHIpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY2FzZXN0cik7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJuc3RyKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jXG5pbmRleCBlMGQ2NzJkOTNhZGY4NS4uMDcxNTgxZmYwODMzZjMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9zdWNjZXNzLmNcbkBAIC02MjQsNyArNjI0LDcgQEAgaW50IEJQRl9QUk9HKHRlc3RfZHlucHRyX3NrYl90cF9idGYsIHZvaWQgKnNrYiwgdm9pZCAqbG9jYXRpb24pXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgYnBmX21lbWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCB1MzIgc2l6ZSlcbitzdGF0aWMgaW5saW5lIGludCBsb2NhbF9tZW1jbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgdTMyIHNpemUpXG4ge1xuIFx0aW50IGk7XG4gXG5AQCAtNjUwLDEyICs2NTAsMTIgQEAgaW50IHRlc3RfZHlucHRyX2NvcHkodm9pZCAqY3R4KVxuIFx0ZXJyID0gYnBmX2R5bnB0cl93cml0ZShcdTAwMjZzcmMsIDAsIGRhdGEsIHN6LCAwKTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX2NvcHkoXHUwMDI2ZHN0LCAwLCBcdTAwMjZzcmMsIDAsIHN6KTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoYnVmLCBzeiwgXHUwMDI2ZHN0LCAwLCAwKTtcbi1cdGVyciA9IGVyciA/OiBicGZfbWVtY21wKGRhdGEsIGJ1Ziwgc3opO1xuK1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChkYXRhLCBidWYsIHN6KTtcbiBcbiBcdC8qIFRlc3QgdGhhdCBvZmZzZXRzIGFyZSBoYW5kbGVkIGNvcnJlY3RseSAqL1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfY29weShcdTAwMjZkc3QsIDMsIFx1MDAyNnNyYywgNSwgc3ogLSA1KTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoYnVmLCBzeiAtIDUsIFx1MDAyNmRzdCwgMywgMCk7XG4tXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChkYXRhICsgNSwgYnVmLCBzeiAtIDUpO1xuK1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChkYXRhICsgNSwgYnVmLCBzeiAtIDUpO1xuIFxuIFx0YnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoXHUwMDI2c3JjLCAwKTtcbiBcdGJwZl9yaW5nYnVmX2Rpc2NhcmRfZHlucHRyKFx1MDAyNmRzdCwgMCk7XG5AQCAtNjkyLDcgKzY5Miw3IEBAIGludCB0ZXN0X2R5bnB0cl9jb3B5X3hkcChzdHJ1Y3QgeGRwX21kICp4ZHApXG4gXHRcdGVyciA9IGJwZl9keW5wdHJfcmVhZChcdTAwMjZidWYsIGxlbiwgXHUwMDI2cHRyX3hkcCwgaSAqIGxlbiwgMCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdGlmIChicGZfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxuK1x0XHRpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTcxMyw3ICs3MTMsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKVxuIFx0XHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXHUwMDI2YnVmLCBsZW4sIFx1MDAyNnB0cl9idWYsIGkgKiBsZW4sIDApO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRpZiAoYnBmX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcbitcdFx0aWYgKGxvY2FsX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcbiBcdFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbkBAIC03MjcsNyArNzI3LDcgQEAgaW50IHRlc3RfZHlucHRyX2NvcHlfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdFx0ZXJyID0gYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgbGVuLCBcdTAwMjZwdHJfeGRwLCAyICsgaSAqIGxlbiwgMCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdGlmIChicGZfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxuK1x0XHRpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTc1MCw3ICs3NTAsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm8odm9pZCAqY3R4KVxuIFxuIFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfemVyb19kYXRhLCBkYXRhX3N6LCAwLCBcdTAwMjZwdHIpO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KFx1MDAyNnB0ciwgMCwgZGF0YV9zeiwgMCk7XG4tXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcCh6ZXJvZXMsIG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3opO1xuK1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcCh6ZXJvZXMsIG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3opO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTc3MCw3ICs3NzAsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X25vdHplcm8odm9pZCAqY3R4KVxuIFxuIFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfbm90emVyb19kYXRhLCBkYXRhX3N6LCAwLCBcdTAwMjZwdHIpO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KFx1MDAyNnB0ciwgMCwgZGF0YV9zeiwgRFlOUFRSX01FTVNFVF9WQUwpO1xuLVx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF9ub3R6ZXJvX2RhdGEsIGRhdGFfc3opO1xuK1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X25vdHplcm9fZGF0YSwgZGF0YV9zeik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNzg2LDcgKzc4Niw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfemVyb19vZmZzZXQodm9pZCAqY3R4KVxuIFxuIFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfemVyb19vZmZzZXRfZGF0YSwgZGF0YV9zeiwgMCwgXHUwMDI2cHRyKTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX21lbXNldChcdTAwMjZwdHIsIDgsIDQsIDApO1xuLVx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX29mZnNldF9kYXRhLCBkYXRhX3N6KTtcbitcdGVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX29mZnNldF9kYXRhLCBkYXRhX3N6KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC04MDMsNyArODAzLDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF96ZXJvX2FkanVzdGVkKHZvaWQgKmN0eClcbiBcdGVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeiwgMCwgXHUwMDI2cHRyKTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX2FkanVzdChcdTAwMjZwdHIsIDQsIDgpO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KFx1MDAyNnB0ciwgMCwgYnBmX2R5bnB0cl9zaXplKFx1MDAyNnB0ciksIDApO1xuLVx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX2FkanVzdGVkX2RhdGEsIGRhdGFfc3opO1xuK1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtODk4LDcgKzg5OCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfeGRwX2NodW5rcyhzdHJ1Y3QgeGRwX21kICp4ZHApXG4gXHRcdGVyciA9IGJwZl9keW5wdHJfcmVhZChcdTAwMjZidWYsIGNodW5rX3N6LCBcdTAwMjZwdHJfeGRwLCBvZmZzZXQsIDApO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRlcnIgPSBicGZfbWVtY21wKGJ1ZiwgZXhwZWN0ZWRfYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRcdGVyciA9IGxvY2FsX21lbWNtcChidWYsIGV4cGVjdGVkX2J1Ziwgc2l6ZW9mKGJ1ZikpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTk1Miw3ICs5NTIsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmUodm9pZCAqcHRyLCBicGZfcmVhZF9keW5wdHJfZm5fdCBicFxuIFx0XHRcdGJyZWFrO1xuIFx0XHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgbGVuLCBcdTAwMjZwdHJfYnVmLCAwLCAwKTtcbiBcbi1cdFx0aWYgKGVyciB8fCBicGZfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKVxuK1x0XHRpZiAoZXJyIHx8IGxvY2FsX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSlcbiBcdFx0XHRlcnIgPSAxO1xuIFxuIFx0XHQvKiBSZXNldCBidWZmZXIgYW5kIGR5bnB0ciAqL1xuQEAgLTk4Niw3ICs5ODYsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfc3RyKHZvaWQgKnB0cixcbiBcdFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChcdTAwMjZidWYsIGxlbiwgXHUwMDI2cHRyX2J1ZiwgMCwgMCk7XG4gXHRcdGlmICghbGVuKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoZXJyIHx8IGJwZl9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAnXFwwJylcbitcdFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAnXFwwJylcbiBcdFx0XHRlcnIgPSAxO1xuIFx0fVxuIFx0YnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoXHUwMDI2cHRyX2J1ZiwgMCk7XG5AQCAtMTAxMiw3ICsxMDEyLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3RfZHlucHRyX3Byb2JlX3hkcChzdHJ1Y3QgeGRwX21kICp4ZHAsIHZvaWQgKnB0cixcbiBcdFx0aWYgKGxlbiBcdTAwM2Ugc2l6ZW9mKGJ1ZikpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoXHUwMDI2YnVmLCBsZW4sIFx1MDAyNnB0cl94ZHAsIG9mZiwgMCk7XG4tXHRcdGlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSlcbitcdFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbikpXG4gXHRcdFx0ZXJyID0gMTtcbiBcdFx0LyogUmVzZXQgYnVmZmVyIGFuZCBkeW5wdHIgKi9cbiBcdFx0X19idWlsdGluX21lbXNldChidWYsIDAsIHNpemVvZihidWYpKTtcbkBAIC0xMDQ4LDcgKzEwNDgsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfc3RyX3hkcChzdHJ1Y3QgeGRwX21kICp4ZHAsIHZvaWQgKlxuIFxuIFx0XHRpZiAoIWxlbilcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKGVyciB8fCBicGZfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4gLSAxKSB8fCBidWZbbGVuIC0gMV0gIT0gJ1xcMCcpXG4rXHRcdGlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4gLSAxKSB8fCBidWZbbGVuIC0gMV0gIT0gJ1xcMCcpXG4gXHRcdFx0ZXJyID0gMTtcbiBcbiBcdFx0X19idWlsdGluX21lbXNldChidWYsIDAsIHNpemVvZihidWYpKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuY1xuaW5kZXggYmRkYzRlODU3OWQyNDQuLmU2N2ZlOTcwMGU1OTNjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuY1xuQEAgLTksNiArOSwxMCBAQFxuIGNoYXIgKnVzZXJfcHRyID0gKGNoYXIgKikxO1xuIGNoYXIgKmludmFsaWRfa2Vybl9wdHIgPSAoY2hhciAqKS0xO1xuIFxuK2V4dGVybiBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbikgX19rc3ltO1xuK2V4dGVybiBpbnQgYnBmX21lbWNtcChjb25zdCB2b2lkICpwdHIxX19pZ24sIGNvbnN0IHZvaWQgKnB0cjJfX2lnbixcbitcdFx0ICAgICAgc2l6ZV90IHNpemUpIF9fa3N5bTtcbitcbiAvKlxuICAqIFdoZW4gcGFzc2luZyB1c2Vyc3BhY2UgcG9pbnRlcnMsIHRoZSBlcnJvciBjb2RlIGRpZmZlcnMgYmFzZWQgb24gYXJjaDpcbiAgKiAgIC1FUkFOR0Ugb24gYXJjaGVzIHdpdGggbm9uLW92ZXJsYXBwaW5nIGFkZHJlc3Mgc3BhY2VzXG5AQCAtNTMsNiArNTcsMTAgQEAgU0VDKFwic3lzY2FsbFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5zdHJfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVyblxuIFNFQyhcInN5c2NhbGxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJuc3RyX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5zdHIoXCJoZWxsb1wiLCBOVUxMLCAxKTsgfVxuIFNFQyhcInN5c2NhbGxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJuY2FzZXN0cl9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihOVUxMLCBcImhlbGxvXCIsIDEpOyB9XG4gU0VDKFwic3lzY2FsbFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5jYXNlc3RyX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFwiaGVsbG9cIiwgTlVMTCwgMSk7IH1cbitTRUMoXCJzeXNjYWxsXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3RfbWVtY21wX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChOVUxMLCBcInhcIiwgMSk7IH1cbitTRUMoXCJzeXNjYWxsXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3RfbWVtY21wX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChcInhcIiwgTlVMTCwgMSk7IH1cbitTRUMoXCJzeXNjYWxsXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RycGJya19udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKE5VTEwsIFwieFwiKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJwYnJrX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXCJ4XCIsIE5VTEwpOyB9XG4gXG4gLyogUGFzc2luZyB1c2Vyc3BhY2UgcHRyIHRvIHN0cmluZyBrZnVuY3MgKi9cbiBTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RyY21wX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjbXAodXNlcl9wdHIsIFwiaGVsbG9cIik7IH1cbkBAIC03OSw2ICs4NywxMCBAQCBTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybnN0cl91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJlXG4gU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cm5zdHJfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5zdHIoXCJoZWxsb1wiLCB1c2VyX3B0ciwgMSk7IH1cbiBTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKHVzZXJfcHRyLCBcImhlbGxvXCIsIDEpOyB9XG4gU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihcImhlbGxvXCIsIHVzZXJfcHRyLCAxKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9tZW1jbXBfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcCh1c2VyX3B0ciwgXCJ4XCIsIDEpOyB9XG4rU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X21lbWNtcF91c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKFwieFwiLCB1c2VyX3B0ciwgMSk7IH1cbitTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RycGJya191c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayh1c2VyX3B0ciwgXCJ4XCIpOyB9XG4rU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cnBicmtfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXCJ4XCIsIHVzZXJfcHRyKTsgfVxuIFxuICNlbmRpZiAvKiBfX1RBUkdFVF9BUkNIX3MzOTAgKi9cbiBcbkBAIC0xMDcsNSArMTE5LDkgQEAgU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJuc3RyX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVyblxuIFNFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RybnN0cl9wYWdlZmF1bHQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5zdHIoXCJoZWxsb1wiLCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfVxuIFNFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihpbnZhbGlkX2tlcm5fcHRyLCBcImhlbGxvXCIsIDEpOyB9XG4gU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9wYWdlZmF1bHQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFwiaGVsbG9cIiwgaW52YWxpZF9rZXJuX3B0ciwgMSk7IH1cbitTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X21lbWNtcF9wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChpbnZhbGlkX2tlcm5fcHRyLCBcInhcIiwgMSk7IH1cbitTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X21lbWNtcF9wYWdlZmF1bHQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChcInhcIiwgaW52YWxpZF9rZXJuX3B0ciwgMSk7IH1cbitTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cnBicmtfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKGludmFsaWRfa2Vybl9wdHIsIFwieFwiKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RycGJya19wYWdlZmF1bHQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXCJ4XCIsIGludmFsaWRfa2Vybl9wdHIpOyB9XG4gXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuY1xuaW5kZXggZjY1YjEyMjZhODFhMzcuLmU2N2I4MGFiM2NkMmM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmNcbkBAIC03LDYgKzcsMTAgQEBcbiBcbiBjaGFyIHN0cltdID0gXCJoZWxsbyB3b3JsZFwiO1xuIFxuK2V4dGVybiBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbikgX19rc3ltO1xuK2V4dGVybiBpbnQgYnBmX21lbWNtcChjb25zdCB2b2lkICpwdHIxX19pZ24sIGNvbnN0IHZvaWQgKnB0cjJfX2lnbixcbitcdFx0ICAgICAgc2l6ZV90IHNpemUpIF9fa3N5bTtcbitcbiAjZGVmaW5lIF9fdGVzdChyZXR2YWwpIFNFQyhcInN5c2NhbGxcIikgX19zdWNjZXNzIF9fcmV0dmFsKHJldHZhbClcbiBcbiAvKiBGdW5jdGlvbmFsIHRlc3RzICovXG5AQCAtNjAsNCArNjQsMjUgQEAgX190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX25vdGZvdW5kMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXNcbiBfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfbm90Zm91bmQzKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFwiXCIsIFwiYVwiLCAwKTsgfVxuIF9fdGVzdCgwKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9lbXB0eSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihzdHIsIFwiXCIsIDEpOyB9XG4gXG4rLyogYnBmX3N0cnBicmsgLSBmdW5jdGlvbmFsIHRlc3RzICovXG4rX190ZXN0KDApIGludCB0ZXN0X3N0cnBicmtfZm91bmRfZmlyc3Qodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFwiaFwiKTsgfVxuK19fdGVzdCg0KSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX21pZGRsZSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXCJvd1wiKTsgfVxuK19fdGVzdCg2KSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX211bHRpcGxlKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcIndcIik7IH1cbitfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RycGJya19ub3Rmb3VuZCh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXCJ4eXpcIik7IH1cbitfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RycGJya19lbXB0eV9hY2NlcHQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFwiXCIpOyB9XG4rXG4rLyogYnBmX21lbWNtcCAtIGZ1bmN0aW9uYWwgdGVzdHMgKi9cbitjaGFyIGRhdGExW10gPSBcImhlbGxvIHdvcmxkXCI7XG4rY2hhciBkYXRhMltdID0gXCJoZWxsbyB3b3JsZFwiO1xuK2NoYXIgZGF0YTNbXSA9IFwiaGVsbG8gd29ybGVcIjtcbitfX3Rlc3QoMCkgaW50IHRlc3RfbWVtY21wX2VxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTIsIHNpemVvZihkYXRhMSkpOyB9XG4rX190ZXN0KC0xKSBpbnQgdGVzdF9tZW1jbXBfbmVxX2xlc3Modm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGRhdGExLCBkYXRhMywgc2l6ZW9mKGRhdGExKSk7IH1cbitfX3Rlc3QoMSkgaW50IHRlc3RfbWVtY21wX25lcV9ncmVhdGVyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMywgZGF0YTEsIHNpemVvZihkYXRhMSkpOyB9XG4rX190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9zaXplX3plcm8odm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGRhdGExLCBkYXRhMywgMCk7IH1cbisvKiBtZW1jbXAgc2hvdWxkIE5PVCBzdG9wIGF0IG51bGwgYnl0ZSAtIGNvbXBhcmUgcGFzdCAnXFwwJyAqL1xuK2NoYXIgYmluMVtdID0geyAnYScsICdcXDAnLCAnYycgfTtcbitjaGFyIGJpbjJbXSA9IHsgJ2EnLCAnXFwwJywgJ2QnIH07XG4rX190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9udWxsX2J5dGVfZXEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGJpbjEsIGJpbjEsIHNpemVvZihiaW4xKSk7IH1cbitfX3Rlc3QoLTEpIGludCB0ZXN0X21lbWNtcF9udWxsX2J5dGVfbmVxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChiaW4xLCBiaW4yLCBzaXplb2YoYmluMSkpOyB9XG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDM6MzQ6MzcuNDk0MDA5NTQ5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA5MDAxNDIyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgS2Z1bmMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyB0d28gbmV3IEJQRiBrZnVuY3M6IGBicGZfc3RycGJya2AgYW5kIGBicGZfbWVtY21wYC4gSSBzZWUgdGhhdCB0aGV5J3JlIGltcGxlbWVudGVkIGluIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AgYW5kIHJlZ2lzdGVyZWQgdXNpbmcgYEJURl9JRF9GTEFHU2AuIEdvb2QsIHN0YW5kYXJkIHByYWN0aWNlIHRoZXJlLiBJIGFsc28gc2VlIHRoYXQgdGhlcmUncyBiZWVuIHNvbWUgcmVuYW1pbmcgb2YgYW4gZXhpc3RpbmcgYGJwZl9tZW1jbXBgIHRvIGBsb2NhbF9tZW1jbXBgIGluIGBkeW5wdHJfc3VjY2Vzcy5jYCB0byBhdm9pZCBhIG5hbWUgY29sbGlzaW9uLiBUaGF0J3MgcHJ1ZGVudDsgaXQgYXZvaWRzIHBvdGVudGlhbCBoZWFkYWNoZXMgbGF0ZXIuIEFuZCBpdCBsb29rcyBsaWtlIHByb3BlciB0ZXN0IGNvdmVyYWdlIGhhcyBiZWVuIGFkZGVkLiBUaGVyZSBhcmUgZmFpbHVyZSBjYXNlcyBpbiBgc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jYCBhbmQgc3VjY2VzcyBjYXNlcyBpbiBgc3RyaW5nX2tmdW5jc19zdWNjZXNzLmNgLiBOaWNlLlxuXG5UaGUgZmFjdCB0aGF0IHRoaXMgYWRkcyBuZXcsIGNhbGxhYmxlIGtmdW5jcyBtZWFucyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEJQRiBpbmZyYXN0cnVjdHVyZSwgYW5kIEkgbmVlZCB0byB0cmVhdCBpdCBhcyBzdWNoLiBUaGlzIHNjcmVhbXMgXCJmdXp6aW5nIGNhbmRpZGF0ZS5cIiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBuZXcgZnVuY3Rpb25zIGFyZSByb2J1c3QuXG5cbkxldCdzIGRpdmUgaW50byBga2VybmVsL2JwZi9oZWxwZXJzLmNgIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb3IgYW55dGhpbmcgdW5leHBlY3RlZC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCBmb3IgYGJwZl9zdHJwYnJrYCBhbmQgYGJwZl9tZW1jbXBgIHdpdGhpbiB0aGF0IGZpbGUgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhlaXIgaW5jbHVzaW9uIGFuZCBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgSSBtYXkgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDAzOjM0OjQ1LjU4NDAyNjQ0OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTE2MzMxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc3RycGJya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuYz0zOTQzPV9fYnBmX2tmdW5jIGludCBicGZfc3RyY3Nwbihjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKnJlamVjdF9faWduKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzk5MS0vKipcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozOTkyOiAqIGJwZl9zdHJwYnJrIC0gRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHNldCBvZiBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzk5My0gKiBAc19faWduOiBUaGUgc3RyaW5nIHRvIGJlIHNlYXJjaGVkXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MDAzLSAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQwMDQ6X19icGZfa2Z1bmMgaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDAwNS17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTU1PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY3Nwbik7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDk1NjpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cnBicmspO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NTctQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9tZW1jbXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwMzozNDo0NS42NzMxOTQyMDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDgwODU2Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdDpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIEtlcm5lbCBCUEYgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyB0byBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggYGtlcm5lbC9icGYvaGVscGVycy5jYC4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucy4gQlBGLCB0aGUgQmVya2VsZXkgUGFja2V0IEZpbHRlciwgaXMgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgbW9kZXJuIExpbnV4IHN5c3RlbXMsIGFsbG93aW5nIGZvciBpbi1rZXJuZWwgZXhlY3V0aW9uIG9mIGJ5dGVjb2RlLiBJdCdzIHVzZWQgZm9yIGV2ZXJ5dGhpbmcgZnJvbSBuZXR3b3JrIGZpbHRlcmluZyBhbmQgc2VjdXJpdHkgbW9uaXRvcmluZyB0byB0cmFjaW5nIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcy4gYGhlbHBlcnMuY2AgaXMgbGlrZWx5IHdoZXJlIHRoZSBCUEYgaGVscGVyIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQsIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb25zIHRoYXQgQlBGIHByb2dyYW1zIGNhbGwgdG8gaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBrbm93IGEgZmFpciBiaXQgYWJvdXQgaG93IHRoaXMgd29ya3MsIGFuZCBoYXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYW5kIHBlcmZvcm1hbmNlIHRyYWRlLW9mZnMuXG5cbkknZCB3YW50IHRvIGV4YW1pbmUgYW55IGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCBpbmZsdWVuY2UgaG93IHRoZXNlIGhlbHBlcnMgYXJlIGNvbXBpbGVkLCBlbmFibGVkLCBvciBleHBvc2VkLiBTcGVjaWZpY2FsbHksIEknZCBpbW1lZGlhdGVseSBiZSBsb29raW5nIGZvcjpcblxuKiAgICoqQ29tcGlsZXIgRmxhZ3MqKjogSG93IHRoZSBjb2RlIGlzIGNvbXBpbGVkLiBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbiBmbGFncyB0aGF0IGNvdWxkIGFmZmVjdCBwZXJmb3JtYW5jZSBvciBjb2RlIHNpemU/IEFyZSB0aGVyZSBzZWN1cml0eSBoYXJkZW5pbmcgb3B0aW9ucyBiZWluZyB1c2VkLCBzdWNoIGFzIGAtZnN0YWNrLXByb3RlY3RvcmA/IEFyZSB0aGVyZSBjb21waWxlciBmbGFncyBzcGVjaWZpY2FsbHkgZm9yIEJQRiwgbGlrZSB0aG9zZSBjb250cm9sbGluZyB2ZXJpZmllciBiZWhhdmlvciBvciBkZWJ1Z2dpbmcgb3V0cHV0P1xuKiAgICoqS2NvbmZpZyBPcHRpb25zKio6IFRoZSBLY29uZmlnIGZpbGUgKGxpa2VseSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkgb3IgYSBwYXJlbnQgb25lKSB3b3VsZCBiZSBteSBuZXh0IHN0b3AuIEl0IGRpY3RhdGVzIHdoYXQgZmVhdHVyZXMgYXJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gV2hhdCBLY29uZmlnIG9wdGlvbnMgZW5hYmxlIG9yIGRpc2FibGUgQlBGIGZ1bmN0aW9uYWxpdHkgb3IgaGVscGVyIGZ1bmN0aW9ucz8gV2hhdCBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzIGFuZCB3aGF0IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgbWlnaHQgYWZmZWN0IGhvdyB0aGUgaGVscGVycyBhcmUgdXNlZD9cbiogICAqKk1vZHVsZSBDb25maWd1cmF0aW9uKio6IElmIHRoZSBoZWxwZXJzIGFyZSBjb21waWxlZCBhcyBhIG1vZHVsZSwgd2hhdCBhcmUgdGhlIHJlbGV2YW50IG1vZHVsZSBwYXJhbWV0ZXJzPyBIb3cgYXJlIHRoZXkgbG9hZGVkIGFuZCB1bmxvYWRlZD8gV2hhdCdzIHRoZSBtb2R1bGUncyBkZXBlbmRlbmNpZXMsIGlmIGFueSwgdGhhdCB3b3VsZCBpbmZsdWVuY2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGhlbHBlciBmdW5jdGlvbnM/XG4qICAgKipTZWN1cml0eSBNZWNoYW5pc21zKio6IEFyZSB0aGVyZSBhbnkgc2VjdXJpdHktcmVsYXRlZCBLY29uZmlnIG9wdGlvbnMgdGhhdCByZXN0cmljdCB0aGUgY2FwYWJpbGl0aWVzIG9mIEJQRiBwcm9ncmFtcyBvciB0aGUgaGVscGVyIGZ1bmN0aW9ucz8gSXMgdGhlIEJQRiB2ZXJpZmllciBlbmFibGVkIGFuZCBjb25maWd1cmVkIHNlY3VyZWx5PyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHNldHRpbmdzIGZvciB0aGUgdXNlIG9mIEJQRiBpbiBzcGVjaWZpYyBjb250ZXh0cywgc3VjaCBhcyBjb250YWluZXIgZW52aXJvbm1lbnRzP1xuKiAgICoqQnVpbGQgU3lzdGVtIFNldHRpbmdzKio6IEhvdyBkb2VzIHRoZSBidWlsZCBzeXN0ZW0gKGUuZy4sIGBtYWtlYCkgaGFuZGxlIHRoZSBjb21waWxhdGlvbiBhbmQgbGlua2luZyBvZiB0aGlzIGNvZGU/IEFyZSB0aGVyZSBhbnkgc3BlY2lhbCB0YXJnZXRzIG9yIHJ1bGVzIGZvciBCUEYtcmVsYXRlZCBjb2RlPyBBcmUgdGhlcmUgYW55IGVudmlyb25tZW50IHZhcmlhYmxlcyBvciBvdGhlciBzZXR0aW5ncyB0aGF0IGNvdWxkIGFmZmVjdCBob3cgaXQncyBidWlsdCBvciBjb25maWd1cmVkP1xuKiAgICoqRG9jdW1lbnRhdGlvbioqOiBPZiBjb3Vyc2UsIGFueSBkb2N1bWVudGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNwZWNpZmljIGZpbGUgb3IgdGhlIEJQRiBzeXN0ZW0gd291bGQgYmUgaGVscGZ1bCB0byB1bmRlcnN0YW5kIGFueSBjYXZlYXRzIG9yIGFzc3VtcHRpb25zIHJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbnMuXG5cbkVzc2VudGlhbGx5LCBJIHdhbnQgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYW5kIHRoZSBwb3RlbnRpYWwgaW5mbHVlbmNlIG9uIHRoZSBiZWhhdmlvciBvZiBgaGVscGVycy5jYCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIHRyb3VibGVzaG9vdGluZywgdW5kZXJzdGFuZGluZyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIGFuZCBvcHRpbWl6aW5nIHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTg3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDM6MzQ6NTAuNzU0MDU1OTM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MDkwMTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmM9Mjc2PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X2N1cnJlbnRfY29tbV9wcm90byA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI4My1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyODQ6I2lmIGRlZmluZWQoQ09ORklHX1FVRVVFRF9TUElOTE9DS1MpIHx8IGRlZmluZWQoQ09ORklHX0JQRl9BUkNIX1NQSU5MT0NLKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI4NS1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTM5OT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2ppZmZpZXM2NF9wcm90byA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQwNC1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MDU6I2lmZGVmIENPTkZJR19DR1JPVVBTXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDA2LUJQRl9DQUxMXzAoYnBmX2dldF9jdXJyZW50X2Nncm91cF9pZClcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQ0MD1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9jdXJyZW50X2FuY2VzdG9yX2Nncm91cF9pZF9wcm90byA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0NS19O1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0NjojZW5kaWYgLyogQ09ORklHX0NHUk9VUFMgKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDctXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz03NDQ9c3RhdGljIGludCBicGZfdHJhY2VfY29weV9zdHJpbmcoY2hhciAqYnVmLCB2b2lkICp1bnNhZmVfcHRyLCBjaGFyIGZtdF9wdHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTc1Mi1cXHRjYXNlICdzJzpcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo3NTM6I2lmZGVmIENPTkZJR19BUkNIX0hBU19OT05fT1ZFUkxBUFBJTkdfQUREUkVTU19TUEFDRVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTc1NC1cXHRcXHRpZiAoKHVuc2lnbmVkIGxvbmcpdW5zYWZlX3B0ciBcXHUwMDNjIFRBU0tfU0laRSlcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTIwNjc9YnBmX2Jhc2VfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTIxNjctXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZHlucHRyX2RhdGFfcHJvdG87XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjE2ODojaWZkZWYgQ09ORklHX0NHUk9VUFNcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMTY5LVxcdGNhc2UgQlBGX0ZVTkNfY2dycF9zdG9yYWdlX2dldDpcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTIxNzktI2VuZGlmXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjE4MDojaWZkZWYgQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRFxcbmtlcm5lbC9icGYvaGVscGVycy5jLTIxODEtXFx0Y2FzZSBCUEZfRlVOQ19nZXRfY2dyb3VwX2NsYXNzaWQ6XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yNzUzPUNGSV9OT1NFQUwoYnBmX3Rhc2tfcmVsZWFzZV9kdG9yKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNzU0LVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjI3NTU6I2lmZGVmIENPTkZJR19DR1JPVVBTXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjc1Ni0vKipcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTI4NzY9YnBmX3Rhc2tfZ2V0X2Nncm91cDEoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgaGllcmFyY2h5X2lkKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjg4My19XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mjg4NDojZW5kaWYgLyogQ09ORklHX0NHUk9VUFMgKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yODg1LVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MzI4OT1fX2JwZl9rZnVuYyB2b2lkIGJwZl90aHJvdyh1NjQgY29va2llKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzI5OC1cXHRXQVJOX09OX09OQ0UoIWN0eC5jbnQpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjMyOTk6XFx0LyogUHJldmVudCBLQVNBTiBmYWxzZSBwb3NpdGl2ZXMgZm9yIENPTkZJR19LQVNBTl9TVEFDSyBieSB1bnBvaXNvbmluZ1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTMzMDAtXFx0ICogZGVlcGVyIHN0YWNrIGRlcHRocyB0aGFuIGN0eC5zcCBhcyB3ZSBkbyBub3QgcmV0dXJuIGZyb20gYnBmX3Rocm93LFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDE5Nj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cm5jYXNlc3RyKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24sXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MjAxLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQyMDI6I2lmZGVmIENPTkZJR19LRVlTXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDIwMy0vKipcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQzMjA9X19icGZfa2Z1bmMgaW50IGJwZl92ZXJpZnlfcGtjczdfc2lnbmF0dXJlKHN0cnVjdCBicGZfZHlucHRyICpkYXRhX3AsXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MzIzLXtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzI0OiNpZmRlZiBDT05GSUdfU1lTVEVNX0RBVEFfVkVSSUZJQ0FUSU9OXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDMyNS1cXHRzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkYXRhX3B0ciA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopZGF0YV9wO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDM2MC1cXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDM2MTojZW5kaWYgLyogQ09ORklHX1NZU1RFTV9EQVRBX1ZFUklGSUNBVElPTiAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQzNjItfVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQzNjM6I2VuZGlmIC8qIENPTkZJR19LRVlTICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDM2NC1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4MDY9QlRGX0tGVU5DU19TVEFSVChnZW5lcmljX2J0Zl9pZHMpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDgwNzojaWZkZWYgQ09ORklHX0NSQVNIX0RVTVBcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODA4LUJURl9JRF9GTEFHUyhmdW5jLCBjcmFzaF9rZXhlYywgS0ZfREVTVFJVQ1RJVkUpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODM2PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmJ0cmVlX3JpZ2h0LCBLRl9SRVRfTlVMTClcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODM3LVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4Mzg6I2lmZGVmIENPTkZJR19DR1JPVVBTXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDgzOS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2Nncm91cF9hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkNVIHwgS0ZfUkVUX05VTEwpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODQ4PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGhyb3cpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDg0OTojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODUwLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2VuZF9zaWduYWxfdGFzaylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODUxLSNlbmRpZlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4NTI6I2lmZGVmIENPTkZJR19LRVlTXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDg1My1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2xvb2t1cF91c2VyX2tleSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfU0xFRVBBQkxFKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDg1NT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2tleV9wdXQsIEtGX1JFTEVBU0UpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDg1NjojaWZkZWYgQ09ORklHX1NZU1RFTV9EQVRBX1ZFUklGSUNBVElPTlxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4NTctQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl92ZXJpZnlfcGtjczdfc2lnbmF0dXJlLCBLRl9TTEVFUEFCTEUpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODU5LSNlbmRpZlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4NjA6I2lmZGVmIENPTkZJR19TMzkwXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDg2MS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2dldF9sb3djb3JlKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDg3Mz1CVEZfSUQoZnVuYywgYnBmX3Rhc2tfcmVsZWFzZV9kdG9yKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4NzQ6I2lmZGVmIENPTkZJR19DR1JPVVBTXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDg3NS1CVEZfSUQoc3RydWN0LCBjZ3JvdXApXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODkxPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDg5MjojaWZkZWYgQ09ORklHX0NHUk9VUFNcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODkzLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9jc3NfdGFza19uZXcsIEtGX0lURVJfTkVXKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDkwOT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2R5bnB0cl9tZW1zZXQpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDkxMDojaWZkZWYgQ09ORklHX05FVFxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MTEtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9tb2RpZnlfcmV0dXJuX3Rlc3RfdHApXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTI4PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbG9jYWxfaXJxX3Jlc3RvcmUpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDkyOTojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTMwLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfcHJvYmVfcmVhZF91c2VyX2R5bnB0cilcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQ5Mzc9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cl9keW5wdHIsIEtGX1NMRUVQQUJMRSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTM4LSNlbmRpZlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5Mzk6I2lmZGVmIENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUlxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NDAtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2RtYWJ1Zl9uZXcsIEtGX0lURVJfTkVXIHwgS0ZfU0xFRVBBQkxFKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk2MT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cm5jYXNlc3RyKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTYyOiNpZiBkZWZpbmVkKENPTkZJR19CUEZfTFNNKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19DR1JPVVBTKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NjMtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jZ3JvdXBfcmVhZF94YXR0ciwgS0ZfUkNVKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk3OT1zdGF0aWMgaW50IF9faW5pdCBrZnVuY19pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTg2LVxcdFxcdH0sXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDk4NzojaWZkZWYgQ09ORklHX0NHUk9VUFNcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTg4LVxcdFxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDM6MzQ6NTAuODEwMTUzNTYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyMzIxMDU4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgTmV3IEJQRiBLZnVuY3MgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIG5ldyBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAga2Z1bmNzIGFyZSBiZWluZyBhZGRlZCB0byB0aGUgZ2VuZXJpYyBCVEYga2Z1bmNzLCB3aGljaCBtZWFucyB0aGV5J3JlIGF1dG9tYXRpY2FsbHkgYXZhaWxhYmxlIGlmIEJQRiBpcyBlbmFibGVkLiBObyBzcGVjaWZpYyBjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgYmV5b25kIHRoZSBzdGFuZGFyZCBCUEYgY29uZmlndXJhdGlvbnMsIHdoaWNoIGlzIGFzIGV4cGVjdGVkLlxuXG5NeSBmb2N1cyBpcyBuYXR1cmFsbHkgb24gdGhlc2UgdHdvIGZ1bmN0aW9uczogYGJwZl9zdHJwYnJrYCBhbmQgYGJwZl9tZW1jbXBgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXkncmUgcm9idXN0LiBUaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIHRoZXNlIGZ1bmN0aW9ucyB3aXRoaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgb2YgQlBGIGhlbHBlciBmdW5jdGlvbmFsaXR5LiBJdCdzIGFsc28gcmVuYW1pbmcgYGJwZl9tZW1jbXBgIHRvIGBsb2NhbF9tZW1jbXBgIGluIGEgdGVzdCBmaWxlLCBzbyBJIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhhdCByZW5hbWUgaW4gbXkgYW5hbHlzaXMuIEFkZGl0aW9uYWxseSwgdGhlcmUgYXJlIG5ldyB0ZXN0cyBhZGRlZCBpbiBgc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jYCBhbmQgYHN0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jYCwgc28gSSBuZWVkIHRvIGNoZWNrIHRob3NlIHRvby5cblxuRnVuY3Rpb25hbGx5LCB0aGVzZSBhZGRpdGlvbnMgZW5hYmxlIHN0cmluZyBhbmQgbWVtb3J5IGNvbXBhcmlzb25zIGRpcmVjdGx5IHdpdGhpbiBCUEYgcHJvZ3JhbXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGVzcGVjaWFsbHkgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgaW52b2x2ZSBtZW1vcnkgYWNjZXNzLiBUaGV5IGFyZSBwb3RlbnRpYWwgcG9pbnRzIG9mIHZ1bG5lcmFiaWxpdHkgdGhhdCBuZWVkIHJpZ29yb3VzIHRlc3RpbmcgdG8gcHJldmVudCBwYWdlIGZhdWx0cyBvciBvdGhlciBtZW1vcnktcmVsYXRlZCBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgdGhlIG91dHB1dCBJJ20gZ2VuZXJhdGluZyBmb3IgZnV6emluZyB3aWxsIGJlOlxuXG4qICAgKipXb3J0aEZ1enppbmc6IHRydWUqKiAtIERlZmluaXRlbHksIHRoZXNlIGFyZSBuZXcgY29yZSBmdW5jdGlvbnMuXG4qICAgKipGb2N1c1N5bWJvbHM6IFtcImJwZl9zdHJwYnJrXCIsIFwiYnBmX21lbWNtcFwiXSoqIC0gVGhlc2UgYXJlIHRoZSB0d28gZnVuY3Rpb25zIHRoYXQgbmVlZCB0aGUgbW9zdCBhdHRlbnRpb24uXG4qICAgKipFbmFibGVDb25maWdzOiBbXSoqIC0gTm8gYWRkaXRpb25hbCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQuXG4qICAgKipSZWFzb25pbmc6IFwiVGhlIHBhdGNoIGFkZHMgdHdvIG5ldyBCUEYga2Z1bmNzLCBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAsIHdoaWNoIGFsbG93IEJQRiBwcm9ncmFtcyB0byBwZXJmb3JtIHN0cmluZyBhbmQgbWVtb3J5IGNvbXBhcmlzb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIEJQRiBoZWxwZXIgbGlicmFyeSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBoYW5kbGUgdmFyaW91cyBpbnB1dHMgc2FmZWx5LCBlc3BlY2lhbGx5IHNpbmNlIHRoZXkgZGVhbCB3aXRoIG1lbW9yeSBhY2Nlc3MgYW5kIHBvdGVudGlhbCBwYWdlIGZhdWx0cy5cIioqIC0gVGhpcyBzdW1zIHVwIHRoZSBjb3JlIHJpc2sgYXNzZXNzbWVudCBhbmQganVzdGlmaWNhdGlvbiBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNzEsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDAzOjM1OjA0LjA0MjI2Mjg0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zdHJwYnJrXCIsXG4gICAgXCJicGZfbWVtY21wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB0d28gbmV3IEJQRiBrZnVuY3MsIGBicGZfc3RycGJya2AgYW5kIGBicGZfbWVtY21wYCwgd2hpY2ggYWxsb3cgQlBGIHByb2dyYW1zIHRvIHBlcmZvcm0gc3RyaW5nIGFuZCBtZW1vcnkgY29tcGFyaXNvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIGhlbHBlciBsaWJyYXJ5IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB2YXJpb3VzIGlucHV0cyBzYWZlbHksIGVzcGVjaWFsbHkgc2luY2UgdGhleSBkZWFsIHdpdGggbWVtb3J5IGFjY2VzcyBhbmQgcG90ZW50aWFsIHBhZ2UgZmF1bHRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zdHJwYnJrXCIsXG4gICAgXCJicGZfbWVtY21wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB0d28gbmV3IEJQRiBrZnVuY3MsIGBicGZfc3RycGJya2AgYW5kIGBicGZfbWVtY21wYCwgd2hpY2ggYWxsb3cgQlBGIHByb2dyYW1zIHRvIHBlcmZvcm0gc3RyaW5nIGFuZCBtZW1vcnkgY29tcGFyaXNvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIGhlbHBlciBsaWJyYXJ5IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB2YXJpb3VzIGlucHV0cyBzYWZlbHksIGVzcGVjaWFsbHkgc2luY2UgdGhleSBkZWFsIHdpdGggbWVtb3J5IGFjY2VzcyBhbmQgcG90ZW50aWFsIHBhZ2UgZmF1bHRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowx4hxx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 03:24:23 +0000 UTC FinishedAt: 2026-06-23 03:35:05 +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": "d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd", "config_name": "upstream-apparmor-kasan.config", "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": "d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd", "config_name": "upstream-apparmor-kasan.config", "series_id": "903d6c86-5f28-4c0f-bdd7-03ae52db2997" }, "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+CgkJCTx0ZD4yMDI2LzA2LzIzIDAzOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3N0cnBicmsmIzM0OywKICAgICYjMzQ7YnBmX21lbWNtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHR3byBuZXcgQlBGIGtmdW5jcywgYGJwZl9zdHJwYnJrYCBhbmQgYGJwZl9tZW1jbXBgLCB3aGljaCBhbGxvdyBCUEYgcHJvZ3JhbXMgdG8gcGVyZm9ybSBzdHJpbmcgYW5kIG1lbW9yeSBjb21wYXJpc29ucy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgaGVscGVyIGxpYnJhcnkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgaGFuZGxlIHZhcmlvdXMgaW5wdXRzIHNhZmVseSwgZXNwZWNpYWxseSBzaW5jZSB0aGV5IGRlYWwgd2l0aCBtZW1vcnkgYWNjZXNzIGFuZCBwb3RlbnRpYWwgcGFnZSBmYXVsdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDM6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzM2RkNTRmMjE5M2Y1NDIxZDE3ZWQ2YWEzNzQ5NTY3ZjM0MzI3NDIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMDM6MzQ6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuaW5kZXggYjUzMTRjOWZlZDNjZjAuLmYyNGNmZGIyMjYzNWM3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtMzk3MSw2ICYjNDM7Mzk3MSwxMDkgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJjc3BuKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqcmVqZWN0X19pZ24pXG4gXHRyZXR1cm4gLUVGQVVMVDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfbWVtY21wIC0gQ29tcGFyZSB0d28gbWVtb3J5IHJlZ2lvbnMgYnl0ZSBieSBieXRlXG4mIzQzOyAqIEBwdHIxX19pZ246IEZpcnN0IG1lbW9yeSByZWdpb25cbiYjNDM7ICogQHB0cjJfX2lnbjogU2Vjb25kIG1lbW9yeSByZWdpb25cbiYjNDM7ICogQHNpemU6IE51bWJlciBvZiBieXRlcyB0byBjb21wYXJlXG4mIzQzOyAqXG4mIzQzOyAqIENvbXBhcmVzIHRoZSBmaXJzdCBAc2l6ZSBieXRlcyBvZiB0aGUgbWVtb3J5IGFyZWFzIEBwdHIxX19pZ24gYW5kXG4mIzQzOyAqIEBwdHIyX19pZ24uIFVubGlrZSBicGZfc3RyY21wLCBudWxsIGJ5dGVzIGRvIG5vdCB0ZXJtaW5hdGUgdGhlIGNvbXBhcmlzb24uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAlMCAgICAgICAtIFRoZSBtZW1vcnkgcmVnaW9ucyBhcmUgZXF1YWxcbiYjNDM7ICogKiAlLTEgICAgICAtIEBwdHIxX19pZ24gaXMgbGVzcyB0aGFuIEBwdHIyX19pZ25cbiYjNDM7ICogKiAlMSAgICAgICAtIEBwdHIxX19pZ24gaXMgZ3JlYXRlciB0aGFuIEBwdHIyX19pZ25cbiYjNDM7ICogKiAlLUVGQVVMVCAtIENhbm5vdCByZWFkIG9uZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbnNcbiYjNDM7ICogKiAlLUUyQklHICAtIEBzaXplIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCBzaXplXG4mIzQzOyAqICogJS1FUkFOR0UgLSBPbmUgb2YgdGhlIG1lbW9yeSByZWdpb25zIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2VcbiYjNDM7ICovXG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfc3RycGJyayAtIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzZXQgb2YgY2hhcmFjdGVycyBpbiBhIHN0cmluZ1xuJiM0MzsgKiBAc19faWduOiBUaGUgc3RyaW5nIHRvIGJlIHNlYXJjaGVkXG4mIzQzOyAqIEBhY2NlcHRfX2lnbjogVGhlIHN0cmluZyBjb250YWluaW5nIHRoZSBjaGFyYWN0ZXJzIHRvIHNlYXJjaCBmb3JcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlxuJiM0MzsgKiAqIFx1MDAzZT0wICAgICAgLSBJbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIEBzX19pZ24gdGhhdCBtYXRjaGVzIGFueVxuJiM0MzsgKiAgICAgICAgICAgICAgY2hhcmFjdGVyIGluIEBhY2NlcHRfX2lnblxuJiM0MzsgKiAqICUtRU5PRU5UIC0gTm8gY2hhcmFjdGVyIG9mIEBhY2NlcHRfX2lnbiBmb3VuZCBpbiBAc19faWduXG4mIzQzOyAqICogJS1FRkFVTFQgLSBDYW5ub3QgcmVhZCBvbmUgb2YgdGhlIHN0cmluZ3NcbiYjNDM7ICogKiAlLUUyQklHICAtIE9uZSBvZiB0aGUgc3RyaW5ncyBpcyB0b28gbGFyZ2VcbiYjNDM7ICogKiAlLUVSQU5HRSAtIE9uZSBvZiB0aGUgc3RyaW5ncyBpcyBvdXRzaWRlIG9mIGtlcm5lbCBhZGRyZXNzIHNwYWNlXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbilcbiYjNDM7e1xuJiM0MztcdGNoYXIgY3MsIGNhO1xuJiM0MztcdGludCBpLCBqO1xuJiM0MztcbiYjNDM7XHRpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHNfX2lnbiwgMSkgfHxcbiYjNDM7XHQgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKGFjY2VwdF9faWduLCAxKSkge1xuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRndWFyZChwYWdlZmF1bHQpKCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjcywgc19faWduLCBjaGFyLCBlcnJfb3V0KTtcbiYjNDM7XHRcdGlmIChjcyA9PSAmIzM5O1xcMCYjMzk7KVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRfX2dldF9rZXJuZWxfbm9mYXVsdChcdTAwMjZjYSwgYWNjZXB0X19pZ24gJiM0MzsgaiwgY2hhciwgZXJyX291dCk7XG4mIzQzO1x0XHRcdGlmIChjYSA9PSAmIzM5O1xcMCYjMzk7KVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRpZiAoY3MgPT0gY2EpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoaiA9PSBYQVRUUl9TSVpFX01BWClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FMkJJRztcbiYjNDM7XHRcdHNfX2lnbiYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAtRTJCSUc7XG4mIzQzO2Vycl9vdXQ6XG4mIzQzO1x0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfbWVtY21wIC0gQ29tcGFyZSB0d28gbWVtb3J5IHJlZ2lvbnMgYnl0ZSBieSBieXRlXG4mIzQzOyAqIEBwdHIxX19pZ246IEZpcnN0IG1lbW9yeSByZWdpb25cbiYjNDM7ICogQHB0cjJfX2lnbjogU2Vjb25kIG1lbW9yeSByZWdpb25cbiYjNDM7ICogQHNpemU6IE51bWJlciBvZiBieXRlcyB0byBjb21wYXJlXG4mIzQzOyAqXG4mIzQzOyAqIENvbXBhcmVzIHRoZSBmaXJzdCBAc2l6ZSBieXRlcyBvZiB0aGUgbWVtb3J5IGFyZWFzIEBwdHIxX19pZ24gYW5kXG4mIzQzOyAqIEBwdHIyX19pZ24uIFVubGlrZSBicGZfc3RyY21wLCBudWxsIGJ5dGVzIGRvIG5vdCB0ZXJtaW5hdGUgdGhlIGNvbXBhcmlzb24uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAlMCAgICAgICAtIFRoZSBtZW1vcnkgcmVnaW9ucyBhcmUgZXF1YWxcbiYjNDM7ICogKiAlLTEgICAgICAtIEBwdHIxX19pZ24gaXMgbGVzcyB0aGFuIEBwdHIyX19pZ25cbiYjNDM7ICogKiAlMSAgICAgICAtIEBwdHIxX19pZ24gaXMgZ3JlYXRlciB0aGFuIEBwdHIyX19pZ25cbiYjNDM7ICogKiAlLUVGQVVMVCAtIENhbm5vdCByZWFkIG9uZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbnNcbiYjNDM7ICogKiAlLUUyQklHICAtIEBzaXplIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCBzaXplXG4mIzQzOyAqICogJS1FUkFOR0UgLSBPbmUgb2YgdGhlIG1lbW9yeSByZWdpb25zIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2VcbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIGludCBicGZfbWVtY21wKGNvbnN0IHZvaWQgKnB0cjFfX2lnbiwgY29uc3Qgdm9pZCAqcHRyMl9faWduLFxuJiM0MztcdFx0XHQgICBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKnAxID0gcHRyMV9faWduLCAqcDIgPSBwdHIyX19pZ247XG4mIzQzO1x0Y2hhciBjMSwgYzI7XG4mIzQzO1x0c2l6ZV90IGk7XG4mIzQzO1xuJiM0MztcdGlmIChzaXplIFx1MDAzZSBYQVRUUl9TSVpFX01BWClcbiYjNDM7XHRcdHJldHVybiAtRTJCSUc7XG4mIzQzO1x0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChwMSwgc2l6ZSkgfHxcbiYjNDM7XHQgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHAyLCBzaXplKSlcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcbiYjNDM7XHRndWFyZChwYWdlZmF1bHQpKCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMxLCBwMSAmIzQzOyBpLCBjaGFyLCBlcnJfb3V0KTtcbiYjNDM7XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMyLCBwMiAmIzQzOyBpLCBjaGFyLCBlcnJfb3V0KTtcbiYjNDM7XHRcdGlmIChjMSAhPSBjMilcbiYjNDM7XHRcdFx0cmV0dXJuIGMxIFx1MDAzYyBjMiA/IC0xIDogMTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO2Vycl9vdXQ6XG4mIzQzO1x0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBfX2JwZl9zdHJuc3RyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IGxlbixcbiBcdFx0XHQgYm9vbCBpZ25vcmVfY2FzZSlcbiB7XG5AQCAtNDg1MCw2ICYjNDM7NDk1Myw4IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RybGVuKTtcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cm5sZW4pO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3Ryc3BuKTtcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNzcG4pO1xuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cnBicmspO1xuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX21lbWNtcCk7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJzdHIpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY2FzZXN0cik7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJuc3RyKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jXG5pbmRleCBlMGQ2NzJkOTNhZGY4NS4uMDcxNTgxZmYwODMzZjMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9zdWNjZXNzLmNcbkBAIC02MjQsNyAmIzQzOzYyNCw3IEBAIGludCBCUEZfUFJPRyh0ZXN0X2R5bnB0cl9za2JfdHBfYnRmLCB2b2lkICpza2IsIHZvaWQgKmxvY2F0aW9uKVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGJwZl9tZW1jbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgdTMyIHNpemUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxvY2FsX21lbWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCB1MzIgc2l6ZSlcbiB7XG4gXHRpbnQgaTtcbiBcbkBAIC02NTAsMTIgJiM0Mzs2NTAsMTIgQEAgaW50IHRlc3RfZHlucHRyX2NvcHkodm9pZCAqY3R4KVxuIFx0ZXJyID0gYnBmX2R5bnB0cl93cml0ZShcdTAwMjZzcmMsIDAsIGRhdGEsIHN6LCAwKTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX2NvcHkoXHUwMDI2ZHN0LCAwLCBcdTAwMjZzcmMsIDAsIHN6KTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoYnVmLCBzeiwgXHUwMDI2ZHN0LCAwLCAwKTtcbi1cdGVyciA9IGVyciA/OiBicGZfbWVtY21wKGRhdGEsIGJ1Ziwgc3opO1xuJiM0MztcdGVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBzeik7XG4gXG4gXHQvKiBUZXN0IHRoYXQgb2Zmc2V0cyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgKi9cbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX2NvcHkoXHUwMDI2ZHN0LCAzLCBcdTAwMjZzcmMsIDUsIHN6IC0gNSk7XG4gXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKGJ1Ziwgc3ogLSA1LCBcdTAwMjZkc3QsIDMsIDApO1xuLVx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZGF0YSAmIzQzOyA1LCBidWYsIHN6IC0gNSk7XG4mIzQzO1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChkYXRhICYjNDM7IDUsIGJ1Ziwgc3ogLSA1KTtcbiBcbiBcdGJwZl9yaW5nYnVmX2Rpc2NhcmRfZHlucHRyKFx1MDAyNnNyYywgMCk7XG4gXHRicGZfcmluZ2J1Zl9kaXNjYXJkX2R5bnB0cihcdTAwMjZkc3QsIDApO1xuQEAgLTY5Miw3ICYjNDM7NjkyLDcgQEAgaW50IHRlc3RfZHlucHRyX2NvcHlfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdFx0ZXJyID0gYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgbGVuLCBcdTAwMjZwdHJfeGRwLCBpICogbGVuLCAwKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dDtcbi1cdFx0aWYgKGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXG4mIzQzO1x0XHRpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTcxMyw3ICYjNDM7NzEzLDcgQEAgaW50IHRlc3RfZHlucHRyX2NvcHlfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdFx0ZXJyID0gYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgbGVuLCBcdTAwMjZwdHJfYnVmLCBpICogbGVuLCAwKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dDtcbi1cdFx0aWYgKGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXG4mIzQzO1x0XHRpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTcyNyw3ICYjNDM7NzI3LDcgQEAgaW50IHRlc3RfZHlucHRyX2NvcHlfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdFx0ZXJyID0gYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgbGVuLCBcdTAwMjZwdHJfeGRwLCAyICYjNDM7IGkgKiBsZW4sIDApO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRpZiAoYnBmX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcbiYjNDM7XHRcdGlmIChsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5AQCAtNzUwLDcgJiM0Mzs3NTAsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm8odm9pZCAqY3R4KVxuIFxuIFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfemVyb19kYXRhLCBkYXRhX3N6LCAwLCBcdTAwMjZwdHIpO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KFx1MDAyNnB0ciwgMCwgZGF0YV9zeiwgMCk7XG4tXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcCh6ZXJvZXMsIG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3opO1xuJiM0MztcdGVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoemVyb2VzLCBtZW1zZXRfemVyb19kYXRhLCBkYXRhX3N6KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03NzAsNyAmIzQzOzc3MCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfbm90emVybyh2b2lkICpjdHgpXG4gXG4gXHRlcnIgPSBicGZfZHlucHRyX2Zyb21fbWVtKG1lbXNldF9ub3R6ZXJvX2RhdGEsIGRhdGFfc3osIDAsIFx1MDAyNnB0cik7XG4gXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoXHUwMDI2cHRyLCAwLCBkYXRhX3N6LCBEWU5QVFJfTUVNU0VUX1ZBTCk7XG4tXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X25vdHplcm9fZGF0YSwgZGF0YV9zeik7XG4mIzQzO1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X25vdHplcm9fZGF0YSwgZGF0YV9zeik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNzg2LDcgJiM0Mzs3ODYsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm9fb2Zmc2V0KHZvaWQgKmN0eClcbiBcbiBcdGVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X3plcm9fb2Zmc2V0X2RhdGEsIGRhdGFfc3osIDAsIFx1MDAyNnB0cik7XG4gXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoXHUwMDI2cHRyLCA4LCA0LCAwKTtcbi1cdGVyciA9IGVyciA/OiBicGZfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfemVyb19vZmZzZXRfZGF0YSwgZGF0YV9zeik7XG4mIzQzO1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fb2Zmc2V0X2RhdGEsIGRhdGFfc3opO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTgwMyw3ICYjNDM7ODAzLDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF96ZXJvX2FkanVzdGVkKHZvaWQgKmN0eClcbiBcdGVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeiwgMCwgXHUwMDI2cHRyKTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX2FkanVzdChcdTAwMjZwdHIsIDQsIDgpO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KFx1MDAyNnB0ciwgMCwgYnBmX2R5bnB0cl9zaXplKFx1MDAyNnB0ciksIDApO1xuLVx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX2FkanVzdGVkX2RhdGEsIGRhdGFfc3opO1xuJiM0MztcdGVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX2FkanVzdGVkX2RhdGEsIGRhdGFfc3opO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTg5OCw3ICYjNDM7ODk4LDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF94ZHBfY2h1bmtzKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdFx0ZXJyID0gYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgY2h1bmtfc3osIFx1MDAyNnB0cl94ZHAsIG9mZnNldCwgMCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdGVyciA9IGJwZl9tZW1jbXAoYnVmLCBleHBlY3RlZF9idWYsIHNpemVvZihidWYpKTtcbiYjNDM7XHRcdGVyciA9IGxvY2FsX21lbWNtcChidWYsIGV4cGVjdGVkX2J1Ziwgc2l6ZW9mKGJ1ZikpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTk1Miw3ICYjNDM7OTUyLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3RfZHlucHRyX3Byb2JlKHZvaWQgKnB0ciwgYnBmX3JlYWRfZHlucHRyX2ZuX3QgYnBcbiBcdFx0XHRicmVhaztcbiBcdFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChcdTAwMjZidWYsIGxlbiwgXHUwMDI2cHRyX2J1ZiwgMCwgMCk7XG4gXG4tXHRcdGlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSlcbiYjNDM7XHRcdGlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKVxuIFx0XHRcdGVyciA9IDE7XG4gXG4gXHRcdC8qIFJlc2V0IGJ1ZmZlciBhbmQgZHlucHRyICovXG5AQCAtOTg2LDcgJiM0Mzs5ODYsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfc3RyKHZvaWQgKnB0cixcbiBcdFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChcdTAwMjZidWYsIGxlbiwgXHUwMDI2cHRyX2J1ZiwgMCwgMCk7XG4gXHRcdGlmICghbGVuKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoZXJyIHx8IGJwZl9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAmIzM5O1xcMCYjMzk7KVxuJiM0MztcdFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAmIzM5O1xcMCYjMzk7KVxuIFx0XHRcdGVyciA9IDE7XG4gXHR9XG4gXHRicGZfcmluZ2J1Zl9kaXNjYXJkX2R5bnB0cihcdTAwMjZwdHJfYnVmLCAwKTtcbkBAIC0xMDEyLDcgJiM0MzsxMDEyLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3RfZHlucHRyX3Byb2JlX3hkcChzdHJ1Y3QgeGRwX21kICp4ZHAsIHZvaWQgKnB0cixcbiBcdFx0aWYgKGxlbiBcdTAwM2Ugc2l6ZW9mKGJ1ZikpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoXHUwMDI2YnVmLCBsZW4sIFx1MDAyNnB0cl94ZHAsIG9mZiwgMCk7XG4tXHRcdGlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSlcbiYjNDM7XHRcdGlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKVxuIFx0XHRcdGVyciA9IDE7XG4gXHRcdC8qIFJlc2V0IGJ1ZmZlciBhbmQgZHlucHRyICovXG4gXHRcdF9fYnVpbHRpbl9tZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7XG5AQCAtMTA0OCw3ICYjNDM7MTA0OCw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X2R5bnB0cl9wcm9iZV9zdHJfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCwgdm9pZCAqXG4gXG4gXHRcdGlmICghbGVuKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoZXJyIHx8IGJwZl9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAmIzM5O1xcMCYjMzk7KVxuJiM0MztcdFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAmIzM5O1xcMCYjMzk7KVxuIFx0XHRcdGVyciA9IDE7XG4gXG4gXHRcdF9fYnVpbHRpbl9tZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmNcbmluZGV4IGJkZGM0ZTg1NzlkMjQ0Li5lNjdmZTk3MDBlNTkzYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmNcbkBAIC05LDYgJiM0Mzs5LDEwIEBAXG4gY2hhciAqdXNlcl9wdHIgPSAoY2hhciAqKTE7XG4gY2hhciAqaW52YWxpZF9rZXJuX3B0ciA9IChjaGFyICopLTE7XG4gXG4mIzQzO2V4dGVybiBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbikgX19rc3ltO1xuJiM0MztleHRlcm4gaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sXG4mIzQzO1x0XHQgICAgICBzaXplX3Qgc2l6ZSkgX19rc3ltO1xuJiM0MztcbiAvKlxuICAqIFdoZW4gcGFzc2luZyB1c2Vyc3BhY2UgcG9pbnRlcnMsIHRoZSBlcnJvciBjb2RlIGRpZmZlcnMgYmFzZWQgb24gYXJjaDpcbiAgKiAgIC1FUkFOR0Ugb24gYXJjaGVzIHdpdGggbm9uLW92ZXJsYXBwaW5nIGFkZHJlc3Mgc3BhY2VzXG5AQCAtNTMsNiAmIzQzOzU3LDEwIEBAIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5zdHJfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVyblxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5zdHJfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybnN0cihcJiMzNDtoZWxsb1wmIzM0OywgTlVMTCwgMSk7IH1cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJuY2FzZXN0cl9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihOVUxMLCBcJiMzNDtoZWxsb1wmIzM0OywgMSk7IH1cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJuY2FzZXN0cl9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihcJiMzNDtoZWxsb1wmIzM0OywgTlVMTCwgMSk7IH1cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3RfbWVtY21wX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChOVUxMLCBcJiMzNDt4XCYjMzQ7LCAxKTsgfVxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKFwmIzM0O3hcJiMzNDssIE5VTEwsIDEpOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cnBicmtfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhOVUxMLCBcJiMzNDt4XCYjMzQ7KTsgfVxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJwYnJrX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXCYjMzQ7eFwmIzM0OywgTlVMTCk7IH1cbiBcbiAvKiBQYXNzaW5nIHVzZXJzcGFjZSBwdHIgdG8gc3RyaW5nIGtmdW5jcyAqL1xuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cmNtcF91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY21wKHVzZXJfcHRyLCBcJiMzNDtoZWxsb1wmIzM0Oyk7IH1cbkBAIC03OSw2ICYjNDM7ODcsMTAgQEAgU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybnN0cl91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJlXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybnN0cl91c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybnN0cihcJiMzNDtoZWxsb1wmIzM0OywgdXNlcl9wdHIsIDEpOyB9XG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKHVzZXJfcHRyLCBcJiMzNDtoZWxsb1wmIzM0OywgMSk7IH1cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl91c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoXCYjMzQ7aGVsbG9cJiMzNDssIHVzZXJfcHRyLCAxKTsgfVxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9tZW1jbXBfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcCh1c2VyX3B0ciwgXCYjMzQ7eFwmIzM0OywgMSk7IH1cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3RfbWVtY21wX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXCYjMzQ7eFwmIzM0OywgdXNlcl9wdHIsIDEpOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cnBicmtfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsodXNlcl9wdHIsIFwmIzM0O3hcJiMzNDspOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cnBicmtfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXCYjMzQ7eFwmIzM0OywgdXNlcl9wdHIpOyB9XG4gXG4gI2VuZGlmIC8qIF9fVEFSR0VUX0FSQ0hfczM5MCAqL1xuIFxuQEAgLTEwNyw1ICYjNDM7MTE5LDkgQEAgU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5zdHJfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5zdHJfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKFwmIzM0O2hlbGxvXCYjMzQ7LCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfVxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKGludmFsaWRfa2Vybl9wdHIsIFwmIzM0O2hlbGxvXCYjMzQ7LCAxKTsgfVxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9wYWdlZmF1bHQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFwmIzM0O2hlbGxvXCYjMzQ7LCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfVxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3RfbWVtY21wX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGludmFsaWRfa2Vybl9wdHIsIFwmIzM0O3hcJiMzNDssIDEpOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9tZW1jbXBfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXCYjMzQ7eFwmIzM0OywgaW52YWxpZF9rZXJuX3B0ciwgMSk7IH1cbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cnBicmtfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKGludmFsaWRfa2Vybl9wdHIsIFwmIzM0O3hcJiMzNDspOyB9XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJwYnJrX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcJiMzNDt4XCYjMzQ7LCBpbnZhbGlkX2tlcm5fcHRyKTsgfVxuIFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jXG5pbmRleCBmNjViMTIyNmE4MWEzNy4uZTY3YjgwYWIzY2QyYzkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuY1xuQEAgLTcsNiAmIzQzOzcsMTAgQEBcbiBcbiBjaGFyIHN0cltdID0gXCYjMzQ7aGVsbG8gd29ybGRcJiMzNDs7XG4gXG4mIzQzO2V4dGVybiBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbikgX19rc3ltO1xuJiM0MztleHRlcm4gaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sXG4mIzQzO1x0XHQgICAgICBzaXplX3Qgc2l6ZSkgX19rc3ltO1xuJiM0MztcbiAjZGVmaW5lIF9fdGVzdChyZXR2YWwpIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3N1Y2Nlc3MgX19yZXR2YWwocmV0dmFsKVxuIFxuIC8qIEZ1bmN0aW9uYWwgdGVzdHMgKi9cbkBAIC02MCw0ICYjNDM7NjQsMjUgQEAgX190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX25vdGZvdW5kMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXNcbiBfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfbm90Zm91bmQzKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFwmIzM0O1wmIzM0OywgXCYjMzQ7YVwmIzM0OywgMCk7IH1cbiBfX3Rlc3QoMCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfZW1wdHkodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoc3RyLCBcJiMzNDtcJiMzNDssIDEpOyB9XG4gXG4mIzQzOy8qIGJwZl9zdHJwYnJrIC0gZnVuY3Rpb25hbCB0ZXN0cyAqL1xuJiM0MztfX3Rlc3QoMCkgaW50IHRlc3Rfc3RycGJya19mb3VuZF9maXJzdCh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXCYjMzQ7aFwmIzM0Oyk7IH1cbiYjNDM7X190ZXN0KDQpIGludCB0ZXN0X3N0cnBicmtfZm91bmRfbWlkZGxlKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcJiMzNDtvd1wmIzM0Oyk7IH1cbiYjNDM7X190ZXN0KDYpIGludCB0ZXN0X3N0cnBicmtfZm91bmRfbXVsdGlwbGUodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFwmIzM0O3dcJiMzNDspOyB9XG4mIzQzO19fdGVzdCgtRU5PRU5UKSBpbnQgdGVzdF9zdHJwYnJrX25vdGZvdW5kKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcJiMzNDt4eXpcJiMzNDspOyB9XG4mIzQzO19fdGVzdCgtRU5PRU5UKSBpbnQgdGVzdF9zdHJwYnJrX2VtcHR5X2FjY2VwdCh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXCYjMzQ7XCYjMzQ7KTsgfVxuJiM0MztcbiYjNDM7LyogYnBmX21lbWNtcCAtIGZ1bmN0aW9uYWwgdGVzdHMgKi9cbiYjNDM7Y2hhciBkYXRhMVtdID0gXCYjMzQ7aGVsbG8gd29ybGRcJiMzNDs7XG4mIzQzO2NoYXIgZGF0YTJbXSA9IFwmIzM0O2hlbGxvIHdvcmxkXCYjMzQ7O1xuJiM0MztjaGFyIGRhdGEzW10gPSBcJiMzNDtoZWxsbyB3b3JsZVwmIzM0OztcbiYjNDM7X190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTEsIGRhdGEyLCBzaXplb2YoZGF0YTEpKTsgfVxuJiM0MztfX3Rlc3QoLTEpIGludCB0ZXN0X21lbWNtcF9uZXFfbGVzcyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTEsIGRhdGEzLCBzaXplb2YoZGF0YTEpKTsgfVxuJiM0MztfX3Rlc3QoMSkgaW50IHRlc3RfbWVtY21wX25lcV9ncmVhdGVyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMywgZGF0YTEsIHNpemVvZihkYXRhMSkpOyB9XG4mIzQzO19fdGVzdCgwKSBpbnQgdGVzdF9tZW1jbXBfc2l6ZV96ZXJvKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTMsIDApOyB9XG4mIzQzOy8qIG1lbWNtcCBzaG91bGQgTk9UIHN0b3AgYXQgbnVsbCBieXRlIC0gY29tcGFyZSBwYXN0ICYjMzk7XFwwJiMzOTsgKi9cbiYjNDM7Y2hhciBiaW4xW10gPSB7ICYjMzk7YSYjMzk7LCAmIzM5O1xcMCYjMzk7LCAmIzM5O2MmIzM5OyB9O1xuJiM0MztjaGFyIGJpbjJbXSA9IHsgJiMzOTthJiMzOTssICYjMzk7XFwwJiMzOTssICYjMzk7ZCYjMzk7IH07XG4mIzQzO19fdGVzdCgwKSBpbnQgdGVzdF9tZW1jbXBfbnVsbF9ieXRlX2VxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChiaW4xLCBiaW4xLCBzaXplb2YoYmluMSkpOyB9XG4mIzQzO19fdGVzdCgtMSkgaW50IHRlc3RfbWVtY21wX251bGxfYnl0ZV9uZXEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGJpbjEsIGJpbjIsIHNpemVvZihiaW4xKSk7IH1cbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwMzozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9zdHJwYnJrJiMzNDssCiAgICAmIzM0O2JwZl9tZW1jbXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB0d28gbmV3IEJQRiBrZnVuY3MsIGBicGZfc3RycGJya2AgYW5kIGBicGZfbWVtY21wYCwgd2hpY2ggYWxsb3cgQlBGIHByb2dyYW1zIHRvIHBlcmZvcm0gc3RyaW5nIGFuZCBtZW1vcnkgY29tcGFyaXNvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIGhlbHBlciBsaWJyYXJ5IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB2YXJpb3VzIGlucHV0cyBzYWZlbHksIGVzcGVjaWFsbHkgc2luY2UgdGhleSBkZWFsIHdpdGggbWVtb3J5IGFjY2VzcyBhbmQgcG90ZW50aWFsIHBhZ2UgZmF1bHRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzM2RkNTRmMjE5M2Y1NDIxZDE3ZWQ2YWEzNzQ5NTY3ZjM0MzI3NDIyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMjMgMDM6MzQ6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jCmluZGV4IGI1MzE0YzlmZWQzY2YwLi5mMjRjZmRiMjI2MzVjNyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oZWxwZXJzLmMKQEAgLTM5NzEsNiAmIzQzOzM5NzEsMTA5IEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RyY3Nwbihjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKnJlamVjdF9faWduKQogCXJldHVybiAtRUZBVUxUOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYnBmX21lbWNtcCAtIENvbXBhcmUgdHdvIG1lbW9yeSByZWdpb25zIGJ5dGUgYnkgYnl0ZQomIzQzOyAqIEBwdHIxX19pZ246IEZpcnN0IG1lbW9yeSByZWdpb24KJiM0MzsgKiBAcHRyMl9faWduOiBTZWNvbmQgbWVtb3J5IHJlZ2lvbgomIzQzOyAqIEBzaXplOiBOdW1iZXIgb2YgYnl0ZXMgdG8gY29tcGFyZQomIzQzOyAqCiYjNDM7ICogQ29tcGFyZXMgdGhlIGZpcnN0IEBzaXplIGJ5dGVzIG9mIHRoZSBtZW1vcnkgYXJlYXMgQHB0cjFfX2lnbiBhbmQKJiM0MzsgKiBAcHRyMl9faWduLiBVbmxpa2UgYnBmX3N0cmNtcCwgbnVsbCBieXRlcyBkbyBub3QgdGVybWluYXRlIHRoZSBjb21wYXJpc29uLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogJTAgICAgICAgLSBUaGUgbWVtb3J5IHJlZ2lvbnMgYXJlIGVxdWFsCiYjNDM7ICogKiAlLTEgICAgICAtIEBwdHIxX19pZ24gaXMgbGVzcyB0aGFuIEBwdHIyX19pZ24KJiM0MzsgKiAqICUxICAgICAgIC0gQHB0cjFfX2lnbiBpcyBncmVhdGVyIHRoYW4gQHB0cjJfX2lnbgomIzQzOyAqICogJS1FRkFVTFQgLSBDYW5ub3QgcmVhZCBvbmUgb2YgdGhlIG1lbW9yeSByZWdpb25zCiYjNDM7ICogKiAlLUUyQklHICAtIEBzaXplIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCBzaXplCiYjNDM7ICogKiAlLUVSQU5HRSAtIE9uZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbnMgaXMgb3V0c2lkZSBvZiBrZXJuZWwgYWRkcmVzcyBzcGFjZQomIzQzOyAqLwomIzQzOy8qKgomIzQzOyAqIGJwZl9zdHJwYnJrIC0gRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHNldCBvZiBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nCiYjNDM7ICogQHNfX2lnbjogVGhlIHN0cmluZyB0byBiZSBzZWFyY2hlZAomIzQzOyAqIEBhY2NlcHRfX2lnbjogVGhlIHN0cmluZyBjb250YWluaW5nIHRoZSBjaGFyYWN0ZXJzIHRvIHNlYXJjaCBmb3IKJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqICZndDs9MCAgICAgIC0gSW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBAc19faWduIHRoYXQgbWF0Y2hlcyBhbnkKJiM0MzsgKiAgICAgICAgICAgICAgY2hhcmFjdGVyIGluIEBhY2NlcHRfX2lnbgomIzQzOyAqICogJS1FTk9FTlQgLSBObyBjaGFyYWN0ZXIgb2YgQGFjY2VwdF9faWduIGZvdW5kIGluIEBzX19pZ24KJiM0MzsgKiAqICUtRUZBVUxUIC0gQ2Fubm90IHJlYWQgb25lIG9mIHRoZSBzdHJpbmdzCiYjNDM7ICogKiAlLUUyQklHICAtIE9uZSBvZiB0aGUgc3RyaW5ncyBpcyB0b28gbGFyZ2UKJiM0MzsgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBzdHJpbmdzIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbikKJiM0Mzt7CiYjNDM7CWNoYXIgY3MsIGNhOwomIzQzOwlpbnQgaSwgajsKJiM0MzsKJiM0MzsJaWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzX19pZ24sIDEpIHx8CiYjNDM7CSAgICAhY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoYWNjZXB0X19pZ24sIDEpKSB7CiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJfQomIzQzOwomIzQzOwlndWFyZChwYWdlZmF1bHQpKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBYQVRUUl9TSVpFX01BWDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlpZiAoY3MgPT0gJiMzOTtcMCYjMzk7KQomIzQzOwkJCXJldHVybiAtRU5PRU5UOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IFhBVFRSX1NJWkVfTUFYOyBqJiM0MzsmIzQzOykgewomIzQzOwkJCV9fZ2V0X2tlcm5lbF9ub2ZhdWx0KCZhbXA7Y2EsIGFjY2VwdF9faWduICYjNDM7IGosIGNoYXIsIGVycl9vdXQpOwomIzQzOwkJCWlmIChjYSA9PSAmIzM5O1wwJiMzOTspCiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCWlmIChjcyA9PSBjYSkKJiM0MzsJCQkJcmV0dXJuIGk7CiYjNDM7CQl9CiYjNDM7CQlpZiAoaiA9PSBYQVRUUl9TSVpFX01BWCkKJiM0MzsJCQlyZXR1cm4gLUUyQklHOwomIzQzOwkJc19faWduJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gLUUyQklHOwomIzQzO2Vycl9vdXQ6CiYjNDM7CXJldHVybiAtRUZBVUxUOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfbWVtY21wIC0gQ29tcGFyZSB0d28gbWVtb3J5IHJlZ2lvbnMgYnl0ZSBieSBieXRlCiYjNDM7ICogQHB0cjFfX2lnbjogRmlyc3QgbWVtb3J5IHJlZ2lvbgomIzQzOyAqIEBwdHIyX19pZ246IFNlY29uZCBtZW1vcnkgcmVnaW9uCiYjNDM7ICogQHNpemU6IE51bWJlciBvZiBieXRlcyB0byBjb21wYXJlCiYjNDM7ICoKJiM0MzsgKiBDb21wYXJlcyB0aGUgZmlyc3QgQHNpemUgYnl0ZXMgb2YgdGhlIG1lbW9yeSBhcmVhcyBAcHRyMV9faWduIGFuZAomIzQzOyAqIEBwdHIyX19pZ24uIFVubGlrZSBicGZfc3RyY21wLCBudWxsIGJ5dGVzIGRvIG5vdCB0ZXJtaW5hdGUgdGhlIGNvbXBhcmlzb24uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAlMCAgICAgICAtIFRoZSBtZW1vcnkgcmVnaW9ucyBhcmUgZXF1YWwKJiM0MzsgKiAqICUtMSAgICAgIC0gQHB0cjFfX2lnbiBpcyBsZXNzIHRoYW4gQHB0cjJfX2lnbgomIzQzOyAqICogJTEgICAgICAgLSBAcHRyMV9faWduIGlzIGdyZWF0ZXIgdGhhbiBAcHRyMl9faWduCiYjNDM7ICogKiAlLUVGQVVMVCAtIENhbm5vdCByZWFkIG9uZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbnMKJiM0MzsgKiAqICUtRTJCSUcgIC0gQHNpemUgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIHNpemUKJiM0MzsgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBtZW1vcnkgcmVnaW9ucyBpcyBvdXRzaWRlIG9mIGtlcm5lbCBhZGRyZXNzIHNwYWNlCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sCiYjNDM7CQkJICAgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpwMSA9IHB0cjFfX2lnbiwgKnAyID0gcHRyMl9faWduOwomIzQzOwljaGFyIGMxLCBjMjsKJiM0MzsJc2l6ZV90IGk7CiYjNDM7CiYjNDM7CWlmIChzaXplICZndDsgWEFUVFJfU0laRV9NQVgpCiYjNDM7CQlyZXR1cm4gLUUyQklHOwomIzQzOwlpZiAoIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHAxLCBzaXplKSB8fAomIzQzOwkgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHAyLCBzaXplKSkKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwomIzQzOwlndWFyZChwYWdlZmF1bHQpKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBzaXplOyBpJiM0MzsmIzQzOykgewomIzQzOwkJX19nZXRfa2VybmVsX25vZmF1bHQoJmFtcDtjMSwgcDEgJiM0MzsgaSwgY2hhciwgZXJyX291dCk7CiYjNDM7CQlfX2dldF9rZXJuZWxfbm9mYXVsdCgmYW1wO2MyLCBwMiAmIzQzOyBpLCBjaGFyLCBlcnJfb3V0KTsKJiM0MzsJCWlmIChjMSAhPSBjMikKJiM0MzsJCQlyZXR1cm4gYzEgJmx0OyBjMiA/IC0xIDogMTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0MztlcnJfb3V0OgomIzQzOwlyZXR1cm4gLUVGQVVMVDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9fYnBmX3N0cm5zdHIoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbGVuLAogCQkJIGJvb2wgaWdub3JlX2Nhc2UpCiB7CkBAIC00ODUwLDYgJiM0Mzs0OTUzLDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJsZW4pOwogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJubGVuKTsKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3Ryc3BuKTsKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY3Nwbik7CiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJwYnJrKTsKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX21lbWNtcCk7CiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cnN0cik7CiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNhc2VzdHIpOwogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJuc3RyKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9zdWNjZXNzLmMKaW5kZXggZTBkNjcyZDkzYWRmODUuLjA3MTU4MWZmMDgzM2YzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuYwpAQCAtNjI0LDcgJiM0Mzs2MjQsNyBAQCBpbnQgQlBGX1BST0codGVzdF9keW5wdHJfc2tiX3RwX2J0Ziwgdm9pZCAqc2tiLCB2b2lkICpsb2NhdGlvbikKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYnBmX21lbWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCB1MzIgc2l6ZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBsb2NhbF9tZW1jbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgdTMyIHNpemUpCiB7CiAJaW50IGk7CiAKQEAgLTY1MCwxMiAmIzQzOzY1MCwxMiBAQCBpbnQgdGVzdF9keW5wdHJfY29weSh2b2lkICpjdHgpCiAJZXJyID0gYnBmX2R5bnB0cl93cml0ZSgmYW1wO3NyYywgMCwgZGF0YSwgc3osIDApOwogCWVyciA9IGVyciA/OiBicGZfZHlucHRyX2NvcHkoJmFtcDtkc3QsIDAsICZhbXA7c3JjLCAwLCBzeik7CiAJZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChidWYsIHN6LCAmYW1wO2RzdCwgMCwgMCk7Ci0JZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBzeik7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBzeik7CiAKIAkvKiBUZXN0IHRoYXQgb2Zmc2V0cyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgKi8KIAllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9jb3B5KCZhbXA7ZHN0LCAzLCAmYW1wO3NyYywgNSwgc3ogLSA1KTsKIAllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKGJ1Ziwgc3ogLSA1LCAmYW1wO2RzdCwgMywgMCk7Ci0JZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZGF0YSAmIzQzOyA1LCBidWYsIHN6IC0gNSk7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZGF0YSAmIzQzOyA1LCBidWYsIHN6IC0gNSk7CiAKIAlicGZfcmluZ2J1Zl9kaXNjYXJkX2R5bnB0cigmYW1wO3NyYywgMCk7CiAJYnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoJmFtcDtkc3QsIDApOwpAQCAtNjkyLDcgJiM0Mzs2OTIsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKQogCQllcnIgPSBicGZfZHlucHRyX3JlYWQoJmFtcDtidWYsIGxlbiwgJmFtcDtwdHJfeGRwLCBpICogbGVuLCAwKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwotCQlpZiAoYnBmX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMCkKJiM0MzsJCWlmIChsb2NhbF9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApCiAJCQlnb3RvIG91dDsKIAl9CiAKQEAgLTcxMyw3ICYjNDM7NzEzLDcgQEAgaW50IHRlc3RfZHlucHRyX2NvcHlfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCkKIAkJZXJyID0gYnBmX2R5bnB0cl9yZWFkKCZhbXA7YnVmLCBsZW4sICZhbXA7cHRyX2J1ZiwgaSAqIGxlbiwgMCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKLQkJaWYgKGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApCiYjNDM7CQlpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKQogCQkJZ290byBvdXQ7CiAJfQogCkBAIC03MjcsNyAmIzQzOzcyNyw3IEBAIGludCB0ZXN0X2R5bnB0cl9jb3B5X3hkcChzdHJ1Y3QgeGRwX21kICp4ZHApCiAJCWVyciA9IGJwZl9keW5wdHJfcmVhZCgmYW1wO2J1ZiwgbGVuLCAmYW1wO3B0cl94ZHAsIDIgJiM0MzsgaSAqIGxlbiwgMCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKLQkJaWYgKGJwZl9tZW1jbXAoZGF0YSwgYnVmLCBsZW4pICE9IDApCiYjNDM7CQlpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKQogCQkJZ290byBvdXQ7CiAJfQogCkBAIC03NTAsNyAmIzQzOzc1MCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfemVybyh2b2lkICpjdHgpCiAKIAllcnIgPSBicGZfZHlucHRyX2Zyb21fbWVtKG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3osIDAsICZhbXA7cHRyKTsKIAllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoJmFtcDtwdHIsIDAsIGRhdGFfc3osIDApOwotCWVyciA9IGVyciA/OiBicGZfbWVtY21wKHplcm9lcywgbWVtc2V0X3plcm9fZGF0YSwgZGF0YV9zeik7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoemVyb2VzLCBtZW1zZXRfemVyb19kYXRhLCBkYXRhX3N6KTsKIAogCXJldHVybiAwOwogfQpAQCAtNzcwLDcgJiM0Mzs3NzAsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X25vdHplcm8odm9pZCAqY3R4KQogCiAJZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfbm90emVyb19kYXRhLCBkYXRhX3N6LCAwLCAmYW1wO3B0cik7CiAJZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KCZhbXA7cHRyLCAwLCBkYXRhX3N6LCBEWU5QVFJfTUVNU0VUX1ZBTCk7Ci0JZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF9ub3R6ZXJvX2RhdGEsIGRhdGFfc3opOwomIzQzOwllcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfbm90emVyb19kYXRhLCBkYXRhX3N6KTsKIAogCXJldHVybiAwOwogfQpAQCAtNzg2LDcgJiM0Mzs3ODYsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm9fb2Zmc2V0KHZvaWQgKmN0eCkKIAogCWVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X3plcm9fb2Zmc2V0X2RhdGEsIGRhdGFfc3osIDAsICZhbXA7cHRyKTsKIAllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoJmFtcDtwdHIsIDgsIDQsIDApOwotCWVyciA9IGVyciA/OiBicGZfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfemVyb19vZmZzZXRfZGF0YSwgZGF0YV9zeik7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX29mZnNldF9kYXRhLCBkYXRhX3N6KTsKIAogCXJldHVybiAwOwogfQpAQCAtODAzLDcgJiM0Mzs4MDMsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm9fYWRqdXN0ZWQodm9pZCAqY3R4KQogCWVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeiwgMCwgJmFtcDtwdHIpOwogCWVyciA9IGVyciA/OiBicGZfZHlucHRyX2FkanVzdCgmYW1wO3B0ciwgNCwgOCk7CiAJZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KCZhbXA7cHRyLCAwLCBicGZfZHlucHRyX3NpemUoJmFtcDtwdHIpLCAwKTsKLQllcnIgPSBlcnIgPzogYnBmX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeik7CiYjNDM7CWVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX2FkanVzdGVkX2RhdGEsIGRhdGFfc3opOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04OTgsNyAmIzQzOzg5OCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfeGRwX2NodW5rcyhzdHJ1Y3QgeGRwX21kICp4ZHApCiAJCWVyciA9IGJwZl9keW5wdHJfcmVhZCgmYW1wO2J1ZiwgY2h1bmtfc3osICZhbXA7cHRyX3hkcCwgb2Zmc2V0LCAwKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwotCQllcnIgPSBicGZfbWVtY21wKGJ1ZiwgZXhwZWN0ZWRfYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CQllcnIgPSBsb2NhbF9tZW1jbXAoYnVmLCBleHBlY3RlZF9idWYsIHNpemVvZihidWYpKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTk1Miw3ICYjNDM7OTUyLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3RfZHlucHRyX3Byb2JlKHZvaWQgKnB0ciwgYnBmX3JlYWRfZHlucHRyX2ZuX3QgYnAKIAkJCWJyZWFrOwogCQllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKCZhbXA7YnVmLCBsZW4sICZhbXA7cHRyX2J1ZiwgMCwgMCk7CiAKLQkJaWYgKGVyciB8fCBicGZfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKQomIzQzOwkJaWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbikpCiAJCQllcnIgPSAxOwogCiAJCS8qIFJlc2V0IGJ1ZmZlciBhbmQgZHlucHRyICovCkBAIC05ODYsNyAmIzQzOzk4Niw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X2R5bnB0cl9wcm9iZV9zdHIodm9pZCAqcHRyLAogCQllcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKCZhbXA7YnVmLCBsZW4sICZhbXA7cHRyX2J1ZiwgMCwgMCk7CiAJCWlmICghbGVuKQogCQkJY29udGludWU7Ci0JCWlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICYjMzk7XDAmIzM5OykKJiM0MzsJCWlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4gLSAxKSB8fCBidWZbbGVuIC0gMV0gIT0gJiMzOTtcMCYjMzk7KQogCQkJZXJyID0gMTsKIAl9CiAJYnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoJmFtcDtwdHJfYnVmLCAwKTsKQEAgLTEwMTIsNyAmIzQzOzEwMTIsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCwgdm9pZCAqcHRyLAogCQlpZiAobGVuICZndDsgc2l6ZW9mKGJ1ZikpCiAJCQljb250aW51ZTsKIAkJZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZCgmYW1wO2J1ZiwgbGVuLCAmYW1wO3B0cl94ZHAsIG9mZiwgMCk7Ci0JCWlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSkKJiM0MzsJCWlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKQogCQkJZXJyID0gMTsKIAkJLyogUmVzZXQgYnVmZmVyIGFuZCBkeW5wdHIgKi8KIAkJX19idWlsdGluX21lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKQEAgLTEwNDgsNyAmIzQzOzEwNDgsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfc3RyX3hkcChzdHJ1Y3QgeGRwX21kICp4ZHAsIHZvaWQgKgogCiAJCWlmICghbGVuKQogCQkJY29udGludWU7Ci0JCWlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICYjMzk7XDAmIzM5OykKJiM0MzsJCWlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4gLSAxKSB8fCBidWZbbGVuIC0gMV0gIT0gJiMzOTtcMCYjMzk7KQogCQkJZXJyID0gMTsKIAogCQlfX2J1aWx0aW5fbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMKaW5kZXggYmRkYzRlODU3OWQyNDQuLmU2N2ZlOTcwMGU1OTNjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMKQEAgLTksNiAmIzQzOzksMTAgQEAKIGNoYXIgKnVzZXJfcHRyID0gKGNoYXIgKikxOwogY2hhciAqaW52YWxpZF9rZXJuX3B0ciA9IChjaGFyICopLTE7CiAKJiM0MztleHRlcm4gaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pIF9fa3N5bTsKJiM0MztleHRlcm4gaW50IGJwZl9tZW1jbXAoY29uc3Qgdm9pZCAqcHRyMV9faWduLCBjb25zdCB2b2lkICpwdHIyX19pZ24sCiYjNDM7CQkgICAgICBzaXplX3Qgc2l6ZSkgX19rc3ltOwomIzQzOwogLyoKICAqIFdoZW4gcGFzc2luZyB1c2Vyc3BhY2UgcG9pbnRlcnMsIHRoZSBlcnJvciBjb2RlIGRpZmZlcnMgYmFzZWQgb24gYXJjaDoKICAqICAgLUVSQU5HRSBvbiBhcmNoZXMgd2l0aCBub24tb3ZlcmxhcHBpbmcgYWRkcmVzcyBzcGFjZXMKQEAgLTUzLDYgJiM0Mzs1NywxMCBAQCBTRUMoJiMzNDtzeXNjYWxsJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybnN0cl9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybnN0cl9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKCYjMzQ7aGVsbG8mIzM0OywgTlVMTCwgMSk7IH0KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJuY2FzZXN0cl9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihOVUxMLCAmIzM0O2hlbGxvJiMzNDssIDEpOyB9CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybmNhc2VzdHJfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoJiMzNDtoZWxsbyYjMzQ7LCBOVUxMLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKE5VTEwsICYjMzQ7eCYjMzQ7LCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9tZW1jbXBfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKCYjMzQ7eCYjMzQ7LCBOVUxMLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJwYnJrX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoTlVMTCwgJiMzNDt4JiMzNDspOyB9CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cnBicmtfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyaygmIzM0O3gmIzM0OywgTlVMTCk7IH0KIAogLyogUGFzc2luZyB1c2Vyc3BhY2UgcHRyIHRvIHN0cmluZyBrZnVuY3MgKi8KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJjbXBfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcCh1c2VyX3B0ciwgJiMzNDtoZWxsbyYjMzQ7KTsgfQpAQCAtNzksNiAmIzQzOzg3LDEwIEBAIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuc3RyX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmUKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuc3RyX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKCYjMzQ7aGVsbG8mIzM0OywgdXNlcl9wdHIsIDEpOyB9CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKHVzZXJfcHRyLCAmIzM0O2hlbGxvJiMzNDssIDEpOyB9CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKCYjMzQ7aGVsbG8mIzM0OywgdXNlcl9wdHIsIDEpOyB9CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X21lbWNtcF91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKHVzZXJfcHRyLCAmIzM0O3gmIzM0OywgMSk7IH0KJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3RfbWVtY21wX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoJiMzNDt4JiMzNDssIHVzZXJfcHRyLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJwYnJrX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHVzZXJfcHRyLCAmIzM0O3gmIzM0Oyk7IH0KJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RycGJya191c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyaygmIzM0O3gmIzM0OywgdXNlcl9wdHIpOyB9CiAKICNlbmRpZiAvKiBfX1RBUkdFVF9BUkNIX3MzOTAgKi8KIApAQCAtMTA3LDUgJiM0MzsxMTksOSBAQCBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5zdHJfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5zdHJfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKCYjMzQ7aGVsbG8mIzM0OywgaW52YWxpZF9rZXJuX3B0ciwgMSk7IH0KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihpbnZhbGlkX2tlcm5fcHRyLCAmIzM0O2hlbGxvJiMzNDssIDEpOyB9CiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoJiMzNDtoZWxsbyYjMzQ7LCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3RfbWVtY21wX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGludmFsaWRfa2Vybl9wdHIsICYjMzQ7eCYjMzQ7LCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3RfbWVtY21wX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKCYjMzQ7eCYjMzQ7LCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfQomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RycGJya19wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoaW52YWxpZF9rZXJuX3B0ciwgJiMzNDt4JiMzNDspOyB9CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJwYnJrX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyaygmIzM0O3gmIzM0OywgaW52YWxpZF9rZXJuX3B0cik7IH0KIAogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jCmluZGV4IGY2NWIxMjI2YTgxYTM3Li5lNjdiODBhYjNjZDJjOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYwpAQCAtNyw2ICYjNDM7NywxMCBAQAogCiBjaGFyIHN0cltdID0gJiMzNDtoZWxsbyB3b3JsZCYjMzQ7OwogCiYjNDM7ZXh0ZXJuIGludCBicGZfc3RycGJyayhjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKSBfX2tzeW07CiYjNDM7ZXh0ZXJuIGludCBicGZfbWVtY21wKGNvbnN0IHZvaWQgKnB0cjFfX2lnbiwgY29uc3Qgdm9pZCAqcHRyMl9faWduLAomIzQzOwkJICAgICAgc2l6ZV90IHNpemUpIF9fa3N5bTsKJiM0MzsKICNkZWZpbmUgX190ZXN0KHJldHZhbCkgU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBfX3N1Y2Nlc3MgX19yZXR2YWwocmV0dmFsKQogCiAvKiBGdW5jdGlvbmFsIHRlc3RzICovCkBAIC02MCw0ICYjNDM7NjQsMjUgQEAgX190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX25vdGZvdW5kMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXMKIF9fdGVzdCgtRU5PRU5UKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9ub3Rmb3VuZDModm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoJiMzNDsmIzM0OywgJiMzNDthJiMzNDssIDApOyB9CiBfX3Rlc3QoMCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfZW1wdHkodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoc3RyLCAmIzM0OyYjMzQ7LCAxKTsgfQogCiYjNDM7LyogYnBmX3N0cnBicmsgLSBmdW5jdGlvbmFsIHRlc3RzICovCiYjNDM7X190ZXN0KDApIGludCB0ZXN0X3N0cnBicmtfZm91bmRfZmlyc3Qodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsICYjMzQ7aCYjMzQ7KTsgfQomIzQzO19fdGVzdCg0KSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX21pZGRsZSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgJiMzNDtvdyYjMzQ7KTsgfQomIzQzO19fdGVzdCg2KSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX211bHRpcGxlKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCAmIzM0O3cmIzM0Oyk7IH0KJiM0MztfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RycGJya19ub3Rmb3VuZCh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgJiMzNDt4eXomIzM0Oyk7IH0KJiM0MztfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RycGJya19lbXB0eV9hY2NlcHQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsICYjMzQ7JiMzNDspOyB9CiYjNDM7CiYjNDM7LyogYnBmX21lbWNtcCAtIGZ1bmN0aW9uYWwgdGVzdHMgKi8KJiM0MztjaGFyIGRhdGExW10gPSAmIzM0O2hlbGxvIHdvcmxkJiMzNDs7CiYjNDM7Y2hhciBkYXRhMltdID0gJiMzNDtoZWxsbyB3b3JsZCYjMzQ7OwomIzQzO2NoYXIgZGF0YTNbXSA9ICYjMzQ7aGVsbG8gd29ybGUmIzM0OzsKJiM0MztfX3Rlc3QoMCkgaW50IHRlc3RfbWVtY21wX2VxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTIsIHNpemVvZihkYXRhMSkpOyB9CiYjNDM7X190ZXN0KC0xKSBpbnQgdGVzdF9tZW1jbXBfbmVxX2xlc3Modm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGRhdGExLCBkYXRhMywgc2l6ZW9mKGRhdGExKSk7IH0KJiM0MztfX3Rlc3QoMSkgaW50IHRlc3RfbWVtY21wX25lcV9ncmVhdGVyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMywgZGF0YTEsIHNpemVvZihkYXRhMSkpOyB9CiYjNDM7X190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9zaXplX3plcm8odm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGRhdGExLCBkYXRhMywgMCk7IH0KJiM0MzsvKiBtZW1jbXAgc2hvdWxkIE5PVCBzdG9wIGF0IG51bGwgYnl0ZSAtIGNvbXBhcmUgcGFzdCAmIzM5O1wwJiMzOTsgKi8KJiM0MztjaGFyIGJpbjFbXSA9IHsgJiMzOTthJiMzOTssICYjMzk7XDAmIzM5OywgJiMzOTtjJiMzOTsgfTsKJiM0MztjaGFyIGJpbjJbXSA9IHsgJiMzOTthJiMzOTssICYjMzk7XDAmIzM5OywgJiMzOTtkJiMzOTsgfTsKJiM0MztfX3Rlc3QoMCkgaW50IHRlc3RfbWVtY21wX251bGxfYnl0ZV9lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoYmluMSwgYmluMSwgc2l6ZW9mKGJpbjEpKTsgfQomIzQzO19fdGVzdCgtMSkgaW50IHRlc3RfbWVtY21wX251bGxfYnl0ZV9uZXEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGJpbjEsIGJpbjIsIHNpemVvZihiaW4xKSk7IH0KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA2OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgS2Z1bmMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgdHdvIG5ldyBCUEYga2Z1bmNzOiBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAuIEkgc2VlIHRoYXQgdGhleSYjMzk7cmUgaW1wbGVtZW50ZWQgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYCBhbmQgcmVnaXN0ZXJlZCB1c2luZyBgQlRGX0lEX0ZMQUdTYC4gR29vZCwgc3RhbmRhcmQgcHJhY3RpY2UgdGhlcmUuIEkgYWxzbyBzZWUgdGhhdCB0aGVyZSYjMzk7cyBiZWVuIHNvbWUgcmVuYW1pbmcgb2YgYW4gZXhpc3RpbmcgYGJwZl9tZW1jbXBgIHRvIGBsb2NhbF9tZW1jbXBgIGluIGBkeW5wdHJfc3VjY2Vzcy5jYCB0byBhdm9pZCBhIG5hbWUgY29sbGlzaW9uLiBUaGF0JiMzOTtzIHBydWRlbnQ7IGl0IGF2b2lkcyBwb3RlbnRpYWwgaGVhZGFjaGVzIGxhdGVyLiBBbmQgaXQgbG9va3MgbGlrZSBwcm9wZXIgdGVzdCBjb3ZlcmFnZSBoYXMgYmVlbiBhZGRlZC4gVGhlcmUgYXJlIGZhaWx1cmUgY2FzZXMgaW4gYHN0cmluZ19rZnVuY3NfZmFpbHVyZTEuY2AgYW5kIHN1Y2Nlc3MgY2FzZXMgaW4gYHN0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jYC4gTmljZS4KClRoZSBmYWN0IHRoYXQgdGhpcyBhZGRzIG5ldywgY2FsbGFibGUga2Z1bmNzIG1lYW5zIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgQlBGIGluZnJhc3RydWN0dXJlLCBhbmQgSSBuZWVkIHRvIHRyZWF0IGl0IGFzIHN1Y2guIFRoaXMgc2NyZWFtcyAmIzM0O2Z1enppbmcgY2FuZGlkYXRlLiYjMzQ7IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIG5ldyBmdW5jdGlvbnMgYXJlIHJvYnVzdC4KCkxldCYjMzk7cyBkaXZlIGludG8gYGtlcm5lbC9icGYvaGVscGVycy5jYCBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIG9yIGFueXRoaW5nIHVuZXhwZWN0ZWQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBncmVwIGZvciBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAgd2l0aGluIHRoYXQgZmlsZSB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiB0aGVpciBpbmNsdXNpb24gYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG1heSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zdHJwYnJrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9Mzk0Mz1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNzcG4oY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICpyZWplY3RfX2lnbilcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zOTkxLS8qKlxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzk5MjogKiBicGZfc3RycGJyayAtIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzZXQgb2YgY2hhcmFjdGVycyBpbiBhIHN0cmluZ1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMzk5My0gKiBAc19faWduOiBUaGUgc3RyaW5nIHRvIGJlIHNlYXJjaGVkXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDAwMy0gKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjQwMDQ6X19icGZfa2Z1bmMgaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MDA1LXtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTU1PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY3Nwbik7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTU2OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RycGJyayk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTU3LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbWVtY21wKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTg3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgcHJvbXB0OgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIEtlcm5lbCBCUEYgTGFuZHNjYXBlKioKCkFscmlnaHQsIHRoZSBkaXJlY3RpdmUgaXMgdG8gbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AuIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMuIEJQRiwgdGhlIEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIsIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IG9mIG1vZGVybiBMaW51eCBzeXN0ZW1zLCBhbGxvd2luZyBmb3IgaW4ta2VybmVsIGV4ZWN1dGlvbiBvZiBieXRlY29kZS4gSXQmIzM5O3MgdXNlZCBmb3IgZXZlcnl0aGluZyBmcm9tIG5ldHdvcmsgZmlsdGVyaW5nIGFuZCBzZWN1cml0eSBtb25pdG9yaW5nIHRvIHRyYWNpbmcgYW5kIHBlcmZvcm1hbmNlIGFuYWx5c2lzLiBgaGVscGVycy5jYCBpcyBsaWtlbHkgd2hlcmUgdGhlIEJQRiBoZWxwZXIgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCwgdGhlIGxvdy1sZXZlbCBmdW5jdGlvbnMgdGhhdCBCUEYgcHJvZ3JhbXMgY2FsbCB0byBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbHJlYWR5IGtub3cgYSBmYWlyIGJpdCBhYm91dCBob3cgdGhpcyB3b3JrcywgYW5kIGhhdmUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBhbmQgcGVyZm9ybWFuY2UgdHJhZGUtb2Zmcy4KCkkmIzM5O2Qgd2FudCB0byBleGFtaW5lIGFueSBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgaW5mbHVlbmNlIGhvdyB0aGVzZSBoZWxwZXJzIGFyZSBjb21waWxlZCwgZW5hYmxlZCwgb3IgZXhwb3NlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtkIGltbWVkaWF0ZWx5IGJlIGxvb2tpbmcgZm9yOgoKKiAgICoqQ29tcGlsZXIgRmxhZ3MqKjogSG93IHRoZSBjb2RlIGlzIGNvbXBpbGVkLiBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbiBmbGFncyB0aGF0IGNvdWxkIGFmZmVjdCBwZXJmb3JtYW5jZSBvciBjb2RlIHNpemU/IEFyZSB0aGVyZSBzZWN1cml0eSBoYXJkZW5pbmcgb3B0aW9ucyBiZWluZyB1c2VkLCBzdWNoIGFzIGAtZnN0YWNrLXByb3RlY3RvcmA/IEFyZSB0aGVyZSBjb21waWxlciBmbGFncyBzcGVjaWZpY2FsbHkgZm9yIEJQRiwgbGlrZSB0aG9zZSBjb250cm9sbGluZyB2ZXJpZmllciBiZWhhdmlvciBvciBkZWJ1Z2dpbmcgb3V0cHV0PwoqICAgKipLY29uZmlnIE9wdGlvbnMqKjogVGhlIEtjb25maWcgZmlsZSAobGlrZWx5IGluIHRoZSBzYW1lIGRpcmVjdG9yeSBvciBhIHBhcmVudCBvbmUpIHdvdWxkIGJlIG15IG5leHQgc3RvcC4gSXQgZGljdGF0ZXMgd2hhdCBmZWF0dXJlcyBhcmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBXaGF0IEtjb25maWcgb3B0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSBCUEYgZnVuY3Rpb25hbGl0eSBvciBoZWxwZXIgZnVuY3Rpb25zPyBXaGF0IGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMgYW5kIHdoYXQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBtaWdodCBhZmZlY3QgaG93IHRoZSBoZWxwZXJzIGFyZSB1c2VkPwoqICAgKipNb2R1bGUgQ29uZmlndXJhdGlvbioqOiBJZiB0aGUgaGVscGVycyBhcmUgY29tcGlsZWQgYXMgYSBtb2R1bGUsIHdoYXQgYXJlIHRoZSByZWxldmFudCBtb2R1bGUgcGFyYW1ldGVycz8gSG93IGFyZSB0aGV5IGxvYWRlZCBhbmQgdW5sb2FkZWQ/IFdoYXQmIzM5O3MgdGhlIG1vZHVsZSYjMzk7cyBkZXBlbmRlbmNpZXMsIGlmIGFueSwgdGhhdCB3b3VsZCBpbmZsdWVuY2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGhlbHBlciBmdW5jdGlvbnM/CiogICAqKlNlY3VyaXR5IE1lY2hhbmlzbXMqKjogQXJlIHRoZXJlIGFueSBzZWN1cml0eS1yZWxhdGVkIEtjb25maWcgb3B0aW9ucyB0aGF0IHJlc3RyaWN0IHRoZSBjYXBhYmlsaXRpZXMgb2YgQlBGIHByb2dyYW1zIG9yIHRoZSBoZWxwZXIgZnVuY3Rpb25zPyBJcyB0aGUgQlBGIHZlcmlmaWVyIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgc2VjdXJlbHk/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgc2V0dGluZ3MgZm9yIHRoZSB1c2Ugb2YgQlBGIGluIHNwZWNpZmljIGNvbnRleHRzLCBzdWNoIGFzIGNvbnRhaW5lciBlbnZpcm9ubWVudHM/CiogICAqKkJ1aWxkIFN5c3RlbSBTZXR0aW5ncyoqOiBIb3cgZG9lcyB0aGUgYnVpbGQgc3lzdGVtIChlLmcuLCBgbWFrZWApIGhhbmRsZSB0aGUgY29tcGlsYXRpb24gYW5kIGxpbmtpbmcgb2YgdGhpcyBjb2RlPyBBcmUgdGhlcmUgYW55IHNwZWNpYWwgdGFyZ2V0cyBvciBydWxlcyBmb3IgQlBGLXJlbGF0ZWQgY29kZT8gQXJlIHRoZXJlIGFueSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3Igb3RoZXIgc2V0dGluZ3MgdGhhdCBjb3VsZCBhZmZlY3QgaG93IGl0JiMzOTtzIGJ1aWx0IG9yIGNvbmZpZ3VyZWQ/CiogICAqKkRvY3VtZW50YXRpb24qKjogT2YgY291cnNlLCBhbnkgZG9jdW1lbnRhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBzcGVjaWZpYyBmaWxlIG9yIHRoZSBCUEYgc3lzdGVtIHdvdWxkIGJlIGhlbHBmdWwgdG8gdW5kZXJzdGFuZCBhbnkgY2F2ZWF0cyBvciBhc3N1bXB0aW9ucyByZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb25zLgoKRXNzZW50aWFsbHksIEkgd2FudCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBidWlsZCBlbnZpcm9ubWVudCBhbmQgdGhlIHBvdGVudGlhbCBpbmZsdWVuY2Ugb24gdGhlIGJlaGF2aW9yIG9mIGBoZWxwZXJzLmNgIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgdHJvdWJsZXNob290aW5nLCB1bmRlcnN0YW5kaW5nIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgYW5kIG9wdGltaXppbmcgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jPTI3Nj1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9jdXJyZW50X2NvbW1fcHJvdG8gPSB7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjgzLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mjg0OiNpZiBkZWZpbmVkKENPTkZJR19RVUVVRURfU1BJTkxPQ0tTKSB8fCBkZWZpbmVkKENPTkZJR19CUEZfQVJDSF9TUElOTE9DSylcbmtlcm5lbC9icGYvaGVscGVycy5jLTI4NS1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0zOTk9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9qaWZmaWVzNjRfcHJvdG8gPSB7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDA0LVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDA1OiNpZmRlZiBDT05GSUdfQ0dST1VQU1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDA2LUJQRl9DQUxMXzAoYnBmX2dldF9jdXJyZW50X2Nncm91cF9pZClcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00NDA9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfY3VycmVudF9hbmNlc3Rvcl9jZ3JvdXBfaWRfcHJvdG8gPSB7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ1LX07XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDY6I2VuZGlmIC8qIENPTkZJR19DR1JPVVBTICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDctXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NzQ0PXN0YXRpYyBpbnQgYnBmX3RyYWNlX2NvcHlfc3RyaW5nKGNoYXIgKmJ1Ziwgdm9pZCAqdW5zYWZlX3B0ciwgY2hhciBmbXRfcHR5cGUsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNzUyLVx0Y2FzZSAmIzM5O3MmIzM5Ozpcbmtlcm5lbC9icGYvaGVscGVycy5jOjc1MzojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX05PTl9PVkVSTEFQUElOR19BRERSRVNTX1NQQUNFXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy03NTQtXHRcdGlmICgodW5zaWduZWQgbG9uZyl1bnNhZmVfcHRyIFx1MDAzYyBUQVNLX1NJWkUpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9MjA2Nz1icGZfYmFzZV9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTIxNjctXHRcdHJldHVybiBcdTAwMjZicGZfZHlucHRyX2RhdGFfcHJvdG87XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyMTY4OiNpZmRlZiBDT05GSUdfQ0dST1VQU1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMjE2OS1cdGNhc2UgQlBGX0ZVTkNfY2dycF9zdG9yYWdlX2dldDpcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMTc5LSNlbmRpZlxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjE4MDojaWZkZWYgQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjE4MS1cdGNhc2UgQlBGX0ZVTkNfZ2V0X2Nncm91cF9jbGFzc2lkOlxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTI3NTM9Q0ZJX05PU0VBTChicGZfdGFza19yZWxlYXNlX2R0b3IpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtMjc1NC1cbmtlcm5lbC9icGYvaGVscGVycy5jOjI3NTU6I2lmZGVmIENPTkZJR19DR1JPVVBTXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNzU2LS8qKlxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTI4NzY9YnBmX3Rhc2tfZ2V0X2Nncm91cDEoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgaGllcmFyY2h5X2lkKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTI4ODMtfVxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mjg4NDojZW5kaWYgLyogQ09ORklHX0NHUk9VUFMgKi9cbmtlcm5lbC9icGYvaGVscGVycy5jLTI4ODUtXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9MzI4OT1fX2JwZl9rZnVuYyB2b2lkIGJwZl90aHJvdyh1NjQgY29va2llKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTMyOTgtXHRXQVJOX09OX09OQ0UoIWN0eC5jbnQpO1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MzI5OTpcdC8qIFByZXZlbnQgS0FTQU4gZmFsc2UgcG9zaXRpdmVzIGZvciBDT05GSUdfS0FTQU5fU1RBQ0sgYnkgdW5wb2lzb25pbmdcbmtlcm5lbC9icGYvaGVscGVycy5jLTMzMDAtXHQgKiBkZWVwZXIgc3RhY2sgZGVwdGhzIHRoYW4gY3R4LnNwIGFzIHdlIGRvIG5vdCByZXR1cm4gZnJvbSBicGZfdGhyb3csXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDE5Nj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cm5jYXNlc3RyKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24sXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDIwMS1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQyMDI6I2lmZGVmIENPTkZJR19LRVlTXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MjAzLS8qKlxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQzMjA9X19icGZfa2Z1bmMgaW50IGJwZl92ZXJpZnlfcGtjczdfc2lnbmF0dXJlKHN0cnVjdCBicGZfZHlucHRyICpkYXRhX3AsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDMyMy17XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzI0OiNpZmRlZiBDT05GSUdfU1lTVEVNX0RBVEFfVkVSSUZJQ0FUSU9OXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MzI1LVx0c3RydWN0IGJwZl9keW5wdHJfa2VybiAqZGF0YV9wdHIgPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRhdGFfcDtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MzYwLVx0cmV0dXJuIC1FT1BOT1RTVVBQO1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDM2MTojZW5kaWYgLyogQ09ORklHX1NZU1RFTV9EQVRBX1ZFUklGSUNBVElPTiAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDM2Mi19XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzYzOiNlbmRpZiAvKiBDT05GSUdfS0VZUyAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDM2NC1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODA2PUJURl9LRlVOQ1NfU1RBUlQoZ2VuZXJpY19idGZfaWRzKVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDgwNzojaWZkZWYgQ09ORklHX0NSQVNIX0RVTVBcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4MDgtQlRGX0lEX0ZMQUdTKGZ1bmMsIGNyYXNoX2tleGVjLCBLRl9ERVNUUlVDVElWRSlcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODM2PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmJ0cmVlX3JpZ2h0LCBLRl9SRVRfTlVMTClcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4MzctXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODM4OiNpZmRlZiBDT05GSUdfQ0dST1VQU1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDgzOS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2Nncm91cF9hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkNVIHwgS0ZfUkVUX05VTEwpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDg0OD1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rocm93KVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDg0OTojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4NTAtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zZW5kX3NpZ25hbF90YXNrKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDg1MS0jZW5kaWZcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4NTI6I2lmZGVmIENPTkZJR19LRVlTXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODUzLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbG9va3VwX3VzZXJfa2V5LCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDg1NT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2tleV9wdXQsIEtGX1JFTEVBU0UpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODU2OiNpZmRlZiBDT05GSUdfU1lTVEVNX0RBVEFfVkVSSUZJQ0FUSU9OXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODU3LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfdmVyaWZ5X3BrY3M3X3NpZ25hdHVyZSwgS0ZfU0xFRVBBQkxFKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4NTktI2VuZGlmXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODYwOiNpZmRlZiBDT05GSUdfUzM5MFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDg2MS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2dldF9sb3djb3JlKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4NzM9QlRGX0lEKGZ1bmMsIGJwZl90YXNrX3JlbGVhc2VfZHRvcilcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4NzQ6I2lmZGVmIENPTkZJR19DR1JPVVBTXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODc1LUJURl9JRChzdHJ1Y3QsIGNncm91cClcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODkxPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODkyOiNpZmRlZiBDT05GSUdfQ0dST1VQU1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDg5My1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfY3NzX3Rhc2tfbmV3LCBLRl9JVEVSX05FVylcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTA5PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfZHlucHRyX21lbXNldClcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5MTA6I2lmZGVmIENPTkZJR19ORVRcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MTEtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9tb2RpZnlfcmV0dXJuX3Rlc3RfdHApXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDkyOD1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2xvY2FsX2lycV9yZXN0b3JlKVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDkyOTojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MzAtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9wcm9iZV9yZWFkX3VzZXJfZHlucHRyKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ5Mzc9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cl9keW5wdHIsIEtGX1NMRUVQQUJMRSlcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MzgtI2VuZGlmXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTM5OiNpZmRlZiBDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVJcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NDAtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2RtYWJ1Zl9uZXcsIEtGX0lURVJfTkVXIHwgS0ZfU0xFRVBBQkxFKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ5NjE9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJuY2FzZXN0cik7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTYyOiNpZiBkZWZpbmVkKENPTkZJR19CUEZfTFNNKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ0dST1VQUylcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NjMtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jZ3JvdXBfcmVhZF94YXR0ciwgS0ZfUkNVKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ5Nzk9c3RhdGljIGludCBfX2luaXQga2Z1bmNfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5ODYtXHRcdH0sXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTg3OiNpZmRlZiBDT05GSUdfQ0dST1VQU1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk4OC1cdFx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTcxCgkJCQkJCQlvdXRwdXQ6IDEyNAoJCQkJCQkJdGhvdWdodHM6IDQ4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBOZXcgQlBGIEtmdW5jcyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIG5ldyBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAga2Z1bmNzIGFyZSBiZWluZyBhZGRlZCB0byB0aGUgZ2VuZXJpYyBCVEYga2Z1bmNzLCB3aGljaCBtZWFucyB0aGV5JiMzOTtyZSBhdXRvbWF0aWNhbGx5IGF2YWlsYWJsZSBpZiBCUEYgaXMgZW5hYmxlZC4gTm8gc3BlY2lmaWMgY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIGJleW9uZCB0aGUgc3RhbmRhcmQgQlBGIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBpcyBhcyBleHBlY3RlZC4KCk15IGZvY3VzIGlzIG5hdHVyYWxseSBvbiB0aGVzZSB0d28gZnVuY3Rpb25zOiBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAuIEkgbmVlZCB0byBlbnN1cmUgdGhleSYjMzk7cmUgcm9idXN0LiBUaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIHRoZXNlIGZ1bmN0aW9ucyB3aXRoaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgb2YgQlBGIGhlbHBlciBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyBhbHNvIHJlbmFtaW5nIGBicGZfbWVtY21wYCB0byBgbG9jYWxfbWVtY21wYCBpbiBhIHRlc3QgZmlsZSwgc28gSSBuZWVkIHRvIGFjY291bnQgZm9yIHRoYXQgcmVuYW1lIGluIG15IGFuYWx5c2lzLiBBZGRpdGlvbmFsbHksIHRoZXJlIGFyZSBuZXcgdGVzdHMgYWRkZWQgaW4gYHN0cmluZ19rZnVuY3NfZmFpbHVyZTEuY2AgYW5kIGBzdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuY2AsIHNvIEkgbmVlZCB0byBjaGVjayB0aG9zZSB0b28uCgpGdW5jdGlvbmFsbHksIHRoZXNlIGFkZGl0aW9ucyBlbmFibGUgc3RyaW5nIGFuZCBtZW1vcnkgY29tcGFyaXNvbnMgZGlyZWN0bHkgd2l0aGluIEJQRiBwcm9ncmFtcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSwgZXNwZWNpYWxseSBiZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBpbnZvbHZlIG1lbW9yeSBhY2Nlc3MuIFRoZXkgYXJlIHBvdGVudGlhbCBwb2ludHMgb2YgdnVsbmVyYWJpbGl0eSB0aGF0IG5lZWQgcmlnb3JvdXMgdGVzdGluZyB0byBwcmV2ZW50IHBhZ2UgZmF1bHRzIG9yIG90aGVyIG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy4KClRoZXJlZm9yZSwgdGhlIG91dHB1dCBJJiMzOTttIGdlbmVyYXRpbmcgZm9yIGZ1enppbmcgd2lsbCBiZToKCiogICAqKldvcnRoRnV6emluZzogdHJ1ZSoqIC0gRGVmaW5pdGVseSwgdGhlc2UgYXJlIG5ldyBjb3JlIGZ1bmN0aW9ucy4KKiAgICoqRm9jdXNTeW1ib2xzOiBbJiMzNDticGZfc3RycGJyayYjMzQ7LCAmIzM0O2JwZl9tZW1jbXAmIzM0O10qKiAtIFRoZXNlIGFyZSB0aGUgdHdvIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdGhlIG1vc3QgYXR0ZW50aW9uLgoqICAgKipFbmFibGVDb25maWdzOiBbXSoqIC0gTm8gYWRkaXRpb25hbCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQuCiogICAqKlJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB0d28gbmV3IEJQRiBrZnVuY3MsIGBicGZfc3RycGJya2AgYW5kIGBicGZfbWVtY21wYCwgd2hpY2ggYWxsb3cgQlBGIHByb2dyYW1zIHRvIHBlcmZvcm0gc3RyaW5nIGFuZCBtZW1vcnkgY29tcGFyaXNvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIGhlbHBlciBsaWJyYXJ5IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB2YXJpb3VzIGlucHV0cyBzYWZlbHksIGVzcGVjaWFsbHkgc2luY2UgdGhleSBkZWFsIHdpdGggbWVtb3J5IGFjY2VzcyBhbmQgcG90ZW50aWFsIHBhZ2UgZmF1bHRzLiYjMzQ7KiogLSBUaGlzIHN1bXMgdXAgdGhlIGNvcmUgcmlzayBhc3Nlc3NtZW50IGFuZCBqdXN0aWZpY2F0aW9uIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDAzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc3RycGJyayYjMzQ7LAogICAgJiMzNDticGZfbWVtY21wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdHdvIG5ldyBCUEYga2Z1bmNzLCBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAsIHdoaWNoIGFsbG93IEJQRiBwcm9ncmFtcyB0byBwZXJmb3JtIHN0cmluZyBhbmQgbWVtb3J5IGNvbXBhcmlzb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIEJQRiBoZWxwZXIgbGlicmFyeSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBoYW5kbGUgdmFyaW91cyBpbnB1dHMgc2FmZWx5LCBlc3BlY2lhbGx5IHNpbmNlIHRoZXkgZGVhbCB3aXRoIG1lbW9yeSBhY2Nlc3MgYW5kIHBvdGVudGlhbCBwYWdlIGZhdWx0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc3RycGJyayYjMzQ7LAogICAgJiMzNDticGZfbWVtY21wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdHdvIG5ldyBCUEYga2Z1bmNzLCBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAsIHdoaWNoIGFsbG93IEJQRiBwcm9ncmFtcyB0byBwZXJmb3JtIHN0cmluZyBhbmQgbWVtb3J5IGNvbXBhcmlzb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIEJQRiBoZWxwZXIgbGlicmFyeSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBoYW5kbGUgdmFyaW91cyBpbnB1dHMgc2FmZWx5LCBlc3BlY2lhbGx5IHNpbmNlIHRoZXkgZGVhbCB3aXRoIG1lbW9yeSBhY2Nlc3MgYW5kIHBvdGVudGlhbCBwYWdlIGZhdWx0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDAzOjM0OjM3LjAyODk1MDc2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDEzMzUxNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zdHJwYnJrXCIsXG4gICAgXCJicGZfbWVtY21wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB0d28gbmV3IEJQRiBrZnVuY3MsIGBicGZfc3RycGJya2AgYW5kIGBicGZfbWVtY21wYCwgd2hpY2ggYWxsb3cgQlBGIHByb2dyYW1zIHRvIHBlcmZvcm0gc3RyaW5nIGFuZCBtZW1vcnkgY29tcGFyaXNvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIGhlbHBlciBsaWJyYXJ5IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB2YXJpb3VzIGlucHV0cyBzYWZlbHksIGVzcGVjaWFsbHkgc2luY2UgdGhleSBkZWFsIHdpdGggbWVtb3J5IGFjY2VzcyBhbmQgcG90ZW50aWFsIHBhZ2UgZmF1bHRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwMzozNDozNy4wMjg5NTY2NDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDE3NTc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMzZGQ1NGYyMTkzZjU0MjFkMTdlZDZhYTM3NDk1NjdmMzQzMjc0MjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMDM6MzQ6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xcbmluZGV4IGI1MzE0YzlmZWQzY2YwLi5mMjRjZmRiMjI2MzVjNyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuY1xcbisrKyBiL2tlcm5lbC9icGYvaGVscGVycy5jXFxuQEAgLTM5NzEsNiArMzk3MSwxMDkgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zdHJjc3BuKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqcmVqZWN0X19pZ24pXFxuIFxcdHJldHVybiAtRUZBVUxUO1xcbiB9XFxuIFxcbisvKipcXG4rICogYnBmX21lbWNtcCAtIENvbXBhcmUgdHdvIG1lbW9yeSByZWdpb25zIGJ5dGUgYnkgYnl0ZVxcbisgKiBAcHRyMV9faWduOiBGaXJzdCBtZW1vcnkgcmVnaW9uXFxuKyAqIEBwdHIyX19pZ246IFNlY29uZCBtZW1vcnkgcmVnaW9uXFxuKyAqIEBzaXplOiBOdW1iZXIgb2YgYnl0ZXMgdG8gY29tcGFyZVxcbisgKlxcbisgKiBDb21wYXJlcyB0aGUgZmlyc3QgQHNpemUgYnl0ZXMgb2YgdGhlIG1lbW9yeSBhcmVhcyBAcHRyMV9faWduIGFuZFxcbisgKiBAcHRyMl9faWduLiBVbmxpa2UgYnBmX3N0cmNtcCwgbnVsbCBieXRlcyBkbyBub3QgdGVybWluYXRlIHRoZSBjb21wYXJpc29uLlxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogJTAgICAgICAgLSBUaGUgbWVtb3J5IHJlZ2lvbnMgYXJlIGVxdWFsXFxuKyAqICogJS0xICAgICAgLSBAcHRyMV9faWduIGlzIGxlc3MgdGhhbiBAcHRyMl9faWduXFxuKyAqICogJTEgICAgICAgLSBAcHRyMV9faWduIGlzIGdyZWF0ZXIgdGhhbiBAcHRyMl9faWduXFxuKyAqICogJS1FRkFVTFQgLSBDYW5ub3QgcmVhZCBvbmUgb2YgdGhlIG1lbW9yeSByZWdpb25zXFxuKyAqICogJS1FMkJJRyAgLSBAc2l6ZSBleGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgc2l6ZVxcbisgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBtZW1vcnkgcmVnaW9ucyBpcyBvdXRzaWRlIG9mIGtlcm5lbCBhZGRyZXNzIHNwYWNlXFxuKyAqL1xcbisvKipcXG4rICogYnBmX3N0cnBicmsgLSBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc2V0IG9mIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmdcXG4rICogQHNfX2lnbjogVGhlIHN0cmluZyB0byBiZSBzZWFyY2hlZFxcbisgKiBAYWNjZXB0X19pZ246IFRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2hhcmFjdGVycyB0byBzZWFyY2ggZm9yXFxuKyAqXFxuKyAqIFJldHVybjpcXG4rICogKiBcXHUwMDNlPTAgICAgICAtIEluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gQHNfX2lnbiB0aGF0IG1hdGNoZXMgYW55XFxuKyAqICAgICAgICAgICAgICBjaGFyYWN0ZXIgaW4gQGFjY2VwdF9faWduXFxuKyAqICogJS1FTk9FTlQgLSBObyBjaGFyYWN0ZXIgb2YgQGFjY2VwdF9faWduIGZvdW5kIGluIEBzX19pZ25cXG4rICogKiAlLUVGQVVMVCAtIENhbm5vdCByZWFkIG9uZSBvZiB0aGUgc3RyaW5nc1xcbisgKiAqICUtRTJCSUcgIC0gT25lIG9mIHRoZSBzdHJpbmdzIGlzIHRvbyBsYXJnZVxcbisgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBzdHJpbmdzIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2VcXG4rICovXFxuK19fYnBmX2tmdW5jIGludCBicGZfc3RycGJyayhjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKmFjY2VwdF9faWduKVxcbit7XFxuK1xcdGNoYXIgY3MsIGNhO1xcbitcXHRpbnQgaSwgajtcXG4rXFxuK1xcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQoc19faWduLCAxKSB8fFxcbitcXHQgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKGFjY2VwdF9faWduLCAxKSkge1xcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0fVxcbitcXG4rXFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGkrKykge1xcbitcXHRcXHRfX2dldF9rZXJuZWxfbm9mYXVsdChcXHUwMDI2Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XFxuK1xcdFxcdGlmIChjcyA9PSAnXFxcXDAnKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBqKyspIHtcXG4rXFx0XFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHQoXFx1MDAyNmNhLCBhY2NlcHRfX2lnbiArIGosIGNoYXIsIGVycl9vdXQpO1xcbitcXHRcXHRcXHRpZiAoY2EgPT0gJ1xcXFwwJylcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGlmIChjcyA9PSBjYSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGogPT0gWEFUVFJfU0laRV9NQVgpXFxuK1xcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuK1xcdFxcdHNfX2lnbisrO1xcbitcXHR9XFxuK1xcdHJldHVybiAtRTJCSUc7XFxuK2Vycl9vdXQ6XFxuK1xcdHJldHVybiAtRUZBVUxUO1xcbit9XFxuK1xcbisvKipcXG4rICogYnBmX21lbWNtcCAtIENvbXBhcmUgdHdvIG1lbW9yeSByZWdpb25zIGJ5dGUgYnkgYnl0ZVxcbisgKiBAcHRyMV9faWduOiBGaXJzdCBtZW1vcnkgcmVnaW9uXFxuKyAqIEBwdHIyX19pZ246IFNlY29uZCBtZW1vcnkgcmVnaW9uXFxuKyAqIEBzaXplOiBOdW1iZXIgb2YgYnl0ZXMgdG8gY29tcGFyZVxcbisgKlxcbisgKiBDb21wYXJlcyB0aGUgZmlyc3QgQHNpemUgYnl0ZXMgb2YgdGhlIG1lbW9yeSBhcmVhcyBAcHRyMV9faWduIGFuZFxcbisgKiBAcHRyMl9faWduLiBVbmxpa2UgYnBmX3N0cmNtcCwgbnVsbCBieXRlcyBkbyBub3QgdGVybWluYXRlIHRoZSBjb21wYXJpc29uLlxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogJTAgICAgICAgLSBUaGUgbWVtb3J5IHJlZ2lvbnMgYXJlIGVxdWFsXFxuKyAqICogJS0xICAgICAgLSBAcHRyMV9faWduIGlzIGxlc3MgdGhhbiBAcHRyMl9faWduXFxuKyAqICogJTEgICAgICAgLSBAcHRyMV9faWduIGlzIGdyZWF0ZXIgdGhhbiBAcHRyMl9faWduXFxuKyAqICogJS1FRkFVTFQgLSBDYW5ub3QgcmVhZCBvbmUgb2YgdGhlIG1lbW9yeSByZWdpb25zXFxuKyAqICogJS1FMkJJRyAgLSBAc2l6ZSBleGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgc2l6ZVxcbisgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBtZW1vcnkgcmVnaW9ucyBpcyBvdXRzaWRlIG9mIGtlcm5lbCBhZGRyZXNzIHNwYWNlXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX21lbWNtcChjb25zdCB2b2lkICpwdHIxX19pZ24sIGNvbnN0IHZvaWQgKnB0cjJfX2lnbixcXG4rXFx0XFx0XFx0ICAgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqcDEgPSBwdHIxX19pZ24sICpwMiA9IHB0cjJfX2lnbjtcXG4rXFx0Y2hhciBjMSwgYzI7XFxuK1xcdHNpemVfdCBpO1xcbitcXG4rXFx0aWYgKHNpemUgXFx1MDAzZSBYQVRUUl9TSVpFX01BWClcXG4rXFx0XFx0cmV0dXJuIC1FMkJJRztcXG4rXFx0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChwMSwgc2l6ZSkgfHxcXG4rXFx0ICAgICFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChwMiwgc2l6ZSkpXFxuK1xcdFxcdHJldHVybiAtRVJBTkdFO1xcbitcXG4rXFx0Z3VhcmQocGFnZWZhdWx0KSgpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2l6ZTsgaSsrKSB7XFxuK1xcdFxcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFxcdTAwMjZjMSwgcDEgKyBpLCBjaGFyLCBlcnJfb3V0KTtcXG4rXFx0XFx0X19nZXRfa2VybmVsX25vZmF1bHQoXFx1MDAyNmMyLCBwMiArIGksIGNoYXIsIGVycl9vdXQpO1xcbitcXHRcXHRpZiAoYzEgIT0gYzIpXFxuK1xcdFxcdFxcdHJldHVybiBjMSBcXHUwMDNjIGMyID8gLTEgOiAxO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbitlcnJfb3V0OlxcbitcXHRyZXR1cm4gLUVGQVVMVDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBfX2JwZl9zdHJuc3RyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IGxlbixcXG4gXFx0XFx0XFx0IGJvb2wgaWdub3JlX2Nhc2UpXFxuIHtcXG5AQCAtNDg1MCw2ICs0OTUzLDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJsZW4pO1xcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cm5sZW4pO1xcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cnNwbik7XFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY3Nwbik7XFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RycGJyayk7XFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfbWVtY21wKTtcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJzdHIpO1xcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNhc2VzdHIpO1xcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cm5zdHIpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jXFxuaW5kZXggZTBkNjcyZDkzYWRmODUuLjA3MTU4MWZmMDgzM2YzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9zdWNjZXNzLmNcXG5AQCAtNjI0LDcgKzYyNCw3IEBAIGludCBCUEZfUFJPRyh0ZXN0X2R5bnB0cl9za2JfdHBfYnRmLCB2b2lkICpza2IsIHZvaWQgKmxvY2F0aW9uKVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgYnBmX21lbWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCB1MzIgc2l6ZSlcXG4rc3RhdGljIGlubGluZSBpbnQgbG9jYWxfbWVtY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIsIHUzMiBzaXplKVxcbiB7XFxuIFxcdGludCBpO1xcbiBcXG5AQCAtNjUwLDEyICs2NTAsMTIgQEAgaW50IHRlc3RfZHlucHRyX2NvcHkodm9pZCAqY3R4KVxcbiBcXHRlcnIgPSBicGZfZHlucHRyX3dyaXRlKFxcdTAwMjZzcmMsIDAsIGRhdGEsIHN6LCAwKTtcXG4gXFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfY29weShcXHUwMDI2ZHN0LCAwLCBcXHUwMDI2c3JjLCAwLCBzeik7XFxuIFxcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoYnVmLCBzeiwgXFx1MDAyNmRzdCwgMCwgMCk7XFxuLVxcdGVyciA9IGVyciA/OiBicGZfbWVtY21wKGRhdGEsIGJ1Ziwgc3opO1xcbitcXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGRhdGEsIGJ1Ziwgc3opO1xcbiBcXG4gXFx0LyogVGVzdCB0aGF0IG9mZnNldHMgYXJlIGhhbmRsZWQgY29ycmVjdGx5ICovXFxuIFxcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX2NvcHkoXFx1MDAyNmRzdCwgMywgXFx1MDAyNnNyYywgNSwgc3ogLSA1KTtcXG4gXFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChidWYsIHN6IC0gNSwgXFx1MDAyNmRzdCwgMywgMCk7XFxuLVxcdGVyciA9IGVyciA/OiBicGZfbWVtY21wKGRhdGEgKyA1LCBidWYsIHN6IC0gNSk7XFxuK1xcdGVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZGF0YSArIDUsIGJ1Ziwgc3ogLSA1KTtcXG4gXFxuIFxcdGJwZl9yaW5nYnVmX2Rpc2NhcmRfZHlucHRyKFxcdTAwMjZzcmMsIDApO1xcbiBcXHRicGZfcmluZ2J1Zl9kaXNjYXJkX2R5bnB0cihcXHUwMDI2ZHN0LCAwKTtcXG5AQCAtNjkyLDcgKzY5Miw3IEBAIGludCB0ZXN0X2R5bnB0cl9jb3B5X3hkcChzdHJ1Y3QgeGRwX21kICp4ZHApXFxuIFxcdFxcdGVyciA9IGJwZl9keW5wdHJfcmVhZChcXHUwMDI2YnVmLCBsZW4sIFxcdTAwMjZwdHJfeGRwLCBpICogbGVuLCAwKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdGlmIChicGZfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxcbitcXHRcXHRpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG5AQCAtNzEzLDcgKzcxMyw3IEBAIGludCB0ZXN0X2R5bnB0cl9jb3B5X3hkcChzdHJ1Y3QgeGRwX21kICp4ZHApXFxuIFxcdFxcdGVyciA9IGJwZl9keW5wdHJfcmVhZChcXHUwMDI2YnVmLCBsZW4sIFxcdTAwMjZwdHJfYnVmLCBpICogbGVuLCAwKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdGlmIChicGZfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxcbitcXHRcXHRpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG5AQCAtNzI3LDcgKzcyNyw3IEBAIGludCB0ZXN0X2R5bnB0cl9jb3B5X3hkcChzdHJ1Y3QgeGRwX21kICp4ZHApXFxuIFxcdFxcdGVyciA9IGJwZl9keW5wdHJfcmVhZChcXHUwMDI2YnVmLCBsZW4sIFxcdTAwMjZwdHJfeGRwLCAyICsgaSAqIGxlbiwgMCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRpZiAoYnBmX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcXG4rXFx0XFx0aWYgKGxvY2FsX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuQEAgLTc1MCw3ICs3NTAsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm8odm9pZCAqY3R4KVxcbiBcXG4gXFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfemVyb19kYXRhLCBkYXRhX3N6LCAwLCBcXHUwMDI2cHRyKTtcXG4gXFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KFxcdTAwMjZwdHIsIDAsIGRhdGFfc3osIDApO1xcbi1cXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcCh6ZXJvZXMsIG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3opO1xcbitcXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKHplcm9lcywgbWVtc2V0X3plcm9fZGF0YSwgZGF0YV9zeik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC03NzAsNyArNzcwLDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF9ub3R6ZXJvKHZvaWQgKmN0eClcXG4gXFxuIFxcdGVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X25vdHplcm9fZGF0YSwgZGF0YV9zeiwgMCwgXFx1MDAyNnB0cik7XFxuIFxcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX21lbXNldChcXHUwMDI2cHRyLCAwLCBkYXRhX3N6LCBEWU5QVFJfTUVNU0VUX1ZBTCk7XFxuLVxcdGVyciA9IGVyciA/OiBicGZfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfbm90emVyb19kYXRhLCBkYXRhX3N6KTtcXG4rXFx0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X25vdHplcm9fZGF0YSwgZGF0YV9zeik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC03ODYsNyArNzg2LDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF96ZXJvX29mZnNldCh2b2lkICpjdHgpXFxuIFxcbiBcXHRlcnIgPSBicGZfZHlucHRyX2Zyb21fbWVtKG1lbXNldF96ZXJvX29mZnNldF9kYXRhLCBkYXRhX3N6LCAwLCBcXHUwMDI2cHRyKTtcXG4gXFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KFxcdTAwMjZwdHIsIDgsIDQsIDApO1xcbi1cXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fb2Zmc2V0X2RhdGEsIGRhdGFfc3opO1xcbitcXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfemVyb19vZmZzZXRfZGF0YSwgZGF0YV9zeik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC04MDMsNyArODAzLDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF96ZXJvX2FkanVzdGVkKHZvaWQgKmN0eClcXG4gXFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfemVyb19hZGp1c3RlZF9kYXRhLCBkYXRhX3N6LCAwLCBcXHUwMDI2cHRyKTtcXG4gXFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfYWRqdXN0KFxcdTAwMjZwdHIsIDQsIDgpO1xcbiBcXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9tZW1zZXQoXFx1MDAyNnB0ciwgMCwgYnBmX2R5bnB0cl9zaXplKFxcdTAwMjZwdHIpLCAwKTtcXG4tXFx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX2FkanVzdGVkX2RhdGEsIGRhdGFfc3opO1xcbitcXHRlcnIgPSBlcnIgPzogbG9jYWxfbWVtY21wKGV4cGVjdGVkLCBtZW1zZXRfemVyb19hZGp1c3RlZF9kYXRhLCBkYXRhX3N6KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTg5OCw3ICs4OTgsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3hkcF9jaHVua3Moc3RydWN0IHhkcF9tZCAqeGRwKVxcbiBcXHRcXHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXFx1MDAyNmJ1ZiwgY2h1bmtfc3osIFxcdTAwMjZwdHJfeGRwLCBvZmZzZXQsIDApO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0ZXJyID0gYnBmX21lbWNtcChidWYsIGV4cGVjdGVkX2J1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRcXHRlcnIgPSBsb2NhbF9tZW1jbXAoYnVmLCBleHBlY3RlZF9idWYsIHNpemVvZihidWYpKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG5AQCAtOTUyLDcgKzk1Miw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X2R5bnB0cl9wcm9iZSh2b2lkICpwdHIsIGJwZl9yZWFkX2R5bnB0cl9mbl90IGJwXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKFxcdTAwMjZidWYsIGxlbiwgXFx1MDAyNnB0cl9idWYsIDAsIDApO1xcbiBcXG4tXFx0XFx0aWYgKGVyciB8fCBicGZfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKVxcbitcXHRcXHRpZiAoZXJyIHx8IGxvY2FsX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSlcXG4gXFx0XFx0XFx0ZXJyID0gMTtcXG4gXFxuIFxcdFxcdC8qIFJlc2V0IGJ1ZmZlciBhbmQgZHlucHRyICovXFxuQEAgLTk4Niw3ICs5ODYsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfc3RyKHZvaWQgKnB0cixcXG4gXFx0XFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChcXHUwMDI2YnVmLCBsZW4sIFxcdTAwMjZwdHJfYnVmLCAwLCAwKTtcXG4gXFx0XFx0aWYgKCFsZW4pXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRpZiAoZXJyIHx8IGJwZl9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAnXFxcXDAnKVxcbitcXHRcXHRpZiAoZXJyIHx8IGxvY2FsX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICdcXFxcMCcpXFxuIFxcdFxcdFxcdGVyciA9IDE7XFxuIFxcdH1cXG4gXFx0YnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoXFx1MDAyNnB0cl9idWYsIDApO1xcbkBAIC0xMDEyLDcgKzEwMTIsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCwgdm9pZCAqcHRyLFxcbiBcXHRcXHRpZiAobGVuIFxcdTAwM2Ugc2l6ZW9mKGJ1ZikpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKFxcdTAwMjZidWYsIGxlbiwgXFx1MDAyNnB0cl94ZHAsIG9mZiwgMCk7XFxuLVxcdFxcdGlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSlcXG4rXFx0XFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbikpXFxuIFxcdFxcdFxcdGVyciA9IDE7XFxuIFxcdFxcdC8qIFJlc2V0IGJ1ZmZlciBhbmQgZHlucHRyICovXFxuIFxcdFxcdF9fYnVpbHRpbl9tZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7XFxuQEAgLTEwNDgsNyArMTA0OCw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0ZXN0X2R5bnB0cl9wcm9iZV9zdHJfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcCwgdm9pZCAqXFxuIFxcbiBcXHRcXHRpZiAoIWxlbilcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuIC0gMSkgfHwgYnVmW2xlbiAtIDFdICE9ICdcXFxcMCcpXFxuK1xcdFxcdGlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4gLSAxKSB8fCBidWZbbGVuIC0gMV0gIT0gJ1xcXFwwJylcXG4gXFx0XFx0XFx0ZXJyID0gMTtcXG4gXFxuIFxcdFxcdF9fYnVpbHRpbl9tZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jXFxuaW5kZXggYmRkYzRlODU3OWQyNDQuLmU2N2ZlOTcwMGU1OTNjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jXFxuQEAgLTksNiArOSwxMCBAQFxcbiBjaGFyICp1c2VyX3B0ciA9IChjaGFyICopMTtcXG4gY2hhciAqaW52YWxpZF9rZXJuX3B0ciA9IChjaGFyICopLTE7XFxuIFxcbitleHRlcm4gaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pIF9fa3N5bTtcXG4rZXh0ZXJuIGludCBicGZfbWVtY21wKGNvbnN0IHZvaWQgKnB0cjFfX2lnbiwgY29uc3Qgdm9pZCAqcHRyMl9faWduLFxcbitcXHRcXHQgICAgICBzaXplX3Qgc2l6ZSkgX19rc3ltO1xcbitcXG4gLypcXG4gICogV2hlbiBwYXNzaW5nIHVzZXJzcGFjZSBwb2ludGVycywgdGhlIGVycm9yIGNvZGUgZGlmZmVycyBiYXNlZCBvbiBhcmNoOlxcbiAgKiAgIC1FUkFOR0Ugb24gYXJjaGVzIHdpdGggbm9uLW92ZXJsYXBwaW5nIGFkZHJlc3Mgc3BhY2VzXFxuQEAgLTUzLDYgKzU3LDEwIEBAIFNFQyhcXFwic3lzY2FsbFxcXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybnN0cl9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybnN0cl9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKFxcXCJoZWxsb1xcXCIsIE5VTEwsIDEpOyB9XFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RybmNhc2VzdHJfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoTlVMTCwgXFxcImhlbGxvXFxcIiwgMSk7IH1cXG4gU0VDKFxcXCJzeXNjYWxsXFxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJuY2FzZXN0cl9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihcXFwiaGVsbG9cXFwiLCBOVUxMLCAxKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X21lbWNtcF9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoTlVMTCwgXFxcInhcXFwiLCAxKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X21lbWNtcF9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXFxcInhcXFwiLCBOVUxMLCAxKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cnBicmtfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhOVUxMLCBcXFwieFxcXCIpOyB9XFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RycGJya19udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKFxcXCJ4XFxcIiwgTlVMTCk7IH1cXG4gXFxuIC8qIFBhc3NpbmcgdXNlcnNwYWNlIHB0ciB0byBzdHJpbmcga2Z1bmNzICovXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RyY21wX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjbXAodXNlcl9wdHIsIFxcXCJoZWxsb1xcXCIpOyB9XFxuQEAgLTc5LDYgKzg3LDEwIEBAIFNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybnN0cl91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJlXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybnN0cl91c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybnN0cihcXFwiaGVsbG9cXFwiLCB1c2VyX3B0ciwgMSk7IH1cXG4gU0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIodXNlcl9wdHIsIFxcXCJoZWxsb1xcXCIsIDEpOyB9XFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFxcXCJoZWxsb1xcXCIsIHVzZXJfcHRyLCAxKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X21lbWNtcF91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKHVzZXJfcHRyLCBcXFwieFxcXCIsIDEpOyB9XFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3RfbWVtY21wX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXFxcInhcXFwiLCB1c2VyX3B0ciwgMSk7IH1cXG4rU0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJwYnJrX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHVzZXJfcHRyLCBcXFwieFxcXCIpOyB9XFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RycGJya191c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhcXFwieFxcXCIsIHVzZXJfcHRyKTsgfVxcbiBcXG4gI2VuZGlmIC8qIF9fVEFSR0VUX0FSQ0hfczM5MCAqL1xcbiBcXG5AQCAtMTA3LDUgKzExOSw5IEBAIFNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5zdHJfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5zdHJfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuc3RyKFxcXCJoZWxsb1xcXCIsIGludmFsaWRfa2Vybl9wdHIsIDEpOyB9XFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoaW52YWxpZF9rZXJuX3B0ciwgXFxcImhlbGxvXFxcIiwgMSk7IH1cXG4gU0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihcXFwiaGVsbG9cXFwiLCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9tZW1jbXBfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoaW52YWxpZF9rZXJuX3B0ciwgXFxcInhcXFwiLCAxKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9tZW1jbXBfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoXFxcInhcXFwiLCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfVxcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJwYnJrX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhpbnZhbGlkX2tlcm5fcHRyLCBcXFwieFxcXCIpOyB9XFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cnBicmtfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKFxcXCJ4XFxcIiwgaW52YWxpZF9rZXJuX3B0cik7IH1cXG4gXFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmNcXG5pbmRleCBmNjViMTIyNmE4MWEzNy4uZTY3YjgwYWIzY2QyYzkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jXFxuQEAgLTcsNiArNywxMCBAQFxcbiBcXG4gY2hhciBzdHJbXSA9IFxcXCJoZWxsbyB3b3JsZFxcXCI7XFxuIFxcbitleHRlcm4gaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pIF9fa3N5bTtcXG4rZXh0ZXJuIGludCBicGZfbWVtY21wKGNvbnN0IHZvaWQgKnB0cjFfX2lnbiwgY29uc3Qgdm9pZCAqcHRyMl9faWduLFxcbitcXHRcXHQgICAgICBzaXplX3Qgc2l6ZSkgX19rc3ltO1xcbitcXG4gI2RlZmluZSBfX3Rlc3QocmV0dmFsKSBTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3N1Y2Nlc3MgX19yZXR2YWwocmV0dmFsKVxcbiBcXG4gLyogRnVuY3Rpb25hbCB0ZXN0cyAqL1xcbkBAIC02MCw0ICs2NCwyNSBAQCBfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfbm90Zm91bmQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc1xcbiBfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfbm90Zm91bmQzKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFxcXCJcXFwiLCBcXFwiYVxcXCIsIDApOyB9XFxuIF9fdGVzdCgwKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9lbXB0eSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihzdHIsIFxcXCJcXFwiLCAxKTsgfVxcbiBcXG4rLyogYnBmX3N0cnBicmsgLSBmdW5jdGlvbmFsIHRlc3RzICovXFxuK19fdGVzdCgwKSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX2ZpcnN0KHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcXFwiaFxcXCIpOyB9XFxuK19fdGVzdCg0KSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX21pZGRsZSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXFxcIm93XFxcIik7IH1cXG4rX190ZXN0KDYpIGludCB0ZXN0X3N0cnBicmtfZm91bmRfbXVsdGlwbGUodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFxcXCJ3XFxcIik7IH1cXG4rX190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cnBicmtfbm90Zm91bmQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFxcXCJ4eXpcXFwiKTsgfVxcbitfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RycGJya19lbXB0eV9hY2NlcHQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFxcXCJcXFwiKTsgfVxcbitcXG4rLyogYnBmX21lbWNtcCAtIGZ1bmN0aW9uYWwgdGVzdHMgKi9cXG4rY2hhciBkYXRhMVtdID0gXFxcImhlbGxvIHdvcmxkXFxcIjtcXG4rY2hhciBkYXRhMltdID0gXFxcImhlbGxvIHdvcmxkXFxcIjtcXG4rY2hhciBkYXRhM1tdID0gXFxcImhlbGxvIHdvcmxlXFxcIjtcXG4rX190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTEsIGRhdGEyLCBzaXplb2YoZGF0YTEpKTsgfVxcbitfX3Rlc3QoLTEpIGludCB0ZXN0X21lbWNtcF9uZXFfbGVzcyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoZGF0YTEsIGRhdGEzLCBzaXplb2YoZGF0YTEpKTsgfVxcbitfX3Rlc3QoMSkgaW50IHRlc3RfbWVtY21wX25lcV9ncmVhdGVyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMywgZGF0YTEsIHNpemVvZihkYXRhMSkpOyB9XFxuK19fdGVzdCgwKSBpbnQgdGVzdF9tZW1jbXBfc2l6ZV96ZXJvKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTMsIDApOyB9XFxuKy8qIG1lbWNtcCBzaG91bGQgTk9UIHN0b3AgYXQgbnVsbCBieXRlIC0gY29tcGFyZSBwYXN0ICdcXFxcMCcgKi9cXG4rY2hhciBiaW4xW10gPSB7ICdhJywgJ1xcXFwwJywgJ2MnIH07XFxuK2NoYXIgYmluMltdID0geyAnYScsICdcXFxcMCcsICdkJyB9O1xcbitfX3Rlc3QoMCkgaW50IHRlc3RfbWVtY21wX251bGxfYnl0ZV9lcSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9tZW1jbXAoYmluMSwgYmluMSwgc2l6ZW9mKGJpbjEpKTsgfVxcbitfX3Rlc3QoLTEpIGludCB0ZXN0X21lbWNtcF9udWxsX2J5dGVfbmVxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChiaW4xLCBiaW4yLCBzaXplb2YoYmluMSkpOyB9XFxuK1xcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDM6MzQ6MzcuNDk0MDA4MTA5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjU0ODI4Njk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc3RycGJya1wiLFxuICAgIFwiYnBmX21lbWNtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdHdvIG5ldyBCUEYga2Z1bmNzLCBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAsIHdoaWNoIGFsbG93IEJQRiBwcm9ncmFtcyB0byBwZXJmb3JtIHN0cmluZyBhbmQgbWVtb3J5IGNvbXBhcmlzb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIEJQRiBoZWxwZXIgbGlicmFyeSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBoYW5kbGUgdmFyaW91cyBpbnB1dHMgc2FmZWx5LCBlc3BlY2lhbGx5IHNpbmNlIHRoZXkgZGVhbCB3aXRoIG1lbW9yeSBhY2Nlc3MgYW5kIHBvdGVudGlhbCBwYWdlIGZhdWx0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzM2RkNTRmMjE5M2Y1NDIxZDE3ZWQ2YWEzNzQ5NTY3ZjM0MzI3NDIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMDM6MzQ6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5pbmRleCBiNTMxNGM5ZmVkM2NmMC4uZjI0Y2ZkYjIyNjM1YzcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcbkBAIC0zOTcxLDYgKzM5NzEsMTA5IEBAIF9fYnBmX2tmdW5jIGludCBicGZfc3RyY3Nwbihjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKnJlamVjdF9faWduKVxuIFx0cmV0dXJuIC1FRkFVTFQ7XG4gfVxuIFxuKy8qKlxuKyAqIGJwZl9tZW1jbXAgLSBDb21wYXJlIHR3byBtZW1vcnkgcmVnaW9ucyBieXRlIGJ5IGJ5dGVcbisgKiBAcHRyMV9faWduOiBGaXJzdCBtZW1vcnkgcmVnaW9uXG4rICogQHB0cjJfX2lnbjogU2Vjb25kIG1lbW9yeSByZWdpb25cbisgKiBAc2l6ZTogTnVtYmVyIG9mIGJ5dGVzIHRvIGNvbXBhcmVcbisgKlxuKyAqIENvbXBhcmVzIHRoZSBmaXJzdCBAc2l6ZSBieXRlcyBvZiB0aGUgbWVtb3J5IGFyZWFzIEBwdHIxX19pZ24gYW5kXG4rICogQHB0cjJfX2lnbi4gVW5saWtlIGJwZl9zdHJjbXAsIG51bGwgYnl0ZXMgZG8gbm90IHRlcm1pbmF0ZSB0aGUgY29tcGFyaXNvbi5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqICUwICAgICAgIC0gVGhlIG1lbW9yeSByZWdpb25zIGFyZSBlcXVhbFxuKyAqICogJS0xICAgICAgLSBAcHRyMV9faWduIGlzIGxlc3MgdGhhbiBAcHRyMl9faWduXG4rICogKiAlMSAgICAgICAtIEBwdHIxX19pZ24gaXMgZ3JlYXRlciB0aGFuIEBwdHIyX19pZ25cbisgKiAqICUtRUZBVUxUIC0gQ2Fubm90IHJlYWQgb25lIG9mIHRoZSBtZW1vcnkgcmVnaW9uc1xuKyAqICogJS1FMkJJRyAgLSBAc2l6ZSBleGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgc2l6ZVxuKyAqICogJS1FUkFOR0UgLSBPbmUgb2YgdGhlIG1lbW9yeSByZWdpb25zIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2VcbisgKi9cbisvKipcbisgKiBicGZfc3RycGJyayAtIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzZXQgb2YgY2hhcmFjdGVycyBpbiBhIHN0cmluZ1xuKyAqIEBzX19pZ246IFRoZSBzdHJpbmcgdG8gYmUgc2VhcmNoZWRcbisgKiBAYWNjZXB0X19pZ246IFRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgY2hhcmFjdGVycyB0byBzZWFyY2ggZm9yXG4rICpcbisgKiBSZXR1cm46XG4rICogKiBcdTAwM2U9MCAgICAgIC0gSW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBAc19faWduIHRoYXQgbWF0Y2hlcyBhbnlcbisgKiAgICAgICAgICAgICAgY2hhcmFjdGVyIGluIEBhY2NlcHRfX2lnblxuKyAqICogJS1FTk9FTlQgLSBObyBjaGFyYWN0ZXIgb2YgQGFjY2VwdF9faWduIGZvdW5kIGluIEBzX19pZ25cbisgKiAqICUtRUZBVUxUIC0gQ2Fubm90IHJlYWQgb25lIG9mIHRoZSBzdHJpbmdzXG4rICogKiAlLUUyQklHICAtIE9uZSBvZiB0aGUgc3RyaW5ncyBpcyB0b28gbGFyZ2VcbisgKiAqICUtRVJBTkdFIC0gT25lIG9mIHRoZSBzdHJpbmdzIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2VcbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbilcbit7XG4rXHRjaGFyIGNzLCBjYTtcbitcdGludCBpLCBqO1xuK1xuK1x0aWYgKCFjb3B5X2Zyb21fa2VybmVsX25vZmF1bHRfYWxsb3dlZChzX19pZ24sIDEpIHx8XG4rXHQgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKGFjY2VwdF9faWduLCAxKSkge1xuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdGd1YXJkKHBhZ2VmYXVsdCkoKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFhBVFRSX1NJWkVfTUFYOyBpKyspIHtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2Y3MsIHNfX2lnbiwgY2hhciwgZXJyX291dCk7XG4rXHRcdGlmIChjcyA9PSAnXFwwJylcbitcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgWEFUVFJfU0laRV9NQVg7IGorKykge1xuK1x0XHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmNhLCBhY2NlcHRfX2lnbiArIGosIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRcdGlmIChjYSA9PSAnXFwwJylcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGlmIChjcyA9PSBjYSlcbitcdFx0XHRcdHJldHVybiBpO1xuK1x0XHR9XG4rXHRcdGlmIChqID09IFhBVFRSX1NJWkVfTUFYKVxuK1x0XHRcdHJldHVybiAtRTJCSUc7XG4rXHRcdHNfX2lnbisrO1xuK1x0fVxuK1x0cmV0dXJuIC1FMkJJRztcbitlcnJfb3V0OlxuK1x0cmV0dXJuIC1FRkFVTFQ7XG4rfVxuK1xuKy8qKlxuKyAqIGJwZl9tZW1jbXAgLSBDb21wYXJlIHR3byBtZW1vcnkgcmVnaW9ucyBieXRlIGJ5IGJ5dGVcbisgKiBAcHRyMV9faWduOiBGaXJzdCBtZW1vcnkgcmVnaW9uXG4rICogQHB0cjJfX2lnbjogU2Vjb25kIG1lbW9yeSByZWdpb25cbisgKiBAc2l6ZTogTnVtYmVyIG9mIGJ5dGVzIHRvIGNvbXBhcmVcbisgKlxuKyAqIENvbXBhcmVzIHRoZSBmaXJzdCBAc2l6ZSBieXRlcyBvZiB0aGUgbWVtb3J5IGFyZWFzIEBwdHIxX19pZ24gYW5kXG4rICogQHB0cjJfX2lnbi4gVW5saWtlIGJwZl9zdHJjbXAsIG51bGwgYnl0ZXMgZG8gbm90IHRlcm1pbmF0ZSB0aGUgY29tcGFyaXNvbi5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqICUwICAgICAgIC0gVGhlIG1lbW9yeSByZWdpb25zIGFyZSBlcXVhbFxuKyAqICogJS0xICAgICAgLSBAcHRyMV9faWduIGlzIGxlc3MgdGhhbiBAcHRyMl9faWduXG4rICogKiAlMSAgICAgICAtIEBwdHIxX19pZ24gaXMgZ3JlYXRlciB0aGFuIEBwdHIyX19pZ25cbisgKiAqICUtRUZBVUxUIC0gQ2Fubm90IHJlYWQgb25lIG9mIHRoZSBtZW1vcnkgcmVnaW9uc1xuKyAqICogJS1FMkJJRyAgLSBAc2l6ZSBleGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgc2l6ZVxuKyAqICogJS1FUkFOR0UgLSBPbmUgb2YgdGhlIG1lbW9yeSByZWdpb25zIGlzIG91dHNpZGUgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2VcbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX21lbWNtcChjb25zdCB2b2lkICpwdHIxX19pZ24sIGNvbnN0IHZvaWQgKnB0cjJfX2lnbixcbitcdFx0XHQgICBzaXplX3Qgc2l6ZSlcbit7XG4rXHRjb25zdCBjaGFyICpwMSA9IHB0cjFfX2lnbiwgKnAyID0gcHRyMl9faWduO1xuK1x0Y2hhciBjMSwgYzI7XG4rXHRzaXplX3QgaTtcbitcbitcdGlmIChzaXplIFx1MDAzZSBYQVRUUl9TSVpFX01BWClcbitcdFx0cmV0dXJuIC1FMkJJRztcbitcdGlmICghY29weV9mcm9tX2tlcm5lbF9ub2ZhdWx0X2FsbG93ZWQocDEsIHNpemUpIHx8XG4rXHQgICAgIWNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdF9hbGxvd2VkKHAyLCBzaXplKSlcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRndWFyZChwYWdlZmF1bHQpKCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaXplOyBpKyspIHtcbitcdFx0X19nZXRfa2VybmVsX25vZmF1bHQoXHUwMDI2YzEsIHAxICsgaSwgY2hhciwgZXJyX291dCk7XG4rXHRcdF9fZ2V0X2tlcm5lbF9ub2ZhdWx0KFx1MDAyNmMyLCBwMiArIGksIGNoYXIsIGVycl9vdXQpO1xuK1x0XHRpZiAoYzEgIT0gYzIpXG4rXHRcdFx0cmV0dXJuIGMxIFx1MDAzYyBjMiA/IC0xIDogMTtcbitcdH1cbitcdHJldHVybiAwO1xuK2Vycl9vdXQ6XG4rXHRyZXR1cm4gLUVGQVVMVDtcbit9XG4rXG4gc3RhdGljIGludCBfX2JwZl9zdHJuc3RyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IGxlbixcbiBcdFx0XHQgYm9vbCBpZ25vcmVfY2FzZSlcbiB7XG5AQCAtNDg1MCw2ICs0OTUzLDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJsZW4pO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3Rybmxlbik7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJzcG4pO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY3Nwbik7XG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJwYnJrKTtcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX21lbWNtcCk7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJzdHIpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY2FzZXN0cik7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJuc3RyKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfc3VjY2Vzcy5jXG5pbmRleCBlMGQ2NzJkOTNhZGY4NS4uMDcxNTgxZmYwODMzZjMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX3N1Y2Nlc3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9zdWNjZXNzLmNcbkBAIC02MjQsNyArNjI0LDcgQEAgaW50IEJQRl9QUk9HKHRlc3RfZHlucHRyX3NrYl90cF9idGYsIHZvaWQgKnNrYiwgdm9pZCAqbG9jYXRpb24pXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgYnBmX21lbWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCB1MzIgc2l6ZSlcbitzdGF0aWMgaW5saW5lIGludCBsb2NhbF9tZW1jbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgdTMyIHNpemUpXG4ge1xuIFx0aW50IGk7XG4gXG5AQCAtNjUwLDEyICs2NTAsMTIgQEAgaW50IHRlc3RfZHlucHRyX2NvcHkodm9pZCAqY3R4KVxuIFx0ZXJyID0gYnBmX2R5bnB0cl93cml0ZShcdTAwMjZzcmMsIDAsIGRhdGEsIHN6LCAwKTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX2NvcHkoXHUwMDI2ZHN0LCAwLCBcdTAwMjZzcmMsIDAsIHN6KTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoYnVmLCBzeiwgXHUwMDI2ZHN0LCAwLCAwKTtcbi1cdGVyciA9IGVyciA/OiBicGZfbWVtY21wKGRhdGEsIGJ1Ziwgc3opO1xuK1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChkYXRhLCBidWYsIHN6KTtcbiBcbiBcdC8qIFRlc3QgdGhhdCBvZmZzZXRzIGFyZSBoYW5kbGVkIGNvcnJlY3RseSAqL1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfY29weShcdTAwMjZkc3QsIDMsIFx1MDAyNnNyYywgNSwgc3ogLSA1KTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoYnVmLCBzeiAtIDUsIFx1MDAyNmRzdCwgMywgMCk7XG4tXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcChkYXRhICsgNSwgYnVmLCBzeiAtIDUpO1xuK1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChkYXRhICsgNSwgYnVmLCBzeiAtIDUpO1xuIFxuIFx0YnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoXHUwMDI2c3JjLCAwKTtcbiBcdGJwZl9yaW5nYnVmX2Rpc2NhcmRfZHlucHRyKFx1MDAyNmRzdCwgMCk7XG5AQCAtNjkyLDcgKzY5Miw3IEBAIGludCB0ZXN0X2R5bnB0cl9jb3B5X3hkcChzdHJ1Y3QgeGRwX21kICp4ZHApXG4gXHRcdGVyciA9IGJwZl9keW5wdHJfcmVhZChcdTAwMjZidWYsIGxlbiwgXHUwMDI2cHRyX3hkcCwgaSAqIGxlbiwgMCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdGlmIChicGZfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxuK1x0XHRpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTcxMyw3ICs3MTMsNyBAQCBpbnQgdGVzdF9keW5wdHJfY29weV94ZHAoc3RydWN0IHhkcF9tZCAqeGRwKVxuIFx0XHRlcnIgPSBicGZfZHlucHRyX3JlYWQoXHUwMDI2YnVmLCBsZW4sIFx1MDAyNnB0cl9idWYsIGkgKiBsZW4sIDApO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRpZiAoYnBmX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcbitcdFx0aWYgKGxvY2FsX21lbWNtcChkYXRhLCBidWYsIGxlbikgIT0gMClcbiBcdFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbkBAIC03MjcsNyArNzI3LDcgQEAgaW50IHRlc3RfZHlucHRyX2NvcHlfeGRwKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdFx0ZXJyID0gYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgbGVuLCBcdTAwMjZwdHJfeGRwLCAyICsgaSAqIGxlbiwgMCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdGlmIChicGZfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxuK1x0XHRpZiAobG9jYWxfbWVtY21wKGRhdGEsIGJ1ZiwgbGVuKSAhPSAwKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTc1MCw3ICs3NTAsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X3plcm8odm9pZCAqY3R4KVxuIFxuIFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfemVyb19kYXRhLCBkYXRhX3N6LCAwLCBcdTAwMjZwdHIpO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KFx1MDAyNnB0ciwgMCwgZGF0YV9zeiwgMCk7XG4tXHRlcnIgPSBlcnIgPzogYnBmX21lbWNtcCh6ZXJvZXMsIG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3opO1xuK1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcCh6ZXJvZXMsIG1lbXNldF96ZXJvX2RhdGEsIGRhdGFfc3opO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTc3MCw3ICs3NzAsNyBAQCBpbnQgdGVzdF9keW5wdHJfbWVtc2V0X25vdHplcm8odm9pZCAqY3R4KVxuIFxuIFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfbm90emVyb19kYXRhLCBkYXRhX3N6LCAwLCBcdTAwMjZwdHIpO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KFx1MDAyNnB0ciwgMCwgZGF0YV9zeiwgRFlOUFRSX01FTVNFVF9WQUwpO1xuLVx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF9ub3R6ZXJvX2RhdGEsIGRhdGFfc3opO1xuK1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X25vdHplcm9fZGF0YSwgZGF0YV9zeik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNzg2LDcgKzc4Niw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfemVyb19vZmZzZXQodm9pZCAqY3R4KVxuIFxuIFx0ZXJyID0gYnBmX2R5bnB0cl9mcm9tX21lbShtZW1zZXRfemVyb19vZmZzZXRfZGF0YSwgZGF0YV9zeiwgMCwgXHUwMDI2cHRyKTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX21lbXNldChcdTAwMjZwdHIsIDgsIDQsIDApO1xuLVx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX29mZnNldF9kYXRhLCBkYXRhX3N6KTtcbitcdGVyciA9IGVyciA/OiBsb2NhbF9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX29mZnNldF9kYXRhLCBkYXRhX3N6KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC04MDMsNyArODAzLDcgQEAgaW50IHRlc3RfZHlucHRyX21lbXNldF96ZXJvX2FkanVzdGVkKHZvaWQgKmN0eClcbiBcdGVyciA9IGJwZl9keW5wdHJfZnJvbV9tZW0obWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeiwgMCwgXHUwMDI2cHRyKTtcbiBcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX2FkanVzdChcdTAwMjZwdHIsIDQsIDgpO1xuIFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfbWVtc2V0KFx1MDAyNnB0ciwgMCwgYnBmX2R5bnB0cl9zaXplKFx1MDAyNnB0ciksIDApO1xuLVx0ZXJyID0gZXJyID86IGJwZl9tZW1jbXAoZXhwZWN0ZWQsIG1lbXNldF96ZXJvX2FkanVzdGVkX2RhdGEsIGRhdGFfc3opO1xuK1x0ZXJyID0gZXJyID86IGxvY2FsX21lbWNtcChleHBlY3RlZCwgbWVtc2V0X3plcm9fYWRqdXN0ZWRfZGF0YSwgZGF0YV9zeik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtODk4LDcgKzg5OCw3IEBAIGludCB0ZXN0X2R5bnB0cl9tZW1zZXRfeGRwX2NodW5rcyhzdHJ1Y3QgeGRwX21kICp4ZHApXG4gXHRcdGVyciA9IGJwZl9keW5wdHJfcmVhZChcdTAwMjZidWYsIGNodW5rX3N6LCBcdTAwMjZwdHJfeGRwLCBvZmZzZXQsIDApO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRlcnIgPSBicGZfbWVtY21wKGJ1ZiwgZXhwZWN0ZWRfYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRcdGVyciA9IGxvY2FsX21lbWNtcChidWYsIGV4cGVjdGVkX2J1Ziwgc2l6ZW9mKGJ1ZikpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTk1Miw3ICs5NTIsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmUodm9pZCAqcHRyLCBicGZfcmVhZF9keW5wdHJfZm5fdCBicFxuIFx0XHRcdGJyZWFrO1xuIFx0XHRlcnIgPSBlcnIgPzogYnBmX2R5bnB0cl9yZWFkKFx1MDAyNmJ1ZiwgbGVuLCBcdTAwMjZwdHJfYnVmLCAwLCAwKTtcbiBcbi1cdFx0aWYgKGVyciB8fCBicGZfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4pKVxuK1x0XHRpZiAoZXJyIHx8IGxvY2FsX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSlcbiBcdFx0XHRlcnIgPSAxO1xuIFxuIFx0XHQvKiBSZXNldCBidWZmZXIgYW5kIGR5bnB0ciAqL1xuQEAgLTk4Niw3ICs5ODYsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfc3RyKHZvaWQgKnB0cixcbiBcdFx0ZXJyID0gZXJyID86IGJwZl9keW5wdHJfcmVhZChcdTAwMjZidWYsIGxlbiwgXHUwMDI2cHRyX2J1ZiwgMCwgMCk7XG4gXHRcdGlmICghbGVuKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoZXJyIHx8IGJwZl9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAnXFwwJylcbitcdFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbiAtIDEpIHx8IGJ1ZltsZW4gLSAxXSAhPSAnXFwwJylcbiBcdFx0XHRlcnIgPSAxO1xuIFx0fVxuIFx0YnBmX3JpbmdidWZfZGlzY2FyZF9keW5wdHIoXHUwMDI2cHRyX2J1ZiwgMCk7XG5AQCAtMTAxMiw3ICsxMDEyLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHRlc3RfZHlucHRyX3Byb2JlX3hkcChzdHJ1Y3QgeGRwX21kICp4ZHAsIHZvaWQgKnB0cixcbiBcdFx0aWYgKGxlbiBcdTAwM2Ugc2l6ZW9mKGJ1ZikpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGVyciA9IGVyciA/OiBicGZfZHlucHRyX3JlYWQoXHUwMDI2YnVmLCBsZW4sIFx1MDAyNnB0cl94ZHAsIG9mZiwgMCk7XG4tXHRcdGlmIChlcnIgfHwgYnBmX21lbWNtcChleHBlY3RlZF9zdHIsIGJ1ZiwgbGVuKSlcbitcdFx0aWYgKGVyciB8fCBsb2NhbF9tZW1jbXAoZXhwZWN0ZWRfc3RyLCBidWYsIGxlbikpXG4gXHRcdFx0ZXJyID0gMTtcbiBcdFx0LyogUmVzZXQgYnVmZmVyIGFuZCBkeW5wdHIgKi9cbiBcdFx0X19idWlsdGluX21lbXNldChidWYsIDAsIHNpemVvZihidWYpKTtcbkBAIC0xMDQ4LDcgKzEwNDgsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdGVzdF9keW5wdHJfcHJvYmVfc3RyX3hkcChzdHJ1Y3QgeGRwX21kICp4ZHAsIHZvaWQgKlxuIFxuIFx0XHRpZiAoIWxlbilcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKGVyciB8fCBicGZfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4gLSAxKSB8fCBidWZbbGVuIC0gMV0gIT0gJ1xcMCcpXG4rXHRcdGlmIChlcnIgfHwgbG9jYWxfbWVtY21wKGV4cGVjdGVkX3N0ciwgYnVmLCBsZW4gLSAxKSB8fCBidWZbbGVuIC0gMV0gIT0gJ1xcMCcpXG4gXHRcdFx0ZXJyID0gMTtcbiBcbiBcdFx0X19idWlsdGluX21lbXNldChidWYsIDAsIHNpemVvZihidWYpKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuY1xuaW5kZXggYmRkYzRlODU3OWQyNDQuLmU2N2ZlOTcwMGU1OTNjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuY1xuQEAgLTksNiArOSwxMCBAQFxuIGNoYXIgKnVzZXJfcHRyID0gKGNoYXIgKikxO1xuIGNoYXIgKmludmFsaWRfa2Vybl9wdHIgPSAoY2hhciAqKS0xO1xuIFxuK2V4dGVybiBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbikgX19rc3ltO1xuK2V4dGVybiBpbnQgYnBmX21lbWNtcChjb25zdCB2b2lkICpwdHIxX19pZ24sIGNvbnN0IHZvaWQgKnB0cjJfX2lnbixcbitcdFx0ICAgICAgc2l6ZV90IHNpemUpIF9fa3N5bTtcbitcbiAvKlxuICAqIFdoZW4gcGFzc2luZyB1c2Vyc3BhY2UgcG9pbnRlcnMsIHRoZSBlcnJvciBjb2RlIGRpZmZlcnMgYmFzZWQgb24gYXJjaDpcbiAgKiAgIC1FUkFOR0Ugb24gYXJjaGVzIHdpdGggbm9uLW92ZXJsYXBwaW5nIGFkZHJlc3Mgc3BhY2VzXG5AQCAtNTMsNiArNTcsMTAgQEAgU0VDKFwic3lzY2FsbFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5zdHJfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVyblxuIFNFQyhcInN5c2NhbGxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJuc3RyX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5zdHIoXCJoZWxsb1wiLCBOVUxMLCAxKTsgfVxuIFNFQyhcInN5c2NhbGxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJuY2FzZXN0cl9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihOVUxMLCBcImhlbGxvXCIsIDEpOyB9XG4gU0VDKFwic3lzY2FsbFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5jYXNlc3RyX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFwiaGVsbG9cIiwgTlVMTCwgMSk7IH1cbitTRUMoXCJzeXNjYWxsXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3RfbWVtY21wX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChOVUxMLCBcInhcIiwgMSk7IH1cbitTRUMoXCJzeXNjYWxsXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3RfbWVtY21wX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChcInhcIiwgTlVMTCwgMSk7IH1cbitTRUMoXCJzeXNjYWxsXCIpICBfX3JldHZhbChVU0VSX1BUUl9FUlIpaW50IHRlc3Rfc3RycGJya19udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKE5VTEwsIFwieFwiKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJwYnJrX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXCJ4XCIsIE5VTEwpOyB9XG4gXG4gLyogUGFzc2luZyB1c2Vyc3BhY2UgcHRyIHRvIHN0cmluZyBrZnVuY3MgKi9cbiBTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RyY21wX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjbXAodXNlcl9wdHIsIFwiaGVsbG9cIik7IH1cbkBAIC03OSw2ICs4NywxMCBAQCBTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybnN0cl91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJlXG4gU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cm5zdHJfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5zdHIoXCJoZWxsb1wiLCB1c2VyX3B0ciwgMSk7IH1cbiBTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKHVzZXJfcHRyLCBcImhlbGxvXCIsIDEpOyB9XG4gU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cm5jYXNlc3RyX3VzZXJfcHRyMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihcImhlbGxvXCIsIHVzZXJfcHRyLCAxKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9tZW1jbXBfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcCh1c2VyX3B0ciwgXCJ4XCIsIDEpOyB9XG4rU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X21lbWNtcF91c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKFwieFwiLCB1c2VyX3B0ciwgMSk7IH1cbitTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RycGJya191c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayh1c2VyX3B0ciwgXCJ4XCIpOyB9XG4rU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cnBicmtfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXCJ4XCIsIHVzZXJfcHRyKTsgfVxuIFxuICNlbmRpZiAvKiBfX1RBUkdFVF9BUkNIX3MzOTAgKi9cbiBcbkBAIC0xMDcsNSArMTE5LDkgQEAgU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJuc3RyX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVyblxuIFNFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RybnN0cl9wYWdlZmF1bHQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5zdHIoXCJoZWxsb1wiLCBpbnZhbGlkX2tlcm5fcHRyLCAxKTsgfVxuIFNFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihpbnZhbGlkX2tlcm5fcHRyLCBcImhlbGxvXCIsIDEpOyB9XG4gU0VDKFwic3lzY2FsbFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9wYWdlZmF1bHQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFwiaGVsbG9cIiwgaW52YWxpZF9rZXJuX3B0ciwgMSk7IH1cbitTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X21lbWNtcF9wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChpbnZhbGlkX2tlcm5fcHRyLCBcInhcIiwgMSk7IH1cbitTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X21lbWNtcF9wYWdlZmF1bHQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChcInhcIiwgaW52YWxpZF9rZXJuX3B0ciwgMSk7IH1cbitTRUMoXCJzeXNjYWxsXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cnBicmtfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKGludmFsaWRfa2Vybl9wdHIsIFwieFwiKTsgfVxuK1NFQyhcInN5c2NhbGxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RycGJya19wYWdlZmF1bHQyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoXCJ4XCIsIGludmFsaWRfa2Vybl9wdHIpOyB9XG4gXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuY1xuaW5kZXggZjY1YjEyMjZhODFhMzcuLmU2N2I4MGFiM2NkMmM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmNcbkBAIC03LDYgKzcsMTAgQEBcbiBcbiBjaGFyIHN0cltdID0gXCJoZWxsbyB3b3JsZFwiO1xuIFxuK2V4dGVybiBpbnQgYnBmX3N0cnBicmsoY29uc3QgY2hhciAqc19faWduLCBjb25zdCBjaGFyICphY2NlcHRfX2lnbikgX19rc3ltO1xuK2V4dGVybiBpbnQgYnBmX21lbWNtcChjb25zdCB2b2lkICpwdHIxX19pZ24sIGNvbnN0IHZvaWQgKnB0cjJfX2lnbixcbitcdFx0ICAgICAgc2l6ZV90IHNpemUpIF9fa3N5bTtcbitcbiAjZGVmaW5lIF9fdGVzdChyZXR2YWwpIFNFQyhcInN5c2NhbGxcIikgX19zdWNjZXNzIF9fcmV0dmFsKHJldHZhbClcbiBcbiAvKiBGdW5jdGlvbmFsIHRlc3RzICovXG5AQCAtNjAsNCArNjQsMjUgQEAgX190ZXN0KC1FTk9FTlQpIGludCB0ZXN0X3N0cm5jYXNlc3RyX25vdGZvdW5kMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXNcbiBfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RybmNhc2VzdHJfbm90Zm91bmQzKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFwiXCIsIFwiYVwiLCAwKTsgfVxuIF9fdGVzdCgwKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl9lbXB0eSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJuY2FzZXN0cihzdHIsIFwiXCIsIDEpOyB9XG4gXG4rLyogYnBmX3N0cnBicmsgLSBmdW5jdGlvbmFsIHRlc3RzICovXG4rX190ZXN0KDApIGludCB0ZXN0X3N0cnBicmtfZm91bmRfZmlyc3Qodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFwiaFwiKTsgfVxuK19fdGVzdCg0KSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX21pZGRsZSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXCJvd1wiKTsgfVxuK19fdGVzdCg2KSBpbnQgdGVzdF9zdHJwYnJrX2ZvdW5kX211bHRpcGxlKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cnBicmsoc3RyLCBcIndcIik7IH1cbitfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RycGJya19ub3Rmb3VuZCh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJwYnJrKHN0ciwgXCJ4eXpcIik7IH1cbitfX3Rlc3QoLUVOT0VOVCkgaW50IHRlc3Rfc3RycGJya19lbXB0eV9hY2NlcHQodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RycGJyayhzdHIsIFwiXCIpOyB9XG4rXG4rLyogYnBmX21lbWNtcCAtIGZ1bmN0aW9uYWwgdGVzdHMgKi9cbitjaGFyIGRhdGExW10gPSBcImhlbGxvIHdvcmxkXCI7XG4rY2hhciBkYXRhMltdID0gXCJoZWxsbyB3b3JsZFwiO1xuK2NoYXIgZGF0YTNbXSA9IFwiaGVsbG8gd29ybGVcIjtcbitfX3Rlc3QoMCkgaW50IHRlc3RfbWVtY21wX2VxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMSwgZGF0YTIsIHNpemVvZihkYXRhMSkpOyB9XG4rX190ZXN0KC0xKSBpbnQgdGVzdF9tZW1jbXBfbmVxX2xlc3Modm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGRhdGExLCBkYXRhMywgc2l6ZW9mKGRhdGExKSk7IH1cbitfX3Rlc3QoMSkgaW50IHRlc3RfbWVtY21wX25lcV9ncmVhdGVyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChkYXRhMywgZGF0YTEsIHNpemVvZihkYXRhMSkpOyB9XG4rX190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9zaXplX3plcm8odm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGRhdGExLCBkYXRhMywgMCk7IH1cbisvKiBtZW1jbXAgc2hvdWxkIE5PVCBzdG9wIGF0IG51bGwgYnl0ZSAtIGNvbXBhcmUgcGFzdCAnXFwwJyAqL1xuK2NoYXIgYmluMVtdID0geyAnYScsICdcXDAnLCAnYycgfTtcbitjaGFyIGJpbjJbXSA9IHsgJ2EnLCAnXFwwJywgJ2QnIH07XG4rX190ZXN0KDApIGludCB0ZXN0X21lbWNtcF9udWxsX2J5dGVfZXEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfbWVtY21wKGJpbjEsIGJpbjEsIHNpemVvZihiaW4xKSk7IH1cbitfX3Rlc3QoLTEpIGludCB0ZXN0X21lbWNtcF9udWxsX2J5dGVfbmVxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX21lbWNtcChiaW4xLCBiaW4yLCBzaXplb2YoYmluMSkpOyB9XG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDM6MzQ6MzcuNDk0MDA5NTQ5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA5MDAxNDIyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgS2Z1bmMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyB0d28gbmV3IEJQRiBrZnVuY3M6IGBicGZfc3RycGJya2AgYW5kIGBicGZfbWVtY21wYC4gSSBzZWUgdGhhdCB0aGV5J3JlIGltcGxlbWVudGVkIGluIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AgYW5kIHJlZ2lzdGVyZWQgdXNpbmcgYEJURl9JRF9GTEFHU2AuIEdvb2QsIHN0YW5kYXJkIHByYWN0aWNlIHRoZXJlLiBJIGFsc28gc2VlIHRoYXQgdGhlcmUncyBiZWVuIHNvbWUgcmVuYW1pbmcgb2YgYW4gZXhpc3RpbmcgYGJwZl9tZW1jbXBgIHRvIGBsb2NhbF9tZW1jbXBgIGluIGBkeW5wdHJfc3VjY2Vzcy5jYCB0byBhdm9pZCBhIG5hbWUgY29sbGlzaW9uLiBUaGF0J3MgcHJ1ZGVudDsgaXQgYXZvaWRzIHBvdGVudGlhbCBoZWFkYWNoZXMgbGF0ZXIuIEFuZCBpdCBsb29rcyBsaWtlIHByb3BlciB0ZXN0IGNvdmVyYWdlIGhhcyBiZWVuIGFkZGVkLiBUaGVyZSBhcmUgZmFpbHVyZSBjYXNlcyBpbiBgc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jYCBhbmQgc3VjY2VzcyBjYXNlcyBpbiBgc3RyaW5nX2tmdW5jc19zdWNjZXNzLmNgLiBOaWNlLlxuXG5UaGUgZmFjdCB0aGF0IHRoaXMgYWRkcyBuZXcsIGNhbGxhYmxlIGtmdW5jcyBtZWFucyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEJQRiBpbmZyYXN0cnVjdHVyZSwgYW5kIEkgbmVlZCB0byB0cmVhdCBpdCBhcyBzdWNoLiBUaGlzIHNjcmVhbXMgXCJmdXp6aW5nIGNhbmRpZGF0ZS5cIiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBuZXcgZnVuY3Rpb25zIGFyZSByb2J1c3QuXG5cbkxldCdzIGRpdmUgaW50byBga2VybmVsL2JwZi9oZWxwZXJzLmNgIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb3IgYW55dGhpbmcgdW5leHBlY3RlZC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCBmb3IgYGJwZl9zdHJwYnJrYCBhbmQgYGJwZl9tZW1jbXBgIHdpdGhpbiB0aGF0IGZpbGUgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhlaXIgaW5jbHVzaW9uIGFuZCBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgSSBtYXkgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDAzOjM0OjQ1LjU4NDAyNjQ0OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTE2MzMxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc3RycGJya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuYz0zOTQzPV9fYnBmX2tmdW5jIGludCBicGZfc3RyY3Nwbihjb25zdCBjaGFyICpzX19pZ24sIGNvbnN0IGNoYXIgKnJlamVjdF9faWduKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzk5MS0vKipcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozOTkyOiAqIGJwZl9zdHJwYnJrIC0gRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHNldCBvZiBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzk5My0gKiBAc19faWduOiBUaGUgc3RyaW5nIHRvIGJlIHNlYXJjaGVkXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MDAzLSAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQwMDQ6X19icGZfa2Z1bmMgaW50IGJwZl9zdHJwYnJrKGNvbnN0IGNoYXIgKnNfX2lnbiwgY29uc3QgY2hhciAqYWNjZXB0X19pZ24pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDAwNS17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTU1PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc3RyY3Nwbik7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDk1NjpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cnBicmspO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NTctQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9tZW1jbXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwMzozNDo0NS42NzMxOTQyMDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDgwODU2Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdDpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIEtlcm5lbCBCUEYgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyB0byBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggYGtlcm5lbC9icGYvaGVscGVycy5jYC4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucy4gQlBGLCB0aGUgQmVya2VsZXkgUGFja2V0IEZpbHRlciwgaXMgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgbW9kZXJuIExpbnV4IHN5c3RlbXMsIGFsbG93aW5nIGZvciBpbi1rZXJuZWwgZXhlY3V0aW9uIG9mIGJ5dGVjb2RlLiBJdCdzIHVzZWQgZm9yIGV2ZXJ5dGhpbmcgZnJvbSBuZXR3b3JrIGZpbHRlcmluZyBhbmQgc2VjdXJpdHkgbW9uaXRvcmluZyB0byB0cmFjaW5nIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcy4gYGhlbHBlcnMuY2AgaXMgbGlrZWx5IHdoZXJlIHRoZSBCUEYgaGVscGVyIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQsIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb25zIHRoYXQgQlBGIHByb2dyYW1zIGNhbGwgdG8gaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBrbm93IGEgZmFpciBiaXQgYWJvdXQgaG93IHRoaXMgd29ya3MsIGFuZCBoYXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYW5kIHBlcmZvcm1hbmNlIHRyYWRlLW9mZnMuXG5cbkknZCB3YW50IHRvIGV4YW1pbmUgYW55IGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCBpbmZsdWVuY2UgaG93IHRoZXNlIGhlbHBlcnMgYXJlIGNvbXBpbGVkLCBlbmFibGVkLCBvciBleHBvc2VkLiBTcGVjaWZpY2FsbHksIEknZCBpbW1lZGlhdGVseSBiZSBsb29raW5nIGZvcjpcblxuKiAgICoqQ29tcGlsZXIgRmxhZ3MqKjogSG93IHRoZSBjb2RlIGlzIGNvbXBpbGVkLiBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbiBmbGFncyB0aGF0IGNvdWxkIGFmZmVjdCBwZXJmb3JtYW5jZSBvciBjb2RlIHNpemU/IEFyZSB0aGVyZSBzZWN1cml0eSBoYXJkZW5pbmcgb3B0aW9ucyBiZWluZyB1c2VkLCBzdWNoIGFzIGAtZnN0YWNrLXByb3RlY3RvcmA/IEFyZSB0aGVyZSBjb21waWxlciBmbGFncyBzcGVjaWZpY2FsbHkgZm9yIEJQRiwgbGlrZSB0aG9zZSBjb250cm9sbGluZyB2ZXJpZmllciBiZWhhdmlvciBvciBkZWJ1Z2dpbmcgb3V0cHV0P1xuKiAgICoqS2NvbmZpZyBPcHRpb25zKio6IFRoZSBLY29uZmlnIGZpbGUgKGxpa2VseSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkgb3IgYSBwYXJlbnQgb25lKSB3b3VsZCBiZSBteSBuZXh0IHN0b3AuIEl0IGRpY3RhdGVzIHdoYXQgZmVhdHVyZXMgYXJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gV2hhdCBLY29uZmlnIG9wdGlvbnMgZW5hYmxlIG9yIGRpc2FibGUgQlBGIGZ1bmN0aW9uYWxpdHkgb3IgaGVscGVyIGZ1bmN0aW9ucz8gV2hhdCBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzIGFuZCB3aGF0IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgbWlnaHQgYWZmZWN0IGhvdyB0aGUgaGVscGVycyBhcmUgdXNlZD9cbiogICAqKk1vZHVsZSBDb25maWd1cmF0aW9uKio6IElmIHRoZSBoZWxwZXJzIGFyZSBjb21waWxlZCBhcyBhIG1vZHVsZSwgd2hhdCBhcmUgdGhlIHJlbGV2YW50IG1vZHVsZSBwYXJhbWV0ZXJzPyBIb3cgYXJlIHRoZXkgbG9hZGVkIGFuZCB1bmxvYWRlZD8gV2hhdCdzIHRoZSBtb2R1bGUncyBkZXBlbmRlbmNpZXMsIGlmIGFueSwgdGhhdCB3b3VsZCBpbmZsdWVuY2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGhlbHBlciBmdW5jdGlvbnM/XG4qICAgKipTZWN1cml0eSBNZWNoYW5pc21zKio6IEFyZSB0aGVyZSBhbnkgc2VjdXJpdHktcmVsYXRlZCBLY29uZmlnIG9wdGlvbnMgdGhhdCByZXN0cmljdCB0aGUgY2FwYWJpbGl0aWVzIG9mIEJQRiBwcm9ncmFtcyBvciB0aGUgaGVscGVyIGZ1bmN0aW9ucz8gSXMgdGhlIEJQRiB2ZXJpZmllciBlbmFibGVkIGFuZCBjb25maWd1cmVkIHNlY3VyZWx5PyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHNldHRpbmdzIGZvciB0aGUgdXNlIG9mIEJQRiBpbiBzcGVjaWZpYyBjb250ZXh0cywgc3VjaCBhcyBjb250YWluZXIgZW52aXJvbm1lbnRzP1xuKiAgICoqQnVpbGQgU3lzdGVtIFNldHRpbmdzKio6IEhvdyBkb2VzIHRoZSBidWlsZCBzeXN0ZW0gKGUuZy4sIGBtYWtlYCkgaGFuZGxlIHRoZSBjb21waWxhdGlvbiBhbmQgbGlua2luZyBvZiB0aGlzIGNvZGU/IEFyZSB0aGVyZSBhbnkgc3BlY2lhbCB0YXJnZXRzIG9yIHJ1bGVzIGZvciBCUEYtcmVsYXRlZCBjb2RlPyBBcmUgdGhlcmUgYW55IGVudmlyb25tZW50IHZhcmlhYmxlcyBvciBvdGhlciBzZXR0aW5ncyB0aGF0IGNvdWxkIGFmZmVjdCBob3cgaXQncyBidWlsdCBvciBjb25maWd1cmVkP1xuKiAgICoqRG9jdW1lbnRhdGlvbioqOiBPZiBjb3Vyc2UsIGFueSBkb2N1bWVudGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNwZWNpZmljIGZpbGUgb3IgdGhlIEJQRiBzeXN0ZW0gd291bGQgYmUgaGVscGZ1bCB0byB1bmRlcnN0YW5kIGFueSBjYXZlYXRzIG9yIGFzc3VtcHRpb25zIHJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbnMuXG5cbkVzc2VudGlhbGx5LCBJIHdhbnQgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYW5kIHRoZSBwb3RlbnRpYWwgaW5mbHVlbmNlIG9uIHRoZSBiZWhhdmlvciBvZiBgaGVscGVycy5jYCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIHRyb3VibGVzaG9vdGluZywgdW5kZXJzdGFuZGluZyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIGFuZCBvcHRpbWl6aW5nIHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTg3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDM6MzQ6NTAuNzU0MDU1OTM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MDkwMTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmM9Mjc2PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X2N1cnJlbnRfY29tbV9wcm90byA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI4My1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyODQ6I2lmIGRlZmluZWQoQ09ORklHX1FVRVVFRF9TUElOTE9DS1MpIHx8IGRlZmluZWQoQ09ORklHX0JQRl9BUkNIX1NQSU5MT0NLKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI4NS1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTM5OT1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2ppZmZpZXM2NF9wcm90byA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQwNC1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MDU6I2lmZGVmIENPTkZJR19DR1JPVVBTXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDA2LUJQRl9DQUxMXzAoYnBmX2dldF9jdXJyZW50X2Nncm91cF9pZClcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQ0MD1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9jdXJyZW50X2FuY2VzdG9yX2Nncm91cF9pZF9wcm90byA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0NS19O1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0NjojZW5kaWYgLyogQ09ORklHX0NHUk9VUFMgKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDctXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz03NDQ9c3RhdGljIGludCBicGZfdHJhY2VfY29weV9zdHJpbmcoY2hhciAqYnVmLCB2b2lkICp1bnNhZmVfcHRyLCBjaGFyIGZtdF9wdHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTc1Mi1cXHRjYXNlICdzJzpcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo3NTM6I2lmZGVmIENPTkZJR19BUkNIX0hBU19OT05fT1ZFUkxBUFBJTkdfQUREUkVTU19TUEFDRVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTc1NC1cXHRcXHRpZiAoKHVuc2lnbmVkIGxvbmcpdW5zYWZlX3B0ciBcXHUwMDNjIFRBU0tfU0laRSlcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTIwNjc9YnBmX2Jhc2VfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTIxNjctXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZHlucHRyX2RhdGFfcHJvdG87XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjE2ODojaWZkZWYgQ09ORklHX0NHUk9VUFNcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMTY5LVxcdGNhc2UgQlBGX0ZVTkNfY2dycF9zdG9yYWdlX2dldDpcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTIxNzktI2VuZGlmXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjE4MDojaWZkZWYgQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRFxcbmtlcm5lbC9icGYvaGVscGVycy5jLTIxODEtXFx0Y2FzZSBCUEZfRlVOQ19nZXRfY2dyb3VwX2NsYXNzaWQ6XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yNzUzPUNGSV9OT1NFQUwoYnBmX3Rhc2tfcmVsZWFzZV9kdG9yKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNzU0LVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjI3NTU6I2lmZGVmIENPTkZJR19DR1JPVVBTXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjc1Ni0vKipcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTI4NzY9YnBmX3Rhc2tfZ2V0X2Nncm91cDEoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgaGllcmFyY2h5X2lkKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjg4My19XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6Mjg4NDojZW5kaWYgLyogQ09ORklHX0NHUk9VUFMgKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yODg1LVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MzI4OT1fX2JwZl9rZnVuYyB2b2lkIGJwZl90aHJvdyh1NjQgY29va2llKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzI5OC1cXHRXQVJOX09OX09OQ0UoIWN0eC5jbnQpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjMyOTk6XFx0LyogUHJldmVudCBLQVNBTiBmYWxzZSBwb3NpdGl2ZXMgZm9yIENPTkZJR19LQVNBTl9TVEFDSyBieSB1bnBvaXNvbmluZ1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTMzMDAtXFx0ICogZGVlcGVyIHN0YWNrIGRlcHRocyB0aGFuIGN0eC5zcCBhcyB3ZSBkbyBub3QgcmV0dXJuIGZyb20gYnBmX3Rocm93LFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDE5Nj1fX2JwZl9rZnVuYyBpbnQgYnBmX3N0cm5jYXNlc3RyKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24sXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MjAxLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQyMDI6I2lmZGVmIENPTkZJR19LRVlTXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDIwMy0vKipcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQzMjA9X19icGZfa2Z1bmMgaW50IGJwZl92ZXJpZnlfcGtjczdfc2lnbmF0dXJlKHN0cnVjdCBicGZfZHlucHRyICpkYXRhX3AsXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MzIzLXtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzI0OiNpZmRlZiBDT05GSUdfU1lTVEVNX0RBVEFfVkVSSUZJQ0FUSU9OXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDMyNS1cXHRzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkYXRhX3B0ciA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopZGF0YV9wO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDM2MC1cXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDM2MTojZW5kaWYgLyogQ09ORklHX1NZU1RFTV9EQVRBX1ZFUklGSUNBVElPTiAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQzNjItfVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQzNjM6I2VuZGlmIC8qIENPTkZJR19LRVlTICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDM2NC1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4MDY9QlRGX0tGVU5DU19TVEFSVChnZW5lcmljX2J0Zl9pZHMpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDgwNzojaWZkZWYgQ09ORklHX0NSQVNIX0RVTVBcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODA4LUJURl9JRF9GTEFHUyhmdW5jLCBjcmFzaF9rZXhlYywgS0ZfREVTVFJVQ1RJVkUpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODM2PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmJ0cmVlX3JpZ2h0LCBLRl9SRVRfTlVMTClcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODM3LVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4Mzg6I2lmZGVmIENPTkZJR19DR1JPVVBTXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDgzOS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2Nncm91cF9hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkNVIHwgS0ZfUkVUX05VTEwpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODQ4PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGhyb3cpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDg0OTojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODUwLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfc2VuZF9zaWduYWxfdGFzaylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODUxLSNlbmRpZlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4NTI6I2lmZGVmIENPTkZJR19LRVlTXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDg1My1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2xvb2t1cF91c2VyX2tleSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfU0xFRVBBQkxFKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDg1NT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2tleV9wdXQsIEtGX1JFTEVBU0UpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDg1NjojaWZkZWYgQ09ORklHX1NZU1RFTV9EQVRBX1ZFUklGSUNBVElPTlxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4NTctQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl92ZXJpZnlfcGtjczdfc2lnbmF0dXJlLCBLRl9TTEVFUEFCTEUpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODU5LSNlbmRpZlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4NjA6I2lmZGVmIENPTkZJR19TMzkwXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDg2MS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2dldF9sb3djb3JlKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDg3Mz1CVEZfSUQoZnVuYywgYnBmX3Rhc2tfcmVsZWFzZV9kdG9yKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4NzQ6I2lmZGVmIENPTkZJR19DR1JPVVBTXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDg3NS1CVEZfSUQoc3RydWN0LCBjZ3JvdXApXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODkxPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl90YXNrX3ZtYV9kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDg5MjojaWZkZWYgQ09ORklHX0NHUk9VUFNcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODkzLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9jc3NfdGFza19uZXcsIEtGX0lURVJfTkVXKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDkwOT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2R5bnB0cl9tZW1zZXQpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDkxMDojaWZkZWYgQ09ORklHX05FVFxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MTEtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9tb2RpZnlfcmV0dXJuX3Rlc3RfdHApXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTI4PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbG9jYWxfaXJxX3Jlc3RvcmUpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDkyOTojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTMwLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfcHJvYmVfcmVhZF91c2VyX2R5bnB0cilcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQ5Mzc9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cl9keW5wdHIsIEtGX1NMRUVQQUJMRSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTM4LSNlbmRpZlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5Mzk6I2lmZGVmIENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUlxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NDAtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2RtYWJ1Zl9uZXcsIEtGX0lURVJfTkVXIHwgS0ZfU0xFRVBBQkxFKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk2MT1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cm5jYXNlc3RyKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTYyOiNpZiBkZWZpbmVkKENPTkZJR19CUEZfTFNNKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19DR1JPVVBTKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NjMtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jZ3JvdXBfcmVhZF94YXR0ciwgS0ZfUkNVKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk3OT1zdGF0aWMgaW50IF9faW5pdCBrZnVuY19pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTg2LVxcdFxcdH0sXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDk4NzojaWZkZWYgQ09ORklHX0NHUk9VUFNcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTg4LVxcdFxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDM6MzQ6NTAuODEwMTUzNTYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyMzIxMDU4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgTmV3IEJQRiBLZnVuY3MgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIG5ldyBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAga2Z1bmNzIGFyZSBiZWluZyBhZGRlZCB0byB0aGUgZ2VuZXJpYyBCVEYga2Z1bmNzLCB3aGljaCBtZWFucyB0aGV5J3JlIGF1dG9tYXRpY2FsbHkgYXZhaWxhYmxlIGlmIEJQRiBpcyBlbmFibGVkLiBObyBzcGVjaWZpYyBjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgYmV5b25kIHRoZSBzdGFuZGFyZCBCUEYgY29uZmlndXJhdGlvbnMsIHdoaWNoIGlzIGFzIGV4cGVjdGVkLlxuXG5NeSBmb2N1cyBpcyBuYXR1cmFsbHkgb24gdGhlc2UgdHdvIGZ1bmN0aW9uczogYGJwZl9zdHJwYnJrYCBhbmQgYGJwZl9tZW1jbXBgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXkncmUgcm9idXN0LiBUaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIHRoZXNlIGZ1bmN0aW9ucyB3aXRoaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgb2YgQlBGIGhlbHBlciBmdW5jdGlvbmFsaXR5LiBJdCdzIGFsc28gcmVuYW1pbmcgYGJwZl9tZW1jbXBgIHRvIGBsb2NhbF9tZW1jbXBgIGluIGEgdGVzdCBmaWxlLCBzbyBJIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhhdCByZW5hbWUgaW4gbXkgYW5hbHlzaXMuIEFkZGl0aW9uYWxseSwgdGhlcmUgYXJlIG5ldyB0ZXN0cyBhZGRlZCBpbiBgc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jYCBhbmQgYHN0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jYCwgc28gSSBuZWVkIHRvIGNoZWNrIHRob3NlIHRvby5cblxuRnVuY3Rpb25hbGx5LCB0aGVzZSBhZGRpdGlvbnMgZW5hYmxlIHN0cmluZyBhbmQgbWVtb3J5IGNvbXBhcmlzb25zIGRpcmVjdGx5IHdpdGhpbiBCUEYgcHJvZ3JhbXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGVzcGVjaWFsbHkgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgaW52b2x2ZSBtZW1vcnkgYWNjZXNzLiBUaGV5IGFyZSBwb3RlbnRpYWwgcG9pbnRzIG9mIHZ1bG5lcmFiaWxpdHkgdGhhdCBuZWVkIHJpZ29yb3VzIHRlc3RpbmcgdG8gcHJldmVudCBwYWdlIGZhdWx0cyBvciBvdGhlciBtZW1vcnktcmVsYXRlZCBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgdGhlIG91dHB1dCBJJ20gZ2VuZXJhdGluZyBmb3IgZnV6emluZyB3aWxsIGJlOlxuXG4qICAgKipXb3J0aEZ1enppbmc6IHRydWUqKiAtIERlZmluaXRlbHksIHRoZXNlIGFyZSBuZXcgY29yZSBmdW5jdGlvbnMuXG4qICAgKipGb2N1c1N5bWJvbHM6IFtcImJwZl9zdHJwYnJrXCIsIFwiYnBmX21lbWNtcFwiXSoqIC0gVGhlc2UgYXJlIHRoZSB0d28gZnVuY3Rpb25zIHRoYXQgbmVlZCB0aGUgbW9zdCBhdHRlbnRpb24uXG4qICAgKipFbmFibGVDb25maWdzOiBbXSoqIC0gTm8gYWRkaXRpb25hbCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQuXG4qICAgKipSZWFzb25pbmc6IFwiVGhlIHBhdGNoIGFkZHMgdHdvIG5ldyBCUEYga2Z1bmNzLCBgYnBmX3N0cnBicmtgIGFuZCBgYnBmX21lbWNtcGAsIHdoaWNoIGFsbG93IEJQRiBwcm9ncmFtcyB0byBwZXJmb3JtIHN0cmluZyBhbmQgbWVtb3J5IGNvbXBhcmlzb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIEJQRiBoZWxwZXIgbGlicmFyeSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBoYW5kbGUgdmFyaW91cyBpbnB1dHMgc2FmZWx5LCBlc3BlY2lhbGx5IHNpbmNlIHRoZXkgZGVhbCB3aXRoIG1lbW9yeSBhY2Nlc3MgYW5kIHBvdGVudGlhbCBwYWdlIGZhdWx0cy5cIioqIC0gVGhpcyBzdW1zIHVwIHRoZSBjb3JlIHJpc2sgYXNzZXNzbWVudCBhbmQganVzdGlmaWNhdGlvbiBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNzEsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDAzOjM1OjA0LjA0MjI2Mjg0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zdHJwYnJrXCIsXG4gICAgXCJicGZfbWVtY21wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB0d28gbmV3IEJQRiBrZnVuY3MsIGBicGZfc3RycGJya2AgYW5kIGBicGZfbWVtY21wYCwgd2hpY2ggYWxsb3cgQlBGIHByb2dyYW1zIHRvIHBlcmZvcm0gc3RyaW5nIGFuZCBtZW1vcnkgY29tcGFyaXNvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIGhlbHBlciBsaWJyYXJ5IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB2YXJpb3VzIGlucHV0cyBzYWZlbHksIGVzcGVjaWFsbHkgc2luY2UgdGhleSBkZWFsIHdpdGggbWVtb3J5IGFjY2VzcyBhbmQgcG90ZW50aWFsIHBhZ2UgZmF1bHRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zdHJwYnJrXCIsXG4gICAgXCJicGZfbWVtY21wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB0d28gbmV3IEJQRiBrZnVuY3MsIGBicGZfc3RycGJya2AgYW5kIGBicGZfbWVtY21wYCwgd2hpY2ggYWxsb3cgQlBGIHByb2dyYW1zIHRvIHBlcmZvcm0gc3RyaW5nIGFuZCBtZW1vcnkgY29tcGFyaXNvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIGhlbHBlciBsaWJyYXJ5IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB2YXJpb3VzIGlucHV0cyBzYWZlbHksIGVzcGVjaWFsbHkgc2luY2UgdGhleSBkZWFsIHdpdGggbWVtb3J5IGFjY2VzcyBhbmQgcG90ZW50aWFsIHBhZ2UgZmF1bHRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowx4hxx[1] Phase: Succeeded StartedAt: 2026-06-23 03:35:28 +0000 UTC FinishedAt: 2026-06-23 03:35:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-23 03:35:28 +0000 UTC FinishedAt: 2026-06-23 03:35:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2] Phase: Succeeded StartedAt: 2026-06-23 03:35:28 +0000 UTC FinishedAt: 2026-06-23 07:30:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 03:35:28 +0000 UTC FinishedAt: 2026-06-23 07:30:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 03:35:28 +0000 UTC FinishedAt: 2026-06-23 03:35:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 03:35:28 +0000 UTC FinishedAt: 2026-06-23 03:35:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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-workflowx4hxx/series-workflowx4hxx-convert-artifact-3249851613/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 03:35:38 +0000 UTC FinishedAt: 2026-06-23 04:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 03:35:38 +0000 UTC FinishedAt: 2026-06-23 04:01:12 +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:*10fadfba-4373-4fef-ba36-e476a26ee87d,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-workflowx4hxx/series-workflowx4hxx-convert-artifact-3249851613/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": "3739d32c-47b7-405d-9b1c-307b9545b32d", "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-workflowx4hxx/series-workflowx4hxx-build-action-3459751955/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 03:35:38 +0000 UTC FinishedAt: 2026-06-23 04:01:02 +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:*10fadfba-4373-4fef-ba36-e476a26ee87d,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-workflowx4hxx/series-workflowx4hxx-convert-artifact-3249851613/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": "3739d32c-47b7-405d-9b1c-307b9545b32d", "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-workflowx4hxx/series-workflowx4hxx-build-action-3459751955/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:01:12 +0000 UTC FinishedAt: 2026-06-23 04:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:01:12 +0000 UTC FinishedAt: 2026-06-23 04:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:01:12 +0000 UTC FinishedAt: 2026-06-23 04:01:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:01:12 +0000 UTC FinishedAt: 2026-06-23 04:01:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-workflowx4hxx/series-workflowx4hxx-convert-artifact-2205535928/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:01:23 +0000 UTC FinishedAt: 2026-06-23 04:03:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:01:23 +0000 UTC FinishedAt: 2026-06-23 04:03:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3739d32c-47b7-405d-9b1c-307b9545b32d,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-workflowx4hxx/series-workflowx4hxx-build-action-3459751955/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-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:03:13 +0000 UTC FinishedAt: 2026-06-23 04:03:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:03:13 +0000 UTC FinishedAt: 2026-06-23 04:03:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:03:13 +0000 UTC FinishedAt: 2026-06-23 04:26:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:03:13 +0000 UTC FinishedAt: 2026-06-23 04:26:04 +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:*10fadfba-4373-4fef-ba36-e476a26ee87d,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-workflowx4hxx/series-workflowx4hxx-convert-artifact-2205535928/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": "2fe55ea0-b06b-484c-b846-d817e8751fa6", "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-workflowx4hxx/series-workflowx4hxx-build-action-831121316/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-23 04:03:13 +0000 UTC FinishedAt: 2026-06-23 04:25:54 +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:*10fadfba-4373-4fef-ba36-e476a26ee87d,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-workflowx4hxx/series-workflowx4hxx-convert-artifact-2205535928/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": "2fe55ea0-b06b-484c-b846-d817e8751fa6", "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-workflowx4hxx/series-workflowx4hxx-build-action-831121316/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:26:04 +0000 UTC FinishedAt: 2026-06-23 04:26:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:26:04 +0000 UTC FinishedAt: 2026-06-23 04:26:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:26:04 +0000 UTC FinishedAt: 2026-06-23 04:28:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:26:04 +0000 UTC FinishedAt: 2026-06-23 04:27:50 +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:*2fe55ea0-b06b-484c-b846-d817e8751fa6,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-workflowx4hxx/series-workflowx4hxx-build-action-831121316/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-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:28:00 +0000 UTC FinishedAt: 2026-06-23 07:30:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:28:00 +0000 UTC FinishedAt: 2026-06-23 07:30:01 +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:*3739d32c-47b7-405d-9b1c-307b9545b32d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2fe55ea0-b06b-484c-b846-d817e8751fa6,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-workflowx4hxx/series-workflowx4hxx-build-action-3459751955/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-workflowx4hxx/series-workflowx4hxx-build-action-831121316/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:28:00 +0000 UTC FinishedAt: 2026-06-23 04:28:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:28:00 +0000 UTC FinishedAt: 2026-06-23 04:28:06 +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-workflowx4hxx/series-workflowx4hxx-convert-artifact-2534464529/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:28:00 +0000 UTC FinishedAt: 2026-06-23 04:28:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:28:00 +0000 UTC FinishedAt: 2026-06-23 04:28:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:28:01 +0000 UTC FinishedAt: 2026-06-23 04:28:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:28:11 +0000 UTC FinishedAt: 2026-06-23 07:30:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4hxx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","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":"d9c8c45e6d2f438a3c8e643ae78b59454fa0fadd","config_name":"upstream-apparmor-kasan.config","series_id":"903d6c86-5f28-4c0f-bdd7-03ae52db2997","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-23 04:28:11 +0000 UTC FinishedAt: 2026-06-23 07:29:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3739d32c-47b7-405d-9b1c-307b9545b32d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2fe55ea0-b06b-484c-b846-d817e8751fa6,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-workflowx4hxx/series-workflowx4hxx-build-action-3459751955/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-workflowx4hxx/series-workflowx4hxx-build-action-831121316/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-workflowx4hxx/series-workflowx4hxx-convert-artifact-2534464529/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,}